diff --git a/404.html b/404.html index f36de46..45b2caa 100644 --- a/404.html +++ b/404.html @@ -5,8 +5,8 @@ Page Not Found | Codex - - + +
@@ -15,7 +15,7 @@ ) .lsd-dropdown__trigger:hover .lsd-dropdown__option-label,.lsd-dropdown:not(.lsd-dropdown--disabled):not( .lsd-dropdown--error ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}
Skip to main content

Page Not Found

We could not find what you were looking for.
Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- - + + \ No newline at end of file diff --git a/_og/112dd9da77afa8f6cb27435eb1166d1277185c9c.png b/_og/112dd9da77afa8f6cb27435eb1166d1277185c9c.png new file mode 100644 index 0000000..b908ccd Binary files /dev/null and b/_og/112dd9da77afa8f6cb27435eb1166d1277185c9c.png differ diff --git a/_og/2016d85d4585b3848b13f46a5ef54875657776fd.png b/_og/2016d85d4585b3848b13f46a5ef54875657776fd.png new file mode 100644 index 0000000..cbe708e Binary files /dev/null and b/_og/2016d85d4585b3848b13f46a5ef54875657776fd.png differ diff --git a/_og/2c8fce8c77a84d242ae5c69c1d39cbc0d0254fa8.png b/_og/2c8fce8c77a84d242ae5c69c1d39cbc0d0254fa8.png new file mode 100644 index 0000000..07809bf Binary files /dev/null and b/_og/2c8fce8c77a84d242ae5c69c1d39cbc0d0254fa8.png differ diff --git a/_og/54f12d2efd2dd3f336834f8e7d7be246253a0e3d.png b/_og/54f12d2efd2dd3f336834f8e7d7be246253a0e3d.png new file mode 100644 index 0000000..6c56592 Binary files /dev/null and b/_og/54f12d2efd2dd3f336834f8e7d7be246253a0e3d.png differ diff --git a/_og/8649c842d2ac4ae8a64ef6a89e959466d9c90940.png b/_og/8649c842d2ac4ae8a64ef6a89e959466d9c90940.png new file mode 100644 index 0000000..4016f91 Binary files /dev/null and b/_og/8649c842d2ac4ae8a64ef6a89e959466d9c90940.png differ diff --git a/_og/a2e3b5e024826cf9c5864d2a6c3d45ee3345fd70.png b/_og/a2e3b5e024826cf9c5864d2a6c3d45ee3345fd70.png new file mode 100644 index 0000000..4628eaf Binary files /dev/null and b/_og/a2e3b5e024826cf9c5864d2a6c3d45ee3345fd70.png differ diff --git a/_og/b73716415c1022595297f24eba4fd39c91bc5928.png b/_og/b73716415c1022595297f24eba4fd39c91bc5928.png new file mode 100644 index 0000000..d416dde Binary files /dev/null and b/_og/b73716415c1022595297f24eba4fd39c91bc5928.png differ diff --git a/_og/ca117f6deb15ae283d377124c417d84d61af90da.png b/_og/ca117f6deb15ae283d377124c417d84d61af90da.png new file mode 100644 index 0000000..a4fb436 Binary files /dev/null and b/_og/ca117f6deb15ae283d377124c417d84d61af90da.png differ diff --git a/_og/d391c4025de395d8f4a4ab77e6dee6698749ab54.png b/_og/d391c4025de395d8f4a4ab77e6dee6698749ab54.png new file mode 100644 index 0000000..c4ddb1d Binary files /dev/null and b/_og/d391c4025de395d8f4a4ab77e6dee6698749ab54.png differ diff --git a/_og/e55a46bb475952ef6e1be309970943e7d34cbfb5.png b/_og/e55a46bb475952ef6e1be309970943e7d34cbfb5.png new file mode 100644 index 0000000..c55d441 Binary files /dev/null and b/_og/e55a46bb475952ef6e1be309970943e7d34cbfb5.png differ diff --git a/_og/f24b600dc05377e274e49dcfeafc9f7d547f7a31.png b/_og/f24b600dc05377e274e49dcfeafc9f7d547f7a31.png new file mode 100644 index 0000000..7937928 Binary files /dev/null and b/_og/f24b600dc05377e274e49dcfeafc9f7d547f7a31.png differ diff --git a/_og/f73f548367b8b320e4038fb4262fd8c08d40ec3b.png b/_og/f73f548367b8b320e4038fb4262fd8c08d40ec3b.png new file mode 100644 index 0000000..12d749a Binary files /dev/null and b/_og/f73f548367b8b320e4038fb4262fd8c08d40ec3b.png differ diff --git a/about/architect/index.html b/about/architect/index.html index 1d0e81d..df8ac48 100644 --- a/about/architect/index.html +++ b/about/architect/index.html @@ -3,19 +3,19 @@ -Description and architecture | Codex +Description and architecture | Codex - - - + + +
Skip to main content

Description and architecture

Codex is building a durable data storage engine that is fully decentralised, providing corruption and censorship resistance to web3 applications. It innately protects network participants by giving hosts plausible deniability over the data they store, and clients provable durability guarantees—up to 99.99%—while remaining storage and bandwidth efficient.

These four key features combine to differentiate Codex from existing projects in the decentralised storage niche:

  • Erasure coding: Provides efficient data redundancy, which increases data durability guarantees.

  • ZK-based proof-of-retrievability: For lightweight data durability assurances.

  • Lazy repair mechanism: For efficient data reconstruction and loss prevention.

  • Incentivization: To encourage rational behaviour, widespread network participation, and the efficient provision of finite network resources.


Incentivized decentralisation

Incentivization mechanisms are one of the key pieces missing from traditional file-sharing networks. Codex believes that a robust marketplace-based incentive structure will ensure wide participation across the node types detailed below.

The development of an adequate incentive structure is driven by the following goals:

  • Supply and demand to encourage optimum network resource usage.

  • Increase participation by enabling nodes to utilise their competitive advantages to maximise profits.

  • Prevent spam and discourage malicious participation.

Although still to be finalised, the Codex incentive structure will involve a marketplace of participants who want to store data, and those provisioning storage posting collateral, with the latter bidding on open storage contracts. This structure aims to ensure that participants' incentives align, resulting in Codex functioning as intended.


Network architecture

Codex is composed of multiple node types, each taking a different role in the network's operation. Similarly, the hardware demands for each node type vary, enabling those operating resource-restricted devices to participate.

Storage nodes

As Codex's long-term reliable storage providers, storage nodes stake collateral based on the collateral posted on the request side of contracts, and the number of slots that a contract has. This is tied to the durability demanded by the user. Failure to provide periodic proof of data possession results in slashing penalties.

Aggregator Node

A method for off-loading erasure coding, proof generation and proof aggregation by a client node with low-resources, currently a WIP and will be part of subsequent Codex release Q2/Q4 next year.

Client nodes

Client nodes make requests for other nodes to store, find, and retrieve data. Most of the Codex network will be Client nodes, and these participants can double as caching nodes to offset the cost of the network resources they consume.

When a node commits to a storage contract and a user uploads data, the network will proactively verify that the storage node is online and that the data is retrievable. Storage nodes are then randomly queried to broadcast proofs of data possession over an interval corresponding to the contract duration and 9's of retrievability guarantee the protocol provides.

If the storage node sends invalid proofs or fails to provide them in time, the network evicts the storage node from the slot, and the slot will become available for the first node that generates a valid proof for that slot.

When the contract is reposted, some of the faulty node's collateral pays for the new storage node's bandwidth fees. Erasure coding complements the repair scheme by allowing the reconstruction of the missing chunks from data in other slots within the same storage contract hosted by faultless storage nodes.


architect


Read the Codex whitepaper

- - + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}
Skip to main content

Description and architecture

Codex is building a durable data storage engine that is fully decentralised, providing corruption and censorship resistance to web3 applications. It innately protects network participants by giving hosts plausible deniability over the data they store, and clients provable durability guarantees—up to 99.99%—while remaining storage and bandwidth efficient.

These four key features combine to differentiate Codex from existing projects in the decentralised storage niche:

  • Erasure coding: Provides efficient data redundancy, which increases data durability guarantees.

  • ZK-based proof-of-retrievability: For lightweight data durability assurances.

  • Lazy repair mechanism: For efficient data reconstruction and loss prevention.

  • Incentivization: To encourage rational behaviour, widespread network participation, and the efficient provision of finite network resources.


Incentivized decentralisation

Incentivization mechanisms are one of the key pieces missing from traditional file-sharing networks. Codex believes that a robust marketplace-based incentive structure will ensure wide participation across the node types detailed below.

The development of an adequate incentive structure is driven by the following goals:

  • Supply and demand to encourage optimum network resource usage.

  • Increase participation by enabling nodes to utilise their competitive advantages to maximise profits.

  • Prevent spam and discourage malicious participation.

Although still to be finalised, the Codex incentive structure will involve a marketplace of participants who want to store data, and those provisioning storage posting collateral, with the latter bidding on open storage contracts. This structure aims to ensure that participants' incentives align, resulting in Codex functioning as intended.


Network architecture

Codex is composed of multiple node types, each taking a different role in the network's operation. Similarly, the hardware demands for each node type vary, enabling those operating resource-restricted devices to participate.

Storage nodes

As Codex's long-term reliable storage providers, storage nodes stake collateral based on the collateral posted on the request side of contracts, and the number of slots that a contract has. This is tied to the durability demanded by the user. Failure to provide periodic proof of data possession results in slashing penalties.

Aggregator Node

A method for off-loading erasure coding, proof generation and proof aggregation by a client node with low-resources, currently a WIP and will be part of subsequent Codex release Q2/Q4 next year.

Client nodes

Client nodes make requests for other nodes to store, find, and retrieve data. Most of the Codex network will be Client nodes, and these participants can double as caching nodes to offset the cost of the network resources they consume.

When a node commits to a storage contract and a user uploads data, the network will proactively verify that the storage node is online and that the data is retrievable. Storage nodes are then randomly queried to broadcast proofs of data possession over an interval corresponding to the contract duration and 9's of retrievability guarantee the protocol provides.

If the storage node sends invalid proofs or fails to provide them in time, the network evicts the storage node from the slot, and the slot will become available for the first node that generates a valid proof for that slot.

When the contract is reposted, some of the faulty node's collateral pays for the new storage node's bandwidth fees. Erasure coding complements the repair scheme by allowing the reconstruction of the missing chunks from data in other slots within the same storage contract hosted by faultless storage nodes.


architect


Read the Codex whitepaper

+ + \ No newline at end of file diff --git a/about/faq/index.html b/about/faq/index.html index 889d95d..5e4238b 100644 --- a/about/faq/index.html +++ b/about/faq/index.html @@ -3,19 +3,19 @@ -Frequently asked questions | Codex +Frequently asked questions | Codex - - - + + +
Skip to main content

Frequently asked questions

Codex is a state-of-the-art, decentralized storage protocol that provides a solution for highly durable data storage with high decentralization, aiming to resist censorship and prevent single points of failure inherent in centralized systems.
Unlike centralized systems, Codex is designed to offer data durability, resiliency to cloud failures, and censorship resistance, making it vital for use cases like preserving factual history records.
While no system can promise absolute data loss protection, Codex's architecture, economic incentives, and encoding algorithms aim to provide high data durability with the novel implementation of techniques such as Erasure Coding and Lazy Repair.
Data Durability means how likely it is that data will stay safe over time. For instance, a storage system with durability of eleven nines (99.999999999%) means there's a very tiny chance (0.0000000001%) of losing data. In simple terms, you might lose only one file out of a million over ten million years. Data Durability is crucial because losing even a little data can be a big problem. Codex uses techniques like erasure coding to keep data safe. This method splits data and stores it in different places. So, if a piece is lost or damaged, the other pieces can be used to recreate the original data. This keeps users' data secure and intact.
Erasure Coding is a way to protect data by breaking it into parts, adding extra data for safety, and then spreading these parts across various locations or systems. On Codex, this involves splitting data into pieces, known as "shards," along with extra "parity shards" for backup. These parity shards are created using mathematical formulas based on the original data, helping to rebuild the data if some shards go missing or get damaged. This method lets Codex offer consistent and reliable data storage, meaning that as long as a certain number of shards (N out of M) are safe, the entire original data can be perfectly restored, ensuring a high level of data safety.
Lazy Repair is a method in distributed storage systems for managing data issues. In Codex, if a piece of data (a shard) is lost or damaged, the system doesn't fix it right away. It waits until there's enough damage to make repair worthwhile. This is efficient because it saves resources by not addressing small problems that don't harm the overall data. The system only repairs when the number of good shards drops too low, balancing resource use with keeping data safe and available.
Yes, Codex is expected to serve as the storage pillar of Logos, the protocol protecting Logos organizational data, aligning with the broader Logos initiative.
Codex distinguishes itself from other storage solutions in the market through several key features: having an Advanced Marketplace and Data Distribution, and using SNARKS for Data Loss Detection.
Codex features an advanced marketplace that promotes high levels of decentralization and efficient data distribution. This structure prevents the concentration of data in a few large nodes, enhancing the efficiency of data repair and retrieval. In contrast, other protocols design their systems to create "supernodes".
Codex incorporates succinct non-interactive arguments of knowledge (SNARKS) for efficient and reliable data loss detection. Storage Providers (SPs) respond to challenges by sending proofs to Proof Aggregators, who verify and post these proofs to the blockchain. If an SP fails to prove possession of data or sends invalid proof, their collateral is slashed, providing an economic incentive to ensure data durability.
Yes, Codex is discussing with various blockchain projects to preserve their full chain state and history in a way that resists censorship and does not require full history to be stored locally by every node.
Codex is currently undergoing extensive internal testing. The upcoming public testnet is planned for Q1 2024.
Codex can handle various types of data but is particularly suited for mission-critical history and state information for Web3 applications that need to remain unaltered, and accessible.
No, the design allows for storing vast amounts of data without requiring every node to store the full history.
Codex consists of a p2p network of Storage Nodes, Aggregator Nodes, Caching Nodes, and Client Nodes.
Storage nodes provide long-term reliable storage. For a storage node to operate it needs to stake a collateral proportional to the amount of data it's willing to store. Once the collateral has been staked and the node begins to store data, it needs to periodically provide proof of data possession. If a node fails to provide proof in time, it is penalized with a portion of its stake; if the node fails to provide proof several times in a row, it loses the entirety of the stake.
Aggregator nodes are in charge of collecting, validating, and submitting proofs to an adjudicator contract which rewards and penalizes storage and other validator nodes. A validator node also needs to stake collateral to be able to participate in the validation process. Note that we don't use the term "adjudicator contract" in the literal sense of an Ethereum contract. We use it to indicate anything that executes on a consensus engine.
Bandwidth incentives allow anyone to operate as a caching node, profiting only from caching and serving popular content. We expect this to have the emergent property of an organic CDN, where nodes with spare bandwidth but limited or unreliable storage can collectively scale the network depending on current demands. Any node can become a caching node for any period, even ephemeral nodes.
Client Nodes engage with other nodes to store, find, and retrieve data from the network. We expect regular nodes to be the most common type of node in the Codex Network. These will consume services offered by other nodes in exchange for payments. A regular node can also be a caching node by storing previously consumed data that other nodes can retrieve from it. This allows nodes to offset some of the cost of participating in the network and it's expected to allow the majority of nodes to participate on an almost free basis after an initial entree fee. Unlike the other types of nodes, we expect the regular nodes to have intermittent up-time as they are running on personal computers and mobile devices.
Not yet. Stay tuned for more updates from the Codex project for when you can utilize your application on top of the Codex network.
No Codex token has been issued yet. Please be wary of impersonators claiming the issuance of Codex tokens or any form of Codex airdrop.
The Codex token is a utility token, serving as collateral for Storage Providers and a means of compensation in the storage contracts.
Yes. The testnet phase is set for Q1 2024, stay tuned.
Not yet. However, you will be able to participate in the testnet phase of Q1 2024. Stay tuned.
- - + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}
Skip to main content

Frequently asked questions

Codex is a state-of-the-art, decentralized storage protocol that provides a solution for highly durable data storage with high decentralization, aiming to resist censorship and prevent single points of failure inherent in centralized systems.
Unlike centralized systems, Codex is designed to offer data durability, resiliency to cloud failures, and censorship resistance, making it vital for use cases like preserving factual history records.
While no system can promise absolute data loss protection, Codex's architecture, economic incentives, and encoding algorithms aim to provide high data durability with the novel implementation of techniques such as Erasure Coding and Lazy Repair.
Data Durability means how likely it is that data will stay safe over time. For instance, a storage system with durability of eleven nines (99.999999999%) means there's a very tiny chance (0.0000000001%) of losing data. In simple terms, you might lose only one file out of a million over ten million years. Data Durability is crucial because losing even a little data can be a big problem. Codex uses techniques like erasure coding to keep data safe. This method splits data and stores it in different places. So, if a piece is lost or damaged, the other pieces can be used to recreate the original data. This keeps users' data secure and intact.
Erasure Coding is a way to protect data by breaking it into parts, adding extra data for safety, and then spreading these parts across various locations or systems. On Codex, this involves splitting data into pieces, known as "shards," along with extra "parity shards" for backup. These parity shards are created using mathematical formulas based on the original data, helping to rebuild the data if some shards go missing or get damaged. This method lets Codex offer consistent and reliable data storage, meaning that as long as a certain number of shards (N out of M) are safe, the entire original data can be perfectly restored, ensuring a high level of data safety.
Lazy Repair is a method in distributed storage systems for managing data issues. In Codex, if a piece of data (a shard) is lost or damaged, the system doesn't fix it right away. It waits until there's enough damage to make repair worthwhile. This is efficient because it saves resources by not addressing small problems that don't harm the overall data. The system only repairs when the number of good shards drops too low, balancing resource use with keeping data safe and available.
Yes, Codex is expected to serve as the storage pillar of Logos, the protocol protecting Logos organizational data, aligning with the broader Logos initiative.
Codex distinguishes itself from other storage solutions in the market through several key features: having an Advanced Marketplace and Data Distribution, and using SNARKS for Data Loss Detection.
Codex features an advanced marketplace that promotes high levels of decentralization and efficient data distribution. This structure prevents the concentration of data in a few large nodes, enhancing the efficiency of data repair and retrieval. In contrast, other protocols design their systems to create "supernodes".
Codex incorporates succinct non-interactive arguments of knowledge (SNARKS) for efficient and reliable data loss detection. Storage Providers (SPs) respond to challenges by sending proofs to Proof Aggregators, who verify and post these proofs to the blockchain. If an SP fails to prove possession of data or sends invalid proof, their collateral is slashed, providing an economic incentive to ensure data durability.
Yes, Codex is discussing with various blockchain projects to preserve their full chain state and history in a way that resists censorship and does not require full history to be stored locally by every node.
Codex is currently undergoing extensive internal testing. The upcoming public testnet is planned for Q1 2024.
Codex can handle various types of data but is particularly suited for mission-critical history and state information for Web3 applications that need to remain unaltered, and accessible.
No, the design allows for storing vast amounts of data without requiring every node to store the full history.
Codex consists of a p2p network of Storage Nodes, Aggregator Nodes, Caching Nodes, and Client Nodes.
Storage nodes provide long-term reliable storage. For a storage node to operate it needs to stake a collateral proportional to the amount of data it's willing to store. Once the collateral has been staked and the node begins to store data, it needs to periodically provide proof of data possession. If a node fails to provide proof in time, it is penalized with a portion of its stake; if the node fails to provide proof several times in a row, it loses the entirety of the stake.
Aggregator nodes are in charge of collecting, validating, and submitting proofs to an adjudicator contract which rewards and penalizes storage and other validator nodes. A validator node also needs to stake collateral to be able to participate in the validation process. Note that we don't use the term "adjudicator contract" in the literal sense of an Ethereum contract. We use it to indicate anything that executes on a consensus engine.
Bandwidth incentives allow anyone to operate as a caching node, profiting only from caching and serving popular content. We expect this to have the emergent property of an organic CDN, where nodes with spare bandwidth but limited or unreliable storage can collectively scale the network depending on current demands. Any node can become a caching node for any period, even ephemeral nodes.
Client Nodes engage with other nodes to store, find, and retrieve data from the network. We expect regular nodes to be the most common type of node in the Codex Network. These will consume services offered by other nodes in exchange for payments. A regular node can also be a caching node by storing previously consumed data that other nodes can retrieve from it. This allows nodes to offset some of the cost of participating in the network and it's expected to allow the majority of nodes to participate on an almost free basis after an initial entree fee. Unlike the other types of nodes, we expect the regular nodes to have intermittent up-time as they are running on personal computers and mobile devices.
Not yet. Stay tuned for more updates from the Codex project for when you can utilize your application on top of the Codex network.
No Codex token has been issued yet. Please be wary of impersonators claiming the issuance of Codex tokens or any form of Codex airdrop.
The Codex token is a utility token, serving as collateral for Storage Providers and a means of compensation in the storage contracts.
Yes. The testnet phase is set for Q1 2024, stay tuned.
Not yet. However, you will be able to participate in the testnet phase of Q1 2024. Stay tuned.
+ + \ No newline at end of file diff --git a/about/index.html b/about/index.html index 4b118af..3417e9d 100644 --- a/about/index.html +++ b/about/index.html @@ -3,19 +3,19 @@ -About Codex | Codex +About Codex | Codex - - - + + +
Skip to main content

About Codex

Codex is a decentralised data storage platform that provides exceptionally strong censorship resistance and durability guarantees. It serves as the storage layer of the Logos tech stack. Alongside the trustless agreement layer, Nomos, and the communications layer, Waku, it is one of the Logos Collective's foundational projects.


Motive

The remote storage landscape is dominated by an increasingly small number of internet powerhouses—Google, Microsoft, Amazon, etc. While these services score highly in terms of user experience and convenience, centralised cloud data storage suffers from the following drawbacks:

  • Censorship

  • Lack of data ownership

  • Breaches and outages

  • High cost

Centralised cloud storage providers have an established history of censoring data and, as de facto owners of said data, have the power to do so according to their own standards. Furthermore, centralised platforms have fallen victim to major data breaches and service outages on numerous occasions.

Such incidents have created a gap in the market for a decentralised, censorship-resistant alternative. Existing peer-to-peer storage and file-sharing networks address some of these issues—such as robustness in the face of network disruptions, and desirable resistance to censorship. Yet without adequate incentives and strong data durability guarantees, they make for unsuitable foundations upon which to build truly unstoppable applications.

Existing decentralised storage solutions purport to improve upon early P2P file-sharing platforms like eDonkey and Gnutella. However, the market still lacks a decentralised storage solution that is efficient in terms of storage and bandwidth usage, while offering performance and durability guarantees comparable to incumbents.


Decentralising data storage

Codex began in 2021 to address a need for a durable, decentralised storage layer for the web3 tech stack.

The name "Codex" refers to an ancient form of book—an allusion to the data storage engine's extremely robust—99.99%—durability guarantees.

Codex was announced as a core Logos Collective protocol in June 2023.

- - + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}
Skip to main content

About Codex

Codex is a decentralised data storage platform that provides exceptionally strong censorship resistance and durability guarantees. It serves as the storage layer of the Logos tech stack. Alongside the trustless agreement layer, Nomos, and the communications layer, Waku, it is one of the Logos Collective's foundational projects.


Motive

The remote storage landscape is dominated by an increasingly small number of internet powerhouses—Google, Microsoft, Amazon, etc. While these services score highly in terms of user experience and convenience, centralised cloud data storage suffers from the following drawbacks:

  • Censorship

  • Lack of data ownership

  • Breaches and outages

  • High cost

Centralised cloud storage providers have an established history of censoring data and, as de facto owners of said data, have the power to do so according to their own standards. Furthermore, centralised platforms have fallen victim to major data breaches and service outages on numerous occasions.

Such incidents have created a gap in the market for a decentralised, censorship-resistant alternative. Existing peer-to-peer storage and file-sharing networks address some of these issues—such as robustness in the face of network disruptions, and desirable resistance to censorship. Yet without adequate incentives and strong data durability guarantees, they make for unsuitable foundations upon which to build truly unstoppable applications.

Existing decentralised storage solutions purport to improve upon early P2P file-sharing platforms like eDonkey and Gnutella. However, the market still lacks a decentralised storage solution that is efficient in terms of storage and bandwidth usage, while offering performance and durability guarantees comparable to incumbents.


Decentralising data storage

Codex began in 2021 to address a need for a durable, decentralised storage layer for the web3 tech stack.

The name "Codex" refers to an ancient form of book—an allusion to the data storage engine's extremely robust—99.99%—durability guarantees.

Codex was announced as a core Logos Collective protocol in June 2023.

+ + \ No newline at end of file diff --git a/about/roadmap/index.html b/about/roadmap/index.html index f257848..5937a15 100644 --- a/about/roadmap/index.html +++ b/about/roadmap/index.html @@ -3,19 +3,19 @@ -Development roadmap | Codex +Development roadmap | Codex - - - + + +
Skip to main content

Development roadmap

Releases

Codex is currently in its first proof of concept iteration, codenamed Dagger. Before Katana (its forthcoming testnet release, expected before the end of 2023) we aim to deliver two additional PoC clients, Scimitar and Longsword.

  • Dagger: Codex's first PoC and current version.

  • Scimitar: The PoC-2 client will implement fast erasure coding, the marketplace, and partial durability guarantees—expected end of Q3 2023.

  • Katana: Codex v1 will offer SNARK-based remote auditing


Milestones

The Codex team's subgroups are working on the major milestones detailed below to deliver Codex with the qualities described:

  • Testing:

    • Develop and maintain testnet and devnet
  • Client:

    • Release Scimitar
    • Develop initial data repair and ZK proving scheme
    • Release Longsword
    • Deploy Codex v1.0
  • Marketplace:

    • Develop the marketplace for integration in PoC-2.
    • Develop the marketplace bandwidth incentivization structure.
  • Research:

    • Write the initial ZK proving scheme
    • Conduct Data Availability Sampling research with the Ethereum Foundation

Roadmap rationale

We believe the above roadmap to be the most logical approach to building a data storage engine with stronger durability guarantees and resistance to censorship than currently offered by Codex's centralised or decentralised counterparts.

First, we must establish a mechanism through which users can initiate a contract with a storage provider to host their data. Then, we can add erasure coding, required for efficient redundancy and auditing. Next, the system will need a mechanism to prove the hosts still have data available. Finally, repairs must be incentivized. Naturally, each layer of sophistication requires testing for economic and technical feasibility.

Contribute to Codex

- - + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}
Skip to main content

Development roadmap

Releases

Codex is currently in its first proof of concept iteration, codenamed Dagger. Before Katana (its forthcoming testnet release, expected before the end of 2023) we aim to deliver two additional PoC clients, Scimitar and Longsword.

  • Dagger: Codex's first PoC and current version.

  • Scimitar: The PoC-2 client will implement fast erasure coding, the marketplace, and partial durability guarantees—expected end of Q3 2023.

  • Katana: Codex v1 will offer SNARK-based remote auditing


Milestones

The Codex team's subgroups are working on the major milestones detailed below to deliver Codex with the qualities described:

  • Testing:

    • Develop and maintain testnet and devnet
  • Client:

    • Release Scimitar
    • Develop initial data repair and ZK proving scheme
    • Release Longsword
    • Deploy Codex v1.0
  • Marketplace:

    • Develop the marketplace for integration in PoC-2.
    • Develop the marketplace bandwidth incentivization structure.
  • Research:

    • Write the initial ZK proving scheme
    • Conduct Data Availability Sampling research with the Ethereum Foundation

Roadmap rationale

We believe the above roadmap to be the most logical approach to building a data storage engine with stronger durability guarantees and resistance to censorship than currently offered by Codex's centralised or decentralised counterparts.

First, we must establish a mechanism through which users can initiate a contract with a storage provider to host their data. Then, we can add erasure coding, required for efficient redundancy and auditing. Next, the system will need a mechanism to prove the hosts still have data available. Finally, repairs must be incentivized. Naturally, each layer of sophistication requires testing for economic and technical feasibility.

Contribute to Codex

+ + \ No newline at end of file diff --git a/about/team/index.html b/about/team/index.html index c465815..b3d9aca 100644 --- a/about/team/index.html +++ b/about/team/index.html @@ -3,19 +3,19 @@ -Core contributors | Codex +Core contributors | Codex - - - + + +
Skip to main content

Core contributors

Codex is developed by highly experienced protocol and software developers, distributed systems experts, and ZK-cryptography researchers with backgrounds in academia, mainstream tech, and web3.

The contributors working on Codex are split into the subgroups below:

  • Codex general

  • Codex marketplace

  • Codex client

  • Codex research

Codex is looking for more contributors to help build the network. Check out the open positions linked below. As an open-source public goods project Codex also welcomes community contributions. Please check out our Github repo here.

Work with us

- - + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}
Skip to main content

Core contributors

Codex is developed by highly experienced protocol and software developers, distributed systems experts, and ZK-cryptography researchers with backgrounds in academia, mainstream tech, and web3.

The contributors working on Codex are split into the subgroups below:

  • Codex general

  • Codex marketplace

  • Codex client

  • Codex research

Codex is looking for more contributors to help build the network. Check out the open positions linked below. As an open-source public goods project Codex also welcomes community contributions. Please check out our Github repo here.

Work with us

+ + \ No newline at end of file diff --git a/assets/js/85cd0eac.de6eddb8.js b/assets/js/85cd0eac.de6eddb8.js new file mode 100644 index 0000000..d403a82 --- /dev/null +++ b/assets/js/85cd0eac.de6eddb8.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkcodex_docusaurus_template=self.webpackChunkcodex_docusaurus_template||[]).push([[407],{28802:(e,t,r)=>{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>o,metadata:()=>c,toc:()=>s});var n=r(87462),a=(r(67294),r(3905));const o={displayed_sidebar:null,sidebar_class_name:"hidden",pagination_prev:null,pagination_next:null},i="Security",c={unversionedId:"security",id:"security",title:"Security",description:"We take security seriously at Codex and across the Institute of Free Technology and its affiliates.",source:"@site/root-pages/security.md",sourceDirName:".",slug:"/security",permalink:"/security",draft:!1,tags:[],version:"current",frontMatter:{displayed_sidebar:null,sidebar_class_name:"hidden",pagination_prev:null,pagination_next:null}},l={},s=[],u={toc:s};function p(e){let{components:t,...r}=e;return(0,a.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,a.kt)("h1",{id:"security"},"Security"),(0,a.kt)("p",null,"We take security seriously at Codex and across the ",(0,a.kt)("a",{href:"https://free.technology/",target:"_blank"},"Institute of Free Technology")," and its affiliates."),(0,a.kt)("p",null,"Please report any security incidents via ",(0,a.kt)("a",{href:"mailto:security@free.technology"},(0,a.kt)("a",{parentName:"p",href:"mailto:security@free.technology"},"security@free.technology")),"."))}p.isMDXComponent=!0},3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>f});var n=r(67294);function a(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function o(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(a[r]=e[r]);return a}(e,t);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(a[r]=e[r])}return a}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},y=n.forwardRef((function(e,t){var r=e.components,a=e.mdxType,o=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),y=s(r),f=a,d=y["".concat(l,".").concat(f)]||y[f]||p[f]||o;return r?n.createElement(d,i(i({ref:t},u),{},{components:r})):n.createElement(d,i({ref:t},u))}));function f(e,t){var r=arguments,a=t&&t.mdxType;if("string"==typeof e||a){var o=r.length,i=new Array(o);i[0]=y;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:a,i[1]=c;for(var s=2;s{r.r(t),r.d(t,{assets:()=>l,contentTitle:()=>i,default:()=>p,frontMatter:()=>a,metadata:()=>c,toc:()=>s});var n=r(87462),o=(r(67294),r(3905));const a={displayed_sidebar:null,sidebar_class_name:"hidden",pagination_prev:null,pagination_next:null},i="Security",c={unversionedId:"security",id:"security",title:"Security",description:"We take security seriously at Codex and across the Institute of Free Technology and its affiliates.",source:"@site/root-pages/security.md",sourceDirName:".",slug:"/security",permalink:"/security",draft:!1,tags:[],version:"current",frontMatter:{displayed_sidebar:null,sidebar_class_name:"hidden",pagination_prev:null,pagination_next:null}},l={},s=[],u={toc:s};function p(e){let{components:t,...r}=e;return(0,o.kt)("wrapper",(0,n.Z)({},u,r,{components:t,mdxType:"MDXLayout"}),(0,o.kt)("h1",{id:"security"},"Security"),(0,o.kt)("p",null,"We take security seriously at Codex and across the ",(0,o.kt)("a",{href:"https://free.technology/",target:"_blank"},"Institute of Free Technology")," and its affiliates."),(0,o.kt)("p",null,"Please report any security incidents via ",(0,o.kt)("a",{href:"mailto:security@free.technology"},(0,o.kt)("a",{parentName:"p",href:"mailto:security@free.technology"},"security@free.technology")),"."),(0,o.kt)("p",null,"Please report any discovered vulnerabilities in our bounty programme at ",(0,o.kt)("a",{href:"https://hackenproof.com/ift",target:"_blank"},"HackenProof")," to help ensure our protocols and software remain secure."))}p.isMDXComponent=!0},3905:(e,t,r)=>{r.d(t,{Zo:()=>u,kt:()=>y});var n=r(67294);function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function a(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function i(e){for(var t=1;t=0||(o[r]=e[r]);return o}(e,t);if(Object.getOwnPropertySymbols){var a=Object.getOwnPropertySymbols(e);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(e,r)&&(o[r]=e[r])}return o}var l=n.createContext({}),s=function(e){var t=n.useContext(l),r=t;return e&&(r="function"==typeof e?e(t):i(i({},t),e)),r},u=function(e){var t=s(e.components);return n.createElement(l.Provider,{value:t},e.children)},p={inlineCode:"code",wrapper:function(e){var t=e.children;return n.createElement(n.Fragment,{},t)}},f=n.forwardRef((function(e,t){var r=e.components,o=e.mdxType,a=e.originalType,l=e.parentName,u=c(e,["components","mdxType","originalType","parentName"]),f=s(r),y=o,d=f["".concat(l,".").concat(y)]||f[y]||p[y]||a;return r?n.createElement(d,i(i({ref:t},u),{},{components:r})):n.createElement(d,i({ref:t},u))}));function y(e,t){var r=arguments,o=t&&t.mdxType;if("string"==typeof e||o){var a=r.length,i=new Array(a);i[0]=f;var c={};for(var l in t)hasOwnProperty.call(t,l)&&(c[l]=t[l]);c.originalType=e,c.mdxType="string"==typeof e?e:o,i[1]=c;for(var s=2;s{"use strict";Object.defineProperty(t,Symbol.toStringTag,{value:"Module"});const r=n(67294),o=n(73935),a=n(70917);function i(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e)for(const n in e)if("default"!==n){const r=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,r.get?r:{enumerable:!0,get:()=>e[n]})}return t.default=e,Object.freeze(t)}const l=i(r);var s=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t2||B(N)>3?"":" "}function V(e,t){for(;--t&&R()&&!(N<48||N>102||N>57&&N<65||N>70&&N<97););return F(e,M()+(t<6&&32==j()&&32==R()))}function q(e){for(;R();)switch(N){case e:return P;case 34:case 39:34!==e&&39!==e&&q(N);break;case 40:41===e&&q(e);break;case 92:R()}return P}function G(e,t){for(;R()&&e+N!==57&&(e+N!==84||47!==j()););return"/*"+F(t,P-1)+"*"+v(47===e?e:R())}function W(e){for(;!B(j());)R();return F(e,P)}function Z(e){return $(Q("",null,null,null,[""],e=z(e),0,[0],e))}function Q(e,t,n,r,o,a,i,l,s){for(var u=0,c=0,d=i,f=0,p=0,h=0,m=1,g=1,b=1,y=0,k="",S=o,D=a,A=r,L=k;g;)switch(h=y,y=R()){case 40:if(108!=h&&58==_(L,d-1)){-1!=x(L+=w(U(y),"&","&\f"),"&\f")&&(b=-1);break}case 34:case 39:case 91:L+=U(y);break;case 9:case 10:case 13:case 32:L+=H(h);break;case 92:L+=V(M()-1,7);continue;case 47:switch(j()){case 42:case 47:C(X(G(R(),M()),t,n),s);break;default:L+="/"}break;case 123*m:l[u++]=E(L)*b;case 125*m:case 59:case 0:switch(y){case 0:case 125:g=0;case 59+c:p>0&&E(L)-d&&C(p>32?K(L+";",r,n,d-1):K(w(L," ","")+";",r,n,d-2),s);break;case 59:L+=";";default:if(C(A=Y(L,t,n,u,c,o,l,k,S=[],D=[],d),a),123===y)if(0===c)Q(L,t,A,A,S,a,d,l,D);else switch(99===f&&110===_(L,3)?100:f){case 100:case 109:case 115:Q(e,A,A,r&&C(Y(e,A,A,0,0,o,l,k,o,S=[],d),D),o,D,d,l,r?S:D);break;default:Q(L,A,A,A,[""],D,0,l,D)}}u=c=p=0,m=b=1,k=L="",d=i;break;case 58:d=1+E(L),p=h;default:if(m<1)if(123==y)--m;else if(125==y&&0==m++&&125==(N=P>0?_(I,--P):0,O--,10===N&&(O=1,T--),N))continue;switch(L+=v(y),y*m){case 38:b=c>0?1:(L+="\f",-1);break;case 44:l[u++]=(E(L)-1)*b,b=1;break;case 64:45===j()&&(L+=U(R())),f=j(),c=d=E(k=L+=W(M())),y++;break;case 45:45===h&&2==E(L)&&(m=0)}}return a}function Y(e,t,n,r,o,a,i,l,s,u,c){for(var d=o-1,f=0===o?a:[""],h=S(f),m=0,v=0,b=0;m0?f[x]+" "+_:w(_,/&\f/g,f[x])))&&(s[b++]=E);return A(e,t,n,0===o?p:l,s,u,c)}function X(e,t,n){return A(e,t,n,f,v(N),k(e,2,-2),0)}function K(e,t,n,r){return A(e,t,n,h,k(e,0,r),k(e,r+1,-1),r)}function J(e,t){for(var n="",r=S(e),o=0;o6)switch(_(e,t+1)){case 109:if(45!==_(e,t+4))break;case 102:return w(e,/(.+:)(.+)-([^]+)/,"$1-webkit-$2-$3$1"+c+(108==_(e,t+3)?"$3":"$2-$3"))+e;case 115:return~x(e,"stretch")?le(w(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==_(e,t+1))break;case 6444:switch(_(e,E(e)-3-(~x(e,"!important")&&10))){case 107:return w(e,":",":"+d)+e;case 101:return w(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+d+(45===_(e,14)?"inline-":"")+"box$3$1"+d+"$2$3$1"+u+"$2box$3")+e}break;case 5936:switch(_(e,t+11)){case 114:return d+e+u+w(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return d+e+u+w(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return d+e+u+w(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return d+e+u+e+e}return e}var se,ue=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case h:e.return=le(e.value,e.length);break;case m:return J([L(e,{value:w(e.value,"@","@"+d)})],r);case p:if(e.length)return function(e,t){return e.map(t).join("")}(e.props,(function(t){switch(function(e,t){return(e=t.exec(e))?e[0]:e}(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return J([L(e,{props:[w(t,/:(read-\w+)/,":-moz-$1")]})],r);case"::placeholder":return J([L(e,{props:[w(t,/:(plac\w+)/,":-webkit-input-$1")]}),L(e,{props:[w(t,/:(plac\w+)/,":-moz-$1")]}),L(e,{props:[w(t,/:(plac\w+)/,u+"input-$1")]})],r)}return""}))}}],ce=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var r=e.stylisPlugins||ue;var o,a,i={},l=[];o=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(o)+s;return{name:u,styles:o,next:Se}}(i,void 0,r.useContext(Ne));l+=t.key+"-"+s.name;var u={};for(var c in e)Oe.call(e,c)&&"css"!==c&&c!==Ie&&(u[c]=e[c]);return u.ref=n,u.className=l,r.createElement(r.Fragment,null,r.createElement(Le,{cache:t,serialized:s,isStringTag:"string"==typeof a}),r.createElement(a,u))}));var je,Me,Fe,Be={},ze={};function $e(){if(Fe)return ze;Fe=1,function(){if(Me)return je;Me=1;var e=Object.getOwnPropertySymbols,t=Object.prototype.hasOwnProperty,n=Object.prototype.propertyIsEnumerable;function r(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}je=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(o,a){for(var i,l,s=r(o),u=1;u{const[t,n]=r.useState(e.value??e.defaultValue),o=void 0===e.value,a=void 0!==t&&("string"==typeof t?t.length>0:t.toString().length>0);return r.useEffect((()=>{!o&&n(e.value)}),[o,e.value]),{value:t,filled:a,onChange:t=>{if(o){const e=t.target.type,r=t.target["checkbox"===e||"radio"===e?"checked":"value"];n(r)}e.onChange&&e.onChange(t)},setValue:t=>{var n,r,o,a;const i=(null==(n=null==e?void 0:e.ref)?void 0:n.current)??("function"==typeof e.getInput&&e.getInput());if(!i)return;const l=new Event("input",{bubbles:!0});null==(a=null==(o=null==(r=Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype,"value"))?void 0:r.set)?void 0:o.call)||a.call(o,i,t),i.dispatchEvent(l)}}};var Xe=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n-1},dt=function(e,t){var n=this.__data__,r=it(n,e);return r<0?(++this.size,n.push([e,t])):n[r][1]=t,this};function ft(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991},kr=Lt,Er=_r,Sr=sr,Cr={};Cr["[object Float32Array]"]=Cr["[object Float64Array]"]=Cr["[object Int8Array]"]=Cr["[object Int16Array]"]=Cr["[object Int32Array]"]=Cr["[object Uint8Array]"]=Cr["[object Uint8ClampedArray]"]=Cr["[object Uint16Array]"]=Cr["[object Uint32Array]"]=!0,Cr["[object Arguments]"]=Cr["[object Array]"]=Cr["[object ArrayBuffer]"]=Cr["[object Boolean]"]=Cr["[object DataView]"]=Cr["[object Date]"]=Cr["[object Error]"]=Cr["[object Function]"]=Cr["[object Map]"]=Cr["[object Number]"]=Cr["[object Object]"]=Cr["[object RegExp]"]=Cr["[object Set]"]=Cr["[object String]"]=Cr["[object WeakMap]"]=!1;var Tr=function(e){return Sr(e)&&Er(e.length)&&!!Cr[kr(e)]};var Or=function(e){return function(t){return e(t)}},Dr={};!function(e,t){var n=yt,r=t&&!t.nodeType&&t,o=r&&e&&!e.nodeType&&e,a=o&&o.exports===r&&n.process,i=function(){try{var e=o&&o.require&&o.require("util").types;return e||a&&a.binding&&a.binding("util")}catch(t){}}();e.exports=i}({get exports(){return Dr},set exports(e){Dr=e}},Dr);var Pr=Tr,Nr=Or,Ir=Dr&&Dr.isTypedArray,Ar=Ir?Nr(Ir):Pr,Lr=lr,Rr=gr,jr=vr,Mr=br,Fr=xr,Br=Ar,zr=Object.prototype.hasOwnProperty;var $r=function(e,t){var n=jr(e),r=!n&&Rr(e),o=!n&&!r&&Mr(e),a=!n&&!r&&!o&&Br(e),i=n||r||o||a,l=i?Lr(e.length,String):[],s=l.length;for(var u in e)!t&&!zr.call(e,u)||i&&("length"==u||o&&("offset"==u||"parent"==u)||a&&("buffer"==u||"byteLength"==u||"byteOffset"==u)||Fr(u,s))||l.push(u);return l},Ur=Object.prototype;var Hr=function(e){var t=e&&e.constructor;return e===("function"==typeof t&&t.prototype||Ur)};var Vr=function(e,t){return function(n){return e(t(n))}},qr=Vr(Object.keys,Object),Gr=Hr,Wr=qr,Zr=Object.prototype.hasOwnProperty;var Qr=Bt,Yr=_r;var Xr=function(e){return null!=e&&Yr(e.length)&&!Qr(e)},Kr=$r,Jr=function(e){if(!Gr(e))return Wr(e);var t=[];for(var n in Object(e))Zr.call(e,n)&&"constructor"!=n&&t.push(n);return t},eo=Xr;var to=function(e){return eo(e)?Kr(e):Jr(e)},no=ir,ro=to;var oo=function(e,t){return e&&no(t,ro(t),e)};var ao=Rt,io=Hr,lo=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t},so=Object.prototype.hasOwnProperty;var uo=$r,co=function(e){if(!ao(e))return lo(e);var t=io(e),n=[];for(var r in e)("constructor"!=r||!t&&so.call(e,r))&&n.push(r);return n},fo=Xr;var po=function(e){return fo(e)?uo(e,!0):co(e)},ho=ir,mo=po;var go=function(e,t){return e&&ho(t,mo(t),e)},vo={};!function(e,t){var n=_t,r=t&&!t.nodeType&&t,o=r&&e&&!e.nodeType&&e,a=o&&o.exports===r?n.Buffer:void 0,i=a?a.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=i?i(n):new e.constructor(n);return e.copy(r),r}}({get exports(){return vo},set exports(e){vo=e}},vo);var bo=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++no?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(o);++r0&&r(s)?n>1?e(s,n-1,r,o,a):wl(a,s):o||(a[a.length]=s)}return a},kl=_l;var El=function(e){return(null==e?0:e.length)?kl(e,1):[]};var Sl=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)},Cl=Math.max;var Tl=function(e,t,n){return t=Cl(void 0===t?e.length-1:t,0),function(){for(var r=arguments,o=-1,a=Cl(r.length-t,0),i=Array(a);++o0){if(++t>=800)return arguments[0]}else t=0;return e.apply(void 0,arguments)}}(Pl),Al=El,Ll=Tl,Rl=Il;var jl=function(e){return Rl(Ll(e,void 0,Al),e+"")},Ml=Xe,Fl=xi,Bl=il,zl=Zi,$l=ir,Ul=gl,Hl=Zo,Vl=jl((function(e,t){var n={};if(null==e)return n;var r=!1;t=Ml(t,(function(t){return t=zl(t,e),r||(r=t.length>1),t})),$l(e,Hl(e),n),r&&(n=Fl(n,7,Ul));for(var o=t.length;o--;)Bl(n,t[o]);return n})),ql=rr,Gl=Zi,Wl=xr,Zl=Rt,Ql=Yi;var Yl=Ji,Xl=function(e,t,n,r){if(!Zl(e))return e;for(var o=-1,a=(t=Gl(t,e)).length,i=a-1,l=e;null!=l&&++oObject.fromEntries((Array.isArray(e)?e:Object.keys(e)).map(((e,n)=>[e,t(e,n)]))),fs=["xs","sm","md","lg","xl"],ps=["display1","display2","display3","display4","h1","h2","h3","h4","h5","h6","subtitle1","subtitle2","subtitle3","subtitle4","body1","body2","body3","label1","label2"],hs={h1:["h1"],h2:["h2"],h3:["h3"],h4:["h4"],h5:["h5"],h6:["h6"],body1:["body"],label1:["label"]},ms=["fontSize","fontWeight","lineHeight"],gs={...ds(ps,(e=>`lsd-typography--${e}`)),root:"lsd-typography",primary:"lsd-typography--primary",secondary:"lsd-typography--secondary",serif:"lsd-typography--serif",sansSerif:"lsd-typography--sans-serif",monospace:"lsd-typography--monospace"},vs=["genericFontFamily"],bs=({genericFontFamily:e})=>({className:Qe("serif"===e&&gs.serif,"monospace"===e&&gs.monospace,"sans-serif"===e&&gs.sansSerif)}),ys=e=>cs(e,vs),ws=e=>Vl(e,vs),xs={root:"lsd-icon",small:"lsd-icon--small",filled:"lsd-icon--filled",stroked:"lsd-icon--stroked",primary:"lsd-icon--primary",secondary:"lsd-icon--secondary"},_s=(e,t)=>{const n=({color:n,size:r="small",className:o,...a})=>{const i=bs(a);return Ge(e,{className:Qe(i.className,o,xs.root,xs[r],n&&xs[n],(null==t?void 0:t.filled)&&xs.filled,(null==t?void 0:t.stroked)&&xs.stroked),...ws(a)})};return n.displayName=e.displayName,n.classes=xs,n},ks=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{d:"M11.6666 7.58334H7.58325V11.6667H6.41659V7.58334H2.33325V6.41668H6.41659V2.33334H7.58325V6.41668H11.6666V7.58334Z",fill:"black"})})),{filled:!0}),Es=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{d:"M10.5 5.66125L9.6775 4.83875L7 7.51041L4.3225 4.83874L3.5 5.66125L7 9.16125L10.5 5.66125Z",fill:"black"})})),{filled:!0}),Ss=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{d:"M6.99992 2.33334L6.17742 3.15584L9.43242 6.41668H2.33325V7.58334H9.43242L6.17742 10.8442L6.99992 11.6667L11.6666 7.00001L6.99992 2.33334Z",fill:"black"})})),{filled:!0}),Cs=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{d:"M3.5 8.33875L4.3225 9.16125L7 6.48959L9.6775 9.16125L10.5 8.33875L7 4.83875L3.5 8.33875Z",fill:"black"})})),{filled:!0}),Ts=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.91667 1.75H11.0833C11.725 1.75 12.25 2.275 12.25 2.91667V11.0833C12.25 11.725 11.725 12.25 11.0833 12.25H2.91667C2.275 12.25 1.75 11.725 1.75 11.0833V2.91667C1.75 2.275 2.275 1.75 2.91667 1.75ZM9.68333 4.43333L10.5 5.25L5.83333 9.91667L3.5 7.58333L4.31667 6.76667L5.83333 8.28333L9.68333 4.43333Z",fill:"black"})})),{filled:!0}),Os=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{d:"M11.0833 2.91667V11.0833H2.91667V2.91667H11.0833ZM11.0833 1.75H2.91667C2.275 1.75 1.75 2.275 1.75 2.91667V11.0833C1.75 11.725 2.275 12.25 2.91667 12.25H11.0833C11.725 12.25 12.25 11.725 12.25 11.0833V2.91667C12.25 2.275 11.725 1.75 11.0833 1.75Z",fill:"black"})})),{filled:!0}),Ds=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{d:"M5.25009 9.43247L2.81759 6.99997L1.98926 7.82247L5.25009 11.0833L12.2501 4.0833L11.4276 3.2608L5.25009 9.43247Z",fill:"black"})})),{filled:!0}),Ps=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{d:"M11.0834 3.73916L10.2609 2.91666L7.00008 6.17749L3.73925 2.91666L2.91675 3.73916L6.17758 6.99999L2.91675 10.2608L3.73925 11.0833L7.00008 7.82249L10.2609 11.0833L11.0834 10.2608L7.82258 6.99999L11.0834 3.73916Z",fill:"black"})})),{filled:!0}),Ns=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M7.00008 1.16666C3.78008 1.16666 1.16675 3.77999 1.16675 6.99999C1.16675 10.22 3.78008 12.8333 7.00008 12.8333C10.2201 12.8333 12.8334 10.22 12.8334 6.99999C12.8334 3.77999 10.2201 1.16666 7.00008 1.16666ZM6.41675 9.91666V8.74999H7.58342V9.91666H6.41675ZM6.41675 4.08332V7.58332H7.58342V4.08332H6.41675Z",fill:"black"})})),{filled:!0}),Is=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{d:"M5.34925 3.50001L6.51591 4.66668H11.6667V10.5H2.33341V3.50001H5.34925ZM5.83341 2.33334H2.33341C1.69175 2.33334 1.17258 2.85834 1.17258 3.50001L1.16675 10.5C1.16675 11.1417 1.69175 11.6667 2.33341 11.6667H11.6667C12.3084 11.6667 12.8334 11.1417 12.8334 10.5V4.66668C12.8334 4.02501 12.3084 3.50001 11.6667 3.50001H7.00008L5.83341 2.33334Z",fill:"black"})})),{filled:!0}),As=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{d:"M11.0833 4.08333V6.41667H3.98417L6.0725 4.3225L5.25 3.5L1.75 7L5.25 10.5L6.0725 9.6775L3.98417 7.58333H12.25V4.08333H11.0833Z",fill:"black"})})),{filled:!0}),Ls=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.75 4.66667V3.5H12.25V4.66667H1.75ZM1.75 7.58333H12.25V6.41667H1.75V7.58333ZM1.75 10.5H12.25V9.33333H1.75V10.5Z",fill:"black"})})),{filled:!0}),Rs=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M3.49992 5.83334C2.85825 5.83334 2.33325 6.35834 2.33325 7.00001C2.33325 7.64168 2.85825 8.16668 3.49992 8.16668C4.14159 8.16668 4.66659 7.64168 4.66659 7.00001C4.66659 6.35834 4.14159 5.83334 3.49992 5.83334ZM10.4999 5.83334C9.85825 5.83334 9.33325 6.35834 9.33325 7.00001C9.33325 7.64168 9.85825 8.16668 10.4999 8.16668C11.1416 8.16668 11.6666 7.64168 11.6666 7.00001C11.6666 6.35834 11.1416 5.83334 10.4999 5.83334ZM5.83325 7.00001C5.83325 6.35834 6.35825 5.83334 6.99992 5.83334C7.64159 5.83334 8.16659 6.35834 8.16659 7.00001C8.16659 7.64168 7.64159 8.16668 6.99992 8.16668C6.35825 8.16668 5.83325 7.64168 5.83325 7.00001Z",fill:"black"})})),{filled:!0}),js=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{d:"M9.16137 4.3225L8.33887 3.5L4.83887 7L8.33887 10.5L9.16137 9.6775L6.4897 7L9.16137 4.3225Z",fill:"black"})})),{filled:!0}),Ms=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{d:"M5.66137 3.5L4.83887 4.3225L7.51053 7L4.83887 9.6775L5.66137 10.5L9.16137 7L5.66137 3.5Z",fill:"black"})})),{filled:!0}),Fs=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M8.61 7.74083L11.9525 11.0833L11.0833 11.9525L7.74083 8.61C7.11667 9.05917 6.36417 9.33333 5.54167 9.33333C3.4475 9.33333 1.75 7.63583 1.75 5.54167C1.75 3.4475 3.4475 1.75 5.54167 1.75C7.63583 1.75 9.33333 3.4475 9.33333 5.54167C9.33333 6.36417 9.05917 7.11667 8.61 7.74083ZM5.54167 2.91667C4.08917 2.91667 2.91667 4.08917 2.91667 5.54167C2.91667 6.99417 4.08917 8.16667 5.54167 8.16667C6.99417 8.16667 8.16667 6.99417 8.16667 5.54167C8.16667 4.08917 6.99417 2.91667 5.54167 2.91667Z",fill:"black"})})),{filled:!0}),Bs=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M9.79287 3.5H2.99998V2.5H11.5V11H10.5V4.20711L3.35353 11.3536L2.64642 10.6464L9.79287 3.5Z",fill:"black"})})),{filled:!0}),zs=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{d:"M7.0013 1.16669C3.7813 1.16669 1.16797 3.78002 1.16797 7.00002C1.16797 10.22 3.7813 12.8334 7.0013 12.8334C10.2213 12.8334 12.8346 10.22 12.8346 7.00002C12.8346 3.78002 10.2213 1.16669 7.0013 1.16669ZM7.0013 11.6667C4.42297 11.6667 2.33464 9.57835 2.33464 7.00002C2.33464 4.42169 4.42297 2.33335 7.0013 2.33335C9.57964 2.33335 11.668 4.42169 11.668 7.00002C11.668 9.57835 9.57964 11.6667 7.0013 11.6667Z",fill:"black"})})),{filled:!0}),$s=_s((e=>We("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:[Ge("path",{d:"M7.0013 1.16669C3.7813 1.16669 1.16797 3.78002 1.16797 7.00002C1.16797 10.22 3.7813 12.8334 7.0013 12.8334C10.2213 12.8334 12.8346 10.22 12.8346 7.00002C12.8346 3.78002 10.2213 1.16669 7.0013 1.16669ZM7.0013 11.6667C4.42297 11.6667 2.33464 9.57835 2.33464 7.00002C2.33464 4.42169 4.42297 2.33335 7.0013 2.33335C9.57964 2.33335 11.668 4.42169 11.668 7.00002C11.668 9.57835 9.57964 11.6667 7.0013 11.6667Z",fill:"black"}),Ge("path",{d:"M7.0013 9.91669C8.61213 9.91669 9.91797 8.61085 9.91797 7.00002C9.91797 5.38919 8.61213 4.08335 7.0013 4.08335C5.39047 4.08335 4.08464 5.38919 4.08464 7.00002C4.08464 8.61085 5.39047 9.91669 7.0013 9.91669Z",fill:"black"})]})),{filled:!0}),Us=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{"fill-rule":"evenodd","clip-rule":"evenodd",d:"M11.0833 2.33332H10.5V1.16666H9.33333V2.33332H4.66667V1.16666H3.5V2.33332H2.91667C2.26917 2.33332 1.75 2.85832 1.75 3.49999V11.6667C1.75 12.3083 2.26917 12.8333 2.91667 12.8333H11.0833C11.725 12.8333 12.25 12.3083 12.25 11.6667V3.49999C12.25 2.85832 11.725 2.33332 11.0833 2.33332ZM11.0833 11.6667H2.91667V5.24999H11.0833V11.6667ZM3.79167 7.58332C3.79167 6.77832 4.445 6.12499 5.25 6.12499C6.055 6.12499 6.70833 6.77832 6.70833 7.58332C6.70833 8.38832 6.055 9.04166 5.25 9.04166C4.445 9.04166 3.79167 8.38832 3.79167 7.58332Z",fill:"black"})})),{filled:!0}),Hs=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{d:"M2.32812 7.58329V6.41663H11.6581V7.58329H2.32812Z",fill:"black"})})),{filled:!0}),Vs=({color:e,variant:t="body1",component:n,className:r,children:o,...a})=>{const i=bs(a);return Ge(n??{h1:"h1",h2:"h2",h3:"h3",h4:"h4",h5:"h5",h6:"h6",label1:"label",label2:"label"}[t]??"span",{className:Qe(i.className,gs.root,gs[t],e&&gs[e],r),...ws(a),children:o})};Vs.classes=gs;const qs={root:"lsd-dropdown-item",icon:"lsd-dropdown-item__icon",label:"lsd-dropdown-item__label",error:"lsd-dropdown-item--error",disabled:"lsd-dropdown-item--disabled",selected:"lsd-dropdown-item--selected",withIcon:"lsd-dropdown-item--with-icon",small:"lsd-dropdown-item--small",medium:"lsd-dropdown-item--medium",large:"lsd-dropdown-item--large"},Gs=({label:e,size:t="large",withIcon:n,selected:r,disabled:o,className:a,...i})=>{const l=bs(i),s={color:"primary",className:qs.icon};return We("div",{role:"option","aria-selected":r?"true":"false",...ws(i),className:Qe(l.className,a,qs.root,qs[t],n&&qs.withIcon,o&&qs.disabled),children:[n&&Ge(r?Ts:Os,{...s}),Ge(Vs,{variant:"large"===t?"label1":"label2",component:"span",className:qs.label,children:e})]})};function Ws(e){for(var t=[],n=1;n{const[n,o]=r.useState({});return r.useEffect((()=>{const{width:t,height:n,top:r,left:a}=e.current.getBoundingClientRect();o({left:a+window.scrollX,width:t,top:r+n+window.scrollY})}),[t]),n},ru=({size:e="large",open:t,label:n,handleRef:o,onClose:a,children:i,...l})=>{const s=bs(l),u=r.useRef(null);Ys(u,(e=>{t&&!e.composedPath().includes(o.current)&&a&&a()}));const c=nu(o,t);return Ge("ul",{...ws(l),ref:u,role:"listbox","aria-label":n,style:{...c,...l.style??{}},className:Qe(s.className,l.className,tu.root,tu[e],t&&tu.open),children:i})};ru.classes=tu;const ou=r.createContext({initialized:!1}),au=()=>{var e;return(null==(e=r.useContext(ou))?void 0:e.initialized)??!1},iu=({parentId:e})=>{const t=r.useRef();return"undefined"==typeof window||t.current||(t.current=document.createElement("div")),r.useEffect((()=>{var n;if("undefined"==typeof window||!t.current)return;const r=document.querySelectorAll(`#${e}`);return null==(n=r[r.length-1])||n.appendChild(t.current),()=>{var n;try{null==(n=document.getElementById(e))||n.removeChild(t.current)}catch(r){}}}),[e,t.current]),t.current},lu=({id:e,children:t})=>au()?Ge(su,{id:e,children:t}):Ge(qe,{}),su=({id:e,children:t})=>{const n=iu({parentId:"lsd-presentation"});return n?o.createPortal(t,n,e):Ge(qe,{})},uu={root:"lsd-autocomplete",label:"lsd-autocomplete__label",inputContainer:"lsd-autocomplete__input-container",input:"lsd-autocomplete__input",icon:"lsd-autocomplete__icon",dropdownItemPlaceholder:"lsd-autocomplete__dropdown-item-placeholder",disabled:"lsd-autocomplete--disabled",error:"lsd-autocomplete--error",large:"lsd-autocomplete--large",medium:"lsd-autocomplete--medium",small:"lsd-autocomplete--small",withIcon:"lsd-autocomplete--with-icon",outlined:"lsd-autocomplete--outlined",underlined:"lsd-autocomplete--underlined"},cu=({label:e,size:t="large",withIcon:n=!1,error:o=!1,disabled:a=!1,children:i,value:l,defaultValue:s,placeholder:u,onChange:c,options:d=[],inputProps:f={},variant:p="outlined",...h})=>{const m=bs(h),g=r.useRef(null),v=r.useRef(null),b=Ye({defaultValue:s,value:l,onChange:c,ref:g}),y=b.value,[w,x]=r.useState(!1),[_,k]=r.useState(),E=e=>{x(!1),k(e),b.setValue(e)},S=r.useMemo((()=>b.filled?d.filter((e=>new RegExp(`^${b.value}.+`,"i").test(e))).map((e=>[e,e.slice(0,y.length),e.slice(y.length)])):d),[b.value,d]);r.useEffect((()=>{!_&&b.filled&&!w&&x(!0)}),[b.value,_,w]);const C=!a&&w&&S.length>0&&b.filled,T=(null==f?void 0:f.id)??(h.id||"autocomplete")+"-input";return We("div",{ref:v,...ws(h),className:Qe(h.className,m.className,uu.root,uu[t],a&&uu.disabled,n&&uu.withIcon,"outlined"===p?uu.outlined:uu.underlined),children:[e&&Ge(Vs,{htmlFor:T,className:uu.label,variant:"label2",component:"label",children:e}),We("div",{className:uu.inputContainer,children:[Ge("input",{id:T,ref:g,value:b.value,placeholder:u,onChange:b.onChange,disabled:a,onFocus:()=>x(!0),...f,className:Qe(f.className,uu.input,o&&uu.error)}),n&&b.value?Ge("span",{className:uu.icon,onClick:()=>b.setValue(""),children:Ge(Ps,{color:"primary"})}):n&&!b.value?Ge("span",{className:uu.icon,children:Ge(Fs,{color:"primary"})}):null]}),Ge(lu,{id:"autocomplete",children:Ge(ru,{handleRef:v,open:C,onClose:()=>x(!1),size:t,...ys(h),children:S.map(((e,n)=>Ge(Gs,{size:t,tabIndex:0,label:We(qe,{children:[e[1],Ge("span",{className:uu.dropdownItemPlaceholder,children:e[2]})]}),onClick:()=>E(e[0]),onKeyDown:t=>"Enter"===t.key&&E(e[0])},n)))})})]})};cu.classes=uu;const du={root:"lsd-badge",label:"lsd-badge__label",outlined:"lsd-badge--outlined",filled:"lsd-badge--filled",disabled:"lsd-badge--disabled",small:"lsd-badge--small",large:"lsd-badge--large"},fu=({variant:e="outlined",disabled:t,size:n="large",icon:r,iconDirection:o="left",children:a,...i})=>{const l=bs(i);return We("div",{"aria-label":a,...ws(i),className:Qe(i.className,l.className,du.root,du[e],t&&du.disabled,du[n]),children:["left"===o&&r,Ge(Vs,{component:"span",variant:"small"===n?"label2":"label1",className:du.label,children:a}),"right"===o&&r]})};fu.classes=du;const pu={root:"lsd-breadcrumb-item",outlined:"lsd-breadcrumb-item--outlined",itemLink:"lsd-breadcrumb-item__link",large:"lsd-breadcrumb-item--large",small:"lsd-breadcrumb-item--small"},hu=({size:e="large",label:t,link:n,linkComponent:r=(e=>Ge("a",{...e,children:e.children})),outlined:o,selected:a,ellipsisRef:i,onClick:l,className:s,...u})=>{const c=bs(u);return Ge("li",{...ws(u),className:Qe(c.className,pu.root,pu[e],s),"aria-selected":a?"true":"false",onClick:l,ref:i,children:Ge(r,{href:n,className:Qe(pu.itemLink,o&&pu.outlined),children:Ge(Vs,{color:"primary",component:"span",variant:"large"===e?"label1":"label2",children:t})})})};hu.classes=pu;const mu={root:"lsd-breadcrumb",list:"lsd-breadcrumb__list",listBox:"lsd-breadcrumb__dropdown-menu",open:"lsd-breadcrumb--open",disabled:"lsd-breadcrumb--disabled"},gu=({size:e="large",disabled:t=!1,ellipsis:n=!1,maxItems:o,value:a=[],onChange:i,options:l=[],...s})=>{const u=bs(s),c=r.useRef(null),[d,f]=r.useState(!1);o=Math.max(2,Math.min(o||2,l.length));const[p,...h]=l,[m,g]=n?[h.slice(0,h.length-o+1),h.slice(h.length-o+1)]:[[],h],v=t=>t.map(((t,n)=>Ge(hu,{outlined:n===g.length-1&&t!==p,label:t.value,link:t.link,linkComponent:null==t?void 0:t.linkComponent,size:e},n)));return r.useEffect((()=>{t&&d&&f(!1)}),[d,t]),We("div",{...ws(s),className:Qe(s.className,u.className,mu.root,t&&mu.disabled,d&&mu.open),children:[We("ul",{className:mu.list,children:[p&&v([p]),m.length>0&&Ge(hu,{ellipsisRef:c,label:"...",onClick:()=>{!t&&f((e=>!e))},size:e,...ys(s)}),v(g)]}),null!=(null==c?void 0:c.current)&&n&&o&&Ge(lu,{id:"breadcrumb",children:Ge(ru,{handleRef:c,open:d,onClose:()=>f(!1),className:Qe(mu.listBox),size:e,genericFontFamily:s.genericFontFamily,...ys(s),children:m.map(((e,t)=>Ge(hu,{label:e.value,link:e.link,className:pu.itemLink,linkComponent:null==e?void 0:e.linkComponent},t)))})})]})};gu.classes=mu;const vu=r.createContext(null),bu={root:"lsd-button",disabled:"lsd-button--disabled",large:"lsd-button--large",medium:"lsd-button--medium",small:"lsd-button--small",withIcon:"lsd-button--with-icon",outlined:"lsd-button--outlined",filled:"lsd-button--filled",text:"lsd-button__text",icon:"lsd-button__icon"},yu=({size:e,variant:t,disabled:n,icon:o,children:a,...i})=>{const l=r.useContext(vu),s=bs(i),u=bs(l||{}),c=s.className||u.className,d=e??(null==l?void 0:l.size)??"medium",f=t??(null==l?void 0:l.variant)??"outlined",p=n??(null==l?void 0:l.disabled)??!1;return Ge(qe,{children:We("button",{...ws(i),className:Qe(c,i.className,bu.root,bu[d],bu[f],p&&bu.disabled,o&&bu.withIcon),children:[Ge(Vs,{component:"span",className:bu.text,variant:"small"===d?"label2":"label1",children:a}),o&&Ge("span",{className:bu.icon,children:o})]})})};yu.classes=bu;const wu={root:"lsd-button-group",outlined:"lsd-button-group--outlined",filled:"lsd-button-group--filled",disabled:"lsd-button-group--disabled",small:"lsd-button-group--small",medium:"lsd-button-group--medium",large:"lsd-button-group--large"},xu=({size:e="large",disabled:t,variant:n="outlined",children:r,...o})=>{const a=bs(o);return Ge("div",{...ws(o),className:Qe(a.className,o.className,wu.root,wu[e],wu[n],t&&wu.disabled),children:Ge(vu.Provider,{value:{size:e,variant:n,disabled:t},children:r})})};xu.classes=wu;var _u={lessThanXSeconds:{one:"less than a second",other:"less than {{count}} seconds"},xSeconds:{one:"1 second",other:"{{count}} seconds"},halfAMinute:"half a minute",lessThanXMinutes:{one:"less than a minute",other:"less than {{count}} minutes"},xMinutes:{one:"1 minute",other:"{{count}} minutes"},aboutXHours:{one:"about 1 hour",other:"about {{count}} hours"},xHours:{one:"1 hour",other:"{{count}} hours"},xDays:{one:"1 day",other:"{{count}} days"},aboutXWeeks:{one:"about 1 week",other:"about {{count}} weeks"},xWeeks:{one:"1 week",other:"{{count}} weeks"},aboutXMonths:{one:"about 1 month",other:"about {{count}} months"},xMonths:{one:"1 month",other:"{{count}} months"},aboutXYears:{one:"about 1 year",other:"about {{count}} years"},xYears:{one:"1 year",other:"{{count}} years"},overXYears:{one:"over 1 year",other:"over {{count}} years"},almostXYears:{one:"almost 1 year",other:"almost {{count}} years"}};function ku(e){return function(t){var n=t||{},r=n.width?String(n.width):e.defaultWidth;return e.formats[r]||e.formats[e.defaultWidth]}}var Eu={date:ku({formats:{full:"EEEE, MMMM do, y",long:"MMMM do, y",medium:"MMM d, y",short:"MM/dd/yyyy"},defaultWidth:"full"}),time:ku({formats:{full:"h:mm:ss a zzzz",long:"h:mm:ss a z",medium:"h:mm:ss a",short:"h:mm a"},defaultWidth:"full"}),dateTime:ku({formats:{full:"{{date}} 'at' {{time}}",long:"{{date}} 'at' {{time}}",medium:"{{date}}, {{time}}",short:"{{date}}, {{time}}"},defaultWidth:"full"})},Su={lastWeek:"'last' eeee 'at' p",yesterday:"'yesterday at' p",today:"'today at' p",tomorrow:"'tomorrow at' p",nextWeek:"eeee 'at' p",other:"P"};function Cu(e){return function(t,n){var r,o=n||{};if("formatting"===(o.context?String(o.context):"standalone")&&e.formattingValues){var a=e.defaultFormattingWidth||e.defaultWidth,i=o.width?String(o.width):a;r=e.formattingValues[i]||e.formattingValues[a]}else{var l=e.defaultWidth,s=o.width?String(o.width):e.defaultWidth;r=e.values[s]||e.values[l]}return r[e.argumentCallback?e.argumentCallback(t):t]}}function Tu(e){return function(t,n){var r=String(t),o=n||{},a=o.width,i=a&&e.matchPatterns[a]||e.matchPatterns[e.defaultMatchWidth],l=r.match(i);if(!l)return null;var s,u=l[0],c=a&&e.parsePatterns[a]||e.parsePatterns[e.defaultParseWidth];return s="[object Array]"===Object.prototype.toString.call(c)?function(e,t){for(var n=0;n0?"in "+r:r+" ago":r},formatLong:Eu,formatRelative:function(e,t,n,r){return Su[e]},localize:{ordinalNumber:function(e,t){var n=Number(e),r=n%100;if(r>20||r<10)switch(r%10){case 1:return n+"st";case 2:return n+"nd";case 3:return n+"rd"}return n+"th"},era:Cu({values:{narrow:["B","A"],abbreviated:["BC","AD"],wide:["Before Christ","Anno Domini"]},defaultWidth:"wide"}),quarter:Cu({values:{narrow:["1","2","3","4"],abbreviated:["Q1","Q2","Q3","Q4"],wide:["1st quarter","2nd quarter","3rd quarter","4th quarter"]},defaultWidth:"wide",argumentCallback:function(e){return Number(e)-1}}),month:Cu({values:{narrow:["J","F","M","A","M","J","J","A","S","O","N","D"],abbreviated:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],wide:["January","February","March","April","May","June","July","August","September","October","November","December"]},defaultWidth:"wide"}),day:Cu({values:{narrow:["S","M","T","W","T","F","S"],short:["Su","Mo","Tu","We","Th","Fr","Sa"],abbreviated:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],wide:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]},defaultWidth:"wide"}),dayPeriod:Cu({values:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"morning",afternoon:"afternoon",evening:"evening",night:"night"}},defaultWidth:"wide",formattingValues:{narrow:{am:"a",pm:"p",midnight:"mi",noon:"n",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},abbreviated:{am:"AM",pm:"PM",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"},wide:{am:"a.m.",pm:"p.m.",midnight:"midnight",noon:"noon",morning:"in the morning",afternoon:"in the afternoon",evening:"in the evening",night:"at night"}},defaultFormattingWidth:"wide"})},match:{ordinalNumber:(Ou={matchPattern:/^(\d+)(th|st|nd|rd)?/i,parsePattern:/\d+/i,valueCallback:function(e){return parseInt(e,10)}},function(e,t){var n=String(e),r=t||{},o=n.match(Ou.matchPattern);if(!o)return null;var a=o[0],i=n.match(Ou.parsePattern);if(!i)return null;var l=Ou.valueCallback?Ou.valueCallback(i[0]):i[0];return{value:l=r.valueCallback?r.valueCallback(l):l,rest:n.slice(a.length)}}),era:Tu({matchPatterns:{narrow:/^(b|a)/i,abbreviated:/^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,wide:/^(before christ|before common era|anno domini|common era)/i},defaultMatchWidth:"wide",parsePatterns:{any:[/^b/i,/^(a|c)/i]},defaultParseWidth:"any"}),quarter:Tu({matchPatterns:{narrow:/^[1234]/i,abbreviated:/^q[1234]/i,wide:/^[1234](th|st|nd|rd)? quarter/i},defaultMatchWidth:"wide",parsePatterns:{any:[/1/i,/2/i,/3/i,/4/i]},defaultParseWidth:"any",valueCallback:function(e){return e+1}}),month:Tu({matchPatterns:{narrow:/^[jfmasond]/i,abbreviated:/^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,wide:/^(january|february|march|april|may|june|july|august|september|october|november|december)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^j/i,/^f/i,/^m/i,/^a/i,/^m/i,/^j/i,/^j/i,/^a/i,/^s/i,/^o/i,/^n/i,/^d/i],any:[/^ja/i,/^f/i,/^mar/i,/^ap/i,/^may/i,/^jun/i,/^jul/i,/^au/i,/^s/i,/^o/i,/^n/i,/^d/i]},defaultParseWidth:"any"}),day:Tu({matchPatterns:{narrow:/^[smtwf]/i,short:/^(su|mo|tu|we|th|fr|sa)/i,abbreviated:/^(sun|mon|tue|wed|thu|fri|sat)/i,wide:/^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i},defaultMatchWidth:"wide",parsePatterns:{narrow:[/^s/i,/^m/i,/^t/i,/^w/i,/^t/i,/^f/i,/^s/i],any:[/^su/i,/^m/i,/^tu/i,/^w/i,/^th/i,/^f/i,/^sa/i]},defaultParseWidth:"any"}),dayPeriod:Tu({matchPatterns:{narrow:/^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,any:/^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i},defaultMatchWidth:"any",parsePatterns:{any:{am:/^a/i,pm:/^p/i,midnight:/^mi/i,noon:/^no/i,morning:/morning/i,afternoon:/afternoon/i,evening:/evening/i,night:/night/i}},defaultParseWidth:"any"})},options:{weekStartsOn:0,firstWeekContainsDate:1}};function Pu(e){if(null===e||!0===e||!1===e)return NaN;var t=Number(e);return isNaN(t)?t:t<0?Math.ceil(t):Math.floor(t)}function Nu(e,t){if(t.length1?"s":"")+" required, but only "+t.length+" present")}function Iu(e){Nu(1,arguments);var t=Object.prototype.toString.call(e);return e instanceof Date||"object"==typeof e&&"[object Date]"===t?new Date(e.getTime()):"number"==typeof e||"[object Number]"===t?new Date(e):("string"!=typeof e&&"[object String]"!==t||"undefined"==typeof console||(console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule"),console.warn((new Error).stack)),new Date(NaN))}function Au(e,t){Nu(2,arguments);var n=Iu(e).getTime(),r=Pu(t);return new Date(n+r)}function Lu(e,t){Nu(2,arguments);var n=Pu(t);return Au(e,-n)}function Ru(e,t){switch(e){case"P":return t.date({width:"short"});case"PP":return t.date({width:"medium"});case"PPP":return t.date({width:"long"});default:return t.date({width:"full"})}}function ju(e,t){switch(e){case"p":return t.time({width:"short"});case"pp":return t.time({width:"medium"});case"ppp":return t.time({width:"long"});default:return t.time({width:"full"})}}var Mu={p:ju,P:function(e,t){var n,r=e.match(/(P+)(p+)?/),o=r[1],a=r[2];if(!a)return Ru(e,t);switch(o){case"P":n=t.dateTime({width:"short"});break;case"PP":n=t.dateTime({width:"medium"});break;case"PPP":n=t.dateTime({width:"long"});break;default:n=t.dateTime({width:"full"})}return n.replace("{{date}}",Ru(o,t)).replace("{{time}}",ju(a,t))}};function Fu(e){return e.getTime()%6e4}function Bu(e){var t=new Date(e.getTime()),n=Math.ceil(t.getTimezoneOffset());return t.setSeconds(0,0),6e4*n+(n>0?(6e4+Fu(t))%6e4:Fu(t))}var zu=["D","DD"],$u=["YY","YYYY"];function Uu(e){return-1!==zu.indexOf(e)}function Hu(e){return-1!==$u.indexOf(e)}function Vu(e){if("YYYY"===e)throw new RangeError("Use `yyyy` instead of `YYYY` for formatting years; see: https://git.io/fxCyr");if("YY"===e)throw new RangeError("Use `yy` instead of `YY` for formatting years; see: https://git.io/fxCyr");if("D"===e)throw new RangeError("Use `d` instead of `D` for formatting days of the month; see: https://git.io/fxCyr");if("DD"===e)throw new RangeError("Use `dd` instead of `DD` for formatting days of the month; see: https://git.io/fxCyr")}function qu(e,t){Nu(1,arguments);var n=t||{},r=n.locale,o=r&&r.options&&r.options.weekStartsOn,a=null==o?0:Pu(o),i=null==n.weekStartsOn?a:Pu(n.weekStartsOn);if(!(i>=0&&i<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var l=Iu(e),s=l.getUTCDay(),u=(s=1&&s<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var u=new Date(0);u.setUTCFullYear(r+1,0,s),u.setUTCHours(0,0,0,0);var c=qu(u,t),d=new Date(0);d.setUTCFullYear(r,0,s),d.setUTCHours(0,0,0,0);var f=qu(d,t);return n.getTime()>=c.getTime()?r+1:n.getTime()>=f.getTime()?r:r-1}function Wu(e){Nu(1,arguments);var t=1,n=Iu(e),r=n.getUTCDay(),o=(r=o.getTime()?n+1:t.getTime()>=i.getTime()?n:n-1}function Qu(e){Nu(1,arguments);var t=Zu(e),n=new Date(0);n.setUTCFullYear(t,0,4),n.setUTCHours(0,0,0,0);var r=Wu(n);return r}function Yu(e,t){Nu(1,arguments);var n=t||{},r=n.locale,o=r&&r.options&&r.options.firstWeekContainsDate,a=null==o?1:Pu(o),i=null==n.firstWeekContainsDate?a:Pu(n.firstWeekContainsDate),l=Gu(e,t),s=new Date(0);s.setUTCFullYear(l,0,i),s.setUTCHours(0,0,0,0);var u=qu(s,t);return u}function Xu(e){Nu(1,arguments);var t=Iu(e);return!isNaN(t)}function Ku(e,t){for(var n=e<0?"-":"",r=Math.abs(e).toString();r.length0?1:0;switch(t){case"G":case"GG":case"GGG":return n.era(r,{width:"abbreviated"});case"GGGGG":return n.era(r,{width:"narrow"});default:return n.era(r,{width:"wide"})}},y:function(e,t,n){if("yo"===t){var r=e.getUTCFullYear(),o=r>0?r:1-r;return n.ordinalNumber(o,{unit:"year"})}return function(e,t){var n=e.getUTCFullYear(),r=n>0?n:1-n;return Ku("yy"===t?r%100:r,t.length)}(e,t)},Y:function(e,t,n,r){var o=Gu(e,r),a=o>0?o:1-o;return"YY"===t?Ku(a%100,2):"Yo"===t?n.ordinalNumber(a,{unit:"year"}):Ku(a,t.length)},R:function(e,t){return Ku(Zu(e),t.length)},u:function(e,t){return Ku(e.getUTCFullYear(),t.length)},Q:function(e,t,n){var r=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"Q":return String(r);case"QQ":return Ku(r,2);case"Qo":return n.ordinalNumber(r,{unit:"quarter"});case"QQQ":return n.quarter(r,{width:"abbreviated",context:"formatting"});case"QQQQQ":return n.quarter(r,{width:"narrow",context:"formatting"});default:return n.quarter(r,{width:"wide",context:"formatting"})}},q:function(e,t,n){var r=Math.ceil((e.getUTCMonth()+1)/3);switch(t){case"q":return String(r);case"qq":return Ku(r,2);case"qo":return n.ordinalNumber(r,{unit:"quarter"});case"qqq":return n.quarter(r,{width:"abbreviated",context:"standalone"});case"qqqqq":return n.quarter(r,{width:"narrow",context:"standalone"});default:return n.quarter(r,{width:"wide",context:"standalone"})}},M:function(e,t,n){var r=e.getUTCMonth();switch(t){case"M":case"MM":return function(e,t){var n=e.getUTCMonth();return"M"===t?String(n+1):Ku(n+1,2)}(e,t);case"Mo":return n.ordinalNumber(r+1,{unit:"month"});case"MMM":return n.month(r,{width:"abbreviated",context:"formatting"});case"MMMMM":return n.month(r,{width:"narrow",context:"formatting"});default:return n.month(r,{width:"wide",context:"formatting"})}},L:function(e,t,n){var r=e.getUTCMonth();switch(t){case"L":return String(r+1);case"LL":return Ku(r+1,2);case"Lo":return n.ordinalNumber(r+1,{unit:"month"});case"LLL":return n.month(r,{width:"abbreviated",context:"standalone"});case"LLLLL":return n.month(r,{width:"narrow",context:"standalone"});default:return n.month(r,{width:"wide",context:"standalone"})}},w:function(e,t,n,r){var o=function(e,t){Nu(1,arguments);var n=Iu(e),r=qu(n,t).getTime()-Yu(n,t).getTime();return Math.round(r/6048e5)+1}(e,r);return"wo"===t?n.ordinalNumber(o,{unit:"week"}):Ku(o,t.length)},I:function(e,t,n){var r=function(e){Nu(1,arguments);var t=Iu(e),n=Wu(t).getTime()-Qu(t).getTime();return Math.round(n/6048e5)+1}(e);return"Io"===t?n.ordinalNumber(r,{unit:"week"}):Ku(r,t.length)},d:function(e,t,n){return"do"===t?n.ordinalNumber(e.getUTCDate(),{unit:"date"}):function(e,t){return Ku(e.getUTCDate(),t.length)}(e,t)},D:function(e,t,n){var r=function(e){Nu(1,arguments);var t=Iu(e),n=t.getTime();t.setUTCMonth(0,1),t.setUTCHours(0,0,0,0);var r=t.getTime(),o=n-r;return Math.floor(o/864e5)+1}(e);return"Do"===t?n.ordinalNumber(r,{unit:"dayOfYear"}):Ku(r,t.length)},E:function(e,t,n){var r=e.getUTCDay();switch(t){case"E":case"EE":case"EEE":return n.day(r,{width:"abbreviated",context:"formatting"});case"EEEEE":return n.day(r,{width:"narrow",context:"formatting"});case"EEEEEE":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},e:function(e,t,n,r){var o=e.getUTCDay(),a=(o-r.weekStartsOn+8)%7||7;switch(t){case"e":return String(a);case"ee":return Ku(a,2);case"eo":return n.ordinalNumber(a,{unit:"day"});case"eee":return n.day(o,{width:"abbreviated",context:"formatting"});case"eeeee":return n.day(o,{width:"narrow",context:"formatting"});case"eeeeee":return n.day(o,{width:"short",context:"formatting"});default:return n.day(o,{width:"wide",context:"formatting"})}},c:function(e,t,n,r){var o=e.getUTCDay(),a=(o-r.weekStartsOn+8)%7||7;switch(t){case"c":return String(a);case"cc":return Ku(a,t.length);case"co":return n.ordinalNumber(a,{unit:"day"});case"ccc":return n.day(o,{width:"abbreviated",context:"standalone"});case"ccccc":return n.day(o,{width:"narrow",context:"standalone"});case"cccccc":return n.day(o,{width:"short",context:"standalone"});default:return n.day(o,{width:"wide",context:"standalone"})}},i:function(e,t,n){var r=e.getUTCDay(),o=0===r?7:r;switch(t){case"i":return String(o);case"ii":return Ku(o,t.length);case"io":return n.ordinalNumber(o,{unit:"day"});case"iii":return n.day(r,{width:"abbreviated",context:"formatting"});case"iiiii":return n.day(r,{width:"narrow",context:"formatting"});case"iiiiii":return n.day(r,{width:"short",context:"formatting"});default:return n.day(r,{width:"wide",context:"formatting"})}},a:function(e,t,n){var r=e.getUTCHours()/12>=1?"pm":"am";switch(t){case"a":case"aa":case"aaa":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"aaaaa":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},b:function(e,t,n){var r,o=e.getUTCHours();switch(r=12===o?"noon":0===o?"midnight":o/12>=1?"pm":"am",t){case"b":case"bb":case"bbb":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"bbbbb":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},B:function(e,t,n){var r,o=e.getUTCHours();switch(r=o>=17?"evening":o>=12?"afternoon":o>=4?"morning":"night",t){case"B":case"BB":case"BBB":return n.dayPeriod(r,{width:"abbreviated",context:"formatting"});case"BBBBB":return n.dayPeriod(r,{width:"narrow",context:"formatting"});default:return n.dayPeriod(r,{width:"wide",context:"formatting"})}},h:function(e,t,n){if("ho"===t){var r=e.getUTCHours()%12;return 0===r&&(r=12),n.ordinalNumber(r,{unit:"hour"})}return function(e,t){return Ku(e.getUTCHours()%12||12,t.length)}(e,t)},H:function(e,t,n){return"Ho"===t?n.ordinalNumber(e.getUTCHours(),{unit:"hour"}):function(e,t){return Ku(e.getUTCHours(),t.length)}(e,t)},K:function(e,t,n){var r=e.getUTCHours()%12;return"Ko"===t?n.ordinalNumber(r,{unit:"hour"}):Ku(r,t.length)},k:function(e,t,n){var r=e.getUTCHours();return 0===r&&(r=24),"ko"===t?n.ordinalNumber(r,{unit:"hour"}):Ku(r,t.length)},m:function(e,t,n){return"mo"===t?n.ordinalNumber(e.getUTCMinutes(),{unit:"minute"}):function(e,t){return Ku(e.getUTCMinutes(),t.length)}(e,t)},s:function(e,t,n){return"so"===t?n.ordinalNumber(e.getUTCSeconds(),{unit:"second"}):function(e,t){return Ku(e.getUTCSeconds(),t.length)}(e,t)},S:function(e,t){return function(e,t){var n=t.length,r=e.getUTCMilliseconds();return Ku(Math.floor(r*Math.pow(10,n-3)),t.length)}(e,t)},X:function(e,t,n,r){var o=(r._originalDate||e).getTimezoneOffset();if(0===o)return"Z";switch(t){case"X":return tc(o);case"XXXX":case"XX":return nc(o);default:return nc(o,":")}},x:function(e,t,n,r){var o=(r._originalDate||e).getTimezoneOffset();switch(t){case"x":return tc(o);case"xxxx":case"xx":return nc(o);default:return nc(o,":")}},O:function(e,t,n,r){var o=(r._originalDate||e).getTimezoneOffset();switch(t){case"O":case"OO":case"OOO":return"GMT"+ec(o,":");default:return"GMT"+nc(o,":")}},z:function(e,t,n,r){var o=(r._originalDate||e).getTimezoneOffset();switch(t){case"z":case"zz":case"zzz":return"GMT"+ec(o,":");default:return"GMT"+nc(o,":")}},t:function(e,t,n,r){var o=r._originalDate||e;return Ku(Math.floor(o.getTime()/1e3),t.length)},T:function(e,t,n,r){return Ku((r._originalDate||e).getTime(),t.length)}};function ec(e,t){var n=e>0?"-":"+",r=Math.abs(e),o=Math.floor(r/60),a=r%60;if(0===a)return n+String(o);var i=t||"";return n+String(o)+i+Ku(a,2)}function tc(e,t){return e%60==0?(e>0?"-":"+")+Ku(Math.abs(e)/60,2):nc(e,t)}function nc(e,t){var n=t||"",r=e>0?"-":"+",o=Math.abs(e);return r+Ku(Math.floor(o/60),2)+n+Ku(o%60,2)}var rc=/[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g,oc=/P+p+|P+|p+|''|'(''|[^'])+('|$)|./g,ac=/^'([^]*?)'?$/,ic=/''/g,lc=/[a-zA-Z]/;function sc(e,t,n){Nu(2,arguments);var r=String(t),o=n||{},a=o.locale||Du,i=a.options&&a.options.firstWeekContainsDate,l=null==i?1:Pu(i),s=null==o.firstWeekContainsDate?l:Pu(o.firstWeekContainsDate);if(!(s>=1&&s<=7))throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively");var u=a.options&&a.options.weekStartsOn,c=null==u?0:Pu(u),d=null==o.weekStartsOn?c:Pu(o.weekStartsOn);if(!(d>=0&&d<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");if(!a.localize)throw new RangeError("locale must contain localize property");if(!a.formatLong)throw new RangeError("locale must contain formatLong property");var f=Iu(e);if(!Xu(f))throw new RangeError("Invalid time value");var p=Bu(f),h=Lu(f,p),m={firstWeekContainsDate:s,weekStartsOn:d,locale:a,_originalDate:f},g=r.match(oc).map((function(e){var t=e[0];return"p"===t||"P"===t?(0,Mu[t])(e,a.formatLong,m):e})).join("").match(rc).map((function(e){if("''"===e)return"'";var t=e[0];if("'"===t)return uc(e);var n=Ju[t];if(n)return!o.useAdditionalWeekYearTokens&&Hu(e)&&Vu(e),!o.useAdditionalDayOfYearTokens&&Uu(e)&&Vu(e),n(h,e,a.localize,m);if(t.match(lc))throw new RangeError("Format string contains an unescaped latin alphabet character `"+t+"`");return e})).join("");return g}function uc(e){return e.match(ac)[1].replace(ic,"'")}function cc(e,t){Nu(2,arguments);var n=Iu(e),r=Pu(t);return isNaN(r)?new Date(NaN):r?(n.setDate(n.getDate()+r),n):n}function dc(e,t){Nu(1,arguments);var n=e||{},r=Iu(n.start),o=Iu(n.end),a=o.getTime();if(!(r.getTime()<=a))throw new RangeError("Invalid interval");var i=[],l=r;l.setHours(0,0,0,0);var s=t&&"step"in t?Number(t.step):1;if(s<1||isNaN(s))throw new RangeError("`options.step` must be a number greater than 1");for(;l.getTime()<=a;)i.push(Iu(l)),l.setDate(l.getDate()+s),l.setHours(0,0,0,0);return i}function fc(e,t){Nu(1,arguments);var n=t||{},r=n.locale,o=r&&r.options&&r.options.weekStartsOn,a=null==o?0:Pu(o),i=null==n.weekStartsOn?a:Pu(n.weekStartsOn);if(!(i>=0&&i<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var l=Iu(e),s=l.getDay(),u=6+(s=0&&i<=6))throw new RangeError("weekStartsOn must be between 0 and 6 inclusively");var l=Iu(e),s=l.getDay(),u=(s=o?u-o:6-o+u+1).keys()).fill(0),dc({start:s,end:c}).map((function(e){return{date:e,dayLabel:i(e)}})))}({year:t,month:n,firstDayOfWeek:a,dayLabelFormat:l})}),[t,n,a,l]),weekdayLabels:r.useMemo((function(){return function(e){var t=void 0===e?{}:e,n=t.firstDayOfWeek,r=void 0===n?1:n,o=t.weekdayLabelFormat,a=void 0===o?function(e){return sc(e,"iiiiii")}:o,i=new Date;return dc({start:cc(hc(i),r),end:cc(fc(i),r)}).reduce((function(e,t){return e.push(a(t)),e}),[])}({firstDayOfWeek:a,weekdayLabelFormat:u})}),[a,u]),monthLabel:d(new Date(t,n))}}function yc(e,t){Nu(2,arguments);var n=Iu(e),r=Iu(t);return n.getTime()r.getTime()}function xc(e,t){Nu(2,arguments);var n=t||{},r=Iu(e).getTime(),o=Iu(n.start).getTime(),a=Iu(n.end).getTime();if(!(o<=a))throw new RangeError("Invalid interval");return r>=o&&r<=a}function _c(e){Nu(1,arguments);var t=Iu(e);return t.setHours(0,0,0,0),t}function kc(e,t){Nu(2,arguments);var n=_c(e),r=_c(t);return n.getTime()===r.getTime()}function Ec(e,t){Nu(2,arguments);var n=Iu(e),r=Pu(t);if(isNaN(r))return new Date(NaN);if(!r)return n;var o=n.getDate(),a=new Date(n.getTime());a.setMonth(n.getMonth()+r+1,0);var i=a.getDate();return o>=i?a:(n.setFullYear(a.getFullYear(),a.getMonth(),o),n)}var Sc=function(e,t){return void 0===e&&(e=[]),e.some((function(e){return kc(t,e)}))};function Cc(e){var t=pc(e);return{year:function(e){Nu(1,arguments);var t=Iu(e),n=t.getFullYear();return n}(t),month:function(e){Nu(1,arguments);var t=Iu(e),n=t.getMonth();return n}(t),date:t}}function Tc(e,t){var n=Cc(t||_c(Date.now())),r=n.date,o=[n];return e>1&&(o=Array.from(Array(e-1).keys()).reduce((function(e){return r=Ec(e[e.length-1].date,1),e.concat([Cc(r)])}),o)),o}function Oc(e,t,n,r){var o=e[r?n>0?0:e.length-r:n>0?e.length-1:0].date;return Array.from(Array(t).keys()).reduce((function(e){return o=0===e.length?Ec(o,n):Ec(o,n>=0?1:-1),n>0?e.concat([Cc(o)]):[Cc(o)].concat(e)}),[])}function Dc(e){var t=e.startDate,n=e.endDate,r=e.isDateBlocked,o=e.minBookingDays,a=e.exactMinBookingDays,i=e.minBookingDate,l=e.maxBookingDate,s=!i||!yc(t,cc(i,-1)),u=!l||!wc(cc(t,o-1),l);return!((!t||1!==o||n||r(t))&&(t&&o>1&&!n&&!a||t&&o>0&&a&&s&&u||t&&o>0&&a&&!i&&!l?dc({start:t,end:cc(t,o-1)}).some((function(e){return r(e)})):!t||!n||a||yc(n,cc(t,o-1))||dc({start:t,end:n}).some((function(e){return r(e)}))))}function Pc(e){var t=e.startDate,n=e.endDate,o=e.focusedInput,a=e.minBookingDate,i=e.maxBookingDate,l=e.onDatesChange,s=e.initialVisibleMonth,u=e.exactMinBookingDays,c=void 0!==u&&u,d=e.minBookingDays,f=void 0===d?1:d,p=e.numberOfMonths,h=void 0===p?2:p,m=e.firstDayOfWeek,g=void 0===m?1:m,v=e.isDateBlocked,b=void 0===v?function(){return!1}:v,y=e.unavailableDates,w=void 0===y?[]:y,x=e.changeActiveMonthOnSelect,_=void 0===x||x,k=r.useState((function(){return Tc(h,t||s||null)})),E=k[0],S=k[1],C=r.useState(null),T=C[0],O=C[1],D=r.useState(t),P=D[0],N=D[1];r.useEffect((function(){return"undefined"!=typeof window&&window.addEventListener&&window.addEventListener("keydown",R),function(){window.removeEventListener&&window.removeEventListener("keydown",R)}}));var I=function(e){return Sc(w,e)||b(e)},A=function(e){N(e),(!P||P&&!kc(e,P))&&S(Tc(h,e))},L=function(e){return function(e){var t=e.date,n=e.minBookingDate,r=e.maxBookingDate,o=e.isDateBlockedFn,a=e.startDate,i=e.endDate,l=e.minBookingDays,s=void 0===l?1:l,u=e.unavailableDates,c=void 0===u?[]:u,d=n?new Date(n.getFullYear(),n.getMonth(),n.getDate(),0,0,0):n,f=r?new Date(r.getFullYear(),r.getMonth(),r.getDate(),0,0,0):r;return!!(Sc(c,t)||d&&yc(t,d)||f&&wc(t,f)||a&&!i&&s>1&&xc(t,{start:a,end:cc(a,s-2)})||o&&o(t))}({date:e,minBookingDate:a,maxBookingDate:i,startDate:t,endDate:n,minBookingDays:f,isDateBlockedFn:I})};function R(e){if(("ArrowRight"===e.key||"ArrowLeft"===e.key||"ArrowDown"===e.key||"ArrowUp"===e.key)&&!P){var t=E[0];A(t.date),S(Tc(h,t.date))}}var j=r.useCallback((function(){S(Oc(E,h,-1)),N(null)}),[E,h]),M=r.useCallback((function(){S(Oc(E,h,-1,1)),N(null)}),[E,h]),F=r.useCallback((function(){S(Oc(E,h,1)),N(null)}),[E,h]),B=r.useCallback((function(){S(Oc(E,h,1,1)),N(null)}),[E,h]),z=r.useCallback((function(e){S(Tc(h,e)),N(null)}),[h]),$=r.useCallback((function(e){void 0===e&&(e=1),S(Oc(E,h,-(12*e-h+1))),N(null)}),[E,h]),U=r.useCallback((function(e){void 0===e&&(e=1),S(Oc(E,h,12*e-h+1)),N(null)}),[E,h]);return{firstDayOfWeek:g,activeMonths:E,isDateSelected:function(e){return function(e,t,n){return!(!t||!n)&&xc(e,{start:t,end:n})}(e,t,n)},isDateHovered:function(e){return o=(r={date:e,hoveredDate:T,startDate:t,endDate:n,minBookingDays:f,exactMinBookingDays:c,isDateBlocked:I}).date,a=r.startDate,i=r.endDate,l=r.isDateBlocked,u=r.minBookingDays,(s=r.hoveredDate)&&u>1&&r.exactMinBookingDays&&xc(o,{start:s,end:cc(s,u-1)})?!dc({start:s,end:cc(s,u-1)}).some((function(e){return l(e)})):a&&!i&&s&&xc(o,{start:a,end:cc(a,u-1)})&&kc(a,s)&&u>1?!dc({start:a,end:cc(a,u-1)}).some((function(e){return l(e)})):!(!a||i||!s||yc(s,a)||!xc(o,{start:a,end:s})||dc({start:a,end:s}).some((function(e){return l(e)})));var r,o,a,i,l,s,u},isFirstOrLastSelectedDate:function(e){return function(e,t,n){return!!(t&&kc(e,t)||n&&kc(e,n))}(e,t,n)},isStartDate:function(e){return function(e,t){return!(!t||!kc(e,t))}(e,t)},isEndDate:function(e){return function(e,t){return!(!t||!kc(e,t))}(e,n)},isDateBlocked:L,numberOfMonths:h,isDateFocused:function(e){return!!P&&kc(e,P)},focusedDate:P,hoveredDate:T,onResetDates:function(){l({startDate:null,endDate:null,focusedInput:"startDate"})},onDateHover:function(e){if(e){if(e){var r=!L(e)||t&&kc(e,t),o=!a||!yc(e,cc(a,-1)),l=!i||!wc(e,i),s=cc(e,f-1),u=!a||!yc(s,a),d=!i||!wc(s,i),p=c&&f>1&&o&&l&&u&&d,h=t&&!n&&!c&&o&&l,m=!(f>1&&t)||xc(e,{start:t,end:cc(t,f-2)}),g=t&&kc(e,t)&&m;r&&(p||h||g)?O(e):null!==T&&O(null)}}else O(null)},onDateSelect:function(e){("endDate"===o||"startDate"===o)&&f>0&&c&&Dc({minBookingDays:f,exactMinBookingDays:c,minBookingDate:a,maxBookingDate:i,isDateBlocked:I,startDate:e,endDate:null})?l({startDate:e,endDate:cc(e,f-1),focusedInput:null}):("endDate"===o&&t&&yc(e,t)||"startDate"===o&&n&&wc(e,n))&&!c&&Dc({minBookingDays:f,isDateBlocked:I,startDate:e,endDate:null})?l({endDate:null,startDate:e,focusedInput:"endDate"}):"startDate"===o&&!c&&Dc({minBookingDays:f,isDateBlocked:I,endDate:n,startDate:e})?l({endDate:n,startDate:e,focusedInput:"endDate"}):"startDate"===o&&!c&&Dc({minBookingDays:f,isDateBlocked:I,endDate:null,startDate:e})?l({endDate:null,startDate:e,focusedInput:"endDate"}):"endDate"===o&&t&&!yc(e,t)&&!c&&Dc({minBookingDays:f,isDateBlocked:I,startDate:t,endDate:e})&&l({startDate:t,endDate:e,focusedInput:null}),"endDate"!==o&&(!P||P&&!kc(e,P))&&_&&S(Tc(h,e))},onDateFocus:A,goToPreviousMonths:j,goToPreviousMonthsByOneMonth:M,goToNextMonths:F,goToNextMonthsByOneMonth:B,goToDate:z,goToPreviousYear:$,goToNextYear:U}}const Nc={root:"lsd-calendar",container:"lsd-calendar-container",small:"lsd-calendar--small",medium:"lsd-calendar--medium",large:"lsd-calendar--large",open:"lsd-calendar--open",disabled:"lsd-calendar--disabled",header:"lsd-calendar-header",weekDay:"lsd-calendar__week_day",button:"lsd-calendar__button",changeYear:"lsd-calendar__change-year",changeYearActive:"lsd-calendar__change-year--active",changeYearIconContainer:"lsd-calendar__change-year-icon-container",year:"lsd-calendar-year",month:"lsd-calendar-month",day:"lsd-calendar-day",yearAndIcon:"lsd-calendar__year-and-icon",monthAndYear:"lsd-calendar__month-and-year",dayContainer:"lsd-calendar-day__container",dayRange:"lsd-calendar-day--range",daySelected:"lsd-calendar-day--selected",dayDisabled:"lsd-calendar-day--disabled",dayIsToday:"lsd-calendar-day--today",dayBorderLeft:"lsd-calendar-day--border-left",dayBorderRight:"lsd-calendar-day--border-right",dayBorderLeftAndRight:"lsd-calendar-day--border-left-and-right",dayBorderTopAndBottom:"lsd-calendar-day--border-top-and-bottom",todayIndicator:"lsd-calendar-day__today_indicator",monthTable:"lsd-calendar__month-table",nextMonthButton:"lsd-calendar__next-month-button",previousMonthButton:"lsd-calendar__previous-month-button",yearDropdown:"lsd-calendar__year-dropdown",yearDropdownHidden:"lsd-calendar__year-dropdown--hidden"},Ic=r.createContext(null),Ac=()=>r.useContext(Ic),Lc=(e,t,n)=>{if(!e)return{isValid:!1,date:null};const r=new Date(e+"T00:00:00");return{isValid:!Number.isNaN(+r)&&r>=t&&r<=n,date:r}},Rc=e=>new Date(e.getTime()-6e4*e.getTimezoneOffset()).toISOString().split("T")[0],jc=e=>e.setHours(0,0,0,0),Mc=(e,t,n)=>!!(e&&t&&n)&&(jc(t)<=jc(e)&&jc(n)>=jc(e)),Fc=(e,t)=>{if(!e||!t)return!1;return Rc(e)===Rc(t)},Bc=e=>{const t=(e=>{const t=e.find((e=>"number"!=typeof e));return t?new Date(t.date):new Date})(e),n=new Date(t);n.setDate(n.getDate()-t.getDay());const r=[];for(let o=0;o<42;o++){const e=new Date(n);e.setDate(e.getDate()+o),r.push(e)}return r},zc=(e,t)=>e&&e===t?null:t;function $c(e,t){if(!e||!t)return!0;let n=new Date(Rc(new Date(e)));return new Date(Rc(new Date(t)))>n}const Uc=(e,t)=>"large"===t?"startDate"===e?130:291:"medium"===t?"startDate"===e?120:267:"small"===t?"startDate"===e?107:239:0,Hc=({day:e,index:t,fullMonthDays:n,disabled:o=!1})=>{const a=n[t],{mode:i,startDate:l,endDate:s,onDateSelect:u}=Ac(),c=r.useRef(null),d=jc(a)===jc(new Date),f="range"===i&&Mc(a,l,s),p=r.useCallback((()=>u(a)),[a,u]),h=Fc(a,l),m="range"===i&&Fc(a,s),g=h||m||f;if(!e)return null;const v=((e,t,n,r,o)=>{if(!n)return"";if(!r||!o)return Nc.dayBorderLeftAndRight;const{prevIndex:a,nextIndex:i}=((e,t)=>{const n=e-1,r=e+1;return{prevIndex:n>=0?n:null,nextIndex:r{const a=r.useRef(null),i=r.useRef(null),{goToDate:l,changeYearMode:s,setChangeYearMode:u}=Ac(),c=r.useRef(null),{y:d}=eu(c),[f,p]=r.useState((()=>parseInt(e)-o)),[h,m]=r.useState((()=>parseInt(e)+o)),g=Array.from({length:h-f+1},((e,t)=>f+t));Ys(a,(()=>{u(!1)}));return r.useEffect((()=>{if(s&&i.current&&c.current){const e=i.current.offsetTop,t=i.current.offsetHeight,n=e-c.current.clientHeight/2+t/2;c.current.scrollTop=n}}),[s]),r.useEffect((()=>{var e,t;const n=null==(e=null==c?void 0:c.current)?void 0:e.scrollHeight,r=null==(t=null==c?void 0:c.current)?void 0:t.clientHeight;if(!n||!r)return;const a=d/(n-r)*100;a>90&&m((e=>Math.min(e+o,Jc))),a<10&&p((e=>Math.max(e-o,Kc)))}),[d,o]),We("div",{ref:a,className:Qe(Nc.changeYear,s&&Nc.changeYearActive),onClick:()=>{u(!s)},children:[We("div",{className:Qe(Nc.year,Nc.yearAndIcon),children:[Ge(Vs,{component:"span",variant:"large"===n?"label1":"label2",children:e}),Ge("div",{className:Nc.changeYearIconContainer,children:Ge(s?Cs:Es,{color:"primary"})})]}),Ge("div",{className:Qe(Nc.yearDropdown,!s&&Nc.yearDropdownHidden),ref:c,children:g.map((r=>Ge("div",{className:Nc.year,onClick:()=>(e=>{const n=new Date(e,t,1);l(n),u(!1)})(r),ref:r===parseInt(e)?i:null,children:Ge(Vs,{component:"span",variant:"large"===n?"label1":"label2",children:r})},r)))})]})},qc=({direction:e,onClick:t,className:n})=>{const r="previous"===e?js:Ms;return Ge("button",{className:Qe(Nc.button,n),type:"button",onClick:t,children:Ge(r,{color:"primary"})})},Gc=({monthLabel:e,monthNumber:t,size:n})=>{const{goToPreviousMonths:r,goToNextMonths:o}=Ac(),[a,i]=e.split(" ");return We("div",{className:Nc.header,children:[Ge(qc,{direction:"previous",onClick:r,className:Nc.previousMonthButton}),We("div",{className:Nc.monthAndYear,children:[Ge(Vs,{className:Nc.month,component:"span",variant:"large"===n?"label1":"label2",children:a}),Ge(Vc,{year:i,monthNumber:t,size:n})]}),Ge(qc,{direction:"next",onClick:o,className:Nc.nextMonthButton})]})},Wc=({weekdayLabels:e})=>Ge("tr",{children:e.map(((e,t)=>Ge("th",{children:Ge("div",{className:Nc.weekDay,children:Ge(Vs,{variant:"label2",children:e[0]})})},t)))}),Zc=({days:e})=>{const t=Bc(e),n=new Date(t[15]).getMonth();return Ge(qe,{children:Array.from({length:6}).map(((e,r)=>Ge("tr",{children:Array.from({length:7}).map(((e,o)=>{const a=7*r+o,i=t[a];return Ge(Hc,{index:a,day:i.getDate().toString(),fullMonthDays:t,disabled:i.getMonth()!==n},`day-${a}`)}))},`week-${r}`)))})},Qc=({size:e="large",year:t,month:n,firstDayOfWeek:r})=>{const o=Ac(),a=(null==o?void 0:o.size)??e,{days:i,weekdayLabels:l,monthLabel:s}=bc({year:t,month:n,firstDayOfWeek:r});return We(qe,{children:[Ge(Gc,{monthLabel:s,monthNumber:n,size:a}),We("table",{className:Nc.monthTable,children:[Ge("thead",{children:Ge(Wc,{weekdayLabels:l})}),Ge("tbody",{children:Ge(Zc,{days:i})})]})]})},Yc={root:"lsd-tooltip-base",arrowTip:"lsd-tooltip-base__arrow-tip",content:"lsd-tooltip-base__content"},Xc=({children:e,arrowOffset:t,arrowPosition:n="top",arrowSize:r=10,rootRef:o,...a})=>{const i=bs(a),l={width:`${r}px`,height:`${r}px`,transform:"rotate(45deg)"};return["top","bottom"].includes(n)?(l.left=`${t}px`,l[n]=`-${r/2}px`):(l.top=`${t}px`,l[n]=`-${r/2}px`),Ge("div",{ref:o,...ws(a),className:Qe(i.className,a.className,Yc.root),children:t?We(qe,{children:[Ge("div",{className:Yc.arrowTip,style:l}),Ge("div",{className:Yc.content,children:e})]}):e})};Xc.classes=Yc;const Kc=1850,Jc=2100,ed=({open:e,handleRef:t,size:n="large",mode:o="date",disabled:a=!1,onStartDateChange:i,onEndDateChange:l,onClose:s,onCalendarClickaway:u,startDate:c,endDate:d,calendarType:f="startDate",minDate:p=new Date(Kc,0,1),maxDate:h=new Date(Jc,0,1),tooltipArrowOffset:m,...g})=>{const v=bs(g),b=r.useRef(null),[y,w]=r.useState(c?Lc(c,p,h).date:null),[x,_]=r.useState(d?Lc(d,p,h).date:null),[k,E]=r.useState(!1);Ys(b,(t=>{e&&(u&&u(t),void 0===e&&s&&s())}));const{activeMonths:S,onDateFocus:C,onDateSelect:T,goToPreviousMonths:O,goToNextMonths:D,goToDate:P}=Pc({startDate:y,endDate:x,focusedInput:"startDate",onDatesChange:e=>{const t=((e,t,n,r)=>{let o=t,a=n;const i=r.startDate;return i?("startDate"===e?(!a||a&&i.getTime()<=a.getTime())&&(o=i):"endDate"===e&&(!o||o&&i.getTime()>=o.getTime())&&(a=i),{newStartDate:o,newEndDate:a}):{newStartDate:o,newEndDate:a}})(f,y,x,e),{newStartDate:n,newEndDate:r}=t;n!==y&&(null==i||i(n??new Date),w(n)),r!==x&&"range"===o&&(null==l||l(r??new Date),_(r))},numberOfMonths:1});r.useEffect((()=>{const e=Lc(c,p,h);if(Fc(e.date,y)||w(e.isValid?e.date:null),"range"===o){const e=Lc(d,p,h);Fc(e.date,x)||_(e.isValid?e.date:null)}}),[c,d,o,p,h,y,x]),r.useEffect((()=>{y&&C(y)}),[y]),r.useEffect((()=>{x&&C(x)}),[x]);const N=nu(t,e);return Ge(Ic.Provider,{value:{size:n,mode:o,startDate:y,endDate:x,onDateFocus:C,onDateSelect:T,goToPreviousMonths:O,goToNextMonths:D,goToDate:P,changeYearMode:k,setChangeYearMode:E},children:Ge(Xc,{...g,className:Qe({...ws(g)},v.className,g.className,Nc.root,Nc[n],e&&Nc.open,a&&Nc.disabled),rootRef:b,style:{...N,...g.style??{}},arrowOffset:m,children:Ge("div",{className:Qe(Nc.container),children:S.map(((e,t)=>Ge(Qc,{year:e.year,month:e.month,firstDayOfWeek:0,size:n},`${e.year}-${e.month}-${t}`)))})})})};ed.classes=Nc;const td={root:"lsd-card",small:"lsd-card--small",medium:"lsd-card--medium",large:"lsd-card--large"},nd=r.createContext(null),rd=({size:e="large",children:t,...n})=>{const r=bs(n);return Ge(nd.Provider,{value:{size:e},children:Ge("div",{...ws(n),className:Qe(r.className,td.root,td[e]),children:t})})};rd.classes=td;const od={root:"lsd-card-body"},ad=({children:e,...t})=>{const n=bs(t);return Ge("div",{...ws(t),className:Qe(n.className,t.className,od.root),children:e})};ad.classes=od;const id={root:"lsd-card-header",title:"lsd-card-header__title",small:"lsd-card-header--small",medium:"lsd-card-header--medium",large:"lsd-card-header--large"},ld=({size:e="large",children:t,...n})=>{const o=bs(n),a=r.useContext(nd),i=(null==a?void 0:a.size)??e;return Ge("div",{...ws(n),className:Qe(o.className,n.className,id.root,id[i]),children:Ge(Vs,{className:id.title,component:"div",variant:"large"===i?"label1":"label2",children:t})})};ld.classes=id;const sd=r.createContext(null),ud=_s((e=>Ge("svg",{width:"14",height:"14",viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",...e,children:Ge("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M2.91667 1.75C2.27233 1.75 1.75 2.27233 1.75 2.91667V11.0833C1.75 11.7277 2.27233 12.25 2.91667 12.25H11.0833C11.7277 12.25 12.25 11.7277 12.25 11.0833V2.91667C12.25 2.27233 11.7277 1.75 11.0833 1.75H2.91667ZM9.91667 6.41667H4.08333V7.58333H9.91667V6.41667Z",fill:"black"})})),{filled:!0}),cd={root:"lsd-checkbox",input:"lsd-checkbox__input",icon:"lsd-checkbox__icon",label:"lsd-checkbox__label",focused:"lsd-checkbox--focused",disabled:"lsd-checkbox--disabled",indeterminate:"lsd-checkbox--indeterminate",large:"lsd-checkbox--large",medium:"lsd-checkbox--medium",small:"lsd-checkbox--small"},dd=({name:e,size:t="large",onChange:n,checked:o,defaultChecked:a,disabled:i=!1,indeterminate:l=!1,inputProps:s={},children:u,...c})=>{const d=bs(c),f=r.useRef(null),[p,h]=r.useState(!1),m=Ye({value:o,defaultValue:a??!1,onChange:n,ref:f}),g=r.useContext(sd),v=(null==g?void 0:g.size)??t;return r.useEffect((()=>{if(!f.current)return;const e=()=>h(!0),t=()=>h(!1);return f.current.addEventListener("focus",e),f.current.addEventListener("blur",t),()=>{var n,r;null==(n=f.current)||n.removeEventListener("focus",e),null==(r=f.current)||r.removeEventListener("blur",t)}}),[f.current]),We(Vs,{color:"primary",variant:"large"===v?"label1":"label2",component:"label","aria-disabled":i?"true":"false",...ws(c),className:Qe(d.className,c.className,cd.root,cd[v],p&&cd.focused,i&&cd.disabled,l&&cd.indeterminate),children:[Ge("input",{ref:f,name:e,type:"checkbox",disabled:i,checked:m.value,onChange:m.onChange,defaultChecked:a,className:Qe(s.className,cd.input),...s}),l?Ge(ud,{color:"primary",focusable:!1}):m.value?Ge(Ts,{color:"primary",focusable:!1}):Ge(Os,{color:"primary",focusable:!1}),Ge("span",{className:cd.label,children:u})]})};dd.classes=cd;const fd={root:"lsd-checkbox-group",label:"lsd-checkbox-group__label"},pd=({size:e="large",label:t,children:n,...r})=>{const o=bs(r);return Ge(sd.Provider,{value:{size:e},children:We("div",{...ws(r),className:Qe(o.className,r.className,fd.root),children:[Ge(Vs,{component:"span",variant:"small"===e?"label2":"label1",className:fd.label,...ys(r),children:t}),n]})})};pd.classes=fd;const hd={root:"lsd-collapse-header",trigger:"lsd-collapse-header__trigger",label:"lsd-collapse-header__label",icons:"lsd-collapse-header__icons",icon:"lsd-collapse-header__icon",menuIcon:"lsd-collapse-header__menu-icon",open:"lsd-collapse-header--open",disabled:"lsd-collapse-header--disabled",small:"lsd-collapse-header--small",medium:"lsd-collapse-header--medium",large:"lsd-collapse-header--large"},md=({label:e,disabled:t=!1,open:n,setOpen:r,size:o="large",onTrigger:a,...i})=>{const l=bs(i);return Ge("div",{...ws(i),className:Qe(l.className,i.className,hd.root,hd[o],t&&hd.disabled,n&&hd.open),children:We("button",{className:Qe(hd.trigger),onClick:a,children:[Ge(Vs,{color:"primary",component:"label",variant:"small"===o?"label2":"label1",className:hd.label,children:e}),Ge("div",{className:hd.icons,children:Ge(n?Cs:Es,{color:"primary",className:hd.menuIcon})})]})})};md.classes=hd;const gd={root:"lsd-collapse",content:"lsd-collapse__content",open:"lsd-collapse--open",disabled:"lsd-collapse--disabled"},vd=({label:e,disabled:t=!1,size:n="large",open:o,children:a,...i})=>{const l=bs(i),s=r.useRef(null),[u,c]=r.useState(o??!1),d=e=>{if(void 0===o)return c(e);i.onChange&&i.onChange(e)};return r.useEffect((()=>{t&&u&&d(!1)}),[t,u,d]),r.useEffect((()=>{void 0!==o&&c(o)}),[o]),We("div",{...ws(i),ref:s,className:Qe(l.className,i.className,gd.root,t&&gd.disabled,u&&gd.open),children:[Ge(md,{label:e,open:u,setOpen:c,size:n,onTrigger:()=>!t&&d(!u),disabled:t,...ys(i)}),u&&Ge("div",{className:gd.content,children:a})]})};vd.classes=gd;const bd={root:"lsd-date-field",label:"lsd-date-field__label",inputContainer:"lsd-date-field__input-container",input:"lsd-date-field__input-container__input",inputFilled:"lsd-date-field__input-container__input--filled",icon:"lsd-date-field__input-container__icon",noIcon:"lsd-date-field__input-container__no-icon",iconButton:"lsd-date-field__input-container__icon-button",supportingText:"lsd-date-field__supporting-text",disabled:"lsd-date-field--disabled",error:"lsd-date-field--error",large:"lsd-date-field--large",medium:"lsd-date-field--medium",small:"lsd-date-field--small",outlined:"lsd-date-field--outlined",underlined:"lsd-date-field--underlined"},yd=({label:e,size:t="large",error:n=!1,errorIcon:o=!1,clearButton:a,supportingText:i,children:l,value:s,placeholder:u,defaultValue:c,disabled:d,onChange:f,icon:p,onIconClick:h,inputProps:m={},calendarIconRef:g,variant:v="underlined",...b})=>{const y=bs(b),w=r.useRef(null),x=Ye({defaultValue:c,value:s,onChange:f,ref:w}),_=(null==m?void 0:m.id)??(b.id||"date-field")+"-input";return We("div",{"aria-disabled":d?"true":"false",...b,className:Qe({...ws(b)},b.className,y.className,bd.root,bd[t],d&&bd.disabled,n&&bd.error),children:[e&&Ge(Vs,{htmlFor:_,className:bd.label,variant:"label2",component:"label",children:e}),We("div",{className:Qe(bd.inputContainer,"outlined"===v?bd.outlined:bd.underlined),children:[Ge("input",{id:_,type:"date",placeholder:u,...m,ref:w,value:x.value||"",onChange:x.onChange,className:Qe(m.className,bd.input,x.filled&&bd.inputFilled),max:m.max||"9999-12-31"}),p?Ge("span",{className:bd.icon,onClick:()=>!d&&h&&h(),ref:g,children:p}):n&&o?Ge("span",{className:bd.icon,children:Ge(Ns,{color:"primary"})}):a&&x.filled?Ge("span",{onClick:()=>!d&&x.setValue(""),className:bd.icon,children:Ge(Ps,{color:"primary"})}):Ge("span",{className:bd.noIcon})]}),i&&Ge("div",{className:Qe(bd.supportingText),children:Ge(Vs,{variant:"label2",component:"p",children:i})}),l]})};yd.classes=bd;const wd={root:"lsd-date-picker",calendar:"lsd-date-picker__calendar",large:"lsd-date-picker--large",medium:"lsd-date-picker--medium",small:"lsd-date-picker--small"},xd=(e,t)=>t&&(null==e?void 0:e.composedPath().includes(t))||!1,_d=({label:e,size:t="large",value:n,onChange:o,withCalendar:a=!0,variant:i="underlined",...l})=>{const s=bs(l),u=r.useRef(null),c=r.useRef(null),[d,f]=r.useState(!1),p=void 0!==n,h=Ye({value:n,defaultValue:"",onChange:o,getInput:()=>{var e;return null==(e=u.current)?void 0:e.querySelector(`input.${yd.classes.input}`)}});return Ge("div",{id:(l.id||"date-picker")+"-input",ref:u,className:Qe({...ws(l)},l.className,s.className,wd.root,wd[t]),children:Ge(yd,{label:e,size:t,variant:i,icon:a&&Ge(Us,{color:"primary"}),onIconClick:()=>f((e=>!e)),value:p||d?h.value:void 0,onChange:h.onChange,calendarIconRef:c,...l,children:Ge(lu,{id:"calendar",children:a&&Ge(ed,{...ys(l),onStartDateChange:e=>(e=>h.setValue(Rc(e)))(e),open:d,onCalendarClickaway:e=>{xd(e,c.current)||f(!1)},handleRef:u,startDate:h.value,disabled:l.disabled,className:wd.calendar})})})})};_d.classes=wd;const kd={root:"lsd-date-range-picker",calendar:"lsd-date-picker__calendar",withCalendar:"lsd-date-range-picker--with-calendar",openCalendar:"lsd-date-range-picker--calendar-open",disabled:"lsd-date-range-picker--disabled",inputContainer:"lsd-date-range-picker__input-container",icon:"lsd-date-range-picker__icon",large:"lsd-date-range-picker--large",medium:"lsd-date-range-picker--medium",small:"lsd-date-range-picker--small",label:"lsd-date-range-picker__label",supportingText:"lsd-date-range-picker__supporting-text",outlined:"lsd-date-range-picker--outlined",separator:"lsd-date-range-picker__separator"},Ed=({startValue:e,endValue:t,onStartDateChange:n,onEndDateChange:o,size:a="large",variant:i="underlined",withCalendar:l=!0,label:s,supportingText:u,disabled:c,...d})=>{const f=bs(d),p=r.useRef(null),h=r.useRef(null),m=r.useRef(null),[g,v]=r.useState(null),b=void 0!==e,y=void 0!==t,w=Ye({value:e,defaultValue:"",onChange:n,getInput:()=>{var e;return null==(e=p.current)?void 0:e.querySelectorAll(`input.${yd.classes.input}`)[0]}}),x=Ye({value:t,defaultValue:"",onChange:o,getInput:()=>{var e;return null==(e=p.current)?void 0:e.querySelectorAll(`input.${yd.classes.input}`)[1]}}),_={...d,size:a,label:void 0,supportingText:void 0},k="startDate"===g||"endDate"===g;return We("div",{ref:p,className:Qe({...ws(d)},f.className,d.className,kd.root,kd[a],l&&kd.withCalendar,k&&kd.openCalendar,c&&kd.disabled),children:[s&&Ge(Vs,{className:kd.label,variant:"label2",component:"label",children:s}),We("div",{className:Qe(d.className,kd.inputContainer,"outlined"===i&&kd.outlined),children:[Ge(yd,{variant:i,calendarIconRef:m,icon:l&&Ge(Us,{color:"primary"}),value:b||k?w.value:void 0,onIconClick:()=>v((e=>zc(e,"startDate"))),onChange:e=>{x.value&&!$c(e.target.value,x.value)||w.onChange(e)},..._}),Ge("div",{className:kd.separator}),Ge(yd,{variant:i,calendarIconRef:h,icon:l&&Ge(Us,{color:"primary"}),value:y||k?x.value:void 0,onIconClick:()=>v((e=>zc(e,"endDate"))),onChange:e=>{w.value&&!$c(w.value,e.target.value)||x.onChange(e)},..._})]}),u&&Ge("div",{className:Qe(kd.supportingText),children:Ge(Vs,{variant:"label2",component:"p",children:u})}),l&&Ge(lu,{id:"calendar",children:Ge(ed,{...ys(d),onStartDateChange:e=>{w.setValue(Rc(e)),v("endDate")},onEndDateChange:e=>x.setValue(Rc(e)),onCalendarClickaway:e=>{xd(e,h.current)||xd(e,m.current)||v(null)},calendarType:g,open:k,onClose:()=>v(null),handleRef:p,mode:"range",disabled:c,startDate:w.value,endDate:x.value,className:kd.calendar,tooltipArrowOffset:Uc(g,a),size:a})})]})};Ed.classes=kd;const Sd={root:"lsd-dropdown",label:"lsd-dropdown__label",buttonContainer:"lsd-dropdown__button-container",trigger:"lsd-dropdown__trigger",optionLabel:"lsd-dropdown__option-label",icons:"lsd-dropdown__icons",icon:"lsd-dropdown__icon",menuIcon:"lsd-dropdown__menu-icon",supportingText:"lsd-dropdown__supporting-text",open:"lsd-dropdown--open",error:"lsd-dropdown--error",disabled:"lsd-dropdown--disabled",small:"lsd-dropdown--small",medium:"lsd-dropdown--medium",large:"lsd-dropdown--large",outlined:"lsd-dropdown--outlined",underlined:"lsd-dropdown--underlined"},Cd=({label:e,size:t="large",error:n=!1,disabled:o=!1,supportingText:a,triggerLabel:i,value:l=[],onChange:s,options:u=[],multi:c=!1,variant:d="outlined",isOpen:f,onToggle:p,menuProps:h={},...m})=>{const g=bs(m),v=r.useRef(null),b=void 0!==f,[y,w]=r.useState(!1);b&&f!==y&&w(f);const{select:x,isSelected:_,selected:k}=((e,t,{onDone:n,onChange:o,multi:a=!1}={})=>{const i=r.useMemo((()=>Object.fromEntries(e.map((e=>[e.value,e])))),[e]),[l,s]=r.useState(Array.isArray(t)?t:t?[t]:[]),u=r.useMemo((()=>ds(l,(()=>!0))),[l]),c=r.useMemo((()=>l.map((e=>i[e]))),[l,i]);r.useEffect((()=>{o&&s(Array.isArray(t)?t:t?[t]:[])}),[t,o]);const d=e=>"string"==typeof e?e:e.value;return{selected:c,isSelected:e=>!!u[d(e)],select:e=>{const t=d(e),r=a?u[t]?l.filter((e=>e!==t)):[...l,t]:[t];o?o(a?r:r[0]):s(r),!a&&n&&n(a?r:r[0])}}})(u,l,{multi:c,onChange:s,onDone:()=>{w(!1)}}),E=e=>{b?p&&p(e):w(e)};r.useEffect((()=>{o&&y&&!b&&w(!1)}),[y,o,b]);const S=(null==m?void 0:m.id)??(m.id||"dropdown")+"-input";return We("div",{ref:v,...ws(m),className:Qe(g.className,m.className,Sd.root,Sd[t],n&&Sd.error,o&&Sd.disabled,y&&Sd.open,"outlined"===d?Sd.outlined:Sd.underlined),children:[e&&Ge(Vs,{htmlFor:S,className:Sd.label,variant:"label2",component:"label",children:e}),Ge("div",{className:Sd.buttonContainer,children:We("button",{id:S,className:Qe(Sd.trigger),onClick:()=>{o||E(!y)},children:[Ge(Vs,{color:"primary",component:"label",variant:"large"===t?"label1":"label2",className:Sd.optionLabel,children:k.length>0?k.map((e=>e.name)).join(", "):i}),We("div",{className:Sd.icons,children:[n&&Ge(Ns,{color:"primary",className:Sd.icon}),Ge(y?Cs:Es,{color:"primary",className:Sd.menuIcon})]})]})}),a&&Ge(Vs,{variant:"large"===t?"label1":"label2",component:"p",className:Sd.supportingText,children:a}),Ge(lu,{id:"dropdown",children:Ge(ru,{handleRef:v,open:y,onClose:()=>E(!1),size:t,genericFontFamily:m.genericFontFamily,...h,children:u.map((e=>Ge(Gs,{size:t,tabIndex:0,onClick:x.bind(null,e),withIcon:c,label:e.name,selected:_(e),onKeyDown:t=>"Enter"===t.key&&x(e)},e.value)))})})]})};Cd.classes=Sd;const Td=r.createContext(null),Od={root:"lsd-icon-button",outlined:"lsd-icon-button--outlined",filled:"lsd-icon-button--filled",disabled:"lsd-icon-button--disabled",small:"lsd-icon-button--small",medium:"lsd-icon-button--medium",large:"lsd-icon-button--large"},Dd=({size:e,disabled:t,variant:n,children:o,...a})=>{const i=bs(a),l=r.useContext(Td),s=e??(null==l?void 0:l.size)??"large",u=n??(null==l?void 0:l.variant)??"outlined",c=t??(null==l?void 0:l.disabled)??!1;return Ge("button",{...ws(a),className:Qe(i.className,a.className,Od.root,Od[s],Od[u],c&&Od.disabled),children:o})};Dd.classes=Od;const Pd={root:"lsd-icon-button-group",outlined:"lsd-icon-button-group--outlined",filled:"lsd-icon-button-group--filled",disabled:"lsd-icon-button-group--disabled",small:"lsd-icon-button-group--small",medium:"lsd-icon-button-group--medium",large:"lsd-icon-button-group--large"},Nd=({size:e="large",disabled:t,variant:n="outlined",children:r,...o})=>{const a=bs(o);return Ge("div",{...ws(o),className:Qe(a.className,o.className,Pd.root,Pd[e],Pd[n],t&&Pd.disabled),children:Ge(Td.Provider,{value:{size:e,variant:n,disabled:t},children:r})})};Nd.classes=Pd;const Id={root:"lsd-modal",small:"lsd-modal--small",medium:"lsd-modal--medium",large:"lsd-modal--large",xsmall:"lsd-modal--extra-small",modalContainer:"lsd-modal__container",header:"lsd-modal__header",title:"lsd-modal__title",subtitle:"lsd-modal__subtitle",titleAndSubtitleContainer:"lsd-modal__title-and-subtitle-container",closeIcon:"lsd-modal__close-icon"},Ad=({isOpen:e,size:t="large",title:n,subtitle:r,onClose:o,children:a,...i})=>{const l=bs(i);return e?Ge("div",{...ws(i),className:Qe(l.className,Id.root,Id[t]),onClick:e=>{e.target===e.currentTarget&&o&&o()},children:We("div",{className:Qe(Id.modalContainer),children:[We("div",{className:Id.header,children:[We("div",{className:Id.titleAndSubtitleContainer,children:[!!n&&Ge(Vs,{className:Id.title,component:"div",variant:"small"===t?"h6":"h5",children:n}),!!r&&Ge(Vs,{className:Id.subtitle,variant:"small"===t?"label2":"label1",component:"div",children:r})]}),Ge(Dd,{onClick:o,className:Id.closeIcon,size:"medium",children:Ge(Ps,{color:"primary"})})]}),a]})}):null};Ad.classes=Id;const Ld={root:"lsd-modal-body"},Rd=({children:e,...t})=>{const n=bs(t);return Ge("div",{...ws(t),className:Qe(n.className,Ld.root),children:e})};Rd.classes=Ld;const jd={root:"lsd-modal-footer"},Md=({children:e,...t})=>{const n=bs(t);return Ge("div",{...ws(t),className:Qe(n.className,jd.root),children:e})};Md.classes=jd;const Fd={root:"lsd-number-input",label:"lsd-number-input__label",mainContainer:"lsd-number-input__main-container",inputContainer:"lsd-number-input__input-container",input:"lsd-number-input__input",errorIcon:"lsd-number-input__error-icon",plusMinusIcons:"lsd-number-input__plus-minus-icons",supportingText:"lsd-number-input__supporting-text",disabled:"lsd-number-input--disabled",error:"lsd-number-input--error",large:"lsd-number-input--large",medium:"lsd-number-input--medium",small:"lsd-number-input--small"},Bd=({label:e,size:t="large",error:n=!1,errorIcon:o=!1,supportingText:a,value:i,placeholder:l,defaultValue:s,disabled:u,onChange:c,icon:d,inputProps:f={},id:p="number-input",min:h=Number.MIN_SAFE_INTEGER,max:m=Number.MAX_SAFE_INTEGER,step:g=1,...v})=>{const b=r.useRef(null),y=bs(v),w=Ye({defaultValue:s,value:i,onChange:c,ref:b});return We("div",{"aria-disabled":u?"true":"false",...ws(v),className:Qe(v.className,y.className,Fd.root,Fd[t],u&&Fd.disabled,n&&Fd.error),children:[e&&Ge(Vs,{htmlFor:p,className:Fd.label,variant:"label2",component:"label",children:e}),We("div",{className:Fd.mainContainer,children:[Ge(Dd,{onClick:()=>{if(u)return;const e=Math.max(h,Number(w.value||"0")-g);w.setValue(e.toString())},className:Fd.plusMinusIcons,children:Ge(Hs,{color:"primary"})}),We("div",{className:Fd.inputContainer,children:[Ge("input",{id:p,type:"number",placeholder:l,ref:b,className:Qe(f.className,Fd.input),value:w.value||"",onChange:w.onChange,min:h,max:m,step:g,disabled:u,...f}),n&&!!o&&Ge("span",{className:Fd.errorIcon,children:Ge(Ns,{color:"primary"})})]}),Ge(Dd,{onClick:()=>{if(u)return;const e=Math.min(m,Number(w.value||"0")+g);w.setValue(e.toString())},className:Fd.plusMinusIcons,children:Ge(ks,{color:"primary"})})]}),a&&Ge("div",{className:Qe(Fd.supportingText),children:Ge(Vs,{variant:"label2",component:"p",children:a})})]})};Bd.classes=Fd;const zd=e=>{try{return[e(),void 0]}catch(t){return[void 0,t]}},$d=({children:e})=>{const[t,n]=r.useState(!1);return r.useEffect((()=>{if("undefined"==typeof window)return;const e=document.querySelector("body");let t=e.querySelector("#lsd-presentation");return t||(t=document.createElement("div"),t.id="lsd-presentation"),e.appendChild(t),n(!0),()=>{zd((()=>e.removeChild(t)))}}),[]),Ge(ou.Provider,{value:{initialized:t},children:e})},Ud={root:"lsd-quote",indentedInline:"lsd-quote--indented-inline",parentheses:"lsd-quote--parentheses",text:"lsd-quote__text"},Hd=({mode:e="indented-line",children:t,...n})=>{const r=bs(n);return Ge(qe,{children:Ge("div",{...ws(n),className:Qe(r.className,n.className,Ud.root,e&&"parentheses"===e?Ud.parentheses:Ud.indentedInline),children:Ge(Vs,{color:"primary",component:"label",variant:"label1",children:t})})})};Hd.classes=Ud;const Vd=r.createContext(null),qd={root:"lsd-radio-button",input:"lsd-radio-button__input",label:"lsd-radio-button__label",disabled:"lsd-radio-button--disabled",large:"lsd-radio-button--large",medium:"lsd-radio-button--medium",small:"lsd-radio-button--small"},Gd=({size:e="large",onChange:t,checked:n,defaultChecked:o,disabled:a=!1,value:i,name:l,inputProps:s={},children:u,...c})=>{const d=bs(c),f=r.useRef(null),p=r.useContext(Vd),h=(null==p?void 0:p.size)??e,m=(null==p?void 0:p.name)??l??"",g=p?p.value===i:n,v=Ye({value:g,defaultValue:o??!1,onChange:t,ref:f});return We(Vs,{color:"primary",variant:"large"===h?"label1":"label2",component:"label","aria-disabled":a?"true":"false",...ws(c),className:Qe(d.className,c.className,qd.root,qd[h],a&&qd.disabled),children:[Ge("input",{ref:f,name:m,value:i,type:"radio",checked:v.value,onChange:e=>{p?p.setActiveRadioButton(e.target.value):v.onChange(e)},defaultChecked:o,className:Qe(s.className,qd.input),...s}),v.value?Ge($s,{color:"primary",focusable:!1}):Ge(zs,{color:"primary",focusable:!1}),Ge("span",{className:qd.label,children:u})]})};Gd.classes=qd;const Wd={root:"lsd-radio-button-group",label:"lsd-radio-button-group__label"},Zd=({size:e="large",label:t,value:n,name:o,onChange:a,children:i,...l})=>{const s=bs(l),u=r.useRef(null),[c,d]=r.useState(n);return r.useEffect((()=>d(n)),[n]),Ge(Vd.Provider,{value:{value:c,setActiveRadioButton:e=>{a?a(e):d(e)},name:o,size:e},children:We("div",{ref:u,...ws(l),className:Qe(s.className,l.className,Wd.root),children:[Ge(Vs,{component:"span",variant:"small"===e?"label2":"label1",className:Wd.label,children:t&&t}),i]})})};Zd.classes=Wd;const Qd=r.createContext(null),Yd={root:"lsd-tab-item",text:"lsd-tab-item--text",icon:"lsd-tab-item--icon",disabled:"lsd-tab-item--disabled",selected:"lsd-tab-item--selected",small:"lsd-tab-item--small",medium:"lsd-tab-item--medium",large:"lsd-tab-item--large",withIcon:"lsd-tab-item--with-icon"},Xd=({name:e,size:t="large",selected:n=!1,inactive:o=!1,icon:a,children:i,...l})=>{const s=bs(l),u=r.useContext(Qd),c=(null==u?void 0:u.size)??t,d=u?u.activeTab===e:n;return We("button",{...ws(l),className:Qe(s.className,l.className,Yd.root,Yd[c],d&&Yd.selected,l.disabled&&Yd.disabled,!!a&&Yd.withIcon),onClick:t=>{l.onClick&&l.onClick(t),o||(null==u?void 0:u.setActiveTab)&&u.setActiveTab(e)},children:[Ge(Vs,{component:"span",className:Yd.text,variant:"small"===c?"label2":"label1",children:i}),a&&Ge("span",{className:Yd.icon,children:a})]})};Xd.classes=Yd;const Kd={root:"lsd-table-body",toolbar:"lsd-table-body__toolbar",row:"lsd-table-body__row"},Jd=({options:e=[],size:t="large",buttonLabel:n="Button",toolbar:r,children:o,...a})=>{const i=bs(a);return We("div",{...ws(a),className:Qe(i.className,a.className,Kd.root),children:[r&&Ge("div",{className:Qe(Kd.toolbar),children:r}),Ge("table",{children:o})]})};Jd.classes=Kd;const ef={root:"lsd-table-header"},tf=({size:e="large",children:t,...n})=>{const r=bs(n);return Ge("div",{...ws(n),className:Qe(r.className,n.className,ef.root),children:t})};tf.classes=ef;const nf={root:"lsd-table",small:"lsd-table--small",medium:"lsd-table--medium",large:"lsd-table--large"},rf=r.createContext(null),of=()=>r.useContext(rf),af=({size:e="large",type:t="default",headerOptions:n,header:r,toolbar:o,children:a,...i})=>{const l=bs(i);return Ge(rf.Provider,{value:{size:e,type:t,headerOptions:n},children:We("div",{...ws(i),className:Qe(l.className,nf.root,nf[e]),children:[Ge(tf,{children:r}),Ge(Jd,{toolbar:o,options:n,children:a})]})})};af.classes=nf;const lf={root:"lsd-table-item",large:"lsd-table-item--large",medium:"lsd-table-item--medium",small:"lsd-table-item--small"},sf=({size:e="large",children:t,...n})=>{const r=bs(n),o=of(),a=(null==o?void 0:o.size)??e;return Ge("td",{...ws(n),className:Qe(r.className,n.className,lf.root,lf[a]),children:t})};sf.classes=lf;const uf={root:"lsd-table-row"},cf=({size:e="large",type:t="default",children:n,...r})=>{const o=bs(r),a=of(),i=(null==a?void 0:a.type)??t;return We("tr",{...ws(r),className:Qe(o.className,r.className,uf.root),children:["checkbox"===i&&Ge("td",{className:lf.root,children:Ge(dd,{})}),"radio"===i&&Ge("td",{className:lf.root,children:Ge(Gd,{value:"1"})}),n]})};cf.classes=uf;const df=r.createContext(null),ff=(e=0)=>{let t=e-1;return()=>(t++,t)},pf="undefined"==typeof DOMRectReadOnly?null:new DOMRectReadOnly(0,0,0,0),hf=ff(),mf=(e,t)=>{const n=(()=>{const{observe:e,unobserve:t,ready:n}=r.useContext(df)??{};return r.useMemo((()=>({observe:e,unobserve:t,ready:n})),[e,t,n])})(),o=r.useMemo((()=>t??hf().toString()),[t]),a=((e,t)=>{var n;const o=r.useContext(df);return(null==(n=null==o?void 0:o.rect)?void 0:n[e])??t})(o)??pf;return r.useEffect((()=>{if(n&&n.ready)return e.current&&n.observe(o,e),()=>{n.unobserve(o)}}),[n.ready,e.current]),a},gf=(e,t,n,r)=>-1===e?t:n-(r+t),vf=(e,t)=>{var n;const o=mf(e),[a,i]=r.useState((null==(n=null==e?void 0:e.current)?void 0:n.scrollLeft)??0),[l,s]=r.useState(0),[u,c]=r.useState(0),d=r.useRef(null);((e,t,n,o,a)=>{const i=r.useMemo((()=>"string"==typeof e?e:e()),[]),l=r.useMemo((()=>"function"==typeof t?t():t),[t]);r.useEffect((()=>{if((null==l?void 0:l.addEventListener)&&(null==l?void 0:l.removeEventListener))return l.addEventListener(i,n,o),()=>{l.removeEventListener(i,n,o)}}),[i,l])})("scroll",e.current,(e=>{i(e.target.scrollLeft)}),{passive:!0});r.useEffect((()=>{if(d.current&&clearTimeout(d.current),!e.current)return;const{scrollLeft:t,scrollWidth:n,clientWidth:r}=e.current;c(gf(1,t,n,r)),s(gf(-1,t,n,r))}),[o,a,null==t?void 0:t.deps]);const f=(n,r)=>{const{clientWidth:o,scrollLeft:a}=e.current,i=Array.from(e.current.childNodes).find((e=>e.getBoundingClientRect().x>=0)),l=Math.max(r??o/3,i?i.clientWidth:0);e.current.scrollTo({behavior:(null==t?void 0:t.scrollBehavior)??"smooth",left:a+l*n})};return r.useMemo((()=>({right:u,left:l,toRight:f.bind(null,1),toLeft:f.bind(null,-1)})),[u,l])},bf={root:"lsd-tabs",fullWidth:"lsd-tabs--full-width",withScrollControls:"lsd-tabs--with-scroll-controls",leftScrollControl:"lsd-tabs__left-scroll-control",rightScrollControl:"lsd-tabs__right-scroll-control"},yf=({size:e="large",fullWidth:t=!1,scrollControls:n=!1,onChange:o,activeTab:a,children:i,...l})=>{const s=bs(l),u=r.useRef(null),[c,d]=r.useState(a);r.useEffect((()=>d(a)),[a]);const f=vf(u,{scrollBehavior:"smooth",deps:[i]}),p=0!==f.left||0!==f.right;return Ge(Qd.Provider,{value:{activeTab:c,setActiveTab:e=>{o?o(e):d(e)},size:e},children:We("div",{ref:u,...ws(l),className:Qe(s.className,l.className,bf.root,t&&bf.fullWidth,n&&p&&bf.withScrollControls),children:[n&&p&&Ge(Xd,{inactive:!0,name:"Prev",disabled:0===f.left,onClick:()=>f.toLeft(),className:bf.leftScrollControl,children:Ge(js,{color:"primary"})}),i,n&&p&&Ge(Xd,{inactive:!0,name:"Next",disabled:0===f.right,onClick:()=>f.toRight(),className:bf.rightScrollControl,children:Ge(Ms,{color:"primary"})})]})})};yf.classes=bf;const wf={root:"lsd-tag",label:"lsd-tag__label",outlined:"lsd-tag--outlined",filled:"lsd-tag--filled",disabled:"lsd-tag--disabled",small:"lsd-badge--small",large:"lsd-badge--large"},xf=({variant:e="outlined",disabled:t,icon:n,iconDirection:r="left",children:o,size:a="large",...i})=>{const l=bs(i);return We("div",{"aria-label":o,...ws(i),className:Qe(l.className,i.className,wf.root,wf[e],t&&wf.disabled,wf[a]),children:["left"===r&&n,Ge(Vs,{variant:"small"===a?"label2":"label1",className:wf.label,component:"span",children:o}),"right"===r&&n]})};xf.classes=wf;var _f=Hi,kf=0;var Ef=function(e){var t=++kf;return _f(e)+t};const Sf={root:"lsd-text-field",inputContainer:"lsd-text-field__input-container",label:"lsd-text-field__label",input:"lsd-text-field__input",icon:"lsd-text-field__icon",clearButton:"lsd-text-field__clear-button",supportingText:"lsd-text-field__supporting-text",disabled:"lsd-text-field--disabled",error:"lsd-text-field--error",large:"lsd-text-field--large",medium:"lsd-text-field--medium",small:"lsd-text-field--small",outlined:"lsd-text-field--outlined",underlined:"lsd-text-field--underlined"},Cf=({size:e="large",label:t,icon:n,error:o=!1,errorIcon:a=!1,clearButton:i,supportingText:l,children:s,value:u,placeholder:c,defaultValue:d,disabled:f,onChange:p,inputProps:h={},labelProps:m={},variant:g="underlined",...v})=>{const b=bs(v),y=r.useRef(null),w=Ye({defaultValue:d,value:u,onChange:p,ref:y}),x=h.id||Ef("TextField-");return We("div",{"aria-disabled":f?"true":"false",...ws(v),className:Qe(b.className,v.className,Sf.root,Sf[e],f&&Sf.disabled,o&&Sf.error,"outlined"===g?Sf.outlined:Sf.underlined),children:[t&&Ge(Vs,{variant:"label2",component:"label",htmlFor:x,...m,className:Qe(Sf.label,m.className),children:t}),We("div",{className:Sf.inputContainer,children:[Ge("input",{id:x,placeholder:c,ref:y,value:w.value,onChange:w.onChange,...h,className:Qe(h.className,Sf.input)}),o&&a?Ge(Ns,{color:"primary",className:Sf.icon}):i&&w.filled?Ge(Dd,{disabled:f,onClick:()=>!f&&w.setValue(""),"aria-label":"clear",className:Sf.clearButton,children:Ge(Ps,{color:"primary",className:Sf.icon})}):n]}),l&&Ge("div",{className:Qe(Sf.supportingText),children:Ge(Vs,{variant:"large"===e?"label1":"label2",component:"p",children:l})})]})};Cf.classes=Sf;const Tf={vars:{lsd:(...e)=>`--${["lsd",...e].join("-")}`,typography:(e,t)=>Tf.vars.lsd(e,t),color:(e,t)=>Tf.vars.lsd(e,t),wrap:e=>`var(${e})`},define:(e,t)=>`${e}: ${t};`},Of=(()=>{const e={};return t=>{const n=t.name;return e[n]&&"undefined"!=typeof window||(e[n]=(e=>{const t=[],n=[],r=fs.map((()=>[])),o=fs.map((()=>[]));ps.forEach((n=>{ms.forEach((r=>{var o;const a=(null==(o=e.typography[n][r])?void 0:o.toString())??"unset";t.push(Tf.define(Tf.vars.typography(n,r),a))}))})),t.push(Tf.define(Tf.vars.lsd("typography","generic-font-family"),e.typographyGlobal.genericFontFamily)),fs.forEach(((t,n)=>{ps.forEach((r=>{ms.forEach((a=>{var i,l,s,u;const c=e.breakpoints[t].typography[r][a],d=n>0?null==(u=null==(s=null==(l=null==(i=e.breakpoints)?void 0:i[fs[n-1]])?void 0:l.typography)?void 0:s[r])?void 0:u[a]:e.typography[r][a];c&&c!==d&&o[n].push(Tf.define(Tf.vars.typography(r,a),c.toString()))}))}))}));{const{primary:n,secondary:r,...o}=e.palette,a=o;t.push(Tf.define(Tf.vars.color("theme","primary"),n),Tf.define(Tf.vars.color("theme","secondary"),r),...Object.keys(a).flatMap((e=>Object.keys(a[e]).map((t=>Tf.define(Tf.vars.color(e,t),a[e][t]))))))}e.spacing.map((e=>{const n=Tf.vars.lsd("spacing",e.toString());t.push(Tf.define(n,`${e}px`))})),fs.map(((t,a)=>{n.push(`@media (min-width: ${e.breakpoints[t].width}px) {\n :root {\n ${o[a].join("\n")}\n }\n\n ${r[a]}\n }`)}));const i=`\n ${t.join("\n")} \n\n ${n.join("\n")}\n `;return{cssVars:i,globalStyles:a.css(":root{",i,";}","")}})(t)),e[n]}})(),Df={name:"LSD",breakpoints:{xs:{width:0,typography:{display1:{},display2:{},display3:{},display4:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},body1:{},body2:{},body3:{},label1:{},label2:{},subtitle1:{},subtitle2:{},subtitle3:{},subtitle4:{}}},sm:{width:400,typography:{display1:{},display2:{},display3:{},display4:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},body1:{},body2:{},body3:{},label1:{},subtitle4:{},subtitle3:{},label2:{},subtitle1:{},subtitle2:{}}},md:{width:768,typography:{display1:{},display2:{},display3:{},display4:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},body1:{},body2:{},body3:{},label1:{},subtitle4:{},subtitle3:{},label2:{},subtitle1:{},subtitle2:{}}},lg:{width:1024,typography:{display1:{},display2:{},display3:{},display4:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},body1:{},body2:{},body3:{},label1:{},subtitle4:{},subtitle3:{},label2:{},subtitle1:{},subtitle2:{}}},xl:{width:1205,typography:{display1:{},display2:{},display3:{},display4:{},h1:{},h2:{},h3:{},h4:{},h5:{},h6:{},body1:{},body2:{},body3:{},label1:{},subtitle4:{},subtitle3:{},label2:{},subtitle1:{},subtitle2:{}}}},typography:{display1:{fontSize:"5.5rem",fontWeight:"normal",lineHeight:"6rem"},display2:{fontSize:"4rem",fontWeight:"normal",lineHeight:"4.5rem"},display3:{fontSize:"3.5rem",fontWeight:"normal",lineHeight:"4rem"},display4:{fontSize:"3rem",fontWeight:"normal",lineHeight:"3.5rem"},h1:{fontSize:"2.5rem",fontWeight:"normal",lineHeight:"3rem"},h2:{fontSize:"2rem",fontWeight:"normal",lineHeight:"2.5rem"},h3:{fontSize:"1.75rem",fontWeight:"normal",lineHeight:"2.25rem"},h4:{fontSize:"1.5rem",fontWeight:"normal",lineHeight:"2rem"},h5:{fontSize:"1.25rem",fontWeight:"normal",lineHeight:"1.75rem"},h6:{fontSize:"1rem",fontWeight:"normal",lineHeight:"1.5rem"},subtitle1:{fontSize:"1.125rem",fontWeight:"normal",lineHeight:"1.5rem"},subtitle2:{fontSize:"1rem",fontWeight:"normal",lineHeight:"1.5rem"},subtitle3:{fontSize:"0.875rem",fontWeight:"normal",lineHeight:"1.25rem"},subtitle4:{fontSize:"0.75rem",fontWeight:"normal",lineHeight:"1rem"},body1:{fontSize:"1rem",fontWeight:"normal",lineHeight:"1.5rem"},body2:{fontSize:"0.875rem",fontWeight:"normal",lineHeight:"1.25rem"},body3:{fontSize:"0.75rem",fontWeight:"normal",lineHeight:"1rem"},label1:{fontSize:"0.875rem",fontWeight:"normal",lineHeight:"1.25rem"},label2:{fontSize:"0.75rem",fontWeight:"normal",lineHeight:"1rem"}},typographyGlobal:{genericFontFamily:"sans-serif"},palette:{primary:"0, 0, 0",secondary:"255, 255, 255",surface:{primary:"255, 255, 255",secondary:"0, 0, 0"},text:{primary:"0, 0, 0",secondary:"255, 255, 255",tertiary:"0, 0, 0, 0.34"},border:{primary:"0, 0, 0",secondary:"255, 255, 255"},icon:{primary:"0, 0, 0",secondary:"255, 255, 255"}},spacing:[4,8,16,24,32,40,64,80,96,120],globalStyles:a.css("",""),cssVars:""},{cssVars:Pf,globalStyles:Nf}=Of(Df);Df.cssVars=Pf,Df.globalStyles=Nf;const If=ff(),Af=(e,t)=>ds(ps,(n=>({...t.typography[n],...e.typography[n]??{}}))),Lf=(e,t)=>({...t.typographyGlobal,...e.typographyGlobal}),Rf=(e,t)=>{const n=new Map;return Object.fromEntries(fs.reduce(((r,o,a)=>[...r,{...t.breakpoints[o],...e.breakpoints[o],...ds(["typography"],(o=>((e,t,n,r,o,a)=>"typography"===e?ds(o[e],(i=>{var l,s,u,c,d,f,p,h,m,g,v;const b=`${e}.${i}`,y=!0===a.get(b);return Object.keys((null==(u=null==(s=null==(l=r.breakpoints)?void 0:l[fs[n]])?void 0:s[e])?void 0:u[i])??{}).length>0&&a.set(b,!0),{...o[e][i],...r[e][i],...y?(null==(d=null==(c=null==t?void 0:t[n-1])?void 0:c[e])?void 0:d[i])??{}:null==(h=null==(p=null==(f=o.breakpoints)?void 0:f[fs[n]])?void 0:p[e])?void 0:h[i],...(null==(v=null==(g=null==(m=r.breakpoints)?void 0:m[fs[n]])?void 0:g[e])?void 0:v[i])??{}}})):{})(o,r,a,e,t,n)))}]),[]).map(((e,t)=>[fs[t],e])))},jf=(e,t)=>{var n,r,o,a,i,l,s,u,c;const d=e.palette.primary??t.palette.primary,f=e.palette.secondary??t.palette.secondary;return{primary:d,secondary:f,surface:{primary:(null==(n=e.palette.surface)?void 0:n.primary)??f,secondary:(null==(r=e.palette.surface)?void 0:r.secondary)??d},border:{primary:(null==(o=e.palette.border)?void 0:o.primary)??d,secondary:(null==(a=e.palette.border)?void 0:a.secondary)??f},icon:{primary:(null==(i=e.palette.icon)?void 0:i.primary)??d,secondary:(null==(l=e.palette.icon)?void 0:l.secondary)??f},text:{primary:(null==(s=e.palette.text)?void 0:s.primary)??d,secondary:(null==(u=e.palette.text)?void 0:u.secondary)??f,tertiary:(null==(c=e.palette.text)?void 0:c.tertiary)??`${d}, 0.34`}}},Mf=(e,t=Df)=>{const n={name:e.name??(r=t.name,`${r}-${If()}`),typography:Af(e,t),typographyGlobal:Lf(e,t),breakpoints:Rf(e,t),palette:jf(e,t),globalStyles:a.css("",""),cssVars:"",spacing:e.spacing.length?e.spacing:t.spacing};var r;const{cssVars:o,globalStyles:i}=Of(n);return n.cssVars=o,n.globalStyles=i,n},Ff=Mf({name:"Light",breakpoints:{},typography:{},typographyGlobal:{},palette:{},spacing:[]},Df),Bf={light:Ff,dark:Mf({name:"Dark",breakpoints:{},typography:{},typographyGlobal:{},palette:{primary:"255, 255, 255",secondary:"0, 0, 0"},spacing:[]},Ff)},zf=a.css(".",uu.root,"{box-sizing:border-box;}.",uu.label,"{display:block;}.",uu.inputContainer,"{display:flex;justify-content:space-between;}.",uu.disabled,"{opacity:0.34;}.",uu.input,"{border:none;outline:none;font-size:14px;color:rgb(var(--lsd-text-primary));background:none;width:100%;}.",uu.input,":hover{outline:none;}.",uu.input,"::placeholder{color:rgb(var(--lsd-text-primary));opacity:0.3;}.",uu.icon,"{cursor:pointer;display:flex;align-items:center;}.",uu.error,"{text-decoration:line-through;}.",uu.large,"{width:208px;.",uu.label,"{margin:0 0 6px 18px;}.",uu.inputContainer,"{height:40px;}.",uu.input,"{padding:9px 17px;}.",uu.icon,"{padding:12px 13px;}}.",uu.medium,"{width:188px;.",uu.label,"{margin:0 0 6px 14px;}.",uu.inputContainer,"{height:32px;}.",uu.input,"{padding:5px 13px;}.",uu.icon,"{padding:8px 11px;}}.",uu.small,"{width:164px;.",uu.label,"{margin:0 0 6px 12px;}.",uu.inputContainer,"{height:28px;}.",uu.input,"{padding:5px 11px;}.",uu.icon,"{padding:6px 9px;}}.",uu.withIcon,"{}.",uu.outlined," .",uu.inputContainer,"{border:1px solid rgb(var(--lsd-border-primary));}.",uu.underlined," .",uu.inputContainer,"{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}.",uu.dropdownItemPlaceholder,"{opacity:0.5;white-space:pre;}",""),$f=a.css(".",du.root,"{width:fit-content;box-sizing:border-box;display:flex;flex-direction:row;align-items:center;justify-content:center;border:1px solid rgb(var(--lsd-icon-primary));border-radius:20px;&:hover,&:focus{text-decoration:underline;cursor:pointer;}}.",du.large,"{padding:3px 11px;gap:12px;height:28px;}.",du.small,"{padding:3px 7px;gap:8px;height:24px;}.",du.filled,"{background-color:rgb(var(--lsd-icon-primary));.",du.label,"{color:rgb(var(--lsd-text-secondary));}svg{--lsd-icon-primary:var(--lsd-icon-secondary);}}.",du.outlined,"{color:rgb(var(--lsd-text-primary));}.",du.disabled,"{opacity:0.3;cursor:initial;pointer-events:none;}",""),Uf=a.css(".",mu.root,"{}.",mu.list,"{display:flex;flex-direction:row;align-items:center;list-style-type:none;margin:0;padding:0;}.",mu.disabled,"{.",mu.list,"{opacity:0.34;cursor:initial;pointer-events:none;}}.",mu.listBox,"{display:flex;flex-direction:column;overflow:auto;border:1px solid rgb(var(--lsd-border-primary));margin-top:10px;position:absolute;width:auto!important;}.",mu.listBox,">li{cursor:pointer;&:not(:last-child){border-bottom:1px solid rgb(var(--lsd-border-primary));}&:hover,&:focus{text-decoration:underline;text-decoration-color:rgb(var(--lsd-border-primary));}}.",mu.listBox," li>a{width:164px;padding:5px 11px;}",""),Hf=a.css(".",pu.root,"{list-style-type:none;display:flex;align-items:center;}.",mu.list,">li:not(:last-child)::after{display:inline-block;margin-inline:12px;content:'/';}.",pu.itemLink,"{text-decoration:none;cursor:pointer;}.",pu.outlined,"{padding:3px 11px;border:1px solid rgb(var(--lsd-border-primary));}",pu.large,"{}",pu.small,"{}.",mu.root,":not(.",mu.disabled,"){.",pu.itemLink,"{&:hover,&:focus{text-decoration:underline;text-decoration-color:rgb(var(--lsd-border-primary));}}}",""),Vf=a.css(".",bu.root,"{width:auto;cursor:pointer;padding:6px 24px;}.",bu.disabled,"{cursor:default;opacity:0.34;}.",bu.large,"{padding:10px 40px;}.",bu.medium,"{padding:6px 24px;}.",bu.small,"{padding:6px 12px;}.",bu.root,":hover{&:not(.",bu.disabled,"){.",bu.text,"{text-decoration:underline;}}}.",bu.withIcon,"{display:flex;align-items:center;}.",bu.icon,"{display:flex;justify-content:center;align-items:center;height:100%;}.",bu.large,".",bu.withIcon,"{padding:10px 0px 10px 18px;.",bu.icon,"{width:42px;}}.",bu.medium,".",bu.withIcon,"{padding:6px 0px 6px 14px;.",bu.icon,"{width:38px;}}.",bu.small,".",bu.withIcon,"{padding:6px 0px 6px 12px;.",bu.icon,"{width:34px;}}.",bu.outlined,"{background:none;border:1px solid rgb(var(--lsd-border-primary));.",bu.text,"{color:rgb(var(--lsd-text-primary));}}.",bu.filled,"{background:rgb(var(--lsd-surface-secondary));border:1px solid rgb(var(--lsd-border-primary));.",bu.text,"{color:rgb(var(--lsd-text-secondary));}}",""),qf=a.css(".",Nc.root,"{border:1px solid rgb(var(--lsd-border-primary));visibility:hidden;position:absolute!important;top:0;left:0;opacity:0;visibility:hidden;margin:0;padding:0;box-sizing:border-box;background:rgb(var(--lsd-surface-primary));user-select:none;}.",Nc.container,"{display:flex;flex-direction:column;padding:8px;}.",Nc.open,"{opacity:1;visibility:visible;}.",Nc.header,"{display:flex;justify-content:center;align-items:center;height:32px;margin-bottom:8px;}.",Nc.weekDay,"{display:flex;justify-content:center;align-items:center;aspect-ratio:1/1;margin-bottom:4px;}.",Nc.changeYear,"{position:relative;display:flex;justify-content:center;align-items:center;padding:2px 0xp 2px 8px;gap:6px;border:1px solid transparent;}.",Nc.changeYearActive,"{.",Nc.yearAndIcon,"{border:1px solid rgb(var(--lsd-border-primary));}}.",Nc.changeYearIconContainer,"{display:flex;justify-content:center;align-items:center;cursor:pointer;border:none;}.",Nc.month,"{margin-right:8px;}.",Nc.monthAndYear,"{display:flex;align-items:center;justify-content:center;}.",Nc.dayContainer,"{cursor:pointer;background:transparent;position:relative;box-sizing:border-box;border:1px solid transparent;}.",Nc.day,"{aspect-ratio:1/1;display:flex;justify-content:center;align-items:center;}.",Nc.day,":hover{cursor:pointer;text-decoration:underline;text-decoration-color:rgb(var(--lsd-border-primary));}.",Nc.day," label:hover{cursor:pointer;}.",Nc.daySelected,"{border:1px solid rgb(var(--lsd-border-primary));}.",Nc.dayDisabled,"{opacity:0.3;cursor:default;}.",Nc.todayIndicator,"{position:absolute;left:50%;transform:translateX(-50%);bottom:2px;}.",Nc.disabled,"{pointer-events:none;border:1px solid rgba(var(--lsd-border-primary), 0.3);label{opacity:0.3;}.",Nc.button,"{opacity:0.3;}.",Nc.daySelected,"{opacity:0.3;}}.",Nc.button,"{border:1px solid rgb(var(--lsd-border-primary));cursor:pointer;background:transparent;width:32px;height:32px;display:flex;align-items:center;justify-content:center;position:absolute;}.",Nc.nextMonthButton,"{top:8px;right:8px;}.",Nc.previousMonthButton,"{top:8px;left:8px;}.",Nc.dayBorderLeft,"{border-left:1px double rgb(var(--lsd-border-primary));}.",Nc.dayBorderRight,"{border-right:1px double rgb(var(--lsd-border-primary));}.",Nc.dayBorderLeftAndRight,"{border-left:1px double rgb(var(--lsd-border-primary));border-right:1px double rgb(var(--lsd-border-primary));}.",Nc.dayBorderTopAndBottom,"{border-top:1px double rgb(var(--lsd-border-primary));border-bottom:1px double rgb(var(--lsd-border-primary));}.",Nc.monthTable,"{border-collapse:collapse;}.",Nc.yearDropdown,"{box-sizing:border-box;position:absolute;top:100%;left:0;max-height:200px;overflow-y:auto;width:100%;border:1px solid rgb(var(--lsd-border-primary));border-top:none;z-index:1;.",Nc.year,"{border-bottom:1px solid rgb(var(--lsd-border-primary));}}.",Nc.yearDropdownHidden,"{visibility:hidden;}.",Nc.year,"{display:flex;cursor:pointer;transition:background-color 0.2s;align-items:center;background:rgb(var(--lsd-surface-primary));:hover{text-decoration:underline;}}.",Nc.yearAndIcon,"{border:1px solid rgb(var(--lsd-border-primary));}.",Nc.large,"{.",Nc.year,"{padding:6px 0px 6px 14px;}.",Nc.changeYearIconContainer,"{width:32px;}}.",Nc.medium,"{.",Nc.year,"{padding:6px 0px 6px 12px;}.",Nc.changeYearIconContainer,"{width:28px;}}.",Nc.small,"{.",Nc.year,"{padding:6px 0px 6px 12px;}.",Nc.changeYearIconContainer,"{width:28px;}}",""),Gf=a.css(".",td.root,"{box-sizing:border-box;display:flex;flex-direction:column;}.",td.root,">.",id.root,"{margin-bottom:-1px;}.",td.large,"{}.",td.medium,"{}.",td.small,"{}",""),Wf=a.css(".",od.root,"{box-sizing:border-box;padding:14px 22px;border:1px solid rgb(var(--lsd-border-primary));}",""),Zf=a.css(".",id.root,"{box-sizing:border-box;padding:10px 18px;text-align:center;border:1px solid rgb(var(--lsd-border-primary));}.",id.title,"{overflow:hidden;word-break:break-all;}.",id.large,"{padding:10px 18px;}.",id.medium,"{padding:6px 14px;}.",id.small,"{padding:6px 12px;}",""),Qf=a.css(".",cd.root,"{position:relative;display:flex;flex-direction:row;align-items:center;}.",cd.input,"{opacity:0;position:absolute;left:0;top:0;padding:0;margin:0;width:100%;height:100%;}.",cd.root,":not(.",cd.disabled,"){&:hover,&.",cd.focused,"{text-decoration:underline;}.",cd.input,"{cursor:pointer;}}.",cd.disabled,"{opacity:0.34;}.",cd.label,"{margin-left:18px;}.",cd.large,"{.",cd.label,"{margin-left:18px;}}.",cd.medium,"{.",cd.label,"{margin-left:14px;}}.",cd.small,"{.",cd.label,"{margin-left:12px;}}",""),Yf=a.css(".",fd.root,"{display:flex;flex-direction:column;gap:6px;width:fit-content;}.",fd.label,"{margin-bottom:6px;}",""),Xf=a.css(".",gd.root,"{box-sizing:border-box;display:flex;flex-direction:column;}.",gd.open,"{.",gd.content,"{border-top:1px solid transparent;}}.",gd.content,"{border:1px solid rgb(var(--lsd-border-primary));}",""),Kf=a.css(".",hd.root,"{box-sizing:border-box;}.",hd.root,":not(.",hd.disabled,"){.",hd.trigger,"{&:hover{.",hd.label,"{text-decoration:underline;}}}}.",hd.trigger,"{width:100%;display:flex;flex-direction:row;align-items:center;justify-content:space-between;cursor:pointer;background:none;border:1px solid rgb(var(--lsd-border-primary));&:focus{outline:none;}}.",hd.label,"{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:auto;}.",hd.icons,"{display:flex;flex-direction:row;align-items:center;justify-content:flex-end;}.",hd.icon,"{margin-right:8px;}.",hd.menuIcon,"{}.",hd.disabled,"{.",hd.trigger,"{opacity:0.34;cursor:initial;}}.",hd.large,"{.",hd.trigger,"{width:299px;height:40px;padding:9px 17px;}}.",hd.medium,"{.",hd.trigger,"{width:270px;height:32px;padding:5px 13px;}}.",hd.small,"{.",hd.trigger,"{width:235px;height:28px;padding:5px 11px;}}",""),Jf=a.css(".",bd.root,"{width:auto;box-sizing:border-box;}.",bd.label,"{display:block;}.",bd.icon,"{position:absolute;right:0;cursor:pointer;display:flex;align-items:center;background-color:rgb(var(--lsd-surface-primary));}.",bd.icon,":focus{background:blue;background-color:pink;border:1px solid rgb(var(--lsd-border-primary));}.",bd.noIcon,"{position:absolute;right:0;background-color:rgb(var(--lsd-surface-primary));padding:12px;}.",bd.outlined,"{border:1px solid rgb(var(--lsd-border-primary));}.",bd.underlined,"{border-bottom:1px solid rgb(var(--lsd-border-primary));}.",bd.inputContainer,"{position:relative;display:flex;align-items:center;justify-content:space-between;}.",bd.disabled,"{opacity:0.34;}.",bd.input,"{border:none;outline:none;font-size:14px;color:rgb(var(--lsd-text-primary));background:none;width:100%;opacity:0.4;transition:opacity 0.2s ease-in-out;}.",bd.input,"::-webkit-inner-spin-button,.",bd.input,"::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none;}.",bd.input,":hover{outline:none;}.",bd.supportingText,"{position:absolute;}.",bd.large,"{width:208px;.",bd.label,"{margin:0 0 6px 18px;}.",bd.inputContainer,"{height:40px;}.",bd.input,"{padding:9px 0px 9px 17px;}.",bd.icon,"{padding:12px 13px;}.",bd.supportingText,"{margin:6px 18px 0 18px;}}.",bd.medium,"{width:188px;.",bd.label,"{margin:0 0 6px 14px;}.",bd.inputContainer,"{height:32px;}.",bd.input,"{padding:5px 11px 5px 13px;}.",bd.icon,"{padding:8px 11px;}.",bd.supportingText,"{margin:6px 14px 0 14px;}}.",bd.small,"{width:164px;.",bd.label,"{margin:0 0 6px 12px;}.",bd.inputContainer,"{height:28px;}.",bd.input,"{padding:5px 9px 5px 11px;font-size:12px;}.",bd.icon,"{padding:6px 9px;}.",bd.supportingText,"{margin:6px 12px 0 12px;}}.",bd.input,":invalid,.",bd.inputFilled,"{color:rgb(var(--lsd-border-primary));opacity:1;}.",bd.error," .",bd.input,"::-webkit-datetime-edit-year-field,.",bd.error," .",bd.input,"::-webkit-datetime-edit-month-field,.",bd.error," .",bd.input,"::-webkit-datetime-edit-day-field{text-decoration:line-through;}@supports not selector(::-webkit-datetime-edit-day-field){.",bd.error," .",bd.input,"{text-decoration:line-through;}}",""),ep=a.css(".",wd.root,"{width:fit-content;}.",wd.calendar,"{border-top:none!important;}.",wd.large,"{.",bd.large,"{width:318px;}}.",wd.medium,"{.",bd.medium,"{width:290px;}}.",wd.small,"{.",bd.small,"{width:262px;}}",""),tp=a.css(".",Sd.root,"{}.",Sd.root,":not(.",Sd.disabled,"):not(\n .",Sd.error,"\n ){.",Sd.trigger,"{&:hover,&:focus{.",Sd.optionLabel,"{text-decoration:underline;}}}}.",Sd.label,"{display:block;}.",Sd.buttonContainer,"{display:flex;justify-content:space-between;}.",Sd.trigger,"{width:100%;display:flex;flex-direction:row;align-items:center;justify-content:space-between;border:none;cursor:pointer;background:none;&:focus{outline:none;}}.",Sd.optionLabel,"{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.",Sd.icons,"{display:flex;flex-direction:row;align-items:center;justify-content:center;gap:8px;}.",Sd.icon,"{display:flex;align-items:center;}.",Sd.menuIcon,"{}.",Sd.supportingText,"{margin:6px 14px;}.",Sd.error,"{.",Sd.optionLabel,"{text-decoration:line-through;}}.",Sd.disabled,"{opacity:0.34;cursor:initial;}.",Sd.large,"{width:208px;&.",Sd.error,"{width:230px;}.",Sd.label,"{margin:0 0 6px 18px;}.",Sd.buttonContainer,"{height:40px;}.",Sd.trigger,"{padding:10px 0px 10px 18px;}.",Sd.icons,"{padding:0px 14px;}}.",Sd.medium,"{width:188px;&.",Sd.error,"{width:210px;}.",Sd.label,"{margin:0 0 6px 14px;}.",Sd.buttonContainer,"{height:32px;}.",Sd.trigger,"{padding:6px 0px 6px 14px;}.",Sd.icons,"{padding:0px 12px;}}.",Sd.small,"{width:164px;&.",Sd.error,"{width:186px;}.",Sd.label,"{margin:0 0 6px 12px;}.",Sd.buttonContainer,"{height:28px;}.",Sd.trigger,"{padding:6px 0px 6px 12px;}.",Sd.icons,"{padding:0px 10px;}}.",Sd.outlined,"{.",Sd.buttonContainer,"{border:1px solid rgb(var(--lsd-border-primary));}}.",Sd.underlined,"{.",Sd.buttonContainer,"{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}}",""),np=a.css(".",qs.root,"{width:100%;box-sizing:border-box;display:flex;flex-direction:row;align-items:center;border:1px solid rgb(var(--lsd-border-primary));:not(.",qs.disabled,"){cursor:pointer;&:hover,&:focus{outline:none;.",qs.label,"{text-decoration:underline;}}}}.",qs.label,"{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.",qs.disabled,"{opacity:0.34;}.",qs.icon,"{margin-right:18px;flex-shrink:0;}.",qs.small,"{padding:5px 9px;height:28px;}.",qs.medium,"{padding:5px 11px;height:32px;}.",qs.large,"{padding:5px 13px;height:40px;}",""),rp=a.css(".",Od.root,"{display:flex;flex-direction:row;align-items:center;justify-content:center;cursor:pointer;background:none;padding:0;border:1px solid rgb(var(--lsd-border-primary));}.",Od.filled,"{background-color:rgb(var(--lsd-icon-primary));svg{--lsd-icon-primary:var(--lsd-icon-secondary);}}.",Od.outlined,"{}.",Od.disabled,"{opacity:0.34;cursor:default;}.",Od.large,"{width:40px;height:40px;}.",Od.medium,"{width:32px;height:32px;}.",Od.small,"{width:28px;height:28px;}",""),op=a.css(".",Pd.root,"{display:flex;flex-direction:row;}.",Pd.outlined," .",Od.root,":not(:last-child){border-right:none;}",""),ap=a.css(".",xs.root,"{}.",xs.primary,"{&.",xs.filled,"{&,*{fill:rgb(var(--lsd-icon-primary));}}$.",xs.stroked,"{&,*{fill:rgb(var(--lsd-icon-primary));}}}.",xs.secondary,"{&.",xs.filled,"{&,*{fill:rgb(var(--lsd-icon-secondary));}}$.",xs.stroked,"{&,*{fill:rgb(var(--lsd-icon-secondary));}}}",""),ip=a.css(".",tu.root,"{position:absolute;top:0;left:0;opacity:0;visibility:hidden;margin:0;padding:0;box-sizing:border-box;background:rgb(var(--lsd-surface-primary));overflow:auto;border:1px solid rgb(var(--lsd-border-primary));border-top:0;}.",tu.root,">div{border:0;&:not(:last-child){border-bottom:1px solid rgb(var(--lsd-border-primary));}}.",tu.open,"{opacity:1;visibility:visible;}.",tu.large,"{max-height:220px;}.",tu.medium,"{max-height:176px;}.",tu.small,"{max-height:154px;}",""),lp=a.css(".",Ud.root,"{color:rgb(var(--lsd-text-primary));white-space:pre-wrap;}.",Ud.indentedInline,"{border-left:1px solid rgb(var(--lsd-border-primary));padding:4px 8px 4px 28px;}.",Ud.parentheses,"{padding:0px;text-align:center;}.",Ud.parentheses,"::before{content:'***';}.",Ud.parentheses,"::after{content:'***';}",""),sp=a.css(".",qd.root,"{position:relative;display:flex;flex-direction:row;align-items:center;}.",qd.input,"{opacity:0;position:absolute;left:0;top:0;padding:0;margin:0;width:100%;height:100%;}.",qd.root,":not(.",qd.disabled,"){&:hover{text-decoration:underline;}.",qd.input,"{cursor:pointer;}}.",qd.disabled,"{opacity:0.34;}.",qd.label,"{margin-left:18px;}.",qd.large,"{.",qd.label,"{margin-left:18px;}}.",qd.medium,"{.",qd.label,"{margin-left:14px;}}.",qd.small,"{.",qd.label,"{margin-left:12px;}}",""),up=a.css(".",Wd.root,"{display:flex;flex-direction:column;gap:6px;width:fit-content;}.",Wd.label,"{margin-bottom:6px;}",""),cp=a.css(".",Yd.root,"{background:rgb(var(--lsd-surface-primary));border:1px solid transparent;cursor:pointer;display:flex;flex-direction:row;align-items:center;justify-content:center;box-sizing:border-box;&:hover{text-decoration:underline;}&:not(",Yd.selected,"){border-bottom:1px solid rgb(var(--lsd-border-primary));}}.",Yd.text,"{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.",Yd.icon,"{margin-left:14px;}.",Yd.selected,"{border:1px solid rgb(var(--lsd-border-primary));&:hover{text-decoration:none;}}.",Yd.withIcon,"{justify-content:space-between;}.",Yd.disabled,"{cursor:default;opacity:0.34;&:hover{text-decoration:none;}}.",Yd.small,"{padding:6px 12px;.",Yd.icon,"{margin-left:10px;}}.",Yd.medium,"{padding:6px 14px;.",Yd.icon,"{margin-left:12px;}}.",Yd.large,"{padding:10px 18px;.",Yd.icon,"{margin-left:14px;}}",""),dp=a.css(".",nf.root,"{box-sizing:border-box;display:flex;flex-direction:column;}.",nf.root,">.",ef.root,"{margin-bottom:-1px;}.",nf.large,"{}.",nf.medium,"{}.",nf.small,"{}",""),fp=a.css(".",Kd.root,"{table{border-collapse:collapse;text-align:center;table-layout:fixed;width:100%;height:auto;}table tr:first-of-type td label:has(input[type='radio']){display:none;}}.",Kd.toolbar,"{box-sizing:border-box;padding:10px;border:1px solid rgb(var(--lsd-border-primary));border-bottom:none;display:flex;justify-content:space-between;}",""),pp=a.css(".",ef.root,"{box-sizing:border-box;border:1px solid rgb(var(--lsd-border-primary));}",""),hp=a.css(".",lf.root,"{border:1px solid rgb(var(--lsd-border-primary));}.",lf.root,":has(> label){width:40px;input{position:relative;width:14px;height:14px;margin:auto;}span{margin-left:14px!important;}}.",lf.large,"{padding:10px;}.",lf.medium,"{padding:6px 8px;}.",lf.small,"{padding:6px;}",""),mp=a.css(".",uf.root,"{align-items:center;}",""),gp=a.css(".",bf.root,"{display:flex;flex-direction:row;overflow:auto;width:fit-content;max-width:100%;border-bottom:1px solid rgb(var(--lsd-border-primary));&>*{flex-shrink:0;}.",Yd.root,"{border-bottom:none;}}.",bf.fullWidth,"{width:100%;justify-content:stretch;&>*{width:100%;flex:1 0;}}.",bf.root,"{-ms-overflow-style:none;scrollbar-width:none;&::-webkit-scrollbar{display:none;}}.",bf.leftScrollControl,"{left:0;}.",bf.rightScrollControl,"{right:0;}.",bf.rightScrollControl,",.",bf.leftScrollControl,"{top:0;flex:0 1;position:sticky;}",""),vp=a.css(".",wf.root,"{width:fit-content;display:flex;flex-direction:row;align-items:center;justify-content:center;box-sizing:border-box;border:1px solid rgb(var(--lsd-icon-primary));&:hover,&:focus{text-decoration:underline;cursor:pointer;}}.",wf.large,"{padding:3px 11px;gap:12px;height:28px;}.",wf.small,"{padding:3px 7px;gap:8px;height:24px;}.",wf.filled,"{background-color:rgb(var(--lsd-icon-primary));.",wf.label,"{color:rgb(var(--lsd-text-secondary));}svg{--lsd-icon-primary:var(--lsd-icon-secondary);}}.",wf.outlined,"{color:rgb(var(--lsd-text-primary));}.",wf.disabled,"{opacity:0.3;cursor:initial;pointer-events:none;}",""),bp=a.css(".",Sf.root,"{box-sizing:border-box;display:flex;flex-direction:column;}.",Sf.inputContainer,"{display:flex;align-items:center;justify-content:space-between;}.",Sf.disabled,"{opacity:0.34;}.",Sf.input,"{border:none;outline:none;font-size:14px;color:rgb(var(--lsd-text-primary));background:none;width:100%;}.",Sf.input,":hover{outline:none;}.",Sf.input,"::placeholder{color:rgb(var(--lsd-text-primary));opacity:0.3;}.",Sf.error," .",Sf.input,"{text-decoration:line-through;}.",Sf.supportingText,"{width:fit-content;}.",Sf.large,"{width:208px;&>*{padding:10px 14px 10px 18px;}}.",Sf.medium,"{width:188px;&>*{padding:6px 12px 6px 14px;}}.",Sf.small,"{width:164px;&>*{padding:6px 10px 6px 12px;}}.",Sf.label,"{padding-top:0;padding-bottom:6px;}.",Sf.supportingText,"{padding-bottom:0;padding-top:6px;}.",Sf.outlined," .",Sf.inputContainer,"{border:1px solid rgb(var(--lsd-border-primary));}.",Sf.underlined," .",Sf.inputContainer,"{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}.",Sf.clearButton,"{padding:0;width:auto;height:auto;margin:0;border:0;}.",Sf.icon,"{}",""),yp=a.css("body *{font-family:var(--lsd-typography-generic-font-family);}.",gs.root,"{color:rgb(var(--lsd-text-primary));}.",gs.sansSerif,"{&,*{font-family:sans-serif;}}.",gs.serif,"{&,*{font-family:serif;}}.",gs.monospace,"{&,*{font-family:monospace;}}",ps.map((e=>a.css((e=>[...hs[e]??[],`.${gs[e]}`].join(", "))(e),"{color:rgb(var(--lsd-text-primary));font-weight:var(--lsd-",e,"-fontWeight);font-size:var(--lsd-",e,"-fontSize);line-height:var(--lsd-",e,"-lineHeight);}","")))," .",gs.primary,"{color:rgb(var(--lsd-text-primary));}.",gs.secondary,"{color:rgb(var(--lsd-text-secondary));}input{color:rgb(var(--lsd-text-primary));font-size:var(--lsd-body1-fontSize);font-weight:var(--lsd-body1-fontWeight);}h1,h2,h3,h4,h5,h6,p,span{margin:0;}",""),wp={root:"lsd-toast",inlineContainer:"lsd-toast__inline-container",columnContainer:"lsd-toast__column-container",large:"lsd-toast--large",medium:"lsd-toast--medium",small:"lsd-toast--small",icon:"lsd-toast__icon",textContainer:"lsd-toast__text-container",columnIconContainer:"lsd-toast__column-icon-container",inlineIconContainer:"lsd-toast__inline-icon-container",title:"lsd-toast__title",information:"lsd-toast__information",inlineButtonContainer:"lsd-toast__inline-button-container",columnButtonContainer:"lsd-toast__column-button-container",buttonContainer:"lsd-toast__button-container",closeButton:"lsd-toast__close-button"},xp={toastContainer:"lsd-toast-provider__toast-container",topLeft:"lsd-toast-provider__toast--top-left",topCenter:"lsd-toast-provider__toast--top-center",topRight:"lsd-toast-provider__toast--top-right",bottomLeft:"lsd-toast-provider__toast--bottom-left",bottomCenter:"lsd-toast-provider__toast--bottom-center",bottomRight:"lsd-toast-provider__toast--bottom-right"},_p=[Vf,rp,op,yp,ap,cp,gp,ip,tp,np,Uf,Hf,Gf,Zf,Wf,vp,bp,Qf,zf,lp,Xf,Kf,Yf,$f,sp,up,dp,pp,fp,hp,mp,a.css(".",Fd.root,"{width:auto;box-sizing:border-box;}.",Fd.mainContainer,":hover{text-decoration:underline;}.",Fd.error,"{.",Fd.mainContainer,"{text-decoration:line-through;}}.",Fd.label,"{display:block;}.",Fd.plusMinusIcons,"{display:flex;flex-shrink:0;}.",Fd.inputContainer,"{box-sizing:border-box;border:1px solid rgb(var(--lsd-border-primary));border-left:0px;border-right:0px;}.",Fd.errorIcon,"{cursor:pointer;display:flex;align-items:center;padding:10px 8px;}.",Fd.inputContainer,"{display:flex;align-items:center;justify-content:space-between;}.",Fd.disabled,"{opacity:0.34;}.",Fd.mainContainer,"{display:flex;align-items:center;}.",Fd.input,"{border:none;outline:none;font-size:14px;color:rgb(var(--lsd-text-primary));background:none;text-align:center;padding:0 4px;}.",Fd.input,"::-webkit-inner-spin-button{display:none;-webkit-appearance:none;}.",Fd.input,":hover{outline:none;}.",Fd.supportingText,"{position:absolute;}.",Fd.large,"{.",Fd.label,"{margin:0 0 6px 18px;}.",Fd.inputContainer,"{height:40px;}.",Fd.input,"{width:62px;}.",Fd.plusMinusIcons,"{height:40px;width:40px;}.",Fd.supportingText,"{margin:6px 18px 0 18px;}}.",Fd.medium,"{.",Fd.label,"{margin:0 0 6px 14px;}.",Fd.inputContainer,"{height:32px;}.",Fd.input,"{width:58px;}.",Fd.plusMinusIcons,"{height:32px;width:32px;}.",Fd.supportingText,"{margin:6px 14px 0 14px;}}.",Fd.small,"{.",Fd.label,"{margin:0 0 6px 12px;}.",Fd.inputContainer,"{height:28px;}.",Fd.input,"{width:50px;}.",Fd.plusMinusIcons,"{height:28px;width:28px;}.",Fd.supportingText,"{margin:6px 12px 0 12px;}}",""),a.css(".",Id.root,"{box-sizing:border-box;display:flex;flex-direction:column;position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0, 0, 0, 0.5);display:flex;justify-content:center;align-items:center;z-index:9999;}.",Id.modalContainer,"{position:relative;background:rgb(var(--lsd-surface-primary));padding:20px;max-width:90%;box-sizing:border-box;border:1px solid rgb(var(--lsd-border-primary));}.",Id.header,"{display:flex;justify-content:space-between;align-items:center;}.",Id.title,"{}.",Id.subtitle,"{}.",Id.closeIcon,"{position:absolute;top:8px;right:8px;cursor:pointer;}.",Id.titleAndSubtitleContainer,"{display:flex;flex-direction:column;}.",Id.large,"{.",Id.modalContainer,"{min-width:960px;}}.",Id.medium,"{.",Id.modalContainer,"{min-width:768px;}}.",Id.small,"{.",Id.modalContainer,"{min-width:614px;}}.",Id.xsmall,"{.",Id.modalContainer,"{min-width:490px;}}",""),a.css(".",jd.root,"{display:flex;}",""),a.css(".",Ld.root,"{margin:18px 0;}",""),ep,Jf,qf,a.css(".",wp.root,"{box-sizing:border-box;display:inline-flex;align-items:center;background:rgb(var(--lsd-surface-primary));border:1px solid rgb(var(--lsd-border-primary));padding:8px;height:fit-content;}.",wp.inlineButtonContainer,"{flex-shrink:0;}.",wp.columnButtonContainer,"{margin-top:18px;margin-bottom:6px;}.",wp.inlineContainer,"{display:flex;align-items:center;justify-content:space-between;flex-grow:1;}.",wp.columnContainer,"{display:flex;flex-direction:column;justify-content:space-between;}.",wp.textContainer,"{display:flex;flex-direction:column;color:rgb(var(--lsd-text-secondary));padding-left:12px;}.",wp.title,"{position:relative;}.",wp.information,"{margin-top:4px;}.",wp.buttonContainer,"{min-height:28px;min-width:60px;width:fit-content;padding:0px 12px;}.",wp.closeButton,"{margin-bottom:auto;flex-shrink:0;height:28px;width:28px;margin-left:auto;}.",wp.columnIconContainer,"{display:flex;justify-content:center;margin-bottom:auto;position:relative;top:4px;padding-left:4px;}.",wp.inlineIconContainer,"{display:flex;align-items:center;justify-content:center;padding-left:4px;}.",wp.icon,"{position:relative;}.",wp.large,"{width:364px;}.",wp.medium,"{width:336px;}.",wp.small,"{width:296px;.",wp.icon,"{top:0px;}}",""),a.css(".",xp.toastContainer,"{position:fixed;transition:all 230ms cubic-bezier(0.21, 1.02, 0.73, 1);z-index:9999;}.",xp.topLeft,",.",xp.topCenter,",.",xp.topRight,"{top:0;}.",xp.bottomLeft,",.",xp.bottomCenter,",.",xp.bottomRight,"{bottom:0;}.",xp.topCenter,",.",xp.bottomCenter,"{left:50%;}.",xp.topRight,",.",xp.bottomRight,"{right:0;}",""),a.css(".",wu.root,"{display:flex;flex-direction:row;>*:not(:last-child){&.",bu.outlined,",.",bu.outlined,"{border-right:none;}}}",""),a.css(".",kd.root,"{box-sizing:border-box;.",bd.outlined,"{border:none;}.",bd.icon,"{padding:8px;}}.",kd.label,"{display:block;}.",kd.inputContainer,"{box-sizing:border-box;display:flex;align-items:center;border:1px solid transparent;}.",kd.calendar,"{border-top:none!important;.",Yc.arrowTip,"{transition:left 0.2s ease-in-out;}}.",kd.openCalendar,"{.",kd.inputContainer,"{border-bottom:1px solid rgb(var(--lsd-border-primary));}}.",kd.icon,"{cursor:pointer;display:flex;align-items:center;justify-content:center;flex-grow:1;padding:0 10px;}.",kd.disabled,"{opacity:0.3;}.",kd.supportingText,"{position:absolute;}.",kd.large,"{width:318px;.",bd.large,"{width:156px;}.",bd.input,"{padding-right:0;}.",bd.icon,"{padding:11px 12px;}.",kd.label,"{margin:0 0 6px 18px;}.",kd.inputContainer,"{height:40px;}.",kd.supportingText,"{margin:6px 18px 0 18px;}}.",kd.medium,"{width:290px;.",bd.medium,"{width:142px;}.",bd.input,"{padding-right:0;}.",bd.icon,"{padding:7px 8px;}.",kd.label,"{margin:0 0 6px 14px;}.",kd.inputContainer,"{height:32px;}.",kd.supportingText,"{margin:6px 14px 0 14px;}}.",kd.small,"{width:262px;.",bd.small,"{width:128px;}.",bd.input,"{padding-right:0;}.",bd.icon,"{padding:5px 7px;}.",kd.label,"{margin:0 0 6px 12px;}.",kd.inputContainer,"{height:28px;}.",kd.supportingText,"{margin:6px 12px 0 12px;}}.",kd.separator,"{margin-left:3px;width:1px;height:100%;}.",kd.separator,"{border-left:1px solid transparent;}.",kd.outlined,"{border:1px solid rgb(var(--lsd-border-primary));.",kd.separator,"{border-left:1px solid rgb(var(--lsd-border-primary));}}",""),a.css(".",Yc.root,"{border:1px solid rgb(var(--lsd-border-primary));position:relative;}.",Yc.arrowTip,"{border:1px solid rgb(var(--lsd-border-primary));position:absolute;background:rgb(var(--lsd-surface-primary));}.",Yc.content,"{background:rgb(var(--lsd-surface-primary));width:100%;height:100%;position:relative;z-index:1;}","")],kp=({theme:e=Bf.light})=>{const t=r.useMemo((()=>_p.map((t=>"function"==typeof t?t(e):t)).map((e=>Ge(a.Global,{styles:e},e.name)))),[e]);return Ge(qe,{children:t})},Ep=({children:e})=>{const t=r.useRef(),n=r.useRef({}),[o,a]=r.useState({}),[i,l]=r.useState(!1),s=e=>{const t=n.current[e];t&&t.current&&zd((()=>{a((n=>({...n,[e]:t.current.getBoundingClientRect()})))}))};r.useEffect((()=>{if("undefined"!=typeof window&&"undefined"!=typeof ResizeObserver)return t.current=new ResizeObserver((e=>{zd((()=>{const t=Object.entries(n.current);e.map((e=>t.find((([t,n])=>n.current===e.target)))).forEach((e=>{if(e&&2===e.length){const[t]=e;s(t)}}))}))})),l(!0),()=>{var e;null==(e=t.current)||e.disconnect()}}),[]);return Ge(df.Provider,{value:{observe:(e,r)=>{t.current&&(n.current[e]=r,s(e),r.current instanceof Element&&t.current.observe(r.current))},unobserve:e=>{if(!t.current)return;const r=n.current[e];r&&(r.current instanceof Element&&t.current.unobserve(r.current),delete n.current[e],a((t=>Vl(t,e))))},rect:o,ready:i},children:e})},Sp=r.createContext({theme:null}),Cp=({title:e,information:t,onClose:n,size:r="large",toastRef:o,children:a,icon:i,actions:l,...s})=>{const u=bs(s),c=!t,d=void 0===i?Ns:i;return We("div",{ref:o,...ws(s),className:Qe(s.className,u.className,wp.root,wp[r]),children:[Ge("div",{className:Qe(c?wp.inlineIconContainer:wp.columnIconContainer),children:d&&Ge(d,{color:"primary",className:wp.icon})}),We("div",{className:c?wp.inlineContainer:wp.columnContainer,children:[We("div",{className:Qe(wp.textContainer),children:[!!e&&Ge(Vs,{className:wp.title,component:"div",variant:"small"===r?"label2":"label1",children:e}),!!t&&Ge(Vs,{className:wp.information,component:"div",variant:"small"===r?"label2":"label1",children:t})]}),!!l&&Ge("div",{className:Qe(wp.buttonContainer,c?wp.inlineButtonContainer:wp.columnButtonContainer),children:l})]}),Ge(Dd,{onClick:n,className:wp.closeButton,size:"medium",children:Ge(Ps,{color:"primary"})})]})};Cp.classes=wp;var Tp=(e,t)=>(e=>"function"==typeof e)(e)?e(t):e,Op=(()=>{let e=0;return()=>(++e).toString()})(),Dp=new Map,Pp=e=>{if(Dp.has(e))return;let t=setTimeout((()=>{Dp.delete(e),Lp({type:4,toastId:e})}),1e3);Dp.set(e,t)},Np=(e,t)=>{switch(t.type){case 0:return{...e,toasts:[t.toast,...e.toasts].slice(0,20)};case 1:return t.toast.id&&(e=>{let t=Dp.get(e);t&&clearTimeout(t)})(t.toast.id),{...e,toasts:e.toasts.map((e=>e.id===t.toast.id?{...e,...t.toast}:e))};case 2:let{toast:n}=t;return e.toasts.find((e=>e.id===n.id))?Np(e,{type:1,toast:n}):Np(e,{type:0,toast:n});case 3:let{toastId:r}=t;return r?Pp(r):e.toasts.forEach((e=>{Pp(e.id)})),{...e,toasts:e.toasts.map((e=>e.id===r||void 0===r?{...e,visible:!1}:e))};case 4:return void 0===t.toastId?{...e,toasts:[]}:{...e,toasts:e.toasts.filter((e=>e.id!==t.toastId))};case 5:return{...e,pausedAt:t.time};case 6:let o=t.time-(e.pausedAt||0);return{...e,pausedAt:void 0,toasts:e.toasts.map((e=>({...e,pauseDuration:e.pauseDuration+o})))}}},Ip=[],Ap={toasts:[],pausedAt:void 0},Lp=e=>{Ap=Np(Ap,e),Ip.forEach((e=>{e(Ap)}))},Rp={blank:4e3,error:4e3,success:2e3,loading:1/0,custom:4e3},jp=e=>(t,n)=>{let r=((e,t="blank",n)=>({createdAt:Date.now(),visible:!0,type:t,ariaProps:{role:"status","aria-live":"polite"},message:e,pauseDuration:0,...n,id:(null==n?void 0:n.id)||Op()}))(t,e,n);return Lp({type:2,toast:r}),r.id},Mp=(e,t)=>jp("blank")(e,t);Mp.error=jp("error"),Mp.success=jp("success"),Mp.loading=jp("loading"),Mp.custom=jp("custom"),Mp.dismiss=e=>{Lp({type:3,toastId:e})},Mp.remove=e=>Lp({type:4,toastId:e}),Mp.promise=(e,t,n)=>{let r=Mp.loading(t.loading,{...n,...null==n?void 0:n.loading});return e.then((e=>(Mp.success(Tp(t.success,e),{id:r,...n,...null==n?void 0:n.success}),e))).catch((e=>{Mp.error(Tp(t.error,e),{id:r,...n,...null==n?void 0:n.error})})),e};var Fp=(e,t)=>{Lp({type:1,toast:{id:e,height:t}})},Bp=()=>{Lp({type:5,time:Date.now()})},zp=e=>{let{toasts:t,pausedAt:n}=((e={})=>{let[t,n]=r.useState(Ap);r.useEffect((()=>(Ip.push(n),()=>{let e=Ip.indexOf(n);e>-1&&Ip.splice(e,1)})),[t]);let o=t.toasts.map((t=>{var n,r;return{...e,...e[t.type],...t,duration:t.duration||(null==(n=e[t.type])?void 0:n.duration)||(null==e?void 0:e.duration)||Rp[t.type],style:{...e.style,...null==(r=e[t.type])?void 0:r.style,...t.style}}}));return{...t,toasts:o}})(e);r.useEffect((()=>{if(n)return;let e=Date.now(),r=t.map((t=>{if(t.duration===1/0)return;let n=(t.duration||0)+t.pauseDuration-(e-t.createdAt);if(!(n<0))return setTimeout((()=>Mp.dismiss(t.id)),n);t.visible&&Mp.dismiss(t.id)}));return()=>{r.forEach((e=>e&&clearTimeout(e)))}}),[t,n]);let o=r.useCallback((()=>{n&&Lp({type:6,time:Date.now()})}),[n]),a=r.useCallback(((e,n)=>{let{reverseOrder:r=!1,gutter:o=8,defaultPosition:a}=n||{},i=t.filter((t=>(t.position||a)===(e.position||a)&&t.height)),l=i.findIndex((t=>t.id===e.id)),s=i.filter(((e,t)=>te.visible)).slice(...r?[s+1]:[0,s]).reduce(((e,t)=>e+(t.height||0)+o),0)}),[t]);return{toasts:t,handlers:{updateHeight:Fp,startPause:Bp,endPause:o,calculateOffset:a}}};const $p=r.createContext(null),Up=({toastsPropsMap:e,className:t,...n})=>{const{toasts:r,handlers:o}=zp(),{startPause:a,endPause:i,calculateOffset:l,updateHeight:s}=o;return Ge(lu,{id:"toast",children:r.map((r=>{const o=e.get(r.id);if(!o)return console.warn("Could not find toast with id",r.id),null;const{position:u,duration:c,...d}=o,f=l(r,{reverseOrder:!1,gutter:8,defaultPosition:u}),{transform:p,positionClassName:h}=((e,t)=>{if(!e)return{positionClassName:"",transform:`translateY(${t}px)`};let n="";const r=e.includes("center"),o=e.includes("bottom");return"top-left"===e?n=xp.topLeft:"top-center"===e?n=xp.topCenter:"top-right"===e?n=xp.topRight:"bottom-left"===e?n=xp.bottomLeft:"bottom-center"===e?n=xp.bottomCenter:"bottom-right"===e&&(n=xp.bottomRight),{positionClassName:n,transform:`translateY(${o?-t:t}px) translateX(${r?"-50%":"0"})`}})(u,f);return Ge("div",{onMouseEnter:a,onMouseLeave:i,...n,className:Qe(xp.toastContainer,h,t),style:{transform:p,...n.style},children:Ge(Cp,{className:Qe(d.className),toastRef:e=>{if(e&&"number"!=typeof r.height){const t=e.getBoundingClientRect().height;s(r.id,t)}},...d,style:{opacity:r.visible?1:0,...d.style},onClose:()=>{var e;Mp.dismiss(r.id),null==(e=d.onClose)||e.call(d)}},r.id)},`container-${r.id}`)}))})};t.AddIcon=ks,t.ArrowForwardIcon=Ss,t.Autocomplete=cu,t.Badge=fu,t.Breadcrumb=gu,t.BreadcrumbItem=hu,t.Button=yu,t.ButtonGroup=xu,t.CALENDAR_MAX_YEAR=Jc,t.CALENDAR_MIN_YEAR=Kc,t.Calendar=ed,t.CalendarIcon=Us,t.Card=rd,t.CardBody=ad,t.CardHeader=ld,t.CheckIcon=Ds,t.Checkbox=dd,t.CheckboxGroup=pd,t.CheckboxIcon=Ts,t.CheckboxOutlineBlankIcon=Os,t.ChevronDownIcon=Es,t.ChevronLeftIcon=js,t.ChevronRightIcon=Ms,t.ChevronUpIcon=Cs,t.CloseIcon=Ps,t.Collapse=vd,t.CollapseHeader=md,t.DateField=yd,t.DatePicker=_d,t.DateRangePicker=Ed,t.Dropdown=Cd,t.DropdownItem=Gs,t.DropdownMenu=ru,t.ErrorIcon=Ns,t.FolderIcon=Is,t.IconButton=Dd,t.IconButtonGroup=Nd,t.KeyboardReturnIcon=As,t.LSD_NAMESPACE="lsd",t.LsdIcon=_s,t.MenuIcon=Ls,t.Modal=Ad,t.ModalBody=Rd,t.ModalFooter=Md,t.MoreIcon=Rs,t.NumberInput=Bd,t.PickIcon=Bs,t.Portal=lu,t.PortalContext=ou,t.PortalProvider=$d,t.Quote=Hd,t.RadioButton=Gd,t.RadioButtonCheckedIcon=$s,t.RadioButtonGroup=Zd,t.RadioButtonIcon=zs,t.RemoveIcon=Hs,t.SearchIcon=Fs,t.THEME_BREAKPOINTS=fs,t.THEME_TYPOGRAPHY_PROPERTIES=ms,t.THEME_TYPOGRAPHY_VARIANTS=ps,t.THEME_VARIANT_PROPERTIES=["typography"],t.TabItem=Xd,t.Table=af,t.TableBody=Jd,t.TableHeader=tf,t.TableItem=sf,t.TableRow=cf,t.Tabs=yf,t.Tag=xf,t.TextField=Cf,t.ThemeProvider=({theme:e,children:t,injectCssVars:n=!0})=>Ge(Ep,{children:Ge($d,{children:We(Sp.Provider,{value:{theme:e},children:[Ge(kp,{theme:e}),n&&Ge(a.Global,{styles:e.globalStyles}),Ge(a.ThemeProvider,{theme:e,children:t})]})})}),t.Toast=Cp,t.ToastContext=$p,t.ToastProvider=({providerToastOptions:e,children:t,...n})=>{const[o,a]=r.useState(new Map);return We($p.Provider,{value:(t,n)=>{const r={...e,...n},o=Mp("",{duration:null==r?void 0:r.duration});t&&a((e=>{const n=new Map(e);return n.set(o,{...t,...r}),n}))},children:[t,Ge(Up,{toastsPropsMap:o,...n})]})},t.TooltipBase=Xc,t.Typography=Vs,t.createTheme=Mf,t.createThemeGlobalStyles=Of,t.defaultThemes=Bf,t.useCanUsePortal=au,t.usePortal=iu,t.useTheme=()=>r.useContext(Sp).theme??Bf.light,t.useToast=function(){const e=r.useContext($p);if(!e)throw new Error("useToast must be used within a ToastProvider");return e},t.withTheme=e=>t=>e(t)},26920:(e,t,n)=>{"use strict";n.r(t),n.d(t,{HOSTNAMES:()=>a,SCRIPT_URL:()=>o,SITE_ID:()=>r});const r="OISNT",o="https://fathom.bi.status.im/tracker.js",a=["codex.storage"]},21204:(e,t,n)=>{"use strict";n.d(t,{Z:()=>p});var r=n(67294),o=n(87462),a=n(68356),i=n.n(a),l=n(16887);const s={"0ca4f5f2":[()=>n.e(150).then(n.t.bind(n,55866,19)),"/home/jenkins/workspace/website/codex.storage/.docusaurus/docusaurus-plugin-content-docs/about/plugin-route-context-module-100.json",55866],"13b4f215":[()=>n.e(452).then(n.bind(n,52967)),"@site/about/team.md",52967],17896441:[()=>Promise.all([n.e(532),n.e(790),n.e(918)]).then(n.bind(n,59047)),"@theme/DocItem",59047],"198b3d11":[()=>n.e(501).then(n.bind(n,84594)),"@site/root-pages/news.md",84594],"1be78505":[()=>Promise.all([n.e(532),n.e(514)]).then(n.bind(n,93687)),"@theme/DocPage",93687],"1f391b9e":[()=>Promise.all([n.e(532),n.e(790),n.e(85)]).then(n.bind(n,29688)),"@theme/MDXPage",29688],"230402f8":[()=>n.e(156).then(n.bind(n,97579)),"@site/about/index.md",97579],"4c51782d":[()=>Promise.all([n.e(532),n.e(755),n.e(767)]).then(n.bind(n,79945)),"@site/root-pages/join-us.mdx",79945],"5086c83f":[()=>Promise.all([n.e(532),n.e(755),n.e(843)]).then(n.bind(n,67729)),"@site/root-pages/community.mdx",67729],"52065b4a":[()=>n.e(533).then(n.t.bind(n,12514,19)),"~docs/root-pages/version-current-metadata-prop-751.json",12514],"7818b736":[()=>n.e(62).then(n.t.bind(n,75127,19)),"~docs/about/version-current-metadata-prop-751.json",75127],"79dc5662":[()=>n.e(339).then(n.bind(n,6975)),"@site/root-pages/terms.md",6975],"7a250d2c":[()=>Promise.all([n.e(532),n.e(755),n.e(775)]).then(n.bind(n,18055)),"@site/about/faq.mdx",18055],"81bf376d":[()=>n.e(383).then(n.bind(n,91723)),"@site/root-pages/privacy-policy.md",91723],"85cd0eac":[()=>n.e(407).then(n.bind(n,28802)),"@site/root-pages/security.md",28802],b6219486:[()=>n.e(389).then(n.t.bind(n,54284,19)),"/home/jenkins/workspace/website/codex.storage/.docusaurus/docusaurus-plugin-content-docs/root-pages/plugin-route-context-module-100.json",54284],ba0da7bd:[()=>n.e(168).then(n.bind(n,70725)),"@site/about/roadmap.md",70725],d40faacd:[()=>n.e(894).then(n.bind(n,46050)),"@site/about/architect.md",46050],e7ce6630:[()=>Promise.all([n.e(532),n.e(755),n.e(668)]).then(n.bind(n,28484)),"@site/src/pages/index.mdx",28484],f50b8723:[()=>n.e(191).then(n.t.bind(n,15745,19)),"/home/jenkins/workspace/website/codex.storage/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json",15745]};function u(e){let{error:t,retry:n,pastDelay:o}=e;return t?r.createElement("div",{style:{textAlign:"center",color:"#fff",backgroundColor:"#fa383e",borderColor:"#fa383e",borderStyle:"solid",borderRadius:"0.25rem",borderWidth:"1px",boxSizing:"border-box",display:"block",padding:"1rem",flex:"0 0 50%",marginLeft:"25%",marginRight:"25%",marginTop:"5rem",maxWidth:"50%",width:"100%"}},r.createElement("p",null,String(t)),r.createElement("div",null,r.createElement("button",{type:"button",onClick:n},"Retry"))):o?r.createElement("div",{style:{display:"flex",justifyContent:"center",alignItems:"center",height:"100vh"}},r.createElement("svg",{id:"loader",style:{width:128,height:110,position:"absolute",top:"calc(100vh - 64%)"},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},r.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},r.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),r.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),r.createElement("circle",{cx:"22",cy:"22",r:"8"},r.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"}))))):null}var c=n(66916),d=n(66041);function f(e,t){if("*"===e)return i()({loading:u,loader:()=>Promise.all([n.e(532),n.e(481)]).then(n.bind(n,89481)),modules:["@theme/NotFound"],webpack:()=>[89481],render(e,t){const n=e.default;return r.createElement(d.z,{value:{plugin:{name:"native",id:"default"}}},r.createElement(n,t))}});const a=l[`${e}-${t}`],f={},p=[],h=[],m=(0,c.Z)(a);return Object.entries(m).forEach((e=>{let[t,n]=e;const r=s[n];r&&(f[t]=r[0],p.push(r[1]),h.push(r[2]))})),i().Map({loading:u,loader:f,modules:p,webpack:()=>h,render(t,n){const i=JSON.parse(JSON.stringify(a));Object.entries(t).forEach((t=>{let[n,r]=t;const o=r.default;if(!o)throw new Error(`The page component at ${e} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);"object"!=typeof o&&"function"!=typeof o||Object.keys(r).filter((e=>"default"!==e)).forEach((e=>{o[e]=r[e]}));let a=i;const l=n.split(".");l.slice(0,-1).forEach((e=>{a=a[e]})),a[l[l.length-1]]=o}));const l=i.__comp;delete i.__comp;const s=i.__context;return delete i.__context,r.createElement(d.z,{value:s},r.createElement(l,(0,o.Z)({},i,n)))}})}const p=[{path:"/about",component:f("/about","4e7"),routes:[{path:"/about/",component:f("/about/","a82"),exact:!0,sidebar:"defaultSidebar"},{path:"/about/architect",component:f("/about/architect","7a3"),exact:!0,sidebar:"defaultSidebar"},{path:"/about/faq",component:f("/about/faq","4a0"),exact:!0,sidebar:"defaultSidebar"},{path:"/about/roadmap",component:f("/about/roadmap","b12"),exact:!0,sidebar:"defaultSidebar"},{path:"/about/team",component:f("/about/team","c35"),exact:!0,sidebar:"defaultSidebar"}]},{path:"/",component:f("/","9be"),exact:!0},{path:"/",component:f("/","72c"),routes:[{path:"/community",component:f("/community","dda"),exact:!0},{path:"/join-us",component:f("/join-us","3eb"),exact:!0},{path:"/news",component:f("/news","004"),exact:!0},{path:"/privacy-policy",component:f("/privacy-policy","e92"),exact:!0},{path:"/security",component:f("/security","392"),exact:!0},{path:"/terms",component:f("/terms","73e"),exact:!0}]},{path:"*",component:f("*")}]},27998:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.onRouteDidUpdate=void 0;const r=n(70655),o=n(26920);r.__importDefault(n(19901)).default.canUseDOM&&(()=>{if(o.HOSTNAMES.length>0?!o.HOSTNAMES.includes(window.location.hostname):"localhost"===window.location.hostname)return;!function(e,t,n,r){t[r]=t[r]||function(){(t[r].q=t[r].q||[]).push(arguments)};const o=e.createElement("script"),a=e.getElementsByTagName("script")[0];o.async=1,o.src=n,o.id="fathom-script",a.parentNode.insertBefore(o,a)}(document,window,o.SCRIPT_URL,"fathom");const{fathom:e}=window;e("set","siteId",o.SITE_ID),e("trackPageview")})();t.onRouteDidUpdate=e=>{let{location:t,previousLocation:n}=e;window.fathom&&t.pathname!==(null==n?void 0:n.pathname)&&window.fathom("trackPageview")}},79578:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.createPromise=t.ResultType=void 0;const r=n(70655),o=n(78007),a=n(84647),i=n(32438),l=n(58263),s=r.__importStar(n(96059)),u=e=>{let{versionUrl:t,searchContextByPaths:n}=e,r=window.location.pathname;if(r=r.endsWith("/")?r:r+"/",!Array.isArray(n)||!r.startsWith(t))return"";const o=r.substring(t.length);return n.find((e=>o===e||o.startsWith(`${e}/`)))??""};class c{constructor(e){this.config=e,this.loading=!1,this.source=null,this.init=async()=>{this.loading=!0;const{wrappedIndexes:e,zhDictionary:t}=await(async e=>{const{wrappedIndexes:t,zhDictionary:n}=await(0,o.fetchIndexes)(e.versionUrl,e.searchContext);return{wrappedIndexes:t,zhDictionary:n}})({versionUrl:this.baseUrl,searchContext:u({versionUrl:this.baseUrl,searchContextByPaths:this.searchContextByPaths})});this.source=(0,l.SearchSourceFactory)(e,t,this.config.resultsLimit)},this.query=async e=>{if(!this.source)throw new Error("Not initialized");const{promise:n,callback:r}=(0,t.createPromise)();return this.source&&this.source(e,r),{results:(await n).map((e=>this.formatResult(e)))}},this.formatResult=e=>({...e,type:this.resultTypeToString(e.type),page:e.page?this.formatDocument(e.page):null,document:e.document?this.formatDocument(e.document):null,highlighted:(0,i.highlightStemmed)(e.document.t,(0,a.getStemmedPositions)(e.metadata,"t"),e.tokens)}),this.resultTypeToString=e=>({0:d.Title,1:d.Heading,2:d.Paragraph}[e]),this.formatDocument=e=>({id:e.i,title:e.t,url:e.u,hash:e.h,parentId:e.p,breadcrumb:e.b,sectionTitle:e.s}),this.baseUrl=e.preferredVersionPath,this.searchContextByPaths=e.searchContextByPaths??""}}var d;!function(e){e.Title="title",e.Heading="heading",e.Paragraph="paragraph"}(d=t.ResultType||(t.ResultType={}));t.createPromise=()=>{let e,t;const n=new Promise(((n,r)=>{e=n,t=r}));return{reject:t,resolve:e,promise:n,callback:(n,r)=>{r?t(r):e(n)}}};(async()=>{if("undefined"==typeof window)return;const e=window;e.getProxiedGeneratedData=()=>s,e.createSearchInstance=async e=>new c(e)})()},22197:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.IconEmail=t.IconRemove=t.IconAdd=t.IconDownload=t.IconAvatar=t.IconX=t.IconTelegramWhite=t.IconDiscordWhite=t.IconExternalLink=t.IconFullscreenExit=t.IconFullscreen=t.IconEdit=t.IconClose=t.IconHistory=t.IconPlay=t.IconCopy=t.IconGScholar=t.IconDropdown=t.IconSearch=t.IconFolderFilled=t.IconDot=t.IconLinkedin=t.IconDiscourse=t.IconTelegram=t.IconTwitter=t.IconStatus=t.IconDiscord=t.IconGithub=t.IconFolder=t.IconArrowLeft=t.IconArrowRight=t.IconArrowLeftCircle=t.IconArrowRightCircle=t.Icon=void 0;const r=n(70655),o=n(86010),a=r.__importDefault(n(67294)),i=r.__importDefault(n(27861)),l=r.__importDefault(n(19044)),s=r.__importDefault(n(80255)),u=r.__importDefault(n(67146)),c=r.__importDefault(n(68425)),d=r.__importDefault(n(88121)),f=r.__importDefault(n(62082)),p=r.__importDefault(n(80469)),h=r.__importDefault(n(94793)),m=r.__importDefault(n(14607)),g=r.__importDefault(n(50437)),v=r.__importDefault(n(23179)),b=r.__importDefault(n(19818)),y=r.__importDefault(n(38981)),w=r.__importDefault(n(28487)),x=r.__importDefault(n(94177)),_=r.__importDefault(n(58611)),k=r.__importDefault(n(13042)),E=r.__importDefault(n(96367)),S=r.__importDefault(n(6907)),C=r.__importDefault(n(59570)),T=r.__importDefault(n(26890)),O=r.__importDefault(n(74297)),D=r.__importDefault(n(33336)),P=r.__importDefault(n(78951)),N=r.__importDefault(n(84629)),I=r.__importDefault(n(23816)),A=r.__importDefault(n(35245)),L=r.__importDefault(n(68902)),R=r.__importDefault(n(86089)),j=r.__importDefault(n(92358)),M=r.__importDefault(n(96867)),F=r.__importDefault(n(65379));t.Icon=e=>{const{children:t,size:n="m"}=e;return a.default.createElement("div",{className:(0,o.clsx)(i.default.icon,i.default[n],e.stroke&&i.default.stroke,e.fill&&i.default.fill,e.className&&e.className)},t)};t.IconArrowRightCircle=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(c.default,null));t.IconArrowLeftCircle=e=>a.default.createElement(t.Icon,null,a.default.createElement(s.default,null));t.IconArrowRight=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(d.default,null));t.IconArrowLeft=e=>a.default.createElement(t.Icon,null,a.default.createElement(u.default,null));t.IconFolder=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(k.default,null));t.IconGithub=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(C.default,null));t.IconDiscord=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(g.default,null));t.IconStatus=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(I.default,null));t.IconTwitter=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(R.default,null));t.IconTelegram=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(L.default,null));t.IconDiscourse=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(v.default,null));t.IconLinkedin=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(D.default,null));t.IconDot=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(b.default,null));t.IconFolderFilled=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(k.default,null));t.IconSearch=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(N.default,null));t.IconDropdown=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(w.default,null));t.IconGScholar=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(T.default,null));t.IconCopy=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(h.default,null));t.IconPlay=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(F.default,null));t.IconHistory=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(O.default,null));t.IconClose=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(p.default,null));t.IconEdit=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(x.default,null));t.IconFullscreen=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(S.default,null));t.IconFullscreenExit=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(E.default,null));t.IconExternalLink=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(_.default,null));t.IconDiscordWhite=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(m.default,null));t.IconTelegramWhite=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(A.default,null));t.IconX=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(j.default,null));t.IconAvatar=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(f.default,null));t.IconDownload=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(y.default,null));t.IconAdd=e=>a.default.createElement(t.Icon,{...e,stroke:!0},a.default.createElement(l.default,null));t.IconRemove=e=>a.default.createElement(t.Icon,{...e,stroke:!0},a.default.createElement(P.default,null));t.IconEmail=e=>a.default.createElement(t.Icon,{...e},a.default.createElement(M.default,null))},6980:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(70655).__exportStar(n(22197),t)},81575:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Modal=void 0;const r=n(70655),o=r.__importDefault(n(86010)),a=r.__importDefault(n(67294)),i=n(89164),l=n(67713),s=n(54920);n(22473);t.Modal=e=>{let{open:t=!1,onClose:n,keepMounted:r=!1,className:u,children:c,...d}=e;const f=(0,l.useHydrated)(),p=()=>{n&&n()};return(0,i.useKeyPressEvent)((e=>"Escape"===e.code),(e=>{p()})),f&&(t||r)?a.default.createElement(s.Portal,{containerId:"lsd-presentation",id:d.id},a.default.createElement("div",{className:(0,o.default)(u,"l-modal",t&&"l-modal--open"),...d},a.default.createElement("div",{className:"l-modal__container"},a.default.createElement("div",{className:"l-modal__content"},c),a.default.createElement("div",{className:"l-modal__backdrop",onClick:p})))):a.default.createElement(a.default.Fragment,null)}},54920:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.Portal=void 0;const r=n(70655).__importDefault(n(67294)),o=n(73935),a=n(72777);t.Portal=e=>{let{children:t,containerId:n,id:i}=e;if("undefined"==typeof window)return r.default.createElement(r.default.Fragment,null);const l=(0,a.usePortal)({parentId:n});return(0,o.createPortal)(t,l,i)}},72777:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.usePortal=void 0;const r=n(67294),o=n(32833);t.usePortal=e=>{let{parentId:t}=e;const n=(0,r.useRef)();return n.current||(n.current=document.createElement("div")),(0,r.useEffect)((()=>{var e;if(n.current)return null==(e=document.getElementById(t))||e.appendChild(n.current),()=>{const e=n.current;e&&(0,o.settleSync)((()=>{var n;return null==(n=document.getElementById(t))?void 0:n.removeChild(e)}))}}),[t,n.current]),n.current}},91866:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.LightBoxWrapper=t.useLightBox=t.LightBoxContext=t.LightBoxProvider=void 0;const r=n(70655),o=n(31665),a=r.__importDefault(n(56306)),i=r.__importDefault(n(86010)),l=r.__importStar(n(67294)),s=r.__importStar(n(33199)),u=n(89164),c=n(22197),d=n(54920),f=n(67713),p=n(52606),h=r.__importDefault(n(10153));t.LightBoxProvider=e=>{let{children:n}=e;const r=(0,f.useHydrated)(),s=(0,u.useWindowScroll)(),[m,g]=(0,l.useState)(null),[v,b]=(0,l.useState)({opacity:"0.5"}),y=(0,p.useIsMobile)(),w=(0,l.useMemo)((()=>({opacity:1,transform:"scale(1) translate(0px, 0px)",transition:"0.3s"})),[m]),x=e=>{g(e);const t=document.body.clientWidth,n=window.innerHeight,r=window.innerWidth>768?.9375*t:t-32,o=n-128,a=e.getBoundingClientRect(),i=Math.min(o/a.height,r/a.width),l=[a.left+a.width/2,a.top+a.height/2],s=[t/2,n/2].map(((e,t)=>(e-l[t])/i));b({zIndex:202,transform:`scale(${i}) translate(${s[0]}px, ${s[1]}px)`,position:"relative"})},_=()=>{g(null)};return(0,l.useEffect)((()=>{m&&window.innerWidth>768&&_()}),[s]),(0,l.useEffect)((()=>{if(y&&m){document.querySelector("html").style.overflow="hidden"}else{document.querySelector("html").style.overflow="initial"}}),[y,m]),l.default.createElement(t.LightBoxContext.Provider,{value:{active:m,style:w,activeStyle:v,display:x,close:_,toggle:e=>{const t=m;_(),t!==e&&x(e)}}},n,r&&l.default.createElement(d.Portal,{containerId:"lsd-presentation"},l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{className:(0,i.default)(h.default.backdrop,m&&h.default.visible)}),l.default.createElement("div",{className:(0,i.default)(h.default.navWrapper,m&&h.default.visible)},l.default.createElement("nav",{className:(0,i.default)(h.default.nav,"navbar",m&&h.default.visible)},l.default.createElement(a.default,null),l.default.createElement(o.IconButton,{size:"medium",onClick:_},l.default.createElement(c.IconFullscreenExit,null)))))))},t.LightBoxContext=l.default.createContext({style:{},activeStyle:{},active:null,close:null,toggle:null,display:null});t.useLightBox=()=>{const e=(0,l.useContext)(t.LightBoxContext);return{getStyle:t=>({...e.style,...t===e.active?e.activeStyle:{}}),style:e.style,activeStyle:e.activeStyle,active:e.active,isActive:!!e.active,close:e.close,toggle:e.toggle,display:e.display,isActiveElement:t=>e.active===t}};t.LightBoxWrapper=e=>{let{children:n}=e;const r=(0,l.useRef)(null),a=(0,l.useRef)(null),{getStyle:u,display:d,isActiveElement:f}=(0,t.useLightBox)(),m=(0,p.useIsMobile)(),g=(0,l.useCallback)((e=>{let{x:t,y:n,scale:r}=e;const{current:o}=a;if(o){const e=(0,s.make3dTransformValue)({x:t,y:n,scale:r});o.style.setProperty("transform",e)}}),[]),v=m&&r.current&&f(r.current)?l.default.createElement(s.default,{onUpdate:g,doubleTapZoomOutOnMaxScale:!0,maxZoom:3},l.default.createElement("div",{ref:a},n)):l.default.createElement(l.default.Fragment,null,n,l.default.createElement(o.IconButton,{className:h.default.fullscreenButton,size:"medium",onClick:()=>r.current&&d(r.current)},l.default.createElement(c.IconFullscreen,null)));return l.default.createElement(l.default.Fragment,null,l.default.createElement("div",{className:(0,i.default)(h.default.wrapper,f(r.current)&&h.default.active),ref:r,style:r.current?u(r.current):{}},v))}},30091:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ThemeProvider=void 0;const r=n(70655),o=n(31665),a=n(70917),i=r.__importDefault(n(67294)),l=n(51509);t.ThemeProvider=e=>{let{children:t}=e;const n=(0,l.useTheme)();return i.default.createElement(o.ThemeProvider,{theme:n.current,injectCssVars:!1},i.default.createElement(a.Global,{styles:n.cssVars}),t)}},84138:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(70655).__exportStar(n(30091),t)},32833:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.settleSync=t.settle=void 0;t.settle=async e=>{try{return["function"==typeof e?await e():await e,void 0]}catch(t){return[void 0,t]}};t.settleSync=e=>{try{return[e(),void 0]}catch(t){return[void 0,t]}}},68347:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.ensureTrailingSlash=t.ensureTrailingString=void 0;t.ensureTrailingString=(e,t)=>e.endsWith(t)?e:e+t;t.ensureTrailingSlash=e=>(0,t.ensureTrailingString)(e,"/")},51509:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useTheme=void 0;const r=n(31665),o=n(93945),a=n(70917),i=n(67294),l=n(38840);t.useTheme=()=>{const e=(0,o.useColorMode)(),{typography:t}=(0,l.useThemeOptions)(),n=(null==t?void 0:t.genericFontFamily)??"sans-serif",s=r.defaultThemes,u=(0,i.useMemo)((()=>{const e={breakpoints:{},palette:{},typography:{},typographyGlobal:{genericFontFamily:n},spacing:[]};return{light:(0,r.createTheme)(e,s.light),dark:(0,r.createTheme)(e,s.dark)}}),[s,n]);return{dark:u.dark,light:u.light,current:u[e.colorMode],colorMode:e.colorMode,cssVars:(c=u.light,d=u.dark,f=u.light,(0,i.useMemo)((()=>a.css` html:not([data-theme]) { ${f.cssVars} @@ -11,4 +11,4 @@ html[data-theme='dark'] { ${d.cssVars} } - `),[d,c]))};var c,d,f}},17648:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useEventListener=void 0;const r=n(67294);t.useEventListener=(e,t,n,o,a)=>{const i=(0,r.useMemo)((()=>"string"==typeof e?e:e()),[]),l=(0,r.useMemo)((()=>"function"==typeof t?t():t),[t]);(0,r.useEffect)((()=>{if(null!=l&&l.addEventListener&&null!=l&&l.removeEventListener)return l.addEventListener(i,n,o),()=>{l.removeEventListener(i,n,o)}}),[i,l])}},67713:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useHydrated=void 0;const r=n(67294);t.useHydrated=()=>{const[e,t]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{t(!0)}),[]),e}},52606:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;const r=n(89164);t.useIsMobile=()=>(0,r.useMedia)("(max-width: 1199px)")},59213:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.usePersistedHistory=void 0;const r=n(89164);t.usePersistedHistory=(e,t)=>{const n=(null==t?void 0:t.unique)??!1,o=(null==t?void 0:t.equals)??((e,t)=>e===t),a=(null==t?void 0:t.maxItems)??null,[i,l]=(0,r.useLocalStorage)("logos-docusaurus-theme-"+e,[]),s=e=>{l((i??[]).filter(((t,n)=>!e(t,n))))};return{add:e=>{const t=i??[],r=[e,...n?t.filter((t=>!o(t,e))):t];l(a?r.slice(0,a):r)},clear:()=>{l([])},remove:s,removeByIndex:e=>{s(((t,n)=>n===e))},list:i}}},38840:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useDocThemeOptions=t.useThemeOptions=void 0;const r=n(70655),o=n(4452),a=r.__importDefault(n(6832));t.useThemeOptions=()=>{const{siteConfig:{customFields:e={}}}=(0,a.default)();return e["logos-docusaurus-theme"]??{}};t.useDocThemeOptions=()=>{var e;const n=(0,o.useActivePlugin)(),r=(0,t.useThemeOptions)();return n?(null==r||null==(e=r.docs)?void 0:e[null==n?void 0:n.pluginId])??{}:{}}},21457:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useWindowEventListener=void 0;const r=n(17648);t.useWindowEventListener=function(e,t,n,o){void 0===o&&(o=[]),(0,r.useEventListener)(e,(()=>"undefined"!=typeof window&&window),t,n,o)}},61818:(e,t,n)=>{"use strict";const r=n(70655),o=n(31665),a=n(11614),i=r.__importDefault(n(5730)),l=r.__importDefault(n(5574)),s=r.__importDefault(n(60388)),u=r.__importDefault(n(86010)),c=r.__importDefault(n(67294)),d=r.__importDefault(n(8633));t.Z=c.default.memo((function(e){let{className:t,buttonClassName:n,value:r,onChange:f}=e;const p=(0,i.default)(),h=(0,a.translate)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,a.translate)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,a.translate)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return c.default.createElement(o.IconButton,{className:(0,u.default)("clean-btn",d.default.toggle,t,!p&&d.default.toggleButtonDisabled,n),type:"button",onClick:()=>f("dark"===r?"light":"dark"),disabled:!p,title:h,"aria-label":h,"aria-live":"polite"},c.default.createElement(s.default,{className:(0,u.default)(d.default.toggleIcon,d.default.lightToggleIcon)}),c.default.createElement(l.default,{className:(0,u.default)(d.default.toggleIcon,d.default.darkToggleIcon)}))}))},72726:(e,t,n)=>{"use strict";const r=n(70655),o=n(31665),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=r.__importDefault(n(79762));t.Z=function(e){let{style:t,links:n,logo:r,copyright:s}=e;const[u,c]=(e=>{const t=[],n=[];for(const r of e)"title"in r&&"string"==typeof r.title&&r.title.startsWith("shared:")?n.push({...r,title:r.title.slice(7)}):t.push(r);return[t,n]})(n.props.links);return i.default.createElement("footer",{className:(0,a.default)("footer",{"footer--dark":"dark"===t})},i.default.createElement("div",{className:(0,a.default)("container","container-fluid",l.default.firstRow)},(r||s)&&i.default.createElement(i.default.Fragment,null,i.default.createElement("div",{className:"footer__bottom text--center"},r&&i.default.createElement("div",{className:"margin-bottom--sm"},r),s)),i.default.cloneElement(n,{links:u})),i.default.createElement("div",{className:(0,a.default)(l.default.secondRow)},i.default.createElement("span",{className:(0,a.default)("footer__bottom text--center")},"Built by"," ",i.default.createElement("a",{href:"https://free.technology/",target:"_blank",className:(0,a.default)(l.default.footerLink)},"IFT")),i.default.cloneElement(n,{links:c})),i.default.createElement(o.Button,{className:l.default.backToTop,size:"small",onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},"Back to top \u2191"))}},10211:(e,t,n)=>{"use strict";const r=n(70655).__importDefault(n(67294)),o=n(93945),a=n(18279),i=(0,o.composeProviders)([a.AnnouncementBarProvider,a.ScrollControllerProvider,a.DocsPreferredVersionContextProvider,a.PluginHtmlClassNameProvider,a.NavbarProvider]);t.Z=function(e){let{children:t}=e;return r.default.createElement(i,null,t)}},60969:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(70655),o=r.__importDefault(n(67294)),a=r.__importDefault(n(88746)),i=r.__importDefault(n(51402)),l=r.__importDefault(n(6832)),s=n(93945),u=r.__importDefault(n(25812));function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.default)(t.src),dark:(0,i.default)(t.srcDark||t.src)},l=o.default.createElement(u.default,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.default.createElement("div",{className:r},l):l}t.default=function(e){const{siteConfig:{title:t}}=(0,l.default)(),{navbar:{title:n,logo:r}}=(0,s.useThemeConfig)(),{imageClassName:u,titleClassName:d,...f}=e,p=(0,i.default)((null==r?void 0:r.href)||"/"),h=n?"":t,m=(null==r?void 0:r.alt)??h;return o.default.createElement(a.default,{to:p,...f,...(null==r?void 0:r.target)&&{target:r.target}},r&&o.default.createElement(c,{logo:r,alt:m,imageClassName:u}),null!=n&&o.default.createElement("b",{className:d},n))}},27882:(e,t,n)=>{"use strict";const r=n(70655),o=n(31665),a=n(93945),i=n(18279),l=r.__importDefault(n(17662)),s=r.__importDefault(n(56306)),u=r.__importDefault(n(60543)),c=r.__importDefault(n(93496)),d=r.__importDefault(n(20130)),f=r.__importDefault(n(86010)),p=r.__importDefault(n(67294)),h=n(67713),m=r.__importDefault(n(90826));function g(e){let{items:t}=e;return p.default.createElement(p.default.Fragment,null,t.map(((e,t)=>p.default.createElement(a.ErrorCauseBoundary,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},p.default.createElement(c.default,{...e})))))}t.Z=function(){const e=(0,h.useHydrated)(),t=(0,i.useNavbarMobileSidebar)(),n=(0,a.useThemeConfig)().navbar.items,[r,c]=(0,i.splitNavbarItems)(n.filter((e=>!["search"].includes(e.type??"")))),v=n.find((e=>"search"===e.type));return p.default.createElement("div",{className:"navbar__inner"},p.default.createElement("div",{className:"navbar__left"},p.default.createElement(s.default,null)),p.default.createElement("div",{className:"navbar__left-items"},p.default.createElement(g,{items:r})),p.default.createElement("div",{className:"navbar__right-items"},p.default.createElement(g,{items:c}),p.default.createElement(o.IconButtonGroup,{className:m.default.iconButtonGroup,size:"medium"},p.default.createElement(l.default,{key:"color-toggle",className:(0,f.default)(m.default.colorModeToggle,"navbar__color-mode-toggle")}),e&&p.default.createElement(p.default.Fragment,{key:"search"},v&&p.default.createElement(d.default,null)),p.default.createElement(p.default.Fragment,{key:"mobile-sidebar-toggle"},!t.disabled&&p.default.createElement(u.default,null)))))}},26558:(e,t,n)=>{"use strict";const r=n(70655),o=r.__importDefault(n(67294)),a=r.__importDefault(n(86010)),i=n(93945),l=n(18279),s=n(11614),u=r.__importDefault(n(44488)),c=r.__importDefault(n(97087));function d(e){return o.default.createElement("div",{role:"presentation",...e,className:(0,a.default)("navbar-sidebar__backdrop",e.className)})}t.Z=function(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:r}}=(0,i.useThemeConfig)(),f=(0,l.useNavbarMobileSidebar)(),{navbarRef:p,isNavbarVisible:h}=(0,l.useHideableNavbar)(n);return o.default.createElement("nav",{ref:p,"aria-label":(0,s.translate)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.default)("navbar","navbar--fixed-top",n&&[c.default.navbarHideable,!h&&c.default.navbarHidden],{"navbar--dark":"dark"===r,"navbar--primary":"primary"===r,"navbar-sidebar--show":f.shown})},t,o.default.createElement(d,{onClick:f.toggle}),o.default.createElement(u.default,null))}},56306:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(70655),o=r.__importDefault(n(67294)),a=r.__importDefault(n(60969));t.default=function(){return o.default.createElement(a.default,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}},20080:(e,t,n)=>{"use strict";const r=n(70655),o=r.__importDefault(n(67294)),a=n(18279),i=n(11614),l=r.__importDefault(n(17662)),s=r.__importDefault(n(56306)),u=n(31665),c=r.__importDefault(n(20130));function d(){const e=(0,a.useNavbarMobileSidebar)();return o.default.createElement("button",{type:"button","aria-label":(0,i.translate)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},o.default.createElement(u.CloseIcon,null))}t.Z=function(){return o.default.createElement("div",{className:"navbar-sidebar__brand"},o.default.createElement(s.default,null),o.default.createElement(l.default,{className:"margin-right--md"}),o.default.createElement(c.default,null),o.default.createElement(d,null))}},64644:(e,t,n)=>{"use strict";const r=n(70655),o=r.__importDefault(n(67294)),a=r.__importDefault(n(86010)),i=n(18279),l=r.__importDefault(n(10510));t.Z=function(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:s}=(0,i.useNavbarSecondaryMenu)();return o.default.createElement("div",{className:(0,a.default)("navbar-sidebar",s&&"navbar-sidebar--show-secondary")},t,o.default.createElement("div",{className:(0,a.default)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":s})},o.default.createElement("div",{className:"navbar-sidebar__item menu"},n,!s&&o.default.createElement(l.default,null)),o.default.createElement("div",{className:"navbar-sidebar__item menu"},r)))}},29843:(e,t,n)=>{"use strict";const r=n(70655),o=n(31665),a=n(93945),i=n(18279),l=r.__importDefault(n(11614)),s=n(6980),u=r.__importDefault(n(67294));function c(e){return u.default.createElement("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back"},u.default.createElement(s.IconArrowLeft,null),u.default.createElement(o.Typography,null,u.default.createElement(l.default,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"Back to main menu")))}t.Z=function(){const e=0===(0,a.useThemeConfig)().navbar.items.length,t=(0,i.useNavbarSecondaryMenu)();return u.default.createElement(u.default.Fragment,null,!e&&u.default.createElement(c,{onClick:()=>t.hide()}),t.content)}},71003:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(70655),o=n(31665),a=n(93945),i=n(18279),l=r.__importDefault(n(93496)),s=r.__importDefault(n(83112)),u=r.__importDefault(n(86010)),c=r.__importStar(n(67294)),d=r.__importDefault(n(83244));function f(e,t){return e.some((e=>function(e,t){return!!(0,i.isSamePath)(e.to,t)||!!(0,a.isRegexpStringMatch)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function p(e){let{items:t,position:n,className:r,onClick:a,...i}=e;const f=(0,c.useRef)(null),[p,h]=(0,c.useState)(!1);return(0,c.useEffect)((()=>{const e=e=>{f.current&&!f.current.contains(e.target)&&h(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[f]),c.default.createElement("div",{ref:f,className:(0,u.default)("navbar__item",d.default.dropdownNavbarItem,"dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":p})},c.default.createElement(s.default,{"aria-haspopup":"true","aria-expanded":p,role:"button",href:i.to?void 0:"#",className:(0,u.default)("navbar__link",r),...i,onClick:i.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),h(!p))}},i.children??i.label),c.default.createElement(o.ChevronDownIcon,{className:(0,u.default)("margin-left-8","cursor-pointer")}),c.default.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>c.default.createElement(l.default,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))))}function h(e){let{items:t,className:n,position:r,onClick:d,...p}=e;const h=(0,i.useLocalPathname)(),m=f(t,h),{collapsed:g,toggleCollapsed:v,setCollapsed:b}=(0,a.useCollapsible)({initialState:()=>!m});return(0,c.useEffect)((()=>{m&&b(!m)}),[h,m,b]),c.default.createElement("li",{className:(0,u.default)("menu__list-item",{"menu__list-item--collapsed":g})},c.default.createElement(s.default,{role:"button",className:(0,u.default)("menu__link menu__link--sublist menu__link--sublist-caret",n),...p,onClick:e=>{e.preventDefault(),v()}},c.default.createElement(o.Typography,{variant:"body1"},p.children??p.label)),c.default.createElement(a.Collapsible,{lazy:!0,as:"ul",className:"menu__list",collapsed:g},t.map(((e,t)=>c.default.createElement(l.default,{mobile:!0,isDropdownItem:!0,onClick:d,activeClassName:"menu__link--active",...e,key:t})))))}t.default=function(e){let{mobile:t=!1,...n}=e;const r=t?h:p;return c.default.createElement(r,{...n})}},23247:(e,t,n)=>{"use strict";const r=n(70655),o=r.__importDefault(n(67294)),a=r.__importDefault(n(6832)),i=n(18279),l=n(11614),s=n(7154),u=r.__importDefault(n(71003));t.Z=function(e){var t;let{mobile:n,dropdownItemsBefore:r,dropdownItemsAfter:c,...d}=e;const{i18n:{currentLocale:f,locales:p,localeConfigs:h}}=(0,a.default)(),m=(0,i.useAlternatePageUtils)(),{search:g,hash:v}=(0,s.useLocation)(),b=[...r,...p.map((e=>{var t,r;const o=`${`pathname://${m.createUrl({locale:e,fullyQualified:!1})}`}${g}${v}`;return{label:null==(t=h[e])?void 0:t.label,lang:null==(r=h[e])?void 0:r.htmlLang,to:o,target:"_self",autoAddBaseUrl:!1,className:e===f?n?"menu__link--active":"dropdown__link--active":""}})),...c],y=n?(0,l.translate)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):null==(t=h[f])?void 0:t.label.substring(0,2).toUpperCase();return o.default.createElement(u.default,{...d,mobile:n,label:o.default.createElement(o.default.Fragment,null,y),items:b})}},83112:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(70655),o=n(31665),a=r.__importDefault(n(71699)),i=r.__importDefault(n(88746)),l=n(93945),s=r.__importDefault(n(51402)),u=r.__importDefault(n(67294)),c=n(22197),d=r.__importDefault(n(88822));t.default=function(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:f,label:p,html:h,isDropdownLink:m,prependBaseUrlToHref:g,...v}=e;const b=(0,s.default)(r),y=(0,s.default)(t),w=(0,s.default)(f,{forcePrependBaseUrl:!0}),x=p&&f&&!(0,a.default)(f),_=h?{dangerouslySetInnerHTML:{__html:h}}:{children:u.default.createElement(o.Typography,{component:"div",variant:"body2",className:d.default.linkContent},p,x&&u.default.createElement(c.IconExternalLink,{className:d.default.externalLinkIcon}))};return f?u.default.createElement(i.default,{href:g?w:f,...v,..._}):u.default.createElement(i.default,{to:b,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?(0,l.isRegexpStringMatch)(n,t.pathname):t.pathname.startsWith(y)},...v,..._})}},28511:(e,t,n)=>{"use strict";const r=n(70655),o=n(18279),a=r.__importDefault(n(67294)),i=n(91866),l=n(84138),s=n(38840),u=r.__importDefault(n(36459));t.Z=function(e){var t;let{children:n}=e;const r=(0,s.useDocThemeOptions)(),c=null==r||null==(t=r.sidebar)?void 0:t.hide;return a.default.createElement(o.ColorModeProvider,null,a.default.createElement(l.ThemeProvider,null,a.default.createElement(i.LightBoxProvider,null,a.default.createElement("div",{className:u.default.root,"data-hidden-doc-sidebar":c},n))))}},56051:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchBar=void 0;const r=n(70655),o=n(31665),a=r.__importStar(n(67294)),i=n(81575),l=n(59213),s=n(21457),u=n(41310),c=r.__importDefault(n(31259)),d=n(55634),f=n(16991),p=n(44334);t.SearchBar=e=>{let{}=e;const t=(0,l.usePersistedHistory)("search",{unique:!0,equals:(e,t)=>e.title===t.title&&e.href===t.href,maxItems:10}),n=(0,u.useSearch)(),r=(0,a.useRef)(null),[h,m]=(0,a.useState)(""),[g,v]=(0,a.useState)([]),[b,y]=(0,a.useState)(!1);(0,a.useEffect)((()=>{h.length>0?(async e=>{const{results:t}=await n.query(e);v(t)})(h):v([])}),[h]),(0,a.useEffect)((()=>{b?(()=>{const e=r.current;if(!e)return;const t=e.querySelector("input");t&&setTimeout((()=>{t.focus()}),50)})():m("")}),[b]);return(0,s.useWindowEventListener)("keydown",(e=>{(e.ctrlKey||e.metaKey)&&"KeyK"===e.code&&(e.preventDefault(),y(!0))}),{},[]),a.default.createElement(a.default.Fragment,null,a.default.createElement(o.IconButton,{onClick:()=>y(!0),size:"medium"},a.default.createElement(o.SearchIcon,null)),a.default.createElement(i.Modal,{keepMounted:!0,id:"search-modal",open:b,onClose:()=>y(!1),className:c.default.modal},a.default.createElement("div",{className:c.default.header},a.default.createElement(f.SearchInput,{containerRef:r,onClear:()=>{m("")},value:h,onChange:e=>{m(e.target.value)}}),a.default.createElement(o.IconButton,{className:c.default.closeButton,size:"medium",onClick:()=>y(!1)},a.default.createElement(o.CloseIcon,{color:"primary"}))),h.length>0&&a.default.createElement(p.SearchResults,{results:g,onNavigate:(e,n)=>{e.preventDefault(),y(!1),t.add(n),window.location.href=n.href}}),0===h.length&&a.default.createElement(d.SearchHistory,{history:t.list??[],onRemove:t.removeByIndex,onClose:()=>y(!1)})))}},55634:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchHistory=void 0;const r=n(70655),o=n(31665),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=n(22197),s=n(42130),u=r.__importDefault(n(61699));t.SearchHistory=e=>{let{history:t=[],onRemove:n,onClose:r,className:c,children:d,...f}=e;return i.default.createElement("div",{className:(0,a.default)(c,u.default.root,0===t.length&&u.default.empty),...f},0===t.length?i.default.createElement(s.SearchResultMessage,null,"No recent searches"):i.default.createElement(i.default.Fragment,null,i.default.createElement(o.Typography,{className:u.default.title,variant:"subtitle2",component:"div"},"Recent"),t.map(((e,t)=>i.default.createElement("div",{key:t,className:u.default.item},i.default.createElement(l.IconHistory,null),i.default.createElement(o.Typography,{variant:"subtitle2",component:"a",href:e.href,className:u.default.itemTitle,dangerouslySetInnerHTML:{__html:e.title},onClick:()=>r&&r()}),i.default.createElement("button",{className:"clean-btn",onClick:()=>n(t)},i.default.createElement(l.IconClose,null)))))))}},16991:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchInput=void 0;const r=n(70655),o=n(31665),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=n(89164),s=r.__importDefault(n(9592));t.SearchInput=e=>{let{value:t="",active:n,onChange:r,onClear:u,onFocus:c,onCancel:d,className:f,inputProps:{ref:p,...h}={placeholder:""},containerRef:m,...g}=e;const v=(0,l.useMedia)("(max-width: 996px)"),b=n||(null==t?void 0:t.length)>0;return i.default.createElement("div",{ref:m,className:(0,a.default)(s.default.root,b&&s.default.expanded,f),onKeyDown:e=>{"Escape"===e.code&&t.length>0&&(e.stopPropagation(),u&&u())},...g},i.default.createElement(o.TextField,{className:s.default.textField,value:t,placeholder:b||v?h.placeholder:"",onChange:r,onFocus:e=>{c&&c()},clearButton:!0,icon:i.default.createElement(o.SearchIcon,{color:"primary"}),...h}))}},537:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchResultGroup=void 0;const r=n(70655),o=n(31665),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=r.__importDefault(n(1443));t.SearchResultGroup=e=>{let{className:t,title:n="",children:r,...s}=e;return i.default.createElement("div",{className:(0,a.default)(l.default.root,t),...s},i.default.createElement("div",null,i.default.createElement(o.Typography,{variant:"subtitle2"},n)),i.default.createElement("ul",null,r))}},16183:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(70655).__exportStar(n(537),t)},78447:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchResultItem=void 0;const r=n(70655),o=r.__importDefault(n(88746)),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=r.__importDefault(n(7744)),s=r.__importDefault(n(42924)),u=n(55459),c=n(79587),d=r.__importDefault(n(18589)),f={[c.SearchDocumentType.Title]:i.default.createElement(l.default,{className:(0,a.default)(d.default.icon,d.default.fill)}),[c.SearchDocumentType.Heading]:i.default.createElement(s.default,{className:(0,a.default)(d.default.icon,d.default.fill)}),[c.SearchDocumentType.Paragraph]:i.default.createElement(s.default,{className:(0,a.default)(d.default.icon,d.default.fill)})};t.SearchResultItem=e=>{let{type:t,level:n=0,href:r,title:l,content:s,className:c,linkProps:{className:p,...h}={},...m}=e;const g=f[t];return i.default.createElement(o.default,{href:r,className:(0,a.default)(d.default.root,d.default[`level${n}`],p),...h},i.default.createElement(u.SearchResultItemBase,{title:l,content:s,icon:g,...m}))}},98028:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(70655).__exportStar(n(78447),t)},8655:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchResultItemBase=void 0;const r=n(70655),o=n(31665),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=r.__importDefault(n(86620));t.SearchResultItemBase=e=>{let{icon:t,title:n,content:r,className:s,...u}=e;return i.default.createElement("li",{className:(0,a.default)(l.default.root,s),...u},i.default.createElement("span",null,t),i.default.createElement("div",null,n&&i.default.createElement(o.Typography,{variant:"subtitle2",component:"span",dangerouslySetInnerHTML:{__html:n}})))}},55459:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(70655).__exportStar(n(8655),t)},42130:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchResultMessage=void 0;const r=n(70655),o=n(31665),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=r.__importDefault(n(38076));t.SearchResultMessage=e=>{let{className:t,children:n,...r}=e;return i.default.createElement(o.Typography,{className:(0,a.default)(t,l.default.root),variant:"subtitle2",component:"div",...r},i.default.createElement("span",null,n))}},44334:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchResults=void 0;const r=n(70655),o=r.__importDefault(n(86010)),a=r.__importStar(n(67294)),i=n(16183),l=n(98028),s=n(42130),u=n(36570),c=r.__importDefault(n(20550));t.SearchResults=e=>{let{results:t,className:n,onNavigate:r,...d}=e;const f=t.length,p=(0,a.useMemo)((()=>(0,u.groupSearchResult)(t)),[t]);return a.default.createElement("div",{className:(0,o.default)(c.default.root,0===f&&c.default.noResults)},0===f&&a.default.createElement(s.SearchResultMessage,null,"No result."),a.default.createElement("div",{className:(0,o.default)(c.default.groups)},p.map(((e,t)=>{let[n,o]=e;return a.default.createElement(a.default.Fragment,{key:t},a.default.createElement(i.SearchResultGroup,{className:c.default.group,title:n},o.map(((e,t)=>a.default.createElement(l.SearchResultItem,{key:t,type:e.type,level:e.level,href:e.href,title:e.title,content:e.content,linkProps:r?{onClick:t=>r(t,e)}:{}})))))}))))}},41310:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useSearch=void 0;const r=n(67294),o=n(8675);t.useSearch=()=>{const{createSearchInstance:e}=window,t=(0,o.useSearchContextPath)(),[n,a]=(0,r.useState)(!1),i=(0,r.useRef)(null);return(0,r.useEffect)((()=>{a(!1),(async()=>{i.current=await e({resultsLimit:50,preferredVersionPath:t[0],searchContextByPaths:t[1]}),await i.current.init(),a(!0)})()}),[t[0],t[1]]),{loaded:n,query:async e=>await i.current.query(e)}}},8675:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useSearchContextPath=void 0;const r=n(4452),o=n(68347),a=()=>window.getProxiedGeneratedData().searchContextByPaths;t.useSearchContextPath=()=>{const e=a(),t=(0,r.useActivePluginAndVersion)();if(!t)return["/",""];const{activePlugin:{pluginData:{path:n}},activeVersion:i}=t;return i?[n!==i.path?(0,o.ensureTrailingSlash)(i.path):"/",e]:["/",""]}},20130:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(70655),o=r.__importDefault(n(24649)),a=r.__importDefault(n(67294)),i=n(56051);t.default=()=>"undefined"==typeof window?a.default.createElement(a.default.Fragment,null):a.default.createElement(o.default,{fallback:()=>a.default.createElement(a.default.Fragment,null)},a.default.createElement(i.SearchBar,null))},79587:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchDocumentType=void 0,function(e){e.Title="title",e.Heading="heading",e.Paragraph="paragraph"}(t.SearchDocumentType||(t.SearchDocumentType={}))},36570:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.groupSearchResult=void 0;const r=n(70655),o=r.__importDefault(n(7739)),a=r.__importDefault(n(57557)),i=n(79587);t.groupSearchResult=e=>Object.entries((0,o.default)(e.map((e=>(e=>{const{type:t,document:n,page:r,highlighted:o,score:a}=e,{url:l,hash:s=""}=n,u=l+s;switch(t){case i.SearchDocumentType.Title:var c;return{type:t,level:0,url:l,hash:s,href:u,score:a,title:o,content:"",category:(null==(c=n.breadcrumb)?void 0:c[1])??n.title};case i.SearchDocumentType.Heading:{var d;const e=r;return{type:t,level:1,url:l,hash:s,href:u,score:a,title:o,content:"",category:(null==e||null==(d=e.breadcrumb)?void 0:d[1])??(null==e?void 0:e.title)??""}}case i.SearchDocumentType.Paragraph:{var f;const e=r;return{type:t,level:2,url:l,hash:s,href:u,score:a,title:n.sectionTitle||n.title||"",content:o,category:(null==e||null==(f=e.breadcrumb)?void 0:f[1])??(null==e?void 0:e.title)??""}}}})(e))),"category")).map((e=>{let[t,n]=e;return[t,n.map((e=>(0,a.default)(e,"category"))).sort(((e,t)=>e.score>t.score?-1:1))]})).sort(((e,t)=>{var n,r;return((null==(n=e[1][0])?void 0:n.score)??0)>((null==(r=t[1][0])?void 0:r.score)??0)?-1:1})).map((e=>{let[t,n]=e;return[t,Object.entries((0,o.default)(n,"url")).map((e=>{var t;let[n,r]=e,o=[...r].sort(((e,t)=>e.type===i.SearchDocumentType.Title||e.score>t.score?-1:1));const a=(null==(t=o[0])?void 0:t.type)===i.SearchDocumentType.Title;return o=a?o.filter((e=>!(e.type===i.SearchDocumentType.Heading&&""===e.hash))):o,o=o.map(((e,t)=>({...e,level:a?0===t?0:1:0}))),[n,o]})).sort(((e,t)=>{var n,r;return((null==(n=e[1][0])?void 0:n.score)??0)>((null==(r=t[1][0])?void 0:r.score)??0)?-1:1})).flatMap((e=>{let[t,n]=e;return n}))]}))},25812:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(70655),o=r.__importDefault(n(67294)),a=r.__importDefault(n(86010)),i=r.__importDefault(n(5730)),l=n(93945),s=r.__importDefault(n(65787));t.default=function(e){const t=(0,i.default)(),{colorMode:n}=(0,l.useColorMode)(),{sources:r,className:u,alt:c,...d}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.default.createElement(o.default.Fragment,null,f.map((e=>o.default.createElement("img",{key:e,src:r[e],alt:c,className:(0,a.default)(s.default.themedImage,s.default[`themedImage--${e}`],u),...d}))))}},74058:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(67294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},3364:(e,t,n)=>{"use strict";var r=n(67294),o=n(73935),a=n(73727),i=n(70405),l=n(19901);const s=[n(79578),n(32497),n(25529),n(26126),n(11057),n(93878),n(27998)];var u=n(21204),c=n(16550),d=n(18790),f=n(28511),p=n(87462),h=n(32411),m=n(6832),g=n(51402),v=n(96793),b=n(44873),y=n(13156),w=n(22768),x=n(39105),_=n(26145);function k(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,m.default)(),n=(0,y.l)();return r.createElement(h.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function E(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,m.default)(),o=function(){const{siteConfig:{url:e}}=(0,m.default)(),{pathname:t}=(0,c.TH)();return e+(0,g.default)(t)}(),a=t?`${n}${t}`:o;return r.createElement(h.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function S(){const{i18n:{currentLocale:e}}=(0,m.default)(),{metadata:t,image:n}=(0,v.L)();return r.createElement(r.Fragment,null,r.createElement(h.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(b.d,{image:n}),r.createElement(E,null),r.createElement(k,null),r.createElement(_.Z,{tag:x.HX,locale:e}),r.createElement(h.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var O=n(74058),D=n(56725);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r{var r;const o=(null==(r=t.default)?void 0:r[e])??t[e];return null==o?void 0:o(...n)}));return()=>o.forEach((e=>null==e?void 0:e()))}const N=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);null==t||t.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),P("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function I(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>null==e.route.component.preload?void 0:e.route.component.preload())))}class A extends r.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=l.default.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),I(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const L=A,R="__docusaurus-base-url-issue-banner-container",j="__docusaurus-base-url-issue-banner-suggestion-container",M="__DOCUSAURUS_INSERT_BASEURL_BANNER";function F(e){return`\nwindow['${M}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${M}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${R}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n
\n

Your Docusaurus site did not load properly.

\n

A very common reason is a wrong site baseUrl configuration.

\n

Current configured baseUrl = ${e} ${"/"===e?" (default value)":""}

\n

We suggest trying baseUrl =

\n
\n`}(e)).replace(/{window[M]=!1}),[]),r.createElement(r.Fragment,null,!l.default.canUseDOM&&r.createElement(h.Z,null,r.createElement("script",null,F(e))),r.createElement("div",{id:R}))}function z(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,m.default)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(B,null):null}function $(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,m.default)(),i=(0,g.default)(e),{htmlLang:l,direction:s}=a[o];return r.createElement(h.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var U=n(24649);function H(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(U.default,null,r.createElement(D.M,null,r.createElement(O.t,null,r.createElement(f.Z,null,r.createElement($,null),r.createElement(S,null),r.createElement(z,null),r.createElement(L,{location:T(t)},e)))))}var V=n(16887);const q=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{var r;if("undefined"==typeof document)return void n();const o=document.createElement("link");o.setAttribute("rel","prefetch"),o.setAttribute("href",e),o.onload=()=>t(),o.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??(null==(r=document.getElementsByName("script")[0])?void 0:r.parentNode);null==a||a.appendChild(o)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var G=n(66916);const W=new Set,Z=new Set,Q=()=>{var e,t;return(null==(e=navigator.connection)?void 0:e.effectiveType.includes("2g"))||(null==(t=navigator.connection)?void 0:t.saveData)},Y={prefetch(e){if(!(e=>!Q()&&!Z.has(e)&&!W.has(e))(e))return!1;W.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(V).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,G.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?q(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!Q()&&!Z.has(e))(e)&&(Z.add(e),I(e))},X=Object.freeze(Y);if(l.default.canUseDOM){window.docusaurus=X;const e=o.hydrate;I(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},56725:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(67294),o=n(36809);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"root-pages":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"community","docs":[{"id":"community","path":"/community"},{"id":"join-us","path":"/join-us"},{"id":"news","path":"/news"},{"id":"privacy-policy","path":"/privacy-policy"},{"id":"security","path":"/security"},{"id":"terms","path":"/terms"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/community","label":"community"}}}}],"breadcrumbs":false},"about":{"path":"/about","versions":[{"name":"current","label":"Next","isLast":true,"path":"/about","mainDocId":"index","docs":[{"id":"architect","path":"/about/architect","sidebar":"defaultSidebar"},{"id":"faq","path":"/about/faq","sidebar":"defaultSidebar"},{"id":"index","path":"/about/","sidebar":"defaultSidebar"},{"id":"roadmap","path":"/about/roadmap","sidebar":"defaultSidebar"},{"id":"team","path":"/about/team","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/about/","label":"index"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(57529);const s=JSON.parse('{"docusaurusVersion":"2.4.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.1"},"docusaurus-plugin-sass":{"type":"package","name":"docusaurus-plugin-sass","version":"0.2.3"},"logos-docusaurus-search-local":{"type":"package","name":"@acid-info/logos-docusaurus-search-local","version":"1.0.0-alpha.111"},"logos-data-plugin":{"type":"local"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.1"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"2.4.1"},"logos-docusaurus-theme":{"type":"package","name":"@acid-info/logos-docusaurus-theme","version":"1.0.0-alpha.174"},"docusaurus-fathom":{"type":"package","name":"@acid-info/docusaurus-fathom","version":"1.0.0-alpha.111"},"docusaurus-og":{"type":"package","name":"@acid-info/docusaurus-og","version":"1.0.0-alpha.131"}}}'),u={siteConfig:o.Z,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},24649:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>f});var r=n(67294),o=n(19901),a=n(32411),i=n(79861),l=n(66867);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.default,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.default.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},19901:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},32411:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294),o=n(70405);function a(e){return r.createElement(o.ql,e)}},88746:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(87462),o=n(67294),a=n(73727),i=n(79861),l=n(6832),s=n(71699),u=n(19901);const c=o.createContext({collectLink:()=>{}});var d=n(51402);function f(e,t){var n;let{isNavLink:f,to:p,href:h,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":v,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:w,baseUrl:x}}=(0,l.default)(),{withBaseUrl:_}=(0,d.useBaseUrlUtils)(),k=(0,o.useContext)(c),E=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>E.current));const S=p||h;const C=(0,s.default)(S),T=null==S?void 0:S.replace("pathname://","");let O=void 0!==T?(D=T,b&&(e=>e.startsWith("/"))(D)?_(D):D):void 0;var D;O&&C&&(O=(0,i.applyTrailingSlash)(O,{trailingSlash:w,baseUrl:x}));const P=(0,o.useRef)(!1),N=f?a.OL:a.rU,I=u.default.canUseIntersectionObserver,A=(0,o.useRef)(),L=()=>{P.current||null==O||(window.docusaurus.preload(O),P.current=!0)};(0,o.useEffect)((()=>(!I&&C&&null!=O&&window.docusaurus.prefetch(O),()=>{I&&A.current&&A.current.disconnect()})),[A,O,I,C]);const R=(null==(n=O)?void 0:n.startsWith("#"))??!1,j=!O||!C||R;return j||v||k.collectLink(O),j?o.createElement("a",(0,r.Z)({ref:E,href:O},S&&!C&&{target:"_blank",rel:"noopener noreferrer"},y)):o.createElement(N,(0,r.Z)({},y,{onMouseEnter:L,onTouchStart:L,innerRef:e=>{E.current=e,I&&e&&C&&(A.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(A.current.unobserve(e),A.current.disconnect(),null!=O&&window.docusaurus.prefetch(O))}))})),A.current.observe(e))},to:O},f&&{isActive:g,activeClassName:m}))}const p=o.forwardRef(f)},11614:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s,translate:()=>l});var r=n(67294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=null==t?void 0:t[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(57529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal children",t),new Error("The Docusaurus component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,o(l,a))}},12497:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},71699:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.r(t),n.d(t,{default:()=>o,hasProtocol:()=>r})},7154:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Redirect:()=>r.l_,matchPath:()=>r.LX,useHistory:()=>r.k6,useLocation:()=>r.TH});var r=n(16550)},51402:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l,useBaseUrlUtils:()=>i});var r=n(67294),o=n(6832),a=n(71699);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.default)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.hasProtocol)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},6832:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(67294),o=n(56725);function a(){return(0,r.useContext)(o._)}},5730:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(67294),o=n(74058);function a(){return(0,r.useContext)(o._)}},66916:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});function r(e){const t={};return function e(n,r){Object.entries(n).forEach((n=>{let[o,a]=n;const i=r?`${r}.${o}`:o;var l;"object"==typeof(l=a)&&l&&Object.keys(l).length>0?e(a,i):t[i]=a}))}(e),t}},66041:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(67294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...null==n?void 0:n.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},4452:(e,t,n)=>{"use strict";n.r(t),n.d(t,{useActiveDocContext:()=>b,useActivePlugin:()=>p,useActivePluginAndVersion:()=>h,useActiveVersion:()=>v,useAllDocsData:()=>d,useDocVersionSuggestions:()=>y,useDocsData:()=>f,useLatestVersion:()=>g,useVersions:()=>m});var r=n(16550),o=n(6832),a=n(12497);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.default)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function u(e,t){const n=s(e,t),o=null==n?void 0:n.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},d=()=>i("docusaurus-plugin-content-docs")??c,f=e=>function(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=i(e),o=null==r?void 0:r[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function h(e){void 0===e&&(e={});const t=p(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:s(t.pluginData,n)}}function m(e){return f(e).versions}function g(e){const t=f(e);return l(t)}function v(e){const t=f(e),{pathname:n}=(0,r.TH)();return s(t,n)}function b(e){const t=f(e),{pathname:n}=(0,r.TH)();return u(t,n)}function y(e){const t=f(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:u(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},26126:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(74865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},25529:(e,t,n)=>{"use strict";n.r(t);var r=n(87410),o=n(36809);!function(e){const{themeConfig:{prism:t}}=o.Z,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},10510:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>T});var r=n(67294),o=n(96793),a=n(68211),i=n(87462),l=n(88746),s=n(51402),u=n(71699),c=n(43399);function d(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:d,...f}=t,p=(0,s.default)(n),h=(0,s.default)(o,{forcePrependBaseUrl:!0});return r.createElement(l.default,(0,i.Z)({className:"footer__link-item"},o?{href:d?h:o}:{to:p},f),a,o&&!(0,u.default)(o)&&r.createElement(c.Z,null))}function f(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(d,{item:t}))}function p(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(f,{key:t,item:e})))))}function h(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(p,{key:t,column:e}))))}function m(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function g(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(d,{item:t})}function v(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(g,{item:e}),t.length!==n+1&&r.createElement(m,null))))))}function b(e){let{links:t}=e;return(0,a.a)(t)?r.createElement(h,{columns:t}):r.createElement(v,{links:t})}var y=n(86010),w=n(25812);const x="footerLogoLink_BH7S";function _(e){let{logo:t}=e;const{withBaseUrl:n}=(0,s.useBaseUrlUtils)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(w.default,{className:(0,y.default)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function k(e){let{logo:t}=e;return t.href?r.createElement(l.default,{href:t.href,className:x,target:t.target},r.createElement(_,{logo:t})):r.createElement(_,{logo:t})}function E(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}var S=n(72726);function C(){const{footer:e}=(0,o.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:i}=e;return r.createElement(S.Z,{style:i,links:n&&n.length>0&&r.createElement(b,{links:n}),logo:a&&r.createElement(k,{logo:a}),copyright:t&&r.createElement(E,{copyright:t})})}const T=r.memo(C)},5574:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(87462),o=n(67294);function a(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24",width:24,height:24},e),o.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}},43399:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294);const o="iconExternalLink_nPIU";function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},60388:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(87462),o=n(67294);function a(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24",width:24,height:24},e),o.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}},66867:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>L});var r=n(67294),o=n(86010),a=n(24649),i=n(44873),l=n(66470),s=n(18015),u=n(22768);const c="skipToContent_fXgn";function d(){return r.createElement(l.l,{className:c})}var f=n(96793),p=n(69061),h=n(87462),m=n(11614);function g(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...l}=e;return r.createElement("svg",(0,h.Z)({viewBox:"0 0 15 15",width:t,height:n},l),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const v="closeButton_CVFx";function b(e){return r.createElement("button",(0,h.Z)({type:"button","aria-label":(0,m.translate)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.default)("clean-btn close",v,e.className)}),r.createElement(g,{width:14,height:14,strokeWidth:3.1}))}const y="content_knG7";function w(e){const{announcementBar:t}=(0,f.L)(),{content:n}=t;return r.createElement("div",(0,h.Z)({},e,{className:(0,o.default)(y,e.className),dangerouslySetInnerHTML:{__html:n}}))}const x="announcementBar_mb4j",_="announcementBarPlaceholder_vyr4",k="announcementBarClose_gvF7",E="announcementBarContent_xLdY";function S(){const{announcementBar:e}=(0,f.L)(),{isActive:t,close:n}=(0,p.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:x,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:_}),r.createElement(w,{className:E}),i&&r.createElement(b,{onClick:n,className:k}))}var C=n(26558),T=n(27882);function O(){return r.createElement(C.Z,null,r.createElement(T.Z,null))}var D=n(10510),P=n(10211),N=n(48348);function I(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(m.default,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(N.Cw,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(N.aG,{error:t})))))}const A="mainWrapper_z2l0";function L(e){const{children:t,noFooter:n,wrapperClassName:c,title:f,description:p}=e;return(0,u.t)(),r.createElement(P.Z,null,r.createElement(i.d,{title:f,description:p}),r.createElement(d,null),r.createElement(S,null),r.createElement(O,null),r.createElement("div",{id:l.u,className:(0,o.default)(s.k.wrapper.main,A,c)},r.createElement(a.default,{fallback:e=>r.createElement(I,e)},t)),!n&&r.createElement(D.default,null))}},17662:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=n(96793),a=n(70524),i=n(61818);const l="darkNavbarColorModeToggle_X3D1";function s(e){let{className:t}=e;const n=(0,o.L)().navbar.style,s=(0,o.L)().colorMode.disableSwitch,{colorMode:u,setColorMode:c}=(0,a.I)();return s?null:r.createElement(i.Z,{className:t,buttonClassName:"dark"===n?l:void 0,value:u,onChange:c})}},60543:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=n(35022),a=n(11614),i=n(87462);function l(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,i.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function s(){const{toggle:e,shown:t}=(0,o.e)();return r.createElement("button",{onClick:e,"aria-label":(0,a.translate)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(l,null))}},44488:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(67294),o=n(35022),a=n(69322),i=n(64644),l=n(20080),s=n(87462),u=n(96793),c=n(93496);function d(){const e=(0,o.e)(),t=(0,u.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(c.default,(0,s.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}var f=n(29843);function p(){const e=(0,o.e)();return(0,a.N)(e.shown),e.shouldRender?r.createElement(i.Z,{header:r.createElement(l.Z,null),primaryMenu:r.createElement(d,null),secondaryMenu:r.createElement(f.Z,null)}):null}},93496:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>_});var r=n(67294),o=n(87462),a=n(86010),i=n(83112);function l(e){let{className:t,isDropdownItem:n=!1,...l}=e;const s=r.createElement(i.default,(0,o.Z)({className:(0,a.default)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},l));return n?r.createElement("li",null,s):s}function s(e){let{className:t,isDropdownItem:n,...l}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(i.default,(0,o.Z)({className:(0,a.default)("menu__link",t)},l)))}function u(e){let{mobile:t=!1,position:n,...a}=e;const i=t?s:l;return r.createElement(i,(0,o.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var c=n(71003),d=n(23247),f=n(20130);const p="searchBox_ZlJk";function h(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.default)(n,p)},t)}var m=n(4452),g=n(85919);var v=n(4049),b=n(11614),y=n(16550);const w=e=>e.docs.find((t=>t.id===e.mainDocId));const x={default:u,localeDropdown:d.Z,search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(h,{className:n},r.createElement(f.default,null))},dropdown:c.default,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.default)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...i}=e;const{activeDoc:l}=(0,m.useActiveDocContext)(a),s=(0,g.vY)(t,a);return null===s?null:r.createElement(u,(0,o.Z)({exact:!0},i,{isActive:()=>(null==l?void 0:l.path)===s.path||!(null==l||!l.sidebar)&&l.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...i}=e;const{activeDoc:l}=(0,m.useActiveDocContext)(a),s=(0,g.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(u,(0,o.Z)({exact:!0},i,{isActive:()=>(null==l?void 0:l.sidebar)===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...i}=e;const l=(0,g.lO)(a)[0],s=t??l.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(l).path;return r.createElement(u,(0,o.Z)({},i,{label:s,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:i,dropdownItemsAfter:l,...s}=e;const{search:d,hash:f}=(0,y.TH)(),p=(0,m.useActiveDocContext)(n),h=(0,m.useVersions)(n),{savePreferredVersionName:x}=(0,v.J)(n),_=[...i,...h.map((e=>{const t=p.alternateDocVersions[e.name]??w(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>x(e.name)}})),...l],k=(0,g.lO)(n)[0],E=t&&_.length>1?(0,b.translate)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):k.label,S=t&&_.length>1?void 0:w(k).path;return _.length<=1?r.createElement(u,(0,o.Z)({},s,{mobile:t,label:E,to:S,isActive:a?()=>!1:void 0})):r.createElement(c.default,(0,o.Z)({},s,{mobile:t,label:E,to:S,items:_,isActive:a?()=>!1:void 0}))}};function _(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=x[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}},26145:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294),o=n(32411);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},69061:(e,t,n)=>{"use strict";n.d(t,{nT:()=>h,pl:()=>p});var r=n(67294),o=n(5730),a=n(99200),i=n(93478),l=n(96793);const s=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.default)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},70524:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>m});var r=n(67294),o=n(19901),a=n(93478),i=n(99200),l=n(96793);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d="light",f="dark",p=e=>e===f?f:d;function h(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,i]=(0,r.useState)((e=>o.default.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e))(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const s=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(i(t),o&&(e=>{c.set(p(e))})(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f:d:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&s(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,s]);const h=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||h.current?h.current=window.matchMedia("print").matches:s(null)};return e.addListener(r),()=>e.removeListener(r)}),[s,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:s,get isDarkTheme(){return a===f},setLightTheme(){s(d)},setDarkTheme(){s(f)}})),[a,s])}function m(e){let{children:t}=e;const n=h();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},2791:(e,t,n)=>{"use strict";n.d(t,{b:()=>i,k:()=>l});var r=n(67294),o=n(93478);const a=r.createContext(null);function i(e){let{children:t,content:n}=e;const o=function(e){return(0,r.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return r.createElement(a.Provider,{value:o},t)}function l(){const e=(0,r.useContext)(a);if(null===e)throw new o.i6("DocProvider");return e}},55132:(e,t,n)=>{"use strict";n.d(t,{D:()=>l,f:()=>s});var r=n(67294),o=n(93478);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t}=e;const[n,o]=(0,r.useState)(null),a=(0,r.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocSidebarItemsExpandedStateProvider");return e}},4049:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>v,Oh:()=>w});var r=n(67294),o=n(4452),a=n(12497),i=n(96793),l=n(85919),s=n(93478),u=n(99200);const c=e=>`docs-preferred-version-${e}`,d=(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},f=(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),p=(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()};const h=r.createContext(null);function m(){const e=(0,o.useAllDocsData)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>(e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}]))))(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=f(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return r.createElement(h.Provider,{value:n},t)}function v(e){let{children:t}=e;return l.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(h);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=a.m);const t=(0,o.useDocsData)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function w(){const e=(0,o.useAllDocsData)(),[t]=b();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},50003:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(67294),o=n(93478);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},6141:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>i});var r=n(67294),o=n(93478);const a=r.createContext(null);function i(e){let{children:t,version:n}=e;return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(null===e)throw new o.i6("DocsVersionProvider");return e}},35022:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(67294),o=n(82306),a=n(94980),i=n(34423),l=n(96793),s=n(93478);const u=r.createContext(void 0);function c(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function d(e){let{children:t}=e;const n=c();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},82306:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(67294),o=n(93478);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},20883:(e,t,n)=>{"use strict";n.d(t,{a:()=>i});var r=n(67294),o=n(63735),a=n(68265);function i(e){let{threshold:t}=e;const[n,i]=(0,r.useState)(!1),l=(0,r.useRef)(!1),{startScroll:s,cancelScroll:u}=(0,o.Ct)();return(0,o.RF)(((e,n)=>{let{scrollY:r}=e;const o=null==n?void 0:n.scrollY;o&&(l.current?l.current=!1:r>=o?(u(),i(!1)):r{e.location.hash&&(l.current=!0,i(!1))})),{shown:n,scrollToTop:()=>s(0)}}},22768:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(67294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},69322:(e,t,n)=>{"use strict";n.d(t,{N:()=>o});var r=n(67294);function o(e){void 0===e&&(e=!0),(0,r.useEffect)((()=>(document.body.style.overflow=e?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[e])}},99401:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(70524),o=n(96793);function a(){const{prism:e}=(0,o.L)(),{colorMode:t}=(0,r.I)(),n=e.theme,a=e.darkTheme||n;return"dark"===t?a:n}},78586:(e,t,n)=>{"use strict";n.d(t,{S:()=>s});var r=n(67294),o=n(96793);function a(e){const t=e.getBoundingClientRect();return t.top===t.bottom?a(e.parentNode):t}function i(e,t){let{anchorTopOffset:n}=t;const r=e.find((e=>a(e).top>=n));if(r){return function(e){return e.top>0&&e.bottom{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function s(e){const t=(0,r.useRef)(void 0),n=l();(0,r.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:r,linkActiveClassName:o,minHeadingLevel:a,maxHeadingLevel:l}=e;function s(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(r),s=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const r=[];for(let o=t;o<=n;o+=1)r.push(`h${o}.anchor`);return Array.from(document.querySelectorAll(r.join()))}({minHeadingLevel:a,maxHeadingLevel:l}),u=i(s,{anchorTopOffset:n.current}),c=e.find((e=>u&&u.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(o),e.classList.add(o),t.current=e):e.classList.remove(o)}(e,e===c)}))}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}}),[e,n])}},94980:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(67294),o=n(19901);const a="desktop",i="mobile",l="ssr";function s(){return o.default.canUseDOM?window.innerWidth>996?a:i:l}function u(){const[e,t]=(0,r.useState)((()=>s()));return(0,r.useEffect)((()=>{function e(){t(s())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),e}},93945:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Collapsible:()=>S,ErrorBoundaryError:()=>q.aG,ErrorBoundaryTryAgainButton:()=>q.Cw,ErrorCauseBoundary:()=>q.QW,HtmlClassNameProvider:()=>O.FG,NavbarSecondaryMenuFiller:()=>P.Zo,PageMetadata:()=>O.d,ReactContextError:()=>T.i6,SkipToContentFallbackId:()=>V.u,SkipToContentLink:()=>V.l,ThemeClassNames:()=>C.k,composeProviders:()=>T.Qc,createStorageSlot:()=>o.WA,duplicates:()=>z.l,filterDocCardListItems:()=>i.MN,isMultiColumnFooterLinks:()=>F.a,isRegexpStringMatch:()=>B,listStorageKeys:()=>o._f,listTagsByLetters:()=>L,prefersReducedMotion:()=>g.n,processAdmonitionProps:()=>H,translateTagsPageTitle:()=>A,uniq:()=>z.j,useCollapsible:()=>v,useColorMode:()=>D.I,useContextualSearchFilters:()=>a._q,useCurrentSidebarCategory:()=>i.jA,useDocsPreferredVersion:()=>U.J,useEvent:()=>T.zX,useIsomorphicLayoutEffect:()=>T.LI,usePluralForm:()=>p,usePrevious:()=>T.D9,usePrismTheme:()=>$.p,useSearchLinkCreator:()=>M,useSearchQueryString:()=>j,useStorageSlot:()=>o.Nk,useThemeConfig:()=>r.L,useWindowSize:()=>N.i});var r=n(96793),o=n(99200),a=n(39105),i=n(85919),l=n(67294),s=n(6832);const u=["zero","one","two","few","many","other"];function c(e){return u.filter((t=>e.includes(t)))}const d={locale:"en",pluralForms:c(["one","other"]),select:e=>1===e?"one":"other"};function f(){const{i18n:{currentLocale:e}}=(0,s.default)();return(0,l.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:c(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),d}}),[e])}function p(){const e=f();return{selectMessage:(t,n)=>function(e,t,n){const r=e.split("|");if(1===r.length)return r[0];r.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const o=n.select(t),a=n.pluralForms.indexOf(o);return r[Math.min(a,r.length-1)]}(n,t,e)}}var h=n(87462),m=n(19901),g=n(39657);function v(e){let{initialState:t}=e;const[n,r]=(0,l.useState)(t??!1),o=(0,l.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const b={display:"none",overflow:"hidden",height:"0px"},y={display:"block",overflow:"visible",height:"auto"};function w(e,t){const n=t?b:y;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function x(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,l.useRef)(!1);(0,l.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=(null==r?void 0:r.duration)??function(e){if((0,g.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${(null==r?void 0:r.easing)??"ease-in-out"}`,height:`${t}px`}}function i(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return w(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(i(),requestAnimationFrame((()=>{e.style.height=b.height,e.style.overflow=b.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{i()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function _(e){if(!m.default.canUseDOM)return e?b:y}function k(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:a,className:i,disableSSRStyle:s}=e;const u=(0,l.useRef)(null);return x({collapsibleRef:u,collapsed:n,animation:o}),l.createElement(t,{ref:u,style:s?void 0:_(n),onTransitionEnd:e=>{"height"===e.propertyName&&(w(u.current,n),null==a||a(n))},className:i},r)}function E(e){let{collapsed:t,...n}=e;const[r,o]=(0,l.useState)(!t),[a,i]=(0,l.useState)(t);return(0,l.useLayoutEffect)((()=>{t||o(!0)}),[t]),(0,l.useLayoutEffect)((()=>{r&&i(t)}),[r,t]),r?l.createElement(k,(0,h.Z)({},n,{collapsed:a})):null}function S(e){let{lazy:t,...n}=e;const r=t?E:k;return l.createElement(r,n)}var C=n(18015),T=n(93478),O=n(44873),D=n(70524),P=n(82306),N=n(94980),I=n(11614);const A=()=>(0,I.translate)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function L(e){const t={};return Object.values(e).forEach((e=>{const n=function(e){return e[0].toUpperCase()}(e.label);t[n]??=[],t[n].push(e)})),Object.entries(t).sort(((e,t)=>{let[n]=e,[r]=t;return n.localeCompare(r)})).map((e=>{let[t,n]=e;return{letter:t,tags:n.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}var R=n(34423);function j(){return(0,R.Nc)("q")}function M(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,s.default)(),{algolia:{searchPagePath:n}}=t;return(0,l.useCallback)((t=>`${e}${n}?q=${encodeURIComponent(t)}`),[e,n])}var F=n(68211);function B(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var z=n(20636),$=n(99401),U=n(4049);function H(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=l.Children.toArray(e),n=t.find((e=>{var t;return l.isValidElement(e)&&"mdxAdmonitionTitle"===(null==(t=e.props)?void 0:t.mdxType)})),r=l.createElement(l.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:null==n?void 0:n.props.children,rest:r}}(e.children),r=e.title??t;return{...e,...r&&{title:r},children:n}}var V=n(66470),q=n(48348)},18279:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AnnouncementBarProvider:()=>h.pl,BlogPostProvider:()=>d,Collapsible:()=>r.Collapsible,ColorModeProvider:()=>P.S,DEFAULT_SEARCH_TAG:()=>A.HX,DocProvider:()=>l.b,DocSidebarItemsExpandedStateProvider:()=>o.D,DocsPreferredVersionContextProvider:()=>p.L5,DocsSidebarProvider:()=>i.b,DocsVersionProvider:()=>a.q,ErrorBoundaryError:()=>r.ErrorBoundaryError,ErrorBoundaryTryAgainButton:()=>r.ErrorBoundaryTryAgainButton,ErrorCauseBoundary:()=>r.ErrorCauseBoundary,HtmlClassNameProvider:()=>r.HtmlClassNameProvider,NavbarProvider:()=>V,NavbarSecondaryMenuFiller:()=>r.NavbarSecondaryMenuFiller,PageMetadata:()=>r.PageMetadata,PluginHtmlClassNameProvider:()=>U.VC,ReactContextError:()=>r.ReactContextError,ScrollControllerProvider:()=>z.OC,SkipToContentFallbackId:()=>r.SkipToContentFallbackId,SkipToContentLink:()=>r.SkipToContentLink,ThemeClassNames:()=>r.ThemeClassNames,composeProviders:()=>r.composeProviders,containsLineNumbers:()=>I.nt,createStorageSlot:()=>r.createStorageSlot,docVersionSearchTag:()=>A.os,duplicates:()=>r.duplicates,filterDocCardListItems:()=>r.filterDocCardListItems,findFirstCategoryLink:()=>L.Wl,findSidebarCategory:()=>L.em,getPrismCssVariables:()=>I.QC,isActiveSidebarItem:()=>L._F,isDocsPluginEnabled:()=>L.cE,isMultiColumnFooterLinks:()=>r.isMultiColumnFooterLinks,isRegexpStringMatch:()=>r.isRegexpStringMatch,isSamePath:()=>$.Mg,keyboardFocusedClassName:()=>W.h,listStorageKeys:()=>r.listStorageKeys,listTagsByLetters:()=>r.listTagsByLetters,parseCodeBlockTitle:()=>I.bc,parseLanguage:()=>I.Vo,parseLines:()=>I.nZ,prefersReducedMotion:()=>r.prefersReducedMotion,processAdmonitionProps:()=>r.processAdmonitionProps,splitNavbarItems:()=>H,translateTagsPageTitle:()=>r.translateTagsPageTitle,uniq:()=>r.uniq,useAlternatePageUtils:()=>N.l,useAnnouncementBar:()=>h.nT,useBackToTopButton:()=>K.a,useBlogPost:()=>f,useCodeWordWrap:()=>X,useCollapsible:()=>r.useCollapsible,useColorMode:()=>r.useColorMode,useContextualSearchFilters:()=>r.useContextualSearchFilters,useCurrentSidebarCategory:()=>r.useCurrentSidebarCategory,useDoc:()=>l.k,useDocById:()=>L.xz,useDocRouteMetadata:()=>L.hI,useDocSidebarItemsExpandedState:()=>o.f,useDocsPreferredVersion:()=>r.useDocsPreferredVersion,useDocsPreferredVersionByPluginId:()=>p.Oh,useDocsSidebar:()=>i.V,useDocsVersion:()=>a.E,useDocsVersionCandidates:()=>L.lO,useEvent:()=>r.useEvent,useFilteredAndTreeifiedTOC:()=>B.b,useHideableNavbar:()=>G,useHistoryPopHandler:()=>g.Rb,useHistorySelector:()=>g.xL,useHomePageRoute:()=>$.Ns,useIsomorphicLayoutEffect:()=>r.useIsomorphicLayoutEffect,useKeyboardNavigation:()=>W.t,useLayoutDoc:()=>L.vY,useLayoutDocsSidebar:()=>L.oz,useLocalPathname:()=>F,useLocationChange:()=>j.S,useLockBodyScroll:()=>Z.N,useNavbarMobileSidebar:()=>E.e,useNavbarSecondaryMenu:()=>D,usePluralForm:()=>r.usePluralForm,usePrevious:()=>r.usePrevious,usePrismTheme:()=>r.usePrismTheme,useQueryStringValue:()=>g._X,useScrollController:()=>z.sG,useScrollPosition:()=>z.RF,useScrollPositionBlocker:()=>z.o5,useSearchLinkCreator:()=>r.useSearchLinkCreator,useSearchQueryString:()=>r.useSearchQueryString,useSidebarBreadcrumbs:()=>L.s1,useSmoothScrollTo:()=>z.Ct,useStorageSlot:()=>r.useStorageSlot,useTOCHighlight:()=>q.S,useTabs:()=>k,useThemeConfig:()=>r.useThemeConfig,useTitleFormatter:()=>R.p,useTreeifiedTOC:()=>B.a,useWindowSize:()=>r.useWindowSize});var r=n(93945),o=n(55132),a=n(6141),i=n(50003),l=n(2791),s=n(67294),u=n(93478);const c=s.createContext(null);function d(e){let{children:t,content:n,isBlogPostPage:r=!1}=e;const o=function(e){let{content:t,isBlogPostPage:n}=e;return(0,s.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:n})),[t,n])}({content:n,isBlogPostPage:r});return s.createElement(c.Provider,{value:o},t)}function f(){const e=(0,s.useContext)(c);if(null===e)throw new u.i6("BlogPostProvider");return e}var p=n(4049),h=n(69061),m=n(16550),g=n(34423),v=n(20636),b=n(99200);function y(e){return function(e){var t;return(null==(t=s.Children.map(e,(e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the component should be , and every should have a unique "value" prop.`)})))?void 0:t.filter(Boolean))??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:o}}=e;return{value:t,label:n,attributes:r,default:o}}))}function w(e){const{values:t,children:n}=e;return(0,s.useMemo)((()=>{const e=t??y(n);return function(e){const t=(0,v.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in . Every value needs to be unique.`)}(e),e}),[t,n])}function x(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function _(e){let{queryString:t=!1,groupId:n}=e;const r=(0,m.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,g._X)(o),(0,s.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function k(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=w(e),[a,i]=(0,s.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the component requires at least one children component");if(t){if(!x({value:t,tabValues:n}))throw new Error(`Docusaurus error: The has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[l,u]=_({queryString:n,groupId:r}),[c,d]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,b.Nk)(n);return[r,(0,s.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),f=(()=>{const e=l??c;return x({value:e,tabValues:o})?e:null})();(0,s.useLayoutEffect)((()=>{f&&i(f)}),[f]);return{selectedValue:a,selectValue:(0,s.useCallback)((e=>{if(!x({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),d(e)}),[u,d,o]),tabValues:o}}var E=n(35022),S=n(82306);const C=s.createContext(null);function T(e){let{children:t}=e;const n=function(){const e=(0,E.e)(),t=(0,S.HY)(),[n,r]=(0,s.useState)(!1),o=null!==t.component,a=(0,u.D9)(o);return(0,s.useEffect)((()=>{o&&!a&&r(!0)}),[o,a]),(0,s.useEffect)((()=>{o?e.shown||r(!0):r(!1)}),[e.shown,o]),(0,s.useMemo)((()=>[n,r]),[n])}();return s.createElement(C.Provider,{value:n},t)}function O(e){if(e.component){const t=e.component;return s.createElement(t,e.props)}}function D(){const e=(0,s.useContext)(C);if(!e)throw new u.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,r=(0,s.useCallback)((()=>n(!1)),[n]),o=(0,S.HY)();return(0,s.useMemo)((()=>({shown:t,hide:r,content:O(o)})),[r,o,t])}var P=n(70524),N=n(13156),I=n(96066),A=n(39105),L=n(85919),R=n(71427),j=n(68265),M=n(6832);function F(){const{siteConfig:{baseUrl:e}}=(0,M.default)(),{pathname:t}=(0,m.TH)();return t.replace(e,"/")}var B=n(94462),z=n(63735),$=n(18407),U=n(44873);function H(e){function t(e){return"left"===(e.position??"right")}return[e.filter(t),e.filter((e=>!t(e)))]}function V(e){let{children:t}=e;return s.createElement(S.n2,null,s.createElement(E.M,null,s.createElement(T,null,t)))}var q=n(78586);function G(e){const[t,n]=(0,s.useState)(e),r=(0,s.useRef)(!1),o=(0,s.useRef)(0),a=(0,s.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,z.RF)(((t,a)=>{let{scrollY:i}=t;if(!e)return;if(i=l?n(!1):i+u{if(!e)return;const o=t.location.hash;if(o?document.getElementById(o.substring(1)):void 0)return r.current=!0,void n(!1);n(!0)})),{navbarRef:a,isNavbarVisible:t}}var W=n(22768),Z=n(69322);const Q={attributes:!0,characterData:!0,childList:!0,subtree:!0};function Y(e,t){const[n,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var t;r(null==(t=e.current)?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,t,n){void 0===n&&(n=Q);const r=(0,u.zX)(t),o=(0,u.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}function X(){const[e,t]=(0,s.useState)(!1),[n,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),a=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return Y(o,i),(0,s.useEffect)((()=>{i()}),[e,i]),(0,s.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:a}}var K=n(20883)},18015:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},39657:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},96066:(e,t,n)=>{"use strict";n.d(t,{QC:()=>p,Vo:()=>d,bc:()=>u,nZ:()=>f,nt:()=>c});var r=n(87594),o=n.n(r);const a=/title=(?["'])(?.*?)\1/,i=/\{(?<range>[\d,-]+)\}/,l={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function s(e,t){const n=e.map((e=>{const{start:n,end:r}=l[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null==(t=e.block)?void 0:t.start,null==(n=e.block)?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function u(e){var t;return(null==e||null==(t=e.match(a))?void 0:t.groups.title)??""}function c(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}function d(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}function f(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:a,metastring:u}=t;if(u&&i.test(u)){const e=u.match(i).groups.range;if(0===a.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${u}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=a[0].className,r=o()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return s(["js","jsBlock"],t);case"jsx":case"tsx":return s(["js","jsBlock","jsx"],t);case"html":return s(["js","jsBlock","html"],t);case"python":case"py":case"bash":return s(["bash"],t);case"markdown":case"md":return s(["html","jsx","bash"],t);default:return s(Object.keys(l),t)}}(r,a),d=n.split("\n"),f=Object.fromEntries(a.map((e=>[e.className,{start:0,range:""}]))),p=Object.fromEntries(a.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),h=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),m=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let o=0;o<d.length;){const e=d[o].match(c);if(!e){o+=1;continue}const t=e.slice(1).find((e=>void 0!==e));p[t]?f[p[t]].range+=`${o},`:h[t]?f[h[t]].start=o:m[t]&&(f[m[t]].range+=`${f[m[t]].start}-${o-1},`),d.splice(o,1)}n=d.join("\n");const g={};return Object.entries(f).forEach((e=>{let[t,{range:n}]=e;o()(n).forEach((e=>{g[e]??=[],g[e].push(t)}))})),{lineClassNames:g,code:n}}function p(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[r,o]=e;const a=t[r];a&&"string"==typeof o&&(n[a]=o)})),n}},85919:(e,t,n)=>{"use strict";n.d(t,{MN:()=>S,Wl:()=>m,_F:()=>b,cE:()=>f,em:()=>h,hI:()=>E,jA:()=>g,lO:()=>x,oz:()=>_,s1:()=>w,vY:()=>k,xz:()=>p});var r=n(67294),o=n(16550),a=n(18790),i=n(4452),l=n(4049),s=n(6141),u=n(50003),c=n(20636),d=n(18407);const f=!!i.useAllDocsData;function p(e){const t=(0,s.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function h(e,t){for(const n of e)if("category"===n.type){if(t(n))return n;const e=h(n.items,t);if(e)return e}}function m(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=m(t);if(e)return e}}}function g(){const{pathname:e}=(0,o.TH)(),t=(0,u.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=y({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const v=(e,t)=>void 0!==e&&(0,d.Mg)(e,t);function b(e,t){return"link"===e.type?v(e.href,t):"category"===e.type&&(v(e.href,t)||((e,t)=>e.some((e=>b(e,t))))(e.items,t))}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function w(){var e;const t=(0,u.V)(),{pathname:n}=(0,o.TH)();return!1!==(null==(e=(0,i.useActivePlugin)())?void 0:e.pluginData.breadcrumbs)&&t?y({sidebarItems:t.items,pathname:n}):null}function x(e){const{activeVersion:t}=(0,i.useActiveDocContext)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.useLatestVersion)(e);return(0,r.useMemo)((()=>(0,c.j)([t,n,o].filter(Boolean))),[t,n,o])}function _(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function k(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,c.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,l=i.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.H)(i),sidebarName:s,sidebarItems:u}}function S(e){return e.filter((e=>"category"!==e.type||!!m(e)))}},48348:(e,t,n)=>{"use strict";n.d(t,{aG:()=>u,Cw:()=>s,QW:()=>c});var r=n(87462),o=n(67294),a=n(11614),i=n(79861);const l="errorBoundaryError_a6uf";function s(e){return o.createElement("button",(0,r.Z)({type:"button"},e),o.createElement(a.default,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return o.createElement("p",{className:l},n)}class c extends o.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}},68211:(e,t,n)=>{"use strict";function r(e){return"title"in e[0]}n.d(t,{a:()=>r})},71427:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var r=n(6832);function o(e){const{siteConfig:t}=(0,r.default)(),{title:n,titleDelimiter:o}=t;return null!=e&&e.trim().length?`${e.trim()} ${o} ${n}`:n}},34423:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>c,Rb:()=>l,_X:()=>u,xL:()=>s});var r=n(67294),o=n(16550),a=n(61688),i=n(93478);function l(e){!function(e){const t=(0,o.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){const t=(0,o.k6)();return(0,a.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function u(e){return s((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function c(e){const t=u(e)??"",n=function(){const e=(0,o.k6)();return(0,r.useCallback)(((t,n,r)=>{const o=new URLSearchParams(e.location.search);n?o.set(t,n):o.delete(t),(null!=r&&r.push?e.push:e.replace)({search:o.toString()})}),[e])}();return[t,(0,r.useCallback)(((t,r)=>{n(e,t,r)}),[n,e])]}},20636:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>r})},44873:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(67294),o=n(86010),a=n(32411),i=n(66041);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(51402),u=n(71427);function c(e){let{title:t,description:n,keywords:o,image:i,children:l}=e;const c=(0,u.p)(t),{withBaseUrl:d}=(0,s.useBaseUrlUtils)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,o.default)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(a.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,o.default)(a,i)},t)}},93478:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,LI:()=>o,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>a});var r=n(67294);const o=n(19901).default.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){var n,r,o;super(),this.name="ReactContextError",this.message=`Hook ${(null==(n=this.stack)||null==(r=n.split("\n")[1])||null==(o=r.match(/at (?:\w+\.)?(?<name>\w+)/))?void 0:o.groups.name)??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},18407:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(67294),o=n(21204),a=n(6832);function i(e,t){const n=e=>{var t;return null==(t=!e||e.endsWith("/")?e:`${e}/`)?void 0:t.toLowerCase()};return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.default)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},63735:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f,sG:()=>u});var r=n(67294),o=n(19901),a=n(5730),i=n(93478);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.default.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>null==n.current?void 0:n.current()))})),{blockElementScrollPositionUntilNextRender:o}}function p(){const e=(0,r.useRef)(null),t=(0,a.default)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>null==e.current?void 0:e.current()}}},39105:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(4452),o=n(6832),a=n(4049);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,o.default)(),t=(0,r.useAllDocsData)(),n=(0,r.useActivePluginAndVersion)(),s=(0,a.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=(null==n?void 0:n.activePlugin.pluginId)===e?n.activeVersion:void 0,o=s[e],a=t[e].versions.find((e=>e.isLast));return l(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:u}}},66470:(e,t,n)=>{"use strict";n.d(t,{l:()=>f,u:()=>s});var r=n(87462),o=n(67294),a=n(16550),i=n(11614),l=n(68265);const s="__docusaurus_skipToContent_fallback";function u(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function c(){const e=(0,o.useRef)(null),{action:t}=(0,a.k6)(),n=(0,o.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(s);t&&u(t)}),[]);return(0,l.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&u(e.current)})),{containerRef:e,onClick:n}}const d=(0,i.translate)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function f(e){const t=e.children??d,{containerRef:n,onClick:a}=c();return o.createElement("div",{ref:n,role:"region","aria-label":d},o.createElement("a",(0,r.Z)({},e,{href:`#${s}`,onClick:a}),t))}},99200:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>c,_f:()=>f});var r=n(67294),o=n(61688);const a="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function l(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(null==t?void 0:t.persistence);return null===n?u:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,o.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}function f(e){void 0===e&&(e=a);const t=l(e);if(!t)return[];const n=[];for(let r=0;r<t.length;r+=1){const e=t.key(r);null!==e&&n.push(e)}return n}},94462:(e,t,n)=>{"use strict";n.d(t,{a:()=>a,b:()=>l});var r=n(67294);function o(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const r=n.slice(2,e.level);e.parentIndex=Math.max(...r),n[e.level]=t}));const r=[];return t.forEach((e=>{const{parentIndex:n,...o}=e;n>=0?t[n].children.push(o):r.push(o)})),r}function a(e){return(0,r.useMemo)((()=>o(e)),[e])}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:r}=e;return t.flatMap((e=>{const t=i({toc:e.children,minHeadingLevel:n,maxHeadingLevel:r});return function(e){return e.level>=n&&e.level<=r}(e)?[{...e,children:t}]:t}))}function l(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,r.useMemo)((()=>i({toc:o(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}},13156:(e,t,n)=>{"use strict";n.d(t,{l:()=>a});var r=n(6832),o=n(16550);function a(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:a}}=(0,r.default)(),{pathname:i}=(0,o.TH)(),l=a===n?e:e.replace(`/${a}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:o}=e;return`${o?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},68265:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(67294),o=n(16550),a=n(93478);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},96793:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(6832);function o(){return(0,r.default)().siteConfig.themeConfig}},54357:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},6009:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},79861:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(54357);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(6009);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},78007:(e,t,n)=>{"use strict";n.r(t),n.d(t,{fetchIndexes:()=>l,legacyFetchIndexes:()=>s});var r=n(31336),o=n.n(r),a=n(96059);const i=new Map;function l(e,t){const n=`${e}${t}`;let r=i.get(n);return r||(r=s(e,t),i.set(n,r)),r}async function s(e,t){{const n=`${e}${a.searchIndexUrl.replace("{dir}",t?`-${t.replace(/\//g,"-")}`:"")}`;if(new URL(n,location.origin).origin!==location.origin)throw new Error("Unexpected version url");const r=await(await fetch(n)).json(),i=r.map(((e,t)=>{let{documents:n,index:r}=e;return{type:t,documents:n,index:o().Index.load(r)}})),l=r.reduce(((e,t)=>{for(const n of t.index.invertedIndex)/\p{Unified_Ideograph}/u.test(n[0][0])&&e.add(n[0]);return e}),new Set);return{wrappedIndexes:i,zhDictionary:Array.from(l)}}}},58263:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SearchSourceFactory:()=>s});var r=n(31336),o=n.n(r);var a=n(96059);function i(e){return l(e).concat(l(e.filter((e=>{const t=e[e.length-1];return!t.trailing&&t.maybeTyping})),!0))}function l(e,t){return e.map((e=>({tokens:e.map((e=>e.value)),term:e.map((e=>({value:e.value,presence:o().Query.presence.REQUIRED,wildcard:(t?e.trailing||e.maybeTyping:e.trailing)?o().Query.wildcard.TRAILING:o().Query.wildcard.NONE})))})))}function s(e,t,n){return function(r,l){const s=function(e,t){if(1===t.length&&["ja","jp","th"].includes(t[0]))return o()[t[0]].tokenizer(e).map((e=>e.toString()));let n=/[^-\s]+/g;return t.includes("zh")&&(n=/\w+|\p{Unified_Ideograph}+/gu),e.toLowerCase().match(n)||[]}(r,a.language);if(0===s.length)return void l([]);const u=function(e,t){const n=function(e,t){const n=[];return function e(r,o){if(0===r.length)return void n.push(o);const a=r[0];if(/\p{Unified_Ideograph}/u.test(a)){const n=function(e,t){const n=[];return function e(r,o){let a=0,i=!1;for(const l of t)if(r.substr(0,l.length)===l){const t={missed:o.missed,term:o.term.concat({value:l})};r.length>l.length?e(r.substr(l.length),t):n.push(t),i=!0}else for(let t=l.length-1;t>a;t-=1){const s=l.substr(0,t);if(r.substr(0,t)===s){a=t;const l={missed:o.missed,term:o.term.concat({value:s,trailing:!0})};r.length>t?e(r.substr(t),l):n.push(l),i=!0;break}}i||(r.length>0?e(r.substr(1),{missed:o.missed+1,term:o.term}):o.term.length>0&&n.push(o))}(e,{missed:0,term:[]}),n.sort(((e,t)=>{const n=e.missed>0?1:0,r=t.missed>0?1:0;return n!==r?n-r:e.term.length-t.term.length})).map((e=>e.term))}(a,t);for(const t of n){const n=o.concat(...t);e(r.slice(1),n)}}else{const t=o.concat({value:a});e(r.slice(1),t)}}(e,[]),n}(e,t);if(0===n.length)return[{tokens:e,term:e.map((e=>({value:e,presence:o().Query.presence.REQUIRED,wildcard:o().Query.wildcard.LEADING|o().Query.wildcard.TRAILING})))}];for(const o of n)o[o.length-1].maybeTyping=!0;const r=[];for(const i of a.language)if("en"===i)a.removeDefaultStopWordFilter||r.unshift(o().stopWordFilter);else{const e=o()[i];e.stopWordFilter&&r.unshift(e.stopWordFilter)}let l;if(r.length>0){const e=e=>r.reduce(((e,t)=>e.filter((e=>t(e.value)))),e);l=[];const t=[];for(const r of n){const n=e(r);l.push(n),n.length<r.length&&n.length>0&&t.push(n)}n.push(...t)}else l=n.slice();const s=[];for(const o of l)if(o.length>2)for(let e=o.length-1;e>=0;e-=1)s.push(o.slice(0,e).concat(o.slice(e+1)));return i(n).concat(i(s))}(s,t),c=[];e:for(const{term:t,tokens:o}of u)for(const{documents:r,index:a,type:i}of e)if(c.push(...a.query((e=>{for(const n of t)e.term(n.value,{wildcard:n.wildcard,presence:n.presence})})).slice(0,n).filter((e=>!c.some((t=>t.document.i.toString()===e.ref)))).slice(0,n-c.length).map((t=>{const n=r.find((e=>e.i.toString()===t.ref));return{document:n,type:i,page:0!==i&&e[0].documents.find((e=>e.i===n.p)),metadata:t.matchData.metadata,tokens:o,score:t.score}}))),c.length>=n)break e;!function(e){e.forEach(((e,t)=>{e.index=t})),e.sort(((t,n)=>{let r=t.type>0&&t.page?e.findIndex((e=>e.document===t.page)):t.index,o=n.type>0&&n.page?e.findIndex((e=>e.document===n.page)):n.index;return-1===r&&(r=t.index),-1===o&&(o=n.index),r===o?0===t.type?-1:0===n.type?1:t.index-n.index:r-o}))}(c),function(e){e.forEach(((t,n)=>{n>0&&t.page&&e.some((e=>e.document===t.page))&&(n<e.length-1&&e[n+1].page===t.page?t.isInterOfTree=!0:t.isLastOfTree=!0)}))}(c),l(c)}}},84647:(e,t,n)=>{"use strict";function r(e,t){const n=[];for(const r of Object.values(e))r[t]&&n.push(...r[t].position);return n.sort(((e,t)=>e[0]-t[0]||t[1]-e[1]))}n.r(t),n.d(t,{getStemmedPositions:()=>r})},32438:(e,t,n)=>{"use strict";function r(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function o(e,t,n){const a=[];for(const i of t){const n=e.toLowerCase().indexOf(i);if(n>=0){n>0&&a.push(o(e.substr(0,n),t)),a.push(`<mark>${r(e.substr(n,i.length))}</mark>`);const l=n+i.length;l<e.length&&a.push(o(e.substr(l),t));break}}return 0===a.length?n?`<mark>${r(e)}</mark>`:r(e):a.join("")}n.r(t),n.d(t,{highlightStemmed:()=>s,splitIntoChunks:()=>u});const a=/\w+|\p{Unified_Ideograph}/u;function i(e){const t=[];let n=0,r=e;for(;r.length>0;){const o=r.match(a);if(!o){t.push(r);break}o.index>0&&t.push(r.substring(0,o.index)),t.push(o[0]),n+=o.index+o[0].length,r=e.substring(n)}return t}var l=n(96059);function s(e,t,n,r){void 0===r&&(r=l.searchResultContextMaxLength);const{chunkIndex:o,chunks:a}=u(e,t,n),i=a.slice(0,o),s=a[o],c=[s.html],d=a.slice(o+1);let f=s.textLength,p=0,h=0,m=!1,g=!1;for(;f<r;)if((p<=h||0===d.length)&&i.length>0){const e=i.pop();f+e.textLength<=r?(c.unshift(e.html),p+=e.textLength,f+=e.textLength):(m=!0,i.length=0)}else{if(!(d.length>0))break;{const e=d.shift();f+e.textLength<=r?(c.push(e.html),h+=e.textLength,f+=e.textLength):(g=!0,d.length=0)}}return(m||i.length>0)&&c.unshift("\u2026"),(g||d.length>0)&&c.push("\u2026"),c.join("")}function u(e,t,n){const a=[];let l=0,s=0,u=-1;for(;l<t.length;){const[c,d]=t[l];if(l+=1,!(c<s)){if(c>s){const t=i(e.substring(s,c)).map((e=>({html:r(e),textLength:e.length})));for(const e of t)a.push(e)}-1===u&&(u=a.length),s=c+d,a.push({html:o(e.substring(c,s),n,!0),textLength:d})}}if(s<e.length){const t=i(e.substring(s)).map((e=>({html:r(e),textLength:e.length})));for(const e of t)a.push(e)}return{chunkIndex:u,chunks:a}}},96059:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Mark:()=>i,docsPluginIdForPreferredVersion:()=>h,explicitSearchResultPath:()=>c,hideSearchBarWithNoSearchContext:()=>v,indexDocs:()=>m,language:()=>r,removeDefaultStemmer:()=>a,removeDefaultStopWordFilter:()=>o,searchBarPosition:()=>p,searchBarShortcut:()=>d,searchBarShortcutHint:()=>f,searchContextByPaths:()=>g,searchIndexUrl:()=>l,searchResultContextMaxLength:()=>u,searchResultLimits:()=>s});n(31336);const r=["en"],o=!1,a=!1,i=null,l="search-index{dir}.json?_=602c86b5",s=8,u=50,c=!1,d=!0,f=!0,p="right",h=void 0,m=!0,g=null,v=!1},9463:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var r=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(t);try{n.insertRule(e,n.cssRules.length)}catch(r){0}}else t.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach((function(e){return e.parentNode&&e.parentNode.removeChild(e)})),this.tags=[],this.ctr=0},e}(),o=n(46411),a=n(26686),i=n(27563),l=n(20211);var s=n(92190),u=function(e,t,n){for(var r=0,a=0;r=a,a=(0,o.fj)(),38===r&&12===a&&(t[n]=1),!(0,o.r)(a);)(0,o.lp)();return(0,o.tP)(e,o.FK)},c=function(e,t){return(0,o.cE)(function(e,t){var n=-1,r=44;do{switch((0,o.r)(r)){case 0:38===r&&12===(0,o.fj)()&&(t[n]=1),e[n]+=u(o.FK-1,t,n);break;case 2:e[n]+=(0,o.iF)(r);break;case 4:if(44===r){e[++n]=58===(0,o.fj)()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=(0,a.Dp)(r)}}while(r=(0,o.lp)());return e}((0,o.un)(e),t))},d=new WeakMap,f=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||d.get(n))&&!r){d.set(e,!0);for(var o=[],a=c(t,o),i=n.props,l=0,s=0;l<a.length;l++)for(var u=0;u<i.length;u++,s++)e.props[s]=o[l]?a[l].replace(/&\f/g,i[u]):i[u]+" "+a[l]}}},p=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}};function h(e,t){switch((0,a.vp)(e,t)){case 5103:return i.G$+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return i.G$+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return i.G$+e+i.uj+e+i.MS+e+e;case 6828:case 4268:return i.G$+e+i.MS+e+e;case 6165:return i.G$+e+i.MS+"flex-"+e+e;case 5187:return i.G$+e+(0,a.gx)(e,/(\w+).+(:[^]+)/,i.G$+"box-$1$2"+i.MS+"flex-$1$2")+e;case 5443:return i.G$+e+i.MS+"flex-item-"+(0,a.gx)(e,/flex-|-self/,"")+e;case 4675:return i.G$+e+i.MS+"flex-line-pack"+(0,a.gx)(e,/align-content|flex-|-self/,"")+e;case 5548:return i.G$+e+i.MS+(0,a.gx)(e,"shrink","negative")+e;case 5292:return i.G$+e+i.MS+(0,a.gx)(e,"basis","preferred-size")+e;case 6060:return i.G$+"box-"+(0,a.gx)(e,"-grow","")+i.G$+e+i.MS+(0,a.gx)(e,"grow","positive")+e;case 4554:return i.G$+(0,a.gx)(e,/([^-])(transform)/g,"$1"+i.G$+"$2")+e;case 6187:return(0,a.gx)((0,a.gx)((0,a.gx)(e,/(zoom-|grab)/,i.G$+"$1"),/(image-set)/,i.G$+"$1"),e,"")+e;case 5495:case 3959:return(0,a.gx)(e,/(image-set\([^]*)/,i.G$+"$1$`$1");case 4968:return(0,a.gx)((0,a.gx)(e,/(.+:)(flex-)?(.*)/,i.G$+"box-pack:$3"+i.MS+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+i.G$+e+e;case 4095:case 3583:case 4068:case 2532:return(0,a.gx)(e,/(.+)-inline(.+)/,i.G$+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if((0,a.to)(e)-1-t>6)switch((0,a.uO)(e,t+1)){case 109:if(45!==(0,a.uO)(e,t+4))break;case 102:return(0,a.gx)(e,/(.+:)(.+)-([^]+)/,"$1"+i.G$+"$2-$3$1"+i.uj+(108==(0,a.uO)(e,t+3)?"$3":"$2-$3"))+e;case 115:return~(0,a.Cw)(e,"stretch")?h((0,a.gx)(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==(0,a.uO)(e,t+1))break;case 6444:switch((0,a.uO)(e,(0,a.to)(e)-3-(~(0,a.Cw)(e,"!important")&&10))){case 107:return(0,a.gx)(e,":",":"+i.G$)+e;case 101:return(0,a.gx)(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+i.G$+(45===(0,a.uO)(e,14)?"inline-":"")+"box$3$1"+i.G$+"$2$3$1"+i.MS+"$2box$3")+e}break;case 5936:switch((0,a.uO)(e,t+11)){case 114:return i.G$+e+i.MS+(0,a.gx)(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return i.G$+e+i.MS+(0,a.gx)(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return i.G$+e+i.MS+(0,a.gx)(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return i.G$+e+i.MS+e+e}return e}var m=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case i.h5:e.return=h(e.value,e.length);break;case i.lK:return(0,l.q)([(0,o.JG)(e,{value:(0,a.gx)(e.value,"@","@"+i.G$)})],r);case i.Fr:if(e.length)return(0,a.$e)(e.props,(function(t){switch((0,a.EQ)(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return(0,l.q)([(0,o.JG)(e,{props:[(0,a.gx)(t,/:(read-\w+)/,":"+i.uj+"$1")]})],r);case"::placeholder":return(0,l.q)([(0,o.JG)(e,{props:[(0,a.gx)(t,/:(plac\w+)/,":"+i.G$+"input-$1")]}),(0,o.JG)(e,{props:[(0,a.gx)(t,/:(plac\w+)/,":"+i.uj+"$1")]}),(0,o.JG)(e,{props:[(0,a.gx)(t,/:(plac\w+)/,i.MS+"input-$1")]})],r)}return""}))}}],g=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var o=e.stylisPlugins||m;var i,u,c={},d=[];i=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n<t.length;n++)c[t[n]]=!0;d.push(e)}));var h=[f,p];var g,v,b,y,w=[l.P,(y=function(e){g.insert(e)},function(e){e.root||(e=e.return)&&y(e)})],x=(v=h.concat(o,w),b=(0,a.Ei)(v),function(e,t,n,r){for(var o="",a=0;a<b;a++)o+=v[a](e,t,n,r)||"";return o});u=function(e,t,n,r){var o;g=n,o=e?e+"{"+t.styles+"}":t.styles,(0,l.q)((0,s.MY)(o),x),r&&(_.inserted[t.name]=!0)};var _={key:t,sheet:new r({key:t,container:i,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:c,registered:{},insert:u};return _.sheet.hydrate(d),_}},45042:(e,t,n)=>{"use strict";function r(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}n.d(t,{Z:()=>r})},80123:(e,t,n)=>{"use strict";n.d(t,{C:()=>m,E:()=>C,T:()=>b,_:()=>g,a:()=>x,b:()=>_,c:()=>E,h:()=>p,i:()=>f,u:()=>y,w:()=>v});var r=n(67294),o=n(9463);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}var i=function(e){var t=new WeakMap;return function(n){if(t.has(n))return t.get(n);var r=e(n);return t.set(n,r),r}},l=n(8679),s=n.n(l),u=n(70444),c=n(48137),d=n(27278),f=!0,p={}.hasOwnProperty,h=r.createContext("undefined"!=typeof HTMLElement?(0,o.Z)({key:"css"}):null);var m=h.Provider,g=function(){return(0,r.useContext)(h)},v=function(e){return(0,r.forwardRef)((function(t,n){var o=(0,r.useContext)(h);return e(t,o,n)}))};f||(v=function(e){return function(t){var n=(0,r.useContext)(h);return null===n?(n=(0,o.Z)({key:"css"}),r.createElement(h.Provider,{value:n},e(t,n))):e(t,n)}});var b=r.createContext({});var y=function(){return r.useContext(b)},w=i((function(e){return i((function(t){return function(e,t){return"function"==typeof t?t(e):a({},e,t)}(e,t)}))})),x=function(e){var t=r.useContext(b);return e.theme!==t&&(t=w(t)(e.theme)),r.createElement(b.Provider,{value:t},e.children)};function _(e){var t,n,o=e.displayName||e.name||"Component",i=function(t,n){var o=r.useContext(b);return r.createElement(e,a({theme:o,ref:n},t))},l=r.forwardRef(i);return l.displayName="WithTheme("+o+")",t=l,n=e,s()(t,n)}var k="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",E=function(e,t){var n={};for(var r in t)p.call(t,r)&&(n[r]=t[r]);return n[k]=e,n},S=function(e){var t=e.cache,n=e.serialized,r=e.isStringTag;return(0,u.hC)(t,n,r),(0,d.L)((function(){return(0,u.My)(t,n,r)})),null};var C=v((function(e,t,n){var o=e.css;"string"==typeof o&&void 0!==t.registered[o]&&(o=t.registered[o]);var a=e[k],i=[o],l="";"string"==typeof e.className?l=(0,u.fp)(t.registered,i,e.className):null!=e.className&&(l=e.className+" ");var s=(0,c.O)(i,void 0,r.useContext(b));l+=t.key+"-"+s.name;var d={};for(var f in e)p.call(e,f)&&"css"!==f&&f!==k&&(d[f]=e[f]);return d.ref=n,d.className=l,r.createElement(r.Fragment,null,r.createElement(S,{cache:t,serialized:s,isStringTag:"string"==typeof a}),r.createElement(a,d))}))},70917:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CacheProvider:()=>r.C,ClassNames:()=>m,Global:()=>u,ThemeContext:()=>r.T,ThemeProvider:()=>r.a,__unsafe_useEmotionCache:()=>r._,createElement:()=>s,css:()=>c,jsx:()=>s,keyframes:()=>d,useTheme:()=>r.u,withEmotionCache:()=>r.w,withTheme:()=>r.b});var r=n(80123),o=n(67294),a=n(70444),i=n(27278),l=n(48137),s=(n(9463),n(8679),function(e,t){var n=arguments;if(null==t||!r.h.call(t,"css"))return o.createElement.apply(void 0,n);var a=n.length,i=new Array(a);i[0]=r.E,i[1]=(0,r.c)(e,t);for(var l=2;l<a;l++)i[l]=n[l];return o.createElement.apply(null,i)}),u=(0,r.w)((function(e,t){var n=e.styles,s=(0,l.O)([n],void 0,o.useContext(r.T));if(!r.i){for(var u,c=s.name,d=s.styles,f=s.next;void 0!==f;)c+=" "+f.name,d+=f.styles,f=f.next;var p=!0===t.compat,h=t.insert("",{name:c,styles:d},t.sheet,p);return p?null:o.createElement("style",((u={})["data-emotion"]=t.key+"-global "+c,u.dangerouslySetInnerHTML={__html:h},u.nonce=t.sheet.nonce,u))}var m=o.useRef();return(0,i.j)((function(){var e=t.key+"-global",n=new t.sheet.constructor({key:e,nonce:t.sheet.nonce,container:t.sheet.container,speedy:t.sheet.isSpeedy}),r=!1,o=document.querySelector('style[data-emotion="'+e+" "+s.name+'"]');return t.sheet.tags.length&&(n.before=t.sheet.tags[0]),null!==o&&(r=!0,o.setAttribute("data-emotion",e),n.hydrate([o])),m.current=[n,r],function(){n.flush()}}),[t]),(0,i.j)((function(){var e=m.current,n=e[0];if(e[1])e[1]=!1;else{if(void 0!==s.next&&(0,a.My)(t,s.next,!0),n.tags.length){var r=n.tags[n.tags.length-1].nextElementSibling;n.before=r,n.flush()}t.insert("",s,n,!1)}}),[t,s.name]),null}));function c(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,l.O)(t)}var d=function(){var e=c.apply(void 0,arguments),t="animation-"+e.name;return{name:t,styles:"@keyframes "+t+"{"+e.styles+"}",anim:1,toString:function(){return"_EMO_"+this.name+"_"+this.styles+"_EMO_"}}},f=function e(t){for(var n=t.length,r=0,o="";r<n;r++){var a=t[r];if(null!=a){var i=void 0;switch(typeof a){case"boolean":break;case"object":if(Array.isArray(a))i=e(a);else for(var l in i="",a)a[l]&&l&&(i&&(i+=" "),i+=l);break;default:i=a}i&&(o&&(o+=" "),o+=i)}}return o};function p(e,t,n){var r=[],o=(0,a.fp)(e,r,n);return r.length<2?n:o+t(r)}var h=function(e){var t=e.cache,n=e.serializedArr;return(0,i.L)((function(){for(var e=0;e<n.length;e++)(0,a.My)(t,n[e],!1)})),null},m=(0,r.w)((function(e,t){var n=[],i=function(){for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];var i=(0,l.O)(r,t.registered);return n.push(i),(0,a.hC)(t,i,!1),t.key+"-"+i.name},s={css:i,cx:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return p(t.registered,i,f(n))},theme:o.useContext(r.T)},u=e.children(s);return!0,o.createElement(o.Fragment,null,o.createElement(h,{cache:t,serializedArr:n}),u)}))},48137:(e,t,n)=>{"use strict";n.d(t,{O:()=>h});var r={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},o=n(45042),a=/[A-Z]|^ms/g,i=/_EMO_([^_]+?)_([^]*?)_EMO_/g,l=function(e){return 45===e.charCodeAt(1)},s=function(e){return null!=e&&"boolean"!=typeof e},u=(0,o.Z)((function(e){return l(e)?e:e.replace(a,"-$&").toLowerCase()})),c=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(i,(function(e,t,n){return f={name:t,styles:n,next:f},t}))}return 1===r[e]||l(e)||"number"!=typeof t||0===t?t:t+"px"};function d(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return f={name:n.name,styles:n.styles,next:f},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)f={name:r.name,styles:r.styles,next:f},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o<n.length;o++)r+=d(e,t,n[o])+";";else for(var a in n){var i=n[a];if("object"!=typeof i)null!=t&&void 0!==t[i]?r+=a+"{"+t[i]+"}":s(i)&&(r+=u(a)+":"+c(a,i)+";");else if(!Array.isArray(i)||"string"!=typeof i[0]||null!=t&&void 0!==t[i[0]]){var l=d(e,t,i);switch(a){case"animation":case"animationName":r+=u(a)+":"+l+";";break;default:r+=a+"{"+l+"}"}}else for(var f=0;f<i.length;f++)s(i[f])&&(r+=u(a)+":"+c(a,i[f])+";")}return r}(e,t,n);case"function":if(void 0!==e){var o=f,a=n(e);return f=o,d(e,t,a)}}if(null==t)return n;var i=t[n];return void 0!==i?i:n}var f,p=/label:\s*([^\s;\n{]+)\s*(;|$)/g;var h=function(e,t,n){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var r=!0,o="";f=void 0;var a=e[0];null==a||void 0===a.raw?(r=!1,o+=d(n,t,a)):o+=a[0];for(var i=1;i<e.length;i++)o+=d(n,t,e[i]),r&&(o+=a[i]);p.lastIndex=0;for(var l,s="";null!==(l=p.exec(o));)s+="-"+l[1];var u=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(o)+s;return{name:u,styles:o,next:f}}},27278:(e,t,n)=>{"use strict";var r;n.d(t,{L:()=>i,j:()=>l});var o=n(67294),a=!!(r||(r=n.t(o,2))).useInsertionEffect&&(r||(r=n.t(o,2))).useInsertionEffect,i=a||function(e){return e()},l=a||o.useLayoutEffect},70444:(e,t,n)=>{"use strict";n.d(t,{My:()=>a,fp:()=>r,hC:()=>o});function r(e,t,n){var r="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]+";"):r+=n+" "})),r}var o=function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)},a=function(e,t,n){o(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var a=t;do{e.insert(t===a?"."+r:"",a,e.sheet,!0),a=a.next}while(void 0!==a)}}},19044:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:18,height:18,viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{stroke:"#fff",d:"M9 17.5V.5M.5 9h17"})))}},80255:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:20,height:20,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M11.764 5.294 7.06 10l4.705 4.706",stroke:"#000",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})))}},67146:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M11.667 6.417h-7.1l3.261-3.261L7 2.333 2.333 7 7 11.667l.823-.823-3.255-3.26h7.099V6.417Z",fill:"#fff"})))}},68425:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r,o,a=n(67294);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}const l=e=>{let{title:t,titleId:n,...l}=e;return a.createElement("svg",i({width:20,height:20,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},l),t?a.createElement("title",{id:n},t):null,r||(r=a.createElement("rect",{width:20,height:20,rx:10,fill:"#000"})),o||(o=a.createElement("path",{d:"m9 8 2 2-2 2",stroke:"#fff",strokeWidth:1.2,strokeLinecap:"round",strokeLinejoin:"round"})))}},88121:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"m7 2.333-.823.823 3.255 3.26H2.333v1.167h7.1l-3.256 3.261.823.823L11.667 7 7 2.333Z",fill:"#fff"})))}},62082:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r,o,a=n(67294);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}const l=e=>{let{title:t,titleId:n,...l}=e;return a.createElement("svg",i({width:40,height:40,viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},l),t?a.createElement("title",{id:n},t):null,r||(r=a.createElement("path",{d:"M20 20a3.21 3.21 0 0 1-2.354-.98 3.21 3.21 0 0 1-.98-2.353c0-.917.327-1.702.98-2.355A3.21 3.21 0 0 1 20 13.333a3.21 3.21 0 0 1 2.354.98 3.21 3.21 0 0 1 .98 2.354 3.21 3.21 0 0 1-.98 2.354A3.21 3.21 0 0 1 20 20Zm-6.666 6.667v-2.334c0-.472.121-.906.364-1.302.244-.396.567-.698.969-.906.86-.43 1.736-.754 2.625-.97A11.418 11.418 0 0 1 20 20.834c.917 0 1.82.108 2.709.324.888.215 1.763.538 2.625.968.402.208.725.51.969.907.243.396.364.83.364 1.301v2.334H13.333ZM15 25h10v-.667a.817.817 0 0 0-.417-.708 10.844 10.844 0 0 0-2.27-.843 9.652 9.652 0 0 0-4.625 0c-.764.187-1.521.468-2.271.843a.815.815 0 0 0-.303.292.776.776 0 0 0-.114.416V25Zm5-6.667c.459 0 .851-.163 1.178-.49.326-.326.49-.719.489-1.176 0-.459-.164-.851-.49-1.178A1.602 1.602 0 0 0 20 15c-.458 0-.85.164-1.177.49-.327.328-.49.72-.49 1.178 0 .458.164.85.49 1.177.327.327.72.49 1.177.49Z",fill:"#fff"})),o||(o=a.createElement("rect",{x:.5,y:.5,width:39,height:39,rx:19.5,stroke:"#fff"})))}},80469:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"m12.667 4.273-.94-.94L8.001 7.06 4.274 3.333l-.94.94L7.061 8l-3.727 3.727.94.94L8.001 8.94l3.726 3.727.94-.94L8.941 8l3.726-3.727Z",fill:"#fff",opacity:.6})))}},94793:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M2.917 12.833c-.321 0-.596-.114-.825-.343a1.121 1.121 0 0 1-.342-.823V3.5h1.167v8.167h6.416v1.166H2.917ZM5.25 10.5c-.32 0-.596-.114-.824-.343a1.121 1.121 0 0 1-.343-.824v-7c0-.32.115-.595.343-.824.229-.229.504-.343.824-.342h5.25c.32 0 .596.114.824.343.229.228.343.503.343.823v7c0 .321-.115.596-.343.825a1.121 1.121 0 0 1-.824.342H5.25Zm0-1.167h5.25v-7H5.25v7Z",fill:"#fff"})))}},14607:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:40,height:40,viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M14.2 23.077c-1.733 0-3.147-1.575-3.147-3.504 0-1.926 1.379-3.5 3.149-3.5 1.75 0 3.183 1.574 3.148 3.5 0 1.929-1.398 3.504-3.15 3.504Zm11.623 0c-1.733 0-3.15-1.575-3.15-3.504 0-1.926 1.382-3.5 3.15-3.5 1.75 0 3.184 1.574 3.15 3.5 0 1.929-1.381 3.504-3.15 3.504ZM16.875 7.205l-.513-.938-1.057.175a27.255 27.255 0 0 0-6.93 2.133l-.38.177-.237.348C3.403 15.523 2.208 21.847 2.8 28.06l.065.677.55.4a28.181 28.181 0 0 0 8.463 4.238l1.317.403 1.855-4.528c3.183.787 6.717.788 9.898 0l1.845 4.53 1.317-.405a28.033 28.033 0 0 0 8.467-4.24l.545-.397.066-.67c.727-7.2-1.161-13.473-4.93-18.975l-.236-.345-.38-.173a27.625 27.625 0 0 0-6.924-2.133l-1.03-.172-.523.902c-.155.27-.301.544-.438.823a26.463 26.463 0 0 0-5.439 0c-.133-.266-.27-.53-.413-.79Zm-5.683 20.478c.328.19.675.377 1.016.547l-.748 1.827a25.041 25.041 0 0 1-5.713-2.964c-.375-5.231.688-10.508 4.273-15.95a24.256 24.256 0 0 1 4.707-1.521c.1.208.193.411.27.593l.455 1.072 1.153-.169a23.508 23.508 0 0 1 6.817 0l1.15.167.453-1.07c.078-.187.17-.39.267-.593a24.71 24.71 0 0 1 4.713 1.525c3.125 4.7 4.702 9.943 4.243 15.945a24.841 24.841 0 0 1-5.716 2.963l-.742-1.823c.343-.172.69-.359 1.022-.549.816-.47 1.695-1.056 2.255-1.616l-2.134-2.134c-.271.274-.871.7-1.628 1.137-.74.427-1.475.772-1.945.927-3.338 1.105-7.38 1.105-10.72 0-.468-.155-1.203-.5-1.943-.927-.757-.435-1.357-.863-1.63-1.137l-2.134 2.134c.562.56 1.442 1.146 2.259 1.616Z",fill:"#fff"})))}},50437:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M13.258 3.553a11.321 11.321 0 0 0-2.846-.886.06.06 0 0 0-.047.02c-.12.22-.26.506-.353.726-1.06-.16-2.14-.16-3.2 0a6.682 6.682 0 0 0-.36-.726c-.007-.014-.027-.02-.047-.02-1 .173-1.953.473-2.846.886-.007 0-.014.007-.02.014C1.725 6.28 1.225 8.92 1.472 11.533c0 .014.007.027.02.034a11.58 11.58 0 0 0 3.493 1.766c.02.007.04 0 .047-.013.267-.367.507-.754.713-1.16.014-.027 0-.053-.026-.06a8.21 8.21 0 0 1-1.094-.52c-.026-.014-.026-.053-.006-.073.073-.054.146-.114.22-.167a.04.04 0 0 1 .046-.007c2.294 1.047 4.767 1.047 7.034 0a.04.04 0 0 1 .046.007c.074.06.147.113.22.173.027.02.027.06-.007.073a7.133 7.133 0 0 1-1.093.52c-.027.007-.033.04-.027.06.214.407.454.794.714 1.16.02.007.04.014.06.007 1.146-.353 2.3-.886 3.5-1.767a.037.037 0 0 0 .02-.033c.293-3.02-.487-5.64-2.067-7.966-.007-.007-.013-.014-.027-.014ZM6.092 9.94c-.687 0-1.26-.633-1.26-1.413s.56-1.414 1.26-1.414c.707 0 1.267.64 1.26 1.414 0 .78-.56 1.413-1.26 1.413Zm4.647 0c-.687 0-1.26-.633-1.26-1.413s.56-1.414 1.26-1.414c.706 0 1.266.64 1.26 1.414 0 .78-.554 1.413-1.26 1.413Z",fill:"#fff"})))}},23179:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),void 0===t?o.createElement("title",{id:n},"Discourse"):t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M12.103 0C18.666 0 24 5.485 24 11.997c0 6.51-5.33 11.99-11.9 11.99L0 24V11.79C0 5.28 5.532 0 12.103 0zm.116 4.563a7.395 7.395 0 0 0-6.337 3.57 7.247 7.247 0 0 0-.148 7.22L4.4 19.61l4.794-1.074a7.424 7.424 0 0 0 8.136-1.39 7.256 7.256 0 0 0 1.737-7.997 7.375 7.375 0 0 0-6.84-4.585h-.008z"})))}},7744:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M9.334 1.333H4c-.733 0-1.326.6-1.326 1.334l-.007 10.666c0 .734.593 1.334 1.327 1.334H12c.734 0 1.334-.6 1.334-1.334v-8l-4-4ZM4 13.333V2.667h4.667V6H12v7.333H4Z",fill:"#fff"})))}},19818:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:20,height:20,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("circle",{cx:10,cy:10,r:8.333,fill:"#fff"})))}},38981:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M7 9.333 4.083 6.417 4.9 5.57l1.517 1.517V2.333h1.166v4.755L9.1 5.57l.817.846L7 9.333Zm-3.5 2.334c-.32 0-.596-.115-.824-.343a1.121 1.121 0 0 1-.343-.824V8.75H3.5v1.75h7V8.75h1.167v1.75c0 .32-.115.596-.343.824a1.121 1.121 0 0 1-.824.343h-7Z",fill:"#fff"})))}},28487:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:12,height:12,viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"m2 4 4 4 4-4",stroke:"#909091",strokeWidth:1.4,strokeLinecap:"round",strokeLinejoin:"round"})))}},94177:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m12.707 2.393.9.9c.526.52.526 1.367 0 1.887L4.787 14H2v-2.787l6.933-6.94 1.887-1.88c.52-.52 1.367-.52 1.887 0ZM3.333 12.667l.94.04 6.547-6.554-.94-.94-6.547 6.547v.907Z",fill:"#fff"})))}},96867:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M14.667 2.667H1.34l-.007 10.667h13.334V2.667ZM13.333 12H2.667V5.334L8 8.667l5.333-3.333V12ZM8 7.334 2.667 4h10.666L8 7.334Z",fill:"#fff"})))}},58611:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.192 4H3.428V2.857h9.715v9.715H12V4.808l-8.167 8.168-.809-.808L11.192 4Z",fill:"#fff"})))}},13042:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:20,height:20,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M1.804 16.292a.836.836 0 0 0 .696.374H15a.832.832 0 0 0 .766-.505l2.5-5.833a.833.833 0 0 0-.766-1.162h-.833v-2.5C16.667 5.747 15.919 5 15 5H9.454l-2.13-1.667h-3.99c-.92 0-1.667.748-1.667 1.667v10.833h.006a.834.834 0 0 0 .131.46ZM15 6.666v2.5H5a.832.832 0 0 0-.766.505l-.9 2.103V6.666H15Z",fill:"#000"})))}},96367:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M4.667 11.083v-1.75h-1.75V8.166h2.916v2.917H4.667Zm3.5 0V8.166h2.916v1.167h-1.75v1.75H8.167Zm-5.25-5.25V4.666h1.75v-1.75h1.166v2.917H2.917Zm5.25 0V2.916h1.166v1.75h1.75v1.167H8.167Z",fill:"#fff"})))}},6907:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M1.75 2.917V5.25h1.167V2.917H5.25V1.75H2.917A1.17 1.17 0 0 0 1.75 2.917ZM2.917 8.75H1.75v2.333a1.17 1.17 0 0 0 1.167 1.167H5.25v-1.167H2.917V8.75Zm8.166 2.333H8.75v1.167h2.333a1.17 1.17 0 0 0 1.167-1.167V8.75h-1.167v2.333Zm0-9.333H8.75v1.167h2.333V5.25h1.167V2.917a1.17 1.17 0 0 0-1.167-1.167Z",fill:"#fff"})))}},59570:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:40,height:40,viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M20 4.4a16 16 0 0 0-16 16c0 7.072 4.592 13.072 10.944 15.2.8.128 1.056-.368 1.056-.8v-2.704c-4.432.96-5.376-2.144-5.376-2.144-.736-1.856-1.776-2.352-1.776-2.352-1.456-.992.112-.96.112-.96 1.6.112 2.448 1.648 2.448 1.648C12.8 30.72 15.152 30 16.064 29.616c.144-1.04.56-1.744 1.008-2.144-3.552-.4-7.28-1.776-7.28-7.872 0-1.776.608-3.2 1.648-4.336-.16-.4-.72-2.064.16-4.224 0 0 1.344-.432 4.4 1.632a15.075 15.075 0 0 1 4-.528c1.36 0 2.736.176 4 .528 3.056-2.064 4.4-1.632 4.4-1.632.88 2.16.32 3.824.16 4.224 1.04 1.136 1.648 2.56 1.648 4.336 0 6.112-3.744 7.456-7.312 7.856.576.496 1.104 1.472 1.104 2.96V34.8c0 .432.256.944 1.072.8C31.424 33.456 36 27.472 36 20.4a16.001 16.001 0 0 0-16-16Z",fill:"#fff"})))}},26890:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r,o,a=n(67294);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}const l=e=>{let{title:t,titleId:n,...l}=e;return a.createElement("svg",i({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",role:"img","aria-labelledby":n},l),t?a.createElement("title",{id:n},t):null,r||(r=a.createElement("path",{d:"M256 411.12 0 202.667 256 0zM256 411.12l256-208.453L256 0z"})),o||(o=a.createElement("circle",{cx:256,cy:362.667,r:149.333})))}},42924:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"m4 13.333.667-2.666H2.333l.334-1.334H5l.667-2.666H3l.333-1.334H6l.667-2.666H8l-.667 2.666H10l.667-2.666H12l-.667 2.666h2.334l-.334 1.334H11l-.667 2.666H13l-.333 1.334H10l-.667 2.666H8l.667-2.666H6l-.667 2.666H4Zm2.333-4H9l.667-2.666H7l-.667 2.666Z",fill:"#fff"})))}},74297:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M8 14c-1.533 0-2.87-.508-4.009-1.525-1.139-1.017-1.791-2.287-1.958-3.808H3.4c.156 1.155.67 2.11 1.542 2.866.872.756 1.892 1.134 3.058 1.134 1.3 0 2.403-.453 3.309-1.359.905-.906 1.358-2.008 1.358-3.308 0-1.3-.453-2.403-1.359-3.309C10.402 3.786 9.3 3.333 8 3.333a4.5 4.5 0 0 0-2.15.534 4.954 4.954 0 0 0-1.683 1.466H6v1.334H2v-4h1.333v1.566A5.954 5.954 0 0 1 8 2c.833 0 1.614.158 2.342.475a6.107 6.107 0 0 1 1.9 1.283c.539.54.966 1.172 1.283 1.9C13.842 6.386 14 7.166 14 8c0 .833-.158 1.614-.475 2.342a6.108 6.108 0 0 1-1.283 1.9 6.11 6.11 0 0 1-1.9 1.283A5.793 5.793 0 0 1 8 14Zm1.867-3.2L7.333 8.267v-3.6h1.334v3.066L10.8 9.867l-.933.933Z",fill:"#fff"})))}},33336:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M12.667 2A1.333 1.333 0 0 1 14 3.333v9.334A1.334 1.334 0 0 1 12.667 14H3.333A1.334 1.334 0 0 1 2 12.667V3.333A1.333 1.333 0 0 1 3.333 2h9.334Zm-.334 10.333V8.8a2.173 2.173 0 0 0-2.173-2.173c-.567 0-1.227.346-1.547.866v-.74h-1.86v5.58h1.86V9.047a.93.93 0 1 1 1.86 0v3.286h1.86ZM4.587 5.707a1.12 1.12 0 0 0 1.12-1.12 1.124 1.124 0 1 0-1.12 1.12Zm.926 6.626v-5.58H3.667v5.58h1.846Z",fill:"#fff"})))}},65379:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r,o,a=n(67294);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}const l=e=>{let{title:t,titleId:n,...l}=e;return a.createElement("svg",i({width:26,height:26,viewBox:"0 0 26 26",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},l),t?a.createElement("title",{id:n},t):null,r||(r=a.createElement("rect",{width:26,height:26,rx:13,fill:"#fff"})),o||(o=a.createElement("path",{d:"M10.334 9.547v6.906c0 .527.58.847 1.026.56l5.427-3.453a.667.667 0 0 0 0-1.127L11.36 8.987a.665.665 0 0 0-1.026.56Z",fill:"#000"})))}},78951:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:18,height:18,viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{stroke:"#fff",d:"M.5 9h17"})))}},84629:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r,o,a=n(67294);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}const l=e=>{let{title:t,titleId:n,...l}=e;return a.createElement("svg",i({width:18,height:18,viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},l),t?a.createElement("title",{id:n},t):null,r||(r=a.createElement("g",{clipPath:"url(#a)"},a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.79 6.75a4.979 4.979 0 1 1 9.957 0 4.979 4.979 0 0 1-9.957 0ZM6.768.572a6.179 6.179 0 1 0 3.817 11.037l5.146 5.146a1 1 0 0 0 1.414-1.414l-5.207-5.207A6.179 6.179 0 0 0 6.768.571Z",fill:"#000"}))),o||(o=a.createElement("defs",null,a.createElement("clipPath",{id:"a"},a.createElement("path",{fill:"#fff",d:"M0 0h18v18H0z"})))))}},23816:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:179,height:178,viewBox:"0 0 179 178",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M104.512 88.178c-10.667.615-17.352-1.87-28.02-1.254a44.732 44.732 0 0 0-7.853 1.146c1.575-19.73 15.538-36.988 34.525-38.085 11.652-.672 23.298 6.522 23.93 18.2.621 11.479-8.131 19.158-22.58 19.992l-.002.001Zm-28.645 40.355c-11.162.631-22.317-6.104-22.923-17.033-.596-10.742 7.79-17.93 21.633-18.71 10.218-.575 16.623 1.751 26.84 1.174a43.776 43.776 0 0 0 7.522-1.073c-1.506 18.464-14.881 34.617-33.072 35.642ZM89.5.001C40.346 0 .5 39.846.5 89c0 49.154 39.846 89 89 89s89-39.847 89-89-39.846-89-89-89",fill:"#000"})))}},35245:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:40,height:40,viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.906 17.987c9.395-4.094 15.66-6.792 18.795-8.096 8.95-3.723 10.81-4.37 12.022-4.39.267-.005.863.06 1.249.374.326.264.416.622.459.873.043.25.096.822.053 1.268-.485 5.097-2.583 17.463-3.65 23.171-.453 2.415-1.342 3.225-2.203 3.304-1.872.172-3.293-1.237-5.106-2.425-2.836-1.86-4.439-3.017-7.192-4.831-3.182-2.097-1.12-3.25.694-5.133.475-.493 8.72-7.993 8.88-8.674.02-.085.039-.402-.15-.57-.188-.167-.466-.11-.667-.064-.284.064-4.816 3.06-13.594 8.985-1.286.883-2.451 1.314-3.495 1.29-1.15-.024-3.364-.65-5.01-1.185-2.018-.656-3.622-1.003-3.483-2.117.073-.58.872-1.174 2.398-1.78Z",fill:"#fff"})))}},68902:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:24,height:24,xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinejoin:"round",strokeMiterlimit:1.41421},role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M12 0C5.374 0 0 5.372 0 12c0 6.627 5.374 12 12 12 6.627 0 12-5.373 12-12 0-6.628-5.373-12-12-12Zm3.224 17.871c.188.133.43.166.646.085a.678.678 0 0 0 .422-.491c.507-2.382 1.737-8.412 2.198-10.578a.457.457 0 0 0-.151-.443.47.47 0 0 0-.465-.082c-2.446.906-9.979 3.732-13.058 4.871a.484.484 0 0 0-.316.467.483.483 0 0 0 .346.445c1.381.413 3.193.988 3.193.988s.847 2.558 1.288 3.858a.512.512 0 0 0 .352.336.505.505 0 0 0 .474-.121l1.805-1.704s2.084 1.527 3.266 2.369Zm-6.423-5.062.98 3.231.218-2.046 5.941-5.358a.162.162 0 0 0 .019-.22.165.165 0 0 0-.219-.037l-6.939 4.43Z"})))}},86089:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:17,height:14,viewBox:"0 0 17 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M16.557 1.597a6.802 6.802 0 0 1-1.95.534A3.406 3.406 0 0 0 16.1.251a6.782 6.782 0 0 1-2.157.824 3.398 3.398 0 0 0-5.788 3.1A9.647 9.647 0 0 1 1.153.624a3.395 3.395 0 0 0-.059 3.31c.264.494.645.915 1.11 1.225a3.389 3.389 0 0 1-1.538-.425v.044a3.398 3.398 0 0 0 2.725 3.33c-.5.136-1.025.156-1.534.06a3.399 3.399 0 0 0 3.173 2.357A6.817 6.817 0 0 1 0 11.934a9.607 9.607 0 0 0 5.207 1.526c6.249 0 9.665-5.176 9.665-9.665 0-.146-.004-.293-.01-.439A6.905 6.905 0 0 0 16.556 1.6l.001-.002Z",fill:"#000"})))}},92358:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:40,height:40,viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M22.62 19.134 32.63 7.5h-2.373l-8.69 10.102L14.627 7.5H6.62l10.496 15.275-10.496 12.2h2.372l9.177-10.668 7.33 10.668h8.005L22.62 19.134Zm-3.248 3.776-1.063-1.521L9.847 9.285h3.643l6.829 9.768 1.063 1.521 8.877 12.697h-3.643l-7.244-10.36v-.001Z",fill:"#fff"})))}},86010:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}function o(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}n.r(t),n.d(t,{clsx:()=>o,default:()=>a});const a=o},20640:(e,t,n)=>{"use strict";var r=n(11742),o={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,t){var n,a,i,l,s,u,c=!1;t||(t={}),n=t.debug||!1;try{if(i=r(),l=document.createRange(),s=document.getSelection(),(u=document.createElement("span")).textContent=e,u.ariaHidden="true",u.style.all="unset",u.style.position="fixed",u.style.top=0,u.style.clip="rect(0, 0, 0, 0)",u.style.whiteSpace="pre",u.style.webkitUserSelect="text",u.style.MozUserSelect="text",u.style.msUserSelect="text",u.style.userSelect="text",u.addEventListener("copy",(function(r){if(r.stopPropagation(),t.format)if(r.preventDefault(),void 0===r.clipboardData){n&&console.warn("unable to use e.clipboardData"),n&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var a=o[t.format]||o.default;window.clipboardData.setData(a,e)}else r.clipboardData.clearData(),r.clipboardData.setData(t.format,e);t.onCopy&&(r.preventDefault(),t.onCopy(r.clipboardData))})),document.body.appendChild(u),l.selectNodeContents(u),s.addRange(l),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");c=!0}catch(d){n&&console.error("unable to copy using execCommand: ",d),n&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),c=!0}catch(d){n&&console.error("unable to copy using clipboardData: ",d),n&&console.error("falling back to prompt"),a=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:"Copy to clipboard: #{key}, Enter"),window.prompt(a,e)}}finally{s&&("function"==typeof s.removeRange?s.removeRange(l):s.removeAllRanges()),u&&document.body.removeChild(u),i()}return c}},38252:e=>{"use strict";e.exports=function e(t,n){if(t===n)return!0;if(t&&n&&"object"==typeof t&&"object"==typeof n){if(t.constructor!==n.constructor)return!1;var r,o,a;if(Array.isArray(t)){if((r=t.length)!=n.length)return!1;for(o=r;0!=o--;)if(!e(t[o],n[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if((r=(a=Object.keys(t)).length)!==Object.keys(n).length)return!1;for(o=r;0!=o--;)if(!Object.prototype.hasOwnProperty.call(n,a[o]))return!1;for(o=r;0!=o--;){var i=a[o];if(("_owner"!==i||!t.$$typeof)&&!e(t[i],n[i]))return!1}return!0}return t!=t&&n!=n}},99376:(e,t)=>{var n=Object.keys;t.D=function(e,t){if(e===t)return!0;if(!(e instanceof Object&&t instanceof Object))return!1;for(var r=n(e),o=r.length,a=0;a<o;a++)if(!(r[a]in t))return!1;for(a=0;a<o;a++)if(e[r[a]]!==t[r[a]])return!1;return o===n(t).length}},42358:(e,t,n)=>{"use strict";n.d(t,{lX:()=>k,q_:()=>D,ob:()=>m,PP:()=>N,Ep:()=>h,Hp:()=>g});var r=n(87462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),u=l||s;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var h=i.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};function l(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}const s=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=l(t),o=l(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var u=n(38776);function c(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function f(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function h(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function m(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function g(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&s(e.state,t.state)}function v(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var b=!("undefined"==typeof window||!window.document||!window.document.createElement);function y(e,t){t(window.confirm(e))}var w="popstate",x="hashchange";function _(){try{return window.history.state||{}}catch(e){return{}}}function k(e){void 0===e&&(e={}),b||(0,u.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,l=i.forceRefresh,s=void 0!==l&&l,d=i.getUserConfirmation,g=void 0===d?y:d,k=i.keyLength,E=void 0===k?6:k,S=e.basename?p(c(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return S&&(a=f(a,S)),m(a,r,n)}function T(){return Math.random().toString(36).substr(2,E)}var O=v();function D(e){(0,r.Z)($,e),$.length=n.length,O.notifyListeners($.location,$.action)}function P(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||A(C(e.state))}function N(){A(C(_()))}var I=!1;function A(e){if(I)I=!1,D();else{O.confirmTransitionTo(e,"POP",g,(function(t){t?D({action:"POP",location:e}):function(e){var t=$.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(I=!0,M(o))}(e)}))}}var L=C(_()),R=[L.key];function j(e){return S+h(e)}function M(e){n.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?(window.addEventListener(w,P),a&&window.addEventListener(x,N)):0===F&&(window.removeEventListener(w,P),a&&window.removeEventListener(x,N))}var z=!1;var $={length:n.length,action:"POP",location:L,createHref:j,push:function(e,t){var r="PUSH",a=m(e,t,T(),$.location);O.confirmTransitionTo(a,r,g,(function(e){if(e){var t=j(a),i=a.key,l=a.state;if(o)if(n.pushState({key:i,state:l},null,t),s)window.location.href=t;else{var u=R.indexOf($.location.key),c=R.slice(0,u+1);c.push(a.key),R=c,D({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=m(e,t,T(),$.location);O.confirmTransitionTo(a,r,g,(function(e){if(e){var t=j(a),i=a.key,l=a.state;if(o)if(n.replaceState({key:i,state:l},null,t),s)window.location.replace(t);else{var u=R.indexOf($.location.key);-1!==u&&(R[u]=a.key),D({action:r,location:a})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=O.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=O.appendListener(e);return B(1),function(){B(-1),t()}}};return $}var E="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+d(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:d,decodePath:c},slash:{encodePath:c,decodePath:c}};function C(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function T(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function O(e){window.location.replace(C(window.location.href)+"#"+e)}function D(e){void 0===e&&(e={}),b||(0,u.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?y:o,i=n.hashType,l=void 0===i?"slash":i,s=e.basename?p(c(e.basename)):"",d=S[l],g=d.encodePath,w=d.decodePath;function x(){var e=w(T());return s&&(e=f(e,s)),m(e)}var _=v();function k(e){(0,r.Z)(z,e),z.length=t.length,_.notifyListeners(z.location,z.action)}var D=!1,P=null;function N(){var e,t,n=T(),r=g(n);if(n!==r)O(r);else{var o=x(),i=z.location;if(!D&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(P===h(o))return;P=null,function(e){if(D)D=!1,k();else{var t="POP";_.confirmTransitionTo(e,t,a,(function(n){n?k({action:t,location:e}):function(e){var t=z.location,n=R.lastIndexOf(h(t));-1===n&&(n=0);var r=R.lastIndexOf(h(e));-1===r&&(r=0);var o=n-r;o&&(D=!0,j(o))}(e)}))}}(o)}}var I=T(),A=g(I);I!==A&&O(A);var L=x(),R=[h(L)];function j(e){t.go(e)}var M=0;function F(e){1===(M+=e)&&1===e?window.addEventListener(E,N):0===M&&window.removeEventListener(E,N)}var B=!1;var z={length:t.length,action:"POP",location:L,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=C(window.location.href)),n+"#"+g(s+h(e))},push:function(e,t){var n="PUSH",r=m(e,void 0,void 0,z.location);_.confirmTransitionTo(r,n,a,(function(e){if(e){var t=h(r),o=g(s+t);if(T()!==o){P=t,function(e){window.location.hash=e}(o);var a=R.lastIndexOf(h(z.location)),i=R.slice(0,a+1);i.push(t),R=i,k({action:n,location:r})}else k()}}))},replace:function(e,t){var n="REPLACE",r=m(e,void 0,void 0,z.location);_.confirmTransitionTo(r,n,a,(function(e){if(e){var t=h(r),o=g(s+t);T()!==o&&(P=t,O(o));var a=R.indexOf(h(z.location));-1!==a&&(R[a]=t),k({action:n,location:r})}}))},go:j,goBack:function(){j(-1)},goForward:function(){j(1)},block:function(e){void 0===e&&(e=!1);var t=_.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=_.appendListener(e);return F(1),function(){F(-1),t()}}};return z}function P(e,t,n){return Math.min(Math.max(e,t),n)}function N(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=v();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function f(){return Math.random().toString(36).substr(2,u)}var p=P(l,0,a.length-1),g=a.map((function(e){return m(e,void 0,"string"==typeof e?f():e.key||f())})),b=h;function y(e){var t=P(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:g.length,action:"POP",location:g[p],index:p,entries:g,createHref:b,push:function(e,t){var r="PUSH",o=m(e,t,f(),w.location);c.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=m(e,t,f(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(59864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var o=p(n);o&&o!==h&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),m=s(n),g=0;g<i.length;++g){var v=i[g];if(!(a[v]||r&&r[v]||m&&m[v]||l&&l[v])){var b=f(n,v);try{u(t,v,b)}catch(y){}}}}return t}},41143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},36808:(e,t,n)=>{var r,o;!function(a){if(void 0===(o="function"==typeof(r=a)?r.call(t,n,t,e):r)||(e.exports=o),!0,e.exports=a(),!!0){var i=window.Cookies,l=window.Cookies=a();l.noConflict=function(){return window.Cookies=i,l}}}((function(){function e(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function o(){}function a(t,n,a){if("undefined"!=typeof document){"number"==typeof(a=e({path:"/"},o.defaults,a)).expires&&(a.expires=new Date(1*new Date+864e5*a.expires)),a.expires=a.expires?a.expires.toUTCString():"";try{var i=JSON.stringify(n);/^[\{\[]/.test(i)&&(n=i)}catch(u){}n=r.write?r.write(n,t):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\(\)]/g,escape);var l="";for(var s in a)a[s]&&(l+="; "+s,!0!==a[s]&&(l+="="+a[s].split(";")[0]));return document.cookie=t+"="+n+l}}function i(e,n){if("undefined"!=typeof document){for(var o={},a=document.cookie?document.cookie.split("; "):[],i=0;i<a.length;i++){var l=a[i].split("="),s=l.slice(1).join("=");n||'"'!==s.charAt(0)||(s=s.slice(1,-1));try{var u=t(l[0]);if(s=(r.read||r)(s,u)||t(s),n)try{s=JSON.parse(s)}catch(c){}if(o[u]=s,e===u)break}catch(c){}}return e?o[e]:o}}return o.set=a,o.get=function(e){return i(e,!1)},o.getJSON=function(e){return i(e,!0)},o.remove=function(t,n){a(t,"",e(n,{expires:-1}))},o.defaults={},o.withConverter=n,o}((function(){}))}))},18552:(e,t,n)=>{var r=n(10852)(n(55639),"DataView");e.exports=r},1989:(e,t,n)=>{var r=n(51789),o=n(80401),a=n(57667),i=n(21327),l=n(81866);function s(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=o,s.prototype.get=a,s.prototype.has=i,s.prototype.set=l,e.exports=s},38407:(e,t,n)=>{var r=n(27040),o=n(14125),a=n(82117),i=n(67518),l=n(54705);function s(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=o,s.prototype.get=a,s.prototype.has=i,s.prototype.set=l,e.exports=s},57071:(e,t,n)=>{var r=n(10852)(n(55639),"Map");e.exports=r},83369:(e,t,n)=>{var r=n(24785),o=n(11285),a=n(96e3),i=n(49916),l=n(95265);function s(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=o,s.prototype.get=a,s.prototype.has=i,s.prototype.set=l,e.exports=s},53818:(e,t,n)=>{var r=n(10852)(n(55639),"Promise");e.exports=r},58525:(e,t,n)=>{var r=n(10852)(n(55639),"Set");e.exports=r},88668:(e,t,n)=>{var r=n(83369),o=n(90619),a=n(72385);function i(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}i.prototype.add=i.prototype.push=o,i.prototype.has=a,e.exports=i},46384:(e,t,n)=>{var r=n(38407),o=n(37465),a=n(63779),i=n(67599),l=n(44758),s=n(34309);function u(e){var t=this.__data__=new r(e);this.size=t.size}u.prototype.clear=o,u.prototype.delete=a,u.prototype.get=i,u.prototype.has=l,u.prototype.set=s,e.exports=u},62705:(e,t,n)=>{var r=n(55639).Symbol;e.exports=r},11149:(e,t,n)=>{var r=n(55639).Uint8Array;e.exports=r},70577:(e,t,n)=>{var r=n(10852)(n(55639),"WeakMap");e.exports=r},96874:e=>{e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},44174:e=>{e.exports=function(e,t,n,r){for(var o=-1,a=null==e?0:e.length;++o<a;){var i=e[o];t(r,i,n(i),e)}return r}},77412:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}},34963:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,a=[];++n<r;){var i=e[n];t(i,n,e)&&(a[o++]=i)}return a}},14636:(e,t,n)=>{var r=n(22545),o=n(35694),a=n(1469),i=n(44144),l=n(65776),s=n(36719),u=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=a(e),c=!n&&o(e),d=!n&&!c&&i(e),f=!n&&!c&&!d&&s(e),p=n||c||d||f,h=p?r(e.length,String):[],m=h.length;for(var g in e)!t&&!u.call(e,g)||p&&("length"==g||d&&("offset"==g||"parent"==g)||f&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||l(g,m))||h.push(g);return h}},29932:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}},62488:e=>{e.exports=function(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e}},82908:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}},34865:(e,t,n)=>{var r=n(89465),o=n(77813),a=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var i=e[t];a.call(e,t)&&o(i,n)&&(void 0!==n||t in e)||r(e,t,n)}},18470:(e,t,n)=>{var r=n(77813);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},81119:(e,t,n)=>{var r=n(89881);e.exports=function(e,t,n,o){return r(e,(function(e,r,a){t(o,e,n(e),a)})),o}},44037:(e,t,n)=>{var r=n(98363),o=n(3674);e.exports=function(e,t){return e&&r(t,o(t),e)}},63886:(e,t,n)=>{var r=n(98363),o=n(81704);e.exports=function(e,t){return e&&r(t,o(t),e)}},89465:(e,t,n)=>{var r=n(38777);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},85990:(e,t,n)=>{var r=n(46384),o=n(77412),a=n(34865),i=n(44037),l=n(63886),s=n(64626),u=n(278),c=n(18805),d=n(1911),f=n(58234),p=n(46904),h=n(64160),m=n(43824),g=n(29148),v=n(38517),b=n(1469),y=n(44144),w=n(56688),x=n(13218),_=n(72928),k=n(3674),E=n(81704),S="[object Arguments]",C="[object Function]",T="[object Object]",O={};O[S]=O["[object Array]"]=O["[object ArrayBuffer]"]=O["[object DataView]"]=O["[object Boolean]"]=O["[object Date]"]=O["[object Float32Array]"]=O["[object Float64Array]"]=O["[object Int8Array]"]=O["[object Int16Array]"]=O["[object Int32Array]"]=O["[object Map]"]=O["[object Number]"]=O[T]=O["[object RegExp]"]=O["[object Set]"]=O["[object String]"]=O["[object Symbol]"]=O["[object Uint8Array]"]=O["[object Uint8ClampedArray]"]=O["[object Uint16Array]"]=O["[object Uint32Array]"]=!0,O["[object Error]"]=O[C]=O["[object WeakMap]"]=!1,e.exports=function e(t,n,D,P,N,I){var A,L=1&n,R=2&n,j=4&n;if(D&&(A=N?D(t,P,N,I):D(t)),void 0!==A)return A;if(!x(t))return t;var M=b(t);if(M){if(A=m(t),!L)return u(t,A)}else{var F=h(t),B=F==C||"[object GeneratorFunction]"==F;if(y(t))return s(t,L);if(F==T||F==S||B&&!N){if(A=R||B?{}:v(t),!L)return R?d(t,l(A,t)):c(t,i(A,t))}else{if(!O[F])return N?t:{};A=g(t,F,L)}}I||(I=new r);var z=I.get(t);if(z)return z;I.set(t,A),_(t)?t.forEach((function(r){A.add(e(r,n,D,r,t,I))})):w(t)&&t.forEach((function(r,o){A.set(o,e(r,n,D,o,t,I))}));var $=M?void 0:(j?R?p:f:R?E:k)(t);return o($||t,(function(r,o){$&&(r=t[o=r]),a(A,o,e(r,n,D,o,t,I))})),A}},3118:(e,t,n)=>{var r=n(13218),o=Object.create,a=function(){function e(){}return function(t){if(!r(t))return{};if(o)return o(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=a},89881:(e,t,n)=>{var r=n(47816),o=n(99291)(r);e.exports=o},21078:(e,t,n)=>{var r=n(62488),o=n(37285);e.exports=function e(t,n,a,i,l){var s=-1,u=t.length;for(a||(a=o),l||(l=[]);++s<u;){var c=t[s];n>0&&a(c)?n>1?e(c,n-1,a,i,l):r(l,c):i||(l[l.length]=c)}return l}},28483:(e,t,n)=>{var r=n(25063)();e.exports=r},47816:(e,t,n)=>{var r=n(28483),o=n(3674);e.exports=function(e,t){return e&&r(e,t,o)}},97786:(e,t,n)=>{var r=n(71811),o=n(40327);e.exports=function(e,t){for(var n=0,a=(t=r(t,e)).length;null!=e&&n<a;)e=e[o(t[n++])];return n&&n==a?e:void 0}},68866:(e,t,n)=>{var r=n(62488),o=n(1469);e.exports=function(e,t,n){var a=t(e);return o(e)?a:r(a,n(e))}},44239:(e,t,n)=>{var r=n(62705),o=n(89607),a=n(2333),i=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?o(e):a(e)}},13:e=>{e.exports=function(e,t){return null!=e&&t in Object(e)}},9454:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return o(e)&&"[object Arguments]"==r(e)}},90939:(e,t,n)=>{var r=n(2492),o=n(37005);e.exports=function e(t,n,a,i,l){return t===n||(null==t||null==n||!o(t)&&!o(n)?t!=t&&n!=n:r(t,n,a,i,e,l))}},2492:(e,t,n)=>{var r=n(46384),o=n(67114),a=n(18351),i=n(16096),l=n(64160),s=n(1469),u=n(44144),c=n(36719),d="[object Arguments]",f="[object Array]",p="[object Object]",h=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,m,g,v){var b=s(e),y=s(t),w=b?f:l(e),x=y?f:l(t),_=(w=w==d?p:w)==p,k=(x=x==d?p:x)==p,E=w==x;if(E&&u(e)){if(!u(t))return!1;b=!0,_=!1}if(E&&!_)return v||(v=new r),b||c(e)?o(e,t,n,m,g,v):a(e,t,w,n,m,g,v);if(!(1&n)){var S=_&&h.call(e,"__wrapped__"),C=k&&h.call(t,"__wrapped__");if(S||C){var T=S?e.value():e,O=C?t.value():t;return v||(v=new r),g(T,O,n,m,v)}}return!!E&&(v||(v=new r),i(e,t,n,m,g,v))}},25588:(e,t,n)=>{var r=n(64160),o=n(37005);e.exports=function(e){return o(e)&&"[object Map]"==r(e)}},2958:(e,t,n)=>{var r=n(46384),o=n(90939);e.exports=function(e,t,n,a){var i=n.length,l=i,s=!a;if(null==e)return!l;for(e=Object(e);i--;){var u=n[i];if(s&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++i<l;){var c=(u=n[i])[0],d=e[c],f=u[1];if(s&&u[2]){if(void 0===d&&!(c in e))return!1}else{var p=new r;if(a)var h=a(d,f,c,e,t,p);if(!(void 0===h?o(f,d,3,a,p):h))return!1}}return!0}},28458:(e,t,n)=>{var r=n(23560),o=n(15346),a=n(13218),i=n(80346),l=/^\[object .+?Constructor\]$/,s=Function.prototype,u=Object.prototype,c=s.toString,d=u.hasOwnProperty,f=RegExp("^"+c.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||o(e))&&(r(e)?f:l).test(i(e))}},29221:(e,t,n)=>{var r=n(64160),o=n(37005);e.exports=function(e){return o(e)&&"[object Set]"==r(e)}},38749:(e,t,n)=>{var r=n(44239),o=n(41780),a=n(37005),i={};i["[object Float32Array]"]=i["[object Float64Array]"]=i["[object Int8Array]"]=i["[object Int16Array]"]=i["[object Int32Array]"]=i["[object Uint8Array]"]=i["[object Uint8ClampedArray]"]=i["[object Uint16Array]"]=i["[object Uint32Array]"]=!0,i["[object Arguments]"]=i["[object Array]"]=i["[object ArrayBuffer]"]=i["[object Boolean]"]=i["[object DataView]"]=i["[object Date]"]=i["[object Error]"]=i["[object Function]"]=i["[object Map]"]=i["[object Number]"]=i["[object Object]"]=i["[object RegExp]"]=i["[object Set]"]=i["[object String]"]=i["[object WeakMap]"]=!1,e.exports=function(e){return a(e)&&o(e.length)&&!!i[r(e)]}},67206:(e,t,n)=>{var r=n(91573),o=n(16432),a=n(6557),i=n(1469),l=n(39601);e.exports=function(e){return"function"==typeof e?e:null==e?a:"object"==typeof e?i(e)?o(e[0],e[1]):r(e):l(e)}},280:(e,t,n)=>{var r=n(25726),o=n(86916),a=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=[];for(var n in Object(e))a.call(e,n)&&"constructor"!=n&&t.push(n);return t}},10313:(e,t,n)=>{var r=n(13218),o=n(25726),a=n(33498),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return a(e);var t=o(e),n=[];for(var l in e)("constructor"!=l||!t&&i.call(e,l))&&n.push(l);return n}},91573:(e,t,n)=>{var r=n(2958),o=n(1499),a=n(42634);e.exports=function(e){var t=o(e);return 1==t.length&&t[0][2]?a(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},16432:(e,t,n)=>{var r=n(90939),o=n(27361),a=n(79095),i=n(15403),l=n(89162),s=n(42634),u=n(40327);e.exports=function(e,t){return i(e)&&l(t)?s(u(e),t):function(n){var i=o(n,e);return void 0===i&&i===t?a(n,e):r(t,i,3)}}},40371:e=>{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},79152:(e,t,n)=>{var r=n(97786);e.exports=function(e){return function(t){return r(t,e)}}},56560:(e,t,n)=>{var r=n(75703),o=n(38777),a=n(6557),i=o?function(e,t){return o(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:a;e.exports=i},14259:e=>{e.exports=function(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(o);++r<o;)a[r]=e[r+t];return a}},22545:e=>{e.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},80531:(e,t,n)=>{var r=n(62705),o=n(29932),a=n(1469),i=n(33448),l=r?r.prototype:void 0,s=l?l.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(a(t))return o(t,e)+"";if(i(t))return s?s.call(t):"";var n=t+"";return"0"==n&&1/t==-Infinity?"-0":n}},7518:e=>{e.exports=function(e){return function(t){return e(t)}}},57406:(e,t,n)=>{var r=n(71811),o=n(10928),a=n(40292),i=n(40327);e.exports=function(e,t){return t=r(t,e),null==(e=a(e,t))||delete e[i(o(t))]}},74757:e=>{e.exports=function(e,t){return e.has(t)}},71811:(e,t,n)=>{var r=n(1469),o=n(15403),a=n(55514),i=n(79833);e.exports=function(e,t){return r(e)?e:o(e,t)?[e]:a(i(e))}},74318:(e,t,n)=>{var r=n(11149);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},64626:(e,t,n)=>{e=n.nmd(e);var r=n(55639),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,i=a&&a.exports===o?r.Buffer:void 0,l=i?i.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=l?l(n):new e.constructor(n);return e.copy(r),r}},57157:(e,t,n)=>{var r=n(74318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},93147:e=>{var t=/\w*$/;e.exports=function(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}},40419:(e,t,n)=>{var r=n(62705),o=r?r.prototype:void 0,a=o?o.valueOf:void 0;e.exports=function(e){return a?Object(a.call(e)):{}}},77133:(e,t,n)=>{var r=n(74318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},278:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},98363:(e,t,n)=>{var r=n(34865),o=n(89465);e.exports=function(e,t,n,a){var i=!n;n||(n={});for(var l=-1,s=t.length;++l<s;){var u=t[l],c=a?a(n[u],e[u],u,n,e):void 0;void 0===c&&(c=e[u]),i?o(n,u,c):r(n,u,c)}return n}},18805:(e,t,n)=>{var r=n(98363),o=n(99551);e.exports=function(e,t){return r(e,o(e),t)}},1911:(e,t,n)=>{var r=n(98363),o=n(51442);e.exports=function(e,t){return r(e,o(e),t)}},14429:(e,t,n)=>{var r=n(55639)["__core-js_shared__"];e.exports=r},55189:(e,t,n)=>{var r=n(44174),o=n(81119),a=n(67206),i=n(1469);e.exports=function(e,t){return function(n,l){var s=i(n)?r:o,u=t?t():{};return s(n,e,a(l,2),u)}}},99291:(e,t,n)=>{var r=n(98612);e.exports=function(e,t){return function(n,o){if(null==n)return n;if(!r(n))return e(n,o);for(var a=n.length,i=t?a:-1,l=Object(n);(t?i--:++i<a)&&!1!==o(l[i],i,l););return n}}},25063:e=>{e.exports=function(e){return function(t,n,r){for(var o=-1,a=Object(t),i=r(t),l=i.length;l--;){var s=i[e?l:++o];if(!1===n(a[s],s,a))break}return t}}},60696:(e,t,n)=>{var r=n(68630);e.exports=function(e){return r(e)?void 0:e}},38777:(e,t,n)=>{var r=n(10852),o=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();e.exports=o},67114:(e,t,n)=>{var r=n(88668),o=n(82908),a=n(74757);e.exports=function(e,t,n,i,l,s){var u=1&n,c=e.length,d=t.length;if(c!=d&&!(u&&d>c))return!1;var f=s.get(e),p=s.get(t);if(f&&p)return f==t&&p==e;var h=-1,m=!0,g=2&n?new r:void 0;for(s.set(e,t),s.set(t,e);++h<c;){var v=e[h],b=t[h];if(i)var y=u?i(b,v,h,t,e,s):i(v,b,h,e,t,s);if(void 0!==y){if(y)continue;m=!1;break}if(g){if(!o(t,(function(e,t){if(!a(g,t)&&(v===e||l(v,e,n,i,s)))return g.push(t)}))){m=!1;break}}else if(v!==b&&!l(v,b,n,i,s)){m=!1;break}}return s.delete(e),s.delete(t),m}},18351:(e,t,n)=>{var r=n(62705),o=n(11149),a=n(77813),i=n(67114),l=n(68776),s=n(21814),u=r?r.prototype:void 0,c=u?u.valueOf:void 0;e.exports=function(e,t,n,r,u,d,f){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!d(new o(e),new o(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return a(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var p=l;case"[object Set]":var h=1&r;if(p||(p=s),e.size!=t.size&&!h)return!1;var m=f.get(e);if(m)return m==t;r|=2,f.set(e,t);var g=i(p(e),p(t),r,u,d,f);return f.delete(e),g;case"[object Symbol]":if(c)return c.call(e)==c.call(t)}return!1}},16096:(e,t,n)=>{var r=n(58234),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,a,i,l){var s=1&n,u=r(e),c=u.length;if(c!=r(t).length&&!s)return!1;for(var d=c;d--;){var f=u[d];if(!(s?f in t:o.call(t,f)))return!1}var p=l.get(e),h=l.get(t);if(p&&h)return p==t&&h==e;var m=!0;l.set(e,t),l.set(t,e);for(var g=s;++d<c;){var v=e[f=u[d]],b=t[f];if(a)var y=s?a(b,v,f,t,e,l):a(v,b,f,e,t,l);if(!(void 0===y?v===b||i(v,b,n,a,l):y)){m=!1;break}g||(g="constructor"==f)}if(m&&!g){var w=e.constructor,x=t.constructor;w==x||!("constructor"in e)||!("constructor"in t)||"function"==typeof w&&w instanceof w&&"function"==typeof x&&x instanceof x||(m=!1)}return l.delete(e),l.delete(t),m}},99021:(e,t,n)=>{var r=n(85564),o=n(45357),a=n(30061);e.exports=function(e){return a(o(e,void 0,r),e+"")}},31957:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},58234:(e,t,n)=>{var r=n(68866),o=n(99551),a=n(3674);e.exports=function(e){return r(e,a,o)}},46904:(e,t,n)=>{var r=n(68866),o=n(51442),a=n(81704);e.exports=function(e){return r(e,a,o)}},45050:(e,t,n)=>{var r=n(37019);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},1499:(e,t,n)=>{var r=n(89162),o=n(3674);e.exports=function(e){for(var t=o(e),n=t.length;n--;){var a=t[n],i=e[a];t[n]=[a,i,r(i)]}return t}},10852:(e,t,n)=>{var r=n(28458),o=n(47801);e.exports=function(e,t){var n=o(e,t);return r(n)?n:void 0}},85924:(e,t,n)=>{var r=n(5569)(Object.getPrototypeOf,Object);e.exports=r},89607:(e,t,n)=>{var r=n(62705),o=Object.prototype,a=o.hasOwnProperty,i=o.toString,l=r?r.toStringTag:void 0;e.exports=function(e){var t=a.call(e,l),n=e[l];try{e[l]=void 0;var r=!0}catch(s){}var o=i.call(e);return r&&(t?e[l]=n:delete e[l]),o}},99551:(e,t,n)=>{var r=n(34963),o=n(70479),a=Object.prototype.propertyIsEnumerable,i=Object.getOwnPropertySymbols,l=i?function(e){return null==e?[]:(e=Object(e),r(i(e),(function(t){return a.call(e,t)})))}:o;e.exports=l},51442:(e,t,n)=>{var r=n(62488),o=n(85924),a=n(99551),i=n(70479),l=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,a(e)),e=o(e);return t}:i;e.exports=l},64160:(e,t,n)=>{var r=n(18552),o=n(57071),a=n(53818),i=n(58525),l=n(70577),s=n(44239),u=n(80346),c="[object Map]",d="[object Promise]",f="[object Set]",p="[object WeakMap]",h="[object DataView]",m=u(r),g=u(o),v=u(a),b=u(i),y=u(l),w=s;(r&&w(new r(new ArrayBuffer(1)))!=h||o&&w(new o)!=c||a&&w(a.resolve())!=d||i&&w(new i)!=f||l&&w(new l)!=p)&&(w=function(e){var t=s(e),n="[object Object]"==t?e.constructor:void 0,r=n?u(n):"";if(r)switch(r){case m:return h;case g:return c;case v:return d;case b:return f;case y:return p}return t}),e.exports=w},47801:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},222:(e,t,n)=>{var r=n(71811),o=n(35694),a=n(1469),i=n(65776),l=n(41780),s=n(40327);e.exports=function(e,t,n){for(var u=-1,c=(t=r(t,e)).length,d=!1;++u<c;){var f=s(t[u]);if(!(d=null!=e&&n(e,f)))break;e=e[f]}return d||++u!=c?d:!!(c=null==e?0:e.length)&&l(c)&&i(f,c)&&(a(e)||o(e))}},51789:(e,t,n)=>{var r=n(94536);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},80401:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},57667:(e,t,n)=>{var r=n(94536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(t,e)?t[e]:void 0}},21327:(e,t,n)=>{var r=n(94536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:o.call(t,e)}},81866:(e,t,n)=>{var r=n(94536);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},43824:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e){var n=e.length,r=new e.constructor(n);return n&&"string"==typeof e[0]&&t.call(e,"index")&&(r.index=e.index,r.input=e.input),r}},29148:(e,t,n)=>{var r=n(74318),o=n(57157),a=n(93147),i=n(40419),l=n(77133);e.exports=function(e,t,n){var s=e.constructor;switch(t){case"[object ArrayBuffer]":return r(e);case"[object Boolean]":case"[object Date]":return new s(+e);case"[object DataView]":return o(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return l(e,n);case"[object Map]":case"[object Set]":return new s;case"[object Number]":case"[object String]":return new s(e);case"[object RegExp]":return a(e);case"[object Symbol]":return i(e)}}},38517:(e,t,n)=>{var r=n(3118),o=n(85924),a=n(25726);e.exports=function(e){return"function"!=typeof e.constructor||a(e)?{}:r(o(e))}},37285:(e,t,n)=>{var r=n(62705),o=n(35694),a=n(1469),i=r?r.isConcatSpreadable:void 0;e.exports=function(e){return a(e)||o(e)||!!(i&&e&&e[i])}},65776:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&t.test(e))&&e>-1&&e%1==0&&e<n}},15403:(e,t,n)=>{var r=n(1469),o=n(33448),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,i=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!o(e))||(i.test(e)||!a.test(e)||null!=t&&e in Object(t))}},37019:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},15346:(e,t,n)=>{var r,o=n(14429),a=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!a&&a in e}},25726:e=>{var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||t)}},89162:(e,t,n)=>{var r=n(13218);e.exports=function(e){return e==e&&!r(e)}},27040:e=>{e.exports=function(){this.__data__=[],this.size=0}},14125:(e,t,n)=>{var r=n(18470),o=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():o.call(t,n,1),--this.size,!0)}},82117:(e,t,n)=>{var r=n(18470);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},67518:(e,t,n)=>{var r=n(18470);e.exports=function(e){return r(this.__data__,e)>-1}},54705:(e,t,n)=>{var r=n(18470);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},24785:(e,t,n)=>{var r=n(1989),o=n(38407),a=n(57071);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||o),string:new r}}},11285:(e,t,n)=>{var r=n(45050);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},96e3:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).get(e)}},49916:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).has(e)}},95265:(e,t,n)=>{var r=n(45050);e.exports=function(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}},68776:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},42634:e=>{e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},24523:(e,t,n)=>{var r=n(88306);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},94536:(e,t,n)=>{var r=n(10852)(Object,"create");e.exports=r},86916:(e,t,n)=>{var r=n(5569)(Object.keys,Object);e.exports=r},33498:e=>{e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},31167:(e,t,n)=>{e=n.nmd(e);var r=n(31957),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,i=a&&a.exports===o&&r.process,l=function(){try{var e=a&&a.require&&a.require("util").types;return e||i&&i.binding&&i.binding("util")}catch(t){}}();e.exports=l},2333:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},5569:e=>{e.exports=function(e,t){return function(n){return e(t(n))}}},45357:(e,t,n)=>{var r=n(96874),o=Math.max;e.exports=function(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var a=arguments,i=-1,l=o(a.length-t,0),s=Array(l);++i<l;)s[i]=a[t+i];i=-1;for(var u=Array(t+1);++i<t;)u[i]=a[i];return u[t]=n(s),r(e,this,u)}}},40292:(e,t,n)=>{var r=n(97786),o=n(14259);e.exports=function(e,t){return t.length<2?e:r(e,o(t,0,-1))}},55639:(e,t,n)=>{var r=n(31957),o="object"==typeof self&&self&&self.Object===Object&&self,a=r||o||Function("return this")();e.exports=a},90619:e=>{e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},72385:e=>{e.exports=function(e){return this.__data__.has(e)}},21814:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},30061:(e,t,n)=>{var r=n(56560),o=n(21275)(r);e.exports=o},21275:e=>{var t=Date.now;e.exports=function(e){var n=0,r=0;return function(){var o=t(),a=16-(o-r);if(r=o,a>0){if(++n>=800)return arguments[0]}else n=0;return e.apply(void 0,arguments)}}},37465:(e,t,n)=>{var r=n(38407);e.exports=function(){this.__data__=new r,this.size=0}},63779:e=>{e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},67599:e=>{e.exports=function(e){return this.__data__.get(e)}},44758:e=>{e.exports=function(e){return this.__data__.has(e)}},34309:(e,t,n)=>{var r=n(38407),o=n(57071),a=n(83369);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var i=n.__data__;if(!o||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new a(i)}return n.set(e,t),this.size=n.size,this}},55514:(e,t,n)=>{var r=n(24523),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,i=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(o,(function(e,n,r,o){t.push(r?o.replace(a,"$1"):n||e)})),t}));e.exports=i},40327:(e,t,n)=>{var r=n(33448);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t}},80346:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(n){}try{return e+""}catch(n){}}return""}},75703:e=>{e.exports=function(e){return function(){return e}}},77813:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},85564:(e,t,n)=>{var r=n(21078);e.exports=function(e){return(null==e?0:e.length)?r(e,1):[]}},27361:(e,t,n)=>{var r=n(97786);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},7739:(e,t,n)=>{var r=n(89465),o=n(55189),a=Object.prototype.hasOwnProperty,i=o((function(e,t,n){a.call(e,n)?e[n].push(t):r(e,n,[t])}));e.exports=i},79095:(e,t,n)=>{var r=n(13),o=n(222);e.exports=function(e,t){return null!=e&&o(e,t,r)}},6557:e=>{e.exports=function(e){return e}},35694:(e,t,n)=>{var r=n(9454),o=n(37005),a=Object.prototype,i=a.hasOwnProperty,l=a.propertyIsEnumerable,s=r(function(){return arguments}())?r:function(e){return o(e)&&i.call(e,"callee")&&!l.call(e,"callee")};e.exports=s},1469:e=>{var t=Array.isArray;e.exports=t},98612:(e,t,n)=>{var r=n(23560),o=n(41780);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},44144:(e,t,n)=>{e=n.nmd(e);var r=n(55639),o=n(95062),a=t&&!t.nodeType&&t,i=a&&e&&!e.nodeType&&e,l=i&&i.exports===a?r.Buffer:void 0,s=(l?l.isBuffer:void 0)||o;e.exports=s},23560:(e,t,n)=>{var r=n(44239),o=n(13218);e.exports=function(e){if(!o(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},41780:e=>{e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},56688:(e,t,n)=>{var r=n(25588),o=n(7518),a=n(31167),i=a&&a.isMap,l=i?o(i):r;e.exports=l},13218:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},37005:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},68630:(e,t,n)=>{var r=n(44239),o=n(85924),a=n(37005),i=Function.prototype,l=Object.prototype,s=i.toString,u=l.hasOwnProperty,c=s.call(Object);e.exports=function(e){if(!a(e)||"[object Object]"!=r(e))return!1;var t=o(e);if(null===t)return!0;var n=u.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&s.call(n)==c}},72928:(e,t,n)=>{var r=n(29221),o=n(7518),a=n(31167),i=a&&a.isSet,l=i?o(i):r;e.exports=l},33448:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return"symbol"==typeof e||o(e)&&"[object Symbol]"==r(e)}},36719:(e,t,n)=>{var r=n(38749),o=n(7518),a=n(31167),i=a&&a.isTypedArray,l=i?o(i):r;e.exports=l},3674:(e,t,n)=>{var r=n(14636),o=n(280),a=n(98612);e.exports=function(e){return a(e)?r(e):o(e)}},81704:(e,t,n)=>{var r=n(14636),o=n(10313),a=n(98612);e.exports=function(e){return a(e)?r(e,!0):o(e)}},10928:e=>{e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},88306:(e,t,n)=>{var r=n(83369);function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],a=n.cache;if(a.has(o))return a.get(o);var i=e.apply(this,r);return n.cache=a.set(o,i)||a,i};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},57557:(e,t,n)=>{var r=n(29932),o=n(85990),a=n(57406),i=n(71811),l=n(98363),s=n(60696),u=n(99021),c=n(46904),d=u((function(e,t){var n={};if(null==e)return n;var u=!1;t=r(t,(function(t){return t=i(t,e),u||(u=t.length>1),t})),l(e,c(e),n),u&&(n=o(n,7,s));for(var d=t.length;d--;)a(n,t[d]);return n}));e.exports=d},39601:(e,t,n)=>{var r=n(40371),o=n(79152),a=n(15403),i=n(40327);e.exports=function(e){return a(e)?r(i(e)):o(e)}},70479:e=>{e.exports=function(){return[]}},95062:e=>{e.exports=function(){return!1}},79833:(e,t,n)=>{var r=n(80531);e.exports=function(e){return null==e?"":r(e)}},31336:(e,t,n)=>{var r,o;!function(){var a,i,l,s,u,c,d,f,p,h,m,g,v,b,y,w,x,_,k,E,S,C,T,O,D,P,N=function(e){var t=new N.Builder;return t.pipeline.add(N.trimmer,N.stopWordFilter,N.stemmer),t.searchPipeline.add(N.stemmer),e.call(t,t),t.build()};N.version="2.3.9",N.utils={},N.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),N.utils.asString=function(e){return null==e?"":e.toString()},N.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},N.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},N.FieldRef.joiner="/",N.FieldRef.fromString=function(e){var t=e.indexOf(N.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new N.FieldRef(r,n,e)},N.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+N.FieldRef.joiner+this.docRef),this._stringValue},N.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},N.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},N.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},N.Set.prototype.contains=function(e){return!!this.elements[e]},N.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===N.Set.complete)return this;if(e===N.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new N.Set(o)},N.Set.prototype.union=function(e){return e===N.Set.complete?N.Set.complete:e===N.Set.empty?this:new N.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},N.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},N.Token=function(e,t){this.str=e||"",this.metadata=t||{}},N.Token.prototype.toString=function(){return this.str},N.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},N.Token.prototype.clone=function(e){return e=e||function(e){return e},new N.Token(e(this.str,this.metadata),this.metadata)},N.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new N.Token(N.utils.asString(e).toLowerCase(),N.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var l=a-i;if(n.charAt(a).match(N.tokenizer.separator)||a==r){if(l>0){var s=N.utils.clone(t)||{};s.position=[i,l],s.index=o.length,o.push(new N.Token(n.slice(i,a),s))}i=a+1}}return o},N.tokenizer.separator=/[\s\-]+/,N.Pipeline=function(){this._stack=[]},N.Pipeline.registeredFunctions=Object.create(null),N.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&N.utils.warn("Overwriting existing registered function: "+t),e.label=t,N.Pipeline.registeredFunctions[e.label]=e},N.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||N.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},N.Pipeline.load=function(e){var t=new N.Pipeline;return e.forEach((function(e){var n=N.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},N.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach((function(e){N.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},N.Pipeline.prototype.after=function(e,t){N.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},N.Pipeline.prototype.before=function(e,t){N.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},N.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},N.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var l=0;l<i.length;l++)o.push(i[l]);else o.push(i)}e=o}return e},N.Pipeline.prototype.runString=function(e,t){var n=new N.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},N.Pipeline.prototype.reset=function(){this._stack=[]},N.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return N.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},N.Vector=function(e){this._magnitude=0,this.elements=e||[]},N.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},N.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},N.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},N.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},N.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,l=0,s=0,u=0;s<o&&u<a;)(i=n[s])<(l=r[u])?s+=2:i>l?u+=2:i==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},N.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},N.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},N.Vector.prototype.toJSON=function(){return this.elements},N.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},l={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},s="[aeiouy]",u="[^aeiou][^aeiouy]*",c=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),p=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),h=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,v=/^(.+?)(ed|ing)$/,b=/.$/,y=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+u+s+"[^aeiouwxy]$"),_=/^(.+?[^aeiou])y$/,k=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,S=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,C=/^(.+?)(s|t)(ion)$/,T=/^(.+?)e$/,O=/ll$/,D=new RegExp("^"+u+s+"[^aeiouwxy]$"),P=function(e){var t,n,r,o,a,s,u;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=m,(o=h).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=v,(o=g).test(e)){var P=o.exec(e);(o=c).test(P[1])&&(o=b,e=e.replace(o,""))}else a.test(e)&&(t=(P=a.exec(e))[1],(a=p).test(t)&&(s=w,u=x,(a=y).test(e=t)?e+="e":s.test(e)?(o=b,e=e.replace(o,"")):u.test(e)&&(e+="e")));return(o=_).test(e)&&(e=(t=(P=o.exec(e))[1])+"i"),(o=k).test(e)&&(t=(P=o.exec(e))[1],n=P[2],(o=c).test(t)&&(e=t+i[n])),(o=E).test(e)&&(t=(P=o.exec(e))[1],n=P[2],(o=c).test(t)&&(e=t+l[n])),a=C,(o=S).test(e)?(t=(P=o.exec(e))[1],(o=d).test(t)&&(e=t)):a.test(e)&&(t=(P=a.exec(e))[1]+P[2],(a=d).test(t)&&(e=t)),(o=T).test(e)&&(t=(P=o.exec(e))[1],a=f,s=D,((o=d).test(t)||a.test(t)&&!s.test(t))&&(e=t)),a=d,(o=O).test(e)&&a.test(e)&&(o=b,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(P)}),N.Pipeline.registerFunction(N.stemmer,"stemmer"),N.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},N.stopWordFilter=N.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),N.Pipeline.registerFunction(N.stopWordFilter,"stopWordFilter"),N.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},N.Pipeline.registerFunction(N.trimmer,"trimmer"),N.TokenSet=function(){this.final=!1,this.edges={},this.id=N.TokenSet._nextId,N.TokenSet._nextId+=1},N.TokenSet._nextId=1,N.TokenSet.fromArray=function(e){for(var t=new N.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},N.TokenSet.fromClause=function(e){return"editDistance"in e?N.TokenSet.fromFuzzyString(e.term,e.editDistance):N.TokenSet.fromString(e.term)},N.TokenSet.fromFuzzyString=function(e,t){for(var n=new N.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new N.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new N.TokenSet;o.node.edges["*"]=l}if(0==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new N.TokenSet;o.node.edges["*"]=s}1==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new N.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},N.TokenSet.fromString=function(e){for(var t=new N.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var l=new N.TokenSet;l.final=i,t.edges[a]=l,t=l}}return n},N.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},N.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},N.TokenSet.prototype.intersect=function(e){for(var t=new N.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),l=i.length,s=0;s<a;s++)for(var u=o[s],c=0;c<l;c++){var d=i[c];if(d==u||"*"==u){var f=n.node.edges[d],p=n.qNode.edges[u],h=f.final&&p.final,m=void 0;d in n.output.edges?(m=n.output.edges[d]).final=m.final||h:((m=new N.TokenSet).final=h,n.output.edges[d]=m),r.push({qNode:p,output:m,node:f})}}}return t},N.TokenSet.Builder=function(){this.previousWord="",this.root=new N.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},N.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new N.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},N.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},N.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},N.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},N.Index.prototype.search=function(e){return this.query((function(t){new N.QueryParser(e,t).parse()}))},N.Index.prototype.query=function(e){for(var t=new N.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),l=0;l<this.fields.length;l++)r[this.fields[l]]=new N.Vector;e.call(t,t);for(l=0;l<t.clauses.length;l++){var s=t.clauses[l],u=null,c=N.Set.empty;u=s.usePipeline?this.pipeline.runString(s.term,{fields:s.fields}):[s.term];for(var d=0;d<u.length;d++){var f=u[d];s.term=f;var p=N.TokenSet.fromClause(s),h=this.tokenSet.intersect(p).toArray();if(0===h.length&&s.presence===N.Query.presence.REQUIRED){for(var m=0;m<s.fields.length;m++){a[I=s.fields[m]]=N.Set.empty}break}for(var g=0;g<h.length;g++){var v=h[g],b=this.invertedIndex[v],y=b._index;for(m=0;m<s.fields.length;m++){var w=b[I=s.fields[m]],x=Object.keys(w),_=v+"/"+I,k=new N.Set(x);if(s.presence==N.Query.presence.REQUIRED&&(c=c.union(k),void 0===a[I]&&(a[I]=N.Set.complete)),s.presence!=N.Query.presence.PROHIBITED){if(r[I].upsert(y,s.boost,(function(e,t){return e+t})),!o[_]){for(var E=0;E<x.length;E++){var S,C=x[E],T=new N.FieldRef(C,I),O=w[C];void 0===(S=n[T])?n[T]=new N.MatchData(v,I,O):S.add(v,I,O)}o[_]=!0}}else void 0===i[I]&&(i[I]=N.Set.empty),i[I]=i[I].union(k)}}}if(s.presence===N.Query.presence.REQUIRED)for(m=0;m<s.fields.length;m++){a[I=s.fields[m]]=a[I].intersect(c)}}var D=N.Set.complete,P=N.Set.empty;for(l=0;l<this.fields.length;l++){var I;a[I=this.fields[l]]&&(D=D.intersect(a[I])),i[I]&&(P=P.union(i[I]))}var A=Object.keys(n),L=[],R=Object.create(null);if(t.isNegated()){A=Object.keys(this.fieldVectors);for(l=0;l<A.length;l++){T=A[l];var j=N.FieldRef.fromString(T);n[T]=new N.MatchData}}for(l=0;l<A.length;l++){var M=(j=N.FieldRef.fromString(A[l])).docRef;if(D.contains(M)&&!P.contains(M)){var F,B=this.fieldVectors[j],z=r[j.fieldName].similarity(B);if(void 0!==(F=R[M]))F.score+=z,F.matchData.combine(n[j]);else{var $={ref:M,score:z,matchData:n[j]};R[M]=$,L.push($)}}}return L.sort((function(e,t){return t.score-e.score}))},N.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:N.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},N.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new N.TokenSet.Builder,l=N.Pipeline.load(e.pipeline);e.version!=N.version&&N.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+N.version+"' does not match serialized index '"+e.version+"'");for(var s=0;s<r.length;s++){var u=(d=r[s])[0],c=d[1];n[u]=new N.Vector(c)}for(s=0;s<a.length;s++){var d,f=(d=a[s])[0],p=d[1];i.insert(f),o[f]=p}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=l,new N.Index(t)},N.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=N.tokenizer,this.pipeline=new N.Pipeline,this.searchPipeline=new N.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},N.Builder.prototype.ref=function(e){this._ref=e},N.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},N.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},N.Builder.prototype.k1=function(e){this._k1=e},N.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,l=i?i(e):e[a],s=this.tokenizer(l,{fields:[a]}),u=this.pipeline.run(s),c=new N.FieldRef(n,a),d=Object.create(null);this.fieldTermFrequencies[c]=d,this.fieldLengths[c]=0,this.fieldLengths[c]+=u.length;for(var f=0;f<u.length;f++){var p=u[f];if(null==d[p]&&(d[p]=0),d[p]+=1,null==this.invertedIndex[p]){var h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var m=0;m<r.length;m++)h[r[m]]=Object.create(null);this.invertedIndex[p]=h}null==this.invertedIndex[p][a][n]&&(this.invertedIndex[p][a][n]=Object.create(null));for(var g=0;g<this.metadataWhitelist.length;g++){var v=this.metadataWhitelist[g],b=p.metadata[v];null==this.invertedIndex[p][a][n][v]&&(this.invertedIndex[p][a][n][v]=[]),this.invertedIndex[p][a][n][v].push(b)}}}},N.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=N.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var l=Object.keys(this._fields);for(o=0;o<l.length;o++){var s=l[o];n[s]=n[s]/r[s]}this.averageFieldLength=n},N.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=N.FieldRef.fromString(t[o]),i=a.fieldName,l=this.fieldLengths[a],s=new N.Vector,u=this.fieldTermFrequencies[a],c=Object.keys(u),d=c.length,f=this._fields[i].boost||1,p=this._documents[a.docRef].boost||1,h=0;h<d;h++){var m,g,v,b=c[h],y=u[b],w=this.invertedIndex[b]._index;void 0===r[b]?(m=N.idf(this.invertedIndex[b],this.documentCount),r[b]=m):m=r[b],g=m*((this._k1+1)*y)/(this._k1*(1-this._b+this._b*(l/this.averageFieldLength[i]))+y),g*=f,g*=p,v=Math.round(1e3*g)/1e3,s.insert(w,v)}e[a]=s}this.fieldVectors=e},N.Builder.prototype.createTokenSet=function(){this.tokenSet=N.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},N.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new N.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},N.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},N.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},N.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],l=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var s=0;s<l.length;s++){var u=l[s];null==this.metadata[r][i][u]?this.metadata[r][i][u]=e.metadata[r][i][u]:this.metadata[r][i][u]=this.metadata[r][i][u].concat(e.metadata[r][i][u])}}}},N.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},N.Query=function(e){this.clauses=[],this.allFields=e},N.Query.wildcard=new String("*"),N.Query.wildcard.NONE=0,N.Query.wildcard.LEADING=1,N.Query.wildcard.TRAILING=2,N.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},N.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=N.Query.wildcard.NONE),e.wildcard&N.Query.wildcard.LEADING&&e.term.charAt(0)!=N.Query.wildcard&&(e.term="*"+e.term),e.wildcard&N.Query.wildcard.TRAILING&&e.term.slice(-1)!=N.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=N.Query.presence.OPTIONAL),this.clauses.push(e),this},N.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=N.Query.presence.PROHIBITED)return!1;return!0},N.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,N.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},N.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},N.QueryParseError.prototype=new Error,N.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},N.QueryLexer.prototype.run=function(){for(var e=N.QueryLexer.lexText;e;)e=e(this)},N.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},N.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},N.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},N.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return N.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},N.QueryLexer.prototype.width=function(){return this.pos-this.start},N.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},N.QueryLexer.prototype.backup=function(){this.pos-=1},N.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=N.QueryLexer.EOS&&this.backup()},N.QueryLexer.prototype.more=function(){return this.pos<this.length},N.QueryLexer.EOS="EOS",N.QueryLexer.FIELD="FIELD",N.QueryLexer.TERM="TERM",N.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",N.QueryLexer.BOOST="BOOST",N.QueryLexer.PRESENCE="PRESENCE",N.QueryLexer.lexField=function(e){return e.backup(),e.emit(N.QueryLexer.FIELD),e.ignore(),N.QueryLexer.lexText},N.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(N.QueryLexer.TERM)),e.ignore(),e.more())return N.QueryLexer.lexText},N.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(N.QueryLexer.EDIT_DISTANCE),N.QueryLexer.lexText},N.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(N.QueryLexer.BOOST),N.QueryLexer.lexText},N.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(N.QueryLexer.TERM)},N.QueryLexer.termSeparator=N.tokenizer.separator,N.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==N.QueryLexer.EOS)return N.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return N.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(N.QueryLexer.TERM),N.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(N.QueryLexer.TERM),N.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(N.QueryLexer.PRESENCE),N.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(N.QueryLexer.PRESENCE),N.QueryLexer.lexText;if(t.match(N.QueryLexer.termSeparator))return N.QueryLexer.lexTerm}else e.escapeCharacter()}},N.QueryParser=function(e,t){this.lexer=new N.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},N.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=N.QueryParser.parseClause;e;)e=e(this);return this.query},N.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},N.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},N.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},N.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case N.QueryLexer.PRESENCE:return N.QueryParser.parsePresence;case N.QueryLexer.FIELD:return N.QueryParser.parseField;case N.QueryLexer.TERM:return N.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new N.QueryParseError(n,t.start,t.end)}},N.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=N.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=N.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new N.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new N.QueryParseError(n,t.start,t.end)}switch(r.type){case N.QueryLexer.FIELD:return N.QueryParser.parseField;case N.QueryLexer.TERM:return N.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new N.QueryParseError(n,r.start,r.end)}}},N.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new N.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new N.QueryParseError(r,t.start,t.end)}if(o.type===N.QueryLexer.TERM)return N.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new N.QueryParseError(r,o.start,o.end)}},N.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case N.QueryLexer.TERM:return e.nextClause(),N.QueryParser.parseTerm;case N.QueryLexer.FIELD:return e.nextClause(),N.QueryParser.parseField;case N.QueryLexer.EDIT_DISTANCE:return N.QueryParser.parseEditDistance;case N.QueryLexer.BOOST:return N.QueryParser.parseBoost;case N.QueryLexer.PRESENCE:return e.nextClause(),N.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new N.QueryParseError(r,n.start,n.end)}else e.nextClause()}},N.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new N.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case N.QueryLexer.TERM:return e.nextClause(),N.QueryParser.parseTerm;case N.QueryLexer.FIELD:return e.nextClause(),N.QueryParser.parseField;case N.QueryLexer.EDIT_DISTANCE:return N.QueryParser.parseEditDistance;case N.QueryLexer.BOOST:return N.QueryParser.parseBoost;case N.QueryLexer.PRESENCE:return e.nextClause(),N.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new N.QueryParseError(r,o.start,o.end)}else e.nextClause()}},N.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new N.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case N.QueryLexer.TERM:return e.nextClause(),N.QueryParser.parseTerm;case N.QueryLexer.FIELD:return e.nextClause(),N.QueryParser.parseField;case N.QueryLexer.EDIT_DISTANCE:return N.QueryParser.parseEditDistance;case N.QueryLexer.BOOST:return N.QueryParser.parseBoost;case N.QueryLexer.PRESENCE:return e.nextClause(),N.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new N.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return N})?r.call(t,n,t,e):r)||(e.exports=o)}()},27861:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={icon:"icon_S7Kx",s:"s_AZDZ",m:"m_thRi",l:"l_WHPt",fill:"fill_hNhN",stroke:"stroke_N8dm"}},10153:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={backdrop:"backdrop_Ifvc",navWrapper:"navWrapper_ybYI",nav:"nav_cMpg",visible:"visible_ynAX",wrapper:"wrapper_SWrM",fullscreenButton:"fullscreenButton_Bocn",active:"active_qZD5"}},8633:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toggle:"toggle_K23S",toggleButton:"toggleButton_dl49",darkToggleIcon:"darkToggleIcon_lKkA",lightToggleIcon:"lightToggleIcon_K4TL",toggleButtonDisabled:"toggleButtonDisabled_AAS_"}},79762:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={firstRow:"firstRow_ar1q",secondRow:"secondRow__ww3",backToTop:"backToTop_wDfN",footerLink:"footerLink_sh7M"}},90826:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={colorModeToggle:"colorModeToggle_GSaI",rightSection:"rightSection_CLeF",iconButtonGroup:"iconButtonGroup_ktNv"}},83244:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={dropdownNavbarItem:"dropdownNavbarItem_o23I"}},31259:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={modal:"modal_kLVz",closeButton:"closeButton_Rr0e",header:"header_QwCa"}},61699:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_ONDG",empty:"empty_a7qb",title:"title_uwS_",item:"item_RHYF",itemTitle:"itemTitle_jtAv"}},9592:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_xZfc",textField:"textField_af43"}},1443:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_N57j"}},18589:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_Ooa0",level1:"level1_fpUf",icon:"icon_sZn2",fill:"fill_fkan",stroke:"stroke_j3wH"}},86620:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_JWD1"}},38076:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_EFVO"}},20550:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_ltHz",noResults:"noResults_mD2O",groups:"groups_p1lF",divider:"divider_eGUz",topBar:"topBar_Dtew"}},22473:(e,t,n)=>{"use strict";n.r(t)},11057:(e,t,n)=>{"use strict";n.r(t)},93878:(e,t,n)=>{"use strict";n.r(t)},32497:(e,t,n)=>{"use strict";n.r(t)},97087:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={navbarHideable:"navbarHideable_OoEf",navbarHidden:"navbarHidden_zoxl"}},88822:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={linkContent:"linkContent__x3v",externalLinkIcon:"externalLinkIcon_Qfue"}},65787:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={themedImage:"themedImage_kfRS","themedImage--light":"themedImage--light_BL8e","themedImage--dark":"themedImage--dark_OvIx"}},36459:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_QACb"}},97142:(e,t)=>{"use strict";t.I=function(e){e.client&&(document.head.appendChild(e.msh=document.createElement("style")),e.createRule=function(t,n){var r=t+"{}";n&&(r=n+"{"+r+"}");var o=n?e.msh.sheet:e.sh.sheet,a=o.insertRule(r,o.cssRules.length),i=(o.cssRules||o.rules)[a];if(i.index=a,n){var l=(i.cssRules||i.rules)[0];i.style=l.style,i.styleMap=l.styleMap}return i})}},52099:(e,t,n)=>{"use strict";var r=n(39662).D;t.I=function(e){if(e.client){0;var t=e.kebab;n.prototype.diff=function(e){var n,r=this.decl,o=this.rule.style;for(n in r)void 0===e[n]&&o.removeProperty(n);for(n in e)e[n]!==r[n]&&o.setProperty(t(n),e[n]);this.decl=e},n.prototype.del=function(){r(this.rule)},o.prototype.diff=function(e){var t=this.tree;for(var r in t)if(void 0===e[r]){var o=t[r];for(var a in o)o[a].del()}for(var r in e)if(void 0===t[r])for(var a in e[r]){(s=new n(a,r)).diff(e[r][a]),e[r][a]=s}else{var i=t[r],l=e[r];for(var a in i)l[a]||i[a].del();for(var a in l){var s;(s=i[a])?(s.diff(l[a]),l[a]=s):((s=new n(a,r)).diff(l[a]),l[a]=s)}}this.tree=e},e.VRule=n,e.VSheet=o}function n(t,n){this.rule=e.createRule(t,n),this.decl={}}function o(){this.tree={}}}},87749:(e,t)=>{t.z=function e(t,n,r,o){var a,i,l={},s=!1;for(a in n)"object"!=typeof(i=n[a])&&(s=!0,l[a]=i);for(a in s&&(t[o]||(t[o]={}),t[o][r]=l),n)if("object"==typeof(i=n[a]))if("@"===a[0])e(t,i,r,a);else{var u=a.indexOf("&")>-1,c=r.split(",");if(u)for(var d=0;d<c.length;d++)c[d]=a.replace(/&/g,c[d]);else for(d=0;d<c.length;d++)c[d]=c[d]+" "+a;e(t,i,c.join(","),o)}}},39662:(e,t)=>{t.D=function(e){var t=e.index,n=e.parentStyleSheet,r=n.cssRules||n.rules;for(t=Math.max(t,r.length-1);t>=0;){if(r[t]===e){n.deleteRule(t);break}t--}}},40818:(e,t)=>{"use strict";var n=/[A-Z]/g;t.U=function(e){var t=(e=e||{}).assign||Object.assign;var r=t({raw:"",pfx:"_",client:"object"==typeof window,assign:t,stringify:JSON.stringify,kebab:function(e){return e.replace(n,"-$&").toLowerCase()},decl:function(e,t){return(e=r.kebab(e))+":"+t+";"},hash:function(e){return function(e){for(var t=5381,n=e.length;n;)t=33*t^e.charCodeAt(--n);return"_"+(t>>>0).toString(36)}(r.stringify(e))},selector:function(e,t){return e+(":"===t[0]?"":" ")+t},putRaw:function(e){r.raw+=e}},e);return r.client&&(r.sh||document.head.appendChild(r.sh=document.createElement("style")),r.putRaw=function(e){var t=r.sh.sheet;try{t.insertRule(e,t.cssRules.length)}catch(n){}}),r.put=function(e,t,n){var o,a,i="",l=[];for(o in t)(a=t[o])instanceof Object&&!(a instanceof Array)?l.push(o):i+=r.decl(o,a,e,n);i&&(i=e+"{"+i+"}",r.putRaw(n?n+"{"+i+"}":i));for(var s=0;s<l.length;s++)"@"===(o=l[s])[0]&&"@font-face"!==o?r.putAt(e,t[o],o):r.put(r.selector(e,o),t[o],n)},r.putAt=r.put,r}},74865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},27418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function o(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,a){for(var i,l,s=o(e),u=1;u<arguments.length;u++){for(var c in i=Object(arguments[u]))n.call(i,c)&&(s[c]=i[c]);if(t){l=t(i);for(var d=0;d<l.length;d++)r.call(i,l[d])&&(s[l[d]]=i[l[d]])}}return s}},87594:(e,t)=>{function n(e){let t,n=[];for(let r of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(r))n.push(parseInt(r,10));else if(t=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,r,o,a]=t;if(r&&a){r=parseInt(r),a=parseInt(a);const e=r<a?1:-1;"-"!==o&&".."!==o&&"\u2025"!==o||(a+=e);for(let t=r;t!==a;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},87410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=a[l])}var u=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],u=r.util.type(s);"Object"!==u||a[i(s)]?"Array"!==u||a[i(s)]||(a[i(s)]=!0,e(s,n,l,a)):(a[i(s)]=!0,e(s,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",a),a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var h=0;h<p.length;++h){if(d&&d.cause==f+","+h)return;var m=p[h],g=m.inside,v=!!m.lookbehind,b=!!m.greedy,y=m.alias;if(b&&!m.pattern.global){var w=m.pattern.toString().match(/[imsuy]*$/)[0];m.pattern=RegExp(m.pattern.source,w+"g")}for(var x=m.pattern||m,_=l.next,k=c;_!==t.tail&&!(d&&k>=d.reach);k+=_.value.length,_=_.next){var E=_.value;if(t.length>e.length)return;if(!(E instanceof o)){var S,C=1;if(b){if(!(S=a(x,k,e,v))||S.index>=e.length)break;var T=S.index,O=S.index+S[0].length,D=k;for(D+=_.value.length;T>=D;)D+=(_=_.next).value.length;if(k=D-=_.value.length,_.value instanceof o)continue;for(var P=_;P!==t.tail&&(D<O||"string"==typeof P.value);P=P.next)C++,D+=P.value.length;C--,E=e.slice(k,D),S.index-=k}else if(!(S=a(x,0,E,v)))continue;T=S.index;var N=S[0],I=E.slice(0,T),A=E.slice(T+N.length),L=k+E.length;d&&L>d.reach&&(d.reach=L);var R=_.prev;if(I&&(R=s(t,R,I),k+=I.length),u(t,R,C),_=s(t,R,new o(f,g?r.tokenize(N,g):N,y,N)),A&&s(t,_,A),C>1){var j={cause:f+","+h,reach:L};i(e,t,n,_.prev,k,j),d&&j.reach>d.reach&&(d.reach=j.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var l="";for(var s in a.attributes)l+=" "+s+'="'+(a.attributes[s]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var a=o.content[1],i=o.content[3];if(a&&i&&"code-language"===a.type&&"code-block"===i.type&&"string"==typeof a.content){var l=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r],u=/language-(.+)/.exec(a);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var a=f(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),o.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&o.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return a}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,s(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=o,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var s=a.substring(0,l),d=u(c[o]),p=a.substring(l+o.length),h=[];if(s&&h.push(s),h.push(d),p){var m=[p];e(m),h.push.apply(h,m)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(h)),n+=h.length-1):r.content=h}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var a=n[r];if("string"!=typeof a){var i=a.content;if(Array.isArray(i))if("template-string"===a.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];"RegExp"===e.util.type(a)&&(a=e.languages.javascript[o]={pattern:a});var i=a.inside||{};a.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(o>=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),h=f.indexOf(p);if(h>-1){++o;var m=f.substring(0,h),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),v=f.substring(h+p.length),b=[];m&&b.push.apply(b,i([m])),b.push(g),v&&b.push.apply(b,i([v])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},29901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(29901),o=n(39642),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(16500).resolve(t)],delete Prism.languages[e],n(16500)(t),a.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6726},16500:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=16500},39642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,a){if(!(r in n)){a.push(r);var i=a.indexOf(r);if(i<a.length-1)throw new Error("Circular dependency: "+a.slice(i).join(" -> "));var l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in o(t,a),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var f,p=r(s),h=c;o(h);){for(var m in f={},h){var g=s[m];t(g&&g.modify,(function(e){e in d&&(f[e]=!0)}))}for(var v in d)if(!(v in c))for(var b in p(v))if(b in c){f[v]=!0;break}for(var y in h=f)c[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var o,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)o=r(e);else{var f=i(c.map((function(e){var t=u(e);return delete s[e],t})));a?o=a(f,(function(){return r(e)})):r(e)}return l[e]=o}for(var c in n)u(c);var d=[];for(var f in s)d.push(l[f]);return i(d)}(p,c,t,n)}};return w}}();e.exports=t},92703:(e,t,n)=>{"use strict";var r=n(50414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:(e,t,n)=>{"use strict";var r=n(67294),o=n(27418),a=n(63840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,h={},m={};function g(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var v={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){v[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];v[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){v[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){v[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){v[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){v[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){v[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){v[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){v[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=v.hasOwnProperty(t)?v[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!p.call(m,e)||!p.call(h,e)&&(f.test(e)?m[e]=!0:(h[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,y);v[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,y);v[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,y);v[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){v[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),v.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){v[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var x=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,_=60103,k=60106,E=60107,S=60108,C=60114,T=60109,O=60110,D=60112,P=60113,N=60120,I=60115,A=60116,L=60121,R=60128,j=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var B=Symbol.for;_=B("react.element"),k=B("react.portal"),E=B("react.fragment"),S=B("react.strict_mode"),C=B("react.profiler"),T=B("react.provider"),O=B("react.context"),D=B("react.forward_ref"),P=B("react.suspense"),N=B("react.suspense_list"),I=B("react.memo"),A=B("react.lazy"),L=B("react.block"),B("react.scope"),R=B("react.opaque.id"),j=B("react.debug_trace_mode"),M=B("react.offscreen"),F=B("react.legacy_hidden")}var z,$="function"==typeof Symbol&&Symbol.iterator;function U(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=$&&e[$]||e["@@iterator"])?e:null}function H(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var V=!1;function q(e,t){if(!e||V)return"";V=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var o=s.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,l=a.length-1;1<=i&&0<=l&&o[i]!==a[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==a[l]){if(1!==i||1!==l)do{if(i--,0>--l||o[i]!==a[l])return"\n"+o[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{V=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?H(e):""}function G(e){switch(e.tag){case 5:return H(e.type);case 16:return H("Lazy");case 13:return H("Suspense");case 19:return H("SuspenseList");case 0:case 2:case 15:return e=q(e.type,!1);case 11:return e=q(e.type.render,!1);case 22:return e=q(e.type._render,!1);case 1:return e=q(e.type,!0);default:return""}}function W(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case E:return"Fragment";case k:return"Portal";case C:return"Profiler";case S:return"StrictMode";case P:return"Suspense";case N:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case O:return(e.displayName||"Context")+".Consumer";case T:return(e._context.displayName||"Context")+".Provider";case D:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case I:return W(e.type);case L:return W(e._render);case A:t=e._payload,e=e._init;try{return W(e(t))}catch(n){}}return null}function Z(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function Q(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Y(e){e._valueTracker||(e._valueTracker=function(e){var t=Q(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function X(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Q(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function K(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=Z(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=Z(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,Z(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&K(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ae(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+Z(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:Z(n)}}function ue(e,t){var n=Z(t.value),r=Z(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de="http://www.w3.org/1999/xhtml",fe="http://www.w3.org/2000/svg";function pe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function he(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?pe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,ge,ve=(ge=function(e,t){if(e.namespaceURI!==fe||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ge(e,t)}))}:ge);function be(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ye={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},we=["Webkit","ms","Moz","O"];function xe(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ye.hasOwnProperty(e)&&ye[e]?(""+t).trim():t+"px"}function _e(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=xe(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(ye).forEach((function(e){we.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ye[t]=ye[e]}))}));var ke=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Ee(e,t){if(t){if(ke[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function Se(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Ce(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Te=null,Oe=null,De=null;function Pe(e){if(e=ro(e)){if("function"!=typeof Te)throw Error(i(280));var t=e.stateNode;t&&(t=ao(t),Te(e.stateNode,e.type,t))}}function Ne(e){Oe?De?De.push(e):De=[e]:Oe=e}function Ie(){if(Oe){var e=Oe,t=De;if(De=Oe=null,Pe(e),t)for(e=0;e<t.length;e++)Pe(t[e])}}function Ae(e,t){return e(t)}function Le(e,t,n,r,o){return e(t,n,r,o)}function Re(){}var je=Ae,Me=!1,Fe=!1;function Be(){null===Oe&&null===De||(Re(),Ie())}function ze(e,t){var n=e.stateNode;if(null===n)return null;var r=ao(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var $e=!1;if(d)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){$e=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch(ge){$e=!1}function He(e,t,n,r,o,a,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var Ve=!1,qe=null,Ge=!1,We=null,Ze={onError:function(e){Ve=!0,qe=e}};function Qe(e,t,n,r,o,a,i,l,s){Ve=!1,qe=null,He.apply(Ze,arguments)}function Ye(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Xe(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ke(e){if(Ye(e)!==e)throw Error(i(188))}function Je(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ye(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return Ke(o),e;if(a===r)return Ke(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l){for(s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function et(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var tt,nt,rt,ot,at=!1,it=[],lt=null,st=null,ut=null,ct=new Map,dt=new Map,ft=[],pt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function ht(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":lt=null;break;case"dragenter":case"dragleave":st=null;break;case"mouseover":case"mouseout":ut=null;break;case"pointerover":case"pointerout":ct.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":dt.delete(t.pointerId)}}function gt(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e=ht(t,n,r,o,a),null!==t&&(null!==(t=ro(t))&&nt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function vt(e){var t=no(e.target);if(null!==t){var n=Ye(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Xe(n)))return e.blockedOn=t,void ot(e.lanePriority,(function(){a.unstable_runWithPriority(e.priority,(function(){rt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function bt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=ro(n))&&nt(t),e.blockedOn=n,!1;t.shift()}return!0}function yt(e,t,n){bt(e)&&n.delete(t)}function wt(){for(at=!1;0<it.length;){var e=it[0];if(null!==e.blockedOn){null!==(e=ro(e.blockedOn))&&tt(e);break}for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&it.shift()}null!==lt&&bt(lt)&&(lt=null),null!==st&&bt(st)&&(st=null),null!==ut&&bt(ut)&&(ut=null),ct.forEach(yt),dt.forEach(yt)}function xt(e,t){e.blockedOn===t&&(e.blockedOn=null,at||(at=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,wt)))}function _t(e){function t(t){return xt(t,e)}if(0<it.length){xt(it[0],e);for(var n=1;n<it.length;n++){var r=it[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==lt&&xt(lt,e),null!==st&&xt(st,e),null!==ut&&xt(ut,e),ct.forEach(t),dt.forEach(t),n=0;n<ft.length;n++)(r=ft[n]).blockedOn===e&&(r.blockedOn=null);for(;0<ft.length&&null===(n=ft[0]).blockedOn;)vt(n),null===n.blockedOn&&ft.shift()}function kt(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Et={animationend:kt("Animation","AnimationEnd"),animationiteration:kt("Animation","AnimationIteration"),animationstart:kt("Animation","AnimationStart"),transitionend:kt("Transition","TransitionEnd")},St={},Ct={};function Tt(e){if(St[e])return St[e];if(!Et[e])return e;var t,n=Et[e];for(t in n)if(n.hasOwnProperty(t)&&t in Ct)return St[e]=n[t];return e}d&&(Ct=document.createElement("div").style,"AnimationEvent"in window||(delete Et.animationend.animation,delete Et.animationiteration.animation,delete Et.animationstart.animation),"TransitionEvent"in window||delete Et.transitionend.transition);var Ot=Tt("animationend"),Dt=Tt("animationiteration"),Pt=Tt("animationstart"),Nt=Tt("transitionend"),It=new Map,At=new Map,Lt=["abort","abort",Ot,"animationEnd",Dt,"animationIteration",Pt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Nt,"transitionEnd","waiting","waiting"];function Rt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),At.set(r,t),It.set(r,o),u(o,[r])}}(0,a.unstable_now)();var jt=8;function Mt(e){if(0!=(1&e))return jt=15,1;if(0!=(2&e))return jt=14,2;if(0!=(4&e))return jt=13,4;var t=24&e;return 0!==t?(jt=12,t):0!=(32&e)?(jt=11,32):0!==(t=192&e)?(jt=10,t):0!=(256&e)?(jt=9,256):0!==(t=3584&e)?(jt=8,t):0!=(4096&e)?(jt=7,4096):0!==(t=4186112&e)?(jt=6,t):0!==(t=62914560&e)?(jt=5,t):67108864&e?(jt=4,67108864):0!=(134217728&e)?(jt=3,134217728):0!==(t=805306368&e)?(jt=2,t):0!=(1073741824&e)?(jt=1,1073741824):(jt=8,e)}function Ft(e,t){var n=e.pendingLanes;if(0===n)return jt=0;var r=0,o=0,a=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==a)r=a,o=jt=15;else if(0!==(a=134217727&n)){var s=a&~i;0!==s?(r=Mt(s),o=jt):0!==(l&=a)&&(r=Mt(l),o=jt)}else 0!==(a=n&~i)?(r=Mt(a),o=jt):0!==l&&(r=Mt(l),o=jt);if(0===r)return 0;if(r=n&((0>(r=31-Vt(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Mt(t),o<=jt)return t;jt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-Vt(t)),r|=e[n],t&=~o;return r}function Bt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function zt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=$t(24&~t))?zt(10,t):e;case 10:return 0===(e=$t(192&~t))?zt(8,t):e;case 8:return 0===(e=$t(3584&~t))&&(0===(e=$t(4186112&~t))&&(e=512)),e;case 2:return 0===(t=$t(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function $t(e){return e&-e}function Ut(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ht(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Vt(t)]=n}var Vt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(qt(e)/Gt|0)|0},qt=Math.log,Gt=Math.LN2;var Wt=a.unstable_UserBlockingPriority,Zt=a.unstable_runWithPriority,Qt=!0;function Yt(e,t,n,r){Me||Re();var o=Kt,a=Me;Me=!0;try{Le(o,e,t,n,r)}finally{(Me=a)||Be()}}function Xt(e,t,n,r){Zt(Wt,Kt.bind(null,e,t,n,r))}function Kt(e,t,n,r){var o;if(Qt)if((o=0==(4&t))&&0<it.length&&-1<pt.indexOf(e))e=ht(null,e,t,n,r),it.push(e);else{var a=Jt(e,t,n,r);if(null===a)o&&mt(e,r);else{if(o){if(-1<pt.indexOf(e))return e=ht(a,e,t,n,r),void it.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return lt=gt(lt,e,t,n,r,o),!0;case"dragenter":return st=gt(st,e,t,n,r,o),!0;case"mouseover":return ut=gt(ut,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return ct.set(a,gt(ct.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,dt.set(a,gt(dt.get(a)||null,e,t,n,r,o)),!0}return!1}(a,e,t,n,r))return;mt(e,r)}Rr(e,t,r,null,n)}}}function Jt(e,t,n,r){var o=Ce(r);if(null!==(o=no(o))){var a=Ye(o);if(null===a)o=null;else{var i=a.tag;if(13===i){if(null!==(o=Xe(a)))return o;o=null}else if(3===i){if(a.stateNode.hydrate)return 3===a.tag?a.stateNode.containerInfo:null;o=null}else a!==o&&(o=null)}}return Rr(e,t,r,o,n),null}var en=null,tn=null,nn=null;function rn(){if(nn)return nn;var e,t,n=tn,r=n.length,o="value"in en?en.value:en.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return nn=o.slice(e,1<t?1-t:void 0)}function on(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function an(){return!0}function ln(){return!1}function sn(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?an:ln,this.isPropagationStopped=ln,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=an)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=an)},persist:function(){},isPersistent:an}),t}var un,cn,dn,fn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},pn=sn(fn),hn=o({},fn,{view:0,detail:0}),mn=sn(hn),gn=o({},hn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:On,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==dn&&(dn&&"mousemove"===e.type?(un=e.screenX-dn.screenX,cn=e.screenY-dn.screenY):cn=un=0,dn=e),un)},movementY:function(e){return"movementY"in e?e.movementY:cn}}),vn=sn(gn),bn=sn(o({},gn,{dataTransfer:0})),yn=sn(o({},hn,{relatedTarget:0})),wn=sn(o({},fn,{animationName:0,elapsedTime:0,pseudoElement:0})),xn=o({},fn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),_n=sn(xn),kn=sn(o({},fn,{data:0})),En={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Sn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Cn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Tn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Cn[e])&&!!t[e]}function On(){return Tn}var Dn=o({},hn,{key:function(e){if(e.key){var t=En[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=on(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?Sn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:On,charCode:function(e){return"keypress"===e.type?on(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?on(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Pn=sn(Dn),Nn=sn(o({},gn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),In=sn(o({},hn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:On})),An=sn(o({},fn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Ln=o({},gn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Rn=sn(Ln),jn=[9,13,27,32],Mn=d&&"CompositionEvent"in window,Fn=null;d&&"documentMode"in document&&(Fn=document.documentMode);var Bn=d&&"TextEvent"in window&&!Fn,zn=d&&(!Mn||Fn&&8<Fn&&11>=Fn),$n=String.fromCharCode(32),Un=!1;function Hn(e,t){switch(e){case"keyup":return-1!==jn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Vn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var qn=!1;var Gn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Wn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Gn[e.type]:"textarea"===t}function Zn(e,t,n,r){Ne(r),0<(t=Mr(t,"onChange")).length&&(n=new pn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Qn=null,Yn=null;function Xn(e){Dr(e,0)}function Kn(e){if(X(oo(e)))return e}function Jn(e,t){if("change"===e)return t}var er=!1;if(d){var tr;if(d){var nr="oninput"in document;if(!nr){var rr=document.createElement("div");rr.setAttribute("oninput","return;"),nr="function"==typeof rr.oninput}tr=nr}else tr=!1;er=tr&&(!document.documentMode||9<document.documentMode)}function or(){Qn&&(Qn.detachEvent("onpropertychange",ar),Yn=Qn=null)}function ar(e){if("value"===e.propertyName&&Kn(Yn)){var t=[];if(Zn(t,Yn,e,Ce(e)),e=Xn,Me)e(t);else{Me=!0;try{Ae(e,t)}finally{Me=!1,Be()}}}}function ir(e,t,n){"focusin"===e?(or(),Yn=n,(Qn=t).attachEvent("onpropertychange",ar)):"focusout"===e&&or()}function lr(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Yn)}function sr(e,t){if("click"===e)return Kn(t)}function ur(e,t){if("input"===e||"change"===e)return Kn(t)}var cr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},dr=Object.prototype.hasOwnProperty;function fr(e,t){if(cr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!dr.call(t,n[r])||!cr(e[n[r]],t[n[r]]))return!1;return!0}function pr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function hr(e,t){var n,r=pr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=pr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function gr(){for(var e=window,t=K();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=K((e=t.contentWindow).document)}return t}function vr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var br=d&&"documentMode"in document&&11>=document.documentMode,yr=null,wr=null,xr=null,_r=!1;function kr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;_r||null==yr||yr!==K(r)||("selectionStart"in(r=yr)&&vr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},xr&&fr(xr,r)||(xr=r,0<(r=Mr(wr,"onSelect")).length&&(t=new pn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=yr)))}Rt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Rt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Rt(Lt,2);for(var Er="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Sr=0;Sr<Er.length;Sr++)At.set(Er[Sr],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Cr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Tr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Cr));function Or(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,a,l,s,u){if(Qe.apply(this,arguments),Ve){if(!Ve)throw Error(i(198));var c=qe;Ve=!1,qe=null,Ge||(Ge=!0,We=c)}}(r,t,void 0,e),e.currentTarget=null}function Dr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;Or(o,l,u),a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;Or(o,l,u),a=s}}}if(Ge)throw e=We,Ge=!1,We=null,e}function Pr(e,t){var n=io(t),r=e+"__bubble";n.has(r)||(Lr(t,e,2,!1),n.add(r))}var Nr="_reactListening"+Math.random().toString(36).slice(2);function Ir(e){e[Nr]||(e[Nr]=!0,l.forEach((function(t){Tr.has(t)||Ar(t,!1,e,null),Ar(t,!0,e,null)})))}function Ar(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=n;if("selectionchange"===e&&9!==n.nodeType&&(a=n.ownerDocument),null!==r&&!t&&Tr.has(e)){if("scroll"!==e)return;o|=2,a=r}var i=io(a),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(o|=4),Lr(a,e,o,t),i.add(l))}function Lr(e,t,n,r){var o=At.get(t);switch(void 0===o?2:o){case 0:o=Yt;break;case 1:o=Xt;break;default:o=Kt}n=o.bind(null,t,n,e),o=void 0,!$e||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Rr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o||8===l.nodeType&&l.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===o||8===s.nodeType&&s.parentNode===o))return;i=i.return}for(;null!==l;){if(null===(i=no(l)))return;if(5===(s=i.tag)||6===s){r=a=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Fe)return e(t,n);Fe=!0;try{je(e,t,n)}finally{Fe=!1,Be()}}((function(){var r=a,o=Ce(n),i=[];e:{var l=It.get(e);if(void 0!==l){var s=pn,u=e;switch(e){case"keypress":if(0===on(n))break e;case"keydown":case"keyup":s=Pn;break;case"focusin":u="focus",s=yn;break;case"focusout":u="blur",s=yn;break;case"beforeblur":case"afterblur":s=yn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=vn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=bn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=In;break;case Ot:case Dt:case Pt:s=wn;break;case Nt:s=An;break;case"scroll":s=mn;break;case"wheel":s=Rn;break;case"copy":case"cut":case"paste":s=_n;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=Nn}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,h=r;null!==h;){var m=(p=h).stateNode;if(5===p.tag&&null!==m&&(p=m,null!==f&&(null!=(m=ze(h,f))&&c.push(jr(h,m,p)))),d)break;h=h.return}0<c.length&&(l=new s(l,u,null,n,o),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!no(u)&&!u[eo])&&(s||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?no(u):null)&&(u!==(d=Ye(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=vn,m="onMouseLeave",f="onMouseEnter",h="mouse","pointerout"!==e&&"pointerover"!==e||(c=Nn,m="onPointerLeave",f="onPointerEnter",h="pointer"),d=null==s?l:oo(s),p=null==u?l:oo(u),(l=new c(m,h+"leave",s,n,o)).target=d,l.relatedTarget=p,m=null,no(o)===r&&((c=new c(f,h+"enter",u,n,o)).target=p,c.relatedTarget=d,m=c),d=m,s&&u)e:{for(f=u,h=0,p=c=s;p;p=Fr(p))h++;for(p=0,m=f;m;m=Fr(m))p++;for(;0<h-p;)c=Fr(c),h--;for(;0<p-h;)f=Fr(f),p--;for(;h--;){if(c===f||null!==f&&c===f.alternate)break e;c=Fr(c),f=Fr(f)}c=null}else c=null;null!==s&&Br(i,l,s,c,!1),null!==u&&null!==d&&Br(i,d,u,c,!0)}if("select"===(s=(l=r?oo(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var g=Jn;else if(Wn(l))if(er)g=ur;else{g=lr;var v=ir}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(g=sr);switch(g&&(g=g(e,r))?Zn(i,g,n,o):(v&&v(e,l,r),"focusout"===e&&(v=l._wrapperState)&&v.controlled&&"number"===l.type&&oe(l,"number",l.value)),v=r?oo(r):window,e){case"focusin":(Wn(v)||"true"===v.contentEditable)&&(yr=v,wr=r,xr=null);break;case"focusout":xr=wr=yr=null;break;case"mousedown":_r=!0;break;case"contextmenu":case"mouseup":case"dragend":_r=!1,kr(i,n,o);break;case"selectionchange":if(br)break;case"keydown":case"keyup":kr(i,n,o)}var b;if(Mn)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else qn?Hn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(zn&&"ko"!==n.locale&&(qn||"onCompositionStart"!==y?"onCompositionEnd"===y&&qn&&(b=rn()):(tn="value"in(en=o)?en.value:en.textContent,qn=!0)),0<(v=Mr(r,y)).length&&(y=new kn(y,e,null,n,o),i.push({event:y,listeners:v}),b?y.data=b:null!==(b=Vn(n))&&(y.data=b))),(b=Bn?function(e,t){switch(e){case"compositionend":return Vn(t);case"keypress":return 32!==t.which?null:(Un=!0,$n);case"textInput":return(e=t.data)===$n&&Un?null:e;default:return null}}(e,n):function(e,t){if(qn)return"compositionend"===e||!Mn&&Hn(e,t)?(e=rn(),nn=tn=en=null,qn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return zn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Mr(r,"onBeforeInput")).length&&(o=new kn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=b))}Dr(i,t)}))}function jr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Mr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=ze(e,n))&&r.unshift(jr(e,a,o)),null!=(a=ze(e,t))&&r.push(jr(e,a,o))),e=e.return}return r}function Fr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Br(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,o?null!=(s=ze(n,a))&&i.unshift(jr(n,s,l)):o||null!=(s=ze(n,a))&&i.push(jr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function zr(){}var $r=null,Ur=null;function Hr(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Vr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var qr="function"==typeof setTimeout?setTimeout:void 0,Gr="function"==typeof clearTimeout?clearTimeout:void 0;function Wr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Zr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Qr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Yr=0;var Xr=Math.random().toString(36).slice(2),Kr="__reactFiber$"+Xr,Jr="__reactProps$"+Xr,eo="__reactContainer$"+Xr,to="__reactEvents$"+Xr;function no(e){var t=e[Kr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[eo]||n[Kr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Qr(e);null!==e;){if(n=e[Kr])return n;e=Qr(e)}return t}n=(e=n).parentNode}return null}function ro(e){return!(e=e[Kr]||e[eo])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function oo(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function ao(e){return e[Jr]||null}function io(e){var t=e[to];return void 0===t&&(t=e[to]=new Set),t}var lo=[],so=-1;function uo(e){return{current:e}}function co(e){0>so||(e.current=lo[so],lo[so]=null,so--)}function fo(e,t){so++,lo[so]=e.current,e.current=t}var po={},ho=uo(po),mo=uo(!1),go=po;function vo(e,t){var n=e.type.contextTypes;if(!n)return po;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function bo(e){return null!=(e=e.childContextTypes)}function yo(){co(mo),co(ho)}function wo(e,t,n){if(ho.current!==po)throw Error(i(168));fo(ho,t),fo(mo,n)}function xo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in e))throw Error(i(108,W(t)||"Unknown",a));return o({},n,r)}function _o(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||po,go=ho.current,fo(ho,e),fo(mo,mo.current),!0}function ko(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=xo(e,t,go),r.__reactInternalMemoizedMergedChildContext=e,co(mo),co(ho),fo(ho,e)):co(mo),fo(mo,n)}var Eo=null,So=null,Co=a.unstable_runWithPriority,To=a.unstable_scheduleCallback,Oo=a.unstable_cancelCallback,Do=a.unstable_shouldYield,Po=a.unstable_requestPaint,No=a.unstable_now,Io=a.unstable_getCurrentPriorityLevel,Ao=a.unstable_ImmediatePriority,Lo=a.unstable_UserBlockingPriority,Ro=a.unstable_NormalPriority,jo=a.unstable_LowPriority,Mo=a.unstable_IdlePriority,Fo={},Bo=void 0!==Po?Po:function(){},zo=null,$o=null,Uo=!1,Ho=No(),Vo=1e4>Ho?No:function(){return No()-Ho};function qo(){switch(Io()){case Ao:return 99;case Lo:return 98;case Ro:return 97;case jo:return 96;case Mo:return 95;default:throw Error(i(332))}}function Go(e){switch(e){case 99:return Ao;case 98:return Lo;case 97:return Ro;case 96:return jo;case 95:return Mo;default:throw Error(i(332))}}function Wo(e,t){return e=Go(e),Co(e,t)}function Zo(e,t,n){return e=Go(e),To(e,t,n)}function Qo(){if(null!==$o){var e=$o;$o=null,Oo(e)}Yo()}function Yo(){if(!Uo&&null!==zo){Uo=!0;var e=0;try{var t=zo;Wo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),zo=null}catch(n){throw null!==zo&&(zo=zo.slice(e+1)),To(Ao,Qo),n}finally{Uo=!1}}}var Xo=x.ReactCurrentBatchConfig;function Ko(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Jo=uo(null),ea=null,ta=null,na=null;function ra(){na=ta=ea=null}function oa(e){var t=Jo.current;co(Jo),e.type._context._currentValue=t}function aa(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function ia(e,t){ea=e,na=ta=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Mi=!0),e.firstContext=null)}function la(e,t){if(na!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(na=e,t=1073741823),t={context:e,observedBits:t,next:null},null===ta){if(null===ea)throw Error(i(308));ta=t,ea.dependencies={lanes:0,firstContext:t,responders:null}}else ta=ta.next=t;return e._currentValue}var sa=!1;function ua(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ca(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function da(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function fa(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function pa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function ha(e,t,n,r){var a=e.updateQueue;sa=!1;var i=a.firstBaseUpdate,l=a.lastBaseUpdate,s=a.shared.pending;if(null!==s){a.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=a.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var h=e,m=i;switch(s=t,p=n,m.tag){case 1:if("function"==typeof(h=m.payload)){f=h.call(p,f,s);break e}f=h;break e;case 3:h.flags=-4097&h.flags|64;case 0:if(null==(s="function"==typeof(h=m.payload)?h.call(p,f,s):h))break e;f=o({},f,s);break e;case 2:sa=!0}}null!==i.callback&&(e.flags|=32,null===(s=a.effects)?a.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=a.shared.pending))break;i=s.next,s.next=null,a.lastBaseUpdate=s,a.shared.pending=null}}null===d&&(u=f),a.baseState=u,a.firstBaseUpdate=c,a.lastBaseUpdate=d,$l|=l,e.lanes=l,e.memoizedState=f}}function ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ga=(new r.Component).refs;function va(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ba={isMounted:function(e){return!!(e=e._reactInternals)&&Ye(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=da(r,o);a.payload=t,null!=n&&(a.callback=n),fa(e,a),hs(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=da(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),fa(e,a),hs(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),o=da(n,r);o.tag=2,null!=t&&(o.callback=t),fa(e,o),hs(e,r,n)}};function ya(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!fr(n,r)||!fr(o,a))}function wa(e,t,n){var r=!1,o=po,a=t.contextType;return"object"==typeof a&&null!==a?a=la(a):(o=bo(t)?go:ho.current,a=(r=null!=(r=t.contextTypes))?vo(e,o):po),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ba,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function xa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ba.enqueueReplaceState(t,t.state,null)}function _a(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ga,ua(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=la(a):(a=bo(t)?go:ho.current,o.context=vo(e,a)),ha(e,n,o,r),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(va(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ba.enqueueReplaceState(o,o.state,null),ha(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var ka=Array.isArray;function Ea(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ga&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function Sa(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function Ca(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Gs(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ys(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=Ea(e,t,n),r.return=e,r):((r=Ws(n.type,n.key,n.props,null,e.mode,r)).ref=Ea(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Xs(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Zs(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ys(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case _:return(n=Ws(t.type,t.key,t.props,null,e.mode,n)).ref=Ea(e,null,t),n.return=e,n;case k:return(t=Xs(t,e.mode,n)).return=e,t}if(ka(t)||U(t))return(t=Zs(t,e.mode,n,null)).return=e,t;Sa(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case _:return n.key===o?n.type===E?d(e,t,n.props.children,r,o):u(e,t,n,r):null;case k:return n.key===o?c(e,t,n,r):null}if(ka(n)||U(n))return null!==o?null:d(e,t,n,r,null);Sa(e,n)}return null}function h(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case _:return e=e.get(null===r.key?n:r.key)||null,r.type===E?d(t,e,r.props.children,o,r.key):u(t,e,r,o);case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(ka(r)||U(r))return d(t,e=e.get(n)||null,r,o,null);Sa(t,r)}return null}function m(o,i,l,s){for(var u=null,c=null,d=i,m=i=0,g=null;null!==d&&m<l.length;m++){d.index>m?(g=d,d=null):g=d.sibling;var v=p(o,d,l[m],s);if(null===v){null===d&&(d=g);break}e&&d&&null===v.alternate&&t(o,d),i=a(v,i,m),null===c?u=v:c.sibling=v,c=v,d=g}if(m===l.length)return n(o,d),u;if(null===d){for(;m<l.length;m++)null!==(d=f(o,l[m],s))&&(i=a(d,i,m),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(o,d);m<l.length;m++)null!==(g=h(d,o,m,l[m],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?m:g.key),i=a(g,i,m),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(o,e)})),u}function g(o,l,s,u){var c=U(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,m=l,g=l=0,v=null,b=s.next();null!==m&&!b.done;g++,b=s.next()){m.index>g?(v=m,m=null):v=m.sibling;var y=p(o,m,b.value,u);if(null===y){null===m&&(m=v);break}e&&m&&null===y.alternate&&t(o,m),l=a(y,l,g),null===d?c=y:d.sibling=y,d=y,m=v}if(b.done)return n(o,m),c;if(null===m){for(;!b.done;g++,b=s.next())null!==(b=f(o,b.value,u))&&(l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return c}for(m=r(o,m);!b.done;g++,b=s.next())null!==(b=h(m,o,g,b.value,u))&&(e&&null!==b.alternate&&m.delete(null===b.key?g:b.key),l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return e&&m.forEach((function(e){return t(o,e)})),c}return function(e,r,a,s){var u="object"==typeof a&&null!==a&&a.type===E&&null===a.key;u&&(a=a.props.children);var c="object"==typeof a&&null!==a;if(c)switch(a.$$typeof){case _:e:{for(c=a.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(a.type===E){n(e,u.sibling),(r=o(u,a.props.children)).return=e,e=r;break e}}else if(u.elementType===a.type){n(e,u.sibling),(r=o(u,a.props)).ref=Ea(e,u,a),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}a.type===E?((r=Zs(a.props.children,e.mode,s,a.key)).return=e,e=r):((s=Ws(a.type,a.key,a.props,null,e.mode,s)).ref=Ea(e,r,a),s.return=e,e=s)}return l(e);case k:e:{for(u=a.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),(r=o(r,a.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Xs(a,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,a)).return=e,e=r):(n(e,r),(r=Ys(a,e.mode,s)).return=e,e=r),l(e);if(ka(a))return m(e,r,a,s);if(U(a))return g(e,r,a,s);if(c&&Sa(e,a),void 0===a&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,W(e.type)||"Component"))}return n(e,r)}}var Ta=Ca(!0),Oa=Ca(!1),Da={},Pa=uo(Da),Na=uo(Da),Ia=uo(Da);function Aa(e){if(e===Da)throw Error(i(174));return e}function La(e,t){switch(fo(Ia,t),fo(Na,e),fo(Pa,Da),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:he(null,"");break;default:t=he(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}co(Pa),fo(Pa,t)}function Ra(){co(Pa),co(Na),co(Ia)}function ja(e){Aa(Ia.current);var t=Aa(Pa.current),n=he(t,e.type);t!==n&&(fo(Na,e),fo(Pa,n))}function Ma(e){Na.current===e&&(co(Pa),co(Na))}var Fa=uo(0);function Ba(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var za=null,$a=null,Ua=!1;function Ha(e,t){var n=Vs(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Va(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function qa(e){if(Ua){var t=$a;if(t){var n=t;if(!Va(e,t)){if(!(t=Zr(n.nextSibling))||!Va(e,t))return e.flags=-1025&e.flags|2,Ua=!1,void(za=e);Ha(za,n)}za=e,$a=Zr(t.firstChild)}else e.flags=-1025&e.flags|2,Ua=!1,za=e}}function Ga(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;za=e}function Wa(e){if(e!==za)return!1;if(!Ua)return Ga(e),Ua=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Vr(t,e.memoizedProps))for(t=$a;t;)Ha(e,t),t=Zr(t.nextSibling);if(Ga(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){$a=Zr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}$a=null}}else $a=za?Zr(e.stateNode.nextSibling):null;return!0}function Za(){$a=za=null,Ua=!1}var Qa=[];function Ya(){for(var e=0;e<Qa.length;e++)Qa[e]._workInProgressVersionPrimary=null;Qa.length=0}var Xa=x.ReactCurrentDispatcher,Ka=x.ReactCurrentBatchConfig,Ja=0,ei=null,ti=null,ni=null,ri=!1,oi=!1;function ai(){throw Error(i(321))}function ii(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!cr(e[n],t[n]))return!1;return!0}function li(e,t,n,r,o,a){if(Ja=a,ei=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Xa.current=null===e||null===e.memoizedState?Ai:Li,e=n(r,o),oi){a=0;do{if(oi=!1,!(25>a))throw Error(i(301));a+=1,ni=ti=null,t.updateQueue=null,Xa.current=Ri,e=n(r,o)}while(oi)}if(Xa.current=Ii,t=null!==ti&&null!==ti.next,Ja=0,ni=ti=ei=null,ri=!1,t)throw Error(i(300));return e}function si(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ni?ei.memoizedState=ni=e:ni=ni.next=e,ni}function ui(){if(null===ti){var e=ei.alternate;e=null!==e?e.memoizedState:null}else e=ti.next;var t=null===ni?ei.memoizedState:ni.next;if(null!==t)ni=t,ti=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ti=e).memoizedState,baseState:ti.baseState,baseQueue:ti.baseQueue,queue:ti.queue,next:null},null===ni?ei.memoizedState=ni=e:ni=ni.next=e}return ni}function ci(e,t){return"function"==typeof t?t(e):t}function di(e){var t=ui(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ti,o=r.baseQueue,a=n.pending;if(null!==a){if(null!==o){var l=o.next;o.next=a.next,a.next=l}r.baseQueue=o=a,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var s=l=a=null,u=o;do{var c=u.lane;if((Ja&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,a=r):s=s.next=d,ei.lanes|=c,$l|=c}u=u.next}while(null!==u&&u!==o);null===s?a=r:s.next=l,cr(r,t.memoizedState)||(Mi=!0),t.memoizedState=r,t.baseState=a,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function fi(e){var t=ui(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{a=e(a,l.action),l=l.next}while(l!==o);cr(a,t.memoizedState)||(Mi=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function pi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Ja&e)===e)&&(t._workInProgressVersionPrimary=r,Qa.push(t))),e)return n(t._source);throw Qa.push(t),Error(i(350))}function hi(e,t,n,r){var o=Al;if(null===o)throw Error(i(349));var a=t._getVersion,l=a(t._source),s=Xa.current,u=s.useState((function(){return pi(o,t,n)})),c=u[1],d=u[0];u=ni;var f=e.memoizedState,p=f.refs,h=p.getSnapshot,m=f.source;f=f.subscribe;var g=ei;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=a(t._source);if(!cr(l,e)){e=n(t._source),cr(d,e)||(c(e),e=ps(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var s=31-Vt(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(g);o.mutableReadLanes|=r&o.pendingLanes}catch(a){n((function(){throw a}))}}))}),[t,r]),cr(h,n)&&cr(m,t)&&cr(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:d}).dispatch=c=Ni.bind(null,ei,e),u.queue=e,u.baseQueue=null,d=pi(o,t,n),u.memoizedState=u.baseState=d),d}function mi(e,t,n){return hi(ui(),e,t,n)}function gi(e){var t=si();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:e}).dispatch=Ni.bind(null,ei,e),[t.memoizedState,e]}function vi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=ei.updateQueue)?(t={lastEffect:null},ei.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function bi(e){return e={current:e},si().memoizedState=e}function yi(){return ui().memoizedState}function wi(e,t,n,r){var o=si();ei.flags|=e,o.memoizedState=vi(1|t,n,void 0,void 0===r?null:r)}function xi(e,t,n,r){var o=ui();r=void 0===r?null:r;var a=void 0;if(null!==ti){var i=ti.memoizedState;if(a=i.destroy,null!==r&&ii(r,i.deps))return void vi(t,n,a,r)}ei.flags|=e,o.memoizedState=vi(1|t,n,a,r)}function _i(e,t){return wi(516,4,e,t)}function ki(e,t){return xi(516,4,e,t)}function Ei(e,t){return xi(4,2,e,t)}function Si(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Ci(e,t,n){return n=null!=n?n.concat([e]):null,xi(4,2,Si.bind(null,t,e),n)}function Ti(){}function Oi(e,t){var n=ui();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ii(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Di(e,t){var n=ui();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ii(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Pi(e,t){var n=qo();Wo(98>n?98:n,(function(){e(!0)})),Wo(97<n?97:n,(function(){var n=Ka.transition;Ka.transition=1;try{e(!1),t()}finally{Ka.transition=n}}))}function Ni(e,t,n){var r=fs(),o=ps(e),a={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?a.next=a:(a.next=i.next,i.next=a),t.pending=a,i=e.alternate,e===ei||null!==i&&i===ei)oi=ri=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(a.eagerReducer=i,a.eagerState=s,cr(s,l))return}catch(u){}hs(e,o,r)}}var Ii={readContext:la,useCallback:ai,useContext:ai,useEffect:ai,useImperativeHandle:ai,useLayoutEffect:ai,useMemo:ai,useReducer:ai,useRef:ai,useState:ai,useDebugValue:ai,useDeferredValue:ai,useTransition:ai,useMutableSource:ai,useOpaqueIdentifier:ai,unstable_isNewReconciler:!1},Ai={readContext:la,useCallback:function(e,t){return si().memoizedState=[e,void 0===t?null:t],e},useContext:la,useEffect:_i,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,Si.bind(null,t,e),n)},useLayoutEffect:function(e,t){return wi(4,2,e,t)},useMemo:function(e,t){var n=si();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=si();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ni.bind(null,ei,e),[r.memoizedState,e]},useRef:bi,useState:gi,useDebugValue:Ti,useDeferredValue:function(e){var t=gi(e),n=t[0],r=t[1];return _i((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=gi(!1),t=e[0];return bi(e=Pi.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=si();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},hi(r,e,t,n)},useOpaqueIdentifier:function(){if(Ua){var e=!1,t=function(e){return{$$typeof:R,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Yr++).toString(36))),Error(i(355))})),n=gi(t)[1];return 0==(2&ei.mode)&&(ei.flags|=516,vi(5,(function(){n("r:"+(Yr++).toString(36))}),void 0,null)),t}return gi(t="r:"+(Yr++).toString(36)),t},unstable_isNewReconciler:!1},Li={readContext:la,useCallback:Oi,useContext:la,useEffect:ki,useImperativeHandle:Ci,useLayoutEffect:Ei,useMemo:Di,useReducer:di,useRef:yi,useState:function(){return di(ci)},useDebugValue:Ti,useDeferredValue:function(e){var t=di(ci),n=t[0],r=t[1];return ki((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=di(ci)[0];return[yi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ci)[0]},unstable_isNewReconciler:!1},Ri={readContext:la,useCallback:Oi,useContext:la,useEffect:ki,useImperativeHandle:Ci,useLayoutEffect:Ei,useMemo:Di,useReducer:fi,useRef:yi,useState:function(){return fi(ci)},useDebugValue:Ti,useDeferredValue:function(e){var t=fi(ci),n=t[0],r=t[1];return ki((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=fi(ci)[0];return[yi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return fi(ci)[0]},unstable_isNewReconciler:!1},ji=x.ReactCurrentOwner,Mi=!1;function Fi(e,t,n,r){t.child=null===e?Oa(t,null,n,r):Ta(t,e.child,n,r)}function Bi(e,t,n,r,o){n=n.render;var a=t.ref;return ia(t,o),r=li(e,t,n,r,a,o),null===e||Mi?(t.flags|=1,Fi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function zi(e,t,n,r,o,a){if(null===e){var i=n.type;return"function"!=typeof i||qs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ws(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,$i(e,t,i,r,o,a))}return i=e.child,0==(o&a)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:fr)(o,r)&&e.ref===t.ref)?al(e,t,a):(t.flags|=1,(e=Gs(i,r)).ref=t.ref,e.return=t,t.child=e)}function $i(e,t,n,r,o,a){if(null!==e&&fr(e.memoizedProps,r)&&e.ref===t.ref){if(Mi=!1,0==(a&o))return t.lanes=e.lanes,al(e,t,a);0!=(16384&e.flags)&&(Mi=!0)}return Vi(e,t,n,r,a)}function Ui(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},_s(t,n);else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},_s(t,e),null;t.memoizedState={baseLanes:0},_s(t,null!==a?a.baseLanes:n)}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,_s(t,r);return Fi(e,t,o,n),t.child}function Hi(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Vi(e,t,n,r,o){var a=bo(n)?go:ho.current;return a=vo(t,a),ia(t,o),n=li(e,t,n,r,a,o),null===e||Mi?(t.flags|=1,Fi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function qi(e,t,n,r,o){if(bo(n)){var a=!0;_o(t)}else a=!1;if(ia(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),wa(t,n,r),_a(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=la(u):u=vo(t,u=bo(n)?go:ho.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&xa(t,i,r,u),sa=!1;var f=t.memoizedState;i.state=f,ha(t,r,i,o),s=t.memoizedState,l!==r||f!==s||mo.current||sa?("function"==typeof c&&(va(t,n,c,r),s=t.memoizedState),(l=sa||ya(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,ca(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Ko(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=la(s):s=vo(t,s=bo(n)?go:ho.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&xa(t,i,r,s),sa=!1,f=t.memoizedState,i.state=f,ha(t,r,i,o);var h=t.memoizedState;l!==d||f!==h||mo.current||sa?("function"==typeof p&&(va(t,n,p,r),h=t.memoizedState),(u=sa||ya(t,n,u,r,f,h,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,h,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,h,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=h),i.props=r,i.state=h,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Gi(e,t,n,r,a,o)}function Gi(e,t,n,r,o,a){Hi(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&ko(t,n,!1),al(e,t,a);r=t.stateNode,ji.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Ta(t,e.child,null,a),t.child=Ta(t,null,l,a)):Fi(e,t,l,a),t.memoizedState=r.state,o&&ko(t,n,!0),t.child}function Wi(e){var t=e.stateNode;t.pendingContext?wo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&wo(0,t.context,!1),La(e,t.containerInfo)}var Zi,Qi,Yi,Xi={dehydrated:null,retryLane:0};function Ki(e,t,n){var r,o=t.pendingProps,a=Fa.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),fo(Fa,1&a),null===e?(void 0!==o.fallback&&qa(t),e=o.children,a=o.fallback,i?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,t.lanes=33554432,e):((n=Qs({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=tl(e,t,o.children,o.fallback,n),i=t.child,a=e.child.memoizedState,i.memoizedState=null===a?{baseLanes:n}:{baseLanes:a.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Xi,o):(n=el(e,t,o.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var o=e.mode,a=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==a?(a.childLanes=0,a.pendingProps=t):a=Qs(t,o,0,null),n=Zs(n,o,r,null),a.return=e,n.return=e,a.sibling=n,e.child=a,n}function el(e,t,n,r){var o=e.child;return e=o.sibling,n=Gs(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,o){var a=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&a)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Gs(i,l),null!==e?r=Gs(e,r):(r=Zs(r,a,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),aa(e.return,t)}function rl(e,t,n,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:a}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=a)}function ol(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Fi(e,t,r.children,n),0!=(2&(r=Fa.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(fo(Fa,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Ba(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),rl(t,!1,o,n,a,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Ba(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}rl(t,!0,n,null,a,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function al(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),$l|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Gs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Gs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!Ua)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return bo(t.type)&&yo(),null;case 3:return Ra(),co(mo),co(ho),Ya(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Wa(t)?t.flags|=4:r.hydrate||(t.flags|=256)),null;case 5:Ma(t);var a=Aa(Ia.current);if(n=t.type,null!==e&&null!=t.stateNode)Qi(e,t,n,r),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Aa(Pa.current),Wa(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Kr]=t,r[Jr]=l,n){case"dialog":Pr("cancel",r),Pr("close",r);break;case"iframe":case"object":case"embed":Pr("load",r);break;case"video":case"audio":for(e=0;e<Cr.length;e++)Pr(Cr[e],r);break;case"source":Pr("error",r);break;case"img":case"image":case"link":Pr("error",r),Pr("load",r);break;case"details":Pr("toggle",r);break;case"input":ee(r,l),Pr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Pr("invalid",r);break;case"textarea":se(r,l),Pr("invalid",r)}for(var u in Ee(n,l),e=null,l)l.hasOwnProperty(u)&&(a=l[u],"children"===u?"string"==typeof a?r.textContent!==a&&(e=["children",a]):"number"==typeof a&&r.textContent!==""+a&&(e=["children",""+a]):s.hasOwnProperty(u)&&null!=a&&"onScroll"===u&&Pr("scroll",r));switch(n){case"input":Y(r),re(r,l,!0);break;case"textarea":Y(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=zr)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===a.nodeType?a:a.ownerDocument,e===de&&(e=pe(n)),e===de?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Kr]=t,e[Jr]=r,Zi(e,t),t.stateNode=e,u=Se(n,r),n){case"dialog":Pr("cancel",e),Pr("close",e),a=r;break;case"iframe":case"object":case"embed":Pr("load",e),a=r;break;case"video":case"audio":for(a=0;a<Cr.length;a++)Pr(Cr[a],e);a=r;break;case"source":Pr("error",e),a=r;break;case"img":case"image":case"link":Pr("error",e),Pr("load",e),a=r;break;case"details":Pr("toggle",e),a=r;break;case"input":ee(e,r),a=J(e,r),Pr("invalid",e);break;case"option":a=ae(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=o({},r,{value:void 0}),Pr("invalid",e);break;case"textarea":se(e,r),a=le(e,r),Pr("invalid",e);break;default:a=r}Ee(n,a);var c=a;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?_e(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&ve(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&be(e,d):"number"==typeof d&&be(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Pr("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":Y(e),re(e,r,!1);break;case"textarea":Y(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+Z(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=zr)}Hr(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Yi(0,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Aa(Ia.current),Aa(Pa.current),Wa(t)?(r=t.stateNode,n=t.memoizedProps,r[Kr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Kr]=t,t.stateNode=r)}return null;case 13:return co(Fa),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Wa(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Fa.current)?0===Fl&&(Fl=3):(0!==Fl&&3!==Fl||(Fl=4),null===Al||0==(134217727&$l)&&0==(134217727&Ul)||bs(Al,Rl))),(r||n)&&(t.flags|=4),null);case 4:return Ra(),null===e&&Ir(t.stateNode.containerInfo),null;case 10:return oa(t),null;case 19:if(co(Fa),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Fl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Ba(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return fo(Fa,1&Fa.current|2),t.child}e=e.sibling}null!==r.tail&&Vo()>Gl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Ba(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!Ua)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Vo()-r.renderingStartTime>Gl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Vo(),n.sibling=null,t=Fa.current,fo(Fa,l?1&t|2:1&t),n):null;case 23:case 24:return ks(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:bo(e.type)&&yo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Ra(),co(mo),co(ho),Ya(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Ma(e),null;case 13:return co(Fa),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return co(Fa),null;case 4:return Ra(),null;case 10:return oa(e),null;case 23:case 24:return ks(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=G(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Zi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Qi=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,Aa(Pa.current);var i,l=null;switch(n){case"input":a=J(e,a),r=J(e,r),l=[];break;case"option":a=ae(e,a),r=ae(e,r),l=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),l=[];break;case"textarea":a=le(e,a),r=le(e,r),l=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=zr)}for(d in Ee(n,r),n=null,a)if(!r.hasOwnProperty(d)&&a.hasOwnProperty(d)&&null!=a[d])if("style"===d){var u=a[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=a?a[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Pr("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===R?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Yi=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=da(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Yl||(Yl=!0,Xl=r),cl(0,t)},n}function pl(e,t,n){(n=da(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return cl(0,t),r(o)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Kl?Kl=new Set([this]):Kl.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var hl="function"==typeof WeakSet?WeakSet:Set;function ml(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function gl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ko(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Wr(t.stateNode.containerInfo))}throw Error(i(163))}function vl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Ms(n,e),js(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ko(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ma(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ma(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Hr(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&_t(n)))))}throw Error(i(163))}function bl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=xe("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function yl(e,t){if(So&&"function"==typeof So.onCommitFiberUnmount)try{So.onCommitFiberUnmount(Eo,t)}catch(a){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Ms(t,n);else{r=t;try{o()}catch(a){zs(r,a)}}n=n.next}while(n!==e)}break;case 1:if(ml(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(a){zs(t,a)}break;case 5:ml(t);break;case 4:Sl(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function xl(e){return 5===e.tag||3===e.tag||4===e.tag}function _l(e){e:{for(var t=e.return;null!==t;){if(xl(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(be(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||xl(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?kl(e,n,t):El(e,n,t)}function kl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=zr));else if(4!==r&&null!==(e=e.child))for(kl(e,t,n),e=e.sibling;null!==e;)kl(e,t,n),e=e.sibling}function El(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(El(e,t,n),e=e.sibling;null!==e;)El(e,t,n),e=e.sibling}function Sl(e,t){for(var n,r,o=t,a=!1;;){if(!a){a=o.return;e:for(;;){if(null===a)throw Error(i(160));switch(n=a.stateNode,a.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}a=a.return}a=!0}if(5===o.tag||6===o.tag){e:for(var l=e,s=o,u=s;;)if(yl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=o.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(yl(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(a=!1)}o.sibling.return=o.return,o=o.sibling}}function Cl(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var a=t.updateQueue;if(t.updateQueue=null,null!==a){for(n[Jr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),Se(e,o),t=Se(e,r),o=0;o<a.length;o+=2){var l=a[o],s=a[o+1];"style"===l?_e(n,s):"dangerouslySetInnerHTML"===l?ve(n,s):"children"===l?be(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(a=r.value)?ie(n,!!r.multiple,a,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,_t(n.containerInfo)));case 13:return null!==t.memoizedState&&(ql=Vo(),bl(t.child,!0)),void Tl(t);case 19:return void Tl(t);case 23:case 24:return void bl(t,null!==t.memoizedState)}throw Error(i(163))}function Tl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new hl),t.forEach((function(t){var r=Us.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Ol(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Dl=Math.ceil,Pl=x.ReactCurrentDispatcher,Nl=x.ReactCurrentOwner,Il=0,Al=null,Ll=null,Rl=0,jl=0,Ml=uo(0),Fl=0,Bl=null,zl=0,$l=0,Ul=0,Hl=0,Vl=null,ql=0,Gl=1/0;function Wl(){Gl=Vo()+500}var Zl,Ql=null,Yl=!1,Xl=null,Kl=null,Jl=!1,es=null,ts=90,ns=[],rs=[],os=null,as=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Il)?Vo():-1!==ls?ls:ls=Vo()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===qo()?1:2;if(0===ss&&(ss=zl),0!==Xo.transition){0!==us&&(us=null!==Vl?Vl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=qo(),0!=(4&Il)&&98===e?e=zt(12,ss):e=zt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function hs(e,t,n){if(50<as)throw as=0,is=null,Error(i(185));if(null===(e=ms(e,t)))return null;Ht(e,t,n),e===Al&&(Ul|=t,4===Fl&&bs(e,Rl));var r=qo();1===t?0!=(8&Il)&&0==(48&Il)?ys(e):(gs(e,n),0===Il&&(Wl(),Qo())):(0==(4&Il)||98!==r&&99!==r||(null===os?os=new Set([e]):os.add(e)),gs(e,n)),Vl=e}function ms(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,a=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Vt(l),u=1<<s,c=a[s];if(-1===c){if(0==(u&r)||0!=(u&o)){c=t,Mt(u);var d=jt;a[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Ft(e,e===Al?Rl:0),t=jt,0===r)null!==n&&(n!==Fo&&Oo(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Fo&&Oo(n)}15===t?(n=ys.bind(null,e),null===zo?(zo=[n],$o=To(Ao,Yo)):zo.push(n),n=Fo):14===t?n=Zo(99,ys.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Zo(n,vs.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function vs(e){if(ls=-1,us=ss=0,0!=(48&Il))throw Error(i(327));var t=e.callbackNode;if(Rs()&&e.callbackNode!==t)return null;var n=Ft(e,e===Al?Rl:0);if(0===n)return null;var r=n,o=Il;Il|=16;var a=Cs();for(Al===e&&Rl===r||(Wl(),Es(e,r));;)try{Ds();break}catch(s){Ss(e,s)}if(ra(),Pl.current=a,Il=o,null!==Ll?r=0:(Al=null,Rl=0,r=Fl),0!=(zl&Ul))Es(e,0);else if(0!==r){if(2===r&&(Il|=64,e.hydrate&&(e.hydrate=!1,Wr(e.containerInfo)),0!==(n=Bt(e))&&(r=Ts(e,n))),1===r)throw t=Bl,Es(e,0),bs(e,n),gs(e,Vo()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Is(e);break;case 3:if(bs(e,n),(62914560&n)===n&&10<(r=ql+500-Vo())){if(0!==Ft(e,0))break;if(((o=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=qr(Is.bind(null,e),r);break}Is(e);break;case 4:if(bs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var l=31-Vt(n);a=1<<l,(l=r[l])>o&&(o=l),n&=~a}if(n=o,10<(n=(120>(n=Vo()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Dl(n/1960))-n)){e.timeoutHandle=qr(Is.bind(null,e),n);break}Is(e);break;default:throw Error(i(329))}}return gs(e,Vo()),e.callbackNode===t?vs.bind(null,e):null}function bs(e,t){for(t&=~Hl,t&=~Ul,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Vt(t),r=1<<n;e[n]=-1,t&=~r}}function ys(e){if(0!=(48&Il))throw Error(i(327));if(Rs(),e===Al&&0!=(e.expiredLanes&Rl)){var t=Rl,n=Ts(e,t);0!=(zl&Ul)&&(n=Ts(e,t=Ft(e,t)))}else n=Ts(e,t=Ft(e,0));if(0!==e.tag&&2===n&&(Il|=64,e.hydrate&&(e.hydrate=!1,Wr(e.containerInfo)),0!==(t=Bt(e))&&(n=Ts(e,t))),1===n)throw n=Bl,Es(e,0),bs(e,t),gs(e,Vo()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Is(e),gs(e,Vo()),null}function ws(e,t){var n=Il;Il|=1;try{return e(t)}finally{0===(Il=n)&&(Wl(),Qo())}}function xs(e,t){var n=Il;Il&=-2,Il|=8;try{return e(t)}finally{0===(Il=n)&&(Wl(),Qo())}}function _s(e,t){fo(Ml,jl),jl|=t,zl|=t}function ks(){jl=Ml.current,co(Ml)}function Es(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Gr(n)),null!==Ll)for(n=Ll.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&yo();break;case 3:Ra(),co(mo),co(ho),Ya();break;case 5:Ma(r);break;case 4:Ra();break;case 13:case 19:co(Fa);break;case 10:oa(r);break;case 23:case 24:ks()}n=n.return}Al=e,Ll=Gs(e.current,null),Rl=jl=zl=t,Fl=0,Bl=null,Hl=Ul=$l=0}function Ss(e,t){for(;;){var n=Ll;try{if(ra(),Xa.current=Ii,ri){for(var r=ei.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ri=!1}if(Ja=0,ni=ti=ei=null,oi=!1,Nl.current=null,null===n||null===n.return){Fl=1,Bl=t,Ll=null;break}e:{var a=e,i=n.return,l=n,s=t;if(t=Rl,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Fa.current),f=i;do{var p;if(p=13===f.tag){var h=f.memoizedState;if(null!==h)p=null!==h.dehydrated;else{var m=f.memoizedProps;p=void 0!==m.fallback&&(!0!==m.unstable_avoidThisFallback||!d)}}if(p){var g=f.updateQueue;if(null===g){var v=new Set;v.add(u),f.updateQueue=v}else g.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var b=da(-1,1);b.tag=2,fa(l,b)}l.lanes|=1;break e}s=void 0,l=t;var y=a.pingCache;if(null===y?(y=a.pingCache=new dl,s=new Set,y.set(u,s)):void 0===(s=y.get(u))&&(s=new Set,y.set(u,s)),!s.has(l)){s.add(l);var w=$s.bind(null,a,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((W(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Fl&&(Fl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:a=s,f.flags|=4096,t&=-t,f.lanes|=t,pa(f,fl(0,a,t));break e;case 1:a=s;var x=f.type,_=f.stateNode;if(0==(64&f.flags)&&("function"==typeof x.getDerivedStateFromError||null!==_&&"function"==typeof _.componentDidCatch&&(null===Kl||!Kl.has(_)))){f.flags|=4096,t&=-t,f.lanes|=t,pa(f,pl(f,a,t));break e}}f=f.return}while(null!==f)}Ns(n)}catch(k){t=k,Ll===n&&null!==n&&(Ll=n=n.return);continue}break}}function Cs(){var e=Pl.current;return Pl.current=Ii,null===e?Ii:e}function Ts(e,t){var n=Il;Il|=16;var r=Cs();for(Al===e&&Rl===t||Es(e,t);;)try{Os();break}catch(o){Ss(e,o)}if(ra(),Il=n,Pl.current=r,null!==Ll)throw Error(i(261));return Al=null,Rl=0,Fl}function Os(){for(;null!==Ll;)Ps(Ll)}function Ds(){for(;null!==Ll&&!Do();)Ps(Ll)}function Ps(e){var t=Zl(e.alternate,e,jl);e.memoizedProps=e.pendingProps,null===t?Ns(e):Ll=t,Nl.current=null}function Ns(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,jl)))return void(Ll=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&jl)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(Ll=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Ll=t);Ll=t=e}while(null!==t);0===Fl&&(Fl=5)}function Is(e){var t=qo();return Wo(99,As.bind(null,e,t)),null}function As(e,t){do{Rs()}while(null!==es);if(0!=(48&Il))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,a=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<a;){var u=31-Vt(a),c=1<<u;o[u]=0,l[u]=-1,s[u]=-1,a&=~c}if(null!==os&&0==(24&r)&&os.has(e)&&os.delete(e),e===Al&&(Ll=Al=null,Rl=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Il,Il|=32,Nl.current=null,$r=Qt,vr(l=gr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,a=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(C){s=null;break e}var d=0,f=-1,p=-1,h=0,m=0,g=l,v=null;t:for(;;){for(var b;g!==s||0!==a&&3!==g.nodeType||(f=d+a),g!==u||0!==c&&3!==g.nodeType||(p=d+c),3===g.nodeType&&(d+=g.nodeValue.length),null!==(b=g.firstChild);)v=g,g=b;for(;;){if(g===l)break t;if(v===s&&++h===a&&(f=d),v===u&&++m===c&&(p=d),null!==(b=g.nextSibling))break;v=(g=v).parentNode}g=b}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;Ur={focusedElem:l,selectionRange:s},Qt=!1,cs=null,ds=!1,Ql=r;do{try{Ls()}catch(C){if(null===Ql)throw Error(i(330));zs(Ql,C),Ql=Ql.nextEffect}}while(null!==Ql);cs=null,Ql=r;do{try{for(l=e;null!==Ql;){var y=Ql.flags;if(16&y&&be(Ql.stateNode,""),128&y){var w=Ql.alternate;if(null!==w){var x=w.ref;null!==x&&("function"==typeof x?x(null):x.current=null)}}switch(1038&y){case 2:_l(Ql),Ql.flags&=-3;break;case 6:_l(Ql),Ql.flags&=-3,Cl(Ql.alternate,Ql);break;case 1024:Ql.flags&=-1025;break;case 1028:Ql.flags&=-1025,Cl(Ql.alternate,Ql);break;case 4:Cl(Ql.alternate,Ql);break;case 8:Sl(l,s=Ql);var _=s.alternate;wl(s),null!==_&&wl(_)}Ql=Ql.nextEffect}}catch(C){if(null===Ql)throw Error(i(330));zs(Ql,C),Ql=Ql.nextEffect}}while(null!==Ql);if(x=Ur,w=gr(),y=x.focusedElem,l=x.selectionRange,w!==y&&y&&y.ownerDocument&&mr(y.ownerDocument.documentElement,y)){null!==l&&vr(y)&&(w=l.start,void 0===(x=l.end)&&(x=w),"selectionStart"in y?(y.selectionStart=w,y.selectionEnd=Math.min(x,y.value.length)):(x=(w=y.ownerDocument||document)&&w.defaultView||window).getSelection&&(x=x.getSelection(),s=y.textContent.length,_=Math.min(l.start,s),l=void 0===l.end?_:Math.min(l.end,s),!x.extend&&_>l&&(s=l,l=_,_=s),s=hr(y,_),a=hr(y,l),s&&a&&(1!==x.rangeCount||x.anchorNode!==s.node||x.anchorOffset!==s.offset||x.focusNode!==a.node||x.focusOffset!==a.offset)&&((w=w.createRange()).setStart(s.node,s.offset),x.removeAllRanges(),_>l?(x.addRange(w),x.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),x.addRange(w))))),w=[];for(x=y;x=x.parentNode;)1===x.nodeType&&w.push({element:x,left:x.scrollLeft,top:x.scrollTop});for("function"==typeof y.focus&&y.focus(),y=0;y<w.length;y++)(x=w[y]).element.scrollLeft=x.left,x.element.scrollTop=x.top}Qt=!!$r,Ur=$r=null,e.current=n,Ql=r;do{try{for(y=e;null!==Ql;){var k=Ql.flags;if(36&k&&vl(y,Ql.alternate,Ql),128&k){w=void 0;var E=Ql.ref;if(null!==E){var S=Ql.stateNode;Ql.tag,w=S,"function"==typeof E?E(w):E.current=w}}Ql=Ql.nextEffect}}catch(C){if(null===Ql)throw Error(i(330));zs(Ql,C),Ql=Ql.nextEffect}}while(null!==Ql);Ql=null,Bo(),Il=o}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Ql=r;null!==Ql;)t=Ql.nextEffect,Ql.nextEffect=null,8&Ql.flags&&((k=Ql).sibling=null,k.stateNode=null),Ql=t;if(0===(r=e.pendingLanes)&&(Kl=null),1===r?e===is?as++:(as=0,is=e):as=0,n=n.stateNode,So&&"function"==typeof So.onCommitFiberRoot)try{So.onCommitFiberRoot(Eo,n,void 0,64==(64&n.current.flags))}catch(C){}if(gs(e,Vo()),Yl)throw Yl=!1,e=Xl,Xl=null,e;return 0!=(8&Il)||Qo(),null}function Ls(){for(;null!==Ql;){var e=Ql.alternate;ds||null===cs||(0!=(8&Ql.flags)?et(Ql,cs)&&(ds=!0):13===Ql.tag&&Ol(e,Ql)&&et(Ql,cs)&&(ds=!0));var t=Ql.flags;0!=(256&t)&&gl(e,Ql),0==(512&t)||Jl||(Jl=!0,Zo(97,(function(){return Rs(),null}))),Ql=Ql.nextEffect}}function Rs(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Wo(e,Fs)}return!1}function js(e,t){ns.push(t,e),Jl||(Jl=!0,Zo(97,(function(){return Rs(),null})))}function Ms(e,t){rs.push(t,e),Jl||(Jl=!0,Zo(97,(function(){return Rs(),null})))}function Fs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Il))throw Error(i(331));var t=Il;Il|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var o=n[r],a=n[r+1],l=o.destroy;if(o.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){o=n[r],a=n[r+1];try{var s=o.create;o.destroy=s()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Il=t,Qo(),!0}function Bs(e,t,n){fa(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=ms(e,1))&&(Ht(e,1,t),gs(e,t))}function zs(e,t){if(3===e.tag)Bs(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bs(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Kl||!Kl.has(r))){var o=pl(n,e=ul(t,e),1);if(fa(n,o),o=fs(),null!==(n=ms(n,1)))Ht(n,1,o),gs(n,o);else if("function"==typeof r.componentDidCatch&&(null===Kl||!Kl.has(r)))try{r.componentDidCatch(t,e)}catch(a){}break}}n=n.return}}function $s(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Al===e&&(Rl&n)===n&&(4===Fl||3===Fl&&(62914560&Rl)===Rl&&500>Vo()-ql?Es(e,0):Hl|=n),gs(e,t)}function Us(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===qo()?1:2:(0===ss&&(ss=zl),0===(t=$t(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=ms(e,t))&&(Ht(e,t,n),gs(e,n))}function Hs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Vs(e,t,n,r){return new Hs(e,t,n,r)}function qs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Gs(e,t){var n=e.alternate;return null===n?((n=Vs(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ws(e,t,n,r,o,a){var l=2;if(r=e,"function"==typeof e)qs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case E:return Zs(n.children,o,a,t);case j:l=8,o|=16;break;case S:l=8,o|=1;break;case C:return(e=Vs(12,n,t,8|o)).elementType=C,e.type=C,e.lanes=a,e;case P:return(e=Vs(13,n,t,o)).type=P,e.elementType=P,e.lanes=a,e;case N:return(e=Vs(19,n,t,o)).elementType=N,e.lanes=a,e;case M:return Qs(n,o,a,t);case F:return(e=Vs(24,n,t,o)).elementType=F,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case T:l=10;break e;case O:l=9;break e;case D:l=11;break e;case I:l=14;break e;case A:l=16,r=null;break e;case L:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Vs(l,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function Zs(e,t,n,r){return(e=Vs(7,e,r,t)).lanes=n,e}function Qs(e,t,n,r){return(e=Vs(23,e,r,t)).elementType=M,e.lanes=n,e}function Ys(e,t,n){return(e=Vs(6,e,null,t)).lanes=n,e}function Xs(e,t,n){return(t=Vs(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Ks(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ut(0),this.expirationTimes=Ut(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ut(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}function eu(e,t,n,r){var o=t.current,a=fs(),l=ps(o);e:if(n){t:{if(Ye(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(bo(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(bo(u)){n=xo(n,u,s);break e}}n=s}else n=po;return null===t.context?t.context=n:t.pendingContext=n,(t=da(a,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),fa(o,t),hs(o,l,a),l}function tu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function nu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function ru(e,t){nu(e,t),(e=e.alternate)&&nu(e,t)}function ou(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Ks(e,t,null!=n&&!0===n.hydrate),t=Vs(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,ua(t),e[eo]=n.current,Ir(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function au(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function iu(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a._internalRoot;if("function"==typeof o){var l=o;o=function(){var e=tu(i);l.call(e)}}eu(t,i,e,o)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new ou(e,0,t?{hydrate:!0}:void 0)}(n,r),i=a._internalRoot,"function"==typeof o){var s=o;o=function(){var e=tu(i);s.call(e)}}xs((function(){eu(t,i,e,o)}))}return tu(i)}function lu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!au(t))throw Error(i(200));return Js(e,t,null,n)}Zl=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||mo.current)Mi=!0;else{if(0==(n&r)){switch(Mi=!1,t.tag){case 3:Wi(t),Za();break;case 5:ja(t);break;case 1:bo(t.type)&&_o(t);break;case 4:La(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;fo(Jo,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Ki(e,t,n):(fo(Fa,1&Fa.current),null!==(t=al(e,t,n))?t.sibling:null);fo(Fa,1&Fa.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return ol(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),fo(Fa,Fa.current),r)break;return null;case 23:case 24:return t.lanes=0,Ui(e,t,n)}return al(e,t,n)}Mi=0!=(16384&e.flags)}else Mi=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=vo(t,ho.current),ia(t,n),o=li(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,bo(r)){var a=!0;_o(t)}else a=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,ua(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&va(t,r,l,e),o.updater=ba,t.stateNode=o,o._reactInternals=t,_a(t,r,e,n),t=Gi(null,t,r,!0,a,n)}else t.tag=0,Fi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(a=o._init)(o._payload),t.type=o,a=t.tag=function(e){if("function"==typeof e)return qs(e)?1:0;if(null!=e){if((e=e.$$typeof)===D)return 11;if(e===I)return 14}return 2}(o),e=Ko(o,e),a){case 0:t=Vi(null,t,o,e,n);break e;case 1:t=qi(null,t,o,e,n);break e;case 11:t=Bi(null,t,o,e,n);break e;case 14:t=zi(null,t,o,Ko(o.type,e),r,n);break e}throw Error(i(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,Vi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 1:return r=t.type,o=t.pendingProps,qi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 3:if(Wi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ca(e,t),ha(t,r,null,n),(r=t.memoizedState.element)===o)Za(),t=al(e,t,n);else{if((a=(o=t.stateNode).hydrate)&&($a=Zr(t.stateNode.containerInfo.firstChild),za=t,a=Ua=!0),a){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(a=e[o])._workInProgressVersionPrimary=e[o+1],Qa.push(a);for(n=Oa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Fi(e,t,r,n),Za();t=t.child}return t;case 5:return ja(t),null===e&&qa(t),r=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,l=o.children,Vr(r,o)?l=null:null!==a&&Vr(r,a)&&(t.flags|=16),Hi(e,t),Fi(e,t,l,n),t.child;case 6:return null===e&&qa(t),null;case 13:return Ki(e,t,n);case 4:return La(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Ta(t,null,r,n):Fi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Bi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 7:return Fi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Fi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,l=t.memoizedProps,a=o.value;var s=t.type._context;if(fo(Jo,s._currentValue),s._currentValue=a,null!==l)if(s=l.value,0===(a=cr(s,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,a):1073741823))){if(l.children===o.children&&!mo.current){t=al(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&a)){1===s.tag&&((c=da(-1,n&-n)).tag=2,fa(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),aa(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Fi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(a=t.pendingProps).children,ia(t,n),r=r(o=la(o,a.unstable_observedBits)),t.flags|=1,Fi(e,t,r,n),t.child;case 14:return a=Ko(o=t.type,t.pendingProps),zi(e,t,o,a=Ko(o.type,a),r,n);case 15:return $i(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Ko(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,bo(r)?(e=!0,_o(t)):e=!1,ia(t,n),wa(t,r,o),_a(t,r,o,n),Gi(null,t,r,!0,e,n);case 19:return ol(e,t,n);case 23:case 24:return Ui(e,t,n)}throw Error(i(156,t.tag))},ou.prototype.render=function(e){eu(e,this._internalRoot,null,null)},ou.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;eu(null,e,null,(function(){t[eo]=null}))},tt=function(e){13===e.tag&&(hs(e,4,fs()),ru(e,4))},nt=function(e){13===e.tag&&(hs(e,67108864,fs()),ru(e,67108864))},rt=function(e){if(13===e.tag){var t=fs(),n=ps(e);hs(e,n,t),ru(e,n)}},ot=function(e,t){return t()},Te=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=ao(r);if(!o)throw Error(i(90));X(r),ne(r,o)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Ae=ws,Le=function(e,t,n,r,o){var a=Il;Il|=4;try{return Wo(98,e.bind(null,t,n,r,o))}finally{0===(Il=a)&&(Wl(),Qo())}},Re=function(){0==(49&Il)&&(function(){if(null!==os){var e=os;os=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gs(e,Vo())}))}Qo()}(),Rs())},je=function(e,t){var n=Il;Il|=2;try{return e(t)}finally{0===(Il=n)&&(Wl(),Qo())}};var su={Events:[ro,oo,ao,Ne,Ie,Rs,{current:!1}]},uu={findFiberByHostInstance:no,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},cu={bundleType:uu.bundleType,version:uu.version,rendererPackageName:uu.rendererPackageName,rendererConfig:uu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:x.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Je(e))?null:e.stateNode},findFiberByHostInstance:uu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var du=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!du.isDisabled&&du.supportsFiber)try{Eo=du.inject(cu),So=du}catch(ge){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=su,t.createPortal=lu,t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(i(188));throw Error(i(268,Object.keys(e)))}return e=null===(e=Je(t))?null:e.stateNode},t.flushSync=function(e,t){var n=Il;if(0!=(48&n))return e(t);Il|=1;try{if(e)return Wo(99,e.bind(null,t))}finally{Il=n,Qo()}},t.hydrate=function(e,t,n){if(!au(t))throw Error(i(200));return iu(null,e,t,!0,n)},t.render=function(e,t,n){if(!au(t))throw Error(i(200));return iu(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!au(e))throw Error(i(40));return!!e._reactRootContainer&&(xs((function(){iu(null,null,e,!1,(function(){e._reactRootContainer=null,e[eo]=null}))})),!0)},t.unstable_batchedUpdates=ws,t.unstable_createPortal=function(e,t){return lu(e,t,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)},t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!au(n))throw Error(i(200));if(null==e||void 0===e._reactInternals)throw Error(i(38));return iu(e,t,n,!1,r)},t.version="17.0.2"},73935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(64448)},69590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!a(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!a(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!a(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},70405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>q,ql:()=>J});var r=n(67294),o=n(45697),a=n.n(o),i=n(69590),l=n.n(i),s=n(41143),u=n.n(s),c=n(96774),d=n.n(c);function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,h(e,t)}function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}function m(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},v={rel:["amphtml","canonical","alternate"]},b={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),x={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},_=Object.keys(x).reduce((function(e,t){return e[x[t]]=t,e}),{}),k=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},E=function(e){var t=k(e,g.TITLE),n=k(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=k(e,"defaultTitle");return t||r||void 0},S=function(e){return k(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},O=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var l=a[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][u]&&(o[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var l=a[i],s=f({},r[l],o[l]);r[l]=s}return e}),[]).reverse()},D=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},P=function(e){return Array.isArray(e)?e.join(""):e},N=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},I=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},A=[g.NOSCRIPT,g.SCRIPT,g.STYLE],L=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},R=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},j=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[x[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=x[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=j(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=P(t);return o?"<"+e+' data-rh="true" '+o+">"+L(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+L(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return j(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+L(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===A.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var h=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=N(e.metaTags,y),a=N(t,v),i=N(n,b);return{priorityMethods:{toComponent:function(){return[].concat(M(g.META,o.priority),M(g.LINK,a.priority),M(g.SCRIPT,i.priority))},toString:function(){return F(g.META,o.priority,r)+" "+F(g.LINK,a.priority,r)+" "+F(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);p=h.priorityMethods,c=h.linkTags,d=h.metaTags,f=h.scriptTags}return{priority:p,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",o,r),link:F(g.LINK,c,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,a,r),script:F(g.SCRIPT,f,r),style:F(g.STYLE,i,r),title:F(g.TITLE,{title:s,titleAttributes:u},r)}},z=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),H=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),V="undefined"!=typeof document,q=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);q.canUseDOM=V,q.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},q.defaultProps={context:{}},q.displayName="HelmetProvider";var G=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===o.indexOf(s)&&o.push(s);var c=a.indexOf(s);-1!==c&&a.splice(c,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},Z=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;W(g.BODY,e.bodyAttributes),W(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=P(e)),W(g.TITLE,t)}(c,d);var f={baseTag:G(g.BASE,n),linkTags:G(g.LINK,o),metaTags:G(g.META,a),noscriptTags:G(g.NOSCRIPT,i),scriptTags:G(g.SCRIPT,s),styleTags:G(g.STYLE,u)},p={},h={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(h[e]=f[e].oldTags)})),t&&t(),l(e,p,h)},Q=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:k(e,"defer"),encode:k(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:O(g.LINK,["rel","href"],e),metaTags:O(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:O(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:S(e),scriptTags:O(g.SCRIPT,["src","innerHTML"],e),styleTags:O(g.STYLE,["cssText"],e),title:E(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:D(e,"prioritizeSeoTags")});q.canUseDOM?(t=a,Q&&cancelAnimationFrame(Q),t.defer?Q=requestAnimationFrame((function(){Z(t,(function(){Q=null}))})):(Z(t),Q=null)):B&&(o=B(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:H.isRequired},Y.displayName="HelmetDispatcher";var X=["children"],K=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(I(this.props,"helmetData"),I(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return f({},o,((t={})[r.type]=i,t.titleAttributes=f({},a),t));case g.BODY:return f({},o,{bodyAttributes:f({},a)});case g.HTML:return f({},o,{htmlAttributes:f({},a)});default:return f({},o,((n={})[r.type]=f({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=m(r,X),l=Object.keys(i).reduce((function(e,t){return e[_[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,a),s){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=m(e,K),o=f({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof $||(a=new $(a.context,a.instances)),a?r.createElement(Y,f({},o,{context:a.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Y,f({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},69921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,h=n?Symbol.for("react.suspense_list"):60120,m=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,v=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function x(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case g:case m:case s:return e;default:return t}}case o:return t}}}function _(e){return x(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=a,t.Lazy=g,t.Memo=m,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return _(e)||x(e)===c},t.isConcurrentMode=_,t.isContextConsumer=function(e){return x(e)===u},t.isContextProvider=function(e){return x(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return x(e)===f},t.isFragment=function(e){return x(e)===a},t.isLazy=function(e){return x(e)===g},t.isMemo=function(e){return x(e)===m},t.isPortal=function(e){return x(e)===o},t.isProfiler=function(e){return x(e)===l},t.isStrictMode=function(e){return x(e)===i},t.isSuspense=function(e){return x(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===p||e===h||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===m||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===b||e.$$typeof===y||e.$$typeof===w||e.$$typeof===v)},t.typeOf=x},59864:(e,t,n)=>{"use strict";e.exports=n(69921)},68356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(67294),s=n(45697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function h(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var h=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),m=null;function g(){return m||(m=e(h.loader)),m.promise}return u.push(g),"function"==typeof h.webpack&&c.push((function(){if((0,h.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),f=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),m=e(h.loader),r._loadModule()})),g(),r.state={error:m.error,pastDelay:!1,timedOut:!1,loading:m.loading,loaded:m.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(h.modules)&&h.modules.forEach((function(t){e.context.loadable.report(t)})),m.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof h.delay&&(0===h.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),h.delay)),"number"==typeof h.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),h.timeout));var n=function(){t({error:m.error,loaded:m.loaded,loading:m.loading}),e._clearTimeouts()};m.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(h.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?h.render(this.state.loaded,this.props):null},n}(l.Component),a(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function m(e){return h(d,e)}m.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return h(f,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function v(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return v(e)}))}a(g,"propTypes",{report:s.func.isRequired}),a(g,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),m.Capture=g,m.preloadAll=function(){return new Promise((function(e,t){v(u).then(e,t)}))},m.preloadReady=function(){return new Promise((function(e,t){v(c).then(e,e)}))},e.exports=m},33199:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>B,hasTranslate3DSupport:()=>h,isTouch:()=>d,make2dTransformValue:()=>f,make3dTransformValue:()=>p});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},a.apply(this,arguments)};Object.create;Object.create;"function"==typeof SuppressedError&&SuppressedError;var i=n(67294),l="kvfysmfp",s="ufhsfnkm",u=".".concat(l,"{overflow:hidden;touch-action:none}.").concat(s,"{transform-origin: 0 0}"),c="undefined"==typeof window,d=function(){return!c&&("ontouchstart"in window||navigator.maxTouchPoints>0)},f=function(e){var t=e.x,n=e.y,r=e.scale;return"scale(".concat(r,") translate(").concat(t,"px, ").concat(n,"px)")},p=function(e){var t=e.x,n=e.y,r=e.scale;return"scale3d(".concat(r,",").concat(r,", 1) translate3d(").concat(t,"px, ").concat(n,"px, 0)")},h=function(){var e=!c&&window.CSS;return e&&e.supports&&e.supports("transform","translate3d(0,0,0)")},m=Math.min,g=Math.max;function v(e){var t=e.containerDimension,n=e.childDimension,r=e.padding,o=e.centerContained,a=n-t;return a+2*r<=0&&o?[a/2,a/2]:[m(a+r,0)-r,g(0,a+r)]}var b=function(e,t){return t?"".concat(e," ").concat(t):e},y=Math.abs,w=Math.min,x=Math.sqrt,_="undefined"==typeof window,k=!_&&/(Mac)/i.test(navigator.platform),E=function(e){return"drag"===e},S=function(e){return"zoom"===e},C=function(e){return k&&e.ctrlKey},T=function(e){e.stopPropagation(),e.preventDefault()},O=function(e,t){var n=e.x-t.x,r=e.y-t.y;return x(n*n+r*r)},D=function(e,t){var n=O(e[0],e[1]);return O(t[0],t[1])/n},P=function(e){return-Math.cos(e*Math.PI)/2+.5},N=function(e){return{x:e.pageX,y:e.pageY}},I=function(e){return Array.from(e).map(N)},A=function(e,t){return e+t},L=function(e,t,n){return n<e?e:n>t?t:n},R=function(e){return!(e.ctrlKey||e.metaKey)},j=function(){},M={x:0,y:0},F=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._prevDragMovePoint=null,t._containerObserver=null,t._fingers=0,t._firstMove=!0,t._initialOffset=a({},M),t._interaction=null,t._isDoubleTap=!1,t._isOffsetsSet=!1,t._lastDragPosition=null,t._lastScale=1,t._lastTouchStart=0,t._lastZoomCenter=null,t._listenMouseMove=!1,t._nthZoom=0,t._offset=a({},M),t._startOffset=a({},M),t._startTouches=null,t._updatePlaned=!1,t._wheelTimeOut=null,t._zoomFactor=1,t._initialZoomFactor=1,t._draggingPoint=a({},M),t._ignoreNextClick=!1,t._containerRef=i.createRef(),t._handleClick=function(e){t._ignoreNextClick&&(t._ignoreNextClick=!1,e.stopPropagation())},t._onResize=function(){var e;(null===(e=t._containerRef)||void 0===e?void 0:e.current)&&(t._updateInitialZoomFactor(),t._setupOffsets(),t._update())},t._handlerOnTouchEnd=t._handlerIfEnable((function(e){t._fingers=e.touches.length,t.props.shouldCancelHandledTouchEndEvents&&(S(t._interaction)||E(t._interaction)&&(t._startOffset.x!==t._offset.x||t._startOffset.y!==t._offset.y))&&T(e),E(t._interaction)&&!t._enoughToDrag()&&t._handleClick(e),t._updateInteraction(e)})),t._handlerOnTouchStart=t._handlerIfEnable((function(e){t._firstMove=!0,t._fingers=e.touches.length,t._detectDoubleTap(e)})),t._handlerOnTouchMove=t._handlerIfEnable((function(e){t._isDoubleTap||(t._collectInertia(e),t._firstMove?(t._updateInteraction(e),t._interaction&&T(e),t._startOffset=a({},t._offset),t._startTouches=I(e.touches)):(S(t._interaction)?t._startTouches&&2===t._startTouches.length&&2===e.touches.length&&t._handleZoom(e,D(t._startTouches,I(e.touches))):E(t._interaction)&&t._handleDrag(e),t._interaction&&(T(e),t._update())),t._firstMove=!1)})),t._handlerWheel=function(e){if(!t.props.shouldInterceptWheel(e)){T(e);var n=e.pageX,r=e.pageY,o=e.deltaY,a=e.deltaMode,i=1;(C(e)||1===a)&&(i=15);var l={touches:[{pageX:n,pageY:r}]},s=t._getOffsetByFirstTouch(l),u=o*i;t._stopAnimation(),t._scaleTo(t._zoomFactor-u/t.props.wheelScaleFactor,s),t._update(),clearTimeout(t._wheelTimeOut),t._wheelTimeOut=setTimeout((function(){return t._sanitize()}),100)}},t._handlers=t.props.isTouch()?[["touchstart",t._handlerOnTouchStart],["touchend",t._handlerOnTouchEnd],["touchmove",t._handlerOnTouchMove]]:[["mousemove",t.simulate(t._handlerOnTouchMove),t.props._document],["mouseup",t.simulate(t._handlerOnTouchEnd),t.props._document],["mousedown",t.simulate(t._handlerOnTouchStart)],["click",t._handleClick],["wheel",t._handlerWheel]],t}return o(t,e),t.prototype._handleDragStart=function(e){this._ignoreNextClick=!0,this.props.onDragStart(),this._stopAnimation(),this._resetInertia(),this._lastDragPosition=null,this._hasInteraction=!0,this._draggingPoint=this._offset,this._handleDrag(e)},t.prototype._handleDrag=function(e){var t=this._getOffsetByFirstTouch(e);this._enoughToDrag()?this._drag(t,this._lastDragPosition):this._virtualDrag(t,this._lastDragPosition),this._offset=this._sanitizeOffset(this._offset),this._lastDragPosition=t},t.prototype._resetInertia=function(){this._velocity=null,this._prevDragMovePoint=null},t.prototype._realizeInertia=function(){var e=this,t=this.props,n=t.inertiaFriction;if(t.inertia&&this._velocity){var r=this._velocity,o=r.x,i=r.y;if(o||i){this._stopAnimation(),this._resetInertia();this._animate((function(){if(i*=n,!(o*=n)&&!i)return e._stopAnimation();var t,r,l=a({},e._offset);if(e._addOffset({x:o,y:i}),e._offset=e._sanitizeOffset(e._offset),t=l,r=e._offset,t.x===r.x&&t.y===r.y)return e._stopAnimation();e._update({isAnimation:!0})}),{duration:9999})}}},t.prototype._collectInertia=function(e){var t=e.touches;if(this.props.inertia){var n,r,o=I(t)[0],a=this._prevDragMovePoint;a&&(this._velocity=(n=o,{x:(r=a).x-n.x,y:r.y-n.y})),this._prevDragMovePoint=o}},t.prototype._handleDragEnd=function(){this.props.onDragEnd(),this._end(),this._realizeInertia()},t.prototype._handleZoomStart=function(){this.props.onZoomStart(),this._stopAnimation(),this._lastScale=1,this._nthZoom=0,this._lastZoomCenter=null,this._hasInteraction=!0},t.prototype._handleZoom=function(e,t){var n,r={x:(n=this._getOffsetTouches(e)).map((function(e){return e.x})).reduce(A,0)/n.length,y:n.map((function(e){return e.y})).reduce(A,0)/n.length},o=t/this._lastScale;this._lastScale=t,this._nthZoom+=1,this._nthZoom>3&&(this._scale(o,r),this._drag(r,this._lastZoomCenter),this.props.enforceBoundsDuringZoom&&(this._offset=this._sanitizeOffset(this._offset))),this._lastZoomCenter=r},t.prototype._handleZoomEnd=function(){this.props.onZoomEnd(),this._end()},t.prototype._handleDoubleTap=function(e){var t=this;if(!this._hasInteraction&&0!==this.props.tapZoomFactor){var n=this.props.doubleTapZoomOutOnMaxScale&&this._zoomFactor===this.props.maxZoom||this.props.doubleTapToggleZoom&&this._zoomFactor>1;this.props.onDoubleTap(),this._ignoreNextClick=!0;var r=this._zoomFactor+this.props.tapZoomFactor,o=this._zoomFactor,a=this._getOffsetByFirstTouch(e);this._isDoubleTap=!0,o>r&&(a=this._getCurrentZoomCenter()),n?this._zoomOutAnimation():this._animate((function(e){t._scaleTo(o+e*(r-o),a)}))}},t.prototype._computeInitialOffset=function(){var e=this._getContainerRect(),t=this._getChildSize(),n=t.width,r=t.height,o=-y(n*this._getInitialZoomFactor()-e.width)/2,a=-y(r*this._getInitialZoomFactor()-e.height)/2;this._initialOffset={x:o,y:a}},t.prototype._resetOffset=function(){this._offset=a({},this._initialOffset)},t.prototype._setupOffsets=function(){this.props.setOffsetsOnce&&this._isOffsetsSet||(this._isOffsetsSet=!0,this._computeInitialOffset(),this._resetOffset())},t.prototype._sanitizeOffset=function(e){var t=this._getContainerRect(),n=this._getChildSize(),r=n.width,o=n.height,a=r*this._getInitialZoomFactor()*this._zoomFactor,i=o*this._getInitialZoomFactor()*this._zoomFactor,l=v({containerDimension:t.width,childDimension:a,padding:this.props.horizontalPadding,centerContained:this.props.centerContained}),s=l[0],u=l[1],c=v({containerDimension:t.height,childDimension:i,padding:this.props.verticalPadding,centerContained:this.props.centerContained}),d=c[0],f=c[1];return{x:L(s,u,e.x),y:L(d,f,e.y)}},t.prototype.alignCenter=function(e){var t=this,n=a({duration:250,animated:!0},e),r=n.x,o=n.y,i=n.scale,l=n.animated,s=n.duration,u=this._zoomFactor,c=a({},this._offset),d=this._getContainerRect(),f={x:d.width/2,y:d.height/2};if(this._zoomFactor=1,this._offset={x:-(f.x-r),y:-(f.y-o)},this._scaleTo(i,f),this._stopAnimation(),!l)return this._update();var p=this._zoomFactor-u,h=this._offset.x-c.x,m=this._offset.y-c.y;this._zoomFactor=u,this._offset=a({},c);this._animate((function(e){var n=c.x+h*e,r=c.y+m*e;t._zoomFactor=u+p*e,t._offset=t._sanitizeOffset({x:n,y:r}),t._update()}),{callback:function(){return t._sanitize()},duration:s})},t.prototype.scaleTo=function(e){var t=this,n=a({duration:250,animated:!0},e),r=n.x,o=n.y,i=n.scale,l=n.animated,s=n.duration,u=this._zoomFactor,c=a({},this._offset);if(this._zoomFactor=1,this._offset={x:0,y:0},this._scaleTo(i,{x:r,y:o}),this._stopAnimation(),!l)return this._update();var d=this._zoomFactor-u,f=this._offset.x-c.x,p=this._offset.y-c.y;this._zoomFactor=u,this._offset=a({},c);this._animate((function(e){var n=c.x+f*e,r=c.y+p*e;t._zoomFactor=u+d*e,t._offset={x:n,y:r},t._update()}),{callback:function(){return t._sanitize()},duration:s})},t.prototype._scaleTo=function(e,t){this._scale(e/this._zoomFactor,t),this._offset=this._sanitizeOffset(this._offset)},t.prototype._scale=function(e,t){e=this._scaleZoomFactor(e),this._addOffset({x:(e-1)*(t.x+this._offset.x),y:(e-1)*(t.y+this._offset.y)}),this.props.onZoomUpdate()},t.prototype._scaleZoomFactor=function(e){var t=this._zoomFactor;return this._zoomFactor*=e,this._zoomFactor=L(this.props.minZoom,this.props.maxZoom,this._zoomFactor),this._zoomFactor/t},t.prototype._canDrag=function(){return this.props.draggableUnZoomed||!((e=this._zoomFactor)>(t=1)-.01&&e<t+.01);var e,t},t.prototype._drag=function(e,t){if(t){var n=-(e.y-t.y),r=-(e.x-t.x);this.props.lockDragAxis?y(r)>y(n)?this._addOffset({x:r,y:0}):this._addOffset({y:n,x:0}):this._addOffset({x:r,y:n}),this.props.onDragUpdate()}},t.prototype._virtualDrag=function(e,t){if(t){var n=-(e.y-t.y),r=-(e.x-t.x);this._draggingPoint={x:r+this._draggingPoint.x,y:n+this._draggingPoint.y}}},t.prototype._addOffset=function(e){var t=this._offset,n=t.x,r=t.y;this._offset={x:n+e.x,y:r+e.y}},t.prototype._sanitize=function(){this._zoomFactor<this.props.zoomOutFactor?(this._resetInertia(),this._zoomOutAnimation()):this._isInsaneOffset()&&this._sanitizeOffsetAnimation()},t.prototype._isInsaneOffset=function(){var e=this._offset,t=this._sanitizeOffset(e);return t.x!==e.x||t.y!==e.y},t.prototype._sanitizeOffsetAnimation=function(){var e=this,t=this._sanitizeOffset(this._offset),n=a({},this._offset);this._animate((function(r){var o=n.x+r*(t.x-n.x),a=n.y+r*(t.y-n.y);e._offset={x:o,y:a},e._update()}))},t.prototype._zoomOutAnimation=function(){var e=this;if(1!==this._zoomFactor){var t=this._zoomFactor,n=this._getCurrentZoomCenter();this._animate((function(r){var o=t+r*(1-t);e._scaleTo(o,n)}))}},t.prototype._getInitialZoomFactor=function(){return this._initialZoomFactor},t.prototype._getCurrentZoomCenter=function(){var e=this._offset,t=e.x,n=e.y,r=t-this._initialOffset.x,o=n-this._initialOffset.y;return{x:-1*t-r/(1/this._zoomFactor-1),y:-1*n-o/(1/this._zoomFactor-1)}},t.prototype._getOffsetByFirstTouch=function(e){return this._getOffsetTouches(e)[0]},t.prototype._getOffsetTouches=function(e){var t=this.props._document,n=t.documentElement,r=t.body,o=this._getContainerRect(),a=o.top,i=o.left,l=n.scrollTop||r.scrollTop,s=n.scrollLeft||r.scrollLeft,u=a+l,c=i+s;return I(e.touches).map((function(e){var t=e.x,n=e.y;return{x:t-c,y:n-u}}))},t.prototype._animate=function(e,t){var n=this,r=(new Date).getTime(),o=a({timeFn:P,callback:function(){},duration:this.props.animationDuration},t),i=o.timeFn,l=o.callback,s=o.duration,u=function(){if(n._inAnimation){var t=(new Date).getTime()-r,o=t/s;t>=s?(e(1),n._stopAnimation(),l(),n._update()):(o=i(o),e(o),n._update({isAnimation:!0}),requestAnimationFrame(u))}};this._inAnimation=!0,requestAnimationFrame(u)},t.prototype._stopAnimation=function(){this._inAnimation=!1},t.prototype._end=function(){this._hasInteraction=!1,this._sanitize(),this._update()},t.prototype._getContainerRect=function(){return this._containerRef.current.getBoundingClientRect()},t.prototype._getChildSize=function(){var e=this._containerRef.current;return function(e){if(e){var t=e.offsetWidth,n=e.offsetHeight;if(t&&n)return{width:t,height:n};var r=getComputedStyle(e),o=parseFloat(r.width),a=parseFloat(r.height);if(a&&o)return{width:o,height:a}}return{width:0,height:0}}(null==e?void 0:e.firstElementChild)},t.prototype._updateInitialZoomFactor=function(){var e=this._getContainerRect(),t=this._getChildSize(),n=e.width/t.width,r=e.height/t.height;this._initialZoomFactor=w(n,r)},t.prototype._bindEvents=function(){var e=this,t=this._containerRef.current;window.ResizeObserver?(this._containerObserver=new ResizeObserver(this._onResize),this._containerObserver.observe(t)):window.addEventListener("resize",this._onResize),this._handlers.forEach((function(e){var n=e[0],r=e[1];(e[2]||t).addEventListener(n,r,!0)})),Array.from(t.querySelectorAll("img")).forEach((function(t){return t.addEventListener("load",e._onResize)}))},t.prototype._unSubscribe=function(){var e=this,t=this._containerRef.current;this._containerObserver&&(this._containerObserver.disconnect(),this._containerObserver=null),window.removeEventListener("resize",this._onResize),this._handlers.forEach((function(e){var n=e[0],r=e[1];(e[2]||t).removeEventListener(n,r,!0)})),Array.from(t.querySelectorAll("img")).forEach((function(t){return t.removeEventListener("load",e._onResize)}))},t.prototype._update=function(e){var t=this;if(!this._updatePlaned){var n=function(){var e=t._getInitialZoomFactor()*t._zoomFactor,n=-t._offset.x/e,r=-t._offset.y/e;t.props.onUpdate({scale:e,x:n,y:r})};if(null==e?void 0:e.isAnimation)return n();this._updatePlaned=!0,requestAnimationFrame((function(){t._updatePlaned=!1,n()}))}},t.prototype._handlerIfEnable=function(e){var t=this;return function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];t.props.enabled&&e.apply(void 0,n)}},t.prototype._setInteraction=function(e,t){var n=this._interaction;n!==e&&(n&&!e&&(S(n)?this._handleZoomEnd():E(n)&&this._handleDragEnd()),S(e)?this._handleZoomStart():E(e)&&this._handleDragStart(t)),this._interaction=e},t.prototype._distanceBetweenNumbers=function(e,t){return e>t?e-t:t-e},t.prototype._enoughToDrag=function(){return this._distanceBetweenNumbers(this._startOffset.x,this._draggingPoint.x)>5||this._distanceBetweenNumbers(this._startOffset.y,this._draggingPoint.y)>5},t.prototype._updateInteraction=function(e){var t=this._fingers;return 2===t?this._setInteraction("zoom",e):1===t&&this._canDrag()?this._setInteraction("drag",e):void this._setInteraction(null,e)},t.prototype._detectDoubleTap=function(e){var t=(new Date).getTime();this._fingers>1&&(this._lastTouchStart=0),t-this._lastTouchStart<300?(T(e),this._handleDoubleTap(e),S(this._interaction)?this._handleZoomEnd():E(this._interaction)&&this._handleDragEnd()):this._isDoubleTap=!1,1===this._fingers&&(this._lastTouchStart=t)},t.prototype.simulate=function(e){var t=this;return function(n){var r=n.pageX,o=n.pageY,a=n.type,i="mouseup"===a;"mousedown"===a&&(n.preventDefault(),t._listenMouseMove=!0),t._listenMouseMove&&(n.touches=i?[]:[{pageX:r,pageY:o}],e(n)),i&&(t._listenMouseMove=!1)}},t.prototype.componentDidMount=function(){this._bindEvents(),this._update()},t.prototype.componentWillUnmount=function(){this._stopAnimation(),this._unSubscribe()},t.prototype.render=function(){var e=this.props,t=e.children,n=e.containerProps,r=i.Children.only(t),o=n||{};return i.createElement(i.Fragment,null,i.createElement("style",null,u),i.createElement("div",a({},o,{ref:this._containerRef,className:b(l,o.className)}),i.cloneElement(r,{className:b(s,r.props.className)})))},t.defaultProps={animationDuration:250,draggableUnZoomed:!0,enforceBoundsDuringZoom:!1,centerContained:!1,enabled:!0,inertia:!0,inertiaFriction:.96,horizontalPadding:0,isTouch:d,lockDragAxis:!1,maxZoom:5,minZoom:.5,onDoubleTap:j,onDragEnd:j,onDragStart:j,onDragUpdate:j,onZoomEnd:j,onZoomStart:j,onZoomUpdate:j,setOffsetsOnce:!1,shouldInterceptWheel:R,shouldCancelHandledTouchEndEvents:!1,tapZoomFactor:1,verticalPadding:0,wheelScaleFactor:1500,zoomOutFactor:1.3,doubleTapZoomOutOnMaxScale:!1,doubleTapToggleZoom:!1,_document:_?null:window.document},t}(i.Component);const B=F},18790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(16550),o=n(87462),a=n(67294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},73727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>c,rU:()=>g});var r=n(16550),o=n(75068),a=n(67294),i=n(42358),l=n(87462),s=n(63366),u=n(38776),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},h=a.forwardRef;void 0===h&&(h=p);var m=h((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==h&&t||n,a.createElement("a",c)}));var g=h((function(e,t){var n=e.component,o=void 0===n?m:n,c=e.replace,g=e.to,v=e.innerRef,b=(0,s.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(g,e.location),e.location),s=r?n.createHref(r):"",m=(0,l.Z)({},b,{href:s,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==h?m.ref=t||v:m.innerRef=v,a.createElement(o,m)}))})),v=function(e){return e},b=a.forwardRef;void 0===b&&(b=v);var y=b((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,h=e.className,m=e.exact,y=e.isActive,w=e.location,x=e.sensitive,_=e.strict,k=e.style,E=e.to,S=e.innerRef,C=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=f(d(E,n),n),s=i.pathname,T=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),O=T?(0,r.LX)(n.pathname,{path:T,exact:m,sensitive:x,strict:_}):null,D=!!(y?y(O,n):O),P="function"==typeof h?h(D):h,N="function"==typeof k?k(D):k;D&&(P=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(P,c),N=(0,l.Z)({},N,p));var I=(0,l.Z)({"aria-current":D&&o||null,className:P,style:N,to:i},C);return v!==b?I.ref=t||S:I.innerRef=S,a.createElement(g,I)}))}))},16550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>D,F0:()=>w,LX:()=>O,TH:()=>F,k6:()=>M,l_:()=>S,rs:()=>R,s6:()=>y});var r=n(75068),o=n(67294),a=n(45697),i=n.n(a),l=n(42358),s=n(38776),u=n(87462),c=n(39658),d=n.n(c),f=(n(59864),n(63366)),p=(n(8679),1073741823),h="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};function m(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter((function(t){return t!==e}))},get:function(){return e},set:function(n,r){e=n,t.forEach((function(t){return t(e,r)}))}}}var g=o.createContext||function(e,t){var n,a,l="__create-react-context-"+function(){var e="__global_unique_id__";return h[e]=(h[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).emitter=m(t.props.value),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var u=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return u.contextTypes=((a={})[l]=i().object,a),{Provider:s,Consumer:u}},v=function(e){var t=g();return t.displayName=e,t},b=v("Router-History"),y=v("Router"),w=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;var x=function(e){function t(){return e.apply(this,arguments)||this}(0,r.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.props.onMount&&this.props.onMount.call(this,this)},n.componentDidUpdate=function(e){this.props.onUpdate&&this.props.onUpdate.call(this,this,e)},n.componentWillUnmount=function(){this.props.onUnmount&&this.props.onUnmount.call(this,this)},n.render=function(){return null},t}(o.Component);var _={},k=0;function E(e,t){return void 0===e&&(e="/"),void 0===t&&(t={}),"/"===e?e:function(e){if(_[e])return _[e];var t=d().compile(e);return k<1e4&&(_[e]=t,k++),t}(e)(t,{pretty:!0})}function S(e){var t=e.computedMatch,n=e.to,r=e.push,a=void 0!==r&&r;return o.createElement(y.Consumer,null,(function(e){e||(0,s.Z)(!1);var r=e.history,i=e.staticContext,c=a?r.push:r.replace,d=(0,l.ob)(t?"string"==typeof n?E(n,t.params):(0,u.Z)({},n,{pathname:E(n.pathname,t.params)}):n);return i?(c(d),null):o.createElement(x,{onMount:function(){c(d)},onUpdate:function(e,t){var n=(0,l.ob)(t.to);(0,l.Hp)(n,(0,u.Z)({},d,{key:n.key}))||c(d)},to:n})}))}var C={},T=0;function O(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=C[n]||(C[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return T<1e4&&(r[e]=a,T++),a}(n,{end:a,strict:l,sensitive:u}),o=r.regexp,i=r.keys,s=o.exec(e);if(!s)return null;var c=s[0],f=s.slice(1),p=e===c;return a&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var D=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?O(n.pathname,e.props):t.match,a=(0,u.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,c=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(y.Provider,{value:a},a.match?l?"function"==typeof l?l(a):l:c?o.createElement(c,a):d?d(a):null:"function"==typeof l?l(a):null)}))},t}(o.Component);function P(e){return"/"===e.charAt(0)?e:"/"+e}function N(e,t){if(!e)return t;var n=P(e);return 0!==t.pathname.indexOf(n)?t:(0,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function I(e){return"string"==typeof e?e:(0,l.Ep)(e)}function A(e){return function(){(0,s.Z)(!1)}}function L(){}o.Component;var R=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?O(a.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var j=o.useContext;function M(){return j(b)}function F(){return j(y).location}},76585:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},39658:(e,t,n)=>{var r=n(76585);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var h=e[i],m=n[2],g=n[3],v=n[4],b=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var x=null!=m&&null!=h&&h!==m,_="+"===y||"*"===y,k="?"===y||"*"===y,E=n[2]||c,S=v||b;r.push({name:g||a++,prefix:m||"",delimiter:E,optional:k,repeat:_,partial:x,asterisk:!!w,pattern:S?u(S):w?".*":"[^"+s(E)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",l=t||{},s=(o||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(a+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');a+=c.prefix+d}}else a+=c}return a}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var h=s(n.delimiter||"/"),m=i.slice(-h.length)===h;return o||(i=(m?i.slice(0,-h.length):i)+"(?:"+h+"(?=$))?"),i+=a?"$":o&&m?"":"(?="+h+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(p(e[o],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(a(e,n),t,n)}(e,t,n)}},86718:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(70655).__importDefault(n(45503));t.default=function(e){return!e.prototype?r.default(e):e}},27162:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.divWrapper=void 0;var r=n(70655),o=r.__importStar(n(67294)),a=r.__importDefault(n(86718)),i=o.createElement,l=function(e,t,n,o){var a;return i(e,t?r.__assign(((a={})[t]=o,a),n):r.__assign(r.__assign({},o),n))};t.divWrapper=function(e,t,n,r){return i("div",null,l(e,t,n,r))};t.default=function(e,t,n){void 0===n&&(n=l);var r=function(o,l,s){void 0===l&&(l=t),void 0===s&&(s=null);var u="string"==typeof o;if(u)return function(e){return r(e,o||t,l)};var c=function(t){return i(e,s,(function(e){return n(o,l,t,e)}))};return u?a.default(c):c};return r}},3:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(70655).__importDefault(n(95364)),o=function(e){return[e]};t.default=function(e,t){return void 0===t&&(t=o),function(n){return r.default(n,e.apply(void 0,t(n)))}}},96260:(e,t,n)=>{"use strict";var r=n(70655);r.__importDefault(n(95364)).default,r.__importDefault(n(27162)).default,r.__importDefault(n(3)).default},95364:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(70655),o=n(67294),a=parseInt(o.version.substr(0,o.version.indexOf(".")))>15,i=function(e){return"function"==typeof e};t.default=function(e,t){for(var n=[],l=2;l<arguments.length;l++)n[l-2]=arguments[l];var s=e.render,u=e.children,c=void 0===u?s:u,d=e.component,f=e.comp,p=void 0===f?d:f;return i(c)?c.apply(void 0,r.__spreadArrays([t],n)):p?o.createElement(p,t):c instanceof Array?a?c:o.createElement.apply(void 0,r.__spreadArrays(["div",null],c)):c&&c instanceof Object?"string"==typeof c.type?c:o.cloneElement(c,Object.assign({},c.props,t)):c||null}},45503:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(70655),o=r.__importStar(n(67294));t.default=function(e){var t=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(n,t),n.prototype.render=function(){return e(this.props,this.context)},n}(o.Component);return t}},89164:(e,t,n)=>{"use strict";n.r(t),n.d(t,{createBreakpoint:()=>Le,createGlobalState:()=>_n,createMemo:()=>a,createReducer:()=>c,createReducerContext:()=>i,createStateContext:()=>d,ensuredForwardRef:()=>ce,useAsync:()=>m,useAsyncFn:()=>h,useAsyncRetry:()=>g,useAudio:()=>w,useBattery:()=>D,useBeforeUnload:()=>P,useBoolean:()=>A,useClickAway:()=>R,useCookie:()=>F,useCopyToClipboard:()=>$,useCounter:()=>G,useCss:()=>ee,useCustomCompareEffect:()=>te,useDebounce:()=>re,useDeepCompareEffect:()=>oe,useDefault:()=>ae,useDrop:()=>ie,useDropArea:()=>le,useEffectOnce:()=>se,useEnsuredForwardedRef:()=>ue,useError:()=>me,useEvent:()=>he,useFavicon:()=>ge,useFirstMountState:()=>l,useFullscreen:()=>ye,useGeolocation:()=>we,useGetSet:()=>q,useGetSetState:()=>xe,useHarmonicIntervalFn:()=>Ee,useHash:()=>kn,useHover:()=>Ce,useHoverDirty:()=>Te,useIdle:()=>Pe,useIntersection:()=>Ne,useInterval:()=>Ie,useIsomorphicLayoutEffect:()=>X,useKey:()=>Ae,useKeyPress:()=>Re,useKeyPressEvent:()=>je,useLatest:()=>Me,useLifecycles:()=>Fe,useList:()=>Be,useLocalStorage:()=>ze,useLocation:()=>Ve,useLockBodyScroll:()=>Xe,useLogger:()=>Ke,useLongPress:()=>et,useMap:()=>tt,useMeasure:()=>vn,useMedia:()=>nt,useMediaDevices:()=>rt,useMediatedState:()=>ot,useMethods:()=>at,useMotion:()=>lt,useMount:()=>st,useMountedState:()=>p,useMouse:()=>dt,useMouseHovered:()=>pt,useMouseWheel:()=>ht,useMultiStateValidator:()=>pn,useNetworkState:()=>bt,useNumber:()=>yt,useObservable:()=>wt,useOrientation:()=>_t,usePageLeave:()=>kt,usePermission:()=>Et,usePinchZoom:()=>yn,usePrevious:()=>St,usePreviousDistinct:()=>Tt,usePromise:()=>Ot,useQueue:()=>Dt,useRaf:()=>Pt,useRafLoop:()=>Nt,useRafState:()=>ct,useRendersCount:()=>wn,useScratch:()=>Rt,useScroll:()=>jt,useScrollbarWidth:()=>fn,useScrolling:()=>Mt,useSearchParam:()=>At,useSessionStorage:()=>Ft,useSet:()=>xn,useSetState:()=>v,useShallowCompareEffect:()=>$t,useSize:()=>qt,useSlider:()=>Gt,useSpeech:()=>Zt,useStartTyping:()=>Qt,useStateList:()=>Xt,useStateValidator:()=>cn,useStateWithHistory:()=>Yt,useThrottle:()=>Kt,useThrottleFn:()=>Jt,useTimeout:()=>en,useTimeoutFn:()=>ne,useTitle:()=>nn,useToggle:()=>I,useTween:()=>on,useUnmount:()=>ut,useUnmountPromise:()=>an,useUpdate:()=>H,useUpdateEffect:()=>s,useUpsert:()=>ln,useVibrate:()=>sn,useVideo:()=>un,useWindowScroll:()=>hn,useWindowSize:()=>mn});var r=n(67294),o=n.t(r,2);const a=function(e){return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return(0,r.useMemo)((function(){return e.apply(void 0,t)}),t)}};const i=function(e,t){var n=(0,r.createContext)(void 0);return[function(){var e=(0,r.useContext)(n);if(null==e)throw new Error("useReducerContext must be used inside a ReducerProvider.");return e},function(o){var a=o.children,i=o.initialState;return function(e,t){return(0,r.createElement)(n.Provider,e,t)}({value:(0,r.useReducer)(e,void 0!==i?i:t)},a)},n]};function l(){var e=(0,r.useRef)(!0);return e.current?(e.current=!1,!0):e.current}const s=function(e,t){var n=l();(0,r.useEffect)((function(){if(!n)return e()}),t)};function u(e){return function(t,n){return e.reduceRight((function(e,n){return n(t)(e)}),n)}}const c=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=u(e);return function(e,t,o){void 0===o&&(o=function(e){return e});var a=(0,r.useRef)(o(t)),i=(0,r.useState)(a.current)[1],l=(0,r.useCallback)((function(t){return a.current=e(a.current,t),i(a.current),t}),[e]),u=(0,r.useRef)(n({getState:function(){return a.current},dispatch:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return u.current.apply(u,e)}},l));return s((function(){u.current=n({getState:function(){return a.current},dispatch:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return u.current.apply(u,e)}},l)}),[l]),[a.current,u.current]}};const d=function(e){var t=(0,r.createContext)(void 0);return[function(){var e=(0,r.useContext)(t);if(null==e)throw new Error("useStateContext must be used inside a StateProvider.");return e},function(n){var o=n.children,a=n.initialValue;return function(e,n){return(0,r.createElement)(t.Provider,e,n)}({value:(0,r.useState)(void 0!==a?a:e)},o)},t]};var f=n(70655);function p(){var e=(0,r.useRef)(!1),t=(0,r.useCallback)((function(){return e.current}),[]);return(0,r.useEffect)((function(){return e.current=!0,function(){e.current=!1}}),[]),t}function h(e,t,n){void 0===t&&(t=[]),void 0===n&&(n={loading:!1});var o=(0,r.useRef)(0),a=p(),i=(0,r.useState)(n),l=i[0],s=i[1],u=(0,r.useCallback)((function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=++o.current;return l.loading||s((function(e){return(0,f.__assign)((0,f.__assign)({},e),{loading:!0})})),e.apply(void 0,t).then((function(e){return a()&&r===o.current&&s({value:e,loading:!1}),e}),(function(e){return a()&&r===o.current&&s({error:e,loading:!1}),e}))}),t);return[l,u]}function m(e,t){void 0===t&&(t=[]);var n=h(e,t,{loading:!0}),o=n[0],a=n[1];return(0,r.useEffect)((function(){a()}),[a]),o}const g=function(e,t){void 0===t&&(t=[]);var n=(0,r.useState)(0),o=n[0],a=n[1],i=m(e,(0,f.__spreadArrays)(t,[o])),l=i.loading,s=(0,r.useCallback)((function(){l||a((function(e){return e+1}))}),(0,f.__spreadArrays)(t,[l]));return(0,f.__assign)((0,f.__assign)({},i),{retry:s})};const v=function(e){void 0===e&&(e={});var t=(0,r.useState)(e),n=t[0],o=t[1];return[n,(0,r.useCallback)((function(e){o((function(t){return Object.assign({},t,e instanceof Function?e(t):e)}))}),[])]};function b(e){for(var t=[],n=0;n<e.length;n++)t.push({start:e.start(n),end:e.end(n)});return t}function y(e){return function(t){var n,o;o=r.isValidElement(t)?(n=t).props:t;var a=v({buffered:[],time:0,duration:0,paused:!0,muted:!1,volume:1,playing:!1}),i=a[0],l=a[1],s=(0,r.useRef)(null),u=function(e,t){return function(n){try{t&&t(n)}finally{e&&e(n)}}},c=function(){return l({paused:!1})},d=function(){return l({playing:!0})},p=function(){return l({playing:!1})},h=function(){return l({paused:!0,playing:!1})},m=function(){var e=s.current;e&&l({muted:e.muted,volume:e.volume})},g=function(){var e=s.current;if(e){var t=e.duration,n=e.buffered;l({duration:t,buffered:b(n)})}},y=function(){var e=s.current;e&&l({time:e.currentTime})},w=function(){var e=s.current;e&&l({buffered:b(e.buffered)})};n=n?r.cloneElement(n,(0,f.__assign)((0,f.__assign)({controls:!1},o),{ref:s,onPlay:u(o.onPlay,c),onPlaying:u(o.onPlaying,d),onWaiting:u(o.onWaiting,p),onPause:u(o.onPause,h),onVolumeChange:u(o.onVolumeChange,m),onDurationChange:u(o.onDurationChange,g),onTimeUpdate:u(o.onTimeUpdate,y),onProgress:u(o.onProgress,w)})):r.createElement(e,(0,f.__assign)((0,f.__assign)({controls:!1},o),{ref:s,onPlay:u(o.onPlay,c),onPlaying:u(o.onPlaying,d),onWaiting:u(o.onWaiting,p),onPause:u(o.onPause,h),onVolumeChange:u(o.onVolumeChange,m),onDurationChange:u(o.onDurationChange,g),onTimeUpdate:u(o.onTimeUpdate,y),onProgress:u(o.onProgress,w)}));var x=!1,_={play:function(){var e=s.current;if(e&&!x){var t=e.play();if("object"==typeof t){x=!0;var n=function(){x=!1};t.then(n,n)}return t}},pause:function(){var e=s.current;if(e&&!x)return e.pause()},seek:function(e){var t=s.current;t&&void 0!==i.duration&&(e=Math.min(i.duration,Math.max(0,e)),t.currentTime=e)},volume:function(e){var t=s.current;t&&(e=Math.min(1,Math.max(0,e)),t.volume=e,l({volume:e}))},mute:function(){var e=s.current;e&&(e.muted=!0)},unmute:function(){var e=s.current;e&&(e.muted=!1)}};return(0,r.useEffect)((function(){var e=s.current;e&&(l({volume:e.volume,muted:e.muted,paused:e.paused}),o.autoPlay&&e.paused&&_.play())}),[o.src]),[n,i,_,s]}}const w=y("audio");var x=function(){};function _(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];e&&e.addEventListener&&e.addEventListener.apply(e,t)}function k(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];e&&e.removeEventListener&&e.removeEventListener.apply(e,t)}var E="undefined"!=typeof window,S="undefined"!=typeof navigator,C=n(38252);const T=n.n(C)();var O=S?navigator:void 0;const D=O&&"function"==typeof O.getBattery?function(){var e=(0,r.useState)({isSupported:!0,fetched:!1}),t=e[0],n=e[1];return(0,r.useEffect)((function(){var e=!0,r=null,o=function(){if(e&&r){var o={isSupported:!0,fetched:!0,level:r.level,charging:r.charging,dischargingTime:r.dischargingTime,chargingTime:r.chargingTime};!T(t,o)&&n(o)}};return O.getBattery().then((function(t){e&&(_(r=t,"chargingchange",o),_(r,"chargingtimechange",o),_(r,"dischargingtimechange",o),_(r,"levelchange",o),o())})),function(){e=!1,r&&(k(r,"chargingchange",o),k(r,"chargingtimechange",o),k(r,"dischargingtimechange",o),k(r,"levelchange",o))}}),[]),t}:function(){return{isSupported:!1}};const P=function(e,t){void 0===e&&(e=!0);var n=(0,r.useCallback)((function(n){if("function"!=typeof e||e())return n.preventDefault(),t&&(n.returnValue=t),t}),[e,t]);(0,r.useEffect)((function(){if(e)return _(window,"beforeunload",n),function(){return k(window,"beforeunload",n)}}),[e,n])};var N=function(e,t){return"boolean"==typeof t?t:!e};const I=function(e){return(0,r.useReducer)(N,e)},A=I;var L=["mousedown","touchstart"];const R=function(e,t,n){void 0===n&&(n=L);var o=(0,r.useRef)(t);(0,r.useEffect)((function(){o.current=t}),[t]),(0,r.useEffect)((function(){for(var t=function(t){var n=e.current;n&&!n.contains(t.target)&&o.current(t)},r=0,a=n;r<a.length;r++){var i=a[r];_(document,i,t)}return function(){for(var e=0,r=n;e<r.length;e++){var o=r[e];k(document,o,t)}}}),[n,e])};var j=n(36808),M=n.n(j);const F=function(e){var t=(0,r.useState)((function(){return M().get(e)||null})),n=t[0],o=t[1];return[n,(0,r.useCallback)((function(t,n){M().set(e,t,n),o(t)}),[e]),(0,r.useCallback)((function(){M().remove(e),o(null)}),[e])]};var B=n(20640),z=n.n(B);const $=function(){var e=p(),t=v({value:void 0,error:void 0,noUserInteraction:!0}),n=t[0],o=t[1];return[n,(0,r.useCallback)((function(t){var n,r;if(e())try{if("string"!=typeof t&&"number"!=typeof t){var a=new Error("Cannot copy typeof "+typeof t+" to clipboard, must be a string");return void o({value:t,error:a,noUserInteraction:!0})}if(""===t){a=new Error("Cannot copy empty string to clipboard.");return void o({value:t,error:a,noUserInteraction:!0})}r=t.toString(),n=z()(r),o({value:r,error:void 0,noUserInteraction:n})}catch(a){o({value:r,error:a,noUserInteraction:n})}}),[])]};var U=function(e){return(e+1)%1e6};function H(){return(0,r.useReducer)(U,0)[1]}function V(e,t){return"function"==typeof e?e.length?e(t):e():e}function q(e){var t=(0,r.useRef)(V(e)),n=H();return(0,r.useMemo)((function(){return[function(){return t.current},function(e){t.current=V(e,t.current),n()}]}),[])}function G(e,t,n){void 0===e&&(e=0),void 0===t&&(t=null),void 0===n&&(n=null);var o=V(e);"number"!=typeof o&&console.error("initialValue has to be a number, got "+typeof e),"number"==typeof n?o=Math.max(o,n):null!==n&&console.error("min has to be a number, got "+typeof n),"number"==typeof t?o=Math.min(o,t):null!==t&&console.error("max has to be a number, got "+typeof t);var a=q(o),i=a[0],l=a[1];return[i(),(0,r.useMemo)((function(){var e=function(e){var r=i(),o=V(e,r);r!==o&&("number"==typeof n&&(o=Math.max(o,n)),"number"==typeof t&&(o=Math.min(o,t)),r!==o&&l(o))};return{get:i,set:e,inc:function(t){void 0===t&&(t=1);var n=V(t,i());"number"!=typeof n&&console.error("delta has to be a number or function returning a number, got "+typeof n),e((function(e){return e+n}))},dec:function(t){void 0===t&&(t=1);var n=V(t,i());"number"!=typeof n&&console.error("delta has to be a number or function returning a number, got "+typeof n),e((function(e){return e-n}))},reset:function(t){void 0===t&&(t=o);var n=V(t,i());"number"!=typeof n&&console.error("value has to be a number or function returning a number, got "+typeof n),o=n,e(n)}}}),[o,n,t])]}var W=n(40818),Z=n(97142),Q=n(52099),Y=n(87749);const X=E?r.useLayoutEffect:r.useEffect;var K=(0,W.U)();(0,Z.I)(K),(0,Q.I)(K);var J=0;const ee=function(e){var t=(0,r.useMemo)((function(){return"react-use-css-"+(J++).toString(36)}),[]),n=(0,r.useMemo)((function(){return new K.VSheet}),[]);return X((function(){var r={};return(0,Y.z)(r,e,"."+t,""),n.diff(r),function(){n.diff({})}})),t};const te=function(e,t,n){var o=(0,r.useRef)(void 0);o.current&&n(t,o.current)||(o.current=t),(0,r.useEffect)(e,o.current)};function ne(e,t){void 0===t&&(t=0);var n=(0,r.useRef)(!1),o=(0,r.useRef)(),a=(0,r.useRef)(e),i=(0,r.useCallback)((function(){return n.current}),[]),l=(0,r.useCallback)((function(){n.current=!1,o.current&&clearTimeout(o.current),o.current=setTimeout((function(){n.current=!0,a.current()}),t)}),[t]),s=(0,r.useCallback)((function(){n.current=null,o.current&&clearTimeout(o.current)}),[]);return(0,r.useEffect)((function(){a.current=e}),[e]),(0,r.useEffect)((function(){return l(),s}),[t]),[i,s,l]}function re(e,t,n){void 0===t&&(t=0),void 0===n&&(n=[]);var o=ne(e,t),a=o[0],i=o[1],l=o[2];return(0,r.useEffect)(l,n),[a,i]}const oe=function(e,t){te(e,t,T)};const ae=function(e,t){var n=(0,r.useState)(t),o=n[0],a=n[1];return null==o?[e,a]:[o,a]};const ie=function(e,t){void 0===e&&(e={}),void 0===t&&(t=[]);var n=e.onFiles,o=e.onText,a=e.onUri,i=(0,r.useState)(!1),l=i[0],s=i[1],u=(0,r.useCallback)(s,[]),c=(0,r.useMemo)((function(){return function(e){return function(t,n){var r=t.getData("text/uri-list");if(r)(e.onUri||x)(r,n);else if(t.files&&t.files.length)(e.onFiles||x)(Array.from(t.files),n);else if(n.clipboardData){var o=n.clipboardData.getData("text");(e.onText||x)(o,n)}}}(e)}),[n,o,a]);return(0,r.useEffect)((function(){var e=function(e){e.preventDefault(),u(!0)},t=function(e){e.preventDefault(),u(!0)},n=function(){u(!1)},r=function(){u(!1)},a=function(e){e.preventDefault(),u(!1),c(e.dataTransfer,e)},i=function(e){c(e.clipboardData,e)};return _(document,"dragover",e),_(document,"dragenter",t),_(document,"dragleave",n),_(document,"dragexit",r),_(document,"drop",a),o&&_(document,"paste",i),function(){k(document,"dragover",e),k(document,"dragenter",t),k(document,"dragleave",n),k(document,"dragexit",r),k(document,"drop",a),k(document,"paste",i)}}),(0,f.__spreadArrays)([c],t)),{over:l}};const le=function(e){void 0===e&&(e={});var t=e.onFiles,n=e.onText,o=e.onUri,a=p(),i=(0,r.useState)(!1),l=i[0],s=i[1],u=(0,r.useMemo)((function(){return function(e,t){return function(n,r){var o=n.getData("text/uri-list");o?(e.onUri||x)(o,r):n.files&&n.files.length?(e.onFiles||x)(Array.from(n.files),r):n.items&&n.items.length&&n.items[0].getAsString((function(n){t&&(e.onText||x)(n,r)}))}}(e,a())}),[t,n,o]),c=(0,r.useMemo)((function(){return function(e,t){return{onDragOver:function(e){e.preventDefault()},onDragEnter:function(e){e.preventDefault(),t(!0)},onDragLeave:function(){t(!1)},onDrop:function(n){n.preventDefault(),n.persist(),t(!1),e(n.dataTransfer,n)},onPaste:function(t){t.persist(),e(t.clipboardData,t)}}}(u,s)}),[u,s]);return[c,{over:l}]};const se=function(e){(0,r.useEffect)(e,[])};function ue(e){var t=(0,r.useRef)(e&&e.current);return(0,r.useEffect)((function(){e&&(e.current=t.current)}),[e]),t}function ce(e){return(0,r.forwardRef)((function(t,n){var r=ue(n);return e(t,r)}))}var de=E?window:null,fe=function(e){return!!e.addEventListener},pe=function(e){return!!e.on};const he=function(e,t,n,o){void 0===n&&(n=de),(0,r.useEffect)((function(){if(t&&n)return fe(n)?_(n,e,t,o):pe(n)&&n.on(e,t,o),function(){fe(n)?k(n,e,t,o):pe(n)&&n.off(e,t,o)}}),[e,t,n,JSON.stringify(o)])};const me=function(){var e=(0,r.useState)(null),t=e[0],n=e[1];return(0,r.useEffect)((function(){if(t)throw t}),[t]),(0,r.useCallback)((function(e){n(e)}),[])};const ge=function(e){(0,r.useEffect)((function(){var t=document.querySelector("link[rel*='icon']")||document.createElement("link");t.type="image/x-icon",t.rel="shortcut icon",t.href=e,document.getElementsByTagName("head")[0].appendChild(t)}),[e])};var ve=n(10577),be=n.n(ve);const ye=function(e,t,n){void 0===n&&(n={});var o=n.video,a=n.onClose,i=void 0===a?x:a,l=(0,r.useState)(t),s=l[0],u=l[1];return X((function(){if(t&&e.current){var n=function(){(null==o?void 0:o.current)&&k(o.current,"webkitendfullscreen",n),i()},r=function(){if(be().isEnabled){var e=be().isFullscreen;u(e),e||i()}};if(be().isEnabled){try{be().request(e.current),u(!0)}catch(l){i(l),u(!1)}be().on("change",r)}else o&&o.current&&o.current.webkitEnterFullscreen?(o.current.webkitEnterFullscreen(),_(o.current,"webkitendfullscreen",n),u(!0)):(i(),u(!1));return function(){if(u(!1),be().isEnabled)try{be().off("change",r),be().exit()}catch(a){}else o&&o.current&&o.current.webkitExitFullscreen&&(k(o.current,"webkitendfullscreen",n),o.current.webkitExitFullscreen())}}}),[t,o,e]),s};const we=function(e){var t,n=(0,r.useState)({loading:!0,accuracy:null,altitude:null,altitudeAccuracy:null,heading:null,latitude:null,longitude:null,speed:null,timestamp:Date.now()}),o=n[0],a=n[1],i=!0,l=function(e){i&&a({loading:!1,accuracy:e.coords.accuracy,altitude:e.coords.altitude,altitudeAccuracy:e.coords.altitudeAccuracy,heading:e.coords.heading,latitude:e.coords.latitude,longitude:e.coords.longitude,speed:e.coords.speed,timestamp:e.timestamp})},s=function(e){return i&&a((function(t){return(0,f.__assign)((0,f.__assign)({},t),{loading:!1,error:e})}))};return(0,r.useEffect)((function(){return navigator.geolocation.getCurrentPosition(l,s,e),t=navigator.geolocation.watchPosition(l,s,e),function(){i=!1,navigator.geolocation.clearWatch(t)}}),[]),o};const xe=function(e){void 0===e&&(e={});var t=H(),n=(0,r.useRef)((0,f.__assign)({},e));return[(0,r.useCallback)((function(){return n.current}),[]),(0,r.useCallback)((function(e){e&&(Object.assign(n.current,e),t())}),[])]};var _e=0,ke={};const Ee=function(e,t){void 0===t&&(t=0);var n=(0,r.useRef)((function(){}));(0,r.useEffect)((function(){n.current=e})),(0,r.useEffect)((function(){if(null!==t){var e=function(e,t){var n,r=_e++;if(ke[t])ke[t].listeners[r]=e;else{var o=setInterval((function(){for(var e,n=ke[t].listeners,r=!1,o=0,a=Object.values(n);o<a.length;o++){var i=a[o];try{i()}catch(l){r=!0,e=l}}if(r)throw e}),t);ke[t]={ms:t,timer:o,listeners:(n={},n[r]=e,n)}}return{bucket:ke[t],id:r}}((function(){return n.current()}),t);return function(){return function(e){var t=e.bucket,n=e.id;delete t.listeners[n];var r=!1;for(var o in t.listeners){r=!0;break}r||(clearInterval(t.timer),delete ke[t.ms])}(e)}}}),[t])};var Se=r.useState;const Ce=function(e){var t,n,o=Se(!1),a=o[0],i=o[1];return"function"==typeof e&&(e=e(a)),[r.cloneElement(e,{onMouseEnter:(n=e.props.onMouseEnter,function(e){(n||x)(e),i(!0)}),onMouseLeave:(t=e.props.onMouseLeave,function(e){(t||x)(e),i(!1)})}),a]};const Te=function(e,t){void 0===t&&(t=!0);var n=(0,r.useState)(!1),o=n[0],a=n[1];return(0,r.useEffect)((function(){var n=function(){return a(!0)},r=function(){return a(!1)};t&&e&&e.current&&(_(e.current,"mouseover",n),_(e.current,"mouseout",r));var o=e.current;return function(){t&&o&&(k(o,"mouseover",n),k(o,"mouseout",r))}}),[t,e]),o};function Oe(e,t,n,r){var o,a=!1,i=0;function l(){o&&clearTimeout(o)}function s(){for(var s=arguments.length,u=new Array(s),c=0;c<s;c++)u[c]=arguments[c];var d=this,f=Date.now()-i;function p(){i=Date.now(),n.apply(d,u)}function h(){o=void 0}a||(r&&!o&&p(),l(),void 0===r&&f>e?p():!0!==t&&(o=setTimeout(r?h:p,void 0===r?e-f:e)))}return"boolean"!=typeof t&&(r=n,n=t,t=void 0),s.cancel=function(){l(),a=!0},s}var De=["mousemove","mousedown","resize","keydown","touchstart","wheel"];const Pe=function(e,t,n){void 0===e&&(e=6e4),void 0===t&&(t=!1),void 0===n&&(n=De);var o=(0,r.useState)(t),a=o[0],i=o[1];return(0,r.useEffect)((function(){for(var t,r=!0,o=a,l=function(e){r&&(o=e,i(e))},s=Oe(50,(function(){o&&l(!1),clearTimeout(t),t=setTimeout((function(){return l(!0)}),e)})),u=function(){document.hidden||s()},c=0;c<n.length;c++)_(window,n[c],s);return _(document,"visibilitychange",u),t=setTimeout((function(){return l(!0)}),e),function(){r=!1;for(var e=0;e<n.length;e++)k(window,n[e],s);k(document,"visibilitychange",u)}}),[e,n]),a};const Ne=function(e,t){var n=(0,r.useState)(null),o=n[0],a=n[1];return(0,r.useEffect)((function(){if(e.current&&"function"==typeof IntersectionObserver){var n=new IntersectionObserver((function(e){a(e[0])}),t);return n.observe(e.current),function(){a(null),n.disconnect()}}return function(){}}),[e.current,t.threshold,t.root,t.rootMargin]),o};const Ie=function(e,t){var n=(0,r.useRef)((function(){}));(0,r.useEffect)((function(){n.current=e})),(0,r.useEffect)((function(){if(null!==t){var e=setInterval((function(){return n.current()}),t||0);return function(){return clearInterval(e)}}}),[t])};const Ae=function(e,t,n,o){void 0===t&&(t=x),void 0===n&&(n={}),void 0===o&&(o=[e]);var a=n.event,i=void 0===a?"keydown":a,l=n.target,s=n.options,u=(0,r.useMemo)((function(){var n,r="function"==typeof(n=e)?n:"string"==typeof n?function(e){return e.key===n}:n?function(){return!0}:function(){return!1};return function(e){if(r(e))return t(e)}}),o);he(i,u,l,s)};const Le=function(e){return void 0===e&&(e={laptopL:1440,laptop:1024,tablet:768}),function(){var t=(0,r.useState)(E?window.innerWidth:0),n=t[0],o=t[1];(0,r.useEffect)((function(){var e=function(){o(window.innerWidth)};return e(),_(window,"resize",e),function(){k(window,"resize",e)}}));var a=(0,r.useMemo)((function(){return Object.entries(e).sort((function(e,t){return e[1]>=t[1]?1:-1}))}),[e]),i=a.reduce((function(e,t){var r=t[0],o=t[1];return n>=o?r:e}),a[0][0]);return i}};const Re=function(e){var t=(0,r.useState)([!1,null]),n=t[0],o=t[1];return Ae(e,(function(e){return o([!0,e])}),{event:"keydown"},[n]),Ae(e,(function(e){return o([!1,e])}),{event:"keyup"},[n]),n};const je=function(e,t,n,r){void 0===r&&(r=Re);var o=r(e),a=o[0],i=o[1];s((function(){!a&&n?n(i):a&&t&&t(i)}),[a])};const Me=function(e){var t=(0,r.useRef)(e);return t.current=e,t};const Fe=function(e,t){(0,r.useEffect)((function(){return e&&e(),function(){t&&t()}}),[])};const Be=function(e){void 0===e&&(e=[]);var t=(0,r.useRef)(V(e)),n=H(),o=(0,r.useMemo)((function(){var r={set:function(e){t.current=V(e,t.current),n()},push:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];e.length&&o.set((function(t){return t.concat(e)}))},updateAt:function(e,t){o.set((function(n){var r=n.slice();return r[e]=t,r}))},insertAt:function(e,t){o.set((function(n){var r=n.slice();return e>r.length?r[e]=t:r.splice(e,0,t),r}))},update:function(e,t){o.set((function(n){return n.map((function(n){return e(n,t)?t:n}))}))},updateFirst:function(e,n){var r=t.current.findIndex((function(t){return e(t,n)}));r>=0&&o.updateAt(r,n)},upsert:function(e,n){var r=t.current.findIndex((function(t){return e(t,n)}));r>=0?o.updateAt(r,n):o.push(n)},sort:function(e){o.set((function(t){return t.slice().sort(e)}))},filter:function(e,t){o.set((function(n){return n.slice().filter(e,t)}))},removeAt:function(e){o.set((function(t){var n=t.slice();return n.splice(e,1),n}))},clear:function(){o.set([])},reset:function(){o.set(V(e).slice())}};return r.remove=r.removeAt,r}),[]);return[t.current,o]};const ze=function(e,t,n){if(!E)return[t,x,x];if(!e)throw new Error("useLocalStorage key may not be falsy");var o=n?n.raw?function(e){return e}:n.deserializer:JSON.parse,a=(0,r.useRef)((function(e){try{var r=n?n.raw?String:n.serializer:JSON.stringify,a=localStorage.getItem(e);return null!==a?o(a):(t&&localStorage.setItem(e,r(t)),t)}catch(i){return t}})),i=(0,r.useState)((function(){return a.current(e)})),l=i[0],s=i[1];(0,r.useLayoutEffect)((function(){return s(a.current(e))}),[e]);var u=(0,r.useCallback)((function(t){try{var r="function"==typeof t?t(l):t;if(void 0===r)return;var a=void 0;a=n?n.raw?"string"==typeof r?r:JSON.stringify(r):n.serializer?n.serializer(r):JSON.stringify(r):JSON.stringify(r),localStorage.setItem(e,a),s(o(a))}catch(i){}}),[e,s]),c=(0,r.useCallback)((function(){try{localStorage.removeItem(e),s(void 0)}catch(i){}}),[e,s]);return[l,u,c]};var $e=function(e){var t=window.history,n=t[e];t[e]=function(t){var r=n.apply(this,arguments),o=new Event(e.toLowerCase());return o.state=t,window.dispatchEvent(o),r}};E&&($e("pushState"),$e("replaceState"));var Ue=function(e){var t=window.history,n=t.state,r=t.length,o=window.location;return{trigger:e,state:n,length:r,hash:o.hash,host:o.host,hostname:o.hostname,href:o.href,origin:o.origin,pathname:o.pathname,port:o.port,protocol:o.protocol,search:o.search}},He="function"==typeof Event;const Ve=E&&He?function(){var e=(0,r.useState)(Ue("load")),t=e[0],n=e[1];return(0,r.useEffect)((function(){var e=function(){return n(Ue("popstate"))},t=function(){return n(Ue("pushstate"))},r=function(){return n(Ue("replacestate"))};return _(window,"popstate",e),_(window,"pushstate",t),_(window,"replacestate",r),function(){k(window,"popstate",e),k(window,"pushstate",t),k(window,"replacestate",r)}}),[]),t}:function(){return{trigger:"load",length:1}};function qe(e){if(!e)return null;if("BODY"===e.tagName)return e;if("IFRAME"===e.tagName){var t=e.contentDocument;return t?t.body:null}return e.offsetParent?qe(e.offsetParent):null}function Ge(e){var t=e||window.event;return t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1)}var We=E&&window.navigator&&window.navigator.platform&&/iP(ad|hone|od)/.test(window.navigator.platform),Ze=new Map,Qe="object"==typeof document?document:void 0,Ye=!1;const Xe=Qe?function(e,t){void 0===e&&(e=!0);var n=(0,r.useRef)(Qe.body);t=t||n;var o=function(e){var t=Ze.get(e);t&&(1===t.counter?(Ze.delete(e),We?(e.ontouchmove=null,Ye&&(k(document,"touchmove",Ge),Ye=!1)):e.style.overflow=t.initialOverflow):Ze.set(e,{counter:t.counter-1,initialOverflow:t.initialOverflow}))};(0,r.useEffect)((function(){var n=qe(t.current);n&&(e?function(e){var t=Ze.get(e);t?Ze.set(e,{counter:t.counter+1,initialOverflow:t.initialOverflow}):(Ze.set(e,{counter:1,initialOverflow:e.style.overflow}),We?Ye||(_(document,"touchmove",Ge,{passive:!1}),Ye=!0):e.style.overflow="hidden")}(n):o(n))}),[e,t.current]),(0,r.useEffect)((function(){var e=qe(t.current);if(e)return function(){o(e)}}),[])}:function(e,t){void 0===e&&(e=!0)};const Ke=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];se((function(){return console.log.apply(console,(0,f.__spreadArrays)([e+" mounted"],t)),function(){return console.log(e+" unmounted")}})),s((function(){console.log.apply(console,(0,f.__spreadArrays)([e+" updated"],t))}))};var Je=function(e){(function(e){return"touches"in e})(e)&&e.touches.length<2&&e.preventDefault&&e.preventDefault()};const et=function(e,t){var n=void 0===t?{}:t,o=n.isPreventDefault,a=void 0===o||o,i=n.delay,l=void 0===i?300:i,s=(0,r.useRef)(),u=(0,r.useRef)(),c=(0,r.useCallback)((function(t){a&&t.target&&(_(t.target,"touchend",Je,{passive:!1}),u.current=t.target),s.current=setTimeout((function(){return e(t)}),l)}),[e,l,a]),d=(0,r.useCallback)((function(){s.current&&clearTimeout(s.current),a&&u.current&&k(u.current,"touchend",Je)}),[a]);return{onMouseDown:function(e){return c(e)},onTouchStart:function(e){return c(e)},onMouseUp:d,onMouseLeave:d,onTouchEnd:d}};const tt=function(e){void 0===e&&(e={});var t=(0,r.useState)(e),n=t[0],o=t[1],a=(0,r.useMemo)((function(){return{set:function(e,t){o((function(n){var r;return(0,f.__assign)((0,f.__assign)({},n),((r={})[e]=t,r))}))},setAll:function(e){o(e)},remove:function(e){o((function(t){var n=t,r=e;n[r];return(0,f.__rest)(n,["symbol"==typeof r?r:r+""])}))},reset:function(){return o(e)}}}),[o]),i=(0,f.__assign)({get:(0,r.useCallback)((function(e){return n[e]}),[n])},a);return[n,i]};const nt=function(e,t){var n=(0,r.useState)(function(e,t){return void 0!==t?t:!!E&&window.matchMedia(e).matches}(e,t)),o=n[0],a=n[1];return(0,r.useEffect)((function(){var t=!0,n=window.matchMedia(e),r=function(){t&&a(!!n.matches)};return n.addListener(r),a(n.matches),function(){t=!1,n.removeListener(r)}}),[e]),o};const rt=S&&navigator.mediaDevices?function(){var e=(0,r.useState)({}),t=e[0],n=e[1];return(0,r.useEffect)((function(){var e=!0,t=function(){navigator.mediaDevices.enumerateDevices().then((function(t){e&&n({devices:t.map((function(e){return{deviceId:e.deviceId,groupId:e.groupId,kind:e.kind,label:e.label}}))})})).catch(x)};return _(navigator.mediaDevices,"devicechange",t),t(),function(){e=!1,k(navigator.mediaDevices,"devicechange",t)}}),[]),t}:function(){return{}};function ot(e,t){var n=(0,r.useRef)(e),o=(0,r.useState)(t),a=o[0],i=o[1];return[a,(0,r.useCallback)((function(e){2===n.current.length?n.current(e,i):i(n.current(e))}),[a])]}const at=function(e,t){var n=(0,r.useMemo)((function(){return function(t,n){var r;return(r=e(t))[n.type].apply(r,n.payload)}}),[e]),o=(0,r.useReducer)(n,t),a=o[0],i=o[1],l=(0,r.useMemo)((function(){return Object.keys(e(t)).reduce((function(e,t){return e[t]=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return i({type:t,payload:e})},e}),{})}),[e,t]);return[a,l]};var it={acceleration:{x:null,y:null,z:null},accelerationIncludingGravity:{x:null,y:null,z:null},rotationRate:{alpha:null,beta:null,gamma:null},interval:16};const lt=function(e){void 0===e&&(e=it);var t=(0,r.useState)(e),n=t[0],o=t[1];return(0,r.useEffect)((function(){var e=function(e){var t=e.acceleration,n=e.accelerationIncludingGravity,r=e.rotationRate,a=e.interval;o({acceleration:{x:t.x,y:t.y,z:t.z},accelerationIncludingGravity:{x:n.x,y:n.y,z:n.z},rotationRate:{alpha:r.alpha,beta:r.beta,gamma:r.gamma},interval:a})};return _(window,"devicemotion",e),function(){k(window,"devicemotion",e)}}),[]),n};const st=function(e){se((function(){e()}))};const ut=function(e){var t=(0,r.useRef)(e);t.current=e,se((function(){return function(){return t.current()}}))};const ct=function(e){var t=(0,r.useRef)(0),n=(0,r.useState)(e),o=n[0],a=n[1],i=(0,r.useCallback)((function(e){cancelAnimationFrame(t.current),t.current=requestAnimationFrame((function(){a(e)}))}),[]);return ut((function(){cancelAnimationFrame(t.current)})),[o,i]};const dt=function(e){var t=ct({docX:0,docY:0,posX:0,posY:0,elX:0,elY:0,elH:0,elW:0}),n=t[0],o=t[1];return(0,r.useEffect)((function(){var t=function(t){if(e&&e.current){var n=e.current.getBoundingClientRect(),r=n.left,a=n.top,i=n.width,l=n.height,s=r+window.pageXOffset,u=a+window.pageYOffset,c=t.pageX-s,d=t.pageY-u;o({docX:t.pageX,docY:t.pageY,posX:s,posY:u,elX:c,elY:d,elH:l,elW:i})}};return _(document,"mousemove",t),function(){k(document,"mousemove",t)}}),[e]),n};var ft={current:null};const pt=function(e,t){void 0===t&&(t={});var n=!!t.whenHovered,r=!!t.bound,o=Te(e,n),a=dt(n&&!o?ft:e);return r&&(a.elX=Math.max(0,Math.min(a.elX,a.elW)),a.elY=Math.max(0,Math.min(a.elY,a.elH))),a},ht=function(){var e=(0,r.useState)(0),t=e[0],n=e[1];return(0,r.useEffect)((function(){var e=function(e){n(e.deltaY+t)};return _(window,"wheel",e,!1),function(){return k(window,"wheel",e)}})),t};var mt=S?navigator:void 0,gt=mt&&(mt.connection||mt.mozConnection||mt.webkitConnection);function vt(e){var t=null==mt?void 0:mt.onLine,n=null==e?void 0:e.online;return{online:t,previous:n,since:t!==n?new Date:null==e?void 0:e.since,downlink:null==gt?void 0:gt.downlink,downlinkMax:null==gt?void 0:gt.downlinkMax,effectiveType:null==gt?void 0:gt.effectiveType,rtt:null==gt?void 0:gt.rtt,saveData:null==gt?void 0:gt.saveData,type:null==gt?void 0:gt.type}}function bt(e){var t=(0,r.useState)(null!=e?e:vt),n=t[0],o=t[1];return(0,r.useEffect)((function(){var e=function(){o(vt)};return _(window,"online",e,{passive:!0}),_(window,"offline",e,{passive:!0}),gt&&_(gt,"change",e,{passive:!0}),function(){k(window,"online",e),k(window,"offline",e),gt&&k(gt,"change",e)}}),[]),n}const yt=G;const wt=function(e,t){var n=(0,r.useState)(t),o=n[0],a=n[1];return X((function(){var t=e.subscribe(a);return function(){return t.unsubscribe()}}),[e]),o};var xt={angle:0,type:"landscape-primary"};const _t=function(e){void 0===e&&(e=xt);var t=(0,r.useState)(e),n=t[0],o=t[1];return(0,r.useEffect)((function(){var t=window.screen,n=!0,r=function(){if(n){var r=t.orientation;if(r){var a=r.angle,i=r.type;o({angle:a,type:i})}else void 0!==window.orientation?o({angle:"number"==typeof window.orientation?window.orientation:0,type:""}):o(e)}};return _(window,"orientationchange",r),r(),function(){n=!1,k(window,"orientationchange",r)}}),[]),n};const kt=function(e,t){void 0===t&&(t=[]),(0,r.useEffect)((function(){if(e){var t=function(t){var n=(t=t||window.event).relatedTarget||t.toElement;n&&"HTML"!==n.nodeName||e()};return _(document,"mouseout",t),function(){k(document,"mouseout",t)}}}),t)};const Et=function(e){var t=(0,r.useState)(""),n=t[0],o=t[1];return(0,r.useEffect)((function(){var t=!0,n=null,r=function(){t&&o((function(){var e;return null!==(e=null==n?void 0:n.state)&&void 0!==e?e:""}))};return navigator.permissions.query(e).then((function(e){_(n=e,"change",r),r()})).catch(x),function(){n&&k(n,"change",r),t=!1,n=null}}),[e]),n};function St(e){var t=(0,r.useRef)();return(0,r.useEffect)((function(){t.current=e})),t.current}var Ct=function(e,t){return e===t};function Tt(e,t){void 0===t&&(t=Ct);var n=(0,r.useRef)(),o=(0,r.useRef)(e);return l()||t(o.current,e)||(n.current=o.current,o.current=e),n.current}const Ot=function(){var e=p();return(0,r.useCallback)((function(t){return new Promise((function(n,r){t.then((function(t){e()&&n(t)}),(function(t){e()&&r(t)}))}))}),[])};const Dt=function(e){void 0===e&&(e=[]);var t=(0,r.useState)(e),n=t[0],o=t[1];return{add:function(e){o((function(t){return(0,f.__spreadArrays)(t,[e])}))},remove:function(){var e;return o((function(t){var n=t[0],r=t.slice(1);return e=n,r})),e},get first(){return n[0]},get last(){return n[n.length-1]},get size(){return n.length}}};const Pt=function(e,t){void 0===e&&(e=1e12),void 0===t&&(t=0);var n=(0,r.useState)(0),o=n[0],a=n[1];return X((function(){var n,r,o,i=function(){var t=Math.min(1,(Date.now()-o)/e);a(t),l()},l=function(){n=requestAnimationFrame(i)},s=setTimeout((function(){r=setTimeout((function(){cancelAnimationFrame(n),a(1)}),e),o=Date.now(),l()}),t);return function(){clearTimeout(r),clearTimeout(s),cancelAnimationFrame(n)}}),[e,t]),o};function Nt(e,t){void 0===t&&(t=!0);var n=(0,r.useRef)(null),o=(0,r.useRef)(!1),a=(0,r.useRef)(e);a.current=e;var i=(0,r.useCallback)((function(e){o.current&&(a.current(e),n.current=requestAnimationFrame(i))}),[]),l=(0,r.useMemo)((function(){return[function(){o.current&&(o.current=!1,n.current&&cancelAnimationFrame(n.current))},function(){o.current||(o.current=!0,n.current=requestAnimationFrame(i))},function(){return o.current}]}),[]);return(0,r.useEffect)((function(){return t&&l[1](),l[0]}),[]),l}var It=function(e,t){return new URLSearchParams(e).get(t)};const At=E?function(e){var t=window.location,n=(0,r.useState)((function(){return It(t.search,e)})),o=n[0],a=n[1];return(0,r.useEffect)((function(){var n=function(){a(It(t.search,e))};return _(window,"popstate",n),_(window,"pushstate",n),_(window,"replacestate",n),function(){k(window,"popstate",n),k(window,"pushstate",n),k(window,"replacestate",n)}}),[]),o}:function(){return null};n(96260);var Lt=function(e){void 0===e&&(e={});var t=e.disabled,n=Me(e),o=(0,r.useState)({isScratching:!1}),a=o[0],i=o[1],l=(0,r.useRef)(a),s=(0,r.useRef)(!1),u=(0,r.useRef)(null),c=(0,r.useState)(null),d=c[0],p=c[1];return(0,r.useEffect)((function(){if(!t&&d){var e,r,o=function(e,t){cancelAnimationFrame(u.current),u.current=requestAnimationFrame((function(){var r=d.getBoundingClientRect(),o=r.left,a=r.top,s=o+window.scrollX,u=a+window.scrollY,c=e-s,p=t-u;i((function(e){var t=(0,f.__assign)((0,f.__assign)({},e),{dx:c-(e.x||0),dy:p-(e.y||0),end:Date.now(),isScratching:!0});return l.current=t,(n.current.onScratch||x)(t),t}))}))},a=function(e){o(e.pageX,e.pageY)},c=function(e){o(e.changedTouches[0].pageX,e.changedTouches[0].pageY)},p=function(){s.current&&(s.current=!1,l.current=(0,f.__assign)((0,f.__assign)({},l.current),{isScratching:!1}),(n.current.onScratchEnd||x)(l.current),i({isScratching:!1}),k(window,"mousemove",a),k(window,"touchmove",c),k(window,"mouseup",e),k(window,"touchend",r))};e=p,r=p;var h=function(t,o){if(s.current){var u=d.getBoundingClientRect(),f=u.left,p=u.top,h=f+window.scrollX,m=p+window.scrollY,g=t-h,v=o-m,b=Date.now(),y={isScratching:!0,start:b,end:b,docX:t,docY:o,x:g,y:v,dx:0,dy:0,elH:d.offsetHeight,elW:d.offsetWidth,elX:h,elY:m};l.current=y,(n.current.onScratchStart||x)(y),i(y),_(window,"mousemove",a),_(window,"touchmove",c),_(window,"mouseup",e),_(window,"touchend",r)}},m=function(e){s.current=!0,h(e.pageX,e.pageY)},g=function(e){s.current=!0,h(e.changedTouches[0].pageX,e.changedTouches[0].pageY)};return _(d,"mousedown",m),_(d,"touchstart",g),function(){k(d,"mousedown",m),k(d,"touchstart",g),k(window,"mousemove",a),k(window,"touchmove",c),k(window,"mouseup",e),k(window,"touchend",r),u.current&&cancelAnimationFrame(u.current),u.current=null,s.current=!1,l.current={isScratching:!1},i(l.current)}}}),[d,t,n]),[p,a]};const Rt=Lt;const jt=function(e){var t=ct({x:0,y:0}),n=t[0],o=t[1];return(0,r.useEffect)((function(){var t=function(){e.current&&o({x:e.current.scrollLeft,y:e.current.scrollTop})};return e.current&&_(e.current,"scroll",t,{capture:!1,passive:!0}),function(){e.current&&k(e.current,"scroll",t)}}),[e]),n};const Mt=function(e){var t=(0,r.useState)(!1),n=t[0],o=t[1];return(0,r.useEffect)((function(){if(e.current){var t,n=function(){o(!0),clearTimeout(t),t=setTimeout((function(){o(!1)}),150)};return _(e.current,"scroll",n,!1),function(){e.current&&k(e.current,"scroll",n,!1)}}return function(){}}),[e]),n};const Ft=function(e,t,n){if(!E)return[t,function(){}];var o=(0,r.useState)((function(){try{var r=sessionStorage.getItem(e);return"string"!=typeof r?(sessionStorage.setItem(e,n?String(t):JSON.stringify(t)),t):n?r:JSON.parse(r||"null")}catch(o){return t}})),a=o[0],i=o[1];return(0,r.useEffect)((function(){try{var t=n?String(a):JSON.stringify(a);sessionStorage.setItem(e,t)}catch(o){}})),[a,i]};var Bt=n(99376),zt=function(e,t){return e.every((function(e,n){return(0,Bt.D)(e,t[n])}))};const $t=function(e,t){te(e,t,zt)};var Ut=r.useState,Ht=r.useEffect,Vt=r.useRef;const qt=function(e,t){var n=void 0===t?{}:t,a=n.width,i=void 0===a?1/0:a,l=n.height,s=void 0===l?1/0:l;if(!E)return["function"==typeof e?e({width:i,height:s}):e,{width:i,height:s}];var u=Ut({width:i,height:s}),c=u[0],d=u[1];"function"==typeof e&&(e=e(c));var p=e.props.style||{},h=Vt(null),m=null,g=function(){var e=h.current,t=e?{width:e.offsetWidth,height:e.offsetHeight}:{width:i,height:s};d(t)},v=function(e){_(e,"resize",g),setTimeout(g,35)};return Ht((function(){var e=h.current;if(e){if(e.contentWindow)m=e.contentWindow,v(m);else{var t=function(){_(e,"load",t),m=e.contentWindow,v(m)};k(e,"load",t)}return function(){m&&m.removeEventListener&&k(m,"resize",g)}}}),[]),p.position="relative",[r.cloneElement.apply(o,(0,f.__spreadArrays)([e,{style:p}],(0,f.__spreadArrays)([r.createElement("iframe",{ref:h,style:{background:"transparent",border:"none",height:"100%",left:0,position:"absolute",top:0,width:"100%",zIndex:-1}})],r.Children.toArray(e.props.children)))),c]};const Gt=function(e,t){void 0===t&&(t={});var n=p(),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useRef)(0),l=v({isSliding:!1,value:0}),s=l[0],u=l[1];return a.current=s.value,(0,r.useEffect)((function(){if(E){var r=void 0===t.styles||t.styles,l=void 0!==t.reverse&&t.reverse;e.current&&r&&(e.current.style.userSelect="none");var s=function(){!o.current&&n()&&((t.onScrubStart||x)(),o.current=!0,u({isSliding:!0}),m())},c=function(){o.current&&n()&&((t.onScrubStop||x)(a.current),o.current=!1,u({isSliding:!1}),g())},d=function(e){s(),f(e)},f=t.vertical?function(e){return v(e.clientY)}:function(e){return v(e.clientX)},p=function(e){s(),h(e)},h=t.vertical?function(e){return v(e.changedTouches[0].clientY)}:function(e){return v(e.changedTouches[0].clientX)},m=function(){_(document,"mousemove",f),_(document,"mouseup",c),_(document,"touchmove",h),_(document,"touchend",c)},g=function(){k(document,"mousemove",f),k(document,"mouseup",c),k(document,"touchmove",h),k(document,"touchend",c)},v=function(r){cancelAnimationFrame(i.current),i.current=requestAnimationFrame((function(){if(n()&&e.current){var o=e.current.getBoundingClientRect(),a=t.vertical?o.top:o.left,i=t.vertical?o.height:o.width;if(!i)return;var s=(r-a)/i;s>1?s=1:s<0&&(s=0),l&&(s=1-s),u({value:s}),(t.onScrub||x)(s)}}))};return _(e.current,"mousedown",d),_(e.current,"touchstart",p),function(){k(e.current,"mousedown",d),k(e.current,"touchstart",p)}}}),[e,t.vertical]),s};var Wt;!function(e){e[e.init=0]="init",e[e.play=1]="play",e[e.pause=2]="pause",e[e.end=3]="end"}(Wt||(Wt={}));const Zt=function(e,t){var n=(0,r.useRef)(!1),o=(0,r.useState)((function(){var e=t.voice||{},n=e.lang,r=void 0===n?"default":n,o=e.name,a=void 0===o?"":o;return{isPlaying:!1,status:Wt[Wt.init],lang:t.lang||"default",voiceInfo:{lang:r,name:a},rate:t.rate||1,pitch:t.pitch||1,volume:t.volume||1}})),a=o[0],i=o[1],l=(0,r.useCallback)((function(){n.current&&i((function(e){return(0,f.__assign)((0,f.__assign)({},e),{isPlaying:!0,status:Wt[Wt.play]})}))}),[]),s=(0,r.useCallback)((function(){n.current&&i((function(e){return(0,f.__assign)((0,f.__assign)({},e),{isPlaying:!1,status:Wt[Wt.pause]})}))}),[]),u=(0,r.useCallback)((function(){n.current&&i((function(e){return(0,f.__assign)((0,f.__assign)({},e),{isPlaying:!1,status:Wt[Wt.end]})}))}),[]);return(0,r.useEffect)((function(){n.current=!0;var r=new SpeechSynthesisUtterance(e);return t.lang&&(r.lang=t.lang),t.voice&&(r.voice=t.voice),r.rate=t.rate||1,r.pitch=t.pitch||1,r.volume=t.volume||1,r.onstart=l,r.onpause=s,r.onresume=l,r.onend=u,window.speechSynthesis.speak(r),function(){n.current=!1}}),[]),a};const Qt=function(e){X((function(){var t=function(t){var n,r,o,a,i;!function(){var e=document.activeElement,t=document.body;if(!e)return!1;if(e===t)return!1;switch(e.tagName){case"INPUT":case"TEXTAREA":return!0}return e.hasAttribute("contenteditable")}()&&(r=(n=t).keyCode,o=n.metaKey,a=n.ctrlKey,i=n.altKey,!(o||a||i)&&(r>=48&&r<=57||r>=65&&r<=90))&&e(t)};return _(document,"keydown",t),function(){k(document,"keydown",t)}}),[])};function Yt(e,t,n){if(void 0===t&&(t=10),t<1)throw new Error("Capacity has to be greater than 1, got '"+t+"'");var o=l(),a=(0,r.useState)(e),i=a[0],s=a[1],u=(0,r.useRef)(null!=n?n:[]),c=(0,r.useRef)(0);return o&&(u.current.length?(u.current[u.current.length-1]!==e&&u.current.push(e),u.current.length>t&&(u.current=u.current.slice(u.current.length-t))):u.current.push(e),c.current=u.current.length&&u.current.length-1),[i,(0,r.useCallback)((function(e){s((function(n){return(e=V(e,n))!==n&&(c.current<u.current.length-1&&(u.current=u.current.slice(0,c.current+1)),c.current=u.current.push(e)-1,u.current.length>t&&(u.current=u.current.slice(u.current.length-t))),e}))}),[i,t]),(0,r.useMemo)((function(){return{history:u.current,position:c.current,capacity:t,back:function(e){void 0===e&&(e=1),c.current&&s((function(){return c.current-=Math.min(e,c.current),u.current[c.current]}))},forward:function(e){void 0===e&&(e=1),c.current!==u.current.length-1&&s((function(){return c.current=Math.min(c.current+e,u.current.length-1),u.current[c.current]}))},go:function(e){e!==c.current&&s((function(){return c.current=e<0?Math.max(u.current.length+e,0):Math.min(u.current.length-1,e),u.current[c.current]}))}}}),[i])]}function Xt(e){void 0===e&&(e=[]);var t=p(),n=H(),o=(0,r.useRef)(0);s((function(){e.length<=o.current&&(o.current=e.length-1,n())}),[e.length]);var a=(0,r.useMemo)((function(){return{next:function(){return a.setStateAt(o.current+1)},prev:function(){return a.setStateAt(o.current-1)},setStateAt:function(r){t()&&e.length&&r!==o.current&&(o.current=r>=0?r%e.length:e.length+r%e.length,n())},setState:function(r){if(t()){var a=e.length?e.indexOf(r):-1;if(-1===a)throw new Error("State '"+r+"' is not a valid state (does not exist in state list)");o.current=a,n()}}}}),[e]);return(0,f.__assign)({state:e[o.current],currentIndex:o.current},a)}const Kt=function(e,t){void 0===t&&(t=200);var n=(0,r.useState)(e),o=n[0],a=n[1],i=(0,r.useRef)(),l=(0,r.useRef)(null),s=(0,r.useRef)(0);return(0,r.useEffect)((function(){if(i.current)l.current=e,s.current=!0;else{a(e);var n=function(){s.current?(s.current=!1,a(l.current),i.current=setTimeout(n,t)):i.current=void 0};i.current=setTimeout(n,t)}}),[e]),ut((function(){i.current&&clearTimeout(i.current)})),o};const Jt=function(e,t,n){void 0===t&&(t=200);var o=(0,r.useState)(null),a=o[0],i=o[1],l=(0,r.useRef)(),s=(0,r.useRef)();return(0,r.useEffect)((function(){if(l.current)s.current=n;else{i(e.apply(void 0,n));var r=function(){s.current?(i(e.apply(void 0,s.current)),s.current=void 0,l.current=setTimeout(r,t)):l.current=void 0};l.current=setTimeout(r,t)}}),n),ut((function(){l.current&&clearTimeout(l.current)})),a};function en(e){return void 0===e&&(e=0),ne(H(),e)}var tn={restoreOnUnmount:!1};const nn="undefined"!=typeof document?function(e,t){void 0===t&&(t=tn);var n=(0,r.useRef)(document.title);document.title!==e&&(document.title=e),(0,r.useEffect)((function(){return t&&t.restoreOnUnmount?function(){document.title=n.current}:void 0}),[])}:function(e){};var rn=n(75534);const on=function(e,t,n){return void 0===e&&(e="inCirc"),void 0===t&&(t=200),void 0===n&&(n=0),(0,rn.U[e])(Pt(t,n))};const an=function(){var e=(0,r.useRef)(!1);return se((function(){return function(){e.current=!0}})),(0,r.useMemo)((function(){return function(t,n){return new Promise((function(r,o){t.then((function(t){e.current||r(t)}),(function(t){e.current?n?n(t):console.error("useUnmountPromise",t):o(t)}))}))}}),[])};function ln(e,t){void 0===t&&(t=[]);var n=Be(t),r=n[0],o=n[1];return[r,(0,f.__assign)((0,f.__assign)({},o),{upsert:function(t){o.upsert(e,t)}})]}const sn=S&&"vibrate"in navigator?function(e,t,n){void 0===e&&(e=!0),void 0===t&&(t=[1e3,1e3]),void 0===n&&(n=!0),(0,r.useEffect)((function(){var r;if(e&&(navigator.vibrate(t),n)){var o=t instanceof Array?t.reduce((function(e,t){return e+t})):t;r=setInterval((function(){navigator.vibrate(t)}),o)}return function(){e&&(navigator.vibrate(0),n&&clearInterval(r))}}),[e])}:x;const un=y("video");function cn(e,t,n){void 0===n&&(n=[void 0]);var o=(0,r.useRef)(t),a=(0,r.useRef)(e);o.current=t,a.current=e;var i=(0,r.useState)(n),l=i[0],s=i[1],u=(0,r.useCallback)((function(){o.current.length>=2?o.current(a.current,s):s(o.current(a.current))}),[s]);return(0,r.useEffect)((function(){u()}),[e]),[l,u]}var dn=function(e){if("undefined"==typeof document)return 0;if(document.body&&(!document.readyState||"loading"!==document.readyState)){if(!0!==e&&"number"==typeof dn.__cache)return dn.__cache;var t=document.createElement("div"),n=t.style;n.display="block",n.position="absolute",n.width="100px",n.height="100px",n.left="-999px",n.top="-999px",n.overflow="scroll",document.body.insertBefore(t,null);var r=t.clientWidth;if(0!==r)return dn.__cache=100-r,document.body.removeChild(t),dn.__cache;document.body.removeChild(t)}};function fn(){var e=(0,r.useState)(dn()),t=e[0],n=e[1];return(0,r.useEffect)((function(){if(void 0===t){var e=requestAnimationFrame((function(){n(dn())}));return function(){return cancelAnimationFrame(e)}}}),[]),t}function pn(e,t,n){if(void 0===n&&(n=[void 0]),"object"!=typeof e)throw new Error("states expected to be an object or array, got "+typeof e);var o=(0,r.useRef)(t),a=(0,r.useRef)(e);o.current=t,a.current=e;var i=(0,r.useState)(n),l=i[0],s=i[1],u=(0,r.useCallback)((function(){o.current.length>=2?o.current(a.current,s):s(o.current(a.current))}),[s]);return(0,r.useEffect)((function(){u()}),Object.values(e)),[l,u]}const hn=function(){var e=ct((function(){return{x:E?window.pageXOffset:0,y:E?window.pageYOffset:0}})),t=e[0],n=e[1];return(0,r.useEffect)((function(){var e=function(){n((function(e){var t=window.pageXOffset,n=window.pageYOffset;return e.x!==t||e.y!==n?{x:t,y:n}:e}))};return e(),_(window,"scroll",e,{capture:!1,passive:!0}),function(){k(window,"scroll",e)}}),[]),t};const mn=function(e,t){void 0===e&&(e=1/0),void 0===t&&(t=1/0);var n=ct({width:E?window.innerWidth:e,height:E?window.innerHeight:t}),o=n[0],a=n[1];return(0,r.useEffect)((function(){if(E){var e=function(){a({width:window.innerWidth,height:window.innerHeight})};return _(window,"resize",e),function(){k(window,"resize",e)}}}),[]),o};var gn={x:0,y:0,width:0,height:0,top:0,left:0,bottom:0,right:0};const vn=E&&void 0!==window.ResizeObserver?function(){var e=(0,r.useState)(null),t=e[0],n=e[1],o=(0,r.useState)(gn),a=o[0],i=o[1],l=(0,r.useMemo)((function(){return new window.ResizeObserver((function(e){if(e[0]){var t=e[0].contentRect,n=t.x,r=t.y,o=t.width,a=t.height,l=t.top,s=t.left,u=t.bottom,c=t.right;i({x:n,y:r,width:o,height:a,top:l,left:s,bottom:u,right:c})}}))}),[]);return X((function(){if(t)return l.observe(t),function(){l.disconnect()}}),[t]),[n,a]}:function(){return[x,gn]};var bn;!function(e){e.ZOOMING_IN="ZOOMING_IN",e.ZOOMING_OUT="ZOOMING_OUT"}(bn||(bn={}));const yn=function(e){var t=(0,r.useMemo)((function(){return{evCache:[],prevDiff:-1}}),[e.current]),n=(0,r.useState)(),o=n[0],a=n[1],i=function(e){for(var n=0;n<t.evCache.length;n++)if(e.pointerId==t.evCache[n].pointerId){t.evCache[n]=e;break}if(2==t.evCache.length){var r=Math.abs(t.evCache[0].clientX-t.evCache[1].clientX);t.prevDiff>0&&(r>t.prevDiff&&a([bn.ZOOMING_IN,r]),r<t.prevDiff&&a([bn.ZOOMING_OUT,r])),t.prevDiff=r}},l=function(e){t.evCache.push(e)},s=function(e){u(e),t.evCache.length<2&&(t.prevDiff=-1)},u=function(e){for(var n=0;n<t.evCache.length;n++)if(t.evCache[n].pointerId==e.pointerId){t.evCache.splice(n,1);break}};return(0,r.useEffect)((function(){(null==e?void 0:e.current)&&(e.current.onpointerdown=l,e.current.onpointermove=i,e.current.onpointerup=s,e.current.onpointercancel=s,e.current.onpointerout=s,e.current.onpointerleave=s)}),[null==e?void 0:e.current]),o?{zoomingState:o[0],pinchState:o[1]}:{zoomingState:null,pinchState:0}};function wn(){return++(0,r.useRef)(0).current}const xn=function(e){void 0===e&&(e=new Set);var t=(0,r.useState)(e),n=t[0],o=t[1],a=(0,r.useMemo)((function(){return{add:function(e){return o((function(t){return new Set((0,f.__spreadArrays)(Array.from(t),[e]))}))},remove:function(e){return o((function(t){return new Set(Array.from(t).filter((function(t){return t!==e})))}))},toggle:function(e){return o((function(t){return t.has(e)?new Set(Array.from(t).filter((function(t){return t!==e}))):new Set((0,f.__spreadArrays)(Array.from(t),[e]))}))},reset:function(){return o(e)}}}),[o]),i=(0,f.__assign)({has:(0,r.useCallback)((function(e){return n.has(e)}),[n])},a);return[n,i]};function _n(e){var t={state:e instanceof Function?e():e,setState:function(e){t.state=V(e,t.state),t.setters.forEach((function(e){return e(t.state)}))},setters:[]};return function(){var e=(0,r.useState)(t.state),n=e[0],o=e[1];return se((function(){return function(){t.setters=t.setters.filter((function(e){return e!==o}))}})),X((function(){t.setters.includes(o)||t.setters.push(o)})),[n,t.setState]}}var kn=function(){var e=(0,r.useState)((function(){return window.location.hash})),t=e[0],n=e[1],o=(0,r.useCallback)((function(){n(window.location.hash)}),[]);Fe((function(){_(window,"hashchange",o)}),(function(){k(window,"hashchange",o)}));var a=(0,r.useCallback)((function(e){e!==t&&(window.location.hash=e)}),[t]);return[t,a]}},72408:(e,t,n)=>{"use strict";var r=n(27418),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;o=d("react.element"),a=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m={};function g(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||h}function v(){}function b(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||h}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=g.prototype;var y=b.prototype=new v;y.constructor=b,r(y,g.prototype),y.isPureReactComponent=!0;var w={current:null},x=Object.prototype.hasOwnProperty,_={key:!0,ref:!0,__self:!0,__source:!0};function k(e,t,n){var r,a={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)x.call(t,r)&&!_.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(1===s)a.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];a.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===a[r]&&(a[r]=s[r]);return{$$typeof:o,type:e,key:i,ref:l,props:a,_owner:w.current}}function E(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var S=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function T(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case o:case a:s=!0}}if(s)return i=i(s=e),e=""===r?"."+C(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(S,"$&/")+"/"),T(i,t,n,"",(function(e){return e}))):null!=i&&(E(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(S,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+C(l=e[u],u);s+=T(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=T(l=l.value,t,n,c=r+C(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function O(e,t,n){if(null==e)return e;var r=[],o=0;return T(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function D(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var P={current:null};function N(){var e=P.current;if(null===e)throw Error(p(321));return e}var I={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:O,forEach:function(e,t,n){O(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return O(e,(function(){t++})),t},toArray:function(e){return O(e,(function(e){return e}))||[]},only:function(e){if(!E(e))throw Error(p(143));return e}},t.Component=g,t.PureComponent=b,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=I,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var a=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)x.call(t,c)&&!_.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];a.children=u}return{$$typeof:o,type:e.type,key:i,ref:l,props:a,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=k,t.createFactory=function(e){var t=k.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=E,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:D}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return N().useCallback(e,t)},t.useContext=function(e,t){return N().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return N().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return N().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return N().useLayoutEffect(e,t)},t.useMemo=function(e,t){return N().useMemo(e,t)},t.useReducer=function(e,t,n){return N().useReducer(e,t,n)},t.useRef=function(e){return N().useRef(e)},t.useState=function(e){return N().useState(e)},t.version="17.0.2"},67294:(e,t,n)=>{"use strict";e.exports=n(72408)},60053:(e,t)=>{"use strict";var n,r,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},o=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var h=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof h&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var m=!1,g=null,v=-1,b=5,y=0;t.unstable_shouldYield=function(){return t.unstable_now()>=y},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):b=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,x=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();y=e+b;try{g(!0,e)?x.postMessage(null):(m=!1,g=null)}catch(n){throw x.postMessage(null),n}}else m=!1},n=function(e){g=e,m||(m=!0,x.postMessage(null))},r=function(e,n){v=f((function(){e(t.unstable_now())}),n)},o=function(){p(v),v=-1}}function _(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<S(o,t)))break e;e[r]=t,e[n]=o,n=r}}function k(e){return void 0===(e=e[0])?null:e}function E(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var a=2*(r+1)-1,i=e[a],l=a+1,s=e[l];if(void 0!==i&&0>S(i,n))void 0!==s&&0>S(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==s&&0>S(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function S(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var C=[],T=[],O=1,D=null,P=3,N=!1,I=!1,A=!1;function L(e){for(var t=k(T);null!==t;){if(null===t.callback)E(T);else{if(!(t.startTime<=e))break;E(T),t.sortIndex=t.expirationTime,_(C,t)}t=k(T)}}function R(e){if(A=!1,L(e),!I)if(null!==k(C))I=!0,n(j);else{var t=k(T);null!==t&&r(R,t.startTime-e)}}function j(e,n){I=!1,A&&(A=!1,o()),N=!0;var a=P;try{for(L(n),D=k(C);null!==D&&(!(D.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=D.callback;if("function"==typeof i){D.callback=null,P=D.priorityLevel;var l=i(D.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?D.callback=l:D===k(C)&&E(C),L(n)}else E(C);D=k(C)}if(null!==D)var s=!0;else{var u=k(T);null!==u&&r(R,u.startTime-n),s=!1}return s}finally{D=null,P=a,N=!1}}var M=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){I||N||(I=!0,n(j))},t.unstable_getCurrentPriorityLevel=function(){return P},t.unstable_getFirstCallbackNode=function(){return k(C)},t.unstable_next=function(e){switch(P){case 1:case 2:case 3:var t=3;break;default:t=P}var n=P;P=t;try{return e()}finally{P=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=M,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=P;P=e;try{return t()}finally{P=n}},t.unstable_scheduleCallback=function(e,a,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:O++,callback:a,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,_(T,e),null===k(C)&&e===k(T)&&(A?o():A=!0,r(R,i-l))):(e.sortIndex=s,_(C,e),I||N||(I=!0,n(j))),e},t.unstable_wrapCallback=function(e){var t=P;return function(){var n=P;P=t;try{return e.apply(this,arguments)}finally{P=n}}}},63840:(e,t,n)=>{"use strict";e.exports=n(60053)},10577:e=>{!function(){"use strict";var t="undefined"!=typeof window&&void 0!==window.document?window.document:{},n=e.exports,r=function(){for(var e,n=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],r=0,o=n.length,a={};r<o;r++)if((e=n[r])&&e[1]in t){for(r=0;r<e.length;r++)a[n[0][r]]=e[r];return a}return!1}(),o={change:r.fullscreenchange,error:r.fullscreenerror},a={request:function(e,n){return new Promise(function(o,a){var i=function(){this.off("change",i),o()}.bind(this);this.on("change",i);var l=(e=e||t.documentElement)[r.requestFullscreen](n);l instanceof Promise&&l.then(i).catch(a)}.bind(this))},exit:function(){return new Promise(function(e,n){if(this.isFullscreen){var o=function(){this.off("change",o),e()}.bind(this);this.on("change",o);var a=t[r.exitFullscreen]();a instanceof Promise&&a.then(o).catch(n)}else e()}.bind(this))},toggle:function(e,t){return this.isFullscreen?this.exit():this.request(e,t)},onchange:function(e){this.on("change",e)},onerror:function(e){this.on("error",e)},on:function(e,n){var r=o[e];r&&t.addEventListener(r,n,!1)},off:function(e,n){var r=o[e];r&&t.removeEventListener(r,n,!1)},raw:r};r?(Object.defineProperties(a,{isFullscreen:{get:function(){return Boolean(t[r.fullscreenElement])}},element:{enumerable:!0,get:function(){return t[r.fullscreenElement]}},isEnabled:{enumerable:!0,get:function(){return Boolean(t[r.fullscreenEnabled])}}}),n?e.exports=a:window.screenfull=a):n?e.exports={isEnabled:!1}:window.screenfull={isEnabled:!1}}()},96774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<a.length;s++){var u=a[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(o=n?n.call(r,c,d,u):void 0)||void 0===o&&c!==d)return!1}return!0}},11742:e=>{e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,n=[],r=0;r<e.rangeCount;r++)n.push(e.getRangeAt(r));switch(t.tagName.toUpperCase()){case"INPUT":case"TEXTAREA":t.blur();break;default:t=null}return e.removeAllRanges(),function(){"Caret"===e.type&&e.removeAllRanges(),e.rangeCount||n.forEach((function(t){e.addRange(t)})),t&&t.focus()}}},75534:(e,t)=>{"use strict";t.U={linear:function(e){return e},quadratic:function(e){return e*(-e*e*e+4*e*e-6*e+4)},cubic:function(e){return e*(4*e*e-9*e+6)},elastic:function(e){return e*(33*e*e*e*e-106*e*e*e+126*e*e-67*e+15)},inQuad:function(e){return e*e},outQuad:function(e){return e*(2-e)},inOutQuad:function(e){return e<.5?2*e*e:(4-2*e)*e-1},inCubic:function(e){return e*e*e},outCubic:function(e){return--e*e*e+1},inOutCubic:function(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1},inQuart:function(e){return e*e*e*e},outQuart:function(e){return 1- --e*e*e*e},inOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},inQuint:function(e){return e*e*e*e*e},outQuint:function(e){return 1+--e*e*e*e*e},inOutQuint:function(e){return e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e},inSine:function(e){return 1-Math.cos(e*(Math.PI/2))},outSine:function(e){return Math.sin(e*(Math.PI/2))},inOutSine:function(e){return-(Math.cos(Math.PI*e)-1)/2},inExpo:function(e){return Math.pow(2,10*(e-1))},outExpo:function(e){return 1-Math.pow(2,-10*e)},inOutExpo:function(e){return(e/=.5)<1?Math.pow(2,10*(e-1))/2:(e--,(2-Math.pow(2,-10*e))/2)},inCirc:function(e){return 1-Math.sqrt(1-e*e)},outCirc:function(e){return Math.sqrt(1-(e-=1)*e)},inOutCirc:function(e){return(e/=.5)<1?-(Math.sqrt(1-e*e)-1)/2:(e-=2,(Math.sqrt(1-e*e)+1)/2)}}},70655:(e,t,n)=>{"use strict";n.r(t),n.d(t,{__assign:()=>a,__asyncDelegator:()=>x,__asyncGenerator:()=>w,__asyncValues:()=>_,__await:()=>y,__awaiter:()=>c,__classPrivateFieldGet:()=>T,__classPrivateFieldIn:()=>D,__classPrivateFieldSet:()=>O,__createBinding:()=>f,__decorate:()=>l,__exportStar:()=>p,__extends:()=>o,__generator:()=>d,__importDefault:()=>C,__importStar:()=>S,__makeTemplateObject:()=>k,__metadata:()=>u,__param:()=>s,__read:()=>m,__rest:()=>i,__spread:()=>g,__spreadArray:()=>b,__spreadArrays:()=>v,__values:()=>h});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},a.apply(this,arguments)};function i(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function l(e,t,n,r){var o,a=arguments.length,i=a<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,n,r);else for(var l=e.length-1;l>=0;l--)(o=e[l])&&(i=(a<3?o(i):a>3?o(t,n,i):o(t,n))||i);return a>3&&i&&Object.defineProperty(t,n,i),i}function s(e,t){return function(n,r){t(n,r,e)}}function u(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function c(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{s(r.next(e))}catch(t){a(t)}}function l(e){try{s(r.throw(e))}catch(t){a(t)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,l)}s((r=r.apply(e,t||[])).next())}))}function d(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(a){return function(l){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){i.label=a[1];break}if(6===a[0]&&i.label<o[1]){i.label=o[1],o=a;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(a);break}o[2]&&i.ops.pop(),i.trys.pop();continue}a=t.call(e,i)}catch(l){a=[6,l],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,l])}}}var f=Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]};function p(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||f(t,e,n)}function h(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function m(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(l){o={error:l}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function g(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(m(arguments[t]));return e}function v(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),o=0;for(t=0;t<n;t++)for(var a=arguments[t],i=0,l=a.length;i<l;i++,o++)r[o]=a[i];return r}function b(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}function y(e){return this instanceof y?(this.v=e,this):new y(e)}function w(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r,o=n.apply(e,t||[]),a=[];return r={},i("next"),i("throw"),i("return"),r[Symbol.asyncIterator]=function(){return this},r;function i(e){o[e]&&(r[e]=function(t){return new Promise((function(n,r){a.push([e,t,n,r])>1||l(e,t)}))})}function l(e,t){try{(n=o[e](t)).value instanceof y?Promise.resolve(n.value.v).then(s,u):c(a[0][2],n)}catch(r){c(a[0][3],r)}var n}function s(e){l("next",e)}function u(e){l("throw",e)}function c(e,t){e(t),a.shift(),a.length&&l(a[0][0],a[0][1])}}function x(e){var t,n;return t={},r("next"),r("throw",(function(e){throw e})),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,o){t[r]=e[r]?function(t){return(n=!n)?{value:y(e[r](t)),done:"return"===r}:o?o(t):t}:o}}function _(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=h(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise((function(r,o){(function(e,t,n,r){Promise.resolve(r).then((function(t){e({value:t,done:n})}),t)})(r,o,(t=e[n](t)).done,t.value)}))}}}function k(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var E=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function S(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&f(t,e,n);return E(t,e),t}function C(e){return e&&e.__esModule?e:{default:e}}function T(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)}function O(e,t,n,r,o){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?o.call(e,n):o?o.value=n:t.set(e,n),n}function D(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}},53250:(e,t,n)=>{"use strict";var r=n(67294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,u(o)&&c({inst:o})}),[e,n,t]),i((function(){return u(o)&&c({inst:o}),e((function(){u(o)&&c({inst:o})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},61688:(e,t,n)=>{"use strict";e.exports=n(53250)},36809:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r={title:"Codex",url:"https://codex.storage",baseUrl:"/",customFields:{businessUnit:"Codex","logos-docusaurus-theme":{customCss:["/home/jenkins/workspace/website/codex.storage/src/css/custom.scss"],docs:{default:{sidebar:{hide:!1},content:{}}},id:"default"}},markdown:{mermaid:!0},i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["@acid-info/logos-docusaurus-preset",{businessUnit:"Codex",theme:{name:"default",options:{customCss:["/home/jenkins/workspace/website/codex.storage/src/css/custom.scss"],docs:{default:{sidebar:{hide:!1}}}}},docs:{id:"root-pages",breadcrumbs:!1,routeBasePath:"/",path:"root-pages"},generated:{jobList:{jobBoard:"codex"}},og:{}}]],plugins:[["@docusaurus/plugin-content-docs",{id:"about",routeBasePath:"/about",path:"about"}],["@acid-info/docusaurus-fathom",{siteId:"OISNT",scriptUrl:"https://fathom.bi.status.im/tracker.js",hostnames:["codex.storage"]}],["@acid-info/docusaurus-og",{path:"_og",imageRenderers:{}}]],themeConfig:{docs:{sidebar:{hideable:!0,autoCollapseCategories:!1},versionPersistence:"localStorage"},metadata:[{name:"keywords",content:"codex, storage"},{name:"description",content:"Codex is building a Decentralized Durability Storage"},{name:"image",content:"theme/image/preview-image.png"}],colorMode:{disableSwitch:!1,defaultMode:"dark",respectPrefersColorScheme:!0},navbar:{title:"",logo:{alt:"Codex",src:"theme/image/logo-black.svg",srcDark:"theme/image/logo.svg",height:26},hideOnScroll:!0,items:[{type:"search",position:"left"},{label:"About Codex",to:"/about",position:"left"},{label:"Community",to:"/community",position:"left"},{title:"Codex GitHub repository",href:"https://github.com/codex-storage",position:"right",className:"header-github-link"},{label:"Docs",href:"https://docs.codex.storage",position:"left"},{label:"Blog",href:"https://blog.codex.storage",position:"left"},{label:"News",to:"https://codex.storage/news",position:"left"},{label:"Join Us",href:"/join-us",position:"left"}]},footer:{logo:{alt:"Codex",src:"theme/image/logo.svg",href:"/",width:22},links:[{items:[{href:"https://twitter.com/Codex_storage",label:"Twitter"},{href:"https://discord.gg/codex-storage",label:"Discord"},{href:"https://docs.codex.storage",label:"Docs"},{href:"https://blog.codex.storage",label:"Blog"},{href:"https://github.com/codex-storage",label:"Github"}],title:null},{items:[{to:"/join-us",label:"Work with us"},{href:"https://guide.codex.storage/",label:"Brand Guidelines"},{href:"/terms",label:"Terms & conditions"},{href:"/privacy-policy",label:"Privacy Policy"},{href:"/security",label:"Security"}],title:null},{title:"shared:Research",items:[{href:"https://vac.dev",label:"VacP2P"},{href:"https://afaik.institute",label:"AFAIK"}]},{title:"shared:Infrastructure",items:[{href:"https://waku.org/",label:"Waku"},{href:"https://nimbus.team/",label:"Nimbus"},{href:"https://codex.storage",label:"Codex"},{href:"https://nomos.tech",label:"Nomos"}]},{title:"shared:Creative Studio",items:[{href:"https://acid.info",label:"Acid.info"}]},{title:"shared:Movement",items:[{href:"https://logos.co",label:"Logos"}]},{title:"shared:User-facing products",items:[{href:"https://status.im",label:"Status"},{href:"https://keycard.tech",label:"Keycard"}]}],copyright:"Codex",style:"light"},prism:{theme:{plain:{color:"#000000",backgroundColor:"rgba(var(--lsd-surface-secondary), 0.08)"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"rgba(var(--lsd-surface-secondary), 0.08)"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:[],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3},mermaid:{theme:{dark:"dark",light:"default"},options:{}}},baseUrlIssueBanner:!0,onBrokenLinks:"warn",onBrokenMarkdownLinks:"warn",onDuplicateRoutes:"warn",staticDirectories:["static","/home/jenkins/workspace/website/codex.storage/node_modules/@acid-info/logos-docusaurus-preset/static/common","/home/jenkins/workspace/website/codex.storage/node_modules/@acid-info/logos-docusaurus-preset/static/Codex","/home/jenkins/workspace/website/codex.storage/node_modules/@acid-info/logos-docusaurus-theme/lib/client/static/"],themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],tagline:"Codex is building a Decentralized Durability Engine",titleDelimiter:"|",noIndex:!1,favicon:"theme/image/favicon.ico"}},87462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},75068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},63366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},27563:(e,t,n)=>{"use strict";n.d(t,{Ab:()=>i,Fr:()=>l,G$:()=>a,JM:()=>d,K$:()=>u,MS:()=>r,h5:()=>s,lK:()=>c,uj:()=>o});var r="-ms-",o="-moz-",a="-webkit-",i="comm",l="rule",s="decl",u="@import",c="@keyframes",d="@layer"},92190:(e,t,n)=>{"use strict";n.d(t,{MY:()=>i});var r=n(27563),o=n(26686),a=n(46411);function i(e){return(0,a.cE)(l("",null,null,null,[""],e=(0,a.un)(e),0,[0],e))}function l(e,t,n,r,i,d,f,p,h){for(var m=0,g=0,v=f,b=0,y=0,w=0,x=1,_=1,k=1,E=0,S="",C=i,T=d,O=r,D=S;_;)switch(w=E,E=(0,a.lp)()){case 40:if(108!=w&&58==(0,o.uO)(D,v-1)){-1!=(0,o.Cw)(D+=(0,o.gx)((0,a.iF)(E),"&","&\f"),"&\f")&&(k=-1);break}case 34:case 39:case 91:D+=(0,a.iF)(E);break;case 9:case 10:case 13:case 32:D+=(0,a.Qb)(w);break;case 92:D+=(0,a.kq)((0,a.Ud)()-1,7);continue;case 47:switch((0,a.fj)()){case 42:case 47:(0,o.R3)(u((0,a.q6)((0,a.lp)(),(0,a.Ud)()),t,n),h);break;default:D+="/"}break;case 123*x:p[m++]=(0,o.to)(D)*k;case 125*x:case 59:case 0:switch(E){case 0:case 125:_=0;case 59+g:-1==k&&(D=(0,o.gx)(D,/\f/g,"")),y>0&&(0,o.to)(D)-v&&(0,o.R3)(y>32?c(D+";",r,n,v-1):c((0,o.gx)(D," ","")+";",r,n,v-2),h);break;case 59:D+=";";default:if((0,o.R3)(O=s(D,t,n,m,g,i,p,S,C=[],T=[],v),d),123===E)if(0===g)l(D,t,O,O,C,d,v,p,T);else switch(99===b&&110===(0,o.uO)(D,3)?100:b){case 100:case 108:case 109:case 115:l(e,O,O,r&&(0,o.R3)(s(e,O,O,0,0,i,p,S,i,C=[],v),T),i,T,v,p,r?C:T);break;default:l(D,O,O,O,[""],T,0,p,T)}}m=g=y=0,x=k=1,S=D="",v=f;break;case 58:v=1+(0,o.to)(D),y=w;default:if(x<1)if(123==E)--x;else if(125==E&&0==x++&&125==(0,a.mp)())continue;switch(D+=(0,o.Dp)(E),E*x){case 38:k=g>0?1:(D+="\f",-1);break;case 44:p[m++]=((0,o.to)(D)-1)*k,k=1;break;case 64:45===(0,a.fj)()&&(D+=(0,a.iF)((0,a.lp)())),b=(0,a.fj)(),g=v=(0,o.to)(S=D+=(0,a.QU)((0,a.Ud)())),E++;break;case 45:45===w&&2==(0,o.to)(D)&&(x=0)}}return d}function s(e,t,n,i,l,s,u,c,d,f,p){for(var h=l-1,m=0===l?s:[""],g=(0,o.Ei)(m),v=0,b=0,y=0;v<i;++v)for(var w=0,x=(0,o.tb)(e,h+1,h=(0,o.Wn)(b=u[v])),_=e;w<g;++w)(_=(0,o.fy)(b>0?m[w]+" "+x:(0,o.gx)(x,/&\f/g,m[w])))&&(d[y++]=_);return(0,a.dH)(e,t,n,0===l?r.Fr:c,d,f,p)}function u(e,t,n){return(0,a.dH)(e,t,n,r.Ab,(0,o.Dp)((0,a.Tb)()),(0,o.tb)(e,2,-2),0)}function c(e,t,n,i){return(0,a.dH)(e,t,n,r.h5,(0,o.tb)(e,0,i),(0,o.tb)(e,i+1,-1),i)}},20211:(e,t,n)=>{"use strict";n.d(t,{P:()=>i,q:()=>a});var r=n(27563),o=n(26686);function a(e,t){for(var n="",r=(0,o.Ei)(e),a=0;a<r;a++)n+=t(e[a],a,e,t)||"";return n}function i(e,t,n,i){switch(e.type){case r.JM:if(e.children.length)break;case r.K$:case r.h5:return e.return=e.return||e.value;case r.Ab:return"";case r.lK:return e.return=e.value+"{"+a(e.children,i)+"}";case r.Fr:e.value=e.props.join(",")}return(0,o.to)(n=a(e.children,i))?e.return=e.value+"{"+n+"}":""}},46411:(e,t,n)=>{"use strict";n.d(t,{FK:()=>l,JG:()=>d,QU:()=>C,Qb:()=>_,Tb:()=>f,Ud:()=>g,cE:()=>w,dH:()=>c,fj:()=>m,iF:()=>x,kq:()=>k,lp:()=>h,mp:()=>p,q6:()=>S,r:()=>b,tP:()=>v,un:()=>y});var r=n(26686),o=1,a=1,i=0,l=0,s=0,u="";function c(e,t,n,r,i,l,s){return{value:e,root:t,parent:n,type:r,props:i,children:l,line:o,column:a,length:s,return:""}}function d(e,t){return(0,r.f0)(c("",null,null,"",null,null,0),e,{length:-e.length},t)}function f(){return s}function p(){return s=l>0?(0,r.uO)(u,--l):0,a--,10===s&&(a=1,o--),s}function h(){return s=l<i?(0,r.uO)(u,l++):0,a++,10===s&&(a=1,o++),s}function m(){return(0,r.uO)(u,l)}function g(){return l}function v(e,t){return(0,r.tb)(u,e,t)}function b(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function y(e){return o=a=1,i=(0,r.to)(u=e),l=0,[]}function w(e){return u="",e}function x(e){return(0,r.fy)(v(l-1,E(91===e?e+2:40===e?e+1:e)))}function _(e){for(;(s=m())&&s<33;)h();return b(e)>2||b(s)>3?"":" "}function k(e,t){for(;--t&&h()&&!(s<48||s>102||s>57&&s<65||s>70&&s<97););return v(e,g()+(t<6&&32==m()&&32==h()))}function E(e){for(;h();)switch(s){case e:return l;case 34:case 39:34!==e&&39!==e&&E(s);break;case 40:41===e&&E(e);break;case 92:h()}return l}function S(e,t){for(;h()&&e+s!==57&&(e+s!==84||47!==m()););return"/*"+v(t,l-1)+"*"+(0,r.Dp)(47===e?e:h())}function C(e){for(;!b(m());)h();return v(e,l)}},26686:(e,t,n)=>{"use strict";n.d(t,{$e:()=>g,Cw:()=>c,Dp:()=>o,EQ:()=>s,Ei:()=>h,R3:()=>m,Wn:()=>r,f0:()=>a,fy:()=>l,gx:()=>u,tb:()=>f,to:()=>p,uO:()=>d,vp:()=>i});var r=Math.abs,o=String.fromCharCode,a=Object.assign;function i(e,t){return 45^d(e,0)?(((t<<2^d(e,0))<<2^d(e,1))<<2^d(e,2))<<2^d(e,3):0}function l(e){return e.trim()}function s(e,t){return(e=t.exec(e))?e[0]:e}function u(e,t,n){return e.replace(t,n)}function c(e,t){return e.indexOf(t)}function d(e,t){return 0|e.charCodeAt(t)}function f(e,t,n){return e.slice(t,n)}function p(e){return e.length}function h(e){return e.length}function m(e,t){return t.push(e),e}function g(e,t){return e.map(t).join("")}},38776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r="Invariant failed";function o(e,t){if(!e)throw new Error(r)}},57529:e=>{"use strict";e.exports={}},16887:e=>{"use strict";e.exports=JSON.parse('{"/about-4e7":{"__comp":"1be78505","__context":{"plugin":"0ca4f5f2"},"versionMetadata":"7818b736"},"/about/-a82":{"__comp":"17896441","content":"230402f8"},"/about/architect-7a3":{"__comp":"17896441","content":"d40faacd"},"/about/faq-4a0":{"__comp":"17896441","content":"7a250d2c"},"/about/roadmap-b12":{"__comp":"17896441","content":"ba0da7bd"},"/about/team-c35":{"__comp":"17896441","content":"13b4f215"},"/-9be":{"__comp":"1f391b9e","__context":{"plugin":"f50b8723"},"content":"e7ce6630"},"/-72c":{"__comp":"1be78505","__context":{"plugin":"b6219486"},"versionMetadata":"52065b4a"},"/community-dda":{"__comp":"17896441","content":"5086c83f"},"/join-us-3eb":{"__comp":"17896441","content":"4c51782d"},"/news-004":{"__comp":"17896441","content":"198b3d11"},"/privacy-policy-e92":{"__comp":"17896441","content":"81bf376d"},"/security-392":{"__comp":"17896441","content":"85cd0eac"},"/terms-73e":{"__comp":"17896441","content":"79dc5662"}}')}},e=>{e.O(0,[532],(()=>{return t=3364,e(e.s=t);var t}));e.O()}]); \ No newline at end of file + `),[d,c]))};var c,d,f}},17648:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useEventListener=void 0;const r=n(67294);t.useEventListener=(e,t,n,o,a)=>{const i=(0,r.useMemo)((()=>"string"==typeof e?e:e()),[]),l=(0,r.useMemo)((()=>"function"==typeof t?t():t),[t]);(0,r.useEffect)((()=>{if(null!=l&&l.addEventListener&&null!=l&&l.removeEventListener)return l.addEventListener(i,n,o),()=>{l.removeEventListener(i,n,o)}}),[i,l])}},67713:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useHydrated=void 0;const r=n(67294);t.useHydrated=()=>{const[e,t]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{t(!0)}),[]),e}},52606:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useIsMobile=void 0;const r=n(89164);t.useIsMobile=()=>(0,r.useMedia)("(max-width: 1199px)")},59213:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.usePersistedHistory=void 0;const r=n(89164);t.usePersistedHistory=(e,t)=>{const n=(null==t?void 0:t.unique)??!1,o=(null==t?void 0:t.equals)??((e,t)=>e===t),a=(null==t?void 0:t.maxItems)??null,[i,l]=(0,r.useLocalStorage)("logos-docusaurus-theme-"+e,[]),s=e=>{l((i??[]).filter(((t,n)=>!e(t,n))))};return{add:e=>{const t=i??[],r=[e,...n?t.filter((t=>!o(t,e))):t];l(a?r.slice(0,a):r)},clear:()=>{l([])},remove:s,removeByIndex:e=>{s(((t,n)=>n===e))},list:i}}},38840:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useDocThemeOptions=t.useThemeOptions=void 0;const r=n(70655),o=n(4452),a=r.__importDefault(n(6832));t.useThemeOptions=()=>{const{siteConfig:{customFields:e={}}}=(0,a.default)();return e["logos-docusaurus-theme"]??{}};t.useDocThemeOptions=()=>{var e;const n=(0,o.useActivePlugin)(),r=(0,t.useThemeOptions)();return n?(null==r||null==(e=r.docs)?void 0:e[null==n?void 0:n.pluginId])??{}:{}}},21457:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useWindowEventListener=void 0;const r=n(17648);t.useWindowEventListener=function(e,t,n,o){void 0===o&&(o=[]),(0,r.useEventListener)(e,(()=>"undefined"!=typeof window&&window),t,n,o)}},61818:(e,t,n)=>{"use strict";const r=n(70655),o=n(31665),a=n(11614),i=r.__importDefault(n(5730)),l=r.__importDefault(n(5574)),s=r.__importDefault(n(60388)),u=r.__importDefault(n(86010)),c=r.__importDefault(n(67294)),d=r.__importDefault(n(8633));t.Z=c.default.memo((function(e){let{className:t,buttonClassName:n,value:r,onChange:f}=e;const p=(0,i.default)(),h=(0,a.translate)({message:"Switch between dark and light mode (currently {mode})",id:"theme.colorToggle.ariaLabel",description:"The ARIA label for the navbar color mode toggle"},{mode:"dark"===r?(0,a.translate)({message:"dark mode",id:"theme.colorToggle.ariaLabel.mode.dark",description:"The name for the dark color mode"}):(0,a.translate)({message:"light mode",id:"theme.colorToggle.ariaLabel.mode.light",description:"The name for the light color mode"})});return c.default.createElement(o.IconButton,{className:(0,u.default)("clean-btn",d.default.toggle,t,!p&&d.default.toggleButtonDisabled,n),type:"button",onClick:()=>f("dark"===r?"light":"dark"),disabled:!p,title:h,"aria-label":h,"aria-live":"polite"},c.default.createElement(s.default,{className:(0,u.default)(d.default.toggleIcon,d.default.lightToggleIcon)}),c.default.createElement(l.default,{className:(0,u.default)(d.default.toggleIcon,d.default.darkToggleIcon)}))}))},72726:(e,t,n)=>{"use strict";const r=n(70655),o=n(31665),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=r.__importDefault(n(79762));t.Z=function(e){let{style:t,links:n,logo:r,copyright:s}=e;const[u,c]=(e=>{const t=[],n=[];for(const r of e)"title"in r&&"string"==typeof r.title&&r.title.startsWith("shared:")?n.push({...r,title:r.title.slice(7)}):t.push(r);return[t,n]})(n.props.links);return i.default.createElement("footer",{className:(0,a.default)("footer",{"footer--dark":"dark"===t})},i.default.createElement("div",{className:(0,a.default)("container","container-fluid",l.default.firstRow)},(r||s)&&i.default.createElement(i.default.Fragment,null,i.default.createElement("div",{className:"footer__bottom text--center"},r&&i.default.createElement("div",{className:"margin-bottom--sm"},r),s)),i.default.cloneElement(n,{links:u})),i.default.createElement("div",{className:(0,a.default)(l.default.secondRow)},i.default.createElement("span",{className:(0,a.default)("footer__bottom text--center")},"Built by"," ",i.default.createElement("a",{href:"https://free.technology/",target:"_blank",className:(0,a.default)(l.default.footerLink)},"IFT")),i.default.cloneElement(n,{links:c})),i.default.createElement(o.Button,{className:l.default.backToTop,size:"small",onClick:()=>{window.scrollTo({top:0,behavior:"smooth"})}},"Back to top \u2191"))}},10211:(e,t,n)=>{"use strict";const r=n(70655).__importDefault(n(67294)),o=n(93945),a=n(18279),i=(0,o.composeProviders)([a.AnnouncementBarProvider,a.ScrollControllerProvider,a.DocsPreferredVersionContextProvider,a.PluginHtmlClassNameProvider,a.NavbarProvider]);t.Z=function(e){let{children:t}=e;return r.default.createElement(i,null,t)}},60969:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(70655),o=r.__importDefault(n(67294)),a=r.__importDefault(n(88746)),i=r.__importDefault(n(51402)),l=r.__importDefault(n(6832)),s=n(93945),u=r.__importDefault(n(25812));function c(e){let{logo:t,alt:n,imageClassName:r}=e;const a={light:(0,i.default)(t.src),dark:(0,i.default)(t.srcDark||t.src)},l=o.default.createElement(u.default,{className:t.className,sources:a,height:t.height,width:t.width,alt:n,style:t.style});return r?o.default.createElement("div",{className:r},l):l}t.default=function(e){const{siteConfig:{title:t}}=(0,l.default)(),{navbar:{title:n,logo:r}}=(0,s.useThemeConfig)(),{imageClassName:u,titleClassName:d,...f}=e,p=(0,i.default)((null==r?void 0:r.href)||"/"),h=n?"":t,m=(null==r?void 0:r.alt)??h;return o.default.createElement(a.default,{to:p,...f,...(null==r?void 0:r.target)&&{target:r.target}},r&&o.default.createElement(c,{logo:r,alt:m,imageClassName:u}),null!=n&&o.default.createElement("b",{className:d},n))}},27882:(e,t,n)=>{"use strict";const r=n(70655),o=n(31665),a=n(93945),i=n(18279),l=r.__importDefault(n(17662)),s=r.__importDefault(n(56306)),u=r.__importDefault(n(60543)),c=r.__importDefault(n(93496)),d=r.__importDefault(n(20130)),f=r.__importDefault(n(86010)),p=r.__importDefault(n(67294)),h=n(67713),m=r.__importDefault(n(90826));function g(e){let{items:t}=e;return p.default.createElement(p.default.Fragment,null,t.map(((e,t)=>p.default.createElement(a.ErrorCauseBoundary,{key:t,onError:t=>new Error(`A theme navbar item failed to render.\nPlease double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config:\n${JSON.stringify(e,null,2)}`,{cause:t})},p.default.createElement(c.default,{...e})))))}t.Z=function(){const e=(0,h.useHydrated)(),t=(0,i.useNavbarMobileSidebar)(),n=(0,a.useThemeConfig)().navbar.items,[r,c]=(0,i.splitNavbarItems)(n.filter((e=>!["search"].includes(e.type??"")))),v=n.find((e=>"search"===e.type));return p.default.createElement("div",{className:"navbar__inner"},p.default.createElement("div",{className:"navbar__left"},p.default.createElement(s.default,null)),p.default.createElement("div",{className:"navbar__left-items"},p.default.createElement(g,{items:r})),p.default.createElement("div",{className:"navbar__right-items"},p.default.createElement(g,{items:c}),p.default.createElement(o.IconButtonGroup,{className:m.default.iconButtonGroup,size:"medium"},p.default.createElement(l.default,{key:"color-toggle",className:(0,f.default)(m.default.colorModeToggle,"navbar__color-mode-toggle")}),e&&p.default.createElement(p.default.Fragment,{key:"search"},v&&p.default.createElement(d.default,null)),p.default.createElement(p.default.Fragment,{key:"mobile-sidebar-toggle"},!t.disabled&&p.default.createElement(u.default,null)))))}},26558:(e,t,n)=>{"use strict";const r=n(70655),o=r.__importDefault(n(67294)),a=r.__importDefault(n(86010)),i=n(93945),l=n(18279),s=n(11614),u=r.__importDefault(n(44488)),c=r.__importDefault(n(97087));function d(e){return o.default.createElement("div",{role:"presentation",...e,className:(0,a.default)("navbar-sidebar__backdrop",e.className)})}t.Z=function(e){let{children:t}=e;const{navbar:{hideOnScroll:n,style:r}}=(0,i.useThemeConfig)(),f=(0,l.useNavbarMobileSidebar)(),{navbarRef:p,isNavbarVisible:h}=(0,l.useHideableNavbar)(n);return o.default.createElement("nav",{ref:p,"aria-label":(0,s.translate)({id:"theme.NavBar.navAriaLabel",message:"Main",description:"The ARIA label for the main navigation"}),className:(0,a.default)("navbar","navbar--fixed-top",n&&[c.default.navbarHideable,!h&&c.default.navbarHidden],{"navbar--dark":"dark"===r,"navbar--primary":"primary"===r,"navbar-sidebar--show":f.shown})},t,o.default.createElement(d,{onClick:f.toggle}),o.default.createElement(u.default,null))}},56306:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(70655),o=r.__importDefault(n(67294)),a=r.__importDefault(n(60969));t.default=function(){return o.default.createElement(a.default,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"})}},20080:(e,t,n)=>{"use strict";const r=n(70655),o=r.__importDefault(n(67294)),a=n(18279),i=n(11614),l=r.__importDefault(n(17662)),s=r.__importDefault(n(56306)),u=n(31665),c=r.__importDefault(n(20130));function d(){const e=(0,a.useNavbarMobileSidebar)();return o.default.createElement("button",{type:"button","aria-label":(0,i.translate)({id:"theme.docs.sidebar.closeSidebarButtonAriaLabel",message:"Close navigation bar",description:"The ARIA label for close button of mobile sidebar"}),className:"clean-btn navbar-sidebar__close",onClick:()=>e.toggle()},o.default.createElement(u.CloseIcon,null))}t.Z=function(){return o.default.createElement("div",{className:"navbar-sidebar__brand"},o.default.createElement(s.default,null),o.default.createElement(l.default,{className:"margin-right--md"}),o.default.createElement(c.default,null),o.default.createElement(d,null))}},64644:(e,t,n)=>{"use strict";const r=n(70655),o=r.__importDefault(n(67294)),a=r.__importDefault(n(86010)),i=n(18279),l=r.__importDefault(n(10510));t.Z=function(e){let{header:t,primaryMenu:n,secondaryMenu:r}=e;const{shown:s}=(0,i.useNavbarSecondaryMenu)();return o.default.createElement("div",{className:(0,a.default)("navbar-sidebar",s&&"navbar-sidebar--show-secondary")},t,o.default.createElement("div",{className:(0,a.default)("navbar-sidebar__items",{"navbar-sidebar__items--show-secondary":s})},o.default.createElement("div",{className:"navbar-sidebar__item menu"},n,!s&&o.default.createElement(l.default,null)),o.default.createElement("div",{className:"navbar-sidebar__item menu"},r)))}},29843:(e,t,n)=>{"use strict";const r=n(70655),o=n(31665),a=n(93945),i=n(18279),l=r.__importDefault(n(11614)),s=n(6980),u=r.__importDefault(n(67294));function c(e){return u.default.createElement("button",{...e,type:"button",className:"clean-btn navbar-sidebar__back"},u.default.createElement(s.IconArrowLeft,null),u.default.createElement(o.Typography,null,u.default.createElement(l.default,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"Back to main menu")))}t.Z=function(){const e=0===(0,a.useThemeConfig)().navbar.items.length,t=(0,i.useNavbarSecondaryMenu)();return u.default.createElement(u.default.Fragment,null,!e&&u.default.createElement(c,{onClick:()=>t.hide()}),t.content)}},71003:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(70655),o=n(31665),a=n(93945),i=n(18279),l=r.__importDefault(n(93496)),s=r.__importDefault(n(83112)),u=r.__importDefault(n(86010)),c=r.__importStar(n(67294)),d=r.__importDefault(n(83244));function f(e,t){return e.some((e=>function(e,t){return!!(0,i.isSamePath)(e.to,t)||!!(0,a.isRegexpStringMatch)(e.activeBaseRegex,t)||!(!e.activeBasePath||!t.startsWith(e.activeBasePath))}(e,t)))}function p(e){let{items:t,position:n,className:r,onClick:a,...i}=e;const f=(0,c.useRef)(null),[p,h]=(0,c.useState)(!1);return(0,c.useEffect)((()=>{const e=e=>{f.current&&!f.current.contains(e.target)&&h(!1)};return document.addEventListener("mousedown",e),document.addEventListener("touchstart",e),document.addEventListener("focusin",e),()=>{document.removeEventListener("mousedown",e),document.removeEventListener("touchstart",e),document.removeEventListener("focusin",e)}}),[f]),c.default.createElement("div",{ref:f,className:(0,u.default)("navbar__item",d.default.dropdownNavbarItem,"dropdown","dropdown--hoverable",{"dropdown--right":"right"===n,"dropdown--show":p})},c.default.createElement(s.default,{"aria-haspopup":"true","aria-expanded":p,role:"button",href:i.to?void 0:"#",className:(0,u.default)("navbar__link",r),...i,onClick:i.to?void 0:e=>e.preventDefault(),onKeyDown:e=>{"Enter"===e.key&&(e.preventDefault(),h(!p))}},i.children??i.label),c.default.createElement(o.ChevronDownIcon,{className:(0,u.default)("margin-left-8","cursor-pointer")}),c.default.createElement("ul",{className:"dropdown__menu"},t.map(((e,t)=>c.default.createElement(l.default,{isDropdownItem:!0,activeClassName:"dropdown__link--active",...e,key:t})))))}function h(e){let{items:t,className:n,position:r,onClick:d,...p}=e;const h=(0,i.useLocalPathname)(),m=f(t,h),{collapsed:g,toggleCollapsed:v,setCollapsed:b}=(0,a.useCollapsible)({initialState:()=>!m});return(0,c.useEffect)((()=>{m&&b(!m)}),[h,m,b]),c.default.createElement("li",{className:(0,u.default)("menu__list-item",{"menu__list-item--collapsed":g})},c.default.createElement(s.default,{role:"button",className:(0,u.default)("menu__link menu__link--sublist menu__link--sublist-caret",n),...p,onClick:e=>{e.preventDefault(),v()}},c.default.createElement(o.Typography,{variant:"body1"},p.children??p.label)),c.default.createElement(a.Collapsible,{lazy:!0,as:"ul",className:"menu__list",collapsed:g},t.map(((e,t)=>c.default.createElement(l.default,{mobile:!0,isDropdownItem:!0,onClick:d,activeClassName:"menu__link--active",...e,key:t})))))}t.default=function(e){let{mobile:t=!1,...n}=e;const r=t?h:p;return c.default.createElement(r,{...n})}},23247:(e,t,n)=>{"use strict";const r=n(70655),o=r.__importDefault(n(67294)),a=r.__importDefault(n(6832)),i=n(18279),l=n(11614),s=n(7154),u=r.__importDefault(n(71003));t.Z=function(e){var t;let{mobile:n,dropdownItemsBefore:r,dropdownItemsAfter:c,...d}=e;const{i18n:{currentLocale:f,locales:p,localeConfigs:h}}=(0,a.default)(),m=(0,i.useAlternatePageUtils)(),{search:g,hash:v}=(0,s.useLocation)(),b=[...r,...p.map((e=>{var t,r;const o=`${`pathname://${m.createUrl({locale:e,fullyQualified:!1})}`}${g}${v}`;return{label:null==(t=h[e])?void 0:t.label,lang:null==(r=h[e])?void 0:r.htmlLang,to:o,target:"_self",autoAddBaseUrl:!1,className:e===f?n?"menu__link--active":"dropdown__link--active":""}})),...c],y=n?(0,l.translate)({message:"Languages",id:"theme.navbar.mobileLanguageDropdown.label",description:"The label for the mobile language switcher dropdown"}):null==(t=h[f])?void 0:t.label.substring(0,2).toUpperCase();return o.default.createElement(u.default,{...d,mobile:n,label:o.default.createElement(o.default.Fragment,null,y),items:b})}},83112:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(70655),o=n(31665),a=r.__importDefault(n(71699)),i=r.__importDefault(n(88746)),l=n(93945),s=r.__importDefault(n(51402)),u=r.__importDefault(n(67294)),c=n(22197),d=r.__importDefault(n(88822));t.default=function(e){let{activeBasePath:t,activeBaseRegex:n,to:r,href:f,label:p,html:h,isDropdownLink:m,prependBaseUrlToHref:g,...v}=e;const b=(0,s.default)(r),y=(0,s.default)(t),w=(0,s.default)(f,{forcePrependBaseUrl:!0}),x=p&&f&&!(0,a.default)(f),_=h?{dangerouslySetInnerHTML:{__html:h}}:{children:u.default.createElement(o.Typography,{component:"div",variant:"body2",className:d.default.linkContent},p,x&&u.default.createElement(c.IconExternalLink,{className:d.default.externalLinkIcon}))};return f?u.default.createElement(i.default,{href:g?w:f,...v,..._}):u.default.createElement(i.default,{to:b,isNavLink:!0,...(t||n)&&{isActive:(e,t)=>n?(0,l.isRegexpStringMatch)(n,t.pathname):t.pathname.startsWith(y)},...v,..._})}},28511:(e,t,n)=>{"use strict";const r=n(70655),o=n(18279),a=r.__importDefault(n(67294)),i=n(91866),l=n(84138),s=n(38840),u=r.__importDefault(n(36459));t.Z=function(e){var t;let{children:n}=e;const r=(0,s.useDocThemeOptions)(),c=null==r||null==(t=r.sidebar)?void 0:t.hide;return a.default.createElement(o.ColorModeProvider,null,a.default.createElement(l.ThemeProvider,null,a.default.createElement(i.LightBoxProvider,null,a.default.createElement("div",{className:u.default.root,"data-hidden-doc-sidebar":c},n))))}},56051:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchBar=void 0;const r=n(70655),o=n(31665),a=r.__importStar(n(67294)),i=n(81575),l=n(59213),s=n(21457),u=n(41310),c=r.__importDefault(n(31259)),d=n(55634),f=n(16991),p=n(44334);t.SearchBar=e=>{let{}=e;const t=(0,l.usePersistedHistory)("search",{unique:!0,equals:(e,t)=>e.title===t.title&&e.href===t.href,maxItems:10}),n=(0,u.useSearch)(),r=(0,a.useRef)(null),[h,m]=(0,a.useState)(""),[g,v]=(0,a.useState)([]),[b,y]=(0,a.useState)(!1);(0,a.useEffect)((()=>{h.length>0?(async e=>{const{results:t}=await n.query(e);v(t)})(h):v([])}),[h]),(0,a.useEffect)((()=>{b?(()=>{const e=r.current;if(!e)return;const t=e.querySelector("input");t&&setTimeout((()=>{t.focus()}),50)})():m("")}),[b]);return(0,s.useWindowEventListener)("keydown",(e=>{(e.ctrlKey||e.metaKey)&&"KeyK"===e.code&&(e.preventDefault(),y(!0))}),{},[]),a.default.createElement(a.default.Fragment,null,a.default.createElement(o.IconButton,{onClick:()=>y(!0),size:"medium"},a.default.createElement(o.SearchIcon,null)),a.default.createElement(i.Modal,{keepMounted:!0,id:"search-modal",open:b,onClose:()=>y(!1),className:c.default.modal},a.default.createElement("div",{className:c.default.header},a.default.createElement(f.SearchInput,{containerRef:r,onClear:()=>{m("")},value:h,onChange:e=>{m(e.target.value)}}),a.default.createElement(o.IconButton,{className:c.default.closeButton,size:"medium",onClick:()=>y(!1)},a.default.createElement(o.CloseIcon,{color:"primary"}))),h.length>0&&a.default.createElement(p.SearchResults,{results:g,onNavigate:(e,n)=>{e.preventDefault(),y(!1),t.add(n),window.location.href=n.href}}),0===h.length&&a.default.createElement(d.SearchHistory,{history:t.list??[],onRemove:t.removeByIndex,onClose:()=>y(!1)})))}},55634:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchHistory=void 0;const r=n(70655),o=n(31665),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=n(22197),s=n(42130),u=r.__importDefault(n(61699));t.SearchHistory=e=>{let{history:t=[],onRemove:n,onClose:r,className:c,children:d,...f}=e;return i.default.createElement("div",{className:(0,a.default)(c,u.default.root,0===t.length&&u.default.empty),...f},0===t.length?i.default.createElement(s.SearchResultMessage,null,"No recent searches"):i.default.createElement(i.default.Fragment,null,i.default.createElement(o.Typography,{className:u.default.title,variant:"subtitle2",component:"div"},"Recent"),t.map(((e,t)=>i.default.createElement("div",{key:t,className:u.default.item},i.default.createElement(l.IconHistory,null),i.default.createElement(o.Typography,{variant:"subtitle2",component:"a",href:e.href,className:u.default.itemTitle,dangerouslySetInnerHTML:{__html:e.title},onClick:()=>r&&r()}),i.default.createElement("button",{className:"clean-btn",onClick:()=>n(t)},i.default.createElement(l.IconClose,null)))))))}},16991:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchInput=void 0;const r=n(70655),o=n(31665),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=n(89164),s=r.__importDefault(n(9592));t.SearchInput=e=>{let{value:t="",active:n,onChange:r,onClear:u,onFocus:c,onCancel:d,className:f,inputProps:{ref:p,...h}={placeholder:""},containerRef:m,...g}=e;const v=(0,l.useMedia)("(max-width: 996px)"),b=n||(null==t?void 0:t.length)>0;return i.default.createElement("div",{ref:m,className:(0,a.default)(s.default.root,b&&s.default.expanded,f),onKeyDown:e=>{"Escape"===e.code&&t.length>0&&(e.stopPropagation(),u&&u())},...g},i.default.createElement(o.TextField,{className:s.default.textField,value:t,placeholder:b||v?h.placeholder:"",onChange:r,onFocus:e=>{c&&c()},clearButton:!0,icon:i.default.createElement(o.SearchIcon,{color:"primary"}),...h}))}},537:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchResultGroup=void 0;const r=n(70655),o=n(31665),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=r.__importDefault(n(1443));t.SearchResultGroup=e=>{let{className:t,title:n="",children:r,...s}=e;return i.default.createElement("div",{className:(0,a.default)(l.default.root,t),...s},i.default.createElement("div",null,i.default.createElement(o.Typography,{variant:"subtitle2"},n)),i.default.createElement("ul",null,r))}},16183:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(70655).__exportStar(n(537),t)},78447:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchResultItem=void 0;const r=n(70655),o=r.__importDefault(n(88746)),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=r.__importDefault(n(7744)),s=r.__importDefault(n(42924)),u=n(55459),c=n(79587),d=r.__importDefault(n(18589)),f={[c.SearchDocumentType.Title]:i.default.createElement(l.default,{className:(0,a.default)(d.default.icon,d.default.fill)}),[c.SearchDocumentType.Heading]:i.default.createElement(s.default,{className:(0,a.default)(d.default.icon,d.default.fill)}),[c.SearchDocumentType.Paragraph]:i.default.createElement(s.default,{className:(0,a.default)(d.default.icon,d.default.fill)})};t.SearchResultItem=e=>{let{type:t,level:n=0,href:r,title:l,content:s,className:c,linkProps:{className:p,...h}={},...m}=e;const g=f[t];return i.default.createElement(o.default,{href:r,className:(0,a.default)(d.default.root,d.default[`level${n}`],p),...h},i.default.createElement(u.SearchResultItemBase,{title:l,content:s,icon:g,...m}))}},98028:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(70655).__exportStar(n(78447),t)},8655:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchResultItemBase=void 0;const r=n(70655),o=n(31665),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=r.__importDefault(n(86620));t.SearchResultItemBase=e=>{let{icon:t,title:n,content:r,className:s,...u}=e;return i.default.createElement("li",{className:(0,a.default)(l.default.root,s),...u},i.default.createElement("span",null,t),i.default.createElement("div",null,n&&i.default.createElement(o.Typography,{variant:"subtitle2",component:"span",dangerouslySetInnerHTML:{__html:n}})))}},55459:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});n(70655).__exportStar(n(8655),t)},42130:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchResultMessage=void 0;const r=n(70655),o=n(31665),a=r.__importDefault(n(86010)),i=r.__importDefault(n(67294)),l=r.__importDefault(n(38076));t.SearchResultMessage=e=>{let{className:t,children:n,...r}=e;return i.default.createElement(o.Typography,{className:(0,a.default)(t,l.default.root),variant:"subtitle2",component:"div",...r},i.default.createElement("span",null,n))}},44334:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchResults=void 0;const r=n(70655),o=r.__importDefault(n(86010)),a=r.__importStar(n(67294)),i=n(16183),l=n(98028),s=n(42130),u=n(36570),c=r.__importDefault(n(20550));t.SearchResults=e=>{let{results:t,className:n,onNavigate:r,...d}=e;const f=t.length,p=(0,a.useMemo)((()=>(0,u.groupSearchResult)(t)),[t]);return a.default.createElement("div",{className:(0,o.default)(c.default.root,0===f&&c.default.noResults)},0===f&&a.default.createElement(s.SearchResultMessage,null,"No result."),a.default.createElement("div",{className:(0,o.default)(c.default.groups)},p.map(((e,t)=>{let[n,o]=e;return a.default.createElement(a.default.Fragment,{key:t},a.default.createElement(i.SearchResultGroup,{className:c.default.group,title:n},o.map(((e,t)=>a.default.createElement(l.SearchResultItem,{key:t,type:e.type,level:e.level,href:e.href,title:e.title,content:e.content,linkProps:r?{onClick:t=>r(t,e)}:{}})))))}))))}},41310:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useSearch=void 0;const r=n(67294),o=n(8675);t.useSearch=()=>{const{createSearchInstance:e}=window,t=(0,o.useSearchContextPath)(),[n,a]=(0,r.useState)(!1),i=(0,r.useRef)(null);return(0,r.useEffect)((()=>{a(!1),(async()=>{i.current=await e({resultsLimit:50,preferredVersionPath:t[0],searchContextByPaths:t[1]}),await i.current.init(),a(!0)})()}),[t[0],t[1]]),{loaded:n,query:async e=>await i.current.query(e)}}},8675:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.useSearchContextPath=void 0;const r=n(4452),o=n(68347),a=()=>window.getProxiedGeneratedData().searchContextByPaths;t.useSearchContextPath=()=>{const e=a(),t=(0,r.useActivePluginAndVersion)();if(!t)return["/",""];const{activePlugin:{pluginData:{path:n}},activeVersion:i}=t;return i?[n!==i.path?(0,o.ensureTrailingSlash)(i.path):"/",e]:["/",""]}},20130:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(70655),o=r.__importDefault(n(24649)),a=r.__importDefault(n(67294)),i=n(56051);t.default=()=>"undefined"==typeof window?a.default.createElement(a.default.Fragment,null):a.default.createElement(o.default,{fallback:()=>a.default.createElement(a.default.Fragment,null)},a.default.createElement(i.SearchBar,null))},79587:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.SearchDocumentType=void 0,function(e){e.Title="title",e.Heading="heading",e.Paragraph="paragraph"}(t.SearchDocumentType||(t.SearchDocumentType={}))},36570:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.groupSearchResult=void 0;const r=n(70655),o=r.__importDefault(n(7739)),a=r.__importDefault(n(57557)),i=n(79587);t.groupSearchResult=e=>Object.entries((0,o.default)(e.map((e=>(e=>{const{type:t,document:n,page:r,highlighted:o,score:a}=e,{url:l,hash:s=""}=n,u=l+s;switch(t){case i.SearchDocumentType.Title:var c;return{type:t,level:0,url:l,hash:s,href:u,score:a,title:o,content:"",category:(null==(c=n.breadcrumb)?void 0:c[1])??n.title};case i.SearchDocumentType.Heading:{var d;const e=r;return{type:t,level:1,url:l,hash:s,href:u,score:a,title:o,content:"",category:(null==e||null==(d=e.breadcrumb)?void 0:d[1])??(null==e?void 0:e.title)??""}}case i.SearchDocumentType.Paragraph:{var f;const e=r;return{type:t,level:2,url:l,hash:s,href:u,score:a,title:n.sectionTitle||n.title||"",content:o,category:(null==e||null==(f=e.breadcrumb)?void 0:f[1])??(null==e?void 0:e.title)??""}}}})(e))),"category")).map((e=>{let[t,n]=e;return[t,n.map((e=>(0,a.default)(e,"category"))).sort(((e,t)=>e.score>t.score?-1:1))]})).sort(((e,t)=>{var n,r;return((null==(n=e[1][0])?void 0:n.score)??0)>((null==(r=t[1][0])?void 0:r.score)??0)?-1:1})).map((e=>{let[t,n]=e;return[t,Object.entries((0,o.default)(n,"url")).map((e=>{var t;let[n,r]=e,o=[...r].sort(((e,t)=>e.type===i.SearchDocumentType.Title||e.score>t.score?-1:1));const a=(null==(t=o[0])?void 0:t.type)===i.SearchDocumentType.Title;return o=a?o.filter((e=>!(e.type===i.SearchDocumentType.Heading&&""===e.hash))):o,o=o.map(((e,t)=>({...e,level:a?0===t?0:1:0}))),[n,o]})).sort(((e,t)=>{var n,r;return((null==(n=e[1][0])?void 0:n.score)??0)>((null==(r=t[1][0])?void 0:r.score)??0)?-1:1})).flatMap((e=>{let[t,n]=e;return n}))]}))},25812:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});const r=n(70655),o=r.__importDefault(n(67294)),a=r.__importDefault(n(86010)),i=r.__importDefault(n(5730)),l=n(93945),s=r.__importDefault(n(65787));t.default=function(e){const t=(0,i.default)(),{colorMode:n}=(0,l.useColorMode)(),{sources:r,className:u,alt:c,...d}=e,f=t?"dark"===n?["dark"]:["light"]:["light","dark"];return o.default.createElement(o.default.Fragment,null,f.map((e=>o.default.createElement("img",{key:e,src:r[e],alt:c,className:(0,a.default)(s.default.themedImage,s.default[`themedImage--${e}`],u),...d}))))}},74058:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,t:()=>a});var r=n(67294);const o=r.createContext(!1);function a(e){let{children:t}=e;const[n,a]=(0,r.useState)(!1);return(0,r.useEffect)((()=>{a(!0)}),[]),r.createElement(o.Provider,{value:n},t)}},3364:(e,t,n)=>{"use strict";var r=n(67294),o=n(73935),a=n(73727),i=n(70405),l=n(19901);const s=[n(79578),n(32497),n(25529),n(26126),n(11057),n(93878),n(27998)];var u=n(21204),c=n(16550),d=n(18790),f=n(28511),p=n(87462),h=n(32411),m=n(6832),g=n(51402),v=n(96793),b=n(44873),y=n(13156),w=n(22768),x=n(39105),_=n(26145);function k(){const{i18n:{defaultLocale:e,localeConfigs:t}}=(0,m.default)(),n=(0,y.l)();return r.createElement(h.Z,null,Object.entries(t).map((e=>{let[t,{htmlLang:o}]=e;return r.createElement("link",{key:t,rel:"alternate",href:n.createUrl({locale:t,fullyQualified:!0}),hrefLang:o})})),r.createElement("link",{rel:"alternate",href:n.createUrl({locale:e,fullyQualified:!0}),hrefLang:"x-default"}))}function E(e){let{permalink:t}=e;const{siteConfig:{url:n}}=(0,m.default)(),o=function(){const{siteConfig:{url:e}}=(0,m.default)(),{pathname:t}=(0,c.TH)();return e+(0,g.default)(t)}(),a=t?`${n}${t}`:o;return r.createElement(h.Z,null,r.createElement("meta",{property:"og:url",content:a}),r.createElement("link",{rel:"canonical",href:a}))}function S(){const{i18n:{currentLocale:e}}=(0,m.default)(),{metadata:t,image:n}=(0,v.L)();return r.createElement(r.Fragment,null,r.createElement(h.Z,null,r.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),r.createElement("body",{className:w.h})),n&&r.createElement(b.d,{image:n}),r.createElement(E,null),r.createElement(k,null),r.createElement(_.Z,{tag:x.HX,locale:e}),r.createElement(h.Z,null,t.map(((e,t)=>r.createElement("meta",(0,p.Z)({key:t},e))))))}const C=new Map;function T(e){if(C.has(e.pathname))return{...e,pathname:C.get(e.pathname)};if((0,d.f)(u.Z,e.pathname).some((e=>{let{route:t}=e;return!0===t.exact})))return C.set(e.pathname,e.pathname),e;const t=e.pathname.trim().replace(/(?:\/index)?\.html$/,"")||"/";return C.set(e.pathname,t),{...e,pathname:t}}var O=n(74058),D=n(56725);function P(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;r<t;r++)n[r-1]=arguments[r];const o=s.map((t=>{var r;const o=(null==(r=t.default)?void 0:r[e])??t[e];return null==o?void 0:o(...n)}));return()=>o.forEach((e=>null==e?void 0:e()))}const N=function(e){let{children:t,location:n,previousLocation:o}=e;return(0,r.useLayoutEffect)((()=>{o!==n&&(!function(e){let{location:t,previousLocation:n}=e;if(!n)return;const r=t.pathname===n.pathname,o=t.hash===n.hash,a=t.search===n.search;if(r&&o&&!a)return;const{hash:i}=t;if(i){const e=decodeURIComponent(i.substring(1)),t=document.getElementById(e);null==t||t.scrollIntoView()}else window.scrollTo(0,0)}({location:n,previousLocation:o}),P("onRouteDidUpdate",{previousLocation:o,location:n}))}),[o,n]),t};function I(e){const t=Array.from(new Set([e,decodeURI(e)])).map((e=>(0,d.f)(u.Z,e))).flat();return Promise.all(t.map((e=>null==e.route.component.preload?void 0:e.route.component.preload())))}class A extends r.Component{constructor(e){super(e),this.previousLocation=void 0,this.routeUpdateCleanupCb=void 0,this.previousLocation=null,this.routeUpdateCleanupCb=l.default.canUseDOM?P("onRouteUpdate",{previousLocation:null,location:this.props.location}):()=>{},this.state={nextRouteHasLoaded:!0}}shouldComponentUpdate(e,t){if(e.location===this.props.location)return t.nextRouteHasLoaded;const n=e.location;return this.previousLocation=this.props.location,this.setState({nextRouteHasLoaded:!1}),this.routeUpdateCleanupCb=P("onRouteUpdate",{previousLocation:this.previousLocation,location:n}),I(n.pathname).then((()=>{this.routeUpdateCleanupCb(),this.setState({nextRouteHasLoaded:!0})})).catch((e=>{console.warn(e),window.location.reload()})),!1}render(){const{children:e,location:t}=this.props;return r.createElement(N,{previousLocation:this.previousLocation,location:t},r.createElement(c.AW,{location:t,render:()=>e}))}}const L=A,R="__docusaurus-base-url-issue-banner-container",j="__docusaurus-base-url-issue-banner-suggestion-container",M="__DOCUSAURUS_INSERT_BASEURL_BANNER";function F(e){return`\nwindow['${M}'] = true;\n\ndocument.addEventListener('DOMContentLoaded', maybeInsertBanner);\n\nfunction maybeInsertBanner() {\n var shouldInsert = window['${M}'];\n shouldInsert && insertBanner();\n}\n\nfunction insertBanner() {\n var bannerContainer = document.getElementById('${R}');\n if (!bannerContainer) {\n return;\n }\n var bannerHtml = ${JSON.stringify(function(e){return`\n<div id="__docusaurus-base-url-issue-banner" style="border: thick solid red; background-color: rgb(255, 230, 179); margin: 20px; padding: 20px; font-size: 20px;">\n <p style="font-weight: bold; font-size: 30px;">Your Docusaurus site did not load properly.</p>\n <p>A very common reason is a wrong site <a href="https://docusaurus.io/docs/docusaurus.config.js/#baseUrl" style="font-weight: bold;">baseUrl configuration</a>.</p>\n <p>Current configured baseUrl = <span style="font-weight: bold; color: red;">${e}</span> ${"/"===e?" (default value)":""}</p>\n <p>We suggest trying baseUrl = <span id="${j}" style="font-weight: bold; color: green;"></span></p>\n</div>\n`}(e)).replace(/</g,"\\<")};\n bannerContainer.innerHTML = bannerHtml;\n var suggestionContainer = document.getElementById('${j}');\n var actualHomePagePath = window.location.pathname;\n var suggestedBaseUrl = actualHomePagePath.substr(-1) === '/'\n ? actualHomePagePath\n : actualHomePagePath + '/';\n suggestionContainer.innerHTML = suggestedBaseUrl;\n}\n`}function B(){const{siteConfig:{baseUrl:e}}=(0,m.default)();return(0,r.useLayoutEffect)((()=>{window[M]=!1}),[]),r.createElement(r.Fragment,null,!l.default.canUseDOM&&r.createElement(h.Z,null,r.createElement("script",null,F(e))),r.createElement("div",{id:R}))}function z(){const{siteConfig:{baseUrl:e,baseUrlIssueBanner:t}}=(0,m.default)(),{pathname:n}=(0,c.TH)();return t&&n===e?r.createElement(B,null):null}function $(){const{siteConfig:{favicon:e,title:t,noIndex:n},i18n:{currentLocale:o,localeConfigs:a}}=(0,m.default)(),i=(0,g.default)(e),{htmlLang:l,direction:s}=a[o];return r.createElement(h.Z,null,r.createElement("html",{lang:l,dir:s}),r.createElement("title",null,t),r.createElement("meta",{property:"og:title",content:t}),r.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),n&&r.createElement("meta",{name:"robots",content:"noindex, nofollow"}),e&&r.createElement("link",{rel:"icon",href:i}))}var U=n(24649);function H(){const e=(0,d.H)(u.Z),t=(0,c.TH)();return r.createElement(U.default,null,r.createElement(D.M,null,r.createElement(O.t,null,r.createElement(f.Z,null,r.createElement($,null),r.createElement(S,null),r.createElement(z,null),r.createElement(L,{location:T(t)},e)))))}var V=n(16887);const q=function(e){try{return document.createElement("link").relList.supports(e)}catch{return!1}}("prefetch")?function(e){return new Promise(((t,n)=>{var r;if("undefined"==typeof document)return void n();const o=document.createElement("link");o.setAttribute("rel","prefetch"),o.setAttribute("href",e),o.onload=()=>t(),o.onerror=()=>n();const a=document.getElementsByTagName("head")[0]??(null==(r=document.getElementsByName("script")[0])?void 0:r.parentNode);null==a||a.appendChild(o)}))}:function(e){return new Promise(((t,n)=>{const r=new XMLHttpRequest;r.open("GET",e,!0),r.withCredentials=!0,r.onload=()=>{200===r.status?t():n()},r.send(null)}))};var G=n(66916);const W=new Set,Z=new Set,Q=()=>{var e,t;return(null==(e=navigator.connection)?void 0:e.effectiveType.includes("2g"))||(null==(t=navigator.connection)?void 0:t.saveData)},Y={prefetch(e){if(!(e=>!Q()&&!Z.has(e)&&!W.has(e))(e))return!1;W.add(e);const t=(0,d.f)(u.Z,e).flatMap((e=>{return t=e.route.path,Object.entries(V).filter((e=>{let[n]=e;return n.replace(/-[^-]+$/,"")===t})).flatMap((e=>{let[,t]=e;return Object.values((0,G.Z)(t))}));var t}));return Promise.all(t.map((e=>{const t=n.gca(e);return t&&!t.includes("undefined")?q(t).catch((()=>{})):Promise.resolve()})))},preload:e=>!!(e=>!Q()&&!Z.has(e))(e)&&(Z.add(e),I(e))},X=Object.freeze(Y);if(l.default.canUseDOM){window.docusaurus=X;const e=o.hydrate;I(window.location.pathname).then((()=>{e(r.createElement(i.B6,null,r.createElement(a.VK,null,r.createElement(H,null))),document.getElementById("__docusaurus"))}))}},56725:(e,t,n)=>{"use strict";n.d(t,{_:()=>c,M:()=>d});var r=n(67294),o=n(36809);const a=JSON.parse('{"docusaurus-plugin-content-docs":{"root-pages":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"community","docs":[{"id":"community","path":"/community"},{"id":"join-us","path":"/join-us"},{"id":"news","path":"/news"},{"id":"privacy-policy","path":"/privacy-policy"},{"id":"security","path":"/security"},{"id":"terms","path":"/terms"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/community","label":"community"}}}}],"breadcrumbs":false},"about":{"path":"/about","versions":[{"name":"current","label":"Next","isLast":true,"path":"/about","mainDocId":"index","docs":[{"id":"architect","path":"/about/architect","sidebar":"defaultSidebar"},{"id":"faq","path":"/about/faq","sidebar":"defaultSidebar"},{"id":"index","path":"/about/","sidebar":"defaultSidebar"},{"id":"roadmap","path":"/about/roadmap","sidebar":"defaultSidebar"},{"id":"team","path":"/about/team","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/about/","label":"index"}}}}],"breadcrumbs":true}}}'),i=JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}');var l=n(57529);const s=JSON.parse('{"docusaurusVersion":"2.4.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.1"},"docusaurus-plugin-sass":{"type":"package","name":"docusaurus-plugin-sass","version":"0.2.3"},"logos-docusaurus-search-local":{"type":"package","name":"@acid-info/logos-docusaurus-search-local","version":"1.0.0-alpha.111"},"logos-data-plugin":{"type":"local"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.1"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"2.4.1"},"logos-docusaurus-theme":{"type":"package","name":"@acid-info/logos-docusaurus-theme","version":"1.0.0-alpha.174"},"docusaurus-fathom":{"type":"package","name":"@acid-info/docusaurus-fathom","version":"1.0.0-alpha.111"},"docusaurus-og":{"type":"package","name":"@acid-info/docusaurus-og","version":"1.0.0-alpha.131"}}}'),u={siteConfig:o.Z,siteMetadata:s,globalData:a,i18n:i,codeTranslations:l},c=r.createContext(u);function d(e){let{children:t}=e;return r.createElement(c.Provider,{value:u},t)}},24649:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>f});var r=n(67294),o=n(19901),a=n(32411),i=n(79861),l=n(66867);function s(e){let{error:t,tryAgain:n}=e;return r.createElement("div",{style:{display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"flex-start",minHeight:"100vh",width:"100%",maxWidth:"80ch",fontSize:"20px",margin:"0 auto",padding:"1rem"}},r.createElement("h1",{style:{fontSize:"3rem"}},"This page crashed"),r.createElement("button",{type:"button",onClick:n,style:{margin:"1rem 0",fontSize:"2rem",cursor:"pointer",borderRadius:20,padding:"1rem"}},"Try again"),r.createElement(u,{error:t}))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return r.createElement("p",{style:{whiteSpace:"pre-wrap"}},n)}function c(e){let{error:t,tryAgain:n}=e;return r.createElement(f,{fallback:()=>r.createElement(s,{error:t,tryAgain:n})},r.createElement(a.Z,null,r.createElement("title",null,"Page Error")),r.createElement(l.default,null,r.createElement(s,{error:t,tryAgain:n})))}const d=e=>r.createElement(c,e);class f extends r.Component{constructor(e){super(e),this.state={error:null}}componentDidCatch(e){o.default.canUseDOM&&this.setState({error:e})}render(){const{children:e}=this.props,{error:t}=this.state;if(t){const e={error:t,tryAgain:()=>this.setState({error:null})};return(this.props.fallback??d)(e)}return e??null}}},19901:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>o});const r="undefined"!=typeof window&&"document"in window&&"createElement"in window.document,o={canUseDOM:r,canUseEventListeners:r&&("addEventListener"in window||"attachEvent"in window),canUseIntersectionObserver:r&&"IntersectionObserver"in window,canUseViewport:r&&"screen"in window}},32411:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294),o=n(70405);function a(e){return r.createElement(o.ql,e)}},88746:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(87462),o=n(67294),a=n(73727),i=n(79861),l=n(6832),s=n(71699),u=n(19901);const c=o.createContext({collectLink:()=>{}});var d=n(51402);function f(e,t){var n;let{isNavLink:f,to:p,href:h,activeClassName:m,isActive:g,"data-noBrokenLinkCheck":v,autoAddBaseUrl:b=!0,...y}=e;const{siteConfig:{trailingSlash:w,baseUrl:x}}=(0,l.default)(),{withBaseUrl:_}=(0,d.useBaseUrlUtils)(),k=(0,o.useContext)(c),E=(0,o.useRef)(null);(0,o.useImperativeHandle)(t,(()=>E.current));const S=p||h;const C=(0,s.default)(S),T=null==S?void 0:S.replace("pathname://","");let O=void 0!==T?(D=T,b&&(e=>e.startsWith("/"))(D)?_(D):D):void 0;var D;O&&C&&(O=(0,i.applyTrailingSlash)(O,{trailingSlash:w,baseUrl:x}));const P=(0,o.useRef)(!1),N=f?a.OL:a.rU,I=u.default.canUseIntersectionObserver,A=(0,o.useRef)(),L=()=>{P.current||null==O||(window.docusaurus.preload(O),P.current=!0)};(0,o.useEffect)((()=>(!I&&C&&null!=O&&window.docusaurus.prefetch(O),()=>{I&&A.current&&A.current.disconnect()})),[A,O,I,C]);const R=(null==(n=O)?void 0:n.startsWith("#"))??!1,j=!O||!C||R;return j||v||k.collectLink(O),j?o.createElement("a",(0,r.Z)({ref:E,href:O},S&&!C&&{target:"_blank",rel:"noopener noreferrer"},y)):o.createElement(N,(0,r.Z)({},y,{onMouseEnter:L,onTouchStart:L,innerRef:e=>{E.current=e,I&&e&&C&&(A.current=new window.IntersectionObserver((t=>{t.forEach((t=>{e===t.target&&(t.isIntersecting||t.intersectionRatio>0)&&(A.current.unobserve(e),A.current.disconnect(),null!=O&&window.docusaurus.prefetch(O))}))})),A.current.observe(e))},to:O},f&&{isActive:g,activeClassName:m}))}const p=o.forwardRef(f)},11614:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s,translate:()=>l});var r=n(67294);function o(e,t){const n=e.split(/(\{\w+\})/).map(((e,n)=>{if(n%2==1){const n=null==t?void 0:t[e.slice(1,-1)];if(void 0!==n)return n}return e}));return n.some((e=>(0,r.isValidElement)(e)))?n.map(((e,t)=>(0,r.isValidElement)(e)?r.cloneElement(e,{key:t}):e)).filter((e=>""!==e)):n.join("")}var a=n(57529);function i(e){let{id:t,message:n}=e;if(void 0===t&&void 0===n)throw new Error("Docusaurus translation declarations must have at least a translation id or a default translation message");return a[t??n]??n??t}function l(e,t){let{message:n,id:r}=e;return o(i({message:n,id:r}),t)}function s(e){let{children:t,id:n,values:a}=e;if(t&&"string"!=typeof t)throw console.warn("Illegal <Translate> children",t),new Error("The Docusaurus <Translate> component only accept simple string values");const l=i({message:t,id:n});return r.createElement(r.Fragment,null,o(l,a))}},12497:(e,t,n)=>{"use strict";n.d(t,{m:()=>r});const r="default"},71699:(e,t,n)=>{"use strict";function r(e){return/^(?:\w*:|\/\/)/.test(e)}function o(e){return void 0!==e&&!r(e)}n.r(t),n.d(t,{default:()=>o,hasProtocol:()=>r})},7154:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Redirect:()=>r.l_,matchPath:()=>r.LX,useHistory:()=>r.k6,useLocation:()=>r.TH});var r=n(16550)},51402:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l,useBaseUrlUtils:()=>i});var r=n(67294),o=n(6832),a=n(71699);function i(){const{siteConfig:{baseUrl:e,url:t}}=(0,o.default)(),n=(0,r.useCallback)(((n,r)=>function(e,t,n,r){let{forcePrependBaseUrl:o=!1,absolute:i=!1}=void 0===r?{}:r;if(!n||n.startsWith("#")||(0,a.hasProtocol)(n))return n;if(o)return t+n.replace(/^\//,"");if(n===t.replace(/\/$/,""))return t;const l=n.startsWith(t)?n:t+n.replace(/^\//,"");return i?e+l:l}(t,e,n,r)),[t,e]);return{withBaseUrl:n}}function l(e,t){void 0===t&&(t={});const{withBaseUrl:n}=i();return n(e,t)}},6832:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(67294),o=n(56725);function a(){return(0,r.useContext)(o._)}},5730:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(67294),o=n(74058);function a(){return(0,r.useContext)(o._)}},66916:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});function r(e){const t={};return function e(n,r){Object.entries(n).forEach((n=>{let[o,a]=n;const i=r?`${r}.${o}`:o;var l;"object"==typeof(l=a)&&l&&Object.keys(l).length>0?e(a,i):t[i]=a}))}(e),t}},66041:(e,t,n)=>{"use strict";n.d(t,{_:()=>o,z:()=>a});var r=n(67294);const o=r.createContext(null);function a(e){let{children:t,value:n}=e;const a=r.useContext(o),i=(0,r.useMemo)((()=>function(e){let{parent:t,value:n}=e;if(!t){if(!n)throw new Error("Unexpected: no Docusaurus route context found");if(!("plugin"in n))throw new Error("Unexpected: Docusaurus topmost route context has no `plugin` attribute");return n}const r={...t.data,...null==n?void 0:n.data};return{plugin:t.plugin,data:r}}({parent:a,value:n})),[a,n]);return r.createElement(o.Provider,{value:i},t)}},4452:(e,t,n)=>{"use strict";n.r(t),n.d(t,{useActiveDocContext:()=>b,useActivePlugin:()=>p,useActivePluginAndVersion:()=>h,useActiveVersion:()=>v,useAllDocsData:()=>d,useDocVersionSuggestions:()=>y,useDocsData:()=>f,useLatestVersion:()=>g,useVersions:()=>m});var r=n(16550),o=n(6832),a=n(12497);function i(e,t){void 0===t&&(t={});const n=function(){const{globalData:e}=(0,o.default)();return e}()[e];if(!n&&t.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin.`);return n}const l=e=>e.versions.find((e=>e.isLast));function s(e,t){const n=l(e);return[...e.versions.filter((e=>e!==n)),n].find((e=>!!(0,r.LX)(t,{path:e.path,exact:!1,strict:!1})))}function u(e,t){const n=s(e,t),o=null==n?void 0:n.docs.find((e=>!!(0,r.LX)(t,{path:e.path,exact:!0,strict:!1})));return{activeVersion:n,activeDoc:o,alternateDocVersions:o?function(t){const n={};return e.versions.forEach((e=>{e.docs.forEach((r=>{r.id===t&&(n[e.name]=r)}))})),n}(o.id):{}}}const c={},d=()=>i("docusaurus-plugin-content-docs")??c,f=e=>function(e,t,n){void 0===t&&(t=a.m),void 0===n&&(n={});const r=i(e),o=null==r?void 0:r[t];if(!o&&n.failfast)throw new Error(`Docusaurus plugin global data not found for "${e}" plugin with id "${t}".`);return o}("docusaurus-plugin-content-docs",e,{failfast:!0});function p(e){void 0===e&&(e={});const t=d(),{pathname:n}=(0,r.TH)();return function(e,t,n){void 0===n&&(n={});const o=Object.entries(e).sort(((e,t)=>t[1].path.localeCompare(e[1].path))).find((e=>{let[,n]=e;return!!(0,r.LX)(t,{path:n.path,exact:!1,strict:!1})})),a=o?{pluginId:o[0],pluginData:o[1]}:void 0;if(!a&&n.failfast)throw new Error(`Can't find active docs plugin for "${t}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(e).map((e=>e.path)).join(", ")}`);return a}(t,n,e)}function h(e){void 0===e&&(e={});const t=p(e),{pathname:n}=(0,r.TH)();if(!t)return;return{activePlugin:t,activeVersion:s(t.pluginData,n)}}function m(e){return f(e).versions}function g(e){const t=f(e);return l(t)}function v(e){const t=f(e),{pathname:n}=(0,r.TH)();return s(t,n)}function b(e){const t=f(e),{pathname:n}=(0,r.TH)();return u(t,n)}function y(e){const t=f(e),{pathname:n}=(0,r.TH)();return function(e,t){const n=l(e);return{latestDocSuggestion:u(e,t).alternateDocVersions[n.name],latestVersionSuggestion:n}}(t,n)}},26126:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(74865),o=n.n(r);o().configure({showSpinner:!1});const a={onRouteUpdate(e){let{location:t,previousLocation:n}=e;if(n&&t.pathname!==n.pathname){const e=window.setTimeout((()=>{o().start()}),200);return()=>window.clearTimeout(e)}},onRouteDidUpdate(){o().done()}}},25529:(e,t,n)=>{"use strict";n.r(t);var r=n(87410),o=n(36809);!function(e){const{themeConfig:{prism:t}}=o.Z,{additionalLanguages:r}=t;globalThis.Prism=e,r.forEach((e=>{n(6726)(`./prism-${e}`)})),delete globalThis.Prism}(r.Z)},10510:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>T});var r=n(67294),o=n(96793),a=n(68211),i=n(87462),l=n(88746),s=n(51402),u=n(71699),c=n(43399);function d(e){let{item:t}=e;const{to:n,href:o,label:a,prependBaseUrlToHref:d,...f}=t,p=(0,s.default)(n),h=(0,s.default)(o,{forcePrependBaseUrl:!0});return r.createElement(l.default,(0,i.Z)({className:"footer__link-item"},o?{href:d?h:o}:{to:p},f),a,o&&!(0,u.default)(o)&&r.createElement(c.Z,null))}function f(e){let{item:t}=e;return t.html?r.createElement("li",{className:"footer__item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement("li",{key:t.href??t.to,className:"footer__item"},r.createElement(d,{item:t}))}function p(e){let{column:t}=e;return r.createElement("div",{className:"col footer__col"},r.createElement("div",{className:"footer__title"},t.title),r.createElement("ul",{className:"footer__items clean-list"},t.items.map(((e,t)=>r.createElement(f,{key:t,item:e})))))}function h(e){let{columns:t}=e;return r.createElement("div",{className:"row footer__links"},t.map(((e,t)=>r.createElement(p,{key:t,column:e}))))}function m(){return r.createElement("span",{className:"footer__link-separator"},"\xb7")}function g(e){let{item:t}=e;return t.html?r.createElement("span",{className:"footer__link-item",dangerouslySetInnerHTML:{__html:t.html}}):r.createElement(d,{item:t})}function v(e){let{links:t}=e;return r.createElement("div",{className:"footer__links text--center"},r.createElement("div",{className:"footer__links"},t.map(((e,n)=>r.createElement(r.Fragment,{key:n},r.createElement(g,{item:e}),t.length!==n+1&&r.createElement(m,null))))))}function b(e){let{links:t}=e;return(0,a.a)(t)?r.createElement(h,{columns:t}):r.createElement(v,{links:t})}var y=n(86010),w=n(25812);const x="footerLogoLink_BH7S";function _(e){let{logo:t}=e;const{withBaseUrl:n}=(0,s.useBaseUrlUtils)(),o={light:n(t.src),dark:n(t.srcDark??t.src)};return r.createElement(w.default,{className:(0,y.default)("footer__logo",t.className),alt:t.alt,sources:o,width:t.width,height:t.height,style:t.style})}function k(e){let{logo:t}=e;return t.href?r.createElement(l.default,{href:t.href,className:x,target:t.target},r.createElement(_,{logo:t})):r.createElement(_,{logo:t})}function E(e){let{copyright:t}=e;return r.createElement("div",{className:"footer__copyright",dangerouslySetInnerHTML:{__html:t}})}var S=n(72726);function C(){const{footer:e}=(0,o.L)();if(!e)return null;const{copyright:t,links:n,logo:a,style:i}=e;return r.createElement(S.Z,{style:i,links:n&&n.length>0&&r.createElement(b,{links:n}),logo:a&&r.createElement(k,{logo:a}),copyright:t&&r.createElement(E,{copyright:t})})}const T=r.memo(C)},5574:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(87462),o=n(67294);function a(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24",width:24,height:24},e),o.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}))}},43399:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294);const o="iconExternalLink_nPIU";function a(e){let{width:t=13.5,height:n=13.5}=e;return r.createElement("svg",{width:t,height:n,"aria-hidden":"true",viewBox:"0 0 24 24",className:o},r.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}))}},60388:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>a});var r=n(87462),o=n(67294);function a(e){return o.createElement("svg",(0,r.Z)({viewBox:"0 0 24 24",width:24,height:24},e),o.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}))}},66867:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>L});var r=n(67294),o=n(86010),a=n(24649),i=n(44873),l=n(66470),s=n(18015),u=n(22768);const c="skipToContent_fXgn";function d(){return r.createElement(l.l,{className:c})}var f=n(96793),p=n(69061),h=n(87462),m=n(11614);function g(e){let{width:t=21,height:n=21,color:o="currentColor",strokeWidth:a=1.2,className:i,...l}=e;return r.createElement("svg",(0,h.Z)({viewBox:"0 0 15 15",width:t,height:n},l),r.createElement("g",{stroke:o,strokeWidth:a},r.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})))}const v="closeButton_CVFx";function b(e){return r.createElement("button",(0,h.Z)({type:"button","aria-label":(0,m.translate)({id:"theme.AnnouncementBar.closeButtonAriaLabel",message:"Close",description:"The ARIA label for close button of announcement bar"})},e,{className:(0,o.default)("clean-btn close",v,e.className)}),r.createElement(g,{width:14,height:14,strokeWidth:3.1}))}const y="content_knG7";function w(e){const{announcementBar:t}=(0,f.L)(),{content:n}=t;return r.createElement("div",(0,h.Z)({},e,{className:(0,o.default)(y,e.className),dangerouslySetInnerHTML:{__html:n}}))}const x="announcementBar_mb4j",_="announcementBarPlaceholder_vyr4",k="announcementBarClose_gvF7",E="announcementBarContent_xLdY";function S(){const{announcementBar:e}=(0,f.L)(),{isActive:t,close:n}=(0,p.nT)();if(!t)return null;const{backgroundColor:o,textColor:a,isCloseable:i}=e;return r.createElement("div",{className:x,style:{backgroundColor:o,color:a},role:"banner"},i&&r.createElement("div",{className:_}),r.createElement(w,{className:E}),i&&r.createElement(b,{onClick:n,className:k}))}var C=n(26558),T=n(27882);function O(){return r.createElement(C.Z,null,r.createElement(T.Z,null))}var D=n(10510),P=n(10211),N=n(48348);function I(e){let{error:t,tryAgain:n}=e;return r.createElement("main",{className:"container margin-vert--xl"},r.createElement("div",{className:"row"},r.createElement("div",{className:"col col--6 col--offset-3"},r.createElement("h1",{className:"hero__title"},r.createElement(m.default,{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),r.createElement("div",{className:"margin-vert--lg"},r.createElement(N.Cw,{onClick:n,className:"button button--primary shadow--lw"})),r.createElement("hr",null),r.createElement("div",{className:"margin-vert--md"},r.createElement(N.aG,{error:t})))))}const A="mainWrapper_z2l0";function L(e){const{children:t,noFooter:n,wrapperClassName:c,title:f,description:p}=e;return(0,u.t)(),r.createElement(P.Z,null,r.createElement(i.d,{title:f,description:p}),r.createElement(d,null),r.createElement(S,null),r.createElement(O,null),r.createElement("div",{id:l.u,className:(0,o.default)(s.k.wrapper.main,A,c)},r.createElement(a.default,{fallback:e=>r.createElement(I,e)},t)),!n&&r.createElement(D.default,null))}},17662:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=n(96793),a=n(70524),i=n(61818);const l="darkNavbarColorModeToggle_X3D1";function s(e){let{className:t}=e;const n=(0,o.L)().navbar.style,s=(0,o.L)().colorMode.disableSwitch,{colorMode:u,setColorMode:c}=(0,a.I)();return s?null:r.createElement(i.Z,{className:t,buttonClassName:"dark"===n?l:void 0,value:u,onChange:c})}},60543:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>s});var r=n(67294),o=n(35022),a=n(11614),i=n(87462);function l(e){let{width:t=30,height:n=30,className:o,...a}=e;return r.createElement("svg",(0,i.Z)({className:o,width:t,height:n,viewBox:"0 0 30 30","aria-hidden":"true"},a),r.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}))}function s(){const{toggle:e,shown:t}=(0,o.e)();return r.createElement("button",{onClick:e,"aria-label":(0,a.translate)({id:"theme.docs.sidebar.toggleSidebarButtonAriaLabel",message:"Toggle navigation bar",description:"The ARIA label for hamburger menu button of mobile navigation"}),"aria-expanded":t,className:"navbar__toggle clean-btn",type:"button"},r.createElement(l,null))}},44488:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>p});var r=n(67294),o=n(35022),a=n(69322),i=n(64644),l=n(20080),s=n(87462),u=n(96793),c=n(93496);function d(){const e=(0,o.e)(),t=(0,u.L)().navbar.items;return r.createElement("ul",{className:"menu__list"},t.map(((t,n)=>r.createElement(c.default,(0,s.Z)({mobile:!0},t,{onClick:()=>e.toggle(),key:n})))))}var f=n(29843);function p(){const e=(0,o.e)();return(0,a.N)(e.shown),e.shouldRender?r.createElement(i.Z,{header:r.createElement(l.Z,null),primaryMenu:r.createElement(d,null),secondaryMenu:r.createElement(f.Z,null)}):null}},93496:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>_});var r=n(67294),o=n(87462),a=n(86010),i=n(83112);function l(e){let{className:t,isDropdownItem:n=!1,...l}=e;const s=r.createElement(i.default,(0,o.Z)({className:(0,a.default)(n?"dropdown__link":"navbar__item navbar__link",t),isDropdownLink:n},l));return n?r.createElement("li",null,s):s}function s(e){let{className:t,isDropdownItem:n,...l}=e;return r.createElement("li",{className:"menu__list-item"},r.createElement(i.default,(0,o.Z)({className:(0,a.default)("menu__link",t)},l)))}function u(e){let{mobile:t=!1,position:n,...a}=e;const i=t?s:l;return r.createElement(i,(0,o.Z)({},a,{activeClassName:a.activeClassName??(t?"menu__link--active":"navbar__link--active")}))}var c=n(71003),d=n(23247),f=n(20130);const p="searchBox_ZlJk";function h(e){let{children:t,className:n}=e;return r.createElement("div",{className:(0,a.default)(n,p)},t)}var m=n(4452),g=n(85919);var v=n(4049),b=n(11614),y=n(16550);const w=e=>e.docs.find((t=>t.id===e.mainDocId));const x={default:u,localeDropdown:d.Z,search:function(e){let{mobile:t,className:n}=e;return t?null:r.createElement(h,{className:n},r.createElement(f.default,null))},dropdown:c.default,html:function(e){let{value:t,className:n,mobile:o=!1,isDropdownItem:i=!1}=e;const l=i?"li":"div";return r.createElement(l,{className:(0,a.default)({navbar__item:!o&&!i,"menu__list-item":o},n),dangerouslySetInnerHTML:{__html:t}})},doc:function(e){let{docId:t,label:n,docsPluginId:a,...i}=e;const{activeDoc:l}=(0,m.useActiveDocContext)(a),s=(0,g.vY)(t,a);return null===s?null:r.createElement(u,(0,o.Z)({exact:!0},i,{isActive:()=>(null==l?void 0:l.path)===s.path||!(null==l||!l.sidebar)&&l.sidebar===s.sidebar,label:n??s.id,to:s.path}))},docSidebar:function(e){let{sidebarId:t,label:n,docsPluginId:a,...i}=e;const{activeDoc:l}=(0,m.useActiveDocContext)(a),s=(0,g.oz)(t,a).link;if(!s)throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${t}" doesn't have anything to be linked to.`);return r.createElement(u,(0,o.Z)({exact:!0},i,{isActive:()=>(null==l?void 0:l.sidebar)===t,label:n??s.label,to:s.path}))},docsVersion:function(e){let{label:t,to:n,docsPluginId:a,...i}=e;const l=(0,g.lO)(a)[0],s=t??l.label,c=n??(e=>e.docs.find((t=>t.id===e.mainDocId)))(l).path;return r.createElement(u,(0,o.Z)({},i,{label:s,to:c}))},docsVersionDropdown:function(e){let{mobile:t,docsPluginId:n,dropdownActiveClassDisabled:a,dropdownItemsBefore:i,dropdownItemsAfter:l,...s}=e;const{search:d,hash:f}=(0,y.TH)(),p=(0,m.useActiveDocContext)(n),h=(0,m.useVersions)(n),{savePreferredVersionName:x}=(0,v.J)(n),_=[...i,...h.map((e=>{const t=p.alternateDocVersions[e.name]??w(e);return{label:e.label,to:`${t.path}${d}${f}`,isActive:()=>e===p.activeVersion,onClick:()=>x(e.name)}})),...l],k=(0,g.lO)(n)[0],E=t&&_.length>1?(0,b.translate)({id:"theme.navbar.mobileVersionsDropdown.label",message:"Versions",description:"The label for the navbar versions dropdown on mobile view"}):k.label,S=t&&_.length>1?void 0:w(k).path;return _.length<=1?r.createElement(u,(0,o.Z)({},s,{mobile:t,label:E,to:S,isActive:a?()=>!1:void 0})):r.createElement(c.default,(0,o.Z)({},s,{mobile:t,label:E,to:S,items:_,isActive:a?()=>!1:void 0}))}};function _(e){let{type:t,...n}=e;const o=function(e,t){return e&&"default"!==e?e:"items"in t?"dropdown":"default"}(t,n),a=x[o];if(!a)throw new Error(`No NavbarItem component found for type "${t}".`);return r.createElement(a,n)}},26145:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=n(67294),o=n(32411);function a(e){let{locale:t,version:n,tag:a}=e;const i=t;return r.createElement(o.Z,null,t&&r.createElement("meta",{name:"docusaurus_locale",content:t}),n&&r.createElement("meta",{name:"docusaurus_version",content:n}),a&&r.createElement("meta",{name:"docusaurus_tag",content:a}),i&&r.createElement("meta",{name:"docsearch:language",content:i}),n&&r.createElement("meta",{name:"docsearch:version",content:n}),a&&r.createElement("meta",{name:"docsearch:docusaurus_tag",content:a}))}},69061:(e,t,n)=>{"use strict";n.d(t,{nT:()=>h,pl:()=>p});var r=n(67294),o=n(5730),a=n(99200),i=n(93478),l=n(96793);const s=(0,a.WA)("docusaurus.announcement.dismiss"),u=(0,a.WA)("docusaurus.announcement.id"),c=()=>"true"===s.get(),d=e=>s.set(String(e)),f=r.createContext(null);function p(e){let{children:t}=e;const n=function(){const{announcementBar:e}=(0,l.L)(),t=(0,o.default)(),[n,a]=(0,r.useState)((()=>!!t&&c()));(0,r.useEffect)((()=>{a(c())}),[]);const i=(0,r.useCallback)((()=>{d(!0),a(!0)}),[]);return(0,r.useEffect)((()=>{if(!e)return;const{id:t}=e;let n=u.get();"annoucement-bar"===n&&(n="announcement-bar");const r=t!==n;u.set(t),r&&d(!1),!r&&c()||a(!1)}),[e]),(0,r.useMemo)((()=>({isActive:!!e&&!n,close:i})),[e,n,i])}();return r.createElement(f.Provider,{value:n},t)}function h(){const e=(0,r.useContext)(f);if(!e)throw new i.i6("AnnouncementBarProvider");return e}},70524:(e,t,n)=>{"use strict";n.d(t,{I:()=>g,S:()=>m});var r=n(67294),o=n(19901),a=n(93478),i=n(99200),l=n(96793);const s=r.createContext(void 0),u="theme",c=(0,i.WA)(u),d="light",f="dark",p=e=>e===f?f:d;function h(){const{colorMode:{defaultMode:e,disableSwitch:t,respectPrefersColorScheme:n}}=(0,l.L)(),[a,i]=(0,r.useState)((e=>o.default.canUseDOM?p(document.documentElement.getAttribute("data-theme")):p(e))(e));(0,r.useEffect)((()=>{t&&c.del()}),[t]);const s=(0,r.useCallback)((function(t,r){void 0===r&&(r={});const{persist:o=!0}=r;t?(i(t),o&&(e=>{c.set(p(e))})(t)):(i(n?window.matchMedia("(prefers-color-scheme: dark)").matches?f:d:e),c.del())}),[n,e]);(0,r.useEffect)((()=>{document.documentElement.setAttribute("data-theme",p(a))}),[a]),(0,r.useEffect)((()=>{if(t)return;const e=e=>{if(e.key!==u)return;const t=c.get();null!==t&&s(p(t))};return window.addEventListener("storage",e),()=>window.removeEventListener("storage",e)}),[t,s]);const h=(0,r.useRef)(!1);return(0,r.useEffect)((()=>{if(t&&!n)return;const e=window.matchMedia("(prefers-color-scheme: dark)"),r=()=>{window.matchMedia("print").matches||h.current?h.current=window.matchMedia("print").matches:s(null)};return e.addListener(r),()=>e.removeListener(r)}),[s,t,n]),(0,r.useMemo)((()=>({colorMode:a,setColorMode:s,get isDarkTheme(){return a===f},setLightTheme(){s(d)},setDarkTheme(){s(f)}})),[a,s])}function m(e){let{children:t}=e;const n=h();return r.createElement(s.Provider,{value:n},t)}function g(){const e=(0,r.useContext)(s);if(null==e)throw new a.i6("ColorModeProvider","Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.");return e}},2791:(e,t,n)=>{"use strict";n.d(t,{b:()=>i,k:()=>l});var r=n(67294),o=n(93478);const a=r.createContext(null);function i(e){let{children:t,content:n}=e;const o=function(e){return(0,r.useMemo)((()=>({metadata:e.metadata,frontMatter:e.frontMatter,assets:e.assets,contentTitle:e.contentTitle,toc:e.toc})),[e])}(n);return r.createElement(a.Provider,{value:o},t)}function l(){const e=(0,r.useContext)(a);if(null===e)throw new o.i6("DocProvider");return e}},55132:(e,t,n)=>{"use strict";n.d(t,{D:()=>l,f:()=>s});var r=n(67294),o=n(93478);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t}=e;const[n,o]=(0,r.useState)(null),a=(0,r.useMemo)((()=>({expandedItem:n,setExpandedItem:o})),[n]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocSidebarItemsExpandedStateProvider");return e}},4049:(e,t,n)=>{"use strict";n.d(t,{J:()=>y,L5:()=>v,Oh:()=>w});var r=n(67294),o=n(4452),a=n(12497),i=n(96793),l=n(85919),s=n(93478),u=n(99200);const c=e=>`docs-preferred-version-${e}`,d=(e,t,n)=>{(0,u.WA)(c(e),{persistence:t}).set(n)},f=(e,t)=>(0,u.WA)(c(e),{persistence:t}).get(),p=(e,t)=>{(0,u.WA)(c(e),{persistence:t}).del()};const h=r.createContext(null);function m(){const e=(0,o.useAllDocsData)(),t=(0,i.L)().docs.versionPersistence,n=(0,r.useMemo)((()=>Object.keys(e)),[e]),[a,l]=(0,r.useState)((()=>(e=>Object.fromEntries(e.map((e=>[e,{preferredVersionName:null}]))))(n)));(0,r.useEffect)((()=>{l(function(e){let{pluginIds:t,versionPersistence:n,allDocsData:r}=e;function o(e){const t=f(e,n);return r[e].versions.some((e=>e.name===t))?{preferredVersionName:t}:(p(e,n),{preferredVersionName:null})}return Object.fromEntries(t.map((e=>[e,o(e)])))}({allDocsData:e,versionPersistence:t,pluginIds:n}))}),[e,t,n]);return[a,(0,r.useMemo)((()=>({savePreferredVersion:function(e,n){d(e,t,n),l((t=>({...t,[e]:{preferredVersionName:n}})))}})),[t])]}function g(e){let{children:t}=e;const n=m();return r.createElement(h.Provider,{value:n},t)}function v(e){let{children:t}=e;return l.cE?r.createElement(g,null,t):r.createElement(r.Fragment,null,t)}function b(){const e=(0,r.useContext)(h);if(!e)throw new s.i6("DocsPreferredVersionContextProvider");return e}function y(e){void 0===e&&(e=a.m);const t=(0,o.useDocsData)(e),[n,i]=b(),{preferredVersionName:l}=n[e];return{preferredVersion:t.versions.find((e=>e.name===l))??null,savePreferredVersionName:(0,r.useCallback)((t=>{i.savePreferredVersion(e,t)}),[i,e])}}function w(){const e=(0,o.useAllDocsData)(),[t]=b();function n(n){const r=e[n],{preferredVersionName:o}=t[n];return r.versions.find((e=>e.name===o))??null}const r=Object.keys(e);return Object.fromEntries(r.map((e=>[e,n(e)])))}},50003:(e,t,n)=>{"use strict";n.d(t,{V:()=>s,b:()=>l});var r=n(67294),o=n(93478);const a=Symbol("EmptyContext"),i=r.createContext(a);function l(e){let{children:t,name:n,items:o}=e;const a=(0,r.useMemo)((()=>n&&o?{name:n,items:o}:null),[n,o]);return r.createElement(i.Provider,{value:a},t)}function s(){const e=(0,r.useContext)(i);if(e===a)throw new o.i6("DocsSidebarProvider");return e}},6141:(e,t,n)=>{"use strict";n.d(t,{E:()=>l,q:()=>i});var r=n(67294),o=n(93478);const a=r.createContext(null);function i(e){let{children:t,version:n}=e;return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(null===e)throw new o.i6("DocsVersionProvider");return e}},35022:(e,t,n)=>{"use strict";n.d(t,{M:()=>d,e:()=>f});var r=n(67294),o=n(82306),a=n(94980),i=n(34423),l=n(96793),s=n(93478);const u=r.createContext(void 0);function c(){const e=function(){const e=(0,o.HY)(),{items:t}=(0,l.L)().navbar;return 0===t.length&&!e.component}(),t=(0,a.i)(),n=!e&&"mobile"===t,[s,u]=(0,r.useState)(!1);(0,i.Rb)((()=>{if(s)return u(!1),!1}));const c=(0,r.useCallback)((()=>{u((e=>!e))}),[]);return(0,r.useEffect)((()=>{"desktop"===t&&u(!1)}),[t]),(0,r.useMemo)((()=>({disabled:e,shouldRender:n,toggle:c,shown:s})),[e,n,c,s])}function d(e){let{children:t}=e;const n=c();return r.createElement(u.Provider,{value:n},t)}function f(){const e=r.useContext(u);if(void 0===e)throw new s.i6("NavbarMobileSidebarProvider");return e}},82306:(e,t,n)=>{"use strict";n.d(t,{HY:()=>l,Zo:()=>s,n2:()=>i});var r=n(67294),o=n(93478);const a=r.createContext(null);function i(e){let{children:t}=e;const n=(0,r.useState)({component:null,props:null});return r.createElement(a.Provider,{value:n},t)}function l(){const e=(0,r.useContext)(a);if(!e)throw new o.i6("NavbarSecondaryMenuContentProvider");return e[0]}function s(e){let{component:t,props:n}=e;const i=(0,r.useContext)(a);if(!i)throw new o.i6("NavbarSecondaryMenuContentProvider");const[,l]=i,s=(0,o.Ql)(n);return(0,r.useEffect)((()=>{l({component:t,props:s})}),[l,t,s]),(0,r.useEffect)((()=>()=>l({component:null,props:null})),[l]),null}},20883:(e,t,n)=>{"use strict";n.d(t,{a:()=>i});var r=n(67294),o=n(63735),a=n(68265);function i(e){let{threshold:t}=e;const[n,i]=(0,r.useState)(!1),l=(0,r.useRef)(!1),{startScroll:s,cancelScroll:u}=(0,o.Ct)();return(0,o.RF)(((e,n)=>{let{scrollY:r}=e;const o=null==n?void 0:n.scrollY;o&&(l.current?l.current=!1:r>=o?(u(),i(!1)):r<t?i(!1):r+window.innerHeight<document.documentElement.scrollHeight&&i(!0))})),(0,a.S)((e=>{e.location.hash&&(l.current=!0,i(!1))})),{shown:n,scrollToTop:()=>s(0)}}},22768:(e,t,n)=>{"use strict";n.d(t,{h:()=>o,t:()=>a});var r=n(67294);const o="navigation-with-keyboard";function a(){(0,r.useEffect)((()=>{function e(e){"keydown"===e.type&&"Tab"===e.key&&document.body.classList.add(o),"mousedown"===e.type&&document.body.classList.remove(o)}return document.addEventListener("keydown",e),document.addEventListener("mousedown",e),()=>{document.body.classList.remove(o),document.removeEventListener("keydown",e),document.removeEventListener("mousedown",e)}}),[])}},69322:(e,t,n)=>{"use strict";n.d(t,{N:()=>o});var r=n(67294);function o(e){void 0===e&&(e=!0),(0,r.useEffect)((()=>(document.body.style.overflow=e?"hidden":"visible",()=>{document.body.style.overflow="visible"})),[e])}},99401:(e,t,n)=>{"use strict";n.d(t,{p:()=>a});var r=n(70524),o=n(96793);function a(){const{prism:e}=(0,o.L)(),{colorMode:t}=(0,r.I)(),n=e.theme,a=e.darkTheme||n;return"dark"===t?a:n}},78586:(e,t,n)=>{"use strict";n.d(t,{S:()=>s});var r=n(67294),o=n(96793);function a(e){const t=e.getBoundingClientRect();return t.top===t.bottom?a(e.parentNode):t}function i(e,t){let{anchorTopOffset:n}=t;const r=e.find((e=>a(e).top>=n));if(r){return function(e){return e.top>0&&e.bottom<window.innerHeight/2}(a(r))?r:e[e.indexOf(r)-1]??null}return e[e.length-1]??null}function l(){const e=(0,r.useRef)(0),{navbar:{hideOnScroll:t}}=(0,o.L)();return(0,r.useEffect)((()=>{e.current=t?0:document.querySelector(".navbar").clientHeight}),[t]),e}function s(e){const t=(0,r.useRef)(void 0),n=l();(0,r.useEffect)((()=>{if(!e)return()=>{};const{linkClassName:r,linkActiveClassName:o,minHeadingLevel:a,maxHeadingLevel:l}=e;function s(){const e=function(e){return Array.from(document.getElementsByClassName(e))}(r),s=function(e){let{minHeadingLevel:t,maxHeadingLevel:n}=e;const r=[];for(let o=t;o<=n;o+=1)r.push(`h${o}.anchor`);return Array.from(document.querySelectorAll(r.join()))}({minHeadingLevel:a,maxHeadingLevel:l}),u=i(s,{anchorTopOffset:n.current}),c=e.find((e=>u&&u.id===function(e){return decodeURIComponent(e.href.substring(e.href.indexOf("#")+1))}(e)));e.forEach((e=>{!function(e,n){n?(t.current&&t.current!==e&&t.current.classList.remove(o),e.classList.add(o),t.current=e):e.classList.remove(o)}(e,e===c)}))}return document.addEventListener("scroll",s),document.addEventListener("resize",s),s(),()=>{document.removeEventListener("scroll",s),document.removeEventListener("resize",s)}}),[e,n])}},94980:(e,t,n)=>{"use strict";n.d(t,{i:()=>u});var r=n(67294),o=n(19901);const a="desktop",i="mobile",l="ssr";function s(){return o.default.canUseDOM?window.innerWidth>996?a:i:l}function u(){const[e,t]=(0,r.useState)((()=>s()));return(0,r.useEffect)((()=>{function e(){t(s())}return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e),clearTimeout(undefined)}}),[]),e}},93945:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Collapsible:()=>S,ErrorBoundaryError:()=>q.aG,ErrorBoundaryTryAgainButton:()=>q.Cw,ErrorCauseBoundary:()=>q.QW,HtmlClassNameProvider:()=>O.FG,NavbarSecondaryMenuFiller:()=>P.Zo,PageMetadata:()=>O.d,ReactContextError:()=>T.i6,SkipToContentFallbackId:()=>V.u,SkipToContentLink:()=>V.l,ThemeClassNames:()=>C.k,composeProviders:()=>T.Qc,createStorageSlot:()=>o.WA,duplicates:()=>z.l,filterDocCardListItems:()=>i.MN,isMultiColumnFooterLinks:()=>F.a,isRegexpStringMatch:()=>B,listStorageKeys:()=>o._f,listTagsByLetters:()=>L,prefersReducedMotion:()=>g.n,processAdmonitionProps:()=>H,translateTagsPageTitle:()=>A,uniq:()=>z.j,useCollapsible:()=>v,useColorMode:()=>D.I,useContextualSearchFilters:()=>a._q,useCurrentSidebarCategory:()=>i.jA,useDocsPreferredVersion:()=>U.J,useEvent:()=>T.zX,useIsomorphicLayoutEffect:()=>T.LI,usePluralForm:()=>p,usePrevious:()=>T.D9,usePrismTheme:()=>$.p,useSearchLinkCreator:()=>M,useSearchQueryString:()=>j,useStorageSlot:()=>o.Nk,useThemeConfig:()=>r.L,useWindowSize:()=>N.i});var r=n(96793),o=n(99200),a=n(39105),i=n(85919),l=n(67294),s=n(6832);const u=["zero","one","two","few","many","other"];function c(e){return u.filter((t=>e.includes(t)))}const d={locale:"en",pluralForms:c(["one","other"]),select:e=>1===e?"one":"other"};function f(){const{i18n:{currentLocale:e}}=(0,s.default)();return(0,l.useMemo)((()=>{try{return function(e){const t=new Intl.PluralRules(e);return{locale:e,pluralForms:c(t.resolvedOptions().pluralCategories),select:e=>t.select(e)}}(e)}catch(t){return console.error(`Failed to use Intl.PluralRules for locale "${e}".\nDocusaurus will fallback to the default (English) implementation.\nError: ${t.message}\n`),d}}),[e])}function p(){const e=f();return{selectMessage:(t,n)=>function(e,t,n){const r=e.split("|");if(1===r.length)return r[0];r.length>n.pluralForms.length&&console.error(`For locale=${n.locale}, a maximum of ${n.pluralForms.length} plural forms are expected (${n.pluralForms.join(",")}), but the message contains ${r.length}: ${e}`);const o=n.select(t),a=n.pluralForms.indexOf(o);return r[Math.min(a,r.length-1)]}(n,t,e)}}var h=n(87462),m=n(19901),g=n(39657);function v(e){let{initialState:t}=e;const[n,r]=(0,l.useState)(t??!1),o=(0,l.useCallback)((()=>{r((e=>!e))}),[]);return{collapsed:n,setCollapsed:r,toggleCollapsed:o}}const b={display:"none",overflow:"hidden",height:"0px"},y={display:"block",overflow:"visible",height:"auto"};function w(e,t){const n=t?b:y;e.style.display=n.display,e.style.overflow=n.overflow,e.style.height=n.height}function x(e){let{collapsibleRef:t,collapsed:n,animation:r}=e;const o=(0,l.useRef)(!1);(0,l.useEffect)((()=>{const e=t.current;function a(){const t=e.scrollHeight,n=(null==r?void 0:r.duration)??function(e){if((0,g.n)())return 1;const t=e/36;return Math.round(10*(4+15*t**.25+t/5))}(t);return{transition:`height ${n}ms ${(null==r?void 0:r.easing)??"ease-in-out"}`,height:`${t}px`}}function i(){const t=a();e.style.transition=t.transition,e.style.height=t.height}if(!o.current)return w(e,n),void(o.current=!0);return e.style.willChange="height",function(){const t=requestAnimationFrame((()=>{n?(i(),requestAnimationFrame((()=>{e.style.height=b.height,e.style.overflow=b.overflow}))):(e.style.display="block",requestAnimationFrame((()=>{i()})))}));return()=>cancelAnimationFrame(t)}()}),[t,n,r])}function _(e){if(!m.default.canUseDOM)return e?b:y}function k(e){let{as:t="div",collapsed:n,children:r,animation:o,onCollapseTransitionEnd:a,className:i,disableSSRStyle:s}=e;const u=(0,l.useRef)(null);return x({collapsibleRef:u,collapsed:n,animation:o}),l.createElement(t,{ref:u,style:s?void 0:_(n),onTransitionEnd:e=>{"height"===e.propertyName&&(w(u.current,n),null==a||a(n))},className:i},r)}function E(e){let{collapsed:t,...n}=e;const[r,o]=(0,l.useState)(!t),[a,i]=(0,l.useState)(t);return(0,l.useLayoutEffect)((()=>{t||o(!0)}),[t]),(0,l.useLayoutEffect)((()=>{r&&i(t)}),[r,t]),r?l.createElement(k,(0,h.Z)({},n,{collapsed:a})):null}function S(e){let{lazy:t,...n}=e;const r=t?E:k;return l.createElement(r,n)}var C=n(18015),T=n(93478),O=n(44873),D=n(70524),P=n(82306),N=n(94980),I=n(11614);const A=()=>(0,I.translate)({id:"theme.tags.tagsPageTitle",message:"Tags",description:"The title of the tag list page"});function L(e){const t={};return Object.values(e).forEach((e=>{const n=function(e){return e[0].toUpperCase()}(e.label);t[n]??=[],t[n].push(e)})),Object.entries(t).sort(((e,t)=>{let[n]=e,[r]=t;return n.localeCompare(r)})).map((e=>{let[t,n]=e;return{letter:t,tags:n.sort(((e,t)=>e.label.localeCompare(t.label)))}}))}var R=n(34423);function j(){return(0,R.Nc)("q")}function M(){const{siteConfig:{baseUrl:e,themeConfig:t}}=(0,s.default)(),{algolia:{searchPagePath:n}}=t;return(0,l.useCallback)((t=>`${e}${n}?q=${encodeURIComponent(t)}`),[e,n])}var F=n(68211);function B(e,t){return void 0!==e&&void 0!==t&&new RegExp(e,"gi").test(t)}var z=n(20636),$=n(99401),U=n(4049);function H(e){const{mdxAdmonitionTitle:t,rest:n}=function(e){const t=l.Children.toArray(e),n=t.find((e=>{var t;return l.isValidElement(e)&&"mdxAdmonitionTitle"===(null==(t=e.props)?void 0:t.mdxType)})),r=l.createElement(l.Fragment,null,t.filter((e=>e!==n)));return{mdxAdmonitionTitle:null==n?void 0:n.props.children,rest:r}}(e.children),r=e.title??t;return{...e,...r&&{title:r},children:n}}var V=n(66470),q=n(48348)},18279:(e,t,n)=>{"use strict";n.r(t),n.d(t,{AnnouncementBarProvider:()=>h.pl,BlogPostProvider:()=>d,Collapsible:()=>r.Collapsible,ColorModeProvider:()=>P.S,DEFAULT_SEARCH_TAG:()=>A.HX,DocProvider:()=>l.b,DocSidebarItemsExpandedStateProvider:()=>o.D,DocsPreferredVersionContextProvider:()=>p.L5,DocsSidebarProvider:()=>i.b,DocsVersionProvider:()=>a.q,ErrorBoundaryError:()=>r.ErrorBoundaryError,ErrorBoundaryTryAgainButton:()=>r.ErrorBoundaryTryAgainButton,ErrorCauseBoundary:()=>r.ErrorCauseBoundary,HtmlClassNameProvider:()=>r.HtmlClassNameProvider,NavbarProvider:()=>V,NavbarSecondaryMenuFiller:()=>r.NavbarSecondaryMenuFiller,PageMetadata:()=>r.PageMetadata,PluginHtmlClassNameProvider:()=>U.VC,ReactContextError:()=>r.ReactContextError,ScrollControllerProvider:()=>z.OC,SkipToContentFallbackId:()=>r.SkipToContentFallbackId,SkipToContentLink:()=>r.SkipToContentLink,ThemeClassNames:()=>r.ThemeClassNames,composeProviders:()=>r.composeProviders,containsLineNumbers:()=>I.nt,createStorageSlot:()=>r.createStorageSlot,docVersionSearchTag:()=>A.os,duplicates:()=>r.duplicates,filterDocCardListItems:()=>r.filterDocCardListItems,findFirstCategoryLink:()=>L.Wl,findSidebarCategory:()=>L.em,getPrismCssVariables:()=>I.QC,isActiveSidebarItem:()=>L._F,isDocsPluginEnabled:()=>L.cE,isMultiColumnFooterLinks:()=>r.isMultiColumnFooterLinks,isRegexpStringMatch:()=>r.isRegexpStringMatch,isSamePath:()=>$.Mg,keyboardFocusedClassName:()=>W.h,listStorageKeys:()=>r.listStorageKeys,listTagsByLetters:()=>r.listTagsByLetters,parseCodeBlockTitle:()=>I.bc,parseLanguage:()=>I.Vo,parseLines:()=>I.nZ,prefersReducedMotion:()=>r.prefersReducedMotion,processAdmonitionProps:()=>r.processAdmonitionProps,splitNavbarItems:()=>H,translateTagsPageTitle:()=>r.translateTagsPageTitle,uniq:()=>r.uniq,useAlternatePageUtils:()=>N.l,useAnnouncementBar:()=>h.nT,useBackToTopButton:()=>K.a,useBlogPost:()=>f,useCodeWordWrap:()=>X,useCollapsible:()=>r.useCollapsible,useColorMode:()=>r.useColorMode,useContextualSearchFilters:()=>r.useContextualSearchFilters,useCurrentSidebarCategory:()=>r.useCurrentSidebarCategory,useDoc:()=>l.k,useDocById:()=>L.xz,useDocRouteMetadata:()=>L.hI,useDocSidebarItemsExpandedState:()=>o.f,useDocsPreferredVersion:()=>r.useDocsPreferredVersion,useDocsPreferredVersionByPluginId:()=>p.Oh,useDocsSidebar:()=>i.V,useDocsVersion:()=>a.E,useDocsVersionCandidates:()=>L.lO,useEvent:()=>r.useEvent,useFilteredAndTreeifiedTOC:()=>B.b,useHideableNavbar:()=>G,useHistoryPopHandler:()=>g.Rb,useHistorySelector:()=>g.xL,useHomePageRoute:()=>$.Ns,useIsomorphicLayoutEffect:()=>r.useIsomorphicLayoutEffect,useKeyboardNavigation:()=>W.t,useLayoutDoc:()=>L.vY,useLayoutDocsSidebar:()=>L.oz,useLocalPathname:()=>F,useLocationChange:()=>j.S,useLockBodyScroll:()=>Z.N,useNavbarMobileSidebar:()=>E.e,useNavbarSecondaryMenu:()=>D,usePluralForm:()=>r.usePluralForm,usePrevious:()=>r.usePrevious,usePrismTheme:()=>r.usePrismTheme,useQueryStringValue:()=>g._X,useScrollController:()=>z.sG,useScrollPosition:()=>z.RF,useScrollPositionBlocker:()=>z.o5,useSearchLinkCreator:()=>r.useSearchLinkCreator,useSearchQueryString:()=>r.useSearchQueryString,useSidebarBreadcrumbs:()=>L.s1,useSmoothScrollTo:()=>z.Ct,useStorageSlot:()=>r.useStorageSlot,useTOCHighlight:()=>q.S,useTabs:()=>k,useThemeConfig:()=>r.useThemeConfig,useTitleFormatter:()=>R.p,useTreeifiedTOC:()=>B.a,useWindowSize:()=>r.useWindowSize});var r=n(93945),o=n(55132),a=n(6141),i=n(50003),l=n(2791),s=n(67294),u=n(93478);const c=s.createContext(null);function d(e){let{children:t,content:n,isBlogPostPage:r=!1}=e;const o=function(e){let{content:t,isBlogPostPage:n}=e;return(0,s.useMemo)((()=>({metadata:t.metadata,frontMatter:t.frontMatter,assets:t.assets,toc:t.toc,isBlogPostPage:n})),[t,n])}({content:n,isBlogPostPage:r});return s.createElement(c.Provider,{value:o},t)}function f(){const e=(0,s.useContext)(c);if(null===e)throw new u.i6("BlogPostProvider");return e}var p=n(4049),h=n(69061),m=n(16550),g=n(34423),v=n(20636),b=n(99200);function y(e){return function(e){var t;return(null==(t=s.Children.map(e,(e=>{if(!e||(0,s.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return e;throw new Error(`Docusaurus error: Bad <Tabs> child <${"string"==typeof e.type?e.type:e.type.name}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.`)})))?void 0:t.filter(Boolean))??[]}(e).map((e=>{let{props:{value:t,label:n,attributes:r,default:o}}=e;return{value:t,label:n,attributes:r,default:o}}))}function w(e){const{values:t,children:n}=e;return(0,s.useMemo)((()=>{const e=t??y(n);return function(e){const t=(0,v.l)(e,((e,t)=>e.value===t.value));if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map((e=>e.value)).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e}),[t,n])}function x(e){let{value:t,tabValues:n}=e;return n.some((e=>e.value===t))}function _(e){let{queryString:t=!1,groupId:n}=e;const r=(0,m.k6)(),o=function(e){let{queryString:t=!1,groupId:n}=e;if("string"==typeof t)return t;if(!1===t)return null;if(!0===t&&!n)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return n??null}({queryString:t,groupId:n});return[(0,g._X)(o),(0,s.useCallback)((e=>{if(!o)return;const t=new URLSearchParams(r.location.search);t.set(o,e),r.replace({...r.location,search:t.toString()})}),[o,r])]}function k(e){const{defaultValue:t,queryString:n=!1,groupId:r}=e,o=w(e),[a,i]=(0,s.useState)((()=>function(e){let{defaultValue:t,tabValues:n}=e;if(0===n.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(t){if(!x({value:t,tabValues:n}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${t}" but none of its children has the corresponding value. Available values are: ${n.map((e=>e.value)).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return t}const r=n.find((e=>e.default))??n[0];if(!r)throw new Error("Unexpected error: 0 tabValues");return r.value}({defaultValue:t,tabValues:o}))),[l,u]=_({queryString:n,groupId:r}),[c,d]=function(e){let{groupId:t}=e;const n=function(e){return e?`docusaurus.tab.${e}`:null}(t),[r,o]=(0,b.Nk)(n);return[r,(0,s.useCallback)((e=>{n&&o.set(e)}),[n,o])]}({groupId:r}),f=(()=>{const e=l??c;return x({value:e,tabValues:o})?e:null})();(0,s.useLayoutEffect)((()=>{f&&i(f)}),[f]);return{selectedValue:a,selectValue:(0,s.useCallback)((e=>{if(!x({value:e,tabValues:o}))throw new Error(`Can't select invalid tab value=${e}`);i(e),u(e),d(e)}),[u,d,o]),tabValues:o}}var E=n(35022),S=n(82306);const C=s.createContext(null);function T(e){let{children:t}=e;const n=function(){const e=(0,E.e)(),t=(0,S.HY)(),[n,r]=(0,s.useState)(!1),o=null!==t.component,a=(0,u.D9)(o);return(0,s.useEffect)((()=>{o&&!a&&r(!0)}),[o,a]),(0,s.useEffect)((()=>{o?e.shown||r(!0):r(!1)}),[e.shown,o]),(0,s.useMemo)((()=>[n,r]),[n])}();return s.createElement(C.Provider,{value:n},t)}function O(e){if(e.component){const t=e.component;return s.createElement(t,e.props)}}function D(){const e=(0,s.useContext)(C);if(!e)throw new u.i6("NavbarSecondaryMenuDisplayProvider");const[t,n]=e,r=(0,s.useCallback)((()=>n(!1)),[n]),o=(0,S.HY)();return(0,s.useMemo)((()=>({shown:t,hide:r,content:O(o)})),[r,o,t])}var P=n(70524),N=n(13156),I=n(96066),A=n(39105),L=n(85919),R=n(71427),j=n(68265),M=n(6832);function F(){const{siteConfig:{baseUrl:e}}=(0,M.default)(),{pathname:t}=(0,m.TH)();return t.replace(e,"/")}var B=n(94462),z=n(63735),$=n(18407),U=n(44873);function H(e){function t(e){return"left"===(e.position??"right")}return[e.filter(t),e.filter((e=>!t(e)))]}function V(e){let{children:t}=e;return s.createElement(S.n2,null,s.createElement(E.M,null,s.createElement(T,null,t)))}var q=n(78586);function G(e){const[t,n]=(0,s.useState)(e),r=(0,s.useRef)(!1),o=(0,s.useRef)(0),a=(0,s.useCallback)((e=>{null!==e&&(o.current=e.getBoundingClientRect().height)}),[]);return(0,z.RF)(((t,a)=>{let{scrollY:i}=t;if(!e)return;if(i<o.current)return void n(!0);if(r.current)return void(r.current=!1);const l=null==a?void 0:a.scrollY,s=document.documentElement.scrollHeight-o.current,u=window.innerHeight;l&&i>=l?n(!1):i+u<s&&n(!0)})),(0,j.S)((t=>{if(!e)return;const o=t.location.hash;if(o?document.getElementById(o.substring(1)):void 0)return r.current=!0,void n(!1);n(!0)})),{navbarRef:a,isNavbarVisible:t}}var W=n(22768),Z=n(69322);const Q={attributes:!0,characterData:!0,childList:!0,subtree:!0};function Y(e,t){const[n,r]=(0,s.useState)(),o=(0,s.useCallback)((()=>{var t;r(null==(t=e.current)?void 0:t.closest("[role=tabpanel][hidden]"))}),[e,r]);(0,s.useEffect)((()=>{o()}),[o]),function(e,t,n){void 0===n&&(n=Q);const r=(0,u.zX)(t),o=(0,u.Ql)(n);(0,s.useEffect)((()=>{const t=new MutationObserver(r);return e&&t.observe(e,o),()=>t.disconnect()}),[e,r,o])}(n,(e=>{e.forEach((e=>{"attributes"===e.type&&"hidden"===e.attributeName&&(t(),o())}))}),{attributes:!0,characterData:!1,childList:!1,subtree:!1})}function X(){const[e,t]=(0,s.useState)(!1),[n,r]=(0,s.useState)(!1),o=(0,s.useRef)(null),a=(0,s.useCallback)((()=>{const n=o.current.querySelector("code");e?n.removeAttribute("style"):(n.style.whiteSpace="pre-wrap",n.style.overflowWrap="anywhere"),t((e=>!e))}),[o,e]),i=(0,s.useCallback)((()=>{const{scrollWidth:e,clientWidth:t}=o.current,n=e>t||o.current.querySelector("code").hasAttribute("style");r(n)}),[o]);return Y(o,i),(0,s.useEffect)((()=>{i()}),[e,i]),(0,s.useEffect)((()=>(window.addEventListener("resize",i,{passive:!0}),()=>{window.removeEventListener("resize",i)})),[i]),{codeBlockRef:o,isEnabled:e,isCodeScrollable:n,toggle:a}}var K=n(20883)},18015:(e,t,n)=>{"use strict";n.d(t,{k:()=>r});const r={page:{blogListPage:"blog-list-page",blogPostPage:"blog-post-page",blogTagsListPage:"blog-tags-list-page",blogTagPostListPage:"blog-tags-post-list-page",docsDocPage:"docs-doc-page",docsTagsListPage:"docs-tags-list-page",docsTagDocListPage:"docs-tags-doc-list-page",mdxPage:"mdx-page"},wrapper:{main:"main-wrapper",blogPages:"blog-wrapper",docsPages:"docs-wrapper",mdxPages:"mdx-wrapper"},common:{editThisPage:"theme-edit-this-page",lastUpdated:"theme-last-updated",backToTopButton:"theme-back-to-top-button",codeBlock:"theme-code-block",admonition:"theme-admonition",admonitionType:e=>`theme-admonition-${e}`},layout:{},docs:{docVersionBanner:"theme-doc-version-banner",docVersionBadge:"theme-doc-version-badge",docBreadcrumbs:"theme-doc-breadcrumbs",docMarkdown:"theme-doc-markdown",docTocMobile:"theme-doc-toc-mobile",docTocDesktop:"theme-doc-toc-desktop",docFooter:"theme-doc-footer",docFooterTagsRow:"theme-doc-footer-tags-row",docFooterEditMetaRow:"theme-doc-footer-edit-meta-row",docSidebarContainer:"theme-doc-sidebar-container",docSidebarMenu:"theme-doc-sidebar-menu",docSidebarItemCategory:"theme-doc-sidebar-item-category",docSidebarItemLink:"theme-doc-sidebar-item-link",docSidebarItemCategoryLevel:e=>`theme-doc-sidebar-item-category-level-${e}`,docSidebarItemLinkLevel:e=>`theme-doc-sidebar-item-link-level-${e}`},blog:{}}},39657:(e,t,n)=>{"use strict";function r(){return window.matchMedia("(prefers-reduced-motion: reduce)").matches}n.d(t,{n:()=>r})},96066:(e,t,n)=>{"use strict";n.d(t,{QC:()=>p,Vo:()=>d,bc:()=>u,nZ:()=>f,nt:()=>c});var r=n(87594),o=n.n(r);const a=/title=(?<quote>["'])(?<title>.*?)\1/,i=/\{(?<range>[\d,-]+)\}/,l={js:{start:"\\/\\/",end:""},jsBlock:{start:"\\/\\*",end:"\\*\\/"},jsx:{start:"\\{\\s*\\/\\*",end:"\\*\\/\\s*\\}"},bash:{start:"#",end:""},html:{start:"\x3c!--",end:"--\x3e"}};function s(e,t){const n=e.map((e=>{const{start:n,end:r}=l[e];return`(?:${n}\\s*(${t.flatMap((e=>{var t,n;return[e.line,null==(t=e.block)?void 0:t.start,null==(n=e.block)?void 0:n.end].filter(Boolean)})).join("|")})\\s*${r})`})).join("|");return new RegExp(`^\\s*(?:${n})\\s*$`)}function u(e){var t;return(null==e||null==(t=e.match(a))?void 0:t.groups.title)??""}function c(e){return Boolean(null==e?void 0:e.includes("showLineNumbers"))}function d(e){const t=e.split(" ").find((e=>e.startsWith("language-")));return null==t?void 0:t.replace(/language-/,"")}function f(e,t){let n=e.replace(/\n$/,"");const{language:r,magicComments:a,metastring:u}=t;if(u&&i.test(u)){const e=u.match(i).groups.range;if(0===a.length)throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${u}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);const t=a[0].className,r=o()(e).filter((e=>e>0)).map((e=>[e-1,[t]]));return{lineClassNames:Object.fromEntries(r),code:n}}if(void 0===r)return{lineClassNames:{},code:n};const c=function(e,t){switch(e){case"js":case"javascript":case"ts":case"typescript":return s(["js","jsBlock"],t);case"jsx":case"tsx":return s(["js","jsBlock","jsx"],t);case"html":return s(["js","jsBlock","html"],t);case"python":case"py":case"bash":return s(["bash"],t);case"markdown":case"md":return s(["html","jsx","bash"],t);default:return s(Object.keys(l),t)}}(r,a),d=n.split("\n"),f=Object.fromEntries(a.map((e=>[e.className,{start:0,range:""}]))),p=Object.fromEntries(a.filter((e=>e.line)).map((e=>{let{className:t,line:n}=e;return[n,t]}))),h=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.start,t]}))),m=Object.fromEntries(a.filter((e=>e.block)).map((e=>{let{className:t,block:n}=e;return[n.end,t]})));for(let o=0;o<d.length;){const e=d[o].match(c);if(!e){o+=1;continue}const t=e.slice(1).find((e=>void 0!==e));p[t]?f[p[t]].range+=`${o},`:h[t]?f[h[t]].start=o:m[t]&&(f[m[t]].range+=`${f[m[t]].start}-${o-1},`),d.splice(o,1)}n=d.join("\n");const g={};return Object.entries(f).forEach((e=>{let[t,{range:n}]=e;o()(n).forEach((e=>{g[e]??=[],g[e].push(t)}))})),{lineClassNames:g,code:n}}function p(e){const t={color:"--prism-color",backgroundColor:"--prism-background-color"},n={};return Object.entries(e.plain).forEach((e=>{let[r,o]=e;const a=t[r];a&&"string"==typeof o&&(n[a]=o)})),n}},85919:(e,t,n)=>{"use strict";n.d(t,{MN:()=>S,Wl:()=>m,_F:()=>b,cE:()=>f,em:()=>h,hI:()=>E,jA:()=>g,lO:()=>x,oz:()=>_,s1:()=>w,vY:()=>k,xz:()=>p});var r=n(67294),o=n(16550),a=n(18790),i=n(4452),l=n(4049),s=n(6141),u=n(50003),c=n(20636),d=n(18407);const f=!!i.useAllDocsData;function p(e){const t=(0,s.E)();if(!e)return;const n=t.docs[e];if(!n)throw new Error(`no version doc found by id=${e}`);return n}function h(e,t){for(const n of e)if("category"===n.type){if(t(n))return n;const e=h(n.items,t);if(e)return e}}function m(e){if(e.href)return e.href;for(const t of e.items){if("link"===t.type)return t.href;if("category"===t.type){const e=m(t);if(e)return e}}}function g(){const{pathname:e}=(0,o.TH)(),t=(0,u.V)();if(!t)throw new Error("Unexpected: cant find current sidebar in context");const n=y({sidebarItems:t.items,pathname:e,onlyCategories:!0}).slice(-1)[0];if(!n)throw new Error(`${e} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);return n}const v=(e,t)=>void 0!==e&&(0,d.Mg)(e,t);function b(e,t){return"link"===e.type?v(e.href,t):"category"===e.type&&(v(e.href,t)||((e,t)=>e.some((e=>b(e,t))))(e.items,t))}function y(e){let{sidebarItems:t,pathname:n,onlyCategories:r=!1}=e;const o=[];return function e(t){for(const a of t)if("category"===a.type&&((0,d.Mg)(a.href,n)||e(a.items))||"link"===a.type&&(0,d.Mg)(a.href,n)){return r&&"category"!==a.type||o.unshift(a),!0}return!1}(t),o}function w(){var e;const t=(0,u.V)(),{pathname:n}=(0,o.TH)();return!1!==(null==(e=(0,i.useActivePlugin)())?void 0:e.pluginData.breadcrumbs)&&t?y({sidebarItems:t.items,pathname:n}):null}function x(e){const{activeVersion:t}=(0,i.useActiveDocContext)(e),{preferredVersion:n}=(0,l.J)(e),o=(0,i.useLatestVersion)(e);return(0,r.useMemo)((()=>(0,c.j)([t,n,o].filter(Boolean))),[t,n,o])}function _(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.sidebars?Object.entries(e.sidebars):[])),r=t.find((t=>t[0]===e));if(!r)throw new Error(`Can't find any sidebar with id "${e}" in version${n.length>1?"s":""} ${n.map((e=>e.name)).join(", ")}".\nAvailable sidebar ids are:\n- ${t.map((e=>e[0])).join("\n- ")}`);return r[1]}),[e,n])}function k(e,t){const n=x(t);return(0,r.useMemo)((()=>{const t=n.flatMap((e=>e.docs)),r=t.find((t=>t.id===e));if(!r){if(n.flatMap((e=>e.draftIds)).includes(e))return null;throw new Error(`Couldn't find any doc with id "${e}" in version${n.length>1?"s":""} "${n.map((e=>e.name)).join(", ")}".\nAvailable doc ids are:\n- ${(0,c.j)(t.map((e=>e.id))).join("\n- ")}`)}return r}),[e,n])}function E(e){let{route:t,versionMetadata:n}=e;const r=(0,o.TH)(),i=t.routes,l=i.find((e=>(0,o.LX)(r.pathname,e)));if(!l)return null;const s=l.sidebar,u=s?n.docsSidebars[s]:void 0;return{docElement:(0,a.H)(i),sidebarName:s,sidebarItems:u}}function S(e){return e.filter((e=>"category"!==e.type||!!m(e)))}},48348:(e,t,n)=>{"use strict";n.d(t,{aG:()=>u,Cw:()=>s,QW:()=>c});var r=n(87462),o=n(67294),a=n(11614),i=n(79861);const l="errorBoundaryError_a6uf";function s(e){return o.createElement("button",(0,r.Z)({type:"button"},e),o.createElement(a.default,{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"))}function u(e){let{error:t}=e;const n=(0,i.getErrorCausalChain)(t).map((e=>e.message)).join("\n\nCause:\n");return o.createElement("p",{className:l},n)}class c extends o.Component{componentDidCatch(e,t){throw this.props.onError(e,t)}render(){return this.props.children}}},68211:(e,t,n)=>{"use strict";function r(e){return"title"in e[0]}n.d(t,{a:()=>r})},71427:(e,t,n)=>{"use strict";n.d(t,{p:()=>o});var r=n(6832);function o(e){const{siteConfig:t}=(0,r.default)(),{title:n,titleDelimiter:o}=t;return null!=e&&e.trim().length?`${e.trim()} ${o} ${n}`:n}},34423:(e,t,n)=>{"use strict";n.d(t,{Nc:()=>c,Rb:()=>l,_X:()=>u,xL:()=>s});var r=n(67294),o=n(16550),a=n(61688),i=n(93478);function l(e){!function(e){const t=(0,o.k6)(),n=(0,i.zX)(e);(0,r.useEffect)((()=>t.block(((e,t)=>n(e,t)))),[t,n])}(((t,n)=>{if("POP"===n)return e(t,n)}))}function s(e){const t=(0,o.k6)();return(0,a.useSyncExternalStore)(t.listen,(()=>e(t)),(()=>e(t)))}function u(e){return s((t=>null===e?null:new URLSearchParams(t.location.search).get(e)))}function c(e){const t=u(e)??"",n=function(){const e=(0,o.k6)();return(0,r.useCallback)(((t,n,r)=>{const o=new URLSearchParams(e.location.search);n?o.set(t,n):o.delete(t),(null!=r&&r.push?e.push:e.replace)({search:o.toString()})}),[e])}();return[t,(0,r.useCallback)(((t,r)=>{n(e,t,r)}),[n,e])]}},20636:(e,t,n)=>{"use strict";function r(e,t){return void 0===t&&(t=(e,t)=>e===t),e.filter(((n,r)=>e.findIndex((e=>t(e,n)))!==r))}function o(e){return Array.from(new Set(e))}n.d(t,{j:()=>o,l:()=>r})},44873:(e,t,n)=>{"use strict";n.d(t,{FG:()=>f,d:()=>c,VC:()=>p});var r=n(67294),o=n(86010),a=n(32411),i=n(66041);function l(){const e=r.useContext(i._);if(!e)throw new Error("Unexpected: no Docusaurus route context found");return e}var s=n(51402),u=n(71427);function c(e){let{title:t,description:n,keywords:o,image:i,children:l}=e;const c=(0,u.p)(t),{withBaseUrl:d}=(0,s.useBaseUrlUtils)(),f=i?d(i,{absolute:!0}):void 0;return r.createElement(a.Z,null,t&&r.createElement("title",null,c),t&&r.createElement("meta",{property:"og:title",content:c}),n&&r.createElement("meta",{name:"description",content:n}),n&&r.createElement("meta",{property:"og:description",content:n}),o&&r.createElement("meta",{name:"keywords",content:Array.isArray(o)?o.join(","):o}),f&&r.createElement("meta",{property:"og:image",content:f}),f&&r.createElement("meta",{name:"twitter:image",content:f}),l)}const d=r.createContext(void 0);function f(e){let{className:t,children:n}=e;const i=r.useContext(d),l=(0,o.default)(i,t);return r.createElement(d.Provider,{value:l},r.createElement(a.Z,null,r.createElement("html",{className:l})),n)}function p(e){let{children:t}=e;const n=l(),a=`plugin-${n.plugin.name.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,"")}`;const i=`plugin-id-${n.plugin.id}`;return r.createElement(f,{className:(0,o.default)(a,i)},t)}},93478:(e,t,n)=>{"use strict";n.d(t,{D9:()=>i,LI:()=>o,Qc:()=>u,Ql:()=>s,i6:()=>l,zX:()=>a});var r=n(67294);const o=n(19901).default.canUseDOM?r.useLayoutEffect:r.useEffect;function a(e){const t=(0,r.useRef)(e);return o((()=>{t.current=e}),[e]),(0,r.useCallback)((function(){return t.current(...arguments)}),[])}function i(e){const t=(0,r.useRef)();return o((()=>{t.current=e})),t.current}class l extends Error{constructor(e,t){var n,r,o;super(),this.name="ReactContextError",this.message=`Hook ${(null==(n=this.stack)||null==(r=n.split("\n")[1])||null==(o=r.match(/at (?:\w+\.)?(?<name>\w+)/))?void 0:o.groups.name)??""} is called outside the <${e}>. ${t??""}`}}function s(e){const t=Object.entries(e);return t.sort(((e,t)=>e[0].localeCompare(t[0]))),(0,r.useMemo)((()=>e),t.flat())}function u(e){return t=>{let{children:n}=t;return r.createElement(r.Fragment,null,e.reduceRight(((e,t)=>r.createElement(t,null,e)),n))}}},18407:(e,t,n)=>{"use strict";n.d(t,{Mg:()=>i,Ns:()=>l});var r=n(67294),o=n(21204),a=n(6832);function i(e,t){const n=e=>{var t;return null==(t=!e||e.endsWith("/")?e:`${e}/`)?void 0:t.toLowerCase()};return n(e)===n(t)}function l(){const{baseUrl:e}=(0,a.default)().siteConfig;return(0,r.useMemo)((()=>function(e){let{baseUrl:t,routes:n}=e;function r(e){return e.path===t&&!0===e.exact}function o(e){return e.path===t&&!e.exact}return function e(t){if(0===t.length)return;return t.find(r)||e(t.filter(o).flatMap((e=>e.routes??[])))}(n)}({routes:o.Z,baseUrl:e})),[e])}},63735:(e,t,n)=>{"use strict";n.d(t,{Ct:()=>p,OC:()=>s,RF:()=>d,o5:()=>f,sG:()=>u});var r=n(67294),o=n(19901),a=n(5730),i=n(93478);const l=r.createContext(void 0);function s(e){let{children:t}=e;const n=function(){const e=(0,r.useRef)(!0);return(0,r.useMemo)((()=>({scrollEventsEnabledRef:e,enableScrollEvents:()=>{e.current=!0},disableScrollEvents:()=>{e.current=!1}})),[])}();return r.createElement(l.Provider,{value:n},t)}function u(){const e=(0,r.useContext)(l);if(null==e)throw new i.i6("ScrollControllerProvider");return e}const c=()=>o.default.canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;function d(e,t){void 0===t&&(t=[]);const{scrollEventsEnabledRef:n}=u(),o=(0,r.useRef)(c()),a=(0,i.zX)(e);(0,r.useEffect)((()=>{const e=()=>{if(!n.current)return;const e=c();a(e,o.current),o.current=e},t={passive:!0};return e(),window.addEventListener("scroll",e,t),()=>window.removeEventListener("scroll",e,t)}),[a,n,...t])}function f(){const e=u(),t=function(){const e=(0,r.useRef)({elem:null,top:0}),t=(0,r.useCallback)((t=>{e.current={elem:t,top:t.getBoundingClientRect().top}}),[]),n=(0,r.useCallback)((()=>{const{current:{elem:t,top:n}}=e;if(!t)return{restored:!1};const r=t.getBoundingClientRect().top-n;return r&&window.scrollBy({left:0,top:r}),e.current={elem:null,top:0},{restored:0!==r}}),[]);return(0,r.useMemo)((()=>({save:t,restore:n})),[n,t])}(),n=(0,r.useRef)(void 0),o=(0,r.useCallback)((r=>{t.save(r),e.disableScrollEvents(),n.current=()=>{const{restored:r}=t.restore();if(n.current=void 0,r){const t=()=>{e.enableScrollEvents(),window.removeEventListener("scroll",t)};window.addEventListener("scroll",t)}else e.enableScrollEvents()}}),[e,t]);return(0,r.useLayoutEffect)((()=>{queueMicrotask((()=>null==n.current?void 0:n.current()))})),{blockElementScrollPositionUntilNextRender:o}}function p(){const e=(0,r.useRef)(null),t=(0,a.default)()&&"smooth"===getComputedStyle(document.documentElement).scrollBehavior;return{startScroll:n=>{e.current=t?function(e){return window.scrollTo({top:e,behavior:"smooth"}),()=>{}}(n):function(e){let t=null;const n=document.documentElement.scrollTop>e;return function r(){const o=document.documentElement.scrollTop;(n&&o>e||!n&&o<e)&&(t=requestAnimationFrame(r),window.scrollTo(0,Math.floor(.85*(o-e))+e))}(),()=>t&&cancelAnimationFrame(t)}(n)},cancelScroll:()=>null==e.current?void 0:e.current()}}},39105:(e,t,n)=>{"use strict";n.d(t,{HX:()=>i,_q:()=>s,os:()=>l});var r=n(4452),o=n(6832),a=n(4049);const i="default";function l(e,t){return`docs-${e}-${t}`}function s(){const{i18n:e}=(0,o.default)(),t=(0,r.useAllDocsData)(),n=(0,r.useActivePluginAndVersion)(),s=(0,a.Oh)();const u=[i,...Object.keys(t).map((function(e){const r=(null==n?void 0:n.activePlugin.pluginId)===e?n.activeVersion:void 0,o=s[e],a=t[e].versions.find((e=>e.isLast));return l(e,(r??o??a).name)}))];return{locale:e.currentLocale,tags:u}}},66470:(e,t,n)=>{"use strict";n.d(t,{l:()=>f,u:()=>s});var r=n(87462),o=n(67294),a=n(16550),i=n(11614),l=n(68265);const s="__docusaurus_skipToContent_fallback";function u(e){e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")}function c(){const e=(0,o.useRef)(null),{action:t}=(0,a.k6)(),n=(0,o.useCallback)((e=>{e.preventDefault();const t=document.querySelector("main:first-of-type")??document.getElementById(s);t&&u(t)}),[]);return(0,l.S)((n=>{let{location:r}=n;e.current&&!r.hash&&"PUSH"===t&&u(e.current)})),{containerRef:e,onClick:n}}const d=(0,i.translate)({id:"theme.common.skipToMainContent",description:"The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation",message:"Skip to main content"});function f(e){const t=e.children??d,{containerRef:n,onClick:a}=c();return o.createElement("div",{ref:n,role:"region","aria-label":d},o.createElement("a",(0,r.Z)({},e,{href:`#${s}`,onClick:a}),t))}},99200:(e,t,n)=>{"use strict";n.d(t,{Nk:()=>d,WA:()=>c,_f:()=>f});var r=n(67294),o=n(61688);const a="localStorage";function i(e){let{key:t,oldValue:n,newValue:r,storage:o}=e;if(n===r)return;const a=document.createEvent("StorageEvent");a.initStorageEvent("storage",!1,!1,t,n,r,window.location.href,o),window.dispatchEvent(a)}function l(e){if(void 0===e&&(e=a),"undefined"==typeof window)throw new Error("Browser storage is not available on Node.js/Docusaurus SSR process.");if("none"===e)return null;try{return window[e]}catch(n){return t=n,s||(console.warn("Docusaurus browser storage is not available.\nPossible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.",t),s=!0),null}var t}let s=!1;const u={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};function c(e,t){if("undefined"==typeof window)return function(e){function t(){throw new Error(`Illegal storage API usage for storage key "${e}".\nDocusaurus storage APIs are not supposed to be called on the server-rendering process.\nPlease only call storage APIs in effects and event handlers.`)}return{get:t,set:t,del:t,listen:t}}(e);const n=l(null==t?void 0:t.persistence);return null===n?u:{get:()=>{try{return n.getItem(e)}catch(t){return console.error(`Docusaurus storage error, can't get key=${e}`,t),null}},set:t=>{try{const r=n.getItem(e);n.setItem(e,t),i({key:e,oldValue:r,newValue:t,storage:n})}catch(r){console.error(`Docusaurus storage error, can't set ${e}=${t}`,r)}},del:()=>{try{const t=n.getItem(e);n.removeItem(e),i({key:e,oldValue:t,newValue:null,storage:n})}catch(t){console.error(`Docusaurus storage error, can't delete key=${e}`,t)}},listen:t=>{try{const r=r=>{r.storageArea===n&&r.key===e&&t(r)};return window.addEventListener("storage",r),()=>window.removeEventListener("storage",r)}catch(r){return console.error(`Docusaurus storage error, can't listen for changes of key=${e}`,r),()=>{}}}}}function d(e,t){const n=(0,r.useRef)((()=>null===e?u:c(e,t))).current(),a=(0,r.useCallback)((e=>"undefined"==typeof window?()=>{}:n.listen(e)),[n]);return[(0,o.useSyncExternalStore)(a,(()=>"undefined"==typeof window?null:n.get()),(()=>null)),n]}function f(e){void 0===e&&(e=a);const t=l(e);if(!t)return[];const n=[];for(let r=0;r<t.length;r+=1){const e=t.key(r);null!==e&&n.push(e)}return n}},94462:(e,t,n)=>{"use strict";n.d(t,{a:()=>a,b:()=>l});var r=n(67294);function o(e){const t=e.map((e=>({...e,parentIndex:-1,children:[]}))),n=Array(7).fill(-1);t.forEach(((e,t)=>{const r=n.slice(2,e.level);e.parentIndex=Math.max(...r),n[e.level]=t}));const r=[];return t.forEach((e=>{const{parentIndex:n,...o}=e;n>=0?t[n].children.push(o):r.push(o)})),r}function a(e){return(0,r.useMemo)((()=>o(e)),[e])}function i(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:r}=e;return t.flatMap((e=>{const t=i({toc:e.children,minHeadingLevel:n,maxHeadingLevel:r});return function(e){return e.level>=n&&e.level<=r}(e)?[{...e,children:t}]:t}))}function l(e){let{toc:t,minHeadingLevel:n,maxHeadingLevel:a}=e;return(0,r.useMemo)((()=>i({toc:o(t),minHeadingLevel:n,maxHeadingLevel:a})),[t,n,a])}},13156:(e,t,n)=>{"use strict";n.d(t,{l:()=>a});var r=n(6832),o=n(16550);function a(){const{siteConfig:{baseUrl:e,url:t},i18n:{defaultLocale:n,currentLocale:a}}=(0,r.default)(),{pathname:i}=(0,o.TH)(),l=a===n?e:e.replace(`/${a}/`,"/"),s=i.replace(e,"");return{createUrl:function(e){let{locale:r,fullyQualified:o}=e;return`${o?t:""}${function(e){return e===n?`${l}`:`${l}${e}/`}(r)}${s}`}}}},68265:(e,t,n)=>{"use strict";n.d(t,{S:()=>i});var r=n(67294),o=n(16550),a=n(93478);function i(e){const t=(0,o.TH)(),n=(0,a.D9)(t),i=(0,a.zX)(e);(0,r.useEffect)((()=>{n&&t!==n&&i({location:t,previousLocation:n})}),[i,t,n])}},96793:(e,t,n)=>{"use strict";n.d(t,{L:()=>o});var r=n(6832);function o(){return(0,r.default)().siteConfig.themeConfig}},54357:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.default=function(e,t){const{trailingSlash:n,baseUrl:r}=t;if(e.startsWith("#"))return e;if(void 0===n)return e;const[o]=e.split(/[#?]/),a="/"===o||o===r?o:(i=o,n?function(e){return e.endsWith("/")?e:`${e}/`}(i):function(e){return e.endsWith("/")?e.slice(0,-1):e}(i));var i;return e.replace(o,a)}},6009:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=void 0,t.getErrorCausalChain=function e(t){return t.cause?[t,...e(t.cause)]:[t]}},79861:function(e,t,n){"use strict";var r=this&&this.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(t,"__esModule",{value:!0}),t.getErrorCausalChain=t.applyTrailingSlash=t.blogPostContainerID=void 0,t.blogPostContainerID="__blog-post-container";var o=n(54357);Object.defineProperty(t,"applyTrailingSlash",{enumerable:!0,get:function(){return r(o).default}});var a=n(6009);Object.defineProperty(t,"getErrorCausalChain",{enumerable:!0,get:function(){return a.getErrorCausalChain}})},78007:(e,t,n)=>{"use strict";n.r(t),n.d(t,{fetchIndexes:()=>l,legacyFetchIndexes:()=>s});var r=n(31336),o=n.n(r),a=n(96059);const i=new Map;function l(e,t){const n=`${e}${t}`;let r=i.get(n);return r||(r=s(e,t),i.set(n,r)),r}async function s(e,t){{const n=`${e}${a.searchIndexUrl.replace("{dir}",t?`-${t.replace(/\//g,"-")}`:"")}`;if(new URL(n,location.origin).origin!==location.origin)throw new Error("Unexpected version url");const r=await(await fetch(n)).json(),i=r.map(((e,t)=>{let{documents:n,index:r}=e;return{type:t,documents:n,index:o().Index.load(r)}})),l=r.reduce(((e,t)=>{for(const n of t.index.invertedIndex)/\p{Unified_Ideograph}/u.test(n[0][0])&&e.add(n[0]);return e}),new Set);return{wrappedIndexes:i,zhDictionary:Array.from(l)}}}},58263:(e,t,n)=>{"use strict";n.r(t),n.d(t,{SearchSourceFactory:()=>s});var r=n(31336),o=n.n(r);var a=n(96059);function i(e){return l(e).concat(l(e.filter((e=>{const t=e[e.length-1];return!t.trailing&&t.maybeTyping})),!0))}function l(e,t){return e.map((e=>({tokens:e.map((e=>e.value)),term:e.map((e=>({value:e.value,presence:o().Query.presence.REQUIRED,wildcard:(t?e.trailing||e.maybeTyping:e.trailing)?o().Query.wildcard.TRAILING:o().Query.wildcard.NONE})))})))}function s(e,t,n){return function(r,l){const s=function(e,t){if(1===t.length&&["ja","jp","th"].includes(t[0]))return o()[t[0]].tokenizer(e).map((e=>e.toString()));let n=/[^-\s]+/g;return t.includes("zh")&&(n=/\w+|\p{Unified_Ideograph}+/gu),e.toLowerCase().match(n)||[]}(r,a.language);if(0===s.length)return void l([]);const u=function(e,t){const n=function(e,t){const n=[];return function e(r,o){if(0===r.length)return void n.push(o);const a=r[0];if(/\p{Unified_Ideograph}/u.test(a)){const n=function(e,t){const n=[];return function e(r,o){let a=0,i=!1;for(const l of t)if(r.substr(0,l.length)===l){const t={missed:o.missed,term:o.term.concat({value:l})};r.length>l.length?e(r.substr(l.length),t):n.push(t),i=!0}else for(let t=l.length-1;t>a;t-=1){const s=l.substr(0,t);if(r.substr(0,t)===s){a=t;const l={missed:o.missed,term:o.term.concat({value:s,trailing:!0})};r.length>t?e(r.substr(t),l):n.push(l),i=!0;break}}i||(r.length>0?e(r.substr(1),{missed:o.missed+1,term:o.term}):o.term.length>0&&n.push(o))}(e,{missed:0,term:[]}),n.sort(((e,t)=>{const n=e.missed>0?1:0,r=t.missed>0?1:0;return n!==r?n-r:e.term.length-t.term.length})).map((e=>e.term))}(a,t);for(const t of n){const n=o.concat(...t);e(r.slice(1),n)}}else{const t=o.concat({value:a});e(r.slice(1),t)}}(e,[]),n}(e,t);if(0===n.length)return[{tokens:e,term:e.map((e=>({value:e,presence:o().Query.presence.REQUIRED,wildcard:o().Query.wildcard.LEADING|o().Query.wildcard.TRAILING})))}];for(const o of n)o[o.length-1].maybeTyping=!0;const r=[];for(const i of a.language)if("en"===i)a.removeDefaultStopWordFilter||r.unshift(o().stopWordFilter);else{const e=o()[i];e.stopWordFilter&&r.unshift(e.stopWordFilter)}let l;if(r.length>0){const e=e=>r.reduce(((e,t)=>e.filter((e=>t(e.value)))),e);l=[];const t=[];for(const r of n){const n=e(r);l.push(n),n.length<r.length&&n.length>0&&t.push(n)}n.push(...t)}else l=n.slice();const s=[];for(const o of l)if(o.length>2)for(let e=o.length-1;e>=0;e-=1)s.push(o.slice(0,e).concat(o.slice(e+1)));return i(n).concat(i(s))}(s,t),c=[];e:for(const{term:t,tokens:o}of u)for(const{documents:r,index:a,type:i}of e)if(c.push(...a.query((e=>{for(const n of t)e.term(n.value,{wildcard:n.wildcard,presence:n.presence})})).slice(0,n).filter((e=>!c.some((t=>t.document.i.toString()===e.ref)))).slice(0,n-c.length).map((t=>{const n=r.find((e=>e.i.toString()===t.ref));return{document:n,type:i,page:0!==i&&e[0].documents.find((e=>e.i===n.p)),metadata:t.matchData.metadata,tokens:o,score:t.score}}))),c.length>=n)break e;!function(e){e.forEach(((e,t)=>{e.index=t})),e.sort(((t,n)=>{let r=t.type>0&&t.page?e.findIndex((e=>e.document===t.page)):t.index,o=n.type>0&&n.page?e.findIndex((e=>e.document===n.page)):n.index;return-1===r&&(r=t.index),-1===o&&(o=n.index),r===o?0===t.type?-1:0===n.type?1:t.index-n.index:r-o}))}(c),function(e){e.forEach(((t,n)=>{n>0&&t.page&&e.some((e=>e.document===t.page))&&(n<e.length-1&&e[n+1].page===t.page?t.isInterOfTree=!0:t.isLastOfTree=!0)}))}(c),l(c)}}},84647:(e,t,n)=>{"use strict";function r(e,t){const n=[];for(const r of Object.values(e))r[t]&&n.push(...r[t].position);return n.sort(((e,t)=>e[0]-t[0]||t[1]-e[1]))}n.r(t),n.d(t,{getStemmedPositions:()=>r})},32438:(e,t,n)=>{"use strict";function r(e){return e.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function o(e,t,n){const a=[];for(const i of t){const n=e.toLowerCase().indexOf(i);if(n>=0){n>0&&a.push(o(e.substr(0,n),t)),a.push(`<mark>${r(e.substr(n,i.length))}</mark>`);const l=n+i.length;l<e.length&&a.push(o(e.substr(l),t));break}}return 0===a.length?n?`<mark>${r(e)}</mark>`:r(e):a.join("")}n.r(t),n.d(t,{highlightStemmed:()=>s,splitIntoChunks:()=>u});const a=/\w+|\p{Unified_Ideograph}/u;function i(e){const t=[];let n=0,r=e;for(;r.length>0;){const o=r.match(a);if(!o){t.push(r);break}o.index>0&&t.push(r.substring(0,o.index)),t.push(o[0]),n+=o.index+o[0].length,r=e.substring(n)}return t}var l=n(96059);function s(e,t,n,r){void 0===r&&(r=l.searchResultContextMaxLength);const{chunkIndex:o,chunks:a}=u(e,t,n),i=a.slice(0,o),s=a[o],c=[s.html],d=a.slice(o+1);let f=s.textLength,p=0,h=0,m=!1,g=!1;for(;f<r;)if((p<=h||0===d.length)&&i.length>0){const e=i.pop();f+e.textLength<=r?(c.unshift(e.html),p+=e.textLength,f+=e.textLength):(m=!0,i.length=0)}else{if(!(d.length>0))break;{const e=d.shift();f+e.textLength<=r?(c.push(e.html),h+=e.textLength,f+=e.textLength):(g=!0,d.length=0)}}return(m||i.length>0)&&c.unshift("\u2026"),(g||d.length>0)&&c.push("\u2026"),c.join("")}function u(e,t,n){const a=[];let l=0,s=0,u=-1;for(;l<t.length;){const[c,d]=t[l];if(l+=1,!(c<s)){if(c>s){const t=i(e.substring(s,c)).map((e=>({html:r(e),textLength:e.length})));for(const e of t)a.push(e)}-1===u&&(u=a.length),s=c+d,a.push({html:o(e.substring(c,s),n,!0),textLength:d})}}if(s<e.length){const t=i(e.substring(s)).map((e=>({html:r(e),textLength:e.length})));for(const e of t)a.push(e)}return{chunkIndex:u,chunks:a}}},96059:(e,t,n)=>{"use strict";n.r(t),n.d(t,{Mark:()=>i,docsPluginIdForPreferredVersion:()=>h,explicitSearchResultPath:()=>c,hideSearchBarWithNoSearchContext:()=>v,indexDocs:()=>m,language:()=>r,removeDefaultStemmer:()=>a,removeDefaultStopWordFilter:()=>o,searchBarPosition:()=>p,searchBarShortcut:()=>d,searchBarShortcutHint:()=>f,searchContextByPaths:()=>g,searchIndexUrl:()=>l,searchResultContextMaxLength:()=>u,searchResultLimits:()=>s});n(31336);const r=["en"],o=!1,a=!1,i=null,l="search-index{dir}.json?_=d303784f",s=8,u=50,c=!1,d=!0,f=!0,p="right",h=void 0,m=!0,g=null,v=!1},9463:(e,t,n)=>{"use strict";n.d(t,{Z:()=>g});var r=function(){function e(e){var t=this;this._insertTag=function(e){var n;n=0===t.tags.length?t.insertionPoint?t.insertionPoint.nextSibling:t.prepend?t.container.firstChild:t.before:t.tags[t.tags.length-1].nextSibling,t.container.insertBefore(e,n),t.tags.push(e)},this.isSpeedy=void 0===e.speedy||e.speedy,this.tags=[],this.ctr=0,this.nonce=e.nonce,this.key=e.key,this.container=e.container,this.prepend=e.prepend,this.insertionPoint=e.insertionPoint,this.before=null}var t=e.prototype;return t.hydrate=function(e){e.forEach(this._insertTag)},t.insert=function(e){this.ctr%(this.isSpeedy?65e3:1)==0&&this._insertTag(function(e){var t=document.createElement("style");return t.setAttribute("data-emotion",e.key),void 0!==e.nonce&&t.setAttribute("nonce",e.nonce),t.appendChild(document.createTextNode("")),t.setAttribute("data-s",""),t}(this));var t=this.tags[this.tags.length-1];if(this.isSpeedy){var n=function(e){if(e.sheet)return e.sheet;for(var t=0;t<document.styleSheets.length;t++)if(document.styleSheets[t].ownerNode===e)return document.styleSheets[t]}(t);try{n.insertRule(e,n.cssRules.length)}catch(r){0}}else t.appendChild(document.createTextNode(e));this.ctr++},t.flush=function(){this.tags.forEach((function(e){return e.parentNode&&e.parentNode.removeChild(e)})),this.tags=[],this.ctr=0},e}(),o=n(46411),a=n(26686),i=n(27563),l=n(20211);var s=n(92190),u=function(e,t,n){for(var r=0,a=0;r=a,a=(0,o.fj)(),38===r&&12===a&&(t[n]=1),!(0,o.r)(a);)(0,o.lp)();return(0,o.tP)(e,o.FK)},c=function(e,t){return(0,o.cE)(function(e,t){var n=-1,r=44;do{switch((0,o.r)(r)){case 0:38===r&&12===(0,o.fj)()&&(t[n]=1),e[n]+=u(o.FK-1,t,n);break;case 2:e[n]+=(0,o.iF)(r);break;case 4:if(44===r){e[++n]=58===(0,o.fj)()?"&\f":"",t[n]=e[n].length;break}default:e[n]+=(0,a.Dp)(r)}}while(r=(0,o.lp)());return e}((0,o.un)(e),t))},d=new WeakMap,f=function(e){if("rule"===e.type&&e.parent&&!(e.length<1)){for(var t=e.value,n=e.parent,r=e.column===n.column&&e.line===n.line;"rule"!==n.type;)if(!(n=n.parent))return;if((1!==e.props.length||58===t.charCodeAt(0)||d.get(n))&&!r){d.set(e,!0);for(var o=[],a=c(t,o),i=n.props,l=0,s=0;l<a.length;l++)for(var u=0;u<i.length;u++,s++)e.props[s]=o[l]?a[l].replace(/&\f/g,i[u]):i[u]+" "+a[l]}}},p=function(e){if("decl"===e.type){var t=e.value;108===t.charCodeAt(0)&&98===t.charCodeAt(2)&&(e.return="",e.value="")}};function h(e,t){switch((0,a.vp)(e,t)){case 5103:return i.G$+"print-"+e+e;case 5737:case 4201:case 3177:case 3433:case 1641:case 4457:case 2921:case 5572:case 6356:case 5844:case 3191:case 6645:case 3005:case 6391:case 5879:case 5623:case 6135:case 4599:case 4855:case 4215:case 6389:case 5109:case 5365:case 5621:case 3829:return i.G$+e+e;case 5349:case 4246:case 4810:case 6968:case 2756:return i.G$+e+i.uj+e+i.MS+e+e;case 6828:case 4268:return i.G$+e+i.MS+e+e;case 6165:return i.G$+e+i.MS+"flex-"+e+e;case 5187:return i.G$+e+(0,a.gx)(e,/(\w+).+(:[^]+)/,i.G$+"box-$1$2"+i.MS+"flex-$1$2")+e;case 5443:return i.G$+e+i.MS+"flex-item-"+(0,a.gx)(e,/flex-|-self/,"")+e;case 4675:return i.G$+e+i.MS+"flex-line-pack"+(0,a.gx)(e,/align-content|flex-|-self/,"")+e;case 5548:return i.G$+e+i.MS+(0,a.gx)(e,"shrink","negative")+e;case 5292:return i.G$+e+i.MS+(0,a.gx)(e,"basis","preferred-size")+e;case 6060:return i.G$+"box-"+(0,a.gx)(e,"-grow","")+i.G$+e+i.MS+(0,a.gx)(e,"grow","positive")+e;case 4554:return i.G$+(0,a.gx)(e,/([^-])(transform)/g,"$1"+i.G$+"$2")+e;case 6187:return(0,a.gx)((0,a.gx)((0,a.gx)(e,/(zoom-|grab)/,i.G$+"$1"),/(image-set)/,i.G$+"$1"),e,"")+e;case 5495:case 3959:return(0,a.gx)(e,/(image-set\([^]*)/,i.G$+"$1$`$1");case 4968:return(0,a.gx)((0,a.gx)(e,/(.+:)(flex-)?(.*)/,i.G$+"box-pack:$3"+i.MS+"flex-pack:$3"),/s.+-b[^;]+/,"justify")+i.G$+e+e;case 4095:case 3583:case 4068:case 2532:return(0,a.gx)(e,/(.+)-inline(.+)/,i.G$+"$1$2")+e;case 8116:case 7059:case 5753:case 5535:case 5445:case 5701:case 4933:case 4677:case 5533:case 5789:case 5021:case 4765:if((0,a.to)(e)-1-t>6)switch((0,a.uO)(e,t+1)){case 109:if(45!==(0,a.uO)(e,t+4))break;case 102:return(0,a.gx)(e,/(.+:)(.+)-([^]+)/,"$1"+i.G$+"$2-$3$1"+i.uj+(108==(0,a.uO)(e,t+3)?"$3":"$2-$3"))+e;case 115:return~(0,a.Cw)(e,"stretch")?h((0,a.gx)(e,"stretch","fill-available"),t)+e:e}break;case 4949:if(115!==(0,a.uO)(e,t+1))break;case 6444:switch((0,a.uO)(e,(0,a.to)(e)-3-(~(0,a.Cw)(e,"!important")&&10))){case 107:return(0,a.gx)(e,":",":"+i.G$)+e;case 101:return(0,a.gx)(e,/(.+:)([^;!]+)(;|!.+)?/,"$1"+i.G$+(45===(0,a.uO)(e,14)?"inline-":"")+"box$3$1"+i.G$+"$2$3$1"+i.MS+"$2box$3")+e}break;case 5936:switch((0,a.uO)(e,t+11)){case 114:return i.G$+e+i.MS+(0,a.gx)(e,/[svh]\w+-[tblr]{2}/,"tb")+e;case 108:return i.G$+e+i.MS+(0,a.gx)(e,/[svh]\w+-[tblr]{2}/,"tb-rl")+e;case 45:return i.G$+e+i.MS+(0,a.gx)(e,/[svh]\w+-[tblr]{2}/,"lr")+e}return i.G$+e+i.MS+e+e}return e}var m=[function(e,t,n,r){if(e.length>-1&&!e.return)switch(e.type){case i.h5:e.return=h(e.value,e.length);break;case i.lK:return(0,l.q)([(0,o.JG)(e,{value:(0,a.gx)(e.value,"@","@"+i.G$)})],r);case i.Fr:if(e.length)return(0,a.$e)(e.props,(function(t){switch((0,a.EQ)(t,/(::plac\w+|:read-\w+)/)){case":read-only":case":read-write":return(0,l.q)([(0,o.JG)(e,{props:[(0,a.gx)(t,/:(read-\w+)/,":"+i.uj+"$1")]})],r);case"::placeholder":return(0,l.q)([(0,o.JG)(e,{props:[(0,a.gx)(t,/:(plac\w+)/,":"+i.G$+"input-$1")]}),(0,o.JG)(e,{props:[(0,a.gx)(t,/:(plac\w+)/,":"+i.uj+"$1")]}),(0,o.JG)(e,{props:[(0,a.gx)(t,/:(plac\w+)/,i.MS+"input-$1")]})],r)}return""}))}}],g=function(e){var t=e.key;if("css"===t){var n=document.querySelectorAll("style[data-emotion]:not([data-s])");Array.prototype.forEach.call(n,(function(e){-1!==e.getAttribute("data-emotion").indexOf(" ")&&(document.head.appendChild(e),e.setAttribute("data-s",""))}))}var o=e.stylisPlugins||m;var i,u,c={},d=[];i=e.container||document.head,Array.prototype.forEach.call(document.querySelectorAll('style[data-emotion^="'+t+' "]'),(function(e){for(var t=e.getAttribute("data-emotion").split(" "),n=1;n<t.length;n++)c[t[n]]=!0;d.push(e)}));var h=[f,p];var g,v,b,y,w=[l.P,(y=function(e){g.insert(e)},function(e){e.root||(e=e.return)&&y(e)})],x=(v=h.concat(o,w),b=(0,a.Ei)(v),function(e,t,n,r){for(var o="",a=0;a<b;a++)o+=v[a](e,t,n,r)||"";return o});u=function(e,t,n,r){var o;g=n,o=e?e+"{"+t.styles+"}":t.styles,(0,l.q)((0,s.MY)(o),x),r&&(_.inserted[t.name]=!0)};var _={key:t,sheet:new r({key:t,container:i,nonce:e.nonce,speedy:e.speedy,prepend:e.prepend,insertionPoint:e.insertionPoint}),nonce:e.nonce,inserted:c,registered:{},insert:u};return _.sheet.hydrate(d),_}},45042:(e,t,n)=>{"use strict";function r(e){var t=Object.create(null);return function(n){return void 0===t[n]&&(t[n]=e(n)),t[n]}}n.d(t,{Z:()=>r})},80123:(e,t,n)=>{"use strict";n.d(t,{C:()=>m,E:()=>C,T:()=>b,_:()=>g,a:()=>x,b:()=>_,c:()=>E,h:()=>p,i:()=>f,u:()=>y,w:()=>v});var r=n(67294),o=n(9463);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}var i=function(e){var t=new WeakMap;return function(n){if(t.has(n))return t.get(n);var r=e(n);return t.set(n,r),r}},l=n(8679),s=n.n(l),u=n(70444),c=n(48137),d=n(27278),f=!0,p={}.hasOwnProperty,h=r.createContext("undefined"!=typeof HTMLElement?(0,o.Z)({key:"css"}):null);var m=h.Provider,g=function(){return(0,r.useContext)(h)},v=function(e){return(0,r.forwardRef)((function(t,n){var o=(0,r.useContext)(h);return e(t,o,n)}))};f||(v=function(e){return function(t){var n=(0,r.useContext)(h);return null===n?(n=(0,o.Z)({key:"css"}),r.createElement(h.Provider,{value:n},e(t,n))):e(t,n)}});var b=r.createContext({});var y=function(){return r.useContext(b)},w=i((function(e){return i((function(t){return function(e,t){return"function"==typeof t?t(e):a({},e,t)}(e,t)}))})),x=function(e){var t=r.useContext(b);return e.theme!==t&&(t=w(t)(e.theme)),r.createElement(b.Provider,{value:t},e.children)};function _(e){var t,n,o=e.displayName||e.name||"Component",i=function(t,n){var o=r.useContext(b);return r.createElement(e,a({theme:o,ref:n},t))},l=r.forwardRef(i);return l.displayName="WithTheme("+o+")",t=l,n=e,s()(t,n)}var k="__EMOTION_TYPE_PLEASE_DO_NOT_USE__",E=function(e,t){var n={};for(var r in t)p.call(t,r)&&(n[r]=t[r]);return n[k]=e,n},S=function(e){var t=e.cache,n=e.serialized,r=e.isStringTag;return(0,u.hC)(t,n,r),(0,d.L)((function(){return(0,u.My)(t,n,r)})),null};var C=v((function(e,t,n){var o=e.css;"string"==typeof o&&void 0!==t.registered[o]&&(o=t.registered[o]);var a=e[k],i=[o],l="";"string"==typeof e.className?l=(0,u.fp)(t.registered,i,e.className):null!=e.className&&(l=e.className+" ");var s=(0,c.O)(i,void 0,r.useContext(b));l+=t.key+"-"+s.name;var d={};for(var f in e)p.call(e,f)&&"css"!==f&&f!==k&&(d[f]=e[f]);return d.ref=n,d.className=l,r.createElement(r.Fragment,null,r.createElement(S,{cache:t,serialized:s,isStringTag:"string"==typeof a}),r.createElement(a,d))}))},70917:(e,t,n)=>{"use strict";n.r(t),n.d(t,{CacheProvider:()=>r.C,ClassNames:()=>m,Global:()=>u,ThemeContext:()=>r.T,ThemeProvider:()=>r.a,__unsafe_useEmotionCache:()=>r._,createElement:()=>s,css:()=>c,jsx:()=>s,keyframes:()=>d,useTheme:()=>r.u,withEmotionCache:()=>r.w,withTheme:()=>r.b});var r=n(80123),o=n(67294),a=n(70444),i=n(27278),l=n(48137),s=(n(9463),n(8679),function(e,t){var n=arguments;if(null==t||!r.h.call(t,"css"))return o.createElement.apply(void 0,n);var a=n.length,i=new Array(a);i[0]=r.E,i[1]=(0,r.c)(e,t);for(var l=2;l<a;l++)i[l]=n[l];return o.createElement.apply(null,i)}),u=(0,r.w)((function(e,t){var n=e.styles,s=(0,l.O)([n],void 0,o.useContext(r.T));if(!r.i){for(var u,c=s.name,d=s.styles,f=s.next;void 0!==f;)c+=" "+f.name,d+=f.styles,f=f.next;var p=!0===t.compat,h=t.insert("",{name:c,styles:d},t.sheet,p);return p?null:o.createElement("style",((u={})["data-emotion"]=t.key+"-global "+c,u.dangerouslySetInnerHTML={__html:h},u.nonce=t.sheet.nonce,u))}var m=o.useRef();return(0,i.j)((function(){var e=t.key+"-global",n=new t.sheet.constructor({key:e,nonce:t.sheet.nonce,container:t.sheet.container,speedy:t.sheet.isSpeedy}),r=!1,o=document.querySelector('style[data-emotion="'+e+" "+s.name+'"]');return t.sheet.tags.length&&(n.before=t.sheet.tags[0]),null!==o&&(r=!0,o.setAttribute("data-emotion",e),n.hydrate([o])),m.current=[n,r],function(){n.flush()}}),[t]),(0,i.j)((function(){var e=m.current,n=e[0];if(e[1])e[1]=!1;else{if(void 0!==s.next&&(0,a.My)(t,s.next,!0),n.tags.length){var r=n.tags[n.tags.length-1].nextElementSibling;n.before=r,n.flush()}t.insert("",s,n,!1)}}),[t,s.name]),null}));function c(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return(0,l.O)(t)}var d=function(){var e=c.apply(void 0,arguments),t="animation-"+e.name;return{name:t,styles:"@keyframes "+t+"{"+e.styles+"}",anim:1,toString:function(){return"_EMO_"+this.name+"_"+this.styles+"_EMO_"}}},f=function e(t){for(var n=t.length,r=0,o="";r<n;r++){var a=t[r];if(null!=a){var i=void 0;switch(typeof a){case"boolean":break;case"object":if(Array.isArray(a))i=e(a);else for(var l in i="",a)a[l]&&l&&(i&&(i+=" "),i+=l);break;default:i=a}i&&(o&&(o+=" "),o+=i)}}return o};function p(e,t,n){var r=[],o=(0,a.fp)(e,r,n);return r.length<2?n:o+t(r)}var h=function(e){var t=e.cache,n=e.serializedArr;return(0,i.L)((function(){for(var e=0;e<n.length;e++)(0,a.My)(t,n[e],!1)})),null},m=(0,r.w)((function(e,t){var n=[],i=function(){for(var e=arguments.length,r=new Array(e),o=0;o<e;o++)r[o]=arguments[o];var i=(0,l.O)(r,t.registered);return n.push(i),(0,a.hC)(t,i,!1),t.key+"-"+i.name},s={css:i,cx:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];return p(t.registered,i,f(n))},theme:o.useContext(r.T)},u=e.children(s);return!0,o.createElement(o.Fragment,null,o.createElement(h,{cache:t,serializedArr:n}),u)}))},48137:(e,t,n)=>{"use strict";n.d(t,{O:()=>h});var r={animationIterationCount:1,aspectRatio:1,borderImageOutset:1,borderImageSlice:1,borderImageWidth:1,boxFlex:1,boxFlexGroup:1,boxOrdinalGroup:1,columnCount:1,columns:1,flex:1,flexGrow:1,flexPositive:1,flexShrink:1,flexNegative:1,flexOrder:1,gridRow:1,gridRowEnd:1,gridRowSpan:1,gridRowStart:1,gridColumn:1,gridColumnEnd:1,gridColumnSpan:1,gridColumnStart:1,msGridRow:1,msGridRowSpan:1,msGridColumn:1,msGridColumnSpan:1,fontWeight:1,lineHeight:1,opacity:1,order:1,orphans:1,tabSize:1,widows:1,zIndex:1,zoom:1,WebkitLineClamp:1,fillOpacity:1,floodOpacity:1,stopOpacity:1,strokeDasharray:1,strokeDashoffset:1,strokeMiterlimit:1,strokeOpacity:1,strokeWidth:1},o=n(45042),a=/[A-Z]|^ms/g,i=/_EMO_([^_]+?)_([^]*?)_EMO_/g,l=function(e){return 45===e.charCodeAt(1)},s=function(e){return null!=e&&"boolean"!=typeof e},u=(0,o.Z)((function(e){return l(e)?e:e.replace(a,"-$&").toLowerCase()})),c=function(e,t){switch(e){case"animation":case"animationName":if("string"==typeof t)return t.replace(i,(function(e,t,n){return f={name:t,styles:n,next:f},t}))}return 1===r[e]||l(e)||"number"!=typeof t||0===t?t:t+"px"};function d(e,t,n){if(null==n)return"";if(void 0!==n.__emotion_styles)return n;switch(typeof n){case"boolean":return"";case"object":if(1===n.anim)return f={name:n.name,styles:n.styles,next:f},n.name;if(void 0!==n.styles){var r=n.next;if(void 0!==r)for(;void 0!==r;)f={name:r.name,styles:r.styles,next:f},r=r.next;return n.styles+";"}return function(e,t,n){var r="";if(Array.isArray(n))for(var o=0;o<n.length;o++)r+=d(e,t,n[o])+";";else for(var a in n){var i=n[a];if("object"!=typeof i)null!=t&&void 0!==t[i]?r+=a+"{"+t[i]+"}":s(i)&&(r+=u(a)+":"+c(a,i)+";");else if(!Array.isArray(i)||"string"!=typeof i[0]||null!=t&&void 0!==t[i[0]]){var l=d(e,t,i);switch(a){case"animation":case"animationName":r+=u(a)+":"+l+";";break;default:r+=a+"{"+l+"}"}}else for(var f=0;f<i.length;f++)s(i[f])&&(r+=u(a)+":"+c(a,i[f])+";")}return r}(e,t,n);case"function":if(void 0!==e){var o=f,a=n(e);return f=o,d(e,t,a)}}if(null==t)return n;var i=t[n];return void 0!==i?i:n}var f,p=/label:\s*([^\s;\n{]+)\s*(;|$)/g;var h=function(e,t,n){if(1===e.length&&"object"==typeof e[0]&&null!==e[0]&&void 0!==e[0].styles)return e[0];var r=!0,o="";f=void 0;var a=e[0];null==a||void 0===a.raw?(r=!1,o+=d(n,t,a)):o+=a[0];for(var i=1;i<e.length;i++)o+=d(n,t,e[i]),r&&(o+=a[i]);p.lastIndex=0;for(var l,s="";null!==(l=p.exec(o));)s+="-"+l[1];var u=function(e){for(var t,n=0,r=0,o=e.length;o>=4;++r,o-=4)t=1540483477*(65535&(t=255&e.charCodeAt(r)|(255&e.charCodeAt(++r))<<8|(255&e.charCodeAt(++r))<<16|(255&e.charCodeAt(++r))<<24))+(59797*(t>>>16)<<16),n=1540483477*(65535&(t^=t>>>24))+(59797*(t>>>16)<<16)^1540483477*(65535&n)+(59797*(n>>>16)<<16);switch(o){case 3:n^=(255&e.charCodeAt(r+2))<<16;case 2:n^=(255&e.charCodeAt(r+1))<<8;case 1:n=1540483477*(65535&(n^=255&e.charCodeAt(r)))+(59797*(n>>>16)<<16)}return(((n=1540483477*(65535&(n^=n>>>13))+(59797*(n>>>16)<<16))^n>>>15)>>>0).toString(36)}(o)+s;return{name:u,styles:o,next:f}}},27278:(e,t,n)=>{"use strict";var r;n.d(t,{L:()=>i,j:()=>l});var o=n(67294),a=!!(r||(r=n.t(o,2))).useInsertionEffect&&(r||(r=n.t(o,2))).useInsertionEffect,i=a||function(e){return e()},l=a||o.useLayoutEffect},70444:(e,t,n)=>{"use strict";n.d(t,{My:()=>a,fp:()=>r,hC:()=>o});function r(e,t,n){var r="";return n.split(" ").forEach((function(n){void 0!==e[n]?t.push(e[n]+";"):r+=n+" "})),r}var o=function(e,t,n){var r=e.key+"-"+t.name;!1===n&&void 0===e.registered[r]&&(e.registered[r]=t.styles)},a=function(e,t,n){o(e,t,n);var r=e.key+"-"+t.name;if(void 0===e.inserted[t.name]){var a=t;do{e.insert(t===a?"."+r:"",a,e.sheet,!0),a=a.next}while(void 0!==a)}}},19044:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:18,height:18,viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{stroke:"#fff",d:"M9 17.5V.5M.5 9h17"})))}},80255:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:20,height:20,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M11.764 5.294 7.06 10l4.705 4.706",stroke:"#000",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"})))}},67146:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M11.667 6.417h-7.1l3.261-3.261L7 2.333 2.333 7 7 11.667l.823-.823-3.255-3.26h7.099V6.417Z",fill:"#fff"})))}},68425:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r,o,a=n(67294);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}const l=e=>{let{title:t,titleId:n,...l}=e;return a.createElement("svg",i({width:20,height:20,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},l),t?a.createElement("title",{id:n},t):null,r||(r=a.createElement("rect",{width:20,height:20,rx:10,fill:"#000"})),o||(o=a.createElement("path",{d:"m9 8 2 2-2 2",stroke:"#fff",strokeWidth:1.2,strokeLinecap:"round",strokeLinejoin:"round"})))}},88121:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"m7 2.333-.823.823 3.255 3.26H2.333v1.167h7.1l-3.256 3.261.823.823L11.667 7 7 2.333Z",fill:"#fff"})))}},62082:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r,o,a=n(67294);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}const l=e=>{let{title:t,titleId:n,...l}=e;return a.createElement("svg",i({width:40,height:40,viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},l),t?a.createElement("title",{id:n},t):null,r||(r=a.createElement("path",{d:"M20 20a3.21 3.21 0 0 1-2.354-.98 3.21 3.21 0 0 1-.98-2.353c0-.917.327-1.702.98-2.355A3.21 3.21 0 0 1 20 13.333a3.21 3.21 0 0 1 2.354.98 3.21 3.21 0 0 1 .98 2.354 3.21 3.21 0 0 1-.98 2.354A3.21 3.21 0 0 1 20 20Zm-6.666 6.667v-2.334c0-.472.121-.906.364-1.302.244-.396.567-.698.969-.906.86-.43 1.736-.754 2.625-.97A11.418 11.418 0 0 1 20 20.834c.917 0 1.82.108 2.709.324.888.215 1.763.538 2.625.968.402.208.725.51.969.907.243.396.364.83.364 1.301v2.334H13.333ZM15 25h10v-.667a.817.817 0 0 0-.417-.708 10.844 10.844 0 0 0-2.27-.843 9.652 9.652 0 0 0-4.625 0c-.764.187-1.521.468-2.271.843a.815.815 0 0 0-.303.292.776.776 0 0 0-.114.416V25Zm5-6.667c.459 0 .851-.163 1.178-.49.326-.326.49-.719.489-1.176 0-.459-.164-.851-.49-1.178A1.602 1.602 0 0 0 20 15c-.458 0-.85.164-1.177.49-.327.328-.49.72-.49 1.178 0 .458.164.85.49 1.177.327.327.72.49 1.177.49Z",fill:"#fff"})),o||(o=a.createElement("rect",{x:.5,y:.5,width:39,height:39,rx:19.5,stroke:"#fff"})))}},80469:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"m12.667 4.273-.94-.94L8.001 7.06 4.274 3.333l-.94.94L7.061 8l-3.727 3.727.94.94L8.001 8.94l3.726 3.727.94-.94L8.941 8l3.726-3.727Z",fill:"#fff",opacity:.6})))}},94793:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M2.917 12.833c-.321 0-.596-.114-.825-.343a1.121 1.121 0 0 1-.342-.823V3.5h1.167v8.167h6.416v1.166H2.917ZM5.25 10.5c-.32 0-.596-.114-.824-.343a1.121 1.121 0 0 1-.343-.824v-7c0-.32.115-.595.343-.824.229-.229.504-.343.824-.342h5.25c.32 0 .596.114.824.343.229.228.343.503.343.823v7c0 .321-.115.596-.343.825a1.121 1.121 0 0 1-.824.342H5.25Zm0-1.167h5.25v-7H5.25v7Z",fill:"#fff"})))}},14607:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:40,height:40,viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M14.2 23.077c-1.733 0-3.147-1.575-3.147-3.504 0-1.926 1.379-3.5 3.149-3.5 1.75 0 3.183 1.574 3.148 3.5 0 1.929-1.398 3.504-3.15 3.504Zm11.623 0c-1.733 0-3.15-1.575-3.15-3.504 0-1.926 1.382-3.5 3.15-3.5 1.75 0 3.184 1.574 3.15 3.5 0 1.929-1.381 3.504-3.15 3.504ZM16.875 7.205l-.513-.938-1.057.175a27.255 27.255 0 0 0-6.93 2.133l-.38.177-.237.348C3.403 15.523 2.208 21.847 2.8 28.06l.065.677.55.4a28.181 28.181 0 0 0 8.463 4.238l1.317.403 1.855-4.528c3.183.787 6.717.788 9.898 0l1.845 4.53 1.317-.405a28.033 28.033 0 0 0 8.467-4.24l.545-.397.066-.67c.727-7.2-1.161-13.473-4.93-18.975l-.236-.345-.38-.173a27.625 27.625 0 0 0-6.924-2.133l-1.03-.172-.523.902c-.155.27-.301.544-.438.823a26.463 26.463 0 0 0-5.439 0c-.133-.266-.27-.53-.413-.79Zm-5.683 20.478c.328.19.675.377 1.016.547l-.748 1.827a25.041 25.041 0 0 1-5.713-2.964c-.375-5.231.688-10.508 4.273-15.95a24.256 24.256 0 0 1 4.707-1.521c.1.208.193.411.27.593l.455 1.072 1.153-.169a23.508 23.508 0 0 1 6.817 0l1.15.167.453-1.07c.078-.187.17-.39.267-.593a24.71 24.71 0 0 1 4.713 1.525c3.125 4.7 4.702 9.943 4.243 15.945a24.841 24.841 0 0 1-5.716 2.963l-.742-1.823c.343-.172.69-.359 1.022-.549.816-.47 1.695-1.056 2.255-1.616l-2.134-2.134c-.271.274-.871.7-1.628 1.137-.74.427-1.475.772-1.945.927-3.338 1.105-7.38 1.105-10.72 0-.468-.155-1.203-.5-1.943-.927-.757-.435-1.357-.863-1.63-1.137l-2.134 2.134c.562.56 1.442 1.146 2.259 1.616Z",fill:"#fff"})))}},50437:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M13.258 3.553a11.321 11.321 0 0 0-2.846-.886.06.06 0 0 0-.047.02c-.12.22-.26.506-.353.726-1.06-.16-2.14-.16-3.2 0a6.682 6.682 0 0 0-.36-.726c-.007-.014-.027-.02-.047-.02-1 .173-1.953.473-2.846.886-.007 0-.014.007-.02.014C1.725 6.28 1.225 8.92 1.472 11.533c0 .014.007.027.02.034a11.58 11.58 0 0 0 3.493 1.766c.02.007.04 0 .047-.013.267-.367.507-.754.713-1.16.014-.027 0-.053-.026-.06a8.21 8.21 0 0 1-1.094-.52c-.026-.014-.026-.053-.006-.073.073-.054.146-.114.22-.167a.04.04 0 0 1 .046-.007c2.294 1.047 4.767 1.047 7.034 0a.04.04 0 0 1 .046.007c.074.06.147.113.22.173.027.02.027.06-.007.073a7.133 7.133 0 0 1-1.093.52c-.027.007-.033.04-.027.06.214.407.454.794.714 1.16.02.007.04.014.06.007 1.146-.353 2.3-.886 3.5-1.767a.037.037 0 0 0 .02-.033c.293-3.02-.487-5.64-2.067-7.966-.007-.007-.013-.014-.027-.014ZM6.092 9.94c-.687 0-1.26-.633-1.26-1.413s.56-1.414 1.26-1.414c.707 0 1.267.64 1.26 1.414 0 .78-.56 1.413-1.26 1.413Zm4.647 0c-.687 0-1.26-.633-1.26-1.413s.56-1.414 1.26-1.414c.706 0 1.266.64 1.26 1.414 0 .78-.554 1.413-1.26 1.413Z",fill:"#fff"})))}},23179:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),void 0===t?o.createElement("title",{id:n},"Discourse"):t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M12.103 0C18.666 0 24 5.485 24 11.997c0 6.51-5.33 11.99-11.9 11.99L0 24V11.79C0 5.28 5.532 0 12.103 0zm.116 4.563a7.395 7.395 0 0 0-6.337 3.57 7.247 7.247 0 0 0-.148 7.22L4.4 19.61l4.794-1.074a7.424 7.424 0 0 0 8.136-1.39 7.256 7.256 0 0 0 1.737-7.997 7.375 7.375 0 0 0-6.84-4.585h-.008z"})))}},7744:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M9.334 1.333H4c-.733 0-1.326.6-1.326 1.334l-.007 10.666c0 .734.593 1.334 1.327 1.334H12c.734 0 1.334-.6 1.334-1.334v-8l-4-4ZM4 13.333V2.667h4.667V6H12v7.333H4Z",fill:"#fff"})))}},19818:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:20,height:20,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("circle",{cx:10,cy:10,r:8.333,fill:"#fff"})))}},38981:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M7 9.333 4.083 6.417 4.9 5.57l1.517 1.517V2.333h1.166v4.755L9.1 5.57l.817.846L7 9.333Zm-3.5 2.334c-.32 0-.596-.115-.824-.343a1.121 1.121 0 0 1-.343-.824V8.75H3.5v1.75h7V8.75h1.167v1.75c0 .32-.115.596-.343.824a1.121 1.121 0 0 1-.824.343h-7Z",fill:"#fff"})))}},28487:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:12,height:12,viewBox:"0 0 12 12",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"m2 4 4 4 4-4",stroke:"#909091",strokeWidth:1.4,strokeLinecap:"round",strokeLinejoin:"round"})))}},94177:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"m12.707 2.393.9.9c.526.52.526 1.367 0 1.887L4.787 14H2v-2.787l6.933-6.94 1.887-1.88c.52-.52 1.367-.52 1.887 0ZM3.333 12.667l.94.04 6.547-6.554-.94-.94-6.547 6.547v.907Z",fill:"#fff"})))}},96867:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M14.667 2.667H1.34l-.007 10.667h13.334V2.667ZM13.333 12H2.667V5.334L8 8.667l5.333-3.333V12ZM8 7.334 2.667 4h10.666L8 7.334Z",fill:"#fff"})))}},58611:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M11.192 4H3.428V2.857h9.715v9.715H12V4.808l-8.167 8.168-.809-.808L11.192 4Z",fill:"#fff"})))}},13042:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:20,height:20,viewBox:"0 0 20 20",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M1.804 16.292a.836.836 0 0 0 .696.374H15a.832.832 0 0 0 .766-.505l2.5-5.833a.833.833 0 0 0-.766-1.162h-.833v-2.5C16.667 5.747 15.919 5 15 5H9.454l-2.13-1.667h-3.99c-.92 0-1.667.748-1.667 1.667v10.833h.006a.834.834 0 0 0 .131.46ZM15 6.666v2.5H5a.832.832 0 0 0-.766.505l-.9 2.103V6.666H15Z",fill:"#000"})))}},96367:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M4.667 11.083v-1.75h-1.75V8.166h2.916v2.917H4.667Zm3.5 0V8.166h2.916v1.167h-1.75v1.75H8.167Zm-5.25-5.25V4.666h1.75v-1.75h1.166v2.917H2.917Zm5.25 0V2.916h1.166v1.75h1.75v1.167H8.167Z",fill:"#fff"})))}},6907:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:14,height:14,viewBox:"0 0 14 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M1.75 2.917V5.25h1.167V2.917H5.25V1.75H2.917A1.17 1.17 0 0 0 1.75 2.917ZM2.917 8.75H1.75v2.333a1.17 1.17 0 0 0 1.167 1.167H5.25v-1.167H2.917V8.75Zm8.166 2.333H8.75v1.167h2.333a1.17 1.17 0 0 0 1.167-1.167V8.75h-1.167v2.333Zm0-9.333H8.75v1.167h2.333V5.25h1.167V2.917a1.17 1.17 0 0 0-1.167-1.167Z",fill:"#fff"})))}},59570:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:40,height:40,viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M20 4.4a16 16 0 0 0-16 16c0 7.072 4.592 13.072 10.944 15.2.8.128 1.056-.368 1.056-.8v-2.704c-4.432.96-5.376-2.144-5.376-2.144-.736-1.856-1.776-2.352-1.776-2.352-1.456-.992.112-.96.112-.96 1.6.112 2.448 1.648 2.448 1.648C12.8 30.72 15.152 30 16.064 29.616c.144-1.04.56-1.744 1.008-2.144-3.552-.4-7.28-1.776-7.28-7.872 0-1.776.608-3.2 1.648-4.336-.16-.4-.72-2.064.16-4.224 0 0 1.344-.432 4.4 1.632a15.075 15.075 0 0 1 4-.528c1.36 0 2.736.176 4 .528 3.056-2.064 4.4-1.632 4.4-1.632.88 2.16.32 3.824.16 4.224 1.04 1.136 1.648 2.56 1.648 4.336 0 6.112-3.744 7.456-7.312 7.856.576.496 1.104 1.472 1.104 2.96V34.8c0 .432.256.944 1.072.8C31.424 33.456 36 27.472 36 20.4a16.001 16.001 0 0 0-16-16Z",fill:"#fff"})))}},26890:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r,o,a=n(67294);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}const l=e=>{let{title:t,titleId:n,...l}=e;return a.createElement("svg",i({xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 512 512",role:"img","aria-labelledby":n},l),t?a.createElement("title",{id:n},t):null,r||(r=a.createElement("path",{d:"M256 411.12 0 202.667 256 0zM256 411.12l256-208.453L256 0z"})),o||(o=a.createElement("circle",{cx:256,cy:362.667,r:149.333})))}},42924:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"m4 13.333.667-2.666H2.333l.334-1.334H5l.667-2.666H3l.333-1.334H6l.667-2.666H8l-.667 2.666H10l.667-2.666H12l-.667 2.666h2.334l-.334 1.334H11l-.667 2.666H13l-.333 1.334H10l-.667 2.666H8l.667-2.666H6l-.667 2.666H4Zm2.333-4H9l.667-2.666H7l-.667 2.666Z",fill:"#fff"})))}},74297:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M8 14c-1.533 0-2.87-.508-4.009-1.525-1.139-1.017-1.791-2.287-1.958-3.808H3.4c.156 1.155.67 2.11 1.542 2.866.872.756 1.892 1.134 3.058 1.134 1.3 0 2.403-.453 3.309-1.359.905-.906 1.358-2.008 1.358-3.308 0-1.3-.453-2.403-1.359-3.309C10.402 3.786 9.3 3.333 8 3.333a4.5 4.5 0 0 0-2.15.534 4.954 4.954 0 0 0-1.683 1.466H6v1.334H2v-4h1.333v1.566A5.954 5.954 0 0 1 8 2c.833 0 1.614.158 2.342.475a6.107 6.107 0 0 1 1.9 1.283c.539.54.966 1.172 1.283 1.9C13.842 6.386 14 7.166 14 8c0 .833-.158 1.614-.475 2.342a6.108 6.108 0 0 1-1.283 1.9 6.11 6.11 0 0 1-1.9 1.283A5.793 5.793 0 0 1 8 14Zm1.867-3.2L7.333 8.267v-3.6h1.334v3.066L10.8 9.867l-.933.933Z",fill:"#fff"})))}},33336:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:16,height:16,viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M12.667 2A1.333 1.333 0 0 1 14 3.333v9.334A1.334 1.334 0 0 1 12.667 14H3.333A1.334 1.334 0 0 1 2 12.667V3.333A1.333 1.333 0 0 1 3.333 2h9.334Zm-.334 10.333V8.8a2.173 2.173 0 0 0-2.173-2.173c-.567 0-1.227.346-1.547.866v-.74h-1.86v5.58h1.86V9.047a.93.93 0 1 1 1.86 0v3.286h1.86ZM4.587 5.707a1.12 1.12 0 0 0 1.12-1.12 1.124 1.124 0 1 0-1.12 1.12Zm.926 6.626v-5.58H3.667v5.58h1.846Z",fill:"#fff"})))}},65379:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r,o,a=n(67294);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}const l=e=>{let{title:t,titleId:n,...l}=e;return a.createElement("svg",i({width:26,height:26,viewBox:"0 0 26 26",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},l),t?a.createElement("title",{id:n},t):null,r||(r=a.createElement("rect",{width:26,height:26,rx:13,fill:"#fff"})),o||(o=a.createElement("path",{d:"M10.334 9.547v6.906c0 .527.58.847 1.026.56l5.427-3.453a.667.667 0 0 0 0-1.127L11.36 8.987a.665.665 0 0 0-1.026.56Z",fill:"#000"})))}},78951:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:18,height:18,viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{stroke:"#fff",d:"M.5 9h17"})))}},84629:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r,o,a=n(67294);function i(){return i=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}const l=e=>{let{title:t,titleId:n,...l}=e;return a.createElement("svg",i({width:18,height:18,viewBox:"0 0 18 18",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},l),t?a.createElement("title",{id:n},t):null,r||(r=a.createElement("g",{clipPath:"url(#a)"},a.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M1.79 6.75a4.979 4.979 0 1 1 9.957 0 4.979 4.979 0 0 1-9.957 0ZM6.768.572a6.179 6.179 0 1 0 3.817 11.037l5.146 5.146a1 1 0 0 0 1.414-1.414l-5.207-5.207A6.179 6.179 0 0 0 6.768.571Z",fill:"#000"}))),o||(o=a.createElement("defs",null,a.createElement("clipPath",{id:"a"},a.createElement("path",{fill:"#fff",d:"M0 0h18v18H0z"})))))}},23816:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:179,height:178,viewBox:"0 0 179 178",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M104.512 88.178c-10.667.615-17.352-1.87-28.02-1.254a44.732 44.732 0 0 0-7.853 1.146c1.575-19.73 15.538-36.988 34.525-38.085 11.652-.672 23.298 6.522 23.93 18.2.621 11.479-8.131 19.158-22.58 19.992l-.002.001Zm-28.645 40.355c-11.162.631-22.317-6.104-22.923-17.033-.596-10.742 7.79-17.93 21.633-18.71 10.218-.575 16.623 1.751 26.84 1.174a43.776 43.776 0 0 0 7.522-1.073c-1.506 18.464-14.881 34.617-33.072 35.642ZM89.5.001C40.346 0 .5 39.846.5 89c0 49.154 39.846 89 89 89s89-39.847 89-89-39.846-89-89-89",fill:"#000"})))}},35245:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:40,height:40,viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{fillRule:"evenodd",clipRule:"evenodd",d:"M4.906 17.987c9.395-4.094 15.66-6.792 18.795-8.096 8.95-3.723 10.81-4.37 12.022-4.39.267-.005.863.06 1.249.374.326.264.416.622.459.873.043.25.096.822.053 1.268-.485 5.097-2.583 17.463-3.65 23.171-.453 2.415-1.342 3.225-2.203 3.304-1.872.172-3.293-1.237-5.106-2.425-2.836-1.86-4.439-3.017-7.192-4.831-3.182-2.097-1.12-3.25.694-5.133.475-.493 8.72-7.993 8.88-8.674.02-.085.039-.402-.15-.57-.188-.167-.466-.11-.667-.064-.284.064-4.816 3.06-13.594 8.985-1.286.883-2.451 1.314-3.495 1.29-1.15-.024-3.364-.65-5.01-1.185-2.018-.656-3.622-1.003-3.483-2.117.073-.58.872-1.174 2.398-1.78Z",fill:"#fff"})))}},68902:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:24,height:24,xmlns:"http://www.w3.org/2000/svg",xmlSpace:"preserve",style:{fillRule:"evenodd",clipRule:"evenodd",strokeLinejoin:"round",strokeMiterlimit:1.41421},role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M12 0C5.374 0 0 5.372 0 12c0 6.627 5.374 12 12 12 6.627 0 12-5.373 12-12 0-6.628-5.373-12-12-12Zm3.224 17.871c.188.133.43.166.646.085a.678.678 0 0 0 .422-.491c.507-2.382 1.737-8.412 2.198-10.578a.457.457 0 0 0-.151-.443.47.47 0 0 0-.465-.082c-2.446.906-9.979 3.732-13.058 4.871a.484.484 0 0 0-.316.467.483.483 0 0 0 .346.445c1.381.413 3.193.988 3.193.988s.847 2.558 1.288 3.858a.512.512 0 0 0 .352.336.505.505 0 0 0 .474-.121l1.805-1.704s2.084 1.527 3.266 2.369Zm-6.423-5.062.98 3.231.218-2.046 5.941-5.358a.162.162 0 0 0 .019-.22.165.165 0 0 0-.219-.037l-6.939 4.43Z"})))}},86089:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:17,height:14,viewBox:"0 0 17 14",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M16.557 1.597a6.802 6.802 0 0 1-1.95.534A3.406 3.406 0 0 0 16.1.251a6.782 6.782 0 0 1-2.157.824 3.398 3.398 0 0 0-5.788 3.1A9.647 9.647 0 0 1 1.153.624a3.395 3.395 0 0 0-.059 3.31c.264.494.645.915 1.11 1.225a3.389 3.389 0 0 1-1.538-.425v.044a3.398 3.398 0 0 0 2.725 3.33c-.5.136-1.025.156-1.534.06a3.399 3.399 0 0 0 3.173 2.357A6.817 6.817 0 0 1 0 11.934a9.607 9.607 0 0 0 5.207 1.526c6.249 0 9.665-5.176 9.665-9.665 0-.146-.004-.293-.01-.439A6.905 6.905 0 0 0 16.556 1.6l.001-.002Z",fill:"#000"})))}},92358:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>i});var r,o=n(67294);function a(){return a=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},a.apply(this,arguments)}const i=e=>{let{title:t,titleId:n,...i}=e;return o.createElement("svg",a({width:40,height:40,viewBox:"0 0 40 40",fill:"none",xmlns:"http://www.w3.org/2000/svg",role:"img","aria-labelledby":n},i),t?o.createElement("title",{id:n},t):null,r||(r=o.createElement("path",{d:"M22.62 19.134 32.63 7.5h-2.373l-8.69 10.102L14.627 7.5H6.62l10.496 15.275-10.496 12.2h2.372l9.177-10.668 7.33 10.668h8.005L22.62 19.134Zm-3.248 3.776-1.063-1.521L9.847 9.285h3.643l6.829 9.768 1.063 1.521 8.877 12.697h-3.643l-7.244-10.36v-.001Z",fill:"#fff"})))}},86010:(e,t,n)=>{"use strict";function r(e){var t,n,o="";if("string"==typeof e||"number"==typeof e)o+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(n=r(e[t]))&&(o&&(o+=" "),o+=n);else for(t in e)e[t]&&(o&&(o+=" "),o+=t);return o}function o(){for(var e,t,n=0,o="";n<arguments.length;)(e=arguments[n++])&&(t=r(e))&&(o&&(o+=" "),o+=t);return o}n.r(t),n.d(t,{clsx:()=>o,default:()=>a});const a=o},20640:(e,t,n)=>{"use strict";var r=n(11742),o={"text/plain":"Text","text/html":"Url",default:"Text"};e.exports=function(e,t){var n,a,i,l,s,u,c=!1;t||(t={}),n=t.debug||!1;try{if(i=r(),l=document.createRange(),s=document.getSelection(),(u=document.createElement("span")).textContent=e,u.ariaHidden="true",u.style.all="unset",u.style.position="fixed",u.style.top=0,u.style.clip="rect(0, 0, 0, 0)",u.style.whiteSpace="pre",u.style.webkitUserSelect="text",u.style.MozUserSelect="text",u.style.msUserSelect="text",u.style.userSelect="text",u.addEventListener("copy",(function(r){if(r.stopPropagation(),t.format)if(r.preventDefault(),void 0===r.clipboardData){n&&console.warn("unable to use e.clipboardData"),n&&console.warn("trying IE specific stuff"),window.clipboardData.clearData();var a=o[t.format]||o.default;window.clipboardData.setData(a,e)}else r.clipboardData.clearData(),r.clipboardData.setData(t.format,e);t.onCopy&&(r.preventDefault(),t.onCopy(r.clipboardData))})),document.body.appendChild(u),l.selectNodeContents(u),s.addRange(l),!document.execCommand("copy"))throw new Error("copy command was unsuccessful");c=!0}catch(d){n&&console.error("unable to copy using execCommand: ",d),n&&console.warn("trying IE specific stuff");try{window.clipboardData.setData(t.format||"text",e),t.onCopy&&t.onCopy(window.clipboardData),c=!0}catch(d){n&&console.error("unable to copy using clipboardData: ",d),n&&console.error("falling back to prompt"),a=function(e){var t=(/mac os x/i.test(navigator.userAgent)?"\u2318":"Ctrl")+"+C";return e.replace(/#{\s*key\s*}/g,t)}("message"in t?t.message:"Copy to clipboard: #{key}, Enter"),window.prompt(a,e)}}finally{s&&("function"==typeof s.removeRange?s.removeRange(l):s.removeAllRanges()),u&&document.body.removeChild(u),i()}return c}},38252:e=>{"use strict";e.exports=function e(t,n){if(t===n)return!0;if(t&&n&&"object"==typeof t&&"object"==typeof n){if(t.constructor!==n.constructor)return!1;var r,o,a;if(Array.isArray(t)){if((r=t.length)!=n.length)return!1;for(o=r;0!=o--;)if(!e(t[o],n[o]))return!1;return!0}if(t.constructor===RegExp)return t.source===n.source&&t.flags===n.flags;if(t.valueOf!==Object.prototype.valueOf)return t.valueOf()===n.valueOf();if(t.toString!==Object.prototype.toString)return t.toString()===n.toString();if((r=(a=Object.keys(t)).length)!==Object.keys(n).length)return!1;for(o=r;0!=o--;)if(!Object.prototype.hasOwnProperty.call(n,a[o]))return!1;for(o=r;0!=o--;){var i=a[o];if(("_owner"!==i||!t.$$typeof)&&!e(t[i],n[i]))return!1}return!0}return t!=t&&n!=n}},99376:(e,t)=>{var n=Object.keys;t.D=function(e,t){if(e===t)return!0;if(!(e instanceof Object&&t instanceof Object))return!1;for(var r=n(e),o=r.length,a=0;a<o;a++)if(!(r[a]in t))return!1;for(a=0;a<o;a++)if(e[r[a]]!==t[r[a]])return!1;return o===n(t).length}},42358:(e,t,n)=>{"use strict";n.d(t,{lX:()=>k,q_:()=>D,ob:()=>m,PP:()=>N,Ep:()=>h,Hp:()=>g});var r=n(87462);function o(e){return"/"===e.charAt(0)}function a(e,t){for(var n=t,r=n+1,o=e.length;r<o;n+=1,r+=1)e[n]=e[r];e.pop()}const i=function(e,t){void 0===t&&(t="");var n,r=e&&e.split("/")||[],i=t&&t.split("/")||[],l=e&&o(e),s=t&&o(t),u=l||s;if(e&&o(e)?i=r:r.length&&(i.pop(),i=i.concat(r)),!i.length)return"/";if(i.length){var c=i[i.length-1];n="."===c||".."===c||""===c}else n=!1;for(var d=0,f=i.length;f>=0;f--){var p=i[f];"."===p?a(i,f):".."===p?(a(i,f),d++):d&&(a(i,f),d--)}if(!u)for(;d--;d)i.unshift("..");!u||""===i[0]||i[0]&&o(i[0])||i.unshift("");var h=i.join("/");return n&&"/"!==h.substr(-1)&&(h+="/"),h};function l(e){return e.valueOf?e.valueOf():Object.prototype.valueOf.call(e)}const s=function e(t,n){if(t===n)return!0;if(null==t||null==n)return!1;if(Array.isArray(t))return Array.isArray(n)&&t.length===n.length&&t.every((function(t,r){return e(t,n[r])}));if("object"==typeof t||"object"==typeof n){var r=l(t),o=l(n);return r!==t||o!==n?e(r,o):Object.keys(Object.assign({},t,n)).every((function(r){return e(t[r],n[r])}))}return!1};var u=n(38776);function c(e){return"/"===e.charAt(0)?e:"/"+e}function d(e){return"/"===e.charAt(0)?e.substr(1):e}function f(e,t){return function(e,t){return 0===e.toLowerCase().indexOf(t.toLowerCase())&&-1!=="/?#".indexOf(e.charAt(t.length))}(e,t)?e.substr(t.length):e}function p(e){return"/"===e.charAt(e.length-1)?e.slice(0,-1):e}function h(e){var t=e.pathname,n=e.search,r=e.hash,o=t||"/";return n&&"?"!==n&&(o+="?"===n.charAt(0)?n:"?"+n),r&&"#"!==r&&(o+="#"===r.charAt(0)?r:"#"+r),o}function m(e,t,n,o){var a;"string"==typeof e?(a=function(e){var t=e||"/",n="",r="",o=t.indexOf("#");-1!==o&&(r=t.substr(o),t=t.substr(0,o));var a=t.indexOf("?");return-1!==a&&(n=t.substr(a),t=t.substr(0,a)),{pathname:t,search:"?"===n?"":n,hash:"#"===r?"":r}}(e),a.state=t):(void 0===(a=(0,r.Z)({},e)).pathname&&(a.pathname=""),a.search?"?"!==a.search.charAt(0)&&(a.search="?"+a.search):a.search="",a.hash?"#"!==a.hash.charAt(0)&&(a.hash="#"+a.hash):a.hash="",void 0!==t&&void 0===a.state&&(a.state=t));try{a.pathname=decodeURI(a.pathname)}catch(l){throw l instanceof URIError?new URIError('Pathname "'+a.pathname+'" could not be decoded. This is likely caused by an invalid percent-encoding.'):l}return n&&(a.key=n),o?a.pathname?"/"!==a.pathname.charAt(0)&&(a.pathname=i(a.pathname,o.pathname)):a.pathname=o.pathname:a.pathname||(a.pathname="/"),a}function g(e,t){return e.pathname===t.pathname&&e.search===t.search&&e.hash===t.hash&&e.key===t.key&&s(e.state,t.state)}function v(){var e=null;var t=[];return{setPrompt:function(t){return e=t,function(){e===t&&(e=null)}},confirmTransitionTo:function(t,n,r,o){if(null!=e){var a="function"==typeof e?e(t,n):e;"string"==typeof a?"function"==typeof r?r(a,o):o(!0):o(!1!==a)}else o(!0)},appendListener:function(e){var n=!0;function r(){n&&e.apply(void 0,arguments)}return t.push(r),function(){n=!1,t=t.filter((function(e){return e!==r}))}},notifyListeners:function(){for(var e=arguments.length,n=new Array(e),r=0;r<e;r++)n[r]=arguments[r];t.forEach((function(e){return e.apply(void 0,n)}))}}}var b=!("undefined"==typeof window||!window.document||!window.document.createElement);function y(e,t){t(window.confirm(e))}var w="popstate",x="hashchange";function _(){try{return window.history.state||{}}catch(e){return{}}}function k(e){void 0===e&&(e={}),b||(0,u.Z)(!1);var t,n=window.history,o=(-1===(t=window.navigator.userAgent).indexOf("Android 2.")&&-1===t.indexOf("Android 4.0")||-1===t.indexOf("Mobile Safari")||-1!==t.indexOf("Chrome")||-1!==t.indexOf("Windows Phone"))&&window.history&&"pushState"in window.history,a=!(-1===window.navigator.userAgent.indexOf("Trident")),i=e,l=i.forceRefresh,s=void 0!==l&&l,d=i.getUserConfirmation,g=void 0===d?y:d,k=i.keyLength,E=void 0===k?6:k,S=e.basename?p(c(e.basename)):"";function C(e){var t=e||{},n=t.key,r=t.state,o=window.location,a=o.pathname+o.search+o.hash;return S&&(a=f(a,S)),m(a,r,n)}function T(){return Math.random().toString(36).substr(2,E)}var O=v();function D(e){(0,r.Z)($,e),$.length=n.length,O.notifyListeners($.location,$.action)}function P(e){(function(e){return void 0===e.state&&-1===navigator.userAgent.indexOf("CriOS")})(e)||A(C(e.state))}function N(){A(C(_()))}var I=!1;function A(e){if(I)I=!1,D();else{O.confirmTransitionTo(e,"POP",g,(function(t){t?D({action:"POP",location:e}):function(e){var t=$.location,n=R.indexOf(t.key);-1===n&&(n=0);var r=R.indexOf(e.key);-1===r&&(r=0);var o=n-r;o&&(I=!0,M(o))}(e)}))}}var L=C(_()),R=[L.key];function j(e){return S+h(e)}function M(e){n.go(e)}var F=0;function B(e){1===(F+=e)&&1===e?(window.addEventListener(w,P),a&&window.addEventListener(x,N)):0===F&&(window.removeEventListener(w,P),a&&window.removeEventListener(x,N))}var z=!1;var $={length:n.length,action:"POP",location:L,createHref:j,push:function(e,t){var r="PUSH",a=m(e,t,T(),$.location);O.confirmTransitionTo(a,r,g,(function(e){if(e){var t=j(a),i=a.key,l=a.state;if(o)if(n.pushState({key:i,state:l},null,t),s)window.location.href=t;else{var u=R.indexOf($.location.key),c=R.slice(0,u+1);c.push(a.key),R=c,D({action:r,location:a})}else window.location.href=t}}))},replace:function(e,t){var r="REPLACE",a=m(e,t,T(),$.location);O.confirmTransitionTo(a,r,g,(function(e){if(e){var t=j(a),i=a.key,l=a.state;if(o)if(n.replaceState({key:i,state:l},null,t),s)window.location.replace(t);else{var u=R.indexOf($.location.key);-1!==u&&(R[u]=a.key),D({action:r,location:a})}else window.location.replace(t)}}))},go:M,goBack:function(){M(-1)},goForward:function(){M(1)},block:function(e){void 0===e&&(e=!1);var t=O.setPrompt(e);return z||(B(1),z=!0),function(){return z&&(z=!1,B(-1)),t()}},listen:function(e){var t=O.appendListener(e);return B(1),function(){B(-1),t()}}};return $}var E="hashchange",S={hashbang:{encodePath:function(e){return"!"===e.charAt(0)?e:"!/"+d(e)},decodePath:function(e){return"!"===e.charAt(0)?e.substr(1):e}},noslash:{encodePath:d,decodePath:c},slash:{encodePath:c,decodePath:c}};function C(e){var t=e.indexOf("#");return-1===t?e:e.slice(0,t)}function T(){var e=window.location.href,t=e.indexOf("#");return-1===t?"":e.substring(t+1)}function O(e){window.location.replace(C(window.location.href)+"#"+e)}function D(e){void 0===e&&(e={}),b||(0,u.Z)(!1);var t=window.history,n=(window.navigator.userAgent.indexOf("Firefox"),e),o=n.getUserConfirmation,a=void 0===o?y:o,i=n.hashType,l=void 0===i?"slash":i,s=e.basename?p(c(e.basename)):"",d=S[l],g=d.encodePath,w=d.decodePath;function x(){var e=w(T());return s&&(e=f(e,s)),m(e)}var _=v();function k(e){(0,r.Z)(z,e),z.length=t.length,_.notifyListeners(z.location,z.action)}var D=!1,P=null;function N(){var e,t,n=T(),r=g(n);if(n!==r)O(r);else{var o=x(),i=z.location;if(!D&&(t=o,(e=i).pathname===t.pathname&&e.search===t.search&&e.hash===t.hash))return;if(P===h(o))return;P=null,function(e){if(D)D=!1,k();else{var t="POP";_.confirmTransitionTo(e,t,a,(function(n){n?k({action:t,location:e}):function(e){var t=z.location,n=R.lastIndexOf(h(t));-1===n&&(n=0);var r=R.lastIndexOf(h(e));-1===r&&(r=0);var o=n-r;o&&(D=!0,j(o))}(e)}))}}(o)}}var I=T(),A=g(I);I!==A&&O(A);var L=x(),R=[h(L)];function j(e){t.go(e)}var M=0;function F(e){1===(M+=e)&&1===e?window.addEventListener(E,N):0===M&&window.removeEventListener(E,N)}var B=!1;var z={length:t.length,action:"POP",location:L,createHref:function(e){var t=document.querySelector("base"),n="";return t&&t.getAttribute("href")&&(n=C(window.location.href)),n+"#"+g(s+h(e))},push:function(e,t){var n="PUSH",r=m(e,void 0,void 0,z.location);_.confirmTransitionTo(r,n,a,(function(e){if(e){var t=h(r),o=g(s+t);if(T()!==o){P=t,function(e){window.location.hash=e}(o);var a=R.lastIndexOf(h(z.location)),i=R.slice(0,a+1);i.push(t),R=i,k({action:n,location:r})}else k()}}))},replace:function(e,t){var n="REPLACE",r=m(e,void 0,void 0,z.location);_.confirmTransitionTo(r,n,a,(function(e){if(e){var t=h(r),o=g(s+t);T()!==o&&(P=t,O(o));var a=R.indexOf(h(z.location));-1!==a&&(R[a]=t),k({action:n,location:r})}}))},go:j,goBack:function(){j(-1)},goForward:function(){j(1)},block:function(e){void 0===e&&(e=!1);var t=_.setPrompt(e);return B||(F(1),B=!0),function(){return B&&(B=!1,F(-1)),t()}},listen:function(e){var t=_.appendListener(e);return F(1),function(){F(-1),t()}}};return z}function P(e,t,n){return Math.min(Math.max(e,t),n)}function N(e){void 0===e&&(e={});var t=e,n=t.getUserConfirmation,o=t.initialEntries,a=void 0===o?["/"]:o,i=t.initialIndex,l=void 0===i?0:i,s=t.keyLength,u=void 0===s?6:s,c=v();function d(e){(0,r.Z)(w,e),w.length=w.entries.length,c.notifyListeners(w.location,w.action)}function f(){return Math.random().toString(36).substr(2,u)}var p=P(l,0,a.length-1),g=a.map((function(e){return m(e,void 0,"string"==typeof e?f():e.key||f())})),b=h;function y(e){var t=P(w.index+e,0,w.entries.length-1),r=w.entries[t];c.confirmTransitionTo(r,"POP",n,(function(e){e?d({action:"POP",location:r,index:t}):d()}))}var w={length:g.length,action:"POP",location:g[p],index:p,entries:g,createHref:b,push:function(e,t){var r="PUSH",o=m(e,t,f(),w.location);c.confirmTransitionTo(o,r,n,(function(e){if(e){var t=w.index+1,n=w.entries.slice(0);n.length>t?n.splice(t,n.length-t,o):n.push(o),d({action:r,location:o,index:t,entries:n})}}))},replace:function(e,t){var r="REPLACE",o=m(e,t,f(),w.location);c.confirmTransitionTo(o,r,n,(function(e){e&&(w.entries[w.index]=o,d({action:r,location:o}))}))},go:y,goBack:function(){y(-1)},goForward:function(){y(1)},canGo:function(e){var t=w.index+e;return t>=0&&t<w.entries.length},block:function(e){return void 0===e&&(e=!1),c.setPrompt(e)},listen:function(e){return c.appendListener(e)}};return w}},8679:(e,t,n)=>{"use strict";var r=n(59864),o={childContextTypes:!0,contextType:!0,contextTypes:!0,defaultProps:!0,displayName:!0,getDefaultProps:!0,getDerivedStateFromError:!0,getDerivedStateFromProps:!0,mixins:!0,propTypes:!0,type:!0},a={name:!0,length:!0,prototype:!0,caller:!0,callee:!0,arguments:!0,arity:!0},i={$$typeof:!0,compare:!0,defaultProps:!0,displayName:!0,propTypes:!0,type:!0},l={};function s(e){return r.isMemo(e)?i:l[e.$$typeof]||o}l[r.ForwardRef]={$$typeof:!0,render:!0,defaultProps:!0,displayName:!0,propTypes:!0},l[r.Memo]=i;var u=Object.defineProperty,c=Object.getOwnPropertyNames,d=Object.getOwnPropertySymbols,f=Object.getOwnPropertyDescriptor,p=Object.getPrototypeOf,h=Object.prototype;e.exports=function e(t,n,r){if("string"!=typeof n){if(h){var o=p(n);o&&o!==h&&e(t,o,r)}var i=c(n);d&&(i=i.concat(d(n)));for(var l=s(t),m=s(n),g=0;g<i.length;++g){var v=i[g];if(!(a[v]||r&&r[v]||m&&m[v]||l&&l[v])){var b=f(n,v);try{u(t,v,b)}catch(y){}}}}return t}},41143:e=>{"use strict";e.exports=function(e,t,n,r,o,a,i,l){if(!e){var s;if(void 0===t)s=new Error("Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.");else{var u=[n,r,o,a,i,l],c=0;(s=new Error(t.replace(/%s/g,(function(){return u[c++]})))).name="Invariant Violation"}throw s.framesToPop=1,s}}},36808:(e,t,n)=>{var r,o;!function(a){if(void 0===(o="function"==typeof(r=a)?r.call(t,n,t,e):r)||(e.exports=o),!0,e.exports=a(),!!0){var i=window.Cookies,l=window.Cookies=a();l.noConflict=function(){return window.Cookies=i,l}}}((function(){function e(){for(var e=0,t={};e<arguments.length;e++){var n=arguments[e];for(var r in n)t[r]=n[r]}return t}function t(e){return e.replace(/(%[0-9A-Z]{2})+/g,decodeURIComponent)}return function n(r){function o(){}function a(t,n,a){if("undefined"!=typeof document){"number"==typeof(a=e({path:"/"},o.defaults,a)).expires&&(a.expires=new Date(1*new Date+864e5*a.expires)),a.expires=a.expires?a.expires.toUTCString():"";try{var i=JSON.stringify(n);/^[\{\[]/.test(i)&&(n=i)}catch(u){}n=r.write?r.write(n,t):encodeURIComponent(String(n)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent),t=encodeURIComponent(String(t)).replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent).replace(/[\(\)]/g,escape);var l="";for(var s in a)a[s]&&(l+="; "+s,!0!==a[s]&&(l+="="+a[s].split(";")[0]));return document.cookie=t+"="+n+l}}function i(e,n){if("undefined"!=typeof document){for(var o={},a=document.cookie?document.cookie.split("; "):[],i=0;i<a.length;i++){var l=a[i].split("="),s=l.slice(1).join("=");n||'"'!==s.charAt(0)||(s=s.slice(1,-1));try{var u=t(l[0]);if(s=(r.read||r)(s,u)||t(s),n)try{s=JSON.parse(s)}catch(c){}if(o[u]=s,e===u)break}catch(c){}}return e?o[e]:o}}return o.set=a,o.get=function(e){return i(e,!1)},o.getJSON=function(e){return i(e,!0)},o.remove=function(t,n){a(t,"",e(n,{expires:-1}))},o.defaults={},o.withConverter=n,o}((function(){}))}))},18552:(e,t,n)=>{var r=n(10852)(n(55639),"DataView");e.exports=r},1989:(e,t,n)=>{var r=n(51789),o=n(80401),a=n(57667),i=n(21327),l=n(81866);function s(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=o,s.prototype.get=a,s.prototype.has=i,s.prototype.set=l,e.exports=s},38407:(e,t,n)=>{var r=n(27040),o=n(14125),a=n(82117),i=n(67518),l=n(54705);function s(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=o,s.prototype.get=a,s.prototype.has=i,s.prototype.set=l,e.exports=s},57071:(e,t,n)=>{var r=n(10852)(n(55639),"Map");e.exports=r},83369:(e,t,n)=>{var r=n(24785),o=n(11285),a=n(96e3),i=n(49916),l=n(95265);function s(e){var t=-1,n=null==e?0:e.length;for(this.clear();++t<n;){var r=e[t];this.set(r[0],r[1])}}s.prototype.clear=r,s.prototype.delete=o,s.prototype.get=a,s.prototype.has=i,s.prototype.set=l,e.exports=s},53818:(e,t,n)=>{var r=n(10852)(n(55639),"Promise");e.exports=r},58525:(e,t,n)=>{var r=n(10852)(n(55639),"Set");e.exports=r},88668:(e,t,n)=>{var r=n(83369),o=n(90619),a=n(72385);function i(e){var t=-1,n=null==e?0:e.length;for(this.__data__=new r;++t<n;)this.add(e[t])}i.prototype.add=i.prototype.push=o,i.prototype.has=a,e.exports=i},46384:(e,t,n)=>{var r=n(38407),o=n(37465),a=n(63779),i=n(67599),l=n(44758),s=n(34309);function u(e){var t=this.__data__=new r(e);this.size=t.size}u.prototype.clear=o,u.prototype.delete=a,u.prototype.get=i,u.prototype.has=l,u.prototype.set=s,e.exports=u},62705:(e,t,n)=>{var r=n(55639).Symbol;e.exports=r},11149:(e,t,n)=>{var r=n(55639).Uint8Array;e.exports=r},70577:(e,t,n)=>{var r=n(10852)(n(55639),"WeakMap");e.exports=r},96874:e=>{e.exports=function(e,t,n){switch(n.length){case 0:return e.call(t);case 1:return e.call(t,n[0]);case 2:return e.call(t,n[0],n[1]);case 3:return e.call(t,n[0],n[1],n[2])}return e.apply(t,n)}},44174:e=>{e.exports=function(e,t,n,r){for(var o=-1,a=null==e?0:e.length;++o<a;){var i=e[o];t(r,i,n(i),e)}return r}},77412:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r&&!1!==t(e[n],n,e););return e}},34963:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=0,a=[];++n<r;){var i=e[n];t(i,n,e)&&(a[o++]=i)}return a}},14636:(e,t,n)=>{var r=n(22545),o=n(35694),a=n(1469),i=n(44144),l=n(65776),s=n(36719),u=Object.prototype.hasOwnProperty;e.exports=function(e,t){var n=a(e),c=!n&&o(e),d=!n&&!c&&i(e),f=!n&&!c&&!d&&s(e),p=n||c||d||f,h=p?r(e.length,String):[],m=h.length;for(var g in e)!t&&!u.call(e,g)||p&&("length"==g||d&&("offset"==g||"parent"==g)||f&&("buffer"==g||"byteLength"==g||"byteOffset"==g)||l(g,m))||h.push(g);return h}},29932:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length,o=Array(r);++n<r;)o[n]=t(e[n],n,e);return o}},62488:e=>{e.exports=function(e,t){for(var n=-1,r=t.length,o=e.length;++n<r;)e[o+n]=t[n];return e}},82908:e=>{e.exports=function(e,t){for(var n=-1,r=null==e?0:e.length;++n<r;)if(t(e[n],n,e))return!0;return!1}},34865:(e,t,n)=>{var r=n(89465),o=n(77813),a=Object.prototype.hasOwnProperty;e.exports=function(e,t,n){var i=e[t];a.call(e,t)&&o(i,n)&&(void 0!==n||t in e)||r(e,t,n)}},18470:(e,t,n)=>{var r=n(77813);e.exports=function(e,t){for(var n=e.length;n--;)if(r(e[n][0],t))return n;return-1}},81119:(e,t,n)=>{var r=n(89881);e.exports=function(e,t,n,o){return r(e,(function(e,r,a){t(o,e,n(e),a)})),o}},44037:(e,t,n)=>{var r=n(98363),o=n(3674);e.exports=function(e,t){return e&&r(t,o(t),e)}},63886:(e,t,n)=>{var r=n(98363),o=n(81704);e.exports=function(e,t){return e&&r(t,o(t),e)}},89465:(e,t,n)=>{var r=n(38777);e.exports=function(e,t,n){"__proto__"==t&&r?r(e,t,{configurable:!0,enumerable:!0,value:n,writable:!0}):e[t]=n}},85990:(e,t,n)=>{var r=n(46384),o=n(77412),a=n(34865),i=n(44037),l=n(63886),s=n(64626),u=n(278),c=n(18805),d=n(1911),f=n(58234),p=n(46904),h=n(64160),m=n(43824),g=n(29148),v=n(38517),b=n(1469),y=n(44144),w=n(56688),x=n(13218),_=n(72928),k=n(3674),E=n(81704),S="[object Arguments]",C="[object Function]",T="[object Object]",O={};O[S]=O["[object Array]"]=O["[object ArrayBuffer]"]=O["[object DataView]"]=O["[object Boolean]"]=O["[object Date]"]=O["[object Float32Array]"]=O["[object Float64Array]"]=O["[object Int8Array]"]=O["[object Int16Array]"]=O["[object Int32Array]"]=O["[object Map]"]=O["[object Number]"]=O[T]=O["[object RegExp]"]=O["[object Set]"]=O["[object String]"]=O["[object Symbol]"]=O["[object Uint8Array]"]=O["[object Uint8ClampedArray]"]=O["[object Uint16Array]"]=O["[object Uint32Array]"]=!0,O["[object Error]"]=O[C]=O["[object WeakMap]"]=!1,e.exports=function e(t,n,D,P,N,I){var A,L=1&n,R=2&n,j=4&n;if(D&&(A=N?D(t,P,N,I):D(t)),void 0!==A)return A;if(!x(t))return t;var M=b(t);if(M){if(A=m(t),!L)return u(t,A)}else{var F=h(t),B=F==C||"[object GeneratorFunction]"==F;if(y(t))return s(t,L);if(F==T||F==S||B&&!N){if(A=R||B?{}:v(t),!L)return R?d(t,l(A,t)):c(t,i(A,t))}else{if(!O[F])return N?t:{};A=g(t,F,L)}}I||(I=new r);var z=I.get(t);if(z)return z;I.set(t,A),_(t)?t.forEach((function(r){A.add(e(r,n,D,r,t,I))})):w(t)&&t.forEach((function(r,o){A.set(o,e(r,n,D,o,t,I))}));var $=M?void 0:(j?R?p:f:R?E:k)(t);return o($||t,(function(r,o){$&&(r=t[o=r]),a(A,o,e(r,n,D,o,t,I))})),A}},3118:(e,t,n)=>{var r=n(13218),o=Object.create,a=function(){function e(){}return function(t){if(!r(t))return{};if(o)return o(t);e.prototype=t;var n=new e;return e.prototype=void 0,n}}();e.exports=a},89881:(e,t,n)=>{var r=n(47816),o=n(99291)(r);e.exports=o},21078:(e,t,n)=>{var r=n(62488),o=n(37285);e.exports=function e(t,n,a,i,l){var s=-1,u=t.length;for(a||(a=o),l||(l=[]);++s<u;){var c=t[s];n>0&&a(c)?n>1?e(c,n-1,a,i,l):r(l,c):i||(l[l.length]=c)}return l}},28483:(e,t,n)=>{var r=n(25063)();e.exports=r},47816:(e,t,n)=>{var r=n(28483),o=n(3674);e.exports=function(e,t){return e&&r(e,t,o)}},97786:(e,t,n)=>{var r=n(71811),o=n(40327);e.exports=function(e,t){for(var n=0,a=(t=r(t,e)).length;null!=e&&n<a;)e=e[o(t[n++])];return n&&n==a?e:void 0}},68866:(e,t,n)=>{var r=n(62488),o=n(1469);e.exports=function(e,t,n){var a=t(e);return o(e)?a:r(a,n(e))}},44239:(e,t,n)=>{var r=n(62705),o=n(89607),a=n(2333),i=r?r.toStringTag:void 0;e.exports=function(e){return null==e?void 0===e?"[object Undefined]":"[object Null]":i&&i in Object(e)?o(e):a(e)}},13:e=>{e.exports=function(e,t){return null!=e&&t in Object(e)}},9454:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return o(e)&&"[object Arguments]"==r(e)}},90939:(e,t,n)=>{var r=n(2492),o=n(37005);e.exports=function e(t,n,a,i,l){return t===n||(null==t||null==n||!o(t)&&!o(n)?t!=t&&n!=n:r(t,n,a,i,e,l))}},2492:(e,t,n)=>{var r=n(46384),o=n(67114),a=n(18351),i=n(16096),l=n(64160),s=n(1469),u=n(44144),c=n(36719),d="[object Arguments]",f="[object Array]",p="[object Object]",h=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,m,g,v){var b=s(e),y=s(t),w=b?f:l(e),x=y?f:l(t),_=(w=w==d?p:w)==p,k=(x=x==d?p:x)==p,E=w==x;if(E&&u(e)){if(!u(t))return!1;b=!0,_=!1}if(E&&!_)return v||(v=new r),b||c(e)?o(e,t,n,m,g,v):a(e,t,w,n,m,g,v);if(!(1&n)){var S=_&&h.call(e,"__wrapped__"),C=k&&h.call(t,"__wrapped__");if(S||C){var T=S?e.value():e,O=C?t.value():t;return v||(v=new r),g(T,O,n,m,v)}}return!!E&&(v||(v=new r),i(e,t,n,m,g,v))}},25588:(e,t,n)=>{var r=n(64160),o=n(37005);e.exports=function(e){return o(e)&&"[object Map]"==r(e)}},2958:(e,t,n)=>{var r=n(46384),o=n(90939);e.exports=function(e,t,n,a){var i=n.length,l=i,s=!a;if(null==e)return!l;for(e=Object(e);i--;){var u=n[i];if(s&&u[2]?u[1]!==e[u[0]]:!(u[0]in e))return!1}for(;++i<l;){var c=(u=n[i])[0],d=e[c],f=u[1];if(s&&u[2]){if(void 0===d&&!(c in e))return!1}else{var p=new r;if(a)var h=a(d,f,c,e,t,p);if(!(void 0===h?o(f,d,3,a,p):h))return!1}}return!0}},28458:(e,t,n)=>{var r=n(23560),o=n(15346),a=n(13218),i=n(80346),l=/^\[object .+?Constructor\]$/,s=Function.prototype,u=Object.prototype,c=s.toString,d=u.hasOwnProperty,f=RegExp("^"+c.call(d).replace(/[\\^$.*+?()[\]{}|]/g,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");e.exports=function(e){return!(!a(e)||o(e))&&(r(e)?f:l).test(i(e))}},29221:(e,t,n)=>{var r=n(64160),o=n(37005);e.exports=function(e){return o(e)&&"[object Set]"==r(e)}},38749:(e,t,n)=>{var r=n(44239),o=n(41780),a=n(37005),i={};i["[object Float32Array]"]=i["[object Float64Array]"]=i["[object Int8Array]"]=i["[object Int16Array]"]=i["[object Int32Array]"]=i["[object Uint8Array]"]=i["[object Uint8ClampedArray]"]=i["[object Uint16Array]"]=i["[object Uint32Array]"]=!0,i["[object Arguments]"]=i["[object Array]"]=i["[object ArrayBuffer]"]=i["[object Boolean]"]=i["[object DataView]"]=i["[object Date]"]=i["[object Error]"]=i["[object Function]"]=i["[object Map]"]=i["[object Number]"]=i["[object Object]"]=i["[object RegExp]"]=i["[object Set]"]=i["[object String]"]=i["[object WeakMap]"]=!1,e.exports=function(e){return a(e)&&o(e.length)&&!!i[r(e)]}},67206:(e,t,n)=>{var r=n(91573),o=n(16432),a=n(6557),i=n(1469),l=n(39601);e.exports=function(e){return"function"==typeof e?e:null==e?a:"object"==typeof e?i(e)?o(e[0],e[1]):r(e):l(e)}},280:(e,t,n)=>{var r=n(25726),o=n(86916),a=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return o(e);var t=[];for(var n in Object(e))a.call(e,n)&&"constructor"!=n&&t.push(n);return t}},10313:(e,t,n)=>{var r=n(13218),o=n(25726),a=n(33498),i=Object.prototype.hasOwnProperty;e.exports=function(e){if(!r(e))return a(e);var t=o(e),n=[];for(var l in e)("constructor"!=l||!t&&i.call(e,l))&&n.push(l);return n}},91573:(e,t,n)=>{var r=n(2958),o=n(1499),a=n(42634);e.exports=function(e){var t=o(e);return 1==t.length&&t[0][2]?a(t[0][0],t[0][1]):function(n){return n===e||r(n,e,t)}}},16432:(e,t,n)=>{var r=n(90939),o=n(27361),a=n(79095),i=n(15403),l=n(89162),s=n(42634),u=n(40327);e.exports=function(e,t){return i(e)&&l(t)?s(u(e),t):function(n){var i=o(n,e);return void 0===i&&i===t?a(n,e):r(t,i,3)}}},40371:e=>{e.exports=function(e){return function(t){return null==t?void 0:t[e]}}},79152:(e,t,n)=>{var r=n(97786);e.exports=function(e){return function(t){return r(t,e)}}},56560:(e,t,n)=>{var r=n(75703),o=n(38777),a=n(6557),i=o?function(e,t){return o(e,"toString",{configurable:!0,enumerable:!1,value:r(t),writable:!0})}:a;e.exports=i},14259:e=>{e.exports=function(e,t,n){var r=-1,o=e.length;t<0&&(t=-t>o?0:o+t),(n=n>o?o:n)<0&&(n+=o),o=t>n?0:n-t>>>0,t>>>=0;for(var a=Array(o);++r<o;)a[r]=e[r+t];return a}},22545:e=>{e.exports=function(e,t){for(var n=-1,r=Array(e);++n<e;)r[n]=t(n);return r}},80531:(e,t,n)=>{var r=n(62705),o=n(29932),a=n(1469),i=n(33448),l=r?r.prototype:void 0,s=l?l.toString:void 0;e.exports=function e(t){if("string"==typeof t)return t;if(a(t))return o(t,e)+"";if(i(t))return s?s.call(t):"";var n=t+"";return"0"==n&&1/t==-Infinity?"-0":n}},7518:e=>{e.exports=function(e){return function(t){return e(t)}}},57406:(e,t,n)=>{var r=n(71811),o=n(10928),a=n(40292),i=n(40327);e.exports=function(e,t){return t=r(t,e),null==(e=a(e,t))||delete e[i(o(t))]}},74757:e=>{e.exports=function(e,t){return e.has(t)}},71811:(e,t,n)=>{var r=n(1469),o=n(15403),a=n(55514),i=n(79833);e.exports=function(e,t){return r(e)?e:o(e,t)?[e]:a(i(e))}},74318:(e,t,n)=>{var r=n(11149);e.exports=function(e){var t=new e.constructor(e.byteLength);return new r(t).set(new r(e)),t}},64626:(e,t,n)=>{e=n.nmd(e);var r=n(55639),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,i=a&&a.exports===o?r.Buffer:void 0,l=i?i.allocUnsafe:void 0;e.exports=function(e,t){if(t)return e.slice();var n=e.length,r=l?l(n):new e.constructor(n);return e.copy(r),r}},57157:(e,t,n)=>{var r=n(74318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.byteLength)}},93147:e=>{var t=/\w*$/;e.exports=function(e){var n=new e.constructor(e.source,t.exec(e));return n.lastIndex=e.lastIndex,n}},40419:(e,t,n)=>{var r=n(62705),o=r?r.prototype:void 0,a=o?o.valueOf:void 0;e.exports=function(e){return a?Object(a.call(e)):{}}},77133:(e,t,n)=>{var r=n(74318);e.exports=function(e,t){var n=t?r(e.buffer):e.buffer;return new e.constructor(n,e.byteOffset,e.length)}},278:e=>{e.exports=function(e,t){var n=-1,r=e.length;for(t||(t=Array(r));++n<r;)t[n]=e[n];return t}},98363:(e,t,n)=>{var r=n(34865),o=n(89465);e.exports=function(e,t,n,a){var i=!n;n||(n={});for(var l=-1,s=t.length;++l<s;){var u=t[l],c=a?a(n[u],e[u],u,n,e):void 0;void 0===c&&(c=e[u]),i?o(n,u,c):r(n,u,c)}return n}},18805:(e,t,n)=>{var r=n(98363),o=n(99551);e.exports=function(e,t){return r(e,o(e),t)}},1911:(e,t,n)=>{var r=n(98363),o=n(51442);e.exports=function(e,t){return r(e,o(e),t)}},14429:(e,t,n)=>{var r=n(55639)["__core-js_shared__"];e.exports=r},55189:(e,t,n)=>{var r=n(44174),o=n(81119),a=n(67206),i=n(1469);e.exports=function(e,t){return function(n,l){var s=i(n)?r:o,u=t?t():{};return s(n,e,a(l,2),u)}}},99291:(e,t,n)=>{var r=n(98612);e.exports=function(e,t){return function(n,o){if(null==n)return n;if(!r(n))return e(n,o);for(var a=n.length,i=t?a:-1,l=Object(n);(t?i--:++i<a)&&!1!==o(l[i],i,l););return n}}},25063:e=>{e.exports=function(e){return function(t,n,r){for(var o=-1,a=Object(t),i=r(t),l=i.length;l--;){var s=i[e?l:++o];if(!1===n(a[s],s,a))break}return t}}},60696:(e,t,n)=>{var r=n(68630);e.exports=function(e){return r(e)?void 0:e}},38777:(e,t,n)=>{var r=n(10852),o=function(){try{var e=r(Object,"defineProperty");return e({},"",{}),e}catch(t){}}();e.exports=o},67114:(e,t,n)=>{var r=n(88668),o=n(82908),a=n(74757);e.exports=function(e,t,n,i,l,s){var u=1&n,c=e.length,d=t.length;if(c!=d&&!(u&&d>c))return!1;var f=s.get(e),p=s.get(t);if(f&&p)return f==t&&p==e;var h=-1,m=!0,g=2&n?new r:void 0;for(s.set(e,t),s.set(t,e);++h<c;){var v=e[h],b=t[h];if(i)var y=u?i(b,v,h,t,e,s):i(v,b,h,e,t,s);if(void 0!==y){if(y)continue;m=!1;break}if(g){if(!o(t,(function(e,t){if(!a(g,t)&&(v===e||l(v,e,n,i,s)))return g.push(t)}))){m=!1;break}}else if(v!==b&&!l(v,b,n,i,s)){m=!1;break}}return s.delete(e),s.delete(t),m}},18351:(e,t,n)=>{var r=n(62705),o=n(11149),a=n(77813),i=n(67114),l=n(68776),s=n(21814),u=r?r.prototype:void 0,c=u?u.valueOf:void 0;e.exports=function(e,t,n,r,u,d,f){switch(n){case"[object DataView]":if(e.byteLength!=t.byteLength||e.byteOffset!=t.byteOffset)return!1;e=e.buffer,t=t.buffer;case"[object ArrayBuffer]":return!(e.byteLength!=t.byteLength||!d(new o(e),new o(t)));case"[object Boolean]":case"[object Date]":case"[object Number]":return a(+e,+t);case"[object Error]":return e.name==t.name&&e.message==t.message;case"[object RegExp]":case"[object String]":return e==t+"";case"[object Map]":var p=l;case"[object Set]":var h=1&r;if(p||(p=s),e.size!=t.size&&!h)return!1;var m=f.get(e);if(m)return m==t;r|=2,f.set(e,t);var g=i(p(e),p(t),r,u,d,f);return f.delete(e),g;case"[object Symbol]":if(c)return c.call(e)==c.call(t)}return!1}},16096:(e,t,n)=>{var r=n(58234),o=Object.prototype.hasOwnProperty;e.exports=function(e,t,n,a,i,l){var s=1&n,u=r(e),c=u.length;if(c!=r(t).length&&!s)return!1;for(var d=c;d--;){var f=u[d];if(!(s?f in t:o.call(t,f)))return!1}var p=l.get(e),h=l.get(t);if(p&&h)return p==t&&h==e;var m=!0;l.set(e,t),l.set(t,e);for(var g=s;++d<c;){var v=e[f=u[d]],b=t[f];if(a)var y=s?a(b,v,f,t,e,l):a(v,b,f,e,t,l);if(!(void 0===y?v===b||i(v,b,n,a,l):y)){m=!1;break}g||(g="constructor"==f)}if(m&&!g){var w=e.constructor,x=t.constructor;w==x||!("constructor"in e)||!("constructor"in t)||"function"==typeof w&&w instanceof w&&"function"==typeof x&&x instanceof x||(m=!1)}return l.delete(e),l.delete(t),m}},99021:(e,t,n)=>{var r=n(85564),o=n(45357),a=n(30061);e.exports=function(e){return a(o(e,void 0,r),e+"")}},31957:(e,t,n)=>{var r="object"==typeof n.g&&n.g&&n.g.Object===Object&&n.g;e.exports=r},58234:(e,t,n)=>{var r=n(68866),o=n(99551),a=n(3674);e.exports=function(e){return r(e,a,o)}},46904:(e,t,n)=>{var r=n(68866),o=n(51442),a=n(81704);e.exports=function(e){return r(e,a,o)}},45050:(e,t,n)=>{var r=n(37019);e.exports=function(e,t){var n=e.__data__;return r(t)?n["string"==typeof t?"string":"hash"]:n.map}},1499:(e,t,n)=>{var r=n(89162),o=n(3674);e.exports=function(e){for(var t=o(e),n=t.length;n--;){var a=t[n],i=e[a];t[n]=[a,i,r(i)]}return t}},10852:(e,t,n)=>{var r=n(28458),o=n(47801);e.exports=function(e,t){var n=o(e,t);return r(n)?n:void 0}},85924:(e,t,n)=>{var r=n(5569)(Object.getPrototypeOf,Object);e.exports=r},89607:(e,t,n)=>{var r=n(62705),o=Object.prototype,a=o.hasOwnProperty,i=o.toString,l=r?r.toStringTag:void 0;e.exports=function(e){var t=a.call(e,l),n=e[l];try{e[l]=void 0;var r=!0}catch(s){}var o=i.call(e);return r&&(t?e[l]=n:delete e[l]),o}},99551:(e,t,n)=>{var r=n(34963),o=n(70479),a=Object.prototype.propertyIsEnumerable,i=Object.getOwnPropertySymbols,l=i?function(e){return null==e?[]:(e=Object(e),r(i(e),(function(t){return a.call(e,t)})))}:o;e.exports=l},51442:(e,t,n)=>{var r=n(62488),o=n(85924),a=n(99551),i=n(70479),l=Object.getOwnPropertySymbols?function(e){for(var t=[];e;)r(t,a(e)),e=o(e);return t}:i;e.exports=l},64160:(e,t,n)=>{var r=n(18552),o=n(57071),a=n(53818),i=n(58525),l=n(70577),s=n(44239),u=n(80346),c="[object Map]",d="[object Promise]",f="[object Set]",p="[object WeakMap]",h="[object DataView]",m=u(r),g=u(o),v=u(a),b=u(i),y=u(l),w=s;(r&&w(new r(new ArrayBuffer(1)))!=h||o&&w(new o)!=c||a&&w(a.resolve())!=d||i&&w(new i)!=f||l&&w(new l)!=p)&&(w=function(e){var t=s(e),n="[object Object]"==t?e.constructor:void 0,r=n?u(n):"";if(r)switch(r){case m:return h;case g:return c;case v:return d;case b:return f;case y:return p}return t}),e.exports=w},47801:e=>{e.exports=function(e,t){return null==e?void 0:e[t]}},222:(e,t,n)=>{var r=n(71811),o=n(35694),a=n(1469),i=n(65776),l=n(41780),s=n(40327);e.exports=function(e,t,n){for(var u=-1,c=(t=r(t,e)).length,d=!1;++u<c;){var f=s(t[u]);if(!(d=null!=e&&n(e,f)))break;e=e[f]}return d||++u!=c?d:!!(c=null==e?0:e.length)&&l(c)&&i(f,c)&&(a(e)||o(e))}},51789:(e,t,n)=>{var r=n(94536);e.exports=function(){this.__data__=r?r(null):{},this.size=0}},80401:e=>{e.exports=function(e){var t=this.has(e)&&delete this.__data__[e];return this.size-=t?1:0,t}},57667:(e,t,n)=>{var r=n(94536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;if(r){var n=t[e];return"__lodash_hash_undefined__"===n?void 0:n}return o.call(t,e)?t[e]:void 0}},21327:(e,t,n)=>{var r=n(94536),o=Object.prototype.hasOwnProperty;e.exports=function(e){var t=this.__data__;return r?void 0!==t[e]:o.call(t,e)}},81866:(e,t,n)=>{var r=n(94536);e.exports=function(e,t){var n=this.__data__;return this.size+=this.has(e)?0:1,n[e]=r&&void 0===t?"__lodash_hash_undefined__":t,this}},43824:e=>{var t=Object.prototype.hasOwnProperty;e.exports=function(e){var n=e.length,r=new e.constructor(n);return n&&"string"==typeof e[0]&&t.call(e,"index")&&(r.index=e.index,r.input=e.input),r}},29148:(e,t,n)=>{var r=n(74318),o=n(57157),a=n(93147),i=n(40419),l=n(77133);e.exports=function(e,t,n){var s=e.constructor;switch(t){case"[object ArrayBuffer]":return r(e);case"[object Boolean]":case"[object Date]":return new s(+e);case"[object DataView]":return o(e,n);case"[object Float32Array]":case"[object Float64Array]":case"[object Int8Array]":case"[object Int16Array]":case"[object Int32Array]":case"[object Uint8Array]":case"[object Uint8ClampedArray]":case"[object Uint16Array]":case"[object Uint32Array]":return l(e,n);case"[object Map]":case"[object Set]":return new s;case"[object Number]":case"[object String]":return new s(e);case"[object RegExp]":return a(e);case"[object Symbol]":return i(e)}}},38517:(e,t,n)=>{var r=n(3118),o=n(85924),a=n(25726);e.exports=function(e){return"function"!=typeof e.constructor||a(e)?{}:r(o(e))}},37285:(e,t,n)=>{var r=n(62705),o=n(35694),a=n(1469),i=r?r.isConcatSpreadable:void 0;e.exports=function(e){return a(e)||o(e)||!!(i&&e&&e[i])}},65776:e=>{var t=/^(?:0|[1-9]\d*)$/;e.exports=function(e,n){var r=typeof e;return!!(n=null==n?9007199254740991:n)&&("number"==r||"symbol"!=r&&t.test(e))&&e>-1&&e%1==0&&e<n}},15403:(e,t,n)=>{var r=n(1469),o=n(33448),a=/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,i=/^\w*$/;e.exports=function(e,t){if(r(e))return!1;var n=typeof e;return!("number"!=n&&"symbol"!=n&&"boolean"!=n&&null!=e&&!o(e))||(i.test(e)||!a.test(e)||null!=t&&e in Object(t))}},37019:e=>{e.exports=function(e){var t=typeof e;return"string"==t||"number"==t||"symbol"==t||"boolean"==t?"__proto__"!==e:null===e}},15346:(e,t,n)=>{var r,o=n(14429),a=(r=/[^.]+$/.exec(o&&o.keys&&o.keys.IE_PROTO||""))?"Symbol(src)_1."+r:"";e.exports=function(e){return!!a&&a in e}},25726:e=>{var t=Object.prototype;e.exports=function(e){var n=e&&e.constructor;return e===("function"==typeof n&&n.prototype||t)}},89162:(e,t,n)=>{var r=n(13218);e.exports=function(e){return e==e&&!r(e)}},27040:e=>{e.exports=function(){this.__data__=[],this.size=0}},14125:(e,t,n)=>{var r=n(18470),o=Array.prototype.splice;e.exports=function(e){var t=this.__data__,n=r(t,e);return!(n<0)&&(n==t.length-1?t.pop():o.call(t,n,1),--this.size,!0)}},82117:(e,t,n)=>{var r=n(18470);e.exports=function(e){var t=this.__data__,n=r(t,e);return n<0?void 0:t[n][1]}},67518:(e,t,n)=>{var r=n(18470);e.exports=function(e){return r(this.__data__,e)>-1}},54705:(e,t,n)=>{var r=n(18470);e.exports=function(e,t){var n=this.__data__,o=r(n,e);return o<0?(++this.size,n.push([e,t])):n[o][1]=t,this}},24785:(e,t,n)=>{var r=n(1989),o=n(38407),a=n(57071);e.exports=function(){this.size=0,this.__data__={hash:new r,map:new(a||o),string:new r}}},11285:(e,t,n)=>{var r=n(45050);e.exports=function(e){var t=r(this,e).delete(e);return this.size-=t?1:0,t}},96e3:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).get(e)}},49916:(e,t,n)=>{var r=n(45050);e.exports=function(e){return r(this,e).has(e)}},95265:(e,t,n)=>{var r=n(45050);e.exports=function(e,t){var n=r(this,e),o=n.size;return n.set(e,t),this.size+=n.size==o?0:1,this}},68776:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e,r){n[++t]=[r,e]})),n}},42634:e=>{e.exports=function(e,t){return function(n){return null!=n&&(n[e]===t&&(void 0!==t||e in Object(n)))}}},24523:(e,t,n)=>{var r=n(88306);e.exports=function(e){var t=r(e,(function(e){return 500===n.size&&n.clear(),e})),n=t.cache;return t}},94536:(e,t,n)=>{var r=n(10852)(Object,"create");e.exports=r},86916:(e,t,n)=>{var r=n(5569)(Object.keys,Object);e.exports=r},33498:e=>{e.exports=function(e){var t=[];if(null!=e)for(var n in Object(e))t.push(n);return t}},31167:(e,t,n)=>{e=n.nmd(e);var r=n(31957),o=t&&!t.nodeType&&t,a=o&&e&&!e.nodeType&&e,i=a&&a.exports===o&&r.process,l=function(){try{var e=a&&a.require&&a.require("util").types;return e||i&&i.binding&&i.binding("util")}catch(t){}}();e.exports=l},2333:e=>{var t=Object.prototype.toString;e.exports=function(e){return t.call(e)}},5569:e=>{e.exports=function(e,t){return function(n){return e(t(n))}}},45357:(e,t,n)=>{var r=n(96874),o=Math.max;e.exports=function(e,t,n){return t=o(void 0===t?e.length-1:t,0),function(){for(var a=arguments,i=-1,l=o(a.length-t,0),s=Array(l);++i<l;)s[i]=a[t+i];i=-1;for(var u=Array(t+1);++i<t;)u[i]=a[i];return u[t]=n(s),r(e,this,u)}}},40292:(e,t,n)=>{var r=n(97786),o=n(14259);e.exports=function(e,t){return t.length<2?e:r(e,o(t,0,-1))}},55639:(e,t,n)=>{var r=n(31957),o="object"==typeof self&&self&&self.Object===Object&&self,a=r||o||Function("return this")();e.exports=a},90619:e=>{e.exports=function(e){return this.__data__.set(e,"__lodash_hash_undefined__"),this}},72385:e=>{e.exports=function(e){return this.__data__.has(e)}},21814:e=>{e.exports=function(e){var t=-1,n=Array(e.size);return e.forEach((function(e){n[++t]=e})),n}},30061:(e,t,n)=>{var r=n(56560),o=n(21275)(r);e.exports=o},21275:e=>{var t=Date.now;e.exports=function(e){var n=0,r=0;return function(){var o=t(),a=16-(o-r);if(r=o,a>0){if(++n>=800)return arguments[0]}else n=0;return e.apply(void 0,arguments)}}},37465:(e,t,n)=>{var r=n(38407);e.exports=function(){this.__data__=new r,this.size=0}},63779:e=>{e.exports=function(e){var t=this.__data__,n=t.delete(e);return this.size=t.size,n}},67599:e=>{e.exports=function(e){return this.__data__.get(e)}},44758:e=>{e.exports=function(e){return this.__data__.has(e)}},34309:(e,t,n)=>{var r=n(38407),o=n(57071),a=n(83369);e.exports=function(e,t){var n=this.__data__;if(n instanceof r){var i=n.__data__;if(!o||i.length<199)return i.push([e,t]),this.size=++n.size,this;n=this.__data__=new a(i)}return n.set(e,t),this.size=n.size,this}},55514:(e,t,n)=>{var r=n(24523),o=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g,a=/\\(\\)?/g,i=r((function(e){var t=[];return 46===e.charCodeAt(0)&&t.push(""),e.replace(o,(function(e,n,r,o){t.push(r?o.replace(a,"$1"):n||e)})),t}));e.exports=i},40327:(e,t,n)=>{var r=n(33448);e.exports=function(e){if("string"==typeof e||r(e))return e;var t=e+"";return"0"==t&&1/e==-Infinity?"-0":t}},80346:e=>{var t=Function.prototype.toString;e.exports=function(e){if(null!=e){try{return t.call(e)}catch(n){}try{return e+""}catch(n){}}return""}},75703:e=>{e.exports=function(e){return function(){return e}}},77813:e=>{e.exports=function(e,t){return e===t||e!=e&&t!=t}},85564:(e,t,n)=>{var r=n(21078);e.exports=function(e){return(null==e?0:e.length)?r(e,1):[]}},27361:(e,t,n)=>{var r=n(97786);e.exports=function(e,t,n){var o=null==e?void 0:r(e,t);return void 0===o?n:o}},7739:(e,t,n)=>{var r=n(89465),o=n(55189),a=Object.prototype.hasOwnProperty,i=o((function(e,t,n){a.call(e,n)?e[n].push(t):r(e,n,[t])}));e.exports=i},79095:(e,t,n)=>{var r=n(13),o=n(222);e.exports=function(e,t){return null!=e&&o(e,t,r)}},6557:e=>{e.exports=function(e){return e}},35694:(e,t,n)=>{var r=n(9454),o=n(37005),a=Object.prototype,i=a.hasOwnProperty,l=a.propertyIsEnumerable,s=r(function(){return arguments}())?r:function(e){return o(e)&&i.call(e,"callee")&&!l.call(e,"callee")};e.exports=s},1469:e=>{var t=Array.isArray;e.exports=t},98612:(e,t,n)=>{var r=n(23560),o=n(41780);e.exports=function(e){return null!=e&&o(e.length)&&!r(e)}},44144:(e,t,n)=>{e=n.nmd(e);var r=n(55639),o=n(95062),a=t&&!t.nodeType&&t,i=a&&e&&!e.nodeType&&e,l=i&&i.exports===a?r.Buffer:void 0,s=(l?l.isBuffer:void 0)||o;e.exports=s},23560:(e,t,n)=>{var r=n(44239),o=n(13218);e.exports=function(e){if(!o(e))return!1;var t=r(e);return"[object Function]"==t||"[object GeneratorFunction]"==t||"[object AsyncFunction]"==t||"[object Proxy]"==t}},41780:e=>{e.exports=function(e){return"number"==typeof e&&e>-1&&e%1==0&&e<=9007199254740991}},56688:(e,t,n)=>{var r=n(25588),o=n(7518),a=n(31167),i=a&&a.isMap,l=i?o(i):r;e.exports=l},13218:e=>{e.exports=function(e){var t=typeof e;return null!=e&&("object"==t||"function"==t)}},37005:e=>{e.exports=function(e){return null!=e&&"object"==typeof e}},68630:(e,t,n)=>{var r=n(44239),o=n(85924),a=n(37005),i=Function.prototype,l=Object.prototype,s=i.toString,u=l.hasOwnProperty,c=s.call(Object);e.exports=function(e){if(!a(e)||"[object Object]"!=r(e))return!1;var t=o(e);if(null===t)return!0;var n=u.call(t,"constructor")&&t.constructor;return"function"==typeof n&&n instanceof n&&s.call(n)==c}},72928:(e,t,n)=>{var r=n(29221),o=n(7518),a=n(31167),i=a&&a.isSet,l=i?o(i):r;e.exports=l},33448:(e,t,n)=>{var r=n(44239),o=n(37005);e.exports=function(e){return"symbol"==typeof e||o(e)&&"[object Symbol]"==r(e)}},36719:(e,t,n)=>{var r=n(38749),o=n(7518),a=n(31167),i=a&&a.isTypedArray,l=i?o(i):r;e.exports=l},3674:(e,t,n)=>{var r=n(14636),o=n(280),a=n(98612);e.exports=function(e){return a(e)?r(e):o(e)}},81704:(e,t,n)=>{var r=n(14636),o=n(10313),a=n(98612);e.exports=function(e){return a(e)?r(e,!0):o(e)}},10928:e=>{e.exports=function(e){var t=null==e?0:e.length;return t?e[t-1]:void 0}},88306:(e,t,n)=>{var r=n(83369);function o(e,t){if("function"!=typeof e||null!=t&&"function"!=typeof t)throw new TypeError("Expected a function");var n=function(){var r=arguments,o=t?t.apply(this,r):r[0],a=n.cache;if(a.has(o))return a.get(o);var i=e.apply(this,r);return n.cache=a.set(o,i)||a,i};return n.cache=new(o.Cache||r),n}o.Cache=r,e.exports=o},57557:(e,t,n)=>{var r=n(29932),o=n(85990),a=n(57406),i=n(71811),l=n(98363),s=n(60696),u=n(99021),c=n(46904),d=u((function(e,t){var n={};if(null==e)return n;var u=!1;t=r(t,(function(t){return t=i(t,e),u||(u=t.length>1),t})),l(e,c(e),n),u&&(n=o(n,7,s));for(var d=t.length;d--;)a(n,t[d]);return n}));e.exports=d},39601:(e,t,n)=>{var r=n(40371),o=n(79152),a=n(15403),i=n(40327);e.exports=function(e){return a(e)?r(i(e)):o(e)}},70479:e=>{e.exports=function(){return[]}},95062:e=>{e.exports=function(){return!1}},79833:(e,t,n)=>{var r=n(80531);e.exports=function(e){return null==e?"":r(e)}},31336:(e,t,n)=>{var r,o;!function(){var a,i,l,s,u,c,d,f,p,h,m,g,v,b,y,w,x,_,k,E,S,C,T,O,D,P,N=function(e){var t=new N.Builder;return t.pipeline.add(N.trimmer,N.stopWordFilter,N.stemmer),t.searchPipeline.add(N.stemmer),e.call(t,t),t.build()};N.version="2.3.9",N.utils={},N.utils.warn=(a=this,function(e){a.console&&console.warn&&console.warn(e)}),N.utils.asString=function(e){return null==e?"":e.toString()},N.utils.clone=function(e){if(null==e)return e;for(var t=Object.create(null),n=Object.keys(e),r=0;r<n.length;r++){var o=n[r],a=e[o];if(Array.isArray(a))t[o]=a.slice();else{if("string"!=typeof a&&"number"!=typeof a&&"boolean"!=typeof a)throw new TypeError("clone is not deep and does not support nested objects");t[o]=a}}return t},N.FieldRef=function(e,t,n){this.docRef=e,this.fieldName=t,this._stringValue=n},N.FieldRef.joiner="/",N.FieldRef.fromString=function(e){var t=e.indexOf(N.FieldRef.joiner);if(-1===t)throw"malformed field ref string";var n=e.slice(0,t),r=e.slice(t+1);return new N.FieldRef(r,n,e)},N.FieldRef.prototype.toString=function(){return null==this._stringValue&&(this._stringValue=this.fieldName+N.FieldRef.joiner+this.docRef),this._stringValue},N.Set=function(e){if(this.elements=Object.create(null),e){this.length=e.length;for(var t=0;t<this.length;t++)this.elements[e[t]]=!0}else this.length=0},N.Set.complete={intersect:function(e){return e},union:function(){return this},contains:function(){return!0}},N.Set.empty={intersect:function(){return this},union:function(e){return e},contains:function(){return!1}},N.Set.prototype.contains=function(e){return!!this.elements[e]},N.Set.prototype.intersect=function(e){var t,n,r,o=[];if(e===N.Set.complete)return this;if(e===N.Set.empty)return e;this.length<e.length?(t=this,n=e):(t=e,n=this),r=Object.keys(t.elements);for(var a=0;a<r.length;a++){var i=r[a];i in n.elements&&o.push(i)}return new N.Set(o)},N.Set.prototype.union=function(e){return e===N.Set.complete?N.Set.complete:e===N.Set.empty?this:new N.Set(Object.keys(this.elements).concat(Object.keys(e.elements)))},N.idf=function(e,t){var n=0;for(var r in e)"_index"!=r&&(n+=Object.keys(e[r]).length);var o=(t-n+.5)/(n+.5);return Math.log(1+Math.abs(o))},N.Token=function(e,t){this.str=e||"",this.metadata=t||{}},N.Token.prototype.toString=function(){return this.str},N.Token.prototype.update=function(e){return this.str=e(this.str,this.metadata),this},N.Token.prototype.clone=function(e){return e=e||function(e){return e},new N.Token(e(this.str,this.metadata),this.metadata)},N.tokenizer=function(e,t){if(null==e||null==e)return[];if(Array.isArray(e))return e.map((function(e){return new N.Token(N.utils.asString(e).toLowerCase(),N.utils.clone(t))}));for(var n=e.toString().toLowerCase(),r=n.length,o=[],a=0,i=0;a<=r;a++){var l=a-i;if(n.charAt(a).match(N.tokenizer.separator)||a==r){if(l>0){var s=N.utils.clone(t)||{};s.position=[i,l],s.index=o.length,o.push(new N.Token(n.slice(i,a),s))}i=a+1}}return o},N.tokenizer.separator=/[\s\-]+/,N.Pipeline=function(){this._stack=[]},N.Pipeline.registeredFunctions=Object.create(null),N.Pipeline.registerFunction=function(e,t){t in this.registeredFunctions&&N.utils.warn("Overwriting existing registered function: "+t),e.label=t,N.Pipeline.registeredFunctions[e.label]=e},N.Pipeline.warnIfFunctionNotRegistered=function(e){e.label&&e.label in this.registeredFunctions||N.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},N.Pipeline.load=function(e){var t=new N.Pipeline;return e.forEach((function(e){var n=N.Pipeline.registeredFunctions[e];if(!n)throw new Error("Cannot load unregistered function: "+e);t.add(n)})),t},N.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach((function(e){N.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)}),this)},N.Pipeline.prototype.after=function(e,t){N.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");n+=1,this._stack.splice(n,0,t)},N.Pipeline.prototype.before=function(e,t){N.Pipeline.warnIfFunctionNotRegistered(t);var n=this._stack.indexOf(e);if(-1==n)throw new Error("Cannot find existingFn");this._stack.splice(n,0,t)},N.Pipeline.prototype.remove=function(e){var t=this._stack.indexOf(e);-1!=t&&this._stack.splice(t,1)},N.Pipeline.prototype.run=function(e){for(var t=this._stack.length,n=0;n<t;n++){for(var r=this._stack[n],o=[],a=0;a<e.length;a++){var i=r(e[a],a,e);if(null!=i&&""!==i)if(Array.isArray(i))for(var l=0;l<i.length;l++)o.push(i[l]);else o.push(i)}e=o}return e},N.Pipeline.prototype.runString=function(e,t){var n=new N.Token(e,t);return this.run([n]).map((function(e){return e.toString()}))},N.Pipeline.prototype.reset=function(){this._stack=[]},N.Pipeline.prototype.toJSON=function(){return this._stack.map((function(e){return N.Pipeline.warnIfFunctionNotRegistered(e),e.label}))},N.Vector=function(e){this._magnitude=0,this.elements=e||[]},N.Vector.prototype.positionForIndex=function(e){if(0==this.elements.length)return 0;for(var t=0,n=this.elements.length/2,r=n-t,o=Math.floor(r/2),a=this.elements[2*o];r>1&&(a<e&&(t=o),a>e&&(n=o),a!=e);)r=n-t,o=t+Math.floor(r/2),a=this.elements[2*o];return a==e||a>e?2*o:a<e?2*(o+1):void 0},N.Vector.prototype.insert=function(e,t){this.upsert(e,t,(function(){throw"duplicate index"}))},N.Vector.prototype.upsert=function(e,t,n){this._magnitude=0;var r=this.positionForIndex(e);this.elements[r]==e?this.elements[r+1]=n(this.elements[r+1],t):this.elements.splice(r,0,e,t)},N.Vector.prototype.magnitude=function(){if(this._magnitude)return this._magnitude;for(var e=0,t=this.elements.length,n=1;n<t;n+=2){var r=this.elements[n];e+=r*r}return this._magnitude=Math.sqrt(e)},N.Vector.prototype.dot=function(e){for(var t=0,n=this.elements,r=e.elements,o=n.length,a=r.length,i=0,l=0,s=0,u=0;s<o&&u<a;)(i=n[s])<(l=r[u])?s+=2:i>l?u+=2:i==l&&(t+=n[s+1]*r[u+1],s+=2,u+=2);return t},N.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},N.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),t=1,n=0;t<this.elements.length;t+=2,n++)e[n]=this.elements[t];return e},N.Vector.prototype.toJSON=function(){return this.elements},N.stemmer=(i={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},l={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},s="[aeiouy]",u="[^aeiou][^aeiouy]*",c=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),d=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*[aeiouy][aeiou]*[^aeiou][^aeiouy]*"),f=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy][aeiou]*[^aeiou][^aeiouy]*([aeiouy][aeiou]*)?$"),p=new RegExp("^([^aeiou][^aeiouy]*)?[aeiouy]"),h=/^(.+?)(ss|i)es$/,m=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,v=/^(.+?)(ed|ing)$/,b=/.$/,y=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),x=new RegExp("^"+u+s+"[^aeiouwxy]$"),_=/^(.+?[^aeiou])y$/,k=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,S=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,C=/^(.+?)(s|t)(ion)$/,T=/^(.+?)e$/,O=/ll$/,D=new RegExp("^"+u+s+"[^aeiouwxy]$"),P=function(e){var t,n,r,o,a,s,u;if(e.length<3)return e;if("y"==(r=e.substr(0,1))&&(e=r.toUpperCase()+e.substr(1)),a=m,(o=h).test(e)?e=e.replace(o,"$1$2"):a.test(e)&&(e=e.replace(a,"$1$2")),a=v,(o=g).test(e)){var P=o.exec(e);(o=c).test(P[1])&&(o=b,e=e.replace(o,""))}else a.test(e)&&(t=(P=a.exec(e))[1],(a=p).test(t)&&(s=w,u=x,(a=y).test(e=t)?e+="e":s.test(e)?(o=b,e=e.replace(o,"")):u.test(e)&&(e+="e")));return(o=_).test(e)&&(e=(t=(P=o.exec(e))[1])+"i"),(o=k).test(e)&&(t=(P=o.exec(e))[1],n=P[2],(o=c).test(t)&&(e=t+i[n])),(o=E).test(e)&&(t=(P=o.exec(e))[1],n=P[2],(o=c).test(t)&&(e=t+l[n])),a=C,(o=S).test(e)?(t=(P=o.exec(e))[1],(o=d).test(t)&&(e=t)):a.test(e)&&(t=(P=a.exec(e))[1]+P[2],(a=d).test(t)&&(e=t)),(o=T).test(e)&&(t=(P=o.exec(e))[1],a=f,s=D,((o=d).test(t)||a.test(t)&&!s.test(t))&&(e=t)),a=d,(o=O).test(e)&&a.test(e)&&(o=b,e=e.replace(o,"")),"y"==r&&(e=r.toLowerCase()+e.substr(1)),e},function(e){return e.update(P)}),N.Pipeline.registerFunction(N.stemmer,"stemmer"),N.generateStopWordFilter=function(e){var t=e.reduce((function(e,t){return e[t]=t,e}),{});return function(e){if(e&&t[e.toString()]!==e.toString())return e}},N.stopWordFilter=N.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),N.Pipeline.registerFunction(N.stopWordFilter,"stopWordFilter"),N.trimmer=function(e){return e.update((function(e){return e.replace(/^\W+/,"").replace(/\W+$/,"")}))},N.Pipeline.registerFunction(N.trimmer,"trimmer"),N.TokenSet=function(){this.final=!1,this.edges={},this.id=N.TokenSet._nextId,N.TokenSet._nextId+=1},N.TokenSet._nextId=1,N.TokenSet.fromArray=function(e){for(var t=new N.TokenSet.Builder,n=0,r=e.length;n<r;n++)t.insert(e[n]);return t.finish(),t.root},N.TokenSet.fromClause=function(e){return"editDistance"in e?N.TokenSet.fromFuzzyString(e.term,e.editDistance):N.TokenSet.fromString(e.term)},N.TokenSet.fromFuzzyString=function(e,t){for(var n=new N.TokenSet,r=[{node:n,editsRemaining:t,str:e}];r.length;){var o=r.pop();if(o.str.length>0){var a,i=o.str.charAt(0);i in o.node.edges?a=o.node.edges[i]:(a=new N.TokenSet,o.node.edges[i]=a),1==o.str.length&&(a.final=!0),r.push({node:a,editsRemaining:o.editsRemaining,str:o.str.slice(1)})}if(0!=o.editsRemaining){if("*"in o.node.edges)var l=o.node.edges["*"];else{l=new N.TokenSet;o.node.edges["*"]=l}if(0==o.str.length&&(l.final=!0),r.push({node:l,editsRemaining:o.editsRemaining-1,str:o.str}),o.str.length>1&&r.push({node:o.node,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)}),1==o.str.length&&(o.node.final=!0),o.str.length>=1){if("*"in o.node.edges)var s=o.node.edges["*"];else{s=new N.TokenSet;o.node.edges["*"]=s}1==o.str.length&&(s.final=!0),r.push({node:s,editsRemaining:o.editsRemaining-1,str:o.str.slice(1)})}if(o.str.length>1){var u,c=o.str.charAt(0),d=o.str.charAt(1);d in o.node.edges?u=o.node.edges[d]:(u=new N.TokenSet,o.node.edges[d]=u),1==o.str.length&&(u.final=!0),r.push({node:u,editsRemaining:o.editsRemaining-1,str:c+o.str.slice(2)})}}}return n},N.TokenSet.fromString=function(e){for(var t=new N.TokenSet,n=t,r=0,o=e.length;r<o;r++){var a=e[r],i=r==o-1;if("*"==a)t.edges[a]=t,t.final=i;else{var l=new N.TokenSet;l.final=i,t.edges[a]=l,t=l}}return n},N.TokenSet.prototype.toArray=function(){for(var e=[],t=[{prefix:"",node:this}];t.length;){var n=t.pop(),r=Object.keys(n.node.edges),o=r.length;n.node.final&&(n.prefix.charAt(0),e.push(n.prefix));for(var a=0;a<o;a++){var i=r[a];t.push({prefix:n.prefix.concat(i),node:n.node.edges[i]})}}return e},N.TokenSet.prototype.toString=function(){if(this._str)return this._str;for(var e=this.final?"1":"0",t=Object.keys(this.edges).sort(),n=t.length,r=0;r<n;r++){var o=t[r];e=e+o+this.edges[o].id}return e},N.TokenSet.prototype.intersect=function(e){for(var t=new N.TokenSet,n=void 0,r=[{qNode:e,output:t,node:this}];r.length;){n=r.pop();for(var o=Object.keys(n.qNode.edges),a=o.length,i=Object.keys(n.node.edges),l=i.length,s=0;s<a;s++)for(var u=o[s],c=0;c<l;c++){var d=i[c];if(d==u||"*"==u){var f=n.node.edges[d],p=n.qNode.edges[u],h=f.final&&p.final,m=void 0;d in n.output.edges?(m=n.output.edges[d]).final=m.final||h:((m=new N.TokenSet).final=h,n.output.edges[d]=m),r.push({qNode:p,output:m,node:f})}}}return t},N.TokenSet.Builder=function(){this.previousWord="",this.root=new N.TokenSet,this.uncheckedNodes=[],this.minimizedNodes={}},N.TokenSet.Builder.prototype.insert=function(e){var t,n=0;if(e<this.previousWord)throw new Error("Out of order word insertion");for(var r=0;r<e.length&&r<this.previousWord.length&&e[r]==this.previousWord[r];r++)n++;this.minimize(n),t=0==this.uncheckedNodes.length?this.root:this.uncheckedNodes[this.uncheckedNodes.length-1].child;for(r=n;r<e.length;r++){var o=new N.TokenSet,a=e[r];t.edges[a]=o,this.uncheckedNodes.push({parent:t,char:a,child:o}),t=o}t.final=!0,this.previousWord=e},N.TokenSet.Builder.prototype.finish=function(){this.minimize(0)},N.TokenSet.Builder.prototype.minimize=function(e){for(var t=this.uncheckedNodes.length-1;t>=e;t--){var n=this.uncheckedNodes[t],r=n.child.toString();r in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[r]:(n.child._str=r,this.minimizedNodes[r]=n.child),this.uncheckedNodes.pop()}},N.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},N.Index.prototype.search=function(e){return this.query((function(t){new N.QueryParser(e,t).parse()}))},N.Index.prototype.query=function(e){for(var t=new N.Query(this.fields),n=Object.create(null),r=Object.create(null),o=Object.create(null),a=Object.create(null),i=Object.create(null),l=0;l<this.fields.length;l++)r[this.fields[l]]=new N.Vector;e.call(t,t);for(l=0;l<t.clauses.length;l++){var s=t.clauses[l],u=null,c=N.Set.empty;u=s.usePipeline?this.pipeline.runString(s.term,{fields:s.fields}):[s.term];for(var d=0;d<u.length;d++){var f=u[d];s.term=f;var p=N.TokenSet.fromClause(s),h=this.tokenSet.intersect(p).toArray();if(0===h.length&&s.presence===N.Query.presence.REQUIRED){for(var m=0;m<s.fields.length;m++){a[I=s.fields[m]]=N.Set.empty}break}for(var g=0;g<h.length;g++){var v=h[g],b=this.invertedIndex[v],y=b._index;for(m=0;m<s.fields.length;m++){var w=b[I=s.fields[m]],x=Object.keys(w),_=v+"/"+I,k=new N.Set(x);if(s.presence==N.Query.presence.REQUIRED&&(c=c.union(k),void 0===a[I]&&(a[I]=N.Set.complete)),s.presence!=N.Query.presence.PROHIBITED){if(r[I].upsert(y,s.boost,(function(e,t){return e+t})),!o[_]){for(var E=0;E<x.length;E++){var S,C=x[E],T=new N.FieldRef(C,I),O=w[C];void 0===(S=n[T])?n[T]=new N.MatchData(v,I,O):S.add(v,I,O)}o[_]=!0}}else void 0===i[I]&&(i[I]=N.Set.empty),i[I]=i[I].union(k)}}}if(s.presence===N.Query.presence.REQUIRED)for(m=0;m<s.fields.length;m++){a[I=s.fields[m]]=a[I].intersect(c)}}var D=N.Set.complete,P=N.Set.empty;for(l=0;l<this.fields.length;l++){var I;a[I=this.fields[l]]&&(D=D.intersect(a[I])),i[I]&&(P=P.union(i[I]))}var A=Object.keys(n),L=[],R=Object.create(null);if(t.isNegated()){A=Object.keys(this.fieldVectors);for(l=0;l<A.length;l++){T=A[l];var j=N.FieldRef.fromString(T);n[T]=new N.MatchData}}for(l=0;l<A.length;l++){var M=(j=N.FieldRef.fromString(A[l])).docRef;if(D.contains(M)&&!P.contains(M)){var F,B=this.fieldVectors[j],z=r[j.fieldName].similarity(B);if(void 0!==(F=R[M]))F.score+=z,F.matchData.combine(n[j]);else{var $={ref:M,score:z,matchData:n[j]};R[M]=$,L.push($)}}}return L.sort((function(e,t){return t.score-e.score}))},N.Index.prototype.toJSON=function(){var e=Object.keys(this.invertedIndex).sort().map((function(e){return[e,this.invertedIndex[e]]}),this),t=Object.keys(this.fieldVectors).map((function(e){return[e,this.fieldVectors[e].toJSON()]}),this);return{version:N.version,fields:this.fields,fieldVectors:t,invertedIndex:e,pipeline:this.pipeline.toJSON()}},N.Index.load=function(e){var t={},n={},r=e.fieldVectors,o=Object.create(null),a=e.invertedIndex,i=new N.TokenSet.Builder,l=N.Pipeline.load(e.pipeline);e.version!=N.version&&N.utils.warn("Version mismatch when loading serialised index. Current version of lunr '"+N.version+"' does not match serialized index '"+e.version+"'");for(var s=0;s<r.length;s++){var u=(d=r[s])[0],c=d[1];n[u]=new N.Vector(c)}for(s=0;s<a.length;s++){var d,f=(d=a[s])[0],p=d[1];i.insert(f),o[f]=p}return i.finish(),t.fields=e.fields,t.fieldVectors=n,t.invertedIndex=o,t.tokenSet=i.root,t.pipeline=l,new N.Index(t)},N.Builder=function(){this._ref="id",this._fields=Object.create(null),this._documents=Object.create(null),this.invertedIndex=Object.create(null),this.fieldTermFrequencies={},this.fieldLengths={},this.tokenizer=N.tokenizer,this.pipeline=new N.Pipeline,this.searchPipeline=new N.Pipeline,this.documentCount=0,this._b=.75,this._k1=1.2,this.termIndex=0,this.metadataWhitelist=[]},N.Builder.prototype.ref=function(e){this._ref=e},N.Builder.prototype.field=function(e,t){if(/\//.test(e))throw new RangeError("Field '"+e+"' contains illegal character '/'");this._fields[e]=t||{}},N.Builder.prototype.b=function(e){this._b=e<0?0:e>1?1:e},N.Builder.prototype.k1=function(e){this._k1=e},N.Builder.prototype.add=function(e,t){var n=e[this._ref],r=Object.keys(this._fields);this._documents[n]=t||{},this.documentCount+=1;for(var o=0;o<r.length;o++){var a=r[o],i=this._fields[a].extractor,l=i?i(e):e[a],s=this.tokenizer(l,{fields:[a]}),u=this.pipeline.run(s),c=new N.FieldRef(n,a),d=Object.create(null);this.fieldTermFrequencies[c]=d,this.fieldLengths[c]=0,this.fieldLengths[c]+=u.length;for(var f=0;f<u.length;f++){var p=u[f];if(null==d[p]&&(d[p]=0),d[p]+=1,null==this.invertedIndex[p]){var h=Object.create(null);h._index=this.termIndex,this.termIndex+=1;for(var m=0;m<r.length;m++)h[r[m]]=Object.create(null);this.invertedIndex[p]=h}null==this.invertedIndex[p][a][n]&&(this.invertedIndex[p][a][n]=Object.create(null));for(var g=0;g<this.metadataWhitelist.length;g++){var v=this.metadataWhitelist[g],b=p.metadata[v];null==this.invertedIndex[p][a][n][v]&&(this.invertedIndex[p][a][n][v]=[]),this.invertedIndex[p][a][n][v].push(b)}}}},N.Builder.prototype.calculateAverageFieldLengths=function(){for(var e=Object.keys(this.fieldLengths),t=e.length,n={},r={},o=0;o<t;o++){var a=N.FieldRef.fromString(e[o]),i=a.fieldName;r[i]||(r[i]=0),r[i]+=1,n[i]||(n[i]=0),n[i]+=this.fieldLengths[a]}var l=Object.keys(this._fields);for(o=0;o<l.length;o++){var s=l[o];n[s]=n[s]/r[s]}this.averageFieldLength=n},N.Builder.prototype.createFieldVectors=function(){for(var e={},t=Object.keys(this.fieldTermFrequencies),n=t.length,r=Object.create(null),o=0;o<n;o++){for(var a=N.FieldRef.fromString(t[o]),i=a.fieldName,l=this.fieldLengths[a],s=new N.Vector,u=this.fieldTermFrequencies[a],c=Object.keys(u),d=c.length,f=this._fields[i].boost||1,p=this._documents[a.docRef].boost||1,h=0;h<d;h++){var m,g,v,b=c[h],y=u[b],w=this.invertedIndex[b]._index;void 0===r[b]?(m=N.idf(this.invertedIndex[b],this.documentCount),r[b]=m):m=r[b],g=m*((this._k1+1)*y)/(this._k1*(1-this._b+this._b*(l/this.averageFieldLength[i]))+y),g*=f,g*=p,v=Math.round(1e3*g)/1e3,s.insert(w,v)}e[a]=s}this.fieldVectors=e},N.Builder.prototype.createTokenSet=function(){this.tokenSet=N.TokenSet.fromArray(Object.keys(this.invertedIndex).sort())},N.Builder.prototype.build=function(){return this.calculateAverageFieldLengths(),this.createFieldVectors(),this.createTokenSet(),new N.Index({invertedIndex:this.invertedIndex,fieldVectors:this.fieldVectors,tokenSet:this.tokenSet,fields:Object.keys(this._fields),pipeline:this.searchPipeline})},N.Builder.prototype.use=function(e){var t=Array.prototype.slice.call(arguments,1);t.unshift(this),e.apply(this,t)},N.MatchData=function(e,t,n){for(var r=Object.create(null),o=Object.keys(n||{}),a=0;a<o.length;a++){var i=o[a];r[i]=n[i].slice()}this.metadata=Object.create(null),void 0!==e&&(this.metadata[e]=Object.create(null),this.metadata[e][t]=r)},N.MatchData.prototype.combine=function(e){for(var t=Object.keys(e.metadata),n=0;n<t.length;n++){var r=t[n],o=Object.keys(e.metadata[r]);null==this.metadata[r]&&(this.metadata[r]=Object.create(null));for(var a=0;a<o.length;a++){var i=o[a],l=Object.keys(e.metadata[r][i]);null==this.metadata[r][i]&&(this.metadata[r][i]=Object.create(null));for(var s=0;s<l.length;s++){var u=l[s];null==this.metadata[r][i][u]?this.metadata[r][i][u]=e.metadata[r][i][u]:this.metadata[r][i][u]=this.metadata[r][i][u].concat(e.metadata[r][i][u])}}}},N.MatchData.prototype.add=function(e,t,n){if(!(e in this.metadata))return this.metadata[e]=Object.create(null),void(this.metadata[e][t]=n);if(t in this.metadata[e])for(var r=Object.keys(n),o=0;o<r.length;o++){var a=r[o];a in this.metadata[e][t]?this.metadata[e][t][a]=this.metadata[e][t][a].concat(n[a]):this.metadata[e][t][a]=n[a]}else this.metadata[e][t]=n},N.Query=function(e){this.clauses=[],this.allFields=e},N.Query.wildcard=new String("*"),N.Query.wildcard.NONE=0,N.Query.wildcard.LEADING=1,N.Query.wildcard.TRAILING=2,N.Query.presence={OPTIONAL:1,REQUIRED:2,PROHIBITED:3},N.Query.prototype.clause=function(e){return"fields"in e||(e.fields=this.allFields),"boost"in e||(e.boost=1),"usePipeline"in e||(e.usePipeline=!0),"wildcard"in e||(e.wildcard=N.Query.wildcard.NONE),e.wildcard&N.Query.wildcard.LEADING&&e.term.charAt(0)!=N.Query.wildcard&&(e.term="*"+e.term),e.wildcard&N.Query.wildcard.TRAILING&&e.term.slice(-1)!=N.Query.wildcard&&(e.term=e.term+"*"),"presence"in e||(e.presence=N.Query.presence.OPTIONAL),this.clauses.push(e),this},N.Query.prototype.isNegated=function(){for(var e=0;e<this.clauses.length;e++)if(this.clauses[e].presence!=N.Query.presence.PROHIBITED)return!1;return!0},N.Query.prototype.term=function(e,t){if(Array.isArray(e))return e.forEach((function(e){this.term(e,N.utils.clone(t))}),this),this;var n=t||{};return n.term=e.toString(),this.clause(n),this},N.QueryParseError=function(e,t,n){this.name="QueryParseError",this.message=e,this.start=t,this.end=n},N.QueryParseError.prototype=new Error,N.QueryLexer=function(e){this.lexemes=[],this.str=e,this.length=e.length,this.pos=0,this.start=0,this.escapeCharPositions=[]},N.QueryLexer.prototype.run=function(){for(var e=N.QueryLexer.lexText;e;)e=e(this)},N.QueryLexer.prototype.sliceString=function(){for(var e=[],t=this.start,n=this.pos,r=0;r<this.escapeCharPositions.length;r++)n=this.escapeCharPositions[r],e.push(this.str.slice(t,n)),t=n+1;return e.push(this.str.slice(t,this.pos)),this.escapeCharPositions.length=0,e.join("")},N.QueryLexer.prototype.emit=function(e){this.lexemes.push({type:e,str:this.sliceString(),start:this.start,end:this.pos}),this.start=this.pos},N.QueryLexer.prototype.escapeCharacter=function(){this.escapeCharPositions.push(this.pos-1),this.pos+=1},N.QueryLexer.prototype.next=function(){if(this.pos>=this.length)return N.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},N.QueryLexer.prototype.width=function(){return this.pos-this.start},N.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},N.QueryLexer.prototype.backup=function(){this.pos-=1},N.QueryLexer.prototype.acceptDigitRun=function(){var e,t;do{t=(e=this.next()).charCodeAt(0)}while(t>47&&t<58);e!=N.QueryLexer.EOS&&this.backup()},N.QueryLexer.prototype.more=function(){return this.pos<this.length},N.QueryLexer.EOS="EOS",N.QueryLexer.FIELD="FIELD",N.QueryLexer.TERM="TERM",N.QueryLexer.EDIT_DISTANCE="EDIT_DISTANCE",N.QueryLexer.BOOST="BOOST",N.QueryLexer.PRESENCE="PRESENCE",N.QueryLexer.lexField=function(e){return e.backup(),e.emit(N.QueryLexer.FIELD),e.ignore(),N.QueryLexer.lexText},N.QueryLexer.lexTerm=function(e){if(e.width()>1&&(e.backup(),e.emit(N.QueryLexer.TERM)),e.ignore(),e.more())return N.QueryLexer.lexText},N.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(N.QueryLexer.EDIT_DISTANCE),N.QueryLexer.lexText},N.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(N.QueryLexer.BOOST),N.QueryLexer.lexText},N.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(N.QueryLexer.TERM)},N.QueryLexer.termSeparator=N.tokenizer.separator,N.QueryLexer.lexText=function(e){for(;;){var t=e.next();if(t==N.QueryLexer.EOS)return N.QueryLexer.lexEOS;if(92!=t.charCodeAt(0)){if(":"==t)return N.QueryLexer.lexField;if("~"==t)return e.backup(),e.width()>0&&e.emit(N.QueryLexer.TERM),N.QueryLexer.lexEditDistance;if("^"==t)return e.backup(),e.width()>0&&e.emit(N.QueryLexer.TERM),N.QueryLexer.lexBoost;if("+"==t&&1===e.width())return e.emit(N.QueryLexer.PRESENCE),N.QueryLexer.lexText;if("-"==t&&1===e.width())return e.emit(N.QueryLexer.PRESENCE),N.QueryLexer.lexText;if(t.match(N.QueryLexer.termSeparator))return N.QueryLexer.lexTerm}else e.escapeCharacter()}},N.QueryParser=function(e,t){this.lexer=new N.QueryLexer(e),this.query=t,this.currentClause={},this.lexemeIdx=0},N.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=N.QueryParser.parseClause;e;)e=e(this);return this.query},N.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},N.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},N.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},N.QueryParser.parseClause=function(e){var t=e.peekLexeme();if(null!=t)switch(t.type){case N.QueryLexer.PRESENCE:return N.QueryParser.parsePresence;case N.QueryLexer.FIELD:return N.QueryParser.parseField;case N.QueryLexer.TERM:return N.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+t.type;throw t.str.length>=1&&(n+=" with value '"+t.str+"'"),new N.QueryParseError(n,t.start,t.end)}},N.QueryParser.parsePresence=function(e){var t=e.consumeLexeme();if(null!=t){switch(t.str){case"-":e.currentClause.presence=N.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=N.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+t.str+"'";throw new N.QueryParseError(n,t.start,t.end)}var r=e.peekLexeme();if(null==r){n="expecting term or field, found nothing";throw new N.QueryParseError(n,t.start,t.end)}switch(r.type){case N.QueryLexer.FIELD:return N.QueryParser.parseField;case N.QueryLexer.TERM:return N.QueryParser.parseTerm;default:n="expecting term or field, found '"+r.type+"'";throw new N.QueryParseError(n,r.start,r.end)}}},N.QueryParser.parseField=function(e){var t=e.consumeLexeme();if(null!=t){if(-1==e.query.allFields.indexOf(t.str)){var n=e.query.allFields.map((function(e){return"'"+e+"'"})).join(", "),r="unrecognised field '"+t.str+"', possible fields: "+n;throw new N.QueryParseError(r,t.start,t.end)}e.currentClause.fields=[t.str];var o=e.peekLexeme();if(null==o){r="expecting term, found nothing";throw new N.QueryParseError(r,t.start,t.end)}if(o.type===N.QueryLexer.TERM)return N.QueryParser.parseTerm;r="expecting term, found '"+o.type+"'";throw new N.QueryParseError(r,o.start,o.end)}},N.QueryParser.parseTerm=function(e){var t=e.consumeLexeme();if(null!=t){e.currentClause.term=t.str.toLowerCase(),-1!=t.str.indexOf("*")&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(null!=n)switch(n.type){case N.QueryLexer.TERM:return e.nextClause(),N.QueryParser.parseTerm;case N.QueryLexer.FIELD:return e.nextClause(),N.QueryParser.parseField;case N.QueryLexer.EDIT_DISTANCE:return N.QueryParser.parseEditDistance;case N.QueryLexer.BOOST:return N.QueryParser.parseBoost;case N.QueryLexer.PRESENCE:return e.nextClause(),N.QueryParser.parsePresence;default:var r="Unexpected lexeme type '"+n.type+"'";throw new N.QueryParseError(r,n.start,n.end)}else e.nextClause()}},N.QueryParser.parseEditDistance=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="edit distance must be numeric";throw new N.QueryParseError(r,t.start,t.end)}e.currentClause.editDistance=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case N.QueryLexer.TERM:return e.nextClause(),N.QueryParser.parseTerm;case N.QueryLexer.FIELD:return e.nextClause(),N.QueryParser.parseField;case N.QueryLexer.EDIT_DISTANCE:return N.QueryParser.parseEditDistance;case N.QueryLexer.BOOST:return N.QueryParser.parseBoost;case N.QueryLexer.PRESENCE:return e.nextClause(),N.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new N.QueryParseError(r,o.start,o.end)}else e.nextClause()}},N.QueryParser.parseBoost=function(e){var t=e.consumeLexeme();if(null!=t){var n=parseInt(t.str,10);if(isNaN(n)){var r="boost must be numeric";throw new N.QueryParseError(r,t.start,t.end)}e.currentClause.boost=n;var o=e.peekLexeme();if(null!=o)switch(o.type){case N.QueryLexer.TERM:return e.nextClause(),N.QueryParser.parseTerm;case N.QueryLexer.FIELD:return e.nextClause(),N.QueryParser.parseField;case N.QueryLexer.EDIT_DISTANCE:return N.QueryParser.parseEditDistance;case N.QueryLexer.BOOST:return N.QueryParser.parseBoost;case N.QueryLexer.PRESENCE:return e.nextClause(),N.QueryParser.parsePresence;default:r="Unexpected lexeme type '"+o.type+"'";throw new N.QueryParseError(r,o.start,o.end)}else e.nextClause()}},void 0===(o="function"==typeof(r=function(){return N})?r.call(t,n,t,e):r)||(e.exports=o)}()},27861:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={icon:"icon_S7Kx",s:"s_AZDZ",m:"m_thRi",l:"l_WHPt",fill:"fill_hNhN",stroke:"stroke_N8dm"}},10153:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={backdrop:"backdrop_Ifvc",navWrapper:"navWrapper_ybYI",nav:"nav_cMpg",visible:"visible_ynAX",wrapper:"wrapper_SWrM",fullscreenButton:"fullscreenButton_Bocn",active:"active_qZD5"}},8633:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={toggle:"toggle_K23S",toggleButton:"toggleButton_dl49",darkToggleIcon:"darkToggleIcon_lKkA",lightToggleIcon:"lightToggleIcon_K4TL",toggleButtonDisabled:"toggleButtonDisabled_AAS_"}},79762:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={firstRow:"firstRow_ar1q",secondRow:"secondRow__ww3",backToTop:"backToTop_wDfN",footerLink:"footerLink_sh7M"}},90826:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={colorModeToggle:"colorModeToggle_GSaI",rightSection:"rightSection_CLeF",iconButtonGroup:"iconButtonGroup_ktNv"}},83244:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={dropdownNavbarItem:"dropdownNavbarItem_o23I"}},31259:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={modal:"modal_kLVz",closeButton:"closeButton_Rr0e",header:"header_QwCa"}},61699:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_ONDG",empty:"empty_a7qb",title:"title_uwS_",item:"item_RHYF",itemTitle:"itemTitle_jtAv"}},9592:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_xZfc",textField:"textField_af43"}},1443:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_N57j"}},18589:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_Ooa0",level1:"level1_fpUf",icon:"icon_sZn2",fill:"fill_fkan",stroke:"stroke_j3wH"}},86620:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_JWD1"}},38076:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_EFVO"}},20550:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_ltHz",noResults:"noResults_mD2O",groups:"groups_p1lF",divider:"divider_eGUz",topBar:"topBar_Dtew"}},22473:(e,t,n)=>{"use strict";n.r(t)},11057:(e,t,n)=>{"use strict";n.r(t)},93878:(e,t,n)=>{"use strict";n.r(t)},32497:(e,t,n)=>{"use strict";n.r(t)},97087:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={navbarHideable:"navbarHideable_OoEf",navbarHidden:"navbarHidden_zoxl"}},88822:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={linkContent:"linkContent__x3v",externalLinkIcon:"externalLinkIcon_Qfue"}},65787:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={themedImage:"themedImage_kfRS","themedImage--light":"themedImage--light_BL8e","themedImage--dark":"themedImage--dark_OvIx"}},36459:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>r});const r={root:"root_QACb"}},97142:(e,t)=>{"use strict";t.I=function(e){e.client&&(document.head.appendChild(e.msh=document.createElement("style")),e.createRule=function(t,n){var r=t+"{}";n&&(r=n+"{"+r+"}");var o=n?e.msh.sheet:e.sh.sheet,a=o.insertRule(r,o.cssRules.length),i=(o.cssRules||o.rules)[a];if(i.index=a,n){var l=(i.cssRules||i.rules)[0];i.style=l.style,i.styleMap=l.styleMap}return i})}},52099:(e,t,n)=>{"use strict";var r=n(39662).D;t.I=function(e){if(e.client){0;var t=e.kebab;n.prototype.diff=function(e){var n,r=this.decl,o=this.rule.style;for(n in r)void 0===e[n]&&o.removeProperty(n);for(n in e)e[n]!==r[n]&&o.setProperty(t(n),e[n]);this.decl=e},n.prototype.del=function(){r(this.rule)},o.prototype.diff=function(e){var t=this.tree;for(var r in t)if(void 0===e[r]){var o=t[r];for(var a in o)o[a].del()}for(var r in e)if(void 0===t[r])for(var a in e[r]){(s=new n(a,r)).diff(e[r][a]),e[r][a]=s}else{var i=t[r],l=e[r];for(var a in i)l[a]||i[a].del();for(var a in l){var s;(s=i[a])?(s.diff(l[a]),l[a]=s):((s=new n(a,r)).diff(l[a]),l[a]=s)}}this.tree=e},e.VRule=n,e.VSheet=o}function n(t,n){this.rule=e.createRule(t,n),this.decl={}}function o(){this.tree={}}}},87749:(e,t)=>{t.z=function e(t,n,r,o){var a,i,l={},s=!1;for(a in n)"object"!=typeof(i=n[a])&&(s=!0,l[a]=i);for(a in s&&(t[o]||(t[o]={}),t[o][r]=l),n)if("object"==typeof(i=n[a]))if("@"===a[0])e(t,i,r,a);else{var u=a.indexOf("&")>-1,c=r.split(",");if(u)for(var d=0;d<c.length;d++)c[d]=a.replace(/&/g,c[d]);else for(d=0;d<c.length;d++)c[d]=c[d]+" "+a;e(t,i,c.join(","),o)}}},39662:(e,t)=>{t.D=function(e){var t=e.index,n=e.parentStyleSheet,r=n.cssRules||n.rules;for(t=Math.max(t,r.length-1);t>=0;){if(r[t]===e){n.deleteRule(t);break}t--}}},40818:(e,t)=>{"use strict";var n=/[A-Z]/g;t.U=function(e){var t=(e=e||{}).assign||Object.assign;var r=t({raw:"",pfx:"_",client:"object"==typeof window,assign:t,stringify:JSON.stringify,kebab:function(e){return e.replace(n,"-$&").toLowerCase()},decl:function(e,t){return(e=r.kebab(e))+":"+t+";"},hash:function(e){return function(e){for(var t=5381,n=e.length;n;)t=33*t^e.charCodeAt(--n);return"_"+(t>>>0).toString(36)}(r.stringify(e))},selector:function(e,t){return e+(":"===t[0]?"":" ")+t},putRaw:function(e){r.raw+=e}},e);return r.client&&(r.sh||document.head.appendChild(r.sh=document.createElement("style")),r.putRaw=function(e){var t=r.sh.sheet;try{t.insertRule(e,t.cssRules.length)}catch(n){}}),r.put=function(e,t,n){var o,a,i="",l=[];for(o in t)(a=t[o])instanceof Object&&!(a instanceof Array)?l.push(o):i+=r.decl(o,a,e,n);i&&(i=e+"{"+i+"}",r.putRaw(n?n+"{"+i+"}":i));for(var s=0;s<l.length;s++)"@"===(o=l[s])[0]&&"@font-face"!==o?r.putAt(e,t[o],o):r.put(r.selector(e,o),t[o],n)},r.putAt=r.put,r}},74865:function(e,t,n){var r,o;r=function(){var e,t,n={version:"0.2.0"},r=n.settings={minimum:.08,easing:"ease",positionUsing:"",speed:200,trickle:!0,trickleRate:.02,trickleSpeed:800,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",template:'<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'};function o(e,t,n){return e<t?t:e>n?n:e}function a(e){return 100*(-1+e)}function i(e,t,n){var o;return(o="translate3d"===r.positionUsing?{transform:"translate3d("+a(e)+"%,0,0)"}:"translate"===r.positionUsing?{transform:"translate("+a(e)+"%,0)"}:{"margin-left":a(e)+"%"}).transition="all "+t+"ms "+n,o}n.configure=function(e){var t,n;for(t in e)void 0!==(n=e[t])&&e.hasOwnProperty(t)&&(r[t]=n);return this},n.status=null,n.set=function(e){var t=n.isStarted();e=o(e,r.minimum,1),n.status=1===e?null:e;var a=n.render(!t),u=a.querySelector(r.barSelector),c=r.speed,d=r.easing;return a.offsetWidth,l((function(t){""===r.positionUsing&&(r.positionUsing=n.getPositioningCSS()),s(u,i(e,c,d)),1===e?(s(a,{transition:"none",opacity:1}),a.offsetWidth,setTimeout((function(){s(a,{transition:"all "+c+"ms linear",opacity:0}),setTimeout((function(){n.remove(),t()}),c)}),c)):setTimeout(t,c)})),this},n.isStarted=function(){return"number"==typeof n.status},n.start=function(){n.status||n.set(0);var e=function(){setTimeout((function(){n.status&&(n.trickle(),e())}),r.trickleSpeed)};return r.trickle&&e(),this},n.done=function(e){return e||n.status?n.inc(.3+.5*Math.random()).set(1):this},n.inc=function(e){var t=n.status;return t?("number"!=typeof e&&(e=(1-t)*o(Math.random()*t,.1,.95)),t=o(t+e,0,.994),n.set(t)):n.start()},n.trickle=function(){return n.inc(Math.random()*r.trickleRate)},e=0,t=0,n.promise=function(r){return r&&"resolved"!==r.state()?(0===t&&n.start(),e++,t++,r.always((function(){0==--t?(e=0,n.done()):n.set((e-t)/e)})),this):this},n.render=function(e){if(n.isRendered())return document.getElementById("nprogress");c(document.documentElement,"nprogress-busy");var t=document.createElement("div");t.id="nprogress",t.innerHTML=r.template;var o,i=t.querySelector(r.barSelector),l=e?"-100":a(n.status||0),u=document.querySelector(r.parent);return s(i,{transition:"all 0 linear",transform:"translate3d("+l+"%,0,0)"}),r.showSpinner||(o=t.querySelector(r.spinnerSelector))&&p(o),u!=document.body&&c(u,"nprogress-custom-parent"),u.appendChild(t),t},n.remove=function(){d(document.documentElement,"nprogress-busy"),d(document.querySelector(r.parent),"nprogress-custom-parent");var e=document.getElementById("nprogress");e&&p(e)},n.isRendered=function(){return!!document.getElementById("nprogress")},n.getPositioningCSS=function(){var e=document.body.style,t="WebkitTransform"in e?"Webkit":"MozTransform"in e?"Moz":"msTransform"in e?"ms":"OTransform"in e?"O":"";return t+"Perspective"in e?"translate3d":t+"Transform"in e?"translate":"margin"};var l=function(){var e=[];function t(){var n=e.shift();n&&n(t)}return function(n){e.push(n),1==e.length&&t()}}(),s=function(){var e=["Webkit","O","Moz","ms"],t={};function n(e){return e.replace(/^-ms-/,"ms-").replace(/-([\da-z])/gi,(function(e,t){return t.toUpperCase()}))}function r(t){var n=document.body.style;if(t in n)return t;for(var r,o=e.length,a=t.charAt(0).toUpperCase()+t.slice(1);o--;)if((r=e[o]+a)in n)return r;return t}function o(e){return e=n(e),t[e]||(t[e]=r(e))}function a(e,t,n){t=o(t),e.style[t]=n}return function(e,t){var n,r,o=arguments;if(2==o.length)for(n in t)void 0!==(r=t[n])&&t.hasOwnProperty(n)&&a(e,n,r);else a(e,o[1],o[2])}}();function u(e,t){return("string"==typeof e?e:f(e)).indexOf(" "+t+" ")>=0}function c(e,t){var n=f(e),r=n+t;u(n,t)||(e.className=r.substring(1))}function d(e,t){var n,r=f(e);u(e,t)&&(n=r.replace(" "+t+" "," "),e.className=n.substring(1,n.length-1))}function f(e){return(" "+(e.className||"")+" ").replace(/\s+/gi," ")}function p(e){e&&e.parentNode&&e.parentNode.removeChild(e)}return n},void 0===(o="function"==typeof r?r.call(t,n,t,e):r)||(e.exports=o)},27418:e=>{"use strict";var t=Object.getOwnPropertySymbols,n=Object.prototype.hasOwnProperty,r=Object.prototype.propertyIsEnumerable;function o(e){if(null==e)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(e)}e.exports=function(){try{if(!Object.assign)return!1;var e=new String("abc");if(e[5]="de","5"===Object.getOwnPropertyNames(e)[0])return!1;for(var t={},n=0;n<10;n++)t["_"+String.fromCharCode(n)]=n;if("0123456789"!==Object.getOwnPropertyNames(t).map((function(e){return t[e]})).join(""))return!1;var r={};return"abcdefghijklmnopqrst".split("").forEach((function(e){r[e]=e})),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},r)).join("")}catch(o){return!1}}()?Object.assign:function(e,a){for(var i,l,s=o(e),u=1;u<arguments.length;u++){for(var c in i=Object(arguments[u]))n.call(i,c)&&(s[c]=i[c]);if(t){l=t(i);for(var d=0;d<l.length;d++)r.call(i,l[d])&&(s[l[d]]=i[l[d]])}}return s}},87594:(e,t)=>{function n(e){let t,n=[];for(let r of e.split(",").map((e=>e.trim())))if(/^-?\d+$/.test(r))n.push(parseInt(r,10));else if(t=r.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/)){let[e,r,o,a]=t;if(r&&a){r=parseInt(r),a=parseInt(a);const e=r<a?1:-1;"-"!==o&&".."!==o&&"\u2025"!==o||(a+=e);for(let t=r;t!==a;t+=e)n.push(t)}}return n}t.default=n,e.exports=n},87410:(e,t,n)=>{"use strict";n.d(t,{Z:()=>a});var r=function(){var e=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,n={},r={util:{encode:function e(t){return t instanceof o?new o(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/</g,"<").replace(/\u00a0/g," ")},type:function(e){return Object.prototype.toString.call(e).slice(8,-1)},objId:function(e){return e.__id||Object.defineProperty(e,"__id",{value:++t}),e.__id},clone:function e(t,n){var o,a;switch(n=n||{},r.util.type(t)){case"Object":if(a=r.util.objId(t),n[a])return n[a];for(var i in o={},n[a]=o,t)t.hasOwnProperty(i)&&(o[i]=e(t[i],n));return o;case"Array":return a=r.util.objId(t),n[a]?n[a]:(o=[],n[a]=o,t.forEach((function(t,r){o[r]=e(t,n)})),o);default:return t}},getLanguage:function(t){for(;t;){var n=e.exec(t.className);if(n)return n[1].toLowerCase();t=t.parentElement}return"none"},setLanguage:function(t,n){t.className=t.className.replace(RegExp(e,"gi"),""),t.classList.add("language-"+n)},isActive:function(e,t,n){for(var r="no-"+t;e;){var o=e.classList;if(o.contains(t))return!0;if(o.contains(r))return!1;e=e.parentElement}return!!n}},languages:{plain:n,plaintext:n,text:n,txt:n,extend:function(e,t){var n=r.util.clone(r.languages[e]);for(var o in t)n[o]=t[o];return n},insertBefore:function(e,t,n,o){var a=(o=o||r.languages)[e],i={};for(var l in a)if(a.hasOwnProperty(l)){if(l==t)for(var s in n)n.hasOwnProperty(s)&&(i[s]=n[s]);n.hasOwnProperty(l)||(i[l]=a[l])}var u=o[e];return o[e]=i,r.languages.DFS(r.languages,(function(t,n){n===u&&t!=e&&(this[t]=i)})),i},DFS:function e(t,n,o,a){a=a||{};var i=r.util.objId;for(var l in t)if(t.hasOwnProperty(l)){n.call(t,l,t[l],o||l);var s=t[l],u=r.util.type(s);"Object"!==u||a[i(s)]?"Array"!==u||a[i(s)]||(a[i(s)]=!0,e(s,n,l,a)):(a[i(s)]=!0,e(s,n,null,a))}}},plugins:{},highlight:function(e,t,n){var a={code:e,grammar:t,language:n};return r.hooks.run("before-tokenize",a),a.tokens=r.tokenize(a.code,a.grammar),r.hooks.run("after-tokenize",a),o.stringify(r.util.encode(a.tokens),a.language)},tokenize:function(e,t){var n=t.rest;if(n){for(var r in n)t[r]=n[r];delete t.rest}var o=new l;return s(o,o.head,e),i(e,o,t,o.head,0),function(e){var t=[],n=e.head.next;for(;n!==e.tail;)t.push(n.value),n=n.next;return t}(o)},hooks:{all:{},add:function(e,t){var n=r.hooks.all;n[e]=n[e]||[],n[e].push(t)},run:function(e,t){var n=r.hooks.all[e];if(n&&n.length)for(var o,a=0;o=n[a++];)o(t)}},Token:o};function o(e,t,n,r){this.type=e,this.content=t,this.alias=n,this.length=0|(r||"").length}function a(e,t,n,r){e.lastIndex=t;var o=e.exec(n);if(o&&r&&o[1]){var a=o[1].length;o.index+=a,o[0]=o[0].slice(a)}return o}function i(e,t,n,l,c,d){for(var f in n)if(n.hasOwnProperty(f)&&n[f]){var p=n[f];p=Array.isArray(p)?p:[p];for(var h=0;h<p.length;++h){if(d&&d.cause==f+","+h)return;var m=p[h],g=m.inside,v=!!m.lookbehind,b=!!m.greedy,y=m.alias;if(b&&!m.pattern.global){var w=m.pattern.toString().match(/[imsuy]*$/)[0];m.pattern=RegExp(m.pattern.source,w+"g")}for(var x=m.pattern||m,_=l.next,k=c;_!==t.tail&&!(d&&k>=d.reach);k+=_.value.length,_=_.next){var E=_.value;if(t.length>e.length)return;if(!(E instanceof o)){var S,C=1;if(b){if(!(S=a(x,k,e,v))||S.index>=e.length)break;var T=S.index,O=S.index+S[0].length,D=k;for(D+=_.value.length;T>=D;)D+=(_=_.next).value.length;if(k=D-=_.value.length,_.value instanceof o)continue;for(var P=_;P!==t.tail&&(D<O||"string"==typeof P.value);P=P.next)C++,D+=P.value.length;C--,E=e.slice(k,D),S.index-=k}else if(!(S=a(x,0,E,v)))continue;T=S.index;var N=S[0],I=E.slice(0,T),A=E.slice(T+N.length),L=k+E.length;d&&L>d.reach&&(d.reach=L);var R=_.prev;if(I&&(R=s(t,R,I),k+=I.length),u(t,R,C),_=s(t,R,new o(f,g?r.tokenize(N,g):N,y,N)),A&&s(t,_,A),C>1){var j={cause:f+","+h,reach:L};i(e,t,n,_.prev,k,j),d&&j.reach>d.reach&&(d.reach=j.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function s(e,t,n){var r=t.next,o={value:n,prev:t,next:r};return t.next=o,r.prev=o,e.length++,o}function u(e,t,n){for(var r=t.next,o=0;o<n&&r!==e.tail;o++)r=r.next;t.next=r,r.prev=t,e.length-=o}return o.stringify=function e(t,n){if("string"==typeof t)return t;if(Array.isArray(t)){var o="";return t.forEach((function(t){o+=e(t,n)})),o}var a={type:t.type,content:e(t.content,n),tag:"span",classes:["token",t.type],attributes:{},language:n},i=t.alias;i&&(Array.isArray(i)?Array.prototype.push.apply(a.classes,i):a.classes.push(i)),r.hooks.run("wrap",a);var l="";for(var s in a.attributes)l+=" "+s+'="'+(a.attributes[s]||"").replace(/"/g,""")+'"';return"<"+a.tag+' class="'+a.classes.join(" ")+'"'+l+">"+a.content+"</"+a.tag+">"},r}(),o=r;r.default=r,o.languages.markup={comment:{pattern:/<!--(?:(?!<!--)[\s\S])*?-->/,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^<!|>$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},o.languages.markup.tag.inside["attr-value"].inside.entity=o.languages.markup.entity,o.languages.markup.doctype.inside["internal-subset"].inside=o.languages.markup,o.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(o.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,lookbehind:!0,inside:o.languages[t]},n.cdata=/^<!\[CDATA\[|\]\]>$/i;var r={"included-cdata":{pattern:/<!\[CDATA\[[\s\S]*?\]\]>/i,inside:n}};r["language-"+t]={pattern:/[\s\S]+/,inside:o.languages[t]};var a={};a[e]={pattern:RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:r},o.languages.insertBefore("markup","cdata",a)}}),Object.defineProperty(o.languages.markup.tag,"addAttribute",{value:function(e,t){o.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:o.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),o.languages.html=o.languages.markup,o.languages.mathml=o.languages.markup,o.languages.svg=o.languages.markup,o.languages.xml=o.languages.extend("markup",{}),o.languages.ssml=o.languages.xml,o.languages.atom=o.languages.xml,o.languages.rss=o.languages.xml,function(e){var t="\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b",n={pattern:/(^(["']?)\w+\2)[ \t]+\S.*/,lookbehind:!0,alias:"punctuation",inside:null},r={bash:n,environment:{pattern:RegExp("\\$"+t),alias:"constant"},variable:[{pattern:/\$?\(\([\s\S]+?\)\)/,greedy:!0,inside:{variable:[{pattern:/(^\$\(\([\s\S]+)\)\)/,lookbehind:!0},/^\$\(\(/],number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,operator:/--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,punctuation:/\(\(?|\)\)?|,|;/}},{pattern:/\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,greedy:!0,inside:{variable:/^\$\(|^`|\)$|`$/}},{pattern:/\$\{[^}]+\}/,greedy:!0,inside:{operator:/:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,punctuation:/[\[\]]/,environment:{pattern:RegExp("(\\{)"+t),lookbehind:!0,alias:"constant"}}},/\$(?:\w+|[#?*!@$])/],entity:/\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/};e.languages.bash={shebang:{pattern:/^#!\s*\/.*/,alias:"important"},comment:{pattern:/(^|[^"{\\$])#.*/,lookbehind:!0},"function-name":[{pattern:/(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,lookbehind:!0,alias:"function"},{pattern:/\b[\w-]+(?=\s*\(\s*\)\s*\{)/,alias:"function"}],"for-or-select":{pattern:/(\b(?:for|select)\s+)\w+(?=\s+in\s)/,alias:"variable",lookbehind:!0},"assign-left":{pattern:/(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,inside:{environment:{pattern:RegExp("(^|[\\s;|&]|[<>]\\()"+t),lookbehind:!0,alias:"constant"}},alias:"variable",lookbehind:!0},string:[{pattern:/((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,lookbehind:!0,greedy:!0,inside:r},{pattern:/((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,lookbehind:!0,greedy:!0,inside:{bash:n}},{pattern:/(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,lookbehind:!0,greedy:!0,inside:r},{pattern:/(^|[^$\\])'[^']*'/,lookbehind:!0,greedy:!0},{pattern:/\$'(?:[^'\\]|\\[\s\S])*'/,greedy:!0,inside:{entity:r.entity}}],environment:{pattern:RegExp("\\$?"+t),alias:"constant"},variable:r.variable,function:{pattern:/(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,lookbehind:!0},keyword:{pattern:/(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,lookbehind:!0},builtin:{pattern:/(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,lookbehind:!0,alias:"class-name"},boolean:{pattern:/(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,lookbehind:!0},"file-descriptor":{pattern:/\B&\d\b/,alias:"important"},operator:{pattern:/\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,inside:{"file-descriptor":{pattern:/^\d/,alias:"important"}}},punctuation:/\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,number:{pattern:/(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,lookbehind:!0}},n.inside=e.languages.bash;for(var o=["comment","function-name","for-or-select","assign-left","string","environment","function","keyword","builtin","boolean","file-descriptor","operator","punctuation","number"],a=r.variable[1].inside,i=0;i<o.length;i++)a[o[i]]=e.languages.bash[o[i]];e.languages.shell=e.languages.bash}(o),o.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},o.languages.c=o.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),o.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),o.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},o.languages.c.string],char:o.languages.c.char,comment:o.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:o.languages.c}}}}),o.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete o.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(o),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:/@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(o),function(e){var t,n=/("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;e.languages.css.selector={pattern:e.languages.css.selector.pattern,lookbehind:!0,inside:t={"pseudo-element":/:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,"pseudo-class":/:[-\w]+/,class:/\.[-\w]+/,id:/#[-\w]+/,attribute:{pattern:RegExp("\\[(?:[^[\\]\"']|"+n.source+")*\\]"),greedy:!0,inside:{punctuation:/^\[|\]$/,"case-sensitivity":{pattern:/(\s)[si]$/i,lookbehind:!0,alias:"keyword"},namespace:{pattern:/^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,lookbehind:!0,inside:{punctuation:/\|$/}},"attr-name":{pattern:/^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,lookbehind:!0},"attr-value":[n,{pattern:/(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,lookbehind:!0}],operator:/[|~*^$]?=/}},"n-th":[{pattern:/(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,lookbehind:!0,inside:{number:/[\dn]+/,operator:/[+-]/}},{pattern:/(\(\s*)(?:even|odd)(?=\s*\))/i,lookbehind:!0}],combinator:/>|\+|~|\|\|/,punctuation:/[(),]/}},e.languages.css.atrule.inside["selector-function-argument"].inside=t,e.languages.insertBefore("css","property",{variable:{pattern:/(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,lookbehind:!0}});var r={pattern:/(\b\d+)(?:%|[a-z]+(?![\w-]))/,lookbehind:!0},o={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0};e.languages.insertBefore("css","function",{operator:{pattern:/(\s)[+\-*\/](?=\s)/,lookbehind:!0},hexcode:{pattern:/\B#[\da-f]{3,8}\b/i,alias:"color"},color:[{pattern:/(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,lookbehind:!0},{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:r,number:o,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:r,number:o})}(o),o.languages.javascript=o.languages.extend("clike",{"class-name":[o.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),o.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,o.languages.insertBefore("javascript","keyword",{regex:{pattern:/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:o.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:o.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:o.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:o.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:o.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),o.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:o.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),o.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),o.languages.markup&&(o.languages.markup.tag.addInlined("script","javascript"),o.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),o.languages.js=o.languages.javascript,function(e){var t=/#(?!\{).+/,n={pattern:/#\{[^}]+\}/,alias:"variable"};e.languages.coffeescript=e.languages.extend("javascript",{comment:t,string:[{pattern:/'(?:\\[\s\S]|[^\\'])*'/,greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,greedy:!0,inside:{interpolation:n}}],keyword:/\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,"class-member":{pattern:/@(?!\d)\w+/,alias:"variable"}}),e.languages.insertBefore("coffeescript","comment",{"multiline-comment":{pattern:/###[\s\S]+?###/,alias:"comment"},"block-regex":{pattern:/\/{3}[\s\S]*?\/{3}/,alias:"regex",inside:{comment:t,interpolation:n}}}),e.languages.insertBefore("coffeescript","string",{"inline-javascript":{pattern:/`(?:\\[\s\S]|[^\\`])*`/,inside:{delimiter:{pattern:/^`|`$/,alias:"punctuation"},script:{pattern:/[\s\S]+/,alias:"language-javascript",inside:e.languages.javascript}}},"multiline-string":[{pattern:/'''[\s\S]*?'''/,greedy:!0,alias:"string"},{pattern:/"""[\s\S]*?"""/,greedy:!0,alias:"string",inside:{interpolation:n}}]}),e.languages.insertBefore("coffeescript","keyword",{property:/(?!\d)\w+(?=\s*:(?!:))/}),delete e.languages.coffeescript["template-string"],e.languages.coffee=e.languages.coffeescript}(o),function(e){var t=/[*&][^\s[\]{},]+/,n=/!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/,r="(?:"+n.source+"(?:[ \t]+"+t.source+")?|"+t.source+"(?:[ \t]+"+n.source+")?)",o=/(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g,(function(){return/[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source})),a=/"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;function i(e,t){t=(t||"").replace(/m/g,"")+"m";var n=/([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<value>>/g,(function(){return e}));return RegExp(n,t)}e.languages.yaml={scalar:{pattern:RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g,(function(){return r}))),lookbehind:!0,alias:"string"},comment:/#.*/,key:{pattern:RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g,(function(){return r})).replace(/<<key>>/g,(function(){return"(?:"+o+"|"+a+")"}))),lookbehind:!0,greedy:!0,alias:"atrule"},directive:{pattern:/(^[ \t]*)%.+/m,lookbehind:!0,alias:"important"},datetime:{pattern:i(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),lookbehind:!0,alias:"number"},boolean:{pattern:i(/false|true/.source,"i"),lookbehind:!0,alias:"important"},null:{pattern:i(/null|~/.source,"i"),lookbehind:!0,alias:"important"},string:{pattern:i(a),lookbehind:!0,greedy:!0},number:{pattern:i(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source,"i"),lookbehind:!0},tag:n,important:t,punctuation:/---|[:[\]{}\-,|>?]|\.\.\./},e.languages.yml=e.languages.yaml}(o),function(e){var t=/(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;function n(e){return e=e.replace(/<inner>/g,(function(){return t})),RegExp(/((?:^|[^\\])(?:\\{2})*)/.source+"(?:"+e+")")}var r=/(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source,o=/\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g,(function(){return r})),a=/\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;e.languages.markdown=e.languages.extend("markup",{}),e.languages.insertBefore("markdown","prolog",{"front-matter-block":{pattern:/(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,lookbehind:!0,greedy:!0,inside:{punctuation:/^---|---$/,"front-matter":{pattern:/\S+(?:\s+\S+)*/,alias:["yaml","language-yaml"],inside:e.languages.yaml}}},blockquote:{pattern:/^>(?:[\t ]*>)*/m,alias:"punctuation"},table:{pattern:RegExp("^"+o+a+"(?:"+o+")*","m"),inside:{"table-data-rows":{pattern:RegExp("^("+o+a+")(?:"+o+")*$"),lookbehind:!0,inside:{"table-data":{pattern:RegExp(r),inside:e.languages.markdown},punctuation:/\|/}},"table-line":{pattern:RegExp("^("+o+")"+a+"$"),lookbehind:!0,inside:{punctuation:/\||:?-{3,}:?/}},"table-header-row":{pattern:RegExp("^"+o+"$"),inside:{"table-header":{pattern:RegExp(r),alias:"important",inside:e.languages.markdown},punctuation:/\|/}}}},code:[{pattern:/((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,lookbehind:!0,alias:"keyword"},{pattern:/^```[\s\S]*?^```$/m,greedy:!0,inside:{"code-block":{pattern:/^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,lookbehind:!0},"code-language":{pattern:/^(```).+/,lookbehind:!0},punctuation:/```/}}],title:[{pattern:/\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,alias:"important",inside:{punctuation:/==+$|--+$/}},{pattern:/(^\s*)#.+/m,lookbehind:!0,alias:"important",inside:{punctuation:/^#+|#+$/}}],hr:{pattern:/(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,lookbehind:!0,alias:"punctuation"},list:{pattern:/(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,lookbehind:!0,alias:"punctuation"},"url-reference":{pattern:/!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,inside:{variable:{pattern:/^(!?\[)[^\]]+/,lookbehind:!0},string:/(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,punctuation:/^[\[\]!:]|[<>]/},alias:"url"},bold:{pattern:n(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^..)[\s\S]+(?=..$)/,lookbehind:!0,inside:{}},punctuation:/\*\*|__/}},italic:{pattern:n(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^.)[\s\S]+(?=.$)/,lookbehind:!0,inside:{}},punctuation:/[*_]/}},strike:{pattern:n(/(~~?)(?:(?!~)<inner>)+\2/.source),lookbehind:!0,greedy:!0,inside:{content:{pattern:/(^~~?)[\s\S]+(?=\1$)/,lookbehind:!0,inside:{}},punctuation:/~~?/}},"code-snippet":{pattern:/(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,lookbehind:!0,greedy:!0,alias:["code","keyword"]},url:{pattern:n(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),lookbehind:!0,greedy:!0,inside:{operator:/^!/,content:{pattern:/(^\[)[^\]]+(?=\])/,lookbehind:!0,inside:{}},variable:{pattern:/(^\][ \t]?\[)[^\]]+(?=\]$)/,lookbehind:!0},url:{pattern:/(^\]\()[^\s)]+/,lookbehind:!0},string:{pattern:/(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,lookbehind:!0}}}}),["url","bold","italic","strike"].forEach((function(t){["url","bold","italic","strike","code-snippet"].forEach((function(n){t!==n&&(e.languages.markdown[t].inside.content.inside[n]=e.languages.markdown[n])}))})),e.hooks.add("after-tokenize",(function(e){"markdown"!==e.language&&"md"!==e.language||function e(t){if(t&&"string"!=typeof t)for(var n=0,r=t.length;n<r;n++){var o=t[n];if("code"===o.type){var a=o.content[1],i=o.content[3];if(a&&i&&"code-language"===a.type&&"code-block"===i.type&&"string"==typeof a.content){var l=a.content.replace(/\b#/g,"sharp").replace(/\b\+\+/g,"pp"),s="language-"+(l=(/[a-z][\w-]*/i.exec(l)||[""])[0].toLowerCase());i.alias?"string"==typeof i.alias?i.alias=[i.alias,s]:i.alias.push(s):i.alias=[s]}}else e(o.content)}}(e.tokens)})),e.hooks.add("wrap",(function(t){if("code-block"===t.type){for(var n="",r=0,o=t.classes.length;r<o;r++){var a=t.classes[r],u=/language-(.+)/.exec(a);if(u){n=u[1];break}}var c,d=e.languages[n];if(d)t.content=e.highlight((c=t.content,c.replace(i,"").replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi,(function(e,t){var n;if("#"===(t=t.toLowerCase())[0])return n="x"===t[1]?parseInt(t.slice(2),16):Number(t.slice(1)),s(n);var r=l[t];return r||e}))),d,n);else if(n&&"none"!==n&&e.plugins.autoloader){var f="md-"+(new Date).valueOf()+"-"+Math.floor(1e16*Math.random());t.attributes.id=f,e.plugins.autoloader.loadLanguages(n,(function(){var t=document.getElementById(f);t&&(t.innerHTML=e.highlight(t.textContent,e.languages[n],n))}))}}}));var i=RegExp(e.languages.markup.tag.pattern.source,"gi"),l={amp:"&",lt:"<",gt:">",quot:'"'},s=String.fromCodePoint||String.fromCharCode;e.languages.md=e.languages.markdown}(o),o.languages.graphql={comment:/#.*/,description:{pattern:/(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,greedy:!0,alias:"string",inside:{"language-markdown":{pattern:/(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,lookbehind:!0,inside:o.languages.markdown}}},string:{pattern:/"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,greedy:!0},number:/(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,boolean:/\b(?:false|true)\b/,variable:/\$[a-z_]\w*/i,directive:{pattern:/@[a-z_]\w*/i,alias:"function"},"attr-name":{pattern:/\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,greedy:!0},"atom-input":{pattern:/\b[A-Z]\w*Input\b/,alias:"class-name"},scalar:/\b(?:Boolean|Float|ID|Int|String)\b/,constant:/\b[A-Z][A-Z_\d]*\b/,"class-name":{pattern:/(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,lookbehind:!0},fragment:{pattern:/(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-mutation":{pattern:/(\bmutation\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},"definition-query":{pattern:/(\bquery\s+)[a-zA-Z_]\w*/,lookbehind:!0,alias:"function"},keyword:/\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,operator:/[!=|&]|\.{3}/,"property-query":/\w+(?=\s*\()/,object:/\w+(?=\s*\{)/,punctuation:/[!(){}\[\]:=,]/,property:/\w+/},o.hooks.add("after-tokenize",(function(e){if("graphql"===e.language)for(var t=e.tokens.filter((function(e){return"string"!=typeof e&&"comment"!==e.type&&"scalar"!==e.type})),n=0;n<t.length;){var r=t[n++];if("keyword"===r.type&&"mutation"===r.content){var o=[];if(d(["definition-mutation","punctuation"])&&"("===c(1).content){n+=2;var a=f(/^\($/,/^\)$/);if(-1===a)continue;for(;n<a;n++){var i=c(0);"variable"===i.type&&(p(i,"variable-input"),o.push(i.content))}n=a+1}if(d(["punctuation","property-query"])&&"{"===c(0).content&&(n++,p(c(0),"property-mutation"),o.length>0)){var l=f(/^\{$/,/^\}$/);if(-1===l)continue;for(var s=n;s<l;s++){var u=t[s];"variable"===u.type&&o.indexOf(u.content)>=0&&p(u,"variable-input")}}}}function c(e){return t[n+e]}function d(e,t){t=t||0;for(var n=0;n<e.length;n++){var r=c(n+t);if(!r||r.type!==e[n])return!1}return!0}function f(e,r){for(var o=1,a=n;a<t.length;a++){var i=t[a],l=i.content;if("punctuation"===i.type&&"string"==typeof l)if(e.test(l))o++;else if(r.test(l)&&0===--o)return a}return-1}function p(e,t){var n=e.alias;n?Array.isArray(n)||(e.alias=n=[n]):e.alias=n=[],n.push(t)}})),o.languages.sql={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,lookbehind:!0},variable:[{pattern:/@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,greedy:!0},/@[\w.$]+/],string:{pattern:/(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,greedy:!0,lookbehind:!0},identifier:{pattern:/(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,greedy:!0,lookbehind:!0,inside:{punctuation:/^`|`$/}},function:/\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,keyword:/\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,boolean:/\b(?:FALSE|NULL|TRUE)\b/i,number:/\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,operator:/[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,punctuation:/[;[\]()`,.]/},function(e){var t=e.languages.javascript["template-string"],n=t.pattern.source,r=t.inside.interpolation,o=r.inside["interpolation-punctuation"],a=r.pattern.source;function i(t,r){if(e.languages[t])return{pattern:RegExp("((?:"+r+")\\s*)"+n),lookbehind:!0,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},"embedded-code":{pattern:/[\s\S]+/,alias:t}}}}function l(e,t){return"___"+t.toUpperCase()+"_"+e+"___"}function s(t,n,r){var o={code:t,grammar:n,language:r};return e.hooks.run("before-tokenize",o),o.tokens=e.tokenize(o.code,o.grammar),e.hooks.run("after-tokenize",o),o.tokens}function u(t){var n={};n["interpolation-punctuation"]=o;var a=e.tokenize(t,n);if(3===a.length){var i=[1,1];i.push.apply(i,s(a[1],e.languages.javascript,"javascript")),a.splice.apply(a,i)}return new e.Token("interpolation",a,r.alias,t)}function c(t,n,r){var o=e.tokenize(t,{interpolation:{pattern:RegExp(a),lookbehind:!0}}),i=0,c={},d=s(o.map((function(e){if("string"==typeof e)return e;for(var n,o=e.content;-1!==t.indexOf(n=l(i++,r)););return c[n]=o,n})).join(""),n,r),f=Object.keys(c);return i=0,function e(t){for(var n=0;n<t.length;n++){if(i>=f.length)return;var r=t[n];if("string"==typeof r||"string"==typeof r.content){var o=f[i],a="string"==typeof r?r:r.content,l=a.indexOf(o);if(-1!==l){++i;var s=a.substring(0,l),d=u(c[o]),p=a.substring(l+o.length),h=[];if(s&&h.push(s),h.push(d),p){var m=[p];e(m),h.push.apply(h,m)}"string"==typeof r?(t.splice.apply(t,[n,1].concat(h)),n+=h.length-1):r.content=h}}else{var g=r.content;Array.isArray(g)?e(g):e([g])}}}(d),new e.Token(r,d,"language-"+r,t)}e.languages.javascript["template-string"]=[i("css",/\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source),i("html",/\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source),i("svg",/\bsvg/.source),i("markdown",/\b(?:markdown|md)/.source),i("graphql",/\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source),i("sql",/\bsql/.source),t].filter(Boolean);var d={javascript:!0,js:!0,typescript:!0,ts:!0,jsx:!0,tsx:!0};function f(e){return"string"==typeof e?e:Array.isArray(e)?e.map(f).join(""):f(e.content)}e.hooks.add("after-tokenize",(function(t){t.language in d&&function t(n){for(var r=0,o=n.length;r<o;r++){var a=n[r];if("string"!=typeof a){var i=a.content;if(Array.isArray(i))if("template-string"===a.type){var l=i[1];if(3===i.length&&"string"!=typeof l&&"embedded-code"===l.type){var s=f(l),u=l.alias,d=Array.isArray(u)?u[0]:u,p=e.languages[d];if(!p)continue;i[1]=c(s,p,d)}}else t(i);else"string"!=typeof i&&t([i])}}}(t.tokens)}))}(o),function(e){e.languages.typescript=e.languages.extend("javascript",{"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,lookbehind:!0,greedy:!0,inside:null},builtin:/\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/}),e.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/,/\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/,/\btype\b(?=\s*(?:[\{*]|$))/),delete e.languages.typescript.parameter,delete e.languages.typescript["literal-property"];var t=e.languages.extend("typescript",{});delete t["class-name"],e.languages.typescript["class-name"].inside=t,e.languages.insertBefore("typescript","function",{decorator:{pattern:/@[$\w\xA0-\uFFFF]+/,inside:{at:{pattern:/^@/,alias:"operator"},function:/^[\s\S]+/}},"generic-function":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,greedy:!0,inside:{function:/^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:t}}}}),e.languages.ts=e.languages.typescript}(o),function(e){function t(e,t){return RegExp(e.replace(/<ID>/g,(function(){return/(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source})),t)}e.languages.insertBefore("javascript","function-variable",{"method-variable":{pattern:RegExp("(\\.\\s*)"+e.languages.javascript["function-variable"].pattern.source),lookbehind:!0,alias:["function-variable","method","function","property-access"]}}),e.languages.insertBefore("javascript","function",{method:{pattern:RegExp("(\\.\\s*)"+e.languages.javascript.function.source),lookbehind:!0,alias:["function","property-access"]}}),e.languages.insertBefore("javascript","constant",{"known-class-name":[{pattern:/\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,alias:"class-name"},{pattern:/\b(?:[A-Z]\w*)Error\b/,alias:"class-name"}]}),e.languages.insertBefore("javascript","keyword",{imports:{pattern:t(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),lookbehind:!0,inside:e.languages.javascript},exports:{pattern:t(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),lookbehind:!0,inside:e.languages.javascript}}),e.languages.javascript.keyword.unshift({pattern:/\b(?:as|default|export|from|import)\b/,alias:"module"},{pattern:/\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,alias:"control-flow"},{pattern:/\bnull\b/,alias:["null","nil"]},{pattern:/\bundefined\b/,alias:"nil"}),e.languages.insertBefore("javascript","operator",{spread:{pattern:/\.{3}/,alias:"operator"},arrow:{pattern:/=>/,alias:"operator"}}),e.languages.insertBefore("javascript","punctuation",{"property-access":{pattern:t(/(\.\s*)#?<ID>/.source),lookbehind:!0},"maybe-class-name":{pattern:/(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,lookbehind:!0},dom:{pattern:/\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,alias:"variable"},console:{pattern:/\bconsole(?=\s*\.)/,alias:"class-name"}});for(var n=["function","function-variable","method","method-variable","property-access"],r=0;r<n.length;r++){var o=n[r],a=e.languages.javascript[o];"RegExp"===e.util.type(a)&&(a=e.languages.javascript[o]={pattern:a});var i=a.inside||{};a.inside=i,i["maybe-class-name"]=/^[A-Z][\s\S]*/}}(o),function(e){var t=e.util.clone(e.languages.javascript),n=/(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source,r=/(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source,o=/(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;function a(e,t){return e=e.replace(/<S>/g,(function(){return n})).replace(/<BRACES>/g,(function(){return r})).replace(/<SPREAD>/g,(function(){return o})),RegExp(e,t)}o=a(o).source,e.languages.jsx=e.languages.extend("markup",t),e.languages.jsx.tag.pattern=a(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source),e.languages.jsx.tag.inside.tag.pattern=/^<\/?[^\s>\/]*/,e.languages.jsx.tag.inside["attr-value"].pattern=/=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/,e.languages.jsx.tag.inside.tag.inside["class-name"]=/^[A-Z]\w*(?:\.[A-Z]\w*)*$/,e.languages.jsx.tag.inside.comment=t.comment,e.languages.insertBefore("inside","attr-name",{spread:{pattern:a(/<SPREAD>/.source),inside:e.languages.jsx}},e.languages.jsx.tag),e.languages.insertBefore("inside","special-attr",{script:{pattern:a(/=<BRACES>/.source),alias:"language-javascript",inside:{"script-punctuation":{pattern:/^=(?=\{)/,alias:"punctuation"},rest:e.languages.jsx}}},e.languages.jsx.tag);var i=function(e){return e?"string"==typeof e?e:"string"==typeof e.content?e.content:e.content.map(i).join(""):""},l=function(t){for(var n=[],r=0;r<t.length;r++){var o=t[r],a=!1;if("string"!=typeof o&&("tag"===o.type&&o.content[0]&&"tag"===o.content[0].type?"</"===o.content[0].content[0].content?n.length>0&&n[n.length-1].tagName===i(o.content[0].content[1])&&n.pop():"/>"===o.content[o.content.length-1].content||n.push({tagName:i(o.content[0].content[1]),openedBraces:0}):n.length>0&&"punctuation"===o.type&&"{"===o.content?n[n.length-1].openedBraces++:n.length>0&&n[n.length-1].openedBraces>0&&"punctuation"===o.type&&"}"===o.content?n[n.length-1].openedBraces--:a=!0),(a||"string"==typeof o)&&n.length>0&&0===n[n.length-1].openedBraces){var s=i(o);r<t.length-1&&("string"==typeof t[r+1]||"plain-text"===t[r+1].type)&&(s+=i(t[r+1]),t.splice(r+1,1)),r>0&&("string"==typeof t[r-1]||"plain-text"===t[r-1].type)&&(s=i(t[r-1])+s,t.splice(r-1,1),r--),t[r]=new e.Token("plain-text",s,null,s)}o.content&&"string"!=typeof o.content&&l(o.content)}};e.hooks.add("after-tokenize",(function(e){"jsx"!==e.language&&"tsx"!==e.language||l(e.tokens)}))}(o),function(e){e.languages.diff={coord:[/^(?:\*{3}|-{3}|\+{3}).*$/m,/^@@.*@@$/m,/^\d.*$/m]};var t={"deleted-sign":"-","deleted-arrow":"<","inserted-sign":"+","inserted-arrow":">",unchanged:" ",diff:"!"};Object.keys(t).forEach((function(n){var r=t[n],o=[];/^\w+$/.test(n)||o.push(/\w+/.exec(n)[0]),"diff"===n&&o.push("bold"),e.languages.diff[n]={pattern:RegExp("^(?:["+r+"].*(?:\r\n?|\n|(?![\\s\\S])))+","m"),alias:o,inside:{line:{pattern:/(.)(?=[\s\S]).*(?:\r\n?|\n)?/,lookbehind:!0},prefix:{pattern:/[\s\S]/,alias:/\w+/.exec(n)[0]}}}})),Object.defineProperty(e.languages.diff,"PREFIXES",{value:t})}(o),o.languages.git={comment:/^#.*/m,deleted:/^[-\u2013].*/m,inserted:/^\+.*/m,string:/("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,command:{pattern:/^.*\$ git .*$/m,inside:{parameter:/\s--?\w+/}},coord:/^@@.*@@$/m,"commit-sha1":/^commit \w{40}$/m},o.languages.go=o.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,lookbehind:!0,greedy:!0},keyword:/\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,boolean:/\b(?:_|false|iota|nil|true)\b/,number:[/\b0(?:b[01_]+|o[0-7_]+)i?\b/i,/\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i,/(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],operator:/[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,builtin:/\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/}),o.languages.insertBefore("go","string",{char:{pattern:/'(?:\\.|[^'\\\r\n]){0,10}'/,greedy:!0}}),delete o.languages.go["class-name"],function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,r,o,a){if(n.language===r){var i=n.tokenStack=[];n.code=n.code.replace(o,(function(e){if("function"==typeof a&&!a(e))return e;for(var o,l=i.length;-1!==n.code.indexOf(o=t(r,l));)++l;return i[l]=e,o})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,r){if(n.language===r&&n.tokenStack){n.grammar=e.languages[r];var o=0,a=Object.keys(n.tokenStack);!function i(l){for(var s=0;s<l.length&&!(o>=a.length);s++){var u=l[s];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=a[o],d=n.tokenStack[c],f="string"==typeof u?u:u.content,p=t(r,c),h=f.indexOf(p);if(h>-1){++o;var m=f.substring(0,h),g=new e.Token(r,e.tokenize(d,n.grammar),"language-"+r,d),v=f.substring(h+p.length),b=[];m&&b.push.apply(b,i([m])),b.push(g),v&&b.push.apply(b,i([v])),"string"==typeof u?l.splice.apply(l,[s,1].concat(b)):u.content=b}}else u.content&&i(u.content)}return l}(n.tokens)}}}})}(o),function(e){e.languages.handlebars={comment:/\{\{![\s\S]*?\}\}/,delimiter:{pattern:/^\{\{\{?|\}\}\}?$/,alias:"punctuation"},string:/(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,number:/\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,boolean:/\b(?:false|true)\b/,block:{pattern:/^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,lookbehind:!0,alias:"keyword"},brackets:{pattern:/\[[^\]]+\]/,inside:{punctuation:/\[|\]/,variable:/[\s\S]+/}},punctuation:/[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,variable:/[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/},e.hooks.add("before-tokenize",(function(t){e.languages["markup-templating"].buildPlaceholders(t,"handlebars",/\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"handlebars")})),e.languages.hbs=e.languages.handlebars}(o),o.languages.json={property:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,lookbehind:!0,greedy:!0},string:{pattern:/(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,lookbehind:!0,greedy:!0},comment:{pattern:/\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},number:/-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,punctuation:/[{}[\],]/,operator:/:/,boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"}},o.languages.webmanifest=o.languages.json,o.languages.less=o.languages.extend("css",{comment:[/\/\*[\s\S]*?\*\//,{pattern:/(^|[^\\])\/\/.*/,lookbehind:!0}],atrule:{pattern:/@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{punctuation:/[:()]/}},selector:{pattern:/(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,inside:{variable:/@+[\w-]+/}},property:/(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,operator:/[+\-*\/]/}),o.languages.insertBefore("less","property",{variable:[{pattern:/@[\w-]+\s*:/,inside:{punctuation:/:/}},/@@?[\w-]+/],"mixin-usage":{pattern:/([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,lookbehind:!0,alias:"function"}}),o.languages.makefile={comment:{pattern:/(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,lookbehind:!0},string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"builtin-target":{pattern:/\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,alias:"builtin"},target:{pattern:/^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,alias:"symbol",inside:{variable:/\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/}},variable:/\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,keyword:/-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,function:{pattern:/(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,lookbehind:!0},operator:/(?:::|[?:+!])?=|[|@]/,punctuation:/[:;(){}]/},o.languages.objectivec=o.languages.extend("c",{string:{pattern:/@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},keyword:/\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,operator:/-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/}),delete o.languages.objectivec["class-name"],o.languages.objc=o.languages.objectivec,o.languages.ocaml={comment:{pattern:/\(\*[\s\S]*?\*\)/,greedy:!0},char:{pattern:/'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,greedy:!0},string:[{pattern:/"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,greedy:!0},{pattern:/\{([a-z_]*)\|[\s\S]*?\|\1\}/,greedy:!0}],number:[/\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i,/\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i,/\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],directive:{pattern:/\B#\w+/,alias:"property"},label:{pattern:/\B~\w+/,alias:"property"},"type-variable":{pattern:/\B'\w+/,alias:"function"},variant:{pattern:/`\w+/,alias:"symbol"},keyword:/\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,boolean:/\b(?:false|true)\b/,"operator-like-punctuation":{pattern:/\[[<>|]|[>|]\]|\{<|>\}/,alias:"punctuation"},operator:/\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,punctuation:/;;|::|[(){}\[\].,:;#]|\b_\b/},o.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},o.languages.python["string-interpolation"].inside.interpolation.inside.rest=o.languages.python,o.languages.py=o.languages.python,o.languages.reason=o.languages.extend("clike",{string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,greedy:!0},"class-name":/\b[A-Z]\w*/,keyword:/\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,operator:/\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/}),o.languages.insertBefore("reason","class-name",{char:{pattern:/'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,greedy:!0},constructor:/\b[A-Z]\w*\b(?!\s*\.)/,label:{pattern:/\b[a-z]\w*(?=::)/,alias:"symbol"}}),delete o.languages.reason.function,function(e){e.languages.sass=e.languages.extend("css",{comment:{pattern:/^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,lookbehind:!0,greedy:!0}}),e.languages.insertBefore("sass","atrule",{"atrule-line":{pattern:/^(?:[ \t]*)[@+=].+/m,greedy:!0,inside:{atrule:/(?:@[\w-]+|[+=])/}}}),delete e.languages.sass.atrule;var t=/\$[-\w]+|#\{\$[-\w]+\}/,n=[/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/,{pattern:/(\s)-(?=\s)/,lookbehind:!0}];e.languages.insertBefore("sass","property",{"variable-line":{pattern:/^[ \t]*\$.+/m,greedy:!0,inside:{punctuation:/:/,variable:t,operator:n}},"property-line":{pattern:/^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,greedy:!0,inside:{property:[/[^:\s]+(?=\s*:)/,{pattern:/(:)[^:\s]+/,lookbehind:!0}],punctuation:/:/,variable:t,operator:n,important:e.languages.sass.important}}}),delete e.languages.sass.property,delete e.languages.sass.important,e.languages.insertBefore("sass","punctuation",{selector:{pattern:/^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,lookbehind:!0,greedy:!0}})}(o),o.languages.scss=o.languages.extend("css",{comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},atrule:{pattern:/@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,inside:{rule:/@[\w-]+/}},url:/(?:[-a-z]+-)?url(?=\()/i,selector:{pattern:/(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,inside:{parent:{pattern:/&/,alias:"important"},placeholder:/%[-\w]+/,variable:/\$[-\w]+|#\{\$[-\w]+\}/}},property:{pattern:/(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,inside:{variable:/\$[-\w]+|#\{\$[-\w]+\}/}}}),o.languages.insertBefore("scss","atrule",{keyword:[/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i,{pattern:/( )(?:from|through)(?= )/,lookbehind:!0}]}),o.languages.insertBefore("scss","important",{variable:/\$[-\w]+|#\{\$[-\w]+\}/}),o.languages.insertBefore("scss","function",{"module-modifier":{pattern:/\b(?:as|hide|show|with)\b/i,alias:"keyword"},placeholder:{pattern:/%[-\w]+/,alias:"selector"},statement:{pattern:/\B!(?:default|optional)\b/i,alias:"keyword"},boolean:/\b(?:false|true)\b/,null:{pattern:/\bnull\b/,alias:"keyword"},operator:{pattern:/(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,lookbehind:!0}}),o.languages.scss.atrule.inside.rest=o.languages.scss,function(e){var t={pattern:/(\b\d+)(?:%|[a-z]+)/,lookbehind:!0},n={pattern:/(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,lookbehind:!0},r={comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0},url:{pattern:/\burl\((["']?).*?\1\)/i,greedy:!0},string:{pattern:/("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,greedy:!0},interpolation:null,func:null,important:/\B!(?:important|optional)\b/i,keyword:{pattern:/(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,lookbehind:!0},hexcode:/#[\da-f]{3,6}/i,color:[/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i,{pattern:/\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,inside:{unit:t,number:n,function:/[\w-]+(?=\()/,punctuation:/[(),]/}}],entity:/\\[\da-f]{1,8}/i,unit:t,boolean:/\b(?:false|true)\b/,operator:[/~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],number:n,punctuation:/[{}()\[\];:,]/};r.interpolation={pattern:/\{[^\r\n}:]+\}/,alias:"variable",inside:{delimiter:{pattern:/^\{|\}$/,alias:"punctuation"},rest:r}},r.func={pattern:/[\w-]+\([^)]*\).*/,inside:{function:/^[^(]+/,rest:r}},e.languages.stylus={"atrule-declaration":{pattern:/(^[ \t]*)@.+/m,lookbehind:!0,inside:{atrule:/^@[\w-]+/,rest:r}},"variable-declaration":{pattern:/(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,lookbehind:!0,inside:{variable:/^\S+/,rest:r}},statement:{pattern:/(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,lookbehind:!0,inside:{keyword:/^\S+/,rest:r}},"property-declaration":{pattern:/((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,lookbehind:!0,inside:{property:{pattern:/^[^\s:]+/,inside:{interpolation:r.interpolation}},rest:r}},selector:{pattern:/(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,lookbehind:!0,inside:{interpolation:r.interpolation,comment:r.comment,punctuation:/[{},]/}},func:r.func,string:r.string,comment:{pattern:/(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,lookbehind:!0,greedy:!0},interpolation:r.interpolation,punctuation:/[{}()\[\];:.]/}}(o),function(e){var t=e.util.clone(e.languages.typescript);e.languages.tsx=e.languages.extend("jsx",t),delete e.languages.tsx.parameter,delete e.languages.tsx["literal-property"];var n=e.languages.tsx.tag;n.pattern=RegExp(/(^|[^\w$]|(?=<\/))/.source+"(?:"+n.pattern.source+")",n.pattern.flags),n.lookbehind=!0}(o),o.languages.wasm={comment:[/\(;[\s\S]*?;\)/,{pattern:/;;.*/,greedy:!0}],string:{pattern:/"(?:\\[\s\S]|[^"\\])*"/,greedy:!0},keyword:[{pattern:/\b(?:align|offset)=/,inside:{operator:/=/}},{pattern:/\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,inside:{punctuation:/\./}},/\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],variable:/\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,number:/[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,punctuation:/[()]/};const a=o},29901:e=>{e.exports&&(e.exports={core:{meta:{path:"components/prism-core.js",option:"mandatory"},core:"Core"},themes:{meta:{path:"themes/{id}.css",link:"index.html?theme={id}",exclusive:!0},prism:{title:"Default",option:"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{title:"Okaidia",owner:"ocodia"},"prism-twilight":{title:"Twilight",owner:"remybach"},"prism-coy":{title:"Coy",owner:"tshedor"},"prism-solarizedlight":{title:"Solarized Light",owner:"hectormatos2011 "},"prism-tomorrow":{title:"Tomorrow Night",owner:"Rosey"}},languages:{meta:{path:"components/prism-{id}",noCSS:!0,examplesPath:"examples/prism-{id}",addCheckAll:!0},markup:{title:"Markup",alias:["html","xml","svg","mathml","ssml","atom","rss"],aliasTitles:{html:"HTML",xml:"XML",svg:"SVG",mathml:"MathML",ssml:"SSML",atom:"Atom",rss:"RSS"},option:"default"},css:{title:"CSS",option:"default",modify:"markup"},clike:{title:"C-like",option:"default"},javascript:{title:"JavaScript",require:"clike",modify:"markup",optional:"regex",alias:"js",option:"default"},abap:{title:"ABAP",owner:"dellagustin"},abnf:{title:"ABNF",owner:"RunDevelopment"},actionscript:{title:"ActionScript",require:"javascript",modify:"markup",owner:"Golmote"},ada:{title:"Ada",owner:"Lucretia"},agda:{title:"Agda",owner:"xy-ren"},al:{title:"AL",owner:"RunDevelopment"},antlr4:{title:"ANTLR4",alias:"g4",owner:"RunDevelopment"},apacheconf:{title:"Apache Configuration",owner:"GuiTeK"},apex:{title:"Apex",require:["clike","sql"],owner:"RunDevelopment"},apl:{title:"APL",owner:"ngn"},applescript:{title:"AppleScript",owner:"Golmote"},aql:{title:"AQL",owner:"RunDevelopment"},arduino:{title:"Arduino",require:"cpp",alias:"ino",owner:"dkern"},arff:{title:"ARFF",owner:"Golmote"},armasm:{title:"ARM Assembly",alias:"arm-asm",owner:"RunDevelopment"},arturo:{title:"Arturo",alias:"art",optional:["bash","css","javascript","markup","markdown","sql"],owner:"drkameleon"},asciidoc:{alias:"adoc",title:"AsciiDoc",owner:"Golmote"},aspnet:{title:"ASP.NET (C#)",require:["markup","csharp"],owner:"nauzilus"},asm6502:{title:"6502 Assembly",owner:"kzurawel"},asmatmel:{title:"Atmel AVR Assembly",owner:"cerkit"},autohotkey:{title:"AutoHotkey",owner:"aviaryan"},autoit:{title:"AutoIt",owner:"Golmote"},avisynth:{title:"AviSynth",alias:"avs",owner:"Zinfidel"},"avro-idl":{title:"Avro IDL",alias:"avdl",owner:"RunDevelopment"},awk:{title:"AWK",alias:"gawk",aliasTitles:{gawk:"GAWK"},owner:"RunDevelopment"},bash:{title:"Bash",alias:["sh","shell"],aliasTitles:{sh:"Shell",shell:"Shell"},owner:"zeitgeist87"},basic:{title:"BASIC",owner:"Golmote"},batch:{title:"Batch",owner:"Golmote"},bbcode:{title:"BBcode",alias:"shortcode",aliasTitles:{shortcode:"Shortcode"},owner:"RunDevelopment"},bbj:{title:"BBj",owner:"hyyan"},bicep:{title:"Bicep",owner:"johnnyreilly"},birb:{title:"Birb",require:"clike",owner:"Calamity210"},bison:{title:"Bison",require:"c",owner:"Golmote"},bnf:{title:"BNF",alias:"rbnf",aliasTitles:{rbnf:"RBNF"},owner:"RunDevelopment"},bqn:{title:"BQN",owner:"yewscion"},brainfuck:{title:"Brainfuck",owner:"Golmote"},brightscript:{title:"BrightScript",owner:"RunDevelopment"},bro:{title:"Bro",owner:"wayward710"},bsl:{title:"BSL (1C:Enterprise)",alias:"oscript",aliasTitles:{oscript:"OneScript"},owner:"Diversus23"},c:{title:"C",require:"clike",owner:"zeitgeist87"},csharp:{title:"C#",require:"clike",alias:["cs","dotnet"],owner:"mvalipour"},cpp:{title:"C++",require:"c",owner:"zeitgeist87"},cfscript:{title:"CFScript",require:"clike",alias:"cfc",owner:"mjclemente"},chaiscript:{title:"ChaiScript",require:["clike","cpp"],owner:"RunDevelopment"},cil:{title:"CIL",owner:"sbrl"},cilkc:{title:"Cilk/C",require:"c",alias:"cilk-c",owner:"OpenCilk"},cilkcpp:{title:"Cilk/C++",require:"cpp",alias:["cilk-cpp","cilk"],owner:"OpenCilk"},clojure:{title:"Clojure",owner:"troglotit"},cmake:{title:"CMake",owner:"mjrogozinski"},cobol:{title:"COBOL",owner:"RunDevelopment"},coffeescript:{title:"CoffeeScript",require:"javascript",alias:"coffee",owner:"R-osey"},concurnas:{title:"Concurnas",alias:"conc",owner:"jasontatton"},csp:{title:"Content-Security-Policy",owner:"ScottHelme"},cooklang:{title:"Cooklang",owner:"ahue"},coq:{title:"Coq",owner:"RunDevelopment"},crystal:{title:"Crystal",require:"ruby",owner:"MakeNowJust"},"css-extras":{title:"CSS Extras",require:"css",modify:"css",owner:"milesj"},csv:{title:"CSV",owner:"RunDevelopment"},cue:{title:"CUE",owner:"RunDevelopment"},cypher:{title:"Cypher",owner:"RunDevelopment"},d:{title:"D",require:"clike",owner:"Golmote"},dart:{title:"Dart",require:"clike",owner:"Golmote"},dataweave:{title:"DataWeave",owner:"machaval"},dax:{title:"DAX",owner:"peterbud"},dhall:{title:"Dhall",owner:"RunDevelopment"},diff:{title:"Diff",owner:"uranusjr"},django:{title:"Django/Jinja2",require:"markup-templating",alias:"jinja2",owner:"romanvm"},"dns-zone-file":{title:"DNS zone file",owner:"RunDevelopment",alias:"dns-zone"},docker:{title:"Docker",alias:"dockerfile",owner:"JustinBeckwith"},dot:{title:"DOT (Graphviz)",alias:"gv",optional:"markup",owner:"RunDevelopment"},ebnf:{title:"EBNF",owner:"RunDevelopment"},editorconfig:{title:"EditorConfig",owner:"osipxd"},eiffel:{title:"Eiffel",owner:"Conaclos"},ejs:{title:"EJS",require:["javascript","markup-templating"],owner:"RunDevelopment",alias:"eta",aliasTitles:{eta:"Eta"}},elixir:{title:"Elixir",owner:"Golmote"},elm:{title:"Elm",owner:"zwilias"},etlua:{title:"Embedded Lua templating",require:["lua","markup-templating"],owner:"RunDevelopment"},erb:{title:"ERB",require:["ruby","markup-templating"],owner:"Golmote"},erlang:{title:"Erlang",owner:"Golmote"},"excel-formula":{title:"Excel Formula",alias:["xlsx","xls"],owner:"RunDevelopment"},fsharp:{title:"F#",require:"clike",owner:"simonreynolds7"},factor:{title:"Factor",owner:"catb0t"},false:{title:"False",owner:"edukisto"},"firestore-security-rules":{title:"Firestore security rules",require:"clike",owner:"RunDevelopment"},flow:{title:"Flow",require:"javascript",owner:"Golmote"},fortran:{title:"Fortran",owner:"Golmote"},ftl:{title:"FreeMarker Template Language",require:"markup-templating",owner:"RunDevelopment"},gml:{title:"GameMaker Language",alias:"gamemakerlanguage",require:"clike",owner:"LiarOnce"},gap:{title:"GAP (CAS)",owner:"RunDevelopment"},gcode:{title:"G-code",owner:"RunDevelopment"},gdscript:{title:"GDScript",owner:"RunDevelopment"},gedcom:{title:"GEDCOM",owner:"Golmote"},gettext:{title:"gettext",alias:"po",owner:"RunDevelopment"},gherkin:{title:"Gherkin",owner:"hason"},git:{title:"Git",owner:"lgiraudel"},glsl:{title:"GLSL",require:"c",owner:"Golmote"},gn:{title:"GN",alias:"gni",owner:"RunDevelopment"},"linker-script":{title:"GNU Linker Script",alias:"ld",owner:"RunDevelopment"},go:{title:"Go",require:"clike",owner:"arnehormann"},"go-module":{title:"Go module",alias:"go-mod",owner:"RunDevelopment"},gradle:{title:"Gradle",require:"clike",owner:"zeabdelkhalek-badido18"},graphql:{title:"GraphQL",optional:"markdown",owner:"Golmote"},groovy:{title:"Groovy",require:"clike",owner:"robfletcher"},haml:{title:"Haml",require:"ruby",optional:["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],owner:"Golmote"},handlebars:{title:"Handlebars",require:"markup-templating",alias:["hbs","mustache"],aliasTitles:{mustache:"Mustache"},owner:"Golmote"},haskell:{title:"Haskell",alias:"hs",owner:"bholst"},haxe:{title:"Haxe",require:"clike",optional:"regex",owner:"Golmote"},hcl:{title:"HCL",owner:"outsideris"},hlsl:{title:"HLSL",require:"c",owner:"RunDevelopment"},hoon:{title:"Hoon",owner:"matildepark"},http:{title:"HTTP",optional:["csp","css","hpkp","hsts","javascript","json","markup","uri"],owner:"danielgtaylor"},hpkp:{title:"HTTP Public-Key-Pins",owner:"ScottHelme"},hsts:{title:"HTTP Strict-Transport-Security",owner:"ScottHelme"},ichigojam:{title:"IchigoJam",owner:"BlueCocoa"},icon:{title:"Icon",owner:"Golmote"},"icu-message-format":{title:"ICU Message Format",owner:"RunDevelopment"},idris:{title:"Idris",alias:"idr",owner:"KeenS",require:"haskell"},ignore:{title:".ignore",owner:"osipxd",alias:["gitignore","hgignore","npmignore"],aliasTitles:{gitignore:".gitignore",hgignore:".hgignore",npmignore:".npmignore"}},inform7:{title:"Inform 7",owner:"Golmote"},ini:{title:"Ini",owner:"aviaryan"},io:{title:"Io",owner:"AlesTsurko"},j:{title:"J",owner:"Golmote"},java:{title:"Java",require:"clike",owner:"sherblot"},javadoc:{title:"JavaDoc",require:["markup","java","javadoclike"],modify:"java",optional:"scala",owner:"RunDevelopment"},javadoclike:{title:"JavaDoc-like",modify:["java","javascript","php"],owner:"RunDevelopment"},javastacktrace:{title:"Java stack trace",owner:"RunDevelopment"},jexl:{title:"Jexl",owner:"czosel"},jolie:{title:"Jolie",require:"clike",owner:"thesave"},jq:{title:"JQ",owner:"RunDevelopment"},jsdoc:{title:"JSDoc",require:["javascript","javadoclike","typescript"],modify:"javascript",optional:["actionscript","coffeescript"],owner:"RunDevelopment"},"js-extras":{title:"JS Extras",require:"javascript",modify:"javascript",optional:["actionscript","coffeescript","flow","n4js","typescript"],owner:"RunDevelopment"},json:{title:"JSON",alias:"webmanifest",aliasTitles:{webmanifest:"Web App Manifest"},owner:"CupOfTea696"},json5:{title:"JSON5",require:"json",owner:"RunDevelopment"},jsonp:{title:"JSONP",require:"json",owner:"RunDevelopment"},jsstacktrace:{title:"JS stack trace",owner:"sbrl"},"js-templates":{title:"JS Templates",require:"javascript",modify:"javascript",optional:["css","css-extras","graphql","markdown","markup","sql"],owner:"RunDevelopment"},julia:{title:"Julia",owner:"cdagnino"},keepalived:{title:"Keepalived Configure",owner:"dev-itsheng"},keyman:{title:"Keyman",owner:"mcdurdin"},kotlin:{title:"Kotlin",alias:["kt","kts"],aliasTitles:{kts:"Kotlin Script"},require:"clike",owner:"Golmote"},kumir:{title:"KuMir (\u041a\u0443\u041c\u0438\u0440)",alias:"kum",owner:"edukisto"},kusto:{title:"Kusto",owner:"RunDevelopment"},latex:{title:"LaTeX",alias:["tex","context"],aliasTitles:{tex:"TeX",context:"ConTeXt"},owner:"japborst"},latte:{title:"Latte",require:["clike","markup-templating","php"],owner:"nette"},less:{title:"Less",require:"css",optional:"css-extras",owner:"Golmote"},lilypond:{title:"LilyPond",require:"scheme",alias:"ly",owner:"RunDevelopment"},liquid:{title:"Liquid",require:"markup-templating",owner:"cinhtau"},lisp:{title:"Lisp",alias:["emacs","elisp","emacs-lisp"],owner:"JuanCaicedo"},livescript:{title:"LiveScript",owner:"Golmote"},llvm:{title:"LLVM IR",owner:"porglezomp"},log:{title:"Log file",optional:"javastacktrace",owner:"RunDevelopment"},lolcode:{title:"LOLCODE",owner:"Golmote"},lua:{title:"Lua",owner:"Golmote"},magma:{title:"Magma (CAS)",owner:"RunDevelopment"},makefile:{title:"Makefile",owner:"Golmote"},markdown:{title:"Markdown",require:"markup",optional:"yaml",alias:"md",owner:"Golmote"},"markup-templating":{title:"Markup templating",require:"markup",owner:"Golmote"},mata:{title:"Mata",owner:"RunDevelopment"},matlab:{title:"MATLAB",owner:"Golmote"},maxscript:{title:"MAXScript",owner:"RunDevelopment"},mel:{title:"MEL",owner:"Golmote"},mermaid:{title:"Mermaid",owner:"RunDevelopment"},metafont:{title:"METAFONT",owner:"LaeriExNihilo"},mizar:{title:"Mizar",owner:"Golmote"},mongodb:{title:"MongoDB",owner:"airs0urce",require:"javascript"},monkey:{title:"Monkey",owner:"Golmote"},moonscript:{title:"MoonScript",alias:"moon",owner:"RunDevelopment"},n1ql:{title:"N1QL",owner:"TMWilds"},n4js:{title:"N4JS",require:"javascript",optional:"jsdoc",alias:"n4jsd",owner:"bsmith-n4"},"nand2tetris-hdl":{title:"Nand To Tetris HDL",owner:"stephanmax"},naniscript:{title:"Naninovel Script",owner:"Elringus",alias:"nani"},nasm:{title:"NASM",owner:"rbmj"},neon:{title:"NEON",owner:"nette"},nevod:{title:"Nevod",owner:"nezaboodka"},nginx:{title:"nginx",owner:"volado"},nim:{title:"Nim",owner:"Golmote"},nix:{title:"Nix",owner:"Golmote"},nsis:{title:"NSIS",owner:"idleberg"},objectivec:{title:"Objective-C",require:"c",alias:"objc",owner:"uranusjr"},ocaml:{title:"OCaml",owner:"Golmote"},odin:{title:"Odin",owner:"edukisto"},opencl:{title:"OpenCL",require:"c",modify:["c","cpp"],owner:"Milania1"},openqasm:{title:"OpenQasm",alias:"qasm",owner:"RunDevelopment"},oz:{title:"Oz",owner:"Golmote"},parigp:{title:"PARI/GP",owner:"Golmote"},parser:{title:"Parser",require:"markup",owner:"Golmote"},pascal:{title:"Pascal",alias:"objectpascal",aliasTitles:{objectpascal:"Object Pascal"},owner:"Golmote"},pascaligo:{title:"Pascaligo",owner:"DefinitelyNotAGoat"},psl:{title:"PATROL Scripting Language",owner:"bertysentry"},pcaxis:{title:"PC-Axis",alias:"px",owner:"RunDevelopment"},peoplecode:{title:"PeopleCode",alias:"pcode",owner:"RunDevelopment"},perl:{title:"Perl",owner:"Golmote"},php:{title:"PHP",require:"markup-templating",owner:"milesj"},phpdoc:{title:"PHPDoc",require:["php","javadoclike"],modify:"php",owner:"RunDevelopment"},"php-extras":{title:"PHP Extras",require:"php",modify:"php",owner:"milesj"},"plant-uml":{title:"PlantUML",alias:"plantuml",owner:"RunDevelopment"},plsql:{title:"PL/SQL",require:"sql",owner:"Golmote"},powerquery:{title:"PowerQuery",alias:["pq","mscript"],owner:"peterbud"},powershell:{title:"PowerShell",owner:"nauzilus"},processing:{title:"Processing",require:"clike",owner:"Golmote"},prolog:{title:"Prolog",owner:"Golmote"},promql:{title:"PromQL",owner:"arendjr"},properties:{title:".properties",owner:"Golmote"},protobuf:{title:"Protocol Buffers",require:"clike",owner:"just-boris"},pug:{title:"Pug",require:["markup","javascript"],optional:["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],owner:"Golmote"},puppet:{title:"Puppet",owner:"Golmote"},pure:{title:"Pure",optional:["c","cpp","fortran"],owner:"Golmote"},purebasic:{title:"PureBasic",require:"clike",alias:"pbfasm",owner:"HeX0R101"},purescript:{title:"PureScript",require:"haskell",alias:"purs",owner:"sriharshachilakapati"},python:{title:"Python",alias:"py",owner:"multipetros"},qsharp:{title:"Q#",require:"clike",alias:"qs",owner:"fedonman"},q:{title:"Q (kdb+ database)",owner:"Golmote"},qml:{title:"QML",require:"javascript",owner:"RunDevelopment"},qore:{title:"Qore",require:"clike",owner:"temnroegg"},r:{title:"R",owner:"Golmote"},racket:{title:"Racket",require:"scheme",alias:"rkt",owner:"RunDevelopment"},cshtml:{title:"Razor C#",alias:"razor",require:["markup","csharp"],optional:["css","css-extras","javascript","js-extras"],owner:"RunDevelopment"},jsx:{title:"React JSX",require:["markup","javascript"],optional:["jsdoc","js-extras","js-templates"],owner:"vkbansal"},tsx:{title:"React TSX",require:["jsx","typescript"]},reason:{title:"Reason",require:"clike",owner:"Golmote"},regex:{title:"Regex",owner:"RunDevelopment"},rego:{title:"Rego",owner:"JordanSh"},renpy:{title:"Ren'py",alias:"rpy",owner:"HyuchiaDiego"},rescript:{title:"ReScript",alias:"res",owner:"vmarcosp"},rest:{title:"reST (reStructuredText)",owner:"Golmote"},rip:{title:"Rip",owner:"ravinggenius"},roboconf:{title:"Roboconf",owner:"Golmote"},robotframework:{title:"Robot Framework",alias:"robot",owner:"RunDevelopment"},ruby:{title:"Ruby",require:"clike",alias:"rb",owner:"samflores"},rust:{title:"Rust",owner:"Golmote"},sas:{title:"SAS",optional:["groovy","lua","sql"],owner:"Golmote"},sass:{title:"Sass (Sass)",require:"css",optional:"css-extras",owner:"Golmote"},scss:{title:"Sass (SCSS)",require:"css",optional:"css-extras",owner:"MoOx"},scala:{title:"Scala",require:"java",owner:"jozic"},scheme:{title:"Scheme",owner:"bacchus123"},"shell-session":{title:"Shell session",require:"bash",alias:["sh-session","shellsession"],owner:"RunDevelopment"},smali:{title:"Smali",owner:"RunDevelopment"},smalltalk:{title:"Smalltalk",owner:"Golmote"},smarty:{title:"Smarty",require:"markup-templating",optional:"php",owner:"Golmote"},sml:{title:"SML",alias:"smlnj",aliasTitles:{smlnj:"SML/NJ"},owner:"RunDevelopment"},solidity:{title:"Solidity (Ethereum)",alias:"sol",require:"clike",owner:"glachaud"},"solution-file":{title:"Solution file",alias:"sln",owner:"RunDevelopment"},soy:{title:"Soy (Closure Template)",require:"markup-templating",owner:"Golmote"},sparql:{title:"SPARQL",require:"turtle",owner:"Triply-Dev",alias:"rq"},"splunk-spl":{title:"Splunk SPL",owner:"RunDevelopment"},sqf:{title:"SQF: Status Quo Function (Arma 3)",require:"clike",owner:"RunDevelopment"},sql:{title:"SQL",owner:"multipetros"},squirrel:{title:"Squirrel",require:"clike",owner:"RunDevelopment"},stan:{title:"Stan",owner:"RunDevelopment"},stata:{title:"Stata Ado",require:["mata","java","python"],owner:"RunDevelopment"},iecst:{title:"Structured Text (IEC 61131-3)",owner:"serhioromano"},stylus:{title:"Stylus",owner:"vkbansal"},supercollider:{title:"SuperCollider",alias:"sclang",owner:"RunDevelopment"},swift:{title:"Swift",owner:"chrischares"},systemd:{title:"Systemd configuration file",owner:"RunDevelopment"},"t4-templating":{title:"T4 templating",owner:"RunDevelopment"},"t4-cs":{title:"T4 Text Templates (C#)",require:["t4-templating","csharp"],alias:"t4",owner:"RunDevelopment"},"t4-vb":{title:"T4 Text Templates (VB)",require:["t4-templating","vbnet"],owner:"RunDevelopment"},tap:{title:"TAP",owner:"isaacs",require:"yaml"},tcl:{title:"Tcl",owner:"PeterChaplin"},tt2:{title:"Template Toolkit 2",require:["clike","markup-templating"],owner:"gflohr"},textile:{title:"Textile",require:"markup",optional:"css",owner:"Golmote"},toml:{title:"TOML",owner:"RunDevelopment"},tremor:{title:"Tremor",alias:["trickle","troy"],owner:"darach",aliasTitles:{trickle:"trickle",troy:"troy"}},turtle:{title:"Turtle",alias:"trig",aliasTitles:{trig:"TriG"},owner:"jakubklimek"},twig:{title:"Twig",require:"markup-templating",owner:"brandonkelly"},typescript:{title:"TypeScript",require:"javascript",optional:"js-templates",alias:"ts",owner:"vkbansal"},typoscript:{title:"TypoScript",alias:"tsconfig",aliasTitles:{tsconfig:"TSConfig"},owner:"dkern"},unrealscript:{title:"UnrealScript",alias:["uscript","uc"],owner:"RunDevelopment"},uorazor:{title:"UO Razor Script",owner:"jaseowns"},uri:{title:"URI",alias:"url",aliasTitles:{url:"URL"},owner:"RunDevelopment"},v:{title:"V",require:"clike",owner:"taggon"},vala:{title:"Vala",require:"clike",optional:"regex",owner:"TemplarVolk"},vbnet:{title:"VB.Net",require:"basic",owner:"Bigsby"},velocity:{title:"Velocity",require:"markup",owner:"Golmote"},verilog:{title:"Verilog",owner:"a-rey"},vhdl:{title:"VHDL",owner:"a-rey"},vim:{title:"vim",owner:"westonganger"},"visual-basic":{title:"Visual Basic",alias:["vb","vba"],aliasTitles:{vba:"VBA"},owner:"Golmote"},warpscript:{title:"WarpScript",owner:"RunDevelopment"},wasm:{title:"WebAssembly",owner:"Golmote"},"web-idl":{title:"Web IDL",alias:"webidl",owner:"RunDevelopment"},wgsl:{title:"WGSL",owner:"Dr4gonthree"},wiki:{title:"Wiki markup",require:"markup",owner:"Golmote"},wolfram:{title:"Wolfram language",alias:["mathematica","nb","wl"],aliasTitles:{mathematica:"Mathematica",nb:"Mathematica Notebook"},owner:"msollami"},wren:{title:"Wren",owner:"clsource"},xeora:{title:"Xeora",require:"markup",alias:"xeoracube",aliasTitles:{xeoracube:"XeoraCube"},owner:"freakmaxi"},"xml-doc":{title:"XML doc (.net)",require:"markup",modify:["csharp","fsharp","vbnet"],owner:"RunDevelopment"},xojo:{title:"Xojo (REALbasic)",owner:"Golmote"},xquery:{title:"XQuery",require:"markup",owner:"Golmote"},yaml:{title:"YAML",alias:"yml",owner:"hason"},yang:{title:"YANG",owner:"RunDevelopment"},zig:{title:"Zig",owner:"RunDevelopment"}},plugins:{meta:{path:"plugins/{id}/prism-{id}",link:"plugins/{id}/"},"line-highlight":{title:"Line Highlight",description:"Highlights specific lines and/or line ranges."},"line-numbers":{title:"Line Numbers",description:"Line number at the beginning of code lines.",owner:"kuba-kubula"},"show-invisibles":{title:"Show Invisibles",description:"Show hidden characters such as tabs and line breaks.",optional:["autolinker","data-uri-highlight"]},autolinker:{title:"Autolinker",description:"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},wpd:{title:"WebPlatform Docs",description:'Makes tokens link to <a href="https://webplatform.github.io/docs/">WebPlatform.org documentation</a>. The links open in a new tab.'},"custom-class":{title:"Custom Class",description:"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.",owner:"dvkndn",noCSS:!0},"file-highlight":{title:"File Highlight",description:"Fetch external files and highlight them with Prism. Used on the Prism website itself.",noCSS:!0},"show-language":{title:"Show Language",description:"Display the highlighted language in code blocks (inline code does not show the label).",owner:"nauzilus",noCSS:!0,require:"toolbar"},"jsonp-highlight":{title:"JSONP Highlight",description:"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).",noCSS:!0,owner:"nauzilus"},"highlight-keywords":{title:"Highlight Keywords",description:"Adds special CSS classes for each keyword for fine-grained highlighting.",owner:"vkbansal",noCSS:!0},"remove-initial-line-feed":{title:"Remove initial line feed",description:"Removes the initial line feed in code blocks.",owner:"Golmote",noCSS:!0},"inline-color":{title:"Inline color",description:"Adds a small inline preview for colors in style sheets.",require:"css-extras",owner:"RunDevelopment"},previewers:{title:"Previewers",description:"Previewers for angles, colors, gradients, easing and time.",require:"css-extras",owner:"Golmote"},autoloader:{title:"Autoloader",description:"Automatically loads the needed languages to highlight the code blocks.",owner:"Golmote",noCSS:!0},"keep-markup":{title:"Keep Markup",description:"Prevents custom markup from being dropped out during highlighting.",owner:"Golmote",optional:"normalize-whitespace",noCSS:!0},"command-line":{title:"Command Line",description:"Display a command line with a prompt and, optionally, the output/response from the commands.",owner:"chriswells0"},"unescaped-markup":{title:"Unescaped Markup",description:"Write markup without having to escape anything."},"normalize-whitespace":{title:"Normalize Whitespace",description:"Supports multiple operations to normalize whitespace in code blocks.",owner:"zeitgeist87",optional:"unescaped-markup",noCSS:!0},"data-uri-highlight":{title:"Data-URI Highlight",description:"Highlights data-URI contents.",owner:"Golmote",noCSS:!0},toolbar:{title:"Toolbar",description:"Attach a toolbar for plugins to easily register buttons on the top of a code block.",owner:"mAAdhaTTah"},"copy-to-clipboard":{title:"Copy to Clipboard Button",description:"Add a button that copies the code block to the clipboard when clicked.",owner:"mAAdhaTTah",require:"toolbar",noCSS:!0},"download-button":{title:"Download Button",description:"A button in the toolbar of a code block adding a convenient way to download a code file.",owner:"Golmote",require:"toolbar",noCSS:!0},"match-braces":{title:"Match braces",description:"Highlights matching braces.",owner:"RunDevelopment"},"diff-highlight":{title:"Diff Highlight",description:"Highlights the code inside diff blocks.",owner:"RunDevelopment",require:"diff"},"filter-highlight-all":{title:"Filter highlightAll",description:"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.",owner:"RunDevelopment",noCSS:!0},treeview:{title:"Treeview",description:"A language with special styles to highlight file system tree structures.",owner:"Golmote"}}})},2885:(e,t,n)=>{const r=n(29901),o=n(39642),a=new Set;function i(e){void 0===e?e=Object.keys(r.languages).filter((e=>"meta"!=e)):Array.isArray(e)||(e=[e]);const t=[...a,...Object.keys(Prism.languages)];o(r,e,t).load((e=>{if(!(e in r.languages))return void(i.silent||console.warn("Language does not exist: "+e));const t="./prism-"+e;delete n.c[n(16500).resolve(t)],delete Prism.languages[e],n(16500)(t),a.add(e)}))}i.silent=!1,e.exports=i},6726:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=6726},16500:(e,t,n)=>{var r={"./":2885};function o(e){var t=a(e);return n(t)}function a(e){if(!n.o(r,e)){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}return r[e]}o.keys=function(){return Object.keys(r)},o.resolve=a,e.exports=o,o.id=16500},39642:e=>{"use strict";var t=function(){var e=function(){};function t(e,t){Array.isArray(e)?e.forEach(t):null!=e&&t(e,0)}function n(e){for(var t={},n=0,r=e.length;n<r;n++)t[e[n]]=!0;return t}function r(e){var n={},r=[];function o(r,a){if(!(r in n)){a.push(r);var i=a.indexOf(r);if(i<a.length-1)throw new Error("Circular dependency: "+a.slice(i).join(" -> "));var l={},s=e[r];if(s){function u(t){if(!(t in e))throw new Error(r+" depends on an unknown component "+t);if(!(t in l))for(var i in o(t,a),l[t]=!0,n[t])l[i]=!0}t(s.require,u),t(s.optional,u),t(s.modify,u)}n[r]=l,a.pop()}}return function(e){var t=n[e];return t||(o(e,r),t=n[e]),t}}function o(e){for(var t in e)return!0;return!1}return function(a,i,l){var s=function(e){var t={};for(var n in e){var r=e[n];for(var o in r)if("meta"!=o){var a=r[o];t[o]="string"==typeof a?{title:a}:a}}return t}(a),u=function(e){var n;return function(r){if(r in e)return r;if(!n)for(var o in n={},e){var a=e[o];t(a&&a.alias,(function(t){if(t in n)throw new Error(t+" cannot be alias for both "+o+" and "+n[t]);if(t in e)throw new Error(t+" cannot be alias of "+o+" because it is a component.");n[t]=o}))}return n[r]||r}}(s);i=i.map(u),l=(l||[]).map(u);var c=n(i),d=n(l);i.forEach((function e(n){var r=s[n];t(r&&r.require,(function(t){t in d||(c[t]=!0,e(t))}))}));for(var f,p=r(s),h=c;o(h);){for(var m in f={},h){var g=s[m];t(g&&g.modify,(function(e){e in d&&(f[e]=!0)}))}for(var v in d)if(!(v in c))for(var b in p(v))if(b in c){f[v]=!0;break}for(var y in h=f)c[y]=!0}var w={getIds:function(){var e=[];return w.load((function(t){e.push(t)})),e},load:function(t,n){return function(t,n,r,o){var a=o?o.series:void 0,i=o?o.parallel:e,l={},s={};function u(e){if(e in l)return l[e];s[e]=!0;var o,c=[];for(var d in t(e))d in n&&c.push(d);if(0===c.length)o=r(e);else{var f=i(c.map((function(e){var t=u(e);return delete s[e],t})));a?o=a(f,(function(){return r(e)})):r(e)}return l[e]=o}for(var c in n)u(c);var d=[];for(var f in s)d.push(l[f]);return i(d)}(p,c,t,n)}};return w}}();e.exports=t},92703:(e,t,n)=>{"use strict";var r=n(50414);function o(){}function a(){}a.resetWarningCache=o,e.exports=function(){function e(e,t,n,o,a,i){if(i!==r){var l=new Error("Calling PropTypes validators directly is not supported by the `prop-types` package. Use PropTypes.checkPropTypes() to call them. Read more at http://fb.me/use-check-prop-types");throw l.name="Invariant Violation",l}}function t(){return e}e.isRequired=e;var n={array:e,bigint:e,bool:e,func:e,number:e,object:e,string:e,symbol:e,any:e,arrayOf:t,element:e,elementType:e,instanceOf:t,node:e,objectOf:t,oneOf:t,oneOfType:t,shape:t,exact:t,checkPropTypes:a,resetWarningCache:o};return n.PropTypes=n,n}},45697:(e,t,n)=>{e.exports=n(92703)()},50414:e=>{"use strict";e.exports="SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED"},64448:(e,t,n)=>{"use strict";var r=n(67294),o=n(27418),a=n(63840);function i(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!r)throw Error(i(227));var l=new Set,s={};function u(e,t){c(e,t),c(e+"Capture",t)}function c(e,t){for(s[e]=t,e=0;e<t.length;e++)l.add(t[e])}var d=!("undefined"==typeof window||void 0===window.document||void 0===window.document.createElement),f=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,p=Object.prototype.hasOwnProperty,h={},m={};function g(e,t,n,r,o,a,i){this.acceptsBooleans=2===t||3===t||4===t,this.attributeName=r,this.attributeNamespace=o,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=a,this.removeEmptyString=i}var v={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach((function(e){v[e]=new g(e,0,!1,e,null,!1,!1)})),[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach((function(e){var t=e[0];v[t]=new g(t,1,!1,e[1],null,!1,!1)})),["contentEditable","draggable","spellCheck","value"].forEach((function(e){v[e]=new g(e,2,!1,e.toLowerCase(),null,!1,!1)})),["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach((function(e){v[e]=new g(e,2,!1,e,null,!1,!1)})),"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach((function(e){v[e]=new g(e,3,!1,e.toLowerCase(),null,!1,!1)})),["checked","multiple","muted","selected"].forEach((function(e){v[e]=new g(e,3,!0,e,null,!1,!1)})),["capture","download"].forEach((function(e){v[e]=new g(e,4,!1,e,null,!1,!1)})),["cols","rows","size","span"].forEach((function(e){v[e]=new g(e,6,!1,e,null,!1,!1)})),["rowSpan","start"].forEach((function(e){v[e]=new g(e,5,!1,e.toLowerCase(),null,!1,!1)}));var b=/[\-:]([a-z])/g;function y(e){return e[1].toUpperCase()}function w(e,t,n,r){var o=v.hasOwnProperty(t)?v[t]:null;(null!==o?0===o.type:!r&&(2<t.length&&("o"===t[0]||"O"===t[0])&&("n"===t[1]||"N"===t[1])))||(function(e,t,n,r){if(null==t||function(e,t,n,r){if(null!==n&&0===n.type)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return!r&&(null!==n?!n.acceptsBooleans:"data-"!==(e=e.toLowerCase().slice(0,5))&&"aria-"!==e);default:return!1}}(e,t,n,r))return!0;if(r)return!1;if(null!==n)switch(n.type){case 3:return!t;case 4:return!1===t;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}(t,n,o,r)&&(n=null),r||null===o?function(e){return!!p.call(m,e)||!p.call(h,e)&&(f.test(e)?m[e]=!0:(h[e]=!0,!1))}(t)&&(null===n?e.removeAttribute(t):e.setAttribute(t,""+n)):o.mustUseProperty?e[o.propertyName]=null===n?3!==o.type&&"":n:(t=o.attributeName,r=o.attributeNamespace,null===n?e.removeAttribute(t):(n=3===(o=o.type)||4===o&&!0===n?"":""+n,r?e.setAttributeNS(r,t,n):e.setAttribute(t,n))))}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach((function(e){var t=e.replace(b,y);v[t]=new g(t,1,!1,e,null,!1,!1)})),"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach((function(e){var t=e.replace(b,y);v[t]=new g(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)})),["xml:base","xml:lang","xml:space"].forEach((function(e){var t=e.replace(b,y);v[t]=new g(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)})),["tabIndex","crossOrigin"].forEach((function(e){v[e]=new g(e,1,!1,e.toLowerCase(),null,!1,!1)})),v.xlinkHref=new g("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1),["src","href","action","formAction"].forEach((function(e){v[e]=new g(e,1,!1,e.toLowerCase(),null,!0,!0)}));var x=r.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,_=60103,k=60106,E=60107,S=60108,C=60114,T=60109,O=60110,D=60112,P=60113,N=60120,I=60115,A=60116,L=60121,R=60128,j=60129,M=60130,F=60131;if("function"==typeof Symbol&&Symbol.for){var B=Symbol.for;_=B("react.element"),k=B("react.portal"),E=B("react.fragment"),S=B("react.strict_mode"),C=B("react.profiler"),T=B("react.provider"),O=B("react.context"),D=B("react.forward_ref"),P=B("react.suspense"),N=B("react.suspense_list"),I=B("react.memo"),A=B("react.lazy"),L=B("react.block"),B("react.scope"),R=B("react.opaque.id"),j=B("react.debug_trace_mode"),M=B("react.offscreen"),F=B("react.legacy_hidden")}var z,$="function"==typeof Symbol&&Symbol.iterator;function U(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=$&&e[$]||e["@@iterator"])?e:null}function H(e){if(void 0===z)try{throw Error()}catch(n){var t=n.stack.trim().match(/\n( *(at )?)/);z=t&&t[1]||""}return"\n"+z+e}var V=!1;function q(e,t){if(!e||V)return"";V=!0;var n=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(t)if(t=function(){throw Error()},Object.defineProperty(t.prototype,"props",{set:function(){throw Error()}}),"object"==typeof Reflect&&Reflect.construct){try{Reflect.construct(t,[])}catch(s){var r=s}Reflect.construct(e,[],t)}else{try{t.call()}catch(s){r=s}e.call(t.prototype)}else{try{throw Error()}catch(s){r=s}e()}}catch(s){if(s&&r&&"string"==typeof s.stack){for(var o=s.stack.split("\n"),a=r.stack.split("\n"),i=o.length-1,l=a.length-1;1<=i&&0<=l&&o[i]!==a[l];)l--;for(;1<=i&&0<=l;i--,l--)if(o[i]!==a[l]){if(1!==i||1!==l)do{if(i--,0>--l||o[i]!==a[l])return"\n"+o[i].replace(" at new "," at ")}while(1<=i&&0<=l);break}}}finally{V=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?H(e):""}function G(e){switch(e.tag){case 5:return H(e.type);case 16:return H("Lazy");case 13:return H("Suspense");case 19:return H("SuspenseList");case 0:case 2:case 15:return e=q(e.type,!1);case 11:return e=q(e.type.render,!1);case 22:return e=q(e.type._render,!1);case 1:return e=q(e.type,!0);default:return""}}function W(e){if(null==e)return null;if("function"==typeof e)return e.displayName||e.name||null;if("string"==typeof e)return e;switch(e){case E:return"Fragment";case k:return"Portal";case C:return"Profiler";case S:return"StrictMode";case P:return"Suspense";case N:return"SuspenseList"}if("object"==typeof e)switch(e.$$typeof){case O:return(e.displayName||"Context")+".Consumer";case T:return(e._context.displayName||"Context")+".Provider";case D:var t=e.render;return t=t.displayName||t.name||"",e.displayName||(""!==t?"ForwardRef("+t+")":"ForwardRef");case I:return W(e.type);case L:return W(e._render);case A:t=e._payload,e=e._init;try{return W(e(t))}catch(n){}}return null}function Z(e){switch(typeof e){case"boolean":case"number":case"object":case"string":case"undefined":return e;default:return""}}function Q(e){var t=e.type;return(e=e.nodeName)&&"input"===e.toLowerCase()&&("checkbox"===t||"radio"===t)}function Y(e){e._valueTracker||(e._valueTracker=function(e){var t=Q(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&void 0!==n&&"function"==typeof n.get&&"function"==typeof n.set){var o=n.get,a=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return o.call(this)},set:function(e){r=""+e,a.call(this,e)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(e){r=""+e},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}(e))}function X(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=Q(e)?e.checked?"true":"false":e.value),(e=r)!==n&&(t.setValue(e),!0)}function K(e){if(void 0===(e=e||("undefined"!=typeof document?document:void 0)))return null;try{return e.activeElement||e.body}catch(t){return e.body}}function J(e,t){var n=t.checked;return o({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=n?n:e._wrapperState.initialChecked})}function ee(e,t){var n=null==t.defaultValue?"":t.defaultValue,r=null!=t.checked?t.checked:t.defaultChecked;n=Z(null!=t.value?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:"checkbox"===t.type||"radio"===t.type?null!=t.checked:null!=t.value}}function te(e,t){null!=(t=t.checked)&&w(e,"checked",t,!1)}function ne(e,t){te(e,t);var n=Z(t.value),r=t.type;if(null!=n)"number"===r?(0===n&&""===e.value||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if("submit"===r||"reset"===r)return void e.removeAttribute("value");t.hasOwnProperty("value")?oe(e,t.type,n):t.hasOwnProperty("defaultValue")&&oe(e,t.type,Z(t.defaultValue)),null==t.checked&&null!=t.defaultChecked&&(e.defaultChecked=!!t.defaultChecked)}function re(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!("submit"!==r&&"reset"!==r||void 0!==t.value&&null!==t.value))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}""!==(n=e.name)&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,""!==n&&(e.name=n)}function oe(e,t,n){"number"===t&&K(e.ownerDocument)===e||(null==n?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}function ae(e,t){return e=o({children:void 0},t),(t=function(e){var t="";return r.Children.forEach(e,(function(e){null!=e&&(t+=e)})),t}(t.children))&&(e.children=t),e}function ie(e,t,n,r){if(e=e.options,t){t={};for(var o=0;o<n.length;o++)t["$"+n[o]]=!0;for(n=0;n<e.length;n++)o=t.hasOwnProperty("$"+e[n].value),e[n].selected!==o&&(e[n].selected=o),o&&r&&(e[n].defaultSelected=!0)}else{for(n=""+Z(n),t=null,o=0;o<e.length;o++){if(e[o].value===n)return e[o].selected=!0,void(r&&(e[o].defaultSelected=!0));null!==t||e[o].disabled||(t=e[o])}null!==t&&(t.selected=!0)}}function le(e,t){if(null!=t.dangerouslySetInnerHTML)throw Error(i(91));return o({},t,{value:void 0,defaultValue:void 0,children:""+e._wrapperState.initialValue})}function se(e,t){var n=t.value;if(null==n){if(n=t.children,t=t.defaultValue,null!=n){if(null!=t)throw Error(i(92));if(Array.isArray(n)){if(!(1>=n.length))throw Error(i(93));n=n[0]}t=n}null==t&&(t=""),n=t}e._wrapperState={initialValue:Z(n)}}function ue(e,t){var n=Z(t.value),r=Z(t.defaultValue);null!=n&&((n=""+n)!==e.value&&(e.value=n),null==t.defaultValue&&e.defaultValue!==n&&(e.defaultValue=n)),null!=r&&(e.defaultValue=""+r)}function ce(e){var t=e.textContent;t===e._wrapperState.initialValue&&""!==t&&null!==t&&(e.value=t)}var de="http://www.w3.org/1999/xhtml",fe="http://www.w3.org/2000/svg";function pe(e){switch(e){case"svg":return"http://www.w3.org/2000/svg";case"math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function he(e,t){return null==e||"http://www.w3.org/1999/xhtml"===e?pe(t):"http://www.w3.org/2000/svg"===e&&"foreignObject"===t?"http://www.w3.org/1999/xhtml":e}var me,ge,ve=(ge=function(e,t){if(e.namespaceURI!==fe||"innerHTML"in e)e.innerHTML=t;else{for((me=me||document.createElement("div")).innerHTML="<svg>"+t.valueOf().toString()+"</svg>",t=me.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}},"undefined"!=typeof MSApp&&MSApp.execUnsafeLocalFunction?function(e,t,n,r){MSApp.execUnsafeLocalFunction((function(){return ge(e,t)}))}:ge);function be(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&3===n.nodeType)return void(n.nodeValue=t)}e.textContent=t}var ye={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},we=["Webkit","ms","Moz","O"];function xe(e,t,n){return null==t||"boolean"==typeof t||""===t?"":n||"number"!=typeof t||0===t||ye.hasOwnProperty(e)&&ye[e]?(""+t).trim():t+"px"}function _e(e,t){for(var n in e=e.style,t)if(t.hasOwnProperty(n)){var r=0===n.indexOf("--"),o=xe(n,t[n],r);"float"===n&&(n="cssFloat"),r?e.setProperty(n,o):e[n]=o}}Object.keys(ye).forEach((function(e){we.forEach((function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),ye[t]=ye[e]}))}));var ke=o({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Ee(e,t){if(t){if(ke[e]&&(null!=t.children||null!=t.dangerouslySetInnerHTML))throw Error(i(137,e));if(null!=t.dangerouslySetInnerHTML){if(null!=t.children)throw Error(i(60));if("object"!=typeof t.dangerouslySetInnerHTML||!("__html"in t.dangerouslySetInnerHTML))throw Error(i(61))}if(null!=t.style&&"object"!=typeof t.style)throw Error(i(62))}}function Se(e,t){if(-1===e.indexOf("-"))return"string"==typeof t.is;switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}function Ce(e){return(e=e.target||e.srcElement||window).correspondingUseElement&&(e=e.correspondingUseElement),3===e.nodeType?e.parentNode:e}var Te=null,Oe=null,De=null;function Pe(e){if(e=ro(e)){if("function"!=typeof Te)throw Error(i(280));var t=e.stateNode;t&&(t=ao(t),Te(e.stateNode,e.type,t))}}function Ne(e){Oe?De?De.push(e):De=[e]:Oe=e}function Ie(){if(Oe){var e=Oe,t=De;if(De=Oe=null,Pe(e),t)for(e=0;e<t.length;e++)Pe(t[e])}}function Ae(e,t){return e(t)}function Le(e,t,n,r,o){return e(t,n,r,o)}function Re(){}var je=Ae,Me=!1,Fe=!1;function Be(){null===Oe&&null===De||(Re(),Ie())}function ze(e,t){var n=e.stateNode;if(null===n)return null;var r=ao(n);if(null===r)return null;n=r[t];e:switch(t){case"onClick":case"onClickCapture":case"onDoubleClick":case"onDoubleClickCapture":case"onMouseDown":case"onMouseDownCapture":case"onMouseMove":case"onMouseMoveCapture":case"onMouseUp":case"onMouseUpCapture":case"onMouseEnter":(r=!r.disabled)||(r=!("button"===(e=e.type)||"input"===e||"select"===e||"textarea"===e)),e=!r;break e;default:e=!1}if(e)return null;if(n&&"function"!=typeof n)throw Error(i(231,t,typeof n));return n}var $e=!1;if(d)try{var Ue={};Object.defineProperty(Ue,"passive",{get:function(){$e=!0}}),window.addEventListener("test",Ue,Ue),window.removeEventListener("test",Ue,Ue)}catch(ge){$e=!1}function He(e,t,n,r,o,a,i,l,s){var u=Array.prototype.slice.call(arguments,3);try{t.apply(n,u)}catch(c){this.onError(c)}}var Ve=!1,qe=null,Ge=!1,We=null,Ze={onError:function(e){Ve=!0,qe=e}};function Qe(e,t,n,r,o,a,i,l,s){Ve=!1,qe=null,He.apply(Ze,arguments)}function Ye(e){var t=e,n=e;if(e.alternate)for(;t.return;)t=t.return;else{e=t;do{0!=(1026&(t=e).flags)&&(n=t.return),e=t.return}while(e)}return 3===t.tag?n:null}function Xe(e){if(13===e.tag){var t=e.memoizedState;if(null===t&&(null!==(e=e.alternate)&&(t=e.memoizedState)),null!==t)return t.dehydrated}return null}function Ke(e){if(Ye(e)!==e)throw Error(i(188))}function Je(e){if(e=function(e){var t=e.alternate;if(!t){if(null===(t=Ye(e)))throw Error(i(188));return t!==e?null:e}for(var n=e,r=t;;){var o=n.return;if(null===o)break;var a=o.alternate;if(null===a){if(null!==(r=o.return)){n=r;continue}break}if(o.child===a.child){for(a=o.child;a;){if(a===n)return Ke(o),e;if(a===r)return Ke(o),t;a=a.sibling}throw Error(i(188))}if(n.return!==r.return)n=o,r=a;else{for(var l=!1,s=o.child;s;){if(s===n){l=!0,n=o,r=a;break}if(s===r){l=!0,r=o,n=a;break}s=s.sibling}if(!l){for(s=a.child;s;){if(s===n){l=!0,n=a,r=o;break}if(s===r){l=!0,r=a,n=o;break}s=s.sibling}if(!l)throw Error(i(189))}}if(n.alternate!==r)throw Error(i(190))}if(3!==n.tag)throw Error(i(188));return n.stateNode.current===n?e:t}(e),!e)return null;for(var t=e;;){if(5===t.tag||6===t.tag)return t;if(t.child)t.child.return=t,t=t.child;else{if(t===e)break;for(;!t.sibling;){if(!t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}}return null}function et(e,t){for(var n=e.alternate;null!==t;){if(t===e||t===n)return!0;t=t.return}return!1}var tt,nt,rt,ot,at=!1,it=[],lt=null,st=null,ut=null,ct=new Map,dt=new Map,ft=[],pt="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");function ht(e,t,n,r,o){return{blockedOn:e,domEventName:t,eventSystemFlags:16|n,nativeEvent:o,targetContainers:[r]}}function mt(e,t){switch(e){case"focusin":case"focusout":lt=null;break;case"dragenter":case"dragleave":st=null;break;case"mouseover":case"mouseout":ut=null;break;case"pointerover":case"pointerout":ct.delete(t.pointerId);break;case"gotpointercapture":case"lostpointercapture":dt.delete(t.pointerId)}}function gt(e,t,n,r,o,a){return null===e||e.nativeEvent!==a?(e=ht(t,n,r,o,a),null!==t&&(null!==(t=ro(t))&&nt(t)),e):(e.eventSystemFlags|=r,t=e.targetContainers,null!==o&&-1===t.indexOf(o)&&t.push(o),e)}function vt(e){var t=no(e.target);if(null!==t){var n=Ye(t);if(null!==n)if(13===(t=n.tag)){if(null!==(t=Xe(n)))return e.blockedOn=t,void ot(e.lanePriority,(function(){a.unstable_runWithPriority(e.priority,(function(){rt(n)}))}))}else if(3===t&&n.stateNode.hydrate)return void(e.blockedOn=3===n.tag?n.stateNode.containerInfo:null)}e.blockedOn=null}function bt(e){if(null!==e.blockedOn)return!1;for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n)return null!==(t=ro(n))&&nt(t),e.blockedOn=n,!1;t.shift()}return!0}function yt(e,t,n){bt(e)&&n.delete(t)}function wt(){for(at=!1;0<it.length;){var e=it[0];if(null!==e.blockedOn){null!==(e=ro(e.blockedOn))&&tt(e);break}for(var t=e.targetContainers;0<t.length;){var n=Jt(e.domEventName,e.eventSystemFlags,t[0],e.nativeEvent);if(null!==n){e.blockedOn=n;break}t.shift()}null===e.blockedOn&&it.shift()}null!==lt&&bt(lt)&&(lt=null),null!==st&&bt(st)&&(st=null),null!==ut&&bt(ut)&&(ut=null),ct.forEach(yt),dt.forEach(yt)}function xt(e,t){e.blockedOn===t&&(e.blockedOn=null,at||(at=!0,a.unstable_scheduleCallback(a.unstable_NormalPriority,wt)))}function _t(e){function t(t){return xt(t,e)}if(0<it.length){xt(it[0],e);for(var n=1;n<it.length;n++){var r=it[n];r.blockedOn===e&&(r.blockedOn=null)}}for(null!==lt&&xt(lt,e),null!==st&&xt(st,e),null!==ut&&xt(ut,e),ct.forEach(t),dt.forEach(t),n=0;n<ft.length;n++)(r=ft[n]).blockedOn===e&&(r.blockedOn=null);for(;0<ft.length&&null===(n=ft[0]).blockedOn;)vt(n),null===n.blockedOn&&ft.shift()}function kt(e,t){var n={};return n[e.toLowerCase()]=t.toLowerCase(),n["Webkit"+e]="webkit"+t,n["Moz"+e]="moz"+t,n}var Et={animationend:kt("Animation","AnimationEnd"),animationiteration:kt("Animation","AnimationIteration"),animationstart:kt("Animation","AnimationStart"),transitionend:kt("Transition","TransitionEnd")},St={},Ct={};function Tt(e){if(St[e])return St[e];if(!Et[e])return e;var t,n=Et[e];for(t in n)if(n.hasOwnProperty(t)&&t in Ct)return St[e]=n[t];return e}d&&(Ct=document.createElement("div").style,"AnimationEvent"in window||(delete Et.animationend.animation,delete Et.animationiteration.animation,delete Et.animationstart.animation),"TransitionEvent"in window||delete Et.transitionend.transition);var Ot=Tt("animationend"),Dt=Tt("animationiteration"),Pt=Tt("animationstart"),Nt=Tt("transitionend"),It=new Map,At=new Map,Lt=["abort","abort",Ot,"animationEnd",Dt,"animationIteration",Pt,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart","lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Nt,"transitionEnd","waiting","waiting"];function Rt(e,t){for(var n=0;n<e.length;n+=2){var r=e[n],o=e[n+1];o="on"+(o[0].toUpperCase()+o.slice(1)),At.set(r,t),It.set(r,o),u(o,[r])}}(0,a.unstable_now)();var jt=8;function Mt(e){if(0!=(1&e))return jt=15,1;if(0!=(2&e))return jt=14,2;if(0!=(4&e))return jt=13,4;var t=24&e;return 0!==t?(jt=12,t):0!=(32&e)?(jt=11,32):0!==(t=192&e)?(jt=10,t):0!=(256&e)?(jt=9,256):0!==(t=3584&e)?(jt=8,t):0!=(4096&e)?(jt=7,4096):0!==(t=4186112&e)?(jt=6,t):0!==(t=62914560&e)?(jt=5,t):67108864&e?(jt=4,67108864):0!=(134217728&e)?(jt=3,134217728):0!==(t=805306368&e)?(jt=2,t):0!=(1073741824&e)?(jt=1,1073741824):(jt=8,e)}function Ft(e,t){var n=e.pendingLanes;if(0===n)return jt=0;var r=0,o=0,a=e.expiredLanes,i=e.suspendedLanes,l=e.pingedLanes;if(0!==a)r=a,o=jt=15;else if(0!==(a=134217727&n)){var s=a&~i;0!==s?(r=Mt(s),o=jt):0!==(l&=a)&&(r=Mt(l),o=jt)}else 0!==(a=n&~i)?(r=Mt(a),o=jt):0!==l&&(r=Mt(l),o=jt);if(0===r)return 0;if(r=n&((0>(r=31-Vt(r))?0:1<<r)<<1)-1,0!==t&&t!==r&&0==(t&i)){if(Mt(t),o<=jt)return t;jt=o}if(0!==(t=e.entangledLanes))for(e=e.entanglements,t&=r;0<t;)o=1<<(n=31-Vt(t)),r|=e[n],t&=~o;return r}function Bt(e){return 0!==(e=-1073741825&e.pendingLanes)?e:1073741824&e?1073741824:0}function zt(e,t){switch(e){case 15:return 1;case 14:return 2;case 12:return 0===(e=$t(24&~t))?zt(10,t):e;case 10:return 0===(e=$t(192&~t))?zt(8,t):e;case 8:return 0===(e=$t(3584&~t))&&(0===(e=$t(4186112&~t))&&(e=512)),e;case 2:return 0===(t=$t(805306368&~t))&&(t=268435456),t}throw Error(i(358,e))}function $t(e){return e&-e}function Ut(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function Ht(e,t,n){e.pendingLanes|=t;var r=t-1;e.suspendedLanes&=r,e.pingedLanes&=r,(e=e.eventTimes)[t=31-Vt(t)]=n}var Vt=Math.clz32?Math.clz32:function(e){return 0===e?32:31-(qt(e)/Gt|0)|0},qt=Math.log,Gt=Math.LN2;var Wt=a.unstable_UserBlockingPriority,Zt=a.unstable_runWithPriority,Qt=!0;function Yt(e,t,n,r){Me||Re();var o=Kt,a=Me;Me=!0;try{Le(o,e,t,n,r)}finally{(Me=a)||Be()}}function Xt(e,t,n,r){Zt(Wt,Kt.bind(null,e,t,n,r))}function Kt(e,t,n,r){var o;if(Qt)if((o=0==(4&t))&&0<it.length&&-1<pt.indexOf(e))e=ht(null,e,t,n,r),it.push(e);else{var a=Jt(e,t,n,r);if(null===a)o&&mt(e,r);else{if(o){if(-1<pt.indexOf(e))return e=ht(a,e,t,n,r),void it.push(e);if(function(e,t,n,r,o){switch(t){case"focusin":return lt=gt(lt,e,t,n,r,o),!0;case"dragenter":return st=gt(st,e,t,n,r,o),!0;case"mouseover":return ut=gt(ut,e,t,n,r,o),!0;case"pointerover":var a=o.pointerId;return ct.set(a,gt(ct.get(a)||null,e,t,n,r,o)),!0;case"gotpointercapture":return a=o.pointerId,dt.set(a,gt(dt.get(a)||null,e,t,n,r,o)),!0}return!1}(a,e,t,n,r))return;mt(e,r)}Rr(e,t,r,null,n)}}}function Jt(e,t,n,r){var o=Ce(r);if(null!==(o=no(o))){var a=Ye(o);if(null===a)o=null;else{var i=a.tag;if(13===i){if(null!==(o=Xe(a)))return o;o=null}else if(3===i){if(a.stateNode.hydrate)return 3===a.tag?a.stateNode.containerInfo:null;o=null}else a!==o&&(o=null)}}return Rr(e,t,r,o,n),null}var en=null,tn=null,nn=null;function rn(){if(nn)return nn;var e,t,n=tn,r=n.length,o="value"in en?en.value:en.textContent,a=o.length;for(e=0;e<r&&n[e]===o[e];e++);var i=r-e;for(t=1;t<=i&&n[r-t]===o[a-t];t++);return nn=o.slice(e,1<t?1-t:void 0)}function on(e){var t=e.keyCode;return"charCode"in e?0===(e=e.charCode)&&13===t&&(e=13):e=t,10===e&&(e=13),32<=e||13===e?e:0}function an(){return!0}function ln(){return!1}function sn(e){function t(t,n,r,o,a){for(var i in this._reactName=t,this._targetInst=r,this.type=n,this.nativeEvent=o,this.target=a,this.currentTarget=null,e)e.hasOwnProperty(i)&&(t=e[i],this[i]=t?t(o):o[i]);return this.isDefaultPrevented=(null!=o.defaultPrevented?o.defaultPrevented:!1===o.returnValue)?an:ln,this.isPropagationStopped=ln,this}return o(t.prototype,{preventDefault:function(){this.defaultPrevented=!0;var e=this.nativeEvent;e&&(e.preventDefault?e.preventDefault():"unknown"!=typeof e.returnValue&&(e.returnValue=!1),this.isDefaultPrevented=an)},stopPropagation:function(){var e=this.nativeEvent;e&&(e.stopPropagation?e.stopPropagation():"unknown"!=typeof e.cancelBubble&&(e.cancelBubble=!0),this.isPropagationStopped=an)},persist:function(){},isPersistent:an}),t}var un,cn,dn,fn={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(e){return e.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},pn=sn(fn),hn=o({},fn,{view:0,detail:0}),mn=sn(hn),gn=o({},hn,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:On,button:0,buttons:0,relatedTarget:function(e){return void 0===e.relatedTarget?e.fromElement===e.srcElement?e.toElement:e.fromElement:e.relatedTarget},movementX:function(e){return"movementX"in e?e.movementX:(e!==dn&&(dn&&"mousemove"===e.type?(un=e.screenX-dn.screenX,cn=e.screenY-dn.screenY):cn=un=0,dn=e),un)},movementY:function(e){return"movementY"in e?e.movementY:cn}}),vn=sn(gn),bn=sn(o({},gn,{dataTransfer:0})),yn=sn(o({},hn,{relatedTarget:0})),wn=sn(o({},fn,{animationName:0,elapsedTime:0,pseudoElement:0})),xn=o({},fn,{clipboardData:function(e){return"clipboardData"in e?e.clipboardData:window.clipboardData}}),_n=sn(xn),kn=sn(o({},fn,{data:0})),En={Esc:"Escape",Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Sn={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Cn={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Tn(e){var t=this.nativeEvent;return t.getModifierState?t.getModifierState(e):!!(e=Cn[e])&&!!t[e]}function On(){return Tn}var Dn=o({},hn,{key:function(e){if(e.key){var t=En[e.key]||e.key;if("Unidentified"!==t)return t}return"keypress"===e.type?13===(e=on(e))?"Enter":String.fromCharCode(e):"keydown"===e.type||"keyup"===e.type?Sn[e.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:On,charCode:function(e){return"keypress"===e.type?on(e):0},keyCode:function(e){return"keydown"===e.type||"keyup"===e.type?e.keyCode:0},which:function(e){return"keypress"===e.type?on(e):"keydown"===e.type||"keyup"===e.type?e.keyCode:0}}),Pn=sn(Dn),Nn=sn(o({},gn,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0})),In=sn(o({},hn,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:On})),An=sn(o({},fn,{propertyName:0,elapsedTime:0,pseudoElement:0})),Ln=o({},gn,{deltaX:function(e){return"deltaX"in e?e.deltaX:"wheelDeltaX"in e?-e.wheelDeltaX:0},deltaY:function(e){return"deltaY"in e?e.deltaY:"wheelDeltaY"in e?-e.wheelDeltaY:"wheelDelta"in e?-e.wheelDelta:0},deltaZ:0,deltaMode:0}),Rn=sn(Ln),jn=[9,13,27,32],Mn=d&&"CompositionEvent"in window,Fn=null;d&&"documentMode"in document&&(Fn=document.documentMode);var Bn=d&&"TextEvent"in window&&!Fn,zn=d&&(!Mn||Fn&&8<Fn&&11>=Fn),$n=String.fromCharCode(32),Un=!1;function Hn(e,t){switch(e){case"keyup":return-1!==jn.indexOf(t.keyCode);case"keydown":return 229!==t.keyCode;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Vn(e){return"object"==typeof(e=e.detail)&&"data"in e?e.data:null}var qn=!1;var Gn={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function Wn(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return"input"===t?!!Gn[e.type]:"textarea"===t}function Zn(e,t,n,r){Ne(r),0<(t=Mr(t,"onChange")).length&&(n=new pn("onChange","change",null,n,r),e.push({event:n,listeners:t}))}var Qn=null,Yn=null;function Xn(e){Dr(e,0)}function Kn(e){if(X(oo(e)))return e}function Jn(e,t){if("change"===e)return t}var er=!1;if(d){var tr;if(d){var nr="oninput"in document;if(!nr){var rr=document.createElement("div");rr.setAttribute("oninput","return;"),nr="function"==typeof rr.oninput}tr=nr}else tr=!1;er=tr&&(!document.documentMode||9<document.documentMode)}function or(){Qn&&(Qn.detachEvent("onpropertychange",ar),Yn=Qn=null)}function ar(e){if("value"===e.propertyName&&Kn(Yn)){var t=[];if(Zn(t,Yn,e,Ce(e)),e=Xn,Me)e(t);else{Me=!0;try{Ae(e,t)}finally{Me=!1,Be()}}}}function ir(e,t,n){"focusin"===e?(or(),Yn=n,(Qn=t).attachEvent("onpropertychange",ar)):"focusout"===e&&or()}function lr(e){if("selectionchange"===e||"keyup"===e||"keydown"===e)return Kn(Yn)}function sr(e,t){if("click"===e)return Kn(t)}function ur(e,t){if("input"===e||"change"===e)return Kn(t)}var cr="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},dr=Object.prototype.hasOwnProperty;function fr(e,t){if(cr(e,t))return!0;if("object"!=typeof e||null===e||"object"!=typeof t||null===t)return!1;var n=Object.keys(e),r=Object.keys(t);if(n.length!==r.length)return!1;for(r=0;r<n.length;r++)if(!dr.call(t,n[r])||!cr(e[n[r]],t[n[r]]))return!1;return!0}function pr(e){for(;e&&e.firstChild;)e=e.firstChild;return e}function hr(e,t){var n,r=pr(e);for(e=0;r;){if(3===r.nodeType){if(n=e+r.textContent.length,e<=t&&n>=t)return{node:r,offset:t-e};e=n}e:{for(;r;){if(r.nextSibling){r=r.nextSibling;break e}r=r.parentNode}r=void 0}r=pr(r)}}function mr(e,t){return!(!e||!t)&&(e===t||(!e||3!==e.nodeType)&&(t&&3===t.nodeType?mr(e,t.parentNode):"contains"in e?e.contains(t):!!e.compareDocumentPosition&&!!(16&e.compareDocumentPosition(t))))}function gr(){for(var e=window,t=K();t instanceof e.HTMLIFrameElement;){try{var n="string"==typeof t.contentWindow.location.href}catch(r){n=!1}if(!n)break;t=K((e=t.contentWindow).document)}return t}function vr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&("input"===t&&("text"===e.type||"search"===e.type||"tel"===e.type||"url"===e.type||"password"===e.type)||"textarea"===t||"true"===e.contentEditable)}var br=d&&"documentMode"in document&&11>=document.documentMode,yr=null,wr=null,xr=null,_r=!1;function kr(e,t,n){var r=n.window===n?n.document:9===n.nodeType?n:n.ownerDocument;_r||null==yr||yr!==K(r)||("selectionStart"in(r=yr)&&vr(r)?r={start:r.selectionStart,end:r.selectionEnd}:r={anchorNode:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection()).anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset},xr&&fr(xr,r)||(xr=r,0<(r=Mr(wr,"onSelect")).length&&(t=new pn("onSelect","select",null,t,n),e.push({event:t,listeners:r}),t.target=yr)))}Rt("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),0),Rt("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1),Rt(Lt,2);for(var Er="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),Sr=0;Sr<Er.length;Sr++)At.set(Er[Sr],0);c("onMouseEnter",["mouseout","mouseover"]),c("onMouseLeave",["mouseout","mouseover"]),c("onPointerEnter",["pointerout","pointerover"]),c("onPointerLeave",["pointerout","pointerover"]),u("onChange","change click focusin focusout input keydown keyup selectionchange".split(" ")),u("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" ")),u("onBeforeInput",["compositionend","keypress","textInput","paste"]),u("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" ")),u("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Cr="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Tr=new Set("cancel close invalid load scroll toggle".split(" ").concat(Cr));function Or(e,t,n){var r=e.type||"unknown-event";e.currentTarget=n,function(e,t,n,r,o,a,l,s,u){if(Qe.apply(this,arguments),Ve){if(!Ve)throw Error(i(198));var c=qe;Ve=!1,qe=null,Ge||(Ge=!0,We=c)}}(r,t,void 0,e),e.currentTarget=null}function Dr(e,t){t=0!=(4&t);for(var n=0;n<e.length;n++){var r=e[n],o=r.event;r=r.listeners;e:{var a=void 0;if(t)for(var i=r.length-1;0<=i;i--){var l=r[i],s=l.instance,u=l.currentTarget;if(l=l.listener,s!==a&&o.isPropagationStopped())break e;Or(o,l,u),a=s}else for(i=0;i<r.length;i++){if(s=(l=r[i]).instance,u=l.currentTarget,l=l.listener,s!==a&&o.isPropagationStopped())break e;Or(o,l,u),a=s}}}if(Ge)throw e=We,Ge=!1,We=null,e}function Pr(e,t){var n=io(t),r=e+"__bubble";n.has(r)||(Lr(t,e,2,!1),n.add(r))}var Nr="_reactListening"+Math.random().toString(36).slice(2);function Ir(e){e[Nr]||(e[Nr]=!0,l.forEach((function(t){Tr.has(t)||Ar(t,!1,e,null),Ar(t,!0,e,null)})))}function Ar(e,t,n,r){var o=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,a=n;if("selectionchange"===e&&9!==n.nodeType&&(a=n.ownerDocument),null!==r&&!t&&Tr.has(e)){if("scroll"!==e)return;o|=2,a=r}var i=io(a),l=e+"__"+(t?"capture":"bubble");i.has(l)||(t&&(o|=4),Lr(a,e,o,t),i.add(l))}function Lr(e,t,n,r){var o=At.get(t);switch(void 0===o?2:o){case 0:o=Yt;break;case 1:o=Xt;break;default:o=Kt}n=o.bind(null,t,n,e),o=void 0,!$e||"touchstart"!==t&&"touchmove"!==t&&"wheel"!==t||(o=!0),r?void 0!==o?e.addEventListener(t,n,{capture:!0,passive:o}):e.addEventListener(t,n,!0):void 0!==o?e.addEventListener(t,n,{passive:o}):e.addEventListener(t,n,!1)}function Rr(e,t,n,r,o){var a=r;if(0==(1&t)&&0==(2&t)&&null!==r)e:for(;;){if(null===r)return;var i=r.tag;if(3===i||4===i){var l=r.stateNode.containerInfo;if(l===o||8===l.nodeType&&l.parentNode===o)break;if(4===i)for(i=r.return;null!==i;){var s=i.tag;if((3===s||4===s)&&((s=i.stateNode.containerInfo)===o||8===s.nodeType&&s.parentNode===o))return;i=i.return}for(;null!==l;){if(null===(i=no(l)))return;if(5===(s=i.tag)||6===s){r=a=i;continue e}l=l.parentNode}}r=r.return}!function(e,t,n){if(Fe)return e(t,n);Fe=!0;try{je(e,t,n)}finally{Fe=!1,Be()}}((function(){var r=a,o=Ce(n),i=[];e:{var l=It.get(e);if(void 0!==l){var s=pn,u=e;switch(e){case"keypress":if(0===on(n))break e;case"keydown":case"keyup":s=Pn;break;case"focusin":u="focus",s=yn;break;case"focusout":u="blur",s=yn;break;case"beforeblur":case"afterblur":s=yn;break;case"click":if(2===n.button)break e;case"auxclick":case"dblclick":case"mousedown":case"mousemove":case"mouseup":case"mouseout":case"mouseover":case"contextmenu":s=vn;break;case"drag":case"dragend":case"dragenter":case"dragexit":case"dragleave":case"dragover":case"dragstart":case"drop":s=bn;break;case"touchcancel":case"touchend":case"touchmove":case"touchstart":s=In;break;case Ot:case Dt:case Pt:s=wn;break;case Nt:s=An;break;case"scroll":s=mn;break;case"wheel":s=Rn;break;case"copy":case"cut":case"paste":s=_n;break;case"gotpointercapture":case"lostpointercapture":case"pointercancel":case"pointerdown":case"pointermove":case"pointerout":case"pointerover":case"pointerup":s=Nn}var c=0!=(4&t),d=!c&&"scroll"===e,f=c?null!==l?l+"Capture":null:l;c=[];for(var p,h=r;null!==h;){var m=(p=h).stateNode;if(5===p.tag&&null!==m&&(p=m,null!==f&&(null!=(m=ze(h,f))&&c.push(jr(h,m,p)))),d)break;h=h.return}0<c.length&&(l=new s(l,u,null,n,o),i.push({event:l,listeners:c}))}}if(0==(7&t)){if(s="mouseout"===e||"pointerout"===e,(!(l="mouseover"===e||"pointerover"===e)||0!=(16&t)||!(u=n.relatedTarget||n.fromElement)||!no(u)&&!u[eo])&&(s||l)&&(l=o.window===o?o:(l=o.ownerDocument)?l.defaultView||l.parentWindow:window,s?(s=r,null!==(u=(u=n.relatedTarget||n.toElement)?no(u):null)&&(u!==(d=Ye(u))||5!==u.tag&&6!==u.tag)&&(u=null)):(s=null,u=r),s!==u)){if(c=vn,m="onMouseLeave",f="onMouseEnter",h="mouse","pointerout"!==e&&"pointerover"!==e||(c=Nn,m="onPointerLeave",f="onPointerEnter",h="pointer"),d=null==s?l:oo(s),p=null==u?l:oo(u),(l=new c(m,h+"leave",s,n,o)).target=d,l.relatedTarget=p,m=null,no(o)===r&&((c=new c(f,h+"enter",u,n,o)).target=p,c.relatedTarget=d,m=c),d=m,s&&u)e:{for(f=u,h=0,p=c=s;p;p=Fr(p))h++;for(p=0,m=f;m;m=Fr(m))p++;for(;0<h-p;)c=Fr(c),h--;for(;0<p-h;)f=Fr(f),p--;for(;h--;){if(c===f||null!==f&&c===f.alternate)break e;c=Fr(c),f=Fr(f)}c=null}else c=null;null!==s&&Br(i,l,s,c,!1),null!==u&&null!==d&&Br(i,d,u,c,!0)}if("select"===(s=(l=r?oo(r):window).nodeName&&l.nodeName.toLowerCase())||"input"===s&&"file"===l.type)var g=Jn;else if(Wn(l))if(er)g=ur;else{g=lr;var v=ir}else(s=l.nodeName)&&"input"===s.toLowerCase()&&("checkbox"===l.type||"radio"===l.type)&&(g=sr);switch(g&&(g=g(e,r))?Zn(i,g,n,o):(v&&v(e,l,r),"focusout"===e&&(v=l._wrapperState)&&v.controlled&&"number"===l.type&&oe(l,"number",l.value)),v=r?oo(r):window,e){case"focusin":(Wn(v)||"true"===v.contentEditable)&&(yr=v,wr=r,xr=null);break;case"focusout":xr=wr=yr=null;break;case"mousedown":_r=!0;break;case"contextmenu":case"mouseup":case"dragend":_r=!1,kr(i,n,o);break;case"selectionchange":if(br)break;case"keydown":case"keyup":kr(i,n,o)}var b;if(Mn)e:{switch(e){case"compositionstart":var y="onCompositionStart";break e;case"compositionend":y="onCompositionEnd";break e;case"compositionupdate":y="onCompositionUpdate";break e}y=void 0}else qn?Hn(e,n)&&(y="onCompositionEnd"):"keydown"===e&&229===n.keyCode&&(y="onCompositionStart");y&&(zn&&"ko"!==n.locale&&(qn||"onCompositionStart"!==y?"onCompositionEnd"===y&&qn&&(b=rn()):(tn="value"in(en=o)?en.value:en.textContent,qn=!0)),0<(v=Mr(r,y)).length&&(y=new kn(y,e,null,n,o),i.push({event:y,listeners:v}),b?y.data=b:null!==(b=Vn(n))&&(y.data=b))),(b=Bn?function(e,t){switch(e){case"compositionend":return Vn(t);case"keypress":return 32!==t.which?null:(Un=!0,$n);case"textInput":return(e=t.data)===$n&&Un?null:e;default:return null}}(e,n):function(e,t){if(qn)return"compositionend"===e||!Mn&&Hn(e,t)?(e=rn(),nn=tn=en=null,qn=!1,e):null;switch(e){case"paste":default:return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1<t.char.length)return t.char;if(t.which)return String.fromCharCode(t.which)}return null;case"compositionend":return zn&&"ko"!==t.locale?null:t.data}}(e,n))&&(0<(r=Mr(r,"onBeforeInput")).length&&(o=new kn("onBeforeInput","beforeinput",null,n,o),i.push({event:o,listeners:r}),o.data=b))}Dr(i,t)}))}function jr(e,t,n){return{instance:e,listener:t,currentTarget:n}}function Mr(e,t){for(var n=t+"Capture",r=[];null!==e;){var o=e,a=o.stateNode;5===o.tag&&null!==a&&(o=a,null!=(a=ze(e,n))&&r.unshift(jr(e,a,o)),null!=(a=ze(e,t))&&r.push(jr(e,a,o))),e=e.return}return r}function Fr(e){if(null===e)return null;do{e=e.return}while(e&&5!==e.tag);return e||null}function Br(e,t,n,r,o){for(var a=t._reactName,i=[];null!==n&&n!==r;){var l=n,s=l.alternate,u=l.stateNode;if(null!==s&&s===r)break;5===l.tag&&null!==u&&(l=u,o?null!=(s=ze(n,a))&&i.unshift(jr(n,s,l)):o||null!=(s=ze(n,a))&&i.push(jr(n,s,l))),n=n.return}0!==i.length&&e.push({event:t,listeners:i})}function zr(){}var $r=null,Ur=null;function Hr(e,t){switch(e){case"button":case"input":case"select":case"textarea":return!!t.autoFocus}return!1}function Vr(e,t){return"textarea"===e||"option"===e||"noscript"===e||"string"==typeof t.children||"number"==typeof t.children||"object"==typeof t.dangerouslySetInnerHTML&&null!==t.dangerouslySetInnerHTML&&null!=t.dangerouslySetInnerHTML.__html}var qr="function"==typeof setTimeout?setTimeout:void 0,Gr="function"==typeof clearTimeout?clearTimeout:void 0;function Wr(e){1===e.nodeType?e.textContent="":9===e.nodeType&&(null!=(e=e.body)&&(e.textContent=""))}function Zr(e){for(;null!=e;e=e.nextSibling){var t=e.nodeType;if(1===t||3===t)break}return e}function Qr(e){e=e.previousSibling;for(var t=0;e;){if(8===e.nodeType){var n=e.data;if("$"===n||"$!"===n||"$?"===n){if(0===t)return e;t--}else"/$"===n&&t++}e=e.previousSibling}return null}var Yr=0;var Xr=Math.random().toString(36).slice(2),Kr="__reactFiber$"+Xr,Jr="__reactProps$"+Xr,eo="__reactContainer$"+Xr,to="__reactEvents$"+Xr;function no(e){var t=e[Kr];if(t)return t;for(var n=e.parentNode;n;){if(t=n[eo]||n[Kr]){if(n=t.alternate,null!==t.child||null!==n&&null!==n.child)for(e=Qr(e);null!==e;){if(n=e[Kr])return n;e=Qr(e)}return t}n=(e=n).parentNode}return null}function ro(e){return!(e=e[Kr]||e[eo])||5!==e.tag&&6!==e.tag&&13!==e.tag&&3!==e.tag?null:e}function oo(e){if(5===e.tag||6===e.tag)return e.stateNode;throw Error(i(33))}function ao(e){return e[Jr]||null}function io(e){var t=e[to];return void 0===t&&(t=e[to]=new Set),t}var lo=[],so=-1;function uo(e){return{current:e}}function co(e){0>so||(e.current=lo[so],lo[so]=null,so--)}function fo(e,t){so++,lo[so]=e.current,e.current=t}var po={},ho=uo(po),mo=uo(!1),go=po;function vo(e,t){var n=e.type.contextTypes;if(!n)return po;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var o,a={};for(o in n)a[o]=t[o];return r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=a),a}function bo(e){return null!=(e=e.childContextTypes)}function yo(){co(mo),co(ho)}function wo(e,t,n){if(ho.current!==po)throw Error(i(168));fo(ho,t),fo(mo,n)}function xo(e,t,n){var r=e.stateNode;if(e=t.childContextTypes,"function"!=typeof r.getChildContext)return n;for(var a in r=r.getChildContext())if(!(a in e))throw Error(i(108,W(t)||"Unknown",a));return o({},n,r)}function _o(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||po,go=ho.current,fo(ho,e),fo(mo,mo.current),!0}function ko(e,t,n){var r=e.stateNode;if(!r)throw Error(i(169));n?(e=xo(e,t,go),r.__reactInternalMemoizedMergedChildContext=e,co(mo),co(ho),fo(ho,e)):co(mo),fo(mo,n)}var Eo=null,So=null,Co=a.unstable_runWithPriority,To=a.unstable_scheduleCallback,Oo=a.unstable_cancelCallback,Do=a.unstable_shouldYield,Po=a.unstable_requestPaint,No=a.unstable_now,Io=a.unstable_getCurrentPriorityLevel,Ao=a.unstable_ImmediatePriority,Lo=a.unstable_UserBlockingPriority,Ro=a.unstable_NormalPriority,jo=a.unstable_LowPriority,Mo=a.unstable_IdlePriority,Fo={},Bo=void 0!==Po?Po:function(){},zo=null,$o=null,Uo=!1,Ho=No(),Vo=1e4>Ho?No:function(){return No()-Ho};function qo(){switch(Io()){case Ao:return 99;case Lo:return 98;case Ro:return 97;case jo:return 96;case Mo:return 95;default:throw Error(i(332))}}function Go(e){switch(e){case 99:return Ao;case 98:return Lo;case 97:return Ro;case 96:return jo;case 95:return Mo;default:throw Error(i(332))}}function Wo(e,t){return e=Go(e),Co(e,t)}function Zo(e,t,n){return e=Go(e),To(e,t,n)}function Qo(){if(null!==$o){var e=$o;$o=null,Oo(e)}Yo()}function Yo(){if(!Uo&&null!==zo){Uo=!0;var e=0;try{var t=zo;Wo(99,(function(){for(;e<t.length;e++){var n=t[e];do{n=n(!0)}while(null!==n)}})),zo=null}catch(n){throw null!==zo&&(zo=zo.slice(e+1)),To(Ao,Qo),n}finally{Uo=!1}}}var Xo=x.ReactCurrentBatchConfig;function Ko(e,t){if(e&&e.defaultProps){for(var n in t=o({},t),e=e.defaultProps)void 0===t[n]&&(t[n]=e[n]);return t}return t}var Jo=uo(null),ea=null,ta=null,na=null;function ra(){na=ta=ea=null}function oa(e){var t=Jo.current;co(Jo),e.type._context._currentValue=t}function aa(e,t){for(;null!==e;){var n=e.alternate;if((e.childLanes&t)===t){if(null===n||(n.childLanes&t)===t)break;n.childLanes|=t}else e.childLanes|=t,null!==n&&(n.childLanes|=t);e=e.return}}function ia(e,t){ea=e,na=ta=null,null!==(e=e.dependencies)&&null!==e.firstContext&&(0!=(e.lanes&t)&&(Mi=!0),e.firstContext=null)}function la(e,t){if(na!==e&&!1!==t&&0!==t)if("number"==typeof t&&1073741823!==t||(na=e,t=1073741823),t={context:e,observedBits:t,next:null},null===ta){if(null===ea)throw Error(i(308));ta=t,ea.dependencies={lanes:0,firstContext:t,responders:null}}else ta=ta.next=t;return e._currentValue}var sa=!1;function ua(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function ca(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function da(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function fa(e,t){if(null!==(e=e.updateQueue)){var n=(e=e.shared).pending;null===n?t.next=t:(t.next=n.next,n.next=t),e.pending=t}}function pa(e,t){var n=e.updateQueue,r=e.alternate;if(null!==r&&n===(r=r.updateQueue)){var o=null,a=null;if(null!==(n=n.firstBaseUpdate)){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};null===a?o=a=i:a=a.next=i,n=n.next}while(null!==n);null===a?o=a=t:a=a.next=t}else o=a=t;return n={baseState:r.baseState,firstBaseUpdate:o,lastBaseUpdate:a,shared:r.shared,effects:r.effects},void(e.updateQueue=n)}null===(e=n.lastBaseUpdate)?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function ha(e,t,n,r){var a=e.updateQueue;sa=!1;var i=a.firstBaseUpdate,l=a.lastBaseUpdate,s=a.shared.pending;if(null!==s){a.shared.pending=null;var u=s,c=u.next;u.next=null,null===l?i=c:l.next=c,l=u;var d=e.alternate;if(null!==d){var f=(d=d.updateQueue).lastBaseUpdate;f!==l&&(null===f?d.firstBaseUpdate=c:f.next=c,d.lastBaseUpdate=u)}}if(null!==i){for(f=a.baseState,l=0,d=c=u=null;;){s=i.lane;var p=i.eventTime;if((r&s)===s){null!==d&&(d=d.next={eventTime:p,lane:0,tag:i.tag,payload:i.payload,callback:i.callback,next:null});e:{var h=e,m=i;switch(s=t,p=n,m.tag){case 1:if("function"==typeof(h=m.payload)){f=h.call(p,f,s);break e}f=h;break e;case 3:h.flags=-4097&h.flags|64;case 0:if(null==(s="function"==typeof(h=m.payload)?h.call(p,f,s):h))break e;f=o({},f,s);break e;case 2:sa=!0}}null!==i.callback&&(e.flags|=32,null===(s=a.effects)?a.effects=[i]:s.push(i))}else p={eventTime:p,lane:s,tag:i.tag,payload:i.payload,callback:i.callback,next:null},null===d?(c=d=p,u=f):d=d.next=p,l|=s;if(null===(i=i.next)){if(null===(s=a.shared.pending))break;i=s.next,s.next=null,a.lastBaseUpdate=s,a.shared.pending=null}}null===d&&(u=f),a.baseState=u,a.firstBaseUpdate=c,a.lastBaseUpdate=d,$l|=l,e.lanes=l,e.memoizedState=f}}function ma(e,t,n){if(e=t.effects,t.effects=null,null!==e)for(t=0;t<e.length;t++){var r=e[t],o=r.callback;if(null!==o){if(r.callback=null,r=n,"function"!=typeof o)throw Error(i(191,o));o.call(r)}}}var ga=(new r.Component).refs;function va(e,t,n,r){n=null==(n=n(r,t=e.memoizedState))?t:o({},t,n),e.memoizedState=n,0===e.lanes&&(e.updateQueue.baseState=n)}var ba={isMounted:function(e){return!!(e=e._reactInternals)&&Ye(e)===e},enqueueSetState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=da(r,o);a.payload=t,null!=n&&(a.callback=n),fa(e,a),hs(e,o,r)},enqueueReplaceState:function(e,t,n){e=e._reactInternals;var r=fs(),o=ps(e),a=da(r,o);a.tag=1,a.payload=t,null!=n&&(a.callback=n),fa(e,a),hs(e,o,r)},enqueueForceUpdate:function(e,t){e=e._reactInternals;var n=fs(),r=ps(e),o=da(n,r);o.tag=2,null!=t&&(o.callback=t),fa(e,o),hs(e,r,n)}};function ya(e,t,n,r,o,a,i){return"function"==typeof(e=e.stateNode).shouldComponentUpdate?e.shouldComponentUpdate(r,a,i):!t.prototype||!t.prototype.isPureReactComponent||(!fr(n,r)||!fr(o,a))}function wa(e,t,n){var r=!1,o=po,a=t.contextType;return"object"==typeof a&&null!==a?a=la(a):(o=bo(t)?go:ho.current,a=(r=null!=(r=t.contextTypes))?vo(e,o):po),t=new t(n,a),e.memoizedState=null!==t.state&&void 0!==t.state?t.state:null,t.updater=ba,e.stateNode=t,t._reactInternals=e,r&&((e=e.stateNode).__reactInternalMemoizedUnmaskedChildContext=o,e.__reactInternalMemoizedMaskedChildContext=a),t}function xa(e,t,n,r){e=t.state,"function"==typeof t.componentWillReceiveProps&&t.componentWillReceiveProps(n,r),"function"==typeof t.UNSAFE_componentWillReceiveProps&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&ba.enqueueReplaceState(t,t.state,null)}function _a(e,t,n,r){var o=e.stateNode;o.props=n,o.state=e.memoizedState,o.refs=ga,ua(e);var a=t.contextType;"object"==typeof a&&null!==a?o.context=la(a):(a=bo(t)?go:ho.current,o.context=vo(e,a)),ha(e,n,o,r),o.state=e.memoizedState,"function"==typeof(a=t.getDerivedStateFromProps)&&(va(e,t,a,n),o.state=e.memoizedState),"function"==typeof t.getDerivedStateFromProps||"function"==typeof o.getSnapshotBeforeUpdate||"function"!=typeof o.UNSAFE_componentWillMount&&"function"!=typeof o.componentWillMount||(t=o.state,"function"==typeof o.componentWillMount&&o.componentWillMount(),"function"==typeof o.UNSAFE_componentWillMount&&o.UNSAFE_componentWillMount(),t!==o.state&&ba.enqueueReplaceState(o,o.state,null),ha(e,n,o,r),o.state=e.memoizedState),"function"==typeof o.componentDidMount&&(e.flags|=4)}var ka=Array.isArray;function Ea(e,t,n){if(null!==(e=n.ref)&&"function"!=typeof e&&"object"!=typeof e){if(n._owner){if(n=n._owner){if(1!==n.tag)throw Error(i(309));var r=n.stateNode}if(!r)throw Error(i(147,e));var o=""+e;return null!==t&&null!==t.ref&&"function"==typeof t.ref&&t.ref._stringRef===o?t.ref:(t=function(e){var t=r.refs;t===ga&&(t=r.refs={}),null===e?delete t[o]:t[o]=e},t._stringRef=o,t)}if("string"!=typeof e)throw Error(i(284));if(!n._owner)throw Error(i(290,e))}return e}function Sa(e,t){if("textarea"!==e.type)throw Error(i(31,"[object Object]"===Object.prototype.toString.call(t)?"object with keys {"+Object.keys(t).join(", ")+"}":t))}function Ca(e){function t(t,n){if(e){var r=t.lastEffect;null!==r?(r.nextEffect=n,t.lastEffect=n):t.firstEffect=t.lastEffect=n,n.nextEffect=null,n.flags=8}}function n(n,r){if(!e)return null;for(;null!==r;)t(n,r),r=r.sibling;return null}function r(e,t){for(e=new Map;null!==t;)null!==t.key?e.set(t.key,t):e.set(t.index,t),t=t.sibling;return e}function o(e,t){return(e=Gs(e,t)).index=0,e.sibling=null,e}function a(t,n,r){return t.index=r,e?null!==(r=t.alternate)?(r=r.index)<n?(t.flags=2,n):r:(t.flags=2,n):n}function l(t){return e&&null===t.alternate&&(t.flags=2),t}function s(e,t,n,r){return null===t||6!==t.tag?((t=Ys(n,e.mode,r)).return=e,t):((t=o(t,n)).return=e,t)}function u(e,t,n,r){return null!==t&&t.elementType===n.type?((r=o(t,n.props)).ref=Ea(e,t,n),r.return=e,r):((r=Ws(n.type,n.key,n.props,null,e.mode,r)).ref=Ea(e,t,n),r.return=e,r)}function c(e,t,n,r){return null===t||4!==t.tag||t.stateNode.containerInfo!==n.containerInfo||t.stateNode.implementation!==n.implementation?((t=Xs(n,e.mode,r)).return=e,t):((t=o(t,n.children||[])).return=e,t)}function d(e,t,n,r,a){return null===t||7!==t.tag?((t=Zs(n,e.mode,r,a)).return=e,t):((t=o(t,n)).return=e,t)}function f(e,t,n){if("string"==typeof t||"number"==typeof t)return(t=Ys(""+t,e.mode,n)).return=e,t;if("object"==typeof t&&null!==t){switch(t.$$typeof){case _:return(n=Ws(t.type,t.key,t.props,null,e.mode,n)).ref=Ea(e,null,t),n.return=e,n;case k:return(t=Xs(t,e.mode,n)).return=e,t}if(ka(t)||U(t))return(t=Zs(t,e.mode,n,null)).return=e,t;Sa(e,t)}return null}function p(e,t,n,r){var o=null!==t?t.key:null;if("string"==typeof n||"number"==typeof n)return null!==o?null:s(e,t,""+n,r);if("object"==typeof n&&null!==n){switch(n.$$typeof){case _:return n.key===o?n.type===E?d(e,t,n.props.children,r,o):u(e,t,n,r):null;case k:return n.key===o?c(e,t,n,r):null}if(ka(n)||U(n))return null!==o?null:d(e,t,n,r,null);Sa(e,n)}return null}function h(e,t,n,r,o){if("string"==typeof r||"number"==typeof r)return s(t,e=e.get(n)||null,""+r,o);if("object"==typeof r&&null!==r){switch(r.$$typeof){case _:return e=e.get(null===r.key?n:r.key)||null,r.type===E?d(t,e,r.props.children,o,r.key):u(t,e,r,o);case k:return c(t,e=e.get(null===r.key?n:r.key)||null,r,o)}if(ka(r)||U(r))return d(t,e=e.get(n)||null,r,o,null);Sa(t,r)}return null}function m(o,i,l,s){for(var u=null,c=null,d=i,m=i=0,g=null;null!==d&&m<l.length;m++){d.index>m?(g=d,d=null):g=d.sibling;var v=p(o,d,l[m],s);if(null===v){null===d&&(d=g);break}e&&d&&null===v.alternate&&t(o,d),i=a(v,i,m),null===c?u=v:c.sibling=v,c=v,d=g}if(m===l.length)return n(o,d),u;if(null===d){for(;m<l.length;m++)null!==(d=f(o,l[m],s))&&(i=a(d,i,m),null===c?u=d:c.sibling=d,c=d);return u}for(d=r(o,d);m<l.length;m++)null!==(g=h(d,o,m,l[m],s))&&(e&&null!==g.alternate&&d.delete(null===g.key?m:g.key),i=a(g,i,m),null===c?u=g:c.sibling=g,c=g);return e&&d.forEach((function(e){return t(o,e)})),u}function g(o,l,s,u){var c=U(s);if("function"!=typeof c)throw Error(i(150));if(null==(s=c.call(s)))throw Error(i(151));for(var d=c=null,m=l,g=l=0,v=null,b=s.next();null!==m&&!b.done;g++,b=s.next()){m.index>g?(v=m,m=null):v=m.sibling;var y=p(o,m,b.value,u);if(null===y){null===m&&(m=v);break}e&&m&&null===y.alternate&&t(o,m),l=a(y,l,g),null===d?c=y:d.sibling=y,d=y,m=v}if(b.done)return n(o,m),c;if(null===m){for(;!b.done;g++,b=s.next())null!==(b=f(o,b.value,u))&&(l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return c}for(m=r(o,m);!b.done;g++,b=s.next())null!==(b=h(m,o,g,b.value,u))&&(e&&null!==b.alternate&&m.delete(null===b.key?g:b.key),l=a(b,l,g),null===d?c=b:d.sibling=b,d=b);return e&&m.forEach((function(e){return t(o,e)})),c}return function(e,r,a,s){var u="object"==typeof a&&null!==a&&a.type===E&&null===a.key;u&&(a=a.props.children);var c="object"==typeof a&&null!==a;if(c)switch(a.$$typeof){case _:e:{for(c=a.key,u=r;null!==u;){if(u.key===c){if(7===u.tag){if(a.type===E){n(e,u.sibling),(r=o(u,a.props.children)).return=e,e=r;break e}}else if(u.elementType===a.type){n(e,u.sibling),(r=o(u,a.props)).ref=Ea(e,u,a),r.return=e,e=r;break e}n(e,u);break}t(e,u),u=u.sibling}a.type===E?((r=Zs(a.props.children,e.mode,s,a.key)).return=e,e=r):((s=Ws(a.type,a.key,a.props,null,e.mode,s)).ref=Ea(e,r,a),s.return=e,e=s)}return l(e);case k:e:{for(u=a.key;null!==r;){if(r.key===u){if(4===r.tag&&r.stateNode.containerInfo===a.containerInfo&&r.stateNode.implementation===a.implementation){n(e,r.sibling),(r=o(r,a.children||[])).return=e,e=r;break e}n(e,r);break}t(e,r),r=r.sibling}(r=Xs(a,e.mode,s)).return=e,e=r}return l(e)}if("string"==typeof a||"number"==typeof a)return a=""+a,null!==r&&6===r.tag?(n(e,r.sibling),(r=o(r,a)).return=e,e=r):(n(e,r),(r=Ys(a,e.mode,s)).return=e,e=r),l(e);if(ka(a))return m(e,r,a,s);if(U(a))return g(e,r,a,s);if(c&&Sa(e,a),void 0===a&&!u)switch(e.tag){case 1:case 22:case 0:case 11:case 15:throw Error(i(152,W(e.type)||"Component"))}return n(e,r)}}var Ta=Ca(!0),Oa=Ca(!1),Da={},Pa=uo(Da),Na=uo(Da),Ia=uo(Da);function Aa(e){if(e===Da)throw Error(i(174));return e}function La(e,t){switch(fo(Ia,t),fo(Na,e),fo(Pa,Da),e=t.nodeType){case 9:case 11:t=(t=t.documentElement)?t.namespaceURI:he(null,"");break;default:t=he(t=(e=8===e?t.parentNode:t).namespaceURI||null,e=e.tagName)}co(Pa),fo(Pa,t)}function Ra(){co(Pa),co(Na),co(Ia)}function ja(e){Aa(Ia.current);var t=Aa(Pa.current),n=he(t,e.type);t!==n&&(fo(Na,e),fo(Pa,n))}function Ma(e){Na.current===e&&(co(Pa),co(Na))}var Fa=uo(0);function Ba(e){for(var t=e;null!==t;){if(13===t.tag){var n=t.memoizedState;if(null!==n&&(null===(n=n.dehydrated)||"$?"===n.data||"$!"===n.data))return t}else if(19===t.tag&&void 0!==t.memoizedProps.revealOrder){if(0!=(64&t.flags))return t}else if(null!==t.child){t.child.return=t,t=t.child;continue}if(t===e)break;for(;null===t.sibling;){if(null===t.return||t.return===e)return null;t=t.return}t.sibling.return=t.return,t=t.sibling}return null}var za=null,$a=null,Ua=!1;function Ha(e,t){var n=Vs(5,null,null,0);n.elementType="DELETED",n.type="DELETED",n.stateNode=t,n.return=e,n.flags=8,null!==e.lastEffect?(e.lastEffect.nextEffect=n,e.lastEffect=n):e.firstEffect=e.lastEffect=n}function Va(e,t){switch(e.tag){case 5:var n=e.type;return null!==(t=1!==t.nodeType||n.toLowerCase()!==t.nodeName.toLowerCase()?null:t)&&(e.stateNode=t,!0);case 6:return null!==(t=""===e.pendingProps||3!==t.nodeType?null:t)&&(e.stateNode=t,!0);default:return!1}}function qa(e){if(Ua){var t=$a;if(t){var n=t;if(!Va(e,t)){if(!(t=Zr(n.nextSibling))||!Va(e,t))return e.flags=-1025&e.flags|2,Ua=!1,void(za=e);Ha(za,n)}za=e,$a=Zr(t.firstChild)}else e.flags=-1025&e.flags|2,Ua=!1,za=e}}function Ga(e){for(e=e.return;null!==e&&5!==e.tag&&3!==e.tag&&13!==e.tag;)e=e.return;za=e}function Wa(e){if(e!==za)return!1;if(!Ua)return Ga(e),Ua=!0,!1;var t=e.type;if(5!==e.tag||"head"!==t&&"body"!==t&&!Vr(t,e.memoizedProps))for(t=$a;t;)Ha(e,t),t=Zr(t.nextSibling);if(Ga(e),13===e.tag){if(!(e=null!==(e=e.memoizedState)?e.dehydrated:null))throw Error(i(317));e:{for(e=e.nextSibling,t=0;e;){if(8===e.nodeType){var n=e.data;if("/$"===n){if(0===t){$a=Zr(e.nextSibling);break e}t--}else"$"!==n&&"$!"!==n&&"$?"!==n||t++}e=e.nextSibling}$a=null}}else $a=za?Zr(e.stateNode.nextSibling):null;return!0}function Za(){$a=za=null,Ua=!1}var Qa=[];function Ya(){for(var e=0;e<Qa.length;e++)Qa[e]._workInProgressVersionPrimary=null;Qa.length=0}var Xa=x.ReactCurrentDispatcher,Ka=x.ReactCurrentBatchConfig,Ja=0,ei=null,ti=null,ni=null,ri=!1,oi=!1;function ai(){throw Error(i(321))}function ii(e,t){if(null===t)return!1;for(var n=0;n<t.length&&n<e.length;n++)if(!cr(e[n],t[n]))return!1;return!0}function li(e,t,n,r,o,a){if(Ja=a,ei=t,t.memoizedState=null,t.updateQueue=null,t.lanes=0,Xa.current=null===e||null===e.memoizedState?Ai:Li,e=n(r,o),oi){a=0;do{if(oi=!1,!(25>a))throw Error(i(301));a+=1,ni=ti=null,t.updateQueue=null,Xa.current=Ri,e=n(r,o)}while(oi)}if(Xa.current=Ii,t=null!==ti&&null!==ti.next,Ja=0,ni=ti=ei=null,ri=!1,t)throw Error(i(300));return e}function si(){var e={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};return null===ni?ei.memoizedState=ni=e:ni=ni.next=e,ni}function ui(){if(null===ti){var e=ei.alternate;e=null!==e?e.memoizedState:null}else e=ti.next;var t=null===ni?ei.memoizedState:ni.next;if(null!==t)ni=t,ti=e;else{if(null===e)throw Error(i(310));e={memoizedState:(ti=e).memoizedState,baseState:ti.baseState,baseQueue:ti.baseQueue,queue:ti.queue,next:null},null===ni?ei.memoizedState=ni=e:ni=ni.next=e}return ni}function ci(e,t){return"function"==typeof t?t(e):t}function di(e){var t=ui(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=ti,o=r.baseQueue,a=n.pending;if(null!==a){if(null!==o){var l=o.next;o.next=a.next,a.next=l}r.baseQueue=o=a,n.pending=null}if(null!==o){o=o.next,r=r.baseState;var s=l=a=null,u=o;do{var c=u.lane;if((Ja&c)===c)null!==s&&(s=s.next={lane:0,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null}),r=u.eagerReducer===e?u.eagerState:e(r,u.action);else{var d={lane:c,action:u.action,eagerReducer:u.eagerReducer,eagerState:u.eagerState,next:null};null===s?(l=s=d,a=r):s=s.next=d,ei.lanes|=c,$l|=c}u=u.next}while(null!==u&&u!==o);null===s?a=r:s.next=l,cr(r,t.memoizedState)||(Mi=!0),t.memoizedState=r,t.baseState=a,t.baseQueue=s,n.lastRenderedState=r}return[t.memoizedState,n.dispatch]}function fi(e){var t=ui(),n=t.queue;if(null===n)throw Error(i(311));n.lastRenderedReducer=e;var r=n.dispatch,o=n.pending,a=t.memoizedState;if(null!==o){n.pending=null;var l=o=o.next;do{a=e(a,l.action),l=l.next}while(l!==o);cr(a,t.memoizedState)||(Mi=!0),t.memoizedState=a,null===t.baseQueue&&(t.baseState=a),n.lastRenderedState=a}return[a,r]}function pi(e,t,n){var r=t._getVersion;r=r(t._source);var o=t._workInProgressVersionPrimary;if(null!==o?e=o===r:(e=e.mutableReadLanes,(e=(Ja&e)===e)&&(t._workInProgressVersionPrimary=r,Qa.push(t))),e)return n(t._source);throw Qa.push(t),Error(i(350))}function hi(e,t,n,r){var o=Al;if(null===o)throw Error(i(349));var a=t._getVersion,l=a(t._source),s=Xa.current,u=s.useState((function(){return pi(o,t,n)})),c=u[1],d=u[0];u=ni;var f=e.memoizedState,p=f.refs,h=p.getSnapshot,m=f.source;f=f.subscribe;var g=ei;return e.memoizedState={refs:p,source:t,subscribe:r},s.useEffect((function(){p.getSnapshot=n,p.setSnapshot=c;var e=a(t._source);if(!cr(l,e)){e=n(t._source),cr(d,e)||(c(e),e=ps(g),o.mutableReadLanes|=e&o.pendingLanes),e=o.mutableReadLanes,o.entangledLanes|=e;for(var r=o.entanglements,i=e;0<i;){var s=31-Vt(i),u=1<<s;r[s]|=e,i&=~u}}}),[n,t,r]),s.useEffect((function(){return r(t._source,(function(){var e=p.getSnapshot,n=p.setSnapshot;try{n(e(t._source));var r=ps(g);o.mutableReadLanes|=r&o.pendingLanes}catch(a){n((function(){throw a}))}}))}),[t,r]),cr(h,n)&&cr(m,t)&&cr(f,r)||((e={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:d}).dispatch=c=Ni.bind(null,ei,e),u.queue=e,u.baseQueue=null,d=pi(o,t,n),u.memoizedState=u.baseState=d),d}function mi(e,t,n){return hi(ui(),e,t,n)}function gi(e){var t=si();return"function"==typeof e&&(e=e()),t.memoizedState=t.baseState=e,e=(e=t.queue={pending:null,dispatch:null,lastRenderedReducer:ci,lastRenderedState:e}).dispatch=Ni.bind(null,ei,e),[t.memoizedState,e]}function vi(e,t,n,r){return e={tag:e,create:t,destroy:n,deps:r,next:null},null===(t=ei.updateQueue)?(t={lastEffect:null},ei.updateQueue=t,t.lastEffect=e.next=e):null===(n=t.lastEffect)?t.lastEffect=e.next=e:(r=n.next,n.next=e,e.next=r,t.lastEffect=e),e}function bi(e){return e={current:e},si().memoizedState=e}function yi(){return ui().memoizedState}function wi(e,t,n,r){var o=si();ei.flags|=e,o.memoizedState=vi(1|t,n,void 0,void 0===r?null:r)}function xi(e,t,n,r){var o=ui();r=void 0===r?null:r;var a=void 0;if(null!==ti){var i=ti.memoizedState;if(a=i.destroy,null!==r&&ii(r,i.deps))return void vi(t,n,a,r)}ei.flags|=e,o.memoizedState=vi(1|t,n,a,r)}function _i(e,t){return wi(516,4,e,t)}function ki(e,t){return xi(516,4,e,t)}function Ei(e,t){return xi(4,2,e,t)}function Si(e,t){return"function"==typeof t?(e=e(),t(e),function(){t(null)}):null!=t?(e=e(),t.current=e,function(){t.current=null}):void 0}function Ci(e,t,n){return n=null!=n?n.concat([e]):null,xi(4,2,Si.bind(null,t,e),n)}function Ti(){}function Oi(e,t){var n=ui();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ii(t,r[1])?r[0]:(n.memoizedState=[e,t],e)}function Di(e,t){var n=ui();t=void 0===t?null:t;var r=n.memoizedState;return null!==r&&null!==t&&ii(t,r[1])?r[0]:(e=e(),n.memoizedState=[e,t],e)}function Pi(e,t){var n=qo();Wo(98>n?98:n,(function(){e(!0)})),Wo(97<n?97:n,(function(){var n=Ka.transition;Ka.transition=1;try{e(!1),t()}finally{Ka.transition=n}}))}function Ni(e,t,n){var r=fs(),o=ps(e),a={lane:o,action:n,eagerReducer:null,eagerState:null,next:null},i=t.pending;if(null===i?a.next=a:(a.next=i.next,i.next=a),t.pending=a,i=e.alternate,e===ei||null!==i&&i===ei)oi=ri=!0;else{if(0===e.lanes&&(null===i||0===i.lanes)&&null!==(i=t.lastRenderedReducer))try{var l=t.lastRenderedState,s=i(l,n);if(a.eagerReducer=i,a.eagerState=s,cr(s,l))return}catch(u){}hs(e,o,r)}}var Ii={readContext:la,useCallback:ai,useContext:ai,useEffect:ai,useImperativeHandle:ai,useLayoutEffect:ai,useMemo:ai,useReducer:ai,useRef:ai,useState:ai,useDebugValue:ai,useDeferredValue:ai,useTransition:ai,useMutableSource:ai,useOpaqueIdentifier:ai,unstable_isNewReconciler:!1},Ai={readContext:la,useCallback:function(e,t){return si().memoizedState=[e,void 0===t?null:t],e},useContext:la,useEffect:_i,useImperativeHandle:function(e,t,n){return n=null!=n?n.concat([e]):null,wi(4,2,Si.bind(null,t,e),n)},useLayoutEffect:function(e,t){return wi(4,2,e,t)},useMemo:function(e,t){var n=si();return t=void 0===t?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=si();return t=void 0!==n?n(t):t,r.memoizedState=r.baseState=t,e=(e=r.queue={pending:null,dispatch:null,lastRenderedReducer:e,lastRenderedState:t}).dispatch=Ni.bind(null,ei,e),[r.memoizedState,e]},useRef:bi,useState:gi,useDebugValue:Ti,useDeferredValue:function(e){var t=gi(e),n=t[0],r=t[1];return _i((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=gi(!1),t=e[0];return bi(e=Pi.bind(null,e[1])),[e,t]},useMutableSource:function(e,t,n){var r=si();return r.memoizedState={refs:{getSnapshot:t,setSnapshot:null},source:e,subscribe:n},hi(r,e,t,n)},useOpaqueIdentifier:function(){if(Ua){var e=!1,t=function(e){return{$$typeof:R,toString:e,valueOf:e}}((function(){throw e||(e=!0,n("r:"+(Yr++).toString(36))),Error(i(355))})),n=gi(t)[1];return 0==(2&ei.mode)&&(ei.flags|=516,vi(5,(function(){n("r:"+(Yr++).toString(36))}),void 0,null)),t}return gi(t="r:"+(Yr++).toString(36)),t},unstable_isNewReconciler:!1},Li={readContext:la,useCallback:Oi,useContext:la,useEffect:ki,useImperativeHandle:Ci,useLayoutEffect:Ei,useMemo:Di,useReducer:di,useRef:yi,useState:function(){return di(ci)},useDebugValue:Ti,useDeferredValue:function(e){var t=di(ci),n=t[0],r=t[1];return ki((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=di(ci)[0];return[yi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return di(ci)[0]},unstable_isNewReconciler:!1},Ri={readContext:la,useCallback:Oi,useContext:la,useEffect:ki,useImperativeHandle:Ci,useLayoutEffect:Ei,useMemo:Di,useReducer:fi,useRef:yi,useState:function(){return fi(ci)},useDebugValue:Ti,useDeferredValue:function(e){var t=fi(ci),n=t[0],r=t[1];return ki((function(){var t=Ka.transition;Ka.transition=1;try{r(e)}finally{Ka.transition=t}}),[e]),n},useTransition:function(){var e=fi(ci)[0];return[yi().current,e]},useMutableSource:mi,useOpaqueIdentifier:function(){return fi(ci)[0]},unstable_isNewReconciler:!1},ji=x.ReactCurrentOwner,Mi=!1;function Fi(e,t,n,r){t.child=null===e?Oa(t,null,n,r):Ta(t,e.child,n,r)}function Bi(e,t,n,r,o){n=n.render;var a=t.ref;return ia(t,o),r=li(e,t,n,r,a,o),null===e||Mi?(t.flags|=1,Fi(e,t,r,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function zi(e,t,n,r,o,a){if(null===e){var i=n.type;return"function"!=typeof i||qs(i)||void 0!==i.defaultProps||null!==n.compare||void 0!==n.defaultProps?((e=Ws(n.type,null,r,t,t.mode,a)).ref=t.ref,e.return=t,t.child=e):(t.tag=15,t.type=i,$i(e,t,i,r,o,a))}return i=e.child,0==(o&a)&&(o=i.memoizedProps,(n=null!==(n=n.compare)?n:fr)(o,r)&&e.ref===t.ref)?al(e,t,a):(t.flags|=1,(e=Gs(i,r)).ref=t.ref,e.return=t,t.child=e)}function $i(e,t,n,r,o,a){if(null!==e&&fr(e.memoizedProps,r)&&e.ref===t.ref){if(Mi=!1,0==(a&o))return t.lanes=e.lanes,al(e,t,a);0!=(16384&e.flags)&&(Mi=!0)}return Vi(e,t,n,r,a)}function Ui(e,t,n){var r=t.pendingProps,o=r.children,a=null!==e?e.memoizedState:null;if("hidden"===r.mode||"unstable-defer-without-hiding"===r.mode)if(0==(4&t.mode))t.memoizedState={baseLanes:0},_s(t,n);else{if(0==(1073741824&n))return e=null!==a?a.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e},_s(t,e),null;t.memoizedState={baseLanes:0},_s(t,null!==a?a.baseLanes:n)}else null!==a?(r=a.baseLanes|n,t.memoizedState=null):r=n,_s(t,r);return Fi(e,t,o,n),t.child}function Hi(e,t){var n=t.ref;(null===e&&null!==n||null!==e&&e.ref!==n)&&(t.flags|=128)}function Vi(e,t,n,r,o){var a=bo(n)?go:ho.current;return a=vo(t,a),ia(t,o),n=li(e,t,n,r,a,o),null===e||Mi?(t.flags|=1,Fi(e,t,n,o),t.child):(t.updateQueue=e.updateQueue,t.flags&=-517,e.lanes&=~o,al(e,t,o))}function qi(e,t,n,r,o){if(bo(n)){var a=!0;_o(t)}else a=!1;if(ia(t,o),null===t.stateNode)null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),wa(t,n,r),_a(t,n,r,o),r=!0;else if(null===e){var i=t.stateNode,l=t.memoizedProps;i.props=l;var s=i.context,u=n.contextType;"object"==typeof u&&null!==u?u=la(u):u=vo(t,u=bo(n)?go:ho.current);var c=n.getDerivedStateFromProps,d="function"==typeof c||"function"==typeof i.getSnapshotBeforeUpdate;d||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==r||s!==u)&&xa(t,i,r,u),sa=!1;var f=t.memoizedState;i.state=f,ha(t,r,i,o),s=t.memoizedState,l!==r||f!==s||mo.current||sa?("function"==typeof c&&(va(t,n,c,r),s=t.memoizedState),(l=sa||ya(t,n,l,r,f,s,u))?(d||"function"!=typeof i.UNSAFE_componentWillMount&&"function"!=typeof i.componentWillMount||("function"==typeof i.componentWillMount&&i.componentWillMount(),"function"==typeof i.UNSAFE_componentWillMount&&i.UNSAFE_componentWillMount()),"function"==typeof i.componentDidMount&&(t.flags|=4)):("function"==typeof i.componentDidMount&&(t.flags|=4),t.memoizedProps=r,t.memoizedState=s),i.props=r,i.state=s,i.context=u,r=l):("function"==typeof i.componentDidMount&&(t.flags|=4),r=!1)}else{i=t.stateNode,ca(e,t),l=t.memoizedProps,u=t.type===t.elementType?l:Ko(t.type,l),i.props=u,d=t.pendingProps,f=i.context,"object"==typeof(s=n.contextType)&&null!==s?s=la(s):s=vo(t,s=bo(n)?go:ho.current);var p=n.getDerivedStateFromProps;(c="function"==typeof p||"function"==typeof i.getSnapshotBeforeUpdate)||"function"!=typeof i.UNSAFE_componentWillReceiveProps&&"function"!=typeof i.componentWillReceiveProps||(l!==d||f!==s)&&xa(t,i,r,s),sa=!1,f=t.memoizedState,i.state=f,ha(t,r,i,o);var h=t.memoizedState;l!==d||f!==h||mo.current||sa?("function"==typeof p&&(va(t,n,p,r),h=t.memoizedState),(u=sa||ya(t,n,u,r,f,h,s))?(c||"function"!=typeof i.UNSAFE_componentWillUpdate&&"function"!=typeof i.componentWillUpdate||("function"==typeof i.componentWillUpdate&&i.componentWillUpdate(r,h,s),"function"==typeof i.UNSAFE_componentWillUpdate&&i.UNSAFE_componentWillUpdate(r,h,s)),"function"==typeof i.componentDidUpdate&&(t.flags|=4),"function"==typeof i.getSnapshotBeforeUpdate&&(t.flags|=256)):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),t.memoizedProps=r,t.memoizedState=h),i.props=r,i.state=h,i.context=s,r=u):("function"!=typeof i.componentDidUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),"function"!=typeof i.getSnapshotBeforeUpdate||l===e.memoizedProps&&f===e.memoizedState||(t.flags|=256),r=!1)}return Gi(e,t,n,r,a,o)}function Gi(e,t,n,r,o,a){Hi(e,t);var i=0!=(64&t.flags);if(!r&&!i)return o&&ko(t,n,!1),al(e,t,a);r=t.stateNode,ji.current=t;var l=i&&"function"!=typeof n.getDerivedStateFromError?null:r.render();return t.flags|=1,null!==e&&i?(t.child=Ta(t,e.child,null,a),t.child=Ta(t,null,l,a)):Fi(e,t,l,a),t.memoizedState=r.state,o&&ko(t,n,!0),t.child}function Wi(e){var t=e.stateNode;t.pendingContext?wo(0,t.pendingContext,t.pendingContext!==t.context):t.context&&wo(0,t.context,!1),La(e,t.containerInfo)}var Zi,Qi,Yi,Xi={dehydrated:null,retryLane:0};function Ki(e,t,n){var r,o=t.pendingProps,a=Fa.current,i=!1;return(r=0!=(64&t.flags))||(r=(null===e||null!==e.memoizedState)&&0!=(2&a)),r?(i=!0,t.flags&=-65):null!==e&&null===e.memoizedState||void 0===o.fallback||!0===o.unstable_avoidThisFallback||(a|=1),fo(Fa,1&a),null===e?(void 0!==o.fallback&&qa(t),e=o.children,a=o.fallback,i?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,e):"number"==typeof o.unstable_expectedLoadTime?(e=Ji(t,e,a,n),t.child.memoizedState={baseLanes:n},t.memoizedState=Xi,t.lanes=33554432,e):((n=Qs({mode:"visible",children:e},t.mode,n,null)).return=t,t.child=n)):(e.memoizedState,i?(o=tl(e,t,o.children,o.fallback,n),i=t.child,a=e.child.memoizedState,i.memoizedState=null===a?{baseLanes:n}:{baseLanes:a.baseLanes|n},i.childLanes=e.childLanes&~n,t.memoizedState=Xi,o):(n=el(e,t,o.children,n),t.memoizedState=null,n))}function Ji(e,t,n,r){var o=e.mode,a=e.child;return t={mode:"hidden",children:t},0==(2&o)&&null!==a?(a.childLanes=0,a.pendingProps=t):a=Qs(t,o,0,null),n=Zs(n,o,r,null),a.return=e,n.return=e,a.sibling=n,e.child=a,n}function el(e,t,n,r){var o=e.child;return e=o.sibling,n=Gs(o,{mode:"visible",children:n}),0==(2&t.mode)&&(n.lanes=r),n.return=t,n.sibling=null,null!==e&&(e.nextEffect=null,e.flags=8,t.firstEffect=t.lastEffect=e),t.child=n}function tl(e,t,n,r,o){var a=t.mode,i=e.child;e=i.sibling;var l={mode:"hidden",children:n};return 0==(2&a)&&t.child!==i?((n=t.child).childLanes=0,n.pendingProps=l,null!==(i=n.lastEffect)?(t.firstEffect=n.firstEffect,t.lastEffect=i,i.nextEffect=null):t.firstEffect=t.lastEffect=null):n=Gs(i,l),null!==e?r=Gs(e,r):(r=Zs(r,a,o,null)).flags|=2,r.return=t,n.return=t,n.sibling=r,t.child=n,r}function nl(e,t){e.lanes|=t;var n=e.alternate;null!==n&&(n.lanes|=t),aa(e.return,t)}function rl(e,t,n,r,o,a){var i=e.memoizedState;null===i?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:o,lastEffect:a}:(i.isBackwards=t,i.rendering=null,i.renderingStartTime=0,i.last=r,i.tail=n,i.tailMode=o,i.lastEffect=a)}function ol(e,t,n){var r=t.pendingProps,o=r.revealOrder,a=r.tail;if(Fi(e,t,r.children,n),0!=(2&(r=Fa.current)))r=1&r|2,t.flags|=64;else{if(null!==e&&0!=(64&e.flags))e:for(e=t.child;null!==e;){if(13===e.tag)null!==e.memoizedState&&nl(e,n);else if(19===e.tag)nl(e,n);else if(null!==e.child){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;null===e.sibling;){if(null===e.return||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}r&=1}if(fo(Fa,r),0==(2&t.mode))t.memoizedState=null;else switch(o){case"forwards":for(n=t.child,o=null;null!==n;)null!==(e=n.alternate)&&null===Ba(e)&&(o=n),n=n.sibling;null===(n=o)?(o=t.child,t.child=null):(o=n.sibling,n.sibling=null),rl(t,!1,o,n,a,t.lastEffect);break;case"backwards":for(n=null,o=t.child,t.child=null;null!==o;){if(null!==(e=o.alternate)&&null===Ba(e)){t.child=o;break}e=o.sibling,o.sibling=n,n=o,o=e}rl(t,!0,n,null,a,t.lastEffect);break;case"together":rl(t,!1,null,null,void 0,t.lastEffect);break;default:t.memoizedState=null}return t.child}function al(e,t,n){if(null!==e&&(t.dependencies=e.dependencies),$l|=t.lanes,0!=(n&t.childLanes)){if(null!==e&&t.child!==e.child)throw Error(i(153));if(null!==t.child){for(n=Gs(e=t.child,e.pendingProps),t.child=n,n.return=t;null!==e.sibling;)e=e.sibling,(n=n.sibling=Gs(e,e.pendingProps)).return=t;n.sibling=null}return t.child}return null}function il(e,t){if(!Ua)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;null!==t;)null!==t.alternate&&(n=t),t=t.sibling;null===n?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;null!==n;)null!==n.alternate&&(r=n),n=n.sibling;null===r?t||null===e.tail?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ll(e,t,n){var r=t.pendingProps;switch(t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:case 17:return bo(t.type)&&yo(),null;case 3:return Ra(),co(mo),co(ho),Ya(),(r=t.stateNode).pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),null!==e&&null!==e.child||(Wa(t)?t.flags|=4:r.hydrate||(t.flags|=256)),null;case 5:Ma(t);var a=Aa(Ia.current);if(n=t.type,null!==e&&null!=t.stateNode)Qi(e,t,n,r),e.ref!==t.ref&&(t.flags|=128);else{if(!r){if(null===t.stateNode)throw Error(i(166));return null}if(e=Aa(Pa.current),Wa(t)){r=t.stateNode,n=t.type;var l=t.memoizedProps;switch(r[Kr]=t,r[Jr]=l,n){case"dialog":Pr("cancel",r),Pr("close",r);break;case"iframe":case"object":case"embed":Pr("load",r);break;case"video":case"audio":for(e=0;e<Cr.length;e++)Pr(Cr[e],r);break;case"source":Pr("error",r);break;case"img":case"image":case"link":Pr("error",r),Pr("load",r);break;case"details":Pr("toggle",r);break;case"input":ee(r,l),Pr("invalid",r);break;case"select":r._wrapperState={wasMultiple:!!l.multiple},Pr("invalid",r);break;case"textarea":se(r,l),Pr("invalid",r)}for(var u in Ee(n,l),e=null,l)l.hasOwnProperty(u)&&(a=l[u],"children"===u?"string"==typeof a?r.textContent!==a&&(e=["children",a]):"number"==typeof a&&r.textContent!==""+a&&(e=["children",""+a]):s.hasOwnProperty(u)&&null!=a&&"onScroll"===u&&Pr("scroll",r));switch(n){case"input":Y(r),re(r,l,!0);break;case"textarea":Y(r),ce(r);break;case"select":case"option":break;default:"function"==typeof l.onClick&&(r.onclick=zr)}r=e,t.updateQueue=r,null!==r&&(t.flags|=4)}else{switch(u=9===a.nodeType?a:a.ownerDocument,e===de&&(e=pe(n)),e===de?"script"===n?((e=u.createElement("div")).innerHTML="<script><\/script>",e=e.removeChild(e.firstChild)):"string"==typeof r.is?e=u.createElement(n,{is:r.is}):(e=u.createElement(n),"select"===n&&(u=e,r.multiple?u.multiple=!0:r.size&&(u.size=r.size))):e=u.createElementNS(e,n),e[Kr]=t,e[Jr]=r,Zi(e,t),t.stateNode=e,u=Se(n,r),n){case"dialog":Pr("cancel",e),Pr("close",e),a=r;break;case"iframe":case"object":case"embed":Pr("load",e),a=r;break;case"video":case"audio":for(a=0;a<Cr.length;a++)Pr(Cr[a],e);a=r;break;case"source":Pr("error",e),a=r;break;case"img":case"image":case"link":Pr("error",e),Pr("load",e),a=r;break;case"details":Pr("toggle",e),a=r;break;case"input":ee(e,r),a=J(e,r),Pr("invalid",e);break;case"option":a=ae(e,r);break;case"select":e._wrapperState={wasMultiple:!!r.multiple},a=o({},r,{value:void 0}),Pr("invalid",e);break;case"textarea":se(e,r),a=le(e,r),Pr("invalid",e);break;default:a=r}Ee(n,a);var c=a;for(l in c)if(c.hasOwnProperty(l)){var d=c[l];"style"===l?_e(e,d):"dangerouslySetInnerHTML"===l?null!=(d=d?d.__html:void 0)&&ve(e,d):"children"===l?"string"==typeof d?("textarea"!==n||""!==d)&&be(e,d):"number"==typeof d&&be(e,""+d):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(s.hasOwnProperty(l)?null!=d&&"onScroll"===l&&Pr("scroll",e):null!=d&&w(e,l,d,u))}switch(n){case"input":Y(e),re(e,r,!1);break;case"textarea":Y(e),ce(e);break;case"option":null!=r.value&&e.setAttribute("value",""+Z(r.value));break;case"select":e.multiple=!!r.multiple,null!=(l=r.value)?ie(e,!!r.multiple,l,!1):null!=r.defaultValue&&ie(e,!!r.multiple,r.defaultValue,!0);break;default:"function"==typeof a.onClick&&(e.onclick=zr)}Hr(n,r)&&(t.flags|=4)}null!==t.ref&&(t.flags|=128)}return null;case 6:if(e&&null!=t.stateNode)Yi(0,t,e.memoizedProps,r);else{if("string"!=typeof r&&null===t.stateNode)throw Error(i(166));n=Aa(Ia.current),Aa(Pa.current),Wa(t)?(r=t.stateNode,n=t.memoizedProps,r[Kr]=t,r.nodeValue!==n&&(t.flags|=4)):((r=(9===n.nodeType?n:n.ownerDocument).createTextNode(r))[Kr]=t,t.stateNode=r)}return null;case 13:return co(Fa),r=t.memoizedState,0!=(64&t.flags)?(t.lanes=n,t):(r=null!==r,n=!1,null===e?void 0!==t.memoizedProps.fallback&&Wa(t):n=null!==e.memoizedState,r&&!n&&0!=(2&t.mode)&&(null===e&&!0!==t.memoizedProps.unstable_avoidThisFallback||0!=(1&Fa.current)?0===Fl&&(Fl=3):(0!==Fl&&3!==Fl||(Fl=4),null===Al||0==(134217727&$l)&&0==(134217727&Ul)||bs(Al,Rl))),(r||n)&&(t.flags|=4),null);case 4:return Ra(),null===e&&Ir(t.stateNode.containerInfo),null;case 10:return oa(t),null;case 19:if(co(Fa),null===(r=t.memoizedState))return null;if(l=0!=(64&t.flags),null===(u=r.rendering))if(l)il(r,!1);else{if(0!==Fl||null!==e&&0!=(64&e.flags))for(e=t.child;null!==e;){if(null!==(u=Ba(e))){for(t.flags|=64,il(r,!1),null!==(l=u.updateQueue)&&(t.updateQueue=l,t.flags|=4),null===r.lastEffect&&(t.firstEffect=null),t.lastEffect=r.lastEffect,r=n,n=t.child;null!==n;)e=r,(l=n).flags&=2,l.nextEffect=null,l.firstEffect=null,l.lastEffect=null,null===(u=l.alternate)?(l.childLanes=0,l.lanes=e,l.child=null,l.memoizedProps=null,l.memoizedState=null,l.updateQueue=null,l.dependencies=null,l.stateNode=null):(l.childLanes=u.childLanes,l.lanes=u.lanes,l.child=u.child,l.memoizedProps=u.memoizedProps,l.memoizedState=u.memoizedState,l.updateQueue=u.updateQueue,l.type=u.type,e=u.dependencies,l.dependencies=null===e?null:{lanes:e.lanes,firstContext:e.firstContext}),n=n.sibling;return fo(Fa,1&Fa.current|2),t.child}e=e.sibling}null!==r.tail&&Vo()>Gl&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432)}else{if(!l)if(null!==(e=Ba(u))){if(t.flags|=64,l=!0,null!==(n=e.updateQueue)&&(t.updateQueue=n,t.flags|=4),il(r,!0),null===r.tail&&"hidden"===r.tailMode&&!u.alternate&&!Ua)return null!==(t=t.lastEffect=r.lastEffect)&&(t.nextEffect=null),null}else 2*Vo()-r.renderingStartTime>Gl&&1073741824!==n&&(t.flags|=64,l=!0,il(r,!1),t.lanes=33554432);r.isBackwards?(u.sibling=t.child,t.child=u):(null!==(n=r.last)?n.sibling=u:t.child=u,r.last=u)}return null!==r.tail?(n=r.tail,r.rendering=n,r.tail=n.sibling,r.lastEffect=t.lastEffect,r.renderingStartTime=Vo(),n.sibling=null,t=Fa.current,fo(Fa,l?1&t|2:1&t),n):null;case 23:case 24:return ks(),null!==e&&null!==e.memoizedState!=(null!==t.memoizedState)&&"unstable-defer-without-hiding"!==r.mode&&(t.flags|=4),null}throw Error(i(156,t.tag))}function sl(e){switch(e.tag){case 1:bo(e.type)&&yo();var t=e.flags;return 4096&t?(e.flags=-4097&t|64,e):null;case 3:if(Ra(),co(mo),co(ho),Ya(),0!=(64&(t=e.flags)))throw Error(i(285));return e.flags=-4097&t|64,e;case 5:return Ma(e),null;case 13:return co(Fa),4096&(t=e.flags)?(e.flags=-4097&t|64,e):null;case 19:return co(Fa),null;case 4:return Ra(),null;case 10:return oa(e),null;case 23:case 24:return ks(),null;default:return null}}function ul(e,t){try{var n="",r=t;do{n+=G(r),r=r.return}while(r);var o=n}catch(a){o="\nError generating stack: "+a.message+"\n"+a.stack}return{value:e,source:t,stack:o}}function cl(e,t){try{console.error(t.value)}catch(n){setTimeout((function(){throw n}))}}Zi=function(e,t){for(var n=t.child;null!==n;){if(5===n.tag||6===n.tag)e.appendChild(n.stateNode);else if(4!==n.tag&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===t)break;for(;null===n.sibling;){if(null===n.return||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}},Qi=function(e,t,n,r){var a=e.memoizedProps;if(a!==r){e=t.stateNode,Aa(Pa.current);var i,l=null;switch(n){case"input":a=J(e,a),r=J(e,r),l=[];break;case"option":a=ae(e,a),r=ae(e,r),l=[];break;case"select":a=o({},a,{value:void 0}),r=o({},r,{value:void 0}),l=[];break;case"textarea":a=le(e,a),r=le(e,r),l=[];break;default:"function"!=typeof a.onClick&&"function"==typeof r.onClick&&(e.onclick=zr)}for(d in Ee(n,r),n=null,a)if(!r.hasOwnProperty(d)&&a.hasOwnProperty(d)&&null!=a[d])if("style"===d){var u=a[d];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else"dangerouslySetInnerHTML"!==d&&"children"!==d&&"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&"autoFocus"!==d&&(s.hasOwnProperty(d)?l||(l=[]):(l=l||[]).push(d,null));for(d in r){var c=r[d];if(u=null!=a?a[d]:void 0,r.hasOwnProperty(d)&&c!==u&&(null!=c||null!=u))if("style"===d)if(u){for(i in u)!u.hasOwnProperty(i)||c&&c.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in c)c.hasOwnProperty(i)&&u[i]!==c[i]&&(n||(n={}),n[i]=c[i])}else n||(l||(l=[]),l.push(d,n)),n=c;else"dangerouslySetInnerHTML"===d?(c=c?c.__html:void 0,u=u?u.__html:void 0,null!=c&&u!==c&&(l=l||[]).push(d,c)):"children"===d?"string"!=typeof c&&"number"!=typeof c||(l=l||[]).push(d,""+c):"suppressContentEditableWarning"!==d&&"suppressHydrationWarning"!==d&&(s.hasOwnProperty(d)?(null!=c&&"onScroll"===d&&Pr("scroll",e),l||u===c||(l=[])):"object"==typeof c&&null!==c&&c.$$typeof===R?c.toString():(l=l||[]).push(d,c))}n&&(l=l||[]).push("style",n);var d=l;(t.updateQueue=d)&&(t.flags|=4)}},Yi=function(e,t,n,r){n!==r&&(t.flags|=4)};var dl="function"==typeof WeakMap?WeakMap:Map;function fl(e,t,n){(n=da(-1,n)).tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Yl||(Yl=!0,Xl=r),cl(0,t)},n}function pl(e,t,n){(n=da(-1,n)).tag=3;var r=e.type.getDerivedStateFromError;if("function"==typeof r){var o=t.value;n.payload=function(){return cl(0,t),r(o)}}var a=e.stateNode;return null!==a&&"function"==typeof a.componentDidCatch&&(n.callback=function(){"function"!=typeof r&&(null===Kl?Kl=new Set([this]):Kl.add(this),cl(0,t));var e=t.stack;this.componentDidCatch(t.value,{componentStack:null!==e?e:""})}),n}var hl="function"==typeof WeakSet?WeakSet:Set;function ml(e){var t=e.ref;if(null!==t)if("function"==typeof t)try{t(null)}catch(n){zs(e,n)}else t.current=null}function gl(e,t){switch(t.tag){case 0:case 11:case 15:case 22:case 5:case 6:case 4:case 17:return;case 1:if(256&t.flags&&null!==e){var n=e.memoizedProps,r=e.memoizedState;t=(e=t.stateNode).getSnapshotBeforeUpdate(t.elementType===t.type?n:Ko(t.type,n),r),e.__reactInternalSnapshotBeforeUpdate=t}return;case 3:return void(256&t.flags&&Wr(t.stateNode.containerInfo))}throw Error(i(163))}function vl(e,t,n){switch(n.tag){case 0:case 11:case 15:case 22:if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{if(3==(3&e.tag)){var r=e.create;e.destroy=r()}e=e.next}while(e!==t)}if(null!==(t=null!==(t=n.updateQueue)?t.lastEffect:null)){e=t=t.next;do{var o=e;r=o.next,0!=(4&(o=o.tag))&&0!=(1&o)&&(Ms(n,e),js(n,e)),e=r}while(e!==t)}return;case 1:return e=n.stateNode,4&n.flags&&(null===t?e.componentDidMount():(r=n.elementType===n.type?t.memoizedProps:Ko(n.type,t.memoizedProps),e.componentDidUpdate(r,t.memoizedState,e.__reactInternalSnapshotBeforeUpdate))),void(null!==(t=n.updateQueue)&&ma(n,t,e));case 3:if(null!==(t=n.updateQueue)){if(e=null,null!==n.child)switch(n.child.tag){case 5:case 1:e=n.child.stateNode}ma(n,t,e)}return;case 5:return e=n.stateNode,void(null===t&&4&n.flags&&Hr(n.type,n.memoizedProps)&&e.focus());case 6:case 4:case 12:case 19:case 17:case 20:case 21:case 23:case 24:return;case 13:return void(null===n.memoizedState&&(n=n.alternate,null!==n&&(n=n.memoizedState,null!==n&&(n=n.dehydrated,null!==n&&_t(n)))))}throw Error(i(163))}function bl(e,t){for(var n=e;;){if(5===n.tag){var r=n.stateNode;if(t)"function"==typeof(r=r.style).setProperty?r.setProperty("display","none","important"):r.display="none";else{r=n.stateNode;var o=n.memoizedProps.style;o=null!=o&&o.hasOwnProperty("display")?o.display:null,r.style.display=xe("display",o)}}else if(6===n.tag)n.stateNode.nodeValue=t?"":n.memoizedProps;else if((23!==n.tag&&24!==n.tag||null===n.memoizedState||n===e)&&null!==n.child){n.child.return=n,n=n.child;continue}if(n===e)break;for(;null===n.sibling;){if(null===n.return||n.return===e)return;n=n.return}n.sibling.return=n.return,n=n.sibling}}function yl(e,t){if(So&&"function"==typeof So.onCommitFiberUnmount)try{So.onCommitFiberUnmount(Eo,t)}catch(a){}switch(t.tag){case 0:case 11:case 14:case 15:case 22:if(null!==(e=t.updateQueue)&&null!==(e=e.lastEffect)){var n=e=e.next;do{var r=n,o=r.destroy;if(r=r.tag,void 0!==o)if(0!=(4&r))Ms(t,n);else{r=t;try{o()}catch(a){zs(r,a)}}n=n.next}while(n!==e)}break;case 1:if(ml(t),"function"==typeof(e=t.stateNode).componentWillUnmount)try{e.props=t.memoizedProps,e.state=t.memoizedState,e.componentWillUnmount()}catch(a){zs(t,a)}break;case 5:ml(t);break;case 4:Sl(e,t)}}function wl(e){e.alternate=null,e.child=null,e.dependencies=null,e.firstEffect=null,e.lastEffect=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.return=null,e.updateQueue=null}function xl(e){return 5===e.tag||3===e.tag||4===e.tag}function _l(e){e:{for(var t=e.return;null!==t;){if(xl(t))break e;t=t.return}throw Error(i(160))}var n=t;switch(t=n.stateNode,n.tag){case 5:var r=!1;break;case 3:case 4:t=t.containerInfo,r=!0;break;default:throw Error(i(161))}16&n.flags&&(be(t,""),n.flags&=-17);e:t:for(n=e;;){for(;null===n.sibling;){if(null===n.return||xl(n.return)){n=null;break e}n=n.return}for(n.sibling.return=n.return,n=n.sibling;5!==n.tag&&6!==n.tag&&18!==n.tag;){if(2&n.flags)continue t;if(null===n.child||4===n.tag)continue t;n.child.return=n,n=n.child}if(!(2&n.flags)){n=n.stateNode;break e}}r?kl(e,n,t):El(e,n,t)}function kl(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?8===n.nodeType?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(8===n.nodeType?(t=n.parentNode).insertBefore(e,n):(t=n).appendChild(e),null!=(n=n._reactRootContainer)||null!==t.onclick||(t.onclick=zr));else if(4!==r&&null!==(e=e.child))for(kl(e,t,n),e=e.sibling;null!==e;)kl(e,t,n),e=e.sibling}function El(e,t,n){var r=e.tag,o=5===r||6===r;if(o)e=o?e.stateNode:e.stateNode.instance,t?n.insertBefore(e,t):n.appendChild(e);else if(4!==r&&null!==(e=e.child))for(El(e,t,n),e=e.sibling;null!==e;)El(e,t,n),e=e.sibling}function Sl(e,t){for(var n,r,o=t,a=!1;;){if(!a){a=o.return;e:for(;;){if(null===a)throw Error(i(160));switch(n=a.stateNode,a.tag){case 5:r=!1;break e;case 3:case 4:n=n.containerInfo,r=!0;break e}a=a.return}a=!0}if(5===o.tag||6===o.tag){e:for(var l=e,s=o,u=s;;)if(yl(l,u),null!==u.child&&4!==u.tag)u.child.return=u,u=u.child;else{if(u===s)break e;for(;null===u.sibling;){if(null===u.return||u.return===s)break e;u=u.return}u.sibling.return=u.return,u=u.sibling}r?(l=n,s=o.stateNode,8===l.nodeType?l.parentNode.removeChild(s):l.removeChild(s)):n.removeChild(o.stateNode)}else if(4===o.tag){if(null!==o.child){n=o.stateNode.containerInfo,r=!0,o.child.return=o,o=o.child;continue}}else if(yl(e,o),null!==o.child){o.child.return=o,o=o.child;continue}if(o===t)break;for(;null===o.sibling;){if(null===o.return||o.return===t)return;4===(o=o.return).tag&&(a=!1)}o.sibling.return=o.return,o=o.sibling}}function Cl(e,t){switch(t.tag){case 0:case 11:case 14:case 15:case 22:var n=t.updateQueue;if(null!==(n=null!==n?n.lastEffect:null)){var r=n=n.next;do{3==(3&r.tag)&&(e=r.destroy,r.destroy=void 0,void 0!==e&&e()),r=r.next}while(r!==n)}return;case 1:case 12:case 17:return;case 5:if(null!=(n=t.stateNode)){r=t.memoizedProps;var o=null!==e?e.memoizedProps:r;e=t.type;var a=t.updateQueue;if(t.updateQueue=null,null!==a){for(n[Jr]=r,"input"===e&&"radio"===r.type&&null!=r.name&&te(n,r),Se(e,o),t=Se(e,r),o=0;o<a.length;o+=2){var l=a[o],s=a[o+1];"style"===l?_e(n,s):"dangerouslySetInnerHTML"===l?ve(n,s):"children"===l?be(n,s):w(n,l,s,t)}switch(e){case"input":ne(n,r);break;case"textarea":ue(n,r);break;case"select":e=n._wrapperState.wasMultiple,n._wrapperState.wasMultiple=!!r.multiple,null!=(a=r.value)?ie(n,!!r.multiple,a,!1):e!==!!r.multiple&&(null!=r.defaultValue?ie(n,!!r.multiple,r.defaultValue,!0):ie(n,!!r.multiple,r.multiple?[]:"",!1))}}}return;case 6:if(null===t.stateNode)throw Error(i(162));return void(t.stateNode.nodeValue=t.memoizedProps);case 3:return void((n=t.stateNode).hydrate&&(n.hydrate=!1,_t(n.containerInfo)));case 13:return null!==t.memoizedState&&(ql=Vo(),bl(t.child,!0)),void Tl(t);case 19:return void Tl(t);case 23:case 24:return void bl(t,null!==t.memoizedState)}throw Error(i(163))}function Tl(e){var t=e.updateQueue;if(null!==t){e.updateQueue=null;var n=e.stateNode;null===n&&(n=e.stateNode=new hl),t.forEach((function(t){var r=Us.bind(null,e,t);n.has(t)||(n.add(t),t.then(r,r))}))}}function Ol(e,t){return null!==e&&(null===(e=e.memoizedState)||null!==e.dehydrated)&&(null!==(t=t.memoizedState)&&null===t.dehydrated)}var Dl=Math.ceil,Pl=x.ReactCurrentDispatcher,Nl=x.ReactCurrentOwner,Il=0,Al=null,Ll=null,Rl=0,jl=0,Ml=uo(0),Fl=0,Bl=null,zl=0,$l=0,Ul=0,Hl=0,Vl=null,ql=0,Gl=1/0;function Wl(){Gl=Vo()+500}var Zl,Ql=null,Yl=!1,Xl=null,Kl=null,Jl=!1,es=null,ts=90,ns=[],rs=[],os=null,as=0,is=null,ls=-1,ss=0,us=0,cs=null,ds=!1;function fs(){return 0!=(48&Il)?Vo():-1!==ls?ls:ls=Vo()}function ps(e){if(0==(2&(e=e.mode)))return 1;if(0==(4&e))return 99===qo()?1:2;if(0===ss&&(ss=zl),0!==Xo.transition){0!==us&&(us=null!==Vl?Vl.pendingLanes:0),e=ss;var t=4186112&~us;return 0===(t&=-t)&&(0===(t=(e=4186112&~e)&-e)&&(t=8192)),t}return e=qo(),0!=(4&Il)&&98===e?e=zt(12,ss):e=zt(e=function(e){switch(e){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}(e),ss),e}function hs(e,t,n){if(50<as)throw as=0,is=null,Error(i(185));if(null===(e=ms(e,t)))return null;Ht(e,t,n),e===Al&&(Ul|=t,4===Fl&&bs(e,Rl));var r=qo();1===t?0!=(8&Il)&&0==(48&Il)?ys(e):(gs(e,n),0===Il&&(Wl(),Qo())):(0==(4&Il)||98!==r&&99!==r||(null===os?os=new Set([e]):os.add(e)),gs(e,n)),Vl=e}function ms(e,t){e.lanes|=t;var n=e.alternate;for(null!==n&&(n.lanes|=t),n=e,e=e.return;null!==e;)e.childLanes|=t,null!==(n=e.alternate)&&(n.childLanes|=t),n=e,e=e.return;return 3===n.tag?n.stateNode:null}function gs(e,t){for(var n=e.callbackNode,r=e.suspendedLanes,o=e.pingedLanes,a=e.expirationTimes,l=e.pendingLanes;0<l;){var s=31-Vt(l),u=1<<s,c=a[s];if(-1===c){if(0==(u&r)||0!=(u&o)){c=t,Mt(u);var d=jt;a[s]=10<=d?c+250:6<=d?c+5e3:-1}}else c<=t&&(e.expiredLanes|=u);l&=~u}if(r=Ft(e,e===Al?Rl:0),t=jt,0===r)null!==n&&(n!==Fo&&Oo(n),e.callbackNode=null,e.callbackPriority=0);else{if(null!==n){if(e.callbackPriority===t)return;n!==Fo&&Oo(n)}15===t?(n=ys.bind(null,e),null===zo?(zo=[n],$o=To(Ao,Yo)):zo.push(n),n=Fo):14===t?n=Zo(99,ys.bind(null,e)):(n=function(e){switch(e){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(i(358,e))}}(t),n=Zo(n,vs.bind(null,e))),e.callbackPriority=t,e.callbackNode=n}}function vs(e){if(ls=-1,us=ss=0,0!=(48&Il))throw Error(i(327));var t=e.callbackNode;if(Rs()&&e.callbackNode!==t)return null;var n=Ft(e,e===Al?Rl:0);if(0===n)return null;var r=n,o=Il;Il|=16;var a=Cs();for(Al===e&&Rl===r||(Wl(),Es(e,r));;)try{Ds();break}catch(s){Ss(e,s)}if(ra(),Pl.current=a,Il=o,null!==Ll?r=0:(Al=null,Rl=0,r=Fl),0!=(zl&Ul))Es(e,0);else if(0!==r){if(2===r&&(Il|=64,e.hydrate&&(e.hydrate=!1,Wr(e.containerInfo)),0!==(n=Bt(e))&&(r=Ts(e,n))),1===r)throw t=Bl,Es(e,0),bs(e,n),gs(e,Vo()),t;switch(e.finishedWork=e.current.alternate,e.finishedLanes=n,r){case 0:case 1:throw Error(i(345));case 2:case 5:Is(e);break;case 3:if(bs(e,n),(62914560&n)===n&&10<(r=ql+500-Vo())){if(0!==Ft(e,0))break;if(((o=e.suspendedLanes)&n)!==n){fs(),e.pingedLanes|=e.suspendedLanes&o;break}e.timeoutHandle=qr(Is.bind(null,e),r);break}Is(e);break;case 4:if(bs(e,n),(4186112&n)===n)break;for(r=e.eventTimes,o=-1;0<n;){var l=31-Vt(n);a=1<<l,(l=r[l])>o&&(o=l),n&=~a}if(n=o,10<(n=(120>(n=Vo()-n)?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Dl(n/1960))-n)){e.timeoutHandle=qr(Is.bind(null,e),n);break}Is(e);break;default:throw Error(i(329))}}return gs(e,Vo()),e.callbackNode===t?vs.bind(null,e):null}function bs(e,t){for(t&=~Hl,t&=~Ul,e.suspendedLanes|=t,e.pingedLanes&=~t,e=e.expirationTimes;0<t;){var n=31-Vt(t),r=1<<n;e[n]=-1,t&=~r}}function ys(e){if(0!=(48&Il))throw Error(i(327));if(Rs(),e===Al&&0!=(e.expiredLanes&Rl)){var t=Rl,n=Ts(e,t);0!=(zl&Ul)&&(n=Ts(e,t=Ft(e,t)))}else n=Ts(e,t=Ft(e,0));if(0!==e.tag&&2===n&&(Il|=64,e.hydrate&&(e.hydrate=!1,Wr(e.containerInfo)),0!==(t=Bt(e))&&(n=Ts(e,t))),1===n)throw n=Bl,Es(e,0),bs(e,t),gs(e,Vo()),n;return e.finishedWork=e.current.alternate,e.finishedLanes=t,Is(e),gs(e,Vo()),null}function ws(e,t){var n=Il;Il|=1;try{return e(t)}finally{0===(Il=n)&&(Wl(),Qo())}}function xs(e,t){var n=Il;Il&=-2,Il|=8;try{return e(t)}finally{0===(Il=n)&&(Wl(),Qo())}}function _s(e,t){fo(Ml,jl),jl|=t,zl|=t}function ks(){jl=Ml.current,co(Ml)}function Es(e,t){e.finishedWork=null,e.finishedLanes=0;var n=e.timeoutHandle;if(-1!==n&&(e.timeoutHandle=-1,Gr(n)),null!==Ll)for(n=Ll.return;null!==n;){var r=n;switch(r.tag){case 1:null!=(r=r.type.childContextTypes)&&yo();break;case 3:Ra(),co(mo),co(ho),Ya();break;case 5:Ma(r);break;case 4:Ra();break;case 13:case 19:co(Fa);break;case 10:oa(r);break;case 23:case 24:ks()}n=n.return}Al=e,Ll=Gs(e.current,null),Rl=jl=zl=t,Fl=0,Bl=null,Hl=Ul=$l=0}function Ss(e,t){for(;;){var n=Ll;try{if(ra(),Xa.current=Ii,ri){for(var r=ei.memoizedState;null!==r;){var o=r.queue;null!==o&&(o.pending=null),r=r.next}ri=!1}if(Ja=0,ni=ti=ei=null,oi=!1,Nl.current=null,null===n||null===n.return){Fl=1,Bl=t,Ll=null;break}e:{var a=e,i=n.return,l=n,s=t;if(t=Rl,l.flags|=2048,l.firstEffect=l.lastEffect=null,null!==s&&"object"==typeof s&&"function"==typeof s.then){var u=s;if(0==(2&l.mode)){var c=l.alternate;c?(l.updateQueue=c.updateQueue,l.memoizedState=c.memoizedState,l.lanes=c.lanes):(l.updateQueue=null,l.memoizedState=null)}var d=0!=(1&Fa.current),f=i;do{var p;if(p=13===f.tag){var h=f.memoizedState;if(null!==h)p=null!==h.dehydrated;else{var m=f.memoizedProps;p=void 0!==m.fallback&&(!0!==m.unstable_avoidThisFallback||!d)}}if(p){var g=f.updateQueue;if(null===g){var v=new Set;v.add(u),f.updateQueue=v}else g.add(u);if(0==(2&f.mode)){if(f.flags|=64,l.flags|=16384,l.flags&=-2981,1===l.tag)if(null===l.alternate)l.tag=17;else{var b=da(-1,1);b.tag=2,fa(l,b)}l.lanes|=1;break e}s=void 0,l=t;var y=a.pingCache;if(null===y?(y=a.pingCache=new dl,s=new Set,y.set(u,s)):void 0===(s=y.get(u))&&(s=new Set,y.set(u,s)),!s.has(l)){s.add(l);var w=$s.bind(null,a,u,l);u.then(w,w)}f.flags|=4096,f.lanes=t;break e}f=f.return}while(null!==f);s=Error((W(l.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==Fl&&(Fl=2),s=ul(s,l),f=i;do{switch(f.tag){case 3:a=s,f.flags|=4096,t&=-t,f.lanes|=t,pa(f,fl(0,a,t));break e;case 1:a=s;var x=f.type,_=f.stateNode;if(0==(64&f.flags)&&("function"==typeof x.getDerivedStateFromError||null!==_&&"function"==typeof _.componentDidCatch&&(null===Kl||!Kl.has(_)))){f.flags|=4096,t&=-t,f.lanes|=t,pa(f,pl(f,a,t));break e}}f=f.return}while(null!==f)}Ns(n)}catch(k){t=k,Ll===n&&null!==n&&(Ll=n=n.return);continue}break}}function Cs(){var e=Pl.current;return Pl.current=Ii,null===e?Ii:e}function Ts(e,t){var n=Il;Il|=16;var r=Cs();for(Al===e&&Rl===t||Es(e,t);;)try{Os();break}catch(o){Ss(e,o)}if(ra(),Il=n,Pl.current=r,null!==Ll)throw Error(i(261));return Al=null,Rl=0,Fl}function Os(){for(;null!==Ll;)Ps(Ll)}function Ds(){for(;null!==Ll&&!Do();)Ps(Ll)}function Ps(e){var t=Zl(e.alternate,e,jl);e.memoizedProps=e.pendingProps,null===t?Ns(e):Ll=t,Nl.current=null}function Ns(e){var t=e;do{var n=t.alternate;if(e=t.return,0==(2048&t.flags)){if(null!==(n=ll(n,t,jl)))return void(Ll=n);if(24!==(n=t).tag&&23!==n.tag||null===n.memoizedState||0!=(1073741824&jl)||0==(4&n.mode)){for(var r=0,o=n.child;null!==o;)r|=o.lanes|o.childLanes,o=o.sibling;n.childLanes=r}null!==e&&0==(2048&e.flags)&&(null===e.firstEffect&&(e.firstEffect=t.firstEffect),null!==t.lastEffect&&(null!==e.lastEffect&&(e.lastEffect.nextEffect=t.firstEffect),e.lastEffect=t.lastEffect),1<t.flags&&(null!==e.lastEffect?e.lastEffect.nextEffect=t:e.firstEffect=t,e.lastEffect=t))}else{if(null!==(n=sl(t)))return n.flags&=2047,void(Ll=n);null!==e&&(e.firstEffect=e.lastEffect=null,e.flags|=2048)}if(null!==(t=t.sibling))return void(Ll=t);Ll=t=e}while(null!==t);0===Fl&&(Fl=5)}function Is(e){var t=qo();return Wo(99,As.bind(null,e,t)),null}function As(e,t){do{Rs()}while(null!==es);if(0!=(48&Il))throw Error(i(327));var n=e.finishedWork;if(null===n)return null;if(e.finishedWork=null,e.finishedLanes=0,n===e.current)throw Error(i(177));e.callbackNode=null;var r=n.lanes|n.childLanes,o=r,a=e.pendingLanes&~o;e.pendingLanes=o,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=o,e.mutableReadLanes&=o,e.entangledLanes&=o,o=e.entanglements;for(var l=e.eventTimes,s=e.expirationTimes;0<a;){var u=31-Vt(a),c=1<<u;o[u]=0,l[u]=-1,s[u]=-1,a&=~c}if(null!==os&&0==(24&r)&&os.has(e)&&os.delete(e),e===Al&&(Ll=Al=null,Rl=0),1<n.flags?null!==n.lastEffect?(n.lastEffect.nextEffect=n,r=n.firstEffect):r=n:r=n.firstEffect,null!==r){if(o=Il,Il|=32,Nl.current=null,$r=Qt,vr(l=gr())){if("selectionStart"in l)s={start:l.selectionStart,end:l.selectionEnd};else e:if(s=(s=l.ownerDocument)&&s.defaultView||window,(c=s.getSelection&&s.getSelection())&&0!==c.rangeCount){s=c.anchorNode,a=c.anchorOffset,u=c.focusNode,c=c.focusOffset;try{s.nodeType,u.nodeType}catch(C){s=null;break e}var d=0,f=-1,p=-1,h=0,m=0,g=l,v=null;t:for(;;){for(var b;g!==s||0!==a&&3!==g.nodeType||(f=d+a),g!==u||0!==c&&3!==g.nodeType||(p=d+c),3===g.nodeType&&(d+=g.nodeValue.length),null!==(b=g.firstChild);)v=g,g=b;for(;;){if(g===l)break t;if(v===s&&++h===a&&(f=d),v===u&&++m===c&&(p=d),null!==(b=g.nextSibling))break;v=(g=v).parentNode}g=b}s=-1===f||-1===p?null:{start:f,end:p}}else s=null;s=s||{start:0,end:0}}else s=null;Ur={focusedElem:l,selectionRange:s},Qt=!1,cs=null,ds=!1,Ql=r;do{try{Ls()}catch(C){if(null===Ql)throw Error(i(330));zs(Ql,C),Ql=Ql.nextEffect}}while(null!==Ql);cs=null,Ql=r;do{try{for(l=e;null!==Ql;){var y=Ql.flags;if(16&y&&be(Ql.stateNode,""),128&y){var w=Ql.alternate;if(null!==w){var x=w.ref;null!==x&&("function"==typeof x?x(null):x.current=null)}}switch(1038&y){case 2:_l(Ql),Ql.flags&=-3;break;case 6:_l(Ql),Ql.flags&=-3,Cl(Ql.alternate,Ql);break;case 1024:Ql.flags&=-1025;break;case 1028:Ql.flags&=-1025,Cl(Ql.alternate,Ql);break;case 4:Cl(Ql.alternate,Ql);break;case 8:Sl(l,s=Ql);var _=s.alternate;wl(s),null!==_&&wl(_)}Ql=Ql.nextEffect}}catch(C){if(null===Ql)throw Error(i(330));zs(Ql,C),Ql=Ql.nextEffect}}while(null!==Ql);if(x=Ur,w=gr(),y=x.focusedElem,l=x.selectionRange,w!==y&&y&&y.ownerDocument&&mr(y.ownerDocument.documentElement,y)){null!==l&&vr(y)&&(w=l.start,void 0===(x=l.end)&&(x=w),"selectionStart"in y?(y.selectionStart=w,y.selectionEnd=Math.min(x,y.value.length)):(x=(w=y.ownerDocument||document)&&w.defaultView||window).getSelection&&(x=x.getSelection(),s=y.textContent.length,_=Math.min(l.start,s),l=void 0===l.end?_:Math.min(l.end,s),!x.extend&&_>l&&(s=l,l=_,_=s),s=hr(y,_),a=hr(y,l),s&&a&&(1!==x.rangeCount||x.anchorNode!==s.node||x.anchorOffset!==s.offset||x.focusNode!==a.node||x.focusOffset!==a.offset)&&((w=w.createRange()).setStart(s.node,s.offset),x.removeAllRanges(),_>l?(x.addRange(w),x.extend(a.node,a.offset)):(w.setEnd(a.node,a.offset),x.addRange(w))))),w=[];for(x=y;x=x.parentNode;)1===x.nodeType&&w.push({element:x,left:x.scrollLeft,top:x.scrollTop});for("function"==typeof y.focus&&y.focus(),y=0;y<w.length;y++)(x=w[y]).element.scrollLeft=x.left,x.element.scrollTop=x.top}Qt=!!$r,Ur=$r=null,e.current=n,Ql=r;do{try{for(y=e;null!==Ql;){var k=Ql.flags;if(36&k&&vl(y,Ql.alternate,Ql),128&k){w=void 0;var E=Ql.ref;if(null!==E){var S=Ql.stateNode;Ql.tag,w=S,"function"==typeof E?E(w):E.current=w}}Ql=Ql.nextEffect}}catch(C){if(null===Ql)throw Error(i(330));zs(Ql,C),Ql=Ql.nextEffect}}while(null!==Ql);Ql=null,Bo(),Il=o}else e.current=n;if(Jl)Jl=!1,es=e,ts=t;else for(Ql=r;null!==Ql;)t=Ql.nextEffect,Ql.nextEffect=null,8&Ql.flags&&((k=Ql).sibling=null,k.stateNode=null),Ql=t;if(0===(r=e.pendingLanes)&&(Kl=null),1===r?e===is?as++:(as=0,is=e):as=0,n=n.stateNode,So&&"function"==typeof So.onCommitFiberRoot)try{So.onCommitFiberRoot(Eo,n,void 0,64==(64&n.current.flags))}catch(C){}if(gs(e,Vo()),Yl)throw Yl=!1,e=Xl,Xl=null,e;return 0!=(8&Il)||Qo(),null}function Ls(){for(;null!==Ql;){var e=Ql.alternate;ds||null===cs||(0!=(8&Ql.flags)?et(Ql,cs)&&(ds=!0):13===Ql.tag&&Ol(e,Ql)&&et(Ql,cs)&&(ds=!0));var t=Ql.flags;0!=(256&t)&&gl(e,Ql),0==(512&t)||Jl||(Jl=!0,Zo(97,(function(){return Rs(),null}))),Ql=Ql.nextEffect}}function Rs(){if(90!==ts){var e=97<ts?97:ts;return ts=90,Wo(e,Fs)}return!1}function js(e,t){ns.push(t,e),Jl||(Jl=!0,Zo(97,(function(){return Rs(),null})))}function Ms(e,t){rs.push(t,e),Jl||(Jl=!0,Zo(97,(function(){return Rs(),null})))}function Fs(){if(null===es)return!1;var e=es;if(es=null,0!=(48&Il))throw Error(i(331));var t=Il;Il|=32;var n=rs;rs=[];for(var r=0;r<n.length;r+=2){var o=n[r],a=n[r+1],l=o.destroy;if(o.destroy=void 0,"function"==typeof l)try{l()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(n=ns,ns=[],r=0;r<n.length;r+=2){o=n[r],a=n[r+1];try{var s=o.create;o.destroy=s()}catch(u){if(null===a)throw Error(i(330));zs(a,u)}}for(s=e.current.firstEffect;null!==s;)e=s.nextEffect,s.nextEffect=null,8&s.flags&&(s.sibling=null,s.stateNode=null),s=e;return Il=t,Qo(),!0}function Bs(e,t,n){fa(e,t=fl(0,t=ul(n,t),1)),t=fs(),null!==(e=ms(e,1))&&(Ht(e,1,t),gs(e,t))}function zs(e,t){if(3===e.tag)Bs(e,e,t);else for(var n=e.return;null!==n;){if(3===n.tag){Bs(n,e,t);break}if(1===n.tag){var r=n.stateNode;if("function"==typeof n.type.getDerivedStateFromError||"function"==typeof r.componentDidCatch&&(null===Kl||!Kl.has(r))){var o=pl(n,e=ul(t,e),1);if(fa(n,o),o=fs(),null!==(n=ms(n,1)))Ht(n,1,o),gs(n,o);else if("function"==typeof r.componentDidCatch&&(null===Kl||!Kl.has(r)))try{r.componentDidCatch(t,e)}catch(a){}break}}n=n.return}}function $s(e,t,n){var r=e.pingCache;null!==r&&r.delete(t),t=fs(),e.pingedLanes|=e.suspendedLanes&n,Al===e&&(Rl&n)===n&&(4===Fl||3===Fl&&(62914560&Rl)===Rl&&500>Vo()-ql?Es(e,0):Hl|=n),gs(e,t)}function Us(e,t){var n=e.stateNode;null!==n&&n.delete(t),0===(t=0)&&(0==(2&(t=e.mode))?t=1:0==(4&t)?t=99===qo()?1:2:(0===ss&&(ss=zl),0===(t=$t(62914560&~ss))&&(t=4194304))),n=fs(),null!==(e=ms(e,t))&&(Ht(e,t,n),gs(e,n))}function Hs(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.flags=0,this.lastEffect=this.firstEffect=this.nextEffect=null,this.childLanes=this.lanes=0,this.alternate=null}function Vs(e,t,n,r){return new Hs(e,t,n,r)}function qs(e){return!(!(e=e.prototype)||!e.isReactComponent)}function Gs(e,t){var n=e.alternate;return null===n?((n=Vs(e.tag,t,e.key,e.mode)).elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.nextEffect=null,n.firstEffect=null,n.lastEffect=null),n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=null===t?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function Ws(e,t,n,r,o,a){var l=2;if(r=e,"function"==typeof e)qs(e)&&(l=1);else if("string"==typeof e)l=5;else e:switch(e){case E:return Zs(n.children,o,a,t);case j:l=8,o|=16;break;case S:l=8,o|=1;break;case C:return(e=Vs(12,n,t,8|o)).elementType=C,e.type=C,e.lanes=a,e;case P:return(e=Vs(13,n,t,o)).type=P,e.elementType=P,e.lanes=a,e;case N:return(e=Vs(19,n,t,o)).elementType=N,e.lanes=a,e;case M:return Qs(n,o,a,t);case F:return(e=Vs(24,n,t,o)).elementType=F,e.lanes=a,e;default:if("object"==typeof e&&null!==e)switch(e.$$typeof){case T:l=10;break e;case O:l=9;break e;case D:l=11;break e;case I:l=14;break e;case A:l=16,r=null;break e;case L:l=22;break e}throw Error(i(130,null==e?e:typeof e,""))}return(t=Vs(l,n,t,o)).elementType=e,t.type=r,t.lanes=a,t}function Zs(e,t,n,r){return(e=Vs(7,e,r,t)).lanes=n,e}function Qs(e,t,n,r){return(e=Vs(23,e,r,t)).elementType=M,e.lanes=n,e}function Ys(e,t,n){return(e=Vs(6,e,null,t)).lanes=n,e}function Xs(e,t,n){return(t=Vs(4,null!==e.children?e.children:[],e.key,t)).lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Ks(e,t,n){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.pendingContext=this.context=null,this.hydrate=n,this.callbackNode=null,this.callbackPriority=0,this.eventTimes=Ut(0),this.expirationTimes=Ut(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Ut(0),this.mutableSourceEagerHydrationData=null}function Js(e,t,n){var r=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:k,key:null==r?null:""+r,children:e,containerInfo:t,implementation:n}}function eu(e,t,n,r){var o=t.current,a=fs(),l=ps(o);e:if(n){t:{if(Ye(n=n._reactInternals)!==n||1!==n.tag)throw Error(i(170));var s=n;do{switch(s.tag){case 3:s=s.stateNode.context;break t;case 1:if(bo(s.type)){s=s.stateNode.__reactInternalMemoizedMergedChildContext;break t}}s=s.return}while(null!==s);throw Error(i(171))}if(1===n.tag){var u=n.type;if(bo(u)){n=xo(n,u,s);break e}}n=s}else n=po;return null===t.context?t.context=n:t.pendingContext=n,(t=da(a,l)).payload={element:e},null!==(r=void 0===r?null:r)&&(t.callback=r),fa(o,t),hs(o,l,a),l}function tu(e){return(e=e.current).child?(e.child.tag,e.child.stateNode):null}function nu(e,t){if(null!==(e=e.memoizedState)&&null!==e.dehydrated){var n=e.retryLane;e.retryLane=0!==n&&n<t?n:t}}function ru(e,t){nu(e,t),(e=e.alternate)&&nu(e,t)}function ou(e,t,n){var r=null!=n&&null!=n.hydrationOptions&&n.hydrationOptions.mutableSources||null;if(n=new Ks(e,t,null!=n&&!0===n.hydrate),t=Vs(3,null,null,2===t?7:1===t?3:0),n.current=t,t.stateNode=n,ua(t),e[eo]=n.current,Ir(8===e.nodeType?e.parentNode:e),r)for(e=0;e<r.length;e++){var o=(t=r[e])._getVersion;o=o(t._source),null==n.mutableSourceEagerHydrationData?n.mutableSourceEagerHydrationData=[t,o]:n.mutableSourceEagerHydrationData.push(t,o)}this._internalRoot=n}function au(e){return!(!e||1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType&&(8!==e.nodeType||" react-mount-point-unstable "!==e.nodeValue))}function iu(e,t,n,r,o){var a=n._reactRootContainer;if(a){var i=a._internalRoot;if("function"==typeof o){var l=o;o=function(){var e=tu(i);l.call(e)}}eu(t,i,e,o)}else{if(a=n._reactRootContainer=function(e,t){if(t||(t=!(!(t=e?9===e.nodeType?e.documentElement:e.firstChild:null)||1!==t.nodeType||!t.hasAttribute("data-reactroot"))),!t)for(var n;n=e.lastChild;)e.removeChild(n);return new ou(e,0,t?{hydrate:!0}:void 0)}(n,r),i=a._internalRoot,"function"==typeof o){var s=o;o=function(){var e=tu(i);s.call(e)}}xs((function(){eu(t,i,e,o)}))}return tu(i)}function lu(e,t){var n=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!au(t))throw Error(i(200));return Js(e,t,null,n)}Zl=function(e,t,n){var r=t.lanes;if(null!==e)if(e.memoizedProps!==t.pendingProps||mo.current)Mi=!0;else{if(0==(n&r)){switch(Mi=!1,t.tag){case 3:Wi(t),Za();break;case 5:ja(t);break;case 1:bo(t.type)&&_o(t);break;case 4:La(t,t.stateNode.containerInfo);break;case 10:r=t.memoizedProps.value;var o=t.type._context;fo(Jo,o._currentValue),o._currentValue=r;break;case 13:if(null!==t.memoizedState)return 0!=(n&t.child.childLanes)?Ki(e,t,n):(fo(Fa,1&Fa.current),null!==(t=al(e,t,n))?t.sibling:null);fo(Fa,1&Fa.current);break;case 19:if(r=0!=(n&t.childLanes),0!=(64&e.flags)){if(r)return ol(e,t,n);t.flags|=64}if(null!==(o=t.memoizedState)&&(o.rendering=null,o.tail=null,o.lastEffect=null),fo(Fa,Fa.current),r)break;return null;case 23:case 24:return t.lanes=0,Ui(e,t,n)}return al(e,t,n)}Mi=0!=(16384&e.flags)}else Mi=!1;switch(t.lanes=0,t.tag){case 2:if(r=t.type,null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=vo(t,ho.current),ia(t,n),o=li(null,t,r,e,o,n),t.flags|=1,"object"==typeof o&&null!==o&&"function"==typeof o.render&&void 0===o.$$typeof){if(t.tag=1,t.memoizedState=null,t.updateQueue=null,bo(r)){var a=!0;_o(t)}else a=!1;t.memoizedState=null!==o.state&&void 0!==o.state?o.state:null,ua(t);var l=r.getDerivedStateFromProps;"function"==typeof l&&va(t,r,l,e),o.updater=ba,t.stateNode=o,o._reactInternals=t,_a(t,r,e,n),t=Gi(null,t,r,!0,a,n)}else t.tag=0,Fi(null,t,o,n),t=t.child;return t;case 16:o=t.elementType;e:{switch(null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),e=t.pendingProps,o=(a=o._init)(o._payload),t.type=o,a=t.tag=function(e){if("function"==typeof e)return qs(e)?1:0;if(null!=e){if((e=e.$$typeof)===D)return 11;if(e===I)return 14}return 2}(o),e=Ko(o,e),a){case 0:t=Vi(null,t,o,e,n);break e;case 1:t=qi(null,t,o,e,n);break e;case 11:t=Bi(null,t,o,e,n);break e;case 14:t=zi(null,t,o,Ko(o.type,e),r,n);break e}throw Error(i(306,o,""))}return t;case 0:return r=t.type,o=t.pendingProps,Vi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 1:return r=t.type,o=t.pendingProps,qi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 3:if(Wi(t),r=t.updateQueue,null===e||null===r)throw Error(i(282));if(r=t.pendingProps,o=null!==(o=t.memoizedState)?o.element:null,ca(e,t),ha(t,r,null,n),(r=t.memoizedState.element)===o)Za(),t=al(e,t,n);else{if((a=(o=t.stateNode).hydrate)&&($a=Zr(t.stateNode.containerInfo.firstChild),za=t,a=Ua=!0),a){if(null!=(e=o.mutableSourceEagerHydrationData))for(o=0;o<e.length;o+=2)(a=e[o])._workInProgressVersionPrimary=e[o+1],Qa.push(a);for(n=Oa(t,null,r,n),t.child=n;n;)n.flags=-3&n.flags|1024,n=n.sibling}else Fi(e,t,r,n),Za();t=t.child}return t;case 5:return ja(t),null===e&&qa(t),r=t.type,o=t.pendingProps,a=null!==e?e.memoizedProps:null,l=o.children,Vr(r,o)?l=null:null!==a&&Vr(r,a)&&(t.flags|=16),Hi(e,t),Fi(e,t,l,n),t.child;case 6:return null===e&&qa(t),null;case 13:return Ki(e,t,n);case 4:return La(t,t.stateNode.containerInfo),r=t.pendingProps,null===e?t.child=Ta(t,null,r,n):Fi(e,t,r,n),t.child;case 11:return r=t.type,o=t.pendingProps,Bi(e,t,r,o=t.elementType===r?o:Ko(r,o),n);case 7:return Fi(e,t,t.pendingProps,n),t.child;case 8:case 12:return Fi(e,t,t.pendingProps.children,n),t.child;case 10:e:{r=t.type._context,o=t.pendingProps,l=t.memoizedProps,a=o.value;var s=t.type._context;if(fo(Jo,s._currentValue),s._currentValue=a,null!==l)if(s=l.value,0===(a=cr(s,a)?0:0|("function"==typeof r._calculateChangedBits?r._calculateChangedBits(s,a):1073741823))){if(l.children===o.children&&!mo.current){t=al(e,t,n);break e}}else for(null!==(s=t.child)&&(s.return=t);null!==s;){var u=s.dependencies;if(null!==u){l=s.child;for(var c=u.firstContext;null!==c;){if(c.context===r&&0!=(c.observedBits&a)){1===s.tag&&((c=da(-1,n&-n)).tag=2,fa(s,c)),s.lanes|=n,null!==(c=s.alternate)&&(c.lanes|=n),aa(s.return,n),u.lanes|=n;break}c=c.next}}else l=10===s.tag&&s.type===t.type?null:s.child;if(null!==l)l.return=s;else for(l=s;null!==l;){if(l===t){l=null;break}if(null!==(s=l.sibling)){s.return=l.return,l=s;break}l=l.return}s=l}Fi(e,t,o.children,n),t=t.child}return t;case 9:return o=t.type,r=(a=t.pendingProps).children,ia(t,n),r=r(o=la(o,a.unstable_observedBits)),t.flags|=1,Fi(e,t,r,n),t.child;case 14:return a=Ko(o=t.type,t.pendingProps),zi(e,t,o,a=Ko(o.type,a),r,n);case 15:return $i(e,t,t.type,t.pendingProps,r,n);case 17:return r=t.type,o=t.pendingProps,o=t.elementType===r?o:Ko(r,o),null!==e&&(e.alternate=null,t.alternate=null,t.flags|=2),t.tag=1,bo(r)?(e=!0,_o(t)):e=!1,ia(t,n),wa(t,r,o),_a(t,r,o,n),Gi(null,t,r,!0,e,n);case 19:return ol(e,t,n);case 23:case 24:return Ui(e,t,n)}throw Error(i(156,t.tag))},ou.prototype.render=function(e){eu(e,this._internalRoot,null,null)},ou.prototype.unmount=function(){var e=this._internalRoot,t=e.containerInfo;eu(null,e,null,(function(){t[eo]=null}))},tt=function(e){13===e.tag&&(hs(e,4,fs()),ru(e,4))},nt=function(e){13===e.tag&&(hs(e,67108864,fs()),ru(e,67108864))},rt=function(e){if(13===e.tag){var t=fs(),n=ps(e);hs(e,n,t),ru(e,n)}},ot=function(e,t){return t()},Te=function(e,t,n){switch(t){case"input":if(ne(e,n),t=n.name,"radio"===n.type&&null!=t){for(n=e;n.parentNode;)n=n.parentNode;for(n=n.querySelectorAll("input[name="+JSON.stringify(""+t)+'][type="radio"]'),t=0;t<n.length;t++){var r=n[t];if(r!==e&&r.form===e.form){var o=ao(r);if(!o)throw Error(i(90));X(r),ne(r,o)}}}break;case"textarea":ue(e,n);break;case"select":null!=(t=n.value)&&ie(e,!!n.multiple,t,!1)}},Ae=ws,Le=function(e,t,n,r,o){var a=Il;Il|=4;try{return Wo(98,e.bind(null,t,n,r,o))}finally{0===(Il=a)&&(Wl(),Qo())}},Re=function(){0==(49&Il)&&(function(){if(null!==os){var e=os;os=null,e.forEach((function(e){e.expiredLanes|=24&e.pendingLanes,gs(e,Vo())}))}Qo()}(),Rs())},je=function(e,t){var n=Il;Il|=2;try{return e(t)}finally{0===(Il=n)&&(Wl(),Qo())}};var su={Events:[ro,oo,ao,Ne,Ie,Rs,{current:!1}]},uu={findFiberByHostInstance:no,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"},cu={bundleType:uu.bundleType,version:uu.version,rendererPackageName:uu.rendererPackageName,rendererConfig:uu.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:x.ReactCurrentDispatcher,findHostInstanceByFiber:function(e){return null===(e=Je(e))?null:e.stateNode},findFiberByHostInstance:uu.findFiberByHostInstance||function(){return null},findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var du=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!du.isDisabled&&du.supportsFiber)try{Eo=du.inject(cu),So=du}catch(ge){}}t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=su,t.createPortal=lu,t.findDOMNode=function(e){if(null==e)return null;if(1===e.nodeType)return e;var t=e._reactInternals;if(void 0===t){if("function"==typeof e.render)throw Error(i(188));throw Error(i(268,Object.keys(e)))}return e=null===(e=Je(t))?null:e.stateNode},t.flushSync=function(e,t){var n=Il;if(0!=(48&n))return e(t);Il|=1;try{if(e)return Wo(99,e.bind(null,t))}finally{Il=n,Qo()}},t.hydrate=function(e,t,n){if(!au(t))throw Error(i(200));return iu(null,e,t,!0,n)},t.render=function(e,t,n){if(!au(t))throw Error(i(200));return iu(null,e,t,!1,n)},t.unmountComponentAtNode=function(e){if(!au(e))throw Error(i(40));return!!e._reactRootContainer&&(xs((function(){iu(null,null,e,!1,(function(){e._reactRootContainer=null,e[eo]=null}))})),!0)},t.unstable_batchedUpdates=ws,t.unstable_createPortal=function(e,t){return lu(e,t,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)},t.unstable_renderSubtreeIntoContainer=function(e,t,n,r){if(!au(n))throw Error(i(200));if(null==e||void 0===e._reactInternals)throw Error(i(38));return iu(e,t,n,!1,r)},t.version="17.0.2"},73935:(e,t,n)=>{"use strict";!function e(){if("undefined"!=typeof __REACT_DEVTOOLS_GLOBAL_HOOK__&&"function"==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE)try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}(),e.exports=n(64448)},69590:e=>{var t="undefined"!=typeof Element,n="function"==typeof Map,r="function"==typeof Set,o="function"==typeof ArrayBuffer&&!!ArrayBuffer.isView;function a(e,i){if(e===i)return!0;if(e&&i&&"object"==typeof e&&"object"==typeof i){if(e.constructor!==i.constructor)return!1;var l,s,u,c;if(Array.isArray(e)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(!a(e[s],i[s]))return!1;return!0}if(n&&e instanceof Map&&i instanceof Map){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;for(c=e.entries();!(s=c.next()).done;)if(!a(s.value[1],i.get(s.value[0])))return!1;return!0}if(r&&e instanceof Set&&i instanceof Set){if(e.size!==i.size)return!1;for(c=e.entries();!(s=c.next()).done;)if(!i.has(s.value[0]))return!1;return!0}if(o&&ArrayBuffer.isView(e)&&ArrayBuffer.isView(i)){if((l=e.length)!=i.length)return!1;for(s=l;0!=s--;)if(e[s]!==i[s])return!1;return!0}if(e.constructor===RegExp)return e.source===i.source&&e.flags===i.flags;if(e.valueOf!==Object.prototype.valueOf)return e.valueOf()===i.valueOf();if(e.toString!==Object.prototype.toString)return e.toString()===i.toString();if((l=(u=Object.keys(e)).length)!==Object.keys(i).length)return!1;for(s=l;0!=s--;)if(!Object.prototype.hasOwnProperty.call(i,u[s]))return!1;if(t&&e instanceof Element)return!1;for(s=l;0!=s--;)if(("_owner"!==u[s]&&"__v"!==u[s]&&"__o"!==u[s]||!e.$$typeof)&&!a(e[u[s]],i[u[s]]))return!1;return!0}return e!=e&&i!=i}e.exports=function(e,t){try{return a(e,t)}catch(n){if((n.message||"").match(/stack|recursion/i))return console.warn("react-fast-compare cannot handle circular refs"),!1;throw n}}},70405:(e,t,n)=>{"use strict";n.d(t,{B6:()=>q,ql:()=>J});var r=n(67294),o=n(45697),a=n.n(o),i=n(69590),l=n.n(i),s=n(41143),u=n.n(s),c=n(96774),d=n.n(c);function f(){return f=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},f.apply(this,arguments)}function p(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,h(e,t)}function h(e,t){return h=Object.setPrototypeOf||function(e,t){return e.__proto__=t,e},h(e,t)}function m(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)t.indexOf(n=a[r])>=0||(o[n]=e[n]);return o}var g={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},v={rel:["amphtml","canonical","alternate"]},b={type:["application/ld+json"]},y={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},w=Object.keys(g).map((function(e){return g[e]})),x={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},_=Object.keys(x).reduce((function(e,t){return e[x[t]]=t,e}),{}),k=function(e,t){for(var n=e.length-1;n>=0;n-=1){var r=e[n];if(Object.prototype.hasOwnProperty.call(r,t))return r[t]}return null},E=function(e){var t=k(e,g.TITLE),n=k(e,"titleTemplate");if(Array.isArray(t)&&(t=t.join("")),n&&t)return n.replace(/%s/g,(function(){return t}));var r=k(e,"defaultTitle");return t||r||void 0},S=function(e){return k(e,"onChangeClientState")||function(){}},C=function(e,t){return t.filter((function(t){return void 0!==t[e]})).map((function(t){return t[e]})).reduce((function(e,t){return f({},e,t)}),{})},T=function(e,t){return t.filter((function(e){return void 0!==e[g.BASE]})).map((function(e){return e[g.BASE]})).reverse().reduce((function(t,n){if(!t.length)for(var r=Object.keys(n),o=0;o<r.length;o+=1){var a=r[o].toLowerCase();if(-1!==e.indexOf(a)&&n[a])return t.concat(n)}return t}),[])},O=function(e,t,n){var r={};return n.filter((function(t){return!!Array.isArray(t[e])||(void 0!==t[e]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+e+' should be of type "Array". Instead found type "'+typeof t[e]+'"'),!1)})).map((function(t){return t[e]})).reverse().reduce((function(e,n){var o={};n.filter((function(e){for(var n,a=Object.keys(e),i=0;i<a.length;i+=1){var l=a[i],s=l.toLowerCase();-1===t.indexOf(s)||"rel"===n&&"canonical"===e[n].toLowerCase()||"rel"===s&&"stylesheet"===e[s].toLowerCase()||(n=s),-1===t.indexOf(l)||"innerHTML"!==l&&"cssText"!==l&&"itemprop"!==l||(n=l)}if(!n||!e[n])return!1;var u=e[n].toLowerCase();return r[n]||(r[n]={}),o[n]||(o[n]={}),!r[n][u]&&(o[n][u]=!0,!0)})).reverse().forEach((function(t){return e.push(t)}));for(var a=Object.keys(o),i=0;i<a.length;i+=1){var l=a[i],s=f({},r[l],o[l]);r[l]=s}return e}),[]).reverse()},D=function(e,t){if(Array.isArray(e)&&e.length)for(var n=0;n<e.length;n+=1)if(e[n][t])return!0;return!1},P=function(e){return Array.isArray(e)?e.join(""):e},N=function(e,t){return Array.isArray(e)?e.reduce((function(e,n){return function(e,t){for(var n=Object.keys(e),r=0;r<n.length;r+=1)if(t[n[r]]&&t[n[r]].includes(e[n[r]]))return!0;return!1}(n,t)?e.priority.push(n):e.default.push(n),e}),{priority:[],default:[]}):{default:e}},I=function(e,t){var n;return f({},e,((n={})[t]=void 0,n))},A=[g.NOSCRIPT,g.SCRIPT,g.STYLE],L=function(e,t){return void 0===t&&(t=!0),!1===t?String(e):String(e).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},R=function(e){return Object.keys(e).reduce((function(t,n){var r=void 0!==e[n]?n+'="'+e[n]+'"':""+n;return t?t+" "+r:r}),"")},j=function(e,t){return void 0===t&&(t={}),Object.keys(e).reduce((function(t,n){return t[x[n]||n]=e[n],t}),t)},M=function(e,t){return t.map((function(t,n){var o,a=((o={key:n})["data-rh"]=!0,o);return Object.keys(t).forEach((function(e){var n=x[e]||e;"innerHTML"===n||"cssText"===n?a.dangerouslySetInnerHTML={__html:t.innerHTML||t.cssText}:a[n]=t[e]})),r.createElement(e,a)}))},F=function(e,t,n){switch(e){case g.TITLE:return{toComponent:function(){return n=t.titleAttributes,(o={key:e=t.title})["data-rh"]=!0,a=j(n,o),[r.createElement(g.TITLE,a,e)];var e,n,o,a},toString:function(){return function(e,t,n,r){var o=R(n),a=P(t);return o?"<"+e+' data-rh="true" '+o+">"+L(a,r)+"</"+e+">":"<"+e+' data-rh="true">'+L(a,r)+"</"+e+">"}(e,t.title,t.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return j(t)},toString:function(){return R(t)}};default:return{toComponent:function(){return M(e,t)},toString:function(){return function(e,t,n){return t.reduce((function(t,r){var o=Object.keys(r).filter((function(e){return!("innerHTML"===e||"cssText"===e)})).reduce((function(e,t){var o=void 0===r[t]?t:t+'="'+L(r[t],n)+'"';return e?e+" "+o:o}),""),a=r.innerHTML||r.cssText||"",i=-1===A.indexOf(e);return t+"<"+e+' data-rh="true" '+o+(i?"/>":">"+a+"</"+e+">")}),"")}(e,t,n)}}}},B=function(e){var t=e.baseTag,n=e.bodyAttributes,r=e.encode,o=e.htmlAttributes,a=e.noscriptTags,i=e.styleTags,l=e.title,s=void 0===l?"":l,u=e.titleAttributes,c=e.linkTags,d=e.metaTags,f=e.scriptTags,p={toComponent:function(){},toString:function(){return""}};if(e.prioritizeSeoTags){var h=function(e){var t=e.linkTags,n=e.scriptTags,r=e.encode,o=N(e.metaTags,y),a=N(t,v),i=N(n,b);return{priorityMethods:{toComponent:function(){return[].concat(M(g.META,o.priority),M(g.LINK,a.priority),M(g.SCRIPT,i.priority))},toString:function(){return F(g.META,o.priority,r)+" "+F(g.LINK,a.priority,r)+" "+F(g.SCRIPT,i.priority,r)}},metaTags:o.default,linkTags:a.default,scriptTags:i.default}}(e);p=h.priorityMethods,c=h.linkTags,d=h.metaTags,f=h.scriptTags}return{priority:p,base:F(g.BASE,t,r),bodyAttributes:F("bodyAttributes",n,r),htmlAttributes:F("htmlAttributes",o,r),link:F(g.LINK,c,r),meta:F(g.META,d,r),noscript:F(g.NOSCRIPT,a,r),script:F(g.SCRIPT,f,r),style:F(g.STYLE,i,r),title:F(g.TITLE,{title:s,titleAttributes:u},r)}},z=[],$=function(e,t){var n=this;void 0===t&&(t="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(e){n.context.helmet=e},helmetInstances:{get:function(){return n.canUseDOM?z:n.instances},add:function(e){(n.canUseDOM?z:n.instances).push(e)},remove:function(e){var t=(n.canUseDOM?z:n.instances).indexOf(e);(n.canUseDOM?z:n.instances).splice(t,1)}}},this.context=e,this.canUseDOM=t,t||(e.helmet=B({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},U=r.createContext({}),H=a().shape({setHelmet:a().func,helmetInstances:a().shape({get:a().func,add:a().func,remove:a().func})}),V="undefined"!=typeof document,q=function(e){function t(n){var r;return(r=e.call(this,n)||this).helmetData=new $(r.props.context,t.canUseDOM),r}return p(t,e),t.prototype.render=function(){return r.createElement(U.Provider,{value:this.helmetData.value},this.props.children)},t}(r.Component);q.canUseDOM=V,q.propTypes={context:a().shape({helmet:a().shape()}),children:a().node.isRequired},q.defaultProps={context:{}},q.displayName="HelmetProvider";var G=function(e,t){var n,r=document.head||document.querySelector(g.HEAD),o=r.querySelectorAll(e+"[data-rh]"),a=[].slice.call(o),i=[];return t&&t.length&&t.forEach((function(t){var r=document.createElement(e);for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&("innerHTML"===o?r.innerHTML=t.innerHTML:"cssText"===o?r.styleSheet?r.styleSheet.cssText=t.cssText:r.appendChild(document.createTextNode(t.cssText)):r.setAttribute(o,void 0===t[o]?"":t[o]));r.setAttribute("data-rh","true"),a.some((function(e,t){return n=t,r.isEqualNode(e)}))?a.splice(n,1):i.push(r)})),a.forEach((function(e){return e.parentNode.removeChild(e)})),i.forEach((function(e){return r.appendChild(e)})),{oldTags:a,newTags:i}},W=function(e,t){var n=document.getElementsByTagName(e)[0];if(n){for(var r=n.getAttribute("data-rh"),o=r?r.split(","):[],a=[].concat(o),i=Object.keys(t),l=0;l<i.length;l+=1){var s=i[l],u=t[s]||"";n.getAttribute(s)!==u&&n.setAttribute(s,u),-1===o.indexOf(s)&&o.push(s);var c=a.indexOf(s);-1!==c&&a.splice(c,1)}for(var d=a.length-1;d>=0;d-=1)n.removeAttribute(a[d]);o.length===a.length?n.removeAttribute("data-rh"):n.getAttribute("data-rh")!==i.join(",")&&n.setAttribute("data-rh",i.join(","))}},Z=function(e,t){var n=e.baseTag,r=e.htmlAttributes,o=e.linkTags,a=e.metaTags,i=e.noscriptTags,l=e.onChangeClientState,s=e.scriptTags,u=e.styleTags,c=e.title,d=e.titleAttributes;W(g.BODY,e.bodyAttributes),W(g.HTML,r),function(e,t){void 0!==e&&document.title!==e&&(document.title=P(e)),W(g.TITLE,t)}(c,d);var f={baseTag:G(g.BASE,n),linkTags:G(g.LINK,o),metaTags:G(g.META,a),noscriptTags:G(g.NOSCRIPT,i),scriptTags:G(g.SCRIPT,s),styleTags:G(g.STYLE,u)},p={},h={};Object.keys(f).forEach((function(e){var t=f[e],n=t.newTags,r=t.oldTags;n.length&&(p[e]=n),r.length&&(h[e]=f[e].oldTags)})),t&&t(),l(e,p,h)},Q=null,Y=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).rendered=!1,t}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!d()(e,this.props)},n.componentDidUpdate=function(){this.emitChange()},n.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},n.emitChange=function(){var e,t,n=this.props.context,r=n.setHelmet,o=null,a=(e=n.helmetInstances.get().map((function(e){var t=f({},e.props);return delete t.context,t})),{baseTag:T(["href"],e),bodyAttributes:C("bodyAttributes",e),defer:k(e,"defer"),encode:k(e,"encodeSpecialCharacters"),htmlAttributes:C("htmlAttributes",e),linkTags:O(g.LINK,["rel","href"],e),metaTags:O(g.META,["name","charset","http-equiv","property","itemprop"],e),noscriptTags:O(g.NOSCRIPT,["innerHTML"],e),onChangeClientState:S(e),scriptTags:O(g.SCRIPT,["src","innerHTML"],e),styleTags:O(g.STYLE,["cssText"],e),title:E(e),titleAttributes:C("titleAttributes",e),prioritizeSeoTags:D(e,"prioritizeSeoTags")});q.canUseDOM?(t=a,Q&&cancelAnimationFrame(Q),t.defer?Q=requestAnimationFrame((function(){Z(t,(function(){Q=null}))})):(Z(t),Q=null)):B&&(o=B(a)),r(o)},n.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},n.render=function(){return this.init(),null},t}(r.Component);Y.propTypes={context:H.isRequired},Y.displayName="HelmetDispatcher";var X=["children"],K=["children"],J=function(e){function t(){return e.apply(this,arguments)||this}p(t,e);var n=t.prototype;return n.shouldComponentUpdate=function(e){return!l()(I(this.props,"helmetData"),I(e,"helmetData"))},n.mapNestedChildrenToProps=function(e,t){if(!t)return null;switch(e.type){case g.SCRIPT:case g.NOSCRIPT:return{innerHTML:t};case g.STYLE:return{cssText:t};default:throw new Error("<"+e.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},n.flattenArrayTypeChildren=function(e){var t,n=e.child,r=e.arrayTypeChildren;return f({},r,((t={})[n.type]=[].concat(r[n.type]||[],[f({},e.newChildProps,this.mapNestedChildrenToProps(n,e.nestedChildren))]),t))},n.mapObjectTypeChildren=function(e){var t,n,r=e.child,o=e.newProps,a=e.newChildProps,i=e.nestedChildren;switch(r.type){case g.TITLE:return f({},o,((t={})[r.type]=i,t.titleAttributes=f({},a),t));case g.BODY:return f({},o,{bodyAttributes:f({},a)});case g.HTML:return f({},o,{htmlAttributes:f({},a)});default:return f({},o,((n={})[r.type]=f({},a),n))}},n.mapArrayTypeChildrenToProps=function(e,t){var n=f({},t);return Object.keys(e).forEach((function(t){var r;n=f({},n,((r={})[t]=e[t],r))})),n},n.warnOnInvalidChildren=function(e,t){return u()(w.some((function(t){return e.type===t})),"function"==typeof e.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+w.join(", ")+" are allowed. Helmet does not support rendering <"+e.type+"> elements. Refer to our API for more information."),u()(!t||"string"==typeof t||Array.isArray(t)&&!t.some((function(e){return"string"!=typeof e})),"Helmet expects a string as a child of <"+e.type+">. Did you forget to wrap your children in braces? ( <"+e.type+">{``}</"+e.type+"> ) Refer to our API for more information."),!0},n.mapChildrenToProps=function(e,t){var n=this,o={};return r.Children.forEach(e,(function(e){if(e&&e.props){var r=e.props,a=r.children,i=m(r,X),l=Object.keys(i).reduce((function(e,t){return e[_[t]||t]=i[t],e}),{}),s=e.type;switch("symbol"==typeof s?s=s.toString():n.warnOnInvalidChildren(e,a),s){case g.FRAGMENT:t=n.mapChildrenToProps(a,t);break;case g.LINK:case g.META:case g.NOSCRIPT:case g.SCRIPT:case g.STYLE:o=n.flattenArrayTypeChildren({child:e,arrayTypeChildren:o,newChildProps:l,nestedChildren:a});break;default:t=n.mapObjectTypeChildren({child:e,newProps:t,newChildProps:l,nestedChildren:a})}}})),this.mapArrayTypeChildrenToProps(o,t)},n.render=function(){var e=this.props,t=e.children,n=m(e,K),o=f({},n),a=n.helmetData;return t&&(o=this.mapChildrenToProps(t,o)),!a||a instanceof $||(a=new $(a.context,a.instances)),a?r.createElement(Y,f({},o,{context:a.value,helmetData:void 0})):r.createElement(U.Consumer,null,(function(e){return r.createElement(Y,f({},o,{context:e}))}))},t}(r.Component);J.propTypes={base:a().object,bodyAttributes:a().object,children:a().oneOfType([a().arrayOf(a().node),a().node]),defaultTitle:a().string,defer:a().bool,encodeSpecialCharacters:a().bool,htmlAttributes:a().object,link:a().arrayOf(a().object),meta:a().arrayOf(a().object),noscript:a().arrayOf(a().object),onChangeClientState:a().func,script:a().arrayOf(a().object),style:a().arrayOf(a().object),title:a().string,titleAttributes:a().object,titleTemplate:a().string,prioritizeSeoTags:a().bool,helmetData:a().object},J.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},J.displayName="Helmet"},69921:(e,t)=>{"use strict";var n="function"==typeof Symbol&&Symbol.for,r=n?Symbol.for("react.element"):60103,o=n?Symbol.for("react.portal"):60106,a=n?Symbol.for("react.fragment"):60107,i=n?Symbol.for("react.strict_mode"):60108,l=n?Symbol.for("react.profiler"):60114,s=n?Symbol.for("react.provider"):60109,u=n?Symbol.for("react.context"):60110,c=n?Symbol.for("react.async_mode"):60111,d=n?Symbol.for("react.concurrent_mode"):60111,f=n?Symbol.for("react.forward_ref"):60112,p=n?Symbol.for("react.suspense"):60113,h=n?Symbol.for("react.suspense_list"):60120,m=n?Symbol.for("react.memo"):60115,g=n?Symbol.for("react.lazy"):60116,v=n?Symbol.for("react.block"):60121,b=n?Symbol.for("react.fundamental"):60117,y=n?Symbol.for("react.responder"):60118,w=n?Symbol.for("react.scope"):60119;function x(e){if("object"==typeof e&&null!==e){var t=e.$$typeof;switch(t){case r:switch(e=e.type){case c:case d:case a:case l:case i:case p:return e;default:switch(e=e&&e.$$typeof){case u:case f:case g:case m:case s:return e;default:return t}}case o:return t}}}function _(e){return x(e)===d}t.AsyncMode=c,t.ConcurrentMode=d,t.ContextConsumer=u,t.ContextProvider=s,t.Element=r,t.ForwardRef=f,t.Fragment=a,t.Lazy=g,t.Memo=m,t.Portal=o,t.Profiler=l,t.StrictMode=i,t.Suspense=p,t.isAsyncMode=function(e){return _(e)||x(e)===c},t.isConcurrentMode=_,t.isContextConsumer=function(e){return x(e)===u},t.isContextProvider=function(e){return x(e)===s},t.isElement=function(e){return"object"==typeof e&&null!==e&&e.$$typeof===r},t.isForwardRef=function(e){return x(e)===f},t.isFragment=function(e){return x(e)===a},t.isLazy=function(e){return x(e)===g},t.isMemo=function(e){return x(e)===m},t.isPortal=function(e){return x(e)===o},t.isProfiler=function(e){return x(e)===l},t.isStrictMode=function(e){return x(e)===i},t.isSuspense=function(e){return x(e)===p},t.isValidElementType=function(e){return"string"==typeof e||"function"==typeof e||e===a||e===d||e===l||e===i||e===p||e===h||"object"==typeof e&&null!==e&&(e.$$typeof===g||e.$$typeof===m||e.$$typeof===s||e.$$typeof===u||e.$$typeof===f||e.$$typeof===b||e.$$typeof===y||e.$$typeof===w||e.$$typeof===v)},t.typeOf=x},59864:(e,t,n)=>{"use strict";e.exports=n(69921)},68356:(e,t,n)=>{"use strict";function r(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.__proto__=t}function o(e){if(void 0===e)throw new ReferenceError("this hasn't been initialised - super() hasn't been called");return e}function a(e,t,n){return t in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function i(){return i=Object.assign||function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},i.apply(this,arguments)}var l=n(67294),s=n(45697),u=[],c=[];function d(e){var t=e(),n={loading:!0,loaded:null,error:null};return n.promise=t.then((function(e){return n.loading=!1,n.loaded=e,e})).catch((function(e){throw n.loading=!1,n.error=e,e})),n}function f(e){var t={loading:!1,loaded:{},error:null},n=[];try{Object.keys(e).forEach((function(r){var o=d(e[r]);o.loading?t.loading=!0:(t.loaded[r]=o.loaded,t.error=o.error),n.push(o.promise),o.promise.then((function(e){t.loaded[r]=e})).catch((function(e){t.error=e}))}))}catch(r){t.error=r}return t.promise=Promise.all(n).then((function(e){return t.loading=!1,e})).catch((function(e){throw t.loading=!1,e})),t}function p(e,t){return l.createElement((n=e)&&n.__esModule?n.default:n,t);var n}function h(e,t){var d,f;if(!t.loading)throw new Error("react-loadable requires a `loading` component");var h=i({loader:null,loading:null,delay:200,timeout:null,render:p,webpack:null,modules:null},t),m=null;function g(){return m||(m=e(h.loader)),m.promise}return u.push(g),"function"==typeof h.webpack&&c.push((function(){if((0,h.webpack)().every((function(e){return void 0!==e&&void 0!==n.m[e]})))return g()})),f=d=function(t){function n(n){var r;return a(o(o(r=t.call(this,n)||this)),"retry",(function(){r.setState({error:null,loading:!0,timedOut:!1}),m=e(h.loader),r._loadModule()})),g(),r.state={error:m.error,pastDelay:!1,timedOut:!1,loading:m.loading,loaded:m.loaded},r}r(n,t),n.preload=function(){return g()};var i=n.prototype;return i.UNSAFE_componentWillMount=function(){this._loadModule()},i.componentDidMount=function(){this._mounted=!0},i._loadModule=function(){var e=this;if(this.context.loadable&&Array.isArray(h.modules)&&h.modules.forEach((function(t){e.context.loadable.report(t)})),m.loading){var t=function(t){e._mounted&&e.setState(t)};"number"==typeof h.delay&&(0===h.delay?this.setState({pastDelay:!0}):this._delay=setTimeout((function(){t({pastDelay:!0})}),h.delay)),"number"==typeof h.timeout&&(this._timeout=setTimeout((function(){t({timedOut:!0})}),h.timeout));var n=function(){t({error:m.error,loaded:m.loaded,loading:m.loading}),e._clearTimeouts()};m.promise.then((function(){return n(),null})).catch((function(e){return n(),null}))}},i.componentWillUnmount=function(){this._mounted=!1,this._clearTimeouts()},i._clearTimeouts=function(){clearTimeout(this._delay),clearTimeout(this._timeout)},i.render=function(){return this.state.loading||this.state.error?l.createElement(h.loading,{isLoading:this.state.loading,pastDelay:this.state.pastDelay,timedOut:this.state.timedOut,error:this.state.error,retry:this.retry}):this.state.loaded?h.render(this.state.loaded,this.props):null},n}(l.Component),a(d,"contextTypes",{loadable:s.shape({report:s.func.isRequired})}),f}function m(e){return h(d,e)}m.Map=function(e){if("function"!=typeof e.render)throw new Error("LoadableMap requires a `render(loaded, props)` function");return h(f,e)};var g=function(e){function t(){return e.apply(this,arguments)||this}r(t,e);var n=t.prototype;return n.getChildContext=function(){return{loadable:{report:this.props.report}}},n.render=function(){return l.Children.only(this.props.children)},t}(l.Component);function v(e){for(var t=[];e.length;){var n=e.pop();t.push(n())}return Promise.all(t).then((function(){if(e.length)return v(e)}))}a(g,"propTypes",{report:s.func.isRequired}),a(g,"childContextTypes",{loadable:s.shape({report:s.func.isRequired}).isRequired}),m.Capture=g,m.preloadAll=function(){return new Promise((function(e,t){v(u).then(e,t)}))},m.preloadReady=function(){return new Promise((function(e,t){v(c).then(e,e)}))},e.exports=m},33199:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>B,hasTranslate3DSupport:()=>h,isTouch:()=>d,make2dTransformValue:()=>f,make3dTransformValue:()=>p});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},a.apply(this,arguments)};Object.create;Object.create;"function"==typeof SuppressedError&&SuppressedError;var i=n(67294),l="kvfysmfp",s="ufhsfnkm",u=".".concat(l,"{overflow:hidden;touch-action:none}.").concat(s,"{transform-origin: 0 0}"),c="undefined"==typeof window,d=function(){return!c&&("ontouchstart"in window||navigator.maxTouchPoints>0)},f=function(e){var t=e.x,n=e.y,r=e.scale;return"scale(".concat(r,") translate(").concat(t,"px, ").concat(n,"px)")},p=function(e){var t=e.x,n=e.y,r=e.scale;return"scale3d(".concat(r,",").concat(r,", 1) translate3d(").concat(t,"px, ").concat(n,"px, 0)")},h=function(){var e=!c&&window.CSS;return e&&e.supports&&e.supports("transform","translate3d(0,0,0)")},m=Math.min,g=Math.max;function v(e){var t=e.containerDimension,n=e.childDimension,r=e.padding,o=e.centerContained,a=n-t;return a+2*r<=0&&o?[a/2,a/2]:[m(a+r,0)-r,g(0,a+r)]}var b=function(e,t){return t?"".concat(e," ").concat(t):e},y=Math.abs,w=Math.min,x=Math.sqrt,_="undefined"==typeof window,k=!_&&/(Mac)/i.test(navigator.platform),E=function(e){return"drag"===e},S=function(e){return"zoom"===e},C=function(e){return k&&e.ctrlKey},T=function(e){e.stopPropagation(),e.preventDefault()},O=function(e,t){var n=e.x-t.x,r=e.y-t.y;return x(n*n+r*r)},D=function(e,t){var n=O(e[0],e[1]);return O(t[0],t[1])/n},P=function(e){return-Math.cos(e*Math.PI)/2+.5},N=function(e){return{x:e.pageX,y:e.pageY}},I=function(e){return Array.from(e).map(N)},A=function(e,t){return e+t},L=function(e,t,n){return n<e?e:n>t?t:n},R=function(e){return!(e.ctrlKey||e.metaKey)},j=function(){},M={x:0,y:0},F=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t._prevDragMovePoint=null,t._containerObserver=null,t._fingers=0,t._firstMove=!0,t._initialOffset=a({},M),t._interaction=null,t._isDoubleTap=!1,t._isOffsetsSet=!1,t._lastDragPosition=null,t._lastScale=1,t._lastTouchStart=0,t._lastZoomCenter=null,t._listenMouseMove=!1,t._nthZoom=0,t._offset=a({},M),t._startOffset=a({},M),t._startTouches=null,t._updatePlaned=!1,t._wheelTimeOut=null,t._zoomFactor=1,t._initialZoomFactor=1,t._draggingPoint=a({},M),t._ignoreNextClick=!1,t._containerRef=i.createRef(),t._handleClick=function(e){t._ignoreNextClick&&(t._ignoreNextClick=!1,e.stopPropagation())},t._onResize=function(){var e;(null===(e=t._containerRef)||void 0===e?void 0:e.current)&&(t._updateInitialZoomFactor(),t._setupOffsets(),t._update())},t._handlerOnTouchEnd=t._handlerIfEnable((function(e){t._fingers=e.touches.length,t.props.shouldCancelHandledTouchEndEvents&&(S(t._interaction)||E(t._interaction)&&(t._startOffset.x!==t._offset.x||t._startOffset.y!==t._offset.y))&&T(e),E(t._interaction)&&!t._enoughToDrag()&&t._handleClick(e),t._updateInteraction(e)})),t._handlerOnTouchStart=t._handlerIfEnable((function(e){t._firstMove=!0,t._fingers=e.touches.length,t._detectDoubleTap(e)})),t._handlerOnTouchMove=t._handlerIfEnable((function(e){t._isDoubleTap||(t._collectInertia(e),t._firstMove?(t._updateInteraction(e),t._interaction&&T(e),t._startOffset=a({},t._offset),t._startTouches=I(e.touches)):(S(t._interaction)?t._startTouches&&2===t._startTouches.length&&2===e.touches.length&&t._handleZoom(e,D(t._startTouches,I(e.touches))):E(t._interaction)&&t._handleDrag(e),t._interaction&&(T(e),t._update())),t._firstMove=!1)})),t._handlerWheel=function(e){if(!t.props.shouldInterceptWheel(e)){T(e);var n=e.pageX,r=e.pageY,o=e.deltaY,a=e.deltaMode,i=1;(C(e)||1===a)&&(i=15);var l={touches:[{pageX:n,pageY:r}]},s=t._getOffsetByFirstTouch(l),u=o*i;t._stopAnimation(),t._scaleTo(t._zoomFactor-u/t.props.wheelScaleFactor,s),t._update(),clearTimeout(t._wheelTimeOut),t._wheelTimeOut=setTimeout((function(){return t._sanitize()}),100)}},t._handlers=t.props.isTouch()?[["touchstart",t._handlerOnTouchStart],["touchend",t._handlerOnTouchEnd],["touchmove",t._handlerOnTouchMove]]:[["mousemove",t.simulate(t._handlerOnTouchMove),t.props._document],["mouseup",t.simulate(t._handlerOnTouchEnd),t.props._document],["mousedown",t.simulate(t._handlerOnTouchStart)],["click",t._handleClick],["wheel",t._handlerWheel]],t}return o(t,e),t.prototype._handleDragStart=function(e){this._ignoreNextClick=!0,this.props.onDragStart(),this._stopAnimation(),this._resetInertia(),this._lastDragPosition=null,this._hasInteraction=!0,this._draggingPoint=this._offset,this._handleDrag(e)},t.prototype._handleDrag=function(e){var t=this._getOffsetByFirstTouch(e);this._enoughToDrag()?this._drag(t,this._lastDragPosition):this._virtualDrag(t,this._lastDragPosition),this._offset=this._sanitizeOffset(this._offset),this._lastDragPosition=t},t.prototype._resetInertia=function(){this._velocity=null,this._prevDragMovePoint=null},t.prototype._realizeInertia=function(){var e=this,t=this.props,n=t.inertiaFriction;if(t.inertia&&this._velocity){var r=this._velocity,o=r.x,i=r.y;if(o||i){this._stopAnimation(),this._resetInertia();this._animate((function(){if(i*=n,!(o*=n)&&!i)return e._stopAnimation();var t,r,l=a({},e._offset);if(e._addOffset({x:o,y:i}),e._offset=e._sanitizeOffset(e._offset),t=l,r=e._offset,t.x===r.x&&t.y===r.y)return e._stopAnimation();e._update({isAnimation:!0})}),{duration:9999})}}},t.prototype._collectInertia=function(e){var t=e.touches;if(this.props.inertia){var n,r,o=I(t)[0],a=this._prevDragMovePoint;a&&(this._velocity=(n=o,{x:(r=a).x-n.x,y:r.y-n.y})),this._prevDragMovePoint=o}},t.prototype._handleDragEnd=function(){this.props.onDragEnd(),this._end(),this._realizeInertia()},t.prototype._handleZoomStart=function(){this.props.onZoomStart(),this._stopAnimation(),this._lastScale=1,this._nthZoom=0,this._lastZoomCenter=null,this._hasInteraction=!0},t.prototype._handleZoom=function(e,t){var n,r={x:(n=this._getOffsetTouches(e)).map((function(e){return e.x})).reduce(A,0)/n.length,y:n.map((function(e){return e.y})).reduce(A,0)/n.length},o=t/this._lastScale;this._lastScale=t,this._nthZoom+=1,this._nthZoom>3&&(this._scale(o,r),this._drag(r,this._lastZoomCenter),this.props.enforceBoundsDuringZoom&&(this._offset=this._sanitizeOffset(this._offset))),this._lastZoomCenter=r},t.prototype._handleZoomEnd=function(){this.props.onZoomEnd(),this._end()},t.prototype._handleDoubleTap=function(e){var t=this;if(!this._hasInteraction&&0!==this.props.tapZoomFactor){var n=this.props.doubleTapZoomOutOnMaxScale&&this._zoomFactor===this.props.maxZoom||this.props.doubleTapToggleZoom&&this._zoomFactor>1;this.props.onDoubleTap(),this._ignoreNextClick=!0;var r=this._zoomFactor+this.props.tapZoomFactor,o=this._zoomFactor,a=this._getOffsetByFirstTouch(e);this._isDoubleTap=!0,o>r&&(a=this._getCurrentZoomCenter()),n?this._zoomOutAnimation():this._animate((function(e){t._scaleTo(o+e*(r-o),a)}))}},t.prototype._computeInitialOffset=function(){var e=this._getContainerRect(),t=this._getChildSize(),n=t.width,r=t.height,o=-y(n*this._getInitialZoomFactor()-e.width)/2,a=-y(r*this._getInitialZoomFactor()-e.height)/2;this._initialOffset={x:o,y:a}},t.prototype._resetOffset=function(){this._offset=a({},this._initialOffset)},t.prototype._setupOffsets=function(){this.props.setOffsetsOnce&&this._isOffsetsSet||(this._isOffsetsSet=!0,this._computeInitialOffset(),this._resetOffset())},t.prototype._sanitizeOffset=function(e){var t=this._getContainerRect(),n=this._getChildSize(),r=n.width,o=n.height,a=r*this._getInitialZoomFactor()*this._zoomFactor,i=o*this._getInitialZoomFactor()*this._zoomFactor,l=v({containerDimension:t.width,childDimension:a,padding:this.props.horizontalPadding,centerContained:this.props.centerContained}),s=l[0],u=l[1],c=v({containerDimension:t.height,childDimension:i,padding:this.props.verticalPadding,centerContained:this.props.centerContained}),d=c[0],f=c[1];return{x:L(s,u,e.x),y:L(d,f,e.y)}},t.prototype.alignCenter=function(e){var t=this,n=a({duration:250,animated:!0},e),r=n.x,o=n.y,i=n.scale,l=n.animated,s=n.duration,u=this._zoomFactor,c=a({},this._offset),d=this._getContainerRect(),f={x:d.width/2,y:d.height/2};if(this._zoomFactor=1,this._offset={x:-(f.x-r),y:-(f.y-o)},this._scaleTo(i,f),this._stopAnimation(),!l)return this._update();var p=this._zoomFactor-u,h=this._offset.x-c.x,m=this._offset.y-c.y;this._zoomFactor=u,this._offset=a({},c);this._animate((function(e){var n=c.x+h*e,r=c.y+m*e;t._zoomFactor=u+p*e,t._offset=t._sanitizeOffset({x:n,y:r}),t._update()}),{callback:function(){return t._sanitize()},duration:s})},t.prototype.scaleTo=function(e){var t=this,n=a({duration:250,animated:!0},e),r=n.x,o=n.y,i=n.scale,l=n.animated,s=n.duration,u=this._zoomFactor,c=a({},this._offset);if(this._zoomFactor=1,this._offset={x:0,y:0},this._scaleTo(i,{x:r,y:o}),this._stopAnimation(),!l)return this._update();var d=this._zoomFactor-u,f=this._offset.x-c.x,p=this._offset.y-c.y;this._zoomFactor=u,this._offset=a({},c);this._animate((function(e){var n=c.x+f*e,r=c.y+p*e;t._zoomFactor=u+d*e,t._offset={x:n,y:r},t._update()}),{callback:function(){return t._sanitize()},duration:s})},t.prototype._scaleTo=function(e,t){this._scale(e/this._zoomFactor,t),this._offset=this._sanitizeOffset(this._offset)},t.prototype._scale=function(e,t){e=this._scaleZoomFactor(e),this._addOffset({x:(e-1)*(t.x+this._offset.x),y:(e-1)*(t.y+this._offset.y)}),this.props.onZoomUpdate()},t.prototype._scaleZoomFactor=function(e){var t=this._zoomFactor;return this._zoomFactor*=e,this._zoomFactor=L(this.props.minZoom,this.props.maxZoom,this._zoomFactor),this._zoomFactor/t},t.prototype._canDrag=function(){return this.props.draggableUnZoomed||!((e=this._zoomFactor)>(t=1)-.01&&e<t+.01);var e,t},t.prototype._drag=function(e,t){if(t){var n=-(e.y-t.y),r=-(e.x-t.x);this.props.lockDragAxis?y(r)>y(n)?this._addOffset({x:r,y:0}):this._addOffset({y:n,x:0}):this._addOffset({x:r,y:n}),this.props.onDragUpdate()}},t.prototype._virtualDrag=function(e,t){if(t){var n=-(e.y-t.y),r=-(e.x-t.x);this._draggingPoint={x:r+this._draggingPoint.x,y:n+this._draggingPoint.y}}},t.prototype._addOffset=function(e){var t=this._offset,n=t.x,r=t.y;this._offset={x:n+e.x,y:r+e.y}},t.prototype._sanitize=function(){this._zoomFactor<this.props.zoomOutFactor?(this._resetInertia(),this._zoomOutAnimation()):this._isInsaneOffset()&&this._sanitizeOffsetAnimation()},t.prototype._isInsaneOffset=function(){var e=this._offset,t=this._sanitizeOffset(e);return t.x!==e.x||t.y!==e.y},t.prototype._sanitizeOffsetAnimation=function(){var e=this,t=this._sanitizeOffset(this._offset),n=a({},this._offset);this._animate((function(r){var o=n.x+r*(t.x-n.x),a=n.y+r*(t.y-n.y);e._offset={x:o,y:a},e._update()}))},t.prototype._zoomOutAnimation=function(){var e=this;if(1!==this._zoomFactor){var t=this._zoomFactor,n=this._getCurrentZoomCenter();this._animate((function(r){var o=t+r*(1-t);e._scaleTo(o,n)}))}},t.prototype._getInitialZoomFactor=function(){return this._initialZoomFactor},t.prototype._getCurrentZoomCenter=function(){var e=this._offset,t=e.x,n=e.y,r=t-this._initialOffset.x,o=n-this._initialOffset.y;return{x:-1*t-r/(1/this._zoomFactor-1),y:-1*n-o/(1/this._zoomFactor-1)}},t.prototype._getOffsetByFirstTouch=function(e){return this._getOffsetTouches(e)[0]},t.prototype._getOffsetTouches=function(e){var t=this.props._document,n=t.documentElement,r=t.body,o=this._getContainerRect(),a=o.top,i=o.left,l=n.scrollTop||r.scrollTop,s=n.scrollLeft||r.scrollLeft,u=a+l,c=i+s;return I(e.touches).map((function(e){var t=e.x,n=e.y;return{x:t-c,y:n-u}}))},t.prototype._animate=function(e,t){var n=this,r=(new Date).getTime(),o=a({timeFn:P,callback:function(){},duration:this.props.animationDuration},t),i=o.timeFn,l=o.callback,s=o.duration,u=function(){if(n._inAnimation){var t=(new Date).getTime()-r,o=t/s;t>=s?(e(1),n._stopAnimation(),l(),n._update()):(o=i(o),e(o),n._update({isAnimation:!0}),requestAnimationFrame(u))}};this._inAnimation=!0,requestAnimationFrame(u)},t.prototype._stopAnimation=function(){this._inAnimation=!1},t.prototype._end=function(){this._hasInteraction=!1,this._sanitize(),this._update()},t.prototype._getContainerRect=function(){return this._containerRef.current.getBoundingClientRect()},t.prototype._getChildSize=function(){var e=this._containerRef.current;return function(e){if(e){var t=e.offsetWidth,n=e.offsetHeight;if(t&&n)return{width:t,height:n};var r=getComputedStyle(e),o=parseFloat(r.width),a=parseFloat(r.height);if(a&&o)return{width:o,height:a}}return{width:0,height:0}}(null==e?void 0:e.firstElementChild)},t.prototype._updateInitialZoomFactor=function(){var e=this._getContainerRect(),t=this._getChildSize(),n=e.width/t.width,r=e.height/t.height;this._initialZoomFactor=w(n,r)},t.prototype._bindEvents=function(){var e=this,t=this._containerRef.current;window.ResizeObserver?(this._containerObserver=new ResizeObserver(this._onResize),this._containerObserver.observe(t)):window.addEventListener("resize",this._onResize),this._handlers.forEach((function(e){var n=e[0],r=e[1];(e[2]||t).addEventListener(n,r,!0)})),Array.from(t.querySelectorAll("img")).forEach((function(t){return t.addEventListener("load",e._onResize)}))},t.prototype._unSubscribe=function(){var e=this,t=this._containerRef.current;this._containerObserver&&(this._containerObserver.disconnect(),this._containerObserver=null),window.removeEventListener("resize",this._onResize),this._handlers.forEach((function(e){var n=e[0],r=e[1];(e[2]||t).removeEventListener(n,r,!0)})),Array.from(t.querySelectorAll("img")).forEach((function(t){return t.removeEventListener("load",e._onResize)}))},t.prototype._update=function(e){var t=this;if(!this._updatePlaned){var n=function(){var e=t._getInitialZoomFactor()*t._zoomFactor,n=-t._offset.x/e,r=-t._offset.y/e;t.props.onUpdate({scale:e,x:n,y:r})};if(null==e?void 0:e.isAnimation)return n();this._updatePlaned=!0,requestAnimationFrame((function(){t._updatePlaned=!1,n()}))}},t.prototype._handlerIfEnable=function(e){var t=this;return function(){for(var n=[],r=0;r<arguments.length;r++)n[r]=arguments[r];t.props.enabled&&e.apply(void 0,n)}},t.prototype._setInteraction=function(e,t){var n=this._interaction;n!==e&&(n&&!e&&(S(n)?this._handleZoomEnd():E(n)&&this._handleDragEnd()),S(e)?this._handleZoomStart():E(e)&&this._handleDragStart(t)),this._interaction=e},t.prototype._distanceBetweenNumbers=function(e,t){return e>t?e-t:t-e},t.prototype._enoughToDrag=function(){return this._distanceBetweenNumbers(this._startOffset.x,this._draggingPoint.x)>5||this._distanceBetweenNumbers(this._startOffset.y,this._draggingPoint.y)>5},t.prototype._updateInteraction=function(e){var t=this._fingers;return 2===t?this._setInteraction("zoom",e):1===t&&this._canDrag()?this._setInteraction("drag",e):void this._setInteraction(null,e)},t.prototype._detectDoubleTap=function(e){var t=(new Date).getTime();this._fingers>1&&(this._lastTouchStart=0),t-this._lastTouchStart<300?(T(e),this._handleDoubleTap(e),S(this._interaction)?this._handleZoomEnd():E(this._interaction)&&this._handleDragEnd()):this._isDoubleTap=!1,1===this._fingers&&(this._lastTouchStart=t)},t.prototype.simulate=function(e){var t=this;return function(n){var r=n.pageX,o=n.pageY,a=n.type,i="mouseup"===a;"mousedown"===a&&(n.preventDefault(),t._listenMouseMove=!0),t._listenMouseMove&&(n.touches=i?[]:[{pageX:r,pageY:o}],e(n)),i&&(t._listenMouseMove=!1)}},t.prototype.componentDidMount=function(){this._bindEvents(),this._update()},t.prototype.componentWillUnmount=function(){this._stopAnimation(),this._unSubscribe()},t.prototype.render=function(){var e=this.props,t=e.children,n=e.containerProps,r=i.Children.only(t),o=n||{};return i.createElement(i.Fragment,null,i.createElement("style",null,u),i.createElement("div",a({},o,{ref:this._containerRef,className:b(l,o.className)}),i.cloneElement(r,{className:b(s,r.props.className)})))},t.defaultProps={animationDuration:250,draggableUnZoomed:!0,enforceBoundsDuringZoom:!1,centerContained:!1,enabled:!0,inertia:!0,inertiaFriction:.96,horizontalPadding:0,isTouch:d,lockDragAxis:!1,maxZoom:5,minZoom:.5,onDoubleTap:j,onDragEnd:j,onDragStart:j,onDragUpdate:j,onZoomEnd:j,onZoomStart:j,onZoomUpdate:j,setOffsetsOnce:!1,shouldInterceptWheel:R,shouldCancelHandledTouchEndEvents:!1,tapZoomFactor:1,verticalPadding:0,wheelScaleFactor:1500,zoomOutFactor:1.3,doubleTapZoomOutOnMaxScale:!1,doubleTapToggleZoom:!1,_document:_?null:window.document},t}(i.Component);const B=F},18790:(e,t,n)=>{"use strict";n.d(t,{H:()=>l,f:()=>i});var r=n(16550),o=n(87462),a=n(67294);function i(e,t,n){return void 0===n&&(n=[]),e.some((function(e){var o=e.path?(0,r.LX)(t,e):n.length?n[n.length-1].match:r.F0.computeRootMatch(t);return o&&(n.push({route:e,match:o}),e.routes&&i(e.routes,t,n)),o})),n}function l(e,t,n){return void 0===t&&(t={}),void 0===n&&(n={}),e?a.createElement(r.rs,n,e.map((function(e,n){return a.createElement(r.AW,{key:e.key||n,path:e.path,exact:e.exact,strict:e.strict,render:function(n){return e.render?e.render((0,o.Z)({},n,{},t,{route:e})):a.createElement(e.component,(0,o.Z)({},n,t,{route:e}))}})}))):null}},73727:(e,t,n)=>{"use strict";n.d(t,{OL:()=>y,VK:()=>c,rU:()=>g});var r=n(16550),o=n(75068),a=n(67294),i=n(42358),l=n(87462),s=n(63366),u=n(38776),c=function(e){function t(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).history=(0,i.lX)(t.props),t}return(0,o.Z)(t,e),t.prototype.render=function(){return a.createElement(r.F0,{history:this.history,children:this.props.children})},t}(a.Component);a.Component;var d=function(e,t){return"function"==typeof e?e(t):e},f=function(e,t){return"string"==typeof e?(0,i.ob)(e,null,null,t):e},p=function(e){return e},h=a.forwardRef;void 0===h&&(h=p);var m=h((function(e,t){var n=e.innerRef,r=e.navigate,o=e.onClick,i=(0,s.Z)(e,["innerRef","navigate","onClick"]),u=i.target,c=(0,l.Z)({},i,{onClick:function(e){try{o&&o(e)}catch(t){throw e.preventDefault(),t}e.defaultPrevented||0!==e.button||u&&"_self"!==u||function(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}(e)||(e.preventDefault(),r())}});return c.ref=p!==h&&t||n,a.createElement("a",c)}));var g=h((function(e,t){var n=e.component,o=void 0===n?m:n,c=e.replace,g=e.to,v=e.innerRef,b=(0,s.Z)(e,["component","replace","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=e.history,r=f(d(g,e.location),e.location),s=r?n.createHref(r):"",m=(0,l.Z)({},b,{href:s,navigate:function(){var t=d(g,e.location),r=(0,i.Ep)(e.location)===(0,i.Ep)(f(t));(c||r?n.replace:n.push)(t)}});return p!==h?m.ref=t||v:m.innerRef=v,a.createElement(o,m)}))})),v=function(e){return e},b=a.forwardRef;void 0===b&&(b=v);var y=b((function(e,t){var n=e["aria-current"],o=void 0===n?"page":n,i=e.activeClassName,c=void 0===i?"active":i,p=e.activeStyle,h=e.className,m=e.exact,y=e.isActive,w=e.location,x=e.sensitive,_=e.strict,k=e.style,E=e.to,S=e.innerRef,C=(0,s.Z)(e,["aria-current","activeClassName","activeStyle","className","exact","isActive","location","sensitive","strict","style","to","innerRef"]);return a.createElement(r.s6.Consumer,null,(function(e){e||(0,u.Z)(!1);var n=w||e.location,i=f(d(E,n),n),s=i.pathname,T=s&&s.replace(/([.+*?=^!:${}()[\]|/\\])/g,"\\$1"),O=T?(0,r.LX)(n.pathname,{path:T,exact:m,sensitive:x,strict:_}):null,D=!!(y?y(O,n):O),P="function"==typeof h?h(D):h,N="function"==typeof k?k(D):k;D&&(P=function(){for(var e=arguments.length,t=new Array(e),n=0;n<e;n++)t[n]=arguments[n];return t.filter((function(e){return e})).join(" ")}(P,c),N=(0,l.Z)({},N,p));var I=(0,l.Z)({"aria-current":D&&o||null,className:P,style:N,to:i},C);return v!==b?I.ref=t||S:I.innerRef=S,a.createElement(g,I)}))}))},16550:(e,t,n)=>{"use strict";n.d(t,{AW:()=>D,F0:()=>w,LX:()=>O,TH:()=>F,k6:()=>M,l_:()=>S,rs:()=>R,s6:()=>y});var r=n(75068),o=n(67294),a=n(45697),i=n.n(a),l=n(42358),s=n(38776),u=n(87462),c=n(39658),d=n.n(c),f=(n(59864),n(63366)),p=(n(8679),1073741823),h="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof window?window:void 0!==n.g?n.g:{};function m(e){var t=[];return{on:function(e){t.push(e)},off:function(e){t=t.filter((function(t){return t!==e}))},get:function(){return e},set:function(n,r){e=n,t.forEach((function(t){return t(e,r)}))}}}var g=o.createContext||function(e,t){var n,a,l="__create-react-context-"+function(){var e="__global_unique_id__";return h[e]=(h[e]||0)+1}()+"__",s=function(e){function n(){for(var t,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(t=e.call.apply(e,[this].concat(r))||this).emitter=m(t.props.value),t}(0,r.Z)(n,e);var o=n.prototype;return o.getChildContext=function(){var e;return(e={})[l]=this.emitter,e},o.componentWillReceiveProps=function(e){if(this.props.value!==e.value){var n,r=this.props.value,o=e.value;((a=r)===(i=o)?0!==a||1/a==1/i:a!=a&&i!=i)?n=0:(n="function"==typeof t?t(r,o):p,0!==(n|=0)&&this.emitter.set(e.value,n))}var a,i},o.render=function(){return this.props.children},n}(o.Component);s.childContextTypes=((n={})[l]=i().object.isRequired,n);var u=function(t){function n(){for(var e,n=arguments.length,r=new Array(n),o=0;o<n;o++)r[o]=arguments[o];return(e=t.call.apply(t,[this].concat(r))||this).observedBits=void 0,e.state={value:e.getValue()},e.onUpdate=function(t,n){0!=((0|e.observedBits)&n)&&e.setState({value:e.getValue()})},e}(0,r.Z)(n,t);var o=n.prototype;return o.componentWillReceiveProps=function(e){var t=e.observedBits;this.observedBits=null==t?p:t},o.componentDidMount=function(){this.context[l]&&this.context[l].on(this.onUpdate);var e=this.props.observedBits;this.observedBits=null==e?p:e},o.componentWillUnmount=function(){this.context[l]&&this.context[l].off(this.onUpdate)},o.getValue=function(){return this.context[l]?this.context[l].get():e},o.render=function(){return(e=this.props.children,Array.isArray(e)?e[0]:e)(this.state.value);var e},n}(o.Component);return u.contextTypes=((a={})[l]=i().object,a),{Provider:s,Consumer:u}},v=function(e){var t=g();return t.displayName=e,t},b=v("Router-History"),y=v("Router"),w=function(e){function t(t){var n;return(n=e.call(this,t)||this).state={location:t.history.location},n._isMounted=!1,n._pendingLocation=null,t.staticContext||(n.unlisten=t.history.listen((function(e){n._pendingLocation=e}))),n}(0,r.Z)(t,e),t.computeRootMatch=function(e){return{path:"/",url:"/",params:{},isExact:"/"===e}};var n=t.prototype;return n.componentDidMount=function(){var e=this;this._isMounted=!0,this.unlisten&&this.unlisten(),this.props.staticContext||(this.unlisten=this.props.history.listen((function(t){e._isMounted&&e.setState({location:t})}))),this._pendingLocation&&this.setState({location:this._pendingLocation})},n.componentWillUnmount=function(){this.unlisten&&(this.unlisten(),this._isMounted=!1,this._pendingLocation=null)},n.render=function(){return o.createElement(y.Provider,{value:{history:this.props.history,location:this.state.location,match:t.computeRootMatch(this.state.location.pathname),staticContext:this.props.staticContext}},o.createElement(b.Provider,{children:this.props.children||null,value:this.props.history}))},t}(o.Component);o.Component;var x=function(e){function t(){return e.apply(this,arguments)||this}(0,r.Z)(t,e);var n=t.prototype;return n.componentDidMount=function(){this.props.onMount&&this.props.onMount.call(this,this)},n.componentDidUpdate=function(e){this.props.onUpdate&&this.props.onUpdate.call(this,this,e)},n.componentWillUnmount=function(){this.props.onUnmount&&this.props.onUnmount.call(this,this)},n.render=function(){return null},t}(o.Component);var _={},k=0;function E(e,t){return void 0===e&&(e="/"),void 0===t&&(t={}),"/"===e?e:function(e){if(_[e])return _[e];var t=d().compile(e);return k<1e4&&(_[e]=t,k++),t}(e)(t,{pretty:!0})}function S(e){var t=e.computedMatch,n=e.to,r=e.push,a=void 0!==r&&r;return o.createElement(y.Consumer,null,(function(e){e||(0,s.Z)(!1);var r=e.history,i=e.staticContext,c=a?r.push:r.replace,d=(0,l.ob)(t?"string"==typeof n?E(n,t.params):(0,u.Z)({},n,{pathname:E(n.pathname,t.params)}):n);return i?(c(d),null):o.createElement(x,{onMount:function(){c(d)},onUpdate:function(e,t){var n=(0,l.ob)(t.to);(0,l.Hp)(n,(0,u.Z)({},d,{key:n.key}))||c(d)},to:n})}))}var C={},T=0;function O(e,t){void 0===t&&(t={}),("string"==typeof t||Array.isArray(t))&&(t={path:t});var n=t,r=n.path,o=n.exact,a=void 0!==o&&o,i=n.strict,l=void 0!==i&&i,s=n.sensitive,u=void 0!==s&&s;return[].concat(r).reduce((function(t,n){if(!n&&""!==n)return null;if(t)return t;var r=function(e,t){var n=""+t.end+t.strict+t.sensitive,r=C[n]||(C[n]={});if(r[e])return r[e];var o=[],a={regexp:d()(e,o,t),keys:o};return T<1e4&&(r[e]=a,T++),a}(n,{end:a,strict:l,sensitive:u}),o=r.regexp,i=r.keys,s=o.exec(e);if(!s)return null;var c=s[0],f=s.slice(1),p=e===c;return a&&!p?null:{path:n,url:"/"===n&&""===c?"/":c,isExact:p,params:i.reduce((function(e,t,n){return e[t.name]=f[n],e}),{})}}),null)}var D=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,s.Z)(!1);var n=e.props.location||t.location,r=e.props.computedMatch?e.props.computedMatch:e.props.path?O(n.pathname,e.props):t.match,a=(0,u.Z)({},t,{location:n,match:r}),i=e.props,l=i.children,c=i.component,d=i.render;return Array.isArray(l)&&function(e){return 0===o.Children.count(e)}(l)&&(l=null),o.createElement(y.Provider,{value:a},a.match?l?"function"==typeof l?l(a):l:c?o.createElement(c,a):d?d(a):null:"function"==typeof l?l(a):null)}))},t}(o.Component);function P(e){return"/"===e.charAt(0)?e:"/"+e}function N(e,t){if(!e)return t;var n=P(e);return 0!==t.pathname.indexOf(n)?t:(0,u.Z)({},t,{pathname:t.pathname.substr(n.length)})}function I(e){return"string"==typeof e?e:(0,l.Ep)(e)}function A(e){return function(){(0,s.Z)(!1)}}function L(){}o.Component;var R=function(e){function t(){return e.apply(this,arguments)||this}return(0,r.Z)(t,e),t.prototype.render=function(){var e=this;return o.createElement(y.Consumer,null,(function(t){t||(0,s.Z)(!1);var n,r,a=e.props.location||t.location;return o.Children.forEach(e.props.children,(function(e){if(null==r&&o.isValidElement(e)){n=e;var i=e.props.path||e.props.from;r=i?O(a.pathname,(0,u.Z)({},e.props,{path:i})):t.match}})),r?o.cloneElement(n,{location:a,computedMatch:r}):null}))},t}(o.Component);var j=o.useContext;function M(){return j(b)}function F(){return j(y).location}},76585:e=>{e.exports=Array.isArray||function(e){return"[object Array]"==Object.prototype.toString.call(e)}},39658:(e,t,n)=>{var r=n(76585);e.exports=p,e.exports.parse=a,e.exports.compile=function(e,t){return l(a(e,t),t)},e.exports.tokensToFunction=l,e.exports.tokensToRegExp=f;var o=new RegExp(["(\\\\.)","([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))"].join("|"),"g");function a(e,t){for(var n,r=[],a=0,i=0,l="",c=t&&t.delimiter||"/";null!=(n=o.exec(e));){var d=n[0],f=n[1],p=n.index;if(l+=e.slice(i,p),i=p+d.length,f)l+=f[1];else{var h=e[i],m=n[2],g=n[3],v=n[4],b=n[5],y=n[6],w=n[7];l&&(r.push(l),l="");var x=null!=m&&null!=h&&h!==m,_="+"===y||"*"===y,k="?"===y||"*"===y,E=n[2]||c,S=v||b;r.push({name:g||a++,prefix:m||"",delimiter:E,optional:k,repeat:_,partial:x,asterisk:!!w,pattern:S?u(S):w?".*":"[^"+s(E)+"]+?"})}}return i<e.length&&(l+=e.substr(i)),l&&r.push(l),r}function i(e){return encodeURI(e).replace(/[\/?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()}))}function l(e,t){for(var n=new Array(e.length),o=0;o<e.length;o++)"object"==typeof e[o]&&(n[o]=new RegExp("^(?:"+e[o].pattern+")$",d(t)));return function(t,o){for(var a="",l=t||{},s=(o||{}).pretty?i:encodeURIComponent,u=0;u<e.length;u++){var c=e[u];if("string"!=typeof c){var d,f=l[c.name];if(null==f){if(c.optional){c.partial&&(a+=c.prefix);continue}throw new TypeError('Expected "'+c.name+'" to be defined')}if(r(f)){if(!c.repeat)throw new TypeError('Expected "'+c.name+'" to not repeat, but received `'+JSON.stringify(f)+"`");if(0===f.length){if(c.optional)continue;throw new TypeError('Expected "'+c.name+'" to not be empty')}for(var p=0;p<f.length;p++){if(d=s(f[p]),!n[u].test(d))throw new TypeError('Expected all "'+c.name+'" to match "'+c.pattern+'", but received `'+JSON.stringify(d)+"`");a+=(0===p?c.prefix:c.delimiter)+d}}else{if(d=c.asterisk?encodeURI(f).replace(/[?#]/g,(function(e){return"%"+e.charCodeAt(0).toString(16).toUpperCase()})):s(f),!n[u].test(d))throw new TypeError('Expected "'+c.name+'" to match "'+c.pattern+'", but received "'+d+'"');a+=c.prefix+d}}else a+=c}return a}}function s(e){return e.replace(/([.+*?=^!:${}()[\]|\/\\])/g,"\\$1")}function u(e){return e.replace(/([=!:$\/()])/g,"\\$1")}function c(e,t){return e.keys=t,e}function d(e){return e&&e.sensitive?"":"i"}function f(e,t,n){r(t)||(n=t||n,t=[]);for(var o=(n=n||{}).strict,a=!1!==n.end,i="",l=0;l<e.length;l++){var u=e[l];if("string"==typeof u)i+=s(u);else{var f=s(u.prefix),p="(?:"+u.pattern+")";t.push(u),u.repeat&&(p+="(?:"+f+p+")*"),i+=p=u.optional?u.partial?f+"("+p+")?":"(?:"+f+"("+p+"))?":f+"("+p+")"}}var h=s(n.delimiter||"/"),m=i.slice(-h.length)===h;return o||(i=(m?i.slice(0,-h.length):i)+"(?:"+h+"(?=$))?"),i+=a?"$":o&&m?"":"(?="+h+"|$)",c(new RegExp("^"+i,d(n)),t)}function p(e,t,n){return r(t)||(n=t||n,t=[]),n=n||{},e instanceof RegExp?function(e,t){var n=e.source.match(/\((?!\?)/g);if(n)for(var r=0;r<n.length;r++)t.push({name:r,prefix:null,delimiter:null,optional:!1,repeat:!1,partial:!1,asterisk:!1,pattern:null});return c(e,t)}(e,t):r(e)?function(e,t,n){for(var r=[],o=0;o<e.length;o++)r.push(p(e[o],t,n).source);return c(new RegExp("(?:"+r.join("|")+")",d(n)),t)}(e,t,n):function(e,t,n){return f(a(e,n),t,n)}(e,t,n)}},86718:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(70655).__importDefault(n(45503));t.default=function(e){return!e.prototype?r.default(e):e}},27162:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.divWrapper=void 0;var r=n(70655),o=r.__importStar(n(67294)),a=r.__importDefault(n(86718)),i=o.createElement,l=function(e,t,n,o){var a;return i(e,t?r.__assign(((a={})[t]=o,a),n):r.__assign(r.__assign({},o),n))};t.divWrapper=function(e,t,n,r){return i("div",null,l(e,t,n,r))};t.default=function(e,t,n){void 0===n&&(n=l);var r=function(o,l,s){void 0===l&&(l=t),void 0===s&&(s=null);var u="string"==typeof o;if(u)return function(e){return r(e,o||t,l)};var c=function(t){return i(e,s,(function(e){return n(o,l,t,e)}))};return u?a.default(c):c};return r}},3:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(70655).__importDefault(n(95364)),o=function(e){return[e]};t.default=function(e,t){return void 0===t&&(t=o),function(n){return r.default(n,e.apply(void 0,t(n)))}}},96260:(e,t,n)=>{"use strict";var r=n(70655);r.__importDefault(n(95364)).default,r.__importDefault(n(27162)).default,r.__importDefault(n(3)).default},95364:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(70655),o=n(67294),a=parseInt(o.version.substr(0,o.version.indexOf(".")))>15,i=function(e){return"function"==typeof e};t.default=function(e,t){for(var n=[],l=2;l<arguments.length;l++)n[l-2]=arguments[l];var s=e.render,u=e.children,c=void 0===u?s:u,d=e.component,f=e.comp,p=void 0===f?d:f;return i(c)?c.apply(void 0,r.__spreadArrays([t],n)):p?o.createElement(p,t):c instanceof Array?a?c:o.createElement.apply(void 0,r.__spreadArrays(["div",null],c)):c&&c instanceof Object?"string"==typeof c.type?c:o.cloneElement(c,Object.assign({},c.props,t)):c||null}},45503:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var r=n(70655),o=r.__importStar(n(67294));t.default=function(e){var t=function(t){function n(){return null!==t&&t.apply(this,arguments)||this}return r.__extends(n,t),n.prototype.render=function(){return e(this.props,this.context)},n}(o.Component);return t}},89164:(e,t,n)=>{"use strict";n.r(t),n.d(t,{createBreakpoint:()=>Le,createGlobalState:()=>_n,createMemo:()=>a,createReducer:()=>c,createReducerContext:()=>i,createStateContext:()=>d,ensuredForwardRef:()=>ce,useAsync:()=>m,useAsyncFn:()=>h,useAsyncRetry:()=>g,useAudio:()=>w,useBattery:()=>D,useBeforeUnload:()=>P,useBoolean:()=>A,useClickAway:()=>R,useCookie:()=>F,useCopyToClipboard:()=>$,useCounter:()=>G,useCss:()=>ee,useCustomCompareEffect:()=>te,useDebounce:()=>re,useDeepCompareEffect:()=>oe,useDefault:()=>ae,useDrop:()=>ie,useDropArea:()=>le,useEffectOnce:()=>se,useEnsuredForwardedRef:()=>ue,useError:()=>me,useEvent:()=>he,useFavicon:()=>ge,useFirstMountState:()=>l,useFullscreen:()=>ye,useGeolocation:()=>we,useGetSet:()=>q,useGetSetState:()=>xe,useHarmonicIntervalFn:()=>Ee,useHash:()=>kn,useHover:()=>Ce,useHoverDirty:()=>Te,useIdle:()=>Pe,useIntersection:()=>Ne,useInterval:()=>Ie,useIsomorphicLayoutEffect:()=>X,useKey:()=>Ae,useKeyPress:()=>Re,useKeyPressEvent:()=>je,useLatest:()=>Me,useLifecycles:()=>Fe,useList:()=>Be,useLocalStorage:()=>ze,useLocation:()=>Ve,useLockBodyScroll:()=>Xe,useLogger:()=>Ke,useLongPress:()=>et,useMap:()=>tt,useMeasure:()=>vn,useMedia:()=>nt,useMediaDevices:()=>rt,useMediatedState:()=>ot,useMethods:()=>at,useMotion:()=>lt,useMount:()=>st,useMountedState:()=>p,useMouse:()=>dt,useMouseHovered:()=>pt,useMouseWheel:()=>ht,useMultiStateValidator:()=>pn,useNetworkState:()=>bt,useNumber:()=>yt,useObservable:()=>wt,useOrientation:()=>_t,usePageLeave:()=>kt,usePermission:()=>Et,usePinchZoom:()=>yn,usePrevious:()=>St,usePreviousDistinct:()=>Tt,usePromise:()=>Ot,useQueue:()=>Dt,useRaf:()=>Pt,useRafLoop:()=>Nt,useRafState:()=>ct,useRendersCount:()=>wn,useScratch:()=>Rt,useScroll:()=>jt,useScrollbarWidth:()=>fn,useScrolling:()=>Mt,useSearchParam:()=>At,useSessionStorage:()=>Ft,useSet:()=>xn,useSetState:()=>v,useShallowCompareEffect:()=>$t,useSize:()=>qt,useSlider:()=>Gt,useSpeech:()=>Zt,useStartTyping:()=>Qt,useStateList:()=>Xt,useStateValidator:()=>cn,useStateWithHistory:()=>Yt,useThrottle:()=>Kt,useThrottleFn:()=>Jt,useTimeout:()=>en,useTimeoutFn:()=>ne,useTitle:()=>nn,useToggle:()=>I,useTween:()=>on,useUnmount:()=>ut,useUnmountPromise:()=>an,useUpdate:()=>H,useUpdateEffect:()=>s,useUpsert:()=>ln,useVibrate:()=>sn,useVideo:()=>un,useWindowScroll:()=>hn,useWindowSize:()=>mn});var r=n(67294),o=n.t(r,2);const a=function(e){return function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];return(0,r.useMemo)((function(){return e.apply(void 0,t)}),t)}};const i=function(e,t){var n=(0,r.createContext)(void 0);return[function(){var e=(0,r.useContext)(n);if(null==e)throw new Error("useReducerContext must be used inside a ReducerProvider.");return e},function(o){var a=o.children,i=o.initialState;return function(e,t){return(0,r.createElement)(n.Provider,e,t)}({value:(0,r.useReducer)(e,void 0!==i?i:t)},a)},n]};function l(){var e=(0,r.useRef)(!0);return e.current?(e.current=!1,!0):e.current}const s=function(e,t){var n=l();(0,r.useEffect)((function(){if(!n)return e()}),t)};function u(e){return function(t,n){return e.reduceRight((function(e,n){return n(t)(e)}),n)}}const c=function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];var n=u(e);return function(e,t,o){void 0===o&&(o=function(e){return e});var a=(0,r.useRef)(o(t)),i=(0,r.useState)(a.current)[1],l=(0,r.useCallback)((function(t){return a.current=e(a.current,t),i(a.current),t}),[e]),u=(0,r.useRef)(n({getState:function(){return a.current},dispatch:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return u.current.apply(u,e)}},l));return s((function(){u.current=n({getState:function(){return a.current},dispatch:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];return u.current.apply(u,e)}},l)}),[l]),[a.current,u.current]}};const d=function(e){var t=(0,r.createContext)(void 0);return[function(){var e=(0,r.useContext)(t);if(null==e)throw new Error("useStateContext must be used inside a StateProvider.");return e},function(n){var o=n.children,a=n.initialValue;return function(e,n){return(0,r.createElement)(t.Provider,e,n)}({value:(0,r.useState)(void 0!==a?a:e)},o)},t]};var f=n(70655);function p(){var e=(0,r.useRef)(!1),t=(0,r.useCallback)((function(){return e.current}),[]);return(0,r.useEffect)((function(){return e.current=!0,function(){e.current=!1}}),[]),t}function h(e,t,n){void 0===t&&(t=[]),void 0===n&&(n={loading:!1});var o=(0,r.useRef)(0),a=p(),i=(0,r.useState)(n),l=i[0],s=i[1],u=(0,r.useCallback)((function(){for(var t=[],n=0;n<arguments.length;n++)t[n]=arguments[n];var r=++o.current;return l.loading||s((function(e){return(0,f.__assign)((0,f.__assign)({},e),{loading:!0})})),e.apply(void 0,t).then((function(e){return a()&&r===o.current&&s({value:e,loading:!1}),e}),(function(e){return a()&&r===o.current&&s({error:e,loading:!1}),e}))}),t);return[l,u]}function m(e,t){void 0===t&&(t=[]);var n=h(e,t,{loading:!0}),o=n[0],a=n[1];return(0,r.useEffect)((function(){a()}),[a]),o}const g=function(e,t){void 0===t&&(t=[]);var n=(0,r.useState)(0),o=n[0],a=n[1],i=m(e,(0,f.__spreadArrays)(t,[o])),l=i.loading,s=(0,r.useCallback)((function(){l||a((function(e){return e+1}))}),(0,f.__spreadArrays)(t,[l]));return(0,f.__assign)((0,f.__assign)({},i),{retry:s})};const v=function(e){void 0===e&&(e={});var t=(0,r.useState)(e),n=t[0],o=t[1];return[n,(0,r.useCallback)((function(e){o((function(t){return Object.assign({},t,e instanceof Function?e(t):e)}))}),[])]};function b(e){for(var t=[],n=0;n<e.length;n++)t.push({start:e.start(n),end:e.end(n)});return t}function y(e){return function(t){var n,o;o=r.isValidElement(t)?(n=t).props:t;var a=v({buffered:[],time:0,duration:0,paused:!0,muted:!1,volume:1,playing:!1}),i=a[0],l=a[1],s=(0,r.useRef)(null),u=function(e,t){return function(n){try{t&&t(n)}finally{e&&e(n)}}},c=function(){return l({paused:!1})},d=function(){return l({playing:!0})},p=function(){return l({playing:!1})},h=function(){return l({paused:!0,playing:!1})},m=function(){var e=s.current;e&&l({muted:e.muted,volume:e.volume})},g=function(){var e=s.current;if(e){var t=e.duration,n=e.buffered;l({duration:t,buffered:b(n)})}},y=function(){var e=s.current;e&&l({time:e.currentTime})},w=function(){var e=s.current;e&&l({buffered:b(e.buffered)})};n=n?r.cloneElement(n,(0,f.__assign)((0,f.__assign)({controls:!1},o),{ref:s,onPlay:u(o.onPlay,c),onPlaying:u(o.onPlaying,d),onWaiting:u(o.onWaiting,p),onPause:u(o.onPause,h),onVolumeChange:u(o.onVolumeChange,m),onDurationChange:u(o.onDurationChange,g),onTimeUpdate:u(o.onTimeUpdate,y),onProgress:u(o.onProgress,w)})):r.createElement(e,(0,f.__assign)((0,f.__assign)({controls:!1},o),{ref:s,onPlay:u(o.onPlay,c),onPlaying:u(o.onPlaying,d),onWaiting:u(o.onWaiting,p),onPause:u(o.onPause,h),onVolumeChange:u(o.onVolumeChange,m),onDurationChange:u(o.onDurationChange,g),onTimeUpdate:u(o.onTimeUpdate,y),onProgress:u(o.onProgress,w)}));var x=!1,_={play:function(){var e=s.current;if(e&&!x){var t=e.play();if("object"==typeof t){x=!0;var n=function(){x=!1};t.then(n,n)}return t}},pause:function(){var e=s.current;if(e&&!x)return e.pause()},seek:function(e){var t=s.current;t&&void 0!==i.duration&&(e=Math.min(i.duration,Math.max(0,e)),t.currentTime=e)},volume:function(e){var t=s.current;t&&(e=Math.min(1,Math.max(0,e)),t.volume=e,l({volume:e}))},mute:function(){var e=s.current;e&&(e.muted=!0)},unmute:function(){var e=s.current;e&&(e.muted=!1)}};return(0,r.useEffect)((function(){var e=s.current;e&&(l({volume:e.volume,muted:e.muted,paused:e.paused}),o.autoPlay&&e.paused&&_.play())}),[o.src]),[n,i,_,s]}}const w=y("audio");var x=function(){};function _(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];e&&e.addEventListener&&e.addEventListener.apply(e,t)}function k(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];e&&e.removeEventListener&&e.removeEventListener.apply(e,t)}var E="undefined"!=typeof window,S="undefined"!=typeof navigator,C=n(38252);const T=n.n(C)();var O=S?navigator:void 0;const D=O&&"function"==typeof O.getBattery?function(){var e=(0,r.useState)({isSupported:!0,fetched:!1}),t=e[0],n=e[1];return(0,r.useEffect)((function(){var e=!0,r=null,o=function(){if(e&&r){var o={isSupported:!0,fetched:!0,level:r.level,charging:r.charging,dischargingTime:r.dischargingTime,chargingTime:r.chargingTime};!T(t,o)&&n(o)}};return O.getBattery().then((function(t){e&&(_(r=t,"chargingchange",o),_(r,"chargingtimechange",o),_(r,"dischargingtimechange",o),_(r,"levelchange",o),o())})),function(){e=!1,r&&(k(r,"chargingchange",o),k(r,"chargingtimechange",o),k(r,"dischargingtimechange",o),k(r,"levelchange",o))}}),[]),t}:function(){return{isSupported:!1}};const P=function(e,t){void 0===e&&(e=!0);var n=(0,r.useCallback)((function(n){if("function"!=typeof e||e())return n.preventDefault(),t&&(n.returnValue=t),t}),[e,t]);(0,r.useEffect)((function(){if(e)return _(window,"beforeunload",n),function(){return k(window,"beforeunload",n)}}),[e,n])};var N=function(e,t){return"boolean"==typeof t?t:!e};const I=function(e){return(0,r.useReducer)(N,e)},A=I;var L=["mousedown","touchstart"];const R=function(e,t,n){void 0===n&&(n=L);var o=(0,r.useRef)(t);(0,r.useEffect)((function(){o.current=t}),[t]),(0,r.useEffect)((function(){for(var t=function(t){var n=e.current;n&&!n.contains(t.target)&&o.current(t)},r=0,a=n;r<a.length;r++){var i=a[r];_(document,i,t)}return function(){for(var e=0,r=n;e<r.length;e++){var o=r[e];k(document,o,t)}}}),[n,e])};var j=n(36808),M=n.n(j);const F=function(e){var t=(0,r.useState)((function(){return M().get(e)||null})),n=t[0],o=t[1];return[n,(0,r.useCallback)((function(t,n){M().set(e,t,n),o(t)}),[e]),(0,r.useCallback)((function(){M().remove(e),o(null)}),[e])]};var B=n(20640),z=n.n(B);const $=function(){var e=p(),t=v({value:void 0,error:void 0,noUserInteraction:!0}),n=t[0],o=t[1];return[n,(0,r.useCallback)((function(t){var n,r;if(e())try{if("string"!=typeof t&&"number"!=typeof t){var a=new Error("Cannot copy typeof "+typeof t+" to clipboard, must be a string");return void o({value:t,error:a,noUserInteraction:!0})}if(""===t){a=new Error("Cannot copy empty string to clipboard.");return void o({value:t,error:a,noUserInteraction:!0})}r=t.toString(),n=z()(r),o({value:r,error:void 0,noUserInteraction:n})}catch(a){o({value:r,error:a,noUserInteraction:n})}}),[])]};var U=function(e){return(e+1)%1e6};function H(){return(0,r.useReducer)(U,0)[1]}function V(e,t){return"function"==typeof e?e.length?e(t):e():e}function q(e){var t=(0,r.useRef)(V(e)),n=H();return(0,r.useMemo)((function(){return[function(){return t.current},function(e){t.current=V(e,t.current),n()}]}),[])}function G(e,t,n){void 0===e&&(e=0),void 0===t&&(t=null),void 0===n&&(n=null);var o=V(e);"number"!=typeof o&&console.error("initialValue has to be a number, got "+typeof e),"number"==typeof n?o=Math.max(o,n):null!==n&&console.error("min has to be a number, got "+typeof n),"number"==typeof t?o=Math.min(o,t):null!==t&&console.error("max has to be a number, got "+typeof t);var a=q(o),i=a[0],l=a[1];return[i(),(0,r.useMemo)((function(){var e=function(e){var r=i(),o=V(e,r);r!==o&&("number"==typeof n&&(o=Math.max(o,n)),"number"==typeof t&&(o=Math.min(o,t)),r!==o&&l(o))};return{get:i,set:e,inc:function(t){void 0===t&&(t=1);var n=V(t,i());"number"!=typeof n&&console.error("delta has to be a number or function returning a number, got "+typeof n),e((function(e){return e+n}))},dec:function(t){void 0===t&&(t=1);var n=V(t,i());"number"!=typeof n&&console.error("delta has to be a number or function returning a number, got "+typeof n),e((function(e){return e-n}))},reset:function(t){void 0===t&&(t=o);var n=V(t,i());"number"!=typeof n&&console.error("value has to be a number or function returning a number, got "+typeof n),o=n,e(n)}}}),[o,n,t])]}var W=n(40818),Z=n(97142),Q=n(52099),Y=n(87749);const X=E?r.useLayoutEffect:r.useEffect;var K=(0,W.U)();(0,Z.I)(K),(0,Q.I)(K);var J=0;const ee=function(e){var t=(0,r.useMemo)((function(){return"react-use-css-"+(J++).toString(36)}),[]),n=(0,r.useMemo)((function(){return new K.VSheet}),[]);return X((function(){var r={};return(0,Y.z)(r,e,"."+t,""),n.diff(r),function(){n.diff({})}})),t};const te=function(e,t,n){var o=(0,r.useRef)(void 0);o.current&&n(t,o.current)||(o.current=t),(0,r.useEffect)(e,o.current)};function ne(e,t){void 0===t&&(t=0);var n=(0,r.useRef)(!1),o=(0,r.useRef)(),a=(0,r.useRef)(e),i=(0,r.useCallback)((function(){return n.current}),[]),l=(0,r.useCallback)((function(){n.current=!1,o.current&&clearTimeout(o.current),o.current=setTimeout((function(){n.current=!0,a.current()}),t)}),[t]),s=(0,r.useCallback)((function(){n.current=null,o.current&&clearTimeout(o.current)}),[]);return(0,r.useEffect)((function(){a.current=e}),[e]),(0,r.useEffect)((function(){return l(),s}),[t]),[i,s,l]}function re(e,t,n){void 0===t&&(t=0),void 0===n&&(n=[]);var o=ne(e,t),a=o[0],i=o[1],l=o[2];return(0,r.useEffect)(l,n),[a,i]}const oe=function(e,t){te(e,t,T)};const ae=function(e,t){var n=(0,r.useState)(t),o=n[0],a=n[1];return null==o?[e,a]:[o,a]};const ie=function(e,t){void 0===e&&(e={}),void 0===t&&(t=[]);var n=e.onFiles,o=e.onText,a=e.onUri,i=(0,r.useState)(!1),l=i[0],s=i[1],u=(0,r.useCallback)(s,[]),c=(0,r.useMemo)((function(){return function(e){return function(t,n){var r=t.getData("text/uri-list");if(r)(e.onUri||x)(r,n);else if(t.files&&t.files.length)(e.onFiles||x)(Array.from(t.files),n);else if(n.clipboardData){var o=n.clipboardData.getData("text");(e.onText||x)(o,n)}}}(e)}),[n,o,a]);return(0,r.useEffect)((function(){var e=function(e){e.preventDefault(),u(!0)},t=function(e){e.preventDefault(),u(!0)},n=function(){u(!1)},r=function(){u(!1)},a=function(e){e.preventDefault(),u(!1),c(e.dataTransfer,e)},i=function(e){c(e.clipboardData,e)};return _(document,"dragover",e),_(document,"dragenter",t),_(document,"dragleave",n),_(document,"dragexit",r),_(document,"drop",a),o&&_(document,"paste",i),function(){k(document,"dragover",e),k(document,"dragenter",t),k(document,"dragleave",n),k(document,"dragexit",r),k(document,"drop",a),k(document,"paste",i)}}),(0,f.__spreadArrays)([c],t)),{over:l}};const le=function(e){void 0===e&&(e={});var t=e.onFiles,n=e.onText,o=e.onUri,a=p(),i=(0,r.useState)(!1),l=i[0],s=i[1],u=(0,r.useMemo)((function(){return function(e,t){return function(n,r){var o=n.getData("text/uri-list");o?(e.onUri||x)(o,r):n.files&&n.files.length?(e.onFiles||x)(Array.from(n.files),r):n.items&&n.items.length&&n.items[0].getAsString((function(n){t&&(e.onText||x)(n,r)}))}}(e,a())}),[t,n,o]),c=(0,r.useMemo)((function(){return function(e,t){return{onDragOver:function(e){e.preventDefault()},onDragEnter:function(e){e.preventDefault(),t(!0)},onDragLeave:function(){t(!1)},onDrop:function(n){n.preventDefault(),n.persist(),t(!1),e(n.dataTransfer,n)},onPaste:function(t){t.persist(),e(t.clipboardData,t)}}}(u,s)}),[u,s]);return[c,{over:l}]};const se=function(e){(0,r.useEffect)(e,[])};function ue(e){var t=(0,r.useRef)(e&&e.current);return(0,r.useEffect)((function(){e&&(e.current=t.current)}),[e]),t}function ce(e){return(0,r.forwardRef)((function(t,n){var r=ue(n);return e(t,r)}))}var de=E?window:null,fe=function(e){return!!e.addEventListener},pe=function(e){return!!e.on};const he=function(e,t,n,o){void 0===n&&(n=de),(0,r.useEffect)((function(){if(t&&n)return fe(n)?_(n,e,t,o):pe(n)&&n.on(e,t,o),function(){fe(n)?k(n,e,t,o):pe(n)&&n.off(e,t,o)}}),[e,t,n,JSON.stringify(o)])};const me=function(){var e=(0,r.useState)(null),t=e[0],n=e[1];return(0,r.useEffect)((function(){if(t)throw t}),[t]),(0,r.useCallback)((function(e){n(e)}),[])};const ge=function(e){(0,r.useEffect)((function(){var t=document.querySelector("link[rel*='icon']")||document.createElement("link");t.type="image/x-icon",t.rel="shortcut icon",t.href=e,document.getElementsByTagName("head")[0].appendChild(t)}),[e])};var ve=n(10577),be=n.n(ve);const ye=function(e,t,n){void 0===n&&(n={});var o=n.video,a=n.onClose,i=void 0===a?x:a,l=(0,r.useState)(t),s=l[0],u=l[1];return X((function(){if(t&&e.current){var n=function(){(null==o?void 0:o.current)&&k(o.current,"webkitendfullscreen",n),i()},r=function(){if(be().isEnabled){var e=be().isFullscreen;u(e),e||i()}};if(be().isEnabled){try{be().request(e.current),u(!0)}catch(l){i(l),u(!1)}be().on("change",r)}else o&&o.current&&o.current.webkitEnterFullscreen?(o.current.webkitEnterFullscreen(),_(o.current,"webkitendfullscreen",n),u(!0)):(i(),u(!1));return function(){if(u(!1),be().isEnabled)try{be().off("change",r),be().exit()}catch(a){}else o&&o.current&&o.current.webkitExitFullscreen&&(k(o.current,"webkitendfullscreen",n),o.current.webkitExitFullscreen())}}}),[t,o,e]),s};const we=function(e){var t,n=(0,r.useState)({loading:!0,accuracy:null,altitude:null,altitudeAccuracy:null,heading:null,latitude:null,longitude:null,speed:null,timestamp:Date.now()}),o=n[0],a=n[1],i=!0,l=function(e){i&&a({loading:!1,accuracy:e.coords.accuracy,altitude:e.coords.altitude,altitudeAccuracy:e.coords.altitudeAccuracy,heading:e.coords.heading,latitude:e.coords.latitude,longitude:e.coords.longitude,speed:e.coords.speed,timestamp:e.timestamp})},s=function(e){return i&&a((function(t){return(0,f.__assign)((0,f.__assign)({},t),{loading:!1,error:e})}))};return(0,r.useEffect)((function(){return navigator.geolocation.getCurrentPosition(l,s,e),t=navigator.geolocation.watchPosition(l,s,e),function(){i=!1,navigator.geolocation.clearWatch(t)}}),[]),o};const xe=function(e){void 0===e&&(e={});var t=H(),n=(0,r.useRef)((0,f.__assign)({},e));return[(0,r.useCallback)((function(){return n.current}),[]),(0,r.useCallback)((function(e){e&&(Object.assign(n.current,e),t())}),[])]};var _e=0,ke={};const Ee=function(e,t){void 0===t&&(t=0);var n=(0,r.useRef)((function(){}));(0,r.useEffect)((function(){n.current=e})),(0,r.useEffect)((function(){if(null!==t){var e=function(e,t){var n,r=_e++;if(ke[t])ke[t].listeners[r]=e;else{var o=setInterval((function(){for(var e,n=ke[t].listeners,r=!1,o=0,a=Object.values(n);o<a.length;o++){var i=a[o];try{i()}catch(l){r=!0,e=l}}if(r)throw e}),t);ke[t]={ms:t,timer:o,listeners:(n={},n[r]=e,n)}}return{bucket:ke[t],id:r}}((function(){return n.current()}),t);return function(){return function(e){var t=e.bucket,n=e.id;delete t.listeners[n];var r=!1;for(var o in t.listeners){r=!0;break}r||(clearInterval(t.timer),delete ke[t.ms])}(e)}}}),[t])};var Se=r.useState;const Ce=function(e){var t,n,o=Se(!1),a=o[0],i=o[1];return"function"==typeof e&&(e=e(a)),[r.cloneElement(e,{onMouseEnter:(n=e.props.onMouseEnter,function(e){(n||x)(e),i(!0)}),onMouseLeave:(t=e.props.onMouseLeave,function(e){(t||x)(e),i(!1)})}),a]};const Te=function(e,t){void 0===t&&(t=!0);var n=(0,r.useState)(!1),o=n[0],a=n[1];return(0,r.useEffect)((function(){var n=function(){return a(!0)},r=function(){return a(!1)};t&&e&&e.current&&(_(e.current,"mouseover",n),_(e.current,"mouseout",r));var o=e.current;return function(){t&&o&&(k(o,"mouseover",n),k(o,"mouseout",r))}}),[t,e]),o};function Oe(e,t,n,r){var o,a=!1,i=0;function l(){o&&clearTimeout(o)}function s(){for(var s=arguments.length,u=new Array(s),c=0;c<s;c++)u[c]=arguments[c];var d=this,f=Date.now()-i;function p(){i=Date.now(),n.apply(d,u)}function h(){o=void 0}a||(r&&!o&&p(),l(),void 0===r&&f>e?p():!0!==t&&(o=setTimeout(r?h:p,void 0===r?e-f:e)))}return"boolean"!=typeof t&&(r=n,n=t,t=void 0),s.cancel=function(){l(),a=!0},s}var De=["mousemove","mousedown","resize","keydown","touchstart","wheel"];const Pe=function(e,t,n){void 0===e&&(e=6e4),void 0===t&&(t=!1),void 0===n&&(n=De);var o=(0,r.useState)(t),a=o[0],i=o[1];return(0,r.useEffect)((function(){for(var t,r=!0,o=a,l=function(e){r&&(o=e,i(e))},s=Oe(50,(function(){o&&l(!1),clearTimeout(t),t=setTimeout((function(){return l(!0)}),e)})),u=function(){document.hidden||s()},c=0;c<n.length;c++)_(window,n[c],s);return _(document,"visibilitychange",u),t=setTimeout((function(){return l(!0)}),e),function(){r=!1;for(var e=0;e<n.length;e++)k(window,n[e],s);k(document,"visibilitychange",u)}}),[e,n]),a};const Ne=function(e,t){var n=(0,r.useState)(null),o=n[0],a=n[1];return(0,r.useEffect)((function(){if(e.current&&"function"==typeof IntersectionObserver){var n=new IntersectionObserver((function(e){a(e[0])}),t);return n.observe(e.current),function(){a(null),n.disconnect()}}return function(){}}),[e.current,t.threshold,t.root,t.rootMargin]),o};const Ie=function(e,t){var n=(0,r.useRef)((function(){}));(0,r.useEffect)((function(){n.current=e})),(0,r.useEffect)((function(){if(null!==t){var e=setInterval((function(){return n.current()}),t||0);return function(){return clearInterval(e)}}}),[t])};const Ae=function(e,t,n,o){void 0===t&&(t=x),void 0===n&&(n={}),void 0===o&&(o=[e]);var a=n.event,i=void 0===a?"keydown":a,l=n.target,s=n.options,u=(0,r.useMemo)((function(){var n,r="function"==typeof(n=e)?n:"string"==typeof n?function(e){return e.key===n}:n?function(){return!0}:function(){return!1};return function(e){if(r(e))return t(e)}}),o);he(i,u,l,s)};const Le=function(e){return void 0===e&&(e={laptopL:1440,laptop:1024,tablet:768}),function(){var t=(0,r.useState)(E?window.innerWidth:0),n=t[0],o=t[1];(0,r.useEffect)((function(){var e=function(){o(window.innerWidth)};return e(),_(window,"resize",e),function(){k(window,"resize",e)}}));var a=(0,r.useMemo)((function(){return Object.entries(e).sort((function(e,t){return e[1]>=t[1]?1:-1}))}),[e]),i=a.reduce((function(e,t){var r=t[0],o=t[1];return n>=o?r:e}),a[0][0]);return i}};const Re=function(e){var t=(0,r.useState)([!1,null]),n=t[0],o=t[1];return Ae(e,(function(e){return o([!0,e])}),{event:"keydown"},[n]),Ae(e,(function(e){return o([!1,e])}),{event:"keyup"},[n]),n};const je=function(e,t,n,r){void 0===r&&(r=Re);var o=r(e),a=o[0],i=o[1];s((function(){!a&&n?n(i):a&&t&&t(i)}),[a])};const Me=function(e){var t=(0,r.useRef)(e);return t.current=e,t};const Fe=function(e,t){(0,r.useEffect)((function(){return e&&e(),function(){t&&t()}}),[])};const Be=function(e){void 0===e&&(e=[]);var t=(0,r.useRef)(V(e)),n=H(),o=(0,r.useMemo)((function(){var r={set:function(e){t.current=V(e,t.current),n()},push:function(){for(var e=[],t=0;t<arguments.length;t++)e[t]=arguments[t];e.length&&o.set((function(t){return t.concat(e)}))},updateAt:function(e,t){o.set((function(n){var r=n.slice();return r[e]=t,r}))},insertAt:function(e,t){o.set((function(n){var r=n.slice();return e>r.length?r[e]=t:r.splice(e,0,t),r}))},update:function(e,t){o.set((function(n){return n.map((function(n){return e(n,t)?t:n}))}))},updateFirst:function(e,n){var r=t.current.findIndex((function(t){return e(t,n)}));r>=0&&o.updateAt(r,n)},upsert:function(e,n){var r=t.current.findIndex((function(t){return e(t,n)}));r>=0?o.updateAt(r,n):o.push(n)},sort:function(e){o.set((function(t){return t.slice().sort(e)}))},filter:function(e,t){o.set((function(n){return n.slice().filter(e,t)}))},removeAt:function(e){o.set((function(t){var n=t.slice();return n.splice(e,1),n}))},clear:function(){o.set([])},reset:function(){o.set(V(e).slice())}};return r.remove=r.removeAt,r}),[]);return[t.current,o]};const ze=function(e,t,n){if(!E)return[t,x,x];if(!e)throw new Error("useLocalStorage key may not be falsy");var o=n?n.raw?function(e){return e}:n.deserializer:JSON.parse,a=(0,r.useRef)((function(e){try{var r=n?n.raw?String:n.serializer:JSON.stringify,a=localStorage.getItem(e);return null!==a?o(a):(t&&localStorage.setItem(e,r(t)),t)}catch(i){return t}})),i=(0,r.useState)((function(){return a.current(e)})),l=i[0],s=i[1];(0,r.useLayoutEffect)((function(){return s(a.current(e))}),[e]);var u=(0,r.useCallback)((function(t){try{var r="function"==typeof t?t(l):t;if(void 0===r)return;var a=void 0;a=n?n.raw?"string"==typeof r?r:JSON.stringify(r):n.serializer?n.serializer(r):JSON.stringify(r):JSON.stringify(r),localStorage.setItem(e,a),s(o(a))}catch(i){}}),[e,s]),c=(0,r.useCallback)((function(){try{localStorage.removeItem(e),s(void 0)}catch(i){}}),[e,s]);return[l,u,c]};var $e=function(e){var t=window.history,n=t[e];t[e]=function(t){var r=n.apply(this,arguments),o=new Event(e.toLowerCase());return o.state=t,window.dispatchEvent(o),r}};E&&($e("pushState"),$e("replaceState"));var Ue=function(e){var t=window.history,n=t.state,r=t.length,o=window.location;return{trigger:e,state:n,length:r,hash:o.hash,host:o.host,hostname:o.hostname,href:o.href,origin:o.origin,pathname:o.pathname,port:o.port,protocol:o.protocol,search:o.search}},He="function"==typeof Event;const Ve=E&&He?function(){var e=(0,r.useState)(Ue("load")),t=e[0],n=e[1];return(0,r.useEffect)((function(){var e=function(){return n(Ue("popstate"))},t=function(){return n(Ue("pushstate"))},r=function(){return n(Ue("replacestate"))};return _(window,"popstate",e),_(window,"pushstate",t),_(window,"replacestate",r),function(){k(window,"popstate",e),k(window,"pushstate",t),k(window,"replacestate",r)}}),[]),t}:function(){return{trigger:"load",length:1}};function qe(e){if(!e)return null;if("BODY"===e.tagName)return e;if("IFRAME"===e.tagName){var t=e.contentDocument;return t?t.body:null}return e.offsetParent?qe(e.offsetParent):null}function Ge(e){var t=e||window.event;return t.touches.length>1||(t.preventDefault&&t.preventDefault(),!1)}var We=E&&window.navigator&&window.navigator.platform&&/iP(ad|hone|od)/.test(window.navigator.platform),Ze=new Map,Qe="object"==typeof document?document:void 0,Ye=!1;const Xe=Qe?function(e,t){void 0===e&&(e=!0);var n=(0,r.useRef)(Qe.body);t=t||n;var o=function(e){var t=Ze.get(e);t&&(1===t.counter?(Ze.delete(e),We?(e.ontouchmove=null,Ye&&(k(document,"touchmove",Ge),Ye=!1)):e.style.overflow=t.initialOverflow):Ze.set(e,{counter:t.counter-1,initialOverflow:t.initialOverflow}))};(0,r.useEffect)((function(){var n=qe(t.current);n&&(e?function(e){var t=Ze.get(e);t?Ze.set(e,{counter:t.counter+1,initialOverflow:t.initialOverflow}):(Ze.set(e,{counter:1,initialOverflow:e.style.overflow}),We?Ye||(_(document,"touchmove",Ge,{passive:!1}),Ye=!0):e.style.overflow="hidden")}(n):o(n))}),[e,t.current]),(0,r.useEffect)((function(){var e=qe(t.current);if(e)return function(){o(e)}}),[])}:function(e,t){void 0===e&&(e=!0)};const Ke=function(e){for(var t=[],n=1;n<arguments.length;n++)t[n-1]=arguments[n];se((function(){return console.log.apply(console,(0,f.__spreadArrays)([e+" mounted"],t)),function(){return console.log(e+" unmounted")}})),s((function(){console.log.apply(console,(0,f.__spreadArrays)([e+" updated"],t))}))};var Je=function(e){(function(e){return"touches"in e})(e)&&e.touches.length<2&&e.preventDefault&&e.preventDefault()};const et=function(e,t){var n=void 0===t?{}:t,o=n.isPreventDefault,a=void 0===o||o,i=n.delay,l=void 0===i?300:i,s=(0,r.useRef)(),u=(0,r.useRef)(),c=(0,r.useCallback)((function(t){a&&t.target&&(_(t.target,"touchend",Je,{passive:!1}),u.current=t.target),s.current=setTimeout((function(){return e(t)}),l)}),[e,l,a]),d=(0,r.useCallback)((function(){s.current&&clearTimeout(s.current),a&&u.current&&k(u.current,"touchend",Je)}),[a]);return{onMouseDown:function(e){return c(e)},onTouchStart:function(e){return c(e)},onMouseUp:d,onMouseLeave:d,onTouchEnd:d}};const tt=function(e){void 0===e&&(e={});var t=(0,r.useState)(e),n=t[0],o=t[1],a=(0,r.useMemo)((function(){return{set:function(e,t){o((function(n){var r;return(0,f.__assign)((0,f.__assign)({},n),((r={})[e]=t,r))}))},setAll:function(e){o(e)},remove:function(e){o((function(t){var n=t,r=e;n[r];return(0,f.__rest)(n,["symbol"==typeof r?r:r+""])}))},reset:function(){return o(e)}}}),[o]),i=(0,f.__assign)({get:(0,r.useCallback)((function(e){return n[e]}),[n])},a);return[n,i]};const nt=function(e,t){var n=(0,r.useState)(function(e,t){return void 0!==t?t:!!E&&window.matchMedia(e).matches}(e,t)),o=n[0],a=n[1];return(0,r.useEffect)((function(){var t=!0,n=window.matchMedia(e),r=function(){t&&a(!!n.matches)};return n.addListener(r),a(n.matches),function(){t=!1,n.removeListener(r)}}),[e]),o};const rt=S&&navigator.mediaDevices?function(){var e=(0,r.useState)({}),t=e[0],n=e[1];return(0,r.useEffect)((function(){var e=!0,t=function(){navigator.mediaDevices.enumerateDevices().then((function(t){e&&n({devices:t.map((function(e){return{deviceId:e.deviceId,groupId:e.groupId,kind:e.kind,label:e.label}}))})})).catch(x)};return _(navigator.mediaDevices,"devicechange",t),t(),function(){e=!1,k(navigator.mediaDevices,"devicechange",t)}}),[]),t}:function(){return{}};function ot(e,t){var n=(0,r.useRef)(e),o=(0,r.useState)(t),a=o[0],i=o[1];return[a,(0,r.useCallback)((function(e){2===n.current.length?n.current(e,i):i(n.current(e))}),[a])]}const at=function(e,t){var n=(0,r.useMemo)((function(){return function(t,n){var r;return(r=e(t))[n.type].apply(r,n.payload)}}),[e]),o=(0,r.useReducer)(n,t),a=o[0],i=o[1],l=(0,r.useMemo)((function(){return Object.keys(e(t)).reduce((function(e,t){return e[t]=function(){for(var e=[],n=0;n<arguments.length;n++)e[n]=arguments[n];return i({type:t,payload:e})},e}),{})}),[e,t]);return[a,l]};var it={acceleration:{x:null,y:null,z:null},accelerationIncludingGravity:{x:null,y:null,z:null},rotationRate:{alpha:null,beta:null,gamma:null},interval:16};const lt=function(e){void 0===e&&(e=it);var t=(0,r.useState)(e),n=t[0],o=t[1];return(0,r.useEffect)((function(){var e=function(e){var t=e.acceleration,n=e.accelerationIncludingGravity,r=e.rotationRate,a=e.interval;o({acceleration:{x:t.x,y:t.y,z:t.z},accelerationIncludingGravity:{x:n.x,y:n.y,z:n.z},rotationRate:{alpha:r.alpha,beta:r.beta,gamma:r.gamma},interval:a})};return _(window,"devicemotion",e),function(){k(window,"devicemotion",e)}}),[]),n};const st=function(e){se((function(){e()}))};const ut=function(e){var t=(0,r.useRef)(e);t.current=e,se((function(){return function(){return t.current()}}))};const ct=function(e){var t=(0,r.useRef)(0),n=(0,r.useState)(e),o=n[0],a=n[1],i=(0,r.useCallback)((function(e){cancelAnimationFrame(t.current),t.current=requestAnimationFrame((function(){a(e)}))}),[]);return ut((function(){cancelAnimationFrame(t.current)})),[o,i]};const dt=function(e){var t=ct({docX:0,docY:0,posX:0,posY:0,elX:0,elY:0,elH:0,elW:0}),n=t[0],o=t[1];return(0,r.useEffect)((function(){var t=function(t){if(e&&e.current){var n=e.current.getBoundingClientRect(),r=n.left,a=n.top,i=n.width,l=n.height,s=r+window.pageXOffset,u=a+window.pageYOffset,c=t.pageX-s,d=t.pageY-u;o({docX:t.pageX,docY:t.pageY,posX:s,posY:u,elX:c,elY:d,elH:l,elW:i})}};return _(document,"mousemove",t),function(){k(document,"mousemove",t)}}),[e]),n};var ft={current:null};const pt=function(e,t){void 0===t&&(t={});var n=!!t.whenHovered,r=!!t.bound,o=Te(e,n),a=dt(n&&!o?ft:e);return r&&(a.elX=Math.max(0,Math.min(a.elX,a.elW)),a.elY=Math.max(0,Math.min(a.elY,a.elH))),a},ht=function(){var e=(0,r.useState)(0),t=e[0],n=e[1];return(0,r.useEffect)((function(){var e=function(e){n(e.deltaY+t)};return _(window,"wheel",e,!1),function(){return k(window,"wheel",e)}})),t};var mt=S?navigator:void 0,gt=mt&&(mt.connection||mt.mozConnection||mt.webkitConnection);function vt(e){var t=null==mt?void 0:mt.onLine,n=null==e?void 0:e.online;return{online:t,previous:n,since:t!==n?new Date:null==e?void 0:e.since,downlink:null==gt?void 0:gt.downlink,downlinkMax:null==gt?void 0:gt.downlinkMax,effectiveType:null==gt?void 0:gt.effectiveType,rtt:null==gt?void 0:gt.rtt,saveData:null==gt?void 0:gt.saveData,type:null==gt?void 0:gt.type}}function bt(e){var t=(0,r.useState)(null!=e?e:vt),n=t[0],o=t[1];return(0,r.useEffect)((function(){var e=function(){o(vt)};return _(window,"online",e,{passive:!0}),_(window,"offline",e,{passive:!0}),gt&&_(gt,"change",e,{passive:!0}),function(){k(window,"online",e),k(window,"offline",e),gt&&k(gt,"change",e)}}),[]),n}const yt=G;const wt=function(e,t){var n=(0,r.useState)(t),o=n[0],a=n[1];return X((function(){var t=e.subscribe(a);return function(){return t.unsubscribe()}}),[e]),o};var xt={angle:0,type:"landscape-primary"};const _t=function(e){void 0===e&&(e=xt);var t=(0,r.useState)(e),n=t[0],o=t[1];return(0,r.useEffect)((function(){var t=window.screen,n=!0,r=function(){if(n){var r=t.orientation;if(r){var a=r.angle,i=r.type;o({angle:a,type:i})}else void 0!==window.orientation?o({angle:"number"==typeof window.orientation?window.orientation:0,type:""}):o(e)}};return _(window,"orientationchange",r),r(),function(){n=!1,k(window,"orientationchange",r)}}),[]),n};const kt=function(e,t){void 0===t&&(t=[]),(0,r.useEffect)((function(){if(e){var t=function(t){var n=(t=t||window.event).relatedTarget||t.toElement;n&&"HTML"!==n.nodeName||e()};return _(document,"mouseout",t),function(){k(document,"mouseout",t)}}}),t)};const Et=function(e){var t=(0,r.useState)(""),n=t[0],o=t[1];return(0,r.useEffect)((function(){var t=!0,n=null,r=function(){t&&o((function(){var e;return null!==(e=null==n?void 0:n.state)&&void 0!==e?e:""}))};return navigator.permissions.query(e).then((function(e){_(n=e,"change",r),r()})).catch(x),function(){n&&k(n,"change",r),t=!1,n=null}}),[e]),n};function St(e){var t=(0,r.useRef)();return(0,r.useEffect)((function(){t.current=e})),t.current}var Ct=function(e,t){return e===t};function Tt(e,t){void 0===t&&(t=Ct);var n=(0,r.useRef)(),o=(0,r.useRef)(e);return l()||t(o.current,e)||(n.current=o.current,o.current=e),n.current}const Ot=function(){var e=p();return(0,r.useCallback)((function(t){return new Promise((function(n,r){t.then((function(t){e()&&n(t)}),(function(t){e()&&r(t)}))}))}),[])};const Dt=function(e){void 0===e&&(e=[]);var t=(0,r.useState)(e),n=t[0],o=t[1];return{add:function(e){o((function(t){return(0,f.__spreadArrays)(t,[e])}))},remove:function(){var e;return o((function(t){var n=t[0],r=t.slice(1);return e=n,r})),e},get first(){return n[0]},get last(){return n[n.length-1]},get size(){return n.length}}};const Pt=function(e,t){void 0===e&&(e=1e12),void 0===t&&(t=0);var n=(0,r.useState)(0),o=n[0],a=n[1];return X((function(){var n,r,o,i=function(){var t=Math.min(1,(Date.now()-o)/e);a(t),l()},l=function(){n=requestAnimationFrame(i)},s=setTimeout((function(){r=setTimeout((function(){cancelAnimationFrame(n),a(1)}),e),o=Date.now(),l()}),t);return function(){clearTimeout(r),clearTimeout(s),cancelAnimationFrame(n)}}),[e,t]),o};function Nt(e,t){void 0===t&&(t=!0);var n=(0,r.useRef)(null),o=(0,r.useRef)(!1),a=(0,r.useRef)(e);a.current=e;var i=(0,r.useCallback)((function(e){o.current&&(a.current(e),n.current=requestAnimationFrame(i))}),[]),l=(0,r.useMemo)((function(){return[function(){o.current&&(o.current=!1,n.current&&cancelAnimationFrame(n.current))},function(){o.current||(o.current=!0,n.current=requestAnimationFrame(i))},function(){return o.current}]}),[]);return(0,r.useEffect)((function(){return t&&l[1](),l[0]}),[]),l}var It=function(e,t){return new URLSearchParams(e).get(t)};const At=E?function(e){var t=window.location,n=(0,r.useState)((function(){return It(t.search,e)})),o=n[0],a=n[1];return(0,r.useEffect)((function(){var n=function(){a(It(t.search,e))};return _(window,"popstate",n),_(window,"pushstate",n),_(window,"replacestate",n),function(){k(window,"popstate",n),k(window,"pushstate",n),k(window,"replacestate",n)}}),[]),o}:function(){return null};n(96260);var Lt=function(e){void 0===e&&(e={});var t=e.disabled,n=Me(e),o=(0,r.useState)({isScratching:!1}),a=o[0],i=o[1],l=(0,r.useRef)(a),s=(0,r.useRef)(!1),u=(0,r.useRef)(null),c=(0,r.useState)(null),d=c[0],p=c[1];return(0,r.useEffect)((function(){if(!t&&d){var e,r,o=function(e,t){cancelAnimationFrame(u.current),u.current=requestAnimationFrame((function(){var r=d.getBoundingClientRect(),o=r.left,a=r.top,s=o+window.scrollX,u=a+window.scrollY,c=e-s,p=t-u;i((function(e){var t=(0,f.__assign)((0,f.__assign)({},e),{dx:c-(e.x||0),dy:p-(e.y||0),end:Date.now(),isScratching:!0});return l.current=t,(n.current.onScratch||x)(t),t}))}))},a=function(e){o(e.pageX,e.pageY)},c=function(e){o(e.changedTouches[0].pageX,e.changedTouches[0].pageY)},p=function(){s.current&&(s.current=!1,l.current=(0,f.__assign)((0,f.__assign)({},l.current),{isScratching:!1}),(n.current.onScratchEnd||x)(l.current),i({isScratching:!1}),k(window,"mousemove",a),k(window,"touchmove",c),k(window,"mouseup",e),k(window,"touchend",r))};e=p,r=p;var h=function(t,o){if(s.current){var u=d.getBoundingClientRect(),f=u.left,p=u.top,h=f+window.scrollX,m=p+window.scrollY,g=t-h,v=o-m,b=Date.now(),y={isScratching:!0,start:b,end:b,docX:t,docY:o,x:g,y:v,dx:0,dy:0,elH:d.offsetHeight,elW:d.offsetWidth,elX:h,elY:m};l.current=y,(n.current.onScratchStart||x)(y),i(y),_(window,"mousemove",a),_(window,"touchmove",c),_(window,"mouseup",e),_(window,"touchend",r)}},m=function(e){s.current=!0,h(e.pageX,e.pageY)},g=function(e){s.current=!0,h(e.changedTouches[0].pageX,e.changedTouches[0].pageY)};return _(d,"mousedown",m),_(d,"touchstart",g),function(){k(d,"mousedown",m),k(d,"touchstart",g),k(window,"mousemove",a),k(window,"touchmove",c),k(window,"mouseup",e),k(window,"touchend",r),u.current&&cancelAnimationFrame(u.current),u.current=null,s.current=!1,l.current={isScratching:!1},i(l.current)}}}),[d,t,n]),[p,a]};const Rt=Lt;const jt=function(e){var t=ct({x:0,y:0}),n=t[0],o=t[1];return(0,r.useEffect)((function(){var t=function(){e.current&&o({x:e.current.scrollLeft,y:e.current.scrollTop})};return e.current&&_(e.current,"scroll",t,{capture:!1,passive:!0}),function(){e.current&&k(e.current,"scroll",t)}}),[e]),n};const Mt=function(e){var t=(0,r.useState)(!1),n=t[0],o=t[1];return(0,r.useEffect)((function(){if(e.current){var t,n=function(){o(!0),clearTimeout(t),t=setTimeout((function(){o(!1)}),150)};return _(e.current,"scroll",n,!1),function(){e.current&&k(e.current,"scroll",n,!1)}}return function(){}}),[e]),n};const Ft=function(e,t,n){if(!E)return[t,function(){}];var o=(0,r.useState)((function(){try{var r=sessionStorage.getItem(e);return"string"!=typeof r?(sessionStorage.setItem(e,n?String(t):JSON.stringify(t)),t):n?r:JSON.parse(r||"null")}catch(o){return t}})),a=o[0],i=o[1];return(0,r.useEffect)((function(){try{var t=n?String(a):JSON.stringify(a);sessionStorage.setItem(e,t)}catch(o){}})),[a,i]};var Bt=n(99376),zt=function(e,t){return e.every((function(e,n){return(0,Bt.D)(e,t[n])}))};const $t=function(e,t){te(e,t,zt)};var Ut=r.useState,Ht=r.useEffect,Vt=r.useRef;const qt=function(e,t){var n=void 0===t?{}:t,a=n.width,i=void 0===a?1/0:a,l=n.height,s=void 0===l?1/0:l;if(!E)return["function"==typeof e?e({width:i,height:s}):e,{width:i,height:s}];var u=Ut({width:i,height:s}),c=u[0],d=u[1];"function"==typeof e&&(e=e(c));var p=e.props.style||{},h=Vt(null),m=null,g=function(){var e=h.current,t=e?{width:e.offsetWidth,height:e.offsetHeight}:{width:i,height:s};d(t)},v=function(e){_(e,"resize",g),setTimeout(g,35)};return Ht((function(){var e=h.current;if(e){if(e.contentWindow)m=e.contentWindow,v(m);else{var t=function(){_(e,"load",t),m=e.contentWindow,v(m)};k(e,"load",t)}return function(){m&&m.removeEventListener&&k(m,"resize",g)}}}),[]),p.position="relative",[r.cloneElement.apply(o,(0,f.__spreadArrays)([e,{style:p}],(0,f.__spreadArrays)([r.createElement("iframe",{ref:h,style:{background:"transparent",border:"none",height:"100%",left:0,position:"absolute",top:0,width:"100%",zIndex:-1}})],r.Children.toArray(e.props.children)))),c]};const Gt=function(e,t){void 0===t&&(t={});var n=p(),o=(0,r.useRef)(!1),a=(0,r.useRef)(0),i=(0,r.useRef)(0),l=v({isSliding:!1,value:0}),s=l[0],u=l[1];return a.current=s.value,(0,r.useEffect)((function(){if(E){var r=void 0===t.styles||t.styles,l=void 0!==t.reverse&&t.reverse;e.current&&r&&(e.current.style.userSelect="none");var s=function(){!o.current&&n()&&((t.onScrubStart||x)(),o.current=!0,u({isSliding:!0}),m())},c=function(){o.current&&n()&&((t.onScrubStop||x)(a.current),o.current=!1,u({isSliding:!1}),g())},d=function(e){s(),f(e)},f=t.vertical?function(e){return v(e.clientY)}:function(e){return v(e.clientX)},p=function(e){s(),h(e)},h=t.vertical?function(e){return v(e.changedTouches[0].clientY)}:function(e){return v(e.changedTouches[0].clientX)},m=function(){_(document,"mousemove",f),_(document,"mouseup",c),_(document,"touchmove",h),_(document,"touchend",c)},g=function(){k(document,"mousemove",f),k(document,"mouseup",c),k(document,"touchmove",h),k(document,"touchend",c)},v=function(r){cancelAnimationFrame(i.current),i.current=requestAnimationFrame((function(){if(n()&&e.current){var o=e.current.getBoundingClientRect(),a=t.vertical?o.top:o.left,i=t.vertical?o.height:o.width;if(!i)return;var s=(r-a)/i;s>1?s=1:s<0&&(s=0),l&&(s=1-s),u({value:s}),(t.onScrub||x)(s)}}))};return _(e.current,"mousedown",d),_(e.current,"touchstart",p),function(){k(e.current,"mousedown",d),k(e.current,"touchstart",p)}}}),[e,t.vertical]),s};var Wt;!function(e){e[e.init=0]="init",e[e.play=1]="play",e[e.pause=2]="pause",e[e.end=3]="end"}(Wt||(Wt={}));const Zt=function(e,t){var n=(0,r.useRef)(!1),o=(0,r.useState)((function(){var e=t.voice||{},n=e.lang,r=void 0===n?"default":n,o=e.name,a=void 0===o?"":o;return{isPlaying:!1,status:Wt[Wt.init],lang:t.lang||"default",voiceInfo:{lang:r,name:a},rate:t.rate||1,pitch:t.pitch||1,volume:t.volume||1}})),a=o[0],i=o[1],l=(0,r.useCallback)((function(){n.current&&i((function(e){return(0,f.__assign)((0,f.__assign)({},e),{isPlaying:!0,status:Wt[Wt.play]})}))}),[]),s=(0,r.useCallback)((function(){n.current&&i((function(e){return(0,f.__assign)((0,f.__assign)({},e),{isPlaying:!1,status:Wt[Wt.pause]})}))}),[]),u=(0,r.useCallback)((function(){n.current&&i((function(e){return(0,f.__assign)((0,f.__assign)({},e),{isPlaying:!1,status:Wt[Wt.end]})}))}),[]);return(0,r.useEffect)((function(){n.current=!0;var r=new SpeechSynthesisUtterance(e);return t.lang&&(r.lang=t.lang),t.voice&&(r.voice=t.voice),r.rate=t.rate||1,r.pitch=t.pitch||1,r.volume=t.volume||1,r.onstart=l,r.onpause=s,r.onresume=l,r.onend=u,window.speechSynthesis.speak(r),function(){n.current=!1}}),[]),a};const Qt=function(e){X((function(){var t=function(t){var n,r,o,a,i;!function(){var e=document.activeElement,t=document.body;if(!e)return!1;if(e===t)return!1;switch(e.tagName){case"INPUT":case"TEXTAREA":return!0}return e.hasAttribute("contenteditable")}()&&(r=(n=t).keyCode,o=n.metaKey,a=n.ctrlKey,i=n.altKey,!(o||a||i)&&(r>=48&&r<=57||r>=65&&r<=90))&&e(t)};return _(document,"keydown",t),function(){k(document,"keydown",t)}}),[])};function Yt(e,t,n){if(void 0===t&&(t=10),t<1)throw new Error("Capacity has to be greater than 1, got '"+t+"'");var o=l(),a=(0,r.useState)(e),i=a[0],s=a[1],u=(0,r.useRef)(null!=n?n:[]),c=(0,r.useRef)(0);return o&&(u.current.length?(u.current[u.current.length-1]!==e&&u.current.push(e),u.current.length>t&&(u.current=u.current.slice(u.current.length-t))):u.current.push(e),c.current=u.current.length&&u.current.length-1),[i,(0,r.useCallback)((function(e){s((function(n){return(e=V(e,n))!==n&&(c.current<u.current.length-1&&(u.current=u.current.slice(0,c.current+1)),c.current=u.current.push(e)-1,u.current.length>t&&(u.current=u.current.slice(u.current.length-t))),e}))}),[i,t]),(0,r.useMemo)((function(){return{history:u.current,position:c.current,capacity:t,back:function(e){void 0===e&&(e=1),c.current&&s((function(){return c.current-=Math.min(e,c.current),u.current[c.current]}))},forward:function(e){void 0===e&&(e=1),c.current!==u.current.length-1&&s((function(){return c.current=Math.min(c.current+e,u.current.length-1),u.current[c.current]}))},go:function(e){e!==c.current&&s((function(){return c.current=e<0?Math.max(u.current.length+e,0):Math.min(u.current.length-1,e),u.current[c.current]}))}}}),[i])]}function Xt(e){void 0===e&&(e=[]);var t=p(),n=H(),o=(0,r.useRef)(0);s((function(){e.length<=o.current&&(o.current=e.length-1,n())}),[e.length]);var a=(0,r.useMemo)((function(){return{next:function(){return a.setStateAt(o.current+1)},prev:function(){return a.setStateAt(o.current-1)},setStateAt:function(r){t()&&e.length&&r!==o.current&&(o.current=r>=0?r%e.length:e.length+r%e.length,n())},setState:function(r){if(t()){var a=e.length?e.indexOf(r):-1;if(-1===a)throw new Error("State '"+r+"' is not a valid state (does not exist in state list)");o.current=a,n()}}}}),[e]);return(0,f.__assign)({state:e[o.current],currentIndex:o.current},a)}const Kt=function(e,t){void 0===t&&(t=200);var n=(0,r.useState)(e),o=n[0],a=n[1],i=(0,r.useRef)(),l=(0,r.useRef)(null),s=(0,r.useRef)(0);return(0,r.useEffect)((function(){if(i.current)l.current=e,s.current=!0;else{a(e);var n=function(){s.current?(s.current=!1,a(l.current),i.current=setTimeout(n,t)):i.current=void 0};i.current=setTimeout(n,t)}}),[e]),ut((function(){i.current&&clearTimeout(i.current)})),o};const Jt=function(e,t,n){void 0===t&&(t=200);var o=(0,r.useState)(null),a=o[0],i=o[1],l=(0,r.useRef)(),s=(0,r.useRef)();return(0,r.useEffect)((function(){if(l.current)s.current=n;else{i(e.apply(void 0,n));var r=function(){s.current?(i(e.apply(void 0,s.current)),s.current=void 0,l.current=setTimeout(r,t)):l.current=void 0};l.current=setTimeout(r,t)}}),n),ut((function(){l.current&&clearTimeout(l.current)})),a};function en(e){return void 0===e&&(e=0),ne(H(),e)}var tn={restoreOnUnmount:!1};const nn="undefined"!=typeof document?function(e,t){void 0===t&&(t=tn);var n=(0,r.useRef)(document.title);document.title!==e&&(document.title=e),(0,r.useEffect)((function(){return t&&t.restoreOnUnmount?function(){document.title=n.current}:void 0}),[])}:function(e){};var rn=n(75534);const on=function(e,t,n){return void 0===e&&(e="inCirc"),void 0===t&&(t=200),void 0===n&&(n=0),(0,rn.U[e])(Pt(t,n))};const an=function(){var e=(0,r.useRef)(!1);return se((function(){return function(){e.current=!0}})),(0,r.useMemo)((function(){return function(t,n){return new Promise((function(r,o){t.then((function(t){e.current||r(t)}),(function(t){e.current?n?n(t):console.error("useUnmountPromise",t):o(t)}))}))}}),[])};function ln(e,t){void 0===t&&(t=[]);var n=Be(t),r=n[0],o=n[1];return[r,(0,f.__assign)((0,f.__assign)({},o),{upsert:function(t){o.upsert(e,t)}})]}const sn=S&&"vibrate"in navigator?function(e,t,n){void 0===e&&(e=!0),void 0===t&&(t=[1e3,1e3]),void 0===n&&(n=!0),(0,r.useEffect)((function(){var r;if(e&&(navigator.vibrate(t),n)){var o=t instanceof Array?t.reduce((function(e,t){return e+t})):t;r=setInterval((function(){navigator.vibrate(t)}),o)}return function(){e&&(navigator.vibrate(0),n&&clearInterval(r))}}),[e])}:x;const un=y("video");function cn(e,t,n){void 0===n&&(n=[void 0]);var o=(0,r.useRef)(t),a=(0,r.useRef)(e);o.current=t,a.current=e;var i=(0,r.useState)(n),l=i[0],s=i[1],u=(0,r.useCallback)((function(){o.current.length>=2?o.current(a.current,s):s(o.current(a.current))}),[s]);return(0,r.useEffect)((function(){u()}),[e]),[l,u]}var dn=function(e){if("undefined"==typeof document)return 0;if(document.body&&(!document.readyState||"loading"!==document.readyState)){if(!0!==e&&"number"==typeof dn.__cache)return dn.__cache;var t=document.createElement("div"),n=t.style;n.display="block",n.position="absolute",n.width="100px",n.height="100px",n.left="-999px",n.top="-999px",n.overflow="scroll",document.body.insertBefore(t,null);var r=t.clientWidth;if(0!==r)return dn.__cache=100-r,document.body.removeChild(t),dn.__cache;document.body.removeChild(t)}};function fn(){var e=(0,r.useState)(dn()),t=e[0],n=e[1];return(0,r.useEffect)((function(){if(void 0===t){var e=requestAnimationFrame((function(){n(dn())}));return function(){return cancelAnimationFrame(e)}}}),[]),t}function pn(e,t,n){if(void 0===n&&(n=[void 0]),"object"!=typeof e)throw new Error("states expected to be an object or array, got "+typeof e);var o=(0,r.useRef)(t),a=(0,r.useRef)(e);o.current=t,a.current=e;var i=(0,r.useState)(n),l=i[0],s=i[1],u=(0,r.useCallback)((function(){o.current.length>=2?o.current(a.current,s):s(o.current(a.current))}),[s]);return(0,r.useEffect)((function(){u()}),Object.values(e)),[l,u]}const hn=function(){var e=ct((function(){return{x:E?window.pageXOffset:0,y:E?window.pageYOffset:0}})),t=e[0],n=e[1];return(0,r.useEffect)((function(){var e=function(){n((function(e){var t=window.pageXOffset,n=window.pageYOffset;return e.x!==t||e.y!==n?{x:t,y:n}:e}))};return e(),_(window,"scroll",e,{capture:!1,passive:!0}),function(){k(window,"scroll",e)}}),[]),t};const mn=function(e,t){void 0===e&&(e=1/0),void 0===t&&(t=1/0);var n=ct({width:E?window.innerWidth:e,height:E?window.innerHeight:t}),o=n[0],a=n[1];return(0,r.useEffect)((function(){if(E){var e=function(){a({width:window.innerWidth,height:window.innerHeight})};return _(window,"resize",e),function(){k(window,"resize",e)}}}),[]),o};var gn={x:0,y:0,width:0,height:0,top:0,left:0,bottom:0,right:0};const vn=E&&void 0!==window.ResizeObserver?function(){var e=(0,r.useState)(null),t=e[0],n=e[1],o=(0,r.useState)(gn),a=o[0],i=o[1],l=(0,r.useMemo)((function(){return new window.ResizeObserver((function(e){if(e[0]){var t=e[0].contentRect,n=t.x,r=t.y,o=t.width,a=t.height,l=t.top,s=t.left,u=t.bottom,c=t.right;i({x:n,y:r,width:o,height:a,top:l,left:s,bottom:u,right:c})}}))}),[]);return X((function(){if(t)return l.observe(t),function(){l.disconnect()}}),[t]),[n,a]}:function(){return[x,gn]};var bn;!function(e){e.ZOOMING_IN="ZOOMING_IN",e.ZOOMING_OUT="ZOOMING_OUT"}(bn||(bn={}));const yn=function(e){var t=(0,r.useMemo)((function(){return{evCache:[],prevDiff:-1}}),[e.current]),n=(0,r.useState)(),o=n[0],a=n[1],i=function(e){for(var n=0;n<t.evCache.length;n++)if(e.pointerId==t.evCache[n].pointerId){t.evCache[n]=e;break}if(2==t.evCache.length){var r=Math.abs(t.evCache[0].clientX-t.evCache[1].clientX);t.prevDiff>0&&(r>t.prevDiff&&a([bn.ZOOMING_IN,r]),r<t.prevDiff&&a([bn.ZOOMING_OUT,r])),t.prevDiff=r}},l=function(e){t.evCache.push(e)},s=function(e){u(e),t.evCache.length<2&&(t.prevDiff=-1)},u=function(e){for(var n=0;n<t.evCache.length;n++)if(t.evCache[n].pointerId==e.pointerId){t.evCache.splice(n,1);break}};return(0,r.useEffect)((function(){(null==e?void 0:e.current)&&(e.current.onpointerdown=l,e.current.onpointermove=i,e.current.onpointerup=s,e.current.onpointercancel=s,e.current.onpointerout=s,e.current.onpointerleave=s)}),[null==e?void 0:e.current]),o?{zoomingState:o[0],pinchState:o[1]}:{zoomingState:null,pinchState:0}};function wn(){return++(0,r.useRef)(0).current}const xn=function(e){void 0===e&&(e=new Set);var t=(0,r.useState)(e),n=t[0],o=t[1],a=(0,r.useMemo)((function(){return{add:function(e){return o((function(t){return new Set((0,f.__spreadArrays)(Array.from(t),[e]))}))},remove:function(e){return o((function(t){return new Set(Array.from(t).filter((function(t){return t!==e})))}))},toggle:function(e){return o((function(t){return t.has(e)?new Set(Array.from(t).filter((function(t){return t!==e}))):new Set((0,f.__spreadArrays)(Array.from(t),[e]))}))},reset:function(){return o(e)}}}),[o]),i=(0,f.__assign)({has:(0,r.useCallback)((function(e){return n.has(e)}),[n])},a);return[n,i]};function _n(e){var t={state:e instanceof Function?e():e,setState:function(e){t.state=V(e,t.state),t.setters.forEach((function(e){return e(t.state)}))},setters:[]};return function(){var e=(0,r.useState)(t.state),n=e[0],o=e[1];return se((function(){return function(){t.setters=t.setters.filter((function(e){return e!==o}))}})),X((function(){t.setters.includes(o)||t.setters.push(o)})),[n,t.setState]}}var kn=function(){var e=(0,r.useState)((function(){return window.location.hash})),t=e[0],n=e[1],o=(0,r.useCallback)((function(){n(window.location.hash)}),[]);Fe((function(){_(window,"hashchange",o)}),(function(){k(window,"hashchange",o)}));var a=(0,r.useCallback)((function(e){e!==t&&(window.location.hash=e)}),[t]);return[t,a]}},72408:(e,t,n)=>{"use strict";var r=n(27418),o=60103,a=60106;t.Fragment=60107,t.StrictMode=60108,t.Profiler=60114;var i=60109,l=60110,s=60112;t.Suspense=60113;var u=60115,c=60116;if("function"==typeof Symbol&&Symbol.for){var d=Symbol.for;o=d("react.element"),a=d("react.portal"),t.Fragment=d("react.fragment"),t.StrictMode=d("react.strict_mode"),t.Profiler=d("react.profiler"),i=d("react.provider"),l=d("react.context"),s=d("react.forward_ref"),t.Suspense=d("react.suspense"),u=d("react.memo"),c=d("react.lazy")}var f="function"==typeof Symbol&&Symbol.iterator;function p(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n<arguments.length;n++)t+="&args[]="+encodeURIComponent(arguments[n]);return"Minified React error #"+e+"; visit "+t+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},m={};function g(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||h}function v(){}function b(e,t,n){this.props=e,this.context=t,this.refs=m,this.updater=n||h}g.prototype.isReactComponent={},g.prototype.setState=function(e,t){if("object"!=typeof e&&"function"!=typeof e&&null!=e)throw Error(p(85));this.updater.enqueueSetState(this,e,t,"setState")},g.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")},v.prototype=g.prototype;var y=b.prototype=new v;y.constructor=b,r(y,g.prototype),y.isPureReactComponent=!0;var w={current:null},x=Object.prototype.hasOwnProperty,_={key:!0,ref:!0,__self:!0,__source:!0};function k(e,t,n){var r,a={},i=null,l=null;if(null!=t)for(r in void 0!==t.ref&&(l=t.ref),void 0!==t.key&&(i=""+t.key),t)x.call(t,r)&&!_.hasOwnProperty(r)&&(a[r]=t[r]);var s=arguments.length-2;if(1===s)a.children=n;else if(1<s){for(var u=Array(s),c=0;c<s;c++)u[c]=arguments[c+2];a.children=u}if(e&&e.defaultProps)for(r in s=e.defaultProps)void 0===a[r]&&(a[r]=s[r]);return{$$typeof:o,type:e,key:i,ref:l,props:a,_owner:w.current}}function E(e){return"object"==typeof e&&null!==e&&e.$$typeof===o}var S=/\/+/g;function C(e,t){return"object"==typeof e&&null!==e&&null!=e.key?function(e){var t={"=":"=0",":":"=2"};return"$"+e.replace(/[=:]/g,(function(e){return t[e]}))}(""+e.key):t.toString(36)}function T(e,t,n,r,i){var l=typeof e;"undefined"!==l&&"boolean"!==l||(e=null);var s=!1;if(null===e)s=!0;else switch(l){case"string":case"number":s=!0;break;case"object":switch(e.$$typeof){case o:case a:s=!0}}if(s)return i=i(s=e),e=""===r?"."+C(s,0):r,Array.isArray(i)?(n="",null!=e&&(n=e.replace(S,"$&/")+"/"),T(i,t,n,"",(function(e){return e}))):null!=i&&(E(i)&&(i=function(e,t){return{$$typeof:o,type:e.type,key:t,ref:e.ref,props:e.props,_owner:e._owner}}(i,n+(!i.key||s&&s.key===i.key?"":(""+i.key).replace(S,"$&/")+"/")+e)),t.push(i)),1;if(s=0,r=""===r?".":r+":",Array.isArray(e))for(var u=0;u<e.length;u++){var c=r+C(l=e[u],u);s+=T(l,t,n,c,i)}else if(c=function(e){return null===e||"object"!=typeof e?null:"function"==typeof(e=f&&e[f]||e["@@iterator"])?e:null}(e),"function"==typeof c)for(e=c.call(e),u=0;!(l=e.next()).done;)s+=T(l=l.value,t,n,c=r+C(l,u++),i);else if("object"===l)throw t=""+e,Error(p(31,"[object Object]"===t?"object with keys {"+Object.keys(e).join(", ")+"}":t));return s}function O(e,t,n){if(null==e)return e;var r=[],o=0;return T(e,r,"","",(function(e){return t.call(n,e,o++)})),r}function D(e){if(-1===e._status){var t=e._result;t=t(),e._status=0,e._result=t,t.then((function(t){0===e._status&&(t=t.default,e._status=1,e._result=t)}),(function(t){0===e._status&&(e._status=2,e._result=t)}))}if(1===e._status)return e._result;throw e._result}var P={current:null};function N(){var e=P.current;if(null===e)throw Error(p(321));return e}var I={ReactCurrentDispatcher:P,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:w,IsSomeRendererActing:{current:!1},assign:r};t.Children={map:O,forEach:function(e,t,n){O(e,(function(){t.apply(this,arguments)}),n)},count:function(e){var t=0;return O(e,(function(){t++})),t},toArray:function(e){return O(e,(function(e){return e}))||[]},only:function(e){if(!E(e))throw Error(p(143));return e}},t.Component=g,t.PureComponent=b,t.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=I,t.cloneElement=function(e,t,n){if(null==e)throw Error(p(267,e));var a=r({},e.props),i=e.key,l=e.ref,s=e._owner;if(null!=t){if(void 0!==t.ref&&(l=t.ref,s=w.current),void 0!==t.key&&(i=""+t.key),e.type&&e.type.defaultProps)var u=e.type.defaultProps;for(c in t)x.call(t,c)&&!_.hasOwnProperty(c)&&(a[c]=void 0===t[c]&&void 0!==u?u[c]:t[c])}var c=arguments.length-2;if(1===c)a.children=n;else if(1<c){u=Array(c);for(var d=0;d<c;d++)u[d]=arguments[d+2];a.children=u}return{$$typeof:o,type:e.type,key:i,ref:l,props:a,_owner:s}},t.createContext=function(e,t){return void 0===t&&(t=null),(e={$$typeof:l,_calculateChangedBits:t,_currentValue:e,_currentValue2:e,_threadCount:0,Provider:null,Consumer:null}).Provider={$$typeof:i,_context:e},e.Consumer=e},t.createElement=k,t.createFactory=function(e){var t=k.bind(null,e);return t.type=e,t},t.createRef=function(){return{current:null}},t.forwardRef=function(e){return{$$typeof:s,render:e}},t.isValidElement=E,t.lazy=function(e){return{$$typeof:c,_payload:{_status:-1,_result:e},_init:D}},t.memo=function(e,t){return{$$typeof:u,type:e,compare:void 0===t?null:t}},t.useCallback=function(e,t){return N().useCallback(e,t)},t.useContext=function(e,t){return N().useContext(e,t)},t.useDebugValue=function(){},t.useEffect=function(e,t){return N().useEffect(e,t)},t.useImperativeHandle=function(e,t,n){return N().useImperativeHandle(e,t,n)},t.useLayoutEffect=function(e,t){return N().useLayoutEffect(e,t)},t.useMemo=function(e,t){return N().useMemo(e,t)},t.useReducer=function(e,t,n){return N().useReducer(e,t,n)},t.useRef=function(e){return N().useRef(e)},t.useState=function(e){return N().useState(e)},t.version="17.0.2"},67294:(e,t,n)=>{"use strict";e.exports=n(72408)},60053:(e,t)=>{"use strict";var n,r,o,a;if("object"==typeof performance&&"function"==typeof performance.now){var i=performance;t.unstable_now=function(){return i.now()}}else{var l=Date,s=l.now();t.unstable_now=function(){return l.now()-s}}if("undefined"==typeof window||"function"!=typeof MessageChannel){var u=null,c=null,d=function(){if(null!==u)try{var e=t.unstable_now();u(!0,e),u=null}catch(n){throw setTimeout(d,0),n}};n=function(e){null!==u?setTimeout(n,0,e):(u=e,setTimeout(d,0))},r=function(e,t){c=setTimeout(e,t)},o=function(){clearTimeout(c)},t.unstable_shouldYield=function(){return!1},a=t.unstable_forceFrameRate=function(){}}else{var f=window.setTimeout,p=window.clearTimeout;if("undefined"!=typeof console){var h=window.cancelAnimationFrame;"function"!=typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills"),"function"!=typeof h&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var m=!1,g=null,v=-1,b=5,y=0;t.unstable_shouldYield=function(){return t.unstable_now()>=y},a=function(){},t.unstable_forceFrameRate=function(e){0>e||125<e?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):b=0<e?Math.floor(1e3/e):5};var w=new MessageChannel,x=w.port2;w.port1.onmessage=function(){if(null!==g){var e=t.unstable_now();y=e+b;try{g(!0,e)?x.postMessage(null):(m=!1,g=null)}catch(n){throw x.postMessage(null),n}}else m=!1},n=function(e){g=e,m||(m=!0,x.postMessage(null))},r=function(e,n){v=f((function(){e(t.unstable_now())}),n)},o=function(){p(v),v=-1}}function _(e,t){var n=e.length;e.push(t);e:for(;;){var r=n-1>>>1,o=e[r];if(!(void 0!==o&&0<S(o,t)))break e;e[r]=t,e[n]=o,n=r}}function k(e){return void 0===(e=e[0])?null:e}function E(e){var t=e[0];if(void 0!==t){var n=e.pop();if(n!==t){e[0]=n;e:for(var r=0,o=e.length;r<o;){var a=2*(r+1)-1,i=e[a],l=a+1,s=e[l];if(void 0!==i&&0>S(i,n))void 0!==s&&0>S(s,i)?(e[r]=s,e[l]=n,r=l):(e[r]=i,e[a]=n,r=a);else{if(!(void 0!==s&&0>S(s,n)))break e;e[r]=s,e[l]=n,r=l}}}return t}return null}function S(e,t){var n=e.sortIndex-t.sortIndex;return 0!==n?n:e.id-t.id}var C=[],T=[],O=1,D=null,P=3,N=!1,I=!1,A=!1;function L(e){for(var t=k(T);null!==t;){if(null===t.callback)E(T);else{if(!(t.startTime<=e))break;E(T),t.sortIndex=t.expirationTime,_(C,t)}t=k(T)}}function R(e){if(A=!1,L(e),!I)if(null!==k(C))I=!0,n(j);else{var t=k(T);null!==t&&r(R,t.startTime-e)}}function j(e,n){I=!1,A&&(A=!1,o()),N=!0;var a=P;try{for(L(n),D=k(C);null!==D&&(!(D.expirationTime>n)||e&&!t.unstable_shouldYield());){var i=D.callback;if("function"==typeof i){D.callback=null,P=D.priorityLevel;var l=i(D.expirationTime<=n);n=t.unstable_now(),"function"==typeof l?D.callback=l:D===k(C)&&E(C),L(n)}else E(C);D=k(C)}if(null!==D)var s=!0;else{var u=k(T);null!==u&&r(R,u.startTime-n),s=!1}return s}finally{D=null,P=a,N=!1}}var M=a;t.unstable_IdlePriority=5,t.unstable_ImmediatePriority=1,t.unstable_LowPriority=4,t.unstable_NormalPriority=3,t.unstable_Profiling=null,t.unstable_UserBlockingPriority=2,t.unstable_cancelCallback=function(e){e.callback=null},t.unstable_continueExecution=function(){I||N||(I=!0,n(j))},t.unstable_getCurrentPriorityLevel=function(){return P},t.unstable_getFirstCallbackNode=function(){return k(C)},t.unstable_next=function(e){switch(P){case 1:case 2:case 3:var t=3;break;default:t=P}var n=P;P=t;try{return e()}finally{P=n}},t.unstable_pauseExecution=function(){},t.unstable_requestPaint=M,t.unstable_runWithPriority=function(e,t){switch(e){case 1:case 2:case 3:case 4:case 5:break;default:e=3}var n=P;P=e;try{return t()}finally{P=n}},t.unstable_scheduleCallback=function(e,a,i){var l=t.unstable_now();switch("object"==typeof i&&null!==i?i="number"==typeof(i=i.delay)&&0<i?l+i:l:i=l,e){case 1:var s=-1;break;case 2:s=250;break;case 5:s=1073741823;break;case 4:s=1e4;break;default:s=5e3}return e={id:O++,callback:a,priorityLevel:e,startTime:i,expirationTime:s=i+s,sortIndex:-1},i>l?(e.sortIndex=i,_(T,e),null===k(C)&&e===k(T)&&(A?o():A=!0,r(R,i-l))):(e.sortIndex=s,_(C,e),I||N||(I=!0,n(j))),e},t.unstable_wrapCallback=function(e){var t=P;return function(){var n=P;P=t;try{return e.apply(this,arguments)}finally{P=n}}}},63840:(e,t,n)=>{"use strict";e.exports=n(60053)},10577:e=>{!function(){"use strict";var t="undefined"!=typeof window&&void 0!==window.document?window.document:{},n=e.exports,r=function(){for(var e,n=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenChange","MSFullscreenError"]],r=0,o=n.length,a={};r<o;r++)if((e=n[r])&&e[1]in t){for(r=0;r<e.length;r++)a[n[0][r]]=e[r];return a}return!1}(),o={change:r.fullscreenchange,error:r.fullscreenerror},a={request:function(e,n){return new Promise(function(o,a){var i=function(){this.off("change",i),o()}.bind(this);this.on("change",i);var l=(e=e||t.documentElement)[r.requestFullscreen](n);l instanceof Promise&&l.then(i).catch(a)}.bind(this))},exit:function(){return new Promise(function(e,n){if(this.isFullscreen){var o=function(){this.off("change",o),e()}.bind(this);this.on("change",o);var a=t[r.exitFullscreen]();a instanceof Promise&&a.then(o).catch(n)}else e()}.bind(this))},toggle:function(e,t){return this.isFullscreen?this.exit():this.request(e,t)},onchange:function(e){this.on("change",e)},onerror:function(e){this.on("error",e)},on:function(e,n){var r=o[e];r&&t.addEventListener(r,n,!1)},off:function(e,n){var r=o[e];r&&t.removeEventListener(r,n,!1)},raw:r};r?(Object.defineProperties(a,{isFullscreen:{get:function(){return Boolean(t[r.fullscreenElement])}},element:{enumerable:!0,get:function(){return t[r.fullscreenElement]}},isEnabled:{enumerable:!0,get:function(){return Boolean(t[r.fullscreenEnabled])}}}),n?e.exports=a:window.screenfull=a):n?e.exports={isEnabled:!1}:window.screenfull={isEnabled:!1}}()},96774:e=>{e.exports=function(e,t,n,r){var o=n?n.call(r,e,t):void 0;if(void 0!==o)return!!o;if(e===t)return!0;if("object"!=typeof e||!e||"object"!=typeof t||!t)return!1;var a=Object.keys(e),i=Object.keys(t);if(a.length!==i.length)return!1;for(var l=Object.prototype.hasOwnProperty.bind(t),s=0;s<a.length;s++){var u=a[s];if(!l(u))return!1;var c=e[u],d=t[u];if(!1===(o=n?n.call(r,c,d,u):void 0)||void 0===o&&c!==d)return!1}return!0}},11742:e=>{e.exports=function(){var e=document.getSelection();if(!e.rangeCount)return function(){};for(var t=document.activeElement,n=[],r=0;r<e.rangeCount;r++)n.push(e.getRangeAt(r));switch(t.tagName.toUpperCase()){case"INPUT":case"TEXTAREA":t.blur();break;default:t=null}return e.removeAllRanges(),function(){"Caret"===e.type&&e.removeAllRanges(),e.rangeCount||n.forEach((function(t){e.addRange(t)})),t&&t.focus()}}},75534:(e,t)=>{"use strict";t.U={linear:function(e){return e},quadratic:function(e){return e*(-e*e*e+4*e*e-6*e+4)},cubic:function(e){return e*(4*e*e-9*e+6)},elastic:function(e){return e*(33*e*e*e*e-106*e*e*e+126*e*e-67*e+15)},inQuad:function(e){return e*e},outQuad:function(e){return e*(2-e)},inOutQuad:function(e){return e<.5?2*e*e:(4-2*e)*e-1},inCubic:function(e){return e*e*e},outCubic:function(e){return--e*e*e+1},inOutCubic:function(e){return e<.5?4*e*e*e:(e-1)*(2*e-2)*(2*e-2)+1},inQuart:function(e){return e*e*e*e},outQuart:function(e){return 1- --e*e*e*e},inOutQuart:function(e){return e<.5?8*e*e*e*e:1-8*--e*e*e*e},inQuint:function(e){return e*e*e*e*e},outQuint:function(e){return 1+--e*e*e*e*e},inOutQuint:function(e){return e<.5?16*e*e*e*e*e:1+16*--e*e*e*e*e},inSine:function(e){return 1-Math.cos(e*(Math.PI/2))},outSine:function(e){return Math.sin(e*(Math.PI/2))},inOutSine:function(e){return-(Math.cos(Math.PI*e)-1)/2},inExpo:function(e){return Math.pow(2,10*(e-1))},outExpo:function(e){return 1-Math.pow(2,-10*e)},inOutExpo:function(e){return(e/=.5)<1?Math.pow(2,10*(e-1))/2:(e--,(2-Math.pow(2,-10*e))/2)},inCirc:function(e){return 1-Math.sqrt(1-e*e)},outCirc:function(e){return Math.sqrt(1-(e-=1)*e)},inOutCirc:function(e){return(e/=.5)<1?-(Math.sqrt(1-e*e)-1)/2:(e-=2,(Math.sqrt(1-e*e)+1)/2)}}},70655:(e,t,n)=>{"use strict";n.r(t),n.d(t,{__assign:()=>a,__asyncDelegator:()=>x,__asyncGenerator:()=>w,__asyncValues:()=>_,__await:()=>y,__awaiter:()=>c,__classPrivateFieldGet:()=>T,__classPrivateFieldIn:()=>D,__classPrivateFieldSet:()=>O,__createBinding:()=>f,__decorate:()=>l,__exportStar:()=>p,__extends:()=>o,__generator:()=>d,__importDefault:()=>C,__importStar:()=>S,__makeTemplateObject:()=>k,__metadata:()=>u,__param:()=>s,__read:()=>m,__rest:()=>i,__spread:()=>g,__spreadArray:()=>b,__spreadArrays:()=>v,__values:()=>h});var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},r(e,t)};function o(e,t){if("function"!=typeof t&&null!==t)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");function n(){this.constructor=e}r(e,t),e.prototype=null===t?Object.create(t):(n.prototype=t.prototype,new n)}var a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e},a.apply(this,arguments)};function i(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var o=0;for(r=Object.getOwnPropertySymbols(e);o<r.length;o++)t.indexOf(r[o])<0&&Object.prototype.propertyIsEnumerable.call(e,r[o])&&(n[r[o]]=e[r[o]])}return n}function l(e,t,n,r){var o,a=arguments.length,i=a<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,n):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,t,n,r);else for(var l=e.length-1;l>=0;l--)(o=e[l])&&(i=(a<3?o(i):a>3?o(t,n,i):o(t,n))||i);return a>3&&i&&Object.defineProperty(t,n,i),i}function s(e,t){return function(n,r){t(n,r,e)}}function u(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)}function c(e,t,n,r){return new(n||(n=Promise))((function(o,a){function i(e){try{s(r.next(e))}catch(t){a(t)}}function l(e){try{s(r.throw(e))}catch(t){a(t)}}function s(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(i,l)}s((r=r.apply(e,t||[])).next())}))}function d(e,t){var n,r,o,a,i={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return a={next:l(0),throw:l(1),return:l(2)},"function"==typeof Symbol&&(a[Symbol.iterator]=function(){return this}),a;function l(a){return function(l){return function(a){if(n)throw new TypeError("Generator is already executing.");for(;i;)try{if(n=1,r&&(o=2&a[0]?r.return:a[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,a[1])).done)return o;switch(r=0,o&&(a=[2&a[0],o.value]),a[0]){case 0:case 1:o=a;break;case 4:return i.label++,{value:a[1],done:!1};case 5:i.label++,r=a[1],a=[0];continue;case 7:a=i.ops.pop(),i.trys.pop();continue;default:if(!(o=i.trys,(o=o.length>0&&o[o.length-1])||6!==a[0]&&2!==a[0])){i=0;continue}if(3===a[0]&&(!o||a[1]>o[0]&&a[1]<o[3])){i.label=a[1];break}if(6===a[0]&&i.label<o[1]){i.label=o[1],o=a;break}if(o&&i.label<o[2]){i.label=o[2],i.ops.push(a);break}o[2]&&i.ops.pop(),i.trys.pop();continue}a=t.call(e,i)}catch(l){a=[6,l],r=0}finally{n=o=0}if(5&a[0])throw a[1];return{value:a[0]?a[1]:void 0,done:!0}}([a,l])}}}var f=Object.create?function(e,t,n,r){void 0===r&&(r=n);var o=Object.getOwnPropertyDescriptor(t,n);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,o)}:function(e,t,n,r){void 0===r&&(r=n),e[r]=t[n]};function p(e,t){for(var n in e)"default"===n||Object.prototype.hasOwnProperty.call(t,n)||f(t,e,n)}function h(e){var t="function"==typeof Symbol&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&"number"==typeof e.length)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw new TypeError(t?"Object is not iterable.":"Symbol.iterator is not defined.")}function m(e,t){var n="function"==typeof Symbol&&e[Symbol.iterator];if(!n)return e;var r,o,a=n.call(e),i=[];try{for(;(void 0===t||t-- >0)&&!(r=a.next()).done;)i.push(r.value)}catch(l){o={error:l}}finally{try{r&&!r.done&&(n=a.return)&&n.call(a)}finally{if(o)throw o.error}}return i}function g(){for(var e=[],t=0;t<arguments.length;t++)e=e.concat(m(arguments[t]));return e}function v(){for(var e=0,t=0,n=arguments.length;t<n;t++)e+=arguments[t].length;var r=Array(e),o=0;for(t=0;t<n;t++)for(var a=arguments[t],i=0,l=a.length;i<l;i++,o++)r[o]=a[i];return r}function b(e,t,n){if(n||2===arguments.length)for(var r,o=0,a=t.length;o<a;o++)!r&&o in t||(r||(r=Array.prototype.slice.call(t,0,o)),r[o]=t[o]);return e.concat(r||Array.prototype.slice.call(t))}function y(e){return this instanceof y?(this.v=e,this):new y(e)}function w(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r,o=n.apply(e,t||[]),a=[];return r={},i("next"),i("throw"),i("return"),r[Symbol.asyncIterator]=function(){return this},r;function i(e){o[e]&&(r[e]=function(t){return new Promise((function(n,r){a.push([e,t,n,r])>1||l(e,t)}))})}function l(e,t){try{(n=o[e](t)).value instanceof y?Promise.resolve(n.value.v).then(s,u):c(a[0][2],n)}catch(r){c(a[0][3],r)}var n}function s(e){l("next",e)}function u(e){l("throw",e)}function c(e,t){e(t),a.shift(),a.length&&l(a[0][0],a[0][1])}}function x(e){var t,n;return t={},r("next"),r("throw",(function(e){throw e})),r("return"),t[Symbol.iterator]=function(){return this},t;function r(r,o){t[r]=e[r]?function(t){return(n=!n)?{value:y(e[r](t)),done:"return"===r}:o?o(t):t}:o}}function _(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t,n=e[Symbol.asyncIterator];return n?n.call(e):(e=h(e),t={},r("next"),r("throw"),r("return"),t[Symbol.asyncIterator]=function(){return this},t);function r(n){t[n]=e[n]&&function(t){return new Promise((function(r,o){(function(e,t,n,r){Promise.resolve(r).then((function(t){e({value:t,done:n})}),t)})(r,o,(t=e[n](t)).done,t.value)}))}}}function k(e,t){return Object.defineProperty?Object.defineProperty(e,"raw",{value:t}):e.raw=t,e}var E=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};function S(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var n in e)"default"!==n&&Object.prototype.hasOwnProperty.call(e,n)&&f(t,e,n);return E(t,e),t}function C(e){return e&&e.__esModule?e:{default:e}}function T(e,t,n,r){if("a"===n&&!r)throw new TypeError("Private accessor was defined without a getter");if("function"==typeof t?e!==t||!r:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return"m"===n?r:"a"===n?r.call(e):r?r.value:t.get(e)}function O(e,t,n,r,o){if("m"===r)throw new TypeError("Private method is not writable");if("a"===r&&!o)throw new TypeError("Private accessor was defined without a setter");if("function"==typeof t?e!==t||!o:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return"a"===r?o.call(e,n):o?o.value=n:t.set(e,n),n}function D(e,t){if(null===t||"object"!=typeof t&&"function"!=typeof t)throw new TypeError("Cannot use 'in' operator on non-object");return"function"==typeof e?t===e:e.has(t)}},53250:(e,t,n)=>{"use strict";var r=n(67294);var o="function"==typeof Object.is?Object.is:function(e,t){return e===t&&(0!==e||1/e==1/t)||e!=e&&t!=t},a=r.useState,i=r.useEffect,l=r.useLayoutEffect,s=r.useDebugValue;function u(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!o(e,n)}catch(r){return!0}}var c="undefined"==typeof window||void 0===window.document||void 0===window.document.createElement?function(e,t){return t()}:function(e,t){var n=t(),r=a({inst:{value:n,getSnapshot:t}}),o=r[0].inst,c=r[1];return l((function(){o.value=n,o.getSnapshot=t,u(o)&&c({inst:o})}),[e,n,t]),i((function(){return u(o)&&c({inst:o}),e((function(){u(o)&&c({inst:o})}))}),[e]),s(n),n};t.useSyncExternalStore=void 0!==r.useSyncExternalStore?r.useSyncExternalStore:c},61688:(e,t,n)=>{"use strict";e.exports=n(53250)},36809:(e,t,n)=>{"use strict";n.d(t,{Z:()=>r});const r={title:"Codex",url:"https://codex.storage",baseUrl:"/",customFields:{businessUnit:"Codex","logos-docusaurus-theme":{customCss:["/home/jenkins/workspace/website/codex.storage/src/css/custom.scss"],docs:{default:{sidebar:{hide:!1},content:{}}},id:"default"}},markdown:{mermaid:!0},i18n:{defaultLocale:"en",locales:["en"],path:"i18n",localeConfigs:{}},presets:[["@acid-info/logos-docusaurus-preset",{businessUnit:"Codex",theme:{name:"default",options:{customCss:["/home/jenkins/workspace/website/codex.storage/src/css/custom.scss"],docs:{default:{sidebar:{hide:!1}}}}},docs:{id:"root-pages",breadcrumbs:!1,routeBasePath:"/",path:"root-pages"},generated:{jobList:{jobBoard:"codex"}},og:{}}]],plugins:[["@docusaurus/plugin-content-docs",{id:"about",routeBasePath:"/about",path:"about"}],["@acid-info/docusaurus-fathom",{siteId:"OISNT",scriptUrl:"https://fathom.bi.status.im/tracker.js",hostnames:["codex.storage"]}],["@acid-info/docusaurus-og",{path:"_og",imageRenderers:{}}]],themeConfig:{docs:{sidebar:{hideable:!0,autoCollapseCategories:!1},versionPersistence:"localStorage"},metadata:[{name:"keywords",content:"codex, storage"},{name:"description",content:"Codex is building a Decentralized Durability Storage"},{name:"image",content:"theme/image/preview-image.png"}],colorMode:{disableSwitch:!1,defaultMode:"dark",respectPrefersColorScheme:!0},navbar:{title:"",logo:{alt:"Codex",src:"theme/image/logo-black.svg",srcDark:"theme/image/logo.svg",height:26},hideOnScroll:!0,items:[{type:"search",position:"left"},{label:"About Codex",to:"/about",position:"left"},{label:"Community",to:"/community",position:"left"},{title:"Codex GitHub repository",href:"https://github.com/codex-storage",position:"right",className:"header-github-link"},{label:"Docs",href:"https://docs.codex.storage",position:"left"},{label:"Blog",href:"https://blog.codex.storage",position:"left"},{label:"News",to:"https://codex.storage/news",position:"left"},{label:"Join Us",href:"/join-us",position:"left"}]},footer:{logo:{alt:"Codex",src:"theme/image/logo.svg",href:"/",width:22},links:[{items:[{href:"https://twitter.com/Codex_storage",label:"Twitter"},{href:"https://discord.gg/codex-storage",label:"Discord"},{href:"https://docs.codex.storage",label:"Docs"},{href:"https://blog.codex.storage",label:"Blog"},{href:"https://github.com/codex-storage",label:"Github"}],title:null},{items:[{to:"/join-us",label:"Work with us"},{href:"https://guide.codex.storage/",label:"Brand Guidelines"},{href:"/terms",label:"Terms & conditions"},{href:"/privacy-policy",label:"Privacy Policy"},{href:"/security",label:"Security"}],title:null},{title:"shared:Research",items:[{href:"https://vac.dev",label:"VacP2P"},{href:"https://afaik.institute",label:"AFAIK"}]},{title:"shared:Infrastructure",items:[{href:"https://waku.org/",label:"Waku"},{href:"https://nimbus.team/",label:"Nimbus"},{href:"https://codex.storage",label:"Codex"},{href:"https://nomos.tech",label:"Nomos"}]},{title:"shared:Creative Studio",items:[{href:"https://acid.info",label:"Acid.info"}]},{title:"shared:Movement",items:[{href:"https://logos.co",label:"Logos"}]},{title:"shared:User-facing products",items:[{href:"https://status.im",label:"Status"},{href:"https://keycard.tech",label:"Keycard"}]}],copyright:"Codex",style:"light"},prism:{theme:{plain:{color:"#000000",backgroundColor:"rgba(var(--lsd-surface-secondary), 0.08)"},styles:[{types:["comment"],style:{color:"rgb(0, 128, 0)"}},{types:["builtin"],style:{color:"rgb(0, 112, 193)"}},{types:["number","variable","inserted"],style:{color:"rgb(9, 134, 88)"}},{types:["operator"],style:{color:"rgb(0, 0, 0)"}},{types:["constant","char"],style:{color:"rgb(129, 31, 63)"}},{types:["tag"],style:{color:"rgb(128, 0, 0)"}},{types:["attr-name"],style:{color:"rgb(255, 0, 0)"}},{types:["deleted","string"],style:{color:"rgb(163, 21, 21)"}},{types:["changed","punctuation"],style:{color:"rgb(4, 81, 165)"}},{types:["function","keyword"],style:{color:"rgb(0, 0, 255)"}},{types:["class-name"],style:{color:"rgb(38, 127, 153)"}}]},darkTheme:{plain:{color:"#F8F8F2",backgroundColor:"rgba(var(--lsd-surface-secondary), 0.08)"},styles:[{types:["prolog","constant","builtin"],style:{color:"rgb(189, 147, 249)"}},{types:["inserted","function"],style:{color:"rgb(80, 250, 123)"}},{types:["deleted"],style:{color:"rgb(255, 85, 85)"}},{types:["changed"],style:{color:"rgb(255, 184, 108)"}},{types:["punctuation","symbol"],style:{color:"rgb(248, 248, 242)"}},{types:["string","char","tag","selector"],style:{color:"rgb(255, 121, 198)"}},{types:["keyword","variable"],style:{color:"rgb(189, 147, 249)",fontStyle:"italic"}},{types:["comment"],style:{color:"rgb(98, 114, 164)"}},{types:["attr-name"],style:{color:"rgb(241, 250, 140)"}}]},additionalLanguages:[],magicComments:[{className:"theme-code-block-highlighted-line",line:"highlight-next-line",block:{start:"highlight-start",end:"highlight-end"}}]},tableOfContents:{minHeadingLevel:2,maxHeadingLevel:3},mermaid:{theme:{dark:"dark",light:"default"},options:{}}},baseUrlIssueBanner:!0,onBrokenLinks:"warn",onBrokenMarkdownLinks:"warn",onDuplicateRoutes:"warn",staticDirectories:["static","/home/jenkins/workspace/website/codex.storage/node_modules/@acid-info/logos-docusaurus-preset/static/common","/home/jenkins/workspace/website/codex.storage/node_modules/@acid-info/logos-docusaurus-preset/static/Codex","/home/jenkins/workspace/website/codex.storage/node_modules/@acid-info/logos-docusaurus-theme/lib/client/static/"],themes:[],scripts:[],headTags:[],stylesheets:[],clientModules:[],tagline:"Codex is building a Decentralized Durability Engine",titleDelimiter:"|",noIndex:!1,favicon:"theme/image/favicon.ico"}},87462:(e,t,n)=>{"use strict";function r(){return r=Object.assign?Object.assign.bind():function(e){for(var t=1;t<arguments.length;t++){var n=arguments[t];for(var r in n)Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r])}return e},r.apply(this,arguments)}n.d(t,{Z:()=>r})},75068:(e,t,n)=>{"use strict";function r(e,t){return r=Object.setPrototypeOf?Object.setPrototypeOf.bind():function(e,t){return e.__proto__=t,e},r(e,t)}function o(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e,r(e,t)}n.d(t,{Z:()=>o})},63366:(e,t,n)=>{"use strict";function r(e,t){if(null==e)return{};var n,r,o={},a=Object.keys(e);for(r=0;r<a.length;r++)n=a[r],t.indexOf(n)>=0||(o[n]=e[n]);return o}n.d(t,{Z:()=>r})},27563:(e,t,n)=>{"use strict";n.d(t,{Ab:()=>i,Fr:()=>l,G$:()=>a,JM:()=>d,K$:()=>u,MS:()=>r,h5:()=>s,lK:()=>c,uj:()=>o});var r="-ms-",o="-moz-",a="-webkit-",i="comm",l="rule",s="decl",u="@import",c="@keyframes",d="@layer"},92190:(e,t,n)=>{"use strict";n.d(t,{MY:()=>i});var r=n(27563),o=n(26686),a=n(46411);function i(e){return(0,a.cE)(l("",null,null,null,[""],e=(0,a.un)(e),0,[0],e))}function l(e,t,n,r,i,d,f,p,h){for(var m=0,g=0,v=f,b=0,y=0,w=0,x=1,_=1,k=1,E=0,S="",C=i,T=d,O=r,D=S;_;)switch(w=E,E=(0,a.lp)()){case 40:if(108!=w&&58==(0,o.uO)(D,v-1)){-1!=(0,o.Cw)(D+=(0,o.gx)((0,a.iF)(E),"&","&\f"),"&\f")&&(k=-1);break}case 34:case 39:case 91:D+=(0,a.iF)(E);break;case 9:case 10:case 13:case 32:D+=(0,a.Qb)(w);break;case 92:D+=(0,a.kq)((0,a.Ud)()-1,7);continue;case 47:switch((0,a.fj)()){case 42:case 47:(0,o.R3)(u((0,a.q6)((0,a.lp)(),(0,a.Ud)()),t,n),h);break;default:D+="/"}break;case 123*x:p[m++]=(0,o.to)(D)*k;case 125*x:case 59:case 0:switch(E){case 0:case 125:_=0;case 59+g:-1==k&&(D=(0,o.gx)(D,/\f/g,"")),y>0&&(0,o.to)(D)-v&&(0,o.R3)(y>32?c(D+";",r,n,v-1):c((0,o.gx)(D," ","")+";",r,n,v-2),h);break;case 59:D+=";";default:if((0,o.R3)(O=s(D,t,n,m,g,i,p,S,C=[],T=[],v),d),123===E)if(0===g)l(D,t,O,O,C,d,v,p,T);else switch(99===b&&110===(0,o.uO)(D,3)?100:b){case 100:case 108:case 109:case 115:l(e,O,O,r&&(0,o.R3)(s(e,O,O,0,0,i,p,S,i,C=[],v),T),i,T,v,p,r?C:T);break;default:l(D,O,O,O,[""],T,0,p,T)}}m=g=y=0,x=k=1,S=D="",v=f;break;case 58:v=1+(0,o.to)(D),y=w;default:if(x<1)if(123==E)--x;else if(125==E&&0==x++&&125==(0,a.mp)())continue;switch(D+=(0,o.Dp)(E),E*x){case 38:k=g>0?1:(D+="\f",-1);break;case 44:p[m++]=((0,o.to)(D)-1)*k,k=1;break;case 64:45===(0,a.fj)()&&(D+=(0,a.iF)((0,a.lp)())),b=(0,a.fj)(),g=v=(0,o.to)(S=D+=(0,a.QU)((0,a.Ud)())),E++;break;case 45:45===w&&2==(0,o.to)(D)&&(x=0)}}return d}function s(e,t,n,i,l,s,u,c,d,f,p){for(var h=l-1,m=0===l?s:[""],g=(0,o.Ei)(m),v=0,b=0,y=0;v<i;++v)for(var w=0,x=(0,o.tb)(e,h+1,h=(0,o.Wn)(b=u[v])),_=e;w<g;++w)(_=(0,o.fy)(b>0?m[w]+" "+x:(0,o.gx)(x,/&\f/g,m[w])))&&(d[y++]=_);return(0,a.dH)(e,t,n,0===l?r.Fr:c,d,f,p)}function u(e,t,n){return(0,a.dH)(e,t,n,r.Ab,(0,o.Dp)((0,a.Tb)()),(0,o.tb)(e,2,-2),0)}function c(e,t,n,i){return(0,a.dH)(e,t,n,r.h5,(0,o.tb)(e,0,i),(0,o.tb)(e,i+1,-1),i)}},20211:(e,t,n)=>{"use strict";n.d(t,{P:()=>i,q:()=>a});var r=n(27563),o=n(26686);function a(e,t){for(var n="",r=(0,o.Ei)(e),a=0;a<r;a++)n+=t(e[a],a,e,t)||"";return n}function i(e,t,n,i){switch(e.type){case r.JM:if(e.children.length)break;case r.K$:case r.h5:return e.return=e.return||e.value;case r.Ab:return"";case r.lK:return e.return=e.value+"{"+a(e.children,i)+"}";case r.Fr:e.value=e.props.join(",")}return(0,o.to)(n=a(e.children,i))?e.return=e.value+"{"+n+"}":""}},46411:(e,t,n)=>{"use strict";n.d(t,{FK:()=>l,JG:()=>d,QU:()=>C,Qb:()=>_,Tb:()=>f,Ud:()=>g,cE:()=>w,dH:()=>c,fj:()=>m,iF:()=>x,kq:()=>k,lp:()=>h,mp:()=>p,q6:()=>S,r:()=>b,tP:()=>v,un:()=>y});var r=n(26686),o=1,a=1,i=0,l=0,s=0,u="";function c(e,t,n,r,i,l,s){return{value:e,root:t,parent:n,type:r,props:i,children:l,line:o,column:a,length:s,return:""}}function d(e,t){return(0,r.f0)(c("",null,null,"",null,null,0),e,{length:-e.length},t)}function f(){return s}function p(){return s=l>0?(0,r.uO)(u,--l):0,a--,10===s&&(a=1,o--),s}function h(){return s=l<i?(0,r.uO)(u,l++):0,a++,10===s&&(a=1,o++),s}function m(){return(0,r.uO)(u,l)}function g(){return l}function v(e,t){return(0,r.tb)(u,e,t)}function b(e){switch(e){case 0:case 9:case 10:case 13:case 32:return 5;case 33:case 43:case 44:case 47:case 62:case 64:case 126:case 59:case 123:case 125:return 4;case 58:return 3;case 34:case 39:case 40:case 91:return 2;case 41:case 93:return 1}return 0}function y(e){return o=a=1,i=(0,r.to)(u=e),l=0,[]}function w(e){return u="",e}function x(e){return(0,r.fy)(v(l-1,E(91===e?e+2:40===e?e+1:e)))}function _(e){for(;(s=m())&&s<33;)h();return b(e)>2||b(s)>3?"":" "}function k(e,t){for(;--t&&h()&&!(s<48||s>102||s>57&&s<65||s>70&&s<97););return v(e,g()+(t<6&&32==m()&&32==h()))}function E(e){for(;h();)switch(s){case e:return l;case 34:case 39:34!==e&&39!==e&&E(s);break;case 40:41===e&&E(e);break;case 92:h()}return l}function S(e,t){for(;h()&&e+s!==57&&(e+s!==84||47!==m()););return"/*"+v(t,l-1)+"*"+(0,r.Dp)(47===e?e:h())}function C(e){for(;!b(m());)h();return v(e,l)}},26686:(e,t,n)=>{"use strict";n.d(t,{$e:()=>g,Cw:()=>c,Dp:()=>o,EQ:()=>s,Ei:()=>h,R3:()=>m,Wn:()=>r,f0:()=>a,fy:()=>l,gx:()=>u,tb:()=>f,to:()=>p,uO:()=>d,vp:()=>i});var r=Math.abs,o=String.fromCharCode,a=Object.assign;function i(e,t){return 45^d(e,0)?(((t<<2^d(e,0))<<2^d(e,1))<<2^d(e,2))<<2^d(e,3):0}function l(e){return e.trim()}function s(e,t){return(e=t.exec(e))?e[0]:e}function u(e,t,n){return e.replace(t,n)}function c(e,t){return e.indexOf(t)}function d(e,t){return 0|e.charCodeAt(t)}function f(e,t,n){return e.slice(t,n)}function p(e){return e.length}function h(e){return e.length}function m(e,t){return t.push(e),e}function g(e,t){return e.map(t).join("")}},38776:(e,t,n)=>{"use strict";n.d(t,{Z:()=>o});var r="Invariant failed";function o(e,t){if(!e)throw new Error(r)}},57529:e=>{"use strict";e.exports={}},16887:e=>{"use strict";e.exports=JSON.parse('{"/about-4e7":{"__comp":"1be78505","__context":{"plugin":"0ca4f5f2"},"versionMetadata":"7818b736"},"/about/-a82":{"__comp":"17896441","content":"230402f8"},"/about/architect-7a3":{"__comp":"17896441","content":"d40faacd"},"/about/faq-4a0":{"__comp":"17896441","content":"7a250d2c"},"/about/roadmap-b12":{"__comp":"17896441","content":"ba0da7bd"},"/about/team-c35":{"__comp":"17896441","content":"13b4f215"},"/-9be":{"__comp":"1f391b9e","__context":{"plugin":"f50b8723"},"content":"e7ce6630"},"/-72c":{"__comp":"1be78505","__context":{"plugin":"b6219486"},"versionMetadata":"52065b4a"},"/community-dda":{"__comp":"17896441","content":"5086c83f"},"/join-us-3eb":{"__comp":"17896441","content":"4c51782d"},"/news-004":{"__comp":"17896441","content":"198b3d11"},"/privacy-policy-e92":{"__comp":"17896441","content":"81bf376d"},"/security-392":{"__comp":"17896441","content":"85cd0eac"},"/terms-73e":{"__comp":"17896441","content":"79dc5662"}}')}},e=>{e.O(0,[532],(()=>{return t=3364,e(e.s=t);var t}));e.O()}]); \ No newline at end of file diff --git a/assets/js/main.d9bc5f2c.js.LICENSE.txt b/assets/js/main.8840304e.js.LICENSE.txt similarity index 100% rename from assets/js/main.d9bc5f2c.js.LICENSE.txt rename to assets/js/main.8840304e.js.LICENSE.txt diff --git a/assets/js/runtime~main.de17d685.js b/assets/js/runtime~main.7c6b9aed.js similarity index 98% rename from assets/js/runtime~main.de17d685.js rename to assets/js/runtime~main.7c6b9aed.js index 62f3659..af1f4f4 100644 --- a/assets/js/runtime~main.de17d685.js +++ b/assets/js/runtime~main.7c6b9aed.js @@ -1 +1 @@ -(()=>{"use strict";var e,t,r,a,o,n={},c={};function d(e){var t=c[e];if(void 0!==t)return t.exports;var r=c[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,d),r.loaded=!0,r.exports}d.m=n,d.c=c,e=[],d.O=(t,r,a,o)=>{if(!r){var n=1/0;for(u=0;u<e.length;u++){r=e[u][0],a=e[u][1],o=e[u][2];for(var c=!0,f=0;f<r.length;f++)(!1&o||n>=o)&&Object.keys(d.O).every((e=>d.O[e](r[f])))?r.splice(f--,1):(c=!1,o<n&&(n=o));if(c){e.splice(u--,1);var i=a();void 0!==i&&(t=i)}}return t}o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]},d.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return d.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);d.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var c=2&a&&e;"object"==typeof c&&!~t.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,d.d(o,n),o},d.d=(e,t)=>{for(var r in t)d.o(t,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((t,r)=>(d.f[r](e,t),t)),[])),d.u=e=>"assets/js/"+({62:"7818b736",85:"1f391b9e",150:"0ca4f5f2",156:"230402f8",168:"ba0da7bd",191:"f50b8723",339:"79dc5662",383:"81bf376d",389:"b6219486",407:"85cd0eac",452:"13b4f215",501:"198b3d11",514:"1be78505",533:"52065b4a",668:"e7ce6630",767:"4c51782d",775:"7a250d2c",843:"5086c83f",894:"d40faacd",918:"17896441"}[e]||e)+"."+{62:"2eb380f3",85:"d3c1f59a",150:"1282d404",156:"1e20232e",168:"77ac6afc",191:"2ef9f876",316:"b13d0be8",339:"07e84519",383:"08cb0f6b",389:"bd984349",407:"e541acd3",452:"4ba673f1",481:"a9f0ae6e",487:"2f2f9de7",501:"809deb78",514:"16d9be11",533:"26d85871",668:"53d0731d",724:"09fdb102",755:"061a37fa",767:"4420e020",775:"439476b9",790:"46bf94d5",843:"b62744e9",894:"8d8aed9c",918:"2db7e704"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="codex-docusaurus-template:",d.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var c,f;if(void 0!==r)for(var i=document.getElementsByTagName("script"),u=0;u<i.length;u++){var b=i[u];if(b.getAttribute("src")==e||b.getAttribute("data-webpack")==o+r){c=b;break}}c||(f=!0,(c=document.createElement("script")).charset="utf-8",c.timeout=120,d.nc&&c.setAttribute("nonce",d.nc),c.setAttribute("data-webpack",o+r),c.src=e),a[e]=[t];var l=(t,r)=>{c.onerror=c.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach((e=>e(r))),t)return t(r)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=l.bind(null,c.onerror),c.onload=l.bind(null,c.onload),f&&document.head.appendChild(c)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),d.p="/",d.gca=function(e){return e={17896441:"918","7818b736":"62","1f391b9e":"85","0ca4f5f2":"150","230402f8":"156",ba0da7bd:"168",f50b8723:"191","79dc5662":"339","81bf376d":"383",b6219486:"389","85cd0eac":"407","13b4f215":"452","198b3d11":"501","1be78505":"514","52065b4a":"533",e7ce6630:"668","4c51782d":"767","7a250d2c":"775","5086c83f":"843",d40faacd:"894"}[e]||e,d.p+d.u(e)},(()=>{var e={303:0,532:0};d.f.j=(t,r)=>{var a=d.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=d.p+d.u(t),c=new Error;d.l(n,(r=>{if(d.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;c.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",c.name="ChunkLoadError",c.type=o,c.request=n,a[1](c)}}),"chunk-"+t,t)}},d.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],c=r[1],f=r[2],i=0;if(n.some((t=>0!==e[t]))){for(a in c)d.o(c,a)&&(d.m[a]=c[a]);if(f)var u=f(d)}for(t&&t(r);i<n.length;i++)o=n[i],d.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return d.O(u)},r=self.webpackChunkcodex_docusaurus_template=self.webpackChunkcodex_docusaurus_template||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})()})(); \ No newline at end of file +(()=>{"use strict";var e,t,r,a,o,n={},c={};function d(e){var t=c[e];if(void 0!==t)return t.exports;var r=c[e]={id:e,loaded:!1,exports:{}};return n[e].call(r.exports,r,r.exports,d),r.loaded=!0,r.exports}d.m=n,d.c=c,e=[],d.O=(t,r,a,o)=>{if(!r){var n=1/0;for(u=0;u<e.length;u++){r=e[u][0],a=e[u][1],o=e[u][2];for(var c=!0,f=0;f<r.length;f++)(!1&o||n>=o)&&Object.keys(d.O).every((e=>d.O[e](r[f])))?r.splice(f--,1):(c=!1,o<n&&(n=o));if(c){e.splice(u--,1);var i=a();void 0!==i&&(t=i)}}return t}o=o||0;for(var u=e.length;u>0&&e[u-1][2]>o;u--)e[u]=e[u-1];e[u]=[r,a,o]},d.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return d.d(t,{a:t}),t},r=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,d.t=function(e,a){if(1&a&&(e=this(e)),8&a)return e;if("object"==typeof e&&e){if(4&a&&e.__esModule)return e;if(16&a&&"function"==typeof e.then)return e}var o=Object.create(null);d.r(o);var n={};t=t||[null,r({}),r([]),r(r)];for(var c=2&a&&e;"object"==typeof c&&!~t.indexOf(c);c=r(c))Object.getOwnPropertyNames(c).forEach((t=>n[t]=()=>e[t]));return n.default=()=>e,d.d(o,n),o},d.d=(e,t)=>{for(var r in t)d.o(t,r)&&!d.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},d.f={},d.e=e=>Promise.all(Object.keys(d.f).reduce(((t,r)=>(d.f[r](e,t),t)),[])),d.u=e=>"assets/js/"+({62:"7818b736",85:"1f391b9e",150:"0ca4f5f2",156:"230402f8",168:"ba0da7bd",191:"f50b8723",339:"79dc5662",383:"81bf376d",389:"b6219486",407:"85cd0eac",452:"13b4f215",501:"198b3d11",514:"1be78505",533:"52065b4a",668:"e7ce6630",767:"4c51782d",775:"7a250d2c",843:"5086c83f",894:"d40faacd",918:"17896441"}[e]||e)+"."+{62:"2eb380f3",85:"d3c1f59a",150:"1282d404",156:"1e20232e",168:"77ac6afc",191:"2ef9f876",316:"b13d0be8",339:"07e84519",383:"08cb0f6b",389:"bd984349",407:"de6eddb8",452:"4ba673f1",481:"a9f0ae6e",487:"2f2f9de7",501:"809deb78",514:"16d9be11",533:"26d85871",668:"53d0731d",724:"09fdb102",755:"061a37fa",767:"4420e020",775:"439476b9",790:"46bf94d5",843:"b62744e9",894:"8d8aed9c",918:"2db7e704"}[e]+".js",d.miniCssF=e=>{},d.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),d.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a={},o="codex-docusaurus-template:",d.l=(e,t,r,n)=>{if(a[e])a[e].push(t);else{var c,f;if(void 0!==r)for(var i=document.getElementsByTagName("script"),u=0;u<i.length;u++){var b=i[u];if(b.getAttribute("src")==e||b.getAttribute("data-webpack")==o+r){c=b;break}}c||(f=!0,(c=document.createElement("script")).charset="utf-8",c.timeout=120,d.nc&&c.setAttribute("nonce",d.nc),c.setAttribute("data-webpack",o+r),c.src=e),a[e]=[t];var l=(t,r)=>{c.onerror=c.onload=null,clearTimeout(s);var o=a[e];if(delete a[e],c.parentNode&&c.parentNode.removeChild(c),o&&o.forEach((e=>e(r))),t)return t(r)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:c}),12e4);c.onerror=l.bind(null,c.onerror),c.onload=l.bind(null,c.onload),f&&document.head.appendChild(c)}},d.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},d.nmd=e=>(e.paths=[],e.children||(e.children=[]),e),d.p="/",d.gca=function(e){return e={17896441:"918","7818b736":"62","1f391b9e":"85","0ca4f5f2":"150","230402f8":"156",ba0da7bd:"168",f50b8723:"191","79dc5662":"339","81bf376d":"383",b6219486:"389","85cd0eac":"407","13b4f215":"452","198b3d11":"501","1be78505":"514","52065b4a":"533",e7ce6630:"668","4c51782d":"767","7a250d2c":"775","5086c83f":"843",d40faacd:"894"}[e]||e,d.p+d.u(e)},(()=>{var e={303:0,532:0};d.f.j=(t,r)=>{var a=d.o(e,t)?e[t]:void 0;if(0!==a)if(a)r.push(a[2]);else if(/^(303|532)$/.test(t))e[t]=0;else{var o=new Promise(((r,o)=>a=e[t]=[r,o]));r.push(a[2]=o);var n=d.p+d.u(t),c=new Error;d.l(n,(r=>{if(d.o(e,t)&&(0!==(a=e[t])&&(e[t]=void 0),a)){var o=r&&("load"===r.type?"missing":r.type),n=r&&r.target&&r.target.src;c.message="Loading chunk "+t+" failed.\n("+o+": "+n+")",c.name="ChunkLoadError",c.type=o,c.request=n,a[1](c)}}),"chunk-"+t,t)}},d.O.j=t=>0===e[t];var t=(t,r)=>{var a,o,n=r[0],c=r[1],f=r[2],i=0;if(n.some((t=>0!==e[t]))){for(a in c)d.o(c,a)&&(d.m[a]=c[a]);if(f)var u=f(d)}for(t&&t(r);i<n.length;i++)o=n[i],d.o(e,o)&&e[o]&&e[o][0](),e[o]=0;return d.O(u)},r=self.webpackChunkcodex_docusaurus_template=self.webpackChunkcodex_docusaurus_template||[];r.forEach(t.bind(null,0)),r.push=t.bind(null,r.push.bind(r))})()})(); \ No newline at end of file diff --git a/community/index.html b/community/index.html index cbea1f3..1f1fe0e 100644 --- a/community/index.html +++ b/community/index.html @@ -3,19 +3,19 @@ <head> <meta charset="UTF-8"> <meta name="generator" content="Docusaurus v2.4.1"> -<title data-rh="true">Join the community | Codex +Join the community | Codex - - - + + +

Join the community

The Codex project aims to create a decentralised durability engine that allows persisting data in p2p networks. In other words, it allows storing files and data with predictable durability guarantees for later retrieval.

WARNING: This project is under active development and is considered pre-alpha.

Welcome to the Codex Community! Whether you are interested in building with Codex, contributing to the network, expanding your knowledge, or staying up-to-date with our progress, we have something for everyone.

- - + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

Join the community

The Codex project aims to create a decentralised durability engine that allows persisting data in p2p networks. In other words, it allows storing files and data with predictable durability guarantees for later retrieval.

WARNING: This project is under active development and is considered pre-alpha.

Welcome to the Codex Community! Whether you are interested in building with Codex, contributing to the network, expanding your knowledge, or staying up-to-date with our progress, we have something for everyone.

+ + \ No newline at end of file diff --git a/index.html b/index.html index b03422e..524cbfc 100644 --- a/index.html +++ b/index.html @@ -3,11 +3,11 @@ -Defend against data censorship with Codex | Codex +Defend against data censorship with Codex | Codex - - - + + +

Defend against data censorship with Codex

Codex is a durable, decentralised data storage protocol, created so the world community can preserve its most important knowledge without risk of censorship.

Codex hero image

Codex attributes

1

Durable

Codex implements erasure coding to efficiently ensure data is always available without the storage cost of replication. Through sublinear sampling, Codex detects data corruption throughout the network, allowing for repairs to be made before loss is permanent.

2

Censorship resistant

The Codex network is designed to withstand DDoS attacks, data corruption, and even the shutdown of a significant number of nodes. Access to your data remains during these otherwise catastrophic events.

3

Decentralised

Codex implements protocol constructs that incentivize wide participation of data storage providers, both small and large, thus ensuring a robust network resistant to censorship and external attack.

4

Accessible

Participating in the Codex network is highly accessible thanks to its permissionless nature, bandwidth usage optimizations like its "lazy repair" recovery system, and lightweight ZK-based remote auditing.

Logos Collective

Codex is powering the data storage layer of the Logos technology stack. Logos is a grassroots movement, building the infrastructure for trust-minimised, corruption-resistant governing services and social institutions for peaceful people worldwide.

Learn more about our ambitious vision.

Development Roadmap

Codex is currently in its first proof-of-concept iteration and aims to release its alpha version, Katana, before the end of Q4 2023.

2021
01

Codex project begins

2021
02

Work on first Client prototype built from Bitswap, IPFS and Nitro

2021
03

Begin primitive Marketplace v1.0 interactions for pricing block exchanging

2021
04

Research begins for remote verification and erasure coding methods

2021
05

Research of Marketplace mechanics in other decentralized storage protocols

2021
06

PoR and erasure coding modeling and prototyping

2022
07

Implementation of PoR and erasure coding into Codex client

2022
08

Added first implementation of DHT and discovery v5 methods

2022
09

REST APIs added to Marketplace for Sales Availability

2022
10

Demo of first proof of concept Codex client: PoC-1 (Dagger)

2022
11

Marketplace v2.0 redesign

2022
12

Research into zkSNARK-based methods of proof aggregation to replace PoR

2022
13

Marketplace v2.0 redesign

2023
14

Demo of Codex client PoC-2 (Scimitar)

2023
15

Research into L2s, systems testing and integration of Marketplace into Client

2023
16

Demo of third proof of concept Codex client PoC-3 (Longsword): fast erasure coding, Marketplace, ZK remote auditing

2023
17

Codex MVP Version 1.0 (Katana): fast erasure coding, Marketplace, ZK remote auditing, repair

2024
18

Develop Codex L2 aggregator node architecture

2024
19

Research into payment channels and bandwidth incentives

2024
20

Implementation of incentives: payment channels, bandwidth incentives

2024
21

Enable repair using remote auditing scheme and incentive mechanisms

2025
22

Codex Version 2.0 (Wakizashi)

2025
23

Public mainnet launch

2025
24

Multi-client implementations in Rusn and Go

Team

Dmitriy

Dmitriy

Slava

Slava

Ben

Ben

Jaremy

Jaremy

Tomasz

Tomasz

Mark

Mark

Eric

Eric

Adam

Adam

Csaba

Csaba

Leo

Leo

Balazs

Balazs

Jessie

Jessie

Giuliano

Giuliano

Want to get involved with Codex? Join the Discord community.

Subscribe -to our newsletter

- - +to our newsletter
+ + \ No newline at end of file diff --git a/join-us/index.html b/join-us/index.html index 84231e6..7e07a97 100644 --- a/join-us/index.html +++ b/join-us/index.html @@ -3,19 +3,19 @@ -Join Us | Codex +Join Us | Codex - - - + + +
- - + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));} + + \ No newline at end of file diff --git a/news/index.html b/news/index.html index 6a5045a..98824cc 100644 --- a/news/index.html +++ b/news/index.html @@ -3,19 +3,19 @@ -**Codex R&D Update for Week of Jan 12, 2024** | Codex +**Codex R&D Update for Week of Jan 12, 2024** | Codex - - - + + +

Codex R&D Update for Week of Jan 12, 2024

The Codex team continues to make progress with various initiatives to wrap up the demo for the Q1/Q2 public testnet release. An internal testnet has been running for the past few weeks and has been used to test the latest version of Codex and can be accessed using the Codex Testnet Starter documentation.

Ongoing and new lines of research and development will soon begin in preparation for the next version of Codex used for the mainnet release.. Here are the updates from different team members and their ongoing work.

Development

Development is currently broken into three distinct teams:

  1. Client, Testing, and Infrastructure
  2. Marketplace
  3. Research

The different teams have actively moving on various fronts. The following are their team updates to various ongoing Epics.

Client

Epic: Nim Improvements

Completed:

Ongoing:

Epic: Wiring the Proving System

Completed:

Ongoing:

Epic: Improve Client Stability

Completed:

Ongoing:

Marketplace

Epic: End-to-end Testing

Completed:

Ongoing:

  • Continue work on updating nim-ethers to support json-rpc breaking changes
  • Continue work on supporting json-rpc breaking changes and pulling out utils/json to its own lib
  • Integrate contract changes into nim-codex
  • Look into removing wait For in integration tests
  • Review and clean up nim-ethers changes
    • Try to figure out a cleaner way to handle exceptions instead of catching all CatchableErrors
  • Start tweaking the nim-json api to normalize both serialize and deserialize pragmas, with modes: OptOut, OptIn, and Strict
  • WIP on adding PATCH call for Availabilities

Research

2024 R&D Goals

  1. Proving system and aggregation improvements (folding or lookups)
  2. Aggregator/validator design
  3. DHT improvements
  4. Tokenomics and incentive design
  5. Bandwidth incentives
  6. Dynamic data (appendable data)

Completed:

  • Frobenius endomorphism & pairing implementation
  • Review the Solidity Groth16 verifier

Ongoing:

  • DAS simulator improvements to cover more diffusion models
  • Start DAS sample query mechanism design
  • Proof recursion ideation

Codex R&D Update for Week of December 11, 2023

The Codex dev team is moving forward rapidly. The organisation’s development efforts mainly focus on launching the beta testnet by the end of the year. Following are some recent research and development highlights.

Development

Development is currently broken into three distinct sub-teams:

  1. Client, Testing, and Infrastructure
  2. Marketplace
  3. Research

Below are summaries of each sub-team.

Client

For the client, the team is focused on these primary tasks: block merkelization, Poseidon2 Nim-poseidon2 implementation, and wiring the proving system.

The client is the software that runs on the user’s local machine. It has all the components to handle the endpoints integration, data, block management, erasure coding, and interactions with the marketplace.

See currently exposed endpoints for the Codex client (conform to OpenAPI specification) at: https://api.codex.storage

Active work is ongoing to integrate the above Codex client endpoints to be accessible via the Codex frontend written in React here: https://github.com/codex-storage/codex-frontend

Epic: Block Merkelization

For block merkelization, the team is focused on reducing metadata overhead. They are optimising the structure for handling and indexing block data. This effort requires changes in block Merkelization. These are the most recent efforts, which can be publicly viewed on GitHub:

Epic: nim-poseidon2

Poseidon2 is a faster version of the original Poseidon hash function used in zero-knowledge systems (zk). Nim-Poseidon2 is the Nim implementation the Codex team is developing to work efficiently and effectively with the Codex client.

Epic: Wiring the Proving System

The proving system comprises a SNARK circuit that generates the proof. A Storage Provider must also submit the marketplace contract to prove it faithfully stores the associated slot data. Additional components, such as the trusted setup ceremony, hash functions, and the multiple manifests generated for different purposes, are included in the proving system. The team is working on ensuring the proving system is built out and functions to successfully remote audit the slot data by validators. These stories represent the most recent efforts:

Testing and Infrastructure

The testing and infrastructure group is preparing to deploy tens or hundreds of nodes and efficiently monitor the activity. This is crucial for a successful launch of the testnet. The following are the epics and stories of development for this process. The main areas of concern are ensuring the testnet is set up and configured properly. It will also include ensuring the client maintains a suitable level of stability.

Epic: 2023 Testnet setup

  • Configure TCP/UDP port forwarding for Testnet deployment
  • Configure Pods placement for D/C-Tests runners and tests workload
  • Check available options to build a service to get Codex Public IP for announcement
  • Deploy Codex Bootstrap nodes for Testnet
  • Deploy Geth Bootstrap nodes for Testnet

Epic: Improve Client Stability

Marketplace

The marketplace is a smart contract deployed on a blockchain. This smart contract defines all the logic required for users to ask for storage, store collaterals, assign storage nodes to user datasets, settle payments, deal with storage failures, storage provider proof issuance, and all the contract interactions.

Epic: End-to-end Testing

Research

Current research is mostly halted due to focus on implementing past research for the imminent launch of the testnet. Ongoing efforts include:

Near-term:

  • Ongoing “Groth16 prover” research and analysis.
  • Details for the functionality of the current proof system
  • Hash and Merkle tree conventions to make them safe
  • Continuing research for Codex’s use of erasure coding

Long-term:

  • Figuring out how to aggregate proofs (proof compression) for proving system
  • Determining the correct proof system for Codex
- - + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

Codex R&D Update for Week of Jan 12, 2024

The Codex team continues to make progress with various initiatives to wrap up the demo for the Q1/Q2 public testnet release. An internal testnet has been running for the past few weeks and has been used to test the latest version of Codex and can be accessed using the Codex Testnet Starter documentation.

Ongoing and new lines of research and development will soon begin in preparation for the next version of Codex used for the mainnet release.. Here are the updates from different team members and their ongoing work.

Development

Development is currently broken into three distinct teams:

  1. Client, Testing, and Infrastructure
  2. Marketplace
  3. Research

The different teams have actively moving on various fronts. The following are their team updates to various ongoing Epics.

Client

Epic: Nim Improvements

Completed:

Ongoing:

Epic: Wiring the Proving System

Completed:

Ongoing:

Epic: Improve Client Stability

Completed:

Ongoing:

Marketplace

Epic: End-to-end Testing

Completed:

Ongoing:

  • Continue work on updating nim-ethers to support json-rpc breaking changes
  • Continue work on supporting json-rpc breaking changes and pulling out utils/json to its own lib
  • Integrate contract changes into nim-codex
  • Look into removing wait For in integration tests
  • Review and clean up nim-ethers changes
    • Try to figure out a cleaner way to handle exceptions instead of catching all CatchableErrors
  • Start tweaking the nim-json api to normalize both serialize and deserialize pragmas, with modes: OptOut, OptIn, and Strict
  • WIP on adding PATCH call for Availabilities

Research

2024 R&D Goals

  1. Proving system and aggregation improvements (folding or lookups)
  2. Aggregator/validator design
  3. DHT improvements
  4. Tokenomics and incentive design
  5. Bandwidth incentives
  6. Dynamic data (appendable data)

Completed:

  • Frobenius endomorphism & pairing implementation
  • Review the Solidity Groth16 verifier

Ongoing:

  • DAS simulator improvements to cover more diffusion models
  • Start DAS sample query mechanism design
  • Proof recursion ideation

Codex R&D Update for Week of December 11, 2023

The Codex dev team is moving forward rapidly. The organisation’s development efforts mainly focus on launching the beta testnet by the end of the year. Following are some recent research and development highlights.

Development

Development is currently broken into three distinct sub-teams:

  1. Client, Testing, and Infrastructure
  2. Marketplace
  3. Research

Below are summaries of each sub-team.

Client

For the client, the team is focused on these primary tasks: block merkelization, Poseidon2 Nim-poseidon2 implementation, and wiring the proving system.

The client is the software that runs on the user’s local machine. It has all the components to handle the endpoints integration, data, block management, erasure coding, and interactions with the marketplace.

See currently exposed endpoints for the Codex client (conform to OpenAPI specification) at: https://api.codex.storage

Active work is ongoing to integrate the above Codex client endpoints to be accessible via the Codex frontend written in React here: https://github.com/codex-storage/codex-frontend

Epic: Block Merkelization

For block merkelization, the team is focused on reducing metadata overhead. They are optimising the structure for handling and indexing block data. This effort requires changes in block Merkelization. These are the most recent efforts, which can be publicly viewed on GitHub:

Epic: nim-poseidon2

Poseidon2 is a faster version of the original Poseidon hash function used in zero-knowledge systems (zk). Nim-Poseidon2 is the Nim implementation the Codex team is developing to work efficiently and effectively with the Codex client.

Epic: Wiring the Proving System

The proving system comprises a SNARK circuit that generates the proof. A Storage Provider must also submit the marketplace contract to prove it faithfully stores the associated slot data. Additional components, such as the trusted setup ceremony, hash functions, and the multiple manifests generated for different purposes, are included in the proving system. The team is working on ensuring the proving system is built out and functions to successfully remote audit the slot data by validators. These stories represent the most recent efforts:

Testing and Infrastructure

The testing and infrastructure group is preparing to deploy tens or hundreds of nodes and efficiently monitor the activity. This is crucial for a successful launch of the testnet. The following are the epics and stories of development for this process. The main areas of concern are ensuring the testnet is set up and configured properly. It will also include ensuring the client maintains a suitable level of stability.

Epic: 2023 Testnet setup

  • Configure TCP/UDP port forwarding for Testnet deployment
  • Configure Pods placement for D/C-Tests runners and tests workload
  • Check available options to build a service to get Codex Public IP for announcement
  • Deploy Codex Bootstrap nodes for Testnet
  • Deploy Geth Bootstrap nodes for Testnet

Epic: Improve Client Stability

Marketplace

The marketplace is a smart contract deployed on a blockchain. This smart contract defines all the logic required for users to ask for storage, store collaterals, assign storage nodes to user datasets, settle payments, deal with storage failures, storage provider proof issuance, and all the contract interactions.

Epic: End-to-end Testing

Research

Current research is mostly halted due to focus on implementing past research for the imminent launch of the testnet. Ongoing efforts include:

Near-term:

  • Ongoing “Groth16 prover” research and analysis.
  • Details for the functionality of the current proof system
  • Hash and Merkle tree conventions to make them safe
  • Continuing research for Codex’s use of erasure coding

Long-term:

  • Figuring out how to aggregate proofs (proof compression) for proving system
  • Determining the correct proof system for Codex
+ + \ No newline at end of file diff --git a/privacy-policy/index.html b/privacy-policy/index.html index 531907b..166c011 100644 --- a/privacy-policy/index.html +++ b/privacy-policy/index.html @@ -3,19 +3,19 @@ -Privacy Policy | Codex +Privacy Policy | Codex - - - + + +

Privacy Policy

Last updated: 9 February 2024

This Privacy Policy is intended to inform users of our approach to privacy in respect of this website ("Website"). In this regard, if you are visiting our Website, this Privacy Policy applies to you.

1) Who we are

For the purposes of this Privacy Policy and the collection and processing of personal data as a controller, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at

Logos Collective Association
c/o PST Consulting GmbH
Baarerstrasse 10
6300 Zug
Switzerland

Whenever we refer to “Logos”, “we” or other similar references, we are referring to the Logos Collective Association.

2) We limit the collection and processing of personal data from your use of the Website

We aim to limit the collection and collection and processing of personal data from users of the Website. We only collect and process certain personal data for specific purposes and where we have the legal basis to do so under applicable privacy legislation. We will not collect or process any personal data that we don’t need and where we do store any personal data, we will only store it for the least amount of time needed for the indicated purpose.

In this regard, we collect and process the following personal data from your use of the Website:

  • IP address: As part of such use of the Website and from our use of Fathom Analytics, we briefly process your IP address but we have no way of identifying you. We however have a legitimate interest in processing such IP addresses to ensure the technical functionality and enhance the security measures of the Website. This IP address is not stored by us over time.

  • Fathom Analytics: We note that we make use of Fathom Analytics, which you can read more about here: https://usefathom.com/. In short, Fathom Analytics is an alternative to Google Analytics, that doesn’t compromise visitor privacy for data. Fathom Analytics collects trends and insights, not personal details about specific website visitors. Fathom Analytics offers simple traffic insights such as top pages, top referrers, bounce rate, and average time people spend on a site.

3) Third party processing of personal data

In addition to our limited and collection of personal data, third parties may collect or process personal data as a result of the Website making use of certain features or to provide certain content. To the extent you interact with such third party content or features, their respective privacy policies will apply.

We would however like to draw your attention to the following:

  • Youtube: The Website may embed videos from Youtube, a service provided by Google LLC, using Youtube’s privacy-enhanced mode. When you interact with such videos, Youtube may place cookies on your personal device. The cookies do not directly identify individual users and YouTube will not store information to personalise your experience unless you are logged in to a Google account. We do not have any control over these cookies set by Youtube and it is recommended that you review YouTube’s embedding videos information page.

4) Security measures we take in respect of the Website

As a general approach, we take data security seriously and we have implemented a variety of security measures on the Website to maintain the safety of your personal data when you submit such information to us.

5) Exporting data outside the European Union and Switzerland

We are obliged to protect the privacy of personal data that you may have submitted in the unlikely event that we export your personal data to places outside the European Union or Switzerland. This means that personal data will only be processed in countries or by parties that provide an adequate level of protection as deemed by Switzerland or the European Commission. Otherwise, we will use other forms of protections, such as specific forms of contractual clauses to ensure such personal data is provided the same protection as required in Switzerland or Europe. In any event, the transmission of personal data outside the European Union and Switzerland will always occur in conformity with applicable privacy legislation.

6) Your choices and rights

As explained in this Privacy Policy, we limit our collection and processing of your personal data wherever possible. Nonetheless, you still have certain choices and rights in respect of the personal data which we do collect and process. As laid out in relevant privacy legislation, you have the right to:

  • Ask us to correct or update your personal data (where reasonably possible);

  • Ask us to remove your personal data from our systems;

  • Ask us for a copy of your personal data, which may also be transferred to another data controller at your request;

  • Withdraw your consent to process your personal data (only if consent was asked for a processing activity), which only affects processing activities that are based on your consent and doesn’t affect the validity of such processing activities before you have withdrawn your consent;

  • Object to the processing of your personal data; and

  • File a complaint with the Federal Data Protection and Information Commissioner (FDPIC), if you believe that your personal data has been processed unlawfully.

On this Website, you may come across links to third party websites. These third party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these third party websites.

8) This Privacy Policy might change

We may modify or replace any part of this Privacy Policy at any time and without notice. Please check the Website periodically for any changes. The new Privacy Policy will be effective immediately upon its posting on our Website.

9) Contact information

To the extent that you have any questions about the Privacy Policy, please contact us at legal@free.technology.

This document is licensed under CC-BY-SA.

- - + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

Privacy Policy

Last updated: 9 February 2024

This Privacy Policy is intended to inform users of our approach to privacy in respect of this website ("Website"). In this regard, if you are visiting our Website, this Privacy Policy applies to you.

1) Who we are

For the purposes of this Privacy Policy and the collection and processing of personal data as a controller, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at

Logos Collective Association
c/o PST Consulting GmbH
Baarerstrasse 10
6300 Zug
Switzerland

Whenever we refer to “Logos”, “we” or other similar references, we are referring to the Logos Collective Association.

2) We limit the collection and processing of personal data from your use of the Website

We aim to limit the collection and collection and processing of personal data from users of the Website. We only collect and process certain personal data for specific purposes and where we have the legal basis to do so under applicable privacy legislation. We will not collect or process any personal data that we don’t need and where we do store any personal data, we will only store it for the least amount of time needed for the indicated purpose.

In this regard, we collect and process the following personal data from your use of the Website:

  • IP address: As part of such use of the Website and from our use of Fathom Analytics, we briefly process your IP address but we have no way of identifying you. We however have a legitimate interest in processing such IP addresses to ensure the technical functionality and enhance the security measures of the Website. This IP address is not stored by us over time.

  • Fathom Analytics: We note that we make use of Fathom Analytics, which you can read more about here: https://usefathom.com/. In short, Fathom Analytics is an alternative to Google Analytics, that doesn’t compromise visitor privacy for data. Fathom Analytics collects trends and insights, not personal details about specific website visitors. Fathom Analytics offers simple traffic insights such as top pages, top referrers, bounce rate, and average time people spend on a site.

3) Third party processing of personal data

In addition to our limited and collection of personal data, third parties may collect or process personal data as a result of the Website making use of certain features or to provide certain content. To the extent you interact with such third party content or features, their respective privacy policies will apply.

We would however like to draw your attention to the following:

  • Youtube: The Website may embed videos from Youtube, a service provided by Google LLC, using Youtube’s privacy-enhanced mode. When you interact with such videos, Youtube may place cookies on your personal device. The cookies do not directly identify individual users and YouTube will not store information to personalise your experience unless you are logged in to a Google account. We do not have any control over these cookies set by Youtube and it is recommended that you review YouTube’s embedding videos information page.

4) Security measures we take in respect of the Website

As a general approach, we take data security seriously and we have implemented a variety of security measures on the Website to maintain the safety of your personal data when you submit such information to us.

5) Exporting data outside the European Union and Switzerland

We are obliged to protect the privacy of personal data that you may have submitted in the unlikely event that we export your personal data to places outside the European Union or Switzerland. This means that personal data will only be processed in countries or by parties that provide an adequate level of protection as deemed by Switzerland or the European Commission. Otherwise, we will use other forms of protections, such as specific forms of contractual clauses to ensure such personal data is provided the same protection as required in Switzerland or Europe. In any event, the transmission of personal data outside the European Union and Switzerland will always occur in conformity with applicable privacy legislation.

6) Your choices and rights

As explained in this Privacy Policy, we limit our collection and processing of your personal data wherever possible. Nonetheless, you still have certain choices and rights in respect of the personal data which we do collect and process. As laid out in relevant privacy legislation, you have the right to:

  • Ask us to correct or update your personal data (where reasonably possible);

  • Ask us to remove your personal data from our systems;

  • Ask us for a copy of your personal data, which may also be transferred to another data controller at your request;

  • Withdraw your consent to process your personal data (only if consent was asked for a processing activity), which only affects processing activities that are based on your consent and doesn’t affect the validity of such processing activities before you have withdrawn your consent;

  • Object to the processing of your personal data; and

  • File a complaint with the Federal Data Protection and Information Commissioner (FDPIC), if you believe that your personal data has been processed unlawfully.

On this Website, you may come across links to third party websites. These third party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these third party websites.

8) This Privacy Policy might change

We may modify or replace any part of this Privacy Policy at any time and without notice. Please check the Website periodically for any changes. The new Privacy Policy will be effective immediately upon its posting on our Website.

9) Contact information

To the extent that you have any questions about the Privacy Policy, please contact us at legal@free.technology.

This document is licensed under CC-BY-SA.

+ + \ No newline at end of file diff --git a/search-index.json b/search-index.json new file mode 100644 index 0000000..587423b --- /dev/null +++ b/search-index.json @@ -0,0 +1 @@ +[{"documents":[{"i":1,"t":"About Codex","u":"/about/","b":["About Codex"]},{"i":7,"t":"Join the community","u":"/community","b":["Community"]},{"i":9,"t":"Frequently asked questions","u":"/about/faq","b":["About Codex"]},{"i":11,"t":"Description and architecture","u":"/about/architect","b":["About Codex"]},{"i":17,"t":"Current job openings","u":"/join-us","b":[]},{"i":19,"t":"Development roadmap","u":"/about/roadmap","b":["About Codex"]},{"i":26,"t":"Core contributors","u":"/about/team","b":["About Codex"]},{"i":28,"t":"Codex R&D Update for Week of Jan 12, 2024","u":"/news","b":[]},{"i":68,"t":"Terms of Use","u":"/terms","b":[]},{"i":92,"t":"Security","u":"/security","b":[]},{"i":94,"t":"Privacy Policy","u":"/privacy-policy","b":[]}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/1",[0,2.071]],["t/7",[1,2.25,2,2.25]],["t/9",[3,1.906,4,1.906,5,1.906]],["t/11",[6,2.25,7,2.25]],["t/17",[8,1.906,9,1.906,10,1.906]],["t/19",[11,2.25,12,2.25]],["t/26",[13,2.25,14,2.25]],["t/28",[0,0.892,15,1.183,16,1.183,17,1.183,18,1.183,19,1.183,20,1.183]],["t/68",[21,2.25,22,2.25]],["t/92",[23,2.745]],["t/94",[24,2.25,25,2.25]]],"invertedIndex":[["12",{"_index":19,"t":{"28":{"position":[[33,3]]}}}],["2024",{"_index":20,"t":{"28":{"position":[[37,4]]}}}],["architectur",{"_index":7,"t":{"11":{"position":[[16,12]]}}}],["ask",{"_index":4,"t":{"9":{"position":[[11,5]]}}}],["codex",{"_index":0,"t":{"1":{"position":[[6,5]]},"28":{"position":[[0,5]]}}}],["commun",{"_index":2,"t":{"7":{"position":[[9,9]]}}}],["contributor",{"_index":14,"t":{"26":{"position":[[5,12]]}}}],["core",{"_index":13,"t":{"26":{"position":[[0,4]]}}}],["current",{"_index":8,"t":{"17":{"position":[[0,7]]}}}],["descript",{"_index":6,"t":{"11":{"position":[[0,11]]}}}],["develop",{"_index":11,"t":{"19":{"position":[[0,11]]}}}],["frequent",{"_index":3,"t":{"9":{"position":[[0,10]]}}}],["jan",{"_index":18,"t":{"28":{"position":[[29,3]]}}}],["job",{"_index":9,"t":{"17":{"position":[[8,3]]}}}],["join",{"_index":1,"t":{"7":{"position":[[0,4]]}}}],["open",{"_index":10,"t":{"17":{"position":[[12,8]]}}}],["polici",{"_index":25,"t":{"94":{"position":[[8,6]]}}}],["privaci",{"_index":24,"t":{"94":{"position":[[0,7]]}}}],["question",{"_index":5,"t":{"9":{"position":[[17,9]]}}}],["r&d",{"_index":15,"t":{"28":{"position":[[6,3]]}}}],["roadmap",{"_index":12,"t":{"19":{"position":[[12,7]]}}}],["secur",{"_index":23,"t":{"92":{"position":[[0,8]]}}}],["term",{"_index":21,"t":{"68":{"position":[[0,5]]}}}],["updat",{"_index":16,"t":{"28":{"position":[[10,6]]}}}],["us",{"_index":22,"t":{"68":{"position":[[9,3]]}}}],["week",{"_index":17,"t":{"28":{"position":[[21,4]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":3,"t":"Motive","u":"/about/","h":"#motive","p":1},{"i":5,"t":"Decentralising data storage","u":"/about/","h":"#decentralising-data-storage","p":1},{"i":13,"t":"Incentivized decentralisation","u":"/about/architect","h":"#incentivized-decentralisation","p":11},{"i":15,"t":"Network architecture","u":"/about/architect","h":"#network-architecture","p":11},{"i":20,"t":"Releases","u":"/about/roadmap","h":"#releases","p":19},{"i":22,"t":"Milestones","u":"/about/roadmap","h":"#milestones","p":19},{"i":24,"t":"Roadmap rationale","u":"/about/roadmap","h":"#roadmap-rationale","p":19},{"i":30,"t":"Development","u":"/news","h":"","p":28},{"i":32,"t":"Client","u":"/news","h":"","p":28},{"i":33,"t":"Epic: Nim Improvements","u":"/news","h":"#epic-nim-improvements","p":28},{"i":35,"t":"Epic: Wiring the Proving System","u":"/news","h":"#epic-wiring-the-proving-system","p":28},{"i":37,"t":"Epic: Improve Client Stability","u":"/news","h":"#epic-improve-client-stability","p":28},{"i":39,"t":"Marketplace","u":"/news","h":"","p":28},{"i":40,"t":"Epic: End-to-end Testing","u":"/news","h":"#epic-end-to-end-testing","p":28},{"i":42,"t":"Research","u":"/news","h":"","p":28},{"i":44,"t":"Codex R&D Update for Week of December 11, 2023","u":"/news","h":"","p":28},{"i":46,"t":"Development","u":"/news","h":"","p":28},{"i":48,"t":"Client","u":"/news","h":"","p":28},{"i":50,"t":"Epic: Block Merkelization","u":"/news","h":"#epic-block-merkelization","p":28},{"i":52,"t":"Epic: nim-poseidon2","u":"/news","h":"#epic-nim-poseidon2","p":28},{"i":54,"t":"Epic: Wiring the Proving System","u":"/news","h":"#epic-wiring-the-proving-system-1","p":28},{"i":56,"t":"Testing and Infrastructure","u":"/news","h":"","p":28},{"i":58,"t":"Epic: 2023 Testnet setup","u":"/news","h":"#epic-2023-testnet-setup","p":28},{"i":60,"t":"Epic: Improve Client Stability","u":"/news","h":"#epic-improve-client-stability-1","p":28},{"i":62,"t":"Marketplace","u":"/news","h":"","p":28},{"i":64,"t":"Epic: End-to-end Testing","u":"/news","h":"#epic-end-to-end-testing-1","p":28},{"i":66,"t":"Research","u":"/news","h":"","p":28},{"i":70,"t":"1) Who we are","u":"/terms","h":"#1-who-we-are","p":68},{"i":72,"t":"2) Disclaimers","u":"/terms","h":"#2-disclaimers","p":68},{"i":74,"t":"3) Forward looking statements","u":"/terms","h":"#3-forward-looking-statements","p":68},{"i":76,"t":"4) Intellectual property rights","u":"/terms","h":"#4-intellectual-property-rights","p":68},{"i":78,"t":"5) Third-party website links","u":"/terms","h":"#5-third-party-website-links","p":68},{"i":80,"t":"6) Limitation of liability","u":"/terms","h":"#6-limitation-of-liability","p":68},{"i":82,"t":"7) Indemnity","u":"/terms","h":"#7-indemnity","p":68},{"i":84,"t":"8) Modifications","u":"/terms","h":"#8-modifications","p":68},{"i":86,"t":"9) Governing law","u":"/terms","h":"#9-governing-law","p":68},{"i":88,"t":"10) Disputes","u":"/terms","h":"#10-disputes","p":68},{"i":90,"t":"11) About these Website Terms of Use","u":"/terms","h":"#11-about-these-website-terms-of-use","p":68},{"i":96,"t":"1) Who we are","u":"/privacy-policy","h":"#1-who-we-are","p":94},{"i":98,"t":"2) We limit the collection and processing of personal data from your use of the Website","u":"/privacy-policy","h":"#2-we-limit-the-collection-and-processing-of-personal-data-from-your-use-of-the-website","p":94},{"i":100,"t":"3) Third party processing of personal data","u":"/privacy-policy","h":"#3-third-party-processing-of-personal-data","p":94},{"i":102,"t":"4) Security measures we take in respect of the Website","u":"/privacy-policy","h":"#4-security-measures-we-take-in-respect-of-the-website","p":94},{"i":104,"t":"5) Exporting data outside the European Union and Switzerland","u":"/privacy-policy","h":"#5-exporting-data-outside-the-european-union-and-switzerland","p":94},{"i":106,"t":"6) Your choices and rights","u":"/privacy-policy","h":"#6-your-choices-and-rights","p":94},{"i":108,"t":"7) Third party links","u":"/privacy-policy","h":"#7-third-party-links","p":94},{"i":110,"t":"8) This Privacy Policy might change","u":"/privacy-policy","h":"#8-this-privacy-policy-might-change","p":94},{"i":112,"t":"9) Contact information","u":"/privacy-policy","h":"#9-contact-information","p":94}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/3",[0,4.759]],["t/5",[1,2.946,2,2.36,3,3.456]],["t/13",[1,3.414,4,4.004]],["t/15",[5,4.004,6,4.004]],["t/20",[7,4.759]],["t/22",[8,4.759]],["t/24",[9,4.004,10,4.004]],["t/30",[11,4.058]],["t/32",[12,3.25]],["t/33",[13,1.515,14,2.946,15,2.611]],["t/35",[13,1.333,16,2.591,17,2.591,18,2.591]],["t/37",[12,2.076,13,1.333,15,2.296,19,2.591]],["t/39",[20,4.058]],["t/40",[13,1.333,21,3.706,22,2.296]],["t/42",[23,4.058]],["t/44",[24,2.233,25,2.233,26,2.233,27,2.233,28,2.233,29,1.904,30,1.904]],["t/46",[11,4.058]],["t/48",[12,3.25]],["t/50",[13,1.515,31,3.456,32,3.456]],["t/52",[13,1.515,14,2.946,33,3.456]],["t/54",[13,1.333,16,2.591,17,2.591,18,2.591]],["t/56",[22,3.025,34,4.004]],["t/58",[13,1.333,30,2.591,35,3.039,36,3.039]],["t/60",[12,2.076,13,1.333,15,2.296,19,2.591]],["t/62",[20,4.058]],["t/64",[13,1.333,21,3.706,22,2.296]],["t/66",[23,4.058]],["t/70",[37,4.058]],["t/72",[38,3.414,39,4.004]],["t/74",[40,2.591,41,3.039,42,3.039,43,3.039]],["t/76",[44,2.591,45,3.039,46,3.039,47,2.591]],["t/78",[48,2.313,49,2.05,50,2.05,51,1.853,52,2.313]],["t/80",[53,2.946,54,2.946,55,3.456]],["t/82",[56,3.414,57,4.004]],["t/84",[58,3.414,59,4.004]],["t/86",[60,2.946,61,3.456,62,3.456]],["t/88",[63,4.004,64,4.004]],["t/90",[29,2.591,51,2.076,65,3.039,66,2.591]],["t/96",[37,4.058]],["t/98",[2,1.401,38,1.749,51,1.401,54,1.749,66,1.749,67,2.051,68,1.749,69,1.749]],["t/100",[2,1.673,40,2.088,49,1.851,50,1.851,68,2.088,69,2.088]],["t/102",[44,2.088,51,1.673,70,2.449,71,2.449,72,2.449,73,2.449]],["t/104",[2,1.525,48,1.904,74,2.233,75,2.233,76,2.233,77,2.233,78,2.233]],["t/106",[47,2.946,53,2.946,79,3.456]],["t/108",[49,2.296,50,2.296,52,2.591,56,2.591]],["t/110",[58,2.591,80,3.039,81,3.039,82,3.039]],["t/112",[60,2.946,83,3.456,84,3.456]]],"invertedIndex":[["1",{"_index":37,"t":{"70":{"position":[[0,2]]},"96":{"position":[[0,2]]}}}],["10",{"_index":63,"t":{"88":{"position":[[0,3]]}}}],["11",{"_index":29,"t":{"44":{"position":[[38,3]]},"90":{"position":[[0,3]]}}}],["2",{"_index":38,"t":{"72":{"position":[[0,2]]},"98":{"position":[[0,2]]}}}],["2023",{"_index":30,"t":{"44":{"position":[[42,4]]},"58":{"position":[[6,4]]}}}],["3",{"_index":40,"t":{"74":{"position":[[0,2]]},"100":{"position":[[0,2]]}}}],["4",{"_index":44,"t":{"76":{"position":[[0,2]]},"102":{"position":[[0,2]]}}}],["5",{"_index":48,"t":{"78":{"position":[[0,2]]},"104":{"position":[[0,2]]}}}],["6",{"_index":53,"t":{"80":{"position":[[0,2]]},"106":{"position":[[0,2]]}}}],["7",{"_index":56,"t":{"82":{"position":[[0,2]]},"108":{"position":[[0,2]]}}}],["8",{"_index":58,"t":{"84":{"position":[[0,2]]},"110":{"position":[[0,2]]}}}],["9",{"_index":60,"t":{"86":{"position":[[0,2]]},"112":{"position":[[0,2]]}}}],["architectur",{"_index":6,"t":{"15":{"position":[[8,12]]}}}],["block",{"_index":31,"t":{"50":{"position":[[6,5]]}}}],["chang",{"_index":82,"t":{"110":{"position":[[29,6]]}}}],["choic",{"_index":79,"t":{"106":{"position":[[8,7]]}}}],["client",{"_index":12,"t":{"32":{"position":[[0,6]]},"37":{"position":[[14,6]]},"48":{"position":[[0,6]]},"60":{"position":[[14,6]]}}}],["codex",{"_index":24,"t":{"44":{"position":[[0,5]]}}}],["collect",{"_index":67,"t":{"98":{"position":[[16,10]]}}}],["contact",{"_index":83,"t":{"112":{"position":[[3,7]]}}}],["data",{"_index":2,"t":{"5":{"position":[[15,4]]},"98":{"position":[[54,4]]},"100":{"position":[[38,4]]},"104":{"position":[[13,4]]}}}],["decemb",{"_index":28,"t":{"44":{"position":[[29,8]]}}}],["decentralis",{"_index":1,"t":{"5":{"position":[[0,14]]},"13":{"position":[[13,16]]}}}],["develop",{"_index":11,"t":{"30":{"position":[[0,11]]},"46":{"position":[[0,11]]}}}],["disclaim",{"_index":39,"t":{"72":{"position":[[3,11]]}}}],["disput",{"_index":64,"t":{"88":{"position":[[4,8]]}}}],["end",{"_index":21,"t":{"40":{"position":[[6,3],[13,3]]},"64":{"position":[[6,3],[13,3]]}}}],["epic",{"_index":13,"t":{"33":{"position":[[0,5]]},"35":{"position":[[0,5]]},"37":{"position":[[0,5]]},"40":{"position":[[0,5]]},"50":{"position":[[0,5]]},"52":{"position":[[0,5]]},"54":{"position":[[0,5]]},"58":{"position":[[0,5]]},"60":{"position":[[0,5]]},"64":{"position":[[0,5]]}}}],["european",{"_index":76,"t":{"104":{"position":[[30,8]]}}}],["export",{"_index":74,"t":{"104":{"position":[[3,9]]}}}],["forward",{"_index":41,"t":{"74":{"position":[[3,7]]}}}],["govern",{"_index":61,"t":{"86":{"position":[[3,9]]}}}],["improv",{"_index":15,"t":{"33":{"position":[[10,12]]},"37":{"position":[[6,7]]},"60":{"position":[[6,7]]}}}],["incentiv",{"_index":4,"t":{"13":{"position":[[0,12]]}}}],["indemn",{"_index":57,"t":{"82":{"position":[[3,9]]}}}],["inform",{"_index":84,"t":{"112":{"position":[[11,11]]}}}],["infrastructur",{"_index":34,"t":{"56":{"position":[[12,14]]}}}],["intellectu",{"_index":45,"t":{"76":{"position":[[3,12]]}}}],["law",{"_index":62,"t":{"86":{"position":[[13,3]]}}}],["liabil",{"_index":55,"t":{"80":{"position":[[17,9]]}}}],["limit",{"_index":54,"t":{"80":{"position":[[3,10]]},"98":{"position":[[6,5]]}}}],["link",{"_index":52,"t":{"78":{"position":[[23,5]]},"108":{"position":[[15,5]]}}}],["look",{"_index":42,"t":{"74":{"position":[[11,7]]}}}],["marketplac",{"_index":20,"t":{"39":{"position":[[0,11]]},"62":{"position":[[0,11]]}}}],["measur",{"_index":71,"t":{"102":{"position":[[12,8]]}}}],["merkel",{"_index":32,"t":{"50":{"position":[[12,13]]}}}],["mileston",{"_index":8,"t":{"22":{"position":[[0,10]]}}}],["modif",{"_index":59,"t":{"84":{"position":[[3,13]]}}}],["motiv",{"_index":0,"t":{"3":{"position":[[0,6]]}}}],["network",{"_index":5,"t":{"15":{"position":[[0,7]]}}}],["nim",{"_index":14,"t":{"33":{"position":[[6,3]]},"52":{"position":[[6,3]]}}}],["outsid",{"_index":75,"t":{"104":{"position":[[18,7]]}}}],["parti",{"_index":50,"t":{"78":{"position":[[9,5]]},"100":{"position":[[9,5]]},"108":{"position":[[9,5]]}}}],["person",{"_index":69,"t":{"98":{"position":[[45,8]]},"100":{"position":[[29,8]]}}}],["polici",{"_index":81,"t":{"110":{"position":[[16,6]]}}}],["poseidon2",{"_index":33,"t":{"52":{"position":[[10,9]]}}}],["privaci",{"_index":80,"t":{"110":{"position":[[8,7]]}}}],["process",{"_index":68,"t":{"98":{"position":[[31,10]]},"100":{"position":[[15,10]]}}}],["properti",{"_index":46,"t":{"76":{"position":[[16,8]]}}}],["prove",{"_index":17,"t":{"35":{"position":[[17,7]]},"54":{"position":[[17,7]]}}}],["r&d",{"_index":25,"t":{"44":{"position":[[6,3]]}}}],["rational",{"_index":10,"t":{"24":{"position":[[8,9]]}}}],["releas",{"_index":7,"t":{"20":{"position":[[0,8]]}}}],["research",{"_index":23,"t":{"42":{"position":[[0,8]]},"66":{"position":[[0,8]]}}}],["respect",{"_index":73,"t":{"102":{"position":[[32,7]]}}}],["right",{"_index":47,"t":{"76":{"position":[[25,6]]},"106":{"position":[[20,6]]}}}],["roadmap",{"_index":9,"t":{"24":{"position":[[0,7]]}}}],["secur",{"_index":70,"t":{"102":{"position":[[3,8]]}}}],["setup",{"_index":36,"t":{"58":{"position":[[19,5]]}}}],["stabil",{"_index":19,"t":{"37":{"position":[[21,9]]},"60":{"position":[[21,9]]}}}],["statement",{"_index":43,"t":{"74":{"position":[[19,10]]}}}],["storag",{"_index":3,"t":{"5":{"position":[[20,7]]}}}],["switzerland",{"_index":78,"t":{"104":{"position":[[49,11]]}}}],["system",{"_index":18,"t":{"35":{"position":[[25,6]]},"54":{"position":[[25,6]]}}}],["take",{"_index":72,"t":{"102":{"position":[[24,4]]}}}],["term",{"_index":65,"t":{"90":{"position":[[24,5]]}}}],["test",{"_index":22,"t":{"40":{"position":[[17,7]]},"56":{"position":[[0,7]]},"64":{"position":[[17,7]]}}}],["testnet",{"_index":35,"t":{"58":{"position":[[11,7]]}}}],["third",{"_index":49,"t":{"78":{"position":[[3,5]]},"100":{"position":[[3,5]]},"108":{"position":[[3,5]]}}}],["union",{"_index":77,"t":{"104":{"position":[[39,5]]}}}],["updat",{"_index":26,"t":{"44":{"position":[[10,6]]}}}],["us",{"_index":66,"t":{"90":{"position":[[33,3]]},"98":{"position":[[69,3]]}}}],["websit",{"_index":51,"t":{"78":{"position":[[15,7]]},"90":{"position":[[16,7]]},"98":{"position":[[80,7]]},"102":{"position":[[47,7]]}}}],["week",{"_index":27,"t":{"44":{"position":[[21,4]]}}}],["wire",{"_index":16,"t":{"35":{"position":[[6,6]]},"54":{"position":[[6,6]]}}}]],"pipeline":["stemmer"]}},{"documents":[{"i":2,"t":"Codex is a decentralised data storage platform that provides exceptionally strong censorship resistance and durability guarantees. It serves as the storage layer of the Logos tech stack. Alongside the trustless agreement layer, Nomos, and the communications layer, Waku, it is one of the Logos Collective's foundational projects.","s":"About Codex","u":"/about/","h":"","p":1},{"i":4,"t":"The remote storage landscape is dominated by an increasingly small number of internet powerhouses—Google, Microsoft, Amazon, etc. While these services score highly in terms of user experience and convenience, centralised cloud data storage suffers from the following drawbacks: Censorship Lack of data ownership Breaches and outages High cost Centralised cloud storage providers have an established history of censoring data and, as de facto owners of said data, have the power to do so according to their own standards. Furthermore, centralised platforms have fallen victim to major data breaches and service outages on numerous occasions. Such incidents have created a gap in the market for a decentralised, censorship-resistant alternative. Existing peer-to-peer storage and file-sharing networks address some of these issues—such as robustness in the face of network disruptions, and desirable resistance to censorship. Yet without adequate incentives and strong data durability guarantees, they make for unsuitable foundations upon which to build truly unstoppable applications. Existing decentralised storage solutions purport to improve upon early P2P file-sharing platforms like eDonkey and Gnutella. However, the market still lacks a decentralised storage solution that is efficient in terms of storage and bandwidth usage, while offering performance and durability guarantees comparable to incumbents.","s":"Motive","u":"/about/","h":"#motive","p":1},{"i":6,"t":"Codex began in 2021 to address a need for a durable, decentralised storage layer for the web3 tech stack. The name \"Codex\" refers to an ancient form of book—an allusion to the data storage engine's extremely robust—99.99%—durability guarantees. Codex was announced as a core Logos Collective protocol in June 2023.","s":"Decentralising data storage","u":"/about/","h":"#decentralising-data-storage","p":1},{"i":8,"t":"The Codex project aims to create a decentralised durability engine that allows persisting data in p2p networks. In other words, it allows storing files and data with predictable durability guarantees for later retrieval. WARNING: This project is under active development and is considered pre-alpha. Welcome to the Codex Community! Whether you are interested in building with Codex, contributing to the network, expanding your knowledge, or staying up-to-date with our progress, we have something for everyone. Follow us on X Join the community on Discord","s":"Join the community","u":"/community","h":"","p":7},{"i":10,"t":"What is Codex? Codex is a state-of-the-art, decentralized storage protocol that provides a solution for highly durable data storage with high decentralization, aiming to resist censorship and prevent single points of failure inherent in centralized systems. How is Codex different from centralized storage solutions (eg. Google Cloud)? Unlike centralized systems, Codex is designed to offer data durability, resiliency to cloud failures, and censorship resistance, making it vital for use cases like preserving factual history records. What kind of durability does Codex promise? While no system can promise absolute data loss protection, Codex's architecture, economic incentives, and encoding algorithms aim to provide high data durability with the novel implementation of techniques such as Erasure Coding and Lazy Repair. What is Data Durability? Data Durability means how likely it is that data will stay safe over time. For instance, a storage system with durability of eleven nines (99.999999999%) means there's a very tiny chance (0.0000000001%) of losing data. In simple terms, you might lose only one file out of a million over ten million years. Data Durability is crucial because losing even a little data can be a big problem. Codex uses techniques like erasure coding to keep data safe. This method splits data and stores it in different places. So, if a piece is lost or damaged, the other pieces can be used to recreate the original data. This keeps users' data secure and intact. What is Erasure Coding and how does it relate to data storage in Codex? Erasure Coding is a way to protect data by breaking it into parts, adding extra data for safety, and then spreading these parts across various locations or systems. On Codex, this involves splitting data into pieces, known as \"shards,\" along with extra \"parity shards\" for backup. These parity shards are created using mathematical formulas based on the original data, helping to rebuild the data if some shards go missing or get damaged. This method lets Codex offer consistent and reliable data storage, meaning that as long as a certain number of shards (N out of M) are safe, the entire original data can be perfectly restored, ensuring a high level of data safety. What is Lazy Repair in the context of Codex? Lazy Repair is a method in distributed storage systems for managing data issues. In Codex, if a piece of data (a shard) is lost or damaged, the system doesn't fix it right away. It waits until there's enough damage to make repair worthwhile. This is efficient because it saves resources by not addressing small problems that don't harm the overall data. The system only repairs when the number of good shards drops too low, balancing resource use with keeping data safe and available. Is Codex part of Logos? Yes, Codex is expected to serve as the storage pillar of Logos, the protocol protecting Logos organizational data, aligning with the broader Logos initiative. How does Codex compare to other decentralized storage solutions currently out on the market? Codex distinguishes itself from other storage solutions in the market through several key features: having an Advanced Marketplace and Data Distribution, and using SNARKS for Data Loss Detection. How do the Advanced Marketplace and Data Distribution work? Codex features an advanced marketplace that promotes high levels of decentralization and efficient data distribution. This structure prevents the concentration of data in a few large nodes, enhancing the efficiency of data repair and retrieval. In contrast, other protocols design their systems to create \"supernodes\". How does Codex use SNARKS for Data Loss Detection? Codex incorporates succinct non-interactive arguments of knowledge (SNARKS) for efficient and reliable data loss detection. Storage Providers (SPs) respond to challenges by sending proofs to Proof Aggregators, who verify and post these proofs to the blockchain. If an SP fails to prove possession of data or sends invalid proof, their collateral is slashed, providing an economic incentive to ensure data durability. Can Codex be used for cold storage by blockchain networks? Yes, Codex is discussing with various blockchain projects to preserve their full chain state and history in a way that resists censorship and does not require full history to be stored locally by every node. Is Codex currently operational? Codex is currently undergoing extensive internal testing. The upcoming public testnet is planned for Q1 2024. What types of data can be stored on Codex? Codex can handle various types of data but is particularly suited for mission-critical history and state information for Web3 applications that need to remain unaltered, and accessible. Will every node be required to store full data history in Codex? No, the design allows for storing vast amounts of data without requiring every node to store the full history. What are all the different types of nodes in Codex’s network? Codex consists of a p2p network of Storage Nodes, Aggregator Nodes, Caching Nodes, and Client Nodes. What is a Storage Node? Storage nodes provide long-term reliable storage. For a storage node to operate it needs to stake a collateral proportional to the amount of data it's willing to store. Once the collateral has been staked and the node begins to store data, it needs to periodically provide proof of data possession. If a node fails to provide proof in time, it is penalized with a portion of its stake; if the node fails to provide proof several times in a row, it loses the entirety of the stake. What is an Aggregator Node? Aggregator nodes are in charge of collecting, validating, and submitting proofs to an adjudicator contract which rewards and penalizes storage and other validator nodes. A validator node also needs to stake collateral to be able to participate in the validation process. Note that we don't use the term \"adjudicator contract\" in the literal sense of an Ethereum contract. We use it to indicate anything that executes on a consensus engine. What is a Caching Node? Bandwidth incentives allow anyone to operate as a caching node, profiting only from caching and serving popular content. We expect this to have the emergent property of an organic CDN, where nodes with spare bandwidth but limited or unreliable storage can collectively scale the network depending on current demands. Any node can become a caching node for any period, even ephemeral nodes. What is a Client Node? Client Nodes engage with other nodes to store, find, and retrieve data from the network. We expect regular nodes to be the most common type of node in the Codex Network. These will consume services offered by other nodes in exchange for payments. A regular node can also be a caching node by storing previously consumed data that other nodes can retrieve from it. This allows nodes to offset some of the cost of participating in the network and it's expected to allow the majority of nodes to participate on an almost free basis after an initial entree fee. Unlike the other types of nodes, we expect the regular nodes to have intermittent up-time as they are running on personal computers and mobile devices. Can I build my application on top of Codex? Not yet. Stay tuned for more updates from the Codex project for when you can utilize your application on top of the Codex network. Does Codex have a token? No Codex token has been issued yet. Please be wary of impersonators claiming the issuance of Codex tokens or any form of Codex airdrop. What role will the Codex token have in the network? The Codex token is a utility token, serving as collateral for Storage Providers and a means of compensation in the storage contracts. Can I or would I be able to use my storage to participate in the Codex network? Yes. The testnet phase is set for Q1 2024, stay tuned. Can I use Codex right now? Not yet. However, you will be able to participate in the testnet phase of Q1 2024. Stay tuned.","s":"Frequently asked questions","u":"/about/faq","h":"","p":9},{"i":12,"t":"Codex is building a durable data storage engine that is fully decentralised, providing corruption and censorship resistance to web3 applications. It innately protects network participants by giving hosts plausible deniability over the data they store, and clients provable durability guarantees—up to 99.99%—while remaining storage and bandwidth efficient. These four key features combine to differentiate Codex from existing projects in the decentralised storage niche: Erasure coding: Provides efficient data redundancy, which increases data durability guarantees. ZK-based proof-of-retrievability: For lightweight data durability assurances. Lazy repair mechanism: For efficient data reconstruction and loss prevention. Incentivization: To encourage rational behaviour, widespread network participation, and the efficient provision of finite network resources.","s":"Description and architecture","u":"/about/architect","h":"","p":11},{"i":14,"t":"Incentivization mechanisms are one of the key pieces missing from traditional file-sharing networks. Codex believes that a robust marketplace-based incentive structure will ensure wide participation across the node types detailed below. The development of an adequate incentive structure is driven by the following goals: Supply and demand to encourage optimum network resource usage. Increase participation by enabling nodes to utilise their competitive advantages to maximise profits. Prevent spam and discourage malicious participation. Although still to be finalised, the Codex incentive structure will involve a marketplace of participants who want to store data, and those provisioning storage posting collateral, with the latter bidding on open storage contracts. This structure aims to ensure that participants' incentives align, resulting in Codex functioning as intended.","s":"Incentivized decentralisation","u":"/about/architect","h":"#incentivized-decentralisation","p":11},{"i":16,"t":"Codex is composed of multiple node types, each taking a different role in the network's operation. Similarly, the hardware demands for each node type vary, enabling those operating resource-restricted devices to participate. Storage nodes As Codex's long-term reliable storage providers, storage nodes stake collateral based on the collateral posted on the request side of contracts, and the number of slots that a contract has. This is tied to the durability demanded by the user. Failure to provide periodic proof of data possession results in slashing penalties. Aggregator Node A method for off-loading erasure coding, proof generation and proof aggregation by a client node with low-resources, currently a WIP and will be part of subsequent Codex release Q2/Q4 next year. Client nodes Client nodes make requests for other nodes to store, find, and retrieve data. Most of the Codex network will be Client nodes, and these participants can double as caching nodes to offset the cost of the network resources they consume. When a node commits to a storage contract and a user uploads data, the network will proactively verify that the storage node is online and that the data is retrievable. Storage nodes are then randomly queried to broadcast proofs of data possession over an interval corresponding to the contract duration and 9's of retrievability guarantee the protocol provides. If the storage node sends invalid proofs or fails to provide them in time, the network evicts the storage node from the slot, and the slot will become available for the first node that generates a valid proof for that slot. When the contract is reposted, some of the faulty node's collateral pays for the new storage node's bandwidth fees. Erasure coding complements the repair scheme by allowing the reconstruction of the missing chunks from data in other slots within the same storage contract hosted by faultless storage nodes. Read the Codex whitepaper","s":"Network architecture","u":"/about/architect","h":"#network-architecture","p":11},{"i":18,"t":"Codex Senior Full-Stack Engineer Remote (Worldwide) Students Program Codex Remote (Worldwide) Zero Knowledge Researcher - Codex Remote (Worldwide)","s":"Current job openings","u":"/join-us","h":"","p":17},{"i":21,"t":"Codex is currently in its first proof of concept iteration, codenamed Dagger. Before Katana (its forthcoming testnet release, expected before the end of 2023) we aim to deliver two additional PoC clients, Scimitar and Longsword. Dagger: Codex's first PoC and current version. Scimitar: The PoC-2 client will implement fast erasure coding, the marketplace, and partial durability guarantees—expected end of Q3 2023. Katana: Codex v1 will offer SNARK-based remote auditing","s":"Releases","u":"/about/roadmap","h":"#releases","p":19},{"i":23,"t":"The Codex team's subgroups are working on the major milestones detailed below to deliver Codex with the qualities described: Testing: Develop and maintain testnet and devnet Client: Release Scimitar Develop initial data repair and ZK proving scheme Release Longsword Deploy Codex v1.0 Marketplace: Develop the marketplace for integration in PoC-2. Develop the marketplace bandwidth incentivization structure. Research: Write the initial ZK proving scheme Conduct Data Availability Sampling research with the Ethereum Foundation","s":"Milestones","u":"/about/roadmap","h":"#milestones","p":19},{"i":25,"t":"We believe the above roadmap to be the most logical approach to building a data storage engine with stronger durability guarantees and resistance to censorship than currently offered by Codex's centralised or decentralised counterparts. First, we must establish a mechanism through which users can initiate a contract with a storage provider to host their data. Then, we can add erasure coding, required for efficient redundancy and auditing. Next, the system will need a mechanism to prove the hosts still have data available. Finally, repairs must be incentivized. Naturally, each layer of sophistication requires testing for economic and technical feasibility. Contribute to Codex","s":"Roadmap rationale","u":"/about/roadmap","h":"#roadmap-rationale","p":19},{"i":27,"t":"Codex is developed by highly experienced protocol and software developers, distributed systems experts, and ZK-cryptography researchers with backgrounds in academia, mainstream tech, and web3. The contributors working on Codex are split into the subgroups below: Codex general Codex marketplace Codex client Codex research Codex is looking for more contributors to help build the network. Check out the open positions linked below. As an open-source public goods project Codex also welcomes community contributions. Please check out our Github repo here. Work with us","s":"Core contributors","u":"/about/team","h":"","p":26},{"i":29,"t":"The Codex team continues to make progress with various initiatives to wrap up the demo for the Q1/Q2 public testnet release. An internal testnet has been running for the past few weeks and has been used to test the latest version of Codex and can be accessed using the Codex Testnet Starter documentation. Ongoing and new lines of research and development will soon begin in preparation for the next version of Codex used for the mainnet release.. Here are the updates from different team members and their ongoing work.","s":"Codex R&D Update for Week of Jan 12, 2024","u":"/news","h":"","p":28},{"i":31,"t":"Development is currently broken into three distinct teams: Client, Testing, and Infrastructure Marketplace Research The different teams have actively moving on various fronts. The following are their team updates to various ongoing Epics.","s":"Development","u":"/news","h":"","p":28},{"i":34,"t":"Completed: Filed issue for adding Atlas / non-Nimble support for packages Start working on Atlas command changes Ongoing: Create a repo as a place to start implementing some core async-threading tools for Chronos like worker pool & disk io on top of the ThreadSignalPtr primitive plans to support refc & orc","s":"Epic: Nim Improvements","u":"/news","h":"#epic-nim-improvements","p":28},{"i":36,"t":"Completed: Wrapped ark-circom in a C FFI via: nim-circom-compat and circom-compat-ffi Ongoing: Integration of codex-storage-proofs-circuits with a PR in nim-codex","s":"Epic: Wiring the Proving System","u":"/news","h":"#epic-wiring-the-proving-system","p":28},{"i":38,"t":"Completed: Updated profiler branch for debugging Ported the profiler to Chronos V4 Wrote separate test runner for two client test to try to figure out the origin of a file size bug which magically disappeared Ongoing: Finish work to take down draft flag from PR Expiry per dataset Write tests for PR Safe block deletion (with ref count) Look into the CI/docker packaging/local build tooling for Waku and Nimbus as part of build improvements PR Chronos V4 branch Pinned versions for Chronos and json-rpc","s":"Epic: Improve Client Stability","u":"/news","h":"#epic-improve-client-stability","p":28},{"i":41,"t":"Completed: Rebased multinode integration test refactor which had two failing tests due to the erasure coding changes Rebased Marketplace integration test suite Added support for Result types using formatIt for logging proxy Finished the verifier contract Deployed a dummy verifier on local networks for testing Finished updates to nim-ethers, all tests passing, including in Nim v2 Fixed an issue in the nim-ethers json-rpc update Derived Signers could not access the derived getAddress and sendTransaction when their async raises were updated with SignerError Ongoing: Continue work on updating nim-ethers to support json-rpc breaking changes Continue work on supporting json-rpc breaking changes and pulling out utils/json to its own lib Integrate contract changes into nim-codex Look into removing wait For in integration tests Review and clean up nim-ethers changes Try to figure out a cleaner way to handle exceptions instead of catching all CatchableErrors Start tweaking the nim-json api to normalize both serialize and deserialize pragmas, with modes: OptOut, OptIn, and Strict WIP on adding PATCH call for Availabilities","s":"Epic: End-to-end Testing","u":"/news","h":"#epic-end-to-end-testing","p":28},{"i":43,"t":"2024 R&D Goals Proving system and aggregation improvements (folding or lookups) Aggregator/validator design DHT improvements Tokenomics and incentive design Bandwidth incentives Dynamic data (appendable data) Completed: Frobenius endomorphism & pairing implementation Review the Solidity Groth16 verifier Ongoing: DAS simulator improvements to cover more diffusion models Start DAS sample query mechanism design Proof recursion ideation","s":"Research","u":"/news","h":"","p":28},{"i":45,"t":"The Codex dev team is moving forward rapidly. The organisation’s development efforts mainly focus on launching the beta testnet by the end of the year. Following are some recent research and development highlights.","s":"Codex R&D Update for Week of December 11, 2023","u":"/news","h":"","p":28},{"i":47,"t":"Development is currently broken into three distinct sub-teams: Client, Testing, and Infrastructure Marketplace Research Below are summaries of each sub-team.","s":"Development","u":"/news","h":"","p":28},{"i":49,"t":"For the client, the team is focused on these primary tasks: block merkelization, Poseidon2 Nim-poseidon2 implementation, and wiring the proving system. The client is the software that runs on the user’s local machine. It has all the components to handle the endpoints integration, data, block management, erasure coding, and interactions with the marketplace. See currently exposed endpoints for the Codex client (conform to OpenAPI specification) at: https://api.codex.storage Active work is ongoing to integrate the above Codex client endpoints to be accessible via the Codex frontend written in React here: https://github.com/codex-storage/codex-frontend","s":"Client","u":"/news","h":"","p":28},{"i":51,"t":"For block merkelization, the team is focused on reducing metadata overhead. They are optimising the structure for handling and indexing block data. This effort requires changes in block Merkelization. These are the most recent efforts, which can be publicly viewed on GitHub: Merkelization concrete PR (merged) https://github.com/codex-storage/nim-codex/pull/566 Working on nim-datastore to support atomic updates (in review) https://github.com/codex-storage/nim-datastore/pull/58 Working on safe block deletion - using ref-counting Continuing work for #566 to integrate with Poseidon2 and the proving system","s":"Epic: Block Merkelization","u":"/news","h":"#epic-block-merkelization","p":28},{"i":53,"t":"Poseidon2 is a faster version of the original Poseidon hash function used in zero-knowledge systems (zk). Nim-Poseidon2 is the Nim implementation the Codex team is developing to work efficiently and effectively with the Codex client. Merged outstanding PRs https://github.com/codex-storage/nim-poseidon2/pull/7 https://github.com/codex-storage/nim-poseidon2/pull/8 https://github.com/codex-storage/nim-poseidon2/pull/9 Added keyed compress https://github.com/codex-storage/nim-poseidon2/pull/10 Updated Merkle root with extra bits to mitigate possible attacks https://github.com/codex-storage/nim-poseidon2/pull/11 Fixed compilation problem with Constantine and secp256k1 https://github.com/codex-storage/nim-codex/pull/625","s":"Epic: nim-poseidon2","u":"/news","h":"#epic-nim-poseidon2","p":28},{"i":55,"t":"The proving system comprises a SNARK circuit that generates the proof. A Storage Provider must also submit the marketplace contract to prove it faithfully stores the associated slot data. Additional components, such as the trusted setup ceremony, hash functions, and the multiple manifests generated for different purposes, are included in the proving system. The team is working on ensuring the proving system is built out and functions to successfully remote audit the slot data by validators. These stories represent the most recent efforts: Nim reference implementation of the proof input generation (WIP) https://github.com/codex-storage/codex-storage-proofs-circuits/tree/master/reference/nim/proof_input Ongoing implementation of Groth16 (WIP) https://github.com/codex-storage/nim-groth16","s":"Epic: Wiring the Proving System","u":"/news","h":"#epic-wiring-the-proving-system-1","p":28},{"i":57,"t":"The testing and infrastructure group is preparing to deploy tens or hundreds of nodes and efficiently monitor the activity. This is crucial for a successful launch of the testnet. The following are the epics and stories of development for this process. The main areas of concern are ensuring the testnet is set up and configured properly. It will also include ensuring the client maintains a suitable level of stability.","s":"Testing and Infrastructure","u":"/news","h":"","p":28},{"i":59,"t":"Configure TCP/UDP port forwarding for Testnet deployment Configure Pods placement for D/C-Tests runners and tests workload Check available options to build a service to get Codex Public IP for announcement Deploy Codex Bootstrap nodes for Testnet Deploy Geth Bootstrap nodes for Testnet","s":"Epic: 2023 Testnet setup","u":"/news","h":"#epic-2023-testnet-setup","p":28},{"i":61,"t":"Ongoing debugging of performance and stability issues in the testing environment Tooling developed Elastic search log retrieval https://github.com/codex-storage/logtools https://vimeo.com/884370956/e8a32a58c8?share=copy DHT fixes related to performance and stability Fix: queue messages when there is no encryption key Fix: arrive at working keys in case of simultaneous cross-connect Fix timeout and delete","s":"Epic: Improve Client Stability","u":"/news","h":"#epic-improve-client-stability-1","p":28},{"i":63,"t":"The marketplace is a smart contract deployed on a blockchain. This smart contract defines all the logic required for users to ask for storage, store collaterals, assign storage nodes to user datasets, settle payments, deal with storage failures, storage provider proof issuance, and all the contract interactions.","s":"Marketplace","u":"/news","h":"","p":28},{"i":65,"t":"Working on integration testing cleanup (WIP) https://github.com/codex-storage/nim-codex/pull/607 Debugging various issues for end-to-end testing","s":"Epic: End-to-end Testing","u":"/news","h":"#epic-end-to-end-testing-1","p":28},{"i":67,"t":"Current research is mostly halted due to focus on implementing past research for the imminent launch of the testnet. Ongoing efforts include: Near-term: Ongoing “Groth16 prover” research and analysis. Details for the functionality of the current proof system Hash and Merkle tree conventions to make them safe Continuing research for Codex’s use of erasure coding Long-term: Figuring out how to aggregate proofs (proof compression) for proving system Determining the correct proof system for Codex","s":"Research","u":"/news","h":"","p":28},{"i":69,"t":"On this page Last updated: 14 February 2024 These website terms of use ('Website Terms of Use') are entered into by you and us, and they govern your access and use of this Website, including any content and functionality contained in the Website. It is your responsibility to read the Website Terms of Use carefully before your use of the Website and your use of the Website means you have agreed to be bound and comply with these Website Terms of Use. If you do not agree with these Website Terms of Use, you must not access or use the Website.","s":"Terms of Use","u":"/terms","h":"","p":68},{"i":71,"t":"For the purposes of these Website Terms of Use, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at: Logos Collective Association c/o PST Consulting GmbH Baarerstrasse 10 6300 Zug Switzerland Whenever we refer to “Logos”, “we”, “us” or any other similar references, we are referring to the Logos Collective Association.","s":"1) Who we are","u":"/terms","h":"#1-who-we-are","p":68},{"i":73,"t":"The Website is provided by us on an ‘as is’ basis and you use the Website at your own sole discretion and risk. We disclaim all warranties of any kind, express or implied, including without limitation the warranties of merchantability, fitness for a particular purpose, and non-infringement of intellectual property or other violation of rights. We do not warrant or make any representations concerning the completeness, accuracy, legality, utility, reliability, suitability or availability of the use of the Website, the content on this Website or otherwise relating to the Website, such content or on any sites linked to this site.These disclaimers will apply to the maximum extent permitted by applicable law. We make no claims that the Website or any of its content is accessible, legally compliant or appropriate in your jurisdiction. Your access or use of the Website is at your own sole discretion and you are solely responsible for complying with any applicable local laws. The content herein or as accessible through this website is intended to be made available for informational purposes only and should not be considered as creating any expectations or forming the basis of any contract, commitment or binding obligation with us. No information herein shall be considered to contain or be relied upon as a promise, representation, warranty or guarantee, whether express or implied and whether as to the past, present or the future in relation to the projects and matters described herein. The information contained herein does not constitute financial, legal, tax, or other advice and should not be treated as such. Nothing in this Website should be construed by you as an offer to buy or sell, or soliciting any offer to buy or sell any tokens or any security.","s":"2) Disclaimers","u":"/terms","h":"#2-disclaimers","p":68},{"i":75,"t":"The Website may also contain forward-looking statements that are based on current expectations, estimates, forecasts, assumptions and projections about the technology, industry and markets in general. The forward looking statements, which may include statements about the roadmap, project descriptions, technical details, functionalities, features, the development and use of tokens by projects, and any other statements related to such matters or as accessible through this website are subject to a high degree of risk and uncertainty. The forward looking statements are subject to change based on, among other things, market conditions, technical developments, and regulatory environment. The actual development and results, including the order and the timeline, might vary from what’s presented. The information contained herein is a summary and does not purport to be accurate, reliable or complete and we bear no responsibility for the accuracy, reliability or completeness of information contained herein. Because of the high degree of risk and uncertainty described above, you should not place undue reliance on any matters described in this website or as accessible through this website. While we aim to update our website regularly, all information, including the timeline and the specifics of each stage, is subject to change and may be amended or supplemented at any time, without notice and at our sole discretion.","s":"3) Forward looking statements","u":"/terms","h":"#3-forward-looking-statements","p":68},{"i":77,"t":"The Website and its contents are made available under Creative Commons Attribution 4.0 International license (CC-BY 4.0). In essence this licence allows users to copy, modify and distribute the content in any format for any purpose, including commercial use, subject to certain requirements such as attributing us. For the full terms of this licence, please refer to the following website: https://creativecommons.org/licenses/by/4.0/.","s":"4) Intellectual property rights","u":"/terms","h":"#4-intellectual-property-rights","p":68},{"i":79,"t":"To the extent the Website provides any links to a third party website, then their terms and conditions, including privacy policies, govern your use of those third party websites. By linking such third party websites, Status does not represent or imply that it endorses or supports such third party websites or content therein, or that it believes such third party websites and content therein to be accurate, useful or non-harmful. We have no control over such third party websites and will not be liable for your use of or activities on any third party websites accessed through the Website. If you access such third party websites through the Website, it is at your own risk and you are solely responsible for your activities on such third party websites.","s":"5) Third-party website links","u":"/terms","h":"#5-third-party-website-links","p":68},{"i":81,"t":"We will not be held liable to you under any contract, negligence, strict liability, or other legal or equitable theory for any lost profits, cost of procurement for substitute services, or any special, incidental, or consequential damages related to, arising from, or in any way connected with these Website Terms of Use, the Website, the content on the Website, or your use of the Website, even if we have been advised of the possibility of such damages. In any event, our aggregate liability for such claims is limited to EUR 100 (one hundred Euros). This limitation of liability will apply to the maximum extent permitted by applicable law.","s":"6) Limitation of liability","u":"/terms","h":"#6-limitation-of-liability","p":68},{"i":83,"t":"You shall indemnify us and hold us harmless from and against any and all claims, damages and expenses, including attorneys’ fees, arising from or related to your use of the Website, the content on the Website, including without limitation your violation of these Website Terms of Use.","s":"7) Indemnity","u":"/terms","h":"#7-indemnity","p":68},{"i":85,"t":"We may modify or replace any part of this Website Terms of Use at any time and without notice. You are responsible for checking the Website periodically for any changes. The new Website Terms of Use will be effective immediately upon its posting on the Website.","s":"8) Modifications","u":"/terms","h":"#8-modifications","p":68},{"i":87,"t":"Swiss law governs these Website Terms of Use and any disputes between you and us, whether in court or arbitration, without regard to conflict of laws provisions.","s":"9) Governing law","u":"/terms","h":"#9-governing-law","p":68},{"i":89,"t":"In these terms, “dispute” has the broadest meaning enforceable by law and includes any claim you make against or controversy you may have in relation to these Website Terms of Use, the Website, the content on the Website, or your use of the Website. We prefer arbitration over litigation as we believe it meets our principle of resolving disputes in the most effective and cost effective manner. You are bound by the following arbitration clause, which waives your right to litigation and to be heard by a judge. Please note that court review of an arbitration award is limited. You also waive all your rights to a jury trial (if any) in any and all jurisdictions. If a (potential) dispute arises, you must first use your reasonable efforts to resolve it amicably with us. If these efforts do not result in a resolution of such dispute, you shall then send us a written notice of dispute setting out (i) the nature of the dispute, and the claim you are making; and (ii) the remedy you are seeking. If we and you are unable to further resolve this dispute within sixty (60) calendar days of us receiving this notice of dispute, then any such dispute will be referred to and finally resolved by you and us through an arbitration administered by the Swiss Chambers’ Arbitration Institution in accordance with the Swiss Rules of International Arbitration for the time being in force, which rules are deemed to be incorporated herein by reference. The arbitral decision may be enforced in any court. The arbitration will be held in Zug, Switzerland, and may be conducted via video conference virtual/online methods if possible. The tribunal will consist of one arbitrator, and all proceedings as well as communications between the parties will be kept confidential. The language of the arbitration will be in English. Payment of all relevant fees in respect of the arbitration, including filing, administration and arbitrator fees will be in accordance with the Swiss Rules of International Arbitration. Regardless of any applicable statute of limitations, you must bring any claims within one year after the claim arose or the time when you should have reasonably known about the claim. You also waive the right to participate in a class action lawsuit or a classwide arbitration against us.","s":"10) Disputes","u":"/terms","h":"#10-disputes","p":68},{"i":91,"t":"These Website Terms of Use cover the entire agreement between you and us regarding the Website and supersede all prior and contemporaneous understandings, agreements, representations and warranties, both written and oral, with respect to the Website. The captions and headings identifying sections and subsections of these Website Terms of Use are for reference only and do not define, modify, expand, limit, or affect the interpretation of any provisions of these Website Terms of Use. If any part of these Website Terms of Use is held invalid or unenforceable, that part will be severable from these Website Terms of Use, and the remaining portions will remain in full force and effect. If we fail to enforce any of these Website Terms of Use, that does not mean that we have waived our right to enforce them. If you have any specific questions about these Website Terms of Use, please contact us at legal@free.technology. This document is licensed under CC-BY-SA.","s":"11) About these Website Terms of Use","u":"/terms","h":"#11-about-these-website-terms-of-use","p":68},{"i":93,"t":"We take security seriously at Codex and across the Institute of Free Technology and its affiliates. Please report any security incidents via security@free.technology.","s":"Security","u":"/security","h":"","p":92},{"i":95,"t":"On this page Last updated: 9 February 2024 This Privacy Policy is intended to inform users of our approach to privacy in respect of this website (\"Website\"). In this regard, if you are visiting our Website, this Privacy Policy applies to you.","s":"Privacy Policy","u":"/privacy-policy","h":"","p":94},{"i":97,"t":"For the purposes of this Privacy Policy and the collection and processing of personal data as a controller, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at Logos Collective Association c/o PST Consulting GmbH Baarerstrasse 10 6300 Zug Switzerland Whenever we refer to “Logos”, “we” or other similar references, we are referring to the Logos Collective Association.","s":"1) Who we are","u":"/privacy-policy","h":"#1-who-we-are","p":94},{"i":99,"t":"We aim to limit the collection and collection and processing of personal data from users of the Website. We only collect and process certain personal data for specific purposes and where we have the legal basis to do so under applicable privacy legislation. We will not collect or process any personal data that we don’t need and where we do store any personal data, we will only store it for the least amount of time needed for the indicated purpose. In this regard, we collect and process the following personal data from your use of the Website: IP address: As part of such use of the Website and from our use of Fathom Analytics, we briefly process your IP address but we have no way of identifying you. We however have a legitimate interest in processing such IP addresses to ensure the technical functionality and enhance the security measures of the Website. This IP address is not stored by us over time. Fathom Analytics: We note that we make use of Fathom Analytics, which you can read more about here: https://usefathom.com/. In short, Fathom Analytics is an alternative to Google Analytics, that doesn’t compromise visitor privacy for data. Fathom Analytics collects trends and insights, not personal details about specific website visitors. Fathom Analytics offers simple traffic insights such as top pages, top referrers, bounce rate, and average time people spend on a site.","s":"2) We limit the collection and processing of personal data from your use of the Website","u":"/privacy-policy","h":"#2-we-limit-the-collection-and-processing-of-personal-data-from-your-use-of-the-website","p":94},{"i":101,"t":"In addition to our limited and collection of personal data, third parties may collect or process personal data as a result of the Website making use of certain features or to provide certain content. To the extent you interact with such third party content or features, their respective privacy policies will apply. We would however like to draw your attention to the following: Youtube: The Website may embed videos from Youtube, a service provided by Google LLC, using Youtube’s privacy-enhanced mode. When you interact with such videos, Youtube may place cookies on your personal device. The cookies do not directly identify individual users and YouTube will not store information to personalise your experience unless you are logged in to a Google account. We do not have any control over these cookies set by Youtube and it is recommended that you review YouTube’s embedding videos information page.","s":"3) Third party processing of personal data","u":"/privacy-policy","h":"#3-third-party-processing-of-personal-data","p":94},{"i":103,"t":"As a general approach, we take data security seriously and we have implemented a variety of security measures on the Website to maintain the safety of your personal data when you submit such information to us.","s":"4) Security measures we take in respect of the Website","u":"/privacy-policy","h":"#4-security-measures-we-take-in-respect-of-the-website","p":94},{"i":105,"t":"We are obliged to protect the privacy of personal data that you may have submitted in the unlikely event that we export your personal data to places outside the European Union or Switzerland. This means that personal data will only be processed in countries or by parties that provide an adequate level of protection as deemed by Switzerland or the European Commission. Otherwise, we will use other forms of protections, such as specific forms of contractual clauses to ensure such personal data is provided the same protection as required in Switzerland or Europe. In any event, the transmission of personal data outside the European Union and Switzerland will always occur in conformity with applicable privacy legislation.","s":"5) Exporting data outside the European Union and Switzerland","u":"/privacy-policy","h":"#5-exporting-data-outside-the-european-union-and-switzerland","p":94},{"i":107,"t":"As explained in this Privacy Policy, we limit our collection and processing of your personal data wherever possible. Nonetheless, you still have certain choices and rights in respect of the personal data which we do collect and process. As laid out in relevant privacy legislation, you have the right to: Ask us to correct or update your personal data (where reasonably possible); Ask us to remove your personal data from our systems; Ask us for a copy of your personal data, which may also be transferred to another data controller at your request; Withdraw your consent to process your personal data (only if consent was asked for a processing activity), which only affects processing activities that are based on your consent and doesn’t affect the validity of such processing activities before you have withdrawn your consent; Object to the processing of your personal data; and File a complaint with the Federal Data Protection and Information Commissioner (FDPIC), if you believe that your personal data has been processed unlawfully.","s":"6) Your choices and rights","u":"/privacy-policy","h":"#6-your-choices-and-rights","p":94},{"i":109,"t":"On this Website, you may come across links to third party websites. These third party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these third party websites.","s":"7) Third party links","u":"/privacy-policy","h":"#7-third-party-links","p":94},{"i":111,"t":"We may modify or replace any part of this Privacy Policy at any time and without notice. Please check the Website periodically for any changes. The new Privacy Policy will be effective immediately upon its posting on our Website.","s":"8) This Privacy Policy might change","u":"/privacy-policy","h":"#8-this-privacy-policy-might-change","p":94},{"i":113,"t":"To the extent that you have any questions about the Privacy Policy, please contact us at legal@free.technology. This document is licensed under CC-BY-SA.","s":"9) Contact information","u":"/privacy-policy","h":"#9-contact-information","p":94}],"index":{"version":"2.3.9","fields":["t"],"fieldVectors":[["t/2",[0,1.24,1,2.79,2,1.302,3,2.581,4,4.028,5,1.943,6,4.69,7,4.028,8,3.006,9,3.006,10,2.298,11,2.442,12,4.028,13,4.948,14,3.784,15,3.592,16,3.592,17,4.69,18,4.69,19,4.028,20,4.69,21,3.266,22,4.028,23,3.006,24,4.69,25,3.592,26,2.605]],["t/4",[1,2.845,2,1.659,3,2.71,4,3.424,5,1.101,7,2.283,8,3.066,9,2.556,10,1.954,11,2.076,25,2.036,27,1.852,28,2.659,29,2.659,30,2.659,31,2.283,32,2.036,33,2.659,34,2.659,35,2.659,36,2.659,37,2.659,38,2.556,39,2.659,40,2.036,41,1.488,42,1.303,43,2.283,44,2.659,45,4.108,46,3.424,47,2.659,48,1.229,49,2.659,50,3.986,51,2.659,52,3.986,53,3.986,54,2.036,55,1.704,56,2.283,57,2.283,58,2.659,59,2.659,60,2.659,61,2.659,62,2.659,63,2.283,64,2.659,65,2.659,66,2.659,67,2.659,68,2.036,69,2.659,70,2.659,71,0.992,72,2.283,73,1.704,74,2.659,75,3.053,76,2.283,77,3.424,78,3.986,79,2.076,80,3.424,81,2.076,82,1.582,83,2.659,84,2.283,85,2.659,86,2.659,87,2.659,88,1.385,89,2.036,90,1.852,91,1.303,92,2.659,93,2.777,94,1.385,95,2.659,96,2.659,97,1.385,98,3.424,99,2.283,100,2.036,101,2.659,102,2.036,103,2.659,104,2.659,105,1.852,106,1.582,107,1.582,108,2.283,109,1.582,110,2.283,111,2.283,112,2.659]],["t/6",[0,1.697,1,2.748,2,1.283,3,2.557,10,2.264,11,2.406,13,3.538,14,2.962,15,3.538,16,3.538,82,2.748,113,4.62,114,4.62,115,3.218,116,3.218,117,4.62,118,2.566,119,4.62,120,3.218,121,4.62,122,4.62,123,4.62,124,4.62,125,4.62,126,3.968,127,3.968,128,2.566,129,3.218,130,4.62,131,3.968]],["t/8",[0,1.592,1,2.408,2,1.49,10,2.63,11,2.108,21,3.738,26,2.981,48,1.871,73,2.594,79,2.108,81,2.795,94,2.108,102,3.1,132,2.408,133,2.594,134,3.738,135,4.047,136,4.047,137,1.983,138,4.047,139,4.047,140,2.594,141,4.047,142,2.408,143,2.248,144,1.677,145,3.476,146,4.047,147,4.047,148,3.476,149,3.1,150,3.476,151,3.1,152,3.476,153,2.819,154,3.476,155,2.594,156,4.047,157,3.476,158,4.047,159,4.047,160,4.047,161,4.047,162,4.047]],["t/10",[0,1.655,2,1.812,3,2.368,5,1.534,8,1.147,9,1.147,10,1.815,12,1.536,14,1.422,23,0.45,26,0.716,31,0.602,32,0.987,38,0.45,40,0.537,41,0.668,42,0.344,46,1.107,54,1.699,55,0.45,57,2.509,68,0.537,71,0.262,73,0.826,75,0.987,79,0.365,81,2.037,82,0.417,88,0.365,90,1.246,91,0.632,94,0.365,97,0.932,98,1.906,102,0.537,106,1.32,107,0.767,109,1.064,111,0.602,115,1.545,116,0.488,120,0.488,128,0.716,129,1.246,132,0.767,133,0.45,134,1.545,137,1.917,140,1.147,153,0.488,154,1.906,155,0.45,163,1.789,164,0.701,165,2.219,166,0.987,167,0.701,168,0.701,169,0.987,170,0.701,171,1.789,172,1.712,173,1.147,174,0.701,175,0.537,176,1.107,177,1.536,178,0.701,179,0.701,180,1.13,181,0.602,182,1.289,183,0.701,184,0.701,185,0.602,186,1.107,187,0.701,188,1.906,189,1.246,190,0.488,191,0.701,192,1.107,193,0.701,194,0.701,195,0.701,196,0.344,197,1.289,198,1.156,199,1.156,200,1.536,201,1.873,202,1.422,203,1.545,204,0.716,205,1.232,206,0.701,207,0.701,208,0.701,209,0.701,210,1.289,211,0.701,212,0.701,213,0.701,214,0.701,215,2.219,216,0.602,217,0.932,218,1.289,219,0.602,220,0.488,221,0.602,222,1.107,223,0.701,224,0.701,225,1.107,226,1.789,227,1.37,228,1.107,229,0.45,230,1.906,231,1.107,232,1.699,233,0.701,234,1.37,235,0.45,236,0.701,237,0.389,238,0.898,239,0.602,240,0.993,241,0.488,242,1.107,243,1.107,244,0.701,245,1.246,246,0.701,247,0.602,248,0.602,249,3.212,250,0.701,251,1.289,252,0.701,253,0.701,254,0.701,255,0.389,256,0.602,257,0.701,258,0.701,259,0.537,260,0.701,261,1.107,262,1.246,263,0.987,264,0.45,265,0.701,266,0.701,267,0.602,268,0.701,269,0.701,270,0.767,271,0.987,272,0.701,273,1.699,274,0.602,275,0.826,276,0.701,277,0.488,278,0.826,279,0.701,280,0.602,281,0.701,282,0.701,283,0.701,284,0.701,285,0.898,286,1.289,287,0.602,288,0.701,289,0.602,290,0.701,291,0.602,292,0.701,293,0.365,294,1.789,295,1.806,296,0.701,297,0.701,298,0.602,299,0.701,300,0.898,301,1.087,302,0.701,303,0.701,304,0.417,305,1.107,306,0.45,307,0.898,308,0.701,309,1.789,310,0.782,311,1.37,312,1.789,313,0.276,314,0.701,315,0.488,316,0.701,317,0.602,318,0.701,319,3.723,320,0.537,321,0.701,322,0.701,323,0.602,324,0.701,325,0.488,326,0.488,327,0.701,328,1.289,329,0.701,330,0.701,331,0.987,332,1.701,333,1.422,334,0.488,335,0.45,336,1.536,337,1.246,338,0.365,339,1.107,340,0.537,341,1.806,342,0.602,343,0.701,344,0.701,345,1.545,346,0.701,347,1.064,348,0.488,349,1.536,350,0.701,351,0.701,352,0.488,353,0.291,354,0.701,355,0.488,356,0.932,357,0.602,358,1.789,359,1.246,360,1.806,361,0.488,362,0.701,363,0.602,364,0.701,365,0.701,366,0.389,367,0.537,368,0.701,369,0.365,370,0.701,371,1.107,372,0.602,373,2.509,374,0.741,375,2.227,376,0.701,377,1.289,378,0.701,379,0.701,380,0.602,381,0.898,382,1.289,383,0.602,384,0.701,385,0.701,386,0.701,387,1.545,388,0.488,389,1.289,390,1.087,391,0.701,392,1.662,393,0.389,394,0.537,395,0.701,396,0.701,397,0.602,398,0.602,399,0.701,400,0.701,401,0.701,402,0.701,403,0.537,404,0.701,405,0.324,406,0.701,407,0.602,408,0.701,409,0.701,410,0.701,411,0.344,412,0.701,413,0.701,414,0.701,415,0.537,416,0.602,417,0.701,418,0.701,419,0.602,420,1.789,421,0.602,422,1.107,423,0.701,424,0.537,425,0.701,426,0.602,427,0.602,428,0.537,429,0.701,430,0.488,431,0.701,432,0.537,433,0.389,434,0.701,435,0.701,436,0.537,437,0.987,438,1.789,439,0.488,440,0.307,441,1.107,442,2.238,443,0.365,444,0.701,445,0.701,446,0.45,447,0.602,448,0.701,449,0.602,450,0.701,451,1.289,452,0.488,453,0.701]],["t/12",[0,1.251,1,2.815,2,1.801,3,2.393,5,1.96,8,2.158,9,2.158,10,2.909,11,1.753,26,1.869,77,2.891,81,2.85,94,1.753,97,1.753,106,3.532,107,2.002,116,2.344,133,2.158,137,1.65,140,2.158,166,2.578,188,2.891,189,2.344,198,1.753,199,1.753,200,2.891,201,2.158,204,1.869,255,1.869,285,2.344,306,2.158,307,2.344,332,1.65,367,2.578,374,1.394,392,3.033,454,3.366,455,3.366,456,3.366,457,3.366,458,2.578,459,3.366,460,3.366,461,3.366,462,3.366,463,3.366,464,3.366,465,3.366,466,3.366,467,3.366,468,2.891,469,2.891,470,2.344,471,3.366,472,3.366,473,2.344,474,2.891,475,2.344,476,2.891,477,3.366,478,3.366,479,3.366,480,2.344,481,3.366]],["t/14",[0,1.443,2,0.929,3,2.061,23,2.146,48,1.548,79,1.744,80,2.875,81,2.455,84,2.875,89,2.564,90,4.125,105,2.332,108,2.875,132,1.992,137,1.641,144,1.387,166,2.564,230,2.875,247,2.875,255,1.859,259,2.564,270,2.804,285,2.332,298,2.875,306,2.146,310,2.061,315,4.125,319,2.804,335,2.146,341,2.332,360,2.332,390,1.641,392,4.002,403,2.564,415,2.564,469,2.875,473,2.332,475,2.332,476,2.875,480,2.332,482,3.348,483,2.146,484,3.348,485,2.146,486,2.332,487,3.348,488,2.875,489,3.348,490,3.348,491,2.875,492,3.348,493,3.348,494,3.348,495,3.348,496,3.348,497,3.348,498,3.348,499,3.348,500,3.348,501,3.348,502,2.564,503,3.348,504,3.348,505,2.875,506,1.992,507,1.859,508,2.564]],["t/16",[0,1.24,2,1.509,3,2.778,5,1.943,10,1.029,11,1.094,32,1.609,41,0.784,42,1.629,55,1.346,81,2.443,91,1.029,107,1.25,129,1.463,134,1.463,137,1.029,140,2.644,169,1.609,173,1.346,190,1.463,198,1.731,199,1.731,201,1.346,204,1.166,205,1.166,220,1.463,227,1.609,240,1.166,255,1.166,259,1.609,262,1.463,263,1.609,285,2.873,291,1.804,293,1.094,301,1.029,319,4.102,331,1.609,332,2.664,333,2.131,334,1.463,335,1.346,337,1.463,339,2.855,340,1.609,341,2.873,342,1.804,349,2.855,360,2.315,373,1.804,374,1.943,375,1.804,381,1.463,387,1.463,390,2.664,392,2.131,415,2.546,416,1.804,419,1.804,422,1.804,426,1.804,430,1.463,436,1.609,449,1.804,458,1.609,474,1.804,491,1.804,502,1.609,506,1.25,509,2.1,510,1.804,511,2.315,512,1.463,513,2.1,514,2.1,515,2.1,516,1.804,517,2.1,518,2.855,519,2.1,520,4.389,521,2.1,522,2.1,523,2.1,524,2.131,525,1.463,526,2.1,527,1.463,528,2.1,529,1.609,530,2.1,531,1.804,532,2.1,533,2.1,534,2.1,535,2.1,536,1.804,537,2.1,538,2.1,539,2.1,540,2.1,541,2.1,542,2.1,543,1.463,544,2.1,545,2.1,546,3.324,547,2.1,548,1.463,549,2.1,550,1.804,551,2.1,552,1.804,553,1.804,554,2.1,555,1.609,556,2.1]],["t/18",[0,1.789,16,3.984,27,4.712,133,3.334,153,3.623,345,3.623,557,5.201,558,6.766,559,5.201,560,5.201,561,4.467,562,2.709]],["t/21",[0,1.407,10,1.958,27,2.782,109,2.377,131,4.57,132,2.377,190,2.782,196,1.958,198,2.081,199,2.081,255,2.219,295,2.782,301,2.608,310,1.747,311,3.06,332,1.958,356,2.081,374,2.204,527,2.782,543,3.706,563,3.995,564,3.995,565,3.995,566,5.321,567,4.075,568,5.321,569,3.995,570,4.075,571,3.431,572,3.06,573,3.06,574,5.138,575,4.57,576,3.431,577,2.782,578,3.431,579,3.995,580,3.995,581,3.995,582,3.995,583,3.995,584,3.06]],["t/23",[0,1.572,2,1.464,25,3.021,68,3.021,107,2.346,144,2.629,201,2.528,293,2.054,300,3.674,310,2.599,313,1.55,315,2.747,338,2.747,353,1.634,356,2.054,374,1.634,397,3.387,470,3.674,475,2.747,485,2.528,486,2.747,527,3.674,550,4.531,562,2.747,571,3.387,574,3.387,575,3.387,576,3.387,578,3.387,585,3.944,586,3.387,587,3.944,588,3.944,589,3.021,590,3.021,591,3.944,592,2.528,593,3.944,594,2.346,595,3.387,596,3.387,597,3.387]],["t/25",[0,1.011,1,2.274,2,1.624,3,2.259,5,1.583,8,2.45,9,2.45,10,1.873,11,1.991,13,2.928,42,1.873,45,3.283,56,3.283,94,1.991,105,2.662,106,2.274,109,2.274,115,2.662,133,2.45,151,2.928,172,1.768,190,2.662,192,3.283,198,1.991,199,1.991,201,2.45,293,1.991,300,2.662,301,1.873,304,2.274,338,1.991,347,3.073,353,1.583,390,1.873,458,3.956,468,3.283,473,3.598,475,2.662,483,2.45,511,2.662,529,2.928,543,2.662,584,2.928,598,2.928,599,3.283,600,3.283,601,2.928,602,3.822,603,3.822,604,3.822,605,3.283,606,3.283,607,3.822,608,2.928,609,3.822]],["t/27",[0,1.855,15,2.928,21,2.662,26,2.123,40,2.928,81,1.991,94,1.991,116,2.662,129,2.662,144,2.14,148,3.283,151,2.928,172,1.768,217,2.69,228,3.283,256,3.283,273,2.928,289,3.283,310,1.672,313,2.03,355,2.662,374,1.583,439,2.662,443,1.991,470,2.662,486,3.598,505,4.437,524,2.45,562,2.69,586,3.283,610,3.822,611,3.283,612,3.822,613,3.822,614,3.822,615,3.822,616,3.822,617,5.165,618,2.662,619,3.598,620,3.822,621,2.662,622,3.822,623,3.283,624,3.283,625,2.662]],["t/29",[0,1.696,91,1.983,144,1.677,155,2.594,157,3.476,173,2.594,180,1.592,245,2.819,300,2.819,313,1.59,317,3.476,352,2.819,353,1.677,355,2.819,356,3.136,369,2.108,380,3.476,432,3.1,440,1.77,527,3.738,529,3.1,548,2.819,562,2.108,577,3.738,625,2.819,626,2.795,627,2.819,628,3.476,629,4.047,630,4.047,631,3.1,632,4.047,633,4.047,634,4.047,635,3.1,636,2.347,637,4.047,638,4.047,639,3.476,640,4.047,641,4.047]],["t/31",[48,2.308,143,2.772,144,2.068,173,3.2,245,4.274,301,2.446,310,2.183,353,2.068,374,2.068,440,2.183,562,2.6,626,3.461,636,2.183,642,4.287,643,4.287,644,4.287,645,3.823,646,4.287,647,4.992,648,4.287]],["t/34",[73,2.835,79,2.303,127,3.798,196,2.167,229,2.835,241,3.08,275,2.835,313,1.738,325,3.08,357,3.798,437,3.387,624,3.798,636,1.934,649,2.456,650,5.687,651,5.399,652,4.422,653,3.961,654,4.422,655,4.356,656,4.422,657,2.631,658,3.798,659,4.422,660,3.387,661,3.798,662,4.422,663,4.422,664,4.422,665,4.422,666,4.422,667,4.422,668,4.422,669,4.422]],["t/36",[0,1.631,3,2.201,332,2.466,594,2.994,628,4.322,636,2.201,649,2.795,670,5.032,671,6.669,672,5.032,673,6.167,674,3.505,675,3.669,676,6.167,677,4.322,678,3.505]],["t/38",[22,3.243,79,1.966,94,2.668,100,2.892,203,2.63,217,1.966,234,2.892,240,2.097,313,1.484,353,2.409,374,1.564,440,1.651,512,2.63,572,2.892,577,2.63,595,3.243,618,2.63,636,1.651,649,2.097,660,2.892,661,4.994,678,4.05,679,5.123,680,5.123,681,2.892,682,3.243,683,5.123,684,3.776,685,3.243,686,3.243,687,3.243,688,2.892,689,3.776,690,3.776,691,3.776,692,3.776,693,3.243,694,3.776,695,3.776,696,3.776,697,3.776,698,3.776,699,3.243,700,2.892,701,2.892,702,3.243,703,3.243,704,3.776,705,3.776,706,3.776,707,3.776,708,3.243,709,3.243]],["t/41",[0,0.715,81,1.409,155,1.734,180,0.715,198,1.409,199,1.409,217,2.103,238,1.884,239,3.469,241,2.813,275,1.734,277,1.884,280,2.323,293,1.409,310,1.183,313,1.587,334,2.813,337,1.884,348,1.884,353,2.492,360,1.884,361,1.884,363,2.323,369,1.409,390,1.979,440,2.344,506,1.609,525,1.884,572,2.072,592,1.734,594,3.188,618,1.884,627,2.813,636,1.183,649,1.502,653,3.366,655,2.072,657,3.411,658,2.323,675,3.708,687,2.323,688,2.072,693,3.469,708,4.603,709,4.15,710,4.038,711,2.705,712,2.705,713,2.323,714,2.705,715,2.072,716,2.705,717,2.705,718,5.359,719,2.705,720,1.183,721,2.705,722,4.038,723,2.705,724,2.705,725,2.705,726,2.705,727,2.705,728,2.705,729,2.705,730,2.705,731,2.323,732,1.734,733,2.705,734,2.705,735,2.705,736,2.705,737,2.705,738,2.705,739,2.705,740,2.705,741,2.705,742,2.323,743,2.705,744,2.705,745,2.705,746,2.323,747,2.705,748,2.705,749,2.323,750,2.705,751,2.705]],["t/43",[2,1.509,90,3.787,100,4.657,107,2.456,172,1.909,177,5.222,196,2.023,332,2.023,333,2.646,334,2.875,338,2.15,359,2.875,439,2.875,473,2.875,488,3.545,536,3.545,597,3.545,636,1.805,649,2.292,651,3.545,655,3.162,732,2.646,752,4.128,753,4.128,754,4.128,755,4.128,756,3.545,757,4.128,758,4.128,759,4.128,760,4.128,761,4.128,762,4.128,763,4.128,764,3.162,765,5.437,766,4.128,767,3.545,768,4.128,769,4.128,770,4.128,771,4.128]],["t/45",[0,1.342,48,2.346,144,2.568,220,3.534,356,2.642,562,2.642,570,3.886,626,2.642,646,4.357,772,5.073,773,3.886,774,5.073,775,5.073,776,3.252,777,5.073,778,4.357,779,3.886,780,5.073,781,3.886,782,5.073]],["t/47",[144,2.173,301,2.571,310,2.294,353,2.173,374,2.173,486,3.653,511,3.653,562,2.732,626,3.294,642,4.505,643,4.505,644,4.505,645,4.017,783,6.325,784,4.505]],["t/49",[0,1.557,2,1.074,143,2.149,172,1.79,196,1.897,198,2.016,199,2.016,274,3.324,301,1.897,310,1.692,313,1.521,326,2.696,338,2.016,348,2.696,361,2.696,369,2.016,374,2.609,432,2.964,594,3.099,598,2.964,611,3.324,625,2.696,626,2.016,636,1.692,674,2.696,675,2.302,700,3.99,785,3.324,786,3.87,787,3.87,788,3.324,789,3.99,790,3.87,791,3.87,792,3.87,793,3.324,794,5.888,795,3.87,796,3.87,797,3.324,798,3.87,799,2.481,800,3.87,801,5.209,802,2.964,803,3.87,804,2.302,805,3.324]],["t/51",[2,1.109,172,1.847,180,1.056,203,2.782,313,2.351,315,2.782,338,2.081,347,2.377,361,2.782,440,1.747,594,2.377,623,3.431,626,2.081,627,2.782,653,2.782,657,2.377,675,2.377,678,2.782,700,4.886,701,3.06,702,3.431,703,3.431,732,2.561,776,3.411,781,3.06,785,3.431,788,5.138,789,3.06,804,3.165,806,3.995,807,3.995,808,3.995,809,3.995,810,3.995,811,3.995,812,3.995,813,3.995,814,3.431,815,3.706,816,3.995,817,3.995,818,3.995,819,3.995,820,3.995]],["t/53",[0,1.366,106,2.274,144,1.583,153,2.662,172,1.768,180,1.011,196,1.873,225,3.283,234,2.928,241,2.662,242,3.283,277,2.662,306,2.45,313,1.502,374,1.583,440,1.672,470,2.662,507,2.123,561,3.283,577,2.662,626,1.991,675,3.073,678,2.662,789,3.956,804,4.013,814,3.283,815,4.698,821,3.822,822,3.822,823,2.928,824,2.45,825,3.822,826,3.822,827,3.822,828,3.822,829,3.283,830,3.822,831,3.283,832,3.822,833,3.822,834,3.822,835,2.662,836,3.822,837,3.822,838,3.822,839,3.822,840,3.822,841,3.822]],["t/55",[2,1.377,3,2.169,5,1.492,27,2.508,71,1.344,118,2,137,1.765,172,2.623,173,2.308,196,2.43,217,1.875,270,2.142,310,1.574,311,2.758,313,1.415,332,2.78,338,3.183,387,2.508,388,2.508,390,1.765,507,2.754,510,3.092,520,4.259,524,3.636,525,3.454,573,2.758,584,2.758,626,1.875,636,1.574,675,2.142,677,3.092,720,1.574,764,3.798,776,2.308,781,2.758,793,3.092,804,2.95,805,3.092,815,2.508,823,2.758,842,3.6,843,3.6,844,2.758,845,3.6,846,3.6,847,3.6,848,3.6,849,2.142,850,3.6,851,3.6,852,3.092,853,3.092,854,3.6,855,3.6]],["t/57",[48,2.09,106,2.688,143,2.51,144,1.872,155,2.897,219,3.881,221,3.881,270,3.43,271,3.461,319,2.688,353,1.872,356,3.003,374,1.872,393,2.51,452,3.147,590,3.461,592,2.897,639,3.881,645,3.461,648,3.881,720,1.976,779,3.461,852,3.881,856,4.519,857,3.881,858,4.519,859,4.519,860,4.519,861,4.519,862,3.881,863,3.881,864,4.519,865,3.881,866,3.881]],["t/59",[0,1.546,38,2.962,94,2.406,126,3.968,293,2.406,319,3.479,353,2.422,355,3.218,356,3.341,592,4.113,619,3.218,682,3.968,686,3.968,773,3.538,863,5.022,867,4.62,868,4.62,869,4.62,870,4.62,871,4.62,872,4.62,873,3.968,874,5.847,875,4.62]],["t/61",[110,4.929,140,2.876,144,1.858,181,3.853,237,2.492,275,2.876,277,4.646,306,3.679,313,1.763,353,1.858,636,1.962,660,3.436,681,3.436,701,3.436,715,3.436,756,3.853,804,2.669,866,4.929,876,3.853,877,4.486,878,4.486,879,4.486,880,4.486,881,4.486,882,4.486,883,4.486,884,4.486,885,4.486,886,4.486,887,3.853,888,4.486]],["t/63",[3,2.965,5,1.943,42,2.893,137,2.298,169,3.592,310,2.051,319,2.79,326,3.266,332,2.298,336,4.028,341,3.266,347,2.79,390,3.166,424,3.592,447,4.028,592,3.006,600,4.028,699,4.028,889,5.903,890,4.028,891,4.028,892,4.69,893,4.69,894,4.69]],["t/65",[245,3.748,275,3.45,313,2.115,353,2.661,525,3.748,570,4.919,594,3.202,681,4.122,804,3.202,815,3.748,895,5.382,896,5.382]],["t/67",[0,1.056,41,1.986,91,1.958,172,2.767,180,1.056,196,1.958,198,2.081,199,2.081,203,2.782,217,2.081,263,3.06,301,2.608,332,3.126,333,2.561,338,2.081,356,2.081,372,3.431,485,2.561,507,2.219,562,3.322,627,2.782,631,3.06,636,2.327,688,3.06,713,3.431,720,1.747,764,3.06,776,2.561,778,3.431,779,3.06,823,3.06,829,3.431,831,3.431,897,3.995,898,3.995,899,3.995,900,3.995,901,3.995,902,3.995,903,3.995,904,3.995,905,3.995,906,3.431]],["t/69",[41,2.518,180,1.914,202,2.682,359,2.914,369,2.857,405,1.935,440,1.829,507,2.323,555,3.204,567,3.204,720,1.829,907,2.914,908,3.593,909,4.183,910,3.593,911,2.235,912,4.183,913,3.204,914,3.204,915,2.489,916,4.183,917,5.485,918,3.593,919,3.593]],["t/71",[14,4.288,41,1.687,82,2.688,118,3.527,128,3.527,180,1.195,844,4.864,849,2.688,911,1.383,920,3.147,921,3.881,922,3.881,923,3.881,924,4.416,925,2.897,926,3.881,927,3.881,928,3.881,929,3.881,930,3.881,931,3.881,932,3.881,933,3.881,934,3.147,935,3.881,936,3.881]],["t/73",[5,1.06,11,1.333,26,1.422,71,1.446,73,1.641,88,1.333,91,1.899,93,1.783,97,2.018,109,2.305,120,1.783,145,3.328,149,2.968,180,1.236,185,2.199,186,2.199,235,1.641,237,2.152,262,1.783,278,1.641,293,2.018,295,1.783,304,1.523,325,1.783,348,1.783,366,2.596,369,2.435,390,1.255,405,2.411,407,2.199,411,1.255,428,2.968,441,2.199,442,1.961,446,1.641,508,1.961,531,2.199,589,1.961,621,1.783,631,1.961,649,1.422,720,1.119,849,2.305,862,2.199,865,2.199,911,1.974,914,2.968,915,1.523,919,2.199,925,2.997,937,3.58,938,3.328,939,1.961,940,3.874,941,4.015,942,3.874,943,3.328,944,2.56,945,2.56,946,2.56,947,2.56,948,2.56,949,2.199,950,2.56,951,3.328,952,2.199,953,2.199,954,1.961,955,2.56,956,1.783,957,2.199,958,1.641,959,2.199,960,2.699,961,2.56,962,2.56,963,2.199,964,3.993,965,2.199,966,2.56,967,2.199,968,1.961,969,2.56,970,2.199,971,2.56,972,2.199,973,2.56,974,2.56,975,2.56,976,2.56,977,2.56,978,2.56,979,2.56,980,3.874,981,3.874,982,2.56]],["t/75",[26,2.77,54,3.219,71,1.066,75,3.219,88,1.487,99,2.452,132,1.698,144,2.066,180,0.755,205,1.585,229,1.83,237,1.585,255,2.334,262,2.927,295,1.988,301,1.399,304,2.5,307,1.988,366,2.77,369,2.189,440,1.248,442,2.186,485,1.83,506,1.698,507,1.585,511,1.988,516,2.452,524,1.83,589,3.219,598,2.186,599,2.452,608,3.219,618,3.474,649,2.334,657,2.5,720,2.181,773,3.82,784,2.452,799,1.83,876,2.452,911,1.794,914,3.82,915,1.698,937,2.186,938,2.452,939,3.219,952,2.452,964,3.219,970,2.452,972,3.61,983,5.864,984,2.855,985,2.855,986,2.855,987,2.452,988,2.855,989,2.855,990,4.284,991,4.203,992,4.203,993,2.855,994,2.452,995,2.855,996,2.855,997,2.855,998,4.203,999,2.855,1000,2.452,1001,2.855,1002,2.855,1003,2.855,1004,2.855,1005,2.855,1006,2.855,1007,2.855,1008,1.988]],["t/77",[41,1.651,42,2.167,48,2.045,71,1.651,118,2.456,134,3.08,142,2.631,180,1.169,264,2.835,273,3.387,293,2.303,345,3.08,347,2.631,352,3.08,405,2.63,421,3.798,443,2.303,720,1.934,849,2.631,911,1.74,965,3.798,990,3.798,1009,4.422,1010,5.687,1011,5.687,1012,3.387,1013,3.387,1014,4.422,1015,5.687,1016,3.798,1017,3.08,1018,4.422,1019,4.422,1020,4.422]],["t/79",[5,1.458,41,1.313,71,2.456,143,2.711,180,1.482,204,1.954,287,3.022,304,2.904,325,2.451,369,2.542,405,2.257,483,2.256,502,2.695,621,3.4,653,2.451,720,1.539,853,3.022,911,2.205,913,2.695,915,2.093,937,2.695,939,2.695,943,3.022,958,2.256,994,3.022,1000,3.022,1021,5.349,1022,4.477,1023,1.627,1024,1.833,1025,3.519,1026,3.519,1027,4.881,1028,2.451,1029,3.022]],["t/81",[23,2.528,38,2.528,41,1.472,55,2.528,71,1.969,97,2.054,142,2.346,180,1.395,222,3.387,231,3.387,232,4.041,237,2.19,238,2.747,333,2.528,390,1.933,403,3.021,405,1.824,411,2.585,446,2.528,749,3.387,835,2.747,857,3.387,887,3.387,911,1.942,925,2.528,956,2.747,957,3.387,958,2.528,959,3.387,960,2.747,1029,3.387,1030,3.021,1031,3.944,1032,5.105,1033,3.944,1034,3.944,1035,3.944,1036,3.944,1037,3.944,1038,3.944,1039,3.944,1040,3.021,1041,3.944,1042,3.387,1043,3.944,1044,3.944,1045,3.944]],["t/83",[41,1.848,88,2.579,180,1.615,232,3.793,237,2.75,405,2.29,411,2.427,430,3.449,446,3.174,720,2.67,911,2.026,949,4.253,968,3.793,1040,3.793,1046,4.952,1047,4.952,1048,4.952,1049,4.253,1050,4.952,1051,4.952]],["t/85",[41,2.291,88,2.6,93,3.477,180,1.623,205,2.772,240,2.772,335,3.2,381,3.477,548,3.477,619,3.477,657,2.97,824,3.2,911,2.121,915,2.97,1008,3.477,1017,3.477,1052,4.287,1053,4.287]],["t/87",[41,1.975,88,2.755,149,4.052,180,1.399,480,3.684,911,1.619,913,4.052,960,4.428,1054,4.543,1055,4.543,1056,4.052,1057,4.543,1058,4.543,1059,3.684,1060,5.29]],["t/89",[21,1.498,23,2.172,41,1.264,48,0.995,55,1.379,63,2.91,71,1.264,79,1.12,91,1.66,97,1.12,118,1.881,180,1.108,202,1.379,204,1.195,205,1.881,217,1.12,220,1.498,227,1.648,237,1.195,248,1.848,261,1.848,278,2.686,304,1.28,323,1.848,331,1.648,352,2.359,392,1.379,394,1.648,405,0.995,411,1.66,424,1.648,430,2.359,443,1.12,446,3.314,452,1.498,483,1.379,506,1.28,543,1.498,552,2.91,596,1.848,605,1.848,606,1.848,674,1.498,720,1.481,732,1.379,776,2.172,802,1.648,824,2.172,835,1.498,911,1.454,918,1.848,920,1.498,924,1.648,934,1.498,960,1.498,963,1.848,964,1.648,968,1.648,1008,2.359,1022,1.379,1030,1.648,1040,1.648,1049,2.91,1054,3.599,1055,5.261,1056,1.648,1057,2.91,1058,5.733,1061,2.151,1062,2.91,1063,2.151,1064,2.151,1065,3.388,1066,2.151,1067,2.151,1068,4.753,1069,2.151,1070,1.848,1071,3.599,1072,2.151,1073,2.151,1074,2.151,1075,2.151,1076,2.151,1077,2.151,1078,2.91,1079,2.151,1080,2.151,1081,2.151,1082,2.151,1083,2.151,1084,2.151,1085,2.151,1086,2.151,1087,2.151,1088,2.151,1089,2.151,1090,2.151,1091,2.151,1092,2.151,1093,1.848,1094,4.19,1095,2.151,1096,1.848,1097,1.848,1098,2.151,1099,1.848,1100,2.151,1101,2.151,1102,2.151,1103,2.151,1104,2.151,1105,2.151,1106,2.151,1107,2.151,1108,2.151,1109,1.379,1110,2.151,1111,2.151,1112,2.151,1113,2.151,1114,2.151,1115,2.151,1116,2.151,1117,2.151,1118,2.151]],["t/91",[19,4.111,41,2.499,118,1.9,142,2.036,152,2.939,180,1.77,202,2.193,240,2.658,267,2.939,278,2.193,305,2.939,337,2.383,340,2.621,345,2.383,367,3.666,383,2.939,411,1.677,443,1.782,480,2.383,635,2.621,742,2.939,767,2.939,799,2.193,802,2.621,824,2.193,890,2.939,911,2.123,941,2.939,951,2.939,1012,2.621,1013,2.621,1017,2.383,1030,2.621,1056,2.621,1059,2.383,1062,4.111,1071,2.939,1096,2.939,1109,2.193,1119,3.422,1120,3.422,1121,3.422,1122,3.422,1123,3.422,1124,3.422,1125,3.422,1126,2.621,1127,3.422,1128,3.422,1129,2.939,1130,3.422,1131,3.422,1132,2.939,1133,2.939,1134,2.939,1135,2.939]],["t/93",[0,1.423,72,4.622,235,4.118,427,4.622,443,2.803,512,3.748,674,3.748,987,4.622,1093,4.622,1136,4.622,1137,5.382,1138,5.382,1139,5.382]],["t/95",[42,2.466,359,3.505,366,2.795,440,2.201,508,3.854,601,3.854,907,3.505,908,4.322,910,4.322,911,2.04,956,3.505,1023,3.084,1024,3.212,1059,3.505,1109,3.226,1140,5.032,1141,5.032]],["t/97",[2,1.219,14,4.242,82,2.612,118,3.479,128,3.675,393,2.439,433,2.439,844,4.798,849,2.612,920,3.058,921,3.771,922,3.771,923,3.771,924,4.336,925,2.815,926,3.771,927,3.771,928,3.771,929,3.771,930,3.771,931,3.771,932,3.771,933,3.771,934,3.058,935,3.771,936,3.771,1023,2.03,1024,2.287,1028,3.058]],["t/99",[2,1.67,42,1.326,48,1.251,71,1.804,76,2.323,82,3.188,91,1.326,97,1.409,109,1.609,115,2.813,128,3.341,132,1.609,137,2.368,142,1.609,150,2.323,175,2.072,180,1.417,204,1.502,205,2.684,216,2.323,235,1.734,238,1.884,240,1.502,264,1.734,270,1.609,320,2.072,371,2.323,393,3.341,394,2.072,398,2.323,411,1.326,428,2.072,433,3.341,437,3.093,439,1.884,485,1.734,507,1.502,555,2.072,608,2.072,625,1.884,799,2.589,849,2.403,873,4.603,907,1.884,911,1.755,925,1.734,954,2.072,1023,1.868,1059,1.884,1126,2.072,1142,2.072,1143,2.705,1144,6.015,1145,6.233,1146,2.705,1147,2.705,1148,2.323,1149,2.705,1150,2.705,1151,2.323,1152,2.705,1153,4.038,1154,2.705,1155,4.038,1156,2.705,1157,2.705,1158,2.705,1159,2.705,1160,2.705,1161,2.705,1162,2.705]],["t/101",[2,1.319,5,1.968,38,2.17,42,1.659,43,2.907,48,1.565,71,1.773,91,1.659,128,2.638,137,1.659,175,3.638,180,1.256,204,1.88,229,2.17,264,3.045,307,3.308,320,2.592,326,3.308,366,2.638,393,1.88,405,2.197,411,1.659,433,3.048,436,2.592,452,2.357,506,2.013,573,2.592,715,2.592,732,2.17,746,2.907,907,2.357,911,1.453,956,2.357,958,2.17,1021,3.638,1022,3.045,1023,2.197,1024,1.763,1028,2.357,1099,4.714,1109,2.17,1126,2.592,1163,3.384,1164,3.384,1165,6.268,1166,3.384,1167,3.384,1168,4.75,1169,5.488,1170,3.384,1171,3.384,1172,3.384,1173,3.384,1174,3.384,1175,3.384,1176,3.384]],["t/103",[2,1.747,71,1.941,196,2.549,235,4.034,243,4.467,366,2.889,388,3.623,433,2.889,512,3.623,524,3.334,590,3.984,601,3.984,911,1.591,1136,4.467,1148,4.467,1177,5.201]],["t/105",[2,1.809,5,2.122,71,1.912,89,2.892,97,1.966,120,3.568,176,3.243,180,0.999,189,4.343,202,2.421,229,2.421,270,2.246,271,2.892,347,2.246,388,2.63,393,2.097,433,3.62,553,3.243,797,3.243,799,2.421,934,4.343,953,3.243,967,3.243,1022,2.421,1023,2.369,1042,4.4,1070,3.243,1097,3.243,1142,2.892,1178,3.776,1179,5.123,1180,5.814,1181,5.123,1182,3.776,1183,3.776,1184,3.776,1185,3.776,1186,3.776,1187,3.776,1188,3.776]],["t/107",[2,1.936,71,1.23,79,1.716,105,2.295,128,2.589,143,3.004,172,1.523,189,2.295,217,1.716,255,1.83,264,2.112,278,2.988,366,1.83,387,2.295,393,3.757,411,1.615,433,3.757,440,1.441,483,2.112,518,2.829,567,2.523,731,2.829,835,3.246,891,5.05,906,2.829,920,2.295,1016,2.829,1023,2.155,1024,1.716,1028,2.295,1078,2.829,1109,2.112,1129,4.003,1142,2.523,1151,2.829,1189,3.294,1190,3.294,1191,3.294,1192,3.294,1193,3.294,1194,3.294,1195,3.294,1196,3.294,1197,5.88,1198,3.294,1199,3.294,1200,3.294,1201,3.294,1202,3.294,1203,3.294,1204,3.294]],["t/109",[143,2.818,405,2.346,621,3.534,685,4.357,911,2.048,915,3.018,954,3.886,1021,5.126,1022,4.291,1023,2.346,1024,2.642,1032,4.357,1205,5.073,1206,5.073,1207,5.073]],["t/111",[88,2.642,93,3.534,205,2.818,240,2.818,335,3.252,381,3.534,443,2.642,548,3.534,619,3.534,657,3.018,824,3.252,911,1.896,1008,3.534,1017,3.534,1023,2.866,1024,3.228,1052,4.357,1053,4.357]],["t/113",[142,3.258,443,2.852,635,4.195,958,3.511,1012,4.195,1013,4.195,1023,2.533,1024,2.852,1132,4.704,1133,4.704,1134,4.704,1135,4.704]]],"invertedIndex":[["",{"_index":651,"t":{"34":{"position":[[40,1],[230,1],[302,1]]},"43":{"position":[[243,1]]}}}],["0.0000000001",{"_index":214,"t":{"10":{"position":[[1038,15]]}}}],["10",{"_index":932,"t":{"71":{"position":[[246,2]]},"97":{"position":[[305,2]]}}}],["100",{"_index":1044,"t":{"81":{"position":[[528,3]]}}}],["14",{"_index":909,"t":{"69":{"position":[[27,2]]}}}],["2",{"_index":578,"t":{"21":{"position":[[294,1]]},"23":{"position":[[345,2]]}}}],["2021",{"_index":114,"t":{"6":{"position":[[15,4]]}}}],["2023",{"_index":131,"t":{"6":{"position":[[309,5]]},"21":{"position":[[153,5],[409,5]]}}}],["2024",{"_index":359,"t":{"10":{"position":[[4491,5],[7824,5],[7946,5]]},"43":{"position":[[0,4]]},"69":{"position":[[39,4]]},"95":{"position":[[38,4]]}}}],["4.0",{"_index":1011,"t":{"77":{"position":[[83,3],[116,5]]}}}],["566",{"_index":820,"t":{"51":{"position":[[553,4]]}}}],["60",{"_index":1087,"t":{"89":{"position":[[1068,4]]}}}],["6300",{"_index":933,"t":{"71":{"position":[[249,4]]},"97":{"position":[[308,4]]}}}],["9",{"_index":1140,"t":{"95":{"position":[[27,1]]}}}],["9'",{"_index":541,"t":{"16":{"position":[[1333,3]]}}}],["99.99%—while",{"_index":463,"t":{"12":{"position":[[301,12]]}}}],["99.999999999",{"_index":209,"t":{"10":{"position":[[989,15]]}}}],["abov",{"_index":598,"t":{"25":{"position":[[15,5]]},"49":{"position":[[518,5]]},"75":{"position":[[1073,6]]}}}],["absolut",{"_index":187,"t":{"10":{"position":[[608,8]]}}}],["academia",{"_index":615,"t":{"27":{"position":[[156,9]]}}}],["access",{"_index":369,"t":{"10":{"position":[[4714,11]]},"29":{"position":[[250,8]]},"41":{"position":[[457,6]]},"49":{"position":[[553,10]]},"69":{"position":[[149,6],[519,6]]},"73":{"position":[[773,11],[845,6],[1007,10]]},"75":{"position":[[451,10],[1163,10]]},"79":{"position":[[563,8],[600,6]]}}}],["accord",{"_index":63,"t":{"4":{"position":[[487,9]]},"89":{"position":[[1290,10],[1937,10]]}}}],["account",{"_index":1174,"t":{"101":{"position":[[752,8]]}}}],["accur",{"_index":1000,"t":{"75":{"position":[[872,9]]},"79":{"position":[[399,9]]}}}],["accuraci",{"_index":952,"t":{"73":{"position":[[421,9]]},"75":{"position":[[941,9]]}}}],["action",{"_index":1116,"t":{"89":{"position":[[2234,6]]}}}],["activ",{"_index":143,"t":{"8":{"position":[[252,6]]},"31":{"position":[[141,8]]},"49":{"position":[[478,6]]},"57":{"position":[[114,9]]},"79":{"position":[[524,10],[717,10]]},"107":{"position":[[646,10],[687,10],[780,10]]},"109":{"position":[[209,10]]}}}],["actual",{"_index":996,"t":{"75":{"position":[[695,6]]}}}],["ad",{"_index":241,"t":{"10":{"position":[[1636,6]]},"34":{"position":[[27,6]]},"41":{"position":[[160,5],[1093,6]]},"53":{"position":[[419,5]]}}}],["add",{"_index":604,"t":{"25":{"position":[[375,3]]}}}],["addit",{"_index":573,"t":{"21":{"position":[[181,10]]},"55":{"position":[[188,10]]},"101":{"position":[[3,8]]}}}],["address",{"_index":82,"t":{"4":{"position":[[800,7]]},"6":{"position":[[23,7]]},"10":{"position":[[2578,10]]},"71":{"position":[[167,7]]},"97":{"position":[[227,7]]},"99":{"position":[[552,8],[661,7],[768,9],[874,7]]}}}],["adequ",{"_index":89,"t":{"4":{"position":[[936,8]]},"14":{"position":[[259,8]]},"105":{"position":[[288,8]]}}}],["adjud",{"_index":389,"t":{"10":{"position":[[5684,11],[5901,12]]}}}],["administ",{"_index":1091,"t":{"89":{"position":[[1227,12]]}}}],["administr",{"_index":1110,"t":{"89":{"position":[[1891,14]]}}}],["advanc",{"_index":309,"t":{"10":{"position":[[3155,8],[3252,8],[3319,8]]}}}],["advantag",{"_index":494,"t":{"14":{"position":[[455,10]]}}}],["advic",{"_index":976,"t":{"73":{"position":[[1586,6]]}}}],["advis",{"_index":1041,"t":{"81":{"position":[[412,7]]}}}],["affect",{"_index":1129,"t":{"91":{"position":[[412,6]]},"107":{"position":[[668,7],[741,6]]}}}],["affili",{"_index":1137,"t":{"93":{"position":[[88,11]]}}}],["against",{"_index":1049,"t":{"83":{"position":[[53,7]]},"89":{"position":[[102,7],[2276,7]]}}}],["aggreg",{"_index":333,"t":{"10":{"position":[[3868,12],[5014,10],[5581,10],[5598,10]]},"16":{"position":[[566,10],[650,11]]},"43":{"position":[[34,11]]},"67":{"position":[[395,9]]},"81":{"position":[[474,9]]}}}],["aggregator/valid",{"_index":755,"t":{"43":{"position":[[80,20]]}}}],["agre",{"_index":917,"t":{"69":{"position":[[390,6],[467,5]]}}}],["agreement",{"_index":19,"t":{"2":{"position":[[211,9]]},"91":{"position":[[44,9],[155,11]]}}}],["aim",{"_index":132,"t":{"8":{"position":[[18,4]]},"10":{"position":[[160,6],[706,3]]},"14":{"position":[[786,4]]},"21":{"position":[[162,3]]},"75":{"position":[[1205,3]]},"99":{"position":[[3,3]]}}}],["airdrop",{"_index":448,"t":{"10":{"position":[[7512,8]]}}}],["algorithm",{"_index":194,"t":{"10":{"position":[[695,10]]}}}],["align",{"_index":298,"t":{"10":{"position":[[2908,8]]},"14":{"position":[[831,6]]}}}],["allow",{"_index":134,"t":{"8":{"position":[[72,6],[131,6]]},"10":{"position":[[4806,6],[6083,5],[6844,6],[6937,5]]},"16":{"position":[[1776,8]]},"77":{"position":[[146,6]]}}}],["allus",{"_index":122,"t":{"6":{"position":[[160,8]]}}}],["along",{"_index":250,"t":{"10":{"position":[[1805,5]]}}}],["alongsid",{"_index":17,"t":{"2":{"position":[[187,9]]}}}],["alpha",{"_index":147,"t":{"8":{"position":[[293,6]]}}}],["altern",{"_index":76,"t":{"4":{"position":[[731,12]]},"99":{"position":[[1070,11]]}}}],["although",{"_index":499,"t":{"14":{"position":[[540,8]]}}}],["alway",{"_index":1187,"t":{"105":{"position":[[662,6]]}}}],["amazon",{"_index":36,"t":{"4":{"position":[[117,7]]}}}],["amend",{"_index":1006,"t":{"75":{"position":[[1347,7]]}}}],["amic",{"_index":1079,"t":{"89":{"position":[[755,8]]}}}],["amount",{"_index":371,"t":{"10":{"position":[[4830,7],[5220,6]]},"99":{"position":[[403,6]]}}}],["analysi",{"_index":902,"t":{"67":{"position":[[191,9]]}}}],["analyt",{"_index":1145,"t":{"99":{"position":[[623,10],[920,10],[966,10],[1054,9],[1092,10],[1160,9],[1261,9]]}}}],["ancient",{"_index":119,"t":{"6":{"position":[[136,7]]}}}],["announc",{"_index":126,"t":{"6":{"position":[[255,9]]},"59":{"position":[[193,12]]}}}],["anoth",{"_index":1195,"t":{"107":{"position":[[509,7]]}}}],["anyon",{"_index":402,"t":{"10":{"position":[[6089,6]]}}}],["anyth",{"_index":399,"t":{"10":{"position":[[5992,8]]}}}],["api",{"_index":740,"t":{"41":{"position":[[991,3]]}}}],["append",{"_index":759,"t":{"43":{"position":[[191,11]]}}}],["appli",{"_index":956,"t":{"73":{"position":[[656,5]]},"81":{"position":[[587,5]]},"95":{"position":[[227,7]]},"101":{"position":[[309,6]]}}}],["applic",{"_index":97,"t":{"4":{"position":[[1070,13]]},"10":{"position":[[4666,12],[7200,11],[7319,11]]},"12":{"position":[[132,13]]},"73":{"position":[[697,10],[959,10]]},"81":{"position":[[628,10]]},"89":{"position":[[2017,10]]},"99":{"position":[[226,10]]},"105":{"position":[[694,10]]}}}],["approach",{"_index":601,"t":{"25":{"position":[[52,8]]},"95":{"position":[[98,8]]},"103":{"position":[[13,9]]}}}],["appropri",{"_index":962,"t":{"73":{"position":[[806,11]]}}}],["arbitr",{"_index":1058,"t":{"87":{"position":[[102,12]]},"89":{"position":[[260,11],[427,11],[549,11],[1215,11],[1263,11],[1339,11],[1447,8],[1499,11],[1656,11],[1781,11],[1860,12],[1910,10],[1986,12],[2264,11]]}}}],["architectur",{"_index":191,"t":{"10":{"position":[[647,13]]}}}],["area",{"_index":861,"t":{"57":{"position":[[262,5]]}}}],["argument",{"_index":327,"t":{"10":{"position":[[3715,9]]}}}],["aris",{"_index":1040,"t":{"81":{"position":[[251,7]]},"83":{"position":[[130,7]]},"89":{"position":[[690,7]]}}}],["ark",{"_index":670,"t":{"36":{"position":[[19,3]]}}}],["aros",{"_index":1114,"t":{"89":{"position":[[2110,5]]}}}],["arriv",{"_index":884,"t":{"61":{"position":[[324,6]]}}}],["art",{"_index":164,"t":{"10":{"position":[[39,4]]}}}],["ask",{"_index":891,"t":{"63":{"position":[[126,3]]},"107":{"position":[[305,3],[381,3],[435,3],[623,5]]}}}],["assign",{"_index":892,"t":{"63":{"position":[[162,6]]}}}],["associ",{"_index":844,"t":{"55":{"position":[[166,10]]},"71":{"position":[[92,12],[196,11],[385,12]]},"97":{"position":[[152,12],[255,11],[434,12]]}}}],["assumpt",{"_index":986,"t":{"75":{"position":[[118,11]]}}}],["assur",{"_index":472,"t":{"12":{"position":[[633,11]]}}}],["async",{"_index":658,"t":{"34":{"position":[[179,5]]},"41":{"position":[[518,5]]}}}],["atla",{"_index":650,"t":{"34":{"position":[[34,5],[91,5]]}}}],["atom",{"_index":818,"t":{"51":{"position":[[399,6]]}}}],["attack",{"_index":836,"t":{"53":{"position":[[552,7]]}}}],["attent",{"_index":1164,"t":{"101":{"position":[[351,9]]}}}],["attorney",{"_index":1051,"t":{"83":{"position":[[113,10]]}}}],["attribut",{"_index":1010,"t":{"77":{"position":[[71,11],[299,11]]}}}],["audit",{"_index":584,"t":{"21":{"position":[[462,8]]},"25":{"position":[[433,9]]},"55":{"position":[[461,5]]}}}],["avail",{"_index":293,"t":{"10":{"position":[[2758,10]]},"16":{"position":[[1539,9]]},"23":{"position":[[468,12]]},"25":{"position":[[517,10]]},"41":{"position":[[1115,14]]},"59":{"position":[[129,9]]},"73":{"position":[[478,12],[1062,9]]},"77":{"position":[[38,9]]}}}],["averag",{"_index":1160,"t":{"99":{"position":[[1353,7]]}}}],["award",{"_index":1074,"t":{"89":{"position":[[561,5]]}}}],["away",{"_index":279,"t":{"10":{"position":[[2456,5]]}}}],["baarerstrass",{"_index":931,"t":{"71":{"position":[[232,13]]},"97":{"position":[[291,13]]}}}],["background",{"_index":614,"t":{"27":{"position":[[141,11]]}}}],["backup",{"_index":252,"t":{"10":{"position":[[1842,7]]}}}],["balanc",{"_index":292,"t":{"10":{"position":[[2708,9]]}}}],["bandwidth",{"_index":107,"t":{"4":{"position":[[1316,9]]},"10":{"position":[[6062,9],[6270,9]]},"12":{"position":[[336,9]]},"16":{"position":[[1712,9]]},"23":{"position":[[372,9]]},"43":{"position":[[157,9]]}}}],["base",{"_index":255,"t":{"10":{"position":[[1910,5]]},"12":{"position":[[570,5]]},"14":{"position":[[142,5]]},"16":{"position":[[319,5]]},"21":{"position":[[449,5]]},"75":{"position":[[65,5],[590,5]]},"107":{"position":[[707,5]]}}}],["basi",{"_index":428,"t":{"10":{"position":[[6998,5]]},"73":{"position":[[44,5],[1177,5]]},"99":{"position":[[205,5]]}}}],["be",{"_index":1095,"t":{"89":{"position":[[1364,5]]}}}],["bear",{"_index":1001,"t":{"75":{"position":[[910,4]]}}}],["becom",{"_index":416,"t":{"10":{"position":[[6392,6]]},"16":{"position":[[1532,6]]}}}],["befor",{"_index":567,"t":{"21":{"position":[[78,6],[135,6]]},"69":{"position":[[316,6]]},"107":{"position":[[791,6]]}}}],["began",{"_index":113,"t":{"6":{"position":[[6,5]]}}}],["begin",{"_index":380,"t":{"10":{"position":[[5307,6]]},"29":{"position":[[366,5]]}}}],["behaviour",{"_index":478,"t":{"12":{"position":[[762,10]]}}}],["believ",{"_index":483,"t":{"14":{"position":[[107,8]]},"25":{"position":[[3,7]]},"79":{"position":[[338,8]]},"89":{"position":[[294,7]]},"107":{"position":[[978,7]]}}}],["below",{"_index":486,"t":{"14":{"position":[[230,6]]},"23":{"position":[[72,5]]},"27":{"position":[[256,6],[425,6]]},"47":{"position":[[120,5]]}}}],["beta",{"_index":780,"t":{"45":{"position":[[115,4]]}}}],["between",{"_index":1056,"t":{"87":{"position":[[62,7]]},"89":{"position":[[1714,7]]},"91":{"position":[[54,7]]}}}],["bid",{"_index":504,"t":{"14":{"position":[[736,7]]}}}],["big",{"_index":224,"t":{"10":{"position":[[1227,3]]}}}],["bind",{"_index":966,"t":{"73":{"position":[[1214,7]]}}}],["bit",{"_index":833,"t":{"53":{"position":[[526,4]]}}}],["block",{"_index":700,"t":{"38":{"position":[[305,5]]},"49":{"position":[[60,5],[287,5]]},"51":{"position":[[4,5],[136,5],[180,5],[497,5]]}}}],["blockchain",{"_index":336,"t":{"10":{"position":[[3921,11],[4126,10],[4185,10]]},"63":{"position":[[50,11]]}}}],["book—an",{"_index":121,"t":{"6":{"position":[[152,7]]}}}],["bootstrap",{"_index":874,"t":{"59":{"position":[[219,9],[259,9]]}}}],["both",{"_index":742,"t":{"41":{"position":[[1008,4]]},"91":{"position":[[199,4]]}}}],["bounc",{"_index":1158,"t":{"99":{"position":[[1336,6]]}}}],["bound",{"_index":918,"t":{"69":{"position":[[403,5]]},"89":{"position":[[404,5]]}}}],["branch",{"_index":680,"t":{"38":{"position":[[28,6],[455,6]]}}}],["breach",{"_index":52,"t":{"4":{"position":[[312,8],[589,8]]}}}],["break",{"_index":239,"t":{"10":{"position":[[1612,8]]},"41":{"position":[[627,8],[681,8]]}}}],["briefli",{"_index":1146,"t":{"99":{"position":[[637,7]]}}}],["bring",{"_index":1113,"t":{"89":{"position":[[2061,5]]}}}],["broadcast",{"_index":537,"t":{"16":{"position":[[1237,9]]}}}],["broader",{"_index":299,"t":{"10":{"position":[[2926,7]]}}}],["broadest",{"_index":1061,"t":{"89":{"position":[[34,8]]}}}],["broken",{"_index":642,"t":{"31":{"position":[[25,6]]},"47":{"position":[[25,6]]}}}],["bug",{"_index":690,"t":{"38":{"position":[[177,3]]}}}],["build",{"_index":94,"t":{"4":{"position":[[1046,5]]},"8":{"position":[[362,8]]},"10":{"position":[[7191,5]]},"12":{"position":[[9,8]]},"25":{"position":[[64,8]]},"27":{"position":[[370,5]]},"38":{"position":[[377,5],[422,5]]},"59":{"position":[[150,5]]}}}],["built",{"_index":850,"t":{"55":{"position":[[414,5]]}}}],["buy",{"_index":980,"t":{"73":{"position":[[1694,3],[1734,3]]}}}],["c",{"_index":672,"t":{"36":{"position":[[35,1]]}}}],["c/o",{"_index":927,"t":{"71":{"position":[[208,3]]},"97":{"position":[[267,3]]}}}],["cach",{"_index":373,"t":{"10":{"position":[[5032,7],[6048,7],[6112,7],[6146,7],[6401,7],[6751,7]]},"16":{"position":[[953,7]]}}}],["calendar",{"_index":1088,"t":{"89":{"position":[[1073,8]]}}}],["call",{"_index":751,"t":{"41":{"position":[[1106,4]]}}}],["caption",{"_index":1124,"t":{"91":{"position":[[255,8]]}}}],["carefulli",{"_index":916,"t":{"69":{"position":[[306,9]]}}}],["case",{"_index":181,"t":{"10":{"position":[[489,5]]},"61":{"position":[[350,4]]}}}],["catch",{"_index":737,"t":{"41":{"position":[[934,8]]}}}],["catchableerror",{"_index":738,"t":{"41":{"position":[[947,15]]}}}],["cc",{"_index":1013,"t":{"77":{"position":[[109,3]]},"91":{"position":[[957,2]]},"113":{"position":[[144,2]]}}}],["cdn",{"_index":409,"t":{"10":{"position":[[6242,4]]}}}],["censor",{"_index":58,"t":{"4":{"position":[[410,9]]}}}],["censorship",{"_index":8,"t":{"2":{"position":[[82,10]]},"4":{"position":[[278,10],[710,10],[912,11]]},"10":{"position":[[177,10],[442,10],[4274,10]]},"12":{"position":[[102,10]]},"25":{"position":[[149,10]]}}}],["central",{"_index":171,"t":{"10":{"position":[[237,11],[286,11],[343,11]]}}}],["centralis",{"_index":45,"t":{"4":{"position":[[209,11],[343,11],[534,11]]},"25":{"position":[[194,11]]}}}],["ceremoni",{"_index":847,"t":{"55":{"position":[[237,9]]}}}],["certain",{"_index":264,"t":{"10":{"position":[[2101,7]]},"77":{"position":[[270,7]]},"99":{"position":[[133,7]]},"101":{"position":[[152,7],[183,7]]},"107":{"position":[[145,7]]}}}],["chain",{"_index":346,"t":{"10":{"position":[[4228,5]]}}}],["challeng",{"_index":330,"t":{"10":{"position":[[3830,10]]}}}],["chamber",{"_index":1092,"t":{"89":{"position":[[1253,9]]}}}],["chanc",{"_index":213,"t":{"10":{"position":[[1031,6]]}}}],["chang",{"_index":657,"t":{"34":{"position":[[105,7]]},"41":{"position":[[109,7],[636,7],[690,7],[759,7],[862,7]]},"51":{"position":[[169,7]]},"75":{"position":[[583,6],[1329,6]]},"85":{"position":[[161,8]]},"111":{"position":[[135,8]]}}}],["charg",{"_index":386,"t":{"10":{"position":[[5622,6]]}}}],["check",{"_index":619,"t":{"27":{"position":[[389,5],[523,5]]},"59":{"position":[[123,5]]},"85":{"position":[[119,8]]},"111":{"position":[[96,5]]}}}],["choic",{"_index":1192,"t":{"107":{"position":[[153,7]]}}}],["chrono",{"_index":661,"t":{"34":{"position":[[205,7]]},"38":{"position":[[72,7],[444,7],[482,7]]}}}],["chunk",{"_index":551,"t":{"16":{"position":[[1819,6]]}}}],["ci/dock",{"_index":704,"t":{"38":{"position":[[351,9]]}}}],["circom",{"_index":671,"t":{"36":{"position":[[23,6],[50,6],[68,6]]}}}],["circuit",{"_index":677,"t":{"36":{"position":[[131,8]]},"55":{"position":[[37,7]]}}}],["circuits/tree/master/reference/nim/proof_input",{"_index":855,"t":{"55":{"position":[[664,46]]}}}],["claim",{"_index":446,"t":{"10":{"position":[[7453,8]]},"73":{"position":[[724,6]]},"81":{"position":[[503,6]]},"83":{"position":[[73,7]]},"89":{"position":[[87,5],[939,5],[2071,6],[2104,5],[2176,6]]}}}],["class",{"_index":1115,"t":{"89":{"position":[[2228,5]]}}}],["classwid",{"_index":1118,"t":{"89":{"position":[[2254,9]]}}}],["claus",{"_index":1070,"t":{"89":{"position":[[439,7]]},"105":{"position":[[459,7]]}}}],["clean",{"_index":733,"t":{"41":{"position":[[842,5]]}}}],["cleaner",{"_index":734,"t":{"41":{"position":[[890,7]]}}}],["cleanup",{"_index":895,"t":{"65":{"position":[[31,7]]}}}],["client",{"_index":374,"t":{"10":{"position":[[5051,6],[6462,6],[6475,6]]},"12":{"position":[[256,7]]},"16":{"position":[[667,6],[777,6],[790,6],[902,6]]},"21":{"position":[[196,8],[296,6]]},"23":{"position":[[174,7]]},"27":{"position":[[301,6]]},"31":{"position":[[59,7]]},"38":{"position":[[118,6]]},"47":{"position":[[63,7]]},"49":{"position":[[8,7],[156,6],[406,6],[530,6]]},"53":{"position":[[226,7]]},"57":{"position":[[373,6]]}}}],["cloud",{"_index":46,"t":{"4":{"position":[[221,5],[355,5]]},"10":{"position":[[328,7],[422,5]]}}}],["code",{"_index":199,"t":{"10":{"position":[[802,6],[1275,6],[1513,6],[1577,6]]},"12":{"position":[[479,7]]},"16":{"position":[[615,7],[1736,6]]},"21":{"position":[[331,7]]},"25":{"position":[[387,7]]},"41":{"position":[[102,6]]},"49":{"position":[[313,7]]},"67":{"position":[[357,6]]}}}],["codenam",{"_index":565,"t":{"21":{"position":[[60,9]]}}}],["codex",{"_index":0,"t":{"2":{"position":[[0,5]]},"6":{"position":[[0,5],[115,7],[245,5]]},"8":{"position":[[4,5],[315,5],[376,6]]},"10":{"position":[[8,6],[15,5],[265,5],[364,5],[565,5],[1240,5],[1562,6],[1737,6],[2025,5],[2277,6],[2368,6],[2772,5],[2798,5],[2961,5],[3045,5],[3301,5],[3629,5],[3671,5],[4092,5],[4152,5],[4358,5],[4387,5],[4533,6],[4540,5],[4784,6],[4964,5],[6630,5],[7222,6],[7275,5],[7345,5],[7365,5],[7388,5],[7478,5],[7506,5],[7540,5],[7577,5],[7772,5],[7852,5]]},"12":{"position":[[0,5],[406,5]]},"14":{"position":[[101,5],[576,5],[851,5]]},"16":{"position":[[0,5],[746,5],[880,5],[1928,5]]},"18":{"position":[[0,5],[69,5],[122,5]]},"21":{"position":[[0,5],[423,5]]},"23":{"position":[[4,5],[89,5],[274,5]]},"25":{"position":[[678,5]]},"27":{"position":[[0,5],[221,5],[263,5],[277,5],[295,5],[308,5],[323,5],[471,5]]},"29":{"position":[[4,5],[233,5],[269,5],[411,5]]},"36":{"position":[[110,5],[157,5]]},"41":{"position":[[776,5]]},"45":{"position":[[4,5]]},"49":{"position":[[400,5],[524,5],[572,5]]},"53":{"position":[[150,5],[220,5]]},"59":{"position":[[173,5],[213,5]]},"67":{"position":[[492,5]]},"93":{"position":[[30,5]]}}}],["codex'",{"_index":190,"t":{"10":{"position":[[639,7]]},"16":{"position":[[242,7]]},"21":{"position":[[237,7]]},"25":{"position":[[186,7]]}}}],["codex/pull/566",{"_index":816,"t":{"51":{"position":[[348,14]]}}}],["codex/pull/607",{"_index":896,"t":{"65":{"position":[[82,14]]}}}],["codex/pull/625",{"_index":841,"t":{"53":{"position":[[709,14]]}}}],["codex’",{"_index":372,"t":{"10":{"position":[[4947,7]]},"67":{"position":[[334,7]]}}}],["cold",{"_index":343,"t":{"10":{"position":[[4110,4]]}}}],["collater",{"_index":341,"t":{"10":{"position":[[4006,10],[5189,10],[5267,10],[5805,10],[7620,10]]},"14":{"position":[[708,11]]},"16":{"position":[[308,10],[332,10],[1669,10]]},"63":{"position":[[149,12]]}}}],["collect",{"_index":128,"t":{"6":{"position":[[281,10]]},"10":{"position":[[5632,11],[6318,12]]},"71":{"position":[[81,10],[185,10],[374,10]]},"97":{"position":[[48,10],[141,10],[244,10],[423,10]]},"99":{"position":[[20,10],[35,10],[113,7],[270,7],[471,7],[1170,8]]},"101":{"position":[[31,10],[78,7]]},"107":{"position":[[50,10],[216,7]]}}}],["collective'",{"_index":24,"t":{"2":{"position":[[294,12]]}}}],["combin",{"_index":465,"t":{"12":{"position":[[381,7]]}}}],["come",{"_index":1205,"t":{"109":{"position":[[25,4]]}}}],["command",{"_index":656,"t":{"34":{"position":[[97,7]]}}}],["commerci",{"_index":1019,"t":{"77":{"position":[[243,10]]}}}],["commiss",{"_index":1183,"t":{"105":{"position":[[358,11]]}}}],["commission",{"_index":1202,"t":{"107":{"position":[[949,12]]}}}],["commit",{"_index":531,"t":{"16":{"position":[[1037,7]]},"73":{"position":[[1200,10]]}}}],["common",{"_index":421,"t":{"10":{"position":[[6603,6]]},"77":{"position":[[63,7]]}}}],["commun",{"_index":21,"t":{"2":{"position":[[243,14]]},"8":{"position":[[321,10],[535,9]]},"27":{"position":[[491,9]]},"89":{"position":[[1699,14]]}}}],["compar",{"_index":111,"t":{"4":{"position":[[1386,10]]},"10":{"position":[[2967,7]]}}}],["compat",{"_index":676,"t":{"36":{"position":[[57,6],[75,6]]}}}],["compens",{"_index":450,"t":{"10":{"position":[[7668,12]]}}}],["competit",{"_index":493,"t":{"14":{"position":[[443,11]]}}}],["compil",{"_index":838,"t":{"53":{"position":[[621,11]]}}}],["complaint",{"_index":1200,"t":{"107":{"position":[[890,9]]}}}],["complement",{"_index":549,"t":{"16":{"position":[[1743,11]]}}}],["complet",{"_index":649,"t":{"34":{"position":[[0,10]]},"36":{"position":[[0,10]]},"38":{"position":[[0,10]]},"41":{"position":[[0,10]]},"43":{"position":[[209,10]]},"73":{"position":[[407,13]]},"75":{"position":[[894,8],[966,12]]}}}],["compli",{"_index":919,"t":{"69":{"position":[[413,6]]},"73":{"position":[[940,9]]}}}],["compliant",{"_index":961,"t":{"73":{"position":[[793,9]]}}}],["compon",{"_index":793,"t":{"49":{"position":[[233,10]]},"55":{"position":[[199,11]]}}}],["compos",{"_index":509,"t":{"16":{"position":[[9,8]]}}}],["compress",{"_index":829,"t":{"53":{"position":[[431,8]]},"67":{"position":[[419,12]]}}}],["compris",{"_index":842,"t":{"55":{"position":[[19,9]]}}}],["compromis",{"_index":1152,"t":{"99":{"position":[[1116,10]]}}}],["comput",{"_index":434,"t":{"10":{"position":[[7155,9]]}}}],["concentr",{"_index":316,"t":{"10":{"position":[[3447,13]]}}}],["concept",{"_index":563,"t":{"21":{"position":[[41,7]]}}}],["concern",{"_index":862,"t":{"57":{"position":[[271,7]]},"73":{"position":[[392,10]]}}}],["concret",{"_index":813,"t":{"51":{"position":[[290,8]]}}}],["condit",{"_index":994,"t":{"75":{"position":[[627,11]]},"79":{"position":[[92,11]]}}}],["conduct",{"_index":596,"t":{"23":{"position":[[455,7]]},"89":{"position":[[1556,9]]}}}],["confer",{"_index":1100,"t":{"89":{"position":[[1576,10]]}}}],["confidenti",{"_index":1106,"t":{"89":{"position":[[1747,13]]}}}],["configur",{"_index":863,"t":{"57":{"position":[[318,10]]},"59":{"position":[[0,9],[57,9]]}}}],["conflict",{"_index":1060,"t":{"87":{"position":[[133,8]]}}}],["conform",{"_index":797,"t":{"49":{"position":[[413,8]]},"105":{"position":[[678,10]]}}}],["connect",{"_index":887,"t":{"61":{"position":[[377,7]]},"81":{"position":[[279,9]]}}}],["consensu",{"_index":401,"t":{"10":{"position":[[6020,9]]}}}],["consent",{"_index":1197,"t":{"107":{"position":[[564,7],[611,7],[721,7],[822,8]]}}}],["consequenti",{"_index":1039,"t":{"81":{"position":[[217,13]]}}}],["consid",{"_index":145,"t":{"8":{"position":[[278,10]]},"73":{"position":[[1122,10],[1273,10]]}}}],["consist",{"_index":261,"t":{"10":{"position":[[2037,10],[4970,8]]},"89":{"position":[[1641,7]]}}}],["constantin",{"_index":839,"t":{"53":{"position":[[646,11]]}}}],["constitut",{"_index":973,"t":{"73":{"position":[[1543,10]]}}}],["constru",{"_index":979,"t":{"73":{"position":[[1662,9]]}}}],["consult",{"_index":929,"t":{"71":{"position":[[216,10]]},"97":{"position":[[275,10]]}}}],["consum",{"_index":422,"t":{"10":{"position":[[6656,7],[6786,8]]},"16":{"position":[[1016,8]]}}}],["contact",{"_index":1133,"t":{"91":{"position":[[888,7]]},"113":{"position":[[75,7]]}}}],["contain",{"_index":914,"t":{"69":{"position":[[221,9]]},"73":{"position":[[1287,7],[1517,9]]},"75":{"position":[[21,7],[815,9],[994,9]]}}}],["contemporan",{"_index":1121,"t":{"91":{"position":[[123,15]]}}}],["content",{"_index":405,"t":{"10":{"position":[[6174,8]]},"69":{"position":[[195,7]]},"73":{"position":[[522,7],[589,7],[762,7],[986,7]]},"77":{"position":[[20,8],[194,7]]},"79":{"position":[[310,7],[377,7]]},"81":{"position":[[339,7]]},"83":{"position":[[186,7]]},"89":{"position":[[198,7]]},"101":{"position":[[191,8],[249,7]]},"109":{"position":[[197,7]]}}}],["context",{"_index":272,"t":{"10":{"position":[[2266,7]]}}}],["continu",{"_index":627,"t":{"29":{"position":[[15,9]]},"41":{"position":[[570,8],[644,8]]},"51":{"position":[[533,10]]},"67":{"position":[[310,10]]}}}],["contract",{"_index":390,"t":{"10":{"position":[[5696,8],[5914,9],[5960,9],[7696,10]]},"14":{"position":[[760,10]]},"16":{"position":[[373,10],[415,8],[1058,8],[1311,8],[1621,8],[1875,8]]},"25":{"position":[[309,8]]},"41":{"position":[[246,8],[750,8]]},"55":{"position":[[123,8]]},"63":{"position":[[27,8],[73,8],[291,8]]},"73":{"position":[[1190,9]]},"81":{"position":[[44,9]]}}}],["contractu",{"_index":1184,"t":{"105":{"position":[[447,11]]}}}],["contrast",{"_index":321,"t":{"10":{"position":[[3549,9]]}}}],["contribut",{"_index":151,"t":{"8":{"position":[[383,12]]},"25":{"position":[[664,10]]},"27":{"position":[[501,14]]}}}],["contributor",{"_index":617,"t":{"27":{"position":[[197,12],[349,12]]}}}],["control",{"_index":1028,"t":{"79":{"position":[[443,7]]},"97":{"position":[[96,11]]},"101":{"position":[[780,7]]},"107":{"position":[[522,10]]}}}],["controversi",{"_index":1063,"t":{"89":{"position":[[113,11]]}}}],["conveni",{"_index":44,"t":{"4":{"position":[[196,12]]}}}],["convent",{"_index":904,"t":{"67":{"position":[[280,11]]}}}],["cooki",{"_index":1169,"t":{"101":{"position":[[558,7],[595,7],[799,7]]}}}],["copi",{"_index":1016,"t":{"77":{"position":[[162,5]]},"107":{"position":[[448,4]]}}}],["core",{"_index":127,"t":{"6":{"position":[[270,4]]},"34":{"position":[[174,4]]}}}],["correct",{"_index":906,"t":{"67":{"position":[[467,7]]},"107":{"position":[[315,7]]}}}],["correspond",{"_index":539,"t":{"16":{"position":[[1290,13]]}}}],["corrupt",{"_index":455,"t":{"12":{"position":[[87,10]]}}}],["cost",{"_index":55,"t":{"4":{"position":[[338,4]]},"10":{"position":[[6879,4]]},"16":{"position":[[981,4]]},"81":{"position":[[141,4]]},"89":{"position":[[373,4]]}}}],["count",{"_index":703,"t":{"38":{"position":[[330,6]]},"51":{"position":[[524,8]]}}}],["counterpart",{"_index":603,"t":{"25":{"position":[[223,13]]}}}],["countri",{"_index":1182,"t":{"105":{"position":[[248,9]]}}}],["court",{"_index":1057,"t":{"87":{"position":[[93,5]]},"89":{"position":[[530,5],[1488,6]]}}}],["cover",{"_index":767,"t":{"43":{"position":[[344,5]]},"91":{"position":[[27,5]]}}}],["creat",{"_index":73,"t":{"4":{"position":[[661,7]]},"8":{"position":[[26,6]]},"10":{"position":[[1874,7],[3599,6]]},"34":{"position":[[122,6]]},"73":{"position":[[1136,8]]}}}],["creativ",{"_index":1009,"t":{"77":{"position":[[54,8]]}}}],["critic",{"_index":365,"t":{"10":{"position":[[4618,8]]}}}],["cross",{"_index":886,"t":{"61":{"position":[[371,5]]}}}],["crucial",{"_index":221,"t":{"10":{"position":[[1176,7]]},"57":{"position":[[132,7]]}}}],["cryptographi",{"_index":613,"t":{"27":{"position":[[111,12]]}}}],["current",{"_index":301,"t":{"10":{"position":[[3016,9],[4364,9],[4396,9],[6362,7]]},"16":{"position":[[699,9]]},"21":{"position":[[9,9],[259,7]]},"25":{"position":[[165,9]]},"31":{"position":[[15,9]]},"47":{"position":[[15,9]]},"49":{"position":[[364,9]]},"67":{"position":[[0,7],[238,7]]},"75":{"position":[[74,7]]}}}],["d/c",{"_index":870,"t":{"59":{"position":[[86,3]]}}}],["da",{"_index":765,"t":{"43":{"position":[[314,3],[378,3]]}}}],["dagger",{"_index":566,"t":{"21":{"position":[[70,7],[229,7]]}}}],["damag",{"_index":232,"t":{"10":{"position":[[1386,8],[1999,8],[2415,8],[2492,6]]},"81":{"position":[[231,7],[447,8]]},"83":{"position":[[81,7]]}}}],["data",{"_index":2,"t":{"2":{"position":[[25,4]]},"4":{"position":[[227,4],[297,4],[420,4],[457,5],[584,4],[967,4]]},"6":{"position":[[176,4]]},"8":{"position":[[90,4],[156,4]]},"10":{"position":[[119,4],[391,4],[617,4],[726,4],[834,4],[851,4],[895,4],[1064,5],[1157,4],[1213,4],[1290,4],[1320,4],[1449,5],[1473,4],[1546,4],[1604,4],[1649,4],[1768,4],[1932,5],[1961,4],[2061,4],[2169,4],[2226,4],[2352,4],[2389,4],[2632,5],[2744,4],[2902,5],[3180,4],[3220,4],[3277,4],[3400,4],[3464,4],[3519,4],[3650,4],[3774,4],[3971,4],[4071,4],[4511,4],[4574,4],[4768,4],[4841,4],[5230,4],[5323,5],[5371,4],[6541,4],[6795,4]]},"12":{"position":[[28,4],[235,4],[506,4],[539,4],[617,4],[682,4]]},"14":{"position":[[663,5]]},"16":{"position":[[519,4],[862,5],[1086,5],[1173,4],[1257,4],[1831,4]]},"23":{"position":[[215,4],[463,4]]},"25":{"position":[[75,4],[356,5],[512,4]]},"43":{"position":[[186,4],[203,5]]},"49":{"position":[[281,5]]},"51":{"position":[[142,5]]},"55":{"position":[[182,5],[476,4]]},"97":{"position":[[86,4]]},"99":{"position":[[73,4],[150,4],[302,4],[361,5],[514,4],[1147,5]]},"101":{"position":[[54,5],[106,4]]},"103":{"position":[[31,4],[165,4]]},"105":{"position":[[50,4],[134,4],[217,4],[491,4],[609,4]]},"107":{"position":[[93,4],[199,4],[347,4],[412,4],[470,5],[517,4],[597,4],[873,5],[917,4],[1005,4]]}}}],["dataset",{"_index":699,"t":{"38":{"position":[[273,7]]},"63":{"position":[[191,9]]}}}],["datastor",{"_index":817,"t":{"51":{"position":[[378,9]]}}}],["datastore/pull/58",{"_index":819,"t":{"51":{"position":[[463,17]]}}}],["date",{"_index":156,"t":{"8":{"position":[[455,4]]}}}],["day",{"_index":1089,"t":{"89":{"position":[[1082,4]]}}}],["de",{"_index":59,"t":{"4":{"position":[[433,2]]}}}],["deal",{"_index":894,"t":{"63":{"position":[[218,4]]}}}],["debug",{"_index":681,"t":{"38":{"position":[[39,9]]},"61":{"position":[[8,9]]},"65":{"position":[[97,9]]}}}],["decentr",{"_index":165,"t":{"10":{"position":[[44,13],[142,17],[2984,13],[3369,16]]}}}],["decentralis",{"_index":1,"t":{"2":{"position":[[11,13]]},"4":{"position":[[695,14],[1093,13],[1243,13]]},"6":{"position":[[53,13]]},"8":{"position":[[35,13]]},"12":{"position":[[62,14],[442,13]]},"25":{"position":[[209,13]]}}}],["decis",{"_index":1098,"t":{"89":{"position":[[1456,8]]}}}],["deem",{"_index":1097,"t":{"89":{"position":[[1396,6]]},"105":{"position":[[320,6]]}}}],["defin",{"_index":890,"t":{"63":{"position":[[82,7]]},"91":{"position":[[378,7]]}}}],["degre",{"_index":991,"t":{"75":{"position":[[505,6],[1032,6]]}}}],["delet",{"_index":701,"t":{"38":{"position":[[311,8]]},"51":{"position":[[503,8]]},"61":{"position":[[401,6]]}}}],["deliv",{"_index":571,"t":{"21":{"position":[[169,7]]},"23":{"position":[[81,7]]}}}],["demand",{"_index":415,"t":{"10":{"position":[[6370,8]]},"14":{"position":[[333,6]]},"16":{"position":[[123,7],[460,8]]}}}],["demo",{"_index":629,"t":{"29":{"position":[[82,4]]}}}],["deniabl",{"_index":460,"t":{"12":{"position":[[214,11]]}}}],["depend",{"_index":414,"t":{"10":{"position":[[6349,9]]}}}],["deploy",{"_index":592,"t":{"23":{"position":[[267,6]]},"41":{"position":[[255,8]]},"57":{"position":[[53,6]]},"59":{"position":[[46,10],[206,6],[247,6]]},"63":{"position":[[36,8]]}}}],["deriv",{"_index":722,"t":{"41":{"position":[[431,7],[468,7]]}}}],["describ",{"_index":589,"t":{"23":{"position":[[114,10]]},"73":{"position":[[1483,9]]},"75":{"position":[[1063,9],[1131,9]]}}}],["descript",{"_index":989,"t":{"75":{"position":[[289,13]]}}}],["deseri",{"_index":744,"t":{"41":{"position":[[1027,11]]}}}],["design",{"_index":177,"t":{"10":{"position":[[373,8],[3575,6],[4799,6]]},"43":{"position":[[101,6],[150,6],[405,6]]}}}],["desir",{"_index":87,"t":{"4":{"position":[[888,9]]}}}],["detail",{"_index":485,"t":{"14":{"position":[[221,8]]},"23":{"position":[[63,8]]},"67":{"position":[[201,7]]},"75":{"position":[[313,8]]},"99":{"position":[[1213,7]]}}}],["detect",{"_index":312,"t":{"10":{"position":[[3230,10],[3660,10],[3784,10]]}}}],["determin",{"_index":905,"t":{"67":{"position":[[451,11]]}}}],["dev",{"_index":772,"t":{"45":{"position":[[10,3]]}}}],["develop",{"_index":144,"t":{"8":{"position":[[259,11]]},"14":{"position":[[241,11]]},"23":{"position":[[134,7],[199,7],[298,7],[348,7]]},"27":{"position":[[9,9],[63,11]]},"29":{"position":[[344,11]]},"31":{"position":[[0,11]]},"45":{"position":[[65,11],[191,11]]},"47":{"position":[[0,11]]},"53":{"position":[[164,10]]},"57":{"position":[[223,11]]},"61":{"position":[[89,9]]},"75":{"position":[[353,11],[649,13],[702,11]]}}}],["devic",{"_index":436,"t":{"10":{"position":[[7176,8]]},"16":{"position":[[201,7]]},"101":{"position":[[583,7]]}}}],["devnet",{"_index":591,"t":{"23":{"position":[[167,6]]}}}],["dht",{"_index":756,"t":{"43":{"position":[[108,3]]},"61":{"position":[[220,3]]}}}],["differ",{"_index":173,"t":{"10":{"position":[[271,9],[1342,9],[4919,9]]},"16":{"position":[[56,9]]},"29":{"position":[[474,9]]},"31":{"position":[[120,9]]},"55":{"position":[[304,9]]}}}],["differenti",{"_index":466,"t":{"12":{"position":[[392,13]]}}}],["diffus",{"_index":768,"t":{"43":{"position":[[355,9]]}}}],["directli",{"_index":1170,"t":{"101":{"position":[[610,8]]}}}],["disappear",{"_index":692,"t":{"38":{"position":[[197,11]]}}}],["disclaim",{"_index":940,"t":{"73":{"position":[[115,8],[639,11]]}}}],["discord",{"_index":162,"t":{"8":{"position":[[548,7]]}}}],["discourag",{"_index":497,"t":{"14":{"position":[[504,10]]}}}],["discret",{"_index":938,"t":{"73":{"position":[[91,10],[894,10]]},"75":{"position":[[1415,11]]}}}],["discuss",{"_index":344,"t":{"10":{"position":[[4161,10]]}}}],["disk",{"_index":664,"t":{"34":{"position":[[232,4]]}}}],["disput",{"_index":1055,"t":{"87":{"position":[[53,8]]},"89":{"position":[[16,9],[338,8],[682,7],[828,8],[880,7],[922,8],[1047,7],[1118,8],[1141,7]]}}}],["disrupt",{"_index":86,"t":{"4":{"position":[[871,12]]}}}],["distinct",{"_index":644,"t":{"31":{"position":[[43,8]]},"47":{"position":[[43,8]]}}}],["distinguish",{"_index":302,"t":{"10":{"position":[[3051,13]]}}}],["distribut",{"_index":273,"t":{"10":{"position":[[2311,11],[3185,13],[3282,12],[3405,13]]},"27":{"position":[[75,11]]},"77":{"position":[[179,10]]}}}],["document",{"_index":635,"t":{"29":{"position":[[291,14]]},"91":{"position":[[930,8]]},"113":{"position":[[117,8]]}}}],["doesn't",{"_index":276,"t":{"10":{"position":[[2435,7]]}}}],["doesn’t",{"_index":1151,"t":{"99":{"position":[[1108,7]]},"107":{"position":[[733,7]]}}}],["domicil",{"_index":926,"t":{"71":{"position":[[158,8]]},"97":{"position":[[218,8]]}}}],["domin",{"_index":29,"t":{"4":{"position":[[32,9]]}}}],["don't",{"_index":286,"t":{"10":{"position":[[2609,5],[5882,5]]}}}],["don’t",{"_index":1143,"t":{"99":{"position":[[315,5]]}}}],["doubl",{"_index":530,"t":{"16":{"position":[[943,6]]}}}],["down",{"_index":694,"t":{"38":{"position":[[238,4]]}}}],["draft",{"_index":695,"t":{"38":{"position":[[243,5]]}}}],["draw",{"_index":1163,"t":{"101":{"position":[[341,4]]}}}],["drawback",{"_index":49,"t":{"4":{"position":[[267,10]]}}}],["driven",{"_index":487,"t":{"14":{"position":[[291,6]]}}}],["drop",{"_index":290,"t":{"10":{"position":[[2693,5]]}}}],["due",{"_index":713,"t":{"41":{"position":[[83,3]]},"67":{"position":[[34,3]]}}}],["dummi",{"_index":717,"t":{"41":{"position":[[266,5]]}}}],["durabl",{"_index":10,"t":{"2":{"position":[[108,10]]},"4":{"position":[[972,10],[1364,10]]},"6":{"position":[[44,8]]},"8":{"position":[[49,10],[178,10]]},"10":{"position":[[111,7],[396,11],[549,10],[731,10],[839,11],[856,10],[962,10],[1162,10],[4076,11]]},"12":{"position":[[20,7],[273,10],[544,10],[622,10]]},"16":{"position":[[449,10]]},"21":{"position":[[368,10]]},"25":{"position":[[109,10]]}}}],["durat",{"_index":540,"t":{"16":{"position":[[1320,8]]}}}],["dynam",{"_index":758,"t":{"43":{"position":[[178,7]]}}}],["each",{"_index":511,"t":{"16":{"position":[[42,4],[135,4]]},"25":{"position":[[578,4]]},"47":{"position":[[143,4]]},"75":{"position":[[1303,4]]}}}],["earli",{"_index":101,"t":{"4":{"position":[[1149,5]]}}}],["econom",{"_index":192,"t":{"10":{"position":[[661,8],[4042,8]]},"25":{"position":[[628,8]]}}}],["edonkey",{"_index":103,"t":{"4":{"position":[[1187,7]]}}}],["effect",{"_index":824,"t":{"53":{"position":[[199,11]]},"85":{"position":[[207,9]]},"89":{"position":[[359,9],[378,9]]},"91":{"position":[[681,7]]},"111":{"position":[[175,9]]}}}],["effici",{"_index":106,"t":{"4":{"position":[[1282,9]]},"10":{"position":[[2534,9],[3390,9],[3505,10],[3751,9]]},"12":{"position":[[346,10],[496,9],[672,9],[815,9]]},"25":{"position":[[408,9]]},"53":{"position":[[183,11]]},"57":{"position":[[90,11]]}}}],["effort",{"_index":776,"t":{"45":{"position":[[77,7]]},"51":{"position":[[153,6],[227,8]]},"55":{"position":[[536,8]]},"67":{"position":[[125,7]]},"89":{"position":[[733,7],[782,7]]}}}],["eg",{"_index":174,"t":{"10":{"position":[[316,4]]}}}],["elast",{"_index":877,"t":{"61":{"position":[[99,7]]}}}],["eleven",{"_index":207,"t":{"10":{"position":[[976,6]]}}}],["emb",{"_index":1166,"t":{"101":{"position":[[404,5]]}}}],["embed",{"_index":1176,"t":{"101":{"position":[[870,9]]}}}],["emerg",{"_index":406,"t":{"10":{"position":[[6210,8]]}}}],["enabl",{"_index":491,"t":{"14":{"position":[[411,8]]},"16":{"position":[[156,8]]}}}],["encod",{"_index":193,"t":{"10":{"position":[[686,8]]}}}],["encourag",{"_index":476,"t":{"12":{"position":[[743,9]]},"14":{"position":[[343,9]]}}}],["encrypt",{"_index":883,"t":{"61":{"position":[[304,10]]}}}],["end",{"_index":570,"t":{"21":{"position":[[146,3],[399,3]]},"45":{"position":[[135,3]]},"65":{"position":[[126,3],[133,3]]}}}],["endomorph",{"_index":761,"t":{"43":{"position":[[230,12]]}}}],["endors",{"_index":1026,"t":{"79":{"position":[[260,8]]}}}],["endpoint",{"_index":794,"t":{"49":{"position":[[258,9],[382,9],[537,9]]}}}],["enforc",{"_index":1062,"t":{"89":{"position":[[51,11],[1472,8]]},"91":{"position":[[703,7],[798,7]]}}}],["engag",{"_index":418,"t":{"10":{"position":[[6488,6]]}}}],["engin",{"_index":133,"t":{"8":{"position":[[60,6]]},"10":{"position":[[6030,7]]},"12":{"position":[[41,6]]},"18":{"position":[[24,8]]},"25":{"position":[[88,6]]}}}],["engine'",{"_index":123,"t":{"6":{"position":[[189,8]]}}}],["english",{"_index":1108,"t":{"89":{"position":[[1804,8]]}}}],["enhanc",{"_index":320,"t":{"10":{"position":[[3491,9]]},"99":{"position":[[820,7]]},"101":{"position":[[489,8]]}}}],["enough",{"_index":282,"t":{"10":{"position":[[2485,6]]}}}],["ensur",{"_index":270,"t":{"10":{"position":[[2201,8],[4064,6]]},"14":{"position":[[173,6],[794,6]]},"55":{"position":[[383,8]]},"57":{"position":[[283,8],[360,8]]},"99":{"position":[[781,6]]},"105":{"position":[[470,6]]}}}],["enter",{"_index":912,"t":{"69":{"position":[[100,7]]}}}],["entir",{"_index":267,"t":{"10":{"position":[[2153,6]]},"91":{"position":[[37,6]]}}}],["entireti",{"_index":385,"t":{"10":{"position":[[5547,8]]}}}],["entiti",{"_index":921,"t":{"71":{"position":[[61,6]]},"97":{"position":[[121,6]]}}}],["entre",{"_index":429,"t":{"10":{"position":[[7021,6]]}}}],["environ",{"_index":876,"t":{"61":{"position":[[69,11]]},"75":{"position":[[678,12]]}}}],["ephemer",{"_index":417,"t":{"10":{"position":[[6435,9]]}}}],["epic",{"_index":648,"t":{"31":{"position":[[232,6]]},"57":{"position":[[202,5]]}}}],["equit",{"_index":1033,"t":{"81":{"position":[[102,9]]}}}],["erasur",{"_index":198,"t":{"10":{"position":[[794,7],[1267,7],[1505,7],[1569,7]]},"12":{"position":[[471,7]]},"16":{"position":[[607,7],[1728,7]]},"21":{"position":[[323,7]]},"25":{"position":[[379,7]]},"41":{"position":[[94,7]]},"49":{"position":[[305,7]]},"67":{"position":[[349,7]]}}}],["essenc",{"_index":1014,"t":{"77":{"position":[[125,7]]}}}],["establish",{"_index":56,"t":{"4":{"position":[[387,11]]},"25":{"position":[[252,9]]}}}],["estim",{"_index":984,"t":{"75":{"position":[[96,10]]}}}],["etc",{"_index":37,"t":{"4":{"position":[[125,4]]}}}],["ether",{"_index":718,"t":{"41":{"position":[[335,7],[408,6],[600,6],[855,6]]}}}],["ethereum",{"_index":397,"t":{"10":{"position":[[5951,8]]},"23":{"position":[[508,8]]}}}],["eur",{"_index":1043,"t":{"81":{"position":[[524,3]]}}}],["euro",{"_index":1045,"t":{"81":{"position":[[545,7]]}}}],["europ",{"_index":1185,"t":{"105":{"position":[[558,7]]}}}],["european",{"_index":1180,"t":{"105":{"position":[[161,8],[349,8],[626,8]]}}}],["even",{"_index":222,"t":{"10":{"position":[[1199,4],[6430,4]]},"81":{"position":[[391,4]]}}}],["event",{"_index":1042,"t":{"81":{"position":[[463,6]]},"105":{"position":[[99,5],[573,6]]}}}],["everyon",{"_index":159,"t":{"8":{"position":[[501,9]]}}}],["evict",{"_index":542,"t":{"16":{"position":[[1475,6]]}}}],["except",{"_index":735,"t":{"41":{"position":[[912,10]]}}}],["exception",{"_index":6,"t":{"2":{"position":[[61,13]]}}}],["exchang",{"_index":423,"t":{"10":{"position":[[6699,8]]}}}],["execut",{"_index":400,"t":{"10":{"position":[[6006,8]]}}}],["exist",{"_index":77,"t":{"4":{"position":[[744,8],[1084,8]]},"12":{"position":[[417,8]]}}}],["expand",{"_index":152,"t":{"8":{"position":[[412,9]]},"91":{"position":[[394,7]]}}}],["expect",{"_index":295,"t":{"10":{"position":[[2807,8],[6186,6],[6567,6],[6925,8],[7069,6]]},"21":{"position":[[126,8]]},"73":{"position":[[1149,12]]},"75":{"position":[[82,13]]}}}],["expens",{"_index":1050,"t":{"83":{"position":[[93,9]]}}}],["experi",{"_index":43,"t":{"4":{"position":[[181,10]]},"101":{"position":[[704,10]]}}}],["experienc",{"_index":610,"t":{"27":{"position":[[29,11]]}}}],["expert",{"_index":612,"t":{"27":{"position":[[95,8]]}}}],["expiri",{"_index":697,"t":{"38":{"position":[[262,6]]}}}],["explain",{"_index":1189,"t":{"107":{"position":[[3,9]]}}}],["export",{"_index":1178,"t":{"105":{"position":[[113,6]]}}}],["expos",{"_index":796,"t":{"49":{"position":[[374,7]]}}}],["express",{"_index":942,"t":{"73":{"position":[[152,7],[1374,7]]}}}],["extens",{"_index":351,"t":{"10":{"position":[[4417,9]]}}}],["extent",{"_index":958,"t":{"73":{"position":[[677,6]]},"79":{"position":[[7,6]]},"81":{"position":[[608,6]]},"101":{"position":[[207,6]]},"113":{"position":[[7,6]]}}}],["extra",{"_index":242,"t":{"10":{"position":[[1643,5],[1816,5]]},"53":{"position":[[520,5]]}}}],["extrem",{"_index":124,"t":{"6":{"position":[[198,9]]}}}],["face",{"_index":85,"t":{"4":{"position":[[855,4]]}}}],["facto",{"_index":60,"t":{"4":{"position":[[436,5]]}}}],["factual",{"_index":183,"t":{"10":{"position":[[511,7]]}}}],["fail",{"_index":337,"t":{"10":{"position":[[3942,5],[5398,5],[5487,5]]},"16":{"position":[[1432,5]]},"41":{"position":[[69,7]]},"91":{"position":[[695,4]]}}}],["failur",{"_index":169,"t":{"10":{"position":[[217,7],[428,9]]},"16":{"position":[[482,7]]},"63":{"position":[[236,9]]}}}],["faithfulli",{"_index":843,"t":{"55":{"position":[[144,10]]}}}],["fallen",{"_index":66,"t":{"4":{"position":[[561,6]]}}}],["fast",{"_index":579,"t":{"21":{"position":[[318,4]]}}}],["faster",{"_index":821,"t":{"53":{"position":[[15,6]]}}}],["fathom",{"_index":1144,"t":{"99":{"position":[[616,6],[913,6],[959,6],[1047,6],[1153,6],[1254,6]]}}}],["faulti",{"_index":545,"t":{"16":{"position":[[1655,6]]}}}],["faultless",{"_index":554,"t":{"16":{"position":[[1894,9]]}}}],["fdpic",{"_index":1203,"t":{"107":{"position":[[962,8]]}}}],["feasibl",{"_index":609,"t":{"25":{"position":[[651,12]]}}}],["featur",{"_index":307,"t":{"10":{"position":[[3135,9],[3307,8]]},"12":{"position":[[372,8]]},"75":{"position":[[339,9]]},"101":{"position":[[160,8],[260,9]]}}}],["februari",{"_index":910,"t":{"69":{"position":[[30,8]]},"95":{"position":[[29,8]]}}}],["feder",{"_index":1201,"t":{"107":{"position":[[909,7]]}}}],["fee",{"_index":430,"t":{"10":{"position":[[7028,4]]},"16":{"position":[[1722,5]]},"83":{"position":[[124,5]]},"89":{"position":[[1837,4],[1921,4]]}}}],["few",{"_index":317,"t":{"10":{"position":[[3474,3]]},"29":{"position":[[175,3]]}}}],["ffi",{"_index":673,"t":{"36":{"position":[[37,3],[82,3]]}}}],["figur",{"_index":688,"t":{"38":{"position":[[140,6]]},"41":{"position":[[877,6]]},"67":{"position":[[375,8]]}}}],["file",{"_index":79,"t":{"4":{"position":[[778,4],[1159,4]]},"8":{"position":[[146,5]]},"10":{"position":[[1111,4]]},"14":{"position":[[78,4]]},"34":{"position":[[11,5]]},"38":{"position":[[167,4]]},"89":{"position":[[1883,7]]},"107":{"position":[[883,4]]}}}],["final",{"_index":605,"t":{"25":{"position":[[528,8]]},"89":{"position":[[1173,7]]}}}],["finalis",{"_index":500,"t":{"14":{"position":[[561,10]]}}}],["financi",{"_index":974,"t":{"73":{"position":[[1554,10]]}}}],["find",{"_index":419,"t":{"10":{"position":[[6522,5]]},"16":{"position":[[843,5]]}}}],["finish",{"_index":693,"t":{"38":{"position":[[218,6]]},"41":{"position":[[224,8],[311,8]]}}}],["finit",{"_index":481,"t":{"12":{"position":[[838,6]]}}}],["first",{"_index":543,"t":{"16":{"position":[[1557,5]]},"21":{"position":[[26,5],[245,5]]},"25":{"position":[[237,6]]},"89":{"position":[[707,5]]}}}],["fit",{"_index":945,"t":{"73":{"position":[[236,7]]}}}],["fix",{"_index":277,"t":{"10":{"position":[[2443,3]]},"41":{"position":[[382,5]]},"53":{"position":[[615,5]]},"61":{"position":[[224,5],[267,4],[319,4],[385,3]]}}}],["flag",{"_index":696,"t":{"38":{"position":[[249,4]]}}}],["focu",{"_index":778,"t":{"45":{"position":[[92,5]]},"67":{"position":[[41,5]]}}}],["focus",{"_index":785,"t":{"49":{"position":[[28,7]]},"51":{"position":[[37,7]]}}}],["fold",{"_index":753,"t":{"43":{"position":[[59,8]]}}}],["follow",{"_index":48,"t":{"4":{"position":[[257,9]]},"8":{"position":[[511,6]]},"14":{"position":[[305,9]]},"31":{"position":[[180,9]]},"45":{"position":[[152,9]]},"57":{"position":[[184,9]]},"77":{"position":[[371,9]]},"89":{"position":[[417,9]]},"99":{"position":[[495,9]]},"101":{"position":[[368,10]]}}}],["forc",{"_index":1096,"t":{"89":{"position":[[1373,6]]},"91":{"position":[[671,5]]}}}],["forecast",{"_index":985,"t":{"75":{"position":[[107,10]]}}}],["form",{"_index":120,"t":{"6":{"position":[[144,4]]},"10":{"position":[[7498,4]]},"73":{"position":[[1165,7]]},"105":{"position":[[399,5],[438,5]]}}}],["format",{"_index":1018,"t":{"77":{"position":[[209,6]]}}}],["formatit",{"_index":714,"t":{"41":{"position":[[197,8]]}}}],["formula",{"_index":254,"t":{"10":{"position":[[1901,8]]}}}],["forthcom",{"_index":569,"t":{"21":{"position":[[97,11]]}}}],["forward",{"_index":773,"t":{"45":{"position":[[29,7]]},"59":{"position":[[23,10]]},"75":{"position":[[29,7],[205,7],[541,7]]}}}],["foundat",{"_index":25,"t":{"2":{"position":[[307,12]]},"4":{"position":[[1020,11]]},"23":{"position":[[517,10]]}}}],["four",{"_index":464,"t":{"12":{"position":[[363,4]]}}}],["free",{"_index":427,"t":{"10":{"position":[[6993,4]]},"93":{"position":[[64,4]]}}}],["frobeniu",{"_index":760,"t":{"43":{"position":[[220,9]]}}}],["front",{"_index":647,"t":{"31":{"position":[[168,7]]}}}],["frontend",{"_index":801,"t":{"49":{"position":[[578,8],[649,8]]}}}],["full",{"_index":345,"t":{"10":{"position":[[4223,4],[4306,4],[4763,4],[4888,4]]},"18":{"position":[[13,4]]},"77":{"position":[[323,4]]},"91":{"position":[[666,4]]}}}],["fulli",{"_index":454,"t":{"12":{"position":[[56,5]]}}}],["function",{"_index":507,"t":{"14":{"position":[[857,11]]},"53":{"position":[[60,8]]},"55":{"position":[[252,10],[428,9]]},"67":{"position":[[217,13]]},"69":{"position":[[207,13]]},"75":{"position":[[322,16]]},"99":{"position":[[802,13]]}}}],["further",{"_index":1085,"t":{"89":{"position":[[1026,7]]}}}],["furthermor",{"_index":65,"t":{"4":{"position":[[521,12]]}}}],["futur",{"_index":971,"t":{"73":{"position":[[1436,6]]}}}],["gap",{"_index":74,"t":{"4":{"position":[[671,3]]}}}],["gener",{"_index":524,"t":{"16":{"position":[[629,10],[1573,9]]},"27":{"position":[[269,7]]},"55":{"position":[[50,9],[290,9],[593,10]]},"75":{"position":[[192,8]]},"103":{"position":[[5,7]]}}}],["getaddress",{"_index":724,"t":{"41":{"position":[[476,10]]}}}],["geth",{"_index":875,"t":{"59":{"position":[[254,4]]}}}],["github",{"_index":623,"t":{"27":{"position":[[537,6]]},"51":{"position":[[268,7]]}}}],["give",{"_index":457,"t":{"12":{"position":[[191,6]]}}}],["gmbh",{"_index":930,"t":{"71":{"position":[[227,4]]},"97":{"position":[[286,4]]}}}],["gnutella",{"_index":104,"t":{"4":{"position":[[1199,9]]}}}],["go",{"_index":258,"t":{"10":{"position":[[1981,2]]}}}],["goal",{"_index":488,"t":{"14":{"position":[[315,6]]},"43":{"position":[[9,5]]}}}],["good",{"_index":289,"t":{"10":{"position":[[2681,4]]},"27":{"position":[[457,5]]}}}],["googl",{"_index":175,"t":{"10":{"position":[[321,6]]},"99":{"position":[[1085,6]]},"101":{"position":[[453,6],[745,6]]}}}],["govern",{"_index":913,"t":{"69":{"position":[[137,6]]},"79":{"position":[[132,6]]},"87":{"position":[[10,7]]}}}],["groth16",{"_index":764,"t":{"43":{"position":[[288,7]]},"55":{"position":[[737,7],[788,7]]},"67":{"position":[[161,8]]}}}],["group",{"_index":856,"t":{"57":{"position":[[31,5]]}}}],["guarante",{"_index":11,"t":{"2":{"position":[[119,11]]},"4":{"position":[[983,11],[1375,10]]},"6":{"position":[[233,11]]},"8":{"position":[[189,10]]},"12":{"position":[[555,11]]},"16":{"position":[[1355,9]]},"25":{"position":[[120,10]]},"73":{"position":[[1355,10]]}}}],["guarantees—expect",{"_index":581,"t":{"21":{"position":[[379,19]]}}}],["guarantees—up",{"_index":462,"t":{"12":{"position":[[284,13]]}}}],["halt",{"_index":898,"t":{"67":{"position":[[27,6]]}}}],["handl",{"_index":361,"t":{"10":{"position":[[4550,6]]},"41":{"position":[[905,6]]},"49":{"position":[[247,6]]},"51":{"position":[[114,8]]}}}],["hardwar",{"_index":515,"t":{"16":{"position":[[114,8]]}}}],["harm",{"_index":287,"t":{"10":{"position":[[2615,4]]},"79":{"position":[[423,8]]}}}],["harmless",{"_index":1048,"t":{"83":{"position":[[35,8]]}}}],["hash",{"_index":823,"t":{"53":{"position":[[55,4]]},"55":{"position":[[247,4]]},"67":{"position":[[259,4]]}}}],["have",{"_index":308,"t":{"10":{"position":[[3145,6]]}}}],["head",{"_index":1125,"t":{"91":{"position":[[268,8]]}}}],["heard",{"_index":1072,"t":{"89":{"position":[[495,5]]}}}],["held",{"_index":1030,"t":{"81":{"position":[[15,4]]},"89":{"position":[[1519,4]]},"91":{"position":[[532,4]]}}}],["help",{"_index":256,"t":{"10":{"position":[[1938,7]]},"27":{"position":[[365,4]]}}}],["here",{"_index":625,"t":{"27":{"position":[[549,5]]},"29":{"position":[[448,4]]},"49":{"position":[[604,5]]},"99":{"position":[[1007,5]]}}}],["herein",{"_index":964,"t":{"73":{"position":[[994,6],[1257,6],[1493,7],[1527,6]]},"75":{"position":[[825,6],[1004,7]]},"89":{"position":[[1422,6]]}}}],["high",{"_index":54,"t":{"4":{"position":[[333,4]]},"10":{"position":[[137,4],[721,4],[2212,4],[3354,4]]},"75":{"position":[[500,4],[1027,4]]}}}],["highli",{"_index":40,"t":{"4":{"position":[[157,6]]},"10":{"position":[[104,6]]},"27":{"position":[[22,6]]}}}],["highlight",{"_index":782,"t":{"45":{"position":[[203,11]]}}}],["histori",{"_index":57,"t":{"4":{"position":[[399,7]]},"10":{"position":[[519,7],[4244,7],[4311,7],[4627,7],[4773,7],[4893,8]]}}}],["hold",{"_index":1047,"t":{"83":{"position":[[27,4]]}}}],["host",{"_index":458,"t":{"12":{"position":[[198,5]]},"16":{"position":[[1884,6]]},"25":{"position":[[345,4],[495,5]]}}}],["https://api.codex.storag",{"_index":800,"t":{"49":{"position":[[452,25]]}}}],["https://creativecommons.org/licenses/by/4.0",{"_index":1020,"t":{"77":{"position":[[390,45]]}}}],["https://github.com/codex",{"_index":804,"t":{"49":{"position":[[610,24]]},"51":{"position":[[311,24],[426,24]]},"53":{"position":[[257,24],[311,24],[365,24],[440,24],[560,24],[672,24]]},"55":{"position":[[610,24],[751,24]]},"61":{"position":[[128,24]]},"65":{"position":[[45,24]]}}}],["https://usefathom.com",{"_index":1149,"t":{"99":{"position":[[1013,23]]}}}],["https://vimeo.com/884370956/e8a32a58c8?share=copi",{"_index":880,"t":{"61":{"position":[[170,49]]}}}],["hundr",{"_index":857,"t":{"57":{"position":[[68,8]]},"81":{"position":[[537,7]]}}}],["ideat",{"_index":771,"t":{"43":{"position":[[428,8]]}}}],["identifi",{"_index":1126,"t":{"91":{"position":[[277,11]]},"99":{"position":[[691,11]]},"101":{"position":[[619,8]]}}}],["ii",{"_index":1081,"t":{"89":{"position":[[965,4]]}}}],["immedi",{"_index":1053,"t":{"85":{"position":[[217,11]]},"111":{"position":[[185,11]]}}}],["immin",{"_index":899,"t":{"67":{"position":[[85,8]]}}}],["imperson",{"_index":445,"t":{"10":{"position":[[7439,13]]}}}],["implement",{"_index":196,"t":{"10":{"position":[[757,14]]},"21":{"position":[[308,9]]},"34":{"position":[[156,12]]},"43":{"position":[[253,14]]},"49":{"position":[[105,15]]},"53":{"position":[[131,14]]},"55":{"position":[[559,14],[719,14]]},"67":{"position":[[50,12]]},"103":{"position":[[67,11]]}}}],["impli",{"_index":943,"t":{"73":{"position":[[163,8],[1385,7]]},"79":{"position":[[246,5]]}}}],["improv",{"_index":100,"t":{"4":{"position":[[1136,7]]},"38":{"position":[[428,12]]},"43":{"position":[[46,12],[112,12],[328,12]]}}}],["incent",{"_index":90,"t":{"4":{"position":[[945,10]]},"10":{"position":[[670,11],[4051,9],[6072,10]]},"14":{"position":[[148,9],[268,9],[582,9],[820,10]]},"43":{"position":[[140,9],[167,10]]}}}],["incentiv",{"_index":475,"t":{"12":{"position":[[723,16]]},"14":{"position":[[0,15]]},"23":{"position":[[382,15]]},"25":{"position":[[553,13]]}}}],["incid",{"_index":72,"t":{"4":{"position":[[646,9]]},"93":{"position":[[127,9]]}}}],["incident",{"_index":1038,"t":{"81":{"position":[[202,11]]}}}],["includ",{"_index":720,"t":{"41":{"position":[[362,9]]},"55":{"position":[[328,8]]},"57":{"position":[[352,7]]},"67":{"position":[[133,8]]},"69":{"position":[[181,9]]},"73":{"position":[[172,9]]},"75":{"position":[[243,7],[727,9],[1259,9]]},"77":{"position":[[233,9]]},"79":{"position":[[104,9]]},"83":{"position":[[103,9],[210,9]]},"89":{"position":[[74,8],[1873,9]]}}}],["incorpor",{"_index":323,"t":{"10":{"position":[[3677,12]]},"89":{"position":[[1409,12]]}}}],["increas",{"_index":469,"t":{"12":{"position":[[529,9]]},"14":{"position":[[385,8]]}}}],["increasingli",{"_index":30,"t":{"4":{"position":[[48,12]]}}}],["incumb",{"_index":112,"t":{"4":{"position":[[1400,11]]}}}],["indemnifi",{"_index":1046,"t":{"83":{"position":[[10,9]]}}}],["independ",{"_index":1206,"t":{"109":{"position":[[110,11]]}}}],["index",{"_index":810,"t":{"51":{"position":[[127,8]]}}}],["indic",{"_index":398,"t":{"10":{"position":[[5983,8]]},"99":{"position":[[433,9]]}}}],["individu",{"_index":1171,"t":{"101":{"position":[[628,10]]}}}],["industri",{"_index":988,"t":{"75":{"position":[[168,8]]}}}],["inform",{"_index":366,"t":{"10":{"position":[[4645,11]]},"73":{"position":[[1076,13],[1245,11],[1505,11]]},"75":{"position":[[803,11],[982,11],[1246,12]]},"95":{"position":[[78,6]]},"101":{"position":[[672,11],[887,11]]},"103":{"position":[[191,11]]},"107":{"position":[[937,11]]}}}],["infrastructur",{"_index":645,"t":{"31":{"position":[[80,14]]},"47":{"position":[[84,14]]},"57":{"position":[[16,14]]}}}],["infring",{"_index":947,"t":{"73":{"position":[[278,12]]}}}],["inher",{"_index":170,"t":{"10":{"position":[[225,8]]}}}],["initi",{"_index":300,"t":{"10":{"position":[[2940,11],[7013,7]]},"23":{"position":[[207,7],[429,7]]},"25":{"position":[[298,8]]},"29":{"position":[[55,11]]}}}],["innat",{"_index":456,"t":{"12":{"position":[[149,8]]}}}],["input",{"_index":854,"t":{"55":{"position":[[587,5]]}}}],["insight",{"_index":1155,"t":{"99":{"position":[[1190,9],[1293,8]]}}}],["instanc",{"_index":206,"t":{"10":{"position":[[930,9]]}}}],["instead",{"_index":736,"t":{"41":{"position":[[923,7]]}}}],["institut",{"_index":1093,"t":{"89":{"position":[[1275,11]]},"93":{"position":[[51,9]]}}}],["intact",{"_index":236,"t":{"10":{"position":[[1489,7]]}}}],["integr",{"_index":594,"t":{"23":{"position":[[326,11]]},"36":{"position":[[95,11]]},"41":{"position":[[29,11],[137,11],[740,9],[813,11]]},"49":{"position":[[268,12],[504,9]]},"51":{"position":[[561,9]]},"65":{"position":[[11,11]]}}}],["intellectu",{"_index":948,"t":{"73":{"position":[[294,12]]}}}],["intend",{"_index":508,"t":{"14":{"position":[[872,9]]},"73":{"position":[[1042,8]]},"95":{"position":[[66,8]]}}}],["interact",{"_index":326,"t":{"10":{"position":[[3703,11]]},"49":{"position":[[325,12]]},"63":{"position":[[300,13]]},"101":{"position":[[218,8],[513,8]]}}}],["interest",{"_index":150,"t":{"8":{"position":[[348,10]]},"99":{"position":[[737,8]]}}}],["intermitt",{"_index":431,"t":{"10":{"position":[[7102,12]]}}}],["intern",{"_index":352,"t":{"10":{"position":[[4427,8]]},"29":{"position":[[128,8]]},"77":{"position":[[87,13]]},"89":{"position":[[1325,13],[1972,13]]}}}],["internet",{"_index":33,"t":{"4":{"position":[[77,8]]}}}],["interpret",{"_index":1130,"t":{"91":{"position":[[423,14]]}}}],["interv",{"_index":538,"t":{"16":{"position":[[1281,8]]}}}],["invalid",{"_index":340,"t":{"10":{"position":[[3985,7]]},"16":{"position":[[1414,7]]},"91":{"position":[[537,7]]}}}],["involv",{"_index":247,"t":{"10":{"position":[[1749,8]]},"14":{"position":[[607,7]]}}}],["io",{"_index":665,"t":{"34":{"position":[[237,2]]}}}],["ip",{"_index":873,"t":{"59":{"position":[[186,2]]},"99":{"position":[[549,2],[658,2],[765,2],[871,2]]}}}],["issu",{"_index":275,"t":{"10":{"position":[[2357,7],[7409,6]]},"34":{"position":[[17,5]]},"41":{"position":[[391,5]]},"61":{"position":[[47,6]]},"65":{"position":[[115,6]]}}}],["issuanc",{"_index":447,"t":{"10":{"position":[[7466,8]]},"63":{"position":[[269,9]]}}}],["issues—such",{"_index":83,"t":{"4":{"position":[[822,11]]}}}],["it'",{"_index":377,"t":{"10":{"position":[[5235,4],[6920,4]]}}}],["iter",{"_index":564,"t":{"21":{"position":[[49,10]]}}}],["itself",{"_index":303,"t":{"10":{"position":[[3065,6]]}}}],["join",{"_index":161,"t":{"8":{"position":[[526,4]]}}}],["json",{"_index":708,"t":{"38":{"position":[[494,4]]},"41":{"position":[[415,4],[618,4],[672,4],[986,4]]}}}],["judg",{"_index":1073,"t":{"89":{"position":[[506,6]]}}}],["june",{"_index":130,"t":{"6":{"position":[[304,4]]}}}],["juri",{"_index":1075,"t":{"89":{"position":[[615,4]]}}}],["jurisdict",{"_index":963,"t":{"73":{"position":[[826,13]]},"89":{"position":[[650,14]]}}}],["katana",{"_index":568,"t":{"21":{"position":[[85,6],[415,7]]}}}],["keep",{"_index":226,"t":{"10":{"position":[[1285,4],[1460,5],[2736,7]]}}}],["kept",{"_index":1105,"t":{"89":{"position":[[1742,4]]}}}],["key",{"_index":306,"t":{"10":{"position":[[3131,3]]},"12":{"position":[[368,3]]},"14":{"position":[[42,3]]},"53":{"position":[[425,5]]},"61":{"position":[[315,3],[342,4]]}}}],["kind",{"_index":185,"t":{"10":{"position":[[541,4]]},"73":{"position":[[146,5]]}}}],["knowledg",{"_index":153,"t":{"8":{"position":[[427,10]]},"10":{"position":[[3728,9]]},"18":{"position":[[99,9]]},"53":{"position":[[82,9]]}}}],["known",{"_index":248,"t":{"10":{"position":[[1786,5]]},"89":{"position":[[2160,5]]}}}],["lack",{"_index":50,"t":{"4":{"position":[[289,4],[1235,5]]}}}],["laid",{"_index":1193,"t":{"107":{"position":[[240,4]]}}}],["landscap",{"_index":28,"t":{"4":{"position":[[19,9]]}}}],["languag",{"_index":1107,"t":{"89":{"position":[[1765,8]]}}}],["larg",{"_index":318,"t":{"10":{"position":[[3478,5]]}}}],["last",{"_index":908,"t":{"69":{"position":[[13,4]]},"95":{"position":[[13,4]]}}}],["later",{"_index":139,"t":{"8":{"position":[[204,5]]}}}],["latest",{"_index":633,"t":{"29":{"position":[[215,6]]}}}],["latter",{"_index":503,"t":{"14":{"position":[[729,6]]}}}],["launch",{"_index":779,"t":{"45":{"position":[[101,9]]},"57":{"position":[[157,6]]},"67":{"position":[[94,6]]}}}],["law",{"_index":960,"t":{"73":{"position":[[708,4],[976,5]]},"81":{"position":[[639,4]]},"87":{"position":[[6,3],[145,4]]},"89":{"position":[[66,3]]}}}],["lawsuit",{"_index":1117,"t":{"89":{"position":[[2241,7]]}}}],["layer",{"_index":13,"t":{"2":{"position":[[156,5],[221,6],[258,6]]},"6":{"position":[[75,5]]},"25":{"position":[[583,5]]}}}],["lazi",{"_index":200,"t":{"10":{"position":[[813,4],[2247,4],[2284,4]]},"12":{"position":[[645,4]]}}}],["legal",{"_index":925,"t":{"71":{"position":[[152,5]]},"73":{"position":[[431,9],[785,7],[1565,6]]},"81":{"position":[[93,5]]},"97":{"position":[[212,5]]},"99":{"position":[[199,5]]}}}],["legal@free.technolog",{"_index":1134,"t":{"91":{"position":[[902,22]]},"113":{"position":[[89,22]]}}}],["legisl",{"_index":1142,"t":{"99":{"position":[[245,12]]},"105":{"position":[[713,12]]},"107":{"position":[[269,12]]}}}],["legitim",{"_index":1147,"t":{"99":{"position":[[726,10]]}}}],["let",{"_index":260,"t":{"10":{"position":[[2020,4]]}}}],["level",{"_index":271,"t":{"10":{"position":[[2217,5],[3359,6]]},"57":{"position":[[401,5]]},"105":{"position":[[297,5]]}}}],["liabil",{"_index":1032,"t":{"81":{"position":[[73,10],[484,9],[572,9]]},"109":{"position":[[179,9]]}}}],["liabl",{"_index":1029,"t":{"79":{"position":[[498,6]]},"81":{"position":[[20,6]]}}}],["lib",{"_index":730,"t":{"41":{"position":[[736,3]]}}}],["licenc",{"_index":1015,"t":{"77":{"position":[[138,7],[342,8]]}}}],["licens",{"_index":1012,"t":{"77":{"position":[[101,7]]},"91":{"position":[[942,8]]},"113":{"position":[[129,8]]}}}],["lightweight",{"_index":471,"t":{"12":{"position":[[605,11]]}}}],["limit",{"_index":411,"t":{"10":{"position":[[6284,7]]},"73":{"position":[[190,10]]},"81":{"position":[[513,7],[558,10]]},"83":{"position":[[228,10]]},"89":{"position":[[570,8],[2039,12]]},"91":{"position":[[402,6]]},"99":{"position":[[10,5]]},"101":{"position":[[19,7]]},"107":{"position":[[40,5]]}}}],["line",{"_index":637,"t":{"29":{"position":[[322,5]]}}}],["link",{"_index":621,"t":{"27":{"position":[[418,6]]},"73":{"position":[[613,6]]},"79":{"position":[[39,5],[182,7]]},"109":{"position":[[37,5]]}}}],["liter",{"_index":395,"t":{"10":{"position":[[5931,7]]}}}],["litig",{"_index":1065,"t":{"89":{"position":[[277,10],[474,10]]}}}],["littl",{"_index":223,"t":{"10":{"position":[[1206,6]]}}}],["llc",{"_index":1167,"t":{"101":{"position":[[460,4]]}}}],["load",{"_index":523,"t":{"16":{"position":[[599,7]]}}}],["local",{"_index":348,"t":{"10":{"position":[[4332,7]]},"41":{"position":[[284,5]]},"49":{"position":[[203,5]]},"73":{"position":[[970,5]]}}}],["locat",{"_index":246,"t":{"10":{"position":[[1712,9]]}}}],["log",{"_index":715,"t":{"41":{"position":[[210,7]]},"61":{"position":[[114,3]]},"101":{"position":[[730,6]]}}}],["logic",{"_index":600,"t":{"25":{"position":[[44,7]]},"63":{"position":[[98,5]]}}}],["logo",{"_index":14,"t":{"2":{"position":[[169,5],[288,5]]},"6":{"position":[[275,5]]},"10":{"position":[[2786,6],[2850,6],[2881,5],[2934,5]]},"71":{"position":[[75,5],[179,5],[291,8],[368,5]]},"97":{"position":[[135,5],[238,5],[350,8],[417,5]]}}}],["long",{"_index":263,"t":{"10":{"position":[[2091,4],[5111,4]]},"16":{"position":[[250,4]]},"67":{"position":[[364,4]]}}}],["longsword",{"_index":576,"t":{"21":{"position":[[218,10]]},"23":{"position":[[257,9]]}}}],["look",{"_index":618,"t":{"27":{"position":[[332,7]]},"38":{"position":[[337,4]]},"41":{"position":[[782,4]]},"75":{"position":[[37,7],[213,7],[549,7]]}}}],["lookup",{"_index":754,"t":{"43":{"position":[[71,8]]}}}],["lose",{"_index":215,"t":{"10":{"position":[[1057,6],[1097,4],[1192,6],[5537,5]]}}}],["loss",{"_index":188,"t":{"10":{"position":[[622,4],[3225,4],[3655,4],[3779,4]]},"12":{"position":[[706,4]]}}}],["lost",{"_index":231,"t":{"10":{"position":[[1378,4],[2407,4]]},"81":{"position":[[127,4]]}}}],["low",{"_index":291,"t":{"10":{"position":[[2703,4]]},"16":{"position":[[684,3]]}}}],["m",{"_index":266,"t":{"10":{"position":[[2136,2]]}}}],["machin",{"_index":792,"t":{"49":{"position":[[209,8]]}}}],["made",{"_index":965,"t":{"73":{"position":[[1057,4]]},"77":{"position":[[33,4]]}}}],["magic",{"_index":691,"t":{"38":{"position":[[187,9]]}}}],["main",{"_index":860,"t":{"57":{"position":[[257,4]]}}}],["mainli",{"_index":777,"t":{"45":{"position":[[85,6]]}}}],["mainnet",{"_index":640,"t":{"29":{"position":[[430,7]]}}}],["mainstream",{"_index":616,"t":{"27":{"position":[[166,10]]}}}],["maintain",{"_index":590,"t":{"23":{"position":[[146,8]]},"57":{"position":[[380,9]]},"103":{"position":[[128,8]]}}}],["major",{"_index":68,"t":{"4":{"position":[[578,5]]},"10":{"position":[[6947,8]]},"23":{"position":[[46,5]]}}}],["make",{"_index":91,"t":{"4":{"position":[[1000,4]]},"10":{"position":[[465,6],[2502,4]]},"16":{"position":[[803,4]]},"29":{"position":[[28,4]]},"67":{"position":[[295,4]]},"73":{"position":[[367,4],[716,4]]},"89":{"position":[[97,4],[953,7]]},"99":{"position":[[947,4]]},"101":{"position":[[138,6]]}}}],["malici",{"_index":498,"t":{"14":{"position":[[515,9]]}}}],["manag",{"_index":274,"t":{"10":{"position":[[2343,8]]},"49":{"position":[[293,11]]}}}],["manifest",{"_index":848,"t":{"55":{"position":[[280,9]]}}}],["manner",{"_index":1069,"t":{"89":{"position":[[388,7]]}}}],["market",{"_index":75,"t":{"4":{"position":[[682,6],[1222,6]]},"10":{"position":[[3037,7],[3108,6]]},"75":{"position":[[181,7],[620,6]]}}}],["marketplac",{"_index":310,"t":{"10":{"position":[[3164,11],[3261,11],[3328,11]]},"14":{"position":[[130,11],[617,11]]},"21":{"position":[[343,12]]},"23":{"position":[[285,12],[310,11],[360,11]]},"27":{"position":[[283,11]]},"31":{"position":[[95,11]]},"41":{"position":[[125,11]]},"47":{"position":[[99,11]]},"49":{"position":[[347,12]]},"55":{"position":[[111,11]]},"63":{"position":[[4,11]]}}}],["mathemat",{"_index":253,"t":{"10":{"position":[[1888,12]]}}}],["matter",{"_index":972,"t":{"73":{"position":[[1475,7]]},"75":{"position":[[437,7],[1123,7]]}}}],["maximis",{"_index":495,"t":{"14":{"position":[[469,8]]}}}],["maximum",{"_index":957,"t":{"73":{"position":[[669,7]]},"81":{"position":[[600,7]]}}}],["mean",{"_index":202,"t":{"10":{"position":[[867,5],[1005,5],[2075,7],[7659,5]]},"69":{"position":[[375,5]]},"89":{"position":[[43,7]]},"91":{"position":[[760,4]]},"105":{"position":[[197,5]]}}}],["measur",{"_index":1148,"t":{"99":{"position":[[841,8]]},"103":{"position":[[101,8]]}}}],["mechan",{"_index":473,"t":{"12":{"position":[[657,10]]},"14":{"position":[[16,10]]},"25":{"position":[[264,9],[472,9]]},"43":{"position":[[395,9]]}}}],["meet",{"_index":1066,"t":{"89":{"position":[[305,5]]}}}],["member",{"_index":641,"t":{"29":{"position":[[489,7]]}}}],["merchant",{"_index":944,"t":{"73":{"position":[[219,16]]}}}],["merg",{"_index":814,"t":{"51":{"position":[[302,8]]},"53":{"position":[[234,6]]}}}],["merkel",{"_index":788,"t":{"49":{"position":[[66,14]]},"51":{"position":[[10,14],[186,14],[276,13]]}}}],["merkl",{"_index":831,"t":{"53":{"position":[[503,6]]},"67":{"position":[[268,6]]}}}],["messag",{"_index":882,"t":{"61":{"position":[[278,8]]}}}],["metadata",{"_index":807,"t":{"51":{"position":[[57,8]]}}}],["method",{"_index":227,"t":{"10":{"position":[[1306,6],[2013,6],[2301,6]]},"16":{"position":[[584,6]]},"89":{"position":[[1602,7]]}}}],["microsoft",{"_index":35,"t":{"4":{"position":[[106,10]]}}}],["mileston",{"_index":587,"t":{"23":{"position":[[52,10]]}}}],["million",{"_index":218,"t":{"10":{"position":[[1125,7],[1142,7]]}}}],["miss",{"_index":259,"t":{"10":{"position":[[1984,7]]},"14":{"position":[[53,7]]},"16":{"position":[[1811,7]]}}}],["mission",{"_index":364,"t":{"10":{"position":[[4610,7]]}}}],["mitig",{"_index":834,"t":{"53":{"position":[[534,8]]}}}],["mobil",{"_index":435,"t":{"10":{"position":[[7169,6]]}}}],["mode",{"_index":746,"t":{"41":{"position":[[1053,6]]},"101":{"position":[[498,5]]}}}],["model",{"_index":769,"t":{"43":{"position":[[365,6]]}}}],["modifi",{"_index":1017,"t":{"77":{"position":[[168,6]]},"85":{"position":[[7,6]]},"91":{"position":[[386,7]]},"111":{"position":[[7,6]]}}}],["monitor",{"_index":858,"t":{"57":{"position":[[102,7]]}}}],["more",{"_index":439,"t":{"10":{"position":[[7253,4]]},"27":{"position":[[344,4]]},"43":{"position":[[350,4]]},"99":{"position":[[996,4]]}}}],["mostli",{"_index":897,"t":{"67":{"position":[[20,6]]}}}],["move",{"_index":646,"t":{"31":{"position":[[150,6]]},"45":{"position":[[22,6]]}}}],["multinod",{"_index":711,"t":{"41":{"position":[[19,9]]}}}],["multipl",{"_index":510,"t":{"16":{"position":[[21,8]]},"55":{"position":[[271,8]]}}}],["n",{"_index":265,"t":{"10":{"position":[[2126,2]]}}}],["name",{"_index":117,"t":{"6":{"position":[[110,4]]}}}],["natur",{"_index":606,"t":{"25":{"position":[[567,10]]},"89":{"position":[[908,6]]}}}],["near",{"_index":900,"t":{"67":{"position":[[142,4]]}}}],["need",{"_index":115,"t":{"6":{"position":[[33,4]]},"10":{"position":[[4684,4],[5172,5],[5332,5],[5790,5]]},"25":{"position":[[465,4]]},"99":{"position":[[321,4],[418,6]]}}}],["neglig",{"_index":1031,"t":{"81":{"position":[[54,11]]}}}],["network",{"_index":81,"t":{"4":{"position":[[791,8],[863,7]]},"8":{"position":[[102,9],[403,8]]},"10":{"position":[[4137,9],[4955,8],[4988,7],[6341,7],[6555,8],[6636,8],[6908,7],[7351,8],[7564,8],[7778,8]]},"12":{"position":[[167,7],[784,7],[845,7]]},"14":{"position":[[91,9],[361,7]]},"16":{"position":[[886,7],[993,7],[1096,7],[1467,7]]},"27":{"position":[[380,8]]},"41":{"position":[[290,8]]}}}],["network'",{"_index":513,"t":{"16":{"position":[[78,9]]}}}],["new",{"_index":548,"t":{"16":{"position":[[1693,3]]},"29":{"position":[[318,3]]},"85":{"position":[[174,3]]},"111":{"position":[[148,3]]}}}],["next",{"_index":529,"t":{"16":{"position":[[766,4]]},"25":{"position":[[443,5]]},"29":{"position":[[395,4]]}}}],["nich",{"_index":467,"t":{"12":{"position":[[464,6]]}}}],["nim",{"_index":675,"t":{"36":{"position":[[46,3],[153,3]]},"41":{"position":[[331,3],[375,3],[404,3],[596,3],[772,3],[851,3],[982,3]]},"49":{"position":[[91,3]]},"51":{"position":[[374,3]]},"53":{"position":[[106,3],[127,3]]},"55":{"position":[[545,3]]}}}],["nimbl",{"_index":652,"t":{"34":{"position":[[46,6]]}}}],["nimbu",{"_index":706,"t":{"38":{"position":[[404,6]]}}}],["nine",{"_index":208,"t":{"10":{"position":[[983,5]]}}}],["node",{"_index":319,"t":{"10":{"position":[[3484,6],[4349,5],[4737,4],[4870,4],[4938,5],[5007,6],[5025,6],[5040,6],[5058,6],[5083,5],[5097,5],[5153,4],[5302,4],[5393,4],[5482,4],[5592,5],[5609,5],[5761,6],[5780,4],[6056,5],[6120,5],[6253,5],[6383,4],[6409,4],[6445,6],[6469,5],[6482,5],[6506,5],[6582,5],[6618,4],[6690,5],[6732,4],[6759,4],[6811,5],[6851,5],[6959,5],[7059,6],[7088,5]]},"14":{"position":[[210,4],[420,5]]},"16":{"position":[[30,4],[140,4],[233,5],[296,5],[577,4],[674,4],[784,5],[797,5],[827,5],[909,6],[961,5],[1032,4],[1145,4],[1202,5],[1403,4],[1494,4],[1563,4],[1912,6]]},"57":{"position":[[80,5]]},"59":{"position":[[229,5],[269,5]]},"63":{"position":[[177,5]]}}}],["node'",{"_index":546,"t":{"16":{"position":[[1662,6],[1705,6]]}}}],["nomo",{"_index":20,"t":{"2":{"position":[[228,6]]}}}],["non",{"_index":325,"t":{"10":{"position":[[3699,3]]},"34":{"position":[[42,3]]},"73":{"position":[[274,3]]},"79":{"position":[[419,3]]}}}],["nonetheless",{"_index":1191,"t":{"107":{"position":[[117,12]]}}}],["normal",{"_index":741,"t":{"41":{"position":[[998,9]]}}}],["note",{"_index":394,"t":{"10":{"position":[[5869,4]]},"89":{"position":[[520,4]]},"99":{"position":[[934,4]]}}}],["noth",{"_index":978,"t":{"73":{"position":[[1628,7]]}}}],["notic",{"_index":1008,"t":{"75":{"position":[[1392,6]]},"85":{"position":[[87,7]]},"89":{"position":[[870,6],[1108,6]]},"111":{"position":[[81,7]]}}}],["novel",{"_index":195,"t":{"10":{"position":[[751,5]]}}}],["now",{"_index":453,"t":{"10":{"position":[[7864,4]]}}}],["number",{"_index":32,"t":{"4":{"position":[[67,6]]},"10":{"position":[[2109,6],[2671,6]]},"16":{"position":[[392,6]]}}}],["numer",{"_index":69,"t":{"4":{"position":[[621,8]]}}}],["object",{"_index":1199,"t":{"107":{"position":[[831,6]]}}}],["oblig",{"_index":967,"t":{"73":{"position":[[1222,10]]},"105":{"position":[[7,7]]}}}],["occas",{"_index":70,"t":{"4":{"position":[[630,10]]}}}],["occur",{"_index":1188,"t":{"105":{"position":[[669,5]]}}}],["offer",{"_index":109,"t":{"4":{"position":[[1339,8]]},"10":{"position":[[385,5],[2031,5],[6673,7]]},"21":{"position":[[437,5]]},"25":{"position":[[175,7]]},"73":{"position":[[1685,5],[1725,5]]},"99":{"position":[[1271,6]]}}}],["offic",{"_index":923,"t":{"71":{"position":[[130,6]]},"97":{"position":[[190,6]]}}}],["offset",{"_index":426,"t":{"10":{"position":[[6860,6]]},"16":{"position":[[970,6]]}}}],["on",{"_index":23,"t":{"2":{"position":[[277,3]]},"10":{"position":[[1107,3]]},"14":{"position":[[31,3]]},"81":{"position":[[532,4]]},"89":{"position":[[1652,3],[2085,3]]}}}],["onc",{"_index":379,"t":{"10":{"position":[[5258,4]]}}}],["ongo",{"_index":636,"t":{"29":{"position":[[306,7],[507,7]]},"31":{"position":[[224,7]]},"34":{"position":[[113,8]]},"36":{"position":[[86,8]]},"38":{"position":[[209,8]]},"41":{"position":[[561,8]]},"43":{"position":[[305,8]]},"49":{"position":[[493,7]]},"55":{"position":[[711,7]]},"61":{"position":[[0,7]]},"67":{"position":[[117,7],[153,7]]}}}],["onlin",{"_index":534,"t":{"16":{"position":[[1153,6]]}}}],["open",{"_index":505,"t":{"14":{"position":[[747,4]]},"27":{"position":[[403,4],[438,4]]}}}],["openapi",{"_index":798,"t":{"49":{"position":[[425,7]]}}}],["oper",{"_index":349,"t":{"10":{"position":[[4374,12],[5161,7],[6099,7]]},"16":{"position":[[88,10],[171,9]]}}}],["optimis",{"_index":809,"t":{"51":{"position":[[85,10]]}}}],["optimum",{"_index":490,"t":{"14":{"position":[[353,7]]}}}],["optin",{"_index":748,"t":{"41":{"position":[[1068,6]]}}}],["option",{"_index":872,"t":{"59":{"position":[[139,7]]}}}],["optout",{"_index":747,"t":{"41":{"position":[[1060,7]]}}}],["oral",{"_index":1123,"t":{"91":{"position":[[216,5]]}}}],["orc",{"_index":669,"t":{"34":{"position":[[304,3]]}}}],["order",{"_index":997,"t":{"75":{"position":[[741,5]]}}}],["organ",{"_index":408,"t":{"10":{"position":[[6234,7]]}}}],["organisation’",{"_index":775,"t":{"45":{"position":[[50,14]]}}}],["organiz",{"_index":297,"t":{"10":{"position":[[2887,14]]}}}],["origin",{"_index":234,"t":{"10":{"position":[[1440,8],[1923,8],[2160,8]]},"38":{"position":[[155,6]]},"53":{"position":[[37,8]]}}}],["otherwis",{"_index":953,"t":{"73":{"position":[[549,9]]},"105":{"position":[[370,10]]}}}],["out",{"_index":217,"t":{"10":{"position":[[1116,3],[2129,3],[3026,3]]},"27":{"position":[[395,3],[529,3]]},"38":{"position":[[147,3]]},"41":{"position":[[710,3],[884,3]]},"55":{"position":[[420,3]]},"67":{"position":[[384,3]]},"89":{"position":[[896,3]]},"107":{"position":[[245,3]]}}}],["outag",{"_index":53,"t":{"4":{"position":[[325,7],[610,7]]}}}],["outsid",{"_index":1179,"t":{"105":{"position":[[149,7],[614,7]]}}}],["outstand",{"_index":825,"t":{"53":{"position":[[241,11]]}}}],["over",{"_index":204,"t":{"10":{"position":[[915,4],[1133,4]]},"12":{"position":[[226,4]]},"16":{"position":[[1273,4]]},"79":{"position":[[451,4]]},"89":{"position":[[272,4]]},"99":{"position":[[902,4]]},"101":{"position":[[788,4]]}}}],["overal",{"_index":288,"t":{"10":{"position":[[2624,7]]}}}],["overhead",{"_index":808,"t":{"51":{"position":[[66,9]]}}}],["owner",{"_index":61,"t":{"4":{"position":[[442,6]]}}}],["ownership",{"_index":51,"t":{"4":{"position":[[302,9]]}}}],["p2p",{"_index":102,"t":{"4":{"position":[[1155,3]]},"8":{"position":[[98,3]]},"10":{"position":[[4984,3]]}}}],["packag",{"_index":654,"t":{"34":{"position":[[65,8]]}}}],["packaging/loc",{"_index":705,"t":{"38":{"position":[[361,15]]}}}],["page",{"_index":907,"t":{"69":{"position":[[8,4]]},"95":{"position":[[8,4]]},"99":{"position":[[1314,6]]},"101":{"position":[[899,5]]}}}],["pair",{"_index":762,"t":{"43":{"position":[[245,7]]}}}],["pariti",{"_index":251,"t":{"10":{"position":[[1822,7],[1856,6]]}}}],["part",{"_index":240,"t":{"10":{"position":[[1629,6],[1691,5],[2778,4]]},"16":{"position":[[727,4]]},"38":{"position":[[414,4]]},"85":{"position":[[29,4]]},"91":{"position":[[494,4],[568,4]]},"99":{"position":[[564,4]]},"111":{"position":[[29,4]]}}}],["parti",{"_index":1022,"t":{"79":{"position":[[56,5],[163,5],[201,5],[292,5],[358,5],[467,5],[548,5],[618,5],[742,5]]},"89":{"position":[[1726,7]]},"101":{"position":[[66,7],[243,5]]},"105":{"position":[[264,7]]},"109":{"position":[[52,5],[80,5],[235,5]]}}}],["partial",{"_index":580,"t":{"21":{"position":[[360,7]]}}}],["particip",{"_index":392,"t":{"10":{"position":[[5830,11],[6887,13],[6968,11],[7753,11],[7907,11]]},"12":{"position":[[175,12],[792,14]]},"14":{"position":[[185,13],[394,13],[525,14],[632,12],[806,13]]},"16":{"position":[[212,12],[926,12]]},"89":{"position":[[2211,11]]}}}],["particular",{"_index":946,"t":{"73":{"position":[[250,10]]}}}],["particularli",{"_index":362,"t":{"10":{"position":[[4586,12]]}}}],["pass",{"_index":719,"t":{"41":{"position":[[353,8]]}}}],["past",{"_index":631,"t":{"29":{"position":[[170,4]]},"67":{"position":[[63,4]]},"73":{"position":[[1415,5]]}}}],["patch",{"_index":750,"t":{"41":{"position":[[1100,5]]}}}],["pay",{"_index":547,"t":{"16":{"position":[[1680,4]]}}}],["payment",{"_index":424,"t":{"10":{"position":[[6712,9]]},"63":{"position":[[208,9]]},"89":{"position":[[1813,7]]}}}],["peer",{"_index":78,"t":{"4":{"position":[[753,4],[761,4]]}}}],["penal",{"_index":382,"t":{"10":{"position":[[5436,9],[5723,9]]}}}],["penalti",{"_index":522,"t":{"16":{"position":[[555,10]]}}}],["peopl",{"_index":1161,"t":{"99":{"position":[[1366,6]]}}}],["per",{"_index":698,"t":{"38":{"position":[[269,3]]}}}],["perfectli",{"_index":268,"t":{"10":{"position":[[2181,9]]}}}],["perform",{"_index":110,"t":{"4":{"position":[[1348,11]]},"61":{"position":[[21,11],[241,11]]}}}],["period",{"_index":381,"t":{"10":{"position":[[5341,12],[6422,7]]},"16":{"position":[[501,8]]},"85":{"position":[[140,12]]},"111":{"position":[[114,12]]}}}],["permit",{"_index":959,"t":{"73":{"position":[[684,9]]},"81":{"position":[[615,9]]}}}],["persist",{"_index":135,"t":{"8":{"position":[[79,10]]}}}],["person",{"_index":433,"t":{"10":{"position":[[7146,8]]},"97":{"position":[[77,8]]},"99":{"position":[[64,8],[141,8],[293,8],[352,8],[505,8],[1204,8]]},"101":{"position":[[45,8],[97,8],[574,8]]},"103":{"position":[[156,8]]},"105":{"position":[[41,8],[125,8],[208,8],[482,8],[600,8]]},"107":{"position":[[84,8],[190,8],[338,8],[403,8],[461,8],[588,8],[864,8],[996,8]]}}}],["personalis",{"_index":1172,"t":{"101":{"position":[[687,11]]}}}],["phase",{"_index":451,"t":{"10":{"position":[[7804,5],[7934,5]]}}}],["piec",{"_index":230,"t":{"10":{"position":[[1369,5],[1405,6],[1778,7],[2380,5]]},"14":{"position":[[46,6]]}}}],["pillar",{"_index":296,"t":{"10":{"position":[[2840,6]]}}}],["pin",{"_index":707,"t":{"38":{"position":[[462,6]]}}}],["place",{"_index":229,"t":{"10":{"position":[[1352,7]]},"34":{"position":[[141,5]]},"75":{"position":[[1095,5]]},"101":{"position":[[552,5]]},"105":{"position":[[142,6]]}}}],["placement",{"_index":869,"t":{"59":{"position":[[72,9]]}}}],["plan",{"_index":357,"t":{"10":{"position":[[4476,7]]},"34":{"position":[[280,5]]}}}],["platform",{"_index":4,"t":{"2":{"position":[[38,8]]},"4":{"position":[[546,9],[1172,9]]}}}],["plausibl",{"_index":459,"t":{"12":{"position":[[204,9]]}}}],["pleas",{"_index":443,"t":{"10":{"position":[[7421,6]]},"27":{"position":[[516,6]]},"77":{"position":[[351,6]]},"89":{"position":[[513,6]]},"91":{"position":[[881,6]]},"93":{"position":[[100,6]]},"111":{"position":[[89,6]]},"113":{"position":[[68,6]]}}}],["poc",{"_index":574,"t":{"21":{"position":[[192,3],[251,3],[290,3]]},"23":{"position":[[341,3]]}}}],["pod",{"_index":868,"t":{"59":{"position":[[67,4]]}}}],["point",{"_index":168,"t":{"10":{"position":[[207,6]]}}}],["polici",{"_index":1024,"t":{"79":{"position":[[122,9]]},"95":{"position":[[56,6],[220,6]]},"97":{"position":[[33,6]]},"101":{"position":[[295,8]]},"107":{"position":[[29,7]]},"109":{"position":[[130,9]]},"111":{"position":[[50,6],[160,6]]},"113":{"position":[[60,7]]}}}],["pool",{"_index":663,"t":{"34":{"position":[[225,4]]}}}],["popular",{"_index":404,"t":{"10":{"position":[[6166,7]]}}}],["port",{"_index":682,"t":{"38":{"position":[[49,6]]},"59":{"position":[[18,4]]}}}],["portion",{"_index":383,"t":{"10":{"position":[[5453,7]]},"91":{"position":[[642,8]]}}}],["poseidon",{"_index":822,"t":{"53":{"position":[[46,8]]}}}],["poseidon2",{"_index":789,"t":{"49":{"position":[[81,9],[95,9]]},"51":{"position":[[576,9]]},"53":{"position":[[0,9],[110,9]]}}}],["poseidon2/pull/10",{"_index":830,"t":{"53":{"position":[[477,17]]}}}],["poseidon2/pull/11",{"_index":837,"t":{"53":{"position":[[597,17]]}}}],["poseidon2/pull/7",{"_index":826,"t":{"53":{"position":[[294,16]]}}}],["poseidon2/pull/8",{"_index":827,"t":{"53":{"position":[[348,16]]}}}],["poseidon2/pull/9",{"_index":828,"t":{"53":{"position":[[402,16]]}}}],["posit",{"_index":620,"t":{"27":{"position":[[408,9]]}}}],["possess",{"_index":339,"t":{"10":{"position":[[3957,10],[5376,11]]},"16":{"position":[[524,10],[1262,10]]}}}],["possibl",{"_index":835,"t":{"53":{"position":[[543,8]]},"81":{"position":[[427,11]]},"89":{"position":[[1613,9]]},"107":{"position":[[107,9],[370,10]]}}}],["post",{"_index":335,"t":{"10":{"position":[[3896,4]]},"14":{"position":[[700,7]]},"16":{"position":[[343,6]]},"85":{"position":[[238,7]]},"111":{"position":[[206,7]]}}}],["potenti",{"_index":1077,"t":{"89":{"position":[[670,11]]}}}],["power",{"_index":62,"t":{"4":{"position":[[472,5]]}}}],["powerhouses—googl",{"_index":34,"t":{"4":{"position":[[86,19]]}}}],["pr",{"_index":678,"t":{"36":{"position":[[147,2]]},"38":{"position":[[259,2],[297,2],[441,2]]},"51":{"position":[[299,2]]},"53":{"position":[[253,3]]}}}],["pragma",{"_index":745,"t":{"41":{"position":[[1039,8]]}}}],["pre",{"_index":146,"t":{"8":{"position":[[289,3]]}}}],["predict",{"_index":138,"t":{"8":{"position":[[166,11]]}}}],["prefer",{"_index":1064,"t":{"89":{"position":[[253,6]]}}}],["prepar",{"_index":639,"t":{"29":{"position":[[375,11]]},"57":{"position":[[40,9]]}}}],["present",{"_index":970,"t":{"73":{"position":[[1421,7]]},"75":{"position":[[788,10]]}}}],["preserv",{"_index":182,"t":{"10":{"position":[[500,10],[4208,8]]}}}],["prevent",{"_index":166,"t":{"10":{"position":[[192,7],[3434,8]]},"12":{"position":[[711,11]]},"14":{"position":[[487,7]]}}}],["previous",{"_index":425,"t":{"10":{"position":[[6775,10]]}}}],["primari",{"_index":786,"t":{"49":{"position":[[45,7]]}}}],["primit",{"_index":667,"t":{"34":{"position":[[270,9]]}}}],["principl",{"_index":1067,"t":{"89":{"position":[[315,9]]}}}],["prior",{"_index":1120,"t":{"91":{"position":[[113,5]]}}}],["privaci",{"_index":1023,"t":{"79":{"position":[[114,7]]},"95":{"position":[[48,7],[110,7],[212,7]]},"97":{"position":[[25,7]]},"99":{"position":[[237,7],[1135,7]]},"101":{"position":[[287,7],[481,7]]},"105":{"position":[[30,7],[705,7]]},"107":{"position":[[21,7],[261,7]]},"109":{"position":[[122,7]]},"111":{"position":[[42,7],[152,7]]},"113":{"position":[[52,7]]}}}],["proactiv",{"_index":533,"t":{"16":{"position":[[1109,11]]}}}],["problem",{"_index":225,"t":{"10":{"position":[[1231,8],[2595,8]]},"53":{"position":[[633,7]]}}}],["proceed",{"_index":1103,"t":{"89":{"position":[[1676,11]]}}}],["process",{"_index":393,"t":{"10":{"position":[[5860,8]]},"57":{"position":[[244,8]]},"97":{"position":[[63,10]]},"99":{"position":[[50,10],[125,7],[281,7],[483,7],[645,7],[749,10]]},"101":{"position":[[89,7]]},"105":{"position":[[235,9]]},"107":{"position":[[65,10],[228,8],[575,7],[635,10],[676,10],[769,10],[845,10],[1019,9]]}}}],["procur",{"_index":1035,"t":{"81":{"position":[[149,11]]}}}],["profil",{"_index":679,"t":{"38":{"position":[[19,8],[60,8]]}}}],["profit",{"_index":403,"t":{"10":{"position":[[6126,9]]},"14":{"position":[[478,8]]},"81":{"position":[[132,8]]}}}],["program",{"_index":560,"t":{"18":{"position":[[61,7]]}}}],["progress",{"_index":157,"t":{"8":{"position":[[469,9]]},"29":{"position":[[33,8]]}}}],["project",{"_index":26,"t":{"2":{"position":[[320,9]]},"8":{"position":[[10,7],[235,7]]},"10":{"position":[[4196,8],[7281,7]]},"12":{"position":[[426,8]]},"27":{"position":[[463,7]]},"73":{"position":[[1462,8]]},"75":{"position":[[134,11],[281,7],[386,9]]}}}],["promis",{"_index":186,"t":{"10":{"position":[[571,8],[600,7]]},"73":{"position":[[1318,8]]}}}],["promot",{"_index":314,"t":{"10":{"position":[[3345,8]]}}}],["proof",{"_index":332,"t":{"10":{"position":[[3852,6],[3862,5],[3907,6],[3993,6],[5362,5],[5415,5],[5504,5],[5671,6]]},"12":{"position":[[576,5]]},"16":{"position":[[510,5],[623,5],[644,5],[1247,6],[1422,6],[1591,5]]},"21":{"position":[[32,5]]},"36":{"position":[[124,6]]},"43":{"position":[[412,5]]},"55":{"position":[[64,6],[581,5],[657,6]]},"63":{"position":[[263,5]]},"67":{"position":[[246,5],[405,6],[412,6],[475,5]]}}}],["properli",{"_index":864,"t":{"57":{"position":[[329,9]]}}}],["properti",{"_index":407,"t":{"10":{"position":[[6219,8]]},"73":{"position":[[307,8]]}}}],["proport",{"_index":376,"t":{"10":{"position":[[5200,12]]}}}],["protect",{"_index":189,"t":{"10":{"position":[[627,11],[1596,7],[2870,10]]},"12":{"position":[[158,8]]},"105":{"position":[[18,7],[306,10],[408,12],[517,10]]},"107":{"position":[[922,10]]}}}],["protocol",{"_index":129,"t":{"6":{"position":[[292,8]]},"10":{"position":[[66,8],[2861,8],[3565,9]]},"16":{"position":[[1369,8]]},"27":{"position":[[41,8]]}}}],["provabl",{"_index":461,"t":{"12":{"position":[[264,8]]}}}],["prove",{"_index":338,"t":{"10":{"position":[[3951,5]]},"23":{"position":[[234,7],[440,7]]},"25":{"position":[[485,5]]},"43":{"position":[[15,7]]},"49":{"position":[[136,7]]},"51":{"position":[[594,7]]},"55":{"position":[[4,7],[135,5],[344,7],[396,7]]},"67":{"position":[[436,7]]}}}],["prover",{"_index":901,"t":{"67":{"position":[[170,7]]}}}],["provid",{"_index":5,"t":{"2":{"position":[[52,8]]},"4":{"position":[[369,9]]},"10":{"position":[[80,8],[713,7],[3803,9],[4029,9],[5103,7],[5354,7],[5407,7],[5496,7],[7643,9]]},"12":{"position":[[77,9],[487,8]]},"16":{"position":[[277,10],[493,7],[1378,9],[1441,7]]},"25":{"position":[[333,8]]},"55":{"position":[[81,8]]},"63":{"position":[[254,8]]},"73":{"position":[[15,8]]},"79":{"position":[[26,8]]},"101":{"position":[[175,7],[441,8]]},"105":{"position":[[277,7],[499,8]]}}}],["provis",{"_index":480,"t":{"12":{"position":[[825,9]]},"14":{"position":[[679,12]]},"87":{"position":[[150,11]]},"91":{"position":[[445,10]]}}}],["proxi",{"_index":716,"t":{"41":{"position":[[218,5]]}}}],["pst",{"_index":928,"t":{"71":{"position":[[212,3]]},"97":{"position":[[271,3]]}}}],["public",{"_index":355,"t":{"10":{"position":[[4458,6]]},"27":{"position":[[450,6]]},"29":{"position":[[101,6]]},"59":{"position":[[179,6]]}}}],["publicli",{"_index":811,"t":{"51":{"position":[[249,8]]}}}],["pull",{"_index":728,"t":{"41":{"position":[[702,7]]}}}],["purport",{"_index":99,"t":{"4":{"position":[[1125,7]]},"75":{"position":[[858,7]]}}}],["purpos",{"_index":849,"t":{"55":{"position":[[314,9]]},"71":{"position":[[8,8]]},"73":{"position":[[261,8],[1090,8]]},"77":{"position":[[224,8]]},"97":{"position":[[8,8]]},"99":{"position":[[168,8],[443,8]]}}}],["q1",{"_index":358,"t":{"10":{"position":[[4488,2],[7821,2],[7943,2]]}}}],["q1/q2",{"_index":630,"t":{"29":{"position":[[95,5]]}}}],["q2/q4",{"_index":528,"t":{"16":{"position":[[760,5]]}}}],["q3",{"_index":582,"t":{"21":{"position":[[406,2]]}}}],["qualiti",{"_index":588,"t":{"23":{"position":[[104,9]]}}}],["queri",{"_index":536,"t":{"16":{"position":[[1226,7]]},"43":{"position":[[389,5]]}}}],["question",{"_index":1132,"t":{"91":{"position":[[837,9]]},"113":{"position":[[32,9]]}}}],["queue",{"_index":881,"t":{"61":{"position":[[272,5]]}}}],["r&d",{"_index":752,"t":{"43":{"position":[[5,3]]}}}],["rais",{"_index":726,"t":{"41":{"position":[[524,6]]}}}],["randomli",{"_index":535,"t":{"16":{"position":[[1217,8]]}}}],["rapidli",{"_index":774,"t":{"45":{"position":[[37,8]]}}}],["rate",{"_index":1159,"t":{"99":{"position":[[1343,5]]}}}],["ration",{"_index":477,"t":{"12":{"position":[[753,8]]}}}],["react",{"_index":803,"t":{"49":{"position":[[598,5]]}}}],["read",{"_index":555,"t":{"16":{"position":[[1919,4]]},"69":{"position":[[276,4]]},"99":{"position":[[991,4]]}}}],["reason",{"_index":1078,"t":{"89":{"position":[[722,10],[2149,10]]},"107":{"position":[[359,10]]}}}],["rebas",{"_index":710,"t":{"41":{"position":[[11,7],[117,7]]}}}],["rebuild",{"_index":257,"t":{"10":{"position":[[1949,7]]}}}],["receiv",{"_index":1090,"t":{"89":{"position":[[1093,9]]}}}],["recent",{"_index":781,"t":{"45":{"position":[[171,6]]},"51":{"position":[[220,6]]},"55":{"position":[[529,6]]}}}],["recommend",{"_index":1175,"t":{"101":{"position":[[832,11]]}}}],["reconstruct",{"_index":474,"t":{"12":{"position":[[687,14]]},"16":{"position":[[1789,14]]}}}],["record",{"_index":184,"t":{"10":{"position":[[527,8]]}}}],["recreat",{"_index":233,"t":{"10":{"position":[[1427,8]]}}}],["recurs",{"_index":770,"t":{"43":{"position":[[418,9]]}}}],["reduc",{"_index":806,"t":{"51":{"position":[[48,8]]}}}],["redund",{"_index":468,"t":{"12":{"position":[[511,11]]},"25":{"position":[[418,10]]}}}],["ref",{"_index":702,"t":{"38":{"position":[[326,3]]},"51":{"position":[[520,3]]}}}],["refactor",{"_index":712,"t":{"41":{"position":[[46,8]]}}}],["refc",{"_index":668,"t":{"34":{"position":[[297,4]]}}}],["refer",{"_index":118,"t":{"6":{"position":[[123,6]]},"55":{"position":[[549,9]]},"71":{"position":[[282,5],[332,11],[351,9]]},"77":{"position":[[358,5]]},"89":{"position":[[1157,8],[1432,10]]},"91":{"position":[[352,9]]},"97":{"position":[[341,5],[381,11],[400,9]]}}}],["referr",{"_index":1157,"t":{"99":{"position":[[1325,10]]}}}],["regard",{"_index":1059,"t":{"87":{"position":[[123,6]]},"91":{"position":[[73,9]]},"95":{"position":[[166,7]]},"99":{"position":[[460,7]]}}}],["regardless",{"_index":1111,"t":{"89":{"position":[[1999,10]]}}}],["regist",{"_index":922,"t":{"71":{"position":[[119,10]]},"97":{"position":[[179,10]]}}}],["regular",{"_index":420,"t":{"10":{"position":[[6574,7],[6724,7],[7080,7]]}}}],["regularli",{"_index":1004,"t":{"75":{"position":[[1231,10]]}}}],["regulatori",{"_index":995,"t":{"75":{"position":[[667,10]]}}}],["relat",{"_index":237,"t":{"10":{"position":[[1536,6]]},"61":{"position":[[230,7]]},"73":{"position":[[559,8],[1446,8]]},"75":{"position":[[421,7]]},"81":{"position":[[239,7]]},"83":{"position":[[146,7]]},"89":{"position":[[141,8]]}}}],["releas",{"_index":527,"t":{"16":{"position":[[752,7]]},"21":{"position":[[117,8]]},"23":{"position":[[182,7],[249,7]]},"29":{"position":[[116,8],[438,9]]}}}],["relev",{"_index":920,"t":{"71":{"position":[[52,8]]},"89":{"position":[[1828,8]]},"97":{"position":[[112,8]]},"107":{"position":[[252,8]]}}}],["reli",{"_index":969,"t":{"73":{"position":[[1301,6]]}}}],["reliabl",{"_index":262,"t":{"10":{"position":[[2052,8],[3765,8],[5121,8]]},"16":{"position":[[260,8]]},"73":{"position":[[450,12]]},"75":{"position":[[882,8],[951,11]]}}}],["relianc",{"_index":1003,"t":{"75":{"position":[[1107,8]]}}}],["remain",{"_index":367,"t":{"10":{"position":[[4692,6]]},"12":{"position":[[314,9]]},"91":{"position":[[632,9],[656,6]]}}}],["remedi",{"_index":1082,"t":{"89":{"position":[[974,6]]}}}],["remot",{"_index":27,"t":{"4":{"position":[[4,6]]},"18":{"position":[[33,6],[75,6],[128,6]]},"21":{"position":[[455,6]]},"55":{"position":[[454,6]]}}}],["remov",{"_index":731,"t":{"41":{"position":[[792,8]]},"107":{"position":[[391,6]]}}}],["repair",{"_index":201,"t":{"10":{"position":[[818,7],[2252,6],[2289,6],[2507,6],[2654,7],[3524,6]]},"12":{"position":[[650,6]]},"16":{"position":[[1759,6]]},"23":{"position":[[220,6]]},"25":{"position":[[537,7]]}}}],["replac",{"_index":1052,"t":{"85":{"position":[[17,7]]},"111":{"position":[[17,7]]}}}],["repo",{"_index":624,"t":{"27":{"position":[[544,4]]},"34":{"position":[[131,4]]}}}],["report",{"_index":1138,"t":{"93":{"position":[[107,6]]}}}],["repost",{"_index":544,"t":{"16":{"position":[[1633,9]]}}}],["repres",{"_index":853,"t":{"55":{"position":[[510,9]]},"79":{"position":[[233,9]]}}}],["represent",{"_index":951,"t":{"73":{"position":[[376,15],[1327,15]]},"91":{"position":[[167,15]]}}}],["request",{"_index":518,"t":{"16":{"position":[[357,7],[808,8]]},"107":{"position":[[541,8]]}}}],["requir",{"_index":347,"t":{"10":{"position":[[4298,7],[4745,8],[4854,9]]},"25":{"position":[[395,8],[607,8]]},"51":{"position":[[160,8]]},"63":{"position":[[104,8]]},"77":{"position":[[278,12]]},"105":{"position":[[531,8]]}}}],["research",{"_index":562,"t":{"18":{"position":[[109,10]]},"23":{"position":[[409,9],[490,8]]},"27":{"position":[[124,11],[314,8]]},"29":{"position":[[331,8]]},"31":{"position":[[107,8]]},"45":{"position":[[178,8]]},"47":{"position":[[111,8]]},"67":{"position":[[8,8],[68,8],[178,8],[321,8]]}}}],["resili",{"_index":178,"t":{"10":{"position":[[408,10]]}}}],["resist",{"_index":9,"t":{"2":{"position":[[93,10]]},"4":{"position":[[721,9],[898,10]]},"10":{"position":[[170,6],[453,11],[4266,7]]},"12":{"position":[[113,10]]},"25":{"position":[[135,10]]}}}],["resolut",{"_index":1080,"t":{"89":{"position":[[809,10]]}}}],["resolv",{"_index":1068,"t":{"89":{"position":[[328,9],[744,7],[1034,7],[1181,8]]}}}],["resourc",{"_index":285,"t":{"10":{"position":[[2561,9],[2718,8]]},"12":{"position":[[853,10]]},"14":{"position":[[369,8]]},"16":{"position":[[181,8],[688,10],[1001,9]]}}}],["respect",{"_index":1109,"t":{"89":{"position":[[1845,7]]},"91":{"position":[[227,7]]},"95":{"position":[[121,7]]},"101":{"position":[[276,10]]},"107":{"position":[[175,7]]}}}],["respond",{"_index":329,"t":{"10":{"position":[[3819,7]]}}}],["respons",{"_index":915,"t":{"69":{"position":[[258,14]]},"73":{"position":[[924,11]]},"75":{"position":[[918,14]]},"79":{"position":[[696,11]]},"85":{"position":[[103,11]]},"109":{"position":[[161,14]]}}}],["restor",{"_index":269,"t":{"10":{"position":[[2191,9]]}}}],["restrict",{"_index":517,"t":{"16":{"position":[[190,10]]}}}],["result",{"_index":506,"t":{"14":{"position":[[838,9]]},"16":{"position":[[535,7]]},"41":{"position":[[178,6]]},"75":{"position":[[718,8]]},"89":{"position":[[797,6]]},"101":{"position":[[116,6]]}}}],["retriev",{"_index":140,"t":{"8":{"position":[[210,10]]},"10":{"position":[[3535,10],[6532,8],[6821,8]]},"12":{"position":[[585,15]]},"16":{"position":[[853,8],[1181,12],[1340,14]]},"61":{"position":[[118,9]]}}}],["review",{"_index":732,"t":{"41":{"position":[[831,6]]},"43":{"position":[[268,6]]},"51":{"position":[[418,7]]},"89":{"position":[[536,6]]},"101":{"position":[[853,6]]}}}],["reward",{"_index":391,"t":{"10":{"position":[[5711,7]]}}}],["right",{"_index":278,"t":{"10":{"position":[[2450,5],[7858,5]]},"73":{"position":[[338,7]]},"89":{"position":[[465,5],[603,6],[2202,5]]},"91":{"position":[[789,5]]},"107":{"position":[[165,6],[295,5]]}}}],["risk",{"_index":939,"t":{"73":{"position":[[106,5]]},"75":{"position":[[515,4],[1042,4]]},"79":{"position":[[672,4]]}}}],["roadmap",{"_index":599,"t":{"25":{"position":[[21,7]]},"75":{"position":[[272,8]]}}}],["robust",{"_index":84,"t":{"4":{"position":[[837,10]]},"14":{"position":[[123,6]]}}}],["robust—99.99%—dur",{"_index":125,"t":{"6":{"position":[[208,24]]}}}],["role",{"_index":449,"t":{"10":{"position":[[7526,4]]},"16":{"position":[[66,4]]}}}],["root",{"_index":832,"t":{"53":{"position":[[510,4]]}}}],["row",{"_index":384,"t":{"10":{"position":[[5529,4]]}}}],["rpc",{"_index":709,"t":{"38":{"position":[[499,3]]},"41":{"position":[[420,3],[623,3],[677,3]]}}}],["rule",{"_index":1094,"t":{"89":{"position":[[1316,5],[1386,5],[1963,5]]}}}],["run",{"_index":432,"t":{"10":{"position":[[7135,7]]},"29":{"position":[[154,7]]},"49":{"position":[[184,4]]}}}],["runner",{"_index":686,"t":{"38":{"position":[[103,6]]},"59":{"position":[[96,7]]}}}],["sa",{"_index":1135,"t":{"91":{"position":[[963,3]]},"113":{"position":[[150,3]]}}}],["safe",{"_index":203,"t":{"10":{"position":[[910,4],[1295,5],[2143,5],[2749,4]]},"38":{"position":[[300,4]]},"51":{"position":[[492,4]]},"67":{"position":[[305,4]]}}}],["safeti",{"_index":243,"t":{"10":{"position":[[1658,7],[2231,7]]},"103":{"position":[[141,6]]}}}],["same",{"_index":553,"t":{"16":{"position":[[1862,4]]},"105":{"position":[[512,4]]}}}],["sampl",{"_index":597,"t":{"23":{"position":[[481,8]]},"43":{"position":[[382,6]]}}}],["save",{"_index":284,"t":{"10":{"position":[[2555,5]]}}}],["scale",{"_index":413,"t":{"10":{"position":[[6331,5]]}}}],["scheme",{"_index":550,"t":{"16":{"position":[[1766,6]]},"23":{"position":[[242,6],[448,6]]}}}],["scimitar",{"_index":575,"t":{"21":{"position":[[205,8],[276,9]]},"23":{"position":[[190,8]]}}}],["score",{"_index":39,"t":{"4":{"position":[[151,5]]}}}],["search",{"_index":878,"t":{"61":{"position":[[107,6]]}}}],["secp256k1",{"_index":840,"t":{"53":{"position":[[662,9]]}}}],["section",{"_index":1127,"t":{"91":{"position":[[289,8]]}}}],["secur",{"_index":235,"t":{"10":{"position":[[1478,6]]},"73":{"position":[[1764,9]]},"93":{"position":[[8,8],[118,8]]},"99":{"position":[[832,8]]},"103":{"position":[[36,8],[92,8]]}}}],["security@free.technolog",{"_index":1139,"t":{"93":{"position":[[141,25]]}}}],["see",{"_index":795,"t":{"49":{"position":[[360,3]]}}}],["seek",{"_index":1083,"t":{"89":{"position":[[989,8]]}}}],["sell",{"_index":981,"t":{"73":{"position":[[1701,5],[1741,4]]}}}],["send",{"_index":331,"t":{"10":{"position":[[3844,7],[3979,5]]},"16":{"position":[[1408,5]]},"89":{"position":[[852,4]]}}}],["sendtransact",{"_index":725,"t":{"41":{"position":[[491,15]]}}}],["senior",{"_index":557,"t":{"18":{"position":[[6,6]]}}}],["sens",{"_index":396,"t":{"10":{"position":[[5939,5]]}}}],["separ",{"_index":685,"t":{"38":{"position":[[89,8]]},"109":{"position":[[97,8]]}}}],["serial",{"_index":743,"t":{"41":{"position":[[1013,9]]}}}],["serious",{"_index":1136,"t":{"93":{"position":[[17,9]]},"103":{"position":[[45,9]]}}}],["serv",{"_index":12,"t":{"2":{"position":[[134,6]]},"10":{"position":[[2819,5],[6158,7],[7609,7]]}}}],["servic",{"_index":38,"t":{"4":{"position":[[142,8],[602,7]]},"10":{"position":[[6664,8]]},"59":{"position":[[158,7]]},"81":{"position":[[176,9]]},"101":{"position":[[433,7]]}}}],["set",{"_index":452,"t":{"10":{"position":[[7813,3]]},"57":{"position":[[307,3]]},"89":{"position":[[888,7]]},"101":{"position":[[807,3]]}}}],["settl",{"_index":893,"t":{"63":{"position":[[201,6]]}}}],["setup",{"_index":846,"t":{"55":{"position":[[231,5]]}}}],["sever",{"_index":305,"t":{"10":{"position":[[3123,7],[5510,7]]},"91":{"position":[[581,9]]}}}],["shall",{"_index":968,"t":{"73":{"position":[[1264,5]]},"83":{"position":[[4,5]]},"89":{"position":[[841,5]]}}}],["shard",{"_index":249,"t":{"10":{"position":[[1795,9],[1830,7],[1863,6],[1974,6],[2119,6],[2397,6],[2686,6]]}}}],["share",{"_index":80,"t":{"4":{"position":[[783,7],[1164,7]]},"14":{"position":[[83,7]]}}}],["short",{"_index":1150,"t":{"99":{"position":[[1040,6]]}}}],["side",{"_index":519,"t":{"16":{"position":[[365,4]]}}}],["signer",{"_index":723,"t":{"41":{"position":[[439,7]]}}}],["signererror",{"_index":727,"t":{"41":{"position":[[549,11]]}}}],["similar",{"_index":936,"t":{"71":{"position":[[324,7]]},"97":{"position":[[373,7]]}}}],["similarli",{"_index":514,"t":{"16":{"position":[[99,10]]}}}],["simpl",{"_index":216,"t":{"10":{"position":[[1073,6]]},"99":{"position":[[1278,6]]}}}],["simul",{"_index":766,"t":{"43":{"position":[[318,9]]}}}],["simultan",{"_index":885,"t":{"61":{"position":[[358,12]]}}}],["singl",{"_index":167,"t":{"10":{"position":[[200,6]]}}}],["site",{"_index":954,"t":{"73":{"position":[[607,5]]},"99":{"position":[[1384,5]]},"109":{"position":[[86,5]]}}}],["site.thes",{"_index":955,"t":{"73":{"position":[[628,10]]}}}],["sixti",{"_index":1086,"t":{"89":{"position":[[1062,5]]}}}],["size",{"_index":689,"t":{"38":{"position":[[172,4]]}}}],["slash",{"_index":342,"t":{"10":{"position":[[4020,8]]},"16":{"position":[[546,8]]}}}],["slot",{"_index":520,"t":{"16":{"position":[[402,5],[1508,5],[1522,4],[1606,5],[1845,5]]},"55":{"position":[[177,4],[471,4]]}}}],["small",{"_index":31,"t":{"4":{"position":[[61,5]]},"10":{"position":[[2589,5]]}}}],["smart",{"_index":889,"t":{"63":{"position":[[21,5],[67,5]]}}}],["snark",{"_index":311,"t":{"10":{"position":[[3209,6],[3639,6],[3738,8]]},"21":{"position":[[443,5]]},"55":{"position":[[31,5]]}}}],["softwar",{"_index":611,"t":{"27":{"position":[[54,8]]},"49":{"position":[[170,8]]}}}],["sole",{"_index":937,"t":{"73":{"position":[[86,4],[889,4],[917,6]]},"75":{"position":[[1410,4]]},"79":{"position":[[689,6]]}}}],["solicit",{"_index":982,"t":{"73":{"position":[[1710,10]]}}}],["solid",{"_index":763,"t":{"43":{"position":[[279,8]]}}}],["solut",{"_index":98,"t":{"4":{"position":[[1115,9],[1265,8]]},"10":{"position":[[91,8],[306,9],[3006,9],[3091,9]]}}}],["someth",{"_index":158,"t":{"8":{"position":[[487,9]]}}}],["soon",{"_index":638,"t":{"29":{"position":[[361,4]]}}}],["sophist",{"_index":607,"t":{"25":{"position":[[592,14]]}}}],["sourc",{"_index":622,"t":{"27":{"position":[[443,6]]}}}],["sp",{"_index":328,"t":{"10":{"position":[[3813,5],[3939,2]]}}}],["spam",{"_index":496,"t":{"14":{"position":[[495,4]]}}}],["spare",{"_index":410,"t":{"10":{"position":[[6264,5]]}}}],["special",{"_index":1037,"t":{"81":{"position":[[193,8]]}}}],["specif",{"_index":799,"t":{"49":{"position":[[433,14]]},"75":{"position":[[1290,9]]},"91":{"position":[[828,8]]},"99":{"position":[[159,8],[1227,8]]},"105":{"position":[[429,8]]}}}],["spend",{"_index":1162,"t":{"99":{"position":[[1373,5]]}}}],["split",{"_index":228,"t":{"10":{"position":[[1313,6],[1758,9]]},"27":{"position":[[231,5]]}}}],["spread",{"_index":244,"t":{"10":{"position":[[1675,9]]}}}],["stabil",{"_index":866,"t":{"57":{"position":[[410,10]]},"61":{"position":[[37,9],[257,9]]}}}],["stack",{"_index":16,"t":{"2":{"position":[[180,6]]},"6":{"position":[[99,6]]},"18":{"position":[[18,5]]}}}],["stage",{"_index":1005,"t":{"75":{"position":[[1308,6]]}}}],["stake",{"_index":375,"t":{"10":{"position":[[5181,5],[5287,6],[5468,6],[5563,6],[5799,5]]},"16":{"position":[[302,5]]}}}],["standard",{"_index":64,"t":{"4":{"position":[[510,10]]}}}],["start",{"_index":655,"t":{"34":{"position":[[74,5],[150,5]]},"41":{"position":[[963,5]]},"43":{"position":[[372,5]]}}}],["starter",{"_index":634,"t":{"29":{"position":[[283,7]]}}}],["state",{"_index":163,"t":{"10":{"position":[[26,5],[4234,5],[4639,5]]}}}],["statement",{"_index":983,"t":{"75":{"position":[[45,10],[221,11],[251,10],[410,10],[557,10]]}}}],["statu",{"_index":1025,"t":{"79":{"position":[[217,6]]}}}],["statut",{"_index":1112,"t":{"89":{"position":[[2028,7]]}}}],["stay",{"_index":154,"t":{"8":{"position":[[441,7]]},"10":{"position":[[905,4],[7238,4],[7830,4],[7952,4]]}}}],["still",{"_index":105,"t":{"4":{"position":[[1229,5]]},"14":{"position":[[549,5]]},"25":{"position":[[501,5]]},"107":{"position":[[134,5]]}}}],["storag",{"_index":3,"t":{"2":{"position":[[30,7],[148,7]]},"4":{"position":[[11,7],[232,7],[361,7],[766,7],[1107,7],[1257,7],[1304,7]]},"6":{"position":[[67,7],[181,7]]},"10":{"position":[[58,7],[124,7],[298,7],[942,7],[1551,7],[2066,8],[2323,7],[2832,7],[2998,7],[3083,7],[3795,7],[4115,7],[4999,7],[5075,7],[5089,7],[5130,8],[5145,7],[5733,7],[6306,7],[7635,7],[7688,7],[7742,7]]},"12":{"position":[[33,7],[324,7],[456,7]]},"14":{"position":[[692,7],[752,7]]},"16":{"position":[[225,7],[269,7],[288,7],[1050,7],[1137,7],[1194,7],[1395,7],[1486,7],[1697,7],[1867,7],[1904,7]]},"25":{"position":[[80,7],[325,7]]},"36":{"position":[[116,7]]},"55":{"position":[[73,7],[649,7]]},"63":{"position":[[134,8],[169,7],[228,7],[246,7]]}}}],["storage/codex",{"_index":805,"t":{"49":{"position":[[635,13]]},"55":{"position":[[635,13]]}}}],["storage/logtool",{"_index":879,"t":{"61":{"position":[[153,16]]}}}],["storage/nim",{"_index":815,"t":{"51":{"position":[[336,11],[451,11]]},"53":{"position":[[282,11],[336,11],[390,11],[465,11],[585,11],[697,11]]},"55":{"position":[[776,11]]},"65":{"position":[[70,11]]}}}],["store",{"_index":137,"t":{"8":{"position":[[138,7]]},"10":{"position":[[1329,6],[4325,6],[4523,6],[4757,5],[4817,7],[4878,5],[5251,6],[5317,5],[6515,6],[6767,7]]},"12":{"position":[[245,6]]},"14":{"position":[[657,5]]},"16":{"position":[[836,6]]},"55":{"position":[[155,6]]},"63":{"position":[[143,5]]},"99":{"position":[[342,5],[380,5],[889,6]]},"101":{"position":[[666,5]]}}}],["stori",{"_index":852,"t":{"55":{"position":[[502,7]]},"57":{"position":[[212,7]]}}}],["strict",{"_index":749,"t":{"41":{"position":[[1079,6]]},"81":{"position":[[66,6]]}}}],["strong",{"_index":7,"t":{"2":{"position":[[75,6]]},"4":{"position":[[960,6]]}}}],["stronger",{"_index":602,"t":{"25":{"position":[[100,8]]}}}],["structur",{"_index":315,"t":{"10":{"position":[[3424,9]]},"14":{"position":[[158,9],[278,9],[592,9],[776,9]]},"23":{"position":[[398,10]]},"51":{"position":[[100,9]]}}}],["student",{"_index":559,"t":{"18":{"position":[[52,8]]}}}],["sub",{"_index":783,"t":{"47":{"position":[[52,3],[148,3]]}}}],["subgroup",{"_index":586,"t":{"23":{"position":[[17,9]]},"27":{"position":[[246,9]]}}}],["subject",{"_index":990,"t":{"75":{"position":[[487,7],[572,7],[1318,7]]},"77":{"position":[[259,7]]}}}],["submit",{"_index":388,"t":{"10":{"position":[[5660,10]]},"55":{"position":[[100,6]]},"103":{"position":[[179,6]]},"105":{"position":[[73,9]]}}}],["subsect",{"_index":1128,"t":{"91":{"position":[[302,11]]}}}],["subsequ",{"_index":526,"t":{"16":{"position":[[735,10]]}}}],["substitut",{"_index":1036,"t":{"81":{"position":[[165,10]]}}}],["success",{"_index":859,"t":{"57":{"position":[[146,10]]}}}],["successfulli",{"_index":851,"t":{"55":{"position":[[441,12]]}}}],["succinct",{"_index":324,"t":{"10":{"position":[[3690,8]]}}}],["such",{"_index":71,"t":{"4":{"position":[[641,4]]},"10":{"position":[[786,4]]},"55":{"position":[[211,4]]},"73":{"position":[[584,4],[1622,5]]},"75":{"position":[[432,4]]},"77":{"position":[[291,4]]},"79":{"position":[[190,4],[281,4],[347,4],[456,4],[607,4],[731,4]]},"81":{"position":[[442,4],[498,4]]},"89":{"position":[[823,4],[1136,4]]},"99":{"position":[[572,4],[760,4],[1302,4]]},"101":{"position":[[232,4],[527,4]]},"103":{"position":[[186,4]]},"105":{"position":[[421,4],[477,4]]},"107":{"position":[[764,4]]}}}],["suffer",{"_index":47,"t":{"4":{"position":[[240,7]]}}}],["suit",{"_index":363,"t":{"10":{"position":[[4599,6]]},"41":{"position":[[154,5]]}}}],["suitabl",{"_index":865,"t":{"57":{"position":[[392,8]]},"73":{"position":[[463,11]]}}}],["summari",{"_index":784,"t":{"47":{"position":[[130,9]]},"75":{"position":[[837,7]]}}}],["supernod",{"_index":322,"t":{"10":{"position":[[3606,13]]}}}],["supersed",{"_index":1119,"t":{"91":{"position":[[99,9]]}}}],["supplement",{"_index":1007,"t":{"75":{"position":[[1358,12]]}}}],["suppli",{"_index":489,"t":{"14":{"position":[[322,6]]}}}],["support",{"_index":653,"t":{"34":{"position":[[53,7],[289,7]]},"41":{"position":[[166,7],[610,7],[661,10]]},"51":{"position":[[391,7]]},"79":{"position":[[272,8]]}}}],["swiss",{"_index":1054,"t":{"87":{"position":[[0,5]]},"89":{"position":[[1247,5],[1310,5],[1957,5]]}}}],["switzerland",{"_index":934,"t":{"71":{"position":[[258,11]]},"89":{"position":[[1532,12]]},"97":{"position":[[317,11]]},"105":{"position":[[179,12],[330,11],[543,11],[645,11]]}}}],["system",{"_index":172,"t":{"10":{"position":[[249,8],[355,8],[589,6],[950,6],[1725,8],[2331,7],[2428,6],[2642,6],[3588,7]]},"25":{"position":[[453,6]]},"27":{"position":[[87,7]]},"43":{"position":[[23,6]]},"49":{"position":[[144,7]]},"51":{"position":[[602,6]]},"53":{"position":[[92,7]]},"55":{"position":[[12,6],[352,7],[404,6]]},"67":{"position":[[252,6],[444,6],[481,6]]},"107":{"position":[[426,8]]}}}],["take",{"_index":512,"t":{"16":{"position":[[47,6]]},"38":{"position":[[233,4]]},"93":{"position":[[3,4]]},"103":{"position":[[26,4]]}}}],["task",{"_index":787,"t":{"49":{"position":[[53,6]]}}}],["tax",{"_index":975,"t":{"73":{"position":[[1572,4]]}}}],["tcp/udp",{"_index":867,"t":{"59":{"position":[[10,7]]}}}],["team",{"_index":626,"t":{"29":{"position":[[10,4],[484,4]]},"31":{"position":[[52,6],[130,5],[200,4]]},"45":{"position":[[14,4]]},"47":{"position":[[56,6],[152,5]]},"49":{"position":[[20,4]]},"51":{"position":[[29,4]]},"53":{"position":[[156,4]]},"55":{"position":[[364,4]]}}}],["team'",{"_index":585,"t":{"23":{"position":[[10,6]]}}}],["tech",{"_index":15,"t":{"2":{"position":[[175,4]]},"6":{"position":[[94,4]]},"27":{"position":[[177,5]]}}}],["technic",{"_index":608,"t":{"25":{"position":[[641,9]]},"75":{"position":[[303,9],[639,9]]},"99":{"position":[[792,9]]}}}],["techniqu",{"_index":197,"t":{"10":{"position":[[775,10],[1251,10]]}}}],["technolog",{"_index":987,"t":{"75":{"position":[[156,11]]},"93":{"position":[[69,10]]}}}],["ten",{"_index":219,"t":{"10":{"position":[[1138,3]]},"57":{"position":[[60,4]]}}}],["term",{"_index":41,"t":{"4":{"position":[[167,5],[1295,5]]},"10":{"position":[[1080,6],[5116,4],[5896,4]]},"16":{"position":[[255,4]]},"67":{"position":[[147,5],[369,5]]},"69":{"position":[[58,5],[81,5],[293,5],[439,5],[492,5]]},"71":{"position":[[34,5]]},"77":{"position":[[328,5]]},"79":{"position":[[82,5]]},"81":{"position":[[308,5]]},"83":{"position":[[271,5]]},"85":{"position":[[50,5],[186,5]]},"87":{"position":[[32,5]]},"89":{"position":[[9,6],[167,5]]},"91":{"position":[[14,5],[331,5],[473,5],[516,5],[610,5],[732,5],[867,5]]}}}],["test",{"_index":353,"t":{"10":{"position":[[4436,8]]},"23":{"position":[[125,8]]},"25":{"position":[[616,7]]},"29":{"position":[[206,4]]},"31":{"position":[[67,8]]},"38":{"position":[[98,4],[125,4],[287,5]]},"41":{"position":[[41,4],[77,5],[149,4],[303,7],[347,5],[825,5]]},"47":{"position":[[71,8]]},"57":{"position":[[4,7]]},"59":{"position":[[90,5],[108,5]]},"61":{"position":[[61,7]]},"65":{"position":[[23,7],[137,7]]}}}],["testnet",{"_index":356,"t":{"10":{"position":[[4465,7],[7796,7],[7926,7]]},"21":{"position":[[109,7]]},"23":{"position":[[155,7]]},"29":{"position":[[108,7],[137,7],[275,7]]},"45":{"position":[[120,7]]},"57":{"position":[[171,8],[296,7]]},"59":{"position":[[38,7],[239,7],[279,7]]},"67":{"position":[[108,8]]}}}],["theori",{"_index":1034,"t":{"81":{"position":[[112,6]]}}}],["there'",{"_index":210,"t":{"10":{"position":[[1011,7],[2477,7]]}}}],["therefor",{"_index":1207,"t":{"109":{"position":[[143,9]]}}}],["therein",{"_index":1027,"t":{"79":{"position":[[318,8],[385,7]]}}}],["thing",{"_index":993,"t":{"75":{"position":[[612,7]]}}}],["third",{"_index":1021,"t":{"79":{"position":[[50,5],[157,5],[195,5],[286,5],[352,5],[461,5],[542,5],[612,5],[736,5]]},"101":{"position":[[60,5],[237,5]]},"109":{"position":[[46,5],[74,5],[229,5]]}}}],["those",{"_index":502,"t":{"14":{"position":[[673,5]]},"16":{"position":[[165,5]]},"79":{"position":[[151,5]]}}}],["thread",{"_index":659,"t":{"34":{"position":[[185,9]]}}}],["threadsignalptr",{"_index":666,"t":{"34":{"position":[[254,15]]}}}],["three",{"_index":643,"t":{"31":{"position":[[37,5]]},"47":{"position":[[37,5]]}}}],["through",{"_index":304,"t":{"10":{"position":[[3115,7]]},"25":{"position":[[274,7]]},"73":{"position":[[1018,7]]},"75":{"position":[[462,7],[1174,7]]},"79":{"position":[[572,7],[633,7]]},"89":{"position":[[1204,7]]}}}],["ti",{"_index":521,"t":{"16":{"position":[[437,4]]}}}],["time",{"_index":205,"t":{"10":{"position":[[920,5],[5424,5],[5518,5],[7118,4]]},"16":{"position":[[1457,5]]},"75":{"position":[[1378,5]]},"85":{"position":[[70,4]]},"89":{"position":[[1359,4],[2123,4]]},"99":{"position":[[413,4],[907,5],[1361,4]]},"111":{"position":[[64,4]]}}}],["timelin",{"_index":998,"t":{"75":{"position":[[755,9],[1273,8]]}}}],["timeout",{"_index":888,"t":{"61":{"position":[[389,7]]}}}],["tini",{"_index":212,"t":{"10":{"position":[[1026,4]]}}}],["token",{"_index":442,"t":{"10":{"position":[[7378,6],[7394,5],[7484,6],[7546,5],[7583,5],[7602,6]]},"73":{"position":[[1750,6]]},"75":{"position":[[376,6]]}}}],["tokenom",{"_index":757,"t":{"43":{"position":[[125,10]]}}}],["tool",{"_index":660,"t":{"34":{"position":[[195,5]]},"38":{"position":[[383,7]]},"61":{"position":[[81,7]]}}}],["top",{"_index":437,"t":{"10":{"position":[[7215,3],[7334,3]]},"34":{"position":[[243,3]]},"99":{"position":[[1310,3],[1321,3]]}}}],["tradit",{"_index":482,"t":{"14":{"position":[[66,11]]}}}],["traffic",{"_index":1156,"t":{"99":{"position":[[1285,7]]}}}],["transfer",{"_index":1194,"t":{"107":{"position":[[494,11]]}}}],["transmiss",{"_index":1186,"t":{"105":{"position":[[584,12]]}}}],["treat",{"_index":977,"t":{"73":{"position":[[1611,7]]}}}],["tree",{"_index":903,"t":{"67":{"position":[[275,4]]}}}],["trend",{"_index":1154,"t":{"99":{"position":[[1179,6]]}}}],["tri",{"_index":687,"t":{"38":{"position":[[133,3]]},"41":{"position":[[870,3]]}}}],["trial",{"_index":1076,"t":{"89":{"position":[[620,5]]}}}],["tribun",{"_index":1102,"t":{"89":{"position":[[1627,8]]}}}],["truli",{"_index":95,"t":{"4":{"position":[[1052,5]]}}}],["trust",{"_index":845,"t":{"55":{"position":[[223,7]]}}}],["trustless",{"_index":18,"t":{"2":{"position":[[201,9]]}}}],["tune",{"_index":438,"t":{"10":{"position":[[7243,5],[7835,6],[7957,6]]}}}],["tweak",{"_index":739,"t":{"41":{"position":[[969,8]]}}}],["two",{"_index":572,"t":{"21":{"position":[[177,3]]},"38":{"position":[[114,3]]},"41":{"position":[[65,3]]}}}],["type",{"_index":360,"t":{"10":{"position":[[4502,5],[4565,5],[4929,5],[6610,4],[7050,5]]},"14":{"position":[[215,5]]},"16":{"position":[[35,6],[145,4]]},"41":{"position":[[185,5]]}}}],["unabl",{"_index":1084,"t":{"89":{"position":[[1016,6]]}}}],["unalt",{"_index":368,"t":{"10":{"position":[[4699,10]]}}}],["uncertainti",{"_index":992,"t":{"75":{"position":[[524,12],[1051,11]]}}}],["under",{"_index":142,"t":{"8":{"position":[[246,5]]},"77":{"position":[[48,5]]},"81":{"position":[[34,5]]},"91":{"position":[[951,5]]},"99":{"position":[[220,5]]},"113":{"position":[[138,5]]}}}],["undergo",{"_index":350,"t":{"10":{"position":[[4406,10]]}}}],["understand",{"_index":1122,"t":{"91":{"position":[[139,15]]}}}],["undu",{"_index":1002,"t":{"75":{"position":[[1101,5]]}}}],["unenforc",{"_index":1131,"t":{"91":{"position":[[548,14]]}}}],["union",{"_index":1181,"t":{"105":{"position":[[170,5],[635,5]]}}}],["unlawfulli",{"_index":1204,"t":{"107":{"position":[[1029,11]]}}}],["unless",{"_index":1173,"t":{"101":{"position":[[715,6]]}}}],["unlik",{"_index":176,"t":{"10":{"position":[[336,6],[7033,6]]},"105":{"position":[[90,8]]}}}],["unreli",{"_index":412,"t":{"10":{"position":[[6295,10]]}}}],["unstopp",{"_index":96,"t":{"4":{"position":[[1058,11]]}}}],["unsuit",{"_index":92,"t":{"4":{"position":[[1009,10]]}}}],["until",{"_index":281,"t":{"10":{"position":[[2471,5]]}}}],["up",{"_index":155,"t":{"8":{"position":[[449,2]]},"10":{"position":[[7115,2]]},"29":{"position":[[75,2]]},"41":{"position":[[848,2]]},"57":{"position":[[311,2]]}}}],["upcom",{"_index":354,"t":{"10":{"position":[[4449,8]]}}}],["updat",{"_index":440,"t":{"10":{"position":[[7258,7]]},"29":{"position":[[461,7]]},"31":{"position":[[205,7]]},"38":{"position":[[11,7]]},"41":{"position":[[320,7],[424,6],[536,7],[587,8]]},"51":{"position":[[406,7]]},"53":{"position":[[495,7]]},"69":{"position":[[18,8]]},"75":{"position":[[1212,6]]},"95":{"position":[[18,8]]},"107":{"position":[[326,6]]}}}],["upload",{"_index":532,"t":{"16":{"position":[[1078,7]]}}}],["upon",{"_index":93,"t":{"4":{"position":[[1032,4],[1144,4]]},"73":{"position":[[1308,4]]},"85":{"position":[[229,4]]},"111":{"position":[[197,4]]}}}],["us",{"_index":180,"t":{"10":{"position":[[485,3],[1246,4],[1419,4],[1882,5],[2727,3],[3203,5],[3635,3],[4101,4],[5888,3],[5973,3],[7735,3],[7848,3]]},"29":{"position":[[198,4],[259,5],[417,4]]},"41":{"position":[[191,5]]},"51":{"position":[[514,5]]},"53":{"position":[[69,4]]},"67":{"position":[[342,3]]},"69":{"position":[[67,3],[90,5],[160,3],[302,3],[328,3],[356,3],[448,4],[501,4],[529,3]]},"71":{"position":[[43,4]]},"73":{"position":[[58,3],[498,3],[855,3]]},"75":{"position":[[369,3]]},"77":{"position":[[254,4]]},"79":{"position":[[144,3],[409,6],[514,3]]},"81":{"position":[[317,4],[371,3]]},"83":{"position":[[162,3],[280,4]]},"85":{"position":[[59,3],[195,3]]},"87":{"position":[[41,3]]},"89":{"position":[[176,4],[230,3],[713,3]]},"91":{"position":[[23,3],[340,3],[482,4],[525,3],[619,4],[741,4],[876,4]]},"99":{"position":[[529,3],[577,3],[609,3],[952,3]]},"101":{"position":[[145,3],[465,5]]},"105":{"position":[[389,3]]}}}],["usag",{"_index":108,"t":{"4":{"position":[[1326,6]]},"14":{"position":[[378,6]]}}}],["user",{"_index":42,"t":{"4":{"position":[[176,4]]},"10":{"position":[[1466,6]]},"16":{"position":[[476,5],[1073,4]]},"25":{"position":[[288,5]]},"63":{"position":[[117,5],[186,4]]},"77":{"position":[[153,5]]},"95":{"position":[[85,5]]},"99":{"position":[[83,5]]},"101":{"position":[[639,5]]}}}],["user’",{"_index":791,"t":{"49":{"position":[[196,6]]}}}],["util",{"_index":441,"t":{"10":{"position":[[7306,7],[7594,7]]},"73":{"position":[[441,8]]}}}],["utilis",{"_index":492,"t":{"14":{"position":[[429,7]]}}}],["utils/json",{"_index":729,"t":{"41":{"position":[[714,10]]}}}],["v1",{"_index":583,"t":{"21":{"position":[[429,2]]}}}],["v1.0",{"_index":593,"t":{"23":{"position":[[280,4]]}}}],["v2",{"_index":721,"t":{"41":{"position":[[379,2]]}}}],["v4",{"_index":683,"t":{"38":{"position":[[80,2],[452,2]]}}}],["valid",{"_index":387,"t":{"10":{"position":[[5644,11],[5751,9],[5770,9],[5849,10]]},"16":{"position":[[1585,5]]},"55":{"position":[[484,11]]},"107":{"position":[[752,8]]}}}],["vari",{"_index":516,"t":{"16":{"position":[[150,5]]},"75":{"position":[[771,4]]}}}],["varieti",{"_index":1177,"t":{"103":{"position":[[81,7]]}}}],["variou",{"_index":245,"t":{"10":{"position":[[1704,7],[4177,7],[4557,7]]},"29":{"position":[[47,7]]},"31":{"position":[[160,7],[216,7]]},"65":{"position":[[107,7]]}}}],["vast",{"_index":370,"t":{"10":{"position":[[4825,4]]}}}],["veri",{"_index":211,"t":{"10":{"position":[[1021,4]]}}}],["verifi",{"_index":334,"t":{"10":{"position":[[3885,6]]},"16":{"position":[[1121,6]]},"41":{"position":[[237,8],[272,8]]},"43":{"position":[[296,8]]}}}],["version",{"_index":577,"t":{"21":{"position":[[267,8]]},"29":{"position":[[222,7],[400,7]]},"38":{"position":[[469,8]]},"53":{"position":[[22,7]]}}}],["via",{"_index":674,"t":{"36":{"position":[[41,4]]},"49":{"position":[[564,3]]},"89":{"position":[[1566,3]]},"93":{"position":[[137,3]]}}}],["victim",{"_index":67,"t":{"4":{"position":[[568,6]]}}}],["video",{"_index":1099,"t":{"89":{"position":[[1570,5]]},"101":{"position":[[410,6],[532,7],[880,6]]}}}],["view",{"_index":812,"t":{"51":{"position":[[258,6]]}}}],["violat",{"_index":949,"t":{"73":{"position":[[325,9]]},"83":{"position":[[244,9]]}}}],["virtual/onlin",{"_index":1101,"t":{"89":{"position":[[1587,14]]}}}],["visit",{"_index":1141,"t":{"95":{"position":[[185,8]]}}}],["visitor",{"_index":1153,"t":{"99":{"position":[[1127,7],[1244,9]]}}}],["vital",{"_index":179,"t":{"10":{"position":[[475,5]]}}}],["wait",{"_index":280,"t":{"10":{"position":[[2465,5]]},"41":{"position":[[801,4]]}}}],["waiv",{"_index":1071,"t":{"89":{"position":[[453,6],[588,5],[2192,5]]},"91":{"position":[[778,6]]}}}],["waku",{"_index":22,"t":{"2":{"position":[[265,5]]},"38":{"position":[[395,4]]}}}],["want",{"_index":501,"t":{"14":{"position":[[649,4]]}}}],["wari",{"_index":444,"t":{"10":{"position":[[7431,4]]}}}],["warn",{"_index":141,"t":{"8":{"position":[[221,8]]}}}],["warrant",{"_index":950,"t":{"73":{"position":[[356,7]]}}}],["warranti",{"_index":941,"t":{"73":{"position":[[128,10],[205,10],[1343,8]]},"91":{"position":[[187,11]]}}}],["way",{"_index":238,"t":{"10":{"position":[[1589,3],[4257,3]]},"41":{"position":[[898,3]]},"81":{"position":[[275,3]]},"99":{"position":[[684,3]]}}}],["web3",{"_index":116,"t":{"6":{"position":[[89,4]]},"10":{"position":[[4661,4]]},"12":{"position":[[127,4]]},"27":{"position":[[187,5]]}}}],["websit",{"_index":911,"t":{"69":{"position":[[50,7],[71,9],[172,8],[238,8],[285,7],[339,7],[367,7],[431,7],[484,7],[537,8]]},"71":{"position":[[26,7]]},"73":{"position":[[4,7],[66,7],[509,8],[538,7],[575,8],[740,7],[866,7],[1031,7],[1644,7]]},"75":{"position":[[4,7],[475,7],[1149,7],[1187,8],[1223,7]]},"77":{"position":[[4,7],[381,8]]},"79":{"position":[[18,7],[62,8],[169,9],[207,9],[298,8],[364,8],[473,8],[554,8],[584,8],[624,8],[645,8],[748,9]]},"81":{"position":[[300,7],[326,8],[354,8],[382,8]]},"83":{"position":[[173,8],[201,8],[263,7]]},"85":{"position":[[42,7],[132,7],[178,7],[253,8]]},"87":{"position":[[24,7]]},"89":{"position":[[159,7],[185,8],[213,8],[241,8]]},"91":{"position":[[6,7],[87,7],[242,8],[323,7],[465,7],[508,7],[602,7],[724,7],[859,7]]},"95":{"position":[[137,7],[145,12],[198,8]]},"99":{"position":[[96,8],[540,8],[588,7],[857,8],[1236,7]]},"101":{"position":[[130,7],[392,7]]},"103":{"position":[[117,7]]},"109":{"position":[[8,8],[58,9],[241,9]]},"111":{"position":[[106,7],[221,8]]}}}],["week",{"_index":632,"t":{"29":{"position":[[179,5]]}}}],["welcom",{"_index":148,"t":{"8":{"position":[[300,7]]},"27":{"position":[[482,8]]}}}],["well",{"_index":1104,"t":{"89":{"position":[[1691,4]]}}}],["what’",{"_index":999,"t":{"75":{"position":[[781,6]]}}}],["whenev",{"_index":935,"t":{"71":{"position":[[270,8]]},"97":{"position":[[329,8]]}}}],["wherev",{"_index":1190,"t":{"107":{"position":[[98,8]]}}}],["whether",{"_index":149,"t":{"8":{"position":[[332,7]]},"73":{"position":[[1366,7],[1397,7]]},"87":{"position":[[82,7]]}}}],["whitepap",{"_index":556,"t":{"16":{"position":[[1934,10]]}}}],["wide",{"_index":484,"t":{"14":{"position":[[180,4]]}}}],["widespread",{"_index":479,"t":{"12":{"position":[[773,10]]}}}],["will",{"_index":378,"t":{"10":{"position":[[5240,7]]}}}],["wip",{"_index":525,"t":{"16":{"position":[[711,3]]},"41":{"position":[[1086,3]]},"55":{"position":[[604,5],[745,5]]},"65":{"position":[[39,5]]}}}],["wire",{"_index":790,"t":{"49":{"position":[[125,6]]}}}],["withdraw",{"_index":1196,"t":{"107":{"position":[[550,8]]}}}],["withdrawn",{"_index":1198,"t":{"107":{"position":[[807,9]]}}}],["within",{"_index":552,"t":{"16":{"position":[[1851,6]]},"89":{"position":[[1055,6],[2078,6]]}}}],["without",{"_index":88,"t":{"4":{"position":[[928,7]]},"10":{"position":[[4846,7]]},"73":{"position":[[182,7]]},"75":{"position":[[1384,7]]},"83":{"position":[[220,7]]},"85":{"position":[[79,7]]},"87":{"position":[[115,7]]},"111":{"position":[[73,7]]}}}],["word",{"_index":136,"t":{"8":{"position":[[121,6]]}}}],["work",{"_index":313,"t":{"10":{"position":[[3295,5]]},"23":{"position":[[31,7]]},"27":{"position":[[210,7],[555,4]]},"29":{"position":[[515,5]]},"34":{"position":[[80,7]]},"38":{"position":[[225,4]]},"41":{"position":[[579,4],[653,4]]},"49":{"position":[[485,4]]},"51":{"position":[[363,7],[481,7],[544,4]]},"53":{"position":[[178,4]]},"55":{"position":[[372,7]]},"61":{"position":[[334,7]]},"65":{"position":[[0,7]]}}}],["worker",{"_index":662,"t":{"34":{"position":[[218,6]]}}}],["workload",{"_index":871,"t":{"59":{"position":[[114,8]]}}}],["worldwid",{"_index":558,"t":{"18":{"position":[[40,11],[82,11],[135,11]]}}}],["worthwhil",{"_index":283,"t":{"10":{"position":[[2514,11]]}}}],["wrap",{"_index":628,"t":{"29":{"position":[[70,4]]},"36":{"position":[[11,7]]}}}],["write",{"_index":595,"t":{"23":{"position":[[419,5]]},"38":{"position":[[281,5]]}}}],["written",{"_index":802,"t":{"49":{"position":[[587,7]]},"89":{"position":[[862,7]]},"91":{"position":[[204,7]]}}}],["wrote",{"_index":684,"t":{"38":{"position":[[83,5]]}}}],["x",{"_index":160,"t":{"8":{"position":[[524,1]]}}}],["ye",{"_index":294,"t":{"10":{"position":[[2793,4],[4147,4],[7787,4]]}}}],["year",{"_index":220,"t":{"10":{"position":[[1150,6]]},"16":{"position":[[771,5]]},"45":{"position":[[146,5]]},"89":{"position":[[2089,4]]}}}],["youtub",{"_index":1165,"t":{"101":{"position":[[379,8],[422,8],[540,7],[649,7],[814,7]]}}}],["youtube’",{"_index":1168,"t":{"101":{"position":[[471,9],[860,9]]}}}],["zero",{"_index":561,"t":{"18":{"position":[[94,4]]},"53":{"position":[[77,4]]}}}],["zk",{"_index":470,"t":{"12":{"position":[[567,2]]},"23":{"position":[[231,2],[437,2]]},"27":{"position":[[108,2]]},"53":{"position":[[100,5]]}}}],["zug",{"_index":924,"t":{"71":{"position":[[140,3],[254,3]]},"89":{"position":[[1527,4]]},"97":{"position":[[200,3],[313,3]]}}}]],"pipeline":["stemmer"]}}] \ No newline at end of file diff --git a/security/index.html b/security/index.html index bd35e08..87750c6 100644 --- a/security/index.html +++ b/security/index.html @@ -3,19 +3,19 @@ -Security | Codex +Security | Codex - - - + + +
- - + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}
+ + \ No newline at end of file diff --git a/server.bundle.js b/server.bundle.js deleted file mode 100644 index 28f230a..0000000 --- a/server.bundle.js +++ /dev/null @@ -1,414651 +0,0 @@ -/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ 31665: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" }); -const React = __webpack_require__(67294); -const reactDom = __webpack_require__(73935); -const react = __webpack_require__(16657); -function _interopNamespaceDefault(e) { - const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } }); - if (e) { - for (const k2 in e) { - if (k2 !== "default") { - const d2 = Object.getOwnPropertyDescriptor(e, k2); - Object.defineProperty(n, k2, d2.get ? d2 : { - enumerable: true, - get: () => e[k2] - }); - } - } - } - n.default = e; - return Object.freeze(n); -} -const React__namespace = /* @__PURE__ */ _interopNamespaceDefault(React); -function sheetForTag(tag) { - if (tag.sheet) { - return tag.sheet; - } - for (var i2 = 0; i2 < document.styleSheets.length; i2++) { - if (document.styleSheets[i2].ownerNode === tag) { - return document.styleSheets[i2]; - } - } -} -function createStyleElement(options) { - var tag = document.createElement("style"); - tag.setAttribute("data-emotion", options.key); - if (options.nonce !== void 0) { - tag.setAttribute("nonce", options.nonce); - } - tag.appendChild(document.createTextNode("")); - tag.setAttribute("data-s", ""); - return tag; -} -var StyleSheet = /* @__PURE__ */ function() { - function StyleSheet2(options) { - var _this = this; - this._insertTag = function(tag) { - var before; - if (_this.tags.length === 0) { - if (_this.insertionPoint) { - before = _this.insertionPoint.nextSibling; - } else if (_this.prepend) { - before = _this.container.firstChild; - } else { - before = _this.before; - } - } else { - before = _this.tags[_this.tags.length - 1].nextSibling; - } - _this.container.insertBefore(tag, before); - _this.tags.push(tag); - }; - this.isSpeedy = options.speedy === void 0 ? "production" === "production" : options.speedy; - this.tags = []; - this.ctr = 0; - this.nonce = options.nonce; - this.key = options.key; - this.container = options.container; - this.prepend = options.prepend; - this.insertionPoint = options.insertionPoint; - this.before = null; - } - var _proto = StyleSheet2.prototype; - _proto.hydrate = function hydrate(nodes) { - nodes.forEach(this._insertTag); - }; - _proto.insert = function insert(rule) { - if (this.ctr % (this.isSpeedy ? 65e3 : 1) === 0) { - this._insertTag(createStyleElement(this)); - } - var tag = this.tags[this.tags.length - 1]; - if (false) { var isImportRule3; } - if (this.isSpeedy) { - var sheet = sheetForTag(tag); - try { - sheet.insertRule(rule, sheet.cssRules.length); - } catch (e) { - if (false) {} - } - } else { - tag.appendChild(document.createTextNode(rule)); - } - this.ctr++; - }; - _proto.flush = function flush() { - this.tags.forEach(function(tag) { - return tag.parentNode && tag.parentNode.removeChild(tag); - }); - this.tags = []; - this.ctr = 0; - if (false) {} - }; - return StyleSheet2; -}(); -var MS = "-ms-"; -var MOZ = "-moz-"; -var WEBKIT = "-webkit-"; -var COMMENT = "comm"; -var RULESET = "rule"; -var DECLARATION = "decl"; -var IMPORT = "@import"; -var KEYFRAMES = "@keyframes"; -var abs = Math.abs; -var from = String.fromCharCode; -var assign = Object.assign; -function hash(value, length2) { - return charat(value, 0) ^ 45 ? (((length2 << 2 ^ charat(value, 0)) << 2 ^ charat(value, 1)) << 2 ^ charat(value, 2)) << 2 ^ charat(value, 3) : 0; -} -function trim(value) { - return value.trim(); -} -function match(value, pattern) { - return (value = pattern.exec(value)) ? value[0] : value; -} -function replace(value, pattern, replacement) { - return value.replace(pattern, replacement); -} -function indexof(value, search) { - return value.indexOf(search); -} -function charat(value, index) { - return value.charCodeAt(index) | 0; -} -function substr(value, begin, end) { - return value.slice(begin, end); -} -function strlen(value) { - return value.length; -} -function sizeof(value) { - return value.length; -} -function append(value, array) { - return array.push(value), value; -} -function combine(array, callback) { - return array.map(callback).join(""); -} -var line = 1; -var column = 1; -var length = 0; -var position = 0; -var character = 0; -var characters = ""; -function node(value, root2, parent2, type, props, children, length2) { - return { value, root: root2, parent: parent2, type, props, children, line, column, length: length2, return: "" }; -} -function copy(root2, props) { - return assign(node("", null, null, "", null, null, 0), root2, { length: -root2.length }, props); -} -function char() { - return character; -} -function prev() { - character = position > 0 ? charat(characters, --position) : 0; - if (column--, character === 10) - column = 1, line--; - return character; -} -function next() { - character = position < length ? charat(characters, position++) : 0; - if (column++, character === 10) - column = 1, line++; - return character; -} -function peek() { - return charat(characters, position); -} -function caret() { - return position; -} -function slice(begin, end) { - return substr(characters, begin, end); -} -function token(type) { - switch (type) { - case 0: - case 9: - case 10: - case 13: - case 32: - return 5; - case 33: - case 43: - case 44: - case 47: - case 62: - case 64: - case 126: - case 59: - case 123: - case 125: - return 4; - case 58: - return 3; - case 34: - case 39: - case 40: - case 91: - return 2; - case 41: - case 93: - return 1; - } - return 0; -} -function alloc(value) { - return line = column = 1, length = strlen(characters = value), position = 0, []; -} -function dealloc(value) { - return characters = "", value; -} -function delimit(type) { - return trim(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type))); -} -function whitespace(type) { - while (character = peek()) - if (character < 33) - next(); - else - break; - return token(type) > 2 || token(character) > 3 ? "" : " "; -} -function escaping(index, count) { - while (--count && next()) - if (character < 48 || character > 102 || character > 57 && character < 65 || character > 70 && character < 97) - break; - return slice(index, caret() + (count < 6 && peek() == 32 && next() == 32)); -} -function delimiter(type) { - while (next()) - switch (character) { - case type: - return position; - case 34: - case 39: - if (type !== 34 && type !== 39) - delimiter(character); - break; - case 40: - if (type === 41) - delimiter(type); - break; - case 92: - next(); - break; - } - return position; -} -function commenter(type, index) { - while (next()) - if (type + character === 47 + 10) - break; - else if (type + character === 42 + 42 && peek() === 47) - break; - return "/*" + slice(index, position - 1) + "*" + from(type === 47 ? type : next()); -} -function identifier(index) { - while (!token(peek())) - next(); - return slice(index, position); -} -function compile(value) { - return dealloc(parse("", null, null, null, [""], value = alloc(value), 0, [0], value)); -} -function parse(value, root2, parent2, rule, rules, rulesets, pseudo, points, declarations) { - var index = 0; - var offset = 0; - var length2 = pseudo; - var atrule = 0; - var property = 0; - var previous = 0; - var variable = 1; - var scanning = 1; - var ampersand = 1; - var character2 = 0; - var type = ""; - var props = rules; - var children = rulesets; - var reference = rule; - var characters2 = type; - while (scanning) - switch (previous = character2, character2 = next()) { - case 40: - if (previous != 108 && charat(characters2, length2 - 1) == 58) { - if (indexof(characters2 += replace(delimit(character2), "&", "&\f"), "&\f") != -1) - ampersand = -1; - break; - } - case 34: - case 39: - case 91: - characters2 += delimit(character2); - break; - case 9: - case 10: - case 13: - case 32: - characters2 += whitespace(previous); - break; - case 92: - characters2 += escaping(caret() - 1, 7); - continue; - case 47: - switch (peek()) { - case 42: - case 47: - append(comment(commenter(next(), caret()), root2, parent2), declarations); - break; - default: - characters2 += "/"; - } - break; - case 123 * variable: - points[index++] = strlen(characters2) * ampersand; - case 125 * variable: - case 59: - case 0: - switch (character2) { - case 0: - case 125: - scanning = 0; - case 59 + offset: - if (property > 0 && strlen(characters2) - length2) - append(property > 32 ? declaration(characters2 + ";", rule, parent2, length2 - 1) : declaration(replace(characters2, " ", "") + ";", rule, parent2, length2 - 2), declarations); - break; - case 59: - characters2 += ";"; - default: - append(reference = ruleset(characters2, root2, parent2, index, offset, rules, points, type, props = [], children = [], length2), rulesets); - if (character2 === 123) - if (offset === 0) - parse(characters2, root2, reference, reference, props, rulesets, length2, points, children); - else - switch (atrule === 99 && charat(characters2, 3) === 110 ? 100 : atrule) { - case 100: - case 109: - case 115: - parse(value, reference, reference, rule && append(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length2), children), rules, children, length2, points, rule ? props : children); - break; - default: - parse(characters2, reference, reference, reference, [""], children, 0, points, children); - } - } - index = offset = property = 0, variable = ampersand = 1, type = characters2 = "", length2 = pseudo; - break; - case 58: - length2 = 1 + strlen(characters2), property = previous; - default: - if (variable < 1) { - if (character2 == 123) - --variable; - else if (character2 == 125 && variable++ == 0 && prev() == 125) - continue; - } - switch (characters2 += from(character2), character2 * variable) { - case 38: - ampersand = offset > 0 ? 1 : (characters2 += "\f", -1); - break; - case 44: - points[index++] = (strlen(characters2) - 1) * ampersand, ampersand = 1; - break; - case 64: - if (peek() === 45) - characters2 += delimit(next()); - atrule = peek(), offset = length2 = strlen(type = characters2 += identifier(caret())), character2++; - break; - case 45: - if (previous === 45 && strlen(characters2) == 2) - variable = 0; - } - } - return rulesets; -} -function ruleset(value, root2, parent2, index, offset, rules, points, type, props, children, length2) { - var post = offset - 1; - var rule = offset === 0 ? rules : [""]; - var size = sizeof(rule); - for (var i2 = 0, j = 0, k2 = 0; i2 < index; ++i2) - for (var x2 = 0, y2 = substr(value, post + 1, post = abs(j = points[i2])), z = value; x2 < size; ++x2) - if (z = trim(j > 0 ? rule[x2] + " " + y2 : replace(y2, /&\f/g, rule[x2]))) - props[k2++] = z; - return node(value, root2, parent2, offset === 0 ? RULESET : type, props, children, length2); -} -function comment(value, root2, parent2) { - return node(value, root2, parent2, COMMENT, from(char()), substr(value, 2, -2), 0); -} -function declaration(value, root2, parent2, length2) { - return node(value, root2, parent2, DECLARATION, substr(value, 0, length2), substr(value, length2 + 1, -1), length2); -} -function serialize(children, callback) { - var output = ""; - var length2 = sizeof(children); - for (var i2 = 0; i2 < length2; i2++) - output += callback(children[i2], i2, children, callback) || ""; - return output; -} -function stringify(element, index, children, callback) { - switch (element.type) { - case IMPORT: - case DECLARATION: - return element.return = element.return || element.value; - case COMMENT: - return ""; - case KEYFRAMES: - return element.return = element.value + "{" + serialize(element.children, callback) + "}"; - case RULESET: - element.value = element.props.join(","); - } - return strlen(children = serialize(element.children, callback)) ? element.return = element.value + "{" + children + "}" : ""; -} -function middleware(collection) { - var length2 = sizeof(collection); - return function(element, index, children, callback) { - var output = ""; - for (var i2 = 0; i2 < length2; i2++) - output += collection[i2](element, index, children, callback) || ""; - return output; - }; -} -function rulesheet(callback) { - return function(element) { - if (!element.root) { - if (element = element.return) - callback(element); - } - }; -} -function memoize$2(fn) { - var cache = /* @__PURE__ */ Object.create(null); - return function(arg) { - if (cache[arg] === void 0) - cache[arg] = fn(arg); - return cache[arg]; - }; -} -var identifierWithPointTracking = function identifierWithPointTracking2(begin, points, index) { - var previous = 0; - var character2 = 0; - while (true) { - previous = character2; - character2 = peek(); - if (previous === 38 && character2 === 12) { - points[index] = 1; - } - if (token(character2)) { - break; - } - next(); - } - return slice(begin, position); -}; -var toRules = function toRules2(parsed, points) { - var index = -1; - var character2 = 44; - do { - switch (token(character2)) { - case 0: - if (character2 === 38 && peek() === 12) { - points[index] = 1; - } - parsed[index] += identifierWithPointTracking(position - 1, points, index); - break; - case 2: - parsed[index] += delimit(character2); - break; - case 4: - if (character2 === 44) { - parsed[++index] = peek() === 58 ? "&\f" : ""; - points[index] = parsed[index].length; - break; - } - default: - parsed[index] += from(character2); - } - } while (character2 = next()); - return parsed; -}; -var getRules = function getRules2(value, points) { - return dealloc(toRules(alloc(value), points)); -}; -var fixedElements = /* @__PURE__ */ new WeakMap(); -var compat = function compat2(element) { - if (element.type !== "rule" || !element.parent || // positive .length indicates that this rule contains pseudo - // negative .length indicates that this rule has been already prefixed - element.length < 1) { - return; - } - var value = element.value, parent2 = element.parent; - var isImplicitRule = element.column === parent2.column && element.line === parent2.line; - while (parent2.type !== "rule") { - parent2 = parent2.parent; - if (!parent2) - return; - } - if (element.props.length === 1 && value.charCodeAt(0) !== 58 && !fixedElements.get(parent2)) { - return; - } - if (isImplicitRule) { - return; - } - fixedElements.set(element, true); - var points = []; - var rules = getRules(value, points); - var parentRules = parent2.props; - for (var i2 = 0, k2 = 0; i2 < rules.length; i2++) { - for (var j = 0; j < parentRules.length; j++, k2++) { - element.props[k2] = points[i2] ? rules[i2].replace(/&\f/g, parentRules[j]) : parentRules[j] + " " + rules[i2]; - } - } -}; -var removeLabel = function removeLabel2(element) { - if (element.type === "decl") { - var value = element.value; - if ( - // charcode for l - value.charCodeAt(0) === 108 && // charcode for b - value.charCodeAt(2) === 98 - ) { - element["return"] = ""; - element.value = ""; - } - } -}; -var ignoreFlag = "emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason"; -var isIgnoringComment = function isIgnoringComment2(element) { - return element.type === "comm" && element.children.indexOf(ignoreFlag) > -1; -}; -var createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm2(cache) { - return function(element, index, children) { - if (element.type !== "rule" || cache.compat) - return; - var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g); - if (unsafePseudoClasses) { - var isNested = element.parent === children[0]; - var commentContainer = isNested ? children[0].children : ( - // global rule at the root level - children - ); - for (var i2 = commentContainer.length - 1; i2 >= 0; i2--) { - var node2 = commentContainer[i2]; - if (node2.line < element.line) { - break; - } - if (node2.column < element.column) { - if (isIgnoringComment(node2)) { - return; - } - break; - } - } - unsafePseudoClasses.forEach(function(unsafePseudoClass) { - console.error('The pseudo class "' + unsafePseudoClass + '" is potentially unsafe when doing server-side rendering. Try changing it to "' + unsafePseudoClass.split("-child")[0] + '-of-type".'); - }); - } - }; -}; -var isImportRule = function isImportRule2(element) { - return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64; -}; -var isPrependedWithRegularRules = function isPrependedWithRegularRules2(index, children) { - for (var i2 = index - 1; i2 >= 0; i2--) { - if (!isImportRule(children[i2])) { - return true; - } - } - return false; -}; -var nullifyElement = function nullifyElement2(element) { - element.type = ""; - element.value = ""; - element["return"] = ""; - element.children = ""; - element.props = ""; -}; -var incorrectImportAlarm = function incorrectImportAlarm2(element, index, children) { - if (!isImportRule(element)) { - return; - } - if (element.parent) { - console.error("`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles."); - nullifyElement(element); - } else if (isPrependedWithRegularRules(index, children)) { - console.error("`@import` rules can't be after other rules. Please put your `@import` rules before your other rules."); - nullifyElement(element); - } -}; -function prefix(value, length2) { - switch (hash(value, length2)) { - case 5103: - return WEBKIT + "print-" + value + value; - case 5737: - case 4201: - case 3177: - case 3433: - case 1641: - case 4457: - case 2921: - case 5572: - case 6356: - case 5844: - case 3191: - case 6645: - case 3005: - case 6391: - case 5879: - case 5623: - case 6135: - case 4599: - case 4855: - case 4215: - case 6389: - case 5109: - case 5365: - case 5621: - case 3829: - return WEBKIT + value + value; - case 5349: - case 4246: - case 4810: - case 6968: - case 2756: - return WEBKIT + value + MOZ + value + MS + value + value; - case 6828: - case 4268: - return WEBKIT + value + MS + value + value; - case 6165: - return WEBKIT + value + MS + "flex-" + value + value; - case 5187: - return WEBKIT + value + replace(value, /(\w+).+(:[^]+)/, WEBKIT + "box-$1$2" + MS + "flex-$1$2") + value; - case 5443: - return WEBKIT + value + MS + "flex-item-" + replace(value, /flex-|-self/, "") + value; - case 4675: - return WEBKIT + value + MS + "flex-line-pack" + replace(value, /align-content|flex-|-self/, "") + value; - case 5548: - return WEBKIT + value + MS + replace(value, "shrink", "negative") + value; - case 5292: - return WEBKIT + value + MS + replace(value, "basis", "preferred-size") + value; - case 6060: - return WEBKIT + "box-" + replace(value, "-grow", "") + WEBKIT + value + MS + replace(value, "grow", "positive") + value; - case 4554: - return WEBKIT + replace(value, /([^-])(transform)/g, "$1" + WEBKIT + "$2") + value; - case 6187: - return replace(replace(replace(value, /(zoom-|grab)/, WEBKIT + "$1"), /(image-set)/, WEBKIT + "$1"), value, "") + value; - case 5495: - case 3959: - return replace(value, /(image-set\([^]*)/, WEBKIT + "$1$`$1"); - case 4968: - return replace(replace(value, /(.+:)(flex-)?(.*)/, WEBKIT + "box-pack:$3" + MS + "flex-pack:$3"), /s.+-b[^;]+/, "justify") + WEBKIT + value + value; - case 4095: - case 3583: - case 4068: - case 2532: - return replace(value, /(.+)-inline(.+)/, WEBKIT + "$1$2") + value; - case 8116: - case 7059: - case 5753: - case 5535: - case 5445: - case 5701: - case 4933: - case 4677: - case 5533: - case 5789: - case 5021: - case 4765: - if (strlen(value) - 1 - length2 > 6) - switch (charat(value, length2 + 1)) { - case 109: - if (charat(value, length2 + 4) !== 45) - break; - case 102: - return replace(value, /(.+:)(.+)-([^]+)/, "$1" + WEBKIT + "$2-$3$1" + MOZ + (charat(value, length2 + 3) == 108 ? "$3" : "$2-$3")) + value; - case 115: - return ~indexof(value, "stretch") ? prefix(replace(value, "stretch", "fill-available"), length2) + value : value; - } - break; - case 4949: - if (charat(value, length2 + 1) !== 115) - break; - case 6444: - switch (charat(value, strlen(value) - 3 - (~indexof(value, "!important") && 10))) { - case 107: - return replace(value, ":", ":" + WEBKIT) + value; - case 101: - return replace(value, /(.+:)([^;!]+)(;|!.+)?/, "$1" + WEBKIT + (charat(value, 14) === 45 ? "inline-" : "") + "box$3$1" + WEBKIT + "$2$3$1" + MS + "$2box$3") + value; - } - break; - case 5936: - switch (charat(value, length2 + 11)) { - case 114: - return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, "tb") + value; - case 108: - return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, "tb-rl") + value; - case 45: - return WEBKIT + value + MS + replace(value, /[svh]\w+-[tblr]{2}/, "lr") + value; - } - return WEBKIT + value + MS + value + value; - } - return value; -} -var prefixer = function prefixer2(element, index, children, callback) { - if (element.length > -1) { - if (!element["return"]) - switch (element.type) { - case DECLARATION: - element["return"] = prefix(element.value, element.length); - break; - case KEYFRAMES: - return serialize([copy(element, { - value: replace(element.value, "@", "@" + WEBKIT) - })], callback); - case RULESET: - if (element.length) - return combine(element.props, function(value) { - switch (match(value, /(::plac\w+|:read-\w+)/)) { - case ":read-only": - case ":read-write": - return serialize([copy(element, { - props: [replace(value, /:(read-\w+)/, ":" + MOZ + "$1")] - })], callback); - case "::placeholder": - return serialize([copy(element, { - props: [replace(value, /:(plac\w+)/, ":" + WEBKIT + "input-$1")] - }), copy(element, { - props: [replace(value, /:(plac\w+)/, ":" + MOZ + "$1")] - }), copy(element, { - props: [replace(value, /:(plac\w+)/, MS + "input-$1")] - })], callback); - } - return ""; - }); - } - } -}; -var defaultStylisPlugins = [prefixer]; -var createCache = function createCache2(options) { - var key = options.key; - if (false) {} - if (key === "css") { - var ssrStyles = document.querySelectorAll("style[data-emotion]:not([data-s])"); - Array.prototype.forEach.call(ssrStyles, function(node2) { - var dataEmotionAttribute = node2.getAttribute("data-emotion"); - if (dataEmotionAttribute.indexOf(" ") === -1) { - return; - } - document.head.appendChild(node2); - node2.setAttribute("data-s", ""); - }); - } - var stylisPlugins = options.stylisPlugins || defaultStylisPlugins; - if (false) {} - var inserted = {}; - var container; - var nodesToHydrate = []; - { - container = options.container || document.head; - Array.prototype.forEach.call( - // this means we will ignore elements which don't have a space in them which - // means that the style elements we're looking at are only Emotion 11 server-rendered style elements - document.querySelectorAll('style[data-emotion^="' + key + ' "]'), - function(node2) { - var attrib = node2.getAttribute("data-emotion").split(" "); - for (var i2 = 1; i2 < attrib.length; i2++) { - inserted[attrib[i2]] = true; - } - nodesToHydrate.push(node2); - } - ); - } - var _insert; - var omnipresentPlugins = [compat, removeLabel]; - if (false) {} - { - var currentSheet; - var finalizingPlugins = [stringify, false ? 0 : rulesheet(function(rule) { - currentSheet.insert(rule); - })]; - var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins)); - var stylis = function stylis2(styles) { - return serialize(compile(styles), serializer); - }; - _insert = function insert(selector, serialized, sheet, shouldCache) { - currentSheet = sheet; - if (false) {} - stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles); - if (shouldCache) { - cache.inserted[serialized.name] = true; - } - }; - } - var cache = { - key, - sheet: new StyleSheet({ - key, - container, - nonce: options.nonce, - speedy: options.speedy, - prepend: options.prepend, - insertionPoint: options.insertionPoint - }), - nonce: options.nonce, - inserted, - registered: {}, - insert: _insert - }; - cache.sheet.hydrate(nodesToHydrate); - return cache; -}; -var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {}; -var reactIsExports = {}; -var reactIs$1 = { - get exports() { - return reactIsExports; - }, - set exports(v2) { - reactIsExports = v2; - } -}; -var reactIs_production_min = {}; -/** @license React v16.13.1 - * react-is.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -var hasRequiredReactIs_production_min; -function requireReactIs_production_min() { - if (hasRequiredReactIs_production_min) - return reactIs_production_min; - hasRequiredReactIs_production_min = 1; - var b2 = "function" === typeof Symbol && Symbol.for, c2 = b2 ? Symbol.for("react.element") : 60103, d2 = b2 ? Symbol.for("react.portal") : 60106, e = b2 ? Symbol.for("react.fragment") : 60107, f2 = b2 ? Symbol.for("react.strict_mode") : 60108, g2 = b2 ? Symbol.for("react.profiler") : 60114, h2 = b2 ? Symbol.for("react.provider") : 60109, k2 = b2 ? Symbol.for("react.context") : 60110, l2 = b2 ? Symbol.for("react.async_mode") : 60111, m2 = b2 ? Symbol.for("react.concurrent_mode") : 60111, n = b2 ? Symbol.for("react.forward_ref") : 60112, p2 = b2 ? Symbol.for("react.suspense") : 60113, q2 = b2 ? Symbol.for("react.suspense_list") : 60120, r2 = b2 ? Symbol.for("react.memo") : 60115, t = b2 ? Symbol.for("react.lazy") : 60116, v2 = b2 ? Symbol.for("react.block") : 60121, w2 = b2 ? Symbol.for("react.fundamental") : 60117, x2 = b2 ? Symbol.for("react.responder") : 60118, y2 = b2 ? Symbol.for("react.scope") : 60119; - function z(a2) { - if ("object" === typeof a2 && null !== a2) { - var u2 = a2.$$typeof; - switch (u2) { - case c2: - switch (a2 = a2.type, a2) { - case l2: - case m2: - case e: - case g2: - case f2: - case p2: - return a2; - default: - switch (a2 = a2 && a2.$$typeof, a2) { - case k2: - case n: - case t: - case r2: - case h2: - return a2; - default: - return u2; - } - } - case d2: - return u2; - } - } - } - function A(a2) { - return z(a2) === m2; - } - reactIs_production_min.AsyncMode = l2; - reactIs_production_min.ConcurrentMode = m2; - reactIs_production_min.ContextConsumer = k2; - reactIs_production_min.ContextProvider = h2; - reactIs_production_min.Element = c2; - reactIs_production_min.ForwardRef = n; - reactIs_production_min.Fragment = e; - reactIs_production_min.Lazy = t; - reactIs_production_min.Memo = r2; - reactIs_production_min.Portal = d2; - reactIs_production_min.Profiler = g2; - reactIs_production_min.StrictMode = f2; - reactIs_production_min.Suspense = p2; - reactIs_production_min.isAsyncMode = function(a2) { - return A(a2) || z(a2) === l2; - }; - reactIs_production_min.isConcurrentMode = A; - reactIs_production_min.isContextConsumer = function(a2) { - return z(a2) === k2; - }; - reactIs_production_min.isContextProvider = function(a2) { - return z(a2) === h2; - }; - reactIs_production_min.isElement = function(a2) { - return "object" === typeof a2 && null !== a2 && a2.$$typeof === c2; - }; - reactIs_production_min.isForwardRef = function(a2) { - return z(a2) === n; - }; - reactIs_production_min.isFragment = function(a2) { - return z(a2) === e; - }; - reactIs_production_min.isLazy = function(a2) { - return z(a2) === t; - }; - reactIs_production_min.isMemo = function(a2) { - return z(a2) === r2; - }; - reactIs_production_min.isPortal = function(a2) { - return z(a2) === d2; - }; - reactIs_production_min.isProfiler = function(a2) { - return z(a2) === g2; - }; - reactIs_production_min.isStrictMode = function(a2) { - return z(a2) === f2; - }; - reactIs_production_min.isSuspense = function(a2) { - return z(a2) === p2; - }; - reactIs_production_min.isValidElementType = function(a2) { - return "string" === typeof a2 || "function" === typeof a2 || a2 === e || a2 === m2 || a2 === g2 || a2 === f2 || a2 === p2 || a2 === q2 || "object" === typeof a2 && null !== a2 && (a2.$$typeof === t || a2.$$typeof === r2 || a2.$$typeof === h2 || a2.$$typeof === k2 || a2.$$typeof === n || a2.$$typeof === w2 || a2.$$typeof === x2 || a2.$$typeof === y2 || a2.$$typeof === v2); - }; - reactIs_production_min.typeOf = z; - return reactIs_production_min; -} -var reactIs_development = {}; -/** @license React v16.13.1 - * react-is.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -var hasRequiredReactIs_development; -function requireReactIs_development() { - if (hasRequiredReactIs_development) - return reactIs_development; - hasRequiredReactIs_development = 1; - if (false) {} - return reactIs_development; -} -(function(module2) { - if (true) { - module2.exports = requireReactIs_production_min(); - } else {} -})(reactIs$1); -var reactIs = reactIsExports; -var FORWARD_REF_STATICS = { - "$$typeof": true, - render: true, - defaultProps: true, - displayName: true, - propTypes: true -}; -var MEMO_STATICS = { - "$$typeof": true, - compare: true, - defaultProps: true, - displayName: true, - propTypes: true, - type: true -}; -var TYPE_STATICS = {}; -TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS; -TYPE_STATICS[reactIs.Memo] = MEMO_STATICS; -var isBrowser = true; -function getRegisteredStyles(registered, registeredStyles, classNames) { - var rawClassName = ""; - classNames.split(" ").forEach(function(className) { - if (registered[className] !== void 0) { - registeredStyles.push(registered[className] + ";"); - } else { - rawClassName += className + " "; - } - }); - return rawClassName; -} -var registerStyles = function registerStyles2(cache, serialized, isStringTag) { - var className = cache.key + "-" + serialized.name; - if ( - // we only need to add the styles to the registered cache if the - // class name could be used further down - // the tree but if it's a string tag, we know it won't - // so we don't have to add it to registered cache. - // this improves memory usage since we can avoid storing the whole style string - (isStringTag === false || // we need to always store it if we're in compat mode and - // in node since emotion-server relies on whether a style is in - // the registered cache to know whether a style is global or not - // also, note that this check will be dead code eliminated in the browser - isBrowser === false) && cache.registered[className] === void 0 - ) { - cache.registered[className] = serialized.styles; - } -}; -var insertStyles = function insertStyles2(cache, serialized, isStringTag) { - registerStyles(cache, serialized, isStringTag); - var className = cache.key + "-" + serialized.name; - if (cache.inserted[serialized.name] === void 0) { - var current = serialized; - do { - cache.insert(serialized === current ? "." + className : "", current, cache.sheet, true); - current = current.next; - } while (current !== void 0); - } -}; -function murmur2(str) { - var h2 = 0; - var k2, i2 = 0, len = str.length; - for (; len >= 4; ++i2, len -= 4) { - k2 = str.charCodeAt(i2) & 255 | (str.charCodeAt(++i2) & 255) << 8 | (str.charCodeAt(++i2) & 255) << 16 | (str.charCodeAt(++i2) & 255) << 24; - k2 = /* Math.imul(k, m): */ - (k2 & 65535) * 1540483477 + ((k2 >>> 16) * 59797 << 16); - k2 ^= /* k >>> r: */ - k2 >>> 24; - h2 = /* Math.imul(k, m): */ - (k2 & 65535) * 1540483477 + ((k2 >>> 16) * 59797 << 16) ^ /* Math.imul(h, m): */ - (h2 & 65535) * 1540483477 + ((h2 >>> 16) * 59797 << 16); - } - switch (len) { - case 3: - h2 ^= (str.charCodeAt(i2 + 2) & 255) << 16; - case 2: - h2 ^= (str.charCodeAt(i2 + 1) & 255) << 8; - case 1: - h2 ^= str.charCodeAt(i2) & 255; - h2 = /* Math.imul(h, m): */ - (h2 & 65535) * 1540483477 + ((h2 >>> 16) * 59797 << 16); - } - h2 ^= h2 >>> 13; - h2 = /* Math.imul(h, m): */ - (h2 & 65535) * 1540483477 + ((h2 >>> 16) * 59797 << 16); - return ((h2 ^ h2 >>> 15) >>> 0).toString(36); -} -var unitlessKeys = { - animationIterationCount: 1, - borderImageOutset: 1, - borderImageSlice: 1, - borderImageWidth: 1, - boxFlex: 1, - boxFlexGroup: 1, - boxOrdinalGroup: 1, - columnCount: 1, - columns: 1, - flex: 1, - flexGrow: 1, - flexPositive: 1, - flexShrink: 1, - flexNegative: 1, - flexOrder: 1, - gridRow: 1, - gridRowEnd: 1, - gridRowSpan: 1, - gridRowStart: 1, - gridColumn: 1, - gridColumnEnd: 1, - gridColumnSpan: 1, - gridColumnStart: 1, - msGridRow: 1, - msGridRowSpan: 1, - msGridColumn: 1, - msGridColumnSpan: 1, - fontWeight: 1, - lineHeight: 1, - opacity: 1, - order: 1, - orphans: 1, - tabSize: 1, - widows: 1, - zIndex: 1, - zoom: 1, - WebkitLineClamp: 1, - // SVG-related properties - fillOpacity: 1, - floodOpacity: 1, - stopOpacity: 1, - strokeDasharray: 1, - strokeDashoffset: 1, - strokeMiterlimit: 1, - strokeOpacity: 1, - strokeWidth: 1 -}; -var ILLEGAL_ESCAPE_SEQUENCE_ERROR = (/* unused pure expression or super */ null && (`You have illegal escape sequence in your template literal, most likely inside content's property value. -Because you write your CSS inside a JavaScript string you actually have to do double escaping, so for example "content: '\\00d7';" should become "content: '\\\\00d7';". -You can read more about this here: -https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences`)); -var UNDEFINED_AS_OBJECT_KEY_ERROR = "You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key)."; -var hyphenateRegex = /[A-Z]|^ms/g; -var animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g; -var isCustomProperty = function isCustomProperty2(property) { - return property.charCodeAt(1) === 45; -}; -var isProcessableValue = function isProcessableValue2(value) { - return value != null && typeof value !== "boolean"; -}; -var processStyleName = /* @__PURE__ */ memoize$2(function(styleName) { - return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, "-$&").toLowerCase(); -}); -var processStyleValue = function processStyleValue2(key, value) { - switch (key) { - case "animation": - case "animationName": { - if (typeof value === "string") { - return value.replace(animationRegex, function(match2, p1, p2) { - cursor = { - name: p1, - styles: p2, - next: cursor - }; - return p1; - }); - } - } - } - if (unitlessKeys[key] !== 1 && !isCustomProperty(key) && typeof value === "number" && value !== 0) { - return value + "px"; - } - return value; -}; -if (false) { var hyphenatedCache, hyphenPattern, msPattern, oldProcessStyleValue, contentValues, contentValuePattern; } -var noComponentSelectorMessage = "Component selectors can only be used in conjunction with @emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware compiler transform."; -function handleInterpolation(mergedProps, registered, interpolation) { - if (interpolation == null) { - return ""; - } - if (interpolation.__emotion_styles !== void 0) { - if (false) {} - return interpolation; - } - switch (typeof interpolation) { - case "boolean": { - return ""; - } - case "object": { - if (interpolation.anim === 1) { - cursor = { - name: interpolation.name, - styles: interpolation.styles, - next: cursor - }; - return interpolation.name; - } - if (interpolation.styles !== void 0) { - var next2 = interpolation.next; - if (next2 !== void 0) { - while (next2 !== void 0) { - cursor = { - name: next2.name, - styles: next2.styles, - next: cursor - }; - next2 = next2.next; - } - } - var styles = interpolation.styles + ";"; - if (false) {} - return styles; - } - return createStringFromObject(mergedProps, registered, interpolation); - } - case "function": { - if (mergedProps !== void 0) { - var previousCursor = cursor; - var result = interpolation(mergedProps); - cursor = previousCursor; - return handleInterpolation(mergedProps, registered, result); - } else if (false) {} - break; - } - case "string": - if (false) { var replaced, matched; } - break; - } - if (registered == null) { - return interpolation; - } - var cached = registered[interpolation]; - return cached !== void 0 ? cached : interpolation; -} -function createStringFromObject(mergedProps, registered, obj) { - var string = ""; - if (Array.isArray(obj)) { - for (var i2 = 0; i2 < obj.length; i2++) { - string += handleInterpolation(mergedProps, registered, obj[i2]) + ";"; - } - } else { - for (var _key in obj) { - var value = obj[_key]; - if (typeof value !== "object") { - if (registered != null && registered[value] !== void 0) { - string += _key + "{" + registered[value] + "}"; - } else if (isProcessableValue(value)) { - string += processStyleName(_key) + ":" + processStyleValue(_key, value) + ";"; - } - } else { - if (_key === "NO_COMPONENT_SELECTOR" && "production" !== "production") {} - if (Array.isArray(value) && typeof value[0] === "string" && (registered == null || registered[value[0]] === void 0)) { - for (var _i = 0; _i < value.length; _i++) { - if (isProcessableValue(value[_i])) { - string += processStyleName(_key) + ":" + processStyleValue(_key, value[_i]) + ";"; - } - } - } else { - var interpolated = handleInterpolation(mergedProps, registered, value); - switch (_key) { - case "animation": - case "animationName": { - string += processStyleName(_key) + ":" + interpolated + ";"; - break; - } - default: { - if (false) {} - string += _key + "{" + interpolated + "}"; - } - } - } - } - } - } - return string; -} -var labelPattern = /label:\s*([^\s;\n{]+)\s*(;|$)/g; -var sourceMapPattern; -if (false) {} -var cursor; -var serializeStyles = function serializeStyles2(args, registered, mergedProps) { - if (args.length === 1 && typeof args[0] === "object" && args[0] !== null && args[0].styles !== void 0) { - return args[0]; - } - var stringMode = true; - var styles = ""; - cursor = void 0; - var strings = args[0]; - if (strings == null || strings.raw === void 0) { - stringMode = false; - styles += handleInterpolation(mergedProps, registered, strings); - } else { - if (false) {} - styles += strings[0]; - } - for (var i2 = 1; i2 < args.length; i2++) { - styles += handleInterpolation(mergedProps, registered, args[i2]); - if (stringMode) { - if (false) {} - styles += strings[i2]; - } - } - var sourceMap; - if (false) {} - labelPattern.lastIndex = 0; - var identifierName = ""; - var match2; - while ((match2 = labelPattern.exec(styles)) !== null) { - identifierName += "-" + // $FlowFixMe we know it's not null - match2[1]; - } - var name = murmur2(styles) + identifierName; - if (false) {} - return { - name, - styles, - next: cursor - }; -}; -var syncFallback = function syncFallback2(create) { - return create(); -}; -var useInsertionEffect = React__namespace["useInsertionEffect"] ? React__namespace["useInsertionEffect"] : false; -var useInsertionEffectAlwaysWithSyncFallback = useInsertionEffect || syncFallback; -var hasOwnProperty$b = {}.hasOwnProperty; -var EmotionCacheContext = /* @__PURE__ */ React.createContext( - // we're doing this to avoid preconstruct's dead code elimination in this one case - // because this module is primarily intended for the browser and node - // but it's also required in react native and similar environments sometimes - // and we could have a special build just for that - // but this is much easier and the native packages - // might use a different theme context in the future anyway - typeof HTMLElement !== "undefined" ? /* @__PURE__ */ createCache({ - key: "css" - }) : null -); -if (false) {} -EmotionCacheContext.Provider; -var withEmotionCache = function withEmotionCache2(func) { - return /* @__PURE__ */ React.forwardRef(function(props, ref) { - var cache = React.useContext(EmotionCacheContext); - return func(props, cache, ref); - }); -}; -var ThemeContext$1 = /* @__PURE__ */ React.createContext({}); -if (false) {} -var getLastPart = function getLastPart2(functionName) { - var parts = functionName.split("."); - return parts[parts.length - 1]; -}; -var getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine2(line2) { - var match2 = /^\s+at\s+([A-Za-z0-9$.]+)\s/.exec(line2); - if (match2) - return getLastPart(match2[1]); - match2 = /^([A-Za-z0-9$.]+)@/.exec(line2); - if (match2) - return getLastPart(match2[1]); - return void 0; -}; -var internalReactFunctionNames = /* @__PURE__ */ new Set(["renderWithHooks", "processChild", "finishClassComponent", "renderToString"]); -var sanitizeIdentifier = function sanitizeIdentifier2(identifier2) { - return identifier2.replace(/\$/g, "-"); -}; -var getLabelFromStackTrace = function getLabelFromStackTrace2(stackTrace) { - if (!stackTrace) - return void 0; - var lines = stackTrace.split("\n"); - for (var i2 = 0; i2 < lines.length; i2++) { - var functionName = getFunctionNameFromStackTraceLine(lines[i2]); - if (!functionName) - continue; - if (internalReactFunctionNames.has(functionName)) - break; - if (/^[A-Z]/.test(functionName)) - return sanitizeIdentifier(functionName); - } - return void 0; -}; -var typePropName = "__EMOTION_TYPE_PLEASE_DO_NOT_USE__"; -var labelPropName = "__EMOTION_LABEL_PLEASE_DO_NOT_USE__"; -var createEmotionProps = function createEmotionProps2(type, props) { - if (false) {} - var newProps = {}; - for (var key in props) { - if (hasOwnProperty$b.call(props, key)) { - newProps[key] = props[key]; - } - } - newProps[typePropName] = type; - if (false) { var label; } - return newProps; -}; -var Insertion = function Insertion2(_ref) { - var cache = _ref.cache, serialized = _ref.serialized, isStringTag = _ref.isStringTag; - registerStyles(cache, serialized, isStringTag); - useInsertionEffectAlwaysWithSyncFallback(function() { - return insertStyles(cache, serialized, isStringTag); - }); - return null; -}; -var Emotion = /* @__PURE__ */ withEmotionCache(function(props, cache, ref) { - var cssProp = props.css; - if (typeof cssProp === "string" && cache.registered[cssProp] !== void 0) { - cssProp = cache.registered[cssProp]; - } - var WrappedComponent = props[typePropName]; - var registeredStyles = [cssProp]; - var className = ""; - if (typeof props.className === "string") { - className = getRegisteredStyles(cache.registered, registeredStyles, props.className); - } else if (props.className != null) { - className = props.className + " "; - } - var serialized = serializeStyles(registeredStyles, void 0, React.useContext(ThemeContext$1)); - if (false) { var labelFromStack; } - className += cache.key + "-" + serialized.name; - var newProps = {}; - for (var key in props) { - if (hasOwnProperty$b.call(props, key) && key !== "css" && key !== typePropName && ( true || 0)) { - newProps[key] = props[key]; - } - } - newProps.ref = ref; - newProps.className = className; - return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(Insertion, { - cache, - serialized, - isStringTag: typeof WrappedComponent === "string" - }), /* @__PURE__ */ React.createElement(WrappedComponent, newProps)); -}); -if (false) {} -var jsxRuntimeExports = {}; -var jsxRuntime = { - get exports() { - return jsxRuntimeExports; - }, - set exports(v2) { - jsxRuntimeExports = v2; - } -}; -var reactJsxRuntime_production_min = {}; -/* -object-assign -(c) Sindre Sorhus -@license MIT -*/ -var objectAssign; -var hasRequiredObjectAssign; -function requireObjectAssign() { - if (hasRequiredObjectAssign) - return objectAssign; - hasRequiredObjectAssign = 1; - var getOwnPropertySymbols = Object.getOwnPropertySymbols; - var hasOwnProperty2 = Object.prototype.hasOwnProperty; - var propIsEnumerable = Object.prototype.propertyIsEnumerable; - function toObject(val) { - if (val === null || val === void 0) { - throw new TypeError("Object.assign cannot be called with null or undefined"); - } - return Object(val); - } - function shouldUseNative() { - try { - if (!Object.assign) { - return false; - } - var test1 = new String("abc"); - test1[5] = "de"; - if (Object.getOwnPropertyNames(test1)[0] === "5") { - return false; - } - var test2 = {}; - for (var i2 = 0; i2 < 10; i2++) { - test2["_" + String.fromCharCode(i2)] = i2; - } - var order2 = Object.getOwnPropertyNames(test2).map(function(n) { - return test2[n]; - }); - if (order2.join("") !== "0123456789") { - return false; - } - var test3 = {}; - "abcdefghijklmnopqrst".split("").forEach(function(letter) { - test3[letter] = letter; - }); - if (Object.keys(Object.assign({}, test3)).join("") !== "abcdefghijklmnopqrst") { - return false; - } - return true; - } catch (err) { - return false; - } - } - objectAssign = shouldUseNative() ? Object.assign : function(target, source) { - var from2; - var to = toObject(target); - var symbols; - for (var s2 = 1; s2 < arguments.length; s2++) { - from2 = Object(arguments[s2]); - for (var key in from2) { - if (hasOwnProperty2.call(from2, key)) { - to[key] = from2[key]; - } - } - if (getOwnPropertySymbols) { - symbols = getOwnPropertySymbols(from2); - for (var i2 = 0; i2 < symbols.length; i2++) { - if (propIsEnumerable.call(from2, symbols[i2])) { - to[symbols[i2]] = from2[symbols[i2]]; - } - } - } - } - return to; - }; - return objectAssign; -} -/** @license React v17.0.2 - * react-jsx-runtime.production.min.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -var hasRequiredReactJsxRuntime_production_min; -function requireReactJsxRuntime_production_min() { - if (hasRequiredReactJsxRuntime_production_min) - return reactJsxRuntime_production_min; - hasRequiredReactJsxRuntime_production_min = 1; - requireObjectAssign(); - var f2 = React, g2 = 60103; - reactJsxRuntime_production_min.Fragment = 60107; - if ("function" === typeof Symbol && Symbol.for) { - var h2 = Symbol.for; - g2 = h2("react.element"); - reactJsxRuntime_production_min.Fragment = h2("react.fragment"); - } - var m2 = f2.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner, n = Object.prototype.hasOwnProperty, p2 = { key: true, ref: true, __self: true, __source: true }; - function q2(c2, a2, k2) { - var b2, d2 = {}, e = null, l2 = null; - void 0 !== k2 && (e = "" + k2); - void 0 !== a2.key && (e = "" + a2.key); - void 0 !== a2.ref && (l2 = a2.ref); - for (b2 in a2) - n.call(a2, b2) && !p2.hasOwnProperty(b2) && (d2[b2] = a2[b2]); - if (c2 && c2.defaultProps) - for (b2 in a2 = c2.defaultProps, a2) - void 0 === d2[b2] && (d2[b2] = a2[b2]); - return { $$typeof: g2, type: c2, key: e, ref: l2, props: d2, _owner: m2.current }; - } - reactJsxRuntime_production_min.jsx = q2; - reactJsxRuntime_production_min.jsxs = q2; - return reactJsxRuntime_production_min; -} -var reactJsxRuntime_development = {}; -/** @license React v17.0.2 - * react-jsx-runtime.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ -var hasRequiredReactJsxRuntime_development; -function requireReactJsxRuntime_development() { - if (hasRequiredReactJsxRuntime_development) - return reactJsxRuntime_development; - hasRequiredReactJsxRuntime_development = 1; - (function(exports2) { - if (false) {} - })(reactJsxRuntime_development); - return reactJsxRuntime_development; -} -(function(module2) { - if (true) { - module2.exports = requireReactJsxRuntime_production_min(); - } else {} -})(jsxRuntime); -const Fragment$1 = jsxRuntimeExports.Fragment; -const jsx$1 = jsxRuntimeExports.jsx; -const jsxs$1 = jsxRuntimeExports.jsxs; -var Fragment = Fragment$1; -function jsx(type, props, key) { - if (!hasOwnProperty$b.call(props, "css")) { - return jsx$1(type, props, key); - } - return jsx$1(Emotion, createEmotionProps(type, props), key); -} -function jsxs(type, props, key) { - if (!hasOwnProperty$b.call(props, "css")) { - return jsxs$1(type, props, key); - } - return jsxs$1(Emotion, createEmotionProps(type, props), key); -} -function r(e) { - var t, f2, n = ""; - if ("string" == typeof e || "number" == typeof e) - n += e; - else if ("object" == typeof e) - if (Array.isArray(e)) - for (t = 0; t < e.length; t++) - e[t] && (f2 = r(e[t])) && (n && (n += " "), n += f2); - else - for (t in e) - e[t] && (n && (n += " "), n += t); - return n; -} -function clsx() { - for (var e, t, f2 = 0, n = ""; f2 < arguments.length; ) - (e = arguments[f2++]) && (t = r(e)) && (n && (n += " "), n += t); - return n; -} -const useInput = (props) => { - const [value, setValue] = React.useState(props.value ?? props.defaultValue); - const uncontrolled = typeof props.value === "undefined"; - const filled = typeof value === "undefined" ? false : typeof value === "string" ? value.length > 0 : value.toString().length > 0; - const onChange = (event) => { - if (uncontrolled) { - const type = event.target.type; - const value2 = event.target[type === "checkbox" || type === "radio" ? "checked" : "value"]; - setValue(value2); - } - props.onChange && props.onChange(event); - }; - const setter = (value2) => { - var _a, _b, _c, _d; - const element = ((_a = props == null ? void 0 : props.ref) == null ? void 0 : _a.current) ?? (typeof props.getInput === "function" && props.getInput()); - if (!element) - return; - const event = new Event("input", { - bubbles: true - }); - (_d = (_c = (_b = Object.getOwnPropertyDescriptor(window.HTMLInputElement.prototype, "value")) == null ? void 0 : _b.set) == null ? void 0 : _c.call) == null ? void 0 : _d.call(_c, element, value2); - element.dispatchEvent(event); - }; - React.useEffect(() => { - !uncontrolled && setValue(props.value); - }, [uncontrolled, props.value]); - return { - value, - filled, - onChange, - setValue: setter - }; -}; -function arrayMap$2(array, iteratee) { - var index = -1, length2 = array == null ? 0 : array.length, result = Array(length2); - while (++index < length2) { - result[index] = iteratee(array[index], index, array); - } - return result; -} -var _arrayMap = arrayMap$2; -function listCacheClear$1() { - this.__data__ = []; - this.size = 0; -} -var _listCacheClear = listCacheClear$1; -function eq$2(value, other) { - return value === other || value !== value && other !== other; -} -var eq_1 = eq$2; -var eq$1 = eq_1; -function assocIndexOf$4(array, key) { - var length2 = array.length; - while (length2--) { - if (eq$1(array[length2][0], key)) { - return length2; - } - } - return -1; -} -var _assocIndexOf = assocIndexOf$4; -var assocIndexOf$3 = _assocIndexOf; -var arrayProto = Array.prototype; -var splice = arrayProto.splice; -function listCacheDelete$1(key) { - var data = this.__data__, index = assocIndexOf$3(data, key); - if (index < 0) { - return false; - } - var lastIndex = data.length - 1; - if (index == lastIndex) { - data.pop(); - } else { - splice.call(data, index, 1); - } - --this.size; - return true; -} -var _listCacheDelete = listCacheDelete$1; -var assocIndexOf$2 = _assocIndexOf; -function listCacheGet$1(key) { - var data = this.__data__, index = assocIndexOf$2(data, key); - return index < 0 ? void 0 : data[index][1]; -} -var _listCacheGet = listCacheGet$1; -var assocIndexOf$1 = _assocIndexOf; -function listCacheHas$1(key) { - return assocIndexOf$1(this.__data__, key) > -1; -} -var _listCacheHas = listCacheHas$1; -var assocIndexOf = _assocIndexOf; -function listCacheSet$1(key, value) { - var data = this.__data__, index = assocIndexOf(data, key); - if (index < 0) { - ++this.size; - data.push([key, value]); - } else { - data[index][1] = value; - } - return this; -} -var _listCacheSet = listCacheSet$1; -var listCacheClear = _listCacheClear, listCacheDelete = _listCacheDelete, listCacheGet = _listCacheGet, listCacheHas = _listCacheHas, listCacheSet = _listCacheSet; -function ListCache$4(entries) { - var index = -1, length2 = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length2) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} -ListCache$4.prototype.clear = listCacheClear; -ListCache$4.prototype["delete"] = listCacheDelete; -ListCache$4.prototype.get = listCacheGet; -ListCache$4.prototype.has = listCacheHas; -ListCache$4.prototype.set = listCacheSet; -var _ListCache = ListCache$4; -var ListCache$3 = _ListCache; -function stackClear$1() { - this.__data__ = new ListCache$3(); - this.size = 0; -} -var _stackClear = stackClear$1; -function stackDelete$1(key) { - var data = this.__data__, result = data["delete"](key); - this.size = data.size; - return result; -} -var _stackDelete = stackDelete$1; -function stackGet$1(key) { - return this.__data__.get(key); -} -var _stackGet = stackGet$1; -function stackHas$1(key) { - return this.__data__.has(key); -} -var _stackHas = stackHas$1; -var freeGlobal$1 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal; -var _freeGlobal = freeGlobal$1; -var freeGlobal = _freeGlobal; -var freeSelf = typeof self == "object" && self && self.Object === Object && self; -var root$8 = freeGlobal || freeSelf || Function("return this")(); -var _root = root$8; -var root$7 = _root; -var Symbol$6 = root$7.Symbol; -var _Symbol = Symbol$6; -var Symbol$5 = _Symbol; -var objectProto$d = Object.prototype; -var hasOwnProperty$a = objectProto$d.hasOwnProperty; -var nativeObjectToString$1 = objectProto$d.toString; -var symToStringTag$1 = Symbol$5 ? Symbol$5.toStringTag : void 0; -function getRawTag$1(value) { - var isOwn = hasOwnProperty$a.call(value, symToStringTag$1), tag = value[symToStringTag$1]; - try { - value[symToStringTag$1] = void 0; - var unmasked = true; - } catch (e) { - } - var result = nativeObjectToString$1.call(value); - if (unmasked) { - if (isOwn) { - value[symToStringTag$1] = tag; - } else { - delete value[symToStringTag$1]; - } - } - return result; -} -var _getRawTag = getRawTag$1; -var objectProto$c = Object.prototype; -var nativeObjectToString = objectProto$c.toString; -function objectToString$1(value) { - return nativeObjectToString.call(value); -} -var _objectToString = objectToString$1; -var Symbol$4 = _Symbol, getRawTag = _getRawTag, objectToString = _objectToString; -var nullTag = "[object Null]", undefinedTag = "[object Undefined]"; -var symToStringTag = Symbol$4 ? Symbol$4.toStringTag : void 0; -function baseGetTag$6(value) { - if (value == null) { - return value === void 0 ? undefinedTag : nullTag; - } - return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); -} -var _baseGetTag = baseGetTag$6; -function isObject$6(value) { - var type = typeof value; - return value != null && (type == "object" || type == "function"); -} -var isObject_1 = isObject$6; -var baseGetTag$5 = _baseGetTag, isObject$5 = isObject_1; -var asyncTag = "[object AsyncFunction]", funcTag$2 = "[object Function]", genTag$1 = "[object GeneratorFunction]", proxyTag = "[object Proxy]"; -function isFunction$2(value) { - if (!isObject$5(value)) { - return false; - } - var tag = baseGetTag$5(value); - return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag; -} -var isFunction_1 = isFunction$2; -var root$6 = _root; -var coreJsData$1 = root$6["__core-js_shared__"]; -var _coreJsData = coreJsData$1; -var coreJsData = _coreJsData; -var maskSrcKey = function() { - var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || ""); - return uid ? "Symbol(src)_1." + uid : ""; -}(); -function isMasked$1(func) { - return !!maskSrcKey && maskSrcKey in func; -} -var _isMasked = isMasked$1; -var funcProto$2 = Function.prototype; -var funcToString$2 = funcProto$2.toString; -function toSource$2(func) { - if (func != null) { - try { - return funcToString$2.call(func); - } catch (e) { - } - try { - return func + ""; - } catch (e) { - } - } - return ""; -} -var _toSource = toSource$2; -var isFunction$1 = isFunction_1, isMasked = _isMasked, isObject$4 = isObject_1, toSource$1 = _toSource; -var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; -var reIsHostCtor = /^\[object .+?Constructor\]$/; -var funcProto$1 = Function.prototype, objectProto$b = Object.prototype; -var funcToString$1 = funcProto$1.toString; -var hasOwnProperty$9 = objectProto$b.hasOwnProperty; -var reIsNative = RegExp( - "^" + funcToString$1.call(hasOwnProperty$9).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$" -); -function baseIsNative$1(value) { - if (!isObject$4(value) || isMasked(value)) { - return false; - } - var pattern = isFunction$1(value) ? reIsNative : reIsHostCtor; - return pattern.test(toSource$1(value)); -} -var _baseIsNative = baseIsNative$1; -function getValue$1(object, key) { - return object == null ? void 0 : object[key]; -} -var _getValue = getValue$1; -var baseIsNative = _baseIsNative, getValue = _getValue; -function getNative$7(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : void 0; -} -var _getNative = getNative$7; -var getNative$6 = _getNative, root$5 = _root; -var Map$4 = getNative$6(root$5, "Map"); -var _Map = Map$4; -var getNative$5 = _getNative; -var nativeCreate$4 = getNative$5(Object, "create"); -var _nativeCreate = nativeCreate$4; -var nativeCreate$3 = _nativeCreate; -function hashClear$1() { - this.__data__ = nativeCreate$3 ? nativeCreate$3(null) : {}; - this.size = 0; -} -var _hashClear = hashClear$1; -function hashDelete$1(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; -} -var _hashDelete = hashDelete$1; -var nativeCreate$2 = _nativeCreate; -var HASH_UNDEFINED$1 = "__lodash_hash_undefined__"; -var objectProto$a = Object.prototype; -var hasOwnProperty$8 = objectProto$a.hasOwnProperty; -function hashGet$1(key) { - var data = this.__data__; - if (nativeCreate$2) { - var result = data[key]; - return result === HASH_UNDEFINED$1 ? void 0 : result; - } - return hasOwnProperty$8.call(data, key) ? data[key] : void 0; -} -var _hashGet = hashGet$1; -var nativeCreate$1 = _nativeCreate; -var objectProto$9 = Object.prototype; -var hasOwnProperty$7 = objectProto$9.hasOwnProperty; -function hashHas$1(key) { - var data = this.__data__; - return nativeCreate$1 ? data[key] !== void 0 : hasOwnProperty$7.call(data, key); -} -var _hashHas = hashHas$1; -var nativeCreate = _nativeCreate; -var HASH_UNDEFINED = "__lodash_hash_undefined__"; -function hashSet$1(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value; - return this; -} -var _hashSet = hashSet$1; -var hashClear = _hashClear, hashDelete = _hashDelete, hashGet = _hashGet, hashHas = _hashHas, hashSet = _hashSet; -function Hash$1(entries) { - var index = -1, length2 = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length2) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} -Hash$1.prototype.clear = hashClear; -Hash$1.prototype["delete"] = hashDelete; -Hash$1.prototype.get = hashGet; -Hash$1.prototype.has = hashHas; -Hash$1.prototype.set = hashSet; -var _Hash = Hash$1; -var Hash = _Hash, ListCache$2 = _ListCache, Map$3 = _Map; -function mapCacheClear$1() { - this.size = 0; - this.__data__ = { - "hash": new Hash(), - "map": new (Map$3 || ListCache$2)(), - "string": new Hash() - }; -} -var _mapCacheClear = mapCacheClear$1; -function isKeyable$1(value) { - var type = typeof value; - return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; -} -var _isKeyable = isKeyable$1; -var isKeyable = _isKeyable; -function getMapData$4(map, key) { - var data = map.__data__; - return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; -} -var _getMapData = getMapData$4; -var getMapData$3 = _getMapData; -function mapCacheDelete$1(key) { - var result = getMapData$3(this, key)["delete"](key); - this.size -= result ? 1 : 0; - return result; -} -var _mapCacheDelete = mapCacheDelete$1; -var getMapData$2 = _getMapData; -function mapCacheGet$1(key) { - return getMapData$2(this, key).get(key); -} -var _mapCacheGet = mapCacheGet$1; -var getMapData$1 = _getMapData; -function mapCacheHas$1(key) { - return getMapData$1(this, key).has(key); -} -var _mapCacheHas = mapCacheHas$1; -var getMapData = _getMapData; -function mapCacheSet$1(key, value) { - var data = getMapData(this, key), size = data.size; - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; -} -var _mapCacheSet = mapCacheSet$1; -var mapCacheClear = _mapCacheClear, mapCacheDelete = _mapCacheDelete, mapCacheGet = _mapCacheGet, mapCacheHas = _mapCacheHas, mapCacheSet = _mapCacheSet; -function MapCache$2(entries) { - var index = -1, length2 = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length2) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } -} -MapCache$2.prototype.clear = mapCacheClear; -MapCache$2.prototype["delete"] = mapCacheDelete; -MapCache$2.prototype.get = mapCacheGet; -MapCache$2.prototype.has = mapCacheHas; -MapCache$2.prototype.set = mapCacheSet; -var _MapCache = MapCache$2; -var ListCache$1 = _ListCache, Map$2 = _Map, MapCache$1 = _MapCache; -var LARGE_ARRAY_SIZE = 200; -function stackSet$1(key, value) { - var data = this.__data__; - if (data instanceof ListCache$1) { - var pairs2 = data.__data__; - if (!Map$2 || pairs2.length < LARGE_ARRAY_SIZE - 1) { - pairs2.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache$1(pairs2); - } - data.set(key, value); - this.size = data.size; - return this; -} -var _stackSet = stackSet$1; -var ListCache = _ListCache, stackClear = _stackClear, stackDelete = _stackDelete, stackGet = _stackGet, stackHas = _stackHas, stackSet = _stackSet; -function Stack$1(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; -} -Stack$1.prototype.clear = stackClear; -Stack$1.prototype["delete"] = stackDelete; -Stack$1.prototype.get = stackGet; -Stack$1.prototype.has = stackHas; -Stack$1.prototype.set = stackSet; -var _Stack = Stack$1; -function arrayEach$1(array, iteratee) { - var index = -1, length2 = array == null ? 0 : array.length; - while (++index < length2) { - if (iteratee(array[index], index, array) === false) { - break; - } - } - return array; -} -var _arrayEach = arrayEach$1; -var getNative$4 = _getNative; -var defineProperty$2 = function() { - try { - var func = getNative$4(Object, "defineProperty"); - func({}, "", {}); - return func; - } catch (e) { - } -}(); -var _defineProperty = defineProperty$2; -var defineProperty$1 = _defineProperty; -function baseAssignValue$2(object, key, value) { - if (key == "__proto__" && defineProperty$1) { - defineProperty$1(object, key, { - "configurable": true, - "enumerable": true, - "value": value, - "writable": true - }); - } else { - object[key] = value; - } -} -var _baseAssignValue = baseAssignValue$2; -var baseAssignValue$1 = _baseAssignValue, eq = eq_1; -var objectProto$8 = Object.prototype; -var hasOwnProperty$6 = objectProto$8.hasOwnProperty; -function assignValue$3(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty$6.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) { - baseAssignValue$1(object, key, value); - } -} -var _assignValue = assignValue$3; -var assignValue$2 = _assignValue, baseAssignValue = _baseAssignValue; -function copyObject$5(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - var index = -1, length2 = props.length; - while (++index < length2) { - var key = props[index]; - var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0; - if (newValue === void 0) { - newValue = source[key]; - } - if (isNew) { - baseAssignValue(object, key, newValue); - } else { - assignValue$2(object, key, newValue); - } - } - return object; -} -var _copyObject = copyObject$5; -function baseTimes$1(n, iteratee) { - var index = -1, result = Array(n); - while (++index < n) { - result[index] = iteratee(index); - } - return result; -} -var _baseTimes = baseTimes$1; -function isObjectLike$7(value) { - return value != null && typeof value == "object"; -} -var isObjectLike_1 = isObjectLike$7; -var baseGetTag$4 = _baseGetTag, isObjectLike$6 = isObjectLike_1; -var argsTag$2 = "[object Arguments]"; -function baseIsArguments$1(value) { - return isObjectLike$6(value) && baseGetTag$4(value) == argsTag$2; -} -var _baseIsArguments = baseIsArguments$1; -var baseIsArguments = _baseIsArguments, isObjectLike$5 = isObjectLike_1; -var objectProto$7 = Object.prototype; -var hasOwnProperty$5 = objectProto$7.hasOwnProperty; -var propertyIsEnumerable$1 = objectProto$7.propertyIsEnumerable; -var isArguments$3 = baseIsArguments(function() { - return arguments; -}()) ? baseIsArguments : function(value) { - return isObjectLike$5(value) && hasOwnProperty$5.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee"); -}; -var isArguments_1 = isArguments$3; -var isArray$8 = Array.isArray; -var isArray_1 = isArray$8; -var isBufferExports = {}; -var isBuffer$2 = { - get exports() { - return isBufferExports; - }, - set exports(v2) { - isBufferExports = v2; - } -}; -function stubFalse() { - return false; -} -var stubFalse_1 = stubFalse; -(function(module2, exports2) { - var root2 = _root, stubFalse2 = stubFalse_1; - var freeExports = exports2 && !exports2.nodeType && exports2; - var freeModule = freeExports && true && module2 && !module2.nodeType && module2; - var moduleExports = freeModule && freeModule.exports === freeExports; - var Buffer = moduleExports ? root2.Buffer : void 0; - var nativeIsBuffer = Buffer ? Buffer.isBuffer : void 0; - var isBuffer2 = nativeIsBuffer || stubFalse2; - module2.exports = isBuffer2; -})(isBuffer$2, isBufferExports); -var MAX_SAFE_INTEGER$1 = 9007199254740991; -var reIsUint = /^(?:0|[1-9]\d*)$/; -function isIndex$3(value, length2) { - var type = typeof value; - length2 = length2 == null ? MAX_SAFE_INTEGER$1 : length2; - return !!length2 && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length2); -} -var _isIndex = isIndex$3; -var MAX_SAFE_INTEGER = 9007199254740991; -function isLength$3(value) { - return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; -} -var isLength_1 = isLength$3; -var baseGetTag$3 = _baseGetTag, isLength$2 = isLength_1, isObjectLike$4 = isObjectLike_1; -var argsTag$1 = "[object Arguments]", arrayTag$1 = "[object Array]", boolTag$2 = "[object Boolean]", dateTag$2 = "[object Date]", errorTag$1 = "[object Error]", funcTag$1 = "[object Function]", mapTag$4 = "[object Map]", numberTag$2 = "[object Number]", objectTag$3 = "[object Object]", regexpTag$2 = "[object RegExp]", setTag$4 = "[object Set]", stringTag$2 = "[object String]", weakMapTag$2 = "[object WeakMap]"; -var arrayBufferTag$2 = "[object ArrayBuffer]", dataViewTag$3 = "[object DataView]", float32Tag$2 = "[object Float32Array]", float64Tag$2 = "[object Float64Array]", int8Tag$2 = "[object Int8Array]", int16Tag$2 = "[object Int16Array]", int32Tag$2 = "[object Int32Array]", uint8Tag$2 = "[object Uint8Array]", uint8ClampedTag$2 = "[object Uint8ClampedArray]", uint16Tag$2 = "[object Uint16Array]", uint32Tag$2 = "[object Uint32Array]"; -var typedArrayTags = {}; -typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = typedArrayTags[int8Tag$2] = typedArrayTags[int16Tag$2] = typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = typedArrayTags[uint8ClampedTag$2] = typedArrayTags[uint16Tag$2] = typedArrayTags[uint32Tag$2] = true; -typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag$2] = typedArrayTags[boolTag$2] = typedArrayTags[dataViewTag$3] = typedArrayTags[dateTag$2] = typedArrayTags[errorTag$1] = typedArrayTags[funcTag$1] = typedArrayTags[mapTag$4] = typedArrayTags[numberTag$2] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag$2] = typedArrayTags[setTag$4] = typedArrayTags[stringTag$2] = typedArrayTags[weakMapTag$2] = false; -function baseIsTypedArray$1(value) { - return isObjectLike$4(value) && isLength$2(value.length) && !!typedArrayTags[baseGetTag$3(value)]; -} -var _baseIsTypedArray = baseIsTypedArray$1; -function baseUnary$3(func) { - return function(value) { - return func(value); - }; -} -var _baseUnary = baseUnary$3; -var _nodeUtilExports = {}; -var _nodeUtil = { - get exports() { - return _nodeUtilExports; - }, - set exports(v2) { - _nodeUtilExports = v2; - } -}; -(function(module2, exports2) { - var freeGlobal2 = _freeGlobal; - var freeExports = exports2 && !exports2.nodeType && exports2; - var freeModule = freeExports && true && module2 && !module2.nodeType && module2; - var moduleExports = freeModule && freeModule.exports === freeExports; - var freeProcess = moduleExports && freeGlobal2.process; - var nodeUtil2 = function() { - try { - var types = freeModule && freeModule.require && freeModule.require("util").types; - if (types) { - return types; - } - return freeProcess && freeProcess.binding && freeProcess.binding("util"); - } catch (e) { - } - }(); - module2.exports = nodeUtil2; -})(_nodeUtil, _nodeUtilExports); -var baseIsTypedArray = _baseIsTypedArray, baseUnary$2 = _baseUnary, nodeUtil$2 = _nodeUtilExports; -var nodeIsTypedArray = nodeUtil$2 && nodeUtil$2.isTypedArray; -var isTypedArray$1 = nodeIsTypedArray ? baseUnary$2(nodeIsTypedArray) : baseIsTypedArray; -var isTypedArray_1 = isTypedArray$1; -var baseTimes = _baseTimes, isArguments$2 = isArguments_1, isArray$7 = isArray_1, isBuffer$1 = isBufferExports, isIndex$2 = _isIndex, isTypedArray = isTypedArray_1; -var objectProto$6 = Object.prototype; -var hasOwnProperty$4 = objectProto$6.hasOwnProperty; -function arrayLikeKeys$2(value, inherited) { - var isArr = isArray$7(value), isArg = !isArr && isArguments$2(value), isBuff = !isArr && !isArg && isBuffer$1(value), isType = !isArr && !isArg && !isBuff && isTypedArray(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length2 = result.length; - for (var key in value) { - if ((inherited || hasOwnProperty$4.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode. - (key == "length" || // Node.js 0.10 has enumerable non-index properties on buffers. - isBuff && (key == "offset" || key == "parent") || // PhantomJS 2 has enumerable non-index properties on typed arrays. - isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || // Skip index properties. - isIndex$2(key, length2)))) { - result.push(key); - } - } - return result; -} -var _arrayLikeKeys = arrayLikeKeys$2; -var objectProto$5 = Object.prototype; -function isPrototype$3(value) { - var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$5; - return value === proto; -} -var _isPrototype = isPrototype$3; -function overArg$2(func, transform) { - return function(arg) { - return func(transform(arg)); - }; -} -var _overArg = overArg$2; -var overArg$1 = _overArg; -var nativeKeys$1 = overArg$1(Object.keys, Object); -var _nativeKeys = nativeKeys$1; -var isPrototype$2 = _isPrototype, nativeKeys = _nativeKeys; -var objectProto$4 = Object.prototype; -var hasOwnProperty$3 = objectProto$4.hasOwnProperty; -function baseKeys$1(object) { - if (!isPrototype$2(object)) { - return nativeKeys(object); - } - var result = []; - for (var key in Object(object)) { - if (hasOwnProperty$3.call(object, key) && key != "constructor") { - result.push(key); - } - } - return result; -} -var _baseKeys = baseKeys$1; -var isFunction = isFunction_1, isLength$1 = isLength_1; -function isArrayLike$2(value) { - return value != null && isLength$1(value.length) && !isFunction(value); -} -var isArrayLike_1 = isArrayLike$2; -var arrayLikeKeys$1 = _arrayLikeKeys, baseKeys = _baseKeys, isArrayLike$1 = isArrayLike_1; -function keys$3(object) { - return isArrayLike$1(object) ? arrayLikeKeys$1(object) : baseKeys(object); -} -var keys_1 = keys$3; -var copyObject$4 = _copyObject, keys$2 = keys_1; -function baseAssign$1(object, source) { - return object && copyObject$4(source, keys$2(source), object); -} -var _baseAssign = baseAssign$1; -function nativeKeysIn$1(object) { - var result = []; - if (object != null) { - for (var key in Object(object)) { - result.push(key); - } - } - return result; -} -var _nativeKeysIn = nativeKeysIn$1; -var isObject$3 = isObject_1, isPrototype$1 = _isPrototype, nativeKeysIn = _nativeKeysIn; -var objectProto$3 = Object.prototype; -var hasOwnProperty$2 = objectProto$3.hasOwnProperty; -function baseKeysIn$1(object) { - if (!isObject$3(object)) { - return nativeKeysIn(object); - } - var isProto = isPrototype$1(object), result = []; - for (var key in object) { - if (!(key == "constructor" && (isProto || !hasOwnProperty$2.call(object, key)))) { - result.push(key); - } - } - return result; -} -var _baseKeysIn = baseKeysIn$1; -var arrayLikeKeys = _arrayLikeKeys, baseKeysIn = _baseKeysIn, isArrayLike = isArrayLike_1; -function keysIn$3(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); -} -var keysIn_1 = keysIn$3; -var copyObject$3 = _copyObject, keysIn$2 = keysIn_1; -function baseAssignIn$1(object, source) { - return object && copyObject$3(source, keysIn$2(source), object); -} -var _baseAssignIn = baseAssignIn$1; -var _cloneBufferExports = {}; -var _cloneBuffer = { - get exports() { - return _cloneBufferExports; - }, - set exports(v2) { - _cloneBufferExports = v2; - } -}; -(function(module2, exports2) { - var root2 = _root; - var freeExports = exports2 && !exports2.nodeType && exports2; - var freeModule = freeExports && true && module2 && !module2.nodeType && module2; - var moduleExports = freeModule && freeModule.exports === freeExports; - var Buffer = moduleExports ? root2.Buffer : void 0, allocUnsafe = Buffer ? Buffer.allocUnsafe : void 0; - function cloneBuffer2(buffer, isDeep) { - if (isDeep) { - return buffer.slice(); - } - var length2 = buffer.length, result = allocUnsafe ? allocUnsafe(length2) : new buffer.constructor(length2); - buffer.copy(result); - return result; - } - module2.exports = cloneBuffer2; -})(_cloneBuffer, _cloneBufferExports); -function copyArray$1(source, array) { - var index = -1, length2 = source.length; - array || (array = Array(length2)); - while (++index < length2) { - array[index] = source[index]; - } - return array; -} -var _copyArray = copyArray$1; -function arrayFilter$1(array, predicate) { - var index = -1, length2 = array == null ? 0 : array.length, resIndex = 0, result = []; - while (++index < length2) { - var value = array[index]; - if (predicate(value, index, array)) { - result[resIndex++] = value; - } - } - return result; -} -var _arrayFilter = arrayFilter$1; -function stubArray$2() { - return []; -} -var stubArray_1 = stubArray$2; -var arrayFilter = _arrayFilter, stubArray$1 = stubArray_1; -var objectProto$2 = Object.prototype; -var propertyIsEnumerable = objectProto$2.propertyIsEnumerable; -var nativeGetSymbols$1 = Object.getOwnPropertySymbols; -var getSymbols$3 = !nativeGetSymbols$1 ? stubArray$1 : function(object) { - if (object == null) { - return []; - } - object = Object(object); - return arrayFilter(nativeGetSymbols$1(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); -}; -var _getSymbols = getSymbols$3; -var copyObject$2 = _copyObject, getSymbols$2 = _getSymbols; -function copySymbols$1(source, object) { - return copyObject$2(source, getSymbols$2(source), object); -} -var _copySymbols = copySymbols$1; -function arrayPush$3(array, values) { - var index = -1, length2 = values.length, offset = array.length; - while (++index < length2) { - array[offset + index] = values[index]; - } - return array; -} -var _arrayPush = arrayPush$3; -var overArg = _overArg; -var getPrototype$3 = overArg(Object.getPrototypeOf, Object); -var _getPrototype = getPrototype$3; -var arrayPush$2 = _arrayPush, getPrototype$2 = _getPrototype, getSymbols$1 = _getSymbols, stubArray = stubArray_1; -var nativeGetSymbols = Object.getOwnPropertySymbols; -var getSymbolsIn$2 = !nativeGetSymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush$2(result, getSymbols$1(object)); - object = getPrototype$2(object); - } - return result; -}; -var _getSymbolsIn = getSymbolsIn$2; -var copyObject$1 = _copyObject, getSymbolsIn$1 = _getSymbolsIn; -function copySymbolsIn$1(source, object) { - return copyObject$1(source, getSymbolsIn$1(source), object); -} -var _copySymbolsIn = copySymbolsIn$1; -var arrayPush$1 = _arrayPush, isArray$6 = isArray_1; -function baseGetAllKeys$2(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray$6(object) ? result : arrayPush$1(result, symbolsFunc(object)); -} -var _baseGetAllKeys = baseGetAllKeys$2; -var baseGetAllKeys$1 = _baseGetAllKeys, getSymbols = _getSymbols, keys$1 = keys_1; -function getAllKeys$1(object) { - return baseGetAllKeys$1(object, keys$1, getSymbols); -} -var _getAllKeys = getAllKeys$1; -var baseGetAllKeys = _baseGetAllKeys, getSymbolsIn = _getSymbolsIn, keysIn$1 = keysIn_1; -function getAllKeysIn$2(object) { - return baseGetAllKeys(object, keysIn$1, getSymbolsIn); -} -var _getAllKeysIn = getAllKeysIn$2; -var getNative$3 = _getNative, root$4 = _root; -var DataView$1 = getNative$3(root$4, "DataView"); -var _DataView = DataView$1; -var getNative$2 = _getNative, root$3 = _root; -var Promise$2 = getNative$2(root$3, "Promise"); -var _Promise = Promise$2; -var getNative$1 = _getNative, root$2 = _root; -var Set$2 = getNative$1(root$2, "Set"); -var _Set = Set$2; -var getNative = _getNative, root$1 = _root; -var WeakMap$2 = getNative(root$1, "WeakMap"); -var _WeakMap = WeakMap$2; -var DataView = _DataView, Map$1 = _Map, Promise$1 = _Promise, Set$1 = _Set, WeakMap$1 = _WeakMap, baseGetTag$2 = _baseGetTag, toSource = _toSource; -var mapTag$3 = "[object Map]", objectTag$2 = "[object Object]", promiseTag = "[object Promise]", setTag$3 = "[object Set]", weakMapTag$1 = "[object WeakMap]"; -var dataViewTag$2 = "[object DataView]"; -var dataViewCtorString = toSource(DataView), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap$1); -var getTag$3 = baseGetTag$2; -if (DataView && getTag$3(new DataView(new ArrayBuffer(1))) != dataViewTag$2 || Map$1 && getTag$3(new Map$1()) != mapTag$3 || Promise$1 && getTag$3(Promise$1.resolve()) != promiseTag || Set$1 && getTag$3(new Set$1()) != setTag$3 || WeakMap$1 && getTag$3(new WeakMap$1()) != weakMapTag$1) { - getTag$3 = function(value) { - var result = baseGetTag$2(value), Ctor = result == objectTag$2 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : ""; - if (ctorString) { - switch (ctorString) { - case dataViewCtorString: - return dataViewTag$2; - case mapCtorString: - return mapTag$3; - case promiseCtorString: - return promiseTag; - case setCtorString: - return setTag$3; - case weakMapCtorString: - return weakMapTag$1; - } - } - return result; - }; -} -var _getTag = getTag$3; -var objectProto$1 = Object.prototype; -var hasOwnProperty$1 = objectProto$1.hasOwnProperty; -function initCloneArray$1(array) { - var length2 = array.length, result = new array.constructor(length2); - if (length2 && typeof array[0] == "string" && hasOwnProperty$1.call(array, "index")) { - result.index = array.index; - result.input = array.input; - } - return result; -} -var _initCloneArray = initCloneArray$1; -var root = _root; -var Uint8Array$1 = root.Uint8Array; -var _Uint8Array = Uint8Array$1; -var Uint8Array = _Uint8Array; -function cloneArrayBuffer$3(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array(result).set(new Uint8Array(arrayBuffer)); - return result; -} -var _cloneArrayBuffer = cloneArrayBuffer$3; -var cloneArrayBuffer$2 = _cloneArrayBuffer; -function cloneDataView$1(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer$2(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); -} -var _cloneDataView = cloneDataView$1; -var reFlags = /\w*$/; -function cloneRegExp$1(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; -} -var _cloneRegExp = cloneRegExp$1; -var Symbol$3 = _Symbol; -var symbolProto$1 = Symbol$3 ? Symbol$3.prototype : void 0, symbolValueOf = symbolProto$1 ? symbolProto$1.valueOf : void 0; -function cloneSymbol$1(symbol) { - return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {}; -} -var _cloneSymbol = cloneSymbol$1; -var cloneArrayBuffer$1 = _cloneArrayBuffer; -function cloneTypedArray$1(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer$1(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); -} -var _cloneTypedArray = cloneTypedArray$1; -var cloneArrayBuffer = _cloneArrayBuffer, cloneDataView = _cloneDataView, cloneRegExp = _cloneRegExp, cloneSymbol = _cloneSymbol, cloneTypedArray = _cloneTypedArray; -var boolTag$1 = "[object Boolean]", dateTag$1 = "[object Date]", mapTag$2 = "[object Map]", numberTag$1 = "[object Number]", regexpTag$1 = "[object RegExp]", setTag$2 = "[object Set]", stringTag$1 = "[object String]", symbolTag$2 = "[object Symbol]"; -var arrayBufferTag$1 = "[object ArrayBuffer]", dataViewTag$1 = "[object DataView]", float32Tag$1 = "[object Float32Array]", float64Tag$1 = "[object Float64Array]", int8Tag$1 = "[object Int8Array]", int16Tag$1 = "[object Int16Array]", int32Tag$1 = "[object Int32Array]", uint8Tag$1 = "[object Uint8Array]", uint8ClampedTag$1 = "[object Uint8ClampedArray]", uint16Tag$1 = "[object Uint16Array]", uint32Tag$1 = "[object Uint32Array]"; -function initCloneByTag$1(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag$1: - return cloneArrayBuffer(object); - case boolTag$1: - case dateTag$1: - return new Ctor(+object); - case dataViewTag$1: - return cloneDataView(object, isDeep); - case float32Tag$1: - case float64Tag$1: - case int8Tag$1: - case int16Tag$1: - case int32Tag$1: - case uint8Tag$1: - case uint8ClampedTag$1: - case uint16Tag$1: - case uint32Tag$1: - return cloneTypedArray(object, isDeep); - case mapTag$2: - return new Ctor(); - case numberTag$1: - case stringTag$1: - return new Ctor(object); - case regexpTag$1: - return cloneRegExp(object); - case setTag$2: - return new Ctor(); - case symbolTag$2: - return cloneSymbol(object); - } -} -var _initCloneByTag = initCloneByTag$1; -var isObject$2 = isObject_1; -var objectCreate = Object.create; -var baseCreate$1 = function() { - function object() { - } - return function(proto) { - if (!isObject$2(proto)) { - return {}; - } - if (objectCreate) { - return objectCreate(proto); - } - object.prototype = proto; - var result = new object(); - object.prototype = void 0; - return result; - }; -}(); -var _baseCreate = baseCreate$1; -var baseCreate = _baseCreate, getPrototype$1 = _getPrototype, isPrototype = _isPrototype; -function initCloneObject$1(object) { - return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate(getPrototype$1(object)) : {}; -} -var _initCloneObject = initCloneObject$1; -var getTag$2 = _getTag, isObjectLike$3 = isObjectLike_1; -var mapTag$1 = "[object Map]"; -function baseIsMap$1(value) { - return isObjectLike$3(value) && getTag$2(value) == mapTag$1; -} -var _baseIsMap = baseIsMap$1; -var baseIsMap = _baseIsMap, baseUnary$1 = _baseUnary, nodeUtil$1 = _nodeUtilExports; -var nodeIsMap = nodeUtil$1 && nodeUtil$1.isMap; -var isMap$1 = nodeIsMap ? baseUnary$1(nodeIsMap) : baseIsMap; -var isMap_1 = isMap$1; -var getTag$1 = _getTag, isObjectLike$2 = isObjectLike_1; -var setTag$1 = "[object Set]"; -function baseIsSet$1(value) { - return isObjectLike$2(value) && getTag$1(value) == setTag$1; -} -var _baseIsSet = baseIsSet$1; -var baseIsSet = _baseIsSet, baseUnary = _baseUnary, nodeUtil = _nodeUtilExports; -var nodeIsSet = nodeUtil && nodeUtil.isSet; -var isSet$1 = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; -var isSet_1 = isSet$1; -var Stack = _Stack, arrayEach = _arrayEach, assignValue$1 = _assignValue, baseAssign = _baseAssign, baseAssignIn = _baseAssignIn, cloneBuffer = _cloneBufferExports, copyArray = _copyArray, copySymbols = _copySymbols, copySymbolsIn = _copySymbolsIn, getAllKeys = _getAllKeys, getAllKeysIn$1 = _getAllKeysIn, getTag = _getTag, initCloneArray = _initCloneArray, initCloneByTag = _initCloneByTag, initCloneObject = _initCloneObject, isArray$5 = isArray_1, isBuffer = isBufferExports, isMap = isMap_1, isObject$1 = isObject_1, isSet = isSet_1, keys = keys_1, keysIn = keysIn_1; -var CLONE_DEEP_FLAG$1 = 1, CLONE_FLAT_FLAG$1 = 2, CLONE_SYMBOLS_FLAG$1 = 4; -var argsTag = "[object Arguments]", arrayTag = "[object Array]", boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag = "[object Map]", numberTag = "[object Number]", objectTag$1 = "[object Object]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag$1 = "[object Symbol]", weakMapTag = "[object WeakMap]"; -var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]"; -var cloneableTags = {}; -cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag$1] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag$1] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; -cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false; -function baseClone$1(value, bitmask, customizer, key, object, stack) { - var result, isDeep = bitmask & CLONE_DEEP_FLAG$1, isFlat = bitmask & CLONE_FLAT_FLAG$1, isFull = bitmask & CLONE_SYMBOLS_FLAG$1; - if (customizer) { - result = object ? customizer(value, key, object, stack) : customizer(value); - } - if (result !== void 0) { - return result; - } - if (!isObject$1(value)) { - return value; - } - var isArr = isArray$5(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) { - return copyArray(value, result); - } - } else { - var tag = getTag(value), isFunc = tag == funcTag || tag == genTag; - if (isBuffer(value)) { - return cloneBuffer(value, isDeep); - } - if (tag == objectTag$1 || tag == argsTag || isFunc && !object) { - result = isFlat || isFunc ? {} : initCloneObject(value); - if (!isDeep) { - return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value)); - } - } else { - if (!cloneableTags[tag]) { - return object ? value : {}; - } - result = initCloneByTag(value, tag, isDeep); - } - } - stack || (stack = new Stack()); - var stacked = stack.get(value); - if (stacked) { - return stacked; - } - stack.set(value, result); - if (isSet(value)) { - value.forEach(function(subValue) { - result.add(baseClone$1(subValue, bitmask, customizer, subValue, value, stack)); - }); - } else if (isMap(value)) { - value.forEach(function(subValue, key2) { - result.set(key2, baseClone$1(subValue, bitmask, customizer, key2, value, stack)); - }); - } - var keysFunc = isFull ? isFlat ? getAllKeysIn$1 : getAllKeys : isFlat ? keysIn : keys; - var props = isArr ? void 0 : keysFunc(value); - arrayEach(props || value, function(subValue, key2) { - if (props) { - key2 = subValue; - subValue = value[key2]; - } - assignValue$1(result, key2, baseClone$1(subValue, bitmask, customizer, key2, value, stack)); - }); - return result; -} -var _baseClone = baseClone$1; -var baseGetTag$1 = _baseGetTag, isObjectLike$1 = isObjectLike_1; -var symbolTag = "[object Symbol]"; -function isSymbol$3(value) { - return typeof value == "symbol" || isObjectLike$1(value) && baseGetTag$1(value) == symbolTag; -} -var isSymbol_1 = isSymbol$3; -var isArray$4 = isArray_1, isSymbol$2 = isSymbol_1; -var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/; -function isKey$1(value, object) { - if (isArray$4(value)) { - return false; - } - var type = typeof value; - if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol$2(value)) { - return true; - } - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object); -} -var _isKey = isKey$1; -var MapCache = _MapCache; -var FUNC_ERROR_TEXT = "Expected a function"; -function memoize$1(func, resolver) { - if (typeof func != "function" || resolver != null && typeof resolver != "function") { - throw new TypeError(FUNC_ERROR_TEXT); - } - var memoized = function() { - var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; - if (cache.has(key)) { - return cache.get(key); - } - var result = func.apply(this, args); - memoized.cache = cache.set(key, result) || cache; - return result; - }; - memoized.cache = new (memoize$1.Cache || MapCache)(); - return memoized; -} -memoize$1.Cache = MapCache; -var memoize_1 = memoize$1; -var memoize = memoize_1; -var MAX_MEMOIZE_SIZE = 500; -function memoizeCapped$1(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) { - cache.clear(); - } - return key; - }); - var cache = result.cache; - return result; -} -var _memoizeCapped = memoizeCapped$1; -var memoizeCapped = _memoizeCapped; -var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; -var reEscapeChar = /\\(\\)?/g; -var stringToPath$1 = memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46) { - result.push(""); - } - string.replace(rePropName, function(match2, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, "$1") : number || match2); - }); - return result; -}); -var _stringToPath = stringToPath$1; -var Symbol$2 = _Symbol, arrayMap$1 = _arrayMap, isArray$3 = isArray_1, isSymbol$1 = isSymbol_1; -var INFINITY$1 = 1 / 0; -var symbolProto = Symbol$2 ? Symbol$2.prototype : void 0, symbolToString = symbolProto ? symbolProto.toString : void 0; -function baseToString$1(value) { - if (typeof value == "string") { - return value; - } - if (isArray$3(value)) { - return arrayMap$1(value, baseToString$1) + ""; - } - if (isSymbol$1(value)) { - return symbolToString ? symbolToString.call(value) : ""; - } - var result = value + ""; - return result == "0" && 1 / value == -INFINITY$1 ? "-0" : result; -} -var _baseToString = baseToString$1; -var baseToString = _baseToString; -function toString$2(value) { - return value == null ? "" : baseToString(value); -} -var toString_1 = toString$2; -var isArray$2 = isArray_1, isKey = _isKey, stringToPath = _stringToPath, toString$1 = toString_1; -function castPath$6(value, object) { - if (isArray$2(value)) { - return value; - } - return isKey(value, object) ? [value] : stringToPath(toString$1(value)); -} -var _castPath = castPath$6; -function last$1(array) { - var length2 = array == null ? 0 : array.length; - return length2 ? array[length2 - 1] : void 0; -} -var last_1 = last$1; -var isSymbol = isSymbol_1; -var INFINITY = 1 / 0; -function toKey$4(value) { - if (typeof value == "string" || isSymbol(value)) { - return value; - } - var result = value + ""; - return result == "0" && 1 / value == -INFINITY ? "-0" : result; -} -var _toKey = toKey$4; -var castPath$5 = _castPath, toKey$3 = _toKey; -function baseGet$2(object, path) { - path = castPath$5(path, object); - var index = 0, length2 = path.length; - while (object != null && index < length2) { - object = object[toKey$3(path[index++])]; - } - return index && index == length2 ? object : void 0; -} -var _baseGet = baseGet$2; -function baseSlice$1(array, start, end) { - var index = -1, length2 = array.length; - if (start < 0) { - start = -start > length2 ? 0 : length2 + start; - } - end = end > length2 ? length2 : end; - if (end < 0) { - end += length2; - } - length2 = start > end ? 0 : end - start >>> 0; - start >>>= 0; - var result = Array(length2); - while (++index < length2) { - result[index] = array[index + start]; - } - return result; -} -var _baseSlice = baseSlice$1; -var baseGet$1 = _baseGet, baseSlice = _baseSlice; -function parent$1(object, path) { - return path.length < 2 ? object : baseGet$1(object, baseSlice(path, 0, -1)); -} -var _parent = parent$1; -var castPath$4 = _castPath, last = last_1, parent = _parent, toKey$2 = _toKey; -function baseUnset$1(object, path) { - path = castPath$4(path, object); - object = parent(object, path); - return object == null || delete object[toKey$2(last(path))]; -} -var _baseUnset = baseUnset$1; -var baseGetTag = _baseGetTag, getPrototype = _getPrototype, isObjectLike = isObjectLike_1; -var objectTag = "[object Object]"; -var funcProto = Function.prototype, objectProto = Object.prototype; -var funcToString = funcProto.toString; -var hasOwnProperty = objectProto.hasOwnProperty; -var objectCtorString = funcToString.call(Object); -function isPlainObject$1(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, "constructor") && proto.constructor; - return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString; -} -var isPlainObject_1 = isPlainObject$1; -var isPlainObject = isPlainObject_1; -function customOmitClone$1(value) { - return isPlainObject(value) ? void 0 : value; -} -var _customOmitClone = customOmitClone$1; -var Symbol$1 = _Symbol, isArguments$1 = isArguments_1, isArray$1 = isArray_1; -var spreadableSymbol = Symbol$1 ? Symbol$1.isConcatSpreadable : void 0; -function isFlattenable$1(value) { - return isArray$1(value) || isArguments$1(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); -} -var _isFlattenable = isFlattenable$1; -var arrayPush = _arrayPush, isFlattenable = _isFlattenable; -function baseFlatten$1(array, depth, predicate, isStrict, result) { - var index = -1, length2 = array.length; - predicate || (predicate = isFlattenable); - result || (result = []); - while (++index < length2) { - var value = array[index]; - if (depth > 0 && predicate(value)) { - if (depth > 1) { - baseFlatten$1(value, depth - 1, predicate, isStrict, result); - } else { - arrayPush(result, value); - } - } else if (!isStrict) { - result[result.length] = value; - } - } - return result; -} -var _baseFlatten = baseFlatten$1; -var baseFlatten = _baseFlatten; -function flatten$1(array) { - var length2 = array == null ? 0 : array.length; - return length2 ? baseFlatten(array, 1) : []; -} -var flatten_1 = flatten$1; -function apply$1(func, thisArg, args) { - switch (args.length) { - case 0: - return func.call(thisArg); - case 1: - return func.call(thisArg, args[0]); - case 2: - return func.call(thisArg, args[0], args[1]); - case 3: - return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); -} -var _apply = apply$1; -var apply = _apply; -var nativeMax = Math.max; -function overRest$1(func, start, transform) { - start = nativeMax(start === void 0 ? func.length - 1 : start, 0); - return function() { - var args = arguments, index = -1, length2 = nativeMax(args.length - start, 0), array = Array(length2); - while (++index < length2) { - array[index] = args[start + index]; - } - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) { - otherArgs[index] = args[index]; - } - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; -} -var _overRest = overRest$1; -function constant$1(value) { - return function() { - return value; - }; -} -var constant_1 = constant$1; -function identity$1(value) { - return value; -} -var identity_1 = identity$1; -var constant = constant_1, defineProperty = _defineProperty, identity = identity_1; -var baseSetToString$1 = !defineProperty ? identity : function(func, string) { - return defineProperty(func, "toString", { - "configurable": true, - "enumerable": false, - "value": constant(string), - "writable": true - }); -}; -var _baseSetToString = baseSetToString$1; -var HOT_COUNT = 800, HOT_SPAN = 16; -var nativeNow = Date.now; -function shortOut$1(func) { - var count = 0, lastCalled = 0; - return function() { - var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) { - return arguments[0]; - } - } else { - count = 0; - } - return func.apply(void 0, arguments); - }; -} -var _shortOut = shortOut$1; -var baseSetToString = _baseSetToString, shortOut = _shortOut; -var setToString$1 = shortOut(baseSetToString); -var _setToString = setToString$1; -var flatten = flatten_1, overRest = _overRest, setToString = _setToString; -function flatRest$2(func) { - return setToString(overRest(func, void 0, flatten), func + ""); -} -var _flatRest = flatRest$2; -var arrayMap = _arrayMap, baseClone = _baseClone, baseUnset = _baseUnset, castPath$3 = _castPath, copyObject = _copyObject, customOmitClone = _customOmitClone, flatRest$1 = _flatRest, getAllKeysIn = _getAllKeysIn; -var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG = 4; -var omit = flatRest$1(function(object, paths) { - var result = {}; - if (object == null) { - return result; - } - var isDeep = false; - paths = arrayMap(paths, function(path) { - path = castPath$3(path, object); - isDeep || (isDeep = path.length > 1); - return path; - }); - copyObject(object, getAllKeysIn(object), result); - if (isDeep) { - result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); - } - var length2 = paths.length; - while (length2--) { - baseUnset(result, paths[length2]); - } - return result; -}); -var omit_1 = omit; -var assignValue = _assignValue, castPath$2 = _castPath, isIndex$1 = _isIndex, isObject = isObject_1, toKey$1 = _toKey; -function baseSet$1(object, path, value, customizer) { - if (!isObject(object)) { - return object; - } - path = castPath$2(path, object); - var index = -1, length2 = path.length, lastIndex = length2 - 1, nested = object; - while (nested != null && ++index < length2) { - var key = toKey$1(path[index]), newValue = value; - if (key === "__proto__" || key === "constructor" || key === "prototype") { - return object; - } - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : void 0; - if (newValue === void 0) { - newValue = isObject(objValue) ? objValue : isIndex$1(path[index + 1]) ? [] : {}; - } - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; -} -var _baseSet = baseSet$1; -var baseGet = _baseGet, baseSet = _baseSet, castPath$1 = _castPath; -function basePickBy$1(object, paths, predicate) { - var index = -1, length2 = paths.length, result = {}; - while (++index < length2) { - var path = paths[index], value = baseGet(object, path); - if (predicate(value, path)) { - baseSet(result, castPath$1(path, object), value); - } - } - return result; -} -var _basePickBy = basePickBy$1; -function baseHasIn$1(object, key) { - return object != null && key in Object(object); -} -var _baseHasIn = baseHasIn$1; -var castPath = _castPath, isArguments = isArguments_1, isArray = isArray_1, isIndex = _isIndex, isLength = isLength_1, toKey = _toKey; -function hasPath$1(object, path, hasFunc) { - path = castPath(path, object); - var index = -1, length2 = path.length, result = false; - while (++index < length2) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) { - break; - } - object = object[key]; - } - if (result || ++index != length2) { - return result; - } - length2 = object == null ? 0 : object.length; - return !!length2 && isLength(length2) && isIndex(key, length2) && (isArray(object) || isArguments(object)); -} -var _hasPath = hasPath$1; -var baseHasIn = _baseHasIn, hasPath = _hasPath; -function hasIn$1(object, path) { - return object != null && hasPath(object, path, baseHasIn); -} -var hasIn_1 = hasIn$1; -var basePickBy = _basePickBy, hasIn = hasIn_1; -function basePick$1(object, paths) { - return basePickBy(object, paths, function(value, path) { - return hasIn(object, path); - }); -} -var _basePick = basePick$1; -var basePick = _basePick, flatRest = _flatRest; -var pick = flatRest(function(object, paths) { - return object == null ? {} : basePick(object, paths); -}); -var pick_1 = pick; -const pairs = (obj, map) => Object.fromEntries((Array.isArray(obj) ? obj : Object.keys(obj)).map((key, index) => [key, map(key, index)])); -const LSD_NAMESPACE = "lsd"; -const THEME_BREAKPOINTS = ["xs", "sm", "md", "lg", "xl"]; -const THEME_TYPOGRAPHY_VARIANTS = ["display1", "display2", "display3", "display4", "h1", "h2", "h3", "h4", "h5", "h6", "subtitle1", "subtitle2", "subtitle3", "subtitle4", "body1", "body2", "body3", "label1", "label2"]; -const THEME_TYPOGRAPHY_ELEMENTS = { - h1: ["h1"], - h2: ["h2"], - h3: ["h3"], - h4: ["h4"], - h5: ["h5"], - h6: ["h6"], - body1: ["body"], - label1: ["label"] -}; -const THEME_TYPOGRAPHY_PROPERTIES = ["fontSize", "fontWeight", "lineHeight"]; -const THEME_VARIANT_PROPERTIES = ["typography"]; -const typographyClasses = { - ...pairs(THEME_TYPOGRAPHY_VARIANTS, (variant) => `lsd-typography--${variant}`), - root: `lsd-typography`, - primary: `lsd-typography--primary`, - secondary: `lsd-typography--secondary`, - serif: "lsd-typography--serif", - sansSerif: "lsd-typography--sans-serif", - monospace: "lsd-typography--monospace" -}; -const commonPropKeys = ["genericFontFamily"]; -const useCommonProps = ({ - genericFontFamily -}) => { - return { - className: clsx(genericFontFamily === "serif" && typographyClasses.serif, genericFontFamily === "monospace" && typographyClasses.monospace, genericFontFamily === "sans-serif" && typographyClasses.sansSerif) - }; -}; -const pickCommonProps = (props) => pick_1(props, commonPropKeys); -const omitCommonProps = (props) => omit_1(props, commonPropKeys); -const lsdIconClasses = { - root: "lsd-icon", - small: "lsd-icon--small", - filled: "lsd-icon--filled", - stroked: "lsd-icon--stroked", - primary: "lsd-icon--primary", - secondary: "lsd-icon--secondary" -}; -const LsdIcon = (Component, metadata) => { - const IconComponent = ({ - color, - size = "small", - className, - ...props - }) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsx(Component, { className: clsx(commonProps.className, className, lsdIconClasses.root, lsdIconClasses[size], color && lsdIconClasses[color], (metadata == null ? void 0 : metadata.filled) && lsdIconClasses.filled, (metadata == null ? void 0 : metadata.stroked) && lsdIconClasses.stroked), ...omitCommonProps(props) }); - }; - IconComponent.displayName = Component.displayName; - IconComponent.classes = lsdIconClasses; - return IconComponent; -}; -const AddIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { d: "M11.6666 7.58334H7.58325V11.6667H6.41659V7.58334H2.33325V6.41668H6.41659V2.33334H7.58325V6.41668H11.6666V7.58334Z", fill: "black" }) }), { - filled: true -}); -const ChevronDownIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { d: "M10.5 5.66125L9.6775 4.83875L7 7.51041L4.3225 4.83874L3.5 5.66125L7 9.16125L10.5 5.66125Z", fill: "black" }) }), { - filled: true -}); -const ArrowForwardIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { d: "M6.99992 2.33334L6.17742 3.15584L9.43242 6.41668H2.33325V7.58334H9.43242L6.17742 10.8442L6.99992 11.6667L11.6666 7.00001L6.99992 2.33334Z", fill: "black" }) }), { - filled: true -}); -const ChevronUpIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { d: "M3.5 8.33875L4.3225 9.16125L7 6.48959L9.6775 9.16125L10.5 8.33875L7 4.83875L3.5 8.33875Z", fill: "black" }) }), { - filled: true -}); -const CheckboxIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M2.91667 1.75H11.0833C11.725 1.75 12.25 2.275 12.25 2.91667V11.0833C12.25 11.725 11.725 12.25 11.0833 12.25H2.91667C2.275 12.25 1.75 11.725 1.75 11.0833V2.91667C1.75 2.275 2.275 1.75 2.91667 1.75ZM9.68333 4.43333L10.5 5.25L5.83333 9.91667L3.5 7.58333L4.31667 6.76667L5.83333 8.28333L9.68333 4.43333Z", fill: "black" }) }), { - filled: true -}); -const CheckboxOutlineBlankIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { d: "M11.0833 2.91667V11.0833H2.91667V2.91667H11.0833ZM11.0833 1.75H2.91667C2.275 1.75 1.75 2.275 1.75 2.91667V11.0833C1.75 11.725 2.275 12.25 2.91667 12.25H11.0833C11.725 12.25 12.25 11.725 12.25 11.0833V2.91667C12.25 2.275 11.725 1.75 11.0833 1.75Z", fill: "black" }) }), { - filled: true -}); -const CheckIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { d: "M5.25009 9.43247L2.81759 6.99997L1.98926 7.82247L5.25009 11.0833L12.2501 4.0833L11.4276 3.2608L5.25009 9.43247Z", fill: "black" }) }), { - filled: true -}); -const CloseIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { d: "M11.0834 3.73916L10.2609 2.91666L7.00008 6.17749L3.73925 2.91666L2.91675 3.73916L6.17758 6.99999L2.91675 10.2608L3.73925 11.0833L7.00008 7.82249L10.2609 11.0833L11.0834 10.2608L7.82258 6.99999L11.0834 3.73916Z", fill: "black" }) }), { - filled: true -}); -const ErrorIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M7.00008 1.16666C3.78008 1.16666 1.16675 3.77999 1.16675 6.99999C1.16675 10.22 3.78008 12.8333 7.00008 12.8333C10.2201 12.8333 12.8334 10.22 12.8334 6.99999C12.8334 3.77999 10.2201 1.16666 7.00008 1.16666ZM6.41675 9.91666V8.74999H7.58342V9.91666H6.41675ZM6.41675 4.08332V7.58332H7.58342V4.08332H6.41675Z", fill: "black" }) }), { - filled: true -}); -const FolderIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { d: "M5.34925 3.50001L6.51591 4.66668H11.6667V10.5H2.33341V3.50001H5.34925ZM5.83341 2.33334H2.33341C1.69175 2.33334 1.17258 2.85834 1.17258 3.50001L1.16675 10.5C1.16675 11.1417 1.69175 11.6667 2.33341 11.6667H11.6667C12.3084 11.6667 12.8334 11.1417 12.8334 10.5V4.66668C12.8334 4.02501 12.3084 3.50001 11.6667 3.50001H7.00008L5.83341 2.33334Z", fill: "black" }) }), { - filled: true -}); -const KeyboardReturnIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { d: "M11.0833 4.08333V6.41667H3.98417L6.0725 4.3225L5.25 3.5L1.75 7L5.25 10.5L6.0725 9.6775L3.98417 7.58333H12.25V4.08333H11.0833Z", fill: "black" }) }), { - filled: true -}); -const MenuIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M1.75 4.66667V3.5H12.25V4.66667H1.75ZM1.75 7.58333H12.25V6.41667H1.75V7.58333ZM1.75 10.5H12.25V9.33333H1.75V10.5Z", fill: "black" }) }), { - filled: true -}); -const MoreIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M3.49992 5.83334C2.85825 5.83334 2.33325 6.35834 2.33325 7.00001C2.33325 7.64168 2.85825 8.16668 3.49992 8.16668C4.14159 8.16668 4.66659 7.64168 4.66659 7.00001C4.66659 6.35834 4.14159 5.83334 3.49992 5.83334ZM10.4999 5.83334C9.85825 5.83334 9.33325 6.35834 9.33325 7.00001C9.33325 7.64168 9.85825 8.16668 10.4999 8.16668C11.1416 8.16668 11.6666 7.64168 11.6666 7.00001C11.6666 6.35834 11.1416 5.83334 10.4999 5.83334ZM5.83325 7.00001C5.83325 6.35834 6.35825 5.83334 6.99992 5.83334C7.64159 5.83334 8.16659 6.35834 8.16659 7.00001C8.16659 7.64168 7.64159 8.16668 6.99992 8.16668C6.35825 8.16668 5.83325 7.64168 5.83325 7.00001Z", fill: "black" }) }), { - filled: true -}); -const ChevronLeftIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { d: "M9.16137 4.3225L8.33887 3.5L4.83887 7L8.33887 10.5L9.16137 9.6775L6.4897 7L9.16137 4.3225Z", fill: "black" }) }), { - filled: true -}); -const ChevronRightIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { d: "M5.66137 3.5L4.83887 4.3225L7.51053 7L4.83887 9.6775L5.66137 10.5L9.16137 7L5.66137 3.5Z", fill: "black" }) }), { - filled: true -}); -const SearchIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M8.61 7.74083L11.9525 11.0833L11.0833 11.9525L7.74083 8.61C7.11667 9.05917 6.36417 9.33333 5.54167 9.33333C3.4475 9.33333 1.75 7.63583 1.75 5.54167C1.75 3.4475 3.4475 1.75 5.54167 1.75C7.63583 1.75 9.33333 3.4475 9.33333 5.54167C9.33333 6.36417 9.05917 7.11667 8.61 7.74083ZM5.54167 2.91667C4.08917 2.91667 2.91667 4.08917 2.91667 5.54167C2.91667 6.99417 4.08917 8.16667 5.54167 8.16667C6.99417 8.16667 8.16667 6.99417 8.16667 5.54167C8.16667 4.08917 6.99417 2.91667 5.54167 2.91667Z", fill: "black" }) }), { - filled: true -}); -const PickIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M9.79287 3.5H2.99998V2.5H11.5V11H10.5V4.20711L3.35353 11.3536L2.64642 10.6464L9.79287 3.5Z", fill: "black" }) }), { - filled: true -}); -const RadioButtonIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { d: "M7.0013 1.16669C3.7813 1.16669 1.16797 3.78002 1.16797 7.00002C1.16797 10.22 3.7813 12.8334 7.0013 12.8334C10.2213 12.8334 12.8346 10.22 12.8346 7.00002C12.8346 3.78002 10.2213 1.16669 7.0013 1.16669ZM7.0013 11.6667C4.42297 11.6667 2.33464 9.57835 2.33464 7.00002C2.33464 4.42169 4.42297 2.33335 7.0013 2.33335C9.57964 2.33335 11.668 4.42169 11.668 7.00002C11.668 9.57835 9.57964 11.6667 7.0013 11.6667Z", fill: "black" }) }), { - filled: true -}); -const RadioButtonCheckedIcon = LsdIcon((props) => /* @__PURE__ */ jsxs("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: [ - /* @__PURE__ */ jsx("path", { d: "M7.0013 1.16669C3.7813 1.16669 1.16797 3.78002 1.16797 7.00002C1.16797 10.22 3.7813 12.8334 7.0013 12.8334C10.2213 12.8334 12.8346 10.22 12.8346 7.00002C12.8346 3.78002 10.2213 1.16669 7.0013 1.16669ZM7.0013 11.6667C4.42297 11.6667 2.33464 9.57835 2.33464 7.00002C2.33464 4.42169 4.42297 2.33335 7.0013 2.33335C9.57964 2.33335 11.668 4.42169 11.668 7.00002C11.668 9.57835 9.57964 11.6667 7.0013 11.6667Z", fill: "black" }), - /* @__PURE__ */ jsx("path", { d: "M7.0013 9.91669C8.61213 9.91669 9.91797 8.61085 9.91797 7.00002C9.91797 5.38919 8.61213 4.08335 7.0013 4.08335C5.39047 4.08335 4.08464 5.38919 4.08464 7.00002C4.08464 8.61085 5.39047 9.91669 7.0013 9.91669Z", fill: "black" }) -] }), { - filled: true -}); -const CalendarIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { "fill-rule": "evenodd", "clip-rule": "evenodd", d: "M11.0833 2.33332H10.5V1.16666H9.33333V2.33332H4.66667V1.16666H3.5V2.33332H2.91667C2.26917 2.33332 1.75 2.85832 1.75 3.49999V11.6667C1.75 12.3083 2.26917 12.8333 2.91667 12.8333H11.0833C11.725 12.8333 12.25 12.3083 12.25 11.6667V3.49999C12.25 2.85832 11.725 2.33332 11.0833 2.33332ZM11.0833 11.6667H2.91667V5.24999H11.0833V11.6667ZM3.79167 7.58332C3.79167 6.77832 4.445 6.12499 5.25 6.12499C6.055 6.12499 6.70833 6.77832 6.70833 7.58332C6.70833 8.38832 6.055 9.04166 5.25 9.04166C4.445 9.04166 3.79167 8.38832 3.79167 7.58332Z", fill: "black" }) }), { - filled: true -}); -const RemoveIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { d: "M2.32812 7.58329V6.41663H11.6581V7.58329H2.32812Z", fill: "black" }) }), { - filled: true -}); -const Typography = ({ - color, - variant = "body1", - component, - className, - children, - ...props -}) => { - const commonProps = useCommonProps(props); - const componentName = component ?? { - h1: "h1", - h2: "h2", - h3: "h3", - h4: "h4", - h5: "h5", - h6: "h6", - label1: "label", - label2: "label" - }[variant] ?? "span"; - const Component = componentName; - return /* @__PURE__ */ jsx(Component, { className: clsx(commonProps.className, typographyClasses.root, typographyClasses[variant], color && typographyClasses[color], className), ...omitCommonProps(props), children }); -}; -Typography.classes = typographyClasses; -const dropdownItemClasses = { - root: `lsd-dropdown-item`, - icon: `lsd-dropdown-item__icon`, - label: `lsd-dropdown-item__label`, - error: "lsd-dropdown-item--error", - disabled: "lsd-dropdown-item--disabled", - selected: "lsd-dropdown-item--selected", - withIcon: "lsd-dropdown-item--with-icon", - small: `lsd-dropdown-item--small`, - medium: `lsd-dropdown-item--medium`, - large: `lsd-dropdown-item--large` -}; -const DropdownItem = ({ - label, - size = "large", - withIcon, - selected, - disabled, - className, - ...props -}) => { - const commonProps = useCommonProps(props); - const iconProps = { - color: "primary", - className: dropdownItemClasses.icon - }; - return /* @__PURE__ */ jsxs("div", { role: "option", "aria-selected": selected ? "true" : "false", ...omitCommonProps(props), className: clsx(commonProps.className, className, dropdownItemClasses.root, dropdownItemClasses[size], withIcon && dropdownItemClasses.withIcon, disabled && dropdownItemClasses.disabled), children: [ - withIcon && (selected ? /* @__PURE__ */ jsx(CheckboxIcon, { ...iconProps }) : /* @__PURE__ */ jsx(CheckboxOutlineBlankIcon, { ...iconProps })), - /* @__PURE__ */ jsx(Typography, { variant: size === "large" ? "label1" : "label2", component: "span", className: dropdownItemClasses.label, children: label }) - ] }); -}; -DropdownItem.classes = dropdownItemClasses; -function on(obj) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - if (obj && obj.addEventListener) { - obj.addEventListener.apply(obj, args); - } -} -function off(obj) { - var args = []; - for (var _i = 1; _i < arguments.length; _i++) { - args[_i - 1] = arguments[_i]; - } - if (obj && obj.removeEventListener) { - obj.removeEventListener.apply(obj, args); - } -} -var defaultEvents = ["mousedown", "touchstart"]; -var useClickAway = function(ref, onClickAway, events) { - if (events === void 0) { - events = defaultEvents; - } - var savedCallback = React.useRef(onClickAway); - React.useEffect(function() { - savedCallback.current = onClickAway; - }, [onClickAway]); - React.useEffect(function() { - var handler = function(event) { - var el = ref.current; - el && !el.contains(event.target) && savedCallback.current(event); - }; - for (var _i = 0, events_1 = events; _i < events_1.length; _i++) { - var eventName = events_1[_i]; - on(document, eventName, handler); - } - return function() { - for (var _i2 = 0, events_2 = events; _i2 < events_2.length; _i2++) { - var eventName2 = events_2[_i2]; - off(document, eventName2, handler); - } - }; - }, [events, ref]); -}; -const useClickAway$1 = useClickAway; -var useEffectOnce = function(effect) { - React.useEffect(effect, []); -}; -const useEffectOnce$1 = useEffectOnce; -var useUnmount = function(fn) { - var fnRef = React.useRef(fn); - fnRef.current = fn; - useEffectOnce$1(function() { - return function() { - return fnRef.current(); - }; - }); -}; -const useUnmount$1 = useUnmount; -var useRafState = function(initialState) { - var frame = React.useRef(0); - var _a = React.useState(initialState), state = _a[0], setState = _a[1]; - var setRafState = React.useCallback(function(value) { - cancelAnimationFrame(frame.current); - frame.current = requestAnimationFrame(function() { - setState(value); - }); - }, []); - useUnmount$1(function() { - cancelAnimationFrame(frame.current); - }); - return [state, setRafState]; -}; -const useRafState$1 = useRafState; -var useScroll = function(ref) { - if (false) {} - var _a = useRafState$1({ - x: 0, - y: 0 - }), state = _a[0], setState = _a[1]; - React.useEffect(function() { - var handler = function() { - if (ref.current) { - setState({ - x: ref.current.scrollLeft, - y: ref.current.scrollTop - }); - } - }; - if (ref.current) { - on(ref.current, "scroll", handler, { - capture: false, - passive: true - }); - } - return function() { - if (ref.current) { - off(ref.current, "scroll", handler); - } - }; - }, [ref]); - return state; -}; -const useScroll$1 = useScroll; -const dropdownMenuClasses = { - root: `lsd-dropdown-menu`, - open: "lsd-dropdown-menu--open", - large: "lsd-dropdown-menu--large", - medium: "lsd-dropdown-menu--medium", - small: "lsd-dropdown-menu--small" -}; -const useUpdatePositionStyle = (handleRef, tiggerUpdate) => { - const [style, setStyle] = React.useState({}); - React.useEffect(() => { - const { - width, - height, - top, - left - } = handleRef.current.getBoundingClientRect(); - setStyle({ - left: left + window.scrollX, - width, - top: top + height + window.scrollY - }); - }, [tiggerUpdate]); - return style; -}; -const DropdownMenu = ({ - size = "large", - open, - label, - handleRef, - onClose, - children, - ...props -}) => { - const commonProps = useCommonProps(props); - const ref = React.useRef(null); - useClickAway$1(ref, (event) => { - if (!open || event.composedPath().includes(handleRef.current)) - return; - onClose && onClose(); - }); - const positionStyle = useUpdatePositionStyle(handleRef, open); - return /* @__PURE__ */ jsx("ul", { ...omitCommonProps(props), ref, role: "listbox", "aria-label": label, style: { - ...positionStyle, - ...props.style ?? {} - }, className: clsx(commonProps.className, props.className, dropdownMenuClasses.root, dropdownMenuClasses[size], open && dropdownMenuClasses.open), children }); -}; -DropdownMenu.classes = dropdownMenuClasses; -const PortalContext = React.createContext({ - initialized: false -}); -const useCanUsePortal = () => { - var _a; - return ((_a = React.useContext(PortalContext)) == null ? void 0 : _a.initialized) ?? false; -}; -const usePortal = ({ - parentId -}) => { - const elementRef = React.useRef(); - if (typeof window !== "undefined" && !elementRef.current) { - elementRef.current = document.createElement("div"); - } - React.useEffect(() => { - var _a; - if (typeof window === "undefined" || !elementRef.current) - return; - const parentElements = document.querySelectorAll(`#${parentId}`); - (_a = parentElements[parentElements.length - 1]) == null ? void 0 : _a.appendChild(elementRef.current); - return () => { - var _a2; - try { - (_a2 = document.getElementById(parentId)) == null ? void 0 : _a2.removeChild(elementRef.current); - } catch (error) { - } - }; - }, [parentId, elementRef.current]); - return elementRef.current; -}; -const Portal = ({ - id, - children -}) => { - const canUse = useCanUsePortal(); - if (!canUse) - return /* @__PURE__ */ jsx(Fragment, {}); - return /* @__PURE__ */ jsx(PortalContent, { id, children }); -}; -const PortalContent = ({ - id, - children -}) => { - const element = usePortal({ - parentId: "lsd-presentation" - }); - if (!element) - return /* @__PURE__ */ jsx(Fragment, {}); - return reactDom.createPortal(children, element, id); -}; -const autocompleteClasses = { - root: `lsd-autocomplete`, - label: "lsd-autocomplete__label", - inputContainer: `lsd-autocomplete__input-container`, - input: `lsd-autocomplete__input`, - icon: `lsd-autocomplete__icon`, - dropdownItemPlaceholder: `lsd-autocomplete__dropdown-item-placeholder`, - disabled: `lsd-autocomplete--disabled`, - error: "lsd-autocomplete--error", - large: `lsd-autocomplete--large`, - medium: `lsd-autocomplete--medium`, - small: `lsd-autocomplete--small`, - withIcon: `lsd-autocomplete--with-icon`, - outlined: `lsd-autocomplete--outlined`, - underlined: `lsd-autocomplete--underlined` -}; -const Autocomplete = ({ - label, - size = "large", - withIcon = false, - error = false, - disabled = false, - children, - value, - defaultValue: defaultValue2, - placeholder, - onChange, - options = [], - inputProps = {}, - variant = "outlined", - ...props -}) => { - const commonProps = useCommonProps(props); - const ref = React.useRef(null); - const containerRef = React.useRef(null); - const input = useInput({ - defaultValue: defaultValue2, - value, - onChange, - ref - }); - const inputValue = input.value; - const [open, setOpen] = React.useState(false); - const [selected, setSelected] = React.useState(); - const onCancel = () => input.setValue(""); - const handleDropdownClick = (value2) => { - setOpen(false); - setSelected(value2); - input.setValue(value2); - }; - const suggestions = React.useMemo(() => input.filled ? options.filter((option) => new RegExp(`^${input.value}.+`, "i").test(option)).map((option) => [option, option.slice(0, inputValue.length), option.slice(inputValue.length)]) : options, [input.value, options]); - React.useEffect(() => { - !selected && input.filled && !open && setOpen(true); - }, [input.value, selected, open]); - const isOpen = !disabled && open && suggestions.length > 0 && input.filled; - const inputId = (inputProps == null ? void 0 : inputProps.id) ?? (props.id || "autocomplete") + "-input"; - return /* @__PURE__ */ jsxs("div", { ref: containerRef, ...omitCommonProps(props), className: clsx(props.className, commonProps.className, autocompleteClasses.root, autocompleteClasses[size], disabled && autocompleteClasses.disabled, withIcon && autocompleteClasses.withIcon, variant === "outlined" ? autocompleteClasses.outlined : autocompleteClasses.underlined), children: [ - label && /* @__PURE__ */ jsx(Typography, { htmlFor: inputId, className: autocompleteClasses.label, variant: "label2", component: "label", children: label }), - /* @__PURE__ */ jsxs("div", { className: autocompleteClasses.inputContainer, children: [ - /* @__PURE__ */ jsx("input", { id: inputId, ref, value: input.value, placeholder, onChange: input.onChange, disabled, onFocus: () => setOpen(true), ...inputProps, className: clsx(inputProps.className, autocompleteClasses.input, error && autocompleteClasses.error) }), - withIcon && input.value ? /* @__PURE__ */ jsx("span", { className: autocompleteClasses.icon, onClick: onCancel, children: /* @__PURE__ */ jsx(CloseIcon, { color: "primary" }) }) : withIcon && !input.value ? /* @__PURE__ */ jsx("span", { className: autocompleteClasses.icon, children: /* @__PURE__ */ jsx(SearchIcon, { color: "primary" }) }) : null - ] }), - /* @__PURE__ */ jsx(Portal, { id: "autocomplete", children: /* @__PURE__ */ jsx(DropdownMenu, { handleRef: containerRef, open: isOpen, onClose: () => setOpen(false), size, ...pickCommonProps(props), children: suggestions.map((opt, idx) => /* @__PURE__ */ jsx(DropdownItem, { size, tabIndex: 0, label: /* @__PURE__ */ jsxs(Fragment, { children: [ - opt[1], - /* @__PURE__ */ jsx("span", { className: autocompleteClasses.dropdownItemPlaceholder, children: opt[2] }) - ] }), onClick: () => handleDropdownClick(opt[0]), onKeyDown: (e) => e.key === "Enter" && handleDropdownClick(opt[0]) }, idx)) }) }) - ] }); -}; -Autocomplete.classes = autocompleteClasses; -const badgeClasses = { - root: `lsd-badge`, - label: `lsd-badge__label`, - outlined: `lsd-badge--outlined`, - filled: `lsd-badge--filled`, - disabled: "lsd-badge--disabled", - small: "lsd-badge--small", - large: "lsd-badge--large" -}; -const Badge = ({ - variant = "outlined", - disabled, - size = "large", - icon, - iconDirection = "left", - children, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsxs("div", { "aria-label": children, ...omitCommonProps(props), className: clsx(props.className, commonProps.className, badgeClasses.root, badgeClasses[variant], disabled && badgeClasses.disabled, badgeClasses[size]), children: [ - iconDirection === "left" && icon, - /* @__PURE__ */ jsx(Typography, { component: "span", variant: size === "small" ? "label2" : "label1", className: badgeClasses.label, children }), - iconDirection === "right" && icon - ] }); -}; -Badge.classes = badgeClasses; -const breadcrumbItemClasses = { - root: `lsd-breadcrumb-item`, - outlined: `lsd-breadcrumb-item--outlined`, - itemLink: `lsd-breadcrumb-item__link`, - large: `lsd-breadcrumb-item--large`, - small: `lsd-breadcrumb-item--small` -}; -const BreadcrumbItem = ({ - size = "large", - label, - link, - linkComponent: LinkComponent = (props2) => /* @__PURE__ */ jsx("a", { ...props2, children: props2.children }), - outlined, - selected, - ellipsisRef, - onClick, - className, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsx("li", { ...omitCommonProps(props), className: clsx(commonProps.className, breadcrumbItemClasses.root, breadcrumbItemClasses[size], className), "aria-selected": selected ? "true" : "false", onClick, ref: ellipsisRef, children: /* @__PURE__ */ jsx(LinkComponent, { href: link, className: clsx(breadcrumbItemClasses.itemLink, outlined && breadcrumbItemClasses.outlined), children: /* @__PURE__ */ jsx(Typography, { color: "primary", component: "span", variant: size === "large" ? "label1" : "label2", children: label }) }) }); -}; -BreadcrumbItem.classes = breadcrumbItemClasses; -const breadcrumbClasses = { - root: `lsd-breadcrumb`, - list: `lsd-breadcrumb__list`, - listBox: "lsd-breadcrumb__dropdown-menu", - open: "lsd-breadcrumb--open", - disabled: "lsd-breadcrumb--disabled" -}; -const Breadcrumb = ({ - size = "large", - disabled = false, - ellipsis = false, - maxItems, - value = [], - onChange, - options = [], - ...props -}) => { - const commonProps = useCommonProps(props); - const ellipsisRef = React.useRef(null); - const [open, setOpen] = React.useState(false); - maxItems = Math.max(2, Math.min(maxItems || 2, options.length)); - const [root2, ...rest] = options; - const [collapsed, visible] = !ellipsis ? [[], rest] : [rest.slice(0, rest.length - maxItems + 1), rest.slice(rest.length - maxItems + 1)]; - const renderItems = (items) => items.map((item, idx) => /* @__PURE__ */ jsx(BreadcrumbItem, { outlined: idx === visible.length - 1 && item !== root2, label: item.value, link: item.link, linkComponent: item == null ? void 0 : item.linkComponent, size }, idx)); - const onTrigger = () => { - !disabled && setOpen((value2) => !value2); - }; - React.useEffect(() => { - if (disabled && open) - setOpen(false); - }, [open, disabled]); - return /* @__PURE__ */ jsxs("div", { ...omitCommonProps(props), className: clsx(props.className, commonProps.className, breadcrumbClasses.root, disabled && breadcrumbClasses.disabled, open && breadcrumbClasses.open), children: [ - /* @__PURE__ */ jsxs("ul", { className: breadcrumbClasses.list, children: [ - root2 && renderItems([root2]), - collapsed.length > 0 && /* @__PURE__ */ jsx(BreadcrumbItem, { ellipsisRef, label: "...", onClick: onTrigger, size, ...pickCommonProps(props) }), - renderItems(visible) - ] }), - (ellipsisRef == null ? void 0 : ellipsisRef.current) != null && ellipsis && maxItems && /* @__PURE__ */ jsx(Portal, { id: "breadcrumb", children: /* @__PURE__ */ jsx(DropdownMenu, { handleRef: ellipsisRef, open, onClose: () => setOpen(false), className: clsx(breadcrumbClasses.listBox), size, genericFontFamily: props.genericFontFamily, ...pickCommonProps(props), children: collapsed.map((opt, idx) => /* @__PURE__ */ jsx(BreadcrumbItem, { label: opt.value, link: opt.link, className: breadcrumbItemClasses.itemLink, linkComponent: opt == null ? void 0 : opt.linkComponent }, idx)) }) }) - ] }); -}; -Breadcrumb.classes = breadcrumbClasses; -const ButtonGroupContext = React.createContext(null); -const useButtonGroupContext = () => React.useContext(ButtonGroupContext); -const buttonClasses = { - root: `lsd-button`, - disabled: `lsd-button--disabled`, - large: `lsd-button--large`, - medium: `lsd-button--medium`, - small: `lsd-button--small`, - withIcon: `lsd-button--with-icon`, - outlined: "lsd-button--outlined", - filled: "lsd-button--filled", - text: `lsd-button__text`, - icon: `lsd-button__icon` -}; -const Button = ({ - size: sizeProp, - variant: variantProp, - disabled: disabledProp, - icon, - children, - ...props -}) => { - const context = useButtonGroupContext(); - const commonProps = useCommonProps(props); - const contextCommonProps = useCommonProps(context || {}); - const commonPropsClassName = commonProps.className || contextCommonProps.className; - const size = sizeProp ?? (context == null ? void 0 : context.size) ?? "medium"; - const variant = variantProp ?? (context == null ? void 0 : context.variant) ?? "outlined"; - const disabled = disabledProp ?? (context == null ? void 0 : context.disabled) ?? false; - return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsxs("button", { ...omitCommonProps(props), className: clsx(commonPropsClassName, props.className, buttonClasses.root, buttonClasses[size], buttonClasses[variant], disabled && buttonClasses.disabled, icon && buttonClasses.withIcon), children: [ - /* @__PURE__ */ jsx(Typography, { component: "span", className: buttonClasses.text, variant: size === "small" ? "label2" : "label1", children }), - icon && /* @__PURE__ */ jsx("span", { className: buttonClasses.icon, children: icon }) - ] }) }); -}; -Button.classes = buttonClasses; -const buttonGroupClasses = { - root: `lsd-button-group`, - outlined: `lsd-button-group--outlined`, - filled: `lsd-button-group--filled`, - disabled: `lsd-button-group--disabled`, - small: `lsd-button-group--small`, - medium: `lsd-button-group--medium`, - large: `lsd-button-group--large` -}; -const ButtonGroup = ({ - size = "large", - disabled, - variant = "outlined", - children, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsx("div", { ...omitCommonProps(props), className: clsx(commonProps.className, props.className, buttonGroupClasses.root, buttonGroupClasses[size], buttonGroupClasses[variant], disabled && buttonGroupClasses.disabled), children: /* @__PURE__ */ jsx(ButtonGroupContext.Provider, { value: { - size, - variant, - disabled - }, children }) }); -}; -ButtonGroup.classes = buttonGroupClasses; -var a$1 = { - lessThanXSeconds: { one: "less than a second", other: "less than {{count}} seconds" }, - xSeconds: { one: "1 second", other: "{{count}} seconds" }, - halfAMinute: "half a minute", - lessThanXMinutes: { one: "less than a minute", other: "less than {{count}} minutes" }, - xMinutes: { one: "1 minute", other: "{{count}} minutes" }, - aboutXHours: { one: "about 1 hour", other: "about {{count}} hours" }, - xHours: { one: "1 hour", other: "{{count}} hours" }, - xDays: { one: "1 day", other: "{{count}} days" }, - aboutXWeeks: { one: "about 1 week", other: "about {{count}} weeks" }, - xWeeks: { one: "1 week", other: "{{count}} weeks" }, - aboutXMonths: { one: "about 1 month", other: "about {{count}} months" }, - xMonths: { one: "1 month", other: "{{count}} months" }, - aboutXYears: { one: "about 1 year", other: "about {{count}} years" }, - xYears: { one: "1 year", other: "{{count}} years" }, - overXYears: { one: "over 1 year", other: "over {{count}} years" }, - almostXYears: { one: "almost 1 year", other: "almost {{count}} years" } -}; -function i(t) { - return function(e) { - var n = e || {}, r2 = n.width ? String(n.width) : t.defaultWidth; - return t.formats[r2] || t.formats[t.defaultWidth]; - }; -} -var o = { - date: i({ - formats: { - full: "EEEE, MMMM do, y", - long: "MMMM do, y", - medium: "MMM d, y", - short: "MM/dd/yyyy" - }, - defaultWidth: "full" - }), - time: i({ - formats: { full: "h:mm:ss a zzzz", long: "h:mm:ss a z", medium: "h:mm:ss a", short: "h:mm a" }, - defaultWidth: "full" - }), - dateTime: i({ - formats: { - full: "{{date}} 'at' {{time}}", - long: "{{date}} 'at' {{time}}", - medium: "{{date}}, {{time}}", - short: "{{date}}, {{time}}" - }, - defaultWidth: "full" - }) -}, u = { - lastWeek: "'last' eeee 'at' p", - yesterday: "'yesterday at' p", - today: "'today at' p", - tomorrow: "'tomorrow at' p", - nextWeek: "eeee 'at' p", - other: "P" -}; -function s(t) { - return function(e, n) { - var r2, a2 = n || {}; - if ("formatting" === (a2.context ? String(a2.context) : "standalone") && t.formattingValues) { - var i2 = t.defaultFormattingWidth || t.defaultWidth, o2 = a2.width ? String(a2.width) : i2; - r2 = t.formattingValues[o2] || t.formattingValues[i2]; - } else { - var u2 = t.defaultWidth, s2 = a2.width ? String(a2.width) : t.defaultWidth; - r2 = t.values[s2] || t.values[u2]; - } - return r2[t.argumentCallback ? t.argumentCallback(e) : e]; - }; -} -function c(t) { - return function(e, n) { - var r2 = String(e), a2 = n || {}, i2 = a2.width, o2 = i2 && t.matchPatterns[i2] || t.matchPatterns[t.defaultMatchWidth], u2 = r2.match(o2); - if (!u2) - return null; - var s2, c2 = u2[0], d2 = i2 && t.parsePatterns[i2] || t.parsePatterns[t.defaultParseWidth]; - return s2 = "[object Array]" === Object.prototype.toString.call(d2) ? function(t2, e2) { - for (var n2 = 0; n2 < t2.length; n2++) - if (e2(t2[n2])) - return n2; - }(d2, function(t2) { - return t2.test(c2); - }) : function(t2, e2) { - for (var n2 in t2) - if (t2.hasOwnProperty(n2) && e2(t2[n2])) - return n2; - }(d2, function(t2) { - return t2.test(c2); - }), s2 = t.valueCallback ? t.valueCallback(s2) : s2, { value: s2 = a2.valueCallback ? a2.valueCallback(s2) : s2, rest: r2.slice(c2.length) }; - }; -} -var d, l$1 = { - code: "en-US", - formatDistance: function(t, e, n) { - var r2; - return n = n || {}, r2 = "string" == typeof a$1[t] ? a$1[t] : 1 === e ? a$1[t].one : a$1[t].other.replace("{{count}}", e), n.addSuffix ? n.comparison > 0 ? "in " + r2 : r2 + " ago" : r2; - }, - formatLong: o, - formatRelative: function(t, e, n, r2) { - return u[t]; - }, - localize: { - ordinalNumber: function(t, e) { - var n = Number(t), r2 = n % 100; - if (r2 > 20 || r2 < 10) - switch (r2 % 10) { - case 1: - return n + "st"; - case 2: - return n + "nd"; - case 3: - return n + "rd"; - } - return n + "th"; - }, - era: s({ - values: { - narrow: ["B", "A"], - abbreviated: ["BC", "AD"], - wide: ["Before Christ", "Anno Domini"] - }, - defaultWidth: "wide" - }), - quarter: s({ - values: { - narrow: ["1", "2", "3", "4"], - abbreviated: ["Q1", "Q2", "Q3", "Q4"], - wide: ["1st quarter", "2nd quarter", "3rd quarter", "4th quarter"] - }, - defaultWidth: "wide", - argumentCallback: function(t) { - return Number(t) - 1; - } - }), - month: s({ - values: { - narrow: ["J", "F", "M", "A", "M", "J", "J", "A", "S", "O", "N", "D"], - abbreviated: [ - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - ], - wide: [ - "January", - "February", - "March", - "April", - "May", - "June", - "July", - "August", - "September", - "October", - "November", - "December" - ] - }, - defaultWidth: "wide" - }), - day: s({ - values: { - narrow: ["S", "M", "T", "W", "T", "F", "S"], - short: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"], - abbreviated: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - wide: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"] - }, - defaultWidth: "wide" - }), - dayPeriod: s({ - values: { - narrow: { - am: "a", - pm: "p", - midnight: "mi", - noon: "n", - morning: "morning", - afternoon: "afternoon", - evening: "evening", - night: "night" - }, - abbreviated: { - am: "AM", - pm: "PM", - midnight: "midnight", - noon: "noon", - morning: "morning", - afternoon: "afternoon", - evening: "evening", - night: "night" - }, - wide: { - am: "a.m.", - pm: "p.m.", - midnight: "midnight", - noon: "noon", - morning: "morning", - afternoon: "afternoon", - evening: "evening", - night: "night" - } - }, - defaultWidth: "wide", - formattingValues: { - narrow: { - am: "a", - pm: "p", - midnight: "mi", - noon: "n", - morning: "in the morning", - afternoon: "in the afternoon", - evening: "in the evening", - night: "at night" - }, - abbreviated: { - am: "AM", - pm: "PM", - midnight: "midnight", - noon: "noon", - morning: "in the morning", - afternoon: "in the afternoon", - evening: "in the evening", - night: "at night" - }, - wide: { - am: "a.m.", - pm: "p.m.", - midnight: "midnight", - noon: "noon", - morning: "in the morning", - afternoon: "in the afternoon", - evening: "in the evening", - night: "at night" - } - }, - defaultFormattingWidth: "wide" - }) - }, - match: { - ordinalNumber: (d = { - matchPattern: /^(\d+)(th|st|nd|rd)?/i, - parsePattern: /\d+/i, - valueCallback: function(t) { - return parseInt(t, 10); - } - }, function(t, e) { - var n = String(t), r2 = e || {}, a2 = n.match(d.matchPattern); - if (!a2) - return null; - var i2 = a2[0], o2 = n.match(d.parsePattern); - if (!o2) - return null; - var u2 = d.valueCallback ? d.valueCallback(o2[0]) : o2[0]; - return { value: u2 = r2.valueCallback ? r2.valueCallback(u2) : u2, rest: n.slice(i2.length) }; - }), - era: c({ - matchPatterns: { - narrow: /^(b|a)/i, - abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i, - wide: /^(before christ|before common era|anno domini|common era)/i - }, - defaultMatchWidth: "wide", - parsePatterns: { any: [/^b/i, /^(a|c)/i] }, - defaultParseWidth: "any" - }), - quarter: c({ - matchPatterns: { - narrow: /^[1234]/i, - abbreviated: /^q[1234]/i, - wide: /^[1234](th|st|nd|rd)? quarter/i - }, - defaultMatchWidth: "wide", - parsePatterns: { any: [/1/i, /2/i, /3/i, /4/i] }, - defaultParseWidth: "any", - valueCallback: function(t) { - return t + 1; - } - }), - month: c({ - matchPatterns: { - narrow: /^[jfmasond]/i, - abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i, - wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i - }, - defaultMatchWidth: "wide", - parsePatterns: { - narrow: [ - /^j/i, - /^f/i, - /^m/i, - /^a/i, - /^m/i, - /^j/i, - /^j/i, - /^a/i, - /^s/i, - /^o/i, - /^n/i, - /^d/i - ], - any: [ - /^ja/i, - /^f/i, - /^mar/i, - /^ap/i, - /^may/i, - /^jun/i, - /^jul/i, - /^au/i, - /^s/i, - /^o/i, - /^n/i, - /^d/i - ] - }, - defaultParseWidth: "any" - }), - day: c({ - matchPatterns: { - narrow: /^[smtwf]/i, - short: /^(su|mo|tu|we|th|fr|sa)/i, - abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i, - wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i - }, - defaultMatchWidth: "wide", - parsePatterns: { - narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i], - any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i] - }, - defaultParseWidth: "any" - }), - dayPeriod: c({ - matchPatterns: { - narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i, - any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i - }, - defaultMatchWidth: "any", - parsePatterns: { - any: { - am: /^a/i, - pm: /^p/i, - midnight: /^mi/i, - noon: /^no/i, - morning: /morning/i, - afternoon: /afternoon/i, - evening: /evening/i, - night: /night/i - } - }, - defaultParseWidth: "any" - }) - }, - options: { weekStartsOn: 0, firstWeekContainsDate: 1 } -}; -function f$1(t) { - if (null === t || true === t || false === t) - return NaN; - var e = Number(t); - return isNaN(e) ? e : e < 0 ? Math.ceil(e) : Math.floor(e); -} -function h(t, e) { - if (e.length < t) - throw new TypeError( - t + " argument" + (t > 1 ? "s" : "") + " required, but only " + e.length + " present" - ); -} -function m$1(t) { - h(1, arguments); - var e = Object.prototype.toString.call(t); - return t instanceof Date || "object" == typeof t && "[object Date]" === e ? new Date(t.getTime()) : "number" == typeof t || "[object Number]" === e ? new Date(t) : ("string" != typeof t && "[object String]" !== e || "undefined" == typeof console || (console.warn( - "Starting with v2.0.0-beta.1 date-fns doesn't accept strings as arguments. Please use `parseISO` to parse strings. See: https://git.io/fjule" - ), console.warn(new Error().stack)), new Date(NaN)); -} -function w$1(t, e) { - h(2, arguments); - var n = m$1(t).getTime(), r2 = f$1(e); - return new Date(n + r2); -} -function g$1(t, e) { - h(2, arguments); - var n = f$1(e); - return w$1(t, -n); -} -function y(t, e) { - switch (t) { - case "P": - return e.date({ width: "short" }); - case "PP": - return e.date({ width: "medium" }); - case "PPP": - return e.date({ width: "long" }); - case "PPPP": - default: - return e.date({ width: "full" }); - } -} -function b$1(t, e) { - switch (t) { - case "p": - return e.time({ width: "short" }); - case "pp": - return e.time({ width: "medium" }); - case "ppp": - return e.time({ width: "long" }); - case "pppp": - default: - return e.time({ width: "full" }); - } -} -var D = { - p: b$1, - P: function(t, e) { - var n, r2 = t.match(/(P+)(p+)?/), a2 = r2[1], i2 = r2[2]; - if (!i2) - return y(t, e); - switch (a2) { - case "P": - n = e.dateTime({ width: "short" }); - break; - case "PP": - n = e.dateTime({ width: "medium" }); - break; - case "PPP": - n = e.dateTime({ width: "long" }); - break; - case "PPPP": - default: - n = e.dateTime({ width: "full" }); - } - return n.replace("{{date}}", y(a2, e)).replace("{{time}}", b$1(i2, e)); - } -}; -function T$1(t) { - return t.getTime() % 6e4; -} -function p$1(t) { - var e = new Date(t.getTime()), n = Math.ceil(e.getTimezoneOffset()); - return e.setSeconds(0, 0), 6e4 * n + (n > 0 ? (6e4 + T$1(e)) % 6e4 : T$1(e)); -} -var k$1 = ["D", "DD"], x$1 = ["YY", "YYYY"]; -function C$1(t) { - return -1 !== k$1.indexOf(t); -} -function M$1(t) { - return -1 !== x$1.indexOf(t); -} -function U$1(t) { - if ("YYYY" === t) - throw new RangeError( - "Use `yyyy` instead of `YYYY` for formatting years; see: https://git.io/fxCyr" - ); - if ("YY" === t) - throw new RangeError("Use `yy` instead of `YY` for formatting years; see: https://git.io/fxCyr"); - if ("D" === t) - throw new RangeError( - "Use `d` instead of `D` for formatting days of the month; see: https://git.io/fxCyr" - ); - if ("DD" === t) - throw new RangeError( - "Use `dd` instead of `DD` for formatting days of the month; see: https://git.io/fxCyr" - ); -} -function S$1(t, e) { - h(1, arguments); - var n = e || {}, r2 = n.locale, a2 = r2 && r2.options && r2.options.weekStartsOn, i2 = null == a2 ? 0 : f$1(a2), o2 = null == n.weekStartsOn ? i2 : f$1(n.weekStartsOn); - if (!(o2 >= 0 && o2 <= 6)) - throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); - var u2 = m$1(t), s2 = u2.getUTCDay(), c2 = (s2 < o2 ? 7 : 0) + s2 - o2; - return u2.setUTCDate(u2.getUTCDate() - c2), u2.setUTCHours(0, 0, 0, 0), u2; -} -function P(t, e) { - h(1, arguments); - var n = m$1(t, e), r2 = n.getUTCFullYear(), a2 = e || {}, i2 = a2.locale, o2 = i2 && i2.options && i2.options.firstWeekContainsDate, u2 = null == o2 ? 1 : f$1(o2), s2 = null == a2.firstWeekContainsDate ? u2 : f$1(a2.firstWeekContainsDate); - if (!(s2 >= 1 && s2 <= 7)) - throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively"); - var c2 = new Date(0); - c2.setUTCFullYear(r2 + 1, 0, s2), c2.setUTCHours(0, 0, 0, 0); - var d2 = S$1(c2, e), l2 = new Date(0); - l2.setUTCFullYear(r2, 0, s2), l2.setUTCHours(0, 0, 0, 0); - var w2 = S$1(l2, e); - return n.getTime() >= d2.getTime() ? r2 + 1 : n.getTime() >= w2.getTime() ? r2 : r2 - 1; -} -function Y(t) { - h(1, arguments); - var e = 1, n = m$1(t), r2 = n.getUTCDay(), a2 = (r2 < e ? 7 : 0) + r2 - e; - return n.setUTCDate(n.getUTCDate() - a2), n.setUTCHours(0, 0, 0, 0), n; -} -function N(t) { - h(1, arguments); - var e = m$1(t), n = e.getUTCFullYear(), r2 = new Date(0); - r2.setUTCFullYear(n + 1, 0, 4), r2.setUTCHours(0, 0, 0, 0); - var a2 = Y(r2), i2 = new Date(0); - i2.setUTCFullYear(n, 0, 4), i2.setUTCHours(0, 0, 0, 0); - var o2 = Y(i2); - return e.getTime() >= a2.getTime() ? n + 1 : e.getTime() >= o2.getTime() ? n : n - 1; -} -function q(t) { - h(1, arguments); - var e = N(t), n = new Date(0); - n.setUTCFullYear(e, 0, 4), n.setUTCHours(0, 0, 0, 0); - var r2 = Y(n); - return r2; -} -function B(t) { - h(1, arguments); - var e = m$1(t), n = Y(e).getTime() - q(e).getTime(); - return Math.round(n / 6048e5) + 1; -} -function O$1(t, e) { - h(1, arguments); - var n = e || {}, r2 = n.locale, a2 = r2 && r2.options && r2.options.firstWeekContainsDate, i2 = null == a2 ? 1 : f$1(a2), o2 = null == n.firstWeekContainsDate ? i2 : f$1(n.firstWeekContainsDate), u2 = P(t, e), s2 = new Date(0); - s2.setUTCFullYear(u2, 0, o2), s2.setUTCHours(0, 0, 0, 0); - var c2 = S$1(s2, e); - return c2; -} -function H$1(t, e) { - h(1, arguments); - var n = m$1(t), r2 = S$1(n, e).getTime() - O$1(n, e).getTime(); - return Math.round(r2 / 6048e5) + 1; -} -function Ut(t) { - h(1, arguments); - var e = m$1(t); - return !isNaN(e); -} -function St(t, e) { - for (var n = t < 0 ? "-" : "", r2 = Math.abs(t).toString(); r2.length < e; ) - r2 = "0" + r2; - return n + r2; -} -var Pt = function(t, e) { - var n = t.getUTCFullYear(), r2 = n > 0 ? n : 1 - n; - return St("yy" === e ? r2 % 100 : r2, e.length); -}, Et = function(t, e) { - var n = t.getUTCMonth(); - return "M" === e ? String(n + 1) : St(n + 1, 2); -}, Yt = function(t, e) { - return St(t.getUTCDate(), e.length); -}, Nt = function(t, e) { - return St(t.getUTCHours() % 12 || 12, e.length); -}, qt = function(t, e) { - return St(t.getUTCHours(), e.length); -}, Bt = function(t, e) { - return St(t.getUTCMinutes(), e.length); -}, Ot = function(t, e) { - return St(t.getUTCSeconds(), e.length); -}, Ht = function(t, e) { - var n = e.length, r2 = t.getUTCMilliseconds(); - return St(Math.floor(r2 * Math.pow(10, n - 3)), e.length); -}; -var Lt = "midnight", Wt = "noon", Ft = "morning", Qt = "afternoon", Rt = "evening", It = "night", Xt = { - G: function(t, e, n) { - var r2 = t.getUTCFullYear() > 0 ? 1 : 0; - switch (e) { - case "G": - case "GG": - case "GGG": - return n.era(r2, { width: "abbreviated" }); - case "GGGGG": - return n.era(r2, { width: "narrow" }); - case "GGGG": - default: - return n.era(r2, { width: "wide" }); - } - }, - y: function(t, e, n) { - if ("yo" === e) { - var r2 = t.getUTCFullYear(), a2 = r2 > 0 ? r2 : 1 - r2; - return n.ordinalNumber(a2, { unit: "year" }); - } - return Pt(t, e); - }, - Y: function(t, e, n, r2) { - var a2 = P(t, r2), i2 = a2 > 0 ? a2 : 1 - a2; - return "YY" === e ? St(i2 % 100, 2) : "Yo" === e ? n.ordinalNumber(i2, { unit: "year" }) : St(i2, e.length); - }, - R: function(t, e) { - return St(N(t), e.length); - }, - u: function(t, e) { - return St(t.getUTCFullYear(), e.length); - }, - Q: function(t, e, n) { - var r2 = Math.ceil((t.getUTCMonth() + 1) / 3); - switch (e) { - case "Q": - return String(r2); - case "QQ": - return St(r2, 2); - case "Qo": - return n.ordinalNumber(r2, { unit: "quarter" }); - case "QQQ": - return n.quarter(r2, { width: "abbreviated", context: "formatting" }); - case "QQQQQ": - return n.quarter(r2, { width: "narrow", context: "formatting" }); - case "QQQQ": - default: - return n.quarter(r2, { width: "wide", context: "formatting" }); - } - }, - q: function(t, e, n) { - var r2 = Math.ceil((t.getUTCMonth() + 1) / 3); - switch (e) { - case "q": - return String(r2); - case "qq": - return St(r2, 2); - case "qo": - return n.ordinalNumber(r2, { unit: "quarter" }); - case "qqq": - return n.quarter(r2, { width: "abbreviated", context: "standalone" }); - case "qqqqq": - return n.quarter(r2, { width: "narrow", context: "standalone" }); - case "qqqq": - default: - return n.quarter(r2, { width: "wide", context: "standalone" }); - } - }, - M: function(t, e, n) { - var r2 = t.getUTCMonth(); - switch (e) { - case "M": - case "MM": - return Et(t, e); - case "Mo": - return n.ordinalNumber(r2 + 1, { unit: "month" }); - case "MMM": - return n.month(r2, { width: "abbreviated", context: "formatting" }); - case "MMMMM": - return n.month(r2, { width: "narrow", context: "formatting" }); - case "MMMM": - default: - return n.month(r2, { width: "wide", context: "formatting" }); - } - }, - L: function(t, e, n) { - var r2 = t.getUTCMonth(); - switch (e) { - case "L": - return String(r2 + 1); - case "LL": - return St(r2 + 1, 2); - case "Lo": - return n.ordinalNumber(r2 + 1, { unit: "month" }); - case "LLL": - return n.month(r2, { width: "abbreviated", context: "standalone" }); - case "LLLLL": - return n.month(r2, { width: "narrow", context: "standalone" }); - case "LLLL": - default: - return n.month(r2, { width: "wide", context: "standalone" }); - } - }, - w: function(t, e, n, r2) { - var a2 = H$1(t, r2); - return "wo" === e ? n.ordinalNumber(a2, { unit: "week" }) : St(a2, e.length); - }, - I: function(t, e, n) { - var r2 = B(t); - return "Io" === e ? n.ordinalNumber(r2, { unit: "week" }) : St(r2, e.length); - }, - d: function(t, e, n) { - return "do" === e ? n.ordinalNumber(t.getUTCDate(), { unit: "date" }) : Yt(t, e); - }, - D: function(t, e, n) { - var r2 = function(t2) { - h(1, arguments); - var e2 = m$1(t2), n2 = e2.getTime(); - e2.setUTCMonth(0, 1), e2.setUTCHours(0, 0, 0, 0); - var r3 = e2.getTime(), a2 = n2 - r3; - return Math.floor(a2 / 864e5) + 1; - }(t); - return "Do" === e ? n.ordinalNumber(r2, { unit: "dayOfYear" }) : St(r2, e.length); - }, - E: function(t, e, n) { - var r2 = t.getUTCDay(); - switch (e) { - case "E": - case "EE": - case "EEE": - return n.day(r2, { width: "abbreviated", context: "formatting" }); - case "EEEEE": - return n.day(r2, { width: "narrow", context: "formatting" }); - case "EEEEEE": - return n.day(r2, { width: "short", context: "formatting" }); - case "EEEE": - default: - return n.day(r2, { width: "wide", context: "formatting" }); - } - }, - e: function(t, e, n, r2) { - var a2 = t.getUTCDay(), i2 = (a2 - r2.weekStartsOn + 8) % 7 || 7; - switch (e) { - case "e": - return String(i2); - case "ee": - return St(i2, 2); - case "eo": - return n.ordinalNumber(i2, { unit: "day" }); - case "eee": - return n.day(a2, { width: "abbreviated", context: "formatting" }); - case "eeeee": - return n.day(a2, { width: "narrow", context: "formatting" }); - case "eeeeee": - return n.day(a2, { width: "short", context: "formatting" }); - case "eeee": - default: - return n.day(a2, { width: "wide", context: "formatting" }); - } - }, - c: function(t, e, n, r2) { - var a2 = t.getUTCDay(), i2 = (a2 - r2.weekStartsOn + 8) % 7 || 7; - switch (e) { - case "c": - return String(i2); - case "cc": - return St(i2, e.length); - case "co": - return n.ordinalNumber(i2, { unit: "day" }); - case "ccc": - return n.day(a2, { width: "abbreviated", context: "standalone" }); - case "ccccc": - return n.day(a2, { width: "narrow", context: "standalone" }); - case "cccccc": - return n.day(a2, { width: "short", context: "standalone" }); - case "cccc": - default: - return n.day(a2, { width: "wide", context: "standalone" }); - } - }, - i: function(t, e, n) { - var r2 = t.getUTCDay(), a2 = 0 === r2 ? 7 : r2; - switch (e) { - case "i": - return String(a2); - case "ii": - return St(a2, e.length); - case "io": - return n.ordinalNumber(a2, { unit: "day" }); - case "iii": - return n.day(r2, { width: "abbreviated", context: "formatting" }); - case "iiiii": - return n.day(r2, { width: "narrow", context: "formatting" }); - case "iiiiii": - return n.day(r2, { width: "short", context: "formatting" }); - case "iiii": - default: - return n.day(r2, { width: "wide", context: "formatting" }); - } - }, - a: function(t, e, n) { - var r2 = t.getUTCHours() / 12 >= 1 ? "pm" : "am"; - switch (e) { - case "a": - case "aa": - case "aaa": - return n.dayPeriod(r2, { width: "abbreviated", context: "formatting" }); - case "aaaaa": - return n.dayPeriod(r2, { width: "narrow", context: "formatting" }); - case "aaaa": - default: - return n.dayPeriod(r2, { width: "wide", context: "formatting" }); - } - }, - b: function(t, e, n) { - var r2, a2 = t.getUTCHours(); - switch (r2 = 12 === a2 ? Wt : 0 === a2 ? Lt : a2 / 12 >= 1 ? "pm" : "am", e) { - case "b": - case "bb": - case "bbb": - return n.dayPeriod(r2, { width: "abbreviated", context: "formatting" }); - case "bbbbb": - return n.dayPeriod(r2, { width: "narrow", context: "formatting" }); - case "bbbb": - default: - return n.dayPeriod(r2, { width: "wide", context: "formatting" }); - } - }, - B: function(t, e, n) { - var r2, a2 = t.getUTCHours(); - switch (r2 = a2 >= 17 ? Rt : a2 >= 12 ? Qt : a2 >= 4 ? Ft : It, e) { - case "B": - case "BB": - case "BBB": - return n.dayPeriod(r2, { width: "abbreviated", context: "formatting" }); - case "BBBBB": - return n.dayPeriod(r2, { width: "narrow", context: "formatting" }); - case "BBBB": - default: - return n.dayPeriod(r2, { width: "wide", context: "formatting" }); - } - }, - h: function(t, e, n) { - if ("ho" === e) { - var r2 = t.getUTCHours() % 12; - return 0 === r2 && (r2 = 12), n.ordinalNumber(r2, { unit: "hour" }); - } - return Nt(t, e); - }, - H: function(t, e, n) { - return "Ho" === e ? n.ordinalNumber(t.getUTCHours(), { unit: "hour" }) : qt(t, e); - }, - K: function(t, e, n) { - var r2 = t.getUTCHours() % 12; - return "Ko" === e ? n.ordinalNumber(r2, { unit: "hour" }) : St(r2, e.length); - }, - k: function(t, e, n) { - var r2 = t.getUTCHours(); - return 0 === r2 && (r2 = 24), "ko" === e ? n.ordinalNumber(r2, { unit: "hour" }) : St(r2, e.length); - }, - m: function(t, e, n) { - return "mo" === e ? n.ordinalNumber(t.getUTCMinutes(), { unit: "minute" }) : Bt(t, e); - }, - s: function(t, e, n) { - return "so" === e ? n.ordinalNumber(t.getUTCSeconds(), { unit: "second" }) : Ot(t, e); - }, - S: function(t, e) { - return Ht(t, e); - }, - X: function(t, e, n, r2) { - var a2 = (r2._originalDate || t).getTimezoneOffset(); - if (0 === a2) - return "Z"; - switch (e) { - case "X": - return At(a2); - case "XXXX": - case "XX": - return zt(a2); - case "XXXXX": - case "XXX": - default: - return zt(a2, ":"); - } - }, - x: function(t, e, n, r2) { - var a2 = (r2._originalDate || t).getTimezoneOffset(); - switch (e) { - case "x": - return At(a2); - case "xxxx": - case "xx": - return zt(a2); - case "xxxxx": - case "xxx": - default: - return zt(a2, ":"); - } - }, - O: function(t, e, n, r2) { - var a2 = (r2._originalDate || t).getTimezoneOffset(); - switch (e) { - case "O": - case "OO": - case "OOO": - return "GMT" + Gt(a2, ":"); - case "OOOO": - default: - return "GMT" + zt(a2, ":"); - } - }, - z: function(t, e, n, r2) { - var a2 = (r2._originalDate || t).getTimezoneOffset(); - switch (e) { - case "z": - case "zz": - case "zzz": - return "GMT" + Gt(a2, ":"); - case "zzzz": - default: - return "GMT" + zt(a2, ":"); - } - }, - t: function(t, e, n, r2) { - var a2 = r2._originalDate || t; - return St(Math.floor(a2.getTime() / 1e3), e.length); - }, - T: function(t, e, n, r2) { - return St((r2._originalDate || t).getTime(), e.length); - } -}; -function Gt(t, e) { - var n = t > 0 ? "-" : "+", r2 = Math.abs(t), a2 = Math.floor(r2 / 60), i2 = r2 % 60; - if (0 === i2) - return n + String(a2); - var o2 = e || ""; - return n + String(a2) + o2 + St(i2, 2); -} -function At(t, e) { - return t % 60 == 0 ? (t > 0 ? "-" : "+") + St(Math.abs(t) / 60, 2) : zt(t, e); -} -function zt(t, e) { - var n = e || "", r2 = t > 0 ? "-" : "+", a2 = Math.abs(t); - return r2 + St(Math.floor(a2 / 60), 2) + n + St(a2 % 60, 2); -} -var jt = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g, Kt = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g, Jt = /^'([^]*?)'?$/, Zt = /''/g, _t = /[a-zA-Z]/; -function $t(t, e, n) { - h(2, arguments); - var r2 = String(e), a2 = n || {}, i2 = a2.locale || l$1, o2 = i2.options && i2.options.firstWeekContainsDate, u2 = null == o2 ? 1 : f$1(o2), s2 = null == a2.firstWeekContainsDate ? u2 : f$1(a2.firstWeekContainsDate); - if (!(s2 >= 1 && s2 <= 7)) - throw new RangeError("firstWeekContainsDate must be between 1 and 7 inclusively"); - var c2 = i2.options && i2.options.weekStartsOn, d2 = null == c2 ? 0 : f$1(c2), w2 = null == a2.weekStartsOn ? d2 : f$1(a2.weekStartsOn); - if (!(w2 >= 0 && w2 <= 6)) - throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); - if (!i2.localize) - throw new RangeError("locale must contain localize property"); - if (!i2.formatLong) - throw new RangeError("locale must contain formatLong property"); - var v2 = m$1(t); - if (!Ut(v2)) - throw new RangeError("Invalid time value"); - var y2 = p$1(v2), b2 = g$1(v2, y2), T2 = { firstWeekContainsDate: s2, weekStartsOn: w2, locale: i2, _originalDate: v2 }, k2 = r2.match(Kt).map(function(t2) { - var e2 = t2[0]; - return "p" === e2 || "P" === e2 ? (0, D[e2])(t2, i2.formatLong, T2) : t2; - }).join("").match(jt).map(function(t2) { - if ("''" === t2) - return "'"; - var e2 = t2[0]; - if ("'" === e2) - return Vt(t2); - var n2 = Xt[e2]; - if (n2) - return !a2.useAdditionalWeekYearTokens && M$1(t2) && U$1(t2), !a2.useAdditionalDayOfYearTokens && C$1(t2) && U$1(t2), n2(b2, t2, i2.localize, T2); - if (e2.match(_t)) - throw new RangeError( - "Format string contains an unescaped latin alphabet character `" + e2 + "`" - ); - return t2; - }).join(""); - return k2; -} -function Vt(t) { - return t.match(Jt)[1].replace(Zt, "'"); -} -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -function te(t, e) { - h(2, arguments); - var n = m$1(t), r2 = f$1(e); - return isNaN(r2) ? new Date(NaN) : r2 ? (n.setDate(n.getDate() + r2), n) : n; -} -function ee(t, e) { - h(1, arguments); - var n = t || {}, r2 = m$1(n.start), a2 = m$1(n.end), i2 = a2.getTime(); - if (!(r2.getTime() <= i2)) - throw new RangeError("Invalid interval"); - var o2 = [], u2 = r2; - u2.setHours(0, 0, 0, 0); - var s2 = e && "step" in e ? Number(e.step) : 1; - if (s2 < 1 || isNaN(s2)) - throw new RangeError("`options.step` must be a number greater than 1"); - for (; u2.getTime() <= i2; ) - o2.push(m$1(u2)), u2.setDate(u2.getDate() + s2), u2.setHours(0, 0, 0, 0); - return o2; -} -function ne(t, e) { - h(1, arguments); - var n = e || {}, r2 = n.locale, a2 = r2 && r2.options && r2.options.weekStartsOn, i2 = null == a2 ? 0 : f$1(a2), o2 = null == n.weekStartsOn ? i2 : f$1(n.weekStartsOn); - if (!(o2 >= 0 && o2 <= 6)) - throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); - var u2 = m$1(t), s2 = u2.getDay(), c2 = 6 + (s2 < o2 ? -7 : 0) - (s2 - o2); - return u2.setDate(u2.getDate() + c2), u2.setHours(23, 59, 59, 999), u2; -} -function re(t) { - h(1, arguments); - var e = m$1(t); - return e.setDate(1), e.setHours(0, 0, 0, 0), e; -} -function ae(t, e) { - h(1, arguments); - var n = e || {}, r2 = n.locale, a2 = r2 && r2.options && r2.options.weekStartsOn, i2 = null == a2 ? 0 : f$1(a2), o2 = null == n.weekStartsOn ? i2 : f$1(n.weekStartsOn); - if (!(o2 >= 0 && o2 <= 6)) - throw new RangeError("weekStartsOn must be between 0 and 6 inclusively"); - var u2 = m$1(t), s2 = u2.getDay(), c2 = (s2 < o2 ? 7 : 0) + s2 - o2; - return u2.setDate(u2.getDate() - c2), u2.setHours(0, 0, 0, 0), u2; -} -function ie(t) { - var e = void 0 === t ? {} : t, n = e.firstDayOfWeek, r2 = void 0 === n ? 1 : n, a2 = e.weekdayLabelFormat, i2 = void 0 === a2 ? function(t2) { - return $t(t2, "iiiiii"); - } : a2, o2 = new Date(); - return ee({ start: te(ae(o2), r2), end: te(ne(o2), r2) }).reduce(function(t2, e2) { - return t2.push(i2(e2)), t2; - }, []); -} -function oe(t) { - var e = t.year, n = t.month, r2 = t.firstDayOfWeek, a2 = void 0 === r2 ? 1 : r2, i2 = t.dayLabelFormat, o2 = void 0 === i2 ? function(t2) { - return $t(t2, "dd"); - } : i2, u2 = new Date(e, n), s2 = re(u2), c2 = function(t2) { - h(1, arguments); - var e2 = m$1(t2), n2 = e2.getDay(); - return n2; - }(s2), d2 = function(t2) { - h(1, arguments); - var e2 = m$1(t2), n2 = e2.getMonth(); - return e2.setFullYear(e2.getFullYear(), n2 + 1, 0), e2.setHours(23, 59, 59, 999), e2; - }(u2); - return function() { - for (var t2 = 0, e2 = 0, n2 = arguments.length; e2 < n2; e2++) - t2 += arguments[e2].length; - var r3 = Array(t2), a3 = 0; - for (e2 = 0; e2 < n2; e2++) - for (var i3 = arguments[e2], o3 = 0, u3 = i3.length; o3 < u3; o3++, a3++) - r3[a3] = i3[o3]; - return r3; - }( - Array.from(Array(c2 >= a2 ? c2 - a2 : 6 - a2 + c2 + 1).keys()).fill(0), - ee({ start: s2, end: d2 }).map(function(t2) { - return { date: t2, dayLabel: o2(t2) }; - }) - ); -} -var ue = function(t) { - return $t(t, "dd"); -}, se = function(t) { - return $t(t, "eeeeee"); -}, ce = function(t) { - return $t(t, "MMMM yyyy"); -}; -function de(e) { - var n = e.year, r2 = e.month, a2 = e.firstDayOfWeek, i2 = void 0 === a2 ? 1 : a2, o2 = e.dayLabelFormat, u2 = void 0 === o2 ? ue : o2, s2 = e.weekdayLabelFormat, c2 = void 0 === s2 ? se : s2, d2 = e.monthLabelFormat, l2 = void 0 === d2 ? ce : d2; - return { - days: React.useMemo( - function() { - return oe({ year: n, month: r2, firstDayOfWeek: i2, dayLabelFormat: u2 }); - }, - [n, r2, i2, u2] - ), - weekdayLabels: React.useMemo( - function() { - return ie({ firstDayOfWeek: i2, weekdayLabelFormat: c2 }); - }, - [i2, c2] - ), - monthLabel: l2(new Date(n, r2)) - }; -} -function le(t, e) { - h(2, arguments); - var n = m$1(t), r2 = m$1(e); - return n.getTime() < r2.getTime(); -} -function fe(t, e) { - h(2, arguments); - var n = m$1(t), r2 = m$1(e); - return n.getTime() > r2.getTime(); -} -function he(t, e) { - h(2, arguments); - var n = e || {}, r2 = m$1(t).getTime(), a2 = m$1(n.start).getTime(), i2 = m$1(n.end).getTime(); - if (!(a2 <= i2)) - throw new RangeError("Invalid interval"); - return r2 >= a2 && r2 <= i2; -} -function me(t) { - h(1, arguments); - var e = m$1(t); - return e.setHours(0, 0, 0, 0), e; -} -function we(t, e) { - h(2, arguments); - var n = me(t), r2 = me(e); - return n.getTime() === r2.getTime(); -} -function ge(t, e) { - h(2, arguments); - var n = m$1(t), r2 = f$1(e); - if (isNaN(r2)) - return new Date(NaN); - if (!r2) - return n; - var a2 = n.getDate(), i2 = new Date(n.getTime()); - i2.setMonth(n.getMonth() + r2 + 1, 0); - var o2 = i2.getDate(); - return a2 >= o2 ? i2 : (n.setFullYear(i2.getFullYear(), i2.getMonth(), a2), n); -} -var ve = function(t, e) { - return void 0 === t && (t = []), t.some(function(t2) { - return we(e, t2); - }); -}; -function ye(t, e, n) { - return !(!e || !n) && he(t, { start: e, end: n }); -} -function be(t, e, n) { - return !!(e && we(t, e) || n && we(t, n)); -} -function De(t, e) { - return !(!e || !we(t, e)); -} -function Te(t, e) { - return !(!e || !we(t, e)); -} -function pe(t) { - var e = t.date, n = t.minBookingDate, r2 = t.maxBookingDate, a2 = t.isDateBlockedFn, i2 = t.startDate, o2 = t.endDate, u2 = t.minBookingDays, s2 = void 0 === u2 ? 1 : u2, c2 = t.unavailableDates, d2 = void 0 === c2 ? [] : c2, l2 = n ? new Date(n.getFullYear(), n.getMonth(), n.getDate(), 0, 0, 0) : n, f2 = r2 ? new Date(r2.getFullYear(), r2.getMonth(), r2.getDate(), 0, 0, 0) : r2; - return !!(ve(d2, e) || l2 && le(e, l2) || f2 && fe(e, f2) || i2 && !o2 && s2 > 1 && he(e, { start: i2, end: te(i2, s2 - 2) }) || a2 && a2(e)); -} -function ke(t) { - var e = re(t); - return { - year: function(t2) { - h(1, arguments); - var e2 = m$1(t2), n = e2.getFullYear(); - return n; - }(e), - month: function(t2) { - h(1, arguments); - var e2 = m$1(t2), n = e2.getMonth(); - return n; - }(e), - date: e - }; -} -function xe() { - return ke(me(Date.now())); -} -function Ce(t, e) { - var n = e ? ke(e) : xe(), r2 = n.date, a2 = [n]; - return t > 1 && (a2 = Array.from(Array(t - 1).keys()).reduce(function(t2) { - return r2 = ge(t2[t2.length - 1].date, 1), t2.concat([ke(r2)]); - }, a2)), a2; -} -function Me(t, e, n, r2) { - var a2 = t[r2 ? n > 0 ? 0 : t.length - r2 : n > 0 ? t.length - 1 : 0].date; - return Array.from(Array(e).keys()).reduce(function(t2) { - return a2 = 0 === t2.length ? ge(a2, n) : ge(a2, n >= 0 ? 1 : -1), n > 0 ? t2.concat([ke(a2)]) : [ke(a2)].concat(t2); - }, []); -} -function Se(t) { - var e = t.startDate, n = t.endDate, r2 = t.isDateBlocked, a2 = t.minBookingDays, i2 = t.exactMinBookingDays, o2 = t.minBookingDate, u2 = t.maxBookingDate, s2 = !o2 || !le(e, te(o2, -1)), c2 = !u2 || !fe(te(e, a2 - 1), u2); - return !(!e || 1 !== a2 || n || r2(e)) || (e && a2 > 1 && !n && !i2 || e && a2 > 0 && i2 && s2 && c2 || e && a2 > 0 && i2 && !o2 && !u2 ? !ee({ start: e, end: te(e, a2 - 1) }).some(function(t2) { - return r2(t2); - }) : !(!e || !n || i2) && !le(n, te(e, a2 - 1)) && !ee({ start: e, end: n }).some(function(t2) { - return r2(t2); - })); -} -var Pe = "startDate"; -function Ye(t) { - var a2 = t.startDate, i2 = t.endDate, o2 = t.focusedInput, u2 = t.minBookingDate, s2 = t.maxBookingDate, c2 = t.onDatesChange, d2 = t.initialVisibleMonth, l2 = t.exactMinBookingDays, f2 = void 0 !== l2 && l2, h2 = t.minBookingDays, m2 = void 0 === h2 ? 1 : h2, w2 = t.numberOfMonths, g2 = void 0 === w2 ? 2 : w2, v2 = t.firstDayOfWeek, y2 = void 0 === v2 ? 1 : v2, b2 = t.isDateBlocked, D2 = void 0 === b2 ? function() { - return false; - } : b2, T2 = t.unavailableDates, p2 = void 0 === T2 ? [] : T2, k2 = t.changeActiveMonthOnSelect, x2 = void 0 === k2 || k2, C2 = React.useState(function() { - return Ce(g2, a2 || d2 || null); - }), M2 = C2[0], U2 = C2[1], S2 = React.useState(null), P2 = S2[0], E2 = S2[1], Y2 = React.useState(a2), N2 = Y2[0], q2 = Y2[1]; - React.useEffect(function() { - return "undefined" != typeof window && window.addEventListener && window.addEventListener("keydown", L), function() { - window.removeEventListener && window.removeEventListener("keydown", L); - }; - }); - var B2 = function(t2) { - return ve(p2, t2) || D2(t2); - }, O2 = function(t2) { - q2(t2), (!N2 || N2 && !we(t2, N2)) && U2(Ce(g2, t2)); - }, H2 = function(t2) { - return pe({ - date: t2, - minBookingDate: u2, - maxBookingDate: s2, - startDate: a2, - endDate: i2, - minBookingDays: m2, - isDateBlockedFn: B2 - }); - }; - function L(t2) { - if (("ArrowRight" === t2.key || "ArrowLeft" === t2.key || "ArrowDown" === t2.key || "ArrowUp" === t2.key) && !N2) { - var e = M2[0]; - O2(e.date), U2(Ce(g2, e.date)); - } - } - var W = React.useCallback( - function() { - U2(Me(M2, g2, -1)), q2(null); - }, - [M2, g2] - ), F = React.useCallback( - function() { - U2(Me(M2, g2, -1, 1)), q2(null); - }, - [M2, g2] - ), Q = React.useCallback( - function() { - U2(Me(M2, g2, 1)), q2(null); - }, - [M2, g2] - ), R = React.useCallback( - function() { - U2(Me(M2, g2, 1, 1)), q2(null); - }, - [M2, g2] - ), I2 = React.useCallback( - function(t2) { - U2(Ce(g2, t2)), q2(null); - }, - [g2] - ), X = React.useCallback( - function(t2) { - void 0 === t2 && (t2 = 1), U2(Me(M2, g2, -(12 * t2 - g2 + 1))), q2(null); - }, - [M2, g2] - ), G = React.useCallback( - function(t2) { - void 0 === t2 && (t2 = 1), U2(Me(M2, g2, 12 * t2 - g2 + 1)), q2(null); - }, - [M2, g2] - ); - return { - firstDayOfWeek: y2, - activeMonths: M2, - isDateSelected: function(t2) { - return ye(t2, a2, i2); - }, - isDateHovered: function(t2) { - return function(t3) { - var e = t3.date, n = t3.startDate, r2 = t3.endDate, a3 = t3.isDateBlocked, i3 = t3.hoveredDate, o3 = t3.minBookingDays, u3 = t3.exactMinBookingDays; - return i3 && o3 > 1 && u3 && he(e, { start: i3, end: te(i3, o3 - 1) }) ? !ee({ start: i3, end: te(i3, o3 - 1) }).some(function(t4) { - return a3(t4); - }) : n && !r2 && i3 && he(e, { start: n, end: te(n, o3 - 1) }) && we(n, i3) && o3 > 1 ? !ee({ start: n, end: te(n, o3 - 1) }).some(function(t4) { - return a3(t4); - }) : !(!n || r2 || !i3 || le(i3, n) || !he(e, { start: n, end: i3 })) && !ee({ start: n, end: i3 }).some(function(t4) { - return a3(t4); - }); - }({ - date: t2, - hoveredDate: P2, - startDate: a2, - endDate: i2, - minBookingDays: m2, - exactMinBookingDays: f2, - isDateBlocked: B2 - }); - }, - isFirstOrLastSelectedDate: function(t2) { - return be(t2, a2, i2); - }, - isStartDate: function(t2) { - return De(t2, a2); - }, - isEndDate: function(t2) { - return Te(t2, i2); - }, - isDateBlocked: H2, - numberOfMonths: g2, - isDateFocused: function(t2) { - return !!N2 && we(t2, N2); - }, - focusedDate: N2, - hoveredDate: P2, - onResetDates: function() { - c2({ startDate: null, endDate: null, focusedInput: "startDate" }); - }, - onDateHover: function(t2) { - if (t2) { - if (t2) { - var e = !H2(t2) || a2 && we(t2, a2), n = !u2 || !le(t2, te(u2, -1)), r2 = !s2 || !fe(t2, s2), o3 = te(t2, m2 - 1), c3 = !u2 || !le(o3, u2), d3 = !s2 || !fe(o3, s2), l3 = f2 && m2 > 1 && n && r2 && c3 && d3, h3 = a2 && !i2 && !f2 && n && r2, w3 = !(m2 > 1 && a2) || he(t2, { start: a2, end: te(a2, m2 - 2) }), g3 = a2 && we(t2, a2) && w3; - e && (l3 || h3 || g3) ? E2(t2) : null !== P2 && E2(null); - } - } else - E2(null); - }, - onDateSelect: function(t2) { - ("endDate" === o2 || "startDate" === o2) && m2 > 0 && f2 && Se({ - minBookingDays: m2, - exactMinBookingDays: f2, - minBookingDate: u2, - maxBookingDate: s2, - isDateBlocked: B2, - startDate: t2, - endDate: null - }) ? c2({ startDate: t2, endDate: te(t2, m2 - 1), focusedInput: null }) : ("endDate" === o2 && a2 && le(t2, a2) || "startDate" === o2 && i2 && fe(t2, i2)) && !f2 && Se({ minBookingDays: m2, isDateBlocked: B2, startDate: t2, endDate: null }) ? c2({ endDate: null, startDate: t2, focusedInput: "endDate" }) : "startDate" === o2 && !f2 && Se({ minBookingDays: m2, isDateBlocked: B2, endDate: i2, startDate: t2 }) ? c2({ endDate: i2, startDate: t2, focusedInput: "endDate" }) : "startDate" === o2 && !f2 && Se({ minBookingDays: m2, isDateBlocked: B2, endDate: null, startDate: t2 }) ? c2({ endDate: null, startDate: t2, focusedInput: "endDate" }) : "endDate" === o2 && a2 && !le(t2, a2) && !f2 && Se({ minBookingDays: m2, isDateBlocked: B2, startDate: a2, endDate: t2 }) && c2({ startDate: a2, endDate: t2, focusedInput: null }), "endDate" !== o2 && (!N2 || N2 && !we(t2, N2)) && x2 && U2(Ce(g2, t2)); - }, - onDateFocus: O2, - goToPreviousMonths: W, - goToPreviousMonthsByOneMonth: F, - goToNextMonths: Q, - goToNextMonthsByOneMonth: R, - goToDate: I2, - goToPreviousYear: X, - goToNextYear: G - }; -} -const calendarClasses = { - root: `lsd-calendar`, - container: "lsd-calendar-container", - small: "lsd-calendar--small", - medium: "lsd-calendar--medium", - large: "lsd-calendar--large", - open: "lsd-calendar--open", - disabled: "lsd-calendar--disabled", - header: "lsd-calendar-header", - weekDay: "lsd-calendar__week_day", - button: "lsd-calendar__button", - changeYear: "lsd-calendar__change-year", - changeYearActive: "lsd-calendar__change-year--active", - changeYearIconContainer: "lsd-calendar__change-year-icon-container", - year: "lsd-calendar-year", - month: "lsd-calendar-month", - day: "lsd-calendar-day", - yearAndIcon: "lsd-calendar__year-and-icon", - monthAndYear: "lsd-calendar__month-and-year", - dayContainer: "lsd-calendar-day__container", - dayRange: "lsd-calendar-day--range", - daySelected: "lsd-calendar-day--selected", - dayDisabled: "lsd-calendar-day--disabled", - dayIsToday: "lsd-calendar-day--today", - dayBorderLeft: "lsd-calendar-day--border-left", - dayBorderRight: "lsd-calendar-day--border-right", - dayBorderLeftAndRight: "lsd-calendar-day--border-left-and-right", - dayBorderTopAndBottom: "lsd-calendar-day--border-top-and-bottom", - todayIndicator: "lsd-calendar-day__today_indicator", - monthTable: "lsd-calendar__month-table", - nextMonthButton: "lsd-calendar__next-month-button", - previousMonthButton: "lsd-calendar__previous-month-button", - yearDropdown: "lsd-calendar__year-dropdown", - yearDropdownHidden: "lsd-calendar__year-dropdown--hidden" -}; -const CalendarContext = React.createContext(null); -const useCalendarContext = () => React.useContext(CalendarContext); -const safeConvertDate = (value, minDate, maxDate) => { - if (!value) - return { - isValid: false, - date: null - }; - const date = new Date(value + "T00:00:00"); - const isValid = !Number.isNaN(+date) && date >= minDate && date <= maxDate; - return { - isValid, - date - }; -}; -const adjustedTimezoneISOString = (date) => { - const localDate = new Date(date.getTime() - date.getTimezoneOffset() * 6e4); - return localDate.toISOString().split("T")[0]; -}; -const resetHours = (date) => date.setHours(0, 0, 0, 0); -const isDateWithinRange = (date, start, end) => { - if (!date || !start || !end) - return false; - return resetHours(start) <= resetHours(date) && resetHours(end) >= resetHours(date); -}; -const isSameDay = (firstDate, secondDate) => { - if (!firstDate || !secondDate) - return false; - const isoStringFirstDate = adjustedTimezoneISOString(firstDate); - const isoStringSecondDate = adjustedTimezoneISOString(secondDate); - return isoStringFirstDate === isoStringSecondDate; -}; -const getNewDates = (calendarType, startDateState, endDateState, dateChangeProps) => { - let newStartDate = startDateState; - let newEndDate = endDateState; - const selectedDate = dateChangeProps.startDate; - if (!selectedDate) { - return { - newStartDate, - newEndDate - }; - } - if (calendarType === "startDate") { - if (!newEndDate || newEndDate && selectedDate.getTime() <= newEndDate.getTime()) { - newStartDate = selectedDate; - } - } else if (calendarType === "endDate") { - if (!newStartDate || newStartDate && selectedDate.getTime() >= newStartDate.getTime()) { - newEndDate = selectedDate; - } - } - return { - newStartDate, - newEndDate - }; -}; -const getStartDateOfMonth = (days) => { - const firstValidDay = days.find((day) => typeof day !== "number"); - return firstValidDay ? new Date(firstValidDay.date) : new Date(); -}; -const generateFullMonthDays = (days) => { - const startDateOfMonth = getStartDateOfMonth(days); - const startDay = new Date(startDateOfMonth); - startDay.setDate(startDay.getDate() - startDateOfMonth.getDay()); - const fullMonthDays = []; - for (let i2 = 0; i2 < 42; i2++) { - const currentDate = new Date(startDay); - currentDate.setDate(currentDate.getDate() + i2); - fullMonthDays.push(currentDate); - } - return fullMonthDays; -}; -const getAdjacentDaysIndexes = (index, fullMonthDays) => { - const prevIndex = index - 1; - const nextIndex = index + 1; - return { - prevIndex: prevIndex >= 0 ? prevIndex : null, - nextIndex: nextIndex < fullMonthDays.length ? nextIndex : null - }; -}; -const getDayBorders = (index, fullMonthDays, isSelected, startDate, endDate) => { - if (!isSelected) - return ""; - if (!startDate || !endDate) - return calendarClasses.dayBorderLeftAndRight; - const { - prevIndex, - nextIndex - } = getAdjacentDaysIndexes(index, fullMonthDays); - const prevIsInDateRange = prevIndex !== null && isDateWithinRange(fullMonthDays[prevIndex], startDate, endDate); - const nextIsInDateRange = nextIndex !== null && isDateWithinRange(fullMonthDays[nextIndex], startDate, endDate); - const prevIsSelected = prevIndex !== null && isSameDay(fullMonthDays[prevIndex], startDate) || prevIsInDateRange; - const nextIsSelected = nextIndex !== null && isSameDay(fullMonthDays[nextIndex], startDate) || nextIsInDateRange; - let borderClasses = ""; - if (isSelected) { - if (index % 7 === 0) { - borderClasses = nextIsSelected ? calendarClasses.dayBorderLeft : calendarClasses.dayBorderLeftAndRight; - } else if (index % 7 === 6) { - borderClasses = prevIsSelected ? calendarClasses.dayBorderRight : calendarClasses.dayBorderLeftAndRight; - } else { - if (prevIsSelected && nextIsSelected) { - borderClasses = ""; - } else if (prevIsSelected) { - borderClasses = calendarClasses.dayBorderRight; - } else if (nextIsSelected) { - borderClasses = calendarClasses.dayBorderLeft; - } else { - borderClasses = calendarClasses.dayBorderLeftAndRight; - } - } - } - return borderClasses; -}; -const switchCalendar = (currentCalendar, newCalendar) => { - if (!currentCalendar) { - return newCalendar; - } - if (currentCalendar === newCalendar) { - return null; - } - if (currentCalendar !== newCalendar) { - return newCalendar; - } - return newCalendar; -}; -function isValidRange(startDateString, endDateString) { - if (!startDateString || !endDateString) - return true; - let startDate = new Date(adjustedTimezoneISOString(new Date(startDateString))); - let endDate = new Date(adjustedTimezoneISOString(new Date(endDateString))); - return endDate > startDate; -} -const getCalendarTooltipArrowOffset = (calendarType, size) => { - if (size === "large") { - if (calendarType === "startDate") { - return 130; - } else { - return 291; - } - } - if (size === "medium") { - if (calendarType === "startDate") { - return 120; - } else { - return 267; - } - } - if (size === "small") { - if (calendarType === "startDate") { - return 107; - } else { - return 239; - } - } - return 0; -}; -const Day = ({ - day, - index, - fullMonthDays, - disabled = false -}) => { - const date = fullMonthDays[index]; - const { - mode, - startDate, - endDate, - onDateSelect - } = useCalendarContext(); - const dayRef = React.useRef(null); - const isToday = resetHours(date) === resetHours(new Date()); - const isInDateRange = mode === "range" && isDateWithinRange(date, startDate, endDate); - const onClick = React.useCallback(() => onDateSelect(date), [date, onDateSelect]); - const isStartDate = isSameDay(date, startDate); - const isEndDate = mode === "range" && isSameDay(date, endDate); - const isSelected = isStartDate || isEndDate || isInDateRange; - if (!day) { - return null; - } - const borderClasses = getDayBorders(index, fullMonthDays, isSelected, startDate, endDate); - return /* @__PURE__ */ jsx("td", { onClick, ref: dayRef, className: clsx( - calendarClasses.dayContainer, - // The top and bottom borders are always shown for every selected day. - // That's not the case for left and right borders (e.g. 2 adjacent days will not have the middle border). - isSelected && calendarClasses.dayBorderTopAndBottom, - disabled && calendarClasses.dayDisabled, - isToday && calendarClasses.dayIsToday, - borderClasses - ), children: /* @__PURE__ */ jsxs("div", { className: calendarClasses.day, children: [ - /* @__PURE__ */ jsx(Typography, { variant: "label2", children: parseInt(day, 10) }), - isToday && /* @__PURE__ */ jsx(Typography, { variant: "label2", className: calendarClasses.todayIndicator, children: "▬" }) - ] }) }); -}; -const YearControl = ({ - year, - monthNumber, - size, - yearStep = 10 -}) => { - const ref = React.useRef(null); - const currentYearRef = React.useRef(null); - const { - goToDate, - changeYearMode, - setChangeYearMode - } = useCalendarContext(); - const scrollRef = React.useRef(null); - const { - y: y2 - } = useScroll$1(scrollRef); - const [minYear, setMinYear] = React.useState(() => parseInt(year) - yearStep); - const [maxYear, setMaxYear] = React.useState(() => parseInt(year) + yearStep); - const yearsList = Array.from({ - length: maxYear - minYear + 1 - }, (_, i2) => minYear + i2); - useClickAway$1(ref, () => { - setChangeYearMode(false); - }); - const handleYearClick = (selectedYear) => { - const selectedDate = new Date(selectedYear, monthNumber, 1); - goToDate(selectedDate); - setChangeYearMode(false); - }; - React.useEffect(() => { - if (changeYearMode && currentYearRef.current && scrollRef.current) { - const yearElementTop = currentYearRef.current.offsetTop; - const yearElementHeight = currentYearRef.current.offsetHeight; - const containerHeight = scrollRef.current.clientHeight; - const scrollToPosition = yearElementTop - containerHeight / 2 + yearElementHeight / 2; - scrollRef.current.scrollTop = scrollToPosition; - } - }, [changeYearMode]); - React.useEffect(() => { - var _a, _b; - const scrollHeight = (_a = scrollRef == null ? void 0 : scrollRef.current) == null ? void 0 : _a.scrollHeight; - const clientHeight = (_b = scrollRef == null ? void 0 : scrollRef.current) == null ? void 0 : _b.clientHeight; - if (!scrollHeight || !clientHeight) - return; - const scrollPercentage = y2 / (scrollHeight - clientHeight) * 100; - if (scrollPercentage > 90) { - setMaxYear((prevMaxYear) => Math.min(prevMaxYear + yearStep, CALENDAR_MAX_YEAR)); - } - if (scrollPercentage < 10) { - setMinYear((prevMinYear) => Math.max(prevMinYear - yearStep, CALENDAR_MIN_YEAR)); - } - }, [y2, yearStep]); - return /* @__PURE__ */ jsxs("div", { ref, className: clsx(calendarClasses.changeYear, changeYearMode && calendarClasses.changeYearActive), onClick: () => { - setChangeYearMode(!changeYearMode); - }, children: [ - /* @__PURE__ */ jsxs("div", { className: clsx(calendarClasses.year, calendarClasses.yearAndIcon), children: [ - /* @__PURE__ */ jsx(Typography, { component: "span", variant: size === "large" ? "label1" : "label2", children: year }), - /* @__PURE__ */ jsx("div", { className: calendarClasses.changeYearIconContainer, children: changeYearMode ? /* @__PURE__ */ jsx(ChevronUpIcon, { color: "primary" }) : /* @__PURE__ */ jsx(ChevronDownIcon, { color: "primary" }) }) - ] }), - /* @__PURE__ */ jsx("div", { className: clsx(calendarClasses.yearDropdown, !changeYearMode && calendarClasses.yearDropdownHidden), ref: scrollRef, children: yearsList.map((yearValue) => /* @__PURE__ */ jsx("div", { className: calendarClasses.year, onClick: () => handleYearClick(yearValue), ref: yearValue === parseInt(year) ? currentYearRef : null, children: /* @__PURE__ */ jsx(Typography, { component: "span", variant: size === "large" ? "label1" : "label2", children: yearValue }) }, yearValue)) }) - ] }); -}; -const CalendarNavigationButton = ({ - direction, - onClick, - className -}) => { - const Icon = direction === "previous" ? ChevronLeftIcon : ChevronRightIcon; - return /* @__PURE__ */ jsx("button", { className: clsx(calendarClasses.button, className), type: "button", onClick, children: /* @__PURE__ */ jsx(Icon, { color: "primary" }) }); -}; -const MonthHeader = ({ - monthLabel, - monthNumber, - size -}) => { - const { - goToPreviousMonths, - goToNextMonths - } = useCalendarContext(); - const [month, year] = monthLabel.split(" "); - return /* @__PURE__ */ jsxs("div", { className: calendarClasses.header, children: [ - /* @__PURE__ */ jsx(CalendarNavigationButton, { direction: "previous", onClick: goToPreviousMonths, className: calendarClasses.previousMonthButton }), - /* @__PURE__ */ jsxs("div", { className: calendarClasses.monthAndYear, children: [ - /* @__PURE__ */ jsx(Typography, { className: calendarClasses.month, component: "span", variant: size === "large" ? "label1" : "label2", children: month }), - /* @__PURE__ */ jsx(YearControl, { year, monthNumber, size }) - ] }), - /* @__PURE__ */ jsx(CalendarNavigationButton, { direction: "next", onClick: goToNextMonths, className: calendarClasses.nextMonthButton }) - ] }); -}; -const WeekdayHeader = ({ - weekdayLabels -}) => { - return /* @__PURE__ */ jsx("tr", { children: weekdayLabels.map((dayLabel, idx) => /* @__PURE__ */ jsx("th", { children: /* @__PURE__ */ jsx("div", { className: calendarClasses.weekDay, children: /* @__PURE__ */ jsx(Typography, { variant: "label2", children: dayLabel[0] }) }) }, idx)) }); -}; -const Days = ({ - days -}) => { - const fullMonthDays = generateFullMonthDays(days); - const currentMonth = new Date(fullMonthDays[15]).getMonth(); - return /* @__PURE__ */ jsx(Fragment, { children: Array.from({ - length: 6 - }).map((_, weekIdx) => /* @__PURE__ */ jsx("tr", { children: Array.from({ - length: 7 - }).map((_2, dayIdx) => { - const index = weekIdx * 7 + dayIdx; - const date = fullMonthDays[index]; - return /* @__PURE__ */ jsx(Day, { index, day: date.getDate().toString(), fullMonthDays, disabled: date.getMonth() !== currentMonth }, `day-${index}`); - }) }, `week-${weekIdx}`)) }); -}; -const Month = ({ - size: _size = "large", - year, - month, - firstDayOfWeek -}) => { - const calendarContext = useCalendarContext(); - const size = (calendarContext == null ? void 0 : calendarContext.size) ?? _size; - const { - days, - weekdayLabels, - monthLabel - } = de({ - year, - month, - firstDayOfWeek - }); - return /* @__PURE__ */ jsxs(Fragment, { children: [ - /* @__PURE__ */ jsx(MonthHeader, { monthLabel, monthNumber: month, size }), - /* @__PURE__ */ jsxs("table", { className: calendarClasses.monthTable, children: [ - /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx(WeekdayHeader, { weekdayLabels }) }), - /* @__PURE__ */ jsx("tbody", { children: /* @__PURE__ */ jsx(Days, { days }) }) - ] }) - ] }); -}; -const tooltipBaseClasses = { - root: `lsd-tooltip-base`, - arrowTip: `lsd-tooltip-base__arrow-tip`, - content: `lsd-tooltip-base__content` -}; -const TooltipBase = ({ - children, - arrowOffset, - arrowPosition = "top", - arrowSize = 10, - rootRef, - ...props -}) => { - const commonProps = useCommonProps(props); - const arrowTipStyle = { - width: `${arrowSize}px`, - height: `${arrowSize}px`, - transform: "rotate(45deg)" - }; - if (["top", "bottom"].includes(arrowPosition)) { - arrowTipStyle.left = `${arrowOffset}px`; - arrowTipStyle[arrowPosition] = `-${arrowSize / 2}px`; - } else { - arrowTipStyle.top = `${arrowOffset}px`; - arrowTipStyle[arrowPosition] = `-${arrowSize / 2}px`; - } - return /* @__PURE__ */ jsx("div", { ref: rootRef, ...omitCommonProps(props), className: clsx(commonProps.className, props.className, tooltipBaseClasses.root), children: !arrowOffset ? children : /* @__PURE__ */ jsxs(Fragment, { children: [ - /* @__PURE__ */ jsx("div", { className: tooltipBaseClasses.arrowTip, style: arrowTipStyle }), - /* @__PURE__ */ jsx("div", { className: tooltipBaseClasses.content, children }) - ] }) }); -}; -TooltipBase.classes = tooltipBaseClasses; -const CALENDAR_MIN_YEAR = 1850; -const CALENDAR_MAX_YEAR = 2100; -const Calendar = ({ - open, - handleRef, - size = "large", - mode = "date", - disabled = false, - onStartDateChange, - onEndDateChange, - onClose, - onCalendarClickaway, - startDate: startDateProp, - endDate: endDateProp, - calendarType = "startDate", - // minDate and maxDate are necessary because onDateFocus freaks out with small/large date values. - minDate = new Date(CALENDAR_MIN_YEAR, 0, 1), - maxDate = new Date(CALENDAR_MAX_YEAR, 0, 1), - tooltipArrowOffset, - ...props -}) => { - const commonProps = useCommonProps(props); - const ref = React.useRef(null); - const [startDate, setStartDate] = React.useState(startDateProp ? safeConvertDate(startDateProp, minDate, maxDate).date : null); - const [endDate, setEndDate] = React.useState(endDateProp ? safeConvertDate(endDateProp, minDate, maxDate).date : null); - const [changeYearMode, setChangeYearMode] = React.useState(false); - useClickAway$1(ref, (event) => { - if (!open) - return; - onCalendarClickaway && onCalendarClickaway(event); - if (typeof open === "undefined") { - onClose && onClose(); - } - }); - const handleDateChange = (data) => { - const newDates = getNewDates(calendarType, startDate, endDate, data); - const { - newStartDate, - newEndDate - } = newDates; - if (newStartDate !== startDate) { - onStartDateChange == null ? void 0 : onStartDateChange(newStartDate ?? new Date()); - setStartDate(newStartDate); - } - if (newEndDate !== endDate && mode === "range") { - onEndDateChange == null ? void 0 : onEndDateChange(newEndDate ?? new Date()); - setEndDate(newEndDate); - } - }; - const { - activeMonths, - onDateFocus, - onDateSelect, - goToPreviousMonths, - goToNextMonths, - goToDate - } = Ye({ - startDate, - endDate, - // focusedInput is meant to define which is currently selected. However, - // that's not why we're setting it here. We're setting it here just because it's a required arg. - focusedInput: Pe, - onDatesChange: handleDateChange, - numberOfMonths: 1 - }); - React.useEffect(() => { - const newStart = safeConvertDate(startDateProp, minDate, maxDate); - if (!isSameDay(newStart.date, startDate)) { - setStartDate(newStart.isValid ? newStart.date : null); - } - if (mode === "range") { - const newEnd = safeConvertDate(endDateProp, minDate, maxDate); - if (!isSameDay(newEnd.date, endDate)) { - setEndDate(newEnd.isValid ? newEnd.date : null); - } - } - }, [startDateProp, endDateProp, mode, minDate, maxDate, startDate, endDate]); - React.useEffect(() => { - if (startDate) { - onDateFocus(startDate); - } - }, [startDate]); - React.useEffect(() => { - if (endDate) { - onDateFocus(endDate); - } - }, [endDate]); - const positionStyle = useUpdatePositionStyle(handleRef, open); - return /* @__PURE__ */ jsx(CalendarContext.Provider, { value: { - size, - mode, - startDate, - endDate, - onDateFocus, - onDateSelect, - goToPreviousMonths, - goToNextMonths, - goToDate, - changeYearMode, - setChangeYearMode - }, children: /* @__PURE__ */ jsx(TooltipBase, { ...props, className: clsx({ - ...omitCommonProps(props) - }, commonProps.className, props.className, calendarClasses.root, calendarClasses[size], open && calendarClasses.open, disabled && calendarClasses.disabled), rootRef: ref, style: { - ...positionStyle, - ...props.style ?? {} - }, arrowOffset: tooltipArrowOffset, children: /* @__PURE__ */ jsx("div", { className: clsx(calendarClasses.container), children: activeMonths.map((month, idx) => /* @__PURE__ */ jsx(Month, { year: month.year, month: month.month, firstDayOfWeek: 0, size }, `${month.year}-${month.month}-${idx}`)) }) }) }); -}; -Calendar.classes = calendarClasses; -const cardClasses = { - root: `lsd-card`, - small: "lsd-card--small", - medium: "lsd-card--medium", - large: "lsd-card--large" -}; -const CardContext = React.createContext(null); -const useCardContext = () => React.useContext(CardContext); -const Card = ({ - size = "large", - children, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsx(CardContext.Provider, { value: { - size - }, children: /* @__PURE__ */ jsx("div", { ...omitCommonProps(props), className: clsx(commonProps.className, cardClasses.root, cardClasses[size]), children }) }); -}; -Card.classes = cardClasses; -const cardBodyClasses = { - root: `lsd-card-body` -}; -const CardBody = ({ - children, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsx("div", { ...omitCommonProps(props), className: clsx(commonProps.className, props.className, cardBodyClasses.root), children }); -}; -CardBody.classes = cardBodyClasses; -const cardHeaderClasses = { - root: `lsd-card-header`, - title: `lsd-card-header__title`, - small: `lsd-card-header--small`, - medium: `lsd-card-header--medium`, - large: `lsd-card-header--large` -}; -const CardHeader = ({ - size: _size = "large", - children, - ...props -}) => { - const commonProps = useCommonProps(props); - const sizeContext = useCardContext(); - const size = (sizeContext == null ? void 0 : sizeContext.size) ?? _size; - return /* @__PURE__ */ jsx("div", { ...omitCommonProps(props), className: clsx(commonProps.className, props.className, cardHeaderClasses.root, cardHeaderClasses[size]), children: /* @__PURE__ */ jsx(Typography, { className: cardHeaderClasses.title, component: "div", variant: size === "large" ? "label1" : "label2", children }) }); -}; -CardHeader.classes = cardHeaderClasses; -const CheckboxGroupContext = React.createContext(null); -const useCheckboxGroupContext = () => React.useContext(CheckboxGroupContext); -const IndeterminateCheckboxFilledIcon = LsdIcon((props) => /* @__PURE__ */ jsx("svg", { width: "14", height: "14", viewBox: "0 0 14 14", fill: "none", xmlns: "http://www.w3.org/2000/svg", ...props, children: /* @__PURE__ */ jsx("path", { fillRule: "evenodd", clipRule: "evenodd", d: "M2.91667 1.75C2.27233 1.75 1.75 2.27233 1.75 2.91667V11.0833C1.75 11.7277 2.27233 12.25 2.91667 12.25H11.0833C11.7277 12.25 12.25 11.7277 12.25 11.0833V2.91667C12.25 2.27233 11.7277 1.75 11.0833 1.75H2.91667ZM9.91667 6.41667H4.08333V7.58333H9.91667V6.41667Z", fill: "black" }) }), { - filled: true -}); -const checkboxClasses = { - root: `lsd-checkbox`, - input: `lsd-checkbox__input`, - icon: `lsd-checkbox__icon`, - label: `lsd-checkbox__label`, - focused: `lsd-checkbox--focused`, - disabled: `lsd-checkbox--disabled`, - indeterminate: "lsd-checkbox--indeterminate", - large: `lsd-checkbox--large`, - medium: `lsd-checkbox--medium`, - small: "lsd-checkbox--small" -}; -const Checkbox = ({ - name, - size: _size = "large", - onChange, - checked, - defaultChecked, - disabled = false, - indeterminate = false, - inputProps = {}, - children, - ...props -}) => { - const commonProps = useCommonProps(props); - const ref = React.useRef(null); - const [focused, setFocused] = React.useState(false); - const input = useInput({ - value: checked, - defaultValue: defaultChecked ?? false, - onChange, - ref - }); - const checkboxGroup = useCheckboxGroupContext(); - const size = (checkboxGroup == null ? void 0 : checkboxGroup.size) ?? _size; - React.useEffect(() => { - if (!ref.current) - return; - const onFocus = () => setFocused(true); - const onBlur = () => setFocused(false); - ref.current.addEventListener("focus", onFocus); - ref.current.addEventListener("blur", onBlur); - return () => { - var _a, _b; - (_a = ref.current) == null ? void 0 : _a.removeEventListener("focus", onFocus); - (_b = ref.current) == null ? void 0 : _b.removeEventListener("blur", onBlur); - }; - }, [ref.current]); - return /* @__PURE__ */ jsxs(Typography, { color: "primary", variant: size === "large" ? "label1" : "label2", component: "label", "aria-disabled": disabled ? "true" : "false", ...omitCommonProps(props), className: clsx(commonProps.className, props.className, checkboxClasses.root, checkboxClasses[size], focused && checkboxClasses.focused, disabled && checkboxClasses.disabled, indeterminate && checkboxClasses.indeterminate), children: [ - /* @__PURE__ */ jsx("input", { ref, name, type: "checkbox", disabled, checked: input.value, onChange: input.onChange, defaultChecked, className: clsx(inputProps.className, checkboxClasses.input), ...inputProps }), - indeterminate ? /* @__PURE__ */ jsx(IndeterminateCheckboxFilledIcon, { color: "primary", focusable: false }) : input.value ? /* @__PURE__ */ jsx(CheckboxIcon, { color: "primary", focusable: false }) : /* @__PURE__ */ jsx(CheckboxOutlineBlankIcon, { color: "primary", focusable: false }), - /* @__PURE__ */ jsx("span", { className: checkboxClasses.label, children }) - ] }); -}; -Checkbox.classes = checkboxClasses; -const checkboxGroupClasses = { - root: `lsd-checkbox-group`, - label: `lsd-checkbox-group__label` -}; -const CheckboxGroup = ({ - size = "large", - label, - children, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsx(CheckboxGroupContext.Provider, { value: { - size - }, children: /* @__PURE__ */ jsxs("div", { ...omitCommonProps(props), className: clsx(commonProps.className, props.className, checkboxGroupClasses.root), children: [ - /* @__PURE__ */ jsx(Typography, { component: "span", variant: size === "small" ? "label2" : "label1", className: checkboxGroupClasses.label, ...pickCommonProps(props), children: label }), - children - ] }) }); -}; -CheckboxGroup.classes = checkboxGroupClasses; -const collapseHeaderClasses = { - root: `lsd-collapse-header`, - trigger: `lsd-collapse-header__trigger`, - label: `lsd-collapse-header__label`, - icons: `lsd-collapse-header__icons`, - icon: `lsd-collapse-header__icon`, - menuIcon: `lsd-collapse-header__menu-icon`, - open: "lsd-collapse-header--open", - disabled: "lsd-collapse-header--disabled", - small: `lsd-collapse-header--small`, - medium: `lsd-collapse-header--medium`, - large: `lsd-collapse-header--large` -}; -const CollapseHeader = ({ - label, - disabled = false, - open, - setOpen, - size = "large", - onTrigger, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsx("div", { ...omitCommonProps(props), className: clsx(commonProps.className, props.className, collapseHeaderClasses.root, collapseHeaderClasses[size], disabled && collapseHeaderClasses.disabled, open && collapseHeaderClasses.open), children: /* @__PURE__ */ jsxs("button", { className: clsx(collapseHeaderClasses.trigger), onClick: onTrigger, children: [ - /* @__PURE__ */ jsx(Typography, { color: "primary", component: "label", variant: size === "small" ? "label2" : "label1", className: collapseHeaderClasses.label, children: label }), - /* @__PURE__ */ jsx("div", { className: collapseHeaderClasses.icons, children: open ? /* @__PURE__ */ jsx(ChevronUpIcon, { color: "primary", className: collapseHeaderClasses.menuIcon }) : /* @__PURE__ */ jsx(ChevronDownIcon, { color: "primary", className: collapseHeaderClasses.menuIcon }) }) - ] }) }); -}; -CollapseHeader.classes = collapseHeaderClasses; -const collapseClasses = { - root: `lsd-collapse`, - content: `lsd-collapse__content`, - open: "lsd-collapse--open", - disabled: "lsd-collapse--disabled" -}; -const Collapse = ({ - label, - disabled = false, - size = "large", - open: openProp, - children, - ...props -}) => { - const globalProps = useCommonProps(props); - const ref = React.useRef(null); - const [open, setOpen] = React.useState(openProp ?? false); - const handleChange = (value) => { - if (typeof openProp === "undefined") - return setOpen(value); - props.onChange && props.onChange(value); - }; - const onTrigger = () => !disabled && handleChange(!open); - React.useEffect(() => { - disabled && open && handleChange(false); - }, [disabled, open, handleChange]); - React.useEffect(() => { - typeof openProp !== "undefined" && setOpen(openProp); - }, [openProp]); - return /* @__PURE__ */ jsxs("div", { ...omitCommonProps(props), ref, className: clsx(globalProps.className, props.className, collapseClasses.root, disabled && collapseClasses.disabled, open && collapseClasses.open), children: [ - /* @__PURE__ */ jsx(CollapseHeader, { label, open, setOpen, size, onTrigger, disabled, ...pickCommonProps(props) }), - open && /* @__PURE__ */ jsx("div", { className: collapseClasses.content, children }) - ] }); -}; -Collapse.classes = collapseClasses; -const dateFieldClasses = { - root: `lsd-date-field`, - label: "lsd-date-field__label", - inputContainer: `lsd-date-field__input-container`, - input: `lsd-date-field__input-container__input`, - inputFilled: `lsd-date-field__input-container__input--filled`, - icon: `lsd-date-field__input-container__icon`, - noIcon: `lsd-date-field__input-container__no-icon`, - iconButton: `lsd-date-field__input-container__icon-button`, - supportingText: "lsd-date-field__supporting-text", - disabled: `lsd-date-field--disabled`, - error: "lsd-date-field--error", - large: `lsd-date-field--large`, - medium: `lsd-date-field--medium`, - small: `lsd-date-field--small`, - outlined: `lsd-date-field--outlined`, - underlined: `lsd-date-field--underlined` -}; -const DateField = ({ - label, - size = "large", - error = false, - errorIcon = false, - clearButton, - supportingText, - children, - value, - placeholder, - defaultValue: defaultValue2, - disabled, - onChange, - icon, - onIconClick, - inputProps = {}, - calendarIconRef, - variant = "underlined", - ...props -}) => { - const commonProps = useCommonProps(props); - const ref = React.useRef(null); - const input = useInput({ - defaultValue: defaultValue2, - value, - onChange, - ref - }); - const onCancel = () => input.setValue(""); - const inputId = (inputProps == null ? void 0 : inputProps.id) ?? (props.id || "date-field") + "-input"; - return /* @__PURE__ */ jsxs("div", { "aria-disabled": disabled ? "true" : "false", ...props, className: clsx({ - ...omitCommonProps(props) - }, props.className, commonProps.className, dateFieldClasses.root, dateFieldClasses[size], disabled && dateFieldClasses.disabled, error && dateFieldClasses.error), children: [ - label && /* @__PURE__ */ jsx(Typography, { htmlFor: inputId, className: dateFieldClasses.label, variant: "label2", component: "label", children: label }), - /* @__PURE__ */ jsxs("div", { className: clsx(dateFieldClasses.inputContainer, variant === "outlined" ? dateFieldClasses.outlined : dateFieldClasses.underlined), children: [ - /* @__PURE__ */ jsx("input", { id: inputId, type: "date", placeholder, ...inputProps, ref, value: input.value || "", onChange: input.onChange, className: clsx(inputProps.className, dateFieldClasses.input, input.filled && dateFieldClasses.inputFilled), max: inputProps.max || "9999-12-31" }), - icon ? /* @__PURE__ */ jsx("span", { className: dateFieldClasses.icon, onClick: () => !disabled && onIconClick && onIconClick(), ref: calendarIconRef, children: icon }) : error && errorIcon ? /* @__PURE__ */ jsx("span", { className: dateFieldClasses.icon, children: /* @__PURE__ */ jsx(ErrorIcon, { color: "primary" }) }) : clearButton && input.filled ? /* @__PURE__ */ jsx("span", { onClick: () => !disabled && onCancel(), className: dateFieldClasses.icon, children: /* @__PURE__ */ jsx(CloseIcon, { color: "primary" }) }) : ( - // Default case: just show and empty span on top of the browser's default icon. - /* @__PURE__ */ jsx("span", { className: dateFieldClasses.noIcon }) - ) - ] }), - supportingText && /* @__PURE__ */ jsx("div", { className: clsx(dateFieldClasses.supportingText), children: /* @__PURE__ */ jsx(Typography, { variant: "label2", component: "p", children: supportingText }) }), - children - ] }); -}; -DateField.classes = dateFieldClasses; -const datePickerClasses = { - root: `lsd-date-picker`, - calendar: `lsd-date-picker__calendar`, - large: `lsd-date-picker--large`, - medium: `lsd-date-picker--medium`, - small: `lsd-date-picker--small` -}; -const wasElementClicked = (event, element) => { - if (!element) { - return false; - } - return (event == null ? void 0 : event.composedPath().includes(element)) || false; -}; -const DatePicker = ({ - label, - size = "large", - value: valueProp, - onChange, - withCalendar = true, - variant = "underlined", - ...props -}) => { - const commonProps = useCommonProps(props); - const ref = React.useRef(null); - const calendarIconRef = React.useRef(null); - const [openCalendar, setOpenCalendar] = React.useState(false); - const isControlled = typeof valueProp !== "undefined"; - const input = useInput({ - value: valueProp, - defaultValue: "", - onChange, - getInput: () => { - var _a; - return (_a = ref.current) == null ? void 0 : _a.querySelector(`input.${DateField.classes.input}`); - } - }); - const handleDateChange = (date) => input.setValue(adjustedTimezoneISOString(date)); - const inputId = (props.id || "date-picker") + "-input"; - return /* @__PURE__ */ jsx("div", { id: inputId, ref, className: clsx({ - ...omitCommonProps(props) - }, props.className, commonProps.className, datePickerClasses.root, datePickerClasses[size]), children: /* @__PURE__ */ jsx( - DateField, - { - label, - size, - variant, - icon: withCalendar && /* @__PURE__ */ jsx(CalendarIcon, { color: "primary" }), - onIconClick: () => setOpenCalendar((prev2) => !prev2), - value: isControlled || openCalendar ? input.value : void 0, - onChange: input.onChange, - calendarIconRef, - ...props, - children: /* @__PURE__ */ jsx(Portal, { id: "calendar", children: withCalendar && /* @__PURE__ */ jsx(Calendar, { ...pickCommonProps(props), onStartDateChange: (date) => handleDateChange(date), open: openCalendar, onCalendarClickaway: (event) => { - if (wasElementClicked(event, calendarIconRef.current)) { - return; - } - setOpenCalendar(false); - }, handleRef: ref, startDate: input.value, disabled: props.disabled, className: datePickerClasses.calendar }) }) - } - ) }); -}; -DatePicker.classes = datePickerClasses; -const dateRangePickerClasses = { - root: `lsd-date-range-picker`, - calendar: `lsd-date-picker__calendar`, - withCalendar: `lsd-date-range-picker--with-calendar`, - openCalendar: `lsd-date-range-picker--calendar-open`, - disabled: `lsd-date-range-picker--disabled`, - inputContainer: `lsd-date-range-picker__input-container`, - icon: `lsd-date-range-picker__icon`, - large: `lsd-date-range-picker--large`, - medium: `lsd-date-range-picker--medium`, - small: `lsd-date-range-picker--small`, - label: "lsd-date-range-picker__label", - supportingText: "lsd-date-range-picker__supporting-text", - outlined: "lsd-date-range-picker--outlined", - separator: "lsd-date-range-picker__separator" -}; -const DateRangePicker = ({ - startValue: startValueProp, - endValue: endValueProp, - onStartDateChange, - onEndDateChange, - size = "large", - variant = "underlined", - withCalendar = true, - label, - supportingText, - disabled, - ...props -}) => { - const commonProps = useCommonProps(props); - const ref = React.useRef(null); - const endCalendarIconRef = React.useRef(null); - const startCalendarIconRef = React.useRef(null); - const [calendarType, setCalendarType] = React.useState(null); - const isStartValueControlled = typeof startValueProp !== "undefined"; - const isEndValueControlled = typeof endValueProp !== "undefined"; - const startInput = useInput({ - value: startValueProp, - defaultValue: "", - onChange: onStartDateChange, - getInput: () => { - var _a; - return (_a = ref.current) == null ? void 0 : _a.querySelectorAll(`input.${DateField.classes.input}`)[0]; - } - }); - const endInput = useInput({ - value: endValueProp, - defaultValue: "", - onChange: onEndDateChange, - getInput: () => { - var _a; - return (_a = ref.current) == null ? void 0 : _a.querySelectorAll(`input.${DateField.classes.input}`)[1]; - } - }); - const onStartInputChange = (e) => { - if (!endInput.value || isValidRange(e.target.value, endInput.value)) { - startInput.onChange(e); - } - }; - const onEndInputChange = (e) => { - if (!startInput.value || isValidRange(startInput.value, e.target.value)) { - endInput.onChange(e); - } - }; - const calendarStartDateChange = (date) => { - startInput.setValue(adjustedTimezoneISOString(date)); - setCalendarType("endDate"); - }; - const calendarEndDateChange = (date) => endInput.setValue(adjustedTimezoneISOString(date)); - const dateFieldProps = { - ...props, - size, - label: void 0, - supportingText: void 0 - }; - const isStartDateCalendar = calendarType === "startDate"; - const isEndDateCalendar = calendarType === "endDate"; - const isCalendarOpen = isStartDateCalendar || isEndDateCalendar; - return /* @__PURE__ */ jsxs("div", { ref, className: clsx({ - ...omitCommonProps(props) - }, commonProps.className, props.className, dateRangePickerClasses.root, dateRangePickerClasses[size], withCalendar && dateRangePickerClasses.withCalendar, isCalendarOpen && dateRangePickerClasses.openCalendar, disabled && dateRangePickerClasses.disabled), children: [ - label && /* @__PURE__ */ jsx(Typography, { className: dateRangePickerClasses.label, variant: "label2", component: "label", children: label }), - /* @__PURE__ */ jsxs("div", { className: clsx(props.className, dateRangePickerClasses.inputContainer, variant === "outlined" && dateRangePickerClasses.outlined), children: [ - /* @__PURE__ */ jsx( - DateField, - { - variant, - calendarIconRef: startCalendarIconRef, - icon: withCalendar && /* @__PURE__ */ jsx(CalendarIcon, { color: "primary" }), - value: isStartValueControlled || isCalendarOpen ? startInput.value : void 0, - onIconClick: () => setCalendarType((currentCalendarType) => switchCalendar(currentCalendarType, "startDate")), - onChange: onStartInputChange, - ...dateFieldProps - } - ), - /* @__PURE__ */ jsx("div", { className: dateRangePickerClasses.separator }), - /* @__PURE__ */ jsx( - DateField, - { - variant, - calendarIconRef: endCalendarIconRef, - icon: withCalendar && /* @__PURE__ */ jsx(CalendarIcon, { color: "primary" }), - value: isEndValueControlled || isCalendarOpen ? endInput.value : void 0, - onIconClick: () => setCalendarType((currentCalendarType) => switchCalendar(currentCalendarType, "endDate")), - onChange: onEndInputChange, - ...dateFieldProps - } - ) - ] }), - supportingText && /* @__PURE__ */ jsx("div", { className: clsx(dateRangePickerClasses.supportingText), children: /* @__PURE__ */ jsx(Typography, { variant: "label2", component: "p", children: supportingText }) }), - withCalendar && /* @__PURE__ */ jsx(Portal, { id: "calendar", children: /* @__PURE__ */ jsx(Calendar, { ...pickCommonProps(props), onStartDateChange: calendarStartDateChange, onEndDateChange: calendarEndDateChange, onCalendarClickaway: (event) => { - if (wasElementClicked(event, endCalendarIconRef.current) || wasElementClicked(event, startCalendarIconRef.current)) { - return; - } - setCalendarType(null); - }, calendarType, open: isCalendarOpen, onClose: () => setCalendarType(null), handleRef: ref, mode: "range", disabled, startDate: startInput.value, endDate: endInput.value, className: dateRangePickerClasses.calendar, tooltipArrowOffset: getCalendarTooltipArrowOffset(calendarType, size), size }) }) - ] }); -}; -DateRangePicker.classes = dateRangePickerClasses; -const useSelect = (options, value, { - onDone, - onChange, - multi = false -} = {}) => { - const dict = React.useMemo(() => Object.fromEntries(options.map((opt) => [opt.value, opt])), [options]); - const [val, setVal] = React.useState(Array.isArray(value) ? value : value ? [value] : []); - const selection = React.useMemo(() => pairs(val, () => true), [val]); - const selected = React.useMemo(() => val.map((value2) => dict[value2]), [val, dict]); - React.useEffect(() => { - if (onChange) - setVal(Array.isArray(value) ? value : value ? [value] : []); - }, [value, onChange]); - const getKey = (option) => typeof option === "string" ? option : option.value; - const isSelected = (option) => !!selection[getKey(option)]; - const doSelect = (option) => { - const key = getKey(option); - const newVal = multi ? selection[key] ? val.filter((i2) => i2 !== key) : [...val, key] : [key]; - onChange ? onChange(multi ? newVal : newVal[0]) : setVal(newVal); - if (!multi && onDone) - onDone(multi ? newVal : newVal[0]); - }; - return { - selected, - isSelected, - select: doSelect - }; -}; -const dropdownClasses = { - root: `lsd-dropdown`, - label: "lsd-dropdown__label", - buttonContainer: `lsd-dropdown__button-container`, - trigger: `lsd-dropdown__trigger`, - optionLabel: `lsd-dropdown__option-label`, - icons: `lsd-dropdown__icons`, - icon: `lsd-dropdown__icon`, - menuIcon: `lsd-dropdown__menu-icon`, - supportingText: "lsd-dropdown__supporting-text", - open: "lsd-dropdown--open", - error: "lsd-dropdown--error", - disabled: "lsd-dropdown--disabled", - small: `lsd-dropdown--small`, - medium: `lsd-dropdown--medium`, - large: `lsd-dropdown--large`, - outlined: `lsd-dropdown--outlined`, - underlined: `lsd-dropdown--underlined` -}; -const Dropdown = ({ - label, - size = "large", - error = false, - disabled = false, - supportingText, - triggerLabel, - value = [], - onChange, - options = [], - multi = false, - variant = "outlined", - isOpen, - onToggle, - menuProps = {}, - ...props -}) => { - const commonProps = useCommonProps(props); - const containerRef = React.useRef(null); - const isControlled = isOpen !== void 0; - const [openState, setOpenState] = React.useState(false); - if (isControlled && isOpen !== openState) - setOpenState(isOpen); - const { - select, - isSelected, - selected - } = useSelect(options, value, { - multi, - onChange, - onDone: () => { - setOpenState(false); - } - }); - const handleToggle = (open) => { - if (isControlled) { - onToggle && onToggle(open); - } else { - setOpenState(open); - } - }; - const onTrigger = () => { - if (disabled) - return; - handleToggle(!openState); - }; - React.useEffect(() => { - if (disabled && openState && !isControlled) - setOpenState(false); - }, [openState, disabled, isControlled]); - const buttonId = (props == null ? void 0 : props.id) ?? (props.id || "dropdown") + "-input"; - return /* @__PURE__ */ jsxs("div", { ref: containerRef, ...omitCommonProps(props), className: clsx(commonProps.className, props.className, dropdownClasses.root, dropdownClasses[size], error && dropdownClasses.error, disabled && dropdownClasses.disabled, openState && dropdownClasses.open, variant === "outlined" ? dropdownClasses.outlined : dropdownClasses.underlined), children: [ - label && /* @__PURE__ */ jsx(Typography, { htmlFor: buttonId, className: dropdownClasses.label, variant: "label2", component: "label", children: label }), - /* @__PURE__ */ jsx("div", { className: dropdownClasses.buttonContainer, children: /* @__PURE__ */ jsxs("button", { id: buttonId, className: clsx(dropdownClasses.trigger), onClick: onTrigger, children: [ - /* @__PURE__ */ jsx(Typography, { color: "primary", component: "label", variant: size === "large" ? "label1" : "label2", className: dropdownClasses.optionLabel, children: selected.length > 0 ? selected.map((opt) => opt.name).join(", ") : triggerLabel }), - /* @__PURE__ */ jsxs("div", { className: dropdownClasses.icons, children: [ - error && /* @__PURE__ */ jsx(ErrorIcon, { color: "primary", className: dropdownClasses.icon }), - openState ? /* @__PURE__ */ jsx(ChevronUpIcon, { color: "primary", className: dropdownClasses.menuIcon }) : /* @__PURE__ */ jsx(ChevronDownIcon, { color: "primary", className: dropdownClasses.menuIcon }) - ] }) - ] }) }), - supportingText && /* @__PURE__ */ jsx(Typography, { variant: size === "large" ? "label1" : "label2", component: "p", className: dropdownClasses.supportingText, children: supportingText }), - /* @__PURE__ */ jsx(Portal, { id: "dropdown", children: /* @__PURE__ */ jsx(DropdownMenu, { handleRef: containerRef, open: openState, onClose: () => handleToggle(false), size, genericFontFamily: props.genericFontFamily, ...menuProps, children: options.map((opt) => /* @__PURE__ */ jsx(DropdownItem, { size, tabIndex: 0, onClick: select.bind(null, opt), withIcon: multi, label: opt.name, selected: isSelected(opt), onKeyDown: (e) => e.key === "Enter" && select(opt) }, opt.value)) }) }) - ] }); -}; -Dropdown.classes = dropdownClasses; -const IconButtonGroupContext = React.createContext(null); -const useIconButtonGroupContext = () => React.useContext(IconButtonGroupContext); -const iconButtonClasses = { - root: `lsd-icon-button`, - outlined: `lsd-icon-button--outlined`, - filled: `lsd-icon-button--filled`, - disabled: `lsd-icon-button--disabled`, - small: `lsd-icon-button--small`, - medium: `lsd-icon-button--medium`, - large: `lsd-icon-button--large` -}; -const IconButton = ({ - size: sizeProp, - disabled: disabledProp, - variant: variantProp, - children, - ...props -}) => { - const commonProps = useCommonProps(props); - const context = useIconButtonGroupContext(); - const size = sizeProp ?? (context == null ? void 0 : context.size) ?? "large"; - const variant = variantProp ?? (context == null ? void 0 : context.variant) ?? "outlined"; - const disabled = disabledProp ?? (context == null ? void 0 : context.disabled) ?? false; - return /* @__PURE__ */ jsx("button", { ...omitCommonProps(props), className: clsx(commonProps.className, props.className, iconButtonClasses.root, iconButtonClasses[size], iconButtonClasses[variant], disabled && iconButtonClasses.disabled), children }); -}; -IconButton.classes = iconButtonClasses; -const iconButtonGroupClasses = { - root: `lsd-icon-button-group`, - outlined: `lsd-icon-button-group--outlined`, - filled: `lsd-icon-button-group--filled`, - disabled: `lsd-icon-button-group--disabled`, - small: `lsd-icon-button-group--small`, - medium: `lsd-icon-button-group--medium`, - large: `lsd-icon-button-group--large` -}; -const IconButtonGroup = ({ - size = "large", - disabled, - variant = "outlined", - children, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsx("div", { ...omitCommonProps(props), className: clsx(commonProps.className, props.className, iconButtonGroupClasses.root, iconButtonGroupClasses[size], iconButtonGroupClasses[variant], disabled && iconButtonGroupClasses.disabled), children: /* @__PURE__ */ jsx(IconButtonGroupContext.Provider, { value: { - size, - variant, - disabled - }, children }) }); -}; -IconButtonGroup.classes = iconButtonGroupClasses; -const modalClasses = { - root: `lsd-modal`, - small: "lsd-modal--small", - medium: "lsd-modal--medium", - large: "lsd-modal--large", - xsmall: "lsd-modal--extra-small", - modalContainer: "lsd-modal__container", - header: "lsd-modal__header", - title: "lsd-modal__title", - subtitle: "lsd-modal__subtitle", - titleAndSubtitleContainer: "lsd-modal__title-and-subtitle-container", - closeIcon: "lsd-modal__close-icon" -}; -const Modal = ({ - isOpen, - size = "large", - title, - subtitle, - onClose, - children, - ...props -}) => { - const commonProps = useCommonProps(props); - const handleOverlayClick = (e) => { - if (e.target === e.currentTarget && onClose) { - onClose(); - } - }; - if (!isOpen) { - return null; - } - return /* @__PURE__ */ jsx("div", { ...omitCommonProps(props), className: clsx(commonProps.className, modalClasses.root, modalClasses[size]), onClick: handleOverlayClick, children: /* @__PURE__ */ jsxs("div", { className: clsx(modalClasses.modalContainer), children: [ - /* @__PURE__ */ jsxs("div", { className: modalClasses.header, children: [ - /* @__PURE__ */ jsxs("div", { className: modalClasses.titleAndSubtitleContainer, children: [ - !!title && /* @__PURE__ */ jsx(Typography, { className: modalClasses.title, component: "div", variant: size === "small" ? "h6" : "h5", children: title }), - !!subtitle && /* @__PURE__ */ jsx(Typography, { className: modalClasses.subtitle, variant: size === "small" ? "label2" : "label1", component: "div", children: subtitle }) - ] }), - /* @__PURE__ */ jsx(IconButton, { onClick: onClose, className: modalClasses.closeIcon, size: "medium", children: /* @__PURE__ */ jsx(CloseIcon, { color: "primary" }) }) - ] }), - children - ] }) }); -}; -Modal.classes = modalClasses; -const modalBodyClasses = { - root: `lsd-modal-body` -}; -const ModalBody = ({ - children, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsx("div", { ...omitCommonProps(props), className: clsx(commonProps.className, modalBodyClasses.root), children }); -}; -ModalBody.classes = modalBodyClasses; -const modalFooterClasses = { - root: `lsd-modal-footer` -}; -const ModalFooter = ({ - children, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsx("div", { ...omitCommonProps(props), className: clsx(commonProps.className, modalFooterClasses.root), children }); -}; -ModalFooter.classes = modalFooterClasses; -const numberInputClasses = { - root: `lsd-number-input`, - label: "lsd-number-input__label", - mainContainer: `lsd-number-input__main-container`, - inputContainer: `lsd-number-input__input-container`, - input: `lsd-number-input__input`, - errorIcon: `lsd-number-input__error-icon`, - plusMinusIcons: `lsd-number-input__plus-minus-icons`, - supportingText: "lsd-number-input__supporting-text", - disabled: `lsd-number-input--disabled`, - error: "lsd-number-input--error", - large: `lsd-number-input--large`, - medium: `lsd-number-input--medium`, - small: `lsd-number-input--small` -}; -const NumberInput = ({ - label, - size = "large", - error = false, - errorIcon = false, - supportingText, - value, - placeholder, - defaultValue: defaultValue2, - disabled, - onChange, - icon, - inputProps = {}, - id = "number-input", - min = Number.MIN_SAFE_INTEGER, - max = Number.MAX_SAFE_INTEGER, - step = 1, - ...props -}) => { - const ref = React.useRef(null); - const commonProps = useCommonProps(props); - const input = useInput({ - defaultValue: defaultValue2, - value, - onChange, - ref - }); - const handleIncrement = () => { - if (disabled) - return; - const newValue = Math.min(max, Number(input.value || "0") + step); - input.setValue(newValue.toString()); - }; - const handleDecrement = () => { - if (disabled) - return; - const newValue = Math.max(min, Number(input.value || "0") - step); - input.setValue(newValue.toString()); - }; - return /* @__PURE__ */ jsxs("div", { "aria-disabled": disabled ? "true" : "false", ...omitCommonProps(props), className: clsx(props.className, commonProps.className, numberInputClasses.root, numberInputClasses[size], disabled && numberInputClasses.disabled, error && numberInputClasses.error), children: [ - label && /* @__PURE__ */ jsx(Typography, { htmlFor: id, className: numberInputClasses.label, variant: "label2", component: "label", children: label }), - /* @__PURE__ */ jsxs("div", { className: numberInputClasses.mainContainer, children: [ - /* @__PURE__ */ jsx(IconButton, { onClick: handleDecrement, className: numberInputClasses.plusMinusIcons, children: /* @__PURE__ */ jsx(RemoveIcon, { color: "primary" }) }), - /* @__PURE__ */ jsxs("div", { className: numberInputClasses.inputContainer, children: [ - /* @__PURE__ */ jsx("input", { id, type: "number", placeholder, ref, className: clsx(inputProps.className, numberInputClasses.input), value: input.value || "", onChange: input.onChange, min, max, step, disabled, ...inputProps }), - error && !!errorIcon && /* @__PURE__ */ jsx("span", { className: numberInputClasses.errorIcon, children: /* @__PURE__ */ jsx(ErrorIcon, { color: "primary" }) }) - ] }), - /* @__PURE__ */ jsx(IconButton, { onClick: handleIncrement, className: numberInputClasses.plusMinusIcons, children: /* @__PURE__ */ jsx(AddIcon, { color: "primary" }) }) - ] }), - supportingText && /* @__PURE__ */ jsx("div", { className: clsx(numberInputClasses.supportingText), children: /* @__PURE__ */ jsx(Typography, { variant: "label2", component: "p", children: supportingText }) }) - ] }); -}; -NumberInput.classes = numberInputClasses; -const settleSync = (func) => { - try { - return [func(), void 0]; - } catch (error) { - return [void 0, error]; - } -}; -const PortalProvider = ({ - children -}) => { - const [initialized, setInitialized] = React.useState(false); - React.useEffect(() => { - if (typeof window === "undefined") - return; - const body = document.querySelector("body"); - let container = body.querySelector("#lsd-presentation"); - if (!container) { - container = document.createElement("div"); - container.id = "lsd-presentation"; - } - body.appendChild(container); - setInitialized(true); - return () => { - settleSync(() => body.removeChild(container)); - }; - }, []); - return /* @__PURE__ */ jsx(PortalContext.Provider, { value: { - initialized - }, children }); -}; -const quoteClasses = { - root: `lsd-quote`, - indentedInline: "lsd-quote--indented-inline", - parentheses: "lsd-quote--parentheses", - text: "lsd-quote__text" -}; -const Quote = ({ - mode = "indented-line", - children, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsx(Fragment, { children: /* @__PURE__ */ jsx("div", { ...omitCommonProps(props), className: clsx(commonProps.className, props.className, quoteClasses.root, mode && mode === "parentheses" ? quoteClasses.parentheses : quoteClasses.indentedInline), children: /* @__PURE__ */ jsx(Typography, { color: "primary", component: "label", variant: "label1", children }) }) }); -}; -Quote.classes = quoteClasses; -const RadioButtonGroupContext = React.createContext(null); -const useRadioButtonGroupContext = () => React.useContext(RadioButtonGroupContext); -const radioButtonClasses = { - root: `lsd-radio-button`, - input: `lsd-radio-button__input`, - label: `lsd-radio-button__label`, - disabled: `lsd-radio-button--disabled`, - large: `lsd-radio-button--large`, - medium: `lsd-radio-button--medium`, - small: "lsd-radio-button--small" -}; -const RadioButton = ({ - size: _size = "large", - onChange, - checked: _checked, - defaultChecked, - disabled = false, - value, - name: _name, - inputProps = {}, - children, - ...props -}) => { - const commonProps = useCommonProps(props); - const ref = React.useRef(null); - const radioButtonGroup = useRadioButtonGroupContext(); - const size = (radioButtonGroup == null ? void 0 : radioButtonGroup.size) ?? _size; - const name = (radioButtonGroup == null ? void 0 : radioButtonGroup.name) ?? _name ?? ""; - const selected = radioButtonGroup ? radioButtonGroup.value === value : _checked; - const input = useInput({ - value: selected, - defaultValue: defaultChecked ?? false, - onChange, - ref - }); - const handleChange = (event) => { - radioButtonGroup ? radioButtonGroup.setActiveRadioButton(event.target.value) : input.onChange(event); - }; - return /* @__PURE__ */ jsxs(Typography, { color: "primary", variant: size === "large" ? "label1" : "label2", component: "label", "aria-disabled": disabled ? "true" : "false", ...omitCommonProps(props), className: clsx(commonProps.className, props.className, radioButtonClasses.root, radioButtonClasses[size], disabled && radioButtonClasses.disabled), children: [ - /* @__PURE__ */ jsx("input", { ref, name, value, type: "radio", checked: input.value, onChange: handleChange, defaultChecked, className: clsx(inputProps.className, radioButtonClasses.input), ...inputProps }), - input.value ? /* @__PURE__ */ jsx(RadioButtonCheckedIcon, { color: "primary", focusable: false }) : /* @__PURE__ */ jsx(RadioButtonIcon, { color: "primary", focusable: false }), - /* @__PURE__ */ jsx("span", { className: radioButtonClasses.label, children }) - ] }); -}; -RadioButton.classes = radioButtonClasses; -const radioButtonGroupClasses = { - root: `lsd-radio-button-group`, - label: `lsd-radio-button-group__label` -}; -const RadioButtonGroup = ({ - size = "large", - label, - value, - name, - onChange, - children, - ...props -}) => { - const commonProps = useCommonProps(props); - const ref = React.useRef(null); - const [activeValue, setActiveValue] = React.useState(value); - const setActiveRadioButton = (value2) => { - if (onChange) - onChange(value2); - else - setActiveValue(value2); - }; - React.useEffect(() => setActiveValue(value), [value]); - return /* @__PURE__ */ jsx(RadioButtonGroupContext.Provider, { value: { - value: activeValue, - setActiveRadioButton, - name, - size - }, children: /* @__PURE__ */ jsxs("div", { ref, ...omitCommonProps(props), className: clsx(commonProps.className, props.className, radioButtonGroupClasses.root), children: [ - /* @__PURE__ */ jsx(Typography, { component: "span", variant: size === "small" ? "label2" : "label1", className: radioButtonGroupClasses.label, children: label && label }), - children - ] }) }); -}; -RadioButtonGroup.classes = radioButtonGroupClasses; -const TabsContext = React.createContext(null); -const useTabsContext = () => React.useContext(TabsContext); -const tabItemClasses = { - root: `lsd-tab-item`, - text: `lsd-tab-item--text`, - icon: `lsd-tab-item--icon`, - disabled: "lsd-tab-item--disabled", - selected: "lsd-tab-item--selected", - small: "lsd-tab-item--small", - medium: "lsd-tab-item--medium", - large: "lsd-tab-item--large", - withIcon: "lsd-tab-item--with-icon" -}; -const TabItem = ({ - name, - size: _size = "large", - selected: _selected = false, - inactive = false, - icon, - children, - ...props -}) => { - const commonProps = useCommonProps(props); - const tabs = useTabsContext(); - const size = (tabs == null ? void 0 : tabs.size) ?? _size; - const selected = tabs ? tabs.activeTab === name : _selected; - const onClick = (event) => { - props.onClick && props.onClick(event); - if (inactive) - return; - (tabs == null ? void 0 : tabs.setActiveTab) && tabs.setActiveTab(name); - }; - return /* @__PURE__ */ jsxs("button", { ...omitCommonProps(props), className: clsx(commonProps.className, props.className, tabItemClasses.root, tabItemClasses[size], selected && tabItemClasses.selected, props.disabled && tabItemClasses.disabled, !!icon && tabItemClasses.withIcon), onClick, children: [ - /* @__PURE__ */ jsx(Typography, { component: "span", className: tabItemClasses.text, variant: size === "small" ? "label2" : "label1", children }), - icon && /* @__PURE__ */ jsx("span", { className: tabItemClasses.icon, children: icon }) - ] }); -}; -TabItem.classes = tabItemClasses; -const tableBodyClasses = { - root: `lsd-table-body`, - toolbar: `lsd-table-body__toolbar`, - row: `lsd-table-body__row` -}; -const TableBody = ({ - options = [], - size: _size = "large", - buttonLabel = "Button", - toolbar, - children, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsxs("div", { ...omitCommonProps(props), className: clsx(commonProps.className, props.className, tableBodyClasses.root), children: [ - toolbar && /* @__PURE__ */ jsx("div", { className: clsx(tableBodyClasses.toolbar), children: toolbar }), - /* @__PURE__ */ jsx("table", { children }) - ] }); -}; -TableBody.classes = tableBodyClasses; -const tableHeaderClasses = { - root: `lsd-table-header` -}; -const TableHeader = ({ - size: _size = "large", - children, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsx("div", { ...omitCommonProps(props), className: clsx(commonProps.className, props.className, tableHeaderClasses.root), children }); -}; -TableHeader.classes = tableHeaderClasses; -const tableClasses = { - root: `lsd-table`, - small: "lsd-table--small", - medium: "lsd-table--medium", - large: "lsd-table--large" -}; -const TableContext = React.createContext(null); -const useTableContext = () => React.useContext(TableContext); -const Table = ({ - size = "large", - type = "default", - headerOptions, - header, - toolbar, - children, - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsx(TableContext.Provider, { value: { - size, - type, - headerOptions - }, children: /* @__PURE__ */ jsxs("div", { ...omitCommonProps(props), className: clsx(commonProps.className, tableClasses.root, tableClasses[size]), children: [ - /* @__PURE__ */ jsx(TableHeader, { children: header }), - /* @__PURE__ */ jsx(TableBody, { toolbar, options: headerOptions, children }) - ] }) }); -}; -Table.classes = tableClasses; -const tableItemClasses = { - root: `lsd-table-item`, - large: `lsd-table-item--large`, - medium: `lsd-table-item--medium`, - small: `lsd-table-item--small` -}; -const TableItem = ({ - size: _size = "large", - children, - ...props -}) => { - const commonProps = useCommonProps(props); - const table = useTableContext(); - const size = (table == null ? void 0 : table.size) ?? _size; - return /* @__PURE__ */ jsx("td", { ...omitCommonProps(props), className: clsx(commonProps.className, props.className, tableItemClasses.root, tableItemClasses[size]), children }); -}; -TableItem.classes = tableItemClasses; -const tableRowClasses = { - root: `lsd-table-row` -}; -const TableRow = ({ - size: _size = "large", - type: _type = "default", - children, - ...props -}) => { - const commonProps = useCommonProps(props); - const table = useTableContext(); - const type = (table == null ? void 0 : table.type) ?? _type; - return /* @__PURE__ */ jsxs("tr", { ...omitCommonProps(props), className: clsx(commonProps.className, props.className, tableRowClasses.root), children: [ - type === "checkbox" && /* @__PURE__ */ jsx("td", { className: tableItemClasses.root, children: /* @__PURE__ */ jsx(Checkbox, {}) }), - type === "radio" && /* @__PURE__ */ jsx("td", { className: tableItemClasses.root, children: /* @__PURE__ */ jsx(RadioButton, { value: "1" }) }), - children - ] }); -}; -TableRow.classes = tableRowClasses; -const useEventListener = (key, element, listener, options, deps) => { - const _key = React.useMemo(() => typeof key === "string" ? key : key(), []); - const _element = React.useMemo(() => typeof element === "function" ? element() : element, [element]); - React.useEffect(() => { - if (!(_element == null ? void 0 : _element.addEventListener) || !(_element == null ? void 0 : _element.removeEventListener)) - return; - _element.addEventListener(_key, listener, options); - return () => { - _element.removeEventListener(_key, listener, options); - }; - }, [_key, _element]); -}; -const ResizeObserverContext = React.createContext(null); -const useResizeObserverAPI = () => { - const { - observe, - unobserve, - ready - } = React.useContext(ResizeObserverContext) ?? {}; - return React.useMemo(() => ({ - observe, - unobserve, - ready - }), [observe, unobserve, ready]); -}; -const useDOMRect = (id, defaultValue2) => { - var _a; - const ctx = React.useContext(ResizeObserverContext); - return ((_a = ctx == null ? void 0 : ctx.rect) == null ? void 0 : _a[id]) ?? defaultValue2; -}; -const createCounter = (start = 0) => { - let i2 = start - 1; - return () => { - i2++; - return i2; - }; -}; -const defaultValue = typeof DOMRectReadOnly === "undefined" ? null : new DOMRectReadOnly(0, 0, 0, 0); -const genId = createCounter(); -const useResizeObserver = (ref, refId) => { - const api = useResizeObserverAPI(); - const id = React.useMemo(() => refId ?? genId().toString(), [refId]); - const rect = useDOMRect(id) ?? defaultValue; - React.useEffect(() => { - if (!api || !api.ready) - return; - if (ref.current) { - api.observe(id, ref); - } - return () => { - api.unobserve(id); - }; - }, [api.ready, ref.current]); - return rect; -}; -const calcAvailableWidth = (direction, scrollLeft, scrollWidth, clientWidth) => direction === -1 ? scrollLeft : scrollWidth - (clientWidth + scrollLeft); -const useHorizontalScroll = (ref, options) => { - var _a; - const rect = useResizeObserver(ref); - const [scroll, setScroll] = React.useState(((_a = ref == null ? void 0 : ref.current) == null ? void 0 : _a.scrollLeft) ?? 0); - const [leftAvailableWidth, setLeftAvailableWidth] = React.useState(0); - const [rightAvailableWidth, setRightAvailableWidth] = React.useState(0); - const timeoutRef = React.useRef(null); - useEventListener("scroll", ref.current, (event) => { - setScroll(event.target.scrollLeft); - }, { - passive: true - }); - const onChange = () => { - timeoutRef.current && clearTimeout(timeoutRef.current); - if (!ref.current) - return; - const { - scrollLeft, - scrollWidth, - clientWidth - } = ref.current; - setRightAvailableWidth(calcAvailableWidth(1, scrollLeft, scrollWidth, clientWidth)); - setLeftAvailableWidth(calcAvailableWidth(-1, scrollLeft, scrollWidth, clientWidth)); - }; - React.useEffect(onChange, [rect, scroll, options == null ? void 0 : options.deps]); - const toScroll = (direction, width) => { - const { - clientWidth, - scrollLeft - } = ref.current; - const firstChildInViewport = Array.from(ref.current.childNodes).find((child) => child.getBoundingClientRect().x >= 0); - const w2 = Math.max(width ?? clientWidth / 3, firstChildInViewport ? firstChildInViewport.clientWidth : 0); - ref.current.scrollTo({ - behavior: (options == null ? void 0 : options.scrollBehavior) ?? "smooth", - left: scrollLeft + w2 * direction - }); - }; - return React.useMemo(() => ({ - right: rightAvailableWidth, - left: leftAvailableWidth, - toRight: toScroll.bind(null, 1), - toLeft: toScroll.bind(null, -1) - }), [rightAvailableWidth, leftAvailableWidth]); -}; -const tabsClasses = { - root: `lsd-tabs`, - fullWidth: "lsd-tabs--full-width", - withScrollControls: "lsd-tabs--with-scroll-controls", - leftScrollControl: "lsd-tabs__left-scroll-control", - rightScrollControl: "lsd-tabs__right-scroll-control" -}; -const Tabs = ({ - size = "large", - fullWidth = false, - scrollControls = false, - onChange, - activeTab, - children, - ...props -}) => { - const commonProps = useCommonProps(props); - const ref = React.useRef(null); - const [value, setValue] = React.useState(activeTab); - const setActiveTab = (tab) => { - if (onChange) - onChange(tab); - else - setValue(tab); - }; - React.useEffect(() => setValue(activeTab), [activeTab]); - const scroll = useHorizontalScroll(ref, { - scrollBehavior: "smooth", - deps: [children] - }); - const canScroll = scroll.left !== 0 || scroll.right !== 0; - return /* @__PURE__ */ jsx(TabsContext.Provider, { value: { - activeTab: value, - setActiveTab, - size - }, children: /* @__PURE__ */ jsxs("div", { ref, ...omitCommonProps(props), className: clsx(commonProps.className, props.className, tabsClasses.root, fullWidth && tabsClasses.fullWidth, scrollControls && canScroll && tabsClasses.withScrollControls), children: [ - scrollControls && canScroll && /* @__PURE__ */ jsx(TabItem, { inactive: true, name: "Prev", disabled: scroll.left === 0, onClick: () => scroll.toLeft(), className: tabsClasses.leftScrollControl, children: /* @__PURE__ */ jsx(ChevronLeftIcon, { color: "primary" }) }), - children, - scrollControls && canScroll && /* @__PURE__ */ jsx(TabItem, { inactive: true, name: "Next", disabled: scroll.right === 0, onClick: () => scroll.toRight(), className: tabsClasses.rightScrollControl, children: /* @__PURE__ */ jsx(ChevronRightIcon, { color: "primary" }) }) - ] }) }); -}; -Tabs.classes = tabsClasses; -const tagClasses = { - root: `lsd-tag`, - label: `lsd-tag__label`, - outlined: `lsd-tag--outlined`, - filled: `lsd-tag--filled`, - disabled: "lsd-tag--disabled", - small: "lsd-badge--small", - large: "lsd-badge--large" -}; -const Tag = ({ - variant = "outlined", - disabled, - icon, - iconDirection = "left", - children, - size = "large", - ...props -}) => { - const commonProps = useCommonProps(props); - return /* @__PURE__ */ jsxs("div", { "aria-label": children, ...omitCommonProps(props), className: clsx(commonProps.className, props.className, tagClasses.root, tagClasses[variant], disabled && tagClasses.disabled, tagClasses[size]), children: [ - iconDirection === "left" && icon, - /* @__PURE__ */ jsx(Typography, { variant: size === "small" ? "label2" : "label1", className: tagClasses.label, component: "span", children }), - iconDirection === "right" && icon - ] }); -}; -Tag.classes = tagClasses; -var toString = toString_1; -var idCounter = 0; -function uniqueId(prefix2) { - var id = ++idCounter; - return toString(prefix2) + id; -} -var uniqueId_1 = uniqueId; -const textFieldClasses = { - root: `lsd-text-field`, - inputContainer: `lsd-text-field__input-container`, - label: `lsd-text-field__label`, - input: `lsd-text-field__input`, - icon: `lsd-text-field__icon`, - clearButton: `lsd-text-field__clear-button`, - supportingText: "lsd-text-field__supporting-text", - disabled: `lsd-text-field--disabled`, - error: "lsd-text-field--error", - large: `lsd-text-field--large`, - medium: `lsd-text-field--medium`, - small: `lsd-text-field--small`, - outlined: `lsd-text-field--outlined`, - underlined: `lsd-text-field--underlined` -}; -const TextField = ({ - size = "large", - label, - icon, - error = false, - errorIcon = false, - clearButton, - supportingText, - children, - value, - placeholder, - defaultValue: defaultValue2, - disabled, - onChange, - inputProps = {}, - labelProps = {}, - variant = "underlined", - ...props -}) => { - const commonProps = useCommonProps(props); - const ref = React.useRef(null); - const input = useInput({ - defaultValue: defaultValue2, - value, - onChange, - ref - }); - const onCancel = () => input.setValue(""); - const inputId = inputProps.id || uniqueId_1("TextField-"); - return /* @__PURE__ */ jsxs("div", { "aria-disabled": disabled ? "true" : "false", ...omitCommonProps(props), className: clsx(commonProps.className, props.className, textFieldClasses.root, textFieldClasses[size], disabled && textFieldClasses.disabled, error && textFieldClasses.error, variant === "outlined" ? textFieldClasses.outlined : textFieldClasses.underlined), children: [ - label && /* @__PURE__ */ jsx(Typography, { variant: "label2", component: "label", htmlFor: inputId, ...labelProps, className: clsx(textFieldClasses.label, labelProps.className), children: label }), - /* @__PURE__ */ jsxs("div", { className: textFieldClasses.inputContainer, children: [ - /* @__PURE__ */ jsx("input", { id: inputId, placeholder, ref, value: input.value, onChange: input.onChange, ...inputProps, className: clsx(inputProps.className, textFieldClasses.input) }), - error && errorIcon ? /* @__PURE__ */ jsx(ErrorIcon, { color: "primary", className: textFieldClasses.icon }) : clearButton && input.filled ? /* @__PURE__ */ jsx(IconButton, { disabled, onClick: () => !disabled && onCancel(), "aria-label": "clear", className: textFieldClasses.clearButton, children: /* @__PURE__ */ jsx(CloseIcon, { color: "primary", className: textFieldClasses.icon }) }) : icon - ] }), - supportingText && /* @__PURE__ */ jsx("div", { className: clsx(textFieldClasses.supportingText), children: /* @__PURE__ */ jsx(Typography, { variant: size === "large" ? "label1" : "label2", component: "p", children: supportingText }) }) - ] }); -}; -TextField.classes = textFieldClasses; -const cssUtils = { - vars: { - lsd: (...seq) => `--${["lsd", ...seq].join("-")}`, - typography: (variant, property) => cssUtils.vars.lsd(variant, property), - color: (category, variant) => cssUtils.vars.lsd(category, variant), - wrap: (name) => `var(${name})` - }, - define: (name, value) => `${name}: ${value};` -}; -const generateThemeGlobalStyles = (theme) => { - const vars = []; - const styles = []; - const breakpointStyles = THEME_BREAKPOINTS.map(() => []); - const breakpointVars = THEME_BREAKPOINTS.map(() => []); - { - THEME_TYPOGRAPHY_VARIANTS.forEach((variant) => { - THEME_TYPOGRAPHY_PROPERTIES.forEach((property) => { - var _a; - const value = ((_a = theme.typography[variant][property]) == null ? void 0 : _a.toString()) ?? "unset"; - vars.push(cssUtils.define(cssUtils.vars.typography(variant, property), value)); - }); - }); - vars.push(cssUtils.define(cssUtils.vars.lsd("typography", "generic-font-family"), theme.typographyGlobal.genericFontFamily)); - THEME_BREAKPOINTS.forEach((breakpoint, breakpointIndex) => { - THEME_TYPOGRAPHY_VARIANTS.forEach((variant) => { - THEME_TYPOGRAPHY_PROPERTIES.forEach((property) => { - var _a, _b, _c, _d; - const value = theme.breakpoints[breakpoint].typography[variant][property]; - const current = breakpointIndex > 0 ? (_d = (_c = (_b = (_a = theme.breakpoints) == null ? void 0 : _a[THEME_BREAKPOINTS[breakpointIndex - 1]]) == null ? void 0 : _b.typography) == null ? void 0 : _c[variant]) == null ? void 0 : _d[property] : theme.typography[variant][property]; - if (value && value !== current) { - breakpointVars[breakpointIndex].push(cssUtils.define(cssUtils.vars.typography(variant, property), value.toString())); - } - }); - }); - }); - } - { - const { - primary, - secondary, - ...rest - } = theme.palette; - const palette = rest; - vars.push(cssUtils.define(cssUtils.vars.color("theme", "primary"), primary), cssUtils.define(cssUtils.vars.color("theme", "secondary"), secondary), ...Object.keys(palette).flatMap((name) => Object.keys(palette[name]).map((variant) => cssUtils.define(cssUtils.vars.color(name, variant), palette[name][variant])))); - } - { - theme.spacing.map((spacingValue) => { - const varName = cssUtils.vars.lsd("spacing", spacingValue.toString()); - vars.push(cssUtils.define(varName, `${spacingValue}px`)); - }); - } - THEME_BREAKPOINTS.map((breakpoint, index) => { - styles.push(`@media (min-width: ${theme.breakpoints[breakpoint].width}px) { - :root { - ${breakpointVars[index].join("\n")} - } - - ${breakpointStyles[index]} - }`); - }); - const cssVars2 = ` - ${vars.join("\n")} - - ${styles.join("\n")} - `; - return { - cssVars: cssVars2, - globalStyles: /* @__PURE__ */ react.css(":root{", cssVars2, ";}" + ( true ? "" : 0), true ? "" : 0) - }; -}; -const createThemeGlobalStyles = (() => { - const cache = {}; - return (theme) => { - const key = theme.name; - if (cache[key] && "production" === "production" && typeof window !== "undefined") - return cache[key]; - cache[key] = generateThemeGlobalStyles(theme); - return cache[key]; - }; -})(); -const baseTheme = { - name: "LSD", - breakpoints: { - xs: { - width: 0, - typography: { - display1: {}, - display2: {}, - display3: {}, - display4: {}, - h1: {}, - h2: {}, - h3: {}, - h4: {}, - h5: {}, - h6: {}, - body1: {}, - body2: {}, - body3: {}, - label1: {}, - label2: {}, - subtitle1: {}, - subtitle2: {}, - subtitle3: {}, - subtitle4: {} - } - }, - sm: { - width: 400, - typography: { - display1: {}, - display2: {}, - display3: {}, - display4: {}, - h1: {}, - h2: {}, - h3: {}, - h4: {}, - h5: {}, - h6: {}, - body1: {}, - body2: {}, - body3: {}, - label1: {}, - subtitle4: {}, - subtitle3: {}, - label2: {}, - subtitle1: {}, - subtitle2: {} - } - }, - md: { - width: 768, - typography: { - display1: {}, - display2: {}, - display3: {}, - display4: {}, - h1: {}, - h2: {}, - h3: {}, - h4: {}, - h5: {}, - h6: {}, - body1: {}, - body2: {}, - body3: {}, - label1: {}, - subtitle4: {}, - subtitle3: {}, - label2: {}, - subtitle1: {}, - subtitle2: {} - } - }, - lg: { - width: 1024, - typography: { - display1: {}, - display2: {}, - display3: {}, - display4: {}, - h1: {}, - h2: {}, - h3: {}, - h4: {}, - h5: {}, - h6: {}, - body1: {}, - body2: {}, - body3: {}, - label1: {}, - subtitle4: {}, - subtitle3: {}, - label2: {}, - subtitle1: {}, - subtitle2: {} - } - }, - xl: { - width: 1205, - typography: { - display1: {}, - display2: {}, - display3: {}, - display4: {}, - h1: {}, - h2: {}, - h3: {}, - h4: {}, - h5: {}, - h6: {}, - body1: {}, - body2: {}, - body3: {}, - label1: {}, - subtitle4: {}, - subtitle3: {}, - label2: {}, - subtitle1: {}, - subtitle2: {} - } - } - }, - typography: { - display1: { - fontSize: "5.5rem", - fontWeight: "normal", - lineHeight: "6rem" - }, - display2: { - fontSize: "4rem", - fontWeight: "normal", - lineHeight: "4.5rem" - }, - display3: { - fontSize: "3.5rem", - fontWeight: "normal", - lineHeight: "4rem" - }, - display4: { - fontSize: "3rem", - fontWeight: "normal", - lineHeight: "3.5rem" - }, - h1: { - fontSize: "2.5rem", - fontWeight: "normal", - lineHeight: "3rem" - }, - h2: { - fontSize: "2rem", - fontWeight: "normal", - lineHeight: "2.5rem" - }, - h3: { - fontSize: "1.75rem", - fontWeight: "normal", - lineHeight: "2.25rem" - }, - h4: { - fontSize: "1.5rem", - fontWeight: "normal", - lineHeight: "2rem" - }, - h5: { - fontSize: "1.25rem", - fontWeight: "normal", - lineHeight: "1.75rem" - }, - h6: { - fontSize: "1rem", - fontWeight: "normal", - lineHeight: "1.5rem" - }, - subtitle1: { - fontSize: "1.125rem", - fontWeight: "normal", - lineHeight: "1.5rem" - }, - subtitle2: { - fontSize: "1rem", - fontWeight: "normal", - lineHeight: "1.5rem" - }, - subtitle3: { - fontSize: "0.875rem", - fontWeight: "normal", - lineHeight: "1.25rem" - }, - subtitle4: { - fontSize: "0.75rem", - fontWeight: "normal", - lineHeight: "1rem" - }, - body1: { - fontSize: "1rem", - fontWeight: "normal", - lineHeight: "1.5rem" - }, - body2: { - fontSize: "0.875rem", - fontWeight: "normal", - lineHeight: "1.25rem" - }, - body3: { - fontSize: "0.75rem", - fontWeight: "normal", - lineHeight: "1rem" - }, - label1: { - fontSize: "0.875rem", - fontWeight: "normal", - lineHeight: "1.25rem" - }, - label2: { - fontSize: "0.75rem", - fontWeight: "normal", - lineHeight: "1rem" - } - }, - typographyGlobal: { - genericFontFamily: "sans-serif" - }, - palette: { - primary: "0, 0, 0", - secondary: "255, 255, 255", - surface: { - primary: "255, 255, 255", - secondary: "0, 0, 0" - }, - text: { - primary: "0, 0, 0", - secondary: "255, 255, 255", - tertiary: "0, 0, 0, 0.34" - }, - border: { - primary: "0, 0, 0", - secondary: "255, 255, 255" - }, - icon: { - primary: "0, 0, 0", - secondary: "255, 255, 255" - } - }, - spacing: [4, 8, 16, 24, 32, 40, 64, 80, 96, 120], - globalStyles: /* @__PURE__ */ react.css( true ? "" : 0, true ? "" : 0), - cssVars: "" -}; -const { - cssVars, - globalStyles -} = createThemeGlobalStyles(baseTheme); -baseTheme.cssVars = cssVars; -baseTheme.globalStyles = globalStyles; -const counter = createCounter(); -const generateName = (prefix2) => `${prefix2}-${counter()}`; -const createTypographyStyles = (theme, defaultTheme) => pairs(THEME_TYPOGRAPHY_VARIANTS, (variant) => ({ - ...defaultTheme.typography[variant], - ...theme.typography[variant] ?? {} -})); -const createTypographyGlobalStyles = (theme, defaultTheme) => ({ - ...defaultTheme.typographyGlobal, - ...theme.typographyGlobal -}); -const createBreakpointStyle = (key, all, index, theme, defaultTheme, overrides) => { - switch (key) { - case "typography": - return pairs(defaultTheme[key], (variant) => { - var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k; - const variantKey = `${key}.${variant}`; - const overridden = overrides.get(variantKey) === true; - if (Object.keys(((_c = (_b = (_a = theme.breakpoints) == null ? void 0 : _a[THEME_BREAKPOINTS[index]]) == null ? void 0 : _b[key]) == null ? void 0 : _c[variant]) ?? {}).length > 0) { - overrides.set(variantKey, true); - } - return { - ...defaultTheme[key][variant], - ...theme[key][variant], - ...overridden ? ((_e = (_d = all == null ? void 0 : all[index - 1]) == null ? void 0 : _d[key]) == null ? void 0 : _e[variant]) ?? {} : (_h = (_g = (_f = defaultTheme.breakpoints) == null ? void 0 : _f[THEME_BREAKPOINTS[index]]) == null ? void 0 : _g[key]) == null ? void 0 : _h[variant], - ...((_k = (_j = (_i = theme.breakpoints) == null ? void 0 : _i[THEME_BREAKPOINTS[index]]) == null ? void 0 : _j[key]) == null ? void 0 : _k[variant]) ?? {} - }; - }); - default: - return {}; - } -}; -const createBreakpointStyles = (theme, defaultTheme) => { - const overrides = /* @__PURE__ */ new Map(); - return Object.fromEntries(THEME_BREAKPOINTS.reduce((all, key, index) => [...all, { - ...defaultTheme.breakpoints[key], - ...theme.breakpoints[key], - ...pairs(["typography"], (key2) => createBreakpointStyle(key2, all, index, theme, defaultTheme, overrides)) - }], []).map((styles, index) => [THEME_BREAKPOINTS[index], styles])); -}; -const createPaletteStyles = (theme, defaultTheme) => { - var _a, _b, _c, _d, _e, _f, _g, _h, _i; - const primary = theme.palette.primary ?? defaultTheme.palette.primary; - const secondary = theme.palette.secondary ?? defaultTheme.palette.secondary; - const palette = { - primary, - secondary, - surface: { - primary: ((_a = theme.palette.surface) == null ? void 0 : _a.primary) ?? secondary, - secondary: ((_b = theme.palette.surface) == null ? void 0 : _b.secondary) ?? primary - }, - border: { - primary: ((_c = theme.palette.border) == null ? void 0 : _c.primary) ?? primary, - secondary: ((_d = theme.palette.border) == null ? void 0 : _d.secondary) ?? secondary - }, - icon: { - primary: ((_e = theme.palette.icon) == null ? void 0 : _e.primary) ?? primary, - secondary: ((_f = theme.palette.icon) == null ? void 0 : _f.secondary) ?? secondary - }, - text: { - primary: ((_g = theme.palette.text) == null ? void 0 : _g.primary) ?? primary, - secondary: ((_h = theme.palette.text) == null ? void 0 : _h.secondary) ?? secondary, - tertiary: ((_i = theme.palette.text) == null ? void 0 : _i.tertiary) ?? `${primary}, 0.34` - } - }; - return palette; -}; -const createTheme = (props, from2 = baseTheme) => { - const theme = { - name: props.name ?? generateName(from2.name), - typography: createTypographyStyles(props, from2), - typographyGlobal: createTypographyGlobalStyles(props, from2), - breakpoints: createBreakpointStyles(props, from2), - palette: createPaletteStyles(props, from2), - globalStyles: /* @__PURE__ */ react.css( true ? "" : 0, true ? "" : 0), - cssVars: "", - spacing: props.spacing.length ? props.spacing : from2.spacing - }; - const { - cssVars: cssVars2, - globalStyles: globalStyles2 - } = createThemeGlobalStyles(theme); - theme.cssVars = cssVars2; - theme.globalStyles = globalStyles2; - return theme; -}; -const lightTheme = createTheme({ - name: "Light", - breakpoints: {}, - typography: {}, - typographyGlobal: {}, - palette: {}, - spacing: [] -}, baseTheme); -const darkTheme = createTheme({ - name: "Dark", - breakpoints: {}, - typography: {}, - typographyGlobal: {}, - palette: { - primary: "255, 255, 255", - secondary: "0, 0, 0" - }, - spacing: [] -}, lightTheme); -const defaultThemes = { - light: lightTheme, - dark: darkTheme -}; -const AutocompleteStyles = /* @__PURE__ */ react.css(".", autocompleteClasses.root, "{box-sizing:border-box;}.", autocompleteClasses.label, "{display:block;}.", autocompleteClasses.inputContainer, "{display:flex;justify-content:space-between;}.", autocompleteClasses.disabled, "{opacity:0.34;}.", autocompleteClasses.input, "{border:none;outline:none;font-size:14px;color:rgb(var(--lsd-text-primary));background:none;width:100%;}.", autocompleteClasses.input, ":hover{outline:none;}.", autocompleteClasses.input, "::placeholder{color:rgb(var(--lsd-text-primary));opacity:0.3;}.", autocompleteClasses.icon, "{cursor:pointer;display:flex;align-items:center;}.", autocompleteClasses.error, "{text-decoration:line-through;}.", autocompleteClasses.large, "{width:208px;.", autocompleteClasses.label, "{margin:0 0 6px 18px;}.", autocompleteClasses.inputContainer, "{height:40px;}.", autocompleteClasses.input, "{padding:9px 17px;}.", autocompleteClasses.icon, "{padding:12px 13px;}}.", autocompleteClasses.medium, "{width:188px;.", autocompleteClasses.label, "{margin:0 0 6px 14px;}.", autocompleteClasses.inputContainer, "{height:32px;}.", autocompleteClasses.input, "{padding:5px 13px;}.", autocompleteClasses.icon, "{padding:8px 11px;}}.", autocompleteClasses.small, "{width:164px;.", autocompleteClasses.label, "{margin:0 0 6px 12px;}.", autocompleteClasses.inputContainer, "{height:28px;}.", autocompleteClasses.input, "{padding:5px 11px;}.", autocompleteClasses.icon, "{padding:6px 9px;}}.", autocompleteClasses.withIcon, "{}.", autocompleteClasses.outlined, " .", autocompleteClasses.inputContainer, "{border:1px solid rgb(var(--lsd-border-primary));}.", autocompleteClasses.underlined, " .", autocompleteClasses.inputContainer, "{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}.", autocompleteClasses.dropdownItemPlaceholder, "{opacity:0.5;white-space:pre;}" + ( true ? "" : 0), true ? "" : 0); -const BadgeStyles = /* @__PURE__ */ react.css(".", badgeClasses.root, "{width:fit-content;box-sizing:border-box;display:flex;flex-direction:row;align-items:center;justify-content:center;border:1px solid rgb(var(--lsd-icon-primary));border-radius:20px;&:hover,&:focus{text-decoration:underline;cursor:pointer;}}.", badgeClasses.large, "{padding:3px 11px;gap:12px;height:28px;}.", badgeClasses.small, "{padding:3px 7px;gap:8px;height:24px;}.", badgeClasses.filled, "{background-color:rgb(var(--lsd-icon-primary));.", badgeClasses.label, "{color:rgb(var(--lsd-text-secondary));}svg{--lsd-icon-primary:var(--lsd-icon-secondary);}}.", badgeClasses.outlined, "{color:rgb(var(--lsd-text-primary));}.", badgeClasses.disabled, "{opacity:0.3;cursor:initial;pointer-events:none;}" + ( true ? "" : 0), true ? "" : 0); -const BreadcrumbStyles = /* @__PURE__ */ react.css(".", breadcrumbClasses.root, "{}.", breadcrumbClasses.list, "{display:flex;flex-direction:row;align-items:center;list-style-type:none;margin:0;padding:0;}.", breadcrumbClasses.disabled, "{.", breadcrumbClasses.list, "{opacity:0.34;cursor:initial;pointer-events:none;}}.", breadcrumbClasses.listBox, "{display:flex;flex-direction:column;overflow:auto;border:1px solid rgb(var(--lsd-border-primary));margin-top:10px;position:absolute;width:auto!important;}.", breadcrumbClasses.listBox, ">li{cursor:pointer;&:not(:last-child){border-bottom:1px solid rgb(var(--lsd-border-primary));}&:hover,&:focus{text-decoration:underline;text-decoration-color:rgb(var(--lsd-border-primary));}}.", breadcrumbClasses.listBox, " li>a{width:164px;padding:5px 11px;}" + ( true ? "" : 0), true ? "" : 0); -const BreadcrumbItemStyles = /* @__PURE__ */ react.css(".", breadcrumbItemClasses.root, "{list-style-type:none;display:flex;align-items:center;}.", breadcrumbClasses.list, ">li:not(:last-child)::after{display:inline-block;margin-inline:12px;content:'/';}.", breadcrumbItemClasses.itemLink, "{text-decoration:none;cursor:pointer;}.", breadcrumbItemClasses.outlined, "{padding:3px 11px;border:1px solid rgb(var(--lsd-border-primary));}", breadcrumbItemClasses.large, "{}", breadcrumbItemClasses.small, "{}.", breadcrumbClasses.root, ":not(.", breadcrumbClasses.disabled, "){.", breadcrumbItemClasses.itemLink, "{&:hover,&:focus{text-decoration:underline;text-decoration-color:rgb(var(--lsd-border-primary));}}}" + ( true ? "" : 0), true ? "" : 0); -const ButtonStyles = /* @__PURE__ */ react.css(".", buttonClasses.root, "{width:auto;cursor:pointer;padding:6px 24px;}.", buttonClasses.disabled, "{cursor:default;opacity:0.34;}.", buttonClasses.large, "{padding:10px 40px;}.", buttonClasses.medium, "{padding:6px 24px;}.", buttonClasses.small, "{padding:6px 12px;}.", buttonClasses.root, ":hover{&:not(.", buttonClasses.disabled, "){.", buttonClasses.text, "{text-decoration:underline;}}}.", buttonClasses.withIcon, "{display:flex;align-items:center;}.", buttonClasses.icon, "{display:flex;justify-content:center;align-items:center;height:100%;}.", buttonClasses.large, ".", buttonClasses.withIcon, "{padding:10px 0px 10px 18px;.", buttonClasses.icon, "{width:42px;}}.", buttonClasses.medium, ".", buttonClasses.withIcon, "{padding:6px 0px 6px 14px;.", buttonClasses.icon, "{width:38px;}}.", buttonClasses.small, ".", buttonClasses.withIcon, "{padding:6px 0px 6px 12px;.", buttonClasses.icon, "{width:34px;}}.", buttonClasses.outlined, "{background:none;border:1px solid rgb(var(--lsd-border-primary));.", buttonClasses.text, "{color:rgb(var(--lsd-text-primary));}}.", buttonClasses.filled, "{background:rgb(var(--lsd-surface-secondary));border:1px solid rgb(var(--lsd-border-primary));.", buttonClasses.text, "{color:rgb(var(--lsd-text-secondary));}}" + ( true ? "" : 0), true ? "" : 0); -const CalendarStyles = /* @__PURE__ */ react.css(".", calendarClasses.root, "{border:1px solid rgb(var(--lsd-border-primary));visibility:hidden;position:absolute!important;top:0;left:0;opacity:0;visibility:hidden;margin:0;padding:0;box-sizing:border-box;background:rgb(var(--lsd-surface-primary));user-select:none;}.", calendarClasses.container, "{display:flex;flex-direction:column;padding:8px;}.", calendarClasses.open, "{opacity:1;visibility:visible;}.", calendarClasses.header, "{display:flex;justify-content:center;align-items:center;height:32px;margin-bottom:8px;}.", calendarClasses.weekDay, "{display:flex;justify-content:center;align-items:center;aspect-ratio:1/1;margin-bottom:4px;}.", calendarClasses.changeYear, "{position:relative;display:flex;justify-content:center;align-items:center;padding:2px 0xp 2px 8px;gap:6px;border:1px solid transparent;}.", calendarClasses.changeYearActive, "{.", calendarClasses.yearAndIcon, "{border:1px solid rgb(var(--lsd-border-primary));}}.", calendarClasses.changeYearIconContainer, "{display:flex;justify-content:center;align-items:center;cursor:pointer;border:none;}.", calendarClasses.month, "{margin-right:8px;}.", calendarClasses.monthAndYear, "{display:flex;align-items:center;justify-content:center;}.", calendarClasses.dayContainer, "{cursor:pointer;background:transparent;position:relative;box-sizing:border-box;border:1px solid transparent;}.", calendarClasses.day, "{aspect-ratio:1/1;display:flex;justify-content:center;align-items:center;}.", calendarClasses.day, ":hover{cursor:pointer;text-decoration:underline;text-decoration-color:rgb(var(--lsd-border-primary));}.", calendarClasses.day, " label:hover{cursor:pointer;}.", calendarClasses.daySelected, "{border:1px solid rgb(var(--lsd-border-primary));}.", calendarClasses.dayDisabled, "{opacity:0.3;cursor:default;}.", calendarClasses.todayIndicator, "{position:absolute;left:50%;transform:translateX(-50%);bottom:2px;}.", calendarClasses.disabled, "{pointer-events:none;border:1px solid rgba(var(--lsd-border-primary), 0.3);label{opacity:0.3;}.", calendarClasses.button, "{opacity:0.3;}.", calendarClasses.daySelected, "{opacity:0.3;}}.", calendarClasses.button, "{border:1px solid rgb(var(--lsd-border-primary));cursor:pointer;background:transparent;width:32px;height:32px;display:flex;align-items:center;justify-content:center;position:absolute;}.", calendarClasses.nextMonthButton, "{top:8px;right:8px;}.", calendarClasses.previousMonthButton, "{top:8px;left:8px;}.", calendarClasses.dayBorderLeft, "{border-left:1px double rgb(var(--lsd-border-primary));}.", calendarClasses.dayBorderRight, "{border-right:1px double rgb(var(--lsd-border-primary));}.", calendarClasses.dayBorderLeftAndRight, "{border-left:1px double rgb(var(--lsd-border-primary));border-right:1px double rgb(var(--lsd-border-primary));}.", calendarClasses.dayBorderTopAndBottom, "{border-top:1px double rgb(var(--lsd-border-primary));border-bottom:1px double rgb(var(--lsd-border-primary));}.", calendarClasses.monthTable, "{border-collapse:collapse;}.", calendarClasses.yearDropdown, "{box-sizing:border-box;position:absolute;top:100%;left:0;max-height:200px;overflow-y:auto;width:100%;border:1px solid rgb(var(--lsd-border-primary));border-top:none;z-index:1;.", calendarClasses.year, "{border-bottom:1px solid rgb(var(--lsd-border-primary));}}.", calendarClasses.yearDropdownHidden, "{visibility:hidden;}.", calendarClasses.year, "{display:flex;cursor:pointer;transition:background-color 0.2s;align-items:center;background:rgb(var(--lsd-surface-primary));:hover{text-decoration:underline;}}.", calendarClasses.yearAndIcon, "{border:1px solid rgb(var(--lsd-border-primary));}.", calendarClasses.large, "{.", calendarClasses.year, "{padding:6px 0px 6px 14px;}.", calendarClasses.changeYearIconContainer, "{width:32px;}}.", calendarClasses.medium, "{.", calendarClasses.year, "{padding:6px 0px 6px 12px;}.", calendarClasses.changeYearIconContainer, "{width:28px;}}.", calendarClasses.small, "{.", calendarClasses.year, "{padding:6px 0px 6px 12px;}.", calendarClasses.changeYearIconContainer, "{width:28px;}}" + ( true ? "" : 0), true ? "" : 0); -const CardStyles = /* @__PURE__ */ react.css(".", cardClasses.root, "{box-sizing:border-box;display:flex;flex-direction:column;}.", cardClasses.root, ">.", cardHeaderClasses.root, "{margin-bottom:-1px;}.", cardClasses.large, "{}.", cardClasses.medium, "{}.", cardClasses.small, "{}" + ( true ? "" : 0), true ? "" : 0); -const CardBodyStyles = /* @__PURE__ */ react.css(".", cardBodyClasses.root, "{box-sizing:border-box;padding:14px 22px;border:1px solid rgb(var(--lsd-border-primary));}" + ( true ? "" : 0), true ? "" : 0); -const CardHeaderStyles = /* @__PURE__ */ react.css(".", cardHeaderClasses.root, "{box-sizing:border-box;padding:10px 18px;text-align:center;border:1px solid rgb(var(--lsd-border-primary));}.", cardHeaderClasses.title, "{overflow:hidden;word-break:break-all;}.", cardHeaderClasses.large, "{padding:10px 18px;}.", cardHeaderClasses.medium, "{padding:6px 14px;}.", cardHeaderClasses.small, "{padding:6px 12px;}" + ( true ? "" : 0), true ? "" : 0); -const CheckboxStyles = /* @__PURE__ */ react.css(".", checkboxClasses.root, "{position:relative;display:flex;flex-direction:row;align-items:center;}.", checkboxClasses.input, "{opacity:0;position:absolute;left:0;top:0;padding:0;margin:0;width:100%;height:100%;}.", checkboxClasses.root, ":not(.", checkboxClasses.disabled, "){&:hover,&.", checkboxClasses.focused, "{text-decoration:underline;}.", checkboxClasses.input, "{cursor:pointer;}}.", checkboxClasses.disabled, "{opacity:0.34;}.", checkboxClasses.label, "{margin-left:18px;}.", checkboxClasses.large, "{.", checkboxClasses.label, "{margin-left:18px;}}.", checkboxClasses.medium, "{.", checkboxClasses.label, "{margin-left:14px;}}.", checkboxClasses.small, "{.", checkboxClasses.label, "{margin-left:12px;}}" + ( true ? "" : 0), true ? "" : 0); -const CheckboxGroupStyles = /* @__PURE__ */ react.css(".", checkboxGroupClasses.root, "{display:flex;flex-direction:column;gap:6px;width:fit-content;}.", checkboxGroupClasses.label, "{margin-bottom:6px;}" + ( true ? "" : 0), true ? "" : 0); -const CollapseStyles = /* @__PURE__ */ react.css(".", collapseClasses.root, "{box-sizing:border-box;display:flex;flex-direction:column;}.", collapseClasses.open, "{.", collapseClasses.content, "{border-top:1px solid transparent;}}.", collapseClasses.content, "{border:1px solid rgb(var(--lsd-border-primary));}" + ( true ? "" : 0), true ? "" : 0); -const CollapseHeaderStyles = /* @__PURE__ */ react.css(".", collapseHeaderClasses.root, "{box-sizing:border-box;}.", collapseHeaderClasses.root, ":not(.", collapseHeaderClasses.disabled, "){.", collapseHeaderClasses.trigger, "{&:hover{.", collapseHeaderClasses.label, "{text-decoration:underline;}}}}.", collapseHeaderClasses.trigger, "{width:100%;display:flex;flex-direction:row;align-items:center;justify-content:space-between;cursor:pointer;background:none;border:1px solid rgb(var(--lsd-border-primary));&:focus{outline:none;}}.", collapseHeaderClasses.label, "{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:auto;}.", collapseHeaderClasses.icons, "{display:flex;flex-direction:row;align-items:center;justify-content:flex-end;}.", collapseHeaderClasses.icon, "{margin-right:8px;}.", collapseHeaderClasses.menuIcon, "{}.", collapseHeaderClasses.disabled, "{.", collapseHeaderClasses.trigger, "{opacity:0.34;cursor:initial;}}.", collapseHeaderClasses.large, "{.", collapseHeaderClasses.trigger, "{width:299px;height:40px;padding:9px 17px;}}.", collapseHeaderClasses.medium, "{.", collapseHeaderClasses.trigger, "{width:270px;height:32px;padding:5px 13px;}}.", collapseHeaderClasses.small, "{.", collapseHeaderClasses.trigger, "{width:235px;height:28px;padding:5px 11px;}}" + ( true ? "" : 0), true ? "" : 0); -const DateFieldStyles = /* @__PURE__ */ react.css(".", dateFieldClasses.root, "{width:auto;box-sizing:border-box;}.", dateFieldClasses.label, "{display:block;}.", dateFieldClasses.icon, "{position:absolute;right:0;cursor:pointer;display:flex;align-items:center;background-color:rgb(var(--lsd-surface-primary));}.", dateFieldClasses.icon, ":focus{background:blue;background-color:pink;border:1px solid rgb(var(--lsd-border-primary));}.", dateFieldClasses.noIcon, "{position:absolute;right:0;background-color:rgb(var(--lsd-surface-primary));padding:12px;}.", dateFieldClasses.outlined, "{border:1px solid rgb(var(--lsd-border-primary));}.", dateFieldClasses.underlined, "{border-bottom:1px solid rgb(var(--lsd-border-primary));}.", dateFieldClasses.inputContainer, "{position:relative;display:flex;align-items:center;justify-content:space-between;}.", dateFieldClasses.disabled, "{opacity:0.34;}.", dateFieldClasses.input, "{border:none;outline:none;font-size:14px;color:rgb(var(--lsd-text-primary));background:none;width:100%;opacity:0.4;transition:opacity 0.2s ease-in-out;}.", dateFieldClasses.input, "::-webkit-inner-spin-button,.", dateFieldClasses.input, "::-webkit-calendar-picker-indicator{display:none;-webkit-appearance:none;}.", dateFieldClasses.input, ":hover{outline:none;}.", dateFieldClasses.supportingText, "{position:absolute;}.", dateFieldClasses.large, "{width:208px;.", dateFieldClasses.label, "{margin:0 0 6px 18px;}.", dateFieldClasses.inputContainer, "{height:40px;}.", dateFieldClasses.input, "{padding:9px 0px 9px 17px;}.", dateFieldClasses.icon, "{padding:12px 13px;}.", dateFieldClasses.supportingText, "{margin:6px 18px 0 18px;}}.", dateFieldClasses.medium, "{width:188px;.", dateFieldClasses.label, "{margin:0 0 6px 14px;}.", dateFieldClasses.inputContainer, "{height:32px;}.", dateFieldClasses.input, "{padding:5px 11px 5px 13px;}.", dateFieldClasses.icon, "{padding:8px 11px;}.", dateFieldClasses.supportingText, "{margin:6px 14px 0 14px;}}.", dateFieldClasses.small, "{width:164px;.", dateFieldClasses.label, "{margin:0 0 6px 12px;}.", dateFieldClasses.inputContainer, "{height:28px;}.", dateFieldClasses.input, "{padding:5px 9px 5px 11px;font-size:12px;}.", dateFieldClasses.icon, "{padding:6px 9px;}.", dateFieldClasses.supportingText, "{margin:6px 12px 0 12px;}}.", dateFieldClasses.input, ":invalid,.", dateFieldClasses.inputFilled, "{color:rgb(var(--lsd-border-primary));opacity:1;}.", dateFieldClasses.error, " .", dateFieldClasses.input, "::-webkit-datetime-edit-year-field,.", dateFieldClasses.error, " .", dateFieldClasses.input, "::-webkit-datetime-edit-month-field,.", dateFieldClasses.error, " .", dateFieldClasses.input, "::-webkit-datetime-edit-day-field{text-decoration:line-through;}@supports not selector(::-webkit-datetime-edit-day-field){.", dateFieldClasses.error, " .", dateFieldClasses.input, "{text-decoration:line-through;}}" + ( true ? "" : 0), true ? "" : 0); -const DatePickerStyles = /* @__PURE__ */ react.css(".", datePickerClasses.root, "{width:fit-content;}.", datePickerClasses.calendar, "{border-top:none!important;}.", datePickerClasses.large, "{.", dateFieldClasses.large, "{width:318px;}}.", datePickerClasses.medium, "{.", dateFieldClasses.medium, "{width:290px;}}.", datePickerClasses.small, "{.", dateFieldClasses.small, "{width:262px;}}" + ( true ? "" : 0), true ? "" : 0); -const DropdownStyles = /* @__PURE__ */ react.css(".", dropdownClasses.root, "{}.", dropdownClasses.root, ":not(.", dropdownClasses.disabled, "):not(\n .", dropdownClasses.error, "\n ){.", dropdownClasses.trigger, "{&:hover,&:focus{.", dropdownClasses.optionLabel, "{text-decoration:underline;}}}}.", dropdownClasses.label, "{display:block;}.", dropdownClasses.buttonContainer, "{display:flex;justify-content:space-between;}.", dropdownClasses.trigger, "{width:100%;display:flex;flex-direction:row;align-items:center;justify-content:space-between;border:none;cursor:pointer;background:none;&:focus{outline:none;}}.", dropdownClasses.optionLabel, "{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.", dropdownClasses.icons, "{display:flex;flex-direction:row;align-items:center;justify-content:center;gap:8px;}.", dropdownClasses.icon, "{display:flex;align-items:center;}.", dropdownClasses.menuIcon, "{}.", dropdownClasses.supportingText, "{margin:6px 14px;}.", dropdownClasses.error, "{.", dropdownClasses.optionLabel, "{text-decoration:line-through;}}.", dropdownClasses.disabled, "{opacity:0.34;cursor:initial;}.", dropdownClasses.large, "{width:208px;&.", dropdownClasses.error, "{width:230px;}.", dropdownClasses.label, "{margin:0 0 6px 18px;}.", dropdownClasses.buttonContainer, "{height:40px;}.", dropdownClasses.trigger, "{padding:10px 0px 10px 18px;}.", dropdownClasses.icons, "{padding:0px 14px;}}.", dropdownClasses.medium, "{width:188px;&.", dropdownClasses.error, "{width:210px;}.", dropdownClasses.label, "{margin:0 0 6px 14px;}.", dropdownClasses.buttonContainer, "{height:32px;}.", dropdownClasses.trigger, "{padding:6px 0px 6px 14px;}.", dropdownClasses.icons, "{padding:0px 12px;}}.", dropdownClasses.small, "{width:164px;&.", dropdownClasses.error, "{width:186px;}.", dropdownClasses.label, "{margin:0 0 6px 12px;}.", dropdownClasses.buttonContainer, "{height:28px;}.", dropdownClasses.trigger, "{padding:6px 0px 6px 12px;}.", dropdownClasses.icons, "{padding:0px 10px;}}.", dropdownClasses.outlined, "{.", dropdownClasses.buttonContainer, "{border:1px solid rgb(var(--lsd-border-primary));}}.", dropdownClasses.underlined, "{.", dropdownClasses.buttonContainer, "{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}}" + ( true ? "" : 0), true ? "" : 0); -const DropdownItemStyles = /* @__PURE__ */ react.css(".", dropdownItemClasses.root, "{width:100%;box-sizing:border-box;display:flex;flex-direction:row;align-items:center;border:1px solid rgb(var(--lsd-border-primary));:not(.", dropdownItemClasses.disabled, "){cursor:pointer;&:hover,&:focus{outline:none;.", dropdownItemClasses.label, "{text-decoration:underline;}}}}.", dropdownItemClasses.label, "{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.", dropdownItemClasses.disabled, "{opacity:0.34;}.", dropdownItemClasses.icon, "{margin-right:18px;flex-shrink:0;}.", dropdownItemClasses.small, "{padding:5px 9px;height:28px;}.", dropdownItemClasses.medium, "{padding:5px 11px;height:32px;}.", dropdownItemClasses.large, "{padding:5px 13px;height:40px;}" + ( true ? "" : 0), true ? "" : 0); -const IconButtonStyles = /* @__PURE__ */ react.css(".", iconButtonClasses.root, "{display:flex;flex-direction:row;align-items:center;justify-content:center;cursor:pointer;background:none;padding:0;border:1px solid rgb(var(--lsd-border-primary));}.", iconButtonClasses.filled, "{background-color:rgb(var(--lsd-icon-primary));svg{--lsd-icon-primary:var(--lsd-icon-secondary);}}.", iconButtonClasses.outlined, "{}.", iconButtonClasses.disabled, "{opacity:0.34;cursor:default;}.", iconButtonClasses.large, "{width:40px;height:40px;}.", iconButtonClasses.medium, "{width:32px;height:32px;}.", iconButtonClasses.small, "{width:28px;height:28px;}" + ( true ? "" : 0), true ? "" : 0); -const IconButtonGroupStyles = /* @__PURE__ */ react.css(".", iconButtonGroupClasses.root, "{display:flex;flex-direction:row;}.", iconButtonGroupClasses.outlined, " .", iconButtonClasses.root, ":not(:last-child){border-right:none;}" + ( true ? "" : 0), true ? "" : 0); -const LsdIconStyles = /* @__PURE__ */ react.css(".", lsdIconClasses.root, "{}.", lsdIconClasses.primary, "{&.", lsdIconClasses.filled, "{&,*{fill:rgb(var(--lsd-icon-primary));}}$.", lsdIconClasses.stroked, "{&,*{fill:rgb(var(--lsd-icon-primary));}}}.", lsdIconClasses.secondary, "{&.", lsdIconClasses.filled, "{&,*{fill:rgb(var(--lsd-icon-secondary));}}$.", lsdIconClasses.stroked, "{&,*{fill:rgb(var(--lsd-icon-secondary));}}}" + ( true ? "" : 0), true ? "" : 0); -const DropdownMenuStyles = /* @__PURE__ */ react.css(".", dropdownMenuClasses.root, "{position:absolute;top:0;left:0;opacity:0;visibility:hidden;margin:0;padding:0;box-sizing:border-box;background:rgb(var(--lsd-surface-primary));overflow:auto;border:1px solid rgb(var(--lsd-border-primary));border-top:0;}.", dropdownMenuClasses.root, ">div{border:0;&:not(:last-child){border-bottom:1px solid rgb(var(--lsd-border-primary));}}.", dropdownMenuClasses.open, "{opacity:1;visibility:visible;}.", dropdownMenuClasses.large, "{max-height:220px;}.", dropdownMenuClasses.medium, "{max-height:176px;}.", dropdownMenuClasses.small, "{max-height:154px;}" + ( true ? "" : 0), true ? "" : 0); -const QuoteStyles = /* @__PURE__ */ react.css(".", quoteClasses.root, "{color:rgb(var(--lsd-text-primary));white-space:pre-wrap;}.", quoteClasses.indentedInline, "{border-left:1px solid rgb(var(--lsd-border-primary));padding:4px 8px 4px 28px;}.", quoteClasses.parentheses, "{padding:0px;text-align:center;}.", quoteClasses.parentheses, "::before{content:'***';}.", quoteClasses.parentheses, "::after{content:'***';}" + ( true ? "" : 0), true ? "" : 0); -const RadioButtonStyles = /* @__PURE__ */ react.css(".", radioButtonClasses.root, "{position:relative;display:flex;flex-direction:row;align-items:center;}.", radioButtonClasses.input, "{opacity:0;position:absolute;left:0;top:0;padding:0;margin:0;width:100%;height:100%;}.", radioButtonClasses.root, ":not(.", radioButtonClasses.disabled, "){&:hover{text-decoration:underline;}.", radioButtonClasses.input, "{cursor:pointer;}}.", radioButtonClasses.disabled, "{opacity:0.34;}.", radioButtonClasses.label, "{margin-left:18px;}.", radioButtonClasses.large, "{.", radioButtonClasses.label, "{margin-left:18px;}}.", radioButtonClasses.medium, "{.", radioButtonClasses.label, "{margin-left:14px;}}.", radioButtonClasses.small, "{.", radioButtonClasses.label, "{margin-left:12px;}}" + ( true ? "" : 0), true ? "" : 0); -const RadioButtonGroupStyles = /* @__PURE__ */ react.css(".", radioButtonGroupClasses.root, "{display:flex;flex-direction:column;gap:6px;width:fit-content;}.", radioButtonGroupClasses.label, "{margin-bottom:6px;}" + ( true ? "" : 0), true ? "" : 0); -const TabItemStyles = /* @__PURE__ */ react.css(".", tabItemClasses.root, "{background:rgb(var(--lsd-surface-primary));border:1px solid transparent;cursor:pointer;display:flex;flex-direction:row;align-items:center;justify-content:center;box-sizing:border-box;&:hover{text-decoration:underline;}&:not(", tabItemClasses.selected, "){border-bottom:1px solid rgb(var(--lsd-border-primary));}}.", tabItemClasses.text, "{overflow:hidden;white-space:nowrap;text-overflow:ellipsis;}.", tabItemClasses.icon, "{margin-left:14px;}.", tabItemClasses.selected, "{border:1px solid rgb(var(--lsd-border-primary));&:hover{text-decoration:none;}}.", tabItemClasses.withIcon, "{justify-content:space-between;}.", tabItemClasses.disabled, "{cursor:default;opacity:0.34;&:hover{text-decoration:none;}}.", tabItemClasses.small, "{padding:6px 12px;.", tabItemClasses.icon, "{margin-left:10px;}}.", tabItemClasses.medium, "{padding:6px 14px;.", tabItemClasses.icon, "{margin-left:12px;}}.", tabItemClasses.large, "{padding:10px 18px;.", tabItemClasses.icon, "{margin-left:14px;}}" + ( true ? "" : 0), true ? "" : 0); -const TableStyles = /* @__PURE__ */ react.css(".", tableClasses.root, "{box-sizing:border-box;display:flex;flex-direction:column;}.", tableClasses.root, ">.", tableHeaderClasses.root, "{margin-bottom:-1px;}.", tableClasses.large, "{}.", tableClasses.medium, "{}.", tableClasses.small, "{}" + ( true ? "" : 0), true ? "" : 0); -const TableBodyStyles = /* @__PURE__ */ react.css(".", tableBodyClasses.root, "{table{border-collapse:collapse;text-align:center;table-layout:fixed;width:100%;height:auto;}table tr:first-of-type td label:has(input[type='radio']){display:none;}}.", tableBodyClasses.toolbar, "{box-sizing:border-box;padding:10px;border:1px solid rgb(var(--lsd-border-primary));border-bottom:none;display:flex;justify-content:space-between;}" + ( true ? "" : 0), true ? "" : 0); -const TableHeaderStyles = /* @__PURE__ */ react.css(".", tableHeaderClasses.root, "{box-sizing:border-box;border:1px solid rgb(var(--lsd-border-primary));}" + ( true ? "" : 0), true ? "" : 0); -const TableItemStyles = /* @__PURE__ */ react.css(".", tableItemClasses.root, "{border:1px solid rgb(var(--lsd-border-primary));}.", tableItemClasses.root, ":has(> label){width:40px;input{position:relative;width:14px;height:14px;margin:auto;}span{margin-left:14px!important;}}.", tableItemClasses.large, "{padding:10px;}.", tableItemClasses.medium, "{padding:6px 8px;}.", tableItemClasses.small, "{padding:6px;}" + ( true ? "" : 0), true ? "" : 0); -const TableRowStyles = /* @__PURE__ */ react.css(".", tableRowClasses.root, "{align-items:center;}" + ( true ? "" : 0), true ? "" : 0); -const TabsStyles = /* @__PURE__ */ react.css(".", tabsClasses.root, "{display:flex;flex-direction:row;overflow:auto;width:fit-content;max-width:100%;border-bottom:1px solid rgb(var(--lsd-border-primary));&>*{flex-shrink:0;}.", tabItemClasses.root, "{border-bottom:none;}}.", tabsClasses.fullWidth, "{width:100%;justify-content:stretch;&>*{width:100%;flex:1 0;}}.", tabsClasses.root, "{-ms-overflow-style:none;scrollbar-width:none;&::-webkit-scrollbar{display:none;}}.", tabsClasses.leftScrollControl, "{left:0;}.", tabsClasses.rightScrollControl, "{right:0;}.", tabsClasses.rightScrollControl, ",.", tabsClasses.leftScrollControl, "{top:0;flex:0 1;position:sticky;}" + ( true ? "" : 0), true ? "" : 0); -const TagStyles = /* @__PURE__ */ react.css(".", tagClasses.root, "{width:fit-content;display:flex;flex-direction:row;align-items:center;justify-content:center;box-sizing:border-box;border:1px solid rgb(var(--lsd-icon-primary));&:hover,&:focus{text-decoration:underline;cursor:pointer;}}.", tagClasses.large, "{padding:3px 11px;gap:12px;height:28px;}.", tagClasses.small, "{padding:3px 7px;gap:8px;height:24px;}.", tagClasses.filled, "{background-color:rgb(var(--lsd-icon-primary));.", tagClasses.label, "{color:rgb(var(--lsd-text-secondary));}svg{--lsd-icon-primary:var(--lsd-icon-secondary);}}.", tagClasses.outlined, "{color:rgb(var(--lsd-text-primary));}.", tagClasses.disabled, "{opacity:0.3;cursor:initial;pointer-events:none;}" + ( true ? "" : 0), true ? "" : 0); -const TextFieldStyles = /* @__PURE__ */ react.css(".", textFieldClasses.root, "{box-sizing:border-box;display:flex;flex-direction:column;}.", textFieldClasses.inputContainer, "{display:flex;align-items:center;justify-content:space-between;}.", textFieldClasses.disabled, "{opacity:0.34;}.", textFieldClasses.input, "{border:none;outline:none;font-size:14px;color:rgb(var(--lsd-text-primary));background:none;width:100%;}.", textFieldClasses.input, ":hover{outline:none;}.", textFieldClasses.input, "::placeholder{color:rgb(var(--lsd-text-primary));opacity:0.3;}.", textFieldClasses.error, " .", textFieldClasses.input, "{text-decoration:line-through;}.", textFieldClasses.supportingText, "{width:fit-content;}.", textFieldClasses.large, "{width:208px;&>*{padding:10px 14px 10px 18px;}}.", textFieldClasses.medium, "{width:188px;&>*{padding:6px 12px 6px 14px;}}.", textFieldClasses.small, "{width:164px;&>*{padding:6px 10px 6px 12px;}}.", textFieldClasses.label, "{padding-top:0;padding-bottom:6px;}.", textFieldClasses.supportingText, "{padding-bottom:0;padding-top:6px;}.", textFieldClasses.outlined, " .", textFieldClasses.inputContainer, "{border:1px solid rgb(var(--lsd-border-primary));}.", textFieldClasses.underlined, " .", textFieldClasses.inputContainer, "{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}.", textFieldClasses.clearButton, "{padding:0;width:auto;height:auto;margin:0;border:0;}.", textFieldClasses.icon, "{}" + ( true ? "" : 0), true ? "" : 0); -const selectors = (variant) => [...THEME_TYPOGRAPHY_ELEMENTS[variant] ?? [], `.${typographyClasses[variant]}`].join(", "); -const TypographyStyles = /* @__PURE__ */ react.css("body *{font-family:var(--lsd-typography-generic-font-family);}.", typographyClasses.root, "{color:rgb(var(--lsd-text-primary));}.", typographyClasses.sansSerif, "{&,*{font-family:sans-serif;}}.", typographyClasses.serif, "{&,*{font-family:serif;}}.", typographyClasses.monospace, "{&,*{font-family:monospace;}}", THEME_TYPOGRAPHY_VARIANTS.map((variant) => /* @__PURE__ */ react.css(selectors(variant), "{color:rgb(var(--lsd-text-primary));font-weight:var(--lsd-", variant, "-fontWeight);font-size:var(--lsd-", variant, "-fontSize);line-height:var(--lsd-", variant, "-lineHeight);}" + ( true ? "" : 0), true ? "" : 0)), " .", typographyClasses.primary, "{color:rgb(var(--lsd-text-primary));}.", typographyClasses.secondary, "{color:rgb(var(--lsd-text-secondary));}input{color:rgb(var(--lsd-text-primary));font-size:var(--lsd-body1-fontSize);font-weight:var(--lsd-body1-fontWeight);}h1,h2,h3,h4,h5,h6,p,span{margin:0;}" + ( true ? "" : 0), true ? "" : 0); -const NumberInputStyles = /* @__PURE__ */ react.css(".", numberInputClasses.root, "{width:auto;box-sizing:border-box;}.", numberInputClasses.mainContainer, ":hover{text-decoration:underline;}.", numberInputClasses.error, "{.", numberInputClasses.mainContainer, "{text-decoration:line-through;}}.", numberInputClasses.label, "{display:block;}.", numberInputClasses.plusMinusIcons, "{display:flex;flex-shrink:0;}.", numberInputClasses.inputContainer, "{box-sizing:border-box;border:1px solid rgb(var(--lsd-border-primary));border-left:0px;border-right:0px;}.", numberInputClasses.errorIcon, "{cursor:pointer;display:flex;align-items:center;padding:10px 8px;}.", numberInputClasses.inputContainer, "{display:flex;align-items:center;justify-content:space-between;}.", numberInputClasses.disabled, "{opacity:0.34;}.", numberInputClasses.mainContainer, "{display:flex;align-items:center;}.", numberInputClasses.input, "{border:none;outline:none;font-size:14px;color:rgb(var(--lsd-text-primary));background:none;text-align:center;padding:0 4px;}.", numberInputClasses.input, "::-webkit-inner-spin-button{display:none;-webkit-appearance:none;}.", numberInputClasses.input, ":hover{outline:none;}.", numberInputClasses.supportingText, "{position:absolute;}.", numberInputClasses.large, "{.", numberInputClasses.label, "{margin:0 0 6px 18px;}.", numberInputClasses.inputContainer, "{height:40px;}.", numberInputClasses.input, "{width:62px;}.", numberInputClasses.plusMinusIcons, "{height:40px;width:40px;}.", numberInputClasses.supportingText, "{margin:6px 18px 0 18px;}}.", numberInputClasses.medium, "{.", numberInputClasses.label, "{margin:0 0 6px 14px;}.", numberInputClasses.inputContainer, "{height:32px;}.", numberInputClasses.input, "{width:58px;}.", numberInputClasses.plusMinusIcons, "{height:32px;width:32px;}.", numberInputClasses.supportingText, "{margin:6px 14px 0 14px;}}.", numberInputClasses.small, "{.", numberInputClasses.label, "{margin:0 0 6px 12px;}.", numberInputClasses.inputContainer, "{height:28px;}.", numberInputClasses.input, "{width:50px;}.", numberInputClasses.plusMinusIcons, "{height:28px;width:28px;}.", numberInputClasses.supportingText, "{margin:6px 12px 0 12px;}}" + ( true ? "" : 0), true ? "" : 0); -const ModalStyles = /* @__PURE__ */ react.css(".", modalClasses.root, "{box-sizing:border-box;display:flex;flex-direction:column;position:fixed;top:0;left:0;right:0;bottom:0;background-color:rgba(0, 0, 0, 0.5);display:flex;justify-content:center;align-items:center;z-index:9999;}.", modalClasses.modalContainer, "{position:relative;background:rgb(var(--lsd-surface-primary));padding:20px;max-width:90%;box-sizing:border-box;border:1px solid rgb(var(--lsd-border-primary));}.", modalClasses.header, "{display:flex;justify-content:space-between;align-items:center;}.", modalClasses.title, "{}.", modalClasses.subtitle, "{}.", modalClasses.closeIcon, "{position:absolute;top:8px;right:8px;cursor:pointer;}.", modalClasses.titleAndSubtitleContainer, "{display:flex;flex-direction:column;}.", modalClasses.large, "{.", modalClasses.modalContainer, "{min-width:960px;}}.", modalClasses.medium, "{.", modalClasses.modalContainer, "{min-width:768px;}}.", modalClasses.small, "{.", modalClasses.modalContainer, "{min-width:614px;}}.", modalClasses.xsmall, "{.", modalClasses.modalContainer, "{min-width:490px;}}" + ( true ? "" : 0), true ? "" : 0); -const ModalFooterStyles = /* @__PURE__ */ react.css(".", modalFooterClasses.root, "{display:flex;}" + ( true ? "" : 0), true ? "" : 0); -const ModalBodyStyles = /* @__PURE__ */ react.css(".", modalBodyClasses.root, "{margin:18px 0;}" + ( true ? "" : 0), true ? "" : 0); -const toastClasses = { - root: `lsd-toast`, - inlineContainer: "lsd-toast__inline-container", - columnContainer: "lsd-toast__column-container", - large: "lsd-toast--large", - medium: "lsd-toast--medium", - small: "lsd-toast--small", - icon: "lsd-toast__icon", - textContainer: "lsd-toast__text-container", - columnIconContainer: "lsd-toast__column-icon-container", - inlineIconContainer: "lsd-toast__inline-icon-container", - title: "lsd-toast__title", - information: "lsd-toast__information", - inlineButtonContainer: "lsd-toast__inline-button-container", - columnButtonContainer: "lsd-toast__column-button-container", - buttonContainer: "lsd-toast__button-container", - closeButton: "lsd-toast__close-button" -}; -const ToastStyles = /* @__PURE__ */ react.css(".", toastClasses.root, "{box-sizing:border-box;display:inline-flex;align-items:center;background:rgb(var(--lsd-surface-primary));border:1px solid rgb(var(--lsd-border-primary));padding:8px;height:fit-content;}.", toastClasses.inlineButtonContainer, "{flex-shrink:0;}.", toastClasses.columnButtonContainer, "{margin-top:18px;margin-bottom:6px;}.", toastClasses.inlineContainer, "{display:flex;align-items:center;justify-content:space-between;flex-grow:1;}.", toastClasses.columnContainer, "{display:flex;flex-direction:column;justify-content:space-between;}.", toastClasses.textContainer, "{display:flex;flex-direction:column;color:rgb(var(--lsd-text-secondary));padding-left:12px;}.", toastClasses.title, "{position:relative;}.", toastClasses.information, "{margin-top:4px;}.", toastClasses.buttonContainer, "{min-height:28px;min-width:60px;width:fit-content;padding:0px 12px;}.", toastClasses.closeButton, "{margin-bottom:auto;flex-shrink:0;height:28px;width:28px;margin-left:auto;}.", toastClasses.columnIconContainer, "{display:flex;justify-content:center;margin-bottom:auto;position:relative;top:4px;padding-left:4px;}.", toastClasses.inlineIconContainer, "{display:flex;align-items:center;justify-content:center;padding-left:4px;}.", toastClasses.icon, "{position:relative;}.", toastClasses.large, "{width:364px;}.", toastClasses.medium, "{width:336px;}.", toastClasses.small, "{width:296px;.", toastClasses.icon, "{top:0px;}}" + ( true ? "" : 0), true ? "" : 0); -const toastProviderClasses = { - toastContainer: `lsd-toast-provider__toast-container`, - topLeft: `lsd-toast-provider__toast--top-left`, - topCenter: `lsd-toast-provider__toast--top-center`, - topRight: `lsd-toast-provider__toast--top-right`, - bottomLeft: `lsd-toast-provider__toast--bottom-left`, - bottomCenter: `lsd-toast-provider__toast--bottom-center`, - bottomRight: `lsd-toast-provider__toast--bottom-right` -}; -const ToastProviderStyles = /* @__PURE__ */ react.css(".", toastProviderClasses.toastContainer, "{position:fixed;transition:all 230ms cubic-bezier(0.21, 1.02, 0.73, 1);z-index:9999;}.", toastProviderClasses.topLeft, ",.", toastProviderClasses.topCenter, ",.", toastProviderClasses.topRight, "{top:0;}.", toastProviderClasses.bottomLeft, ",.", toastProviderClasses.bottomCenter, ",.", toastProviderClasses.bottomRight, "{bottom:0;}.", toastProviderClasses.topCenter, ",.", toastProviderClasses.bottomCenter, "{left:50%;}.", toastProviderClasses.topRight, ",.", toastProviderClasses.bottomRight, "{right:0;}" + ( true ? "" : 0), true ? "" : 0); -const ButtonGroupStyles = /* @__PURE__ */ react.css(".", buttonGroupClasses.root, "{display:flex;flex-direction:row;>*:not(:last-child){&.", buttonClasses.outlined, ",.", buttonClasses.outlined, "{border-right:none;}}}" + ( true ? "" : 0), true ? "" : 0); -const DateRangePickerStyles = /* @__PURE__ */ react.css(".", dateRangePickerClasses.root, "{box-sizing:border-box;.", dateFieldClasses.outlined, "{border:none;}.", dateFieldClasses.icon, "{padding:8px;}}.", dateRangePickerClasses.label, "{display:block;}.", dateRangePickerClasses.inputContainer, "{box-sizing:border-box;display:flex;align-items:center;border:1px solid transparent;}.", dateRangePickerClasses.calendar, "{border-top:none!important;.", tooltipBaseClasses.arrowTip, "{transition:left 0.2s ease-in-out;}}.", dateRangePickerClasses.openCalendar, "{.", dateRangePickerClasses.inputContainer, "{border-bottom:1px solid rgb(var(--lsd-border-primary));}}.", dateRangePickerClasses.icon, "{cursor:pointer;display:flex;align-items:center;justify-content:center;flex-grow:1;padding:0 10px;}.", dateRangePickerClasses.disabled, "{opacity:0.3;}.", dateRangePickerClasses.supportingText, "{position:absolute;}.", dateRangePickerClasses.large, "{width:318px;.", dateFieldClasses.large, "{width:156px;}.", dateFieldClasses.input, "{padding-right:0;}.", dateFieldClasses.icon, "{padding:11px 12px;}.", dateRangePickerClasses.label, "{margin:0 0 6px 18px;}.", dateRangePickerClasses.inputContainer, "{height:40px;}.", dateRangePickerClasses.supportingText, "{margin:6px 18px 0 18px;}}.", dateRangePickerClasses.medium, "{width:290px;.", dateFieldClasses.medium, "{width:142px;}.", dateFieldClasses.input, "{padding-right:0;}.", dateFieldClasses.icon, "{padding:7px 8px;}.", dateRangePickerClasses.label, "{margin:0 0 6px 14px;}.", dateRangePickerClasses.inputContainer, "{height:32px;}.", dateRangePickerClasses.supportingText, "{margin:6px 14px 0 14px;}}.", dateRangePickerClasses.small, "{width:262px;.", dateFieldClasses.small, "{width:128px;}.", dateFieldClasses.input, "{padding-right:0;}.", dateFieldClasses.icon, "{padding:5px 7px;}.", dateRangePickerClasses.label, "{margin:0 0 6px 12px;}.", dateRangePickerClasses.inputContainer, "{height:28px;}.", dateRangePickerClasses.supportingText, "{margin:6px 12px 0 12px;}}.", dateRangePickerClasses.separator, "{margin-left:3px;width:1px;height:100%;}.", dateRangePickerClasses.separator, "{border-left:1px solid transparent;}.", dateRangePickerClasses.outlined, "{border:1px solid rgb(var(--lsd-border-primary));.", dateRangePickerClasses.separator, "{border-left:1px solid rgb(var(--lsd-border-primary));}}" + ( true ? "" : 0), true ? "" : 0); -const TooltipBaseStyles = /* @__PURE__ */ react.css(".", tooltipBaseClasses.root, "{border:1px solid rgb(var(--lsd-border-primary));position:relative;}.", tooltipBaseClasses.arrowTip, "{border:1px solid rgb(var(--lsd-border-primary));position:absolute;background:rgb(var(--lsd-surface-primary));}.", tooltipBaseClasses.content, "{background:rgb(var(--lsd-surface-primary));width:100%;height:100%;position:relative;z-index:1;}" + ( true ? "" : 0), true ? "" : 0); -const componentStyles = [ButtonStyles, IconButtonStyles, IconButtonGroupStyles, TypographyStyles, LsdIconStyles, TabItemStyles, TabsStyles, DropdownMenuStyles, DropdownStyles, DropdownItemStyles, BreadcrumbStyles, BreadcrumbItemStyles, CardStyles, CardHeaderStyles, CardBodyStyles, TagStyles, TextFieldStyles, CheckboxStyles, AutocompleteStyles, QuoteStyles, CollapseStyles, CollapseHeaderStyles, CheckboxGroupStyles, BadgeStyles, RadioButtonStyles, RadioButtonGroupStyles, TableStyles, TableHeaderStyles, TableBodyStyles, TableItemStyles, TableRowStyles, NumberInputStyles, ModalStyles, ModalFooterStyles, ModalBodyStyles, DatePickerStyles, DateFieldStyles, CalendarStyles, ToastStyles, ToastProviderStyles, ButtonGroupStyles, DateRangePickerStyles, TooltipBaseStyles]; -const CSSBaseline = ({ - theme = defaultThemes.light -}) => { - const styles = React.useMemo(() => componentStyles.map((style) => typeof style === "function" ? style(theme) : style).map((style) => /* @__PURE__ */ jsx(react.Global, { styles: style }, style.name)), [theme]); - return /* @__PURE__ */ jsx(Fragment, { children: styles }); -}; -const ResizeObserverProvider = ({ - children -}) => { - const ro = React.useRef(); - const elements = React.useRef({}); - const [rects, setRects] = React.useState({}); - const [ready, setReady] = React.useState(false); - const onChange = (id) => { - const el = elements.current[id]; - if (!el || !el.current) - return; - settleSync(() => { - setRects((val) => ({ - ...val, - [id]: el.current.getBoundingClientRect() - })); - }); - }; - React.useEffect(() => { - if (typeof window === "undefined" || typeof ResizeObserver === "undefined") - return; - ro.current = new ResizeObserver((entries) => { - settleSync(() => { - const arr = Object.entries(elements.current); - entries.map((entry) => arr.find(([id, ref]) => ref.current === entry.target)).forEach((map) => { - if (map && map.length === 2) { - const [id] = map; - onChange(id); - } - }); - }); - }); - setReady(true); - return () => { - var _a; - (_a = ro.current) == null ? void 0 : _a.disconnect(); - }; - }, []); - const observe = (id, elementRef) => { - if (!ro.current) - return; - elements.current[id] = elementRef; - onChange(id); - elementRef.current instanceof Element && ro.current.observe(elementRef.current); - }; - const unobserve = (id) => { - if (!ro.current) - return; - const el = elements.current[id]; - if (!el) - return; - el.current instanceof Element && ro.current.unobserve(el.current); - delete elements.current[id]; - setRects((val) => omit_1(val, id)); - }; - return /* @__PURE__ */ jsx(ResizeObserverContext.Provider, { value: { - observe, - unobserve, - rect: rects, - ready - }, children }); -}; -const ThemeProvider = ({ - theme, - children, - injectCssVars = true -}) => { - return /* @__PURE__ */ jsx(ResizeObserverProvider, { children: /* @__PURE__ */ jsx(PortalProvider, { children: /* @__PURE__ */ jsxs(ThemeContext.Provider, { value: { - theme - }, children: [ - /* @__PURE__ */ jsx(CSSBaseline, { theme }), - injectCssVars && /* @__PURE__ */ jsx(react.Global, { styles: theme.globalStyles }), - /* @__PURE__ */ jsx(react.ThemeProvider, { theme, children }) - ] }) }) }); -}; -const ThemeContext = React.createContext({ - theme: null -}); -const useTheme = () => { - const theme = React.useContext(ThemeContext).theme; - return theme ?? defaultThemes.light; -}; -const withTheme = (style) => (theme) => style(theme); -const Toast = ({ - title, - information, - onClose, - size = "large", - toastRef, - children, - icon, - actions, - ...props -}) => { - const commonProps = useCommonProps(props); - const isInline = !information; - const Icon = typeof icon === "undefined" ? ErrorIcon : icon; - return /* @__PURE__ */ jsxs("div", { ref: toastRef, ...omitCommonProps(props), className: clsx(props.className, commonProps.className, toastClasses.root, toastClasses[size]), children: [ - /* @__PURE__ */ jsx("div", { className: clsx(isInline ? toastClasses.inlineIconContainer : toastClasses.columnIconContainer), children: Icon && /* @__PURE__ */ jsx(Icon, { color: "primary", className: toastClasses.icon }) }), - /* @__PURE__ */ jsxs("div", { className: isInline ? toastClasses.inlineContainer : toastClasses.columnContainer, children: [ - /* @__PURE__ */ jsxs("div", { className: clsx(toastClasses.textContainer), children: [ - !!title && /* @__PURE__ */ jsx(Typography, { className: toastClasses.title, component: "div", variant: size === "small" ? "label2" : "label1", children: title }), - !!information && /* @__PURE__ */ jsx(Typography, { className: toastClasses.information, component: "div", variant: size === "small" ? "label2" : "label1", children: information }) - ] }), - !!actions && /* @__PURE__ */ jsx("div", { className: clsx(toastClasses.buttonContainer, isInline ? toastClasses.inlineButtonContainer : toastClasses.columnButtonContainer), children: actions }) - ] }), - /* @__PURE__ */ jsx(IconButton, { onClick: onClose, className: toastClasses.closeButton, size: "medium", children: /* @__PURE__ */ jsx(CloseIcon, { color: "primary" }) }) - ] }); -}; -Toast.classes = toastClasses; -var x = (e) => typeof e == "function", p = (e, t) => x(e) ? e(t) : e; -var E = (() => { - let e = 0; - return () => (++e).toString(); -})(); -var I = 20; -var m = /* @__PURE__ */ new Map(), v = 1e3, b = (e) => { - if (m.has(e)) - return; - let t = setTimeout(() => { - m.delete(e), T({ type: 4, toastId: e }); - }, v); - m.set(e, t); -}, M = (e) => { - let t = m.get(e); - t && clearTimeout(t); -}, g = (e, t) => { - switch (t.type) { - case 0: - return { ...e, toasts: [t.toast, ...e.toasts].slice(0, I) }; - case 1: - return t.toast.id && M(t.toast.id), { ...e, toasts: e.toasts.map((r2) => r2.id === t.toast.id ? { ...r2, ...t.toast } : r2) }; - case 2: - let { toast: o2 } = t; - return e.toasts.find((r2) => r2.id === o2.id) ? g(e, { type: 1, toast: o2 }) : g(e, { type: 0, toast: o2 }); - case 3: - let { toastId: n } = t; - return n ? b(n) : e.toasts.forEach((r2) => { - b(r2.id); - }), { ...e, toasts: e.toasts.map((r2) => r2.id === n || n === void 0 ? { ...r2, visible: false } : r2) }; - case 4: - return t.toastId === void 0 ? { ...e, toasts: [] } : { ...e, toasts: e.toasts.filter((r2) => r2.id !== t.toastId) }; - case 5: - return { ...e, pausedAt: t.time }; - case 6: - let s2 = t.time - (e.pausedAt || 0); - return { ...e, pausedAt: void 0, toasts: e.toasts.map((r2) => ({ ...r2, pauseDuration: r2.pauseDuration + s2 })) }; - } -}, f = [], S = { toasts: [], pausedAt: void 0 }, T = (e) => { - S = g(S, e), f.forEach((t) => { - t(S); - }); -}, U = { blank: 4e3, error: 4e3, success: 2e3, loading: 1 / 0, custom: 4e3 }, O = (e = {}) => { - let [t, o2] = React.useState(S); - React.useEffect(() => (f.push(o2), () => { - let s2 = f.indexOf(o2); - s2 > -1 && f.splice(s2, 1); - }), [t]); - let n = t.toasts.map((s2) => { - var r2, c2; - return { ...e, ...e[s2.type], ...s2, duration: s2.duration || ((r2 = e[s2.type]) == null ? void 0 : r2.duration) || (e == null ? void 0 : e.duration) || U[s2.type], style: { ...e.style, ...(c2 = e[s2.type]) == null ? void 0 : c2.style, ...s2.style } }; - }); - return { ...t, toasts: n }; -}; -var w = (e, t = "blank", o2) => ({ createdAt: Date.now(), visible: true, type: t, ariaProps: { role: "status", "aria-live": "polite" }, message: e, pauseDuration: 0, ...o2, id: (o2 == null ? void 0 : o2.id) || E() }), l = (e) => (t, o2) => { - let n = w(t, e, o2); - return T({ type: 2, toast: n }), n.id; -}, a = (e, t) => l("blank")(e, t); -a.error = l("error"); -a.success = l("success"); -a.loading = l("loading"); -a.custom = l("custom"); -a.dismiss = (e) => { - T({ type: 3, toastId: e }); -}; -a.remove = (e) => T({ type: 4, toastId: e }); -a.promise = (e, t, o2) => { - let n = a.loading(t.loading, { ...o2, ...o2 == null ? void 0 : o2.loading }); - return e.then((s2) => (a.success(p(t.success, s2), { id: n, ...o2, ...o2 == null ? void 0 : o2.success }), s2)).catch((s2) => { - a.error(p(t.error, s2), { id: n, ...o2, ...o2 == null ? void 0 : o2.error }); - }), e; -}; -var k = (e, t) => { - T({ type: 1, toast: { id: e, height: t } }); -}, C = () => { - T({ type: 5, time: Date.now() }); -}, H = (e) => { - let { toasts: t, pausedAt: o2 } = O(e); - React.useEffect(() => { - if (o2) - return; - let r2 = Date.now(), c2 = t.map((i2) => { - if (i2.duration === 1 / 0) - return; - let d2 = (i2.duration || 0) + i2.pauseDuration - (r2 - i2.createdAt); - if (d2 < 0) { - i2.visible && a.dismiss(i2.id); - return; - } - return setTimeout(() => a.dismiss(i2.id), d2); - }); - return () => { - c2.forEach((i2) => i2 && clearTimeout(i2)); - }; - }, [t, o2]); - let n = React.useCallback(() => { - o2 && T({ type: 6, time: Date.now() }); - }, [o2]), s2 = React.useCallback((r2, c2) => { - let { reverseOrder: i2 = false, gutter: d2 = 8, defaultPosition: P2 } = c2 || {}, A = t.filter((u2) => (u2.position || P2) === (r2.position || P2) && u2.height), _ = A.findIndex((u2) => u2.id === r2.id), D2 = A.filter((u2, y2) => y2 < _ && u2.visible).length; - return A.filter((u2) => u2.visible).slice(...i2 ? [D2 + 1] : [0, D2]).reduce((u2, y2) => u2 + (y2.height || 0) + d2, 0); - }, [t]); - return { toasts: t, handlers: { updateHeight: k, startPause: C, endPause: n, calculateOffset: s2 } }; -}; -const getPositionStyle = (position2, offset) => { - if (!position2) - return { - positionClassName: "", - transform: `translateY(${offset}px)` - }; - let positionClassName = ""; - const isCenter = position2.includes("center"); - const isBottom = position2.includes("bottom"); - const transform = `translateY(${isBottom ? -offset : offset}px) translateX(${isCenter ? "-50%" : "0"})`; - if (position2 === "top-left") { - positionClassName = toastProviderClasses.topLeft; - } else if (position2 === "top-center") { - positionClassName = toastProviderClasses.topCenter; - } else if (position2 === "top-right") { - positionClassName = toastProviderClasses.topRight; - } else if (position2 === "bottom-left") { - positionClassName = toastProviderClasses.bottomLeft; - } else if (position2 === "bottom-center") { - positionClassName = toastProviderClasses.bottomCenter; - } else if (position2 === "bottom-right") { - positionClassName = toastProviderClasses.bottomRight; - } - return { - positionClassName, - transform - }; -}; -const ToastContext = React.createContext(null); -const ToastContainer = ({ - toastsPropsMap, - className, - ...containerProps -}) => { - const { - toasts, - handlers - } = H(); - const { - startPause, - endPause, - calculateOffset, - updateHeight - } = handlers; - return /* @__PURE__ */ jsx(Portal, { id: "toast", children: toasts.map((toast) => { - const propsMapValue = toastsPropsMap.get(toast.id); - if (!propsMapValue) { - console.warn("Could not find toast with id", toast.id); - return null; - } - const { - position: position2, - duration, - ...customProps - } = propsMapValue; - const offset = calculateOffset(toast, { - reverseOrder: false, - gutter: 8, - defaultPosition: position2 - }); - const ref = (el) => { - if (el && typeof toast.height !== "number") { - const height = el.getBoundingClientRect().height; - updateHeight(toast.id, height); - } - }; - const { - transform: positionTransform, - positionClassName - } = getPositionStyle(position2, offset); - return /* @__PURE__ */ jsx("div", { onMouseEnter: startPause, onMouseLeave: endPause, ...containerProps, className: clsx(toastProviderClasses.toastContainer, positionClassName, className), style: { - transform: positionTransform, - ...containerProps.style - }, children: /* @__PURE__ */ jsx(Toast, { className: clsx(customProps.className), toastRef: ref, ...customProps, style: { - opacity: toast.visible ? 1 : 0, - ...customProps.style - }, onClose: () => { - var _a; - a.dismiss(toast.id); - (_a = customProps.onClose) == null ? void 0 : _a.call(customProps); - } }, toast.id) }, `container-${toast.id}`); - }) }); -}; -function useToast() { - const context = React.useContext(ToastContext); - if (!context) { - throw new Error("useToast must be used within a ToastProvider"); - } - return context; -} -const ToastProvider = ({ - providerToastOptions, - children, - ...toastsContainerProps -}) => { - const [toastsPropsMap, setToastsPropsMap] = React.useState(/* @__PURE__ */ new Map()); - const showToast = (content, showToastOptions) => { - const options = { - ...providerToastOptions, - ...showToastOptions - }; - const toastId = a("", { - duration: options == null ? void 0 : options.duration - }); - if (content) { - setToastsPropsMap((prev2) => { - const newMap = new Map(prev2); - newMap.set(toastId, { - ...content, - ...options - }); - return newMap; - }); - } - }; - return /* @__PURE__ */ jsxs(ToastContext.Provider, { value: showToast, children: [ - children, - /* @__PURE__ */ jsx(ToastContainer, { toastsPropsMap, ...toastsContainerProps }) - ] }); -}; -exports.AddIcon = AddIcon; -exports.ArrowForwardIcon = ArrowForwardIcon; -exports.Autocomplete = Autocomplete; -exports.Badge = Badge; -exports.Breadcrumb = Breadcrumb; -exports.BreadcrumbItem = BreadcrumbItem; -exports.Button = Button; -exports.ButtonGroup = ButtonGroup; -exports.CALENDAR_MAX_YEAR = CALENDAR_MAX_YEAR; -exports.CALENDAR_MIN_YEAR = CALENDAR_MIN_YEAR; -exports.Calendar = Calendar; -exports.CalendarIcon = CalendarIcon; -exports.Card = Card; -exports.CardBody = CardBody; -exports.CardHeader = CardHeader; -exports.CheckIcon = CheckIcon; -exports.Checkbox = Checkbox; -exports.CheckboxGroup = CheckboxGroup; -exports.CheckboxIcon = CheckboxIcon; -exports.CheckboxOutlineBlankIcon = CheckboxOutlineBlankIcon; -exports.ChevronDownIcon = ChevronDownIcon; -exports.ChevronLeftIcon = ChevronLeftIcon; -exports.ChevronRightIcon = ChevronRightIcon; -exports.ChevronUpIcon = ChevronUpIcon; -exports.CloseIcon = CloseIcon; -exports.Collapse = Collapse; -exports.CollapseHeader = CollapseHeader; -exports.DateField = DateField; -exports.DatePicker = DatePicker; -exports.DateRangePicker = DateRangePicker; -exports.Dropdown = Dropdown; -exports.DropdownItem = DropdownItem; -exports.DropdownMenu = DropdownMenu; -exports.ErrorIcon = ErrorIcon; -exports.FolderIcon = FolderIcon; -exports.IconButton = IconButton; -exports.IconButtonGroup = IconButtonGroup; -exports.KeyboardReturnIcon = KeyboardReturnIcon; -exports.LSD_NAMESPACE = LSD_NAMESPACE; -exports.LsdIcon = LsdIcon; -exports.MenuIcon = MenuIcon; -exports.Modal = Modal; -exports.ModalBody = ModalBody; -exports.ModalFooter = ModalFooter; -exports.MoreIcon = MoreIcon; -exports.NumberInput = NumberInput; -exports.PickIcon = PickIcon; -exports.Portal = Portal; -exports.PortalContext = PortalContext; -exports.PortalProvider = PortalProvider; -exports.Quote = Quote; -exports.RadioButton = RadioButton; -exports.RadioButtonCheckedIcon = RadioButtonCheckedIcon; -exports.RadioButtonGroup = RadioButtonGroup; -exports.RadioButtonIcon = RadioButtonIcon; -exports.RemoveIcon = RemoveIcon; -exports.SearchIcon = SearchIcon; -exports.THEME_BREAKPOINTS = THEME_BREAKPOINTS; -exports.THEME_TYPOGRAPHY_PROPERTIES = THEME_TYPOGRAPHY_PROPERTIES; -exports.THEME_TYPOGRAPHY_VARIANTS = THEME_TYPOGRAPHY_VARIANTS; -exports.THEME_VARIANT_PROPERTIES = THEME_VARIANT_PROPERTIES; -exports.TabItem = TabItem; -exports.Table = Table; -exports.TableBody = TableBody; -exports.TableHeader = TableHeader; -exports.TableItem = TableItem; -exports.TableRow = TableRow; -exports.Tabs = Tabs; -exports.Tag = Tag; -exports.TextField = TextField; -exports.ThemeProvider = ThemeProvider; -exports.Toast = Toast; -exports.ToastContext = ToastContext; -exports.ToastProvider = ToastProvider; -exports.TooltipBase = TooltipBase; -exports.Typography = Typography; -exports.createTheme = createTheme; -exports.createThemeGlobalStyles = createThemeGlobalStyles; -exports.defaultThemes = defaultThemes; -exports.useCanUsePortal = useCanUsePortal; -exports.usePortal = usePortal; -exports.useTheme = useTheme; -exports.useToast = useToast; -exports.withTheme = withTheme; - - -/***/ }), - -/***/ 17967: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; -var __webpack_unused_export__; - -__webpack_unused_export__ = ({ value: true }); -exports.N = void 0; -var invalidProtocolRegex = /^([^\w]*)(javascript|data|vbscript)/im; -var htmlEntitiesRegex = /&#(\w+)(^\w|;)?/g; -var htmlCtrlEntityRegex = /&(newline|tab);/gi; -var ctrlCharactersRegex = /[\u0000-\u001F\u007F-\u009F\u2000-\u200D\uFEFF]/gim; -var urlSchemeRegex = /^.+(:|:)/gim; -var relativeFirstCharacters = [".", "/"]; -function isRelativeUrlWithoutProtocol(url) { - return relativeFirstCharacters.indexOf(url[0]) > -1; -} -// adapted from https://stackoverflow.com/a/29824550/2601552 -function decodeHtmlCharacters(str) { - return str.replace(htmlEntitiesRegex, function (match, dec) { - return String.fromCharCode(dec); - }); -} -function sanitizeUrl(url) { - var sanitizedUrl = decodeHtmlCharacters(url || "") - .replace(htmlCtrlEntityRegex, "") - .replace(ctrlCharactersRegex, "") - .trim(); - if (!sanitizedUrl) { - return "about:blank"; - } - if (isRelativeUrlWithoutProtocol(sanitizedUrl)) { - return sanitizedUrl; - } - var urlSchemeParseResults = sanitizedUrl.match(urlSchemeRegex); - if (!urlSchemeParseResults) { - return sanitizedUrl; - } - var urlScheme = urlSchemeParseResults[0]; - if (invalidProtocolRegex.test(urlScheme)) { - return "about:blank"; - } - return sanitizedUrl; -} -exports.N = sanitizeUrl; - - -/***/ }), - -/***/ 82688: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -var __assign = (this && this.__assign) || function () { - __assign = Object.assign || function(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) - t[p] = s[p]; - } - return t; - }; - return __assign.apply(this, arguments); -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.generateCstDts = void 0; -var model_1 = __webpack_require__(62222); -var generate_1 = __webpack_require__(75580); -var defaultOptions = { - includeVisitorInterface: true, - visitorInterfaceName: "ICstNodeVisitor" -}; -function generateCstDts(productions, options) { - var effectiveOptions = __assign(__assign({}, defaultOptions), options); - var model = (0, model_1.buildModel)(productions); - return (0, generate_1.genDts)(model, effectiveOptions); -} -exports.generateCstDts = generateCstDts; -//# sourceMappingURL=api.js.map - -/***/ }), - -/***/ 75580: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.genDts = void 0; -var flatten_1 = __importDefault(__webpack_require__(85564)); -var isArray_1 = __importDefault(__webpack_require__(1469)); -var map_1 = __importDefault(__webpack_require__(35161)); -var reduce_1 = __importDefault(__webpack_require__(54061)); -var uniq_1 = __importDefault(__webpack_require__(44908)); -var upperFirst_1 = __importDefault(__webpack_require__(11700)); -function genDts(model, options) { - var contentParts = []; - contentParts = contentParts.concat("import type { CstNode, ICstVisitor, IToken } from \"chevrotain\";"); - contentParts = contentParts.concat((0, flatten_1.default)((0, map_1.default)(model, function (node) { return genCstNodeTypes(node); }))); - if (options.includeVisitorInterface) { - contentParts = contentParts.concat(genVisitor(options.visitorInterfaceName, model)); - } - return contentParts.join("\n\n") + "\n"; -} -exports.genDts = genDts; -function genCstNodeTypes(node) { - var nodeCstInterface = genNodeInterface(node); - var nodeChildrenInterface = genNodeChildrenType(node); - return [nodeCstInterface, nodeChildrenInterface]; -} -function genNodeInterface(node) { - var nodeInterfaceName = getNodeInterfaceName(node.name); - var childrenTypeName = getNodeChildrenTypeName(node.name); - return "export interface ".concat(nodeInterfaceName, " extends CstNode {\n name: \"").concat(node.name, "\";\n children: ").concat(childrenTypeName, ";\n}"); -} -function genNodeChildrenType(node) { - var typeName = getNodeChildrenTypeName(node.name); - return "export type ".concat(typeName, " = {\n ").concat((0, map_1.default)(node.properties, function (property) { return genChildProperty(property); }).join("\n "), "\n};"); -} -function genChildProperty(prop) { - var typeName = buildTypeString(prop.type); - return "".concat(prop.name).concat(prop.optional ? "?" : "", ": ").concat(typeName, "[];"); -} -function genVisitor(name, nodes) { - return "export interface ".concat(name, " extends ICstVisitor {\n ").concat((0, map_1.default)(nodes, function (node) { return genVisitorFunction(node); }).join("\n "), "\n}"); -} -function genVisitorFunction(node) { - var childrenTypeName = getNodeChildrenTypeName(node.name); - return "".concat(node.name, "(children: ").concat(childrenTypeName, ", param?: IN): OUT;"); -} -function buildTypeString(type) { - if ((0, isArray_1.default)(type)) { - var typeNames = (0, uniq_1.default)((0, map_1.default)(type, function (t) { return getTypeString(t); })); - var typeString = (0, reduce_1.default)(typeNames, function (sum, t) { return sum + " | " + t; }); - return "(" + typeString + ")"; - } - else { - return getTypeString(type); - } -} -function getTypeString(type) { - if (type.kind === "token") { - return "IToken"; - } - return getNodeInterfaceName(type.name); -} -function getNodeInterfaceName(ruleName) { - return (0, upperFirst_1.default)(ruleName) + "CstNode"; -} -function getNodeChildrenTypeName(ruleName) { - return (0, upperFirst_1.default)(ruleName) + "CstChildren"; -} -//# sourceMappingURL=generate.js.map - -/***/ }), - -/***/ 62222: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.buildModel = void 0; -var gast_1 = __webpack_require__(93062); -var map_1 = __importDefault(__webpack_require__(35161)); -var flatten_1 = __importDefault(__webpack_require__(85564)); -var values_1 = __importDefault(__webpack_require__(52628)); -var some_1 = __importDefault(__webpack_require__(59704)); -var groupBy_1 = __importDefault(__webpack_require__(7739)); -var assign_1 = __importDefault(__webpack_require__(28583)); -function buildModel(productions) { - var generator = new CstNodeDefinitionGenerator(); - var allRules = (0, values_1.default)(productions); - return (0, map_1.default)(allRules, function (rule) { return generator.visitRule(rule); }); -} -exports.buildModel = buildModel; -var CstNodeDefinitionGenerator = /** @class */ (function (_super) { - __extends(CstNodeDefinitionGenerator, _super); - function CstNodeDefinitionGenerator() { - return _super !== null && _super.apply(this, arguments) || this; - } - CstNodeDefinitionGenerator.prototype.visitRule = function (node) { - var rawElements = this.visitEach(node.definition); - var grouped = (0, groupBy_1.default)(rawElements, function (el) { return el.propertyName; }); - var properties = (0, map_1.default)(grouped, function (group, propertyName) { - var allNullable = !(0, some_1.default)(group, function (el) { return !el.canBeNull; }); - // In an alternation with a label a property name can have - // multiple types. - var propertyType = group[0].type; - if (group.length > 1) { - propertyType = (0, map_1.default)(group, function (g) { return g.type; }); - } - return { - name: propertyName, - type: propertyType, - optional: allNullable - }; - }); - return { - name: node.name, - properties: properties - }; - }; - CstNodeDefinitionGenerator.prototype.visitAlternative = function (node) { - return this.visitEachAndOverrideWith(node.definition, { canBeNull: true }); - }; - CstNodeDefinitionGenerator.prototype.visitOption = function (node) { - return this.visitEachAndOverrideWith(node.definition, { canBeNull: true }); - }; - CstNodeDefinitionGenerator.prototype.visitRepetition = function (node) { - return this.visitEachAndOverrideWith(node.definition, { canBeNull: true }); - }; - CstNodeDefinitionGenerator.prototype.visitRepetitionMandatory = function (node) { - return this.visitEach(node.definition); - }; - CstNodeDefinitionGenerator.prototype.visitRepetitionMandatoryWithSeparator = function (node) { - return this.visitEach(node.definition).concat({ - propertyName: node.separator.name, - canBeNull: true, - type: getType(node.separator) - }); - }; - CstNodeDefinitionGenerator.prototype.visitRepetitionWithSeparator = function (node) { - return this.visitEachAndOverrideWith(node.definition, { - canBeNull: true - }).concat({ - propertyName: node.separator.name, - canBeNull: true, - type: getType(node.separator) - }); - }; - CstNodeDefinitionGenerator.prototype.visitAlternation = function (node) { - return this.visitEachAndOverrideWith(node.definition, { canBeNull: true }); - }; - CstNodeDefinitionGenerator.prototype.visitTerminal = function (node) { - return [ - { - propertyName: node.label || node.terminalType.name, - canBeNull: false, - type: getType(node) - } - ]; - }; - CstNodeDefinitionGenerator.prototype.visitNonTerminal = function (node) { - return [ - { - propertyName: node.label || node.nonTerminalName, - canBeNull: false, - type: getType(node) - } - ]; - }; - CstNodeDefinitionGenerator.prototype.visitEachAndOverrideWith = function (definition, override) { - return (0, map_1.default)(this.visitEach(definition), function (definition) { return (0, assign_1.default)({}, definition, override); }); - }; - CstNodeDefinitionGenerator.prototype.visitEach = function (definition) { - var _this = this; - return (0, flatten_1.default)((0, map_1.default)(definition, function (definition) { return _this.visit(definition); })); - }; - return CstNodeDefinitionGenerator; -}(gast_1.GAstVisitor)); -function getType(production) { - if (production instanceof gast_1.NonTerminal) { - return { - kind: "rule", - name: production.referencedRule.name - }; - } - return { kind: "token" }; -} -//# sourceMappingURL=model.js.map - -/***/ }), - -/***/ 93062: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.isSequenceProd = exports.isBranchingProd = exports.isOptionalProd = exports.getProductionDslName = exports.GAstVisitor = exports.serializeProduction = exports.serializeGrammar = exports.Alternative = exports.Alternation = exports.RepetitionWithSeparator = exports.RepetitionMandatoryWithSeparator = exports.RepetitionMandatory = exports.Repetition = exports.Option = exports.NonTerminal = exports.Terminal = exports.Rule = void 0; -var model_1 = __webpack_require__(94490); -Object.defineProperty(exports, "Rule", ({ enumerable: true, get: function () { return model_1.Rule; } })); -Object.defineProperty(exports, "Terminal", ({ enumerable: true, get: function () { return model_1.Terminal; } })); -Object.defineProperty(exports, "NonTerminal", ({ enumerable: true, get: function () { return model_1.NonTerminal; } })); -Object.defineProperty(exports, "Option", ({ enumerable: true, get: function () { return model_1.Option; } })); -Object.defineProperty(exports, "Repetition", ({ enumerable: true, get: function () { return model_1.Repetition; } })); -Object.defineProperty(exports, "RepetitionMandatory", ({ enumerable: true, get: function () { return model_1.RepetitionMandatory; } })); -Object.defineProperty(exports, "RepetitionMandatoryWithSeparator", ({ enumerable: true, get: function () { return model_1.RepetitionMandatoryWithSeparator; } })); -Object.defineProperty(exports, "RepetitionWithSeparator", ({ enumerable: true, get: function () { return model_1.RepetitionWithSeparator; } })); -Object.defineProperty(exports, "Alternation", ({ enumerable: true, get: function () { return model_1.Alternation; } })); -Object.defineProperty(exports, "Alternative", ({ enumerable: true, get: function () { return model_1.Alternative; } })); -Object.defineProperty(exports, "serializeGrammar", ({ enumerable: true, get: function () { return model_1.serializeGrammar; } })); -Object.defineProperty(exports, "serializeProduction", ({ enumerable: true, get: function () { return model_1.serializeProduction; } })); -var visitor_1 = __webpack_require__(62156); -Object.defineProperty(exports, "GAstVisitor", ({ enumerable: true, get: function () { return visitor_1.GAstVisitor; } })); -var helpers_1 = __webpack_require__(53559); -Object.defineProperty(exports, "getProductionDslName", ({ enumerable: true, get: function () { return helpers_1.getProductionDslName; } })); -Object.defineProperty(exports, "isOptionalProd", ({ enumerable: true, get: function () { return helpers_1.isOptionalProd; } })); -Object.defineProperty(exports, "isBranchingProd", ({ enumerable: true, get: function () { return helpers_1.isBranchingProd; } })); -Object.defineProperty(exports, "isSequenceProd", ({ enumerable: true, get: function () { return helpers_1.isSequenceProd; } })); -//# sourceMappingURL=api.js.map - -/***/ }), - -/***/ 53559: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.getProductionDslName = exports.isBranchingProd = exports.isOptionalProd = exports.isSequenceProd = void 0; -var some_1 = __importDefault(__webpack_require__(59704)); -var every_1 = __importDefault(__webpack_require__(711)); -var includes_1 = __importDefault(__webpack_require__(64721)); -var model_1 = __webpack_require__(94490); -function isSequenceProd(prod) { - return (prod instanceof model_1.Alternative || - prod instanceof model_1.Option || - prod instanceof model_1.Repetition || - prod instanceof model_1.RepetitionMandatory || - prod instanceof model_1.RepetitionMandatoryWithSeparator || - prod instanceof model_1.RepetitionWithSeparator || - prod instanceof model_1.Terminal || - prod instanceof model_1.Rule); -} -exports.isSequenceProd = isSequenceProd; -function isOptionalProd(prod, alreadyVisited) { - if (alreadyVisited === void 0) { alreadyVisited = []; } - var isDirectlyOptional = prod instanceof model_1.Option || - prod instanceof model_1.Repetition || - prod instanceof model_1.RepetitionWithSeparator; - if (isDirectlyOptional) { - return true; - } - // note that this can cause infinite loop if one optional empty TOP production has a cyclic dependency with another - // empty optional top rule - // may be indirectly optional ((A?B?C?) | (D?E?F?)) - if (prod instanceof model_1.Alternation) { - // for OR its enough for just one of the alternatives to be optional - return (0, some_1.default)(prod.definition, function (subProd) { - return isOptionalProd(subProd, alreadyVisited); - }); - } - else if (prod instanceof model_1.NonTerminal && (0, includes_1.default)(alreadyVisited, prod)) { - // avoiding stack overflow due to infinite recursion - return false; - } - else if (prod instanceof model_1.AbstractProduction) { - if (prod instanceof model_1.NonTerminal) { - alreadyVisited.push(prod); - } - return (0, every_1.default)(prod.definition, function (subProd) { - return isOptionalProd(subProd, alreadyVisited); - }); - } - else { - return false; - } -} -exports.isOptionalProd = isOptionalProd; -function isBranchingProd(prod) { - return prod instanceof model_1.Alternation; -} -exports.isBranchingProd = isBranchingProd; -function getProductionDslName(prod) { - /* istanbul ignore else */ - if (prod instanceof model_1.NonTerminal) { - return "SUBRULE"; - } - else if (prod instanceof model_1.Option) { - return "OPTION"; - } - else if (prod instanceof model_1.Alternation) { - return "OR"; - } - else if (prod instanceof model_1.RepetitionMandatory) { - return "AT_LEAST_ONE"; - } - else if (prod instanceof model_1.RepetitionMandatoryWithSeparator) { - return "AT_LEAST_ONE_SEP"; - } - else if (prod instanceof model_1.RepetitionWithSeparator) { - return "MANY_SEP"; - } - else if (prod instanceof model_1.Repetition) { - return "MANY"; - } - else if (prod instanceof model_1.Terminal) { - return "CONSUME"; - } - else { - throw Error("non exhaustive match"); - } -} -exports.getProductionDslName = getProductionDslName; -//# sourceMappingURL=helpers.js.map - -/***/ }), - -/***/ 94490: -/***/ (function(__unused_webpack_module, exports, __webpack_require__) { - -"use strict"; - -var __extends = (this && this.__extends) || (function () { - var extendStatics = function (d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; - return extendStatics(d, b); - }; - return function (d, b) { - if (typeof b !== "function" && b !== null) - throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); - }; -})(); -var __importDefault = (this && this.__importDefault) || function (mod) { - return (mod && mod.__esModule) ? mod : { "default": mod }; -}; -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.serializeProduction = exports.serializeGrammar = exports.Terminal = exports.Alternation = exports.RepetitionWithSeparator = exports.Repetition = exports.RepetitionMandatoryWithSeparator = exports.RepetitionMandatory = exports.Option = exports.Alternative = exports.Rule = exports.NonTerminal = exports.AbstractProduction = void 0; -var map_1 = __importDefault(__webpack_require__(35161)); -var forEach_1 = __importDefault(__webpack_require__(84486)); -var isString_1 = __importDefault(__webpack_require__(47037)); -var isRegExp_1 = __importDefault(__webpack_require__(96347)); -var pickBy_1 = __importDefault(__webpack_require__(35937)); -var assign_1 = __importDefault(__webpack_require__(28583)); -// TODO: duplicated code to avoid extracting another sub-package -- how to avoid? -function tokenLabel(tokType) { - if (hasTokenLabel(tokType)) { - return tokType.LABEL; - } - else { - return tokType.name; - } -} -// TODO: duplicated code to avoid extracting another sub-package -- how to avoid? -function hasTokenLabel(obj) { - return (0, isString_1.default)(obj.LABEL) && obj.LABEL !== ""; -} -var AbstractProduction = /** @class */ (function () { - function AbstractProduction(_definition) { - this._definition = _definition; - } - Object.defineProperty(AbstractProduction.prototype, "definition", { - get: function () { - return this._definition; - }, - set: function (value) { - this._definition = value; - }, - enumerable: false, - configurable: true - }); - AbstractProduction.prototype.accept = function (visitor) { - visitor.visit(this); - (0, forEach_1.default)(this.definition, function (prod) { - prod.accept(visitor); - }); - }; - return AbstractProduction; -}()); -exports.AbstractProduction = AbstractProduction; -var NonTerminal = /** @class */ (function (_super) { - __extends(NonTerminal, _super); - function NonTerminal(options) { - var _this = _super.call(this, []) || this; - _this.idx = 1; - (0, assign_1.default)(_this, (0, pickBy_1.default)(options, function (v) { return v !== undefined; })); - return _this; - } - Object.defineProperty(NonTerminal.prototype, "definition", { - get: function () { - if (this.referencedRule !== undefined) { - return this.referencedRule.definition; - } - return []; - }, - set: function (definition) { - // immutable - }, - enumerable: false, - configurable: true - }); - NonTerminal.prototype.accept = function (visitor) { - visitor.visit(this); - // don't visit children of a reference, we will get cyclic infinite loops if we do so - }; - return NonTerminal; -}(AbstractProduction)); -exports.NonTerminal = NonTerminal; -var Rule = /** @class */ (function (_super) { - __extends(Rule, _super); - function Rule(options) { - var _this = _super.call(this, options.definition) || this; - _this.orgText = ""; - (0, assign_1.default)(_this, (0, pickBy_1.default)(options, function (v) { return v !== undefined; })); - return _this; - } - return Rule; -}(AbstractProduction)); -exports.Rule = Rule; -var Alternative = /** @class */ (function (_super) { - __extends(Alternative, _super); - function Alternative(options) { - var _this = _super.call(this, options.definition) || this; - _this.ignoreAmbiguities = false; - (0, assign_1.default)(_this, (0, pickBy_1.default)(options, function (v) { return v !== undefined; })); - return _this; - } - return Alternative; -}(AbstractProduction)); -exports.Alternative = Alternative; -var Option = /** @class */ (function (_super) { - __extends(Option, _super); - function Option(options) { - var _this = _super.call(this, options.definition) || this; - _this.idx = 1; - (0, assign_1.default)(_this, (0, pickBy_1.default)(options, function (v) { return v !== undefined; })); - return _this; - } - return Option; -}(AbstractProduction)); -exports.Option = Option; -var RepetitionMandatory = /** @class */ (function (_super) { - __extends(RepetitionMandatory, _super); - function RepetitionMandatory(options) { - var _this = _super.call(this, options.definition) || this; - _this.idx = 1; - (0, assign_1.default)(_this, (0, pickBy_1.default)(options, function (v) { return v !== undefined; })); - return _this; - } - return RepetitionMandatory; -}(AbstractProduction)); -exports.RepetitionMandatory = RepetitionMandatory; -var RepetitionMandatoryWithSeparator = /** @class */ (function (_super) { - __extends(RepetitionMandatoryWithSeparator, _super); - function RepetitionMandatoryWithSeparator(options) { - var _this = _super.call(this, options.definition) || this; - _this.idx = 1; - (0, assign_1.default)(_this, (0, pickBy_1.default)(options, function (v) { return v !== undefined; })); - return _this; - } - return RepetitionMandatoryWithSeparator; -}(AbstractProduction)); -exports.RepetitionMandatoryWithSeparator = RepetitionMandatoryWithSeparator; -var Repetition = /** @class */ (function (_super) { - __extends(Repetition, _super); - function Repetition(options) { - var _this = _super.call(this, options.definition) || this; - _this.idx = 1; - (0, assign_1.default)(_this, (0, pickBy_1.default)(options, function (v) { return v !== undefined; })); - return _this; - } - return Repetition; -}(AbstractProduction)); -exports.Repetition = Repetition; -var RepetitionWithSeparator = /** @class */ (function (_super) { - __extends(RepetitionWithSeparator, _super); - function RepetitionWithSeparator(options) { - var _this = _super.call(this, options.definition) || this; - _this.idx = 1; - (0, assign_1.default)(_this, (0, pickBy_1.default)(options, function (v) { return v !== undefined; })); - return _this; - } - return RepetitionWithSeparator; -}(AbstractProduction)); -exports.RepetitionWithSeparator = RepetitionWithSeparator; -var Alternation = /** @class */ (function (_super) { - __extends(Alternation, _super); - function Alternation(options) { - var _this = _super.call(this, options.definition) || this; - _this.idx = 1; - _this.ignoreAmbiguities = false; - _this.hasPredicates = false; - (0, assign_1.default)(_this, (0, pickBy_1.default)(options, function (v) { return v !== undefined; })); - return _this; - } - Object.defineProperty(Alternation.prototype, "definition", { - get: function () { - return this._definition; - }, - set: function (value) { - this._definition = value; - }, - enumerable: false, - configurable: true - }); - return Alternation; -}(AbstractProduction)); -exports.Alternation = Alternation; -var Terminal = /** @class */ (function () { - function Terminal(options) { - this.idx = 1; - (0, assign_1.default)(this, (0, pickBy_1.default)(options, function (v) { return v !== undefined; })); - } - Terminal.prototype.accept = function (visitor) { - visitor.visit(this); - }; - return Terminal; -}()); -exports.Terminal = Terminal; -function serializeGrammar(topRules) { - return (0, map_1.default)(topRules, serializeProduction); -} -exports.serializeGrammar = serializeGrammar; -function serializeProduction(node) { - function convertDefinition(definition) { - return (0, map_1.default)(definition, serializeProduction); - } - /* istanbul ignore else */ - if (node instanceof NonTerminal) { - var serializedNonTerminal = { - type: "NonTerminal", - name: node.nonTerminalName, - idx: node.idx - }; - if ((0, isString_1.default)(node.label)) { - serializedNonTerminal.label = node.label; - } - return serializedNonTerminal; - } - else if (node instanceof Alternative) { - return { - type: "Alternative", - definition: convertDefinition(node.definition) - }; - } - else if (node instanceof Option) { - return { - type: "Option", - idx: node.idx, - definition: convertDefinition(node.definition) - }; - } - else if (node instanceof RepetitionMandatory) { - return { - type: "RepetitionMandatory", - idx: node.idx, - definition: convertDefinition(node.definition) - }; - } - else if (node instanceof RepetitionMandatoryWithSeparator) { - return { - type: "RepetitionMandatoryWithSeparator", - idx: node.idx, - separator: (serializeProduction(new Terminal({ terminalType: node.separator }))), - definition: convertDefinition(node.definition) - }; - } - else if (node instanceof RepetitionWithSeparator) { - return { - type: "RepetitionWithSeparator", - idx: node.idx, - separator: (serializeProduction(new Terminal({ terminalType: node.separator }))), - definition: convertDefinition(node.definition) - }; - } - else if (node instanceof Repetition) { - return { - type: "Repetition", - idx: node.idx, - definition: convertDefinition(node.definition) - }; - } - else if (node instanceof Alternation) { - return { - type: "Alternation", - idx: node.idx, - definition: convertDefinition(node.definition) - }; - } - else if (node instanceof Terminal) { - var serializedTerminal = { - type: "Terminal", - name: node.terminalType.name, - label: tokenLabel(node.terminalType), - idx: node.idx - }; - if ((0, isString_1.default)(node.label)) { - serializedTerminal.terminalLabel = node.label; - } - var pattern = node.terminalType.PATTERN; - if (node.terminalType.PATTERN) { - serializedTerminal.pattern = (0, isRegExp_1.default)(pattern) - ? pattern.source - : pattern; - } - return serializedTerminal; - } - else if (node instanceof Rule) { - return { - type: "Rule", - name: node.name, - orgText: node.orgText, - definition: convertDefinition(node.definition) - }; - } - else { - throw Error("non exhaustive match"); - } -} -exports.serializeProduction = serializeProduction; -//# sourceMappingURL=model.js.map - -/***/ }), - -/***/ 62156: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.GAstVisitor = void 0; -var model_1 = __webpack_require__(94490); -var GAstVisitor = /** @class */ (function () { - function GAstVisitor() { - } - GAstVisitor.prototype.visit = function (node) { - var nodeAny = node; - switch (nodeAny.constructor) { - case model_1.NonTerminal: - return this.visitNonTerminal(nodeAny); - case model_1.Alternative: - return this.visitAlternative(nodeAny); - case model_1.Option: - return this.visitOption(nodeAny); - case model_1.RepetitionMandatory: - return this.visitRepetitionMandatory(nodeAny); - case model_1.RepetitionMandatoryWithSeparator: - return this.visitRepetitionMandatoryWithSeparator(nodeAny); - case model_1.RepetitionWithSeparator: - return this.visitRepetitionWithSeparator(nodeAny); - case model_1.Repetition: - return this.visitRepetition(nodeAny); - case model_1.Alternation: - return this.visitAlternation(nodeAny); - case model_1.Terminal: - return this.visitTerminal(nodeAny); - case model_1.Rule: - return this.visitRule(nodeAny); - /* istanbul ignore next */ - default: - throw Error("non exhaustive match"); - } - }; - /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */ - GAstVisitor.prototype.visitNonTerminal = function (node) { }; - /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */ - GAstVisitor.prototype.visitAlternative = function (node) { }; - /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */ - GAstVisitor.prototype.visitOption = function (node) { }; - /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */ - GAstVisitor.prototype.visitRepetition = function (node) { }; - /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */ - GAstVisitor.prototype.visitRepetitionMandatory = function (node) { }; - /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */ - GAstVisitor.prototype.visitRepetitionMandatoryWithSeparator = function (node) { }; - /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */ - GAstVisitor.prototype.visitRepetitionWithSeparator = function (node) { }; - /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */ - GAstVisitor.prototype.visitAlternation = function (node) { }; - /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */ - GAstVisitor.prototype.visitTerminal = function (node) { }; - /* istanbul ignore next - testing the fact a NOOP function exists is non-trivial */ - GAstVisitor.prototype.visitRule = function (node) { }; - return GAstVisitor; -}()); -exports.GAstVisitor = GAstVisitor; -//# sourceMappingURL=visitor.js.map - -/***/ }), - -/***/ 68877: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.toFastProperties = exports.timer = exports.PRINT_ERROR = exports.PRINT_WARNING = void 0; -var print_1 = __webpack_require__(73017); -Object.defineProperty(exports, "PRINT_WARNING", ({ enumerable: true, get: function () { return print_1.PRINT_WARNING; } })); -Object.defineProperty(exports, "PRINT_ERROR", ({ enumerable: true, get: function () { return print_1.PRINT_ERROR; } })); -var timer_1 = __webpack_require__(99870); -Object.defineProperty(exports, "timer", ({ enumerable: true, get: function () { return timer_1.timer; } })); -var to_fast_properties_1 = __webpack_require__(55591); -Object.defineProperty(exports, "toFastProperties", ({ enumerable: true, get: function () { return to_fast_properties_1.toFastProperties; } })); -//# sourceMappingURL=api.js.map - -/***/ }), - -/***/ 73017: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.PRINT_WARNING = exports.PRINT_ERROR = void 0; -function PRINT_ERROR(msg) { - /* istanbul ignore else - can't override global.console in node.js */ - if (console && console.error) { - console.error("Error: ".concat(msg)); - } -} -exports.PRINT_ERROR = PRINT_ERROR; -function PRINT_WARNING(msg) { - /* istanbul ignore else - can't override global.console in node.js*/ - if (console && console.warn) { - // TODO: modify docs accordingly - console.warn("Warning: ".concat(msg)); - } -} -exports.PRINT_WARNING = PRINT_WARNING; -//# sourceMappingURL=print.js.map - -/***/ }), - -/***/ 99870: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.timer = void 0; -function timer(func) { - var start = new Date().getTime(); - var val = func(); - var end = new Date().getTime(); - var total = end - start; - return { time: total, value: val }; -} -exports.timer = timer; -//# sourceMappingURL=timer.js.map - -/***/ }), - -/***/ 55591: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; - -Object.defineProperty(exports, "__esModule", ({ value: true })); -exports.toFastProperties = void 0; -// based on: https://github.com/petkaantonov/bluebird/blob/b97c0d2d487e8c5076e8bd897e0dcd4622d31846/src/util.js#L201-L216 -function toFastProperties(toBecomeFast) { - function FakeConstructor() { } - // If our object is used as a constructor it would receive - FakeConstructor.prototype = toBecomeFast; - var fakeInstance = new FakeConstructor(); - function fakeAccess() { - return typeof fakeInstance.bar; - } - // help V8 understand this is a "real" prototype by actually using - // the fake instance. - fakeAccess(); - fakeAccess(); - // Always true condition to suppress the Firefox warning of unreachable - // code after a return statement. - if (true) - return toBecomeFast; - // Eval prevents optimization of this method (even though this is dead code) - /* istanbul ignore next */ - // tslint:disable-next-line - eval(toBecomeFast); -} -exports.toFastProperties = toFastProperties; -//# sourceMappingURL=to-fast-properties.js.map - -/***/ }), - -/***/ 28484: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "contentTitle": () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ "frontMatter": () => (/* binding */ frontMatter), -/* harmony export */ "metadata": () => (/* binding */ metadata), -/* harmony export */ "toc": () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(87462); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905); -/* harmony import */ var _components_mdx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(67124); -/* harmony import */ var _acid_info_lsd_react__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(31665); -/* harmony import */ var _acid_info_lsd_react__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_acid_info_lsd_react__WEBPACK_IMPORTED_MODULE_3__); -/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(89562); -/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */const frontMatter={title:'Defend against data censorship with Codex',description:'Codex is a durable, decentralised data storage protocol, created so the world community can preserve its most important knowledge without risk of censorship.'};const contentTitle=undefined;const metadata={"type":"mdx","permalink":"/","source":"@site/src/pages/index.mdx","title":"Defend against data censorship with Codex","description":"Codex is a durable, decentralised data storage protocol, created so the world community can preserve its most important knowledge without risk of censorship.","frontMatter":{"title":"Defend against data censorship with Codex","description":"Codex is a durable, decentralised data storage protocol, created so the world community can preserve its most important knowledge without risk of censorship."}};const toc=[];const layoutProps={toc};const MDXLayout="wrapper";function MDXContent({components,...props}){return (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout,(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Hero,{size:"large",verticalAlign:"center",mdxType:"Hero"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.HeroInfo,{hideScrollToBottom:true,mdxType:"HeroInfo"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.HeroTitle,{uppercase:false,mdxType:"HeroTitle"},"Defend against data censorship with Codex"),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.HeroDescription,{mdxType:"HeroDescription"},"Codex is a durable, decentralised data storage protocol, created so the world community can preserve its most important knowledge without risk of censorship."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.HeroActions,{mdxType:"HeroActions"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.HeroAction,{href:"https://discord.gg/codex-storage",target:"_blank",mdxType:"HeroAction"},"Get involved"))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.HeroAsset,{mdxType:"HeroAsset"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("img",{src:"/hero/hero-image.gif",alt:"Codex hero image"}))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Box,{mdxType:"Box"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.SectionHeader,{noBorder:true,title:"Codex attributes",mdxType:"SectionHeader"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_4__["default"],{className:"read-more-button",href:"/about",mdxType:"Link"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_acid_info_lsd_react__WEBPACK_IMPORTED_MODULE_3__.Button,{size:"small",mdxType:"Button"},"Read more"))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Box,{top:{xs:64},mdxType:"Box"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid,{xs:{cols:2,wrap:true,gap:'1.5rem 1em'},lg:{cols:4,gap:'1rem'},mdxType:"Grid"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ShowcaseCard,{index:1,name:"Durable",description:"Codex implements erasure coding to efficiently ensure data is always available without the storage cost of replication. Through sublinear sampling, Codex detects data corruption throughout the network, allowing for repairs to be made before loss is permanent.",borderStyle:"none",mdxType:"ShowcaseCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ShowcaseCard,{index:2,name:"Censorship resistant",description:"The Codex network is designed to withstand DDoS attacks, data corruption, and even the shutdown of a significant number of nodes. Access to your data remains during these otherwise catastrophic events.",borderStyle:"none",mdxType:"ShowcaseCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ShowcaseCard,{index:3,name:"Decentralised",description:"Codex implements protocol constructs that incentivize wide participation of data storage providers, both small and large, thus ensuring a robust network resistant to censorship and external attack.",borderStyle:"none",mdxType:"ShowcaseCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ShowcaseCard,{index:4,name:"Accessible",description:"Participating in the Codex network is highly accessible thanks to its permissionless nature, bandwidth usage optimizations like its \"lazy repair\" recovery system, and lightweight ZK-based remote auditing.",borderStyle:"none",mdxType:"ShowcaseCard"}))))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Box,{top:{xs:144,lg:190},mdxType:"Box"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.CallToActionSection,{title:"Logos Collective",columns:1,border:false,align:"center",description:(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,null,"Codex is powering the data storage layer of the Logos technology stack. Logos is a grassroots movement, building the infrastructure for trust-minimised, corruption-resistant governing services and social institutions for peaceful people worldwide.",(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("br",null),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("br",null),"Learn more about our ambitious vision."),label:"Explore Logos",href:"https://logos.co/",target:"_blank",mdxType:"CallToActionSection"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Box,{top:{xs:144,lg:190},mdxType:"Box"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Roadmap,{noBorder:true,title:"Development Roadmap",description:"Codex is currently in its first proof-of-concept iteration and aims to release its alpha version, Katana, before the end of Q4 2023.",href:"/about/roadmap",linkLabel:"Learn more",timeline:[{period:[2021],description:"Codex project begins"},{period:[2021],description:"Work on first Client prototype built from Bitswap, IPFS and Nitro"},{period:[2021],description:"Begin primitive Marketplace v1.0 interactions for pricing block exchanging"},{period:[2021],description:"Research begins for remote verification and erasure coding methods"},{period:[2021],description:"Research of Marketplace mechanics in other decentralized storage protocols"},{period:[2021],description:"PoR and erasure coding modeling and prototyping"},{period:[2022],description:"Implementation of PoR and erasure coding into Codex client"},{period:[2022],description:"Added first implementation of DHT and discovery v5 methods"},{period:[2022],description:"REST APIs added to Marketplace for Sales Availability"},{period:[2022],description:"Demo of first proof of concept Codex client: PoC-1 (Dagger)"},{period:[2022],description:"Marketplace v2.0 redesign"},{period:[2022],description:"Research into zkSNARK-based methods of proof aggregation to replace PoR"},{period:[2022],description:"Marketplace v2.0 redesign"},{period:[2023],description:"Demo of Codex client PoC-2 (Scimitar)"},{period:[2023],description:"Research into L2s, systems testing and integration of Marketplace into Client"},{period:[2023],description:"Demo of third proof of concept Codex client PoC-3 (Longsword): fast erasure coding, Marketplace, ZK remote auditing"},{period:[2023],description:"Codex MVP Version 1.0 (Katana): fast erasure coding, Marketplace, ZK remote auditing, repair"},{period:[2024],description:"Develop Codex L2 aggregator node architecture"},{period:[2024],description:"Research into payment channels and bandwidth incentives"},{period:[2024],description:"Implementation of incentives: payment channels, bandwidth incentives"},{period:[2024],description:"Enable repair using remote auditing scheme and incentive mechanisms"},{period:[2025],description:"Codex Version 2.0 (Wakizashi)"},{period:[2025],description:"Public mainnet launch"},{period:[2025],description:"Multi-client implementations in Rusn and Go"}],mdxType:"Roadmap"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Box,{top:{xs:134},mdxType:"Box"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.SectionHeader,{title:"Team",noBorder:true,mdxType:"SectionHeader"}),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Box,{top:{xs:64},bottom:{xs:64},mdxType:"Box"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid,{xs:{cols:2,gap:'24px 16px',wrap:true},md:{cols:4,gap:'24px 16px',wrap:true},mdxType:"Grid"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ProfileCard,{name:"Dmitriy",imgSrc:"/team/dmitriy.png",githubUsername:"dryajov",githubLink:"https://github.com/dryajov",discordUsername:"dryajov",discordLink:"https://discord.gg/codex-storage",mdxType:"ProfileCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ProfileCard,{name:"Slava",imgSrc:"/team/slava.jpg",githubUsername:"veaceslavdoina",githubLink:"https://github.com/veaceslavdoina",discordUsername:"veaceslavdoina",discordLink:"https://discord.gg/codex-storage",mdxType:"ProfileCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ProfileCard,{name:"Ben",imgSrc:"/team/ben.jpg",githubUsername:"benbierens",githubLink:"https://github.com/benbierens",discordUsername:"thatben",discordLink:"hhttps://discord.gg/codex-storage",mdxType:"ProfileCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ProfileCard,{name:"Jaremy",imgSrc:"/team/jaremy.jpg",githubUsername:"elcritch",githubLink:"https://github.com/elcritch",discordUsername:".elcritch",discordLink:"https://discord.gg/codex-storage",mdxType:"ProfileCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ProfileCard,{name:"Tomasz",imgSrc:"/team/tomasz.jpg",githubUsername:"tbekas",githubLink:"https://github.com/tbekas",discordUsername:"tbekas",discordLink:"https://discord.gg/codex-storage",mdxType:"ProfileCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ProfileCard,{name:"Mark",imgSrc:"/team/mark.jpg",githubUsername:"markspanbroek",githubLink:"https://github.com/markspanbroek",mdxType:"ProfileCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ProfileCard,{name:"Eric",imgSrc:"/team/eric.jpg",githubUsername:"emizzle",githubLink:"https://github.com/emizzle",mdxType:"ProfileCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ProfileCard,{name:"Adam",imgSrc:"/team/adam.jpg",githubUsername:"auhau",githubLink:"https://github.com/auhau",mdxType:"ProfileCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ProfileCard,{name:"Csaba",imgSrc:"/team/csaba.png",githubUsername:"cskiraly",githubLink:"https://github.com/cskiraly",mdxType:"ProfileCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ProfileCard,{name:"Leo",imgSrc:"/team/leo.jpg",githubUsername:"leobago",githubLink:"https://github.com/leobago",mdxType:"ProfileCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ProfileCard,{name:"Balazs",imgSrc:"/team/balazs.jpg",githubUsername:"bkomuves",githubLink:"https://github.com/bkomuves",mdxType:"ProfileCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ProfileCard,{name:"Jessie",imgSrc:"/team/jessie.jpg",githubUsername:"jessiebroke",githubLink:"https://github.com/jessiebroke",discordUsername:"jessiebroke",discordLink:"https://discord.gg/gwRFyTySeD",mdxType:"ProfileCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.ProfileCard,{name:"Giuliano",imgSrc:"/team/giuliano.jpg",githubUsername:"gmega",githubLink:"https://github.com/gmega",discordUsername:"giuliano.mega",discordLink:"https://discord.gg/codex-storage",mdxType:"ProfileCard"}))))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Box,{top:{xs:152,lg:300},mdxType:"Box"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid,{xs:{cols:1,gap:'1rem'},md:{cols:2},className:"bottom-cta-sections",mdxType:"Grid"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,{xs:1},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.InputCTASection,{description:'Want to get involved with Codex?\nJoin the Discord community.',link:"https://discord.gg/codex-storage",label:"Get Involved",mdxType:"InputCTASection"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,{xs:1},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_components_mdx__WEBPACK_IMPORTED_MODULE_2__.InputCTASection,{description:'Subscribe\nto our newsletter',label:"Subscribe",formInput:[{label:'Name',placeholder:'Name',type:'text',name:'name',required:true},{label:'Email',placeholder:'Enter your email',type:'email',name:'email',required:true}],formListId:3,mdxType:"InputCTASection"})))));};MDXContent.isMDXComponent=true; - -/***/ }), - -/***/ 46050: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "assets": () => (/* binding */ assets), -/* harmony export */ "contentTitle": () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ "frontMatter": () => (/* binding */ frontMatter), -/* harmony export */ "metadata": () => (/* binding */ metadata), -/* harmony export */ "toc": () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(87462); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905); -/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */const frontMatter={title:'Description and architecture',sidebar_position:2,hide_table_of_contents:true};const contentTitle=undefined;const metadata={"unversionedId":"architect","id":"architect","title":"Description and architecture","description":"Codex is building a durable data storage engine that is fully decentralised, providing corruption and censorship resistance to web3 applications. It innately protects network participants by giving hosts plausible deniability over the data they store, and clients provable durability guarantees—up to 99.99%—while remaining storage and bandwidth efficient.","source":"@site/about/architect.md","sourceDirName":".","slug":"/architect","permalink":"/about/architect","draft":false,"tags":[],"version":"current","sidebarPosition":2,"frontMatter":{"title":"Description and architecture","sidebar_position":2,"hide_table_of_contents":true},"sidebar":"defaultSidebar","previous":{"title":"About Codex","permalink":"/about/"},"next":{"title":"Development roadmap","permalink":"/about/roadmap"}};const assets={};const toc=[{value:'Incentivized decentralisation',id:'incentivized-decentralisation',level:3},{value:'Network architecture',id:'network-architecture',level:3}];const layoutProps={toc};const MDXLayout="wrapper";function MDXContent({components,...props}){return (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout,(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Codex is building a durable data storage engine that is fully decentralised, providing corruption and censorship resistance to web3 applications. It innately protects network participants by giving hosts plausible deniability over the data they store, and clients provable durability guarantees—up to 99.99%—while remaining storage and bandwidth efficient.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`These four key features combine to differentiate Codex from existing projects in the decentralised storage niche:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Erasure coding:`),` Provides efficient data redundancy, which increases data durability guarantees.`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`ZK-based proof-of-retrievability:`),` For lightweight data durability assurances.`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Lazy repair mechanism:`),` For efficient data reconstruction and loss prevention.`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Incentivization:`),` To encourage rational behaviour, widespread network participation, and the efficient provision of finite network resources.`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("br",null),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"incentivized-decentralisation"},`Incentivized decentralisation`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Incentivization mechanisms are one of the key pieces missing from traditional file-sharing networks. Codex believes that a robust marketplace-based incentive structure will ensure wide participation across the node types detailed below.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The development of an adequate incentive structure is driven by the following goals: `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},`Supply and demand to encourage optimum network resource usage.`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},`Increase participation by enabling nodes to utilise their competitive advantages to maximise profits.`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},`Prevent spam and discourage malicious participation. `))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Although still to be finalised, the Codex incentive structure will involve a marketplace of participants who want to store data, and those provisioning storage posting collateral, with the latter bidding on open storage contracts. This structure aims to ensure that participants' incentives align, resulting in Codex functioning as intended.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("br",null),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"network-architecture"},`Network architecture`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Codex is composed of multiple node types, each taking a different role in the network's operation. Similarly, the hardware demands for each node type vary, enabling those operating resource-restricted devices to participate.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Storage nodes`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`As Codex's long-term reliable storage providers, storage nodes stake collateral based on the collateral posted on the request side of contracts, and the number of slots that a contract has. This is tied to the durability demanded by the user. Failure to provide periodic proof of data possession results in slashing penalties.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Aggregator Node`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`A method for off-loading erasure coding, proof generation and proof aggregation by a client node with low-resources, currently a WIP and will be part of subsequent Codex release Q2/Q4 next year.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Client nodes`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Client nodes make requests for other nodes to store, find, and retrieve data. Most of the Codex network will be Client nodes, and these participants can double as caching nodes to offset the cost of the network resources they consume. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`When a node commits to a storage contract and a user uploads data, the network will proactively verify that the storage node is online and that the data is retrievable. Storage nodes are then randomly queried to broadcast proofs of data possession over an interval corresponding to the contract duration and 9's of retrievability guarantee the protocol provides.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`If the storage node sends invalid proofs or fails to provide them in time, the network evicts the storage node from the slot, and the slot will become available for the first node that generates a valid proof for that slot. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`When the contract is reposted, some of the faulty node's collateral pays for the new storage node's bandwidth fees. Erasure coding complements the repair scheme by allowing the reconstruction of the missing chunks from data in other slots within the same storage contract hosted by faultless storage nodes.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("br",null),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("img",{alt:"architect",src:(__webpack_require__(25815)/* ["default"] */ .Z),width:"1376",height:"880"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("br",null),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{target:"_blank",href:(__webpack_require__(31769)/* ["default"] */ .Z)},"Read the Codex whitepaper")));};MDXContent.isMDXComponent=true; - -/***/ }), - -/***/ 18055: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "assets": () => (/* binding */ assets), -/* harmony export */ "contentTitle": () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ "frontMatter": () => (/* binding */ frontMatter), -/* harmony export */ "metadata": () => (/* binding */ metadata), -/* harmony export */ "toc": () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(87462); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905); -/* harmony import */ var _site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(67124); -/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */const frontMatter={title:'Frequently asked questions',hide_table_of_contents:true,sidebar_label:'FAQ'};const contentTitle='Frequently asked questions';const metadata={"unversionedId":"faq","id":"faq","title":"Frequently asked questions","description":"Codex is a state-of-the-art, decentralized storage protocol that provides a solution for highly durable data storage with high decentralization, aiming to resist censorship and prevent single points of failure inherent in centralized systems.","source":"@site/about/faq.mdx","sourceDirName":".","slug":"/faq","permalink":"/about/faq","draft":false,"tags":[],"version":"current","frontMatter":{"title":"Frequently asked questions","hide_table_of_contents":true,"sidebar_label":"FAQ"},"sidebar":"defaultSidebar","previous":{"title":"Core contributors","permalink":"/about/team"}};const assets={};const toc=[];const layoutProps={toc};const MDXLayout="wrapper";function MDXContent({components,...props}){return (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout,(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"frequently-asked-questions"},`Frequently asked questions`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"What is Codex?",mdxType:"AccordionItem"},"Codex is a state-of-the-art, decentralized storage protocol that provides a solution for highly durable data storage with high decentralization, aiming to resist censorship and prevent single points of failure inherent in centralized systems."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"How is Codex different from centralized storage solutions (eg. Google Cloud)?",mdxType:"AccordionItem"},"Unlike centralized systems, Codex is designed to offer data durability, resiliency to cloud failures, and censorship resistance, making it vital for use cases like preserving factual history records."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"What kind of durability does Codex promise?",mdxType:"AccordionItem"},"While no system can promise absolute data loss protection, Codex's architecture, economic incentives, and encoding algorithms aim to provide high data durability with the novel implementation of techniques such as Erasure Coding and Lazy Repair."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"What is Data Durability?",mdxType:"AccordionItem"},"Data Durability means how likely it is that data will stay safe over time. For instance, a storage system with durability of eleven nines (99.999999999%) means there's a very tiny chance (0.0000000001%) of losing data. In simple terms, you might lose only one file out of a million over ten million years. Data Durability is crucial because losing even a little data can be a big problem. Codex uses techniques like erasure coding to keep data safe. This method splits data and stores it in different places. So, if a piece is lost or damaged, the other pieces can be used to recreate the original data. This keeps users' data secure and intact."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"What is Erasure Coding and how does it relate to data storage in Codex?",mdxType:"AccordionItem"},"Erasure Coding is a way to protect data by breaking it into parts, adding extra data for safety, and then spreading these parts across various locations or systems. On Codex, this involves splitting data into pieces, known as \"shards,\" along with extra \"parity shards\" for backup. These parity shards are created using mathematical formulas based on the original data, helping to rebuild the data if some shards go missing or get damaged. This method lets Codex offer consistent and reliable data storage, meaning that as long as a certain number of shards (N out of M) are safe, the entire original data can be perfectly restored, ensuring a high level of data safety."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"What is Lazy Repair in the context of Codex?",mdxType:"AccordionItem"},"Lazy Repair is a method in distributed storage systems for managing data issues. In Codex, if a piece of data (a shard) is lost or damaged, the system doesn't fix it right away. It waits until there's enough damage to make repair worthwhile. This is efficient because it saves resources by not addressing small problems that don't harm the overall data. The system only repairs when the number of good shards drops too low, balancing resource use with keeping data safe and available."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"Is Codex part of Logos?",mdxType:"AccordionItem"},"Yes, Codex is expected to serve as the storage pillar of Logos, the protocol protecting Logos organizational data, aligning with the broader Logos initiative."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"How does Codex compare to other decentralized storage solutions currently out on the market?",mdxType:"AccordionItem"},"Codex distinguishes itself from other storage solutions in the market through several key features: having an Advanced Marketplace and Data Distribution, and using SNARKS for Data Loss Detection."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"How do the Advanced Marketplace and Data Distribution work?",mdxType:"AccordionItem"},"Codex features an advanced marketplace that promotes high levels of decentralization and efficient data distribution. This structure prevents the concentration of data in a few large nodes, enhancing the efficiency of data repair and retrieval. In contrast, other protocols design their systems to create \"supernodes\"."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"How does Codex use SNARKS for Data Loss Detection?",mdxType:"AccordionItem"},"Codex incorporates succinct non-interactive arguments of knowledge (SNARKS) for efficient and reliable data loss detection. Storage Providers (SPs) respond to challenges by sending proofs to Proof Aggregators, who verify and post these proofs to the blockchain. If an SP fails to prove possession of data or sends invalid proof, their collateral is slashed, providing an economic incentive to ensure data durability."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"Can Codex be used for cold storage by blockchain networks?",mdxType:"AccordionItem"},"Yes, Codex is discussing with various blockchain projects to preserve their full chain state and history in a way that resists censorship and does not require full history to be stored locally by every node."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"Is Codex currently operational?",mdxType:"AccordionItem"},"Codex is currently undergoing extensive internal testing. The upcoming public testnet is planned for Q1 2024."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"What types of data can be stored on Codex?",mdxType:"AccordionItem"},"Codex can handle various types of data but is particularly suited for mission-critical history and state information for Web3 applications that need to remain unaltered, and accessible."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"Will every node be required to store full data history in Codex?",mdxType:"AccordionItem"},"No, the design allows for storing vast amounts of data without requiring every node to store the full history."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"What are all the different types of nodes in Codex\u2019s network?",mdxType:"AccordionItem"},"Codex consists of a p2p network of Storage Nodes, Aggregator Nodes, Caching Nodes, and Client Nodes."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"What is a Storage Node?",mdxType:"AccordionItem"},"Storage nodes provide long-term reliable storage. For a storage node to operate it needs to stake a collateral proportional to the amount of data it's willing to store. Once the collateral has been staked and the node begins to store data, it needs to periodically provide proof of data possession. If a node fails to provide proof in time, it is penalized with a portion of its stake; if the node fails to provide proof several times in a row, it loses the entirety of the stake."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"What is an Aggregator Node?",mdxType:"AccordionItem"},"Aggregator nodes are in charge of collecting, validating, and submitting proofs to an adjudicator contract which rewards and penalizes storage and other validator nodes. A validator node also needs to stake collateral to be able to participate in the validation process. Note that we don't use the term \"adjudicator contract\" in the literal sense of an Ethereum contract. We use it to indicate anything that executes on a consensus engine."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"What is a Caching Node?",mdxType:"AccordionItem"},"Bandwidth incentives allow anyone to operate as a caching node, profiting only from caching and serving popular content. We expect this to have the emergent property of an organic CDN, where nodes with spare bandwidth but limited or unreliable storage can collectively scale the network depending on current demands. Any node can become a caching node for any period, even ephemeral nodes."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"What is a Client Node?",mdxType:"AccordionItem"},"Client Nodes engage with other nodes to store, find, and retrieve data from the network. We expect regular nodes to be the most common type of node in the Codex Network. These will consume services offered by other nodes in exchange for payments. A regular node can also be a caching node by storing previously consumed data that other nodes can retrieve from it. This allows nodes to offset some of the cost of participating in the network and it's expected to allow the majority of nodes to participate on an almost free basis after an initial entree fee. Unlike the other types of nodes, we expect the regular nodes to have intermittent up-time as they are running on personal computers and mobile devices."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"Can I build my application on top of Codex?",mdxType:"AccordionItem"},"Not yet. Stay tuned for more updates from the Codex project for when you can utilize your application on top of the Codex network."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"Does Codex have a token?",mdxType:"AccordionItem"},"No Codex token has been issued yet. Please be wary of impersonators claiming the issuance of Codex tokens or any form of Codex airdrop."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"What role will the Codex token have in the network?",mdxType:"AccordionItem"},"The Codex token is a utility token, serving as collateral for Storage Providers and a means of compensation in the storage contracts."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"Can I or would I be able to use my storage to participate in the Codex network?",mdxType:"AccordionItem"},"Yes. The testnet phase is set for Q1 2024, stay tuned."),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_site_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.AccordionItem,{title:"Can I use Codex right now?",mdxType:"AccordionItem"},"Not yet. However, you will be able to participate in the testnet phase of Q1 2024. Stay tuned."));};MDXContent.isMDXComponent=true; - -/***/ }), - -/***/ 97579: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "assets": () => (/* binding */ assets), -/* harmony export */ "contentTitle": () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ "frontMatter": () => (/* binding */ frontMatter), -/* harmony export */ "metadata": () => (/* binding */ metadata), -/* harmony export */ "toc": () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(87462); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905); -/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */const frontMatter={title:'About Codex',sidebar_position:1,hide_table_of_contents:true};const contentTitle=undefined;const metadata={"unversionedId":"index","id":"index","title":"About Codex","description":"Codex is a decentralised data storage platform that provides exceptionally strong censorship resistance and durability guarantees. It serves as the storage layer of the Logos tech stack. Alongside the trustless agreement layer, Nomos, and the communications layer, Waku, it is one of the Logos Collective's foundational projects.","source":"@site/about/index.md","sourceDirName":".","slug":"/","permalink":"/about/","draft":false,"tags":[],"version":"current","sidebarPosition":1,"frontMatter":{"title":"About Codex","sidebar_position":1,"hide_table_of_contents":true},"sidebar":"defaultSidebar","next":{"title":"Description and architecture","permalink":"/about/architect"}};const assets={};const toc=[{value:'Motive',id:'motive',level:3},{value:'Decentralising data storage',id:'decentralising-data-storage',level:3}];const layoutProps={toc};const MDXLayout="wrapper";function MDXContent({components,...props}){return (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout,(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Codex is a decentralised data storage platform that provides exceptionally strong censorship resistance and durability guarantees. It serves as the storage layer of the `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"p","href":"https://logos.co/"},`Logos`),` tech stack. Alongside the trustless agreement layer, `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"p","href":"http://nomos.tech"},`Nomos`),`, and the communications layer, `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"p","href":"http://waku.org"},`Waku`),`, it is one of the Logos Collective's foundational projects.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("br",null),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"motive"},`Motive`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The remote storage landscape is dominated by an increasingly small number of internet powerhouses—Google, Microsoft, Amazon, etc. While these services score highly in terms of user experience and convenience, centralised cloud data storage suffers from the following drawbacks:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},`Censorship`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},`Lack of data ownership`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},`Breaches and outages`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},`High cost`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Centralised cloud storage providers have an established history of censoring data and, as de facto owners of said data, have the power to do so according to their own standards. Furthermore, centralised platforms have fallen victim to major data breaches and service outages on numerous occasions.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Such incidents have created a gap in the market for a decentralised, censorship-resistant alternative. Existing peer-to-peer storage and file-sharing networks address some of these issues—such as robustness in the face of network disruptions, and desirable resistance to censorship. Yet without adequate incentives and strong data durability guarantees, they make for unsuitable foundations upon which to build truly unstoppable applications.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Existing decentralised storage solutions purport to improve upon early P2P file-sharing platforms like eDonkey and Gnutella. However, the market still lacks a decentralised storage solution that is efficient in terms of storage and bandwidth usage, while offering performance and durability guarantees comparable to incumbents. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("br",null),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"decentralising-data-storage"},`Decentralising data storage`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Codex began in 2021 to address a need for a durable, decentralised storage layer for the web3 tech stack.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The name "Codex" refers to an ancient form of book—an allusion to the data storage engine's extremely robust—99.99%—durability guarantees.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Codex was announced as a core Logos Collective protocol in June 2023.`));};MDXContent.isMDXComponent=true; - -/***/ }), - -/***/ 70725: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "assets": () => (/* binding */ assets), -/* harmony export */ "contentTitle": () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ "frontMatter": () => (/* binding */ frontMatter), -/* harmony export */ "metadata": () => (/* binding */ metadata), -/* harmony export */ "toc": () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(87462); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905); -/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */const frontMatter={title:'Development roadmap',sidebar_position:3,hide_table_of_contents:true};const contentTitle=undefined;const metadata={"unversionedId":"roadmap","id":"roadmap","title":"Development roadmap","description":"Releases","source":"@site/about/roadmap.md","sourceDirName":".","slug":"/roadmap","permalink":"/about/roadmap","draft":false,"tags":[],"version":"current","sidebarPosition":3,"frontMatter":{"title":"Development roadmap","sidebar_position":3,"hide_table_of_contents":true},"sidebar":"defaultSidebar","previous":{"title":"Description and architecture","permalink":"/about/architect"},"next":{"title":"Core contributors","permalink":"/about/team"}};const assets={};const toc=[{value:'Releases',id:'releases',level:3},{value:'Milestones',id:'milestones',level:3},{value:'Roadmap rationale',id:'roadmap-rationale',level:3}];const layoutProps={toc};const MDXLayout="wrapper";function MDXContent({components,...props}){return (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout,(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"releases"},`Releases`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Codex is currently in its first proof of concept iteration, codenamed Dagger. Before Katana (its forthcoming testnet release, expected before the end of 2023) we aim to deliver two additional PoC clients, Scimitar and Longsword.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Dagger:`),` Codex's first PoC and current version.`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Scimitar:`),` The PoC-2 client will implement fast erasure coding, the marketplace, and partial durability guarantees—expected end of Q3 2023.`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Katana:`),` Codex v1 will offer SNARK-based remote auditing`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("br",null),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"milestones"},`Milestones`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The Codex team's subgroups are working on the major milestones detailed below to deliver Codex with the qualities described:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Testing:`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Develop and maintain testnet and devnet`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Client:`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Release Scimitar`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Develop initial data repair and ZK proving scheme`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Release Longsword`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Deploy Codex v1.0`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Marketplace:`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Develop the marketplace for integration in PoC-2.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Develop the marketplace bandwidth incentivization structure.`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Research:`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Write the initial ZK proving scheme`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Conduct Data Availability Sampling research with the Ethereum Foundation`)))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("br",null),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"roadmap-rationale"},`Roadmap rationale`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`We believe the above roadmap to be the most logical approach to building a data storage engine with stronger durability guarantees and resistance to censorship than currently offered by Codex's centralised or decentralised counterparts. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`First, we must establish a mechanism through which users can initiate a contract with a storage provider to host their data. Then, we can add erasure coding, required for efficient redundancy and auditing. Next, the system will need a mechanism to prove the hosts still have data available. Finally, repairs must be incentivized. Naturally, each layer of sophistication requires testing for economic and technical feasibility.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"p","href":"https://github.com/codex-storage"},`Contribute to Codex`)));};MDXContent.isMDXComponent=true; - -/***/ }), - -/***/ 52967: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "assets": () => (/* binding */ assets), -/* harmony export */ "contentTitle": () => (/* binding */ contentTitle), -/* harmony export */ "default": () => (/* binding */ MDXContent), -/* harmony export */ "frontMatter": () => (/* binding */ frontMatter), -/* harmony export */ "metadata": () => (/* binding */ metadata), -/* harmony export */ "toc": () => (/* binding */ toc) -/* harmony export */ }); -/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(87462); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905); -/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */const frontMatter={title:'Core contributors',sidebar_position:4,hide_table_of_contents:true};const contentTitle=undefined;const metadata={"unversionedId":"team","id":"team","title":"Core contributors","description":"Codex is developed by highly experienced protocol and software developers, distributed systems experts, and ZK-cryptography researchers with backgrounds in academia, mainstream tech, and web3.","source":"@site/about/team.md","sourceDirName":".","slug":"/team","permalink":"/about/team","draft":false,"tags":[],"version":"current","sidebarPosition":4,"frontMatter":{"title":"Core contributors","sidebar_position":4,"hide_table_of_contents":true},"sidebar":"defaultSidebar","previous":{"title":"Development roadmap","permalink":"/about/roadmap"},"next":{"title":"FAQ","permalink":"/about/faq"}};const assets={};const toc=[];const layoutProps={toc};const MDXLayout="wrapper";function MDXContent({components,...props}){return (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout,(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Codex is developed by highly experienced protocol and software developers, distributed systems experts, and ZK-cryptography researchers with backgrounds in academia, mainstream tech, and web3. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The contributors working on Codex are split into the subgroups below:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Codex general`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Codex marketplace`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Codex client`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Codex research`)))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Codex is looking for more contributors to help build the network. Check out the open positions linked below. As an open-source public goods project Codex also welcomes community contributions. Please check out our `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"p","href":"https://github.com/codex-storage"},`Github repo here`),`.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"p","href":"https://jobs.status.im/"},`Work with us`)));};MDXContent.isMDXComponent=true; - -/***/ }), - -/***/ 26920: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "HOSTNAMES": () => (/* binding */ HOSTNAMES), -/* harmony export */ "SCRIPT_URL": () => (/* binding */ SCRIPT_URL), -/* harmony export */ "SITE_ID": () => (/* binding */ SITE_ID) -/* harmony export */ }); -const SITE_ID="OISNT";const SCRIPT_URL="https://fathom.bi.status.im/tracker.js";const HOSTNAMES=["codex.storage"]; - -/***/ }), - -/***/ 77763: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - "Z": () => (/* binding */ routes) -}); - -// EXTERNAL MODULE: ./node_modules/react/index.js -var react = __webpack_require__(67294); -// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js -var esm_extends = __webpack_require__(87462); -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/typeof.js -function _typeof(obj) { - "@babel/helpers - typeof"; - - return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { - return typeof obj; - } : function (obj) { - return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; - }, _typeof(obj); -} -;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/interopRequireWildcard.js - - -function _getRequireWildcardCache(nodeInterop) { - if (typeof WeakMap !== "function") return null; - var cacheBabelInterop = new WeakMap(); - var cacheNodeInterop = new WeakMap(); - return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { - return nodeInterop ? cacheNodeInterop : cacheBabelInterop; - })(nodeInterop); -} - -function _interopRequireWildcard(obj, nodeInterop) { - if (!nodeInterop && obj && obj.__esModule) { - return obj; - } - - if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { - return { - "default": obj - }; - } - - var cache = _getRequireWildcardCache(nodeInterop); - - if (cache && cache.has(obj)) { - return cache.get(obj); - } - - var newObj = {}; - var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; - - for (var key in obj) { - if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { - var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; - - if (desc && (desc.get || desc.set)) { - Object.defineProperty(newObj, key, desc); - } else { - newObj[key] = obj[key]; - } - } - } - - newObj["default"] = obj; - - if (cache) { - cache.set(obj, newObj); - } - - return newObj; -} -// EXTERNAL MODULE: ./node_modules/react-loadable/lib/index.js -var lib = __webpack_require__(68356); -var lib_default = /*#__PURE__*/__webpack_require__.n(lib); -;// CONCATENATED MODULE: ./.docusaurus/routesChunkNames.json -const routesChunkNames_namespaceObject = JSON.parse('{"/about-4e7":{"__comp":"1be78505","__context":{"plugin":"0ca4f5f2"},"versionMetadata":"7818b736"},"/about/-a82":{"__comp":"17896441","content":"230402f8"},"/about/architect-7a3":{"__comp":"17896441","content":"d40faacd"},"/about/faq-4a0":{"__comp":"17896441","content":"7a250d2c"},"/about/roadmap-b12":{"__comp":"17896441","content":"ba0da7bd"},"/about/team-c35":{"__comp":"17896441","content":"13b4f215"},"/-9be":{"__comp":"1f391b9e","__context":{"plugin":"f50b8723"},"content":"e7ce6630"},"/-72c":{"__comp":"1be78505","__context":{"plugin":"b6219486"},"versionMetadata":"52065b4a"},"/community-dda":{"__comp":"17896441","content":"5086c83f"},"/join-us-3eb":{"__comp":"17896441","content":"4c51782d"},"/news-004":{"__comp":"17896441","content":"198b3d11"},"/privacy-policy-e92":{"__comp":"17896441","content":"81bf376d"},"/security-392":{"__comp":"17896441","content":"85cd0eac"},"/terms-73e":{"__comp":"17896441","content":"79dc5662"}}'); -;// CONCATENATED MODULE: ./.docusaurus/registry.js -/* harmony default export */ const registry = ({'0ca4f5f2':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(55866))),'/home/jenkins/workspace/website/codex.storage/.docusaurus/docusaurus-plugin-content-docs/about/plugin-route-context-module-100.json',/*require.resolve*/(55866)],'13b4f215':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(52967))),'@site/about/team.md',/*require.resolve*/(52967)],'17896441':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(59047))),'@theme/DocItem',/*require.resolve*/(59047)],'198b3d11':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(84594))),'@site/root-pages/news.md',/*require.resolve*/(84594)],'1be78505':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(89849))),'@theme/DocPage',/*require.resolve*/(89849)],'1f391b9e':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(56668))),'@theme/MDXPage',/*require.resolve*/(56668)],'230402f8':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(97579))),'@site/about/index.md',/*require.resolve*/(97579)],'4c51782d':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(79945))),'@site/root-pages/join-us.mdx',/*require.resolve*/(79945)],'5086c83f':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(67729))),'@site/root-pages/community.mdx',/*require.resolve*/(67729)],'52065b4a':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(12514))),'~docs/root-pages/version-current-metadata-prop-751.json',/*require.resolve*/(12514)],'7818b736':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(75127))),'~docs/about/version-current-metadata-prop-751.json',/*require.resolve*/(75127)],'79dc5662':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(6975))),'@site/root-pages/terms.md',/*require.resolve*/(6975)],'7a250d2c':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(18055))),'@site/about/faq.mdx',/*require.resolve*/(18055)],'81bf376d':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(91723))),'@site/root-pages/privacy-policy.md',/*require.resolve*/(91723)],'85cd0eac':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(28802))),'@site/root-pages/security.md',/*require.resolve*/(28802)],'b6219486':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(54284))),'/home/jenkins/workspace/website/codex.storage/.docusaurus/docusaurus-plugin-content-docs/root-pages/plugin-route-context-module-100.json',/*require.resolve*/(54284)],'ba0da7bd':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(70725))),'@site/about/roadmap.md',/*require.resolve*/(70725)],'d40faacd':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(46050))),'@site/about/architect.md',/*require.resolve*/(46050)],'e7ce6630':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(28484))),'@site/src/pages/index.mdx',/*require.resolve*/(28484)],'f50b8723':[()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(15745))),'/home/jenkins/workspace/website/codex.storage/.docusaurus/docusaurus-plugin-content-pages/default/plugin-route-context-module-100.json',/*require.resolve*/(15745)]}); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/theme-fallback/Loading/index.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ // Should we translate theme-fallback? -/* eslint-disable @docusaurus/no-untranslated-text */function Loading({error,retry,pastDelay}){if(error){return/*#__PURE__*/react.createElement("div",{style:{textAlign:'center',color:'#fff',backgroundColor:'#fa383e',borderColor:'#fa383e',borderStyle:'solid',borderRadius:'0.25rem',borderWidth:'1px',boxSizing:'border-box',display:'block',padding:'1rem',flex:'0 0 50%',marginLeft:'25%',marginRight:'25%',marginTop:'5rem',maxWidth:'50%',width:'100%'}},/*#__PURE__*/react.createElement("p",null,String(error)),/*#__PURE__*/react.createElement("div",null,/*#__PURE__*/react.createElement("button",{type:"button",onClick:retry},"Retry")));}if(pastDelay){return/*#__PURE__*/react.createElement("div",{style:{display:'flex',justifyContent:'center',alignItems:'center',height:'100vh'}},/*#__PURE__*/react.createElement("svg",{id:"loader",style:{width:128,height:110,position:'absolute',top:'calc(100vh - 64%)'},viewBox:"0 0 45 45",xmlns:"http://www.w3.org/2000/svg",stroke:"#61dafb"},/*#__PURE__*/react.createElement("g",{fill:"none",fillRule:"evenodd",transform:"translate(1 1)",strokeWidth:"2"},/*#__PURE__*/react.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},/*#__PURE__*/react.createElement("animate",{attributeName:"r",begin:"1.5s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),/*#__PURE__*/react.createElement("animate",{attributeName:"stroke-opacity",begin:"1.5s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),/*#__PURE__*/react.createElement("animate",{attributeName:"stroke-width",begin:"1.5s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),/*#__PURE__*/react.createElement("circle",{cx:"22",cy:"22",r:"6",strokeOpacity:"0"},/*#__PURE__*/react.createElement("animate",{attributeName:"r",begin:"3s",dur:"3s",values:"6;22",calcMode:"linear",repeatCount:"indefinite"}),/*#__PURE__*/react.createElement("animate",{attributeName:"stroke-opacity",begin:"3s",dur:"3s",values:"1;0",calcMode:"linear",repeatCount:"indefinite"}),/*#__PURE__*/react.createElement("animate",{attributeName:"stroke-width",begin:"3s",dur:"3s",values:"2;0",calcMode:"linear",repeatCount:"indefinite"})),/*#__PURE__*/react.createElement("circle",{cx:"22",cy:"22",r:"8"},/*#__PURE__*/react.createElement("animate",{attributeName:"r",begin:"0s",dur:"1.5s",values:"6;1;2;3;4;5;6",calcMode:"linear",repeatCount:"indefinite"})))));}return null;} -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/flat.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const isTree=x=>typeof x==='object'&&!!x&&Object.keys(x).length>0;/** - * Takes a tree, and flattens it into a map of keyPath -> value. - * - * ```js - * flat({ a: { b: 1 } }) === { "a.b": 1 }; - * flat({ a: [1, 2] }) === { "a.0": 1, "a.1": 2 }; - * ``` - */function flat(target){const delimiter='.';const output={};function dfs(object,prefix){Object.entries(object).forEach(([key,value])=>{const newKey=prefix?`${prefix}${delimiter}${key}`:key;if(isTree(value)){dfs(value,newKey);}else{output[newKey]=value;}});}dfs(target);return output;} -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/routeContext.js -var client_routeContext = __webpack_require__(66041); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/exports/ComponentCreator.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function ComponentCreator(path,hash){// 404 page -if(path==='*'){return lib_default()({loading:Loading,loader:()=>Promise.resolve().then(()=>_interopRequireWildcard(__webpack_require__(89481))),modules:['@theme/NotFound'],webpack:()=>[/*require.resolve*/(89481)],render(loaded,props){const NotFound=loaded.default;return/*#__PURE__*/react.createElement(client_routeContext/* RouteContextProvider */.z// Do we want a better name than native-default? -,{value:{plugin:{name:'native',id:'default'}}},/*#__PURE__*/react.createElement(NotFound,props));}});}const chunkNames=routesChunkNames_namespaceObject[`${path}-${hash}`];// eslint-disable-next-line @typescript-eslint/no-explicit-any -const loader={};const modules=[];const optsWebpack=[];// A map from prop names to chunk names. -// e.g. Suppose the plugin added this as route: -// { __comp: "...", prop: { foo: "..." }, items: ["...", "..."] } -// It will become: -// { __comp: "...", "prop.foo": "...", "items.0": "...", "items.1": ... } -// Loadable.Map will _map_ over `loader` and load each key. -const flatChunkNames=flat(chunkNames);Object.entries(flatChunkNames).forEach(([keyPath,chunkName])=>{const chunkRegistry=registry[chunkName];if(chunkRegistry){// eslint-disable-next-line prefer-destructuring -loader[keyPath]=chunkRegistry[0];modules.push(chunkRegistry[1]);optsWebpack.push(chunkRegistry[2]);}});return lib_default().Map({loading:Loading,loader,modules,webpack:()=>optsWebpack,render(loaded,props){// `loaded` will be a map from key path (as returned from the flattened -// chunk names) to the modules loaded from the loaders. We now have to -// restore the chunk names' previous shape from this flat record. -// We do so by taking advantage of the existing `chunkNames` and replacing -// each chunk name with its loaded module, so we don't create another -// object from scratch. -const loadedModules=JSON.parse(JSON.stringify(chunkNames));Object.entries(loaded).forEach(([keyPath,loadedModule])=>{// JSON modules are also loaded as `{ default: ... }` (`import()` -// semantics) but we just want to pass the actual value to props. -const chunk=loadedModule.default;// One loaded chunk can only be one of two things: a module (props) or a -// component. Modules are always JSON, so `default` always exists. This -// could only happen with a user-defined component. -if(!chunk){throw new Error(`The page component at ${path} doesn't have a default export. This makes it impossible to render anything. Consider default-exporting a React component.`);}// A module can be a primitive, for example, if the user stored a string -// as a prop. However, there seems to be a bug with swc-loader's CJS -// logic, in that it would load a JSON module with content "foo" as -// `{ default: "foo", 0: "f", 1: "o", 2: "o" }`. Just to be safe, we -// first make sure that the chunk is non-primitive. -if(typeof chunk==='object'||typeof chunk==='function'){Object.keys(loadedModule).filter(k=>k!=='default').forEach(nonDefaultKey=>{chunk[nonDefaultKey]=loadedModule[nonDefaultKey];});}// We now have this chunk prepared. Go down the key path and replace the -// chunk name with the actual chunk. -let val=loadedModules;const keyPaths=keyPath.split('.');keyPaths.slice(0,-1).forEach(k=>{val=val[k];});val[keyPaths[keyPaths.length-1]]=chunk;});/* eslint-disable no-underscore-dangle */const Component=loadedModules.__comp;delete loadedModules.__comp;const routeContext=loadedModules.__context;delete loadedModules.__context;/* eslint-enable no-underscore-dangle */ // Is there any way to put this RouteContextProvider upper in the tree? -return/*#__PURE__*/react.createElement(client_routeContext/* RouteContextProvider */.z,{value:routeContext},/*#__PURE__*/react.createElement(Component,(0,esm_extends/* default */.Z)({},loadedModules,props)));}});} -;// CONCATENATED MODULE: ./.docusaurus/routes.js -/* harmony default export */ const routes = ([{path:'/about',component:ComponentCreator('/about','4e7'),routes:[{path:'/about/',component:ComponentCreator('/about/','a82'),exact:true,sidebar:"defaultSidebar"},{path:'/about/architect',component:ComponentCreator('/about/architect','7a3'),exact:true,sidebar:"defaultSidebar"},{path:'/about/faq',component:ComponentCreator('/about/faq','4a0'),exact:true,sidebar:"defaultSidebar"},{path:'/about/roadmap',component:ComponentCreator('/about/roadmap','b12'),exact:true,sidebar:"defaultSidebar"},{path:'/about/team',component:ComponentCreator('/about/team','c35'),exact:true,sidebar:"defaultSidebar"}]},{path:'/',component:ComponentCreator('/','9be'),exact:true},{path:'/',component:ComponentCreator('/','72c'),routes:[{path:'/community',component:ComponentCreator('/community','dda'),exact:true},{path:'/join-us',component:ComponentCreator('/join-us','3eb'),exact:true},{path:'/news',component:ComponentCreator('/news','004'),exact:true},{path:'/privacy-policy',component:ComponentCreator('/privacy-policy','e92'),exact:true},{path:'/security',component:ComponentCreator('/security','392'),exact:true},{path:'/terms',component:ComponentCreator('/terms','73e'),exact:true}]},{path:'*',component:ComponentCreator('*')}]); - -/***/ }), - -/***/ 27998: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.onRouteDidUpdate=void 0;const tslib_1=__webpack_require__(70655);const options_1=__webpack_require__(26920);const ExecutionEnvironment_1=tslib_1.__importDefault(__webpack_require__(19901));const main=()=>{if(options_1.HOSTNAMES.length>0?!options_1.HOSTNAMES.includes(window.location.hostname):window.location.hostname==='localhost')return;(function(f,a,t,h){a[h]=a[h]||function(){;(a[h].q=a[h].q||[]).push(arguments);};const o=f.createElement('script');const m=f.getElementsByTagName('script')[0];o.async=1;o.src=t;o.id='fathom-script';m.parentNode.insertBefore(o,m);})(document,window,options_1.SCRIPT_URL,'fathom');const{fathom}=window;fathom('set','siteId',options_1.SITE_ID);fathom('trackPageview');};if(ExecutionEnvironment_1.default.canUseDOM){main();}const onRouteDidUpdate=({location,previousLocation})=>{if(!!window.fathom&&location.pathname!==previousLocation?.pathname){window.fathom('trackPageview');}};exports.onRouteDidUpdate=onRouteDidUpdate; - -/***/ }), - -/***/ 79578: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.createPromise=exports.ResultType=void 0;const tslib_1=__webpack_require__(70655);// @ts-ignore -const fetchIndexes_1=__webpack_require__(78007);// @ts-ignore -const getStemmedPositions_1=__webpack_require__(84647);// @ts-ignore -const highlightStemmed_1=__webpack_require__(32438);// @ts-ignore -const SearchSourceFactory_1=__webpack_require__(58263);// @ts-ignore -const proxied=tslib_1.__importStar(__webpack_require__(96059));const loadIndex=async params=>{const{wrappedIndexes,zhDictionary}=await(0,fetchIndexes_1.fetchIndexes)(params.versionUrl,params.searchContext);return{wrappedIndexes,zhDictionary};};const findSearchContext=({versionUrl,searchContextByPaths})=>{let pathname=window.location.pathname;pathname=pathname.endsWith('/')?pathname:pathname+'/';if(!Array.isArray(searchContextByPaths)||!pathname.startsWith(versionUrl))return'';const uri=pathname.substring(versionUrl.length);const paths=searchContextByPaths;return paths.find(path=>uri===path||uri.startsWith(`${path}/`))??'';};class Search{constructor(config){this.config=config;this.loading=false;this.source=null;this.init=async()=>{this.loading=true;const{wrappedIndexes,zhDictionary}=await loadIndex({versionUrl:this.baseUrl,searchContext:findSearchContext({versionUrl:this.baseUrl,searchContextByPaths:this.searchContextByPaths})});this.source=(0,SearchSourceFactory_1.SearchSourceFactory)(wrappedIndexes,zhDictionary,this.config.resultsLimit);};this.query=async input=>{if(!this.source)throw new Error('Not initialized');const{promise,callback}=(0,exports.createPromise)();this.source&&this.source(input,callback);return{results:(await promise).map(result=>this.formatResult(result))};};this.formatResult=result=>{return{...result,type:this.resultTypeToString(result.type),page:result.page?this.formatDocument(result.page):null,document:result.document?this.formatDocument(result.document):null,highlighted:(0,highlightStemmed_1.highlightStemmed)(result.document.t,(0,getStemmedPositions_1.getStemmedPositions)(result.metadata,'t'),result.tokens)};};this.resultTypeToString=type=>({0:ResultType.Title,1:ResultType.Heading,2:ResultType.Paragraph})[type];this.formatDocument=doc=>{return{id:doc.i,title:doc.t,url:doc.u,hash:doc.h,parentId:doc.p,breadcrumb:doc.b,sectionTitle:doc.s};};this.baseUrl=config.preferredVersionPath;this.searchContextByPaths=config.searchContextByPaths??'';}}var ResultType;(function(ResultType){ResultType["Title"]="title";ResultType["Heading"]="heading";ResultType["Paragraph"]="paragraph";})(ResultType=exports.ResultType||(exports.ResultType={}));const createPromise=()=>{let resolve,reject;const promise=new Promise((res,rej)=>{resolve=res;reject=rej;});const callback=(data,error)=>{if(error)return void reject(error);resolve(data);};return{reject,resolve,promise,callback};};exports.createPromise=createPromise;const main=async()=>{if(typeof window==='undefined')return;const win=window;win.getProxiedGeneratedData=()=>proxied;win.createSearchInstance=async config=>{const search=new Search(config);return search;};};main(); - -/***/ }), - -/***/ 22197: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.IconEmail=exports.IconRemove=exports.IconAdd=exports.IconDownload=exports.IconAvatar=exports.IconX=exports.IconTelegramWhite=exports.IconDiscordWhite=exports.IconExternalLink=exports.IconFullscreenExit=exports.IconFullscreen=exports.IconEdit=exports.IconClose=exports.IconHistory=exports.IconPlay=exports.IconCopy=exports.IconGScholar=exports.IconDropdown=exports.IconSearch=exports.IconFolderFilled=exports.IconDot=exports.IconLinkedin=exports.IconDiscourse=exports.IconTelegram=exports.IconTwitter=exports.IconStatus=exports.IconDiscord=exports.IconGithub=exports.IconFolder=exports.IconArrowLeft=exports.IconArrowRight=exports.IconArrowLeftCircle=exports.IconArrowRightCircle=exports.Icon=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=__webpack_require__(86010);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const style_module_scss_1=tslib_1.__importDefault(__webpack_require__(61547));const add_svg_1=tslib_1.__importDefault(__webpack_require__(19044));const arrow_left_circle_svg_1=tslib_1.__importDefault(__webpack_require__(80255));const arrow_left_svg_1=tslib_1.__importDefault(__webpack_require__(67146));const arrow_right_circle_svg_1=tslib_1.__importDefault(__webpack_require__(68425));const arrow_right_svg_1=tslib_1.__importDefault(__webpack_require__(88121));const avatar_svg_1=tslib_1.__importDefault(__webpack_require__(62082));const close_svg_1=tslib_1.__importDefault(__webpack_require__(80469));const copy_svg_1=tslib_1.__importDefault(__webpack_require__(94793));const discord_white_svg_1=tslib_1.__importDefault(__webpack_require__(14607));const discord_svg_1=tslib_1.__importDefault(__webpack_require__(50437));const discourse_svg_1=tslib_1.__importDefault(__webpack_require__(23179));const dot_svg_1=tslib_1.__importDefault(__webpack_require__(19818));const download_svg_1=tslib_1.__importDefault(__webpack_require__(38981));const dropdown_svg_1=tslib_1.__importDefault(__webpack_require__(28487));const edit_svg_1=tslib_1.__importDefault(__webpack_require__(94177));const external_link_svg_1=tslib_1.__importDefault(__webpack_require__(58611));const folder_svg_1=tslib_1.__importDefault(__webpack_require__(13042));const fullscreen_exit_svg_1=tslib_1.__importDefault(__webpack_require__(96367));const fullscreen_svg_1=tslib_1.__importDefault(__webpack_require__(6907));const github_white_svg_1=tslib_1.__importDefault(__webpack_require__(59570));const gscholar_svg_1=tslib_1.__importDefault(__webpack_require__(26890));const history_svg_1=tslib_1.__importDefault(__webpack_require__(74297));const linkedin_svg_1=tslib_1.__importDefault(__webpack_require__(33336));const remove_svg_1=tslib_1.__importDefault(__webpack_require__(78951));const search_svg_1=tslib_1.__importDefault(__webpack_require__(84629));const status_svg_1=tslib_1.__importDefault(__webpack_require__(23816));const telegram_white_svg_1=tslib_1.__importDefault(__webpack_require__(35245));const telegram_svg_1=tslib_1.__importDefault(__webpack_require__(68902));const twitter_svg_1=tslib_1.__importDefault(__webpack_require__(86089));const x_white_svg_1=tslib_1.__importDefault(__webpack_require__(92358));const email_svg_1=tslib_1.__importDefault(__webpack_require__(96867));const play_svg_1=tslib_1.__importDefault(__webpack_require__(65379));const Icon=props=>{const{children,size='m'}=props;return react_1.default.createElement("div",{className:(0,clsx_1.clsx)(style_module_scss_1.default.icon,style_module_scss_1.default[size],props.stroke&&style_module_scss_1.default.stroke,props.fill&&style_module_scss_1.default.fill,props.className&&props.className)},children);};exports.Icon=Icon;const IconArrowRightCircle=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(arrow_right_circle_svg_1.default,null));exports.IconArrowRightCircle=IconArrowRightCircle;const IconArrowLeftCircle=props=>react_1.default.createElement(exports.Icon,null,react_1.default.createElement(arrow_left_circle_svg_1.default,null));exports.IconArrowLeftCircle=IconArrowLeftCircle;const IconArrowRight=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(arrow_right_svg_1.default,null));exports.IconArrowRight=IconArrowRight;const IconArrowLeft=props=>react_1.default.createElement(exports.Icon,null,react_1.default.createElement(arrow_left_svg_1.default,null));exports.IconArrowLeft=IconArrowLeft;const IconFolder=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(folder_svg_1.default,null));exports.IconFolder=IconFolder;const IconGithub=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(github_white_svg_1.default,null));exports.IconGithub=IconGithub;const IconDiscord=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(discord_svg_1.default,null));exports.IconDiscord=IconDiscord;const IconStatus=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(status_svg_1.default,null));exports.IconStatus=IconStatus;const IconTwitter=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(twitter_svg_1.default,null));exports.IconTwitter=IconTwitter;const IconTelegram=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(telegram_svg_1.default,null));exports.IconTelegram=IconTelegram;const IconDiscourse=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(discourse_svg_1.default,null));exports.IconDiscourse=IconDiscourse;const IconLinkedin=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(linkedin_svg_1.default,null));exports.IconLinkedin=IconLinkedin;const IconDot=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(dot_svg_1.default,null));exports.IconDot=IconDot;const IconFolderFilled=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(folder_svg_1.default,null));exports.IconFolderFilled=IconFolderFilled;const IconSearch=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(search_svg_1.default,null));exports.IconSearch=IconSearch;const IconDropdown=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(dropdown_svg_1.default,null));exports.IconDropdown=IconDropdown;const IconGScholar=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(gscholar_svg_1.default,null));exports.IconGScholar=IconGScholar;const IconCopy=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(copy_svg_1.default,null));exports.IconCopy=IconCopy;const IconPlay=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(play_svg_1.default,null));exports.IconPlay=IconPlay;const IconHistory=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(history_svg_1.default,null));exports.IconHistory=IconHistory;const IconClose=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(close_svg_1.default,null));exports.IconClose=IconClose;const IconEdit=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(edit_svg_1.default,null));exports.IconEdit=IconEdit;const IconFullscreen=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(fullscreen_svg_1.default,null));exports.IconFullscreen=IconFullscreen;const IconFullscreenExit=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(fullscreen_exit_svg_1.default,null));exports.IconFullscreenExit=IconFullscreenExit;const IconExternalLink=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(external_link_svg_1.default,null));exports.IconExternalLink=IconExternalLink;const IconDiscordWhite=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(discord_white_svg_1.default,null));exports.IconDiscordWhite=IconDiscordWhite;const IconTelegramWhite=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(telegram_white_svg_1.default,null));exports.IconTelegramWhite=IconTelegramWhite;const IconX=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(x_white_svg_1.default,null));exports.IconX=IconX;const IconAvatar=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(avatar_svg_1.default,null));exports.IconAvatar=IconAvatar;const IconDownload=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(download_svg_1.default,null));exports.IconDownload=IconDownload;const IconAdd=props=>react_1.default.createElement(exports.Icon,{...props,stroke:true},react_1.default.createElement(add_svg_1.default,null));exports.IconAdd=IconAdd;const IconRemove=props=>react_1.default.createElement(exports.Icon,{...props,stroke:true},react_1.default.createElement(remove_svg_1.default,null));exports.IconRemove=IconRemove;const IconEmail=props=>react_1.default.createElement(exports.Icon,{...props},react_1.default.createElement(email_svg_1.default,null));exports.IconEmail=IconEmail; - -/***/ }), - -/***/ 6980: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(22197),exports); - -/***/ }), - -/***/ 23558: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.KeepRatio=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const KeepRatio_module_scss_1=tslib_1.__importDefault(__webpack_require__(361));const KeepRatio=({children,width,height,fullHeight:_fullHeight=false,fullWidth:_fullWidth=true,rootProps,contentProps,containerWidth,containerHeight,keep=true})=>{const fullWidth=!_fullHeight&&_fullWidth;const fullHeight=!fullWidth;const ratio=(fullHeight?height/width:width/height)*100;return react_1.default.createElement("div",{...(rootProps??{}),className:(0,clsx_1.default)(KeepRatio_module_scss_1.default.root,fullWidth&&KeepRatio_module_scss_1.default.fullWidth,fullHeight&&KeepRatio_module_scss_1.default.fullHeight,keep&&KeepRatio_module_scss_1.default.keep,rootProps?.className)},react_1.default.createElement("div",{...(contentProps??{}),className:(0,clsx_1.default)(KeepRatio_module_scss_1.default.content,contentProps?.className)},children),keep&&react_1.default.createElement("svg",{style:{pointerEvents:'none',height:fullHeight?'100%':containerHeight?`calc(${height} / ${width} * ${containerWidth})`:'auto',width:fullWidth?'100%':containerHeight?`calc(${width} / ${height} * ${containerHeight})`:'auto'},viewBox:`0 0 ${fullWidth?ratio:100} ${fullHeight?ratio:100}`}));};exports.KeepRatio=KeepRatio; - -/***/ }), - -/***/ 26534: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(23558),exports); - -/***/ }), - -/***/ 81575: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.Modal=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const react_use_1=__webpack_require__(89164);const useHydrated_1=__webpack_require__(67713);const Portal_1=__webpack_require__(54920);__webpack_require__(77995);const Modal=({open=false,onClose,keepMounted=false,className,children,...props})=>{const hydrated=(0,useHydrated_1.useHydrated)();const handleClose=()=>{onClose&&onClose();};(0,react_use_1.useKeyPressEvent)(key=>key.code==='Escape',event=>{handleClose();});if(!hydrated)return react_1.default.createElement(react_1.default.Fragment,null);if(!open&&!keepMounted)return react_1.default.createElement(react_1.default.Fragment,null);return react_1.default.createElement(Portal_1.Portal,{containerId:"lsd-presentation",id:props.id},react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'l-modal',open&&'l-modal--open'),...props},react_1.default.createElement("div",{className:"l-modal__container"},react_1.default.createElement("div",{className:"l-modal__content"},children),react_1.default.createElement("div",{className:"l-modal__backdrop",onClick:handleClose}))));};exports.Modal=Modal; - -/***/ }), - -/***/ 54920: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.Portal=void 0;const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const react_dom_1=__webpack_require__(73935);const usePortal_1=__webpack_require__(72777);const Portal=({children,containerId,id})=>{if(typeof window==='undefined'){return react_1.default.createElement(react_1.default.Fragment,null);}const portalElement=(0,usePortal_1.usePortal)({parentId:containerId});const portal=(0,react_dom_1.createPortal)(children,portalElement,id);return portal;};exports.Portal=Portal; - -/***/ }), - -/***/ 72777: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.usePortal=void 0;const react_1=__webpack_require__(67294);const settle_1=__webpack_require__(32833);const usePortal=({parentId})=>{const elementRef=(0,react_1.useRef)();if(!elementRef.current){elementRef.current=document.createElement('div');}(0,react_1.useEffect)(()=>{if(!elementRef.current)return;document.getElementById(parentId)?.appendChild(elementRef.current);return()=>{const el=elementRef.current;el&&(0,settle_1.settleSync)(()=>document.getElementById(parentId)?.removeChild(el));};},[parentId,elementRef.current]);return elementRef.current;};exports.usePortal=usePortal; - -/***/ }), - -/***/ 22226: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.AccordionItem=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importStar(__webpack_require__(67294));__webpack_require__(15907);const lsd_react_1=__webpack_require__(31665);const Icon_1=__webpack_require__(6980);const uniqueId_1=tslib_1.__importDefault(__webpack_require__(73955));const AccordionItem=({open:openProp,onToggle,title,className,children,...props})=>{const id=(0,uniqueId_1.default)('accordion-item-');const[open,setOpen]=(0,react_1.useState)(openProp??false);if(typeof openProp!=='undefined'&&openProp!==open){setOpen(openProp);}const handleToggle=()=>{if(typeof openProp!=='undefined'){onToggle&&onToggle(!open);}else{setOpen(val=>!val);}};return react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-accordion-item',open&&'mdx-accordion-item--open'),...props},react_1.default.createElement("input",{type:"checkbox",id:id,checked:open}),react_1.default.createElement("div",{role:"button",className:"mdx-accordion-item__header",onClick:()=>handleToggle()},react_1.default.createElement(lsd_react_1.Typography,{className:"mdx-accordion-item__title",variant:"h5",component:"label",htmlFor:id},title),react_1.default.createElement("div",{className:"mdx-accordion-item__icon"},open?react_1.default.createElement(Icon_1.IconRemove,null):react_1.default.createElement(Icon_1.IconAdd,null))),react_1.default.createElement("div",{className:"mdx-accordion-item__content-wrapper"},react_1.default.createElement("div",{className:"mdx-accordion-item__content"},children)));};exports.AccordionItem=AccordionItem; - -/***/ }), - -/***/ 66169: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(22226),exports); - -/***/ }), - -/***/ 3309: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.AppCard=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const ThemedImage_1=tslib_1.__importDefault(__webpack_require__(25812));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(70054);/** - * A card component for displaying information about an app. - * - * @example - * **Example usage:** - * ```jsx - * import { AppCard } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx' - * - * - * ``` - * - * **Grid example:** - * ```jsx - * import { Grid, AppCard } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx' - * - * - * - * - * - * - * - * - * - * ``` - */const AppCard=({logoSrc,logoSrcDark,name,description,link,linkLabel,...props})=>{return react_1.default.createElement("div",{...props,className:(0,clsx_1.default)(props.className,'mdx-app-card')},(logoSrc||logoSrcDark)&&react_1.default.createElement(ThemedImage_1.default,{sources:{dark:logoSrcDark??logoSrc??'',light:logoSrc??logoSrcDark??''},alt:typeof name==='string'?name:'',className:"mdx-app-card__logo"}),react_1.default.createElement(lsd_react_1.Typography,{component:"span",variant:"h5",className:"mdx-app-card__name"},name),react_1.default.createElement(lsd_react_1.Typography,{variant:"subtitle1",className:"mdx-app-card__description"},description),link&&react_1.default.createElement("a",{href:link,target:"_blank",className:"mdx-app-card__link"},react_1.default.createElement(lsd_react_1.Button,{size:"large",variant:"outlined"},react_1.default.createElement(lsd_react_1.Typography,{variant:"label1",component:"span"},linkLabel??react_1.default.createElement(react_1.default.Fragment,null,"Visit ",name)),react_1.default.createElement("span",null,react_1.default.createElement(lsd_react_1.PickIcon,{color:"primary"})))));};exports.AppCard=AppCard; - -/***/ }), - -/***/ 84614: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(3309),exports); - -/***/ }), - -/***/ 12077: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.AssetCard=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Icon_1=__webpack_require__(6980);const KeepRatio_1=__webpack_require__(26534);__webpack_require__(89342);/** - * A card component with an image preview and download buttons. - * - * @example - * **Example usage:** - * ```jsx - * import { AssetCard } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx' - * - * - * ``` - */const AssetCard=({title,previewSrc,downloadable,forceDownload=false,...props})=>{const isDownloadable=downloadable&&downloadable.length>0;const onDownload=(event,downloadable)=>{if(!forceDownload)return;event.preventDefault();const{src,filename}=downloadable;const link=document.createElement('a');link.download=filename||typeof title==='string'&&title||'';fetch(src).then(res=>res.blob()).then(blob=>{const url=window.URL.createObjectURL(blob);link.href=url;window.document.body.appendChild(link);link.click();window.document.body.removeChild(link);}).catch(err=>{console.error('failed to download asset:'+err);link.href=src;link.target='_blank';window.document.body.appendChild(link);link.click();window.document.body.removeChild(link);});};return react_1.default.createElement("div",{...props,className:(0,clsx_1.default)(props.className,'mdx-asset-card',isDownloadable&&'mdx-asset-card--downloadable')},react_1.default.createElement("div",{className:"mdx-asset-card__inner"},title&&react_1.default.createElement(lsd_react_1.Typography,{component:"div",variant:"subtitle2",className:"mdx-asset-card__title"},title),react_1.default.createElement(KeepRatio_1.KeepRatio,{width:16,height:9,fullWidth:true,rootProps:{className:'mdx-asset-card__image'}},react_1.default.createElement("img",{src:previewSrc,alt:typeof title==='string'&&title||'asset image'}))),isDownloadable&&react_1.default.createElement("div",{className:"mdx-asset-card__downloadables"},downloadable.map((downloadable,index)=>react_1.default.createElement("a",{href:downloadable.src,target:"_blank",download:true,onClick:event=>onDownload(event,downloadable)},react_1.default.createElement(lsd_react_1.Button,{key:index,variant:"outlined",size:"small",icon:react_1.default.createElement(Icon_1.IconDownload,null)},downloadable.title)))));};exports.AssetCard=AssetCard; - -/***/ }), - -/***/ 64314: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(12077),exports); - -/***/ }), - -/***/ 93152: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.Box=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const makeStyle_1=__webpack_require__(9259);__webpack_require__(58857);function vars(key,_val,defaultValue,unit){const val=typeof _val==='string'||typeof _val==='number'?{xs:_val}:_val;const variables=[];const format=value=>{return typeof value==='number'&&unit?`${value}${unit}`:`${value}`;};['xs','sm','md','lg','xl'].forEach((bp,index)=>{const value=val[bp];if(!value){const prev=variables[index-1]?.[1];variables.push([`${key}-${bp}`,prev?prev:format(defaultValue)]);}else variables.push([`${key}-${bp}`,format(value)]);});return Object.fromEntries(variables);}/** - * A box component that can be used to add top and bottom margins with breakpoints. - * @example - * ```tsx - * import { Box } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx' - * - *

This is some content inside the box.

- *
- * ``` - */const Box=({top=0,bottom=0,className,style={},children,...props})=>{return react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-box'),style:(0,makeStyle_1.makeStyle)({...style},{...vars('mdx-box-top',top,0,'px'),...vars('mdx-box-bottom',bottom,0,'px')}),...props},children);};exports.Box=Box; - -/***/ }), - -/***/ 32765: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(93152),exports); - -/***/ }), - -/***/ 40299: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.CallToActionButton=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(16427);/** - * A call-to-action button that can be used in MDX pages. - * - * @example - * ```jsx - * import { CallToActionButton } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx'; - * - * - * Join our community - * - * ``` - */const CallToActionButton=({className,variant='filled',size='large',children,...props})=>{return react_1.default.createElement(Link_1.default,{className:(0,clsx_1.default)('mdx-cta-button',className),...props},react_1.default.createElement(lsd_react_1.Typography,{component:"span",variant:size==='large'?'label1':'label2'},react_1.default.createElement(lsd_react_1.Button,{size:size,variant:variant},children)));};exports.CallToActionButton=CallToActionButton; - -/***/ }), - -/***/ 54442: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(40299),exports); - -/***/ }), - -/***/ 40824: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.CallToActionSection=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const index_1=__webpack_require__(65701);__webpack_require__(44423);const Icon_1=__webpack_require__(6980);/** - * A call-to-action section component that can be used in MDX pages. - * - * @example - * ```tsx - * import { CallToActionSection } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx'; - * - * - * ``` - * - * With a list: - * ```tsx - * import { CallToActionSection } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx'; - * - * - * Follow the detailed
step-by-step guide here - * - * } - * list={[ - * { - * title: "Simple setup", - * description: "Run integrated Nimbus Beacon Node and Validator Client together." - * }, - * { - * title: "Use Nimbus Beacon node", - * description: "Run Nimbus Beacon Node with an alternative validator client." - * }, - * { - * title: "Use Nimbus Validator client", - * description: "Run Nimbus Validator Client with an alternative Beacon Node" - * } - * ]} - * label="Get Nimbus" - * target="_blank" - * href="https://nimbus.guide/quick-start.html" - * /> - * ``` - */const CallToActionSection=({label,href,title,columns=1,description,list=[],target,border=true,align='unset',className,children,variant='outlined',ctaPosition='bottom',...props})=>{const withDescription=!!description;const withList=list.length>0;const withButton=!!href;const display=title&&!withDescription&&!withButton&&!withList?'title-only':title&&!description&&!withList&&withButton?'title-button':title&&description&&columns===2?`full-width`:title&&description&&list.length>0?'list':'simple';const button=href&&ctaPosition==='top'&&react_1.default.createElement(index_1.CallToActionButton,{target:target,href:href,className:"mdx-cta-section__link",variant:variant},label);return react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-cta-section',`mdx-cta-section--${display}`,!border&&'mdx-cta-section--no-border'),...props},react_1.default.createElement("div",{className:(0,clsx_1.default)('mdx-cta-section__container',align!=='unset'&&`mdx-cta-section--align-${align}`)},react_1.default.createElement("div",{className:"mdx-cta-section__header"},react_1.default.createElement(lsd_react_1.Typography,{component:"h2",className:(0,clsx_1.default)('mdx-cta-section__title')},title),react_1.default.createElement("div",{className:"mdx-cta-section__header__desktop-button"},button)),description&&react_1.default.createElement(lsd_react_1.Typography,{component:"h3",className:"mdx-cta-section__description"},description),react_1.default.createElement("div",{className:"mdx-cta-section__header__mobile-button"},button),href&&ctaPosition==='bottom'&&react_1.default.createElement(index_1.CallToActionButton,{target:target,href:href,className:"mdx-cta-section__link",variant:variant},label)),list.length>0&&react_1.default.createElement("div",{className:(0,clsx_1.default)('mdx-cta-section__list',!border&&'mdx-cta-section--no-border')},list.map((option,index)=>{const content=react_1.default.createElement("div",{className:"mdx-cta-section__list-item",key:index},react_1.default.createElement("a",{className:"mdx-cta-section__list-item-link",href:option?.href,target:option.target},react_1.default.createElement(lsd_react_1.Typography,{component:"div",variant:"body2",className:"mdx-cta-section__item-title"},option.title,react_1.default.createElement(Icon_1.IconExternalLink,{size:"m"}))),react_1.default.createElement(lsd_react_1.Typography,{variant:"h4",component:"p",className:"mdx-cta-section__item-description"},option.description));return option.href?react_1.default.createElement("a",{href:option.href,target:"_blank"},content):content;})));};exports.CallToActionSection=CallToActionSection; - -/***/ }), - -/***/ 78256: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(40824),exports); - -/***/ }), - -/***/ 63906: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.DocMetadata=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const useThemeOptions_1=__webpack_require__(38840);__webpack_require__(80333);const useDocMetadata_1=__webpack_require__(98906);const DocMetadata=({className,children,...props})=>{const{date,authors}=(0,useDocMetadata_1.useDocMetadata)();const{content:{authorPage}={}}=(0,useThemeOptions_1.useDocThemeOptions)();return react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-doc-metadata'),...props},date&&react_1.default.createElement(lsd_react_1.Typography,{variant:"body2"},date),authors&&authors.length>0&&react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(lsd_react_1.Typography,{variant:"body2"},"by",' ',authors.map((author,index)=>react_1.default.createElement(react_1.default.Fragment,{key:author.key},authorPage?react_1.default.createElement(Link_1.default,{to:`author/${author.key}`},author.name):author.name,index { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(63906),exports); - -/***/ }), - -/***/ 98906: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useDocMetadata=void 0;const tslib_1=__webpack_require__(70655);const internal_1=__webpack_require__(18279);const useThemeOptions_1=__webpack_require__(38840);const format_1=tslib_1.__importDefault(__webpack_require__(99486));const useDocMetadata=()=>{const options=(0,useThemeOptions_1.useDocThemeOptions)();const{content:{authors=[]}={}}=options;const{frontMatter={}}=(0,internal_1.useDoc)();const{author=[],date}=frontMatter;const docAuthors=(Array.isArray(author)?author:[author]).map(key=>authors.find(a=>key===a.key)).filter(a=>!!a);return{date:date?(0,format_1.default)(new Date(date),'MMM d yyyy'):'',authors:docAuthors};};exports.useDocMetadata=useDocMetadata; - -/***/ }), - -/***/ 59669: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.EventAbout=void 0;const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(96477);const lsd_react_1=__webpack_require__(31665);const EventAbout=({children})=>{return react_1.default.createElement("div",{className:"mdx-event-about__container"},react_1.default.createElement(lsd_react_1.Typography,{variant:"h2",component:"p",className:"mdx-event-about__title"},"About"),react_1.default.createElement(lsd_react_1.Typography,{variant:"body1"},children));};exports.EventAbout=EventAbout; - -/***/ }), - -/***/ 92302: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(59669),exports); - -/***/ }), - -/***/ 12610: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.EventBanner=void 0;const tslib_1=__webpack_require__(70655);const ThemedImage_1=tslib_1.__importDefault(__webpack_require__(25812));const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(21918);const EventBanner=({src})=>{return react_1.default.createElement(ThemedImage_1.default,{sources:{dark:src,light:src},alt:'event thumbnail',className:"mdx-event-banner__thumbnail"});};exports.EventBanner=EventBanner; - -/***/ }), - -/***/ 71225: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(12610),exports); - -/***/ }), - -/***/ 69587: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.EventCTA=void 0;const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(46383);const lsd_react_1=__webpack_require__(31665);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const Icon_1=__webpack_require__(6980);const EventCTA=({title,label,link,linkProps})=>{return react_1.default.createElement("div",{className:"mdx-event-cta__container"},title&&react_1.default.createElement(lsd_react_1.Typography,{variant:"h2",component:"h2",className:"mdx-event-cta__title"},title),react_1.default.createElement(Link_1.default,{to:link,...linkProps},react_1.default.createElement(lsd_react_1.Button,{className:"mdx-event-cta__button"},react_1.default.createElement(lsd_react_1.Typography,{variant:"body1"},label),react_1.default.createElement(Icon_1.IconExternalLink,null))));};exports.EventCTA=EventCTA; - -/***/ }), - -/***/ 26498: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(69587),exports); - -/***/ }), - -/***/ 7742: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.EventCard=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const ThemedImage_1=tslib_1.__importDefault(__webpack_require__(25812));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(43012);const EventCard=({thumbnail,title,date,location,...props})=>{return react_1.default.createElement("a",{target:"_self",...props,className:(0,clsx_1.default)(props.className,'mdx-event-card')},react_1.default.createElement(ThemedImage_1.default,{sources:{dark:thumbnail,light:thumbnail},alt:title??'event thumbnail',className:"mdx-event-card__thumbnail"}),react_1.default.createElement(lsd_react_1.Typography,{component:"h5",variant:"subtitle1",className:"mdx-event-card__title"},title),react_1.default.createElement("div",{className:"mdx-event-card__row"},react_1.default.createElement("div",{className:"mdx-event-card__info"},react_1.default.createElement(lsd_react_1.Typography,{className:"mdx-event-card__label",variant:"body3"},"Date"),react_1.default.createElement(lsd_react_1.Typography,{variant:"body3"},date)),react_1.default.createElement("div",{className:"mdx-event-card__info"},react_1.default.createElement(lsd_react_1.Typography,{className:"mdx-event-card__label",variant:"body3"},"Location"),react_1.default.createElement(lsd_react_1.Typography,{variant:"body3"},location))));};exports.EventCard=EventCard; - -/***/ }), - -/***/ 85535: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(7742),exports); - -/***/ }), - -/***/ 2310: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.EventCardList=exports.EventStatus=void 0;const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importStar(__webpack_require__(67294));__webpack_require__(74917);const lsd_react_1=__webpack_require__(31665);const __1=__webpack_require__(65701);const lsd_react_2=__webpack_require__(31665);var EventStatus;(function(EventStatus){EventStatus["UPCOMING"]="Upcoming";EventStatus["PAST"]="Past";})(EventStatus=exports.EventStatus||(exports.EventStatus={}));const LIMIT=8;const EventCardList=({upcoming,past,...props})=>{const[activeTab,setActiveTab]=(0,react_1.useState)(EventStatus.UPCOMING);const data=activeTab===EventStatus.UPCOMING?upcoming:past;const[showMore,setShowMore]=(0,react_1.useState)(data?.length>LIMIT);const[count,setCount]=(0,react_1.useState)(LIMIT);const handleTabChange=tab=>{setActiveTab(tab);setCount(LIMIT);setShowMore(data?.length>LIMIT);};const handleShowMore=()=>{setCount(prev=>prev+LIMIT);if(count+6>=data?.length){setShowMore(false);}};return react_1.default.createElement("div",{className:"mdx-event-card-list__container",...props},react_1.default.createElement(lsd_react_2.Tabs,{activeTab:activeTab,onChange:handleTabChange,className:"mdx-event-card-list__tabs"},react_1.default.createElement(lsd_react_2.TabItem,{key:'upcoming',name:`Upcoming`},`Upcoming`),react_1.default.createElement(lsd_react_2.TabItem,{key:'past',name:`Past`},`Past`)),react_1.default.createElement("div",null,react_1.default.createElement(__1.Box,{top:{xs:80,sm:96},bottom:80},react_1.default.createElement(__1.Grid,{xs:{cols:1,gap:'80px 16px'},md:{cols:4}},data.slice(0,count).map((event,index)=>react_1.default.createElement(__1.Grid.Item,{xs:1,key:index},react_1.default.createElement(__1.EventCard,{...event}))),data.length===0?react_1.default.createElement(lsd_react_1.Typography,null,"No events found."):null)),showMore&&react_1.default.createElement(lsd_react_1.Button,{className:"mdx-event-card-list__button",onClick:handleShowMore,size:"large"},"See more")));};exports.EventCardList=EventCardList; - -/***/ }), - -/***/ 42174: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(2310),exports); - -/***/ }), - -/***/ 30862: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.EventHeader=void 0;const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(14249);const lsd_react_1=__webpack_require__(31665);const EventHeader=({title,description})=>{return react_1.default.createElement("div",{className:"mdx-event-header__container"},react_1.default.createElement(lsd_react_1.Typography,{variant:"h1",component:"h1",className:"mdx-event-header__label"},title),react_1.default.createElement(lsd_react_1.Typography,{variant:"subtitle1",className:"mdx-event-header__content"},description));};exports.EventHeader=EventHeader; - -/***/ }), - -/***/ 45320: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(30862),exports); - -/***/ }), - -/***/ 74350: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.EventInfo=void 0;const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(31443);const lsd_react_1=__webpack_require__(31665);const EventInfo=({label,content})=>{return react_1.default.createElement("div",{className:"mdx-event-info__container"},react_1.default.createElement(lsd_react_1.Typography,{variant:"body2",className:"mdx-event-info__label"},label),react_1.default.createElement(lsd_react_1.Typography,{variant:"body1",className:"mdx-event-info__content"},content));};exports.EventInfo=EventInfo; - -/***/ }), - -/***/ 94030: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(74350),exports); - -/***/ }), - -/***/ 46450: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.EventProfile=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const ThemedImage_1=tslib_1.__importDefault(__webpack_require__(25812));const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(56954);const Icon_1=__webpack_require__(6980);const EventProfile=({image,name,role,email,linkedin,...props})=>{return react_1.default.createElement("div",{...props,className:'mdx-event-profile'},react_1.default.createElement(ThemedImage_1.default,{sources:{dark:image,light:image},alt:image??'event profile',className:"mdx-event-profile__image"}),react_1.default.createElement("div",{className:"mdx-event-profile__info"},react_1.default.createElement(lsd_react_1.Typography,{component:"p",variant:"subtitle1",className:"mdx-event-profile__title"},name),react_1.default.createElement(lsd_react_1.Typography,{variant:"body2",className:"mdx-event-profile__role"},role),react_1.default.createElement("div",{className:"mdx-event-profile__social"},email&&react_1.default.createElement("a",{href:`mailto:${email}`,target:"_blank",rel:"noopener noreferrer"},react_1.default.createElement(Icon_1.IconEmail,null)),linkedin&&react_1.default.createElement("a",{href:linkedin,target:"_blank",rel:"noopener noreferrer"},react_1.default.createElement(Icon_1.IconLinkedin,null)))));};exports.EventProfile=EventProfile; - -/***/ }), - -/***/ 7472: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(46450),exports); - -/***/ }), - -/***/ 49310: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.EventProfileList=void 0;const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(13376);const lsd_react_1=__webpack_require__(31665);const __1=__webpack_require__(65701);const EventProfileList=({title,description,data})=>{return react_1.default.createElement("div",{className:"mdx-event-profile-list__container"},title&&react_1.default.createElement(lsd_react_1.Typography,{variant:"h2",component:"h2",className:"mdx-event-profile-list__title"},title),description&&react_1.default.createElement(lsd_react_1.Typography,{variant:"subtitle1"},description),react_1.default.createElement(__1.Box,{top:40},react_1.default.createElement(__1.Grid,{xs:{cols:1,gap:'16px'},md:{cols:3}},data.map((event,index)=>react_1.default.createElement(__1.Grid.Item,{xs:1,key:index},react_1.default.createElement(__1.EventProfile,{...event}))))));};exports.EventProfileList=EventProfileList; - -/***/ }), - -/***/ 24812: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(49310),exports); - -/***/ }), - -/***/ 58135: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.ExternalResourceCard=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const ThemedImage_1=tslib_1.__importDefault(__webpack_require__(25812));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Icon_1=__webpack_require__(6980);__webpack_require__(81659);const KeepRatio_1=__webpack_require__(26534);/** - * A card component with an optional image preview for displaying information about an external resource. - * - * @example - * **Example usage:** - * ```jsx - * import { ExternalResourceCard } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx' - * - * - * ``` - */const ExternalResourceCard=({title,logoSrc,logoSrcDark,description,previewSrc,previewSrcDark,...props})=>{const withPreview=!!(previewSrc||previewSrcDark);return react_1.default.createElement("a",{target:"_blank",...props,className:(0,clsx_1.default)(props.className,'mdx-erc',withPreview&&'mdx-erc--with-preview')},withPreview&&react_1.default.createElement(KeepRatio_1.KeepRatio,{width:16,height:9,fullWidth:true},react_1.default.createElement(ThemedImage_1.default,{sources:{dark:previewSrcDark??previewSrc??'',light:previewSrc??previewSrcDark??''},alt:typeof title==='string'&&title||'preview image',className:"mdx-erc__preview-image"})),react_1.default.createElement("div",{className:"mdx-erc__inner"},(logoSrc||logoSrcDark)&&react_1.default.createElement(ThemedImage_1.default,{sources:{dark:logoSrcDark??logoSrc??'',light:logoSrc??logoSrcDark??''},alt:typeof title==='string'&&title||'logo',className:"mdx-erc__logo"}),react_1.default.createElement(lsd_react_1.Typography,{variant:"body1",component:"div",className:"mdx-erc__title"},title),description&&react_1.default.createElement(lsd_react_1.Typography,{variant:"label2",component:"div",className:"mdx-erc__description"},description)),react_1.default.createElement("div",{className:"mdx-erc__icon"},react_1.default.createElement(Icon_1.IconExternalLink,{className:"mdx-erc__external-link"})));};exports.ExternalResourceCard=ExternalResourceCard; - -/***/ }), - -/***/ 24084: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(58135),exports); - -/***/ }), - -/***/ 24646: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.FeatureList=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(44308);function pad(num,size){num=num.toString();while(num.length - * - * Read More - * - * - * ``` - */const FeatureList=({title='Features',alignment='bottom',features=[],className,ctaPosition='bottom',indexStyle='circle',borderStyle='solid',children,...props})=>{return react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-feature-list',`mdx-feature-list--${alignment}-aligned`,`mdx-feature-list--cta-${ctaPosition}`,borderStyle==='none'&&'mdx-feature-list--border-none'),...props},react_1.default.createElement("div",{className:"mdx-feature-list__header"},react_1.default.createElement(lsd_react_1.Typography,{variant:"h2",component:"h2",className:"mdx-feature-list__title"},title),children&&ctaPosition==='top'&&react_1.default.createElement("div",{className:"mdx-feature-list__extra"},children)),react_1.default.createElement("div",{className:"mdx-feature-list__list"},features.map((feature,index)=>react_1.default.createElement("div",{key:index,className:(0,clsx_1.default)('mdx-feature-list__feature',borderStyle==='none'&&'mdx-feature-list--border-none')},react_1.default.createElement("div",{className:"mdx-feature-list__feature-inner"},indexStyle==='circle'?react_1.default.createElement(lsd_react_1.Typography,{variant:"subtitle1",component:"div",className:(0,clsx_1.default)('mdx-feature-list__feature-index--circle')},index+1):react_1.default.createElement(lsd_react_1.Typography,{variant:"subtitle1",component:"div",className:(0,clsx_1.default)('mdx-feature-list__feature-index--number')},"[",pad(index+1,2),"]"),react_1.default.createElement(lsd_react_1.Typography,{variant:"h3",component:"h3",className:"mdx-feature-list__feature-title"},feature.title),react_1.default.createElement(lsd_react_1.Typography,{variant:"body1",component:"p",className:"mdx-feature-list__feature-description"},react_1.default.createElement("span",null,feature.description))),react_1.default.createElement("div",{className:(0,clsx_1.default)('mdx-feature-list__feature-border',borderStyle==='none'&&'mdx-feature-list__feature-border--none')})))),children&&ctaPosition==='bottom'&&react_1.default.createElement("div",{className:"mdx-feature-list__extra"},children));};exports.FeatureList=FeatureList; - -/***/ }), - -/***/ 34155: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(24646),exports); - -/***/ }), - -/***/ 51499: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.GithubChallenges=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const githubChallengesDummyData_1=__webpack_require__(696);const SingleGithubChallenge_1=__webpack_require__(79527);const GithubChallengesHeader=({message})=>{return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(lsd_react_1.Typography,{variant:"h1",className:"mdx-ghc__header"},"Open challenges"),!!message&&react_1.default.createElement(lsd_react_1.Typography,{variant:"body1"},message));};const hasChallenges=githubChallenges=>{return Array.isArray(githubChallenges)&&!!githubChallenges.length;};const getIssuesFromRawData=rawData=>{let issues=[];Object.keys(rawData).forEach(key=>{if(!isNaN(Number(key))){// Extract the array of issues for each repository -const repoIssues=Object.values(rawData[key])[0];// each object should have only one key-value pair -if(Array.isArray(repoIssues)){issues=issues.concat(repoIssues);}}});return issues;};const GithubChallenges=({challengesData,useDummyData,subheaderText,filterByName,...props})=>{let challengesArray=useDummyData?[githubChallengesDummyData_1.dummyGithubIssue]:getIssuesFromRawData(challengesData);if(!challengesArray||!hasChallenges(challengesArray)){return react_1.default.createElement(GithubChallengesHeader,{message:"No challenges to show"});}if(filterByName){try{const regex=new RegExp(filterByName,'i');// 'i' for case-insensitive -challengesArray=challengesArray?.filter(issue=>regex.test(issue.title));}catch(error){console.error('Invalid regex pattern:',error);}}return react_1.default.createElement("div",{...props},react_1.default.createElement(GithubChallengesHeader,null),!!subheaderText&&react_1.default.createElement(lsd_react_1.Typography,{variant:"body1",className:"mdx-ghc-subheader-text",component:"div"},subheaderText),challengesArray.map(issue=>react_1.default.createElement(SingleGithubChallenge_1.SingleGithubChallenge,{key:issue.id,issue:issue})));};exports.GithubChallenges=GithubChallenges; - -/***/ }), - -/***/ 79527: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.SingleGithubChallenge=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Icon_1=__webpack_require__(6980);__webpack_require__(38131);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const getProjectNames=issue=>{const projectNames=issue.projects.map(project=>project.name);if(projectNames.length===0){return'';}return Array.from(new Set(projectNames)).join(', ');};const extractUniqueParticipants=issue=>{const participants=new Map();// Add the user who created the issue -participants.set(issue.user.login,{name:issue.user.login,avatarUrl:issue.user.avatarUrl});// Add all assignees -issue.assignees.forEach(assignee=>{participants.set(assignee.login,{name:assignee.login,avatarUrl:assignee.avatarUrl});});// Add all comment authors -issue.comments.forEach(comment=>{participants.set(comment.author.login,{name:comment.author.login,avatarUrl:comment.author.avatarUrl});});return Array.from(participants.values());};function addSizeToAvatarUrl(avatarUrl,size=24){const url=new URL(avatarUrl);const params=new URLSearchParams(url.search);params.set('s',size.toString());// Prepend the size parameter to the start of the query string -url.search=Array.from(params.entries()).map(([key,value])=>`${key}=${value}`).join('&');return url.toString();}const SingleGithubChallenge=({issue})=>{const participants=extractUniqueParticipants(issue);const projectsConst=getProjectNames(issue);const hasProjects=projectsConst!=='';const hasMilestone=!!issue.milestone;const elementsToRender=[];if(hasProjects){elementsToRender.push(react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(lsd_react_1.Typography,{variant:"body3",className:"mdx-ghc__label"},projectsConst.includes(', ')?'Projects':'Project'),react_1.default.createElement(lsd_react_1.Typography,{variant:"body3",className:"mdx-ghc__project-name"},projectsConst)));}if(hasMilestone){elementsToRender.push(react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(lsd_react_1.Typography,{variant:"body3",className:"mdx-ghc__label"},"Milestone"),react_1.default.createElement(lsd_react_1.Typography,{variant:"body3",className:"mdx-ghc__milestone-text"},issue.milestone)));}return react_1.default.createElement("div",{className:"mdx-ghc__container"},react_1.default.createElement(Link_1.default,{href:issue.url,className:"mdx-ghc__issue-title-link"},react_1.default.createElement(lsd_react_1.Typography,{variant:"h5",className:"mdx-ghc__issue-title"},issue.title)),react_1.default.createElement("div",{className:"mdx-ghc__challenge-labels"},issue.labels.map((label,index)=>react_1.default.createElement(lsd_react_1.Typography,{variant:"body3",key:index,className:"mdx-ghc__challenge-label"},label))),react_1.default.createElement("div",{className:"mdx-ghc__issue-content-grid"},react_1.default.createElement(lsd_react_1.Typography,{variant:"body3",className:"mdx-ghc__label"},"Participants"),react_1.default.createElement("div",{className:"mdx-ghc__participant-photo-container"},react_1.default.createElement(lsd_react_1.Typography,{variant:"body3",className:"mdx-ghc__comment-count",component:"div"},participants.length),participants.map((participant,index)=>react_1.default.createElement("img",{key:index,className:"mdx-ghc__participant-photo",src:addSizeToAvatarUrl(participant.avatarUrl),alt:participant.name}))),elementsToRender.map((element,index)=>react_1.default.createElement(react_1.default.Fragment,{key:index},element))),react_1.default.createElement(Link_1.default,{href:issue.url,className:"mdx-ghc__view-on-github-link"},react_1.default.createElement(lsd_react_1.Button,{className:"mdx-ghc__view-on-github-button",icon:react_1.default.createElement(Icon_1.IconExternalLink,null)},"View on GitHub")));};exports.SingleGithubChallenge=SingleGithubChallenge; - -/***/ }), - -/***/ 696: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.dummyGithubIssue=void 0;// Only for dev purposes - prevents making multiple requests to the API while developing. -exports.dummyGithubIssue={id:'12345',title:'Bug in pagination',body:'When navigating to the second page, the first item repeats.',url:'https://github.com/user/repo/issues/12345',user:{login:'user123',avatarUrl:'https://avatars.githubusercontent.com/u/8811422?v=4'},labels:['bug','frontend'],commentCount:3,comments:[{id:'c1',author:{login:'alice123',avatarUrl:'https://avatars.githubusercontent.com/u/8811422?v=4'},body:'I have also noticed this issue. Working on a fix now.',createdAt:'2021-01-01T12:00:00Z'},{id:'c2',author:{login:'bob456',avatarUrl:'https://avatars.githubusercontent.com/u/8811422?v=4'},body:'Any updates on this?',createdAt:'2021-01-02T15:30:00Z'},{id:'c3',author:{login:'jaquim',avatarUrl:'https://avatars.githubusercontent.com/u/8811422?v=4'},body:'I like turtles.',createdAt:'2021-01-03T09:45:00Z'}],assignees:[{login:'alice123',avatarUrl:'https://avatars.githubusercontent.com/u/8811422?v=4'},{login:'bob456',avatarUrl:'https://avatars.githubusercontent.com/u/8811422?v=4'}],milestone:'v1.0.0',created_at:'2020-12-31T11:00:00Z',updated_at:'2021-01-04T13:00:00Z',projects:[{name:'Awesome Project'}]}; - -/***/ }), - -/***/ 47513: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(51499),exports); - -/***/ }), - -/***/ 7859: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.Grid=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const react_1=__webpack_require__(16657);const styled_1=tslib_1.__importDefault(__webpack_require__(30714));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_2=tslib_1.__importStar(__webpack_require__(67294));const lsd_utils_1=__webpack_require__(59567);const ScrollButtons_1=__webpack_require__(3796);const GridItem_1=__webpack_require__(18031);const Grid=({actions,leftLabel='',rightLabel='',spacingButtons=false,children,...props})=>{const ref=(0,react_2.useRef)(null);return react_2.default.createElement(GridRoot,{...props,className:(0,clsx_1.default)(props.className,'mdx-grid')},react_2.default.createElement("div",{className:"mdx-grid__actions"},actions,react_2.default.createElement(ScrollButtons_1.ScrollButtons,{containerRef:ref,className:"mdx-grid__scroll",leftLabel:leftLabel,rightLabel:rightLabel,spacing:spacingButtons?'spaced':'grouped'})),react_2.default.createElement("div",{ref:ref,className:(0,clsx_1.default)('mdx-grid__content','hidden-scrollbar')},children));};exports.Grid=Grid;exports.Grid.Item=GridItem_1.GridItem;const GridRoot=styled_1.default.div` - width: 100%; - - .mdx-grid__scroll { - display: flex; - } - - .mdx-grid__content { - display: grid; - gap: var(--grid-gap); - grid-template-columns: repeat(var(--grid-cols), minmax(0, 1fr)); - overflow: hidden; - } - - .mdx-grid__actions { - display: flex; - flex-direction: row; - align-items: center; - gap: 1rem; - - & > * { - margin-bottom: 3rem; - } - } - - ${props=>lsd_react_1.THEME_BREAKPOINTS.map(key=>{if(!props[key])return null;const bp=props[key];return lsd_utils_1.lsdUtils.responsive(props.theme,key,'up')((0,react_1.css)` - ${typeof bp.cols!=='undefined'&&` - --grid-cols: ${bp.cols}; - `} - - ${typeof bp.gap!=='undefined'&&` - --grid-gap: ${bp.gap}; - `} - - ${(typeof bp.wrap==='undefined'||bp.wrap===true)&&(0,react_1.css)` - .mdx-grid__scroll { - display: none; - } - .mdx-grid__content { - display: grid; - flex-wrap: unset; - overflow-x: unset; - overflow-y: unset; - scroll-snap-type: unset; - } - `} - - ${typeof bp.wrap!=='undefined'&&bp.wrap===false&&(0,react_1.css)` - .mdx-grid__scroll { - display: flex; - } - .mdx-grid__content { - display: flex; - flex-wrap: nowrap; - overflow-x: scroll; - overflow-y: hidden; - scroll-snap-type: x mandatory; - } - `} - - ${bp.scrollButtons===false&&(0,react_1.css)` - .mdx-grid__scroll { - display: none; - } - `} - `);})} -`; - -/***/ }), - -/***/ 18031: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.GridItem=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const styled_1=tslib_1.__importDefault(__webpack_require__(30714));const lsd_react_1=__webpack_require__(31665);const lsd_utils_1=__webpack_require__(59567);const react_2=__webpack_require__(16657);const GridItem=({children,...props})=>{return react_1.default.createElement(Root,{...props,className:(0,clsx_1.default)(props.className)},children);};exports.GridItem=GridItem;const Root=styled_1.default.div` - ${props=>lsd_react_1.THEME_BREAKPOINTS.map(key=>{if(!props[key])return null;const bp=props[key];return lsd_utils_1.lsdUtils.responsive(props.theme,key,'up')((0,react_2.css)` - grid-column: span ${bp}; - flex-basis: calc(100% / var(--grid-cols) * ${bp}); - `);})} -`; - -/***/ }), - -/***/ 78378: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(7859),exports);tslib_1.__exportStar(__webpack_require__(18031),exports); - -/***/ }), - -/***/ 94787: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useHero=exports.HeroContext=void 0;const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importStar(__webpack_require__(67294));exports.HeroContext=react_1.default.createContext({size:'medium'});const useHero=()=>(0,react_1.useContext)(exports.HeroContext);exports.useHero=useHero; - -/***/ }), - -/***/ 53255: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.Hero=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Hero_context_1=__webpack_require__(94787);__webpack_require__(23081);/** - * A hero component that displays a large banner at the top of a page. - * - * @example - * ```tsx - * import { - * Hero, - * HeroTitle, - * HeroDescription, - * HeroVideo, - * HeroActions, - * HeroAction, - * } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx' - * - * - * - * - * {'Light and Performant Clients, for All Ethereum Validators'} - * - * - * {'Ethereum validators of all sizes trust Nimbus to run their nodes. From large node operators, to solo stakers on a Raspberry Pi.'} - * - * - * - * Get Nimbus - * - * - * - * - * - * - * - * - * - * ``` - */const Hero=({size='medium',className,children,verticalAlign='top',...props})=>{return react_1.default.createElement(Hero_context_1.HeroContext.Provider,{value:{size}},react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-hero',`mdx-hero--${size}`,`mdx-hero--${verticalAlign}`),...props},children));};exports.Hero=Hero; - -/***/ }), - -/***/ 72295: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(53255),exports); - -/***/ }), - -/***/ 23908: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.HeroAction=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(54562);const HeroAction=({size='large',variant='outlined',className,children,...props})=>{return react_1.default.createElement(Link_1.default,{className:(0,clsx_1.default)(className,'mdx-hero-action',`mdx-hero-action--${size}`),...props},react_1.default.createElement(lsd_react_1.Button,{variant:variant,size:size},react_1.default.createElement(lsd_react_1.Typography,{component:"span",variant:"label1",style:{color:'inherit'}},children)));};exports.HeroAction=HeroAction; - -/***/ }), - -/***/ 48126: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(23908),exports); - -/***/ }), - -/***/ 82897: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.HeroActions=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(70892);const HeroActions=({className,children,...props})=>{return react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-hero-actions'),...props},children);};exports.HeroActions=HeroActions; - -/***/ }), - -/***/ 16693: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(82897),exports); - -/***/ }), - -/***/ 4891: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.HeroAsset=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(21519);const HeroAsset=({className,children,...props})=>{return react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-hero-asset'),...props},children);};exports.HeroAsset=HeroAsset; - -/***/ }), - -/***/ 38716: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(4891),exports); - -/***/ }), - -/***/ 28795: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.HeroDescription=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Hero_context_1=__webpack_require__(94787);__webpack_require__(66004);const HeroDescription=({size:sizeProp,className,uppercase=false,children,...props})=>{const ctx=(0,Hero_context_1.useHero)();const size=sizeProp??(ctx?ctx.size:'medium');return react_1.default.createElement(lsd_react_1.Typography,{variant:'h4',className:(0,clsx_1.default)(className,'mdx-hero-description',`mdx-hero-description--${size}`,uppercase?'mdx-hero-description--uppercase':''),...props},children);};exports.HeroDescription=HeroDescription; - -/***/ }), - -/***/ 22447: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(28795),exports); - -/***/ }), - -/***/ 78274: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.HeroInfo=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const useHydrated_1=__webpack_require__(67713);const Hero_context_1=__webpack_require__(94787);const index_1=__webpack_require__(65701);__webpack_require__(2388);const HeroInfo=({size:sizeProp,className,hideScrollToBottom=false,children,...props})=>{const ctx=(0,Hero_context_1.useHero)();const hydrated=(0,useHydrated_1.useHydrated)();const size=sizeProp?sizeProp:ctx?ctx.size:'medium';return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-hero-info',`mdx-hero-info--${size}`),...props},children),hydrated&&!hideScrollToBottom&&react_1.default.createElement(index_1.ScrollToBottom,null));};exports.HeroInfo=HeroInfo; - -/***/ }), - -/***/ 67812: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(78274),exports); - -/***/ }), - -/***/ 84773: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.AsciiRenderer=void 0;const tslib_1=__webpack_require__(70655);const HeroModel_configs_1=__webpack_require__(44169);const fiber_1=__webpack_require__(64232);const react_1=tslib_1.__importStar(__webpack_require__(67294));const three_stdlib_1=__webpack_require__(84849);const ui_utils_1=__webpack_require__(24052);function useAsciiEffect(config={}){const{renderIndex=HeroModel_configs_1.defaultAsciiConfigs.renderIndex,characters=HeroModel_configs_1.defaultAsciiConfigs.characters,invert=HeroModel_configs_1.defaultAsciiConfigs.invert,color=HeroModel_configs_1.defaultAsciiConfigs.color,resolution=HeroModel_configs_1.defaultAsciiConfigs.resolution,bgColor=HeroModel_configs_1.defaultAsciiConfigs.bgColor,fgColor=HeroModel_configs_1.defaultAsciiConfigs.fgColor,textShadowSize=HeroModel_configs_1.defaultAsciiConfigs.textShadowSize,withTextShadow=false}=config;const{gl,size,scene,camera,viewport}=(0,fiber_1.useThree)();const effect=(0,react_1.useMemo)(()=>{const effect=new three_stdlib_1.AsciiEffect(gl,characters,{invert,color,resolution});effect.domElement.style.position='absolute';effect.domElement.style.top='0px';effect.domElement.style.left='0px';effect.domElement.style.pointerEvents='none';return effect;},[characters,invert,color,resolution]);(0,react_1.useLayoutEffect)(()=>{effect.domElement.style.color=fgColor;// effect.domElement.style.backgroundColor = bgColor -},[fgColor,bgColor]);// Append on mount, remove on unmount -(0,react_1.useEffect)(()=>{gl.domElement.style.opacity='0';gl.domElement.parentNode.appendChild(effect.domElement);if(withTextShadow){const style=document.createElement('style');style.innerHTML=`table *{text-shadow: ${(0,ui_utils_1.generateTextShadow)(textShadowSize)};`;effect.domElement.appendChild(style);}return()=>{gl.domElement.style.opacity='1';gl.domElement.parentNode.removeChild(effect.domElement);};},[effect]);// Set size -(0,react_1.useEffect)(()=>{effect.setSize(size.width,size.height);},[effect,size]);// Take over render-loop (that is what the index is for) -(0,fiber_1.useFrame)(state=>{effect.render(scene,camera);},renderIndex);}const AsciiRenderer=configs=>{useAsciiEffect(configs);return react_1.default.createElement(react_1.default.Fragment,null);};exports.AsciiRenderer=AsciiRenderer; - -/***/ }), - -/***/ 35901: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.Controls=void 0;const tslib_1=__webpack_require__(70655);const HeroModel_configs_1=__webpack_require__(44169);const react_1=tslib_1.__importStar(__webpack_require__(67294));const useScrollY_1=__webpack_require__(40213);const fiber_1=__webpack_require__(64232);const drei_1=__webpack_require__(90278);const ui_utils_1=__webpack_require__(24052);const lerp=(a,b,t)=>(1-t)*a+t*b;let targetPos=(/* unused pure expression or super */ null && ([0,0,0]));// function calculateCameraPosition(scrollY: number): [number, number, number] { -// const baseXZ = -1.6 // Base x and z component at scrollY = 0 -// const baseY = 4.04 // Base y component at scrollY = 0 -// const rateXZ = -0.01 // Rate of change for x and z components -// const rateY = 0.00185 // Rate of change for y component -// const deltaX = baseXZ + rateXZ * scrollY - baseXZ -// const deltaY = baseY + rateY * scrollY - baseY -// const deltaZ = baseXZ + rateXZ * scrollY - baseXZ -// return [deltaX, deltaY, deltaZ] -// } -const MAX_SCROLL=400;function calculateVector(scrollY,scrollYMax,preset,target){// Calculate the lerp factor based on the scroll position -const t=Math.min(scrollY,scrollYMax)/scrollYMax;const newVector=[0,0,0];for(let i=0;i<3;i++){// Perform a lerp between the preset and target for each component -// @ts-ignore -newVector[i]=lerp(preset[i],target[i],t);}return newVector;}const Controls=({rotateSpeed=HeroModel_configs_1.ROTATE_SPEED,enableZoom=true,enableRotateOnScroll=true,preset,targetPreset,children,...props})=>{const ref=(0,react_1.useRef)();const scrollY=(0,useScrollY_1.useScrollY)();const{camera,size}=(0,fiber_1.useThree)();const controls=(0,react_1.useRef)();const[lockOrbit,setLockOrbit]=react_1.default.useState(false);const[scale,setScale]=react_1.default.useState(1);const[posY,setPosY]=react_1.default.useState(0);(0,fiber_1.useFrame)((state,delta)=>{ref.current.rotation.y-=delta*((0,ui_utils_1.isMobile)()?0.6*rotateSpeed:rotateSpeed);});(0,react_1.useEffect)(()=>{const onClick=()=>{console.log(JSON.stringify({cameraPos:camera.position.toArray(),cameraRot:camera.rotation.toArray().slice(0,3),controlsTarget:controls.current.target.toArray()},null,2));};window.addEventListener('click',onClick);return()=>window.removeEventListener('click',onClick);},[camera]);(0,react_1.useEffect)(()=>{if((0,ui_utils_1.isTouchDevice)()){controls.current.minPolarAngle=Math.PI/2;controls.current.maxPolarAngle=Math.PI/2;setTimeout(()=>{setLockOrbit(true);},1000);}},[]);(0,react_1.useEffect)(()=>{if((0,ui_utils_1.isMobile)()){setScale((0,ui_utils_1.mapFloat)(scrollY,0,(0,ui_utils_1.calcScrollThreshold)(),1,0.65));setPosY((0,ui_utils_1.mapFloat)(scrollY,0,(0,ui_utils_1.calcScrollThreshold)(),0,0.35));}},[scrollY]);(0,react_1.useEffect)(()=>{if(!enableZoom)return;if(!targetPreset)return;// we only apply zoom effect if targetPreset is defined -const newPos=calculateVector(scrollY,MAX_SCROLL,preset.cameraPos,targetPreset.cameraPos);const newRot=calculateVector(scrollY,MAX_SCROLL,preset.cameraRot,targetPreset.cameraRot);const newTarget=calculateVector(scrollY,MAX_SCROLL,preset.controlsTarget,targetPreset.controlsTarget);camera.position.set(...newPos);camera.rotation.set(...newRot);controls.current.target.set(...newTarget);camera.updateProjectionMatrix();},[scrollY,camera]);return react_1.default.createElement("group",{ref:ref,...props,scale:scale,"position-y":posY},children,react_1.default.createElement(drei_1.OrbitControls,{ref:controls,enableZoom:false,target:controls.current?controls.current.target:preset.controlsTarget,enabled:!lockOrbit}));};exports.Controls=Controls; - -/***/ }), - -/***/ 44169: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.OBJECTS_PRESETS=exports.defaultPresets=exports.defaultAsciiConfigs=exports.INITIAL_ZOOM=exports.RESIZE_SPEED_FACTOR=exports.MIN_ZOOM=exports.MAX_ROTATE_SPEED=exports.MIN_ROTATE_SPEED=exports.ROTATE_SPEED=void 0;exports.ROTATE_SPEED=0.1;exports.MIN_ROTATE_SPEED=0;exports.MAX_ROTATE_SPEED=1;exports.MIN_ZOOM=0.22;exports.RESIZE_SPEED_FACTOR=0.9;exports.INITIAL_ZOOM=3;exports.defaultAsciiConfigs={renderIndex:1,bgColor:'rgb(var(--lsd-surface-primary))',fgColor:'rgb(var(--lsd-text-primary))',characters:' l.o.g.o.s ',invert:false,color:false,resolution:0.21,textShadowSize:15};exports.defaultPresets={modelId:'default',simple:{cameraPos:[6.898858137575106,4.772099506970454,-3.1821660872368627],cameraRot:[-2.733342169570335,1.127956558492365,2.7690180385429666],controlsTarget:[-0.2185887974027981,3.4320197290105474,-0.08409377618890646]},abstract:{cameraPos:[-1.4826176635786852,4.021180061821954,-1.5929058418153597],cameraRot:[-2.9244096935808908,-0.8625529112689497,-2.9755407843387185],controlsTarget:[-0.3236695017538898,3.8072918272567,-0.6236093222013962]}};exports.OBJECTS_PRESETS=[exports.defaultPresets,{modelId:'architecture01',simple:{cameraPos:[6.898858137575106,4.772099506970454,-3.1821660872368627],cameraRot:[0,0,0],controlsTarget:[0,0,0]},abstract:{cameraPos:[0,0,0],cameraRot:[0,0,0],controlsTarget:[0,0,0]}},{modelId:'architecture02',simple:{cameraPos:[6.898858137575106,4.772099506970454,-3.1821660872368627],cameraRot:[0,0,0],controlsTarget:[0,0,0]},abstract:{cameraPos:[0,0,0],cameraRot:[0,0,0],controlsTarget:[0,0,0]}},{modelId:'architecture03',simple:{cameraPos:[6.898858137575106,4.772099506970454,-3.1821660872368627],cameraRot:[0,0,0],controlsTarget:[0,0,0]},abstract:{cameraPos:[0,0,0],cameraRot:[0,0,0],controlsTarget:[0,0,0]}},{modelId:'architecture04',simple:{cameraPos:[2.263701079468784,0.6448855513810133,-1.1446840846564066],cameraRot:[-2.3314571674867457,0.984733935216302,2.422537357648925],controlsTarget:[0.6593539926170827,-0.1266335925222026,-0.4104215479626598]},abstract:{cameraPos:[1.8397825927313005,0.5006635210357668,-0.7112749496103248],cameraRot:[-2.0637769654190388,0.941591559117755,2.1572780914058356],controlsTarget:[0.7525282128865571,-0.19650999135957886,-0.33673737792715125]},targetLook:{cameraPos:[1.2775067913826557,1.3342390202957728,-3.123518037652026],cameraRot:[-2.6905895797482686,0.32826936260575107,2.9867046984290964],controlsTarget:[0.27965301570358253,0.05724884619536415,-0.48670374558576035]}},{modelId:'architecture05',simple:{cameraPos:[2.783916402572475,0.8560027544276005,2.7596737879252995],cameraRot:[-0.16075199314229247,0.8310730403125255,0.11920589473418516],controlsTarget:[-0.13283501637059433,0.4299574965789378,0.13221598116033606]},abstract:{cameraPos:[-0.5465903796360435,0.8773980794748312,0.08538618930043433],cameraRot:[-0.26855166005001807,-1.1713993239674987,-0.24830772343977955],controlsTarget:[-0.0544632211815667,0.8222830795164463,-0.1148867151943581]},targetLook:{cameraPos:[-0.08633866196975185,1.065498410363367,3.299441795447572],cameraRot:[-0.30705338387773307,-0.04232616594886318,-0.01341603621000156],controlsTarget:[0.057360484222938594,0.03995565554668334,0.06512362298065871]}// abstract: { -// cameraPos: [1.1470783184950044, 0.23878712525763962, 1.4621079231748313], -// cameraRot: [0.0781563760261837, 0.753617521461716, -0.05353888616056665], -// controlsTarget: [ -// -0.10475467093508074, 0.34294485241818873, 0.1321388746243302, -// ], -// }, -},{modelId:'architecture06',simple:{cameraPos:[6.898858137575106,4.772099506970454,-3.1821660872368627],cameraRot:[0,0,0],controlsTarget:[0,0,0]},abstract:{cameraPos:[0,0,0],cameraRot:[0,0,0],controlsTarget:[0,0,0]}},{modelId:'architecture07',simple:{cameraPos:[6.898858137575106,4.772099506970454,-3.1821660872368627],cameraRot:[0,0,0],controlsTarget:[0,0,0]},abstract:{cameraPos:[0,0,0],cameraRot:[0,0,0],controlsTarget:[0,0,0]}},{modelId:'atlas',simple:{cameraPos:[-0.05747471409961126,1.1561369169508278,0.2934743027588207],cameraRot:[0.13523803197626882,-0.45004875426349367,0.05912213357583956],controlsTarget:[-0.03052411570622545,1.1636581998026059,0.23819862568800665]},// abstract: { -// cameraPos: [-0.05747471409961126, 1.1561369169508278, 0.2934743027588207], -// cameraRot: [ -// 0.13523803197626882, -0.45004875426349367, 0.05912213357583956, -// ], -// controlsTarget: [ -// -0.03052411570622545, 1.1636581998026059, 0.23819862568800665, -// ], -// }, -abstract:{cameraPos:[-0.18886266143333627,1.0759713173211645,0.49472614307040697],cameraRot:[0.11827338438455919,-0.49355424749746096,0.056236459481599846],controlsTarget:[-0.03586918676122722,1.1095292429426495,0.21231853618809665]},targetLook:{cameraPos:[-0.6194495673706852,0.6791728914823414,1.1145248759455844],cameraRot:[0.08253419059538356,-0.589296072042965,0.045942607479927136],controlsTarget:[0.09058057232790886,0.7667301800204325,0.05607398084523753]}},{modelId:'bust01',simple:{cameraPos:[-0.6865425525854476,0.9101267370893742,0.6192780523604176],cameraRot:[-0.39660492694232563,-0.962317303218196,-0.3309893133032883],controlsTarget:[0.008888669206507317,0.7229784900626205,0.17240700391361993]},abstract:{cameraPos:[0.025758408225725123,0.9432728632646389,0.5085343068565109],cameraRot:[-0.016796160047877214,0.23199352927595504,0.003862085219634371],controlsTarget:[-0.04849025797636223,0.9379943498483801,0.19429480114059927]},targetLook:{cameraPos:[-0.0995637601904456,0.9905193985583883,1.2844592429465957],cameraRot:[-0.21489715158374015,-0.011908392248228742,-0.002599147273856083],controlsTarget:[-0.08519853311178426,0.7332893758986562,0.10595091334036527]}},{modelId:'bust02',simple:{cameraPos:[-1.4566842350476759,1.3228318382357354,0.3529107224325513],cameraRot:[-0.7212161402570414,-1.161345100016008,-0.6787189972933454],controlsTarget:[0.13759890903780844,0.8659810364239205,-0.1666973840261623]},// TODO add option for scale on scroll -abstract:{cameraPos:[-0.3488062269042841,1.3111379960412364,0.033354968216059155],cameraRot:[-0.7212161402570405,-1.1613451000160089,-0.6787189972933446],controlsTarget:[0.2227218365835886,1.147363414950647,-0.15291722311874764]}},{modelId:'bust03',simple:{cameraPos:[6.898858137575106,4.772099506970454,-3.1821660872368627],cameraRot:[0,0,0],controlsTarget:[0,0,0]},abstract:{cameraPos:[0,0,0],cameraRot:[0,0,0],controlsTarget:[0,0,0]}},{modelId:'discobolus',simple:{cameraPos:[0.9321278495515372,1.1243517299151449,1.0437243089401456],cameraRot:[-0.05449607597993083,0.5948614803388417,0.030560026854436973],controlsTarget:[0.17851738112859908,1.0636847191934362,-0.06840974825492452]},abstract:{cameraPos:[0,0,0],cameraRot:[0,0,0],controlsTarget:[0,0,0]}},{modelId:'hand',simple:{cameraPos:[0,0,0],cameraRot:[0,0,0],controlsTarget:[0,0,0]},abstract:{cameraPos:[0,0,0],cameraRot:[0,0,0],controlsTarget:[0,0,0]}},{modelId:'vase01',simple:{cameraPos:[0,0,0],cameraRot:[0,0,0],controlsTarget:[0,0,0]},abstract:{cameraPos:[0,0,0],cameraRot:[0,0,0],controlsTarget:[0,0,0]}},{modelId:'venus',simple:{cameraPos:[-0.33960257176056113,1.3731114512210183,0.5843851218219973],cameraRot:[0.19165735697369993,-0.4160172409280952,0.07825504508386714],controlsTarget:[0.1766806722765915,1.595709756901872,-0.5627979418735829]},abstract:{cameraPos:[-0.2543046264127692,1.591894996466899,0.21161310295797725],cameraRot:[0.17078534527374745,-0.637502107706861,0.10229142114685894],controlsTarget:[0.2766995177502174,1.7137410300309837,-0.49488235116491014]}},{modelId:'flower',simple:{cameraPos:[-0.33960257176056113,1.3731114512210183,0.5843851218219973],cameraRot:[0,0,0],controlsTarget:[0,0,0]},abstract:{cameraPos:[0,0,0],cameraRot:[0,0,0],controlsTarget:[0,0,0]}}]; - -/***/ }), - -/***/ 9354: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.HeroModel=void 0;const tslib_1=__webpack_require__(70655);const drei_1=__webpack_require__(90278);const fiber_1=__webpack_require__(64232);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importStar(__webpack_require__(67294));const HeroModel_configs_1=__webpack_require__(44169);const ui_utils_1=__webpack_require__(24052);const Ascii_1=__webpack_require__(84773);const Controls_1=__webpack_require__(35901);__webpack_require__(92850);const useScrollY_1=__webpack_require__(40213);const useLookPreset=(mode,preset,modelId)=>{return(0,react_1.useMemo)(()=>{if(preset)return{...HeroModel_configs_1.defaultPresets,[mode]:preset};if(!modelId)return HeroModel_configs_1.defaultPresets;const existingPreset=HeroModel_configs_1.OBJECTS_PRESETS.find(p=>p.modelId===modelId);return existingPreset?existingPreset:HeroModel_configs_1.defaultPresets;},[preset,modelId]);};const getInitialY=mode=>{return mode==='abstract'?0:window.innerWidth>997?0:0;};const HeroModel=props=>{const{modelId,preset:presetProp,mode='simple',className,children,asciiConfig,rotateSpeed=HeroModel_configs_1.ROTATE_SPEED,enableZoom,enableRotateOnScroll,withParallelEffect=true,startY='bottom',...divProps}=props;const preset=useLookPreset(mode,presetProp,modelId);// const index = 4; -// const preset = OBJECTS_PRESETS[index] ? OBJECTS_PRESETS[index] : defaultPresets; -const scrollY=(0,useScrollY_1.useScrollY)();return react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-hero-model','mdx-hero-model--ascii',`mdx-hero-model--${mode}`,`mdx-hero-model--${startY}`),...divProps},react_1.default.createElement("div",{className:`mdx-hero-model--inner`,style:{...(withParallelEffect?{transform:`translateY(${0// getInitialY(mode) + scrollY * 0.1 -}px) scale(var(--mdx-hero-model-wrapper-scale))`}:{})}},react_1.default.createElement(react_1.Suspense,{fallback:react_1.default.createElement("span",null," ")},react_1.default.createElement(fiber_1.Canvas,{dpr:[1,2],style:{height:'100vh'},camera:{fov:50,position:preset[mode].cameraPos,rotation:preset[mode].cameraRot}},react_1.default.createElement("directionalLight",{position:[-10,10,0],intensity:1.5}),react_1.default.createElement("directionalLight",{position:[-10,10,5],intensity:0.3}),react_1.default.createElement("directionalLight",{position:[-10,20,0],intensity:1.5}),react_1.default.createElement("directionalLight",{position:[100,-10,0],intensity:0.25}),react_1.default.createElement(Controls_1.Controls,{rotateSpeed:rotateSpeed,preset:preset[mode],targetPreset:preset.targetLook,enableZoom:mode!=='simple'},react_1.default.createElement(react_1.Suspense,{fallback:react_1.default.createElement(Model,{url:`/hero/${preset.modelId}/lo.glb`})},react_1.default.createElement(Model,{url:`/hero/${preset.modelId}/hi.glb`}),react_1.default.createElement(Ascii_1.AsciiRenderer,{...asciiConfig})))))),react_1.default.createElement("div",{className:'mdx-hero-model--shade',style:{opacity:(0,ui_utils_1.mapFloat)(scrollY,0,(0,ui_utils_1.calcScrollThreshold)()*HeroModel_configs_1.RESIZE_SPEED_FACTOR,0,1)}}));};exports.HeroModel=HeroModel;function Model({url,onMount=()=>{},...props}){// useGLTF suspends the component, it literally stops processing -const{scene}=(0,drei_1.useGLTF)(url,'/scripts/draco-1.4.3/');(0,react_1.useEffect)(()=>{onMount();},[]);// By the time we're here the model is gueranteed to be available -return react_1.default.createElement("primitive",{object:scene,...props});}function Rotate(props){const ref=(0,react_1.useRef)();(0,fiber_1.useFrame)(state=>{if(ref.current){// @ts-ignore -return ref.current.rotation.y=state.clock.elapsedTime;}return ref;});return react_1.default.createElement("group",{ref:ref,...props});} - -/***/ }), - -/***/ 28292: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.HeroModel=void 0;const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const ui_utils_1=__webpack_require__(24052);const useScrollY_1=__webpack_require__(40213);const HeroModel_1=__webpack_require__(9354);const calcMaxOffsetY=()=>{return window.innerHeight*0.1;};const HeroModel=props=>{if(typeof window==='undefined')return null;const scrollY=(0,useScrollY_1.useScrollY)();const offsetY=(0,ui_utils_1.mapFloat)(scrollY,0,(0,ui_utils_1.calcScrollThreshold)(),0,calcMaxOffsetY());return react_1.default.createElement("div",{style:{// transform: `translateY(${-1*offsetY}px)`, -position:'absolute',top:0,left:0}},react_1.default.createElement(HeroModel_1.HeroModel,{...props}));// return ( -// -// {() => { -// const { HeroModel: Model } = require('./HeroModel') -// -// return -// }} -// -// ) -};exports.HeroModel=HeroModel; - -/***/ }), - -/***/ 59533: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.HeroTitle=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Hero_context_1=__webpack_require__(94787);__webpack_require__(10539);const HeroTitle=({size:sizeProp,uppercase:uppercaseProp,className,children,...props})=>{const ctx=(0,Hero_context_1.useHero)();const size=sizeProp?sizeProp:ctx?ctx.size:'medium';const uppercase=typeof uppercaseProp!=='undefined'?uppercaseProp:ctx?.size==='large';return react_1.default.createElement(lsd_react_1.Typography,{variant:"h1",component:"h1",className:(0,clsx_1.default)(className,'mdx-hero-title',`mdx-hero-title--${size}`,uppercase&&'mdx-hero-title--uppercase'),...props},children);};exports.HeroTitle=HeroTitle; - -/***/ }), - -/***/ 85486: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(59533),exports); - -/***/ }), - -/***/ 37207: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.HeroVideo=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importStar(__webpack_require__(67294));const makeStyle_1=__webpack_require__(9259);const settle_1=__webpack_require__(32833);const useHydrated_1=__webpack_require__(67713);const Hero_context_1=__webpack_require__(94787);__webpack_require__(26606);const HeroVideo=({placeholderSrc,desktop,mobile,className,style={},children,...props})=>{const ctx=(0,Hero_context_1.useHero)();const hydrated=(0,useHydrated_1.useHydrated)();const ref=(0,react_1.useRef)(null);const[loading,setLoading]=(0,react_1.useState)(true);const onPlay=async()=>{const el=ref.current;if(!el)return;el.muted=true;el.defaultMuted=true;const[res,err]=await(0,settle_1.settle)(()=>el.play());if(err)return;setLoading(false);};(0,react_1.useEffect)(()=>{const root=document.querySelector('.col > article');if(!root)return;root.classList.add('overflow-hidden');return()=>{root.classList.remove('overflow-hidden');};},[]);return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-hero-video',loading&&'mdx-hero-video--loading'),style:(0,makeStyle_1.makeStyle)({...style},{'hero-video-scale':desktop?.scale??'1.70951586','hero-video-offset-y':desktop?.offsetY??'-150px','hero-video-height':desktop?.height??'100%','hero-video-min-height':desktop?.minHeight??'min(100vh, var(--hero-max-height))','hero-video-scale-mobile':mobile?.scale??'1.70951586','hero-video-offset-y-mobile':mobile?.offsetY??'-50px','hero-video-height-mobile':mobile?.height??'120%','hero-video-min-height-mobile':mobile?.minHeight??'100vh'}),...props},react_1.default.createElement("div",{className:"mdx-hero-video__placeholder"},react_1.default.createElement("img",{src:placeholderSrc,alt:""})),react_1.default.createElement("div",{className:"mdx-hero-video__video"},hydrated&&react_1.default.createElement("video",{ref:ref,loop:true,muted:true,autoPlay:true,playsInline:true,onCanPlay:onPlay,onLoadedMetadata:onPlay},children))));};exports.HeroVideo=HeroVideo; - -/***/ }), - -/***/ 98130: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(37207),exports); - -/***/ }), - -/***/ 66210: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.InputCTASection=void 0;const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(65689);const lsd_react_1=__webpack_require__(31665);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const InputCTASection=({title,description,label,link,linkProps,formInput,formListId})=>{const[formState,setFormState]=react_1.default.useState({email:'',name:''});const[message,setMessage]=react_1.default.useState('');const errorMessage='There was an error submitting the form. Please try again.';const handleSubmit=async e=>{e.preventDefault();try{const res=await fetch(`https://odoo.logos.co/website_mass_mailing/subscribe2`,{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({jsonrpc:'2.0',method:'call',params:{value:formState?.email,name:formState?.name||'',list_id:formListId,subscription_type:'email'}})});const data=await res.json();setMessage(data.result.message);}catch(error){console.log(error);setMessage(errorMessage);}};const handleChange=e=>{setFormState({...formState,[e.target.name]:e.target.value});};return react_1.default.createElement("div",{className:"mdx-input-cta-section__container"},title&&react_1.default.createElement(lsd_react_1.Typography,{variant:"subtitle1",component:"p",className:"mdx-input-cta-section__title"},title),react_1.default.createElement(lsd_react_1.Typography,{component:"h3",variant:"h3",className:(0,clsx_1.default)('input-cta-section__description',!formInput&&'input-cta-section__description--no-form')},description),formInput?.length?react_1.default.createElement("form",{className:"mdx-input-cta-section__form",onSubmit:handleSubmit},react_1.default.createElement("div",{className:"mdx-input-cta-section__input-fields"},formInput.map((input,index)=>react_1.default.createElement(lsd_react_1.TextField,{key:index,className:"mdx-input-cta-section__input",onChange:handleChange,value:formState[input.name],inputProps:{...input}}))),react_1.default.createElement("div",null,react_1.default.createElement(lsd_react_1.Button,{type:"submit",className:"mdx-input-cta-section__cta"},react_1.default.createElement(lsd_react_1.Typography,{variant:"body1"},label)),react_1.default.createElement(lsd_react_1.Typography,{variant:"body2"},message))):react_1.default.createElement(Link_1.default,{to:link,...linkProps},react_1.default.createElement(lsd_react_1.Button,{className:"mdx-input-cta-section__cta"},react_1.default.createElement(lsd_react_1.Typography,{variant:"body1"},label))));};exports.InputCTASection=InputCTASection; - -/***/ }), - -/***/ 74603: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(66210),exports); - -/***/ }), - -/***/ 48949: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.JobsPerDepartment=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const SingleDepartmentJobs_1=__webpack_require__(744);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const jobsPerDepartmentDummyData_1=__webpack_require__(31174);const JobsPerDepartmentHeader=({message})=>{return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(lsd_react_1.Typography,{variant:"h1",className:"mdx-jpd__header"},"Current job openings"),!!message&&react_1.default.createElement(lsd_react_1.Typography,{variant:"body1"},message));};const hasJobs=jobsPerDepartment=>{if(!jobsPerDepartment)return false;// Check if there's any department that has at least one job -let jobFound=jobsPerDepartment.some(department=>{return department.jobs&&department.jobs.length>0;});return jobFound;};/** - * A component for displaying job openings organized by department. The component requires a `jobData` prop that contains an array of departments, each with an array of jobs openings. If you're using our preset, this data is automatically fetched from Greenhouse API. To enable this, please refer to the [preset documentation](../logos-docusaurus-preset#job-openings). - * - * @example - * **Example usage:** - * ```jsx - * import * as jobData from '/static/generated/jobs.json' - * import { JobsPerDepartment } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx' - * - * - * ``` - */const JobsPerDepartment=({jobData,titleFilter='',useDummyData=false,...props})=>{let jobArray=useDummyData?jobsPerDepartmentDummyData_1.jobsPerDepartmentDummyData:jobData?.departments;if(!jobArray||!hasJobs(jobArray)){return react_1.default.createElement(JobsPerDepartmentHeader,{message:"No job openings to show"});}// Filter jobs in each department based on titleFilter -if(jobArray&&titleFilter){jobArray=jobArray.map(department=>({...department,jobs:department.jobs.filter(job=>job.title.includes(titleFilter))}));}return react_1.default.createElement("div",{...props},react_1.default.createElement(JobsPerDepartmentHeader,null),jobArray.map(department=>{return react_1.default.createElement(SingleDepartmentJobs_1.SingleDepartmentJobs,{key:department.name,department:department});}));};exports.JobsPerDepartment=JobsPerDepartment; - -/***/ }), - -/***/ 744: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.SingleDepartmentJobs=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Icon_1=__webpack_require__(6980);__webpack_require__(4751);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const SingleDepartmentJobs=({department})=>{if(!department.jobs||department.jobs.length===0){return null;}return react_1.default.createElement("div",{className:"mdx-jpd__single-job-department-container"},react_1.default.createElement(lsd_react_1.Typography,{variant:"subtitle2",className:"mdx-jpd__department-title"},department.name),react_1.default.createElement("ul",{className:"mdx-jpd__job-list"},department.jobs.map((job,index)=>react_1.default.createElement("li",{key:index,className:"mdx-jpd__job-list-item"},react_1.default.createElement(Link_1.default,{href:job.absolute_url,target:"_blank",className:"mdx-jpd__job-link"},react_1.default.createElement("div",{className:"mdx-jpd__job-title-container"},react_1.default.createElement(lsd_react_1.Typography,{variant:"h5",className:"mdx-jpd__job-title"},job.title),react_1.default.createElement(Icon_1.IconExternalLink,{className:"mdx-jpd__external-link-icon"})),!!job.location?.name&&react_1.default.createElement(lsd_react_1.Typography,{variant:"subtitle2",component:"div"},job.location.name))))));};exports.SingleDepartmentJobs=SingleDepartmentJobs; - -/***/ }), - -/***/ 39610: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(48949),exports); - -/***/ }), - -/***/ 31174: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.jobsPerDepartmentDummyData=void 0;// Only for dev purposes - prevents making multiple requests to the API while developing. -exports.jobsPerDepartmentDummyData=[{id:87842,name:'App',parent_id:43806,child_ids:[87847,87852,87850,87848,45530,87849],jobs:[]},{id:54504,name:'Brand Design Studio',parent_id:null,child_ids:[],jobs:[]},{id:45532,name:'Business Development',parent_id:null,child_ids:[],jobs:[]},{id:87841,name:'Codex',parent_id:43806,child_ids:[],jobs:[{absolute_url:'https://jobs.status.im/?gh_jid=5329400',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2662332,location:{name:'Remote (Worldwide)'},metadata:null,id:5329400,updated_at:'2023-10-13T09:40:03-04:00',requisition_id:'Cod-6',title:'Technical Business Development Lead [Codex]'}]},{id:84549,name:'Communications',parent_id:null,child_ids:[],jobs:[{absolute_url:'https://jobs.status.im/?gh_jid=5276254',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2645076,location:{name:'Remote (Worldwide)'},metadata:null,id:5276254,updated_at:'2023-10-19T03:08:59-04:00',requisition_id:'PROV-Com-16',title:'Motion Designer'}]},{id:45531,name:'Design',parent_id:null,child_ids:[],jobs:[]},{id:87847,name:'Desktop',parent_id:87842,child_ids:[],jobs:[]},{id:87852,name:'Documentation',parent_id:87842,child_ids:[],jobs:[]},{id:45547,name:'Engineering ',parent_id:null,child_ids:[],jobs:[{absolute_url:'https://jobs.status.im/?gh_jid=5419957',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2693761,location:{name:'Remote (Worldwide)'},metadata:null,id:5419957,updated_at:'2023-10-24T07:30:00-04:00',requisition_id:'APP-QA-2',title:'Desktop QA Engineer '},{absolute_url:'https://jobs.status.im/?gh_jid=3694379',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2055210,location:{name:'Remote (Worldwide)'},metadata:null,id:3694379,updated_at:'2023-10-24T16:23:12-04:00',requisition_id:'BACK-1050',title:'Senior C++ Qt/QML developer for blockchain app'},{absolute_url:'https://jobs.status.im/?gh_jid=3702173',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2058858,location:{name:'Remote (Worldwide)'},metadata:null,id:3702173,updated_at:'2023-10-24T16:21:54-04:00',requisition_id:'93',title:'Senior Mobile ClojureScript UI Developer '}]},{id:49925,name:'Finance',parent_id:87845,child_ids:[],jobs:[]},{id:87854,name:'Infrastructure',parent_id:43806,child_ids:[],jobs:[]},{id:87853,name:'Insights',parent_id:87845,child_ids:[],jobs:[]},{id:87850,name:'Keycard',parent_id:87842,child_ids:[],jobs:[]},{id:145838,name:'Leadership',parent_id:null,child_ids:[],jobs:[{absolute_url:'https://jobs.status.im/?gh_jid=5447463',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2704948,location:{name:'Remote (Worldwide)'},metadata:null,id:5447463,updated_at:'2023-10-24T09:07:22-04:00',requisition_id:'LEAD-1',title:'Chief of Staff [whole ecosystem]'}]},{id:74156,name:'Legal',parent_id:87845,child_ids:[],jobs:[]},{id:91698,name:'Logos',parent_id:null,child_ids:[],jobs:[]},{id:43807,name:'Marketing',parent_id:null,child_ids:[],jobs:[]},{id:87848,name:'Mobile',parent_id:87842,child_ids:[],jobs:[]},{id:87843,name:'Nimbus',parent_id:43806,child_ids:[],jobs:[{absolute_url:'https://jobs.status.im/?gh_jid=5370820',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2679527,location:{name:'Remote (Worldwide)'},metadata:null,id:5370820,updated_at:'2023-10-19T03:05:07-04:00',requisition_id:'LIDO-1',title:'Senior DevOps Engineer (Blockchain)'}]},{id:144866,name:'Nomos',parent_id:43806,child_ids:[],jobs:[{absolute_url:'https://jobs.status.im/?gh_jid=5433423',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2315608,location:{name:'Remote (Worldwide)'},metadata:null,id:5433423,updated_at:'2023-10-12T11:20:52-04:00',requisition_id:'PROV-Nom-5',title:'Applied Network Researcher'}]},{id:45548,name:'People Operations',parent_id:87845,child_ids:[],jobs:[]},{id:45530,name:'Product Design',parent_id:87842,child_ids:[],jobs:[]},{id:90941,name:'Program Management',parent_id:null,child_ids:[],jobs:[]},{id:43806,name:'Research & Development',parent_id:null,child_ids:[87842,87841,87854,87843,144866,87846,87981,87847,87852,87850,87848,45530,87849],jobs:[]},{id:87851,name:'Security',parent_id:87845,child_ids:[],jobs:[]},{id:87845,name:'Services',parent_id:null,child_ids:[49925,87853,74156,45548,87851],jobs:[]},{id:91697,name:'Status App ',parent_id:null,child_ids:[],jobs:[]},{id:54783,name:'Technical Writing ',parent_id:null,child_ids:[],jobs:[]},{id:87846,name:'Vac',parent_id:43806,child_ids:[],jobs:[{absolute_url:'https://jobs.status.im/?gh_jid=4460860',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2331302,location:{name:'Remote (Worldwide)'},metadata:null,id:4460860,updated_at:'2023-10-04T05:13:53-04:00',requisition_id:'PROV-zkV-1',title:'Zero Knowledge Research Engineer '}]},{id:87981,name:'Waku',parent_id:43806,child_ids:[],jobs:[{absolute_url:'https://jobs.status.im/?gh_jid=5456032',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2707470,location:{name:'Remote (Worldwide)'},metadata:null,id:5456032,updated_at:'2023-10-23T11:40:19-04:00',requisition_id:'WAK-GL-1',title:'Growth Lead'},{absolute_url:'https://jobs.status.im/?gh_jid=3693623',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2055187,location:{name:'Remote (Worldwide)'},metadata:null,id:3693623,updated_at:'2023-10-04T05:13:53-04:00',requisition_id:'PROV-Sec-2',title:'Protocol Engineer'},{absolute_url:'https://jobs.status.im/?gh_jid=3157908',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:1830496,location:{name:'Remote, Worldwide'},metadata:null,id:3157908,updated_at:'2023-10-04T05:13:53-04:00',requisition_id:'PROV-Sec-3',title:'Protocol Researcher (Distributed Systems)'},{absolute_url:'https://jobs.status.im/?gh_jid=5175038',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2584916,location:{name:'Remote (Worldwide)'},metadata:null,id:5175038,updated_at:'2023-10-09T05:53:53-04:00',requisition_id:'SDK-2',title:'Software Engineer (Chat SDK)'},{absolute_url:'https://jobs.status.im/?gh_jid=5310503',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2656108,location:{name:'Remote (Worldwide)'},metadata:null,id:5310503,updated_at:'2023-10-19T03:12:53-04:00',requisition_id:'PROV-Wak-13',title:'Software Engineer Distributed Systems Testing'},{absolute_url:'https://jobs.status.im/?gh_jid=5423094',data_compliance:[{type:'gdpr',requires_consent:false,requires_processing_consent:false,requires_retention_consent:false,retention_period:null}],internal_job_id:2694724,location:{name:'Remote (Worldwide)'},metadata:null,id:5423094,updated_at:'2023-10-24T12:39:05-04:00',requisition_id:'WAK-BD-1',title:'Technical Business Development Lead '}]},{id:87849,name:'Web',parent_id:87842,child_ids:[],jobs:[]},{id:0,name:'No Department',parent_id:null,child_ids:[],jobs:[]}]; - -/***/ }), - -/***/ 69935: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.LogoCarousel=void 0;const tslib_1=__webpack_require__(70655);const ThemedImage_1=tslib_1.__importDefault(__webpack_require__(25812));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importStar(__webpack_require__(67294));__webpack_require__(46667);const __1=__webpack_require__(65701);const ScrollButtons_1=__webpack_require__(3796);const useHydrated_1=__webpack_require__(67713);const LogoCarousel=({title,gridGap='80px',className,items=[],children,...props})=>{const hydrated=(0,useHydrated_1.useHydrated)();const ref=(0,react_1.useRef)(null);const containerRef=(0,react_1.useRef)(null);if(typeof window!=='undefined'&&hydrated&&!containerRef.current){containerRef.current=ref.current?.querySelector('.mdx-grid__content')??null;}return react_1.default.createElement("div",{ref:ref,className:(0,clsx_1.default)(className,'mdx-logo-carousel'),...props},react_1.default.createElement(__1.SectionHeader,{title:title,noBorder:true}),react_1.default.createElement("div",{className:"mdx-logo-carousel-buttons"},react_1.default.createElement(ScrollButtons_1.ScrollButtons,{containerRef:containerRef,spacing:"spaced"})),react_1.default.createElement(__1.Grid,{className:"mdx-logo-carousel__inner",xs:{wrap:false,gap:gridGap,scrollButtons:false}},items.map(item=>react_1.default.createElement(__1.Grid.Item,{className:"mdx-logo-carousel__item"},react_1.default.createElement(ThemedImage_1.default,{className:"mdx-logo-carousel__logo",title:item.title,sources:{dark:item.logoSrcDark??item.logoSrc??'',light:item.logoSrc??item.logoSrcDark??''}})))));};exports.LogoCarousel=LogoCarousel; - -/***/ }), - -/***/ 80756: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(69935),exports); - -/***/ }), - -/***/ 41080: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.NewsCard=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const ThemedImage_1=tslib_1.__importDefault(__webpack_require__(25812));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(66093);const Icon_1=__webpack_require__(22197);const NewsCard=({thumbnail,title,date,author,description='',tags=[],...props})=>{return react_1.default.createElement("a",{target:"_blank",...props,className:(0,clsx_1.default)(props.className,'mdx-news-card')},thumbnail&&react_1.default.createElement("div",{className:"mdx-news-card-thumbnail__container"},react_1.default.createElement(ThemedImage_1.default,{sources:{dark:thumbnail,light:thumbnail},alt:title??'news thumbnail',className:"mdx-news-card__thumbnail"}),react_1.default.createElement("div",{className:"mdx-news-card__external-link-icon"},react_1.default.createElement(Icon_1.IconExternalLink,{className:"mdx-jpd__external-link-icon"}))),react_1.default.createElement(lsd_react_1.Typography,{component:"h3",variant:"h4",className:"mdx-news-card__title"},title),react_1.default.createElement("div",{className:"mdx-news-card__row"},react_1.default.createElement("div",{className:"mdx-news-card__info"},date&&react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(lsd_react_1.Typography,{variant:"body2"},date),react_1.default.createElement(lsd_react_1.Typography,{variant:"body2"},"\u00B7")),react_1.default.createElement(lsd_react_1.Typography,{variant:"body2"},"by ",author))),description&&react_1.default.createElement(lsd_react_1.Typography,{variant:"body2",className:"mdx-news-card__description"},description),tags?.length>0&&react_1.default.createElement("div",{className:"mdx-news-card__tags"},tags.map((tag,index)=>react_1.default.createElement(lsd_react_1.Tag,{key:index,size:"small",className:"mdx-news-card__tag"},tag))));};exports.NewsCard=NewsCard; - -/***/ }), - -/***/ 66625: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(41080),exports); - -/***/ }), - -/***/ 76114: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.NewsCardList=void 0;const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importStar(__webpack_require__(67294));__webpack_require__(62185);const lsd_react_1=__webpack_require__(31665);const __1=__webpack_require__(65701);const LIMIT=8;const NewsCardList=({data,...props})=>{const[showMore,setShowMore]=(0,react_1.useState)(data?.length>LIMIT);const[count,setCount]=(0,react_1.useState)(LIMIT);const handleShowMore=()=>{setCount(prev=>prev+LIMIT);if(count+6>=data?.length){setShowMore(false);}};return react_1.default.createElement("div",{className:"mdx-news-card-list__container",...props},react_1.default.createElement("div",null,react_1.default.createElement(__1.Box,{top:{xs:64},bottom:64},react_1.default.createElement(__1.Grid,{xs:{cols:1,gap:'64px 16px'},md:{cols:4}},data.slice(0,count).map((news,index)=>react_1.default.createElement(__1.Grid.Item,{xs:1,key:index},react_1.default.createElement(__1.NewsCard,{...news}))))),showMore&&react_1.default.createElement(lsd_react_1.Button,{className:"mdx-news-card-list__button",onClick:handleShowMore,size:"large"},"See more")));};exports.NewsCardList=NewsCardList; - -/***/ }), - -/***/ 12249: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(76114),exports); - -/***/ }), - -/***/ 45706: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.NewsletterSubscription=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const __1=__webpack_require__(65701);const useNewsletterApi_1=__webpack_require__(3538);const useThemeOptions_1=__webpack_require__(38840);__webpack_require__(84475);const NewsletterSubscription=({title:_title,description:_description,mailingListId:_mailingListId,...props})=>{const defaultMailingListId=(0,useThemeOptions_1.useThemeOptions)()?.newsletterSubscription?.mailingListId??0;const mailingListId=_mailingListId??defaultMailingListId;const api=(0,useNewsletterApi_1.useNewsletterApi)();const displayForm=!api.message||api.error;const title=_title??'Newsletter';const description=_description??react_1.default.createElement(react_1.default.Fragment,null,"Subscribe",react_1.default.createElement("br",null),"to our newsletter");const onSubmit=e=>{e.preventDefault();const form=e.target;const name=form.elements.namedItem('name').value;const email=form.elements.namedItem('email').value;api.subscribe(mailingListId,email,name);};return react_1.default.createElement(__1.CallToActionSection,{className:"mdx-ns",title:react_1.default.createElement("span",{className:"mdx-ns__title"},title),description:react_1.default.createElement("div",{className:"mdx-ns__inner"},react_1.default.createElement("span",{className:"mdx-ns__description"},description),react_1.default.createElement("form",{onSubmit:onSubmit},api.message&&react_1.default.createElement(lsd_react_1.Toast,{title:api.message,className:"mdx-ns__toast",icon:api.error?lsd_react_1.ErrorIcon:lsd_react_1.CheckIcon}),react_1.default.createElement("div",{className:(0,clsx_1.default)('mdx-ns__inputs',!displayForm&&'hidden')},react_1.default.createElement(lsd_react_1.TextField,{inputProps:{type:'text',name:'name'},variant:"underlined",placeholder:"First name or pseudonym"}),react_1.default.createElement(lsd_react_1.TextField,{inputProps:{type:'email',name:'email',required:true},variant:"underlined",placeholder:"Email address (required)"})),react_1.default.createElement(lsd_react_1.Button,{size:"large",color:"primary",variant:"outlined",className:(0,clsx_1.default)('mdx-ns__submit-button',!displayForm&&'hidden'),disabled:api.busy},"Subscribe"))),columns:2});};exports.NewsletterSubscription=NewsletterSubscription; - -/***/ }), - -/***/ 1765: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(45706),exports); - -/***/ }), - -/***/ 9737: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.PoweredBy=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const __1=__webpack_require__(65701);__webpack_require__(56200);const PoweredBy=({items=[],className,...props})=>{return react_1.default.createElement(__1.Grid,{className:(0,clsx_1.default)(className,'mdx-powered-by'),xs:{cols:1,wrap:true,gap:'0 1rem'},lg:{cols:2},...props},items.map((item,index)=>react_1.default.createElement(__1.Grid.Item,{key:index,xs:1},react_1.default.createElement(__1.AppCard,{...item}))));};exports.PoweredBy=PoweredBy; - -/***/ }), - -/***/ 73465: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(9737),exports); - -/***/ }), - -/***/ 44564: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.ProfileCard=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Icon_1=__webpack_require__(6980);__webpack_require__(70737);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));/** - * A component used to display team members' profiles, including their name, avatar, and social links. - * - * @example - * ```tsx - * import { ProfileCard } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx'; - * - * - * ``` - * - * Example usage of ProfileCard within a grid: - * - * ```tsx - * import { Grid, ProfileCard } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx'; - * - * - * - * - * - * Add more ProfileCard items within the grid - * - * ``` - */const ProfileCard=({imgSrc,name,githubUsername,githubLink,discordUsername,discordLink,...props})=>{return react_1.default.createElement("div",{...props,className:(0,clsx_1.default)('mdx-profile-card',props.className)},react_1.default.createElement("div",{className:"mdx-profile-card__profile"},typeof imgSrc==='undefined'&&name?react_1.default.createElement("span",{className:"mdx-profile-card__profile-placeholder"},name[0]?.toUpperCase()):react_1.default.createElement("img",{alt:typeof name==='string'?name:'',className:"mdx-profile-card__profile-image",src:imgSrc}),react_1.default.createElement("div",null,react_1.default.createElement(lsd_react_1.Typography,{className:"mdx-profile-card__name",variant:"h4",component:"h4"},name),githubUsername||discordUsername?react_1.default.createElement("div",{className:"mdx-profile-card__buttons"},githubUsername&&githubLink&&react_1.default.createElement(Link_1.default,{href:githubLink,target:"_blank",className:'mdx-profile-card__link'},react_1.default.createElement(Icon_1.IconGithub,null)),discordUsername&&discordLink&&react_1.default.createElement(Link_1.default,{href:discordLink,target:"_blank",className:'mdx-profile-card__link'},react_1.default.createElement(Icon_1.IconDiscord,{size:"m"}))):null)));};exports.ProfileCard=ProfileCard; - -/***/ }), - -/***/ 46877: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(44564),exports); - -/***/ }), - -/***/ 47562: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.Roadmap=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const __1=__webpack_require__(65701);const TimelineItem_1=__webpack_require__(74219);__webpack_require__(53206);const Roadmap=({title,description,timeline=[],noBorder=false,href,linkLabel,className,children,...props})=>{const currentYear=new Date().getFullYear();const handleBorderStyle=(item,index,array)=>{if(index===array.length-1){return'none';}const currentYear=item.period[0];const nextYear=array[index+1].period[0];if(currentYear===nextYear){return'solid';}return'solid';};const getCurrentQuarter=()=>{const month=new Date().getMonth();return'Q'+Math.ceil((month+1)/3);};// const handlePeriodStyle = (period: TimelineItemProps['period']) => { -// const currentYear = new Date().getFullYear() -// const currentQuarter = getCurrentQuarter() -// let year, additional -// if (Array.isArray(period)) { -// ;[year, additional] = period -// } else { -// year = period -// } -// if (year < currentYear) { -// return 'filled' -// } else if (year > currentYear) { -// return 'transparent' -// } else { -// if (!additional || additional === '+') { -// return 'filled' -// } -// if (additional <= currentQuarter) { -// return 'filled' -// } -// return 'transparent' -// } -// } -return react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-roadmap'),...props},react_1.default.createElement(__1.CallToActionSection,{className:"mdx-roadmap__header",title:title,description:description,columns:1,ctaPosition:"top",border:false,align:"left",href:href,label:linkLabel},children),timeline.length>0&&react_1.default.createElement(__1.Grid,{className:"mdx-roadmap__timeline",xs:{cols:6,wrap:false,gap:'0 1rem',scrollButtons:true},spacingButtons:true,leftLabel:"Past",rightLabel:"Future"},timeline.map((item,index)=>react_1.default.createElement(__1.Grid.Item,{key:index,xs:1},react_1.default.createElement(TimelineItem_1.TimelineItem,{...item,index:index,period:item.period??currentYear,description:item.description,borderStyle:handleBorderStyle(item,index,timeline),periodStyle:'filled',className:(0,clsx_1.default)('mdx-roadmap__timeline-item',noBorder&&'mdx-roadmap__timeline-item--no-border',item.className)})))));};exports.Roadmap=Roadmap; - -/***/ }), - -/***/ 77383: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(47562),exports); - -/***/ }), - -/***/ 35481: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.ScrollButtons=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(44823);const ScrollButtons=({leftLabel,rightLabel,containerRef,containerId,spacing='grouped',...props})=>{const scroll=direction=>{const el=containerRef?containerRef.current:document.querySelector(`#${containerId}`);if(!el)return;const itemWidth=el.children[0]?.getBoundingClientRect?.()?.width??236;el.scrollTo({behavior:'smooth',left:el.scrollLeft+(el.getBoundingClientRect()?.width-itemWidth)*direction});};return react_1.default.createElement("div",{...props,className:(0,clsx_1.default)(props.className,'mdx-scroll-buttons',spacing==='spaced'&&'mdx-scroll-buttons--spaced')},react_1.default.createElement(lsd_react_1.IconButtonGroup,{size:"small",color:"primary"},react_1.default.createElement(lsd_react_1.IconButton,{className:(0,clsx_1.default)('mdx-scroll-buttons__button',leftLabel&&leftLabel.length>0&&'mdx-scroll-buttons__button--with-label'),size:"small",onClick:scroll.bind(null,-1)},react_1.default.createElement(lsd_react_1.ChevronLeftIcon,null),leftLabel&&leftLabel.length>0&&react_1.default.createElement("span",{className:"mdx-scroll-buttons__label"},leftLabel)),react_1.default.createElement(lsd_react_1.IconButton,{className:(0,clsx_1.default)('mdx-scroll-buttons__button',rightLabel&&rightLabel.length&&'mdx-scroll-buttons__button--with-label'),size:"small",onClick:scroll.bind(null,+1)},rightLabel&&rightLabel.length>0&&react_1.default.createElement("span",{className:"mdx-scroll-buttons__label"},rightLabel),react_1.default.createElement(lsd_react_1.ChevronRightIcon,null))));};exports.ScrollButtons=ScrollButtons; - -/***/ }), - -/***/ 3796: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(35481),exports); - -/***/ }), - -/***/ 66872: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.ScrollToBottom=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importStar(__webpack_require__(67294));const react_use_1=__webpack_require__(89164);const makeStyle_1=__webpack_require__(9259);const useIsMobile_1=__webpack_require__(52606);const useScrollY_1=__webpack_require__(40213);const styles_module_scss_1=tslib_1.__importDefault(__webpack_require__(7332));const ScrollToBottom=props=>{const{children,className,style,...rest}=props;const scrollY=(0,useScrollY_1.useScrollY)();const isMobile=(0,useIsMobile_1.useIsMobile)();const ws=(0,react_use_1.useWindowSize)();const handleScrollToBottom=()=>{const article=document.querySelector('.main-wrapper article');const secondElement=article?.children?.[1];if(!secondElement)return void window.scrollTo({top:document.body.scrollHeight,behavior:'smooth'});return window.scrollTo({left:0,top:secondElement.getBoundingClientRect().top-(isMobile?200:0),behavior:'smooth'});};const maxTop=(0,react_1.useMemo)(()=>(document.querySelector('.mdx-hero')?.getBoundingClientRect()?.bottom??0)+window.scrollY,[ws.height]);return react_1.default.createElement(lsd_react_1.IconButton,{onClick:handleScrollToBottom,size:isMobile?'small':'large',className:(0,clsx_1.default)(styles_module_scss_1.default.scrollToBottom,className,scrollY>20&&styles_module_scss_1.default.hide),style:(0,makeStyle_1.makeStyle)({...(style??{})},{vh:ws.height/100+'px',maxTop:maxTop+'px'}),...rest},react_1.default.createElement(lsd_react_1.ChevronDownIcon,{color:"primary"}));};exports.ScrollToBottom=ScrollToBottom; - -/***/ }), - -/***/ 19538: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(66872),exports); - -/***/ }), - -/***/ 18291: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.SectionHeader=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const __1=__webpack_require__(65701);__webpack_require__(27377);const SectionHeader=({title,description,className,noBorder,children,...props})=>{const withDescription=!!description;return react_1.default.createElement(__1.Box,{className:(0,clsx_1.default)(className,'mdx-section-header',withDescription&&'mdx-section-header--with-description',noBorder&&'mdx-section-header--no-border'),...props},react_1.default.createElement(lsd_react_1.Typography,{className:"mdx-section-header__title",component:"h2",variant:"h2"},title,!withDescription&&children&&react_1.default.createElement("div",{className:"mdx-section-header__extra"},children)),description&&react_1.default.createElement(lsd_react_1.Typography,{className:"mdx-section-header__description",component:"p",variant:"h3"},description,react_1.default.createElement("div",{className:"mdx-section-header__extra"},children)));};exports.SectionHeader=SectionHeader; - -/***/ }), - -/***/ 83729: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(18291),exports); - -/***/ }), - -/***/ 36835: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.Showcase=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const __1=__webpack_require__(65701);__webpack_require__(7382);const Showcase=({items=[],className,...props})=>{return react_1.default.createElement(__1.Grid,{className:(0,clsx_1.default)(className,'mdx-showcase'),xs:{cols:2,wrap:true,gap:'1.5rem 1em'},lg:{cols:3,gap:'1rem'},...props},items.map((item,index)=>{return react_1.default.createElement(__1.Grid.Item,{key:index,className:"mdx-showcase__item",xs:1},react_1.default.createElement(__1.ShowcaseCard,{...item}));}));};exports.Showcase=Showcase; - -/***/ }), - -/***/ 78090: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(36835),exports); - -/***/ }), - -/***/ 40245: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.ShowcaseCard=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const ThemedImage_1=tslib_1.__importDefault(__webpack_require__(25812));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(32949);const ShowcaseCard=({index,name,logoSrc,logoSrcDark,description,className,size='large',borderStyle='solid',cta,children,...props})=>{return react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-showcase-card',`mdx-showcase-card--${size}`,`mdx-showcase-card--border-${borderStyle}`),...props},react_1.default.createElement("div",{className:"mdx-showcase-card__inner"},index&&react_1.default.createElement(lsd_react_1.Typography,{className:"mdx-showcase-card__index",variant:"subtitle2",component:"div"},index),(logoSrc||logoSrcDark)&&react_1.default.createElement(ThemedImage_1.default,{sources:{dark:logoSrcDark??logoSrc??'',light:logoSrc??logoSrcDark??''},alt:typeof name==='string'?name:'',className:"mdx-showcase-card__logo"}),name&&react_1.default.createElement(lsd_react_1.Typography,{variant:"h4",component:"h4",className:"mdx-showcase-card__name"},name),description&&react_1.default.createElement(lsd_react_1.Typography,{variant:"body1",component:"p",className:"mdx-showcase-card__description"},description),cta&&react_1.default.createElement("a",{href:cta?.href,target:cta?.target,className:"mdx-showcase-card__cta"},cta?.label,react_1.default.createElement(lsd_react_1.ChevronDownIcon,{color:"primary"}))));};exports.ShowcaseCard=ShowcaseCard; - -/***/ }), - -/***/ 65162: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(40245),exports); - -/***/ }), - -/***/ 82732: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.SocialCard=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const ThemedImage_1=tslib_1.__importDefault(__webpack_require__(25812));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Icon_1=__webpack_require__(6980);__webpack_require__(93527);/** - * A component used for displaying social media or community platform cards with a logo and description. - * - * @example - * ```tsx - * import { SocialCard } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx'; - * - * - * ``` - * - * Grid example: - * ```tsx - * import { Box, Grid, SocialCard } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx'; - * - * - * - * - * - * - * - * - * - * - * - * ``` - */const SocialCard=({title,logoSrc,logoSrcDark,description,...props})=>{return react_1.default.createElement("a",{target:"_blank",...props,className:(0,clsx_1.default)(props.className,'mdx-social-card')},react_1.default.createElement("div",{className:"mdx-social-card__row"},(logoSrc||logoSrcDark)&&react_1.default.createElement(ThemedImage_1.default,{sources:{dark:logoSrcDark??logoSrc??'',light:logoSrc??logoSrcDark??''},alt:title??'social card logo',className:"mdx-social-card__logo"}),react_1.default.createElement(Icon_1.IconExternalLink,{className:"mdx-social-card__external-link"})),react_1.default.createElement(lsd_react_1.Typography,{variant:"body1",component:"span",className:"mdx-social-card__description"},description));};exports.SocialCard=SocialCard; - -/***/ }), - -/***/ 92498: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(82732),exports); - -/***/ }), - -/***/ 89885: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.TimelineItem=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));__webpack_require__(35949);const formatPeriod=input=>{if(Array.isArray(input)&&input.length>0){let result=input[0].toString();if(input.length>1){if(input[1]==='+'){result+='+';}else{result+=' '+input[1];}}return result;}else{return'';}};/** - * A component for displaying roadmap items, such as events or milestones, in a timeline layout. - * - * @example - * Roadmap example: - * ```tsx - * import { - * Box, - * Grid, - * TimelineItem, - * SectionHeader, - * CallToActionButton - * } from '@acid-info/logos-docusaurus-theme/lib/client/components/mdx' - * - * - * - * - * Read more - * - * }> - * - * - * - * Add more items here - * - * - * - * - * - * ``` - */const TimelineItem=({index,period,description,borderStyle,periodStyle,className,children,...props})=>{return react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-timeline-item',borderStyle==='dashed'&&'mdx-timeline-item--border-dashed'),...props},react_1.default.createElement("div",{className:"mdx-timeline-item__header"},react_1.default.createElement("div",{className:"mdx-timeline-item__period-container"},borderStyle!=='none'&&react_1.default.createElement("div",{className:(0,clsx_1.default)('mdx-timeline-item__border')}),react_1.default.createElement(lsd_react_1.Typography,{variant:"subtitle2",component:"span",className:(0,clsx_1.default)('mdx-timeline-item__period',`mdx-timeline-item__period--${periodStyle}`)},formatPeriod(period))),react_1.default.createElement(lsd_react_1.Typography,{variant:"h2",component:"span",className:"mdx-timeline-item__index"},typeof index==='number'?`${index<9?'0':''}${index+1}`:index)),react_1.default.createElement(lsd_react_1.Typography,{variant:"h5",component:"p",className:"mdx-timeline-item__description"},description));};exports.TimelineItem=TimelineItem; - -/***/ }), - -/***/ 74219: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(89885),exports); - -/***/ }), - -/***/ 73024: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.VideoSection=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const index_1=__webpack_require__(65701);__webpack_require__(91344);const Icon_1=__webpack_require__(6980);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const VideoSection=({label,href,title,columns=1,description,target,border=true,src,align='unset',className,children,variant='outlined',ctaPosition='bottom',...props})=>{const withDescription=!!description;const withButton=!!href;const display=title&&!withDescription&&!withButton?'title-only':title&&!description&&withButton?'title-button':title&&description&&columns===2?`full-width`:title&&description?'list':'simple';const button=href&&ctaPosition==='top'&&react_1.default.createElement(index_1.CallToActionButton,{target:target,href:href,className:"mdx-video-section__link",variant:variant},label);return react_1.default.createElement("div",{className:(0,clsx_1.default)(className,'mdx-video-section',`mdx-video-section--${display}`,!border&&'mdx-video-section--no-border'),...props},react_1.default.createElement("div",{className:(0,clsx_1.default)('mdx-video-section__container',align!=='unset'&&`mdx-video-section--align-${align}`)},react_1.default.createElement("div",{className:"mdx-video-section__header"},react_1.default.createElement(Icon_1.IconPlay,null),react_1.default.createElement(lsd_react_1.Typography,{component:"h2",className:(0,clsx_1.default)('mdx-video-section__title')},title)),description&&react_1.default.createElement(lsd_react_1.Typography,{component:"h3",className:"mdx-video-section__description"},description),react_1.default.createElement("div",{className:"mdx-video-section__header__mobile-button"},button),src&&ctaPosition==='bottom'&&react_1.default.createElement(Link_1.default,{href:src,target:"_blank"},react_1.default.createElement(index_1.CallToActionButton,{target:target,href:href,className:"mdx-video-section__link",variant:variant,size:"small"},label))),react_1.default.createElement("div",{className:"mdx-video-section__video-container"},react_1.default.createElement("iframe",{width:"100%",height:"100%",src:src,title:"Waku Tutorial 001 : Introduction to Waku",frameBorder:"0",allow:"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share",referrerPolicy:"strict-origin-when-cross-origin",allowFullScreen:true,className:"mdx-video-section__video"})));};exports.VideoSection=VideoSection; - -/***/ }), - -/***/ 82374: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(73024),exports); - -/***/ }), - -/***/ 65701: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(66169),exports);tslib_1.__exportStar(__webpack_require__(84614),exports);tslib_1.__exportStar(__webpack_require__(64314),exports);tslib_1.__exportStar(__webpack_require__(32765),exports);tslib_1.__exportStar(__webpack_require__(54442),exports);tslib_1.__exportStar(__webpack_require__(78256),exports);tslib_1.__exportStar(__webpack_require__(6796),exports);tslib_1.__exportStar(__webpack_require__(24084),exports);tslib_1.__exportStar(__webpack_require__(34155),exports);tslib_1.__exportStar(__webpack_require__(47513),exports);tslib_1.__exportStar(__webpack_require__(78378),exports);tslib_1.__exportStar(__webpack_require__(72295),exports);tslib_1.__exportStar(__webpack_require__(48126),exports);tslib_1.__exportStar(__webpack_require__(16693),exports);tslib_1.__exportStar(__webpack_require__(22447),exports);tslib_1.__exportStar(__webpack_require__(67812),exports);tslib_1.__exportStar(__webpack_require__(28292),exports);tslib_1.__exportStar(__webpack_require__(85486),exports);tslib_1.__exportStar(__webpack_require__(98130),exports);tslib_1.__exportStar(__webpack_require__(38716),exports);tslib_1.__exportStar(__webpack_require__(39610),exports);tslib_1.__exportStar(__webpack_require__(80756),exports);tslib_1.__exportStar(__webpack_require__(1765),exports);tslib_1.__exportStar(__webpack_require__(73465),exports);tslib_1.__exportStar(__webpack_require__(46877),exports);tslib_1.__exportStar(__webpack_require__(77383),exports);tslib_1.__exportStar(__webpack_require__(19538),exports);tslib_1.__exportStar(__webpack_require__(83729),exports);tslib_1.__exportStar(__webpack_require__(78090),exports);tslib_1.__exportStar(__webpack_require__(65162),exports);tslib_1.__exportStar(__webpack_require__(92498),exports);tslib_1.__exportStar(__webpack_require__(74219),exports);tslib_1.__exportStar(__webpack_require__(85535),exports);tslib_1.__exportStar(__webpack_require__(42174),exports);tslib_1.__exportStar(__webpack_require__(71225),exports);tslib_1.__exportStar(__webpack_require__(94030),exports);tslib_1.__exportStar(__webpack_require__(92302),exports);tslib_1.__exportStar(__webpack_require__(7472),exports);tslib_1.__exportStar(__webpack_require__(24812),exports);tslib_1.__exportStar(__webpack_require__(26498),exports);tslib_1.__exportStar(__webpack_require__(74603),exports);tslib_1.__exportStar(__webpack_require__(45320),exports);tslib_1.__exportStar(__webpack_require__(66625),exports);tslib_1.__exportStar(__webpack_require__(12249),exports);tslib_1.__exportStar(__webpack_require__(82374),exports); - -/***/ }), - -/***/ 91866: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.LightBoxWrapper=exports.useLightBox=exports.LightBoxContext=exports.LightBoxProvider=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const Logo_1=tslib_1.__importDefault(__webpack_require__(56306));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importStar(__webpack_require__(67294));const react_quick_pinch_zoom_1=tslib_1.__importStar(__webpack_require__(33199));const react_use_1=__webpack_require__(89164);const Icon_1=__webpack_require__(22197);const Portal_1=__webpack_require__(54920);const useHydrated_1=__webpack_require__(67713);const useIsMobile_1=__webpack_require__(52606);const styles_module_scss_1=tslib_1.__importDefault(__webpack_require__(97679));const LightBoxProvider=({children})=>{const hydrated=(0,useHydrated_1.useHydrated)();const scroll=(0,react_use_1.useWindowScroll)();const[active,setActive]=(0,react_1.useState)(null);const[activeStyle,setActiveStyle]=(0,react_1.useState)({opacity:'0.5'});const isMobile=(0,useIsMobile_1.useIsMobile)();const style=(0,react_1.useMemo)(()=>{return{opacity:1,transform:'scale(1) translate(0px, 0px)',transition:'0.3s'};},[active]);const display=element=>{setActive(element);const vw=document.body.clientWidth;const vh=window.innerHeight;const maxWidth=window.innerWidth>768?vw*0.9375:vw-32;const maxHeight=vh-128;const rect=element.getBoundingClientRect();const scale=Math.min(maxHeight/rect.height,maxWidth/rect.width);const center=[rect.left+rect.width/2,rect.top+rect.height/2];const windowCenter=[vw/2,vh/2];const translate=windowCenter.map((w,i)=>(w-center[i])/scale);setActiveStyle({zIndex:202,transform:`scale(${scale}) translate(${translate[0]}px, ${translate[1]}px)`,position:'relative'});};const close=()=>{setActive(null);};const toggle=element=>{const current=active;close();current!==element&&display(element);};(0,react_1.useEffect)(()=>{if(active&&window.innerWidth>768)close();},[scroll]);(0,react_1.useEffect)(()=>{if(isMobile&&active){const html=document.querySelector('html');html.style.overflow='hidden';}else{const html=document.querySelector('html');html.style.overflow='initial';}},[isMobile,active]);return react_1.default.createElement(exports.LightBoxContext.Provider,{value:{active,style,activeStyle,display,close,toggle}},children,hydrated&&react_1.default.createElement(Portal_1.Portal,{containerId:"lsd-presentation"},react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement("div",{className:(0,clsx_1.default)(styles_module_scss_1.default.backdrop,active&&styles_module_scss_1.default.visible)}),react_1.default.createElement("div",{className:(0,clsx_1.default)(styles_module_scss_1.default.navWrapper,active&&styles_module_scss_1.default.visible)},react_1.default.createElement("nav",{className:(0,clsx_1.default)(styles_module_scss_1.default.nav,'navbar',active&&styles_module_scss_1.default.visible)},react_1.default.createElement(Logo_1.default,null),react_1.default.createElement(lsd_react_1.IconButton,{size:"medium",onClick:close},react_1.default.createElement(Icon_1.IconFullscreenExit,null)))))));};exports.LightBoxProvider=LightBoxProvider;exports.LightBoxContext=react_1.default.createContext({style:{},activeStyle:{},active:null,close:null,toggle:null,display:null});const useLightBox=()=>{const ctx=(0,react_1.useContext)(exports.LightBoxContext);const getStyle=element=>({...ctx.style,...(element===ctx.active?ctx.activeStyle:{})});return{getStyle,style:ctx.style,activeStyle:ctx.activeStyle,active:ctx.active,isActive:!!ctx.active,close:ctx.close,toggle:ctx.toggle,display:ctx.display,isActiveElement:el=>ctx.active===el};};exports.useLightBox=useLightBox;const LightBoxWrapper=({children})=>{const ref=(0,react_1.useRef)(null);const childRef=(0,react_1.useRef)(null);const{getStyle,display,isActiveElement}=(0,exports.useLightBox)();const isMobile=(0,useIsMobile_1.useIsMobile)();const onUpdate=(0,react_1.useCallback)(({x,y,scale})=>{const{current:img}=childRef;if(img){const value=(0,react_quick_pinch_zoom_1.make3dTransformValue)({x,y,scale});img.style.setProperty('transform',value);}},[]);const content=isMobile&&ref.current&&isActiveElement(ref.current)?react_1.default.createElement(react_quick_pinch_zoom_1.default,{onUpdate:onUpdate,doubleTapZoomOutOnMaxScale:true,maxZoom:3},react_1.default.createElement("div",{ref:childRef},children)):react_1.default.createElement(react_1.default.Fragment,null,children,react_1.default.createElement(lsd_react_1.IconButton,{className:styles_module_scss_1.default.fullscreenButton,size:"medium",onClick:()=>ref.current&&display(ref.current)},react_1.default.createElement(Icon_1.IconFullscreen,null)));return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement("div",{className:(0,clsx_1.default)(styles_module_scss_1.default.wrapper,isActiveElement(ref.current)&&styles_module_scss_1.default.active),ref:ref,style:ref.current?getStyle(ref.current):{}},content));};exports.LightBoxWrapper=LightBoxWrapper; - -/***/ }), - -/***/ 11679: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useMDXEnhancementElements=exports.MDXEnhancementContext=void 0;const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importStar(__webpack_require__(67294));exports.MDXEnhancementContext=react_1.default.createContext({items:[]});const useMDXEnhancementElements=(component,position,props)=>{const ctx=(0,react_1.useContext)(exports.MDXEnhancementContext);if(!ctx)return[];return(0,react_1.useMemo)(()=>{const items=ctx.items.filter(item=>item.component===component&&item.position===position);return items.map(item=>item.render(props));},[component,position,props]);};exports.useMDXEnhancementElements=useMDXEnhancementElements; - -/***/ }), - -/***/ 30091: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.ThemeProvider=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const react_1=__webpack_require__(16657);const react_2=tslib_1.__importDefault(__webpack_require__(67294));const themes_1=__webpack_require__(51509);const ThemeProvider=({children})=>{const theme=(0,themes_1.useTheme)();return react_2.default.createElement(lsd_react_1.ThemeProvider,{theme:theme.current,injectCssVars:false},react_2.default.createElement(react_1.Global,{styles:theme.cssVars}),children);};exports.ThemeProvider=ThemeProvider; - -/***/ }), - -/***/ 84138: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(30091),exports); - -/***/ }), - -/***/ 59567: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.lsdUtils=exports.LsdUtils=void 0;const lsd_react_1=__webpack_require__(31665);const react_1=__webpack_require__(16657);class LsdUtils{_breakpoints={};getBreakpoints=theme=>{if(this._breakpoints[theme.name]){return this._breakpoints[theme.name];}const breakpoints={};for(let i=0;i{const breakpoints=this.getBreakpoints(theme);return breakpoints[breakpoint];};breakpoints=(exclude=[])=>lsd_react_1.THEME_BREAKPOINTS.filter(b=>!exclude.find(b2=>b2===b));typography=(variant,important=false)=>variant==='subtitle3'?` - font-size: 12px !important; - font-weight: 400 !important; - line-height: 16px !important; - `:` - font-size: var(--lsd-${variant}-fontSize)${important?'!important':''}; - font-weight: var(--lsd-${variant}-fontWeight)${important?'!important':''}; - line-height: var(--lsd-${variant}-lineHeight)${important?'!important':''}; - `;breakpoint=(theme,breakpoint,func='up',next)=>{const{min,max}=this.getBreakpoint(theme,breakpoint);let media=`@media `;if(func==='up'){media+=`(min-width: ${min}px)`;}else if(func==='down')media+=`(max-width: ${max}px)`;else if(func==='between'&&!!next){const nextBreakpoint=this.getBreakpoint(theme,next);media+=`(min-width: ${min}px) and (max-width: ${nextBreakpoint.min-1}px)`;}else media+=`(min-width: ${min}px) and (max-width: ${max}px)`;return`${media}`;};responsive=(theme,breakpoint,func='up')=>{const media=exports.lsdUtils.breakpoint(theme,breakpoint,func);return styles=>(0,react_1.css)` - ${media} { - ${styles} - } - `;};}exports.LsdUtils=LsdUtils;exports.lsdUtils=new LsdUtils(); - -/***/ }), - -/***/ 9259: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.makeStyle=void 0;const makeStyle=(style,vars={})=>({...style,...Object.entries(vars).reduce((value,[name,val])=>({...value,[`--${name}`]:val}),{})});exports.makeStyle=makeStyle; - -/***/ }), - -/***/ 32833: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.settleSync=exports.settle=void 0;const settle=async promise=>{try{const result=typeof promise==='function'?await promise():await promise;return[result,undefined];}catch(error){return[undefined,error];}};exports.settle=settle;const settleSync=func=>{try{return[func(),undefined];}catch(error){return[undefined,error];}};exports.settleSync=settleSync; - -/***/ }), - -/***/ 68347: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.ensureTrailingSlash=exports.ensureTrailingString=void 0;const ensureTrailingString=(str,trail)=>str.endsWith(trail)?str:str+trail;exports.ensureTrailingString=ensureTrailingString;const ensureTrailingSlash=str=>(0,exports.ensureTrailingString)(str,'/');exports.ensureTrailingSlash=ensureTrailingSlash; - -/***/ }), - -/***/ 51509: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useTheme=void 0;const lsd_react_1=__webpack_require__(31665);const theme_common_1=__webpack_require__(93945);const react_1=__webpack_require__(16657);const react_2=__webpack_require__(67294);const useThemeOptions_1=__webpack_require__(38840);const useThemeCssVars=(light,dark,fallback)=>(0,react_2.useMemo)(()=>(0,react_1.css)` - html:not([data-theme]) { - ${fallback.cssVars} - } - - html[data-theme='light'] { - ${light.cssVars} - } - - html[data-theme='dark'] { - ${dark.cssVars} - } - `,[dark,light]);const useTheme=()=>{const colorMode=(0,theme_common_1.useColorMode)();const{typography}=(0,useThemeOptions_1.useThemeOptions)();const genericFontFamily=typography?.genericFontFamily??'sans-serif';const baseThemes=lsd_react_1.defaultThemes;const themes=(0,react_2.useMemo)(()=>{const options={breakpoints:{},palette:{},typography:{},typographyGlobal:{genericFontFamily},spacing:[]};return{light:(0,lsd_react_1.createTheme)(options,baseThemes.light),dark:(0,lsd_react_1.createTheme)(options,baseThemes.dark)};},[baseThemes,genericFontFamily]);return{dark:themes.dark,light:themes.light,current:themes[colorMode.colorMode],colorMode:colorMode.colorMode,cssVars:useThemeCssVars(themes.light,themes.dark,themes.light)};};exports.useTheme=useTheme; - -/***/ }), - -/***/ 24052: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.calcHeroInfoMb=exports.isMobile=exports.generateTextShadow=exports.isTouchDevice=exports.calcScrollThreshold=exports.mapFloat=exports.random=void 0;const random=(min,max)=>{return Math.random()*(max-min)+min;};exports.random=random;const mapFloat=(value,inMin,inMax,outMin,outMax)=>{return(value-inMin)*(outMax-outMin)/(inMax-inMin)+outMin;};exports.mapFloat=mapFloat;const calcScrollThreshold=()=>{return window.innerHeight*0.4;};exports.calcScrollThreshold=calcScrollThreshold;const isTouchDevice=()=>{if(typeof window==='undefined')return false;return'ontouchstart'in window||navigator.maxTouchPoints>0||// @ts-ignore -navigator.msMaxTouchPoints&&navigator.msMaxTouchPoints>0;};exports.isTouchDevice=isTouchDevice;const generateTextShadow=steps=>{let shadows='';for(let i=0;i{if(typeof window==='undefined')return false;return window.innerWidth<997;};exports.isMobile=isMobile;const calcHeroInfoMb=sy=>{return(0,exports.mapFloat)(scrollY,0,(0,exports.calcScrollThreshold)(),0,100);};exports.calcHeroInfoMb=calcHeroInfoMb; - -/***/ }), - -/***/ 17648: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useEventListener=void 0;const react_1=__webpack_require__(67294);const useEventListener=(key,element,listener,options,deps)=>{const _key=(0,react_1.useMemo)(()=>typeof key==='string'?key:key(),[]);const _element=(0,react_1.useMemo)(()=>typeof element==='function'?element():element,[element]);(0,react_1.useEffect)(()=>{if(!_element?.addEventListener||!_element?.removeEventListener)return;_element.addEventListener(_key,listener,options);return()=>{_element.removeEventListener(_key,listener,options);};},[_key,_element]);};exports.useEventListener=useEventListener; - -/***/ }), - -/***/ 67713: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useHydrated=void 0;const react_1=__webpack_require__(67294);const useHydrated=()=>{const[value,setValue]=(0,react_1.useState)(false);(0,react_1.useEffect)(()=>{setValue(true);},[]);return value;};exports.useHydrated=useHydrated; - -/***/ }), - -/***/ 52606: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useIsMobile=void 0;const react_use_1=__webpack_require__(89164);const useIsMobile=()=>(0,react_use_1.useMedia)('(max-width: 1199px)');exports.useIsMobile=useIsMobile; - -/***/ }), - -/***/ 3538: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useNewsletterApi=void 0;const react_1=__webpack_require__(67294);const useNewsletterApi=()=>{const[busy,setBusy]=(0,react_1.useState)(false);const[res,setRes]=(0,react_1.useState)({error:false,message:''});const subscribe=async(listId,email,name)=>{setBusy(true);try{const res=await fetch('https://odoo.logos.co/website_mass_mailing/subscribe2',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({jsonrpc:'2.0',method:'call',params:{name,value:email,list_id:listId,subscription_type:'email'}})});const data=await res.json();setRes({error:false,message:data.result.message});}catch(e){setRes({error:true,message:'Something went wrong!'});}setBusy(false);};return{busy,error:res.error,message:res.message,subscribe};};exports.useNewsletterApi=useNewsletterApi; - -/***/ }), - -/***/ 59213: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.usePersistedHistory=void 0;const react_use_1=__webpack_require__(89164);const usePersistedHistory=(key,options)=>{const unique=options?.unique??false;const equals=options?.equals??((a,b)=>a===b);const maxItems=options?.maxItems??null;const[history,setHistory]=(0,react_use_1.useLocalStorage)('logos-docusaurus-theme-'+key,[]);const add=value=>{const arr=history??[];const newHistory=[value,...(unique?arr.filter(item=>!equals(item,value)):arr)];setHistory(maxItems?newHistory.slice(0,maxItems):newHistory);};const remove=rm=>{const arr=history??[];setHistory(arr.filter((item,index)=>!rm(item,index)));};const removeByIndex=index=>{remove((item,idx)=>idx===index);};const clear=()=>{setHistory([]);};return{add,clear,remove,removeByIndex,list:history};};exports.usePersistedHistory=usePersistedHistory; - -/***/ }), - -/***/ 40213: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useScrollY=void 0;const useWindowEventListener_1=__webpack_require__(21457);const react_1=__webpack_require__(67294);const useScrollY=()=>{const[scrollY,setScrollY]=(0,react_1.useState)(0);(0,useWindowEventListener_1.useWindowEventListener)('scroll',()=>{setScrollY(window.scrollY);});return scrollY;};exports.useScrollY=useScrollY; - -/***/ }), - -/***/ 38840: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useDocThemeOptions=exports.useThemeOptions=void 0;const tslib_1=__webpack_require__(70655);const index_js_1=__webpack_require__(4452);const useDocusaurusContext_1=tslib_1.__importDefault(__webpack_require__(6832));const useThemeOptions=()=>{const{siteConfig:{customFields={}}}=(0,useDocusaurusContext_1.default)();return customFields['logos-docusaurus-theme']??{};};exports.useThemeOptions=useThemeOptions;const useDocThemeOptions=()=>{const activePlugin=(0,index_js_1.useActivePlugin)();const themeOptions=(0,exports.useThemeOptions)();return activePlugin?themeOptions?.docs?.[activePlugin?.pluginId]??{}:{};};exports.useDocThemeOptions=useDocThemeOptions; - -/***/ }), - -/***/ 21457: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useWindowEventListener=void 0;const useEventListener_1=__webpack_require__(17648);const useWindowEventListener=(key,listener,options,deps=[])=>{(0,useEventListener_1.useEventListener)(key,()=>typeof window!=='undefined'&&window,listener,options,deps);};exports.useWindowEventListener=useWindowEventListener; - -/***/ }), - -/***/ 60578: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const theme_common_1=__webpack_require__(93945);const Translate_1=tslib_1.__importDefault(__webpack_require__(11614));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const styles_module_css_1=tslib_1.__importDefault(__webpack_require__(30292));function NoteIcon(){return react_1.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg"},react_1.default.createElement("path",{d:"M8.00004 11.3333C8.18893 11.3333 8.34737 11.2693 8.47537 11.1413C8.60337 11.0133 8.66715 10.8551 8.66671 10.6667C8.66671 10.4778 8.60271 10.3193 8.47471 10.1913C8.34671 10.0633 8.18849 9.99957 8.00004 10C7.81115 10 7.65271 10.064 7.52471 10.192C7.39671 10.32 7.33293 10.4782 7.33337 10.6667C7.33337 10.8556 7.39737 11.014 7.52537 11.142C7.65337 11.27 7.8116 11.3338 8.00004 11.3333ZM7.33337 8.66668H8.66671V4.66668H7.33337V8.66668ZM8.00004 14.6667C7.07782 14.6667 6.21115 14.4916 5.40004 14.1413C4.58893 13.7911 3.88337 13.3162 3.28337 12.7167C2.68337 12.1167 2.20849 11.4111 1.85871 10.6C1.50893 9.7889 1.33382 8.92223 1.33337 8.00001C1.33337 7.07779 1.50849 6.21112 1.85871 5.40001C2.20893 4.5889 2.68382 3.88334 3.28337 3.28334C3.88337 2.68334 4.58893 2.20845 5.40004 1.85868C6.21115 1.5089 7.07782 1.33379 8.00004 1.33334C8.92226 1.33334 9.78893 1.50845 10.6 1.85868C11.4112 2.2089 12.1167 2.68379 12.7167 3.28334C13.3167 3.88334 13.7918 4.5889 14.142 5.40001C14.4923 6.21112 14.6672 7.07779 14.6667 8.00001C14.6667 8.92223 14.4916 9.7889 14.1414 10.6C13.7912 11.4111 13.3163 12.1167 12.7167 12.7167C12.1167 13.3167 11.4112 13.7918 10.6 14.142C9.78893 14.4922 8.92226 14.6671 8.00004 14.6667ZM8.00004 13.3333C9.48893 13.3333 10.75 12.8167 11.7834 11.7833C12.8167 10.75 13.3334 9.4889 13.3334 8.00001C13.3334 6.51112 12.8167 5.25001 11.7834 4.21668C10.75 3.18334 9.48893 2.66668 8.00004 2.66668C6.51115 2.66668 5.25004 3.18334 4.21671 4.21668C3.18337 5.25001 2.66671 6.51112 2.66671 8.00001C2.66671 9.4889 3.18337 10.75 4.21671 11.7833C5.25004 12.8167 6.51115 13.3333 8.00004 13.3333Z",fill:"currentColor"}));}function TipIcon(){return react_1.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",xmlns:"http://www.w3.org/2000/svg"},react_1.default.createElement("path",{d:"M8 14.6666C7.63333 14.6666 7.31933 14.536 7.058 14.2746C6.79667 14.0133 6.66622 13.6995 6.66667 13.3333H9.33333C9.33333 13.7 9.20267 14.014 8.94133 14.2753C8.68 14.5366 8.36622 14.6671 8 14.6666ZM5.33333 12.6666V11.3333H10.6667V12.6666H5.33333ZM5.5 10.6666C4.73333 10.2111 4.12489 9.59998 3.67467 8.83331C3.22445 8.06665 2.99956 7.23331 3 6.33331C3 4.94442 3.48622 3.76376 4.45867 2.79131C5.43111 1.81887 6.61156 1.33287 8 1.33331C9.38889 1.33331 10.5696 1.81954 11.542 2.79198C12.5144 3.76442 13.0004 4.94487 13 6.33331C13 7.23331 12.7751 8.06665 12.3253 8.83331C11.8756 9.59998 11.2671 10.2111 10.5 10.6666H5.5ZM5.9 9.33331H10.1C10.6 8.97776 10.9862 8.53887 11.2587 8.01665C11.5311 7.49442 11.6671 6.93331 11.6667 6.33331C11.6667 5.31109 11.3111 4.44442 10.6 3.73331C9.88889 3.0222 9.02222 2.66665 8 2.66665C6.97778 2.66665 6.11111 3.0222 5.4 3.73331C4.68889 4.44442 4.33333 5.31109 4.33333 6.33331C4.33333 6.93331 4.46956 7.49442 4.742 8.01665C5.01444 8.53887 5.40045 8.97776 5.9 9.33331Z",fill:"currentColor"}));}function DangerIcon(){return react_1.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},react_1.default.createElement("path",{d:"M5.5 14L2 10.5V5.5L5.5 2H10.5L14 5.5V10.5L10.5 14H5.5ZM6.1 10.8333L8 8.93333L9.9 10.8333L10.8333 9.9L8.93333 8L10.8333 6.1L9.9 5.16667L8 7.06667L6.1 5.16667L5.16667 6.1L7.06667 8L5.16667 9.9L6.1 10.8333ZM6.06667 12.6667H9.93333L12.6667 9.93333V6.06667L9.93333 3.33333H6.06667L3.33333 6.06667V9.93333L6.06667 12.6667Z",fill:"currentColor"}));}function InfoIcon(){return react_1.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},react_1.default.createElement("path",{d:"M7.33334 11.3333H8.66668V7.33331H7.33334V11.3333ZM8.00001 5.99998C8.1889 5.99998 8.34734 5.93598 8.47534 5.80798C8.60334 5.67998 8.66712 5.52176 8.66668 5.33331C8.66668 5.14442 8.60268 4.98598 8.47468 4.85798C8.34668 4.72998 8.18845 4.6662 8.00001 4.66665C7.81112 4.66665 7.65268 4.73065 7.52468 4.85865C7.39668 4.98665 7.3329 5.14487 7.33334 5.33331C7.33334 5.5222 7.39734 5.68065 7.52534 5.80865C7.65334 5.93665 7.81157 6.00042 8.00001 5.99998ZM8.00001 14.6666C7.07779 14.6666 6.21112 14.4915 5.40001 14.1413C4.5889 13.7911 3.88334 13.3162 3.28334 12.7166C2.68334 12.1166 2.20845 11.4111 1.85868 10.6C1.5089 9.78887 1.33379 8.9222 1.33334 7.99998C1.33334 7.07776 1.50845 6.21109 1.85868 5.39998C2.2089 4.58887 2.68379 3.88331 3.28334 3.28331C3.88334 2.68331 4.5889 2.20842 5.40001 1.85865C6.21112 1.50887 7.07779 1.33376 8.00001 1.33331C8.92223 1.33331 9.7889 1.50842 10.6 1.85865C11.4111 2.20887 12.1167 2.68376 12.7167 3.28331C13.3167 3.88331 13.7918 4.58887 14.142 5.39998C14.4922 6.21109 14.6671 7.07776 14.6667 7.99998C14.6667 8.9222 14.4916 9.78887 14.1413 10.6C13.7911 11.4111 13.3162 12.1166 12.7167 12.7166C12.1167 13.3166 11.4111 13.7918 10.6 14.142C9.7889 14.4922 8.92223 14.6671 8.00001 14.6666ZM8.00001 13.3333C9.4889 13.3333 10.75 12.8166 11.7833 11.7833C12.8167 10.75 13.3333 9.48887 13.3333 7.99998C13.3333 6.51109 12.8167 5.24998 11.7833 4.21665C10.75 3.18331 9.4889 2.66665 8.00001 2.66665C6.51112 2.66665 5.25001 3.18331 4.21668 4.21665C3.18334 5.24998 2.66668 6.51109 2.66668 7.99998C2.66668 9.48887 3.18334 10.75 4.21668 11.7833C5.25001 12.8166 6.51112 13.3333 8.00001 13.3333Z",fill:"currentColor"}));}function CautionIcon(){return react_1.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg"},react_1.default.createElement("path",{d:"M8.00001 14.6833C7.82224 14.6833 7.65268 14.65 7.49135 14.5833C7.33001 14.5167 7.1829 14.4222 7.05001 14.3L1.70001 8.94999C1.57779 8.81666 1.48335 8.66932 1.41668 8.50799C1.35001 8.34666 1.31668 8.17732 1.31668 7.99999C1.31668 7.82221 1.35001 7.64999 1.41668 7.48332C1.48335 7.31666 1.57779 7.17221 1.70001 7.04999L7.05001 1.69999C7.18335 1.56666 7.33068 1.46932 7.49201 1.40799C7.65335 1.34666 7.82268 1.31621 8.00001 1.31666C8.17779 1.31666 8.35001 1.34732 8.51668 1.40866C8.68335 1.46999 8.82779 1.5671 8.95001 1.69999L14.3 7.04999C14.4333 7.17221 14.5307 7.31666 14.592 7.48332C14.6533 7.64999 14.6838 7.82221 14.6833 7.99999C14.6833 8.17777 14.6529 8.34732 14.592 8.50866C14.5311 8.66999 14.4338 8.8171 14.3 8.94999L8.95001 14.3C8.82779 14.4222 8.68335 14.5167 8.51668 14.5833C8.35001 14.65 8.17779 14.6833 8.00001 14.6833ZM8.00001 13.35L13.35 7.99999L8.00001 2.64999L2.65001 7.99999L8.00001 13.35ZM7.33335 8.66666H8.66668V4.66666H7.33335V8.66666ZM8.00001 10.6667C8.1889 10.6667 8.34735 10.6027 8.47535 10.4747C8.60335 10.3467 8.66713 10.1884 8.66668 9.99999C8.66668 9.8111 8.60268 9.65266 8.47468 9.52466C8.34668 9.39666 8.18846 9.33288 8.00001 9.33332C7.81113 9.33332 7.65268 9.39732 7.52468 9.52532C7.39668 9.65332 7.3329 9.81154 7.33335 9.99999C7.33335 10.1889 7.39735 10.3473 7.52535 10.4753C7.65335 10.6033 7.81157 10.6671 8.00001 10.6667Z",fill:"currentColor"}));}// eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style -const AdmonitionConfigs={note:{infimaClassName:'secondary',iconComponent:NoteIcon,label:react_1.default.createElement(Translate_1.default,{id:"theme.admonition.note",description:"The default label used for the Note admonition (:::note)"},"note")},tip:{infimaClassName:'success',iconComponent:TipIcon,label:react_1.default.createElement(Translate_1.default,{id:"theme.admonition.tip",description:"The default label used for the Tip admonition (:::tip)"},"tip")},danger:{infimaClassName:'danger',iconComponent:DangerIcon,label:react_1.default.createElement(Translate_1.default,{id:"theme.admonition.danger",description:"The default label used for the Danger admonition (:::danger)"},"danger")},info:{infimaClassName:'info',iconComponent:InfoIcon,label:react_1.default.createElement(Translate_1.default,{id:"theme.admonition.info",description:"The default label used for the Info admonition (:::info)"},"info")},caution:{infimaClassName:'warning',iconComponent:CautionIcon,label:react_1.default.createElement(Translate_1.default,{id:"theme.admonition.caution",description:"The default label used for the Caution admonition (:::caution)"},"caution")}};// Legacy aliases, undocumented but kept for retro-compatibility -const aliases={secondary:'note',important:'info',success:'tip',warning:'danger'};function getAdmonitionConfig(unsafeType){const type=aliases[unsafeType]??unsafeType;const config=AdmonitionConfigs[type];if(config){return config;}console.warn(`No admonition config found for admonition type "${type}". Using Info as fallback.`);return AdmonitionConfigs.info;}// Workaround because it's difficult in MDX v1 to provide a MDX title as props -// See https://github.com/facebook/docusaurus/pull/7152#issuecomment-1145779682 -function extractMDXAdmonitionTitle(children){const items=react_1.default.Children.toArray(children);const mdxAdmonitionTitle=items.find(item=>react_1.default.isValidElement(item)&&item.props?.mdxType==='mdxAdmonitionTitle');const rest=react_1.default.createElement(react_1.default.Fragment,null,items.filter(item=>item!==mdxAdmonitionTitle));return{mdxAdmonitionTitle,rest};}function processAdmonitionProps(props){const{mdxAdmonitionTitle,rest}=extractMDXAdmonitionTitle(props.children);return{...props,title:props.title??mdxAdmonitionTitle,children:rest};}function Admonition(props){const{children,type,title,icon:iconProp}=processAdmonitionProps(props);const typeConfig=getAdmonitionConfig(type);const titleLabel=title??typeConfig.label;const{iconComponent:IconComponent}=typeConfig;const icon=iconProp??react_1.default.createElement(IconComponent,null);return react_1.default.createElement("div",{className:(0,clsx_1.default)(theme_common_1.ThemeClassNames.common.admonition,theme_common_1.ThemeClassNames.common.admonitionType(props.type),`alert--${typeConfig.infimaClassName}`,styles_module_css_1.default.admonition)},react_1.default.createElement("span",{className:styles_module_css_1.default.admonitionIcon},icon),react_1.default.createElement("div",null,react_1.default.createElement(lsd_react_1.Typography,{variant:"body1",className:styles_module_css_1.default.admonitionHeading},titleLabel),react_1.default.createElement(lsd_react_1.Typography,{variant:"body1",className:styles_module_css_1.default.admonitionContent},children)));}exports.Z=Admonition; - -/***/ }), - -/***/ 79896: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const Container_1=tslib_1.__importDefault(__webpack_require__(65568));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const styles_module_css_1=tslib_1.__importDefault(__webpack_require__(57003));function ContainerWrapper(props){return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(Container_1.default,{...props,className:(0,clsx_1.default)(props.className,styles_module_css_1.default.codeBlockContainer)}));}exports["default"]=ContainerWrapper; - -/***/ }), - -/***/ 75962: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const theme_common_1=__webpack_require__(93945);const internal_1=__webpack_require__(18279);const prism_react_renderer_1=tslib_1.__importStar(__webpack_require__(23746));const Line_1=tslib_1.__importDefault(__webpack_require__(39426));const CopyButton_1=tslib_1.__importDefault(__webpack_require__(15094));const WordWrapButton_1=tslib_1.__importDefault(__webpack_require__(47857));const Container_1=tslib_1.__importDefault(__webpack_require__(79896));const styles_module_css_1=tslib_1.__importDefault(__webpack_require__(66292));const lsd_react_1=__webpack_require__(31665);function CodeBlockString({children,className:blockClassName='',metastring,title:titleProp,showLineNumbers:showLineNumbersProp,language:languageProp}){const{prism:{defaultLanguage,magicComments}}=(0,theme_common_1.useThemeConfig)();const language=languageProp??(0,internal_1.parseLanguage)(blockClassName)??defaultLanguage;const prismTheme=(0,theme_common_1.usePrismTheme)();const wordWrap=(0,internal_1.useCodeWordWrap)();// We still parse the metastring in case we want to support more syntax in the -// future. Note that MDX doesn't strip quotes when parsing metastring: -// "title=\"xyz\"" => title: "\"xyz\"" -const title=(0,internal_1.parseCodeBlockTitle)(metastring)||titleProp;const{lineClassNames,code}=(0,internal_1.parseLines)(children,{metastring,language,magicComments});const showLineNumbers=showLineNumbersProp??(0,internal_1.containsLineNumbers)(metastring);return react_1.default.createElement(Container_1.default,{as:"div",className:(0,clsx_1.default)(blockClassName,language&&!blockClassName.includes(`language-${language}`)&&`language-${language}`)},title&&react_1.default.createElement("div",{className:styles_module_css_1.default.codeBlockTitle},react_1.default.createElement(lsd_react_1.Typography,{variant:"subtitle1"},title)),react_1.default.createElement("div",{className:styles_module_css_1.default.codeBlockContent},react_1.default.createElement(prism_react_renderer_1.default,{...prism_react_renderer_1.defaultProps,theme:prismTheme,code:code,language:language??'text'},({className,tokens,getLineProps,getTokenProps})=>react_1.default.createElement("pre",{/* eslint-disable-next-line jsx-a11y/no-noninteractive-tabindex */tabIndex:0,ref:wordWrap.codeBlockRef,className:(0,clsx_1.default)(className,styles_module_css_1.default.codeBlock,'thin-scrollbar')},react_1.default.createElement("code",{className:(0,clsx_1.default)(styles_module_css_1.default.codeBlockLines,showLineNumbers&&styles_module_css_1.default.codeBlockLinesWithNumbering)},tokens.map((line,i)=>react_1.default.createElement(Line_1.default,{key:i,line:line,getLineProps:getLineProps,getTokenProps:getTokenProps,classNames:lineClassNames[i],showLineNumbers:showLineNumbers}))))),react_1.default.createElement("div",{className:styles_module_css_1.default.buttonGroup},(wordWrap.isEnabled||wordWrap.isCodeScrollable)&&react_1.default.createElement(WordWrapButton_1.default,{className:styles_module_css_1.default.codeButton,onClick:()=>wordWrap.toggle(),isEnabled:wordWrap.isEnabled}),react_1.default.createElement(CopyButton_1.default,{className:styles_module_css_1.default.codeButton,code:code}))));}exports.Z=CodeBlockString; - -/***/ }), - -/***/ 15094: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importStar(__webpack_require__(67294));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));// @ts-ignore: TODO, we need to make theme-classic have type: module -const copy_text_to_clipboard_1=tslib_1.__importDefault(__webpack_require__(32111));const Translate_1=__webpack_require__(11614);const Success_1=tslib_1.__importDefault(__webpack_require__(79939));const styles_module_css_1=tslib_1.__importDefault(__webpack_require__(96931));const Icon_1=__webpack_require__(6980);function CopyButton({code,className}){const[isCopied,setIsCopied]=(0,react_1.useState)(false);const copyTimeout=(0,react_1.useRef)(undefined);const handleCopyCode=(0,react_1.useCallback)(()=>{(0,copy_text_to_clipboard_1.default)(code);setIsCopied(true);copyTimeout.current=window.setTimeout(()=>{setIsCopied(false);},1000);},[code]);(0,react_1.useEffect)(()=>()=>window.clearTimeout(copyTimeout.current),[]);return react_1.default.createElement("button",{type:"button","aria-label":isCopied?(0,Translate_1.translate)({id:'theme.CodeBlock.copied',message:'Copied',description:'The copied button label on code blocks'}):(0,Translate_1.translate)({id:'theme.CodeBlock.copyButtonAriaLabel',message:'Copy code to clipboard',description:'The ARIA label for copy code blocks button'}),title:(0,Translate_1.translate)({id:'theme.CodeBlock.copy',message:'Copy',description:'The copy button label on code blocks'}),className:(0,clsx_1.default)('clean-btn',className,styles_module_css_1.default.copyButton,isCopied&&styles_module_css_1.default.copyButtonCopied),onClick:handleCopyCode},react_1.default.createElement("span",{className:styles_module_css_1.default.copyButtonIcons,"aria-hidden":"true"},isCopied?react_1.default.createElement(Success_1.default,{className:styles_module_css_1.default.copyButtonSuccessIcon}):react_1.default.createElement(Icon_1.IconCopy,{className:styles_module_css_1.default.copyButtonIcon})));}exports["default"]=CopyButton; - -/***/ }), - -/***/ 86687: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const CodeBlock_1=tslib_1.__importDefault(__webpack_require__(69689));const react_1=tslib_1.__importDefault(__webpack_require__(67294));function CodeBlockWrapper(props){return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(CodeBlock_1.default,{...props}));}exports.Z=CodeBlockWrapper; - -/***/ }), - -/***/ 61818: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const Translate_1=__webpack_require__(11614);const useIsBrowser_1=tslib_1.__importDefault(__webpack_require__(5730));const DarkMode_1=tslib_1.__importDefault(__webpack_require__(5574));const LightMode_1=tslib_1.__importDefault(__webpack_require__(60388));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const styles_module_scss_1=tslib_1.__importDefault(__webpack_require__(41520));function ColorModeToggle({className,buttonClassName,value,onChange}){const isBrowser=(0,useIsBrowser_1.default)();const title=(0,Translate_1.translate)({message:'Switch between dark and light mode (currently {mode})',id:'theme.colorToggle.ariaLabel',description:'The ARIA label for the navbar color mode toggle'},{mode:value==='dark'?(0,Translate_1.translate)({message:'dark mode',id:'theme.colorToggle.ariaLabel.mode.dark',description:'The name for the dark color mode'}):(0,Translate_1.translate)({message:'light mode',id:'theme.colorToggle.ariaLabel.mode.light',description:'The name for the light color mode'})});return react_1.default.createElement(lsd_react_1.IconButton,{className:(0,clsx_1.default)('clean-btn',styles_module_scss_1.default.toggle,className,!isBrowser&&styles_module_scss_1.default.toggleButtonDisabled,buttonClassName),type:"button",onClick:()=>onChange(value==='dark'?'light':'dark'),disabled:!isBrowser,title:title,"aria-label":title,"aria-live":"polite"},react_1.default.createElement(LightMode_1.default,{className:(0,clsx_1.default)(styles_module_scss_1.default.toggleIcon,styles_module_scss_1.default.lightToggleIcon)}),react_1.default.createElement(DarkMode_1.default,{className:(0,clsx_1.default)(styles_module_scss_1.default.toggleIcon,styles_module_scss_1.default.darkToggleIcon)}));}exports.Z=react_1.default.memo(ColorModeToggle); - -/***/ }), - -/***/ 78375: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.BreadcrumbsBase=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const index_js_1=__webpack_require__(4452);const theme_common_1=__webpack_require__(93945);const internal_1=__webpack_require__(18279);const Translate_1=__webpack_require__(11614);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const styles_module_css_1=tslib_1.__importDefault(__webpack_require__(23718));// TODO move to design system folder -function BreadcrumbsItemLink({children,href,isLast}){const className='breadcrumbs__link';if(isLast){return react_1.default.createElement(lsd_react_1.Typography,{variant:"body3",component:"span",className:className,itemProp:"name"},children);}return href?react_1.default.createElement(Link_1.default,{className:className,href:href,itemProp:"item"},react_1.default.createElement(lsd_react_1.Typography,{variant:"body3",component:"span",itemProp:"name"},children)):// TODO Google search console doesn't like breadcrumb items without href. -// The schema doesn't seem to require `id` for each `item`, although Google -// insist to infer one, even if it's invalid. Removing `itemProp="item -// name"` for now, since I don't know how to properly fix it. -// See https://github.com/facebook/docusaurus/issues/7241 -react_1.default.createElement(lsd_react_1.Typography,{variant:"body3",component:"span",className:className},children);}// TODO move to design system folder -function BreadcrumbsItem({children,active,index,addMicrodata}){return react_1.default.createElement("li",{...(addMicrodata&&{itemScope:true,itemProp:'itemListElement',itemType:'https://schema.org/ListItem'}),className:(0,clsx_1.default)('breadcrumbs__item',{'breadcrumbs__item--active':active})},children,react_1.default.createElement("meta",{itemProp:"position",content:String(index+1)}));}const BreadcrumbsBase=({homePage,homePageLink,breadcrumbs})=>{if(!breadcrumbs){return null;}const categoryToLink=['events'];return react_1.default.createElement("nav",{className:(0,clsx_1.default)(theme_common_1.ThemeClassNames.docs.docBreadcrumbs,styles_module_css_1.default.breadcrumbsContainer),"aria-label":(0,Translate_1.translate)({id:'theme.docs.breadcrumbs.navAriaLabel',message:'Breadcrumbs',description:'The ARIA label for the breadcrumbs'})},react_1.default.createElement("ul",{className:"breadcrumbs",itemScope:true,itemType:"https://schema.org/BreadcrumbList"},!!homePage&&react_1.default.createElement(Link_1.default,{to:homePageLink,className:(0,clsx_1.default)('breadcrumbs__item')},react_1.default.createElement(lsd_react_1.Typography,{variant:"body3",component:"span"},homePage)),breadcrumbs.map((item,idx)=>{const isLast=idx===breadcrumbs.length-1;const convertCategoryToLink=categoryToLink.includes(item.label);return react_1.default.createElement(BreadcrumbsItem,{key:idx,active:isLast,index:idx,addMicrodata:!!item.href},convertCategoryToLink?react_1.default.createElement(Link_1.default,{to:`/${item.label}`},react_1.default.createElement(BreadcrumbsItemLink,{href:item.href,isLast:isLast},item.label)):react_1.default.createElement(BreadcrumbsItemLink,{href:item.href,isLast:isLast},item.label));})));};exports.BreadcrumbsBase=BreadcrumbsBase;function DocBreadcrumbs(){const breadcrumbs=(0,internal_1.useSidebarBreadcrumbs)();const homePageRoute=(0,internal_1.useHomePageRoute)();const plugin=(0,index_js_1.useActivePlugin)();if(!breadcrumbs){return null;}const routeBasePath=plugin?.pluginData.path;return react_1.default.createElement(exports.BreadcrumbsBase,{homePage:homePageRoute&&(0,Translate_1.translate)({id:'theme.docs.breadcrumbs.homePageLabel',message:'Home'}),breadcrumbs:breadcrumbs,homePageLink:routeBasePath});}exports["default"]=DocBreadcrumbs; - -/***/ }), - -/***/ 81768: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const theme_common_1=__webpack_require__(93945);const internal_1=__webpack_require__(18279);const MDXContent_1=tslib_1.__importDefault(__webpack_require__(28013));const Heading_1=tslib_1.__importDefault(__webpack_require__(99276));/** - Title can be declared inside md content or declared through - front matter and added manually. To make both cases consistent, - the added title is added under the same div.markdown block - See https://github.com/facebook/docusaurus/pull/4882#issuecomment-853021120 - - We render a "synthetic title" if: - - user doesn't ask to hide it with front matter - - the markdown content does not already contain a top-level h1 heading -*/function useSyntheticTitle(){const{metadata,frontMatter,contentTitle}=(0,internal_1.useDoc)();const shouldRender=!frontMatter.hide_title&&typeof contentTitle==='undefined';if(!shouldRender){return null;}return metadata.title;}function DocItemContent({children}){const syntheticTitle=useSyntheticTitle();return react_1.default.createElement("div",{className:(0,clsx_1.default)(theme_common_1.ThemeClassNames.docs.docMarkdown,'markdown')},syntheticTitle&&react_1.default.createElement("header",null,react_1.default.createElement(Heading_1.default,{as:"h1"},syntheticTitle)),react_1.default.createElement(MDXContent_1.default,null,children));}exports["default"]=DocItemContent; - -/***/ }), - -/***/ 72103: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useDocTOC=void 0;const tslib_1=__webpack_require__(70655);const theme_common_1=__webpack_require__(93945);const internal_1=__webpack_require__(18279);const DocBreadcrumbs_1=tslib_1.__importDefault(__webpack_require__(78375));const Content_1=tslib_1.__importDefault(__webpack_require__(81768));const Footer_1=tslib_1.__importDefault(__webpack_require__(45237));const Paginator_1=tslib_1.__importDefault(__webpack_require__(4316));const Desktop_1=tslib_1.__importDefault(__webpack_require__(80578));const Mobile_1=tslib_1.__importDefault(__webpack_require__(15854));const DocVersionBadge_1=tslib_1.__importDefault(__webpack_require__(74054));const DocVersionBanner_1=tslib_1.__importDefault(__webpack_require__(18554));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const react_use_1=__webpack_require__(89164);const MDXEnhancement_context_1=__webpack_require__(11679);const styles_module_scss_1=tslib_1.__importDefault(__webpack_require__(58615));/** - * Decide if the toc should be rendered, on mobile or desktop viewports - */function useDocTOC(){const{frontMatter,toc}=(0,internal_1.useDoc)();const windowSize=(0,theme_common_1.useWindowSize)();const isDesktop=(0,react_use_1.useMedia)('(min-width: 1200px)');const hidden=frontMatter.hide_table_of_contents;const canRender=!hidden&&toc.length>0;const mobile=canRender?react_1.default.createElement("div",{className:styles_module_scss_1.default.tocMobile},react_1.default.createElement(Mobile_1.default,null)):undefined;const desktop=canRender&&(isDesktop||windowSize==='ssr')?react_1.default.createElement(Desktop_1.default,null):undefined;return{hidden,mobile,desktop};}exports.useDocTOC=useDocTOC;function DocItemLayout({children}){const docTOC=useDocTOC();return react_1.default.createElement("div",{className:(0,clsx_1.default)('row',styles_module_scss_1.default.docItemGrid)},react_1.default.createElement("div",{className:(0,clsx_1.default)(styles_module_scss_1.default.docItemCol)},react_1.default.createElement(DocVersionBanner_1.default,null),react_1.default.createElement("div",{className:styles_module_scss_1.default.docItemContainer},react_1.default.createElement("article",null,react_1.default.createElement(DocBreadcrumbs_1.default,null),react_1.default.createElement(DocVersionBadge_1.default,null),react_1.default.createElement(MDXEnhancement_context_1.MDXEnhancementContext.Provider,{value:{items:[{component:'heading',position:'after',render:props=>props.as==='h1'&&docTOC.mobile}]}},react_1.default.createElement(Content_1.default,null,children)),react_1.default.createElement(Footer_1.default,null)),react_1.default.createElement(Paginator_1.default,null))),react_1.default.createElement("div",{className:styles_module_scss_1.default.gap1}),docTOC.desktop&&react_1.default.createElement("div",{className:(0,clsx_1.default)(styles_module_scss_1.default.toc)},docTOC.desktop));}exports["default"]=DocItemLayout; - -/***/ }), - -/***/ 59047: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const theme_common_1=__webpack_require__(93945);const internal_1=__webpack_require__(18279);const Metadata_1=tslib_1.__importDefault(__webpack_require__(80900));const Layout_1=tslib_1.__importDefault(__webpack_require__(72103));function DocItem(props){const docHtmlClassName=`docs-doc-id-${props.content.metadata.unversionedId}`;const MDXComponent=props.content;return react_1.default.createElement(internal_1.DocProvider,{content:props.content},react_1.default.createElement(theme_common_1.HtmlClassNameProvider,{className:docHtmlClassName},react_1.default.createElement(Metadata_1.default,null),react_1.default.createElement(Layout_1.default,null,react_1.default.createElement(MDXComponent,null))));}exports["default"]=DocItem; - -/***/ }), - -/***/ 14711: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ DocSidebarDesktopContent) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(86010); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(18015); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(69061); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(63735); -/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11614); -/* harmony import */ var _theme_DocSidebarItems__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(45709); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(71907); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_3__); -function useShowAnnouncementBar(){const{isActive}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_4__/* .useAnnouncementBar */ .nT)();const[showAnnouncementBar,setShowAnnouncementBar]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(isActive);(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_5__/* .useScrollPosition */ .RF)(({scrollY})=>{if(isActive){setShowAnnouncementBar(scrollY===0);}},[isActive]);return isActive&&showAnnouncementBar;}function DocSidebarDesktopContent({path,sidebar,className}){const showAnnouncementBar=useShowAnnouncementBar();return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("nav",{"aria-label":(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__.translate)({id:'theme.docs.sidebar.navAriaLabel',message:'Docs sidebar',description:'The ARIA label for the sidebar navigation'}),className:(0,clsx__WEBPACK_IMPORTED_MODULE_6__["default"])('menu thin-scrollbar',(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().menu),showAnnouncementBar&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_3___default().menuWithAnnouncementBar),className)},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("ul",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_6__["default"])(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_7__/* .ThemeClassNames.docs.docSidebarMenu */ .k.docs.docSidebarMenu,'menu__list')},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_theme_DocSidebarItems__WEBPACK_IMPORTED_MODULE_2__["default"],{items:sidebar,activePath:path,level:1})));} - -/***/ }), - -/***/ 87879: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const theme_common_1=__webpack_require__(93945);const Logo_1=tslib_1.__importDefault(__webpack_require__(60969));const Content_1=tslib_1.__importDefault(__webpack_require__(14711));const styles_module_css_1=tslib_1.__importDefault(__webpack_require__(40458));function DocSidebarDesktop({path,sidebar,onCollapse,isHidden}){const{navbar:{hideOnScroll},docs:{sidebar:{hideable}}}=(0,theme_common_1.useThemeConfig)();return react_1.default.createElement("div",{className:(0,clsx_1.default)(styles_module_css_1.default.sidebar,hideOnScroll&&styles_module_css_1.default.sidebarWithHideableNavbar,isHidden&&styles_module_css_1.default.sidebarHidden)},hideOnScroll&&react_1.default.createElement(Logo_1.default,{tabIndex:-1,className:styles_module_css_1.default.sidebarLogo}),react_1.default.createElement(Content_1.default,{path:path,sidebar:sidebar}));}exports["default"]=react_1.default.memo(DocSidebarDesktop); - -/***/ }), - -/***/ 80668: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const theme_common_1=__webpack_require__(93945);const Desktop_1=tslib_1.__importDefault(__webpack_require__(87879));const Mobile_1=tslib_1.__importDefault(__webpack_require__(54677));function DocSidebar(props){const windowSize=(0,theme_common_1.useWindowSize)();// Desktop sidebar visible on hydration: need SSR rendering -const shouldRenderSidebarDesktop=windowSize==='desktop'||windowSize==='ssr';// Mobile sidebar not visible on hydration: can avoid SSR rendering -const shouldRenderSidebarMobile=windowSize==='mobile';return react_1.default.createElement(react_1.default.Fragment,null,shouldRenderSidebarDesktop&&react_1.default.createElement(Desktop_1.default,{...props}),shouldRenderSidebarMobile&&react_1.default.createElement(Mobile_1.default,{...props}));}exports.Z=DocSidebar; - -/***/ }), - -/***/ 33387: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const Translate_1=__webpack_require__(11614);const theme_common_1=__webpack_require__(93945);const internal_1=__webpack_require__(18279);const useIsBrowser_1=tslib_1.__importDefault(__webpack_require__(5730));const DocSidebarItems_1=tslib_1.__importDefault(__webpack_require__(45709));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importStar(__webpack_require__(67294));const style_module_scss_1=tslib_1.__importDefault(__webpack_require__(56676));// If we navigate to a category and it becomes active, it should automatically -// expand itself -function useAutoExpandActiveCategory({isActive,collapsed,updateCollapsed}){const wasActive=(0,theme_common_1.usePrevious)(isActive);(0,react_1.useEffect)(()=>{const justBecameActive=isActive&&!wasActive;if(justBecameActive&&collapsed){updateCollapsed(false);}},[isActive,wasActive,collapsed,updateCollapsed]);}/** - * When a collapsible category has no link, we still link it to its first child - * during SSR as a temporary fallback. This allows to be able to navigate inside - * the category even when JS fails to load, is delayed or simply disabled - * React hydration becomes an optional progressive enhancement - * see https://github.com/facebookincubator/infima/issues/36#issuecomment-772543188 - * see https://github.com/facebook/docusaurus/issues/3030 - */function useCategoryHrefWithSSRFallback(item){const isBrowser=(0,useIsBrowser_1.default)();return(0,react_1.useMemo)(()=>{if(item.href){return item.href;}// In these cases, it's not necessary to render a fallback -// We skip the "findFirstCategoryLink" computation -if(isBrowser||!item.collapsible){return undefined;}return(0,internal_1.findFirstCategoryLink)(item);},[item,isBrowser]);}function CollapseButton({categoryLabel,onClick}){return react_1.default.createElement("button",{"aria-label":(0,Translate_1.translate)({id:'theme.DocSidebarItem.toggleCollapsedCategoryAriaLabel',message:"Toggle the collapsible sidebar category '{label}'",description:'The ARIA label to toggle the collapsible sidebar category'},{label:categoryLabel}),type:"button",className:"clean-btn menu__caret",onClick:onClick});}function DocSidebarItemCategory({item,onItemClick,activePath,level,index,...props}){const{items,label,collapsible,className,href}=item;const{docs:{sidebar:{autoCollapseCategories}}}=(0,theme_common_1.useThemeConfig)();const hrefWithSSRFallback=useCategoryHrefWithSSRFallback(item);const isActive=(0,internal_1.isActiveSidebarItem)(item,activePath);const isCurrentPage=(0,internal_1.isSamePath)(href,activePath);const{collapsed,setCollapsed}=(0,theme_common_1.useCollapsible)({// Active categories are always initialized as expanded. The default -// (`item.collapsed`) is only used for non-active categories. -initialState:()=>{if(!collapsible){return false;}return isActive?false:item.collapsed;}});const{expandedItem,setExpandedItem}=(0,internal_1.useDocSidebarItemsExpandedState)();// Use this instead of `setCollapsed`, because it is also reactive -const updateCollapsed=(toCollapsed=!collapsed)=>{setExpandedItem(toCollapsed?null:index);setCollapsed(toCollapsed);};useAutoExpandActiveCategory({isActive,collapsed,updateCollapsed});(0,react_1.useEffect)(()=>{if(collapsible&&expandedItem!=null&&expandedItem!==index&&autoCollapseCategories){setCollapsed(true);}},[collapsible,expandedItem,index,setCollapsed,autoCollapseCategories]);return react_1.default.createElement("li",{className:(0,clsx_1.default)(theme_common_1.ThemeClassNames.docs.docSidebarItemCategory,theme_common_1.ThemeClassNames.docs.docSidebarItemCategoryLevel(level),'menu__list-item',{'menu__list-item--collapsed':collapsed},className)},react_1.default.createElement("div",{className:(0,clsx_1.default)('menu__list-item-collapsible',{'menu__list-item-collapsible--active':isCurrentPage})},react_1.default.createElement(Link_1.default,{className:(0,clsx_1.default)('menu__link',{'menu__link--sublist':collapsible,'menu__link--active':isActive}),onClick:collapsible?e=>{onItemClick?.(item);if(href){updateCollapsed();}else{e.preventDefault();updateCollapsed();}}:()=>{onItemClick?.(item);},"aria-current":isCurrentPage?'page':undefined,"aria-expanded":collapsible?!collapsed:undefined,href:collapsible?hrefWithSSRFallback??'#':hrefWithSSRFallback,...props},collapsible&&react_1.default.createElement(lsd_react_1.ChevronUpIcon,{className:style_module_scss_1.default.chevron}),react_1.default.createElement(lsd_react_1.Typography,{variant:"body2",color:"primary"},label)),href&&collapsible&&react_1.default.createElement(CollapseButton,{categoryLabel:label,onClick:e=>{e.preventDefault();updateCollapsed();}})),react_1.default.createElement(theme_common_1.Collapsible,{lazy:true,as:"ul",className:"menu__list",collapsed:collapsed},react_1.default.createElement(DocSidebarItems_1.default,{items:items,tabIndex:collapsed?-1:0,onItemClick:onItemClick,activePath:activePath,level:level+1})));}exports.Z=DocSidebarItemCategory; - -/***/ }), - -/***/ 74054: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const Translate_1=tslib_1.__importDefault(__webpack_require__(11614));const theme_common_1=__webpack_require__(93945);const internal_1=__webpack_require__(18279);const style_module_scss_1=tslib_1.__importDefault(__webpack_require__(15450));const lsd_react_1=__webpack_require__(31665);function DocVersionBadge({className}){const versionMetadata=(0,internal_1.useDocsVersion)();if(versionMetadata.badge){return react_1.default.createElement("span",{className:(0,clsx_1.default)(className,theme_common_1.ThemeClassNames.docs.docVersionBadge,'badge badge--secondary',style_module_scss_1.default.badge)},react_1.default.createElement(lsd_react_1.Typography,{variant:"body3"},react_1.default.createElement(Translate_1.default,{id:"theme.docs.versionBadge.label",values:{versionLabel:versionMetadata.label}},'Version: {versionLabel}')));}return null;}exports["default"]=DocVersionBadge; - -/***/ }), - -/***/ 45039: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Translate_1=tslib_1.__importDefault(__webpack_require__(11614));const theme_common_1=__webpack_require__(93945);const Icon_1=__webpack_require__(6980);const lsd_react_1=__webpack_require__(31665);function EditThisPage({editUrl}){return react_1.default.createElement("a",{href:editUrl,target:"_blank",rel:"noreferrer noopener",className:theme_common_1.ThemeClassNames.common.editThisPage},react_1.default.createElement(Icon_1.IconEdit,null),react_1.default.createElement(lsd_react_1.Typography,{variant:"body2"},react_1.default.createElement(Translate_1.default,{id:"theme.common.editThisPage",description:"The link label to edit the current page"},"Edit this page")));}exports.Z=EditThisPage; - -/***/ }), - -/***/ 72726: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const styles_module_scss_1=tslib_1.__importDefault(__webpack_require__(2932));const groupLinks=links=>{const siteLinks=[];const sharedLinks=[];for(const link of links){if('title'in link&&typeof link.title==='string'&&link.title.startsWith('shared:')){sharedLinks.push({...link,title:link.title.slice(7)});}else siteLinks.push(link);}return[siteLinks,sharedLinks];};function FooterLayout({style,links,logo,copyright}){const[firstRow,secondRow]=groupLinks(links.props.links);const handleScrollToTop=()=>{window.scrollTo({top:0,behavior:'smooth'});};return react_1.default.createElement("footer",{className:(0,clsx_1.default)('footer',{'footer--dark':style==='dark'})},react_1.default.createElement("div",{className:(0,clsx_1.default)('container','container-fluid',styles_module_scss_1.default.firstRow)},(logo||copyright)&&react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement("div",{className:"footer__bottom text--center"},logo&&react_1.default.createElement("div",{className:"margin-bottom--sm"},logo),copyright)),react_1.default.cloneElement(links,{links:firstRow})),react_1.default.createElement("div",{className:(0,clsx_1.default)(styles_module_scss_1.default.secondRow)},react_1.default.createElement("span",{className:(0,clsx_1.default)('footer__bottom text--center')},"Built by",' ',react_1.default.createElement("a",{href:"https://free.technology/",target:"_blank",className:(0,clsx_1.default)(styles_module_scss_1.default.footerLink)},"IFT")),react_1.default.cloneElement(links,{links:secondRow})),react_1.default.createElement(lsd_react_1.Button,{className:styles_module_scss_1.default.backToTop,size:"small",onClick:handleScrollToTop},"Back to top \u2191"));}exports.Z=FooterLayout; - -/***/ }), - -/***/ 10211: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const theme_common_1=__webpack_require__(93945);const internal_1=__webpack_require__(18279);const Provider=(0,theme_common_1.composeProviders)([internal_1.AnnouncementBarProvider,internal_1.ScrollControllerProvider,internal_1.DocsPreferredVersionContextProvider,internal_1.PluginHtmlClassNameProvider,internal_1.NavbarProvider]);function LayoutProvider({children}){return react_1.default.createElement(Provider,null,children);}exports.Z=LayoutProvider; - -/***/ }), - -/***/ 60969: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const useBaseUrl_1=tslib_1.__importDefault(__webpack_require__(51402));const useDocusaurusContext_1=tslib_1.__importDefault(__webpack_require__(6832));const theme_common_1=__webpack_require__(93945);const ThemedImage_1=tslib_1.__importDefault(__webpack_require__(25812));function LogoThemedImage({logo,alt,imageClassName}){const sources={light:(0,useBaseUrl_1.default)(logo.src),dark:(0,useBaseUrl_1.default)(logo.srcDark||logo.src)};const themedImage=react_1.default.createElement(ThemedImage_1.default,{className:logo.className,sources:sources,height:logo.height,width:logo.width,alt:alt,style:logo.style});// Is this extra div really necessary? -// introduced in https://github.com/facebook/docusaurus/pull/5666 -return imageClassName?react_1.default.createElement("div",{className:imageClassName},themedImage):themedImage;}function Logo(props){const{siteConfig:{title}}=(0,useDocusaurusContext_1.default)();const{navbar:{title:navbarTitle,logo}}=(0,theme_common_1.useThemeConfig)();const{imageClassName,titleClassName,...propsRest}=props;const logoLink=(0,useBaseUrl_1.default)(logo?.href||'/');// If visible title is shown, fallback alt text should be -// an empty string to mark the logo as decorative. -const fallbackAlt=navbarTitle?'':title;// Use logo alt text if provided (including empty string), -// and provide a sensible fallback otherwise. -const alt=logo?.alt??fallbackAlt;return react_1.default.createElement(Link_1.default,{to:logoLink,...propsRest,...(logo?.target&&{target:logo.target})},logo&&react_1.default.createElement(LogoThemedImage,{logo:logo,alt:alt,imageClassName:imageClassName}),navbarTitle!=null&&react_1.default.createElement("b",{className:titleClassName},navbarTitle));}exports["default"]=Logo; - -/***/ }), - -/***/ 29956: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importStar(__webpack_require__(67294));const style_module_scss_1=tslib_1.__importDefault(__webpack_require__(98547));const lsd_react_1=__webpack_require__(31665);function MDXDetails(props){const items=react_1.default.Children.toArray(props.children);const[open,setOpen]=(0,react_1.useState)(true);// Split summary item from the rest to pass it as a separate prop to the -// Details theme component -const summary=items.find(item=>react_1.default.isValidElement(item)&&item.props?.mdxType==='summary');const children=react_1.default.createElement(react_1.default.Fragment,null,items.filter(item=>item!==summary));return react_1.default.createElement(lsd_react_1.Collapse,{...props,open:open,onChange:value=>setOpen(value),label:summary,className:style_module_scss_1.default.collapse},children);}exports.Z=MDXDetails; - -/***/ }), - -/***/ 99276: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const Heading_1=tslib_1.__importDefault(__webpack_require__(7872));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const MDXEnhancement_context_1=__webpack_require__(11679);function MDXHeading(props){const after=(0,MDXEnhancement_context_1.useMDXEnhancementElements)('heading','after',props);return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(Heading_1.default,{...props}),after);}exports["default"]=MDXHeading; - -/***/ }), - -/***/ 28205: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const Img_1=tslib_1.__importDefault(__webpack_require__(39989));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const LightBox_1=__webpack_require__(91866);function ImgWrapper(props){return react_1.default.createElement(LightBox_1.LightBoxWrapper,null,react_1.default.createElement(Img_1.default,{...props}));}exports.Z=ImgWrapper; - -/***/ }), - -/***/ 86570: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);// @ts-ignore -const Mermaid_1=tslib_1.__importDefault(__webpack_require__(25452));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const LightBox_1=__webpack_require__(91866);function MermaidWrapper(props){return react_1.default.createElement(LightBox_1.LightBoxWrapper,null,react_1.default.createElement(Mermaid_1.default,{...props}));}exports.Z=MermaidWrapper; - -/***/ }), - -/***/ 27882: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const theme_common_1=__webpack_require__(93945);const internal_1=__webpack_require__(18279);const ColorModeToggle_1=tslib_1.__importDefault(__webpack_require__(62489));const Logo_1=tslib_1.__importDefault(__webpack_require__(56306));const Toggle_1=tslib_1.__importDefault(__webpack_require__(60543));const NavbarItem_1=tslib_1.__importDefault(__webpack_require__(88499));const SearchBar_1=tslib_1.__importDefault(__webpack_require__(20130));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const useHydrated_1=__webpack_require__(67713);const styles_module_scss_1=tslib_1.__importDefault(__webpack_require__(66058));function useNavbarItems(){// TODO temporary casting until ThemeConfig type is improved -return(0,theme_common_1.useThemeConfig)().navbar.items;}function NavbarItems({items}){return react_1.default.createElement(react_1.default.Fragment,null,items.map((item,i)=>react_1.default.createElement(theme_common_1.ErrorCauseBoundary,{key:i,onError:error=>new Error(`A theme navbar item failed to render. -Please double-check the following navbar item (themeConfig.navbar.items) of your Docusaurus config: -${JSON.stringify(item,null,2)}`,//@ts-ignore -{cause:error})},react_1.default.createElement(NavbarItem_1.default,{...item}))));}function NavbarContent(){const hydrated=(0,useHydrated_1.useHydrated)();const mobileSidebar=(0,internal_1.useNavbarMobileSidebar)();const allItems=useNavbarItems();const[leftItems,rightItems]=(0,internal_1.splitNavbarItems)(allItems.filter(item=>!['search'].includes(item.type??'')));const searchBarItem=allItems.find(item=>item.type==='search');return react_1.default.createElement("div",{className:"navbar__inner"},react_1.default.createElement("div",{className:"navbar__left"},react_1.default.createElement(Logo_1.default,null)),react_1.default.createElement("div",{className:"navbar__left-items"},react_1.default.createElement(NavbarItems,{items:leftItems})),react_1.default.createElement("div",{className:"navbar__right-items"},react_1.default.createElement(NavbarItems,{items:rightItems}),react_1.default.createElement(lsd_react_1.IconButtonGroup,{className:styles_module_scss_1.default.iconButtonGroup,size:"medium"},react_1.default.createElement(ColorModeToggle_1.default,{key:"color-toggle",className:(0,clsx_1.default)(styles_module_scss_1.default.colorModeToggle,'navbar__color-mode-toggle')}),hydrated&&react_1.default.createElement(react_1.default.Fragment,{key:"search"},searchBarItem&&react_1.default.createElement(SearchBar_1.default,null)),react_1.default.createElement(react_1.default.Fragment,{key:"mobile-sidebar-toggle"},!mobileSidebar.disabled&&react_1.default.createElement(Toggle_1.default,null)))));}exports.Z=NavbarContent; - -/***/ }), - -/***/ 26558: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const theme_common_1=__webpack_require__(93945);const internal_1=__webpack_require__(18279);const Translate_1=__webpack_require__(11614);const MobileSidebar_1=tslib_1.__importDefault(__webpack_require__(44488));const styles_module_css_1=tslib_1.__importDefault(__webpack_require__(96300));function NavbarBackdrop(props){return react_1.default.createElement("div",{role:"presentation",...props,className:(0,clsx_1.default)('navbar-sidebar__backdrop',props.className)});}function NavbarLayout({children}){const{navbar:{hideOnScroll,style}}=(0,theme_common_1.useThemeConfig)();const mobileSidebar=(0,internal_1.useNavbarMobileSidebar)();const{navbarRef,isNavbarVisible}=(0,internal_1.useHideableNavbar)(hideOnScroll);return react_1.default.createElement("nav",{ref:navbarRef,"aria-label":(0,Translate_1.translate)({id:'theme.NavBar.navAriaLabel',message:'Main',description:'The ARIA label for the main navigation'}),className:(0,clsx_1.default)('navbar','navbar--fixed-top',hideOnScroll&&[styles_module_css_1.default.navbarHideable,!isNavbarVisible&&styles_module_css_1.default.navbarHidden],{'navbar--dark':style==='dark','navbar--primary':style==='primary','navbar-sidebar--show':mobileSidebar.shown})},children,react_1.default.createElement(NavbarBackdrop,{onClick:mobileSidebar.toggle}),react_1.default.createElement(MobileSidebar_1.default,null));}exports.Z=NavbarLayout; - -/***/ }), - -/***/ 56306: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Logo_1=tslib_1.__importDefault(__webpack_require__(60969));function NavbarLogo(){return react_1.default.createElement(Logo_1.default,{className:"navbar__brand",imageClassName:"navbar__logo",titleClassName:"navbar__title text--truncate"});}exports["default"]=NavbarLogo; - -/***/ }), - -/***/ 20080: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const internal_1=__webpack_require__(18279);const Translate_1=__webpack_require__(11614);const ColorModeToggle_1=tslib_1.__importDefault(__webpack_require__(62489));const Logo_1=tslib_1.__importDefault(__webpack_require__(56306));const lsd_react_1=__webpack_require__(31665);const SearchBar_1=tslib_1.__importDefault(__webpack_require__(20130));function CloseButton(){const mobileSidebar=(0,internal_1.useNavbarMobileSidebar)();return react_1.default.createElement("button",{type:"button","aria-label":(0,Translate_1.translate)({id:'theme.docs.sidebar.closeSidebarButtonAriaLabel',message:'Close navigation bar',description:'The ARIA label for close button of mobile sidebar'}),className:"clean-btn navbar-sidebar__close",onClick:()=>mobileSidebar.toggle()},react_1.default.createElement(lsd_react_1.CloseIcon,null));}function NavbarMobileSidebarHeader(){return react_1.default.createElement("div",{className:"navbar-sidebar__brand"},react_1.default.createElement(Logo_1.default,null),react_1.default.createElement(ColorModeToggle_1.default,{className:"margin-right--md"}),react_1.default.createElement(SearchBar_1.default,null),react_1.default.createElement(CloseButton,null));}exports.Z=NavbarMobileSidebarHeader; - -/***/ }), - -/***/ 64644: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const internal_1=__webpack_require__(18279);const Footer_1=tslib_1.__importDefault(__webpack_require__(53522));function NavbarMobileSidebarLayout({header,primaryMenu,secondaryMenu}){const{shown:secondaryMenuShown}=(0,internal_1.useNavbarSecondaryMenu)();return react_1.default.createElement("div",{className:(0,clsx_1.default)('navbar-sidebar',secondaryMenuShown&&'navbar-sidebar--show-secondary')},header,react_1.default.createElement("div",{className:(0,clsx_1.default)('navbar-sidebar__items',{'navbar-sidebar__items--show-secondary':secondaryMenuShown})},react_1.default.createElement("div",{className:"navbar-sidebar__item menu"},primaryMenu,!secondaryMenuShown&&react_1.default.createElement(Footer_1.default,null)),react_1.default.createElement("div",{className:"navbar-sidebar__item menu"},secondaryMenu)));}exports.Z=NavbarMobileSidebarLayout; - -/***/ }), - -/***/ 29843: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const theme_common_1=__webpack_require__(93945);const internal_1=__webpack_require__(18279);const Translate_1=tslib_1.__importDefault(__webpack_require__(11614));const Icon_1=__webpack_require__(6980);const react_1=tslib_1.__importDefault(__webpack_require__(67294));function SecondaryMenuBackButton(props){return react_1.default.createElement("button",{...props,type:"button",className:"clean-btn navbar-sidebar__back"},react_1.default.createElement(Icon_1.IconArrowLeft,null),react_1.default.createElement(lsd_react_1.Typography,null,react_1.default.createElement(Translate_1.default,{id:"theme.navbar.mobileSidebarSecondaryMenu.backButtonLabel",description:"The label of the back button to return to main menu, inside the mobile navbar sidebar secondary menu (notably used to display the docs sidebar)"},"Back to main menu")));}// The secondary menu slides from the right and shows contextual information -// such as the docs sidebar -function NavbarMobileSidebarSecondaryMenu(){const isPrimaryMenuEmpty=(0,theme_common_1.useThemeConfig)().navbar.items.length===0;const secondaryMenu=(0,internal_1.useNavbarSecondaryMenu)();return react_1.default.createElement(react_1.default.Fragment,null,!isPrimaryMenuEmpty&&react_1.default.createElement(SecondaryMenuBackButton,{onClick:()=>secondaryMenu.hide()}),secondaryMenu.content);}exports.Z=NavbarMobileSidebarSecondaryMenu; - -/***/ }), - -/***/ 71003: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const theme_common_1=__webpack_require__(93945);const internal_1=__webpack_require__(18279);const NavbarItem_1=tslib_1.__importDefault(__webpack_require__(88499));const NavbarNavLink_1=tslib_1.__importDefault(__webpack_require__(83112));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importStar(__webpack_require__(67294));const styles_module_scss_1=tslib_1.__importDefault(__webpack_require__(1443));function isItemActive(item,localPathname){if((0,internal_1.isSamePath)(item.to,localPathname)){return true;}if((0,theme_common_1.isRegexpStringMatch)(item.activeBaseRegex,localPathname)){return true;}if(item.activeBasePath&&localPathname.startsWith(item.activeBasePath)){return true;}return false;}function containsActiveItems(items,localPathname){return items.some(item=>isItemActive(item,localPathname));}function DropdownNavbarItemDesktop({items,position,className,onClick,...props}){const dropdownRef=(0,react_1.useRef)(null);const[showDropdown,setShowDropdown]=(0,react_1.useState)(false);(0,react_1.useEffect)(()=>{const handleClickOutside=event=>{if(!dropdownRef.current||dropdownRef.current.contains(event.target)){return;}setShowDropdown(false);};document.addEventListener('mousedown',handleClickOutside);document.addEventListener('touchstart',handleClickOutside);document.addEventListener('focusin',handleClickOutside);return()=>{document.removeEventListener('mousedown',handleClickOutside);document.removeEventListener('touchstart',handleClickOutside);document.removeEventListener('focusin',handleClickOutside);};},[dropdownRef]);return react_1.default.createElement("div",{ref:dropdownRef,className:(0,clsx_1.default)('navbar__item',styles_module_scss_1.default.dropdownNavbarItem,'dropdown','dropdown--hoverable',{'dropdown--right':position==='right','dropdown--show':showDropdown})},react_1.default.createElement(NavbarNavLink_1.default,{"aria-haspopup":"true","aria-expanded":showDropdown,role:"button",href:props.to?undefined:'#',className:(0,clsx_1.default)('navbar__link',className),...props,onClick:props.to?undefined:e=>e.preventDefault(),onKeyDown:e=>{if(e.key==='Enter'){e.preventDefault();setShowDropdown(!showDropdown);}}},props.children??props.label),react_1.default.createElement(lsd_react_1.ChevronDownIcon,{className:(0,clsx_1.default)('margin-left-8','cursor-pointer')}),react_1.default.createElement("ul",{className:"dropdown__menu"},items.map((childItemProps,i)=>react_1.default.createElement(NavbarItem_1.default,{isDropdownItem:true,activeClassName:"dropdown__link--active",...childItemProps,key:i}))));}function DropdownNavbarItemMobile({items,className,position,// Need to destructure position from props so that it doesn't get passed on. -onClick,...props}){const localPathname=(0,internal_1.useLocalPathname)();const containsActive=containsActiveItems(items,localPathname);const{collapsed,toggleCollapsed,setCollapsed}=(0,theme_common_1.useCollapsible)({initialState:()=>!containsActive});// Expand/collapse if any item active after a navigation -(0,react_1.useEffect)(()=>{if(containsActive){setCollapsed(!containsActive);}},[localPathname,containsActive,setCollapsed]);return react_1.default.createElement("li",{className:(0,clsx_1.default)('menu__list-item',{'menu__list-item--collapsed':collapsed})},react_1.default.createElement(NavbarNavLink_1.default,{role:"button",className:(0,clsx_1.default)('menu__link menu__link--sublist menu__link--sublist-caret',className),...props,onClick:e=>{e.preventDefault();toggleCollapsed();}},react_1.default.createElement(lsd_react_1.Typography,{variant:"body1"},props.children??props.label)),react_1.default.createElement(theme_common_1.Collapsible,{lazy:true,as:"ul",className:"menu__list",collapsed:collapsed},items.map((childItemProps,i)=>react_1.default.createElement(NavbarItem_1.default,{mobile:true,isDropdownItem:true,onClick:onClick,activeClassName:"menu__link--active",...childItemProps,key:i}))));}function DropdownNavbarItem({mobile=false,...props}){const Comp=mobile?DropdownNavbarItemMobile:DropdownNavbarItemDesktop;//@ts-ignore -return react_1.default.createElement(Comp,{...props});}exports["default"]=DropdownNavbarItem; - -/***/ }), - -/***/ 23247: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const useDocusaurusContext_1=tslib_1.__importDefault(__webpack_require__(6832));const internal_1=__webpack_require__(18279);const Translate_1=__webpack_require__(11614);const router_1=__webpack_require__(7154);const DropdownNavbarItem_1=tslib_1.__importDefault(__webpack_require__(71003));function LocaleDropdownNavbarItem({mobile,dropdownItemsBefore,dropdownItemsAfter,...props}){const{i18n:{currentLocale,locales,localeConfigs}}=(0,useDocusaurusContext_1.default)();const alternatePageUtils=(0,internal_1.useAlternatePageUtils)();const{search,hash}=(0,router_1.useLocation)();const localeItems=locales.map(locale=>{const baseTo=`pathname://${alternatePageUtils.createUrl({locale,fullyQualified:false})}`;// preserve ?search#hash suffix on locale switches -const to=`${baseTo}${search}${hash}`;return{label:localeConfigs[locale]?.label,lang:localeConfigs[locale]?.htmlLang,to,target:'_self',autoAddBaseUrl:false,className:// eslint-disable-next-line no-nested-ternary -locale===currentLocale?// Similar idea as DefaultNavbarItem: select the right Infima active -// class name. This cannot be substituted with isActive, because the -// target URLs contain `pathname://` and therefore are not NavLinks! -mobile?'menu__link--active':'dropdown__link--active':''};});const items=[...dropdownItemsBefore,...localeItems,...dropdownItemsAfter];// Mobile is handled a bit differently -const dropdownLabel=mobile?(0,Translate_1.translate)({message:'Languages',id:'theme.navbar.mobileLanguageDropdown.label',description:'The label for the mobile language switcher dropdown'}):localeConfigs[currentLocale]?.label.substring(0,2).toUpperCase();return react_1.default.createElement(DropdownNavbarItem_1.default,{...props,mobile:mobile,label:react_1.default.createElement(react_1.default.Fragment,null,dropdownLabel),items:items});}exports.Z=LocaleDropdownNavbarItem; - -/***/ }), - -/***/ 83112: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const isInternalUrl_1=tslib_1.__importDefault(__webpack_require__(71699));const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const theme_common_1=__webpack_require__(93945);const useBaseUrl_1=tslib_1.__importDefault(__webpack_require__(51402));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Icon_1=__webpack_require__(22197);const styles_module_css_1=tslib_1.__importDefault(__webpack_require__(43234));function NavbarNavLink({activeBasePath,activeBaseRegex,to,href,label,html,isDropdownLink,prependBaseUrlToHref,...props}){// TODO all this seems hacky -// {to: 'version'} should probably be forbidden, in favor of {to: '/version'} -const toUrl=(0,useBaseUrl_1.default)(to);const activeBaseUrl=(0,useBaseUrl_1.default)(activeBasePath);const normalizedHref=(0,useBaseUrl_1.default)(href,{forcePrependBaseUrl:true});const isExternalLink=label&&href&&!(0,isInternalUrl_1.default)(href);// Link content is set through html XOR label -const linkContentProps=html?{dangerouslySetInnerHTML:{__html:html}}:{children:react_1.default.createElement(lsd_react_1.Typography,{component:"div",variant:"body2",className:styles_module_css_1.default.linkContent},label,isExternalLink&&react_1.default.createElement(Icon_1.IconExternalLink,{className:styles_module_css_1.default.externalLinkIcon}))};if(href){return react_1.default.createElement(Link_1.default,{href:prependBaseUrlToHref?normalizedHref:href,...props,...linkContentProps});}return react_1.default.createElement(Link_1.default,{to:toUrl,isNavLink:true,...((activeBasePath||activeBaseRegex)&&{isActive:(_match,location)=>activeBaseRegex?(0,theme_common_1.isRegexpStringMatch)(activeBaseRegex,location.pathname):location.pathname.startsWith(activeBaseUrl)}),...props,...linkContentProps});}exports["default"]=NavbarNavLink; - -/***/ }), - -/***/ 89481: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Translate_1=tslib_1.__importStar(__webpack_require__(11614));const theme_common_1=__webpack_require__(93945);const Layout_1=tslib_1.__importDefault(__webpack_require__(64963));const styles_module_scss_1=tslib_1.__importDefault(__webpack_require__(83328));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const lsd_react_1=__webpack_require__(31665);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));function NotFound(){return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(theme_common_1.PageMetadata,{title:(0,Translate_1.translate)({id:'theme.NotFound.title',message:'Page Not Found'})}),react_1.default.createElement(Layout_1.default,null,react_1.default.createElement("main",{className:(0,clsx_1.default)('container margin-vert--xl',styles_module_scss_1.default.root)},react_1.default.createElement("div",{className:"row"},react_1.default.createElement("div",{className:"col col--6 col--offset-3"},react_1.default.createElement(lsd_react_1.Typography,{variant:"h1"},react_1.default.createElement(Translate_1.default,{id:"theme.NotFound.title",description:"The title of the 404 page"},"Page Not Found")),react_1.default.createElement(lsd_react_1.Typography,{variant:"body1",component:"p"},react_1.default.createElement(Translate_1.default,{id:"theme.NotFound.p1",description:"The first paragraph of the 404 page"},"We could not find what you were looking for."),react_1.default.createElement("br",null),react_1.default.createElement(Translate_1.default,{id:"theme.NotFound.p2",description:"The 2nd paragraph of the 404 page"},"Please contact the owner of the site that linked you to the original URL and let them know their link is broken."))),react_1.default.createElement(Link_1.default,{to:"/"},react_1.default.createElement(lsd_react_1.Button,{size:"large",variant:"outlined"},react_1.default.createElement(Translate_1.default,{id:"theme.NotFound.backToHome",description:"The label of the back to home link on the 404 page"},"Back to home")))))));}exports["default"]=NotFound; - -/***/ }), - -/***/ 79255: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const Icon_1=__webpack_require__(6980);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));function PaginatorNavLink(props){const{permalink,title,subLabel,isNext}=props;return react_1.default.createElement(Link_1.default,{className:(0,clsx_1.default)('pagination-nav__link',isNext?'pagination-nav__link--next':'pagination-nav__link--prev'),to:permalink},!isNext?react_1.default.createElement(Icon_1.IconArrowLeft,null):null,react_1.default.createElement(lsd_react_1.Typography,{variant:"body2",className:"pagination-nav__label"},title),isNext?react_1.default.createElement(Icon_1.IconArrowRight,null):null);}exports.Z=PaginatorNavLink; - -/***/ }), - -/***/ 28511: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const internal_1=__webpack_require__(18279);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const LightBox_1=__webpack_require__(91866);const ThemeProvider_1=__webpack_require__(84138);const useThemeOptions_1=__webpack_require__(38840);const style_module_css_1=tslib_1.__importDefault(__webpack_require__(31467));function Root({children}){const options=(0,useThemeOptions_1.useDocThemeOptions)();const hideDocSidebar=options?.sidebar?.hide;return react_1.default.createElement(internal_1.ColorModeProvider,null,react_1.default.createElement(ThemeProvider_1.ThemeProvider,null,react_1.default.createElement(LightBox_1.LightBoxProvider,null,react_1.default.createElement("div",{className:style_module_css_1.default.root,"data-hidden-doc-sidebar":hideDocSidebar},children))));}exports.Z=Root; - -/***/ }), - -/***/ 56051: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.SearchBar=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const react_1=tslib_1.__importStar(__webpack_require__(67294));const Modal_1=__webpack_require__(81575);const usePersistedHistory_1=__webpack_require__(59213);const useWindowEventListener_1=__webpack_require__(21457);const useSearch_1=__webpack_require__(41310);const SearchBar_module_scss_1=tslib_1.__importDefault(__webpack_require__(75984));const SearchHistory_1=__webpack_require__(55634);const SearchInput_1=__webpack_require__(16991);const SearchResults_1=__webpack_require__(44334);const SearchBar=({})=>{const history=(0,usePersistedHistory_1.usePersistedHistory)('search',{unique:true,equals:(a,b)=>a.title===b.title&&a.href===b.href,maxItems:10});const search=(0,useSearch_1.useSearch)();const ref=(0,react_1.useRef)(null);const[input,setInput]=(0,react_1.useState)('');const[results,setResults]=(0,react_1.useState)([]);const[displayModal,setDisplayModal]=(0,react_1.useState)(false);const onInputChange=e=>{setInput(e.target.value);};const focusOnInput=()=>{const el=ref.current;if(!el)return;const inputEl=el.querySelector('input');if(inputEl)setTimeout(()=>{inputEl.focus();},50);};const onClear=()=>{setInput('');};const query=async input=>{const{results}=await search.query(input);setResults(results);};(0,react_1.useEffect)(()=>{if(input.length>0)query(input);else setResults([]);},[input]);(0,react_1.useEffect)(()=>{displayModal?focusOnInput():setInput('');},[displayModal]);const onNavigate=(e,item)=>{e.preventDefault();setDisplayModal(false);history.add(item);window.location.href=item.href;};(0,useWindowEventListener_1.useWindowEventListener)('keydown',event=>{if((event.ctrlKey||event.metaKey)&&event.code==='KeyK'){event.preventDefault();setDisplayModal(true);}},{},[]);return react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(lsd_react_1.IconButton,{onClick:()=>setDisplayModal(true),size:"medium"},react_1.default.createElement(lsd_react_1.SearchIcon,null)),react_1.default.createElement(Modal_1.Modal,{keepMounted:true,id:"search-modal",open:displayModal,onClose:()=>setDisplayModal(false),className:SearchBar_module_scss_1.default.modal},react_1.default.createElement("div",{className:SearchBar_module_scss_1.default.header},react_1.default.createElement(SearchInput_1.SearchInput,{containerRef:ref,onClear:onClear,value:input,onChange:onInputChange}),react_1.default.createElement(lsd_react_1.IconButton,{className:SearchBar_module_scss_1.default.closeButton,size:"medium",onClick:()=>setDisplayModal(false)},react_1.default.createElement(lsd_react_1.CloseIcon,{color:"primary"}))),input.length>0&&react_1.default.createElement(SearchResults_1.SearchResults,{results:results,onNavigate:onNavigate}),input.length===0&&react_1.default.createElement(SearchHistory_1.SearchHistory,{history:history.list??[],onRemove:history.removeByIndex,onClose:()=>setDisplayModal(false)})));};exports.SearchBar=SearchBar; - -/***/ }), - -/***/ 55634: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.SearchHistory=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const Icon_1=__webpack_require__(22197);const SearchResultMessage_1=__webpack_require__(42130);const SearchHistory_module_scss_1=tslib_1.__importDefault(__webpack_require__(51378));const SearchHistory=({history:list=[],onRemove,onClose,className,children,...props})=>{return react_1.default.createElement("div",{className:(0,clsx_1.default)(className,SearchHistory_module_scss_1.default.root,list.length===0&&SearchHistory_module_scss_1.default.empty),...props},list.length===0?react_1.default.createElement(SearchResultMessage_1.SearchResultMessage,null,"No recent searches"):react_1.default.createElement(react_1.default.Fragment,null,react_1.default.createElement(lsd_react_1.Typography,{className:SearchHistory_module_scss_1.default.title,variant:"subtitle2",component:"div"},"Recent"),list.map((item,index)=>react_1.default.createElement("div",{key:index,className:SearchHistory_module_scss_1.default.item},react_1.default.createElement(Icon_1.IconHistory,null),react_1.default.createElement(lsd_react_1.Typography,{variant:"subtitle2",component:"a",href:item.href,className:SearchHistory_module_scss_1.default.itemTitle,dangerouslySetInnerHTML:{__html:item.title},onClick:()=>onClose&&onClose()}),react_1.default.createElement("button",{className:"clean-btn",onClick:()=>onRemove(index)},react_1.default.createElement(Icon_1.IconClose,null))))));};exports.SearchHistory=SearchHistory; - -/***/ }), - -/***/ 16991: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.SearchInput=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const react_use_1=__webpack_require__(89164);const SearchInput_module_scss_1=tslib_1.__importDefault(__webpack_require__(42795));const SearchInput=({value='',active,onChange,onClear,onFocus:onFocusCallback,onCancel,className,inputProps:{ref:inputRef,...inputProps}={placeholder:''},containerRef,...props})=>{const isMobile=(0,react_use_1.useMedia)('(max-width: 996px)');const expanded=active||value?.length>0;const onFocus=event=>{onFocusCallback&&onFocusCallback();};return react_1.default.createElement("div",{ref:containerRef,className:(0,clsx_1.default)(SearchInput_module_scss_1.default.root,expanded&&SearchInput_module_scss_1.default.expanded,className),onKeyDown:e=>{if(e.code==='Escape'&&value.length>0){e.stopPropagation();onClear&&onClear();}},...props},react_1.default.createElement(lsd_react_1.TextField,{className:SearchInput_module_scss_1.default.textField,value:value,placeholder:expanded||isMobile?inputProps.placeholder:'',onChange:onChange,onFocus:onFocus,clearButton:true,icon:react_1.default.createElement(lsd_react_1.SearchIcon,{color:"primary"}),...inputProps}));};exports.SearchInput=SearchInput; - -/***/ }), - -/***/ 537: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.SearchResultGroup=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const SearchResultGroup_module_scss_1=tslib_1.__importDefault(__webpack_require__(99606));const SearchResultGroup=({className,title='',children,...props})=>{return react_1.default.createElement("div",{className:(0,clsx_1.default)(SearchResultGroup_module_scss_1.default.root,className),...props},react_1.default.createElement("div",null,react_1.default.createElement(lsd_react_1.Typography,{variant:"subtitle2"},title)),react_1.default.createElement("ul",null,children));};exports.SearchResultGroup=SearchResultGroup; - -/***/ }), - -/***/ 16183: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(537),exports); - -/***/ }), - -/***/ 78447: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.SearchResultItem=void 0;const tslib_1=__webpack_require__(70655);const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const document_svg_1=tslib_1.__importDefault(__webpack_require__(7744));const hashtag_svg_1=tslib_1.__importDefault(__webpack_require__(42924));const SearchResultItemBase_1=__webpack_require__(55459);const types_1=__webpack_require__(79587);const SearchResultItem_module_scss_1=tslib_1.__importDefault(__webpack_require__(59317));const icons={[types_1.SearchDocumentType.Title]:react_1.default.createElement(document_svg_1.default,{className:(0,clsx_1.default)(SearchResultItem_module_scss_1.default.icon,SearchResultItem_module_scss_1.default.fill)}),[types_1.SearchDocumentType.Heading]:react_1.default.createElement(hashtag_svg_1.default,{className:(0,clsx_1.default)(SearchResultItem_module_scss_1.default.icon,SearchResultItem_module_scss_1.default.fill)}),[types_1.SearchDocumentType.Paragraph]:react_1.default.createElement(hashtag_svg_1.default,{className:(0,clsx_1.default)(SearchResultItem_module_scss_1.default.icon,SearchResultItem_module_scss_1.default.fill)})};const SearchResultItem=({type,level=0,href,title,content,className,linkProps:{className:linkClassName,...linkProps}={},...props})=>{const icon=icons[type];return react_1.default.createElement(Link_1.default,{href:href,className:(0,clsx_1.default)(SearchResultItem_module_scss_1.default.root,SearchResultItem_module_scss_1.default[`level${level}`],linkClassName),...linkProps},react_1.default.createElement(SearchResultItemBase_1.SearchResultItemBase,{title:title,content:content,icon:icon,...props}));};exports.SearchResultItem=SearchResultItem; - -/***/ }), - -/***/ 98028: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(78447),exports); - -/***/ }), - -/***/ 8655: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.SearchResultItemBase=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const SearchResultItemBase_module_scss_1=tslib_1.__importDefault(__webpack_require__(84676));const SearchResultItemBase=({icon,title,content,className,...props})=>{return react_1.default.createElement("li",{className:(0,clsx_1.default)(SearchResultItemBase_module_scss_1.default.root,className),...props},react_1.default.createElement("span",null,icon),react_1.default.createElement("div",null,title&&react_1.default.createElement(lsd_react_1.Typography,{variant:"subtitle2",component:"span",dangerouslySetInnerHTML:{__html:title}})));};exports.SearchResultItemBase=SearchResultItemBase; - -/***/ }), - -/***/ 55459: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);tslib_1.__exportStar(__webpack_require__(8655),exports); - -/***/ }), - -/***/ 42130: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.SearchResultMessage=void 0;const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const SearchResultMessage_module_scss_1=tslib_1.__importDefault(__webpack_require__(88894));const SearchResultMessage=({className,children,...props})=>{return react_1.default.createElement(lsd_react_1.Typography,{className:(0,clsx_1.default)(className,SearchResultMessage_module_scss_1.default.root),variant:"subtitle2",component:"div",...props},react_1.default.createElement("span",null,children));};exports.SearchResultMessage=SearchResultMessage; - -/***/ }), - -/***/ 44334: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.SearchResults=void 0;const tslib_1=__webpack_require__(70655);const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importStar(__webpack_require__(67294));const SearchResultGroup_1=__webpack_require__(16183);const SearchResultItem_1=__webpack_require__(98028);const SearchResultMessage_1=__webpack_require__(42130);const groupSearchResult_1=__webpack_require__(36570);const SearchResults_module_scss_1=tslib_1.__importDefault(__webpack_require__(82782));const SearchResults=({results,className,onNavigate,...props})=>{const total=results.length;const grouped=(0,react_1.useMemo)(()=>(0,groupSearchResult_1.groupSearchResult)(results),[results]);return react_1.default.createElement("div",{className:(0,clsx_1.default)(SearchResults_module_scss_1.default.root,total===0&&SearchResults_module_scss_1.default.noResults)},total===0&&react_1.default.createElement(SearchResultMessage_1.SearchResultMessage,null,"No result."),react_1.default.createElement("div",{className:(0,clsx_1.default)(SearchResults_module_scss_1.default.groups)},grouped.map(([category,items],index)=>react_1.default.createElement(react_1.default.Fragment,{key:index},react_1.default.createElement(SearchResultGroup_1.SearchResultGroup,{className:SearchResults_module_scss_1.default.group,title:category},items.map((item,itemIndex)=>react_1.default.createElement(SearchResultItem_1.SearchResultItem,{key:itemIndex,type:item.type,level:item.level,href:item.href,title:item.title,content:item.content,linkProps:onNavigate?{onClick:e=>onNavigate(e,item)}:{}})))))));};exports.SearchResults=SearchResults; - -/***/ }), - -/***/ 41310: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useSearch=void 0;const react_1=__webpack_require__(67294);const useSearchContextPath_1=__webpack_require__(8675);const useSearch=()=>{const{createSearchInstance}=window;const searchContextPath=(0,useSearchContextPath_1.useSearchContextPath)();const[loaded,setLoaded]=(0,react_1.useState)(false);const search=(0,react_1.useRef)(null);const init=async()=>{search.current=await createSearchInstance({resultsLimit:50,preferredVersionPath:searchContextPath[0],searchContextByPaths:searchContextPath[1]});await search.current.init();setLoaded(true);};(0,react_1.useEffect)(()=>{setLoaded(false);init();},[searchContextPath[0],searchContextPath[1]]);return{loaded,query:async input=>await search.current.query(input)};};exports.useSearch=useSearch; - -/***/ }), - -/***/ 8675: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.useSearchContextPath=void 0;const client_1=__webpack_require__(4452);const string_utils_1=__webpack_require__(68347);const useProxiedData=()=>{const win=window;return win.getProxiedGeneratedData();};const useSearchContextByPaths=()=>{return useProxiedData().searchContextByPaths;};const useSearchContextPath=()=>{const separateContexts=useSearchContextByPaths();const activePluginData=(0,client_1.useActivePluginAndVersion)();if(!activePluginData)return['/',''];const{activePlugin:{pluginData:{path:pluginPath}},activeVersion}=activePluginData;if(!activeVersion)return['/',''];return[pluginPath!==activeVersion.path?(0,string_utils_1.ensureTrailingSlash)(activeVersion.path):'/',separateContexts];};exports.useSearchContextPath=useSearchContextPath; - -/***/ }), - -/***/ 20130: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const ErrorBoundary_1=tslib_1.__importDefault(__webpack_require__(24649));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const SearchBar_1=__webpack_require__(56051);const SearchBarWrapper=()=>{return typeof window==='undefined'?react_1.default.createElement(react_1.default.Fragment,null):react_1.default.createElement(ErrorBoundary_1.default,{fallback:()=>react_1.default.createElement(react_1.default.Fragment,null)},react_1.default.createElement(SearchBar_1.SearchBar,null));};exports["default"]=SearchBarWrapper; - -/***/ }), - -/***/ 79587: -/***/ ((__unused_webpack_module, exports) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.SearchDocumentType=void 0;var SearchDocumentType;(function(SearchDocumentType){SearchDocumentType["Title"]="title";SearchDocumentType["Heading"]="heading";SearchDocumentType["Paragraph"]="paragraph";})(SearchDocumentType=exports.SearchDocumentType||(exports.SearchDocumentType={})); - -/***/ }), - -/***/ 36570: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));exports.groupSearchResult=void 0;const tslib_1=__webpack_require__(70655);const groupBy_1=tslib_1.__importDefault(__webpack_require__(7739));const omit_1=tslib_1.__importDefault(__webpack_require__(57557));const types_1=__webpack_require__(79587);const convertSearchResult=item=>{const{type,document,page,highlighted,score}=item;const{url,hash=''}=document;const href=url+hash;switch(type){case types_1.SearchDocumentType.Title:{return{type,level:0,url,hash,href,score,title:highlighted,content:'',category:document.breadcrumb?.[1]??document.title};}case types_1.SearchDocumentType.Heading:{const p=page;return{type,level:1,url,hash,href,score,title:highlighted,content:'',category:p?.breadcrumb?.[1]??p?.title??''};}case types_1.SearchDocumentType.Paragraph:{const p=page;return{type,level:2,url,hash,href,score,title:document.sectionTitle||document.title||'',content:highlighted,category:p?.breadcrumb?.[1]??p?.title??''};}}};const groupSearchResult=results=>{const grouped=Object.entries((0,groupBy_1.default)(results.map(item=>convertSearchResult(item)),'category')).map(([key,items])=>[key,items.map(item=>(0,omit_1.default)(item,'category')).sort((a,b)=>a.score>b.score?-1:1)]).sort((a,b)=>(a[1][0]?.score??0)>(b[1][0]?.score??0)?-1:1).map(([category,items])=>[category,Object.entries((0,groupBy_1.default)(items,'url')).map(([url,value])=>{let items=[...value].sort((a,b)=>a.type===types_1.SearchDocumentType.Title?-1:a.score>b.score?-1:1);const hasTitle=items[0]?.type===types_1.SearchDocumentType.Title;items=hasTitle?items.filter(item=>!(item.type===types_1.SearchDocumentType.Heading&&item.hash==='')):items;items=items.map((item,index)=>({...item,level:hasTitle?index===0?0:1:0}));return[url,items];}).sort((a,b)=>(a[1][0]?.score??0)>(b[1][0]?.score??0)?-1:1).flatMap(([url,items])=>items)]);return grouped;};exports.groupSearchResult=groupSearchResult; - -/***/ }), - -/***/ 20079: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const lsd_react_1=__webpack_require__(31665);const Translate_1=tslib_1.__importDefault(__webpack_require__(11614));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const react_1=tslib_1.__importDefault(__webpack_require__(67294));const styles_module_css_1=tslib_1.__importDefault(__webpack_require__(57986));function TOCCollapsibleCollapseButton({collapsed,...props}){return react_1.default.createElement("button",{type:"button",...props,className:(0,clsx_1.default)('clean-btn',styles_module_css_1.default.tocCollapsibleButton,!collapsed&&styles_module_css_1.default.tocCollapsibleButtonExpanded,props.className)},react_1.default.createElement("div",null),react_1.default.createElement(lsd_react_1.Typography,{variant:"body2"},react_1.default.createElement(Translate_1.default,{id:"theme.TOCCollapsible.toggleButtonLabel",description:"The label used by the button on the collapsible TOC component"},"On this page")),!collapsed?react_1.default.createElement(lsd_react_1.ChevronUpIcon,null):react_1.default.createElement(lsd_react_1.ChevronDownIcon,null));}exports["default"]=TOCCollapsibleCollapseButton; - -/***/ }), - -/***/ 80466: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const theme_common_1=__webpack_require__(93945);const TOCItems_1=tslib_1.__importDefault(__webpack_require__(1014));const CollapseButton_1=tslib_1.__importDefault(__webpack_require__(20079));const styles_module_css_1=tslib_1.__importDefault(__webpack_require__(73506));function TOCCollapsible({toc,className,minHeadingLevel,maxHeadingLevel}){const{collapsed,toggleCollapsed}=(0,theme_common_1.useCollapsible)({initialState:true});return react_1.default.createElement("div",{className:(0,clsx_1.default)(styles_module_css_1.default.tocCollapsible,!collapsed&&styles_module_css_1.default.tocCollapsibleExpanded,className)},react_1.default.createElement(CollapseButton_1.default,{collapsed:collapsed,onClick:toggleCollapsed}),react_1.default.createElement(theme_common_1.Collapsible,{lazy:true,className:styles_module_css_1.default.tocCollapsibleContent,collapsed:collapsed},react_1.default.createElement(TOCItems_1.default,{toc:toc,minHeadingLevel:minHeadingLevel,maxHeadingLevel:maxHeadingLevel})));}exports.Z=TOCCollapsible; - -/***/ }), - -/***/ 1842: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const Link_1=tslib_1.__importDefault(__webpack_require__(89562));const styles_module_css_1=tslib_1.__importDefault(__webpack_require__(71211));const lsd_react_1=__webpack_require__(31665);function Tag({permalink,label,count}){return react_1.default.createElement(Link_1.default,{href:permalink,className:(0,clsx_1.default)(count?styles_module_css_1.default.tagWithCount:styles_module_css_1.default.tagRegular)},react_1.default.createElement(lsd_react_1.Tag,{disabled:false,size:"small"},label,count&&react_1.default.createElement("span",null,count)));}exports["default"]=Tag; - -/***/ }), - -/***/ 18189: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -var __webpack_unused_export__; -__webpack_unused_export__ = ({value:true});const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const Translate_1=tslib_1.__importDefault(__webpack_require__(11614));const Tag_1=tslib_1.__importDefault(__webpack_require__(1842));const styles_module_css_1=tslib_1.__importDefault(__webpack_require__(88288));const lsd_react_1=__webpack_require__(31665);function TagsListInline({tags}){return react_1.default.createElement("div",{className:styles_module_css_1.default.root},react_1.default.createElement(lsd_react_1.Typography,{variant:"body2",component:"div"},react_1.default.createElement(Translate_1.default,{id:"theme.tags.tagsListLabel",description:"The label alongside a tag list"},"Tags:")),react_1.default.createElement("ul",{className:(0,clsx_1.default)(styles_module_css_1.default.tags,'padding--none','margin-left--sm')},tags.map(({label,permalink:tagPermalink})=>react_1.default.createElement("li",{key:tagPermalink,className:styles_module_css_1.default.tag},react_1.default.createElement(Tag_1.default,{label:label,permalink:tagPermalink})))));}exports.Z=TagsListInline; - -/***/ }), - -/***/ 25812: -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -Object.defineProperty(exports, "__esModule", ({value:true}));const tslib_1=__webpack_require__(70655);const react_1=tslib_1.__importDefault(__webpack_require__(67294));const clsx_1=tslib_1.__importDefault(__webpack_require__(86010));const useIsBrowser_1=tslib_1.__importDefault(__webpack_require__(5730));const theme_common_1=__webpack_require__(93945);const styles_module_css_1=tslib_1.__importDefault(__webpack_require__(9991));function ThemedImage(props){const isBrowser=(0,useIsBrowser_1.default)();const{colorMode}=(0,theme_common_1.useColorMode)();const{sources,className,alt,...propsRest}=props;const clientThemes=colorMode==='dark'?['dark']:['light'];const renderedSourceNames=isBrowser?clientThemes:// We need to render both images on the server to avoid flash -// See https://github.com/facebook/docusaurus/pull/3730 -['light','dark'];return react_1.default.createElement(react_1.default.Fragment,null,renderedSourceNames.map(sourceName=>react_1.default.createElement("img",{key:sourceName,src:sources[sourceName],alt:alt,className:(0,clsx_1.default)(styles_module_css_1.default.themedImage,styles_module_css_1.default[`themedImage--${sourceName}`],className),...propsRest})));}exports["default"]=ThemedImage; - -/***/ }), - -/***/ 92937: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "$P": () => (/* binding */ createStatefulLinksCollector), -/* harmony export */ "mo": () => (/* binding */ useLinksCollector), -/* harmony export */ "qX": () => (/* binding */ LinksCollectorProvider) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const createStatefulLinksCollector=()=>{// Set to dedup, as it's not useful to collect multiple times the same link -const allLinks=new Set();return{collectLink:link=>{allLinks.add(link);},getCollectedLinks:()=>[...allLinks]};};const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({collectLink:()=>{// No-op for client. We only use the broken links checker server-side. -}});const useLinksCollector=()=>(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);function LinksCollectorProvider({children,linksCollector}){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Context.Provider,{value:linksCollector},children);} - -/***/ }), - -/***/ 74058: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "_": () => (/* binding */ Context), -/* harmony export */ "t": () => (/* binding */ BrowserContextProvider) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Encapsulate the logic to avoid React hydration problems -// See https://www.joshwcomeau.com/react/the-perils-of-rehydration/ -// On first client-side render, we need to render exactly as the server rendered -// isBrowser is set to true only after a successful hydration -// Note, isBrowser is not part of useDocusaurusContext() for perf reasons -// Using useDocusaurusContext() (much more common need) should not trigger -// re-rendering after a successful hydration -const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(false);function BrowserContextProvider({children}){const[isBrowser,setIsBrowser]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{setIsBrowser(true);},[]);return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Context.Provider,{value:isBrowser},children);} - -/***/ }), - -/***/ 56725: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - "_": () => (/* binding */ Context), - "M": () => (/* binding */ DocusaurusContextProvider) -}); - -// EXTERNAL MODULE: ./node_modules/react/index.js -var react = __webpack_require__(67294); -// EXTERNAL MODULE: ./.docusaurus/docusaurus.config.mjs -var docusaurus_config = __webpack_require__(36809); -;// CONCATENATED MODULE: ./.docusaurus/globalData.json -const globalData_namespaceObject = JSON.parse('{"docusaurus-plugin-content-docs":{"root-pages":{"path":"/","versions":[{"name":"current","label":"Next","isLast":true,"path":"/","mainDocId":"community","docs":[{"id":"community","path":"/community"},{"id":"join-us","path":"/join-us"},{"id":"news","path":"/news"},{"id":"privacy-policy","path":"/privacy-policy"},{"id":"security","path":"/security"},{"id":"terms","path":"/terms"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/community","label":"community"}}}}],"breadcrumbs":false},"about":{"path":"/about","versions":[{"name":"current","label":"Next","isLast":true,"path":"/about","mainDocId":"index","docs":[{"id":"architect","path":"/about/architect","sidebar":"defaultSidebar"},{"id":"faq","path":"/about/faq","sidebar":"defaultSidebar"},{"id":"index","path":"/about/","sidebar":"defaultSidebar"},{"id":"roadmap","path":"/about/roadmap","sidebar":"defaultSidebar"},{"id":"team","path":"/about/team","sidebar":"defaultSidebar"}],"draftIds":[],"sidebars":{"defaultSidebar":{"link":{"path":"/about/","label":"index"}}}}],"breadcrumbs":true}}}'); -;// CONCATENATED MODULE: ./.docusaurus/i18n.json -const i18n_namespaceObject = JSON.parse('{"defaultLocale":"en","locales":["en"],"path":"i18n","currentLocale":"en","localeConfigs":{"en":{"label":"English","direction":"ltr","htmlLang":"en","calendar":"gregory","path":"en"}}}'); -// EXTERNAL MODULE: ./.docusaurus/codeTranslations.json -var codeTranslations = __webpack_require__(57529); -;// CONCATENATED MODULE: ./.docusaurus/site-metadata.json -const site_metadata_namespaceObject = JSON.parse('{"docusaurusVersion":"2.4.1","siteVersion":"0.0.0","pluginVersions":{"docusaurus-plugin-content-docs":{"type":"package","name":"@docusaurus/plugin-content-docs","version":"2.4.1"},"docusaurus-plugin-content-blog":{"type":"package","name":"@docusaurus/plugin-content-blog","version":"2.4.1"},"docusaurus-plugin-content-pages":{"type":"package","name":"@docusaurus/plugin-content-pages","version":"2.4.1"},"docusaurus-plugin-sitemap":{"type":"package","name":"@docusaurus/plugin-sitemap","version":"2.4.1"},"docusaurus-plugin-sass":{"type":"package","name":"docusaurus-plugin-sass","version":"0.2.3"},"logos-docusaurus-search-local":{"type":"package","name":"@acid-info/logos-docusaurus-search-local","version":"1.0.0-alpha.111"},"logos-data-plugin":{"type":"local"},"docusaurus-theme-classic":{"type":"package","name":"@docusaurus/theme-classic","version":"2.4.1"},"docusaurus-theme-mermaid":{"type":"package","name":"@docusaurus/theme-mermaid","version":"2.4.1"},"logos-docusaurus-theme":{"type":"package","name":"@acid-info/logos-docusaurus-theme","version":"1.0.0-alpha.174"},"docusaurus-fathom":{"type":"package","name":"@acid-info/docusaurus-fathom","version":"1.0.0-alpha.111"},"docusaurus-og":{"type":"package","name":"@acid-info/docusaurus-og","version":"1.0.0-alpha.131"}}}'); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/docusaurusContext.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Static value on purpose: don't make it dynamic! -// Using context is still useful for testability reasons. -const contextValue={siteConfig: docusaurus_config/* default */.Z,siteMetadata: site_metadata_namespaceObject,globalData: globalData_namespaceObject,i18n: i18n_namespaceObject,codeTranslations: codeTranslations};const Context=/*#__PURE__*/react.createContext(contextValue);function DocusaurusContextProvider({children}){return/*#__PURE__*/react.createElement(Context.Provider,{value:contextValue},children);} - -/***/ }), - -/***/ 24649: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -// ESM COMPAT FLAG -__webpack_require__.r(__webpack_exports__); - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - "default": () => (/* binding */ ErrorBoundary) -}); - -// EXTERNAL MODULE: ./node_modules/react/index.js -var react = __webpack_require__(67294); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/ExecutionEnvironment.js -var ExecutionEnvironment = __webpack_require__(19901); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Head.js -var Head = __webpack_require__(32411); -// EXTERNAL MODULE: ./node_modules/@docusaurus/utils-common/lib/index.js -var lib = __webpack_require__(79861); -// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Layout/index.js + 7 modules -var Layout = __webpack_require__(64963); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/theme-fallback/Error/index.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ // Should we translate theme-fallback? -/* eslint-disable @docusaurus/no-untranslated-text */function ErrorDisplay({error,tryAgain}){return/*#__PURE__*/react.createElement("div",{style:{display:'flex',flexDirection:'column',justifyContent:'center',alignItems:'flex-start',minHeight:'100vh',width:'100%',maxWidth:'80ch',fontSize:'20px',margin:'0 auto',padding:'1rem'}},/*#__PURE__*/react.createElement("h1",{style:{fontSize:'3rem'}},"This page crashed"),/*#__PURE__*/react.createElement("button",{type:"button",onClick:tryAgain,style:{margin:'1rem 0',fontSize:'2rem',cursor:'pointer',borderRadius:20,padding:'1rem'}},"Try again"),/*#__PURE__*/react.createElement(ErrorBoundaryError,{error:error}));}function ErrorBoundaryError({error}){const causalChain=(0,lib.getErrorCausalChain)(error);const fullMessage=causalChain.map(e=>e.message).join('\n\nCause:\n');return/*#__PURE__*/react.createElement("p",{style:{whiteSpace:'pre-wrap'}},fullMessage);}function Error({error,tryAgain}){// We wrap the error in its own error boundary because the layout can actually -// throw too... Only the ErrorDisplay component is simple enough to be -// considered safe to never throw -return/*#__PURE__*/react.createElement(ErrorBoundary// Note: we display the original error here, not the error that we -// captured in this extra error boundary -,{fallback:()=>/*#__PURE__*/react.createElement(ErrorDisplay,{error:error,tryAgain:tryAgain})},/*#__PURE__*/react.createElement(Head/* default */.Z,null,/*#__PURE__*/react.createElement("title",null,"Page Error")),/*#__PURE__*/react.createElement(Layout["default"],null,/*#__PURE__*/react.createElement(ErrorDisplay,{error:error,tryAgain:tryAgain})));} -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/exports/ErrorBoundary.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// eslint-disable-next-line react/function-component-definition -const DefaultFallback=params=>/*#__PURE__*/react.createElement(Error,params);class ErrorBoundary extends react.Component{constructor(props){super(props);this.state={error:null};}componentDidCatch(error){// Catch errors in any components below and re-render with error message -if(ExecutionEnvironment["default"].canUseDOM){this.setState({error});}}render(){const{children}=this.props;const{error}=this.state;if(error){const fallbackParams={error,tryAgain:()=>this.setState({error:null})};const fallback=this.props.fallback??DefaultFallback;return fallback(fallbackParams);}// See https://github.com/facebook/docusaurus/issues/6337#issuecomment-1012913647 -return children??null;}} - -/***/ }), - -/***/ 19901: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const canUseDOM=typeof window!=='undefined'&&'document'in window&&'createElement'in window.document;const ExecutionEnvironment={canUseDOM,// window.attachEvent is IE-specific; it's very likely Docusaurus won't work -// on IE anyway. -canUseEventListeners:canUseDOM&&('addEventListener'in window||'attachEvent'in window),canUseIntersectionObserver:canUseDOM&&'IntersectionObserver'in window,canUseViewport:canUseDOM&&'screen'in window};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (ExecutionEnvironment); - -/***/ }), - -/***/ 32411: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Z": () => (/* binding */ Head) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/* harmony import */ var react_helmet_async__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70405); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function Head(props){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_helmet_async__WEBPACK_IMPORTED_MODULE_1__/* .Helmet */ .ql,props);} - -/***/ }), - -/***/ 89562: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -// ESM COMPAT FLAG -__webpack_require__.r(__webpack_exports__); - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - "default": () => (/* binding */ exports_Link) -}); - -// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js -var esm_extends = __webpack_require__(87462); -// EXTERNAL MODULE: ./node_modules/react/index.js -var react = __webpack_require__(67294); -// EXTERNAL MODULE: ./node_modules/react-router/esm/react-router.js -var react_router = __webpack_require__(16550); -// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js + 1 modules -var inheritsLoose = __webpack_require__(75068); -// EXTERNAL MODULE: ./node_modules/history/esm/history.js + 2 modules -var esm_history = __webpack_require__(42358); -// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/objectWithoutPropertiesLoose.js -var objectWithoutPropertiesLoose = __webpack_require__(63366); -// EXTERNAL MODULE: ./node_modules/tiny-invariant/dist/esm/tiny-invariant.js -var tiny_invariant = __webpack_require__(38776); -;// CONCATENATED MODULE: ./node_modules/react-router-dom/esm/react-router-dom.js - - - - - - - - - - - -/** - * The public API for a that uses HTML5 history. - */ - -var BrowserRouter = /*#__PURE__*/function (_React$Component) { - (0,inheritsLoose/* default */.Z)(BrowserRouter, _React$Component); - - function BrowserRouter() { - var _this; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; - _this.history = (0,esm_history/* createBrowserHistory */.lX)(_this.props); - return _this; - } - - var _proto = BrowserRouter.prototype; - - _proto.render = function render() { - return /*#__PURE__*/react.createElement(react_router/* Router */.F0, { - history: this.history, - children: this.props.children - }); - }; - - return BrowserRouter; -}(react.Component); - -if (false) {} - -/** - * The public API for a that uses window.location.hash. - */ - -var HashRouter = /*#__PURE__*/function (_React$Component) { - (0,inheritsLoose/* default */.Z)(HashRouter, _React$Component); - - function HashRouter() { - var _this; - - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - - _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this; - _this.history = (0,esm_history/* createHashHistory */.q_)(_this.props); - return _this; - } - - var _proto = HashRouter.prototype; - - _proto.render = function render() { - return /*#__PURE__*/react.createElement(react_router/* Router */.F0, { - history: this.history, - children: this.props.children - }); - }; - - return HashRouter; -}(react.Component); - -if (false) {} - -var resolveToLocation = function resolveToLocation(to, currentLocation) { - return typeof to === "function" ? to(currentLocation) : to; -}; -var normalizeToLocation = function normalizeToLocation(to, currentLocation) { - return typeof to === "string" ? (0,esm_history/* createLocation */.ob)(to, null, null, currentLocation) : to; -}; - -var forwardRefShim = function forwardRefShim(C) { - return C; -}; - -var forwardRef = react.forwardRef; - -if (typeof forwardRef === "undefined") { - forwardRef = forwardRefShim; -} - -function isModifiedEvent(event) { - return !!(event.metaKey || event.altKey || event.ctrlKey || event.shiftKey); -} - -var LinkAnchor = forwardRef(function (_ref, forwardedRef) { - var innerRef = _ref.innerRef, - navigate = _ref.navigate, - _onClick = _ref.onClick, - rest = (0,objectWithoutPropertiesLoose/* default */.Z)(_ref, ["innerRef", "navigate", "onClick"]); - - var target = rest.target; - - var props = (0,esm_extends/* default */.Z)({}, rest, { - onClick: function onClick(event) { - try { - if (_onClick) _onClick(event); - } catch (ex) { - event.preventDefault(); - throw ex; - } - - if (!event.defaultPrevented && // onClick prevented default - event.button === 0 && ( // ignore everything but left clicks - !target || target === "_self") && // let browser handle "target=_blank" etc. - !isModifiedEvent(event) // ignore clicks with modifier keys - ) { - event.preventDefault(); - navigate(); - } - } - }); // React 15 compat - - - if (forwardRefShim !== forwardRef) { - props.ref = forwardedRef || innerRef; - } else { - props.ref = innerRef; - } - /* eslint-disable-next-line jsx-a11y/anchor-has-content */ - - - return /*#__PURE__*/react.createElement("a", props); -}); - -if (false) {} -/** - * The public API for rendering a history-aware . - */ - - -var Link = forwardRef(function (_ref2, forwardedRef) { - var _ref2$component = _ref2.component, - component = _ref2$component === void 0 ? LinkAnchor : _ref2$component, - replace = _ref2.replace, - to = _ref2.to, - innerRef = _ref2.innerRef, - rest = (0,objectWithoutPropertiesLoose/* default */.Z)(_ref2, ["component", "replace", "to", "innerRef"]); - - return /*#__PURE__*/react.createElement(react_router/* __RouterContext.Consumer */.s6.Consumer, null, function (context) { - !context ? false ? 0 : (0,tiny_invariant/* default */.Z)(false) : void 0; - var history = context.history; - var location = normalizeToLocation(resolveToLocation(to, context.location), context.location); - var href = location ? history.createHref(location) : ""; - - var props = (0,esm_extends/* default */.Z)({}, rest, { - href: href, - navigate: function navigate() { - var location = resolveToLocation(to, context.location); - var isDuplicateNavigation = (0,esm_history/* createPath */.Ep)(context.location) === (0,esm_history/* createPath */.Ep)(normalizeToLocation(location)); - var method = replace || isDuplicateNavigation ? history.replace : history.push; - method(location); - } - }); // React 15 compat - - - if (forwardRefShim !== forwardRef) { - props.ref = forwardedRef || innerRef; - } else { - props.innerRef = innerRef; - } - - return /*#__PURE__*/react.createElement(component, props); - }); -}); - -if (false) { var refType, toType; } - -var forwardRefShim$1 = function forwardRefShim(C) { - return C; -}; - -var forwardRef$1 = react.forwardRef; - -if (typeof forwardRef$1 === "undefined") { - forwardRef$1 = forwardRefShim$1; -} - -function joinClassnames() { - for (var _len = arguments.length, classnames = new Array(_len), _key = 0; _key < _len; _key++) { - classnames[_key] = arguments[_key]; - } - - return classnames.filter(function (i) { - return i; - }).join(" "); -} -/** - * A wrapper that knows if it's "active" or not. - */ - - -var NavLink = forwardRef$1(function (_ref, forwardedRef) { - var _ref$ariaCurrent = _ref["aria-current"], - ariaCurrent = _ref$ariaCurrent === void 0 ? "page" : _ref$ariaCurrent, - _ref$activeClassName = _ref.activeClassName, - activeClassName = _ref$activeClassName === void 0 ? "active" : _ref$activeClassName, - activeStyle = _ref.activeStyle, - classNameProp = _ref.className, - exact = _ref.exact, - isActiveProp = _ref.isActive, - locationProp = _ref.location, - sensitive = _ref.sensitive, - strict = _ref.strict, - styleProp = _ref.style, - to = _ref.to, - innerRef = _ref.innerRef, - rest = (0,objectWithoutPropertiesLoose/* default */.Z)(_ref, ["aria-current", "activeClassName", "activeStyle", "className", "exact", "isActive", "location", "sensitive", "strict", "style", "to", "innerRef"]); - - return /*#__PURE__*/react.createElement(react_router/* __RouterContext.Consumer */.s6.Consumer, null, function (context) { - !context ? false ? 0 : (0,tiny_invariant/* default */.Z)(false) : void 0; - var currentLocation = locationProp || context.location; - var toLocation = normalizeToLocation(resolveToLocation(to, currentLocation), currentLocation); - var path = toLocation.pathname; // Regex taken from: https://github.com/pillarjs/path-to-regexp/blob/master/index.js#L202 - - var escapedPath = path && path.replace(/([.+*?=^!:${}()[\]|/\\])/g, "\\$1"); - var match = escapedPath ? (0,react_router/* matchPath */.LX)(currentLocation.pathname, { - path: escapedPath, - exact: exact, - sensitive: sensitive, - strict: strict - }) : null; - var isActive = !!(isActiveProp ? isActiveProp(match, currentLocation) : match); - var className = typeof classNameProp === "function" ? classNameProp(isActive) : classNameProp; - var style = typeof styleProp === "function" ? styleProp(isActive) : styleProp; - - if (isActive) { - className = joinClassnames(className, activeClassName); - style = (0,esm_extends/* default */.Z)({}, style, activeStyle); - } - - var props = (0,esm_extends/* default */.Z)({ - "aria-current": isActive && ariaCurrent || null, - className: className, - style: style, - to: toLocation - }, rest); // React 15 compat - - - if (forwardRefShim$1 !== forwardRef$1) { - props.ref = forwardedRef || innerRef; - } else { - props.innerRef = innerRef; - } - - return /*#__PURE__*/react.createElement(Link, props); - }); -}); - -if (false) { var ariaCurrentType; } - - -//# sourceMappingURL=react-router-dom.js.map - -// EXTERNAL MODULE: ./node_modules/@docusaurus/utils-common/lib/index.js -var lib = __webpack_require__(79861); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/useDocusaurusContext.js -var useDocusaurusContext = __webpack_require__(6832); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/isInternalUrl.js -var isInternalUrl = __webpack_require__(71699); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/ExecutionEnvironment.js -var ExecutionEnvironment = __webpack_require__(19901); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/LinksCollector.js -var LinksCollector = __webpack_require__(92937); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/useBaseUrl.js -var useBaseUrl = __webpack_require__(51402); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Link.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// TODO all this wouldn't be necessary if we used ReactRouter basename feature -// We don't automatically add base urls to all links, -// only the "safe" ones, starting with / (like /docs/introduction) -// this is because useBaseUrl() actually transforms relative links -// like "introduction" to "/baseUrl/introduction" => bad behavior to fix -const shouldAddBaseUrlAutomatically=to=>to.startsWith('/');function Link_Link({isNavLink,to,href,activeClassName,isActive,'data-noBrokenLinkCheck':noBrokenLinkCheck,autoAddBaseUrl=true,...props},forwardedRef){const{siteConfig:{trailingSlash,baseUrl}}=(0,useDocusaurusContext["default"])();const{withBaseUrl}=(0,useBaseUrl.useBaseUrlUtils)();const linksCollector=(0,LinksCollector/* useLinksCollector */.mo)();const innerRef=(0,react.useRef)(null);(0,react.useImperativeHandle)(forwardedRef,()=>innerRef.current);// IMPORTANT: using to or href should not change anything -// For example, MDX links will ALWAYS give us the href props -// Using one prop or the other should not be used to distinguish -// internal links (/docs/myDoc) from external links (https://github.com) -const targetLinkUnprefixed=to||href;function maybeAddBaseUrl(str){return autoAddBaseUrl&&shouldAddBaseUrlAutomatically(str)?withBaseUrl(str):str;}const isInternal=(0,isInternalUrl["default"])(targetLinkUnprefixed);// pathname:// is a special "protocol" we use to tell Docusaurus link -// that a link is not "internal" and that we shouldn't use history.push() -// this is not ideal but a good enough escape hatch for now -// see https://github.com/facebook/docusaurus/issues/3309 -// note: we want baseUrl to be appended (see issue for details) -// TODO read routes and automatically detect internal/external links? -const targetLinkWithoutPathnameProtocol=targetLinkUnprefixed?.replace('pathname://','');// TODO we should use ReactRouter basename feature instead! -// Automatically apply base url in links that start with / -let targetLink=typeof targetLinkWithoutPathnameProtocol!=='undefined'?maybeAddBaseUrl(targetLinkWithoutPathnameProtocol):undefined;if(targetLink&&isInternal){targetLink=(0,lib.applyTrailingSlash)(targetLink,{trailingSlash,baseUrl});}const preloaded=(0,react.useRef)(false);const LinkComponent=isNavLink?NavLink:Link;const IOSupported=ExecutionEnvironment["default"].canUseIntersectionObserver;const ioRef=(0,react.useRef)();const handleRef=el=>{innerRef.current=el;if(IOSupported&&el&&isInternal){// If IO supported and element reference found, set up Observer. -ioRef.current=new window.IntersectionObserver(entries=>{entries.forEach(entry=>{if(el===entry.target){// If element is in viewport, stop observing and run callback. -// https://developer.mozilla.org/en-US/docs/Web/API/Intersection_Observer_API -if(entry.isIntersecting||entry.intersectionRatio>0){ioRef.current.unobserve(el);ioRef.current.disconnect();if(targetLink!=null){window.docusaurus.prefetch(targetLink);}}}});});// Add element to the observer. -ioRef.current.observe(el);}};const onInteractionEnter=()=>{if(!preloaded.current&&targetLink!=null){window.docusaurus.preload(targetLink);preloaded.current=true;}};(0,react.useEffect)(()=>{// If IO is not supported. We prefetch by default (only once). -if(!IOSupported&&isInternal){if(targetLink!=null){window.docusaurus.prefetch(targetLink);}}// When unmounting, stop intersection observer from watching. -return()=>{if(IOSupported&&ioRef.current){ioRef.current.disconnect();}};},[ioRef,targetLink,IOSupported,isInternal]);const isAnchorLink=targetLink?.startsWith('#')??false;const isRegularHtmlLink=!targetLink||!isInternal||isAnchorLink;if(!isRegularHtmlLink&&!noBrokenLinkCheck){linksCollector.collectLink(targetLink);}return isRegularHtmlLink?/*#__PURE__*/ // eslint-disable-next-line jsx-a11y/anchor-has-content -react.createElement("a",(0,esm_extends/* default */.Z)({ref:innerRef,href:targetLink},targetLinkUnprefixed&&!isInternal&&{target:'_blank',rel:'noopener noreferrer'},props)):/*#__PURE__*/react.createElement(LinkComponent,(0,esm_extends/* default */.Z)({},props,{onMouseEnter:onInteractionEnter,onTouchStart:onInteractionEnter,innerRef:handleRef,to:targetLink// Avoid "React does not recognize the `activeClassName` prop on a DOM -// element" -},isNavLink&&{isActive,activeClassName}));}/* harmony default export */ const exports_Link = (/*#__PURE__*/react.forwardRef(Link_Link)); - -/***/ }), - -/***/ 11614: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -// ESM COMPAT FLAG -__webpack_require__.r(__webpack_exports__); - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - "default": () => (/* binding */ Translate), - "translate": () => (/* binding */ translate) -}); - -// EXTERNAL MODULE: ./node_modules/react/index.js -var react = __webpack_require__(67294); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Interpolate.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function interpolate(text,values){// eslint-disable-next-line prefer-named-capture-group -const segments=text.split(/(\{\w+\})/).map((seg,index)=>{// Odd indices (1, 3, 5...) of the segments are (potentially) interpolatable -if(index%2===1){const value=values?.[seg.slice(1,-1)];if(value!==undefined){return value;}// No match: add warning? There's no way to "escape" interpolation though -}return seg;});if(segments.some(seg=>/*#__PURE__*/(0,react.isValidElement)(seg))){return segments.map((seg,index)=>/*#__PURE__*/(0,react.isValidElement)(seg)?/*#__PURE__*/react.cloneElement(seg,{key:index}):seg).filter(seg=>seg!=='');}return segments.join('');}function Interpolate({children,values}){if(typeof children!=='string'){throw new Error(`The Docusaurus component only accept simple string values. Received: ${/*#__PURE__*/isValidElement(children)?'React element':typeof children}`);}return/*#__PURE__*/React.createElement(React.Fragment,null,interpolate(children,values));} -// EXTERNAL MODULE: ./.docusaurus/codeTranslations.json -var codeTranslations = __webpack_require__(57529); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Translate.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Can't read it from context, due to exposing imperative API -function getLocalizedMessage({id,message}){if(typeof id==='undefined'&&typeof message==='undefined'){throw new Error('Docusaurus translation declarations must have at least a translation id or a default translation message');}return codeTranslations[id??message]??message??id;}// Imperative translation API is useful for some edge-cases: -// - translating page titles (meta) -// - translating string props (input placeholders, image alt, aria labels...) -function translate({message,id},values){const localizedMessage=getLocalizedMessage({message,id});return interpolate(localizedMessage,values);}// Maybe we'll want to improve this component with additional features -// Like toggling a translation mode that adds a little translation button near -// the text? -function Translate({children,id,values}){if(children&&typeof children!=='string'){console.warn('Illegal children',children);throw new Error('The Docusaurus component only accept simple string values');}const localizedMessage=getLocalizedMessage({message:children,id});return/*#__PURE__*/react.createElement(react.Fragment,null,interpolate(localizedMessage,values));} - -/***/ }), - -/***/ 12497: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "m": () => (/* binding */ DEFAULT_PLUGIN_ID) -/* harmony export */ }); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ // Constants used on the client-side: duplicated from server-side code -const DEFAULT_PLUGIN_ID='default'; - -/***/ }), - -/***/ 71699: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ isInternalUrl), -/* harmony export */ "hasProtocol": () => (/* binding */ hasProtocol) -/* harmony export */ }); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function hasProtocol(url){return /^(?:\w*:|\/\/)/.test(url);}function isInternalUrl(url){return typeof url!=='undefined'&&!hasProtocol(url);} - -/***/ }), - -/***/ 7154: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Redirect": () => (/* reexport safe */ react_router_dom__WEBPACK_IMPORTED_MODULE_0__.l_), -/* harmony export */ "matchPath": () => (/* reexport safe */ react_router_dom__WEBPACK_IMPORTED_MODULE_0__.LX), -/* harmony export */ "useHistory": () => (/* reexport safe */ react_router_dom__WEBPACK_IMPORTED_MODULE_0__.k6), -/* harmony export */ "useLocation": () => (/* reexport safe */ react_router_dom__WEBPACK_IMPORTED_MODULE_0__.TH) -/* harmony export */ }); -/* harmony import */ var react_router_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(16550); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - -/***/ }), - -/***/ 51402: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ useBaseUrl), -/* harmony export */ "useBaseUrlUtils": () => (/* binding */ useBaseUrlUtils) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/* harmony import */ var _useDocusaurusContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6832); -/* harmony import */ var _isInternalUrl__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(71699); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function addBaseUrl(siteUrl,baseUrl,url,{forcePrependBaseUrl=false,absolute=false}={}){// It never makes sense to add base url to a local anchor url, or one with a -// protocol -if(!url||url.startsWith('#')||(0,_isInternalUrl__WEBPACK_IMPORTED_MODULE_2__.hasProtocol)(url)){return url;}if(forcePrependBaseUrl){return baseUrl+url.replace(/^\//,'');}// /baseUrl -> /baseUrl/ -// https://github.com/facebook/docusaurus/issues/6315 -if(url===baseUrl.replace(/\/$/,'')){return baseUrl;}// We should avoid adding the baseurl twice if it's already there -const shouldAddBaseUrl=!url.startsWith(baseUrl);const basePath=shouldAddBaseUrl?baseUrl+url.replace(/^\//,''):url;return absolute?siteUrl+basePath:basePath;}function useBaseUrlUtils(){const{siteConfig:{baseUrl,url:siteUrl}}=(0,_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_1__["default"])();const withBaseUrl=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((url,options)=>addBaseUrl(siteUrl,baseUrl,url,options),[siteUrl,baseUrl]);return{withBaseUrl};}function useBaseUrl(url,options={}){const{withBaseUrl}=useBaseUrlUtils();return withBaseUrl(url,options);} - -/***/ }), - -/***/ 6832: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ useDocusaurusContext) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/* harmony import */ var _docusaurusContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(56725); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function useDocusaurusContext(){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_docusaurusContext__WEBPACK_IMPORTED_MODULE_1__/* .Context */ ._);} - -/***/ }), - -/***/ 5730: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ useIsBrowser) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/* harmony import */ var _browserContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74058); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function useIsBrowser(){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(_browserContext__WEBPACK_IMPORTED_MODULE_1__/* .Context */ ._);} - -/***/ }), - -/***/ 66041: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "_": () => (/* binding */ Context), -/* harmony export */ "z": () => (/* binding */ RouteContextProvider) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);function mergeContexts({parent,value}){if(!parent){if(!value){throw new Error('Unexpected: no Docusaurus route context found');}else if(!('plugin'in value)){throw new Error('Unexpected: Docusaurus topmost route context has no `plugin` attribute');}return value;}// TODO deep merge this -const data={...parent.data,...value?.data};return{// Nested routes are not supposed to override plugin attribute -plugin:parent.plugin,data};}function RouteContextProvider({children,value}){const parent=react__WEBPACK_IMPORTED_MODULE_0__.useContext(Context);const mergedValue=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>mergeContexts({parent,value}),[parent,value]);return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Context.Provider,{value:mergedValue},children);} - -/***/ }), - -/***/ 21429: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -// ESM COMPAT FLAG -__webpack_require__.r(__webpack_exports__); - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - "default": () => (/* binding */ serverEntry_render) -}); - -// EXTERNAL MODULE: ./node_modules/react/index.js -var react = __webpack_require__(67294); -// EXTERNAL MODULE: external "path" -var external_path_ = __webpack_require__(71017); -var external_path_default = /*#__PURE__*/__webpack_require__.n(external_path_); -// EXTERNAL MODULE: ./node_modules/fs-extra/lib/index.js -var lib = __webpack_require__(55674); -var lib_default = /*#__PURE__*/__webpack_require__.n(lib); -// EXTERNAL MODULE: ./node_modules/lodash/lodash.js -var lodash = __webpack_require__(96486); -var lodash_default = /*#__PURE__*/__webpack_require__.n(lodash); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/node_modules/chalk/source/index.js -var source = __webpack_require__(27162); -var source_default = /*#__PURE__*/__webpack_require__.n(source); -// EXTERNAL MODULE: external "fs" -var external_fs_ = __webpack_require__(57147); -;// CONCATENATED MODULE: ./node_modules/eta/dist/eta.module.mjs - - - -function setPrototypeOf(obj, proto) { - // eslint-disable-line @typescript-eslint/no-explicit-any - if (Object.setPrototypeOf) { - Object.setPrototypeOf(obj, proto); - } else { - obj.__proto__ = proto; - } -} -// This is pretty much the only way to get nice, extended Errors -// without using ES6 -/** - * This returns a new Error with a custom prototype. Note that it's _not_ a constructor - * - * @param message Error message - * - * **Example** - * - * ```js - * throw EtaErr("template not found") - * ``` - */ -function EtaErr(message) { - const err = new Error(message); - setPrototypeOf(err, EtaErr.prototype); - return err; -} -EtaErr.prototype = Object.create(Error.prototype, { - name: { - value: "Eta Error", - enumerable: false - } -}); -/** - * Throws an EtaErr with a nicely formatted error and message showing where in the template the error occurred. - */ -function ParseErr(message, str, indx) { - const whitespace = str.slice(0, indx).split(/\n/); - const lineNo = whitespace.length; - const colNo = whitespace[lineNo - 1].length + 1; - message += " at line " + lineNo + " col " + colNo + ":\n\n" + " " + str.split(/\n/)[lineNo - 1] + "\n" + " " + Array(colNo).join(" ") + "^"; - throw EtaErr(message); -} - -/** - * @returns The global Promise function - */ -const promiseImpl = new Function("return this")().Promise; -/** - * @returns A new AsyncFunction constuctor - */ -function getAsyncFunctionConstructor() { - try { - return new Function("return (async function(){}).constructor")(); - } catch (e) { - if (e instanceof SyntaxError) { - throw EtaErr("This environment doesn't support async/await"); - } else { - throw e; - } - } -} -/** - * str.trimLeft polyfill - * - * @param str - Input string - * @returns The string with left whitespace removed - * - */ -function trimLeft(str) { - // eslint-disable-next-line no-extra-boolean-cast - if (!!String.prototype.trimLeft) { - return str.trimLeft(); - } else { - return str.replace(/^\s+/, ""); - } -} -/** - * str.trimRight polyfill - * - * @param str - Input string - * @returns The string with right whitespace removed - * - */ -function trimRight(str) { - // eslint-disable-next-line no-extra-boolean-cast - if (!!String.prototype.trimRight) { - return str.trimRight(); - } else { - return str.replace(/\s+$/, ""); // TODO: do we really need to replace BOM's? - } -} - -// TODO: allow '-' to trim up until newline. Use [^\S\n\r] instead of \s -/* END TYPES */ -function hasOwnProp(obj, prop) { - return Object.prototype.hasOwnProperty.call(obj, prop); -} -function copyProps(toObj, fromObj) { - for (const key in fromObj) { - if (hasOwnProp(fromObj, key)) { - toObj[key] = fromObj[key]; - } - } - return toObj; -} -/** - * Takes a string within a template and trims it, based on the preceding tag's whitespace control and `config.autoTrim` - */ -function trimWS(str, config, wsLeft, wsRight) { - let leftTrim; - let rightTrim; - if (Array.isArray(config.autoTrim)) { - // kinda confusing - // but _}} will trim the left side of the following string - leftTrim = config.autoTrim[1]; - rightTrim = config.autoTrim[0]; - } else { - leftTrim = rightTrim = config.autoTrim; - } - if (wsLeft || wsLeft === false) { - leftTrim = wsLeft; - } - if (wsRight || wsRight === false) { - rightTrim = wsRight; - } - if (!rightTrim && !leftTrim) { - return str; - } - if (leftTrim === "slurp" && rightTrim === "slurp") { - return str.trim(); - } - if (leftTrim === "_" || leftTrim === "slurp") { - // console.log('trimming left' + leftTrim) - // full slurp - str = trimLeft(str); - } else if (leftTrim === "-" || leftTrim === "nl") { - // nl trim - str = str.replace(/^(?:\r\n|\n|\r)/, ""); - } - if (rightTrim === "_" || rightTrim === "slurp") { - // full slurp - str = trimRight(str); - } else if (rightTrim === "-" || rightTrim === "nl") { - // nl trim - str = str.replace(/(?:\r\n|\n|\r)$/, ""); // TODO: make sure this gets \r\n - } - - return str; -} -/** - * A map of special HTML characters to their XML-escaped equivalents - */ -const escMap = { - "&": "&", - "<": "<", - ">": ">", - '"': """, - "'": "'" -}; -function replaceChar(s) { - return escMap[s]; -} -/** - * XML-escapes an input value after converting it to a string - * - * @param str - Input value (usually a string) - * @returns XML-escaped string - */ -function XMLEscape(str) { - // eslint-disable-line @typescript-eslint/no-explicit-any - // To deal with XSS. Based on Escape implementations of Mustache.JS and Marko, then customized. - const newStr = String(str); - if (/[&<>"']/.test(newStr)) { - return newStr.replace(/[&<>"']/g, replaceChar); - } else { - return newStr; - } -} - -/* END TYPES */ -const templateLitReg = /`(?:\\[\s\S]|\${(?:[^{}]|{(?:[^{}]|{[^}]*})*})*}|(?!\${)[^\\`])*`/g; -const singleQuoteReg = /'(?:\\[\s\w"'\\`]|[^\n\r'\\])*?'/g; -const doubleQuoteReg = /"(?:\\[\s\w"'\\`]|[^\n\r"\\])*?"/g; -/** Escape special regular expression characters inside a string */ -function escapeRegExp(string) { - // From MDN - return string.replace(/[.*+\-?^${}()|[\]\\]/g, "\\$&"); // $& means the whole matched string -} - -function parse(str, config) { - let buffer = []; - let trimLeftOfNextStr = false; - let lastIndex = 0; - const parseOptions = config.parse; - if (config.plugins) { - for (let i = 0; i < config.plugins.length; i++) { - const plugin = config.plugins[i]; - if (plugin.processTemplate) { - str = plugin.processTemplate(str, config); - } - } - } - /* Adding for EJS compatibility */ - if (config.rmWhitespace) { - // Code taken directly from EJS - // Have to use two separate replaces here as `^` and `$` operators don't - // work well with `\r` and empty lines don't work well with the `m` flag. - // Essentially, this replaces the whitespace at the beginning and end of - // each line and removes multiple newlines. - str = str.replace(/[\r\n]+/g, "\n").replace(/^\s+|\s+$/gm, ""); - } - /* End rmWhitespace option */ - templateLitReg.lastIndex = 0; - singleQuoteReg.lastIndex = 0; - doubleQuoteReg.lastIndex = 0; - function pushString(strng, shouldTrimRightOfString) { - if (strng) { - // if string is truthy it must be of type 'string' - strng = trimWS(strng, config, trimLeftOfNextStr, - // this will only be false on the first str, the next ones will be null or undefined - shouldTrimRightOfString); - if (strng) { - // replace \ with \\, ' with \' - // we're going to convert all CRLF to LF so it doesn't take more than one replace - strng = strng.replace(/\\|'/g, "\\$&").replace(/\r\n|\n|\r/g, "\\n"); - buffer.push(strng); - } - } - } - const prefixes = [parseOptions.exec, parseOptions.interpolate, parseOptions.raw].reduce(function (accumulator, prefix) { - if (accumulator && prefix) { - return accumulator + "|" + escapeRegExp(prefix); - } else if (prefix) { - // accumulator is falsy - return escapeRegExp(prefix); - } else { - // prefix and accumulator are both falsy - return accumulator; - } - }, ""); - const parseOpenReg = new RegExp(escapeRegExp(config.tags[0]) + "(-|_)?\\s*(" + prefixes + ")?\\s*", "g"); - const parseCloseReg = new RegExp("'|\"|`|\\/\\*|(\\s*(-|_)?" + escapeRegExp(config.tags[1]) + ")", "g"); - // TODO: benchmark having the \s* on either side vs using str.trim() - let m; - while (m = parseOpenReg.exec(str)) { - const precedingString = str.slice(lastIndex, m.index); - lastIndex = m[0].length + m.index; - const wsLeft = m[1]; - const prefix = m[2] || ""; // by default either ~, =, or empty - pushString(precedingString, wsLeft); - parseCloseReg.lastIndex = lastIndex; - let closeTag; - let currentObj = false; - while (closeTag = parseCloseReg.exec(str)) { - if (closeTag[1]) { - const content = str.slice(lastIndex, closeTag.index); - parseOpenReg.lastIndex = lastIndex = parseCloseReg.lastIndex; - trimLeftOfNextStr = closeTag[2]; - const currentType = prefix === parseOptions.exec ? "e" : prefix === parseOptions.raw ? "r" : prefix === parseOptions.interpolate ? "i" : ""; - currentObj = { - t: currentType, - val: content - }; - break; - } else { - const char = closeTag[0]; - if (char === "/*") { - const commentCloseInd = str.indexOf("*/", parseCloseReg.lastIndex); - if (commentCloseInd === -1) { - ParseErr("unclosed comment", str, closeTag.index); - } - parseCloseReg.lastIndex = commentCloseInd; - } else if (char === "'") { - singleQuoteReg.lastIndex = closeTag.index; - const singleQuoteMatch = singleQuoteReg.exec(str); - if (singleQuoteMatch) { - parseCloseReg.lastIndex = singleQuoteReg.lastIndex; - } else { - ParseErr("unclosed string", str, closeTag.index); - } - } else if (char === '"') { - doubleQuoteReg.lastIndex = closeTag.index; - const doubleQuoteMatch = doubleQuoteReg.exec(str); - if (doubleQuoteMatch) { - parseCloseReg.lastIndex = doubleQuoteReg.lastIndex; - } else { - ParseErr("unclosed string", str, closeTag.index); - } - } else if (char === "`") { - templateLitReg.lastIndex = closeTag.index; - const templateLitMatch = templateLitReg.exec(str); - if (templateLitMatch) { - parseCloseReg.lastIndex = templateLitReg.lastIndex; - } else { - ParseErr("unclosed string", str, closeTag.index); - } - } - } - } - if (currentObj) { - buffer.push(currentObj); - } else { - ParseErr("unclosed tag", str, m.index + precedingString.length); - } - } - pushString(str.slice(lastIndex, str.length), false); - if (config.plugins) { - for (let i = 0; i < config.plugins.length; i++) { - const plugin = config.plugins[i]; - if (plugin.processAST) { - buffer = plugin.processAST(buffer, config); - } - } - } - return buffer; -} - -/* END TYPES */ -/** - * Compiles a template string to a function string. Most often users just use `compile()`, which calls `compileToString` and creates a new function using the result - * - * **Example** - * - * ```js - * compileToString("Hi <%= it.user %>", eta.config) - * // "var tR='',include=E.include.bind(E),includeFile=E.includeFile.bind(E);tR+='Hi ';tR+=E.e(it.user);if(cb){cb(null,tR)} return tR" - * ``` - */ -function compileToString(str, config) { - const buffer = parse(str, config); - let res = "var tR='',__l,__lP" + (config.include ? ",include=E.include.bind(E)" : "") + (config.includeFile ? ",includeFile=E.includeFile.bind(E)" : "") + "\nfunction layout(p,d){__l=p;__lP=d}\n" + (config.useWith ? "with(" + config.varName + "||{}){" : "") + compileScope(buffer, config) + (config.includeFile ? "if(__l)tR=" + (config.async ? "await " : "") + `includeFile(__l,Object.assign(${config.varName},{body:tR},__lP))\n` : config.include ? "if(__l)tR=" + (config.async ? "await " : "") + `include(__l,Object.assign(${config.varName},{body:tR},__lP))\n` : "") + "if(cb){cb(null,tR)} return tR" + (config.useWith ? "}" : ""); - if (config.plugins) { - for (let i = 0; i < config.plugins.length; i++) { - const plugin = config.plugins[i]; - if (plugin.processFnString) { - res = plugin.processFnString(res, config); - } - } - } - return res; -} -/** - * Loops through the AST generated by `parse` and transform each item into JS calls - * - * **Example** - * - * ```js - * // AST version of 'Hi <%= it.user %>' - * let templateAST = ['Hi ', { val: 'it.user', t: 'i' }] - * compileScope(templateAST, eta.config) - * // "tR+='Hi ';tR+=E.e(it.user);" - * ``` - */ -function compileScope(buff, config) { - let i = 0; - const buffLength = buff.length; - let returnStr = ""; - for (i; i < buffLength; i++) { - const currentBlock = buff[i]; - if (typeof currentBlock === "string") { - const str = currentBlock; - // we know string exists - returnStr += "tR+='" + str + "'\n"; - } else { - const type = currentBlock.t; // ~, s, !, ?, r - let content = currentBlock.val || ""; - if (type === "r") { - // raw - if (config.filter) { - content = "E.filter(" + content + ")"; - } - returnStr += "tR+=" + content + "\n"; - } else if (type === "i") { - // interpolate - if (config.filter) { - content = "E.filter(" + content + ")"; - } - if (config.autoEscape) { - content = "E.e(" + content + ")"; - } - returnStr += "tR+=" + content + "\n"; - // reference - } else if (type === "e") { - // execute - returnStr += content + "\n"; // you need a \n in case you have <% } %> - } - } - } - - return returnStr; -} - -/** - * Handles storage and accessing of values - * - * In this case, we use it to store compiled template functions - * Indexed by their `name` or `filename` - */ -class Cacher { - constructor(cache) { - this.cache = void 0; - this.cache = cache; - } - define(key, val) { - this.cache[key] = val; - } - get(key) { - // string | array. - // TODO: allow array of keys to look down - // TODO: create plugin to allow referencing helpers, filters with dot notation - return this.cache[key]; - } - remove(key) { - delete this.cache[key]; - } - reset() { - this.cache = {}; - } - load(cacheObj) { - copyProps(this.cache, cacheObj); - } -} - -/* END TYPES */ -/** - * Eta's template storage - * - * Stores partials and cached templates - */ -const templates = new Cacher({}); - -/* END TYPES */ -/** - * Include a template based on its name (or filepath, if it's already been cached). - * - * Called like `include(templateNameOrPath, data)` - */ -function includeHelper(templateNameOrPath, data) { - const template = this.templates.get(templateNameOrPath); - if (!template) { - throw EtaErr('Could not fetch template "' + templateNameOrPath + '"'); - } - return template(data, this); -} -/** Eta's base (global) configuration */ -const config = { - async: false, - autoEscape: true, - autoTrim: [false, "nl"], - cache: false, - e: XMLEscape, - include: includeHelper, - parse: { - exec: "", - interpolate: "=", - raw: "~" - }, - plugins: [], - rmWhitespace: false, - tags: ["<%", "%>"], - templates: templates, - useWith: false, - varName: "it" -}; -/** - * Takes one or two partial (not necessarily complete) configuration objects, merges them 1 layer deep into eta.config, and returns the result - * - * @param override Partial configuration object - * @param baseConfig Partial configuration object to merge before `override` - * - * **Example** - * - * ```js - * let customConfig = getConfig({tags: ['!#', '#!']}) - * ``` - */ -function getConfig(override, baseConfig) { - // TODO: run more tests on this - const res = {}; // Linked - copyProps(res, config); // Creates deep clone of eta.config, 1 layer deep - if (baseConfig) { - copyProps(res, baseConfig); - } - if (override) { - copyProps(res, override); - } - return res; -} -/** Update Eta's base config */ -function configure(options) { - return copyProps(config, options); -} - -/* END TYPES */ -/** - * Takes a template string and returns a template function that can be called with (data, config, [cb]) - * - * @param str - The template string - * @param config - A custom configuration object (optional) - * - * **Example** - * - * ```js - * let compiledFn = eta.compile("Hi <%= it.user %>") - * // function anonymous() - * let compiledFnStr = compiledFn.toString() - * // "function anonymous(it,E,cb\n) {\nvar tR='',include=E.include.bind(E),includeFile=E.includeFile.bind(E);tR+='Hi ';tR+=E.e(it.user);if(cb){cb(null,tR)} return tR\n}" - * ``` - */ -function compile(str, config) { - const options = getConfig(config || {}); - /* ASYNC HANDLING */ - // The below code is modified from mde/ejs. All credit should go to them. - const ctor = options.async ? getAsyncFunctionConstructor() : Function; - /* END ASYNC HANDLING */ - try { - return new ctor(options.varName, "E", - // EtaConfig - "cb", - // optional callback - compileToString(str, options)); // eslint-disable-line no-new-func - } catch (e) { - if (e instanceof SyntaxError) { - throw EtaErr("Bad template syntax\n\n" + e.message + "\n" + Array(e.message.length + 1).join("=") + "\n" + compileToString(str, options) + "\n" // This will put an extra newline before the callstack for extra readability - ); - } else { - throw e; - } - } -} - -const _BOM = /^\uFEFF/; -/* END TYPES */ -/** - * Get the path to the included file from the parent file path and the - * specified path. - * - * If `name` does not have an extension, it will default to `.eta` - * - * @param name specified path - * @param parentfile parent file path - * @param isDirectory whether parentfile is a directory - * @return absolute path to template - */ -function getWholeFilePath(name, parentfile, isDirectory) { - const includePath = external_path_.resolve(isDirectory ? parentfile : external_path_.dirname(parentfile), - // returns directory the parent file is in - name // file - ) + (external_path_.extname(name) ? "" : ".eta"); - return includePath; -} -/** - * Get the absolute path to an included template - * - * If this is called with an absolute path (for example, starting with '/' or 'C:\') - * then Eta will attempt to resolve the absolute path within options.views. If it cannot, - * Eta will fallback to options.root or '/' - * - * If this is called with a relative path, Eta will: - * - Look relative to the current template (if the current template has the `filename` property) - * - Look inside each directory in options.views - * - * Note: if Eta is unable to find a template using path and options, it will throw an error. - * - * @param path specified path - * @param options compilation options - * @return absolute path to template - */ -function getPath(path, options) { - let includePath = false; - const views = options.views; - const searchedPaths = []; - // If these four values are the same, - // getPath() will return the same result every time. - // We can cache the result to avoid expensive - // file operations. - const pathOptions = JSON.stringify({ - filename: options.filename, - path: path, - root: options.root, - views: options.views - }); - if (options.cache && options.filepathCache && options.filepathCache[pathOptions]) { - // Use the cached filepath - return options.filepathCache[pathOptions]; - } - /** Add a filepath to the list of paths we've checked for a template */ - function addPathToSearched(pathSearched) { - if (!searchedPaths.includes(pathSearched)) { - searchedPaths.push(pathSearched); - } - } - /** - * Take a filepath (like 'partials/mypartial.eta'). Attempt to find the template file inside `views`; - * return the resulting template file path, or `false` to indicate that the template was not found. - * - * @param views the filepath that holds templates, or an array of filepaths that hold templates - * @param path the path to the template - */ - function searchViews(views, path) { - let filePath; - // If views is an array, then loop through each directory - // And attempt to find the template - if (Array.isArray(views) && views.some(function (v) { - filePath = getWholeFilePath(path, v, true); - addPathToSearched(filePath); - return (0,external_fs_.existsSync)(filePath); - })) { - // If the above returned true, we know that the filePath was just set to a path - // That exists (Array.some() returns as soon as it finds a valid element) - return filePath; - } else if (typeof views === "string") { - // Search for the file if views is a single directory - filePath = getWholeFilePath(path, views, true); - addPathToSearched(filePath); - if ((0,external_fs_.existsSync)(filePath)) { - return filePath; - } - } - // Unable to find a file - return false; - } - // Path starts with '/', 'C:\', etc. - const match = /^[A-Za-z]+:\\|^\//.exec(path); - // Absolute path, like /partials/partial.eta - if (match && match.length) { - // We have to trim the beginning '/' off the path, or else - // path.resolve(dir, path) will always resolve to just path - const formattedPath = path.replace(/^\/*/, ""); - // First, try to resolve the path within options.views - includePath = searchViews(views, formattedPath); - if (!includePath) { - // If that fails, searchViews will return false. Try to find the path - // inside options.root (by default '/', the base of the filesystem) - const pathFromRoot = getWholeFilePath(formattedPath, options.root || "/", true); - addPathToSearched(pathFromRoot); - includePath = pathFromRoot; - } - } else { - // Relative paths - // Look relative to a passed filename first - if (options.filename) { - const filePath = getWholeFilePath(path, options.filename); - addPathToSearched(filePath); - if ((0,external_fs_.existsSync)(filePath)) { - includePath = filePath; - } - } - // Then look for the template in options.views - if (!includePath) { - includePath = searchViews(views, path); - } - if (!includePath) { - throw EtaErr('Could not find the template "' + path + '". Paths tried: ' + searchedPaths); - } - } - // If caching and filepathCache are enabled, - // cache the input & output of this function. - if (options.cache && options.filepathCache) { - options.filepathCache[pathOptions] = includePath; - } - return includePath; -} -/** - * Reads a file synchronously - */ -function readFile(filePath) { - try { - return (0,external_fs_.readFileSync)(filePath).toString().replace(_BOM, ""); // TODO: is replacing BOM's necessary? - } catch { - throw EtaErr("Failed to read template at '" + filePath + "'"); - } -} - -// express is set like: app.engine('html', require('eta').renderFile) -/* END TYPES */ -/** - * Reads a template, compiles it into a function, caches it if caching isn't disabled, returns the function - * - * @param filePath Absolute path to template file - * @param options Eta configuration overrides - * @param noCache Optionally, make Eta not cache the template - */ -function loadFile(filePath, options, noCache) { - const config = getConfig(options); - const template = readFile(filePath); - try { - const compiledTemplate = compile(template, config); - if (!noCache) { - config.templates.define(config.filename, compiledTemplate); - } - return compiledTemplate; - } catch (e) { - throw EtaErr("Loading file: " + filePath + " failed:\n\n" + e.message); - } -} -/** - * Get the template from a string or a file, either compiled on-the-fly or - * read from cache (if enabled), and cache the template if needed. - * - * If `options.cache` is true, this function reads the file from - * `options.filename` so it must be set prior to calling this function. - * - * @param options compilation options - * @return Eta template function - */ -function handleCache$1(options) { - const filename = options.filename; - if (options.cache) { - const func = options.templates.get(filename); - if (func) { - return func; - } - return loadFile(filename, options); - } - // Caching is disabled, so pass noCache = true - return loadFile(filename, options, true); -} -/** - * Try calling handleCache with the given options and data and call the - * callback with the result. If an error occurs, call the callback with - * the error. Used by renderFile(). - * - * @param data template data - * @param options compilation options - * @param cb callback - */ -function tryHandleCache(data, options, cb) { - if (cb) { - try { - // Note: if there is an error while rendering the template, - // It will bubble up and be caught here - const templateFn = handleCache$1(options); - templateFn(data, options, cb); - } catch (err) { - return cb(err); - } - } else { - // No callback, try returning a promise - if (typeof promiseImpl === "function") { - return new promiseImpl(function (resolve, reject) { - try { - const templateFn = handleCache$1(options); - const result = templateFn(data, options); - resolve(result); - } catch (err) { - reject(err); - } - }); - } else { - throw EtaErr("Please provide a callback function, this env doesn't support Promises"); - } - } -} -/** - * Get the template function. - * - * If `options.cache` is `true`, then the template is cached. - * - * This returns a template function and the config object with which that template function should be called. - * - * @remarks - * - * It's important that this returns a config object with `filename` set. - * Otherwise, the included file would not be able to use relative paths - * - * @param path path for the specified file (if relative, specify `views` on `options`) - * @param options compilation options - * @return [Eta template function, new config object] - */ -function includeFile(path, options) { - // the below creates a new options object, using the parent filepath of the old options object and the path - const newFileOptions = getConfig({ - filename: getPath(path, options) - }, options); - // TODO: make sure properties are currectly copied over - return [handleCache$1(newFileOptions), newFileOptions]; -} -function renderFile(filename, data, config, cb) { - /* - Here we have some function overloading. - Essentially, the first 2 arguments to renderFile should always be the filename and data - Express will call renderFile with (filename, data, cb) - We also want to make (filename, data, options, cb) available - */ - let renderConfig; - let callback; - data = data || {}; - // First, assign our callback function to `callback` - // We can leave it undefined if neither parameter is a function; - // Callbacks are optional - if (typeof cb === "function") { - // The 4th argument is the callback - callback = cb; - } else if (typeof config === "function") { - // The 3rd arg is the callback - callback = config; - } - // If there is a config object passed in explicitly, use it - if (typeof config === "object") { - renderConfig = getConfig(config || {}); - } else { - // Otherwise, get the default config - renderConfig = getConfig({}); - } - // Set the filename option on the template - // This will first try to resolve the file path (see getPath for details) - renderConfig.filename = getPath(filename, renderConfig); - return tryHandleCache(data, renderConfig, callback); -} -function renderFileAsync(filename, data, config, cb) { - return renderFile(filename, typeof config === "function" ? { - ...data, - async: true - } : data, typeof config === "object" ? { - ...config, - async: true - } : config, cb); -} - -/* END TYPES */ -/** - * Called with `includeFile(path, data)` - */ -function includeFileHelper(path, data) { - const templateAndConfig = includeFile(path, this); - return templateAndConfig[0](data, templateAndConfig[1]); -} - -/* END TYPES */ -function handleCache(template, options) { - if (options.cache && options.name && options.templates.get(options.name)) { - return options.templates.get(options.name); - } - const templateFunc = typeof template === "function" ? template : compile(template, options); - // Note that we don't have to check if it already exists in the cache; - // it would have returned earlier if it had - if (options.cache && options.name) { - options.templates.define(options.name, templateFunc); - } - return templateFunc; -} -function render(template, data, config, cb) { - const options = getConfig(config || {}); - if (options.async) { - if (cb) { - // If user passes callback - try { - // Note: if there is an error while rendering the template, - // It will bubble up and be caught here - const templateFn = handleCache(template, options); - templateFn(data, options, cb); - } catch (err) { - return cb(err); - } - } else { - // No callback, try returning a promise - if (typeof promiseImpl === "function") { - return new promiseImpl(function (resolve, reject) { - try { - resolve(handleCache(template, options)(data, options)); - } catch (err) { - reject(err); - } - }); - } else { - throw EtaErr("Please provide a callback function, this env doesn't support Promises"); - } - } - } else { - return handleCache(template, options)(data, options); - } -} -function renderAsync(template, data, config, cb) { - // Using Object.assign to lower bundle size, using spread operator makes it larger because of typescript injected polyfills - return render(template, data, Object.assign({}, config, { - async: true - }), cb); -} - -// @denoify-ignore -config.includeFile = includeFileHelper; -config.filepathCache = {}; - - -//# sourceMappingURL=eta.module.mjs.map - -// EXTERNAL MODULE: ./node_modules/react-router/esm/react-router.js -var react_router = __webpack_require__(16550); -// EXTERNAL MODULE: ./node_modules/react-dom/server.js -var server = __webpack_require__(21152); -// EXTERNAL MODULE: ./node_modules/react-helmet-async/lib/index.module.js -var index_module = __webpack_require__(70405); -// EXTERNAL MODULE: ./node_modules/react-loadable-ssr-addon-v5-slorber/lib/index.js -var react_loadable_ssr_addon_v5_slorber_lib = __webpack_require__(80563); -// EXTERNAL MODULE: ./node_modules/react-loadable/lib/index.js -var react_loadable_lib = __webpack_require__(68356); -var react_loadable_lib_default = /*#__PURE__*/__webpack_require__.n(react_loadable_lib); -// EXTERNAL MODULE: ./node_modules/html-minifier-terser/src/htmlminifier.js -var htmlminifier = __webpack_require__(85110); -// EXTERNAL MODULE: ./.docusaurus/routes.js + 7 modules -var routes = __webpack_require__(77763); -// EXTERNAL MODULE: ./node_modules/react-router-config/esm/react-router-config.js -var react_router_config = __webpack_require__(18790); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/preload.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *//** - * Helper function to make sure all async components for that particular route - * is preloaded before rendering. This is especially useful to avoid loading - * screens. - * - * @param pathname the route pathname, example: /docs/installation - * @returns Promise object represents whether pathname has been preloaded - */function preload(pathname){const matches=Array.from(new Set([pathname,decodeURI(pathname)])).map(p=>(0,react_router_config/* matchRoutes */.f)(routes/* default */.Z,p)).flat();return Promise.all(matches.map(match=>match.route.component.preload?.()));} -;// CONCATENATED MODULE: ./.docusaurus/client-modules.js -/* harmony default export */ const client_modules = ([__webpack_require__(79578),__webpack_require__(54979),__webpack_require__(25529),__webpack_require__(26126),__webpack_require__(38275),__webpack_require__(6615),__webpack_require__(27998)]); -// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/Root.js -var Root = __webpack_require__(28511); -// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js -var esm_extends = __webpack_require__(87462); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Head.js -var Head = __webpack_require__(32411); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/useDocusaurusContext.js -var useDocusaurusContext = __webpack_require__(6832); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/useBaseUrl.js -var useBaseUrl = __webpack_require__(51402); -// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/useThemeConfig.js -var useThemeConfig = __webpack_require__(96793); -// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/metadataUtils.js + 1 modules -var metadataUtils = __webpack_require__(44873); -// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/useAlternatePageUtils.js -var useAlternatePageUtils = __webpack_require__(13156); -// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useKeyboardNavigation.js + 1 modules -var useKeyboardNavigation = __webpack_require__(73746); -// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/searchUtils.js -var searchUtils = __webpack_require__(39105); -// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/SearchMetadata/index.js -var SearchMetadata = __webpack_require__(26145); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/SiteMetadata/index.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// TODO move to SiteMetadataDefaults or theme-common ? -// Useful for i18n/SEO -// See https://developers.google.com/search/docs/advanced/crawling/localized-versions -// See https://github.com/facebook/docusaurus/issues/3317 -function AlternateLangHeaders(){const{i18n:{defaultLocale,localeConfigs}}=(0,useDocusaurusContext["default"])();const alternatePageUtils=(0,useAlternatePageUtils/* useAlternatePageUtils */.l)();// Note: it is fine to use both "x-default" and "en" to target the same url -// See https://www.searchviu.com/en/multiple-hreflang-tags-one-url/ -return/*#__PURE__*/react.createElement(Head/* default */.Z,null,Object.entries(localeConfigs).map(([locale,{htmlLang}])=>/*#__PURE__*/react.createElement("link",{key:locale,rel:"alternate",href:alternatePageUtils.createUrl({locale,fullyQualified:true}),hrefLang:htmlLang})),/*#__PURE__*/react.createElement("link",{rel:"alternate",href:alternatePageUtils.createUrl({locale:defaultLocale,fullyQualified:true}),hrefLang:"x-default"}));}// Default canonical url inferred from current page location pathname -function useDefaultCanonicalUrl(){const{siteConfig:{url:siteUrl}}=(0,useDocusaurusContext["default"])();const{pathname}=(0,react_router/* useLocation */.TH)();return siteUrl+(0,useBaseUrl["default"])(pathname);}// TODO move to SiteMetadataDefaults or theme-common ? -function CanonicalUrlHeaders({permalink}){const{siteConfig:{url:siteUrl}}=(0,useDocusaurusContext["default"])();const defaultCanonicalUrl=useDefaultCanonicalUrl();const canonicalUrl=permalink?`${siteUrl}${permalink}`:defaultCanonicalUrl;return/*#__PURE__*/react.createElement(Head/* default */.Z,null,/*#__PURE__*/react.createElement("meta",{property:"og:url",content:canonicalUrl}),/*#__PURE__*/react.createElement("link",{rel:"canonical",href:canonicalUrl}));}function SiteMetadata(){const{i18n:{currentLocale}}=(0,useDocusaurusContext["default"])();// TODO maybe move these 2 themeConfig to siteConfig? -// These seems useful for other themes as well -const{metadata,image:defaultImage}=(0,useThemeConfig/* useThemeConfig */.L)();return/*#__PURE__*/react.createElement(react.Fragment,null,/*#__PURE__*/react.createElement(Head/* default */.Z,null,/*#__PURE__*/react.createElement("meta",{name:"twitter:card",content:"summary_large_image"}),/*#__PURE__*/react.createElement("body",{className:useKeyboardNavigation/* keyboardFocusedClassName */.h})),defaultImage&&/*#__PURE__*/react.createElement(metadataUtils/* PageMetadata */.d,{image:defaultImage}),/*#__PURE__*/react.createElement(CanonicalUrlHeaders,null),/*#__PURE__*/react.createElement(AlternateLangHeaders,null),/*#__PURE__*/react.createElement(SearchMetadata/* default */.Z,{tag:searchUtils/* DEFAULT_SEARCH_TAG */.HX,locale:currentLocale}),/*#__PURE__*/react.createElement(Head/* default */.Z,null,metadata.map((metadatum,i)=>/*#__PURE__*/react.createElement("meta",(0,esm_extends/* default */.Z)({key:i},metadatum)))));} -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/normalizeLocation.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Memoize previously normalized pathnames. -const pathnames=new Map();function normalizeLocation(location){if(pathnames.has(location.pathname)){return{...location,pathname:pathnames.get(location.pathname)};}// If the location was registered with an `.html` extension, we don't strip it -// away, or it will render to a 404 page. -const matchedRoutes=(0,react_router_config/* matchRoutes */.f)(routes/* default */.Z,location.pathname);if(matchedRoutes.some(({route})=>route.exact===true)){pathnames.set(location.pathname,location.pathname);return location;}const pathname=location.pathname.trim().replace(/(?:\/index)?\.html$/,'')||'/';pathnames.set(location.pathname,pathname);return{...location,pathname};} -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/browserContext.js -var browserContext = __webpack_require__(74058); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/docusaurusContext.js + 3 modules -var docusaurusContext = __webpack_require__(56725); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/ClientLifecyclesDispatcher.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function dispatchLifecycleAction(lifecycleAction,...args){const callbacks=client_modules.map(clientModule=>{const lifecycleFunction=clientModule.default?.[lifecycleAction]??clientModule[lifecycleAction];return lifecycleFunction?.(...args);});return()=>callbacks.forEach(cb=>cb?.());}function scrollAfterNavigation({location,previousLocation}){if(!previousLocation){return;// no-op: use native browser feature -}const samePathname=location.pathname===previousLocation.pathname;const sameHash=location.hash===previousLocation.hash;const sameSearch=location.search===previousLocation.search;// Query-string changes: do not scroll to top/hash -if(samePathname&&sameHash&&!sameSearch){return;}const{hash}=location;if(!hash){window.scrollTo(0,0);}else{const id=decodeURIComponent(hash.substring(1));const element=document.getElementById(id);element?.scrollIntoView();}}function ClientLifecyclesDispatcher({children,location,previousLocation}){(0,react.useLayoutEffect)(()=>{if(previousLocation!==location){scrollAfterNavigation({location,previousLocation});dispatchLifecycleAction('onRouteDidUpdate',{previousLocation,location});}},[previousLocation,location]);return children;}/* harmony default export */ const client_ClientLifecyclesDispatcher = (ClientLifecyclesDispatcher); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/ExecutionEnvironment.js -var ExecutionEnvironment = __webpack_require__(19901); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/PendingNavigation.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */class PendingNavigation extends react.Component{previousLocation;routeUpdateCleanupCb;constructor(props){super(props);// previousLocation doesn't affect rendering, hence not stored in state. -this.previousLocation=null;this.routeUpdateCleanupCb=ExecutionEnvironment["default"].canUseDOM?dispatchLifecycleAction('onRouteUpdate',{previousLocation:null,location:this.props.location}):()=>{};this.state={nextRouteHasLoaded:true};}// Intercept location update and still show current route until next route -// is done loading. -shouldComponentUpdate(nextProps,nextState){if(nextProps.location===this.props.location){// `nextRouteHasLoaded` is false means there's a pending route transition. -// Don't update until it's done. -return nextState.nextRouteHasLoaded;}// props.location being different means the router is trying to navigate to -// a new route. We will preload the new route. -const nextLocation=nextProps.location;// Save the location first. -this.previousLocation=this.props.location;this.setState({nextRouteHasLoaded:false});this.routeUpdateCleanupCb=dispatchLifecycleAction('onRouteUpdate',{previousLocation:this.previousLocation,location:nextLocation});// Load data while the old screen remains. Force preload instead of using -// `window.docusaurus`, because we want to avoid loading screen even when -// user is on saveData -preload(nextLocation.pathname).then(()=>{this.routeUpdateCleanupCb();this.setState({nextRouteHasLoaded:true});}).catch(e=>{console.warn(e);// If chunk loading failed, it could be because the path to a chunk -// no longer exists due to a new deployment. Force refresh the page -// instead of just not navigating. -window.location.reload();});return false;}render(){const{children,location}=this.props;// Use a controlled to trick all descendants into rendering the old -// location. -return/*#__PURE__*/react.createElement(client_ClientLifecyclesDispatcher,{previousLocation:this.previousLocation,location:location},/*#__PURE__*/react.createElement(react_router/* Route */.AW,{location:location,render:()=>children}));}}/* harmony default export */ const client_PendingNavigation = (PendingNavigation); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/BaseUrlIssueBanner/styles.module.css -var styles_module = __webpack_require__(76641); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/BaseUrlIssueBanner/index.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Double-security: critical CSS will hide the banner if CSS can load! -// __ prefix allows search crawlers (Algolia/DocSearch) to ignore anchors -// https://github.com/facebook/docusaurus/issues/8883#issuecomment-1516328368 -const BannerContainerId='__docusaurus-base-url-issue-banner-container';const BannerId='__docusaurus-base-url-issue-banner';const SuggestionContainerId='__docusaurus-base-url-issue-banner-suggestion-container';const InsertBannerWindowAttribute='__DOCUSAURUS_INSERT_BASEURL_BANNER';// It is important to not use React to render this banner -// otherwise Google would index it, even if it's hidden with some critical CSS! -// See https://github.com/facebook/docusaurus/issues/4028 -// - We can't SSR (or it would be indexed) -// - We can't CSR (as it means the baseurl is correct) -function createInlineHtmlBanner(baseUrl){return` -
-

Your Docusaurus site did not load properly.

-

A very common reason is a wrong site baseUrl configuration.

-

Current configured baseUrl = ${baseUrl} ${baseUrl==='/'?' (default value)':''}

-

We suggest trying baseUrl =

-
-`;}// Needs to work for older browsers! -function createInlineScript(baseUrl){/* language=js */return` -window['${InsertBannerWindowAttribute}'] = true; - -document.addEventListener('DOMContentLoaded', maybeInsertBanner); - -function maybeInsertBanner() { - var shouldInsert = window['${InsertBannerWindowAttribute}']; - shouldInsert && insertBanner(); -} - -function insertBanner() { - var bannerContainer = document.getElementById('${BannerContainerId}'); - if (!bannerContainer) { - return; - } - var bannerHtml = ${JSON.stringify(createInlineHtmlBanner(baseUrl))// See https://redux.js.org/recipes/server-rendering/#security-considerations -.replace(/{window[InsertBannerWindowAttribute]=false;},[]);return/*#__PURE__*/react.createElement(react.Fragment,null,!ExecutionEnvironment["default"].canUseDOM&&/*#__PURE__*/ // Safe to use `ExecutionEnvironment`, because `Head` is purely -// side-effect and doesn't affect hydration -react.createElement(Head/* default */.Z,null,/*#__PURE__*/react.createElement("script",null,createInlineScript(baseUrl))),/*#__PURE__*/react.createElement("div",{id:BannerContainerId}));}/** - * We want to help the users with a bad baseUrl configuration (very common - * error). Help message is inlined, and hidden if JS or CSS is able to load. - * - * This component only inserts the base URL banner for the homepage, to avoid - * polluting every statically rendered page. - * - * Note: it might create false positives (ie network failures): not a big deal - * - * @see https://github.com/facebook/docusaurus/pull/3621 - */function MaybeBaseUrlIssueBanner(){const{siteConfig:{baseUrl,baseUrlIssueBanner}}=(0,useDocusaurusContext["default"])();const{pathname}=(0,react_router/* useLocation */.TH)();const isHomePage=pathname===baseUrl;const enabled=baseUrlIssueBanner&&isHomePage;return enabled?/*#__PURE__*/react.createElement(BaseUrlIssueBanner,null):null;} -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/SiteMetadataDefaults.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function SiteMetadataDefaults(){const{siteConfig:{favicon,title,noIndex},i18n:{currentLocale,localeConfigs}}=(0,useDocusaurusContext["default"])();const faviconUrl=(0,useBaseUrl["default"])(favicon);const{htmlLang,direction:htmlDir}=localeConfigs[currentLocale];return/*#__PURE__*/react.createElement(Head/* default */.Z,null,/*#__PURE__*/react.createElement("html",{lang:htmlLang,dir:htmlDir}),/*#__PURE__*/react.createElement("title",null,title),/*#__PURE__*/react.createElement("meta",{property:"og:title",content:title}),/*#__PURE__*/react.createElement("meta",{name:"viewport",content:"width=device-width, initial-scale=1.0"}),noIndex&&/*#__PURE__*/react.createElement("meta",{name:"robots",content:"noindex, nofollow"}),favicon&&/*#__PURE__*/react.createElement("link",{rel:"icon",href:faviconUrl}));} -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/ErrorBoundary.js + 1 modules -var ErrorBoundary = __webpack_require__(24649); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/App.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// TODO, quick fix for CSS insertion order -// eslint-disable-next-line import/order -function App(){const routeElement=(0,react_router_config/* renderRoutes */.H)(routes/* default */.Z);const location=(0,react_router/* useLocation */.TH)();return/*#__PURE__*/react.createElement(ErrorBoundary["default"],null,/*#__PURE__*/react.createElement(docusaurusContext/* DocusaurusContextProvider */.M,null,/*#__PURE__*/react.createElement(browserContext/* BrowserContextProvider */.t,null,/*#__PURE__*/react.createElement(Root/* default */.Z,null,/*#__PURE__*/react.createElement(SiteMetadataDefaults,null),/*#__PURE__*/react.createElement(SiteMetadata,null),/*#__PURE__*/react.createElement(MaybeBaseUrlIssueBanner,null),/*#__PURE__*/react.createElement(client_PendingNavigation,{location:normalizeLocation(location)},routeElement)))));} -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/LinksCollector.js -var LinksCollector = __webpack_require__(92937); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/serverEntry.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// eslint-disable-next-line no-restricted-imports -const getCompiledSSRTemplate=lodash_default().memoize(template=>compile(template.trim(),{rmWhitespace:true}));function renderSSRTemplate(ssrTemplate,data){const compiled=getCompiledSSRTemplate(ssrTemplate);return compiled(data,config);}async function serverEntry_render(locals){try{return await doRender(locals);}catch(err){// We are not using logger in this file, because it seems to fail with some -// compilers / some polyfill methods. This is very likely a bug, but in the -// long term, when we output native ES modules in SSR, the bug will be gone. -// prettier-ignore -console.error(source_default().red(`${source_default().bold('[ERROR]')} Docusaurus server-side rendering could not render static page with path ${source_default().cyan.underline(locals.path)}.`));const isNotDefinedErrorRegex=/(?:window|document|localStorage|navigator|alert|location|buffer|self) is not defined/i;if(isNotDefinedErrorRegex.test(err.message)){// prettier-ignore -console.info(`${source_default().cyan.bold('[INFO]')} It looks like you are using code that should run on the client-side only. -To get around it, try using ${source_default().cyan('``')} (${source_default().cyan.underline('https://docusaurus.io/docs/docusaurus-core/#browseronly')}) or ${source_default().cyan('`ExecutionEnvironment`')} (${source_default().cyan.underline('https://docusaurus.io/docs/docusaurus-core/#executionenvironment')}). -It might also require to wrap your client code in ${source_default().cyan('`useEffect`')} hook and/or import a third-party library dynamically (if any).`);}throw err;}}// Renderer for static-site-generator-webpack-plugin (async rendering). -async function doRender(locals){const{routesLocation,headTags,preBodyTags,postBodyTags,onLinksCollected,onHeadTagsCollected,baseUrl,ssrTemplate,noIndex,DOCUSAURUS_VERSION}=locals;const location=routesLocation[locals.path];await preload(location);const modules=new Set();const routerContext={};const helmetContext={};const linksCollector=(0,LinksCollector/* createStatefulLinksCollector */.$P)();const appHtml=server.renderToString(/*#__PURE__*/ // @ts-expect-error: we are migrating away from react-loadable anyways -react.createElement((react_loadable_lib_default()).Capture,{report:moduleName=>modules.add(moduleName)},/*#__PURE__*/react.createElement(index_module/* HelmetProvider */.B6,{context:helmetContext},/*#__PURE__*/react.createElement(react_router/* StaticRouter */.gx,{location:location,context:routerContext},/*#__PURE__*/react.createElement(LinksCollector/* LinksCollectorProvider */.qX,{linksCollector:linksCollector},/*#__PURE__*/react.createElement(App,null))))));onLinksCollected(location,linksCollector.getCollectedLinks());const{helmet}=helmetContext;const htmlAttributes=helmet.htmlAttributes.toString();const bodyAttributes=helmet.bodyAttributes.toString();const metaStrings=[helmet.title.toString(),helmet.meta.toString(),helmet.link.toString(),helmet.script.toString()];onHeadTagsCollected(location,helmet);const metaAttributes=metaStrings.filter(Boolean);const{generatedFilesDir}=locals;const manifestPath=external_path_default().join(generatedFilesDir,'client-manifest.json');// Using readJSON seems to fail for users of some plugins, possibly because of -// the eval sandbox having a different `Buffer` instance (native one instead -// of polyfilled one) -const manifest=await lib_default().readFile(manifestPath,'utf-8').then(JSON.parse);// Get all required assets for this particular page based on client -// manifest information. -const modulesToBeLoaded=[...manifest.entrypoints,...Array.from(modules)];const bundles=(0,react_loadable_ssr_addon_v5_slorber_lib.getBundles)(manifest,modulesToBeLoaded);const stylesheets=(bundles.css??[]).map(b=>b.file);const scripts=(bundles.js??[]).map(b=>b.file);const renderedHtml=renderSSRTemplate(ssrTemplate,{appHtml,baseUrl,htmlAttributes,bodyAttributes,headTags,preBodyTags,postBodyTags,metaAttributes,scripts,stylesheets,noIndex,version:DOCUSAURUS_VERSION});try{if(process.env.SKIP_HTML_MINIFICATION==='true'){return renderedHtml;}// Minify html with https://github.com/DanielRuf/html-minifier-terser -return await (0,htmlminifier/* minify */.S)(renderedHtml,{removeComments:false,removeRedundantAttributes:true,removeEmptyAttributes:true,removeScriptTypeAttributes:true,removeStyleLinkTypeAttributes:true,useShortDoctype:true,minifyJS:true});}catch(err){// prettier-ignore -console.error(source_default().red(`${source_default().bold('[ERROR]')} Minification of page ${source_default().cyan.underline(locals.path)} failed.`));throw err;}} - -/***/ }), - -/***/ 4452: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -// ESM COMPAT FLAG -__webpack_require__.r(__webpack_exports__); - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - "useActiveDocContext": () => (/* binding */ useActiveDocContext), - "useActivePlugin": () => (/* binding */ useActivePlugin), - "useActivePluginAndVersion": () => (/* binding */ useActivePluginAndVersion), - "useActiveVersion": () => (/* binding */ useActiveVersion), - "useAllDocsData": () => (/* binding */ useAllDocsData), - "useDocVersionSuggestions": () => (/* binding */ useDocVersionSuggestions), - "useDocsData": () => (/* binding */ useDocsData), - "useLatestVersion": () => (/* binding */ useLatestVersion), - "useVersions": () => (/* binding */ useVersions) -}); - -// EXTERNAL MODULE: ./node_modules/react-router/esm/react-router.js -var react_router = __webpack_require__(16550); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/useDocusaurusContext.js -var useDocusaurusContext = __webpack_require__(6832); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/constants.js -var constants = __webpack_require__(12497); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/exports/useGlobalData.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function useGlobalData(){const{globalData}=(0,useDocusaurusContext["default"])();return globalData;}function useAllPluginInstancesData(pluginName,options={}){const globalData=useGlobalData();const pluginGlobalData=globalData[pluginName];if(!pluginGlobalData&&options.failfast){throw new Error(`Docusaurus plugin global data not found for "${pluginName}" plugin.`);}return pluginGlobalData;}function usePluginData(pluginName,pluginId=constants/* DEFAULT_PLUGIN_ID */.m,options={}){const pluginGlobalData=useAllPluginInstancesData(pluginName);const pluginInstanceGlobalData=pluginGlobalData?.[pluginId];if(!pluginInstanceGlobalData&&options.failfast){throw new Error(`Docusaurus plugin global data not found for "${pluginName}" plugin with id "${pluginId}".`);}return pluginInstanceGlobalData;} -;// CONCATENATED MODULE: ./node_modules/@docusaurus/plugin-content-docs/lib/client/docsClientUtils.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// This code is not part of the api surface, not in ./theme on purpose -// get the data of the plugin that is currently "active" -// ie the docs of that plugin are currently browsed -// it is useful to support multiple docs plugin instances -function getActivePlugin(allPluginData,pathname,options={}){const activeEntry=Object.entries(allPluginData)// Route sorting: '/android/foo' should match '/android' instead of '/' -.sort((a,b)=>b[1].path.localeCompare(a[1].path)).find(([,pluginData])=>!!(0,react_router/* matchPath */.LX)(pathname,{path:pluginData.path,exact:false,strict:false}));const activePlugin=activeEntry?{pluginId:activeEntry[0],pluginData:activeEntry[1]}:undefined;if(!activePlugin&&options.failfast){throw new Error(`Can't find active docs plugin for "${pathname}" pathname, while it was expected to be found. Maybe you tried to use a docs feature that can only be used on a docs-related page? Existing docs plugin paths are: ${Object.values(allPluginData).map(plugin=>plugin.path).join(', ')}`);}return activePlugin;}const getLatestVersion=data=>data.versions.find(version=>version.isLast);function getActiveVersion(data,pathname){const lastVersion=getLatestVersion(data);// Last version is a route like /docs/*, -// we need to match it last or it would match /docs/version-1.0/* as well -const orderedVersionsMetadata=[...data.versions.filter(version=>version!==lastVersion),lastVersion];return orderedVersionsMetadata.find(version=>!!(0,react_router/* matchPath */.LX)(pathname,{path:version.path,exact:false,strict:false}));}function getActiveDocContext(data,pathname){const activeVersion=getActiveVersion(data,pathname);const activeDoc=activeVersion?.docs.find(doc=>!!(0,react_router/* matchPath */.LX)(pathname,{path:doc.path,exact:true,strict:false}));function getAlternateVersionDocs(docId){const result={};data.versions.forEach(version=>{version.docs.forEach(doc=>{if(doc.id===docId){result[version.name]=doc;}});});return result;}const alternateVersionDocs=activeDoc?getAlternateVersionDocs(activeDoc.id):{};return{activeVersion,activeDoc,alternateDocVersions:alternateVersionDocs};}function getDocVersionSuggestions(data,pathname){const latestVersion=getLatestVersion(data);const activeDocContext=getActiveDocContext(data,pathname);const latestDocSuggestion=activeDocContext.alternateDocVersions[latestVersion.name];return{latestDocSuggestion,latestVersionSuggestion:latestVersion};} -;// CONCATENATED MODULE: ./node_modules/@docusaurus/plugin-content-docs/lib/client/index.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */// Important to use a constant object to avoid React useEffect executions etc. -// see https://github.com/facebook/docusaurus/issues/5089 -const StableEmptyObject={};// In blog-only mode, docs hooks are still used by the theme. We need a fail- -// safe fallback when the docs plugin is not in use -const useAllDocsData=()=>useAllPluginInstancesData('docusaurus-plugin-content-docs')??StableEmptyObject;const useDocsData=pluginId=>usePluginData('docusaurus-plugin-content-docs',pluginId,{failfast:true});// TODO this feature should be provided by docusaurus core -function useActivePlugin(options={}){const data=useAllDocsData();const{pathname}=(0,react_router/* useLocation */.TH)();return getActivePlugin(data,pathname,options);}function useActivePluginAndVersion(options={}){const activePlugin=useActivePlugin(options);const{pathname}=(0,react_router/* useLocation */.TH)();if(!activePlugin){return undefined;}const activeVersion=getActiveVersion(activePlugin.pluginData,pathname);return{activePlugin,activeVersion};}/** Versions are returned ordered (most recent first). */function useVersions(pluginId){const data=useDocsData(pluginId);return data.versions;}function useLatestVersion(pluginId){const data=useDocsData(pluginId);return getLatestVersion(data);}/** - * Returns `undefined` on doc-unrelated pages, because there's no version - * currently considered as active. - */function useActiveVersion(pluginId){const data=useDocsData(pluginId);const{pathname}=(0,react_router/* useLocation */.TH)();return getActiveVersion(data,pathname);}function useActiveDocContext(pluginId){const data=useDocsData(pluginId);const{pathname}=(0,react_router/* useLocation */.TH)();return getActiveDocContext(data,pathname);}/** - * Useful to say "hey, you are not on the latest docs version, please switch" - */function useDocVersionSuggestions(pluginId){const data=useDocsData(pluginId);const{pathname}=(0,react_router/* useLocation */.TH)();return getDocVersionSuggestions(data,pathname);} - -/***/ }), - -/***/ 26126: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var nprogress__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74865); -/* harmony import */ var nprogress__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(nprogress__WEBPACK_IMPORTED_MODULE_0__); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */nprogress__WEBPACK_IMPORTED_MODULE_0___default().configure({showSpinner:false});const delay=200;const clientModule={onRouteUpdate({location,previousLocation}){if(previousLocation&&location.pathname!==previousLocation.pathname){const progressBarTimeout=window.setTimeout(()=>{nprogress__WEBPACK_IMPORTED_MODULE_0___default().start();},delay);return()=>window.clearTimeout(progressBarTimeout);}return undefined;},onRouteDidUpdate(){nprogress__WEBPACK_IMPORTED_MODULE_0___default().done();}};/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clientModule); - -/***/ }), - -/***/ 25529: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -// ESM COMPAT FLAG -__webpack_require__.r(__webpack_exports__); - -// EXTERNAL MODULE: ./node_modules/prism-react-renderer/prism/index.js -var prism = __webpack_require__(87410); -// EXTERNAL MODULE: ./.docusaurus/docusaurus.config.mjs -var docusaurus_config = __webpack_require__(36809); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/prism-include-languages.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function prismIncludeLanguages(PrismObject){const{themeConfig:{prism}}=docusaurus_config/* default */.Z;const{additionalLanguages}=prism;// Prism components work on the Prism instance on the window, while prism- -// react-renderer uses its own Prism instance. We temporarily mount the -// instance onto window, import components to enhance it, then remove it to -// avoid polluting global namespace. -// You can mutate PrismObject: registering plugins, deleting languages... As -// long as you don't re-assign it -globalThis.Prism=PrismObject;additionalLanguages.forEach(lang=>{// eslint-disable-next-line global-require, import/no-dynamic-require -__webpack_require__(6726)(`./prism-${lang}`);});delete globalThis.Prism;} -;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/prism-include-languages.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */prismIncludeLanguages(prism/* default */.Z); - -/***/ }), - -/***/ 65568: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ CodeBlockContainer) -/* harmony export */ }); -/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(87462); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(86010); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(99401); -/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(18015); -/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(96066); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(51633); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_1__); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function CodeBlockContainer({as:As,...props}){const prismTheme=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .usePrismTheme */ .p)();const prismCssVariables=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__/* .getPrismCssVariables */ .QC)(prismTheme);return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(As// Polymorphic components are hard to type, without `oneOf` generics -,(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)({},props,{style:prismCssVariables,className:(0,clsx__WEBPACK_IMPORTED_MODULE_5__["default"])(props.className,(_styles_module_css__WEBPACK_IMPORTED_MODULE_1___default().codeBlockContainer),_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_6__/* .ThemeClassNames.common.codeBlock */ .k.common.codeBlock)}));} - -/***/ }), - -/***/ 39426: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (/* binding */ CodeBlockLine) -/* harmony export */ }); -/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(87462); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294); -/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86010); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(85576); -/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_1__); -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function CodeBlockLine({line,classNames,showLineNumbers,getLineProps,getTokenProps}){if(line.length===1&&line[0].content==='\n'){line[0].content='';}const lineProps=getLineProps({line,className:(0,clsx__WEBPACK_IMPORTED_MODULE_2__["default"])(classNames,showLineNumbers&&(_styles_module_css__WEBPACK_IMPORTED_MODULE_1___default().codeLine))});const lineTokens=line.map((token,key)=>/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span",(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)({key:key},getTokenProps({token,key}))));return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span",lineProps,showLineNumbers?/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,null,/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_1___default().codeLineNumber)}),/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("span",{className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_1___default().codeLineContent)},lineTokens)):lineTokens,/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("br",null));} - -/***/ }), - -/***/ 47857: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -// ESM COMPAT FLAG -__webpack_require__.r(__webpack_exports__); - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - "default": () => (/* binding */ WordWrapButton) -}); - -// EXTERNAL MODULE: ./node_modules/react/index.js -var react = __webpack_require__(67294); -// EXTERNAL MODULE: ./node_modules/clsx/dist/clsx.m.js -var clsx_m = __webpack_require__(86010); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Translate.js + 1 modules -var Translate = __webpack_require__(11614); -// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js -var esm_extends = __webpack_require__(87462); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Icon/WordWrap/index.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function IconWordWrap(props){return/*#__PURE__*/react.createElement("svg",(0,esm_extends/* default */.Z)({viewBox:"0 0 24 24"},props),/*#__PURE__*/react.createElement("path",{fill:"currentColor",d:"M4 19h6v-2H4v2zM20 5H4v2h16V5zm-3 6H4v2h13.25c1.1 0 2 .9 2 2s-.9 2-2 2H15v-2l-3 3l3 3v-2h2c2.21 0 4-1.79 4-4s-1.79-4-4-4z"}));} -// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/CodeBlock/WordWrapButton/styles.module.css -var styles_module = __webpack_require__(65647); -var styles_module_default = /*#__PURE__*/__webpack_require__.n(styles_module); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/CodeBlock/WordWrapButton/index.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */function WordWrapButton({className,onClick,isEnabled}){const title=(0,Translate.translate)({id:'theme.CodeBlock.wordWrapToggle',message:'Toggle word wrap',description:'The title attribute for toggle word wrapping button of code block lines'});return/*#__PURE__*/react.createElement("button",{type:"button",onClick:onClick,className:(0,clsx_m["default"])('clean-btn',className,isEnabled&&(styles_module_default()).wordWrapButtonEnabled),"aria-label":title,title:title},/*#__PURE__*/react.createElement(IconWordWrap,{className:(styles_module_default()).wordWrapButtonIcon,"aria-hidden":"true"}));} - -/***/ }), - -/***/ 69689: -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -// ESM COMPAT FLAG -__webpack_require__.r(__webpack_exports__); - -// EXPORTS -__webpack_require__.d(__webpack_exports__, { - "default": () => (/* binding */ CodeBlock) -}); - -// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js -var esm_extends = __webpack_require__(87462); -// EXTERNAL MODULE: ./node_modules/react/index.js -var react = __webpack_require__(67294); -// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/useIsBrowser.js -var useIsBrowser = __webpack_require__(5730); -// EXTERNAL MODULE: ./node_modules/clsx/dist/clsx.m.js -var clsx_m = __webpack_require__(86010); -// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/CodeBlock/Container/index.js -var Container = __webpack_require__(79896); -// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/CodeBlock/Content/styles.module.css -var styles_module = __webpack_require__(9130); -var styles_module_default = /*#__PURE__*/__webpack_require__.n(styles_module); -;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/CodeBlock/Content/Element.js -/** - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - *///
 tags in markdown map to CodeBlocks. They may contain JSX children. When
-// the children is not a simple string, we just return a styled block without
-// actually highlighting.
-function CodeBlockJSX({children,className}){return/*#__PURE__*/react.createElement(Container["default"],{as:"pre",tabIndex:0,className:(0,clsx_m["default"])((styles_module_default()).codeBlockStandalone,'thin-scrollbar',className)},/*#__PURE__*/react.createElement("code",{className:(styles_module_default()).codeBlockLines},children));}
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/CodeBlock/Content/String.js
-var Content_String = __webpack_require__(75962);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/CodeBlock/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * Best attempt to make the children a plain string so it is copyable. If there
- * are react elements, we will not be able to copy the content, and it will
- * return `children` as-is; otherwise, it concatenates the string children
- * together.
- */function maybeStringifyChildren(children){if(react.Children.toArray(children).some(el=>/*#__PURE__*/(0,react.isValidElement)(el))){return children;}// The children is now guaranteed to be one/more plain strings
-return Array.isArray(children)?children.join(''):children;}function CodeBlock({children:rawChildren,...props}){// The Prism theme on SSR is always the default theme but the site theme can
-// be in a different mode. React hydration doesn't update DOM styles that come
-// from SSR. Hence force a re-render after mounting to apply the current
-// relevant styles.
-const isBrowser=(0,useIsBrowser["default"])();const children=maybeStringifyChildren(rawChildren);const CodeBlockComp=typeof children==='string'?Content_String/* default */.Z:CodeBlockJSX;return/*#__PURE__*/react.createElement(CodeBlockComp,(0,esm_extends/* default */.Z)({key:String(isBrowser)},props),children);}
-
-/***/ }),
-
-/***/ 45237:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ DocItemFooter)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/clsx/dist/clsx.m.js
-var clsx_m = __webpack_require__(86010);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/ThemeClassNames.js
-var ThemeClassNames = __webpack_require__(18015);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/doc.js
-var doc = __webpack_require__(2791);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Translate.js + 1 modules
-var Translate = __webpack_require__(11614);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/LastUpdated/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function LastUpdatedAtDate({lastUpdatedAt,formattedLastUpdatedAt}){return/*#__PURE__*/react.createElement(Translate["default"],{id:"theme.lastUpdated.atDate",description:"The words used to describe on which date a page has been last updated",values:{date:/*#__PURE__*/react.createElement("b",null,/*#__PURE__*/react.createElement("time",{dateTime:new Date(lastUpdatedAt*1000).toISOString()},formattedLastUpdatedAt))}},' on {date}');}function LastUpdatedByUser({lastUpdatedBy}){return/*#__PURE__*/react.createElement(Translate["default"],{id:"theme.lastUpdated.byUser",description:"The words used to describe by who the page has been last updated",values:{user:/*#__PURE__*/react.createElement("b",null,lastUpdatedBy)}},' by {user}');}function LastUpdated({lastUpdatedAt,formattedLastUpdatedAt,lastUpdatedBy}){return/*#__PURE__*/react.createElement("span",{className:ThemeClassNames/* ThemeClassNames.common.lastUpdated */.k.common.lastUpdated},/*#__PURE__*/react.createElement(Translate["default"],{id:"theme.lastUpdated.lastUpdatedAtBy",description:"The sentence used to display when a page has been last updated, and by who",values:{atDate:lastUpdatedAt&&formattedLastUpdatedAt?/*#__PURE__*/react.createElement(LastUpdatedAtDate,{lastUpdatedAt:lastUpdatedAt,formattedLastUpdatedAt:formattedLastUpdatedAt}):'',byUser:lastUpdatedBy?/*#__PURE__*/react.createElement(LastUpdatedByUser,{lastUpdatedBy:lastUpdatedBy}):''}},'Last updated{atDate}{byUser}'), false&&/*#__PURE__*/0);}
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/EditThisPage/index.js
-var EditThisPage = __webpack_require__(45039);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/TagsListInline/index.js
-var TagsListInline = __webpack_require__(18189);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocItem/Footer/styles.module.css
-var styles_module = __webpack_require__(44856);
-var styles_module_default = /*#__PURE__*/__webpack_require__.n(styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocItem/Footer/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function TagsRow(props){return/*#__PURE__*/react.createElement("div",{className:(0,clsx_m["default"])(ThemeClassNames/* ThemeClassNames.docs.docFooterTagsRow */.k.docs.docFooterTagsRow,'row margin-bottom--sm')},/*#__PURE__*/react.createElement("div",{className:"col"},/*#__PURE__*/react.createElement(TagsListInline/* default */.Z,props)));}function EditMetaRow({editUrl,lastUpdatedAt,lastUpdatedBy,formattedLastUpdatedAt}){return/*#__PURE__*/react.createElement("div",{className:(0,clsx_m["default"])(ThemeClassNames/* ThemeClassNames.docs.docFooterEditMetaRow */.k.docs.docFooterEditMetaRow,'row')},/*#__PURE__*/react.createElement("div",{className:"col"},editUrl&&/*#__PURE__*/react.createElement(EditThisPage/* default */.Z,{editUrl:editUrl})),/*#__PURE__*/react.createElement("div",{className:(0,clsx_m["default"])('col',(styles_module_default()).lastUpdated)},(lastUpdatedAt||lastUpdatedBy)&&/*#__PURE__*/react.createElement(LastUpdated,{lastUpdatedAt:lastUpdatedAt,formattedLastUpdatedAt:formattedLastUpdatedAt,lastUpdatedBy:lastUpdatedBy})));}function DocItemFooter(){const{metadata}=(0,doc/* useDoc */.k)();const{editUrl,lastUpdatedAt,formattedLastUpdatedAt,lastUpdatedBy,tags}=metadata;const canDisplayTagsRow=tags.length>0;const canDisplayEditMetaRow=!!(editUrl||lastUpdatedAt||lastUpdatedBy);const canDisplayFooter=canDisplayTagsRow||canDisplayEditMetaRow;if(!canDisplayFooter){return null;}return/*#__PURE__*/react.createElement("footer",{className:(0,clsx_m["default"])(ThemeClassNames/* ThemeClassNames.docs.docFooter */.k.docs.docFooter,'docusaurus-mt-lg')},canDisplayTagsRow&&/*#__PURE__*/react.createElement(TagsRow,{tags:tags}),canDisplayEditMetaRow&&/*#__PURE__*/react.createElement(EditMetaRow,{editUrl:editUrl,lastUpdatedAt:lastUpdatedAt,lastUpdatedBy:lastUpdatedBy,formattedLastUpdatedAt:formattedLastUpdatedAt}));}
-
-/***/ }),
-
-/***/ 80900:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ DocItemMetadata)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(44873);
-/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(2791);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DocItemMetadata(){const{metadata,frontMatter,assets}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_1__/* .useDoc */ .k)();return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_2__/* .PageMetadata */ .d,{title:metadata.title,description:metadata.description,keywords:frontMatter.keywords,image:assets.image??frontMatter.image});}
-
-/***/ }),
-
-/***/ 4316:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ DocItemPaginator)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/doc.js
-var doc = __webpack_require__(2791);
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Translate.js + 1 modules
-var Translate = __webpack_require__(11614);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/PaginatorNavLink/index.js
-var PaginatorNavLink = __webpack_require__(79255);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocPaginator/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DocPaginator(props){const{previous,next}=props;return/*#__PURE__*/react.createElement("nav",{className:"pagination-nav docusaurus-mt-lg","aria-label":(0,Translate.translate)({id:'theme.docs.paginator.navAriaLabel',message:'Docs pages',description:'The ARIA label for the docs pagination'})},previous&&/*#__PURE__*/react.createElement(PaginatorNavLink/* default */.Z,(0,esm_extends/* default */.Z)({},previous,{subLabel:/*#__PURE__*/react.createElement(Translate["default"],{id:"theme.docs.paginator.previous",description:"The label used to navigate to the previous doc"},"Previous")})),next&&/*#__PURE__*/react.createElement(PaginatorNavLink/* default */.Z,(0,esm_extends/* default */.Z)({},next,{subLabel:/*#__PURE__*/react.createElement(Translate["default"],{id:"theme.docs.paginator.next",description:"The label used to navigate to the next doc"},"Next"),isNext:true})));}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocItem/Paginator/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * This extra component is needed, because  should remain generic.
- * DocPaginator is used in non-docs contexts too: generated-index pages...
- */function DocItemPaginator(){const{metadata}=(0,doc/* useDoc */.k)();return/*#__PURE__*/react.createElement(DocPaginator,{previous:metadata.previous,next:metadata.next});}
-
-/***/ }),
-
-/***/ 80578:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ DocItemTOCDesktop)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(18015);
-/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(2791);
-/* harmony import */ var _theme_TOC__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(88587);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DocItemTOCDesktop(){const{toc,frontMatter}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__/* .useDoc */ .k)();return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_theme_TOC__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,{toc:toc,minHeadingLevel:frontMatter.toc_min_heading_level,maxHeadingLevel:frontMatter.toc_max_heading_level,className:_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .ThemeClassNames.docs.docTocDesktop */ .k.docs.docTocDesktop});}
-
-/***/ }),
-
-/***/ 15854:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ DocItemTOCMobile)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(86010);
-/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(18015);
-/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(2791);
-/* harmony import */ var _theme_TOCCollapsible__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(80466);
-/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(67192);
-/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_2__);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DocItemTOCMobile(){const{toc,frontMatter}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_3__/* .useDoc */ .k)();return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_theme_TOCCollapsible__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,{toc:toc,minHeadingLevel:frontMatter.toc_min_heading_level,maxHeadingLevel:frontMatter.toc_max_heading_level,className:(0,clsx__WEBPACK_IMPORTED_MODULE_4__["default"])(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__/* .ThemeClassNames.docs.docTocMobile */ .k.docs.docTocMobile,(_styles_module_css__WEBPACK_IMPORTED_MODULE_2___default().tocMobile))});}
-
-/***/ }),
-
-/***/ 89849:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ DocPage)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/clsx/dist/clsx.m.js
-var clsx_m = __webpack_require__(86010);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/metadataUtils.js + 1 modules
-var metadataUtils = __webpack_require__(44873);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/ThemeClassNames.js
-var ThemeClassNames = __webpack_require__(18015);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/searchUtils.js
-var searchUtils = __webpack_require__(39105);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/docsUtils.js
-var docsUtils = __webpack_require__(85919);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/docsVersion.js
-var docsVersion = __webpack_require__(6141);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/docsSidebar.js
-var docsSidebar = __webpack_require__(50003);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Layout/index.js + 7 modules
-var Layout = __webpack_require__(64963);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Translate.js + 1 modules
-var Translate = __webpack_require__(11614);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useBackToTopButton.js
-var useBackToTopButton = __webpack_require__(20883);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/BackToTopButton/styles.module.css
-var styles_module = __webpack_require__(9783);
-var styles_module_default = /*#__PURE__*/__webpack_require__.n(styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/BackToTopButton/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function BackToTopButton(){const{shown,scrollToTop}=(0,useBackToTopButton/* useBackToTopButton */.a)({threshold:300});return/*#__PURE__*/react.createElement("button",{"aria-label":(0,Translate.translate)({id:'theme.BackToTopButton.buttonAriaLabel',message:'Scroll back to top',description:'The ARIA label for the back to top button'}),className:(0,clsx_m["default"])('clean-btn',ThemeClassNames/* ThemeClassNames.common.backToTopButton */.k.common.backToTopButton,(styles_module_default()).backToTopButton,shown&&(styles_module_default()).backToTopButtonShow),type:"button",onClick:scrollToTop});}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/accessibilityUtils.js
-var accessibilityUtils = __webpack_require__(39657);
-// EXTERNAL MODULE: ./node_modules/react-router/esm/react-router.js
-var react_router = __webpack_require__(16550);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/DocSidebar/index.js
-var DocSidebar = __webpack_require__(80668);
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Icon/Arrow/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function IconArrow(props){return/*#__PURE__*/react.createElement("svg",(0,esm_extends/* default */.Z)({width:"20",height:"20","aria-hidden":"true"},props),/*#__PURE__*/react.createElement("g",{fill:"#7a7a7a"},/*#__PURE__*/react.createElement("path",{d:"M9.992 10.023c0 .2-.062.399-.172.547l-4.996 7.492a.982.982 0 01-.828.454H1c-.55 0-1-.453-1-1 0-.2.059-.403.168-.551l4.629-6.942L.168 3.078A.939.939 0 010 2.528c0-.548.45-.997 1-.997h2.996c.352 0 .649.18.828.45L9.82 9.472c.11.148.172.347.172.55zm0 0"}),/*#__PURE__*/react.createElement("path",{d:"M19.98 10.023c0 .2-.058.399-.168.547l-4.996 7.492a.987.987 0 01-.828.454h-3c-.547 0-.996-.453-.996-1 0-.2.059-.403.168-.551l4.625-6.942-4.625-6.945a.939.939 0 01-.168-.55 1 1 0 01.996-.997h3c.348 0 .649.18.828.45l4.996 7.492c.11.148.168.347.168.55zm0 0"})));}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocPage/Layout/Sidebar/ExpandButton/styles.module.css
-var ExpandButton_styles_module = __webpack_require__(70818);
-var ExpandButton_styles_module_default = /*#__PURE__*/__webpack_require__.n(ExpandButton_styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocPage/Layout/Sidebar/ExpandButton/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DocPageLayoutSidebarExpandButton({toggleSidebar}){return/*#__PURE__*/react.createElement("div",{className:(ExpandButton_styles_module_default()).expandButton,title:(0,Translate.translate)({id:'theme.docs.sidebar.expandButtonTitle',message:'Expand sidebar',description:'The ARIA label and title attribute for expand button of doc sidebar'}),"aria-label":(0,Translate.translate)({id:'theme.docs.sidebar.expandButtonAriaLabel',message:'Expand sidebar',description:'The ARIA label and title attribute for expand button of doc sidebar'}),tabIndex:0,role:"button",onKeyDown:toggleSidebar,onClick:toggleSidebar},/*#__PURE__*/react.createElement(IconArrow,{className:(ExpandButton_styles_module_default()).expandButtonIcon}));}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocPage/Layout/Sidebar/styles.module.css
-var Sidebar_styles_module = __webpack_require__(79141);
-var Sidebar_styles_module_default = /*#__PURE__*/__webpack_require__.n(Sidebar_styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocPage/Layout/Sidebar/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// Reset sidebar state when sidebar changes
-// Use React key to unmount/remount the children
-// See https://github.com/facebook/docusaurus/issues/3414
-function ResetOnSidebarChange({children}){const sidebar=(0,docsSidebar/* useDocsSidebar */.V)();return/*#__PURE__*/react.createElement(react.Fragment,{key:sidebar?.name??'noSidebar'},children);}function DocPageLayoutSidebar({sidebar,hiddenSidebarContainer,setHiddenSidebarContainer}){const{pathname}=(0,react_router/* useLocation */.TH)();const[hiddenSidebar,setHiddenSidebar]=(0,react.useState)(false);const toggleSidebar=(0,react.useCallback)(()=>{if(hiddenSidebar){setHiddenSidebar(false);}// onTransitionEnd won't fire when sidebar animation is disabled
-// fixes https://github.com/facebook/docusaurus/issues/8918
-if(!hiddenSidebar&&(0,accessibilityUtils/* prefersReducedMotion */.n)()){setHiddenSidebar(true);}setHiddenSidebarContainer(value=>!value);},[setHiddenSidebarContainer,hiddenSidebar]);return/*#__PURE__*/react.createElement("aside",{className:(0,clsx_m["default"])(ThemeClassNames/* ThemeClassNames.docs.docSidebarContainer */.k.docs.docSidebarContainer,(Sidebar_styles_module_default()).docSidebarContainer,hiddenSidebarContainer&&(Sidebar_styles_module_default()).docSidebarContainerHidden),onTransitionEnd:e=>{if(!e.currentTarget.classList.contains((Sidebar_styles_module_default()).docSidebarContainer)){return;}if(hiddenSidebarContainer){setHiddenSidebar(true);}}},/*#__PURE__*/react.createElement(ResetOnSidebarChange,null,/*#__PURE__*/react.createElement("div",{className:(0,clsx_m["default"])((Sidebar_styles_module_default()).sidebarViewport,hiddenSidebar&&(Sidebar_styles_module_default()).sidebarViewportHidden)},/*#__PURE__*/react.createElement(DocSidebar/* default */.Z,{sidebar:sidebar,path:pathname,onCollapse:toggleSidebar,isHidden:hiddenSidebar}),hiddenSidebar&&/*#__PURE__*/react.createElement(DocPageLayoutSidebarExpandButton,{toggleSidebar:toggleSidebar}))));}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocPage/Layout/Main/styles.module.css
-var Main_styles_module = __webpack_require__(40296);
-var Main_styles_module_default = /*#__PURE__*/__webpack_require__.n(Main_styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocPage/Layout/Main/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DocPageLayoutMain({hiddenSidebarContainer,children}){const sidebar=(0,docsSidebar/* useDocsSidebar */.V)();return/*#__PURE__*/react.createElement("main",{className:(0,clsx_m["default"])((Main_styles_module_default()).docMainContainer,(hiddenSidebarContainer||!sidebar)&&(Main_styles_module_default()).docMainContainerEnhanced)},/*#__PURE__*/react.createElement("div",{className:(0,clsx_m["default"])('container padding-top--md padding-bottom--lg',(Main_styles_module_default()).docItemWrapper,hiddenSidebarContainer&&(Main_styles_module_default()).docItemWrapperEnhanced)},children));}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocPage/Layout/styles.module.css
-var Layout_styles_module = __webpack_require__(57212);
-var Layout_styles_module_default = /*#__PURE__*/__webpack_require__.n(Layout_styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocPage/Layout/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DocPageLayout({children}){const sidebar=(0,docsSidebar/* useDocsSidebar */.V)();const[hiddenSidebarContainer,setHiddenSidebarContainer]=(0,react.useState)(false);return/*#__PURE__*/react.createElement(Layout["default"],{wrapperClassName:(Layout_styles_module_default()).docsWrapper},/*#__PURE__*/react.createElement(BackToTopButton,null),/*#__PURE__*/react.createElement("div",{className:(Layout_styles_module_default()).docPage},sidebar&&/*#__PURE__*/react.createElement(DocPageLayoutSidebar,{sidebar:sidebar.items,hiddenSidebarContainer:hiddenSidebarContainer,setHiddenSidebarContainer:setHiddenSidebarContainer}),/*#__PURE__*/react.createElement(DocPageLayoutMain,{hiddenSidebarContainer:hiddenSidebarContainer},children)));}
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/NotFound/index.js
-var NotFound = __webpack_require__(89481);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/SearchMetadata/index.js
-var SearchMetadata = __webpack_require__(26145);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocPage/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DocPageMetadata(props){const{versionMetadata}=props;return/*#__PURE__*/react.createElement(react.Fragment,null,/*#__PURE__*/react.createElement(SearchMetadata/* default */.Z,{version:versionMetadata.version,tag:(0,searchUtils/* docVersionSearchTag */.os)(versionMetadata.pluginId,versionMetadata.version)}),/*#__PURE__*/react.createElement(metadataUtils/* PageMetadata */.d,null,versionMetadata.noIndex&&/*#__PURE__*/react.createElement("meta",{name:"robots",content:"noindex, nofollow"})));}function DocPage(props){const{versionMetadata}=props;const currentDocRouteMetadata=(0,docsUtils/* useDocRouteMetadata */.hI)(props);if(!currentDocRouteMetadata){return/*#__PURE__*/react.createElement(NotFound["default"],null);}const{docElement,sidebarName,sidebarItems}=currentDocRouteMetadata;return/*#__PURE__*/react.createElement(react.Fragment,null,/*#__PURE__*/react.createElement(DocPageMetadata,props),/*#__PURE__*/react.createElement(metadataUtils/* HtmlClassNameProvider */.FG,{className:(0,clsx_m["default"])(// TODO: it should be removed from here
-ThemeClassNames/* ThemeClassNames.wrapper.docsPages */.k.wrapper.docsPages,ThemeClassNames/* ThemeClassNames.page.docsDocPage */.k.page.docsDocPage,props.versionMetadata.className)},/*#__PURE__*/react.createElement(docsVersion/* DocsVersionProvider */.q,{version:versionMetadata},/*#__PURE__*/react.createElement(docsSidebar/* DocsSidebarProvider */.b,{name:sidebarName,items:sidebarItems},/*#__PURE__*/react.createElement(DocPageLayout,null,docElement)))));}
-
-/***/ }),
-
-/***/ 54677:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(86010);
-/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(18015);
-/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(82306);
-/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(35022);
-/* harmony import */ var _theme_DocSidebarItems__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(45709);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// eslint-disable-next-line react/function-component-definition
-const DocSidebarMobileSecondaryMenu=({sidebar,path})=>{const mobileSidebar=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_2__/* .useNavbarMobileSidebar */ .e)();return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("ul",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__/* .ThemeClassNames.docs.docSidebarMenu */ .k.docs.docSidebarMenu,'menu__list')},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_theme_DocSidebarItems__WEBPACK_IMPORTED_MODULE_1__["default"],{items:sidebar,activePath:path,onItemClick:item=>{// Mobile sidebar should only be closed if the category has a link
-if(item.type==='category'&&item.href){mobileSidebar.toggle();}if(item.type==='link'){mobileSidebar.toggle();}},level:1}));};function DocSidebarMobile(props){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__/* .NavbarSecondaryMenuFiller */ .Zo,{component:DocSidebarMobileSecondaryMenu,props:props});}/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.memo(DocSidebarMobile));
-
-/***/ }),
-
-/***/ 45709:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ theme_DocSidebarItems)
-});
-
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/docSidebarItemsExpandedState.js
-var docSidebarItemsExpandedState = __webpack_require__(55132);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/DocSidebarItem/Category/index.js
-var Category = __webpack_require__(33387);
-// EXTERNAL MODULE: ./node_modules/clsx/dist/clsx.m.js
-var clsx_m = __webpack_require__(86010);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/ThemeClassNames.js
-var ThemeClassNames = __webpack_require__(18015);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/docsUtils.js
-var docsUtils = __webpack_require__(85919);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Link.js + 1 modules
-var Link = __webpack_require__(89562);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/isInternalUrl.js
-var isInternalUrl = __webpack_require__(71699);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Icon/ExternalLink/index.js
-var ExternalLink = __webpack_require__(84567);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocSidebarItem/Link/styles.module.css
-var styles_module = __webpack_require__(86014);
-var styles_module_default = /*#__PURE__*/__webpack_require__.n(styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocSidebarItem/Link/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DocSidebarItemLink({item,onItemClick,activePath,level,index,...props}){const{href,label,className,autoAddBaseUrl}=item;const isActive=(0,docsUtils/* isActiveSidebarItem */._F)(item,activePath);const isInternalLink=(0,isInternalUrl["default"])(href);return/*#__PURE__*/react.createElement("li",{className:(0,clsx_m["default"])(ThemeClassNames/* ThemeClassNames.docs.docSidebarItemLink */.k.docs.docSidebarItemLink,ThemeClassNames/* ThemeClassNames.docs.docSidebarItemLinkLevel */.k.docs.docSidebarItemLinkLevel(level),'menu__list-item',className),key:label},/*#__PURE__*/react.createElement(Link["default"],(0,esm_extends/* default */.Z)({className:(0,clsx_m["default"])('menu__link',!isInternalLink&&(styles_module_default()).menuExternalLink,{'menu__link--active':isActive}),autoAddBaseUrl:autoAddBaseUrl,"aria-current":isActive?'page':undefined,to:href},isInternalLink&&{onClick:onItemClick?()=>onItemClick(item):undefined},props),label,!isInternalLink&&/*#__PURE__*/react.createElement(ExternalLink/* default */.Z,null)));}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocSidebarItem/Html/styles.module.css
-var Html_styles_module = __webpack_require__(9171);
-var Html_styles_module_default = /*#__PURE__*/__webpack_require__.n(Html_styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocSidebarItem/Html/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DocSidebarItemHtml({item,level,index}){const{value,defaultStyle,className}=item;return/*#__PURE__*/react.createElement("li",{className:(0,clsx_m["default"])(ThemeClassNames/* ThemeClassNames.docs.docSidebarItemLink */.k.docs.docSidebarItemLink,ThemeClassNames/* ThemeClassNames.docs.docSidebarItemLinkLevel */.k.docs.docSidebarItemLinkLevel(level),defaultStyle&&[(Html_styles_module_default()).menuHtmlItem,'menu__list-item'],className),key:index// eslint-disable-next-line react/no-danger
-,dangerouslySetInnerHTML:{__html:value}});}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocSidebarItem/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DocSidebarItem({item,...props}){switch(item.type){case'category':return/*#__PURE__*/react.createElement(Category/* default */.Z,(0,esm_extends/* default */.Z)({item:item},props));case'html':return/*#__PURE__*/react.createElement(DocSidebarItemHtml,(0,esm_extends/* default */.Z)({item:item},props));case'link':default:return/*#__PURE__*/react.createElement(DocSidebarItemLink,(0,esm_extends/* default */.Z)({item:item},props));}}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/DocSidebarItems/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// TODO this item should probably not receive the "activePath" props
-// TODO this triggers whole sidebar re-renders on navigation
-function DocSidebarItems({items,...props}){return/*#__PURE__*/react.createElement(docSidebarItemsExpandedState/* DocSidebarItemsExpandedStateProvider */.D,null,items.map((item,index)=>/*#__PURE__*/react.createElement(DocSidebarItem,(0,esm_extends/* default */.Z)({key:index,item:item,index:index},props))));}// Optimize sidebar at each "level"
-/* harmony default export */ const theme_DocSidebarItems = (/*#__PURE__*/(0,react.memo)(DocSidebarItems));
-
-/***/ }),
-
-/***/ 18554:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ DocVersionBanner)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(86010);
-/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(6832);
-/* harmony import */ var _docusaurus_Link__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(89562);
-/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(11614);
-/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(4452);
-/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(18015);
-/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(4049);
-/* harmony import */ var _docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(6141);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function UnreleasedVersionLabel({siteTitle,versionMetadata}){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__["default"],{id:"theme.docs.versions.unreleasedVersionLabel",description:"The label used to tell the user that he's browsing an unreleased doc version",values:{siteTitle,versionLabel:/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("b",null,versionMetadata.label)}},'This is unreleased documentation for {siteTitle} {versionLabel} version.');}function UnmaintainedVersionLabel({siteTitle,versionMetadata}){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__["default"],{id:"theme.docs.versions.unmaintainedVersionLabel",description:"The label used to tell the user that he's browsing an unmaintained doc version",values:{siteTitle,versionLabel:/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("b",null,versionMetadata.label)}},'This is documentation for {siteTitle} {versionLabel}, which is no longer actively maintained.');}const BannerLabelComponents={unreleased:UnreleasedVersionLabel,unmaintained:UnmaintainedVersionLabel};function BannerLabel(props){const BannerLabelComponent=BannerLabelComponents[props.versionMetadata.banner];return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(BannerLabelComponent,props);}function LatestVersionSuggestionLabel({versionLabel,to,onClick}){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__["default"],{id:"theme.docs.versions.latestVersionSuggestionLabel",description:"The label used to tell the user to check the latest version",values:{versionLabel,latestVersionLink:/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("b",null,/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_docusaurus_Link__WEBPACK_IMPORTED_MODULE_2__["default"],{to:to,onClick:onClick},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_3__["default"],{id:"theme.docs.versions.latestVersionLinkLabel",description:"The label used for the latest version suggestion link label"},"latest version")))}},'For up-to-date documentation, see the {latestVersionLink} ({versionLabel}).');}function DocVersionBannerEnabled({className,versionMetadata}){const{siteConfig:{title:siteTitle}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_1__["default"])();const{pluginId}=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_4__.useActivePlugin)({failfast:true});const getVersionMainDoc=version=>version.docs.find(doc=>doc.id===version.mainDocId);const{savePreferredVersionName}=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_5__/* .useDocsPreferredVersion */ .J)(pluginId);const{latestDocSuggestion,latestVersionSuggestion}=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_4__.useDocVersionSuggestions)(pluginId);// Try to link to same doc in latest version (not always possible), falling
-// back to main doc of latest version
-const latestVersionSuggestedDoc=latestDocSuggestion??getVersionMainDoc(latestVersionSuggestion);return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_6__["default"])(className,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_7__/* .ThemeClassNames.docs.docVersionBanner */ .k.docs.docVersionBanner,'alert alert--warning margin-bottom--md'),role:"alert"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",null,/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(BannerLabel,{siteTitle:siteTitle,versionMetadata:versionMetadata})),/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:"margin-top--md"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(LatestVersionSuggestionLabel,{versionLabel:latestVersionSuggestion.label,to:latestVersionSuggestedDoc.path,onClick:()=>savePreferredVersionName(latestVersionSuggestion.name)})));}function DocVersionBanner({className}){const versionMetadata=(0,_docusaurus_theme_common_internal__WEBPACK_IMPORTED_MODULE_8__/* .useDocsVersion */ .E)();if(versionMetadata.banner){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(DocVersionBannerEnabled,{className:className,versionMetadata:versionMetadata});}return null;}
-
-/***/ }),
-
-/***/ 53522:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ theme_Footer)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/useThemeConfig.js
-var useThemeConfig = __webpack_require__(96793);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/footerUtils.js
-var footerUtils = __webpack_require__(68211);
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Link.js + 1 modules
-var Link = __webpack_require__(89562);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/useBaseUrl.js
-var useBaseUrl = __webpack_require__(51402);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/isInternalUrl.js
-var isInternalUrl = __webpack_require__(71699);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Icon/ExternalLink/index.js
-var ExternalLink = __webpack_require__(84567);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Footer/LinkItem/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function FooterLinkItem({item}){const{to,href,label,prependBaseUrlToHref,...props}=item;const toUrl=(0,useBaseUrl["default"])(to);const normalizedHref=(0,useBaseUrl["default"])(href,{forcePrependBaseUrl:true});return/*#__PURE__*/react.createElement(Link["default"],(0,esm_extends/* default */.Z)({className:"footer__link-item"},href?{href:prependBaseUrlToHref?normalizedHref:href}:{to:toUrl},props),label,href&&!(0,isInternalUrl["default"])(href)&&/*#__PURE__*/react.createElement(ExternalLink/* default */.Z,null));}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Footer/Links/MultiColumn/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function ColumnLinkItem({item}){return item.html?/*#__PURE__*/react.createElement("li",{className:"footer__item"// Developer provided the HTML, so assume it's safe.
-// eslint-disable-next-line react/no-danger
-,dangerouslySetInnerHTML:{__html:item.html}}):/*#__PURE__*/react.createElement("li",{key:item.href??item.to,className:"footer__item"},/*#__PURE__*/react.createElement(FooterLinkItem,{item:item}));}function Column({column}){return/*#__PURE__*/react.createElement("div",{className:"col footer__col"},/*#__PURE__*/react.createElement("div",{className:"footer__title"},column.title),/*#__PURE__*/react.createElement("ul",{className:"footer__items clean-list"},column.items.map((item,i)=>/*#__PURE__*/react.createElement(ColumnLinkItem,{key:i,item:item}))));}function FooterLinksMultiColumn({columns}){return/*#__PURE__*/react.createElement("div",{className:"row footer__links"},columns.map((column,i)=>/*#__PURE__*/react.createElement(Column,{key:i,column:column})));}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Footer/Links/Simple/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function Separator(){return/*#__PURE__*/react.createElement("span",{className:"footer__link-separator"},"\xB7");}function SimpleLinkItem({item}){return item.html?/*#__PURE__*/react.createElement("span",{className:"footer__link-item"// Developer provided the HTML, so assume it's safe.
-// eslint-disable-next-line react/no-danger
-,dangerouslySetInnerHTML:{__html:item.html}}):/*#__PURE__*/react.createElement(FooterLinkItem,{item:item});}function FooterLinksSimple({links}){return/*#__PURE__*/react.createElement("div",{className:"footer__links text--center"},/*#__PURE__*/react.createElement("div",{className:"footer__links"},links.map((item,i)=>/*#__PURE__*/react.createElement(react.Fragment,{key:i},/*#__PURE__*/react.createElement(SimpleLinkItem,{item:item}),links.length!==i+1&&/*#__PURE__*/react.createElement(Separator,null)))));}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Footer/Links/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function FooterLinks({links}){return (0,footerUtils/* isMultiColumnFooterLinks */.a)(links)?/*#__PURE__*/react.createElement(FooterLinksMultiColumn,{columns:links}):/*#__PURE__*/react.createElement(FooterLinksSimple,{links:links});}
-// EXTERNAL MODULE: ./node_modules/clsx/dist/clsx.m.js
-var clsx_m = __webpack_require__(86010);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/ThemedImage/index.js
-var ThemedImage = __webpack_require__(25812);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Footer/Logo/styles.module.css
-var styles_module = __webpack_require__(40937);
-var styles_module_default = /*#__PURE__*/__webpack_require__.n(styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Footer/Logo/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function LogoImage({logo}){const{withBaseUrl}=(0,useBaseUrl.useBaseUrlUtils)();const sources={light:withBaseUrl(logo.src),dark:withBaseUrl(logo.srcDark??logo.src)};return/*#__PURE__*/react.createElement(ThemedImage["default"],{className:(0,clsx_m["default"])('footer__logo',logo.className),alt:logo.alt,sources:sources,width:logo.width,height:logo.height,style:logo.style});}function FooterLogo({logo}){return logo.href?/*#__PURE__*/react.createElement(Link["default"],{href:logo.href,className:(styles_module_default()).footerLogoLink,target:logo.target},/*#__PURE__*/react.createElement(LogoImage,{logo:logo})):/*#__PURE__*/react.createElement(LogoImage,{logo:logo});}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Footer/Copyright/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function FooterCopyright({copyright}){return/*#__PURE__*/react.createElement("div",{className:"footer__copyright"// Developer provided the HTML, so assume it's safe.
-// eslint-disable-next-line react/no-danger
-,dangerouslySetInnerHTML:{__html:copyright}});}
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/Footer/Layout/index.js
-var Layout = __webpack_require__(72726);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Footer/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function Footer(){const{footer}=(0,useThemeConfig/* useThemeConfig */.L)();if(!footer){return null;}const{copyright,links,logo,style}=footer;return/*#__PURE__*/react.createElement(Layout/* default */.Z,{style:style,links:links&&links.length>0&&/*#__PURE__*/react.createElement(FooterLinks,{links:links}),logo:logo&&/*#__PURE__*/react.createElement(FooterLogo,{logo:logo}),copyright:copyright&&/*#__PURE__*/react.createElement(FooterCopyright,{copyright:copyright})});}/* harmony default export */ const theme_Footer = (/*#__PURE__*/react.memo(Footer));
-
-/***/ }),
-
-/***/ 5574:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ IconDarkMode)
-/* harmony export */ });
-/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87462);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function IconDarkMode(props){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg",(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)({viewBox:"0 0 24 24",width:24,height:24},props),/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path",{fill:"currentColor",d:"M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"}));}
-
-/***/ }),
-
-/***/ 84567:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (/* binding */ IconExternalLink)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(89073);
-/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_1__);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function IconExternalLink({width=13.5,height=13.5}){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg",{width:width,height:height,"aria-hidden":"true",viewBox:"0 0 24 24",className:(_styles_module_css__WEBPACK_IMPORTED_MODULE_1___default().iconExternalLink)},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path",{fill:"currentColor",d:"M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"}));}
-
-/***/ }),
-
-/***/ 60388:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ IconLightMode)
-/* harmony export */ });
-/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87462);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function IconLightMode(props){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg",(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)({viewBox:"0 0 24 24",width:24,height:24},props),/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path",{fill:"currentColor",d:"M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"}));}
-
-/***/ }),
-
-/***/ 79939:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ IconSuccess)
-/* harmony export */ });
-/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87462);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function IconSuccess(props){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg",(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)({viewBox:"0 0 24 24"},props),/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path",{fill:"currentColor",d:"M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"}));}
-
-/***/ }),
-
-/***/ 64963:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ Layout_Layout)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/clsx/dist/clsx.m.js
-var clsx_m = __webpack_require__(86010);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/ErrorBoundary.js + 1 modules
-var ErrorBoundary = __webpack_require__(24649);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/metadataUtils.js + 1 modules
-var metadataUtils = __webpack_require__(44873);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/skipToContentUtils.js
-var skipToContentUtils = __webpack_require__(66470);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/ThemeClassNames.js
-var ThemeClassNames = __webpack_require__(18015);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useKeyboardNavigation.js + 1 modules
-var useKeyboardNavigation = __webpack_require__(73746);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/SkipToContent/styles.module.css
-var styles_module = __webpack_require__(42824);
-var styles_module_default = /*#__PURE__*/__webpack_require__.n(styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/SkipToContent/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function SkipToContent(){return/*#__PURE__*/react.createElement(skipToContentUtils/* SkipToContentLink */.l,{className:(styles_module_default()).skipToContent});}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/useThemeConfig.js
-var useThemeConfig = __webpack_require__(96793);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/announcementBar.js
-var contexts_announcementBar = __webpack_require__(69061);
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Translate.js + 1 modules
-var Translate = __webpack_require__(11614);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Icon/Close/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function IconClose({width=21,height=21,color='currentColor',strokeWidth=1.2,className,...restProps}){return/*#__PURE__*/react.createElement("svg",(0,esm_extends/* default */.Z)({viewBox:"0 0 15 15",width:width,height:height},restProps),/*#__PURE__*/react.createElement("g",{stroke:color,strokeWidth:strokeWidth},/*#__PURE__*/react.createElement("path",{d:"M.75.75l13.5 13.5M14.25.75L.75 14.25"})));}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/AnnouncementBar/CloseButton/styles.module.css
-var CloseButton_styles_module = __webpack_require__(23845);
-var CloseButton_styles_module_default = /*#__PURE__*/__webpack_require__.n(CloseButton_styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/AnnouncementBar/CloseButton/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function AnnouncementBarCloseButton(props){return/*#__PURE__*/react.createElement("button",(0,esm_extends/* default */.Z)({type:"button","aria-label":(0,Translate.translate)({id:'theme.AnnouncementBar.closeButtonAriaLabel',message:'Close',description:'The ARIA label for close button of announcement bar'})},props,{className:(0,clsx_m["default"])('clean-btn close',(CloseButton_styles_module_default()).closeButton,props.className)}),/*#__PURE__*/react.createElement(IconClose,{width:14,height:14,strokeWidth:3.1}));}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/AnnouncementBar/Content/styles.module.css
-var Content_styles_module = __webpack_require__(37021);
-var Content_styles_module_default = /*#__PURE__*/__webpack_require__.n(Content_styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/AnnouncementBar/Content/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function AnnouncementBarContent(props){const{announcementBar}=(0,useThemeConfig/* useThemeConfig */.L)();const{content}=announcementBar;return/*#__PURE__*/react.createElement("div",(0,esm_extends/* default */.Z)({},props,{className:(0,clsx_m["default"])((Content_styles_module_default()).content,props.className)// Developer provided the HTML, so assume it's safe.
-// eslint-disable-next-line react/no-danger
-,dangerouslySetInnerHTML:{__html:content}}));}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/AnnouncementBar/styles.module.css
-var AnnouncementBar_styles_module = __webpack_require__(9239);
-var AnnouncementBar_styles_module_default = /*#__PURE__*/__webpack_require__.n(AnnouncementBar_styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/AnnouncementBar/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function AnnouncementBar(){const{announcementBar}=(0,useThemeConfig/* useThemeConfig */.L)();const{isActive,close}=(0,contexts_announcementBar/* useAnnouncementBar */.nT)();if(!isActive){return null;}const{backgroundColor,textColor,isCloseable}=announcementBar;return/*#__PURE__*/react.createElement("div",{className:(AnnouncementBar_styles_module_default()).announcementBar,style:{backgroundColor,color:textColor},role:"banner"},isCloseable&&/*#__PURE__*/react.createElement("div",{className:(AnnouncementBar_styles_module_default()).announcementBarPlaceholder}),/*#__PURE__*/react.createElement(AnnouncementBarContent,{className:(AnnouncementBar_styles_module_default()).announcementBarContent}),isCloseable&&/*#__PURE__*/react.createElement(AnnouncementBarCloseButton,{onClick:close,className:(AnnouncementBar_styles_module_default()).announcementBarClose}));}
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/Navbar/Layout/index.js
-var Layout = __webpack_require__(26558);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/Navbar/Content/index.js
-var Content = __webpack_require__(27882);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Navbar/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function Navbar(){return/*#__PURE__*/react.createElement(Layout/* default */.Z,null,/*#__PURE__*/react.createElement(Content/* default */.Z,null));}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Footer/index.js + 6 modules
-var Footer = __webpack_require__(53522);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/Layout/Provider/index.js
-var Provider = __webpack_require__(10211);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/errorBoundaryUtils.js
-var errorBoundaryUtils = __webpack_require__(73106);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/ErrorPageContent.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function ErrorPageContent({error,tryAgain}){return/*#__PURE__*/react.createElement("main",{className:"container margin-vert--xl"},/*#__PURE__*/react.createElement("div",{className:"row"},/*#__PURE__*/react.createElement("div",{className:"col col--6 col--offset-3"},/*#__PURE__*/react.createElement("h1",{className:"hero__title"},/*#__PURE__*/react.createElement(Translate["default"],{id:"theme.ErrorPageContent.title",description:"The title of the fallback page when the page crashed"},"This page crashed.")),/*#__PURE__*/react.createElement("div",{className:"margin-vert--lg"},/*#__PURE__*/react.createElement(errorBoundaryUtils/* ErrorBoundaryTryAgainButton */.Cw,{onClick:tryAgain,className:"button button--primary shadow--lw"})),/*#__PURE__*/react.createElement("hr",null),/*#__PURE__*/react.createElement("div",{className:"margin-vert--md"},/*#__PURE__*/react.createElement(errorBoundaryUtils/* ErrorBoundaryError */.aG,{error:error})))));}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Layout/styles.module.css
-var Layout_styles_module = __webpack_require__(64874);
-var Layout_styles_module_default = /*#__PURE__*/__webpack_require__.n(Layout_styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Layout/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function Layout_Layout(props){const{children,noFooter,wrapperClassName,// Not really layout-related, but kept for convenience/retro-compatibility
-title,description}=props;(0,useKeyboardNavigation/* useKeyboardNavigation */.t)();return/*#__PURE__*/react.createElement(Provider/* default */.Z,null,/*#__PURE__*/react.createElement(metadataUtils/* PageMetadata */.d,{title:title,description:description}),/*#__PURE__*/react.createElement(SkipToContent,null),/*#__PURE__*/react.createElement(AnnouncementBar,null),/*#__PURE__*/react.createElement(Navbar,null),/*#__PURE__*/react.createElement("div",{id:skipToContentUtils/* SkipToContentFallbackId */.u,className:(0,clsx_m["default"])(ThemeClassNames/* ThemeClassNames.wrapper.main */.k.wrapper.main,(Layout_styles_module_default()).mainWrapper,wrapperClassName)},/*#__PURE__*/react.createElement(ErrorBoundary["default"],{fallback:params=>/*#__PURE__*/react.createElement(ErrorPageContent,params)},children)),!noFooter&&/*#__PURE__*/react.createElement(Footer["default"],null));}
-
-/***/ }),
-
-/***/ 7872:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ MDXHeading)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-// EXTERNAL MODULE: ./node_modules/clsx/dist/clsx.m.js
-var clsx_m = __webpack_require__(86010);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Translate.js + 1 modules
-var Translate = __webpack_require__(11614);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/useThemeConfig.js
-var useThemeConfig = __webpack_require__(96793);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Link.js + 1 modules
-var Link = __webpack_require__(89562);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Heading/styles.module.css
-var styles_module = __webpack_require__(19475);
-var styles_module_default = /*#__PURE__*/__webpack_require__.n(styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Heading/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function Heading({as:As,id,...props}){const{navbar:{hideOnScroll}}=(0,useThemeConfig/* useThemeConfig */.L)();// H1 headings do not need an id because they don't appear in the TOC.
-if(As==='h1'||!id){return/*#__PURE__*/react.createElement(As,(0,esm_extends/* default */.Z)({},props,{id:undefined}));}const anchorTitle=(0,Translate.translate)({id:'theme.common.headingLinkTitle',message:'Direct link to {heading}',description:'Title for link to heading'},{heading:typeof props.children==='string'?props.children:id});return/*#__PURE__*/react.createElement(As,(0,esm_extends/* default */.Z)({},props,{className:(0,clsx_m["default"])('anchor',hideOnScroll?(styles_module_default()).anchorWithHideOnScrollNavbar:(styles_module_default()).anchorWithStickyNavbar,props.className),id:id}),props.children,/*#__PURE__*/react.createElement(Link["default"],{className:"hash-link",to:`#${id}`,"aria-label":anchorTitle,title:anchorTitle},"\u200B"));}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/MDXComponents/Heading.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function MDXHeading(props){return/*#__PURE__*/react.createElement(Heading,props);}
-
-/***/ }),
-
-/***/ 39989:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ MDXImg)
-/* harmony export */ });
-/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(87462);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(86010);
-/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(7588);
-/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_1__);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function transformImgClassName(className){return (0,clsx__WEBPACK_IMPORTED_MODULE_2__["default"])(className,(_styles_module_css__WEBPACK_IMPORTED_MODULE_1___default().img));}function MDXImg(props){return/*#__PURE__*/ (// eslint-disable-next-line jsx-a11y/alt-text
-react__WEBPACK_IMPORTED_MODULE_0__.createElement("img",(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)({loading:"lazy"},props,{className:transformImgClassName(props.className)})));}
-
-/***/ }),
-
-/***/ 28013:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ MDXContent)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@mdx-js/react/dist/esm.js
-var esm = __webpack_require__(3905);
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Head.js
-var Head = __webpack_require__(32411);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/MDXComponents/Head.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// MDX elements are wrapped through the MDX pragma. In some cases (notably usage
-// with Head/Helmet) we need to unwrap those elements.
-function unwrapMDXElement(element){if(element.props?.mdxType&&element.props.originalType){const{mdxType,originalType,...newProps}=element.props;return/*#__PURE__*/react.createElement(element.props.originalType,newProps);}return element;}function MDXHead(props){const unwrappedChildren=react.Children.map(props.children,child=>/*#__PURE__*/react.isValidElement(child)?unwrapMDXElement(child):child);return/*#__PURE__*/react.createElement(Head/* default */.Z,props,unwrappedChildren);}
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/CodeBlock/index.js
-var CodeBlock = __webpack_require__(86687);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/MDXComponents/Code.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function MDXCode(props){const inlineElements=['a','abbr','b','br','button','cite','code','del','dfn','em','i','img','input','ins','kbd','label','object','output','q','ruby','s','small','span','strong','sub','sup','time','u','var','wbr'];const shouldBeInline=react.Children.toArray(props.children).every(el=>typeof el==='string'&&!el.includes('\n')||/*#__PURE__*/(0,react.isValidElement)(el)&&inlineElements.includes(el.props?.mdxType));return shouldBeInline?/*#__PURE__*/react.createElement("code",props):/*#__PURE__*/react.createElement(CodeBlock/* default */.Z,props);}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Link.js + 1 modules
-var Link = __webpack_require__(89562);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/MDXComponents/A.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function MDXA(props){return/*#__PURE__*/react.createElement(Link["default"],props);}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/MDXComponents/Pre.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function MDXPre(props){return/*#__PURE__*/react.createElement(CodeBlock/* default */.Z// If this pre is created by a ``` fenced codeblock, unwrap the children
-,/*#__PURE__*/(0,react.isValidElement)(props.children)&&props.children.props?.originalType==='code'?props.children.props:{...props});}
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/MDXComponents/Details.js
-var Details = __webpack_require__(29956);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/MDXComponents/Heading.js
-var Heading = __webpack_require__(99276);
-// EXTERNAL MODULE: ./node_modules/clsx/dist/clsx.m.js
-var clsx_m = __webpack_require__(86010);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/MDXComponents/Ul/styles.module.css
-var styles_module = __webpack_require__(46655);
-var styles_module_default = /*#__PURE__*/__webpack_require__.n(styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/MDXComponents/Ul/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function transformUlClassName(className){return (0,clsx_m["default"])(className,// This class is set globally by GitHub/MDX. We keep the global class, and
-// add another class to get a task list without the default ul styling
-// See https://github.com/syntax-tree/mdast-util-to-hast/issues/28
-className?.includes('contains-task-list')&&(styles_module_default()).containsTaskList);}function MDXUl(props){return/*#__PURE__*/react.createElement("ul",(0,esm_extends/* default */.Z)({},props,{className:transformUlClassName(props.className)}));}
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/MDXComponents/Img/index.js
-var Img = __webpack_require__(28205);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/Admonition/index.js
-var Admonition = __webpack_require__(60578);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/Mermaid/index.js
-var Mermaid = __webpack_require__(86570);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/MDXComponents/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const MDXComponents={head:MDXHead,code:MDXCode,a:MDXA,pre:MDXPre,details:Details/* default */.Z,ul:MDXUl,img:Img/* default */.Z,h1:props=>/*#__PURE__*/react.createElement(Heading["default"],(0,esm_extends/* default */.Z)({as:"h1"},props)),h2:props=>/*#__PURE__*/react.createElement(Heading["default"],(0,esm_extends/* default */.Z)({as:"h2"},props)),h3:props=>/*#__PURE__*/react.createElement(Heading["default"],(0,esm_extends/* default */.Z)({as:"h3"},props)),h4:props=>/*#__PURE__*/react.createElement(Heading["default"],(0,esm_extends/* default */.Z)({as:"h4"},props)),h5:props=>/*#__PURE__*/react.createElement(Heading["default"],(0,esm_extends/* default */.Z)({as:"h5"},props)),h6:props=>/*#__PURE__*/react.createElement(Heading["default"],(0,esm_extends/* default */.Z)({as:"h6"},props)),admonition:Admonition/* default */.Z,mermaid:Mermaid/* default */.Z};/* harmony default export */ const theme_MDXComponents = (MDXComponents);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/MDXContent/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function MDXContent({children}){return/*#__PURE__*/react.createElement(esm/* MDXProvider */.Zo,{components:theme_MDXComponents},children);}
-
-/***/ }),
-
-/***/ 56668:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ MDXPage)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(86010);
-/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(44873);
-/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(18015);
-/* harmony import */ var _theme_Layout__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(64963);
-/* harmony import */ var _theme_MDXContent__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(28013);
-/* harmony import */ var _theme_TOC__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(88587);
-/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(720);
-/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_4__);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function MDXPage(props){const{content:MDXPageContent}=props;const{metadata:{title,description,frontMatter}}=MDXPageContent;const{wrapperClassName,hide_table_of_contents:hideTableOfContents}=frontMatter;return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__/* .HtmlClassNameProvider */ .FG,{className:(0,clsx__WEBPACK_IMPORTED_MODULE_6__["default"])(wrapperClassName??_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_7__/* .ThemeClassNames.wrapper.mdxPages */ .k.wrapper.mdxPages,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_7__/* .ThemeClassNames.page.mdxPage */ .k.page.mdxPage)},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_5__/* .PageMetadata */ .d,{title:title,description:description}),/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_theme_Layout__WEBPACK_IMPORTED_MODULE_1__["default"],null,/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("main",{className:"container container--fluid margin-vert--lg"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_6__["default"])('row',(_styles_module_css__WEBPACK_IMPORTED_MODULE_4___default().mdxPageWrapper))},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_6__["default"])('col',!hideTableOfContents&&'col--8')},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("article",null,/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_theme_MDXContent__WEBPACK_IMPORTED_MODULE_2__["default"],null,/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MDXPageContent,null)))),!hideTableOfContents&&MDXPageContent.toc.length>0&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:"col col--2"},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_theme_TOC__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z,{toc:MDXPageContent.toc,minHeadingLevel:frontMatter.toc_min_heading_level,maxHeadingLevel:frontMatter.toc_max_heading_level}))))));}
-
-/***/ }),
-
-/***/ 62489:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ NavbarColorModeToggle)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(96793);
-/* harmony import */ var _docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(70524);
-/* harmony import */ var _theme_ColorModeToggle__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61818);
-/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(14283);
-/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_2__);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function NavbarColorModeToggle({className}){const navbarStyle=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .useThemeConfig */ .L)().navbar.style;const disabled=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_3__/* .useThemeConfig */ .L)().colorMode.disableSwitch;const{colorMode,setColorMode}=(0,_docusaurus_theme_common__WEBPACK_IMPORTED_MODULE_4__/* .useColorMode */ .I)();if(disabled){return null;}return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_theme_ColorModeToggle__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,{className:className,buttonClassName:navbarStyle==='dark'?(_styles_module_css__WEBPACK_IMPORTED_MODULE_2___default().darkNavbarColorModeToggle):undefined,value:colorMode,onChange:setColorMode});}
-
-/***/ }),
-
-/***/ 60543:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ MobileSidebarToggle)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/navbarMobileSidebar.js
-var navbarMobileSidebar = __webpack_require__(35022);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Translate.js + 1 modules
-var Translate = __webpack_require__(11614);
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Icon/Menu/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function IconMenu({width=30,height=30,className,...restProps}){return/*#__PURE__*/react.createElement("svg",(0,esm_extends/* default */.Z)({className:className,width:width,height:height,viewBox:"0 0 30 30","aria-hidden":"true"},restProps),/*#__PURE__*/react.createElement("path",{stroke:"currentColor",strokeLinecap:"round",strokeMiterlimit:"10",strokeWidth:"2",d:"M4 7h22M4 15h22M4 23h22"}));}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Navbar/MobileSidebar/Toggle/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function MobileSidebarToggle(){const{toggle,shown}=(0,navbarMobileSidebar/* useNavbarMobileSidebar */.e)();return/*#__PURE__*/react.createElement("button",{onClick:toggle,"aria-label":(0,Translate.translate)({id:'theme.docs.sidebar.toggleSidebarButtonAriaLabel',message:'Toggle navigation bar',description:'The ARIA label for hamburger menu button of mobile navigation'}),"aria-expanded":shown,className:"navbar__toggle clean-btn",type:"button"},/*#__PURE__*/react.createElement(IconMenu,null));}
-
-/***/ }),
-
-/***/ 44488:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ NavbarMobileSidebar)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/navbarMobileSidebar.js
-var navbarMobileSidebar = __webpack_require__(35022);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useLockBodyScroll.js
-var useLockBodyScroll = __webpack_require__(69322);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/Navbar/MobileSidebar/Layout/index.js
-var Layout = __webpack_require__(64644);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/Navbar/MobileSidebar/Header/index.js
-var Header = __webpack_require__(20080);
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/useThemeConfig.js
-var useThemeConfig = __webpack_require__(96793);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/NavbarItem/index.js + 9 modules
-var NavbarItem = __webpack_require__(88499);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Navbar/MobileSidebar/PrimaryMenu/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function useNavbarItems(){// TODO temporary casting until ThemeConfig type is improved
-return (0,useThemeConfig/* useThemeConfig */.L)().navbar.items;}// The primary menu displays the navbar items
-function NavbarMobilePrimaryMenu(){const mobileSidebar=(0,navbarMobileSidebar/* useNavbarMobileSidebar */.e)();// TODO how can the order be defined for mobile?
-// Should we allow providing a different list of items?
-const items=useNavbarItems();return/*#__PURE__*/react.createElement("ul",{className:"menu__list"},items.map((item,i)=>/*#__PURE__*/react.createElement(NavbarItem["default"],(0,esm_extends/* default */.Z)({mobile:true},item,{onClick:()=>mobileSidebar.toggle(),key:i}))));}
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/Navbar/MobileSidebar/SecondaryMenu/index.js
-var SecondaryMenu = __webpack_require__(29843);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Navbar/MobileSidebar/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function NavbarMobileSidebar(){const mobileSidebar=(0,navbarMobileSidebar/* useNavbarMobileSidebar */.e)();(0,useLockBodyScroll/* useLockBodyScroll */.N)(mobileSidebar.shown);if(!mobileSidebar.shouldRender){return null;}return/*#__PURE__*/react.createElement(Layout/* default */.Z,{header:/*#__PURE__*/react.createElement(Header/* default */.Z,null),primaryMenu:/*#__PURE__*/react.createElement(NavbarMobilePrimaryMenu,null),secondaryMenu:/*#__PURE__*/react.createElement(SecondaryMenu/* default */.Z,null)});}
-
-/***/ }),
-
-/***/ 88499:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ NavbarItem)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-// EXTERNAL MODULE: ./node_modules/clsx/dist/clsx.m.js
-var clsx_m = __webpack_require__(86010);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/NavbarItem/NavbarNavLink/index.js
-var NavbarNavLink = __webpack_require__(83112);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/NavbarItem/DefaultNavbarItem.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DefaultNavbarItemDesktop({className,isDropdownItem=false,...props}){const element=/*#__PURE__*/react.createElement(NavbarNavLink["default"],(0,esm_extends/* default */.Z)({className:(0,clsx_m["default"])(isDropdownItem?'dropdown__link':'navbar__item navbar__link',className),isDropdownLink:isDropdownItem},props));if(isDropdownItem){return/*#__PURE__*/react.createElement("li",null,element);}return element;}function DefaultNavbarItemMobile({className,isDropdownItem,...props}){return/*#__PURE__*/react.createElement("li",{className:"menu__list-item"},/*#__PURE__*/react.createElement(NavbarNavLink["default"],(0,esm_extends/* default */.Z)({className:(0,clsx_m["default"])('menu__link',className)},props)));}function DefaultNavbarItem({mobile=false,position,// Need to destructure position from props so that it doesn't get passed on.
-...props}){const Comp=mobile?DefaultNavbarItemMobile:DefaultNavbarItemDesktop;return/*#__PURE__*/react.createElement(Comp,(0,esm_extends/* default */.Z)({},props,{activeClassName:props.activeClassName??(mobile?'menu__link--active':'navbar__link--active')}));}
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/NavbarItem/DropdownNavbarItem/index.js
-var DropdownNavbarItem = __webpack_require__(71003);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/NavbarItem/LocaleDropdownNavbarItem/index.js
-var LocaleDropdownNavbarItem = __webpack_require__(23247);
-// EXTERNAL MODULE: ./node_modules/@acid-info/logos-docusaurus-theme/lib/client/theme/SearchBar/index.js
-var SearchBar = __webpack_require__(20130);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Navbar/Search/styles.module.css
-var styles_module = __webpack_require__(17641);
-var styles_module_default = /*#__PURE__*/__webpack_require__.n(styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/Navbar/Search/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function NavbarSearch({children,className}){return/*#__PURE__*/react.createElement("div",{className:(0,clsx_m["default"])(className,(styles_module_default()).searchBox)},children);}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/NavbarItem/SearchNavbarItem.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function SearchNavbarItem({mobile,className}){if(mobile){return null;}return/*#__PURE__*/react.createElement(NavbarSearch,{className:className},/*#__PURE__*/react.createElement(SearchBar["default"],null));}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/NavbarItem/HtmlNavbarItem.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function HtmlNavbarItem({value,className,mobile=false,isDropdownItem=false}){const Comp=isDropdownItem?'li':'div';return/*#__PURE__*/react.createElement(Comp,{className:(0,clsx_m["default"])({navbar__item:!mobile&&!isDropdownItem,'menu__list-item':mobile},className),dangerouslySetInnerHTML:{__html:value}});}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/plugin-content-docs/lib/client/index.js + 2 modules
-var client = __webpack_require__(4452);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/docsUtils.js
-var docsUtils = __webpack_require__(85919);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/NavbarItem/DocNavbarItem.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DocNavbarItem({docId,label:staticLabel,docsPluginId,...props}){const{activeDoc}=(0,client.useActiveDocContext)(docsPluginId);const doc=(0,docsUtils/* useLayoutDoc */.vY)(docId,docsPluginId);// Draft items are not displayed in the navbar.
-if(doc===null){return null;}return/*#__PURE__*/react.createElement(DefaultNavbarItem,(0,esm_extends/* default */.Z)({exact:true},props,{isActive:()=>activeDoc?.path===doc.path||!!activeDoc?.sidebar&&activeDoc.sidebar===doc.sidebar,label:staticLabel??doc.id,to:doc.path}));}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/NavbarItem/DocSidebarNavbarItem.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function DocSidebarNavbarItem({sidebarId,label,docsPluginId,...props}){const{activeDoc}=(0,client.useActiveDocContext)(docsPluginId);const sidebarLink=(0,docsUtils/* useLayoutDocsSidebar */.oz)(sidebarId,docsPluginId).link;if(!sidebarLink){throw new Error(`DocSidebarNavbarItem: Sidebar with ID "${sidebarId}" doesn't have anything to be linked to.`);}return/*#__PURE__*/react.createElement(DefaultNavbarItem,(0,esm_extends/* default */.Z)({exact:true},props,{isActive:()=>activeDoc?.sidebar===sidebarId,label:label??sidebarLink.label,to:sidebarLink.path}));}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/NavbarItem/DocsVersionNavbarItem.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const getVersionMainDoc=version=>version.docs.find(doc=>doc.id===version.mainDocId);function DocsVersionNavbarItem({label:staticLabel,to:staticTo,docsPluginId,...props}){const version=(0,docsUtils/* useDocsVersionCandidates */.lO)(docsPluginId)[0];const label=staticLabel??version.label;const path=staticTo??getVersionMainDoc(version).path;return/*#__PURE__*/react.createElement(DefaultNavbarItem,(0,esm_extends/* default */.Z)({},props,{label:label,to:path}));}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/docsPreferredVersion.js
-var docsPreferredVersion = __webpack_require__(4049);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Translate.js + 1 modules
-var Translate = __webpack_require__(11614);
-// EXTERNAL MODULE: ./node_modules/react-router/esm/react-router.js
-var react_router = __webpack_require__(16550);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/NavbarItem/DocsVersionDropdownNavbarItem.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const DocsVersionDropdownNavbarItem_getVersionMainDoc=version=>version.docs.find(doc=>doc.id===version.mainDocId);function DocsVersionDropdownNavbarItem({mobile,docsPluginId,dropdownActiveClassDisabled,dropdownItemsBefore,dropdownItemsAfter,...props}){const{search,hash}=(0,react_router/* useLocation */.TH)();const activeDocContext=(0,client.useActiveDocContext)(docsPluginId);const versions=(0,client.useVersions)(docsPluginId);const{savePreferredVersionName}=(0,docsPreferredVersion/* useDocsPreferredVersion */.J)(docsPluginId);const versionLinks=versions.map(version=>{// We try to link to the same doc, in another version
-// When not possible, fallback to the "main doc" of the version
-const versionDoc=activeDocContext.alternateDocVersions[version.name]??DocsVersionDropdownNavbarItem_getVersionMainDoc(version);return{label:version.label,// preserve ?search#hash suffix on version switches
-to:`${versionDoc.path}${search}${hash}`,isActive:()=>version===activeDocContext.activeVersion,onClick:()=>savePreferredVersionName(version.name)};});const items=[...dropdownItemsBefore,...versionLinks,...dropdownItemsAfter];const dropdownVersion=(0,docsUtils/* useDocsVersionCandidates */.lO)(docsPluginId)[0];// Mobile dropdown is handled a bit differently
-const dropdownLabel=mobile&&items.length>1?(0,Translate.translate)({id:'theme.navbar.mobileVersionsDropdown.label',message:'Versions',description:'The label for the navbar versions dropdown on mobile view'}):dropdownVersion.label;const dropdownTo=mobile&&items.length>1?undefined:DocsVersionDropdownNavbarItem_getVersionMainDoc(dropdownVersion).path;// We don't want to render a version dropdown with 0 or 1 item. If we build
-// the site with a single docs version (onlyIncludeVersions: ['1.0.0']),
-// We'd rather render a button instead of a dropdown
-if(items.length<=1){return/*#__PURE__*/react.createElement(DefaultNavbarItem,(0,esm_extends/* default */.Z)({},props,{mobile:mobile,label:dropdownLabel,to:dropdownTo,isActive:dropdownActiveClassDisabled?()=>false:undefined}));}return/*#__PURE__*/react.createElement(DropdownNavbarItem["default"],(0,esm_extends/* default */.Z)({},props,{mobile:mobile,label:dropdownLabel,to:dropdownTo,items:items,isActive:dropdownActiveClassDisabled?()=>false:undefined}));}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/NavbarItem/ComponentTypes.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const ComponentTypes={default:DefaultNavbarItem,localeDropdown:LocaleDropdownNavbarItem/* default */.Z,search:SearchNavbarItem,dropdown:DropdownNavbarItem["default"],html:HtmlNavbarItem,doc:DocNavbarItem,docSidebar:DocSidebarNavbarItem,docsVersion:DocsVersionNavbarItem,docsVersionDropdown:DocsVersionDropdownNavbarItem};/* harmony default export */ const NavbarItem_ComponentTypes = (ComponentTypes);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/NavbarItem/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function normalizeComponentType(type,props){// Backward compatibility: navbar item with no type set
-// but containing dropdown items should use the type "dropdown"
-if(!type||type==='default'){return'items'in props?'dropdown':'default';}return type;}function NavbarItem({type,...props}){const componentType=normalizeComponentType(type,props);const NavbarItemComponent=NavbarItem_ComponentTypes[componentType];if(!NavbarItemComponent){throw new Error(`No NavbarItem component found for type "${type}".`);}return/*#__PURE__*/react.createElement(NavbarItemComponent,props);}
-
-/***/ }),
-
-/***/ 26145:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (/* binding */ SearchMetadata)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(32411);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// Note: we bias toward using Algolia metadata on purpose
-// Not doing so leads to confusion in the community,
-// as it requires to first crawl the site with the Algolia plugin enabled first
-// - https://github.com/facebook/docusaurus/issues/6693
-// - https://github.com/facebook/docusaurus/issues/4555
-function SearchMetadata({locale,version,tag}){// Seems safe to consider here the locale is the language, as the existing
-// docsearch:language filter is afaik a regular string-based filter
-const language=locale;return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_docusaurus_Head__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,null,locale&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("meta",{name:"docusaurus_locale",content:locale}),version&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("meta",{name:"docusaurus_version",content:version}),tag&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("meta",{name:"docusaurus_tag",content:tag}),language&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("meta",{name:"docsearch:language",content:language}),version&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("meta",{name:"docsearch:version",content:version}),tag&&/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("meta",{name:"docsearch:docusaurus_tag",content:tag}));}
-
-/***/ }),
-
-/***/ 88587:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (/* binding */ TOC)
-/* harmony export */ });
-/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(87462);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var clsx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(86010);
-/* harmony import */ var _theme_TOCItems__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1014);
-/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(70578);
-/* harmony import */ var _styles_module_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_styles_module_css__WEBPACK_IMPORTED_MODULE_2__);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// Using a custom className
-// This prevents TOCInline/TOCCollapsible getting highlighted by mistake
-const LINK_CLASS_NAME='table-of-contents__link toc-highlight';const LINK_ACTIVE_CLASS_NAME='table-of-contents__link--active';function TOC({className,...props}){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{className:(0,clsx__WEBPACK_IMPORTED_MODULE_3__["default"])((_styles_module_css__WEBPACK_IMPORTED_MODULE_2___default().tableOfContents),'thin-scrollbar',className)},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_theme_TOCItems__WEBPACK_IMPORTED_MODULE_1__["default"],(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)({},props,{linkClassName:LINK_CLASS_NAME,linkActiveClassName:LINK_ACTIVE_CLASS_NAME})));}
-
-/***/ }),
-
-/***/ 1014:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ TOCItems)
-});
-
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/useThemeConfig.js
-var useThemeConfig = __webpack_require__(96793);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/tocUtils.js
-var tocUtils = __webpack_require__(94462);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useTOCHighlight.js
-var useTOCHighlight = __webpack_require__(78586);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/TOCItems/Tree.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// Recursive component rendering the toc tree
-function TOCItemTree({toc,className,linkClassName,isChild}){if(!toc.length){return null;}return/*#__PURE__*/react.createElement("ul",{className:isChild?undefined:className},toc.map(heading=>/*#__PURE__*/react.createElement("li",{key:heading.id},/*#__PURE__*/react.createElement("a",{href:`#${heading.id}`,className:linkClassName??undefined// Developer provided the HTML, so assume it's safe.
-// eslint-disable-next-line react/no-danger
-,dangerouslySetInnerHTML:{__html:heading.value}}),/*#__PURE__*/react.createElement(TOCItemTree,{isChild:true,toc:heading.children,className:className,linkClassName:linkClassName}))));}// Memo only the tree root is enough
-/* harmony default export */ const Tree = (/*#__PURE__*/react.memo(TOCItemTree));
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-classic/lib/theme/TOCItems/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function TOCItems({toc,className='table-of-contents table-of-contents__left-border',linkClassName='table-of-contents__link',linkActiveClassName=undefined,minHeadingLevel:minHeadingLevelOption,maxHeadingLevel:maxHeadingLevelOption,...props}){const themeConfig=(0,useThemeConfig/* useThemeConfig */.L)();const minHeadingLevel=minHeadingLevelOption??themeConfig.tableOfContents.minHeadingLevel;const maxHeadingLevel=maxHeadingLevelOption??themeConfig.tableOfContents.maxHeadingLevel;const tocTree=(0,tocUtils/* useFilteredAndTreeifiedTOC */.b)({toc,minHeadingLevel,maxHeadingLevel});const tocHighlightConfig=(0,react.useMemo)(()=>{if(linkClassName&&linkActiveClassName){return{linkClassName,linkActiveClassName,minHeadingLevel,maxHeadingLevel};}return undefined;},[linkClassName,linkActiveClassName,minHeadingLevel,maxHeadingLevel]);(0,useTOCHighlight/* useTOCHighlight */.S)(tocHighlightConfig);return/*#__PURE__*/react.createElement(Tree,(0,esm_extends/* default */.Z)({toc:tocTree,className:className,linkClassName:linkClassName},props));}
-
-/***/ }),
-
-/***/ 69061:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "nT": () => (/* binding */ useAnnouncementBar),
-/* harmony export */   "pl": () => (/* binding */ AnnouncementBarProvider)
-/* harmony export */ });
-/* unused harmony export AnnouncementBarDismissStorageKey */
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(5730);
-/* harmony import */ var _utils_storageUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(99200);
-/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(93478);
-/* harmony import */ var _utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(96793);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const AnnouncementBarDismissStorageKey='docusaurus.announcement.dismiss';const AnnouncementBarIdStorageKey='docusaurus.announcement.id';const AnnouncementBarDismissStorage=(0,_utils_storageUtils__WEBPACK_IMPORTED_MODULE_2__/* .createStorageSlot */ .WA)(AnnouncementBarDismissStorageKey);const IdStorage=(0,_utils_storageUtils__WEBPACK_IMPORTED_MODULE_2__/* .createStorageSlot */ .WA)(AnnouncementBarIdStorageKey);const isDismissedInStorage=()=>AnnouncementBarDismissStorage.get()==='true';const setDismissedInStorage=bool=>AnnouncementBarDismissStorage.set(String(bool));const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);function useContextValue(){const{announcementBar}=(0,_utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_3__/* .useThemeConfig */ .L)();const isBrowser=(0,_docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_1__["default"])();const[isClosed,setClosed]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>isBrowser?// On client navigation: init with local storage value
-isDismissedInStorage():// On server/hydration: always visible to prevent layout shifts (will be hidden with css if needed)
-false);// Update state after hydration
-(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{setClosed(isDismissedInStorage());},[]);const handleClose=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{setDismissedInStorage(true);setClosed(true);},[]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(!announcementBar){return;}const{id}=announcementBar;let viewedId=IdStorage.get();// Retrocompatibility due to spelling mistake of default id
-// see https://github.com/facebook/docusaurus/issues/3338
-// cSpell:ignore annoucement
-if(viewedId==='annoucement-bar'){viewedId='announcement-bar';}const isNewAnnouncement=id!==viewedId;IdStorage.set(id);if(isNewAnnouncement){setDismissedInStorage(false);}if(isNewAnnouncement||!isDismissedInStorage()){setClosed(false);}},[announcementBar]);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({isActive:!!announcementBar&&!isClosed,close:handleClose}),[announcementBar,isClosed,handleClose]);}function AnnouncementBarProvider({children}){const value=useContextValue();return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Context.Provider,{value:value},children);}function useAnnouncementBar(){const api=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(!api){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_4__/* .ReactContextError */ .i6('AnnouncementBarProvider');}return api;}
-
-/***/ }),
-
-/***/ 70524:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "I": () => (/* binding */ useColorMode),
-/* harmony export */   "S": () => (/* binding */ ColorModeProvider)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(19901);
-/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(93478);
-/* harmony import */ var _utils_storageUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(99200);
-/* harmony import */ var _utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(96793);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(undefined);const ColorModeStorageKey='theme';const ColorModeStorage=(0,_utils_storageUtils__WEBPACK_IMPORTED_MODULE_2__/* .createStorageSlot */ .WA)(ColorModeStorageKey);const ColorModes={light:'light',dark:'dark'};// Ensure to always return a valid colorMode even if input is invalid
-const coerceToColorMode=colorMode=>colorMode===ColorModes.dark?ColorModes.dark:ColorModes.light;const getInitialColorMode=defaultMode=>_docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__["default"].canUseDOM?coerceToColorMode(document.documentElement.getAttribute('data-theme')):coerceToColorMode(defaultMode);const storeColorMode=newColorMode=>{ColorModeStorage.set(coerceToColorMode(newColorMode));};function useContextValue(){const{colorMode:{defaultMode,disableSwitch,respectPrefersColorScheme}}=(0,_utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_3__/* .useThemeConfig */ .L)();const[colorMode,setColorModeState]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(getInitialColorMode(defaultMode));(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{// A site is deployed without disableSwitch
-// => User visits the site and has a persisted value
-// => Site later enabled disableSwitch
-// => Clear the previously stored value to apply the site's setting
-if(disableSwitch){ColorModeStorage.del();}},[disableSwitch]);const setColorMode=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((newColorMode,options={})=>{const{persist=true}=options;if(newColorMode){setColorModeState(newColorMode);if(persist){storeColorMode(newColorMode);}}else{if(respectPrefersColorScheme){setColorModeState(window.matchMedia('(prefers-color-scheme: dark)').matches?ColorModes.dark:ColorModes.light);}else{setColorModeState(defaultMode);}ColorModeStorage.del();}},[respectPrefersColorScheme,defaultMode]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{document.documentElement.setAttribute('data-theme',coerceToColorMode(colorMode));},[colorMode]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(disableSwitch){return undefined;}const onChange=e=>{if(e.key!==ColorModeStorageKey){return;}const storedColorMode=ColorModeStorage.get();if(storedColorMode!==null){setColorMode(coerceToColorMode(storedColorMode));}};window.addEventListener('storage',onChange);return()=>window.removeEventListener('storage',onChange);},[disableSwitch,setColorMode]);// PCS is coerced to light mode when printing, which causes the color mode to
-// be reset to dark when exiting print mode, disregarding user settings. When
-// the listener fires only because of a print/screen switch, we don't change
-// color mode. See https://github.com/facebook/docusaurus/pull/6490
-const previousMediaIsPrint=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(disableSwitch&&!respectPrefersColorScheme){return undefined;}const mql=window.matchMedia('(prefers-color-scheme: dark)');const onChange=()=>{if(window.matchMedia('print').matches||previousMediaIsPrint.current){previousMediaIsPrint.current=window.matchMedia('print').matches;return;}setColorMode(null);};mql.addListener(onChange);return()=>mql.removeListener(onChange);},[setColorMode,disableSwitch,respectPrefersColorScheme]);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({colorMode,setColorMode,get isDarkTheme(){if(false){}return colorMode===ColorModes.dark;},setLightTheme(){if(false){}setColorMode(ColorModes.light);},setDarkTheme(){if(false){}setColorMode(ColorModes.dark);}}),[colorMode,setColorMode]);}function ColorModeProvider({children}){const value=useContextValue();return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Context.Provider,{value:value},children);}function useColorMode(){const context=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(context==null){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_4__/* .ReactContextError */ .i6('ColorModeProvider','Please see https://docusaurus.io/docs/api/themes/configuration#use-color-mode.');}return context;}
-
-/***/ }),
-
-/***/ 2791:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "b": () => (/* binding */ DocProvider),
-/* harmony export */   "k": () => (/* binding */ useDoc)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93478);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);/**
- * Note: we don't use `PropDoc` as context value on purpose. Metadata is
- * currently stored inside the MDX component, but we may want to change that in
- * the future. This layer is a good opportunity to decouple storage from
- * consuming API, potentially allowing us to provide metadata as both props and
- * route context without duplicating the chunks in the future.
- */function useContextValue(content){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({metadata:content.metadata,frontMatter:content.frontMatter,assets:content.assets,contentTitle:content.contentTitle,toc:content.toc}),[content]);}/**
- * This is a very thin layer around the `content` received from the MDX loader.
- * It provides metadata about the doc to the children tree.
- */function DocProvider({children,content}){const contextValue=useContextValue(content);return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Context.Provider,{value:contextValue},children);}/**
- * Returns the data of the currently browsed doc. Gives access to the doc's MDX
- * Component, front matter, metadata, TOC, etc. When swizzling a low-level
- * component (e.g. the "Edit this page" link) and you need some extra metadata,
- * you don't have to drill the props all the way through the component tree:
- * simply use this hook instead.
- */function useDoc(){const doc=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(doc===null){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .ReactContextError */ .i6('DocProvider');}return doc;}
-
-/***/ }),
-
-/***/ 55132:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "D": () => (/* binding */ DocSidebarItemsExpandedStateProvider),
-/* harmony export */   "f": () => (/* binding */ useDocSidebarItemsExpandedState)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93478);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const EmptyContext=Symbol('EmptyContext');const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(EmptyContext);/**
- * Should be used to wrap one sidebar category level. This provider syncs the
- * expanded states of all sibling categories, and categories can choose to
- * collapse itself if another one is expanded.
- */function DocSidebarItemsExpandedStateProvider({children}){const[expandedItem,setExpandedItem]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(null);const contextValue=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({expandedItem,setExpandedItem}),[expandedItem]);return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Context.Provider,{value:contextValue},children);}function useDocSidebarItemsExpandedState(){const value=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(value===EmptyContext){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .ReactContextError */ .i6('DocSidebarItemsExpandedStateProvider');}return value;}
-
-/***/ }),
-
-/***/ 4049:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "J": () => (/* binding */ useDocsPreferredVersion),
-/* harmony export */   "L5": () => (/* binding */ DocsPreferredVersionContextProvider),
-/* harmony export */   "Oh": () => (/* binding */ useDocsPreferredVersionByPluginId)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(4452);
-/* harmony import */ var _docusaurus_constants__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(12497);
-/* harmony import */ var _utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(96793);
-/* harmony import */ var _utils_docsUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(85919);
-/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(93478);
-/* harmony import */ var _utils_storageUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99200);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const storageKey=pluginId=>`docs-preferred-version-${pluginId}`;const DocsPreferredVersionStorage={save:(pluginId,persistence,versionName)=>{(0,_utils_storageUtils__WEBPACK_IMPORTED_MODULE_1__/* .createStorageSlot */ .WA)(storageKey(pluginId),{persistence}).set(versionName);},read:(pluginId,persistence)=>(0,_utils_storageUtils__WEBPACK_IMPORTED_MODULE_1__/* .createStorageSlot */ .WA)(storageKey(pluginId),{persistence}).get(),clear:(pluginId,persistence)=>{(0,_utils_storageUtils__WEBPACK_IMPORTED_MODULE_1__/* .createStorageSlot */ .WA)(storageKey(pluginId),{persistence}).del();}};/**
- * Initial state is always null as we can't read local storage from node SSR
- */const getInitialState=pluginIds=>Object.fromEntries(pluginIds.map(id=>[id,{preferredVersionName:null}]));/**
- * Read storage for all docs plugins, assigning each doc plugin a preferred
- * version (if found)
- */function readStorageState({pluginIds,versionPersistence,allDocsData}){/**
-     * The storage value we read might be stale, and belong to a version that does
-     * not exist in the site anymore. In such case, we remove the storage value to
-     * avoid downstream errors.
-     */function restorePluginState(pluginId){const preferredVersionNameUnsafe=DocsPreferredVersionStorage.read(pluginId,versionPersistence);const pluginData=allDocsData[pluginId];const versionExists=pluginData.versions.some(version=>version.name===preferredVersionNameUnsafe);if(versionExists){return{preferredVersionName:preferredVersionNameUnsafe};}DocsPreferredVersionStorage.clear(pluginId,versionPersistence);return{preferredVersionName:null};}return Object.fromEntries(pluginIds.map(id=>[id,restorePluginState(id)]));}function useVersionPersistence(){return (0,_utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_2__/* .useThemeConfig */ .L)().docs.versionPersistence;}const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);function useContextValue(){const allDocsData=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__.useAllDocsData)();const versionPersistence=useVersionPersistence();const pluginIds=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>Object.keys(allDocsData),[allDocsData]);// Initial state is empty, as we can't read browser storage in node/SSR
-const[state,setState]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>getInitialState(pluginIds));// On mount, we set the state read from browser storage
-(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{setState(readStorageState({allDocsData,versionPersistence,pluginIds}));},[allDocsData,versionPersistence,pluginIds]);// The API that we expose to consumer hooks (memo for constant object)
-const api=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{function savePreferredVersion(pluginId,versionName){DocsPreferredVersionStorage.save(pluginId,versionPersistence,versionName);setState(s=>({...s,[pluginId]:{preferredVersionName:versionName}}));}return{savePreferredVersion};},[versionPersistence]);return[state,api];}function DocsPreferredVersionContextProviderUnsafe({children}){const value=useContextValue();return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Context.Provider,{value:value},children);}/**
- * This is a maybe-layer. If the docs plugin is not enabled, this provider is a
- * simple pass-through.
- */function DocsPreferredVersionContextProvider({children}){if(_utils_docsUtils__WEBPACK_IMPORTED_MODULE_4__/* .isDocsPluginEnabled */ .cE){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(DocsPreferredVersionContextProviderUnsafe,null,children);}return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,null,children);}function useDocsPreferredVersionContext(){const value=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(!value){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_5__/* .ReactContextError */ .i6('DocsPreferredVersionContextProvider');}return value;}/**
- * Returns a read-write interface to a plugin's preferred version. The
- * "preferred version" is defined as the last version that the user visited.
- * For example, if a user is using v3, even when v4 is later published, the user
- * would still be browsing v3 docs when she opens the website next time. Note,
- * the `preferredVersion` attribute will always be `null` before mount.
- */function useDocsPreferredVersion(pluginId=_docusaurus_constants__WEBPACK_IMPORTED_MODULE_6__/* .DEFAULT_PLUGIN_ID */ .m){const docsData=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__.useDocsData)(pluginId);const[state,api]=useDocsPreferredVersionContext();const{preferredVersionName}=state[pluginId];const preferredVersion=docsData.versions.find(version=>version.name===preferredVersionName)??null;const savePreferredVersionName=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(versionName=>{api.savePreferredVersion(pluginId,versionName);},[api,pluginId]);return{preferredVersion,savePreferredVersionName};}function useDocsPreferredVersionByPluginId(){const allDocsData=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_3__.useAllDocsData)();const[state]=useDocsPreferredVersionContext();function getPluginIdPreferredVersion(pluginId){const docsData=allDocsData[pluginId];const{preferredVersionName}=state[pluginId];return docsData.versions.find(version=>version.name===preferredVersionName)??null;}const pluginIds=Object.keys(allDocsData);return Object.fromEntries(pluginIds.map(id=>[id,getPluginIdPreferredVersion(id)]));}
-
-/***/ }),
-
-/***/ 50003:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "V": () => (/* binding */ useDocsSidebar),
-/* harmony export */   "b": () => (/* binding */ DocsSidebarProvider)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93478);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// Using a Symbol because null is a valid context value (a doc with no sidebar)
-// Inspired by https://github.com/jamiebuilds/unstated-next/blob/master/src/unstated-next.tsx
-const EmptyContext=Symbol('EmptyContext');const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(EmptyContext);/**
- * Provide the current sidebar to your children.
- */function DocsSidebarProvider({children,name,items}){const stableValue=(0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>name&&items?{name,items}:null,[name,items]);return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Context.Provider,{value:stableValue},children);}/**
- * Gets the sidebar that's currently displayed, or `null` if there isn't one
- */function useDocsSidebar(){const value=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(value===EmptyContext){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .ReactContextError */ .i6('DocsSidebarProvider');}return value;}
-
-/***/ }),
-
-/***/ 6141:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "E": () => (/* binding */ useDocsVersion),
-/* harmony export */   "q": () => (/* binding */ DocsVersionProvider)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93478);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);/**
- * Provide the current version's metadata to your children.
- */function DocsVersionProvider({children,version}){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Context.Provider,{value:version},children);}/**
- * Gets the version metadata of the current doc page.
- */function useDocsVersion(){const version=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(version===null){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .ReactContextError */ .i6('DocsVersionProvider');}return version;}
-
-/***/ }),
-
-/***/ 35022:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "M": () => (/* binding */ NavbarMobileSidebarProvider),
-/* harmony export */   "e": () => (/* binding */ useNavbarMobileSidebar)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _navbarSecondaryMenu_content__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(82306);
-/* harmony import */ var _hooks_useWindowSize__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(94980);
-/* harmony import */ var _utils_historyUtils__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(34423);
-/* harmony import */ var _utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(96793);
-/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(93478);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(undefined);function useIsNavbarMobileSidebarDisabled(){const secondaryMenuContent=(0,_navbarSecondaryMenu_content__WEBPACK_IMPORTED_MODULE_1__/* .useNavbarSecondaryMenuContent */ .HY)();const{items}=(0,_utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_2__/* .useThemeConfig */ .L)().navbar;return items.length===0&&!secondaryMenuContent.component;}function useContextValue(){const disabled=useIsNavbarMobileSidebarDisabled();const windowSize=(0,_hooks_useWindowSize__WEBPACK_IMPORTED_MODULE_3__/* .useWindowSize */ .i)();const shouldRender=!disabled&&windowSize==='mobile';const[shown,setShown]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);// Close mobile sidebar on navigation pop
-// Most likely firing when using the Android back button (but not only)
-(0,_utils_historyUtils__WEBPACK_IMPORTED_MODULE_4__/* .useHistoryPopHandler */ .Rb)(()=>{if(shown){setShown(false);// Prevent pop navigation; seems desirable enough
-// See https://github.com/facebook/docusaurus/pull/5462#issuecomment-911699846
-return false;}return undefined;});const toggle=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{setShown(s=>!s);},[]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(windowSize==='desktop'){setShown(false);}},[windowSize]);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({disabled,shouldRender,toggle,shown}),[disabled,shouldRender,toggle,shown]);}function NavbarMobileSidebarProvider({children}){const value=useContextValue();return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Context.Provider,{value:value},children);}function useNavbarMobileSidebar(){const context=react__WEBPACK_IMPORTED_MODULE_0__.useContext(Context);if(context===undefined){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_5__/* .ReactContextError */ .i6('NavbarMobileSidebarProvider');}return context;}
-
-/***/ }),
-
-/***/ 82306:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "HY": () => (/* binding */ useNavbarSecondaryMenuContent),
-/* harmony export */   "Zo": () => (/* binding */ NavbarSecondaryMenuFiller),
-/* harmony export */   "n2": () => (/* binding */ NavbarSecondaryMenuContentProvider)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93478);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const Context=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(null);/** @internal */function NavbarSecondaryMenuContentProvider({children}){const value=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)({component:null,props:null});return/*#__PURE__*/ (// @ts-expect-error: this context is hard to type
-react__WEBPACK_IMPORTED_MODULE_0__.createElement(Context.Provider,{value:value},children));}/** @internal */function useNavbarSecondaryMenuContent(){const value=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(!value){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .ReactContextError */ .i6('NavbarSecondaryMenuContentProvider');}return value[0];}/**
- * This component renders nothing by itself, but it fills the placeholder in the
- * generic secondary menu layout. This reduces coupling between the main layout
- * and the specific page.
- *
- * This kind of feature is often called portal/teleport/gateway/outlet...
- * Various unmaintained React libs exist. Most up-to-date one:
- * https://github.com/gregberge/react-teleporter
- * Not sure any of those is safe regarding concurrent mode.
- */function NavbarSecondaryMenuFiller({component,props}){const context=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(Context);if(!context){throw new _utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .ReactContextError */ .i6('NavbarSecondaryMenuContentProvider');}const[,setContent]=context;// To avoid useless context re-renders, props are memoized shallowly
-const memoizedProps=(0,_utils_reactUtils__WEBPACK_IMPORTED_MODULE_1__/* .useShallowMemoObject */ .Ql)(props);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{// @ts-expect-error: this context is hard to type
-setContent({component,props:memoizedProps});},[setContent,component,memoizedProps]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>()=>setContent({component:null,props:null}),[setContent]);return null;}
-
-/***/ }),
-
-/***/ 20883:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "a": () => (/* binding */ useBackToTopButton)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _utils_scrollUtils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(63735);
-/* harmony import */ var _utils_useLocationChange__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(68265);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//** Wires the logic for the back to top button. */function useBackToTopButton({threshold}){const[shown,setShown]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(false);const isFocusedAnchor=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);const{startScroll,cancelScroll}=(0,_utils_scrollUtils__WEBPACK_IMPORTED_MODULE_1__/* .useSmoothScrollTo */ .Ct)();(0,_utils_scrollUtils__WEBPACK_IMPORTED_MODULE_1__/* .useScrollPosition */ .RF)(({scrollY:scrollTop},lastPosition)=>{const lastScrollTop=lastPosition?.scrollY;// Component is just being mounted. Not really a scroll event from the user.
-// Ignore it.
-if(!lastScrollTop){return;}if(isFocusedAnchor.current){// This scroll position change is triggered by navigating to an anchor.
-// Ignore it.
-isFocusedAnchor.current=false;}else if(scrollTop>=lastScrollTop){// The user has scrolled down to "fight against" the animation. Cancel any
-// animation under progress.
-cancelScroll();setShown(false);}else if(scrollTop{if(locationChangeEvent.location.hash){isFocusedAnchor.current=true;setShown(false);}});return{shown,scrollToTop:()=>startScroll(0)};}
-
-/***/ }),
-
-/***/ 73746:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "h": () => (/* binding */ keyboardFocusedClassName),
-  "t": () => (/* binding */ useKeyboardNavigation)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/styles.css
-// extracted by mini-css-extract-plugin
-
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useKeyboardNavigation.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const keyboardFocusedClassName='navigation-with-keyboard';/**
- * Side-effect that adds the `keyboardFocusedClassName` to the body element when
- * the keyboard has been pressed, or removes it when the mouse is clicked.
- *
- * The presence of this class name signals that the user may be using keyboard
- * for navigation, and the theme **must** add focus outline when this class name
- * is present. (And optionally not if it's absent, for design purposes)
- *
- * Inspired by https://hackernoon.com/removing-that-ugly-focus-ring-and-keeping-it-too-6c8727fefcd2
- */function useKeyboardNavigation(){(0,react.useEffect)(()=>{function handleOutlineStyles(e){if(e.type==='keydown'&&e.key==='Tab'){document.body.classList.add(keyboardFocusedClassName);}if(e.type==='mousedown'){document.body.classList.remove(keyboardFocusedClassName);}}document.addEventListener('keydown',handleOutlineStyles);document.addEventListener('mousedown',handleOutlineStyles);return()=>{document.body.classList.remove(keyboardFocusedClassName);document.removeEventListener('keydown',handleOutlineStyles);document.removeEventListener('mousedown',handleOutlineStyles);};},[]);}
-
-/***/ }),
-
-/***/ 69322:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "N": () => (/* binding */ useLockBodyScroll)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * Side-effect that locks the document body's scroll throughout the lifetime of
- * the containing component. e.g. when the mobile sidebar is expanded.
- */function useLockBodyScroll(lock=true){(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{document.body.style.overflow=lock?'hidden':'visible';return()=>{document.body.style.overflow='visible';};},[lock]);}
-
-/***/ }),
-
-/***/ 99401:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "p": () => (/* binding */ usePrismTheme)
-/* harmony export */ });
-/* harmony import */ var _contexts_colorMode__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(70524);
-/* harmony import */ var _utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96793);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * Returns a color-mode-dependent Prism theme: whatever the user specified in
- * the config. Falls back to `palenight`.
- */function usePrismTheme(){const{prism}=(0,_utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_0__/* .useThemeConfig */ .L)();const{colorMode}=(0,_contexts_colorMode__WEBPACK_IMPORTED_MODULE_1__/* .useColorMode */ .I)();const lightModeTheme=prism.theme;const darkModeTheme=prism.darkTheme||lightModeTheme;const prismTheme=colorMode==='dark'?darkModeTheme:lightModeTheme;return prismTheme;}
-
-/***/ }),
-
-/***/ 78586:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "S": () => (/* binding */ useTOCHighlight)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(96793);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// TODO make the hardcoded theme-classic classnames configurable (or add them
-// to ThemeClassNames?)
-/**
- * If the anchor has no height and is just a "marker" in the DOM; we'll use the
- * parent (normally the link text) rect boundaries instead
- */function getVisibleBoundingClientRect(element){const rect=element.getBoundingClientRect();const hasNoHeight=rect.top===rect.bottom;if(hasNoHeight){return getVisibleBoundingClientRect(element.parentNode);}return rect;}/**
- * Considering we divide viewport into 2 zones of each 50vh, this returns true
- * if an element is in the first zone (i.e., appear in viewport, near the top)
- */function isInViewportTopHalf(boundingRect){return boundingRect.top>0&&boundingRect.bottom{const boundingRect=getVisibleBoundingClientRect(anchor);return boundingRect.top>=anchorTopOffset;});if(nextVisibleAnchor){const boundingRect=getVisibleBoundingClientRect(nextVisibleAnchor);// If anchor is in the top half of the viewport: it is the one we consider
-// "active" (unless it's too close to the top and and soon to be scrolled
-// outside viewport)
-if(isInViewportTopHalf(boundingRect)){return nextVisibleAnchor;}// If anchor is in the bottom half of the viewport, or under the viewport,
-// we consider the active anchor is the previous one. This is because the
-// main text appearing in the user screen mostly belong to the previous
-// anchor. Returns null for the first anchor, see
-// https://github.com/facebook/docusaurus/issues/5318
-return anchors[anchors.indexOf(nextVisibleAnchor)-1]??null;}// No anchor under viewport top (i.e. we are at the bottom of the page),
-// highlight the last anchor found
-return anchors[anchors.length-1]??null;}function getLinkAnchorValue(link){return decodeURIComponent(link.href.substring(link.href.indexOf('#')+1));}function getLinks(linkClassName){return Array.from(document.getElementsByClassName(linkClassName));}function getNavbarHeight(){// Not ideal to obtain actual height this way
-// Using TS ! (not ?) because otherwise a bad selector would be un-noticed
-return document.querySelector('.navbar').clientHeight;}function useAnchorTopOffsetRef(){const anchorTopOffsetRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(0);const{navbar:{hideOnScroll}}=(0,_utils_useThemeConfig__WEBPACK_IMPORTED_MODULE_1__/* .useThemeConfig */ .L)();(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{anchorTopOffsetRef.current=hideOnScroll?0:getNavbarHeight();},[hideOnScroll]);return anchorTopOffsetRef;}/**
- * Side-effect that applies the active class name to the TOC heading that the
- * user is currently viewing. Disabled when `config` is undefined.
- */function useTOCHighlight(config){const lastActiveLinkRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(undefined);const anchorTopOffsetRef=useAnchorTopOffsetRef();(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(!config){// No-op, highlighting is disabled
-return()=>{};}const{linkClassName,linkActiveClassName,minHeadingLevel,maxHeadingLevel}=config;function updateLinkActiveClass(link,active){if(active){if(lastActiveLinkRef.current&&lastActiveLinkRef.current!==link){lastActiveLinkRef.current.classList.remove(linkActiveClassName);}link.classList.add(linkActiveClassName);lastActiveLinkRef.current=link;// link.scrollIntoView({block: 'nearest'});
-}else{link.classList.remove(linkActiveClassName);}}function updateActiveLink(){const links=getLinks(linkClassName);const anchors=getAnchors({minHeadingLevel,maxHeadingLevel});const activeAnchor=getActiveAnchor(anchors,{anchorTopOffset:anchorTopOffsetRef.current});const activeLink=links.find(link=>activeAnchor&&activeAnchor.id===getLinkAnchorValue(link));links.forEach(link=>{updateLinkActiveClass(link,link===activeLink);});}document.addEventListener('scroll',updateActiveLink);document.addEventListener('resize',updateActiveLink);updateActiveLink();return()=>{document.removeEventListener('scroll',updateActiveLink);document.removeEventListener('resize',updateActiveLink);};},[config,anchorTopOffsetRef]);}
-
-/***/ }),
-
-/***/ 94980:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "i": () => (/* binding */ useWindowSize)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(19901);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const windowSizes={desktop:'desktop',mobile:'mobile',ssr:'ssr'};const DesktopThresholdWidth=996;function getWindowSize(){if(!_docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__["default"].canUseDOM){return windowSizes.ssr;}return window.innerWidth>DesktopThresholdWidth?windowSizes.desktop:windowSizes.mobile;}const DevSimulateSSR= false&&0;/**
- * Gets the current window size as an enum value. We don't want it to return the
- * actual width value, so that it only re-renders once a breakpoint is crossed.
- *
- * It may return `"ssr"`, which is very important to handle hydration FOUC or
- * layout shifts. You have to handle it explicitly upfront. On the server, you
- * may need to render BOTH the mobile/desktop elements (and hide one of them
- * with mediaquery). We don't return `undefined` on purpose, to make it more
- * explicit.
- *
- * In development mode, this hook will still return `"ssr"` for one second, to
- * catch potential layout shifts, similar to strict mode calling effects twice.
- */function useWindowSize(){const[windowSize,setWindowSize]=(0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(()=>{if(DevSimulateSSR){return'ssr';}return getWindowSize();});(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{function updateWindowSize(){setWindowSize(getWindowSize());}const timeout=DevSimulateSSR?window.setTimeout(updateWindowSize,1000):undefined;window.addEventListener('resize',updateWindowSize);return()=>{window.removeEventListener('resize',updateWindowSize);clearTimeout(timeout);};},[]);return windowSize;}
-
-/***/ }),
-
-/***/ 93945:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Collapsible": () => (/* reexport */ Collapsible),
-  "ErrorBoundaryError": () => (/* reexport */ errorBoundaryUtils/* ErrorBoundaryError */.aG),
-  "ErrorBoundaryTryAgainButton": () => (/* reexport */ errorBoundaryUtils/* ErrorBoundaryTryAgainButton */.Cw),
-  "ErrorCauseBoundary": () => (/* reexport */ errorBoundaryUtils/* ErrorCauseBoundary */.QW),
-  "HtmlClassNameProvider": () => (/* reexport */ metadataUtils/* HtmlClassNameProvider */.FG),
-  "NavbarSecondaryMenuFiller": () => (/* reexport */ content/* NavbarSecondaryMenuFiller */.Zo),
-  "PageMetadata": () => (/* reexport */ metadataUtils/* PageMetadata */.d),
-  "ReactContextError": () => (/* reexport */ reactUtils/* ReactContextError */.i6),
-  "SkipToContentFallbackId": () => (/* reexport */ skipToContentUtils/* SkipToContentFallbackId */.u),
-  "SkipToContentLink": () => (/* reexport */ skipToContentUtils/* SkipToContentLink */.l),
-  "ThemeClassNames": () => (/* reexport */ ThemeClassNames/* ThemeClassNames */.k),
-  "composeProviders": () => (/* reexport */ reactUtils/* composeProviders */.Qc),
-  "createStorageSlot": () => (/* reexport */ storageUtils/* createStorageSlot */.WA),
-  "duplicates": () => (/* reexport */ jsUtils/* duplicates */.l),
-  "filterDocCardListItems": () => (/* reexport */ docsUtils/* filterDocCardListItems */.MN),
-  "isMultiColumnFooterLinks": () => (/* reexport */ footerUtils/* isMultiColumnFooterLinks */.a),
-  "isRegexpStringMatch": () => (/* reexport */ isRegexpStringMatch),
-  "listStorageKeys": () => (/* reexport */ storageUtils/* listStorageKeys */._f),
-  "listTagsByLetters": () => (/* reexport */ listTagsByLetters),
-  "prefersReducedMotion": () => (/* reexport */ accessibilityUtils/* prefersReducedMotion */.n),
-  "processAdmonitionProps": () => (/* reexport */ processAdmonitionProps),
-  "translateTagsPageTitle": () => (/* reexport */ translateTagsPageTitle),
-  "uniq": () => (/* reexport */ jsUtils/* uniq */.j),
-  "useCollapsible": () => (/* reexport */ useCollapsible),
-  "useColorMode": () => (/* reexport */ colorMode/* useColorMode */.I),
-  "useContextualSearchFilters": () => (/* reexport */ searchUtils/* useContextualSearchFilters */._q),
-  "useCurrentSidebarCategory": () => (/* reexport */ docsUtils/* useCurrentSidebarCategory */.jA),
-  "useDocsPreferredVersion": () => (/* reexport */ docsPreferredVersion/* useDocsPreferredVersion */.J),
-  "useEvent": () => (/* reexport */ reactUtils/* useEvent */.zX),
-  "useIsomorphicLayoutEffect": () => (/* reexport */ reactUtils/* useIsomorphicLayoutEffect */.LI),
-  "usePluralForm": () => (/* reexport */ usePluralForm),
-  "usePrevious": () => (/* reexport */ reactUtils/* usePrevious */.D9),
-  "usePrismTheme": () => (/* reexport */ usePrismTheme/* usePrismTheme */.p),
-  "useSearchLinkCreator": () => (/* reexport */ useSearchLinkCreator),
-  "useSearchQueryString": () => (/* reexport */ useSearchQueryString),
-  "useStorageSlot": () => (/* reexport */ storageUtils/* useStorageSlot */.Nk),
-  "useThemeConfig": () => (/* reexport */ useThemeConfig/* useThemeConfig */.L),
-  "useWindowSize": () => (/* reexport */ useWindowSize/* useWindowSize */.i)
-});
-
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/useThemeConfig.js
-var useThemeConfig = __webpack_require__(96793);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/storageUtils.js
-var storageUtils = __webpack_require__(99200);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/searchUtils.js
-var searchUtils = __webpack_require__(39105);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/docsUtils.js
-var docsUtils = __webpack_require__(85919);
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/useDocusaurusContext.js
-var useDocusaurusContext = __webpack_require__(6832);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/usePluralForm.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// We want to ensurer a stable plural form order in all cases
-// It is more convenient and natural to handle "small values" first
-// See https://twitter.com/sebastienlorber/status/1366820663261077510
-const OrderedPluralForms=['zero','one','two','few','many','other'];function sortPluralForms(pluralForms){return OrderedPluralForms.filter(pf=>pluralForms.includes(pf));}// Hardcoded english/fallback implementation
-const EnglishPluralForms={locale:'en',pluralForms:sortPluralForms(['one','other']),select:count=>count===1?'one':'other'};function createLocalePluralForms(locale){const pluralRules=new Intl.PluralRules(locale);return{locale,pluralForms:sortPluralForms(pluralRules.resolvedOptions().pluralCategories),select:count=>pluralRules.select(count)};}/**
- * Poor man's `PluralSelector` implementation, using an English fallback. We
- * want a lightweight, future-proof and good-enough solution. We don't want a
- * perfect and heavy solution.
- *
- * Docusaurus classic theme has only 2 deeply nested labels requiring complex
- * plural rules. We don't want to use `Intl` + `PluralRules` polyfills + full
- * ICU syntax (react-intl) just for that.
- *
- * Notes:
- * - 2021: 92+% Browsers support `Intl.PluralRules`, and support will increase
- * in the future
- * - NodeJS >= 13 has full ICU support by default
- * - In case of "mismatch" between SSR and Browser ICU support, React keeps
- * working!
- */function useLocalePluralForms(){const{i18n:{currentLocale}}=(0,useDocusaurusContext["default"])();return (0,react.useMemo)(()=>{try{return createLocalePluralForms(currentLocale);}catch(err){console.error(`Failed to use Intl.PluralRules for locale "${currentLocale}".
-Docusaurus will fallback to the default (English) implementation.
-Error: ${err.message}
-`);return EnglishPluralForms;}},[currentLocale]);}function selectPluralMessage(pluralMessages,count,localePluralForms){const separator='|';const parts=pluralMessages.split(separator);if(parts.length===1){return parts[0];}if(parts.length>localePluralForms.pluralForms.length){console.error(`For locale=${localePluralForms.locale}, a maximum of ${localePluralForms.pluralForms.length} plural forms are expected (${localePluralForms.pluralForms.join(',')}), but the message contains ${parts.length}: ${pluralMessages}`);}const pluralForm=localePluralForms.select(count);const pluralFormIndex=localePluralForms.pluralForms.indexOf(pluralForm);// In case of not enough plural form messages, we take the last one (other)
-// instead of returning undefined
-return parts[Math.min(pluralFormIndex,parts.length-1)];}/**
- * Reads the current locale and returns an interface very similar to
- * `Intl.PluralRules`.
- */function usePluralForm(){const localePluralForm=useLocalePluralForms();return{selectMessage:(count,pluralMessages)=>selectPluralMessage(pluralMessages,count,localePluralForm)};}
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/ExecutionEnvironment.js
-var ExecutionEnvironment = __webpack_require__(19901);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/accessibilityUtils.js
-var accessibilityUtils = __webpack_require__(39657);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/components/Collapsible/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const DefaultAnimationEasing='ease-in-out';/**
- * This hook is a very thin wrapper around a `useState`.
- */function useCollapsible({initialState}){const[collapsed,setCollapsed]=(0,react.useState)(initialState??false);const toggleCollapsed=(0,react.useCallback)(()=>{setCollapsed(expanded=>!expanded);},[]);return{collapsed,setCollapsed,toggleCollapsed};}const CollapsedStyles={display:'none',overflow:'hidden',height:'0px'};const ExpandedStyles={display:'block',overflow:'visible',height:'auto'};function applyCollapsedStyle(el,collapsed){const collapsedStyles=collapsed?CollapsedStyles:ExpandedStyles;el.style.display=collapsedStyles.display;el.style.overflow=collapsedStyles.overflow;el.style.height=collapsedStyles.height;}/*
-Lex111: Dynamic transition duration is used in Material design, this technique
-is good for a large number of items.
-https://material.io/archive/guidelines/motion/duration-easing.html#duration-easing-dynamic-durations
-https://github.com/mui-org/material-ui/blob/e724d98eba018e55e1a684236a2037e24bcf050c/packages/material-ui/src/styles/createTransitions.js#L40-L43
- */function getAutoHeightDuration(height){if((0,accessibilityUtils/* prefersReducedMotion */.n)()){// Not using 0 because it prevents onTransitionEnd to fire and bubble up :/
-// See https://github.com/facebook/docusaurus/pull/8906
-return 1;}const constant=height/36;return Math.round((4+15*constant**0.25+constant/5)*10);}function useCollapseAnimation({collapsibleRef,collapsed,animation}){const mounted=(0,react.useRef)(false);(0,react.useEffect)(()=>{const el=collapsibleRef.current;function getTransitionStyles(){const height=el.scrollHeight;const duration=animation?.duration??getAutoHeightDuration(height);const easing=animation?.easing??DefaultAnimationEasing;return{transition:`height ${duration}ms ${easing}`,height:`${height}px`};}function applyTransitionStyles(){const transitionStyles=getTransitionStyles();el.style.transition=transitionStyles.transition;el.style.height=transitionStyles.height;}// On mount, we just apply styles, no animated transition
-if(!mounted.current){applyCollapsedStyle(el,collapsed);mounted.current=true;return undefined;}el.style.willChange='height';function startAnimation(){const animationFrame=requestAnimationFrame(()=>{// When collapsing
-if(collapsed){applyTransitionStyles();requestAnimationFrame(()=>{el.style.height=CollapsedStyles.height;el.style.overflow=CollapsedStyles.overflow;});}// When expanding
-else{el.style.display='block';requestAnimationFrame(()=>{applyTransitionStyles();});}});return()=>cancelAnimationFrame(animationFrame);}return startAnimation();},[collapsibleRef,collapsed,animation]);}/**
- * Prevent hydration layout shift before animations are handled imperatively
- * with JS
- */function getSSRStyle(collapsed){if(ExecutionEnvironment["default"].canUseDOM){return undefined;}return collapsed?CollapsedStyles:ExpandedStyles;}function CollapsibleBase({as:As='div',collapsed,children,animation,onCollapseTransitionEnd,className,disableSSRStyle}){const collapsibleRef=(0,react.useRef)(null);useCollapseAnimation({collapsibleRef,collapsed,animation});return/*#__PURE__*/react.createElement(As// @ts-expect-error: the "too complicated type" is produced from
-// "CollapsibleElementType" being a huge union
-,{ref:collapsibleRef// Refs are contravariant, which is not expressible in TS
-,style:disableSSRStyle?undefined:getSSRStyle(collapsed),onTransitionEnd:e=>{if(e.propertyName!=='height'){return;}applyCollapsedStyle(collapsibleRef.current,collapsed);onCollapseTransitionEnd?.(collapsed);},className:className},children);}function CollapsibleLazy({collapsed,...props}){const[mounted,setMounted]=(0,react.useState)(!collapsed);// Updated in effect so that first expansion transition can work
-const[lazyCollapsed,setLazyCollapsed]=(0,react.useState)(collapsed);(0,react.useLayoutEffect)(()=>{if(!collapsed){setMounted(true);}},[collapsed]);(0,react.useLayoutEffect)(()=>{if(mounted){setLazyCollapsed(collapsed);}},[mounted,collapsed]);return mounted?/*#__PURE__*/react.createElement(CollapsibleBase,(0,esm_extends/* default */.Z)({},props,{collapsed:lazyCollapsed})):null;}/**
- * A headless component providing smooth and uniform collapsing behavior. The
- * component will be invisible (zero height) when collapsed. Doesn't provide
- * interactivity by itself: collapse state is toggled through props.
- */function Collapsible({lazy,...props}){const Comp=lazy?CollapsibleLazy:CollapsibleBase;return/*#__PURE__*/react.createElement(Comp,props);}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/ThemeClassNames.js
-var ThemeClassNames = __webpack_require__(18015);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/reactUtils.js
-var reactUtils = __webpack_require__(93478);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/metadataUtils.js + 1 modules
-var metadataUtils = __webpack_require__(44873);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/colorMode.js
-var colorMode = __webpack_require__(70524);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/navbarSecondaryMenu/content.js
-var content = __webpack_require__(82306);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useWindowSize.js
-var useWindowSize = __webpack_require__(94980);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Translate.js + 1 modules
-var Translate = __webpack_require__(11614);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/tagsUtils.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const translateTagsPageTitle=()=>(0,Translate.translate)({id:'theme.tags.tagsPageTitle',message:'Tags',description:'The title of the tag list page'});function getTagLetter(tag){return tag[0].toUpperCase();}/**
- * Takes a list of tags (as provided by the content plugins), and groups them by
- * their initials.
- */function listTagsByLetters(tags){const groups={};Object.values(tags).forEach(tag=>{const initial=getTagLetter(tag.label);groups[initial]??=[];groups[initial].push(tag);});return Object.entries(groups)// Sort letters
-.sort(([letter1],[letter2])=>letter1.localeCompare(letter2)).map(([letter,letterTags])=>{// Sort tags inside a letter
-const sortedTags=letterTags.sort((tag1,tag2)=>tag1.label.localeCompare(tag2.label));return{letter,tags:sortedTags};});}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/historyUtils.js
-var historyUtils = __webpack_require__(34423);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useSearchPage.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const SEARCH_PARAM_QUERY='q';/**
- * Permits to read/write the current search query string
- */function useSearchQueryString(){return (0,historyUtils/* useQueryString */.Nc)(SEARCH_PARAM_QUERY);}/**
- * Permits to create links to the search page with the appropriate query string
- */function useSearchLinkCreator(){const{siteConfig:{baseUrl,themeConfig}}=(0,useDocusaurusContext["default"])();const{algolia:{searchPagePath}}=themeConfig;return (0,react.useCallback)(searchValue=>// Refer to https://github.com/facebook/docusaurus/pull/2838
-// Note: if searchPagePath is falsy, useSearchPage() will not be called
-`${baseUrl}${searchPagePath}?${SEARCH_PARAM_QUERY}=${encodeURIComponent(searchValue)}`,[baseUrl,searchPagePath]);}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/footerUtils.js
-var footerUtils = __webpack_require__(68211);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/regexpUtils.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */ /**
- * Matches a string regex (as provided from the config) against a target in a
- * null-safe fashion, case insensitive and global.
- */function isRegexpStringMatch(regexAsString,valueToTest){if(typeof regexAsString==='undefined'||typeof valueToTest==='undefined'){return false;}return new RegExp(regexAsString,'gi').test(valueToTest);}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/jsUtils.js
-var jsUtils = __webpack_require__(20636);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/usePrismTheme.js
-var usePrismTheme = __webpack_require__(99401);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/docsPreferredVersion.js
-var docsPreferredVersion = __webpack_require__(4049);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/admonitionUtils.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// Workaround because it's difficult in MDX v1 to provide a MDX title as props
-// See https://github.com/facebook/docusaurus/pull/7152#issuecomment-1145779682
-function extractMDXAdmonitionTitle(children){const items=react.Children.toArray(children);const mdxAdmonitionTitle=items.find(item=>/*#__PURE__*/react.isValidElement(item)&&item.props?.mdxType==='mdxAdmonitionTitle');const rest=/*#__PURE__*/react.createElement(react.Fragment,null,items.filter(item=>item!==mdxAdmonitionTitle));return{mdxAdmonitionTitle:mdxAdmonitionTitle?.props.children,rest};}function processAdmonitionProps(props){const{mdxAdmonitionTitle,rest}=extractMDXAdmonitionTitle(props.children);const title=props.title??mdxAdmonitionTitle;return{...props,// Do not return "title: undefined" prop
-// this might create unwanted props overrides when merging props
-// For example: {...default,...props}
-...(title&&{title}),children:rest};}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/skipToContentUtils.js
-var skipToContentUtils = __webpack_require__(66470);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/errorBoundaryUtils.js
-var errorBoundaryUtils = __webpack_require__(73106);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */ /*
- * APIs to document
- *//*
- * APIs kept undocumented, on purpose
- * Note: we still guarantee retro-compatibility on those
- */
-
-/***/ }),
-
-/***/ 18279:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "AnnouncementBarProvider": () => (/* reexport */ announcementBar/* AnnouncementBarProvider */.pl),
-  "BlogPostProvider": () => (/* reexport */ BlogPostProvider),
-  "Collapsible": () => (/* reexport */ lib.Collapsible),
-  "ColorModeProvider": () => (/* reexport */ colorMode/* ColorModeProvider */.S),
-  "DEFAULT_SEARCH_TAG": () => (/* reexport */ searchUtils/* DEFAULT_SEARCH_TAG */.HX),
-  "DocProvider": () => (/* reexport */ doc/* DocProvider */.b),
-  "DocSidebarItemsExpandedStateProvider": () => (/* reexport */ docSidebarItemsExpandedState/* DocSidebarItemsExpandedStateProvider */.D),
-  "DocsPreferredVersionContextProvider": () => (/* reexport */ docsPreferredVersion/* DocsPreferredVersionContextProvider */.L5),
-  "DocsSidebarProvider": () => (/* reexport */ docsSidebar/* DocsSidebarProvider */.b),
-  "DocsVersionProvider": () => (/* reexport */ docsVersion/* DocsVersionProvider */.q),
-  "ErrorBoundaryError": () => (/* reexport */ lib.ErrorBoundaryError),
-  "ErrorBoundaryTryAgainButton": () => (/* reexport */ lib.ErrorBoundaryTryAgainButton),
-  "ErrorCauseBoundary": () => (/* reexport */ lib.ErrorCauseBoundary),
-  "HtmlClassNameProvider": () => (/* reexport */ lib.HtmlClassNameProvider),
-  "NavbarProvider": () => (/* reexport */ NavbarProvider),
-  "NavbarSecondaryMenuFiller": () => (/* reexport */ lib.NavbarSecondaryMenuFiller),
-  "PageMetadata": () => (/* reexport */ lib.PageMetadata),
-  "PluginHtmlClassNameProvider": () => (/* reexport */ metadataUtils/* PluginHtmlClassNameProvider */.VC),
-  "ReactContextError": () => (/* reexport */ lib.ReactContextError),
-  "ScrollControllerProvider": () => (/* reexport */ scrollUtils/* ScrollControllerProvider */.OC),
-  "SkipToContentFallbackId": () => (/* reexport */ lib.SkipToContentFallbackId),
-  "SkipToContentLink": () => (/* reexport */ lib.SkipToContentLink),
-  "ThemeClassNames": () => (/* reexport */ lib.ThemeClassNames),
-  "composeProviders": () => (/* reexport */ lib.composeProviders),
-  "containsLineNumbers": () => (/* reexport */ codeBlockUtils/* containsLineNumbers */.nt),
-  "createStorageSlot": () => (/* reexport */ lib.createStorageSlot),
-  "docVersionSearchTag": () => (/* reexport */ searchUtils/* docVersionSearchTag */.os),
-  "duplicates": () => (/* reexport */ lib.duplicates),
-  "filterDocCardListItems": () => (/* reexport */ lib.filterDocCardListItems),
-  "findFirstCategoryLink": () => (/* reexport */ docsUtils/* findFirstCategoryLink */.Wl),
-  "findSidebarCategory": () => (/* reexport */ docsUtils/* findSidebarCategory */.em),
-  "getPrismCssVariables": () => (/* reexport */ codeBlockUtils/* getPrismCssVariables */.QC),
-  "isActiveSidebarItem": () => (/* reexport */ docsUtils/* isActiveSidebarItem */._F),
-  "isDocsPluginEnabled": () => (/* reexport */ docsUtils/* isDocsPluginEnabled */.cE),
-  "isMultiColumnFooterLinks": () => (/* reexport */ lib.isMultiColumnFooterLinks),
-  "isRegexpStringMatch": () => (/* reexport */ lib.isRegexpStringMatch),
-  "isSamePath": () => (/* reexport */ routesUtils/* isSamePath */.Mg),
-  "keyboardFocusedClassName": () => (/* reexport */ useKeyboardNavigation/* keyboardFocusedClassName */.h),
-  "listStorageKeys": () => (/* reexport */ lib.listStorageKeys),
-  "listTagsByLetters": () => (/* reexport */ lib.listTagsByLetters),
-  "parseCodeBlockTitle": () => (/* reexport */ codeBlockUtils/* parseCodeBlockTitle */.bc),
-  "parseLanguage": () => (/* reexport */ codeBlockUtils/* parseLanguage */.Vo),
-  "parseLines": () => (/* reexport */ codeBlockUtils/* parseLines */.nZ),
-  "prefersReducedMotion": () => (/* reexport */ lib.prefersReducedMotion),
-  "processAdmonitionProps": () => (/* reexport */ lib.processAdmonitionProps),
-  "splitNavbarItems": () => (/* reexport */ splitNavbarItems),
-  "translateTagsPageTitle": () => (/* reexport */ lib.translateTagsPageTitle),
-  "uniq": () => (/* reexport */ lib.uniq),
-  "useAlternatePageUtils": () => (/* reexport */ useAlternatePageUtils/* useAlternatePageUtils */.l),
-  "useAnnouncementBar": () => (/* reexport */ announcementBar/* useAnnouncementBar */.nT),
-  "useBackToTopButton": () => (/* reexport */ useBackToTopButton/* useBackToTopButton */.a),
-  "useBlogPost": () => (/* reexport */ useBlogPost),
-  "useCodeWordWrap": () => (/* reexport */ useCodeWordWrap),
-  "useCollapsible": () => (/* reexport */ lib.useCollapsible),
-  "useColorMode": () => (/* reexport */ lib.useColorMode),
-  "useContextualSearchFilters": () => (/* reexport */ lib.useContextualSearchFilters),
-  "useCurrentSidebarCategory": () => (/* reexport */ lib.useCurrentSidebarCategory),
-  "useDoc": () => (/* reexport */ doc/* useDoc */.k),
-  "useDocById": () => (/* reexport */ docsUtils/* useDocById */.xz),
-  "useDocRouteMetadata": () => (/* reexport */ docsUtils/* useDocRouteMetadata */.hI),
-  "useDocSidebarItemsExpandedState": () => (/* reexport */ docSidebarItemsExpandedState/* useDocSidebarItemsExpandedState */.f),
-  "useDocsPreferredVersion": () => (/* reexport */ lib.useDocsPreferredVersion),
-  "useDocsPreferredVersionByPluginId": () => (/* reexport */ docsPreferredVersion/* useDocsPreferredVersionByPluginId */.Oh),
-  "useDocsSidebar": () => (/* reexport */ docsSidebar/* useDocsSidebar */.V),
-  "useDocsVersion": () => (/* reexport */ docsVersion/* useDocsVersion */.E),
-  "useDocsVersionCandidates": () => (/* reexport */ docsUtils/* useDocsVersionCandidates */.lO),
-  "useEvent": () => (/* reexport */ lib.useEvent),
-  "useFilteredAndTreeifiedTOC": () => (/* reexport */ tocUtils/* useFilteredAndTreeifiedTOC */.b),
-  "useHideableNavbar": () => (/* reexport */ useHideableNavbar),
-  "useHistoryPopHandler": () => (/* reexport */ historyUtils/* useHistoryPopHandler */.Rb),
-  "useHistorySelector": () => (/* reexport */ historyUtils/* useHistorySelector */.xL),
-  "useHomePageRoute": () => (/* reexport */ routesUtils/* useHomePageRoute */.Ns),
-  "useIsomorphicLayoutEffect": () => (/* reexport */ lib.useIsomorphicLayoutEffect),
-  "useKeyboardNavigation": () => (/* reexport */ useKeyboardNavigation/* useKeyboardNavigation */.t),
-  "useLayoutDoc": () => (/* reexport */ docsUtils/* useLayoutDoc */.vY),
-  "useLayoutDocsSidebar": () => (/* reexport */ docsUtils/* useLayoutDocsSidebar */.oz),
-  "useLocalPathname": () => (/* reexport */ useLocalPathname),
-  "useLocationChange": () => (/* reexport */ useLocationChange/* useLocationChange */.S),
-  "useLockBodyScroll": () => (/* reexport */ useLockBodyScroll/* useLockBodyScroll */.N),
-  "useNavbarMobileSidebar": () => (/* reexport */ navbarMobileSidebar/* useNavbarMobileSidebar */.e),
-  "useNavbarSecondaryMenu": () => (/* reexport */ useNavbarSecondaryMenu),
-  "usePluralForm": () => (/* reexport */ lib.usePluralForm),
-  "usePrevious": () => (/* reexport */ lib.usePrevious),
-  "usePrismTheme": () => (/* reexport */ lib.usePrismTheme),
-  "useQueryStringValue": () => (/* reexport */ historyUtils/* useQueryStringValue */._X),
-  "useScrollController": () => (/* reexport */ scrollUtils/* useScrollController */.sG),
-  "useScrollPosition": () => (/* reexport */ scrollUtils/* useScrollPosition */.RF),
-  "useScrollPositionBlocker": () => (/* reexport */ scrollUtils/* useScrollPositionBlocker */.o5),
-  "useSearchLinkCreator": () => (/* reexport */ lib.useSearchLinkCreator),
-  "useSearchQueryString": () => (/* reexport */ lib.useSearchQueryString),
-  "useSidebarBreadcrumbs": () => (/* reexport */ docsUtils/* useSidebarBreadcrumbs */.s1),
-  "useSmoothScrollTo": () => (/* reexport */ scrollUtils/* useSmoothScrollTo */.Ct),
-  "useStorageSlot": () => (/* reexport */ lib.useStorageSlot),
-  "useTOCHighlight": () => (/* reexport */ useTOCHighlight/* useTOCHighlight */.S),
-  "useTabs": () => (/* reexport */ useTabs),
-  "useThemeConfig": () => (/* reexport */ lib.useThemeConfig),
-  "useTitleFormatter": () => (/* reexport */ generalUtils/* useTitleFormatter */.p),
-  "useTreeifiedTOC": () => (/* reexport */ tocUtils/* useTreeifiedTOC */.a),
-  "useWindowSize": () => (/* reexport */ lib.useWindowSize)
-});
-
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/index.js + 6 modules
-var lib = __webpack_require__(93945);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/docSidebarItemsExpandedState.js
-var docSidebarItemsExpandedState = __webpack_require__(55132);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/docsVersion.js
-var docsVersion = __webpack_require__(6141);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/docsSidebar.js
-var docsSidebar = __webpack_require__(50003);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/doc.js
-var doc = __webpack_require__(2791);
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/reactUtils.js
-var reactUtils = __webpack_require__(93478);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/blogPost.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const Context=/*#__PURE__*/react.createContext(null);/**
- * Note: we don't use `PropBlogPostContent` as context value on purpose. Metadata is
- * currently stored inside the MDX component, but we may want to change that in
- * the future.
- */function useContextValue({content,isBlogPostPage}){return (0,react.useMemo)(()=>({metadata:content.metadata,frontMatter:content.frontMatter,assets:content.assets,toc:content.toc,isBlogPostPage}),[content,isBlogPostPage]);}/**
- * This is a very thin layer around the `content` received from the MDX loader.
- * It provides metadata about the blog post to the children tree.
- */function BlogPostProvider({children,content,isBlogPostPage=false}){const contextValue=useContextValue({content,isBlogPostPage});return/*#__PURE__*/react.createElement(Context.Provider,{value:contextValue},children);}/**
- * Returns the data of the currently browsed blog post. Gives access to
- * front matter, metadata, TOC, etc.
- * When swizzling a low-level component (e.g. the "Edit this page" link)
- * and you need some extra metadata, you don't have to drill the props
- * all the way through the component tree: simply use this hook instead.
- */function useBlogPost(){const blogPost=(0,react.useContext)(Context);if(blogPost===null){throw new reactUtils/* ReactContextError */.i6('BlogPostProvider');}return blogPost;}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/docsPreferredVersion.js
-var docsPreferredVersion = __webpack_require__(4049);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/announcementBar.js
-var announcementBar = __webpack_require__(69061);
-// EXTERNAL MODULE: ./node_modules/react-router/esm/react-router.js
-var react_router = __webpack_require__(16550);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/historyUtils.js
-var historyUtils = __webpack_require__(34423);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/jsUtils.js
-var jsUtils = __webpack_require__(20636);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/storageUtils.js
-var storageUtils = __webpack_require__(99200);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/tabsUtils.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// A very rough duck type, but good enough to guard against mistakes while
-// allowing customization
-function isTabItem(comp){const{props}=comp;return!!props&&typeof props==='object'&&'value'in props;}function ensureValidChildren(children){return react.Children.map(children,child=>{// Pass falsy values through: allow conditionally not rendering a tab
-if(!child||/*#__PURE__*/(0,react.isValidElement)(child)&&isTabItem(child)){return child;}// child.type.name will give non-sensical values in prod because of
-// minification, but we assume it won't throw in prod.
-throw new Error(`Docusaurus error: Bad  child <${// @ts-expect-error: guarding against unexpected cases
-typeof child.type==='string'?child.type:child.type.name}>: all children of the  component should be , and every  should have a unique "value" prop.`);})?.filter(Boolean)??[];}function extractChildrenTabValues(children){return ensureValidChildren(children).map(({props:{value,label,attributes,default:isDefault}})=>({value,label,attributes,default:isDefault}));}function ensureNoDuplicateValue(values){const dup=(0,jsUtils/* duplicates */.l)(values,(a,b)=>a.value===b.value);if(dup.length>0){throw new Error(`Docusaurus error: Duplicate values "${dup.map(a=>a.value).join(', ')}" found in . Every value needs to be unique.`);}}function useTabValues(props){const{values:valuesProp,children}=props;return (0,react.useMemo)(()=>{const values=valuesProp??extractChildrenTabValues(children);ensureNoDuplicateValue(values);return values;},[valuesProp,children]);}function isValidValue({value,tabValues}){return tabValues.some(a=>a.value===value);}function getInitialStateValue({defaultValue,tabValues}){if(tabValues.length===0){throw new Error('Docusaurus error: the  component requires at least one  children component');}if(defaultValue){// Warn user about passing incorrect defaultValue as prop.
-if(!isValidValue({value:defaultValue,tabValues})){throw new Error(`Docusaurus error: The  has a defaultValue "${defaultValue}" but none of its children has the corresponding value. Available values are: ${tabValues.map(a=>a.value).join(', ')}. If you intend to show no default tab, use defaultValue={null} instead.`);}return defaultValue;}const defaultTabValue=tabValues.find(tabValue=>tabValue.default)??tabValues[0];if(!defaultTabValue){throw new Error('Unexpected error: 0 tabValues');}return defaultTabValue.value;}function getStorageKey(groupId){if(!groupId){return null;}return`docusaurus.tab.${groupId}`;}function getQueryStringKey({queryString=false,groupId}){if(typeof queryString==='string'){return queryString;}if(queryString===false){return null;}if(queryString===true&&!groupId){throw new Error(`Docusaurus error: The  component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".`);}return groupId??null;}function useTabQueryString({queryString=false,groupId}){const history=(0,react_router/* useHistory */.k6)();const key=getQueryStringKey({queryString,groupId});const value=(0,historyUtils/* useQueryStringValue */._X)(key);const setValue=(0,react.useCallback)(newValue=>{if(!key){return;// no-op
-}const searchParams=new URLSearchParams(history.location.search);searchParams.set(key,newValue);history.replace({...history.location,search:searchParams.toString()});},[key,history]);return[value,setValue];}function useTabStorage({groupId}){const key=getStorageKey(groupId);const[value,storageSlot]=(0,storageUtils/* useStorageSlot */.Nk)(key);const setValue=(0,react.useCallback)(newValue=>{if(!key){return;// no-op
-}storageSlot.set(newValue);},[key,storageSlot]);return[value,setValue];}function useTabs(props){const{defaultValue,queryString=false,groupId}=props;const tabValues=useTabValues(props);const[selectedValue,setSelectedValue]=(0,react.useState)(()=>getInitialStateValue({defaultValue,tabValues}));const[queryStringValue,setQueryString]=useTabQueryString({queryString,groupId});const[storageValue,setStorageValue]=useTabStorage({groupId});// We sync valid querystring/storage value to state on change + hydration
-const valueToSync=(()=>{const value=queryStringValue??storageValue;if(!isValidValue({value,tabValues})){return null;}return value;})();// Sync in a layout/sync effect is important, for useScrollPositionBlocker
-// See https://github.com/facebook/docusaurus/issues/8625
-(0,react.useLayoutEffect)(()=>{if(valueToSync){setSelectedValue(valueToSync);}},[valueToSync]);const selectValue=(0,react.useCallback)(newValue=>{if(!isValidValue({value:newValue,tabValues})){throw new Error(`Can't select invalid tab value=${newValue}`);}setSelectedValue(newValue);setQueryString(newValue);setStorageValue(newValue);},[setQueryString,setStorageValue,tabValues]);return{selectedValue,selectValue,tabValues};}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/navbarMobileSidebar.js
-var navbarMobileSidebar = __webpack_require__(35022);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/navbarSecondaryMenu/content.js
-var navbarSecondaryMenu_content = __webpack_require__(82306);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/navbarSecondaryMenu/display.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const display_Context=/*#__PURE__*/react.createContext(null);function display_useContextValue(){const mobileSidebar=(0,navbarMobileSidebar/* useNavbarMobileSidebar */.e)();const content=(0,navbarSecondaryMenu_content/* useNavbarSecondaryMenuContent */.HY)();const[shown,setShown]=(0,react.useState)(false);const hasContent=content.component!==null;const previousHasContent=(0,reactUtils/* usePrevious */.D9)(hasContent);// When content is become available for the first time (set in useEffect)
-// we set this content to be shown!
-(0,react.useEffect)(()=>{const contentBecameAvailable=hasContent&&!previousHasContent;if(contentBecameAvailable){setShown(true);}},[hasContent,previousHasContent]);// On sidebar close, secondary menu is set to be shown on next re-opening
-// (if any secondary menu content available)
-(0,react.useEffect)(()=>{if(!hasContent){setShown(false);return;}if(!mobileSidebar.shown){setShown(true);}},[mobileSidebar.shown,hasContent]);return (0,react.useMemo)(()=>[shown,setShown],[shown]);}/** @internal */function NavbarSecondaryMenuDisplayProvider({children}){const value=display_useContextValue();return/*#__PURE__*/react.createElement(display_Context.Provider,{value:value},children);}function renderElement(content){if(content.component){const Comp=content.component;return/*#__PURE__*/react.createElement(Comp,content.props);}return undefined;}/** Wires the logic for rendering the mobile navbar secondary menu. */function useNavbarSecondaryMenu(){const value=(0,react.useContext)(display_Context);if(!value){throw new reactUtils/* ReactContextError */.i6('NavbarSecondaryMenuDisplayProvider');}const[shown,setShown]=value;const hide=(0,react.useCallback)(()=>setShown(false),[setShown]);const content=(0,navbarSecondaryMenu_content/* useNavbarSecondaryMenuContent */.HY)();return (0,react.useMemo)(()=>({shown,hide,content:renderElement(content)}),[hide,content,shown]);}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/colorMode.js
-var colorMode = __webpack_require__(70524);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/useAlternatePageUtils.js
-var useAlternatePageUtils = __webpack_require__(13156);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/codeBlockUtils.js
-var codeBlockUtils = __webpack_require__(96066);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/searchUtils.js
-var searchUtils = __webpack_require__(39105);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/docsUtils.js
-var docsUtils = __webpack_require__(85919);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/generalUtils.js
-var generalUtils = __webpack_require__(71427);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/useLocationChange.js
-var useLocationChange = __webpack_require__(68265);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/useDocusaurusContext.js
-var useDocusaurusContext = __webpack_require__(6832);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/useLocalPathname.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * Get the pathname of current route, without the optional site baseUrl.
- * - `/docs/myDoc` => `/docs/myDoc`
- * - `/baseUrl/docs/myDoc` => `/docs/myDoc`
- */function useLocalPathname(){const{siteConfig:{baseUrl}}=(0,useDocusaurusContext["default"])();const{pathname}=(0,react_router/* useLocation */.TH)();return pathname.replace(baseUrl,'/');}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/tocUtils.js
-var tocUtils = __webpack_require__(94462);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/scrollUtils.js
-var scrollUtils = __webpack_require__(63735);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/routesUtils.js
-var routesUtils = __webpack_require__(18407);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/metadataUtils.js + 1 modules
-var metadataUtils = __webpack_require__(44873);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/navbarUtils.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const DefaultNavItemPosition='right';/**
- * Split links by left/right. If position is unspecified, fallback to right.
- */function splitNavbarItems(items){function isLeft(item){return(item.position??DefaultNavItemPosition)==='left';}const leftItems=items.filter(isLeft);const rightItems=items.filter(item=>!isLeft(item));return[leftItems,rightItems];}/**
- * Composes multiple navbar state providers that are mutually dependent and
- * hence can't be re-ordered.
- */function NavbarProvider({children}){return/*#__PURE__*/react.createElement(navbarSecondaryMenu_content/* NavbarSecondaryMenuContentProvider */.n2,null,/*#__PURE__*/react.createElement(navbarMobileSidebar/* NavbarMobileSidebarProvider */.M,null,/*#__PURE__*/react.createElement(NavbarSecondaryMenuDisplayProvider,null,children)));}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useTOCHighlight.js
-var useTOCHighlight = __webpack_require__(78586);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useHideableNavbar.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * Wires the imperative logic of a hideable navbar.
- * @param hideOnScroll If `false`, this hook is basically a no-op.
- */function useHideableNavbar(hideOnScroll){const[isNavbarVisible,setIsNavbarVisible]=(0,react.useState)(hideOnScroll);const isFocusedAnchor=(0,react.useRef)(false);const navbarHeight=(0,react.useRef)(0);const navbarRef=(0,react.useCallback)(node=>{if(node!==null){navbarHeight.current=node.getBoundingClientRect().height;}},[]);(0,scrollUtils/* useScrollPosition */.RF)(({scrollY:scrollTop},lastPosition)=>{if(!hideOnScroll){return;}// Needed mostly for handling rubber band scrolling.
-// See https://github.com/facebook/docusaurus/pull/5721
-if(scrollTop=lastScrollTop){setIsNavbarVisible(false);}else if(scrollTop+windowHeight{if(!hideOnScroll){return;}// See https://github.com/facebook/docusaurus/pull/8059#issuecomment-1239639480
-const currentHash=locationChangeEvent.location.hash;const currentHashAnchor=currentHash?document.getElementById(currentHash.substring(1)):undefined;if(currentHashAnchor){isFocusedAnchor.current=true;setIsNavbarVisible(false);return;}setIsNavbarVisible(true);});return{navbarRef,isNavbarVisible};}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useKeyboardNavigation.js + 1 modules
-var useKeyboardNavigation = __webpack_require__(73746);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useLockBodyScroll.js
-var useLockBodyScroll = __webpack_require__(69322);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useMutationObserver.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const DefaultOptions={attributes:true,characterData:true,childList:true,subtree:true};function useMutationObserver(target,callback,options=DefaultOptions){const stableCallback=(0,reactUtils/* useEvent */.zX)(callback);// MutationObserver options are not nested much
-// so this should be to memo options in 99%
-// TODO handle options.attributeFilter array
-const stableOptions=(0,reactUtils/* useShallowMemoObject */.Ql)(options);(0,react.useEffect)(()=>{const observer=new MutationObserver(stableCallback);if(target){observer.observe(target,stableOptions);}return()=>observer.disconnect();},[target,stableCallback,stableOptions]);}
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useCodeWordWrap.js
-// Callback fires when the "hidden" attribute of a tabpanel changes
-// See https://github.com/facebook/docusaurus/pull/7485
-function useTabBecameVisibleCallback(codeBlockRef,callback){const[hiddenTabElement,setHiddenTabElement]=(0,react.useState)();const updateHiddenTabElement=(0,react.useCallback)(()=>{// No need to observe non-hidden tabs
-// + we want to force a re-render when a tab becomes visible
-setHiddenTabElement(codeBlockRef.current?.closest('[role=tabpanel][hidden]'));},[codeBlockRef,setHiddenTabElement]);(0,react.useEffect)(()=>{updateHiddenTabElement();},[updateHiddenTabElement]);useMutationObserver(hiddenTabElement,mutations=>{mutations.forEach(mutation=>{if(mutation.type==='attributes'&&mutation.attributeName==='hidden'){callback();updateHiddenTabElement();}});},{attributes:true,characterData:false,childList:false,subtree:false});}function useCodeWordWrap(){const[isEnabled,setIsEnabled]=(0,react.useState)(false);const[isCodeScrollable,setIsCodeScrollable]=(0,react.useState)(false);const codeBlockRef=(0,react.useRef)(null);const toggle=(0,react.useCallback)(()=>{const codeElement=codeBlockRef.current.querySelector('code');if(isEnabled){codeElement.removeAttribute('style');}else{codeElement.style.whiteSpace='pre-wrap';// When code wrap is enabled, we want to avoid a scrollbar in any case
-// Ensure that very very long words/strings/tokens still wrap
-codeElement.style.overflowWrap='anywhere';}setIsEnabled(value=>!value);},[codeBlockRef,isEnabled]);const updateCodeIsScrollable=(0,react.useCallback)(()=>{const{scrollWidth,clientWidth}=codeBlockRef.current;const isScrollable=scrollWidth>clientWidth||codeBlockRef.current.querySelector('code').hasAttribute('style');setIsCodeScrollable(isScrollable);},[codeBlockRef]);useTabBecameVisibleCallback(codeBlockRef,updateCodeIsScrollable);(0,react.useEffect)(()=>{updateCodeIsScrollable();},[isEnabled,updateCodeIsScrollable]);(0,react.useEffect)(()=>{window.addEventListener('resize',updateCodeIsScrollable,{passive:true});return()=>{window.removeEventListener('resize',updateCodeIsScrollable);};},[updateCodeIsScrollable]);return{codeBlockRef,isEnabled,isCodeScrollable,toggle};}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/hooks/useBackToTopButton.js
-var useBackToTopButton = __webpack_require__(20883);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/internal.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */ // This re-export permits to handle some level of retro-compatibility. Users
-// might swizzle unsafe components and expose these internal imports. When we
-// move an API from internal to public, former internal imports should keep
-// working, so that the change doesn't become breaking.
-//
-// Important: this line is removed from build output with the
-// "removeThemeInternalReexport" script for CI checks. This ensures that none of
-// our internal code relies on this re-export and that we don't forget to
-// migrate theme internal imports to public imports.
-//
-// eslint-disable-next-line no-restricted-syntax
-
-
-/***/ }),
-
-/***/ 18015:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "k": () => (/* binding */ ThemeClassNames)
-/* harmony export */ });
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */ // Please do not modify the classnames! This is a breaking change, and annoying
-// for users!
-/**
- * These class names are used to style page layouts in Docusaurus, meant to be
- * targeted by user-provided custom CSS selectors.
- */const ThemeClassNames={page:{blogListPage:'blog-list-page',blogPostPage:'blog-post-page',blogTagsListPage:'blog-tags-list-page',blogTagPostListPage:'blog-tags-post-list-page',docsDocPage:'docs-doc-page',docsTagsListPage:'docs-tags-list-page',docsTagDocListPage:'docs-tags-doc-list-page',mdxPage:'mdx-page'},wrapper:{main:'main-wrapper',blogPages:'blog-wrapper',docsPages:'docs-wrapper',mdxPages:'mdx-wrapper'},common:{editThisPage:'theme-edit-this-page',lastUpdated:'theme-last-updated',backToTopButton:'theme-back-to-top-button',codeBlock:'theme-code-block',admonition:'theme-admonition',admonitionType:type=>`theme-admonition-${type}`},layout:{// TODO add other stable classNames here
-},/**
-     * Follows the naming convention "theme-{blog,doc,version,page}?-"
-     */docs:{docVersionBanner:'theme-doc-version-banner',docVersionBadge:'theme-doc-version-badge',docBreadcrumbs:'theme-doc-breadcrumbs',docMarkdown:'theme-doc-markdown',docTocMobile:'theme-doc-toc-mobile',docTocDesktop:'theme-doc-toc-desktop',docFooter:'theme-doc-footer',docFooterTagsRow:'theme-doc-footer-tags-row',docFooterEditMetaRow:'theme-doc-footer-edit-meta-row',docSidebarContainer:'theme-doc-sidebar-container',docSidebarMenu:'theme-doc-sidebar-menu',docSidebarItemCategory:'theme-doc-sidebar-item-category',docSidebarItemLink:'theme-doc-sidebar-item-link',docSidebarItemCategoryLevel:level=>`theme-doc-sidebar-item-category-level-${level}`,docSidebarItemLinkLevel:level=>`theme-doc-sidebar-item-link-level-${level}`// TODO add other stable classNames here
-},blog:{// TODO add other stable classNames here
-}};
-
-/***/ }),
-
-/***/ 39657:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "n": () => (/* binding */ prefersReducedMotion)
-/* harmony export */ });
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function prefersReducedMotion(){return window.matchMedia('(prefers-reduced-motion: reduce)').matches;}
-
-/***/ }),
-
-/***/ 96066:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "QC": () => (/* binding */ getPrismCssVariables),
-/* harmony export */   "Vo": () => (/* binding */ parseLanguage),
-/* harmony export */   "bc": () => (/* binding */ parseCodeBlockTitle),
-/* harmony export */   "nZ": () => (/* binding */ parseLines),
-/* harmony export */   "nt": () => (/* binding */ containsLineNumbers)
-/* harmony export */ });
-/* harmony import */ var parse_numeric_range__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(87594);
-/* harmony import */ var parse_numeric_range__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(parse_numeric_range__WEBPACK_IMPORTED_MODULE_0__);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const codeBlockTitleRegex=/title=(?["'])(?.*?)\1/;const metastringLinesRangeRegex=/\{(?<range>[\d,-]+)\}/;// Supported types of highlight comments
-const commentPatterns={js:{start:'\\/\\/',end:''},jsBlock:{start:'\\/\\*',end:'\\*\\/'},jsx:{start:'\\{\\s*\\/\\*',end:'\\*\\/\\s*\\}'},bash:{start:'#',end:''},html:{start:'<!--',end:'-->'}};function getCommentPattern(languages,magicCommentDirectives){// To be more reliable, the opening and closing comment must match
-const commentPattern=languages.map(lang=>{const{start,end}=commentPatterns[lang];return`(?:${start}\\s*(${magicCommentDirectives.flatMap(d=>[d.line,d.block?.start,d.block?.end].filter(Boolean)).join('|')})\\s*${end})`;}).join('|');// White space is allowed, but otherwise it should be on it's own line
-return new RegExp(`^\\s*(?:${commentPattern})\\s*$`);}/**
- * Select comment styles based on language
- */function getAllMagicCommentDirectiveStyles(lang,magicCommentDirectives){switch(lang){case'js':case'javascript':case'ts':case'typescript':return getCommentPattern(['js','jsBlock'],magicCommentDirectives);case'jsx':case'tsx':return getCommentPattern(['js','jsBlock','jsx'],magicCommentDirectives);case'html':return getCommentPattern(['js','jsBlock','html'],magicCommentDirectives);case'python':case'py':case'bash':return getCommentPattern(['bash'],magicCommentDirectives);case'markdown':case'md':// Text uses HTML, front matter uses bash
-return getCommentPattern(['html','jsx','bash'],magicCommentDirectives);default:// All comment types
-return getCommentPattern(Object.keys(commentPatterns),magicCommentDirectives);}}function parseCodeBlockTitle(metastring){return metastring?.match(codeBlockTitleRegex)?.groups.title??'';}function containsLineNumbers(metastring){return Boolean(metastring?.includes('showLineNumbers'));}/**
- * Gets the language name from the class name (set by MDX).
- * e.g. `"language-javascript"` => `"javascript"`.
- * Returns undefined if there is no language class name.
- */function parseLanguage(className){const languageClassName=className.split(' ').find(str=>str.startsWith('language-'));return languageClassName?.replace(/language-/,'');}/**
- * Parses the code content, strips away any magic comments, and returns the
- * clean content and the highlighted lines marked by the comments or metastring.
- *
- * If the metastring contains a range, the `content` will be returned as-is
- * without any parsing. The returned `lineClassNames` will be a map from that
- * number range to the first magic comment config entry (which _should_ be for
- * line highlight directives.)
- *
- * @param content The raw code with magic comments. Trailing newline will be
- * trimmed upfront.
- * @param options Options for parsing behavior.
- */function parseLines(content,options){let code=content.replace(/\n$/,'');const{language,magicComments,metastring}=options;// Highlighted lines specified in props: don't parse the content
-if(metastring&&metastringLinesRangeRegex.test(metastring)){const linesRange=metastring.match(metastringLinesRangeRegex).groups.range;if(magicComments.length===0){throw new Error(`A highlight range has been given in code block's metastring (\`\`\` ${metastring}), but no magic comment config is available. Docusaurus applies the first magic comment entry's className for metastring ranges.`);}const metastringRangeClassName=magicComments[0].className;const lines=parse_numeric_range__WEBPACK_IMPORTED_MODULE_0___default()(linesRange).filter(n=>n>0).map(n=>[n-1,[metastringRangeClassName]]);return{lineClassNames:Object.fromEntries(lines),code};}if(language===undefined){return{lineClassNames:{},code};}const directiveRegex=getAllMagicCommentDirectiveStyles(language,magicComments);// Go through line by line
-const lines=code.split('\n');const blocks=Object.fromEntries(magicComments.map(d=>[d.className,{start:0,range:''}]));const lineToClassName=Object.fromEntries(magicComments.filter(d=>d.line).map(({className,line})=>[line,className]));const blockStartToClassName=Object.fromEntries(magicComments.filter(d=>d.block).map(({className,block})=>[block.start,className]));const blockEndToClassName=Object.fromEntries(magicComments.filter(d=>d.block).map(({className,block})=>[block.end,className]));for(let lineNumber=0;lineNumber<lines.length;){const line=lines[lineNumber];const match=line.match(directiveRegex);if(!match){// Lines without directives are unchanged
-lineNumber+=1;continue;}const directive=match.slice(1).find(item=>item!==undefined);if(lineToClassName[directive]){blocks[lineToClassName[directive]].range+=`${lineNumber},`;}else if(blockStartToClassName[directive]){blocks[blockStartToClassName[directive]].start=lineNumber;}else if(blockEndToClassName[directive]){blocks[blockEndToClassName[directive]].range+=`${blocks[blockEndToClassName[directive]].start}-${lineNumber-1},`;}lines.splice(lineNumber,1);}code=lines.join('\n');const lineClassNames={};Object.entries(blocks).forEach(([className,{range}])=>{parse_numeric_range__WEBPACK_IMPORTED_MODULE_0___default()(range).forEach(l=>{lineClassNames[l]??=[];lineClassNames[l].push(className);});});return{lineClassNames,code};}function getPrismCssVariables(prismTheme){const mapping={color:'--prism-color',backgroundColor:'--prism-background-color'};const properties={};Object.entries(prismTheme.plain).forEach(([key,value])=>{const varName=mapping[key];if(varName&&typeof value==='string'){properties[varName]=value;}});return properties;}
-
-/***/ }),
-
-/***/ 85919:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "MN": () => (/* binding */ filterDocCardListItems),
-/* harmony export */   "Wl": () => (/* binding */ findFirstCategoryLink),
-/* harmony export */   "_F": () => (/* binding */ isActiveSidebarItem),
-/* harmony export */   "cE": () => (/* binding */ isDocsPluginEnabled),
-/* harmony export */   "em": () => (/* binding */ findSidebarCategory),
-/* harmony export */   "hI": () => (/* binding */ useDocRouteMetadata),
-/* harmony export */   "jA": () => (/* binding */ useCurrentSidebarCategory),
-/* harmony export */   "lO": () => (/* binding */ useDocsVersionCandidates),
-/* harmony export */   "oz": () => (/* binding */ useLayoutDocsSidebar),
-/* harmony export */   "s1": () => (/* binding */ useSidebarBreadcrumbs),
-/* harmony export */   "vY": () => (/* binding */ useLayoutDoc),
-/* harmony export */   "xz": () => (/* binding */ useDocById)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(16550);
-/* harmony import */ var _docusaurus_renderRoutes__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(18790);
-/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4452);
-/* harmony import */ var _contexts_docsPreferredVersion__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(4049);
-/* harmony import */ var _contexts_docsVersion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6141);
-/* harmony import */ var _contexts_docsSidebar__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(50003);
-/* harmony import */ var _jsUtils__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(20636);
-/* harmony import */ var _routesUtils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(18407);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// TODO not ideal, see also "useDocs"
-const isDocsPluginEnabled=!!_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__.useAllDocsData;function useDocById(id){const version=(0,_contexts_docsVersion__WEBPACK_IMPORTED_MODULE_2__/* .useDocsVersion */ .E)();if(!id){return undefined;}const doc=version.docs[id];if(!doc){throw new Error(`no version doc found by id=${id}`);}return doc;}/**
- * Pure function, similar to `Array#find`, but works on the sidebar tree.
- */function findSidebarCategory(sidebar,predicate){for(const item of sidebar){if(item.type==='category'){if(predicate(item)){return item;}const subItem=findSidebarCategory(item.items,predicate);if(subItem){return subItem;}}}return undefined;}/**
- * Best effort to assign a link to a sidebar category. If the category doesn't
- * have a link itself, we link to the first sub item with a link.
- */function findFirstCategoryLink(item){if(item.href){return item.href;}for(const subItem of item.items){if(subItem.type==='link'){return subItem.href;}else if(subItem.type==='category'){const categoryLink=findFirstCategoryLink(subItem);if(categoryLink){return categoryLink;}}// Could be "html" items
-}return undefined;}/**
- * Gets the category associated with the current location. Should only be used
- * on category index pages.
- */function useCurrentSidebarCategory(){const{pathname}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_3__/* .useLocation */ .TH)();const sidebar=(0,_contexts_docsSidebar__WEBPACK_IMPORTED_MODULE_4__/* .useDocsSidebar */ .V)();if(!sidebar){throw new Error('Unexpected: cant find current sidebar in context');}const categoryBreadcrumbs=getSidebarBreadcrumbs({sidebarItems:sidebar.items,pathname,onlyCategories:true});const deepestCategory=categoryBreadcrumbs.slice(-1)[0];if(!deepestCategory){throw new Error(`${pathname} is not associated with a category. useCurrentSidebarCategory() should only be used on category index pages.`);}return deepestCategory;}const isActive=(testedPath,activePath)=>typeof testedPath!=='undefined'&&(0,_routesUtils__WEBPACK_IMPORTED_MODULE_5__/* .isSamePath */ .Mg)(testedPath,activePath);const containsActiveSidebarItem=(items,activePath)=>items.some(subItem=>isActiveSidebarItem(subItem,activePath));/**
- * Checks if a sidebar item should be active, based on the active path.
- */function isActiveSidebarItem(item,activePath){if(item.type==='link'){return isActive(item.href,activePath);}if(item.type==='category'){return isActive(item.href,activePath)||containsActiveSidebarItem(item.items,activePath);}return false;}/**
- * Get the sidebar the breadcrumbs for a given pathname
- * Ordered from top to bottom
- */function getSidebarBreadcrumbs({sidebarItems,pathname,onlyCategories=false}){const breadcrumbs=[];function extract(items){for(const item of items){if(item.type==='category'&&((0,_routesUtils__WEBPACK_IMPORTED_MODULE_5__/* .isSamePath */ .Mg)(item.href,pathname)||extract(item.items))||item.type==='link'&&(0,_routesUtils__WEBPACK_IMPORTED_MODULE_5__/* .isSamePath */ .Mg)(item.href,pathname)){const filtered=onlyCategories&&item.type!=='category';if(!filtered){breadcrumbs.unshift(item);}return true;}}return false;}extract(sidebarItems);return breadcrumbs;}/**
- * Gets the breadcrumbs of the current doc page, based on its sidebar location.
- * Returns `null` if there's no sidebar or breadcrumbs are disabled.
- */function useSidebarBreadcrumbs(){const sidebar=(0,_contexts_docsSidebar__WEBPACK_IMPORTED_MODULE_4__/* .useDocsSidebar */ .V)();const{pathname}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_3__/* .useLocation */ .TH)();const breadcrumbsOption=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__.useActivePlugin)()?.pluginData.breadcrumbs;if(breadcrumbsOption===false||!sidebar){return null;}return getSidebarBreadcrumbs({sidebarItems:sidebar.items,pathname});}/**
- * "Version candidates" are mostly useful for the layout components, which must
- * be able to work on all pages. For example, if a user has `{ type: "doc",
- * docId: "intro" }` as a navbar item, which version does that refer to? We
- * believe that it could refer to at most three version candidates:
- *
- * 1. The **active version**, the one that the user is currently browsing. See
- * {@link useActiveDocContext}.
- * 2. The **preferred version**, the one that the user last visited. See
- * {@link useDocsPreferredVersion}.
- * 3. The **latest version**, the "default". See {@link useLatestVersion}.
- *
- * @param docsPluginId The plugin ID to get versions from.
- * @returns An array of 1~3 versions with priorities defined above, guaranteed
- * to be unique and non-sparse. Will be memoized, hence stable for deps array.
- */function useDocsVersionCandidates(docsPluginId){const{activeVersion}=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__.useActiveDocContext)(docsPluginId);const{preferredVersion}=(0,_contexts_docsPreferredVersion__WEBPACK_IMPORTED_MODULE_6__/* .useDocsPreferredVersion */ .J)(docsPluginId);const latestVersion=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__.useLatestVersion)(docsPluginId);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>(0,_jsUtils__WEBPACK_IMPORTED_MODULE_7__/* .uniq */ .j)([activeVersion,preferredVersion,latestVersion].filter(Boolean)),[activeVersion,preferredVersion,latestVersion]);}/**
- * The layout components, like navbar items, must be able to work on all pages,
- * even on non-doc ones where there's no version context, so a sidebar ID could
- * be ambiguous. This hook would always return a sidebar to be linked to. See
- * also {@link useDocsVersionCandidates} for how this selection is done.
- *
- * @throws This hook throws if a sidebar with said ID is not found.
- */function useLayoutDocsSidebar(sidebarId,docsPluginId){const versions=useDocsVersionCandidates(docsPluginId);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{const allSidebars=versions.flatMap(version=>version.sidebars?Object.entries(version.sidebars):[]);const sidebarEntry=allSidebars.find(sidebar=>sidebar[0]===sidebarId);if(!sidebarEntry){throw new Error(`Can't find any sidebar with id "${sidebarId}" in version${versions.length>1?'s':''} ${versions.map(version=>version.name).join(', ')}".
-Available sidebar ids are:
-- ${allSidebars.map(entry=>entry[0]).join('\n- ')}`);}return sidebarEntry[1];},[sidebarId,versions]);}/**
- * The layout components, like navbar items, must be able to work on all pages,
- * even on non-doc ones where there's no version context, so a doc ID could be
- * ambiguous. This hook would always return a doc to be linked to. See also
- * {@link useDocsVersionCandidates} for how this selection is done.
- *
- * @throws This hook throws if a doc with said ID is not found.
- */function useLayoutDoc(docId,docsPluginId){const versions=useDocsVersionCandidates(docsPluginId);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>{const allDocs=versions.flatMap(version=>version.docs);const doc=allDocs.find(versionDoc=>versionDoc.id===docId);if(!doc){const isDraft=versions.flatMap(version=>version.draftIds).includes(docId);// Drafts should be silently filtered instead of throwing
-if(isDraft){return null;}throw new Error(`Couldn't find any doc with id "${docId}" in version${versions.length>1?'s':''} "${versions.map(version=>version.name).join(', ')}".
-Available doc ids are:
-- ${(0,_jsUtils__WEBPACK_IMPORTED_MODULE_7__/* .uniq */ .j)(allDocs.map(versionDoc=>versionDoc.id)).join('\n- ')}`);}return doc;},[docId,versions]);}// TODO later read version/route directly from context
-/**
- * The docs plugin creates nested routes, with the top-level route providing the
- * version metadata, and the subroutes creating individual doc pages. This hook
- * will match the current location against all known sub-routes.
- *
- * @param props The props received by `@theme/DocPage`
- * @returns The data of the relevant document at the current location, or `null`
- * if no document associated with the current location can be found.
- */function useDocRouteMetadata({route,versionMetadata}){const location=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_3__/* .useLocation */ .TH)();const docRoutes=route.routes;const currentDocRoute=docRoutes.find(docRoute=>(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_3__/* .matchPath */ .LX)(location.pathname,docRoute));if(!currentDocRoute){return null;}// For now, the sidebarName is added as route config: not ideal!
-const sidebarName=currentDocRoute.sidebar;const sidebarItems=sidebarName?versionMetadata.docsSidebars[sidebarName]:undefined;const docElement=(0,_docusaurus_renderRoutes__WEBPACK_IMPORTED_MODULE_8__/* .renderRoutes */ .H)(docRoutes);return{docElement,sidebarName,sidebarItems};}/**
- * Filter categories that don't have a link.
- * @param items
- */function filterDocCardListItems(items){return items.filter(item=>{if(item.type==='category'){return!!findFirstCategoryLink(item);}return true;});}
-
-/***/ }),
-
-/***/ 73106:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Cw": () => (/* binding */ ErrorBoundaryTryAgainButton),
-/* harmony export */   "QW": () => (/* binding */ ErrorCauseBoundary),
-/* harmony export */   "aG": () => (/* binding */ ErrorBoundaryError)
-/* harmony export */ });
-/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(87462);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11614);
-/* harmony import */ var _docusaurus_utils_common__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(79861);
-/* harmony import */ var _docusaurus_utils_common__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(_docusaurus_utils_common__WEBPACK_IMPORTED_MODULE_4__);
-/* harmony import */ var _errorBoundaryUtils_module_css__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(25716);
-/* harmony import */ var _errorBoundaryUtils_module_css__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(_errorBoundaryUtils_module_css__WEBPACK_IMPORTED_MODULE_2__);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function ErrorBoundaryTryAgainButton(props){return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("button",(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)({type:"button"},props),/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__["default"],{id:"theme.ErrorPageContent.tryAgain",description:"The label of the button to try again rendering when the React error boundary captures an error"},"Try again"));}function ErrorBoundaryError({error}){const causalChain=(0,_docusaurus_utils_common__WEBPACK_IMPORTED_MODULE_4__.getErrorCausalChain)(error);const fullMessage=causalChain.map(e=>e.message).join('\n\nCause:\n');return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("p",{className:(_errorBoundaryUtils_module_css__WEBPACK_IMPORTED_MODULE_2___default().errorBoundaryError)},fullMessage);}/**
- * This component is useful to wrap a low-level error into a more meaningful
- * error with extra context, using the ES error-cause feature.
- *
- * <ErrorCauseBoundary
- *   onError={(error) => new Error("extra context message",{cause: error})}
- * >
- *   <RiskyComponent>
- * </ErrorCauseBoundary>
- */class ErrorCauseBoundary extends react__WEBPACK_IMPORTED_MODULE_0__.Component{componentDidCatch(error,errorInfo){throw this.props.onError(error,errorInfo);}render(){return this.props.children;}}
-
-/***/ }),
-
-/***/ 68211:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "a": () => (/* binding */ isMultiColumnFooterLinks)
-/* harmony export */ });
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */ /**
- * A rough duck-typing about whether the `footer.links` is intended to be multi-
- * column.
- */function isMultiColumnFooterLinks(links){return'title'in links[0];}
-
-/***/ }),
-
-/***/ 71427:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "p": () => (/* binding */ useTitleFormatter)
-/* harmony export */ });
-/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6832);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * Formats the page's title based on relevant site config and other contexts.
- */function useTitleFormatter(title){const{siteConfig}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__["default"])();const{title:siteTitle,titleDelimiter}=siteConfig;return title?.trim().length?`${title.trim()} ${titleDelimiter} ${siteTitle}`:siteTitle;}
-
-/***/ }),
-
-/***/ 34423:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Nc": () => (/* binding */ useQueryString),
-/* harmony export */   "Rb": () => (/* binding */ useHistoryPopHandler),
-/* harmony export */   "_X": () => (/* binding */ useQueryStringValue),
-/* harmony export */   "xL": () => (/* binding */ useHistorySelector)
-/* harmony export */ });
-/* unused harmony export useQueryStringKeySetter */
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16550);
-/* harmony import */ var use_sync_external_store_shim__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61688);
-/* harmony import */ var _reactUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(93478);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// @ts-expect-error: TODO temporary until React 18 upgrade
-/**
- * Permits to register a handler that will be called on history actions (pop,
- * push, replace). If the handler returns `false`, the navigation transition
- * will be blocked/cancelled.
- */function useHistoryActionHandler(handler){const history=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_2__/* .useHistory */ .k6)();const stableHandler=(0,_reactUtils__WEBPACK_IMPORTED_MODULE_3__/* .useEvent */ .zX)(handler);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(// See https://github.com/remix-run/history/blob/main/docs/blocking-transitions.md
-()=>history.block((location,action)=>stableHandler(location,action)),[history,stableHandler]);}/**
- * Permits to register a handler that will be called on history pop navigation
- * (backward/forward). If the handler returns `false`, the backward/forward
- * transition will be blocked. Unfortunately there's no good way to detect the
- * "direction" (backward/forward) of the POP event.
- */function useHistoryPopHandler(handler){useHistoryActionHandler((location,action)=>{if(action==='POP'){// Maybe block navigation if handler returns false
-return handler(location,action);}// Don't block other navigation actions
-return undefined;});}/**
- * Permits to efficiently subscribe to a slice of the history
- * See https://thisweekinreact.com/articles/useSyncExternalStore-the-underrated-react-api
- * @param selector
- */function useHistorySelector(selector){const history=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_2__/* .useHistory */ .k6)();return (0,use_sync_external_store_shim__WEBPACK_IMPORTED_MODULE_1__.useSyncExternalStore)(history.listen,()=>selector(history),()=>selector(history));}/**
- * Permits to efficiently subscribe to a specific querystring value
- * @param key
- */function useQueryStringValue(key){return useHistorySelector(history=>{if(key===null){return null;}return new URLSearchParams(history.location.search).get(key);});}function useQueryStringKeySetter(){const history=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_2__/* .useHistory */ .k6)();return (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((key,newValue,options)=>{const searchParams=new URLSearchParams(history.location.search);if(newValue){searchParams.set(key,newValue);}else{searchParams.delete(key);}const updaterFn=options?.push?history.push:history.replace;updaterFn({search:searchParams.toString()});},[history]);}function useQueryString(key){const value=useQueryStringValue(key)??'';const setQueryString=useQueryStringKeySetter();return[value,(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((newValue,options)=>{setQueryString(key,newValue,options);},[setQueryString,key])];}
-
-/***/ }),
-
-/***/ 20636:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "j": () => (/* binding */ uniq),
-/* harmony export */   "l": () => (/* binding */ duplicates)
-/* harmony export */ });
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */ // A replacement of lodash in client code
-/**
- * Gets the duplicate values in an array.
- * @param arr The array.
- * @param comparator Compares two values and returns `true` if they are equal
- * (duplicated).
- * @returns Value of the elements `v` that have a preceding element `u` where
- * `comparator(u, v) === true`. Values within the returned array are not
- * guaranteed to be unique.
- */function duplicates(arr,comparator=(a,b)=>a===b){return arr.filter((v,vIndex)=>arr.findIndex(u=>comparator(u,v))!==vIndex);}/**
- * Remove duplicate array items (similar to `_.uniq`)
- * @param arr The array.
- * @returns An array with duplicate elements removed by reference comparison.
- */function uniq(arr){// Note: had problems with [...new Set()]: https://github.com/facebook/docusaurus/issues/4972#issuecomment-863895061
-return Array.from(new Set(arr));}
-
-/***/ }),
-
-/***/ 44873:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "FG": () => (/* binding */ HtmlClassNameProvider),
-  "d": () => (/* binding */ PageMetadata),
-  "VC": () => (/* binding */ PluginHtmlClassNameProvider)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/clsx/dist/clsx.m.js
-var clsx_m = __webpack_require__(86010);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/Head.js
-var Head = __webpack_require__(32411);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/routeContext.js
-var routeContext = __webpack_require__(66041);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/exports/useRouteContext.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function useRouteContext(){const context=react.useContext(routeContext/* Context */._);if(!context){throw new Error('Unexpected: no Docusaurus route context found');}return context;}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/useBaseUrl.js
-var useBaseUrl = __webpack_require__(51402);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/generalUtils.js
-var generalUtils = __webpack_require__(71427);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/metadataUtils.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * Helper component to manipulate page metadata and override site defaults.
- * Works in the same way as Helmet.
- */function PageMetadata({title,description,keywords,image,children}){const pageTitle=(0,generalUtils/* useTitleFormatter */.p)(title);const{withBaseUrl}=(0,useBaseUrl.useBaseUrlUtils)();const pageImage=image?withBaseUrl(image,{absolute:true}):undefined;return/*#__PURE__*/react.createElement(Head/* default */.Z,null,title&&/*#__PURE__*/react.createElement("title",null,pageTitle),title&&/*#__PURE__*/react.createElement("meta",{property:"og:title",content:pageTitle}),description&&/*#__PURE__*/react.createElement("meta",{name:"description",content:description}),description&&/*#__PURE__*/react.createElement("meta",{property:"og:description",content:description}),keywords&&/*#__PURE__*/react.createElement("meta",{name:"keywords",content:// https://github.com/microsoft/TypeScript/issues/17002
-Array.isArray(keywords)?keywords.join(','):keywords}),pageImage&&/*#__PURE__*/react.createElement("meta",{property:"og:image",content:pageImage}),pageImage&&/*#__PURE__*/react.createElement("meta",{name:"twitter:image",content:pageImage}),children);}const HtmlClassNameContext=/*#__PURE__*/react.createContext(undefined);/**
- * Every layer of this provider will append a class name to the HTML element.
- * There's no consumer for this hook: it's side-effect-only. This wrapper is
- * necessary because Helmet does not "merge" classes.
- * @see https://github.com/staylor/react-helmet-async/issues/161
- */function HtmlClassNameProvider({className:classNameProp,children}){const classNameContext=react.useContext(HtmlClassNameContext);const className=(0,clsx_m["default"])(classNameContext,classNameProp);return/*#__PURE__*/react.createElement(HtmlClassNameContext.Provider,{value:className},/*#__PURE__*/react.createElement(Head/* default */.Z,null,/*#__PURE__*/react.createElement("html",{className:className})),children);}function pluginNameToClassName(pluginName){return`plugin-${pluginName.replace(/docusaurus-(?:plugin|theme)-(?:content-)?/gi,'')}`;}/**
- * A very thin wrapper around `HtmlClassNameProvider` that adds the plugin ID +
- * name to the HTML class name.
- */function PluginHtmlClassNameProvider({children}){const routeContext=useRouteContext();const nameClass=pluginNameToClassName(routeContext.plugin.name);const idClass=`plugin-id-${routeContext.plugin.id}`;return/*#__PURE__*/react.createElement(HtmlClassNameProvider,{className:(0,clsx_m["default"])(nameClass,idClass)},children);}
-
-/***/ }),
-
-/***/ 93478:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "D9": () => (/* binding */ usePrevious),
-/* harmony export */   "LI": () => (/* binding */ useIsomorphicLayoutEffect),
-/* harmony export */   "Qc": () => (/* binding */ composeProviders),
-/* harmony export */   "Ql": () => (/* binding */ useShallowMemoObject),
-/* harmony export */   "i6": () => (/* binding */ ReactContextError),
-/* harmony export */   "zX": () => (/* binding */ useEvent)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(19901);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * This hook is like `useLayoutEffect`, but without the SSR warning.
- * It seems hacky but it's used in many React libs (Redux, Formik...).
- * Also mentioned here: https://github.com/facebook/react/issues/16956
- *
- * It is useful when you need to update a ref as soon as possible after a React
- * render (before `useEffect`).
- */const useIsomorphicLayoutEffect=_docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__["default"].canUseDOM?react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect:react__WEBPACK_IMPORTED_MODULE_0__.useEffect;/**
- * Temporary userland implementation until an official hook is implemented
- * See RFC: https://github.com/reactjs/rfcs/pull/220
- *
- * Permits to transform an unstable callback (like an arrow function provided as
- * props) to a "stable" callback that is safe to use in a `useEffect` dependency
- * array. Useful to avoid React stale closure problems + avoid useless effect
- * re-executions.
- *
- * This generally works but has some potential drawbacks, such as
- * https://github.com/facebook/react/issues/16956#issuecomment-536636418
- */function useEvent(callback){const ref=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(callback);useIsomorphicLayoutEffect(()=>{ref.current=callback;},[callback]);// @ts-expect-error: TS is right that this callback may be a supertype of T,
-// but good enough for our use
-return (0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)((...args)=>ref.current(...args),[]);}/**
- * Gets `value` from the last render.
- */function usePrevious(value){const ref=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();useIsomorphicLayoutEffect(()=>{ref.current=value;});return ref.current;}/**
- * This error is thrown when a context is consumed outside its provider. Allows
- * reusing a generic error message format and reduces bundle size. The hook's
- * name will be extracted from its stack, so only the provider's name is needed.
- */class ReactContextError extends Error{constructor(providerName,additionalInfo){super();this.name='ReactContextError';this.message=`Hook ${this.stack?.split('\n')[1]?.match(/at (?:\w+\.)?(?<name>\w+)/)?.groups.name??''} is called outside the <${providerName}>. ${additionalInfo??''}`;}}/**
- * Shallow-memoize an object. This means the returned object will be the same as
- * the previous render if the property keys and values did not change. This
- * works for simple cases: when property values are primitives or stable
- * objects.
- *
- * @param obj
- */function useShallowMemoObject(obj){const deps=Object.entries(obj);// Sort by keys to make it order-insensitive
-deps.sort((a,b)=>a[0].localeCompare(b[0]));// eslint-disable-next-line react-hooks/exhaustive-deps
-return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>obj,deps.flat());}/**
- * Creates a single React provider from an array of existing providers
- * assuming providers only take "children" as props.
- *
- * Prevents the annoying React element nesting
- * Example here: https://getfrontend.tips/compose-multiple-react-providers/
- *
- * The order matters:
- * - The first provider is at the top of the tree.
- * - The last provider is the most nested one
- *
- * @param providers array of providers to compose
- */function composeProviders(providers){// Creates a single React component: it's cheaper to compose JSX elements
-return({children})=>/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment,null,providers.reduceRight((element,CurrentProvider)=>/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(CurrentProvider,null,element),children));}
-
-/***/ }),
-
-/***/ 18407:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Mg": () => (/* binding */ isSamePath),
-/* harmony export */   "Ns": () => (/* binding */ useHomePageRoute)
-/* harmony export */ });
-/* unused harmony export findHomePageRoute */
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _generated_routes__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(77763);
-/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6832);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * Compare the 2 paths, case insensitive and ignoring trailing slash
- */function isSamePath(path1,path2){const normalize=pathname=>(!pathname||pathname.endsWith('/')?pathname:`${pathname}/`)?.toLowerCase();return normalize(path1)===normalize(path2);}/**
- * Note that sites don't always have a homepage in practice, so we can't assume
- * that linking to '/' is always safe.
- * @see https://github.com/facebook/docusaurus/pull/6517#issuecomment-1048709116
- */function findHomePageRoute({baseUrl,routes:initialRoutes}){function isHomePageRoute(route){return route.path===baseUrl&&route.exact===true;}function isHomeParentRoute(route){return route.path===baseUrl&&!route.exact;}function doFindHomePageRoute(routes){if(routes.length===0){return undefined;}const homePage=routes.find(isHomePageRoute);if(homePage){return homePage;}const indexSubRoutes=routes.filter(isHomeParentRoute).flatMap(route=>route.routes??[]);return doFindHomePageRoute(indexSubRoutes);}return doFindHomePageRoute(initialRoutes);}/**
- * Fetches the route that points to "/". Use this instead of the naive "/",
- * because the homepage may not exist.
- */function useHomePageRoute(){const{baseUrl}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_2__["default"])().siteConfig;return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>findHomePageRoute({routes:_generated_routes__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z,baseUrl}),[baseUrl]);}
-
-/***/ }),
-
-/***/ 63735:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Ct": () => (/* binding */ useSmoothScrollTo),
-/* harmony export */   "OC": () => (/* binding */ ScrollControllerProvider),
-/* harmony export */   "RF": () => (/* binding */ useScrollPosition),
-/* harmony export */   "o5": () => (/* binding */ useScrollPositionBlocker),
-/* harmony export */   "sG": () => (/* binding */ useScrollController)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(19901);
-/* harmony import */ var _docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(5730);
-/* harmony import */ var _reactUtils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(93478);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function useScrollControllerContextValue(){const scrollEventsEnabledRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(true);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({scrollEventsEnabledRef,enableScrollEvents:()=>{scrollEventsEnabledRef.current=true;},disableScrollEvents:()=>{scrollEventsEnabledRef.current=false;}}),[]);}const ScrollMonitorContext=/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext(undefined);function ScrollControllerProvider({children}){const value=useScrollControllerContextValue();return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(ScrollMonitorContext.Provider,{value:value},children);}/**
- * We need a way to update the scroll position while ignoring scroll events
- * so as not to toggle Navbar/BackToTop visibility.
- *
- * This API permits to temporarily disable/ignore scroll events. Motivated by
- * https://github.com/facebook/docusaurus/pull/5618
- */function useScrollController(){const context=(0,react__WEBPACK_IMPORTED_MODULE_0__.useContext)(ScrollMonitorContext);if(context==null){throw new _reactUtils__WEBPACK_IMPORTED_MODULE_3__/* .ReactContextError */ .i6('ScrollControllerProvider');}return context;}const getScrollPosition=()=>_docusaurus_ExecutionEnvironment__WEBPACK_IMPORTED_MODULE_1__["default"].canUseDOM?{scrollX:window.pageXOffset,scrollY:window.pageYOffset}:null;/**
- * This hook fires an effect when the scroll position changes. The effect will
- * be provided with the before/after scroll positions. Note that the effect may
- * not be always run: if scrolling is disabled through `useScrollController`, it
- * will be a no-op.
- *
- * @see {@link useScrollController}
- */function useScrollPosition(effect,deps=[]){const{scrollEventsEnabledRef}=useScrollController();const lastPositionRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(getScrollPosition());const dynamicEffect=(0,_reactUtils__WEBPACK_IMPORTED_MODULE_3__/* .useEvent */ .zX)(effect);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{const handleScroll=()=>{if(!scrollEventsEnabledRef.current){return;}const currentPosition=getScrollPosition();dynamicEffect(currentPosition,lastPositionRef.current);lastPositionRef.current=currentPosition;};const opts={passive:true};handleScroll();window.addEventListener('scroll',handleScroll,opts);return()=>window.removeEventListener('scroll',handleScroll,opts);// eslint-disable-next-line react-hooks/exhaustive-deps
-},[dynamicEffect,scrollEventsEnabledRef,...deps]);}function useScrollPositionSaver(){const lastElementRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)({elem:null,top:0});const save=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(elem=>{lastElementRef.current={elem,top:elem.getBoundingClientRect().top};},[]);const restore=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(()=>{const{current:{elem,top}}=lastElementRef;if(!elem){return{restored:false};}const newTop=elem.getBoundingClientRect().top;const heightDiff=newTop-top;if(heightDiff){window.scrollBy({left:0,top:heightDiff});}lastElementRef.current={elem:null,top:0};return{restored:heightDiff!==0};},[]);return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>({save,restore}),[restore,save]);}/**
- * This hook permits to "block" the scroll position of a DOM element.
- * The idea is that we should be able to update DOM content above this element
- * but the screen position of this element should not change.
- *
- * Feature motivated by the Tabs groups: clicking on a tab may affect tabs of
- * the same group upper in the tree, yet to avoid a bad UX, the clicked tab must
- * remain under the user mouse.
- *
- * @see https://github.com/facebook/docusaurus/pull/5618
- */function useScrollPositionBlocker(){const scrollController=useScrollController();const scrollPositionSaver=useScrollPositionSaver();const nextLayoutEffectCallbackRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(undefined);const blockElementScrollPositionUntilNextRender=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(el=>{scrollPositionSaver.save(el);scrollController.disableScrollEvents();nextLayoutEffectCallbackRef.current=()=>{const{restored}=scrollPositionSaver.restore();nextLayoutEffectCallbackRef.current=undefined;// Restoring the former scroll position will trigger a scroll event. We
-// need to wait for next scroll event to happen before enabling the
-// scrollController events again.
-if(restored){const handleScrollRestoreEvent=()=>{scrollController.enableScrollEvents();window.removeEventListener('scroll',handleScrollRestoreEvent);};window.addEventListener('scroll',handleScrollRestoreEvent);}else{scrollController.enableScrollEvents();}};},[scrollController,scrollPositionSaver]);(0,react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect)(()=>{// Queuing permits to restore scroll position after all useLayoutEffect
-// have run, and yet preserve the sync nature of the scroll restoration
-// See https://github.com/facebook/docusaurus/issues/8625
-queueMicrotask(()=>nextLayoutEffectCallbackRef.current?.());});return{blockElementScrollPositionUntilNextRender};}function smoothScrollNative(top){window.scrollTo({top,behavior:'smooth'});return()=>{// Nothing to cancel, it's natively cancelled if user tries to scroll down
-};}function smoothScrollPolyfill(top){let raf=null;const isUpScroll=document.documentElement.scrollTop>top;function rafRecursion(){const currentScroll=document.documentElement.scrollTop;if(isUpScroll&¤tScroll>top||!isUpScroll&¤tScroll<top){raf=requestAnimationFrame(rafRecursion);window.scrollTo(0,Math.floor((currentScroll-top)*0.85)+top);}}rafRecursion();// Break the recursion. Prevents the user from "fighting" against that
-// recursion producing a weird UX
-return()=>raf&&cancelAnimationFrame(raf);}/**
- * A "smart polyfill" of `window.scrollTo({ top, behavior: "smooth" })`.
- * This currently always uses a polyfilled implementation unless
- * `scroll-behavior: smooth` has been set in CSS, because native support
- * detection for scroll behavior seems unreliable.
- *
- * This hook does not do anything by itself: it returns a start and a stop
- * handle. You can execute either handle at any time.
- */function useSmoothScrollTo(){const cancelRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);const isBrowser=(0,_docusaurus_useIsBrowser__WEBPACK_IMPORTED_MODULE_2__["default"])();// Not all have support for smooth scrolling (particularly Safari mobile iOS)
-// TODO proper detection is currently unreliable!
-// see https://github.com/wessberg/scroll-behavior-polyfill/issues/16
-// For now, we only use native scroll behavior if smooth is already set,
-// because otherwise the polyfill produces a weird UX when both CSS and JS try
-// to scroll a page, and they cancel each other.
-const supportsNativeSmoothScrolling=isBrowser&&getComputedStyle(document.documentElement).scrollBehavior==='smooth';return{startScroll:top=>{cancelRef.current=supportsNativeSmoothScrolling?smoothScrollNative(top):smoothScrollPolyfill(top);},cancelScroll:()=>cancelRef.current?.()};}
-
-/***/ }),
-
-/***/ 39105:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "HX": () => (/* binding */ DEFAULT_SEARCH_TAG),
-/* harmony export */   "_q": () => (/* binding */ useContextualSearchFilters),
-/* harmony export */   "os": () => (/* binding */ docVersionSearchTag)
-/* harmony export */ });
-/* harmony import */ var _docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(4452);
-/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6832);
-/* harmony import */ var _contexts_docsPreferredVersion__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(4049);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */const DEFAULT_SEARCH_TAG='default';/** The search tag to append as each doc's metadata. */function docVersionSearchTag(pluginId,versionName){return`docs-${pluginId}-${versionName}`;}/**
- * Gets the relevant context information for contextual search.
- *
- * The value is generic and not coupled to Algolia/DocSearch, since we may want
- * to support multiple search engines, or allowing users to use their own search
- * engine solution.
- */function useContextualSearchFilters(){const{i18n}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__["default"])();const allDocsData=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__.useAllDocsData)();const activePluginAndVersion=(0,_docusaurus_plugin_content_docs_client__WEBPACK_IMPORTED_MODULE_1__.useActivePluginAndVersion)();const docsPreferredVersionByPluginId=(0,_contexts_docsPreferredVersion__WEBPACK_IMPORTED_MODULE_2__/* .useDocsPreferredVersionByPluginId */ .Oh)();// This can't use more specialized hooks because we are mapping over all
-// plugin instances.
-function getDocPluginTags(pluginId){const activeVersion=activePluginAndVersion?.activePlugin.pluginId===pluginId?activePluginAndVersion.activeVersion:undefined;const preferredVersion=docsPreferredVersionByPluginId[pluginId];const latestVersion=allDocsData[pluginId].versions.find(v=>v.isLast);const version=activeVersion??preferredVersion??latestVersion;return docVersionSearchTag(pluginId,version.name);}const tags=[DEFAULT_SEARCH_TAG,...Object.keys(allDocsData).map(getDocPluginTags)];return{locale:i18n.currentLocale,tags};}
-
-/***/ }),
-
-/***/ 66470:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "l": () => (/* binding */ SkipToContentLink),
-/* harmony export */   "u": () => (/* binding */ SkipToContentFallbackId)
-/* harmony export */ });
-/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(87462);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(16550);
-/* harmony import */ var _docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(11614);
-/* harmony import */ var _useLocationChange__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68265);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * The id of the element that should become focused on a page
- * that does not have a <main> html tag.
- * Focusing the Docusaurus Layout children is a reasonable fallback.
- *
- * __ prefix allows search crawlers (Algolia/DocSearch) to ignore anchors
- * https://github.com/facebook/docusaurus/issues/8883#issuecomment-1516328368
- */const SkipToContentFallbackId='__docusaurus_skipToContent_fallback';/**
- * Returns the skip to content element to focus when the link is clicked.
- */function getSkipToContentTarget(){return(// Try to focus the <main> in priority
-// Note: this will only work if JS is enabled
-// See https://github.com/facebook/docusaurus/issues/6411#issuecomment-1284136069
-document.querySelector('main:first-of-type')??// Then try to focus the fallback element (usually the Layout children)
-document.getElementById(SkipToContentFallbackId));}function programmaticFocus(el){el.setAttribute('tabindex','-1');el.focus();el.removeAttribute('tabindex');}/** This hook wires the logic for a skip-to-content link. */function useSkipToContent(){const containerRef=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(null);const{action}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_2__/* .useHistory */ .k6)();const onClick=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(e=>{e.preventDefault();const targetElement=getSkipToContentTarget();if(targetElement){programmaticFocus(targetElement);}},[]);// "Reset" focus when navigating.
-// See https://github.com/facebook/docusaurus/pull/8204#issuecomment-1276547558
-(0,_useLocationChange__WEBPACK_IMPORTED_MODULE_3__/* .useLocationChange */ .S)(({location})=>{if(containerRef.current&&!location.hash&&action==='PUSH'){programmaticFocus(containerRef.current);}});return{containerRef,onClick};}const DefaultSkipToContentLabel=(0,_docusaurus_Translate__WEBPACK_IMPORTED_MODULE_1__.translate)({id:'theme.common.skipToMainContent',description:'The skip to content label used for accessibility, allowing to rapidly navigate to main content with keyboard tab/enter navigation',message:'Skip to main content'});function SkipToContentLink(props){const linkLabel=props.children??DefaultSkipToContentLabel;const{containerRef,onClick}=useSkipToContent();return/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("div",{ref:containerRef,role:"region","aria-label":DefaultSkipToContentLabel},/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("a",(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)({},props,{// Note this is a fallback href in case JS is disabled
-// It has limitations, see https://github.com/facebook/docusaurus/issues/6411#issuecomment-1284136069
-href:`#${SkipToContentFallbackId}`,onClick:onClick}),linkLabel));}
-
-/***/ }),
-
-/***/ 99200:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Nk": () => (/* binding */ useStorageSlot),
-/* harmony export */   "WA": () => (/* binding */ createStorageSlot),
-/* harmony export */   "_f": () => (/* binding */ listStorageKeys)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var use_sync_external_store_shim__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61688);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// @ts-expect-error: TODO temp error until React 18 upgrade
-const StorageTypes=(/* unused pure expression or super */ null && (['localStorage','sessionStorage','none']));const DefaultStorageType='localStorage';// window.addEventListener('storage') only works for different windows...
-// so for current window we have to dispatch the event manually
-// Now we can listen for both cross-window / current-window storage changes!
-// see https://stackoverflow.com/a/71177640/82609
-// see https://stackoverflow.com/questions/26974084/listen-for-changes-with-localstorage-on-the-same-window
-function dispatchChangeEvent({key,oldValue,newValue,storage}){// If we set multiple times the same storage value, events should not be fired
-// The native events behave this way, so our manual event dispatch should
-// rather behave exactly the same. Not doing so might create infinite loops.
-// See https://github.com/facebook/docusaurus/issues/8594
-if(oldValue===newValue){return;}const event=document.createEvent('StorageEvent');event.initStorageEvent('storage',false,false,key,oldValue,newValue,window.location.href,storage);window.dispatchEvent(event);}/**
- * Will return `null` if browser storage is unavailable (like running Docusaurus
- * in an iframe). This should NOT be called in SSR.
- *
- * @see https://github.com/facebook/docusaurus/pull/4501
- */function getBrowserStorage(storageType=DefaultStorageType){if(typeof window==='undefined'){throw new Error('Browser storage is not available on Node.js/Docusaurus SSR process.');}if(storageType==='none'){return null;}try{return window[storageType];}catch(err){logOnceBrowserStorageNotAvailableWarning(err);return null;}}let hasLoggedBrowserStorageNotAvailableWarning=false;/**
- * Poor man's memoization to avoid logging multiple times the same warning.
- * Sometimes, `localStorage`/`sessionStorage` is unavailable due to browser
- * policies.
- */function logOnceBrowserStorageNotAvailableWarning(error){if(!hasLoggedBrowserStorageNotAvailableWarning){console.warn(`Docusaurus browser storage is not available.
-Possible reasons: running Docusaurus in an iframe, in an incognito browser session, or using too strict browser privacy settings.`,error);hasLoggedBrowserStorageNotAvailableWarning=true;}}const NoopStorageSlot={get:()=>null,set:()=>{},del:()=>{},listen:()=>()=>{}};// Fail-fast, as storage APIs should not be used during the SSR process
-function createServerStorageSlot(key){function throwError(){throw new Error(`Illegal storage API usage for storage key "${key}".
-Docusaurus storage APIs are not supposed to be called on the server-rendering process.
-Please only call storage APIs in effects and event handlers.`);}return{get:throwError,set:throwError,del:throwError,listen:throwError};}/**
- * Creates an interface to work on a particular key in the storage model.
- * Note that this function only initializes the interface, but doesn't allocate
- * anything by itself (i.e. no side-effects).
- *
- * The API is fail-safe, since usage of browser storage should be considered
- * unreliable. Local storage might simply be unavailable (iframe + browser
- * security) or operations might fail individually. Please assume that using
- * this API can be a no-op. See also https://github.com/facebook/docusaurus/issues/6036
- */function createStorageSlot(key,options){if(typeof window==='undefined'){return createServerStorageSlot(key);}const storage=getBrowserStorage(options?.persistence);if(storage===null){return NoopStorageSlot;}return{get:()=>{try{return storage.getItem(key);}catch(err){console.error(`Docusaurus storage error, can't get key=${key}`,err);return null;}},set:newValue=>{try{const oldValue=storage.getItem(key);storage.setItem(key,newValue);dispatchChangeEvent({key,oldValue,newValue,storage});}catch(err){console.error(`Docusaurus storage error, can't set ${key}=${newValue}`,err);}},del:()=>{try{const oldValue=storage.getItem(key);storage.removeItem(key);dispatchChangeEvent({key,oldValue,newValue:null,storage});}catch(err){console.error(`Docusaurus storage error, can't delete key=${key}`,err);}},listen:onChange=>{try{const listener=event=>{if(event.storageArea===storage&&event.key===key){onChange(event);}};window.addEventListener('storage',listener);return()=>window.removeEventListener('storage',listener);}catch(err){console.error(`Docusaurus storage error, can't listen for changes of key=${key}`,err);return()=>{};}}};}function useStorageSlot(key,options){// Not ideal but good enough: assumes storage slot config is constant
-const storageSlot=(0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(()=>{if(key===null){return NoopStorageSlot;}return createStorageSlot(key,options);}).current();const listen=(0,react__WEBPACK_IMPORTED_MODULE_0__.useCallback)(onChange=>{// Do not try to add a listener during SSR
-if(typeof window==='undefined'){return()=>{};}return storageSlot.listen(onChange);},[storageSlot]);const currentValue=(0,use_sync_external_store_shim__WEBPACK_IMPORTED_MODULE_1__.useSyncExternalStore)(listen,()=>{// TODO this check should be useless after React 18
-if(typeof window==='undefined'){return null;}return storageSlot.get();},()=>null);return[currentValue,storageSlot];}/**
- * Returns a list of all the keys currently stored in browser storage,
- * or an empty list if browser storage can't be accessed.
- */function listStorageKeys(storageType=DefaultStorageType){const browserStorage=getBrowserStorage(storageType);if(!browserStorage){return[];}const keys=[];for(let i=0;i<browserStorage.length;i+=1){const key=browserStorage.key(i);if(key!==null){keys.push(key);}}return keys;}
-
-/***/ }),
-
-/***/ 94462:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "a": () => (/* binding */ useTreeifiedTOC),
-/* harmony export */   "b": () => (/* binding */ useFilteredAndTreeifiedTOC)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function treeifyTOC(flatTOC){const headings=flatTOC.map(heading=>({...heading,parentIndex:-1,children:[]}));// Keep track of which previous index would be the current heading's direct
-// parent. Each entry <i> is the last index of the `headings` array at heading
-// level <i>. We will modify these indices as we iterate through all headings.
-// e.g. if an ### H3 was last seen at index 2, then prevIndexForLevel[3] === 2
-// indices 0 and 1 will remain unused.
-const prevIndexForLevel=Array(7).fill(-1);headings.forEach((curr,currIndex)=>{// Take the last seen index for each ancestor level. the highest index will
-// be the direct ancestor of the current heading.
-const ancestorLevelIndexes=prevIndexForLevel.slice(2,curr.level);curr.parentIndex=Math.max(...ancestorLevelIndexes);// Mark that curr.level was last seen at the current index.
-prevIndexForLevel[curr.level]=currIndex;});const rootNodes=[];// For a given parentIndex, add each Node into that parent's `children` array
-headings.forEach(heading=>{const{parentIndex,...rest}=heading;if(parentIndex>=0){headings[parentIndex].children.push(rest);}else{rootNodes.push(rest);}});return rootNodes;}/**
- * Takes a flat TOC list (from the MDX loader) and treeifies it into what the
- * TOC components expect. Memoized for performance.
- */function useTreeifiedTOC(toc){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>treeifyTOC(toc),[toc]);}function filterTOC({toc,minHeadingLevel,maxHeadingLevel}){function isValid(item){return item.level>=minHeadingLevel&&item.level<=maxHeadingLevel;}return toc.flatMap(item=>{const filteredChildren=filterTOC({toc:item.children,minHeadingLevel,maxHeadingLevel});if(isValid(item)){return[{...item,children:filteredChildren}];}return filteredChildren;});}/**
- * Takes a flat TOC list (from the MDX loader) and treeifies it into what the
- * TOC components expect, applying the `minHeadingLevel` and `maxHeadingLevel`.
- * Memoized for performance.
- *
- * **Important**: this is not the same as `useTreeifiedTOC(toc.filter(...))`,
- * because we have to filter the TOC after it has been treeified. This is mostly
- * to ensure that weird TOC structures preserve their semantics. For example, an
- * h3-h2-h4 sequence should not be treeified as an "h3 > h4" hierarchy with
- * min=3, max=4, but should rather be "[h3, h4]" (since the h2 heading has split
- * the two headings and they are not parent-children)
- */function useFilteredAndTreeifiedTOC({toc,minHeadingLevel,maxHeadingLevel}){return (0,react__WEBPACK_IMPORTED_MODULE_0__.useMemo)(()=>filterTOC({toc:treeifyTOC(toc),minHeadingLevel,maxHeadingLevel}),[toc,minHeadingLevel,maxHeadingLevel]);}
-
-/***/ }),
-
-/***/ 13156:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "l": () => (/* binding */ useAlternatePageUtils)
-/* harmony export */ });
-/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6832);
-/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16550);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * Permits to obtain the url of the current page in another locale, useful to
- * generate hreflang meta headers etc...
- *
- * @see https://developers.google.com/search/docs/advanced/crawling/localized-versions
- */function useAlternatePageUtils(){const{siteConfig:{baseUrl,url},i18n:{defaultLocale,currentLocale}}=(0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__["default"])();const{pathname}=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_1__/* .useLocation */ .TH)();const baseUrlUnlocalized=currentLocale===defaultLocale?baseUrl:baseUrl.replace(`/${currentLocale}/`,'/');const pathnameSuffix=pathname.replace(baseUrl,'');function getLocalizedBaseUrl(locale){return locale===defaultLocale?`${baseUrlUnlocalized}`:`${baseUrlUnlocalized}${locale}/`;}// TODO support correct alternate url when localized site is deployed on
-// another domain
-function createUrl({locale,fullyQualified}){return`${fullyQualified?url:''}${getLocalizedBaseUrl(locale)}${pathnameSuffix}`;}return{createUrl};}
-
-/***/ }),
-
-/***/ 68265:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "S": () => (/* binding */ useLocationChange)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _docusaurus_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16550);
-/* harmony import */ var _reactUtils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(93478);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * Fires an effect when the location changes (which includes hash, query, etc.).
- * Importantly, doesn't fire when there's no previous location: see
- * https://github.com/facebook/docusaurus/pull/6696
- */function useLocationChange(onLocationChange){const location=(0,_docusaurus_router__WEBPACK_IMPORTED_MODULE_1__/* .useLocation */ .TH)();const previousLocation=(0,_reactUtils__WEBPACK_IMPORTED_MODULE_2__/* .usePrevious */ .D9)(location);const onLocationChangeDynamic=(0,_reactUtils__WEBPACK_IMPORTED_MODULE_2__/* .useEvent */ .zX)(onLocationChange);(0,react__WEBPACK_IMPORTED_MODULE_0__.useEffect)(()=>{if(!previousLocation){return;}if(location!==previousLocation){onLocationChangeDynamic({location,previousLocation});}},[onLocationChangeDynamic,location,previousLocation]);}
-
-/***/ }),
-
-/***/ 96793:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "L": () => (/* binding */ useThemeConfig)
-/* harmony export */ });
-/* harmony import */ var _docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6832);
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *//**
- * A convenient/more semantic way to get theme config from context.
- */function useThemeConfig(){return (0,_docusaurus_useDocusaurusContext__WEBPACK_IMPORTED_MODULE_0__["default"])().siteConfig.themeConfig;}
-
-/***/ }),
-
-/***/ 25452:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ Mermaid)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/core/lib/client/exports/useIsBrowser.js
-var useIsBrowser = __webpack_require__(5730);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/core/lib/client/exports/BrowserOnly.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// Similar comp to the one described here:
-// https://www.joshwcomeau.com/react/the-perils-of-rehydration/#abstractions
-function BrowserOnly({children,fallback}){const isBrowser=(0,useIsBrowser["default"])();if(isBrowser){if(typeof children!=='function'&&"production"==='development'){}return/*#__PURE__*/react.createElement(react.Fragment,null,children?.());}return fallback??null;}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/utils/useThemeConfig.js
-var useThemeConfig = __webpack_require__(96793);
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-common/lib/contexts/colorMode.js
-var contexts_colorMode = __webpack_require__(70524);
-// EXTERNAL MODULE: ./node_modules/mermaid/dist/mermaid-ae477ddf.js + 13 modules
-var mermaid_ae477ddf = __webpack_require__(79917);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-mermaid/lib/client/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */// Stable className to allow users to easily target with CSS
-const MermaidContainerClassName='docusaurus-mermaid-container';function useMermaidThemeConfig(){return (0,useThemeConfig/* useThemeConfig */.L)().mermaid;}function useMermaidConfig(){const{colorMode}=(0,contexts_colorMode/* useColorMode */.I)();const mermaidThemeConfig=useMermaidThemeConfig();const theme=mermaidThemeConfig.theme[colorMode];const{options}=mermaidThemeConfig;return (0,react.useMemo)(()=>({startOnLoad:false,...options,theme}),[theme,options]);}function useMermaidSvg(txt,mermaidConfigParam){/*
-    For flexibility, we allow the hook to receive a custom Mermaid config
-    The user could inject a modified version of the default config for example
-     */const defaultMermaidConfig=useMermaidConfig();const mermaidConfig=mermaidConfigParam??defaultMermaidConfig;return (0,react.useMemo)(()=>{/*
-        Mermaid API is really weird :s
-        It is a big mutable singleton with multiple config levels
-        Note: most recent API type definitions are missing
-    
-        There are 2 kind of configs:
-    
-        - siteConfig: some kind of global/protected shared config
-          you can only set with "initialize"
-    
-        - config/currentConfig
-          the config the renderer will use
-          it is reset to siteConfig before each render
-          but it can be altered by the mermaid txt content itself through directives
-    
-        To use a new mermaid config (on colorMode change for example) we should
-        update siteConfig, and it can only be done with initialize()
-         */mermaid_ae477ddf.o.mermaidAPI.initialize(mermaidConfig);/*
-        Random client-only id, we don't care much about it
-        But mermaid want an id so...
-        */const mermaidId=`mermaid-svg-${Math.round(Math.random()*10000000)}`;/*
-        Not even documented: mermaid.render returns the svg string
-        Using the documented form is un-necessary
-         */return mermaid_ae477ddf.o.render(mermaidId,txt);},[txt,mermaidConfig]);}
-// EXTERNAL MODULE: ./node_modules/@docusaurus/theme-mermaid/lib/theme/Mermaid/styles.module.css
-var styles_module = __webpack_require__(25822);
-var styles_module_default = /*#__PURE__*/__webpack_require__.n(styles_module);
-;// CONCATENATED MODULE: ./node_modules/@docusaurus/theme-mermaid/lib/theme/Mermaid/index.js
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */function MermaidDiagram({value}){const svg=useMermaidSvg(value);return/*#__PURE__*/react.createElement("div",{className:`${MermaidContainerClassName} ${(styles_module_default()).container}`// eslint-disable-next-line react/no-danger
-,dangerouslySetInnerHTML:{__html:svg}});}function Mermaid(props){return/*#__PURE__*/react.createElement(BrowserOnly,null,()=>/*#__PURE__*/react.createElement(MermaidDiagram,props));}
-
-/***/ }),
-
-/***/ 54357:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */Object.defineProperty(exports, "__esModule", ({value:true}));// Trailing slash handling depends in some site configuration options
-function applyTrailingSlash(path,options){const{trailingSlash,baseUrl}=options;if(path.startsWith('#')){// Never apply trailing slash to an anchor link
-return path;}// TODO deduplicate: also present in @docusaurus/utils
-function addTrailingSlash(str){return str.endsWith('/')?str:`${str}/`;}function removeTrailingSlash(str){return str.endsWith('/')?str.slice(0,-1):str;}function handleTrailingSlash(str,trailing){return trailing?addTrailingSlash(str):removeTrailingSlash(str);}// undefined = legacy retrocompatible behavior
-if(typeof trailingSlash==='undefined'){return path;}// The trailing slash should be handled before the ?search#hash !
-const[pathname]=path.split(/[#?]/);// Never transform '/' to ''
-// Never remove the baseUrl trailing slash!
-// If baseUrl = /myBase/, we want to emit /myBase/index.html and not
-// /myBase.html! See https://github.com/facebook/docusaurus/issues/5077
-const shouldNotApply=pathname==='/'||pathname===baseUrl;const newPathname=shouldNotApply?pathname:handleTrailingSlash(pathname,trailingSlash);return path.replace(pathname,newPathname);}exports["default"]=applyTrailingSlash;
-
-/***/ }),
-
-/***/ 6009:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-Object.defineProperty(exports, "__esModule", ({value:true}));exports.getErrorCausalChain=void 0;function getErrorCausalChain(error){if(error.cause){return[error,...getErrorCausalChain(error.cause)];}return[error];}exports.getErrorCausalChain=getErrorCausalChain;
-
-/***/ }),
-
-/***/ 79861:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-/**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */var __importDefault=this&&this.__importDefault||function(mod){return mod&&mod.__esModule?mod:{"default":mod};};Object.defineProperty(exports, "__esModule", ({value:true}));exports.getErrorCausalChain=exports.applyTrailingSlash=exports.blogPostContainerID=void 0;// __ prefix allows search crawlers (Algolia/DocSearch) to ignore anchors
-// https://github.com/facebook/docusaurus/issues/8883#issuecomment-1516328368
-exports.blogPostContainerID='__blog-post-container';var applyTrailingSlash_1=__webpack_require__(54357);Object.defineProperty(exports, "applyTrailingSlash", ({enumerable:true,get:function(){return __importDefault(applyTrailingSlash_1).default;}}));var errorUtils_1=__webpack_require__(6009);Object.defineProperty(exports, "getErrorCausalChain", ({enumerable:true,get:function(){return errorUtils_1.getErrorCausalChain;}}));
-
-/***/ }),
-
-/***/ 78007:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "fetchIndexes": () => (/* binding */ fetchIndexes),
-/* harmony export */   "legacyFetchIndexes": () => (/* binding */ legacyFetchIndexes)
-/* harmony export */ });
-/* harmony import */ var lunr__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(31336);
-/* harmony import */ var lunr__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(lunr__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony import */ var _utils_proxiedGenerated__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(96059);
-const cache=new Map();function fetchIndexes(baseUrl,searchContext){const cacheKey=`${baseUrl}${searchContext}`;let promise=cache.get(cacheKey);if(!promise){promise=legacyFetchIndexes(baseUrl,searchContext);cache.set(cacheKey,promise);}return promise;}async function legacyFetchIndexes(baseUrl,searchContext){if(true){const url=`${baseUrl}${_utils_proxiedGenerated__WEBPACK_IMPORTED_MODULE_1__.searchIndexUrl.replace("{dir}",searchContext?`-${searchContext.replace(/\//g,"-")}`:"")}`;// Catch potential attacks.
-const fullUrl=new URL(url,location.origin);if(fullUrl.origin!==location.origin){throw new Error("Unexpected version url");}const json=await(await fetch(url)).json();const wrappedIndexes=json.map(({documents,index},type)=>({type:type,documents,index:lunr__WEBPACK_IMPORTED_MODULE_0___default().Index.load(index)}));const zhDictionary=json.reduce((acc,item)=>{for(const tuple of item.index.invertedIndex){if(/\p{Unified_Ideograph}/u.test(tuple[0][0])){acc.add(tuple[0]);}}return acc;},new Set());return{wrappedIndexes,zhDictionary:Array.from(zhDictionary)};}// The index does not exist in development, therefore load a dummy index here.
-return{wrappedIndexes:[],zhDictionary:[]};}
-
-/***/ }),
-
-/***/ 58263:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "SearchSourceFactory": () => (/* binding */ SearchSourceFactory)
-});
-
-// EXTERNAL MODULE: ./node_modules/lunr/lunr.js
-var lunr = __webpack_require__(31336);
-var lunr_default = /*#__PURE__*/__webpack_require__.n(lunr);
-;// CONCATENATED MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/tokenize.js
-/**
- * Split a sentence to tokens, considering a sequence of consecutive Chinese words as a single token.
- *
- * @param text - Text to be tokenized.
- * @param language - Languages used.
- *
- * @returns Tokens.
- */function tokenize(text,language){// Some languages have their own tokenizer.
-if(language.length===1&&["ja","jp","th"].includes(language[0])){return (lunr_default())[language[0]].tokenizer(text).map(token=>token.toString());}let regExpMatchWords=/[^-\s]+/g;// Especially optimization for `zh`.
-if(language.includes("zh")){// Currently only works fine with letters in Latin alphabet and Chinese.
-// https://zhuanlan.zhihu.com/p/33335629
-regExpMatchWords=/\w+|\p{Unified_Ideograph}+/gu;// regExpMatchWords = /\p{Unified_Ideograph}+|[^-\s\p{Unified_Ideograph}]+/gu;
-// https://mothereff.in/regexpu#input=const+regex+%3D+/%5Cp%7BUnified_Ideograph%7D/u%3B&unicodePropertyEscape=1
-// regExpMatchWords = /\w+|[\u3400-\u4DBF\u4E00-\u9FFC\uFA0E\uFA0F\uFA11\uFA13\uFA14\uFA1F\uFA21\uFA23\uFA24\uFA27-\uFA29\u{20000}-\u{2A6DD}\u{2A700}-\u{2B734}\u{2B740}-\u{2B81D}\u{2B820}-\u{2CEA1}\u{2CEB0}-\u{2EBE0}\u{30000}-\u{3134A}]+/gu
-}return text.toLowerCase().match(regExpMatchWords)||[];}
-;// CONCATENATED MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/cutZhWords.js
-/**
- * Get all possible terms for a string of consecutive Chinese words,
- * by a words dictionary.
- *
- * @remarks
- *
- * Terms are sorted in ascending order by the count of words.
- *
- * @param token - A string of consecutive Chinese words.
- * @param zhDictionary - A Chinese words dictionary.
- *
- * @returns A smart term list.
- */function cutZhWords(token,zhDictionary){const wrappedTerms=[];function cut(subToken,carry){let matchedLastIndex=0;let matched=false;for(const words of zhDictionary){if(subToken.substr(0,words.length)===words){const nextCarry={missed:carry.missed,term:carry.term.concat({value:words})};if(subToken.length>words.length){cut(subToken.substr(words.length),nextCarry);}else{wrappedTerms.push(nextCarry);}matched=true;}else{for(let lastIndex=words.length-1;lastIndex>matchedLastIndex;lastIndex-=1){const subWords=words.substr(0,lastIndex);if(subToken.substr(0,lastIndex)===subWords){matchedLastIndex=lastIndex;const nextCarry={missed:carry.missed,term:carry.term.concat({value:subWords,trailing:true})};if(subToken.length>lastIndex){cut(subToken.substr(lastIndex),nextCarry);}else{wrappedTerms.push(nextCarry);}matched=true;break;}}}}if(!matched){if(subToken.length>0){cut(subToken.substr(1),{missed:carry.missed+1,term:carry.term});}else if(carry.term.length>0){wrappedTerms.push(carry);}}}cut(token,{missed:0,term:[]});return wrappedTerms.sort((a,b)=>{const aMissed=a.missed>0?1:0;const bMissed=b.missed>0?1:0;if(aMissed!==bMissed){// Put all no-words-missed terms before words-missed terms.
-return aMissed-bMissed;}// Put terms with less words before those with more words.
-return a.term.length-b.term.length;}).map(item=>item.term);}
-;// CONCATENATED MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/smartTerms.js
-/**
- * Get all possible terms for a list of tokens consists of words mixed in Chinese and non-Chinese,
- * by a Chinese words dictionary.
- *
- * @param tokens - Tokens consists of English words or strings of consecutive Chinese words.
- * @param zhDictionary - A Chinese words dictionary.
- *
- * @returns A smart term list.
- */function smartTerms(tokens,zhDictionary){const terms=[];function cutMixedWords(subTokens,carry){if(subTokens.length===0){terms.push(carry);return;}const token=subTokens[0];if(/\p{Unified_Ideograph}/u.test(token)){const terms=cutZhWords(token,zhDictionary);for(const term of terms){const nextCarry=carry.concat(...term);cutMixedWords(subTokens.slice(1),nextCarry);}}else{const nextCarry=carry.concat({value:token});cutMixedWords(subTokens.slice(1),nextCarry);}}cutMixedWords(tokens,[]);return terms;}
-// EXTERNAL MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/proxiedGenerated.js + 1 modules
-var proxiedGenerated = __webpack_require__(96059);
-;// CONCATENATED MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/smartQueries.js
-/**
- * Get all possible queries for a list of tokens consists of words mixed English and Chinese,
- * by a Chinese words dictionary.
- *
- * @param tokens - Tokens consists of English words or strings of consecutive Chinese words.
- * @param zhDictionary - A Chinese words dictionary.
- *
- * @returns A smart query list.
- */function smartQueries(tokens,zhDictionary){const terms=smartTerms(tokens,zhDictionary);if(terms.length===0){// There are no matched terms.
-// All tokens are considered required and with wildcard.
-return[{tokens,term:tokens.map(value=>({value,presence:(lunr_default()).Query.presence.REQUIRED,wildcard:(lunr_default()).Query.wildcard.LEADING|(lunr_default()).Query.wildcard.TRAILING}))}];}// The last token of a term maybe incomplete while user is typing.
-for(const term of terms){term[term.length-1].maybeTyping=true;}// Try to append terms without stop words,
-// since they are removed in the index.
-const stopWordPipelines=[];for(const lang of proxiedGenerated.language){if(lang==="en"){if(!proxiedGenerated.removeDefaultStopWordFilter){stopWordPipelines.unshift((lunr_default()).stopWordFilter);}}else{const lunrLang=(lunr_default())[lang];if(lunrLang.stopWordFilter){stopWordPipelines.unshift(lunrLang.stopWordFilter);}}}let refinedTerms;if(stopWordPipelines.length>0){const pipe=term=>stopWordPipelines.reduce((term,p)=>term.filter(item=>p(item.value)),term);refinedTerms=[];const newTerms=[];for(const term of terms){const filteredTerm=pipe(term);refinedTerms.push(filteredTerm);// Add extra terms only if some stop words are removed,
-// and some non-stop-words exist too.
-if(filteredTerm.length<term.length&&filteredTerm.length>0){newTerms.push(filteredTerm);}}terms.push(...newTerms);}else{refinedTerms=terms.slice();}// Also try to add extra terms which miss one of the searched tokens,
-// when the term contains 3 or more tokens,
-// to improve the search precision.
-const extraTerms=[];for(const term of refinedTerms){if(term.length>2){for(let i=term.length-1;i>=0;i-=1){extraTerms.push(term.slice(0,i).concat(term.slice(i+1)));}}}return getQueriesMaybeTyping(terms).concat(getQueriesMaybeTyping(extraTerms));}function getQueriesMaybeTyping(terms){return termsToQueries(terms).concat(termsToQueries(// Ignore terms whose last token already has a trailing wildcard,
-// or the last token is not `maybeTyping`.
-terms.filter(term=>{const token=term[term.length-1];return!token.trailing&&token.maybeTyping;}),true));}function termsToQueries(terms,maybeTyping){return terms.map(term=>({tokens:term.map(item=>item.value),term:term.map(item=>({value:item.value,presence:(lunr_default()).Query.presence.REQUIRED,// The last token of a term maybe incomplete while user is typing.
-// So append more queries with trailing wildcard added.
-wildcard:(maybeTyping?item.trailing||item.maybeTyping:item.trailing)?(lunr_default()).Query.wildcard.TRAILING:(lunr_default()).Query.wildcard.NONE}))}));}
-;// CONCATENATED MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/sortSearchResults.js
-function sortSearchResults(results){results.forEach((item,index)=>{item.index=index;});// Put search results of headings and contents just after
-// their belonged page's title, if existed.
-results.sort((a,b)=>{let aPageIndex=a.type>0&&a.page?results.findIndex(item=>item.document===a.page):a.index;let bPageIndex=b.type>0&&b.page?results.findIndex(item=>item.document===b.page):b.index;if(aPageIndex===-1){aPageIndex=a.index;}if(bPageIndex===-1){bPageIndex=b.index;}if(aPageIndex===bPageIndex){if(a.type===0){return-1;}if(b.type===0){return 1;}return a.index-b.index;}return aPageIndex-bPageIndex;});}
-;// CONCATENATED MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/processTreeStatusOfSearchResults.js
-function processTreeStatusOfSearchResults(results){results.forEach((item,i)=>{if(i>0&&item.page&&results.some(prev=>prev.document===item.page)){if(i<results.length-1&&results[i+1].page===item.page){item.isInterOfTree=true;}else{item.isLastOfTree=true;}}});}
-;// CONCATENATED MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/SearchSourceFactory.js
-function SearchSourceFactory(wrappedIndexes,zhDictionary,resultsLimit){return function searchSource(input,callback){const rawTokens=tokenize(input,proxiedGenerated.language);if(rawTokens.length===0){callback([]);return;}const queries=smartQueries(rawTokens,zhDictionary);const results=[];search:for(const{term,tokens}of queries){for(const{documents,index,type}of wrappedIndexes){results.push(...index.query(query=>{for(const item of term){query.term(item.value,{wildcard:item.wildcard,presence:item.presence});}}).slice(0,resultsLimit)// Remove duplicated results.
-.filter(result=>!results.some(item=>item.document.i.toString()===result.ref)).slice(0,resultsLimit-results.length).map(result=>{const document=documents.find(doc=>doc.i.toString()===result.ref);return{document,type,page:type!==0&&wrappedIndexes[0].documents.find(doc=>doc.i===document.p),metadata:result.matchData.metadata,tokens,score:result.score};}));if(results.length>=resultsLimit){break search;}}}sortSearchResults(results);processTreeStatusOfSearchResults(results);callback(results);};}
-
-/***/ }),
-
-/***/ 84647:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "getStemmedPositions": () => (/* binding */ getStemmedPositions)
-/* harmony export */ });
-function getStemmedPositions(metadata,field){const positions=[];for(const match of Object.values(metadata)){if(match[field]){positions.push(...match[field].position);}}// Put positions with lower start pos before those with higher start pos.
-// Put longer positions before shorter positions when they are the same in start pos.
-return positions.sort((a,b)=>a[0]-b[0]||b[1]-a[1]);}
-
-/***/ }),
-
-/***/ 32438:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "highlightStemmed": () => (/* binding */ highlightStemmed),
-  "splitIntoChunks": () => (/* binding */ splitIntoChunks)
-});
-
-;// CONCATENATED MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/escapeHtml.js
-/**
- * Escape html special chars.
- *
- * @param unsafe - A unsafe string.
- *
- * @returns A safe string can be injected as innerHTML.
- */function escapeHtml(unsafe){return unsafe.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'");}
-;// CONCATENATED MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/highlight.js
-/**
- * Highlight specified tokens in text content.
- *
- * @param content - Text content.
- * @param tokens - Tokens to be highlighted (in lower-case and sorted by descending of length).
- * @param forceMatched - Whether to force matched.
- *
- * @returns A html string with marked tokens.
- */function highlight(content,tokens,forceMatched){const html=[];for(const token of tokens){const index=content.toLowerCase().indexOf(token);if(index>=0){if(index>0){html.push(highlight(content.substr(0,index),tokens));}html.push(`<mark>${escapeHtml(content.substr(index,token.length))}</mark>`);const end=index+token.length;if(end<content.length){html.push(highlight(content.substr(end),tokens));}break;}}if(html.length===0){return forceMatched?`<mark>${escapeHtml(content)}</mark>`:escapeHtml(content);}return html.join("");}
-;// CONCATENATED MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/looseTokenize.js
-// https://zhuanlan.zhihu.com/p/33335629
-const singleMatchOfWord=/\w+|\p{Unified_Ideograph}/u;function looseTokenize(content){const tokens=[];let start=0;let text=content;while(text.length>0){const match=text.match(singleMatchOfWord);if(!match){tokens.push(text);break;}if(match.index>0){tokens.push(text.substring(0,match.index));}tokens.push(match[0]);start+=match.index+match[0].length;text=content.substring(start);}return tokens;}
-// EXTERNAL MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/proxiedGenerated.js + 1 modules
-var proxiedGenerated = __webpack_require__(96059);
-;// CONCATENATED MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/highlightStemmed.js
-function highlightStemmed(content,positions,tokens,maxLength=proxiedGenerated.searchResultContextMaxLength){const{chunkIndex,chunks}=splitIntoChunks(content,positions,tokens);const leadingChunks=chunks.slice(0,chunkIndex);const firstChunk=chunks[chunkIndex];const html=[firstChunk.html];const trailingChunks=chunks.slice(chunkIndex+1);let currentLength=firstChunk.textLength;let leftPadding=0;let rightPadding=0;let leftOverflowed=false;let rightOverflowed=false;while(currentLength<maxLength){if((leftPadding<=rightPadding||trailingChunks.length===0)&&leadingChunks.length>0){const chunk=leadingChunks.pop();if(currentLength+chunk.textLength<=maxLength){html.unshift(chunk.html);leftPadding+=chunk.textLength;currentLength+=chunk.textLength;}else{leftOverflowed=true;leadingChunks.length=0;}}else if(trailingChunks.length>0){const chunk=trailingChunks.shift();if(currentLength+chunk.textLength<=maxLength){html.push(chunk.html);rightPadding+=chunk.textLength;currentLength+=chunk.textLength;}else{rightOverflowed=true;trailingChunks.length=0;}}else{break;}}if(leftOverflowed||leadingChunks.length>0){html.unshift("…");}if(rightOverflowed||trailingChunks.length>0){html.push("…");}return html.join("");}function splitIntoChunks(content,positions,tokens){const chunks=[];let positionIndex=0;let cursor=0;let chunkIndex=-1;while(positionIndex<positions.length){const[start,length]=positions[positionIndex];positionIndex+=1;if(start<cursor){continue;}if(start>cursor){const leadingChunks=looseTokenize(content.substring(cursor,start)).map(token=>({html:escapeHtml(token),textLength:token.length}));for(const item of leadingChunks){chunks.push(item);}}if(chunkIndex===-1){chunkIndex=chunks.length;}cursor=start+length;chunks.push({html:highlight(content.substring(start,cursor),tokens,true),textLength:length});}if(cursor<content.length){const trailingChunks=looseTokenize(content.substring(cursor)).map(token=>({html:escapeHtml(token),textLength:token.length}));for(const item of trailingChunks){chunks.push(item);}}return{chunkIndex,chunks};}
-
-/***/ }),
-
-/***/ 96059:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Mark": () => (/* reexport */ Mark),
-  "docsPluginIdForPreferredVersion": () => (/* reexport */ docsPluginIdForPreferredVersion),
-  "explicitSearchResultPath": () => (/* reexport */ explicitSearchResultPath),
-  "hideSearchBarWithNoSearchContext": () => (/* reexport */ hideSearchBarWithNoSearchContext),
-  "indexDocs": () => (/* reexport */ indexDocs),
-  "language": () => (/* reexport */ language),
-  "removeDefaultStemmer": () => (/* reexport */ removeDefaultStemmer),
-  "removeDefaultStopWordFilter": () => (/* reexport */ removeDefaultStopWordFilter),
-  "searchBarPosition": () => (/* reexport */ searchBarPosition),
-  "searchBarShortcut": () => (/* reexport */ searchBarShortcut),
-  "searchBarShortcutHint": () => (/* reexport */ searchBarShortcutHint),
-  "searchContextByPaths": () => (/* reexport */ searchContextByPaths),
-  "searchIndexUrl": () => (/* reexport */ searchIndexUrl),
-  "searchResultContextMaxLength": () => (/* reexport */ searchResultContextMaxLength),
-  "searchResultLimits": () => (/* reexport */ searchResultLimits)
-});
-
-// EXTERNAL MODULE: ./node_modules/lunr/lunr.js
-var lunr = __webpack_require__(31336);
-;// CONCATENATED MODULE: ./.docusaurus/@easyops-cn/docusaurus-search-local/default/generated.js
-const language=["en"];const removeDefaultStopWordFilter=false;const removeDefaultStemmer=false;const Mark=null;const searchIndexUrl="search-index{dir}.json?_=602c86b5";const searchResultLimits=8;const searchResultContextMaxLength=50;const explicitSearchResultPath=false;const searchBarShortcut=true;const searchBarShortcutHint=true;const searchBarPosition="right";const docsPluginIdForPreferredVersion=undefined;const indexDocs=true;const searchContextByPaths=null;const hideSearchBarWithNoSearchContext=false;
-;// CONCATENATED MODULE: ./node_modules/@easyops-cn/docusaurus-search-local/dist/client/client/utils/proxiedGenerated.js
-// This file is auto generated while building.
-
-
-/***/ }),
-
-/***/ 67124:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony import */ var _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(65701);
-/* harmony import */ var _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__);
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "AccordionItem")) __webpack_require__.d(__webpack_exports__, { "AccordionItem": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.AccordionItem; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "Box")) __webpack_require__.d(__webpack_exports__, { "Box": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.Box; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "CallToActionSection")) __webpack_require__.d(__webpack_exports__, { "CallToActionSection": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.CallToActionSection; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "Grid")) __webpack_require__.d(__webpack_exports__, { "Grid": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.Grid; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "Hero")) __webpack_require__.d(__webpack_exports__, { "Hero": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.Hero; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "HeroAction")) __webpack_require__.d(__webpack_exports__, { "HeroAction": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.HeroAction; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "HeroActions")) __webpack_require__.d(__webpack_exports__, { "HeroActions": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.HeroActions; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "HeroAsset")) __webpack_require__.d(__webpack_exports__, { "HeroAsset": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.HeroAsset; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "HeroDescription")) __webpack_require__.d(__webpack_exports__, { "HeroDescription": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.HeroDescription; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "HeroInfo")) __webpack_require__.d(__webpack_exports__, { "HeroInfo": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.HeroInfo; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "HeroTitle")) __webpack_require__.d(__webpack_exports__, { "HeroTitle": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.HeroTitle; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "InputCTASection")) __webpack_require__.d(__webpack_exports__, { "InputCTASection": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.InputCTASection; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "JobsPerDepartment")) __webpack_require__.d(__webpack_exports__, { "JobsPerDepartment": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.JobsPerDepartment; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "ProfileCard")) __webpack_require__.d(__webpack_exports__, { "ProfileCard": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.ProfileCard; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "Roadmap")) __webpack_require__.d(__webpack_exports__, { "Roadmap": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.Roadmap; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "SectionHeader")) __webpack_require__.d(__webpack_exports__, { "SectionHeader": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.SectionHeader; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "ShowcaseCard")) __webpack_require__.d(__webpack_exports__, { "ShowcaseCard": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.ShowcaseCard; } });
-/* harmony reexport (checked) */ if(__webpack_require__.o(_acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__, "SocialCard")) __webpack_require__.d(__webpack_exports__, { "SocialCard": function() { return _acid_info_logos_docusaurus_theme_lib_client_components_mdx__WEBPACK_IMPORTED_MODULE_0__.SocialCard; } });
-
-
-/***/ }),
-
-/***/ 67729:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "assets": () => (/* binding */ assets),
-/* harmony export */   "contentTitle": () => (/* binding */ contentTitle),
-/* harmony export */   "default": () => (/* binding */ MDXContent),
-/* harmony export */   "frontMatter": () => (/* binding */ frontMatter),
-/* harmony export */   "metadata": () => (/* binding */ metadata),
-/* harmony export */   "toc": () => (/* binding */ toc)
-/* harmony export */ });
-/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(87462);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
-/* harmony import */ var _src_components_mdx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(67124);
-/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */const frontMatter={title:'Join the community',pagination_prev:null,pagination_next:null,displayed_sidebar:null,sidebar_class_name:'hidden'};const contentTitle='Join the community';const metadata={"unversionedId":"community","id":"community","title":"Join the community","description":"The Codex project aims to create a decentralised durability engine that allows persisting data in p2p networks. In other words, it allows storing files and data with predictable durability guarantees for later retrieval.","source":"@site/root-pages/community.mdx","sourceDirName":".","slug":"/community","permalink":"/community","draft":false,"tags":[],"version":"current","frontMatter":{"title":"Join the community","pagination_prev":null,"pagination_next":null,"displayed_sidebar":null,"sidebar_class_name":"hidden"}};const assets={};const toc=[];const layoutProps={toc};const MDXLayout="wrapper";function MDXContent({components,...props}){return (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout,(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"join-the-community"},`Join the community`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("blockquote",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"blockquote"},`The Codex project aims to create a decentralised durability engine that allows persisting data in p2p networks. In other words, it allows storing files and data with predictable durability guarantees for later retrieval.`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("blockquote",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"blockquote"},`WARNING: This project is under active development and is considered pre-alpha.`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Box,{top:24,mdxType:"Box"}),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Welcome to the Codex Community! Whether you are interested in building with Codex, contributing to the network, expanding your knowledge, or staying up-to-date with our progress, we have something for everyone.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Box,{top:56,bottom:56,mdxType:"Box"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid,{xs:{cols:1,gap:'1rem'},md:{cols:2},mdxType:"Grid"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,{xs:1},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.SocialCard,{href:"https://twitter.com/Codex_storage",logoSrc:"/icons/x-black.svg",logoSrcDark:"/icons/x-white.svg",description:"Follow us on X",mdxType:"SocialCard"})),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.Grid.Item,{xs:1},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(_src_components_mdx__WEBPACK_IMPORTED_MODULE_2__.SocialCard,{href:"https://discord.gg/codex-storage",logoSrc:"/icons/discord-black.svg",logoSrcDark:"/icons/discord-white.svg",description:"Join the community on Discord",mdxType:"SocialCard"})))));};MDXContent.isMDXComponent=true;
-
-/***/ }),
-
-/***/ 79945:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "assets": () => (/* binding */ assets),
-  "contentTitle": () => (/* binding */ contentTitle),
-  "default": () => (/* binding */ MDXContent),
-  "frontMatter": () => (/* binding */ frontMatter),
-  "metadata": () => (/* binding */ metadata),
-  "toc": () => (/* binding */ toc)
-});
-
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@mdx-js/react/dist/esm.js
-var esm = __webpack_require__(3905);
-;// CONCATENATED MODULE: ./static/generated/jobs.json
-const jobs_namespaceObject = JSON.parse('{"departments":[{"id":87842,"name":"App","parent_id":43806,"child_ids":[87847,87852,87850,87848,45530,87849],"jobs":[]},{"id":54504,"name":"Brand Design Studio","parent_id":null,"child_ids":[],"jobs":[]},{"id":45532,"name":"Business Development","parent_id":null,"child_ids":[],"jobs":[]},{"id":87841,"name":"Codex","parent_id":43806,"child_ids":[],"jobs":[{"absolute_url":"https://boards.greenhouse.io/codex/jobs/5737912","data_compliance":[{"type":"gdpr","requires_consent":false,"requires_processing_consent":false,"requires_retention_consent":false,"retention_period":null}],"internal_job_id":2800109,"location":{"name":"Remote (Worldwide) "},"metadata":null,"id":5737912,"updated_at":"2024-05-11T01:35:02-04:00","requisition_id":"TTF-COD-72","title":"Senior Full-Stack Engineer"},{"absolute_url":"https://boards.greenhouse.io/codex/jobs/4603013","data_compliance":[{"type":"gdpr","requires_consent":false,"requires_processing_consent":false,"requires_retention_consent":false,"retention_period":null}],"internal_job_id":2376599,"location":{"name":"Remote (Worldwide)"},"metadata":null,"id":4603013,"updated_at":"2024-05-13T02:23:29-04:00","requisition_id":"STUDENT_CODEX","title":"Students Program Codex"},{"absolute_url":"https://boards.greenhouse.io/codex/jobs/5921381","data_compliance":[{"type":"gdpr","requires_consent":false,"requires_processing_consent":false,"requires_retention_consent":false,"retention_period":null}],"internal_job_id":2862706,"location":{"name":"Remote (Worldwide)"},"metadata":null,"id":5921381,"updated_at":"2024-04-29T11:27:15-04:00","requisition_id":"TTF-COD-70","title":"Zero Knowledge Researcher - Codex"}]},{"id":84549,"name":"Communications","parent_id":null,"child_ids":[],"jobs":[]},{"id":45531,"name":"Design","parent_id":null,"child_ids":[],"jobs":[]},{"id":87847,"name":"Desktop","parent_id":87842,"child_ids":[],"jobs":[]},{"id":87852,"name":"Documentation","parent_id":87842,"child_ids":[],"jobs":[]},{"id":45547,"name":"Engineering ","parent_id":null,"child_ids":[],"jobs":[]},{"id":49925,"name":"Finance","parent_id":87845,"child_ids":[],"jobs":[]},{"id":87854,"name":"Infrastructure","parent_id":43806,"child_ids":[],"jobs":[]},{"id":87853,"name":"Insights","parent_id":87845,"child_ids":[],"jobs":[]},{"id":87850,"name":"Keycard","parent_id":87842,"child_ids":[],"jobs":[]},{"id":145838,"name":"Leadership","parent_id":null,"child_ids":[],"jobs":[]},{"id":74156,"name":"Legal","parent_id":87845,"child_ids":[],"jobs":[]},{"id":91698,"name":"Logos","parent_id":null,"child_ids":[],"jobs":[]},{"id":43807,"name":"Marketing","parent_id":null,"child_ids":[],"jobs":[]},{"id":87848,"name":"Mobile","parent_id":87842,"child_ids":[],"jobs":[]},{"id":87843,"name":"Nimbus","parent_id":43806,"child_ids":[],"jobs":[]},{"id":144866,"name":"Nomos","parent_id":43806,"child_ids":[],"jobs":[]},{"id":45548,"name":"People Operations","parent_id":87845,"child_ids":[],"jobs":[]},{"id":45530,"name":"Product Design","parent_id":87842,"child_ids":[],"jobs":[]},{"id":90941,"name":"Program Management","parent_id":null,"child_ids":[],"jobs":[]},{"id":43806,"name":"Research & Development","parent_id":null,"child_ids":[87842,87841,87854,87843,144866,87846,87981,87847,87852,87850,87848,45530,87849],"jobs":[]},{"id":87851,"name":"Security","parent_id":87845,"child_ids":[],"jobs":[]},{"id":87845,"name":"Services","parent_id":null,"child_ids":[49925,87853,74156,45548,87851],"jobs":[]},{"id":91697,"name":"Status App ","parent_id":null,"child_ids":[],"jobs":[]},{"id":216509,"name":"Status Network","parent_id":null,"child_ids":[],"jobs":[]},{"id":54783,"name":"Technical Writing ","parent_id":null,"child_ids":[],"jobs":[]},{"id":87846,"name":"Vac","parent_id":43806,"child_ids":[],"jobs":[]},{"id":87981,"name":"Waku","parent_id":43806,"child_ids":[],"jobs":[]},{"id":87849,"name":"Web","parent_id":87842,"child_ids":[],"jobs":[]},{"id":0,"name":"No Department","parent_id":null,"child_ids":[],"jobs":[]}]}');
-var generated_jobs_namespaceObject = /*#__PURE__*/__webpack_require__.t(jobs_namespaceObject, 2);
-// EXTERNAL MODULE: ./src/components/mdx/index.tsx
-var mdx = __webpack_require__(67124);
-;// CONCATENATED MODULE: ./root-pages/join-us.mdx
-/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */const frontMatter={title:'Join Us',hide_title:true,pagination_prev:null,pagination_next:null,displayed_sidebar:null,hide_table_of_contents:true};const contentTitle=undefined;const metadata={"unversionedId":"join-us","id":"join-us","title":"Join Us","description":"","source":"@site/root-pages/join-us.mdx","sourceDirName":".","slug":"/join-us","permalink":"/join-us","draft":false,"tags":[],"version":"current","frontMatter":{"title":"Join Us","hide_title":true,"pagination_prev":null,"pagination_next":null,"displayed_sidebar":null,"hide_table_of_contents":true}};const assets={};const toc=[];const layoutProps={toc};const MDXLayout="wrapper";function MDXContent({components,...props}){return (0,esm/* mdx */.kt)(MDXLayout,(0,esm_extends/* default */.Z)({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),(0,esm/* mdx */.kt)(mdx.JobsPerDepartment,{jobData:generated_jobs_namespaceObject,mdxType:"JobsPerDepartment"}));};MDXContent.isMDXComponent=true;
-
-/***/ }),
-
-/***/ 84594:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "assets": () => (/* binding */ assets),
-/* harmony export */   "contentTitle": () => (/* binding */ contentTitle),
-/* harmony export */   "default": () => (/* binding */ MDXContent),
-/* harmony export */   "frontMatter": () => (/* binding */ frontMatter),
-/* harmony export */   "metadata": () => (/* binding */ metadata),
-/* harmony export */   "toc": () => (/* binding */ toc)
-/* harmony export */ });
-/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(87462);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
-/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */const frontMatter={displayed_sidebar:null,sidebar_class_name:'hidden',hide_table_of_contents:true,hide_title:true,pagination_prev:null,pagination_next:null};const contentTitle='**Codex R&D Update for Week of Jan 12, 2024**';const metadata={"unversionedId":"news","id":"news","title":"**Codex R&D Update for Week of Jan 12, 2024**","description":"The Codex team continues to make progress with various initiatives to wrap up the demo for the Q1/Q2 public testnet release. An internal testnet has been running for the past few weeks and has been used to test the latest version of Codex and can be accessed using the Codex Testnet Starter documentation.","source":"@site/root-pages/news.md","sourceDirName":".","slug":"/news","permalink":"/news","draft":false,"tags":[],"version":"current","frontMatter":{"displayed_sidebar":null,"sidebar_class_name":"hidden","hide_table_of_contents":true,"hide_title":true,"pagination_prev":null,"pagination_next":null}};const assets={};const toc=[{value:'<strong>Epic: Nim Improvements</strong>',id:'epic-nim-improvements',level:2},{value:'<strong>Epic: Wiring the Proving System</strong>',id:'epic-wiring-the-proving-system',level:2},{value:'<strong>Epic: Improve Client Stability</strong>',id:'epic-improve-client-stability',level:2},{value:'<strong>Epic: End-to-end Testing</strong>',id:'epic-end-to-end-testing',level:2},{value:'<strong>Epic: Block Merkelization</strong>',id:'epic-block-merkelization',level:2},{value:'<strong>Epic: nim-poseidon2</strong>',id:'epic-nim-poseidon2',level:2},{value:'<strong>Epic: Wiring the Proving System</strong>',id:'epic-wiring-the-proving-system-1',level:2},{value:'<strong>Epic: 2023 Testnet setup</strong>',id:'epic-2023-testnet-setup',level:2},{value:'<strong>Epic: Improve Client Stability</strong>',id:'epic-improve-client-stability-1',level:2},{value:'<strong>Epic: End-to-end Testing</strong>',id:'epic-end-to-end-testing-1',level:2}];const layoutProps={toc};const MDXLayout="wrapper";function MDXContent({components,...props}){return (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout,(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"codex-rd-update-for-week-of-jan-12-2024"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h1"},`Codex R&D Update for Week of Jan 12, 2024`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("blockquote",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"blockquote"},`The Codex team continues to make progress with various initiatives to wrap up the demo for the Q1/Q2 public testnet release. An internal testnet has been running for the past few weeks and has been used to test the latest version of Codex and can be accessed using the Codex Testnet Starter documentation.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"blockquote"},`Ongoing and new lines of research and development will soon begin in preparation for the next version of Codex used for the mainnet release.. Here are the updates from different team members and their ongoing work. `)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"development"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h1"},`Development`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Development is currently broken into three distinct teams:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ol"},`Client, Testing, and Infrastructure`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ol"},`Marketplace`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ol"},`Research`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The different teams have actively moving on various fronts. The following are their team updates to various ongoing Epics.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"client"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h1"},`Client`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2",{"id":"epic-nim-improvements"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h2"},`Epic: Nim Improvements`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Completed:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/nim-lang/langserver/issues/154"},`Filed issue for adding Atlas / non-Nimble support for packages`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/nim-lang/atlas/pull/108"},`Start working on Atlas command changes`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Ongoing:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/elcritch/apatheia"},`Create a repo as a place to start implementing some core async-threading tools for Chronos like worker pool & disk io on top of the ThreadSignalPtr primitive`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`plans to support refc & orc`)))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2",{"id":"epic-wiring-the-proving-system"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h2"},`Epic: Wiring the Proving System`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Completed:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Wrapped `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/arkworks-rs/circom-compat"},`ark-circom`),` in a C FFI via:`,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/circom-compat-ffi"},`nim-circom-compat`),` and`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/circom-compat-ffi"},`circom-compat-ffi`))))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Ongoing:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/codex-storage-proofs-circuits"},`Integration of codex-storage-proofs-circuits`),` with a `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-codex/pull/686"},`PR in nim-codex`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2",{"id":"epic-improve-client-stability"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h2"},`Epic: Improve Client Stability`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Completed:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-codex/pull/691"},`Updated profiler branch for debugging`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-chronos/pull/7"},`Ported the profiler to Chronos V4`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/gmega/alternate-test-runner/"},`Wrote separate test runner for two client test to try to figure out the origin of a file size bug which magically disappeared`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Ongoing:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-codex/pull/678"},`Finish work to take down draft flag from PR Expiry per dataset`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-codex/pull/631"},`Write tests for PR Safe block deletion (with ref count)`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-codex/pull/680"},`Look into the CI/docker packaging/local build tooling for Waku and Nimbus as part of build improvements PR`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-codex/pull/673"},`Chronos V4 branch`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Pinned versions for Chronos and json-rpc`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"marketplace"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h1"},`Marketplace`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2",{"id":"epic-end-to-end-testing"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h2"},`Epic: End-to-end Testing`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Completed:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-codex/pull/662"},`Rebased multinode integration test refactor which had two failing tests due to the erasure coding changes`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Rebased Marketplace integration test suite`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Added support for Result types using formatIt for logging proxy`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/codex-contracts-eth/pull/79"},`Finished the verifier contract`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/codex-contracts-eth/pull/82"},`Deployed a dummy verifier on local networks for testing`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Finished updates to nim-ethers, all tests passing, including in Nim v2`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Fixed an issue in the nim-ethers json-rpc update`,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Derived Signers could not access the derived getAddress and sendTransaction when their async raises were updated with SignerError`)))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Ongoing:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Continue work on updating nim-ethers to support json-rpc breaking changes`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Continue work on supporting json-rpc breaking changes and pulling out utils/json to its own lib`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-codex/pull/683"},`Integrate contract changes into nim-codex`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Look into removing wait For in integration tests`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Review and clean up nim-ethers changes`,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Try to figure out a cleaner way to handle exceptions instead of catching all CatchableErrors`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Start tweaking the nim-json api to normalize both serialize and deserialize pragmas, with modes: OptOut, OptIn, and Strict`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`WIP on adding PATCH call for Availabilities`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"research"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h1"},`Research`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("blockquote",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"blockquote"},`2024 R&D Goals`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol",{parentName:"blockquote"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ol"},`Proving system and aggregation improvements (folding or lookups)`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ol"},`Aggregator/validator design`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ol"},`DHT improvements`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ol"},`Tokenomics and incentive design`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ol"},`Bandwidth incentives`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ol"},`Dynamic data (appendable data)`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Completed:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Frobenius endomorphism & pairing implementation`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Review the Solidity Groth16 verifier`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Ongoing:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`DAS simulator improvements to cover more diffusion models`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Start DAS sample query mechanism design`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Proof recursion ideation`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("hr",null),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"codex-rd-update-for-week-of-december-11-2023"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h1"},`Codex R&D Update for Week of December 11, 2023`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The Codex dev team is moving forward rapidly. The organisation’s development efforts mainly focus on launching the beta testnet by the end of the year. Following are some recent research and development highlights. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"development-1"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h1"},`Development`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Development is currently broken into three distinct sub-teams: `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ol",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ol"},`Client, Testing, and Infrastructure`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ol"},`Marketplace `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ol"},`Research `)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Below are summaries of each sub-team.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"client-1"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h1"},`Client`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`For the client, the team is focused on these primary tasks: block merkelization, Poseidon2 Nim-poseidon2 implementation, and wiring the proving system. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The client is the software that runs on the user’s local machine. It has all the components to handle the endpoints integration, data, block management, erasure coding, and interactions with the marketplace. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`See currently exposed endpoints for the Codex client (conform to OpenAPI specification) at: `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"p","href":"https://api.codex.storage"},`https://api.codex.storage`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Active work is ongoing to integrate the above Codex client endpoints to be accessible via the Codex frontend written in React here: `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"p","href":"https://github.com/codex-storage/codex-frontend"},`https://github.com/codex-storage/codex-frontend`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2",{"id":"epic-block-merkelization"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h2"},`Epic: Block Merkelization`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`For block merkelization, the team is focused on reducing metadata overhead. They are optimising the structure for handling and indexing block data. This effort requires changes in block Merkelization. These are the most recent efforts, which can be publicly viewed on GitHub:   `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Merkelization concrete PR (merged)`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-codex/pull/566"},`https://github.com/codex-storage/nim-codex/pull/566`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Working on nim-datastore to support atomic updates (in review)`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-datastore/pull/58"},`https://github.com/codex-storage/nim-datastore/pull/58`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Working on safe block deletion - using ref-counting`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Continuing work for #566 to integrate with Poseidon2 and the proving system`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2",{"id":"epic-nim-poseidon2"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h2"},`Epic: nim-poseidon2`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Poseidon2 is a faster version of the original Poseidon hash function used in zero-knowledge systems (zk). Nim-Poseidon2 is the Nim implementation the Codex team is developing to work efficiently and effectively with the Codex client. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Merged outstanding PRs`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-poseidon2/pull/7"},`https://github.com/codex-storage/nim-poseidon2/pull/7`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-poseidon2/pull/8"},`https://github.com/codex-storage/nim-poseidon2/pull/8`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-poseidon2/pull/9"},`https://github.com/codex-storage/nim-poseidon2/pull/9`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Added keyed compress`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-poseidon2/pull/10"},`https://github.com/codex-storage/nim-poseidon2/pull/10`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Updated Merkle root with extra bits to mitigate possible attacks`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-poseidon2/pull/11"},`https://github.com/codex-storage/nim-poseidon2/pull/11`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Fixed compilation problem with Constantine and secp256k1`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-codex/pull/625"},`https://github.com/codex-storage/nim-codex/pull/625`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2",{"id":"epic-wiring-the-proving-system-1"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h2"},`Epic: Wiring the Proving System`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The proving system comprises a SNARK circuit that generates the proof. A Storage Provider must also submit the marketplace contract to prove it faithfully stores the associated slot data. Additional components, such as the trusted setup ceremony, hash functions, and the multiple manifests generated for different purposes, are included in the proving system. The team is working on ensuring the proving system is built out and functions to successfully remote audit the slot data by validators. These stories represent the most recent efforts: `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Nim reference implementation of the proof input generation (WIP)`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/codex-storage-proofs-circuits/tree/master/reference/nim/proof_input"},`https://github.com/codex-storage/codex-storage-proofs-circuits/tree/master/reference/nim/proof_input`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Ongoing implementation of Groth16 (WIP)`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-groth16"},`https://github.com/codex-storage/nim-groth16`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"testing-and-infrastructure"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h1"},`Testing and Infrastructure`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The testing and infrastructure group is preparing to deploy tens or hundreds of nodes and efficiently monitor the activity. This is crucial for a successful launch of the testnet. The following are the epics and stories of development for this process. The main areas of concern are ensuring the testnet is set up and configured properly. It will also include ensuring the client maintains a suitable level of stability. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2",{"id":"epic-2023-testnet-setup"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h2"},`Epic: 2023 Testnet setup`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Configure TCP/UDP port forwarding for Testnet deployment`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Configure Pods placement for D/C-Tests runners and tests workload`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Check available options to build a service to get Codex Public IP for announcement`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Deploy Codex Bootstrap nodes for Testnet`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Deploy Geth Bootstrap nodes for Testnet`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2",{"id":"epic-improve-client-stability-1"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h2"},`Epic: Improve Client Stability`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Ongoing debugging of performance and stability issues in the testing environment`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Tooling developed `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Elastic search log retrieval `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/logtools"},`https://github.com/codex-storage/logtools`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://vimeo.com/884370956/e8a32a58c8?share=copy"},`https://vimeo.com/884370956/e8a32a58c8?share=copy`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`DHT fixes related to performance and stability `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Fix: queue messages when there is no encryption key`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Fix: arrive at working keys in case of simultaneous cross-connect`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Fix timeout and delete`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"marketplace-1"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h1"},`Marketplace`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The marketplace is a smart contract deployed on a blockchain. This smart contract defines all the logic required for users to ask for storage, store collaterals, assign storage nodes to user datasets, settle payments, deal with storage failures, storage provider proof issuance, and all the contract interactions.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h2",{"id":"epic-end-to-end-testing-1"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h2"},`Epic: End-to-end Testing`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Working on integration testing cleanup (WIP)`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"li","href":"https://github.com/codex-storage/nim-codex/pull/607"},`https://github.com/codex-storage/nim-codex/pull/607`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Debugging various issues for end-to-end testing`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"research-1"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"h1"},`Research`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Current research is mostly halted due to focus on implementing past research for the imminent launch of the testnet. Ongoing efforts include: `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Near-term:`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Ongoing “Groth16 prover” research and analysis. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Details for the functionality of the current proof system`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Hash and Merkle tree conventions to make them safe`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Continuing research for Codex’s use of erasure coding`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Long-term:`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Figuring out how to aggregate proofs (proof compression) for proving system`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},`Determining the correct proof system for Codex`)));};MDXContent.isMDXComponent=true;
-
-/***/ }),
-
-/***/ 91723:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "assets": () => (/* binding */ assets),
-/* harmony export */   "contentTitle": () => (/* binding */ contentTitle),
-/* harmony export */   "default": () => (/* binding */ MDXContent),
-/* harmony export */   "frontMatter": () => (/* binding */ frontMatter),
-/* harmony export */   "metadata": () => (/* binding */ metadata),
-/* harmony export */   "toc": () => (/* binding */ toc)
-/* harmony export */ });
-/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(87462);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
-/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */const frontMatter={displayed_sidebar:null,sidebar_class_name:'hidden',pagination_prev:null,pagination_next:null};const contentTitle='Privacy Policy';const metadata={"unversionedId":"privacy-policy","id":"privacy-policy","title":"Privacy Policy","description":"Last updated: 9 February 2024","source":"@site/root-pages/privacy-policy.md","sourceDirName":".","slug":"/privacy-policy","permalink":"/privacy-policy","draft":false,"tags":[],"version":"current","frontMatter":{"displayed_sidebar":null,"sidebar_class_name":"hidden","pagination_prev":null,"pagination_next":null}};const assets={};const toc=[{value:'1) Who we are',id:'1-who-we-are',level:3},{value:'2) We limit the collection and processing of personal data from your use of the Website',id:'2-we-limit-the-collection-and-processing-of-personal-data-from-your-use-of-the-website',level:3},{value:'3) Third party processing of personal data',id:'3-third-party-processing-of-personal-data',level:3},{value:'4) Security measures we take in respect of the Website',id:'4-security-measures-we-take-in-respect-of-the-website',level:3},{value:'5) Exporting data outside the European Union and Switzerland',id:'5-exporting-data-outside-the-european-union-and-switzerland',level:3},{value:'6) Your choices and rights',id:'6-your-choices-and-rights',level:3},{value:'7) Third party links',id:'7-third-party-links',level:3},{value:'8) This Privacy Policy might change',id:'8-this-privacy-policy-might-change',level:3},{value:'9) Contact information',id:'9-contact-information',level:3}];const layoutProps={toc};const MDXLayout="wrapper";function MDXContent({components,...props}){return (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout,(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"privacy-policy"},`Privacy Policy`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Last updated: 9 February 2024`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`This Privacy Policy is intended to inform users of our approach to privacy in respect of this website (`,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`"Website"`),`). In this regard, if you are visiting our Website, this Privacy Policy applies to you.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"1-who-we-are"},`1) Who we are`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`For the purposes of this Privacy Policy and the collection and processing of personal data as a controller, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code",{parentName:"pre"},`Logos Collective Association
-c/o PST Consulting GmbH
-Baarerstrasse 10
-6300 Zug
-Switzerland
-`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Whenever we refer to “Logos”, “we” or other similar references, we are referring to the Logos Collective Association.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"2-we-limit-the-collection-and-processing-of-personal-data-from-your-use-of-the-website"},`2) We limit the collection and processing of personal data from your use of the Website`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`We aim to limit the collection and collection and processing of personal data from users of the Website. We only collect and process certain personal data for specific purposes and where we have the legal basis to do so under applicable privacy legislation. We will not collect or process any personal data that we don’t need and where we do store any personal data, we will only store it for the least amount of time needed for the indicated purpose. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`In this regard, we collect and process the following personal data from your use of the Website:  `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`IP address`),`: As part of such use of the Website and from our use of Fathom Analytics, we briefly process your IP address but we have no way of identifying you. We however have a legitimate interest in processing such IP addresses to ensure the technical functionality and enhance the security measures of the Website. This IP address is not stored by us over time.`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Fathom Analytics`),`: We note that we make use of Fathom Analytics, which you can read more about here: `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"p","href":"https://usefathom.com/"},`https://usefathom.com/`),`. In short, Fathom Analytics is an alternative to Google Analytics, that doesn’t compromise visitor privacy for data. Fathom Analytics collects trends and insights, not personal details about specific website visitors. Fathom Analytics offers simple traffic insights such as top pages, top referrers, bounce rate, and average time people spend on a site.`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"3-third-party-processing-of-personal-data"},`3) Third party processing of personal data`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`In addition to our limited and collection of personal data, third parties may collect or process personal data as a result of the Website making use of certain features or to provide certain content. To the extent you interact with such third party content or features, their respective privacy policies will apply.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`We would however like to draw your attention to the following:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"li"},`Youtube`),`: The Website may embed videos from Youtube, a service provided by Google LLC, using Youtube’s privacy-enhanced mode. When you interact with such videos, Youtube may place cookies on your personal device. The cookies do not directly identify individual users and YouTube will not store information to personalise your experience unless you are logged in to a Google account. We do not have any control over these cookies set by Youtube and it is recommended that you review YouTube’s embedding videos information page.`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"4-security-measures-we-take-in-respect-of-the-website"},`4) Security measures we take in respect of the Website`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`As a general approach, we take data security seriously and we have implemented a variety of security measures on the Website to maintain the safety of your personal data when you submit such information to us. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"5-exporting-data-outside-the-european-union-and-switzerland"},`5) Exporting data outside the European Union and Switzerland`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`We are obliged to protect the privacy of personal data that you may have submitted in the unlikely event that we export your personal data to places outside the European Union or Switzerland. This means that personal data will only be processed in countries or by parties that provide an adequate level of protection as deemed by Switzerland or the European Commission. Otherwise, we will use other forms of protections, such as specific forms of contractual clauses to ensure such personal data is provided the same protection as required in Switzerland or Europe. In any event, the transmission of personal data outside the European Union and Switzerland will always occur in conformity with applicable privacy legislation. `),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"6-your-choices-and-rights"},`6) Your choices and rights`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`As explained in this Privacy Policy, we limit our collection and processing of your personal data wherever possible. Nonetheless, you still have certain choices and rights in respect of the personal data which we do collect and process. As laid out in relevant privacy legislation, you have the right to:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("ul",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},`Ask us to correct or update your personal data (where reasonably possible);`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},`Ask us to remove your personal data from our systems;`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},`Ask us for a copy of your personal data, which may also be transferred to another data controller at your request;`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},`Withdraw your consent to process your personal data (only if consent was asked for a processing activity), which only affects processing activities that are based on your consent and doesn’t affect the validity of such processing activities before you have withdrawn your consent;`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},`Object to the processing of your personal data; and`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("li",{parentName:"ul"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",{parentName:"li"},`File a complaint with the Federal Data Protection and Information Commissioner (FDPIC), if you believe that your personal data has been processed unlawfully.`))),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"7-third-party-links"},`7) Third party links`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`On this Website, you may come across links to third party websites. These third party sites have separate and independent privacy policies. We therefore have no responsibility or liability for the content and activities of these third party websites.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"8-this-privacy-policy-might-change"},`8) This Privacy Policy might change`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`We may modify or replace any part of this Privacy Policy at any time and without notice. Please check the Website periodically for any changes. The new Privacy Policy will be effective immediately upon its posting on our Website.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"9-contact-information"},`9) Contact information`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`To the extent that you have any questions about the Privacy Policy, please contact us at `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"p","href":"mailto:legal@free.technology"},`legal@free.technology`),`.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`This document is licensed under CC-BY-SA.`));};MDXContent.isMDXComponent=true;
-
-/***/ }),
-
-/***/ 28802:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "assets": () => (/* binding */ assets),
-/* harmony export */   "contentTitle": () => (/* binding */ contentTitle),
-/* harmony export */   "default": () => (/* binding */ MDXContent),
-/* harmony export */   "frontMatter": () => (/* binding */ frontMatter),
-/* harmony export */   "metadata": () => (/* binding */ metadata),
-/* harmony export */   "toc": () => (/* binding */ toc)
-/* harmony export */ });
-/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(87462);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
-/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */const frontMatter={displayed_sidebar:null,sidebar_class_name:'hidden',pagination_prev:null,pagination_next:null};const contentTitle='Security';const metadata={"unversionedId":"security","id":"security","title":"Security","description":"We take security seriously at Codex and across the Institute of Free Technology and its affiliates.","source":"@site/root-pages/security.md","sourceDirName":".","slug":"/security","permalink":"/security","draft":false,"tags":[],"version":"current","frontMatter":{"displayed_sidebar":null,"sidebar_class_name":"hidden","pagination_prev":null,"pagination_next":null}};const assets={};const toc=[];const layoutProps={toc};const MDXLayout="wrapper";function MDXContent({components,...props}){return (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout,(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"security"},`Security`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`We take security seriously at Codex and across the `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{href:"https://free.technology/",target:"_blank"},`Institute of Free Technology`),` and its affiliates.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Please report any security incidents via `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{href:"mailto:security@free.technology"},(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"p","href":"mailto:security@free.technology"},`security@free.technology`)),`.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Please report any discovered vulnerabilities in our bounty programme at `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{href:"https://hackenproof.com/ift",target:"_blank"},`HackenProof`),` to help ensure our protocols and software remain secure.`));};MDXContent.isMDXComponent=true;
-
-/***/ }),
-
-/***/ 6975:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "assets": () => (/* binding */ assets),
-/* harmony export */   "contentTitle": () => (/* binding */ contentTitle),
-/* harmony export */   "default": () => (/* binding */ MDXContent),
-/* harmony export */   "frontMatter": () => (/* binding */ frontMatter),
-/* harmony export */   "metadata": () => (/* binding */ metadata),
-/* harmony export */   "toc": () => (/* binding */ toc)
-/* harmony export */ });
-/* harmony import */ var _home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(87462);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var _mdx_js_react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3905);
-/* @jsxRuntime classic */ /* @jsx mdx */ /* @jsxFrag React.Fragment */const frontMatter={displayed_sidebar:null,sidebar_class_name:'hidden',pagination_prev:null,pagination_next:null};const contentTitle='Terms of Use';const metadata={"unversionedId":"terms","id":"terms","title":"Terms of Use","description":"Last updated: 14 February 2024","source":"@site/root-pages/terms.md","sourceDirName":".","slug":"/terms","permalink":"/terms","draft":false,"tags":[],"version":"current","frontMatter":{"displayed_sidebar":null,"sidebar_class_name":"hidden","pagination_prev":null,"pagination_next":null}};const assets={};const toc=[{value:'1) Who we are',id:'1-who-we-are',level:3},{value:'2) Disclaimers',id:'2-disclaimers',level:3},{value:'3) Forward looking statements',id:'3-forward-looking-statements',level:3},{value:'4) Intellectual property rights',id:'4-intellectual-property-rights',level:3},{value:'5) Third-party website links',id:'5-third-party-website-links',level:3},{value:'6) Limitation of liability',id:'6-limitation-of-liability',level:3},{value:'7) Indemnity',id:'7-indemnity',level:3},{value:'8) Modifications',id:'8-modifications',level:3},{value:'9) Governing law',id:'9-governing-law',level:3},{value:'10) Disputes',id:'10-disputes',level:3},{value:'11) About these Website Terms of Use',id:'11-about-these-website-terms-of-use',level:3}];const layoutProps={toc};const MDXLayout="wrapper";function MDXContent({components,...props}){return (0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)(MDXLayout,(0,_home_jenkins_workspace_website_codex_storage_node_modules_babel_runtime_helpers_esm_extends_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({},layoutProps,props,{components:components,mdxType:"MDXLayout"}),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h1",{"id":"terms-of-use"},`Terms of Use`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Last updated: 14 February 2024`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`These website terms of use ('`,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("strong",{parentName:"p"},`Website Terms of Use`),`') are entered into by you and us, and they govern your access and use of this Website, including any content and functionality contained in the Website.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`It is your responsibility to read the Website Terms of Use carefully before your use of the Website and your use of the Website means you have agreed to be bound and comply with these Website Terms of Use.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`If you do not agree with these Website Terms of Use, you must not access or use the Website.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"1-who-we-are"},`1) Who we are`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`For the purposes of these Website Terms of Use, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at:`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("pre",null,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("code",{parentName:"pre"},`Logos Collective Association
-c/o PST Consulting GmbH
-Baarerstrasse 10
-6300 Zug
-Switzerland
-`)),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Whenever we refer to “Logos”, “we”, “us” or any other similar references, we are referring to the Logos Collective Association.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"2-disclaimers"},`2) Disclaimers`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The Website is provided by us on an ‘as is’ basis and you use the Website at your own sole discretion and risk.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`We disclaim all warranties of any kind, express or implied, including without limitation the warranties of merchantability, fitness for a particular purpose, and non-infringement of intellectual property or other violation of rights. We do not warrant or make any representations concerning the completeness, accuracy, legality, utility, reliability, suitability or availability of the use of the Website, the content on this Website or otherwise relating to the Website, such content or on any sites linked to this site.These disclaimers will apply to the maximum extent permitted by applicable law.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`We make no claims that the Website or any of its content is accessible, legally compliant or appropriate in your jurisdiction. Your access or use of the Website is at your own sole discretion and you are solely responsible for complying with any applicable local laws.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The content herein or as accessible through this website is intended to be made available for informational purposes only and should not be considered as creating any expectations or forming the basis of any contract, commitment or binding obligation with us. No information herein shall be considered to contain or be relied upon as a promise, representation, warranty or guarantee, whether express or implied and whether as to the past, present or the future in relation to the projects and matters described herein.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The information contained herein does not constitute financial, legal, tax, or other advice and should not be treated as such.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Nothing in this Website should be construed by you as an offer to buy or sell, or soliciting any offer to buy or sell any tokens or any security.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"3-forward-looking-statements"},`3) Forward looking statements`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The Website may also contain forward-looking statements that are based on current expectations, estimates, forecasts, assumptions and projections about the technology, industry and markets in general.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The forward looking statements, which may include statements about the roadmap, project descriptions, technical details, functionalities, features, the development and use of tokens by projects, and any other statements related to such matters or as accessible through this website are subject to a high degree of risk and uncertainty. The forward looking statements are subject to change based on, among other things, market conditions, technical developments, and regulatory environment. The actual development and results, including the order and the timeline, might vary from what’s presented. The information contained herein is a summary and does not purport to be accurate, reliable or complete and we bear no responsibility for the accuracy, reliability or completeness of information contained herein. Because of the high degree of risk and uncertainty described above, you should not place undue reliance on any matters described in this website or as accessible through this website.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`While we aim to update our website regularly, all information, including the timeline and the specifics of each stage, is subject to change and may be amended or supplemented at any time, without notice and at our sole discretion.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"4-intellectual-property-rights"},`4) Intellectual property rights`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The Website and its contents are made available under Creative Commons Attribution 4.0 International license (CC-BY 4.0). In essence this licence allows users to copy, modify and distribute the content in any format for any purpose, including commercial use, subject to certain requirements such as attributing us. For the full terms of this licence, please refer to the following website: `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"p","href":"https://creativecommons.org/licenses/by/4.0/"},`https://creativecommons.org/licenses/by/4.0/`),`.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"5-third-party-website-links"},`5) Third-party website links`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`To the extent the Website provides any links to a third party website, then their terms and conditions, including privacy policies, govern your use of those third party websites. By linking such third party websites, Status does not represent or imply that it endorses or supports such third party websites or content therein, or that it believes such third party websites and content therein to be accurate, useful or non-harmful. We have no control over such third party websites and will not be liable for your use of or activities on any third party websites accessed through the Website. If you access such third party websites through the Website, it is at your own risk and you are solely responsible for your activities on such third party websites.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"6-limitation-of-liability"},`6) Limitation of liability`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`We will not be held liable to you under any contract, negligence, strict liability, or other legal or equitable theory for any lost profits, cost of procurement for substitute services, or any special, incidental, or consequential damages related to, arising from, or in any way connected with these Website Terms of Use, the Website, the content on the Website, or your use of the Website, even if we have been advised of the possibility of such damages. In any event, our aggregate liability for such claims is limited to EUR 100 (one hundred Euros). This limitation of liability will apply to the maximum extent permitted by applicable law.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"7-indemnity"},`7) Indemnity`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`You shall indemnify us and hold us harmless from and against any and all claims, damages and expenses, including attorneys’ fees, arising from or related to your use of the Website, the content on the Website, including without limitation your violation of these Website Terms of Use.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"8-modifications"},`8) Modifications`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`We may modify or replace any part of this Website Terms of Use at any time and without notice. You are responsible for checking the Website periodically for any changes. The new Website Terms of Use will be effective immediately upon its posting on the Website.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"9-governing-law"},`9) Governing law`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Swiss law governs these Website Terms of Use and any disputes between you and us, whether in court or arbitration, without regard to conflict of laws provisions.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"10-disputes"},`10) Disputes`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`In these terms, “dispute” has the broadest meaning enforceable by law and includes any claim you make against or controversy you may have in relation to these Website Terms of Use, the Website, the content on the Website, or your use of the Website.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`We prefer arbitration over litigation as we believe it meets our principle of resolving disputes in the most effective and cost effective manner. You are bound by the following arbitration clause, which waives your right to litigation and to be heard by a judge. Please note that court review of an arbitration award is limited. You also waive all your rights to a jury trial (if any) in any and all jurisdictions.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`If a (potential) dispute arises, you must first use your reasonable efforts to resolve it amicably with us. If these efforts do not result in a resolution of such dispute, you shall then send us a written notice of dispute setting out (i) the nature of the dispute, and the claim you are making; and (ii) the remedy you are seeking.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`If we and you are unable to further resolve this dispute within sixty (60) calendar days of us receiving this notice of dispute, then any such dispute will be referred to and finally resolved by you and us through an arbitration administered by the Swiss Chambers’ Arbitration Institution in accordance with the Swiss Rules of International Arbitration for the time being in force, which rules are deemed to be incorporated herein by reference. The arbitral decision may be enforced in any court. The arbitration will be held in Zug, Switzerland, and may be conducted via video conference virtual/online methods if possible. The tribunal will consist of one arbitrator, and all proceedings as well as communications between the parties will be kept confidential. The language of the arbitration will be in English. Payment of all relevant fees in respect of the arbitration, including filing, administration and arbitrator fees will be in accordance with the Swiss Rules of International Arbitration.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`Regardless of any applicable statute of limitations, you must bring any claims within one year after the claim arose or the time when you should have reasonably known about the claim. You also waive the right to participate in a class action lawsuit or a classwide arbitration against us.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("h3",{"id":"11-about-these-website-terms-of-use"},`11) About these Website Terms of Use`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`These Website Terms of Use cover the entire agreement between you and us regarding the Website and supersede all prior and contemporaneous understandings, agreements, representations and warranties, both written and oral, with respect to the Website.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`The captions and headings identifying sections and subsections of these Website Terms of Use are for reference only and do not define, modify, expand, limit, or affect the interpretation of any provisions of these Website Terms of Use.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`If any part of these Website Terms of Use is held invalid or unenforceable, that part will be severable from these Website Terms of Use, and the remaining portions will remain in full force and effect. If we fail to enforce any of these Website Terms of Use, that does not mean that we have waived our right to enforce them.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`If you have any specific questions about these Website Terms of Use, please contact us at `,(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("a",{parentName:"p","href":"mailto:legal@free.technology"},`legal@free.technology`),`.`),(0,_mdx_js_react__WEBPACK_IMPORTED_MODULE_1__/* .mdx */ .kt)("p",null,`This document is licensed under CC-BY-SA.`));};MDXContent.isMDXComponent=true;
-
-/***/ }),
-
-/***/ 27162:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-const ansiStyles = __webpack_require__(26434);
-const {stdout: stdoutColor, stderr: stderrColor} = __webpack_require__(92130);
-const {
-	stringReplaceAll,
-	stringEncaseCRLFWithFirstIndex
-} = __webpack_require__(99227);
-
-const {isArray} = Array;
-
-// `supportsColor.level` → `ansiStyles.color[name]` mapping
-const levelMapping = [
-	'ansi',
-	'ansi',
-	'ansi256',
-	'ansi16m'
-];
-
-const styles = Object.create(null);
-
-const applyOptions = (object, options = {}) => {
-	if (options.level && !(Number.isInteger(options.level) && options.level >= 0 && options.level <= 3)) {
-		throw new Error('The `level` option should be an integer from 0 to 3');
-	}
-
-	// Detect level if not set manually
-	const colorLevel = stdoutColor ? stdoutColor.level : 0;
-	object.level = options.level === undefined ? colorLevel : options.level;
-};
-
-class ChalkClass {
-	constructor(options) {
-		// eslint-disable-next-line no-constructor-return
-		return chalkFactory(options);
-	}
-}
-
-const chalkFactory = options => {
-	const chalk = {};
-	applyOptions(chalk, options);
-
-	chalk.template = (...arguments_) => chalkTag(chalk.template, ...arguments_);
-
-	Object.setPrototypeOf(chalk, Chalk.prototype);
-	Object.setPrototypeOf(chalk.template, chalk);
-
-	chalk.template.constructor = () => {
-		throw new Error('`chalk.constructor()` is deprecated. Use `new chalk.Instance()` instead.');
-	};
-
-	chalk.template.Instance = ChalkClass;
-
-	return chalk.template;
-};
-
-function Chalk(options) {
-	return chalkFactory(options);
-}
-
-for (const [styleName, style] of Object.entries(ansiStyles)) {
-	styles[styleName] = {
-		get() {
-			const builder = createBuilder(this, createStyler(style.open, style.close, this._styler), this._isEmpty);
-			Object.defineProperty(this, styleName, {value: builder});
-			return builder;
-		}
-	};
-}
-
-styles.visible = {
-	get() {
-		const builder = createBuilder(this, this._styler, true);
-		Object.defineProperty(this, 'visible', {value: builder});
-		return builder;
-	}
-};
-
-const usedModels = ['rgb', 'hex', 'keyword', 'hsl', 'hsv', 'hwb', 'ansi', 'ansi256'];
-
-for (const model of usedModels) {
-	styles[model] = {
-		get() {
-			const {level} = this;
-			return function (...arguments_) {
-				const styler = createStyler(ansiStyles.color[levelMapping[level]][model](...arguments_), ansiStyles.color.close, this._styler);
-				return createBuilder(this, styler, this._isEmpty);
-			};
-		}
-	};
-}
-
-for (const model of usedModels) {
-	const bgModel = 'bg' + model[0].toUpperCase() + model.slice(1);
-	styles[bgModel] = {
-		get() {
-			const {level} = this;
-			return function (...arguments_) {
-				const styler = createStyler(ansiStyles.bgColor[levelMapping[level]][model](...arguments_), ansiStyles.bgColor.close, this._styler);
-				return createBuilder(this, styler, this._isEmpty);
-			};
-		}
-	};
-}
-
-const proto = Object.defineProperties(() => {}, {
-	...styles,
-	level: {
-		enumerable: true,
-		get() {
-			return this._generator.level;
-		},
-		set(level) {
-			this._generator.level = level;
-		}
-	}
-});
-
-const createStyler = (open, close, parent) => {
-	let openAll;
-	let closeAll;
-	if (parent === undefined) {
-		openAll = open;
-		closeAll = close;
-	} else {
-		openAll = parent.openAll + open;
-		closeAll = close + parent.closeAll;
-	}
-
-	return {
-		open,
-		close,
-		openAll,
-		closeAll,
-		parent
-	};
-};
-
-const createBuilder = (self, _styler, _isEmpty) => {
-	const builder = (...arguments_) => {
-		if (isArray(arguments_[0]) && isArray(arguments_[0].raw)) {
-			// Called as a template literal, for example: chalk.red`2 + 3 = {bold ${2+3}}`
-			return applyStyle(builder, chalkTag(builder, ...arguments_));
-		}
-
-		// Single argument is hot path, implicit coercion is faster than anything
-		// eslint-disable-next-line no-implicit-coercion
-		return applyStyle(builder, (arguments_.length === 1) ? ('' + arguments_[0]) : arguments_.join(' '));
-	};
-
-	// We alter the prototype because we must return a function, but there is
-	// no way to create a function with a different prototype
-	Object.setPrototypeOf(builder, proto);
-
-	builder._generator = self;
-	builder._styler = _styler;
-	builder._isEmpty = _isEmpty;
-
-	return builder;
-};
-
-const applyStyle = (self, string) => {
-	if (self.level <= 0 || !string) {
-		return self._isEmpty ? '' : string;
-	}
-
-	let styler = self._styler;
-
-	if (styler === undefined) {
-		return string;
-	}
-
-	const {openAll, closeAll} = styler;
-	if (string.indexOf('\u001B') !== -1) {
-		while (styler !== undefined) {
-			// Replace any instances already present with a re-opening code
-			// otherwise only the part of the string until said closing code
-			// will be colored, and the rest will simply be 'plain'.
-			string = stringReplaceAll(string, styler.close, styler.open);
-
-			styler = styler.parent;
-		}
-	}
-
-	// We can move both next actions out of loop, because remaining actions in loop won't have
-	// any/visible effect on parts we add here. Close the styling before a linebreak and reopen
-	// after next line to fix a bleed issue on macOS: https://github.com/chalk/chalk/pull/92
-	const lfIndex = string.indexOf('\n');
-	if (lfIndex !== -1) {
-		string = stringEncaseCRLFWithFirstIndex(string, closeAll, openAll, lfIndex);
-	}
-
-	return openAll + string + closeAll;
-};
-
-let template;
-const chalkTag = (chalk, ...strings) => {
-	const [firstString] = strings;
-
-	if (!isArray(firstString) || !isArray(firstString.raw)) {
-		// If chalk() was called by itself or with a string,
-		// return the string itself as a string.
-		return strings.join(' ');
-	}
-
-	const arguments_ = strings.slice(1);
-	const parts = [firstString.raw[0]];
-
-	for (let i = 1; i < firstString.length; i++) {
-		parts.push(
-			String(arguments_[i - 1]).replace(/[{}\\]/g, '\\$&'),
-			String(firstString.raw[i])
-		);
-	}
-
-	if (template === undefined) {
-		template = __webpack_require__(43656);
-	}
-
-	return template(chalk, parts.join(''));
-};
-
-Object.defineProperties(Chalk.prototype, styles);
-
-const chalk = Chalk(); // eslint-disable-line new-cap
-chalk.supportsColor = stdoutColor;
-chalk.stderr = Chalk({level: stderrColor ? stderrColor.level : 0}); // eslint-disable-line new-cap
-chalk.stderr.supportsColor = stderrColor;
-
-module.exports = chalk;
-
-
-/***/ }),
-
-/***/ 43656:
-/***/ ((module) => {
-
-"use strict";
-
-const TEMPLATE_REGEX = /(?:\\(u(?:[a-f\d]{4}|\{[a-f\d]{1,6}\})|x[a-f\d]{2}|.))|(?:\{(~)?(\w+(?:\([^)]*\))?(?:\.\w+(?:\([^)]*\))?)*)(?:[ \t]|(?=\r?\n)))|(\})|((?:.|[\r\n\f])+?)/gi;
-const STYLE_REGEX = /(?:^|\.)(\w+)(?:\(([^)]*)\))?/g;
-const STRING_REGEX = /^(['"])((?:\\.|(?!\1)[^\\])*)\1$/;
-const ESCAPE_REGEX = /\\(u(?:[a-f\d]{4}|{[a-f\d]{1,6}})|x[a-f\d]{2}|.)|([^\\])/gi;
-
-const ESCAPES = new Map([
-	['n', '\n'],
-	['r', '\r'],
-	['t', '\t'],
-	['b', '\b'],
-	['f', '\f'],
-	['v', '\v'],
-	['0', '\0'],
-	['\\', '\\'],
-	['e', '\u001B'],
-	['a', '\u0007']
-]);
-
-function unescape(c) {
-	const u = c[0] === 'u';
-	const bracket = c[1] === '{';
-
-	if ((u && !bracket && c.length === 5) || (c[0] === 'x' && c.length === 3)) {
-		return String.fromCharCode(parseInt(c.slice(1), 16));
-	}
-
-	if (u && bracket) {
-		return String.fromCodePoint(parseInt(c.slice(2, -1), 16));
-	}
-
-	return ESCAPES.get(c) || c;
-}
-
-function parseArguments(name, arguments_) {
-	const results = [];
-	const chunks = arguments_.trim().split(/\s*,\s*/g);
-	let matches;
-
-	for (const chunk of chunks) {
-		const number = Number(chunk);
-		if (!Number.isNaN(number)) {
-			results.push(number);
-		} else if ((matches = chunk.match(STRING_REGEX))) {
-			results.push(matches[2].replace(ESCAPE_REGEX, (m, escape, character) => escape ? unescape(escape) : character));
-		} else {
-			throw new Error(`Invalid Chalk template style argument: ${chunk} (in style '${name}')`);
-		}
-	}
-
-	return results;
-}
-
-function parseStyle(style) {
-	STYLE_REGEX.lastIndex = 0;
-
-	const results = [];
-	let matches;
-
-	while ((matches = STYLE_REGEX.exec(style)) !== null) {
-		const name = matches[1];
-
-		if (matches[2]) {
-			const args = parseArguments(name, matches[2]);
-			results.push([name].concat(args));
-		} else {
-			results.push([name]);
-		}
-	}
-
-	return results;
-}
-
-function buildStyle(chalk, styles) {
-	const enabled = {};
-
-	for (const layer of styles) {
-		for (const style of layer.styles) {
-			enabled[style[0]] = layer.inverse ? null : style.slice(1);
-		}
-	}
-
-	let current = chalk;
-	for (const [styleName, styles] of Object.entries(enabled)) {
-		if (!Array.isArray(styles)) {
-			continue;
-		}
-
-		if (!(styleName in current)) {
-			throw new Error(`Unknown Chalk style: ${styleName}`);
-		}
-
-		current = styles.length > 0 ? current[styleName](...styles) : current[styleName];
-	}
-
-	return current;
-}
-
-module.exports = (chalk, temporary) => {
-	const styles = [];
-	const chunks = [];
-	let chunk = [];
-
-	// eslint-disable-next-line max-params
-	temporary.replace(TEMPLATE_REGEX, (m, escapeCharacter, inverse, style, close, character) => {
-		if (escapeCharacter) {
-			chunk.push(unescape(escapeCharacter));
-		} else if (style) {
-			const string = chunk.join('');
-			chunk = [];
-			chunks.push(styles.length === 0 ? string : buildStyle(chalk, styles)(string));
-			styles.push({inverse, styles: parseStyle(style)});
-		} else if (close) {
-			if (styles.length === 0) {
-				throw new Error('Found extraneous } in Chalk template literal');
-			}
-
-			chunks.push(buildStyle(chalk, styles)(chunk.join('')));
-			chunk = [];
-			styles.pop();
-		} else {
-			chunk.push(character);
-		}
-	});
-
-	chunks.push(chunk.join(''));
-
-	if (styles.length > 0) {
-		const errMessage = `Chalk template literal is missing ${styles.length} closing bracket${styles.length === 1 ? '' : 's'} (\`}\`)`;
-		throw new Error(errMessage);
-	}
-
-	return chunks.join('');
-};
-
-
-/***/ }),
-
-/***/ 99227:
-/***/ ((module) => {
-
-"use strict";
-
-
-const stringReplaceAll = (string, substring, replacer) => {
-	let index = string.indexOf(substring);
-	if (index === -1) {
-		return string;
-	}
-
-	const substringLength = substring.length;
-	let endIndex = 0;
-	let returnValue = '';
-	do {
-		returnValue += string.substr(endIndex, index - endIndex) + substring + replacer;
-		endIndex = index + substringLength;
-		index = string.indexOf(substring, endIndex);
-	} while (index !== -1);
-
-	returnValue += string.substr(endIndex);
-	return returnValue;
-};
-
-const stringEncaseCRLFWithFirstIndex = (string, prefix, postfix, index) => {
-	let endIndex = 0;
-	let returnValue = '';
-	do {
-		const gotCR = string[index - 1] === '\r';
-		returnValue += string.substr(endIndex, (gotCR ? index - 1 : index) - endIndex) + prefix + (gotCR ? '\r\n' : '\n') + postfix;
-		endIndex = index + 1;
-		index = string.indexOf('\n', endIndex);
-	} while (index !== -1);
-
-	returnValue += string.substr(endIndex);
-	return returnValue;
-};
-
-module.exports = {
-	stringReplaceAll,
-	stringEncaseCRLFWithFirstIndex
-};
-
-
-/***/ }),
-
-/***/ 43569:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ createCache)
-});
-
-;// CONCATENATED MODULE: ./node_modules/@emotion/sheet/dist/emotion-sheet.esm.js
-/*
-
-Based off glamor's StyleSheet, thanks Sunil ❤️
-
-high performance StyleSheet for css-in-js systems
-
-- uses multiple style tags behind the scenes for millions of rules
-- uses `insertRule` for appending in production for *much* faster performance
-
-// usage
-
-import { StyleSheet } from '@emotion/sheet'
-
-let styleSheet = new StyleSheet({ key: '', container: document.head })
-
-styleSheet.insert('#box { border: 1px solid red; }')
-- appends a css rule into the stylesheet
-
-styleSheet.flush()
-- empties the stylesheet of all its contents
-
-*/
-// $FlowFixMe
-function sheetForTag(tag) {
-  if (tag.sheet) {
-    // $FlowFixMe
-    return tag.sheet;
-  } // this weirdness brought to you by firefox
-
-  /* istanbul ignore next */
-
-
-  for (var i = 0; i < document.styleSheets.length; i++) {
-    if (document.styleSheets[i].ownerNode === tag) {
-      // $FlowFixMe
-      return document.styleSheets[i];
-    }
-  }
-}
-
-function createStyleElement(options) {
-  var tag = document.createElement('style');
-  tag.setAttribute('data-emotion', options.key);
-
-  if (options.nonce !== undefined) {
-    tag.setAttribute('nonce', options.nonce);
-  }
-
-  tag.appendChild(document.createTextNode(''));
-  tag.setAttribute('data-s', '');
-  return tag;
-}
-
-var StyleSheet = /*#__PURE__*/function () {
-  // Using Node instead of HTMLElement since container may be a ShadowRoot
-  function StyleSheet(options) {
-    var _this = this;
-
-    this._insertTag = function (tag) {
-      var before;
-
-      if (_this.tags.length === 0) {
-        if (_this.insertionPoint) {
-          before = _this.insertionPoint.nextSibling;
-        } else if (_this.prepend) {
-          before = _this.container.firstChild;
-        } else {
-          before = _this.before;
-        }
-      } else {
-        before = _this.tags[_this.tags.length - 1].nextSibling;
-      }
-
-      _this.container.insertBefore(tag, before);
-
-      _this.tags.push(tag);
-    };
-
-    this.isSpeedy = options.speedy === undefined ? "production" === 'production' : options.speedy;
-    this.tags = [];
-    this.ctr = 0;
-    this.nonce = options.nonce; // key is the value of the data-emotion attribute, it's used to identify different sheets
-
-    this.key = options.key;
-    this.container = options.container;
-    this.prepend = options.prepend;
-    this.insertionPoint = options.insertionPoint;
-    this.before = null;
-  }
-
-  var _proto = StyleSheet.prototype;
-
-  _proto.hydrate = function hydrate(nodes) {
-    nodes.forEach(this._insertTag);
-  };
-
-  _proto.insert = function insert(rule) {
-    // the max length is how many rules we have per style tag, it's 65000 in speedy mode
-    // it's 1 in dev because we insert source maps that map a single rule to a location
-    // and you can only have one source map per style tag
-    if (this.ctr % (this.isSpeedy ? 65000 : 1) === 0) {
-      this._insertTag(createStyleElement(this));
-    }
-
-    var tag = this.tags[this.tags.length - 1];
-
-    if (false) { var isImportRule; }
-
-    if (this.isSpeedy) {
-      var sheet = sheetForTag(tag);
-
-      try {
-        // this is the ultrafast version, works across browsers
-        // the big drawback is that the css won't be editable in devtools
-        sheet.insertRule(rule, sheet.cssRules.length);
-      } catch (e) {
-        if (false) {}
-      }
-    } else {
-      tag.appendChild(document.createTextNode(rule));
-    }
-
-    this.ctr++;
-  };
-
-  _proto.flush = function flush() {
-    // $FlowFixMe
-    this.tags.forEach(function (tag) {
-      return tag.parentNode && tag.parentNode.removeChild(tag);
-    });
-    this.tags = [];
-    this.ctr = 0;
-
-    if (false) {}
-  };
-
-  return StyleSheet;
-}();
-
-
-
-// EXTERNAL MODULE: ./node_modules/stylis/src/Tokenizer.js
-var Tokenizer = __webpack_require__(46411);
-// EXTERNAL MODULE: ./node_modules/stylis/src/Utility.js
-var Utility = __webpack_require__(26686);
-// EXTERNAL MODULE: ./node_modules/stylis/src/Enum.js
-var Enum = __webpack_require__(27563);
-// EXTERNAL MODULE: ./node_modules/stylis/src/Serializer.js
-var Serializer = __webpack_require__(20211);
-;// CONCATENATED MODULE: ./node_modules/stylis/src/Middleware.js
-
-
-
-
-
-
-/**
- * @param {function[]} collection
- * @return {function}
- */
-function middleware (collection) {
-	var length = (0,Utility/* sizeof */.Ei)(collection)
-
-	return function (element, index, children, callback) {
-		var output = ''
-
-		for (var i = 0; i < length; i++)
-			output += collection[i](element, index, children, callback) || ''
-
-		return output
-	}
-}
-
-/**
- * @param {function} callback
- * @return {function}
- */
-function rulesheet (callback) {
-	return function (element) {
-		if (!element.root)
-			if (element = element.return)
-				callback(element)
-	}
-}
-
-/**
- * @param {object} element
- * @param {number} index
- * @param {object[]} children
- * @param {function} callback
- */
-function prefixer (element, index, children, callback) {
-	if (element.length > -1)
-		if (!element.return)
-			switch (element.type) {
-				case DECLARATION: element.return = prefix(element.value, element.length, children)
-					return
-				case KEYFRAMES:
-					return serialize([copy(element, {value: replace(element.value, '@', '@' + WEBKIT)})], callback)
-				case RULESET:
-					if (element.length)
-						return combine(element.props, function (value) {
-							switch (match(value, /(::plac\w+|:read-\w+)/)) {
-								// :read-(only|write)
-								case ':read-only': case ':read-write':
-									return serialize([copy(element, {props: [replace(value, /:(read-\w+)/, ':' + MOZ + '$1')]})], callback)
-								// :placeholder
-								case '::placeholder':
-									return serialize([
-										copy(element, {props: [replace(value, /:(plac\w+)/, ':' + WEBKIT + 'input-$1')]}),
-										copy(element, {props: [replace(value, /:(plac\w+)/, ':' + MOZ + '$1')]}),
-										copy(element, {props: [replace(value, /:(plac\w+)/, MS + 'input-$1')]})
-									], callback)
-							}
-
-							return ''
-						})
-			}
-}
-
-/**
- * @param {object} element
- * @param {number} index
- * @param {object[]} children
- */
-function namespace (element) {
-	switch (element.type) {
-		case RULESET:
-			element.props = element.props.map(function (value) {
-				return combine(tokenize(value), function (value, index, children) {
-					switch (charat(value, 0)) {
-						// \f
-						case 12:
-							return substr(value, 1, strlen(value))
-						// \0 ( + > ~
-						case 0: case 40: case 43: case 62: case 126:
-							return value
-						// :
-						case 58:
-							if (children[++index] === 'global')
-								children[index] = '', children[++index] = '\f' + substr(children[index], index = 1, -1)
-						// \s
-						case 32:
-							return index === 1 ? '' : value
-						default:
-							switch (index) {
-								case 0: element = value
-									return sizeof(children) > 1 ? '' : value
-								case index = sizeof(children) - 1: case 2:
-									return index === 2 ? value + element + element : value + element
-								default:
-									return value
-							}
-					}
-				})
-			})
-	}
-}
-
-// EXTERNAL MODULE: ./node_modules/stylis/src/Parser.js
-var Parser = __webpack_require__(92190);
-// EXTERNAL MODULE: ./node_modules/@emotion/weak-memoize/dist/emotion-weak-memoize.esm.js
-var emotion_weak_memoize_esm = __webpack_require__(81034);
-// EXTERNAL MODULE: ./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js
-var emotion_memoize_esm = __webpack_require__(45042);
-;// CONCATENATED MODULE: ./node_modules/@emotion/cache/dist/emotion-cache.esm.js
-
-
-
-
-
-var identifierWithPointTracking = function identifierWithPointTracking(begin, points, index) {
-  var previous = 0;
-  var character = 0;
-
-  while (true) {
-    previous = character;
-    character = (0,Tokenizer/* peek */.fj)(); // &\f
-
-    if (previous === 38 && character === 12) {
-      points[index] = 1;
-    }
-
-    if ((0,Tokenizer/* token */.r)(character)) {
-      break;
-    }
-
-    (0,Tokenizer/* next */.lp)();
-  }
-
-  return (0,Tokenizer/* slice */.tP)(begin, Tokenizer/* position */.FK);
-};
-
-var toRules = function toRules(parsed, points) {
-  // pretend we've started with a comma
-  var index = -1;
-  var character = 44;
-
-  do {
-    switch ((0,Tokenizer/* token */.r)(character)) {
-      case 0:
-        // &\f
-        if (character === 38 && (0,Tokenizer/* peek */.fj)() === 12) {
-          // this is not 100% correct, we don't account for literal sequences here - like for example quoted strings
-          // stylis inserts \f after & to know when & where it should replace this sequence with the context selector
-          // and when it should just concatenate the outer and inner selectors
-          // it's very unlikely for this sequence to actually appear in a different context, so we just leverage this fact here
-          points[index] = 1;
-        }
-
-        parsed[index] += identifierWithPointTracking(Tokenizer/* position */.FK - 1, points, index);
-        break;
-
-      case 2:
-        parsed[index] += (0,Tokenizer/* delimit */.iF)(character);
-        break;
-
-      case 4:
-        // comma
-        if (character === 44) {
-          // colon
-          parsed[++index] = (0,Tokenizer/* peek */.fj)() === 58 ? '&\f' : '';
-          points[index] = parsed[index].length;
-          break;
-        }
-
-      // fallthrough
-
-      default:
-        parsed[index] += (0,Utility/* from */.Dp)(character);
-    }
-  } while (character = (0,Tokenizer/* next */.lp)());
-
-  return parsed;
-};
-
-var getRules = function getRules(value, points) {
-  return (0,Tokenizer/* dealloc */.cE)(toRules((0,Tokenizer/* alloc */.un)(value), points));
-}; // WeakSet would be more appropriate, but only WeakMap is supported in IE11
-
-
-var fixedElements = /* #__PURE__ */new WeakMap();
-var compat = function compat(element) {
-  if (element.type !== 'rule' || !element.parent || // positive .length indicates that this rule contains pseudo
-  // negative .length indicates that this rule has been already prefixed
-  element.length < 1) {
-    return;
-  }
-
-  var value = element.value,
-      parent = element.parent;
-  var isImplicitRule = element.column === parent.column && element.line === parent.line;
-
-  while (parent.type !== 'rule') {
-    parent = parent.parent;
-    if (!parent) return;
-  } // short-circuit for the simplest case
-
-
-  if (element.props.length === 1 && value.charCodeAt(0) !== 58
-  /* colon */
-  && !fixedElements.get(parent)) {
-    return;
-  } // if this is an implicitly inserted rule (the one eagerly inserted at the each new nested level)
-  // then the props has already been manipulated beforehand as they that array is shared between it and its "rule parent"
-
-
-  if (isImplicitRule) {
-    return;
-  }
-
-  fixedElements.set(element, true);
-  var points = [];
-  var rules = getRules(value, points);
-  var parentRules = parent.props;
-
-  for (var i = 0, k = 0; i < rules.length; i++) {
-    for (var j = 0; j < parentRules.length; j++, k++) {
-      element.props[k] = points[i] ? rules[i].replace(/&\f/g, parentRules[j]) : parentRules[j] + " " + rules[i];
-    }
-  }
-};
-var removeLabel = function removeLabel(element) {
-  if (element.type === 'decl') {
-    var value = element.value;
-
-    if ( // charcode for l
-    value.charCodeAt(0) === 108 && // charcode for b
-    value.charCodeAt(2) === 98) {
-      // this ignores label
-      element["return"] = '';
-      element.value = '';
-    }
-  }
-};
-var ignoreFlag = 'emotion-disable-server-rendering-unsafe-selector-warning-please-do-not-use-this-the-warning-exists-for-a-reason';
-
-var isIgnoringComment = function isIgnoringComment(element) {
-  return element.type === 'comm' && element.children.indexOf(ignoreFlag) > -1;
-};
-
-var createUnsafeSelectorsAlarm = function createUnsafeSelectorsAlarm(cache) {
-  return function (element, index, children) {
-    if (element.type !== 'rule' || cache.compat) return;
-    var unsafePseudoClasses = element.value.match(/(:first|:nth|:nth-last)-child/g);
-
-    if (unsafePseudoClasses) {
-      var isNested = !!element.parent; // in nested rules comments become children of the "auto-inserted" rule and that's always the `element.parent`
-      //
-      // considering this input:
-      // .a {
-      //   .b /* comm */ {}
-      //   color: hotpink;
-      // }
-      // we get output corresponding to this:
-      // .a {
-      //   & {
-      //     /* comm */
-      //     color: hotpink;
-      //   }
-      //   .b {}
-      // }
-
-      var commentContainer = isNested ? element.parent.children : // global rule at the root level
-      children;
-
-      for (var i = commentContainer.length - 1; i >= 0; i--) {
-        var node = commentContainer[i];
-
-        if (node.line < element.line) {
-          break;
-        } // it is quite weird but comments are *usually* put at `column: element.column - 1`
-        // so we seek *from the end* for the node that is earlier than the rule's `element` and check that
-        // this will also match inputs like this:
-        // .a {
-        //   /* comm */
-        //   .b {}
-        // }
-        //
-        // but that is fine
-        //
-        // it would be the easiest to change the placement of the comment to be the first child of the rule:
-        // .a {
-        //   .b { /* comm */ }
-        // }
-        // with such inputs we wouldn't have to search for the comment at all
-        // TODO: consider changing this comment placement in the next major version
-
-
-        if (node.column < element.column) {
-          if (isIgnoringComment(node)) {
-            return;
-          }
-
-          break;
-        }
-      }
-
-      unsafePseudoClasses.forEach(function (unsafePseudoClass) {
-        console.error("The pseudo class \"" + unsafePseudoClass + "\" is potentially unsafe when doing server-side rendering. Try changing it to \"" + unsafePseudoClass.split('-child')[0] + "-of-type\".");
-      });
-    }
-  };
-};
-
-var isImportRule = function isImportRule(element) {
-  return element.type.charCodeAt(1) === 105 && element.type.charCodeAt(0) === 64;
-};
-
-var isPrependedWithRegularRules = function isPrependedWithRegularRules(index, children) {
-  for (var i = index - 1; i >= 0; i--) {
-    if (!isImportRule(children[i])) {
-      return true;
-    }
-  }
-
-  return false;
-}; // use this to remove incorrect elements from further processing
-// so they don't get handed to the `sheet` (or anything else)
-// as that could potentially lead to additional logs which in turn could be overhelming to the user
-
-
-var nullifyElement = function nullifyElement(element) {
-  element.type = '';
-  element.value = '';
-  element["return"] = '';
-  element.children = '';
-  element.props = '';
-};
-
-var incorrectImportAlarm = function incorrectImportAlarm(element, index, children) {
-  if (!isImportRule(element)) {
-    return;
-  }
-
-  if (element.parent) {
-    console.error("`@import` rules can't be nested inside other rules. Please move it to the top level and put it before regular rules. Keep in mind that they can only be used within global styles.");
-    nullifyElement(element);
-  } else if (isPrependedWithRegularRules(index, children)) {
-    console.error("`@import` rules can't be after other rules. Please put your `@import` rules before your other rules.");
-    nullifyElement(element);
-  }
-};
-
-/* eslint-disable no-fallthrough */
-
-function emotion_cache_esm_prefix(value, length) {
-  switch ((0,Utility/* hash */.vp)(value, length)) {
-    // color-adjust
-    case 5103:
-      return Enum/* WEBKIT */.G$ + 'print-' + value + value;
-    // animation, animation-(delay|direction|duration|fill-mode|iteration-count|name|play-state|timing-function)
-
-    case 5737:
-    case 4201:
-    case 3177:
-    case 3433:
-    case 1641:
-    case 4457:
-    case 2921: // text-decoration, filter, clip-path, backface-visibility, column, box-decoration-break
-
-    case 5572:
-    case 6356:
-    case 5844:
-    case 3191:
-    case 6645:
-    case 3005: // mask, mask-image, mask-(mode|clip|size), mask-(repeat|origin), mask-position, mask-composite,
-
-    case 6391:
-    case 5879:
-    case 5623:
-    case 6135:
-    case 4599:
-    case 4855: // background-clip, columns, column-(count|fill|gap|rule|rule-color|rule-style|rule-width|span|width)
-
-    case 4215:
-    case 6389:
-    case 5109:
-    case 5365:
-    case 5621:
-    case 3829:
-      return Enum/* WEBKIT */.G$ + value + value;
-    // appearance, user-select, transform, hyphens, text-size-adjust
-
-    case 5349:
-    case 4246:
-    case 4810:
-    case 6968:
-    case 2756:
-      return Enum/* WEBKIT */.G$ + value + Enum/* MOZ */.uj + value + Enum.MS + value + value;
-    // flex, flex-direction
-
-    case 6828:
-    case 4268:
-      return Enum/* WEBKIT */.G$ + value + Enum.MS + value + value;
-    // order
-
-    case 6165:
-      return Enum/* WEBKIT */.G$ + value + Enum.MS + 'flex-' + value + value;
-    // align-items
-
-    case 5187:
-      return Enum/* WEBKIT */.G$ + value + (0,Utility/* replace */.gx)(value, /(\w+).+(:[^]+)/, Enum/* WEBKIT */.G$ + 'box-$1$2' + Enum.MS + 'flex-$1$2') + value;
-    // align-self
-
-    case 5443:
-      return Enum/* WEBKIT */.G$ + value + Enum.MS + 'flex-item-' + (0,Utility/* replace */.gx)(value, /flex-|-self/, '') + value;
-    // align-content
-
-    case 4675:
-      return Enum/* WEBKIT */.G$ + value + Enum.MS + 'flex-line-pack' + (0,Utility/* replace */.gx)(value, /align-content|flex-|-self/, '') + value;
-    // flex-shrink
-
-    case 5548:
-      return Enum/* WEBKIT */.G$ + value + Enum.MS + (0,Utility/* replace */.gx)(value, 'shrink', 'negative') + value;
-    // flex-basis
-
-    case 5292:
-      return Enum/* WEBKIT */.G$ + value + Enum.MS + (0,Utility/* replace */.gx)(value, 'basis', 'preferred-size') + value;
-    // flex-grow
-
-    case 6060:
-      return Enum/* WEBKIT */.G$ + 'box-' + (0,Utility/* replace */.gx)(value, '-grow', '') + Enum/* WEBKIT */.G$ + value + Enum.MS + (0,Utility/* replace */.gx)(value, 'grow', 'positive') + value;
-    // transition
-
-    case 4554:
-      return Enum/* WEBKIT */.G$ + (0,Utility/* replace */.gx)(value, /([^-])(transform)/g, '$1' + Enum/* WEBKIT */.G$ + '$2') + value;
-    // cursor
-
-    case 6187:
-      return (0,Utility/* replace */.gx)((0,Utility/* replace */.gx)((0,Utility/* replace */.gx)(value, /(zoom-|grab)/, Enum/* WEBKIT */.G$ + '$1'), /(image-set)/, Enum/* WEBKIT */.G$ + '$1'), value, '') + value;
-    // background, background-image
-
-    case 5495:
-    case 3959:
-      return (0,Utility/* replace */.gx)(value, /(image-set\([^]*)/, Enum/* WEBKIT */.G$ + '$1' + '$`$1');
-    // justify-content
-
-    case 4968:
-      return (0,Utility/* replace */.gx)((0,Utility/* replace */.gx)(value, /(.+:)(flex-)?(.*)/, Enum/* WEBKIT */.G$ + 'box-pack:$3' + Enum.MS + 'flex-pack:$3'), /s.+-b[^;]+/, 'justify') + Enum/* WEBKIT */.G$ + value + value;
-    // (margin|padding)-inline-(start|end)
-
-    case 4095:
-    case 3583:
-    case 4068:
-    case 2532:
-      return (0,Utility/* replace */.gx)(value, /(.+)-inline(.+)/, Enum/* WEBKIT */.G$ + '$1$2') + value;
-    // (min|max)?(width|height|inline-size|block-size)
-
-    case 8116:
-    case 7059:
-    case 5753:
-    case 5535:
-    case 5445:
-    case 5701:
-    case 4933:
-    case 4677:
-    case 5533:
-    case 5789:
-    case 5021:
-    case 4765:
-      // stretch, max-content, min-content, fill-available
-      if ((0,Utility/* strlen */.to)(value) - 1 - length > 6) switch ((0,Utility/* charat */.uO)(value, length + 1)) {
-        // (m)ax-content, (m)in-content
-        case 109:
-          // -
-          if ((0,Utility/* charat */.uO)(value, length + 4) !== 45) break;
-        // (f)ill-available, (f)it-content
-
-        case 102:
-          return (0,Utility/* replace */.gx)(value, /(.+:)(.+)-([^]+)/, '$1' + Enum/* WEBKIT */.G$ + '$2-$3' + '$1' + Enum/* MOZ */.uj + ((0,Utility/* charat */.uO)(value, length + 3) == 108 ? '$3' : '$2-$3')) + value;
-        // (s)tretch
-
-        case 115:
-          return ~(0,Utility/* indexof */.Cw)(value, 'stretch') ? emotion_cache_esm_prefix((0,Utility/* replace */.gx)(value, 'stretch', 'fill-available'), length) + value : value;
-      }
-      break;
-    // position: sticky
-
-    case 4949:
-      // (s)ticky?
-      if ((0,Utility/* charat */.uO)(value, length + 1) !== 115) break;
-    // display: (flex|inline-flex)
-
-    case 6444:
-      switch ((0,Utility/* charat */.uO)(value, (0,Utility/* strlen */.to)(value) - 3 - (~(0,Utility/* indexof */.Cw)(value, '!important') && 10))) {
-        // stic(k)y
-        case 107:
-          return (0,Utility/* replace */.gx)(value, ':', ':' + Enum/* WEBKIT */.G$) + value;
-        // (inline-)?fl(e)x
-
-        case 101:
-          return (0,Utility/* replace */.gx)(value, /(.+:)([^;!]+)(;|!.+)?/, '$1' + Enum/* WEBKIT */.G$ + ((0,Utility/* charat */.uO)(value, 14) === 45 ? 'inline-' : '') + 'box$3' + '$1' + Enum/* WEBKIT */.G$ + '$2$3' + '$1' + Enum.MS + '$2box$3') + value;
-      }
-
-      break;
-    // writing-mode
-
-    case 5936:
-      switch ((0,Utility/* charat */.uO)(value, length + 11)) {
-        // vertical-l(r)
-        case 114:
-          return Enum/* WEBKIT */.G$ + value + Enum.MS + (0,Utility/* replace */.gx)(value, /[svh]\w+-[tblr]{2}/, 'tb') + value;
-        // vertical-r(l)
-
-        case 108:
-          return Enum/* WEBKIT */.G$ + value + Enum.MS + (0,Utility/* replace */.gx)(value, /[svh]\w+-[tblr]{2}/, 'tb-rl') + value;
-        // horizontal(-)tb
-
-        case 45:
-          return Enum/* WEBKIT */.G$ + value + Enum.MS + (0,Utility/* replace */.gx)(value, /[svh]\w+-[tblr]{2}/, 'lr') + value;
-      }
-
-      return Enum/* WEBKIT */.G$ + value + Enum.MS + value + value;
-  }
-
-  return value;
-}
-
-var emotion_cache_esm_prefixer = function prefixer(element, index, children, callback) {
-  if (element.length > -1) if (!element["return"]) switch (element.type) {
-    case Enum/* DECLARATION */.h5:
-      element["return"] = emotion_cache_esm_prefix(element.value, element.length);
-      break;
-
-    case Enum/* KEYFRAMES */.lK:
-      return (0,Serializer/* serialize */.q)([(0,Tokenizer/* copy */.JG)(element, {
-        value: (0,Utility/* replace */.gx)(element.value, '@', '@' + Enum/* WEBKIT */.G$)
-      })], callback);
-
-    case Enum/* RULESET */.Fr:
-      if (element.length) return (0,Utility/* combine */.$e)(element.props, function (value) {
-        switch ((0,Utility/* match */.EQ)(value, /(::plac\w+|:read-\w+)/)) {
-          // :read-(only|write)
-          case ':read-only':
-          case ':read-write':
-            return (0,Serializer/* serialize */.q)([(0,Tokenizer/* copy */.JG)(element, {
-              props: [(0,Utility/* replace */.gx)(value, /:(read-\w+)/, ':' + Enum/* MOZ */.uj + '$1')]
-            })], callback);
-          // :placeholder
-
-          case '::placeholder':
-            return (0,Serializer/* serialize */.q)([(0,Tokenizer/* copy */.JG)(element, {
-              props: [(0,Utility/* replace */.gx)(value, /:(plac\w+)/, ':' + Enum/* WEBKIT */.G$ + 'input-$1')]
-            }), (0,Tokenizer/* copy */.JG)(element, {
-              props: [(0,Utility/* replace */.gx)(value, /:(plac\w+)/, ':' + Enum/* MOZ */.uj + '$1')]
-            }), (0,Tokenizer/* copy */.JG)(element, {
-              props: [(0,Utility/* replace */.gx)(value, /:(plac\w+)/, Enum.MS + 'input-$1')]
-            })], callback);
-        }
-
-        return '';
-      });
-  }
-};
-
-var isBrowser = typeof document !== 'undefined';
-var getServerStylisCache = isBrowser ? undefined : (0,emotion_weak_memoize_esm/* default */.Z)(function () {
-  return (0,emotion_memoize_esm/* default */.Z)(function () {
-    var cache = {};
-    return function (name) {
-      return cache[name];
-    };
-  });
-});
-var defaultStylisPlugins = [emotion_cache_esm_prefixer];
-
-var createCache = function createCache(options) {
-  var key = options.key;
-
-  if (false) {}
-
-  if (isBrowser && key === 'css') {
-    var ssrStyles = document.querySelectorAll("style[data-emotion]:not([data-s])"); // get SSRed styles out of the way of React's hydration
-    // document.head is a safe place to move them to(though note document.head is not necessarily the last place they will be)
-    // note this very very intentionally targets all style elements regardless of the key to ensure
-    // that creating a cache works inside of render of a React component
-
-    Array.prototype.forEach.call(ssrStyles, function (node) {
-      // we want to only move elements which have a space in the data-emotion attribute value
-      // because that indicates that it is an Emotion 11 server-side rendered style elements
-      // while we will already ignore Emotion 11 client-side inserted styles because of the :not([data-s]) part in the selector
-      // Emotion 10 client-side inserted styles did not have data-s (but importantly did not have a space in their data-emotion attributes)
-      // so checking for the space ensures that loading Emotion 11 after Emotion 10 has inserted some styles
-      // will not result in the Emotion 10 styles being destroyed
-      var dataEmotionAttribute = node.getAttribute('data-emotion');
-
-      if (dataEmotionAttribute.indexOf(' ') === -1) {
-        return;
-      }
-      document.head.appendChild(node);
-      node.setAttribute('data-s', '');
-    });
-  }
-
-  var stylisPlugins = options.stylisPlugins || defaultStylisPlugins;
-
-  if (false) {}
-
-  var inserted = {};
-  var container;
-  var nodesToHydrate = [];
-
-  if (isBrowser) {
-    container = options.container || document.head;
-    Array.prototype.forEach.call( // this means we will ignore elements which don't have a space in them which
-    // means that the style elements we're looking at are only Emotion 11 server-rendered style elements
-    document.querySelectorAll("style[data-emotion^=\"" + key + " \"]"), function (node) {
-      var attrib = node.getAttribute("data-emotion").split(' '); // $FlowFixMe
-
-      for (var i = 1; i < attrib.length; i++) {
-        inserted[attrib[i]] = true;
-      }
-
-      nodesToHydrate.push(node);
-    });
-  }
-
-  var _insert;
-
-  var omnipresentPlugins = [compat, removeLabel];
-
-  if (false) {}
-
-  if (isBrowser) {
-    var currentSheet;
-    var finalizingPlugins = [Serializer/* stringify */.P,  false ? 0 : rulesheet(function (rule) {
-      currentSheet.insert(rule);
-    })];
-    var serializer = middleware(omnipresentPlugins.concat(stylisPlugins, finalizingPlugins));
-
-    var stylis = function stylis(styles) {
-      return (0,Serializer/* serialize */.q)((0,Parser/* compile */.MY)(styles), serializer);
-    };
-
-    _insert = function insert(selector, serialized, sheet, shouldCache) {
-      currentSheet = sheet;
-
-      if (false) {}
-
-      stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles);
-
-      if (shouldCache) {
-        cache.inserted[serialized.name] = true;
-      }
-    };
-  } else {
-    var _finalizingPlugins = [Serializer/* stringify */.P];
-
-    var _serializer = middleware(omnipresentPlugins.concat(stylisPlugins, _finalizingPlugins));
-
-    var _stylis = function _stylis(styles) {
-      return (0,Serializer/* serialize */.q)((0,Parser/* compile */.MY)(styles), _serializer);
-    }; // $FlowFixMe
-
-
-    var serverStylisCache = getServerStylisCache(stylisPlugins)(key);
-
-    var getRules = function getRules(selector, serialized) {
-      var name = serialized.name;
-
-      if (serverStylisCache[name] === undefined) {
-        serverStylisCache[name] = _stylis(selector ? selector + "{" + serialized.styles + "}" : serialized.styles);
-      }
-
-      return serverStylisCache[name];
-    };
-
-    _insert = function _insert(selector, serialized, sheet, shouldCache) {
-      var name = serialized.name;
-      var rules = getRules(selector, serialized);
-
-      if (cache.compat === undefined) {
-        // in regular mode, we don't set the styles on the inserted cache
-        // since we don't need to and that would be wasting memory
-        // we return them so that they are rendered in a style tag
-        if (shouldCache) {
-          cache.inserted[name] = true;
-        }
-
-        if ( // using === development instead of !== production
-        // because if people do ssr in tests, the source maps showing up would be annoying
-        false) {}
-
-        return rules;
-      } else {
-        // in compat mode, we put the styles on the inserted cache so
-        // that emotion-server can pull out the styles
-        // except when we don't want to cache it which was in Global but now
-        // is nowhere but we don't want to do a major right now
-        // and just in case we're going to leave the case here
-        // it's also not affecting client side bundle size
-        // so it's really not a big deal
-        if (shouldCache) {
-          cache.inserted[name] = rules;
-        } else {
-          return rules;
-        }
-      }
-    };
-  }
-
-  var cache = {
-    key: key,
-    sheet: new StyleSheet({
-      key: key,
-      container: container,
-      nonce: options.nonce,
-      speedy: options.speedy,
-      prepend: options.prepend,
-      insertionPoint: options.insertionPoint
-    }),
-    nonce: options.nonce,
-    inserted: inserted,
-    registered: {},
-    insert: _insert
-  };
-  cache.sheet.hydrate(nodesToHydrate);
-  return cache;
-};
-
-
-
-
-/***/ }),
-
-/***/ 45042:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (/* binding */ memoize)
-/* harmony export */ });
-function memoize(fn) {
-  var cache = Object.create(null);
-  return function (arg) {
-    if (cache[arg] === undefined) cache[arg] = fn(arg);
-    return cache[arg];
-  };
-}
-
-
-
-
-/***/ }),
-
-/***/ 87878:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "C": () => (/* binding */ CacheProvider),
-  "E": () => (/* binding */ Emotion$1),
-  "T": () => (/* binding */ ThemeContext),
-  "_": () => (/* binding */ __unsafe_useEmotionCache),
-  "a": () => (/* binding */ ThemeProvider),
-  "b": () => (/* binding */ withTheme),
-  "c": () => (/* binding */ createEmotionProps),
-  "h": () => (/* binding */ emotion_element_6bdfffb2_esm_hasOwnProperty),
-  "i": () => (/* binding */ isBrowser),
-  "u": () => (/* binding */ useTheme),
-  "w": () => (/* binding */ withEmotionCache)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@emotion/cache/dist/emotion-cache.esm.js + 2 modules
-var emotion_cache_esm = __webpack_require__(43569);
-;// CONCATENATED MODULE: ./node_modules/@emotion/react/node_modules/@babel/runtime/helpers/esm/extends.js
-function _extends() {
-  _extends = Object.assign ? Object.assign.bind() : function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-    return target;
-  };
-  return _extends.apply(this, arguments);
-}
-// EXTERNAL MODULE: ./node_modules/@emotion/weak-memoize/dist/emotion-weak-memoize.esm.js
-var emotion_weak_memoize_esm = __webpack_require__(81034);
-// EXTERNAL MODULE: ./node_modules/hoist-non-react-statics/dist/hoist-non-react-statics.cjs.js
-var hoist_non_react_statics_cjs = __webpack_require__(8679);
-var hoist_non_react_statics_cjs_default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics_cjs);
-;// CONCATENATED MODULE: ./node_modules/@emotion/react/_isolated-hnrs/dist/emotion-react-_isolated-hnrs.esm.js
-
-
-// this file isolates this package that is not tree-shakeable
-// and if this module doesn't actually contain any logic of its own
-// then Rollup just use 'hoist-non-react-statics' directly in other chunks
-
-var hoistNonReactStatics = (function (targetComponent, sourceComponent) {
-  return hoist_non_react_statics_cjs_default()(targetComponent, sourceComponent);
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/@emotion/utils/dist/emotion-utils.esm.js
-var emotion_utils_esm = __webpack_require__(74577);
-// EXTERNAL MODULE: ./node_modules/@emotion/serialize/dist/emotion-serialize.esm.js + 2 modules
-var emotion_serialize_esm = __webpack_require__(85662);
-// EXTERNAL MODULE: ./node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.esm.js
-var emotion_use_insertion_effect_with_fallbacks_esm = __webpack_require__(68164);
-;// CONCATENATED MODULE: ./node_modules/@emotion/react/dist/emotion-element-6bdfffb2.esm.js
-
-
-
-
-
-
-
-
-
-
-var isBrowser = typeof document !== 'undefined';
-var emotion_element_6bdfffb2_esm_hasOwnProperty = {}.hasOwnProperty;
-
-var EmotionCacheContext = /* #__PURE__ */react.createContext( // we're doing this to avoid preconstruct's dead code elimination in this one case
-// because this module is primarily intended for the browser and node
-// but it's also required in react native and similar environments sometimes
-// and we could have a special build just for that
-// but this is much easier and the native packages
-// might use a different theme context in the future anyway
-typeof HTMLElement !== 'undefined' ? /* #__PURE__ */(0,emotion_cache_esm/* default */.Z)({
-  key: 'css'
-}) : null);
-
-if (false) {}
-
-var CacheProvider = EmotionCacheContext.Provider;
-var __unsafe_useEmotionCache = function useEmotionCache() {
-  return (0,react.useContext)(EmotionCacheContext);
-};
-
-var withEmotionCache = function withEmotionCache(func) {
-  // $FlowFixMe
-  return /*#__PURE__*/(0,react.forwardRef)(function (props, ref) {
-    // the cache will never be null in the browser
-    var cache = (0,react.useContext)(EmotionCacheContext);
-    return func(props, cache, ref);
-  });
-};
-
-if (!isBrowser) {
-  withEmotionCache = function withEmotionCache(func) {
-    return function (props) {
-      var cache = (0,react.useContext)(EmotionCacheContext);
-
-      if (cache === null) {
-        // yes, we're potentially creating this on every render
-        // it doesn't actually matter though since it's only on the server
-        // so there will only every be a single render
-        // that could change in the future because of suspense and etc. but for now,
-        // this works and i don't want to optimise for a future thing that we aren't sure about
-        cache = (0,emotion_cache_esm/* default */.Z)({
-          key: 'css'
-        });
-        return /*#__PURE__*/react.createElement(EmotionCacheContext.Provider, {
-          value: cache
-        }, func(props, cache));
-      } else {
-        return func(props, cache);
-      }
-    };
-  };
-}
-
-var ThemeContext = /* #__PURE__ */react.createContext({});
-
-if (false) {}
-
-var useTheme = function useTheme() {
-  return react.useContext(ThemeContext);
-};
-
-var getTheme = function getTheme(outerTheme, theme) {
-  if (typeof theme === 'function') {
-    var mergedTheme = theme(outerTheme);
-
-    if (false) {}
-
-    return mergedTheme;
-  }
-
-  if (false) {}
-
-  return _extends({}, outerTheme, theme);
-};
-
-var createCacheWithTheme = /* #__PURE__ */(0,emotion_weak_memoize_esm/* default */.Z)(function (outerTheme) {
-  return (0,emotion_weak_memoize_esm/* default */.Z)(function (theme) {
-    return getTheme(outerTheme, theme);
-  });
-});
-var ThemeProvider = function ThemeProvider(props) {
-  var theme = react.useContext(ThemeContext);
-
-  if (props.theme !== theme) {
-    theme = createCacheWithTheme(theme)(props.theme);
-  }
-
-  return /*#__PURE__*/react.createElement(ThemeContext.Provider, {
-    value: theme
-  }, props.children);
-};
-function withTheme(Component) {
-  var componentName = Component.displayName || Component.name || 'Component';
-
-  var render = function render(props, ref) {
-    var theme = react.useContext(ThemeContext);
-    return /*#__PURE__*/react.createElement(Component, _extends({
-      theme: theme,
-      ref: ref
-    }, props));
-  }; // $FlowFixMe
-
-
-  var WithTheme = /*#__PURE__*/react.forwardRef(render);
-  WithTheme.displayName = "WithTheme(" + componentName + ")";
-  return hoistNonReactStatics(WithTheme, Component);
-}
-
-var getLastPart = function getLastPart(functionName) {
-  // The match may be something like 'Object.createEmotionProps' or
-  // 'Loader.prototype.render'
-  var parts = functionName.split('.');
-  return parts[parts.length - 1];
-};
-
-var getFunctionNameFromStackTraceLine = function getFunctionNameFromStackTraceLine(line) {
-  // V8
-  var match = /^\s+at\s+([A-Za-z0-9$.]+)\s/.exec(line);
-  if (match) return getLastPart(match[1]); // Safari / Firefox
-
-  match = /^([A-Za-z0-9$.]+)@/.exec(line);
-  if (match) return getLastPart(match[1]);
-  return undefined;
-};
-
-var internalReactFunctionNames = /* #__PURE__ */new Set(['renderWithHooks', 'processChild', 'finishClassComponent', 'renderToString']); // These identifiers come from error stacks, so they have to be valid JS
-// identifiers, thus we only need to replace what is a valid character for JS,
-// but not for CSS.
-
-var sanitizeIdentifier = function sanitizeIdentifier(identifier) {
-  return identifier.replace(/\$/g, '-');
-};
-
-var getLabelFromStackTrace = function getLabelFromStackTrace(stackTrace) {
-  if (!stackTrace) return undefined;
-  var lines = stackTrace.split('\n');
-
-  for (var i = 0; i < lines.length; i++) {
-    var functionName = getFunctionNameFromStackTraceLine(lines[i]); // The first line of V8 stack traces is just "Error"
-
-    if (!functionName) continue; // If we reach one of these, we have gone too far and should quit
-
-    if (internalReactFunctionNames.has(functionName)) break; // The component name is the first function in the stack that starts with an
-    // uppercase letter
-
-    if (/^[A-Z]/.test(functionName)) return sanitizeIdentifier(functionName);
-  }
-
-  return undefined;
-};
-
-var typePropName = '__EMOTION_TYPE_PLEASE_DO_NOT_USE__';
-var labelPropName = '__EMOTION_LABEL_PLEASE_DO_NOT_USE__';
-var createEmotionProps = function createEmotionProps(type, props) {
-  if (false) {}
-
-  var newProps = {};
-
-  for (var key in props) {
-    if (emotion_element_6bdfffb2_esm_hasOwnProperty.call(props, key)) {
-      newProps[key] = props[key];
-    }
-  }
-
-  newProps[typePropName] = type; // For performance, only call getLabelFromStackTrace in development and when
-  // the label hasn't already been computed
-
-  if (false) { var label; }
-
-  return newProps;
-};
-
-var Insertion = function Insertion(_ref) {
-  var cache = _ref.cache,
-      serialized = _ref.serialized,
-      isStringTag = _ref.isStringTag;
-  (0,emotion_utils_esm/* registerStyles */.hC)(cache, serialized, isStringTag);
-  var rules = (0,emotion_use_insertion_effect_with_fallbacks_esm/* useInsertionEffectAlwaysWithSyncFallback */.L)(function () {
-    return (0,emotion_utils_esm/* insertStyles */.My)(cache, serialized, isStringTag);
-  });
-
-  if (!isBrowser && rules !== undefined) {
-    var _ref2;
-
-    var serializedNames = serialized.name;
-    var next = serialized.next;
-
-    while (next !== undefined) {
-      serializedNames += ' ' + next.name;
-      next = next.next;
-    }
-
-    return /*#__PURE__*/react.createElement("style", (_ref2 = {}, _ref2["data-emotion"] = cache.key + " " + serializedNames, _ref2.dangerouslySetInnerHTML = {
-      __html: rules
-    }, _ref2.nonce = cache.sheet.nonce, _ref2));
-  }
-
-  return null;
-};
-
-var Emotion = /* #__PURE__ */withEmotionCache(function (props, cache, ref) {
-  var cssProp = props.css; // so that using `css` from `emotion` and passing the result to the css prop works
-  // not passing the registered cache to serializeStyles because it would
-  // make certain babel optimisations not possible
-
-  if (typeof cssProp === 'string' && cache.registered[cssProp] !== undefined) {
-    cssProp = cache.registered[cssProp];
-  }
-
-  var WrappedComponent = props[typePropName];
-  var registeredStyles = [cssProp];
-  var className = '';
-
-  if (typeof props.className === 'string') {
-    className = (0,emotion_utils_esm/* getRegisteredStyles */.fp)(cache.registered, registeredStyles, props.className);
-  } else if (props.className != null) {
-    className = props.className + " ";
-  }
-
-  var serialized = (0,emotion_serialize_esm/* serializeStyles */.O)(registeredStyles, undefined, react.useContext(ThemeContext));
-
-  if (false) { var labelFromStack; }
-
-  className += cache.key + "-" + serialized.name;
-  var newProps = {};
-
-  for (var key in props) {
-    if (emotion_element_6bdfffb2_esm_hasOwnProperty.call(props, key) && key !== 'css' && key !== typePropName && ( true || 0)) {
-      newProps[key] = props[key];
-    }
-  }
-
-  newProps.ref = ref;
-  newProps.className = className;
-  return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(Insertion, {
-    cache: cache,
-    serialized: serialized,
-    isStringTag: typeof WrappedComponent === 'string'
-  }), /*#__PURE__*/react.createElement(WrappedComponent, newProps));
-});
-
-if (false) {}
-
-var Emotion$1 = Emotion;
-
-
-
-
-/***/ }),
-
-/***/ 16657:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "CacheProvider": () => (/* reexport safe */ _emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.C),
-/* harmony export */   "ClassNames": () => (/* binding */ ClassNames),
-/* harmony export */   "Global": () => (/* binding */ Global),
-/* harmony export */   "ThemeContext": () => (/* reexport safe */ _emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.T),
-/* harmony export */   "ThemeProvider": () => (/* reexport safe */ _emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.a),
-/* harmony export */   "__unsafe_useEmotionCache": () => (/* reexport safe */ _emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__._),
-/* harmony export */   "createElement": () => (/* binding */ jsx),
-/* harmony export */   "css": () => (/* binding */ css),
-/* harmony export */   "jsx": () => (/* binding */ jsx),
-/* harmony export */   "keyframes": () => (/* binding */ keyframes),
-/* harmony export */   "useTheme": () => (/* reexport safe */ _emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.u),
-/* harmony export */   "withEmotionCache": () => (/* reexport safe */ _emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.w),
-/* harmony export */   "withTheme": () => (/* reexport safe */ _emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.b)
-/* harmony export */ });
-/* harmony import */ var _emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(87878);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(67294);
-/* harmony import */ var _emotion_utils__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(74577);
-/* harmony import */ var _emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68164);
-/* harmony import */ var _emotion_serialize__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(85662);
-/* harmony import */ var _emotion_cache__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(43569);
-/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(61303);
-/* harmony import */ var _babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_babel_runtime_helpers_extends__WEBPACK_IMPORTED_MODULE_6__);
-/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(8679);
-/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_7___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_7__);
-
-
-
-
-
-
-
-
-
-
-
-
-var pkg = {
-	name: "@emotion/react",
-	version: "11.11.0",
-	main: "dist/emotion-react.cjs.js",
-	module: "dist/emotion-react.esm.js",
-	browser: {
-		"./dist/emotion-react.esm.js": "./dist/emotion-react.browser.esm.js"
-	},
-	exports: {
-		".": {
-			module: {
-				worker: "./dist/emotion-react.worker.esm.js",
-				browser: "./dist/emotion-react.browser.esm.js",
-				"default": "./dist/emotion-react.esm.js"
-			},
-			"import": "./dist/emotion-react.cjs.mjs",
-			"default": "./dist/emotion-react.cjs.js"
-		},
-		"./jsx-runtime": {
-			module: {
-				worker: "./jsx-runtime/dist/emotion-react-jsx-runtime.worker.esm.js",
-				browser: "./jsx-runtime/dist/emotion-react-jsx-runtime.browser.esm.js",
-				"default": "./jsx-runtime/dist/emotion-react-jsx-runtime.esm.js"
-			},
-			"import": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.mjs",
-			"default": "./jsx-runtime/dist/emotion-react-jsx-runtime.cjs.js"
-		},
-		"./_isolated-hnrs": {
-			module: {
-				worker: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.worker.esm.js",
-				browser: "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.browser.esm.js",
-				"default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.esm.js"
-			},
-			"import": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.mjs",
-			"default": "./_isolated-hnrs/dist/emotion-react-_isolated-hnrs.cjs.js"
-		},
-		"./jsx-dev-runtime": {
-			module: {
-				worker: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.worker.esm.js",
-				browser: "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.browser.esm.js",
-				"default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.esm.js"
-			},
-			"import": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.mjs",
-			"default": "./jsx-dev-runtime/dist/emotion-react-jsx-dev-runtime.cjs.js"
-		},
-		"./package.json": "./package.json",
-		"./types/css-prop": "./types/css-prop.d.ts",
-		"./macro": {
-			types: {
-				"import": "./macro.d.mts",
-				"default": "./macro.d.ts"
-			},
-			"default": "./macro.js"
-		}
-	},
-	types: "types/index.d.ts",
-	files: [
-		"src",
-		"dist",
-		"jsx-runtime",
-		"jsx-dev-runtime",
-		"_isolated-hnrs",
-		"types/*.d.ts",
-		"macro.*"
-	],
-	sideEffects: false,
-	author: "Emotion Contributors",
-	license: "MIT",
-	scripts: {
-		"test:typescript": "dtslint types"
-	},
-	dependencies: {
-		"@babel/runtime": "^7.18.3",
-		"@emotion/babel-plugin": "^11.11.0",
-		"@emotion/cache": "^11.11.0",
-		"@emotion/serialize": "^1.1.2",
-		"@emotion/use-insertion-effect-with-fallbacks": "^1.0.1",
-		"@emotion/utils": "^1.2.1",
-		"@emotion/weak-memoize": "^0.3.1",
-		"hoist-non-react-statics": "^3.3.1"
-	},
-	peerDependencies: {
-		react: ">=16.8.0"
-	},
-	peerDependenciesMeta: {
-		"@types/react": {
-			optional: true
-		}
-	},
-	devDependencies: {
-		"@definitelytyped/dtslint": "0.0.112",
-		"@emotion/css": "11.11.0",
-		"@emotion/css-prettifier": "1.1.3",
-		"@emotion/server": "11.11.0",
-		"@emotion/styled": "11.11.0",
-		"html-tag-names": "^1.1.2",
-		react: "16.14.0",
-		"svg-tag-names": "^1.1.1",
-		typescript: "^4.5.5"
-	},
-	repository: "https://github.com/emotion-js/emotion/tree/main/packages/react",
-	publishConfig: {
-		access: "public"
-	},
-	"umd:main": "dist/emotion-react.umd.min.js",
-	preconstruct: {
-		entrypoints: [
-			"./index.js",
-			"./jsx-runtime.js",
-			"./jsx-dev-runtime.js",
-			"./_isolated-hnrs.js"
-		],
-		umdName: "emotionReact",
-		exports: {
-			envConditions: [
-				"browser",
-				"worker"
-			],
-			extra: {
-				"./types/css-prop": "./types/css-prop.d.ts",
-				"./macro": {
-					types: {
-						"import": "./macro.d.mts",
-						"default": "./macro.d.ts"
-					},
-					"default": "./macro.js"
-				}
-			}
-		}
-	}
-};
-
-var jsx = function jsx(type, props) {
-  var args = arguments;
-
-  if (props == null || !_emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.h.call(props, 'css')) {
-    // $FlowFixMe
-    return react__WEBPACK_IMPORTED_MODULE_1__.createElement.apply(undefined, args);
-  }
-
-  var argsLength = args.length;
-  var createElementArgArray = new Array(argsLength);
-  createElementArgArray[0] = _emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.E;
-  createElementArgArray[1] = (0,_emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.c)(type, props);
-
-  for (var i = 2; i < argsLength; i++) {
-    createElementArgArray[i] = args[i];
-  } // $FlowFixMe
-
-
-  return react__WEBPACK_IMPORTED_MODULE_1__.createElement.apply(null, createElementArgArray);
-};
-
-var warnedAboutCssPropForGlobal = false; // maintain place over rerenders.
-// initial render from browser, insertBefore context.sheet.tags[0] or if a style hasn't been inserted there yet, appendChild
-// initial client-side render from SSR, use place of hydrating tag
-
-var Global = /* #__PURE__ */(0,_emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.w)(function (props, cache) {
-  if (false) {}
-
-  var styles = props.styles;
-  var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_4__/* .serializeStyles */ .O)([styles], undefined, react__WEBPACK_IMPORTED_MODULE_1__.useContext(_emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.T));
-
-  if (!_emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.i) {
-    var _ref;
-
-    var serializedNames = serialized.name;
-    var serializedStyles = serialized.styles;
-    var next = serialized.next;
-
-    while (next !== undefined) {
-      serializedNames += ' ' + next.name;
-      serializedStyles += next.styles;
-      next = next.next;
-    }
-
-    var shouldCache = cache.compat === true;
-    var rules = cache.insert("", {
-      name: serializedNames,
-      styles: serializedStyles
-    }, cache.sheet, shouldCache);
-
-    if (shouldCache) {
-      return null;
-    }
-
-    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("style", (_ref = {}, _ref["data-emotion"] = cache.key + "-global " + serializedNames, _ref.dangerouslySetInnerHTML = {
-      __html: rules
-    }, _ref.nonce = cache.sheet.nonce, _ref));
-  } // yes, i know these hooks are used conditionally
-  // but it is based on a constant that will never change at runtime
-  // it's effectively like having two implementations and switching them out
-  // so it's not actually breaking anything
-
-
-  var sheetRef = react__WEBPACK_IMPORTED_MODULE_1__.useRef();
-  (0,_emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_3__/* .useInsertionEffectWithLayoutFallback */ .j)(function () {
-    var key = cache.key + "-global"; // use case of https://github.com/emotion-js/emotion/issues/2675
-
-    var sheet = new cache.sheet.constructor({
-      key: key,
-      nonce: cache.sheet.nonce,
-      container: cache.sheet.container,
-      speedy: cache.sheet.isSpeedy
-    });
-    var rehydrating = false; // $FlowFixMe
-
-    var node = document.querySelector("style[data-emotion=\"" + key + " " + serialized.name + "\"]");
-
-    if (cache.sheet.tags.length) {
-      sheet.before = cache.sheet.tags[0];
-    }
-
-    if (node !== null) {
-      rehydrating = true; // clear the hash so this node won't be recognizable as rehydratable by other <Global/>s
-
-      node.setAttribute('data-emotion', key);
-      sheet.hydrate([node]);
-    }
-
-    sheetRef.current = [sheet, rehydrating];
-    return function () {
-      sheet.flush();
-    };
-  }, [cache]);
-  (0,_emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_3__/* .useInsertionEffectWithLayoutFallback */ .j)(function () {
-    var sheetRefCurrent = sheetRef.current;
-    var sheet = sheetRefCurrent[0],
-        rehydrating = sheetRefCurrent[1];
-
-    if (rehydrating) {
-      sheetRefCurrent[1] = false;
-      return;
-    }
-
-    if (serialized.next !== undefined) {
-      // insert keyframes
-      (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_2__/* .insertStyles */ .My)(cache, serialized.next, true);
-    }
-
-    if (sheet.tags.length) {
-      // if this doesn't exist then it will be null so the style element will be appended
-      var element = sheet.tags[sheet.tags.length - 1].nextElementSibling;
-      sheet.before = element;
-      sheet.flush();
-    }
-
-    cache.insert("", serialized, sheet, false);
-  }, [cache, serialized.name]);
-  return null;
-});
-
-if (false) {}
-
-function css() {
-  for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
-    args[_key] = arguments[_key];
-  }
-
-  return (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_4__/* .serializeStyles */ .O)(args);
-}
-
-var keyframes = function keyframes() {
-  var insertable = css.apply(void 0, arguments);
-  var name = "animation-" + insertable.name; // $FlowFixMe
-
-  return {
-    name: name,
-    styles: "@keyframes " + name + "{" + insertable.styles + "}",
-    anim: 1,
-    toString: function toString() {
-      return "_EMO_" + this.name + "_" + this.styles + "_EMO_";
-    }
-  };
-};
-
-var classnames = function classnames(args) {
-  var len = args.length;
-  var i = 0;
-  var cls = '';
-
-  for (; i < len; i++) {
-    var arg = args[i];
-    if (arg == null) continue;
-    var toAdd = void 0;
-
-    switch (typeof arg) {
-      case 'boolean':
-        break;
-
-      case 'object':
-        {
-          if (Array.isArray(arg)) {
-            toAdd = classnames(arg);
-          } else {
-            if (false) {}
-
-            toAdd = '';
-
-            for (var k in arg) {
-              if (arg[k] && k) {
-                toAdd && (toAdd += ' ');
-                toAdd += k;
-              }
-            }
-          }
-
-          break;
-        }
-
-      default:
-        {
-          toAdd = arg;
-        }
-    }
-
-    if (toAdd) {
-      cls && (cls += ' ');
-      cls += toAdd;
-    }
-  }
-
-  return cls;
-};
-
-function merge(registered, css, className) {
-  var registeredStyles = [];
-  var rawClassName = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_2__/* .getRegisteredStyles */ .fp)(registered, registeredStyles, className);
-
-  if (registeredStyles.length < 2) {
-    return className;
-  }
-
-  return rawClassName + css(registeredStyles);
-}
-
-var Insertion = function Insertion(_ref) {
-  var cache = _ref.cache,
-      serializedArr = _ref.serializedArr;
-  var rules = (0,_emotion_use_insertion_effect_with_fallbacks__WEBPACK_IMPORTED_MODULE_3__/* .useInsertionEffectAlwaysWithSyncFallback */ .L)(function () {
-    var rules = '';
-
-    for (var i = 0; i < serializedArr.length; i++) {
-      var res = (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_2__/* .insertStyles */ .My)(cache, serializedArr[i], false);
-
-      if (!_emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.i && res !== undefined) {
-        rules += res;
-      }
-    }
-
-    if (!_emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.i) {
-      return rules;
-    }
-  });
-
-  if (!_emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.i && rules.length !== 0) {
-    var _ref2;
-
-    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement("style", (_ref2 = {}, _ref2["data-emotion"] = cache.key + " " + serializedArr.map(function (serialized) {
-      return serialized.name;
-    }).join(' '), _ref2.dangerouslySetInnerHTML = {
-      __html: rules
-    }, _ref2.nonce = cache.sheet.nonce, _ref2));
-  }
-
-  return null;
-};
-
-var ClassNames = /* #__PURE__ */(0,_emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.w)(function (props, cache) {
-  var hasRendered = false;
-  var serializedArr = [];
-
-  var css = function css() {
-    if (hasRendered && "production" !== 'production') {}
-
-    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-
-    var serialized = (0,_emotion_serialize__WEBPACK_IMPORTED_MODULE_4__/* .serializeStyles */ .O)(args, cache.registered);
-    serializedArr.push(serialized); // registration has to happen here as the result of this might get consumed by `cx`
-
-    (0,_emotion_utils__WEBPACK_IMPORTED_MODULE_2__/* .registerStyles */ .hC)(cache, serialized, false);
-    return cache.key + "-" + serialized.name;
-  };
-
-  var cx = function cx() {
-    if (hasRendered && "production" !== 'production') {}
-
-    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
-      args[_key2] = arguments[_key2];
-    }
-
-    return merge(cache.registered, css, classnames(args));
-  };
-
-  var content = {
-    css: css,
-    cx: cx,
-    theme: react__WEBPACK_IMPORTED_MODULE_1__.useContext(_emotion_element_6bdfffb2_esm_js__WEBPACK_IMPORTED_MODULE_0__.T)
-  };
-  var ele = props.children(content);
-  hasRendered = true;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(react__WEBPACK_IMPORTED_MODULE_1__.Fragment, null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_1__.createElement(Insertion, {
-    cache: cache,
-    serializedArr: serializedArr
-  }), ele);
-});
-
-if (false) {}
-
-if (false) { var globalKey, globalContext, isTestEnv, isBrowser; }
-
-
-
-
-/***/ }),
-
-/***/ 85662:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "O": () => (/* binding */ serializeStyles)
-});
-
-;// CONCATENATED MODULE: ./node_modules/@emotion/hash/dist/emotion-hash.esm.js
-/* eslint-disable */
-// Inspired by https://github.com/garycourt/murmurhash-js
-// Ported from https://github.com/aappleby/smhasher/blob/61a0530f28277f2e850bfc39600ce61d02b518de/src/MurmurHash2.cpp#L37-L86
-function murmur2(str) {
-  // 'm' and 'r' are mixing constants generated offline.
-  // They're not really 'magic', they just happen to work well.
-  // const m = 0x5bd1e995;
-  // const r = 24;
-  // Initialize the hash
-  var h = 0; // Mix 4 bytes at a time into the hash
-
-  var k,
-      i = 0,
-      len = str.length;
-
-  for (; len >= 4; ++i, len -= 4) {
-    k = str.charCodeAt(i) & 0xff | (str.charCodeAt(++i) & 0xff) << 8 | (str.charCodeAt(++i) & 0xff) << 16 | (str.charCodeAt(++i) & 0xff) << 24;
-    k =
-    /* Math.imul(k, m): */
-    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16);
-    k ^=
-    /* k >>> r: */
-    k >>> 24;
-    h =
-    /* Math.imul(k, m): */
-    (k & 0xffff) * 0x5bd1e995 + ((k >>> 16) * 0xe995 << 16) ^
-    /* Math.imul(h, m): */
-    (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);
-  } // Handle the last few bytes of the input array
-
-
-  switch (len) {
-    case 3:
-      h ^= (str.charCodeAt(i + 2) & 0xff) << 16;
-
-    case 2:
-      h ^= (str.charCodeAt(i + 1) & 0xff) << 8;
-
-    case 1:
-      h ^= str.charCodeAt(i) & 0xff;
-      h =
-      /* Math.imul(h, m): */
-      (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);
-  } // Do a few final mixes of the hash to ensure the last few
-  // bytes are well-incorporated.
-
-
-  h ^= h >>> 13;
-  h =
-  /* Math.imul(h, m): */
-  (h & 0xffff) * 0x5bd1e995 + ((h >>> 16) * 0xe995 << 16);
-  return ((h ^ h >>> 15) >>> 0).toString(36);
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@emotion/unitless/dist/emotion-unitless.esm.js
-var unitlessKeys = {
-  animationIterationCount: 1,
-  aspectRatio: 1,
-  borderImageOutset: 1,
-  borderImageSlice: 1,
-  borderImageWidth: 1,
-  boxFlex: 1,
-  boxFlexGroup: 1,
-  boxOrdinalGroup: 1,
-  columnCount: 1,
-  columns: 1,
-  flex: 1,
-  flexGrow: 1,
-  flexPositive: 1,
-  flexShrink: 1,
-  flexNegative: 1,
-  flexOrder: 1,
-  gridRow: 1,
-  gridRowEnd: 1,
-  gridRowSpan: 1,
-  gridRowStart: 1,
-  gridColumn: 1,
-  gridColumnEnd: 1,
-  gridColumnSpan: 1,
-  gridColumnStart: 1,
-  msGridRow: 1,
-  msGridRowSpan: 1,
-  msGridColumn: 1,
-  msGridColumnSpan: 1,
-  fontWeight: 1,
-  lineHeight: 1,
-  opacity: 1,
-  order: 1,
-  orphans: 1,
-  tabSize: 1,
-  widows: 1,
-  zIndex: 1,
-  zoom: 1,
-  WebkitLineClamp: 1,
-  // SVG-related properties
-  fillOpacity: 1,
-  floodOpacity: 1,
-  stopOpacity: 1,
-  strokeDasharray: 1,
-  strokeDashoffset: 1,
-  strokeMiterlimit: 1,
-  strokeOpacity: 1,
-  strokeWidth: 1
-};
-
-
-
-// EXTERNAL MODULE: ./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js
-var emotion_memoize_esm = __webpack_require__(45042);
-;// CONCATENATED MODULE: ./node_modules/@emotion/serialize/dist/emotion-serialize.esm.js
-
-
-
-
-var ILLEGAL_ESCAPE_SEQUENCE_ERROR = "You have illegal escape sequence in your template literal, most likely inside content's property value.\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \"content: '\\00d7';\" should become \"content: '\\\\00d7';\".\nYou can read more about this here:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences";
-var UNDEFINED_AS_OBJECT_KEY_ERROR = "You have passed in falsy value as style object's key (can happen when in example you pass unexported component as computed key).";
-var hyphenateRegex = /[A-Z]|^ms/g;
-var animationRegex = /_EMO_([^_]+?)_([^]*?)_EMO_/g;
-
-var isCustomProperty = function isCustomProperty(property) {
-  return property.charCodeAt(1) === 45;
-};
-
-var isProcessableValue = function isProcessableValue(value) {
-  return value != null && typeof value !== 'boolean';
-};
-
-var processStyleName = /* #__PURE__ */(0,emotion_memoize_esm/* default */.Z)(function (styleName) {
-  return isCustomProperty(styleName) ? styleName : styleName.replace(hyphenateRegex, '-$&').toLowerCase();
-});
-
-var processStyleValue = function processStyleValue(key, value) {
-  switch (key) {
-    case 'animation':
-    case 'animationName':
-      {
-        if (typeof value === 'string') {
-          return value.replace(animationRegex, function (match, p1, p2) {
-            cursor = {
-              name: p1,
-              styles: p2,
-              next: cursor
-            };
-            return p1;
-          });
-        }
-      }
-  }
-
-  if (unitlessKeys[key] !== 1 && !isCustomProperty(key) && typeof value === 'number' && value !== 0) {
-    return value + 'px';
-  }
-
-  return value;
-};
-
-if (false) { var hyphenatedCache, hyphenPattern, msPattern, oldProcessStyleValue, contentValues, contentValuePattern; }
-
-var noComponentSelectorMessage = (/* unused pure expression or super */ null && ('Component selectors can only be used in conjunction with ' + '@emotion/babel-plugin, the swc Emotion plugin, or another Emotion-aware ' + 'compiler transform.'));
-
-function handleInterpolation(mergedProps, registered, interpolation) {
-  if (interpolation == null) {
-    return '';
-  }
-
-  if (interpolation.__emotion_styles !== undefined) {
-    if (false) {}
-
-    return interpolation;
-  }
-
-  switch (typeof interpolation) {
-    case 'boolean':
-      {
-        return '';
-      }
-
-    case 'object':
-      {
-        if (interpolation.anim === 1) {
-          cursor = {
-            name: interpolation.name,
-            styles: interpolation.styles,
-            next: cursor
-          };
-          return interpolation.name;
-        }
-
-        if (interpolation.styles !== undefined) {
-          var next = interpolation.next;
-
-          if (next !== undefined) {
-            // not the most efficient thing ever but this is a pretty rare case
-            // and there will be very few iterations of this generally
-            while (next !== undefined) {
-              cursor = {
-                name: next.name,
-                styles: next.styles,
-                next: cursor
-              };
-              next = next.next;
-            }
-          }
-
-          var styles = interpolation.styles + ";";
-
-          if (false) {}
-
-          return styles;
-        }
-
-        return createStringFromObject(mergedProps, registered, interpolation);
-      }
-
-    case 'function':
-      {
-        if (mergedProps !== undefined) {
-          var previousCursor = cursor;
-          var result = interpolation(mergedProps);
-          cursor = previousCursor;
-          return handleInterpolation(mergedProps, registered, result);
-        } else if (false) {}
-
-        break;
-      }
-
-    case 'string':
-      if (false) { var replaced, matched; }
-
-      break;
-  } // finalize string values (regular strings and functions interpolated into css calls)
-
-
-  if (registered == null) {
-    return interpolation;
-  }
-
-  var cached = registered[interpolation];
-  return cached !== undefined ? cached : interpolation;
-}
-
-function createStringFromObject(mergedProps, registered, obj) {
-  var string = '';
-
-  if (Array.isArray(obj)) {
-    for (var i = 0; i < obj.length; i++) {
-      string += handleInterpolation(mergedProps, registered, obj[i]) + ";";
-    }
-  } else {
-    for (var _key in obj) {
-      var value = obj[_key];
-
-      if (typeof value !== 'object') {
-        if (registered != null && registered[value] !== undefined) {
-          string += _key + "{" + registered[value] + "}";
-        } else if (isProcessableValue(value)) {
-          string += processStyleName(_key) + ":" + processStyleValue(_key, value) + ";";
-        }
-      } else {
-        if (_key === 'NO_COMPONENT_SELECTOR' && "production" !== 'production') {}
-
-        if (Array.isArray(value) && typeof value[0] === 'string' && (registered == null || registered[value[0]] === undefined)) {
-          for (var _i = 0; _i < value.length; _i++) {
-            if (isProcessableValue(value[_i])) {
-              string += processStyleName(_key) + ":" + processStyleValue(_key, value[_i]) + ";";
-            }
-          }
-        } else {
-          var interpolated = handleInterpolation(mergedProps, registered, value);
-
-          switch (_key) {
-            case 'animation':
-            case 'animationName':
-              {
-                string += processStyleName(_key) + ":" + interpolated + ";";
-                break;
-              }
-
-            default:
-              {
-                if (false) {}
-
-                string += _key + "{" + interpolated + "}";
-              }
-          }
-        }
-      }
-    }
-  }
-
-  return string;
-}
-
-var labelPattern = /label:\s*([^\s;\n{]+)\s*(;|$)/g;
-var sourceMapPattern;
-
-if (false) {} // this is the cursor for keyframes
-// keyframes are stored on the SerializedStyles object as a linked list
-
-
-var cursor;
-var serializeStyles = function serializeStyles(args, registered, mergedProps) {
-  if (args.length === 1 && typeof args[0] === 'object' && args[0] !== null && args[0].styles !== undefined) {
-    return args[0];
-  }
-
-  var stringMode = true;
-  var styles = '';
-  cursor = undefined;
-  var strings = args[0];
-
-  if (strings == null || strings.raw === undefined) {
-    stringMode = false;
-    styles += handleInterpolation(mergedProps, registered, strings);
-  } else {
-    if (false) {}
-
-    styles += strings[0];
-  } // we start at 1 since we've already handled the first arg
-
-
-  for (var i = 1; i < args.length; i++) {
-    styles += handleInterpolation(mergedProps, registered, args[i]);
-
-    if (stringMode) {
-      if (false) {}
-
-      styles += strings[i];
-    }
-  }
-
-  var sourceMap;
-
-  if (false) {} // using a global regex with .exec is stateful so lastIndex has to be reset each time
-
-
-  labelPattern.lastIndex = 0;
-  var identifierName = '';
-  var match; // https://esbench.com/bench/5b809c2cf2949800a0f61fb5
-
-  while ((match = labelPattern.exec(styles)) !== null) {
-    identifierName += '-' + // $FlowFixMe we know it's not null
-    match[1];
-  }
-
-  var name = murmur2(styles) + identifierName;
-
-  if (false) {}
-
-  return {
-    name: name,
-    styles: styles,
-    next: cursor
-  };
-};
-
-
-
-
-/***/ }),
-
-/***/ 30714:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ newStyled)
-});
-
-;// CONCATENATED MODULE: ./node_modules/@emotion/styled/node_modules/@babel/runtime/helpers/esm/extends.js
-function _extends() {
-  _extends = Object.assign ? Object.assign.bind() : function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-    return target;
-  };
-  return _extends.apply(this, arguments);
-}
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/@emotion/memoize/dist/emotion-memoize.esm.js
-var emotion_memoize_esm = __webpack_require__(45042);
-;// CONCATENATED MODULE: ./node_modules/@emotion/is-prop-valid/dist/emotion-is-prop-valid.esm.js
-
-
-var reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|abbr|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|enterKeyHint|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|translate|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|incremental|fallback|inert|itemProp|itemScope|itemType|itemID|itemRef|on|option|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23
-
-var isPropValid = /* #__PURE__ */(0,emotion_memoize_esm/* default */.Z)(function (prop) {
-  return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111
-  /* o */
-  && prop.charCodeAt(1) === 110
-  /* n */
-  && prop.charCodeAt(2) < 91;
-}
-/* Z+1 */
-);
-
-
-
-// EXTERNAL MODULE: ./node_modules/@emotion/react/dist/emotion-element-6bdfffb2.esm.js + 2 modules
-var emotion_element_6bdfffb2_esm = __webpack_require__(87878);
-// EXTERNAL MODULE: ./node_modules/@emotion/utils/dist/emotion-utils.esm.js
-var emotion_utils_esm = __webpack_require__(74577);
-// EXTERNAL MODULE: ./node_modules/@emotion/serialize/dist/emotion-serialize.esm.js + 2 modules
-var emotion_serialize_esm = __webpack_require__(85662);
-// EXTERNAL MODULE: ./node_modules/@emotion/use-insertion-effect-with-fallbacks/dist/emotion-use-insertion-effect-with-fallbacks.esm.js
-var emotion_use_insertion_effect_with_fallbacks_esm = __webpack_require__(68164);
-;// CONCATENATED MODULE: ./node_modules/@emotion/styled/base/dist/emotion-styled-base.esm.js
-
-
-
-
-
-
-
-
-var testOmitPropsOnStringTag = isPropValid;
-
-var testOmitPropsOnComponent = function testOmitPropsOnComponent(key) {
-  return key !== 'theme';
-};
-
-var getDefaultShouldForwardProp = function getDefaultShouldForwardProp(tag) {
-  return typeof tag === 'string' && // 96 is one less than the char code
-  // for "a" so this is checking that
-  // it's a lowercase character
-  tag.charCodeAt(0) > 96 ? testOmitPropsOnStringTag : testOmitPropsOnComponent;
-};
-var composeShouldForwardProps = function composeShouldForwardProps(tag, options, isReal) {
-  var shouldForwardProp;
-
-  if (options) {
-    var optionsShouldForwardProp = options.shouldForwardProp;
-    shouldForwardProp = tag.__emotion_forwardProp && optionsShouldForwardProp ? function (propName) {
-      return tag.__emotion_forwardProp(propName) && optionsShouldForwardProp(propName);
-    } : optionsShouldForwardProp;
-  }
-
-  if (typeof shouldForwardProp !== 'function' && isReal) {
-    shouldForwardProp = tag.__emotion_forwardProp;
-  }
-
-  return shouldForwardProp;
-};
-
-var ILLEGAL_ESCAPE_SEQUENCE_ERROR = "You have illegal escape sequence in your template literal, most likely inside content's property value.\nBecause you write your CSS inside a JavaScript string you actually have to do double escaping, so for example \"content: '\\00d7';\" should become \"content: '\\\\00d7';\".\nYou can read more about this here:\nhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Template_literals#ES2018_revision_of_illegal_escape_sequences";
-var isBrowser = typeof document !== 'undefined';
-
-var Insertion = function Insertion(_ref) {
-  var cache = _ref.cache,
-      serialized = _ref.serialized,
-      isStringTag = _ref.isStringTag;
-  (0,emotion_utils_esm/* registerStyles */.hC)(cache, serialized, isStringTag);
-  var rules = (0,emotion_use_insertion_effect_with_fallbacks_esm/* useInsertionEffectAlwaysWithSyncFallback */.L)(function () {
-    return (0,emotion_utils_esm/* insertStyles */.My)(cache, serialized, isStringTag);
-  });
-
-  if (!isBrowser && rules !== undefined) {
-    var _ref2;
-
-    var serializedNames = serialized.name;
-    var next = serialized.next;
-
-    while (next !== undefined) {
-      serializedNames += ' ' + next.name;
-      next = next.next;
-    }
-
-    return /*#__PURE__*/react.createElement("style", (_ref2 = {}, _ref2["data-emotion"] = cache.key + " " + serializedNames, _ref2.dangerouslySetInnerHTML = {
-      __html: rules
-    }, _ref2.nonce = cache.sheet.nonce, _ref2));
-  }
-
-  return null;
-};
-
-var createStyled = function createStyled(tag, options) {
-  if (false) {}
-
-  var isReal = tag.__emotion_real === tag;
-  var baseTag = isReal && tag.__emotion_base || tag;
-  var identifierName;
-  var targetClassName;
-
-  if (options !== undefined) {
-    identifierName = options.label;
-    targetClassName = options.target;
-  }
-
-  var shouldForwardProp = composeShouldForwardProps(tag, options, isReal);
-  var defaultShouldForwardProp = shouldForwardProp || getDefaultShouldForwardProp(baseTag);
-  var shouldUseAs = !defaultShouldForwardProp('as');
-  return function () {
-    var args = arguments;
-    var styles = isReal && tag.__emotion_styles !== undefined ? tag.__emotion_styles.slice(0) : [];
-
-    if (identifierName !== undefined) {
-      styles.push("label:" + identifierName + ";");
-    }
-
-    if (args[0] == null || args[0].raw === undefined) {
-      styles.push.apply(styles, args);
-    } else {
-      if (false) {}
-
-      styles.push(args[0][0]);
-      var len = args.length;
-      var i = 1;
-
-      for (; i < len; i++) {
-        if (false) {}
-
-        styles.push(args[i], args[0][i]);
-      }
-    } // $FlowFixMe: we need to cast StatelessFunctionalComponent to our PrivateStyledComponent class
-
-
-    var Styled = (0,emotion_element_6bdfffb2_esm.w)(function (props, cache, ref) {
-      var FinalTag = shouldUseAs && props.as || baseTag;
-      var className = '';
-      var classInterpolations = [];
-      var mergedProps = props;
-
-      if (props.theme == null) {
-        mergedProps = {};
-
-        for (var key in props) {
-          mergedProps[key] = props[key];
-        }
-
-        mergedProps.theme = react.useContext(emotion_element_6bdfffb2_esm.T);
-      }
-
-      if (typeof props.className === 'string') {
-        className = (0,emotion_utils_esm/* getRegisteredStyles */.fp)(cache.registered, classInterpolations, props.className);
-      } else if (props.className != null) {
-        className = props.className + " ";
-      }
-
-      var serialized = (0,emotion_serialize_esm/* serializeStyles */.O)(styles.concat(classInterpolations), cache.registered, mergedProps);
-      className += cache.key + "-" + serialized.name;
-
-      if (targetClassName !== undefined) {
-        className += " " + targetClassName;
-      }
-
-      var finalShouldForwardProp = shouldUseAs && shouldForwardProp === undefined ? getDefaultShouldForwardProp(FinalTag) : defaultShouldForwardProp;
-      var newProps = {};
-
-      for (var _key in props) {
-        if (shouldUseAs && _key === 'as') continue;
-
-        if ( // $FlowFixMe
-        finalShouldForwardProp(_key)) {
-          newProps[_key] = props[_key];
-        }
-      }
-
-      newProps.className = className;
-      newProps.ref = ref;
-      return /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(Insertion, {
-        cache: cache,
-        serialized: serialized,
-        isStringTag: typeof FinalTag === 'string'
-      }), /*#__PURE__*/react.createElement(FinalTag, newProps));
-    });
-    Styled.displayName = identifierName !== undefined ? identifierName : "Styled(" + (typeof baseTag === 'string' ? baseTag : baseTag.displayName || baseTag.name || 'Component') + ")";
-    Styled.defaultProps = tag.defaultProps;
-    Styled.__emotion_real = Styled;
-    Styled.__emotion_base = baseTag;
-    Styled.__emotion_styles = styles;
-    Styled.__emotion_forwardProp = shouldForwardProp;
-    Object.defineProperty(Styled, 'toString', {
-      value: function value() {
-        if (targetClassName === undefined && "production" !== 'production') {} // $FlowFixMe: coerce undefined to string
-
-
-        return "." + targetClassName;
-      }
-    });
-
-    Styled.withComponent = function (nextTag, nextOptions) {
-      return createStyled(nextTag, _extends({}, options, nextOptions, {
-        shouldForwardProp: composeShouldForwardProps(Styled, nextOptions, true)
-      })).apply(void 0, styles);
-    };
-
-    return Styled;
-  };
-};
-
-
-
-// EXTERNAL MODULE: ./node_modules/@emotion/styled/node_modules/@babel/runtime/helpers/extends.js
-var helpers_extends = __webpack_require__(64304);
-;// CONCATENATED MODULE: ./node_modules/@emotion/styled/dist/emotion-styled.esm.js
-
-
-
-
-
-
-
-
-
-var tags = ['a', 'abbr', 'address', 'area', 'article', 'aside', 'audio', 'b', 'base', 'bdi', 'bdo', 'big', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'cite', 'code', 'col', 'colgroup', 'data', 'datalist', 'dd', 'del', 'details', 'dfn', 'dialog', 'div', 'dl', 'dt', 'em', 'embed', 'fieldset', 'figcaption', 'figure', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'iframe', 'img', 'input', 'ins', 'kbd', 'keygen', 'label', 'legend', 'li', 'link', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meta', 'meter', 'nav', 'noscript', 'object', 'ol', 'optgroup', 'option', 'output', 'p', 'param', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select', 'small', 'source', 'span', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'time', 'title', 'tr', 'track', 'u', 'ul', 'var', 'video', 'wbr', // SVG
-'circle', 'clipPath', 'defs', 'ellipse', 'foreignObject', 'g', 'image', 'line', 'linearGradient', 'mask', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'stop', 'svg', 'text', 'tspan'];
-
-var newStyled = createStyled.bind();
-tags.forEach(function (tagName) {
-  // $FlowFixMe: we can ignore this because its exposed type is defined by the CreateStyled type
-  newStyled[tagName] = newStyled(tagName);
-});
-
-
-
-
-/***/ }),
-
-/***/ 68164:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-var react__WEBPACK_IMPORTED_MODULE_0___namespace_cache;
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "L": () => (/* binding */ useInsertionEffectAlwaysWithSyncFallback),
-/* harmony export */   "j": () => (/* binding */ useInsertionEffectWithLayoutFallback)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-
-
-var isBrowser = typeof document !== 'undefined';
-
-var syncFallback = function syncFallback(create) {
-  return create();
-};
-
-var useInsertionEffect = /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)))['useInsertion' + 'Effect'] ? /*#__PURE__*/ (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache || (react__WEBPACK_IMPORTED_MODULE_0___namespace_cache = __webpack_require__.t(react__WEBPACK_IMPORTED_MODULE_0__, 2)))['useInsertion' + 'Effect'] : false;
-var useInsertionEffectAlwaysWithSyncFallback = !isBrowser ? syncFallback : useInsertionEffect || syncFallback;
-var useInsertionEffectWithLayoutFallback = useInsertionEffect || react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect;
-
-
-
-
-/***/ }),
-
-/***/ 74577:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "My": () => (/* binding */ insertStyles),
-/* harmony export */   "fp": () => (/* binding */ getRegisteredStyles),
-/* harmony export */   "hC": () => (/* binding */ registerStyles)
-/* harmony export */ });
-var isBrowser = typeof document !== 'undefined';
-function getRegisteredStyles(registered, registeredStyles, classNames) {
-  var rawClassName = '';
-  classNames.split(' ').forEach(function (className) {
-    if (registered[className] !== undefined) {
-      registeredStyles.push(registered[className] + ";");
-    } else {
-      rawClassName += className + " ";
-    }
-  });
-  return rawClassName;
-}
-var registerStyles = function registerStyles(cache, serialized, isStringTag) {
-  var className = cache.key + "-" + serialized.name;
-
-  if ( // we only need to add the styles to the registered cache if the
-  // class name could be used further down
-  // the tree but if it's a string tag, we know it won't
-  // so we don't have to add it to registered cache.
-  // this improves memory usage since we can avoid storing the whole style string
-  (isStringTag === false || // we need to always store it if we're in compat mode and
-  // in node since emotion-server relies on whether a style is in
-  // the registered cache to know whether a style is global or not
-  // also, note that this check will be dead code eliminated in the browser
-  isBrowser === false && cache.compat !== undefined) && cache.registered[className] === undefined) {
-    cache.registered[className] = serialized.styles;
-  }
-};
-var insertStyles = function insertStyles(cache, serialized, isStringTag) {
-  registerStyles(cache, serialized, isStringTag);
-  var className = cache.key + "-" + serialized.name;
-
-  if (cache.inserted[serialized.name] === undefined) {
-    var stylesForSSR = '';
-    var current = serialized;
-
-    do {
-      var maybeStyles = cache.insert(serialized === current ? "." + className : '', current, cache.sheet, true);
-
-      if (!isBrowser && maybeStyles !== undefined) {
-        stylesForSSR += maybeStyles;
-      }
-
-      current = current.next;
-    } while (current !== undefined);
-
-    if (!isBrowser && stylesForSSR.length !== 0) {
-      return stylesForSSR;
-    }
-  }
-};
-
-
-
-
-/***/ }),
-
-/***/ 81034:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (/* binding */ weakMemoize)
-/* harmony export */ });
-var weakMemoize = function weakMemoize(func) {
-  // $FlowFixMe flow doesn't include all non-primitive types as allowed for weakmaps
-  var cache = new WeakMap();
-  return function (arg) {
-    if (cache.has(arg)) {
-      // $FlowFixMe
-      return cache.get(arg);
-    }
-
-    var ret = func(arg);
-    cache.set(arg, ret);
-    return ret;
-  };
-};
-
-
-
-
-/***/ }),
-
-/***/ 92878:
-/***/ (function(__unused_webpack_module, exports) {
-
-(function (global, factory) {
-     true ? factory(exports) :
-    0;
-})(this, (function (exports) { 'use strict';
-
-    const comma = ','.charCodeAt(0);
-    const semicolon = ';'.charCodeAt(0);
-    const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
-    const intToChar = new Uint8Array(64); // 64 possible chars.
-    const charToInteger = new Uint8Array(128); // z is 122 in ASCII
-    for (let i = 0; i < chars.length; i++) {
-        const c = chars.charCodeAt(i);
-        charToInteger[c] = i;
-        intToChar[i] = c;
-    }
-    // Provide a fallback for older environments.
-    const td = typeof TextDecoder !== 'undefined'
-        ? new TextDecoder()
-        : typeof Buffer !== 'undefined'
-            ? {
-                decode(buf) {
-                    const out = Buffer.from(buf.buffer, buf.byteOffset, buf.byteLength);
-                    return out.toString();
-                },
-            }
-            : {
-                decode(buf) {
-                    let out = '';
-                    for (let i = 0; i < buf.length; i++) {
-                        out += String.fromCharCode(buf[i]);
-                    }
-                    return out;
-                },
-            };
-    function decode(mappings) {
-        const state = new Int32Array(5);
-        const decoded = [];
-        let line = [];
-        let sorted = true;
-        let lastCol = 0;
-        for (let i = 0; i < mappings.length;) {
-            const c = mappings.charCodeAt(i);
-            if (c === comma) {
-                i++;
-            }
-            else if (c === semicolon) {
-                state[0] = lastCol = 0;
-                if (!sorted)
-                    sort(line);
-                sorted = true;
-                decoded.push(line);
-                line = [];
-                i++;
-            }
-            else {
-                i = decodeInteger(mappings, i, state, 0); // generatedCodeColumn
-                const col = state[0];
-                if (col < lastCol)
-                    sorted = false;
-                lastCol = col;
-                if (!hasMoreSegments(mappings, i)) {
-                    line.push([col]);
-                    continue;
-                }
-                i = decodeInteger(mappings, i, state, 1); // sourceFileIndex
-                i = decodeInteger(mappings, i, state, 2); // sourceCodeLine
-                i = decodeInteger(mappings, i, state, 3); // sourceCodeColumn
-                if (!hasMoreSegments(mappings, i)) {
-                    line.push([col, state[1], state[2], state[3]]);
-                    continue;
-                }
-                i = decodeInteger(mappings, i, state, 4); // nameIndex
-                line.push([col, state[1], state[2], state[3], state[4]]);
-            }
-        }
-        if (!sorted)
-            sort(line);
-        decoded.push(line);
-        return decoded;
-    }
-    function decodeInteger(mappings, pos, state, j) {
-        let value = 0;
-        let shift = 0;
-        let integer = 0;
-        do {
-            const c = mappings.charCodeAt(pos++);
-            integer = charToInteger[c];
-            value |= (integer & 31) << shift;
-            shift += 5;
-        } while (integer & 32);
-        const shouldNegate = value & 1;
-        value >>>= 1;
-        if (shouldNegate) {
-            value = -0x80000000 | -value;
-        }
-        state[j] += value;
-        return pos;
-    }
-    function hasMoreSegments(mappings, i) {
-        if (i >= mappings.length)
-            return false;
-        const c = mappings.charCodeAt(i);
-        if (c === comma || c === semicolon)
-            return false;
-        return true;
-    }
-    function sort(line) {
-        line.sort(sortComparator$1);
-    }
-    function sortComparator$1(a, b) {
-        return a[0] - b[0];
-    }
-    function encode(decoded) {
-        const state = new Int32Array(5);
-        let buf = new Uint8Array(1024);
-        let pos = 0;
-        for (let i = 0; i < decoded.length; i++) {
-            const line = decoded[i];
-            if (i > 0) {
-                buf = reserve(buf, pos, 1);
-                buf[pos++] = semicolon;
-            }
-            if (line.length === 0)
-                continue;
-            state[0] = 0;
-            for (let j = 0; j < line.length; j++) {
-                const segment = line[j];
-                // We can push up to 5 ints, each int can take at most 7 chars, and we
-                // may push a comma.
-                buf = reserve(buf, pos, 36);
-                if (j > 0)
-                    buf[pos++] = comma;
-                pos = encodeInteger(buf, pos, state, segment, 0); // generatedCodeColumn
-                if (segment.length === 1)
-                    continue;
-                pos = encodeInteger(buf, pos, state, segment, 1); // sourceFileIndex
-                pos = encodeInteger(buf, pos, state, segment, 2); // sourceCodeLine
-                pos = encodeInteger(buf, pos, state, segment, 3); // sourceCodeColumn
-                if (segment.length === 4)
-                    continue;
-                pos = encodeInteger(buf, pos, state, segment, 4); // nameIndex
-            }
-        }
-        return td.decode(buf.subarray(0, pos));
-    }
-    function reserve(buf, pos, count) {
-        if (buf.length > pos + count)
-            return buf;
-        const swap = new Uint8Array(buf.length * 2);
-        swap.set(buf);
-        return swap;
-    }
-    function encodeInteger(buf, pos, state, segment, j) {
-        const next = segment[j];
-        let num = next - state[j];
-        state[j] = next;
-        num = num < 0 ? (-num << 1) | 1 : num << 1;
-        do {
-            let clamped = num & 0b011111;
-            num >>>= 5;
-            if (num > 0)
-                clamped |= 0b100000;
-            buf[pos++] = intToChar[clamped];
-        } while (num > 0);
-        return pos;
-    }
-
-    // Matches the scheme of a URL, eg "http://"
-    const schemeRegex = /^[\w+.-]+:\/\//;
-    /**
-     * Matches the parts of a URL:
-     * 1. Scheme, including ":", guaranteed.
-     * 2. User/password, including "@", optional.
-     * 3. Host, guaranteed.
-     * 4. Port, including ":", optional.
-     * 5. Path, including "/", optional.
-     */
-    const urlRegex = /^([\w+.-]+:)\/\/([^@/#?]*@)?([^:/#?]*)(:\d+)?(\/[^#?]*)?/;
-    /**
-     * File URLs are weird. They dont' need the regular `//` in the scheme, they may or may not start
-     * with a leading `/`, they can have a domain (but only if they don't start with a Windows drive).
-     *
-     * 1. Host, optional.
-     * 2. Path, which may inclue "/", guaranteed.
-     */
-    const fileRegex = /^file:(?:\/\/((?![a-z]:)[^/]*)?)?(\/?.*)/i;
-    function isAbsoluteUrl(input) {
-        return schemeRegex.test(input);
-    }
-    function isSchemeRelativeUrl(input) {
-        return input.startsWith('//');
-    }
-    function isAbsolutePath(input) {
-        return input.startsWith('/');
-    }
-    function isFileUrl(input) {
-        return input.startsWith('file:');
-    }
-    function parseAbsoluteUrl(input) {
-        const match = urlRegex.exec(input);
-        return makeUrl(match[1], match[2] || '', match[3], match[4] || '', match[5] || '/');
-    }
-    function parseFileUrl(input) {
-        const match = fileRegex.exec(input);
-        const path = match[2];
-        return makeUrl('file:', '', match[1] || '', '', isAbsolutePath(path) ? path : '/' + path);
-    }
-    function makeUrl(scheme, user, host, port, path) {
-        return {
-            scheme,
-            user,
-            host,
-            port,
-            path,
-            relativePath: false,
-        };
-    }
-    function parseUrl(input) {
-        if (isSchemeRelativeUrl(input)) {
-            const url = parseAbsoluteUrl('http:' + input);
-            url.scheme = '';
-            return url;
-        }
-        if (isAbsolutePath(input)) {
-            const url = parseAbsoluteUrl('http://foo.com' + input);
-            url.scheme = '';
-            url.host = '';
-            return url;
-        }
-        if (isFileUrl(input))
-            return parseFileUrl(input);
-        if (isAbsoluteUrl(input))
-            return parseAbsoluteUrl(input);
-        const url = parseAbsoluteUrl('http://foo.com/' + input);
-        url.scheme = '';
-        url.host = '';
-        url.relativePath = true;
-        return url;
-    }
-    function stripPathFilename(path) {
-        // If a path ends with a parent directory "..", then it's a relative path with excess parent
-        // paths. It's not a file, so we can't strip it.
-        if (path.endsWith('/..'))
-            return path;
-        const index = path.lastIndexOf('/');
-        return path.slice(0, index + 1);
-    }
-    function mergePaths(url, base) {
-        // If we're not a relative path, then we're an absolute path, and it doesn't matter what base is.
-        if (!url.relativePath)
-            return;
-        normalizePath(base);
-        // If the path is just a "/", then it was an empty path to begin with (remember, we're a relative
-        // path).
-        if (url.path === '/') {
-            url.path = base.path;
-        }
-        else {
-            // Resolution happens relative to the base path's directory, not the file.
-            url.path = stripPathFilename(base.path) + url.path;
-        }
-        // If the base path is absolute, then our path is now absolute too.
-        url.relativePath = base.relativePath;
-    }
-    /**
-     * The path can have empty directories "//", unneeded parents "foo/..", or current directory
-     * "foo/.". We need to normalize to a standard representation.
-     */
-    function normalizePath(url) {
-        const { relativePath } = url;
-        const pieces = url.path.split('/');
-        // We need to preserve the first piece always, so that we output a leading slash. The item at
-        // pieces[0] is an empty string.
-        let pointer = 1;
-        // Positive is the number of real directories we've output, used for popping a parent directory.
-        // Eg, "foo/bar/.." will have a positive 2, and we can decrement to be left with just "foo".
-        let positive = 0;
-        // We need to keep a trailing slash if we encounter an empty directory (eg, splitting "foo/" will
-        // generate `["foo", ""]` pieces). And, if we pop a parent directory. But once we encounter a
-        // real directory, we won't need to append, unless the other conditions happen again.
-        let addTrailingSlash = false;
-        for (let i = 1; i < pieces.length; i++) {
-            const piece = pieces[i];
-            // An empty directory, could be a trailing slash, or just a double "//" in the path.
-            if (!piece) {
-                addTrailingSlash = true;
-                continue;
-            }
-            // If we encounter a real directory, then we don't need to append anymore.
-            addTrailingSlash = false;
-            // A current directory, which we can always drop.
-            if (piece === '.')
-                continue;
-            // A parent directory, we need to see if there are any real directories we can pop. Else, we
-            // have an excess of parents, and we'll need to keep the "..".
-            if (piece === '..') {
-                if (positive) {
-                    addTrailingSlash = true;
-                    positive--;
-                    pointer--;
-                }
-                else if (relativePath) {
-                    // If we're in a relativePath, then we need to keep the excess parents. Else, in an absolute
-                    // URL, protocol relative URL, or an absolute path, we don't need to keep excess.
-                    pieces[pointer++] = piece;
-                }
-                continue;
-            }
-            // We've encountered a real directory. Move it to the next insertion pointer, which accounts for
-            // any popped or dropped directories.
-            pieces[pointer++] = piece;
-            positive++;
-        }
-        let path = '';
-        for (let i = 1; i < pointer; i++) {
-            path += '/' + pieces[i];
-        }
-        if (!path || (addTrailingSlash && !path.endsWith('/..'))) {
-            path += '/';
-        }
-        url.path = path;
-    }
-    /**
-     * Attempts to resolve `input` URL/path relative to `base`.
-     */
-    function resolve$1(input, base) {
-        if (!input && !base)
-            return '';
-        const url = parseUrl(input);
-        // If we have a base, and the input isn't already an absolute URL, then we need to merge.
-        if (base && !url.scheme) {
-            const baseUrl = parseUrl(base);
-            url.scheme = baseUrl.scheme;
-            // If there's no host, then we were just a path.
-            if (!url.host) {
-                // The host, user, and port are joined, you can't copy one without the others.
-                url.user = baseUrl.user;
-                url.host = baseUrl.host;
-                url.port = baseUrl.port;
-            }
-            mergePaths(url, baseUrl);
-        }
-        normalizePath(url);
-        // If the input (and base, if there was one) are both relative, then we need to output a relative.
-        if (url.relativePath) {
-            // The first char is always a "/".
-            const path = url.path.slice(1);
-            if (!path)
-                return '.';
-            // If base started with a leading ".", or there is no base and input started with a ".", then we
-            // need to ensure that the relative path starts with a ".". We don't know if relative starts
-            // with a "..", though, so check before prepending.
-            const keepRelative = (base || input).startsWith('.');
-            return !keepRelative || path.startsWith('.') ? path : './' + path;
-        }
-        // If there's no host (and no scheme/user/port), then we need to output an absolute path.
-        if (!url.scheme && !url.host)
-            return url.path;
-        // We're outputting either an absolute URL, or a protocol relative one.
-        return `${url.scheme}//${url.user}${url.host}${url.port}${url.path}`;
-    }
-
-    function resolve(input, base) {
-        // The base is always treated as a directory, if it's not empty.
-        // https://github.com/mozilla/source-map/blob/8cb3ee57/lib/util.js#L327
-        // https://github.com/chromium/chromium/blob/da4adbb3/third_party/blink/renderer/devtools/front_end/sdk/SourceMap.js#L400-L401
-        if (base && !base.endsWith('/'))
-            base += '/';
-        return resolve$1(input, base);
-    }
-
-    /**
-     * Removes everything after the last "/", but leaves the slash.
-     */
-    function stripFilename(path) {
-        if (!path)
-            return '';
-        const index = path.lastIndexOf('/');
-        return path.slice(0, index + 1);
-    }
-
-    const COLUMN$1 = 0;
-    const SOURCES_INDEX$1 = 1;
-    const SOURCE_LINE$1 = 2;
-    const SOURCE_COLUMN$1 = 3;
-    const NAMES_INDEX$1 = 4;
-
-    function maybeSort(mappings, owned) {
-        const unsortedIndex = nextUnsortedSegmentLine(mappings, 0);
-        if (unsortedIndex === mappings.length)
-            return mappings;
-        // If we own the array (meaning we parsed it from JSON), then we're free to directly mutate it. If
-        // not, we do not want to modify the consumer's input array.
-        if (!owned)
-            mappings = mappings.slice();
-        for (let i = unsortedIndex; i < mappings.length; i = nextUnsortedSegmentLine(mappings, i + 1)) {
-            mappings[i] = sortSegments(mappings[i], owned);
-        }
-        return mappings;
-    }
-    function nextUnsortedSegmentLine(mappings, start) {
-        for (let i = start; i < mappings.length; i++) {
-            if (!isSorted(mappings[i]))
-                return i;
-        }
-        return mappings.length;
-    }
-    function isSorted(line) {
-        for (let j = 1; j < line.length; j++) {
-            if (line[j][COLUMN$1] < line[j - 1][COLUMN$1]) {
-                return false;
-            }
-        }
-        return true;
-    }
-    function sortSegments(line, owned) {
-        if (!owned)
-            line = line.slice();
-        return line.sort(sortComparator);
-    }
-    function sortComparator(a, b) {
-        return a[COLUMN$1] - b[COLUMN$1];
-    }
-
-    let found = false;
-    /**
-     * A binary search implementation that returns the index if a match is found.
-     * If no match is found, then the left-index (the index associated with the item that comes just
-     * before the desired index) is returned. To maintain proper sort order, a splice would happen at
-     * the next index:
-     *
-     * ```js
-     * const array = [1, 3];
-     * const needle = 2;
-     * const index = binarySearch(array, needle, (item, needle) => item - needle);
-     *
-     * assert.equal(index, 0);
-     * array.splice(index + 1, 0, needle);
-     * assert.deepEqual(array, [1, 2, 3]);
-     * ```
-     */
-    function binarySearch(haystack, needle, low, high) {
-        while (low <= high) {
-            const mid = low + ((high - low) >> 1);
-            const cmp = haystack[mid][COLUMN$1] - needle;
-            if (cmp === 0) {
-                found = true;
-                return mid;
-            }
-            if (cmp < 0) {
-                low = mid + 1;
-            }
-            else {
-                high = mid - 1;
-            }
-        }
-        found = false;
-        return low - 1;
-    }
-    function upperBound(haystack, needle, index) {
-        for (let i = index + 1; i < haystack.length; i++, index++) {
-            if (haystack[i][COLUMN$1] !== needle)
-                break;
-        }
-        return index;
-    }
-    function lowerBound(haystack, needle, index) {
-        for (let i = index - 1; i >= 0; i--, index--) {
-            if (haystack[i][COLUMN$1] !== needle)
-                break;
-        }
-        return index;
-    }
-    function memoizedState() {
-        return {
-            lastKey: -1,
-            lastNeedle: -1,
-            lastIndex: -1,
-        };
-    }
-    /**
-     * This overly complicated beast is just to record the last tested line/column and the resulting
-     * index, allowing us to skip a few tests if mappings are monotonically increasing.
-     */
-    function memoizedBinarySearch(haystack, needle, state, key) {
-        const { lastKey, lastNeedle, lastIndex } = state;
-        let low = 0;
-        let high = haystack.length - 1;
-        if (key === lastKey) {
-            if (needle === lastNeedle) {
-                found = lastIndex !== -1 && haystack[lastIndex][COLUMN$1] === needle;
-                return lastIndex;
-            }
-            if (needle >= lastNeedle) {
-                // lastIndex may be -1 if the previous needle was not found.
-                low = lastIndex === -1 ? 0 : lastIndex;
-            }
-            else {
-                high = lastIndex;
-            }
-        }
-        state.lastKey = key;
-        state.lastNeedle = needle;
-        return (state.lastIndex = binarySearch(haystack, needle, low, high));
-    }
-
-    const AnyMap = function (map, mapUrl) {
-        const parsed = typeof map === 'string' ? JSON.parse(map) : map;
-        if (!('sections' in parsed))
-            return new TraceMap(parsed, mapUrl);
-        const mappings = [];
-        const sources = [];
-        const sourcesContent = [];
-        const names = [];
-        const { sections } = parsed;
-        let i = 0;
-        for (; i < sections.length - 1; i++) {
-            const no = sections[i + 1].offset;
-            addSection(sections[i], mapUrl, mappings, sources, sourcesContent, names, no.line, no.column);
-        }
-        if (sections.length > 0) {
-            addSection(sections[i], mapUrl, mappings, sources, sourcesContent, names, Infinity, Infinity);
-        }
-        const joined = {
-            version: 3,
-            file: parsed.file,
-            names,
-            sources,
-            sourcesContent,
-            mappings,
-        };
-        return presortedDecodedMap(joined);
-    };
-    function addSection(section, mapUrl, mappings, sources, sourcesContent, names, stopLine, stopColumn) {
-        const map = AnyMap(section.map, mapUrl);
-        const { line: lineOffset, column: columnOffset } = section.offset;
-        const sourcesOffset = sources.length;
-        const namesOffset = names.length;
-        const decoded = decodedMappings(map);
-        const { resolvedSources } = map;
-        append(sources, resolvedSources);
-        append(sourcesContent, map.sourcesContent || fillSourcesContent(resolvedSources.length));
-        append(names, map.names);
-        // If this section jumps forwards several lines, we need to add lines to the output mappings catch up.
-        for (let i = mappings.length; i <= lineOffset; i++)
-            mappings.push([]);
-        // We can only add so many lines before we step into the range that the next section's map
-        // controls. When we get to the last line, then we'll start checking the segments to see if
-        // they've crossed into the column range.
-        const stopI = stopLine - lineOffset;
-        const len = Math.min(decoded.length, stopI + 1);
-        for (let i = 0; i < len; i++) {
-            const line = decoded[i];
-            // On the 0th loop, the line will already exist due to a previous section, or the line catch up
-            // loop above.
-            const out = i === 0 ? mappings[lineOffset] : (mappings[lineOffset + i] = []);
-            // On the 0th loop, the section's column offset shifts us forward. On all other lines (since the
-            // map can be multiple lines), it doesn't.
-            const cOffset = i === 0 ? columnOffset : 0;
-            for (let j = 0; j < line.length; j++) {
-                const seg = line[j];
-                const column = cOffset + seg[COLUMN$1];
-                // If this segment steps into the column range that the next section's map controls, we need
-                // to stop early.
-                if (i === stopI && column >= stopColumn)
-                    break;
-                if (seg.length === 1) {
-                    out.push([column]);
-                    continue;
-                }
-                const sourcesIndex = sourcesOffset + seg[SOURCES_INDEX$1];
-                const sourceLine = seg[SOURCE_LINE$1];
-                const sourceColumn = seg[SOURCE_COLUMN$1];
-                if (seg.length === 4) {
-                    out.push([column, sourcesIndex, sourceLine, sourceColumn]);
-                    continue;
-                }
-                out.push([column, sourcesIndex, sourceLine, sourceColumn, namesOffset + seg[NAMES_INDEX$1]]);
-            }
-        }
-    }
-    function append(arr, other) {
-        for (let i = 0; i < other.length; i++)
-            arr.push(other[i]);
-    }
-    // Sourcemaps don't need to have sourcesContent, and if they don't, we need to create an array of
-    // equal length to the sources. This is because the sources and sourcesContent are paired arrays,
-    // where `sourcesContent[i]` is the content of the `sources[i]` file. If we didn't, then joined
-    // sourcemap would desynchronize the sources/contents.
-    function fillSourcesContent(len) {
-        const sourcesContent = [];
-        for (let i = 0; i < len; i++)
-            sourcesContent[i] = null;
-        return sourcesContent;
-    }
-
-    const INVALID_ORIGINAL_MAPPING = Object.freeze({
-        source: null,
-        line: null,
-        column: null,
-        name: null,
-    });
-    Object.freeze({
-        line: null,
-        column: null,
-    });
-    const LINE_GTR_ZERO = '`line` must be greater than 0 (lines start at line 1)';
-    const COL_GTR_EQ_ZERO = '`column` must be greater than or equal to 0 (columns start at column 0)';
-    const LEAST_UPPER_BOUND = -1;
-    const GREATEST_LOWER_BOUND = 1;
-    /**
-     * Returns the decoded (array of lines of segments) form of the SourceMap's mappings field.
-     */
-    let decodedMappings;
-    /**
-     * A higher-level API to find the source/line/column associated with a generated line/column
-     * (think, from a stack trace). Line is 1-based, but column is 0-based, due to legacy behavior in
-     * `source-map` library.
-     */
-    let originalPositionFor;
-    /**
-     * A helper that skips sorting of the input map's mappings array, which can be expensive for larger
-     * maps.
-     */
-    let presortedDecodedMap;
-    class TraceMap {
-        constructor(map, mapUrl) {
-            this._decodedMemo = memoizedState();
-            this._bySources = undefined;
-            this._bySourceMemos = undefined;
-            const isString = typeof map === 'string';
-            if (!isString && map.constructor === TraceMap)
-                return map;
-            const parsed = (isString ? JSON.parse(map) : map);
-            const { version, file, names, sourceRoot, sources, sourcesContent } = parsed;
-            this.version = version;
-            this.file = file;
-            this.names = names;
-            this.sourceRoot = sourceRoot;
-            this.sources = sources;
-            this.sourcesContent = sourcesContent;
-            if (sourceRoot || mapUrl) {
-                const from = resolve(sourceRoot || '', stripFilename(mapUrl));
-                this.resolvedSources = sources.map((s) => resolve(s || '', from));
-            }
-            else {
-                this.resolvedSources = sources.map((s) => s || '');
-            }
-            const { mappings } = parsed;
-            if (typeof mappings === 'string') {
-                this._encoded = mappings;
-                this._decoded = undefined;
-            }
-            else {
-                this._encoded = undefined;
-                this._decoded = maybeSort(mappings, isString);
-            }
-        }
-    }
-    (() => {
-        decodedMappings = (map) => {
-            return (map._decoded || (map._decoded = decode(map._encoded)));
-        };
-        originalPositionFor = (map, { line, column, bias }) => {
-            line--;
-            if (line < 0)
-                throw new Error(LINE_GTR_ZERO);
-            if (column < 0)
-                throw new Error(COL_GTR_EQ_ZERO);
-            const decoded = decodedMappings(map);
-            // It's common for parent source maps to have pointers to lines that have no
-            // mapping (like a "//# sourceMappingURL=") at the end of the child file.
-            if (line >= decoded.length)
-                return INVALID_ORIGINAL_MAPPING;
-            const segment = traceSegmentInternal(decoded[line], map._decodedMemo, line, column, bias || GREATEST_LOWER_BOUND);
-            if (segment == null)
-                return INVALID_ORIGINAL_MAPPING;
-            if (segment.length == 1)
-                return INVALID_ORIGINAL_MAPPING;
-            const { names, resolvedSources } = map;
-            return {
-                source: resolvedSources[segment[SOURCES_INDEX$1]],
-                line: segment[SOURCE_LINE$1] + 1,
-                column: segment[SOURCE_COLUMN$1],
-                name: segment.length === 5 ? names[segment[NAMES_INDEX$1]] : null,
-            };
-        };
-        presortedDecodedMap = (map, mapUrl) => {
-            const clone = Object.assign({}, map);
-            clone.mappings = [];
-            const tracer = new TraceMap(clone, mapUrl);
-            tracer._decoded = map.mappings;
-            return tracer;
-        };
-    })();
-    function traceSegmentInternal(segments, memo, line, column, bias) {
-        let index = memoizedBinarySearch(segments, column, memo, line);
-        if (found) {
-            index = (bias === LEAST_UPPER_BOUND ? upperBound : lowerBound)(segments, column, index);
-        }
-        else if (bias === LEAST_UPPER_BOUND)
-            index++;
-        if (index === -1 || index === segments.length)
-            return null;
-        return segments[index];
-    }
-
-    /**
-     * Gets the index associated with `key` in the backing array, if it is already present.
-     */
-    let get;
-    /**
-     * Puts `key` into the backing array, if it is not already present. Returns
-     * the index of the `key` in the backing array.
-     */
-    let put;
-    /**
-     * SetArray acts like a `Set` (allowing only one occurrence of a string `key`), but provides the
-     * index of the `key` in the backing array.
-     *
-     * This is designed to allow synchronizing a second array with the contents of the backing array,
-     * like how in a sourcemap `sourcesContent[i]` is the source content associated with `source[i]`,
-     * and there are never duplicates.
-     */
-    class SetArray {
-        constructor() {
-            this._indexes = { __proto__: null };
-            this.array = [];
-        }
-    }
-    (() => {
-        get = (strarr, key) => strarr._indexes[key];
-        put = (strarr, key) => {
-            // The key may or may not be present. If it is present, it's a number.
-            const index = get(strarr, key);
-            if (index !== undefined)
-                return index;
-            const { array, _indexes: indexes } = strarr;
-            return (indexes[key] = array.push(key) - 1);
-        };
-    })();
-
-    const COLUMN = 0;
-    const SOURCES_INDEX = 1;
-    const SOURCE_LINE = 2;
-    const SOURCE_COLUMN = 3;
-    const NAMES_INDEX = 4;
-
-    const NO_NAME = -1;
-    /**
-     * Same as `addMapping`, but will only add the mapping if it generates useful information in the
-     * resulting map. This only works correctly if mappings are added **in order**, meaning you should
-     * not add a mapping with a lower generated line/column than one that came before.
-     */
-    let maybeAddMapping;
-    /**
-     * Adds/removes the content of the source file to the source map.
-     */
-    let setSourceContent;
-    /**
-     * Returns a sourcemap object (with decoded mappings) suitable for passing to a library that expects
-     * a sourcemap, or to JSON.stringify.
-     */
-    let toDecodedMap;
-    /**
-     * Returns a sourcemap object (with encoded mappings) suitable for passing to a library that expects
-     * a sourcemap, or to JSON.stringify.
-     */
-    let toEncodedMap;
-    // This split declaration is only so that terser can elminiate the static initialization block.
-    let addSegmentInternal;
-    /**
-     * Provides the state to generate a sourcemap.
-     */
-    class GenMapping {
-        constructor({ file, sourceRoot } = {}) {
-            this._names = new SetArray();
-            this._sources = new SetArray();
-            this._sourcesContent = [];
-            this._mappings = [];
-            this.file = file;
-            this.sourceRoot = sourceRoot;
-        }
-    }
-    (() => {
-        maybeAddMapping = (map, mapping) => {
-            return addMappingInternal(true, map, mapping);
-        };
-        setSourceContent = (map, source, content) => {
-            const { _sources: sources, _sourcesContent: sourcesContent } = map;
-            sourcesContent[put(sources, source)] = content;
-        };
-        toDecodedMap = (map) => {
-            const { file, sourceRoot, _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map;
-            removeEmptyFinalLines(mappings);
-            return {
-                version: 3,
-                file: file || undefined,
-                names: names.array,
-                sourceRoot: sourceRoot || undefined,
-                sources: sources.array,
-                sourcesContent,
-                mappings,
-            };
-        };
-        toEncodedMap = (map) => {
-            const decoded = toDecodedMap(map);
-            return Object.assign(Object.assign({}, decoded), { mappings: encode(decoded.mappings) });
-        };
-        // Internal helpers
-        addSegmentInternal = (skipable, map, genLine, genColumn, source, sourceLine, sourceColumn, name) => {
-            const { _mappings: mappings, _sources: sources, _sourcesContent: sourcesContent, _names: names, } = map;
-            const line = getLine(mappings, genLine);
-            const index = getColumnIndex(line, genColumn);
-            if (!source) {
-                if (skipable && skipSourceless(line, index))
-                    return;
-                return insert(line, index, [genColumn]);
-            }
-            const sourcesIndex = put(sources, source);
-            const namesIndex = name ? put(names, name) : NO_NAME;
-            if (sourcesIndex === sourcesContent.length)
-                sourcesContent[sourcesIndex] = null;
-            if (skipable && skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex)) {
-                return;
-            }
-            return insert(line, index, name
-                ? [genColumn, sourcesIndex, sourceLine, sourceColumn, namesIndex]
-                : [genColumn, sourcesIndex, sourceLine, sourceColumn]);
-        };
-    })();
-    function getLine(mappings, index) {
-        for (let i = mappings.length; i <= index; i++) {
-            mappings[i] = [];
-        }
-        return mappings[index];
-    }
-    function getColumnIndex(line, genColumn) {
-        let index = line.length;
-        for (let i = index - 1; i >= 0; index = i--) {
-            const current = line[i];
-            if (genColumn >= current[COLUMN])
-                break;
-        }
-        return index;
-    }
-    function insert(array, index, value) {
-        for (let i = array.length; i > index; i--) {
-            array[i] = array[i - 1];
-        }
-        array[index] = value;
-    }
-    function removeEmptyFinalLines(mappings) {
-        const { length } = mappings;
-        let len = length;
-        for (let i = len - 1; i >= 0; len = i, i--) {
-            if (mappings[i].length > 0)
-                break;
-        }
-        if (len < length)
-            mappings.length = len;
-    }
-    function skipSourceless(line, index) {
-        // The start of a line is already sourceless, so adding a sourceless segment to the beginning
-        // doesn't generate any useful information.
-        if (index === 0)
-            return true;
-        const prev = line[index - 1];
-        // If the previous segment is also sourceless, then adding another sourceless segment doesn't
-        // genrate any new information. Else, this segment will end the source/named segment and point to
-        // a sourceless position, which is useful.
-        return prev.length === 1;
-    }
-    function skipSource(line, index, sourcesIndex, sourceLine, sourceColumn, namesIndex) {
-        // A source/named segment at the start of a line gives position at that genColumn
-        if (index === 0)
-            return false;
-        const prev = line[index - 1];
-        // If the previous segment is sourceless, then we're transitioning to a source.
-        if (prev.length === 1)
-            return false;
-        // If the previous segment maps to the exact same source position, then this segment doesn't
-        // provide any new position information.
-        return (sourcesIndex === prev[SOURCES_INDEX] &&
-            sourceLine === prev[SOURCE_LINE] &&
-            sourceColumn === prev[SOURCE_COLUMN] &&
-            namesIndex === (prev.length === 5 ? prev[NAMES_INDEX] : NO_NAME));
-    }
-    function addMappingInternal(skipable, map, mapping) {
-        const { generated, source, original, name } = mapping;
-        if (!source) {
-            return addSegmentInternal(skipable, map, generated.line - 1, generated.column, null, null, null, null);
-        }
-        const s = source;
-        return addSegmentInternal(skipable, map, generated.line - 1, generated.column, s, original.line - 1, original.column, name);
-    }
-
-    class SourceMapConsumer {
-        constructor(map, mapUrl) {
-            const trace = (this._map = new AnyMap(map, mapUrl));
-            this.file = trace.file;
-            this.names = trace.names;
-            this.sourceRoot = trace.sourceRoot;
-            this.sources = trace.resolvedSources;
-            this.sourcesContent = trace.sourcesContent;
-        }
-        originalPositionFor(needle) {
-            return originalPositionFor(this._map, needle);
-        }
-        destroy() {
-            // noop.
-        }
-    }
-    class SourceMapGenerator {
-        constructor(opts) {
-            this._map = new GenMapping(opts);
-        }
-        addMapping(mapping) {
-            maybeAddMapping(this._map, mapping);
-        }
-        setSourceContent(source, content) {
-            setSourceContent(this._map, source, content);
-        }
-        toJSON() {
-            return toEncodedMap(this._map);
-        }
-        toDecodedMap() {
-            return toDecodedMap(this._map);
-        }
-    }
-
-    exports.SourceMapConsumer = SourceMapConsumer;
-    exports.SourceMapGenerator = SourceMapGenerator;
-
-    Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
-//# sourceMappingURL=source-map.umd.js.map
-
-
-/***/ }),
-
-/***/ 3905:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Zo": () => (/* binding */ MDXProvider),
-/* harmony export */   "kt": () => (/* binding */ createElement)
-/* harmony export */ });
-/* unused harmony exports MDXContext, useMDXComponents, withMDXComponents */
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-
-
-function _defineProperty(obj, key, value) {
-  if (key in obj) {
-    Object.defineProperty(obj, key, {
-      value: value,
-      enumerable: true,
-      configurable: true,
-      writable: true
-    });
-  } else {
-    obj[key] = value;
-  }
-
-  return obj;
-}
-
-function _extends() {
-  _extends = Object.assign || function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-
-    return target;
-  };
-
-  return _extends.apply(this, arguments);
-}
-
-function ownKeys(object, enumerableOnly) {
-  var keys = Object.keys(object);
-
-  if (Object.getOwnPropertySymbols) {
-    var symbols = Object.getOwnPropertySymbols(object);
-    if (enumerableOnly) symbols = symbols.filter(function (sym) {
-      return Object.getOwnPropertyDescriptor(object, sym).enumerable;
-    });
-    keys.push.apply(keys, symbols);
-  }
-
-  return keys;
-}
-
-function _objectSpread2(target) {
-  for (var i = 1; i < arguments.length; i++) {
-    var source = arguments[i] != null ? arguments[i] : {};
-
-    if (i % 2) {
-      ownKeys(Object(source), true).forEach(function (key) {
-        _defineProperty(target, key, source[key]);
-      });
-    } else if (Object.getOwnPropertyDescriptors) {
-      Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
-    } else {
-      ownKeys(Object(source)).forEach(function (key) {
-        Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
-      });
-    }
-  }
-
-  return target;
-}
-
-function _objectWithoutPropertiesLoose(source, excluded) {
-  if (source == null) return {};
-  var target = {};
-  var sourceKeys = Object.keys(source);
-  var key, i;
-
-  for (i = 0; i < sourceKeys.length; i++) {
-    key = sourceKeys[i];
-    if (excluded.indexOf(key) >= 0) continue;
-    target[key] = source[key];
-  }
-
-  return target;
-}
-
-function _objectWithoutProperties(source, excluded) {
-  if (source == null) return {};
-
-  var target = _objectWithoutPropertiesLoose(source, excluded);
-
-  var key, i;
-
-  if (Object.getOwnPropertySymbols) {
-    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
-
-    for (i = 0; i < sourceSymbolKeys.length; i++) {
-      key = sourceSymbolKeys[i];
-      if (excluded.indexOf(key) >= 0) continue;
-      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
-      target[key] = source[key];
-    }
-  }
-
-  return target;
-}
-
-var isFunction = function isFunction(obj) {
-  return typeof obj === 'function';
-};
-
-var MDXContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createContext({});
-var withMDXComponents = function withMDXComponents(Component) {
-  return function (props) {
-    var allComponents = useMDXComponents(props.components);
-    return /*#__PURE__*/React.createElement(Component, _extends({}, props, {
-      components: allComponents
-    }));
-  };
-};
-var useMDXComponents = function useMDXComponents(components) {
-  var contextComponents = react__WEBPACK_IMPORTED_MODULE_0__.useContext(MDXContext);
-  var allComponents = contextComponents;
-
-  if (components) {
-    allComponents = isFunction(components) ? components(contextComponents) : _objectSpread2(_objectSpread2({}, contextComponents), components);
-  }
-
-  return allComponents;
-};
-var MDXProvider = function MDXProvider(props) {
-  var allComponents = useMDXComponents(props.components);
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(MDXContext.Provider, {
-    value: allComponents
-  }, props.children);
-};
-
-var TYPE_PROP_NAME = 'mdxType';
-var DEFAULTS = {
-  inlineCode: 'code',
-  wrapper: function wrapper(_ref) {
-    var children = _ref.children;
-    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(react__WEBPACK_IMPORTED_MODULE_0__.Fragment, {}, children);
-  }
-};
-var MDXCreateElement = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.forwardRef(function (props, ref) {
-  var propComponents = props.components,
-      mdxType = props.mdxType,
-      originalType = props.originalType,
-      parentName = props.parentName,
-      etc = _objectWithoutProperties(props, ["components", "mdxType", "originalType", "parentName"]);
-
-  var components = useMDXComponents(propComponents);
-  var type = mdxType;
-  var Component = components["".concat(parentName, ".").concat(type)] || components[type] || DEFAULTS[type] || originalType;
-
-  if (propComponents) {
-    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2(_objectSpread2({
-      ref: ref
-    }, etc), {}, {
-      components: propComponents
-    }));
-  }
-
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Component, _objectSpread2({
-    ref: ref
-  }, etc));
-});
-MDXCreateElement.displayName = 'MDXCreateElement';
-function createElement (type, props) {
-  var args = arguments;
-  var mdxType = props && props.mdxType;
-
-  if (typeof type === 'string' || mdxType) {
-    var argsLength = args.length;
-    var createElementArgArray = new Array(argsLength);
-    createElementArgArray[0] = MDXCreateElement;
-    var newProps = {};
-
-    for (var key in props) {
-      if (hasOwnProperty.call(props, key)) {
-        newProps[key] = props[key];
-      }
-    }
-
-    newProps.originalType = type;
-    newProps[TYPE_PROP_NAME] = typeof type === 'string' ? type : mdxType;
-    createElementArgArray[1] = newProps;
-
-    for (var i = 2; i < argsLength; i++) {
-      createElementArgArray[i] = args[i];
-    }
-
-    return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, createElementArgArray);
-  }
-
-  return react__WEBPACK_IMPORTED_MODULE_0__.createElement.apply(null, args);
-}
-
-
-
-
-/***/ }),
-
-/***/ 90278:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "AdaptiveDpr": () => (/* reexport */ AdaptiveDpr),
-  "AdaptiveEvents": () => (/* reexport */ AdaptiveEvents),
-  "ArcballControls": () => (/* reexport */ ArcballControls_ArcballControls),
-  "Backdrop": () => (/* reexport */ Backdrop),
-  "BakeShadows": () => (/* reexport */ BakeShadows),
-  "Billboard": () => (/* reexport */ Billboard),
-  "Bounds": () => (/* reexport */ Bounds),
-  "Box": () => (/* reexport */ Box),
-  "CameraShake": () => (/* reexport */ CameraShake),
-  "Center": () => (/* reexport */ Center),
-  "Circle": () => (/* reexport */ Circle),
-  "Clone": () => (/* reexport */ Clone),
-  "Cloud": () => (/* reexport */ Cloud),
-  "ComputedAttribute": () => (/* reexport */ ComputedAttribute),
-  "Cone": () => (/* reexport */ Cone),
-  "ContactShadows": () => (/* reexport */ ContactShadows),
-  "CubeCamera": () => (/* reexport */ CubeCamera),
-  "CubicBezierLine": () => (/* reexport */ CubicBezierLine),
-  "CurveModifier": () => (/* reexport */ CurveModifier_CurveModifier),
-  "CycleRaycast": () => (/* reexport */ CycleRaycast),
-  "Cylinder": () => (/* reexport */ Cylinder),
-  "Detailed": () => (/* reexport */ Detailed),
-  "DeviceOrientationControls": () => (/* reexport */ DeviceOrientationControls_DeviceOrientationControls),
-  "Dodecahedron": () => (/* reexport */ Dodecahedron),
-  "Edges": () => (/* reexport */ Edges),
-  "Effects": () => (/* reexport */ Effects),
-  "Environment": () => (/* reexport */ Environment),
-  "EnvironmentCube": () => (/* reexport */ EnvironmentCube),
-  "EnvironmentMap": () => (/* reexport */ EnvironmentMap),
-  "EnvironmentPortal": () => (/* reexport */ EnvironmentPortal),
-  "Extrude": () => (/* reexport */ Extrude),
-  "FirstPersonControls": () => (/* reexport */ FirstPersonControls_FirstPersonControls),
-  "Float": () => (/* reexport */ Float),
-  "FlyControls": () => (/* reexport */ FlyControls_FlyControls),
-  "GizmoHelper": () => (/* reexport */ GizmoHelper),
-  "GizmoViewcube": () => (/* reexport */ GizmoViewcube),
-  "GizmoViewport": () => (/* reexport */ GizmoViewport),
-  "GradientTexture": () => (/* reexport */ GradientTexture),
-  "Html": () => (/* reexport */ Html),
-  "Icosahedron": () => (/* reexport */ Icosahedron),
-  "Image": () => (/* reexport */ Image),
-  "Instance": () => (/* reexport */ Instance),
-  "Instances": () => (/* reexport */ Instances),
-  "IsObject": () => (/* reexport */ IsObject),
-  "Lathe": () => (/* reexport */ Lathe),
-  "Lightformer": () => (/* reexport */ Lightformer),
-  "Line": () => (/* reexport */ Line),
-  "Loader": () => (/* reexport */ Loader),
-  "MapControls": () => (/* reexport */ MapControls),
-  "Merged": () => (/* reexport */ Merged),
-  "MeshDistortMaterial": () => (/* reexport */ MeshDistortMaterial),
-  "MeshReflectorMaterial": () => (/* reexport */ MeshReflectorMaterial_MeshReflectorMaterial),
-  "MeshWobbleMaterial": () => (/* reexport */ MeshWobbleMaterial),
-  "Octahedron": () => (/* reexport */ Octahedron),
-  "OrbitControls": () => (/* reexport */ OrbitControls_OrbitControls),
-  "OrthographicCamera": () => (/* reexport */ OrthographicCamera),
-  "PerspectiveCamera": () => (/* reexport */ PerspectiveCamera),
-  "Plane": () => (/* reexport */ Plane),
-  "Point": () => (/* reexport */ Point),
-  "PointMaterial": () => (/* reexport */ PointMaterial),
-  "PointMaterialImpl": () => (/* reexport */ PointMaterialImpl),
-  "PointerLockControls": () => (/* reexport */ PointerLockControls_PointerLockControls),
-  "Points": () => (/* reexport */ Points),
-  "PointsBuffer": () => (/* reexport */ PointsBuffer),
-  "Polyhedron": () => (/* reexport */ Polyhedron),
-  "PositionalAudio": () => (/* reexport */ PositionalAudio),
-  "Preload": () => (/* reexport */ Preload),
-  "PresentationControls": () => (/* reexport */ PresentationControls),
-  "QuadraticBezierLine": () => (/* reexport */ QuadraticBezierLine),
-  "Reflector": () => (/* reexport */ Reflector),
-  "Ring": () => (/* reexport */ Ring),
-  "RoundedBox": () => (/* reexport */ RoundedBox),
-  "Sampler": () => (/* reexport */ Sampler),
-  "ScreenQuad": () => (/* reexport */ ScreenQuad),
-  "Scroll": () => (/* reexport */ Scroll),
-  "ScrollControls": () => (/* reexport */ ScrollControls),
-  "Segment": () => (/* reexport */ Segment),
-  "Segments": () => (/* reexport */ Segments),
-  "Select": () => (/* reexport */ Select),
-  "Shadow": () => (/* reexport */ Shadow),
-  "Sky": () => (/* reexport */ Sky_Sky),
-  "Sphere": () => (/* reexport */ Sphere),
-  "SpotLight": () => (/* reexport */ SpotLight),
-  "Stage": () => (/* reexport */ Stage),
-  "Stars": () => (/* reexport */ Stars),
-  "Stats": () => (/* reexport */ Stats),
-  "Tetrahedron": () => (/* reexport */ Tetrahedron),
-  "Text": () => (/* reexport */ Text_Text),
-  "Torus": () => (/* reexport */ Torus),
-  "TorusKnot": () => (/* reexport */ TorusKnot),
-  "TrackballControls": () => (/* reexport */ TrackballControls_TrackballControls),
-  "Trail": () => (/* reexport */ Trail),
-  "TransformControls": () => (/* reexport */ TransformControls_TransformControls),
-  "Tube": () => (/* reexport */ Tube),
-  "calcPosFromAngles": () => (/* reexport */ calcPosFromAngles),
-  "isWebGL2Available": () => (/* reexport */ isWebGL2Available),
-  "meshBounds": () => (/* reexport */ meshBounds),
-  "shaderMaterial": () => (/* reexport */ shaderMaterial),
-  "softShadows": () => (/* reexport */ softShadows),
-  "useAnimations": () => (/* reexport */ useAnimations),
-  "useAspect": () => (/* reexport */ useAspect),
-  "useBVH": () => (/* reexport */ useBVH),
-  "useBounds": () => (/* reexport */ useBounds),
-  "useBoxProjectedEnv": () => (/* reexport */ useBoxProjectedEnv),
-  "useCamera": () => (/* reexport */ useCamera),
-  "useContextBridge": () => (/* reexport */ useContextBridge),
-  "useCubeTexture": () => (/* reexport */ useCubeTexture),
-  "useCursor": () => (/* reexport */ useCursor),
-  "useDepthBuffer": () => (/* reexport */ useDepthBuffer),
-  "useDetectGPU": () => (/* reexport */ useDetectGPU),
-  "useFBO": () => (/* reexport */ useFBO),
-  "useFBX": () => (/* reexport */ useFBX),
-  "useGLTF": () => (/* reexport */ useGLTF),
-  "useGizmoContext": () => (/* reexport */ useGizmoContext),
-  "useHelper": () => (/* reexport */ useHelper),
-  "useIntersect": () => (/* reexport */ useIntersect),
-  "useKTX2": () => (/* reexport */ useKTX2),
-  "useMatcapTexture": () => (/* reexport */ useMatcapTexture),
-  "useNormalTexture": () => (/* reexport */ useNormalTexture),
-  "useProgress": () => (/* reexport */ useProgress),
-  "useScroll": () => (/* reexport */ useScroll),
-  "useSelect": () => (/* reexport */ useSelect),
-  "useTexture": () => (/* reexport */ useTexture),
-  "useTrail": () => (/* reexport */ useTrail)
-});
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/node_modules/@babel/runtime/helpers/esm/extends.js
-function _extends() {
-  _extends = Object.assign ? Object.assign.bind() : function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-    return target;
-  };
-  return _extends.apply(this, arguments);
-}
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/react-dom/index.js
-var react_dom = __webpack_require__(73935);
-// EXTERNAL MODULE: ./node_modules/three/build/three.module.js
-var three_module = __webpack_require__(99477);
-// EXTERNAL MODULE: ./node_modules/@react-three/fiber/dist/react-three-fiber.esm.js + 2 modules
-var react_three_fiber_esm = __webpack_require__(64232);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/web/Html.js
-
-
-
-
-
-
-const v1 = new three_module.Vector3();
-const v2 = new three_module.Vector3();
-const v3 = new three_module.Vector3();
-
-function defaultCalculatePosition(el, camera, size) {
-  const objectPos = v1.setFromMatrixPosition(el.matrixWorld);
-  objectPos.project(camera);
-  const widthHalf = size.width / 2;
-  const heightHalf = size.height / 2;
-  return [objectPos.x * widthHalf + widthHalf, -(objectPos.y * heightHalf) + heightHalf];
-}
-
-function isObjectBehindCamera(el, camera) {
-  const objectPos = v1.setFromMatrixPosition(el.matrixWorld);
-  const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);
-  const deltaCamObj = objectPos.sub(cameraPos);
-  const camDir = camera.getWorldDirection(v3);
-  return deltaCamObj.angleTo(camDir) > Math.PI / 2;
-}
-
-function isObjectVisible(el, camera, raycaster, occlude) {
-  const elPos = v1.setFromMatrixPosition(el.matrixWorld);
-  const screenPos = elPos.clone();
-  screenPos.project(camera);
-  raycaster.setFromCamera(screenPos, camera);
-  const intersects = raycaster.intersectObjects(occlude, true);
-
-  if (intersects.length) {
-    const intersectionDistance = intersects[0].distance;
-    const pointDistance = elPos.distanceTo(raycaster.ray.origin);
-    return pointDistance < intersectionDistance;
-  }
-
-  return true;
-}
-
-function objectScale(el, camera) {
-  if (camera instanceof three_module.OrthographicCamera) {
-    return camera.zoom;
-  } else if (camera instanceof three_module.PerspectiveCamera) {
-    const objectPos = v1.setFromMatrixPosition(el.matrixWorld);
-    const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);
-    const vFOV = camera.fov * Math.PI / 180;
-    const dist = objectPos.distanceTo(cameraPos);
-    const scaleFOV = 2 * Math.tan(vFOV / 2) * dist;
-    return 1 / scaleFOV;
-  } else {
-    return 1;
-  }
-}
-
-function objectZIndex(el, camera, zIndexRange) {
-  if (camera instanceof three_module.PerspectiveCamera || camera instanceof three_module.OrthographicCamera) {
-    const objectPos = v1.setFromMatrixPosition(el.matrixWorld);
-    const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);
-    const dist = objectPos.distanceTo(cameraPos);
-    const A = (zIndexRange[1] - zIndexRange[0]) / (camera.far - camera.near);
-    const B = zIndexRange[1] - A * camera.far;
-    return Math.round(A * dist + B);
-  }
-
-  return undefined;
-}
-
-const epsilon = value => Math.abs(value) < 1e-10 ? 0 : value;
-
-function getCSSMatrix(matrix, multipliers, prepend = '') {
-  let matrix3d = 'matrix3d(';
-
-  for (let i = 0; i !== 16; i++) {
-    matrix3d += epsilon(multipliers[i] * matrix.elements[i]) + (i !== 15 ? ',' : ')');
-  }
-
-  return prepend + matrix3d;
-}
-
-const getCameraCSSMatrix = (multipliers => {
-  return matrix => getCSSMatrix(matrix, multipliers);
-})([1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1]);
-
-const getObjectCSSMatrix = (scaleMultipliers => {
-  return (matrix, factor) => getCSSMatrix(matrix, scaleMultipliers(factor), 'translate(-50%,-50%)');
-})(f => [1 / f, 1 / f, 1 / f, 1, -1 / f, -1 / f, -1 / f, -1, 1 / f, 1 / f, 1 / f, 1, 1, 1, 1, 1]);
-
-const Html = /*#__PURE__*/react.forwardRef(({
-  children,
-  eps = 0.001,
-  style,
-  className,
-  prepend,
-  center,
-  fullscreen,
-  portal,
-  distanceFactor,
-  sprite = false,
-  transform = false,
-  occlude,
-  onOcclude,
-  zIndexRange = [16777271, 0],
-  calculatePosition = defaultCalculatePosition,
-  as = 'div',
-  wrapperClass,
-  pointerEvents = 'auto',
-  ...props
-}, ref) => {
-  var _portal$current;
-
-  const gl = (0,react_three_fiber_esm.useThree)(({
-    gl
-  }) => gl);
-  const camera = (0,react_three_fiber_esm.useThree)(({
-    camera
-  }) => camera);
-  const scene = (0,react_three_fiber_esm.useThree)(({
-    scene
-  }) => scene);
-  const size = (0,react_three_fiber_esm.useThree)(({
-    size
-  }) => size);
-  const raycaster = (0,react_three_fiber_esm.useThree)(({
-    raycaster
-  }) => raycaster);
-  const [el] = react.useState(() => document.createElement(as));
-  const group = react.useRef(null);
-  const oldZoom = react.useRef(0);
-  const oldPosition = react.useRef([0, 0]);
-  const transformOuterRef = react.useRef(null);
-  const transformInnerRef = react.useRef(null);
-  const target = (_portal$current = portal == null ? void 0 : portal.current) !== null && _portal$current !== void 0 ? _portal$current : gl.domElement.parentNode;
-  react.useEffect(() => {
-    if (group.current) {
-      scene.updateMatrixWorld();
-
-      if (transform) {
-        el.style.cssText = `position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;`;
-      } else {
-        const vec = calculatePosition(group.current, camera, size);
-        el.style.cssText = `position:absolute;top:0;left:0;transform:translate3d(${vec[0]}px,${vec[1]}px,0);transform-origin:0 0;`;
-      }
-
-      if (target) {
-        if (prepend) target.prepend(el);else target.appendChild(el);
-      }
-
-      return () => {
-        if (target) target.removeChild(el);
-        react_dom.unmountComponentAtNode(el);
-      };
-    }
-  }, [target, transform]);
-  react.useLayoutEffect(() => {
-    if (wrapperClass) el.className = wrapperClass;
-  }, [wrapperClass]);
-  const styles = react.useMemo(() => {
-    if (transform) {
-      return {
-        position: 'absolute',
-        top: 0,
-        left: 0,
-        width: size.width,
-        height: size.height,
-        transformStyle: 'preserve-3d',
-        pointerEvents: 'none'
-      };
-    } else {
-      return {
-        position: 'absolute',
-        transform: center ? 'translate3d(-50%,-50%,0)' : 'none',
-        ...(fullscreen && {
-          top: -size.height / 2,
-          left: -size.width / 2,
-          width: size.width,
-          height: size.height
-        }),
-        ...style
-      };
-    }
-  }, [style, center, fullscreen, size, transform]);
-  const transformInnerStyles = react.useMemo(() => ({
-    position: 'absolute',
-    pointerEvents
-  }), [pointerEvents]);
-  react.useLayoutEffect(() => {
-    if (transform) {
-      react_dom.render( /*#__PURE__*/react.createElement("div", {
-        ref: transformOuterRef,
-        style: styles
-      }, /*#__PURE__*/react.createElement("div", {
-        ref: transformInnerRef,
-        style: transformInnerStyles
-      }, /*#__PURE__*/react.createElement("div", {
-        ref: ref,
-        className: className,
-        style: style,
-        children: children
-      }))), el);
-    } else {
-      react_dom.render( /*#__PURE__*/react.createElement("div", {
-        ref: ref,
-        style: styles,
-        className: className,
-        children: children
-      }), el);
-    }
-  });
-  const visible = react.useRef(true);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    if (group.current) {
-      camera.updateMatrixWorld();
-      group.current.updateWorldMatrix(true, false);
-      const vec = transform ? oldPosition.current : calculatePosition(group.current, camera, size);
-
-      if (transform || Math.abs(oldZoom.current - camera.zoom) > eps || Math.abs(oldPosition.current[0] - vec[0]) > eps || Math.abs(oldPosition.current[1] - vec[1]) > eps) {
-        const isBehindCamera = isObjectBehindCamera(group.current, camera);
-        let raytraceTarget = false;
-
-        if (typeof occlude === 'boolean') {
-          if (occlude === true) {
-            raytraceTarget = [scene];
-          }
-        } else if (Array.isArray(occlude)) {
-          raytraceTarget = occlude.map(item => item.current);
-        }
-
-        const previouslyVisible = visible.current;
-
-        if (raytraceTarget) {
-          const isvisible = isObjectVisible(group.current, camera, raycaster, raytraceTarget);
-          visible.current = isvisible && !isBehindCamera;
-        } else {
-          visible.current = !isBehindCamera;
-        }
-
-        if (previouslyVisible !== visible.current) {
-          if (onOcclude) onOcclude(!visible.current);else el.style.display = visible.current ? 'block' : 'none';
-        }
-
-        el.style.zIndex = `${objectZIndex(group.current, camera, zIndexRange)}`;
-
-        if (transform) {
-          const [widthHalf, heightHalf] = [size.width / 2, size.height / 2];
-          const fov = camera.projectionMatrix.elements[5] * heightHalf;
-          const {
-            isOrthographicCamera,
-            top,
-            left,
-            bottom,
-            right
-          } = camera;
-          const cameraMatrix = getCameraCSSMatrix(camera.matrixWorldInverse);
-          const cameraTransform = isOrthographicCamera ? `scale(${fov})translate(${epsilon(-(right + left) / 2)}px,${epsilon((top + bottom) / 2)}px)` : `translateZ(${fov}px)`;
-          let matrix = group.current.matrixWorld;
-
-          if (sprite) {
-            matrix = camera.matrixWorldInverse.clone().transpose().copyPosition(matrix).scale(group.current.scale);
-            matrix.elements[3] = matrix.elements[7] = matrix.elements[11] = 0;
-            matrix.elements[15] = 1;
-          }
-
-          el.style.width = size.width + 'px';
-          el.style.height = size.height + 'px';
-          el.style.perspective = isOrthographicCamera ? '' : `${fov}px`;
-
-          if (transformOuterRef.current && transformInnerRef.current) {
-            transformOuterRef.current.style.transform = `${cameraTransform}${cameraMatrix}translate(${widthHalf}px,${heightHalf}px)`;
-            transformInnerRef.current.style.transform = getObjectCSSMatrix(matrix, 1 / ((distanceFactor || 10) / 400));
-          }
-        } else {
-          const scale = distanceFactor === undefined ? 1 : objectScale(group.current, camera) * distanceFactor;
-          el.style.transform = `translate3d(${vec[0]}px,${vec[1]}px,0) scale(${scale})`;
-        }
-
-        oldPosition.current = vec;
-        oldZoom.current = camera.zoom;
-      }
-    }
-  });
-  return /*#__PURE__*/react.createElement("group", _extends({}, props, {
-    ref: group
-  }));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/web/CycleRaycast.js
-
-
-
-function CycleRaycast({
-  onChanged,
-  portal,
-  preventDefault = true,
-  scroll = true,
-  keyCode = 9
-}) {
-  const cycle = react.useRef(0);
-  const raycaster = (0,react_three_fiber_esm.useThree)(state => state.raycaster);
-  const get = (0,react_three_fiber_esm.useThree)(state => state.get);
-  const gl = (0,react_three_fiber_esm.useThree)(state => state.gl);
-  react.useEffect(() => {
-    var _portal$current;
-
-    let hits = [];
-    let lastEvent = undefined;
-    const prev = raycaster.filter;
-    const target = (_portal$current = portal == null ? void 0 : portal.current) !== null && _portal$current !== void 0 ? _portal$current : gl.domElement.parentNode; // Render custom status
-
-    const renderStatus = () => target && onChanged && onChanged(hits, Math.round(cycle.current) % hits.length); // Overwrite the raycasters custom filter (this only exists in r3f)
-
-
-    raycaster.filter = (intersections, state) => {
-      // Reset cycle when the intersections change
-      let clone = [...intersections];
-
-      if (clone.length !== hits.length || !hits.every(hit => clone.map(e => e.object.uuid).includes(hit.object.uuid))) {
-        cycle.current = 0;
-        hits = clone;
-        renderStatus();
-      } // Run custom filter if there is one
-
-
-      if (prev) clone = prev(clone, state); // Cycle through the actual raycast intersects
-
-      for (let i = 0; i < Math.round(cycle.current) % clone.length; i++) {
-        const first = clone.shift();
-        clone = [...clone, first];
-      }
-
-      return clone;
-    }; // Cycle, refresh events and render status
-
-
-    const refresh = fn => {
-      var _get$events$handlers, _get$events$handlers2;
-
-      cycle.current = fn(cycle.current); // Cancel hovered elements and fake a pointer-move
-
-      (_get$events$handlers = get().events.handlers) == null ? void 0 : _get$events$handlers.onPointerCancel(undefined);
-      (_get$events$handlers2 = get().events.handlers) == null ? void 0 : _get$events$handlers2.onPointerMove(lastEvent);
-      renderStatus();
-    }; // Key events
-
-
-    const tabEvent = event => {
-      if (event.keyCode || event.which === keyCode) {
-        if (preventDefault) event.preventDefault();
-        if (hits.length > 1) refresh(current => current + 1);
-      }
-    }; // Wheel events
-
-
-    const wheelEvent = event => {
-      if (preventDefault) event.preventDefault();
-      let delta = 0;
-      if (!event) event = window.event;
-      if (event.wheelDelta) delta = event.wheelDelta / 120;else if (event.detail) delta = -event.detail / 3;
-      if (hits.length > 1) refresh(current => Math.abs(current - delta));
-    }; // Catch last move event and position custom status
-
-
-    const moveEvent = event => lastEvent = event;
-
-    document.addEventListener('pointermove', moveEvent, {
-      passive: true
-    });
-    if (scroll) document.addEventListener('wheel', wheelEvent);
-    if (keyCode !== undefined) document.addEventListener('keydown', tabEvent);
-    return () => {
-      // Clean up
-      raycaster.filter = prev;
-      if (keyCode !== undefined) document.removeEventListener('keydown', tabEvent);
-      if (scroll) document.removeEventListener('wheel', wheelEvent);
-      document.removeEventListener('pointermove', moveEvent);
-    };
-  }, [gl, get, raycaster, preventDefault, scroll, keyCode]);
-  return null;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/web/useCursor.js
-
-
-function useCursor(hovered, onPointerOver = 'pointer', onPointerOut = 'auto') {
-  react.useEffect(() => {
-    if (hovered) {
-      document.body.style.cursor = onPointerOver;
-      return () => void (document.body.style.cursor = onPointerOut);
-    }
-  }, [hovered]);
-}
-
-
-
-// EXTERNAL MODULE: ./node_modules/zustand/esm/index.js
-var esm = __webpack_require__(14671);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useProgress.js
-
-
-
-let saveLastTotalLoaded = 0;
-const useProgress = (0,esm/* default */.Z)(set => {
-  three_module.DefaultLoadingManager.onStart = (item, loaded, total) => {
-    set({
-      active: true,
-      item,
-      loaded,
-      total,
-      progress: (loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded) * 100
-    });
-  };
-
-  three_module.DefaultLoadingManager.onLoad = () => {
-    set({
-      active: false
-    });
-  };
-
-  three_module.DefaultLoadingManager.onError = item => set(state => ({
-    errors: [...state.errors, item]
-  }));
-
-  three_module.DefaultLoadingManager.onProgress = (item, loaded, total) => {
-    if (loaded === total) {
-      saveLastTotalLoaded = total;
-    }
-
-    set({
-      active: true,
-      item,
-      loaded,
-      total,
-      progress: (loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded) * 100 || 100
-    });
-  };
-
-  return {
-    errors: [],
-    active: false,
-    progress: 0,
-    item: '',
-    loaded: 0,
-    total: 0
-  };
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/web/Loader.js
-
-
-
-const defaultDataInterpolation = p => `Loading ${p.toFixed(2)}%`;
-
-function Loader({
-  containerStyles,
-  innerStyles,
-  barStyles,
-  dataStyles,
-  dataInterpolation = defaultDataInterpolation,
-  initialState = active => active
-}) {
-  const {
-    active,
-    progress
-  } = useProgress();
-  const progressRef = react.useRef(0);
-  const rafRef = react.useRef(0);
-  const progressSpanRef = react.useRef(null);
-  const [shown, setShown] = react.useState(initialState(active));
-  react.useEffect(() => {
-    let t;
-    if (active !== shown) t = setTimeout(() => setShown(active), 300);
-    return () => clearTimeout(t);
-  }, [shown, active]);
-  const updateProgress = react.useCallback(() => {
-    if (!progressSpanRef.current) return;
-    progressRef.current += (progress - progressRef.current) / 2;
-    if (progressRef.current > 0.95 * progress || progress === 100) progressRef.current = progress;
-    progressSpanRef.current.innerText = dataInterpolation(progressRef.current);
-    if (progressRef.current < progress) rafRef.current = requestAnimationFrame(updateProgress);
-  }, [dataInterpolation, progress]);
-  react.useEffect(() => {
-    updateProgress();
-    return () => cancelAnimationFrame(rafRef.current);
-  }, [updateProgress]);
-  return shown ? /*#__PURE__*/react.createElement("div", {
-    style: { ...styles.container,
-      opacity: active ? 1 : 0,
-      ...containerStyles
-    }
-  }, /*#__PURE__*/react.createElement("div", null, /*#__PURE__*/react.createElement("div", {
-    style: { ...styles.inner,
-      ...innerStyles
-    }
-  }, /*#__PURE__*/react.createElement("div", {
-    style: { ...styles.bar,
-      transform: `scaleX(${progress / 100})`,
-      ...barStyles
-    }
-  }), /*#__PURE__*/react.createElement("span", {
-    ref: progressSpanRef,
-    style: { ...styles.data,
-      ...dataStyles
-    }
-  })))) : null;
-}
-const styles = {
-  container: {
-    position: 'absolute',
-    top: 0,
-    left: 0,
-    width: '100%',
-    height: '100%',
-    background: '#171717',
-    display: 'flex',
-    alignItems: 'center',
-    justifyContent: 'center',
-    transition: 'opacity 300ms ease',
-    zIndex: 1000
-  },
-  inner: {
-    width: 100,
-    height: 3,
-    background: '#272727',
-    textAlign: 'center'
-  },
-  bar: {
-    height: 3,
-    width: '100%',
-    background: 'white',
-    transition: 'transform 200ms',
-    transformOrigin: 'left center'
-  },
-  data: {
-    display: 'inline-block',
-    position: 'relative',
-    fontVariantNumeric: 'tabular-nums',
-    marginTop: '0.8em',
-    color: '#f0f0f0',
-    fontSize: '0.6em',
-    fontFamily: `-apple-system, BlinkMacSystemFont, "Inter", "Segoe UI", "Helvetica Neue", Helvetica, Arial, Roboto, Ubuntu, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"`,
-    whiteSpace: 'nowrap'
-  }
-};
-
-
-
-;// CONCATENATED MODULE: ./node_modules/react-merge-refs/dist/react-merge-refs.esm.js
-function mergeRefs(refs) {
-  return function (value) {
-    refs.forEach(function (ref) {
-      if (typeof ref === "function") {
-        ref(value);
-      } else if (ref != null) {
-        ref.current = value;
-      }
-    });
-  };
-}
-
-/* harmony default export */ const react_merge_refs_esm = (mergeRefs);
-//# sourceMappingURL=react-merge-refs.esm.js.map
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/web/ScrollControls.js
-
-
-
-
-
-
-
-const context = /*#__PURE__*/react.createContext(null);
-function useScroll() {
-  return react.useContext(context);
-}
-function ScrollControls({
-  eps = 0.00001,
-  enabled = true,
-  infinite,
-  horizontal,
-  pages = 1,
-  distance = 1,
-  damping = 4,
-  style = {},
-  children
-}) {
-  const {
-    gl,
-    size,
-    invalidate,
-    events,
-    raycaster
-  } = (0,react_three_fiber_esm.useThree)();
-  const [el] = react.useState(() => document.createElement('div'));
-  const [fill] = react.useState(() => document.createElement('div'));
-  const [fixed] = react.useState(() => document.createElement('div'));
-  const target = gl.domElement.parentNode;
-  const scroll = react.useRef(0);
-  const state = react.useMemo(() => {
-    const state = {
-      el,
-      eps,
-      fill,
-      fixed,
-      horizontal,
-      damping,
-      offset: 0,
-      delta: 0,
-      scroll,
-      pages,
-
-      // 0-1 for a range between from -> from + distance
-      range(from, distance, margin = 0) {
-        const start = from - margin;
-        const end = start + distance + margin * 2;
-        return this.offset < start ? 0 : this.offset > end ? 1 : (this.offset - start) / (end - start);
-      },
-
-      // 0-1-0 for a range between from -> from + distance
-      curve(from, distance, margin = 0) {
-        return Math.sin(this.range(from, distance, margin) * Math.PI);
-      },
-
-      // true/false for a range between from -> from + distance
-      visible(from, distance, margin = 0) {
-        const start = from - margin;
-        const end = start + distance + margin * 2;
-        return this.offset >= start && this.offset <= end;
-      }
-
-    };
-    return state;
-  }, [eps, damping, horizontal, pages]);
-  react.useEffect(() => {
-    el.style.position = 'absolute';
-    el.style.width = '100%';
-    el.style.height = '100%';
-    el.style[horizontal ? 'overflowX' : 'overflowY'] = 'auto';
-    el.style[horizontal ? 'overflowY' : 'overflowX'] = 'hidden';
-    el.style.top = '0px';
-    el.style.left = '0px';
-
-    for (const key in style) {
-      el.style[key] = style[key];
-    }
-
-    fixed.style.position = 'sticky';
-    fixed.style.top = '0px';
-    fixed.style.left = '0px';
-    fixed.style.width = '100%';
-    fixed.style.height = '100%';
-    fixed.style.overflow = 'hidden';
-    el.appendChild(fixed);
-    fill.style.height = horizontal ? '100%' : `${pages * distance * 100}%`;
-    fill.style.width = horizontal ? `${pages * distance * 100}%` : '100%';
-    fill.style.pointerEvents = 'none';
-    el.appendChild(fill);
-    target.appendChild(el); // Init scroll one pixel in to allow upward/leftward scroll
-
-    el[horizontal ? 'scrollLeft' : 'scrollTop'] = 1;
-    const oldTarget = events.connected || gl.domElement;
-    requestAnimationFrame(() => events.connect == null ? void 0 : events.connect(el));
-    const oldCompute = raycaster.computeOffsets;
-
-    raycaster.computeOffsets = ({
-      clientX,
-      clientY
-    }) => ({
-      offsetX: clientX - target.offsetLeft,
-      offsetY: clientY - target.offsetTop
-    });
-
-    return () => {
-      target.removeChild(el);
-      raycaster.computeOffsets = oldCompute;
-      events.connect == null ? void 0 : events.connect(oldTarget);
-    };
-  }, [pages, distance, horizontal, el, fill, fixed, target]);
-  react.useEffect(() => {
-    const containerLength = size[horizontal ? 'width' : 'height'];
-    const scrollLength = el[horizontal ? 'scrollWidth' : 'scrollHeight'];
-    const scrollThreshold = scrollLength - containerLength;
-    let current = 0;
-    let disableScroll = true;
-    let firstRun = true;
-
-    const onScroll = () => {
-      // Prevent first scroll because it is indirectly caused by the one pixel offset
-      if (!enabled || firstRun) return;
-      invalidate();
-      current = el[horizontal ? 'scrollLeft' : 'scrollTop'];
-      scroll.current = current / scrollThreshold;
-
-      if (infinite) {
-        if (!disableScroll) {
-          if (current >= scrollThreshold) {
-            const damp = 1 - state.offset;
-            el[horizontal ? 'scrollLeft' : 'scrollTop'] = 1;
-            scroll.current = state.offset = -damp;
-            disableScroll = true;
-          } else if (current <= 0) {
-            const damp = 1 + state.offset;
-            el[horizontal ? 'scrollLeft' : 'scrollTop'] = scrollLength;
-            scroll.current = state.offset = damp;
-            disableScroll = true;
-          }
-        }
-
-        if (disableScroll) setTimeout(() => disableScroll = false, 40);
-      }
-    };
-
-    el.addEventListener('scroll', onScroll, {
-      passive: true
-    });
-    requestAnimationFrame(() => firstRun = false);
-
-    const onWheel = e => el.scrollLeft += e.deltaY / 2;
-
-    if (horizontal) el.addEventListener('wheel', onWheel, {
-      passive: true
-    });
-    return () => {
-      el.removeEventListener('scroll', onScroll);
-      if (horizontal) el.removeEventListener('wheel', onWheel);
-    };
-  }, [el, size, infinite, state, invalidate, horizontal, enabled]);
-  let last = 0;
-  (0,react_three_fiber_esm.useFrame)((_, delta) => {
-    state.offset = three_module.MathUtils.damp(last = state.offset, scroll.current, damping, delta);
-    state.delta = three_module.MathUtils.damp(state.delta, Math.abs(last - state.offset), damping, delta);
-    if (state.delta > eps) invalidate();
-  });
-  return /*#__PURE__*/react.createElement(context.Provider, {
-    value: state
-  }, children);
-}
-const ScrollCanvas = /*#__PURE__*/react.forwardRef(({
-  children
-}, ref) => {
-  const group = react.useRef(null);
-  const state = useScroll();
-  const {
-    width,
-    height
-  } = (0,react_three_fiber_esm.useThree)(state => state.viewport);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    group.current.position.x = state.horizontal ? -width * (state.pages - 1) * state.offset : 0;
-    group.current.position.y = state.horizontal ? 0 : height * (state.pages - 1) * state.offset;
-  });
-  return /*#__PURE__*/react.createElement("group", {
-    ref: react_merge_refs_esm([ref, group])
-  }, children);
-});
-const ScrollHtml = /*#__PURE__*/react.forwardRef(({
-  children,
-  style,
-  ...props
-}, ref) => {
-  const state = useScroll();
-  const group = react.useRef(null);
-  const {
-    width,
-    height
-  } = (0,react_three_fiber_esm.useThree)(state => state.size);
-  const fiberState = react.useContext(react_three_fiber_esm.context);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    if (state.delta > state.eps) {
-      group.current.style.transform = `translate3d(${state.horizontal ? -width * (state.pages - 1) * state.offset : 0}px,${state.horizontal ? 0 : height * (state.pages - 1) * -state.offset}px,0)`;
-    }
-  });
-  react_dom.render( /*#__PURE__*/react.createElement("div", _extends({
-    ref: react_merge_refs_esm([ref, group]),
-    style: { ...style,
-      position: 'absolute',
-      top: 0,
-      left: 0,
-      willChange: 'transform'
-    }
-  }, props), /*#__PURE__*/react.createElement(context.Provider, {
-    value: state
-  }, /*#__PURE__*/react.createElement(react_three_fiber_esm.context.Provider, {
-    value: fiberState
-  }, children))), state.fixed);
-  return null;
-});
-const Scroll = /*#__PURE__*/react.forwardRef(({
-  html,
-  ...props
-}, ref) => {
-  const El = html ? ScrollHtml : ScrollCanvas;
-  return /*#__PURE__*/react.createElement(El, _extends({
-    ref: ref
-  }, props));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-spring/rafz/dist/esm/index.js
-var f=r(),esm_n=e=>c(e,f),m=r();esm_n.write=e=>c(e,m);var d=r();esm_n.onStart=e=>c(e,d);var h=r();esm_n.onFrame=e=>c(e,h);var p=r();esm_n.onFinish=e=>c(e,p);var i=[];esm_n.setTimeout=(e,t)=>{let a=esm_n.now()+t,o=()=>{let F=i.findIndex(z=>z.cancel==o);~F&&i.splice(F,1),u-=~F?1:0},s={time:a,handler:e,cancel:o};return i.splice(w(a),0,s),u+=1,v(),s};var w=e=>~(~i.findIndex(t=>t.time>e)||~i.length);esm_n.cancel=e=>{d.delete(e),h.delete(e),p.delete(e),f.delete(e),m.delete(e)};esm_n.sync=e=>{T=!0,esm_n.batchedUpdates(e),T=!1};esm_n.throttle=e=>{let t;function a(){try{e(...t)}finally{t=null}}function o(...s){t=s,esm_n.onStart(a)}return o.handler=e,o.cancel=()=>{d.delete(a),t=null},o};var y=typeof window<"u"?window.requestAnimationFrame:()=>{};esm_n.use=e=>y=e;esm_n.now=typeof performance<"u"?()=>performance.now():Date.now;esm_n.batchedUpdates=e=>e();esm_n.catch=console.error;esm_n.frameLoop="always";esm_n.advance=()=>{esm_n.frameLoop!=="demand"?console.warn("Cannot call the manual advancement of rafz whilst frameLoop is not set as demand"):x()};var l=-1,u=0,T=!1;function c(e,t){T?(t.delete(e),e(0)):(t.add(e),v())}function v(){l<0&&(l=0,esm_n.frameLoop!=="demand"&&y(b))}function R(){l=-1}function b(){~l&&(y(b),esm_n.batchedUpdates(x))}function x(){let e=l;l=esm_n.now();let t=w(l);if(t&&(Q(i.splice(0,t),a=>a.handler()),u-=t),!u){R();return}d.flush(),f.flush(e?Math.min(64,l-e):16.667),h.flush(),m.flush(),p.flush()}function r(){let e=new Set,t=e;return{add(a){u+=t==e&&!e.has(a)?1:0,e.add(a)},delete(a){return u-=t==e&&e.has(a)?1:0,e.delete(a)},flush(a){t.size&&(e=new Set,u-=t.size,Q(t,o=>o(a)&&e.add(o)),u+=e.size,t=e)}}}function Q(e,t){e.forEach(a=>{try{t(a)}catch(o){esm_n.catch(o)}})}var S={count(){return u},isRunning(){return l>=0},clear(){l=-1,i=[],d=r(),f=r(),h=r(),m=r(),p=r(),u=0}};
-
-;// CONCATENATED MODULE: ./node_modules/@react-spring/shared/dist/esm/index.js
-var ze=Object.defineProperty;var Le=(e,t)=>{for(var r in t)ze(e,r,{get:t[r],enumerable:!0})};var esm_p={};Le(esm_p,{assign:()=>U,colors:()=>esm_c,createStringInterpolator:()=>k,skipAnimation:()=>ee,to:()=>J,willAdvance:()=>esm_S});function Y(){}var mt=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,configurable:!0}),esm_l={arr:Array.isArray,obj:e=>!!e&&e.constructor.name==="Object",fun:e=>typeof e=="function",str:e=>typeof e=="string",num:e=>typeof e=="number",und:e=>e===void 0};function bt(e,t){if(esm_l.arr(e)){if(!esm_l.arr(t)||e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}return e===t}var Ve=(e,t)=>e.forEach(t);function xt(e,t,r){if(esm_l.arr(e)){for(let n=0;n<e.length;n++)t.call(r,e[n],`${n}`);return}for(let n in e)e.hasOwnProperty(n)&&t.call(r,e[n],n)}var ht=e=>esm_l.und(e)?[]:esm_l.arr(e)?e:[e];function Pe(e,t){if(e.size){let r=Array.from(e);e.clear(),Ve(r,t)}}var yt=(e,...t)=>Pe(e,r=>r(...t)),esm_h=()=>typeof window>"u"||!window.navigator||/ServerSideRendering|^Deno\//.test(window.navigator.userAgent);var k,J,esm_c=null,ee=!1,esm_S=Y,U=e=>{e.to&&(J=e.to),e.now&&(esm_n.now=e.now),e.colors!==void 0&&(esm_c=e.colors),e.skipAnimation!=null&&(ee=e.skipAnimation),e.createStringInterpolator&&(k=e.createStringInterpolator),e.requestAnimationFrame&&esm_n.use(e.requestAnimationFrame),e.batchedUpdates&&(esm_n.batchedUpdates=e.batchedUpdates),e.willAdvance&&(esm_S=e.willAdvance),e.frameLoop&&(esm_n.frameLoop=e.frameLoop)};var E=new Set,esm_u=[],H=[],A=0,qe={get idle(){return!E.size&&!esm_u.length},start(e){A>e.priority?(E.add(e),esm_n.onStart($e)):(te(e),esm_n(B))},advance:B,sort(e){if(A)esm_n.onFrame(()=>qe.sort(e));else{let t=esm_u.indexOf(e);~t&&(esm_u.splice(t,1),re(e))}},clear(){esm_u=[],E.clear()}};function $e(){E.forEach(te),E.clear(),esm_n(B)}function te(e){esm_u.includes(e)||re(e)}function re(e){esm_u.splice(Ge(esm_u,t=>t.priority>e.priority),0,e)}function B(e){let t=H;for(let r=0;r<esm_u.length;r++){let n=esm_u[r];A=n.priority,n.idle||(esm_S(n),n.advance(e),n.idle||t.push(n))}return A=0,H=esm_u,H.length=0,esm_u=t,esm_u.length>0}function Ge(e,t){let r=e.findIndex(t);return r<0?e.length:r}var ne=(e,t,r)=>Math.min(Math.max(r,e),t);var It={transparent:0,aliceblue:4042850303,antiquewhite:4209760255,aqua:16777215,aquamarine:2147472639,azure:4043309055,beige:4126530815,bisque:4293182719,black:255,blanchedalmond:4293643775,blue:65535,blueviolet:2318131967,brown:2771004159,burlywood:3736635391,burntsienna:3934150143,cadetblue:1604231423,chartreuse:2147418367,chocolate:3530104575,coral:4286533887,cornflowerblue:1687547391,cornsilk:4294499583,crimson:3692313855,cyan:16777215,darkblue:35839,darkcyan:9145343,darkgoldenrod:3095792639,darkgray:2846468607,darkgreen:6553855,darkgrey:2846468607,darkkhaki:3182914559,darkmagenta:2332068863,darkolivegreen:1433087999,darkorange:4287365375,darkorchid:2570243327,darkred:2332033279,darksalmon:3918953215,darkseagreen:2411499519,darkslateblue:1211993087,darkslategray:793726975,darkslategrey:793726975,darkturquoise:13554175,darkviolet:2483082239,deeppink:4279538687,deepskyblue:12582911,dimgray:1768516095,dimgrey:1768516095,dodgerblue:512819199,firebrick:2988581631,floralwhite:4294635775,forestgreen:579543807,fuchsia:4278255615,gainsboro:3705462015,ghostwhite:4177068031,gold:4292280575,goldenrod:3668254975,gray:2155905279,green:8388863,greenyellow:2919182335,grey:2155905279,honeydew:4043305215,hotpink:4285117695,indianred:3445382399,indigo:1258324735,ivory:4294963455,khaki:4041641215,lavender:3873897215,lavenderblush:4293981695,lawngreen:2096890111,lemonchiffon:4294626815,lightblue:2916673279,lightcoral:4034953471,lightcyan:3774873599,lightgoldenrodyellow:4210742015,lightgray:3553874943,lightgreen:2431553791,lightgrey:3553874943,lightpink:4290167295,lightsalmon:4288707327,lightseagreen:548580095,lightskyblue:2278488831,lightslategray:2005441023,lightslategrey:2005441023,lightsteelblue:2965692159,lightyellow:4294959359,lime:16711935,limegreen:852308735,linen:4210091775,magenta:4278255615,maroon:2147483903,mediumaquamarine:1724754687,mediumblue:52735,mediumorchid:3126187007,mediumpurple:2473647103,mediumseagreen:1018393087,mediumslateblue:2070474495,mediumspringgreen:16423679,mediumturquoise:1221709055,mediumvioletred:3340076543,midnightblue:421097727,mintcream:4127193855,mistyrose:4293190143,moccasin:4293178879,navajowhite:4292783615,navy:33023,oldlace:4260751103,olive:2155872511,olivedrab:1804477439,orange:4289003775,orangered:4282712319,orchid:3664828159,palegoldenrod:4008225535,palegreen:2566625535,paleturquoise:2951671551,palevioletred:3681588223,papayawhip:4293907967,peachpuff:4292524543,peru:3448061951,pink:4290825215,plum:3718307327,powderblue:2967529215,purple:2147516671,rebeccapurple:1714657791,red:4278190335,rosybrown:3163525119,royalblue:1097458175,saddlebrown:2336560127,salmon:4202722047,sandybrown:4104413439,seagreen:780883967,seashell:4294307583,sienna:2689740287,silver:3233857791,skyblue:2278484991,slateblue:1784335871,slategray:1887473919,slategrey:1887473919,snow:4294638335,springgreen:16744447,steelblue:1182971135,tan:3535047935,teal:8421631,thistle:3636451583,tomato:4284696575,turquoise:1088475391,violet:4001558271,wheat:4125012991,white:4294967295,whitesmoke:4126537215,yellow:4294902015,yellowgreen:2597139199};var esm_d="[-+]?\\d*\\.?\\d+",M=esm_d+"%";function C(...e){return"\\(\\s*("+e.join(")\\s*,\\s*(")+")\\s*\\)"}var oe=new RegExp("rgb"+C(esm_d,esm_d,esm_d)),fe=new RegExp("rgba"+C(esm_d,esm_d,esm_d,esm_d)),ae=new RegExp("hsl"+C(esm_d,M,M)),ie=new RegExp("hsla"+C(esm_d,M,M,esm_d)),se=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,ue=/^#([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,le=/^#([0-9a-fA-F]{6})$/,ce=/^#([0-9a-fA-F]{8})$/;function be(e){let t;return typeof e=="number"?e>>>0===e&&e>=0&&e<=4294967295?e:null:(t=le.exec(e))?parseInt(t[1]+"ff",16)>>>0:esm_c&&esm_c[e]!==void 0?esm_c[e]:(t=oe.exec(e))?(esm_y(t[1])<<24|esm_y(t[2])<<16|esm_y(t[3])<<8|255)>>>0:(t=fe.exec(e))?(esm_y(t[1])<<24|esm_y(t[2])<<16|esm_y(t[3])<<8|me(t[4]))>>>0:(t=se.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+"ff",16)>>>0:(t=ce.exec(e))?parseInt(t[1],16)>>>0:(t=ue.exec(e))?parseInt(t[1]+t[1]+t[2]+t[2]+t[3]+t[3]+t[4]+t[4],16)>>>0:(t=ae.exec(e))?(de(pe(t[1]),z(t[2]),z(t[3]))|255)>>>0:(t=ie.exec(e))?(de(pe(t[1]),z(t[2]),z(t[3]))|me(t[4]))>>>0:null}function esm_j(e,t,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?e+(t-e)*6*r:r<1/2?t:r<2/3?e+(t-e)*(2/3-r)*6:e}function de(e,t,r){let n=r<.5?r*(1+t):r+t-r*t,f=2*r-n,o=esm_j(f,n,e+1/3),i=esm_j(f,n,e),s=esm_j(f,n,e-1/3);return Math.round(o*255)<<24|Math.round(i*255)<<16|Math.round(s*255)<<8}function esm_y(e){let t=parseInt(e,10);return t<0?0:t>255?255:t}function pe(e){return(parseFloat(e)%360+360)%360/360}function me(e){let t=parseFloat(e);return t<0?0:t>1?255:Math.round(t*255)}function z(e){let t=parseFloat(e);return t<0?0:t>100?1:t/100}function D(e){let t=be(e);if(t===null)return e;t=t||0;let r=(t&4278190080)>>>24,n=(t&16711680)>>>16,f=(t&65280)>>>8,o=(t&255)/255;return`rgba(${r}, ${n}, ${f}, ${o})`}var W=(e,t,r)=>{if(esm_l.fun(e))return e;if(esm_l.arr(e))return W({range:e,output:t,extrapolate:r});if(esm_l.str(e.output[0]))return k(e);let n=e,f=n.output,o=n.range||[0,1],i=n.extrapolateLeft||n.extrapolate||"extend",s=n.extrapolateRight||n.extrapolate||"extend",x=n.easing||(a=>a);return a=>{let F=He(a,o);return Ue(a,o[F],o[F+1],f[F],f[F+1],x,i,s,n.map)}};function Ue(e,t,r,n,f,o,i,s,x){let a=x?x(e):e;if(a<t){if(i==="identity")return a;i==="clamp"&&(a=t)}if(a>r){if(s==="identity")return a;s==="clamp"&&(a=r)}return n===f?n:t===r?e<=t?n:f:(t===-1/0?a=-a:r===1/0?a=a-t:a=(a-t)/(r-t),a=o(a),n===-1/0?a=-a:f===1/0?a=a+n:a=a*(f-n)+n,a)}function He(e,t){for(var r=1;r<t.length-1&&!(t[r]>=e);++r);return r-1}var Be=(e,t="end")=>r=>{r=t==="end"?Math.min(r,.999):Math.max(r,.001);let n=r*e,f=t==="end"?Math.floor(n):Math.ceil(n);return ne(0,1,f/e)},P=1.70158,L=P*1.525,xe=P+1,he=2*Math.PI/3,ye=2*Math.PI/4.5,V=e=>e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375,Lt={linear:e=>e,easeInQuad:e=>e*e,easeOutQuad:e=>1-(1-e)*(1-e),easeInOutQuad:e=>e<.5?2*e*e:1-Math.pow(-2*e+2,2)/2,easeInCubic:e=>e*e*e,easeOutCubic:e=>1-Math.pow(1-e,3),easeInOutCubic:e=>e<.5?4*e*e*e:1-Math.pow(-2*e+2,3)/2,easeInQuart:e=>e*e*e*e,easeOutQuart:e=>1-Math.pow(1-e,4),easeInOutQuart:e=>e<.5?8*e*e*e*e:1-Math.pow(-2*e+2,4)/2,easeInQuint:e=>e*e*e*e*e,easeOutQuint:e=>1-Math.pow(1-e,5),easeInOutQuint:e=>e<.5?16*e*e*e*e*e:1-Math.pow(-2*e+2,5)/2,easeInSine:e=>1-Math.cos(e*Math.PI/2),easeOutSine:e=>Math.sin(e*Math.PI/2),easeInOutSine:e=>-(Math.cos(Math.PI*e)-1)/2,easeInExpo:e=>e===0?0:Math.pow(2,10*e-10),easeOutExpo:e=>e===1?1:1-Math.pow(2,-10*e),easeInOutExpo:e=>e===0?0:e===1?1:e<.5?Math.pow(2,20*e-10)/2:(2-Math.pow(2,-20*e+10))/2,easeInCirc:e=>1-Math.sqrt(1-Math.pow(e,2)),easeOutCirc:e=>Math.sqrt(1-Math.pow(e-1,2)),easeInOutCirc:e=>e<.5?(1-Math.sqrt(1-Math.pow(2*e,2)))/2:(Math.sqrt(1-Math.pow(-2*e+2,2))+1)/2,easeInBack:e=>xe*e*e*e-P*e*e,easeOutBack:e=>1+xe*Math.pow(e-1,3)+P*Math.pow(e-1,2),easeInOutBack:e=>e<.5?Math.pow(2*e,2)*((L+1)*2*e-L)/2:(Math.pow(2*e-2,2)*((L+1)*(e*2-2)+L)+2)/2,easeInElastic:e=>e===0?0:e===1?1:-Math.pow(2,10*e-10)*Math.sin((e*10-10.75)*he),easeOutElastic:e=>e===0?0:e===1?1:Math.pow(2,-10*e)*Math.sin((e*10-.75)*he)+1,easeInOutElastic:e=>e===0?0:e===1?1:e<.5?-(Math.pow(2,20*e-10)*Math.sin((20*e-11.125)*ye))/2:Math.pow(2,-20*e+10)*Math.sin((20*e-11.125)*ye)/2+1,easeInBounce:e=>1-V(1-e),easeOutBounce:V,easeInOutBounce:e=>e<.5?(1-V(1-2*e))/2:(1+V(2*e-1))/2,steps:Be};var g=Symbol.for("FluidValue.get"),esm_m=Symbol.for("FluidValue.observers");var Pt=e=>!!(e&&e[g]),ve=e=>e&&e[g]?e[g]():e,esm_qt=e=>e[esm_m]||null;function je(e,t){e.eventObserved?e.eventObserved(t):e(t)}function $t(e,t){let r=e[esm_m];r&&r.forEach(n=>{je(n,t)})}var esm_ge=class{[g];[esm_m];constructor(t){if(!t&&!(t=this.get))throw Error("Unknown getter");De(this,t)}},De=(e,t)=>Ee(e,g,t);function Gt(e,t){if(e[g]){let r=e[esm_m];r||Ee(e,esm_m,r=new Set),r.has(t)||(r.add(t),e.observerAdded&&e.observerAdded(r.size,t))}return t}function Qt(e,t){let r=e[esm_m];if(r&&r.has(t)){let n=r.size-1;n?r.delete(t):e[esm_m]=null,e.observerRemoved&&e.observerRemoved(n,t)}}var Ee=(e,t,r)=>Object.defineProperty(e,t,{value:r,writable:!0,configurable:!0});var O=/[+\-]?(?:0|[1-9]\d*)(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,esm_Oe=/(#(?:[0-9a-f]{2}){2,4}|(#[0-9a-f]{3})|(rgb|hsl)a?\((-?\d+%?[,\s]+){2,3}\s*[\d\.]+%?\))/gi,K=new RegExp(`(${O.source})(%|[a-z]+)`,"i"),we=/rgba\(([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+), ([0-9\.-]+)\)/gi,esm_b=/var\((--[a-zA-Z0-9-_]+),? ?([a-zA-Z0-9 ()%#.,-]+)?\)/;var N=e=>{let[t,r]=We(e);if(!t||esm_h())return e;let n=window.getComputedStyle(document.documentElement).getPropertyValue(t);if(n)return n.trim();if(r&&r.startsWith("--")){let f=window.getComputedStyle(document.documentElement).getPropertyValue(r);return f||e}else{if(r&&esm_b.test(r))return N(r);if(r)return r}return e},We=e=>{let t=esm_b.exec(e);if(!t)return[,];let[,r,n]=t;return[r,n]};var _,Ke=(e,t,r,n,f)=>`rgba(${Math.round(t)}, ${Math.round(r)}, ${Math.round(n)}, ${f})`,Xt=e=>{_||(_=esm_c?new RegExp(`(${Object.keys(esm_c).join("|")})(?!\\w)`,"g"):/^\b$/);let t=e.output.map(o=>ve(o).replace(esm_b,N).replace(esm_Oe,D).replace(_,D)),r=t.map(o=>o.match(O).map(Number)),f=r[0].map((o,i)=>r.map(s=>{if(!(i in s))throw Error('The arity of each "output" value must be equal');return s[i]})).map(o=>W({...e,output:o}));return o=>{let i=!K.test(t[0])&&t.find(x=>K.test(x))?.replace(O,""),s=0;return t[0].replace(O,()=>`${f[s++](o)}${i||""}`).replace(we,Ke)}};var Z="react-spring: ",Te=e=>{let t=e,r=!1;if(typeof t!="function")throw new TypeError(`${Z}once requires a function parameter`);return(...n)=>{r||(t(...n),r=!0)}},Ne=Te(console.warn);function Jt(){Ne(`${Z}The "interpolate" function is deprecated in v9 (use "to" instead)`)}var _e=Te(console.warn);function er(){_e(`${Z}Directly calling start instead of using the api object is deprecated in v9 (use ".start" instead), this will be removed in later 0.X.0 versions`)}function esm_or(e){return esm_l.str(e)&&(e[0]=="#"||/\d/.test(e)||!esm_h()&&esm_b.test(e)||e in(esm_c||{}))}var esm_v,q=new WeakMap,Ze=e=>e.forEach(({target:t,contentRect:r})=>q.get(t)?.forEach(n=>n(r)));function Fe(e,t){esm_v||typeof ResizeObserver<"u"&&(esm_v=new ResizeObserver(Ze));let r=q.get(t);return r||(r=new Set,q.set(t,r)),r.add(e),esm_v&&esm_v.observe(t),()=>{let n=q.get(t);n&&(n.delete(e),!n.size&&esm_v&&esm_v.unobserve(t))}}var $=new Set,esm_w,Xe=()=>{let e=()=>{$.forEach(t=>t({width:window.innerWidth,height:window.innerHeight}))};return window.addEventListener("resize",e),()=>{window.removeEventListener("resize",e)}},Ie=e=>($.add(e),esm_w||(esm_w=Xe()),()=>{$.delete(e),!$.size&&esm_w&&(esm_w(),esm_w=void 0)});var ke=(e,{container:t=document.documentElement}={})=>t===document.documentElement?Ie(e):Fe(e,t);var Se=(e,t,r)=>t-e===0?1:(r-e)/(t-e);var Ye={x:{length:"Width",position:"Left"},y:{length:"Height",position:"Top"}},esm_G=class{callback;container;info;constructor(t,r){this.callback=t,this.container=r,this.info={time:0,x:this.createAxis(),y:this.createAxis()}}createAxis=()=>({current:0,progress:0,scrollLength:0});updateAxis=t=>{let r=this.info[t],{length:n,position:f}=Ye[t];r.current=this.container[`scroll${f}`],r.scrollLength=this.container["scroll"+n]-this.container["client"+n],r.progress=Se(0,r.scrollLength,r.current)};update=()=>{this.updateAxis("x"),this.updateAxis("y")};sendEvent=()=>{this.callback(this.info)};advance=()=>{this.update(),this.sendEvent()}};var esm_T=new WeakMap,Ae=new WeakMap,X=new WeakMap,Me=e=>e===document.documentElement?window:e,yr=(e,{container:t=document.documentElement}={})=>{let r=X.get(t);r||(r=new Set,X.set(t,r));let n=new esm_G(e,t);if(r.add(n),!esm_T.has(t)){let o=()=>(r?.forEach(s=>s.advance()),!0);esm_T.set(t,o);let i=Me(t);window.addEventListener("resize",o,{passive:!0}),t!==document.documentElement&&Ae.set(t,ke(o,{container:t})),i.addEventListener("scroll",o,{passive:!0})}let f=esm_T.get(t);return Re(f),()=>{Re.cancel(f);let o=X.get(t);if(!o||(o.delete(n),o.size))return;let i=esm_T.get(t);esm_T.delete(t),i&&(Me(t).removeEventListener("scroll",i),window.removeEventListener("resize",i),Ae.get(t)?.())}};function Er(e){let t=Je(null);return t.current===null&&(t.current=e()),t.current}var esm_Q=esm_h()?react.useEffect:react.useLayoutEffect;var Ce=()=>{let e=(0,react.useRef)(!1);return esm_Q(()=>(e.current=!0,()=>{e.current=!1}),[]),e};function Mr(){let e=(0,react.useState)()[1],t=Ce();return()=>{t.current&&e(Math.random())}}function Lr(e,t){let[r]=(0,react.useState)(()=>({inputs:t,result:e()})),n=(0,react.useRef)(),f=n.current,o=f;return o?t&&o.inputs&&it(t,o.inputs)||(o={inputs:t,result:e()}):o=r,(0,react.useEffect)(()=>{n.current=o,f==r&&(r.inputs=r.result=void 0)},[o]),o.result}function it(e,t){if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}var $r=e=>(0,react.useEffect)(e,ut),ut=[];function Ur(e){let t=(0,react.useRef)();return (0,react.useEffect)(()=>{t.current=e}),t.current}var Wr=()=>{let[e,t]=dt(null);return esm_Q(()=>{let r=window.matchMedia("(prefers-reduced-motion)"),n=f=>{t(f.matches),U({skipAnimation:f.matches})};return n(r),r.addEventListener("change",n),()=>{r.removeEventListener("change",n)}},[]),e};
-
-;// CONCATENATED MODULE: ./node_modules/@react-spring/animated/dist/esm/index.js
-var dist_esm_h=Symbol.for("Animated:node"),dist_esm_v=e=>!!e&&e[dist_esm_h]===e,esm_k=e=>e&&e[dist_esm_h],esm_D=(e,t)=>mt(e,dist_esm_h,t),F=e=>e&&e[dist_esm_h]&&e[dist_esm_h].getPayload(),dist_esm_c=class{payload;constructor(){esm_D(this,this)}getPayload(){return this.payload||[]}};var dist_esm_l=class extends dist_esm_c{constructor(r){super();this._value=r;esm_l.num(this._value)&&(this.lastPosition=this._value)}done=!0;elapsedTime;lastPosition;lastVelocity;v0;durationProgress=0;static create(r){return new dist_esm_l(r)}getPayload(){return[this]}getValue(){return this._value}setValue(r,n){return esm_l.num(r)&&(this.lastPosition=r,n&&(r=Math.round(r/n)*n,this.done&&(this.lastPosition=r))),this._value===r?!1:(this._value=r,!0)}reset(){let{done:r}=this;this.done=!1,esm_l.num(this._value)&&(this.elapsedTime=0,this.durationProgress=0,this.lastPosition=this._value,r&&(this.lastVelocity=null),this.v0=null)}};var dist_esm_d=class extends dist_esm_l{_string=null;_toString;constructor(t){super(0),this._toString=W({output:[t,t]})}static create(t){return new dist_esm_d(t)}getValue(){let t=this._string;return t??(this._string=this._toString(this._value))}setValue(t){if(esm_l.str(t)){if(t==this._string)return!1;this._string=t,this._value=1}else if(super.setValue(t))this._string=null;else return!1;return!0}reset(t){t&&(this._toString=W({output:[this.getValue(),t]})),this._value=0,super.reset()}};var esm_f={dependencies:null};var dist_esm_u=class extends dist_esm_c{constructor(r){super();this.source=r;this.setValue(r)}getValue(r){let n={};return xt(this.source,(a,i)=>{dist_esm_v(a)?n[i]=a.getValue(r):Pt(a)?n[i]=ve(a):r||(n[i]=a)}),n}setValue(r){this.source=r,this.payload=this._makePayload(r)}reset(){this.payload&&Ve(this.payload,r=>r.reset())}_makePayload(r){if(r){let n=new Set;return xt(r,this._addToPayload,n),Array.from(n)}}_addToPayload(r){esm_f.dependencies&&Pt(r)&&esm_f.dependencies.add(r);let n=F(r);n&&Ve(n,a=>this.add(a))}};var dist_esm_y=class extends dist_esm_u{constructor(t){super(t)}static create(t){return new dist_esm_y(t)}getValue(){return this.source.map(t=>t.getValue())}setValue(t){let r=this.getPayload();return t.length==r.length?r.map((n,a)=>n.setValue(t[a])).some(Boolean):(super.setValue(t.map(esm_z)),!0)}};function esm_z(e){return(esm_or(e)?dist_esm_d:dist_esm_l).create(e)}function esm_Le(e){let t=esm_k(e);return t?t.constructor:esm_l.arr(e)?dist_esm_y:esm_or(e)?dist_esm_d:dist_esm_l}var esm_x=(e,t)=>{let r=!esm_l.fun(e)||e.prototype&&e.prototype.isReactComponent;return (0,react.forwardRef)((n,a)=>{let i=(0,react.useRef)(null),o=r&&(0,react.useCallback)(s=>{i.current=esm_ae(a,s)},[a]),[m,T]=esm_ne(n,t),W=Mr(),P=()=>{let s=i.current;if(r&&!s)return;(s?t.applyAnimatedValues(s,m.getValue(!0)):!1)===!1&&W()},_=new dist_esm_b(P,T),p=(0,react.useRef)();esm_Q(()=>(p.current=_,Ve(T,s=>Gt(s,_)),()=>{p.current&&(Ve(p.current.deps,s=>Qt(s,p.current)),esm_n.cancel(p.current.update))})),(0,react.useEffect)(P,[]),$r(()=>()=>{let s=p.current;Ve(s.deps,S=>Qt(S,s))});let $=t.getComponentProps(m.getValue());return react.createElement(e,{...$,ref:o})})},dist_esm_b=class{constructor(t,r){this.update=t;this.deps=r}eventObserved(t){t.type=="change"&&esm_n.write(this.update)}};function esm_ne(e,t){let r=new Set;return esm_f.dependencies=r,e.style&&(e={...e,style:t.createAnimatedStyle(e.style)}),e=new dist_esm_u(e),esm_f.dependencies=null,[e,r]}function esm_ae(e,t){return e&&(esm_l.fun(e)?e(t):e.current=t),t}var dist_esm_j=Symbol.for("AnimatedComponent"),esm_Ke=(e,{applyAnimatedValues:t=()=>!1,createAnimatedStyle:r=a=>new dist_esm_u(a),getComponentProps:n=a=>a}={})=>{let a={applyAnimatedValues:t,createAnimatedStyle:r,getComponentProps:n},i=o=>{let m=I(o)||"Anonymous";return esm_l.str(o)?o=i[o]||(i[o]=esm_x(o,a)):o=o[dist_esm_j]||(o[dist_esm_j]=esm_x(o,a)),o.displayName=`Animated(${m})`,o};return xt(e,(o,m)=>{esm_l.arr(e)&&(m=I(o)),i[m]=i(o)}),{animated:i}},I=e=>esm_l.str(e)?e:e&&esm_l.str(e.displayName)?e.displayName:esm_l.fun(e)&&e.name||null;
-
-;// CONCATENATED MODULE: ./node_modules/@react-spring/core/dist/esm/index.js
-function esm_I(t,...e){return esm_l.fun(t)?t(...e):t}var esm_te=(t,e)=>t===!0||!!(e&&t&&(esm_l.fun(t)?t(e):ht(t).includes(e))),et=(t,e)=>esm_l.obj(t)?e&&t[e]:t;var esm_ke=(t,e)=>t.default===!0?t[e]:t.default?t.default[e]:void 0,nn=t=>t,dist_esm_ne=(t,e=nn)=>{let n=rn;t.default&&t.default!==!0&&(t=t.default,n=Object.keys(t));let r={};for(let o of n){let s=e(t[o],o);esm_l.und(s)||(r[o]=s)}return r},rn=["config","onProps","onStart","onChange","onPause","onResume","onRest"],on={config:1,from:1,to:1,ref:1,loop:1,reset:1,pause:1,cancel:1,reverse:1,immediate:1,default:1,delay:1,onProps:1,onStart:1,onChange:1,onPause:1,onResume:1,onRest:1,onResolve:1,items:1,trail:1,sort:1,expires:1,initial:1,enter:1,update:1,leave:1,children:1,onDestroyed:1,keys:1,callId:1,parentId:1};function sn(t){let e={},n=0;if(xt(t,(r,o)=>{on[o]||(e[o]=r,n++)}),n)return e}function esm_de(t){let e=sn(t);if(e){let n={to:e};return xt(t,(r,o)=>o in e||(n[o]=r)),n}return{...t}}function esm_me(t){return t=ve(t),esm_l.arr(t)?t.map(esm_me):esm_or(t)?esm_p.createStringInterpolator({range:[0,1],output:[t,t]})(1):t}function esm_Ue(t){for(let e in t)return!0;return!1}function esm_Ee(t){return esm_l.fun(t)||esm_l.arr(t)&&esm_l.obj(t[0])}function esm_xe(t,e){t.ref?.delete(t),e?.delete(t)}function esm_he(t,e){e&&t.ref!==e&&(t.ref?.delete(t),e.add(t),t.ref=e)}function wr(t,e,n=1e3){an(()=>{if(e){let r=0;ge(t,(o,s)=>{let i=o.current;if(i.length){let a=n*e[s];isNaN(a)?a=r:r=a,ge(i,u=>{ge(u.queue,p=>{let f=p.delay;p.delay=d=>a+esm_I(f||0,d)})}),o.start()}})}else{let r=Promise.resolve();ge(t,o=>{let s=o.current;if(s.length){let i=s.map(a=>{let u=a.queue;return a.queue=[],u});r=r.then(()=>(ge(s,(a,u)=>ge(i[u]||[],p=>a.queue.push(p))),Promise.all(o.start())))}})}})}var esm_mt={default:{tension:170,friction:26},gentle:{tension:120,friction:14},wobbly:{tension:180,friction:12},stiff:{tension:210,friction:20},slow:{tension:280,friction:60},molasses:{tension:280,friction:120}};var tt={...esm_mt.default,mass:1,damping:1,easing:Lt.linear,clamp:!1},esm_we=class{tension;friction;frequency;damping;mass;velocity=0;restVelocity;precision;progress;duration;easing;clamp;bounce;decay;round;constructor(){Object.assign(this,tt)}};function gt(t,e,n){n&&(n={...n},esm_ht(n,e),e={...n,...e}),esm_ht(t,e),Object.assign(t,e);for(let i in tt)t[i]==null&&(t[i]=tt[i]);let{frequency:r,damping:o}=t,{mass:s}=t;return esm_l.und(r)||(r<.01&&(r=.01),o<0&&(o=0),t.tension=Math.pow(2*Math.PI/r,2)*s,t.friction=4*Math.PI*o*s/r),t}function esm_ht(t,e){if(!esm_l.und(e.decay))t.duration=void 0;else{let n=!esm_l.und(e.tension)||!esm_l.und(e.friction);(n||!esm_l.und(e.frequency)||!esm_l.und(e.damping)||!esm_l.und(e.mass))&&(t.duration=void 0,t.decay=void 0),n&&(t.frequency=void 0)}}var esm_yt=[],dist_esm_Le=class{changed=!1;values=esm_yt;toValues=null;fromValues=esm_yt;to;from;config=new esm_we;immediate=!1};function esm_Me(t,{key:e,props:n,defaultProps:r,state:o,actions:s}){return new Promise((i,a)=>{let u,p,f=esm_te(n.cancel??r?.cancel,e);if(f)b();else{esm_l.und(n.pause)||(o.paused=esm_te(n.pause,e));let c=r?.pause;c!==!0&&(c=o.paused||esm_te(c,e)),u=esm_I(n.delay||0,e),c?(o.resumeQueue.add(m),s.pause()):(s.resume(),m())}function d(){o.resumeQueue.add(m),o.timeouts.delete(p),p.cancel(),u=p.time-esm_n.now()}function m(){u>0&&!esm_p.skipAnimation?(o.delayed=!0,p=esm_n.setTimeout(b,u),o.pauseQueue.add(d),o.timeouts.add(p)):b()}function b(){o.delayed&&(o.delayed=!1),o.pauseQueue.delete(d),o.timeouts.delete(p),t<=(o.cancelId||0)&&(f=!0);try{s.start({...n,callId:t,cancel:f},i)}catch(c){a(c)}}})}var esm_be=(t,e)=>e.length==1?e[0]:e.some(n=>n.cancelled)?esm_q(t.get()):e.every(n=>n.noop)?nt(t.get()):esm_E(t.get(),e.every(n=>n.finished)),nt=t=>({value:t,noop:!0,finished:!0,cancelled:!1}),esm_E=(t,e,n=!1)=>({value:t,finished:e,cancelled:n}),esm_q=t=>({value:t,cancelled:!0,finished:!1});function esm_De(t,e,n,r){let{callId:o,parentId:s,onRest:i}=e,{asyncTo:a,promise:u}=n;return!s&&t===a&&!e.reset?u:n.promise=(async()=>{n.asyncId=o,n.asyncTo=t;let p=dist_esm_ne(e,(l,h)=>h==="onRest"?void 0:l),f,d,m=new Promise((l,h)=>(f=l,d=h)),b=l=>{let h=o<=(n.cancelId||0)&&esm_q(r)||o!==n.asyncId&&esm_E(r,!1);if(h)throw l.result=h,d(l),l},c=(l,h)=>{let g=new esm_Ae,x=new esm_Ne;return(async()=>{if(esm_p.skipAnimation)throw esm_oe(n),x.result=esm_E(r,!1),d(x),x;b(g);let S=esm_l.obj(l)?{...l}:{...h,to:l};S.parentId=o,xt(p,(V,_)=>{esm_l.und(S[_])&&(S[_]=V)});let A=await r.start(S);return b(g),n.paused&&await new Promise(V=>{n.resumeQueue.add(V)}),A})()},P;if(esm_p.skipAnimation)return esm_oe(n),esm_E(r,!1);try{let l;esm_l.arr(t)?l=(async h=>{for(let g of h)await c(g)})(t):l=Promise.resolve(t(c,r.stop.bind(r))),await Promise.all([l.then(f),m]),P=esm_E(r.get(),!0,!1)}catch(l){if(l instanceof esm_Ae)P=l.result;else if(l instanceof esm_Ne)P=l.result;else throw l}finally{o==n.asyncId&&(n.asyncId=s,n.asyncTo=s?a:void 0,n.promise=s?u:void 0)}return esm_l.fun(i)&&esm_n.batchedUpdates(()=>{i(P,r,r.item)}),P})()}function esm_oe(t,e){Pe(t.timeouts,n=>n.cancel()),t.pauseQueue.clear(),t.resumeQueue.clear(),t.asyncId=t.asyncTo=t.promise=void 0,e&&(t.cancelId=e)}var esm_Ae=class extends Error{result;constructor(){super("An async animation has been interrupted. You see this error because you forgot to use `await` or `.catch(...)` on its returned promise.")}},esm_Ne=class extends Error{result;constructor(){super("SkipAnimationSignal")}};var esm_Re=t=>t instanceof esm_X,Sn=1,esm_X=class extends esm_ge{id=Sn++;_priority=0;get priority(){return this._priority}set priority(e){this._priority!=e&&(this._priority=e,this._onPriorityChange(e))}get(){let e=esm_k(this);return e&&e.getValue()}to(...e){return esm_p.to(this,e)}interpolate(...e){return Jt(),esm_p.to(this,e)}toJSON(){return this.get()}observerAdded(e){e==1&&this._attach()}observerRemoved(e){e==0&&this._detach()}_attach(){}_detach(){}_onChange(e,n=!1){$t(this,{type:"change",parent:this,value:e,idle:n})}_onPriorityChange(e){this.idle||qe.sort(this),$t(this,{type:"priority",parent:this,priority:e})}};var esm_se=Symbol.for("SpringPhase"),esm_bt=1,rt=2,ot=4,esm_qe=t=>(t[esm_se]&esm_bt)>0,dist_esm_Q=t=>(t[esm_se]&rt)>0,esm_ye=t=>(t[esm_se]&ot)>0,st=(t,e)=>e?t[esm_se]|=rt|esm_bt:t[esm_se]&=~rt,esm_it=(t,e)=>e?t[esm_se]|=ot:t[esm_se]&=~ot;var esm_ue=class extends esm_X{key;animation=new dist_esm_Le;queue;defaultProps={};_state={paused:!1,delayed:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set};_pendingCalls=new Set;_lastCallId=0;_lastToId=0;_memoizedDuration=0;constructor(e,n){if(super(),!esm_l.und(e)||!esm_l.und(n)){let r=esm_l.obj(e)?{...e}:{...n,from:e};esm_l.und(r.default)&&(r.default=!0),this.start(r)}}get idle(){return!(dist_esm_Q(this)||this._state.asyncTo)||esm_ye(this)}get goal(){return ve(this.animation.to)}get velocity(){let e=esm_k(this);return e instanceof dist_esm_l?e.lastVelocity||0:e.getPayload().map(n=>n.lastVelocity||0)}get hasAnimated(){return esm_qe(this)}get isAnimating(){return dist_esm_Q(this)}get isPaused(){return esm_ye(this)}get isDelayed(){return this._state.delayed}advance(e){let n=!0,r=!1,o=this.animation,{toValues:s}=o,{config:i}=o,a=F(o.to);!a&&Pt(o.to)&&(s=ht(ve(o.to))),o.values.forEach((f,d)=>{if(f.done)return;let m=f.constructor==dist_esm_d?1:a?a[d].lastPosition:s[d],b=o.immediate,c=m;if(!b){if(c=f.lastPosition,i.tension<=0){f.done=!0;return}let P=f.elapsedTime+=e,l=o.fromValues[d],h=f.v0!=null?f.v0:f.v0=esm_l.arr(i.velocity)?i.velocity[d]:i.velocity,g,x=i.precision||(l==m?.005:Math.min(1,Math.abs(m-l)*.001));if(esm_l.und(i.duration))if(i.decay){let S=i.decay===!0?.998:i.decay,A=Math.exp(-(1-S)*P);c=l+h/(1-S)*(1-A),b=Math.abs(f.lastPosition-c)<=x,g=h*A}else{g=f.lastVelocity==null?h:f.lastVelocity;let S=i.restVelocity||x/10,A=i.clamp?0:i.bounce,V=!esm_l.und(A),_=l==m?f.v0>0:l<m,v,w=!1,C=1,$=Math.ceil(e/C);for(let L=0;L<$&&(v=Math.abs(g)>S,!(!v&&(b=Math.abs(m-c)<=x,b)));++L){V&&(w=c==m||c>m==_,w&&(g=-g*A,c=m));let N=-i.tension*1e-6*(c-m),y=-i.friction*.001*g,T=(N+y)/i.mass;g=g+T*C,c=c+g*C}}else{let S=1;i.duration>0&&(this._memoizedDuration!==i.duration&&(this._memoizedDuration=i.duration,f.durationProgress>0&&(f.elapsedTime=i.duration*f.durationProgress,P=f.elapsedTime+=e)),S=(i.progress||0)+P/this._memoizedDuration,S=S>1?1:S<0?0:S,f.durationProgress=S),c=l+i.easing(S)*(m-l),g=(c-f.lastPosition)/e,b=S==1}f.lastVelocity=g,Number.isNaN(c)&&(console.warn("Got NaN while animating:",this),b=!0)}a&&!a[d].done&&(b=!1),b?f.done=!0:n=!1,f.setValue(c,i.round)&&(r=!0)});let u=esm_k(this),p=u.getValue();if(n){let f=ve(o.to);(p!==f||r)&&!i.decay?(u.setValue(f),this._onChange(f)):r&&i.decay&&this._onChange(p),this._stop()}else r&&this._onChange(p)}set(e){return esm_n.batchedUpdates(()=>{this._stop(),this._focus(e),this._set(e)}),this}pause(){this._update({pause:!0})}resume(){this._update({pause:!1})}finish(){if(dist_esm_Q(this)){let{to:e,config:n}=this.animation;esm_n.batchedUpdates(()=>{this._onStart(),n.decay||this._set(e,!1),this._stop()})}return this}update(e){return(this.queue||(this.queue=[])).push(e),this}start(e,n){let r;return esm_l.und(e)?(r=this.queue||[],this.queue=[]):r=[esm_l.obj(e)?e:{...n,to:e}],Promise.all(r.map(o=>this._update(o))).then(o=>esm_be(this,o))}stop(e){let{to:n}=this.animation;return this._focus(this.get()),esm_oe(this._state,e&&this._lastCallId),esm_n.batchedUpdates(()=>this._stop(n,e)),this}reset(){this._update({reset:!0})}eventObserved(e){e.type=="change"?this._start():e.type=="priority"&&(this.priority=e.priority+1)}_prepareNode(e){let n=this.key||"",{to:r,from:o}=e;r=esm_l.obj(r)?r[n]:r,(r==null||esm_Ee(r))&&(r=void 0),o=esm_l.obj(o)?o[n]:o,o==null&&(o=void 0);let s={to:r,from:o};return esm_qe(this)||(e.reverse&&([r,o]=[o,r]),o=ve(o),esm_l.und(o)?esm_k(this)||this._set(r):this._set(o)),s}_update({...e},n){let{key:r,defaultProps:o}=this;e.default&&Object.assign(o,dist_esm_ne(e,(a,u)=>/^on/.test(u)?et(a,r):a)),_t(this,e,"onProps"),esm_Ie(this,"onProps",e,this);let s=this._prepareNode(e);if(Object.isFrozen(this))throw Error("Cannot animate a `SpringValue` object that is frozen. Did you forget to pass your component to `animated(...)` before animating its props?");let i=this._state;return esm_Me(++this._lastCallId,{key:r,props:e,defaultProps:o,state:i,actions:{pause:()=>{esm_ye(this)||(esm_it(this,!0),yt(i.pauseQueue),esm_Ie(this,"onPause",esm_E(this,esm_Ce(this,this.animation.to)),this))},resume:()=>{esm_ye(this)&&(esm_it(this,!1),dist_esm_Q(this)&&this._resume(),yt(i.resumeQueue),esm_Ie(this,"onResume",esm_E(this,esm_Ce(this,this.animation.to)),this))},start:this._merge.bind(this,s)}}).then(a=>{if(e.loop&&a.finished&&!(n&&a.noop)){let u=at(e);if(u)return this._update(u,!0)}return a})}_merge(e,n,r){if(n.cancel)return this.stop(!0),r(esm_q(this));let o=!esm_l.und(e.to),s=!esm_l.und(e.from);if(o||s)if(n.callId>this._lastToId)this._lastToId=n.callId;else return r(esm_q(this));let{key:i,defaultProps:a,animation:u}=this,{to:p,from:f}=u,{to:d=p,from:m=f}=e;s&&!o&&(!n.default||esm_l.und(d))&&(d=m),n.reverse&&([d,m]=[m,d]);let b=!bt(m,f);b&&(u.from=m),m=ve(m);let c=!bt(d,p);c&&this._focus(d);let P=esm_Ee(n.to),{config:l}=u,{decay:h,velocity:g}=l;(o||s)&&(l.velocity=0),n.config&&!P&>(l,esm_I(n.config,i),n.config!==a.config?esm_I(a.config,i):void 0);let x=esm_k(this);if(!x||esm_l.und(d))return r(esm_E(this,!0));let S=esm_l.und(n.reset)?s&&!n.default:!esm_l.und(m)&&esm_te(n.reset,i),A=S?m:this.get(),V=esm_me(d),_=esm_l.num(V)||esm_l.arr(V)||esm_or(V),v=!P&&(!_||esm_te(a.immediate||n.immediate,i));if(c){let L=esm_Le(d);if(L!==x.constructor)if(v)x=this._set(V);else throw Error(`Cannot animate between ${x.constructor.name} and ${L.name}, as the "to" prop suggests`)}let w=x.constructor,C=Pt(d),$=!1;if(!C){let L=S||!esm_qe(this)&&b;(c||L)&&($=bt(esm_me(A),V),C=!$),(!bt(u.immediate,v)&&!v||!bt(l.decay,h)||!bt(l.velocity,g))&&(C=!0)}if($&&dist_esm_Q(this)&&(u.changed&&!S?C=!0:C||this._stop(p)),!P&&((C||Pt(p))&&(u.values=x.getPayload(),u.toValues=Pt(d)?null:w==dist_esm_d?[1]:ht(V)),u.immediate!=v&&(u.immediate=v,!v&&!S&&this._set(p)),C)){let{onRest:L}=u;Ve(_n,y=>_t(this,n,y));let N=esm_E(this,esm_Ce(this,p));yt(this._pendingCalls,N),this._pendingCalls.add(r),u.changed&&esm_n.batchedUpdates(()=>{u.changed=!S,L?.(N,this),S?esm_I(a.onRest,N):u.onStart?.(N,this)})}S&&this._set(A),P?r(esm_De(n.to,n,this._state,this)):C?this._start():dist_esm_Q(this)&&!c?this._pendingCalls.add(r):r(nt(A))}_focus(e){let n=this.animation;e!==n.to&&(esm_qt(this)&&this._detach(),n.to=e,esm_qt(this)&&this._attach())}_attach(){let e=0,{to:n}=this.animation;Pt(n)&&(Gt(n,this),esm_Re(n)&&(e=n.priority+1)),this.priority=e}_detach(){let{to:e}=this.animation;Pt(e)&&Qt(e,this)}_set(e,n=!0){let r=ve(e);if(!esm_l.und(r)){let o=esm_k(this);if(!o||!bt(r,o.getValue())){let s=esm_Le(r);!o||o.constructor!=s?esm_D(this,s.create(r)):o.setValue(r),o&&esm_n.batchedUpdates(()=>{this._onChange(r,n)})}}return esm_k(this)}_onStart(){let e=this.animation;e.changed||(e.changed=!0,esm_Ie(this,"onStart",esm_E(this,esm_Ce(this,e.to)),this))}_onChange(e,n){n||(this._onStart(),esm_I(this.animation.onChange,e,this)),esm_I(this.defaultProps.onChange,e,this),super._onChange(e,n)}_start(){let e=this.animation;esm_k(this).reset(ve(e.to)),e.immediate||(e.fromValues=e.values.map(n=>n.lastPosition)),dist_esm_Q(this)||(st(this,!0),esm_ye(this)||this._resume())}_resume(){esm_p.skipAnimation?this.finish():qe.start(this)}_stop(e,n){if(dist_esm_Q(this)){st(this,!1);let r=this.animation;Ve(r.values,s=>{s.done=!0}),r.toValues&&(r.onChange=r.onPause=r.onResume=void 0),$t(this,{type:"idle",parent:this});let o=n?esm_q(this.get()):esm_E(this.get(),esm_Ce(this,e??r.to));yt(this._pendingCalls,o),r.changed&&(r.changed=!1,esm_Ie(this,"onRest",o,this))}}};function esm_Ce(t,e){let n=esm_me(e),r=esm_me(t.get());return bt(r,n)}function at(t,e=t.loop,n=t.to){let r=esm_I(e);if(r){let o=r!==!0&&esm_de(r),s=(o||t).reverse,i=!o||o.reset;return esm_Pe({...t,loop:e,default:!1,pause:void 0,to:!s||esm_Ee(n)?n:void 0,from:i?t.from:void 0,reset:i,...o})}}function esm_Pe(t){let{to:e,from:n}=t=esm_de(t),r=new Set;return esm_l.obj(e)&&Vt(e,r),esm_l.obj(n)&&Vt(n,r),t.keys=r.size?Array.from(r):null,t}function Ot(t){let e=esm_Pe(t);return esm_l.und(e.default)&&(e.default=dist_esm_ne(e)),e}function Vt(t,e){xt(t,(n,r)=>n!=null&&e.add(r))}var _n=["onStart","onRest","onChange","onPause","onResume"];function _t(t,e,n){t.animation[n]=e[n]!==esm_ke(e,n)?et(e[n],t.key):void 0}function esm_Ie(t,e,...n){t.animation[e]?.(...n),t.defaultProps[e]?.(...n)}var Fn=["onStart","onChange","onRest"],kn=1,esm_le=class{id=kn++;springs={};queue=[];ref;_flush;_initialProps;_lastAsyncId=0;_active=new Set;_changed=new Set;_started=!1;_item;_state={paused:!1,pauseQueue:new Set,resumeQueue:new Set,timeouts:new Set};_events={onStart:new Map,onChange:new Map,onRest:new Map};constructor(e,n){this._onFrame=this._onFrame.bind(this),n&&(this._flush=n),e&&this.start({default:!0,...e})}get idle(){return!this._state.asyncTo&&Object.values(this.springs).every(e=>e.idle&&!e.isDelayed&&!e.isPaused)}get item(){return this._item}set item(e){this._item=e}get(){let e={};return this.each((n,r)=>e[r]=n.get()),e}set(e){for(let n in e){let r=e[n];esm_l.und(r)||this.springs[n].set(r)}}update(e){return e&&this.queue.push(esm_Pe(e)),this}start(e){let{queue:n}=this;return e?n=ht(e).map(esm_Pe):this.queue=[],this._flush?this._flush(this,n):(jt(this,n),esm_ze(this,n))}stop(e,n){if(e!==!!e&&(n=e),n){let r=this.springs;Ve(ht(n),o=>r[o].stop(!!e))}else esm_oe(this._state,this._lastAsyncId),this.each(r=>r.stop(!!e));return this}pause(e){if(esm_l.und(e))this.start({pause:!0});else{let n=this.springs;Ve(ht(e),r=>n[r].pause())}return this}resume(e){if(esm_l.und(e))this.start({pause:!1});else{let n=this.springs;Ve(ht(e),r=>n[r].resume())}return this}each(e){xt(this.springs,e)}_onFrame(){let{onStart:e,onChange:n,onRest:r}=this._events,o=this._active.size>0,s=this._changed.size>0;(o&&!this._started||s&&!this._started)&&(this._started=!0,Pe(e,([u,p])=>{p.value=this.get(),u(p,this,this._item)}));let i=!o&&this._started,a=s||i&&r.size?this.get():null;s&&n.size&&Pe(n,([u,p])=>{p.value=a,u(p,this,this._item)}),i&&(this._started=!1,Pe(r,([u,p])=>{p.value=a,u(p,this,this._item)}))}eventObserved(e){if(e.type=="change")this._changed.add(e.parent),e.idle||this._active.add(e.parent);else if(e.type=="idle")this._active.delete(e.parent);else return;esm_n.onFrame(this._onFrame)}};function esm_ze(t,e){return Promise.all(e.map(n=>wt(t,n))).then(n=>esm_be(t,n))}async function wt(t,e,n){let{keys:r,to:o,from:s,loop:i,onRest:a,onResolve:u}=e,p=esm_l.obj(e.default)&&e.default;i&&(e.loop=!1),o===!1&&(e.to=null),s===!1&&(e.from=null);let f=esm_l.arr(o)||esm_l.fun(o)?o:void 0;f?(e.to=void 0,e.onRest=void 0,p&&(p.onRest=void 0)):Ve(Fn,P=>{let l=e[P];if(esm_l.fun(l)){let h=t._events[P];e[P]=({finished:g,cancelled:x})=>{let S=h.get(l);S?(g||(S.finished=!1),x&&(S.cancelled=!0)):h.set(l,{value:null,finished:g||!1,cancelled:x||!1})},p&&(p[P]=e[P])}});let d=t._state;e.pause===!d.paused?(d.paused=e.pause,yt(e.pause?d.pauseQueue:d.resumeQueue)):d.paused&&(e.pause=!0);let m=(r||Object.keys(t.springs)).map(P=>t.springs[P].start(e)),b=e.cancel===!0||esm_ke(e,"cancel")===!0;(f||b&&d.asyncId)&&m.push(esm_Me(++t._lastAsyncId,{props:e,state:d,actions:{pause:Y,resume:Y,start(P,l){b?(esm_oe(d,t._lastAsyncId),l(esm_q(t))):(P.onRest=a,l(esm_De(f,P,d,t)))}}})),d.paused&&await new Promise(P=>{d.resumeQueue.add(P)});let c=esm_be(t,await Promise.all(m));if(i&&c.finished&&!(n&&c.noop)){let P=at(e,i,o);if(P)return jt(t,[P]),wt(t,P,!0)}return u&&esm_n.batchedUpdates(()=>u(c,t,t.item)),c}function esm_e(t,e){let n={...t.springs};return e&&Ve(ht(e),r=>{esm_l.und(r.keys)&&(r=esm_Pe(r)),esm_l.obj(r.to)||(r={...r,to:void 0}),Mt(n,r,o=>esm_Lt(o))}),pt(t,n),n}function pt(t,e){xt(e,(n,r)=>{t.springs[r]||(t.springs[r]=n,Gt(n,t))})}function esm_Lt(t,e){let n=new esm_ue;return n.key=t,e&&Gt(n,e),n}function Mt(t,e,n){e.keys&&Ve(e.keys,r=>{(t[r]||(t[r]=n(r)))._prepareNode(e)})}function jt(t,e){Ve(e,n=>{Mt(t.springs,n,r=>esm_Lt(r,t))})}var esm_H=({children:t,...e})=>{let n=(0,react.useContext)(esm_Ge),r=e.pause||!!n.pause,o=e.immediate||!!n.immediate;e=Lr(()=>({pause:r,immediate:o}),[r,o]);let{Provider:s}=esm_Ge;return react.createElement(s,{value:e},t)},esm_Ge=wn(esm_H,{});esm_H.Provider=esm_Ge.Provider;esm_H.Consumer=esm_Ge.Consumer;function wn(t,e){return Object.assign(t,react.createContext(e)),t.Provider._context=t,t.Consumer._context=t,t}var esm_fe=()=>{let t=[],e=function(r){er();let o=[];return Ve(t,(s,i)=>{if(esm_l.und(r))o.push(s.start());else{let a=n(r,s,i);a&&o.push(s.start(a))}}),o};e.current=t,e.add=function(r){t.includes(r)||t.push(r)},e.delete=function(r){let o=t.indexOf(r);~o&&t.splice(o,1)},e.pause=function(){return Ve(t,r=>r.pause(...arguments)),this},e.resume=function(){return Ve(t,r=>r.resume(...arguments)),this},e.set=function(r){Ve(t,(o,s)=>{let i=esm_l.fun(r)?r(s,o):r;i&&o.set(i)})},e.start=function(r){let o=[];return Ve(t,(s,i)=>{if(esm_l.und(r))o.push(s.start());else{let a=this._getProps(r,s,i);a&&o.push(s.start(a))}}),o},e.stop=function(){return Ve(t,r=>r.stop(...arguments)),this},e.update=function(r){return Ve(t,(o,s)=>o.update(this._getProps(r,o,s))),this};let n=function(r,o,s){return esm_l.fun(r)?r(s,o):r};return e._getProps=n,e};function esm_He(t,e,n){let r=esm_l.fun(e)&&e;r&&!n&&(n=[]);let o=(0,react.useMemo)(()=>r||arguments.length==3?esm_fe():void 0,[]),s=(0,react.useRef)(0),i=Mr(),a=(0,react.useMemo)(()=>({ctrls:[],queue:[],flush(h,g){let x=esm_e(h,g);return s.current>0&&!a.queue.length&&!Object.keys(x).some(A=>!h.springs[A])?esm_ze(h,g):new Promise(A=>{pt(h,x),a.queue.push(()=>{A(esm_ze(h,g))}),i()})}}),[]),u=(0,react.useRef)([...a.ctrls]),p=[],f=Ur(t)||0;(0,react.useMemo)(()=>{Ve(u.current.slice(t,f),h=>{esm_xe(h,o),h.stop(!0)}),u.current.length=t,d(f,t)},[t]),(0,react.useMemo)(()=>{d(0,Math.min(f,t))},n);function d(h,g){for(let x=h;x<g;x++){let S=u.current[x]||(u.current[x]=new esm_le(null,a.flush)),A=r?r(x,S):e[x];A&&(p[x]=Ot(A))}}let m=u.current.map((h,g)=>esm_e(h,p[g])),b=(0,react.useContext)(esm_H),c=Ur(b),P=b!==c&&esm_Ue(b);esm_Q(()=>{s.current++,a.ctrls=u.current;let{queue:h}=a;h.length&&(a.queue=[],Ve(h,g=>g())),Ve(u.current,(g,x)=>{o?.add(g),P&&g.start({default:b});let S=p[x];S&&(esm_he(g,S.ref),g.ref?g.queue.push(S):g.start(S))})}),$r(()=>()=>{Ve(a.ctrls,h=>h.stop(!0))});let l=m.map(h=>({...h}));return o?[l,o]:l}function esm_J(t,e){let n=esm_l.fun(t),[[r],o]=esm_He(1,n?t:[t],n?e||[]:e);return n||arguments.length==2?[r,o]:r}var Gn=()=>esm_fe(),Xo=()=>zn(Gn)[0];var Wo=(t,e)=>{let n=Bn(()=>new esm_ue(t,e));return Kn(()=>()=>{n.stop()}),n};function esm_Qt(t,e,n){let r=qt.fun(e)&&e;r&&!n&&(n=[]);let o=!0,s,i=esm_He(t,(a,u)=>{let p=r?r(a,u):e;return s=p.ref,o=o&&p.reverse,p},n||[{}]);if(Yn(()=>{Xn(i[1].current,(a,u)=>{let p=i[1].current[u+(o?1:-1)];if(esm_he(a,s),a.ref){p&&a.update({to:p.springs});return}p?a.start({to:p.springs}):a.start()})},n),r||arguments.length==3){let a=s??i[1];return a._getProps=(u,p,f)=>{let d=qt.fun(u)?u(f,p):u;if(d){let m=a.current[f+(d.reverse?1:-1)];return m&&(d.to=m.springs),d}},i}return i[0]}function esm_Gt(t,e,n){let r=G.fun(e)&&e,{reset:o,sort:s,trail:i=0,expires:a=!0,exitBeforeEnter:u=!1,onDestroyed:p,ref:f,config:d}=r?r():e,m=Jn(()=>r||arguments.length==3?esm_fe():void 0,[]),b=zt(t),c=[],P=lt(null),l=o?null:P.current;Je(()=>{P.current=c}),$n(()=>(j(c,y=>{m?.add(y.ctrl),y.ctrl.ref=m}),()=>{j(P.current,y=>{y.expired&&clearTimeout(y.expirationId),esm_xe(y.ctrl,m),y.ctrl.stop(!0)})}));let h=tr(b,r?r():e,l),g=o&&P.current||[];Je(()=>j(g,({ctrl:y,item:T,key:F})=>{esm_xe(y,m),esm_I(p,T,F)}));let x=[];if(l&&j(l,(y,T)=>{y.expired?(clearTimeout(y.expirationId),g.push(y)):(T=x[T]=h.indexOf(y.key),~T&&(c[T]=y))}),j(b,(y,T)=>{c[T]||(c[T]={key:h[T],item:y,phase:"mount",ctrl:new esm_le},c[T].ctrl.item=y)}),x.length){let y=-1,{leave:T}=r?r():e;j(x,(F,k)=>{let O=l[k];~F?(y=c.indexOf(O),c[y]={...O,item:b[F]}):T&&c.splice(++y,0,O)})}G.fun(s)&&c.sort((y,T)=>s(y.item,T.item));let S=-i,A=Wn(),V=dist_esm_ne(e),_=new Map,v=lt(new Map),w=lt(!1);j(c,(y,T)=>{let F=y.key,k=y.phase,O=r?r():e,U,D,Jt=esm_I(O.delay||0,F);if(k=="mount")U=O.enter,D="enter";else{let M=h.indexOf(F)<0;if(k!="leave")if(M)U=O.leave,D="leave";else if(U=O.update)D="update";else return;else if(!M)U=O.enter,D="enter";else return}if(U=esm_I(U,y.item,T),U=G.obj(U)?esm_de(U):{to:U},!U.config){let M=d||V.config;U.config=esm_I(M,y.item,T,D)}S+=i;let Z={...V,delay:Jt+S,ref:f,immediate:O.immediate,reset:!1,...U};if(D=="enter"&&G.und(Z.from)){let M=r?r():e,Te=G.und(M.initial)||l?M.from:M.initial;Z.from=esm_I(Te,y.item,T)}let{onResolve:Wt}=Z;Z.onResolve=M=>{esm_I(Wt,M);let Te=P.current,B=Te.find(Fe=>Fe.key===F);if(B&&!(M.cancelled&&B.phase!="update")&&B.ctrl.idle){let Fe=Te.every(ee=>ee.ctrl.idle);if(B.phase=="leave"){let ee=esm_I(a,B.item);if(ee!==!1){let Ze=ee===!0?0:ee;if(B.expired=!0,!Fe&&Ze>0){Ze<=2147483647&&(B.expirationId=setTimeout(A,Ze));return}}}Fe&&Te.some(ee=>ee.expired)&&(v.current.delete(B),u&&(w.current=!0),A())}};let ft=esm_e(y.ctrl,Z);D==="leave"&&u?v.current.set(y,{phase:D,springs:ft,payload:Z}):_.set(y,{phase:D,springs:ft,payload:Z})});let C=Hn(esm_H),$=Zn(C),L=C!==$&&esm_Ue(C);Je(()=>{L&&j(c,y=>{y.ctrl.start({default:C})})},[C]),j(_,(y,T)=>{if(v.current.size){let F=c.findIndex(k=>k.key===T.key);c.splice(F,1)}}),Je(()=>{j(v.current.size?v.current:_,({phase:y,payload:T},F)=>{let{ctrl:k}=F;F.phase=y,m?.add(k),L&&y=="enter"&&k.start({default:C}),T&&(esm_he(k,T.ref),(k.ref||m)&&!w.current?k.update(T):(k.start(T),w.current&&(w.current=!1)))})},o?void 0:n);let N=y=>Oe.createElement(Oe.Fragment,null,c.map((T,F)=>{let{springs:k}=_.get(T)||T.ctrl,O=y({...k},T.item,T,F);return O&&O.type?Oe.createElement(O.type,{...O.props,key:G.str(T.key)||G.num(T.key)?T.key:T.ctrl.id,ref:O.ref}):O}));return m?[N,m]:N}var esm_er=1;function tr(t,{key:e,keys:n=e},r){if(n===null){let o=new Set;return t.map(s=>{let i=r&&r.find(a=>a.item===s&&a.phase!=="leave"&&!o.has(a));return i?(o.add(i),i.key):esm_er++})}return G.und(n)?t:G.fun(n)?t.map(n):zt(n)}var hs=({container:t,...e}={})=>{let[n,r]=esm_J(()=>({scrollX:0,scrollY:0,scrollXProgress:0,scrollYProgress:0,...e}),[]);return or(()=>{let o=rr(({x:s,y:i})=>{r.start({scrollX:s.current,scrollXProgress:s.progress,scrollY:i.current,scrollYProgress:i.progress})},{container:t?.current||void 0});return()=>{nr(Object.values(n),s=>s.stop()),o()}},[]),n};var Ps=({container:t,...e})=>{let[n,r]=esm_J(()=>({width:0,height:0,...e}),[]);return ar(()=>{let o=sr(({width:s,height:i})=>{r.start({width:s,height:i,immediate:n.width.get()===0||n.height.get()===0})},{container:t?.current||void 0});return()=>{ir(Object.values(n),s=>s.stop()),o()}},[]),n};var cr={any:0,all:1};function Cs(t,e){let[n,r]=pr(!1),o=ur(),s=Bt.fun(t)&&t,i=s?s():{},{to:a={},from:u={},...p}=i,f=s?e:t,[d,m]=esm_J(()=>({from:u,...p}),[]);return lr(()=>{let b=o.current,{root:c,once:P,amount:l="any",...h}=f??{};if(!b||P&&n||typeof IntersectionObserver>"u")return;let g=new WeakMap,x=()=>(a&&m.start(a),r(!0),P?void 0:()=>{u&&m.start(u),r(!1)}),S=V=>{V.forEach(_=>{let v=g.get(_.target);if(_.isIntersecting!==!!v)if(_.isIntersecting){let w=x();Bt.fun(w)?g.set(_.target,w):A.unobserve(_.target)}else v&&(v(),g.delete(_.target))})},A=new IntersectionObserver(S,{root:c&&c.current||void 0,threshold:typeof l=="number"||Array.isArray(l)?l:cr[l],...h});return A.observe(b),()=>A.unobserve(b)},[f]),s?[o,d]:[o,n]}function qs({children:t,...e}){return t(esm_J(e))}function Bs({items:t,children:e,...n}){let r=esm_Qt(t.length,n);return t.map((o,s)=>{let i=e(o,s);return fr.fun(i)?i(r[s]):i})}function Ys({items:t,children:e,...n}){return esm_Gt(t,n)(e)}var esm_W=class extends esm_X{constructor(n,r){super();this.source=n;this.calc=W(...r);let o=this._get(),s=esm_Le(o);esm_D(this,s.create(o))}key;idle=!0;calc;_active=new Set;advance(n){let r=this._get(),o=this.get();bt(r,o)||(esm_k(this).setValue(r),this._onChange(r,this.idle)),!this.idle&&Yt(this._active)&&ct(this)}_get(){let n=esm_l.arr(this.source)?this.source.map(ve):ht(ve(this.source));return this.calc(...n)}_start(){this.idle&&!Yt(this._active)&&(this.idle=!1,Ve(F(this),n=>{n.done=!1}),esm_p.skipAnimation?(esm_n.batchedUpdates(()=>this.advance()),ct(this)):qe.start(this))}_attach(){let n=1;Ve(ht(this.source),r=>{Pt(r)&&Gt(r,this),esm_Re(r)&&(r.idle||this._active.add(r),n=Math.max(n,r.priority+1))}),this.priority=n,this._start()}_detach(){Ve(ht(this.source),n=>{Pt(n)&&Qt(n,this)}),this._active.clear(),ct(this)}eventObserved(n){n.type=="change"?n.idle?this.advance():(this._active.add(n.parent),this._start()):n.type=="idle"?this._active.delete(n.parent):n.type=="priority"&&(this.priority=ht(this.source).reduce((r,o)=>Math.max(r,(esm_Re(o)?o.priority:0)+1),0))}};function vr(t){return t.idle!==!1}function Yt(t){return!t.size||Array.from(t).every(vr)}function ct(t){t.idle||(t.idle=!0,Ve(F(t),e=>{e.done=!0}),$t(t,{type:"idle",parent:t}))}var ui=(t,...e)=>new esm_W(t,e),pi=(t,...e)=>(Cr(),new esm_W(t,e));esm_p.assign({createStringInterpolator:Xt,to:(t,e)=>new esm_W(t,e)});var di=qe.advance;
-
-;// CONCATENATED MODULE: ./node_modules/@react-spring/three/dist/esm/index.js
-var o=["primitive"].concat(Object.keys(three_module).filter(t=>/^[A-Z]/.test(t)).map(t=>t[0].toLowerCase()+t.slice(1)));esm_p.assign({createStringInterpolator:Xt,colors:It,frameLoop:"demand"});(0,react_three_fiber_esm.addEffect)(()=>{esm_n.advance()});var dist_esm_f=esm_Ke(o,{applyAnimatedValues:react_three_fiber_esm.applyProps}),dist_esm_E=dist_esm_f.animated;
-
-;// CONCATENATED MODULE: ./node_modules/@use-gesture/core/dist/maths-0ab39ae9.esm.js
-function clamp(v, min, max) {
-  return Math.max(min, Math.min(v, max));
-}
-const maths_0ab39ae9_esm_V = {
-  toVector(v, fallback) {
-    if (v === undefined) v = fallback;
-    return Array.isArray(v) ? v : [v, v];
-  },
-  add(v1, v2) {
-    return [v1[0] + v2[0], v1[1] + v2[1]];
-  },
-  sub(v1, v2) {
-    return [v1[0] - v2[0], v1[1] - v2[1]];
-  },
-  addTo(v1, v2) {
-    v1[0] += v2[0];
-    v1[1] += v2[1];
-  },
-  subTo(v1, v2) {
-    v1[0] -= v2[0];
-    v1[1] -= v2[1];
-  }
-};
-function rubberband(distance, dimension, constant) {
-  if (dimension === 0 || Math.abs(dimension) === Infinity) return Math.pow(distance, constant * 5);
-  return distance * dimension * constant / (dimension + constant * distance);
-}
-function rubberbandIfOutOfBounds(position, min, max, constant = 0.15) {
-  if (constant === 0) return clamp(position, min, max);
-  if (position < min) return -rubberband(min - position, max - min, constant) + min;
-  if (position > max) return +rubberband(position - max, max - min, constant) + max;
-  return position;
-}
-function computeRubberband(bounds, [Vx, Vy], [Rx, Ry]) {
-  const [[X0, X1], [Y0, Y1]] = bounds;
-  return [rubberbandIfOutOfBounds(Vx, X0, X1, Rx), rubberbandIfOutOfBounds(Vy, Y0, Y1, Ry)];
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@use-gesture/core/dist/actions-76b8683e.esm.js
-
-
-function _toPrimitive(input, hint) {
-  if (typeof input !== "object" || input === null) return input;
-  var prim = input[Symbol.toPrimitive];
-  if (prim !== undefined) {
-    var res = prim.call(input, hint || "default");
-    if (typeof res !== "object") return res;
-    throw new TypeError("@@toPrimitive must return a primitive value.");
-  }
-  return (hint === "string" ? String : Number)(input);
-}
-
-function _toPropertyKey(arg) {
-  var key = _toPrimitive(arg, "string");
-  return typeof key === "symbol" ? key : String(key);
-}
-
-function _defineProperty(obj, key, value) {
-  key = _toPropertyKey(key);
-  if (key in obj) {
-    Object.defineProperty(obj, key, {
-      value: value,
-      enumerable: true,
-      configurable: true,
-      writable: true
-    });
-  } else {
-    obj[key] = value;
-  }
-  return obj;
-}
-
-function ownKeys(object, enumerableOnly) {
-  var keys = Object.keys(object);
-  if (Object.getOwnPropertySymbols) {
-    var symbols = Object.getOwnPropertySymbols(object);
-    enumerableOnly && (symbols = symbols.filter(function (sym) {
-      return Object.getOwnPropertyDescriptor(object, sym).enumerable;
-    })), keys.push.apply(keys, symbols);
-  }
-  return keys;
-}
-function _objectSpread2(target) {
-  for (var i = 1; i < arguments.length; i++) {
-    var source = null != arguments[i] ? arguments[i] : {};
-    i % 2 ? ownKeys(Object(source), !0).forEach(function (key) {
-      _defineProperty(target, key, source[key]);
-    }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) {
-      Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
-    });
-  }
-  return target;
-}
-
-const EVENT_TYPE_MAP = {
-  pointer: {
-    start: 'down',
-    change: 'move',
-    end: 'up'
-  },
-  mouse: {
-    start: 'down',
-    change: 'move',
-    end: 'up'
-  },
-  touch: {
-    start: 'start',
-    change: 'move',
-    end: 'end'
-  },
-  gesture: {
-    start: 'start',
-    change: 'change',
-    end: 'end'
-  }
-};
-function capitalize(string) {
-  if (!string) return '';
-  return string[0].toUpperCase() + string.slice(1);
-}
-const actionsWithoutCaptureSupported = ['enter', 'leave'];
-function hasCapture(capture = false, actionKey) {
-  return capture && !actionsWithoutCaptureSupported.includes(actionKey);
-}
-function toHandlerProp(device, action = '', capture = false) {
-  const deviceProps = EVENT_TYPE_MAP[device];
-  const actionKey = deviceProps ? deviceProps[action] || action : action;
-  return 'on' + capitalize(device) + capitalize(actionKey) + (hasCapture(capture, actionKey) ? 'Capture' : '');
-}
-const pointerCaptureEvents = ['gotpointercapture', 'lostpointercapture'];
-function parseProp(prop) {
-  let eventKey = prop.substring(2).toLowerCase();
-  const passive = !!~eventKey.indexOf('passive');
-  if (passive) eventKey = eventKey.replace('passive', '');
-  const captureKey = pointerCaptureEvents.includes(eventKey) ? 'capturecapture' : 'capture';
-  const capture = !!~eventKey.indexOf(captureKey);
-  if (capture) eventKey = eventKey.replace('capture', '');
-  return {
-    device: eventKey,
-    capture,
-    passive
-  };
-}
-function toDomEventType(device, action = '') {
-  const deviceProps = EVENT_TYPE_MAP[device];
-  const actionKey = deviceProps ? deviceProps[action] || action : action;
-  return device + actionKey;
-}
-function isTouch(event) {
-  return 'touches' in event;
-}
-function getPointerType(event) {
-  if (isTouch(event)) return 'touch';
-  if ('pointerType' in event) return event.pointerType;
-  return 'mouse';
-}
-function getCurrentTargetTouchList(event) {
-  return Array.from(event.touches).filter(e => {
-    var _event$currentTarget, _event$currentTarget$;
-    return e.target === event.currentTarget || ((_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 ? void 0 : (_event$currentTarget$ = _event$currentTarget.contains) === null || _event$currentTarget$ === void 0 ? void 0 : _event$currentTarget$.call(_event$currentTarget, e.target));
-  });
-}
-function getTouchList(event) {
-  return event.type === 'touchend' || event.type === 'touchcancel' ? event.changedTouches : event.targetTouches;
-}
-function getValueEvent(event) {
-  return isTouch(event) ? getTouchList(event)[0] : event;
-}
-function distanceAngle(P1, P2) {
-  try {
-    const dx = P2.clientX - P1.clientX;
-    const dy = P2.clientY - P1.clientY;
-    const cx = (P2.clientX + P1.clientX) / 2;
-    const cy = (P2.clientY + P1.clientY) / 2;
-    const distance = Math.hypot(dx, dy);
-    const angle = -(Math.atan2(dx, dy) * 180) / Math.PI;
-    const origin = [cx, cy];
-    return {
-      angle,
-      distance,
-      origin
-    };
-  } catch (_unused) {}
-  return null;
-}
-function touchIds(event) {
-  return getCurrentTargetTouchList(event).map(touch => touch.identifier);
-}
-function touchDistanceAngle(event, ids) {
-  const [P1, P2] = Array.from(event.touches).filter(touch => ids.includes(touch.identifier));
-  return distanceAngle(P1, P2);
-}
-function pointerId(event) {
-  const valueEvent = getValueEvent(event);
-  return isTouch(event) ? valueEvent.identifier : valueEvent.pointerId;
-}
-function pointerValues(event) {
-  const valueEvent = getValueEvent(event);
-  return [valueEvent.clientX, valueEvent.clientY];
-}
-const LINE_HEIGHT = 40;
-const PAGE_HEIGHT = 800;
-function wheelValues(event) {
-  let {
-    deltaX,
-    deltaY,
-    deltaMode
-  } = event;
-  if (deltaMode === 1) {
-    deltaX *= LINE_HEIGHT;
-    deltaY *= LINE_HEIGHT;
-  } else if (deltaMode === 2) {
-    deltaX *= PAGE_HEIGHT;
-    deltaY *= PAGE_HEIGHT;
-  }
-  return [deltaX, deltaY];
-}
-function scrollValues(event) {
-  var _ref, _ref2;
-  const {
-    scrollX,
-    scrollY,
-    scrollLeft,
-    scrollTop
-  } = event.currentTarget;
-  return [(_ref = scrollX !== null && scrollX !== void 0 ? scrollX : scrollLeft) !== null && _ref !== void 0 ? _ref : 0, (_ref2 = scrollY !== null && scrollY !== void 0 ? scrollY : scrollTop) !== null && _ref2 !== void 0 ? _ref2 : 0];
-}
-function getEventDetails(event) {
-  const payload = {};
-  if ('buttons' in event) payload.buttons = event.buttons;
-  if ('shiftKey' in event) {
-    const {
-      shiftKey,
-      altKey,
-      metaKey,
-      ctrlKey
-    } = event;
-    Object.assign(payload, {
-      shiftKey,
-      altKey,
-      metaKey,
-      ctrlKey
-    });
-  }
-  return payload;
-}
-
-function call(v, ...args) {
-  if (typeof v === 'function') {
-    return v(...args);
-  } else {
-    return v;
-  }
-}
-function noop() {}
-function chain(...fns) {
-  if (fns.length === 0) return noop;
-  if (fns.length === 1) return fns[0];
-  return function () {
-    let result;
-    for (const fn of fns) {
-      result = fn.apply(this, arguments) || result;
-    }
-    return result;
-  };
-}
-function assignDefault(value, fallback) {
-  return Object.assign({}, fallback, value || {});
-}
-
-const BEFORE_LAST_KINEMATICS_DELAY = 32;
-class Engine {
-  constructor(ctrl, args, key) {
-    this.ctrl = ctrl;
-    this.args = args;
-    this.key = key;
-    if (!this.state) {
-      this.state = {};
-      this.computeValues([0, 0]);
-      this.computeInitial();
-      if (this.init) this.init();
-      this.reset();
-    }
-  }
-  get state() {
-    return this.ctrl.state[this.key];
-  }
-  set state(state) {
-    this.ctrl.state[this.key] = state;
-  }
-  get shared() {
-    return this.ctrl.state.shared;
-  }
-  get eventStore() {
-    return this.ctrl.gestureEventStores[this.key];
-  }
-  get timeoutStore() {
-    return this.ctrl.gestureTimeoutStores[this.key];
-  }
-  get config() {
-    return this.ctrl.config[this.key];
-  }
-  get sharedConfig() {
-    return this.ctrl.config.shared;
-  }
-  get handler() {
-    return this.ctrl.handlers[this.key];
-  }
-  reset() {
-    const {
-      state,
-      shared,
-      ingKey,
-      args
-    } = this;
-    shared[ingKey] = state._active = state.active = state._blocked = state._force = false;
-    state._step = [false, false];
-    state.intentional = false;
-    state._movement = [0, 0];
-    state._distance = [0, 0];
-    state._direction = [0, 0];
-    state._delta = [0, 0];
-    state._bounds = [[-Infinity, Infinity], [-Infinity, Infinity]];
-    state.args = args;
-    state.axis = undefined;
-    state.memo = undefined;
-    state.elapsedTime = state.timeDelta = 0;
-    state.direction = [0, 0];
-    state.distance = [0, 0];
-    state.overflow = [0, 0];
-    state._movementBound = [false, false];
-    state.velocity = [0, 0];
-    state.movement = [0, 0];
-    state.delta = [0, 0];
-    state.timeStamp = 0;
-  }
-  start(event) {
-    const state = this.state;
-    const config = this.config;
-    if (!state._active) {
-      this.reset();
-      this.computeInitial();
-      state._active = true;
-      state.target = event.target;
-      state.currentTarget = event.currentTarget;
-      state.lastOffset = config.from ? call(config.from, state) : state.offset;
-      state.offset = state.lastOffset;
-      state.startTime = state.timeStamp = event.timeStamp;
-    }
-  }
-  computeValues(values) {
-    const state = this.state;
-    state._values = values;
-    state.values = this.config.transform(values);
-  }
-  computeInitial() {
-    const state = this.state;
-    state._initial = state._values;
-    state.initial = state.values;
-  }
-  compute(event) {
-    const {
-      state,
-      config,
-      shared
-    } = this;
-    state.args = this.args;
-    let dt = 0;
-    if (event) {
-      state.event = event;
-      if (config.preventDefault && event.cancelable) state.event.preventDefault();
-      state.type = event.type;
-      shared.touches = this.ctrl.pointerIds.size || this.ctrl.touchIds.size;
-      shared.locked = !!document.pointerLockElement;
-      Object.assign(shared, getEventDetails(event));
-      shared.down = shared.pressed = shared.buttons % 2 === 1 || shared.touches > 0;
-      dt = event.timeStamp - state.timeStamp;
-      state.timeStamp = event.timeStamp;
-      state.elapsedTime = state.timeStamp - state.startTime;
-    }
-    if (state._active) {
-      const _absoluteDelta = state._delta.map(Math.abs);
-      maths_0ab39ae9_esm_V.addTo(state._distance, _absoluteDelta);
-    }
-    if (this.axisIntent) this.axisIntent(event);
-    const [_m0, _m1] = state._movement;
-    const [t0, t1] = config.threshold;
-    const {
-      _step,
-      values
-    } = state;
-    if (config.hasCustomTransform) {
-      if (_step[0] === false) _step[0] = Math.abs(_m0) >= t0 && values[0];
-      if (_step[1] === false) _step[1] = Math.abs(_m1) >= t1 && values[1];
-    } else {
-      if (_step[0] === false) _step[0] = Math.abs(_m0) >= t0 && Math.sign(_m0) * t0;
-      if (_step[1] === false) _step[1] = Math.abs(_m1) >= t1 && Math.sign(_m1) * t1;
-    }
-    state.intentional = _step[0] !== false || _step[1] !== false;
-    if (!state.intentional) return;
-    const movement = [0, 0];
-    if (config.hasCustomTransform) {
-      const [v0, v1] = values;
-      movement[0] = _step[0] !== false ? v0 - _step[0] : 0;
-      movement[1] = _step[1] !== false ? v1 - _step[1] : 0;
-    } else {
-      movement[0] = _step[0] !== false ? _m0 - _step[0] : 0;
-      movement[1] = _step[1] !== false ? _m1 - _step[1] : 0;
-    }
-    if (this.restrictToAxis && !state._blocked) this.restrictToAxis(movement);
-    const previousOffset = state.offset;
-    const gestureIsActive = state._active && !state._blocked || state.active;
-    if (gestureIsActive) {
-      state.first = state._active && !state.active;
-      state.last = !state._active && state.active;
-      state.active = shared[this.ingKey] = state._active;
-      if (event) {
-        if (state.first) {
-          if ('bounds' in config) state._bounds = call(config.bounds, state);
-          if (this.setup) this.setup();
-        }
-        state.movement = movement;
-        this.computeOffset();
-      }
-    }
-    const [ox, oy] = state.offset;
-    const [[x0, x1], [y0, y1]] = state._bounds;
-    state.overflow = [ox < x0 ? -1 : ox > x1 ? 1 : 0, oy < y0 ? -1 : oy > y1 ? 1 : 0];
-    state._movementBound[0] = state.overflow[0] ? state._movementBound[0] === false ? state._movement[0] : state._movementBound[0] : false;
-    state._movementBound[1] = state.overflow[1] ? state._movementBound[1] === false ? state._movement[1] : state._movementBound[1] : false;
-    const rubberband = state._active ? config.rubberband || [0, 0] : [0, 0];
-    state.offset = computeRubberband(state._bounds, state.offset, rubberband);
-    state.delta = maths_0ab39ae9_esm_V.sub(state.offset, previousOffset);
-    this.computeMovement();
-    if (gestureIsActive && (!state.last || dt > BEFORE_LAST_KINEMATICS_DELAY)) {
-      state.delta = maths_0ab39ae9_esm_V.sub(state.offset, previousOffset);
-      const absoluteDelta = state.delta.map(Math.abs);
-      maths_0ab39ae9_esm_V.addTo(state.distance, absoluteDelta);
-      state.direction = state.delta.map(Math.sign);
-      state._direction = state._delta.map(Math.sign);
-      if (!state.first && dt > 0) {
-        state.velocity = [absoluteDelta[0] / dt, absoluteDelta[1] / dt];
-        state.timeDelta = dt;
-      }
-    }
-  }
-  emit() {
-    const state = this.state;
-    const shared = this.shared;
-    const config = this.config;
-    if (!state._active) this.clean();
-    if ((state._blocked || !state.intentional) && !state._force && !config.triggerAllEvents) return;
-    const memo = this.handler(_objectSpread2(_objectSpread2(_objectSpread2({}, shared), state), {}, {
-      [this.aliasKey]: state.values
-    }));
-    if (memo !== undefined) state.memo = memo;
-  }
-  clean() {
-    this.eventStore.clean();
-    this.timeoutStore.clean();
-  }
-}
-
-function selectAxis([dx, dy], threshold) {
-  const absDx = Math.abs(dx);
-  const absDy = Math.abs(dy);
-  if (absDx > absDy && absDx > threshold) {
-    return 'x';
-  }
-  if (absDy > absDx && absDy > threshold) {
-    return 'y';
-  }
-  return undefined;
-}
-class CoordinatesEngine extends Engine {
-  constructor(...args) {
-    super(...args);
-    _defineProperty(this, "aliasKey", 'xy');
-  }
-  reset() {
-    super.reset();
-    this.state.axis = undefined;
-  }
-  init() {
-    this.state.offset = [0, 0];
-    this.state.lastOffset = [0, 0];
-  }
-  computeOffset() {
-    this.state.offset = maths_0ab39ae9_esm_V.add(this.state.lastOffset, this.state.movement);
-  }
-  computeMovement() {
-    this.state.movement = maths_0ab39ae9_esm_V.sub(this.state.offset, this.state.lastOffset);
-  }
-  axisIntent(event) {
-    const state = this.state;
-    const config = this.config;
-    if (!state.axis && event) {
-      const threshold = typeof config.axisThreshold === 'object' ? config.axisThreshold[getPointerType(event)] : config.axisThreshold;
-      state.axis = selectAxis(state._movement, threshold);
-    }
-    state._blocked = (config.lockDirection || !!config.axis) && !state.axis || !!config.axis && config.axis !== state.axis;
-  }
-  restrictToAxis(v) {
-    if (this.config.axis || this.config.lockDirection) {
-      switch (this.state.axis) {
-        case 'x':
-          v[1] = 0;
-          break;
-        case 'y':
-          v[0] = 0;
-          break;
-      }
-    }
-  }
-}
-
-const identity = v => v;
-const DEFAULT_RUBBERBAND = 0.15;
-const commonConfigResolver = {
-  enabled(value = true) {
-    return value;
-  },
-  eventOptions(value, _k, config) {
-    return _objectSpread2(_objectSpread2({}, config.shared.eventOptions), value);
-  },
-  preventDefault(value = false) {
-    return value;
-  },
-  triggerAllEvents(value = false) {
-    return value;
-  },
-  rubberband(value = 0) {
-    switch (value) {
-      case true:
-        return [DEFAULT_RUBBERBAND, DEFAULT_RUBBERBAND];
-      case false:
-        return [0, 0];
-      default:
-        return maths_0ab39ae9_esm_V.toVector(value);
-    }
-  },
-  from(value) {
-    if (typeof value === 'function') return value;
-    if (value != null) return maths_0ab39ae9_esm_V.toVector(value);
-  },
-  transform(value, _k, config) {
-    const transform = value || config.shared.transform;
-    this.hasCustomTransform = !!transform;
-    if (false) {}
-    return transform || identity;
-  },
-  threshold(value) {
-    return maths_0ab39ae9_esm_V.toVector(value, 0);
-  }
-};
-if (false) {}
-
-const DEFAULT_AXIS_THRESHOLD = 0;
-const coordinatesConfigResolver = _objectSpread2(_objectSpread2({}, commonConfigResolver), {}, {
-  axis(_v, _k, {
-    axis
-  }) {
-    this.lockDirection = axis === 'lock';
-    if (!this.lockDirection) return axis;
-  },
-  axisThreshold(value = DEFAULT_AXIS_THRESHOLD) {
-    return value;
-  },
-  bounds(value = {}) {
-    if (typeof value === 'function') {
-      return state => coordinatesConfigResolver.bounds(value(state));
-    }
-    if ('current' in value) {
-      return () => value.current;
-    }
-    if (typeof HTMLElement === 'function' && value instanceof HTMLElement) {
-      return value;
-    }
-    const {
-      left = -Infinity,
-      right = Infinity,
-      top = -Infinity,
-      bottom = Infinity
-    } = value;
-    return [[left, right], [top, bottom]];
-  }
-});
-
-const KEYS_DELTA_MAP = {
-  ArrowRight: (displacement, factor = 1) => [displacement * factor, 0],
-  ArrowLeft: (displacement, factor = 1) => [-1 * displacement * factor, 0],
-  ArrowUp: (displacement, factor = 1) => [0, -1 * displacement * factor],
-  ArrowDown: (displacement, factor = 1) => [0, displacement * factor]
-};
-class DragEngine extends CoordinatesEngine {
-  constructor(...args) {
-    super(...args);
-    _defineProperty(this, "ingKey", 'dragging');
-  }
-  reset() {
-    super.reset();
-    const state = this.state;
-    state._pointerId = undefined;
-    state._pointerActive = false;
-    state._keyboardActive = false;
-    state._preventScroll = false;
-    state._delayed = false;
-    state.swipe = [0, 0];
-    state.tap = false;
-    state.canceled = false;
-    state.cancel = this.cancel.bind(this);
-  }
-  setup() {
-    const state = this.state;
-    if (state._bounds instanceof HTMLElement) {
-      const boundRect = state._bounds.getBoundingClientRect();
-      const targetRect = state.currentTarget.getBoundingClientRect();
-      const _bounds = {
-        left: boundRect.left - targetRect.left + state.offset[0],
-        right: boundRect.right - targetRect.right + state.offset[0],
-        top: boundRect.top - targetRect.top + state.offset[1],
-        bottom: boundRect.bottom - targetRect.bottom + state.offset[1]
-      };
-      state._bounds = coordinatesConfigResolver.bounds(_bounds);
-    }
-  }
-  cancel() {
-    const state = this.state;
-    if (state.canceled) return;
-    state.canceled = true;
-    state._active = false;
-    setTimeout(() => {
-      this.compute();
-      this.emit();
-    }, 0);
-  }
-  setActive() {
-    this.state._active = this.state._pointerActive || this.state._keyboardActive;
-  }
-  clean() {
-    this.pointerClean();
-    this.state._pointerActive = false;
-    this.state._keyboardActive = false;
-    super.clean();
-  }
-  pointerDown(event) {
-    const config = this.config;
-    const state = this.state;
-    if (event.buttons != null && (Array.isArray(config.pointerButtons) ? !config.pointerButtons.includes(event.buttons) : config.pointerButtons !== -1 && config.pointerButtons !== event.buttons)) return;
-    const ctrlIds = this.ctrl.setEventIds(event);
-    if (config.pointerCapture) {
-      event.target.setPointerCapture(event.pointerId);
-    }
-    if (ctrlIds && ctrlIds.size > 1 && state._pointerActive) return;
-    this.start(event);
-    this.setupPointer(event);
-    state._pointerId = pointerId(event);
-    state._pointerActive = true;
-    this.computeValues(pointerValues(event));
-    this.computeInitial();
-    if (config.preventScrollAxis && getPointerType(event) !== 'mouse') {
-      state._active = false;
-      this.setupScrollPrevention(event);
-    } else if (config.delay > 0) {
-      this.setupDelayTrigger(event);
-      if (config.triggerAllEvents) {
-        this.compute(event);
-        this.emit();
-      }
-    } else {
-      this.startPointerDrag(event);
-    }
-  }
-  startPointerDrag(event) {
-    const state = this.state;
-    state._active = true;
-    state._preventScroll = true;
-    state._delayed = false;
-    this.compute(event);
-    this.emit();
-  }
-  pointerMove(event) {
-    const state = this.state;
-    const config = this.config;
-    if (!state._pointerActive) return;
-    const id = pointerId(event);
-    if (state._pointerId !== undefined && id !== state._pointerId) return;
-    const _values = pointerValues(event);
-    if (document.pointerLockElement === event.target) {
-      state._delta = [event.movementX, event.movementY];
-    } else {
-      state._delta = maths_0ab39ae9_esm_V.sub(_values, state._values);
-      this.computeValues(_values);
-    }
-    maths_0ab39ae9_esm_V.addTo(state._movement, state._delta);
-    this.compute(event);
-    if (state._delayed && state.intentional) {
-      this.timeoutStore.remove('dragDelay');
-      state.active = false;
-      this.startPointerDrag(event);
-      return;
-    }
-    if (config.preventScrollAxis && !state._preventScroll) {
-      if (state.axis) {
-        if (state.axis === config.preventScrollAxis || config.preventScrollAxis === 'xy') {
-          state._active = false;
-          this.clean();
-          return;
-        } else {
-          this.timeoutStore.remove('startPointerDrag');
-          this.startPointerDrag(event);
-          return;
-        }
-      } else {
-        return;
-      }
-    }
-    this.emit();
-  }
-  pointerUp(event) {
-    this.ctrl.setEventIds(event);
-    try {
-      if (this.config.pointerCapture && event.target.hasPointerCapture(event.pointerId)) {
-        ;
-        event.target.releasePointerCapture(event.pointerId);
-      }
-    } catch (_unused) {
-      if (false) {}
-    }
-    const state = this.state;
-    const config = this.config;
-    if (!state._active || !state._pointerActive) return;
-    const id = pointerId(event);
-    if (state._pointerId !== undefined && id !== state._pointerId) return;
-    this.state._pointerActive = false;
-    this.setActive();
-    this.compute(event);
-    const [dx, dy] = state._distance;
-    state.tap = dx <= config.tapsThreshold && dy <= config.tapsThreshold;
-    if (state.tap && config.filterTaps) {
-      state._force = true;
-    } else {
-      const [_dx, _dy] = state._delta;
-      const [_mx, _my] = state._movement;
-      const [svx, svy] = config.swipe.velocity;
-      const [sx, sy] = config.swipe.distance;
-      const sdt = config.swipe.duration;
-      if (state.elapsedTime < sdt) {
-        const _vx = Math.abs(_dx / state.timeDelta);
-        const _vy = Math.abs(_dy / state.timeDelta);
-        if (_vx > svx && Math.abs(_mx) > sx) state.swipe[0] = Math.sign(_dx);
-        if (_vy > svy && Math.abs(_my) > sy) state.swipe[1] = Math.sign(_dy);
-      }
-    }
-    this.emit();
-  }
-  pointerClick(event) {
-    if (!this.state.tap && event.detail > 0) {
-      event.preventDefault();
-      event.stopPropagation();
-    }
-  }
-  setupPointer(event) {
-    const config = this.config;
-    const device = config.device;
-    if (false) {}
-    if (config.pointerLock) {
-      event.currentTarget.requestPointerLock();
-    }
-    if (!config.pointerCapture) {
-      this.eventStore.add(this.sharedConfig.window, device, 'change', this.pointerMove.bind(this));
-      this.eventStore.add(this.sharedConfig.window, device, 'end', this.pointerUp.bind(this));
-      this.eventStore.add(this.sharedConfig.window, device, 'cancel', this.pointerUp.bind(this));
-    }
-  }
-  pointerClean() {
-    if (this.config.pointerLock && document.pointerLockElement === this.state.currentTarget) {
-      document.exitPointerLock();
-    }
-  }
-  preventScroll(event) {
-    if (this.state._preventScroll && event.cancelable) {
-      event.preventDefault();
-    }
-  }
-  setupScrollPrevention(event) {
-    this.state._preventScroll = false;
-    persistEvent(event);
-    const remove = this.eventStore.add(this.sharedConfig.window, 'touch', 'change', this.preventScroll.bind(this), {
-      passive: false
-    });
-    this.eventStore.add(this.sharedConfig.window, 'touch', 'end', remove);
-    this.eventStore.add(this.sharedConfig.window, 'touch', 'cancel', remove);
-    this.timeoutStore.add('startPointerDrag', this.startPointerDrag.bind(this), this.config.preventScrollDelay, event);
-  }
-  setupDelayTrigger(event) {
-    this.state._delayed = true;
-    this.timeoutStore.add('dragDelay', () => {
-      this.state._step = [0, 0];
-      this.startPointerDrag(event);
-    }, this.config.delay);
-  }
-  keyDown(event) {
-    const deltaFn = KEYS_DELTA_MAP[event.key];
-    if (deltaFn) {
-      const state = this.state;
-      const factor = event.shiftKey ? 10 : event.altKey ? 0.1 : 1;
-      this.start(event);
-      state._delta = deltaFn(this.config.keyboardDisplacement, factor);
-      state._keyboardActive = true;
-      maths_0ab39ae9_esm_V.addTo(state._movement, state._delta);
-      this.compute(event);
-      this.emit();
-    }
-  }
-  keyUp(event) {
-    if (!(event.key in KEYS_DELTA_MAP)) return;
-    this.state._keyboardActive = false;
-    this.setActive();
-    this.compute(event);
-    this.emit();
-  }
-  bind(bindFunction) {
-    const device = this.config.device;
-    bindFunction(device, 'start', this.pointerDown.bind(this));
-    if (this.config.pointerCapture) {
-      bindFunction(device, 'change', this.pointerMove.bind(this));
-      bindFunction(device, 'end', this.pointerUp.bind(this));
-      bindFunction(device, 'cancel', this.pointerUp.bind(this));
-      bindFunction('lostPointerCapture', '', this.pointerUp.bind(this));
-    }
-    if (this.config.keys) {
-      bindFunction('key', 'down', this.keyDown.bind(this));
-      bindFunction('key', 'up', this.keyUp.bind(this));
-    }
-    if (this.config.filterTaps) {
-      bindFunction('click', '', this.pointerClick.bind(this), {
-        capture: true,
-        passive: false
-      });
-    }
-  }
-}
-function persistEvent(event) {
-  'persist' in event && typeof event.persist === 'function' && event.persist();
-}
-
-const isBrowser = typeof window !== 'undefined' && window.document && window.document.createElement;
-function supportsTouchEvents() {
-  return isBrowser && 'ontouchstart' in window;
-}
-function isTouchScreen() {
-  return supportsTouchEvents() || isBrowser && window.navigator.maxTouchPoints > 1;
-}
-function supportsPointerEvents() {
-  return isBrowser && 'onpointerdown' in window;
-}
-function supportsPointerLock() {
-  return isBrowser && 'exitPointerLock' in window.document;
-}
-function supportsGestureEvents() {
-  try {
-    return 'constructor' in GestureEvent;
-  } catch (e) {
-    return false;
-  }
-}
-const SUPPORT = {
-  isBrowser,
-  gesture: supportsGestureEvents(),
-  touch: isTouchScreen(),
-  touchscreen: isTouchScreen(),
-  pointer: supportsPointerEvents(),
-  pointerLock: supportsPointerLock()
-};
-
-const DEFAULT_PREVENT_SCROLL_DELAY = 250;
-const DEFAULT_DRAG_DELAY = 180;
-const DEFAULT_SWIPE_VELOCITY = 0.5;
-const DEFAULT_SWIPE_DISTANCE = 50;
-const DEFAULT_SWIPE_DURATION = 250;
-const DEFAULT_KEYBOARD_DISPLACEMENT = 10;
-const DEFAULT_DRAG_AXIS_THRESHOLD = {
-  mouse: 0,
-  touch: 0,
-  pen: 8
-};
-const dragConfigResolver = _objectSpread2(_objectSpread2({}, coordinatesConfigResolver), {}, {
-  device(_v, _k, {
-    pointer: {
-      touch = false,
-      lock = false,
-      mouse = false
-    } = {}
-  }) {
-    this.pointerLock = lock && SUPPORT.pointerLock;
-    if (SUPPORT.touch && touch) return 'touch';
-    if (this.pointerLock) return 'mouse';
-    if (SUPPORT.pointer && !mouse) return 'pointer';
-    if (SUPPORT.touch) return 'touch';
-    return 'mouse';
-  },
-  preventScrollAxis(value, _k, {
-    preventScroll
-  }) {
-    this.preventScrollDelay = typeof preventScroll === 'number' ? preventScroll : preventScroll || preventScroll === undefined && value ? DEFAULT_PREVENT_SCROLL_DELAY : undefined;
-    if (!SUPPORT.touchscreen || preventScroll === false) return undefined;
-    return value ? value : preventScroll !== undefined ? 'y' : undefined;
-  },
-  pointerCapture(_v, _k, {
-    pointer: {
-      capture = true,
-      buttons = 1,
-      keys = true
-    } = {}
-  }) {
-    this.pointerButtons = buttons;
-    this.keys = keys;
-    return !this.pointerLock && this.device === 'pointer' && capture;
-  },
-  threshold(value, _k, {
-    filterTaps = false,
-    tapsThreshold = 3,
-    axis = undefined
-  }) {
-    const threshold = maths_0ab39ae9_esm_V.toVector(value, filterTaps ? tapsThreshold : axis ? 1 : 0);
-    this.filterTaps = filterTaps;
-    this.tapsThreshold = tapsThreshold;
-    return threshold;
-  },
-  swipe({
-    velocity = DEFAULT_SWIPE_VELOCITY,
-    distance = DEFAULT_SWIPE_DISTANCE,
-    duration = DEFAULT_SWIPE_DURATION
-  } = {}) {
-    return {
-      velocity: this.transform(maths_0ab39ae9_esm_V.toVector(velocity)),
-      distance: this.transform(maths_0ab39ae9_esm_V.toVector(distance)),
-      duration
-    };
-  },
-  delay(value = 0) {
-    switch (value) {
-      case true:
-        return DEFAULT_DRAG_DELAY;
-      case false:
-        return 0;
-      default:
-        return value;
-    }
-  },
-  axisThreshold(value) {
-    if (!value) return DEFAULT_DRAG_AXIS_THRESHOLD;
-    return _objectSpread2(_objectSpread2({}, DEFAULT_DRAG_AXIS_THRESHOLD), value);
-  },
-  keyboardDisplacement(value = DEFAULT_KEYBOARD_DISPLACEMENT) {
-    return value;
-  }
-});
-if (false) {}
-
-function clampStateInternalMovementToBounds(state) {
-  const [ox, oy] = state.overflow;
-  const [dx, dy] = state._delta;
-  const [dirx, diry] = state._direction;
-  if (ox < 0 && dx > 0 && dirx < 0 || ox > 0 && dx < 0 && dirx > 0) {
-    state._movement[0] = state._movementBound[0];
-  }
-  if (oy < 0 && dy > 0 && diry < 0 || oy > 0 && dy < 0 && diry > 0) {
-    state._movement[1] = state._movementBound[1];
-  }
-}
-
-const SCALE_ANGLE_RATIO_INTENT_DEG = 30;
-const PINCH_WHEEL_RATIO = 100;
-class PinchEngine extends Engine {
-  constructor(...args) {
-    super(...args);
-    _defineProperty(this, "ingKey", 'pinching');
-    _defineProperty(this, "aliasKey", 'da');
-  }
-  init() {
-    this.state.offset = [1, 0];
-    this.state.lastOffset = [1, 0];
-    this.state._pointerEvents = new Map();
-  }
-  reset() {
-    super.reset();
-    const state = this.state;
-    state._touchIds = [];
-    state.canceled = false;
-    state.cancel = this.cancel.bind(this);
-    state.turns = 0;
-  }
-  computeOffset() {
-    const {
-      type,
-      movement,
-      lastOffset
-    } = this.state;
-    if (type === 'wheel') {
-      this.state.offset = maths_0ab39ae9_esm_V.add(movement, lastOffset);
-    } else {
-      this.state.offset = [(1 + movement[0]) * lastOffset[0], movement[1] + lastOffset[1]];
-    }
-  }
-  computeMovement() {
-    const {
-      offset,
-      lastOffset
-    } = this.state;
-    this.state.movement = [offset[0] / lastOffset[0], offset[1] - lastOffset[1]];
-  }
-  axisIntent() {
-    const state = this.state;
-    const [_m0, _m1] = state._movement;
-    if (!state.axis) {
-      const axisMovementDifference = Math.abs(_m0) * SCALE_ANGLE_RATIO_INTENT_DEG - Math.abs(_m1);
-      if (axisMovementDifference < 0) state.axis = 'angle';else if (axisMovementDifference > 0) state.axis = 'scale';
-    }
-  }
-  restrictToAxis(v) {
-    if (this.config.lockDirection) {
-      if (this.state.axis === 'scale') v[1] = 0;else if (this.state.axis === 'angle') v[0] = 0;
-    }
-  }
-  cancel() {
-    const state = this.state;
-    if (state.canceled) return;
-    setTimeout(() => {
-      state.canceled = true;
-      state._active = false;
-      this.compute();
-      this.emit();
-    }, 0);
-  }
-  touchStart(event) {
-    this.ctrl.setEventIds(event);
-    const state = this.state;
-    const ctrlTouchIds = this.ctrl.touchIds;
-    if (state._active) {
-      if (state._touchIds.every(id => ctrlTouchIds.has(id))) return;
-    }
-    if (ctrlTouchIds.size < 2) return;
-    this.start(event);
-    state._touchIds = Array.from(ctrlTouchIds).slice(0, 2);
-    const payload = touchDistanceAngle(event, state._touchIds);
-    if (!payload) return;
-    this.pinchStart(event, payload);
-  }
-  pointerStart(event) {
-    if (event.buttons != null && event.buttons % 2 !== 1) return;
-    this.ctrl.setEventIds(event);
-    event.target.setPointerCapture(event.pointerId);
-    const state = this.state;
-    const _pointerEvents = state._pointerEvents;
-    const ctrlPointerIds = this.ctrl.pointerIds;
-    if (state._active) {
-      if (Array.from(_pointerEvents.keys()).every(id => ctrlPointerIds.has(id))) return;
-    }
-    if (_pointerEvents.size < 2) {
-      _pointerEvents.set(event.pointerId, event);
-    }
-    if (state._pointerEvents.size < 2) return;
-    this.start(event);
-    const payload = distanceAngle(...Array.from(_pointerEvents.values()));
-    if (!payload) return;
-    this.pinchStart(event, payload);
-  }
-  pinchStart(event, payload) {
-    const state = this.state;
-    state.origin = payload.origin;
-    this.computeValues([payload.distance, payload.angle]);
-    this.computeInitial();
-    this.compute(event);
-    this.emit();
-  }
-  touchMove(event) {
-    if (!this.state._active) return;
-    const payload = touchDistanceAngle(event, this.state._touchIds);
-    if (!payload) return;
-    this.pinchMove(event, payload);
-  }
-  pointerMove(event) {
-    const _pointerEvents = this.state._pointerEvents;
-    if (_pointerEvents.has(event.pointerId)) {
-      _pointerEvents.set(event.pointerId, event);
-    }
-    if (!this.state._active) return;
-    const payload = distanceAngle(...Array.from(_pointerEvents.values()));
-    if (!payload) return;
-    this.pinchMove(event, payload);
-  }
-  pinchMove(event, payload) {
-    const state = this.state;
-    const prev_a = state._values[1];
-    const delta_a = payload.angle - prev_a;
-    let delta_turns = 0;
-    if (Math.abs(delta_a) > 270) delta_turns += Math.sign(delta_a);
-    this.computeValues([payload.distance, payload.angle - 360 * delta_turns]);
-    state.origin = payload.origin;
-    state.turns = delta_turns;
-    state._movement = [state._values[0] / state._initial[0] - 1, state._values[1] - state._initial[1]];
-    this.compute(event);
-    this.emit();
-  }
-  touchEnd(event) {
-    this.ctrl.setEventIds(event);
-    if (!this.state._active) return;
-    if (this.state._touchIds.some(id => !this.ctrl.touchIds.has(id))) {
-      this.state._active = false;
-      this.compute(event);
-      this.emit();
-    }
-  }
-  pointerEnd(event) {
-    const state = this.state;
-    this.ctrl.setEventIds(event);
-    try {
-      event.target.releasePointerCapture(event.pointerId);
-    } catch (_unused) {}
-    if (state._pointerEvents.has(event.pointerId)) {
-      state._pointerEvents.delete(event.pointerId);
-    }
-    if (!state._active) return;
-    if (state._pointerEvents.size < 2) {
-      state._active = false;
-      this.compute(event);
-      this.emit();
-    }
-  }
-  gestureStart(event) {
-    if (event.cancelable) event.preventDefault();
-    const state = this.state;
-    if (state._active) return;
-    this.start(event);
-    this.computeValues([event.scale, event.rotation]);
-    state.origin = [event.clientX, event.clientY];
-    this.compute(event);
-    this.emit();
-  }
-  gestureMove(event) {
-    if (event.cancelable) event.preventDefault();
-    if (!this.state._active) return;
-    const state = this.state;
-    this.computeValues([event.scale, event.rotation]);
-    state.origin = [event.clientX, event.clientY];
-    const _previousMovement = state._movement;
-    state._movement = [event.scale - 1, event.rotation];
-    state._delta = maths_0ab39ae9_esm_V.sub(state._movement, _previousMovement);
-    this.compute(event);
-    this.emit();
-  }
-  gestureEnd(event) {
-    if (!this.state._active) return;
-    this.state._active = false;
-    this.compute(event);
-    this.emit();
-  }
-  wheel(event) {
-    const modifierKey = this.config.modifierKey;
-    if (modifierKey && !event[modifierKey]) return;
-    if (!this.state._active) this.wheelStart(event);else this.wheelChange(event);
-    this.timeoutStore.add('wheelEnd', this.wheelEnd.bind(this));
-  }
-  wheelStart(event) {
-    this.start(event);
-    this.wheelChange(event);
-  }
-  wheelChange(event) {
-    const isR3f = ('uv' in event);
-    if (!isR3f) {
-      if (event.cancelable) {
-        event.preventDefault();
-      }
-      if (false) {}
-    }
-    const state = this.state;
-    state._delta = [-wheelValues(event)[1] / PINCH_WHEEL_RATIO * state.offset[0], 0];
-    maths_0ab39ae9_esm_V.addTo(state._movement, state._delta);
-    clampStateInternalMovementToBounds(state);
-    this.state.origin = [event.clientX, event.clientY];
-    this.compute(event);
-    this.emit();
-  }
-  wheelEnd() {
-    if (!this.state._active) return;
-    this.state._active = false;
-    this.compute();
-    this.emit();
-  }
-  bind(bindFunction) {
-    const device = this.config.device;
-    if (!!device) {
-      bindFunction(device, 'start', this[device + 'Start'].bind(this));
-      bindFunction(device, 'change', this[device + 'Move'].bind(this));
-      bindFunction(device, 'end', this[device + 'End'].bind(this));
-      bindFunction(device, 'cancel', this[device + 'End'].bind(this));
-      bindFunction('lostPointerCapture', '', this[device + 'End'].bind(this));
-    }
-    if (this.config.pinchOnWheel) {
-      bindFunction('wheel', '', this.wheel.bind(this), {
-        passive: false
-      });
-    }
-  }
-}
-
-const pinchConfigResolver = _objectSpread2(_objectSpread2({}, commonConfigResolver), {}, {
-  device(_v, _k, {
-    shared,
-    pointer: {
-      touch = false
-    } = {}
-  }) {
-    const sharedConfig = shared;
-    if (sharedConfig.target && !SUPPORT.touch && SUPPORT.gesture) return 'gesture';
-    if (SUPPORT.touch && touch) return 'touch';
-    if (SUPPORT.touchscreen) {
-      if (SUPPORT.pointer) return 'pointer';
-      if (SUPPORT.touch) return 'touch';
-    }
-  },
-  bounds(_v, _k, {
-    scaleBounds = {},
-    angleBounds = {}
-  }) {
-    const _scaleBounds = state => {
-      const D = assignDefault(call(scaleBounds, state), {
-        min: -Infinity,
-        max: Infinity
-      });
-      return [D.min, D.max];
-    };
-    const _angleBounds = state => {
-      const A = assignDefault(call(angleBounds, state), {
-        min: -Infinity,
-        max: Infinity
-      });
-      return [A.min, A.max];
-    };
-    if (typeof scaleBounds !== 'function' && typeof angleBounds !== 'function') return [_scaleBounds(), _angleBounds()];
-    return state => [_scaleBounds(state), _angleBounds(state)];
-  },
-  threshold(value, _k, config) {
-    this.lockDirection = config.axis === 'lock';
-    const threshold = maths_0ab39ae9_esm_V.toVector(value, this.lockDirection ? [0.1, 3] : 0);
-    return threshold;
-  },
-  modifierKey(value) {
-    if (value === undefined) return 'ctrlKey';
-    return value;
-  },
-  pinchOnWheel(value = true) {
-    return value;
-  }
-});
-
-class MoveEngine extends CoordinatesEngine {
-  constructor(...args) {
-    super(...args);
-    _defineProperty(this, "ingKey", 'moving');
-  }
-  move(event) {
-    if (this.config.mouseOnly && event.pointerType !== 'mouse') return;
-    if (!this.state._active) this.moveStart(event);else this.moveChange(event);
-    this.timeoutStore.add('moveEnd', this.moveEnd.bind(this));
-  }
-  moveStart(event) {
-    this.start(event);
-    this.computeValues(pointerValues(event));
-    this.compute(event);
-    this.computeInitial();
-    this.emit();
-  }
-  moveChange(event) {
-    if (!this.state._active) return;
-    const values = pointerValues(event);
-    const state = this.state;
-    state._delta = maths_0ab39ae9_esm_V.sub(values, state._values);
-    maths_0ab39ae9_esm_V.addTo(state._movement, state._delta);
-    this.computeValues(values);
-    this.compute(event);
-    this.emit();
-  }
-  moveEnd(event) {
-    if (!this.state._active) return;
-    this.state._active = false;
-    this.compute(event);
-    this.emit();
-  }
-  bind(bindFunction) {
-    bindFunction('pointer', 'change', this.move.bind(this));
-    bindFunction('pointer', 'leave', this.moveEnd.bind(this));
-  }
-}
-
-const moveConfigResolver = _objectSpread2(_objectSpread2({}, coordinatesConfigResolver), {}, {
-  mouseOnly: (value = true) => value
-});
-
-class ScrollEngine extends CoordinatesEngine {
-  constructor(...args) {
-    super(...args);
-    _defineProperty(this, "ingKey", 'scrolling');
-  }
-  scroll(event) {
-    if (!this.state._active) this.start(event);
-    this.scrollChange(event);
-    this.timeoutStore.add('scrollEnd', this.scrollEnd.bind(this));
-  }
-  scrollChange(event) {
-    if (event.cancelable) event.preventDefault();
-    const state = this.state;
-    const values = scrollValues(event);
-    state._delta = maths_0ab39ae9_esm_V.sub(values, state._values);
-    maths_0ab39ae9_esm_V.addTo(state._movement, state._delta);
-    this.computeValues(values);
-    this.compute(event);
-    this.emit();
-  }
-  scrollEnd() {
-    if (!this.state._active) return;
-    this.state._active = false;
-    this.compute();
-    this.emit();
-  }
-  bind(bindFunction) {
-    bindFunction('scroll', '', this.scroll.bind(this));
-  }
-}
-
-const scrollConfigResolver = coordinatesConfigResolver;
-
-class WheelEngine extends CoordinatesEngine {
-  constructor(...args) {
-    super(...args);
-    _defineProperty(this, "ingKey", 'wheeling');
-  }
-  wheel(event) {
-    if (!this.state._active) this.start(event);
-    this.wheelChange(event);
-    this.timeoutStore.add('wheelEnd', this.wheelEnd.bind(this));
-  }
-  wheelChange(event) {
-    const state = this.state;
-    state._delta = wheelValues(event);
-    maths_0ab39ae9_esm_V.addTo(state._movement, state._delta);
-    clampStateInternalMovementToBounds(state);
-    this.compute(event);
-    this.emit();
-  }
-  wheelEnd() {
-    if (!this.state._active) return;
-    this.state._active = false;
-    this.compute();
-    this.emit();
-  }
-  bind(bindFunction) {
-    bindFunction('wheel', '', this.wheel.bind(this));
-  }
-}
-
-const wheelConfigResolver = coordinatesConfigResolver;
-
-class HoverEngine extends CoordinatesEngine {
-  constructor(...args) {
-    super(...args);
-    _defineProperty(this, "ingKey", 'hovering');
-  }
-  enter(event) {
-    if (this.config.mouseOnly && event.pointerType !== 'mouse') return;
-    this.start(event);
-    this.computeValues(pointerValues(event));
-    this.compute(event);
-    this.emit();
-  }
-  leave(event) {
-    if (this.config.mouseOnly && event.pointerType !== 'mouse') return;
-    const state = this.state;
-    if (!state._active) return;
-    state._active = false;
-    const values = pointerValues(event);
-    state._movement = state._delta = maths_0ab39ae9_esm_V.sub(values, state._values);
-    this.computeValues(values);
-    this.compute(event);
-    state.delta = state.movement;
-    this.emit();
-  }
-  bind(bindFunction) {
-    bindFunction('pointer', 'enter', this.enter.bind(this));
-    bindFunction('pointer', 'leave', this.leave.bind(this));
-  }
-}
-
-const hoverConfigResolver = _objectSpread2(_objectSpread2({}, coordinatesConfigResolver), {}, {
-  mouseOnly: (value = true) => value
-});
-
-const EngineMap = new Map();
-const ConfigResolverMap = new Map();
-function actions_76b8683e_esm_registerAction(action) {
-  EngineMap.set(action.key, action.engine);
-  ConfigResolverMap.set(action.key, action.resolver);
-}
-const actions_76b8683e_esm_dragAction = {
-  key: 'drag',
-  engine: DragEngine,
-  resolver: dragConfigResolver
-};
-const actions_76b8683e_esm_hoverAction = {
-  key: 'hover',
-  engine: HoverEngine,
-  resolver: hoverConfigResolver
-};
-const actions_76b8683e_esm_moveAction = {
-  key: 'move',
-  engine: MoveEngine,
-  resolver: moveConfigResolver
-};
-const actions_76b8683e_esm_pinchAction = {
-  key: 'pinch',
-  engine: PinchEngine,
-  resolver: pinchConfigResolver
-};
-const actions_76b8683e_esm_scrollAction = {
-  key: 'scroll',
-  engine: ScrollEngine,
-  resolver: scrollConfigResolver
-};
-const actions_76b8683e_esm_wheelAction = {
-  key: 'wheel',
-  engine: WheelEngine,
-  resolver: wheelConfigResolver
-};
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@use-gesture/core/dist/use-gesture-core.esm.js
-
-
-
-function _objectWithoutPropertiesLoose(source, excluded) {
-  if (source == null) return {};
-  var target = {};
-  var sourceKeys = Object.keys(source);
-  var key, i;
-  for (i = 0; i < sourceKeys.length; i++) {
-    key = sourceKeys[i];
-    if (excluded.indexOf(key) >= 0) continue;
-    target[key] = source[key];
-  }
-  return target;
-}
-
-function _objectWithoutProperties(source, excluded) {
-  if (source == null) return {};
-  var target = _objectWithoutPropertiesLoose(source, excluded);
-  var key, i;
-  if (Object.getOwnPropertySymbols) {
-    var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
-    for (i = 0; i < sourceSymbolKeys.length; i++) {
-      key = sourceSymbolKeys[i];
-      if (excluded.indexOf(key) >= 0) continue;
-      if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
-      target[key] = source[key];
-    }
-  }
-  return target;
-}
-
-const sharedConfigResolver = {
-  target(value) {
-    if (value) {
-      return () => 'current' in value ? value.current : value;
-    }
-    return undefined;
-  },
-  enabled(value = true) {
-    return value;
-  },
-  window(value = SUPPORT.isBrowser ? window : undefined) {
-    return value;
-  },
-  eventOptions({
-    passive = true,
-    capture = false
-  } = {}) {
-    return {
-      passive,
-      capture
-    };
-  },
-  transform(value) {
-    return value;
-  }
-};
-
-const _excluded = ["target", "eventOptions", "window", "enabled", "transform"];
-function resolveWith(config = {}, resolvers) {
-  const result = {};
-  for (const [key, resolver] of Object.entries(resolvers)) {
-    switch (typeof resolver) {
-      case 'function':
-        if (false) {} else {
-          result[key] = resolver.call(result, config[key], key, config);
-        }
-        break;
-      case 'object':
-        result[key] = resolveWith(config[key], resolver);
-        break;
-      case 'boolean':
-        if (resolver) result[key] = config[key];
-        break;
-    }
-  }
-  return result;
-}
-function parse(newConfig, gestureKey, _config = {}) {
-  const _ref = newConfig,
-    {
-      target,
-      eventOptions,
-      window,
-      enabled,
-      transform
-    } = _ref,
-    rest = _objectWithoutProperties(_ref, _excluded);
-  _config.shared = resolveWith({
-    target,
-    eventOptions,
-    window,
-    enabled,
-    transform
-  }, sharedConfigResolver);
-  if (gestureKey) {
-    const resolver = ConfigResolverMap.get(gestureKey);
-    _config[gestureKey] = resolveWith(_objectSpread2({
-      shared: _config.shared
-    }, rest), resolver);
-  } else {
-    for (const key in rest) {
-      const resolver = ConfigResolverMap.get(key);
-      if (resolver) {
-        _config[key] = resolveWith(_objectSpread2({
-          shared: _config.shared
-        }, rest[key]), resolver);
-      } else if (false) {}
-    }
-  }
-  return _config;
-}
-
-class EventStore {
-  constructor(ctrl, gestureKey) {
-    _defineProperty(this, "_listeners", new Set());
-    this._ctrl = ctrl;
-    this._gestureKey = gestureKey;
-  }
-  add(element, device, action, handler, options) {
-    const listeners = this._listeners;
-    const type = toDomEventType(device, action);
-    const _options = this._gestureKey ? this._ctrl.config[this._gestureKey].eventOptions : {};
-    const eventOptions = _objectSpread2(_objectSpread2({}, _options), options);
-    element.addEventListener(type, handler, eventOptions);
-    const remove = () => {
-      element.removeEventListener(type, handler, eventOptions);
-      listeners.delete(remove);
-    };
-    listeners.add(remove);
-    return remove;
-  }
-  clean() {
-    this._listeners.forEach(remove => remove());
-    this._listeners.clear();
-  }
-}
-
-class TimeoutStore {
-  constructor() {
-    _defineProperty(this, "_timeouts", new Map());
-  }
-  add(key, callback, ms = 140, ...args) {
-    this.remove(key);
-    this._timeouts.set(key, window.setTimeout(callback, ms, ...args));
-  }
-  remove(key) {
-    const timeout = this._timeouts.get(key);
-    if (timeout) window.clearTimeout(timeout);
-  }
-  clean() {
-    this._timeouts.forEach(timeout => void window.clearTimeout(timeout));
-    this._timeouts.clear();
-  }
-}
-
-class Controller {
-  constructor(handlers) {
-    _defineProperty(this, "gestures", new Set());
-    _defineProperty(this, "_targetEventStore", new EventStore(this));
-    _defineProperty(this, "gestureEventStores", {});
-    _defineProperty(this, "gestureTimeoutStores", {});
-    _defineProperty(this, "handlers", {});
-    _defineProperty(this, "config", {});
-    _defineProperty(this, "pointerIds", new Set());
-    _defineProperty(this, "touchIds", new Set());
-    _defineProperty(this, "state", {
-      shared: {
-        shiftKey: false,
-        metaKey: false,
-        ctrlKey: false,
-        altKey: false
-      }
-    });
-    resolveGestures(this, handlers);
-  }
-  setEventIds(event) {
-    if (isTouch(event)) {
-      this.touchIds = new Set(touchIds(event));
-      return this.touchIds;
-    } else if ('pointerId' in event) {
-      if (event.type === 'pointerup' || event.type === 'pointercancel') this.pointerIds.delete(event.pointerId);else if (event.type === 'pointerdown') this.pointerIds.add(event.pointerId);
-      return this.pointerIds;
-    }
-  }
-  applyHandlers(handlers, nativeHandlers) {
-    this.handlers = handlers;
-    this.nativeHandlers = nativeHandlers;
-  }
-  applyConfig(config, gestureKey) {
-    this.config = parse(config, gestureKey, this.config);
-  }
-  clean() {
-    this._targetEventStore.clean();
-    for (const key of this.gestures) {
-      this.gestureEventStores[key].clean();
-      this.gestureTimeoutStores[key].clean();
-    }
-  }
-  effect() {
-    if (this.config.shared.target) this.bind();
-    return () => this._targetEventStore.clean();
-  }
-  bind(...args) {
-    const sharedConfig = this.config.shared;
-    const props = {};
-    let target;
-    if (sharedConfig.target) {
-      target = sharedConfig.target();
-      if (!target) return;
-    }
-    if (sharedConfig.enabled) {
-      for (const gestureKey of this.gestures) {
-        const gestureConfig = this.config[gestureKey];
-        const bindFunction = bindToProps(props, gestureConfig.eventOptions, !!target);
-        if (gestureConfig.enabled) {
-          const Engine = EngineMap.get(gestureKey);
-          new Engine(this, args, gestureKey).bind(bindFunction);
-        }
-      }
-      const nativeBindFunction = bindToProps(props, sharedConfig.eventOptions, !!target);
-      for (const eventKey in this.nativeHandlers) {
-        nativeBindFunction(eventKey, '', event => this.nativeHandlers[eventKey](_objectSpread2(_objectSpread2({}, this.state.shared), {}, {
-          event,
-          args
-        })), undefined, true);
-      }
-    }
-    for (const handlerProp in props) {
-      props[handlerProp] = chain(...props[handlerProp]);
-    }
-    if (!target) return props;
-    for (const handlerProp in props) {
-      const {
-        device,
-        capture,
-        passive
-      } = parseProp(handlerProp);
-      this._targetEventStore.add(target, device, '', props[handlerProp], {
-        capture,
-        passive
-      });
-    }
-  }
-}
-function setupGesture(ctrl, gestureKey) {
-  ctrl.gestures.add(gestureKey);
-  ctrl.gestureEventStores[gestureKey] = new EventStore(ctrl, gestureKey);
-  ctrl.gestureTimeoutStores[gestureKey] = new TimeoutStore();
-}
-function resolveGestures(ctrl, internalHandlers) {
-  if (internalHandlers.drag) setupGesture(ctrl, 'drag');
-  if (internalHandlers.wheel) setupGesture(ctrl, 'wheel');
-  if (internalHandlers.scroll) setupGesture(ctrl, 'scroll');
-  if (internalHandlers.move) setupGesture(ctrl, 'move');
-  if (internalHandlers.pinch) setupGesture(ctrl, 'pinch');
-  if (internalHandlers.hover) setupGesture(ctrl, 'hover');
-}
-const bindToProps = (props, eventOptions, withPassiveOption) => (device, action, handler, options = {}, isNative = false) => {
-  var _options$capture, _options$passive;
-  const capture = (_options$capture = options.capture) !== null && _options$capture !== void 0 ? _options$capture : eventOptions.capture;
-  const passive = (_options$passive = options.passive) !== null && _options$passive !== void 0 ? _options$passive : eventOptions.passive;
-  let handlerProp = isNative ? device : toHandlerProp(device, action, capture);
-  if (withPassiveOption && passive) handlerProp += 'Passive';
-  props[handlerProp] = props[handlerProp] || [];
-  props[handlerProp].push(handler);
-};
-
-const RE_NOT_NATIVE = /^on(Drag|Wheel|Scroll|Move|Pinch|Hover)/;
-function sortHandlers(_handlers) {
-  const native = {};
-  const handlers = {};
-  const actions = new Set();
-  for (let key in _handlers) {
-    if (RE_NOT_NATIVE.test(key)) {
-      actions.add(RegExp.lastMatch);
-      handlers[key] = _handlers[key];
-    } else {
-      native[key] = _handlers[key];
-    }
-  }
-  return [handlers, native, actions];
-}
-function registerGesture(actions, handlers, handlerKey, key, internalHandlers, config) {
-  if (!actions.has(handlerKey)) return;
-  if (!EngineMap.has(key)) {
-    if (false) {}
-    return;
-  }
-  const startKey = handlerKey + 'Start';
-  const endKey = handlerKey + 'End';
-  const fn = state => {
-    let memo = undefined;
-    if (state.first && startKey in handlers) handlers[startKey](state);
-    if (handlerKey in handlers) memo = handlers[handlerKey](state);
-    if (state.last && endKey in handlers) handlers[endKey](state);
-    return memo;
-  };
-  internalHandlers[key] = fn;
-  config[key] = config[key] || {};
-}
-function parseMergedHandlers(mergedHandlers, mergedConfig) {
-  const [handlers, nativeHandlers, actions] = sortHandlers(mergedHandlers);
-  const internalHandlers = {};
-  registerGesture(actions, handlers, 'onDrag', 'drag', internalHandlers, mergedConfig);
-  registerGesture(actions, handlers, 'onWheel', 'wheel', internalHandlers, mergedConfig);
-  registerGesture(actions, handlers, 'onScroll', 'scroll', internalHandlers, mergedConfig);
-  registerGesture(actions, handlers, 'onPinch', 'pinch', internalHandlers, mergedConfig);
-  registerGesture(actions, handlers, 'onMove', 'move', internalHandlers, mergedConfig);
-  registerGesture(actions, handlers, 'onHover', 'hover', internalHandlers, mergedConfig);
-  return {
-    handlers: internalHandlers,
-    config: mergedConfig,
-    nativeHandlers
-  };
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@use-gesture/react/dist/use-gesture-react.esm.js
-
-
-
-
-
-
-
-function useRecognizers(handlers, config = {}, gestureKey, nativeHandlers) {
-  const ctrl = react.useMemo(() => new Controller(handlers), []);
-  ctrl.applyHandlers(handlers, nativeHandlers);
-  ctrl.applyConfig(config, gestureKey);
-  react.useEffect(ctrl.effect.bind(ctrl));
-  react.useEffect(() => {
-    return ctrl.clean.bind(ctrl);
-  }, []);
-  if (config.target === undefined) {
-    return ctrl.bind.bind(ctrl);
-  }
-  return undefined;
-}
-
-function useDrag(handler, config) {
-  registerAction(dragAction);
-  return useRecognizers({
-    drag: handler
-  }, config || {}, 'drag');
-}
-
-function usePinch(handler, config) {
-  registerAction(pinchAction);
-  return useRecognizers({
-    pinch: handler
-  }, config || {}, 'pinch');
-}
-
-function useWheel(handler, config) {
-  registerAction(wheelAction);
-  return useRecognizers({
-    wheel: handler
-  }, config || {}, 'wheel');
-}
-
-function use_gesture_react_esm_useScroll(handler, config) {
-  registerAction(scrollAction);
-  return useRecognizers({
-    scroll: handler
-  }, config || {}, 'scroll');
-}
-
-function useMove(handler, config) {
-  registerAction(moveAction);
-  return useRecognizers({
-    move: handler
-  }, config || {}, 'move');
-}
-
-function useHover(handler, config) {
-  registerAction(hoverAction);
-  return useRecognizers({
-    hover: handler
-  }, config || {}, 'hover');
-}
-
-function createUseGesture(actions) {
-  actions.forEach(actions_76b8683e_esm_registerAction);
-  return function useGesture(_handlers, _config) {
-    const {
-      handlers,
-      nativeHandlers,
-      config
-    } = parseMergedHandlers(_handlers, _config || {});
-    return useRecognizers(handlers, config, undefined, nativeHandlers);
-  };
-}
-
-function useGesture(handlers, config) {
-  const hook = createUseGesture([actions_76b8683e_esm_dragAction, actions_76b8683e_esm_pinchAction, actions_76b8683e_esm_scrollAction, actions_76b8683e_esm_wheelAction, actions_76b8683e_esm_moveAction, actions_76b8683e_esm_hoverAction]);
-  return hook(handlers, config || {});
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/web/PresentationControls.js
-
-
-
-
-
-
-
-function PresentationControls({
-  snap,
-  global,
-  cursor = true,
-  children,
-  speed = 1,
-  rotation = [0, 0, 0],
-  zoom = 1,
-  polar = [0, Math.PI / 2],
-  azimuth = [-Infinity, Infinity],
-  config = {
-    mass: 1,
-    tension: 170,
-    friction: 26
-  }
-}) {
-  const {
-    size,
-    gl
-  } = (0,react_three_fiber_esm.useThree)();
-  const rPolar = react.useMemo(() => [rotation[0] + polar[0], rotation[0] + polar[1]], [rotation[0], polar[0], polar[1]]);
-  const rAzimuth = react.useMemo(() => [rotation[1] + azimuth[0], rotation[1] + azimuth[1]], [rotation[1], azimuth[0], azimuth[1]]);
-  const rInitial = react.useMemo(() => [three_module.MathUtils.clamp(rotation[0], ...rPolar), three_module.MathUtils.clamp(rotation[1], ...rAzimuth), rotation[2]], [rotation[0], rotation[1], rotation[2], rPolar, rAzimuth]);
-  const [spring, api] = esm_J(() => ({
-    scale: 1,
-    rotation: rInitial,
-    config
-  }));
-  react.useEffect(() => void api.start({
-    scale: 1,
-    rotation: rInitial,
-    config
-  }), [rInitial]);
-  react.useEffect(() => {
-    if (global && cursor) gl.domElement.style.cursor = 'grab';
-  }, [global, cursor, gl.domElement]);
-  const bind = useGesture({
-    onHover: ({
-      last
-    }) => {
-      if (cursor && !global) gl.domElement.style.cursor = last ? 'auto' : 'grab';
-    },
-    onDrag: ({
-      down,
-      delta: [x, y],
-      memo: [oldY, oldX] = spring.rotation.animation.to || rInitial
-    }) => {
-      if (cursor) gl.domElement.style.cursor = down ? 'grabbing' : 'grab';
-      x = three_module.MathUtils.clamp(oldX + x / size.width * Math.PI * speed, ...rAzimuth);
-      y = three_module.MathUtils.clamp(oldY + y / size.height * Math.PI * speed, ...rPolar);
-      const sConfig = snap && !down && typeof snap !== 'boolean' ? snap : config;
-      api.start({
-        scale: down && y > rPolar[1] / 2 ? zoom : 1,
-        rotation: snap && !down ? rInitial : [y, x, 0],
-        config: n => n === 'scale' ? { ...sConfig,
-          friction: sConfig.friction * 3
-        } : sConfig
-      });
-      return [y, x];
-    }
-  }, {
-    target: global ? gl.domElement : undefined
-  });
-  return /*#__PURE__*/react.createElement(dist_esm_E.group, _extends({}, bind == null ? void 0 : bind(), spring), children);
-}
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/interactive/SelectionBox.js
-var SelectionBox = __webpack_require__(31480);
-// EXTERNAL MODULE: ./node_modules/zustand/esm/shallow.js
-var shallow = __webpack_require__(60374);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/web/Select.js
-
-
-
-
-
-
-
-const Select_context = /*#__PURE__*/react.createContext([]);
-function Select({
-  box,
-  multiple,
-  children,
-  onChange,
-  border = '1px solid #55aaff',
-  backgroundColor = 'rgba(75, 160, 255, 0.1)',
-  filter: customFilter = item => item,
-  ...props
-}) {
-  // @ts-expect-error new in @react-three/fiber@7.0.5
-  const {
-    camera,
-    raycaster,
-    gl,
-    controls,
-    size,
-    get
-  } = (0,react_three_fiber_esm.useThree)();
-  const [hovered, hover] = react.useState(false);
-  const [active, dispatch] = react.useReducer((state, {
-    object,
-    shift
-  }) => {
-    if (object === undefined) return [];else if (Array.isArray(object)) return object;else if (!shift) return state[0] === object ? [] : [object];else if (state.includes(object)) return state.filter(o => o !== object);else return [object, ...state];
-  }, []);
-  react.useEffect(() => void (onChange == null ? void 0 : onChange(active)), [active]);
-  const onClick = react.useCallback(e => {
-    e.stopPropagation();
-    dispatch({
-      object: customFilter([e.object])[0],
-      shift: multiple && e.shiftKey
-    });
-  }, []);
-  const onPointerMissed = react.useCallback(e => !hovered && dispatch({}), [hovered]);
-  const ref = react.useRef(null);
-  react.useEffect(() => {
-    if (!box || !multiple) return;
-    const selBox = new SelectionBox/* SelectionBox */.M(camera, ref.current);
-    const element = document.createElement('div');
-    element.style.pointerEvents = 'none';
-    element.style.border = border;
-    element.style.backgroundColor = backgroundColor;
-    element.style.position = 'fixed';
-    const startPoint = new three_module.Vector2();
-    const pointTopLeft = new three_module.Vector2();
-    const pointBottomRight = new three_module.Vector2();
-    const oldRaycasterEnabled = raycaster.enabled;
-    const oldControlsEnabled = controls == null ? void 0 : controls.enabled;
-    let isDown = false;
-
-    function prepareRay(event, vec) {
-      var _raycaster$computeOff;
-
-      // https://github.com/pmndrs/react-three-fiber/pull/782
-      // Events trigger outside of canvas when moved
-      const {
-        offsetX,
-        offsetY
-      } = (_raycaster$computeOff = raycaster.computeOffsets == null ? void 0 : raycaster.computeOffsets(event, get())) !== null && _raycaster$computeOff !== void 0 ? _raycaster$computeOff : event;
-      const {
-        width,
-        height
-      } = size;
-      vec.set(offsetX / width * 2 - 1, -(offsetY / height) * 2 + 1);
-    }
-
-    function onSelectStart(event) {
-      var _gl$domElement$parent;
-
-      if (controls) controls.enabled = false;
-      raycaster.enabled = false;
-      isDown = true;
-      (_gl$domElement$parent = gl.domElement.parentElement) == null ? void 0 : _gl$domElement$parent.appendChild(element);
-      element.style.left = `${event.clientX}px`;
-      element.style.top = `${event.clientY}px`;
-      element.style.width = '0px';
-      element.style.height = '0px';
-      startPoint.x = event.clientX;
-      startPoint.y = event.clientY;
-    }
-
-    function onSelectMove(event) {
-      pointBottomRight.x = Math.max(startPoint.x, event.clientX);
-      pointBottomRight.y = Math.max(startPoint.y, event.clientY);
-      pointTopLeft.x = Math.min(startPoint.x, event.clientX);
-      pointTopLeft.y = Math.min(startPoint.y, event.clientY);
-      element.style.left = `${pointTopLeft.x}px`;
-      element.style.top = `${pointTopLeft.y}px`;
-      element.style.width = `${pointBottomRight.x - pointTopLeft.x}px`;
-      element.style.height = `${pointBottomRight.y - pointTopLeft.y}px`;
-    }
-
-    function onSelectOver() {
-      if (isDown) {
-        var _element$parentElemen;
-
-        if (controls) controls.enabled = oldControlsEnabled;
-        raycaster.enabled = oldRaycasterEnabled;
-        isDown = false;
-        (_element$parentElemen = element.parentElement) == null ? void 0 : _element$parentElemen.removeChild(element);
-      }
-    }
-
-    function pointerDown(event) {
-      if (event.shiftKey) {
-        onSelectStart(event);
-        prepareRay(event, selBox.startPoint);
-      }
-    }
-
-    let previous = [];
-
-    function pointerMove(event) {
-      if (isDown) {
-        onSelectMove(event);
-        prepareRay(event, selBox.endPoint);
-        const allSelected = selBox.select().sort(o => o.uuid).filter(o => o.isMesh);
-
-        if (!(0,shallow/* default */.Z)(allSelected, previous)) {
-          previous = allSelected;
-          dispatch({
-            object: customFilter(allSelected)
-          });
-        }
-      }
-    }
-
-    function pointerUp(event) {
-      if (isDown) onSelectOver();
-    }
-
-    document.addEventListener('pointerdown', pointerDown, {
-      passive: true
-    });
-    document.addEventListener('pointermove', pointerMove, {
-      passive: true,
-      capture: true
-    });
-    document.addEventListener('pointerup', pointerUp, {
-      passive: true
-    });
-    return () => {
-      document.removeEventListener('pointerdown', pointerDown);
-      document.removeEventListener('pointermove', pointerMove);
-      document.removeEventListener('pointerup', pointerUp);
-    };
-  }, [size, raycaster, camera, controls, gl]);
-  return /*#__PURE__*/react.createElement("group", _extends({
-    ref: ref,
-    onClick: onClick,
-    onPointerOver: () => hover(true),
-    onPointerOut: () => hover(false),
-    onPointerMissed: onPointerMissed
-  }, props), /*#__PURE__*/react.createElement(Select_context.Provider, {
-    value: active
-  }, children));
-}
-function useSelect() {
-  return react.useContext(Select_context);
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Billboard.js
-
-
-
-
-
-/**
- * Wraps children in a billboarded group. Sample usage:
- *
- * ```js
- * <Billboard>
- *   <Text>hi</Text>
- * </Billboard>
- * ```
- */
-const Billboard = /*#__PURE__*/react.forwardRef(function Billboard({
-  follow = true,
-  lockX = false,
-  lockY = false,
-  lockZ = false,
-  ...props
-}, ref) {
-  const localRef = react.useRef();
-  (0,react_three_fiber_esm.useFrame)(({
-    camera
-  }) => {
-    if (!follow || !localRef.current) return; // save previous rotation in case we're locking an axis
-
-    const prevRotation = localRef.current.rotation.clone(); // always face the camera
-
-    localRef.current.quaternion.copy(camera.quaternion); // readjust any axis that is locked
-
-    if (lockX) localRef.current.rotation.x = prevRotation.x;
-    if (lockY) localRef.current.rotation.y = prevRotation.y;
-    if (lockZ) localRef.current.rotation.z = prevRotation.z;
-  });
-  return /*#__PURE__*/react.createElement("group", _extends({
-    ref: react_merge_refs_esm([localRef, ref])
-  }, props));
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/lines/Line2.js
-var Line2 = __webpack_require__(43075);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/lines/LineMaterial.js
-var LineMaterial = __webpack_require__(10977);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/lines/LineGeometry.js
-var LineGeometry = __webpack_require__(51815);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Line.js
-
-
-
-
-
-const Line = /*#__PURE__*/react.forwardRef(function Line({
-  points,
-  color = 'black',
-  vertexColors,
-  lineWidth,
-  dashed,
-  ...rest
-}, ref) {
-  const [line2] = react.useState(() => new Line2/* Line2 */.w());
-  const [lineMaterial] = react.useState(() => new LineMaterial/* LineMaterial */.Y());
-  const [resolution] = react.useState(() => new three_module.Vector2(512, 512));
-  const lineGeom = react.useMemo(() => {
-    const geom = new LineGeometry/* LineGeometry */.L();
-    const pValues = points.map(p => p instanceof three_module.Vector3 ? p.toArray() : p);
-    geom.setPositions(pValues.flat());
-
-    if (vertexColors) {
-      const cValues = vertexColors.map(c => c instanceof three_module.Color ? c.toArray() : c);
-      geom.setColors(cValues.flat());
-    }
-
-    return geom;
-  }, [points, vertexColors]);
-  react.useLayoutEffect(() => {
-    line2.computeLineDistances();
-  }, [points, line2]);
-  react.useLayoutEffect(() => {
-    if (dashed) {
-      lineMaterial.defines.USE_DASH = '';
-    } else {
-      // Setting lineMaterial.defines.USE_DASH to undefined is apparently not sufficient.
-      delete lineMaterial.defines.USE_DASH;
-    }
-
-    lineMaterial.needsUpdate = true;
-  }, [dashed, lineMaterial]);
-  react.useEffect(() => {
-    return () => lineGeom.dispose();
-  }, [lineGeom]);
-  return /*#__PURE__*/react.createElement("primitive", _extends({
-    object: line2,
-    ref: ref
-  }, rest), /*#__PURE__*/react.createElement("primitive", {
-    object: lineGeom,
-    attach: "geometry"
-  }), /*#__PURE__*/react.createElement("primitive", _extends({
-    object: lineMaterial,
-    attach: "material",
-    color: color,
-    vertexColors: Boolean(vertexColors),
-    resolution: resolution,
-    linewidth: lineWidth,
-    dashed: dashed
-  }, rest)));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/QuadraticBezierLine.js
-
-
-
-
-
-
-const QuadraticBezierLine_v = new three_module.Vector3();
-const QuadraticBezierLine = /*#__PURE__*/react.forwardRef(function QuadraticBezierLine({
-  start = [0, 0, 0],
-  end = [0, 0, 0],
-  mid,
-  segments = 20,
-  ...rest
-}, forwardref) {
-  const ref = react.useRef(null);
-  const [curve] = react.useState(() => new three_module.QuadraticBezierCurve3(undefined, undefined, undefined));
-  const getPoints = react.useCallback((start, end, mid, segments = 20) => {
-    if (start instanceof three_module.Vector3) curve.v0.copy(start);else curve.v0.set(...start);
-    if (end instanceof three_module.Vector3) curve.v2.copy(end);else curve.v2.set(...end);
-
-    if (mid instanceof three_module.Vector3) {
-      curve.v1.copy(mid);
-    } else {
-      curve.v1.copy(curve.v0.clone().add(curve.v2.clone().sub(curve.v0)).add(QuadraticBezierLine_v.set(0, curve.v0.y - curve.v2.y, 0)));
-    }
-
-    return curve.getPoints(segments);
-  }, []);
-  react.useLayoutEffect(() => {
-    ref.current.setPoints = (start, end, mid) => {
-      const points = getPoints(start, end, mid);
-      if (ref.current.geometry) ref.current.geometry.setPositions(points.map(p => p.toArray()).flat());
-    };
-  }, []);
-  const points = react.useMemo(() => getPoints(start, end, mid, segments), [start, end, mid, segments]);
-  return /*#__PURE__*/react.createElement(Line, _extends({
-    ref: react_merge_refs_esm([ref, forwardref]),
-    points: points
-  }, rest));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/CubicBezierLine.js
-
-
-
-
-
-const CubicBezierLine = /*#__PURE__*/react.forwardRef(function CubicBezierLine({
-  start,
-  end,
-  midA,
-  midB,
-  segments = 20,
-  ...rest
-}, ref) {
-  const points = react.useMemo(() => {
-    const startV = start instanceof three_module.Vector3 ? start : new three_module.Vector3(...start);
-    const endV = end instanceof three_module.Vector3 ? end : new three_module.Vector3(...end);
-    const midAV = midA instanceof three_module.Vector3 ? midA : new three_module.Vector3(...midA);
-    const midBV = midB instanceof three_module.Vector3 ? midB : new three_module.Vector3(...midB);
-    const interpolatedV = new three_module.CubicBezierCurve3(startV, midAV, midBV, endV).getPoints(segments);
-    return interpolatedV;
-  }, [start, end, midA, midB, segments]);
-  return /*#__PURE__*/react.createElement(Line, _extends({
-    ref: ref,
-    points: points
-  }, rest));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/PositionalAudio.js
-
-
-
-
-
-
-const PositionalAudio = /*#__PURE__*/react.forwardRef(({
-  url,
-  distance = 1,
-  loop = true,
-  autoplay,
-  ...props
-}, ref) => {
-  const sound = react.useRef();
-  const camera = (0,react_three_fiber_esm.useThree)(({
-    camera
-  }) => camera);
-  const [listener] = react.useState(() => new three_module.AudioListener());
-  const buffer = (0,react_three_fiber_esm.useLoader)(three_module.AudioLoader, url);
-  react.useEffect(() => {
-    const _sound = sound.current;
-
-    if (_sound) {
-      _sound.setBuffer(buffer);
-
-      _sound.setRefDistance(distance);
-
-      _sound.setLoop(loop);
-
-      if (autoplay && !_sound.isPlaying) _sound.play();
-    }
-  }, [buffer, camera, distance, loop]);
-  react.useEffect(() => {
-    const _sound = sound.current;
-    camera.add(listener);
-    return () => {
-      camera.remove(listener);
-
-      if (_sound) {
-        if (_sound.isPlaying) _sound.stop();
-        if (_sound.source && _sound.source._connected) _sound.disconnect();
-      }
-    };
-  }, []);
-  return /*#__PURE__*/react.createElement("positionalAudio", _extends({
-    ref: react_merge_refs_esm([sound, ref]),
-    args: [listener]
-  }, props));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/troika-worker-utils/dist/troika-worker-utils.esm.js
-/**
- * Lightweight thenable implementation that is entirely self-contained within a single
- * function with no external dependencies so it can be easily shipped across to a WorkerModule.
- *
- * This implementation conforms fully to the Promises/A+ spec so it can safely interoperate
- * with other thenable implementations. https://github.com/promises-aplus/promises-spec
- *
- * *However*, it is _not_ a full implementation of ES2015 Promises, e.g. it does not
- * have the same constructor signature and does not expose a `catch` method or the static
- * `resolve`/`reject`/`all`/`race` initializer methods. If you need to hand a Thenable
- * instance off to consuming code that may expect a true Promise, you'll want to wrap it
- * in a native-or-polyfilled Promise first.
- *
- * (Why yet another Promises/A+ implementation? Great question. We needed a polyfill-like
- * thing that was (a) wrapped in a single function for easy serialization across to a Worker,
- * and (b) was as small as possible -- at ~900B minified (~500B gzipped) this is the smallest
- * implementation I've found. And also, exercises like this are challenging and fun.)
- */
-function BespokeThenable() {
-  var state = 0; // 0=pending, 1=fulfilled, -1=rejected
-  var queue = [];
-  var value;
-  var scheduled = 0;
-  var completeCalled = 0;
-
-  function then(onResolve, onReject) {
-    var nextThenable = BespokeThenable();
-
-    function handleNext() {
-      var cb = state > 0 ? onResolve : onReject;
-      if (isFn(cb)) {
-        try {
-          var result = cb(value);
-          if (result === nextThenable) {
-            recursiveError();
-          }
-          var resultThen = getThenableThen(result);
-          if (resultThen) {
-            resultThen.call(result, nextThenable.resolve, nextThenable.reject);
-          } else {
-            nextThenable.resolve(result);
-          }
-        } catch (err) {
-          nextThenable.reject(err);
-        }
-      } else {
-        nextThenable[state > 0 ? 'resolve' : 'reject'](value);
-      }
-    }
-
-    queue.push(handleNext);
-    if (state) {
-      scheduleQueueFlush();
-    }
-    return nextThenable
-  }
-
-  var resolve = oneTime(function (val) {
-    if (!completeCalled) {
-      complete(1, val);
-    }
-  });
-
-  var reject = oneTime(function (reason) {
-    if (!completeCalled) {
-      complete(-1, reason);
-    }
-  });
-
-  function complete(st, val) {
-    completeCalled++;
-    var ignoreThrow = 0;
-    try {
-      if (val === thenableObj) {
-        recursiveError();
-      }
-      var valThen = st > 0 && getThenableThen(val);
-      if (valThen) {
-        valThen.call(val, oneTime(function (v) {
-          ignoreThrow++;
-          complete(1, v);
-        }), oneTime(function (v) {
-          ignoreThrow++;
-          complete(-1, v);
-        }));
-      } else {
-        state = st;
-        value = val;
-        scheduleQueueFlush();
-      }
-    } catch(e) {
-      if (!state && !ignoreThrow) {
-        complete(-1, e);
-      }
-    }
-  }
-
-  function scheduleQueueFlush() {
-    if (!scheduled) {
-      setTimeout(flushQueue, 0); //TODO setImmediate or postMessage approach if available?
-      scheduled = 1;
-    }
-  }
-
-  function flushQueue() {
-    var q = queue;
-    scheduled = 0;
-    queue = [];
-    q.forEach(callIt);
-  }
-
-  function callIt(fn) {
-    fn();
-  }
-
-  function getThenableThen(val) {
-    var valThen = val && (isFn(val) || typeof val === 'object') && val.then;
-    return isFn(valThen) && valThen
-  }
-
-  function oneTime(fn) {
-    var called = 0;
-    return function() {
-      var args = [], len = arguments.length;
-      while ( len-- ) args[ len ] = arguments[ len ];
-
-      if (!called++) {
-        fn.apply(this, args);
-      }
-    }
-  }
-
-  function recursiveError() {
-    throw new TypeError('Chaining cycle detected')
-  }
-
-  var isFn = function (v) { return typeof v === 'function'; };
-
-  var thenableObj = {
-    then: then,
-    resolve: resolve,
-    reject: reject
-  };
-  return thenableObj
-}
-
-
-/**
- * Thenable implementation that uses a native Promise under the covers. This implementation
- * is preferred if Promise is available, for better performance and dev tools integration.
- * @constructor
- */
-function NativePromiseThenable() {
-  var resolve, reject;
-  var promise = new Promise(function (res, rej) {
-    resolve = res;
-    reject = rej;
-  });
-  return {
-    then: promise.then.bind(promise),
-    resolve: resolve,
-    reject: reject
-  }
-}
-
-/**
- * Promise.all() impl:
- */
-BespokeThenable.all = NativePromiseThenable.all = function(items) {
-  var resultCount = 0;
-  var results = [];
-  var out = DefaultThenable();
-  if (items.length === 0) {
-    out.resolve([]);
-  } else {
-    items.forEach(function (item, i) {
-      var itemThenable = DefaultThenable();
-      itemThenable.resolve(item);
-      itemThenable.then(function (res) {
-        resultCount++;
-        results[i] = res;
-        if (resultCount === items.length) {
-          out.resolve(results);
-        }
-      }, out.reject);
-    });
-  }
-  return out
-};
-
-
-/**
- * Choose the best Thenable implementation and export it as the default.
- */
-var DefaultThenable = typeof Promise === 'function' ? NativePromiseThenable : BespokeThenable;
-
-/**
- * Main content for the worker that handles the loading and execution of
- * modules within it.
- */
-function workerBootstrap() {
-  var modules = Object.create(null);
-
-  // Handle messages for registering a module
-  function registerModule(ref, callback) {
-    var id = ref.id;
-    var name = ref.name;
-    var dependencies = ref.dependencies; if ( dependencies === void 0 ) dependencies = [];
-    var init = ref.init; if ( init === void 0 ) init = function(){};
-    var getTransferables = ref.getTransferables; if ( getTransferables === void 0 ) getTransferables = null;
-
-    // Only register once
-    if (modules[id]) { return }
-
-    try {
-      // If any dependencies are modules, ensure they're registered and grab their value
-      dependencies = dependencies.map(function (dep) {
-        if (dep && dep.isWorkerModule) {
-          registerModule(dep, function (depResult) {
-            if (depResult instanceof Error) { throw depResult }
-          });
-          dep = modules[dep.id].value;
-        }
-        return dep
-      });
-
-      // Rehydrate functions
-      init = rehydrate(("<" + name + ">.init"), init);
-      if (getTransferables) {
-        getTransferables = rehydrate(("<" + name + ">.getTransferables"), getTransferables);
-      }
-
-      // Initialize the module and store its value
-      var value = null;
-      if (typeof init === 'function') {
-        value = init.apply(void 0, dependencies);
-      } else {
-        console.error('worker module init function failed to rehydrate');
-      }
-      modules[id] = {
-        id: id,
-        value: value,
-        getTransferables: getTransferables
-      };
-      callback(value);
-    } catch(err) {
-      if (!(err && err.noLog)) {
-        console.error(err);
-      }
-      callback(err);
-    }
-  }
-
-  // Handle messages for calling a registered module's result function
-  function callModule(ref, callback) {
-    var ref$1;
-
-    var id = ref.id;
-    var args = ref.args;
-    if (!modules[id] || typeof modules[id].value !== 'function') {
-      callback(new Error(("Worker module " + id + ": not found or its 'init' did not return a function")));
-    }
-    try {
-      var result = (ref$1 = modules[id]).value.apply(ref$1, args);
-      if (result && typeof result.then === 'function') {
-        result.then(handleResult, function (rej) { return callback(rej instanceof Error ? rej : new Error('' + rej)); });
-      } else {
-        handleResult(result);
-      }
-    } catch(err) {
-      callback(err);
-    }
-    function handleResult(result) {
-      try {
-        var tx = modules[id].getTransferables && modules[id].getTransferables(result);
-        if (!tx || !Array.isArray(tx) || !tx.length) {
-          tx = undefined; //postMessage is very picky about not passing null or empty transferables
-        }
-        callback(result, tx);
-      } catch(err) {
-        console.error(err);
-        callback(err);
-      }
-    }
-  }
-
-  function rehydrate(name, str) {
-    var result = void 0;
-    self.troikaDefine = function (r) { return result = r; };
-    var url = URL.createObjectURL(
-      new Blob(
-        [("/** " + (name.replace(/\*/g, '')) + " **/\n\ntroikaDefine(\n" + str + "\n)")],
-        {type: 'application/javascript'}
-      )
-    );
-    try {
-      importScripts(url);
-    } catch(err) {
-      console.error(err);
-    }
-    URL.revokeObjectURL(url);
-    delete self.troikaDefine;
-    return result
-  }
-
-  // Handler for all messages within the worker
-  self.addEventListener('message', function (e) {
-    var ref = e.data;
-    var messageId = ref.messageId;
-    var action = ref.action;
-    var data = ref.data;
-    try {
-      // Module registration
-      if (action === 'registerModule') {
-        registerModule(data, function (result) {
-          if (result instanceof Error) {
-            postMessage({
-              messageId: messageId,
-              success: false,
-              error: result.message
-            });
-          } else {
-            postMessage({
-              messageId: messageId,
-              success: true,
-              result: {isCallable: typeof result === 'function'}
-            });
-          }
-        });
-      }
-      // Invocation
-      if (action === 'callModule') {
-        callModule(data, function (result, transferables) {
-          if (result instanceof Error) {
-            postMessage({
-              messageId: messageId,
-              success: false,
-              error: result.message
-            });
-          } else {
-            postMessage({
-              messageId: messageId,
-              success: true,
-              result: result
-            }, transferables || undefined);
-          }
-        });
-      }
-    } catch(err) {
-      postMessage({
-        messageId: messageId,
-        success: false,
-        error: err.stack
-      });
-    }
-  });
-}
-
-/**
- * Fallback for `defineWorkerModule` that behaves identically but runs in the main
- * thread, for when the execution environment doesn't support web workers or they
- * are disallowed due to e.g. CSP security restrictions.
- */
-function defineMainThreadModule(options) {
-  var moduleFunc = function() {
-    var args = [], len = arguments.length;
-    while ( len-- ) args[ len ] = arguments[ len ];
-
-    return moduleFunc._getInitResult().then(function (initResult) {
-      if (typeof initResult === 'function') {
-        return initResult.apply(void 0, args)
-      } else {
-        throw new Error('Worker module function was called but `init` did not return a callable function')
-      }
-    })
-  };
-  moduleFunc._getInitResult = function() {
-    // We can ignore getTransferables in main thread. TODO workerId?
-    var dependencies = options.dependencies;
-    var init = options.init;
-
-    // Resolve dependencies
-    dependencies = Array.isArray(dependencies) ? dependencies.map(function (dep) { return dep && dep._getInitResult ? dep._getInitResult() : dep; }
-    ) : [];
-
-    // Invoke init with the resolved dependencies
-    var initThenable = DefaultThenable.all(dependencies).then(function (deps) {
-      return init.apply(null, deps)
-    });
-
-    // Cache the resolved promise for subsequent calls
-    moduleFunc._getInitResult = function () { return initThenable; };
-
-    return initThenable
-  };
-  return moduleFunc
-}
-
-var supportsWorkers = function () {
-  var supported = false;
-
-  // Only attempt worker initialization in browsers; elsewhere it would just be
-  // noise e.g. loading into a Node environment for SSR.
-  if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {
-    try {
-      // TODO additional checks for things like importScripts within the worker?
-      //  Would need to be an async check.
-      var worker = new Worker(
-        URL.createObjectURL(new Blob([''], { type: 'application/javascript' }))
-      );
-      worker.terminate();
-      supported = true;
-    } catch (err) {
-      if (typeof process !== 'undefined' && "production" === 'test') {} else {
-        console.log(
-          ("Troika createWorkerModule: web workers not allowed; falling back to main thread execution. Cause: [" + (err.message) + "]")
-        );
-      }
-    }
-  }
-
-  // Cached result
-  supportsWorkers = function () { return supported; };
-  return supported
-};
-
-var _workerModuleId = 0;
-var _messageId = 0;
-var _allowInitAsString = false;
-var workers = Object.create(null);
-var registeredModules = Object.create(null); //workerId -> Set<unregisterFn>
-var openRequests = Object.create(null);
-
-
-/**
- * Define a module of code that will be executed with a web worker. This provides a simple
- * interface for moving chunks of logic off the main thread, and managing their dependencies
- * among one another.
- *
- * @param {object} options
- * @param {function} options.init
- * @param {array} [options.dependencies]
- * @param {function} [options.getTransferables]
- * @param {string} [options.name]
- * @param {string} [options.workerId]
- * @return {function(...[*]): {then}}
- */
-function defineWorkerModule(options) {
-  if ((!options || typeof options.init !== 'function') && !_allowInitAsString) {
-    throw new Error('requires `options.init` function')
-  }
-  var dependencies = options.dependencies;
-  var init = options.init;
-  var getTransferables = options.getTransferables;
-  var workerId = options.workerId;
-
-  if (!supportsWorkers()) {
-    return defineMainThreadModule(options)
-  }
-
-  if (workerId == null) {
-    workerId = '#default';
-  }
-  var id = "workerModule" + (++_workerModuleId);
-  var name = options.name || id;
-  var registrationThenable = null;
-
-  dependencies = dependencies && dependencies.map(function (dep) {
-    // Wrap raw functions as worker modules with no dependencies
-    if (typeof dep === 'function' && !dep.workerModuleData) {
-      _allowInitAsString = true;
-      dep = defineWorkerModule({
-        workerId: workerId,
-        name: ("<" + name + "> function dependency: " + (dep.name)),
-        init: ("function(){return (\n" + (stringifyFunction(dep)) + "\n)}")
-      });
-      _allowInitAsString = false;
-    }
-    // Grab postable data for worker modules
-    if (dep && dep.workerModuleData) {
-      dep = dep.workerModuleData;
-    }
-    return dep
-  });
-
-  function moduleFunc() {
-    var args = [], len = arguments.length;
-    while ( len-- ) args[ len ] = arguments[ len ];
-
-    // Register this module if needed
-    if (!registrationThenable) {
-      registrationThenable = callWorker(workerId,'registerModule', moduleFunc.workerModuleData);
-      var unregister = function () {
-        registrationThenable = null;
-        registeredModules[workerId].delete(unregister);
-      }
-      ;(registeredModules[workerId] || (registeredModules[workerId] = new Set())).add(unregister);
-    }
-
-    // Invoke the module, returning a thenable
-    return registrationThenable.then(function (ref) {
-      var isCallable = ref.isCallable;
-
-      if (isCallable) {
-        return callWorker(workerId,'callModule', {id: id, args: args})
-      } else {
-        throw new Error('Worker module function was called but `init` did not return a callable function')
-      }
-    })
-  }
-  moduleFunc.workerModuleData = {
-    isWorkerModule: true,
-    id: id,
-    name: name,
-    dependencies: dependencies,
-    init: stringifyFunction(init),
-    getTransferables: getTransferables && stringifyFunction(getTransferables)
-  };
-  return moduleFunc
-}
-
-/**
- * Terminate an active Worker by a workerId that was passed to defineWorkerModule.
- * This only terminates the Worker itself; the worker module will remain available
- * and if you call it again its Worker will be respawned.
- * @param {string} workerId
- */
-function terminateWorker(workerId) {
-  // Unregister all modules that were registered in that worker
-  if (registeredModules[workerId]) {
-    registeredModules[workerId].forEach(function (unregister) {
-      unregister();
-    });
-  }
-  // Terminate the Worker object
-  if (workers[workerId]) {
-    workers[workerId].terminate();
-    delete workers[workerId];
-  }
-}
-
-/**
- * Stringifies a function into a form that can be deserialized in the worker
- * @param fn
- */
-function stringifyFunction(fn) {
-  var str = fn.toString();
-  // If it was defined in object method/property format, it needs to be modified
-  if (!/^function/.test(str) && /^\w+\s*\(/.test(str)) {
-    str = 'function ' + str;
-  }
-  return str
-}
-
-
-function getWorker(workerId) {
-  var worker = workers[workerId];
-  if (!worker) {
-    // Bootstrap the worker's content
-    var bootstrap = stringifyFunction(workerBootstrap);
-
-    // Create the worker from the bootstrap function content
-    worker = workers[workerId] = new Worker(
-      URL.createObjectURL(
-        new Blob(
-          [("/** Worker Module Bootstrap: " + (workerId.replace(/\*/g, '')) + " **/\n\n;(" + bootstrap + ")()")],
-          {type: 'application/javascript'}
-        )
-      )
-    );
-
-    // Single handler for response messages from the worker
-    worker.onmessage = function (e) {
-      var response = e.data;
-      var msgId = response.messageId;
-      var callback = openRequests[msgId];
-      if (!callback) {
-        throw new Error('WorkerModule response with empty or unknown messageId')
-      }
-      delete openRequests[msgId];
-      callback(response);
-    };
-  }
-  return worker
-}
-
-// Issue a call to the worker with a callback to handle the response
-function callWorker(workerId, action, data) {
-  var thenable = DefaultThenable();
-  var messageId = ++_messageId;
-  openRequests[messageId] = function (response) {
-    if (response.success) {
-      thenable.resolve(response.result);
-    } else {
-      thenable.reject(new Error(("Error in worker " + action + " call: " + (response.error))));
-    }
-  };
-  getWorker(workerId).postMessage({
-    messageId: messageId,
-    action: action,
-    data: data
-  });
-  return thenable
-}
-
-/**
- * Just the {@link Thenable} function wrapped as a worker module. If another worker
- * module needs Thenable as a dependency, it's better to pass this module rather than
- * the raw function in its `dependencies` array so it only gets registered once.
- */
-var ThenableWorkerModule = /*#__PURE__*/defineWorkerModule({
-  name: 'Thenable',
-  dependencies: [DefaultThenable],
-  init: function(Thenable) {
-    return Thenable
-  }
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/webgl-sdf-generator/dist/webgl-sdf-generator.mjs
-function SDFGenerator() {
-var exports = (function (exports) {
-
-  /**
-   * Find the point on a quadratic bezier curve at t where t is in the range [0, 1]
-   */
-  function pointOnQuadraticBezier (x0, y0, x1, y1, x2, y2, t, pointOut) {
-    var t2 = 1 - t;
-    pointOut.x = t2 * t2 * x0 + 2 * t2 * t * x1 + t * t * x2;
-    pointOut.y = t2 * t2 * y0 + 2 * t2 * t * y1 + t * t * y2;
-  }
-
-  /**
-   * Find the point on a cubic bezier curve at t where t is in the range [0, 1]
-   */
-  function pointOnCubicBezier (x0, y0, x1, y1, x2, y2, x3, y3, t, pointOut) {
-    var t2 = 1 - t;
-    pointOut.x = t2 * t2 * t2 * x0 + 3 * t2 * t2 * t * x1 + 3 * t2 * t * t * x2 + t * t * t * x3;
-    pointOut.y = t2 * t2 * t2 * y0 + 3 * t2 * t2 * t * y1 + 3 * t2 * t * t * y2 + t * t * t * y3;
-  }
-
-  /**
-   * Parse a path string into its constituent line/curve commands, invoking a callback for each.
-   * @param {string} pathString - An SVG-like path string to parse; should only contain commands: M/L/Q/C/Z
-   * @param {function(
-   *   command: 'L'|'Q'|'C',
-   *   startX: number,
-   *   startY: number,
-   *   endX: number,
-   *   endY: number,
-   *   ctrl1X?: number,
-   *   ctrl1Y?: number,
-   *   ctrl2X?: number,
-   *   ctrl2Y?: number
-   * )} commandCallback - A callback function that will be called once for each parsed path command, passing the
-   *                      command identifier (only L/Q/C commands) and its numeric arguments.
-   */
-  function forEachPathCommand(pathString, commandCallback) {
-    var segmentRE = /([MLQCZ])([^MLQCZ]*)/g;
-    var match, firstX, firstY, prevX, prevY;
-    while ((match = segmentRE.exec(pathString))) {
-      var args = match[2]
-        .replace(/^\s*|\s*$/g, '')
-        .split(/[,\s]+/)
-        .map(function (v) { return parseFloat(v); });
-      switch (match[1]) {
-        case 'M':
-          prevX = firstX = args[0];
-          prevY = firstY = args[1];
-          break
-        case 'L':
-          if (args[0] !== prevX || args[1] !== prevY) { // yup, some fonts have zero-length line commands
-            commandCallback('L', prevX, prevY, (prevX = args[0]), (prevY = args[1]));
-          }
-          break
-        case 'Q': {
-          commandCallback('Q', prevX, prevY, (prevX = args[2]), (prevY = args[3]), args[0], args[1]);
-          break
-        }
-        case 'C': {
-          commandCallback('C', prevX, prevY, (prevX = args[4]), (prevY = args[5]), args[0], args[1], args[2], args[3]);
-          break
-        }
-        case 'Z':
-          if (prevX !== firstX || prevY !== firstY) {
-            commandCallback('L', prevX, prevY, firstX, firstY);
-          }
-          break
-      }
-    }
-  }
-
-  /**
-   * Convert a path string to a series of straight line segments
-   * @param {string} pathString - An SVG-like path string to parse; should only contain commands: M/L/Q/C/Z
-   * @param {function(x1:number, y1:number, x2:number, y2:number)} segmentCallback - A callback
-   *        function that will be called once for every line segment
-   * @param {number} [curvePoints] - How many straight line segments to use when approximating a
-   *        bezier curve in the path. Defaults to 16.
-   */
-  function pathToLineSegments (pathString, segmentCallback, curvePoints) {
-    if ( curvePoints === void 0 ) curvePoints = 16;
-
-    var tempPoint = { x: 0, y: 0 };
-    forEachPathCommand(pathString, function (command, startX, startY, endX, endY, ctrl1X, ctrl1Y, ctrl2X, ctrl2Y) {
-      switch (command) {
-        case 'L':
-          segmentCallback(startX, startY, endX, endY);
-          break
-        case 'Q': {
-          var prevCurveX = startX;
-          var prevCurveY = startY;
-          for (var i = 1; i < curvePoints; i++) {
-            pointOnQuadraticBezier(
-              startX, startY,
-              ctrl1X, ctrl1Y,
-              endX, endY,
-              i / (curvePoints - 1),
-              tempPoint
-            );
-            segmentCallback(prevCurveX, prevCurveY, tempPoint.x, tempPoint.y);
-            prevCurveX = tempPoint.x;
-            prevCurveY = tempPoint.y;
-          }
-          break
-        }
-        case 'C': {
-          var prevCurveX$1 = startX;
-          var prevCurveY$1 = startY;
-          for (var i$1 = 1; i$1 < curvePoints; i$1++) {
-            pointOnCubicBezier(
-              startX, startY,
-              ctrl1X, ctrl1Y,
-              ctrl2X, ctrl2Y,
-              endX, endY,
-              i$1 / (curvePoints - 1),
-              tempPoint
-            );
-            segmentCallback(prevCurveX$1, prevCurveY$1, tempPoint.x, tempPoint.y);
-            prevCurveX$1 = tempPoint.x;
-            prevCurveY$1 = tempPoint.y;
-          }
-          break
-        }
-      }
-    });
-  }
-
-  var viewportQuadVertex = "precision highp float;attribute vec2 aUV;varying vec2 vUV;void main(){vUV=aUV;gl_Position=vec4(mix(vec2(-1.0),vec2(1.0),aUV),0.0,1.0);}";
-
-  var copyTexFragment = "precision highp float;uniform sampler2D tex;varying vec2 vUV;void main(){gl_FragColor=texture2D(tex,vUV);}";
-
-  var cache = new WeakMap();
-
-  var glContextParams = {
-    premultipliedAlpha: false,
-    preserveDrawingBuffer: true,
-    antialias: false,
-    depth: false,
-  };
-
-  /**
-   * This is a little helper library for WebGL. It assists with state management for a GL context.
-   * It's pretty tightly wrapped to the needs of this package, not very general-purpose.
-   *
-   * @param { WebGLRenderingContext | HTMLCanvasElement | OffscreenCanvas } glOrCanvas - the GL context to wrap
-   * @param { ({gl, getExtension, withProgram, withTexture, withTextureFramebuffer, handleContextLoss}) => void } callback
-   */
-  function withWebGLContext (glOrCanvas, callback) {
-    var gl = glOrCanvas.getContext ? glOrCanvas.getContext('webgl', glContextParams) : glOrCanvas;
-    var wrapper = cache.get(gl);
-    if (!wrapper) {
-      var isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;
-      var extensions = {};
-      var programs = {};
-      var textures = {};
-      var textureUnit = -1;
-      var framebufferStack = [];
-
-      gl.canvas.addEventListener('webglcontextlost', function (e) {
-        handleContextLoss();
-        e.preventDefault();
-      }, false);
-
-      function getExtension (name) {
-        var ext = extensions[name];
-        if (!ext) {
-          ext = extensions[name] = gl.getExtension(name);
-          if (!ext) {
-            throw new Error((name + " not supported"))
-          }
-        }
-        return ext
-      }
-
-      function compileShader (src, type) {
-        var shader = gl.createShader(type);
-        gl.shaderSource(shader, src);
-        gl.compileShader(shader);
-        // const status = gl.getShaderParameter(shader, gl.COMPILE_STATUS)
-        // if (!status && !gl.isContextLost()) {
-        //   throw new Error(gl.getShaderInfoLog(shader).trim())
-        // }
-        return shader
-      }
-
-      function withProgram (name, vert, frag, func) {
-        if (!programs[name]) {
-          var attributes = {};
-          var uniforms = {};
-          var program = gl.createProgram();
-          gl.attachShader(program, compileShader(vert, gl.VERTEX_SHADER));
-          gl.attachShader(program, compileShader(frag, gl.FRAGMENT_SHADER));
-          gl.linkProgram(program);
-
-          programs[name] = {
-            program: program,
-            transaction: function transaction (func) {
-              gl.useProgram(program);
-              func({
-                setUniform: function setUniform (type, name) {
-                  var values = [], len = arguments.length - 2;
-                  while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];
-
-                  var uniformLoc = uniforms[name] || (uniforms[name] = gl.getUniformLocation(program, name));
-                  gl[("uniform" + type)].apply(gl, [ uniformLoc ].concat( values ));
-                },
-
-                setAttribute: function setAttribute (name, size, usage, instancingDivisor, data) {
-                  var attr = attributes[name];
-                  if (!attr) {
-                    attr = attributes[name] = {
-                      buf: gl.createBuffer(), // TODO should we destroy our buffers?
-                      loc: gl.getAttribLocation(program, name),
-                      data: null
-                    };
-                  }
-                  gl.bindBuffer(gl.ARRAY_BUFFER, attr.buf);
-                  gl.vertexAttribPointer(attr.loc, size, gl.FLOAT, false, 0, 0);
-                  gl.enableVertexAttribArray(attr.loc);
-                  if (isWebGL2) {
-                    gl.vertexAttribDivisor(attr.loc, instancingDivisor);
-                  } else {
-                    getExtension('ANGLE_instanced_arrays').vertexAttribDivisorANGLE(attr.loc, instancingDivisor);
-                  }
-                  if (data !== attr.data) {
-                    gl.bufferData(gl.ARRAY_BUFFER, data, usage);
-                    attr.data = data;
-                  }
-                }
-              });
-            }
-          };
-        }
-
-        programs[name].transaction(func);
-      }
-
-      function withTexture (name, func) {
-        textureUnit++;
-        try {
-          gl.activeTexture(gl.TEXTURE0 + textureUnit);
-          var texture = textures[name];
-          if (!texture) {
-            texture = textures[name] = gl.createTexture();
-            gl.bindTexture(gl.TEXTURE_2D, texture);
-            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);
-            gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);
-          }
-          gl.bindTexture(gl.TEXTURE_2D, texture);
-          func(texture, textureUnit);
-        } finally {
-          textureUnit--;
-        }
-      }
-
-      function withTextureFramebuffer (texture, textureUnit, func) {
-        var framebuffer = gl.createFramebuffer();
-        framebufferStack.push(framebuffer);
-        gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
-        gl.activeTexture(gl.TEXTURE0 + textureUnit);
-        gl.bindTexture(gl.TEXTURE_2D, texture);
-        gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);
-        try {
-          func(framebuffer);
-        } finally {
-          gl.deleteFramebuffer(framebuffer);
-          gl.bindFramebuffer(gl.FRAMEBUFFER, framebufferStack[--framebufferStack.length - 1] || null);
-        }
-      }
-
-      function handleContextLoss () {
-        extensions = {};
-        programs = {};
-        textures = {};
-        textureUnit = -1;
-        framebufferStack.length = 0;
-      }
-
-      cache.set(gl, wrapper = {
-        gl: gl,
-        isWebGL2: isWebGL2,
-        getExtension: getExtension,
-        withProgram: withProgram,
-        withTexture: withTexture,
-        withTextureFramebuffer: withTextureFramebuffer,
-        handleContextLoss: handleContextLoss,
-      });
-    }
-    callback(wrapper);
-  }
-
-
-  function renderImageData(glOrCanvas, imageData, x, y, width, height, channels, framebuffer) {
-    if ( channels === void 0 ) channels = 15;
-    if ( framebuffer === void 0 ) framebuffer = null;
-
-    withWebGLContext(glOrCanvas, function (ref) {
-      var gl = ref.gl;
-      var withProgram = ref.withProgram;
-      var withTexture = ref.withTexture;
-
-      withTexture('copy', function (tex, texUnit) {
-        gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, imageData);
-        withProgram('copy', viewportQuadVertex, copyTexFragment, function (ref) {
-          var setUniform = ref.setUniform;
-          var setAttribute = ref.setAttribute;
-
-          setAttribute('aUV', 2, gl.STATIC_DRAW, 0, new Float32Array([0, 0, 2, 0, 0, 2]));
-          setUniform('1i', 'image', texUnit);
-          gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer || null);
-          gl.disable(gl.BLEND);
-          gl.colorMask(channels & 8, channels & 4, channels & 2, channels & 1);
-          gl.viewport(x, y, width, height);
-          gl.scissor(x, y, width, height);
-          gl.drawArrays(gl.TRIANGLES, 0, 3);
-        });
-      });
-    });
-  }
-
-  /**
-   * Resizing a canvas clears its contents; this utility copies the previous contents over.
-   * @param canvas
-   * @param newWidth
-   * @param newHeight
-   */
-  function resizeWebGLCanvasWithoutClearing(canvas, newWidth, newHeight) {
-    var width = canvas.width;
-    var height = canvas.height;
-    withWebGLContext(canvas, function (ref) {
-      var gl = ref.gl;
-
-      var data = new Uint8Array(width * height * 4);
-      gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data);
-      canvas.width = newWidth;
-      canvas.height = newHeight;
-      renderImageData(gl, data, 0, 0, width, height);
-    });
-  }
-
-  var webglUtils = /*#__PURE__*/Object.freeze({
-    __proto__: null,
-    withWebGLContext: withWebGLContext,
-    renderImageData: renderImageData,
-    resizeWebGLCanvasWithoutClearing: resizeWebGLCanvasWithoutClearing
-  });
-
-  function generate$2 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent) {
-    if ( sdfExponent === void 0 ) sdfExponent = 1;
-
-    var textureData = new Uint8Array(sdfWidth * sdfHeight);
-
-    var viewBoxWidth = viewBox[2] - viewBox[0];
-    var viewBoxHeight = viewBox[3] - viewBox[1];
-
-    // Decompose all paths into straight line segments and add them to an index
-    var segments = [];
-    pathToLineSegments(path, function (x1, y1, x2, y2) {
-      segments.push({
-        x1: x1, y1: y1, x2: x2, y2: y2,
-        minX: Math.min(x1, x2),
-        minY: Math.min(y1, y2),
-        maxX: Math.max(x1, x2),
-        maxY: Math.max(y1, y2)
-      });
-    });
-
-    // Sort segments by maxX, this will let us short-circuit some loops below
-    segments.sort(function (a, b) { return a.maxX - b.maxX; });
-
-    // For each target SDF texel, find the distance from its center to its nearest line segment,
-    // map that distance to an alpha value, and write that alpha to the texel
-    for (var sdfX = 0; sdfX < sdfWidth; sdfX++) {
-      for (var sdfY = 0; sdfY < sdfHeight; sdfY++) {
-        var signedDist = findNearestSignedDistance(
-          viewBox[0] + viewBoxWidth * (sdfX + 0.5) / sdfWidth,
-          viewBox[1] + viewBoxHeight * (sdfY + 0.5) / sdfHeight
-        );
-
-        // Use an exponential scale to ensure the texels very near the glyph path have adequate
-        // precision, while allowing the distance field to cover the entire texture, given that
-        // there are only 8 bits available. Formula visualized: https://www.desmos.com/calculator/uiaq5aqiam
-        var alpha = Math.pow((1 - Math.abs(signedDist) / maxDistance), sdfExponent) / 2;
-        if (signedDist < 0) {
-          alpha = 1 - alpha;
-        }
-
-        alpha = Math.max(0, Math.min(255, Math.round(alpha * 255))); //clamp
-        textureData[sdfY * sdfWidth + sdfX] = alpha;
-      }
-    }
-
-    return textureData
-
-    /**
-     * For a given x/y, search the index for the closest line segment and return
-     * its signed distance. Negative = inside, positive = outside, zero = on edge
-     * @param x
-     * @param y
-     * @returns {number}
-     */
-    function findNearestSignedDistance (x, y) {
-      var closestDistSq = Infinity;
-      var closestDist = Infinity;
-
-      for (var i = segments.length; i--;) {
-        var seg = segments[i];
-        if (seg.maxX + closestDist <= x) { break } //sorting by maxX means no more can be closer, so we can short-circuit
-        if (x + closestDist > seg.minX && y - closestDist < seg.maxY && y + closestDist > seg.minY) {
-          var distSq = absSquareDistanceToLineSegment(x, y, seg.x1, seg.y1, seg.x2, seg.y2);
-          if (distSq < closestDistSq) {
-            closestDistSq = distSq;
-            closestDist = Math.sqrt(closestDistSq);
-          }
-        }
-      }
-
-      // Flip to negative distance if inside the poly
-      if (isPointInPoly(x, y)) {
-        closestDist = -closestDist;
-      }
-      return closestDist
-    }
-
-    /**
-     * Determine whether the given point lies inside or outside the glyph. Uses a simple
-     * winding-number ray casting algorithm using a ray pointing east from the point.
-     */
-    function isPointInPoly (x, y) {
-      var winding = 0;
-      for (var i = segments.length; i--;) {
-        var seg = segments[i];
-        if (seg.maxX <= x) { break } //sorting by maxX means no more can cross, so we can short-circuit
-        var intersects = ((seg.y1 > y) !== (seg.y2 > y)) && (x < (seg.x2 - seg.x1) * (y - seg.y1) / (seg.y2 - seg.y1) + seg.x1);
-        if (intersects) {
-          winding += seg.y1 < seg.y2 ? 1 : -1;
-        }
-      }
-      return winding !== 0
-    }
-  }
-
-  function generateIntoCanvas$2(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, x, y, channel) {
-    if ( sdfExponent === void 0 ) sdfExponent = 1;
-    if ( x === void 0 ) x = 0;
-    if ( y === void 0 ) y = 0;
-    if ( channel === void 0 ) channel = 0;
-
-    generateIntoFramebuffer$1(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, null, x, y, channel);
-  }
-
-  function generateIntoFramebuffer$1 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas, framebuffer, x, y, channel) {
-    if ( sdfExponent === void 0 ) sdfExponent = 1;
-    if ( x === void 0 ) x = 0;
-    if ( y === void 0 ) y = 0;
-    if ( channel === void 0 ) channel = 0;
-
-    var data = generate$2(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent);
-    // Expand single-channel data to rbga
-    var rgbaData = new Uint8Array(data.length * 4);
-    for (var i = 0; i < data.length; i++) {
-      rgbaData[i * 4 + channel] = data[i];
-    }
-    renderImageData(glOrCanvas, rgbaData, x, y, sdfWidth, sdfHeight, 1 << (3 - channel), framebuffer);
-  }
-
-  /**
-   * Find the absolute distance from a point to a line segment at closest approach
-   */
-  function absSquareDistanceToLineSegment (x, y, lineX0, lineY0, lineX1, lineY1) {
-    var ldx = lineX1 - lineX0;
-    var ldy = lineY1 - lineY0;
-    var lengthSq = ldx * ldx + ldy * ldy;
-    var t = lengthSq ? Math.max(0, Math.min(1, ((x - lineX0) * ldx + (y - lineY0) * ldy) / lengthSq)) : 0;
-    var dx = x - (lineX0 + t * ldx);
-    var dy = y - (lineY0 + t * ldy);
-    return dx * dx + dy * dy
-  }
-
-  var javascript = /*#__PURE__*/Object.freeze({
-    __proto__: null,
-    generate: generate$2,
-    generateIntoCanvas: generateIntoCanvas$2,
-    generateIntoFramebuffer: generateIntoFramebuffer$1
-  });
-
-  var mainVertex = "precision highp float;uniform vec4 uGlyphBounds;attribute vec2 aUV;attribute vec4 aLineSegment;varying vec4 vLineSegment;varying vec2 vGlyphXY;void main(){vLineSegment=aLineSegment;vGlyphXY=mix(uGlyphBounds.xy,uGlyphBounds.zw,aUV);gl_Position=vec4(mix(vec2(-1.0),vec2(1.0),aUV),0.0,1.0);}";
-
-  var mainFragment = "precision highp float;uniform vec4 uGlyphBounds;uniform float uMaxDistance;uniform float uExponent;varying vec4 vLineSegment;varying vec2 vGlyphXY;float absDistToSegment(vec2 point,vec2 lineA,vec2 lineB){vec2 lineDir=lineB-lineA;float lenSq=dot(lineDir,lineDir);float t=lenSq==0.0 ? 0.0 : clamp(dot(point-lineA,lineDir)/lenSq,0.0,1.0);vec2 linePt=lineA+t*lineDir;return distance(point,linePt);}void main(){vec4 seg=vLineSegment;vec2 p=vGlyphXY;float dist=absDistToSegment(p,seg.xy,seg.zw);float val=pow(1.0-clamp(dist/uMaxDistance,0.0,1.0),uExponent)*0.5;bool crossing=(seg.y>p.y!=seg.w>p.y)&&(p.x<(seg.z-seg.x)*(p.y-seg.y)/(seg.w-seg.y)+seg.x);bool crossingUp=crossing&&vLineSegment.y<vLineSegment.w;gl_FragColor=vec4(crossingUp ? 1.0/255.0 : 0.0,crossing&&!crossingUp ? 1.0/255.0 : 0.0,0.0,val);}";
-
-  var postFragment = "precision highp float;uniform sampler2D tex;varying vec2 vUV;void main(){vec4 color=texture2D(tex,vUV);bool inside=color.r!=color.g;float val=inside ? 1.0-color.a : color.a;gl_FragColor=vec4(val);}";
-
-  // Single triangle covering viewport
-  var viewportUVs = new Float32Array([0, 0, 2, 0, 0, 2]);
-
-  var implicitContext = null;
-  var isTestingSupport = false;
-  var NULL_OBJECT = {};
-  var supportByCanvas = new WeakMap(); // canvas -> bool
-
-  function validateSupport (glOrCanvas) {
-    if (!isTestingSupport && !isSupported(glOrCanvas)) {
-      throw new Error('WebGL generation not supported')
-    }
-  }
-
-  function generate$1 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas) {
-    if ( sdfExponent === void 0 ) sdfExponent = 1;
-    if ( glOrCanvas === void 0 ) glOrCanvas = null;
-
-    if (!glOrCanvas) {
-      glOrCanvas = implicitContext;
-      if (!glOrCanvas) {
-        var canvas = typeof OffscreenCanvas === 'function'
-          ? new OffscreenCanvas(1, 1)
-          : typeof document !== 'undefined'
-            ? document.createElement('canvas')
-            : null;
-        if (!canvas) {
-          throw new Error('OffscreenCanvas or DOM canvas not supported')
-        }
-        glOrCanvas = implicitContext = canvas.getContext('webgl', { depth: false });
-      }
-    }
-
-    validateSupport(glOrCanvas);
-
-    var rgbaData = new Uint8Array(sdfWidth * sdfHeight * 4); //not Uint8ClampedArray, cuz Safari
-
-    // Render into a background texture framebuffer
-    withWebGLContext(glOrCanvas, function (ref) {
-      var gl = ref.gl;
-      var withTexture = ref.withTexture;
-      var withTextureFramebuffer = ref.withTextureFramebuffer;
-
-      withTexture('readable', function (texture, textureUnit) {
-        gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, sdfWidth, sdfHeight, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);
-
-        withTextureFramebuffer(texture, textureUnit, function (framebuffer) {
-          generateIntoFramebuffer(
-            sdfWidth,
-            sdfHeight,
-            path,
-            viewBox,
-            maxDistance,
-            sdfExponent,
-            gl,
-            framebuffer,
-            0,
-            0,
-            0 // red channel
-          );
-          gl.readPixels(0, 0, sdfWidth, sdfHeight, gl.RGBA, gl.UNSIGNED_BYTE, rgbaData);
-        });
-      });
-    });
-
-    // Throw away all but the red channel
-    var data = new Uint8Array(sdfWidth * sdfHeight);
-    for (var i = 0, j = 0; i < rgbaData.length; i += 4) {
-      data[j++] = rgbaData[i];
-    }
-
-    return data
-  }
-
-  function generateIntoCanvas$1(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, x, y, channel) {
-    if ( sdfExponent === void 0 ) sdfExponent = 1;
-    if ( x === void 0 ) x = 0;
-    if ( y === void 0 ) y = 0;
-    if ( channel === void 0 ) channel = 0;
-
-    generateIntoFramebuffer(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, null, x, y, channel);
-  }
-
-  function generateIntoFramebuffer (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas, framebuffer, x, y, channel) {
-    if ( sdfExponent === void 0 ) sdfExponent = 1;
-    if ( x === void 0 ) x = 0;
-    if ( y === void 0 ) y = 0;
-    if ( channel === void 0 ) channel = 0;
-
-    // Verify support
-    validateSupport(glOrCanvas);
-
-    // Compute path segments
-    var lineSegmentCoords = [];
-    pathToLineSegments(path, function (x1, y1, x2, y2) {
-      lineSegmentCoords.push(x1, y1, x2, y2);
-    });
-    lineSegmentCoords = new Float32Array(lineSegmentCoords);
-
-    withWebGLContext(glOrCanvas, function (ref) {
-      var gl = ref.gl;
-      var isWebGL2 = ref.isWebGL2;
-      var getExtension = ref.getExtension;
-      var withProgram = ref.withProgram;
-      var withTexture = ref.withTexture;
-      var withTextureFramebuffer = ref.withTextureFramebuffer;
-      var handleContextLoss = ref.handleContextLoss;
-
-      withTexture('rawDistances', function (intermediateTexture, intermediateTextureUnit) {
-        if (sdfWidth !== intermediateTexture._lastWidth || sdfHeight !== intermediateTexture._lastHeight) {
-          gl.texImage2D(
-            gl.TEXTURE_2D, 0, gl.RGBA,
-            intermediateTexture._lastWidth = sdfWidth,
-            intermediateTexture._lastHeight = sdfHeight,
-            0, gl.RGBA, gl.UNSIGNED_BYTE, null
-          );
-        }
-
-        // Unsigned distance pass
-        withProgram('main', mainVertex, mainFragment, function (ref) {
-          var setAttribute = ref.setAttribute;
-          var setUniform = ref.setUniform;
-
-          // Init extensions
-          var instancingExtension = !isWebGL2 && getExtension('ANGLE_instanced_arrays');
-          var blendMinMaxExtension = !isWebGL2 && getExtension('EXT_blend_minmax');
-
-          // Init/update attributes
-          setAttribute('aUV', 2, gl.STATIC_DRAW, 0, viewportUVs);
-          setAttribute('aLineSegment', 4, gl.DYNAMIC_DRAW, 1, lineSegmentCoords);
-
-          // Init/update uniforms
-          setUniform.apply(void 0, [ '4f', 'uGlyphBounds' ].concat( viewBox ));
-          setUniform('1f', 'uMaxDistance', maxDistance);
-          setUniform('1f', 'uExponent', sdfExponent);
-
-          // Render initial unsigned distance / winding number info to a texture
-          withTextureFramebuffer(intermediateTexture, intermediateTextureUnit, function (framebuffer) {
-            gl.enable(gl.BLEND);
-            gl.colorMask(true, true, true, true);
-            gl.viewport(0, 0, sdfWidth, sdfHeight);
-            gl.scissor(0, 0, sdfWidth, sdfHeight);
-            gl.blendFunc(gl.ONE, gl.ONE);
-            // Red+Green channels are incremented (FUNC_ADD) for segment-ray crossings to give a "winding number".
-            // Alpha holds the closest (MAX) unsigned distance.
-            gl.blendEquationSeparate(gl.FUNC_ADD, isWebGL2 ? gl.MAX : blendMinMaxExtension.MAX_EXT);
-            gl.clear(gl.COLOR_BUFFER_BIT);
-            if (isWebGL2) {
-              gl.drawArraysInstanced(gl.TRIANGLES, 0, 3, lineSegmentCoords.length / 4);
-            } else {
-              instancingExtension.drawArraysInstancedANGLE(gl.TRIANGLES, 0, 3, lineSegmentCoords.length / 4);
-            }
-            // Debug
-            // const debug = new Uint8Array(sdfWidth * sdfHeight * 4)
-            // gl.readPixels(0, 0, sdfWidth, sdfHeight, gl.RGBA, gl.UNSIGNED_BYTE, debug)
-            // console.log('intermediate texture data: ', debug)
-          });
-        });
-
-        // Use the data stored in the texture to apply inside/outside and write to the output framebuffer rect+channel.
-        withProgram('post', viewportQuadVertex, postFragment, function (program) {
-          program.setAttribute('aUV', 2, gl.STATIC_DRAW, 0, viewportUVs);
-          program.setUniform('1i', 'tex', intermediateTextureUnit);
-          gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);
-          gl.disable(gl.BLEND);
-          gl.colorMask(channel === 0, channel === 1, channel === 2, channel === 3);
-          gl.viewport(x, y, sdfWidth, sdfHeight);
-          gl.scissor(x, y, sdfWidth, sdfHeight);
-          gl.drawArrays(gl.TRIANGLES, 0, 3);
-        });
-      });
-
-      // Handle context loss occurring during any of the above calls
-      if (gl.isContextLost()) {
-        handleContextLoss();
-        throw new Error('webgl context lost')
-      }
-    });
-  }
-
-  function isSupported (glOrCanvas) {
-    var key = (!glOrCanvas || glOrCanvas === implicitContext) ? NULL_OBJECT : (glOrCanvas.canvas || glOrCanvas);
-    var supported = supportByCanvas.get(key);
-    if (supported === undefined) {
-      isTestingSupport = true;
-      var failReason = null;
-      try {
-        // Since we can't detect all failure modes up front, let's just do a trial run of a
-        // simple path and compare what we get back to the correct expected result. This will
-        // also serve to prime the shader compilation.
-        var expectedResult = [
-          97, 106, 97, 61,
-          99, 137, 118, 80,
-          80, 118, 137, 99,
-          61, 97, 106, 97
-        ];
-        var testResult = generate$1(
-          4,
-          4,
-          'M8,8L16,8L24,24L16,24Z',
-          [0, 0, 32, 32],
-          24,
-          1,
-          glOrCanvas
-        );
-        supported = testResult && expectedResult.length === testResult.length &&
-          testResult.every(function (val, i) { return val === expectedResult[i]; });
-        if (!supported) {
-          failReason = 'bad trial run results';
-          console.info(expectedResult, testResult);
-        }
-      } catch (err) {
-        // TODO if it threw due to webgl context loss, should we maybe leave isSupported as null and try again later?
-        supported = false;
-        failReason = err.message;
-      }
-      if (failReason) {
-        console.warn('WebGL SDF generation not supported:', failReason);
-      }
-      isTestingSupport = false;
-      supportByCanvas.set(key, supported);
-    }
-    return supported
-  }
-
-  var webgl = /*#__PURE__*/Object.freeze({
-    __proto__: null,
-    generate: generate$1,
-    generateIntoCanvas: generateIntoCanvas$1,
-    generateIntoFramebuffer: generateIntoFramebuffer,
-    isSupported: isSupported
-  });
-
-  /**
-   * Generate an SDF texture image for a 2D path.
-   *
-   * @param {number} sdfWidth - width of the SDF output image in pixels.
-   * @param {number} sdfHeight - height of the SDF output image in pixels.
-   * @param {string} path - an SVG-like path string describing the glyph; should only contain commands: M/L/Q/C/Z.
-   * @param {number[]} viewBox - [minX, minY, maxX, maxY] in font units aligning with the texture's edges.
-   * @param {number} maxDistance - the maximum distance from the glyph path in font units that will be encoded; defaults
-   *        to half the maximum viewBox dimension.
-   * @param {number} [sdfExponent] - specifies an exponent for encoding the SDF's distance values; higher exponents
-   *        will give greater precision nearer the glyph's path.
-   * @return {Uint8Array}
-   */
-  function generate(
-    sdfWidth,
-    sdfHeight,
-    path,
-    viewBox,
-    maxDistance,
-    sdfExponent
-  ) {
-    if ( maxDistance === void 0 ) maxDistance = Math.max(viewBox[2] - viewBox[0], viewBox[3] - viewBox[1]) / 2;
-    if ( sdfExponent === void 0 ) sdfExponent = 1;
-
-    try {
-      return generate$1.apply(webgl, arguments)
-    } catch(e) {
-      console.info('WebGL SDF generation failed, falling back to JS', e);
-      return generate$2.apply(javascript, arguments)
-    }
-  }
-
-  /**
-   * Generate an SDF texture image for a 2D path, inserting the result into a WebGL `canvas` at a given x/y position
-   * and color channel. This is generally much faster than calling `generate` because it does not require reading pixels
-   * back from the GPU->CPU -- the `canvas` can be used directly as a WebGL texture image, so it all stays on the GPU.
-   *
-   * @param {number} sdfWidth - width of the SDF output image in pixels.
-   * @param {number} sdfHeight - height of the SDF output image in pixels.
-   * @param {string} path - an SVG-like path string describing the glyph; should only contain commands: M/L/Q/C/Z.
-   * @param {number[]} viewBox - [minX, minY, maxX, maxY] in font units aligning with the texture's edges.
-   * @param {number} maxDistance - the maximum distance from the glyph path in font units that will be encoded; defaults
-   *        to half the maximum viewBox dimension.
-   * @param {number} [sdfExponent] - specifies an exponent for encoding the SDF's distance values; higher exponents
-   *        will give greater precision nearer the glyph's path.
-   * @param {HTMLCanvasElement|OffscreenCanvas} canvas - a WebGL-enabled canvas into which the SDF will be rendered.
-   *        Only the relevant rect/channel will be modified, the rest will be preserved. To avoid unpredictable results
-   *        due to shared GL context state, this canvas should be dedicated to use by this library alone.
-   * @param {number} x - the x position at which to render the SDF.
-   * @param {number} y - the y position at which to render the SDF.
-   * @param {number} channel - the color channel index (0-4) into which the SDF will be rendered.
-   * @return {Uint8Array}
-   */
-  function generateIntoCanvas(
-    sdfWidth,
-    sdfHeight,
-    path,
-    viewBox,
-    maxDistance,
-    sdfExponent,
-    canvas,
-    x,
-    y,
-    channel
-  ) {
-    if ( maxDistance === void 0 ) maxDistance = Math.max(viewBox[2] - viewBox[0], viewBox[3] - viewBox[1]) / 2;
-    if ( sdfExponent === void 0 ) sdfExponent = 1;
-    if ( x === void 0 ) x = 0;
-    if ( y === void 0 ) y = 0;
-    if ( channel === void 0 ) channel = 0;
-
-    try {
-      return generateIntoCanvas$1.apply(webgl, arguments)
-    } catch(e) {
-      console.info('WebGL SDF generation failed, falling back to JS', e);
-      return generateIntoCanvas$2.apply(javascript, arguments)
-    }
-  }
-
-  exports.forEachPathCommand = forEachPathCommand;
-  exports.generate = generate;
-  exports.generateIntoCanvas = generateIntoCanvas;
-  exports.javascript = javascript;
-  exports.pathToLineSegments = pathToLineSegments;
-  exports.webgl = webgl;
-  exports.webglUtils = webglUtils;
-
-  Object.defineProperty(exports, '__esModule', { value: true });
-
-  return exports;
-
-}({}));
-return exports
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/bidi-js/dist/bidi.mjs
-function bidiFactory() {
-var bidi = (function (exports) {
-
-  // Bidi character types data, auto generated
-  var DATA = {
-    "R": "13k,1a,2,3,3,2+1j,ch+16,a+1,5+2,2+n,5,a,4,6+16,4+3,h+1b,4mo,179q,2+9,2+11,2i9+7y,2+68,4,3+4,5+13,4+3,2+4k,3+29,8+cf,1t+7z,w+17,3+3m,1t+3z,16o1+5r,8+30,8+mc,29+1r,29+4v,75+73",
-    "EN": "1c+9,3d+1,6,187+9,513,4+5,7+9,sf+j,175h+9,qw+q,161f+1d,4xt+a,25i+9",
-    "ES": "17,2,6dp+1,f+1,av,16vr,mx+1,4o,2",
-    "ET": "z+2,3h+3,b+1,ym,3e+1,2o,p4+1,8,6u,7c,g6,1wc,1n9+4,30+1b,2n,6d,qhx+1,h0m,a+1,49+2,63+1,4+1,6bb+3,12jj",
-    "AN": "16o+5,2j+9,2+1,35,ed,1ff2+9,87+u",
-    "CS": "18,2+1,b,2u,12k,55v,l,17v0,2,3,53,2+1,b",
-    "B": "a,3,f+2,2v,690",
-    "S": "9,2,k",
-    "WS": "c,k,4f4,1vk+a,u,1j,335",
-    "ON": "x+1,4+4,h+5,r+5,r+3,z,5+3,2+1,2+1,5,2+2,3+4,o,w,ci+1,8+d,3+d,6+8,2+g,39+1,9,6+1,2,33,b8,3+1,3c+1,7+1,5r,b,7h+3,sa+5,2,3i+6,jg+3,ur+9,2v,ij+1,9g+9,7+a,8m,4+1,49+x,14u,2+2,c+2,e+2,e+2,e+1,i+n,e+e,2+p,u+2,e+2,36+1,2+3,2+1,b,2+2,6+5,2,2,2,h+1,5+4,6+3,3+f,16+2,5+3l,3+81,1y+p,2+40,q+a,m+13,2r+ch,2+9e,75+hf,3+v,2+2w,6e+5,f+6,75+2a,1a+p,2+2g,d+5x,r+b,6+3,4+o,g,6+1,6+2,2k+1,4,2j,5h+z,1m+1,1e+f,t+2,1f+e,d+3,4o+3,2s+1,w,535+1r,h3l+1i,93+2,2s,b+1,3l+x,2v,4g+3,21+3,kz+1,g5v+1,5a,j+9,n+v,2,3,2+8,2+1,3+2,2,3,46+1,4+4,h+5,r+5,r+a,3h+2,4+6,b+4,78,1r+24,4+c,4,1hb,ey+6,103+j,16j+c,1ux+7,5+g,fsh,jdq+1t,4,57+2e,p1,1m,1m,1m,1m,4kt+1,7j+17,5+2r,d+e,3+e,2+e,2+10,m+4,w,1n+5,1q,4z+5,4b+rb,9+c,4+c,4+37,d+2g,8+b,l+b,5+1j,9+9,7+13,9+t,3+1,27+3c,2+29,2+3q,d+d,3+4,4+2,6+6,a+o,8+6,a+2,e+6,16+42,2+1i",
-    "BN": "0+8,6+d,2s+5,2+p,e,4m9,1kt+2,2b+5,5+5,17q9+v,7k,6p+8,6+1,119d+3,440+7,96s+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+75,6p+2rz,1ben+1,1ekf+1,1ekf+1",
-    "NSM": "lc+33,7o+6,7c+18,2,2+1,2+1,2,21+a,1d+k,h,2u+6,3+5,3+1,2+3,10,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,g+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+g,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,k1+w,2db+2,3y,2p+v,ff+3,30+1,n9x+3,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,r2,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+5,3+1,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2d+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,f0c+4,1o+6,t5,1s+3,2a,f5l+1,43t+2,i+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,gzhy+6n",
-    "AL": "16w,3,2,e+1b,z+2,2+2s,g+1,8+1,b+m,2+t,s+2i,c+e,4h+f,1d+1e,1bwe+dp,3+3z,x+c,2+1,35+3y,2rm+z,5+7,b+5,dt+l,c+u,17nl+27,1t+27,4x+6n,3+d",
-    "LRO": "6ct",
-    "RLO": "6cu",
-    "LRE": "6cq",
-    "RLE": "6cr",
-    "PDF": "6cs",
-    "LRI": "6ee",
-    "RLI": "6ef",
-    "FSI": "6eg",
-    "PDI": "6eh"
-  };
-
-  var TYPES = {};
-  var TYPES_TO_NAMES = {};
-  TYPES.L = 1; //L is the default
-  TYPES_TO_NAMES[1] = 'L';
-  Object.keys(DATA).forEach(function (type, i) {
-    TYPES[type] = 1 << (i + 1);
-    TYPES_TO_NAMES[TYPES[type]] = type;
-  });
-  Object.freeze(TYPES);
-
-  var ISOLATE_INIT_TYPES = TYPES.LRI | TYPES.RLI | TYPES.FSI;
-  var STRONG_TYPES = TYPES.L | TYPES.R | TYPES.AL;
-  var NEUTRAL_ISOLATE_TYPES = TYPES.B | TYPES.S | TYPES.WS | TYPES.ON | TYPES.FSI | TYPES.LRI | TYPES.RLI | TYPES.PDI;
-  var BN_LIKE_TYPES = TYPES.BN | TYPES.RLE | TYPES.LRE | TYPES.RLO | TYPES.LRO | TYPES.PDF;
-  var TRAILING_TYPES = TYPES.S | TYPES.WS | TYPES.B | ISOLATE_INIT_TYPES | TYPES.PDI | BN_LIKE_TYPES;
-
-  var map = null;
-
-  function parseData () {
-    if (!map) {
-      //const start = performance.now()
-      map = new Map();
-      var loop = function ( type ) {
-        if (DATA.hasOwnProperty(type)) {
-          var lastCode = 0;
-          DATA[type].split(',').forEach(function (range) {
-            var ref = range.split('+');
-            var skip = ref[0];
-            var step = ref[1];
-            skip = parseInt(skip, 36);
-            step = step ? parseInt(step, 36) : 0;
-            map.set(lastCode += skip, TYPES[type]);
-            for (var i = 0; i < step; i++) {
-              map.set(++lastCode, TYPES[type]);
-            }
-          });
-        }
-      };
-
-      for (var type in DATA) loop( type );
-      //console.log(`char types parsed in ${performance.now() - start}ms`)
-    }
-  }
-
-  /**
-   * @param {string} char
-   * @return {number}
-   */
-  function getBidiCharType (char) {
-    parseData();
-    return map.get(char.codePointAt(0)) || TYPES.L
-  }
-
-  function getBidiCharTypeName(char) {
-    return TYPES_TO_NAMES[getBidiCharType(char)]
-  }
-
-  // Bidi bracket pairs data, auto generated
-  var data$1 = {
-    "pairs": "14>1,1e>2,u>2,2wt>1,1>1,1ge>1,1wp>1,1j>1,f>1,hm>1,1>1,u>1,u6>1,1>1,+5,28>1,w>1,1>1,+3,b8>1,1>1,+3,1>3,-1>-1,3>1,1>1,+2,1s>1,1>1,x>1,th>1,1>1,+2,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,4q>1,1e>2,u>2,2>1,+1",
-    "canonical": "6f1>-6dx,6dy>-6dx,6ec>-6ed,6ee>-6ed,6ww>2jj,-2ji>2jj,14r4>-1e7l,1e7m>-1e7l,1e7m>-1e5c,1e5d>-1e5b,1e5c>-14qx,14qy>-14qx,14vn>-1ecg,1ech>-1ecg,1edu>-1ecg,1eci>-1ecg,1eda>-1ecg,1eci>-1ecg,1eci>-168q,168r>-168q,168s>-14ye,14yf>-14ye"
-  };
-
-  /**
-   * Parses an string that holds encoded codepoint mappings, e.g. for bracket pairs or
-   * mirroring characters, as encoded by scripts/generateBidiData.js. Returns an object
-   * holding the `map`, and optionally a `reverseMap` if `includeReverse:true`.
-   * @param {string} encodedString
-   * @param {boolean} includeReverse - true if you want reverseMap in the output
-   * @return {{map: Map<number, number>, reverseMap?: Map<number, number>}}
-   */
-  function parseCharacterMap (encodedString, includeReverse) {
-    var radix = 36;
-    var lastCode = 0;
-    var map = new Map();
-    var reverseMap = includeReverse && new Map();
-    var prevPair;
-    encodedString.split(',').forEach(function visit(entry) {
-      if (entry.indexOf('+') !== -1) {
-        for (var i = +entry; i--;) {
-          visit(prevPair);
-        }
-      } else {
-        prevPair = entry;
-        var ref = entry.split('>');
-        var a = ref[0];
-        var b = ref[1];
-        a = String.fromCodePoint(lastCode += parseInt(a, radix));
-        b = String.fromCodePoint(lastCode += parseInt(b, radix));
-        map.set(a, b);
-        includeReverse && reverseMap.set(b, a);
-      }
-    });
-    return { map: map, reverseMap: reverseMap }
-  }
-
-  var openToClose, closeToOpen, canonical;
-
-  function parse$1 () {
-    if (!openToClose) {
-      //const start = performance.now()
-      var ref = parseCharacterMap(data$1.pairs, true);
-      var map = ref.map;
-      var reverseMap = ref.reverseMap;
-      openToClose = map;
-      closeToOpen = reverseMap;
-      canonical = parseCharacterMap(data$1.canonical, false).map;
-      //console.log(`brackets parsed in ${performance.now() - start}ms`)
-    }
-  }
-
-  function openingToClosingBracket (char) {
-    parse$1();
-    return openToClose.get(char) || null
-  }
-
-  function closingToOpeningBracket (char) {
-    parse$1();
-    return closeToOpen.get(char) || null
-  }
-
-  function getCanonicalBracket (char) {
-    parse$1();
-    return canonical.get(char) || null
-  }
-
-  // Local type aliases
-  var TYPE_L = TYPES.L;
-  var TYPE_R = TYPES.R;
-  var TYPE_EN = TYPES.EN;
-  var TYPE_ES = TYPES.ES;
-  var TYPE_ET = TYPES.ET;
-  var TYPE_AN = TYPES.AN;
-  var TYPE_CS = TYPES.CS;
-  var TYPE_B = TYPES.B;
-  var TYPE_S = TYPES.S;
-  var TYPE_ON = TYPES.ON;
-  var TYPE_BN = TYPES.BN;
-  var TYPE_NSM = TYPES.NSM;
-  var TYPE_AL = TYPES.AL;
-  var TYPE_LRO = TYPES.LRO;
-  var TYPE_RLO = TYPES.RLO;
-  var TYPE_LRE = TYPES.LRE;
-  var TYPE_RLE = TYPES.RLE;
-  var TYPE_PDF = TYPES.PDF;
-  var TYPE_LRI = TYPES.LRI;
-  var TYPE_RLI = TYPES.RLI;
-  var TYPE_FSI = TYPES.FSI;
-  var TYPE_PDI = TYPES.PDI;
-
-  /**
-   * @typedef {object} GetEmbeddingLevelsResult
-   * @property {{start, end, level}[]} paragraphs
-   * @property {Uint8Array} levels
-   */
-
-  /**
-   * This function applies the Bidirectional Algorithm to a string, returning the resolved embedding levels
-   * in a single Uint8Array plus a list of objects holding each paragraph's start and end indices and resolved
-   * base embedding level.
-   *
-   * @param {string} string - The input string
-   * @param {"ltr"|"rtl"|"auto"} [baseDirection] - Use "ltr" or "rtl" to force a base paragraph direction,
-   *        otherwise a direction will be chosen automatically from each paragraph's contents.
-   * @return {GetEmbeddingLevelsResult}
-   */
-  function getEmbeddingLevels (string, baseDirection) {
-    var MAX_DEPTH = 125;
-
-    // Start by mapping all characters to their unicode type, as a bitmask integer
-    var charTypes = new Uint32Array(string.length);
-    for (var i = 0; i < string.length; i++) {
-      charTypes[i] = getBidiCharType(string[i]);
-    }
-
-    var charTypeCounts = new Map(); //will be cleared at start of each paragraph
-    function changeCharType(i, type) {
-      var oldType = charTypes[i];
-      charTypes[i] = type;
-      charTypeCounts.set(oldType, charTypeCounts.get(oldType) - 1);
-      if (oldType & NEUTRAL_ISOLATE_TYPES) {
-        charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) - 1);
-      }
-      charTypeCounts.set(type, (charTypeCounts.get(type) || 0) + 1);
-      if (type & NEUTRAL_ISOLATE_TYPES) {
-        charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) || 0) + 1);
-      }
-    }
-
-    var embedLevels = new Uint8Array(string.length);
-    var isolationPairs = new Map(); //init->pdi and pdi->init
-
-    // === 3.3.1 The Paragraph Level ===
-    // 3.3.1 P1: Split the text into paragraphs
-    var paragraphs = []; // [{start, end, level}, ...]
-    var paragraph = null;
-    for (var i$1 = 0; i$1 < string.length; i$1++) {
-      if (!paragraph) {
-        paragraphs.push(paragraph = {
-          start: i$1,
-          end: string.length - 1,
-          // 3.3.1 P2-P3: Determine the paragraph level
-          level: baseDirection === 'rtl' ? 1 : baseDirection === 'ltr' ? 0 : determineAutoEmbedLevel(i$1, false)
-        });
-      }
-      if (charTypes[i$1] & TYPE_B) {
-        paragraph.end = i$1;
-        paragraph = null;
-      }
-    }
-
-    var FORMATTING_TYPES = TYPE_RLE | TYPE_LRE | TYPE_RLO | TYPE_LRO | ISOLATE_INIT_TYPES | TYPE_PDI | TYPE_PDF | TYPE_B;
-    var nextEven = function (n) { return n + ((n & 1) ? 1 : 2); };
-    var nextOdd = function (n) { return n + ((n & 1) ? 2 : 1); };
-
-    // Everything from here on will operate per paragraph.
-    for (var paraIdx = 0; paraIdx < paragraphs.length; paraIdx++) {
-      paragraph = paragraphs[paraIdx];
-      var statusStack = [{
-        _level: paragraph.level,
-        _override: 0, //0=neutral, 1=L, 2=R
-        _isolate: 0 //bool
-      }];
-      var stackTop = (void 0);
-      var overflowIsolateCount = 0;
-      var overflowEmbeddingCount = 0;
-      var validIsolateCount = 0;
-      charTypeCounts.clear();
-
-      // === 3.3.2 Explicit Levels and Directions ===
-      for (var i$2 = paragraph.start; i$2 <= paragraph.end; i$2++) {
-        var charType = charTypes[i$2];
-        stackTop = statusStack[statusStack.length - 1];
-
-        // Set initial counts
-        charTypeCounts.set(charType, (charTypeCounts.get(charType) || 0) + 1);
-        if (charType & NEUTRAL_ISOLATE_TYPES) {
-          charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) || 0) + 1);
-        }
-
-        // Explicit Embeddings: 3.3.2 X2 - X3
-        if (charType & FORMATTING_TYPES) { //prefilter all formatters
-          if (charType & (TYPE_RLE | TYPE_LRE)) {
-            embedLevels[i$2] = stackTop._level; // 5.2
-            var level = (charType === TYPE_RLE ? nextOdd : nextEven)(stackTop._level);
-            if (level <= MAX_DEPTH && !overflowIsolateCount && !overflowEmbeddingCount) {
-              statusStack.push({
-                _level: level,
-                _override: 0,
-                _isolate: 0
-              });
-            } else if (!overflowIsolateCount) {
-              overflowEmbeddingCount++;
-            }
-          }
-
-          // Explicit Overrides: 3.3.2 X4 - X5
-          else if (charType & (TYPE_RLO | TYPE_LRO)) {
-            embedLevels[i$2] = stackTop._level; // 5.2
-            var level$1 = (charType === TYPE_RLO ? nextOdd : nextEven)(stackTop._level);
-            if (level$1 <= MAX_DEPTH && !overflowIsolateCount && !overflowEmbeddingCount) {
-              statusStack.push({
-                _level: level$1,
-                _override: (charType & TYPE_RLO) ? TYPE_R : TYPE_L,
-                _isolate: 0
-              });
-            } else if (!overflowIsolateCount) {
-              overflowEmbeddingCount++;
-            }
-          }
-
-          // Isolates: 3.3.2 X5a - X5c
-          else if (charType & ISOLATE_INIT_TYPES) {
-            // X5c - FSI becomes either RLI or LRI
-            if (charType & TYPE_FSI) {
-              charType = determineAutoEmbedLevel(i$2 + 1, true) === 1 ? TYPE_RLI : TYPE_LRI;
-            }
-
-            embedLevels[i$2] = stackTop._level;
-            if (stackTop._override) {
-              changeCharType(i$2, stackTop._override);
-            }
-            var level$2 = (charType === TYPE_RLI ? nextOdd : nextEven)(stackTop._level);
-            if (level$2 <= MAX_DEPTH && overflowIsolateCount === 0 && overflowEmbeddingCount === 0) {
-              validIsolateCount++;
-              statusStack.push({
-                _level: level$2,
-                _override: 0,
-                _isolate: 1,
-                _isolInitIndex: i$2
-              });
-            } else {
-              overflowIsolateCount++;
-            }
-          }
-
-          // Terminating Isolates: 3.3.2 X6a
-          else if (charType & TYPE_PDI) {
-            if (overflowIsolateCount > 0) {
-              overflowIsolateCount--;
-            } else if (validIsolateCount > 0) {
-              overflowEmbeddingCount = 0;
-              while (!statusStack[statusStack.length - 1]._isolate) {
-                statusStack.pop();
-              }
-              // Add to isolation pairs bidirectional mapping:
-              var isolInitIndex = statusStack[statusStack.length - 1]._isolInitIndex;
-              if (isolInitIndex != null) {
-                isolationPairs.set(isolInitIndex, i$2);
-                isolationPairs.set(i$2, isolInitIndex);
-              }
-              statusStack.pop();
-              validIsolateCount--;
-            }
-            stackTop = statusStack[statusStack.length - 1];
-            embedLevels[i$2] = stackTop._level;
-            if (stackTop._override) {
-              changeCharType(i$2, stackTop._override);
-            }
-          }
-
-
-          // Terminating Embeddings and Overrides: 3.3.2 X7
-          else if (charType & TYPE_PDF) {
-            if (overflowIsolateCount === 0) {
-              if (overflowEmbeddingCount > 0) {
-                overflowEmbeddingCount--;
-              } else if (!stackTop._isolate && statusStack.length > 1) {
-                statusStack.pop();
-                stackTop = statusStack[statusStack.length - 1];
-              }
-            }
-            embedLevels[i$2] = stackTop._level; // 5.2
-          }
-
-          // End of Paragraph: 3.3.2 X8
-          else if (charType & TYPE_B) {
-            embedLevels[i$2] = paragraph.level;
-          }
-        }
-
-        // Non-formatting characters: 3.3.2 X6
-        else {
-          embedLevels[i$2] = stackTop._level;
-          // NOTE: This exclusion of BN seems to go against what section 5.2 says, but is required for test passage
-          if (stackTop._override && charType !== TYPE_BN) {
-            changeCharType(i$2, stackTop._override);
-          }
-        }
-      }
-
-      // === 3.3.3 Preparations for Implicit Processing ===
-
-      // Remove all RLE, LRE, RLO, LRO, PDF, and BN characters: 3.3.3 X9
-      // Note: Due to section 5.2, we won't remove them, but we'll use the BN_LIKE_TYPES bitset to
-      // easily ignore them all from here on out.
-
-      // 3.3.3 X10
-      // Compute the set of isolating run sequences as specified by BD13
-      var levelRuns = [];
-      var currentRun = null;
-      for (var i$3 = paragraph.start; i$3 <= paragraph.end; i$3++) {
-        var charType$1 = charTypes[i$3];
-        if (!(charType$1 & BN_LIKE_TYPES)) {
-          var lvl = embedLevels[i$3];
-          var isIsolInit = charType$1 & ISOLATE_INIT_TYPES;
-          var isPDI = charType$1 === TYPE_PDI;
-          if (currentRun && lvl === currentRun._level) {
-            currentRun._end = i$3;
-            currentRun._endsWithIsolInit = isIsolInit;
-          } else {
-            levelRuns.push(currentRun = {
-              _start: i$3,
-              _end: i$3,
-              _level: lvl,
-              _startsWithPDI: isPDI,
-              _endsWithIsolInit: isIsolInit
-            });
-          }
-        }
-      }
-      var isolatingRunSeqs = []; // [{seqIndices: [], sosType: L|R, eosType: L|R}]
-      for (var runIdx = 0; runIdx < levelRuns.length; runIdx++) {
-        var run = levelRuns[runIdx];
-        if (!run._startsWithPDI || (run._startsWithPDI && !isolationPairs.has(run._start))) {
-          var seqRuns = [currentRun = run];
-          for (var pdiIndex = (void 0); currentRun && currentRun._endsWithIsolInit && (pdiIndex = isolationPairs.get(currentRun._end)) != null;) {
-            for (var i$4 = runIdx + 1; i$4 < levelRuns.length; i$4++) {
-              if (levelRuns[i$4]._start === pdiIndex) {
-                seqRuns.push(currentRun = levelRuns[i$4]);
-                break
-              }
-            }
-          }
-          // build flat list of indices across all runs:
-          var seqIndices = [];
-          for (var i$5 = 0; i$5 < seqRuns.length; i$5++) {
-            var run$1 = seqRuns[i$5];
-            for (var j = run$1._start; j <= run$1._end; j++) {
-              seqIndices.push(j);
-            }
-          }
-          // determine the sos/eos types:
-          var firstLevel = embedLevels[seqIndices[0]];
-          var prevLevel = paragraph.level;
-          for (var i$6 = seqIndices[0] - 1; i$6 >= 0; i$6--) {
-            if (!(charTypes[i$6] & BN_LIKE_TYPES)) { //5.2
-              prevLevel = embedLevels[i$6];
-              break
-            }
-          }
-          var lastIndex = seqIndices[seqIndices.length - 1];
-          var lastLevel = embedLevels[lastIndex];
-          var nextLevel = paragraph.level;
-          if (!(charTypes[lastIndex] & ISOLATE_INIT_TYPES)) {
-            for (var i$7 = lastIndex + 1; i$7 <= paragraph.end; i$7++) {
-              if (!(charTypes[i$7] & BN_LIKE_TYPES)) { //5.2
-                nextLevel = embedLevels[i$7];
-                break
-              }
-            }
-          }
-          isolatingRunSeqs.push({
-            _seqIndices: seqIndices,
-            _sosType: Math.max(prevLevel, firstLevel) % 2 ? TYPE_R : TYPE_L,
-            _eosType: Math.max(nextLevel, lastLevel) % 2 ? TYPE_R : TYPE_L
-          });
-        }
-      }
-
-      // The next steps are done per isolating run sequence
-      for (var seqIdx = 0; seqIdx < isolatingRunSeqs.length; seqIdx++) {
-        var ref = isolatingRunSeqs[seqIdx];
-        var seqIndices$1 = ref._seqIndices;
-        var sosType = ref._sosType;
-        var eosType = ref._eosType;
-
-        // === 3.3.4 Resolving Weak Types ===
-
-        // W1 + 5.2. Search backward from each NSM to the first character in the isolating run sequence whose
-        // bidirectional type is not BN, and set the NSM to ON if it is an isolate initiator or PDI, and to its
-        // type otherwise. If the NSM is the first non-BN character, change the NSM to the type of sos.
-        if (charTypeCounts.get(TYPE_NSM)) {
-          for (var si = 0; si < seqIndices$1.length; si++) {
-            var i$8 = seqIndices$1[si];
-            if (charTypes[i$8] & TYPE_NSM) {
-              var prevType = sosType;
-              for (var sj = si - 1; sj >= 0; sj--) {
-                if (!(charTypes[seqIndices$1[sj]] & BN_LIKE_TYPES)) { //5.2 scan back to first non-BN
-                  prevType = charTypes[seqIndices$1[sj]];
-                  break
-                }
-              }
-              changeCharType(i$8, (prevType & (ISOLATE_INIT_TYPES | TYPE_PDI)) ? TYPE_ON : prevType);
-            }
-          }
-        }
-
-        // W2. Search backward from each instance of a European number until the first strong type (R, L, AL, or sos)
-        // is found. If an AL is found, change the type of the European number to Arabic number.
-        if (charTypeCounts.get(TYPE_EN)) {
-          for (var si$1 = 0; si$1 < seqIndices$1.length; si$1++) {
-            var i$9 = seqIndices$1[si$1];
-            if (charTypes[i$9] & TYPE_EN) {
-              for (var sj$1 = si$1 - 1; sj$1 >= -1; sj$1--) {
-                var prevCharType = sj$1 === -1 ? sosType : charTypes[seqIndices$1[sj$1]];
-                if (prevCharType & STRONG_TYPES) {
-                  if (prevCharType === TYPE_AL) {
-                    changeCharType(i$9, TYPE_AN);
-                  }
-                  break
-                }
-              }
-            }
-          }
-        }
-
-        // W3. Change all ALs to R
-        if (charTypeCounts.get(TYPE_AL)) {
-          for (var si$2 = 0; si$2 < seqIndices$1.length; si$2++) {
-            var i$10 = seqIndices$1[si$2];
-            if (charTypes[i$10] & TYPE_AL) {
-              changeCharType(i$10, TYPE_R);
-            }
-          }
-        }
-
-        // W4. A single European separator between two European numbers changes to a European number. A single common
-        // separator between two numbers of the same type changes to that type.
-        if (charTypeCounts.get(TYPE_ES) || charTypeCounts.get(TYPE_CS)) {
-          for (var si$3 = 1; si$3 < seqIndices$1.length - 1; si$3++) {
-            var i$11 = seqIndices$1[si$3];
-            if (charTypes[i$11] & (TYPE_ES | TYPE_CS)) {
-              var prevType$1 = 0, nextType = 0;
-              for (var sj$2 = si$3 - 1; sj$2 >= 0; sj$2--) {
-                prevType$1 = charTypes[seqIndices$1[sj$2]];
-                if (!(prevType$1 & BN_LIKE_TYPES)) { //5.2
-                  break
-                }
-              }
-              for (var sj$3 = si$3 + 1; sj$3 < seqIndices$1.length; sj$3++) {
-                nextType = charTypes[seqIndices$1[sj$3]];
-                if (!(nextType & BN_LIKE_TYPES)) { //5.2
-                  break
-                }
-              }
-              if (prevType$1 === nextType && (charTypes[i$11] === TYPE_ES ? prevType$1 === TYPE_EN : (prevType$1 & (TYPE_EN | TYPE_AN)))) {
-                changeCharType(i$11, prevType$1);
-              }
-            }
-          }
-        }
-
-        // W5. A sequence of European terminators adjacent to European numbers changes to all European numbers.
-        if (charTypeCounts.get(TYPE_EN)) {
-          for (var si$4 = 0; si$4 < seqIndices$1.length; si$4++) {
-            var i$12 = seqIndices$1[si$4];
-            if (charTypes[i$12] & TYPE_EN) {
-              for (var sj$4 = si$4 - 1; sj$4 >= 0 && (charTypes[seqIndices$1[sj$4]] & (TYPE_ET | BN_LIKE_TYPES)); sj$4--) {
-                changeCharType(seqIndices$1[sj$4], TYPE_EN);
-              }
-              for (var sj$5 = si$4 + 1; sj$5 < seqIndices$1.length && (charTypes[seqIndices$1[sj$5]] & (TYPE_ET | BN_LIKE_TYPES)); sj$5++) {
-                changeCharType(seqIndices$1[sj$5], TYPE_EN);
-              }
-            }
-          }
-        }
-
-        // W6. Otherwise, separators and terminators change to Other Neutral.
-        if (charTypeCounts.get(TYPE_ET) || charTypeCounts.get(TYPE_ES) || charTypeCounts.get(TYPE_CS)) {
-          for (var si$5 = 0; si$5 < seqIndices$1.length; si$5++) {
-            var i$13 = seqIndices$1[si$5];
-            if (charTypes[i$13] & (TYPE_ET | TYPE_ES | TYPE_CS)) {
-              changeCharType(i$13, TYPE_ON);
-              // 5.2 transform adjacent BNs too:
-              for (var sj$6 = si$5 - 1; sj$6 >= 0 && (charTypes[seqIndices$1[sj$6]] & BN_LIKE_TYPES); sj$6--) {
-                changeCharType(seqIndices$1[sj$6], TYPE_ON);
-              }
-              for (var sj$7 = si$5 + 1; sj$7 < seqIndices$1.length && (charTypes[seqIndices$1[sj$7]] & BN_LIKE_TYPES); sj$7++) {
-                changeCharType(seqIndices$1[sj$7], TYPE_ON);
-              }
-            }
-          }
-        }
-
-        // W7. Search backward from each instance of a European number until the first strong type (R, L, or sos)
-        // is found. If an L is found, then change the type of the European number to L.
-        // NOTE: implemented in single forward pass for efficiency
-        if (charTypeCounts.get(TYPE_EN)) {
-          for (var si$6 = 0, prevStrongType = sosType; si$6 < seqIndices$1.length; si$6++) {
-            var i$14 = seqIndices$1[si$6];
-            var type = charTypes[i$14];
-            if (type & TYPE_EN) {
-              if (prevStrongType === TYPE_L) {
-                changeCharType(i$14, TYPE_L);
-              }
-            } else if (type & STRONG_TYPES) {
-              prevStrongType = type;
-            }
-          }
-        }
-
-        // === 3.3.5 Resolving Neutral and Isolate Formatting Types ===
-
-        if (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES)) {
-          // N0. Process bracket pairs in an isolating run sequence sequentially in the logical order of the text
-          // positions of the opening paired brackets using the logic given below. Within this scope, bidirectional
-          // types EN and AN are treated as R.
-          var R_TYPES_FOR_N_STEPS = (TYPE_R | TYPE_EN | TYPE_AN);
-          var STRONG_TYPES_FOR_N_STEPS = R_TYPES_FOR_N_STEPS | TYPE_L;
-
-          // * Identify the bracket pairs in the current isolating run sequence according to BD16.
-          var bracketPairs = [];
-          {
-            var openerStack = [];
-            for (var si$7 = 0; si$7 < seqIndices$1.length; si$7++) {
-              // NOTE: for any potential bracket character we also test that it still carries a NI
-              // type, as that may have been changed earlier. This doesn't seem to be explicitly
-              // called out in the spec, but is required for passage of certain tests.
-              if (charTypes[seqIndices$1[si$7]] & NEUTRAL_ISOLATE_TYPES) {
-                var char = string[seqIndices$1[si$7]];
-                var oppositeBracket = (void 0);
-                // Opening bracket
-                if (openingToClosingBracket(char) !== null) {
-                  if (openerStack.length < 63) {
-                    openerStack.push({ char: char, seqIndex: si$7 });
-                  } else {
-                    break
-                  }
-                }
-                // Closing bracket
-                else if ((oppositeBracket = closingToOpeningBracket(char)) !== null) {
-                  for (var stackIdx = openerStack.length - 1; stackIdx >= 0; stackIdx--) {
-                    var stackChar = openerStack[stackIdx].char;
-                    if (stackChar === oppositeBracket ||
-                      stackChar === closingToOpeningBracket(getCanonicalBracket(char)) ||
-                      openingToClosingBracket(getCanonicalBracket(stackChar)) === char
-                    ) {
-                      bracketPairs.push([openerStack[stackIdx].seqIndex, si$7]);
-                      openerStack.length = stackIdx; //pop the matching bracket and all following
-                      break
-                    }
-                  }
-                }
-              }
-            }
-            bracketPairs.sort(function (a, b) { return a[0] - b[0]; });
-          }
-          // * For each bracket-pair element in the list of pairs of text positions
-          for (var pairIdx = 0; pairIdx < bracketPairs.length; pairIdx++) {
-            var ref$1 = bracketPairs[pairIdx];
-            var openSeqIdx = ref$1[0];
-            var closeSeqIdx = ref$1[1];
-            // a. Inspect the bidirectional types of the characters enclosed within the bracket pair.
-            // b. If any strong type (either L or R) matching the embedding direction is found, set the type for both
-            // brackets in the pair to match the embedding direction.
-            var foundStrongType = false;
-            var useStrongType = 0;
-            for (var si$8 = openSeqIdx + 1; si$8 < closeSeqIdx; si$8++) {
-              var i$15 = seqIndices$1[si$8];
-              if (charTypes[i$15] & STRONG_TYPES_FOR_N_STEPS) {
-                foundStrongType = true;
-                var lr = (charTypes[i$15] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;
-                if (lr === getEmbedDirection(i$15)) {
-                  useStrongType = lr;
-                  break
-                }
-              }
-            }
-            // c. Otherwise, if there is a strong type it must be opposite the embedding direction. Therefore, test
-            // for an established context with a preceding strong type by checking backwards before the opening paired
-            // bracket until the first strong type (L, R, or sos) is found.
-            //    1. If the preceding strong type is also opposite the embedding direction, context is established, so
-            //    set the type for both brackets in the pair to that direction.
-            //    2. Otherwise set the type for both brackets in the pair to the embedding direction.
-            if (foundStrongType && !useStrongType) {
-              useStrongType = sosType;
-              for (var si$9 = openSeqIdx - 1; si$9 >= 0; si$9--) {
-                var i$16 = seqIndices$1[si$9];
-                if (charTypes[i$16] & STRONG_TYPES_FOR_N_STEPS) {
-                  var lr$1 = (charTypes[i$16] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;
-                  if (lr$1 !== getEmbedDirection(i$16)) {
-                    useStrongType = lr$1;
-                  } else {
-                    useStrongType = getEmbedDirection(i$16);
-                  }
-                  break
-                }
-              }
-            }
-            if (useStrongType) {
-              charTypes[seqIndices$1[openSeqIdx]] = charTypes[seqIndices$1[closeSeqIdx]] = useStrongType;
-              // * Any number of characters that had original bidirectional character type NSM prior to the application
-              // of W1 that immediately follow a paired bracket which changed to L or R under N0 should change to match
-              // the type of their preceding bracket.
-              if (useStrongType !== getEmbedDirection(seqIndices$1[openSeqIdx])) {
-                for (var si$10 = openSeqIdx + 1; si$10 < seqIndices$1.length; si$10++) {
-                  if (!(charTypes[seqIndices$1[si$10]] & BN_LIKE_TYPES)) {
-                    if (getBidiCharType(string[seqIndices$1[si$10]]) & TYPE_NSM) {
-                      charTypes[seqIndices$1[si$10]] = useStrongType;
-                    }
-                    break
-                  }
-                }
-              }
-              if (useStrongType !== getEmbedDirection(seqIndices$1[closeSeqIdx])) {
-                for (var si$11 = closeSeqIdx + 1; si$11 < seqIndices$1.length; si$11++) {
-                  if (!(charTypes[seqIndices$1[si$11]] & BN_LIKE_TYPES)) {
-                    if (getBidiCharType(string[seqIndices$1[si$11]]) & TYPE_NSM) {
-                      charTypes[seqIndices$1[si$11]] = useStrongType;
-                    }
-                    break
-                  }
-                }
-              }
-            }
-          }
-
-          // N1. A sequence of NIs takes the direction of the surrounding strong text if the text on both sides has the
-          // same direction.
-          // N2. Any remaining NIs take the embedding direction.
-          for (var si$12 = 0; si$12 < seqIndices$1.length; si$12++) {
-            if (charTypes[seqIndices$1[si$12]] & NEUTRAL_ISOLATE_TYPES) {
-              var niRunStart = si$12, niRunEnd = si$12;
-              var prevType$2 = sosType; //si === 0 ? sosType : (charTypes[seqIndices[si - 1]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L
-              for (var si2 = si$12 - 1; si2 >= 0; si2--) {
-                if (charTypes[seqIndices$1[si2]] & BN_LIKE_TYPES) {
-                  niRunStart = si2; //5.2 treat BNs adjacent to NIs as NIs
-                } else {
-                  prevType$2 = (charTypes[seqIndices$1[si2]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;
-                  break
-                }
-              }
-              var nextType$1 = eosType;
-              for (var si2$1 = si$12 + 1; si2$1 < seqIndices$1.length; si2$1++) {
-                if (charTypes[seqIndices$1[si2$1]] & (NEUTRAL_ISOLATE_TYPES | BN_LIKE_TYPES)) {
-                  niRunEnd = si2$1;
-                } else {
-                  nextType$1 = (charTypes[seqIndices$1[si2$1]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;
-                  break
-                }
-              }
-              for (var sj$8 = niRunStart; sj$8 <= niRunEnd; sj$8++) {
-                charTypes[seqIndices$1[sj$8]] = prevType$2 === nextType$1 ? prevType$2 : getEmbedDirection(seqIndices$1[sj$8]);
-              }
-              si$12 = niRunEnd;
-            }
-          }
-        }
-      }
-
-      // === 3.3.6 Resolving Implicit Levels ===
-
-      for (var i$17 = paragraph.start; i$17 <= paragraph.end; i$17++) {
-        var level$3 = embedLevels[i$17];
-        var type$1 = charTypes[i$17];
-        // I2. For all characters with an odd (right-to-left) embedding level, those of type L, EN or AN go up one level.
-        if (level$3 & 1) {
-          if (type$1 & (TYPE_L | TYPE_EN | TYPE_AN)) {
-            embedLevels[i$17]++;
-          }
-        }
-          // I1. For all characters with an even (left-to-right) embedding level, those of type R go up one level
-        // and those of type AN or EN go up two levels.
-        else {
-          if (type$1 & TYPE_R) {
-            embedLevels[i$17]++;
-          } else if (type$1 & (TYPE_AN | TYPE_EN)) {
-            embedLevels[i$17] += 2;
-          }
-        }
-
-        // 5.2: Resolve any LRE, RLE, LRO, RLO, PDF, or BN to the level of the preceding character if there is one,
-        // and otherwise to the base level.
-        if (type$1 & BN_LIKE_TYPES) {
-          embedLevels[i$17] = i$17 === 0 ? paragraph.level : embedLevels[i$17 - 1];
-        }
-
-        // 3.4 L1.1-4: Reset the embedding level of segment/paragraph separators, and any sequence of whitespace or
-        // isolate formatting characters preceding them or the end of the paragraph, to the paragraph level.
-        // NOTE: this will also need to be applied to each individual line ending after line wrapping occurs.
-        if (i$17 === paragraph.end || getBidiCharType(string[i$17]) & (TYPE_S | TYPE_B)) {
-          for (var j$1 = i$17; j$1 >= 0 && (getBidiCharType(string[j$1]) & TRAILING_TYPES); j$1--) {
-            embedLevels[j$1] = paragraph.level;
-          }
-        }
-      }
-    }
-
-    // DONE! The resolved levels can then be used, after line wrapping, to flip runs of characters
-    // according to section 3.4 Reordering Resolved Levels
-    return {
-      levels: embedLevels,
-      paragraphs: paragraphs
-    }
-
-    function determineAutoEmbedLevel (start, isFSI) {
-      // 3.3.1 P2 - P3
-      for (var i = start; i < string.length; i++) {
-        var charType = charTypes[i];
-        if (charType & (TYPE_R | TYPE_AL)) {
-          return 1
-        }
-        if ((charType & (TYPE_B | TYPE_L)) || (isFSI && charType === TYPE_PDI)) {
-          return 0
-        }
-        if (charType & ISOLATE_INIT_TYPES) {
-          var pdi = indexOfMatchingPDI(i);
-          i = pdi === -1 ? string.length : pdi;
-        }
-      }
-      return 0
-    }
-
-    function indexOfMatchingPDI (isolateStart) {
-      // 3.1.2 BD9
-      var isolationLevel = 1;
-      for (var i = isolateStart + 1; i < string.length; i++) {
-        var charType = charTypes[i];
-        if (charType & TYPE_B) {
-          break
-        }
-        if (charType & TYPE_PDI) {
-          if (--isolationLevel === 0) {
-            return i
-          }
-        } else if (charType & ISOLATE_INIT_TYPES) {
-          isolationLevel++;
-        }
-      }
-      return -1
-    }
-
-    function getEmbedDirection (i) {
-      return (embedLevels[i] & 1) ? TYPE_R : TYPE_L
-    }
-
-  }
-
-  // Bidi mirrored chars data, auto generated
-  var data = "14>1,j>2,t>2,u>2,1a>g,2v3>1,1>1,1ge>1,1wd>1,b>1,1j>1,f>1,ai>3,-2>3,+1,8>1k0,-1jq>1y7,-1y6>1hf,-1he>1h6,-1h5>1ha,-1h8>1qi,-1pu>1,6>3u,-3s>7,6>1,1>1,f>1,1>1,+2,3>1,1>1,+13,4>1,1>1,6>1eo,-1ee>1,3>1mg,-1me>1mk,-1mj>1mi,-1mg>1mi,-1md>1,1>1,+2,1>10k,-103>1,1>1,4>1,5>1,1>1,+10,3>1,1>8,-7>8,+1,-6>7,+1,a>1,1>1,u>1,u6>1,1>1,+5,26>1,1>1,2>1,2>2,8>1,7>1,4>1,1>1,+5,b8>1,1>1,+3,1>3,-2>1,2>1,1>1,+2,c>1,3>1,1>1,+2,h>1,3>1,a>1,1>1,2>1,3>1,1>1,d>1,f>1,3>1,1a>1,1>1,6>1,7>1,13>1,k>1,1>1,+19,4>1,1>1,+2,2>1,1>1,+18,m>1,a>1,1>1,lk>1,1>1,4>1,2>1,f>1,3>1,1>1,+3,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,6>1,4j>1,j>2,t>2,u>2,2>1,+1";
-
-  var mirrorMap;
-
-  function parse () {
-    if (!mirrorMap) {
-      //const start = performance.now()
-      var ref = parseCharacterMap(data, true);
-      var map = ref.map;
-      var reverseMap = ref.reverseMap;
-      // Combine both maps into one
-      reverseMap.forEach(function (value, key) {
-        map.set(key, value);
-      });
-      mirrorMap = map;
-      //console.log(`mirrored chars parsed in ${performance.now() - start}ms`)
-    }
-  }
-
-  function getMirroredCharacter (char) {
-    parse();
-    return mirrorMap.get(char) || null
-  }
-
-  /**
-   * Given a string and its resolved embedding levels, build a map of indices to replacement chars
-   * for any characters in right-to-left segments that have defined mirrored characters.
-   * @param string
-   * @param embeddingLevels
-   * @param [start]
-   * @param [end]
-   * @return {Map<number, string>}
-   */
-  function getMirroredCharactersMap(string, embeddingLevels, start, end) {
-    var strLen = string.length;
-    start = Math.max(0, start == null ? 0 : +start);
-    end = Math.min(strLen - 1, end == null ? strLen - 1 : +end);
-
-    var map = new Map();
-    for (var i = start; i <= end; i++) {
-      if (embeddingLevels[i] & 1) { //only odd (rtl) levels
-        var mirror = getMirroredCharacter(string[i]);
-        if (mirror !== null) {
-          map.set(i, mirror);
-        }
-      }
-    }
-    return map
-  }
-
-  /**
-   * Given a start and end denoting a single line within a string, and a set of precalculated
-   * bidi embedding levels, produce a list of segments whose ordering should be flipped, in sequence.
-   * @param {string} string - the full input string
-   * @param {GetEmbeddingLevelsResult} embeddingLevelsResult - the result object from getEmbeddingLevels
-   * @param {number} [start] - first character in a subset of the full string
-   * @param {number} [end] - last character in a subset of the full string
-   * @return {number[][]} - the list of start/end segments that should be flipped, in order.
-   */
-  function getReorderSegments(string, embeddingLevelsResult, start, end) {
-    var strLen = string.length;
-    start = Math.max(0, start == null ? 0 : +start);
-    end = Math.min(strLen - 1, end == null ? strLen - 1 : +end);
-
-    var segments = [];
-    embeddingLevelsResult.paragraphs.forEach(function (paragraph) {
-      var lineStart = Math.max(start, paragraph.start);
-      var lineEnd = Math.min(end, paragraph.end);
-      if (lineStart < lineEnd) {
-        // Local slice for mutation
-        var lineLevels = embeddingLevelsResult.levels.slice(lineStart, lineEnd + 1);
-
-        // 3.4 L1.4: Reset any sequence of whitespace characters and/or isolate formatting characters at the
-        // end of the line to the paragraph level.
-        for (var i = lineEnd; i >= lineStart && (getBidiCharType(string[i]) & TRAILING_TYPES); i--) {
-          lineLevels[i] = paragraph.level;
-        }
-
-        // L2. From the highest level found in the text to the lowest odd level on each line, including intermediate levels
-        // not actually present in the text, reverse any contiguous sequence of characters that are at that level or higher.
-        var maxLevel = paragraph.level;
-        var minOddLevel = Infinity;
-        for (var i$1 = 0; i$1 < lineLevels.length; i$1++) {
-          var level = lineLevels[i$1];
-          if (level > maxLevel) { maxLevel = level; }
-          if (level < minOddLevel) { minOddLevel = level | 1; }
-        }
-        for (var lvl = maxLevel; lvl >= minOddLevel; lvl--) {
-          for (var i$2 = 0; i$2 < lineLevels.length; i$2++) {
-            if (lineLevels[i$2] >= lvl) {
-              var segStart = i$2;
-              while (i$2 + 1 < lineLevels.length && lineLevels[i$2 + 1] >= lvl) {
-                i$2++;
-              }
-              if (i$2 > segStart) {
-                segments.push([segStart + start, i$2 + start]);
-              }
-            }
-          }
-        }
-      }
-    });
-    return segments
-  }
-
-  /**
-   * @param {string} string
-   * @param {GetEmbeddingLevelsResult} embedLevelsResult
-   * @param {number} [start]
-   * @param {number} [end]
-   * @return {string} the new string with bidi segments reordered
-   */
-  function getReorderedString(string, embedLevelsResult, start, end) {
-    var indices = getReorderedIndices(string, embedLevelsResult, start, end);
-    var chars = [].concat( string );
-    indices.forEach(function (charIndex, i) {
-      chars[i] = (
-        (embedLevelsResult.levels[charIndex] & 1) ? getMirroredCharacter(string[charIndex]) : null
-      ) || string[charIndex];
-    });
-    return chars.join('')
-  }
-
-  /**
-   * @param {string} string
-   * @param {GetEmbeddingLevelsResult} embedLevelsResult
-   * @param {number} [start]
-   * @param {number} [end]
-   * @return {number[]} an array with character indices in their new bidi order
-   */
-  function getReorderedIndices(string, embedLevelsResult, start, end) {
-    var segments = getReorderSegments(string, embedLevelsResult, start, end);
-    // Fill an array with indices
-    var indices = [];
-    for (var i = 0; i < string.length; i++) {
-      indices[i] = i;
-    }
-    // Reverse each segment in order
-    segments.forEach(function (ref) {
-      var start = ref[0];
-      var end = ref[1];
-
-      var slice = indices.slice(start, end + 1);
-      for (var i = slice.length; i--;) {
-        indices[end - i] = slice[i];
-      }
-    });
-    return indices
-  }
-
-  exports.closingToOpeningBracket = closingToOpeningBracket;
-  exports.getBidiCharType = getBidiCharType;
-  exports.getBidiCharTypeName = getBidiCharTypeName;
-  exports.getCanonicalBracket = getCanonicalBracket;
-  exports.getEmbeddingLevels = getEmbeddingLevels;
-  exports.getMirroredCharacter = getMirroredCharacter;
-  exports.getMirroredCharactersMap = getMirroredCharactersMap;
-  exports.getReorderSegments = getReorderSegments;
-  exports.getReorderedIndices = getReorderedIndices;
-  exports.getReorderedString = getReorderedString;
-  exports.openingToClosingBracket = openingToClosingBracket;
-
-  Object.defineProperty(exports, '__esModule', { value: true });
-
-  return exports;
-
-}({}));
-return bidi}
-
-/* harmony default export */ const bidi = (bidiFactory);
-
-;// CONCATENATED MODULE: ./node_modules/troika-three-utils/dist/troika-three-utils.esm.js
-
-
-/**
- * Regular expression for matching the `void main() {` opener line in GLSL.
- * @type {RegExp}
- */
-const voidMainRegExp = /\bvoid\s+main\s*\(\s*\)\s*{/g;
-
-/**
- * Recursively expands all `#include <xyz>` statements within string of shader code.
- * Copied from three's WebGLProgram#parseIncludes for external use.
- *
- * @param {string} source - The GLSL source code to evaluate
- * @return {string} The GLSL code with all includes expanded
- */
-function expandShaderIncludes( source ) {
-  const pattern = /^[ \t]*#include +<([\w\d./]+)>/gm;
-  function replace(match, include) {
-    let chunk = three_module.ShaderChunk[include];
-    return chunk ? expandShaderIncludes(chunk) : match
-  }
-  return source.replace( pattern, replace )
-}
-
-/*
- * This is a direct copy of MathUtils.generateUUID from Three.js, to preserve compatibility with three
- * versions before 0.113.0 as it was changed from Math to MathUtils in that version.
- * https://github.com/mrdoob/three.js/blob/dd8b5aa3b270c17096b90945cd2d6d1b13aaec53/src/math/MathUtils.js#L16
- */
-
-const _lut = [];
-
-for (let i = 0; i < 256; i++) {
-  _lut[i] = (i < 16 ? '0' : '') + (i).toString(16);
-}
-
-function generateUUID() {
-
-  // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136
-
-  const d0 = Math.random() * 0xffffffff | 0;
-  const d1 = Math.random() * 0xffffffff | 0;
-  const d2 = Math.random() * 0xffffffff | 0;
-  const d3 = Math.random() * 0xffffffff | 0;
-  const uuid = _lut[d0 & 0xff] + _lut[d0 >> 8 & 0xff] + _lut[d0 >> 16 & 0xff] + _lut[d0 >> 24 & 0xff] + '-' +
-    _lut[d1 & 0xff] + _lut[d1 >> 8 & 0xff] + '-' + _lut[d1 >> 16 & 0x0f | 0x40] + _lut[d1 >> 24 & 0xff] + '-' +
-    _lut[d2 & 0x3f | 0x80] + _lut[d2 >> 8 & 0xff] + '-' + _lut[d2 >> 16 & 0xff] + _lut[d2 >> 24 & 0xff] +
-    _lut[d3 & 0xff] + _lut[d3 >> 8 & 0xff] + _lut[d3 >> 16 & 0xff] + _lut[d3 >> 24 & 0xff];
-
-  // .toUpperCase() here flattens concatenated strings to save heap memory space.
-  return uuid.toUpperCase()
-
-}
-
-// Local assign polyfill to avoid importing troika-core
-const troika_three_utils_esm_assign = Object.assign || function(/*target, ...sources*/) {
-  let target = arguments[0];
-  for (let i = 1, len = arguments.length; i < len; i++) {
-    let source = arguments[i];
-    if (source) {
-      for (let prop in source) {
-        if (source.hasOwnProperty(prop)) {
-          target[prop] = source[prop];
-        }
-      }
-    }
-  }
-  return target
-};
-
-
-const epoch = Date.now();
-const CONSTRUCTOR_CACHE = new WeakMap();
-const SHADER_UPGRADE_CACHE = new Map();
-
-// Material ids must be integers, but we can't access the increment from Three's `Material` module,
-// so let's choose a sufficiently large starting value that should theoretically never collide.
-let materialInstanceId = 1e10;
-
-/**
- * A utility for creating a custom shader material derived from another material's
- * shaders. This allows you to inject custom shader logic and transforms into the
- * builtin ThreeJS materials without having to recreate them from scratch.
- *
- * @param {THREE.Material} baseMaterial - the original material to derive from
- *
- * @param {Object} options - How the base material should be modified.
- * @param {Object} options.defines - Custom `defines` for the material
- * @param {Object} options.extensions - Custom `extensions` for the material, e.g. `{derivatives: true}`
- * @param {Object} options.uniforms - Custom `uniforms` for use in the modified shader. These can
- *        be accessed and manipulated via the resulting material's `uniforms` property, just like
- *        in a ShaderMaterial. You do not need to repeat the base material's own uniforms here.
- * @param {String} options.timeUniform - If specified, a uniform of this name will be injected into
- *        both shaders, and it will automatically be updated on each render frame with a number of
- *        elapsed milliseconds. The "zero" epoch time is not significant so don't rely on this as a
- *        true calendar time.
- * @param {String} options.vertexDefs - Custom GLSL code to inject into the vertex shader's top-level
- *        definitions, above the `void main()` function.
- * @param {String} options.vertexMainIntro - Custom GLSL code to inject at the top of the vertex
- *        shader's `void main` function.
- * @param {String} options.vertexMainOutro - Custom GLSL code to inject at the end of the vertex
- *        shader's `void main` function.
- * @param {String} options.vertexTransform - Custom GLSL code to manipulate the `position`, `normal`,
- *        and/or `uv` vertex attributes. This code will be wrapped within a standalone function with
- *        those attributes exposed by their normal names as read/write values.
- * @param {String} options.fragmentDefs - Custom GLSL code to inject into the fragment shader's top-level
- *        definitions, above the `void main()` function.
- * @param {String} options.fragmentMainIntro - Custom GLSL code to inject at the top of the fragment
- *        shader's `void main` function.
- * @param {String} options.fragmentMainOutro - Custom GLSL code to inject at the end of the fragment
- *        shader's `void main` function. You can manipulate `gl_FragColor` here but keep in mind it goes
- *        after any of ThreeJS's color postprocessing shader chunks (tonemapping, fog, etc.), so if you
- *        want those to apply to your changes use `fragmentColorTransform` instead.
- * @param {String} options.fragmentColorTransform - Custom GLSL code to manipulate the `gl_FragColor`
- *        output value. Will be injected near the end of the `void main` function, but before any
- *        of ThreeJS's color postprocessing shader chunks (tonemapping, fog, etc.), and before the
- *        `fragmentMainOutro`.
- * @param {function<{vertexShader,fragmentShader}>:{vertexShader,fragmentShader}} options.customRewriter - A function
- *        for performing custom rewrites of the full shader code. Useful if you need to do something
- *        special that's not covered by the other builtin options. This function will be executed before
- *        any other transforms are applied.
- * @param {boolean} options.chained - Set to `true` to prototype-chain the derived material to the base
- *        material, rather than the default behavior of copying it. This allows the derived material to
- *        automatically pick up changes made to the base material and its properties. This can be useful
- *        where the derived material is hidden from the user as an implementation detail, allowing them
- *        to work with the original material like normal. But it can result in unexpected behavior if not
- *        handled carefully.
- *
- * @return {THREE.Material}
- *
- * The returned material will also have two new methods, `getDepthMaterial()` and `getDistanceMaterial()`,
- * which can be called to get a variant of the derived material for use in shadow casting. If the
- * target mesh is expected to cast shadows, then you can assign these to the mesh's `customDepthMaterial`
- * (for directional and spot lights) and/or `customDistanceMaterial` (for point lights) properties to
- * allow the cast shadow to honor your derived shader's vertex transforms and discarded fragments. These
- * will also set a custom `#define IS_DEPTH_MATERIAL` or `#define IS_DISTANCE_MATERIAL` that you can look
- * for in your derived shaders with `#ifdef` to customize their behavior for the depth or distance
- * scenarios, e.g. skipping antialiasing or expensive shader logic.
- */
-function createDerivedMaterial(baseMaterial, options) {
-  // Generate a key that is unique to the content of these `options`. We'll use this
-  // throughout for caching and for generating the upgraded shader code. This increases
-  // the likelihood that the resulting shaders will line up across multiple calls so
-  // their GL programs can be shared and cached.
-  const optionsKey = getKeyForOptions(options);
-
-  // First check to see if we've already derived from this baseMaterial using this
-  // unique set of options, and if so reuse the constructor to avoid some allocations.
-  let ctorsByDerivation = CONSTRUCTOR_CACHE.get(baseMaterial);
-  if (!ctorsByDerivation) {
-    CONSTRUCTOR_CACHE.set(baseMaterial, (ctorsByDerivation = Object.create(null)));
-  }
-  if (ctorsByDerivation[optionsKey]) {
-    return new ctorsByDerivation[optionsKey]()
-  }
-
-  const privateBeforeCompileProp = `_onBeforeCompile${optionsKey}`;
-
-  // Private onBeforeCompile handler that injects the modified shaders and uniforms when
-  // the renderer switches to this material's program
-  const onBeforeCompile = function (shaderInfo) {
-    baseMaterial.onBeforeCompile.call(this, shaderInfo);
-
-    // Upgrade the shaders, caching the result by incoming source code
-    const cacheKey = this.customProgramCacheKey() + '|' + shaderInfo.vertexShader + '|' + shaderInfo.fragmentShader;
-    let upgradedShaders = SHADER_UPGRADE_CACHE[cacheKey];
-    if (!upgradedShaders) {
-      const upgraded = upgradeShaders(shaderInfo, options, optionsKey);
-      upgradedShaders = SHADER_UPGRADE_CACHE[cacheKey] = upgraded;
-    }
-
-    // Inject upgraded shaders and uniforms into the program
-    shaderInfo.vertexShader = upgradedShaders.vertexShader;
-    shaderInfo.fragmentShader = upgradedShaders.fragmentShader;
-    troika_three_utils_esm_assign(shaderInfo.uniforms, this.uniforms);
-
-    // Inject auto-updating time uniform if requested
-    if (options.timeUniform) {
-      shaderInfo.uniforms[options.timeUniform] = {
-        get value() {return Date.now() - epoch}
-      };
-    }
-
-    // Users can still add their own handlers on top of ours
-    if (this[privateBeforeCompileProp]) {
-      this[privateBeforeCompileProp](shaderInfo);
-    }
-  };
-
-  const DerivedMaterial = function DerivedMaterial() {
-    return derive(options.chained ? baseMaterial : baseMaterial.clone())
-  };
-
-  const derive = function(base) {
-    // Prototype chain to the base material
-    const derived = Object.create(base, descriptor);
-
-    // Store the baseMaterial for reference; this is always the original even when cloning
-    Object.defineProperty(derived, 'baseMaterial', { value: baseMaterial });
-
-    // Needs its own ids
-    Object.defineProperty(derived, 'id', { value: materialInstanceId++ });
-    derived.uuid = generateUUID();
-
-    // Merge uniforms, defines, and extensions
-    derived.uniforms = troika_three_utils_esm_assign({}, base.uniforms, options.uniforms);
-    derived.defines = troika_three_utils_esm_assign({}, base.defines, options.defines);
-    derived.defines[`TROIKA_DERIVED_MATERIAL_${optionsKey}`] = ''; //force a program change from the base material
-    derived.extensions = troika_three_utils_esm_assign({}, base.extensions, options.extensions);
-
-    // Don't inherit EventDispatcher listeners
-    derived._listeners = undefined;
-
-    return derived
-  };
-
-  const descriptor = {
-    constructor: {value: DerivedMaterial},
-    isDerivedMaterial: {value: true},
-
-    customProgramCacheKey: {
-      writable: true,
-      configurable: true,
-      value: function () {
-        return baseMaterial.customProgramCacheKey() + '|' + optionsKey
-      }
-    },
-
-    onBeforeCompile: {
-      get() {
-        return onBeforeCompile
-      },
-      set(fn) {
-        this[privateBeforeCompileProp] = fn;
-      }
-    },
-
-    copy: {
-      writable: true,
-      configurable: true,
-      value: function (source) {
-        baseMaterial.copy.call(this, source);
-        if (!baseMaterial.isShaderMaterial && !baseMaterial.isDerivedMaterial) {
-          troika_three_utils_esm_assign(this.extensions, source.extensions);
-          troika_three_utils_esm_assign(this.defines, source.defines);
-          troika_three_utils_esm_assign(this.uniforms, three_module.UniformsUtils.clone(source.uniforms));
-        }
-        return this
-      }
-    },
-
-    clone: {
-      writable: true,
-      configurable: true,
-      value: function () {
-        const newBase = new baseMaterial.constructor();
-        return derive(newBase).copy(this)
-      }
-    },
-
-    /**
-     * Utility to get a MeshDepthMaterial that will honor this derived material's vertex
-     * transformations and discarded fragments.
-     */
-    getDepthMaterial: {
-      writable: true,
-      configurable: true,
-      value: function() {
-        let depthMaterial = this._depthMaterial;
-        if (!depthMaterial) {
-          depthMaterial = this._depthMaterial = createDerivedMaterial(
-            baseMaterial.isDerivedMaterial
-              ? baseMaterial.getDepthMaterial()
-              : new three_module.MeshDepthMaterial({ depthPacking: three_module.RGBADepthPacking }),
-            options
-          );
-          depthMaterial.defines.IS_DEPTH_MATERIAL = '';
-          depthMaterial.uniforms = this.uniforms; //automatically recieve same uniform values
-        }
-        return depthMaterial
-      }
-    },
-
-    /**
-     * Utility to get a MeshDistanceMaterial that will honor this derived material's vertex
-     * transformations and discarded fragments.
-     */
-    getDistanceMaterial: {
-      writable: true,
-      configurable: true,
-      value: function() {
-        let distanceMaterial = this._distanceMaterial;
-        if (!distanceMaterial) {
-          distanceMaterial = this._distanceMaterial = createDerivedMaterial(
-            baseMaterial.isDerivedMaterial
-              ? baseMaterial.getDistanceMaterial()
-              : new three_module.MeshDistanceMaterial(),
-            options
-          );
-          distanceMaterial.defines.IS_DISTANCE_MATERIAL = '';
-          distanceMaterial.uniforms = this.uniforms; //automatically recieve same uniform values
-        }
-        return distanceMaterial
-      }
-    },
-
-    dispose: {
-      writable: true,
-      configurable: true,
-      value() {
-        const {_depthMaterial, _distanceMaterial} = this;
-        if (_depthMaterial) _depthMaterial.dispose();
-        if (_distanceMaterial) _distanceMaterial.dispose();
-        baseMaterial.dispose.call(this);
-      }
-    }
-  };
-
-  ctorsByDerivation[optionsKey] = DerivedMaterial;
-  return new DerivedMaterial()
-}
-
-
-function upgradeShaders({vertexShader, fragmentShader}, options, key) {
-  let {
-    vertexDefs,
-    vertexMainIntro,
-    vertexMainOutro,
-    vertexTransform,
-    fragmentDefs,
-    fragmentMainIntro,
-    fragmentMainOutro,
-    fragmentColorTransform,
-    customRewriter,
-    timeUniform
-  } = options;
-
-  vertexDefs = vertexDefs || '';
-  vertexMainIntro = vertexMainIntro || '';
-  vertexMainOutro = vertexMainOutro || '';
-  fragmentDefs = fragmentDefs || '';
-  fragmentMainIntro = fragmentMainIntro || '';
-  fragmentMainOutro = fragmentMainOutro || '';
-
-  // Expand includes if needed
-  if (vertexTransform || customRewriter) {
-    vertexShader = expandShaderIncludes(vertexShader);
-  }
-  if (fragmentColorTransform || customRewriter) {
-    // We need to be able to find postprocessing chunks after include expansion in order to
-    // put them after the fragmentColorTransform, so mark them with comments first. Even if
-    // this particular derivation doesn't have a fragmentColorTransform, other derivations may,
-    // so we still mark them.
-    fragmentShader = fragmentShader.replace(
-      /^[ \t]*#include <((?:tonemapping|encodings|fog|premultiplied_alpha|dithering)_fragment)>/gm,
-      '\n//!BEGIN_POST_CHUNK $1\n$&\n//!END_POST_CHUNK\n'
-    );
-    fragmentShader = expandShaderIncludes(fragmentShader);
-  }
-
-  // Apply custom rewriter function
-  if (customRewriter) {
-    let res = customRewriter({vertexShader, fragmentShader});
-    vertexShader = res.vertexShader;
-    fragmentShader = res.fragmentShader;
-  }
-
-  // The fragmentColorTransform needs to go before any postprocessing chunks, so extract
-  // those and re-insert them into the outro in the correct place:
-  if (fragmentColorTransform) {
-    let postChunks = [];
-    fragmentShader = fragmentShader.replace(
-      /^\/\/!BEGIN_POST_CHUNK[^]+?^\/\/!END_POST_CHUNK/gm, // [^]+? = non-greedy match of any chars including newlines
-      match => {
-        postChunks.push(match);
-        return ''
-      }
-    );
-    fragmentMainOutro = `${fragmentColorTransform}\n${postChunks.join('\n')}\n${fragmentMainOutro}`;
-  }
-
-  // Inject auto-updating time uniform if requested
-  if (timeUniform) {
-    const code = `\nuniform float ${timeUniform};\n`;
-    vertexDefs = code + vertexDefs;
-    fragmentDefs = code + fragmentDefs;
-  }
-
-  // Inject a function for the vertexTransform and rename all usages of position/normal/uv
-  if (vertexTransform) {
-    // Hoist these defs to the very top so they work in other function defs
-    vertexShader = `vec3 troika_position_${key};
-vec3 troika_normal_${key};
-vec2 troika_uv_${key};
-${vertexShader}
-`;
-    vertexDefs = `${vertexDefs}
-void troikaVertexTransform${key}(inout vec3 position, inout vec3 normal, inout vec2 uv) {
-  ${vertexTransform}
-}
-`;
-    vertexMainIntro = `
-troika_position_${key} = vec3(position);
-troika_normal_${key} = vec3(normal);
-troika_uv_${key} = vec2(uv);
-troikaVertexTransform${key}(troika_position_${key}, troika_normal_${key}, troika_uv_${key});
-${vertexMainIntro}
-`;
-    vertexShader = vertexShader.replace(/\b(position|normal|uv)\b/g, (match, match1, index, fullStr) => {
-      return /\battribute\s+vec[23]\s+$/.test(fullStr.substr(0, index)) ? match1 : `troika_${match1}_${key}`
-    });
-  }
-
-  // Inject defs and intro/outro snippets
-  vertexShader = injectIntoShaderCode(vertexShader, key, vertexDefs, vertexMainIntro, vertexMainOutro);
-  fragmentShader = injectIntoShaderCode(fragmentShader, key, fragmentDefs, fragmentMainIntro, fragmentMainOutro);
-
-  return {
-    vertexShader,
-    fragmentShader
-  }
-}
-
-function injectIntoShaderCode(shaderCode, id, defs, intro, outro) {
-  if (intro || outro || defs) {
-    shaderCode = shaderCode.replace(voidMainRegExp, `
-${defs}
-void troikaOrigMain${id}() {`
-    );
-    shaderCode += `
-void main() {
-  ${intro}
-  troikaOrigMain${id}();
-  ${outro}
-}`;
-  }
-  return shaderCode
-}
-
-
-function optionsJsonReplacer(key, value) {
-  return key === 'uniforms' ? undefined : typeof value === 'function' ? value.toString() : value
-}
-
-let _idCtr = 0;
-const optionsHashesToIds = new Map();
-function getKeyForOptions(options) {
-  const optionsHash = JSON.stringify(options, optionsJsonReplacer);
-  let id = optionsHashesToIds.get(optionsHash);
-  if (id == null) {
-    optionsHashesToIds.set(optionsHash, (id = ++_idCtr));
-  }
-  return id
-}
-
-// Copied from threejs WebGLPrograms.js so we can resolve builtin materials to their shaders
-// TODO how can we keep this from getting stale?
-const MATERIAL_TYPES_TO_SHADERS = {
-  MeshDepthMaterial: 'depth',
-  MeshDistanceMaterial: 'distanceRGBA',
-  MeshNormalMaterial: 'normal',
-  MeshBasicMaterial: 'basic',
-  MeshLambertMaterial: 'lambert',
-  MeshPhongMaterial: 'phong',
-  MeshToonMaterial: 'toon',
-  MeshStandardMaterial: 'physical',
-  MeshPhysicalMaterial: 'physical',
-  MeshMatcapMaterial: 'matcap',
-  LineBasicMaterial: 'basic',
-  LineDashedMaterial: 'dashed',
-  PointsMaterial: 'points',
-  ShadowMaterial: 'shadow',
-  SpriteMaterial: 'sprite'
-};
-
-/**
- * Given a Three.js `Material` instance, find the shaders/uniforms that will be
- * used to render that material.
- *
- * @param material - the Material instance
- * @return {object} - the material's shader info: `{uniforms:{}, fragmentShader:'', vertexShader:''}`
- */
-function getShadersForMaterial(material) {
-  let builtinType = MATERIAL_TYPES_TO_SHADERS[material.type];
-  return builtinType ? ShaderLib[builtinType] : material //TODO fallback for unknown type?
-}
-
-/**
- * Find all uniforms and their types within a shader code string.
- *
- * @param {string} shader - The shader code to parse
- * @return {object} mapping of uniform names to their glsl type
- */
-function getShaderUniformTypes(shader) {
-  let uniformRE = /\buniform\s+(int|float|vec[234]|mat[34])\s+([A-Za-z_][\w]*)/g;
-  let uniforms = Object.create(null);
-  let match;
-  while ((match = uniformRE.exec(shader)) !== null) {
-    uniforms[match[2]] = match[1];
-  }
-  return uniforms
-}
-
-/**
- * Helper for smoothing out the `m.getInverse(x)` --> `m.copy(x).invert()` conversion
- * that happened in ThreeJS r123.
- * @param {Matrix4} srcMatrix
- * @param {Matrix4} [tgtMatrix]
- */
-function invertMatrix4(srcMatrix, tgtMatrix = new Matrix4()) {
-  if (typeof tgtMatrix.invert === 'function') {
-    tgtMatrix.copy(srcMatrix).invert();
-  } else {
-    tgtMatrix.getInverse(srcMatrix);
-  }
-  return tgtMatrix
-}
-
-/*
-Input geometry is a cylinder with r=1, height in y dimension from 0 to 1,
-divided into a reasonable number of height segments.
-*/
-
-const vertexDefs = (/* unused pure expression or super */ null && (`
-uniform vec3 pointA;
-uniform vec3 controlA;
-uniform vec3 controlB;
-uniform vec3 pointB;
-uniform float radius;
-varying float bezierT;
-
-vec3 cubicBezier(vec3 p1, vec3 c1, vec3 c2, vec3 p2, float t) {
-  float t2 = 1.0 - t;
-  float b0 = t2 * t2 * t2;
-  float b1 = 3.0 * t * t2 * t2;
-  float b2 = 3.0 * t * t * t2;
-  float b3 = t * t * t;
-  return b0 * p1 + b1 * c1 + b2 * c2 + b3 * p2;
-}
-
-vec3 cubicBezierDerivative(vec3 p1, vec3 c1, vec3 c2, vec3 p2, float t) {
-  float t2 = 1.0 - t;
-  return -3.0 * p1 * t2 * t2 +
-    c1 * (3.0 * t2 * t2 - 6.0 * t2 * t) +
-    c2 * (6.0 * t2 * t - 3.0 * t * t) +
-    3.0 * p2 * t * t;
-}
-`));
-
-const vertexTransform = (/* unused pure expression or super */ null && (`
-float t = position.y;
-bezierT = t;
-vec3 bezierCenterPos = cubicBezier(pointA, controlA, controlB, pointB, t);
-vec3 bezierDir = normalize(cubicBezierDerivative(pointA, controlA, controlB, pointB, t));
-
-// Make "sideways" always perpendicular to the camera ray; this ensures that any twists
-// in the cylinder occur where you won't see them: 
-vec3 viewDirection = normalMatrix * vec3(0.0, 0.0, 1.0);
-if (bezierDir == viewDirection) {
-  bezierDir = normalize(cubicBezierDerivative(pointA, controlA, controlB, pointB, t == 1.0 ? t - 0.0001 : t + 0.0001));
-}
-vec3 sideways = normalize(cross(bezierDir, viewDirection));
-vec3 upish = normalize(cross(sideways, bezierDir));
-
-// Build a matrix for transforming this disc in the cylinder:
-mat4 discTx;
-discTx[0].xyz = sideways * radius;
-discTx[1].xyz = bezierDir * radius;
-discTx[2].xyz = upish * radius;
-discTx[3].xyz = bezierCenterPos;
-discTx[3][3] = 1.0;
-
-// Apply transform, ignoring original y
-position = (discTx * vec4(position.x, 0.0, position.z, 1.0)).xyz;
-normal = normalize(mat3(discTx) * normal);
-`));
-
-const fragmentDefs = (/* unused pure expression or super */ null && (`
-uniform vec3 dashing;
-varying float bezierT;
-`));
-
-const fragmentMainIntro = (/* unused pure expression or super */ null && (`
-if (dashing.x + dashing.y > 0.0) {
-  float dashFrac = mod(bezierT - dashing.z, dashing.x + dashing.y);
-  if (dashFrac > dashing.x) {
-    discard;
-  }
-}
-`));
-
-// Debugging: separate color for each of the 6 sides:
-// const fragmentColorTransform = `
-// float sideNum = floor(vUV.x * 6.0);
-// vec3 mixColor = sideNum < 1.0 ? vec3(1.0, 0.0, 0.0) :
-//   sideNum < 2.0 ? vec3(0.0, 1.0, 1.0) :
-//   sideNum < 3.0 ? vec3(1.0, 1.0, 0.0) :
-//   sideNum < 4.0 ? vec3(0.0, 0.0, 1.0) :
-//   sideNum < 5.0 ? vec3(0.0, 1.0, 0.0) :
-//   vec3(1.0, 0.0, 1.0);
-// gl_FragColor.xyz = mix(gl_FragColor.xyz, mixColor, 0.5);
-// `
-
-
-
-function createBezierMeshMaterial(baseMaterial) {
-  return createDerivedMaterial(
-    baseMaterial,
-    {
-      chained: true,
-      uniforms: {
-        pointA: {value: new Vector3()},
-        controlA: {value: new Vector3()},
-        controlB: {value: new Vector3()},
-        pointB: {value: new Vector3()},
-        radius: {value: 0.01},
-        dashing: {value: new Vector3()} //on, off, offset
-      },
-      vertexDefs,
-      vertexTransform,
-      fragmentDefs,
-      fragmentMainIntro
-    }
-  )
-}
-
-let geometry = null;
-
-const defaultBaseMaterial = /*#__PURE__*/new three_module.MeshStandardMaterial({color: 0xffffff, side: three_module.DoubleSide});
-
-
-/**
- * A ThreeJS `Mesh` that bends a tube shape along a 3D cubic bezier path. The bending is done
- * by deforming a straight cylindrical geometry in the vertex shader based on a set of four
- * control point uniforms. It patches the necessary GLSL into the mesh's assigned `material`
- * automatically.
- *
- * The cubiz bezier path is determined by its four `Vector3` properties:
- * - `pointA`
- * - `controlA`
- * - `controlB`
- * - `pointB`
- *
- * The tube's radius is controlled by its `radius` property, which defaults to `0.01`.
- *
- * You can also give the tube a dashed appearance with two properties:
- *
- * - `dashArray` - an array of two numbers, defining the length of "on" and "off" parts of
- *   the dash. Each is a 0-1 ratio of the entire path's length. (Actually this is the `t` length
- *   used as input to the cubic bezier function, not its visible length.)
- * - `dashOffset` - offset of where the dash starts. You can animate this to make the dashes move.
- *
- * Note that the dashes will appear like a hollow tube, not solid. This will be more apparent on
- * thicker tubes.
- *
- * TODO: proper geometry bounding sphere and raycasting
- * TODO: allow control of the geometry's segment counts
- */
-class BezierMesh extends (/* unused pure expression or super */ null && (Mesh)) {
-  static getGeometry() {
-    return geometry || (geometry =
-      new CylinderBufferGeometry(1, 1, 1, 6, 64).translate(0, 0.5, 0)
-    )
-  }
-
-  constructor() {
-    super(
-      BezierMesh.getGeometry(),
-      defaultBaseMaterial
-    );
-
-    this.pointA = new Vector3();
-    this.controlA = new Vector3();
-    this.controlB = new Vector3();
-    this.pointB = new Vector3();
-    this.radius = 0.01;
-    this.dashArray = new Vector2();
-    this.dashOffset = 0;
-
-    // TODO - disabling frustum culling until I figure out how to customize the
-    //  geometry's bounding sphere that gets used
-    this.frustumCulled = false;
-  }
-
-  // Handler for automatically wrapping the base material with our upgrades. We do the wrapping
-  // lazily on _read_ rather than write to avoid unnecessary wrapping on transient values.
-  get material() {
-    let derivedMaterial = this._derivedMaterial;
-    const baseMaterial = this._baseMaterial || this._defaultMaterial || (this._defaultMaterial = defaultBaseMaterial.clone());
-    if (!derivedMaterial || derivedMaterial.baseMaterial !== baseMaterial) {
-      derivedMaterial = this._derivedMaterial = createBezierMeshMaterial(baseMaterial);
-      // dispose the derived material when its base material is disposed:
-      baseMaterial.addEventListener('dispose', function onDispose() {
-        baseMaterial.removeEventListener('dispose', onDispose);
-        derivedMaterial.dispose();
-      });
-    }
-    return derivedMaterial
-  }
-  set material(baseMaterial) {
-    this._baseMaterial = baseMaterial;
-  }
-
-  // Create and update material for shadows upon request:
-  get customDepthMaterial() {
-    return this.material.getDepthMaterial()
-  }
-  get customDistanceMaterial() {
-    return this.material.getDistanceMaterial()
-  }
-
-  onBeforeRender(shaderInfo) {
-    const {uniforms} = this.material;
-    const {pointA, controlA, controlB, pointB, radius, dashArray, dashOffset} = this;
-    uniforms.pointA.value.copy(pointA);
-    uniforms.controlA.value.copy(controlA);
-    uniforms.controlB.value.copy(controlB);
-    uniforms.pointB.value.copy(pointB);
-    uniforms.radius.value = radius;
-    uniforms.dashing.value.set(dashArray.x, dashArray.y, dashOffset || 0);
-  }
-
-  raycast(raycaster, intersects) {
-    // TODO - just fail for now
-  }
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/troika-three-text/dist/troika-three-text.esm.js
-
-
-
-
-
-
-/**
- * Factory function that creates a self-contained environment for processing text typesetting requests.
- *
- * It is important that this function has no closure dependencies, so that it can be easily injected
- * into the source for a Worker without requiring a build step or complex dependency loading. All its
- * dependencies must be passed in at initialization.
- *
- * @param {function} fontParser - a function that accepts an ArrayBuffer of the font data and returns
- * a standardized structure giving access to the font and its glyphs:
- *   {
- *     unitsPerEm: number,
- *     ascender: number,
- *     descender: number,
- *     forEachGlyph(string, fontSize, letterSpacing, callback) {
- *       //invokes callback for each glyph to render, passing it an object:
- *       callback({
- *         index: number,
- *         advanceWidth: number,
- *         xMin: number,
- *         yMin: number,
- *         xMax: number,
- *         yMax: number,
- *         pathCommandCount: number,
- *         forEachPathCommand(callback) {
- *           //invokes callback for each path command, with args:
- *           callback(
- *             type: 'M|L|C|Q|Z',
- *             ...args //0 to 6 args depending on the type
- *           )
- *         }
- *       })
- *     }
- *   }
- * @param {object} bidi - the bidi.js implementation object
- * @param {Object} config
- * @return {Object}
- */
-function createTypesetter(fontParser, bidi, config) {
-
-  const {
-    defaultFontURL
-  } = config;
-
-  /**
-   * Holds parsed font objects by url
-   */
-  const fonts = Object.create(null);
-
-  const INF = Infinity;
-
-  // Set of Unicode Default_Ignorable_Code_Point characters, these will not produce visible glyphs
-  const DEFAULT_IGNORABLE_CHARS = /[\u00AD\u034F\u061C\u115F-\u1160\u17B4-\u17B5\u180B-\u180E\u200B-\u200F\u202A-\u202E\u2060-\u206F\u3164\uFE00-\uFE0F\uFEFF\uFFA0\uFFF0-\uFFF8]/;
-
-  // Incomplete set of characters that allow line breaking after them
-  // In the future we may consider a full Unicode line breaking algorithm impl: https://www.unicode.org/reports/tr14
-  const BREAK_AFTER_CHARS = /[\s\-\u007C\u00AD\u2010\u2012-\u2014\u2027\u2056\u2E17\u2E40]/;
-
-  /**
-   * Load a given font url
-   */
-  function doLoadFont(url, callback) {
-    function tryLoad() {
-      const onError = err => {
-        console.error(`Failure loading font ${url}${url === defaultFontURL ? '' : '; trying fallback'}`, err);
-        if (url !== defaultFontURL) {
-          url = defaultFontURL;
-          tryLoad();
-        }
-      };
-      try {
-        const request = new XMLHttpRequest();
-        request.open('get', url, true);
-        request.responseType = 'arraybuffer';
-        request.onload = function () {
-          if (request.status >= 400) {
-            onError(new Error(request.statusText));
-          }
-          else if (request.status > 0) {
-            try {
-              const fontObj = fontParser(request.response);
-              callback(fontObj);
-            } catch (e) {
-              onError(e);
-            }
-          }
-        };
-        request.onerror = onError;
-        request.send();
-      } catch(err) {
-        onError(err);
-      }
-    }
-    tryLoad();
-  }
-
-
-  /**
-   * Load a given font url if needed, invoking a callback when it's loaded. If already
-   * loaded, the callback will be called synchronously.
-   */
-  function loadFont(fontUrl, callback) {
-    if (!fontUrl) fontUrl = defaultFontURL;
-    let font = fonts[fontUrl];
-    if (font) {
-      // if currently loading font, add to callbacks, otherwise execute immediately
-      if (font.pending) {
-        font.pending.push(callback);
-      } else {
-        callback(font);
-      }
-    } else {
-      fonts[fontUrl] = {pending: [callback]};
-      doLoadFont(fontUrl, fontObj => {
-        let callbacks = fonts[fontUrl].pending;
-        fonts[fontUrl] = fontObj;
-        callbacks.forEach(cb => cb(fontObj));
-      });
-    }
-  }
-
-
-  /**
-   * Main entry point.
-   * Process a text string with given font and formatting parameters, and return all info
-   * necessary to render all its glyphs.
-   */
-  function typeset(
-    {
-      text='',
-      font=defaultFontURL,
-      sdfGlyphSize=64,
-      fontSize=1,
-      letterSpacing=0,
-      lineHeight='normal',
-      maxWidth=INF,
-      direction,
-      textAlign='left',
-      textIndent=0,
-      whiteSpace='normal',
-      overflowWrap='normal',
-      anchorX = 0,
-      anchorY = 0,
-      includeCaretPositions=false,
-      chunkedBoundsSize=8192,
-      colorRanges=null
-    },
-    callback,
-    metricsOnly=false
-  ) {
-    const mainStart = now();
-    const timings = {fontLoad: 0, typesetting: 0};
-
-    // Ensure newlines are normalized
-    if (text.indexOf('\r') > -1) {
-      console.info('Typesetter: got text with \\r chars; normalizing to \\n');
-      text = text.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
-    }
-
-    // Ensure we've got numbers not strings
-    fontSize = +fontSize;
-    letterSpacing = +letterSpacing;
-    maxWidth = +maxWidth;
-    lineHeight = lineHeight || 'normal';
-    textIndent = +textIndent;
-
-    loadFont(font, fontObj => {
-      const hasMaxWidth = isFinite(maxWidth);
-      let glyphIds = null;
-      let glyphPositions = null;
-      let glyphData = null;
-      let glyphColors = null;
-      let caretPositions = null;
-      let visibleBounds = null;
-      let chunkedBounds = null;
-      let maxLineWidth = 0;
-      let renderableGlyphCount = 0;
-      let canWrap = whiteSpace !== 'nowrap';
-      const {ascender, descender, unitsPerEm} = fontObj;
-      timings.fontLoad = now() - mainStart;
-      const typesetStart = now();
-
-      // Find conversion between native font units and fontSize units; this will already be done
-      // for the gx/gy values below but everything else we'll need to convert
-      const fontSizeMult = fontSize / unitsPerEm;
-
-      // Determine appropriate value for 'normal' line height based on the font's actual metrics
-      // TODO this does not guarantee individual glyphs won't exceed the line height, e.g. Roboto; should we use yMin/Max instead?
-      if (lineHeight === 'normal') {
-        lineHeight = (ascender - descender) / unitsPerEm;
-      }
-
-      // Determine line height and leading adjustments
-      lineHeight = lineHeight * fontSize;
-      const halfLeading = (lineHeight - (ascender - descender) * fontSizeMult) / 2;
-      const topBaseline = -(ascender * fontSizeMult + halfLeading);
-      const caretHeight = Math.min(lineHeight, (ascender - descender) * fontSizeMult);
-      const caretBottomOffset = (ascender + descender) / 2 * fontSizeMult - caretHeight / 2;
-
-      // Distribute glyphs into lines based on wrapping
-      let lineXOffset = textIndent;
-      let currentLine = new TextLine();
-      const lines = [currentLine];
-
-      fontObj.forEachGlyph(text, fontSize, letterSpacing, (glyphObj, glyphX, charIndex) => {
-        const char = text.charAt(charIndex);
-        const glyphWidth = glyphObj.advanceWidth * fontSizeMult;
-        const curLineCount = currentLine.count;
-        let nextLine;
-
-        // Calc isWhitespace and isEmpty once per glyphObj
-        if (!('isEmpty' in glyphObj)) {
-          glyphObj.isWhitespace = !!char && /\s/.test(char);
-          glyphObj.canBreakAfter = !!char && BREAK_AFTER_CHARS.test(char);
-          glyphObj.isEmpty = glyphObj.xMin === glyphObj.xMax || glyphObj.yMin === glyphObj.yMax || DEFAULT_IGNORABLE_CHARS.test(char);
-        }
-        if (!glyphObj.isWhitespace && !glyphObj.isEmpty) {
-          renderableGlyphCount++;
-        }
-
-        // If a non-whitespace character overflows the max width, we need to soft-wrap
-        if (canWrap && hasMaxWidth && !glyphObj.isWhitespace && glyphX + glyphWidth + lineXOffset > maxWidth && curLineCount) {
-          // If it's the first char after a whitespace, start a new line
-          if (currentLine.glyphAt(curLineCount - 1).glyphObj.canBreakAfter) {
-            nextLine = new TextLine();
-            lineXOffset = -glyphX;
-          } else {
-            // Back up looking for a whitespace character to wrap at
-            for (let i = curLineCount; i--;) {
-              // If we got the start of the line there's no soft break point; make hard break if overflowWrap='break-word'
-              if (i === 0 && overflowWrap === 'break-word') {
-                nextLine = new TextLine();
-                lineXOffset = -glyphX;
-                break
-              }
-              // Found a soft break point; move all chars since it to a new line
-              else if (currentLine.glyphAt(i).glyphObj.canBreakAfter) {
-                nextLine = currentLine.splitAt(i + 1);
-                const adjustX = nextLine.glyphAt(0).x;
-                lineXOffset -= adjustX;
-                for (let j = nextLine.count; j--;) {
-                  nextLine.glyphAt(j).x -= adjustX;
-                }
-                break
-              }
-            }
-          }
-          if (nextLine) {
-            currentLine.isSoftWrapped = true;
-            currentLine = nextLine;
-            lines.push(currentLine);
-            maxLineWidth = maxWidth; //after soft wrapping use maxWidth as calculated width
-          }
-        }
-
-        let fly = currentLine.glyphAt(currentLine.count);
-        fly.glyphObj = glyphObj;
-        fly.x = glyphX + lineXOffset;
-        fly.width = glyphWidth;
-        fly.charIndex = charIndex;
-
-        // Handle hard line breaks
-        if (char === '\n') {
-          currentLine = new TextLine();
-          lines.push(currentLine);
-          lineXOffset = -(glyphX + glyphWidth + (letterSpacing * fontSize)) + textIndent;
-        }
-      });
-
-      // Calculate width of each line (excluding trailing whitespace) and maximum block width
-      lines.forEach(line => {
-        for (let i = line.count; i--;) {
-          let {glyphObj, x, width} = line.glyphAt(i);
-          if (!glyphObj.isWhitespace) {
-            line.width = x + width;
-            if (line.width > maxLineWidth) {
-              maxLineWidth = line.width;
-            }
-            return
-          }
-        }
-      });
-
-      // Find overall position adjustments for anchoring
-      let anchorXOffset = 0;
-      let anchorYOffset = 0;
-      if (anchorX) {
-        if (typeof anchorX === 'number') {
-          anchorXOffset = -anchorX;
-        }
-        else if (typeof anchorX === 'string') {
-          anchorXOffset = -maxLineWidth * (
-            anchorX === 'left' ? 0 :
-            anchorX === 'center' ? 0.5 :
-            anchorX === 'right' ? 1 :
-            parsePercent(anchorX)
-          );
-        }
-      }
-      if (anchorY) {
-        if (typeof anchorY === 'number') {
-          anchorYOffset = -anchorY;
-        }
-        else if (typeof anchorY === 'string') {
-          let height = lines.length * lineHeight;
-          anchorYOffset = anchorY === 'top' ? 0 :
-            anchorY === 'top-baseline' ? -topBaseline :
-            anchorY === 'middle' ? height / 2 :
-            anchorY === 'bottom' ? height :
-            anchorY === 'bottom-baseline' ? height - halfLeading + descender * fontSizeMult :
-            parsePercent(anchorY) * height;
-        }
-      }
-
-      if (!metricsOnly) {
-        // Resolve bidi levels
-        const bidiLevelsResult = bidi.getEmbeddingLevels(text, direction);
-
-        // Process each line, applying alignment offsets, adding each glyph to the atlas, and
-        // collecting all renderable glyphs into a single collection.
-        glyphIds = new Uint16Array(renderableGlyphCount);
-        glyphPositions = new Float32Array(renderableGlyphCount * 2);
-        glyphData = {};
-        visibleBounds = [INF, INF, -INF, -INF];
-        chunkedBounds = [];
-        let lineYOffset = topBaseline;
-        if (includeCaretPositions) {
-          caretPositions = new Float32Array(text.length * 3);
-        }
-        if (colorRanges) {
-          glyphColors = new Uint8Array(renderableGlyphCount * 3);
-        }
-        let renderableGlyphIndex = 0;
-        let prevCharIndex = -1;
-        let colorCharIndex = -1;
-        let chunk;
-        let currentColor;
-        lines.forEach((line, lineIndex) => {
-          let {count:lineGlyphCount, width:lineWidth} = line;
-
-          // Ignore empty lines
-          if (lineGlyphCount > 0) {
-            // Count trailing whitespaces, we want to ignore these for certain things
-            let trailingWhitespaceCount = 0;
-            for (let i = lineGlyphCount; i-- && line.glyphAt(i).glyphObj.isWhitespace;) {
-              trailingWhitespaceCount++;
-            }
-
-            // Apply horizontal alignment adjustments
-            let lineXOffset = 0;
-            let justifyAdjust = 0;
-            if (textAlign === 'center') {
-              lineXOffset = (maxLineWidth - lineWidth) / 2;
-            } else if (textAlign === 'right') {
-              lineXOffset = maxLineWidth - lineWidth;
-            } else if (textAlign === 'justify' && line.isSoftWrapped) {
-              // count non-trailing whitespace characters, and we'll adjust the offsets per character in the next loop
-              let whitespaceCount = 0;
-              for (let i = lineGlyphCount - trailingWhitespaceCount; i--;) {
-                if (line.glyphAt(i).glyphObj.isWhitespace) {
-                  whitespaceCount++;
-                }
-              }
-              justifyAdjust = (maxLineWidth - lineWidth) / whitespaceCount;
-            }
-            if (justifyAdjust || lineXOffset) {
-              let justifyOffset = 0;
-              for (let i = 0; i < lineGlyphCount; i++) {
-                let glyphInfo = line.glyphAt(i);
-                const glyphObj = glyphInfo.glyphObj;
-                glyphInfo.x += lineXOffset + justifyOffset;
-                // Expand non-trailing whitespaces for justify alignment
-                if (justifyAdjust !== 0 && glyphObj.isWhitespace && i < lineGlyphCount - trailingWhitespaceCount) {
-                  justifyOffset += justifyAdjust;
-                  glyphInfo.width += justifyAdjust;
-                }
-              }
-            }
-
-            // Perform bidi range flipping
-            const flips = bidi.getReorderSegments(
-              text, bidiLevelsResult, line.glyphAt(0).charIndex, line.glyphAt(line.count - 1).charIndex
-            );
-            for (let fi = 0; fi < flips.length; fi++) {
-              const [start, end] = flips[fi];
-              // Map start/end string indices to indices in the line
-              let left = Infinity, right = -Infinity;
-              for (let i = 0; i < lineGlyphCount; i++) {
-                if (line.glyphAt(i).charIndex >= start) { // gte to handle removed characters
-                  let startInLine = i, endInLine = i;
-                  for (; endInLine < lineGlyphCount; endInLine++) {
-                    let info = line.glyphAt(endInLine);
-                    if (info.charIndex > end) {
-                      break
-                    }
-                    if (endInLine < lineGlyphCount - trailingWhitespaceCount) { //don't include trailing ws in flip width
-                      left = Math.min(left, info.x);
-                      right = Math.max(right, info.x + info.width);
-                    }
-                  }
-                  for (let j = startInLine; j < endInLine; j++) {
-                    const glyphInfo = line.glyphAt(j);
-                    glyphInfo.x = right - (glyphInfo.x + glyphInfo.width - left);
-                  }
-                  break
-                }
-              }
-            }
-
-            // Assemble final data arrays
-            let glyphObj;
-            const setGlyphObj = g => glyphObj = g;
-            for (let i = 0; i < lineGlyphCount; i++) {
-              let glyphInfo = line.glyphAt(i);
-              glyphObj = glyphInfo.glyphObj;
-              const glyphId = glyphObj.index;
-
-              // Replace mirrored characters in rtl
-              const rtl = bidiLevelsResult.levels[glyphInfo.charIndex] & 1; //odd level means rtl
-              if (rtl) {
-                const mirrored = bidi.getMirroredCharacter(text[glyphInfo.charIndex]);
-                if (mirrored) {
-                  fontObj.forEachGlyph(mirrored, 0, 0, setGlyphObj);
-                }
-              }
-
-              // Add caret positions
-              if (includeCaretPositions) {
-                const {charIndex} = glyphInfo;
-                const caretLeft = glyphInfo.x + anchorXOffset;
-                const caretRight = glyphInfo.x + glyphInfo.width + anchorXOffset;
-                caretPositions[charIndex * 3] = rtl ? caretRight : caretLeft; //start edge x
-                caretPositions[charIndex * 3 + 1] = rtl ? caretLeft : caretRight; //end edge x
-                caretPositions[charIndex * 3 + 2] = lineYOffset + caretBottomOffset + anchorYOffset; //common bottom y
-
-                // If we skipped any chars from the previous glyph (due to ligature subs), fill in caret
-                // positions for those missing char indices; currently this uses a best-guess by dividing
-                // the ligature's width evenly. In the future we may try to use the font's LigatureCaretList
-                // table to get better interior caret positions.
-                const ligCount = charIndex - prevCharIndex;
-                if (ligCount > 1) {
-                  fillLigatureCaretPositions(caretPositions, prevCharIndex, ligCount);
-                }
-                prevCharIndex = charIndex;
-              }
-
-              // Track current color range
-              if (colorRanges) {
-                const {charIndex} = glyphInfo;
-                while(charIndex > colorCharIndex) {
-                  colorCharIndex++;
-                  if (colorRanges.hasOwnProperty(colorCharIndex)) {
-                    currentColor = colorRanges[colorCharIndex];
-                  }
-                }
-              }
-
-              // Get atlas data for renderable glyphs
-              if (!glyphObj.isWhitespace && !glyphObj.isEmpty) {
-                const idx = renderableGlyphIndex++;
-
-                // Add this glyph's path data
-                if (!glyphData[glyphId]) {
-                  glyphData[glyphId] = {
-                    path: glyphObj.path,
-                    pathBounds: [glyphObj.xMin, glyphObj.yMin, glyphObj.xMax, glyphObj.yMax]
-                  };
-                }
-
-                // Determine final glyph position and add to glyphPositions array
-                const glyphX = glyphInfo.x + anchorXOffset;
-                const glyphY = lineYOffset + anchorYOffset;
-                glyphPositions[idx * 2] = glyphX;
-                glyphPositions[idx * 2 + 1] = glyphY;
-
-                // Track total visible bounds
-                const visX0 = glyphX + glyphObj.xMin * fontSizeMult;
-                const visY0 = glyphY + glyphObj.yMin * fontSizeMult;
-                const visX1 = glyphX + glyphObj.xMax * fontSizeMult;
-                const visY1 = glyphY + glyphObj.yMax * fontSizeMult;
-                if (visX0 < visibleBounds[0]) visibleBounds[0] = visX0;
-                if (visY0 < visibleBounds[1]) visibleBounds[1] = visY0;
-                if (visX1 > visibleBounds[2]) visibleBounds[2] = visX1;
-                if (visY1 > visibleBounds[3]) visibleBounds[3] = visY1;
-
-                // Track bounding rects for each chunk of N glyphs
-                if (idx % chunkedBoundsSize === 0) {
-                  chunk = {start: idx, end: idx, rect: [INF, INF, -INF, -INF]};
-                  chunkedBounds.push(chunk);
-                }
-                chunk.end++;
-                const chunkRect = chunk.rect;
-                if (visX0 < chunkRect[0]) chunkRect[0] = visX0;
-                if (visY0 < chunkRect[1]) chunkRect[1] = visY0;
-                if (visX1 > chunkRect[2]) chunkRect[2] = visX1;
-                if (visY1 > chunkRect[3]) chunkRect[3] = visY1;
-
-                // Add to glyph ids array
-                glyphIds[idx] = glyphId;
-
-                // Add colors
-                if (colorRanges) {
-                  const start = idx * 3;
-                  glyphColors[start] = currentColor >> 16 & 255;
-                  glyphColors[start + 1] = currentColor >> 8 & 255;
-                  glyphColors[start + 2] = currentColor & 255;
-                }
-              }
-            }
-          }
-
-          // Increment y offset for next line
-          lineYOffset -= lineHeight;
-        });
-
-        // Fill in remaining caret positions in case the final character was a ligature
-        if (caretPositions) {
-          const ligCount = text.length - prevCharIndex;
-          if (ligCount > 1) {
-            fillLigatureCaretPositions(caretPositions, prevCharIndex, ligCount);
-          }
-        }
-      }
-
-      // Timing stats
-      timings.typesetting = now() - typesetStart;
-
-      callback({
-        glyphIds, //font indices for each glyph
-        glyphPositions, //x,y of each glyph's origin in layout
-        glyphData, //dict holding data about each glyph appearing in the text
-        caretPositions, //startX,endX,bottomY caret positions for each char
-        caretHeight, //height of cursor from bottom to top
-        glyphColors, //color for each glyph, if color ranges supplied
-        chunkedBounds, //total rects per (n=chunkedBoundsSize) consecutive glyphs
-        fontSize, //calculated em height
-        unitsPerEm, //font units per em
-        ascender: ascender * fontSizeMult, //font ascender
-        descender: descender * fontSizeMult, //font descender
-        lineHeight, //computed line height
-        topBaseline, //y coordinate of the top line's baseline
-        blockBounds: [ //bounds for the whole block of text, including vertical padding for lineHeight
-          anchorXOffset,
-          anchorYOffset - lines.length * lineHeight,
-          anchorXOffset + maxLineWidth,
-          anchorYOffset
-        ],
-        visibleBounds, //total bounds of visible text paths, may be larger or smaller than totalBounds
-        timings
-      });
-    });
-  }
-
-
-  /**
-   * For a given text string and font parameters, determine the resulting block dimensions
-   * after wrapping for the given maxWidth.
-   * @param args
-   * @param callback
-   */
-  function measure(args, callback) {
-    typeset(args, (result) => {
-      const [x0, y0, x1, y1] = result.blockBounds;
-      callback({
-        width: x1 - x0,
-        height: y1 - y0
-      });
-    }, {metricsOnly: true});
-  }
-
-  function parsePercent(str) {
-    let match = str.match(/^([\d.]+)%$/);
-    let pct = match ? parseFloat(match[1]) : NaN;
-    return isNaN(pct) ? 0 : pct / 100
-  }
-
-  function fillLigatureCaretPositions(caretPositions, ligStartIndex, ligCount) {
-    const ligStartX = caretPositions[ligStartIndex * 3];
-    const ligEndX = caretPositions[ligStartIndex * 3 + 1];
-    const ligY = caretPositions[ligStartIndex * 3 + 2];
-    const guessedAdvanceX = (ligEndX - ligStartX) / ligCount;
-    for (let i = 0; i < ligCount; i++) {
-      const startIndex = (ligStartIndex + i) * 3;
-      caretPositions[startIndex] = ligStartX + guessedAdvanceX * i;
-      caretPositions[startIndex + 1] = ligStartX + guessedAdvanceX * (i + 1);
-      caretPositions[startIndex + 2] = ligY;
-    }
-  }
-
-  function now() {
-    return (self.performance || Date).now()
-  }
-
-  // Array-backed structure for a single line's glyphs data
-  function TextLine() {
-    this.data = [];
-  }
-  const textLineProps = ['glyphObj', 'x', 'width', 'charIndex'];
-  TextLine.prototype = {
-    width: 0,
-    isSoftWrapped: false,
-    get count() {
-      return Math.ceil(this.data.length / textLineProps.length)
-    },
-    glyphAt(i) {
-      let fly = TextLine.flyweight;
-      fly.data = this.data;
-      fly.index = i;
-      return fly
-    },
-    splitAt(i) {
-      let newLine = new TextLine();
-      newLine.data = this.data.splice(i * textLineProps.length);
-      return newLine
-    }
-  };
-  TextLine.flyweight = textLineProps.reduce((obj, prop, i, all) => {
-    Object.defineProperty(obj, prop, {
-      get() {
-        return this.data[this.index * textLineProps.length + i]
-      },
-      set(val) {
-        this.data[this.index * textLineProps.length + i] = val;
-      }
-    });
-    return obj
-  }, {data: null, index: 0});
-
-
-  return {
-    typeset,
-    measure,
-    loadFont
-  }
-}
-
-const now = () => (self.performance || Date).now();
-
-const mainThreadGenerator = SDFGenerator();
-
-let warned;
-
-/**
- * Generate an SDF texture image for a single glyph path, placing the result into a webgl canvas at a
- * given location and channel. Utilizes the webgl-sdf-generator external package for GPU-accelerated SDF
- * generation when supported.
- */
-function generateSDF(width, height, path, viewBox, distance, exponent, canvas, x, y, channel, useWebGL = true) {
-  // Allow opt-out
-  if (!useWebGL) {
-    return generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel)
-  }
-
-  // Attempt GPU-accelerated generation first
-  return generateSDF_GL(width, height, path, viewBox, distance, exponent, canvas, x, y, channel).then(
-    null,
-    err => {
-      // WebGL failed either due to a hard error or unexpected results; fall back to JS in workers
-      if (!warned) {
-        console.warn(`WebGL SDF generation failed, falling back to JS`, err);
-        warned = true;
-      }
-      return generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel)
-    }
-  )
-}
-
-/**
- * WebGL-based implementation executed on the main thread. Requests are executed in time-bounded
- * macrotask chunks to allow render frames to execute in between.
- */
-const generateSDF_GL = /*#__PURE__*/function() {
-  const queue = [];
-  const chunkTimeBudget = 5; //ms
-  let timer = 0;
-  function nextChunk() {
-    const start = now();
-    while (queue.length && now() - start < chunkTimeBudget) {
-      queue.shift()();
-    }
-    timer = queue.length ? setTimeout(nextChunk, 0) : 0;
-  }
-  return (...args) => {
-    const thenable = DefaultThenable();
-    queue.push(() => {
-      const start = now();
-      try {
-        mainThreadGenerator.webgl.generateIntoCanvas(...args);
-        thenable.resolve({timing: now() - start});
-      } catch(err) {
-        thenable.reject(err);
-      }
-    });
-    if (!timer) {
-      timer = setTimeout(nextChunk, 0);
-    }
-    return thenable
-  }
-}();
-
-/**
- * Fallback JS-based implementation, fanned out to a number of worker threads for parallelism
- */
-const generateSDF_JS_Worker = /*#__PURE__*/function() {
-  const threadCount = 4; //how many workers to spawn
-  const idleTimeout = 2000; //workers will be terminated after being idle this many milliseconds
-  const threads = {};
-  let callNum = 0;
-  return function(width, height, path, viewBox, distance, exponent, canvas, x, y, channel) {
-    const workerId = 'TroikaTextSDFGenerator_JS_' + ((callNum++) % threadCount);
-    let thread = threads[workerId];
-    if (!thread) {
-      thread = threads[workerId] = {
-        workerModule: defineWorkerModule({
-          name: workerId,
-          workerId,
-          dependencies: [
-            SDFGenerator,
-            now
-          ],
-          init(_createSDFGenerator, now) {
-            const generate = _createSDFGenerator().javascript.generate;
-            return function (...args) {
-              const start = now();
-              const textureData = generate(...args);
-              return {
-                textureData,
-                timing: now() - start
-              }
-            }
-          },
-          getTransferables(result) {
-            return [result.textureData.buffer]
-          }
-        }),
-        requests: 0,
-        idleTimer: null
-      };
-    }
-
-    thread.requests++;
-    clearTimeout(thread.idleTimer);
-    return thread.workerModule(width, height, path, viewBox, distance, exponent)
-      .then(({textureData, timing}) => {
-        // copy result data into the canvas
-        const start = now();
-        // expand single-channel data into rgba
-        const imageData = new Uint8Array(textureData.length * 4);
-        for (let i = 0; i < textureData.length; i++) {
-          imageData[i * 4 + channel] = textureData[i];
-        }
-        mainThreadGenerator.webglUtils.renderImageData(canvas, imageData, x, y, width, height, 1 << (3 - channel));
-        timing += now() - start;
-
-        // clean up workers after a while
-        if (--thread.requests === 0) {
-          thread.idleTimer = setTimeout(() => { terminateWorker(workerId); }, idleTimeout);
-        }
-        return {timing}
-      })
-  }
-}();
-
-function warmUpSDFCanvas(canvas) {
-  if (!canvas._warm) {
-    mainThreadGenerator.webgl.isSupported(canvas);
-    canvas._warm = true;
-  }
-}
-
-const resizeWebGLCanvasWithoutClearing = mainThreadGenerator.webglUtils.resizeWebGLCanvasWithoutClearing;
-
-/*!
-Custom build of Typr.ts (https://github.com/fredli74/Typr.ts) for use in Troika text rendering.
-Original MIT license applies: https://github.com/fredli74/Typr.ts/blob/master/LICENSE
-*/
-function typrFactory(){return "undefined"==typeof window&&(self.window=self),function(r){var e={parse:function(r){var t=e._bin,a=new Uint8Array(r);if("ttcf"==t.readASCII(a,0,4)){var n=4;t.readUshort(a,n),n+=2,t.readUshort(a,n),n+=2;var o=t.readUint(a,n);n+=4;for(var s=[],i=0;i<o;i++){var h=t.readUint(a,n);n+=4,s.push(e._readFont(a,h));}return s}return [e._readFont(a,0)]},_readFont:function(r,t){var a=e._bin,n=t;a.readFixed(r,t),t+=4;var o=a.readUshort(r,t);t+=2,a.readUshort(r,t),t+=2,a.readUshort(r,t),t+=2,a.readUshort(r,t),t+=2;for(var s=["cmap","head","hhea","maxp","hmtx","name","OS/2","post","loca","glyf","kern","CFF ","GPOS","GSUB","SVG "],i={_data:r,_offset:n},h={},f=0;f<o;f++){var d=a.readASCII(r,t,4);t+=4,a.readUint(r,t),t+=4;var l=a.readUint(r,t);t+=4;var u=a.readUint(r,t);t+=4,h[d]={offset:l,length:u};}for(f=0;f<s.length;f++){var v=s[f];h[v]&&(i[v.trim()]=e[v.trim()].parse(r,h[v].offset,h[v].length,i));}return i},_tabOffset:function(r,t,a){for(var n=e._bin,o=n.readUshort(r,a+4),s=a+12,i=0;i<o;i++){var h=n.readASCII(r,s,4);s+=4,n.readUint(r,s),s+=4;var f=n.readUint(r,s);if(s+=4,n.readUint(r,s),s+=4,h==t)return f}return 0}};e._bin={readFixed:function(r,e){return (r[e]<<8|r[e+1])+(r[e+2]<<8|r[e+3])/65540},readF2dot14:function(r,t){return e._bin.readShort(r,t)/16384},readInt:function(r,t){return e._bin._view(r).getInt32(t)},readInt8:function(r,t){return e._bin._view(r).getInt8(t)},readShort:function(r,t){return e._bin._view(r).getInt16(t)},readUshort:function(r,t){return e._bin._view(r).getUint16(t)},readUshorts:function(r,t,a){for(var n=[],o=0;o<a;o++)n.push(e._bin.readUshort(r,t+2*o));return n},readUint:function(r,t){return e._bin._view(r).getUint32(t)},readUint64:function(r,t){return 4294967296*e._bin.readUint(r,t)+e._bin.readUint(r,t+4)},readASCII:function(r,e,t){for(var a="",n=0;n<t;n++)a+=String.fromCharCode(r[e+n]);return a},readUnicode:function(r,e,t){for(var a="",n=0;n<t;n++){var o=r[e++]<<8|r[e++];a+=String.fromCharCode(o);}return a},_tdec:"undefined"!=typeof window&&window.TextDecoder?new window.TextDecoder:null,readUTF8:function(r,t,a){var n=e._bin._tdec;return n&&0==t&&a==r.length?n.decode(r):e._bin.readASCII(r,t,a)},readBytes:function(r,e,t){for(var a=[],n=0;n<t;n++)a.push(r[e+n]);return a},readASCIIArray:function(r,e,t){for(var a=[],n=0;n<t;n++)a.push(String.fromCharCode(r[e+n]));return a},_view:function(r){return r._dataView||(r._dataView=r.buffer?new DataView(r.buffer,r.byteOffset,r.byteLength):new DataView(new Uint8Array(r).buffer))}},e._lctf={},e._lctf.parse=function(r,t,a,n,o){var s=e._bin,i={},h=t;s.readFixed(r,t),t+=4;var f=s.readUshort(r,t);t+=2;var d=s.readUshort(r,t);t+=2;var l=s.readUshort(r,t);return t+=2,i.scriptList=e._lctf.readScriptList(r,h+f),i.featureList=e._lctf.readFeatureList(r,h+d),i.lookupList=e._lctf.readLookupList(r,h+l,o),i},e._lctf.readLookupList=function(r,t,a){var n=e._bin,o=t,s=[],i=n.readUshort(r,t);t+=2;for(var h=0;h<i;h++){var f=n.readUshort(r,t);t+=2;var d=e._lctf.readLookupTable(r,o+f,a);s.push(d);}return s},e._lctf.readLookupTable=function(r,t,a){var n=e._bin,o=t,s={tabs:[]};s.ltype=n.readUshort(r,t),t+=2,s.flag=n.readUshort(r,t),t+=2;var i=n.readUshort(r,t);t+=2;for(var h=s.ltype,f=0;f<i;f++){var d=n.readUshort(r,t);t+=2;var l=a(r,h,o+d,s);s.tabs.push(l);}return s},e._lctf.numOfOnes=function(r){for(var e=0,t=0;t<32;t++)0!=(r>>>t&1)&&e++;return e},e._lctf.readClassDef=function(r,t){var a=e._bin,n=[],o=a.readUshort(r,t);if(t+=2,1==o){var s=a.readUshort(r,t);t+=2;var i=a.readUshort(r,t);t+=2;for(var h=0;h<i;h++)n.push(s+h),n.push(s+h),n.push(a.readUshort(r,t)),t+=2;}if(2==o){var f=a.readUshort(r,t);t+=2;for(h=0;h<f;h++)n.push(a.readUshort(r,t)),t+=2,n.push(a.readUshort(r,t)),t+=2,n.push(a.readUshort(r,t)),t+=2;}return n},e._lctf.getInterval=function(r,e){for(var t=0;t<r.length;t+=3){var a=r[t],n=r[t+1];if(r[t+2],a<=e&&e<=n)return t}return -1},e._lctf.readCoverage=function(r,t){var a=e._bin,n={};n.fmt=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);return t+=2,1==n.fmt&&(n.tab=a.readUshorts(r,t,o)),2==n.fmt&&(n.tab=a.readUshorts(r,t,3*o)),n},e._lctf.coverageIndex=function(r,t){var a=r.tab;if(1==r.fmt)return a.indexOf(t);if(2==r.fmt){var n=e._lctf.getInterval(a,t);if(-1!=n)return a[n+2]+(t-a[n])}return -1},e._lctf.readFeatureList=function(r,t){var a=e._bin,n=t,o=[],s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=a.readASCII(r,t,4);t+=4;var f=a.readUshort(r,t);t+=2;var d=e._lctf.readFeatureTable(r,n+f);d.tag=h.trim(),o.push(d);}return o},e._lctf.readFeatureTable=function(r,t){var a=e._bin,n=t,o={},s=a.readUshort(r,t);t+=2,s>0&&(o.featureParams=n+s);var i=a.readUshort(r,t);t+=2,o.tab=[];for(var h=0;h<i;h++)o.tab.push(a.readUshort(r,t+2*h));return o},e._lctf.readScriptList=function(r,t){var a=e._bin,n=t,o={},s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=a.readASCII(r,t,4);t+=4;var f=a.readUshort(r,t);t+=2,o[h.trim()]=e._lctf.readScriptTable(r,n+f);}return o},e._lctf.readScriptTable=function(r,t){var a=e._bin,n=t,o={},s=a.readUshort(r,t);t+=2,o.default=e._lctf.readLangSysTable(r,n+s);var i=a.readUshort(r,t);t+=2;for(var h=0;h<i;h++){var f=a.readASCII(r,t,4);t+=4;var d=a.readUshort(r,t);t+=2,o[f.trim()]=e._lctf.readLangSysTable(r,n+d);}return o},e._lctf.readLangSysTable=function(r,t){var a=e._bin,n={};a.readUshort(r,t),t+=2,n.reqFeature=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);return t+=2,n.features=a.readUshorts(r,t,o),n},e.CFF={},e.CFF.parse=function(r,t,a){var n=e._bin;(r=new Uint8Array(r.buffer,t,a))[t=0],r[++t],r[++t],r[++t],t++;var o=[];t=e.CFF.readIndex(r,t,o);for(var s=[],i=0;i<o.length-1;i++)s.push(n.readASCII(r,t+o[i],o[i+1]-o[i]));t+=o[o.length-1];var h=[];t=e.CFF.readIndex(r,t,h);var f=[];for(i=0;i<h.length-1;i++)f.push(e.CFF.readDict(r,t+h[i],t+h[i+1]));t+=h[h.length-1];var d=f[0],l=[];t=e.CFF.readIndex(r,t,l);var u=[];for(i=0;i<l.length-1;i++)u.push(n.readASCII(r,t+l[i],l[i+1]-l[i]));if(t+=l[l.length-1],e.CFF.readSubrs(r,t,d),d.CharStrings){t=d.CharStrings;l=[];t=e.CFF.readIndex(r,t,l);var v=[];for(i=0;i<l.length-1;i++)v.push(n.readBytes(r,t+l[i],l[i+1]-l[i]));d.CharStrings=v;}if(d.ROS){t=d.FDArray;var c=[];t=e.CFF.readIndex(r,t,c),d.FDArray=[];for(i=0;i<c.length-1;i++){var p=e.CFF.readDict(r,t+c[i],t+c[i+1]);e.CFF._readFDict(r,p,u),d.FDArray.push(p);}t+=c[c.length-1],t=d.FDSelect,d.FDSelect=[];var U=r[t];if(t++,3!=U)throw U;var g=n.readUshort(r,t);t+=2;for(i=0;i<g+1;i++)d.FDSelect.push(n.readUshort(r,t),r[t+2]),t+=3;}return d.Encoding&&(d.Encoding=e.CFF.readEncoding(r,d.Encoding,d.CharStrings.length)),d.charset&&(d.charset=e.CFF.readCharset(r,d.charset,d.CharStrings.length)),e.CFF._readFDict(r,d,u),d},e.CFF._readFDict=function(r,t,a){var n;for(var o in t.Private&&(n=t.Private[1],t.Private=e.CFF.readDict(r,n,n+t.Private[0]),t.Private.Subrs&&e.CFF.readSubrs(r,n+t.Private.Subrs,t.Private)),t)-1!=["FamilyName","FontName","FullName","Notice","version","Copyright"].indexOf(o)&&(t[o]=a[t[o]-426+35]);},e.CFF.readSubrs=function(r,t,a){var n=e._bin,o=[];t=e.CFF.readIndex(r,t,o);var s,i=o.length;s=i<1240?107:i<33900?1131:32768,a.Bias=s,a.Subrs=[];for(var h=0;h<o.length-1;h++)a.Subrs.push(n.readBytes(r,t+o[h],o[h+1]-o[h]));},e.CFF.tableSE=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,0,111,112,113,114,0,115,116,117,118,119,120,121,122,0,123,0,124,125,126,127,128,129,130,131,0,132,133,0,134,135,136,137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,0,139,0,0,0,0,140,141,142,143,0,0,0,0,0,144,0,0,0,145,0,0,146,147,148,149,0,0,0,0],e.CFF.glyphByUnicode=function(r,e){for(var t=0;t<r.charset.length;t++)if(r.charset[t]==e)return t;return -1},e.CFF.glyphBySE=function(r,t){return t<0||t>255?-1:e.CFF.glyphByUnicode(r,e.CFF.tableSE[t])},e.CFF.readEncoding=function(r,t,a){e._bin;var n=[".notdef"],o=r[t];if(t++,0!=o)throw "error: unknown encoding format: "+o;var s=r[t];t++;for(var i=0;i<s;i++)n.push(r[t+i]);return n},e.CFF.readCharset=function(r,t,a){var n=e._bin,o=[".notdef"],s=r[t];if(t++,0==s)for(var i=0;i<a;i++){var h=n.readUshort(r,t);t+=2,o.push(h);}else {if(1!=s&&2!=s)throw "error: format: "+s;for(;o.length<a;){h=n.readUshort(r,t);t+=2;var f=0;1==s?(f=r[t],t++):(f=n.readUshort(r,t),t+=2);for(i=0;i<=f;i++)o.push(h),h++;}}return o},e.CFF.readIndex=function(r,t,a){var n=e._bin,o=n.readUshort(r,t)+1,s=r[t+=2];if(t++,1==s)for(var i=0;i<o;i++)a.push(r[t+i]);else if(2==s)for(i=0;i<o;i++)a.push(n.readUshort(r,t+2*i));else if(3==s)for(i=0;i<o;i++)a.push(16777215&n.readUint(r,t+3*i-1));else if(1!=o)throw "unsupported offset size: "+s+", count: "+o;return (t+=o*s)-1},e.CFF.getCharString=function(r,t,a){var n=e._bin,o=r[t],s=r[t+1];r[t+2],r[t+3],r[t+4];var i=1,h=null,f=null;o<=20&&(h=o,i=1),12==o&&(h=100*o+s,i=2),21<=o&&o<=27&&(h=o,i=1),28==o&&(f=n.readShort(r,t+1),i=3),29<=o&&o<=31&&(h=o,i=1),32<=o&&o<=246&&(f=o-139,i=1),247<=o&&o<=250&&(f=256*(o-247)+s+108,i=2),251<=o&&o<=254&&(f=256*-(o-251)-s-108,i=2),255==o&&(f=n.readInt(r,t+1)/65535,i=5),a.val=null!=f?f:"o"+h,a.size=i;},e.CFF.readCharString=function(r,t,a){for(var n=t+a,o=e._bin,s=[];t<n;){var i=r[t],h=r[t+1];r[t+2],r[t+3],r[t+4];var f=1,d=null,l=null;i<=20&&(d=i,f=1),12==i&&(d=100*i+h,f=2),19!=i&&20!=i||(d=i,f=2),21<=i&&i<=27&&(d=i,f=1),28==i&&(l=o.readShort(r,t+1),f=3),29<=i&&i<=31&&(d=i,f=1),32<=i&&i<=246&&(l=i-139,f=1),247<=i&&i<=250&&(l=256*(i-247)+h+108,f=2),251<=i&&i<=254&&(l=256*-(i-251)-h-108,f=2),255==i&&(l=o.readInt(r,t+1)/65535,f=5),s.push(null!=l?l:"o"+d),t+=f;}return s},e.CFF.readDict=function(r,t,a){for(var n=e._bin,o={},s=[];t<a;){var i=r[t],h=r[t+1];r[t+2],r[t+3],r[t+4];var f=1,d=null,l=null;if(28==i&&(l=n.readShort(r,t+1),f=3),29==i&&(l=n.readInt(r,t+1),f=5),32<=i&&i<=246&&(l=i-139,f=1),247<=i&&i<=250&&(l=256*(i-247)+h+108,f=2),251<=i&&i<=254&&(l=256*-(i-251)-h-108,f=2),255==i)throw l=n.readInt(r,t+1)/65535,f=5,"unknown number";if(30==i){var u=[];for(f=1;;){var v=r[t+f];f++;var c=v>>4,p=15&v;if(15!=c&&u.push(c),15!=p&&u.push(p),15==p)break}for(var U="",g=[0,1,2,3,4,5,6,7,8,9,".","e","e-","reserved","-","endOfNumber"],S=0;S<u.length;S++)U+=g[u[S]];l=parseFloat(U);}if(i<=21)if(d=["version","Notice","FullName","FamilyName","Weight","FontBBox","BlueValues","OtherBlues","FamilyBlues","FamilyOtherBlues","StdHW","StdVW","escape","UniqueID","XUID","charset","Encoding","CharStrings","Private","Subrs","defaultWidthX","nominalWidthX"][i],f=1,12==i)d=["Copyright","isFixedPitch","ItalicAngle","UnderlinePosition","UnderlineThickness","PaintType","CharstringType","FontMatrix","StrokeWidth","BlueScale","BlueShift","BlueFuzz","StemSnapH","StemSnapV","ForceBold",0,0,"LanguageGroup","ExpansionFactor","initialRandomSeed","SyntheticBase","PostScript","BaseFontName","BaseFontBlend",0,0,0,0,0,0,"ROS","CIDFontVersion","CIDFontRevision","CIDFontType","CIDCount","UIDBase","FDArray","FDSelect","FontName"][h],f=2;null!=d?(o[d]=1==s.length?s[0]:s,s=[]):s.push(l),t+=f;}return o},e.cmap={},e.cmap.parse=function(r,t,a){r=new Uint8Array(r.buffer,t,a),t=0;var n=e._bin,o={};n.readUshort(r,t),t+=2;var s=n.readUshort(r,t);t+=2;var i=[];o.tables=[];for(var h=0;h<s;h++){var f=n.readUshort(r,t);t+=2;var d=n.readUshort(r,t);t+=2;var l=n.readUint(r,t);t+=4;var u="p"+f+"e"+d,v=i.indexOf(l);if(-1==v){var c;v=o.tables.length,i.push(l);var p=n.readUshort(r,l);0==p?c=e.cmap.parse0(r,l):4==p?c=e.cmap.parse4(r,l):6==p?c=e.cmap.parse6(r,l):12==p?c=e.cmap.parse12(r,l):console.debug("unknown format: "+p,f,d,l),o.tables.push(c);}if(null!=o[u])throw "multiple tables for one platform+encoding";o[u]=v;}return o},e.cmap.parse0=function(r,t){var a=e._bin,n={};n.format=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);t+=2,a.readUshort(r,t),t+=2,n.map=[];for(var s=0;s<o-6;s++)n.map.push(r[t+s]);return n},e.cmap.parse4=function(r,t){var a=e._bin,n=t,o={};o.format=a.readUshort(r,t),t+=2;var s=a.readUshort(r,t);t+=2,a.readUshort(r,t),t+=2;var i=a.readUshort(r,t);t+=2;var h=i/2;o.searchRange=a.readUshort(r,t),t+=2,o.entrySelector=a.readUshort(r,t),t+=2,o.rangeShift=a.readUshort(r,t),t+=2,o.endCount=a.readUshorts(r,t,h),t+=2*h,t+=2,o.startCount=a.readUshorts(r,t,h),t+=2*h,o.idDelta=[];for(var f=0;f<h;f++)o.idDelta.push(a.readShort(r,t)),t+=2;for(o.idRangeOffset=a.readUshorts(r,t,h),t+=2*h,o.glyphIdArray=[];t<n+s;)o.glyphIdArray.push(a.readUshort(r,t)),t+=2;return o},e.cmap.parse6=function(r,t){var a=e._bin,n={};n.format=a.readUshort(r,t),t+=2,a.readUshort(r,t),t+=2,a.readUshort(r,t),t+=2,n.firstCode=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);t+=2,n.glyphIdArray=[];for(var s=0;s<o;s++)n.glyphIdArray.push(a.readUshort(r,t)),t+=2;return n},e.cmap.parse12=function(r,t){var a=e._bin,n={};n.format=a.readUshort(r,t),t+=2,t+=2,a.readUint(r,t),t+=4,a.readUint(r,t),t+=4;var o=a.readUint(r,t);t+=4,n.groups=[];for(var s=0;s<o;s++){var i=t+12*s,h=a.readUint(r,i+0),f=a.readUint(r,i+4),d=a.readUint(r,i+8);n.groups.push([h,f,d]);}return n},e.glyf={},e.glyf.parse=function(r,e,t,a){for(var n=[],o=0;o<a.maxp.numGlyphs;o++)n.push(null);return n},e.glyf._parseGlyf=function(r,t){var a=e._bin,n=r._data,o=e._tabOffset(n,"glyf",r._offset)+r.loca[t];if(r.loca[t]==r.loca[t+1])return null;var s={};if(s.noc=a.readShort(n,o),o+=2,s.xMin=a.readShort(n,o),o+=2,s.yMin=a.readShort(n,o),o+=2,s.xMax=a.readShort(n,o),o+=2,s.yMax=a.readShort(n,o),o+=2,s.xMin>=s.xMax||s.yMin>=s.yMax)return null;if(s.noc>0){s.endPts=[];for(var i=0;i<s.noc;i++)s.endPts.push(a.readUshort(n,o)),o+=2;var h=a.readUshort(n,o);if(o+=2,n.length-o<h)return null;s.instructions=a.readBytes(n,o,h),o+=h;var f=s.endPts[s.noc-1]+1;s.flags=[];for(i=0;i<f;i++){var d=n[o];if(o++,s.flags.push(d),0!=(8&d)){var l=n[o];o++;for(var u=0;u<l;u++)s.flags.push(d),i++;}}s.xs=[];for(i=0;i<f;i++){var v=0!=(2&s.flags[i]),c=0!=(16&s.flags[i]);v?(s.xs.push(c?n[o]:-n[o]),o++):c?s.xs.push(0):(s.xs.push(a.readShort(n,o)),o+=2);}s.ys=[];for(i=0;i<f;i++){v=0!=(4&s.flags[i]),c=0!=(32&s.flags[i]);v?(s.ys.push(c?n[o]:-n[o]),o++):c?s.ys.push(0):(s.ys.push(a.readShort(n,o)),o+=2);}var p=0,U=0;for(i=0;i<f;i++)p+=s.xs[i],U+=s.ys[i],s.xs[i]=p,s.ys[i]=U;}else {var g;s.parts=[];do{g=a.readUshort(n,o),o+=2;var S={m:{a:1,b:0,c:0,d:1,tx:0,ty:0},p1:-1,p2:-1};if(s.parts.push(S),S.glyphIndex=a.readUshort(n,o),o+=2,1&g){var m=a.readShort(n,o);o+=2;var b=a.readShort(n,o);o+=2;}else {m=a.readInt8(n,o);o++;b=a.readInt8(n,o);o++;}2&g?(S.m.tx=m,S.m.ty=b):(S.p1=m,S.p2=b),8&g?(S.m.a=S.m.d=a.readF2dot14(n,o),o+=2):64&g?(S.m.a=a.readF2dot14(n,o),o+=2,S.m.d=a.readF2dot14(n,o),o+=2):128&g&&(S.m.a=a.readF2dot14(n,o),o+=2,S.m.b=a.readF2dot14(n,o),o+=2,S.m.c=a.readF2dot14(n,o),o+=2,S.m.d=a.readF2dot14(n,o),o+=2);}while(32&g);if(256&g){var y=a.readUshort(n,o);o+=2,s.instr=[];for(i=0;i<y;i++)s.instr.push(n[o]),o++;}}return s},e.GPOS={},e.GPOS.parse=function(r,t,a,n){return e._lctf.parse(r,t,a,n,e.GPOS.subt)},e.GPOS.subt=function(r,t,a,n){var o=e._bin,s=a,i={};if(i.fmt=o.readUshort(r,a),a+=2,1==t||2==t||3==t||7==t||8==t&&i.fmt<=2){var h=o.readUshort(r,a);a+=2,i.coverage=e._lctf.readCoverage(r,h+s);}if(1==t&&1==i.fmt){var f=o.readUshort(r,a);a+=2;var d=e._lctf.numOfOnes(f);0!=f&&(i.pos=e.GPOS.readValueRecord(r,a,f));}else if(2==t&&i.fmt>=1&&i.fmt<=2){f=o.readUshort(r,a);a+=2;var l=o.readUshort(r,a);a+=2;d=e._lctf.numOfOnes(f);var u=e._lctf.numOfOnes(l);if(1==i.fmt){i.pairsets=[];var v=o.readUshort(r,a);a+=2;for(var c=0;c<v;c++){var p=s+o.readUshort(r,a);a+=2;var U=o.readUshort(r,p);p+=2;for(var g=[],S=0;S<U;S++){var m=o.readUshort(r,p);p+=2,0!=f&&(x=e.GPOS.readValueRecord(r,p,f),p+=2*d),0!=l&&(P=e.GPOS.readValueRecord(r,p,l),p+=2*u),g.push({gid2:m,val1:x,val2:P});}i.pairsets.push(g);}}if(2==i.fmt){var b=o.readUshort(r,a);a+=2;var y=o.readUshort(r,a);a+=2;var F=o.readUshort(r,a);a+=2;var _=o.readUshort(r,a);a+=2,i.classDef1=e._lctf.readClassDef(r,s+b),i.classDef2=e._lctf.readClassDef(r,s+y),i.matrix=[];for(c=0;c<F;c++){var C=[];for(S=0;S<_;S++){var x=null,P=null;0!=f&&(x=e.GPOS.readValueRecord(r,a,f),a+=2*d),0!=l&&(P=e.GPOS.readValueRecord(r,a,l),a+=2*u),C.push({val1:x,val2:P});}i.matrix.push(C);}}}else {if(9==t&&1==i.fmt){var I=o.readUshort(r,a);a+=2;var w=o.readUint(r,a);if(a+=4,9==n.ltype)n.ltype=I;else if(n.ltype!=I)throw "invalid extension substitution";return e.GPOS.subt(r,n.ltype,s+w)}console.debug("unsupported GPOS table LookupType",t,"format",i.fmt);}return i},e.GPOS.readValueRecord=function(r,t,a){var n=e._bin,o=[];return o.push(1&a?n.readShort(r,t):0),t+=1&a?2:0,o.push(2&a?n.readShort(r,t):0),t+=2&a?2:0,o.push(4&a?n.readShort(r,t):0),t+=4&a?2:0,o.push(8&a?n.readShort(r,t):0),t+=8&a?2:0,o},e.GSUB={},e.GSUB.parse=function(r,t,a,n){return e._lctf.parse(r,t,a,n,e.GSUB.subt)},e.GSUB.subt=function(r,t,a,n){var o=e._bin,s=a,i={};if(i.fmt=o.readUshort(r,a),a+=2,1!=t&&4!=t&&5!=t&&6!=t)return null;if(1==t||4==t||5==t&&i.fmt<=2||6==t&&i.fmt<=2){var h=o.readUshort(r,a);a+=2,i.coverage=e._lctf.readCoverage(r,s+h);}if(1==t&&i.fmt>=1&&i.fmt<=2){if(1==i.fmt)i.delta=o.readShort(r,a),a+=2;else if(2==i.fmt){var f=o.readUshort(r,a);a+=2,i.newg=o.readUshorts(r,a,f),a+=2*i.newg.length;}}else if(4==t){i.vals=[];f=o.readUshort(r,a);a+=2;for(var d=0;d<f;d++){var l=o.readUshort(r,a);a+=2,i.vals.push(e.GSUB.readLigatureSet(r,s+l));}}else if(5==t&&2==i.fmt){if(2==i.fmt){var u=o.readUshort(r,a);a+=2,i.cDef=e._lctf.readClassDef(r,s+u),i.scset=[];var v=o.readUshort(r,a);a+=2;for(d=0;d<v;d++){var c=o.readUshort(r,a);a+=2,i.scset.push(0==c?null:e.GSUB.readSubClassSet(r,s+c));}}}else if(6==t&&3==i.fmt){if(3==i.fmt){for(d=0;d<3;d++){f=o.readUshort(r,a);a+=2;for(var p=[],U=0;U<f;U++)p.push(e._lctf.readCoverage(r,s+o.readUshort(r,a+2*U)));a+=2*f,0==d&&(i.backCvg=p),1==d&&(i.inptCvg=p),2==d&&(i.ahedCvg=p);}f=o.readUshort(r,a);a+=2,i.lookupRec=e.GSUB.readSubstLookupRecords(r,a,f);}}else {if(7==t&&1==i.fmt){var g=o.readUshort(r,a);a+=2;var S=o.readUint(r,a);if(a+=4,9==n.ltype)n.ltype=g;else if(n.ltype!=g)throw "invalid extension substitution";return e.GSUB.subt(r,n.ltype,s+S)}console.debug("unsupported GSUB table LookupType",t,"format",i.fmt);}return i},e.GSUB.readSubClassSet=function(r,t){var a=e._bin.readUshort,n=t,o=[],s=a(r,t);t+=2;for(var i=0;i<s;i++){var h=a(r,t);t+=2,o.push(e.GSUB.readSubClassRule(r,n+h));}return o},e.GSUB.readSubClassRule=function(r,t){var a=e._bin.readUshort,n={},o=a(r,t),s=a(r,t+=2);t+=2,n.input=[];for(var i=0;i<o-1;i++)n.input.push(a(r,t)),t+=2;return n.substLookupRecords=e.GSUB.readSubstLookupRecords(r,t,s),n},e.GSUB.readSubstLookupRecords=function(r,t,a){for(var n=e._bin.readUshort,o=[],s=0;s<a;s++)o.push(n(r,t),n(r,t+2)),t+=4;return o},e.GSUB.readChainSubClassSet=function(r,t){var a=e._bin,n=t,o=[],s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=a.readUshort(r,t);t+=2,o.push(e.GSUB.readChainSubClassRule(r,n+h));}return o},e.GSUB.readChainSubClassRule=function(r,t){for(var a=e._bin,n={},o=["backtrack","input","lookahead"],s=0;s<o.length;s++){var i=a.readUshort(r,t);t+=2,1==s&&i--,n[o[s]]=a.readUshorts(r,t,i),t+=2*n[o[s]].length;}i=a.readUshort(r,t);return t+=2,n.subst=a.readUshorts(r,t,2*i),t+=2*n.subst.length,n},e.GSUB.readLigatureSet=function(r,t){var a=e._bin,n=t,o=[],s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=a.readUshort(r,t);t+=2,o.push(e.GSUB.readLigature(r,n+h));}return o},e.GSUB.readLigature=function(r,t){var a=e._bin,n={chain:[]};n.nglyph=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);t+=2;for(var s=0;s<o-1;s++)n.chain.push(a.readUshort(r,t)),t+=2;return n},e.head={},e.head.parse=function(r,t,a){var n=e._bin,o={};return n.readFixed(r,t),t+=4,o.fontRevision=n.readFixed(r,t),t+=4,n.readUint(r,t),t+=4,n.readUint(r,t),t+=4,o.flags=n.readUshort(r,t),t+=2,o.unitsPerEm=n.readUshort(r,t),t+=2,o.created=n.readUint64(r,t),t+=8,o.modified=n.readUint64(r,t),t+=8,o.xMin=n.readShort(r,t),t+=2,o.yMin=n.readShort(r,t),t+=2,o.xMax=n.readShort(r,t),t+=2,o.yMax=n.readShort(r,t),t+=2,o.macStyle=n.readUshort(r,t),t+=2,o.lowestRecPPEM=n.readUshort(r,t),t+=2,o.fontDirectionHint=n.readShort(r,t),t+=2,o.indexToLocFormat=n.readShort(r,t),t+=2,o.glyphDataFormat=n.readShort(r,t),t+=2,o},e.hhea={},e.hhea.parse=function(r,t,a){var n=e._bin,o={};return n.readFixed(r,t),t+=4,o.ascender=n.readShort(r,t),t+=2,o.descender=n.readShort(r,t),t+=2,o.lineGap=n.readShort(r,t),t+=2,o.advanceWidthMax=n.readUshort(r,t),t+=2,o.minLeftSideBearing=n.readShort(r,t),t+=2,o.minRightSideBearing=n.readShort(r,t),t+=2,o.xMaxExtent=n.readShort(r,t),t+=2,o.caretSlopeRise=n.readShort(r,t),t+=2,o.caretSlopeRun=n.readShort(r,t),t+=2,o.caretOffset=n.readShort(r,t),t+=2,t+=8,o.metricDataFormat=n.readShort(r,t),t+=2,o.numberOfHMetrics=n.readUshort(r,t),t+=2,o},e.hmtx={},e.hmtx.parse=function(r,t,a,n){for(var o=e._bin,s={aWidth:[],lsBearing:[]},i=0,h=0,f=0;f<n.maxp.numGlyphs;f++)f<n.hhea.numberOfHMetrics&&(i=o.readUshort(r,t),t+=2,h=o.readShort(r,t),t+=2),s.aWidth.push(i),s.lsBearing.push(h);return s},e.kern={},e.kern.parse=function(r,t,a,n){var o=e._bin,s=o.readUshort(r,t);if(t+=2,1==s)return e.kern.parseV1(r,t-2,a,n);var i=o.readUshort(r,t);t+=2;for(var h={glyph1:[],rval:[]},f=0;f<i;f++){t+=2;a=o.readUshort(r,t);t+=2;var d=o.readUshort(r,t);t+=2;var l=d>>>8;if(0!=(l&=15))throw "unknown kern table format: "+l;t=e.kern.readFormat0(r,t,h);}return h},e.kern.parseV1=function(r,t,a,n){var o=e._bin;o.readFixed(r,t),t+=4;var s=o.readUint(r,t);t+=4;for(var i={glyph1:[],rval:[]},h=0;h<s;h++){o.readUint(r,t),t+=4;var f=o.readUshort(r,t);t+=2,o.readUshort(r,t),t+=2;var d=f>>>8;if(0!=(d&=15))throw "unknown kern table format: "+d;t=e.kern.readFormat0(r,t,i);}return i},e.kern.readFormat0=function(r,t,a){var n=e._bin,o=-1,s=n.readUshort(r,t);t+=2,n.readUshort(r,t),t+=2,n.readUshort(r,t),t+=2,n.readUshort(r,t),t+=2;for(var i=0;i<s;i++){var h=n.readUshort(r,t);t+=2;var f=n.readUshort(r,t);t+=2;var d=n.readShort(r,t);t+=2,h!=o&&(a.glyph1.push(h),a.rval.push({glyph2:[],vals:[]}));var l=a.rval[a.rval.length-1];l.glyph2.push(f),l.vals.push(d),o=h;}return t},e.loca={},e.loca.parse=function(r,t,a,n){var o=e._bin,s=[],i=n.head.indexToLocFormat,h=n.maxp.numGlyphs+1;if(0==i)for(var f=0;f<h;f++)s.push(o.readUshort(r,t+(f<<1))<<1);if(1==i)for(f=0;f<h;f++)s.push(o.readUint(r,t+(f<<2)));return s},e.maxp={},e.maxp.parse=function(r,t,a){var n=e._bin,o={},s=n.readUint(r,t);return t+=4,o.numGlyphs=n.readUshort(r,t),t+=2,65536==s&&(o.maxPoints=n.readUshort(r,t),t+=2,o.maxContours=n.readUshort(r,t),t+=2,o.maxCompositePoints=n.readUshort(r,t),t+=2,o.maxCompositeContours=n.readUshort(r,t),t+=2,o.maxZones=n.readUshort(r,t),t+=2,o.maxTwilightPoints=n.readUshort(r,t),t+=2,o.maxStorage=n.readUshort(r,t),t+=2,o.maxFunctionDefs=n.readUshort(r,t),t+=2,o.maxInstructionDefs=n.readUshort(r,t),t+=2,o.maxStackElements=n.readUshort(r,t),t+=2,o.maxSizeOfInstructions=n.readUshort(r,t),t+=2,o.maxComponentElements=n.readUshort(r,t),t+=2,o.maxComponentDepth=n.readUshort(r,t),t+=2),o},e.name={},e.name.parse=function(r,t,a){var n=e._bin,o={};n.readUshort(r,t),t+=2;var s=n.readUshort(r,t);t+=2,n.readUshort(r,t);for(var i,h=["copyright","fontFamily","fontSubfamily","ID","fullName","version","postScriptName","trademark","manufacturer","designer","description","urlVendor","urlDesigner","licence","licenceURL","---","typoFamilyName","typoSubfamilyName","compatibleFull","sampleText","postScriptCID","wwsFamilyName","wwsSubfamilyName","lightPalette","darkPalette"],f=t+=2,d=0;d<s;d++){var l=n.readUshort(r,t);t+=2;var u=n.readUshort(r,t);t+=2;var v=n.readUshort(r,t);t+=2;var c=n.readUshort(r,t);t+=2;var p=n.readUshort(r,t);t+=2;var U=n.readUshort(r,t);t+=2;var g,S=h[c],m=f+12*s+U;if(0==l)g=n.readUnicode(r,m,p/2);else if(3==l&&0==u)g=n.readUnicode(r,m,p/2);else if(0==u)g=n.readASCII(r,m,p);else if(1==u)g=n.readUnicode(r,m,p/2);else if(3==u)g=n.readUnicode(r,m,p/2);else {if(1!=l)throw "unknown encoding "+u+", platformID: "+l;g=n.readASCII(r,m,p),console.debug("reading unknown MAC encoding "+u+" as ASCII");}var b="p"+l+","+v.toString(16);null==o[b]&&(o[b]={}),o[b][void 0!==S?S:c]=g,o[b]._lang=v;}for(var y in o)if(null!=o[y].postScriptName&&1033==o[y]._lang)return o[y];for(var y in o)if(null!=o[y].postScriptName&&0==o[y]._lang)return o[y];for(var y in o)if(null!=o[y].postScriptName&&3084==o[y]._lang)return o[y];for(var y in o)if(null!=o[y].postScriptName)return o[y];for(var y in o){i=y;break}return console.debug("returning name table with languageID "+o[i]._lang),o[i]},e["OS/2"]={},e["OS/2"].parse=function(r,t,a){var n=e._bin.readUshort(r,t);t+=2;var o={};if(0==n)e["OS/2"].version0(r,t,o);else if(1==n)e["OS/2"].version1(r,t,o);else if(2==n||3==n||4==n)e["OS/2"].version2(r,t,o);else {if(5!=n)throw "unknown OS/2 table version: "+n;e["OS/2"].version5(r,t,o);}return o},e["OS/2"].version0=function(r,t,a){var n=e._bin;return a.xAvgCharWidth=n.readShort(r,t),t+=2,a.usWeightClass=n.readUshort(r,t),t+=2,a.usWidthClass=n.readUshort(r,t),t+=2,a.fsType=n.readUshort(r,t),t+=2,a.ySubscriptXSize=n.readShort(r,t),t+=2,a.ySubscriptYSize=n.readShort(r,t),t+=2,a.ySubscriptXOffset=n.readShort(r,t),t+=2,a.ySubscriptYOffset=n.readShort(r,t),t+=2,a.ySuperscriptXSize=n.readShort(r,t),t+=2,a.ySuperscriptYSize=n.readShort(r,t),t+=2,a.ySuperscriptXOffset=n.readShort(r,t),t+=2,a.ySuperscriptYOffset=n.readShort(r,t),t+=2,a.yStrikeoutSize=n.readShort(r,t),t+=2,a.yStrikeoutPosition=n.readShort(r,t),t+=2,a.sFamilyClass=n.readShort(r,t),t+=2,a.panose=n.readBytes(r,t,10),t+=10,a.ulUnicodeRange1=n.readUint(r,t),t+=4,a.ulUnicodeRange2=n.readUint(r,t),t+=4,a.ulUnicodeRange3=n.readUint(r,t),t+=4,a.ulUnicodeRange4=n.readUint(r,t),t+=4,a.achVendID=[n.readInt8(r,t),n.readInt8(r,t+1),n.readInt8(r,t+2),n.readInt8(r,t+3)],t+=4,a.fsSelection=n.readUshort(r,t),t+=2,a.usFirstCharIndex=n.readUshort(r,t),t+=2,a.usLastCharIndex=n.readUshort(r,t),t+=2,a.sTypoAscender=n.readShort(r,t),t+=2,a.sTypoDescender=n.readShort(r,t),t+=2,a.sTypoLineGap=n.readShort(r,t),t+=2,a.usWinAscent=n.readUshort(r,t),t+=2,a.usWinDescent=n.readUshort(r,t),t+=2},e["OS/2"].version1=function(r,t,a){var n=e._bin;return t=e["OS/2"].version0(r,t,a),a.ulCodePageRange1=n.readUint(r,t),t+=4,a.ulCodePageRange2=n.readUint(r,t),t+=4},e["OS/2"].version2=function(r,t,a){var n=e._bin;return t=e["OS/2"].version1(r,t,a),a.sxHeight=n.readShort(r,t),t+=2,a.sCapHeight=n.readShort(r,t),t+=2,a.usDefault=n.readUshort(r,t),t+=2,a.usBreak=n.readUshort(r,t),t+=2,a.usMaxContext=n.readUshort(r,t),t+=2},e["OS/2"].version5=function(r,t,a){var n=e._bin;return t=e["OS/2"].version2(r,t,a),a.usLowerOpticalPointSize=n.readUshort(r,t),t+=2,a.usUpperOpticalPointSize=n.readUshort(r,t),t+=2},e.post={},e.post.parse=function(r,t,a){var n=e._bin,o={};return o.version=n.readFixed(r,t),t+=4,o.italicAngle=n.readFixed(r,t),t+=4,o.underlinePosition=n.readShort(r,t),t+=2,o.underlineThickness=n.readShort(r,t),t+=2,o},null==e&&(e={}),null==e.U&&(e.U={}),e.U.codeToGlyph=function(r,e){var t=r.cmap,a=-1;if(null!=t.p0e4?a=t.p0e4:null!=t.p3e1?a=t.p3e1:null!=t.p1e0?a=t.p1e0:null!=t.p0e3&&(a=t.p0e3),-1==a)throw "no familiar platform and encoding!";var n=t.tables[a];if(0==n.format)return e>=n.map.length?0:n.map[e];if(4==n.format){for(var o=-1,s=0;s<n.endCount.length;s++)if(e<=n.endCount[s]){o=s;break}if(-1==o)return 0;if(n.startCount[o]>e)return 0;return 65535&(0!=n.idRangeOffset[o]?n.glyphIdArray[e-n.startCount[o]+(n.idRangeOffset[o]>>1)-(n.idRangeOffset.length-o)]:e+n.idDelta[o])}if(12==n.format){if(e>n.groups[n.groups.length-1][1])return 0;for(s=0;s<n.groups.length;s++){var i=n.groups[s];if(i[0]<=e&&e<=i[1])return i[2]+(e-i[0])}return 0}throw "unknown cmap table format "+n.format},e.U.glyphToPath=function(r,t){var a={cmds:[],crds:[]};if(r.SVG&&r.SVG.entries[t]){var n=r.SVG.entries[t];return null==n?a:("string"==typeof n&&(n=e.SVG.toPath(n),r.SVG.entries[t]=n),n)}if(r.CFF){var o={x:0,y:0,stack:[],nStems:0,haveWidth:!1,width:r.CFF.Private?r.CFF.Private.defaultWidthX:0,open:!1},s=r.CFF,i=r.CFF.Private;if(s.ROS){for(var h=0;s.FDSelect[h+2]<=t;)h+=2;i=s.FDArray[s.FDSelect[h+1]].Private;}e.U._drawCFF(r.CFF.CharStrings[t],o,s,i,a);}else r.glyf&&e.U._drawGlyf(t,r,a);return a},e.U._drawGlyf=function(r,t,a){var n=t.glyf[r];null==n&&(n=t.glyf[r]=e.glyf._parseGlyf(t,r)),null!=n&&(n.noc>-1?e.U._simpleGlyph(n,a):e.U._compoGlyph(n,t,a));},e.U._simpleGlyph=function(r,t){for(var a=0;a<r.noc;a++){for(var n=0==a?0:r.endPts[a-1]+1,o=r.endPts[a],s=n;s<=o;s++){var i=s==n?o:s-1,h=s==o?n:s+1,f=1&r.flags[s],d=1&r.flags[i],l=1&r.flags[h],u=r.xs[s],v=r.ys[s];if(s==n)if(f){if(!d){e.U.P.moveTo(t,u,v);continue}e.U.P.moveTo(t,r.xs[i],r.ys[i]);}else d?e.U.P.moveTo(t,r.xs[i],r.ys[i]):e.U.P.moveTo(t,(r.xs[i]+u)/2,(r.ys[i]+v)/2);f?d&&e.U.P.lineTo(t,u,v):l?e.U.P.qcurveTo(t,u,v,r.xs[h],r.ys[h]):e.U.P.qcurveTo(t,u,v,(u+r.xs[h])/2,(v+r.ys[h])/2);}e.U.P.closePath(t);}},e.U._compoGlyph=function(r,t,a){for(var n=0;n<r.parts.length;n++){var o={cmds:[],crds:[]},s=r.parts[n];e.U._drawGlyf(s.glyphIndex,t,o);for(var i=s.m,h=0;h<o.crds.length;h+=2){var f=o.crds[h],d=o.crds[h+1];a.crds.push(f*i.a+d*i.b+i.tx),a.crds.push(f*i.c+d*i.d+i.ty);}for(h=0;h<o.cmds.length;h++)a.cmds.push(o.cmds[h]);}},e.U._getGlyphClass=function(r,t){var a=e._lctf.getInterval(t,r);return -1==a?0:t[a+2]},e.U.getPairAdjustment=function(r,t,a){var n=0,o=!1;if(r.GPOS)for(var s=r.GPOS,i=s.lookupList,h=s.featureList,f=[],d=0;d<h.length;d++){var l=h[d];if("kern"==l.tag){o=!0;for(var u=0;u<l.tab.length;u++)if(!f[l.tab[u]]){f[l.tab[u]]=!0;for(var v=i[l.tab[u]],c=0;c<v.tabs.length;c++)if(null!=v.tabs[c]){var p,U=v.tabs[c];if(!U.coverage||-1!=(p=e._lctf.coverageIndex(U.coverage,t)))if(1==v.ltype);else if(2==v.ltype){var g;if(1==U.fmt){var S=U.pairsets[p];for(d=0;d<S.length;d++)S[d].gid2==a&&(g=S[d]);}else if(2==U.fmt){var m=e.U._getGlyphClass(t,U.classDef1),b=e.U._getGlyphClass(a,U.classDef2);g=U.matrix[m][b];}g&&g.val1&&g.val1[2]&&(n+=g.val1[2]),g&&g.val2&&g.val2[0]&&(n+=g.val2[0]);}}}}}if(r.kern&&!o){var y=r.kern.glyph1.indexOf(t);if(-1!=y){var F=r.kern.rval[y].glyph2.indexOf(a);-1!=F&&(n+=r.kern.rval[y].vals[F]);}}return n},e.U._applySubs=function(r,t,a,n){for(var o=r.length-t-1,s=0;s<a.tabs.length;s++)if(null!=a.tabs[s]){var i,h=a.tabs[s];if(!h.coverage||-1!=(i=e._lctf.coverageIndex(h.coverage,r[t])))if(1==a.ltype)r[t],1==h.fmt?r[t]=r[t]+h.delta:r[t]=h.newg[i];else if(4==a.ltype)for(var f=h.vals[i],d=0;d<f.length;d++){var l=f[d],u=l.chain.length;if(!(u>o)){for(var v=!0,c=0,p=0;p<u;p++){for(;-1==r[t+c+(1+p)];)c++;l.chain[p]!=r[t+c+(1+p)]&&(v=!1);}if(v){r[t]=l.nglyph;for(p=0;p<u+c;p++)r[t+p+1]=-1;break}}}else if(5==a.ltype&&2==h.fmt)for(var U=e._lctf.getInterval(h.cDef,r[t]),g=h.cDef[U+2],S=h.scset[g],m=0;m<S.length;m++){var b=S[m],y=b.input;if(!(y.length>o)){for(v=!0,p=0;p<y.length;p++){var F=e._lctf.getInterval(h.cDef,r[t+1+p]);if(-1==U&&h.cDef[F+2]!=y[p]){v=!1;break}}if(v){var _=b.substLookupRecords;for(d=0;d<_.length;d+=2)_[d],_[d+1];}}}else if(6==a.ltype&&3==h.fmt){if(!e.U._glsCovered(r,h.backCvg,t-h.backCvg.length))continue;if(!e.U._glsCovered(r,h.inptCvg,t))continue;if(!e.U._glsCovered(r,h.ahedCvg,t+h.inptCvg.length))continue;var C=h.lookupRec;for(m=0;m<C.length;m+=2){U=C[m];var x=n[C[m+1]];e.U._applySubs(r,t+U,x,n);}}}},e.U._glsCovered=function(r,t,a){for(var n=0;n<t.length;n++){if(-1==e._lctf.coverageIndex(t[n],r[a+n]))return !1}return !0},e.U.glyphsToPath=function(r,t,a){for(var n={cmds:[],crds:[]},o=0,s=0;s<t.length;s++){var i=t[s];if(-1!=i){for(var h=s<t.length-1&&-1!=t[s+1]?t[s+1]:0,f=e.U.glyphToPath(r,i),d=0;d<f.crds.length;d+=2)n.crds.push(f.crds[d]+o),n.crds.push(f.crds[d+1]);a&&n.cmds.push(a);for(d=0;d<f.cmds.length;d++)n.cmds.push(f.cmds[d]);a&&n.cmds.push("X"),o+=r.hmtx.aWidth[i],s<t.length-1&&(o+=e.U.getPairAdjustment(r,i,h));}}return n},e.U.P={},e.U.P.moveTo=function(r,e,t){r.cmds.push("M"),r.crds.push(e,t);},e.U.P.lineTo=function(r,e,t){r.cmds.push("L"),r.crds.push(e,t);},e.U.P.curveTo=function(r,e,t,a,n,o,s){r.cmds.push("C"),r.crds.push(e,t,a,n,o,s);},e.U.P.qcurveTo=function(r,e,t,a,n){r.cmds.push("Q"),r.crds.push(e,t,a,n);},e.U.P.closePath=function(r){r.cmds.push("Z");},e.U._drawCFF=function(r,t,a,n,o){for(var s=t.stack,i=t.nStems,h=t.haveWidth,f=t.width,d=t.open,l=0,u=t.x,v=t.y,c=0,p=0,U=0,g=0,S=0,m=0,b=0,y=0,F=0,_=0,C={val:0,size:0};l<r.length;){e.CFF.getCharString(r,l,C);var x=C.val;if(l+=C.size,"o1"==x||"o18"==x)s.length%2!=0&&!h&&(f=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0;else if("o3"==x||"o23"==x){s.length%2!=0&&!h&&(f=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0;}else if("o4"==x)s.length>1&&!h&&(f=s.shift()+n.nominalWidthX,h=!0),d&&e.U.P.closePath(o),v+=s.pop(),e.U.P.moveTo(o,u,v),d=!0;else if("o5"==x)for(;s.length>0;)u+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,u,v);else if("o6"==x||"o7"==x)for(var P=s.length,I="o6"==x,w=0;w<P;w++){var O=s.shift();I?u+=O:v+=O,I=!I,e.U.P.lineTo(o,u,v);}else if("o8"==x||"o24"==x){P=s.length;for(var T=0;T+6<=P;)c=u+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),u=U+s.shift(),v=g+s.shift(),e.U.P.curveTo(o,c,p,U,g,u,v),T+=6;"o24"==x&&(u+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,u,v));}else {if("o11"==x)break;if("o1234"==x||"o1235"==x||"o1236"==x||"o1237"==x)"o1234"==x&&(p=v,U=(c=u+s.shift())+s.shift(),_=g=p+s.shift(),m=g,y=v,u=(b=(S=(F=U+s.shift())+s.shift())+s.shift())+s.shift(),e.U.P.curveTo(o,c,p,U,g,F,_),e.U.P.curveTo(o,S,m,b,y,u,v)),"o1235"==x&&(c=u+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),F=U+s.shift(),_=g+s.shift(),S=F+s.shift(),m=_+s.shift(),b=S+s.shift(),y=m+s.shift(),u=b+s.shift(),v=y+s.shift(),s.shift(),e.U.P.curveTo(o,c,p,U,g,F,_),e.U.P.curveTo(o,S,m,b,y,u,v)),"o1236"==x&&(c=u+s.shift(),p=v+s.shift(),U=c+s.shift(),_=g=p+s.shift(),m=g,b=(S=(F=U+s.shift())+s.shift())+s.shift(),y=m+s.shift(),u=b+s.shift(),e.U.P.curveTo(o,c,p,U,g,F,_),e.U.P.curveTo(o,S,m,b,y,u,v)),"o1237"==x&&(c=u+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),F=U+s.shift(),_=g+s.shift(),S=F+s.shift(),m=_+s.shift(),b=S+s.shift(),y=m+s.shift(),Math.abs(b-u)>Math.abs(y-v)?u=b+s.shift():v=y+s.shift(),e.U.P.curveTo(o,c,p,U,g,F,_),e.U.P.curveTo(o,S,m,b,y,u,v));else if("o14"==x){if(s.length>0&&!h&&(f=s.shift()+a.nominalWidthX,h=!0),4==s.length){var k=s.shift(),G=s.shift(),D=s.shift(),B=s.shift(),L=e.CFF.glyphBySE(a,D),R=e.CFF.glyphBySE(a,B);e.U._drawCFF(a.CharStrings[L],t,a,n,o),t.x=k,t.y=G,e.U._drawCFF(a.CharStrings[R],t,a,n,o);}d&&(e.U.P.closePath(o),d=!1);}else if("o19"==x||"o20"==x){s.length%2!=0&&!h&&(f=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0,l+=i+7>>3;}else if("o21"==x)s.length>2&&!h&&(f=s.shift()+n.nominalWidthX,h=!0),v+=s.pop(),u+=s.pop(),d&&e.U.P.closePath(o),e.U.P.moveTo(o,u,v),d=!0;else if("o22"==x)s.length>1&&!h&&(f=s.shift()+n.nominalWidthX,h=!0),u+=s.pop(),d&&e.U.P.closePath(o),e.U.P.moveTo(o,u,v),d=!0;else if("o25"==x){for(;s.length>6;)u+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,u,v);c=u+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),u=U+s.shift(),v=g+s.shift(),e.U.P.curveTo(o,c,p,U,g,u,v);}else if("o26"==x)for(s.length%2&&(u+=s.shift());s.length>0;)c=u,p=v+s.shift(),u=U=c+s.shift(),v=(g=p+s.shift())+s.shift(),e.U.P.curveTo(o,c,p,U,g,u,v);else if("o27"==x)for(s.length%2&&(v+=s.shift());s.length>0;)p=v,U=(c=u+s.shift())+s.shift(),g=p+s.shift(),u=U+s.shift(),v=g,e.U.P.curveTo(o,c,p,U,g,u,v);else if("o10"==x||"o29"==x){var A="o10"==x?n:a;if(0==s.length)console.debug("error: empty stack");else {var W=s.pop(),M=A.Subrs[W+A.Bias];t.x=u,t.y=v,t.nStems=i,t.haveWidth=h,t.width=f,t.open=d,e.U._drawCFF(M,t,a,n,o),u=t.x,v=t.y,i=t.nStems,h=t.haveWidth,f=t.width,d=t.open;}}else if("o30"==x||"o31"==x){var V=s.length,N=(T=0,"o31"==x);for(T+=V-(P=-3&V);T<P;)N?(p=v,U=(c=u+s.shift())+s.shift(),v=(g=p+s.shift())+s.shift(),P-T==5?(u=U+s.shift(),T++):u=U,N=!1):(c=u,p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),u=U+s.shift(),P-T==5?(v=g+s.shift(),T++):v=g,N=!0),e.U.P.curveTo(o,c,p,U,g,u,v),T+=4;}else {if("o"==(x+"").charAt(0))throw console.debug("Unknown operation: "+x,r),x;s.push(x);}}}t.x=u,t.y=v,t.nStems=i,t.haveWidth=h,t.width=f,t.open=d;};var t=e,a={Typr:t};return r.Typr=t,r.default=a,Object.defineProperty(r,"__esModule",{value:!0}),r}({}).Typr}
-
-/*!
-Custom bundle of woff2otf (https://github.com/arty-name/woff2otf) with fflate
-(https://github.com/101arrowz/fflate) for use in Troika text rendering. 
-Original licenses apply: 
-- fflate: https://github.com/101arrowz/fflate/blob/master/LICENSE (MIT)
-- woff2otf.js: https://github.com/arty-name/woff2otf/blob/master/woff2otf.js (Apache2)
-*/
-function woff2otfFactory(){return function(r){var e=Uint8Array,n=Uint16Array,t=Uint32Array,a=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),f=function(r,e){for(var a=new n(31),i=0;i<31;++i)a[i]=e+=1<<r[i-1];var o=new t(a[30]);for(i=1;i<30;++i)for(var f=a[i];f<a[i+1];++f)o[f]=f-a[i]<<5|i;return [a,o]},u=f(a,2),v=u[0],s=u[1];v[28]=258,s[258]=28;for(var l=f(i,0)[0],c=new n(32768),g=0;g<32768;++g){var h=(43690&g)>>>1|(21845&g)<<1;h=(61680&(h=(52428&h)>>>2|(13107&h)<<2))>>>4|(3855&h)<<4,c[g]=((65280&h)>>>8|(255&h)<<8)>>>1;}var w=function(r,e,t){for(var a=r.length,i=0,o=new n(e);i<a;++i)++o[r[i]-1];var f,u=new n(e);for(i=0;i<e;++i)u[i]=u[i-1]+o[i-1]<<1;if(t){f=new n(1<<e);var v=15-e;for(i=0;i<a;++i)if(r[i])for(var s=i<<4|r[i],l=e-r[i],g=u[r[i]-1]++<<l,h=g|(1<<l)-1;g<=h;++g)f[c[g]>>>v]=s;}else for(f=new n(a),i=0;i<a;++i)r[i]&&(f[i]=c[u[r[i]-1]++]>>>15-r[i]);return f},d=new e(288);for(g=0;g<144;++g)d[g]=8;for(g=144;g<256;++g)d[g]=9;for(g=256;g<280;++g)d[g]=7;for(g=280;g<288;++g)d[g]=8;var m=new e(32);for(g=0;g<32;++g)m[g]=5;var b=w(d,9,1),p=w(m,5,1),y=function(r){for(var e=r[0],n=1;n<r.length;++n)r[n]>e&&(e=r[n]);return e},L=function(r,e,n){var t=e/8|0;return (r[t]|r[t+1]<<8)>>(7&e)&n},U=function(r,e){var n=e/8|0;return (r[n]|r[n+1]<<8|r[n+2]<<16)>>(7&e)},k=["unexpected EOF","invalid block type","invalid length/literal","invalid distance","stream finished","no stream handler",,"no callback","invalid UTF-8 data","extra field too long","date not in range 1980-2099","filename too long","stream finishing","invalid zip data"],T=function(r,e,n){var t=new Error(e||k[r]);if(t.code=r,Error.captureStackTrace&&Error.captureStackTrace(t,T),!n)throw t;return t},O=function(r,f,u){var s=r.length;if(!s||u&&!u.l&&s<5)return f||new e(0);var c=!f||u,g=!u||u.i;u||(u={}),f||(f=new e(3*s));var h,d=function(r){var n=f.length;if(r>n){var t=new e(Math.max(2*n,r));t.set(f),f=t;}},m=u.f||0,k=u.p||0,O=u.b||0,A=u.l,x=u.d,E=u.m,D=u.n,M=8*s;do{if(!A){u.f=m=L(r,k,1);var S=L(r,k+1,3);if(k+=3,!S){var V=r[(I=((h=k)/8|0)+(7&h&&1)+4)-4]|r[I-3]<<8,_=I+V;if(_>s){g&&T(0);break}c&&d(O+V),f.set(r.subarray(I,_),O),u.b=O+=V,u.p=k=8*_;continue}if(1==S)A=b,x=p,E=9,D=5;else if(2==S){var j=L(r,k,31)+257,z=L(r,k+10,15)+4,C=j+L(r,k+5,31)+1;k+=14;for(var F=new e(C),P=new e(19),q=0;q<z;++q)P[o[q]]=L(r,k+3*q,7);k+=3*z;var B=y(P),G=(1<<B)-1,H=w(P,B,1);for(q=0;q<C;){var I,J=H[L(r,k,G)];if(k+=15&J,(I=J>>>4)<16)F[q++]=I;else {var K=0,N=0;for(16==I?(N=3+L(r,k,3),k+=2,K=F[q-1]):17==I?(N=3+L(r,k,7),k+=3):18==I&&(N=11+L(r,k,127),k+=7);N--;)F[q++]=K;}}var Q=F.subarray(0,j),R=F.subarray(j);E=y(Q),D=y(R),A=w(Q,E,1),x=w(R,D,1);}else T(1);if(k>M){g&&T(0);break}}c&&d(O+131072);for(var W=(1<<E)-1,X=(1<<D)-1,Y=k;;Y=k){var Z=(K=A[U(r,k)&W])>>>4;if((k+=15&K)>M){g&&T(0);break}if(K||T(2),Z<256)f[O++]=Z;else {if(256==Z){Y=k,A=null;break}var $=Z-254;if(Z>264){var rr=a[q=Z-257];$=L(r,k,(1<<rr)-1)+v[q],k+=rr;}var er=x[U(r,k)&X],nr=er>>>4;er||T(3),k+=15&er;R=l[nr];if(nr>3){rr=i[nr];R+=U(r,k)&(1<<rr)-1,k+=rr;}if(k>M){g&&T(0);break}c&&d(O+131072);for(var tr=O+$;O<tr;O+=4)f[O]=f[O-R],f[O+1]=f[O+1-R],f[O+2]=f[O+2-R],f[O+3]=f[O+3-R];O=tr;}}u.l=A,u.p=Y,u.b=O,A&&(m=1,u.m=E,u.d=x,u.n=D);}while(!m);return O==f.length?f:function(r,a,i){(null==a||a<0)&&(a=0),(null==i||i>r.length)&&(i=r.length);var o=new(r instanceof n?n:r instanceof t?t:e)(i-a);return o.set(r.subarray(a,i)),o}(f,0,O)},A=new e(0);var x="undefined"!=typeof TextDecoder&&new TextDecoder;try{x.decode(A,{stream:!0}),1;}catch(r){}return r.convert_streams=function(r){var e=new DataView(r),n=0;function t(){var r=e.getUint16(n);return n+=2,r}function a(){var r=e.getUint32(n);return n+=4,r}function i(r){m.setUint16(b,r),b+=2;}function o(r){m.setUint32(b,r),b+=4;}for(var f={signature:a(),flavor:a(),length:a(),numTables:t(),reserved:t(),totalSfntSize:a(),majorVersion:t(),minorVersion:t(),metaOffset:a(),metaLength:a(),metaOrigLength:a(),privOffset:a(),privLength:a()},u=0;Math.pow(2,u)<=f.numTables;)u++;u--;for(var v=16*Math.pow(2,u),s=16*f.numTables-v,l=12,c=[],g=0;g<f.numTables;g++)c.push({tag:a(),offset:a(),compLength:a(),origLength:a(),origChecksum:a()}),l+=16;var h,w=new Uint8Array(12+16*c.length+c.reduce((function(r,e){return r+e.origLength+4}),0)),d=w.buffer,m=new DataView(d),b=0;return o(f.flavor),i(f.numTables),i(v),i(u),i(s),c.forEach((function(r){o(r.tag),o(r.origChecksum),o(l),o(r.origLength),r.outOffset=l,(l+=r.origLength)%4!=0&&(l+=4-l%4);})),c.forEach((function(e){var n,t=r.slice(e.offset,e.offset+e.compLength);if(e.compLength!=e.origLength){var a=new Uint8Array(e.origLength);n=new Uint8Array(t,2),O(n,a);}else a=new Uint8Array(t);w.set(a,e.outOffset);var i=0;(l=e.outOffset+e.origLength)%4!=0&&(i=4-l%4),w.set(new Uint8Array(i).buffer,e.outOffset+e.origLength),h=l+i;})),d.slice(0,h)},Object.defineProperty(r,"__esModule",{value:!0}),r}({}).convert_streams}
-
-/**
- * A factory wrapper parsing a font file using Typr.
- * Also adds support for WOFF files (not WOFF2).
- */
-
-function parserFactory(Typr, woff2otf) {
-  const cmdArgLengths = {
-    M: 2,
-    L: 2,
-    Q: 4,
-    C: 6,
-    Z: 0
-  };
-
-  // {joinType: "skip+step,..."}
-  const joiningTypeRawData = {"C":"18g,ca,368,1kz","D":"17k,6,2,2+4,5+c,2+6,2+1,10+1,9+f,j+11,2+1,a,2,2+1,15+2,3,j+2,6+3,2+8,2,2,2+1,w+a,4+e,3+3,2,3+2,3+5,23+w,2f+4,3,2+9,2,b,2+3,3,1k+9,6+1,3+1,2+2,2+d,30g,p+y,1,1+1g,f+x,2,sd2+1d,jf3+4,f+3,2+4,2+2,b+3,42,2,4+2,2+1,2,3,t+1,9f+w,2,el+2,2+g,d+2,2l,2+1,5,3+1,2+1,2,3,6,16wm+1v","R":"17m+3,2,2,6+3,m,15+2,2+2,h+h,13,3+8,2,2,3+1,2,p+1,x,5+4,5,a,2,2,3,u,c+2,g+1,5,2+1,4+1,5j,6+1,2,b,2+2,f,2+1,1s+2,2,3+1,7,1ez0,2,2+1,4+4,b,4,3,b,42,2+2,4,3,2+1,2,o+3,ae,ep,x,2o+2,3+1,3,5+1,6","L":"x9u,jff,a,fd,jv","T":"4t,gj+33,7o+4,1+1,7c+18,2,2+1,2+1,2,21+a,2,1b+k,h,2u+6,3+5,3+1,2+3,y,2,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,3,7,6+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+d,1,1+1,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,ek,3+1,r+4,1e+4,6+5,2p+c,1+3,1,1+2,1+b,2db+2,3y,2p+v,ff+3,30+1,n9x,1+2,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,5s,6y+2,ea,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+9,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2,2b+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,470+8,at4+4,1o+6,t5,1s+3,2a,f5l+1,2+3,43o+2,a+7,1+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,1,gzau,v+2n,3l+6n"};
-
-  const JT_LEFT = 1, //indicates that a character joins with the subsequent character, but does not join with the preceding character.
-    JT_RIGHT = 2, //indicates that a character joins with the preceding character, but does not join with the subsequent character.
-    JT_DUAL = 4, //indicates that a character joins with the preceding character and joins with the subsequent character.
-    JT_TRANSPARENT = 8, //indicates that the character does not join with adjacent characters and that the character must be skipped over when the shaping engine is evaluating the joining positions in a sequence of characters. When a JT_TRANSPARENT character is encountered in a sequence, the JOINING_TYPE of the preceding character passes through. Diacritical marks are frequently assigned this value.
-    JT_JOIN_CAUSING = 16, //indicates that the character forces the use of joining forms with the preceding and subsequent characters. Kashidas and the Zero Width Joiner (U+200D) are both JOIN_CAUSING characters.
-    JT_NON_JOINING = 32; //indicates that a character does not join with the preceding or with the subsequent character.,
-
-  let joiningTypeMap;
-  function getCharJoiningType(ch) {
-    if (!joiningTypeMap) {
-      const m = {
-        R: JT_RIGHT,
-        L: JT_LEFT,
-        D: JT_DUAL,
-        C: JT_JOIN_CAUSING,
-        U: JT_NON_JOINING,
-        T: JT_TRANSPARENT
-      };
-      joiningTypeMap = new Map();
-      for (let type in joiningTypeRawData) {
-        let lastCode = 0;
-        joiningTypeRawData[type].split(',').forEach(range => {
-          let [skip, step] = range.split('+');
-          skip = parseInt(skip,36);
-          step = step ? parseInt(step, 36) : 0;
-          joiningTypeMap.set(lastCode += skip, m[type]);
-          for (let i = step; i--;) {
-            joiningTypeMap.set(++lastCode, m[type]);
-          }
-        });
-      }
-    }
-    return joiningTypeMap.get(ch) || JT_NON_JOINING
-  }
-
-  const ISOL = 1, INIT = 2, FINA = 3, MEDI = 4;
-  const formsToFeatures = [null, 'isol', 'init', 'fina', 'medi'];
-
-  function detectJoiningForms(str) {
-    // This implements the algorithm described here:
-    // https://github.com/n8willis/opentype-shaping-documents/blob/master/opentype-shaping-arabic-general.md
-    const joiningForms = new Uint8Array(str.length);
-    let prevJoiningType = JT_NON_JOINING;
-    let prevForm = ISOL;
-    let prevIndex = -1;
-    for (let i = 0; i < str.length; i++) {
-      const code = str.codePointAt(i);
-      let joiningType = getCharJoiningType(code) | 0;
-      let form = ISOL;
-      if (joiningType & JT_TRANSPARENT) {
-        continue
-      }
-      if (prevJoiningType & (JT_LEFT | JT_DUAL | JT_JOIN_CAUSING)) {
-        if (joiningType & (JT_RIGHT | JT_DUAL | JT_JOIN_CAUSING)) {
-          form = FINA;
-          // isol->init, fina->medi
-          if (prevForm === ISOL || prevForm === FINA) {
-            joiningForms[prevIndex]++;
-          }
-        }
-        else if (joiningType & (JT_LEFT | JT_NON_JOINING)) {
-          // medi->fina, init->isol
-          if (prevForm === INIT || prevForm === MEDI) {
-            joiningForms[prevIndex]--;
-          }
-        }
-      }
-      else if (prevJoiningType & (JT_RIGHT | JT_NON_JOINING)) {
-        // medi->fina, init->isol
-        if (prevForm === INIT || prevForm === MEDI) {
-          joiningForms[prevIndex]--;
-        }
-      }
-      prevForm = joiningForms[i] = form;
-      prevJoiningType = joiningType;
-      prevIndex = i;
-      if (code > 0xffff) i++;
-    }
-    // console.log(str.split('').map(ch => ch.codePointAt(0).toString(16)))
-    // console.log(str.split('').map(ch => getCharJoiningType(ch.codePointAt(0))))
-    // console.log(Array.from(joiningForms).map(f => formsToFeatures[f] || 'none'))
-    return joiningForms
-  }
-
-  function stringToGlyphs (font, str) {
-    const glyphIds = [];
-    for (let i = 0; i < str.length; i++) {
-      const cc = str.codePointAt(i);
-      if (cc > 0xffff) i++;
-      glyphIds.push(Typr.U.codeToGlyph(font, cc));
-    }
-
-    const gsub = font['GSUB'];
-    if (gsub) {
-      const {lookupList, featureList} = gsub;
-      let joiningForms;
-      const supportedFeatures = /^(rlig|liga|mset|isol|init|fina|medi|half|pres|blws)$/;
-      const usedLookups = [];
-      featureList.forEach(feature => {
-        if (supportedFeatures.test(feature.tag)) {
-          for (let ti = 0; ti < feature.tab.length; ti++) {
-            if (usedLookups[feature.tab[ti]]) continue
-            usedLookups[feature.tab[ti]] = true;
-            const tab = lookupList[feature.tab[ti]];
-            const isJoiningFeature = /^(isol|init|fina|medi)$/.test(feature.tag);
-            if (isJoiningFeature && !joiningForms) { //lazy
-              joiningForms = detectJoiningForms(str);
-            }
-            for (let ci = 0; ci < glyphIds.length; ci++) {
-              if (!joiningForms || !isJoiningFeature || formsToFeatures[joiningForms[ci]] === feature.tag) {
-                Typr.U._applySubs(glyphIds, ci, tab, lookupList);
-              }
-            }
-          }
-        }
-      });
-    }
-
-    return glyphIds
-  }
-
-
-  function wrapFontObj(typrFont) {
-    const glyphMap = Object.create(null);
-
-    const fontObj = {
-      unitsPerEm: typrFont.head.unitsPerEm,
-      ascender: typrFont.hhea.ascender,
-      descender: typrFont.hhea.descender,
-      forEachGlyph(text, fontSize, letterSpacing, callback) {
-        let glyphX = 0;
-        const fontScale = 1 / fontObj.unitsPerEm * fontSize;
-
-        const glyphIndices = stringToGlyphs(typrFont, text);
-        let charIndex = 0;
-        let prevGlyphIndex = -1;
-        glyphIndices.forEach((glyphIndex, i) => {
-          // Typr returns a glyph index per string codepoint, with -1s in place of those that
-          // were omitted due to ligature substitution. So we can track original index in the
-          // string via simple increment, and skip everything else when seeing a -1.
-          if (glyphIndex !== -1) {
-            let glyphObj = glyphMap[glyphIndex];
-            if (!glyphObj) {
-              const {cmds, crds} = Typr.U.glyphToPath(typrFont, glyphIndex);
-
-              // Build path string
-              let path = '';
-              let crdsIdx = 0;
-              for (let i = 0, len = cmds.length; i < len; i++) {
-                const numArgs = cmdArgLengths[cmds[i]];
-                path += cmds[i];
-                for (let j = 1; j <= numArgs; j++) {
-                  path += (j > 1 ? ',' : '') + crds[crdsIdx++];
-                }
-              }
-
-              // Find extents - Glyf gives this in metadata but not CFF, and Typr doesn't
-              // normalize the two, so it's simplest just to iterate ourselves.
-              let xMin, yMin, xMax, yMax;
-              if (crds.length) {
-                xMin = yMin = Infinity;
-                xMax = yMax = -Infinity;
-                for (let i = 0, len = crds.length; i < len; i += 2) {
-                  let x = crds[i];
-                  let y = crds[i + 1];
-                  if (x < xMin) xMin = x;
-                  if (y < yMin) yMin = y;
-                  if (x > xMax) xMax = x;
-                  if (y > yMax) yMax = y;
-                }
-              } else {
-                xMin = xMax = yMin = yMax = 0;
-              }
-
-              glyphObj = glyphMap[glyphIndex] = {
-                index: glyphIndex,
-                advanceWidth: typrFont.hmtx.aWidth[glyphIndex],
-                xMin,
-                yMin,
-                xMax,
-                yMax,
-                path,
-                pathCommandCount: cmds.length,
-                // forEachPathCommand(callback) {
-                //   let argsIndex = 0
-                //   const argsArray = []
-                //   for (let i = 0, len = cmds.length; i < len; i++) {
-                //     const numArgs = cmdArgLengths[cmds[i]]
-                //     argsArray.length = 1 + numArgs
-                //     argsArray[0] = cmds[i]
-                //     for (let j = 1; j <= numArgs; j++) {
-                //       argsArray[j] = crds[argsIndex++]
-                //     }
-                //     callback.apply(null, argsArray)
-                //   }
-                // }
-              };
-            }
-
-            // Kerning
-            if (prevGlyphIndex !== -1) {
-              glyphX += Typr.U.getPairAdjustment(typrFont, prevGlyphIndex, glyphIndex) * fontScale;
-            }
-
-            callback.call(null, glyphObj, glyphX, charIndex);
-
-            if (glyphObj.advanceWidth) {
-              glyphX += glyphObj.advanceWidth * fontScale;
-            }
-            if (letterSpacing) {
-              glyphX += letterSpacing * fontSize;
-            }
-
-            prevGlyphIndex = glyphIndex;
-          }
-          charIndex += (text.codePointAt(charIndex) > 0xffff ? 2 : 1);
-        });
-        return glyphX
-      }
-    };
-
-    return fontObj
-  }
-
-  return function parse(buffer) {
-    // Look to see if we have a WOFF file and convert it if so:
-    const peek = new Uint8Array(buffer, 0, 4);
-    const tag = Typr._bin.readASCII(peek, 0, 4);
-    if (tag === 'wOFF') {
-      buffer = woff2otf(buffer);
-    } else if (tag === 'wOF2') {
-      throw new Error('woff2 fonts not supported')
-    }
-    return wrapFontObj(Typr.parse(buffer)[0])
-  }
-}
-
-
-const workerModule = /*#__PURE__*/defineWorkerModule({
-  name: 'Typr Font Parser',
-  dependencies: [typrFactory, woff2otfFactory, parserFactory],
-  init(typrFactory, woff2otfFactory, parserFactory) {
-    const Typr = typrFactory();
-    const woff2otf = woff2otfFactory();
-    return parserFactory(Typr, woff2otf)
-  }
-});
-
-const CONFIG = {
-  defaultFontURL: 'https://fonts.gstatic.com/s/roboto/v18/KFOmCnqEu92Fr1Mu4mxM.woff', //Roboto Regular
-  sdfGlyphSize: 64,
-  sdfMargin: 1 / 16,
-  sdfExponent: 9,
-  textureWidth: 2048
-};
-const tempColor = /*#__PURE__*/new three_module.Color();
-let hasRequested = false;
-
-function now$1() {
-  return (self.performance || Date).now()
-}
-
-/**
- * Customizes the text builder configuration. This must be called prior to the first font processing
- * request, and applies to all fonts.
- *
- * @param {String} config.defaultFontURL - The URL of the default font to use for text processing
- *                 requests, in case none is specified or the specifiede font fails to load or parse.
- *                 Defaults to "Roboto Regular" from Google Fonts.
- * @param {Number} config.sdfGlyphSize - The default size of each glyph's SDF (signed distance field)
- *                 texture used for rendering. Must be a power-of-two number, and applies to all fonts,
- *                 but note that this can also be overridden per call to `getTextRenderInfo()`.
- *                 Larger sizes can improve the quality of glyph rendering by increasing the sharpness
- *                 of corners and preventing loss of very thin lines, at the expense of memory. Defaults
- *                 to 64 which is generally a good balance of size and quality.
- * @param {Number} config.sdfExponent - The exponent used when encoding the SDF values. A higher exponent
- *                 shifts the encoded 8-bit values to achieve higher precision/accuracy at texels nearer
- *                 the glyph's path, with lower precision further away. Defaults to 9.
- * @param {Number} config.sdfMargin - How much space to reserve in the SDF as margin outside the glyph's
- *                 path, as a percentage of the SDF width. A larger margin increases the quality of
- *                 extruded glyph outlines, but decreases the precision available for the glyph itself.
- *                 Defaults to 1/16th of the glyph size.
- * @param {Number} config.textureWidth - The width of the SDF texture; must be a power of 2. Defaults to
- *                 2048 which is a safe maximum texture dimension according to the stats at
- *                 https://webglstats.com/webgl/parameter/MAX_TEXTURE_SIZE and should allow for a
- *                 reasonably large number of glyphs (default glyph size of 64^2 and safe texture size of
- *                 2048^2, times 4 channels, allows for 4096 glyphs.) This can be increased if you need to
- *                 increase the glyph size and/or have an extraordinary number of glyphs.
- */
-function configureTextBuilder(config) {
-  if (hasRequested) {
-    console.warn('configureTextBuilder called after first font request; will be ignored.');
-  } else {
-    troika_three_text_esm_assign(CONFIG, config);
-  }
-}
-
-/**
- * Repository for all font SDF atlas textures and their glyph mappings. There is a separate atlas for
- * each sdfGlyphSize. Each atlas has a single Texture that holds all glyphs for all fonts.
- *
- *   {
- *     [sdfGlyphSize]: {
- *       glyphCount: number,
- *       sdfGlyphSize: number,
- *       sdfTexture: Texture,
- *       sdfCanvas: HTMLCanvasElement,
- *       contextLost: boolean,
- *       glyphsByFont: Map<fontURL, Map<glyphID, {path, atlasIndex, sdfViewBox}>>
- *     }
- *   }
- */
-const atlases = Object.create(null);
-
-/**
- * @typedef {object} TroikaTextRenderInfo - Format of the result from `getTextRenderInfo`.
- * @property {object} parameters - The normalized input arguments to the render call.
- * @property {Texture} sdfTexture - The SDF atlas texture.
- * @property {number} sdfGlyphSize - The size of each glyph's SDF; see `configureTextBuilder`.
- * @property {number} sdfExponent - The exponent used in encoding the SDF's values; see `configureTextBuilder`.
- * @property {Float32Array} glyphBounds - List of [minX, minY, maxX, maxY] quad bounds for each glyph.
- * @property {Float32Array} glyphAtlasIndices - List holding each glyph's index in the SDF atlas.
- * @property {Uint8Array} [glyphColors] - List holding each glyph's [r, g, b] color, if `colorRanges` was supplied.
- * @property {Float32Array} [caretPositions] - A list of caret positions for all characters in the string; each is
- *           three elements: the starting X, the ending X, and the bottom Y for the caret.
- * @property {number} [caretHeight] - An appropriate height for all selection carets.
- * @property {number} ascender - The font's ascender metric.
- * @property {number} descender - The font's descender metric.
- * @property {number} lineHeight - The final computed lineHeight measurement.
- * @property {number} topBaseline - The y position of the top line's baseline.
- * @property {Array<number>} blockBounds - The total [minX, minY, maxX, maxY] rect of the whole text block;
- *           this can include extra vertical space beyond the visible glyphs due to lineHeight, and is
- *           equivalent to the dimensions of a block-level text element in CSS.
- * @property {Array<number>} visibleBounds - The total [minX, minY, maxX, maxY] rect of the whole text block;
- *           unlike `blockBounds` this is tightly wrapped to the visible glyph paths.
- * @property {Array<number>} totalBounds - DEPRECATED; use blockBounds instead.
- * @property {Array<number>} totalBlockSize - DEPRECATED; use blockBounds instead
- * @property {Array<object>} chunkedBounds - List of bounding rects for each consecutive set of N glyphs,
- *           in the format `{start:N, end:N, rect:[minX, minY, maxX, maxY]}`.
- * @property {object} timings - Timing info for various parts of the rendering logic including SDF
- *           generation, typesetting, etc.
- * @frozen
- */
-
-/**
- * @callback getTextRenderInfo~callback
- * @param {TroikaTextRenderInfo} textRenderInfo
- */
-
-/**
- * Main entry point for requesting the data needed to render a text string with given font parameters.
- * This is an asynchronous call, performing most of the logic in a web worker thread.
- * @param {object} args
- * @param {getTextRenderInfo~callback} callback
- */
-function getTextRenderInfo(args, callback) {
-  hasRequested = true;
-  args = troika_three_text_esm_assign({}, args);
-  const totalStart = now$1();
-
-  // Apply default font here to avoid a 'null' atlas, and convert relative
-  // URLs to absolute so they can be resolved in the worker
-  args.font = toAbsoluteURL(args.font || CONFIG.defaultFontURL);
-
-  // Normalize text to a string
-  args.text = '' + args.text;
-
-  args.sdfGlyphSize = args.sdfGlyphSize || CONFIG.sdfGlyphSize;
-
-  // Normalize colors
-  if (args.colorRanges != null) {
-    let colors = {};
-    for (let key in args.colorRanges) {
-      if (args.colorRanges.hasOwnProperty(key)) {
-        let val = args.colorRanges[key];
-        if (typeof val !== 'number') {
-          val = tempColor.set(val).getHex();
-        }
-        colors[key] = val;
-      }
-    }
-    args.colorRanges = colors;
-  }
-
-  Object.freeze(args);
-
-  // Init the atlas if needed
-  const {textureWidth, sdfExponent} = CONFIG;
-  const {sdfGlyphSize} = args;
-  const glyphsPerRow = (textureWidth / sdfGlyphSize * 4);
-  let atlas = atlases[sdfGlyphSize];
-  if (!atlas) {
-    const canvas = document.createElement('canvas');
-    canvas.width = textureWidth;
-    canvas.height = sdfGlyphSize * 256 / glyphsPerRow; // start tall enough to fit 256 glyphs
-    atlas = atlases[sdfGlyphSize] = {
-      glyphCount: 0,
-      sdfGlyphSize,
-      sdfCanvas: canvas,
-      sdfTexture: new three_module.Texture(
-        canvas,
-        undefined,
-        undefined,
-        undefined,
-        three_module.LinearFilter,
-        three_module.LinearFilter
-      ),
-      contextLost: false,
-      glyphsByFont: new Map()
-    };
-    atlas.sdfTexture.generateMipmaps = false;
-    initContextLossHandling(atlas);
-  }
-
-  const {sdfTexture, sdfCanvas} = atlas;
-  let fontGlyphs = atlas.glyphsByFont.get(args.font);
-  if (!fontGlyphs) {
-    atlas.glyphsByFont.set(args.font, fontGlyphs = new Map());
-  }
-
-  // Issue request to the typesetting engine in the worker
-  typesetInWorker(args).then(result => {
-    const {glyphIds, glyphPositions, fontSize, unitsPerEm, timings} = result;
-    const neededSDFs = [];
-    const glyphBounds = new Float32Array(glyphIds.length * 4);
-    const fontSizeMult = fontSize / unitsPerEm;
-    let boundsIdx = 0;
-    let positionsIdx = 0;
-    const quadsStart = now$1();
-    glyphIds.forEach((glyphId, i) => {
-      let glyphInfo = fontGlyphs.get(glyphId);
-
-      // If this is a glyphId not seen before, add it to the atlas
-      if (!glyphInfo) {
-        const {path, pathBounds} = result.glyphData[glyphId];
-
-        // Margin around path edges in SDF, based on a percentage of the glyph's max dimension.
-        // Note we add an extra 0.5 px over the configured value because the outer 0.5 doesn't contain
-        // useful interpolated values and will be ignored anyway.
-        const fontUnitsMargin = Math.max(pathBounds[2] - pathBounds[0], pathBounds[3] - pathBounds[1])
-          / sdfGlyphSize * (CONFIG.sdfMargin * sdfGlyphSize + 0.5);
-
-        const atlasIndex = atlas.glyphCount++;
-        const sdfViewBox = [
-          pathBounds[0] - fontUnitsMargin,
-          pathBounds[1] - fontUnitsMargin,
-          pathBounds[2] + fontUnitsMargin,
-          pathBounds[3] + fontUnitsMargin,
-        ];
-        fontGlyphs.set(glyphId, (glyphInfo = { path, atlasIndex, sdfViewBox }));
-
-        // Collect those that need SDF generation
-        neededSDFs.push(glyphInfo);
-      }
-
-      // Calculate bounds for renderable quads
-      // TODO can we get this back off the main thread?
-      const {sdfViewBox} = glyphInfo;
-      const posX = glyphPositions[positionsIdx++];
-      const posY = glyphPositions[positionsIdx++];
-      glyphBounds[boundsIdx++] = posX + sdfViewBox[0] * fontSizeMult;
-      glyphBounds[boundsIdx++] = posY + sdfViewBox[1] * fontSizeMult;
-      glyphBounds[boundsIdx++] = posX + sdfViewBox[2] * fontSizeMult;
-      glyphBounds[boundsIdx++] = posY + sdfViewBox[3] * fontSizeMult;
-
-      // Convert glyphId to SDF index for the shader
-      glyphIds[i] = glyphInfo.atlasIndex;
-    });
-    timings.quads = (timings.quads || 0) + (now$1() - quadsStart);
-
-    const sdfStart = now$1();
-    timings.sdf = {};
-
-    // Grow the texture height by power of 2 if needed
-    const currentHeight = sdfCanvas.height;
-    const neededRows = Math.ceil(atlas.glyphCount / glyphsPerRow);
-    const neededHeight = Math.pow(2, Math.ceil(Math.log2(neededRows * sdfGlyphSize)));
-    if (neededHeight > currentHeight) {
-      // Since resizing the canvas clears its render buffer, it needs special handling to copy the old contents over
-      console.info(`Increasing SDF texture size ${currentHeight}->${neededHeight}`);
-      resizeWebGLCanvasWithoutClearing(sdfCanvas, textureWidth, neededHeight);
-      // As of Three r136 textures cannot be resized once they're allocated on the GPU, we must dispose to reallocate it
-      sdfTexture.dispose();
-    }
-
-    DefaultThenable.all(neededSDFs.map(glyphInfo =>
-      generateGlyphSDF(glyphInfo, atlas, args.gpuAccelerateSDF).then(({timing}) => {
-        timings.sdf[glyphInfo.atlasIndex] = timing;
-      })
-    )).then(() => {
-      if (neededSDFs.length && !atlas.contextLost) {
-        safariPre15Workaround(atlas);
-        sdfTexture.needsUpdate = true;
-      }
-      timings.sdfTotal = now$1() - sdfStart;
-      timings.total = now$1() - totalStart;
-      // console.log(`SDF - ${timings.sdfTotal}, Total - ${timings.total - timings.fontLoad}`)
-
-      // Invoke callback with the text layout arrays and updated texture
-      callback(Object.freeze({
-        parameters: args,
-        sdfTexture,
-        sdfGlyphSize,
-        sdfExponent,
-        glyphBounds,
-        glyphAtlasIndices: glyphIds,
-        glyphColors: result.glyphColors,
-        caretPositions: result.caretPositions,
-        caretHeight: result.caretHeight,
-        chunkedBounds: result.chunkedBounds,
-        ascender: result.ascender,
-        descender: result.descender,
-        lineHeight: result.lineHeight,
-        topBaseline: result.topBaseline,
-        blockBounds: result.blockBounds,
-        visibleBounds: result.visibleBounds,
-        timings: result.timings,
-        get totalBounds() {
-          console.log('totalBounds deprecated, use blockBounds instead');
-          return result.blockBounds
-        },
-        get totalBlockSize() {
-          console.log('totalBlockSize deprecated, use blockBounds instead');
-          const [x0, y0, x1, y1] = result.blockBounds;
-          return [x1 - x0, y1 - y0]
-        }
-      }));
-    });
-  });
-
-  // While the typesetting request is being handled, go ahead and make sure the atlas canvas context is
-  // "warmed up"; the first request will be the longest due to shader program compilation so this gets
-  // a head start on that process before SDFs actually start getting processed.
-  DefaultThenable.all([]).then(() => {
-    if (!atlas.contextLost) {
-      warmUpSDFCanvas(sdfCanvas);
-    }
-  });
-}
-
-function generateGlyphSDF({path, atlasIndex, sdfViewBox}, {sdfGlyphSize, sdfCanvas, contextLost}, useGPU) {
-  if (contextLost) {
-    // If the context is lost there's nothing we can do, just quit silently and let it
-    // get regenerated when the context is restored
-    return Promise.resolve({timing: -1})
-  }
-  const {textureWidth, sdfExponent} = CONFIG;
-  const maxDist = Math.max(sdfViewBox[2] - sdfViewBox[0], sdfViewBox[3] - sdfViewBox[1]);
-  const squareIndex = Math.floor(atlasIndex / 4);
-  const x = squareIndex % (textureWidth / sdfGlyphSize) * sdfGlyphSize;
-  const y = Math.floor(squareIndex / (textureWidth / sdfGlyphSize)) * sdfGlyphSize;
-  const channel = atlasIndex % 4;
-  return generateSDF(sdfGlyphSize, sdfGlyphSize, path, sdfViewBox, maxDist, sdfExponent, sdfCanvas, x, y, channel, useGPU)
-}
-
-function initContextLossHandling(atlas) {
-  const canvas = atlas.sdfCanvas;
-
-  /*
-  // Begin context loss simulation
-  if (!window.WebGLDebugUtils) {
-    let script = document.getElementById('WebGLDebugUtilsScript')
-    if (!script) {
-      script = document.createElement('script')
-      script.id = 'WebGLDebugUtils'
-      document.head.appendChild(script)
-      script.src = 'https://cdn.jsdelivr.net/gh/KhronosGroup/WebGLDeveloperTools@b42e702/src/debug/webgl-debug.js'
-    }
-    script.addEventListener('load', () => {
-      initContextLossHandling(atlas)
-    })
-    return
-  }
-  window.WebGLDebugUtils.makeLostContextSimulatingCanvas(canvas)
-  canvas.loseContextInNCalls(500)
-  canvas.addEventListener('webglcontextrestored', (event) => {
-    canvas.loseContextInNCalls(5000)
-  })
-  // End context loss simulation
-  */
-
-  canvas.addEventListener('webglcontextlost', (event) => {
-    console.log('Context Lost', event);
-    event.preventDefault();
-    atlas.contextLost = true;
-  });
-  canvas.addEventListener('webglcontextrestored', (event) => {
-    console.log('Context Restored', event);
-    atlas.contextLost = false;
-    // Regenerate all glyphs into the restored canvas:
-    const promises = [];
-    atlas.glyphsByFont.forEach(glyphMap => {
-      glyphMap.forEach(glyph => {
-        promises.push(generateGlyphSDF(glyph, atlas, true));
-      });
-    });
-    DefaultThenable.all(promises).then(() => {
-      safariPre15Workaround(atlas);
-      atlas.sdfTexture.needsUpdate = true;
-    });
-  });
-}
-
-/**
- * Preload a given font and optionally pre-generate glyph SDFs for one or more character sequences.
- * This can be useful to avoid long pauses when first showing text in a scene, by preloading the
- * needed fonts and glyphs up front along with other assets.
- *
- * @param {object} options
- * @param {string} options.font - URL of the font file to preload. If not given, the default font will
- *        be loaded.
- * @param {string|string[]} options.characters - One or more character sequences for which to pre-
- *        generate glyph SDFs. Note that this will honor ligature substitution, so you may need
- *        to specify ligature sequences in addition to their individual characters to get all
- *        possible glyphs, e.g. `["t", "h", "th"]` to get the "t" and "h" glyphs plus the "th" ligature.
- * @param {number} options.sdfGlyphSize - The size at which to prerender the SDF textures for the
- *        specified `characters`.
- * @param {function} callback - A function that will be called when the preloading is complete.
- */
-function preloadFont({font, characters, sdfGlyphSize}, callback) {
-  let text = Array.isArray(characters) ? characters.join('\n') : '' + characters;
-  getTextRenderInfo({ font, sdfGlyphSize, text }, callback);
-}
-
-
-// Local assign impl so we don't have to import troika-core
-function troika_three_text_esm_assign(toObj, fromObj) {
-  for (let key in fromObj) {
-    if (fromObj.hasOwnProperty(key)) {
-      toObj[key] = fromObj[key];
-    }
-  }
-  return toObj
-}
-
-// Utility for making URLs absolute
-let linkEl;
-function toAbsoluteURL(path) {
-  if (!linkEl) {
-    linkEl = typeof document === 'undefined' ? {} : document.createElement('a');
-  }
-  linkEl.href = path;
-  return linkEl.href
-}
-
-/**
- * Safari < v15 seems unable to use the SDF webgl canvas as a texture. This applies a workaround
- * where it reads the pixels out of that canvas and uploads them as a data texture instead, at
- * a slight performance cost.
- */
-function safariPre15Workaround(atlas) {
-  // Use createImageBitmap support as a proxy for Safari<15, all other mainstream browsers
-  // have supported it for a long while so any false positives should be minimal.
-  if (typeof createImageBitmap !== 'function') {
-    console.info('Safari<15: applying SDF canvas workaround');
-    const {sdfCanvas, sdfTexture} = atlas;
-    const {width, height} = sdfCanvas;
-    const gl = atlas.sdfCanvas.getContext('webgl');
-    let pixels = sdfTexture.image.data;
-    if (!pixels || pixels.length !== width * height * 4) {
-      pixels = new Uint8Array(width * height * 4);
-      sdfTexture.image = {width, height, data: pixels};
-      sdfTexture.flipY = false;
-      sdfTexture.isDataTexture = true;
-    }
-    gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);
-  }
-}
-
-
-const typesetterWorkerModule = /*#__PURE__*/defineWorkerModule({
-  name: 'Typesetter',
-  dependencies: [
-    CONFIG,
-    workerModule,
-    createTypesetter,
-    bidi
-  ],
-  init(config, fontParser, createTypesetter, bidiFactory) {
-    const {defaultFontURL} = config;
-    return createTypesetter(fontParser, bidiFactory(), { defaultFontURL })
-  }
-});
-
-const typesetInWorker = /*#__PURE__*/defineWorkerModule({
-  name: 'Typesetter',
-  dependencies: [
-    typesetterWorkerModule,
-    ThenableWorkerModule
-  ],
-  init(typesetter, Thenable) {
-    return function(args) {
-      const thenable = new Thenable();
-      typesetter.typeset(args, thenable.resolve);
-      return thenable
-    }
-  },
-  getTransferables(result) {
-    // Mark array buffers as transferable to avoid cloning during postMessage
-    const transferables = [
-      result.glyphPositions.buffer,
-      result.glyphIds.buffer
-    ];
-    if (result.caretPositions) {
-      transferables.push(result.caretPositions.buffer);
-    }
-    if (result.glyphColors) {
-      transferables.push(result.glyphColors.buffer);
-    }
-    return transferables
-  }
-});
-
-function dumpSDFTextures() {
-  Object.keys(atlases).forEach(size => {
-    const canvas = atlases[size].sdfCanvas;
-    const {width, height} = canvas;
-    console.log("%c.", `
-      background: url(${canvas.toDataURL()});
-      background-size: ${width}px ${height}px;
-      color: transparent;
-      font-size: 0;
-      line-height: ${height}px;
-      padding-left: ${width}px;
-    `);
-  });
-}
-
-const GlyphsGeometry = /*#__PURE__*/(() => {
-
-  const templateGeometries = {};
-  function getTemplateGeometry(detail) {
-    let geom = templateGeometries[detail];
-    if (!geom) {
-      // Geometry is two planes back-to-back, which will always be rendered FrontSide only but
-      // appear as DoubleSide by default. FrontSide/BackSide are emulated using drawRange.
-      // We do it this way to avoid the performance hit of two draw calls for DoubleSide materials
-      // introduced by Three.js in r130 - see https://github.com/mrdoob/three.js/pull/21967
-      const front = new three_module.PlaneBufferGeometry(1, 1, detail, detail);
-      const back = front.clone();
-      const frontAttrs = front.attributes;
-      const backAttrs = back.attributes;
-      const combined = new three_module.BufferGeometry();
-      const vertCount = frontAttrs.uv.count;
-      for (let i = 0; i < vertCount; i++) {
-        backAttrs.position.array[i * 3] *= -1; // flip position x
-        backAttrs.normal.array[i * 3 + 2] *= -1; // flip normal z
-      }
-['position', 'normal', 'uv'].forEach(name => {
-        combined.setAttribute(name, new three_module.Float32BufferAttribute(
-          [...frontAttrs[name].array, ...backAttrs[name].array],
-          frontAttrs[name].itemSize)
-        );
-      });
-      combined.setIndex([...front.index.array, ...back.index.array.map(n => n + vertCount)]);
-      combined.translate(0.5, 0.5, 0);
-      geom = templateGeometries[detail] = combined;
-    }
-    return geom
-  }
-
-  const glyphBoundsAttrName = 'aTroikaGlyphBounds';
-  const glyphIndexAttrName = 'aTroikaGlyphIndex';
-  const glyphColorAttrName = 'aTroikaGlyphColor';
-
-  /**
-  @class GlyphsGeometry
-
-  A specialized Geometry for rendering a set of text glyphs. Uses InstancedBufferGeometry to
-  render the glyphs using GPU instancing of a single quad, rather than constructing a whole
-  geometry with vertices, for much smaller attribute arraybuffers according to this math:
-
-    Where N = number of glyphs...
-
-    Instanced:
-    - position: 4 * 3
-    - index: 2 * 3
-    - normal: 4 * 3
-    - uv: 4 * 2
-    - glyph x/y bounds: N * 4
-    - glyph indices: N * 1
-    = 5N + 38
-
-    Non-instanced:
-    - position: N * 4 * 3
-    - index: N * 2 * 3
-    - normal: N * 4 * 3
-    - uv: N * 4 * 2
-    - glyph indices: N * 1
-    = 39N
-
-  A downside of this is the rare-but-possible lack of the instanced arrays extension,
-  which we could potentially work around with a fallback non-instanced implementation.
-
-  */
-  class GlyphsGeometry extends three_module.InstancedBufferGeometry {
-    constructor() {
-      super();
-
-      this.detail = 1;
-      this.curveRadius = 0;
-
-      // Define groups for rendering text outline as a separate pass; these will only
-      // be used when the `material` getter returns an array, i.e. outlineWidth > 0.
-      this.groups = [
-        {start: 0, count: Infinity, materialIndex: 0},
-        {start: 0, count: Infinity, materialIndex: 1}
-      ];
-
-      // Preallocate empty bounding objects
-      this.boundingSphere = new three_module.Sphere();
-      this.boundingBox = new three_module.Box3();
-    }
-
-    computeBoundingSphere () {
-      // No-op; we'll sync the boundingSphere proactively when needed.
-    }
-
-    computeBoundingBox() {
-      // No-op; we'll sync the boundingBox proactively when needed.
-    }
-
-    // Since our base geometry contains triangles for both front and back sides, we can emulate
-    // the "side" by restricting the draw range.
-    setSide(side) {
-      const verts = this.getIndex().count;
-      this.setDrawRange(side === three_module.BackSide ? verts / 2 : 0, side === three_module.DoubleSide ? verts : verts / 2);
-    }
-
-    set detail(detail) {
-      if (detail !== this._detail) {
-        this._detail = detail;
-        if (typeof detail !== 'number' || detail < 1) {
-          detail = 1;
-        }
-        let tpl = getTemplateGeometry(detail)
-        ;['position', 'normal', 'uv'].forEach(attr => {
-          this.attributes[attr] = tpl.attributes[attr].clone();
-        });
-        this.setIndex(tpl.getIndex().clone());
-      }
-    }
-    get detail() {
-      return this._detail
-    }
-
-    set curveRadius(r) {
-      if (r !== this._curveRadius) {
-        this._curveRadius = r;
-        this._updateBounds();
-      }
-    }
-    get curveRadius() {
-      return this._curveRadius
-    }
-
-    /**
-     * Update the geometry for a new set of glyphs.
-     * @param {Float32Array} glyphBounds - An array holding the planar bounds for all glyphs
-     *        to be rendered, 4 entries for each glyph: x1,x2,y1,y1
-     * @param {Float32Array} glyphAtlasIndices - An array holding the index of each glyph within
-     *        the SDF atlas texture.
-     * @param {Array} blockBounds - An array holding the [minX, minY, maxX, maxY] across all glyphs
-     * @param {Array} [chunkedBounds] - An array of objects describing bounds for each chunk of N
-     *        consecutive glyphs: `{start:N, end:N, rect:[minX, minY, maxX, maxY]}`. This can be
-     *        used with `applyClipRect` to choose an optimized `instanceCount`.
-     * @param {Uint8Array} [glyphColors] - An array holding r,g,b values for each glyph.
-     */
-    updateGlyphs(glyphBounds, glyphAtlasIndices, blockBounds, chunkedBounds, glyphColors) {
-      // Update the instance attributes
-      updateBufferAttr(this, glyphBoundsAttrName, glyphBounds, 4);
-      updateBufferAttr(this, glyphIndexAttrName, glyphAtlasIndices, 1);
-      updateBufferAttr(this, glyphColorAttrName, glyphColors, 3);
-      this._blockBounds = blockBounds;
-      this._chunkedBounds = chunkedBounds;
-      setInstanceCount(this, glyphAtlasIndices.length);
-      this._updateBounds();
-    }
-
-    _updateBounds() {
-      const bounds = this._blockBounds;
-      if (bounds) {
-        const { curveRadius, boundingBox: bbox } = this;
-        if (curveRadius) {
-          const { PI, floor, min, max, sin, cos } = Math;
-          const halfPi = PI / 2;
-          const twoPi = PI * 2;
-          const absR = Math.abs(curveRadius);
-          const leftAngle = bounds[0] / absR;
-          const rightAngle = bounds[2] / absR;
-          const minX = floor((leftAngle + halfPi) / twoPi) !== floor((rightAngle + halfPi) / twoPi)
-            ? -absR : min(sin(leftAngle) * absR, sin(rightAngle) * absR);
-          const maxX = floor((leftAngle - halfPi) / twoPi) !== floor((rightAngle - halfPi) / twoPi)
-            ? absR : max(sin(leftAngle) * absR, sin(rightAngle) * absR);
-          const maxZ = floor((leftAngle + PI) / twoPi) !== floor((rightAngle + PI) / twoPi)
-            ? absR * 2 : max(absR - cos(leftAngle) * absR, absR - cos(rightAngle) * absR);
-          bbox.min.set(minX, bounds[1], curveRadius < 0 ? -maxZ : 0);
-          bbox.max.set(maxX, bounds[3], curveRadius < 0 ? 0 : maxZ);
-        } else {
-          bbox.min.set(bounds[0], bounds[1], 0);
-          bbox.max.set(bounds[2], bounds[3], 0);
-        }
-        bbox.getBoundingSphere(this.boundingSphere);
-      }
-    }
-
-    /**
-     * Given a clipping rect, and the chunkedBounds from the last updateGlyphs call, choose the lowest
-     * `instanceCount` that will show all glyphs within the clipped view. This is an optimization
-     * for long blocks of text that are clipped, to skip vertex shader evaluation for glyphs that would
-     * be clipped anyway.
-     *
-     * Note that since `drawElementsInstanced[ANGLE]` only accepts an instance count and not a starting
-     * offset, this optimization becomes less effective as the clipRect moves closer to the end of the
-     * text block. We could fix that by switching from instancing to a full geometry with a drawRange,
-     * but at the expense of much larger attribute buffers (see classdoc above.)
-     *
-     * @param {Vector4} clipRect
-     */
-    applyClipRect(clipRect) {
-      let count = this.getAttribute(glyphIndexAttrName).count;
-      let chunks = this._chunkedBounds;
-      if (chunks) {
-        for (let i = chunks.length; i--;) {
-          count = chunks[i].end;
-          let rect = chunks[i].rect;
-          // note: both rects are l-b-r-t
-          if (rect[1] < clipRect.w && rect[3] > clipRect.y && rect[0] < clipRect.z && rect[2] > clipRect.x) {
-            break
-          }
-        }
-      }
-      setInstanceCount(this, count);
-    }
-  }
-
-  // Compat for pre r109:
-  if (!GlyphsGeometry.prototype.setAttribute) {
-    GlyphsGeometry.prototype.setAttribute = function(name, attribute) {
-      this.attributes[ name ] = attribute;
-      return this
-    };
-  }
-
-
-  function updateBufferAttr(geom, attrName, newArray, itemSize) {
-    const attr = geom.getAttribute(attrName);
-    if (newArray) {
-      // If length isn't changing, just update the attribute's array data
-      if (attr && attr.array.length === newArray.length) {
-        attr.array.set(newArray);
-        attr.needsUpdate = true;
-      } else {
-        geom.setAttribute(attrName, new three_module.InstancedBufferAttribute(newArray, itemSize));
-        // If the new attribute has a different size, we also have to (as of r117) manually clear the
-        // internal cached max instance count. See https://github.com/mrdoob/three.js/issues/19706
-        // It's unclear if this is a threejs bug or a truly unsupported scenario; discussion in
-        // that ticket is ambiguous as to whether replacing a BufferAttribute with one of a
-        // different size is supported, but https://github.com/mrdoob/three.js/pull/17418 strongly
-        // implies it should be supported. It's possible we need to
-        delete geom._maxInstanceCount; //for r117+, could be fragile
-        geom.dispose(); //for r118+, more robust feeling, but more heavy-handed than I'd like
-      }
-    } else if (attr) {
-      geom.deleteAttribute(attrName);
-    }
-  }
-
-  // Handle maxInstancedCount -> instanceCount rename that happened in three r117
-  function setInstanceCount(geom, count) {
-    geom[geom.hasOwnProperty('instanceCount') ? 'instanceCount' : 'maxInstancedCount'] = count;
-  }
-
-  return GlyphsGeometry
-})();
-
-// language=GLSL
-const VERTEX_DEFS = `
-uniform vec2 uTroikaSDFTextureSize;
-uniform float uTroikaSDFGlyphSize;
-uniform vec4 uTroikaTotalBounds;
-uniform vec4 uTroikaClipRect;
-uniform mat3 uTroikaOrient;
-uniform bool uTroikaUseGlyphColors;
-uniform float uTroikaDistanceOffset;
-uniform float uTroikaBlurRadius;
-uniform vec2 uTroikaPositionOffset;
-uniform float uTroikaCurveRadius;
-attribute vec4 aTroikaGlyphBounds;
-attribute float aTroikaGlyphIndex;
-attribute vec3 aTroikaGlyphColor;
-varying vec2 vTroikaGlyphUV;
-varying vec4 vTroikaTextureUVBounds;
-varying float vTroikaTextureChannel;
-varying vec3 vTroikaGlyphColor;
-varying vec2 vTroikaGlyphDimensions;
-`;
-
-// language=GLSL prefix="void main() {" suffix="}"
-const VERTEX_TRANSFORM = `
-vec4 bounds = aTroikaGlyphBounds;
-bounds.xz += uTroikaPositionOffset.x;
-bounds.yw -= uTroikaPositionOffset.y;
-
-vec4 outlineBounds = vec4(
-  bounds.xy - uTroikaDistanceOffset - uTroikaBlurRadius,
-  bounds.zw + uTroikaDistanceOffset + uTroikaBlurRadius
-);
-vec4 clippedBounds = vec4(
-  clamp(outlineBounds.xy, uTroikaClipRect.xy, uTroikaClipRect.zw),
-  clamp(outlineBounds.zw, uTroikaClipRect.xy, uTroikaClipRect.zw)
-);
-
-vec2 clippedXY = (mix(clippedBounds.xy, clippedBounds.zw, position.xy) - bounds.xy) / (bounds.zw - bounds.xy);
-
-position.xy = mix(bounds.xy, bounds.zw, clippedXY);
-
-uv = (position.xy - uTroikaTotalBounds.xy) / (uTroikaTotalBounds.zw - uTroikaTotalBounds.xy);
-
-float rad = uTroikaCurveRadius;
-if (rad != 0.0) {
-  float angle = position.x / rad;
-  position.xz = vec2(sin(angle) * rad, rad - cos(angle) * rad);
-  normal.xz = vec2(sin(angle), cos(angle));
-}
-  
-position = uTroikaOrient * position;
-normal = uTroikaOrient * normal;
-
-vTroikaGlyphUV = clippedXY.xy;
-vTroikaGlyphDimensions = vec2(bounds[2] - bounds[0], bounds[3] - bounds[1]);
-
-${''/* NOTE: it seems important to calculate the glyph's bounding texture UVs here in the
-  vertex shader, rather than in the fragment shader, as the latter gives strange artifacts
-  on some glyphs (those in the leftmost texture column) on some systems. The exact reason
-  isn't understood but doing this here, then mix()-ing in the fragment shader, seems to work. */}
-float txCols = uTroikaSDFTextureSize.x / uTroikaSDFGlyphSize;
-vec2 txUvPerSquare = uTroikaSDFGlyphSize / uTroikaSDFTextureSize;
-vec2 txStartUV = txUvPerSquare * vec2(
-  mod(floor(aTroikaGlyphIndex / 4.0), txCols),
-  floor(floor(aTroikaGlyphIndex / 4.0) / txCols)
-);
-vTroikaTextureUVBounds = vec4(txStartUV, vec2(txStartUV) + txUvPerSquare);
-vTroikaTextureChannel = mod(aTroikaGlyphIndex, 4.0);
-`;
-
-// language=GLSL
-const FRAGMENT_DEFS = `
-uniform sampler2D uTroikaSDFTexture;
-uniform vec2 uTroikaSDFTextureSize;
-uniform float uTroikaSDFGlyphSize;
-uniform float uTroikaSDFExponent;
-uniform float uTroikaDistanceOffset;
-uniform float uTroikaFillOpacity;
-uniform float uTroikaOutlineOpacity;
-uniform float uTroikaBlurRadius;
-uniform vec3 uTroikaStrokeColor;
-uniform float uTroikaStrokeWidth;
-uniform float uTroikaStrokeOpacity;
-uniform bool uTroikaSDFDebug;
-varying vec2 vTroikaGlyphUV;
-varying vec4 vTroikaTextureUVBounds;
-varying float vTroikaTextureChannel;
-varying vec2 vTroikaGlyphDimensions;
-
-float troikaSdfValueToSignedDistance(float alpha) {
-  // Inverse of exponential encoding in webgl-sdf-generator
-  ${''/* TODO - there's some slight inaccuracy here when dealing with interpolated alpha values; those
-    are linearly interpolated where the encoding is exponential. Look into improving this by rounding
-    to nearest 2 whole texels, decoding those exponential values, and linearly interpolating the result.
-  */}
-  float maxDimension = max(vTroikaGlyphDimensions.x, vTroikaGlyphDimensions.y);
-  float absDist = (1.0 - pow(2.0 * (alpha > 0.5 ? 1.0 - alpha : alpha), 1.0 / uTroikaSDFExponent)) * maxDimension;
-  float signedDist = absDist * (alpha > 0.5 ? -1.0 : 1.0);
-  return signedDist;
-}
-
-float troikaGlyphUvToSdfValue(vec2 glyphUV) {
-  vec2 textureUV = mix(vTroikaTextureUVBounds.xy, vTroikaTextureUVBounds.zw, glyphUV);
-  vec4 rgba = texture2D(uTroikaSDFTexture, textureUV);
-  float ch = floor(vTroikaTextureChannel + 0.5); //NOTE: can't use round() in WebGL1
-  return ch == 0.0 ? rgba.r : ch == 1.0 ? rgba.g : ch == 2.0 ? rgba.b : rgba.a;
-}
-
-float troikaGlyphUvToDistance(vec2 uv) {
-  return troikaSdfValueToSignedDistance(troikaGlyphUvToSdfValue(uv));
-}
-
-float troikaGetAADist() {
-  ${''/*
-    When the standard derivatives extension is available, we choose an antialiasing alpha threshold based
-    on the potential change in the SDF's alpha from this fragment to its neighbor. This strategy maximizes 
-    readability and edge crispness at all sizes and screen resolutions.
-  */}
-  #if defined(GL_OES_standard_derivatives) || __VERSION__ >= 300
-  return length(fwidth(vTroikaGlyphUV * vTroikaGlyphDimensions)) * 0.5;
-  #else
-  return vTroikaGlyphDimensions.x / 64.0;
-  #endif
-}
-
-float troikaGetFragDistValue() {
-  vec2 clampedGlyphUV = clamp(vTroikaGlyphUV, 0.5 / uTroikaSDFGlyphSize, 1.0 - 0.5 / uTroikaSDFGlyphSize);
-  float distance = troikaGlyphUvToDistance(clampedGlyphUV);
- 
-  // Extrapolate distance when outside bounds:
-  distance += clampedGlyphUV == vTroikaGlyphUV ? 0.0 : 
-    length((vTroikaGlyphUV - clampedGlyphUV) * vTroikaGlyphDimensions);
-
-  ${''/* 
-  // TODO more refined extrapolated distance by adjusting for angle of gradient at edge...
-  // This has potential but currently gives very jagged extensions, maybe due to precision issues?
-  float uvStep = 1.0 / uTroikaSDFGlyphSize;
-  vec2 neighbor1UV = clampedGlyphUV + (
-    vTroikaGlyphUV.x != clampedGlyphUV.x ? vec2(0.0, uvStep * sign(0.5 - vTroikaGlyphUV.y)) :
-    vTroikaGlyphUV.y != clampedGlyphUV.y ? vec2(uvStep * sign(0.5 - vTroikaGlyphUV.x), 0.0) :
-    vec2(0.0)
-  );
-  vec2 neighbor2UV = clampedGlyphUV + (
-    vTroikaGlyphUV.x != clampedGlyphUV.x ? vec2(0.0, uvStep * -sign(0.5 - vTroikaGlyphUV.y)) :
-    vTroikaGlyphUV.y != clampedGlyphUV.y ? vec2(uvStep * -sign(0.5 - vTroikaGlyphUV.x), 0.0) :
-    vec2(0.0)
-  );
-  float neighbor1Distance = troikaGlyphUvToDistance(neighbor1UV);
-  float neighbor2Distance = troikaGlyphUvToDistance(neighbor2UV);
-  float distToUnclamped = length((vTroikaGlyphUV - clampedGlyphUV) * vTroikaGlyphDimensions);
-  float distToNeighbor = length((clampedGlyphUV - neighbor1UV) * vTroikaGlyphDimensions);
-  float gradientAngle1 = min(asin(abs(neighbor1Distance - distance) / distToNeighbor), PI / 2.0);
-  float gradientAngle2 = min(asin(abs(neighbor2Distance - distance) / distToNeighbor), PI / 2.0);
-  distance += (cos(gradientAngle1) + cos(gradientAngle2)) / 2.0 * distToUnclamped;
-  */}
-
-  return distance;
-}
-
-float troikaGetEdgeAlpha(float distance, float distanceOffset, float aaDist) {
-  #if defined(IS_DEPTH_MATERIAL) || defined(IS_DISTANCE_MATERIAL)
-  float alpha = step(-distanceOffset, -distance);
-  #else
-
-  float alpha = smoothstep(
-    distanceOffset + aaDist,
-    distanceOffset - aaDist,
-    distance
-  );
-  #endif
-
-  return alpha;
-}
-`;
-
-// language=GLSL prefix="void main() {" suffix="}"
-const FRAGMENT_TRANSFORM = `
-float aaDist = troikaGetAADist();
-float fragDistance = troikaGetFragDistValue();
-float edgeAlpha = uTroikaSDFDebug ?
-  troikaGlyphUvToSdfValue(vTroikaGlyphUV) :
-  troikaGetEdgeAlpha(fragDistance, uTroikaDistanceOffset, max(aaDist, uTroikaBlurRadius));
-
-#if !defined(IS_DEPTH_MATERIAL) && !defined(IS_DISTANCE_MATERIAL)
-vec4 fillRGBA = gl_FragColor;
-fillRGBA.a *= uTroikaFillOpacity;
-vec4 strokeRGBA = uTroikaStrokeWidth == 0.0 ? fillRGBA : vec4(uTroikaStrokeColor, uTroikaStrokeOpacity);
-if (fillRGBA.a == 0.0) fillRGBA.rgb = strokeRGBA.rgb;
-gl_FragColor = mix(fillRGBA, strokeRGBA, smoothstep(
-  -uTroikaStrokeWidth - aaDist,
-  -uTroikaStrokeWidth + aaDist,
-  fragDistance
-));
-gl_FragColor.a *= edgeAlpha;
-#endif
-
-if (edgeAlpha == 0.0) {
-  discard;
-}
-`;
-
-
-/**
- * Create a material for rendering text, derived from a baseMaterial
- */
-function createTextDerivedMaterial(baseMaterial) {
-  const textMaterial = createDerivedMaterial(baseMaterial, {
-    chained: true,
-    extensions: {
-      derivatives: true
-    },
-    uniforms: {
-      uTroikaSDFTexture: {value: null},
-      uTroikaSDFTextureSize: {value: new three_module.Vector2()},
-      uTroikaSDFGlyphSize: {value: 0},
-      uTroikaSDFExponent: {value: 0},
-      uTroikaTotalBounds: {value: new three_module.Vector4(0,0,0,0)},
-      uTroikaClipRect: {value: new three_module.Vector4(0,0,0,0)},
-      uTroikaDistanceOffset: {value: 0},
-      uTroikaOutlineOpacity: {value: 0},
-      uTroikaFillOpacity: {value: 1},
-      uTroikaPositionOffset: {value: new three_module.Vector2()},
-      uTroikaCurveRadius: {value: 0},
-      uTroikaBlurRadius: {value: 0},
-      uTroikaStrokeWidth: {value: 0},
-      uTroikaStrokeColor: {value: new three_module.Color()},
-      uTroikaStrokeOpacity: {value: 1},
-      uTroikaOrient: {value: new three_module.Matrix3()},
-      uTroikaUseGlyphColors: {value: true},
-      uTroikaSDFDebug: {value: false}
-    },
-    vertexDefs: VERTEX_DEFS,
-    vertexTransform: VERTEX_TRANSFORM,
-    fragmentDefs: FRAGMENT_DEFS,
-    fragmentColorTransform: FRAGMENT_TRANSFORM,
-    customRewriter({vertexShader, fragmentShader}) {
-      let uDiffuseRE = /\buniform\s+vec3\s+diffuse\b/;
-      if (uDiffuseRE.test(fragmentShader)) {
-        // Replace all instances of `diffuse` with our varying
-        fragmentShader = fragmentShader
-          .replace(uDiffuseRE, 'varying vec3 vTroikaGlyphColor')
-          .replace(/\bdiffuse\b/g, 'vTroikaGlyphColor');
-        // Make sure the vertex shader declares the uniform so we can grab it as a fallback
-        if (!uDiffuseRE.test(vertexShader)) {
-          vertexShader = vertexShader.replace(
-            voidMainRegExp,
-            'uniform vec3 diffuse;\n$&\nvTroikaGlyphColor = uTroikaUseGlyphColors ? aTroikaGlyphColor / 255.0 : diffuse;\n'
-          );
-        }
-      }
-      return { vertexShader, fragmentShader }
-    }
-  });
-
-  // Force transparency - TODO is this reasonable?
-  textMaterial.transparent = true;
-
-  Object.defineProperties(textMaterial, {
-    isTroikaTextMaterial: {value: true},
-
-    // WebGLShadowMap reverses the side of the shadow material by default, which fails
-    // for planes, so here we force the `shadowSide` to always match the main side.
-    shadowSide: {
-      get() {
-        return this.side
-      },
-      set() {
-        //no-op
-      }
-    }
-  });
-
-  return textMaterial
-}
-
-const Text = /*#__PURE__*/(() => {
-
-  const defaultMaterial = new three_module.MeshBasicMaterial({
-    color: 0xffffff,
-    side: three_module.DoubleSide,
-    transparent: true
-  });
-  const defaultStrokeColor = 0x808080;
-
-  const tempMat4 = new three_module.Matrix4();
-  const tempVec3a = new three_module.Vector3();
-  const tempVec3b = new three_module.Vector3();
-  const tempArray = [];
-  const origin = new three_module.Vector3();
-  const defaultOrient = '+x+y';
-
-  function first(o) {
-    return Array.isArray(o) ? o[0] : o
-  }
-
-  let getFlatRaycastMesh = () => {
-    const mesh = new three_module.Mesh(
-      new three_module.PlaneBufferGeometry(1, 1),
-      defaultMaterial
-    );
-    getFlatRaycastMesh = () => mesh;
-    return mesh
-  };
-  let getCurvedRaycastMesh = () => {
-    const mesh = new three_module.Mesh(
-      new three_module.PlaneBufferGeometry(1, 1, 32, 1),
-      defaultMaterial
-    );
-    getCurvedRaycastMesh = () => mesh;
-    return mesh
-  };
-
-  const syncStartEvent = {type: 'syncstart'};
-  const syncCompleteEvent = {type: 'synccomplete'};
-
-  const SYNCABLE_PROPS = [
-    'font',
-    'fontSize',
-    'letterSpacing',
-    'lineHeight',
-    'maxWidth',
-    'overflowWrap',
-    'text',
-    'direction',
-    'textAlign',
-    'textIndent',
-    'whiteSpace',
-    'anchorX',
-    'anchorY',
-    'colorRanges',
-    'sdfGlyphSize'
-  ];
-
-  const COPYABLE_PROPS = SYNCABLE_PROPS.concat(
-    'material',
-    'color',
-    'depthOffset',
-    'clipRect',
-    'curveRadius',
-    'orientation',
-    'glyphGeometryDetail'
-  );
-
-
-
-  /**
-   * @class Text
-   *
-   * A ThreeJS Mesh that renders a string of text on a plane in 3D space using signed distance
-   * fields (SDF).
-   */
-  class Text extends three_module.Mesh {
-    constructor() {
-      const geometry = new GlyphsGeometry();
-      super(geometry, null);
-
-      // === Text layout properties: === //
-
-      /**
-       * @member {string} text
-       * The string of text to be rendered.
-       */
-      this.text = '';
-
-      /**
-       * @deprecated Use `anchorX` and `anchorY` instead
-       * @member {Array<number>} anchor
-       * Defines where in the text block should correspond to the mesh's local position, as a set
-       * of horizontal and vertical percentages from 0 to 1. A value of `[0, 0]` (the default)
-       * anchors at the top-left, `[1, 1]` at the bottom-right, and `[0.5, 0.5]` centers the
-       * block at the mesh's position.
-       */
-      //this.anchor = null
-
-      /**
-       * @member {number|string} anchorX
-       * Defines the horizontal position in the text block that should line up with the local origin.
-       * Can be specified as a numeric x position in local units, a string percentage of the total
-       * text block width e.g. `'25%'`, or one of the following keyword strings: 'left', 'center',
-       * or 'right'.
-       */
-      this.anchorX = 0;
-
-      /**
-       * @member {number|string} anchorX
-       * Defines the vertical position in the text block that should line up with the local origin.
-       * Can be specified as a numeric y position in local units (note: down is negative y), a string
-       * percentage of the total text block height e.g. `'25%'`, or one of the following keyword strings:
-       * 'top', 'top-baseline', 'middle', 'bottom-baseline', or 'bottom'.
-       */
-      this.anchorY = 0;
-
-      /**
-       * @member {number} curveRadius
-       * Defines a cylindrical radius along which the text's plane will be curved. Positive numbers put
-       * the cylinder's centerline (oriented vertically) that distance in front of the text, for a concave
-       * curvature, while negative numbers put it behind the text for a convex curvature. The centerline
-       * will be aligned with the text's local origin; you can use `anchorX` to offset it.
-       *
-       * Since each glyph is by default rendered with a simple quad, each glyph remains a flat plane
-       * internally. You can use `glyphGeometryDetail` to add more vertices for curvature inside glyphs.
-       */
-      this.curveRadius = 0;
-
-      /**
-       * @member {string} direction
-       * Sets the base direction for the text. The default value of "auto" will choose a direction based
-       * on the text's content according to the bidi spec. A value of "ltr" or "rtl" will force the direction.
-       */
-      this.direction = 'auto';
-
-      /**
-       * @member {string} font
-       * URL of a custom font to be used. Font files can be in .ttf, .otf, or .woff (not .woff2) formats.
-       * Defaults to the Roboto font loaded from Google Fonts.
-       */
-      this.font = null; //will use default from TextBuilder
-
-      /**
-       * @member {number} fontSize
-       * The size at which to render the font in local units; corresponds to the em-box height
-       * of the chosen `font`.
-       */
-      this.fontSize = 0.1;
-
-      /**
-       * @member {number} letterSpacing
-       * Sets a uniform adjustment to spacing between letters after kerning is applied. Positive
-       * numbers increase spacing and negative numbers decrease it.
-       */
-      this.letterSpacing = 0;
-
-      /**
-       * @member {number|string} lineHeight
-       * Sets the height of each line of text, as a multiple of the `fontSize`. Defaults to 'normal'
-       * which chooses a reasonable height based on the chosen font's ascender/descender metrics.
-       */
-      this.lineHeight = 'normal';
-
-      /**
-       * @member {number} maxWidth
-       * The maximum width of the text block, above which text may start wrapping according to the
-       * `whiteSpace` and `overflowWrap` properties.
-       */
-      this.maxWidth = Infinity;
-
-      /**
-       * @member {string} overflowWrap
-       * Defines how text wraps if the `whiteSpace` property is `normal`. Can be either `'normal'`
-       * to break at whitespace characters, or `'break-word'` to allow breaking within words.
-       * Defaults to `'normal'`.
-       */
-      this.overflowWrap = 'normal';
-
-      /**
-       * @member {string} textAlign
-       * The horizontal alignment of each line of text within the overall text bounding box.
-       */
-      this.textAlign = 'left';
-
-      /**
-       * @member {number} textIndent
-       * Indentation for the first character of a line; see CSS `text-indent`.
-       */
-      this.textIndent = 0;
-
-      /**
-       * @member {string} whiteSpace
-       * Defines whether text should wrap when a line reaches the `maxWidth`. Can
-       * be either `'normal'` (the default), to allow wrapping according to the `overflowWrap` property,
-       * or `'nowrap'` to prevent wrapping. Note that `'normal'` here honors newline characters to
-       * manually break lines, making it behave more like `'pre-wrap'` does in CSS.
-       */
-      this.whiteSpace = 'normal';
-
-
-      // === Presentation properties: === //
-
-      /**
-       * @member {THREE.Material} material
-       * Defines a _base_ material to be used when rendering the text. This material will be
-       * automatically replaced with a material derived from it, that adds shader code to
-       * decrease the alpha for each fragment (pixel) outside the text glyphs, with antialiasing.
-       * By default it will derive from a simple white MeshBasicMaterial, but you can use any
-       * of the other mesh materials to gain other features like lighting, texture maps, etc.
-       *
-       * Also see the `color` shortcut property.
-       */
-      this.material = null;
-
-      /**
-       * @member {string|number|THREE.Color} color
-       * This is a shortcut for setting the `color` of the text's material. You can use this
-       * if you don't want to specify a whole custom `material`. Also, if you do use a custom
-       * `material`, this color will only be used for this particuar Text instance, even if
-       * that same material instance is shared across multiple Text objects.
-       */
-      this.color = null;
-
-      /**
-       * @member {object|null} colorRanges
-       * WARNING: This API is experimental and may change.
-       * This allows more fine-grained control of colors for individual or ranges of characters,
-       * taking precedence over the material's `color`. Its format is an Object whose keys each
-       * define a starting character index for a range, and whose values are the color for each
-       * range. The color value can be a numeric hex color value, a `THREE.Color` object, or
-       * any of the strings accepted by `THREE.Color`.
-       */
-      this.colorRanges = null;
-
-      /**
-       * @member {number|string} outlineWidth
-       * WARNING: This API is experimental and may change.
-       * The width of an outline/halo to be drawn around each text glyph using the `outlineColor` and `outlineOpacity`.
-       * Can be specified as either an absolute number in local units, or as a percentage string e.g.
-       * `"12%"` which is treated as a percentage of the `fontSize`. Defaults to `0`, which means
-       * no outline will be drawn unless an `outlineOffsetX/Y` or `outlineBlur` is set.
-       */
-      this.outlineWidth = 0;
-
-      /**
-       * @member {string|number|THREE.Color} outlineColor
-       * WARNING: This API is experimental and may change.
-       * The color of the text outline, if `outlineWidth`/`outlineBlur`/`outlineOffsetX/Y` are set.
-       * Defaults to black.
-       */
-      this.outlineColor = 0x000000;
-
-      /**
-       * @member {number} outlineOpacity
-       * WARNING: This API is experimental and may change.
-       * The opacity of the outline, if `outlineWidth`/`outlineBlur`/`outlineOffsetX/Y` are set.
-       * Defaults to `1`.
-       */
-      this.outlineOpacity = 1;
-
-      /**
-       * @member {number|string} outlineBlur
-       * WARNING: This API is experimental and may change.
-       * A blur radius applied to the outer edge of the text's outline. If the `outlineWidth` is
-       * zero, the blur will be applied at the glyph edge, like CSS's `text-shadow` blur radius.
-       * Can be specified as either an absolute number in local units, or as a percentage string e.g.
-       * `"12%"` which is treated as a percentage of the `fontSize`. Defaults to `0`.
-       */
-      this.outlineBlur = 0;
-
-      /**
-       * @member {number|string} outlineOffsetX
-       * WARNING: This API is experimental and may change.
-       * A horizontal offset for the text outline.
-       * Can be specified as either an absolute number in local units, or as a percentage string e.g. `"12%"`
-       * which is treated as a percentage of the `fontSize`. Defaults to `0`.
-       */
-      this.outlineOffsetX = 0;
-
-      /**
-       * @member {number|string} outlineOffsetY
-       * WARNING: This API is experimental and may change.
-       * A vertical offset for the text outline.
-       * Can be specified as either an absolute number in local units, or as a percentage string e.g. `"12%"`
-       * which is treated as a percentage of the `fontSize`. Defaults to `0`.
-       */
-      this.outlineOffsetY = 0;
-
-      /**
-       * @member {number|string} strokeWidth
-       * WARNING: This API is experimental and may change.
-       * The width of an inner stroke drawn inside each text glyph using the `strokeColor` and `strokeOpacity`.
-       * Can be specified as either an absolute number in local units, or as a percentage string e.g. `"12%"`
-       * which is treated as a percentage of the `fontSize`. Defaults to `0`.
-       */
-      this.strokeWidth = 0;
-
-      /**
-       * @member {string|number|THREE.Color} strokeColor
-       * WARNING: This API is experimental and may change.
-       * The color of the text stroke, if `strokeWidth` is greater than zero. Defaults to gray.
-       */
-      this.strokeColor = defaultStrokeColor;
-
-      /**
-       * @member {number} strokeOpacity
-       * WARNING: This API is experimental and may change.
-       * The opacity of the stroke, if `strokeWidth` is greater than zero. Defaults to `1`.
-       */
-      this.strokeOpacity = 1;
-
-      /**
-       * @member {number} fillOpacity
-       * WARNING: This API is experimental and may change.
-       * The opacity of the glyph's fill from 0 to 1. This behaves like the material's `opacity` but allows
-       * giving the fill a different opacity than the `strokeOpacity`. A fillOpacity of `0` makes the
-       * interior of the glyph invisible, leaving just the `strokeWidth`. Defaults to `1`.
-       */
-      this.fillOpacity = 1;
-
-      /**
-       * @member {number} depthOffset
-       * This is a shortcut for setting the material's `polygonOffset` and related properties,
-       * which can be useful in preventing z-fighting when this text is laid on top of another
-       * plane in the scene. Positive numbers are further from the camera, negatives closer.
-       */
-      this.depthOffset = 0;
-
-      /**
-       * @member {Array<number>} clipRect
-       * If specified, defines a `[minX, minY, maxX, maxY]` of a rectangle outside of which all
-       * pixels will be discarded. This can be used for example to clip overflowing text when
-       * `whiteSpace='nowrap'`.
-       */
-      this.clipRect = null;
-
-      /**
-       * @member {string} orientation
-       * Defines the axis plane on which the text should be laid out when the mesh has no extra
-       * rotation transform. It is specified as a string with two axes: the horizontal axis with
-       * positive pointing right, and the vertical axis with positive pointing up. By default this
-       * is '+x+y', meaning the text sits on the xy plane with the text's top toward positive y
-       * and facing positive z. A value of '+x-z' would place it on the xz plane with the text's
-       * top toward negative z and facing positive y.
-       */
-      this.orientation = defaultOrient;
-
-      /**
-       * @member {number} glyphGeometryDetail
-       * Controls number of vertical/horizontal segments that make up each glyph's rectangular
-       * plane. Defaults to 1. This can be increased to provide more geometrical detail for custom
-       * vertex shader effects, for example.
-       */
-      this.glyphGeometryDetail = 1;
-
-      /**
-       * @member {number|null} sdfGlyphSize
-       * The size of each glyph's SDF (signed distance field) used for rendering. This must be a
-       * power-of-two number. Defaults to 64 which is generally a good balance of size and quality
-       * for most fonts. Larger sizes can improve the quality of glyph rendering by increasing
-       * the sharpness of corners and preventing loss of very thin lines, at the expense of
-       * increased memory footprint and longer SDF generation time.
-       */
-      this.sdfGlyphSize = null;
-
-      /**
-       * @member {boolean} gpuAccelerateSDF
-       * When `true`, the SDF generation process will be GPU-accelerated with WebGL when possible,
-       * making it much faster especially for complex glyphs, and falling back to a JavaScript version
-       * executed in web workers when support isn't available. It should automatically detect support,
-       * but it's still somewhat experimental, so you can set it to `false` to force it to use the JS
-       * version if you encounter issues with it.
-       */
-      this.gpuAccelerateSDF = true;
-
-      this.debugSDF = false;
-    }
-
-    /**
-     * Updates the text rendering according to the current text-related configuration properties.
-     * This is an async process, so you can pass in a callback function to be executed when it
-     * finishes.
-     * @param {function} [callback]
-     */
-    sync(callback) {
-      if (this._needsSync) {
-        this._needsSync = false;
-
-        // If there's another sync still in progress, queue
-        if (this._isSyncing) {
-          (this._queuedSyncs || (this._queuedSyncs = [])).push(callback);
-        } else {
-          this._isSyncing = true;
-          this.dispatchEvent(syncStartEvent);
-
-          getTextRenderInfo({
-            text: this.text,
-            font: this.font,
-            fontSize: this.fontSize || 0.1,
-            letterSpacing: this.letterSpacing || 0,
-            lineHeight: this.lineHeight || 'normal',
-            maxWidth: this.maxWidth,
-            direction: this.direction || 'auto',
-            textAlign: this.textAlign,
-            textIndent: this.textIndent,
-            whiteSpace: this.whiteSpace,
-            overflowWrap: this.overflowWrap,
-            anchorX: this.anchorX,
-            anchorY: this.anchorY,
-            colorRanges: this.colorRanges,
-            includeCaretPositions: true, //TODO parameterize
-            sdfGlyphSize: this.sdfGlyphSize,
-            gpuAccelerateSDF: this.gpuAccelerateSDF,
-          }, textRenderInfo => {
-            this._isSyncing = false;
-
-            // Save result for later use in onBeforeRender
-            this._textRenderInfo = textRenderInfo;
-
-            // Update the geometry attributes
-            this.geometry.updateGlyphs(
-              textRenderInfo.glyphBounds,
-              textRenderInfo.glyphAtlasIndices,
-              textRenderInfo.blockBounds,
-              textRenderInfo.chunkedBounds,
-              textRenderInfo.glyphColors
-            );
-
-            // If we had extra sync requests queued up, kick it off
-            const queued = this._queuedSyncs;
-            if (queued) {
-              this._queuedSyncs = null;
-              this._needsSync = true;
-              this.sync(() => {
-                queued.forEach(fn => fn && fn());
-              });
-            }
-
-            this.dispatchEvent(syncCompleteEvent);
-            if (callback) {
-              callback();
-            }
-          });
-        }
-      }
-    }
-
-    /**
-     * Initiate a sync if needed - note it won't complete until next frame at the
-     * earliest so if possible it's a good idea to call sync() manually as soon as
-     * all the properties have been set.
-     * @override
-     */
-    onBeforeRender(renderer, scene, camera, geometry, material, group) {
-      this.sync();
-
-      // This may not always be a text material, e.g. if there's a scene.overrideMaterial present
-      if (material.isTroikaTextMaterial) {
-        this._prepareForRender(material);
-      }
-
-      // We need to force the material to FrontSide to avoid the double-draw-call performance hit
-      // introduced in Three.js r130: https://github.com/mrdoob/three.js/pull/21967 - The sidedness
-      // is instead applied via drawRange in the GlyphsGeometry.
-      material._hadOwnSide = material.hasOwnProperty('side');
-      this.geometry.setSide(material._actualSide = material.side);
-      material.side = three_module.FrontSide;
-    }
-
-    onAfterRender(renderer, scene, camera, geometry, material, group) {
-      // Restore original material side
-      if (material._hadOwnSide) {
-        material.side = material._actualSide;
-      } else {
-        delete material.side; // back to inheriting from base material
-      }
-    }
-
-    /**
-     * Shortcut to dispose the geometry specific to this instance.
-     * Note: we don't also dispose the derived material here because if anything else is
-     * sharing the same base material it will result in a pause next frame as the program
-     * is recompiled. Instead users can dispose the base material manually, like normal,
-     * and we'll also dispose the derived material at that time.
-     */
-    dispose() {
-      this.geometry.dispose();
-    }
-
-    /**
-     * @property {TroikaTextRenderInfo|null} textRenderInfo
-     * @readonly
-     * The current processed rendering data for this TextMesh, returned by the TextBuilder after
-     * a `sync()` call. This will be `null` initially, and may be stale for a short period until
-     * the asynchrous `sync()` process completes.
-     */
-    get textRenderInfo() {
-      return this._textRenderInfo || null
-    }
-
-    // Handler for automatically wrapping the base material with our upgrades. We do the wrapping
-    // lazily on _read_ rather than write to avoid unnecessary wrapping on transient values.
-    get material() {
-      let derivedMaterial = this._derivedMaterial;
-      const baseMaterial = this._baseMaterial || this._defaultMaterial || (this._defaultMaterial = defaultMaterial.clone());
-      if (!derivedMaterial || derivedMaterial.baseMaterial !== baseMaterial) {
-        derivedMaterial = this._derivedMaterial = createTextDerivedMaterial(baseMaterial);
-        // dispose the derived material when its base material is disposed:
-        baseMaterial.addEventListener('dispose', function onDispose() {
-          baseMaterial.removeEventListener('dispose', onDispose);
-          derivedMaterial.dispose();
-        });
-      }
-      // If text outline is configured, render it as a preliminary draw using Three's multi-material
-      // feature (see GlyphsGeometry which sets up `groups` for this purpose) Doing it with multi
-      // materials ensures the layers are always rendered consecutively in a consistent order.
-      // Each layer will trigger onBeforeRender with the appropriate material.
-      if (this.outlineWidth || this.outlineBlur || this.outlineOffsetX || this.outlineOffsetY) {
-        let outlineMaterial = derivedMaterial._outlineMtl;
-        if (!outlineMaterial) {
-          outlineMaterial = derivedMaterial._outlineMtl = Object.create(derivedMaterial, {
-            id: {value: derivedMaterial.id + 0.1}
-          });
-          outlineMaterial.isTextOutlineMaterial = true;
-          outlineMaterial.depthWrite = false;
-          outlineMaterial.map = null; //???
-          derivedMaterial.addEventListener('dispose', function onDispose() {
-            derivedMaterial.removeEventListener('dispose', onDispose);
-            outlineMaterial.dispose();
-          });
-        }
-        return [
-          outlineMaterial,
-          derivedMaterial
-        ]
-      } else {
-        return derivedMaterial
-      }
-    }
-    set material(baseMaterial) {
-      if (baseMaterial && baseMaterial.isTroikaTextMaterial) { //prevent double-derivation
-        this._derivedMaterial = baseMaterial;
-        this._baseMaterial = baseMaterial.baseMaterial;
-      } else {
-        this._baseMaterial = baseMaterial;
-      }
-    }
-
-    get glyphGeometryDetail() {
-      return this.geometry.detail
-    }
-    set glyphGeometryDetail(detail) {
-      this.geometry.detail = detail;
-    }
-
-    get curveRadius() {
-      return this.geometry.curveRadius
-    }
-    set curveRadius(r) {
-      this.geometry.curveRadius = r;
-    }
-
-    // Create and update material for shadows upon request:
-    get customDepthMaterial() {
-      return first(this.material).getDepthMaterial()
-    }
-    get customDistanceMaterial() {
-      return first(this.material).getDistanceMaterial()
-    }
-
-    _prepareForRender(material) {
-      const isOutline = material.isTextOutlineMaterial;
-      const uniforms = material.uniforms;
-      const textInfo = this.textRenderInfo;
-      if (textInfo) {
-        const {sdfTexture, blockBounds} = textInfo;
-        uniforms.uTroikaSDFTexture.value = sdfTexture;
-        uniforms.uTroikaSDFTextureSize.value.set(sdfTexture.image.width, sdfTexture.image.height);
-        uniforms.uTroikaSDFGlyphSize.value = textInfo.sdfGlyphSize;
-        uniforms.uTroikaSDFExponent.value = textInfo.sdfExponent;
-        uniforms.uTroikaTotalBounds.value.fromArray(blockBounds);
-        uniforms.uTroikaUseGlyphColors.value = !isOutline && !!textInfo.glyphColors;
-
-        let distanceOffset = 0;
-        let blurRadius = 0;
-        let strokeWidth = 0;
-        let fillOpacity;
-        let strokeOpacity;
-        let strokeColor;
-        let offsetX = 0;
-        let offsetY = 0;
-
-        if (isOutline) {
-          let {outlineWidth, outlineOffsetX, outlineOffsetY, outlineBlur, outlineOpacity} = this;
-          distanceOffset = this._parsePercent(outlineWidth) || 0;
-          blurRadius = Math.max(0, this._parsePercent(outlineBlur) || 0);
-          fillOpacity = outlineOpacity;
-          offsetX = this._parsePercent(outlineOffsetX) || 0;
-          offsetY = this._parsePercent(outlineOffsetY) || 0;
-        } else {
-          strokeWidth = Math.max(0, this._parsePercent(this.strokeWidth) || 0);
-          if (strokeWidth) {
-            strokeColor = this.strokeColor;
-            uniforms.uTroikaStrokeColor.value.set(strokeColor == null ? defaultStrokeColor : strokeColor);
-            strokeOpacity = this.strokeOpacity;
-            if (strokeOpacity == null) strokeOpacity = 1;
-          }
-          fillOpacity = this.fillOpacity;
-        }
-
-        uniforms.uTroikaDistanceOffset.value = distanceOffset;
-        uniforms.uTroikaPositionOffset.value.set(offsetX, offsetY);
-        uniforms.uTroikaBlurRadius.value = blurRadius;
-        uniforms.uTroikaStrokeWidth.value = strokeWidth;
-        uniforms.uTroikaStrokeOpacity.value = strokeOpacity;
-        uniforms.uTroikaFillOpacity.value = fillOpacity == null ? 1 : fillOpacity;
-        uniforms.uTroikaCurveRadius.value = this.curveRadius || 0;
-
-        let clipRect = this.clipRect;
-        if (clipRect && Array.isArray(clipRect) && clipRect.length === 4) {
-          uniforms.uTroikaClipRect.value.fromArray(clipRect);
-        } else {
-          // no clipping - choose a finite rect that shouldn't ever be reached by overflowing glyphs or outlines
-          const pad = (this.fontSize || 0.1) * 100;
-          uniforms.uTroikaClipRect.value.set(
-            blockBounds[0] - pad,
-            blockBounds[1] - pad,
-            blockBounds[2] + pad,
-            blockBounds[3] + pad
-          );
-        }
-        this.geometry.applyClipRect(uniforms.uTroikaClipRect.value);
-      }
-      uniforms.uTroikaSDFDebug.value = !!this.debugSDF;
-      material.polygonOffset = !!this.depthOffset;
-      material.polygonOffsetFactor = material.polygonOffsetUnits = this.depthOffset || 0;
-
-      // Shortcut for setting material color via `color` prop on the mesh; this is
-      // applied only to the derived material to avoid mutating a shared base material.
-      const color = isOutline ? (this.outlineColor || 0) : this.color;
-
-      if (color == null) {
-        delete material.color; //inherit from base
-      } else {
-        const colorObj = material.hasOwnProperty('color') ? material.color : (material.color = new three_module.Color());
-        if (color !== colorObj._input || typeof color === 'object') {
-          colorObj.set(colorObj._input = color);
-        }
-      }
-
-      // base orientation
-      let orient = this.orientation || defaultOrient;
-      if (orient !== material._orientation) {
-        let rotMat = uniforms.uTroikaOrient.value;
-        orient = orient.replace(/[^-+xyz]/g, '');
-        let match = orient !== defaultOrient && orient.match(/^([-+])([xyz])([-+])([xyz])$/);
-        if (match) {
-          let [, hSign, hAxis, vSign, vAxis] = match;
-          tempVec3a.set(0, 0, 0)[hAxis] = hSign === '-' ? 1 : -1;
-          tempVec3b.set(0, 0, 0)[vAxis] = vSign === '-' ? -1 : 1;
-          tempMat4.lookAt(origin, tempVec3a.cross(tempVec3b), tempVec3b);
-          rotMat.setFromMatrix4(tempMat4);
-        } else {
-          rotMat.identity();
-        }
-        material._orientation = orient;
-      }
-    }
-
-    _parsePercent(value) {
-      if (typeof value === 'string') {
-        let match = value.match(/^(-?[\d.]+)%$/);
-        let pct = match ? parseFloat(match[1]) : NaN;
-        value = (isNaN(pct) ? 0 : pct / 100) * this.fontSize;
-      }
-      return value
-    }
-
-    /**
-     * Translate a point in local space to an x/y in the text plane.
-     */
-    localPositionToTextCoords(position, target = new three_module.Vector2()) {
-      target.copy(position); //simple non-curved case is 1:1
-      const r = this.curveRadius;
-      if (r) { //flatten the curve
-        target.x = Math.atan2(position.x, Math.abs(r) - Math.abs(position.z)) * Math.abs(r);
-      }
-      return target
-    }
-
-    /**
-     * Translate a point in world space to an x/y in the text plane.
-     */
-    worldPositionToTextCoords(position, target = new three_module.Vector2()) {
-      tempVec3a.copy(position);
-      return this.localPositionToTextCoords(this.worldToLocal(tempVec3a), target)
-    }
-
-    /**
-     * @override Custom raycasting to test against the whole text block's max rectangular bounds
-     * TODO is there any reason to make this more granular, like within individual line or glyph rects?
-     */
-    raycast(raycaster, intersects) {
-      const {textRenderInfo, curveRadius} = this;
-      if (textRenderInfo) {
-        const bounds = textRenderInfo.blockBounds;
-        const raycastMesh = curveRadius ? getCurvedRaycastMesh() : getFlatRaycastMesh();
-        const geom = raycastMesh.geometry;
-        const {position, uv} = geom.attributes;
-        for (let i = 0; i < uv.count; i++) {
-          let x = bounds[0] + (uv.getX(i) * (bounds[2] - bounds[0]));
-          const y = bounds[1] + (uv.getY(i) * (bounds[3] - bounds[1]));
-          let z = 0;
-          if (curveRadius) {
-            z = curveRadius - Math.cos(x / curveRadius) * curveRadius;
-            x = Math.sin(x / curveRadius) * curveRadius;
-          }
-          position.setXYZ(i, x, y, z);
-        }
-        geom.boundingSphere = this.geometry.boundingSphere;
-        geom.boundingBox = this.geometry.boundingBox;
-        raycastMesh.matrixWorld = this.matrixWorld;
-        raycastMesh.material.side = this.material.side;
-        tempArray.length = 0;
-        raycastMesh.raycast(raycaster, tempArray);
-        for (let i = 0; i < tempArray.length; i++) {
-          tempArray[i].object = this;
-          intersects.push(tempArray[i]);
-        }
-      }
-    }
-
-    copy(source) {
-      // Prevent copying the geometry reference so we don't end up sharing attributes between instances
-      const geom = this.geometry;
-      super.copy(source);
-      this.geometry = geom;
-
-      COPYABLE_PROPS.forEach(prop => {
-        this[prop] = source[prop];
-      });
-      return this
-    }
-
-    clone() {
-      return new this.constructor().copy(this)
-    }
-  }
-
-
-  // Create setters for properties that affect text layout:
-  SYNCABLE_PROPS.forEach(prop => {
-    const privateKey = '_private_' + prop;
-    Object.defineProperty(Text.prototype, prop, {
-      get() {
-        return this[privateKey]
-      },
-      set(value) {
-        if (value !== this[privateKey]) {
-          this[privateKey] = value;
-          this._needsSync = true;
-        }
-      }
-    });
-  });
-
-
-  // Deprecation handler for `anchor` array:
-  let deprMsgShown = false;
-  Object.defineProperty(Text.prototype, 'anchor', {
-    get() {
-      return this._deprecated_anchor
-    },
-    set(val) {
-      this._deprecated_anchor = val;
-      if (!deprMsgShown) {
-        console.warn('TextMesh: `anchor` has been deprecated; use `anchorX` and `anchorY` instead.');
-        deprMsgShown = true;
-      }
-      if (Array.isArray(val)) {
-        this.anchorX = `${(+val[0] || 0) * 100}%`;
-        this.anchorY = `${(+val[1] || 0) * 100}%`;
-      } else {
-        this.anchorX = this.anchorY = 0;
-      }
-    }
-  });
-
-  return Text
-})();
-
-//=== Utility functions for dealing with carets and selection ranges ===//
-
-/**
- * @typedef {object} TextCaret
- * @property {number} x - x position of the caret
- * @property {number} y - y position of the caret's bottom
- * @property {number} height - height of the caret
- * @property {number} charIndex - the index in the original input string of this caret's target
- *   character; the caret will be for the position _before_ that character.
- */
-
-/**
- * Given a local x/y coordinate in the text block plane, find the nearest caret position.
- * @param {TroikaTextRenderInfo} textRenderInfo - a result object from TextBuilder#getTextRenderInfo
- * @param {number} x
- * @param {number} y
- * @return {TextCaret | null}
- */
-function getCaretAtPoint(textRenderInfo, x, y) {
-  let closestCaret = null;
-  const {caretHeight} = textRenderInfo;
-  const caretsByRow = groupCaretsByRow(textRenderInfo);
-
-  // Find nearest row by y first
-  let closestRowY = Infinity;
-  caretsByRow.forEach((carets, rowY) => {
-    if (Math.abs(y - (rowY + caretHeight / 2)) < Math.abs(y - (closestRowY + caretHeight / 2))) {
-      closestRowY = rowY;
-    }
-  });
-
-  // Then find closest caret by x within that row
-  caretsByRow.get(closestRowY).forEach(caret => {
-    if (!closestCaret || Math.abs(x - caret.x) < Math.abs(x - closestCaret.x)) {
-      closestCaret = caret;
-    }
-  });
-  return closestCaret
-}
-
-
-const _rectsCache = new WeakMap();
-
-/**
- * Given start and end character indexes, return a list of rectangles covering all the
- * characters within that selection.
- * @param {TroikaTextRenderInfo} textRenderInfo
- * @param {number} start - index of the first char in the selection
- * @param {number} end - index of the first char after the selection
- * @return {Array<{left, top, right, bottom}> | null}
- */
-function getSelectionRects(textRenderInfo, start, end) {
-  let rects;
-  if (textRenderInfo) {
-    // Check cache - textRenderInfo is frozen so it's safe to cache based on it
-    let prevResult = _rectsCache.get(textRenderInfo);
-    if (prevResult && prevResult.start === start && prevResult.end === end) {
-      return prevResult.rects
-    }
-
-    const {caretPositions, caretHeight} = textRenderInfo;
-
-    // Normalize
-    if (end < start) {
-      const s = start;
-      start = end;
-      end = s;
-    }
-    start = Math.max(start, 0);
-    end = Math.min(end, caretPositions.length + 1);
-
-    // Build list of rects, expanding the current rect for all characters in a run and starting
-    // a new rect whenever reaching a new line or a new bidi direction
-    rects = [];
-    let currentRect = null;
-    for (let i = start; i < end; i++) {
-      const x1 = caretPositions[i * 3];
-      const x2 = caretPositions[i * 3 + 1];
-      const left = Math.min(x1, x2);
-      const right = Math.max(x1, x2);
-      const bottom = caretPositions[i * 3 + 2];
-      if (!currentRect || bottom !== currentRect.bottom || left > currentRect.right || right < currentRect.left) {
-        currentRect = {
-          left: Infinity,
-          right: -Infinity,
-          bottom: bottom,
-          top: bottom + caretHeight
-        };
-        rects.push(currentRect);
-      }
-      currentRect.left = Math.min(left, currentRect.left);
-      currentRect.right = Math.max(right, currentRect.right);
-    }
-
-    // Merge any overlapping rects, e.g. those formed by adjacent bidi runs
-    rects.sort((a, b) => b.bottom - a.bottom || a.left - b.left);
-    for (let i = rects.length - 1; i-- > 0;) {
-      const rectA = rects[i];
-      const rectB = rects[i + 1];
-      if (rectA.bottom === rectB.bottom && rectA.left <= rectB.right && rectA.right >= rectB.left) {
-        rectB.left = Math.min(rectB.left, rectA.left);
-        rectB.right = Math.max(rectB.right, rectA.right);
-        rects.splice(i, 1);
-      }
-    }
-
-    _rectsCache.set(textRenderInfo, {start, end, rects});
-  }
-  return rects
-}
-
-const _caretsByRowCache = new WeakMap();
-
-function groupCaretsByRow(textRenderInfo) {
-  // textRenderInfo is frozen so it's safe to cache based on it
-  let caretsByRow = _caretsByRowCache.get(textRenderInfo);
-  if (!caretsByRow) {
-    const {caretPositions, caretHeight} = textRenderInfo;
-    caretsByRow = new Map();
-    for (let i = 0; i < caretPositions.length; i += 3) {
-      const rowY = caretPositions[i + 2];
-      let rowCarets = caretsByRow.get(rowY);
-      if (!rowCarets) {
-        caretsByRow.set(rowY, rowCarets = []);
-      }
-      rowCarets.push({
-        x: caretPositions[i],
-        y: rowY,
-        height: caretHeight,
-        charIndex: i / 3
-      });
-      // Add one more caret after the final char
-      if (i + 3 >= caretPositions.length) {
-        rowCarets.push({
-          x: caretPositions[i + 1],
-          y: rowY,
-          height: caretHeight,
-          charIndex: i / 3 + 1
-        });
-      }
-    }
-  }
-  _caretsByRowCache.set(textRenderInfo, caretsByRow);
-  return caretsByRow
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/suspend-react/dist/index.js
-function shallowEqualArrays(arrA, arrB, equal = (a, b) => a === b) {
-  if (arrA === arrB) return true;
-  if (!arrA || !arrB) return false;
-  const len = arrA.length;
-  if (arrB.length !== len) return false;
-
-  for (let i = 0; i < len; i++) if (!equal(arrA[i], arrB[i])) return false;
-
-  return true;
-}
-
-const globalCache = [];
-
-function query(fn, keys, preload = false, config = {}) {
-  for (const entry of globalCache) {
-    // Find a match
-    if (shallowEqualArrays(keys, entry.keys, entry.equal)) {
-      // If we're pre-loading and the element is present, just return
-      if (preload) return undefined; // If an error occurred, throw
-
-      if (Object.prototype.hasOwnProperty.call(entry, 'error')) throw entry.error; // If a response was successful, return
-
-      if (Object.prototype.hasOwnProperty.call(entry, 'response')) return entry.response; // If the promise is still unresolved, throw
-
-      if (!preload) throw entry.promise;
-    }
-  } // The request is new or has changed.
-
-
-  const entry = {
-    keys,
-    equal: config.equal,
-    promise: // Execute the promise
-    fn(...keys) // When it resolves, store its value
-    .then(response => entry.response = response) // Remove the entry if a lifespan was given
-    .then(() => {
-      if (config.lifespan && config.lifespan > 0) {
-        setTimeout(() => {
-          const index = globalCache.indexOf(entry);
-          if (index !== -1) globalCache.splice(index, 1);
-        }, config.lifespan);
-      }
-    }) // Store caught errors, they will be thrown in the render-phase to bubble into an error-bound
-    .catch(error => entry.error = error)
-  }; // Register the entry
-
-  globalCache.push(entry); // And throw the promise, this yields control back to React
-
-  if (!preload) throw entry.promise;
-  return undefined;
-}
-
-const suspend = (fn, keys, config) => query(fn, keys, false, config);
-
-const preload = (fn, keys, config) => void query(fn, keys, true, config);
-
-const peek = keys => {
-  var _globalCache$find;
-
-  return (_globalCache$find = globalCache.find(entry => shallowEqualArrays(keys, entry.keys, entry.equal))) == null ? void 0 : _globalCache$find.response;
-};
-
-const clear = keys => {
-  if (keys === undefined || keys.length === 0) globalCache.splice(0, globalCache.length);else {
-    const entry = globalCache.find(entry => shallowEqualArrays(keys, entry.keys, entry.equal));
-
-    if (entry) {
-      const index = globalCache.indexOf(entry);
-      if (index !== -1) globalCache.splice(index, 1);
-    }
-  }
-};
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Text.js
-
-
-
-
-
-
-// eslint-disable-next-line prettier/prettier
-const Text_Text = /*#__PURE__*/react.forwardRef(({
-  anchorX = 'center',
-  anchorY = 'middle',
-  font,
-  children,
-  characters,
-  onSync,
-  ...props
-}, ref) => {
-  const invalidate = (0,react_three_fiber_esm.useThree)(({
-    invalidate
-  }) => invalidate);
-  const [troikaMesh] = react.useState(() => new Text());
-  const [nodes, text] = react.useMemo(() => {
-    const n = [];
-    let t = '';
-    react.Children.forEach(children, child => {
-      if (typeof child === 'string' || typeof child === 'number') {
-        t += child;
-      } else {
-        n.push(child);
-      }
-    });
-    return [n, t];
-  }, [children]);
-  suspend(() => new Promise(res => preloadFont({
-    font,
-    characters
-  }, res)), ['troika-text', font, characters]);
-  react.useLayoutEffect(() => void troikaMesh.sync(() => {
-    invalidate();
-    if (onSync) onSync(troikaMesh);
-  }));
-  react.useEffect(() => {
-    return () => troikaMesh.dispose();
-  }, [troikaMesh]);
-  return /*#__PURE__*/react.createElement("primitive", _extends({
-    object: troikaMesh,
-    ref: ref,
-    font: font,
-    text: text,
-    anchorX: anchorX,
-    anchorY: anchorY
-  }, props), nodes);
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/postprocessing/EffectComposer.js
-var EffectComposer = __webpack_require__(8064);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/postprocessing/RenderPass.js
-var RenderPass = __webpack_require__(48197);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/postprocessing/ShaderPass.js
-var ShaderPass = __webpack_require__(6073);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/shaders/GammaCorrectionShader.js
-var GammaCorrectionShader = __webpack_require__(60809);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Effects.js
-
-
-
-
-
-
-
-(0,react_three_fiber_esm.extend)({
-  EffectComposer: EffectComposer/* EffectComposer */.x,
-  RenderPass: RenderPass/* RenderPass */.C,
-  ShaderPass: ShaderPass/* ShaderPass */.T
-});
-const isWebGL2Available = () => {
-  try {
-    var canvas = document.createElement('canvas');
-    return !!(window.WebGL2RenderingContext && canvas.getContext('webgl2'));
-  } catch (e) {
-    return false;
-  }
-};
-const Effects = /*#__PURE__*/react.forwardRef(({
-  children,
-  multisamping = 8,
-  renderIndex = 1,
-  disableGamma = false,
-  disableRenderPass = false,
-  ...props
-}, ref) => {
-  const composer = react.useRef();
-  const scene = (0,react_three_fiber_esm.useThree)(({
-    scene
-  }) => scene);
-  const camera = (0,react_three_fiber_esm.useThree)(({
-    camera
-  }) => camera);
-  const gl = (0,react_three_fiber_esm.useThree)(({
-    gl
-  }) => gl);
-  const size = (0,react_three_fiber_esm.useThree)(({
-    size
-  }) => size);
-  const [target] = react.useState(() => {
-    if (isWebGL2Available() && multisamping > 0) {
-      const t = new three_module.WebGLRenderTarget(size.width, size.height, {
-        format: three_module.RGBAFormat,
-        encoding: three_module.sRGBEncoding
-      });
-      t.samples = 8;
-      return t;
-    }
-  });
-  react.useEffect(() => {
-    var _composer$current, _composer$current2;
-
-    (_composer$current = composer.current) == null ? void 0 : _composer$current.setSize(size.width, size.height);
-    (_composer$current2 = composer.current) == null ? void 0 : _composer$current2.setPixelRatio(gl.getPixelRatio());
-  }, [gl, size]);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    var _composer$current3;
-
-    return (_composer$current3 = composer.current) == null ? void 0 : _composer$current3.render();
-  }, renderIndex);
-  return /*#__PURE__*/react.createElement("effectComposer", _extends({
-    ref: react_merge_refs_esm([ref, composer]),
-    args: [gl, target]
-  }, props), !disableRenderPass && /*#__PURE__*/react.createElement("renderPass", {
-    attachArray: "passes",
-    args: [scene, camera]
-  }), !disableGamma && /*#__PURE__*/react.createElement("shaderPass", {
-    attachArray: "passes",
-    args: [GammaCorrectionShader/* GammaCorrectionShader */.Y]
-  }), children);
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/GradientTexture.js
-
-
-
-
-
-function GradientTexture({
-  stops,
-  colors,
-  size = 1024,
-  ...props
-}) {
-  const gl = (0,react_three_fiber_esm.useThree)(state => state.gl);
-  const texture = react.useMemo(() => {
-    const canvas = document.createElement('canvas');
-    const context = canvas.getContext('2d');
-    canvas.width = 16;
-    canvas.height = size;
-    const gradient = context.createLinearGradient(0, 0, 0, size);
-    let i = stops.length;
-
-    while (i--) {
-      gradient.addColorStop(stops[i], colors[i]);
-    }
-
-    context.fillStyle = gradient;
-    context.fillRect(0, 0, 16, size);
-    const texture = new three_module.Texture(canvas);
-    texture.needsUpdate = true;
-    return texture;
-  }, [stops]);
-  react.useEffect(() => () => void texture.dispose(), [texture]);
-  return /*#__PURE__*/react.createElement("primitive", _extends({
-    object: texture,
-    attach: "map",
-    encoding: gl.outputEncoding
-  }, props));
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/shaderMaterial.js
-
-
-function shaderMaterial(uniforms, vertexShader, fragmentShader, onInit) {
-  return class extends three_module.ShaderMaterial {
-    constructor() {
-      const entries = Object.entries(uniforms); // Create unforms and shaders
-
-      super({
-        uniforms: entries.reduce((acc, [name, value]) => {
-          const uniform = three_module.UniformsUtils.clone({
-            [name]: {
-              value
-            }
-          });
-          return { ...acc,
-            ...uniform
-          };
-        }, {}),
-        vertexShader,
-        fragmentShader
-      }); // Create getter/setters
-
-      entries.forEach(([name]) => Object.defineProperty(this, name, {
-        get: () => this.uniforms[name].value,
-        set: v => this.uniforms[name].value = v
-      }));
-      if (onInit) onInit(this);
-    }
-
-  };
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useTexture.js
-
-
-
-
-const IsObject = url => url === Object(url) && !Array.isArray(url) && typeof url !== 'function';
-function useTexture(input) {
-  const gl = (0,react_three_fiber_esm.useThree)(state => state.gl);
-  const textures = (0,react_three_fiber_esm.useLoader)(three_module.TextureLoader, IsObject(input) ? Object.values(input) : input); // https://github.com/mrdoob/three.js/issues/22696
-  // Upload the texture to the GPU immediately instead of waiting for the first render
-
-  (0,react.useEffect)(() => {
-    const array = Array.isArray(textures) ? textures : [textures];
-    array.forEach(gl.initTexture);
-  }, [gl, textures]);
-
-  if (IsObject(input)) {
-    const keys = Object.keys(input);
-    const keyed = {};
-    keys.forEach(key => Object.assign(keyed, {
-      [key]: textures[keys.indexOf(key)]
-    }));
-    return keyed;
-  } else {
-    return textures;
-  }
-}
-
-useTexture.preload = url => react_three_fiber_esm.useLoader.preload(three_module.TextureLoader, url); // @ts-expect-error new in r3f 7.0.5
-
-
-useTexture.clear = input => react_three_fiber_esm.useLoader.clear(three_module.TextureLoader, input);
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Image.js
-
-
-
-
-
-
-
-const ImageMaterialImpl = shaderMaterial({
-  color: new three_module.Color('white'),
-  scale: [1, 1],
-  imageBounds: [1, 1],
-  map: null,
-  zoom: 1,
-  grayscale: 0
-},
-/* glsl */
-`
-  varying vec2 vUv;
-  void main() {
-    gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);
-    vUv = uv;
-  }
-`,
-/* glsl */
-`
-  // mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44
-  varying vec2 vUv;
-  uniform vec2 scale;
-  uniform vec2 imageBounds;
-  uniform vec3 color;
-  uniform sampler2D map;
-  uniform float zoom;
-  uniform float grayscale;
-  const vec3 luma = vec3(.299, 0.587, 0.114);
-  vec4 toGrayscale(vec4 color, float intensity) {
-    return vec4(mix(color.rgb, vec3(dot(color.rgb, luma)), intensity), color.a);
-  }
-  vec2 aspect(vec2 size) {
-    return size / min(size.x, size.y);
-  }
-  void main() {
-    vec2 s = aspect(scale);
-    vec2 i = aspect(imageBounds);
-    float rs = s.x / s.y;
-    float ri = i.x / i.y;
-    vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);
-    vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;
-    vec2 uv = vUv * s / new + offset;
-    vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);
-    gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, 1.0), grayscale);
-    
-    #include <tonemapping_fragment>
-    #include <encodings_fragment>
-  }
-`);
-const Image = /*#__PURE__*/react.forwardRef(({
-  children,
-  color,
-  segments = 1,
-  scale = 1,
-  zoom = 1,
-  grayscale = 0,
-  url,
-  toneMapped,
-  ...props
-}, ref) => {
-  (0,react_three_fiber_esm.extend)({
-    ImageMaterial: ImageMaterialImpl
-  });
-  const texture = useTexture(url);
-  const planeBounds = Array.isArray(scale) ? [scale[0], scale[1]] : [scale, scale];
-  const imageBounds = [texture.image.width, texture.image.height];
-  return /*#__PURE__*/react.createElement("mesh", _extends({
-    ref: ref,
-    scale: scale
-  }, props), /*#__PURE__*/react.createElement("planeGeometry", {
-    args: [1, 1, segments, segments]
-  }), /*#__PURE__*/react.createElement("imageMaterial", {
-    color: color,
-    map: texture,
-    zoom: zoom,
-    grayscale: grayscale,
-    scale: planeBounds,
-    imageBounds: imageBounds,
-    toneMapped: toneMapped
-  }), children);
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Edges.js
-
-
-
-
-function Edges({
-  userData,
-  children,
-  geometry,
-  threshold = 15,
-  color = 'black',
-  ...props
-}) {
-  const ref = react.useRef(null);
-  react.useLayoutEffect(() => {
-    const parent = ref.current.parent;
-
-    if (parent) {
-      const geom = geometry || parent.geometry;
-
-      if (geom !== ref.current.userData.currentGeom || threshold !== ref.current.userData.currentThreshold) {
-        ref.current.userData.currentGeom = geom;
-        ref.current.userData.currentThreshold = threshold;
-        ref.current.geometry = new three_module.EdgesGeometry(geom, threshold);
-      }
-    }
-  });
-  return /*#__PURE__*/react.createElement("lineSegments", _extends({
-    ref: ref,
-    raycast: () => null
-  }, props), children ? children : /*#__PURE__*/react.createElement("lineBasicMaterial", {
-    color: color
-  }));
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/meshline/dist/meshline.es.js
-function e(e,i){const s=new three_module.Matrix4,r=new three_module.Ray,a=new three_module.Sphere,o=new three_module.Vector3,n=this.geometry;if(a.copy(n.boundingSphere),a.applyMatrix4(this.matrixWorld),!1===e.ray.intersectSphere(a,o))return;s.copy(this.matrixWorld).invert(),r.copy(e.ray).applyMatrix4(s);const u=new three_module.Vector3,h=new three_module.Vector3,l=new three_module.Vector3,p=this instanceof three_module.LineSegments?2:1,c=n.index,f=n.attributes;if(null!==c){const t=c.array,s=f.position.array,a=f.width.array;for(let n=0,c=t.length-1;n<c;n+=p){const p=t[n],f=t[n+1];u.fromArray(s,3*p),h.fromArray(s,3*f);const d=null!=a[Math.floor(n/3)]?a[Math.floor(n/3)]:1,v=e.params.Line.threshold+this.material.lineWidth*d/2,m=v*v;if(r.distanceSqToSegment(u,h,o,l)>m)continue;o.applyMatrix4(this.matrixWorld);const y=e.ray.origin.distanceTo(o);y<e.near||y>e.far||(i.push({distance:y,point:l.clone().applyMatrix4(this.matrixWorld),index:n,face:null,faceIndex:null,object:this}),n=c)}}}function meshline_es_i(t,e,i,s,r){let a;if(t=t.subarray||t.slice?t:t.buffer,i=i.subarray||i.slice?i:i.buffer,t=e?t.subarray?t.subarray(e,r&&e+r):t.slice(e,r&&e+r):t,i.set)i.set(t,s);else for(a=0;a<t.length;a++)i[a+s]=t[a];return i}class s extends three_module.BufferGeometry{constructor(){super(),this.type="MeshLine",this.isMeshLine=!0,this.positions=[],this.raycast=e,this.previous=[],this.next=[],this.side=[],this.width=[],this.indices_array=[],this.uvs=[],this.counters=[],this._points=[],this._geom=null,this.widthCallback=null,this.matrixWorld=new three_module.Matrix4,Object.defineProperties(this,{geometry:{enumerable:!0,get(){return this}},geom:{enumerable:!0,get(){return this._geom},set(t){this.setGeometry(t,this.widthCallback)}},points:{enumerable:!0,get(){return this._points},set(t){this.setPoints(t,this.widthCallback)}}})}setMatrixWorld(t){this.matrixWorld=t}setGeometry(e,i){this._geometry=e,e instanceof three_module.BufferGeometry?this.setPoints(e.getAttribute("position").array,i):this.setPoints(e,i)}setPoints(e,i){if(e instanceof Float32Array||e instanceof Array){if(this._points=e,this.widthCallback=i,this.positions=[],this.counters=[],e.length&&e[0]instanceof three_module.Vector3)for(var s=0;s<e.length;s++){const t=e[s];var r=s/e.length;this.positions.push(t.x,t.y,t.z),this.positions.push(t.x,t.y,t.z),this.counters.push(r),this.counters.push(r)}else for(s=0;s<e.length;s+=3){r=s/e.length;this.positions.push(e[s],e[s+1],e[s+2]),this.positions.push(e[s],e[s+1],e[s+2]),this.counters.push(r),this.counters.push(r)}this.process()}else console.error("ERROR: The BufferArray of points is not instancied correctly.")}compareV3(t,e){const i=6*t,s=6*e;return this.positions[i]===this.positions[s]&&this.positions[i+1]===this.positions[s+1]&&this.positions[i+2]===this.positions[s+2]}copyV3(t){const e=6*t;return[this.positions[e],this.positions[e+1],this.positions[e+2]]}process(){const e=this.positions.length/6;let i,s;this.previous=[],this.next=[],this.side=[],this.width=[],this.indices_array=[],this.uvs=[],s=this.compareV3(0,e-1)?this.copyV3(e-2):this.copyV3(0),this.previous.push(s[0],s[1],s[2]),this.previous.push(s[0],s[1],s[2]);for(let t=0;t<e;t++){if(this.side.push(1),this.side.push(-1),i=this.widthCallback?this.widthCallback(t/(e-1)):1,this.width.push(i),this.width.push(i),this.uvs.push(t/(e-1),0),this.uvs.push(t/(e-1),1),t<e-1){s=this.copyV3(t),this.previous.push(s[0],s[1],s[2]),this.previous.push(s[0],s[1],s[2]);const e=2*t;this.indices_array.push(e,e+1,e+2),this.indices_array.push(e+2,e+1,e+3)}t>0&&(s=this.copyV3(t),this.next.push(s[0],s[1],s[2]),this.next.push(s[0],s[1],s[2]))}s=this.compareV3(e-1,0)?this.copyV3(1):this.copyV3(e-1),this.next.push(s[0],s[1],s[2]),this.next.push(s[0],s[1],s[2]),this._attributes&&this._attributes.position.count===this.positions.length?(this._attributes.position.copyArray(new Float32Array(this.positions)),this._attributes.position.needsUpdate=!0,this._attributes.previous.copyArray(new Float32Array(this.previous)),this._attributes.previous.needsUpdate=!0,this._attributes.next.copyArray(new Float32Array(this.next)),this._attributes.next.needsUpdate=!0,this._attributes.side.copyArray(new Float32Array(this.side)),this._attributes.side.needsUpdate=!0,this._attributes.width.copyArray(new Float32Array(this.width)),this._attributes.width.needsUpdate=!0,this._attributes.uv.copyArray(new Float32Array(this.uvs)),this._attributes.uv.needsUpdate=!0,this._attributes.index.copyArray(new Uint16Array(this.indices_array)),this._attributes.index.needsUpdate=!0):this._attributes={position:new three_module.BufferAttribute(new Float32Array(this.positions),3),previous:new three_module.BufferAttribute(new Float32Array(this.previous),3),next:new three_module.BufferAttribute(new Float32Array(this.next),3),side:new three_module.BufferAttribute(new Float32Array(this.side),1),width:new three_module.BufferAttribute(new Float32Array(this.width),1),uv:new three_module.BufferAttribute(new Float32Array(this.uvs),2),index:new three_module.BufferAttribute(new Uint16Array(this.indices_array),1),counters:new three_module.BufferAttribute(new Float32Array(this.counters),1)},this.setAttribute("position",this._attributes.position),this.setAttribute("previous",this._attributes.previous),this.setAttribute("next",this._attributes.next),this.setAttribute("side",this._attributes.side),this.setAttribute("width",this._attributes.width),this.setAttribute("uv",this._attributes.uv),this.setAttribute("counters",this._attributes.counters),this.setIndex(this._attributes.index),this.computeBoundingSphere(),this.computeBoundingBox()}advance({x:t,y:e,z:s}){const r=this._attributes.position.array,a=this._attributes.previous.array,o=this._attributes.next.array,n=r.length;meshline_es_i(r,0,a,0,n),meshline_es_i(r,6,r,0,n-6),r[n-6]=t,r[n-5]=e,r[n-4]=s,r[n-3]=t,r[n-2]=e,r[n-1]=s,meshline_es_i(r,6,o,0,n-6),o[n-6]=t,o[n-5]=e,o[n-4]=s,o[n-3]=t,o[n-2]=e,o[n-1]=s,this._attributes.position.needsUpdate=!0,this._attributes.previous.needsUpdate=!0,this._attributes.next.needsUpdate=!0}}three_module.ShaderChunk.meshline_vert=["","#include <common>","",three_module.ShaderChunk.logdepthbuf_pars_vertex,three_module.ShaderChunk.fog_pars_vertex,"","attribute vec3 previous;","attribute vec3 next;","attribute float side;","attribute float width;","attribute float counters;","","uniform vec2 resolution;","uniform float lineWidth;","uniform vec3 color;","uniform float opacity;","uniform float sizeAttenuation;","","varying vec2 vUV;","varying vec4 vColor;","varying float vCounters;","","vec2 fix( vec4 i, float aspect ) {","","    vec2 res = i.xy / i.w;","    res.x *= aspect;","\t vCounters = counters;","    return res;","","}","","void main() {","","    float aspect = resolution.x / resolution.y;","","    vColor = vec4( color, opacity );","    vUV = uv;","","    mat4 m = projectionMatrix * modelViewMatrix;","    vec4 finalPosition = m * vec4( position, 1.0 );","    vec4 prevPos = m * vec4( previous, 1.0 );","    vec4 nextPos = m * vec4( next, 1.0 );","","    vec2 currentP = fix( finalPosition, aspect );","    vec2 prevP = fix( prevPos, aspect );","    vec2 nextP = fix( nextPos, aspect );","","    float w = lineWidth * width;","","    vec2 dir;","    if( nextP == currentP ) dir = normalize( currentP - prevP );","    else if( prevP == currentP ) dir = normalize( nextP - currentP );","    else {","        vec2 dir1 = normalize( currentP - prevP );","        vec2 dir2 = normalize( nextP - currentP );","        dir = normalize( dir1 + dir2 );","","        vec2 perp = vec2( -dir1.y, dir1.x );","        vec2 miter = vec2( -dir.y, dir.x );","        //w = clamp( w / dot( miter, perp ), 0., 4. * lineWidth * width );","","    }","","    //vec2 normal = ( cross( vec3( dir, 0. ), vec3( 0., 0., 1. ) ) ).xy;","    vec4 normal = vec4( -dir.y, dir.x, 0., 1. );","    normal.xy *= .5 * w;","    normal *= projectionMatrix;","    if( sizeAttenuation == 0. ) {","        normal.xy *= finalPosition.w;","        normal.xy /= ( vec4( resolution, 0., 1. ) * projectionMatrix ).xy;","    }","","    finalPosition.xy += normal.xy * side;","","    gl_Position = finalPosition;","",three_module.ShaderChunk.logdepthbuf_vertex,three_module.ShaderChunk.fog_vertex&&"    vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",three_module.ShaderChunk.fog_vertex,"}"].join("\n"),three_module.ShaderChunk.meshline_frag=["",three_module.ShaderChunk.fog_pars_fragment,three_module.ShaderChunk.logdepthbuf_pars_fragment,"","uniform sampler2D map;","uniform sampler2D alphaMap;","uniform float useMap;","uniform float useAlphaMap;","uniform float useDash;","uniform float dashArray;","uniform float dashOffset;","uniform float dashRatio;","uniform float visibility;","uniform float alphaTest;","uniform vec2 repeat;","","varying vec2 vUV;","varying vec4 vColor;","varying float vCounters;","","void main() {","",three_module.ShaderChunk.logdepthbuf_fragment,"","    vec4 c = vColor;","    if( useMap == 1. ) c *= texture2D( map, vUV * repeat );","    if( useAlphaMap == 1. ) c.a *= texture2D( alphaMap, vUV * repeat ).a;","    if( c.a < alphaTest ) discard;","    if( useDash == 1. ){","        c.a *= ceil(mod(vCounters + dashOffset, dashArray) - (dashArray * dashRatio));","    }","    gl_FragColor = c;","    gl_FragColor.a *= step(vCounters, visibility);","",three_module.ShaderChunk.fog_fragment,"}"].join("\n");class meshline_es_r extends three_module.ShaderMaterial{constructor(e){super({uniforms:Object.assign({},three_module.UniformsLib.fog,{lineWidth:{value:1},map:{value:null},useMap:{value:0},alphaMap:{value:null},useAlphaMap:{value:0},color:{value:new three_module.Color(16777215)},opacity:{value:1},resolution:{value:new three_module.Vector2(1,1)},sizeAttenuation:{value:1},dashArray:{value:0},dashOffset:{value:0},dashRatio:{value:.5},useDash:{value:0},visibility:{value:1},alphaTest:{value:0},repeat:{value:new three_module.Vector2(1,1)}}),vertexShader:three_module.ShaderChunk.meshline_vert,fragmentShader:three_module.ShaderChunk.meshline_frag}),this.type="MeshLineMaterial",Object.defineProperties(this,{lineWidth:{enumerable:!0,get(){return this.uniforms.lineWidth.value},set(t){this.uniforms.lineWidth.value=t}},map:{enumerable:!0,get(){return this.uniforms.map.value},set(t){this.uniforms.map.value=t}},useMap:{enumerable:!0,get(){return this.uniforms.useMap.value},set(t){this.uniforms.useMap.value=t}},alphaMap:{enumerable:!0,get(){return this.uniforms.alphaMap.value},set(t){this.uniforms.alphaMap.value=t}},useAlphaMap:{enumerable:!0,get(){return this.uniforms.useAlphaMap.value},set(t){this.uniforms.useAlphaMap.value=t}},color:{enumerable:!0,get(){return this.uniforms.color.value},set(t){this.uniforms.color.value=t}},opacity:{enumerable:!0,get(){return this.uniforms.opacity.value},set(t){this.uniforms.opacity.value=t}},resolution:{enumerable:!0,get(){return this.uniforms.resolution.value},set(t){this.uniforms.resolution.value.copy(t)}},sizeAttenuation:{enumerable:!0,get(){return this.uniforms.sizeAttenuation.value},set(t){this.uniforms.sizeAttenuation.value=t}},dashArray:{enumerable:!0,get(){return this.uniforms.dashArray.value},set(t){this.uniforms.dashArray.value=t,this.useDash=0!==t?1:0}},dashOffset:{enumerable:!0,get(){return this.uniforms.dashOffset.value},set(t){this.uniforms.dashOffset.value=t}},dashRatio:{enumerable:!0,get(){return this.uniforms.dashRatio.value},set(t){this.uniforms.dashRatio.value=t}},useDash:{enumerable:!0,get(){return this.uniforms.useDash.value},set(t){this.uniforms.useDash.value=t}},visibility:{enumerable:!0,get(){return this.uniforms.visibility.value},set(t){this.uniforms.visibility.value=t}},alphaTest:{enumerable:!0,get(){return this.uniforms.alphaTest.value},set(t){this.uniforms.alphaTest.value=t}},repeat:{enumerable:!0,get(){return this.uniforms.repeat.value},set(t){this.uniforms.repeat.value.copy(t)}}}),this.setValues(e)}copy(t){return super.copy(t),this.lineWidth=t.lineWidth,this.map=t.map,this.useMap=t.useMap,this.alphaMap=t.alphaMap,this.useAlphaMap=t.useAlphaMap,this.color.copy(t.color),this.opacity=t.opacity,this.resolution.copy(t.resolution),this.sizeAttenuation=t.sizeAttenuation,this.dashArray.copy(t.dashArray),this.dashOffset.copy(t.dashOffset),this.dashRatio.copy(t.dashRatio),this.useDash=t.useDash,this.visibility=t.visibility,this.alphaTest=t.alphaTest,this.repeat.copy(t.repeat),this}}
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Trail.js
-
-
-
-
-
-const defaults = {
-  width: 0.2,
-  length: 1,
-  decay: 1,
-  local: false,
-  stride: 0,
-  interval: 1
-};
-
-const shiftLeft = (collection, steps = 1) => {
-  collection.set(collection.subarray(steps));
-  collection.fill(-Infinity, -steps);
-  return collection;
-};
-
-function useTrail(target, settings) {
-  const {
-    length,
-    local,
-    decay,
-    interval,
-    stride
-  } = { ...defaults,
-    ...settings
-  };
-  const points = react.useRef();
-  const [worldPosition] = react.useState(() => new three_module.Vector3());
-  react.useLayoutEffect(() => {
-    if (target) {
-      points.current = Float32Array.from({
-        length: length * 10 * 3
-      }, (_, i) => target.position.getComponent(i % 3));
-    }
-  }, [length, target]);
-  const prevPosition = react.useRef(new three_module.Vector3());
-  const frameCount = react.useRef(0);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    if (!target) return;
-    if (!points.current) return;
-
-    if (frameCount.current === 0) {
-      let newPosition;
-
-      if (local) {
-        newPosition = target.position;
-      } else {
-        target.getWorldPosition(worldPosition);
-        newPosition = worldPosition;
-      }
-
-      const steps = 1 * decay;
-
-      for (let i = 0; i < steps; i++) {
-        if (newPosition.distanceTo(prevPosition.current) < stride) continue;
-        shiftLeft(points.current, 3);
-        points.current.set(newPosition.toArray(), points.current.length - 3);
-      }
-
-      prevPosition.current.copy(newPosition);
-    }
-
-    frameCount.current++;
-    frameCount.current = frameCount.current % interval;
-  });
-  return points;
-}
-const Trail = /*#__PURE__*/react.forwardRef((props, forwardRef) => {
-  const {
-    children
-  } = props;
-  const {
-    width,
-    length,
-    decay,
-    local,
-    stride,
-    interval
-  } = { ...defaults,
-    ...props
-  };
-  const {
-    color = 'hotpink',
-    attenuation,
-    target
-  } = props;
-  const size = (0,react_three_fiber_esm.useThree)(s => s.size);
-  const ref = react.useRef(null);
-  const [anchor, setAnchor] = react.useState(null);
-  const points = useTrail(anchor, {
-    length,
-    decay,
-    local,
-    stride,
-    interval
-  });
-  react.useEffect(() => {
-    const t = (target == null ? void 0 : target.current) || ref.current.children.find(o => {
-      return o instanceof three_module.Object3D;
-    });
-
-    if (t) {
-      setAnchor(t);
-    }
-  }, [points, target]);
-  const geo = react.useMemo(() => new s(), []);
-  const mat = react.useMemo(() => {
-    var _matOverride;
-
-    const m = new meshline_es_r({
-      lineWidth: 0.1 * width,
-      color: color,
-      sizeAttenuation: 1,
-      resolution: new three_module.Vector2(size.width, size.height)
-    }); // Get and apply first <meshLineMaterial /> from children
-
-    let matOverride;
-
-    if (children) {
-      if (Array.isArray(children)) {
-        matOverride = children.find(child => {
-          const c = child;
-          return typeof c.type === 'string' && c.type === 'meshLineMaterial';
-        });
-      } else {
-        const c = children;
-
-        if (typeof c.type === 'string' && c.type === 'meshLineMaterial') {
-          matOverride = c;
-        }
-      }
-    }
-
-    if (typeof ((_matOverride = matOverride) == null ? void 0 : _matOverride.props) === 'object') {
-      m.setValues(matOverride.props);
-    }
-
-    return m;
-  }, [width, color, size, children]);
-  react.useEffect(() => {
-    mat.uniforms.resolution.value.set(size.width, size.height);
-  }, [size]);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    if (!points.current) return;
-    geo.setPoints(points.current, attenuation);
-  });
-  return /*#__PURE__*/react.createElement("group", null, /*#__PURE__*/react.createElement("mesh", {
-    ref: forwardRef,
-    geometry: geo,
-    material: mat
-  }), /*#__PURE__*/react.createElement("group", {
-    ref: ref
-  }, children));
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/math/MeshSurfaceSampler.js
-var MeshSurfaceSampler = __webpack_require__(96272);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Sampler.js
-
-
-
-
-
-const Sampler = ({
-  children,
-  weight,
-  transform,
-  instances,
-  mesh,
-  ...props
-}) => {
-  const group = react.useRef(null);
-  const instancedRef = react.useRef(null);
-  const meshToSampleRef = react.useRef(null);
-  react.useEffect(() => {
-    var _instances$current, _mesh$current;
-
-    instancedRef.current = (_instances$current = instances == null ? void 0 : instances.current) !== null && _instances$current !== void 0 ? _instances$current : group.current.children.find(c => c.hasOwnProperty('instanceMatrix'));
-    meshToSampleRef.current = (_mesh$current = mesh == null ? void 0 : mesh.current) !== null && _mesh$current !== void 0 ? _mesh$current : group.current.children.find(c => c.type === 'Mesh');
-  }, [children, mesh == null ? void 0 : mesh.current, instances == null ? void 0 : instances.current]);
-  react.useEffect(() => {
-    if (typeof meshToSampleRef.current === 'undefined') return;
-    if (typeof instancedRef.current === 'undefined') return;
-    const sampler = new MeshSurfaceSampler/* MeshSurfaceSampler */.a(meshToSampleRef.current);
-
-    if (weight) {
-      sampler.setWeightAttribute(weight);
-    }
-
-    sampler.build();
-    const position = new three_module.Vector3();
-    const normal = new three_module.Vector3();
-    const color = new three_module.Color();
-    const dummy = new three_module.Object3D();
-    meshToSampleRef.current.updateMatrixWorld(true);
-
-    for (let i = 0; i < instancedRef.current.count; i++) {
-      sampler.sample(position, normal, color);
-
-      if (typeof transform === 'function') {
-        transform({
-          dummy,
-          sampledMesh: meshToSampleRef.current,
-          position,
-          normal,
-          color
-        }, i);
-      } else {
-        dummy.position.copy(position);
-      }
-
-      dummy.updateMatrix();
-      instancedRef.current.setMatrixAt(i, dummy.matrix);
-    }
-
-    instancedRef.current.instanceMatrix.needsUpdate = true;
-  }, [children, mesh == null ? void 0 : mesh.current, instances == null ? void 0 : instances.current]);
-  return /*#__PURE__*/react.createElement("group", _extends({
-    ref: group
-  }, props), children);
-};
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/ComputedAttribute.js
-
-
-
-
-/**
- * Used exclusively as a child of a BufferGeometry.
- * Computes the BufferAttribute by calling the `compute` function
- * and attaches the attribute to the geometry.
- */
-const ComputedAttribute = ({
-  compute,
-  name,
-  ...props
-}) => {
-  const [bufferAttribute] = react.useState(() => new three_module.BufferAttribute(new Float32Array(0), 1));
-  const primitive = react.useRef(null);
-  react.useLayoutEffect(() => {
-    if (primitive.current) {
-      var _ref;
-
-      // @ts-expect-error brittle
-      const parent = (_ref = primitive.current.parent) !== null && _ref !== void 0 ? _ref : primitive.current.__r3f.parent;
-      const attr = compute(parent);
-      primitive.current.copy(attr);
-    }
-  }, [compute]);
-  return /*#__PURE__*/react.createElement("primitive", _extends({
-    ref: primitive,
-    object: bufferAttribute,
-    attachObject: ['attributes', name]
-  }, props));
-};
-
-
-
-// EXTERNAL MODULE: ./node_modules/lodash.pick/index.js
-var lodash_pick = __webpack_require__(25030);
-var lodash_pick_default = /*#__PURE__*/__webpack_require__.n(lodash_pick);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Clone.js
-
-
-
-
-function createSpread(child, {
-  keys = ['near', 'far', 'color', 'distance', 'decay', 'penumbra', 'angle', 'intensity', 'skeleton', 'visible', 'castShadow', 'receiveShadow', 'morphTargetDictionary', 'morphTargetInfluences', 'name', 'geometry', 'material', 'position', 'rotation', 'scale', 'up', 'userData'],
-  deep,
-  inject,
-  castShadow,
-  receiveShadow
-}) {
-  let spread = lodash_pick_default()(child, keys);
-
-  if (deep) {
-    if (spread.geometry && deep !== 'materialsOnly') spread.geometry = spread.geometry.clone();
-    if (spread.material && deep !== 'geometriesOnly') spread.material = spread.material.clone();
-  }
-
-  if (inject) {
-    if (typeof inject === 'function') spread = { ...spread,
-      children: inject(child)
-    };else if ( /*#__PURE__*/react.isValidElement(inject)) spread = { ...spread,
-      children: inject
-    };else spread = { ...spread,
-      ...inject
-    };
-  }
-
-  if (child.type === 'Mesh') {
-    if (castShadow) spread.castShadow = true;
-    if (receiveShadow) spread.receiveShadow = true;
-  }
-
-  return spread;
-}
-
-const Clone = /*#__PURE__*/react.forwardRef(({
-  object,
-  children,
-  deep,
-  castShadow,
-  receiveShadow,
-  inject,
-  keys,
-  ...props
-}, forwardRef) => {
-  const config = {
-    keys,
-    deep,
-    inject,
-    castShadow,
-    receiveShadow
-  }; // Deal with arrayed clones
-
-  if (Array.isArray(object)) {
-    return /*#__PURE__*/react.createElement("group", _extends({}, props, {
-      ref: forwardRef
-    }), object.map(o => /*#__PURE__*/react.createElement(Clone, _extends({
-      key: o.uuid,
-      object: o
-    }, config))), children);
-  } // Singleton clones
-
-
-  const {
-    children: injectChildren,
-    ...spread
-  } = createSpread(object, config);
-  const Element = object.type[0].toLowerCase() + object.type.slice(1);
-  return /*#__PURE__*/react.createElement(Element, _extends({}, spread, props, {
-    ref: forwardRef
-  }), (object == null ? void 0 : object.children).map(child => {
-    let spread = {};
-    let Element = child.type[0].toLowerCase() + child.type.slice(1);
-
-    if (Element === 'group' || Element === 'object3D') {
-      Element = Clone;
-      spread = {
-        object: child,
-        ...config
-      };
-    } else {
-      spread = createSpread(child, config);
-    }
-
-    return /*#__PURE__*/react.createElement(Element, _extends({
-      key: child.uuid
-    }, spread));
-  }), children, injectChildren);
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/OrthographicCamera.js
-
-
-
-
-
-const OrthographicCamera = /*#__PURE__*/react.forwardRef(({
-  makeDefault,
-  ...props
-}, ref) => {
-  const set = (0,react_three_fiber_esm.useThree)(({
-    set
-  }) => set);
-  const camera = (0,react_three_fiber_esm.useThree)(({
-    camera
-  }) => camera);
-  const size = (0,react_three_fiber_esm.useThree)(({
-    size
-  }) => size);
-  const cameraRef = react.useRef();
-  react.useLayoutEffect(() => {
-    if (cameraRef.current && !props.manual) {
-      cameraRef.current.updateProjectionMatrix();
-    }
-  }, [size, props]);
-  react.useLayoutEffect(() => {
-    if (makeDefault && cameraRef.current) {
-      const oldCam = camera;
-      set(() => ({
-        camera: cameraRef.current
-      }));
-      return () => set(() => ({
-        camera: oldCam
-      }));
-    }
-  }, [camera, cameraRef, makeDefault, set]);
-  return /*#__PURE__*/react.createElement("orthographicCamera", _extends({
-    left: size.width / -2,
-    right: size.width / 2,
-    top: size.height / 2,
-    bottom: size.height / -2,
-    ref: react_merge_refs_esm([cameraRef, ref])
-  }, props));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/PerspectiveCamera.js
-
-
-
-
-
-const PerspectiveCamera = /*#__PURE__*/react.forwardRef(({
-  makeDefault,
-  ...props
-}, ref) => {
-  const set = (0,react_three_fiber_esm.useThree)(({
-    set
-  }) => set);
-  const camera = (0,react_three_fiber_esm.useThree)(({
-    camera
-  }) => camera);
-  const size = (0,react_three_fiber_esm.useThree)(({
-    size
-  }) => size);
-  const cameraRef = react.useRef();
-  react.useLayoutEffect(() => {
-    const {
-      current: cam
-    } = cameraRef;
-
-    if (cam && !props.manual) {
-      cam.aspect = size.width / size.height;
-      cam.updateProjectionMatrix();
-    }
-  }, [size, props]);
-  react.useLayoutEffect(() => {
-    if (makeDefault && cameraRef.current) {
-      const oldCam = camera;
-      set(() => ({
-        camera: cameraRef.current
-      }));
-      return () => set(() => ({
-        camera: oldCam
-      }));
-    }
-  }, [camera, cameraRef, makeDefault, set]);
-  return /*#__PURE__*/react.createElement("perspectiveCamera", _extends({
-    ref: react_merge_refs_esm([cameraRef, ref])
-  }, props));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/CubeCamera.js
-
-
-
-
-function CubeCamera({
-  children,
-  fog,
-  frames = Infinity,
-  resolution = 256,
-  near = 1,
-  far = 1000,
-  ...props
-}) {
-  const ref = react.useRef();
-  const [camera, setCamera] = react.useState();
-  const scene = (0,react_three_fiber_esm.useThree)(({
-    scene
-  }) => scene);
-  const gl = (0,react_three_fiber_esm.useThree)(({
-    gl
-  }) => gl);
-  const fbo = react.useMemo(() => {
-    const fbo = new three_module.WebGLCubeRenderTarget(resolution);
-    fbo.texture.type = three_module.HalfFloatType;
-    return fbo;
-  }, [resolution]);
-  let count = 0;
-  (0,react_three_fiber_esm.useFrame)(() => {
-    if (camera && ref.current && (frames === Infinity || count < frames)) {
-      ref.current.traverse(obj => obj.visible = false);
-      const originalFog = scene.fog;
-      scene.fog = fog || originalFog;
-      camera.update(gl, scene);
-      scene.fog = originalFog;
-      ref.current.traverse(obj => obj.visible = true);
-      count++;
-    }
-  });
-  return /*#__PURE__*/react.createElement("group", props, /*#__PURE__*/react.createElement("cubeCamera", {
-    ref: setCamera,
-    args: [near, far, fbo]
-  }), /*#__PURE__*/react.createElement("group", {
-    ref: ref
-  }, children(fbo.texture)));
-}
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/DeviceOrientationControls.js
-var DeviceOrientationControls = __webpack_require__(41743);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/DeviceOrientationControls.js
-
-
-
-
-
-const DeviceOrientationControls_DeviceOrientationControls = /*#__PURE__*/react.forwardRef((props, ref) => {
-  const {
-    camera,
-    onChange,
-    ...rest
-  } = props;
-  const defaultCamera = (0,react_three_fiber_esm.useThree)(state => state.camera);
-  const invalidate = (0,react_three_fiber_esm.useThree)(state => state.invalidate);
-  const explCamera = camera || defaultCamera;
-  const [controls] = react.useState(() => new DeviceOrientationControls/* DeviceOrientationControls */.W(explCamera));
-  react.useEffect(() => {
-    const callback = e => {
-      invalidate();
-      if (onChange) onChange(e);
-    };
-
-    controls == null ? void 0 : controls.addEventListener == null ? void 0 : controls.addEventListener('change', callback);
-    return () => controls == null ? void 0 : controls.removeEventListener == null ? void 0 : controls.removeEventListener('change', callback);
-  }, [onChange, controls, invalidate]);
-  (0,react_three_fiber_esm.useFrame)(() => controls == null ? void 0 : controls.update());
-  react.useEffect(() => {
-    const current = controls;
-    current == null ? void 0 : current.connect();
-    return () => current == null ? void 0 : current.dispose();
-  }, [controls]);
-  return controls ? /*#__PURE__*/react.createElement("primitive", _extends({
-    ref: ref,
-    dispose: undefined,
-    object: controls
-  }, rest)) : null;
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/FlyControls.js
-var FlyControls = __webpack_require__(32044);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/FlyControls.js
-
-
-
-
-
-const FlyControls_FlyControls = /*#__PURE__*/react.forwardRef((props, ref) => {
-  const {
-    onChange,
-    ...rest
-  } = props;
-  const invalidate = (0,react_three_fiber_esm.useThree)(({
-    invalidate
-  }) => invalidate);
-  const camera = (0,react_three_fiber_esm.useThree)(({
-    camera
-  }) => camera);
-  const gl = (0,react_three_fiber_esm.useThree)(({
-    gl
-  }) => gl);
-  const [controls] = react.useState(() => new FlyControls/* FlyControls */.m(camera, gl.domElement));
-  react.useEffect(() => {
-    const callback = e => {
-      invalidate();
-      if (onChange) onChange(e);
-    };
-
-    controls == null ? void 0 : controls.addEventListener == null ? void 0 : controls.addEventListener('change', callback);
-    return () => controls == null ? void 0 : controls.removeEventListener == null ? void 0 : controls.removeEventListener('change', callback);
-  }, [onChange, controls, invalidate]);
-  (0,react_three_fiber_esm.useFrame)((_, delta) => controls == null ? void 0 : controls.update(delta));
-  return controls ? /*#__PURE__*/react.createElement("primitive", _extends({
-    ref: ref,
-    dispose: undefined,
-    object: controls
-  }, rest)) : null;
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/OrbitControls.js
-var OrbitControls = __webpack_require__(22227);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/MapControls.js
-
-
-
-
-
-const MapControls = /*#__PURE__*/react.forwardRef((props = {
-  enableDamping: true
-}, ref) => {
-  const {
-    camera,
-    onChange,
-    onStart,
-    onEnd,
-    ...rest
-  } = props;
-  const invalidate = (0,react_three_fiber_esm.useThree)(({
-    invalidate
-  }) => invalidate);
-  const defaultCamera = (0,react_three_fiber_esm.useThree)(({
-    camera
-  }) => camera);
-  const domElement = (0,react_three_fiber_esm.useThree)(({
-    gl
-  }) => gl.domElement);
-  const explCamera = camera || defaultCamera;
-  const controls = react.useMemo(() => new OrbitControls/* MapControls */.o(explCamera), [explCamera]);
-  react.useEffect(() => {
-    controls.connect(domElement);
-
-    const callback = e => {
-      invalidate();
-      if (onChange) onChange(e);
-    };
-
-    controls.addEventListener('change', callback);
-    if (onStart) controls.addEventListener('start', onStart);
-    if (onEnd) controls.addEventListener('end', onEnd);
-    return () => {
-      controls.dispose();
-      controls.removeEventListener('change', callback);
-      if (onStart) controls.removeEventListener('start', onStart);
-      if (onEnd) controls.removeEventListener('end', onEnd);
-    };
-  }, [onChange, onStart, onEnd, controls, invalidate, domElement]);
-  (0,react_three_fiber_esm.useFrame)(() => controls.update());
-  return /*#__PURE__*/react.createElement("primitive", _extends({
-    ref: ref,
-    dispose: undefined,
-    object: controls,
-    enableDamping: true
-  }, rest));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/OrbitControls.js
-
-
-
-
-
-const OrbitControls_OrbitControls = /*#__PURE__*/react.forwardRef(({
-  makeDefault,
-  camera,
-  regress,
-  domElement,
-  enableDamping = true,
-  onChange,
-  onStart,
-  onEnd,
-  ...restProps
-}, ref) => {
-  const invalidate = (0,react_three_fiber_esm.useThree)(state => state.invalidate);
-  const defaultCamera = (0,react_three_fiber_esm.useThree)(state => state.camera);
-  const gl = (0,react_three_fiber_esm.useThree)(state => state.gl);
-  const events = (0,react_three_fiber_esm.useThree)(state => state.events);
-  const set = (0,react_three_fiber_esm.useThree)(state => state.set);
-  const get = (0,react_three_fiber_esm.useThree)(state => state.get);
-  const performance = (0,react_three_fiber_esm.useThree)(state => state.performance);
-  const explCamera = camera || defaultCamera;
-  const explDomElement = domElement || events.connected || gl.domElement;
-  const controls = react.useMemo(() => new OrbitControls/* OrbitControls */.z(explCamera), [explCamera]);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    if (controls.enabled) controls.update();
-  });
-  react.useEffect(() => {
-    controls.connect(explDomElement);
-    return () => void controls.dispose();
-  }, [explDomElement, regress, controls, invalidate]);
-  react.useEffect(() => {
-    const callback = e => {
-      invalidate();
-      if (regress) performance.regress();
-      if (onChange) onChange(e);
-    };
-
-    controls.addEventListener('change', callback);
-    if (onStart) controls.addEventListener('start', onStart);
-    if (onEnd) controls.addEventListener('end', onEnd);
-    return () => {
-      if (onStart) controls.removeEventListener('start', onStart);
-      if (onEnd) controls.removeEventListener('end', onEnd);
-      controls.removeEventListener('change', callback);
-    };
-  }, [onChange, onStart, onEnd]);
-  react.useEffect(() => {
-    if (makeDefault) {
-      // @ts-expect-error new in @react-three/fiber@7.0.5
-      const old = get().controls; // @ts-expect-error new in @react-three/fiber@7.0.5
-
-      set({
-        controls
-      }); // @ts-expect-error new in @react-three/fiber@7.0.5
-
-      return () => set({
-        controls: old
-      });
-    }
-  }, [makeDefault, controls]);
-  return /*#__PURE__*/react.createElement("primitive", _extends({
-    ref: ref,
-    object: controls,
-    enableDamping: enableDamping
-  }, restProps));
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/TrackballControls.js
-var TrackballControls = __webpack_require__(7703);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/TrackballControls.js
-
-
-
-
-
-const TrackballControls_TrackballControls = /*#__PURE__*/react.forwardRef(({
-  makeDefault,
-  camera,
-  domElement,
-  regress,
-  onChange,
-  onStart,
-  onEnd,
-  ...restProps
-}, ref) => {
-  const {
-    invalidate,
-    camera: defaultCamera,
-    gl,
-    events,
-    set,
-    get,
-    performance,
-    viewport
-  } = (0,react_three_fiber_esm.useThree)();
-  const explCamera = camera || defaultCamera;
-  const explDomElement = domElement || events.connected || gl.domElement;
-  const controls = react.useMemo(() => new TrackballControls/* TrackballControls */.$(explCamera), [explCamera]);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    if (controls.enabled) controls.update();
-  });
-  react.useEffect(() => {
-    controls.connect(explDomElement);
-    return () => void controls.dispose();
-  }, [explDomElement, regress, controls, invalidate]);
-  react.useEffect(() => {
-    const callback = e => {
-      invalidate();
-      if (regress) performance.regress();
-      if (onChange) onChange(e);
-    };
-
-    controls.addEventListener('change', callback);
-    if (onStart) controls.addEventListener('start', onStart);
-    if (onEnd) controls.addEventListener('end', onEnd);
-    return () => {
-      if (onStart) controls.removeEventListener('start', onStart);
-      if (onEnd) controls.removeEventListener('end', onEnd);
-      controls.removeEventListener('change', callback);
-    };
-  }, [onChange, onStart, onEnd]);
-  react.useEffect(() => {
-    controls.handleResize();
-  }, [viewport]);
-  react.useEffect(() => {
-    if (makeDefault) {
-      // @ts-expect-error new in @react-three/fiber@7.0.5
-      const old = get().controls; // @ts-expect-error new in @react-three/fiber@7.0.5
-
-      set({
-        controls
-      }); // @ts-expect-error new in @react-three/fiber@7.0.5
-
-      return () => set({
-        controls: old
-      });
-    }
-  }, [makeDefault, controls]);
-  return /*#__PURE__*/react.createElement("primitive", _extends({
-    ref: ref,
-    object: controls
-  }, restProps));
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/ArcballControls.js
-var ArcballControls = __webpack_require__(1687);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/ArcballControls.js
-
-
-
-
-
-
-const ArcballControls_ArcballControls = /*#__PURE__*/(0,react.forwardRef)(({
-  camera,
-  makeDefault,
-  regress,
-  domElement,
-  onChange,
-  onStart,
-  onEnd,
-  ...restProps
-}, ref) => {
-  const invalidate = (0,react_three_fiber_esm.useThree)(state => state.invalidate);
-  const defaultCamera = (0,react_three_fiber_esm.useThree)(state => state.camera);
-  const gl = (0,react_three_fiber_esm.useThree)(state => state.gl);
-  const events = (0,react_three_fiber_esm.useThree)(state => state.events);
-  const set = (0,react_three_fiber_esm.useThree)(state => state.set);
-  const get = (0,react_three_fiber_esm.useThree)(state => state.get);
-  const performance = (0,react_three_fiber_esm.useThree)(state => state.performance);
-  const explCamera = camera || defaultCamera;
-  const explDomElement = domElement || events.connected || gl.domElement;
-  const controls = (0,react.useMemo)(() => new ArcballControls/* ArcballControls */.A(explCamera), [explCamera]);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    if (controls.enabled) controls.update();
-  });
-  (0,react.useEffect)(() => {
-    controls.connect(explDomElement);
-    return () => void controls.dispose();
-  }, [explDomElement, regress, controls, invalidate]);
-  (0,react.useEffect)(() => {
-    const callback = e => {
-      invalidate();
-      if (regress) performance.regress();
-      if (onChange) onChange(e);
-    };
-
-    controls.addEventListener('change', callback);
-    if (onStart) controls.addEventListener('start', onStart);
-    if (onEnd) controls.addEventListener('end', onEnd);
-    return () => {
-      controls.removeEventListener('change', callback);
-      if (onStart) controls.removeEventListener('start', onStart);
-      if (onEnd) controls.removeEventListener('end', onEnd);
-    };
-  }, [onChange, onStart, onEnd]);
-  (0,react.useEffect)(() => {
-    if (makeDefault) {
-      // @ts-expect-error new in @react-three/fiber@7.0.5
-      const old = get().controls; // @ts-expect-error new in @react-three/fiber@7.0.5
-
-      set({
-        controls
-      }); // @ts-expect-error new in @react-three/fiber@7.0.5
-
-      return () => set({
-        controls: old
-      });
-    }
-  }, [makeDefault, controls]);
-  return /*#__PURE__*/react.createElement("primitive", _extends({
-    ref: ref,
-    object: controls
-  }, restProps));
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/lodash.omit/index.js
-var lodash_omit = __webpack_require__(76427);
-var lodash_omit_default = /*#__PURE__*/__webpack_require__.n(lodash_omit);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/TransformControls.js
-var TransformControls = __webpack_require__(35041);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/TransformControls.js
-
-
-
-
-
-
-
-
-const TransformControls_TransformControls = /*#__PURE__*/react.forwardRef(({
-  children,
-  domElement,
-  onChange,
-  onMouseDown,
-  onMouseUp,
-  onObjectChange,
-  object,
-  ...props
-}, ref) => {
-  const transformOnlyPropNames = ['enabled', 'axis', 'mode', 'translationSnap', 'rotationSnap', 'scaleSnap', 'space', 'size', 'showX', 'showY', 'showZ'];
-  const {
-    camera,
-    ...rest
-  } = props;
-  const transformProps = lodash_pick_default()(rest, transformOnlyPropNames);
-  const objectProps = lodash_omit_default()(rest, transformOnlyPropNames); // @ts-expect-error new in @react-three/fiber@7.0.5
-
-  const defaultControls = (0,react_three_fiber_esm.useThree)(state => state.controls);
-  const gl = (0,react_three_fiber_esm.useThree)(state => state.gl);
-  const events = (0,react_three_fiber_esm.useThree)(state => state.events);
-  const defaultCamera = (0,react_three_fiber_esm.useThree)(state => state.camera);
-  const invalidate = (0,react_three_fiber_esm.useThree)(state => state.invalidate);
-  const explCamera = camera || defaultCamera;
-  const explDomElement = domElement || events.connected || gl.domElement;
-  const controls = react.useMemo(() => new TransformControls/* TransformControls */.Ys(explCamera, explDomElement), [explCamera, explDomElement]);
-  const group = react.useRef();
-  react.useLayoutEffect(() => {
-    if (object) {
-      controls.attach(object instanceof three_module.Object3D ? object : object.current);
-    } else if (group.current instanceof three_module.Object3D) {
-      controls.attach(group.current);
-    }
-
-    return () => void controls.detach();
-  }, [object, children, controls]);
-  react.useEffect(() => {
-    if (defaultControls) {
-      const callback = event => defaultControls.enabled = !event.value;
-
-      controls.addEventListener('dragging-changed', callback);
-      return () => controls.removeEventListener('dragging-changed', callback);
-    }
-  }, [controls, defaultControls]);
-  react.useEffect(() => {
-    const callback = e => {
-      invalidate();
-      if (onChange) onChange(e);
-    };
-
-    controls == null ? void 0 : controls.addEventListener == null ? void 0 : controls.addEventListener('change', callback);
-    if (onMouseDown) controls == null ? void 0 : controls.addEventListener == null ? void 0 : controls.addEventListener('mouseDown', onMouseDown);
-    if (onMouseUp) controls == null ? void 0 : controls.addEventListener == null ? void 0 : controls.addEventListener('mouseUp', onMouseUp);
-    if (onObjectChange) controls == null ? void 0 : controls.addEventListener == null ? void 0 : controls.addEventListener('objectChange', onObjectChange);
-    return () => {
-      controls == null ? void 0 : controls.removeEventListener == null ? void 0 : controls.removeEventListener('change', callback);
-      if (onMouseDown) controls == null ? void 0 : controls.removeEventListener == null ? void 0 : controls.removeEventListener('mouseDown', onMouseDown);
-      if (onMouseUp) controls == null ? void 0 : controls.removeEventListener == null ? void 0 : controls.removeEventListener('mouseUp', onMouseUp);
-      if (onObjectChange) controls == null ? void 0 : controls.removeEventListener == null ? void 0 : controls.removeEventListener('objectChange', onObjectChange);
-    };
-  }, [onChange, onMouseDown, onMouseUp, onObjectChange, controls, invalidate]);
-  return controls ? /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement("primitive", _extends({
-    ref: ref,
-    dispose: undefined,
-    object: controls
-  }, transformProps)), /*#__PURE__*/react.createElement("group", _extends({
-    ref: group
-  }, objectProps), children)) : null;
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/PointerLockControls.js
-var PointerLockControls = __webpack_require__(2679);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/PointerLockControls.js
-
-
-
-
-
-const PointerLockControls_PointerLockControls = /*#__PURE__*/react.forwardRef(({
-  domElement,
-  selector,
-  onChange,
-  onLock,
-  onUnlock,
-  enabled = true,
-  ...props
-}, ref) => {
-  const {
-    camera,
-    ...rest
-  } = props;
-  const gl = (0,react_three_fiber_esm.useThree)(({
-    gl
-  }) => gl);
-  const defaultCamera = (0,react_three_fiber_esm.useThree)(state => state.camera);
-  const invalidate = (0,react_three_fiber_esm.useThree)(state => state.invalidate);
-  const raycaster = (0,react_three_fiber_esm.useThree)(state => state.raycaster);
-  const events = (0,react_three_fiber_esm.useThree)(state => state.events);
-  const explCamera = camera || defaultCamera;
-  const explDomElement = domElement || events.connected || gl.domElement;
-  const [controls] = react.useState(() => new PointerLockControls/* PointerLockControls */.q(explCamera));
-  react.useEffect(() => {
-    if (enabled) {
-      controls.connect(explDomElement); // Force events to be centered while PLC is active
-
-      const oldComputeOffsets = raycaster.computeOffsets;
-
-      raycaster.computeOffsets = e => ({
-        offsetX: e.target.width / 2,
-        offsetY: e.target.height / 2
-      });
-
-      return () => {
-        controls.disconnect();
-        raycaster.computeOffsets = oldComputeOffsets;
-      };
-    }
-  }, [enabled, controls]);
-  react.useEffect(() => {
-    const callback = e => {
-      invalidate();
-      if (onChange) onChange(e);
-    };
-
-    controls.addEventListener('change', callback);
-    if (onLock) controls.addEventListener('lock', onLock);
-    if (onUnlock) controls.addEventListener('unlock', onUnlock); // Enforce previous interaction
-
-    const handler = () => controls.lock();
-
-    const elements = selector ? Array.from(document.querySelectorAll(selector)) : [document];
-    elements.forEach(element => element && element.addEventListener('click', handler));
-    return () => {
-      controls.removeEventListener('change', callback);
-      if (onLock) controls.addEventListener('lock', onLock);
-      if (onUnlock) controls.addEventListener('unlock', onUnlock);
-      elements.forEach(element => element ? element.removeEventListener('click', handler) : undefined);
-    };
-  }, [onChange, onLock, onUnlock, selector]);
-  return /*#__PURE__*/react.createElement("primitive", _extends({
-    ref: ref,
-    object: controls
-  }, rest));
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/FirstPersonControls.js
-var FirstPersonControls = __webpack_require__(55259);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/FirstPersonControls.js
-
-
-
-
-
-const FirstPersonControls_FirstPersonControls = /*#__PURE__*/react.forwardRef((props, ref) => {
-  const camera = (0,react_three_fiber_esm.useThree)(state => state.camera);
-  const gl = (0,react_three_fiber_esm.useThree)(state => state.gl);
-  const [controls] = react.useState(() => new FirstPersonControls/* FirstPersonControls */.o(camera, gl.domElement));
-  (0,react_three_fiber_esm.useFrame)((_, delta) => {
-    controls.update(delta);
-  });
-  return controls ? /*#__PURE__*/react.createElement("primitive", _extends({
-    ref: ref,
-    object: controls
-  }, props)) : null;
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useCamera.js
-
-
-
-
-function useCamera(camera, props) {
-  const mouse = (0,react_three_fiber_esm.useThree)(state => state.mouse);
-  const [raycast] = react.useState(() => {
-    const raycaster = new three_module.Raycaster();
-    /**
-     * applyProps is an internal method of r3f and
-     * therefore requires its first arg to be an
-     * "Instance" a term used with the Reconciler
-     * so we have an expect error to mask this
-     */
-    // @ts-expect-error
-
-    if (props) (0,react_three_fiber_esm.applyProps)(raycaster, props, {});
-    return function (_, intersects) {
-      raycaster.setFromCamera(mouse, camera instanceof three_module.Camera ? camera : camera.current);
-      const rc = this.constructor.prototype.raycast.bind(this);
-      if (rc) rc(raycaster, intersects);
-    };
-  });
-  return raycast;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/GizmoHelper.js
-
-
-
-
-
-
-const Context = /*#__PURE__*/react.createContext({});
-const useGizmoContext = () => {
-  return react.useContext(Context);
-};
-const turnRate = 2 * Math.PI; // turn rate in angles per second
-
-const dummy = new three_module.Object3D();
-const matrix = new three_module.Matrix4();
-const [q1, q2] = [new three_module.Quaternion(), new three_module.Quaternion()];
-const target = new three_module.Vector3();
-const targetPosition = new three_module.Vector3();
-const GizmoHelper = ({
-  alignment = 'bottom-right',
-  margin = [80, 80],
-  renderPriority = 0,
-  autoClear = true,
-  onUpdate,
-  onTarget,
-  children: GizmoHelperComponent
-}) => {
-  const size = (0,react_three_fiber_esm.useThree)(({
-    size
-  }) => size);
-  const mainCamera = (0,react_three_fiber_esm.useThree)(({
-    camera
-  }) => camera); // @ts-expect-error new in @react-three/fiber@7.0.5
-
-  const defaultControls = (0,react_three_fiber_esm.useThree)(({
-    controls
-  }) => controls);
-  const gl = (0,react_three_fiber_esm.useThree)(({
-    gl
-  }) => gl);
-  const scene = (0,react_three_fiber_esm.useThree)(({
-    scene
-  }) => scene);
-  const invalidate = (0,react_three_fiber_esm.useThree)(({
-    invalidate
-  }) => invalidate);
-  const backgroundRef = react.useRef();
-  const gizmoRef = react.useRef();
-  const virtualCam = react.useRef(null);
-  const [virtualScene] = react.useState(() => new three_module.Scene());
-  const animating = react.useRef(false);
-  const radius = react.useRef(0);
-  const focusPoint = react.useRef(new three_module.Vector3(0, 0, 0));
-  const tweenCamera = react.useCallback(direction => {
-    animating.current = true;
-    if (defaultControls || onTarget) focusPoint.current = (defaultControls == null ? void 0 : defaultControls.target) || (onTarget == null ? void 0 : onTarget());
-    radius.current = mainCamera.position.distanceTo(target); // Rotate from current camera orientation
-
-    q1.copy(mainCamera.quaternion); // To new current camera orientation
-
-    targetPosition.copy(direction).multiplyScalar(radius.current).add(target);
-    dummy.lookAt(targetPosition);
-    q2.copy(dummy.quaternion);
-    invalidate();
-  }, [defaultControls, mainCamera, onTarget, invalidate]);
-  react.useEffect(() => {
-    if (scene.background) {
-      //Interchange the actual scene background with the virtual scene
-      backgroundRef.current = scene.background;
-      scene.background = null;
-      virtualScene.background = backgroundRef.current;
-    }
-
-    return () => {
-      // reset on unmount
-      if (backgroundRef.current) scene.background = backgroundRef.current;
-    };
-  }, []);
-  (0,react_three_fiber_esm.useFrame)((_, delta) => {
-    if (virtualCam.current && gizmoRef.current) {
-      var _gizmoRef$current;
-
-      // Animate step
-      if (animating.current) {
-        if (q1.angleTo(q2) < 0.01) {
-          animating.current = false;
-        } else {
-          const step = delta * turnRate; // animate position by doing a slerp and then scaling the position on the unit sphere
-
-          q1.rotateTowards(q2, step); // animate orientation
-
-          mainCamera.position.set(0, 0, 1).applyQuaternion(q1).multiplyScalar(radius.current).add(focusPoint.current);
-          mainCamera.up.set(0, 1, 0).applyQuaternion(q1).normalize();
-          mainCamera.quaternion.copy(q1);
-          if (onUpdate) onUpdate();else if (defaultControls) defaultControls.update();
-          invalidate();
-        }
-      } // Sync Gizmo with main camera orientation
-
-
-      matrix.copy(mainCamera.matrix).invert();
-      (_gizmoRef$current = gizmoRef.current) == null ? void 0 : _gizmoRef$current.quaternion.setFromRotationMatrix(matrix); // Render virtual camera
-
-      if (autoClear) gl.autoClear = false;
-      gl.clearDepth();
-      gl.render(virtualScene, virtualCam.current);
-    }
-  }, renderPriority);
-  const raycast = useCamera(virtualCam);
-  const gizmoHelperContext = react.useMemo(() => ({
-    tweenCamera,
-    raycast
-  }), [tweenCamera]); // Position gizmo component within scene
-
-  const [marginX, marginY] = margin;
-  const x = alignment.endsWith('-left') ? -size.width / 2 + marginX : size.width / 2 - marginX;
-  const y = alignment.startsWith('top-') ? size.height / 2 - marginY : -size.height / 2 + marginY;
-  return (0,react_three_fiber_esm.createPortal)( /*#__PURE__*/react.createElement(Context.Provider, {
-    value: gizmoHelperContext
-  }, /*#__PURE__*/react.createElement(OrthographicCamera, {
-    ref: virtualCam,
-    position: [0, 0, 200]
-  }), /*#__PURE__*/react.createElement("group", {
-    ref: gizmoRef,
-    position: [x, y, 0]
-  }, GizmoHelperComponent)), virtualScene);
-};
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/GizmoViewcube.js
-
-
-
-
-
-
-const colors = {
-  bg: '#f0f0f0',
-  hover: '#999',
-  text: 'black',
-  stroke: 'black'
-};
-const defaultFaces = ['Right', 'Left', 'Top', 'Bottom', 'Front', 'Back'];
-
-const makePositionVector = xyz => new three_module.Vector3(...xyz).multiplyScalar(0.38);
-
-const corners = [[1, 1, 1], [1, 1, -1], [1, -1, 1], [1, -1, -1], [-1, 1, 1], [-1, 1, -1], [-1, -1, 1], [-1, -1, -1]].map(makePositionVector);
-const cornerDimensions = [0.25, 0.25, 0.25];
-const edges = [[1, 1, 0], [1, 0, 1], [1, 0, -1], [1, -1, 0], [0, 1, 1], [0, 1, -1], [0, -1, 1], [0, -1, -1], [-1, 1, 0], [-1, 0, 1], [-1, 0, -1], [-1, -1, 0]].map(makePositionVector);
-const edgeDimensions = edges.map(edge => edge.toArray().map(axis => axis == 0 ? 0.5 : 0.25));
-
-const FaceMaterial = ({
-  hover,
-  index,
-  font = '20px Inter var, Arial, sans-serif',
-  faces = defaultFaces,
-  color = colors.bg,
-  hoverColor = colors.hover,
-  textColor = colors.text,
-  strokeColor = colors.stroke,
-  opacity = 1
-}) => {
-  const gl = (0,react_three_fiber_esm.useThree)(state => state.gl);
-  const texture = react.useMemo(() => {
-    const canvas = document.createElement('canvas');
-    canvas.width = 128;
-    canvas.height = 128;
-    const context = canvas.getContext('2d');
-    context.fillStyle = color;
-    context.fillRect(0, 0, canvas.width, canvas.height);
-    context.strokeStyle = strokeColor;
-    context.strokeRect(0, 0, canvas.width, canvas.height);
-    context.font = font;
-    context.textAlign = 'center';
-    context.fillStyle = textColor;
-    context.fillText(faces[index].toUpperCase(), 64, 76);
-    return new three_module.CanvasTexture(canvas);
-  }, [index, faces, font, color, textColor, strokeColor]);
-  return /*#__PURE__*/react.createElement("meshLambertMaterial", {
-    map: texture,
-    "map-anisotropy": gl.capabilities.getMaxAnisotropy() || 1,
-    attachArray: "material",
-    color: hover ? hoverColor : 'white',
-    transparent: true,
-    opacity: opacity
-  });
-};
-
-const FaceCube = props => {
-  const {
-    tweenCamera,
-    raycast
-  } = useGizmoContext();
-  const [hover, setHover] = react.useState(null);
-
-  const handlePointerOut = e => {
-    e.stopPropagation();
-    setHover(null);
-  };
-
-  const handleClick = e => {
-    e.stopPropagation();
-    tweenCamera(e.face.normal);
-  };
-
-  const handlePointerMove = e => {
-    e.stopPropagation();
-    setHover(Math.floor(e.faceIndex / 2));
-  };
-
-  return /*#__PURE__*/react.createElement("mesh", {
-    raycast: raycast,
-    onPointerOut: handlePointerOut,
-    onPointerMove: handlePointerMove,
-    onClick: props.onClick || handleClick
-  }, [...Array(6)].map((_, index) => /*#__PURE__*/react.createElement(FaceMaterial, _extends({
-    key: index,
-    index: index,
-    hover: hover === index
-  }, props))), /*#__PURE__*/react.createElement("boxGeometry", null));
-};
-
-const EdgeCube = ({
-  onClick,
-  dimensions,
-  position,
-  hoverColor = colors.hover
-}) => {
-  const {
-    tweenCamera,
-    raycast
-  } = useGizmoContext();
-  const [hover, setHover] = react.useState(false);
-
-  const handlePointerOut = e => {
-    e.stopPropagation();
-    setHover(false);
-  };
-
-  const handlePointerOver = e => {
-    e.stopPropagation();
-    setHover(true);
-  };
-
-  const handleClick = e => {
-    e.stopPropagation();
-    tweenCamera(position);
-  };
-
-  return /*#__PURE__*/react.createElement("mesh", {
-    scale: 1.01,
-    position: position,
-    raycast: raycast,
-    onPointerOver: handlePointerOver,
-    onPointerOut: handlePointerOut,
-    onClick: onClick || handleClick
-  }, /*#__PURE__*/react.createElement("meshBasicMaterial", {
-    color: hover ? hoverColor : 'white',
-    transparent: true,
-    opacity: 0.6,
-    visible: hover
-  }), /*#__PURE__*/react.createElement("boxGeometry", {
-    args: dimensions
-  }));
-};
-
-const GizmoViewcube = props => {
-  return /*#__PURE__*/react.createElement("group", {
-    scale: [60, 60, 60]
-  }, /*#__PURE__*/react.createElement(FaceCube, props), edges.map((edge, index) => /*#__PURE__*/react.createElement(EdgeCube, _extends({
-    key: index,
-    position: edge,
-    dimensions: edgeDimensions[index]
-  }, props))), corners.map((corner, index) => /*#__PURE__*/react.createElement(EdgeCube, _extends({
-    key: index,
-    position: corner,
-    dimensions: cornerDimensions
-  }, props))), /*#__PURE__*/react.createElement("ambientLight", {
-    intensity: 0.5
-  }), /*#__PURE__*/react.createElement("pointLight", {
-    position: [10, 10, 10],
-    intensity: 0.5
-  }));
-};
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/GizmoViewport.js
-
-
-
-
-
-
-function Axis({
-  scale = [0.8, 0.05, 0.05],
-  color,
-  rotation
-}) {
-  return /*#__PURE__*/react.createElement("group", {
-    rotation: rotation
-  }, /*#__PURE__*/react.createElement("mesh", {
-    position: [0.4, 0, 0]
-  }, /*#__PURE__*/react.createElement("boxGeometry", {
-    args: scale
-  }), /*#__PURE__*/react.createElement("meshBasicMaterial", {
-    color: color,
-    toneMapped: false
-  })));
-}
-
-function AxisHead({
-  onClick,
-  font,
-  disabled,
-  arcStyle,
-  label,
-  labelColor,
-  axisHeadScale = 1,
-  ...props
-}) {
-  const gl = (0,react_three_fiber_esm.useThree)(state => state.gl);
-  const texture = react.useMemo(() => {
-    const canvas = document.createElement('canvas');
-    canvas.width = 64;
-    canvas.height = 64;
-    const context = canvas.getContext('2d');
-    context.beginPath();
-    context.arc(32, 32, 16, 0, 2 * Math.PI);
-    context.closePath();
-    context.fillStyle = arcStyle;
-    context.fill();
-
-    if (label) {
-      context.font = font;
-      context.textAlign = 'center';
-      context.fillStyle = labelColor;
-      context.fillText(label, 32, 41);
-    }
-
-    return new three_module.CanvasTexture(canvas);
-  }, [arcStyle, label, labelColor, font]);
-  const [active, setActive] = react.useState(false);
-  const scale = (label ? 1 : 0.75) * (active ? 1.2 : 1) * axisHeadScale;
-
-  const handlePointerOver = e => {
-    e.stopPropagation();
-    setActive(true);
-  };
-
-  const handlePointerOut = e => {
-    e.stopPropagation();
-    setActive(false);
-  };
-
-  return /*#__PURE__*/react.createElement("sprite", _extends({
-    scale: scale,
-    onPointerOver: !disabled ? handlePointerOver : undefined,
-    onPointerOut: !disabled ? onClick || handlePointerOut : undefined
-  }, props), /*#__PURE__*/react.createElement("spriteMaterial", {
-    map: texture,
-    "map-anisotropy": gl.capabilities.getMaxAnisotropy() || 1,
-    alphaTest: 0.3,
-    opacity: label ? 1 : 0.75,
-    toneMapped: false
-  }));
-}
-
-const GizmoViewport = ({
-  hideNegativeAxes,
-  hideAxisHeads,
-  disabled,
-  font = '18px Inter var, Arial, sans-serif',
-  axisColors = ['#ff3653', '#0adb50', '#2c8fdf'],
-  axisHeadScale = 1,
-  axisScale,
-  labels = ['X', 'Y', 'Z'],
-  labelColor = '#000',
-  onClick,
-  ...props
-}) => {
-  const [colorX, colorY, colorZ] = axisColors;
-  const {
-    tweenCamera,
-    raycast
-  } = useGizmoContext();
-  const axisHeadProps = {
-    font,
-    disabled,
-    labelColor,
-    raycast,
-    onClick,
-    axisHeadScale,
-    onPointerDown: !disabled ? e => {
-      tweenCamera(e.object.position);
-      e.stopPropagation();
-    } : undefined
-  };
-  return /*#__PURE__*/react.createElement("group", _extends({
-    scale: 40
-  }, props), /*#__PURE__*/react.createElement(Axis, {
-    color: colorX,
-    rotation: [0, 0, 0],
-    scale: axisScale
-  }), /*#__PURE__*/react.createElement(Axis, {
-    color: colorY,
-    rotation: [0, 0, Math.PI / 2],
-    scale: axisScale
-  }), /*#__PURE__*/react.createElement(Axis, {
-    color: colorZ,
-    rotation: [0, -Math.PI / 2, 0],
-    scale: axisScale
-  }), !hideAxisHeads && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(AxisHead, _extends({
-    arcStyle: colorX,
-    position: [1, 0, 0],
-    label: labels[0]
-  }, axisHeadProps)), /*#__PURE__*/react.createElement(AxisHead, _extends({
-    arcStyle: colorY,
-    position: [0, 1, 0],
-    label: labels[1]
-  }, axisHeadProps)), /*#__PURE__*/react.createElement(AxisHead, _extends({
-    arcStyle: colorZ,
-    position: [0, 0, 1],
-    label: labels[2]
-  }, axisHeadProps)), !hideNegativeAxes && /*#__PURE__*/react.createElement(react.Fragment, null, /*#__PURE__*/react.createElement(AxisHead, _extends({
-    arcStyle: colorX,
-    position: [-1, 0, 0]
-  }, axisHeadProps)), /*#__PURE__*/react.createElement(AxisHead, _extends({
-    arcStyle: colorY,
-    position: [0, -1, 0]
-  }, axisHeadProps)), /*#__PURE__*/react.createElement(AxisHead, _extends({
-    arcStyle: colorZ,
-    position: [0, 0, -1]
-  }, axisHeadProps)))), /*#__PURE__*/react.createElement("ambientLight", {
-    intensity: 0.5
-  }), /*#__PURE__*/react.createElement("pointLight", {
-    position: [10, 10, 10],
-    intensity: 0.5
-  }));
-};
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useCubeTexture.js
-
-
-
-function useCubeTexture(files, {
-  path
-}) {
-  // @ts-ignore
-  const [cubeTexture] = (0,react_three_fiber_esm.useLoader)( // @ts-ignore
-  three_module.CubeTextureLoader, [files], loader => loader.setPath(path));
-  return cubeTexture;
-}
-
-useCubeTexture.preload = (files, {
-  path
-}) => react_three_fiber_esm.useLoader.preload( // @ts-ignore
-three_module.CubeTextureLoader, [files], loader => loader.setPath(path));
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/loaders/FBXLoader.js
-var FBXLoader = __webpack_require__(43953);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useFBX.js
-
-
-
-function useFBX(path) {
-  return (0,react_three_fiber_esm.useLoader)(FBXLoader/* FBXLoader */.y, path);
-}
-
-useFBX.preload = path => react_three_fiber_esm.useLoader.preload(FBXLoader/* FBXLoader */.y, path); // @ts-expect-error new in r3f 7.0.5
-
-
-useFBX.clear = input => react_three_fiber_esm.useLoader.clear(FBXLoader/* FBXLoader */.y, input);
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/loaders/DRACOLoader.js
-var DRACOLoader = __webpack_require__(44976);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/libs/MeshoptDecoder.js
-var MeshoptDecoder = __webpack_require__(46295);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/loaders/GLTFLoader.js
-var GLTFLoader = __webpack_require__(17607);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useGLTF.js
-
-
-
-// @ts-ignore
-let dracoLoader = null;
-
-function extensions(useDraco, useMeshopt, extendLoader) {
-  return loader => {
-    if (extendLoader) {
-      extendLoader(loader);
-    }
-
-    if (useDraco) {
-      if (!dracoLoader) {
-        dracoLoader = new DRACOLoader/* DRACOLoader */._();
-      }
-
-      dracoLoader.setDecoderPath(typeof useDraco === 'string' ? useDraco : 'https://www.gstatic.com/draco/versioned/decoders/1.4.3/');
-      loader.setDRACOLoader(dracoLoader);
-    }
-
-    if (useMeshopt) {
-      loader.setMeshoptDecoder(typeof MeshoptDecoder/* MeshoptDecoder */.z === 'function' ? (0,MeshoptDecoder/* MeshoptDecoder */.z)() : MeshoptDecoder/* MeshoptDecoder */.z);
-    }
-  };
-}
-
-function useGLTF(path, useDraco = true, useMeshOpt = true, extendLoader) {
-  const gltf = (0,react_three_fiber_esm.useLoader)(GLTFLoader/* GLTFLoader */.E, path, extensions(useDraco, useMeshOpt, extendLoader));
-  return gltf;
-}
-
-useGLTF.preload = (path, useDraco = true, useMeshOpt = true, extendLoader) => react_three_fiber_esm.useLoader.preload(GLTFLoader/* GLTFLoader */.E, path, extensions(useDraco, useMeshOpt, extendLoader)); // @ts-expect-error new in r3f 7.0.5
-
-
-useGLTF.clear = input => react_three_fiber_esm.useLoader.clear(GLTFLoader/* GLTFLoader */.E, input);
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/loaders/KTX2Loader.js + 4 modules
-var KTX2Loader = __webpack_require__(28934);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useKTX2.js
-
-
-
-
-
-const cdn = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master';
-function useKTX2(input, basisPath = `${cdn}/basis/`) {
-  const gl = (0,react_three_fiber_esm.useThree)(state => state.gl);
-  const textures = (0,react_three_fiber_esm.useLoader)(KTX2Loader/* KTX2Loader */.a, IsObject(input) ? Object.values(input) : input, loader => {
-    loader.detectSupport(gl);
-    loader.setTranscoderPath(basisPath);
-  }); // https://github.com/mrdoob/three.js/issues/22696
-  // Upload the texture to the GPU immediately instead of waiting for the first render
-
-  (0,react.useEffect)(() => {
-    const array = Array.isArray(textures) ? textures : [textures];
-    array.forEach(gl.initTexture);
-  }, [gl, textures]);
-
-  if (IsObject(input)) {
-    const keys = Object.keys(input);
-    const keyed = {};
-    keys.forEach(key => Object.assign(keyed, {
-      [key]: textures[keys.indexOf(key)]
-    }));
-    return keyed;
-  } else {
-    return textures;
-  }
-}
-
-useKTX2.preload = (url, basisPath = `${cdn}/basis/`) => react_three_fiber_esm.useLoader.preload(KTX2Loader/* KTX2Loader */.a, url, loader => {
-  loader.setTranscoderPath(basisPath);
-}); // @ts-expect-error new in r3f 7.0.5
-
-
-useKTX2.clear = input => react_three_fiber_esm.useLoader.clear(KTX2Loader/* KTX2Loader */.a, input);
-
-
-
-// EXTERNAL MODULE: ./node_modules/stats.js/build/stats.min.js
-var stats_min = __webpack_require__(73466);
-var stats_min_default = /*#__PURE__*/__webpack_require__.n(stats_min);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/helpers/useEffectfulState.js
-
-
-function useEffectfulState_call(ref, value) {
-  if (typeof ref === 'function') ref(value);else if (ref != null) ref.current = value;
-}
-
-function useEffectfulState(fn, deps = [], cb) {
-  const [state, set] = react.useState();
-  react.useLayoutEffect(() => {
-    const value = fn();
-    set(value);
-    useEffectfulState_call(cb, value);
-    return () => useEffectfulState_call(cb, null);
-  }, deps);
-  return state;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Stats.js
-
-
-
-
-
-function Stats({
-  showPanel = 0,
-  className,
-  parent
-}) {
-  const stats = useEffectfulState(() => new (stats_min_default())(), []);
-  react.useEffect(() => {
-    if (stats) {
-      const node = parent && parent.current || document.body;
-      stats.showPanel(showPanel);
-      node == null ? void 0 : node.appendChild(stats.dom);
-      if (className) stats.dom.classList.add(...className.split(' ').filter(cls => cls));
-      const begin = (0,react_three_fiber_esm.addEffect)(() => stats.begin());
-      const end = (0,react_three_fiber_esm.addAfterEffect)(() => stats.end());
-      return () => {
-        node == null ? void 0 : node.removeChild(stats.dom);
-        begin();
-        end();
-      };
-    }
-  }, [parent, stats, className, showPanel]);
-  return null;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useFBO.js
-
-
-
-
-// 👇 uncomment when TS version supports function overloads
-// export function useFBO(settings?: FBOSettings)
-function useFBO(width, height, settings) {
-  const {
-    gl,
-    size
-  } = (0,react_three_fiber_esm.useThree)();
-  const dpr = react.useMemo(() => gl.getPixelRatio(), [gl]);
-
-  const _width = typeof width === 'number' ? width : size.width * dpr;
-
-  const _height = typeof height === 'number' ? height : size.height * dpr;
-
-  const _settings = (typeof width === 'number' ? settings : width) || {};
-
-  const {
-    samples,
-    ...targetSettings
-  } = _settings;
-  const target = react.useMemo(() => {
-    let target;
-    target = new three_module.WebGLRenderTarget(_width, _height, {
-      minFilter: three_module.LinearFilter,
-      magFilter: three_module.LinearFilter,
-      encoding: gl.outputEncoding,
-      type: three_module.HalfFloatType,
-      ...targetSettings
-    });
-    target.samples = samples;
-    return target;
-  }, []);
-  react.useLayoutEffect(() => {
-    target.setSize(_width, _height);
-    if (samples) target.samples = samples;
-  }, [samples, target, _width, _height]);
-  react.useEffect(() => {
-    return () => target.dispose();
-  }, []);
-  return target;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useDepthBuffer.js
-
-
-
-
-
-function useDepthBuffer({
-  size = 256,
-  frames = Infinity
-} = {}) {
-  const dpr = (0,react_three_fiber_esm.useThree)(state => state.viewport.dpr);
-  const {
-    width,
-    height
-  } = (0,react_three_fiber_esm.useThree)(state => state.size);
-  const w = size || width * dpr;
-  const h = size || height * dpr;
-  const depthConfig = react.useMemo(() => {
-    const depthTexture = new three_module.DepthTexture(w, h);
-    depthTexture.format = three_module.DepthFormat;
-    depthTexture.type = three_module.UnsignedShortType;
-    return {
-      depthTexture
-    };
-  }, [w, h]);
-  let count = 0;
-  const depthFBO = useFBO(w, h, depthConfig);
-  (0,react_three_fiber_esm.useFrame)(state => {
-    if (frames === Infinity || count < frames) {
-      state.gl.setRenderTarget(depthFBO);
-      state.gl.render(state.scene, state.camera);
-      state.gl.setRenderTarget(null);
-      count++;
-    }
-  });
-  return depthFBO.depthTexture;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useAspect.js
-
-
-function useAspect(width, height, factor = 1) {
-  const v = (0,react_three_fiber_esm.useThree)(state => state.viewport);
-  const adaptedHeight = height * (v.aspect > width / height ? v.width / width : v.height / height);
-  const adaptedWidth = width * (v.aspect > width / height ? v.width / width : v.height / height);
-  return [adaptedWidth * factor, adaptedHeight * factor, 1];
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/detect-gpu/dist/detect-gpu.esm.js
-function detect_gpu_esm_e(e,t,r,n){return new(r||(r=Promise))((function(o,a){function i(e){try{d(n.next(e))}catch(e){a(e)}}function c(e){try{d(n.throw(e))}catch(e){a(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,c)}d((n=n.apply(e,t||[])).next())}))}const t=["geforce 320m","geforce 8600","geforce 8600m gt","geforce 8800 gs","geforce 8800 gt","geforce 9400","geforce 9400m g","geforce 9400m","geforce 9600m gt","geforce 9600m","geforce fx go5200","geforce gt 120","geforce gt 130","geforce gt 330m","geforce gtx 285","google swiftshader","intel g41","intel g45","intel gma 4500mhd","intel gma x3100","intel hd 3000","intel q45","legacy","mali-2","mali-3","mali-4","quadro fx 1500","quadro fx 4","quadro fx 5","radeon hd 2400","radeon hd 2600","radeon hd 4670","radeon hd 4850","radeon hd 4870","radeon hd 5670","radeon hd 5750","radeon hd 6290","radeon hd 6300","radeon hd 6310","radeon hd 6320","radeon hd 6490m","radeon hd 6630m","radeon hd 6750m","radeon hd 6770m","radeon hd 6970m","sgx 543","sgx543"];function detect_gpu_esm_r(e){return e=e.toLowerCase().replace(/^angle ?\((.+)\)*$/,"$1").replace(/\s(\d{1,2}gb|direct3d.+$)|\(r\)| \([^)]+\)$/g,"").replace(/(?:vulkan|opengl) \d+\.\d+(?:\.\d+)?(?: \((.*)\))?/,"$1")}const n="undefined"==typeof window,detect_gpu_esm_o=(()=>{if(n)return;const{userAgent:e,platform:t,maxTouchPoints:r}=window.navigator,o=/(iphone|ipod|ipad)/i.test(e),a="iPad"===t||"MacIntel"===t&&r>0&&!window.MSStream;return{isIpad:a,isMobile:/android/i.test(e)||o||a,isSafari12:/Version\/12.+Safari/.test(e)}})();function a(e,t,r){if(!r)return[t];const n=function(e){const t="\n    precision highp float;\n    attribute vec3 aPosition;\n    varying float vvv;\n    void main() {\n      vvv = 0.31622776601683794;\n      gl_Position = vec4(aPosition, 1.0);\n    }\n  ",r="\n    precision highp float;\n    varying float vvv;\n    void main() {\n      vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * vvv;\n      enc = fract(enc);\n      enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\n      gl_FragColor = enc;\n    }\n  ",n=e.createShader(35633),o=e.createShader(35632),a=e.createProgram();if(!(o&&n&&a))return;e.shaderSource(n,t),e.shaderSource(o,r),e.compileShader(n),e.compileShader(o),e.attachShader(a,n),e.attachShader(a,o),e.linkProgram(a),e.detachShader(a,n),e.detachShader(a,o),e.deleteShader(n),e.deleteShader(o),e.useProgram(a);const i=e.createBuffer();e.bindBuffer(34962,i),e.bufferData(34962,new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),35044);const c=e.getAttribLocation(a,"aPosition");e.vertexAttribPointer(c,3,5126,!1,0,0),e.enableVertexAttribArray(c),e.clearColor(1,1,1,1),e.clear(16384),e.viewport(0,0,1,1),e.drawArrays(4,0,3);const d=new Uint8Array(4);return e.readPixels(0,0,1,1,6408,5121,d),e.deleteProgram(a),e.deleteBuffer(i),d.join("")}(e),a="801621810",i="8016218135",c="80162181161",d=(null==detect_gpu_esm_o?void 0:detect_gpu_esm_o.isIpad)?[["a7",c,12],["a8",i,15],["a8x",i,15],["a9",i,15],["a9x",i,15],["a10",i,15],["a10x",i,15],["a12",a,15],["a12x",a,15],["a12z",a,15],["a14",a,15],["m1",a,15]]:[["a7",c,12],["a8",i,12],["a9",i,15],["a10",i,15],["a11",a,15],["a12",a,15],["a13",a,15],["a14",a,15]];let l;"80162181255"===n?l=d.filter((([,,e])=>e>=14)):(l=d.filter((([,e])=>e===n)),l.length||(l=d));return l.map((([e])=>`apple ${e} gpu`))}const detect_gpu_esm_i=[],detect_gpu_esm_c=[];function detect_gpu_esm_d(e,t){if(e===t)return 0;const r=e;e.length>t.length&&(e=t,t=r);let n=e.length,o=t.length;for(;n>0&&e.charCodeAt(~-n)===t.charCodeAt(~-o);)n--,o--;let a,d=0;for(;d<n&&e.charCodeAt(d)===t.charCodeAt(d);)d++;if(n-=d,o-=d,0===n)return o;let l,s,f=0,u=0,h=0;for(;u<n;)detect_gpu_esm_c[u]=e.charCodeAt(d+u),detect_gpu_esm_i[u]=++u;for(;h<o;)for(a=t.charCodeAt(d+h),l=h++,f=h,u=0;u<n;u++)s=a===detect_gpu_esm_c[u]?l:l+1,l=detect_gpu_esm_i[u],f=detect_gpu_esm_i[u]=l>f?s>f?f+1:s:s>l?l+1:s;return f}function detect_gpu_esm_l(e){return null!=e}class detect_gpu_esm_s extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}const detect_gpu_esm_f=({mobileTiers:i=[0,15,30,60],desktopTiers:c=[0,15,30,60],override:f={},glContext:u,failIfMajorPerformanceCaveat:h=!1,benchmarksURL:g="https://unpkg.com/detect-gpu@4.0.50/dist/benchmarks"}={})=>detect_gpu_esm_e(void 0,void 0,void 0,(function*(){const p={};if(n)return{tier:0,type:"SSR"};const{isIpad:m=!!(null==detect_gpu_esm_o?void 0:detect_gpu_esm_o.isIpad),isMobile:v=!!(null==detect_gpu_esm_o?void 0:detect_gpu_esm_o.isMobile),screenSize:w=window.screen,loadBenchmarks:x=(t=>detect_gpu_esm_e(void 0,void 0,void 0,(function*(){const e=yield fetch(`${g}/${t}`).then((e=>e.json()));if(parseInt(e.shift().split(".")[0],10)<4)throw new detect_gpu_esm_s("Detect GPU benchmark data is out of date. Please update to version 4x");return e})))}=f;let{renderer:A}=f;const P=(e,t,r,n,o)=>({device:o,fps:n,gpu:r,isMobile:v,tier:e,type:t});let b,S="";if(A)A=detect_gpu_esm_r(A),b=[A];else{const e=u||function(e,t=!1){const r={alpha:!1,antialias:!1,depth:!1,failIfMajorPerformanceCaveat:t,powerPreference:"high-performance",stencil:!1};e&&delete r.powerPreference;const n=window.document.createElement("canvas"),o=n.getContext("webgl",r)||n.getContext("experimental-webgl",r);return null!=o?o:void 0}(null==detect_gpu_esm_o?void 0:detect_gpu_esm_o.isSafari12,h);if(!e)return P(0,"WEBGL_UNSUPPORTED");const t=e.getExtension("WEBGL_debug_renderer_info");if(t&&(A=e.getParameter(t.UNMASKED_RENDERER_WEBGL)),!A)return P(1,"FALLBACK");S=A,A=detect_gpu_esm_r(A),b=function(e,t,r){return"apple gpu"===t?a(e,t,r):[t]}(e,A,v)}const y=(yield Promise.all(b.map((function(t){var r;return detect_gpu_esm_e(this,void 0,void 0,(function*(){const e=(e=>{const t=v?["adreno","apple","mali-t","mali","nvidia","powervr"]:["intel","apple","amd","radeon","nvidia","geforce"];for(const r of t)if(e.includes(r))return r})(t);if(!e)return;const n=`${v?"m":"d"}-${e}${m?"-ipad":""}.json`,o=p[n]=null!==(r=p[n])&&void 0!==r?r:x(n);let a;try{a=yield o}catch(e){if(e instanceof detect_gpu_esm_s)throw e;return}const i=function(e){var t;const r=(e=e.replace(/\([^)]+\)/,"")).match(/\d+/)||e.match(/(\W|^)([A-Za-z]{1,3})(\W|$)/g);return null!==(t=null==r?void 0:r.join("").replace(/\W|amd/g,""))&&void 0!==t?t:""}(t);let c=a.filter((([,e])=>e===i));c.length||(c=a.filter((([e])=>e.includes(t))));const l=c.length;if(0===l)return;let f,[u,,,h]=l>1?c.map((e=>[e,detect_gpu_esm_d(t,e[0])])).sort((([,e],[,t])=>e-t))[0][0]:c[0],g=Number.MAX_VALUE;const{devicePixelRatio:A}=window,P=w.width*A*w.height*A;for(const e of h){const[t,r]=e,n=t*r,o=Math.abs(P-n);o<g&&(g=o,f=e)}if(!f)return;const[,,b,S]=f;return[g,b,u,S]}))})))).filter(detect_gpu_esm_l).sort((([e=Number.MAX_VALUE,t],[r=Number.MAX_VALUE,n])=>e===r?t-n:e-r));if(!y.length){const e=t.find((e=>A.includes(e)));return e?P(0,"BLOCKLISTED",e):P(1,"FALLBACK",`${A} (${S})`)}const[,C,E,L]=y[0];if(-1===C)return P(0,"BLOCKLISTED",E,C,L);const M=v?i:c;let $=0;for(let e=0;e<M.length;e++)C>=M[e]&&($=e);return P($,"BENCHMARK",E,C,L)}));
-//# sourceMappingURL=detect-gpu.esm.js.map
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useDetectGPU.js
-
-
-
-const useDetectGPU = props => suspend(() => detect_gpu_esm_f(props), ['useDetectGPU']);
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useHelper.js
-
-
-
-function useHelper(object3D, helperConstructor, ...args) {
-  const helper = react.useRef();
-  const scene = (0,react_three_fiber_esm.useThree)(state => state.scene);
-  react.useEffect(() => {
-    if (object3D) {
-      if (helperConstructor && object3D != null && object3D.current) {
-        helper.current = new helperConstructor(object3D.current, ...args);
-
-        if (helper.current) {
-          scene.add(helper.current);
-        }
-      }
-    }
-    /**
-     * Dispose of the helper if no object 3D is passed
-     */
-
-
-    if (!object3D && helper.current) {
-      scene.remove(helper.current);
-    }
-
-    return () => {
-      if (helper.current) {
-        scene.remove(helper.current);
-      }
-    };
-  }, [scene, helperConstructor, object3D, args]);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    var _helper$current;
-
-    if ((_helper$current = helper.current) != null && _helper$current.update) {
-      helper.current.update();
-    }
-  });
-  return helper;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/utils/ThreeRayIntersectUtilities.js
-
-
-// Ripped and modified From THREE.js Mesh raycast
-// https://github.com/mrdoob/three.js/blob/0aa87c999fe61e216c1133fba7a95772b503eddf/src/objects/Mesh.js#L115
-const vA = /* @__PURE__ */ new three_module.Vector3();
-const vB = /* @__PURE__ */ new three_module.Vector3();
-const vC = /* @__PURE__ */ new three_module.Vector3();
-
-const uvA = /* @__PURE__ */ new three_module.Vector2();
-const uvB = /* @__PURE__ */ new three_module.Vector2();
-const uvC = /* @__PURE__ */ new three_module.Vector2();
-
-const intersectionPoint = /* @__PURE__ */ new three_module.Vector3();
-function checkIntersection( ray, pA, pB, pC, point, side ) {
-
-	let intersect;
-	if ( side === three_module.BackSide ) {
-
-		intersect = ray.intersectTriangle( pC, pB, pA, true, point );
-
-	} else {
-
-		intersect = ray.intersectTriangle( pA, pB, pC, side !== three_module.DoubleSide, point );
-
-	}
-
-	if ( intersect === null ) return null;
-
-	const distance = ray.origin.distanceTo( point );
-
-	return {
-
-		distance: distance,
-		point: point.clone(),
-
-	};
-
-}
-
-function checkBufferGeometryIntersection( ray, position, uv, a, b, c, side ) {
-
-	vA.fromBufferAttribute( position, a );
-	vB.fromBufferAttribute( position, b );
-	vC.fromBufferAttribute( position, c );
-
-	const intersection = checkIntersection( ray, vA, vB, vC, intersectionPoint, side );
-
-	if ( intersection ) {
-
-		if ( uv ) {
-
-			uvA.fromBufferAttribute( uv, a );
-			uvB.fromBufferAttribute( uv, b );
-			uvC.fromBufferAttribute( uv, c );
-
-			intersection.uv = three_module.Triangle.getUV( intersectionPoint, vA, vB, vC, uvA, uvB, uvC, new three_module.Vector2( ) );
-
-		}
-
-		const face = {
-			a: a,
-			b: b,
-			c: c,
-			normal: new three_module.Vector3(),
-			materialIndex: 0
-		};
-
-		three_module.Triangle.getNormal( vA, vB, vC, face.normal );
-
-		intersection.face = face;
-		intersection.faceIndex = a;
-
-	}
-
-	return intersection;
-
-}
-
-// https://github.com/mrdoob/three.js/blob/0aa87c999fe61e216c1133fba7a95772b503eddf/src/objects/Mesh.js#L258
-function intersectTri( geo, side, ray, tri, intersections ) {
-
-	const triOffset = tri * 3;
-	const a = geo.index.getX( triOffset );
-	const b = geo.index.getX( triOffset + 1 );
-	const c = geo.index.getX( triOffset + 2 );
-
-	const intersection = checkBufferGeometryIntersection( ray, geo.attributes.position, geo.attributes.uv, a, b, c, side );
-
-	if ( intersection ) {
-
-		intersection.faceIndex = tri;
-		if ( intersections ) intersections.push( intersection );
-		return intersection;
-
-	}
-
-	return null;
-
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/utils/GeometryRayIntersectUtilities.js
-
-
-function intersectTris( geo, side, ray, offset, count, intersections ) {
-
-	for ( let i = offset, end = offset + count; i < end; i ++ ) {
-
-		intersectTri( geo, side, ray, i, intersections );
-
-	}
-
-}
-
-function intersectClosestTri( geo, side, ray, offset, count ) {
-
-	let dist = Infinity;
-	let res = null;
-	for ( let i = offset, end = offset + count; i < end; i ++ ) {
-
-		const intersection = intersectTri( geo, side, ray, i );
-		if ( intersection && intersection.distance < dist ) {
-
-			res = intersection;
-			dist = intersection.distance;
-
-		}
-
-	}
-
-	return res;
-
-}
-
-// converts the given BVH raycast intersection to align with the three.js raycast
-// structure (include object, world space distance and point).
-function convertRaycastIntersect( hit, object, raycaster ) {
-
-	if ( hit === null ) {
-
-		return null;
-
-	}
-
-	hit.point.applyMatrix4( object.matrixWorld );
-	hit.distance = hit.point.distanceTo( raycaster.ray.origin );
-	hit.object = object;
-
-	if ( hit.distance < raycaster.near || hit.distance > raycaster.far ) {
-
-		return null;
-
-	} else {
-
-		return hit;
-
-	}
-
-}
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/core/Constants.js
-// Split strategy constants
-const CENTER = 0;
-const AVERAGE = 1;
-const SAH = 2;
-
-// Traversal constants
-const NOT_INTERSECTED = 0;
-const INTERSECTED = 1;
-const CONTAINED = 2;
-
-// SAH cost constants
-// TODO: hone these costs more. The relative difference between them should be the
-// difference in measured time to perform a triangle intersection vs traversing
-// bounds.
-const TRIANGLE_INTERSECT_COST = 1.25;
-const TRAVERSAL_COST = 1;
-
-
-// Build constants
-const BYTES_PER_NODE = 6 * 4 + 4 + 4;
-const IS_LEAFNODE_FLAG = 0xFFFF;
-
-// EPSILON for computing floating point error during build
-// https://en.wikipedia.org/wiki/Machine_epsilon#Values_for_standard_hardware_floating_point_arithmetics
-const FLOAT32_EPSILON = Math.pow( 2, - 24 );
-
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/core/MeshBVHNode.js
-class MeshBVHNode {
-
-	constructor() {
-
-		// internal nodes have boundingData, left, right, and splitAxis
-		// leaf nodes have offset and count (referring to primitives in the mesh geometry)
-
-	}
-
-}
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/utils/ArrayBoxUtilities.js
-function arrayToBox( nodeIndex32, array, target ) {
-
-	target.min.x = array[ nodeIndex32 ];
-	target.min.y = array[ nodeIndex32 + 1 ];
-	target.min.z = array[ nodeIndex32 + 2 ];
-
-	target.max.x = array[ nodeIndex32 + 3 ];
-	target.max.y = array[ nodeIndex32 + 4 ];
-	target.max.z = array[ nodeIndex32 + 5 ];
-
-	return target;
-
-}
-
-function getLongestEdgeIndex( bounds ) {
-
-	let splitDimIdx = - 1;
-	let splitDist = - Infinity;
-
-	for ( let i = 0; i < 3; i ++ ) {
-
-		const dist = bounds[ i + 3 ] - bounds[ i ];
-		if ( dist > splitDist ) {
-
-			splitDist = dist;
-			splitDimIdx = i;
-
-		}
-
-	}
-
-	return splitDimIdx;
-
-}
-
-// copies bounds a into bounds b
-function copyBounds( source, target ) {
-
-	target.set( source );
-
-}
-
-// sets bounds target to the union of bounds a and b
-function unionBounds( a, b, target ) {
-
-	let aVal, bVal;
-	for ( let d = 0; d < 3; d ++ ) {
-
-		const d3 = d + 3;
-
-		// set the minimum values
-		aVal = a[ d ];
-		bVal = b[ d ];
-		target[ d ] = aVal < bVal ? aVal : bVal;
-
-		// set the max values
-		aVal = a[ d3 ];
-		bVal = b[ d3 ];
-		target[ d3 ] = aVal > bVal ? aVal : bVal;
-
-	}
-
-}
-
-// expands the given bounds by the provided triangle bounds
-function expandByTriangleBounds( startIndex, triangleBounds, bounds ) {
-
-	for ( let d = 0; d < 3; d ++ ) {
-
-		const tCenter = triangleBounds[ startIndex + 2 * d ];
-		const tHalf = triangleBounds[ startIndex + 2 * d + 1 ];
-
-		const tMin = tCenter - tHalf;
-		const tMax = tCenter + tHalf;
-
-		if ( tMin < bounds[ d ] ) {
-
-			bounds[ d ] = tMin;
-
-		}
-
-		if ( tMax > bounds[ d + 3 ] ) {
-
-			bounds[ d + 3 ] = tMax;
-
-		}
-
-	}
-
-}
-
-// compute bounds surface area
-function computeSurfaceArea( bounds ) {
-
-	const d0 = bounds[ 3 ] - bounds[ 0 ];
-	const d1 = bounds[ 4 ] - bounds[ 1 ];
-	const d2 = bounds[ 5 ] - bounds[ 2 ];
-
-	return 2 * ( d0 * d1 + d1 * d2 + d2 * d0 );
-
-}
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/core/buildFunctions.js
-
-
-
-
-
-function ensureIndex( geo, options ) {
-
-	if ( ! geo.index ) {
-
-		const vertexCount = geo.attributes.position.count;
-		const BufferConstructor = options.useSharedArrayBuffer ? SharedArrayBuffer : ArrayBuffer;
-		let index;
-		if ( vertexCount > 65535 ) {
-
-			index = new Uint32Array( new BufferConstructor( 4 * vertexCount ) );
-
-		} else {
-
-			index = new Uint16Array( new BufferConstructor( 2 * vertexCount ) );
-
-		}
-
-		geo.setIndex( new three_module.BufferAttribute( index, 1 ) );
-
-		for ( let i = 0; i < vertexCount; i ++ ) {
-
-			index[ i ] = i;
-
-		}
-
-	}
-
-}
-
-// Computes the set of { offset, count } ranges which need independent BVH roots. Each
-// region in the geometry index that belongs to a different set of material groups requires
-// a separate BVH root, so that triangles indices belonging to one group never get swapped
-// with triangle indices belongs to another group. For example, if the groups were like this:
-//
-// [-------------------------------------------------------------]
-// |__________________|
-//   g0 = [0, 20]  |______________________||_____________________|
-//                      g1 = [16, 40]           g2 = [41, 60]
-//
-// we would need four BVH roots: [0, 15], [16, 20], [21, 40], [41, 60].
-function getRootIndexRanges( geo ) {
-
-	if ( ! geo.groups || ! geo.groups.length ) {
-
-		return [ { offset: 0, count: geo.index.count / 3 } ];
-
-	}
-
-	const ranges = [];
-	const rangeBoundaries = new Set();
-	for ( const group of geo.groups ) {
-
-		rangeBoundaries.add( group.start );
-		rangeBoundaries.add( group.start + group.count );
-
-	}
-
-	// note that if you don't pass in a comparator, it sorts them lexicographically as strings :-(
-	const sortedBoundaries = Array.from( rangeBoundaries.values() ).sort( ( a, b ) => a - b );
-	for ( let i = 0; i < sortedBoundaries.length - 1; i ++ ) {
-
-		const start = sortedBoundaries[ i ], end = sortedBoundaries[ i + 1 ];
-		ranges.push( { offset: ( start / 3 ), count: ( end - start ) / 3 } );
-
-	}
-
-	return ranges;
-
-}
-
-// computes the union of the bounds of all of the given triangles and puts the resulting box in target. If
-// centroidTarget is provided then a bounding box is computed for the centroids of the triangles, as well.
-// These are computed together to avoid redundant accesses to bounds array.
-function getBounds( triangleBounds, offset, count, target, centroidTarget = null ) {
-
-	let minx = Infinity;
-	let miny = Infinity;
-	let minz = Infinity;
-	let maxx = - Infinity;
-	let maxy = - Infinity;
-	let maxz = - Infinity;
-
-	let cminx = Infinity;
-	let cminy = Infinity;
-	let cminz = Infinity;
-	let cmaxx = - Infinity;
-	let cmaxy = - Infinity;
-	let cmaxz = - Infinity;
-
-	const includeCentroid = centroidTarget !== null;
-	for ( let i = offset * 6, end = ( offset + count ) * 6; i < end; i += 6 ) {
-
-		const cx = triangleBounds[ i + 0 ];
-		const hx = triangleBounds[ i + 1 ];
-		const lx = cx - hx;
-		const rx = cx + hx;
-		if ( lx < minx ) minx = lx;
-		if ( rx > maxx ) maxx = rx;
-		if ( includeCentroid && cx < cminx ) cminx = cx;
-		if ( includeCentroid && cx > cmaxx ) cmaxx = cx;
-
-		const cy = triangleBounds[ i + 2 ];
-		const hy = triangleBounds[ i + 3 ];
-		const ly = cy - hy;
-		const ry = cy + hy;
-		if ( ly < miny ) miny = ly;
-		if ( ry > maxy ) maxy = ry;
-		if ( includeCentroid && cy < cminy ) cminy = cy;
-		if ( includeCentroid && cy > cmaxy ) cmaxy = cy;
-
-		const cz = triangleBounds[ i + 4 ];
-		const hz = triangleBounds[ i + 5 ];
-		const lz = cz - hz;
-		const rz = cz + hz;
-		if ( lz < minz ) minz = lz;
-		if ( rz > maxz ) maxz = rz;
-		if ( includeCentroid && cz < cminz ) cminz = cz;
-		if ( includeCentroid && cz > cmaxz ) cmaxz = cz;
-
-	}
-
-	target[ 0 ] = minx;
-	target[ 1 ] = miny;
-	target[ 2 ] = minz;
-
-	target[ 3 ] = maxx;
-	target[ 4 ] = maxy;
-	target[ 5 ] = maxz;
-
-	if ( includeCentroid ) {
-
-		centroidTarget[ 0 ] = cminx;
-		centroidTarget[ 1 ] = cminy;
-		centroidTarget[ 2 ] = cminz;
-
-		centroidTarget[ 3 ] = cmaxx;
-		centroidTarget[ 4 ] = cmaxy;
-		centroidTarget[ 5 ] = cmaxz;
-
-	}
-
-}
-
-// A stand alone function for retrieving the centroid bounds.
-function getCentroidBounds( triangleBounds, offset, count, centroidTarget ) {
-
-	let cminx = Infinity;
-	let cminy = Infinity;
-	let cminz = Infinity;
-	let cmaxx = - Infinity;
-	let cmaxy = - Infinity;
-	let cmaxz = - Infinity;
-
-	for ( let i = offset * 6, end = ( offset + count ) * 6; i < end; i += 6 ) {
-
-		const cx = triangleBounds[ i + 0 ];
-		if ( cx < cminx ) cminx = cx;
-		if ( cx > cmaxx ) cmaxx = cx;
-
-		const cy = triangleBounds[ i + 2 ];
-		if ( cy < cminy ) cminy = cy;
-		if ( cy > cmaxy ) cmaxy = cy;
-
-		const cz = triangleBounds[ i + 4 ];
-		if ( cz < cminz ) cminz = cz;
-		if ( cz > cmaxz ) cmaxz = cz;
-
-	}
-
-	centroidTarget[ 0 ] = cminx;
-	centroidTarget[ 1 ] = cminy;
-	centroidTarget[ 2 ] = cminz;
-
-	centroidTarget[ 3 ] = cmaxx;
-	centroidTarget[ 4 ] = cmaxy;
-	centroidTarget[ 5 ] = cmaxz;
-
-}
-
-
-// reorders `tris` such that for `count` elements after `offset`, elements on the left side of the split
-// will be on the left and elements on the right side of the split will be on the right. returns the index
-// of the first element on the right side, or offset + count if there are no elements on the right side.
-function partition( index, triangleBounds, offset, count, split ) {
-
-	let left = offset;
-	let right = offset + count - 1;
-	const pos = split.pos;
-	const axisOffset = split.axis * 2;
-
-	// hoare partitioning, see e.g. https://en.wikipedia.org/wiki/Quicksort#Hoare_partition_scheme
-	while ( true ) {
-
-		while ( left <= right && triangleBounds[ left * 6 + axisOffset ] < pos ) {
-
-			left ++;
-
-		}
-
-
-		// if a triangle center lies on the partition plane it is considered to be on the right side
-		while ( left <= right && triangleBounds[ right * 6 + axisOffset ] >= pos ) {
-
-			right --;
-
-		}
-
-		if ( left < right ) {
-
-			// we need to swap all of the information associated with the triangles at index
-			// left and right; that's the verts in the geometry index, the bounds,
-			// and perhaps the SAH planes
-
-			for ( let i = 0; i < 3; i ++ ) {
-
-				let t0 = index[ left * 3 + i ];
-				index[ left * 3 + i ] = index[ right * 3 + i ];
-				index[ right * 3 + i ] = t0;
-
-				let t1 = triangleBounds[ left * 6 + i * 2 + 0 ];
-				triangleBounds[ left * 6 + i * 2 + 0 ] = triangleBounds[ right * 6 + i * 2 + 0 ];
-				triangleBounds[ right * 6 + i * 2 + 0 ] = t1;
-
-				let t2 = triangleBounds[ left * 6 + i * 2 + 1 ];
-				triangleBounds[ left * 6 + i * 2 + 1 ] = triangleBounds[ right * 6 + i * 2 + 1 ];
-				triangleBounds[ right * 6 + i * 2 + 1 ] = t2;
-
-			}
-
-			left ++;
-			right --;
-
-		} else {
-
-			return left;
-
-		}
-
-	}
-
-}
-
-const BIN_COUNT = 32;
-const binsSort = ( a, b ) => a.candidate - b.candidate;
-const sahBins = new Array( BIN_COUNT ).fill().map( () => {
-
-	return {
-
-		count: 0,
-		bounds: new Float32Array( 6 ),
-		rightCacheBounds: new Float32Array( 6 ),
-		leftCacheBounds: new Float32Array( 6 ),
-		candidate: 0,
-
-	};
-
-} );
-const leftBounds = new Float32Array( 6 );
-
-function getOptimalSplit( nodeBoundingData, centroidBoundingData, triangleBounds, offset, count, strategy ) {
-
-	let axis = - 1;
-	let pos = 0;
-
-	// Center
-	if ( strategy === CENTER ) {
-
-		axis = getLongestEdgeIndex( centroidBoundingData );
-		if ( axis !== - 1 ) {
-
-			pos = ( centroidBoundingData[ axis ] + centroidBoundingData[ axis + 3 ] ) / 2;
-
-		}
-
-	} else if ( strategy === AVERAGE ) {
-
-		axis = getLongestEdgeIndex( nodeBoundingData );
-		if ( axis !== - 1 ) {
-
-			pos = getAverage( triangleBounds, offset, count, axis );
-
-		}
-
-	} else if ( strategy === SAH ) {
-
-		const rootSurfaceArea = computeSurfaceArea( nodeBoundingData );
-		let bestCost = TRIANGLE_INTERSECT_COST * count;
-
-		// iterate over all axes
-		const cStart = offset * 6;
-		const cEnd = ( offset + count ) * 6;
-		for ( let a = 0; a < 3; a ++ ) {
-
-			const axisLeft = centroidBoundingData[ a ];
-			const axisRight = centroidBoundingData[ a + 3 ];
-			const axisLength = axisRight - axisLeft;
-			const binWidth = axisLength / BIN_COUNT;
-
-			// If we have fewer triangles than we're planning to split then just check all
-			// the triangle positions because it will be faster.
-			if ( count < BIN_COUNT / 4 ) {
-
-				// initialize the bin candidates
-				const truncatedBins = [ ...sahBins ];
-				truncatedBins.length = count;
-
-				// set the candidates
-				let b = 0;
-				for ( let c = cStart; c < cEnd; c += 6, b ++ ) {
-
-					const bin = truncatedBins[ b ];
-					bin.candidate = triangleBounds[ c + 2 * a ];
-					bin.count = 0;
-
-					const {
-						bounds,
-						leftCacheBounds,
-						rightCacheBounds,
-					} = bin;
-					for ( let d = 0; d < 3; d ++ ) {
-
-						rightCacheBounds[ d ] = Infinity;
-						rightCacheBounds[ d + 3 ] = - Infinity;
-
-						leftCacheBounds[ d ] = Infinity;
-						leftCacheBounds[ d + 3 ] = - Infinity;
-
-						bounds[ d ] = Infinity;
-						bounds[ d + 3 ] = - Infinity;
-
-					}
-
-					expandByTriangleBounds( c, triangleBounds, bounds );
-
-				}
-
-				truncatedBins.sort( binsSort );
-
-				// remove redundant splits
-				let splitCount = count;
-				for ( let bi = 0; bi < splitCount; bi ++ ) {
-
-					const bin = truncatedBins[ bi ];
-					while ( bi + 1 < splitCount && truncatedBins[ bi + 1 ].candidate === bin.candidate ) {
-
-						truncatedBins.splice( bi + 1, 1 );
-						splitCount --;
-
-					}
-
-				}
-
-				// find the appropriate bin for each triangle and expand the bounds.
-				for ( let c = cStart; c < cEnd; c += 6 ) {
-
-					const center = triangleBounds[ c + 2 * a ];
-					for ( let bi = 0; bi < splitCount; bi ++ ) {
-
-						const bin = truncatedBins[ bi ];
-						if ( center >= bin.candidate ) {
-
-							expandByTriangleBounds( c, triangleBounds, bin.rightCacheBounds );
-
-						} else {
-
-							expandByTriangleBounds( c, triangleBounds, bin.leftCacheBounds );
-							bin.count ++;
-
-						}
-
-					}
-
-				}
-
-				// expand all the bounds
-				for ( let bi = 0; bi < splitCount; bi ++ ) {
-
-					const bin = truncatedBins[ bi ];
-					const leftCount = bin.count;
-					const rightCount = count - bin.count;
-
-					// check the cost of this split
-					const leftBounds = bin.leftCacheBounds;
-					const rightBounds = bin.rightCacheBounds;
-
-					let leftProb = 0;
-					if ( leftCount !== 0 ) {
-
-						leftProb = computeSurfaceArea( leftBounds ) / rootSurfaceArea;
-
-					}
-
-					let rightProb = 0;
-					if ( rightCount !== 0 ) {
-
-						rightProb = computeSurfaceArea( rightBounds ) / rootSurfaceArea;
-
-					}
-
-					const cost = TRAVERSAL_COST + TRIANGLE_INTERSECT_COST * (
-						leftProb * leftCount + rightProb * rightCount
-					);
-
-					if ( cost < bestCost ) {
-
-						axis = a;
-						bestCost = cost;
-						pos = bin.candidate;
-
-					}
-
-				}
-
-			} else {
-
-				// reset the bins
-				for ( let i = 0; i < BIN_COUNT; i ++ ) {
-
-					const bin = sahBins[ i ];
-					bin.count = 0;
-					bin.candidate = axisLeft + binWidth + i * binWidth;
-
-					const bounds = bin.bounds;
-					for ( let d = 0; d < 3; d ++ ) {
-
-						bounds[ d ] = Infinity;
-						bounds[ d + 3 ] = - Infinity;
-
-					}
-
-				}
-
-				// iterate over all center positions
-				for ( let c = cStart; c < cEnd; c += 6 ) {
-
-					const triCenter = triangleBounds[ c + 2 * a ];
-					const relativeCenter = triCenter - axisLeft;
-
-					// in the partition function if the centroid lies on the split plane then it is
-					// considered to be on the right side of the split
-					let binIndex = ~ ~ ( relativeCenter / binWidth );
-					if ( binIndex >= BIN_COUNT ) binIndex = BIN_COUNT - 1;
-
-					const bin = sahBins[ binIndex ];
-					bin.count ++;
-
-					expandByTriangleBounds( c, triangleBounds, bin.bounds );
-
-				}
-
-				// cache the unioned bounds from right to left so we don't have to regenerate them each time
-				const lastBin = sahBins[ BIN_COUNT - 1 ];
-				copyBounds( lastBin.bounds, lastBin.rightCacheBounds );
-				for ( let i = BIN_COUNT - 2; i >= 0; i -- ) {
-
-					const bin = sahBins[ i ];
-					const nextBin = sahBins[ i + 1 ];
-					unionBounds( bin.bounds, nextBin.rightCacheBounds, bin.rightCacheBounds );
-
-				}
-
-				let leftCount = 0;
-				for ( let i = 0; i < BIN_COUNT - 1; i ++ ) {
-
-					const bin = sahBins[ i ];
-					const binCount = bin.count;
-					const bounds = bin.bounds;
-
-					const nextBin = sahBins[ i + 1 ];
-					const rightBounds = nextBin.rightCacheBounds;
-
-					// don't do anything with the bounds if the new bounds have no triangles
-					if ( binCount !== 0 ) {
-
-						if ( leftCount === 0 ) {
-
-							copyBounds( bounds, leftBounds );
-
-						} else {
-
-							unionBounds( bounds, leftBounds, leftBounds );
-
-						}
-
-					}
-
-					leftCount += binCount;
-
-					// check the cost of this split
-					let leftProb = 0;
-					let rightProb = 0;
-
-					if ( leftCount !== 0 ) {
-
-						leftProb = computeSurfaceArea( leftBounds ) / rootSurfaceArea;
-
-					}
-
-					const rightCount = count - leftCount;
-					if ( rightCount !== 0 ) {
-
-						rightProb = computeSurfaceArea( rightBounds ) / rootSurfaceArea;
-
-					}
-
-					const cost = TRAVERSAL_COST + TRIANGLE_INTERSECT_COST * (
-						leftProb * leftCount + rightProb * rightCount
-					);
-
-					if ( cost < bestCost ) {
-
-						axis = a;
-						bestCost = cost;
-						pos = bin.candidate;
-
-					}
-
-				}
-
-			}
-
-		}
-
-	} else {
-
-		console.warn( `MeshBVH: Invalid build strategy value ${ strategy } used.` );
-
-	}
-
-	return { axis, pos };
-
-}
-
-// returns the average coordinate on the specified axis of the all the provided triangles
-function getAverage( triangleBounds, offset, count, axis ) {
-
-	let avg = 0;
-	for ( let i = offset, end = offset + count; i < end; i ++ ) {
-
-		avg += triangleBounds[ i * 6 + axis * 2 ];
-
-	}
-
-	return avg / count;
-
-}
-
-// precomputes the bounding box for each triangle; required for quickly calculating tree splits.
-// result is an array of size tris.length * 6 where triangle i maps to a
-// [x_center, x_delta, y_center, y_delta, z_center, z_delta] tuple starting at index i * 6,
-// representing the center and half-extent in each dimension of triangle i
-function computeTriangleBounds( geo, fullBounds ) {
-
-	const posAttr = geo.attributes.position;
-	const index = geo.index.array;
-	const triCount = index.length / 3;
-	const triangleBounds = new Float32Array( triCount * 6 );
-	const normalized = posAttr.normalized;
-
-	// used for non-normalized positions
-	const posArr = posAttr.array;
-
-	// support for an interleaved position buffer
-	const bufferOffset = posAttr.offset || 0;
-	let stride = 3;
-	if ( posAttr.isInterleavedBufferAttribute ) {
-
-		stride = posAttr.data.stride;
-
-	}
-
-	// used for normalized positions
-	const getters = [ 'getX', 'getY', 'getZ' ];
-
-	for ( let tri = 0; tri < triCount; tri ++ ) {
-
-		const tri3 = tri * 3;
-		const tri6 = tri * 6;
-
-		let ai, bi, ci;
-
-		if ( normalized ) {
-
-			ai = index[ tri3 + 0 ];
-			bi = index[ tri3 + 1 ];
-			ci = index[ tri3 + 2 ];
-
-		} else {
-
-			ai = index[ tri3 + 0 ] * stride + bufferOffset;
-			bi = index[ tri3 + 1 ] * stride + bufferOffset;
-			ci = index[ tri3 + 2 ] * stride + bufferOffset;
-
-		}
-
-		for ( let el = 0; el < 3; el ++ ) {
-
-			let a, b, c;
-
-			if ( normalized ) {
-
-				a = posAttr[ getters[ el ] ]( ai );
-				b = posAttr[ getters[ el ] ]( bi );
-				c = posAttr[ getters[ el ] ]( ci );
-
-			} else {
-
-				a = posArr[ ai + el ];
-				b = posArr[ bi + el ];
-				c = posArr[ ci + el ];
-
-			}
-
-			let min = a;
-			if ( b < min ) min = b;
-			if ( c < min ) min = c;
-
-			let max = a;
-			if ( b > max ) max = b;
-			if ( c > max ) max = c;
-
-			// Increase the bounds size by float32 epsilon to avoid precision errors when
-			// converting to 32 bit float. Scale the epsilon by the size of the numbers being
-			// worked with.
-			const halfExtents = ( max - min ) / 2;
-			const el2 = el * 2;
-			triangleBounds[ tri6 + el2 + 0 ] = min + halfExtents;
-			triangleBounds[ tri6 + el2 + 1 ] = halfExtents + ( Math.abs( min ) + halfExtents ) * FLOAT32_EPSILON;
-
-			if ( min < fullBounds[ el ] ) fullBounds[ el ] = min;
-			if ( max > fullBounds[ el + 3 ] ) fullBounds[ el + 3 ] = max;
-
-		}
-
-	}
-
-	return triangleBounds;
-
-}
-
-function buildTree( geo, options ) {
-
-	function triggerProgress( trianglesProcessed ) {
-
-		if ( onProgress ) {
-
-			onProgress( trianglesProcessed / totalTriangles );
-
-		}
-
-	}
-
-	// either recursively splits the given node, creating left and right subtrees for it, or makes it a leaf node,
-	// recording the offset and count of its triangles and writing them into the reordered geometry index.
-	function splitNode( node, offset, count, centroidBoundingData = null, depth = 0 ) {
-
-		if ( ! reachedMaxDepth && depth >= maxDepth ) {
-
-			reachedMaxDepth = true;
-			if ( verbose ) {
-
-				console.warn( `MeshBVH: Max depth of ${ maxDepth } reached when generating BVH. Consider increasing maxDepth.` );
-				console.warn( geo );
-
-			}
-
-		}
-
-		// early out if we've met our capacity
-		if ( count <= maxLeafTris || depth >= maxDepth ) {
-
-			triggerProgress( offset + count );
-			node.offset = offset;
-			node.count = count;
-			return node;
-
-		}
-
-		// Find where to split the volume
-		const split = getOptimalSplit( node.boundingData, centroidBoundingData, triangleBounds, offset, count, strategy );
-		if ( split.axis === - 1 ) {
-
-			triggerProgress( offset + count );
-			node.offset = offset;
-			node.count = count;
-			return node;
-
-		}
-
-		const splitOffset = partition( indexArray, triangleBounds, offset, count, split );
-
-		// create the two new child nodes
-		if ( splitOffset === offset || splitOffset === offset + count ) {
-
-			triggerProgress( offset + count );
-			node.offset = offset;
-			node.count = count;
-
-		} else {
-
-			node.splitAxis = split.axis;
-
-			// create the left child and compute its bounding box
-			const left = new MeshBVHNode();
-			const lstart = offset;
-			const lcount = splitOffset - offset;
-			node.left = left;
-			left.boundingData = new Float32Array( 6 );
-
-			getBounds( triangleBounds, lstart, lcount, left.boundingData, cacheCentroidBoundingData );
-			splitNode( left, lstart, lcount, cacheCentroidBoundingData, depth + 1 );
-
-			// repeat for right
-			const right = new MeshBVHNode();
-			const rstart = splitOffset;
-			const rcount = count - lcount;
-			node.right = right;
-			right.boundingData = new Float32Array( 6 );
-
-			getBounds( triangleBounds, rstart, rcount, right.boundingData, cacheCentroidBoundingData );
-			splitNode( right, rstart, rcount, cacheCentroidBoundingData, depth + 1 );
-
-		}
-
-		return node;
-
-	}
-
-	ensureIndex( geo, options );
-
-	// Compute the full bounds of the geometry at the same time as triangle bounds because
-	// we'll need it for the root bounds in the case with no groups and it should be fast here.
-	// We can't use the geometrying bounding box if it's available because it may be out of date.
-	const fullBounds = new Float32Array( 6 );
-	const cacheCentroidBoundingData = new Float32Array( 6 );
-	const triangleBounds = computeTriangleBounds( geo, fullBounds );
-	const indexArray = geo.index.array;
-	const maxDepth = options.maxDepth;
-	const verbose = options.verbose;
-	const maxLeafTris = options.maxLeafTris;
-	const strategy = options.strategy;
-	const onProgress = options.onProgress;
-	const totalTriangles = geo.index.count / 3;
-	let reachedMaxDepth = false;
-
-	const roots = [];
-	const ranges = getRootIndexRanges( geo );
-
-	if ( ranges.length === 1 ) {
-
-		const range = ranges[ 0 ];
-		const root = new MeshBVHNode();
-		root.boundingData = fullBounds;
-		getCentroidBounds( triangleBounds, range.offset, range.count, cacheCentroidBoundingData );
-
-		splitNode( root, range.offset, range.count, cacheCentroidBoundingData );
-		roots.push( root );
-
-	} else {
-
-		for ( let range of ranges ) {
-
-			const root = new MeshBVHNode();
-			root.boundingData = new Float32Array( 6 );
-			getBounds( triangleBounds, range.offset, range.count, root.boundingData, cacheCentroidBoundingData );
-
-			splitNode( root, range.offset, range.count, cacheCentroidBoundingData );
-			roots.push( root );
-
-		}
-
-	}
-
-	return roots;
-
-}
-
-function buildPackedTree( geo, options ) {
-
-	// boundingData  				: 6 float32
-	// right / offset 				: 1 uint32
-	// splitAxis / isLeaf + count 	: 1 uint32 / 2 uint16
-	const roots = buildTree( geo, options );
-
-	let float32Array;
-	let uint32Array;
-	let uint16Array;
-	const packedRoots = [];
-	const BufferConstructor = options.useSharedArrayBuffer ? SharedArrayBuffer : ArrayBuffer;
-	for ( let i = 0; i < roots.length; i ++ ) {
-
-		const root = roots[ i ];
-		let nodeCount = countNodes( root );
-
-		const buffer = new BufferConstructor( BYTES_PER_NODE * nodeCount );
-		float32Array = new Float32Array( buffer );
-		uint32Array = new Uint32Array( buffer );
-		uint16Array = new Uint16Array( buffer );
-		populateBuffer( 0, root );
-		packedRoots.push( buffer );
-
-	}
-
-	return packedRoots;
-
-	function countNodes( node ) {
-
-		if ( node.count ) {
-
-			return 1;
-
-		} else {
-
-			return 1 + countNodes( node.left ) + countNodes( node.right );
-
-		}
-
-	}
-
-	function populateBuffer( byteOffset, node ) {
-
-		const stride4Offset = byteOffset / 4;
-		const stride2Offset = byteOffset / 2;
-		const isLeaf = ! ! node.count;
-		const boundingData = node.boundingData;
-		for ( let i = 0; i < 6; i ++ ) {
-
-			float32Array[ stride4Offset + i ] = boundingData[ i ];
-
-		}
-
-		if ( isLeaf ) {
-
-			const offset = node.offset;
-			const count = node.count;
-			uint32Array[ stride4Offset + 6 ] = offset;
-			uint16Array[ stride2Offset + 14 ] = count;
-			uint16Array[ stride2Offset + 15 ] = IS_LEAFNODE_FLAG;
-			return byteOffset + BYTES_PER_NODE;
-
-		} else {
-
-			const left = node.left;
-			const right = node.right;
-			const splitAxis = node.splitAxis;
-
-			let nextUnusedPointer;
-			nextUnusedPointer = populateBuffer( byteOffset + BYTES_PER_NODE, left );
-
-			if ( ( nextUnusedPointer / 4 ) > Math.pow( 2, 32 ) ) {
-
-				throw new Error( 'MeshBVH: Cannot store child pointer greater than 32 bits.' );
-
-			}
-
-			uint32Array[ stride4Offset + 6 ] = nextUnusedPointer / 4;
-			nextUnusedPointer = populateBuffer( nextUnusedPointer, right );
-
-			uint32Array[ stride4Offset + 7 ] = splitAxis;
-			return nextUnusedPointer;
-
-		}
-
-	}
-
-}
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/math/SeparatingAxisBounds.js
-
-
-class SeparatingAxisBounds {
-
-	constructor() {
-
-		this.min = Infinity;
-		this.max = - Infinity;
-
-	}
-
-	setFromPointsField( points, field ) {
-
-		let min = Infinity;
-		let max = - Infinity;
-		for ( let i = 0, l = points.length; i < l; i ++ ) {
-
-			const p = points[ i ];
-			const val = p[ field ];
-			min = val < min ? val : min;
-			max = val > max ? val : max;
-
-		}
-
-		this.min = min;
-		this.max = max;
-
-	}
-
-	setFromPoints( axis, points ) {
-
-		let min = Infinity;
-		let max = - Infinity;
-		for ( let i = 0, l = points.length; i < l; i ++ ) {
-
-			const p = points[ i ];
-			const val = axis.dot( p );
-			min = val < min ? val : min;
-			max = val > max ? val : max;
-
-		}
-
-		this.min = min;
-		this.max = max;
-
-	}
-
-	isSeparated( other ) {
-
-		return this.min > other.max || other.min > this.max;
-
-	}
-
-}
-
-SeparatingAxisBounds.prototype.setFromBox = ( function () {
-
-	const p = new three_module.Vector3();
-	return function setFromBox( axis, box ) {
-
-		const boxMin = box.min;
-		const boxMax = box.max;
-		let min = Infinity;
-		let max = - Infinity;
-		for ( let x = 0; x <= 1; x ++ ) {
-
-			for ( let y = 0; y <= 1; y ++ ) {
-
-				for ( let z = 0; z <= 1; z ++ ) {
-
-					p.x = boxMin.x * x + boxMax.x * ( 1 - x );
-					p.y = boxMin.y * y + boxMax.y * ( 1 - y );
-					p.z = boxMin.z * z + boxMax.z * ( 1 - z );
-
-					const val = axis.dot( p );
-					min = Math.min( val, min );
-					max = Math.max( val, max );
-
-				}
-
-			}
-
-		}
-
-		this.min = min;
-		this.max = max;
-
-	};
-
-} )();
-
-const areIntersecting = ( function () {
-
-	const cacheSatBounds = new SeparatingAxisBounds();
-	return function areIntersecting( shape1, shape2 ) {
-
-		const points1 = shape1.points;
-		const satAxes1 = shape1.satAxes;
-		const satBounds1 = shape1.satBounds;
-
-		const points2 = shape2.points;
-		const satAxes2 = shape2.satAxes;
-		const satBounds2 = shape2.satBounds;
-
-		// check axes of the first shape
-		for ( let i = 0; i < 3; i ++ ) {
-
-			const sb = satBounds1[ i ];
-			const sa = satAxes1[ i ];
-			cacheSatBounds.setFromPoints( sa, points2 );
-			if ( sb.isSeparated( cacheSatBounds ) ) return false;
-
-		}
-
-		// check axes of the second shape
-		for ( let i = 0; i < 3; i ++ ) {
-
-			const sb = satBounds2[ i ];
-			const sa = satAxes2[ i ];
-			cacheSatBounds.setFromPoints( sa, points1 );
-			if ( sb.isSeparated( cacheSatBounds ) ) return false;
-
-		}
-
-	};
-
-} )();
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/math/MathUtilities.js
-
-
-const closestPointLineToLine = ( function () {
-
-	// https://github.com/juj/MathGeoLib/blob/master/src/Geometry/Line.cpp#L56
-	const dir1 = new three_module.Vector3();
-	const dir2 = new three_module.Vector3();
-	const v02 = new three_module.Vector3();
-	return function closestPointLineToLine( l1, l2, result ) {
-
-		const v0 = l1.start;
-		const v10 = dir1;
-		const v2 = l2.start;
-		const v32 = dir2;
-
-		v02.subVectors( v0, v2 );
-		dir1.subVectors( l1.end, l1.start );
-		dir2.subVectors( l2.end, l2.start );
-
-		// float d0232 = v02.Dot(v32);
-		const d0232 = v02.dot( v32 );
-
-		// float d3210 = v32.Dot(v10);
-		const d3210 = v32.dot( v10 );
-
-		// float d3232 = v32.Dot(v32);
-		const d3232 = v32.dot( v32 );
-
-		// float d0210 = v02.Dot(v10);
-		const d0210 = v02.dot( v10 );
-
-		// float d1010 = v10.Dot(v10);
-		const d1010 = v10.dot( v10 );
-
-		// float denom = d1010*d3232 - d3210*d3210;
-		const denom = d1010 * d3232 - d3210 * d3210;
-
-		let d, d2;
-		if ( denom !== 0 ) {
-
-			d = ( d0232 * d3210 - d0210 * d3232 ) / denom;
-
-		} else {
-
-			d = 0;
-
-		}
-
-		d2 = ( d0232 + d * d3210 ) / d3232;
-
-		result.x = d;
-		result.y = d2;
-
-	};
-
-} )();
-
-const closestPointsSegmentToSegment = ( function () {
-
-	// https://github.com/juj/MathGeoLib/blob/master/src/Geometry/LineSegment.cpp#L187
-	const paramResult = new three_module.Vector2();
-	const temp1 = new three_module.Vector3();
-	const temp2 = new three_module.Vector3();
-	return function closestPointsSegmentToSegment( l1, l2, target1, target2 ) {
-
-		closestPointLineToLine( l1, l2, paramResult );
-
-		let d = paramResult.x;
-		let d2 = paramResult.y;
-		if ( d >= 0 && d <= 1 && d2 >= 0 && d2 <= 1 ) {
-
-			l1.at( d, target1 );
-			l2.at( d2, target2 );
-
-			return;
-
-		} else if ( d >= 0 && d <= 1 ) {
-
-			// Only d2 is out of bounds.
-			if ( d2 < 0 ) {
-
-				l2.at( 0, target2 );
-
-			} else {
-
-				l2.at( 1, target2 );
-
-			}
-
-			l1.closestPointToPoint( target2, true, target1 );
-			return;
-
-		} else if ( d2 >= 0 && d2 <= 1 ) {
-
-			// Only d is out of bounds.
-			if ( d < 0 ) {
-
-				l1.at( 0, target1 );
-
-			} else {
-
-				l1.at( 1, target1 );
-
-			}
-
-			l2.closestPointToPoint( target1, true, target2 );
-			return;
-
-		} else {
-
-			// Both u and u2 are out of bounds.
-			let p;
-			if ( d < 0 ) {
-
-				p = l1.start;
-
-			} else {
-
-				p = l1.end;
-
-			}
-
-			let p2;
-			if ( d2 < 0 ) {
-
-				p2 = l2.start;
-
-			} else {
-
-				p2 = l2.end;
-
-			}
-
-			const closestPoint = temp1;
-			const closestPoint2 = temp2;
-			l1.closestPointToPoint( p2, true, temp1 );
-			l2.closestPointToPoint( p, true, temp2 );
-
-			if ( closestPoint.distanceToSquared( p2 ) <= closestPoint2.distanceToSquared( p ) ) {
-
-				target1.copy( closestPoint );
-				target2.copy( p2 );
-				return;
-
-			} else {
-
-				target1.copy( p );
-				target2.copy( closestPoint2 );
-				return;
-
-			}
-
-		}
-
-	};
-
-} )();
-
-
-const sphereIntersectTriangle = ( function () {
-
-	// https://stackoverflow.com/questions/34043955/detect-collision-between-sphere-and-triangle-in-three-js
-	const closestPointTemp = new three_module.Vector3();
-	const projectedPointTemp = new three_module.Vector3();
-	const planeTemp = new three_module.Plane();
-	const lineTemp = new three_module.Line3();
-	return function sphereIntersectTriangle( sphere, triangle ) {
-
-		const { radius, center } = sphere;
-		const { a, b, c } = triangle;
-
-		// phase 1
-		lineTemp.start = a;
-		lineTemp.end = b;
-		const closestPoint1 = lineTemp.closestPointToPoint( center, true, closestPointTemp );
-		if ( closestPoint1.distanceTo( center ) <= radius ) return true;
-
-		lineTemp.start = a;
-		lineTemp.end = c;
-		const closestPoint2 = lineTemp.closestPointToPoint( center, true, closestPointTemp );
-		if ( closestPoint2.distanceTo( center ) <= radius ) return true;
-
-		lineTemp.start = b;
-		lineTemp.end = c;
-		const closestPoint3 = lineTemp.closestPointToPoint( center, true, closestPointTemp );
-		if ( closestPoint3.distanceTo( center ) <= radius ) return true;
-
-		// phase 2
-		const plane = triangle.getPlane( planeTemp );
-		const dp = Math.abs( plane.distanceToPoint( center ) );
-		if ( dp <= radius ) {
-
-			const pp = plane.projectPoint( center, projectedPointTemp );
-			const cp = triangle.containsPoint( pp );
-			if ( cp ) return true;
-
-		}
-
-		return false;
-
-	};
-
-} )();
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/math/ExtendedTriangle.js
-
-
-
-
-const DIST_EPSILON = 1e-15;
-function isNearZero( value ) {
-
-	return Math.abs( value ) < DIST_EPSILON;
-
-}
-
-class ExtendedTriangle extends three_module.Triangle {
-
-	constructor( ...args ) {
-
-		super( ...args );
-
-		this.isExtendedTriangle = true;
-		this.satAxes = new Array( 4 ).fill().map( () => new three_module.Vector3() );
-		this.satBounds = new Array( 4 ).fill().map( () => new SeparatingAxisBounds() );
-		this.points = [ this.a, this.b, this.c ];
-		this.sphere = new three_module.Sphere();
-		this.plane = new three_module.Plane();
-		this.needsUpdate = true;
-
-	}
-
-	intersectsSphere( sphere ) {
-
-		return sphereIntersectTriangle( sphere, this );
-
-	}
-
-	update() {
-
-		const a = this.a;
-		const b = this.b;
-		const c = this.c;
-		const points = this.points;
-
-		const satAxes = this.satAxes;
-		const satBounds = this.satBounds;
-
-		const axis0 = satAxes[ 0 ];
-		const sab0 = satBounds[ 0 ];
-		this.getNormal( axis0 );
-		sab0.setFromPoints( axis0, points );
-
-		const axis1 = satAxes[ 1 ];
-		const sab1 = satBounds[ 1 ];
-		axis1.subVectors( a, b );
-		sab1.setFromPoints( axis1, points );
-
-		const axis2 = satAxes[ 2 ];
-		const sab2 = satBounds[ 2 ];
-		axis2.subVectors( b, c );
-		sab2.setFromPoints( axis2, points );
-
-		const axis3 = satAxes[ 3 ];
-		const sab3 = satBounds[ 3 ];
-		axis3.subVectors( c, a );
-		sab3.setFromPoints( axis3, points );
-
-		this.sphere.setFromPoints( this.points );
-		this.plane.setFromNormalAndCoplanarPoint( axis0, a );
-		this.needsUpdate = false;
-
-	}
-
-}
-
-ExtendedTriangle.prototype.closestPointToSegment = ( function () {
-
-	const point1 = new three_module.Vector3();
-	const point2 = new three_module.Vector3();
-	const edge = new three_module.Line3();
-
-	return function distanceToSegment( segment, target1 = null, target2 = null ) {
-
-		const { start, end } = segment;
-		const points = this.points;
-		let distSq;
-		let closestDistanceSq = Infinity;
-
-		// check the triangle edges
-		for ( let i = 0; i < 3; i ++ ) {
-
-			const nexti = ( i + 1 ) % 3;
-			edge.start.copy( points[ i ] );
-			edge.end.copy( points[ nexti ] );
-
-			closestPointsSegmentToSegment( edge, segment, point1, point2 );
-
-			distSq = point1.distanceToSquared( point2 );
-			if ( distSq < closestDistanceSq ) {
-
-				closestDistanceSq = distSq;
-				if ( target1 ) target1.copy( point1 );
-				if ( target2 ) target2.copy( point2 );
-
-			}
-
-		}
-
-		// check end points
-		this.closestPointToPoint( start, point1 );
-		distSq = start.distanceToSquared( point1 );
-		if ( distSq < closestDistanceSq ) {
-
-			closestDistanceSq = distSq;
-			if ( target1 ) target1.copy( point1 );
-			if ( target2 ) target2.copy( start );
-
-		}
-
-		this.closestPointToPoint( end, point1 );
-		distSq = end.distanceToSquared( point1 );
-		if ( distSq < closestDistanceSq ) {
-
-			closestDistanceSq = distSq;
-			if ( target1 ) target1.copy( point1 );
-			if ( target2 ) target2.copy( end );
-
-		}
-
-		return Math.sqrt( closestDistanceSq );
-
-	};
-
-} )();
-
-ExtendedTriangle.prototype.intersectsTriangle = ( function () {
-
-	const saTri2 = new ExtendedTriangle();
-	const arr1 = new Array( 3 );
-	const arr2 = new Array( 3 );
-	const cachedSatBounds = new SeparatingAxisBounds();
-	const cachedSatBounds2 = new SeparatingAxisBounds();
-	const cachedAxis = new three_module.Vector3();
-	const dir1 = new three_module.Vector3();
-	const dir2 = new three_module.Vector3();
-	const tempDir = new three_module.Vector3();
-	const edge = new three_module.Line3();
-	const edge1 = new three_module.Line3();
-	const edge2 = new three_module.Line3();
-
-	// TODO: If the triangles are coplanar and intersecting the target is nonsensical. It should at least
-	// be a line contained by both triangles if not a different special case somehow represented in the return result.
-	return function intersectsTriangle( other, target = null, suppressLog = false ) {
-
-		if ( this.needsUpdate ) {
-
-			this.update();
-
-		}
-
-		if ( ! other.isExtendedTriangle ) {
-
-			saTri2.copy( other );
-			saTri2.update();
-			other = saTri2;
-
-		} else if ( other.needsUpdate ) {
-
-			other.update();
-
-		}
-
-		const plane1 = this.plane;
-		const plane2 = other.plane;
-
-		if ( Math.abs( plane1.normal.dot( plane2.normal ) ) > 1.0 - 1e-10 ) {
-
-			// perform separating axis intersection test only for coplanar triangles
-			const satBounds1 = this.satBounds;
-			const satAxes1 = this.satAxes;
-			arr2[ 0 ] = other.a;
-			arr2[ 1 ] = other.b;
-			arr2[ 2 ] = other.c;
-			for ( let i = 0; i < 4; i ++ ) {
-
-				const sb = satBounds1[ i ];
-				const sa = satAxes1[ i ];
-				cachedSatBounds.setFromPoints( sa, arr2 );
-				if ( sb.isSeparated( cachedSatBounds ) ) return false;
-
-			}
-
-			const satBounds2 = other.satBounds;
-			const satAxes2 = other.satAxes;
-			arr1[ 0 ] = this.a;
-			arr1[ 1 ] = this.b;
-			arr1[ 2 ] = this.c;
-			for ( let i = 0; i < 4; i ++ ) {
-
-				const sb = satBounds2[ i ];
-				const sa = satAxes2[ i ];
-				cachedSatBounds.setFromPoints( sa, arr1 );
-				if ( sb.isSeparated( cachedSatBounds ) ) return false;
-
-			}
-
-			// check crossed axes
-			for ( let i = 0; i < 4; i ++ ) {
-
-				const sa1 = satAxes1[ i ];
-				for ( let i2 = 0; i2 < 4; i2 ++ ) {
-
-					const sa2 = satAxes2[ i2 ];
-					cachedAxis.crossVectors( sa1, sa2 );
-					cachedSatBounds.setFromPoints( cachedAxis, arr1 );
-					cachedSatBounds2.setFromPoints( cachedAxis, arr2 );
-					if ( cachedSatBounds.isSeparated( cachedSatBounds2 ) ) return false;
-
-				}
-
-			}
-
-			if ( target ) {
-
-				// TODO find two points that intersect on the edges and make that the result
-				if ( ! suppressLog ) {
-
-					console.warn( 'ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0.' );
-
-				}
-
-				target.start.set( 0, 0, 0 );
-				target.end.set( 0, 0, 0 );
-
-			}
-
-			return true;
-
-		} else {
-
-			// find the edge that intersects the other triangle plane
-			const points1 = this.points;
-			let found1 = false;
-			let count1 = 0;
-			for ( let i = 0; i < 3; i ++ ) {
-
-				const p = points1[ i ];
-				const pNext = points1[ ( i + 1 ) % 3 ];
-
-				edge.start.copy( p );
-				edge.end.copy( pNext );
-				edge.delta( dir1 );
-
-				const targetPoint = found1 ? edge1.start : edge1.end;
-				const startIntersects = isNearZero( plane2.distanceToPoint( p ) );
-				if ( isNearZero( plane2.normal.dot( dir1 ) ) && startIntersects ) {
-
-					// if the edge lies on the plane then take the line
-					edge1.copy( edge );
-					count1 = 2;
-					break;
-
-				}
-
-				// check if the start point is near the plane because "intersectLine" is not robust to that case
-				const doesIntersect = plane2.intersectLine( edge, targetPoint ) || startIntersects;
-				if ( doesIntersect && ! isNearZero( targetPoint.distanceTo( pNext ) ) ) {
-
-					count1 ++;
-					if ( found1 ) {
-
-						break;
-
-					}
-
-					found1 = true;
-
-				}
-
-			}
-
-			if ( count1 === 1 && other.containsPoint( edge1.end ) ) {
-
-				if ( target ) {
-
-					target.start.copy( edge1.end );
-					target.end.copy( edge1.end );
-
-				}
-
-				return true;
-
-			} else if ( count1 !== 2 ) {
-
-				return false;
-
-			}
-
-			// find the other triangles edge that intersects this plane
-			const points2 = other.points;
-			let found2 = false;
-			let count2 = 0;
-			for ( let i = 0; i < 3; i ++ ) {
-
-				const p = points2[ i ];
-				const pNext = points2[ ( i + 1 ) % 3 ];
-
-				edge.start.copy( p );
-				edge.end.copy( pNext );
-				edge.delta( dir2 );
-
-				const targetPoint = found2 ? edge2.start : edge2.end;
-				const startIntersects = isNearZero( plane1.distanceToPoint( p ) );
-				if ( isNearZero( plane1.normal.dot( dir2 ) ) && startIntersects ) {
-
-					// if the edge lies on the plane then take the line
-					edge2.copy( edge );
-					count2 = 2;
-					break;
-
-				}
-
-				// check if the start point is near the plane because "intersectLine" is not robust to that case
-				const doesIntersect = plane1.intersectLine( edge, targetPoint ) || startIntersects;
-				if ( doesIntersect && ! isNearZero( targetPoint.distanceTo( pNext ) ) ) {
-
-					count2 ++;
-					if ( found2 ) {
-
-						break;
-
-					}
-
-					found2 = true;
-
-				}
-
-			}
-
-			if ( count2 === 1 && this.containsPoint( edge2.end ) ) {
-
-				if ( target ) {
-
-					target.start.copy( edge2.end );
-					target.end.copy( edge2.end );
-
-				}
-
-				return true;
-
-			} else if ( count2 !== 2 ) {
-
-				return false;
-
-			}
-
-			// find swap the second edge so both lines are running the same direction
-			edge1.delta( dir1 );
-			edge2.delta( dir2 );
-
-			if ( dir1.dot( dir2 ) < 0 ) {
-
-				let tmp = edge2.start;
-				edge2.start = edge2.end;
-				edge2.end = tmp;
-
-			}
-
-			// check if the edges are overlapping
-			const s1 = edge1.start.dot( dir1 );
-			const e1 = edge1.end.dot( dir1 );
-			const s2 = edge2.start.dot( dir1 );
-			const e2 = edge2.end.dot( dir1 );
-			const separated1 = e1 < s2;
-			const separated2 = s1 < e2;
-
-			if ( s1 !== e2 && s2 !== e1 && separated1 === separated2 ) {
-
-				return false;
-
-			}
-
-			// assign the target output
-			if ( target ) {
-
-				tempDir.subVectors( edge1.start, edge2.start );
-				if ( tempDir.dot( dir1 ) > 0 ) {
-
-					target.start.copy( edge1.start );
-
-				} else {
-
-					target.start.copy( edge2.start );
-
-				}
-
-				tempDir.subVectors( edge1.end, edge2.end );
-				if ( tempDir.dot( dir1 ) < 0 ) {
-
-					target.end.copy( edge1.end );
-
-				} else {
-
-					target.end.copy( edge2.end );
-
-				}
-
-			}
-
-			return true;
-
-		}
-
-	};
-
-} )();
-
-
-ExtendedTriangle.prototype.distanceToPoint = ( function () {
-
-	const target = new three_module.Vector3();
-	return function distanceToPoint( point ) {
-
-		this.closestPointToPoint( point, target );
-		return point.distanceTo( target );
-
-	};
-
-} )();
-
-
-ExtendedTriangle.prototype.distanceToTriangle = ( function () {
-
-	const point = new three_module.Vector3();
-	const point2 = new three_module.Vector3();
-	const cornerFields = [ 'a', 'b', 'c' ];
-	const line1 = new three_module.Line3();
-	const line2 = new three_module.Line3();
-
-	return function distanceToTriangle( other, target1 = null, target2 = null ) {
-
-		const lineTarget = target1 || target2 ? line1 : null;
-		if ( this.intersectsTriangle( other, lineTarget ) ) {
-
-			if ( target1 || target2 ) {
-
-				if ( target1 ) lineTarget.getCenter( target1 );
-				if ( target2 ) lineTarget.getCenter( target2 );
-
-			}
-
-			return 0;
-
-		}
-
-		let closestDistanceSq = Infinity;
-
-		// check all point distances
-		for ( let i = 0; i < 3; i ++ ) {
-
-			let dist;
-			const field = cornerFields[ i ];
-			const otherVec = other[ field ];
-			this.closestPointToPoint( otherVec, point );
-
-			dist = otherVec.distanceToSquared( point );
-
-			if ( dist < closestDistanceSq ) {
-
-				closestDistanceSq = dist;
-				if ( target1 ) target1.copy( point );
-				if ( target2 ) target2.copy( otherVec );
-
-			}
-
-
-			const thisVec = this[ field ];
-			other.closestPointToPoint( thisVec, point );
-
-			dist = thisVec.distanceToSquared( point );
-
-			if ( dist < closestDistanceSq ) {
-
-				closestDistanceSq = dist;
-				if ( target1 ) target1.copy( thisVec );
-				if ( target2 ) target2.copy( point );
-
-			}
-
-		}
-
-		for ( let i = 0; i < 3; i ++ ) {
-
-			const f11 = cornerFields[ i ];
-			const f12 = cornerFields[ ( i + 1 ) % 3 ];
-			line1.set( this[ f11 ], this[ f12 ] );
-			for ( let i2 = 0; i2 < 3; i2 ++ ) {
-
-				const f21 = cornerFields[ i2 ];
-				const f22 = cornerFields[ ( i2 + 1 ) % 3 ];
-				line2.set( other[ f21 ], other[ f22 ] );
-
-				closestPointsSegmentToSegment( line1, line2, point, point2 );
-
-				const dist = point.distanceToSquared( point2 );
-				if ( dist < closestDistanceSq ) {
-
-					closestDistanceSq = dist;
-					if ( target1 ) target1.copy( point );
-					if ( target2 ) target2.copy( point2 );
-
-				}
-
-			}
-
-		}
-
-		return Math.sqrt( closestDistanceSq );
-
-	};
-
-} )();
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/math/OrientedBox.js
-
-
-
-
-
-class OrientedBox {
-
-	constructor( min, max, matrix ) {
-
-		this.isOrientedBox = true;
-		this.min = new three_module.Vector3();
-		this.max = new three_module.Vector3();
-		this.matrix = new three_module.Matrix4();
-		this.invMatrix = new three_module.Matrix4();
-		this.points = new Array( 8 ).fill().map( () => new three_module.Vector3() );
-		this.satAxes = new Array( 3 ).fill().map( () => new three_module.Vector3() );
-		this.satBounds = new Array( 3 ).fill().map( () => new SeparatingAxisBounds() );
-		this.alignedSatBounds = new Array( 3 ).fill().map( () => new SeparatingAxisBounds() );
-		this.needsUpdate = false;
-
-		if ( min ) this.min.copy( min );
-		if ( max ) this.max.copy( max );
-		if ( matrix ) this.matrix.copy( matrix );
-
-	}
-
-	set( min, max, matrix ) {
-
-		this.min.copy( min );
-		this.max.copy( max );
-		this.matrix.copy( matrix );
-		this.needsUpdate = true;
-
-	}
-
-	copy( other ) {
-
-		this.min.copy( other.min );
-		this.max.copy( other.max );
-		this.matrix.copy( other.matrix );
-		this.needsUpdate = true;
-
-	}
-
-}
-
-OrientedBox.prototype.update = ( function () {
-
-	return function update() {
-
-		const matrix = this.matrix;
-		const min = this.min;
-		const max = this.max;
-
-		const points = this.points;
-		for ( let x = 0; x <= 1; x ++ ) {
-
-			for ( let y = 0; y <= 1; y ++ ) {
-
-				for ( let z = 0; z <= 1; z ++ ) {
-
-					const i = ( ( 1 << 0 ) * x ) | ( ( 1 << 1 ) * y ) | ( ( 1 << 2 ) * z );
-					const v = points[ i ];
-					v.x = x ? max.x : min.x;
-					v.y = y ? max.y : min.y;
-					v.z = z ? max.z : min.z;
-
-					v.applyMatrix4( matrix );
-
-				}
-
-			}
-
-		}
-
-		const satBounds = this.satBounds;
-		const satAxes = this.satAxes;
-		const minVec = points[ 0 ];
-		for ( let i = 0; i < 3; i ++ ) {
-
-			const axis = satAxes[ i ];
-			const sb = satBounds[ i ];
-			const index = 1 << i;
-			const pi = points[ index ];
-
-			axis.subVectors( minVec, pi );
-			sb.setFromPoints( axis, points );
-
-		}
-
-		const alignedSatBounds = this.alignedSatBounds;
-		alignedSatBounds[ 0 ].setFromPointsField( points, 'x' );
-		alignedSatBounds[ 1 ].setFromPointsField( points, 'y' );
-		alignedSatBounds[ 2 ].setFromPointsField( points, 'z' );
-
-		this.invMatrix.copy( this.matrix ).invert();
-		this.needsUpdate = false;
-
-	};
-
-} )();
-
-OrientedBox.prototype.intersectsBox = ( function () {
-
-	const aabbBounds = new SeparatingAxisBounds();
-	return function intersectsBox( box ) {
-
-		// TODO: should this be doing SAT against the AABB?
-		if ( this.needsUpdate ) {
-
-			this.update();
-
-		}
-
-		const min = box.min;
-		const max = box.max;
-		const satBounds = this.satBounds;
-		const satAxes = this.satAxes;
-		const alignedSatBounds = this.alignedSatBounds;
-
-		aabbBounds.min = min.x;
-		aabbBounds.max = max.x;
-		if ( alignedSatBounds[ 0 ].isSeparated( aabbBounds ) ) return false;
-
-		aabbBounds.min = min.y;
-		aabbBounds.max = max.y;
-		if ( alignedSatBounds[ 1 ].isSeparated( aabbBounds ) ) return false;
-
-		aabbBounds.min = min.z;
-		aabbBounds.max = max.z;
-		if ( alignedSatBounds[ 2 ].isSeparated( aabbBounds ) ) return false;
-
-		for ( let i = 0; i < 3; i ++ ) {
-
-			const axis = satAxes[ i ];
-			const sb = satBounds[ i ];
-			aabbBounds.setFromBox( axis, box );
-			if ( sb.isSeparated( aabbBounds ) ) return false;
-
-		}
-
-		return true;
-
-	};
-
-} )();
-
-OrientedBox.prototype.intersectsTriangle = ( function () {
-
-	const saTri = new ExtendedTriangle();
-	const pointsArr = new Array( 3 );
-	const cachedSatBounds = new SeparatingAxisBounds();
-	const cachedSatBounds2 = new SeparatingAxisBounds();
-	const cachedAxis = new three_module.Vector3();
-	return function intersectsTriangle( triangle ) {
-
-		if ( this.needsUpdate ) {
-
-			this.update();
-
-		}
-
-		if ( ! triangle.isExtendedTriangle ) {
-
-			saTri.copy( triangle );
-			saTri.update();
-			triangle = saTri;
-
-		} else if ( triangle.needsUpdate ) {
-
-			triangle.update();
-
-		}
-
-		const satBounds = this.satBounds;
-		const satAxes = this.satAxes;
-
-		pointsArr[ 0 ] = triangle.a;
-		pointsArr[ 1 ] = triangle.b;
-		pointsArr[ 2 ] = triangle.c;
-
-		for ( let i = 0; i < 3; i ++ ) {
-
-			const sb = satBounds[ i ];
-			const sa = satAxes[ i ];
-			cachedSatBounds.setFromPoints( sa, pointsArr );
-			if ( sb.isSeparated( cachedSatBounds ) ) return false;
-
-		}
-
-		const triSatBounds = triangle.satBounds;
-		const triSatAxes = triangle.satAxes;
-		const points = this.points;
-		for ( let i = 0; i < 3; i ++ ) {
-
-			const sb = triSatBounds[ i ];
-			const sa = triSatAxes[ i ];
-			cachedSatBounds.setFromPoints( sa, points );
-			if ( sb.isSeparated( cachedSatBounds ) ) return false;
-
-		}
-
-		// check crossed axes
-		for ( let i = 0; i < 3; i ++ ) {
-
-			const sa1 = satAxes[ i ];
-			for ( let i2 = 0; i2 < 4; i2 ++ ) {
-
-				const sa2 = triSatAxes[ i2 ];
-				cachedAxis.crossVectors( sa1, sa2 );
-				cachedSatBounds.setFromPoints( cachedAxis, pointsArr );
-				cachedSatBounds2.setFromPoints( cachedAxis, points );
-				if ( cachedSatBounds.isSeparated( cachedSatBounds2 ) ) return false;
-
-			}
-
-		}
-
-		return true;
-
-	};
-
-} )();
-
-OrientedBox.prototype.closestPointToPoint = ( function () {
-
-	return function closestPointToPoint( point, target1 ) {
-
-		if ( this.needsUpdate ) {
-
-			this.update();
-
-		}
-
-		target1
-			.copy( point )
-			.applyMatrix4( this.invMatrix )
-			.clamp( this.min, this.max )
-			.applyMatrix4( this.matrix );
-
-		return target1;
-
-	};
-
-} )();
-
-OrientedBox.prototype.distanceToPoint = ( function () {
-
-	const target = new three_module.Vector3();
-	return function distanceToPoint( point ) {
-
-		this.closestPointToPoint( point, target );
-		return point.distanceTo( target );
-
-	};
-
-} )();
-
-OrientedBox.prototype.distanceToBox = ( function () {
-
-	const xyzFields = [ 'x', 'y', 'z' ];
-	const segments1 = new Array( 12 ).fill().map( () => new three_module.Line3() );
-	const segments2 = new Array( 12 ).fill().map( () => new three_module.Line3() );
-
-	const point1 = new three_module.Vector3();
-	const point2 = new three_module.Vector3();
-
-	// early out if we find a value below threshold
-	return function distanceToBox( box, threshold = 0, target1 = null, target2 = null ) {
-
-		if ( this.needsUpdate ) {
-
-			this.update();
-
-		}
-
-		if ( this.intersectsBox( box ) ) {
-
-			if ( target1 || target2 ) {
-
-				box.getCenter( point2 );
-				this.closestPointToPoint( point2, point1 );
-				box.closestPointToPoint( point1, point2 );
-
-				if ( target1 ) target1.copy( point1 );
-				if ( target2 ) target2.copy( point2 );
-
-			}
-
-			return 0;
-
-		}
-
-		const threshold2 = threshold * threshold;
-		const min = box.min;
-		const max = box.max;
-		const points = this.points;
-
-
-		// iterate over every edge and compare distances
-		let closestDistanceSq = Infinity;
-
-		// check over all these points
-		for ( let i = 0; i < 8; i ++ ) {
-
-			const p = points[ i ];
-			point2.copy( p ).clamp( min, max );
-
-			const dist = p.distanceToSquared( point2 );
-			if ( dist < closestDistanceSq ) {
-
-				closestDistanceSq = dist;
-				if ( target1 ) target1.copy( p );
-				if ( target2 ) target2.copy( point2 );
-
-				if ( dist < threshold2 ) return Math.sqrt( dist );
-
-			}
-
-		}
-
-		// generate and check all line segment distances
-		let count = 0;
-		for ( let i = 0; i < 3; i ++ ) {
-
-			for ( let i1 = 0; i1 <= 1; i1 ++ ) {
-
-				for ( let i2 = 0; i2 <= 1; i2 ++ ) {
-
-					const nextIndex = ( i + 1 ) % 3;
-					const nextIndex2 = ( i + 2 ) % 3;
-
-					// get obb line segments
-					const index = i1 << nextIndex | i2 << nextIndex2;
-					const index2 = 1 << i | i1 << nextIndex | i2 << nextIndex2;
-					const p1 = points[ index ];
-					const p2 = points[ index2 ];
-					const line1 = segments1[ count ];
-					line1.set( p1, p2 );
-
-
-					// get aabb line segments
-					const f1 = xyzFields[ i ];
-					const f2 = xyzFields[ nextIndex ];
-					const f3 = xyzFields[ nextIndex2 ];
-					const line2 = segments2[ count ];
-					const start = line2.start;
-					const end = line2.end;
-
-					start[ f1 ] = min[ f1 ];
-					start[ f2 ] = i1 ? min[ f2 ] : max[ f2 ];
-					start[ f3 ] = i2 ? min[ f3 ] : max[ f2 ];
-
-					end[ f1 ] = max[ f1 ];
-					end[ f2 ] = i1 ? min[ f2 ] : max[ f2 ];
-					end[ f3 ] = i2 ? min[ f3 ] : max[ f2 ];
-
-					count ++;
-
-				}
-
-			}
-
-		}
-
-		// check all the other boxes point
-		for ( let x = 0; x <= 1; x ++ ) {
-
-			for ( let y = 0; y <= 1; y ++ ) {
-
-				for ( let z = 0; z <= 1; z ++ ) {
-
-					point2.x = x ? max.x : min.x;
-					point2.y = y ? max.y : min.y;
-					point2.z = z ? max.z : min.z;
-
-					this.closestPointToPoint( point2, point1 );
-					const dist = point2.distanceToSquared( point1 );
-					if ( dist < closestDistanceSq ) {
-
-						closestDistanceSq = dist;
-						if ( target1 ) target1.copy( point1 );
-						if ( target2 ) target2.copy( point2 );
-
-						if ( dist < threshold2 ) return Math.sqrt( dist );
-
-					}
-
-				}
-
-			}
-
-		}
-
-		for ( let i = 0; i < 12; i ++ ) {
-
-			const l1 = segments1[ i ];
-			for ( let i2 = 0; i2 < 12; i2 ++ ) {
-
-				const l2 = segments2[ i2 ];
-				closestPointsSegmentToSegment( l1, l2, point1, point2 );
-				const dist = point1.distanceToSquared( point2 );
-				if ( dist < closestDistanceSq ) {
-
-					closestDistanceSq = dist;
-					if ( target1 ) target1.copy( point1 );
-					if ( target2 ) target2.copy( point2 );
-
-					if ( dist < threshold2 ) return Math.sqrt( dist );
-
-				}
-
-			}
-
-		}
-
-		return Math.sqrt( closestDistanceSq );
-
-	};
-
-} )();
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/utils/TriangleUtilities.js
-
-
-
-// sets the vertices of triangle `tri` with the 3 vertices after i
-function setTriangle( tri, i, index, pos ) {
-
-	const ta = tri.a;
-	const tb = tri.b;
-	const tc = tri.c;
-
-	let i0 = i;
-	let i1 = i + 1;
-	let i2 = i + 2;
-	if ( index ) {
-
-		i0 = index.getX( i );
-		i1 = index.getX( i + 1 );
-		i2 = index.getX( i + 2 );
-
-	}
-
-	ta.x = pos.getX( i0 );
-	ta.y = pos.getY( i0 );
-	ta.z = pos.getZ( i0 );
-
-	tb.x = pos.getX( i1 );
-	tb.y = pos.getY( i1 );
-	tb.z = pos.getZ( i1 );
-
-	tc.x = pos.getX( i2 );
-	tc.y = pos.getY( i2 );
-	tc.z = pos.getZ( i2 );
-
-}
-
-function iterateOverTriangles(
-	offset,
-	count,
-	geometry,
-	intersectsTriangleFunc,
-	contained,
-	depth,
-	triangle
-) {
-
-	const index = geometry.index;
-	const pos = geometry.attributes.position;
-	for ( let i = offset, l = count + offset; i < l; i ++ ) {
-
-		setTriangle( triangle, i * 3, index, pos );
-		triangle.needsUpdate = true;
-
-		if ( intersectsTriangleFunc( triangle, i, contained, depth ) ) {
-
-			return true;
-
-		}
-
-	}
-
-	return false;
-
-}
-
-const tempV1 = /* @__PURE__ */ new three_module.Vector3();
-const tempV2 = /* @__PURE__ */ new three_module.Vector3();
-const tempV3 = /* @__PURE__ */ new three_module.Vector3();
-const tempUV1 = /* @__PURE__ */ new three_module.Vector2();
-const tempUV2 = /* @__PURE__ */ new three_module.Vector2();
-const tempUV3 = /* @__PURE__ */ new three_module.Vector2();
-
-function getTriangleHitPointInfo( point, geometry, triangleIndex, target ) {
-
-	const indices = geometry.getIndex().array;
-	const positions = geometry.getAttribute( 'position' );
-	const uvs = geometry.getAttribute( 'uv' );
-
-	const a = indices[ triangleIndex * 3 ];
-	const b = indices[ triangleIndex * 3 + 1 ];
-	const c = indices[ triangleIndex * 3 + 2 ];
-
-	tempV1.fromBufferAttribute( positions, a );
-	tempV2.fromBufferAttribute( positions, b );
-	tempV3.fromBufferAttribute( positions, c );
-
-	// find the associated material index
-	let materialIndex = 0;
-	const groups = geometry.groups;
-	const firstVertexIndex = triangleIndex * 3;
-	for ( let i = 0, l = groups.length; i < l; i ++ ) {
-
-		const group = groups[ i ];
-		const { start, count } = group;
-		if ( firstVertexIndex >= start && firstVertexIndex < start + count ) {
-
-			materialIndex = group.materialIndex;
-			break;
-
-		}
-
-	}
-
-	// extract uvs
-	let uv = null;
-	if ( uvs ) {
-
-		tempUV1.fromBufferAttribute( uvs, a );
-		tempUV2.fromBufferAttribute( uvs, b );
-		tempUV3.fromBufferAttribute( uvs, c );
-
-		if ( target && target.uv ) uv = target.uv;
-		else uv = new Vector2();
-
-		Triangle.getUV( point, tempV1, tempV2, tempV3, tempUV1, tempUV2, tempUV3, uv );
-
-	}
-
-	// adjust the provided target or create a new one
-	if ( target ) {
-
-		if ( ! target.face ) target.face = { };
-		target.face.a = a;
-		target.face.b = b;
-		target.face.c = c;
-		target.face.materialIndex = materialIndex;
-		if ( ! target.face.normal ) target.face.normal = new Vector3();
-		Triangle.getNormal( tempV1, tempV2, tempV3, target.face.normal );
-
-		if ( uv ) target.uv = uv;
-
-		return target;
-
-	} else {
-
-		return {
-			face: {
-				a: a,
-				b: b,
-				c: c,
-				materialIndex: materialIndex,
-				normal: Triangle.getNormal( tempV1, tempV2, tempV3, new Vector3() )
-			},
-			uv: uv
-		};
-
-	}
-
-}
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/utils/PrimitivePool.js
-class PrimitivePool {
-
-	constructor( getNewPrimitive ) {
-
-		this._getNewPrimitive = getNewPrimitive;
-		this._primitives = [];
-
-	}
-
-	getPrimitive() {
-
-		const primitives = this._primitives;
-		if ( primitives.length === 0 ) {
-
-			return this._getNewPrimitive();
-
-		} else {
-
-			return primitives.pop();
-
-		}
-
-	}
-
-	releasePrimitive( primitive ) {
-
-		this._primitives.push( primitive );
-
-	}
-
-}
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/core/nodeBufferFunctions.js
-function IS_LEAF( n16, uint16Array ) {
-
-	return uint16Array[ n16 + 15 ] === 0xFFFF;
-
-}
-
-function OFFSET( n32, uint32Array ) {
-
-	return uint32Array[ n32 + 6 ];
-
-}
-
-function COUNT( n16, uint16Array ) {
-
-	return uint16Array[ n16 + 14 ];
-
-}
-
-function LEFT_NODE( n32 ) {
-
-	return n32 + 8;
-
-}
-
-function RIGHT_NODE( n32, uint32Array ) {
-
-	return uint32Array[ n32 + 6 ];
-
-}
-
-function SPLIT_AXIS( n32, uint32Array ) {
-
-	return uint32Array[ n32 + 7 ];
-
-}
-
-function BOUNDING_DATA_INDEX( n32 ) {
-
-	return n32;
-
-}
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/core/castFunctions.js
-
-
-
-
-
-
-
-
-
-
-
-const boundingBox = new three_module.Box3();
-const boxIntersection = new three_module.Vector3();
-const xyzFields = [ 'x', 'y', 'z' ];
-
-function raycast( nodeIndex32, geometry, side, ray, intersects ) {
-
-	let nodeIndex16 = nodeIndex32 * 2, float32Array = _float32Array, uint16Array = _uint16Array, uint32Array = _uint32Array;
-
-	const isLeaf = IS_LEAF( nodeIndex16, uint16Array );
-	if ( isLeaf ) {
-
-		const offset = OFFSET( nodeIndex32, uint32Array );
-		const count = COUNT( nodeIndex16, uint16Array );
-
-		intersectTris( geometry, side, ray, offset, count, intersects );
-
-	} else {
-
-		const leftIndex = LEFT_NODE( nodeIndex32 );
-		if ( intersectRay( leftIndex, float32Array, ray, boxIntersection ) ) {
-
-			raycast( leftIndex, geometry, side, ray, intersects );
-
-		}
-
-		const rightIndex = RIGHT_NODE( nodeIndex32, uint32Array );
-		if ( intersectRay( rightIndex, float32Array, ray, boxIntersection ) ) {
-
-			raycast( rightIndex, geometry, side, ray, intersects );
-
-		}
-
-	}
-
-}
-
-function raycastFirst( nodeIndex32, geometry, side, ray ) {
-
-	let nodeIndex16 = nodeIndex32 * 2, float32Array = _float32Array, uint16Array = _uint16Array, uint32Array = _uint32Array;
-
-	const isLeaf = IS_LEAF( nodeIndex16, uint16Array );
-	if ( isLeaf ) {
-
-		const offset = OFFSET( nodeIndex32, uint32Array );
-		const count = COUNT( nodeIndex16, uint16Array );
-		return intersectClosestTri( geometry, side, ray, offset, count );
-
-	} else {
-
-		// consider the position of the split plane with respect to the oncoming ray; whichever direction
-		// the ray is coming from, look for an intersection among that side of the tree first
-		const splitAxis = SPLIT_AXIS( nodeIndex32, uint32Array );
-		const xyzAxis = xyzFields[ splitAxis ];
-		const rayDir = ray.direction[ xyzAxis ];
-		const leftToRight = rayDir >= 0;
-
-		// c1 is the child to check first
-		let c1, c2;
-		if ( leftToRight ) {
-
-			c1 = LEFT_NODE( nodeIndex32 );
-			c2 = RIGHT_NODE( nodeIndex32, uint32Array );
-
-		} else {
-
-			c1 = RIGHT_NODE( nodeIndex32, uint32Array );
-			c2 = LEFT_NODE( nodeIndex32 );
-
-		}
-
-		const c1Intersection = intersectRay( c1, float32Array, ray, boxIntersection );
-		const c1Result = c1Intersection ? raycastFirst( c1, geometry, side, ray ) : null;
-
-		// if we got an intersection in the first node and it's closer than the second node's bounding
-		// box, we don't need to consider the second node because it couldn't possibly be a better result
-		if ( c1Result ) {
-
-			// check if the point is within the second bounds
-			// "point" is in the local frame of the bvh
-			const point = c1Result.point[ xyzAxis ];
-			const isOutside = leftToRight ?
-				point <= float32Array[ c2 + splitAxis ] : // min bounding data
-				point >= float32Array[ c2 + splitAxis + 3 ]; // max bounding data
-
-			if ( isOutside ) {
-
-				return c1Result;
-
-			}
-
-		}
-
-		// either there was no intersection in the first node, or there could still be a closer
-		// intersection in the second, so check the second node and then take the better of the two
-		const c2Intersection = intersectRay( c2, float32Array, ray, boxIntersection );
-		const c2Result = c2Intersection ? raycastFirst( c2, geometry, side, ray ) : null;
-
-		if ( c1Result && c2Result ) {
-
-			return c1Result.distance <= c2Result.distance ? c1Result : c2Result;
-
-		} else {
-
-			return c1Result || c2Result || null;
-
-		}
-
-	}
-
-}
-
-const shapecast = ( function () {
-
-	let _box1, _box2;
-	const boxStack = [];
-	const boxPool = new PrimitivePool( () => new three_module.Box3() );
-
-	return function shapecast( ...args ) {
-
-		_box1 = boxPool.getPrimitive();
-		_box2 = boxPool.getPrimitive();
-		boxStack.push( _box1, _box2 );
-
-		const result = shapecastTraverse( ...args );
-
-		boxPool.releasePrimitive( _box1 );
-		boxPool.releasePrimitive( _box2 );
-		boxStack.pop();
-		boxStack.pop();
-
-		const length = boxStack.length;
-		if ( length > 0 ) {
-
-			_box2 = boxStack[ length - 1 ];
-			_box1 = boxStack[ length - 2 ];
-
-		}
-
-		return result;
-
-	};
-
-	function shapecastTraverse(
-		nodeIndex32,
-		geometry,
-		intersectsBoundsFunc,
-		intersectsRangeFunc,
-		nodeScoreFunc = null,
-		nodeIndexByteOffset = 0, // offset for unique node identifier
-		depth = 0
-	) {
-
-		// Define these inside the function so it has access to the local variables needed
-		// when converting to the buffer equivalents
-		function getLeftOffset( nodeIndex32 ) {
-
-			let nodeIndex16 = nodeIndex32 * 2, uint16Array = _uint16Array, uint32Array = _uint32Array;
-
-			// traverse until we find a leaf
-			while ( ! IS_LEAF( nodeIndex16, uint16Array ) ) {
-
-				nodeIndex32 = LEFT_NODE( nodeIndex32 );
-				nodeIndex16 = nodeIndex32 * 2;
-
-			}
-
-			return OFFSET( nodeIndex32, uint32Array );
-
-		}
-
-		function getRightEndOffset( nodeIndex32 ) {
-
-			let nodeIndex16 = nodeIndex32 * 2, uint16Array = _uint16Array, uint32Array = _uint32Array;
-
-			// traverse until we find a leaf
-			while ( ! IS_LEAF( nodeIndex16, uint16Array ) ) {
-
-				// adjust offset to point to the right node
-				nodeIndex32 = RIGHT_NODE( nodeIndex32, uint32Array );
-				nodeIndex16 = nodeIndex32 * 2;
-
-			}
-
-			// return the end offset of the triangle range
-			return OFFSET( nodeIndex32, uint32Array ) + COUNT( nodeIndex16, uint16Array );
-
-		}
-
-		let nodeIndex16 = nodeIndex32 * 2, float32Array = _float32Array, uint16Array = _uint16Array, uint32Array = _uint32Array;
-
-		const isLeaf = IS_LEAF( nodeIndex16, uint16Array );
-		if ( isLeaf ) {
-
-			const offset = OFFSET( nodeIndex32, uint32Array );
-			const count = COUNT( nodeIndex16, uint16Array );
-			arrayToBox( BOUNDING_DATA_INDEX( nodeIndex32 ), float32Array, _box1 );
-			return intersectsRangeFunc( offset, count, false, depth, nodeIndexByteOffset + nodeIndex32, _box1 );
-
-		} else {
-
-			const left = LEFT_NODE( nodeIndex32 );
-			const right = RIGHT_NODE( nodeIndex32, uint32Array );
-			let c1 = left;
-			let c2 = right;
-
-			let score1, score2;
-			let box1, box2;
-			if ( nodeScoreFunc ) {
-
-				box1 = _box1;
-				box2 = _box2;
-
-				// bounding data is not offset
-				arrayToBox( BOUNDING_DATA_INDEX( c1 ), float32Array, box1 );
-				arrayToBox( BOUNDING_DATA_INDEX( c2 ), float32Array, box2 );
-
-				score1 = nodeScoreFunc( box1 );
-				score2 = nodeScoreFunc( box2 );
-
-				if ( score2 < score1 ) {
-
-					c1 = right;
-					c2 = left;
-
-					const temp = score1;
-					score1 = score2;
-					score2 = temp;
-
-					box1 = box2;
-					// box2 is always set before use below
-
-				}
-
-			}
-
-			// Check box 1 intersection
-			if ( ! box1 ) {
-
-				box1 = _box1;
-				arrayToBox( BOUNDING_DATA_INDEX( c1 ), float32Array, box1 );
-
-			}
-
-			const isC1Leaf = IS_LEAF( c1 * 2, uint16Array );
-			const c1Intersection = intersectsBoundsFunc( box1, isC1Leaf, score1, depth + 1, nodeIndexByteOffset + c1 );
-
-			let c1StopTraversal;
-			if ( c1Intersection === CONTAINED ) {
-
-				const offset = getLeftOffset( c1 );
-				const end = getRightEndOffset( c1 );
-				const count = end - offset;
-
-				c1StopTraversal = intersectsRangeFunc( offset, count, true, depth + 1, nodeIndexByteOffset + c1, box1 );
-
-			} else {
-
-				c1StopTraversal =
-					c1Intersection &&
-					shapecastTraverse(
-						c1,
-						geometry,
-						intersectsBoundsFunc,
-						intersectsRangeFunc,
-						nodeScoreFunc,
-						nodeIndexByteOffset,
-						depth + 1
-					);
-
-			}
-
-			if ( c1StopTraversal ) return true;
-
-			// Check box 2 intersection
-			// cached box2 will have been overwritten by previous traversal
-			box2 = _box2;
-			arrayToBox( BOUNDING_DATA_INDEX( c2 ), float32Array, box2 );
-
-			const isC2Leaf = IS_LEAF( c2 * 2, uint16Array );
-			const c2Intersection = intersectsBoundsFunc( box2, isC2Leaf, score2, depth + 1, nodeIndexByteOffset + c2 );
-
-			let c2StopTraversal;
-			if ( c2Intersection === CONTAINED ) {
-
-				const offset = getLeftOffset( c2 );
-				const end = getRightEndOffset( c2 );
-				const count = end - offset;
-
-				c2StopTraversal = intersectsRangeFunc( offset, count, true, depth + 1, nodeIndexByteOffset + c2, box2 );
-
-			} else {
-
-				c2StopTraversal =
-					c2Intersection &&
-					shapecastTraverse(
-						c2,
-						geometry,
-						intersectsBoundsFunc,
-						intersectsRangeFunc,
-						nodeScoreFunc,
-						nodeIndexByteOffset,
-						depth + 1
-					);
-
-			}
-
-			if ( c2StopTraversal ) return true;
-
-			return false;
-
-		}
-
-	}
-
-} )();
-
-const intersectsGeometry = ( function () {
-
-	const triangle = new ExtendedTriangle();
-	const triangle2 = new ExtendedTriangle();
-	const invertedMat = new three_module.Matrix4();
-
-	const obb = new OrientedBox();
-	const obb2 = new OrientedBox();
-
-	return function intersectsGeometry( nodeIndex32, geometry, otherGeometry, geometryToBvh, cachedObb = null ) {
-
-		let nodeIndex16 = nodeIndex32 * 2, float32Array = _float32Array, uint16Array = _uint16Array, uint32Array = _uint32Array;
-
-		if ( cachedObb === null ) {
-
-			if ( ! otherGeometry.boundingBox ) {
-
-				otherGeometry.computeBoundingBox();
-
-			}
-
-			obb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );
-			cachedObb = obb;
-
-		}
-
-		const isLeaf = IS_LEAF( nodeIndex16, uint16Array );
-		if ( isLeaf ) {
-
-			const thisGeometry = geometry;
-			const thisIndex = thisGeometry.index;
-			const thisPos = thisGeometry.attributes.position;
-
-			const index = otherGeometry.index;
-			const pos = otherGeometry.attributes.position;
-
-			const offset = OFFSET( nodeIndex32, uint32Array );
-			const count = COUNT( nodeIndex16, uint16Array );
-
-			// get the inverse of the geometry matrix so we can transform our triangles into the
-			// geometry space we're trying to test. We assume there are fewer triangles being checked
-			// here.
-			invertedMat.copy( geometryToBvh ).invert();
-
-			if ( otherGeometry.boundsTree ) {
-
-				arrayToBox( BOUNDING_DATA_INDEX( nodeIndex32 ), float32Array, obb2 );
-				obb2.matrix.copy( invertedMat );
-				obb2.needsUpdate = true;
-
-				const res = otherGeometry.boundsTree.shapecast( {
-
-					intersectsBounds: box => obb2.intersectsBox( box ),
-
-					intersectsTriangle: tri => {
-
-						tri.a.applyMatrix4( geometryToBvh );
-						tri.b.applyMatrix4( geometryToBvh );
-						tri.c.applyMatrix4( geometryToBvh );
-						tri.needsUpdate = true;
-
-						for ( let i = offset * 3, l = ( count + offset ) * 3; i < l; i += 3 ) {
-
-							// this triangle needs to be transformed into the current BVH coordinate frame
-							setTriangle( triangle2, i, thisIndex, thisPos );
-							triangle2.needsUpdate = true;
-							if ( tri.intersectsTriangle( triangle2 ) ) {
-
-								return true;
-
-							}
-
-						}
-
-						return false;
-
-					}
-
-				} );
-
-				return res;
-
-			} else {
-
-				for ( let i = offset * 3, l = ( count + offset * 3 ); i < l; i += 3 ) {
-
-					// this triangle needs to be transformed into the current BVH coordinate frame
-					setTriangle( triangle, i, thisIndex, thisPos );
-					triangle.a.applyMatrix4( invertedMat );
-					triangle.b.applyMatrix4( invertedMat );
-					triangle.c.applyMatrix4( invertedMat );
-					triangle.needsUpdate = true;
-
-					for ( let i2 = 0, l2 = index.count; i2 < l2; i2 += 3 ) {
-
-						setTriangle( triangle2, i2, index, pos );
-						triangle2.needsUpdate = true;
-
-						if ( triangle.intersectsTriangle( triangle2 ) ) {
-
-							return true;
-
-						}
-
-					}
-
-				}
-
-			}
-
-		} else {
-
-			const left = nodeIndex32 + 8;
-			const right = uint32Array[ nodeIndex32 + 6 ];
-
-			arrayToBox( BOUNDING_DATA_INDEX( left ), float32Array, boundingBox );
-			const leftIntersection =
-				cachedObb.intersectsBox( boundingBox ) &&
-				intersectsGeometry( left, geometry, otherGeometry, geometryToBvh, cachedObb );
-
-			if ( leftIntersection ) return true;
-
-			arrayToBox( BOUNDING_DATA_INDEX( right ), float32Array, boundingBox );
-			const rightIntersection =
-				cachedObb.intersectsBox( boundingBox ) &&
-				intersectsGeometry( right, geometry, otherGeometry, geometryToBvh, cachedObb );
-
-			if ( rightIntersection ) return true;
-
-			return false;
-
-		}
-
-	};
-
-} )();
-
-function intersectRay( nodeIndex32, array, ray, target ) {
-
-	arrayToBox( nodeIndex32, array, boundingBox );
-	return ray.intersectBox( boundingBox, target );
-
-}
-
-const bufferStack = [];
-let _prevBuffer;
-let _float32Array;
-let _uint16Array;
-let _uint32Array;
-function setBuffer( buffer ) {
-
-	if ( _prevBuffer ) {
-
-		bufferStack.push( _prevBuffer );
-
-	}
-
-	_prevBuffer = buffer;
-	_float32Array = new Float32Array( buffer );
-	_uint16Array = new Uint16Array( buffer );
-	_uint32Array = new Uint32Array( buffer );
-
-}
-
-function clearBuffer() {
-
-	_prevBuffer = null;
-	_float32Array = null;
-	_uint16Array = null;
-	_uint32Array = null;
-
-	if ( bufferStack.length ) {
-
-		setBuffer( bufferStack.pop() );
-
-	}
-
-}
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/core/MeshBVH.js
-
-
-
-
-
-
-
-
-
-
-const SKIP_GENERATION = Symbol( 'skip tree generation' );
-
-const aabb = /* @__PURE__ */ new three_module.Box3();
-const aabb2 = /* @__PURE__ */ new three_module.Box3();
-const tempMatrix = /* @__PURE__ */ new three_module.Matrix4();
-const obb = /* @__PURE__ */ new OrientedBox();
-const obb2 = /* @__PURE__ */ new OrientedBox();
-const temp = /* @__PURE__ */ new three_module.Vector3();
-const temp1 = /* @__PURE__ */ new three_module.Vector3();
-const temp2 = /* @__PURE__ */ new three_module.Vector3();
-const temp3 = /* @__PURE__ */ new three_module.Vector3();
-const temp4 = /* @__PURE__ */ new three_module.Vector3();
-const tempBox = /* @__PURE__ */ new three_module.Box3();
-const trianglePool = /* @__PURE__ */ new PrimitivePool( () => new ExtendedTriangle() );
-
-class MeshBVH {
-
-	static serialize( bvh, options = {} ) {
-
-		if ( options.isBufferGeometry ) {
-
-			console.warn( 'MeshBVH.serialize: The arguments for the function have changed. See documentation for new signature.' );
-
-			return MeshBVH.serialize(
-				arguments[ 0 ],
-				{
-					cloneBuffers: arguments[ 2 ] === undefined ? true : arguments[ 2 ],
-				}
-			);
-
-		}
-
-		options = {
-			cloneBuffers: true,
-			...options,
-		};
-
-		const geometry = bvh.geometry;
-		const rootData = bvh._roots;
-		const indexAttribute = geometry.getIndex();
-		let result;
-		if ( options.cloneBuffers ) {
-
-			result = {
-				roots: rootData.map( root => root.slice() ),
-				index: indexAttribute.array.slice(),
-			};
-
-		} else {
-
-			result = {
-				roots: rootData,
-				index: indexAttribute.array,
-			};
-
-		}
-
-		return result;
-
-	}
-
-	static deserialize( data, geometry, options = {} ) {
-
-		if ( typeof options === 'boolean' ) {
-
-			console.warn( 'MeshBVH.deserialize: The arguments for the function have changed. See documentation for new signature.' );
-
-			return MeshBVH.deserialize(
-				arguments[ 0 ],
-				arguments[ 1 ],
-				{
-					setIndex: arguments[ 2 ] === undefined ? true : arguments[ 2 ],
-				}
-			);
-
-		}
-
-		options = {
-			setIndex: true,
-			...options,
-		};
-
-		const { index, roots } = data;
-		const bvh = new MeshBVH( geometry, { ...options, [ SKIP_GENERATION ]: true } );
-		bvh._roots = roots;
-
-		if ( options.setIndex ) {
-
-			const indexAttribute = geometry.getIndex();
-			if ( indexAttribute === null ) {
-
-				const newIndex = new three_module.BufferAttribute( data.index, 1, false );
-				geometry.setIndex( newIndex );
-
-			} else if ( indexAttribute.array !== index ) {
-
-				indexAttribute.array.set( index );
-				indexAttribute.needsUpdate = true;
-
-			}
-
-		}
-
-		return bvh;
-
-	}
-
-	constructor( geometry, options = {} ) {
-
-		if ( ! geometry.isBufferGeometry ) {
-
-			throw new Error( 'MeshBVH: Only BufferGeometries are supported.' );
-
-		} else if ( geometry.index && geometry.index.isInterleavedBufferAttribute ) {
-
-			throw new Error( 'MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.' );
-
-		}
-
-		// default options
-		options = Object.assign( {
-
-			strategy: CENTER,
-			maxDepth: 40,
-			maxLeafTris: 10,
-			verbose: true,
-			useSharedArrayBuffer: false,
-			setBoundingBox: true,
-			onProgress: null,
-
-			// undocumented options
-
-			// Whether to skip generating the tree. Used for deserialization.
-			[ SKIP_GENERATION ]: false,
-
-		}, options );
-
-		if ( options.useSharedArrayBuffer && typeof SharedArrayBuffer === 'undefined' ) {
-
-			throw new Error( 'MeshBVH: SharedArrayBuffer is not available.' );
-
-		}
-
-		this._roots = null;
-		if ( ! options[ SKIP_GENERATION ] ) {
-
-			this._roots = buildPackedTree( geometry, options );
-
-			if ( ! geometry.boundingBox && options.setBoundingBox ) {
-
-				geometry.boundingBox = this.getBoundingBox( new three_module.Box3() );
-
-			}
-
-		}
-
-		// retain references to the geometry so we can use them it without having to
-		// take a geometry reference in every function.
-		this.geometry = geometry;
-
-	}
-
-	refit( nodeIndices = null ) {
-
-		if ( nodeIndices && Array.isArray( nodeIndices ) ) {
-
-			nodeIndices = new Set( nodeIndices );
-
-		}
-
-		const geometry = this.geometry;
-		const indexArr = geometry.index.array;
-		const posAttr = geometry.attributes.position;
-
-		let buffer, uint32Array, uint16Array, float32Array;
-		let byteOffset = 0;
-		const roots = this._roots;
-		for ( let i = 0, l = roots.length; i < l; i ++ ) {
-
-			buffer = roots[ i ];
-			uint32Array = new Uint32Array( buffer );
-			uint16Array = new Uint16Array( buffer );
-			float32Array = new Float32Array( buffer );
-
-			_traverse( 0, byteOffset );
-			byteOffset += buffer.byteLength;
-
-		}
-
-		function _traverse( node32Index, byteOffset, force = false ) {
-
-			const node16Index = node32Index * 2;
-			const isLeaf = uint16Array[ node16Index + 15 ] === IS_LEAFNODE_FLAG;
-			if ( isLeaf ) {
-
-				const offset = uint32Array[ node32Index + 6 ];
-				const count = uint16Array[ node16Index + 14 ];
-
-				let minx = Infinity;
-				let miny = Infinity;
-				let minz = Infinity;
-				let maxx = - Infinity;
-				let maxy = - Infinity;
-				let maxz = - Infinity;
-
-				for ( let i = 3 * offset, l = 3 * ( offset + count ); i < l; i ++ ) {
-
-					const index = indexArr[ i ];
-					const x = posAttr.getX( index );
-					const y = posAttr.getY( index );
-					const z = posAttr.getZ( index );
-
-					if ( x < minx ) minx = x;
-					if ( x > maxx ) maxx = x;
-
-					if ( y < miny ) miny = y;
-					if ( y > maxy ) maxy = y;
-
-					if ( z < minz ) minz = z;
-					if ( z > maxz ) maxz = z;
-
-				}
-
-				if (
-					float32Array[ node32Index + 0 ] !== minx ||
-					float32Array[ node32Index + 1 ] !== miny ||
-					float32Array[ node32Index + 2 ] !== minz ||
-
-					float32Array[ node32Index + 3 ] !== maxx ||
-					float32Array[ node32Index + 4 ] !== maxy ||
-					float32Array[ node32Index + 5 ] !== maxz
-				) {
-
-					float32Array[ node32Index + 0 ] = minx;
-					float32Array[ node32Index + 1 ] = miny;
-					float32Array[ node32Index + 2 ] = minz;
-
-					float32Array[ node32Index + 3 ] = maxx;
-					float32Array[ node32Index + 4 ] = maxy;
-					float32Array[ node32Index + 5 ] = maxz;
-
-					return true;
-
-				} else {
-
-					return false;
-
-				}
-
-			} else {
-
-				const left = node32Index + 8;
-				const right = uint32Array[ node32Index + 6 ];
-
-				// the identifying node indices provided by the shapecast function include offsets of all
-				// root buffers to guarantee they're unique between roots so offset left and right indices here.
-				const offsetLeft = left + byteOffset;
-				const offsetRight = right + byteOffset;
-				let forceChildren = force;
-				let includesLeft = false;
-				let includesRight = false;
-
-				if ( nodeIndices ) {
-
-					// if we see that neither the left or right child are included in the set that need to be updated
-					// then we assume that all children need to be updated.
-					if ( ! forceChildren ) {
-
-						includesLeft = nodeIndices.has( offsetLeft );
-						includesRight = nodeIndices.has( offsetRight );
-						forceChildren = ! includesLeft && ! includesRight;
-
-					}
-
-				} else {
-
-					includesLeft = true;
-					includesRight = true;
-
-				}
-
-				const traverseLeft = forceChildren || includesLeft;
-				const traverseRight = forceChildren || includesRight;
-
-				let leftChange = false;
-				if ( traverseLeft ) {
-
-					leftChange = _traverse( left, byteOffset, forceChildren );
-
-				}
-
-				let rightChange = false;
-				if ( traverseRight ) {
-
-					rightChange = _traverse( right, byteOffset, forceChildren );
-
-				}
-
-				const didChange = leftChange || rightChange;
-				if ( didChange ) {
-
-					for ( let i = 0; i < 3; i ++ ) {
-
-						const lefti = left + i;
-						const righti = right + i;
-						const minLeftValue = float32Array[ lefti ];
-						const maxLeftValue = float32Array[ lefti + 3 ];
-						const minRightValue = float32Array[ righti ];
-						const maxRightValue = float32Array[ righti + 3 ];
-
-						float32Array[ node32Index + i ] = minLeftValue < minRightValue ? minLeftValue : minRightValue;
-						float32Array[ node32Index + i + 3 ] = maxLeftValue > maxRightValue ? maxLeftValue : maxRightValue;
-
-					}
-
-				}
-
-				return didChange;
-
-			}
-
-		}
-
-	}
-
-	traverse( callback, rootIndex = 0 ) {
-
-		const buffer = this._roots[ rootIndex ];
-		const uint32Array = new Uint32Array( buffer );
-		const uint16Array = new Uint16Array( buffer );
-		_traverse( 0 );
-
-		function _traverse( node32Index, depth = 0 ) {
-
-			const node16Index = node32Index * 2;
-			const isLeaf = uint16Array[ node16Index + 15 ] === IS_LEAFNODE_FLAG;
-			if ( isLeaf ) {
-
-				const offset = uint32Array[ node32Index + 6 ];
-				const count = uint16Array[ node16Index + 14 ];
-				callback( depth, isLeaf, new Float32Array( buffer, node32Index * 4, 6 ), offset, count );
-
-			} else {
-
-				// TODO: use node functions here
-				const left = node32Index + BYTES_PER_NODE / 4;
-				const right = uint32Array[ node32Index + 6 ];
-				const splitAxis = uint32Array[ node32Index + 7 ];
-				const stopTraversal = callback( depth, isLeaf, new Float32Array( buffer, node32Index * 4, 6 ), splitAxis );
-
-				if ( ! stopTraversal ) {
-
-					_traverse( left, depth + 1 );
-					_traverse( right, depth + 1 );
-
-				}
-
-			}
-
-		}
-
-	}
-
-	/* Core Cast Functions */
-	raycast( ray, materialOrSide = three_module.FrontSide ) {
-
-		const roots = this._roots;
-		const geometry = this.geometry;
-		const intersects = [];
-		const isMaterial = materialOrSide.isMaterial;
-		const isArrayMaterial = Array.isArray( materialOrSide );
-
-		const groups = geometry.groups;
-		const side = isMaterial ? materialOrSide.side : materialOrSide;
-		for ( let i = 0, l = roots.length; i < l; i ++ ) {
-
-			const materialSide = isArrayMaterial ? materialOrSide[ groups[ i ].materialIndex ].side : side;
-			const startCount = intersects.length;
-
-			setBuffer( roots[ i ] );
-			raycast( 0, geometry, materialSide, ray, intersects );
-			clearBuffer();
-
-			if ( isArrayMaterial ) {
-
-				const materialIndex = groups[ i ].materialIndex;
-				for ( let j = startCount, jl = intersects.length; j < jl; j ++ ) {
-
-					intersects[ j ].face.materialIndex = materialIndex;
-
-				}
-
-			}
-
-		}
-
-		return intersects;
-
-	}
-
-	raycastFirst( ray, materialOrSide = three_module.FrontSide ) {
-
-		const roots = this._roots;
-		const geometry = this.geometry;
-		const isMaterial = materialOrSide.isMaterial;
-		const isArrayMaterial = Array.isArray( materialOrSide );
-
-		let closestResult = null;
-
-		const groups = geometry.groups;
-		const side = isMaterial ? materialOrSide.side : materialOrSide;
-		for ( let i = 0, l = roots.length; i < l; i ++ ) {
-
-			const materialSide = isArrayMaterial ? materialOrSide[ groups[ i ].materialIndex ].side : side;
-
-			setBuffer( roots[ i ] );
-			const result = raycastFirst( 0, geometry, materialSide, ray );
-			clearBuffer();
-
-			if ( result != null && ( closestResult == null || result.distance < closestResult.distance ) ) {
-
-				closestResult = result;
-				if ( isArrayMaterial ) {
-
-					result.face.materialIndex = groups[ i ].materialIndex;
-
-				}
-
-			}
-
-		}
-
-		return closestResult;
-
-	}
-
-	intersectsGeometry( otherGeometry, geomToMesh ) {
-
-		const geometry = this.geometry;
-		let result = false;
-		for ( const root of this._roots ) {
-
-			setBuffer( root );
-			result = intersectsGeometry( 0, geometry, otherGeometry, geomToMesh );
-			clearBuffer();
-
-			if ( result ) {
-
-				break;
-
-			}
-
-		}
-
-		return result;
-
-	}
-
-	shapecast( callbacks, _intersectsTriangleFunc, _orderNodesFunc ) {
-
-		const geometry = this.geometry;
-		if ( callbacks instanceof Function ) {
-
-			if ( _intersectsTriangleFunc ) {
-
-				// Support the previous function signature that provided three sequential index buffer
-				// indices here.
-				const originalTriangleFunc = _intersectsTriangleFunc;
-				_intersectsTriangleFunc = ( tri, index, contained, depth ) => {
-
-					const i3 = index * 3;
-					return originalTriangleFunc( tri, i3, i3 + 1, i3 + 2, contained, depth );
-
-				};
-
-
-			}
-
-			callbacks = {
-
-				boundsTraverseOrder: _orderNodesFunc,
-				intersectsBounds: callbacks,
-				intersectsTriangle: _intersectsTriangleFunc,
-				intersectsRange: null,
-
-			};
-
-			console.warn( 'MeshBVH: Shapecast function signature has changed and now takes an object of callbacks as a second argument. See docs for new signature.' );
-
-		}
-
-		const triangle = trianglePool.getPrimitive();
-		let {
-			boundsTraverseOrder,
-			intersectsBounds,
-			intersectsRange,
-			intersectsTriangle,
-		} = callbacks;
-
-		if ( intersectsRange && intersectsTriangle ) {
-
-			const originalIntersectsRange = intersectsRange;
-			intersectsRange = ( offset, count, contained, depth, nodeIndex ) => {
-
-				if ( ! originalIntersectsRange( offset, count, contained, depth, nodeIndex ) ) {
-
-					return iterateOverTriangles( offset, count, geometry, intersectsTriangle, contained, depth, triangle );
-
-				}
-
-				return true;
-
-			};
-
-		} else if ( ! intersectsRange ) {
-
-			if ( intersectsTriangle ) {
-
-				intersectsRange = ( offset, count, contained, depth ) => {
-
-					return iterateOverTriangles( offset, count, geometry, intersectsTriangle, contained, depth, triangle );
-
-				};
-
-			} else {
-
-				intersectsRange = ( offset, count, contained ) => {
-
-					return contained;
-
-				};
-
-			}
-
-		}
-
-		let result = false;
-		let byteOffset = 0;
-		for ( const root of this._roots ) {
-
-			setBuffer( root );
-			result = shapecast( 0, geometry, intersectsBounds, intersectsRange, boundsTraverseOrder, byteOffset );
-			clearBuffer();
-
-			if ( result ) {
-
-				break;
-
-			}
-
-			byteOffset += root.byteLength;
-
-		}
-
-		trianglePool.releasePrimitive( triangle );
-
-		return result;
-
-	}
-
-	bvhcast( otherBvh, matrixToLocal, callbacks ) {
-
-		// BVHCast function for intersecting two BVHs against each other. Ultimately just uses two recursive shapecast calls rather
-		// than an approach that walks down the tree (see bvhcast.js file for more info).
-
-		let {
-			intersectsRanges,
-			intersectsTriangles,
-		} = callbacks;
-
-		const indexAttr = this.geometry.index;
-		const positionAttr = this.geometry.attributes.position;
-
-		const otherIndexAttr = otherBvh.geometry.index;
-		const otherPositionAttr = otherBvh.geometry.attributes.position;
-
-		tempMatrix.copy( matrixToLocal ).invert();
-
-		const triangle = trianglePool.getPrimitive();
-		const triangle2 = trianglePool.getPrimitive();
-
-		if ( intersectsTriangles ) {
-
-			function iterateOverDoubleTriangles( offset1, count1, offset2, count2, depth1, index1, depth2, index2 ) {
-
-				for ( let i2 = offset2, l2 = offset2 + count2; i2 < l2; i2 ++ ) {
-
-					setTriangle( triangle2, i2 * 3, otherIndexAttr, otherPositionAttr );
-					triangle2.a.applyMatrix4( matrixToLocal );
-					triangle2.b.applyMatrix4( matrixToLocal );
-					triangle2.c.applyMatrix4( matrixToLocal );
-					triangle2.needsUpdate = true;
-
-					for ( let i1 = offset1, l1 = offset1 + count1; i1 < l1; i1 ++ ) {
-
-						setTriangle( triangle, i1 * 3, indexAttr, positionAttr );
-						triangle.needsUpdate = true;
-
-						if ( intersectsTriangles( triangle, triangle2, i1, i2, depth1, index1, depth2, index2 ) ) {
-
-							return true;
-
-						}
-
-					}
-
-				}
-
-				return false;
-
-			}
-
-			if ( intersectsRanges ) {
-
-				const originalIntersectsRanges = intersectsRanges;
-				intersectsRanges = function ( offset1, count1, offset2, count2, depth1, index1, depth2, index2 ) {
-
-					if ( ! originalIntersectsRanges( offset1, count1, offset2, count2, depth1, index1, depth2, index2 ) ) {
-
-						return iterateOverDoubleTriangles( offset1, count1, offset2, count2, depth1, index1, depth2, index2 );
-
-					}
-
-					return true;
-
-				};
-
-			} else {
-
-				intersectsRanges = iterateOverDoubleTriangles;
-
-			}
-
-		}
-
-		otherBvh.getBoundingBox( aabb2 );
-		aabb2.applyMatrix4( matrixToLocal );
-		const result = this.shapecast( {
-
-			intersectsBounds: box => aabb2.intersectsBox( box ),
-
-			intersectsRange: ( offset1, count1, contained, depth1, nodeIndex1, box ) => {
-
-				aabb.copy( box );
-				aabb.applyMatrix4( tempMatrix );
-				return otherBvh.shapecast( {
-
-					intersectsBounds: box => aabb.intersectsBox( box ),
-
-					intersectsRange: ( offset2, count2, contained, depth2, nodeIndex2 ) => {
-
-						return intersectsRanges( offset1, count1, offset2, count2, depth1, nodeIndex1, depth2, nodeIndex2 );
-
-					},
-
-				} );
-
-			}
-
-		} );
-
-		trianglePool.releasePrimitive( triangle );
-		trianglePool.releasePrimitive( triangle2 );
-		return result;
-
-	}
-
-	/* Derived Cast Functions */
-	intersectsBox( box, boxToMesh ) {
-
-		obb.set( box.min, box.max, boxToMesh );
-		obb.needsUpdate = true;
-
-		return this.shapecast(
-			{
-				intersectsBounds: box => obb.intersectsBox( box ),
-				intersectsTriangle: tri => obb.intersectsTriangle( tri )
-			}
-		);
-
-	}
-
-	intersectsSphere( sphere ) {
-
-		return this.shapecast(
-			{
-				intersectsBounds: box => sphere.intersectsBox( box ),
-				intersectsTriangle: tri => tri.intersectsSphere( sphere )
-			}
-		);
-
-	}
-
-	closestPointToGeometry( otherGeometry, geometryToBvh, target1 = { }, target2 = { }, minThreshold = 0, maxThreshold = Infinity ) {
-
-		if ( ! otherGeometry.boundingBox ) {
-
-			otherGeometry.computeBoundingBox();
-
-		}
-
-		obb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );
-		obb.needsUpdate = true;
-
-		const geometry = this.geometry;
-		const pos = geometry.attributes.position;
-		const index = geometry.index;
-		const otherPos = otherGeometry.attributes.position;
-		const otherIndex = otherGeometry.index;
-		const triangle = trianglePool.getPrimitive();
-		const triangle2 = trianglePool.getPrimitive();
-
-		let tempTarget1 = temp1;
-		let tempTargetDest1 = temp2;
-		let tempTarget2 = null;
-		let tempTargetDest2 = null;
-
-		if ( target2 ) {
-
-			tempTarget2 = temp3;
-			tempTargetDest2 = temp4;
-
-		}
-
-		let closestDistance = Infinity;
-		let closestDistanceTriIndex = null;
-		let closestDistanceOtherTriIndex = null;
-		tempMatrix.copy( geometryToBvh ).invert();
-		obb2.matrix.copy( tempMatrix );
-		this.shapecast(
-			{
-
-				boundsTraverseOrder: box => {
-
-					return obb.distanceToBox( box );
-
-				},
-
-				intersectsBounds: ( box, isLeaf, score ) => {
-
-					if ( score < closestDistance && score < maxThreshold ) {
-
-						// if we know the triangles of this bounds will be intersected next then
-						// save the bounds to use during triangle checks.
-						if ( isLeaf ) {
-
-							obb2.min.copy( box.min );
-							obb2.max.copy( box.max );
-							obb2.needsUpdate = true;
-
-						}
-
-						return true;
-
-					}
-
-					return false;
-
-				},
-
-				intersectsRange: ( offset, count ) => {
-
-					if ( otherGeometry.boundsTree ) {
-
-						// if the other geometry has a bvh then use the accelerated path where we use shapecast to find
-						// the closest bounds in the other geometry to check.
-						return otherGeometry.boundsTree.shapecast( {
-							boundsTraverseOrder: box => {
-
-								return obb2.distanceToBox( box );
-
-							},
-
-							intersectsBounds: ( box, isLeaf, score ) => {
-
-								return score < closestDistance && score < maxThreshold;
-
-							},
-
-							intersectsRange: ( otherOffset, otherCount ) => {
-
-								for ( let i2 = otherOffset * 3, l2 = ( otherOffset + otherCount ) * 3; i2 < l2; i2 += 3 ) {
-
-									setTriangle( triangle2, i2, otherIndex, otherPos );
-									triangle2.a.applyMatrix4( geometryToBvh );
-									triangle2.b.applyMatrix4( geometryToBvh );
-									triangle2.c.applyMatrix4( geometryToBvh );
-									triangle2.needsUpdate = true;
-
-									for ( let i = offset * 3, l = ( offset + count ) * 3; i < l; i += 3 ) {
-
-										setTriangle( triangle, i, index, pos );
-										triangle.needsUpdate = true;
-
-										const dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );
-										if ( dist < closestDistance ) {
-
-											tempTargetDest1.copy( tempTarget1 );
-
-											if ( tempTargetDest2 ) {
-
-												tempTargetDest2.copy( tempTarget2 );
-
-											}
-
-											closestDistance = dist;
-											closestDistanceTriIndex = i / 3;
-											closestDistanceOtherTriIndex = i2 / 3;
-
-										}
-
-										// stop traversal if we find a point that's under the given threshold
-										if ( dist < minThreshold ) {
-
-											return true;
-
-										}
-
-									}
-
-								}
-
-							},
-						} );
-
-					} else {
-
-						// If no bounds tree then we'll just check every triangle.
-						const triCount = otherIndex ? otherIndex.count : otherPos.count;
-						for ( let i2 = 0, l2 = triCount; i2 < l2; i2 += 3 ) {
-
-							setTriangle( triangle2, i2, otherIndex, otherPos );
-							triangle2.a.applyMatrix4( geometryToBvh );
-							triangle2.b.applyMatrix4( geometryToBvh );
-							triangle2.c.applyMatrix4( geometryToBvh );
-							triangle2.needsUpdate = true;
-
-							for ( let i = offset * 3, l = ( offset + count ) * 3; i < l; i += 3 ) {
-
-								setTriangle( triangle, i, index, pos );
-								triangle.needsUpdate = true;
-
-								const dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );
-								if ( dist < closestDistance ) {
-
-									tempTargetDest1.copy( tempTarget1 );
-
-									if ( tempTargetDest2 ) {
-
-										tempTargetDest2.copy( tempTarget2 );
-
-									}
-
-									closestDistance = dist;
-									closestDistanceTriIndex = i / 3;
-									closestDistanceOtherTriIndex = i2 / 3;
-
-								}
-
-								// stop traversal if we find a point that's under the given threshold
-								if ( dist < minThreshold ) {
-
-									return true;
-
-								}
-
-							}
-
-						}
-
-					}
-
-				},
-
-			}
-
-		);
-
-		trianglePool.releasePrimitive( triangle );
-		trianglePool.releasePrimitive( triangle2 );
-
-		if ( closestDistance === Infinity ) return null;
-
-		if ( ! target1.point ) target1.point = tempTargetDest1.clone();
-		else target1.point.copy( tempTargetDest1 );
-		target1.distance = closestDistance,
-		target1.faceIndex = closestDistanceTriIndex;
-
-		if ( target2 ) {
-
-			if ( ! target2.point ) target2.point = tempTargetDest2.clone();
-			else target2.point.copy( tempTargetDest2 );
-			target2.point.applyMatrix4( tempMatrix );
-			tempTargetDest1.applyMatrix4( tempMatrix );
-			target2.distance = tempTargetDest1.sub( target2.point ).length();
-			target2.faceIndex = closestDistanceOtherTriIndex;
-
-		}
-
-		return target1;
-
-	}
-
-	closestPointToPoint( point, target = { }, minThreshold = 0, maxThreshold = Infinity ) {
-
-		// early out if under minThreshold
-		// skip checking if over maxThreshold
-		// set minThreshold = maxThreshold to quickly check if a point is within a threshold
-		// returns Infinity if no value found
-		const minThresholdSq = minThreshold * minThreshold;
-		const maxThresholdSq = maxThreshold * maxThreshold;
-		let closestDistanceSq = Infinity;
-		let closestDistanceTriIndex = null;
-		this.shapecast(
-
-			{
-
-				boundsTraverseOrder: box => {
-
-					temp.copy( point ).clamp( box.min, box.max );
-					return temp.distanceToSquared( point );
-
-				},
-
-				intersectsBounds: ( box, isLeaf, score ) => {
-
-					return score < closestDistanceSq && score < maxThresholdSq;
-
-				},
-
-				intersectsTriangle: ( tri, triIndex ) => {
-
-					tri.closestPointToPoint( point, temp );
-					const distSq = point.distanceToSquared( temp );
-					if ( distSq < closestDistanceSq ) {
-
-						temp1.copy( temp );
-						closestDistanceSq = distSq;
-						closestDistanceTriIndex = triIndex;
-
-					}
-
-					if ( distSq < minThresholdSq ) {
-
-						return true;
-
-					} else {
-
-						return false;
-
-					}
-
-				},
-
-			}
-
-		);
-
-		if ( closestDistanceSq === Infinity ) return null;
-
-		const closestDistance = Math.sqrt( closestDistanceSq );
-
-		if ( ! target.point ) target.point = temp1.clone();
-		else target.point.copy( temp1 );
-		target.distance = closestDistance,
-		target.faceIndex = closestDistanceTriIndex;
-
-		return target;
-
-	}
-
-	getBoundingBox( target ) {
-
-		target.makeEmpty();
-
-		const roots = this._roots;
-		roots.forEach( buffer => {
-
-			arrayToBox( 0, new Float32Array( buffer ), tempBox );
-			target.union( tempBox );
-
-		} );
-
-		return target;
-
-	}
-
-}
-
-;// CONCATENATED MODULE: ./node_modules/three-mesh-bvh/src/utils/ExtensionUtilities.js
-
-
-
-
-const ray = /* @__PURE__ */ new three_module.Ray();
-const tmpInverseMatrix = /* @__PURE__ */ new three_module.Matrix4();
-const origMeshRaycastFunc = three_module.Mesh.prototype.raycast;
-
-function acceleratedRaycast( raycaster, intersects ) {
-
-	if ( this.geometry.boundsTree ) {
-
-		if ( this.material === undefined ) return;
-
-		tmpInverseMatrix.copy( this.matrixWorld ).invert();
-		ray.copy( raycaster.ray ).applyMatrix4( tmpInverseMatrix );
-
-		const bvh = this.geometry.boundsTree;
-		if ( raycaster.firstHitOnly === true ) {
-
-			const hit = convertRaycastIntersect( bvh.raycastFirst( ray, this.material ), this, raycaster );
-			if ( hit ) {
-
-				intersects.push( hit );
-
-			}
-
-		} else {
-
-			const hits = bvh.raycast( ray, this.material );
-			for ( let i = 0, l = hits.length; i < l; i ++ ) {
-
-				const hit = convertRaycastIntersect( hits[ i ], this, raycaster );
-				if ( hit ) {
-
-					intersects.push( hit );
-
-				}
-
-			}
-
-		}
-
-	} else {
-
-		origMeshRaycastFunc.call( this, raycaster, intersects );
-
-	}
-
-}
-
-function computeBoundsTree( options ) {
-
-	this.boundsTree = new MeshBVH( this, options );
-	return this.boundsTree;
-
-}
-
-function disposeBoundsTree() {
-
-	this.boundsTree = null;
-
-}
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useBVH.js
-
-
-
-function useBVH(mesh, options) {
-  react.useEffect(() => {
-    if (mesh.current) {
-      mesh.current.raycast = acceleratedRaycast;
-      const geometry = mesh.current.geometry;
-      geometry.computeBoundsTree = computeBoundsTree;
-      geometry.disposeBoundsTree = disposeBoundsTree;
-      geometry.computeBoundsTree(options);
-      return () => {
-        if (geometry.boundsTree) {
-          geometry.disposeBoundsTree();
-        }
-      };
-    }
-  }, [mesh, options]);
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useContextBridge.js
-
-
-/* eslint-disable react-hooks/rules-of-hooks */
-function useContextBridge(...contexts) {
-  const cRef = react.useRef([]);
-  cRef.current = contexts.map(context => react.useContext(context));
-  return react.useMemo(() => ({
-    children
-  }) => contexts.reduceRight((acc, Context, i) => /*#__PURE__*/react.createElement(Context.Provider, {
-    value: cRef.current[i],
-    children: acc
-  }), children
-  /*
-   * done this way in reference to:
-   * https://github.com/DefinitelyTyped/DefinitelyTyped/issues/44572#issuecomment-625878049
-   * https://github.com/microsoft/TypeScript/issues/14729
-   */
-  ), []);
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useAnimations.js
-
-
-
-
-function useAnimations(clips, root) {
-  const ref = react.useRef();
-  const [actualRef] = react.useState(() => root ? root instanceof three_module.Object3D ? {
-    current: root
-  } : root : ref); // eslint-disable-next-line prettier/prettier
-
-  const [mixer] = react.useState(() => new three_module.AnimationMixer(undefined));
-  const lazyActions = react.useRef({});
-  const [api] = react.useState(() => {
-    const actions = {};
-    clips.forEach(clip => Object.defineProperty(actions, clip.name, {
-      enumerable: true,
-
-      get() {
-        if (actualRef.current) {
-          return lazyActions.current[clip.name] || (lazyActions.current[clip.name] = mixer.clipAction(clip, actualRef.current));
-        }
-      }
-
-    }));
-    return {
-      ref: actualRef,
-      clips,
-      actions,
-      names: clips.map(c => c.name),
-      mixer
-    };
-  });
-  (0,react_three_fiber_esm.useFrame)((state, delta) => mixer.update(delta));
-  react.useEffect(() => {
-    const currentRoot = actualRef.current;
-    return () => {
-      // Clean up only when clips change, wipe out lazy actions and uncache clips
-      lazyActions.current = {};
-      Object.values(api.actions).forEach(action => {
-        if (currentRoot) {
-          mixer.uncacheAction(action, currentRoot);
-        }
-      });
-    };
-  }, [clips]);
-  return api;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useIntersect.js
-
-
-
-function useIntersect(onChange) {
-  const ref = react.useRef(null);
-  const check = react.useRef(false);
-  const temp = react.useRef(false);
-  react.useEffect(() => {
-    const obj = ref.current;
-
-    if (obj) {
-      // Stamp out frustum check pre-emptively
-      const unsub1 = (0,react_three_fiber_esm.addEffect)(() => {
-        check.current = false;
-        return true;
-      }); // If the object is inside the frustum three will call onRender
-
-      const oldOnRender = obj.onBeforeRender;
-
-      obj.onBeforeRender = () => check.current = true; // Compare the check value against the temp value, if it differs set state
-
-
-      const unsub2 = (0,react_three_fiber_esm.addAfterEffect)(() => {
-        if (check.current !== temp.current) onChange(temp.current = check.current);
-        return true;
-      });
-      return () => {
-        obj.onBeforeRender = oldOnRender;
-        unsub1();
-        unsub2();
-      };
-    }
-  }, []);
-  return ref;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useBoxProjectedEnv.js
-
-
-
-
-// and @0beqz https://gist.github.com/0beqz/8d51b4ae16d68021a09fb504af708fca
-
-const worldposReplace =
-/* glsl */
-`
-#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )
-  vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );
-  #ifdef BOX_PROJECTED_ENV_MAP
-    vWorldPosition = worldPosition.xyz;
-  #endif
-#endif
-`;
-const boxProjectDefinitions =
-/*glsl */
-`
-#ifdef BOX_PROJECTED_ENV_MAP
-  uniform vec3 envMapSize;
-  uniform vec3 envMapPosition;
-  varying vec3 vWorldPosition;
-    
-  vec3 parallaxCorrectNormal( vec3 v, vec3 cubeSize, vec3 cubePos ) {
-    vec3 nDir = normalize( v );
-    vec3 rbmax = ( .5 * cubeSize + cubePos - vWorldPosition ) / nDir;
-    vec3 rbmin = ( -.5 * cubeSize + cubePos - vWorldPosition ) / nDir;
-    vec3 rbminmax;
-    rbminmax.x = ( nDir.x > 0. ) ? rbmax.x : rbmin.x;
-    rbminmax.y = ( nDir.y > 0. ) ? rbmax.y : rbmin.y;
-    rbminmax.z = ( nDir.z > 0. ) ? rbmax.z : rbmin.z;
-    float correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z );
-    vec3 boxIntersection = vWorldPosition + nDir * correction;    
-    return boxIntersection - cubePos;
-  }
-#endif
-`; // will be inserted after "vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );"
-
-const getIBLIrradiance_patch =
-/* glsl */
-`
-#ifdef BOX_PROJECTED_ENV_MAP
-  worldNormal = parallaxCorrectNormal( worldNormal, envMapSize, envMapPosition );
-#endif
-`; // will be inserted after "reflectVec = inverseTransformDirection( reflectVec, viewMatrix );"
-
-const getIBLRadiance_patch =
-/* glsl */
-`
-#ifdef BOX_PROJECTED_ENV_MAP
-  reflectVec = parallaxCorrectNormal( reflectVec, envMapSize, envMapPosition );
-#endif
-`;
-
-function boxProjectedEnvMap(shader, envMapPosition, envMapSize) {
-  shader.defines.BOX_PROJECTED_ENV_MAP = true; // uniforms
-
-  shader.uniforms.envMapPosition = {
-    value: envMapPosition
-  };
-  shader.uniforms.envMapSize = {
-    value: envMapSize
-  }; // vertex shader
-
-  shader.vertexShader = `
-  varying vec3 vWorldPosition;
-  ${shader.vertexShader.replace('#include <worldpos_vertex>', worldposReplace)}`; // fragment shader
-
-  shader.fragmentShader = `
-    ${boxProjectDefinitions}
-    ${shader.fragmentShader.replace('#include <envmap_physical_pars_fragment>', three_module.ShaderChunk.envmap_physical_pars_fragment).replace('vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );', `vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );
-         ${getIBLIrradiance_patch}
-         `).replace('reflectVec = inverseTransformDirection( reflectVec, viewMatrix );', `reflectVec = inverseTransformDirection( reflectVec, viewMatrix );
-         ${getIBLRadiance_patch}
-        `)}`;
-}
-
-function useBoxProjectedEnv(position = new three_module.Vector3(), size = new three_module.Vector3()) {
-  const [config] = react.useState(() => ({
-    position: new three_module.Vector3(),
-    size: new three_module.Vector3()
-  }));
-  (0,react_three_fiber_esm.applyProps)(config, {
-    position,
-    size
-  });
-  const ref = react.useRef(null);
-  const spread = react.useMemo(() => ({
-    ref,
-    onBeforeCompile: shader => boxProjectedEnvMap(shader, config.position, config.size),
-    customProgramCacheKey: () => JSON.stringify(config.position.toArray()) + JSON.stringify(config.size.toArray())
-  }), [...config.position.toArray(), ...config.size.toArray()]);
-  react.useLayoutEffect(() => void (ref.current.needsUpdate = true), [config]);
-  return spread;
-}
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/modifiers/CurveModifier.js
-var CurveModifier = __webpack_require__(53615);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/CurveModifier.js
-
-
-
-
-
-const CurveModifier_CurveModifier = /*#__PURE__*/react.forwardRef(({
-  children,
-  curve
-}, ref) => {
-  const [scene] = react.useState(() => new three_module.Scene());
-  const [obj, set] = react.useState();
-  const modifier = react.useRef();
-  react.useEffect(() => {
-    modifier.current = new CurveModifier/* Flow */.Zw(scene.children[0]);
-    set(modifier.current.object3D);
-  }, [children]);
-  react.useEffect(() => {
-    var _modifier$current;
-
-    if (curve) (_modifier$current = modifier.current) == null ? void 0 : _modifier$current.updateCurve(0, curve);
-  }, [curve]);
-  react.useImperativeHandle(ref, () => ({
-    moveAlongCurve: val => {
-      var _modifier$current2;
-
-      (_modifier$current2 = modifier.current) == null ? void 0 : _modifier$current2.moveAlongCurve(val);
-    }
-  }));
-  return /*#__PURE__*/react.createElement(react.Fragment, null, (0,react_three_fiber_esm.createPortal)(children, scene), obj && /*#__PURE__*/react.createElement("primitive", {
-    object: obj
-  }));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/helpers/glsl/distort.vert.glsl.js
-var distort = "#define GLSLIFY 1\nvec3 mod289(vec3 x){return x-floor(x*(1.0/289.0))*289.0;}vec4 mod289(vec4 x){return x-floor(x*(1.0/289.0))*289.0;}vec4 permute(vec4 x){return mod289(((x*34.0)+1.0)*x);}vec4 taylorInvSqrt(vec4 r){return 1.79284291400159-0.85373472095314*r;}float snoise(vec3 v){const vec2 C=vec2(1.0/6.0,1.0/3.0);const vec4 D=vec4(0.0,0.5,1.0,2.0);vec3 i=floor(v+dot(v,C.yyy));vec3 x0=v-i+dot(i,C.xxx);vec3 g=step(x0.yzx,x0.xyz);vec3 l=1.0-g;vec3 i1=min(g.xyz,l.zxy);vec3 i2=max(g.xyz,l.zxy);vec3 x1=x0-i1+C.xxx;vec3 x2=x0-i2+C.yyy;vec3 x3=x0-D.yyy;i=mod289(i);vec4 p=permute(permute(permute(i.z+vec4(0.0,i1.z,i2.z,1.0))+i.y+vec4(0.0,i1.y,i2.y,1.0))+i.x+vec4(0.0,i1.x,i2.x,1.0));float n_=0.142857142857;vec3 ns=n_*D.wyz-D.xzx;vec4 j=p-49.0*floor(p*ns.z*ns.z);vec4 x_=floor(j*ns.z);vec4 y_=floor(j-7.0*x_);vec4 x=x_*ns.x+ns.yyyy;vec4 y=y_*ns.x+ns.yyyy;vec4 h=1.0-abs(x)-abs(y);vec4 b0=vec4(x.xy,y.xy);vec4 b1=vec4(x.zw,y.zw);vec4 s0=floor(b0)*2.0+1.0;vec4 s1=floor(b1)*2.0+1.0;vec4 sh=-step(h,vec4(0.0));vec4 a0=b0.xzyw+s0.xzyw*sh.xxyy;vec4 a1=b1.xzyw+s1.xzyw*sh.zzww;vec3 p0=vec3(a0.xy,h.x);vec3 p1=vec3(a0.zw,h.y);vec3 p2=vec3(a1.xy,h.z);vec3 p3=vec3(a1.zw,h.w);vec4 norm=taylorInvSqrt(vec4(dot(p0,p0),dot(p1,p1),dot(p2,p2),dot(p3,p3)));p0*=norm.x;p1*=norm.y;p2*=norm.z;p3*=norm.w;vec4 m=max(0.6-vec4(dot(x0,x0),dot(x1,x1),dot(x2,x2),dot(x3,x3)),0.0);m=m*m;return 42.0*dot(m*m,vec4(dot(p0,x0),dot(p1,x1),dot(p2,x2),dot(p3,x3)));}"; // eslint-disable-line
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/MeshDistortMaterial.js
-
-
-
-
-
-
-class DistortMaterialImpl extends three_module.MeshPhysicalMaterial {
-  constructor(parameters = {}) {
-    super(parameters);
-    this.setValues(parameters);
-    this._time = {
-      value: 0
-    };
-    this._distort = {
-      value: 0.4
-    };
-    this._radius = {
-      value: 1
-    };
-  }
-
-  onBeforeCompile(shader) {
-    shader.uniforms.time = this._time;
-    shader.uniforms.radius = this._radius;
-    shader.uniforms.distort = this._distort;
-    shader.vertexShader = `
-      uniform float time;
-      uniform float radius;
-      uniform float distort;
-      ${distort}
-      ${shader.vertexShader}
-    `;
-    shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `
-        float updateTime = time / 50.0;
-        float noise = snoise(vec3(position / 2.0 + updateTime * 5.0));
-        vec3 transformed = vec3(position * (noise * pow(distort, 2.0) + radius));
-        `);
-  }
-
-  get time() {
-    return this._time.value;
-  }
-
-  set time(v) {
-    this._time.value = v;
-  }
-
-  get distort() {
-    return this._distort.value;
-  }
-
-  set distort(v) {
-    this._distort.value = v;
-  }
-
-  get radius() {
-    return this._radius.value;
-  }
-
-  set radius(v) {
-    this._radius.value = v;
-  }
-
-}
-
-const MeshDistortMaterial = /*#__PURE__*/react.forwardRef(({
-  speed = 1,
-  ...props
-}, ref) => {
-  const [material] = react.useState(() => new DistortMaterialImpl());
-  (0,react_three_fiber_esm.useFrame)(state => material && (material.time = state.clock.getElapsedTime() * speed));
-  return /*#__PURE__*/react.createElement("primitive", _extends({
-    dispose: undefined,
-    object: material,
-    ref: ref,
-    attach: "material"
-  }, props));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/MeshWobbleMaterial.js
-
-
-
-
-
-class WobbleMaterialImpl extends three_module.MeshStandardMaterial {
-  constructor(parameters = {}) {
-    super(parameters);
-    this.setValues(parameters);
-    this._time = {
-      value: 0
-    };
-    this._factor = {
-      value: 1
-    };
-  }
-
-  onBeforeCompile(shader) {
-    shader.uniforms.time = this._time;
-    shader.uniforms.factor = this._factor;
-    shader.vertexShader = `
-      uniform float time;
-      uniform float factor;
-      ${shader.vertexShader}
-    `;
-    shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `float theta = sin( time + position.y ) / 2.0 * factor;
-        float c = cos( theta );
-        float s = sin( theta );
-        mat3 m = mat3( c, 0, s, 0, 1, 0, -s, 0, c );
-        vec3 transformed = vec3( position ) * m;
-        vNormal = vNormal * m;`);
-  }
-
-  get time() {
-    return this._time.value;
-  }
-
-  set time(v) {
-    this._time.value = v;
-  }
-
-  get factor() {
-    return this._factor.value;
-  }
-
-  set factor(v) {
-    this._factor.value = v;
-  }
-
-}
-
-const MeshWobbleMaterial = /*#__PURE__*/react.forwardRef(({
-  speed = 1,
-  ...props
-}, ref) => {
-  const [material] = react.useState(() => new WobbleMaterialImpl());
-  (0,react_three_fiber_esm.useFrame)(state => material && (material.time = state.clock.getElapsedTime() * speed));
-  return /*#__PURE__*/react.createElement("primitive", _extends({
-    dispose: undefined,
-    object: material,
-    ref: ref,
-    attach: "material"
-  }, props));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/materials/ConvolutionMaterial.js
-
-
-class ConvolutionMaterial extends three_module.ShaderMaterial {
-  constructor(texelSize = new three_module.Vector2()) {
-    super({
-      uniforms: {
-        inputBuffer: new three_module.Uniform(null),
-        depthBuffer: new three_module.Uniform(null),
-        resolution: new three_module.Uniform(new three_module.Vector2()),
-        texelSize: new three_module.Uniform(new three_module.Vector2()),
-        halfTexelSize: new three_module.Uniform(new three_module.Vector2()),
-        kernel: new three_module.Uniform(0.0),
-        scale: new three_module.Uniform(1.0),
-        cameraNear: new three_module.Uniform(0.0),
-        cameraFar: new three_module.Uniform(1.0),
-        minDepthThreshold: new three_module.Uniform(0.0),
-        maxDepthThreshold: new three_module.Uniform(1.0),
-        depthScale: new three_module.Uniform(0.0),
-        depthToBlurRatioBias: new three_module.Uniform(0.25)
-      },
-      fragmentShader: `#include <common>
-        #include <dithering_pars_fragment>      
-        uniform sampler2D inputBuffer;
-        uniform sampler2D depthBuffer;
-        uniform float cameraNear;
-        uniform float cameraFar;
-        uniform float minDepthThreshold;
-        uniform float maxDepthThreshold;
-        uniform float depthScale;
-        uniform float depthToBlurRatioBias;
-        varying vec2 vUv;
-        varying vec2 vUv0;
-        varying vec2 vUv1;
-        varying vec2 vUv2;
-        varying vec2 vUv3;
-
-        void main() {
-          float depthFactor = 0.0;
-          
-          #ifdef USE_DEPTH
-            vec4 depth = texture2D(depthBuffer, vUv);
-            depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));
-            depthFactor *= depthScale;
-            depthFactor = max(0.0, min(1.0, depthFactor + 0.25));
-          #endif
-          
-          vec4 sum = texture2D(inputBuffer, mix(vUv0, vUv, depthFactor));
-          sum += texture2D(inputBuffer, mix(vUv1, vUv, depthFactor));
-          sum += texture2D(inputBuffer, mix(vUv2, vUv, depthFactor));
-          sum += texture2D(inputBuffer, mix(vUv3, vUv, depthFactor));
-          gl_FragColor = sum * 0.25 ;
-
-          #include <dithering_fragment>
-          #include <tonemapping_fragment>
-          #include <encodings_fragment>
-        }`,
-      vertexShader: `uniform vec2 texelSize;
-        uniform vec2 halfTexelSize;
-        uniform float kernel;
-        uniform float scale;
-        varying vec2 vUv;
-        varying vec2 vUv0;
-        varying vec2 vUv1;
-        varying vec2 vUv2;
-        varying vec2 vUv3;
-
-        void main() {
-          vec2 uv = position.xy * 0.5 + 0.5;
-          vUv = uv;
-
-          vec2 dUv = (texelSize * vec2(kernel) + halfTexelSize) * scale;
-          vUv0 = vec2(uv.x - dUv.x, uv.y + dUv.y);
-          vUv1 = vec2(uv.x + dUv.x, uv.y + dUv.y);
-          vUv2 = vec2(uv.x + dUv.x, uv.y - dUv.y);
-          vUv3 = vec2(uv.x - dUv.x, uv.y - dUv.y);
-
-          gl_Position = vec4(position.xy, 1.0, 1.0);
-        }`,
-      blending: three_module.NoBlending,
-      depthWrite: false,
-      depthTest: false
-    });
-    this.toneMapped = false;
-    this.setTexelSize(texelSize.x, texelSize.y);
-    this.kernel = new Float32Array([0.0, 1.0, 2.0, 2.0, 3.0]);
-  }
-
-  setTexelSize(x, y) {
-    this.uniforms.texelSize.value.set(x, y);
-    this.uniforms.halfTexelSize.value.set(x, y).multiplyScalar(0.5);
-  }
-
-  setResolution(resolution) {
-    this.uniforms.resolution.value.copy(resolution);
-  }
-
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/materials/BlurPass.js
-
-
-
-class BlurPass {
-  constructor({
-    gl,
-    resolution,
-    width = 500,
-    height = 500,
-    minDepthThreshold = 0,
-    maxDepthThreshold = 1,
-    depthScale = 0,
-    depthToBlurRatioBias = 0.25
-  }) {
-    this.renderToScreen = false;
-    this.renderTargetA = new three_module.WebGLRenderTarget(resolution, resolution, {
-      minFilter: three_module.LinearFilter,
-      magFilter: three_module.LinearFilter,
-      stencilBuffer: false,
-      depthBuffer: false,
-      encoding: gl.outputEncoding
-    });
-    this.renderTargetB = this.renderTargetA.clone();
-    this.convolutionMaterial = new ConvolutionMaterial();
-    this.convolutionMaterial.setTexelSize(1.0 / width, 1.0 / height);
-    this.convolutionMaterial.setResolution(new three_module.Vector2(width, height));
-    this.scene = new three_module.Scene();
-    this.camera = new three_module.Camera();
-    this.convolutionMaterial.uniforms.minDepthThreshold.value = minDepthThreshold;
-    this.convolutionMaterial.uniforms.maxDepthThreshold.value = maxDepthThreshold;
-    this.convolutionMaterial.uniforms.depthScale.value = depthScale;
-    this.convolutionMaterial.uniforms.depthToBlurRatioBias.value = depthToBlurRatioBias;
-    this.convolutionMaterial.defines.USE_DEPTH = depthScale > 0;
-    const vertices = new Float32Array([-1, -1, 0, 3, -1, 0, -1, 3, 0]);
-    const uvs = new Float32Array([0, 0, 2, 0, 0, 2]);
-    const geometry = new three_module.BufferGeometry();
-    geometry.setAttribute('position', new three_module.BufferAttribute(vertices, 3));
-    geometry.setAttribute('uv', new three_module.BufferAttribute(uvs, 2));
-    this.screen = new three_module.Mesh(geometry, this.convolutionMaterial);
-    this.screen.frustumCulled = false;
-    this.scene.add(this.screen);
-  }
-
-  render(renderer, inputBuffer, outputBuffer) {
-    const scene = this.scene;
-    const camera = this.camera;
-    const renderTargetA = this.renderTargetA;
-    const renderTargetB = this.renderTargetB;
-    let material = this.convolutionMaterial;
-    let uniforms = material.uniforms;
-    uniforms.depthBuffer.value = inputBuffer.depthTexture;
-    const kernel = material.kernel;
-    let lastRT = inputBuffer;
-    let destRT;
-    let i, l; // Apply the multi-pass blur.
-
-    for (i = 0, l = kernel.length - 1; i < l; ++i) {
-      // Alternate between targets.
-      destRT = (i & 1) === 0 ? renderTargetA : renderTargetB;
-      uniforms.kernel.value = kernel[i];
-      uniforms.inputBuffer.value = lastRT.texture;
-      renderer.setRenderTarget(destRT);
-      renderer.render(scene, camera);
-      lastRT = destRT;
-    }
-
-    uniforms.kernel.value = kernel[i];
-    uniforms.inputBuffer.value = lastRT.texture;
-    renderer.setRenderTarget(this.renderToScreen ? null : outputBuffer);
-    renderer.render(scene, camera);
-  }
-
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/materials/MeshReflectorMaterial.js
-
-
-class MeshReflectorMaterial extends three_module.MeshStandardMaterial {
-  constructor(parameters = {}) {
-    super(parameters);
-    this._tDepth = {
-      value: null
-    };
-    this._distortionMap = {
-      value: null
-    };
-    this._tDiffuse = {
-      value: null
-    };
-    this._tDiffuseBlur = {
-      value: null
-    };
-    this._textureMatrix = {
-      value: null
-    };
-    this._hasBlur = {
-      value: false
-    };
-    this._mirror = {
-      value: 0.0
-    };
-    this._mixBlur = {
-      value: 0.0
-    };
-    this._blurStrength = {
-      value: 0.5
-    };
-    this._minDepthThreshold = {
-      value: 0.9
-    };
-    this._maxDepthThreshold = {
-      value: 1
-    };
-    this._depthScale = {
-      value: 0
-    };
-    this._depthToBlurRatioBias = {
-      value: 0.25
-    };
-    this._distortion = {
-      value: 1
-    };
-    this._mixContrast = {
-      value: 1.0
-    };
-    this.setValues(parameters);
-  }
-
-  onBeforeCompile(shader) {
-    var _shader$defines;
-
-    if (!((_shader$defines = shader.defines) != null && _shader$defines.USE_UV)) {
-      shader.defines.USE_UV = '';
-    }
-
-    shader.uniforms.hasBlur = this._hasBlur;
-    shader.uniforms.tDiffuse = this._tDiffuse;
-    shader.uniforms.tDepth = this._tDepth;
-    shader.uniforms.distortionMap = this._distortionMap;
-    shader.uniforms.tDiffuseBlur = this._tDiffuseBlur;
-    shader.uniforms.textureMatrix = this._textureMatrix;
-    shader.uniforms.mirror = this._mirror;
-    shader.uniforms.mixBlur = this._mixBlur;
-    shader.uniforms.mixStrength = this._blurStrength;
-    shader.uniforms.minDepthThreshold = this._minDepthThreshold;
-    shader.uniforms.maxDepthThreshold = this._maxDepthThreshold;
-    shader.uniforms.depthScale = this._depthScale;
-    shader.uniforms.depthToBlurRatioBias = this._depthToBlurRatioBias;
-    shader.uniforms.distortion = this._distortion;
-    shader.uniforms.mixContrast = this._mixContrast;
-    shader.vertexShader = `
-        uniform mat4 textureMatrix;
-        varying vec4 my_vUv;     
-      ${shader.vertexShader}`;
-    shader.vertexShader = shader.vertexShader.replace('#include <project_vertex>', `#include <project_vertex>
-        my_vUv = textureMatrix * vec4( position, 1.0 );
-        gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );`);
-    shader.fragmentShader = `
-        uniform sampler2D tDiffuse;
-        uniform sampler2D tDiffuseBlur;
-        uniform sampler2D tDepth;
-        uniform sampler2D distortionMap;
-        uniform float distortion;
-        uniform float cameraNear;
-			  uniform float cameraFar;
-        uniform bool hasBlur;
-        uniform float mixBlur;
-        uniform float mirror;
-        uniform float mixStrength;
-        uniform float minDepthThreshold;
-        uniform float maxDepthThreshold;
-        uniform float mixContrast;
-        uniform float depthScale;
-        uniform float depthToBlurRatioBias;
-        varying vec4 my_vUv;        
-        ${shader.fragmentShader}`;
-    shader.fragmentShader = shader.fragmentShader.replace('#include <emissivemap_fragment>', `#include <emissivemap_fragment>
-    
-      float distortionFactor = 0.0;
-      #ifdef USE_DISTORTION
-        distortionFactor = texture2D(distortionMap, vUv).r * distortion;
-      #endif
-
-      vec4 new_vUv = my_vUv;
-      new_vUv.x += distortionFactor;
-      new_vUv.y += distortionFactor;
-
-      vec4 base = texture2DProj(tDiffuse, new_vUv);
-      vec4 blur = texture2DProj(tDiffuseBlur, new_vUv);
-      
-      vec4 merge = base;
-      
-      #ifdef USE_NORMALMAP
-        vec2 normal_uv = vec2(0.0);
-        vec4 normalColor = texture2D(normalMap, vUv * normalScale);
-        vec3 my_normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b,  normalColor.g * 2.0 - 1.0 ) );
-        vec3 coord = new_vUv.xyz / new_vUv.w;
-        normal_uv = coord.xy + coord.z * my_normal.xz * 0.05;
-        vec4 base_normal = texture2D(tDiffuse, normal_uv);
-        vec4 blur_normal = texture2D(tDiffuseBlur, normal_uv);
-        merge = base_normal;
-        blur = blur_normal;
-      #endif
-
-      float depthFactor = 0.0001;
-      float blurFactor = 0.0;
-
-      #ifdef USE_DEPTH
-        vec4 depth = texture2DProj(tDepth, new_vUv);
-        depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));
-        depthFactor *= depthScale;
-        depthFactor = max(0.0001, min(1.0, depthFactor));
-
-        #ifdef USE_BLUR
-          blur = blur * min(1.0, depthFactor + depthToBlurRatioBias);
-          merge = merge * min(1.0, depthFactor + 0.5);
-        #else
-          merge = merge * depthFactor;
-        #endif
-  
-      #endif
-
-      float reflectorRoughnessFactor = roughness;
-      #ifdef USE_ROUGHNESSMAP
-        vec4 reflectorTexelRoughness = texture2D( roughnessMap, vUv );
-        reflectorRoughnessFactor *= reflectorTexelRoughness.g;
-      #endif
-      
-      #ifdef USE_BLUR
-        blurFactor = min(1.0, mixBlur * reflectorRoughnessFactor);
-        merge = mix(merge, blur, blurFactor);
-      #endif
-
-      vec4 newMerge = vec4(0.0, 0.0, 0.0, 1.0);
-      newMerge.r = (merge.r - 0.5) * mixContrast + 0.5;
-      newMerge.g = (merge.g - 0.5) * mixContrast + 0.5;
-      newMerge.b = (merge.b - 0.5) * mixContrast + 0.5;
-
-      diffuseColor.rgb = diffuseColor.rgb * ((1.0 - min(1.0, mirror)) + newMerge.rgb * mixStrength);
-      `);
-  }
-
-  get tDiffuse() {
-    return this._tDiffuse.value;
-  }
-
-  set tDiffuse(v) {
-    this._tDiffuse.value = v;
-  }
-
-  get tDepth() {
-    return this._tDepth.value;
-  }
-
-  set tDepth(v) {
-    this._tDepth.value = v;
-  }
-
-  get distortionMap() {
-    return this._distortionMap.value;
-  }
-
-  set distortionMap(v) {
-    this._distortionMap.value = v;
-  }
-
-  get tDiffuseBlur() {
-    return this._tDiffuseBlur.value;
-  }
-
-  set tDiffuseBlur(v) {
-    this._tDiffuseBlur.value = v;
-  }
-
-  get textureMatrix() {
-    return this._textureMatrix.value;
-  }
-
-  set textureMatrix(v) {
-    this._textureMatrix.value = v;
-  }
-
-  get hasBlur() {
-    return this._hasBlur.value;
-  }
-
-  set hasBlur(v) {
-    this._hasBlur.value = v;
-  }
-
-  get mirror() {
-    return this._mirror.value;
-  }
-
-  set mirror(v) {
-    this._mirror.value = v;
-  }
-
-  get mixBlur() {
-    return this._mixBlur.value;
-  }
-
-  set mixBlur(v) {
-    this._mixBlur.value = v;
-  }
-
-  get mixStrength() {
-    return this._blurStrength.value;
-  }
-
-  set mixStrength(v) {
-    this._blurStrength.value = v;
-  }
-
-  get minDepthThreshold() {
-    return this._minDepthThreshold.value;
-  }
-
-  set minDepthThreshold(v) {
-    this._minDepthThreshold.value = v;
-  }
-
-  get maxDepthThreshold() {
-    return this._maxDepthThreshold.value;
-  }
-
-  set maxDepthThreshold(v) {
-    this._maxDepthThreshold.value = v;
-  }
-
-  get depthScale() {
-    return this._depthScale.value;
-  }
-
-  set depthScale(v) {
-    this._depthScale.value = v;
-  }
-
-  get depthToBlurRatioBias() {
-    return this._depthToBlurRatioBias.value;
-  }
-
-  set depthToBlurRatioBias(v) {
-    this._depthToBlurRatioBias.value = v;
-  }
-
-  get distortion() {
-    return this._distortion.value;
-  }
-
-  set distortion(v) {
-    this._distortion.value = v;
-  }
-
-  get mixContrast() {
-    return this._mixContrast.value;
-  }
-
-  set mixContrast(v) {
-    this._mixContrast.value = v;
-  }
-
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/MeshReflectorMaterial.js
-
-
-
-
-
-
-
-
-(0,react_three_fiber_esm.extend)({
-  MeshReflectorMaterialImpl: MeshReflectorMaterial
-});
-const MeshReflectorMaterial_MeshReflectorMaterial = /*#__PURE__*/react.forwardRef(({
-  mixBlur = 0,
-  mixStrength = 1,
-  resolution = 256,
-  blur = [0, 0],
-  minDepthThreshold = 0.9,
-  maxDepthThreshold = 1,
-  depthScale = 0,
-  depthToBlurRatioBias = 0.25,
-  mirror = 0,
-  distortion = 1,
-  mixContrast = 1,
-  distortionMap,
-  reflectorOffset = 0,
-  ...props
-}, ref) => {
-  const gl = (0,react_three_fiber_esm.useThree)(({
-    gl
-  }) => gl);
-  const camera = (0,react_three_fiber_esm.useThree)(({
-    camera
-  }) => camera);
-  const scene = (0,react_three_fiber_esm.useThree)(({
-    scene
-  }) => scene);
-  blur = Array.isArray(blur) ? blur : [blur, blur];
-  const hasBlur = blur[0] + blur[1] > 0;
-  const materialRef = react.useRef(null);
-  const [reflectorPlane] = react.useState(() => new three_module.Plane());
-  const [normal] = react.useState(() => new three_module.Vector3());
-  const [reflectorWorldPosition] = react.useState(() => new three_module.Vector3());
-  const [cameraWorldPosition] = react.useState(() => new three_module.Vector3());
-  const [rotationMatrix] = react.useState(() => new three_module.Matrix4());
-  const [lookAtPosition] = react.useState(() => new three_module.Vector3(0, 0, -1));
-  const [clipPlane] = react.useState(() => new three_module.Vector4());
-  const [view] = react.useState(() => new three_module.Vector3());
-  const [target] = react.useState(() => new three_module.Vector3());
-  const [q] = react.useState(() => new three_module.Vector4());
-  const [textureMatrix] = react.useState(() => new three_module.Matrix4());
-  const [virtualCamera] = react.useState(() => new three_module.PerspectiveCamera());
-  const beforeRender = react.useCallback(() => {
-    var _materialRef$current;
-
-    // TODO: As of R3f 7-8 this should be __r3f.parent
-    const parent = materialRef.current.parent || ((_materialRef$current = materialRef.current) == null ? void 0 : _materialRef$current.__r3f.parent);
-    if (!parent) return;
-    reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);
-    cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
-    rotationMatrix.extractRotation(parent.matrixWorld);
-    normal.set(0, 0, 1);
-    normal.applyMatrix4(rotationMatrix);
-    reflectorWorldPosition.addScaledVector(normal, reflectorOffset);
-    view.subVectors(reflectorWorldPosition, cameraWorldPosition); // Avoid rendering when reflector is facing away
-
-    if (view.dot(normal) > 0) return;
-    view.reflect(normal).negate();
-    view.add(reflectorWorldPosition);
-    rotationMatrix.extractRotation(camera.matrixWorld);
-    lookAtPosition.set(0, 0, -1);
-    lookAtPosition.applyMatrix4(rotationMatrix);
-    lookAtPosition.add(cameraWorldPosition);
-    target.subVectors(reflectorWorldPosition, lookAtPosition);
-    target.reflect(normal).negate();
-    target.add(reflectorWorldPosition);
-    virtualCamera.position.copy(view);
-    virtualCamera.up.set(0, 1, 0);
-    virtualCamera.up.applyMatrix4(rotationMatrix);
-    virtualCamera.up.reflect(normal);
-    virtualCamera.lookAt(target);
-    virtualCamera.far = camera.far; // Used in WebGLBackground
-
-    virtualCamera.updateMatrixWorld();
-    virtualCamera.projectionMatrix.copy(camera.projectionMatrix); // Update the texture matrix
-
-    textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);
-    textureMatrix.multiply(virtualCamera.projectionMatrix);
-    textureMatrix.multiply(virtualCamera.matrixWorldInverse);
-    textureMatrix.multiply(parent.matrixWorld); // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
-    // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
-
-    reflectorPlane.setFromNormalAndCoplanarPoint(normal, reflectorWorldPosition);
-    reflectorPlane.applyMatrix4(virtualCamera.matrixWorldInverse);
-    clipPlane.set(reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant);
-    const projectionMatrix = virtualCamera.projectionMatrix;
-    q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];
-    q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];
-    q.z = -1.0;
-    q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14]; // Calculate the scaled plane vector
-
-    clipPlane.multiplyScalar(2.0 / clipPlane.dot(q)); // Replacing the third row of the projection matrix
-
-    projectionMatrix.elements[2] = clipPlane.x;
-    projectionMatrix.elements[6] = clipPlane.y;
-    projectionMatrix.elements[10] = clipPlane.z + 1.0;
-    projectionMatrix.elements[14] = clipPlane.w;
-  }, [camera, reflectorOffset]);
-  const [fbo1, fbo2, blurpass, reflectorProps] = react.useMemo(() => {
-    const parameters = {
-      minFilter: three_module.LinearFilter,
-      magFilter: three_module.LinearFilter,
-      encoding: gl.outputEncoding,
-      type: three_module.HalfFloatType
-    };
-    const fbo1 = new three_module.WebGLRenderTarget(resolution, resolution, parameters);
-    fbo1.depthBuffer = true;
-    fbo1.depthTexture = new three_module.DepthTexture(resolution, resolution);
-    fbo1.depthTexture.format = three_module.DepthFormat;
-    fbo1.depthTexture.type = three_module.UnsignedShortType;
-    const fbo2 = new three_module.WebGLRenderTarget(resolution, resolution, parameters);
-    const blurpass = new BlurPass({
-      gl,
-      resolution,
-      width: blur[0],
-      height: blur[1],
-      minDepthThreshold,
-      maxDepthThreshold,
-      depthScale,
-      depthToBlurRatioBias
-    });
-    const reflectorProps = {
-      mirror,
-      textureMatrix,
-      mixBlur,
-      tDiffuse: fbo1.texture,
-      tDepth: fbo1.depthTexture,
-      tDiffuseBlur: fbo2.texture,
-      hasBlur,
-      mixStrength,
-      minDepthThreshold,
-      maxDepthThreshold,
-      depthScale,
-      depthToBlurRatioBias,
-      transparent: true,
-      distortion,
-      distortionMap,
-      mixContrast,
-      'defines-USE_BLUR': hasBlur ? '' : undefined,
-      'defines-USE_DEPTH': depthScale > 0 ? '' : undefined,
-      'defines-USE_DISTORTION': distortionMap ? '' : undefined
-    };
-    return [fbo1, fbo2, blurpass, reflectorProps];
-  }, [gl, blur, textureMatrix, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, distortion, distortionMap, mixContrast]);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    var _materialRef$current2;
-
-    // TODO: As of R3f 7-8 this should be __r3f.parent
-    const parent = materialRef.current.parent || ((_materialRef$current2 = materialRef.current) == null ? void 0 : _materialRef$current2.__r3f.parent);
-    if (!parent) return;
-    parent.visible = false;
-    const currentXrEnabled = gl.xr.enabled;
-    const currentShadowAutoUpdate = gl.shadowMap.autoUpdate;
-    beforeRender();
-    gl.xr.enabled = false;
-    gl.shadowMap.autoUpdate = false;
-    gl.setRenderTarget(fbo1);
-    gl.state.buffers.depth.setMask(true);
-    if (!gl.autoClear) gl.clear();
-    gl.render(scene, virtualCamera);
-    if (hasBlur) blurpass.render(gl, fbo1, fbo2);
-    gl.xr.enabled = currentXrEnabled;
-    gl.shadowMap.autoUpdate = currentShadowAutoUpdate;
-    parent.visible = true;
-    gl.setRenderTarget(null);
-  });
-  return /*#__PURE__*/react.createElement("meshReflectorMaterialImpl", _extends({
-    attach: "material" // Defines can't be updated dynamically, so we need to recreate the material
-    ,
-    key: 'key' + reflectorProps['defines-USE_BLUR'] + reflectorProps['defines-USE_DEPTH'] + reflectorProps['defines-USE_DISTORTION'],
-    ref: react_merge_refs_esm([materialRef, ref])
-  }, reflectorProps, props));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/PointMaterial.js
-
-
-
-
-class PointMaterialImpl extends three_module.PointsMaterial {
-  constructor(props) {
-    super(props);
-
-    this.onBeforeCompile = shader => {
-      shader.fragmentShader = shader.fragmentShader.replace('#include <output_fragment>', `
-        #include <output_fragment>
-      vec2 cxy = 2.0 * gl_PointCoord - 1.0;
-      float r = dot(cxy, cxy);
-      float delta = fwidth(r);     
-      float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);
-      gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a );
-      `);
-    };
-  }
-
-}
-const PointMaterial = /*#__PURE__*/react.forwardRef((props, ref) => {
-  const [material] = react.useState(() => new PointMaterialImpl(null));
-  return /*#__PURE__*/react.createElement("primitive", _extends({}, props, {
-    object: material,
-    ref: ref,
-    attach: "material"
-  }));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/softShadows.js
-
-
-const pcss = ({
-  frustum = 3.75,
-  size = 0.005,
-  near = 9.5,
-  samples = 17,
-  rings = 11
-} = {}) => `#define LIGHT_WORLD_SIZE ${size}
-#define LIGHT_FRUSTUM_WIDTH ${frustum}
-#define LIGHT_SIZE_UV (LIGHT_WORLD_SIZE / LIGHT_FRUSTUM_WIDTH)
-#define NEAR_PLANE ${near}
-
-#define NUM_SAMPLES ${samples}
-#define NUM_RINGS ${rings}
-#define BLOCKER_SEARCH_NUM_SAMPLES NUM_SAMPLES
-#define PCF_NUM_SAMPLES NUM_SAMPLES
-
-vec2 poissonDisk[NUM_SAMPLES];
-
-void initPoissonSamples(const in vec2 randomSeed) {
-  float ANGLE_STEP = PI2 * float(NUM_RINGS) / float(NUM_SAMPLES);
-  float INV_NUM_SAMPLES = 1.0 / float(NUM_SAMPLES);
-  float angle = rand(randomSeed) * PI2;
-  float radius = INV_NUM_SAMPLES;
-  float radiusStep = radius;
-  for (int i = 0; i < NUM_SAMPLES; i++) {
-    poissonDisk[i] = vec2(cos(angle), sin(angle)) * pow(radius, 0.75);
-    radius += radiusStep;
-    angle += ANGLE_STEP;
-  }
-}
-
-float penumbraSize(const in float zReceiver, const in float zBlocker) { // Parallel plane estimation
-  return (zReceiver - zBlocker) / zBlocker;
-}
-
-float findBlocker(sampler2D shadowMap, const in vec2 uv, const in float zReceiver) {
-  float searchRadius = LIGHT_SIZE_UV * (zReceiver - NEAR_PLANE) / zReceiver;
-  float blockerDepthSum = 0.0;
-  int numBlockers = 0;
-  for (int i = 0; i < BLOCKER_SEARCH_NUM_SAMPLES; i++) {
-    float shadowMapDepth = unpackRGBAToDepth(texture2D(shadowMap, uv + poissonDisk[i] * searchRadius));
-    if (shadowMapDepth < zReceiver) {
-      blockerDepthSum += shadowMapDepth;
-      numBlockers++;
-    }
-  }
-  if (numBlockers == 0) return -1.0;
-  return blockerDepthSum / float(numBlockers);
-}
-
-float PCF_Filter(sampler2D shadowMap, vec2 uv, float zReceiver, float filterRadius) {
-  float sum = 0.0;
-  for (int i = 0; i < PCF_NUM_SAMPLES; i++) {
-    float depth = unpackRGBAToDepth(texture2D(shadowMap, uv + poissonDisk[ i ] * filterRadius));
-    if (zReceiver <= depth) sum += 1.0;
-  }
-  for (int i = 0; i < PCF_NUM_SAMPLES; i++) {
-    float depth = unpackRGBAToDepth(texture2D(shadowMap, uv + -poissonDisk[ i ].yx * filterRadius));
-    if (zReceiver <= depth) sum += 1.0;
-  }
-  return sum / (2.0 * float(PCF_NUM_SAMPLES));
-}
-
-float PCSS(sampler2D shadowMap, vec4 coords) {
-  vec2 uv = coords.xy;
-  float zReceiver = coords.z; // Assumed to be eye-space z in this code
-  initPoissonSamples(uv);
-  float avgBlockerDepth = findBlocker(shadowMap, uv, zReceiver);
-  if (avgBlockerDepth == -1.0) return 1.0;
-  float penumbraRatio = penumbraSize(zReceiver, avgBlockerDepth);
-  float filterRadius = penumbraRatio * LIGHT_SIZE_UV * NEAR_PLANE / zReceiver;
-  return PCF_Filter(shadowMap, uv, zReceiver, filterRadius);
-}`;
-
-let deployed = false;
-const softShadows = props => {
-  // Avoid adding the effect twice, which may happen in HMR scenarios
-  if (!deployed) {
-    deployed = true;
-    let shader = three_module.ShaderChunk.shadowmap_pars_fragment;
-    shader = shader.replace('#ifdef USE_SHADOWMAP', '#ifdef USE_SHADOWMAP\n' + pcss({ ...props
-    }));
-    shader = shader.replace('#if defined( SHADOWMAP_TYPE_PCF )', '\nreturn PCSS(shadowMap, shadowCoord);\n#if defined( SHADOWMAP_TYPE_PCF )');
-    three_module.ShaderChunk.shadowmap_pars_fragment = shader;
-  }
-};
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/shapes.js
-
-
-
-function create(type) {
-  const El = type + 'BufferGeometry';
-  return /*#__PURE__*/react.forwardRef(({
-    args,
-    children,
-    ...props
-  }, ref) => /*#__PURE__*/react.createElement("mesh", _extends({
-    ref: ref
-  }, props), /*#__PURE__*/react.createElement(El, {
-    attach: "geometry",
-    args: args
-  }), children));
-}
-
-const Box = create('box');
-const Circle = create('circle');
-const Cone = create('cone');
-const Cylinder = create('cylinder');
-const Sphere = create('sphere');
-const Plane = create('plane');
-const Tube = create('tube');
-const Torus = create('torus');
-const TorusKnot = create('torusKnot');
-const Tetrahedron = create('tetrahedron');
-const Ring = create('ring');
-const Polyhedron = create('polyhedron');
-const Icosahedron = create('icosahedron');
-const Octahedron = create('octahedron');
-const Dodecahedron = create('dodecahedron');
-const Extrude = create('extrude');
-const Lathe = create('lathe');
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/RoundedBox.js
-
-
-
-
-const eps = 0.00001;
-
-function createShape(width, height, radius0) {
-  const shape = new three_module.Shape();
-  const radius = radius0 - eps;
-  shape.absarc(eps, eps, eps, -Math.PI / 2, -Math.PI, true);
-  shape.absarc(eps, height - radius * 2, eps, Math.PI, Math.PI / 2, true);
-  shape.absarc(width - radius * 2, height - radius * 2, eps, Math.PI / 2, 0, true);
-  shape.absarc(width - radius * 2, eps, eps, 0, -Math.PI / 2, true);
-  return shape;
-}
-
-const RoundedBox = /*#__PURE__*/react.forwardRef(function RoundedBox({
-  args: [width = 1, height = 1, depth = 1] = [],
-  radius = 0.05,
-  steps = 1,
-  smoothness = 4,
-  children,
-  ...rest
-}, ref) {
-  const shape = react.useMemo(() => createShape(width, height, radius), [width, height, radius]);
-  const params = react.useMemo(() => ({
-    depth: depth - radius * 2,
-    bevelEnabled: true,
-    bevelSegments: smoothness * 2,
-    steps,
-    bevelSize: radius - eps,
-    bevelThickness: radius,
-    curveSegments: smoothness
-  }), [depth, radius, smoothness]);
-  const geomRef = react.useRef();
-  react.useLayoutEffect(() => {
-    if (geomRef.current) {
-      geomRef.current.center();
-    }
-  }, [shape, params]);
-  return /*#__PURE__*/react.createElement("mesh", _extends({
-    ref: ref
-  }, rest), /*#__PURE__*/react.createElement("extrudeBufferGeometry", {
-    attach: "geometry",
-    ref: geomRef,
-    args: [shape, params]
-  }), children);
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/ScreenQuad.js
-
-
-
-
-function createScreenQuadGeometry() {
-  const geometry = new three_module.BufferGeometry();
-  const vertices = new Float32Array([-1, -1, 3, -1, -1, 3]);
-  geometry.setAttribute('position', new three_module.BufferAttribute(vertices, 2));
-  return geometry;
-}
-
-const ScreenQuad = /*#__PURE__*/react.forwardRef(function ScreenQuad({
-  children,
-  ...restProps
-}, ref) {
-  const geometry = react.useMemo(createScreenQuadGeometry, []);
-  return /*#__PURE__*/react.createElement("mesh", _extends({
-    ref: ref,
-    geometry: geometry,
-    frustumCulled: false
-  }, restProps), children);
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Center.js
-
-
-
-
-const Center = /*#__PURE__*/react.forwardRef(function Center({
-  children,
-  alignTop,
-  ...props
-}, ref) {
-  const outer = react.useRef(null);
-  const inner = react.useRef(null);
-  react.useLayoutEffect(() => {
-    outer.current.position.set(0, 0, 0);
-    outer.current.updateWorldMatrix(true, true);
-    const box3 = new three_module.Box3().setFromObject(inner.current);
-    const center = new three_module.Vector3();
-    const sphere = new three_module.Sphere();
-    const height = box3.max.y - box3.min.y;
-    box3.getCenter(center);
-    box3.getBoundingSphere(sphere);
-    outer.current.position.set(-center.x, -center.y + (alignTop ? height / 2 : 0), -center.z);
-  }, [children]);
-  return /*#__PURE__*/react.createElement("group", _extends({
-    ref: ref
-  }, props), /*#__PURE__*/react.createElement("group", {
-    ref: outer
-  }, /*#__PURE__*/react.createElement("group", {
-    ref: inner
-  }, children)));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Bounds.js
-
-
-
-
-const isOrthographic = def => def && def.isOrthographicCamera;
-
-const isBox3 = def => def && def.isBox3;
-
-const Bounds_context = /*#__PURE__*/react.createContext(null);
-function Bounds({
-  children,
-  damping = 6,
-  fit,
-  clip,
-  observe,
-  margin = 1.2,
-  eps = 0.01,
-  onFit
-}) {
-  const ref = react.useRef(null); // @ts-expect-error new in @react-three/fiber@7.0.5
-
-  const {
-    camera,
-    invalidate,
-    size,
-    controls
-  } = (0,react_three_fiber_esm.useThree)();
-  const onFitRef = react.useRef(onFit);
-  onFitRef.current = onFit;
-
-  function equals(a, b) {
-    return Math.abs(a.x - b.x) < eps && Math.abs(a.y - b.y) < eps && Math.abs(a.z - b.z) < eps;
-  }
-
-  function damp(v, t, lambda, delta) {
-    v.x = three_module.MathUtils.damp(v.x, t.x, lambda, delta);
-    v.y = three_module.MathUtils.damp(v.y, t.y, lambda, delta);
-    v.z = three_module.MathUtils.damp(v.z, t.z, lambda, delta);
-  }
-
-  const [current] = react.useState(() => ({
-    animating: false,
-    focus: new three_module.Vector3(),
-    camera: new three_module.Vector3(),
-    zoom: 1
-  }));
-  const [goal] = react.useState(() => ({
-    focus: new three_module.Vector3(),
-    camera: new three_module.Vector3(),
-    zoom: 1
-  }));
-  const [box] = react.useState(() => new three_module.Box3());
-  const api = react.useMemo(() => {
-    function getSize() {
-      const size = box.getSize(new three_module.Vector3());
-      const center = box.getCenter(new three_module.Vector3());
-      const maxSize = Math.max(size.x, size.y, size.z);
-      const fitHeightDistance = isOrthographic(camera) ? maxSize * 4 : maxSize / (2 * Math.atan(Math.PI * camera.fov / 360));
-      const fitWidthDistance = isOrthographic(camera) ? maxSize * 4 : fitHeightDistance / camera.aspect;
-      const distance = margin * Math.max(fitHeightDistance, fitWidthDistance);
-      return {
-        box,
-        size,
-        center,
-        distance
-      };
-    }
-
-    return {
-      getSize,
-
-      refresh(object) {
-        if (isBox3(object)) box.copy(object);else {
-          const target = object || ref.current;
-          target.updateWorldMatrix(true, true);
-          box.setFromObject(target);
-        }
-
-        if (box.isEmpty()) {
-          const max = camera.position.length() || 10;
-          box.setFromCenterAndSize(new three_module.Vector3(), new three_module.Vector3(max, max, max));
-        }
-
-        if ((controls == null ? void 0 : controls.constructor.name) === 'OrthographicTrackballControls') {
-          // Put camera on a sphere along which it should moves
-          const {
-            distance
-          } = getSize();
-          const direction = camera.position.clone().sub(controls.target).normalize().multiplyScalar(distance);
-          const newPos = controls.target.clone().add(direction);
-          camera.position.copy(newPos);
-        }
-
-        return this;
-      },
-
-      clip() {
-        const {
-          distance
-        } = getSize();
-        if (controls) controls.maxDistance = distance * 10;
-        camera.near = distance / 100;
-        camera.far = distance * 100;
-        camera.updateProjectionMatrix();
-        if (controls) controls.update();
-        invalidate();
-        return this;
-      },
-
-      fit() {
-        current.camera.copy(camera.position);
-        if (controls) current.focus.copy(controls.target);
-        const {
-          center,
-          distance
-        } = getSize();
-        const direction = center.clone().sub(camera.position).normalize().multiplyScalar(distance);
-        goal.camera.copy(center).sub(direction);
-        goal.focus.copy(center);
-
-        if (isOrthographic(camera)) {
-          current.zoom = camera.zoom;
-          let maxHeight = 0,
-              maxWidth = 0;
-          const vertices = [new three_module.Vector3(box.min.x, box.min.y, box.min.z), new three_module.Vector3(box.min.x, box.max.y, box.min.z), new three_module.Vector3(box.min.x, box.min.y, box.max.z), new three_module.Vector3(box.min.x, box.max.y, box.max.z), new three_module.Vector3(box.max.x, box.max.y, box.max.z), new three_module.Vector3(box.max.x, box.max.y, box.min.z), new three_module.Vector3(box.max.x, box.min.y, box.max.z), new three_module.Vector3(box.max.x, box.min.y, box.min.z)]; // Transform the center and each corner to camera space
-
-          center.applyMatrix4(camera.matrixWorldInverse);
-
-          for (const v of vertices) {
-            v.applyMatrix4(camera.matrixWorldInverse);
-            maxHeight = Math.max(maxHeight, Math.abs(v.y - center.y));
-            maxWidth = Math.max(maxWidth, Math.abs(v.x - center.x));
-          }
-
-          maxHeight *= 2;
-          maxWidth *= 2;
-          const zoomForHeight = (camera.top - camera.bottom) / maxHeight;
-          const zoomForWidth = (camera.right - camera.left) / maxWidth;
-          goal.zoom = Math.min(zoomForHeight, zoomForWidth) / margin;
-
-          if (!damping) {
-            camera.zoom = goal.zoom;
-            camera.updateProjectionMatrix();
-          }
-        }
-
-        if (damping) {
-          current.animating = true;
-        } else {
-          camera.position.copy(goal.camera);
-          camera.lookAt(goal.focus);
-
-          if (controls) {
-            controls.target.copy(goal.focus);
-            controls.update();
-          }
-        }
-
-        if (onFitRef.current) onFitRef.current(this.getSize());
-        invalidate();
-        return this;
-      }
-
-    };
-  }, [box, camera, controls, margin, damping, invalidate]);
-  react.useLayoutEffect(() => {
-    if (controls) {
-      // Try to prevent drag hijacking
-      const callback = () => current.animating = false;
-
-      controls.addEventListener('start', callback);
-      return () => controls.removeEventListener('start', callback);
-    }
-  }, [controls]); // Scale pointer on window resize
-
-  const count = react.useRef(0);
-  react.useLayoutEffect(() => {
-    if (observe || count.current++ === 0) {
-      api.refresh();
-      if (fit) api.fit();
-      if (clip) api.clip();
-    }
-  }, [size, clip, fit, observe]);
-  (0,react_three_fiber_esm.useFrame)((state, delta) => {
-    if (current.animating) {
-      damp(current.focus, goal.focus, damping, delta);
-      damp(current.camera, goal.camera, damping, delta);
-      current.zoom = three_module.MathUtils.damp(current.zoom, goal.zoom, damping, delta);
-      camera.position.copy(current.camera);
-
-      if (isOrthographic(camera)) {
-        camera.zoom = current.zoom;
-        camera.updateProjectionMatrix();
-      }
-
-      if (!controls) {
-        camera.lookAt(current.focus);
-      } else {
-        controls.target.copy(current.focus);
-        controls.update();
-      }
-
-      invalidate();
-      if (isOrthographic(camera) && !(Math.abs(current.zoom - goal.zoom) < eps)) return;
-      if (!isOrthographic(camera) && !equals(current.camera, goal.camera)) return;
-      if (controls && !equals(current.focus, goal.focus)) return;
-      current.animating = false;
-    }
-  });
-  return /*#__PURE__*/react.createElement("group", {
-    ref: ref
-  }, /*#__PURE__*/react.createElement(Bounds_context.Provider, {
-    value: api
-  }, children));
-}
-function useBounds() {
-  return react.useContext(Bounds_context);
-}
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/math/SimplexNoise.js
-var SimplexNoise = __webpack_require__(13945);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/CameraShake.js
-
-
-
-
-const CameraShake = /*#__PURE__*/react.forwardRef(({
-  intensity = 1,
-  decay,
-  decayRate = 0.65,
-  maxYaw = 0.1,
-  maxPitch = 0.1,
-  maxRoll = 0.1,
-  yawFrequency = 0.1,
-  pitchFrequency = 0.1,
-  rollFrequency = 0.1,
-  controls
-}, ref) => {
-  const camera = (0,react_three_fiber_esm.useThree)(state => state.camera); // @ts-expect-error new in @react-three/fiber@7.0.5
-
-  const defaultControls = (0,react_three_fiber_esm.useThree)(state => state.controls);
-  const intensityRef = react.useRef(intensity);
-  const initialRotation = react.useRef(camera.rotation.clone());
-  const [yawNoise] = react.useState(() => new SimplexNoise/* SimplexNoise */.L());
-  const [pitchNoise] = react.useState(() => new SimplexNoise/* SimplexNoise */.L());
-  const [rollNoise] = react.useState(() => new SimplexNoise/* SimplexNoise */.L());
-
-  const constrainIntensity = () => {
-    if (intensityRef.current < 0 || intensityRef.current > 1) {
-      intensityRef.current = intensityRef.current < 0 ? 0 : 1;
-    }
-  };
-
-  react.useImperativeHandle(ref, () => ({
-    getIntensity: () => intensityRef.current,
-    setIntensity: val => {
-      intensityRef.current = val;
-      constrainIntensity();
-    }
-  }), []);
-  react.useEffect(() => {
-    const currControls = defaultControls || (controls == null ? void 0 : controls.current);
-
-    const callback = () => void (initialRotation.current = camera.rotation.clone());
-
-    currControls == null ? void 0 : currControls.addEventListener('change', callback);
-    return () => void (currControls == null ? void 0 : currControls.removeEventListener('change', callback));
-  }, [controls, defaultControls]);
-  (0,react_three_fiber_esm.useFrame)(({
-    clock
-  }, delta) => {
-    const shake = Math.pow(intensityRef.current, 2);
-    const yaw = maxYaw * shake * yawNoise.noise(clock.elapsedTime * yawFrequency, 1);
-    const pitch = maxPitch * shake * pitchNoise.noise(clock.elapsedTime * pitchFrequency, 1);
-    const roll = maxRoll * shake * rollNoise.noise(clock.elapsedTime * rollFrequency, 1);
-    camera.rotation.set(initialRotation.current.x + pitch, initialRotation.current.y + yaw, initialRotation.current.z + roll);
-
-    if (decay && intensityRef.current > 0) {
-      intensityRef.current -= decayRate * delta;
-      constrainIntensity();
-    }
-  });
-  return null;
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Float.js
-
-
-
-
-const Float = /*#__PURE__*/react.forwardRef(({
-  children,
-  speed = 1,
-  rotationIntensity = 1,
-  floatIntensity = 1,
-  ...props
-}, forwardRef) => {
-  const ref = react.useRef(null);
-  const offset = react.useRef(Math.random() * 10000);
-  (0,react_three_fiber_esm.useFrame)(state => {
-    const t = offset.current + state.clock.getElapsedTime();
-    ref.current.rotation.x = Math.cos(t / 4 * speed) / 8 * rotationIntensity;
-    ref.current.rotation.y = Math.sin(t / 4 * speed) / 8 * rotationIntensity;
-    ref.current.rotation.z = Math.sin(t / 4 * speed) / 20 * rotationIntensity;
-    ref.current.position.y = Math.sin(t / 4 * speed) / 10 * floatIntensity;
-  });
-  return /*#__PURE__*/react.createElement("group", props, /*#__PURE__*/react.createElement("group", {
-    ref: react_merge_refs_esm([ref, forwardRef])
-  }, children));
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/loaders/RGBELoader.js
-var RGBELoader = __webpack_require__(8197);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/helpers/environment-assets.js
-const presetsObj = {
-  sunset: 'venice/venice_sunset_1k.hdr',
-  dawn: 'kiara/kiara_1_dawn_1k.hdr',
-  night: 'dikhololo/dikhololo_night_1k.hdr',
-  warehouse: 'empty-wharehouse/empty_warehouse_01_1k.hdr',
-  forest: 'forrest-slope/forest_slope_1k.hdr',
-  apartment: 'lebombo/lebombo_1k.hdr',
-  studio: 'studio-small-3/studio_small_03_1k.hdr',
-  city: 'potsdamer-platz/potsdamer_platz_1k.hdr',
-  park: 'rooitou/rooitou_park_1k.hdr',
-  lobby: 'st-fagans/st_fagans_interior_1k.hdr'
-};
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Environment.js
-
-
-
-
-
-
-const CUBEMAP_ROOT = 'https://market-assets.fra1.cdn.digitaloceanspaces.com/market-assets/hdris/';
-
-const isRef = obj => obj.current && obj.current.isScene;
-
-const resolveScene = scene => isRef(scene) ? scene.current : scene;
-
-function Environment(props) {
-  return props.map ? /*#__PURE__*/react.createElement(EnvironmentMap, props) : props.children ? /*#__PURE__*/react.createElement(EnvironmentPortal, props) : /*#__PURE__*/react.createElement(EnvironmentCube, props);
-}
-function EnvironmentMap({
-  scene,
-  background = false,
-  map
-}) {
-  const defaultScene = (0,react_three_fiber_esm.useThree)(state => state.scene);
-  react.useLayoutEffect(() => {
-    if (map) {
-      const target = resolveScene(scene || defaultScene);
-      const oldbg = target.background;
-      const oldenv = target.environment;
-      if (background !== 'only') target.environment = map;
-      if (background) target.background = map;
-      return () => {
-        if (background !== 'only') target.environment = oldenv;
-        if (background) target.background = oldbg;
-      };
-    }
-  }, [scene, map]);
-  return null;
-}
-function EnvironmentPortal({
-  children,
-  near = 1,
-  far = 1000,
-  resolution = 256,
-  frames = 1,
-  background = false,
-  scene,
-  files,
-  path,
-  preset = undefined,
-  extensions
-}) {
-  const gl = (0,react_three_fiber_esm.useThree)(state => state.gl);
-  const defaultScene = (0,react_three_fiber_esm.useThree)(state => state.scene);
-  const camera = react.useRef(null);
-  const [virtualScene] = react.useState(() => new three_module.Scene());
-  const fbo = react.useMemo(() => {
-    const fbo = new three_module.WebGLCubeRenderTarget(resolution);
-    fbo.texture.type = three_module.HalfFloatType;
-    return fbo;
-  }, [resolution]);
-  react.useLayoutEffect(() => {
-    if (frames === 1) camera.current.update(gl, virtualScene);
-    const target = resolveScene(scene || defaultScene);
-    const oldbg = target.background;
-    const oldenv = target.environment;
-    if (background !== 'only') target.environment = fbo.texture;
-    if (background) target.background = fbo.texture;
-    return () => {
-      if (background !== 'only') target.environment = oldenv;
-      if (background) target.background = oldbg;
-    };
-  }, [children, scene]);
-  let count = 1;
-  (0,react_three_fiber_esm.useFrame)(() => {
-    if (frames === Infinity || count < frames) {
-      camera.current.update(gl, virtualScene);
-      count++;
-    }
-  });
-  return /*#__PURE__*/react.createElement(react.Fragment, null, (0,react_three_fiber_esm.createPortal)( /*#__PURE__*/react.createElement(react.Fragment, null, children, /*#__PURE__*/react.createElement("cubeCamera", {
-    ref: camera,
-    args: [near, far, fbo]
-  }), (files || preset) && /*#__PURE__*/react.createElement(EnvironmentMap, {
-    background: true,
-    files: files,
-    preset: preset,
-    path: path,
-    extensions: extensions,
-    scene: virtualScene
-  })), virtualScene));
-}
-function EnvironmentCube({
-  background = false,
-  files = ['/px.png', '/nx.png', '/py.png', '/ny.png', '/pz.png', '/nz.png'],
-  path = '',
-  preset = undefined,
-  scene,
-  extensions
-}) {
-  if (preset) {
-    if (!(preset in presetsObj)) throw new Error('Preset must be one of: ' + Object.keys(presetsObj).join(', '));
-    files = presetsObj[preset];
-    path = CUBEMAP_ROOT;
-  }
-
-  const defaultScene = (0,react_three_fiber_esm.useThree)(state => state.scene);
-  const isCubeMap = Array.isArray(files);
-  const loader = isCubeMap ? three_module.CubeTextureLoader : RGBELoader/* RGBELoader */.x; // @ts-expect-error
-
-  const loaderResult = (0,react_three_fiber_esm.useLoader)(loader, isCubeMap ? [files] : files, loader => {
-    loader.setPath(path); // @ts-expect-error
-
-    loader.setDataType == null ? void 0 : loader.setDataType(three_module.FloatType);
-    if (extensions) extensions(loader);
-  });
-  const texture = isCubeMap ? loaderResult[0] : loaderResult;
-  texture.mapping = isCubeMap ? three_module.CubeReflectionMapping : three_module.EquirectangularReflectionMapping;
-  react.useLayoutEffect(() => {
-    const target = resolveScene(scene || defaultScene);
-    const oldbg = target.background;
-    const oldenv = target.environment;
-    if (background !== 'only') target.environment = texture;
-    if (background) target.background = texture;
-    return () => {
-      if (background !== 'only') target.environment = oldenv;
-      if (background) target.background = oldbg;
-    };
-  }, [texture, background, scene]);
-  return null;
-}
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/shaders/HorizontalBlurShader.js
-var HorizontalBlurShader = __webpack_require__(78466);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/shaders/VerticalBlurShader.js
-var VerticalBlurShader = __webpack_require__(37312);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/ContactShadows.js
-
-
-
-
-
-
-const ContactShadows = /*#__PURE__*/react.forwardRef(({
-  scale,
-  frames = Infinity,
-  opacity = 1,
-  width = 1,
-  height = 1,
-  blur = 1,
-  far = 10,
-  resolution = 256,
-  smooth = true,
-  color = '#000000',
-  ...props
-}, ref) => {
-  const scene = (0,react_three_fiber_esm.useThree)(({
-    scene
-  }) => scene);
-  const gl = (0,react_three_fiber_esm.useThree)(({
-    gl
-  }) => gl);
-  const shadowCamera = react.useRef(null);
-  width = width * (Array.isArray(scale) ? scale[0] : scale || 1);
-  height = height * (Array.isArray(scale) ? scale[1] : scale || 1);
-  const [renderTarget, planeGeometry, depthMaterial, blurPlane, horizontalBlurMaterial, verticalBlurMaterial, renderTargetBlur] = react.useMemo(() => {
-    const renderTarget = new three_module.WebGLRenderTarget(resolution, resolution);
-    const renderTargetBlur = new three_module.WebGLRenderTarget(resolution, resolution);
-    renderTargetBlur.texture.generateMipmaps = renderTarget.texture.generateMipmaps = false;
-    const planeGeometry = new three_module.PlaneBufferGeometry(width, height).rotateX(Math.PI / 2);
-    const blurPlane = new three_module.Mesh(planeGeometry);
-    const depthMaterial = new three_module.MeshDepthMaterial();
-    depthMaterial.depthTest = depthMaterial.depthWrite = false;
-
-    depthMaterial.onBeforeCompile = shader => {
-      shader.uniforms = { ...shader.uniforms,
-        ucolor: {
-          value: new three_module.Color(color).convertSRGBToLinear()
-        }
-      };
-      shader.fragmentShader = shader.fragmentShader.replace(`void main() {`, //
-      `uniform vec3 ucolor;
-           void main() {
-          `);
-      shader.fragmentShader = shader.fragmentShader.replace('vec4( vec3( 1.0 - fragCoordZ ), opacity );', 'vec4( ucolor, ( 1.0 - fragCoordZ ) * 1.0 );');
-    };
-
-    const horizontalBlurMaterial = new three_module.ShaderMaterial(HorizontalBlurShader/* HorizontalBlurShader */.P);
-    const verticalBlurMaterial = new three_module.ShaderMaterial(VerticalBlurShader/* VerticalBlurShader */.Z);
-    verticalBlurMaterial.depthTest = horizontalBlurMaterial.depthTest = false;
-    return [renderTarget, planeGeometry, depthMaterial, blurPlane, horizontalBlurMaterial, verticalBlurMaterial, renderTargetBlur];
-  }, [resolution, width, height, scale]);
-  const blurShadows = react.useCallback(blur => {
-    blurPlane.visible = true;
-    blurPlane.material = horizontalBlurMaterial;
-    horizontalBlurMaterial.uniforms.tDiffuse.value = renderTarget.texture;
-    horizontalBlurMaterial.uniforms.h.value = blur * 1 / 256;
-    gl.setRenderTarget(renderTargetBlur);
-    gl.render(blurPlane, shadowCamera.current);
-    blurPlane.material = verticalBlurMaterial;
-    verticalBlurMaterial.uniforms.tDiffuse.value = renderTargetBlur.texture;
-    verticalBlurMaterial.uniforms.v.value = blur * 1 / 256;
-    gl.setRenderTarget(renderTarget);
-    gl.render(blurPlane, shadowCamera.current);
-    blurPlane.visible = false;
-  }, []);
-  let count = 0;
-  (0,react_three_fiber_esm.useFrame)(() => {
-    if (shadowCamera.current && (frames === Infinity || count < frames)) {
-      const initialBackground = scene.background;
-      scene.background = null;
-      const initialOverrideMaterial = scene.overrideMaterial;
-      scene.overrideMaterial = depthMaterial;
-      gl.setRenderTarget(renderTarget);
-      gl.render(scene, shadowCamera.current);
-      scene.overrideMaterial = initialOverrideMaterial;
-      blurShadows(blur);
-      if (smooth) blurShadows(blur * 0.4);
-      gl.setRenderTarget(null);
-      scene.background = initialBackground;
-      count++;
-    }
-  });
-  return /*#__PURE__*/react.createElement("group", _extends({
-    "rotation-x": Math.PI / 2
-  }, props, {
-    ref: ref
-  }), /*#__PURE__*/react.createElement("mesh", {
-    geometry: planeGeometry,
-    scale: [1, -1, 1],
-    rotation: [-Math.PI / 2, 0, 0]
-  }, /*#__PURE__*/react.createElement("meshBasicMaterial", {
-    map: renderTarget.texture,
-    transparent: true,
-    opacity: opacity
-  })), /*#__PURE__*/react.createElement("orthographicCamera", {
-    ref: shadowCamera,
-    args: [-width / 2, width / 2, height / 2, -height / 2, 0, far]
-  }));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Stage.js
-
-
-
-
-
-
-
-const presets = {
-  rembrandt: {
-    main: [1, 2, 1],
-    fill: [-2, -0.5, -2]
-  },
-  portrait: {
-    main: [-1, 2, 0.5],
-    fill: [-1, 0.5, -1.5]
-  },
-  upfront: {
-    main: [0, 2, 1],
-    fill: [-1, 0.5, -1.5]
-  },
-  soft: {
-    main: [-2, 4, 4],
-    fill: [-1, 0.5, -1.5]
-  }
-};
-function Stage({
-  children,
-  controls,
-  shadows = true,
-  adjustCamera = true,
-  environment = 'city',
-  intensity = 1,
-  preset = 'rembrandt',
-  shadowBias = 0,
-  contactShadow = {
-    blur: 2,
-    opacity: 0.5,
-    position: [0, 0, 0]
-  },
-  ...props
-}) {
-  const config = presets[preset];
-  const camera = (0,react_three_fiber_esm.useThree)(state => state.camera); // @ts-expect-error new in @react-three/fiber@7.0.5
-
-  const defaultControls = (0,react_three_fiber_esm.useThree)(state => state.controls);
-  const outer = react.useRef(null);
-  const inner = react.useRef(null);
-  const [{
-    radius,
-    width,
-    height
-  }, set] = react.useState({
-    radius: 0,
-    width: 0,
-    height: 0
-  });
-  react.useLayoutEffect(() => {
-    outer.current.position.set(0, 0, 0);
-    outer.current.updateWorldMatrix(true, true);
-    const box3 = new three_module.Box3().setFromObject(inner.current);
-    const center = new three_module.Vector3();
-    const sphere = new three_module.Sphere();
-    const height = box3.max.y - box3.min.y;
-    const width = box3.max.x - box3.min.x;
-    box3.getCenter(center);
-    box3.getBoundingSphere(sphere);
-    set({
-      radius: sphere.radius,
-      width,
-      height
-    });
-    outer.current.position.set(-center.x, -center.y + height / 2, -center.z);
-  }, [children]);
-  react.useLayoutEffect(() => {
-    if (adjustCamera) {
-      const y = radius / (height > width ? 1.5 : 2.5);
-      camera.position.set(0, radius * 0.5, radius * 2.5);
-      camera.near = 0.1;
-      camera.far = Math.max(5000, radius * 4);
-      camera.lookAt(0, y, 0);
-      const ctrl = defaultControls || (controls == null ? void 0 : controls.current);
-
-      if (ctrl) {
-        ctrl.target.set(0, y, 0);
-        ctrl.update();
-      }
-    }
-  }, [defaultControls, radius, height, width, adjustCamera]);
-  return /*#__PURE__*/react.createElement("group", props, /*#__PURE__*/react.createElement("group", {
-    ref: outer
-  }, /*#__PURE__*/react.createElement("group", {
-    ref: inner
-  }, children)), contactShadow && /*#__PURE__*/react.createElement(ContactShadows, _extends({
-    scale: radius * 2,
-    far: radius / 2
-  }, contactShadow)), environment && /*#__PURE__*/react.createElement(Environment, {
-    preset: environment
-  }), /*#__PURE__*/react.createElement("ambientLight", {
-    intensity: intensity / 3
-  }), /*#__PURE__*/react.createElement("spotLight", {
-    penumbra: 1,
-    position: [config.main[0] * radius, config.main[1] * radius, config.main[2] * radius],
-    intensity: intensity * 2,
-    castShadow: shadows,
-    "shadow-bias": shadowBias
-  }), /*#__PURE__*/react.createElement("pointLight", {
-    position: [config.fill[0] * radius, config.fill[1] * radius, config.fill[2] * radius],
-    intensity: intensity
-  }));
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Backdrop.js
-
-
-const easeInExpo = x => x === 0 ? 0 : Math.pow(2, 10 * x - 10);
-
-function Backdrop({
-  children,
-  floor = 0.25,
-  segments = 20,
-  receiveShadow,
-  ...props
-}) {
-  const ref = react.useRef(null);
-  react.useLayoutEffect(() => {
-    let i = 0;
-    const offset = segments / segments / 2;
-    const position = ref.current.attributes.position;
-
-    for (let x = 0; x < segments + 1; x++) {
-      for (let y = 0; y < segments + 1; y++) {
-        position.setXYZ(i++, x / segments - offset + (x === 0 ? -floor : 0), y / segments - offset, easeInExpo(x / segments));
-      }
-    }
-
-    position.needsUpdate = true;
-    ref.current.computeVertexNormals();
-  }, [segments, floor]);
-  return /*#__PURE__*/react.createElement("group", props, /*#__PURE__*/react.createElement("mesh", {
-    receiveShadow: receiveShadow,
-    rotation: [-Math.PI / 2, 0, Math.PI / 2]
-  }, /*#__PURE__*/react.createElement("planeGeometry", {
-    ref: ref,
-    args: [1, 1, segments, segments]
-  }), children));
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Shadow.js
-
-
-
-
-const Shadow = /*#__PURE__*/react.forwardRef(({
-  fog = false,
-  colorStop = 0.0,
-  color = 'black',
-  opacity = 0.5,
-  ...props
-}, ref) => {
-  const canvas = react.useMemo(() => {
-    const canvas = document.createElement('canvas');
-    canvas.width = 128;
-    canvas.height = 128;
-    const context = canvas.getContext('2d');
-    const gradient = context.createRadialGradient(canvas.width / 2, canvas.height / 2, 0, canvas.width / 2, canvas.height / 2, canvas.width / 2);
-    gradient.addColorStop(colorStop, new three_module.Color(color).getStyle());
-    gradient.addColorStop(1, 'rgba(0,0,0,0)');
-    context.fillStyle = gradient;
-    context.fillRect(0, 0, canvas.width, canvas.height);
-    return canvas;
-  }, [color, colorStop]);
-  return /*#__PURE__*/react.createElement("mesh", _extends({
-    ref: ref
-  }, props), /*#__PURE__*/react.createElement("planeBufferGeometry", {
-    attach: "geometry",
-    args: [1, 1]
-  }), /*#__PURE__*/react.createElement("meshBasicMaterial", {
-    attach: "material",
-    transparent: true,
-    opacity: opacity,
-    fog: fog
-  }, /*#__PURE__*/react.createElement("canvasTexture", {
-    attach: "map",
-    args: [canvas]
-  })));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Reflector.js
-
-
-
-
-
-
-
-
-(0,react_three_fiber_esm.extend)({
-  MeshReflectorMaterial: MeshReflectorMaterial
-});
-const Reflector = /*#__PURE__*/react.forwardRef(({
-  mixBlur = 0,
-  mixStrength = 0.5,
-  resolution = 256,
-  blur = [0, 0],
-  args = [1, 1],
-  minDepthThreshold = 0.9,
-  maxDepthThreshold = 1,
-  depthScale = 0,
-  depthToBlurRatioBias = 0.25,
-  mirror = 0,
-  children,
-  debug = 0,
-  distortion = 1,
-  mixContrast = 1,
-  distortionMap,
-  ...props
-}, ref) => {
-  react.useEffect(() => {
-    console.warn('Reflector has been deprecated and will be removed next major. Replace it with <MeshReflectorMaterial />!');
-  }, []);
-  const gl = (0,react_three_fiber_esm.useThree)(({
-    gl
-  }) => gl);
-  const camera = (0,react_three_fiber_esm.useThree)(({
-    camera
-  }) => camera);
-  const scene = (0,react_three_fiber_esm.useThree)(({
-    scene
-  }) => scene);
-  blur = Array.isArray(blur) ? blur : [blur, blur];
-  const hasBlur = blur[0] + blur[1] > 0;
-  const meshRef = react.useRef(null);
-  const [reflectorPlane] = react.useState(() => new three_module.Plane());
-  const [normal] = react.useState(() => new three_module.Vector3());
-  const [reflectorWorldPosition] = react.useState(() => new three_module.Vector3());
-  const [cameraWorldPosition] = react.useState(() => new three_module.Vector3());
-  const [rotationMatrix] = react.useState(() => new three_module.Matrix4());
-  const [lookAtPosition] = react.useState(() => new three_module.Vector3(0, 0, -1));
-  const [clipPlane] = react.useState(() => new three_module.Vector4());
-  const [view] = react.useState(() => new three_module.Vector3());
-  const [target] = react.useState(() => new three_module.Vector3());
-  const [q] = react.useState(() => new three_module.Vector4());
-  const [textureMatrix] = react.useState(() => new three_module.Matrix4());
-  const [virtualCamera] = react.useState(() => new three_module.PerspectiveCamera());
-  const beforeRender = react.useCallback(() => {
-    reflectorWorldPosition.setFromMatrixPosition(meshRef.current.matrixWorld);
-    cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
-    rotationMatrix.extractRotation(meshRef.current.matrixWorld);
-    normal.set(0, 0, 1);
-    normal.applyMatrix4(rotationMatrix);
-    view.subVectors(reflectorWorldPosition, cameraWorldPosition); // Avoid rendering when reflector is facing away
-
-    if (view.dot(normal) > 0) return;
-    view.reflect(normal).negate();
-    view.add(reflectorWorldPosition);
-    rotationMatrix.extractRotation(camera.matrixWorld);
-    lookAtPosition.set(0, 0, -1);
-    lookAtPosition.applyMatrix4(rotationMatrix);
-    lookAtPosition.add(cameraWorldPosition);
-    target.subVectors(reflectorWorldPosition, lookAtPosition);
-    target.reflect(normal).negate();
-    target.add(reflectorWorldPosition);
-    virtualCamera.position.copy(view);
-    virtualCamera.up.set(0, 1, 0);
-    virtualCamera.up.applyMatrix4(rotationMatrix);
-    virtualCamera.up.reflect(normal);
-    virtualCamera.lookAt(target);
-    virtualCamera.far = camera.far; // Used in WebGLBackground
-
-    virtualCamera.updateMatrixWorld();
-    virtualCamera.projectionMatrix.copy(camera.projectionMatrix); // Update the texture matrix
-
-    textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);
-    textureMatrix.multiply(virtualCamera.projectionMatrix);
-    textureMatrix.multiply(virtualCamera.matrixWorldInverse);
-    textureMatrix.multiply(meshRef.current.matrixWorld); // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html
-    // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
-
-    reflectorPlane.setFromNormalAndCoplanarPoint(normal, reflectorWorldPosition);
-    reflectorPlane.applyMatrix4(virtualCamera.matrixWorldInverse);
-    clipPlane.set(reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant);
-    const projectionMatrix = virtualCamera.projectionMatrix;
-    q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];
-    q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];
-    q.z = -1.0;
-    q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14]; // Calculate the scaled plane vector
-
-    clipPlane.multiplyScalar(2.0 / clipPlane.dot(q)); // Replacing the third row of the projection matrix
-
-    projectionMatrix.elements[2] = clipPlane.x;
-    projectionMatrix.elements[6] = clipPlane.y;
-    projectionMatrix.elements[10] = clipPlane.z + 1.0;
-    projectionMatrix.elements[14] = clipPlane.w;
-  }, []);
-  const [fbo1, fbo2, blurpass, reflectorProps] = react.useMemo(() => {
-    const parameters = {
-      minFilter: three_module.LinearFilter,
-      magFilter: three_module.LinearFilter,
-      encoding: gl.outputEncoding
-    };
-    const fbo1 = new three_module.WebGLRenderTarget(resolution, resolution, parameters);
-    fbo1.depthBuffer = true;
-    fbo1.depthTexture = new three_module.DepthTexture(resolution, resolution);
-    fbo1.depthTexture.format = three_module.DepthFormat;
-    fbo1.depthTexture.type = three_module.UnsignedShortType;
-    const fbo2 = new three_module.WebGLRenderTarget(resolution, resolution, parameters);
-    const blurpass = new BlurPass({
-      gl,
-      resolution,
-      width: blur[0],
-      height: blur[1],
-      minDepthThreshold,
-      maxDepthThreshold,
-      depthScale,
-      depthToBlurRatioBias
-    });
-    const reflectorProps = {
-      mirror,
-      textureMatrix,
-      mixBlur,
-      tDiffuse: fbo1.texture,
-      tDepth: fbo1.depthTexture,
-      tDiffuseBlur: fbo2.texture,
-      hasBlur,
-      mixStrength,
-      minDepthThreshold,
-      maxDepthThreshold,
-      depthScale,
-      depthToBlurRatioBias,
-      transparent: true,
-      debug,
-      distortion,
-      distortionMap,
-      mixContrast,
-      'defines-USE_BLUR': hasBlur ? '' : undefined,
-      'defines-USE_DEPTH': depthScale > 0 ? '' : undefined,
-      'defines-USE_DISTORTION': distortionMap ? '' : undefined
-    };
-    return [fbo1, fbo2, blurpass, reflectorProps];
-  }, [gl, blur, textureMatrix, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, debug, distortion, distortionMap, mixContrast]);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    if (!(meshRef != null && meshRef.current)) return;
-    meshRef.current.visible = false;
-    const currentXrEnabled = gl.xr.enabled;
-    const currentShadowAutoUpdate = gl.shadowMap.autoUpdate;
-    beforeRender();
-    gl.xr.enabled = false;
-    gl.shadowMap.autoUpdate = false;
-    gl.setRenderTarget(fbo1);
-    gl.state.buffers.depth.setMask(true);
-    if (!gl.autoClear) gl.clear();
-    gl.render(scene, virtualCamera);
-    if (hasBlur) blurpass.render(gl, fbo1, fbo2);
-    gl.xr.enabled = currentXrEnabled;
-    gl.shadowMap.autoUpdate = currentShadowAutoUpdate;
-    meshRef.current.visible = true;
-    gl.setRenderTarget(null);
-  });
-  return /*#__PURE__*/react.createElement("mesh", _extends({
-    ref: react_merge_refs_esm([meshRef, ref])
-  }, props), /*#__PURE__*/react.createElement("planeBufferGeometry", {
-    args: args
-  }), children ? children('meshReflectorMaterial', reflectorProps) : /*#__PURE__*/react.createElement("meshReflectorMaterial", reflectorProps));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/materials/SpotLightMaterial.js
-
-
-class SpotLightMaterial extends three_module.ShaderMaterial {
-  constructor() {
-    super({
-      uniforms: {
-        depth: {
-          value: null
-        },
-        opacity: {
-          value: 1
-        },
-        attenuation: {
-          value: 2.5
-        },
-        anglePower: {
-          value: 12
-        },
-        spotPosition: {
-          value: new three_module.Vector3(0, 0, 0)
-        },
-        lightColor: {
-          value: new three_module.Color('white')
-        },
-        cameraNear: {
-          value: 0
-        },
-        cameraFar: {
-          value: 1
-        },
-        resolution: {
-          value: new three_module.Vector2(0, 0)
-        }
-      },
-      transparent: true,
-      depthWrite: false,
-      vertexShader:
-      /* glsl */
-      `
-      varying vec3 vNormal;
-      varying vec3 vWorldPosition;
-      varying float vViewZ;
-      varying float vIntensity;
-      uniform vec3 spotPosition;
-      uniform float attenuation;      
-
-      void main() {
-        // compute intensity
-        vNormal = normalize( normalMatrix * normal );
-        vec4 worldPosition	= modelMatrix * vec4( position, 1.0 );
-        vWorldPosition = worldPosition.xyz;
-        vec4 viewPosition = viewMatrix * worldPosition;
-        vViewZ = viewPosition.z;
-        float intensity	= distance(worldPosition.xyz, spotPosition) / attenuation;
-        intensity	= 1.0 - clamp(intensity, 0.0, 1.0);
-        vIntensity = intensity;        
-        // set gl_Position
-        gl_Position	= projectionMatrix * viewPosition;
-
-      }`,
-      fragmentShader:
-      /* glsl */
-      `
-      #include <packing>
-
-      varying vec3 vNormal;
-      varying vec3 vWorldPosition;
-      uniform vec3 lightColor;
-      uniform vec3 spotPosition;
-      uniform float attenuation;
-      uniform float anglePower;
-      uniform sampler2D depth;
-      uniform vec2 resolution;
-      uniform float cameraNear;
-      uniform float cameraFar;
-      varying float vViewZ;
-      varying float vIntensity;
-      uniform float opacity;
-
-      float readDepth( sampler2D depthSampler, vec2 coord ) {
-        float fragCoordZ = texture2D( depthSampler, coord ).x;
-        float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);
-        return viewZ;
-      }
-
-      void main() {
-        float d = 1.0;
-        bool isSoft = resolution[0] > 0.0 && resolution[1] > 0.0;
-        if (isSoft) {
-          vec2 sUv = gl_FragCoord.xy / resolution;
-          d = readDepth(depth, sUv);
-        }
-        float intensity = vIntensity;
-        vec3 normal	= vec3(vNormal.x, vNormal.y, abs(vNormal.z));
-        float angleIntensity	= pow( dot(normal, vec3(0.0, 0.0, 1.0)), anglePower );
-        intensity	*= angleIntensity;
-        // fades when z is close to sampled depth, meaning the cone is intersecting existing geometry
-        if (isSoft) {
-          intensity	*= smoothstep(0., 1., vViewZ - d);
-        }
-        gl_FragColor = vec4(lightColor, intensity * opacity);
-
-        #include <tonemapping_fragment>
-	      #include <encodings_fragment>
-      }`
-    });
-  }
-
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/SpotLight.js
-
-
-
-
-
-
-const vec = new three_module.Vector3();
-const SpotLight = /*#__PURE__*/react.forwardRef(({
-  opacity = 1,
-  radiusTop,
-  radiusBottom,
-  depthBuffer,
-  color = 'white',
-  distance = 5,
-  angle = 0.15,
-  attenuation = 5,
-  anglePower = 5,
-  ...props
-}, ref) => {
-  const mesh = react.useRef(null);
-  const size = (0,react_three_fiber_esm.useThree)(state => state.size);
-  const camera = (0,react_three_fiber_esm.useThree)(state => state.camera);
-  const dpr = (0,react_three_fiber_esm.useThree)(state => state.viewport.dpr);
-  const [material] = react.useState(() => new SpotLightMaterial());
-  radiusTop = radiusTop === undefined ? 0.1 : radiusTop;
-  radiusBottom = radiusBottom === undefined ? angle * 7 : radiusBottom;
-  (0,react_three_fiber_esm.useFrame)(() => {
-    material.uniforms.spotPosition.value.copy(mesh.current.getWorldPosition(vec));
-    mesh.current.lookAt(mesh.current.parent.target.getWorldPosition(vec));
-  });
-  const geom = react.useMemo(() => {
-    const geometry = new three_module.CylinderGeometry(radiusTop, radiusBottom, distance, 128, 64, true);
-    geometry.applyMatrix4(new three_module.Matrix4().makeTranslation(0, -distance / 2, 0));
-    geometry.applyMatrix4(new three_module.Matrix4().makeRotationX(-Math.PI / 2));
-    return geometry;
-  }, [angle, distance, radiusTop, radiusBottom]);
-  return /*#__PURE__*/react.createElement("spotLight", _extends({
-    ref: ref,
-    angle: angle,
-    color: color,
-    distance: distance
-  }, props), /*#__PURE__*/react.createElement("mesh", {
-    ref: mesh,
-    geometry: geom,
-    raycast: () => null
-  }, /*#__PURE__*/react.createElement("primitive", {
-    object: material,
-    attach: "material",
-    "uniforms-opacity-value": opacity,
-    "uniforms-lightColor-value": color,
-    "uniforms-attenuation-value": attenuation,
-    "uniforms-anglePower-value": anglePower,
-    "uniforms-depth-value": depthBuffer,
-    "uniforms-cameraNear-value": camera.near,
-    "uniforms-cameraFar-value": camera.far,
-    "uniforms-resolution-value": depthBuffer ? [size.width * dpr, size.height * dpr] : [0, 0]
-  })));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Lightformer.js
-
-
-
-
-
-
-const Lightformer = /*#__PURE__*/react.forwardRef(({
-  args,
-  map,
-  toneMapped = false,
-  color = 'white',
-  form: Form = 'rect',
-  intensity = 1,
-  scale = 1,
-  target,
-  children,
-  ...props
-}, forwardRef) => {
-  // Apply emissive power
-  const ref = react.useRef(null);
-  react.useLayoutEffect(() => {
-    if (!children && !props.material) {
-      (0,react_three_fiber_esm.applyProps)(ref.current.material, {
-        color
-      });
-      ref.current.material.color.multiplyScalar(intensity);
-    }
-  }, [color, intensity, children, props.material]); // Target light
-
-  react.useLayoutEffect(() => {
-    if (target) ref.current.lookAt(Array.isArray(target) ? new three_module.Vector3(...target) : target);
-  }, [target]); // Fix 2-dimensional scale
-
-  scale = Array.isArray(scale) && scale.length === 2 ? [scale[0], scale[1], 1] : scale;
-  return /*#__PURE__*/react.createElement("mesh", _extends({
-    ref: react_merge_refs_esm([ref, forwardRef]),
-    scale: scale
-  }, props), Form === 'circle' ? /*#__PURE__*/react.createElement("ringGeometry", {
-    args: [0, 1, 64]
-  }) : Form === 'ring' ? /*#__PURE__*/react.createElement("ringGeometry", {
-    args: [0.5, 1, 64]
-  }) : Form === 'rect' ? /*#__PURE__*/react.createElement("planeGeometry", null) : /*#__PURE__*/react.createElement(Form, {
-    args: args
-  }), children ? children : !props.material ? /*#__PURE__*/react.createElement("meshBasicMaterial", {
-    toneMapped: toneMapped,
-    map: map,
-    side: three_module.DoubleSide
-  }) : null);
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/objects/Sky.js
-var Sky = __webpack_require__(48756);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Sky.js
-
-
-
-
-
-function calcPosFromAngles(inclination, azimuth, vector = new three_module.Vector3()) {
-  const theta = Math.PI * (inclination - 0.5);
-  const phi = 2 * Math.PI * (azimuth - 0.5);
-  vector.x = Math.cos(phi);
-  vector.y = Math.sin(theta);
-  vector.z = Math.sin(phi);
-  return vector;
-}
-const Sky_Sky = /*#__PURE__*/react.forwardRef(({
-  inclination = 0.6,
-  azimuth = 0.1,
-  distance = 1000,
-  mieCoefficient = 0.005,
-  mieDirectionalG = 0.8,
-  rayleigh = 0.5,
-  turbidity = 10,
-  sunPosition = calcPosFromAngles(inclination, azimuth),
-  ...props
-}, ref) => {
-  const scale = react.useMemo(() => new three_module.Vector3().setScalar(distance), [distance]);
-  const [sky] = react.useState(() => new Sky/* Sky */.q());
-  return /*#__PURE__*/react.createElement("primitive", _extends({
-    dispose: undefined,
-    object: sky,
-    ref: ref,
-    "material-uniforms-mieCoefficient-value": mieCoefficient,
-    "material-uniforms-mieDirectionalG-value": mieDirectionalG,
-    "material-uniforms-rayleigh-value": rayleigh,
-    "material-uniforms-sunPosition-value": sunPosition,
-    "material-uniforms-turbidity-value": turbidity,
-    scale: scale
-  }, props));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Stars.js
-
-
-
-
-class StarfieldMaterial extends three_module.ShaderMaterial {
-  constructor() {
-    super({
-      uniforms: {
-        time: {
-          value: 0.0
-        },
-        fade: {
-          value: 1.0
-        }
-      },
-      vertexShader:
-      /* glsl */
-      `
-      uniform float time;
-      attribute float size;
-      varying vec3 vColor;
-      void main() {
-        vColor = color;
-        vec4 mvPosition = modelViewMatrix * vec4(position, 0.5);
-        gl_PointSize = size * (30.0 / -mvPosition.z) * (3.0 + sin(mvPosition.x + 2.0 * time + 100.0));
-        gl_Position = projectionMatrix * mvPosition;
-      }`,
-      fragmentShader:
-      /* glsl */
-      `
-      uniform sampler2D pointTexture;
-      uniform float fade;
-      varying vec3 vColor;
-      void main() {
-        float opacity = 1.0;
-        if (fade == 1.0) {
-          float d = distance(gl_PointCoord, vec2(0.5, 0.5));
-          opacity = 1.0 / (1.0 + exp(16.0 * (d - 0.25)));
-        }
-        gl_FragColor = vec4(vColor, opacity);
-
-        #include <tonemapping_fragment>
-	      #include <encodings_fragment>
-      }`
-    });
-  }
-
-}
-
-const genStar = r => {
-  return new three_module.Vector3().setFromSpherical(new three_module.Spherical(r, Math.acos(1 - Math.random() * 2), Math.random() * 2 * Math.PI));
-};
-
-const Stars = /*#__PURE__*/react.forwardRef(({
-  radius = 100,
-  depth = 50,
-  count = 5000,
-  saturation = 0,
-  factor = 4,
-  fade = false
-}, ref) => {
-  const material = react.useRef();
-  const [position, color, size] = react.useMemo(() => {
-    const positions = [];
-    const colors = [];
-    const sizes = Array.from({
-      length: count
-    }, () => (0.5 + 0.5 * Math.random()) * factor);
-    const color = new three_module.Color();
-    let r = radius + depth;
-    const increment = depth / count;
-
-    for (let i = 0; i < count; i++) {
-      r -= increment * Math.random();
-      positions.push(...genStar(r).toArray());
-      color.setHSL(i / count, saturation, 0.9);
-      colors.push(color.r, color.g, color.b);
-    }
-
-    return [new Float32Array(positions), new Float32Array(colors), new Float32Array(sizes)];
-  }, [count, depth, factor, radius, saturation]);
-  (0,react_three_fiber_esm.useFrame)(state => material.current && (material.current.uniforms.time.value = state.clock.getElapsedTime()));
-  const [starfieldMaterial] = react.useState(() => new StarfieldMaterial());
-  return /*#__PURE__*/react.createElement("points", {
-    ref: ref
-  }, /*#__PURE__*/react.createElement("bufferGeometry", {
-    attach: "geometry"
-  }, /*#__PURE__*/react.createElement("bufferAttribute", {
-    attachObject: ['attributes', 'position'],
-    args: [position, 3]
-  }), /*#__PURE__*/react.createElement("bufferAttribute", {
-    attachObject: ['attributes', 'color'],
-    args: [color, 3]
-  }), /*#__PURE__*/react.createElement("bufferAttribute", {
-    attachObject: ['attributes', 'size'],
-    args: [size, 1]
-  })), /*#__PURE__*/react.createElement("primitive", {
-    dispose: undefined,
-    ref: material,
-    object: starfieldMaterial,
-    attach: "material",
-    blending: three_module.AdditiveBlending,
-    "uniforms-fade-value": fade,
-    transparent: true,
-    vertexColors: true
-  }));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Cloud.js
-
-
-
-
-
-
-const CLOUD_URL = 'https://rawcdn.githack.com/pmndrs/drei-assets/9225a9f1fbd449d9411125c2f419b843d0308c9f/cloud.png';
-function Cloud({
-  opacity = 0.5,
-  speed = 0.4,
-  width = 10,
-  depth = 1.5,
-  segments = 20,
-  texture = CLOUD_URL,
-  color = "#ffffff",
-  depthTest = true,
-  ...props
-}) {
-  const group = react.useRef();
-  const cloudTexture = useTexture(texture);
-  const clouds = react.useMemo(() => [...new Array(segments)].map((_, index) => ({
-    x: width / 2 - Math.random() * width,
-    y: width / 2 - Math.random() * width,
-    scale: 0.4 + Math.sin((index + 1) / segments * Math.PI) * ((0.2 + Math.random()) * 10),
-    density: Math.max(0.2, Math.random()),
-    rotation: Math.max(0.002, 0.005 * Math.random()) * speed
-  })), [width, segments, speed]);
-  (0,react_three_fiber_esm.useFrame)(state => {
-    var _group$current;
-
-    return (_group$current = group.current) == null ? void 0 : _group$current.children.forEach((cloud, index) => {
-      cloud.children[0].rotation.z += clouds[index].rotation;
-      cloud.children[0].scale.setScalar(clouds[index].scale + (1 + Math.sin(state.clock.getElapsedTime() / 10)) / 2 * index / 10);
-    });
-  });
-  return /*#__PURE__*/react.createElement("group", props, /*#__PURE__*/react.createElement("group", {
-    position: [0, 0, segments / 2 * depth],
-    ref: group
-  }, clouds.map(({
-    x,
-    y,
-    scale,
-    density
-  }, index) => /*#__PURE__*/react.createElement(Billboard, {
-    key: index,
-    position: [x, y, -index * depth]
-  }, /*#__PURE__*/react.createElement(Plane, {
-    scale: scale,
-    rotation: [0, 0, 0]
-  }, /*#__PURE__*/react.createElement("meshStandardMaterial", {
-    map: cloudTexture,
-    transparent: true,
-    opacity: scale / 6 * density * opacity,
-    depthTest: depthTest,
-    color: color
-  }))))));
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useMatcapTexture.js
-
-
-
-
-function getFormatString(format) {
-  switch (format) {
-    case 64:
-      return '-64px';
-
-    case 128:
-      return '-128px';
-
-    case 256:
-      return '-256px';
-
-    case 512:
-      return '-512px';
-
-    default:
-      return '';
-  }
-}
-
-const LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json';
-const MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d';
-function useMatcapTexture(id = 0, format = 1024) {
-  const matcapList = suspend(() => fetch(LIST_URL).then(res => res.json()), ['matcapList']);
-  const DEFAULT_MATCAP = matcapList[0];
-  const numTot = react.useMemo(() => Object.keys(matcapList).length, []);
-  const fileHash = react.useMemo(() => {
-    if (typeof id === 'string') {
-      return id;
-    } else if (typeof id === 'number') {
-      return matcapList[id];
-    }
-
-    return null;
-  }, [id]);
-  const fileName = `${fileHash || DEFAULT_MATCAP}${getFormatString(format)}.png`;
-  const url = `${MATCAP_ROOT}/${format}/${fileName}`;
-  const matcapTexture = useTexture(url);
-  return [matcapTexture, url, numTot];
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/useNormalTexture.js
-
-
-
-
-
-const NORMAL_ROOT = 'https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb';
-const useNormalTexture_LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json';
-function useNormalTexture(id = 0, settings = {}) {
-  const {
-    repeat = [1, 1],
-    anisotropy = 1,
-    offset = [0, 0]
-  } = settings;
-  const normalsList = suspend(() => fetch(useNormalTexture_LIST_URL).then(res => res.json()), ['normalsList']);
-  const numTot = react.useMemo(() => Object.keys(normalsList).length, []);
-  const DEFAULT_NORMAL = normalsList[0];
-  const imageName = normalsList[id] || DEFAULT_NORMAL;
-  const url = `${NORMAL_ROOT}/normals/${imageName}`;
-  const normalTexture = useTexture(url);
-  react.useLayoutEffect(() => {
-    if (!normalTexture) return;
-    normalTexture.wrapS = normalTexture.wrapT = three_module.RepeatWrapping;
-    normalTexture.repeat = new three_module.Vector2(repeat[0], repeat[1]);
-    normalTexture.offset = new three_module.Vector2(offset[0], offset[1]);
-    normalTexture.anisotropy = anisotropy;
-  }, [normalTexture, anisotropy, repeat, offset]);
-  return [normalTexture, url, numTot];
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/helpers/Position.js
-
-
-const _instanceLocalMatrix = /*@__PURE__*/new three_module.Matrix4();
-
-const _instanceWorldMatrix = /*@__PURE__*/new three_module.Matrix4();
-
-const _instanceIntersects = [];
-
-const _mesh = /*@__PURE__*/new three_module.Mesh();
-
-class Position extends three_module.Group {
-  constructor() {
-    super();
-    this.color = new three_module.Color('white');
-    this.instance = {
-      current: undefined
-    };
-    this.instanceKey = {
-      current: undefined
-    };
-  } // This will allow the virtual instance have bounds
-
-
-  get geometry() {
-    var _this$instance$curren;
-
-    return (_this$instance$curren = this.instance.current) == null ? void 0 : _this$instance$curren.geometry;
-  } // And this will allow the virtual instance to receive events
-
-
-  raycast(raycaster, intersects) {
-    const parent = this.instance.current;
-    if (!parent) return;
-    if (!parent.geometry || !parent.material) return;
-    _mesh.geometry = parent.geometry;
-    const matrixWorld = parent.matrixWorld;
-    let instanceId = parent.userData.instances.indexOf(this.instanceKey); // If the instance wasn't found or exceeds the parents draw range, bail out
-
-    if (instanceId === -1 || instanceId > parent.count) return; // calculate the world matrix for each instance
-
-    parent.getMatrixAt(instanceId, _instanceLocalMatrix);
-
-    _instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix); // the mesh represents this single instance
-
-
-    _mesh.matrixWorld = _instanceWorldMatrix;
-
-    _mesh.raycast(raycaster, _instanceIntersects); // process the result of raycast
-
-
-    for (let i = 0, l = _instanceIntersects.length; i < l; i++) {
-      const intersect = _instanceIntersects[i];
-      intersect.instanceId = instanceId;
-      intersect.object = this;
-      intersects.push(intersect);
-    }
-
-    _instanceIntersects.length = 0;
-  }
-
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Points.js
-
-
-
-
-
-
-
-let Points_i, positionRef;
-const Points_context = /*#__PURE__*/react.createContext(null);
-const parentMatrix = new three_module.Matrix4();
-const position = new three_module.Vector3();
-new three_module.Color();
-/**
- * Instance implementation, relies on react + context to update the attributes based on the children of this component
- */
-
-const PointsInstances = /*#__PURE__*/react.forwardRef(({
-  children,
-  range,
-  limit = 1000,
-  ...props
-}, ref) => {
-  const parentRef = react.useRef(null);
-  const [refs, setRefs] = react.useState([]);
-  const [[positions, colors, sizes]] = react.useState(() => [new Float32Array(limit * 3), Float32Array.from({
-    length: limit * 3
-  }, () => 1), Float32Array.from({
-    length: limit
-  }, () => 1)]);
-  react.useLayoutEffect(() => {
-    parentRef.current.geometry.drawRange.count = Math.min(limit, range !== undefined ? range : limit, refs.length);
-  }, [refs, range]);
-  react.useEffect(() => {
-    // We might be a frame too late? 🤷‍♂️
-    parentRef.current.geometry.attributes.position.needsUpdate = true;
-  });
-  (0,react_three_fiber_esm.useFrame)(() => {
-    parentRef.current.updateMatrix();
-    parentRef.current.updateMatrixWorld();
-    parentMatrix.copy(parentRef.current.matrixWorld).invert();
-
-    for (Points_i = 0; Points_i < refs.length; Points_i++) {
-      positionRef = refs[Points_i].current;
-      position.toArray(positions, Points_i * 3);
-      parentRef.current.geometry.attributes.position.needsUpdate = true;
-      positionRef.matrixWorldNeedsUpdate = true;
-      positionRef.color.toArray(colors, Points_i * 3);
-      parentRef.current.geometry.attributes.color.needsUpdate = true;
-      sizes.set([positionRef.size], Points_i);
-      parentRef.current.geometry.attributes.size.needsUpdate = true;
-    }
-  });
-  const events = react.useMemo(() => {
-    const events = {};
-
-    for (Points_i = 0; Points_i < refs.length; Points_i++) {
-      var _refs$i$current;
-
-      Object.assign(events, (_refs$i$current = refs[Points_i].current) == null ? void 0 : _refs$i$current.__r3f.handlers);
-    }
-
-    return Object.keys(events).reduce((prev, key) => ({ ...prev,
-      [key]: event => {
-        var _refs$event$index, _r3f, _r3f$handlers;
-
-        const object = (_refs$event$index = refs[event.index]) == null ? void 0 : _refs$event$index.current;
-        return object == null ? void 0 : (_r3f = object.__r3f) == null ? void 0 : (_r3f$handlers = _r3f.handlers) == null ? void 0 : _r3f$handlers[key]({ ...event,
-          object
-        });
-      }
-    }), {});
-  }, [children, refs]);
-  const api = react.useMemo(() => ({
-    subscribe: ref => {
-      setRefs(refs => [...refs, ref]);
-      return () => setRefs(refs => refs.filter(item => item.current !== ref.current));
-    }
-  }), []);
-  return /*#__PURE__*/react.createElement("points", _extends({
-    matrixAutoUpdate: false,
-    ref: react_merge_refs_esm([ref, parentRef])
-  }, events, props), /*#__PURE__*/react.createElement("bufferGeometry", null, /*#__PURE__*/react.createElement("bufferAttribute", {
-    attachObject: ['attributes', 'position'],
-    count: positions.length / 3,
-    array: positions,
-    itemSize: 3,
-    usage: three_module.DynamicDrawUsage
-  }), /*#__PURE__*/react.createElement("bufferAttribute", {
-    attachObject: ['attributes', 'color'],
-    count: colors.length / 3,
-    array: colors,
-    itemSize: 3,
-    usage: three_module.DynamicDrawUsage
-  }), /*#__PURE__*/react.createElement("bufferAttribute", {
-    attachObject: ['attributes', 'size'],
-    count: sizes.length,
-    array: sizes,
-    itemSize: 1,
-    usage: three_module.DynamicDrawUsage
-  })), /*#__PURE__*/react.createElement(Points_context.Provider, {
-    value: api
-  }, children));
-});
-const Point = /*#__PURE__*/react.forwardRef(({
-  children,
-  ...props
-}, ref) => {
-  react.useMemo(() => (0,react_three_fiber_esm.extend)({
-    Position: Position
-  }), []);
-  const group = react.useRef();
-  const {
-    subscribe
-  } = react.useContext(Points_context);
-  react.useLayoutEffect(() => subscribe(group), []);
-  return /*#__PURE__*/react.createElement("position", _extends({
-    ref: react_merge_refs_esm([ref, group])
-  }, props), children);
-});
-/**
- * Buffer implementation, relies on complete buffers of the correct number, leaves it to the user to update them
- */
-
-const PointsBuffer = /*#__PURE__*/react.forwardRef(({
-  children,
-  positions,
-  colors,
-  sizes,
-  stride = 3,
-  ...props
-}, forwardedRef) => {
-  const pointsRef = react.useRef(null);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    const attr = pointsRef.current.geometry.attributes;
-    attr.position.needsUpdate = true;
-    if (colors) attr.color.needsUpdate = true;
-    if (sizes) attr.size.needsUpdate = true;
-  });
-  return /*#__PURE__*/react.createElement("points", _extends({
-    ref: react_merge_refs_esm([forwardedRef, pointsRef])
-  }, props), /*#__PURE__*/react.createElement("bufferGeometry", null, /*#__PURE__*/react.createElement("bufferAttribute", {
-    attachObject: ['attributes', 'position'],
-    count: positions.length / stride,
-    array: positions,
-    itemSize: stride,
-    usage: three_module.DynamicDrawUsage
-  }), colors && /*#__PURE__*/react.createElement("bufferAttribute", {
-    attachObject: ['attributes', 'color'],
-    count: colors.length / stride,
-    array: colors,
-    itemSize: 3,
-    usage: three_module.DynamicDrawUsage
-  }), sizes && /*#__PURE__*/react.createElement("bufferAttribute", {
-    attachObject: ['attributes', 'size'],
-    count: sizes.length / stride,
-    array: sizes,
-    itemSize: 1,
-    usage: three_module.DynamicDrawUsage
-  })), children);
-});
-const Points = /*#__PURE__*/react.forwardRef((props, forwardedRef) => {
-  if (props.positions instanceof Float32Array) {
-    return /*#__PURE__*/react.createElement(PointsBuffer, _extends({}, props, {
-      ref: forwardedRef
-    }));
-  } else return /*#__PURE__*/react.createElement(PointsInstances, _extends({}, props, {
-    ref: forwardedRef
-  }));
-});
-
-
-
-// EXTERNAL MODULE: ./node_modules/prop-types/index.js
-var prop_types = __webpack_require__(45697);
-var prop_types_default = /*#__PURE__*/__webpack_require__.n(prop_types);
-;// CONCATENATED MODULE: ./node_modules/react-composer/es/index.js
-
-
-
-function Composer(props) {
-  return renderRecursive(props.children, props.components);
-}
-
-Composer.propTypes = {
-  children: (prop_types_default()).func.isRequired,
-  components: prop_types_default().arrayOf(prop_types_default().oneOfType([(prop_types_default()).element, (prop_types_default()).func])).isRequired
-};
-
-/**
- * Recursively build up elements from props.components and accumulate `results` along the way.
- * @param {function} render
- * @param {Array.<ReactElement|Function>} remaining
- * @param {Array} [results]
- * @returns {ReactElement}
- */
-function renderRecursive(render, remaining, results) {
-  results = results || [];
-  // Once components is exhausted, we can render out the results array.
-  if (!remaining[0]) {
-    return render(results);
-  }
-
-  // Continue recursion for remaining items.
-  // results.concat([value]) ensures [...results, value] instead of [...results, ...value]
-  function nextRender(value) {
-    return renderRecursive(render, remaining.slice(1), results.concat([value]));
-  }
-
-  // Each props.components entry is either an element or function [element factory]
-  return typeof remaining[0] === 'function' ? // When it is a function, produce an element by invoking it with "render component values".
-  remaining[0]({ results: results, render: nextRender }) : // When it is an element, enhance the element's props with the render prop.
-  (0,react.cloneElement)(remaining[0], { children: nextRender });
-}
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Instances.js
-
-
-
-
-
-
-
-
-let Instances_i, instanceRef;
-const globalContext = /*#__PURE__*/react.createContext(null);
-const Instances_parentMatrix = new three_module.Matrix4();
-const instanceMatrix = new three_module.Matrix4();
-const Instances_tempMatrix = new three_module.Matrix4();
-new three_module.Color();
-const translation = new three_module.Vector3();
-const rotation = new three_module.Quaternion();
-const scale = new three_module.Vector3();
-const Instance = /*#__PURE__*/react.forwardRef(({
-  context,
-  children,
-  ...props
-}, ref) => {
-  react.useMemo(() => (0,react_three_fiber_esm.extend)({
-    Position: Position
-  }), []);
-  const group = react.useRef();
-  const {
-    subscribe,
-    getParent
-  } = react.useContext(context || globalContext);
-  react.useLayoutEffect(() => subscribe(group), []);
-  return /*#__PURE__*/react.createElement("position", _extends({
-    instance: getParent(),
-    instanceKey: group,
-    ref: react_merge_refs_esm([ref, group])
-  }, props), children);
-});
-const Instances = /*#__PURE__*/react.forwardRef(({
-  children,
-  range,
-  limit = 1000,
-  frames = Infinity,
-  ...props
-}, ref) => {
-  const [{
-    context,
-    instance
-  }] = react.useState(() => {
-    const context = /*#__PURE__*/react.createContext(null);
-    return {
-      context,
-      instance: /*#__PURE__*/react.forwardRef((props, ref) => /*#__PURE__*/react.createElement(Instance, _extends({
-        context: context
-      }, props, {
-        ref: ref
-      })))
-    };
-  });
-  const parentRef = react.useRef(null);
-  const [instances, setInstances] = react.useState([]);
-  const [[matrices, colors]] = react.useState(() => {
-    const mArray = new Float32Array(limit * 16);
-
-    for (Instances_i = 0; Instances_i < limit; Instances_i++) Instances_tempMatrix.identity().toArray(mArray, Instances_i * 16);
-
-    return [mArray, new Float32Array([...new Array(limit * 3)].map(() => 1))];
-  });
-  react.useLayoutEffect(() => {
-    parentRef.current.count = parentRef.current.instanceMatrix.updateRange.count = parentRef.current.instanceColor.updateRange.count = Math.min(limit, range !== undefined ? range : limit, instances.length);
-  }, [instances, range]);
-  react.useEffect(() => {
-    // We might be a frame too late? 🤷‍♂️
-    parentRef.current.instanceMatrix.needsUpdate = true;
-  });
-  let count = 0;
-  (0,react_three_fiber_esm.useFrame)(() => {
-    if (frames === Infinity || count < frames) {
-      parentRef.current.updateMatrix();
-      parentRef.current.updateMatrixWorld();
-      Instances_parentMatrix.copy(parentRef.current.matrixWorld).invert();
-
-      for (Instances_i = 0; Instances_i < instances.length; Instances_i++) {
-        instanceRef = instances[Instances_i].current; // Multiply the inverse of the InstancedMesh world matrix or else
-        // Instances will be double-transformed if <Instances> isn't at identity
-
-        instanceRef.matrixWorld.decompose(translation, rotation, scale);
-        instanceMatrix.compose(translation, rotation, scale).premultiply(Instances_parentMatrix);
-        instanceMatrix.toArray(matrices, Instances_i * 16);
-        parentRef.current.instanceMatrix.needsUpdate = true;
-        instanceRef.color.toArray(colors, Instances_i * 3);
-        parentRef.current.instanceColor.needsUpdate = true;
-      }
-
-      count++;
-    }
-  });
-  const api = react.useMemo(() => ({
-    getParent: () => parentRef,
-    subscribe: ref => {
-      setInstances(instances => [...instances, ref]);
-      return () => setInstances(instances => instances.filter(item => item.current !== ref.current));
-    }
-  }), []);
-  return /*#__PURE__*/react.createElement("instancedMesh", _extends({
-    userData: {
-      instances
-    },
-    matrixAutoUpdate: false,
-    ref: react_merge_refs_esm([ref, parentRef]),
-    args: [null, null, 0],
-    raycast: () => null
-  }, props), /*#__PURE__*/react.createElement("instancedBufferAttribute", {
-    attach: "instanceMatrix",
-    count: matrices.length / 16,
-    array: matrices,
-    itemSize: 16,
-    usage: three_module.DynamicDrawUsage
-  }), /*#__PURE__*/react.createElement("instancedBufferAttribute", {
-    attach: "instanceColor",
-    count: colors.length / 3,
-    array: colors,
-    itemSize: 3,
-    usage: three_module.DynamicDrawUsage
-  }), typeof children === 'function' ? /*#__PURE__*/react.createElement(context.Provider, {
-    value: api
-  }, children(instance)) : /*#__PURE__*/react.createElement(globalContext.Provider, {
-    value: api
-  }, children));
-});
-
-function Merged({
-  meshes,
-  children,
-  ...props
-}) {
-  const isArray = Array.isArray(meshes); // Filter out meshes from collections, which may contain non-meshes
-
-  if (!isArray) for (const key of Object.keys(meshes)) if (!meshes[key].isMesh) delete meshes[key];
-  return /*#__PURE__*/react.createElement(Composer, {
-    components: (isArray ? meshes : Object.values(meshes)).map(({
-      geometry,
-      material
-    }) => /*#__PURE__*/react.createElement(Instances, _extends({
-      key: geometry.uuid,
-      geometry: geometry,
-      material: material
-    }, props)))
-  }, args => isArray ? children(...args) : children(Object.keys(meshes).filter(key => meshes[key].isMesh).reduce((acc, key, i) => ({ ...acc,
-    [key]: args[i]
-  }), {})));
-}
-
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/lines/LineSegmentsGeometry.js
-var LineSegmentsGeometry = __webpack_require__(3415);
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Segments.js
-
-
-
-
-
-
-
-const Segments_context = /*#__PURE__*/react.createContext(null);
-
-const arrColor = color => color instanceof three_module.Color ? color.toArray() : color;
-
-const arrPos = pos => pos instanceof three_module.Vector3 ? pos.toArray() : pos;
-
-const Segments = /*#__PURE__*/react.forwardRef((props, forwardedRef) => {
-  const {
-    limit = 1000,
-    lineWidth = 1.0,
-    children,
-    ...rest
-  } = props;
-  const [segments, setSegments] = react.useState([]);
-  const [line] = react.useState(() => new Line2/* Line2 */.w());
-  const [material] = react.useState(() => new LineMaterial/* LineMaterial */.Y());
-  const [geometry] = react.useState(() => new LineSegmentsGeometry/* LineSegmentsGeometry */.z());
-  const [resolution] = react.useState(() => new three_module.Vector2(512, 512));
-  const [positions] = react.useState(() => Array(limit * 6).fill(0));
-  const [colors] = react.useState(() => Array(limit * 6).fill(0));
-  const api = react.useMemo(() => ({
-    subscribe: ref => {
-      setSegments(segments => [...segments, ref]);
-      return () => setSegments(segments => segments.filter(item => item.current !== ref.current));
-    }
-  }), []);
-  (0,react_three_fiber_esm.useFrame)(() => {
-    for (let i = 0; i < limit; i++) {
-      var _segments$i;
-
-      const segment = (_segments$i = segments[i]) == null ? void 0 : _segments$i.current;
-      const segmentStart = segment ? arrPos(segment.start) : [0, 0, 0];
-      const segmentEnd = segment ? arrPos(segment.end) : [0, 0, 0];
-      const segmentColor = segment ? arrColor(segment.color) : [1, 1, 1]; //console.log(segmentStart, segmentEnd, segmentColor)
-
-      for (var j = 0; j < 3; j++) {
-        positions[i * 6 + j] = segmentStart[j];
-        positions[i * 6 + j + 3] = segmentEnd[j];
-        colors[i * 6 + j] = segmentColor[j];
-        colors[i * 6 + j + 3] = segmentColor[j];
-      }
-    }
-
-    geometry.setColors(colors);
-    geometry.setPositions(positions);
-    line.computeLineDistances();
-  });
-  return /*#__PURE__*/react.createElement("primitive", {
-    object: line,
-    ref: forwardedRef
-  }, /*#__PURE__*/react.createElement("primitive", {
-    object: geometry,
-    attach: "geometry"
-  }), /*#__PURE__*/react.createElement("primitive", _extends({
-    object: material,
-    attach: "material",
-    vertexColors: true,
-    resolution: resolution,
-    linewidth: lineWidth
-  }, rest)), /*#__PURE__*/react.createElement(Segments_context.Provider, {
-    value: api
-  }, children));
-});
-
-class SegmentObject {
-  constructor() {
-    this.color = new three_module.Color('white');
-    this.start = new three_module.Vector3(0, 0, 0);
-    this.end = new three_module.Vector3(0, 0, 0);
-  }
-
-}
-
-const Segment = /*#__PURE__*/react.forwardRef((props, forwardedRef) => {
-  const api = react.useContext(Segments_context);
-  if (!api) throw 'Segment must used inside Segments component.';
-  const ref = react.useRef();
-  react.useMemo(() => (0,react_three_fiber_esm.extend)({
-    SegmentObject
-  }), []);
-  react.useLayoutEffect(() => api.subscribe(ref), []);
-  return /*#__PURE__*/react.createElement("segmentObject", _extends({
-    ref: react_merge_refs_esm([ref, forwardedRef])
-  }, props));
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Detailed.js
-
-
-
-
-
-const Detailed = /*#__PURE__*/react.forwardRef(({
-  children,
-  distances,
-  ...props
-}, ref) => {
-  const lodRef = react.useRef(null);
-  react.useLayoutEffect(() => {
-    const {
-      current: lod
-    } = lodRef;
-    lod.levels.length = 0;
-    lod.children.forEach((object, index) => lod.levels.push({
-      object,
-      distance: distances[index]
-    }));
-  });
-  (0,react_three_fiber_esm.useFrame)(state => {
-    var _lodRef$current;
-
-    return (_lodRef$current = lodRef.current) == null ? void 0 : _lodRef$current.update(state.camera);
-  });
-  return /*#__PURE__*/react.createElement("lOD", _extends({
-    ref: react_merge_refs_esm([lodRef, ref])
-  }, props), children);
-});
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/Preload.js
-
-
-
-
-function Preload({
-  all,
-  scene,
-  camera
-}) {
-  const gl = (0,react_three_fiber_esm.useThree)(({
-    gl
-  }) => gl);
-  const dCamera = (0,react_three_fiber_esm.useThree)(({
-    camera
-  }) => camera);
-  const dScene = (0,react_three_fiber_esm.useThree)(({
-    scene
-  }) => scene); // Layout effect because it must run before React commits
-
-  react.useLayoutEffect(() => {
-    const invisible = [];
-
-    if (all) {
-      (scene || dScene).traverse(object => {
-        if (object.visible === false) {
-          invisible.push(object);
-          object.visible = true;
-        }
-      });
-    } // Now compile the scene
-
-
-    gl.compile(scene || dScene, camera || dCamera); // And for good measure, hit it with a cube camera
-
-    const cubeRenderTarget = new three_module.WebGLCubeRenderTarget(128);
-    const cubeCamera = new three_module.CubeCamera(0.01, 100000, cubeRenderTarget);
-    cubeCamera.update(gl, scene || dScene);
-    cubeRenderTarget.dispose(); // Flips these objects back
-
-    invisible.forEach(object => object.visible = false);
-  }, []);
-  return null;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/BakeShadows.js
-
-
-
-function BakeShadows() {
-  const gl = (0,react_three_fiber_esm.useThree)(state => state.gl);
-  (0,react.useEffect)(() => {
-    gl.shadowMap.autoUpdate = false;
-    gl.shadowMap.needsUpdate = true;
-    return () => {
-      gl.shadowMap.autoUpdate = gl.shadowMap.needsUpdate = true;
-    };
-  }, [gl.shadowMap]);
-  return null;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/meshBounds.js
-
-
-const _inverseMatrix = new three_module.Matrix4();
-
-const _ray = new three_module.Ray();
-
-const _sphere = new three_module.Sphere();
-
-const _vA = new three_module.Vector3();
-
-function meshBounds(raycaster, intersects) {
-  const geometry = this.geometry;
-  const material = this.material;
-  const matrixWorld = this.matrixWorld;
-  if (material === undefined) return; // Checking boundingSphere distance to ray
-
-  if (geometry.boundingSphere === null) geometry.computeBoundingSphere();
-
-  _sphere.copy(geometry.boundingSphere);
-
-  _sphere.applyMatrix4(matrixWorld);
-
-  if (raycaster.ray.intersectsSphere(_sphere) === false) return;
-
-  _inverseMatrix.copy(matrixWorld).invert();
-
-  _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix); // Check boundingBox before continuing
-
-
-  if (geometry.boundingBox !== null && _ray.intersectBox(geometry.boundingBox, _vA) === null) return;
-  intersects.push({
-    distance: _vA.distanceTo(raycaster.ray.origin),
-    point: _vA.clone(),
-    object: this
-  });
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/AdaptiveDpr.js
-
-
-
-function AdaptiveDpr({
-  pixelated
-}) {
-  const gl = (0,react_three_fiber_esm.useThree)(state => state.gl);
-  const active = (0,react_three_fiber_esm.useThree)(state => state.internal.active);
-  const current = (0,react_three_fiber_esm.useThree)(state => state.performance.current);
-  const initialDpr = (0,react_three_fiber_esm.useThree)(state => state.viewport.initialDpr);
-  const setDpr = (0,react_three_fiber_esm.useThree)(state => state.setDpr); // Restore initial pixelratio on unmount
-
-  react.useEffect(() => {
-    const domElement = gl.domElement;
-    return () => {
-      if (active) setDpr(initialDpr);
-      if (pixelated && domElement) domElement.style.imageRendering = 'auto';
-    };
-  }, []); // Set adaptive pixelratio
-
-  react.useEffect(() => {
-    setDpr(current * initialDpr);
-    if (pixelated && gl.domElement) gl.domElement.style.imageRendering = current === 1 ? 'auto' : 'pixelated';
-  }, [current]);
-  return null;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/core/AdaptiveEvents.js
-
-
-
-function AdaptiveEvents() {
-  const get = (0,react_three_fiber_esm.useThree)(state => state.get);
-  const current = (0,react_three_fiber_esm.useThree)(state => state.performance.current);
-  react.useEffect(() => {
-    const enabled = get().raycaster.enabled;
-    return () => void (get().raycaster.enabled = enabled);
-  }, []);
-  react.useEffect(() => void (get().raycaster.enabled = current === 1), [current]);
-  return null;
-}
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/drei/index.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/***/ }),
-
-/***/ 64232:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Canvas": () => (/* binding */ Canvas),
-  "ReactThreeFiber": () => (/* binding */ threeTypes),
-  "_roots": () => (/* binding */ roots),
-  "act": () => (/* binding */ act),
-  "addAfterEffect": () => (/* binding */ addAfterEffect),
-  "addEffect": () => (/* binding */ addEffect),
-  "addTail": () => (/* binding */ addTail),
-  "advance": () => (/* binding */ advance),
-  "applyProps": () => (/* binding */ applyProps),
-  "context": () => (/* binding */ context),
-  "createPortal": () => (/* binding */ createPortal),
-  "dispose": () => (/* binding */ dispose),
-  "events": () => (/* binding */ createPointerEvents),
-  "extend": () => (/* binding */ extend),
-  "invalidate": () => (/* binding */ invalidate),
-  "reconciler": () => (/* binding */ reconciler),
-  "render": () => (/* binding */ render),
-  "unmountComponentAtNode": () => (/* binding */ unmountComponentAtNode),
-  "useFrame": () => (/* binding */ useFrame),
-  "useGraph": () => (/* binding */ useGraph),
-  "useLoader": () => (/* binding */ useLoader),
-  "useThree": () => (/* binding */ useThree)
-});
-
-// EXTERNAL MODULE: ./node_modules/three/build/three.module.js
-var three_module = __webpack_require__(99477);
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-// EXTERNAL MODULE: ./node_modules/zustand/esm/index.js
-var esm = __webpack_require__(14671);
-// EXTERNAL MODULE: ./node_modules/zustand/esm/shallow.js
-var shallow = __webpack_require__(60374);
-// EXTERNAL MODULE: ./node_modules/react-reconciler/index.js
-var react_reconciler = __webpack_require__(76525);
-var react_reconciler_default = /*#__PURE__*/__webpack_require__.n(react_reconciler);
-// EXTERNAL MODULE: ./node_modules/scheduler/index.js
-var scheduler = __webpack_require__(63840);
-// EXTERNAL MODULE: ./node_modules/fast-deep-equal/index.js
-var fast_deep_equal = __webpack_require__(64063);
-var fast_deep_equal_default = /*#__PURE__*/__webpack_require__.n(fast_deep_equal);
-;// CONCATENATED MODULE: ./node_modules/use-asset/dist/index.js
-
-
-const globalCache = [];
-
-function handleAsset(fn, cache, args, lifespan = 0, preload = false) {
-  for (const entry of cache) {
-    // Find a match
-    if (fast_deep_equal_default()(args, entry.args)) {
-      // If we're pre-loading and the element is present, just return
-      if (preload) return; // If an error occurred, throw
-
-      if (entry.error) throw entry.error; // If a response was successful, return
-
-      if (entry.response) return entry.response; // If the promise is still unresolved, throw
-
-      throw entry.promise;
-    }
-  } // The request is new or has changed.
-
-
-  const entry = {
-    args,
-    promise: // Make the promise request.
-    fn(...args) // Response can't be undefined or else the loop above wouldn't be able to return it
-    // This is for promises that do not return results (delays for instance)
-    .then(response => entry.response = response != null ? response : true).catch(e => entry.error = e != null ? e : 'unknown error').then(() => {
-      if (lifespan > 0) {
-        setTimeout(() => {
-          const index = cache.indexOf(entry);
-          if (index !== -1) cache.splice(index, 1);
-        }, lifespan);
-      }
-    })
-  };
-  cache.push(entry);
-  if (!preload) throw entry.promise;
-}
-
-function clear(cache, ...args) {
-  if (args === undefined || args.length === 0) cache.splice(0, cache.length);else {
-    const entry = cache.find(entry => fast_deep_equal_default()(args, entry.args));
-
-    if (entry) {
-      const index = cache.indexOf(entry);
-      if (index !== -1) cache.splice(index, 1);
-    }
-  }
-}
-
-function createAsset(fn, lifespan = 0) {
-  const cache = [];
-  return {
-    /**
-     * @throws Suspense Promise if asset is not yet ready
-     * @throws Error if the promise rejected for some reason
-     */
-    read: (...args) => handleAsset(fn, cache, args, lifespan),
-    preload: (...args) => void handleAsset(fn, cache, args, lifespan, true),
-    clear: (...args) => clear(cache, ...args),
-    peek: (...args) => {
-      var _cache$find;
-
-      return (_cache$find = cache.find(entry => deepEqual(args, entry.args))) == null ? void 0 : _cache$find.response;
-    }
-  };
-}
-
-function useAsset(fn, ...args) {
-  return handleAsset(fn, globalCache, args, useAsset.lifespan);
-}
-
-useAsset.lifespan = 0;
-
-useAsset.clear = (...args) => clear(globalCache, ...args);
-
-useAsset.preload = (fn, ...args) => void handleAsset(fn, globalCache, args, useAsset.lifespan, true);
-
-useAsset.peek = (...args) => {
-  var _globalCache$find;
-
-  return (_globalCache$find = globalCache.find(entry => fast_deep_equal_default()(args, entry.args))) == null ? void 0 : _globalCache$find.response;
-};
-
-
-
-// EXTERNAL MODULE: ./node_modules/debounce/index.js
-var node_modules_debounce = __webpack_require__(20296);
-var debounce_default = /*#__PURE__*/__webpack_require__.n(node_modules_debounce);
-;// CONCATENATED MODULE: ./node_modules/react-use-measure/dist/web.js
-
-
-
-function useMeasure(_temp) {
-  let {
-    debounce,
-    scroll,
-    polyfill,
-    offsetSize
-  } = _temp === void 0 ? {
-    debounce: 0,
-    scroll: false,
-    offsetSize: false
-  } : _temp;
-  const ResizeObserver = polyfill || (typeof window === 'undefined' ? class ResizeObserver {} : window.ResizeObserver);
-
-  if (!ResizeObserver) {
-    throw new Error('This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills');
-  }
-
-  const [bounds, set] = (0,react.useState)({
-    left: 0,
-    top: 0,
-    width: 0,
-    height: 0,
-    bottom: 0,
-    right: 0,
-    x: 0,
-    y: 0
-  }); // keep all state in a ref
-
-  const state = (0,react.useRef)({
-    element: null,
-    scrollContainers: null,
-    resizeObserver: null,
-    lastBounds: bounds
-  }); // set actual debounce values early, so effects know if they should react accordingly
-
-  const scrollDebounce = debounce ? typeof debounce === 'number' ? debounce : debounce.scroll : null;
-  const resizeDebounce = debounce ? typeof debounce === 'number' ? debounce : debounce.resize : null; // make sure to update state only as long as the component is truly mounted
-
-  const mounted = (0,react.useRef)(false);
-  (0,react.useEffect)(() => {
-    mounted.current = true;
-    return () => void (mounted.current = false);
-  }); // memoize handlers, so event-listeners know when they should update
-
-  const [forceRefresh, resizeChange, scrollChange] = (0,react.useMemo)(() => {
-    const callback = () => {
-      if (!state.current.element) return;
-      const {
-        left,
-        top,
-        width,
-        height,
-        bottom,
-        right,
-        x,
-        y
-      } = state.current.element.getBoundingClientRect();
-      const size = {
-        left,
-        top,
-        width,
-        height,
-        bottom,
-        right,
-        x,
-        y
-      };
-
-      if (state.current.element instanceof HTMLElement && offsetSize) {
-        size.height = state.current.element.offsetHeight;
-        size.width = state.current.element.offsetWidth;
-      }
-
-      Object.freeze(size);
-      if (mounted.current && !areBoundsEqual(state.current.lastBounds, size)) set(state.current.lastBounds = size);
-    };
-
-    return [callback, resizeDebounce ? debounce_default()(callback, resizeDebounce) : callback, scrollDebounce ? debounce_default()(callback, scrollDebounce) : callback];
-  }, [set, offsetSize, scrollDebounce, resizeDebounce]); // cleanup current scroll-listeners / observers
-
-  function removeListeners() {
-    if (state.current.scrollContainers) {
-      state.current.scrollContainers.forEach(element => element.removeEventListener('scroll', scrollChange, true));
-      state.current.scrollContainers = null;
-    }
-
-    if (state.current.resizeObserver) {
-      state.current.resizeObserver.disconnect();
-      state.current.resizeObserver = null;
-    }
-  } // add scroll-listeners / observers
-
-
-  function addListeners() {
-    if (!state.current.element) return;
-    state.current.resizeObserver = new ResizeObserver(scrollChange);
-    state.current.resizeObserver.observe(state.current.element);
-
-    if (scroll && state.current.scrollContainers) {
-      state.current.scrollContainers.forEach(scrollContainer => scrollContainer.addEventListener('scroll', scrollChange, {
-        capture: true,
-        passive: true
-      }));
-    }
-  } // the ref we expose to the user
-
-
-  const ref = node => {
-    if (!node || node === state.current.element) return;
-    removeListeners();
-    state.current.element = node;
-    state.current.scrollContainers = findScrollContainers(node);
-    addListeners();
-  }; // add general event listeners
-
-
-  useOnWindowScroll(scrollChange, Boolean(scroll));
-  useOnWindowResize(resizeChange); // respond to changes that are relevant for the listeners
-
-  (0,react.useEffect)(() => {
-    removeListeners();
-    addListeners();
-  }, [scroll, scrollChange, resizeChange]); // remove all listeners when the components unmounts
-
-  (0,react.useEffect)(() => removeListeners, []);
-  return [ref, bounds, forceRefresh];
-} // Adds native resize listener to window
-
-
-function useOnWindowResize(onWindowResize) {
-  (0,react.useEffect)(() => {
-    const cb = onWindowResize;
-    window.addEventListener('resize', cb);
-    return () => void window.removeEventListener('resize', cb);
-  }, [onWindowResize]);
-}
-
-function useOnWindowScroll(onScroll, enabled) {
-  (0,react.useEffect)(() => {
-    if (enabled) {
-      const cb = onScroll;
-      window.addEventListener('scroll', cb, {
-        capture: true,
-        passive: true
-      });
-      return () => void window.removeEventListener('scroll', cb, true);
-    }
-  }, [onScroll, enabled]);
-} // Returns a list of scroll offsets
-
-
-function findScrollContainers(element) {
-  const result = [];
-  if (!element || element === document.body) return result;
-  const {
-    overflow,
-    overflowX,
-    overflowY
-  } = window.getComputedStyle(element);
-  if ([overflow, overflowX, overflowY].some(prop => prop === 'auto' || prop === 'scroll')) result.push(element);
-  return [...result, ...findScrollContainers(element.parentElement)];
-} // Checks if element boundaries are equal
-
-
-const keys = ['x', 'y', 'top', 'bottom', 'left', 'right', 'width', 'height'];
-
-const areBoundsEqual = (a, b) => keys.every(key => a[key] === b[key]);
-
-
-
-;// CONCATENATED MODULE: ./node_modules/@react-three/fiber/dist/react-three-fiber.esm.js
-
-
-
-
-
-
-
-
-
-var threeTypes = /*#__PURE__*/Object.freeze({
-  __proto__: null
-});
-
-const is = {
-  obj: a => a === Object(a) && !is.arr(a) && typeof a !== 'function',
-  fun: a => typeof a === 'function',
-  str: a => typeof a === 'string',
-  num: a => typeof a === 'number',
-  und: a => a === void 0,
-  arr: a => Array.isArray(a),
-
-  equ(a, b) {
-    // Wrong type or one of the two undefined, doesn't match
-    if (typeof a !== typeof b || !!a !== !!b) return false; // Atomic, just compare a against b
-
-    if (is.str(a) || is.num(a) || is.obj(a)) return a === b; // Array, shallow compare first to see if it's a match
-
-    if (is.arr(a) && a == b) return true; // Last resort, go through keys
-
-    let i;
-
-    for (i in a) if (!(i in b)) return false;
-
-    for (i in b) if (a[i] !== b[i]) return false;
-
-    return is.und(i) ? a === b : true;
-  }
-
-};
-
-function makeId(event) {
-  return (event.eventObject || event.object).uuid + '/' + event.index;
-}
-
-function removeInteractivity(store, object) {
-  const {
-    internal
-  } = store.getState(); // Removes every trace of an object from the data store
-
-  internal.interaction = internal.interaction.filter(o => o !== object);
-  internal.initialHits = internal.initialHits.filter(o => o !== object);
-  internal.hovered.forEach((value, key) => {
-    if (value.eventObject === object || value.object === object) {
-      internal.hovered.delete(key);
-    }
-  });
-}
-function createEvents(store) {
-  const temp = new three_module.Vector3();
-  /** Sets up defaultRaycaster */
-
-  function prepareRay(event) {
-    var _raycaster$computeOff;
-
-    const state = store.getState();
-    const {
-      raycaster,
-      mouse,
-      camera,
-      size
-    } = state; // https://github.com/pmndrs/react-three-fiber/pull/782
-    // Events trigger outside of canvas when moved
-
-    const {
-      offsetX,
-      offsetY
-    } = (_raycaster$computeOff = raycaster.computeOffsets == null ? void 0 : raycaster.computeOffsets(event, state)) != null ? _raycaster$computeOff : event;
-    const {
-      width,
-      height
-    } = size;
-    mouse.set(offsetX / width * 2 - 1, -(offsetY / height) * 2 + 1);
-    raycaster.setFromCamera(mouse, camera);
-  }
-  /** Calculates delta */
-
-
-  function calculateDistance(event) {
-    const {
-      internal
-    } = store.getState();
-    const dx = event.offsetX - internal.initialClick[0];
-    const dy = event.offsetY - internal.initialClick[1];
-    return Math.round(Math.sqrt(dx * dx + dy * dy));
-  }
-  /** Returns true if an instance has a valid pointer-event registered, this excludes scroll, clicks etc */
-
-
-  function filterPointerEvents(objects) {
-    return objects.filter(obj => ['Move', 'Over', 'Enter', 'Out', 'Leave'].some(name => {
-      var _r3f$handlers;
-
-      return (_r3f$handlers = obj.__r3f.handlers) == null ? void 0 : _r3f$handlers['onPointer' + name];
-    }));
-  }
-
-  function intersect(filter) {
-    const state = store.getState();
-    const {
-      raycaster,
-      internal
-    } = state; // Skip event handling when noEvents is set
-
-    if (!raycaster.enabled) return [];
-    const seen = new Set();
-    const intersections = []; // Allow callers to eliminate event objects
-
-    const eventsObjects = filter ? filter(internal.interaction) : internal.interaction; // Intersect known handler objects and filter against duplicates
-
-    let intersects = raycaster.intersectObjects(eventsObjects, true).filter(item => {
-      const id = makeId(item);
-      if (seen.has(id)) return false;
-      seen.add(id);
-      return true;
-    }); // https://github.com/mrdoob/three.js/issues/16031
-    // Allow custom userland intersect sort order
-
-    if (raycaster.filter) intersects = raycaster.filter(intersects, state);
-
-    for (const intersect of intersects) {
-      let eventObject = intersect.object; // Bubble event up
-
-      while (eventObject) {
-        var _r3f;
-
-        const handlers = (_r3f = eventObject.__r3f) == null ? void 0 : _r3f.handlers;
-        if (handlers) intersections.push({ ...intersect,
-          eventObject
-        });
-        eventObject = eventObject.parent;
-      }
-    }
-
-    return intersections;
-  }
-  /**  Creates filtered intersects and returns an array of positive hits */
-
-
-  function patchIntersects(intersections, event) {
-    const {
-      internal
-    } = store.getState(); // If the interaction is captured, make all capturing targets  part of the
-    // intersect.
-
-    if ('pointerId' in event && internal.capturedMap.has(event.pointerId)) {
-      intersections.push(...internal.capturedMap.get(event.pointerId).values());
-    }
-
-    return intersections;
-  }
-  /**  Handles intersections by forwarding them to handlers */
-
-
-  function handleIntersects(intersections, event, callback) {
-    const {
-      raycaster,
-      mouse,
-      camera,
-      internal
-    } = store.getState(); // If anything has been found, forward it to the event listeners
-
-    if (intersections.length) {
-      const unprojectedPoint = temp.set(mouse.x, mouse.y, 0).unproject(camera);
-      const delta = event.type === 'click' ? calculateDistance(event) : 0;
-
-      const releasePointerCapture = id => event.target.releasePointerCapture(id);
-
-      const localState = {
-        stopped: false
-      };
-
-      for (const hit of intersections) {
-        const hasPointerCapture = id => {
-          var _internal$capturedMap, _internal$capturedMap2;
-
-          return (_internal$capturedMap = (_internal$capturedMap2 = internal.capturedMap.get(id)) == null ? void 0 : _internal$capturedMap2.has(hit.eventObject)) != null ? _internal$capturedMap : false;
-        };
-
-        const setPointerCapture = id => {
-          if (internal.capturedMap.has(id)) {
-            // if the pointerId was previously captured, we add the hit to the
-            // event capturedMap.
-            internal.capturedMap.get(id).set(hit.eventObject, hit);
-          } else {
-            // if the pointerId was not previously captured, we create a map
-            // containing the hitObject, and the hit. hitObject is used for
-            // faster access.
-            internal.capturedMap.set(id, new Map([[hit.eventObject, hit]]));
-          } // Call the original event now
-          event.target.setPointerCapture(id);
-        }; // Add native event props
-
-
-        let extractEventProps = {};
-
-        for (let prop in Object.getPrototypeOf(event)) {
-          let property = event[prop]; // Only copy over atomics, leave functions alone as these should be
-          // called as event.nativeEvent.fn()
-
-          if (typeof property !== 'function') extractEventProps[prop] = property;
-        }
-
-        let raycastEvent = { ...hit,
-          ...extractEventProps,
-          spaceX: mouse.x,
-          spaceY: mouse.y,
-          intersections,
-          stopped: localState.stopped,
-          delta,
-          unprojectedPoint,
-          ray: raycaster.ray,
-          camera: camera,
-          // Hijack stopPropagation, which just sets a flag
-          stopPropagation: () => {
-            // https://github.com/pmndrs/react-three-fiber/issues/596
-            // Events are not allowed to stop propagation if the pointer has been captured
-            const capturesForPointer = 'pointerId' in event && internal.capturedMap.get(event.pointerId); // We only authorize stopPropagation...
-
-            if ( // ...if this pointer hasn't been captured
-            !capturesForPointer || // ... or if the hit object is capturing the pointer
-            capturesForPointer.has(hit.eventObject)) {
-              raycastEvent.stopped = localState.stopped = true; // Propagation is stopped, remove all other hover records
-              // An event handler is only allowed to flush other handlers if it is hovered itself
-
-              if (internal.hovered.size && Array.from(internal.hovered.values()).find(i => i.eventObject === hit.eventObject)) {
-                // Objects cannot flush out higher up objects that have already caught the event
-                const higher = intersections.slice(0, intersections.indexOf(hit));
-                cancelPointer([...higher, hit]);
-              }
-            }
-          },
-          // there should be a distinction between target and currentTarget
-          target: {
-            hasPointerCapture,
-            setPointerCapture,
-            releasePointerCapture
-          },
-          currentTarget: {
-            hasPointerCapture,
-            setPointerCapture,
-            releasePointerCapture
-          },
-          sourceEvent: event,
-          // deprecated
-          nativeEvent: event
-        }; // Call subscribers
-
-        callback(raycastEvent); // Event bubbling may be interrupted by stopPropagation
-
-        if (localState.stopped === true) break;
-      }
-    }
-
-    return intersections;
-  }
-
-  function cancelPointer(hits) {
-    const {
-      internal
-    } = store.getState();
-    Array.from(internal.hovered.values()).forEach(hoveredObj => {
-      // When no objects were hit or the the hovered object wasn't found underneath the cursor
-      // we call onPointerOut and delete the object from the hovered-elements map
-      if (!hits.length || !hits.find(hit => hit.object === hoveredObj.object && hit.index === hoveredObj.index)) {
-        const eventObject = hoveredObj.eventObject;
-        const handlers = eventObject.__r3f.handlers;
-        internal.hovered.delete(makeId(hoveredObj));
-
-        if (handlers) {
-          // Clear out intersects, they are outdated by now
-          const data = { ...hoveredObj,
-            intersections: hits || []
-          };
-          handlers.onPointerOut == null ? void 0 : handlers.onPointerOut(data);
-          handlers.onPointerLeave == null ? void 0 : handlers.onPointerLeave(data);
-        }
-      }
-    });
-  }
-
-  const handlePointer = name => {
-    // Deal with cancelation
-    switch (name) {
-      case 'onPointerLeave':
-      case 'onPointerCancel':
-        return () => cancelPointer([]);
-
-      case 'onLostPointerCapture':
-        return event => {
-          if ('pointerId' in event) {
-            // this will be a problem if one target releases the pointerId
-            // and another one is still keeping it, as the line below
-            // indifferently deletes all capturing references.
-            store.getState().internal.capturedMap.delete(event.pointerId);
-          }
-
-          cancelPointer([]);
-        };
-    } // Any other pointer goes here ...
-
-
-    return event => {
-      const {
-        onPointerMissed,
-        internal
-      } = store.getState();
-      prepareRay(event); // Get fresh intersects
-
-      const isPointerMove = name === 'onPointerMove';
-      const filter = isPointerMove ? filterPointerEvents : undefined;
-      const hits = patchIntersects(intersect(filter), event); // Take care of unhover
-
-      if (isPointerMove) cancelPointer(hits);
-      handleIntersects(hits, event, data => {
-        const eventObject = data.eventObject;
-        const handlers = eventObject.__r3f.handlers; // Check presence of handlers
-
-        if (!handlers) return;
-
-        if (isPointerMove) {
-          // Move event ...
-          if (handlers.onPointerOver || handlers.onPointerEnter || handlers.onPointerOut || handlers.onPointerLeave) {
-            // When enter or out is present take care of hover-state
-            const id = makeId(data);
-            const hoveredItem = internal.hovered.get(id);
-
-            if (!hoveredItem) {
-              // If the object wasn't previously hovered, book it and call its handler
-              internal.hovered.set(id, data);
-              handlers.onPointerOver == null ? void 0 : handlers.onPointerOver(data);
-              handlers.onPointerEnter == null ? void 0 : handlers.onPointerEnter(data);
-            } else if (hoveredItem.stopped) {
-              // If the object was previously hovered and stopped, we shouldn't allow other items to proceed
-              data.stopPropagation();
-            }
-          } // Call mouse move
-
-
-          handlers.onPointerMove == null ? void 0 : handlers.onPointerMove(data);
-        } else {
-          // All other events ...
-          const handler = handlers == null ? void 0 : handlers[name];
-
-          if (handler) {
-            // Forward all events back to their respective handlers with the exception of click events,
-            // which must use the initial target
-            if (name !== 'onClick' && name !== 'onContextMenu' && name !== 'onDoubleClick' || internal.initialHits.includes(eventObject)) {
-              handler(data);
-              pointerMissed(event, internal.interaction.filter(object => object !== eventObject));
-            }
-          }
-        }
-      }); // Save initial coordinates on pointer-down
-
-      if (name === 'onPointerDown') {
-        internal.initialClick = [event.offsetX, event.offsetY];
-        internal.initialHits = hits.map(hit => hit.eventObject);
-      } // If a click yields no results, pass it back to the user as a miss
-
-
-      if ((name === 'onClick' || name === 'onContextMenu' || name === 'onDoubleClick') && !hits.length) {
-        if (calculateDistance(event) <= 2) {
-          pointerMissed(event, internal.interaction);
-          if (onPointerMissed) onPointerMissed(event);
-        }
-      }
-    };
-  };
-
-  function pointerMissed(event, objects) {
-    objects.forEach(object => {
-      var _r3f$handlers2;
-
-      return (_r3f$handlers2 = object.__r3f.handlers) == null ? void 0 : _r3f$handlers2.onPointerMissed == null ? void 0 : _r3f$handlers2.onPointerMissed(event);
-    });
-  }
-
-  return {
-    handlePointer
-  };
-}
-
-// Type guard to tell a store from a portal
-const isStore = def => def && !!def.getState;
-
-const getContainer = (container, child) => {
-  var _container$__r3f$root, _container$__r3f;
-
-  return {
-    // If the container is not a root-store then it must be a THREE.Object3D into which part of the
-    // scene is portalled into. Now there can be two variants of this, either that object is part of
-    // the regular jsx tree, in which case it already has __r3f with a valid root attached, or it lies
-    // outside react, in which case we must take the root of the child that is about to be attached to it.
-    root: isStore(container) ? container : (_container$__r3f$root = (_container$__r3f = container.__r3f) == null ? void 0 : _container$__r3f.root) != null ? _container$__r3f$root : child.__r3f.root,
-    // The container is the eventual target into which objects are mounted, it has to be a THREE.Object3D
-    container: isStore(container) ? container.getState().scene : container
-  };
-};
-
-const DEFAULT = '__default';
-const EMPTY = {};
-const FILTER = ['children', 'key', 'ref'];
-let catalogue = {};
-
-let extend = objects => void (catalogue = { ...catalogue,
-  ...objects
-}); // Each object in the scene carries a small LocalState descriptor
-
-
-function prepare(object, state) {
-  const instance = object;
-
-  if (state != null && state.instance || !instance.__r3f) {
-    instance.__r3f = {
-      root: null,
-      memoizedProps: {},
-      objects: [],
-      ...state
-    };
-  }
-
-  return object;
-}
-
-function createRenderer(roots) {
-  function applyProps(instance, newProps, oldProps = {}, accumulative = false) {
-    var _instance$__r3f, _root$getState, _instance$__r3f2;
-
-    // Filter equals, events and reserved props
-    const localState = (_instance$__r3f = instance == null ? void 0 : instance.__r3f) != null ? _instance$__r3f : {};
-    const root = localState.root;
-    const rootState = (_root$getState = root == null ? void 0 : root.getState == null ? void 0 : root.getState()) != null ? _root$getState : {};
-    const sameProps = [];
-    const handlers = [];
-    const newMemoizedProps = {};
-    let i = 0;
-    Object.entries(newProps).forEach(([key, entry]) => {
-      // we don't want children, ref or key in the memoized props
-      if (FILTER.indexOf(key) === -1) {
-        newMemoizedProps[key] = entry;
-      }
-    });
-
-    if (localState.memoizedProps && localState.memoizedProps.args) {
-      newMemoizedProps.args = localState.memoizedProps.args;
-    }
-
-    if (localState.memoizedProps && localState.memoizedProps.attach) {
-      newMemoizedProps.attach = localState.memoizedProps.attach;
-    }
-
-    if (instance.__r3f) {
-      instance.__r3f.memoizedProps = newMemoizedProps;
-    }
-
-    let objectKeys = Object.keys(newProps);
-
-    for (i = 0; i < objectKeys.length; i++) {
-      if (is.equ(newProps[objectKeys[i]], oldProps[objectKeys[i]])) {
-        sameProps.push(objectKeys[i]);
-      } // Event-handlers ...
-      //   are functions, that
-      //   start with "on", and
-      //   contain the name "Pointer", "Click", "DoubleClick", "ContextMenu", or "Wheel"
-
-
-      if (is.fun(newProps[objectKeys[i]]) && /^on(Pointer|Click|DoubleClick|ContextMenu|Wheel)/.test(objectKeys[i])) {
-        handlers.push(objectKeys[i]);
-      }
-    } // Catch props that existed, but now exist no more ...
-
-
-    const leftOvers = [];
-
-    if (accumulative) {
-      objectKeys = Object.keys(oldProps);
-
-      for (i = 0; i < objectKeys.length; i++) {
-        if (!newProps.hasOwnProperty(objectKeys[i])) {
-          leftOvers.push(objectKeys[i]);
-        }
-      }
-    }
-
-    const toFilter = [...sameProps, ...FILTER]; // Instances use "object" as a reserved identifier
-
-    if ((_instance$__r3f2 = instance.__r3f) != null && _instance$__r3f2.instance) toFilter.push('object');
-    const filteredProps = { ...newProps
-    }; // Removes sameProps and reserved props from newProps
-
-    objectKeys = Object.keys(filteredProps);
-
-    for (i = 0; i < objectKeys.length; i++) {
-      if (toFilter.indexOf(objectKeys[i]) > -1) {
-        delete filteredProps[objectKeys[i]];
-      }
-    } // Collect all new props
-
-
-    const filteredPropsEntries = Object.entries(filteredProps); // Prepend left-overs so they can be reset or removed
-    // Left-overs must come first!
-
-    for (i = 0; i < leftOvers.length; i++) {
-      if (leftOvers[i] !== 'children') {
-        filteredPropsEntries.unshift([leftOvers[i], DEFAULT + 'remove']);
-      }
-    }
-
-    if (filteredPropsEntries.length > 0) {
-      filteredPropsEntries.forEach(([key, value]) => {
-        if (!handlers.includes(key)) {
-          let currentInstance = instance;
-          let targetProp = currentInstance[key];
-
-          if (key.includes('-')) {
-            const entries = key.split('-');
-            targetProp = entries.reduce((acc, key) => acc[key], instance); // If the target is atomic, it forces us to switch the root
-
-            if (!(targetProp && targetProp.set)) {
-              const [name, ...reverseEntries] = entries.reverse();
-              currentInstance = reverseEntries.reverse().reduce((acc, key) => acc[key], instance);
-              key = name;
-            }
-          } // https://github.com/mrdoob/three.js/issues/21209
-          // HMR/fast-refresh relies on the ability to cancel out props, but threejs
-          // has no means to do this. Hence we curate a small collection of value-classes
-          // with their respective constructor/set arguments
-          // For removed props, try to set default values, if possible
-
-
-          if (value === DEFAULT + 'remove') {
-            if (targetProp && targetProp.constructor) {
-              // use the prop constructor to find the default it should be
-              value = new targetProp.constructor(newMemoizedProps.args);
-            } else if (currentInstance.constructor) {
-              // create a blank slate of the instance and copy the particular parameter.
-              // @ts-ignore
-              const defaultClassCall = new currentInstance.constructor(currentInstance.__r3f.memoizedProps.args);
-              value = defaultClassCall[targetProp]; // destory the instance
-
-              if (defaultClassCall.dispose) {
-                defaultClassCall.dispose();
-              }
-            } else {
-              // instance does not have constructor, just set it to 0
-              value = 0;
-            }
-          } // Special treatment for objects with support for set/copy, and layers
-
-
-          if (targetProp && targetProp.set && (targetProp.copy || targetProp instanceof three_module.Layers)) {
-            // If value is an array
-            if (Array.isArray(value)) {
-              if (targetProp.fromArray) {
-                targetProp.fromArray(value);
-              } else {
-                targetProp.set(...value);
-              }
-            } // Test again target.copy(class) next ...
-            else if (targetProp.copy && value && value.constructor && targetProp.constructor.name === value.constructor.name) {
-                targetProp.copy(value);
-              } // If nothing else fits, just set the single value, ignore undefined
-              // https://github.com/react-spring/react-three-fiber/issues/274
-              else if (value !== undefined) {
-                  const isColor = targetProp instanceof three_module.Color; // Allow setting array scalars
-
-                  if (!isColor && targetProp.setScalar) targetProp.setScalar(value); // Layers have no copy function, we must therefore copy the mask property
-                  else if (targetProp instanceof three_module.Layers && value instanceof three_module.Layers) targetProp.mask = value.mask; // Otherwise just set ...
-                    else targetProp.set(value); // Auto-convert sRGB colors, for now ...
-                  // https://github.com/react-spring/react-three-fiber/issues/344
-
-                  if (!rootState.linear && isColor) targetProp.convertSRGBToLinear();
-                } // Else, just overwrite the value
-
-          } else {
-            currentInstance[key] = value; // Auto-convert sRGB textures, for now ...
-            // https://github.com/react-spring/react-three-fiber/issues/344
-
-            if (!rootState.linear && currentInstance[key] instanceof three_module.Texture) currentInstance[key].encoding = three_module.sRGBEncoding;
-          }
-
-          invalidateInstance(instance);
-        }
-      }); // Preemptively delete the instance from the containers interaction
-
-      if (accumulative && root && instance.raycast && localState.handlers) {
-        localState.handlers = undefined;
-        const index = rootState.internal.interaction.indexOf(instance);
-        if (index > -1) rootState.internal.interaction.splice(index, 1);
-      } // Prep interaction handlers
-
-
-      if (handlers.length) {
-        if (accumulative && root && instance.raycast) {
-          rootState.internal.interaction.push(instance);
-        } // Add handlers to the instances handler-map
-
-
-        localState.handlers = handlers.reduce((acc, key) => ({ ...acc,
-          [key]: newProps[key]
-        }), {});
-      } // Call the update lifecycle when it is being updated, but only when it is part of the scene
-
-
-      if (instance.parent) updateInstance(instance);
-    }
-  }
-
-  function invalidateInstance(instance) {
-    var _instance$__r3f3, _instance$__r3f3$root;
-
-    const state = (_instance$__r3f3 = instance.__r3f) == null ? void 0 : (_instance$__r3f3$root = _instance$__r3f3.root) == null ? void 0 : _instance$__r3f3$root.getState == null ? void 0 : _instance$__r3f3$root.getState();
-    if (state && state.internal.frames === 0) state.invalidate();
-  }
-
-  function updateInstance(instance) {
-    instance.onUpdate == null ? void 0 : instance.onUpdate(instance);
-  }
-
-  function createInstance(type, {
-    args = [],
-    ...props
-  }, root, hostContext, internalInstanceHandle) {
-    let name = `${type[0].toUpperCase()}${type.slice(1)}`;
-    let instance; // https://github.com/facebook/react/issues/17147
-    // Portals do not give us a root, they are themselves treated as a root by the reconciler
-    // In order to figure out the actual root we have to climb through fiber internals :(
-
-    if (!isStore(root) && internalInstanceHandle) {
-      const fn = node => {
-        if (!node.return) return node.stateNode && node.stateNode.containerInfo;else return fn(node.return);
-      };
-
-      root = fn(internalInstanceHandle);
-    } // Assert that by now we have a valid root
-
-
-    if (!root || !isStore(root)) throw `No valid root for ${name}!`;
-
-    if (type === 'primitive') {
-      if (props.object === undefined) throw `Primitives without 'object' are invalid!`;
-      const object = props.object;
-      instance = prepare(object, {
-        root,
-        instance: true
-      });
-    } else {
-      const target = catalogue[name] || three_module[name];
-      if (!target) throw `${name} is not part of the THREE namespace! Did you forget to extend? See: https://github.com/pmndrs/react-three-fiber/blob/master/markdown/api.md#using-3rd-party-objects-declaratively`;
-      const isArgsArr = is.arr(args); // Instanciate new object, link it to the root
-
-      instance = prepare(isArgsArr ? new target(...args) : new target(args), {
-        root,
-        // append memoized props with args so it's not forgotten
-        memoizedProps: {
-          args: isArgsArr && args.length === 0 ? null : args
-        }
-      });
-    } // Auto-attach geometries and materials
-
-
-    if (name.endsWith('Geometry')) {
-      props = {
-        attach: 'geometry',
-        ...props
-      };
-    } else if (name.endsWith('Material')) {
-      props = {
-        attach: 'material',
-        ...props
-      };
-    } // It should NOT call onUpdate on object instanciation, because it hasn't been added to the
-    // view yet. If the callback relies on references for instance, they won't be ready yet, this is
-    // why it passes "true" here
-
-
-    applyProps(instance, props, {});
-    return instance;
-  }
-
-  function appendChild(parentInstance, child) {
-    let addedAsChild = false;
-
-    if (child) {
-      // The attach attribute implies that the object attaches itself on the parent
-      if (child.attachArray) {
-        if (!is.arr(parentInstance[child.attachArray])) parentInstance[child.attachArray] = [];
-        parentInstance[child.attachArray].push(child);
-      } else if (child.attachObject) {
-        if (!is.obj(parentInstance[child.attachObject[0]])) parentInstance[child.attachObject[0]] = {};
-        parentInstance[child.attachObject[0]][child.attachObject[1]] = child;
-      } else if (child.attach && !is.fun(child.attach)) {
-        parentInstance[child.attach] = child;
-      } else if (child.isObject3D) {
-        // add in the usual parent-child way
-        parentInstance.add(child);
-        addedAsChild = true;
-      }
-
-      if (!addedAsChild) {
-        // This is for anything that used attach, and for non-Object3Ds that don't get attached to props;
-        // that is, anything that's a child in React but not a child in the scenegraph.
-        parentInstance.__r3f.objects.push(child);
-
-        child.parent = parentInstance;
-      }
-
-      updateInstance(child);
-      invalidateInstance(child);
-    }
-  }
-
-  function insertBefore(parentInstance, child, beforeChild) {
-    let added = false;
-
-    if (child) {
-      if (child.attachArray) {
-        const array = parentInstance[child.attachArray];
-        if (!is.arr(array)) parentInstance[child.attachArray] = [];
-        array.splice(array.indexOf(beforeChild), 0, child);
-      } else if (child.attachObject || child.attach && !is.fun(child.attach)) {
-        // attach and attachObject don't have an order anyway, so just append
-        added = true;
-        return appendChild(parentInstance, child);
-      } else if (child.isObject3D) {
-        child.parent = parentInstance;
-        child.dispatchEvent({
-          type: 'added'
-        });
-        const restSiblings = parentInstance.children.filter(sibling => sibling !== child);
-        const index = restSiblings.indexOf(beforeChild);
-        parentInstance.children = [...restSiblings.slice(0, index), child, ...restSiblings.slice(index)];
-        added = true;
-      }
-
-      if (!added) {
-        parentInstance.__r3f.objects.push(child);
-
-        child.parent = parentInstance;
-      }
-
-      updateInstance(child);
-      invalidateInstance(child);
-    }
-  }
-
-  function removeRecursive(array, parent, dispose = false) {
-    if (array) [...array].forEach(child => removeChild(parent, child, dispose));
-  }
-
-  function removeChild(parentInstance, child, dispose) {
-    if (child) {
-      var _child$__r3f2;
-
-      if (parentInstance.__r3f.objects) {
-        const oldLength = parentInstance.__r3f.objects.length;
-        parentInstance.__r3f.objects = parentInstance.__r3f.objects.filter(x => x !== child);
-        const newLength = parentInstance.__r3f.objects.length; // was it in the list?
-
-        if (newLength < oldLength) {
-          // we had also set this, so we must clear it now
-          child.parent = null;
-        }
-      } // Remove attachment
-
-
-      if (child.attachArray) {
-        parentInstance[child.attachArray] = parentInstance[child.attachArray].filter(x => x !== child);
-      } else if (child.attachObject) {
-        delete parentInstance[child.attachObject[0]][child.attachObject[1]];
-      } else if (child.attach && !is.fun(child.attach)) {
-        parentInstance[child.attach] = null;
-      } else if (child.isObject3D) {
-        var _child$__r3f;
-
-        parentInstance.remove(child); // Remove interactivity
-
-        if ((_child$__r3f = child.__r3f) != null && _child$__r3f.root) {
-          removeInteractivity(child.__r3f.root, child);
-        }
-      } // Allow objects to bail out of recursive dispose alltogether by passing dispose={null}
-      // Never dispose of primitives because their state may be kept outside of React!
-      // In order for an object to be able to dispose it has to have
-      //   - a dispose method,
-      //   - it cannot be an <instance object={...} />
-      //   - it cannot be a THREE.Scene, because three has broken it's own api
-      //
-      // Since disposal is recursive, we can check the optional dispose arg, which will be undefined
-      // when the reconciler calls it, but then carry our own check recursively
-
-
-      const isInstance = (_child$__r3f2 = child.__r3f) == null ? void 0 : _child$__r3f2.instance;
-      const shouldDispose = dispose === undefined ? child.dispose !== null && !isInstance : dispose; // Remove nested child objects. Primitives should not have objects and children that are
-      // attached to them declaratively ...
-
-      if (!isInstance) {
-        var _child$__r3f3;
-
-        removeRecursive((_child$__r3f3 = child.__r3f) == null ? void 0 : _child$__r3f3.objects, child, shouldDispose);
-        removeRecursive(child.children, child, shouldDispose);
-      } // Remove references
-
-
-      if (child.__r3f) {
-        delete child.__r3f.root;
-        delete child.__r3f.objects;
-        delete child.__r3f.handlers;
-        delete child.__r3f.memoizedProps;
-        if (!isInstance) delete child.__r3f;
-      } // Dispose item whenever the reconciler feels like it
-
-
-      if (shouldDispose && child.dispose && child.type !== 'Scene') {
-        (0,scheduler.unstable_runWithPriority)(scheduler.unstable_IdlePriority, () => child.dispose());
-      }
-
-      invalidateInstance(parentInstance);
-    }
-  }
-
-  function switchInstance(instance, type, newProps, fiber) {
-    const parent = instance.parent;
-    if (!parent) return;
-    const newInstance = createInstance(type, newProps, instance.__r3f.root); // https://github.com/pmndrs/react-three-fiber/issues/1348
-    // When args change the instance has to be re-constructed, which then
-    // forces r3f to re-parent the children and non-scene objects
-
-    if (instance.children) {
-      instance.children.forEach(child => appendChild(newInstance, child));
-      instance.children = [];
-    }
-
-    instance.__r3f.objects.forEach(child => appendChild(newInstance, child));
-
-    instance.__r3f.objects = [];
-    removeChild(parent, instance);
-    appendChild(parent, newInstance) // This evil hack switches the react-internal fiber node
-    // https://github.com/facebook/react/issues/14983
-    // https://github.com/facebook/react/pull/15021
-    ;
-    [fiber, fiber.alternate].forEach(fiber => {
-      if (fiber !== null) {
-        fiber.stateNode = newInstance;
-
-        if (fiber.ref) {
-          if (typeof fiber.ref === 'function') fiber.ref(newInstance);else fiber.ref.current = newInstance;
-        }
-      }
-    });
-  }
-
-  const reconciler = react_reconciler_default()({
-    now: scheduler.unstable_now,
-    createInstance,
-    removeChild,
-    appendChild,
-    appendInitialChild: appendChild,
-    insertBefore,
-    warnsIfNotActing: true,
-    supportsMutation: true,
-    isPrimaryRenderer: false,
-    // @ts-ignore
-    scheduleTimeout: is.fun(setTimeout) ? setTimeout : undefined,
-    // @ts-ignore
-    cancelTimeout: is.fun(clearTimeout) ? clearTimeout : undefined,
-    // @ts-ignore
-    setTimeout: is.fun(setTimeout) ? setTimeout : undefined,
-    // @ts-ignore
-    clearTimeout: is.fun(clearTimeout) ? clearTimeout : undefined,
-    noTimeout: -1,
-    appendChildToContainer: (parentInstance, child) => {
-      const {
-        container,
-        root
-      } = getContainer(parentInstance, child); // Link current root to the default scene
-
-      container.__r3f.root = root;
-      appendChild(container, child);
-    },
-    removeChildFromContainer: (parentInstance, child) => {
-      const {
-        container
-      } = getContainer(parentInstance, child);
-      removeChild(container, child);
-    },
-    insertInContainerBefore: (parentInstance, child, beforeChild) => {
-      const {
-        container
-      } = getContainer(parentInstance, child);
-      insertBefore(container, child, beforeChild);
-    },
-
-    commitUpdate(instance, updatePayload, type, oldProps, newProps, fiber) {
-      if (instance.__r3f.instance && newProps.object && newProps.object !== instance) {
-        // <instance object={...} /> where the object reference has changed
-        switchInstance(instance, type, newProps, fiber);
-      } else {
-        // This is a data object, let's extract critical information about it
-        const {
-          args: argsNew = [],
-          ...restNew
-        } = newProps;
-        const {
-          args: argsOld = [],
-          ...restOld
-        } = oldProps; // If it has new props or arguments, then it needs to be re-instanciated
-
-        const hasNewArgs = argsNew.some((value, index) => is.obj(value) ? Object.entries(value).some(([key, val]) => val !== argsOld[index][key]) : value !== argsOld[index]);
-
-        if (hasNewArgs) {
-          // Next we create a new instance and append it again
-          switchInstance(instance, type, newProps, fiber);
-        } else {
-          // Otherwise just overwrite props
-          applyProps(instance, restNew, restOld, true);
-        }
-      }
-    },
-
-    hideInstance(instance) {
-      if (instance.isObject3D) {
-        instance.visible = false;
-        invalidateInstance(instance);
-      }
-    },
-
-    unhideInstance(instance, props) {
-      if (instance.isObject3D && props.visible == null || props.visible) {
-        instance.visible = true;
-        invalidateInstance(instance);
-      }
-    },
-
-    hideTextInstance() {
-      throw new Error('Text is not allowed in the R3F tree.');
-    },
-
-    getPublicInstance(instance) {
-      // TODO: might fix switchInstance (?)
-      return instance;
-    },
-
-    getRootHostContext(rootContainer) {
-      return EMPTY;
-    },
-
-    getChildHostContext(parentHostContext) {
-      return EMPTY;
-    },
-
-    createTextInstance() {},
-
-    finalizeInitialChildren(instance) {
-      // https://github.com/facebook/react/issues/20271
-      // Returning true will trigger commitMount
-      return !!instance.__r3f.handlers;
-    },
-
-    commitMount(instance)
-    /*, type, props*/
-    {
-      // https://github.com/facebook/react/issues/20271
-      // This will make sure events are only added once to the central container
-      if (instance.raycast && instance.__r3f.handlers) instance.__r3f.root.getState().internal.interaction.push(instance);
-    },
-
-    prepareUpdate() {
-      return EMPTY;
-    },
-
-    shouldDeprioritizeSubtree() {
-      return false;
-    },
-
-    prepareForCommit() {
-      return null;
-    },
-
-    preparePortalMount(...args) {// noop
-    },
-
-    resetAfterCommit() {// noop
-    },
-
-    shouldSetTextContent() {
-      return false;
-    },
-
-    clearContainer() {
-      return false;
-    }
-
-  });
-  return {
-    reconciler,
-    applyProps
-  };
-}
-
-const isRenderer = def => def && !!def.render;
-const isOrthographicCamera = def => def && def.isOrthographicCamera;
-const context = /*#__PURE__*/react.createContext(null);
-
-const createStore = (applyProps, invalidate, advance, props) => {
-  const {
-    gl,
-    size,
-    shadows = false,
-    linear = false,
-    flat = false,
-    vr = false,
-    orthographic = false,
-    frameloop = 'always',
-    dpr = 1,
-    performance,
-    clock = new three_module.Clock(),
-    raycaster: raycastOptions,
-    camera: cameraOptions,
-    onPointerMissed
-  } = props; // Set shadowmap
-
-  if (shadows) {
-    gl.shadowMap.enabled = true;
-    if (typeof shadows === 'object') Object.assign(gl.shadowMap, shadows);else gl.shadowMap.type = three_module.PCFSoftShadowMap;
-  } // Set color management
-
-
-  if (!linear) {
-    if (!flat) gl.toneMapping = three_module.ACESFilmicToneMapping;
-    gl.outputEncoding = three_module.sRGBEncoding;
-  } // clock.elapsedTime is updated using advance(timestamp)
-
-
-  if (frameloop === 'never') {
-    clock.stop();
-    clock.elapsedTime = 0;
-  }
-
-  const rootState = (0,esm/* default */.Z)((set, get) => {
-    // Create custom raycaster
-    const raycaster = new three_module.Raycaster();
-    const {
-      params,
-      ...options
-    } = raycastOptions || {};
-    applyProps(raycaster, {
-      enabled: true,
-      ...options,
-      params: { ...raycaster.params,
-        ...params
-      }
-    }, {}); // Create default camera
-
-    const isCamera = cameraOptions instanceof three_module.Camera;
-    const camera = isCamera ? cameraOptions : orthographic ? new three_module.OrthographicCamera(0, 0, 0, 0, 0.1, 1000) : new three_module.PerspectiveCamera(75, 0, 0.1, 1000);
-
-    if (!isCamera) {
-      camera.position.z = 5;
-      if (cameraOptions) applyProps(camera, cameraOptions, {}); // Always look at center by default
-
-      camera.lookAt(0, 0, 0);
-    }
-
-    function setDpr(dpr) {
-      return Array.isArray(dpr) ? Math.min(Math.max(dpr[0], window.devicePixelRatio), dpr[1]) : dpr;
-    }
-
-    const initialDpr = setDpr(dpr);
-    const position = new three_module.Vector3();
-    const defaultTarget = new three_module.Vector3();
-
-    function getCurrentViewport(camera = get().camera, target = defaultTarget, size = get().size) {
-      const {
-        width,
-        height
-      } = size;
-      const aspect = width / height;
-      const distance = camera.getWorldPosition(position).distanceTo(target);
-
-      if (isOrthographicCamera(camera)) {
-        return {
-          width: width / camera.zoom,
-          height: height / camera.zoom,
-          factor: 1,
-          distance,
-          aspect
-        };
-      } else {
-        const fov = camera.fov * Math.PI / 180; // convert vertical fov to radians
-
-        const h = 2 * Math.tan(fov / 2) * distance; // visible height
-
-        const w = h * (width / height);
-        return {
-          width: w,
-          height: h,
-          factor: width / w,
-          distance,
-          aspect
-        };
-      }
-    }
-
-    let performanceTimeout = undefined;
-
-    const setPerformanceCurrent = current => set(state => ({
-      performance: { ...state.performance,
-        current
-      }
-    }));
-
-    return {
-      gl,
-      set,
-      get,
-      invalidate: () => invalidate(get()),
-      advance: (timestamp, runGlobalEffects) => advance(timestamp, runGlobalEffects, get()),
-      linear,
-      flat,
-      scene: prepare(new three_module.Scene()),
-      camera,
-      raycaster,
-      clock,
-      mouse: new three_module.Vector2(),
-      vr,
-      frameloop,
-      onPointerMissed,
-      performance: {
-        current: 1,
-        min: 0.5,
-        max: 1,
-        debounce: 200,
-        ...performance,
-        regress: () => {
-          const state = get(); // Clear timeout
-
-          if (performanceTimeout) clearTimeout(performanceTimeout); // Set lower bound performance
-
-          if (state.performance.current !== state.performance.min) setPerformanceCurrent(state.performance.min); // Go back to upper bound performance after a while unless something regresses meanwhile
-
-          performanceTimeout = setTimeout(() => setPerformanceCurrent(get().performance.max), state.performance.debounce);
-        }
-      },
-      size: {
-        width: 0,
-        height: 0
-      },
-      viewport: {
-        initialDpr,
-        dpr: initialDpr,
-        width: 0,
-        height: 0,
-        aspect: 0,
-        distance: 0,
-        factor: 0,
-        getCurrentViewport
-      },
-      setSize: (width, height) => {
-        const size = {
-          width,
-          height
-        };
-        set(state => ({
-          size,
-          viewport: { ...state.viewport,
-            ...getCurrentViewport(camera, defaultTarget, size)
-          }
-        }));
-      },
-      setDpr: dpr => set(state => ({
-        viewport: { ...state.viewport,
-          dpr: setDpr(dpr)
-        }
-      })),
-      events: {
-        connected: false
-      },
-      internal: {
-        active: false,
-        priority: 0,
-        frames: 0,
-        lastProps: props,
-        interaction: [],
-        hovered: new Map(),
-        subscribers: [],
-        initialClick: [0, 0],
-        initialHits: [],
-        capturedMap: new Map(),
-        subscribe: (ref, priority = 0) => {
-          set(({
-            internal
-          }) => ({
-            internal: { ...internal,
-              // If this subscription was given a priority, it takes rendering into its own hands
-              // For that reason we switch off automatic rendering and increase the manual flag
-              // As long as this flag is positive (there could be multiple render subscription)
-              // ..there can be no internal rendering at all
-              priority: internal.priority + (priority ? 1 : 0),
-              // Register subscriber and sort layers from lowest to highest, meaning,
-              // highest priority renders last (on top of the other frames)
-              subscribers: [...internal.subscribers, {
-                ref,
-                priority
-              }].sort((a, b) => a.priority - b.priority)
-            }
-          }));
-          return () => {
-            set(({
-              internal
-            }) => ({
-              internal: { ...internal,
-                // Decrease manual flag if this subscription had a priority
-                priority: internal.priority - (priority ? 1 : 0),
-                // Remove subscriber from list
-                subscribers: internal.subscribers.filter(s => s.ref !== ref)
-              }
-            }));
-          };
-        }
-      }
-    };
-  }); // Resize camera and renderer on changes to size and pixelratio
-
-  rootState.subscribe(() => {
-    const {
-      camera,
-      size,
-      viewport,
-      internal
-    } = rootState.getState(); // https://github.com/pmndrs/react-three-fiber/issues/92
-    // Do not mess with the camera if it belongs to the user
-
-    if (!(internal.lastProps.camera instanceof three_module.Camera)) {
-      if (isOrthographicCamera(camera)) {
-        camera.left = size.width / -2;
-        camera.right = size.width / 2;
-        camera.top = size.height / 2;
-        camera.bottom = size.height / -2;
-      } else {
-        camera.aspect = size.width / size.height;
-      }
-
-      camera.updateProjectionMatrix(); // https://github.com/pmndrs/react-three-fiber/issues/178
-      // Update matrix world since the renderer is a frame late
-
-      camera.updateMatrixWorld();
-    } // Update renderer
-
-
-    gl.setPixelRatio(viewport.dpr);
-    gl.setSize(size.width, size.height);
-  }, state => [state.viewport.dpr, state.size], shallow/* default */.Z);
-  const state = rootState.getState(); // Update size
-
-  if (size) state.setSize(size.width, size.height); // Invalidate on any change
-
-  rootState.subscribe(state => invalidate(state)); // Return root state
-
-  return rootState;
-};
-
-function createSubs(callback, subs) {
-  const index = subs.length;
-  subs.push(callback);
-  return () => void subs.splice(index, 1);
-}
-
-let i;
-let globalEffects = [];
-let globalAfterEffects = [];
-let globalTailEffects = [];
-const addEffect = callback => createSubs(callback, globalEffects);
-const addAfterEffect = callback => createSubs(callback, globalAfterEffects);
-const addTail = callback => createSubs(callback, globalTailEffects);
-
-function run(effects, timestamp) {
-  for (i = 0; i < effects.length; i++) effects[i](timestamp);
-}
-
-function render$1(timestamp, state) {
-  // Run local effects
-  let delta = state.clock.getDelta(); // In frameloop='never' mode, clock times are updated using the provided timestamp
-
-  if (state.frameloop === 'never' && typeof timestamp === 'number') {
-    delta = timestamp - state.clock.elapsedTime;
-    state.clock.oldTime = state.clock.elapsedTime;
-    state.clock.elapsedTime = timestamp;
-  } // Call subscribers (useFrame)
-
-
-  for (i = 0; i < state.internal.subscribers.length; i++) state.internal.subscribers[i].ref.current(state, delta); // Render content
-
-
-  if (!state.internal.priority && state.gl.render) state.gl.render(state.scene, state.camera); // Decrease frame count
-
-  state.internal.frames = Math.max(0, state.internal.frames - 1);
-  return state.frameloop === 'always' ? 1 : state.internal.frames;
-}
-
-function createLoop(roots) {
-  let running = false;
-  let repeat;
-
-  function loop(timestamp) {
-    running = true;
-    repeat = 0; // Run effects
-
-    run(globalEffects, timestamp); // Render all roots
-
-    roots.forEach(root => {
-      const state = root.store.getState(); // If the frameloop is invalidated, do not run another frame
-
-      if (state.internal.active && (state.frameloop === 'always' || state.internal.frames > 0)) repeat += render$1(timestamp, state);
-    }); // Run after-effects
-
-    run(globalAfterEffects, timestamp); // Keep on looping if anything invalidates the frameloop
-
-    if (repeat > 0) return requestAnimationFrame(loop); // Tail call effects, they are called when rendering stops
-    else run(globalTailEffects, timestamp); // Flag end of operation
-
-    running = false;
-  }
-
-  function invalidate(state) {
-    if (!state) return roots.forEach(root => invalidate(root.store.getState()));
-    if (state.vr || !state.internal.active || state.frameloop === 'never') return; // Increase frames, do not go higher than 60
-
-    state.internal.frames = Math.min(60, state.internal.frames + 1); // If the render-loop isn't active, start it
-
-    if (!running) {
-      running = true;
-      requestAnimationFrame(loop);
-    }
-  }
-
-  function advance(timestamp, runGlobalEffects = true, state) {
-    if (runGlobalEffects) run(globalEffects, timestamp);
-    if (!state) roots.forEach(root => render$1(timestamp, root.store.getState()));else render$1(timestamp, state);
-    if (runGlobalEffects) run(globalAfterEffects, timestamp);
-  }
-
-  return {
-    loop,
-    invalidate,
-    advance
-  };
-}
-
-function createPointerEvents(store) {
-  const {
-    handlePointer
-  } = createEvents(store);
-  const names = {
-    onClick: ['click', false],
-    onContextMenu: ['contextmenu', false],
-    onDoubleClick: ['dblclick', false],
-    onWheel: ['wheel', true],
-    onPointerDown: ['pointerdown', true],
-    onPointerUp: ['pointerup', true],
-    onPointerLeave: ['pointerleave', true],
-    onPointerMove: ['pointermove', true],
-    onPointerCancel: ['pointercancel', true],
-    onLostPointerCapture: ['lostpointercapture', true]
-  };
-  return {
-    connected: false,
-    handlers: Object.keys(names).reduce((acc, key) => ({ ...acc,
-      [key]: handlePointer(key)
-    }), {}),
-    connect: target => {
-      var _events$handlers;
-
-      const {
-        set,
-        events
-      } = store.getState();
-      events.disconnect == null ? void 0 : events.disconnect();
-      set(state => ({
-        events: { ...state.events,
-          connected: target
-        }
-      }));
-      Object.entries((_events$handlers = events == null ? void 0 : events.handlers) != null ? _events$handlers : []).forEach(([name, event]) => {
-        const [eventName, passive] = names[name];
-        target.addEventListener(eventName, event, {
-          passive
-        });
-      });
-    },
-    disconnect: () => {
-      const {
-        set,
-        events
-      } = store.getState();
-
-      if (events.connected) {
-        var _events$handlers2;
-
-        Object.entries((_events$handlers2 = events.handlers) != null ? _events$handlers2 : []).forEach(([name, event]) => {
-          if (events && events.connected instanceof HTMLElement) {
-            const [eventName] = names[name];
-            events.connected.removeEventListener(eventName, event);
-          }
-        });
-        set(state => ({
-          events: { ...state.events,
-            connected: false
-          }
-        }));
-      }
-    }
-  };
-}
-
-// React currently throws a warning when using useLayoutEffect on the server.
-// To get around it, we can conditionally useEffect on the server (no-op) and
-// useLayoutEffect in the browser.
-const useIsomorphicLayoutEffect = typeof window !== 'undefined' ? react.useLayoutEffect : react.useEffect;
-
-function Block({
-  set
-}) {
-  useIsomorphicLayoutEffect(() => {
-    set(new Promise(() => null));
-    return () => set(false);
-  }, []);
-  return null;
-}
-
-class ErrorBoundary extends react.Component {
-  constructor(...args) {
-    super(...args);
-    this.state = {
-      error: false
-    };
-  }
-
-  componentDidCatch(error) {
-    this.props.set(error);
-  }
-
-  render() {
-    return this.state.error ? null : this.props.children;
-  }
-
-}
-
-ErrorBoundary.getDerivedStateFromError = () => ({
-  error: true
-});
-
-function Canvas({
-  children,
-  fallback,
-  tabIndex,
-  resize,
-  id,
-  style,
-  className,
-  events,
-  ...props
-}) {
-  const [ref, size] = useMeasure({
-    scroll: true,
-    debounce: {
-      scroll: 50,
-      resize: 0
-    },
-    ...resize
-  });
-  const canvas = react.useRef(null);
-  const [block, setBlock] = react.useState(false);
-  const [error, setError] = react.useState(false); // Suspend this component if block is a promise (2nd run)
-
-  if (block) throw block; // Throw exception outwards if anything within canvas throws
-
-  if (error) throw error; // Execute JSX in the reconciler as a layout-effect
-
-  useIsomorphicLayoutEffect(() => {
-    if (size.width > 0 && size.height > 0) {
-      render( /*#__PURE__*/react.createElement(ErrorBoundary, {
-        set: setError
-      }, /*#__PURE__*/react.createElement(react.Suspense, {
-        fallback: /*#__PURE__*/react.createElement(Block, {
-          set: setBlock
-        })
-      }, children)), canvas.current, { ...props,
-        size,
-        events: events || createPointerEvents
-      });
-    }
-  }, [size, children]);
-  useIsomorphicLayoutEffect(() => {
-    const container = canvas.current;
-    return () => unmountComponentAtNode(container);
-  }, []);
-  return /*#__PURE__*/react.createElement("div", {
-    ref: ref,
-    id: id,
-    className: className,
-    tabIndex: tabIndex,
-    style: {
-      position: 'relative',
-      width: '100%',
-      height: '100%',
-      overflow: 'hidden',
-      ...style
-    }
-  }, /*#__PURE__*/react.createElement("canvas", {
-    ref: canvas,
-    style: {
-      display: 'block'
-    }
-  }, fallback));
-}
-
-function useThree(selector = state => state, equalityFn) {
-  const useStore = react.useContext(context);
-  if (!useStore) throw `R3F hooks can only be used within the Canvas component!`;
-  return useStore(selector, equalityFn);
-}
-function useFrame(callback, renderPriority = 0) {
-  const {
-    subscribe
-  } = react.useContext(context).getState().internal; // Update ref
-
-  const ref = react.useRef(callback);
-  react.useLayoutEffect(() => void (ref.current = callback), [callback]); // Subscribe/unsub
-
-  react.useLayoutEffect(() => {
-    const unsubscribe = subscribe(ref, renderPriority);
-    return () => unsubscribe();
-  }, [renderPriority, subscribe]);
-  return null;
-}
-
-function buildGraph(object) {
-  const data = {
-    nodes: {},
-    materials: {}
-  };
-
-  if (object) {
-    object.traverse(obj => {
-      if (obj.name) {
-        data.nodes[obj.name] = obj;
-      }
-
-      if (obj.material && !data.materials[obj.material.name]) {
-        data.materials[obj.material.name] = obj.material;
-      }
-    });
-  }
-
-  return data;
-}
-
-function useGraph(object) {
-  return react.useMemo(() => buildGraph(object), [object]);
-}
-
-function loadingFn(extensions, onProgress) {
-  return function (Proto, ...input) {
-    // Construct new loader and run extensions
-    const loader = new Proto();
-    if (extensions) extensions(loader); // Go through the urls and load them
-
-    return Promise.all(input.map(input => new Promise((res, reject) => loader.load(input, data => {
-      if (data.scene) Object.assign(data, buildGraph(data.scene));
-      res(data);
-    }, onProgress, error => reject(`Could not load ${input}: ${error.message}`)))));
-  };
-}
-
-function useLoader(Proto, input, extensions, onProgress) {
-  // Use suspense to load async assets
-  const keys = Array.isArray(input) ? input : [input];
-  const results = useAsset(loadingFn(extensions, onProgress), Proto, ...keys); // Return the object/s
-
-  return Array.isArray(input) ? results : results[0];
-}
-
-useLoader.preload = function (Proto, input, extensions) {
-  const keys = Array.isArray(input) ? input : [input];
-  return useAsset.preload(loadingFn(extensions), Proto, ...keys);
-};
-
-const roots = new Map();
-const modes = ['legacy', 'blocking', 'concurrent'];
-const {
-  invalidate,
-  advance
-} = createLoop(roots);
-const {
-  reconciler,
-  applyProps
-} = createRenderer();
-
-const createRendererInstance = (gl, canvas) => isRenderer(gl) ? gl : new three_module.WebGLRenderer({
-  powerPreference: 'high-performance',
-  canvas: canvas,
-  antialias: true,
-  alpha: true,
-  ...gl
-});
-
-function render(element, canvas, {
-  gl,
-  size,
-  mode = modes[1],
-  events,
-  onCreated,
-  ...props
-} = {}) {
-  var _store;
-
-  // Allow size to take on container bounds initially
-  if (!size) {
-    var _canvas$parentElement, _canvas$parentElement2, _canvas$parentElement3, _canvas$parentElement4;
-
-    size = {
-      width: (_canvas$parentElement = (_canvas$parentElement2 = canvas.parentElement) == null ? void 0 : _canvas$parentElement2.clientWidth) != null ? _canvas$parentElement : 0,
-      height: (_canvas$parentElement3 = (_canvas$parentElement4 = canvas.parentElement) == null ? void 0 : _canvas$parentElement4.clientHeight) != null ? _canvas$parentElement3 : 0
-    };
-  }
-
-  let root = roots.get(canvas);
-  let fiber = root == null ? void 0 : root.fiber;
-  let store = root == null ? void 0 : root.store;
-  let state = (_store = store) == null ? void 0 : _store.getState();
-
-  if (fiber && state) {
-    const lastProps = state.internal.lastProps; // When a root was found, see if any fundamental props must be changed or exchanged
-    // Check pixelratio
-
-    if (props.dpr !== undefined && !is.equ(lastProps.dpr, props.dpr)) state.setDpr(props.dpr); // Check size
-
-    if (size !== undefined && !is.equ(lastProps.size, size)) state.setSize(size.width, size.height); // For some props we want to reset the entire root
-    // Changes to the color-space
-
-    const linearChanged = props.linear !== lastProps.linear;
-
-    if (linearChanged) {
-      unmountComponentAtNode(canvas);
-      fiber = undefined;
-    }
-  }
-
-  if (!fiber) {
-    // If no root has been found, make one
-    // Create gl
-    const glRenderer = createRendererInstance(gl, canvas); // Enable VR if requested
-
-    if (props.vr) {
-      glRenderer.xr.enabled = true;
-      glRenderer.setAnimationLoop(timestamp => advance(timestamp, true));
-    } // Create store
-
-
-    store = createStore(applyProps, invalidate, advance, {
-      gl: glRenderer,
-      size,
-      ...props
-    });
-    const state = store.getState();
-    state.get; // Create renderer
-
-    fiber = reconciler.createContainer(store, modes.indexOf(mode), false, null); // Map it
-
-    roots.set(canvas, {
-      fiber,
-      store
-    }); // Store events internally
-
-    if (events) state.set({
-      events: events(store)
-    });
-  }
-
-  if (store && fiber) {
-    reconciler.updateContainer( /*#__PURE__*/react.createElement(Provider, {
-      store: store,
-      element: element,
-      onCreated: onCreated,
-      target: canvas
-    }), fiber, null, () => undefined);
-    return store;
-  } else {
-    throw 'Error creating root!';
-  }
-}
-
-function Provider({
-  store,
-  element,
-  onCreated,
-  target
-}) {
-  react.useEffect(() => {
-    const state = store.getState(); // Flag the canvas active, rendering will now begin
-
-    state.set(state => ({
-      internal: { ...state.internal,
-        active: true
-      }
-    })); // Connect events
-
-    state.events.connect == null ? void 0 : state.events.connect(target); // Notifiy that init is completed, the scene graph exists, but nothing has yet rendered
-
-    if (onCreated) onCreated(state);
-  }, []);
-  return /*#__PURE__*/react.createElement(context.Provider, {
-    value: store
-  }, element);
-}
-
-function unmountComponentAtNode(canvas, callback) {
-  const root = roots.get(canvas);
-  const fiber = root == null ? void 0 : root.fiber;
-
-  if (fiber) {
-    const state = root == null ? void 0 : root.store.getState();
-    if (state) state.internal.active = false;
-    reconciler.updateContainer(null, fiber, null, () => {
-      if (state) {
-        setTimeout(() => {
-          var _state$gl, _state$gl$renderLists, _state$gl2;
-
-          state.events.disconnect == null ? void 0 : state.events.disconnect();
-          (_state$gl = state.gl) == null ? void 0 : (_state$gl$renderLists = _state$gl.renderLists) == null ? void 0 : _state$gl$renderLists.dispose == null ? void 0 : _state$gl$renderLists.dispose();
-          (_state$gl2 = state.gl) == null ? void 0 : _state$gl2.forceContextLoss == null ? void 0 : _state$gl2.forceContextLoss();
-          dispose(state);
-          roots.delete(canvas);
-          if (callback) callback(canvas);
-        }, 500);
-      }
-    });
-  }
-}
-
-function dispose(obj) {
-  if (obj.dispose && obj.type !== 'Scene') obj.dispose();
-
-  for (const p in obj) {
-    var _dispose, _ref;
-    (_dispose = (_ref = p).dispose) == null ? void 0 : _dispose.call(_ref);
-    delete obj[p];
-  }
-}
-
-const act = reconciler.act;
-const hasSymbol = is.fun(Symbol) && Symbol.for;
-const REACT_PORTAL_TYPE = hasSymbol ? Symbol.for('react.portal') : 0xeaca;
-
-function createPortal(children, container, implementation, key = null) {
-  return {
-    $$typeof: REACT_PORTAL_TYPE,
-    key: key == null ? null : '' + key,
-    children,
-    containerInfo: prepare(container),
-    implementation
-  };
-}
-
-reconciler.injectIntoDevTools({
-  bundleType:  true ? 0 : 0,
-  rendererPackageName: '@react-three/fiber',
-  version: '17.0.2'
-});
-
-
-
-
-/***/ }),
-
-/***/ 19044:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgAdd = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 18,
-    height: 18,
-    viewBox: "0 0 18 18",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    stroke: "#fff",
-    d: "M9 17.5V.5M.5 9h17"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgAdd);
-
-/***/ }),
-
-/***/ 80255:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgArrowLeftCircle = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 20,
-    height: 20,
-    viewBox: "0 0 20 20",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M11.764 5.294 7.06 10l4.705 4.706",
-    stroke: "#000",
-    strokeWidth: 2,
-    strokeLinecap: "round",
-    strokeLinejoin: "round"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgArrowLeftCircle);
-
-/***/ }),
-
-/***/ 67146:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgArrowLeft = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 14,
-    height: 14,
-    viewBox: "0 0 14 14",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M11.667 6.417h-7.1l3.261-3.261L7 2.333 2.333 7 7 11.667l.823-.823-3.255-3.26h7.099V6.417Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgArrowLeft);
-
-/***/ }),
-
-/***/ 68425:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _rect, _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgArrowRightCircle = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 20,
-    height: 20,
-    viewBox: "0 0 20 20",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _rect || (_rect = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("rect", {
-    width: 20,
-    height: 20,
-    rx: 10,
-    fill: "#000"
-  })), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "m9 8 2 2-2 2",
-    stroke: "#fff",
-    strokeWidth: 1.2,
-    strokeLinecap: "round",
-    strokeLinejoin: "round"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgArrowRightCircle);
-
-/***/ }),
-
-/***/ 88121:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgArrowRight = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 14,
-    height: 14,
-    viewBox: "0 0 14 14",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "m7 2.333-.823.823 3.255 3.26H2.333v1.167h7.1l-3.256 3.261.823.823L11.667 7 7 2.333Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgArrowRight);
-
-/***/ }),
-
-/***/ 62082:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path, _rect;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgAvatar = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 40,
-    height: 40,
-    viewBox: "0 0 40 40",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M20 20a3.21 3.21 0 0 1-2.354-.98 3.21 3.21 0 0 1-.98-2.353c0-.917.327-1.702.98-2.355A3.21 3.21 0 0 1 20 13.333a3.21 3.21 0 0 1 2.354.98 3.21 3.21 0 0 1 .98 2.354 3.21 3.21 0 0 1-.98 2.354A3.21 3.21 0 0 1 20 20Zm-6.666 6.667v-2.334c0-.472.121-.906.364-1.302.244-.396.567-.698.969-.906.86-.43 1.736-.754 2.625-.97A11.418 11.418 0 0 1 20 20.834c.917 0 1.82.108 2.709.324.888.215 1.763.538 2.625.968.402.208.725.51.969.907.243.396.364.83.364 1.301v2.334H13.333ZM15 25h10v-.667a.817.817 0 0 0-.417-.708 10.844 10.844 0 0 0-2.27-.843 9.652 9.652 0 0 0-4.625 0c-.764.187-1.521.468-2.271.843a.815.815 0 0 0-.303.292.776.776 0 0 0-.114.416V25Zm5-6.667c.459 0 .851-.163 1.178-.49.326-.326.49-.719.489-1.176 0-.459-.164-.851-.49-1.178A1.602 1.602 0 0 0 20 15c-.458 0-.85.164-1.177.49-.327.328-.49.72-.49 1.178 0 .458.164.85.49 1.177.327.327.72.49 1.177.49Z",
-    fill: "#fff"
-  })), _rect || (_rect = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("rect", {
-    x: 0.5,
-    y: 0.5,
-    width: 39,
-    height: 39,
-    rx: 19.5,
-    stroke: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgAvatar);
-
-/***/ }),
-
-/***/ 80469:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgClose = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 16,
-    height: 16,
-    viewBox: "0 0 16 16",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "m12.667 4.273-.94-.94L8.001 7.06 4.274 3.333l-.94.94L7.061 8l-3.727 3.727.94.94L8.001 8.94l3.726 3.727.94-.94L8.941 8l3.726-3.727Z",
-    fill: "#fff",
-    opacity: 0.6
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgClose);
-
-/***/ }),
-
-/***/ 94793:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgCopy = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 14,
-    height: 14,
-    viewBox: "0 0 14 14",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M2.917 12.833c-.321 0-.596-.114-.825-.343a1.121 1.121 0 0 1-.342-.823V3.5h1.167v8.167h6.416v1.166H2.917ZM5.25 10.5c-.32 0-.596-.114-.824-.343a1.121 1.121 0 0 1-.343-.824v-7c0-.32.115-.595.343-.824.229-.229.504-.343.824-.342h5.25c.32 0 .596.114.824.343.229.228.343.503.343.823v7c0 .321-.115.596-.343.825a1.121 1.121 0 0 1-.824.342H5.25Zm0-1.167h5.25v-7H5.25v7Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgCopy);
-
-/***/ }),
-
-/***/ 14607:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgDiscordWhite = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 40,
-    height: 40,
-    viewBox: "0 0 40 40",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M14.2 23.077c-1.733 0-3.147-1.575-3.147-3.504 0-1.926 1.379-3.5 3.149-3.5 1.75 0 3.183 1.574 3.148 3.5 0 1.929-1.398 3.504-3.15 3.504Zm11.623 0c-1.733 0-3.15-1.575-3.15-3.504 0-1.926 1.382-3.5 3.15-3.5 1.75 0 3.184 1.574 3.15 3.5 0 1.929-1.381 3.504-3.15 3.504ZM16.875 7.205l-.513-.938-1.057.175a27.255 27.255 0 0 0-6.93 2.133l-.38.177-.237.348C3.403 15.523 2.208 21.847 2.8 28.06l.065.677.55.4a28.181 28.181 0 0 0 8.463 4.238l1.317.403 1.855-4.528c3.183.787 6.717.788 9.898 0l1.845 4.53 1.317-.405a28.033 28.033 0 0 0 8.467-4.24l.545-.397.066-.67c.727-7.2-1.161-13.473-4.93-18.975l-.236-.345-.38-.173a27.625 27.625 0 0 0-6.924-2.133l-1.03-.172-.523.902c-.155.27-.301.544-.438.823a26.463 26.463 0 0 0-5.439 0c-.133-.266-.27-.53-.413-.79Zm-5.683 20.478c.328.19.675.377 1.016.547l-.748 1.827a25.041 25.041 0 0 1-5.713-2.964c-.375-5.231.688-10.508 4.273-15.95a24.256 24.256 0 0 1 4.707-1.521c.1.208.193.411.27.593l.455 1.072 1.153-.169a23.508 23.508 0 0 1 6.817 0l1.15.167.453-1.07c.078-.187.17-.39.267-.593a24.71 24.71 0 0 1 4.713 1.525c3.125 4.7 4.702 9.943 4.243 15.945a24.841 24.841 0 0 1-5.716 2.963l-.742-1.823c.343-.172.69-.359 1.022-.549.816-.47 1.695-1.056 2.255-1.616l-2.134-2.134c-.271.274-.871.7-1.628 1.137-.74.427-1.475.772-1.945.927-3.338 1.105-7.38 1.105-10.72 0-.468-.155-1.203-.5-1.943-.927-.757-.435-1.357-.863-1.63-1.137l-2.134 2.134c.562.56 1.442 1.146 2.259 1.616Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgDiscordWhite);
-
-/***/ }),
-
-/***/ 50437:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgDiscord = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 16,
-    height: 16,
-    viewBox: "0 0 16 16",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M13.258 3.553a11.321 11.321 0 0 0-2.846-.886.06.06 0 0 0-.047.02c-.12.22-.26.506-.353.726-1.06-.16-2.14-.16-3.2 0a6.682 6.682 0 0 0-.36-.726c-.007-.014-.027-.02-.047-.02-1 .173-1.953.473-2.846.886-.007 0-.014.007-.02.014C1.725 6.28 1.225 8.92 1.472 11.533c0 .014.007.027.02.034a11.58 11.58 0 0 0 3.493 1.766c.02.007.04 0 .047-.013.267-.367.507-.754.713-1.16.014-.027 0-.053-.026-.06a8.21 8.21 0 0 1-1.094-.52c-.026-.014-.026-.053-.006-.073.073-.054.146-.114.22-.167a.04.04 0 0 1 .046-.007c2.294 1.047 4.767 1.047 7.034 0a.04.04 0 0 1 .046.007c.074.06.147.113.22.173.027.02.027.06-.007.073a7.133 7.133 0 0 1-1.093.52c-.027.007-.033.04-.027.06.214.407.454.794.714 1.16.02.007.04.014.06.007 1.146-.353 2.3-.886 3.5-1.767a.037.037 0 0 0 .02-.033c.293-3.02-.487-5.64-2.067-7.966-.007-.007-.013-.014-.027-.014ZM6.092 9.94c-.687 0-1.26-.633-1.26-1.413s.56-1.414 1.26-1.414c.707 0 1.267.64 1.26 1.414 0 .78-.56 1.413-1.26 1.413Zm4.647 0c-.687 0-1.26-.633-1.26-1.413s.56-1.414 1.26-1.414c.706 0 1.266.64 1.26 1.414 0 .78-.554 1.413-1.26 1.413Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgDiscord);
-
-/***/ }),
-
-/***/ 23179:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgDiscourse = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    viewBox: "0 0 24 24",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title === undefined ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, "Discourse") : title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M12.103 0C18.666 0 24 5.485 24 11.997c0 6.51-5.33 11.99-11.9 11.99L0 24V11.79C0 5.28 5.532 0 12.103 0zm.116 4.563a7.395 7.395 0 0 0-6.337 3.57 7.247 7.247 0 0 0-.148 7.22L4.4 19.61l4.794-1.074a7.424 7.424 0 0 0 8.136-1.39 7.256 7.256 0 0 0 1.737-7.997 7.375 7.375 0 0 0-6.84-4.585h-.008z"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgDiscourse);
-
-/***/ }),
-
-/***/ 7744:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgDocument = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 16,
-    height: 16,
-    viewBox: "0 0 16 16",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M9.334 1.333H4c-.733 0-1.326.6-1.326 1.334l-.007 10.666c0 .734.593 1.334 1.327 1.334H12c.734 0 1.334-.6 1.334-1.334v-8l-4-4ZM4 13.333V2.667h4.667V6H12v7.333H4Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgDocument);
-
-/***/ }),
-
-/***/ 19818:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _circle;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgDot = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 20,
-    height: 20,
-    viewBox: "0 0 20 20",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _circle || (_circle = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("circle", {
-    cx: 10,
-    cy: 10,
-    r: 8.333,
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgDot);
-
-/***/ }),
-
-/***/ 38981:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgDownload = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 14,
-    height: 14,
-    viewBox: "0 0 14 14",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M7 9.333 4.083 6.417 4.9 5.57l1.517 1.517V2.333h1.166v4.755L9.1 5.57l.817.846L7 9.333Zm-3.5 2.334c-.32 0-.596-.115-.824-.343a1.121 1.121 0 0 1-.343-.824V8.75H3.5v1.75h7V8.75h1.167v1.75c0 .32-.115.596-.343.824a1.121 1.121 0 0 1-.824.343h-7Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgDownload);
-
-/***/ }),
-
-/***/ 28487:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgDropdown = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 12,
-    height: 12,
-    viewBox: "0 0 12 12",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "m2 4 4 4 4-4",
-    stroke: "#909091",
-    strokeWidth: 1.4,
-    strokeLinecap: "round",
-    strokeLinejoin: "round"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgDropdown);
-
-/***/ }),
-
-/***/ 94177:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgEdit = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 16,
-    height: 16,
-    viewBox: "0 0 16 16",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    fillRule: "evenodd",
-    clipRule: "evenodd",
-    d: "m12.707 2.393.9.9c.526.52.526 1.367 0 1.887L4.787 14H2v-2.787l6.933-6.94 1.887-1.88c.52-.52 1.367-.52 1.887 0ZM3.333 12.667l.94.04 6.547-6.554-.94-.94-6.547 6.547v.907Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgEdit);
-
-/***/ }),
-
-/***/ 96867:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgEmail = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 16,
-    height: 16,
-    viewBox: "0 0 16 16",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M14.667 2.667H1.34l-.007 10.667h13.334V2.667ZM13.333 12H2.667V5.334L8 8.667l5.333-3.333V12ZM8 7.334 2.667 4h10.666L8 7.334Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgEmail);
-
-/***/ }),
-
-/***/ 58611:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgExternalLink = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 16,
-    height: 16,
-    viewBox: "0 0 16 16",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    fillRule: "evenodd",
-    clipRule: "evenodd",
-    d: "M11.192 4H3.428V2.857h9.715v9.715H12V4.808l-8.167 8.168-.809-.808L11.192 4Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgExternalLink);
-
-/***/ }),
-
-/***/ 13042:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgFolder = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 20,
-    height: 20,
-    viewBox: "0 0 20 20",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M1.804 16.292a.836.836 0 0 0 .696.374H15a.832.832 0 0 0 .766-.505l2.5-5.833a.833.833 0 0 0-.766-1.162h-.833v-2.5C16.667 5.747 15.919 5 15 5H9.454l-2.13-1.667h-3.99c-.92 0-1.667.748-1.667 1.667v10.833h.006a.834.834 0 0 0 .131.46ZM15 6.666v2.5H5a.832.832 0 0 0-.766.505l-.9 2.103V6.666H15Z",
-    fill: "#000"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgFolder);
-
-/***/ }),
-
-/***/ 96367:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgFullscreenExit = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 14,
-    height: 14,
-    viewBox: "0 0 14 14",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M4.667 11.083v-1.75h-1.75V8.166h2.916v2.917H4.667Zm3.5 0V8.166h2.916v1.167h-1.75v1.75H8.167Zm-5.25-5.25V4.666h1.75v-1.75h1.166v2.917H2.917Zm5.25 0V2.916h1.166v1.75h1.75v1.167H8.167Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgFullscreenExit);
-
-/***/ }),
-
-/***/ 6907:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgFullscreen = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 14,
-    height: 14,
-    viewBox: "0 0 14 14",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M1.75 2.917V5.25h1.167V2.917H5.25V1.75H2.917A1.17 1.17 0 0 0 1.75 2.917ZM2.917 8.75H1.75v2.333a1.17 1.17 0 0 0 1.167 1.167H5.25v-1.167H2.917V8.75Zm8.166 2.333H8.75v1.167h2.333a1.17 1.17 0 0 0 1.167-1.167V8.75h-1.167v2.333Zm0-9.333H8.75v1.167h2.333V5.25h1.167V2.917a1.17 1.17 0 0 0-1.167-1.167Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgFullscreen);
-
-/***/ }),
-
-/***/ 59570:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgGithubWhite = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 40,
-    height: 40,
-    viewBox: "0 0 40 40",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M20 4.4a16 16 0 0 0-16 16c0 7.072 4.592 13.072 10.944 15.2.8.128 1.056-.368 1.056-.8v-2.704c-4.432.96-5.376-2.144-5.376-2.144-.736-1.856-1.776-2.352-1.776-2.352-1.456-.992.112-.96.112-.96 1.6.112 2.448 1.648 2.448 1.648C12.8 30.72 15.152 30 16.064 29.616c.144-1.04.56-1.744 1.008-2.144-3.552-.4-7.28-1.776-7.28-7.872 0-1.776.608-3.2 1.648-4.336-.16-.4-.72-2.064.16-4.224 0 0 1.344-.432 4.4 1.632a15.075 15.075 0 0 1 4-.528c1.36 0 2.736.176 4 .528 3.056-2.064 4.4-1.632 4.4-1.632.88 2.16.32 3.824.16 4.224 1.04 1.136 1.648 2.56 1.648 4.336 0 6.112-3.744 7.456-7.312 7.856.576.496 1.104 1.472 1.104 2.96V34.8c0 .432.256.944 1.072.8C31.424 33.456 36 27.472 36 20.4a16.001 16.001 0 0 0-16-16Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgGithubWhite);
-
-/***/ }),
-
-/***/ 26890:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path, _circle;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgGscholar = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    xmlns: "http://www.w3.org/2000/svg",
-    viewBox: "0 0 512 512",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M256 411.12 0 202.667 256 0zM256 411.12l256-208.453L256 0z"
-  })), _circle || (_circle = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("circle", {
-    cx: 256,
-    cy: 362.667,
-    r: 149.333
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgGscholar);
-
-/***/ }),
-
-/***/ 42924:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgHashtag = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 16,
-    height: 16,
-    viewBox: "0 0 16 16",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "m4 13.333.667-2.666H2.333l.334-1.334H5l.667-2.666H3l.333-1.334H6l.667-2.666H8l-.667 2.666H10l.667-2.666H12l-.667 2.666h2.334l-.334 1.334H11l-.667 2.666H13l-.333 1.334H10l-.667 2.666H8l.667-2.666H6l-.667 2.666H4Zm2.333-4H9l.667-2.666H7l-.667 2.666Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgHashtag);
-
-/***/ }),
-
-/***/ 74297:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgHistory = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 16,
-    height: 16,
-    viewBox: "0 0 16 16",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M8 14c-1.533 0-2.87-.508-4.009-1.525-1.139-1.017-1.791-2.287-1.958-3.808H3.4c.156 1.155.67 2.11 1.542 2.866.872.756 1.892 1.134 3.058 1.134 1.3 0 2.403-.453 3.309-1.359.905-.906 1.358-2.008 1.358-3.308 0-1.3-.453-2.403-1.359-3.309C10.402 3.786 9.3 3.333 8 3.333a4.5 4.5 0 0 0-2.15.534 4.954 4.954 0 0 0-1.683 1.466H6v1.334H2v-4h1.333v1.566A5.954 5.954 0 0 1 8 2c.833 0 1.614.158 2.342.475a6.107 6.107 0 0 1 1.9 1.283c.539.54.966 1.172 1.283 1.9C13.842 6.386 14 7.166 14 8c0 .833-.158 1.614-.475 2.342a6.108 6.108 0 0 1-1.283 1.9 6.11 6.11 0 0 1-1.9 1.283A5.793 5.793 0 0 1 8 14Zm1.867-3.2L7.333 8.267v-3.6h1.334v3.066L10.8 9.867l-.933.933Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgHistory);
-
-/***/ }),
-
-/***/ 33336:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgLinkedin = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 16,
-    height: 16,
-    viewBox: "0 0 16 16",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M12.667 2A1.333 1.333 0 0 1 14 3.333v9.334A1.334 1.334 0 0 1 12.667 14H3.333A1.334 1.334 0 0 1 2 12.667V3.333A1.333 1.333 0 0 1 3.333 2h9.334Zm-.334 10.333V8.8a2.173 2.173 0 0 0-2.173-2.173c-.567 0-1.227.346-1.547.866v-.74h-1.86v5.58h1.86V9.047a.93.93 0 1 1 1.86 0v3.286h1.86ZM4.587 5.707a1.12 1.12 0 0 0 1.12-1.12 1.124 1.124 0 1 0-1.12 1.12Zm.926 6.626v-5.58H3.667v5.58h1.846Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgLinkedin);
-
-/***/ }),
-
-/***/ 65379:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _rect, _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgPlay = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 26,
-    height: 26,
-    viewBox: "0 0 26 26",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _rect || (_rect = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("rect", {
-    width: 26,
-    height: 26,
-    rx: 13,
-    fill: "#fff"
-  })), _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M10.334 9.547v6.906c0 .527.58.847 1.026.56l5.427-3.453a.667.667 0 0 0 0-1.127L11.36 8.987a.665.665 0 0 0-1.026.56Z",
-    fill: "#000"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgPlay);
-
-/***/ }),
-
-/***/ 78951:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgRemove = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 18,
-    height: 18,
-    viewBox: "0 0 18 18",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    stroke: "#fff",
-    d: "M.5 9h17"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgRemove);
-
-/***/ }),
-
-/***/ 84629:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _g, _defs;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgSearch = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 18,
-    height: 18,
-    viewBox: "0 0 18 18",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _g || (_g = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("g", {
-    clipPath: "url(#a)"
-  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    fillRule: "evenodd",
-    clipRule: "evenodd",
-    d: "M1.79 6.75a4.979 4.979 0 1 1 9.957 0 4.979 4.979 0 0 1-9.957 0ZM6.768.572a6.179 6.179 0 1 0 3.817 11.037l5.146 5.146a1 1 0 0 0 1.414-1.414l-5.207-5.207A6.179 6.179 0 0 0 6.768.571Z",
-    fill: "#000"
-  }))), _defs || (_defs = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("defs", null, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("clipPath", {
-    id: "a"
-  }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    fill: "#fff",
-    d: "M0 0h18v18H0z"
-  })))));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgSearch);
-
-/***/ }),
-
-/***/ 23816:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgStatus = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 179,
-    height: 178,
-    viewBox: "0 0 179 178",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    fillRule: "evenodd",
-    clipRule: "evenodd",
-    d: "M104.512 88.178c-10.667.615-17.352-1.87-28.02-1.254a44.732 44.732 0 0 0-7.853 1.146c1.575-19.73 15.538-36.988 34.525-38.085 11.652-.672 23.298 6.522 23.93 18.2.621 11.479-8.131 19.158-22.58 19.992l-.002.001Zm-28.645 40.355c-11.162.631-22.317-6.104-22.923-17.033-.596-10.742 7.79-17.93 21.633-18.71 10.218-.575 16.623 1.751 26.84 1.174a43.776 43.776 0 0 0 7.522-1.073c-1.506 18.464-14.881 34.617-33.072 35.642ZM89.5.001C40.346 0 .5 39.846.5 89c0 49.154 39.846 89 89 89s89-39.847 89-89-39.846-89-89-89",
-    fill: "#000"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgStatus);
-
-/***/ }),
-
-/***/ 35245:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgTelegramWhite = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 40,
-    height: 40,
-    viewBox: "0 0 40 40",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    fillRule: "evenodd",
-    clipRule: "evenodd",
-    d: "M4.906 17.987c9.395-4.094 15.66-6.792 18.795-8.096 8.95-3.723 10.81-4.37 12.022-4.39.267-.005.863.06 1.249.374.326.264.416.622.459.873.043.25.096.822.053 1.268-.485 5.097-2.583 17.463-3.65 23.171-.453 2.415-1.342 3.225-2.203 3.304-1.872.172-3.293-1.237-5.106-2.425-2.836-1.86-4.439-3.017-7.192-4.831-3.182-2.097-1.12-3.25.694-5.133.475-.493 8.72-7.993 8.88-8.674.02-.085.039-.402-.15-.57-.188-.167-.466-.11-.667-.064-.284.064-4.816 3.06-13.594 8.985-1.286.883-2.451 1.314-3.495 1.29-1.15-.024-3.364-.65-5.01-1.185-2.018-.656-3.622-1.003-3.483-2.117.073-.58.872-1.174 2.398-1.78Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgTelegramWhite);
-
-/***/ }),
-
-/***/ 68902:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgTelegram = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 24,
-    height: 24,
-    xmlns: "http://www.w3.org/2000/svg",
-    xmlSpace: "preserve",
-    style: {
-      fillRule: "evenodd",
-      clipRule: "evenodd",
-      strokeLinejoin: "round",
-      strokeMiterlimit: 1.41421
-    },
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M12 0C5.374 0 0 5.372 0 12c0 6.627 5.374 12 12 12 6.627 0 12-5.373 12-12 0-6.628-5.373-12-12-12Zm3.224 17.871c.188.133.43.166.646.085a.678.678 0 0 0 .422-.491c.507-2.382 1.737-8.412 2.198-10.578a.457.457 0 0 0-.151-.443.47.47 0 0 0-.465-.082c-2.446.906-9.979 3.732-13.058 4.871a.484.484 0 0 0-.316.467.483.483 0 0 0 .346.445c1.381.413 3.193.988 3.193.988s.847 2.558 1.288 3.858a.512.512 0 0 0 .352.336.505.505 0 0 0 .474-.121l1.805-1.704s2.084 1.527 3.266 2.369Zm-6.423-5.062.98 3.231.218-2.046 5.941-5.358a.162.162 0 0 0 .019-.22.165.165 0 0 0-.219-.037l-6.939 4.43Z"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgTelegram);
-
-/***/ }),
-
-/***/ 86089:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgTwitter = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 17,
-    height: 14,
-    viewBox: "0 0 17 14",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M16.557 1.597a6.802 6.802 0 0 1-1.95.534A3.406 3.406 0 0 0 16.1.251a6.782 6.782 0 0 1-2.157.824 3.398 3.398 0 0 0-5.788 3.1A9.647 9.647 0 0 1 1.153.624a3.395 3.395 0 0 0-.059 3.31c.264.494.645.915 1.11 1.225a3.389 3.389 0 0 1-1.538-.425v.044a3.398 3.398 0 0 0 2.725 3.33c-.5.136-1.025.156-1.534.06a3.399 3.399 0 0 0 3.173 2.357A6.817 6.817 0 0 1 0 11.934a9.607 9.607 0 0 0 5.207 1.526c6.249 0 9.665-5.176 9.665-9.665 0-.146-.004-.293-.01-.439A6.905 6.905 0 0 0 16.556 1.6l.001-.002Z",
-    fill: "#000"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgTwitter);
-
-/***/ }),
-
-/***/ 92358:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-var _path;
-
-function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-
-
-const SvgXWhite = _ref => {
-  let {
-    title,
-    titleId,
-    ...props
-  } = _ref;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("svg", _extends({
-    width: 40,
-    height: 40,
-    viewBox: "0 0 40 40",
-    fill: "none",
-    xmlns: "http://www.w3.org/2000/svg",
-    role: "img",
-    "aria-labelledby": titleId
-  }, props), title ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("title", {
-    id: titleId
-  }, title) : null, _path || (_path = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement("path", {
-    d: "M22.62 19.134 32.63 7.5h-2.373l-8.69 10.102L14.627 7.5H6.62l10.496 15.275-10.496 12.2h2.372l9.177-10.668 7.33 10.668h8.005L22.62 19.134Zm-3.248 3.776-1.063-1.521L9.847 9.285h3.643l6.829 9.768 1.063 1.521 8.877 12.697h-3.643l-7.244-10.36v-.001Z",
-    fill: "#fff"
-  })));
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (SvgXWhite);
-
-/***/ }),
-
-/***/ 26434:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-/* module decorator */ module = __webpack_require__.nmd(module);
-
-
-const wrapAnsi16 = (fn, offset) => (...args) => {
-	const code = fn(...args);
-	return `\u001B[${code + offset}m`;
-};
-
-const wrapAnsi256 = (fn, offset) => (...args) => {
-	const code = fn(...args);
-	return `\u001B[${38 + offset};5;${code}m`;
-};
-
-const wrapAnsi16m = (fn, offset) => (...args) => {
-	const rgb = fn(...args);
-	return `\u001B[${38 + offset};2;${rgb[0]};${rgb[1]};${rgb[2]}m`;
-};
-
-const ansi2ansi = n => n;
-const rgb2rgb = (r, g, b) => [r, g, b];
-
-const setLazyProperty = (object, property, get) => {
-	Object.defineProperty(object, property, {
-		get: () => {
-			const value = get();
-
-			Object.defineProperty(object, property, {
-				value,
-				enumerable: true,
-				configurable: true
-			});
-
-			return value;
-		},
-		enumerable: true,
-		configurable: true
-	});
-};
-
-/** @type {typeof import('color-convert')} */
-let colorConvert;
-const makeDynamicStyles = (wrap, targetSpace, identity, isBackground) => {
-	if (colorConvert === undefined) {
-		colorConvert = __webpack_require__(12085);
-	}
-
-	const offset = isBackground ? 10 : 0;
-	const styles = {};
-
-	for (const [sourceSpace, suite] of Object.entries(colorConvert)) {
-		const name = sourceSpace === 'ansi16' ? 'ansi' : sourceSpace;
-		if (sourceSpace === targetSpace) {
-			styles[name] = wrap(identity, offset);
-		} else if (typeof suite === 'object') {
-			styles[name] = wrap(suite[targetSpace], offset);
-		}
-	}
-
-	return styles;
-};
-
-function assembleStyles() {
-	const codes = new Map();
-	const styles = {
-		modifier: {
-			reset: [0, 0],
-			// 21 isn't widely supported and 22 does the same thing
-			bold: [1, 22],
-			dim: [2, 22],
-			italic: [3, 23],
-			underline: [4, 24],
-			inverse: [7, 27],
-			hidden: [8, 28],
-			strikethrough: [9, 29]
-		},
-		color: {
-			black: [30, 39],
-			red: [31, 39],
-			green: [32, 39],
-			yellow: [33, 39],
-			blue: [34, 39],
-			magenta: [35, 39],
-			cyan: [36, 39],
-			white: [37, 39],
-
-			// Bright color
-			blackBright: [90, 39],
-			redBright: [91, 39],
-			greenBright: [92, 39],
-			yellowBright: [93, 39],
-			blueBright: [94, 39],
-			magentaBright: [95, 39],
-			cyanBright: [96, 39],
-			whiteBright: [97, 39]
-		},
-		bgColor: {
-			bgBlack: [40, 49],
-			bgRed: [41, 49],
-			bgGreen: [42, 49],
-			bgYellow: [43, 49],
-			bgBlue: [44, 49],
-			bgMagenta: [45, 49],
-			bgCyan: [46, 49],
-			bgWhite: [47, 49],
-
-			// Bright color
-			bgBlackBright: [100, 49],
-			bgRedBright: [101, 49],
-			bgGreenBright: [102, 49],
-			bgYellowBright: [103, 49],
-			bgBlueBright: [104, 49],
-			bgMagentaBright: [105, 49],
-			bgCyanBright: [106, 49],
-			bgWhiteBright: [107, 49]
-		}
-	};
-
-	// Alias bright black as gray (and grey)
-	styles.color.gray = styles.color.blackBright;
-	styles.bgColor.bgGray = styles.bgColor.bgBlackBright;
-	styles.color.grey = styles.color.blackBright;
-	styles.bgColor.bgGrey = styles.bgColor.bgBlackBright;
-
-	for (const [groupName, group] of Object.entries(styles)) {
-		for (const [styleName, style] of Object.entries(group)) {
-			styles[styleName] = {
-				open: `\u001B[${style[0]}m`,
-				close: `\u001B[${style[1]}m`
-			};
-
-			group[styleName] = styles[styleName];
-
-			codes.set(style[0], style[1]);
-		}
-
-		Object.defineProperty(styles, groupName, {
-			value: group,
-			enumerable: false
-		});
-	}
-
-	Object.defineProperty(styles, 'codes', {
-		value: codes,
-		enumerable: false
-	});
-
-	styles.color.close = '\u001B[39m';
-	styles.bgColor.close = '\u001B[49m';
-
-	setLazyProperty(styles.color, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, false));
-	setLazyProperty(styles.color, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, false));
-	setLazyProperty(styles.color, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, false));
-	setLazyProperty(styles.bgColor, 'ansi', () => makeDynamicStyles(wrapAnsi16, 'ansi16', ansi2ansi, true));
-	setLazyProperty(styles.bgColor, 'ansi256', () => makeDynamicStyles(wrapAnsi256, 'ansi256', ansi2ansi, true));
-	setLazyProperty(styles.bgColor, 'ansi16m', () => makeDynamicStyles(wrapAnsi16m, 'rgb', rgb2rgb, true));
-
-	return styles;
-}
-
-// Make the export immutable
-Object.defineProperty(module, 'exports', {
-	enumerable: true,
-	get: assembleStyles
-});
-
-
-/***/ }),
-
-/***/ 40417:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-var __webpack_unused_export__;
-
-/* istanbul ignore file - tricky to import some things from this module during testing */
-__webpack_unused_export__ = ({ value: true });
-exports._b = exports.H7 = exports.LK = exports.Kv = exports.Mf = exports.SE = exports.N$ = exports.oI = exports.$9 = exports.pT = exports.fK = exports.ej = exports.hI = exports.Wx = exports.Sj = exports.r3 = exports.ue = exports.ZW = exports.z5 = exports.Oq = exports.P7 = exports.bS = exports.N7 = exports.Hs = exports.dV = exports.oC = exports.vA = exports.ol = exports.l$ = exports.sd = exports.dK = exports.V3 = exports.Bw = exports.hW = exports._o = exports.b4 = exports.nu = exports.wd = exports.q4 = void 0;
-// semantic version
-var version_1 = __webpack_require__(97657);
-Object.defineProperty(exports, "q4", ({ enumerable: true, get: function () { return version_1.VERSION; } }));
-var parser_1 = __webpack_require__(81183);
-Object.defineProperty(exports, "wd", ({ enumerable: true, get: function () { return parser_1.CstParser; } }));
-Object.defineProperty(exports, "nu", ({ enumerable: true, get: function () { return parser_1.EmbeddedActionsParser; } }));
-Object.defineProperty(exports, "b4", ({ enumerable: true, get: function () { return parser_1.ParserDefinitionErrorType; } }));
-Object.defineProperty(exports, "_o", ({ enumerable: true, get: function () { return parser_1.EMPTY_ALT; } }));
-var lexer_public_1 = __webpack_require__(88200);
-Object.defineProperty(exports, "hW", ({ enumerable: true, get: function () { return lexer_public_1.Lexer; } }));
-Object.defineProperty(exports, "Bw", ({ enumerable: true, get: function () { return lexer_public_1.LexerDefinitionErrorType; } }));
-// Tokens utilities
-var tokens_public_1 = __webpack_require__(58980);
-Object.defineProperty(exports, "V3", ({ enumerable: true, get: function () { return tokens_public_1.createToken; } }));
-Object.defineProperty(exports, "dK", ({ enumerable: true, get: function () { return tokens_public_1.createTokenInstance; } }));
-Object.defineProperty(exports, "sd", ({ enumerable: true, get: function () { return tokens_public_1.EOF; } }));
-Object.defineProperty(exports, "l$", ({ enumerable: true, get: function () { return tokens_public_1.tokenLabel; } }));
-Object.defineProperty(exports, "ol", ({ enumerable: true, get: function () { return tokens_public_1.tokenMatcher; } }));
-Object.defineProperty(exports, "vA", ({ enumerable: true, get: function () { return tokens_public_1.tokenName; } }));
-// Lookahead
-var lookahead_1 = __webpack_require__(63670);
-Object.defineProperty(exports, "oC", ({ enumerable: true, get: function () { return lookahead_1.getLookaheadPaths; } }));
-var llk_lookahead_1 = __webpack_require__(3449);
-Object.defineProperty(exports, "dV", ({ enumerable: true, get: function () { return llk_lookahead_1.LLkLookaheadStrategy; } }));
-// Other Utilities
-var errors_public_1 = __webpack_require__(27621);
-Object.defineProperty(exports, "Hs", ({ enumerable: true, get: function () { return errors_public_1.defaultParserErrorProvider; } }));
-var exceptions_public_1 = __webpack_require__(34400);
-Object.defineProperty(exports, "N7", ({ enumerable: true, get: function () { return exceptions_public_1.EarlyExitException; } }));
-Object.defineProperty(exports, "bS", ({ enumerable: true, get: function () { return exceptions_public_1.isRecognitionException; } }));
-Object.defineProperty(exports, "P7", ({ enumerable: true, get: function () { return exceptions_public_1.MismatchedTokenException; } }));
-Object.defineProperty(exports, "Oq", ({ enumerable: true, get: function () { return exceptions_public_1.NotAllInputParsedException; } }));
-Object.defineProperty(exports, "z5", ({ enumerable: true, get: function () { return exceptions_public_1.NoViableAltException; } }));
-var lexer_errors_public_1 = __webpack_require__(58232);
-Object.defineProperty(exports, "ZW", ({ enumerable: true, get: function () { return lexer_errors_public_1.defaultLexerErrorProvider; } }));
-// grammar reflection API
-var gast_1 = __webpack_require__(93062);
-Object.defineProperty(exports, "ue", ({ enumerable: true, get: function () { return gast_1.Alternation; } }));
-Object.defineProperty(exports, "r3", ({ enumerable: true, get: function () { return gast_1.Alternative; } }));
-Object.defineProperty(exports, "Sj", ({ enumerable: true, get: function () { return gast_1.NonTerminal; } }));
-Object.defineProperty(exports, "Wx", ({ enumerable: true, get: function () { return gast_1.Option; } }));
-Object.defineProperty(exports, "hI", ({ enumerable: true, get: function () { return gast_1.Repetition; } }));
-Object.defineProperty(exports, "ej", ({ enumerable: true, get: function () { return gast_1.RepetitionMandatory; } }));
-Object.defineProperty(exports, "fK", ({ enumerable: true, get: function () { return gast_1.RepetitionMandatoryWithSeparator; } }));
-Object.defineProperty(exports, "pT", ({ enumerable: true, get: function () { return gast_1.RepetitionWithSeparator; } }));
-Object.defineProperty(exports, "$9", ({ enumerable: true, get: function () { return gast_1.Rule; } }));
-Object.defineProperty(exports, "oI", ({ enumerable: true, get: function () { return gast_1.Terminal; } }));
-// GAST Utilities
-var gast_2 = __webpack_require__(93062);
-Object.defineProperty(exports, "N$", ({ enumerable: true, get: function () { return gast_2.serializeGrammar; } }));
-Object.defineProperty(exports, "SE", ({ enumerable: true, get: function () { return gast_2.serializeProduction; } }));
-Object.defineProperty(exports, "Mf", ({ enumerable: true, get: function () { return gast_2.GAstVisitor; } }));
-var cst_dts_gen_1 = __webpack_require__(82688);
-Object.defineProperty(exports, "Kv", ({ enumerable: true, get: function () { return cst_dts_gen_1.generateCstDts; } }));
-/* istanbul ignore next */
-function clearCache() {
-    console.warn("The clearCache function was 'soft' removed from the Chevrotain API." +
-        "\n\t It performs no action other than printing this message." +
-        "\n\t Please avoid using it as it will be completely removed in the future");
-}
-exports.LK = clearCache;
-var render_public_1 = __webpack_require__(77141);
-Object.defineProperty(exports, "H7", ({ enumerable: true, get: function () { return render_public_1.createSyntaxDiagramsCode; } }));
-var Parser = /** @class */ (function () {
-    function Parser() {
-        throw new Error("The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead.\t\n" +
-            "See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0");
-    }
-    return Parser;
-}());
-exports._b = Parser;
-//# sourceMappingURL=api.js.map
-
-/***/ }),
-
-/***/ 77141:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.createSyntaxDiagramsCode = void 0;
-var version_1 = __webpack_require__(97657);
-function createSyntaxDiagramsCode(grammar, _a) {
-    var _b = _a === void 0 ? {} : _a, _c = _b.resourceBase, resourceBase = _c === void 0 ? "https://unpkg.com/chevrotain@".concat(version_1.VERSION, "/diagrams/") : _c, _d = _b.css, css = _d === void 0 ? "https://unpkg.com/chevrotain@".concat(version_1.VERSION, "/diagrams/diagrams.css") : _d;
-    var header = "\n<!-- This is a generated file -->\n<!DOCTYPE html>\n<meta charset=\"utf-8\">\n<style>\n  body {\n    background-color: hsl(30, 20%, 95%)\n  }\n</style>\n\n";
-    var cssHtml = "\n<link rel='stylesheet' href='".concat(css, "'>\n");
-    var scripts = "\n<script src='".concat(resourceBase, "vendor/railroad-diagrams.js'></script>\n<script src='").concat(resourceBase, "src/diagrams_builder.js'></script>\n<script src='").concat(resourceBase, "src/diagrams_behavior.js'></script>\n<script src='").concat(resourceBase, "src/main.js'></script>\n");
-    var diagramsDiv = "\n<div id=\"diagrams\" align=\"center\"></div>    \n";
-    var serializedGrammar = "\n<script>\n    window.serializedGrammar = ".concat(JSON.stringify(grammar, null, "  "), ";\n</script>\n");
-    var initLogic = "\n<script>\n    var diagramsDiv = document.getElementById(\"diagrams\");\n    main.drawDiagramsFromSerializedGrammar(serializedGrammar, diagramsDiv);\n</script>\n";
-    return (header + cssHtml + scripts + diagramsDiv + serializedGrammar + initLogic);
-}
-exports.createSyntaxDiagramsCode = createSyntaxDiagramsCode;
-//# sourceMappingURL=render_public.js.map
-
-/***/ }),
-
-/***/ 94688:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.defineNameProp = void 0;
-var NAME = "name";
-function defineNameProp(obj, nameValue) {
-    Object.defineProperty(obj, NAME, {
-        enumerable: false,
-        configurable: true,
-        writable: false,
-        value: nameValue
-    });
-}
-exports.defineNameProp = defineNameProp;
-//# sourceMappingURL=lang_extensions.js.map
-
-/***/ }),
-
-/***/ 24997:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.IN = void 0;
-// TODO: can this be removed? where is it used?
-exports.IN = "_~IN~_";
-//# sourceMappingURL=constants.js.map
-
-/***/ }),
-
-/***/ 23059:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.addNoneTerminalToCst = exports.addTerminalToCst = exports.setNodeLocationFull = exports.setNodeLocationOnlyOffset = void 0;
-/**
- * This nodeLocation tracking is not efficient and should only be used
- * when error recovery is enabled or the Token Vector contains virtual Tokens
- * (e.g, Python Indent/Outdent)
- * As it executes the calculation for every single terminal/nonTerminal
- * and does not rely on the fact the token vector is **sorted**
- */
-function setNodeLocationOnlyOffset(currNodeLocation, newLocationInfo) {
-    // First (valid) update for this cst node
-    if (isNaN(currNodeLocation.startOffset) === true) {
-        // assumption1: Token location information is either NaN or a valid number
-        // assumption2: Token location information is fully valid if it exist
-        // (both start/end offsets exist and are numbers).
-        currNodeLocation.startOffset = newLocationInfo.startOffset;
-        currNodeLocation.endOffset = newLocationInfo.endOffset;
-    }
-    // Once the startOffset has been updated with a valid number it should never receive
-    // any farther updates as the Token vector is sorted.
-    // We still have to check this this condition for every new possible location info
-    // because with error recovery enabled we may encounter invalid tokens (NaN location props)
-    else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {
-        currNodeLocation.endOffset = newLocationInfo.endOffset;
-    }
-}
-exports.setNodeLocationOnlyOffset = setNodeLocationOnlyOffset;
-/**
- * This nodeLocation tracking is not efficient and should only be used
- * when error recovery is enabled or the Token Vector contains virtual Tokens
- * (e.g, Python Indent/Outdent)
- * As it executes the calculation for every single terminal/nonTerminal
- * and does not rely on the fact the token vector is **sorted**
- */
-function setNodeLocationFull(currNodeLocation, newLocationInfo) {
-    // First (valid) update for this cst node
-    if (isNaN(currNodeLocation.startOffset) === true) {
-        // assumption1: Token location information is either NaN or a valid number
-        // assumption2: Token location information is fully valid if it exist
-        // (all start/end props exist and are numbers).
-        currNodeLocation.startOffset = newLocationInfo.startOffset;
-        currNodeLocation.startColumn = newLocationInfo.startColumn;
-        currNodeLocation.startLine = newLocationInfo.startLine;
-        currNodeLocation.endOffset = newLocationInfo.endOffset;
-        currNodeLocation.endColumn = newLocationInfo.endColumn;
-        currNodeLocation.endLine = newLocationInfo.endLine;
-    }
-    // Once the start props has been updated with a valid number it should never receive
-    // any farther updates as the Token vector is sorted.
-    // We still have to check this this condition for every new possible location info
-    // because with error recovery enabled we may encounter invalid tokens (NaN location props)
-    else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {
-        currNodeLocation.endOffset = newLocationInfo.endOffset;
-        currNodeLocation.endColumn = newLocationInfo.endColumn;
-        currNodeLocation.endLine = newLocationInfo.endLine;
-    }
-}
-exports.setNodeLocationFull = setNodeLocationFull;
-function addTerminalToCst(node, token, tokenTypeName) {
-    if (node.children[tokenTypeName] === undefined) {
-        node.children[tokenTypeName] = [token];
-    }
-    else {
-        node.children[tokenTypeName].push(token);
-    }
-}
-exports.addTerminalToCst = addTerminalToCst;
-function addNoneTerminalToCst(node, ruleName, ruleResult) {
-    if (node.children[ruleName] === undefined) {
-        node.children[ruleName] = [ruleResult];
-    }
-    else {
-        node.children[ruleName].push(ruleResult);
-    }
-}
-exports.addNoneTerminalToCst = addNoneTerminalToCst;
-//# sourceMappingURL=cst.js.map
-
-/***/ }),
-
-/***/ 85480:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.validateMissingCstMethods = exports.validateVisitor = exports.CstVisitorDefinitionError = exports.createBaseVisitorConstructorWithDefaults = exports.createBaseSemanticVisitorConstructor = exports.defaultVisit = void 0;
-var isEmpty_1 = __importDefault(__webpack_require__(41609));
-var compact_1 = __importDefault(__webpack_require__(39693));
-var isArray_1 = __importDefault(__webpack_require__(1469));
-var map_1 = __importDefault(__webpack_require__(35161));
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var filter_1 = __importDefault(__webpack_require__(63105));
-var keys_1 = __importDefault(__webpack_require__(3674));
-var isFunction_1 = __importDefault(__webpack_require__(23560));
-var isUndefined_1 = __importDefault(__webpack_require__(52353));
-var lang_extensions_1 = __webpack_require__(94688);
-function defaultVisit(ctx, param) {
-    var childrenNames = (0, keys_1.default)(ctx);
-    var childrenNamesLength = childrenNames.length;
-    for (var i = 0; i < childrenNamesLength; i++) {
-        var currChildName = childrenNames[i];
-        var currChildArray = ctx[currChildName];
-        var currChildArrayLength = currChildArray.length;
-        for (var j = 0; j < currChildArrayLength; j++) {
-            var currChild = currChildArray[j];
-            // distinction between Tokens Children and CstNode children
-            if (currChild.tokenTypeIdx === undefined) {
-                this[currChild.name](currChild.children, param);
-            }
-        }
-    }
-    // defaultVisit does not support generic out param
-}
-exports.defaultVisit = defaultVisit;
-function createBaseSemanticVisitorConstructor(grammarName, ruleNames) {
-    var derivedConstructor = function () { };
-    // can be overwritten according to:
-    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/
-    // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname
-    (0, lang_extensions_1.defineNameProp)(derivedConstructor, grammarName + "BaseSemantics");
-    var semanticProto = {
-        visit: function (cstNode, param) {
-            // enables writing more concise visitor methods when CstNode has only a single child
-            if ((0, isArray_1.default)(cstNode)) {
-                // A CST Node's children dictionary can never have empty arrays as values
-                // If a key is defined there will be at least one element in the corresponding value array.
-                cstNode = cstNode[0];
-            }
-            // enables passing optional CstNodes concisely.
-            if ((0, isUndefined_1.default)(cstNode)) {
-                return undefined;
-            }
-            return this[cstNode.name](cstNode.children, param);
-        },
-        validateVisitor: function () {
-            var semanticDefinitionErrors = validateVisitor(this, ruleNames);
-            if (!(0, isEmpty_1.default)(semanticDefinitionErrors)) {
-                var errorMessages = (0, map_1.default)(semanticDefinitionErrors, function (currDefError) { return currDefError.msg; });
-                throw Error("Errors Detected in CST Visitor <".concat(this.constructor.name, ">:\n\t") +
-                    "".concat(errorMessages.join("\n\n").replace(/\n/g, "\n\t")));
-            }
-        }
-    };
-    derivedConstructor.prototype = semanticProto;
-    derivedConstructor.prototype.constructor = derivedConstructor;
-    derivedConstructor._RULE_NAMES = ruleNames;
-    return derivedConstructor;
-}
-exports.createBaseSemanticVisitorConstructor = createBaseSemanticVisitorConstructor;
-function createBaseVisitorConstructorWithDefaults(grammarName, ruleNames, baseConstructor) {
-    var derivedConstructor = function () { };
-    // can be overwritten according to:
-    // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/
-    // name?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects%2FFunction%2Fname
-    (0, lang_extensions_1.defineNameProp)(derivedConstructor, grammarName + "BaseSemanticsWithDefaults");
-    var withDefaultsProto = Object.create(baseConstructor.prototype);
-    (0, forEach_1.default)(ruleNames, function (ruleName) {
-        withDefaultsProto[ruleName] = defaultVisit;
-    });
-    derivedConstructor.prototype = withDefaultsProto;
-    derivedConstructor.prototype.constructor = derivedConstructor;
-    return derivedConstructor;
-}
-exports.createBaseVisitorConstructorWithDefaults = createBaseVisitorConstructorWithDefaults;
-var CstVisitorDefinitionError;
-(function (CstVisitorDefinitionError) {
-    CstVisitorDefinitionError[CstVisitorDefinitionError["REDUNDANT_METHOD"] = 0] = "REDUNDANT_METHOD";
-    CstVisitorDefinitionError[CstVisitorDefinitionError["MISSING_METHOD"] = 1] = "MISSING_METHOD";
-})(CstVisitorDefinitionError = exports.CstVisitorDefinitionError || (exports.CstVisitorDefinitionError = {}));
-function validateVisitor(visitorInstance, ruleNames) {
-    var missingErrors = validateMissingCstMethods(visitorInstance, ruleNames);
-    return missingErrors;
-}
-exports.validateVisitor = validateVisitor;
-function validateMissingCstMethods(visitorInstance, ruleNames) {
-    var missingRuleNames = (0, filter_1.default)(ruleNames, function (currRuleName) {
-        return (0, isFunction_1.default)(visitorInstance[currRuleName]) === false;
-    });
-    var errors = (0, map_1.default)(missingRuleNames, function (currRuleName) {
-        return {
-            msg: "Missing visitor method: <".concat(currRuleName, "> on ").concat((visitorInstance.constructor.name), " CST Visitor."),
-            type: CstVisitorDefinitionError.MISSING_METHOD,
-            methodName: currRuleName
-        };
-    });
-    return (0, compact_1.default)(errors);
-}
-exports.validateMissingCstMethods = validateMissingCstMethods;
-//# sourceMappingURL=cst_visitor.js.map
-
-/***/ }),
-
-/***/ 27621:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.defaultGrammarValidatorErrorProvider = exports.defaultGrammarResolverErrorProvider = exports.defaultParserErrorProvider = void 0;
-var tokens_public_1 = __webpack_require__(58980);
-var first_1 = __importDefault(__webpack_require__(8804));
-var map_1 = __importDefault(__webpack_require__(35161));
-var reduce_1 = __importDefault(__webpack_require__(54061));
-var gast_1 = __webpack_require__(93062);
-var gast_2 = __webpack_require__(93062);
-exports.defaultParserErrorProvider = {
-    buildMismatchTokenMessage: function (_a) {
-        var expected = _a.expected, actual = _a.actual, previous = _a.previous, ruleName = _a.ruleName;
-        var hasLabel = (0, tokens_public_1.hasTokenLabel)(expected);
-        var expectedMsg = hasLabel
-            ? "--> ".concat((0, tokens_public_1.tokenLabel)(expected), " <--")
-            : "token of type --> ".concat(expected.name, " <--");
-        var msg = "Expecting ".concat(expectedMsg, " but found --> '").concat(actual.image, "' <--");
-        return msg;
-    },
-    buildNotAllInputParsedMessage: function (_a) {
-        var firstRedundant = _a.firstRedundant, ruleName = _a.ruleName;
-        return "Redundant input, expecting EOF but found: " + firstRedundant.image;
-    },
-    buildNoViableAltMessage: function (_a) {
-        var expectedPathsPerAlt = _a.expectedPathsPerAlt, actual = _a.actual, previous = _a.previous, customUserDescription = _a.customUserDescription, ruleName = _a.ruleName;
-        var errPrefix = "Expecting: ";
-        // TODO: issue: No Viable Alternative Error may have incomplete details. #502
-        var actualText = (0, first_1.default)(actual).image;
-        var errSuffix = "\nbut found: '" + actualText + "'";
-        if (customUserDescription) {
-            return errPrefix + customUserDescription + errSuffix;
-        }
-        else {
-            var allLookAheadPaths = (0, reduce_1.default)(expectedPathsPerAlt, function (result, currAltPaths) { return result.concat(currAltPaths); }, []);
-            var nextValidTokenSequences = (0, map_1.default)(allLookAheadPaths, function (currPath) {
-                return "[".concat((0, map_1.default)(currPath, function (currTokenType) { return (0, tokens_public_1.tokenLabel)(currTokenType); }).join(", "), "]");
-            });
-            var nextValidSequenceItems = (0, map_1.default)(nextValidTokenSequences, function (itemMsg, idx) { return "  ".concat(idx + 1, ". ").concat(itemMsg); });
-            var calculatedDescription = "one of these possible Token sequences:\n".concat(nextValidSequenceItems.join("\n"));
-            return errPrefix + calculatedDescription + errSuffix;
-        }
-    },
-    buildEarlyExitMessage: function (_a) {
-        var expectedIterationPaths = _a.expectedIterationPaths, actual = _a.actual, customUserDescription = _a.customUserDescription, ruleName = _a.ruleName;
-        var errPrefix = "Expecting: ";
-        // TODO: issue: No Viable Alternative Error may have incomplete details. #502
-        var actualText = (0, first_1.default)(actual).image;
-        var errSuffix = "\nbut found: '" + actualText + "'";
-        if (customUserDescription) {
-            return errPrefix + customUserDescription + errSuffix;
-        }
-        else {
-            var nextValidTokenSequences = (0, map_1.default)(expectedIterationPaths, function (currPath) {
-                return "[".concat((0, map_1.default)(currPath, function (currTokenType) { return (0, tokens_public_1.tokenLabel)(currTokenType); }).join(","), "]");
-            });
-            var calculatedDescription = "expecting at least one iteration which starts with one of these possible Token sequences::\n  " +
-                "<".concat(nextValidTokenSequences.join(" ,"), ">");
-            return errPrefix + calculatedDescription + errSuffix;
-        }
-    }
-};
-Object.freeze(exports.defaultParserErrorProvider);
-exports.defaultGrammarResolverErrorProvider = {
-    buildRuleNotFoundError: function (topLevelRule, undefinedRule) {
-        var msg = "Invalid grammar, reference to a rule which is not defined: ->" +
-            undefinedRule.nonTerminalName +
-            "<-\n" +
-            "inside top level rule: ->" +
-            topLevelRule.name +
-            "<-";
-        return msg;
-    }
-};
-exports.defaultGrammarValidatorErrorProvider = {
-    buildDuplicateFoundError: function (topLevelRule, duplicateProds) {
-        function getExtraProductionArgument(prod) {
-            if (prod instanceof gast_1.Terminal) {
-                return prod.terminalType.name;
-            }
-            else if (prod instanceof gast_1.NonTerminal) {
-                return prod.nonTerminalName;
-            }
-            else {
-                return "";
-            }
-        }
-        var topLevelName = topLevelRule.name;
-        var duplicateProd = (0, first_1.default)(duplicateProds);
-        var index = duplicateProd.idx;
-        var dslName = (0, gast_2.getProductionDslName)(duplicateProd);
-        var extraArgument = getExtraProductionArgument(duplicateProd);
-        var hasExplicitIndex = index > 0;
-        var msg = "->".concat(dslName).concat(hasExplicitIndex ? index : "", "<- ").concat(extraArgument ? "with argument: ->".concat(extraArgument, "<-") : "", "\n                  appears more than once (").concat(duplicateProds.length, " times) in the top level rule: ->").concat(topLevelName, "<-.                  \n                  For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n                  ");
-        // white space trimming time! better to trim afterwards as it allows to use WELL formatted multi line template strings...
-        msg = msg.replace(/[ \t]+/g, " ");
-        msg = msg.replace(/\s\s+/g, "\n");
-        return msg;
-    },
-    buildNamespaceConflictError: function (rule) {
-        var errMsg = "Namespace conflict found in grammar.\n" +
-            "The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <".concat(rule.name, ">.\n") +
-            "To resolve this make sure each Terminal and Non-Terminal names are unique\n" +
-            "This is easy to accomplish by using the convention that Terminal names start with an uppercase letter\n" +
-            "and Non-Terminal names start with a lower case letter.";
-        return errMsg;
-    },
-    buildAlternationPrefixAmbiguityError: function (options) {
-        var pathMsg = (0, map_1.default)(options.prefixPath, function (currTok) {
-            return (0, tokens_public_1.tokenLabel)(currTok);
-        }).join(", ");
-        var occurrence = options.alternation.idx === 0 ? "" : options.alternation.idx;
-        var errMsg = "Ambiguous alternatives: <".concat(options.ambiguityIndices.join(" ,"), "> due to common lookahead prefix\n") +
-            "in <OR".concat(occurrence, "> inside <").concat(options.topLevelRule.name, "> Rule,\n") +
-            "<".concat(pathMsg, "> may appears as a prefix path in all these alternatives.\n") +
-            "See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\n" +
-            "For Further details.";
-        return errMsg;
-    },
-    buildAlternationAmbiguityError: function (options) {
-        var pathMsg = (0, map_1.default)(options.prefixPath, function (currtok) {
-            return (0, tokens_public_1.tokenLabel)(currtok);
-        }).join(", ");
-        var occurrence = options.alternation.idx === 0 ? "" : options.alternation.idx;
-        var currMessage = "Ambiguous Alternatives Detected: <".concat(options.ambiguityIndices.join(" ,"), "> in <OR").concat(occurrence, ">") +
-            " inside <".concat(options.topLevelRule.name, "> Rule,\n") +
-            "<".concat(pathMsg, "> may appears as a prefix path in all these alternatives.\n");
-        currMessage =
-            currMessage +
-                "See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\n" +
-                "For Further details.";
-        return currMessage;
-    },
-    buildEmptyRepetitionError: function (options) {
-        var dslName = (0, gast_2.getProductionDslName)(options.repetition);
-        if (options.repetition.idx !== 0) {
-            dslName += options.repetition.idx;
-        }
-        var errMsg = "The repetition <".concat(dslName, "> within Rule <").concat(options.topLevelRule.name, "> can never consume any tokens.\n") +
-            "This could lead to an infinite loop.";
-        return errMsg;
-    },
-    // TODO: remove - `errors_public` from nyc.config.js exclude
-    //       once this method is fully removed from this file
-    buildTokenNameError: function (options) {
-        /* istanbul ignore next */
-        return "deprecated";
-    },
-    buildEmptyAlternationError: function (options) {
-        var errMsg = "Ambiguous empty alternative: <".concat(options.emptyChoiceIdx + 1, ">") +
-            " in <OR".concat(options.alternation.idx, "> inside <").concat(options.topLevelRule.name, "> Rule.\n") +
-            "Only the last alternative may be an empty alternative.";
-        return errMsg;
-    },
-    buildTooManyAlternativesError: function (options) {
-        var errMsg = "An Alternation cannot have more than 256 alternatives:\n" +
-            "<OR".concat(options.alternation.idx, "> inside <").concat(options.topLevelRule.name, "> Rule.\n has ").concat(options.alternation.definition.length + 1, " alternatives.");
-        return errMsg;
-    },
-    buildLeftRecursionError: function (options) {
-        var ruleName = options.topLevelRule.name;
-        var pathNames = (0, map_1.default)(options.leftRecursionPath, function (currRule) { return currRule.name; });
-        var leftRecursivePath = "".concat(ruleName, " --> ").concat(pathNames
-            .concat([ruleName])
-            .join(" --> "));
-        var errMsg = "Left Recursion found in grammar.\n" +
-            "rule: <".concat(ruleName, "> can be invoked from itself (directly or indirectly)\n") +
-            "without consuming any Tokens. The grammar path that causes this is: \n ".concat(leftRecursivePath, "\n") +
-            " To fix this refactor your grammar to remove the left recursion.\n" +
-            "see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.";
-        return errMsg;
-    },
-    // TODO: remove - `errors_public` from nyc.config.js exclude
-    //       once this method is fully removed from this file
-    buildInvalidRuleNameError: function (options) {
-        /* istanbul ignore next */
-        return "deprecated";
-    },
-    buildDuplicateRuleNameError: function (options) {
-        var ruleName;
-        if (options.topLevelRule instanceof gast_1.Rule) {
-            ruleName = options.topLevelRule.name;
-        }
-        else {
-            ruleName = options.topLevelRule;
-        }
-        var errMsg = "Duplicate definition, rule: ->".concat(ruleName, "<- is already defined in the grammar: ->").concat(options.grammarName, "<-");
-        return errMsg;
-    }
-};
-//# sourceMappingURL=errors_public.js.map
-
-/***/ }),
-
-/***/ 34400:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        if (typeof b !== "function" && b !== null)
-            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.EarlyExitException = exports.NotAllInputParsedException = exports.NoViableAltException = exports.MismatchedTokenException = exports.isRecognitionException = void 0;
-var includes_1 = __importDefault(__webpack_require__(64721));
-var MISMATCHED_TOKEN_EXCEPTION = "MismatchedTokenException";
-var NO_VIABLE_ALT_EXCEPTION = "NoViableAltException";
-var EARLY_EXIT_EXCEPTION = "EarlyExitException";
-var NOT_ALL_INPUT_PARSED_EXCEPTION = "NotAllInputParsedException";
-var RECOGNITION_EXCEPTION_NAMES = [
-    MISMATCHED_TOKEN_EXCEPTION,
-    NO_VIABLE_ALT_EXCEPTION,
-    EARLY_EXIT_EXCEPTION,
-    NOT_ALL_INPUT_PARSED_EXCEPTION
-];
-Object.freeze(RECOGNITION_EXCEPTION_NAMES);
-// hacks to bypass no support for custom Errors in javascript/typescript
-function isRecognitionException(error) {
-    // can't do instanceof on hacked custom js exceptions
-    return (0, includes_1.default)(RECOGNITION_EXCEPTION_NAMES, error.name);
-}
-exports.isRecognitionException = isRecognitionException;
-var RecognitionException = /** @class */ (function (_super) {
-    __extends(RecognitionException, _super);
-    function RecognitionException(message, token) {
-        var _newTarget = this.constructor;
-        var _this = _super.call(this, message) || this;
-        _this.token = token;
-        _this.resyncedTokens = [];
-        // fix prototype chain when typescript target is ES5
-        Object.setPrototypeOf(_this, _newTarget.prototype);
-        /* istanbul ignore next - V8 workaround to remove constructor from stacktrace when typescript target is ES5 */
-        if (Error.captureStackTrace) {
-            Error.captureStackTrace(_this, _this.constructor);
-        }
-        return _this;
-    }
-    return RecognitionException;
-}(Error));
-var MismatchedTokenException = /** @class */ (function (_super) {
-    __extends(MismatchedTokenException, _super);
-    function MismatchedTokenException(message, token, previousToken) {
-        var _this = _super.call(this, message, token) || this;
-        _this.previousToken = previousToken;
-        _this.name = MISMATCHED_TOKEN_EXCEPTION;
-        return _this;
-    }
-    return MismatchedTokenException;
-}(RecognitionException));
-exports.MismatchedTokenException = MismatchedTokenException;
-var NoViableAltException = /** @class */ (function (_super) {
-    __extends(NoViableAltException, _super);
-    function NoViableAltException(message, token, previousToken) {
-        var _this = _super.call(this, message, token) || this;
-        _this.previousToken = previousToken;
-        _this.name = NO_VIABLE_ALT_EXCEPTION;
-        return _this;
-    }
-    return NoViableAltException;
-}(RecognitionException));
-exports.NoViableAltException = NoViableAltException;
-var NotAllInputParsedException = /** @class */ (function (_super) {
-    __extends(NotAllInputParsedException, _super);
-    function NotAllInputParsedException(message, token) {
-        var _this = _super.call(this, message, token) || this;
-        _this.name = NOT_ALL_INPUT_PARSED_EXCEPTION;
-        return _this;
-    }
-    return NotAllInputParsedException;
-}(RecognitionException));
-exports.NotAllInputParsedException = NotAllInputParsedException;
-var EarlyExitException = /** @class */ (function (_super) {
-    __extends(EarlyExitException, _super);
-    function EarlyExitException(message, token, previousToken) {
-        var _this = _super.call(this, message, token) || this;
-        _this.previousToken = previousToken;
-        _this.name = EARLY_EXIT_EXCEPTION;
-        return _this;
-    }
-    return EarlyExitException;
-}(RecognitionException));
-exports.EarlyExitException = EarlyExitException;
-//# sourceMappingURL=exceptions_public.js.map
-
-/***/ }),
-
-/***/ 4046:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        if (typeof b !== "function" && b !== null)
-            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __assign = (this && this.__assign) || function () {
-    __assign = Object.assign || function(t) {
-        for (var s, i = 1, n = arguments.length; i < n; i++) {
-            s = arguments[i];
-            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
-                t[p] = s[p];
-        }
-        return t;
-    };
-    return __assign.apply(this, arguments);
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.checkPrefixAlternativesAmbiguities = exports.validateSomeNonEmptyLookaheadPath = exports.validateTooManyAlts = exports.RepetitionCollector = exports.validateAmbiguousAlternationAlternatives = exports.validateEmptyOrAlternative = exports.getFirstNoneTerminal = exports.validateNoLeftRecursion = exports.validateRuleIsOverridden = exports.validateRuleDoesNotAlreadyExist = exports.OccurrenceValidationCollector = exports.identifyProductionForDuplicates = exports.validateGrammar = exports.validateLookahead = void 0;
-var first_1 = __importDefault(__webpack_require__(8804));
-var isEmpty_1 = __importDefault(__webpack_require__(41609));
-var drop_1 = __importDefault(__webpack_require__(30731));
-var flatten_1 = __importDefault(__webpack_require__(85564));
-var filter_1 = __importDefault(__webpack_require__(63105));
-var reject_1 = __importDefault(__webpack_require__(43063));
-var difference_1 = __importDefault(__webpack_require__(91966));
-var map_1 = __importDefault(__webpack_require__(35161));
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var groupBy_1 = __importDefault(__webpack_require__(7739));
-var reduce_1 = __importDefault(__webpack_require__(54061));
-var pickBy_1 = __importDefault(__webpack_require__(35937));
-var values_1 = __importDefault(__webpack_require__(52628));
-var includes_1 = __importDefault(__webpack_require__(64721));
-var flatMap_1 = __importDefault(__webpack_require__(94654));
-var clone_1 = __importDefault(__webpack_require__(66678));
-var parser_1 = __webpack_require__(81183);
-var gast_1 = __webpack_require__(93062);
-var lookahead_1 = __webpack_require__(63670);
-var interpreter_1 = __webpack_require__(6331);
-var gast_2 = __webpack_require__(93062);
-var gast_3 = __webpack_require__(93062);
-var dropRight_1 = __importDefault(__webpack_require__(43624));
-var compact_1 = __importDefault(__webpack_require__(39693));
-var tokens_1 = __webpack_require__(22963);
-function validateLookahead(options) {
-    var lookaheadValidationErrorMessages = options.lookaheadStrategy.validate({
-        rules: options.rules,
-        tokenTypes: options.tokenTypes,
-        grammarName: options.grammarName
-    });
-    return (0, map_1.default)(lookaheadValidationErrorMessages, function (errorMessage) { return (__assign({ type: parser_1.ParserDefinitionErrorType.CUSTOM_LOOKAHEAD_VALIDATION }, errorMessage)); });
-}
-exports.validateLookahead = validateLookahead;
-function validateGrammar(topLevels, tokenTypes, errMsgProvider, grammarName) {
-    var duplicateErrors = (0, flatMap_1.default)(topLevels, function (currTopLevel) { return validateDuplicateProductions(currTopLevel, errMsgProvider); });
-    var termsNamespaceConflictErrors = checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider);
-    var tooManyAltsErrors = (0, flatMap_1.default)(topLevels, function (curRule) {
-        return validateTooManyAlts(curRule, errMsgProvider);
-    });
-    var duplicateRulesError = (0, flatMap_1.default)(topLevels, function (curRule) {
-        return validateRuleDoesNotAlreadyExist(curRule, topLevels, grammarName, errMsgProvider);
-    });
-    return duplicateErrors.concat(termsNamespaceConflictErrors, tooManyAltsErrors, duplicateRulesError);
-}
-exports.validateGrammar = validateGrammar;
-function validateDuplicateProductions(topLevelRule, errMsgProvider) {
-    var collectorVisitor = new OccurrenceValidationCollector();
-    topLevelRule.accept(collectorVisitor);
-    var allRuleProductions = collectorVisitor.allProductions;
-    var productionGroups = (0, groupBy_1.default)(allRuleProductions, identifyProductionForDuplicates);
-    var duplicates = (0, pickBy_1.default)(productionGroups, function (currGroup) {
-        return currGroup.length > 1;
-    });
-    var errors = (0, map_1.default)((0, values_1.default)(duplicates), function (currDuplicates) {
-        var firstProd = (0, first_1.default)(currDuplicates);
-        var msg = errMsgProvider.buildDuplicateFoundError(topLevelRule, currDuplicates);
-        var dslName = (0, gast_1.getProductionDslName)(firstProd);
-        var defError = {
-            message: msg,
-            type: parser_1.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,
-            ruleName: topLevelRule.name,
-            dslName: dslName,
-            occurrence: firstProd.idx
-        };
-        var param = getExtraProductionArgument(firstProd);
-        if (param) {
-            defError.parameter = param;
-        }
-        return defError;
-    });
-    return errors;
-}
-function identifyProductionForDuplicates(prod) {
-    return "".concat((0, gast_1.getProductionDslName)(prod), "_#_").concat(prod.idx, "_#_").concat(getExtraProductionArgument(prod));
-}
-exports.identifyProductionForDuplicates = identifyProductionForDuplicates;
-function getExtraProductionArgument(prod) {
-    if (prod instanceof gast_2.Terminal) {
-        return prod.terminalType.name;
-    }
-    else if (prod instanceof gast_2.NonTerminal) {
-        return prod.nonTerminalName;
-    }
-    else {
-        return "";
-    }
-}
-var OccurrenceValidationCollector = /** @class */ (function (_super) {
-    __extends(OccurrenceValidationCollector, _super);
-    function OccurrenceValidationCollector() {
-        var _this = _super !== null && _super.apply(this, arguments) || this;
-        _this.allProductions = [];
-        return _this;
-    }
-    OccurrenceValidationCollector.prototype.visitNonTerminal = function (subrule) {
-        this.allProductions.push(subrule);
-    };
-    OccurrenceValidationCollector.prototype.visitOption = function (option) {
-        this.allProductions.push(option);
-    };
-    OccurrenceValidationCollector.prototype.visitRepetitionWithSeparator = function (manySep) {
-        this.allProductions.push(manySep);
-    };
-    OccurrenceValidationCollector.prototype.visitRepetitionMandatory = function (atLeastOne) {
-        this.allProductions.push(atLeastOne);
-    };
-    OccurrenceValidationCollector.prototype.visitRepetitionMandatoryWithSeparator = function (atLeastOneSep) {
-        this.allProductions.push(atLeastOneSep);
-    };
-    OccurrenceValidationCollector.prototype.visitRepetition = function (many) {
-        this.allProductions.push(many);
-    };
-    OccurrenceValidationCollector.prototype.visitAlternation = function (or) {
-        this.allProductions.push(or);
-    };
-    OccurrenceValidationCollector.prototype.visitTerminal = function (terminal) {
-        this.allProductions.push(terminal);
-    };
-    return OccurrenceValidationCollector;
-}(gast_3.GAstVisitor));
-exports.OccurrenceValidationCollector = OccurrenceValidationCollector;
-function validateRuleDoesNotAlreadyExist(rule, allRules, className, errMsgProvider) {
-    var errors = [];
-    var occurrences = (0, reduce_1.default)(allRules, function (result, curRule) {
-        if (curRule.name === rule.name) {
-            return result + 1;
-        }
-        return result;
-    }, 0);
-    if (occurrences > 1) {
-        var errMsg = errMsgProvider.buildDuplicateRuleNameError({
-            topLevelRule: rule,
-            grammarName: className
-        });
-        errors.push({
-            message: errMsg,
-            type: parser_1.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,
-            ruleName: rule.name
-        });
-    }
-    return errors;
-}
-exports.validateRuleDoesNotAlreadyExist = validateRuleDoesNotAlreadyExist;
-// TODO: is there anyway to get only the rule names of rules inherited from the super grammars?
-// This is not part of the IGrammarErrorProvider because the validation cannot be performed on
-// The grammar structure, only at runtime.
-function validateRuleIsOverridden(ruleName, definedRulesNames, className) {
-    var errors = [];
-    var errMsg;
-    if (!(0, includes_1.default)(definedRulesNames, ruleName)) {
-        errMsg =
-            "Invalid rule override, rule: ->".concat(ruleName, "<- cannot be overridden in the grammar: ->").concat(className, "<-") +
-                "as it is not defined in any of the super grammars ";
-        errors.push({
-            message: errMsg,
-            type: parser_1.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,
-            ruleName: ruleName
-        });
-    }
-    return errors;
-}
-exports.validateRuleIsOverridden = validateRuleIsOverridden;
-function validateNoLeftRecursion(topRule, currRule, errMsgProvider, path) {
-    if (path === void 0) { path = []; }
-    var errors = [];
-    var nextNonTerminals = getFirstNoneTerminal(currRule.definition);
-    if ((0, isEmpty_1.default)(nextNonTerminals)) {
-        return [];
-    }
-    else {
-        var ruleName = topRule.name;
-        var foundLeftRecursion = (0, includes_1.default)(nextNonTerminals, topRule);
-        if (foundLeftRecursion) {
-            errors.push({
-                message: errMsgProvider.buildLeftRecursionError({
-                    topLevelRule: topRule,
-                    leftRecursionPath: path
-                }),
-                type: parser_1.ParserDefinitionErrorType.LEFT_RECURSION,
-                ruleName: ruleName
-            });
-        }
-        // we are only looking for cyclic paths leading back to the specific topRule
-        // other cyclic paths are ignored, we still need this difference to avoid infinite loops...
-        var validNextSteps = (0, difference_1.default)(nextNonTerminals, path.concat([topRule]));
-        var errorsFromNextSteps = (0, flatMap_1.default)(validNextSteps, function (currRefRule) {
-            var newPath = (0, clone_1.default)(path);
-            newPath.push(currRefRule);
-            return validateNoLeftRecursion(topRule, currRefRule, errMsgProvider, newPath);
-        });
-        return errors.concat(errorsFromNextSteps);
-    }
-}
-exports.validateNoLeftRecursion = validateNoLeftRecursion;
-function getFirstNoneTerminal(definition) {
-    var result = [];
-    if ((0, isEmpty_1.default)(definition)) {
-        return result;
-    }
-    var firstProd = (0, first_1.default)(definition);
-    /* istanbul ignore else */
-    if (firstProd instanceof gast_2.NonTerminal) {
-        result.push(firstProd.referencedRule);
-    }
-    else if (firstProd instanceof gast_2.Alternative ||
-        firstProd instanceof gast_2.Option ||
-        firstProd instanceof gast_2.RepetitionMandatory ||
-        firstProd instanceof gast_2.RepetitionMandatoryWithSeparator ||
-        firstProd instanceof gast_2.RepetitionWithSeparator ||
-        firstProd instanceof gast_2.Repetition) {
-        result = result.concat(getFirstNoneTerminal(firstProd.definition));
-    }
-    else if (firstProd instanceof gast_2.Alternation) {
-        // each sub definition in alternation is a FLAT
-        result = (0, flatten_1.default)((0, map_1.default)(firstProd.definition, function (currSubDef) {
-            return getFirstNoneTerminal(currSubDef.definition);
-        }));
-    }
-    else if (firstProd instanceof gast_2.Terminal) {
-        // nothing to see, move along
-    }
-    else {
-        throw Error("non exhaustive match");
-    }
-    var isFirstOptional = (0, gast_1.isOptionalProd)(firstProd);
-    var hasMore = definition.length > 1;
-    if (isFirstOptional && hasMore) {
-        var rest = (0, drop_1.default)(definition);
-        return result.concat(getFirstNoneTerminal(rest));
-    }
-    else {
-        return result;
-    }
-}
-exports.getFirstNoneTerminal = getFirstNoneTerminal;
-var OrCollector = /** @class */ (function (_super) {
-    __extends(OrCollector, _super);
-    function OrCollector() {
-        var _this = _super !== null && _super.apply(this, arguments) || this;
-        _this.alternations = [];
-        return _this;
-    }
-    OrCollector.prototype.visitAlternation = function (node) {
-        this.alternations.push(node);
-    };
-    return OrCollector;
-}(gast_3.GAstVisitor));
-function validateEmptyOrAlternative(topLevelRule, errMsgProvider) {
-    var orCollector = new OrCollector();
-    topLevelRule.accept(orCollector);
-    var ors = orCollector.alternations;
-    var errors = (0, flatMap_1.default)(ors, function (currOr) {
-        var exceptLast = (0, dropRight_1.default)(currOr.definition);
-        return (0, flatMap_1.default)(exceptLast, function (currAlternative, currAltIdx) {
-            var possibleFirstInAlt = (0, interpreter_1.nextPossibleTokensAfter)([currAlternative], [], tokens_1.tokenStructuredMatcher, 1);
-            if ((0, isEmpty_1.default)(possibleFirstInAlt)) {
-                return [
-                    {
-                        message: errMsgProvider.buildEmptyAlternationError({
-                            topLevelRule: topLevelRule,
-                            alternation: currOr,
-                            emptyChoiceIdx: currAltIdx
-                        }),
-                        type: parser_1.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,
-                        ruleName: topLevelRule.name,
-                        occurrence: currOr.idx,
-                        alternative: currAltIdx + 1
-                    }
-                ];
-            }
-            else {
-                return [];
-            }
-        });
-    });
-    return errors;
-}
-exports.validateEmptyOrAlternative = validateEmptyOrAlternative;
-function validateAmbiguousAlternationAlternatives(topLevelRule, globalMaxLookahead, errMsgProvider) {
-    var orCollector = new OrCollector();
-    topLevelRule.accept(orCollector);
-    var ors = orCollector.alternations;
-    // New Handling of ignoring ambiguities
-    // - https://github.com/chevrotain/chevrotain/issues/869
-    ors = (0, reject_1.default)(ors, function (currOr) { return currOr.ignoreAmbiguities === true; });
-    var errors = (0, flatMap_1.default)(ors, function (currOr) {
-        var currOccurrence = currOr.idx;
-        var actualMaxLookahead = currOr.maxLookahead || globalMaxLookahead;
-        var alternatives = (0, lookahead_1.getLookaheadPathsForOr)(currOccurrence, topLevelRule, actualMaxLookahead, currOr);
-        var altsAmbiguityErrors = checkAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider);
-        var altsPrefixAmbiguityErrors = checkPrefixAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider);
-        return altsAmbiguityErrors.concat(altsPrefixAmbiguityErrors);
-    });
-    return errors;
-}
-exports.validateAmbiguousAlternationAlternatives = validateAmbiguousAlternationAlternatives;
-var RepetitionCollector = /** @class */ (function (_super) {
-    __extends(RepetitionCollector, _super);
-    function RepetitionCollector() {
-        var _this = _super !== null && _super.apply(this, arguments) || this;
-        _this.allProductions = [];
-        return _this;
-    }
-    RepetitionCollector.prototype.visitRepetitionWithSeparator = function (manySep) {
-        this.allProductions.push(manySep);
-    };
-    RepetitionCollector.prototype.visitRepetitionMandatory = function (atLeastOne) {
-        this.allProductions.push(atLeastOne);
-    };
-    RepetitionCollector.prototype.visitRepetitionMandatoryWithSeparator = function (atLeastOneSep) {
-        this.allProductions.push(atLeastOneSep);
-    };
-    RepetitionCollector.prototype.visitRepetition = function (many) {
-        this.allProductions.push(many);
-    };
-    return RepetitionCollector;
-}(gast_3.GAstVisitor));
-exports.RepetitionCollector = RepetitionCollector;
-function validateTooManyAlts(topLevelRule, errMsgProvider) {
-    var orCollector = new OrCollector();
-    topLevelRule.accept(orCollector);
-    var ors = orCollector.alternations;
-    var errors = (0, flatMap_1.default)(ors, function (currOr) {
-        if (currOr.definition.length > 255) {
-            return [
-                {
-                    message: errMsgProvider.buildTooManyAlternativesError({
-                        topLevelRule: topLevelRule,
-                        alternation: currOr
-                    }),
-                    type: parser_1.ParserDefinitionErrorType.TOO_MANY_ALTS,
-                    ruleName: topLevelRule.name,
-                    occurrence: currOr.idx
-                }
-            ];
-        }
-        else {
-            return [];
-        }
-    });
-    return errors;
-}
-exports.validateTooManyAlts = validateTooManyAlts;
-function validateSomeNonEmptyLookaheadPath(topLevelRules, maxLookahead, errMsgProvider) {
-    var errors = [];
-    (0, forEach_1.default)(topLevelRules, function (currTopRule) {
-        var collectorVisitor = new RepetitionCollector();
-        currTopRule.accept(collectorVisitor);
-        var allRuleProductions = collectorVisitor.allProductions;
-        (0, forEach_1.default)(allRuleProductions, function (currProd) {
-            var prodType = (0, lookahead_1.getProdType)(currProd);
-            var actualMaxLookahead = currProd.maxLookahead || maxLookahead;
-            var currOccurrence = currProd.idx;
-            var paths = (0, lookahead_1.getLookaheadPathsForOptionalProd)(currOccurrence, currTopRule, prodType, actualMaxLookahead);
-            var pathsInsideProduction = paths[0];
-            if ((0, isEmpty_1.default)((0, flatten_1.default)(pathsInsideProduction))) {
-                var errMsg = errMsgProvider.buildEmptyRepetitionError({
-                    topLevelRule: currTopRule,
-                    repetition: currProd
-                });
-                errors.push({
-                    message: errMsg,
-                    type: parser_1.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,
-                    ruleName: currTopRule.name
-                });
-            }
-        });
-    });
-    return errors;
-}
-exports.validateSomeNonEmptyLookaheadPath = validateSomeNonEmptyLookaheadPath;
-function checkAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {
-    var foundAmbiguousPaths = [];
-    var identicalAmbiguities = (0, reduce_1.default)(alternatives, function (result, currAlt, currAltIdx) {
-        // ignore (skip) ambiguities with this alternative
-        if (alternation.definition[currAltIdx].ignoreAmbiguities === true) {
-            return result;
-        }
-        (0, forEach_1.default)(currAlt, function (currPath) {
-            var altsCurrPathAppearsIn = [currAltIdx];
-            (0, forEach_1.default)(alternatives, function (currOtherAlt, currOtherAltIdx) {
-                if (currAltIdx !== currOtherAltIdx &&
-                    (0, lookahead_1.containsPath)(currOtherAlt, currPath) &&
-                    // ignore (skip) ambiguities with this "other" alternative
-                    alternation.definition[currOtherAltIdx].ignoreAmbiguities !== true) {
-                    altsCurrPathAppearsIn.push(currOtherAltIdx);
-                }
-            });
-            if (altsCurrPathAppearsIn.length > 1 &&
-                !(0, lookahead_1.containsPath)(foundAmbiguousPaths, currPath)) {
-                foundAmbiguousPaths.push(currPath);
-                result.push({
-                    alts: altsCurrPathAppearsIn,
-                    path: currPath
-                });
-            }
-        });
-        return result;
-    }, []);
-    var currErrors = (0, map_1.default)(identicalAmbiguities, function (currAmbDescriptor) {
-        var ambgIndices = (0, map_1.default)(currAmbDescriptor.alts, function (currAltIdx) { return currAltIdx + 1; });
-        var currMessage = errMsgProvider.buildAlternationAmbiguityError({
-            topLevelRule: rule,
-            alternation: alternation,
-            ambiguityIndices: ambgIndices,
-            prefixPath: currAmbDescriptor.path
-        });
-        return {
-            message: currMessage,
-            type: parser_1.ParserDefinitionErrorType.AMBIGUOUS_ALTS,
-            ruleName: rule.name,
-            occurrence: alternation.idx,
-            alternatives: currAmbDescriptor.alts
-        };
-    });
-    return currErrors;
-}
-function checkPrefixAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {
-    // flatten
-    var pathsAndIndices = (0, reduce_1.default)(alternatives, function (result, currAlt, idx) {
-        var currPathsAndIdx = (0, map_1.default)(currAlt, function (currPath) {
-            return { idx: idx, path: currPath };
-        });
-        return result.concat(currPathsAndIdx);
-    }, []);
-    var errors = (0, compact_1.default)((0, flatMap_1.default)(pathsAndIndices, function (currPathAndIdx) {
-        var alternativeGast = alternation.definition[currPathAndIdx.idx];
-        // ignore (skip) ambiguities with this alternative
-        if (alternativeGast.ignoreAmbiguities === true) {
-            return [];
-        }
-        var targetIdx = currPathAndIdx.idx;
-        var targetPath = currPathAndIdx.path;
-        var prefixAmbiguitiesPathsAndIndices = (0, filter_1.default)(pathsAndIndices, function (searchPathAndIdx) {
-            // prefix ambiguity can only be created from lower idx (higher priority) path
-            return (
-            // ignore (skip) ambiguities with this "other" alternative
-            alternation.definition[searchPathAndIdx.idx].ignoreAmbiguities !==
-                true &&
-                searchPathAndIdx.idx < targetIdx &&
-                // checking for strict prefix because identical lookaheads
-                // will be be detected using a different validation.
-                (0, lookahead_1.isStrictPrefixOfPath)(searchPathAndIdx.path, targetPath));
-        });
-        var currPathPrefixErrors = (0, map_1.default)(prefixAmbiguitiesPathsAndIndices, function (currAmbPathAndIdx) {
-            var ambgIndices = [currAmbPathAndIdx.idx + 1, targetIdx + 1];
-            var occurrence = alternation.idx === 0 ? "" : alternation.idx;
-            var message = errMsgProvider.buildAlternationPrefixAmbiguityError({
-                topLevelRule: rule,
-                alternation: alternation,
-                ambiguityIndices: ambgIndices,
-                prefixPath: currAmbPathAndIdx.path
-            });
-            return {
-                message: message,
-                type: parser_1.ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,
-                ruleName: rule.name,
-                occurrence: occurrence,
-                alternatives: ambgIndices
-            };
-        });
-        return currPathPrefixErrors;
-    }));
-    return errors;
-}
-exports.checkPrefixAlternativesAmbiguities = checkPrefixAlternativesAmbiguities;
-function checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider) {
-    var errors = [];
-    var tokenNames = (0, map_1.default)(tokenTypes, function (currToken) { return currToken.name; });
-    (0, forEach_1.default)(topLevels, function (currRule) {
-        var currRuleName = currRule.name;
-        if ((0, includes_1.default)(tokenNames, currRuleName)) {
-            var errMsg = errMsgProvider.buildNamespaceConflictError(currRule);
-            errors.push({
-                message: errMsg,
-                type: parser_1.ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,
-                ruleName: currRuleName
-            });
-        }
-    });
-    return errors;
-}
-//# sourceMappingURL=checks.js.map
-
-/***/ }),
-
-/***/ 90825:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.firstForTerminal = exports.firstForBranching = exports.firstForSequence = exports.first = void 0;
-var flatten_1 = __importDefault(__webpack_require__(85564));
-var uniq_1 = __importDefault(__webpack_require__(44908));
-var map_1 = __importDefault(__webpack_require__(35161));
-var gast_1 = __webpack_require__(93062);
-var gast_2 = __webpack_require__(93062);
-function first(prod) {
-    /* istanbul ignore else */
-    if (prod instanceof gast_1.NonTerminal) {
-        // this could in theory cause infinite loops if
-        // (1) prod A refs prod B.
-        // (2) prod B refs prod A
-        // (3) AB can match the empty set
-        // in other words a cycle where everything is optional so the first will keep
-        // looking ahead for the next optional part and will never exit
-        // currently there is no safeguard for this unique edge case because
-        // (1) not sure a grammar in which this can happen is useful for anything (productive)
-        return first(prod.referencedRule);
-    }
-    else if (prod instanceof gast_1.Terminal) {
-        return firstForTerminal(prod);
-    }
-    else if ((0, gast_2.isSequenceProd)(prod)) {
-        return firstForSequence(prod);
-    }
-    else if ((0, gast_2.isBranchingProd)(prod)) {
-        return firstForBranching(prod);
-    }
-    else {
-        throw Error("non exhaustive match");
-    }
-}
-exports.first = first;
-function firstForSequence(prod) {
-    var firstSet = [];
-    var seq = prod.definition;
-    var nextSubProdIdx = 0;
-    var hasInnerProdsRemaining = seq.length > nextSubProdIdx;
-    var currSubProd;
-    // so we enter the loop at least once (if the definition is not empty
-    var isLastInnerProdOptional = true;
-    // scan a sequence until it's end or until we have found a NONE optional production in it
-    while (hasInnerProdsRemaining && isLastInnerProdOptional) {
-        currSubProd = seq[nextSubProdIdx];
-        isLastInnerProdOptional = (0, gast_2.isOptionalProd)(currSubProd);
-        firstSet = firstSet.concat(first(currSubProd));
-        nextSubProdIdx = nextSubProdIdx + 1;
-        hasInnerProdsRemaining = seq.length > nextSubProdIdx;
-    }
-    return (0, uniq_1.default)(firstSet);
-}
-exports.firstForSequence = firstForSequence;
-function firstForBranching(prod) {
-    var allAlternativesFirsts = (0, map_1.default)(prod.definition, function (innerProd) {
-        return first(innerProd);
-    });
-    return (0, uniq_1.default)((0, flatten_1.default)(allAlternativesFirsts));
-}
-exports.firstForBranching = firstForBranching;
-function firstForTerminal(terminal) {
-    return [terminal.terminalType];
-}
-exports.firstForTerminal = firstForTerminal;
-//# sourceMappingURL=first.js.map
-
-/***/ }),
-
-/***/ 89476:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        if (typeof b !== "function" && b !== null)
-            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.buildInProdFollowPrefix = exports.buildBetweenProdsFollowPrefix = exports.computeAllProdsFollows = exports.ResyncFollowsWalker = void 0;
-var rest_1 = __webpack_require__(20318);
-var first_1 = __webpack_require__(90825);
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var assign_1 = __importDefault(__webpack_require__(28583));
-var constants_1 = __webpack_require__(24997);
-var gast_1 = __webpack_require__(93062);
-// This ResyncFollowsWalker computes all of the follows required for RESYNC
-// (skipping reference production).
-var ResyncFollowsWalker = /** @class */ (function (_super) {
-    __extends(ResyncFollowsWalker, _super);
-    function ResyncFollowsWalker(topProd) {
-        var _this = _super.call(this) || this;
-        _this.topProd = topProd;
-        _this.follows = {};
-        return _this;
-    }
-    ResyncFollowsWalker.prototype.startWalking = function () {
-        this.walk(this.topProd);
-        return this.follows;
-    };
-    ResyncFollowsWalker.prototype.walkTerminal = function (terminal, currRest, prevRest) {
-        // do nothing! just like in the public sector after 13:00
-    };
-    ResyncFollowsWalker.prototype.walkProdRef = function (refProd, currRest, prevRest) {
-        var followName = buildBetweenProdsFollowPrefix(refProd.referencedRule, refProd.idx) +
-            this.topProd.name;
-        var fullRest = currRest.concat(prevRest);
-        var restProd = new gast_1.Alternative({ definition: fullRest });
-        var t_in_topProd_follows = (0, first_1.first)(restProd);
-        this.follows[followName] = t_in_topProd_follows;
-    };
-    return ResyncFollowsWalker;
-}(rest_1.RestWalker));
-exports.ResyncFollowsWalker = ResyncFollowsWalker;
-function computeAllProdsFollows(topProductions) {
-    var reSyncFollows = {};
-    (0, forEach_1.default)(topProductions, function (topProd) {
-        var currRefsFollow = new ResyncFollowsWalker(topProd).startWalking();
-        (0, assign_1.default)(reSyncFollows, currRefsFollow);
-    });
-    return reSyncFollows;
-}
-exports.computeAllProdsFollows = computeAllProdsFollows;
-function buildBetweenProdsFollowPrefix(inner, occurenceInParent) {
-    return inner.name + occurenceInParent + constants_1.IN;
-}
-exports.buildBetweenProdsFollowPrefix = buildBetweenProdsFollowPrefix;
-function buildInProdFollowPrefix(terminal) {
-    var terminalName = terminal.terminalType.name;
-    return terminalName + terminal.idx + constants_1.IN;
-}
-exports.buildInProdFollowPrefix = buildInProdFollowPrefix;
-//# sourceMappingURL=follow.js.map
-
-/***/ }),
-
-/***/ 65143:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.validateGrammar = exports.resolveGrammar = void 0;
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var defaults_1 = __importDefault(__webpack_require__(91747));
-var resolver_1 = __webpack_require__(36671);
-var checks_1 = __webpack_require__(4046);
-var errors_public_1 = __webpack_require__(27621);
-function resolveGrammar(options) {
-    var actualOptions = (0, defaults_1.default)(options, {
-        errMsgProvider: errors_public_1.defaultGrammarResolverErrorProvider
-    });
-    var topRulesTable = {};
-    (0, forEach_1.default)(options.rules, function (rule) {
-        topRulesTable[rule.name] = rule;
-    });
-    return (0, resolver_1.resolveGrammar)(topRulesTable, actualOptions.errMsgProvider);
-}
-exports.resolveGrammar = resolveGrammar;
-function validateGrammar(options) {
-    options = (0, defaults_1.default)(options, {
-        errMsgProvider: errors_public_1.defaultGrammarValidatorErrorProvider
-    });
-    return (0, checks_1.validateGrammar)(options.rules, options.tokenTypes, options.errMsgProvider, options.grammarName);
-}
-exports.validateGrammar = validateGrammar;
-//# sourceMappingURL=gast_resolver_public.js.map
-
-/***/ }),
-
-/***/ 6331:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        if (typeof b !== "function" && b !== null)
-            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.nextPossibleTokensAfter = exports.possiblePathsFrom = exports.NextTerminalAfterAtLeastOneSepWalker = exports.NextTerminalAfterAtLeastOneWalker = exports.NextTerminalAfterManySepWalker = exports.NextTerminalAfterManyWalker = exports.AbstractNextTerminalAfterProductionWalker = exports.NextAfterTokenWalker = exports.AbstractNextPossibleTokensWalker = void 0;
-var rest_1 = __webpack_require__(20318);
-var first_1 = __importDefault(__webpack_require__(8804));
-var isEmpty_1 = __importDefault(__webpack_require__(41609));
-var dropRight_1 = __importDefault(__webpack_require__(43624));
-var drop_1 = __importDefault(__webpack_require__(30731));
-var last_1 = __importDefault(__webpack_require__(10928));
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var clone_1 = __importDefault(__webpack_require__(66678));
-var first_2 = __webpack_require__(90825);
-var gast_1 = __webpack_require__(93062);
-var AbstractNextPossibleTokensWalker = /** @class */ (function (_super) {
-    __extends(AbstractNextPossibleTokensWalker, _super);
-    function AbstractNextPossibleTokensWalker(topProd, path) {
-        var _this = _super.call(this) || this;
-        _this.topProd = topProd;
-        _this.path = path;
-        _this.possibleTokTypes = [];
-        _this.nextProductionName = "";
-        _this.nextProductionOccurrence = 0;
-        _this.found = false;
-        _this.isAtEndOfPath = false;
-        return _this;
-    }
-    AbstractNextPossibleTokensWalker.prototype.startWalking = function () {
-        this.found = false;
-        if (this.path.ruleStack[0] !== this.topProd.name) {
-            throw Error("The path does not start with the walker's top Rule!");
-        }
-        // immutable for the win
-        this.ruleStack = (0, clone_1.default)(this.path.ruleStack).reverse(); // intelij bug requires assertion
-        this.occurrenceStack = (0, clone_1.default)(this.path.occurrenceStack).reverse(); // intelij bug requires assertion
-        // already verified that the first production is valid, we now seek the 2nd production
-        this.ruleStack.pop();
-        this.occurrenceStack.pop();
-        this.updateExpectedNext();
-        this.walk(this.topProd);
-        return this.possibleTokTypes;
-    };
-    AbstractNextPossibleTokensWalker.prototype.walk = function (prod, prevRest) {
-        if (prevRest === void 0) { prevRest = []; }
-        // stop scanning once we found the path
-        if (!this.found) {
-            _super.prototype.walk.call(this, prod, prevRest);
-        }
-    };
-    AbstractNextPossibleTokensWalker.prototype.walkProdRef = function (refProd, currRest, prevRest) {
-        // found the next production, need to keep walking in it
-        if (refProd.referencedRule.name === this.nextProductionName &&
-            refProd.idx === this.nextProductionOccurrence) {
-            var fullRest = currRest.concat(prevRest);
-            this.updateExpectedNext();
-            this.walk(refProd.referencedRule, fullRest);
-        }
-    };
-    AbstractNextPossibleTokensWalker.prototype.updateExpectedNext = function () {
-        // need to consume the Terminal
-        if ((0, isEmpty_1.default)(this.ruleStack)) {
-            // must reset nextProductionXXX to avoid walking down another Top Level production while what we are
-            // really seeking is the last Terminal...
-            this.nextProductionName = "";
-            this.nextProductionOccurrence = 0;
-            this.isAtEndOfPath = true;
-        }
-        else {
-            this.nextProductionName = this.ruleStack.pop();
-            this.nextProductionOccurrence = this.occurrenceStack.pop();
-        }
-    };
-    return AbstractNextPossibleTokensWalker;
-}(rest_1.RestWalker));
-exports.AbstractNextPossibleTokensWalker = AbstractNextPossibleTokensWalker;
-var NextAfterTokenWalker = /** @class */ (function (_super) {
-    __extends(NextAfterTokenWalker, _super);
-    function NextAfterTokenWalker(topProd, path) {
-        var _this = _super.call(this, topProd, path) || this;
-        _this.path = path;
-        _this.nextTerminalName = "";
-        _this.nextTerminalOccurrence = 0;
-        _this.nextTerminalName = _this.path.lastTok.name;
-        _this.nextTerminalOccurrence = _this.path.lastTokOccurrence;
-        return _this;
-    }
-    NextAfterTokenWalker.prototype.walkTerminal = function (terminal, currRest, prevRest) {
-        if (this.isAtEndOfPath &&
-            terminal.terminalType.name === this.nextTerminalName &&
-            terminal.idx === this.nextTerminalOccurrence &&
-            !this.found) {
-            var fullRest = currRest.concat(prevRest);
-            var restProd = new gast_1.Alternative({ definition: fullRest });
-            this.possibleTokTypes = (0, first_2.first)(restProd);
-            this.found = true;
-        }
-    };
-    return NextAfterTokenWalker;
-}(AbstractNextPossibleTokensWalker));
-exports.NextAfterTokenWalker = NextAfterTokenWalker;
-/**
- * This walker only "walks" a single "TOP" level in the Grammar Ast, this means
- * it never "follows" production refs
- */
-var AbstractNextTerminalAfterProductionWalker = /** @class */ (function (_super) {
-    __extends(AbstractNextTerminalAfterProductionWalker, _super);
-    function AbstractNextTerminalAfterProductionWalker(topRule, occurrence) {
-        var _this = _super.call(this) || this;
-        _this.topRule = topRule;
-        _this.occurrence = occurrence;
-        _this.result = {
-            token: undefined,
-            occurrence: undefined,
-            isEndOfRule: undefined
-        };
-        return _this;
-    }
-    AbstractNextTerminalAfterProductionWalker.prototype.startWalking = function () {
-        this.walk(this.topRule);
-        return this.result;
-    };
-    return AbstractNextTerminalAfterProductionWalker;
-}(rest_1.RestWalker));
-exports.AbstractNextTerminalAfterProductionWalker = AbstractNextTerminalAfterProductionWalker;
-var NextTerminalAfterManyWalker = /** @class */ (function (_super) {
-    __extends(NextTerminalAfterManyWalker, _super);
-    function NextTerminalAfterManyWalker() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    NextTerminalAfterManyWalker.prototype.walkMany = function (manyProd, currRest, prevRest) {
-        if (manyProd.idx === this.occurrence) {
-            var firstAfterMany = (0, first_1.default)(currRest.concat(prevRest));
-            this.result.isEndOfRule = firstAfterMany === undefined;
-            if (firstAfterMany instanceof gast_1.Terminal) {
-                this.result.token = firstAfterMany.terminalType;
-                this.result.occurrence = firstAfterMany.idx;
-            }
-        }
-        else {
-            _super.prototype.walkMany.call(this, manyProd, currRest, prevRest);
-        }
-    };
-    return NextTerminalAfterManyWalker;
-}(AbstractNextTerminalAfterProductionWalker));
-exports.NextTerminalAfterManyWalker = NextTerminalAfterManyWalker;
-var NextTerminalAfterManySepWalker = /** @class */ (function (_super) {
-    __extends(NextTerminalAfterManySepWalker, _super);
-    function NextTerminalAfterManySepWalker() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    NextTerminalAfterManySepWalker.prototype.walkManySep = function (manySepProd, currRest, prevRest) {
-        if (manySepProd.idx === this.occurrence) {
-            var firstAfterManySep = (0, first_1.default)(currRest.concat(prevRest));
-            this.result.isEndOfRule = firstAfterManySep === undefined;
-            if (firstAfterManySep instanceof gast_1.Terminal) {
-                this.result.token = firstAfterManySep.terminalType;
-                this.result.occurrence = firstAfterManySep.idx;
-            }
-        }
-        else {
-            _super.prototype.walkManySep.call(this, manySepProd, currRest, prevRest);
-        }
-    };
-    return NextTerminalAfterManySepWalker;
-}(AbstractNextTerminalAfterProductionWalker));
-exports.NextTerminalAfterManySepWalker = NextTerminalAfterManySepWalker;
-var NextTerminalAfterAtLeastOneWalker = /** @class */ (function (_super) {
-    __extends(NextTerminalAfterAtLeastOneWalker, _super);
-    function NextTerminalAfterAtLeastOneWalker() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    NextTerminalAfterAtLeastOneWalker.prototype.walkAtLeastOne = function (atLeastOneProd, currRest, prevRest) {
-        if (atLeastOneProd.idx === this.occurrence) {
-            var firstAfterAtLeastOne = (0, first_1.default)(currRest.concat(prevRest));
-            this.result.isEndOfRule = firstAfterAtLeastOne === undefined;
-            if (firstAfterAtLeastOne instanceof gast_1.Terminal) {
-                this.result.token = firstAfterAtLeastOne.terminalType;
-                this.result.occurrence = firstAfterAtLeastOne.idx;
-            }
-        }
-        else {
-            _super.prototype.walkAtLeastOne.call(this, atLeastOneProd, currRest, prevRest);
-        }
-    };
-    return NextTerminalAfterAtLeastOneWalker;
-}(AbstractNextTerminalAfterProductionWalker));
-exports.NextTerminalAfterAtLeastOneWalker = NextTerminalAfterAtLeastOneWalker;
-// TODO: reduce code duplication in the AfterWalkers
-var NextTerminalAfterAtLeastOneSepWalker = /** @class */ (function (_super) {
-    __extends(NextTerminalAfterAtLeastOneSepWalker, _super);
-    function NextTerminalAfterAtLeastOneSepWalker() {
-        return _super !== null && _super.apply(this, arguments) || this;
-    }
-    NextTerminalAfterAtLeastOneSepWalker.prototype.walkAtLeastOneSep = function (atleastOneSepProd, currRest, prevRest) {
-        if (atleastOneSepProd.idx === this.occurrence) {
-            var firstAfterfirstAfterAtLeastOneSep = (0, first_1.default)(currRest.concat(prevRest));
-            this.result.isEndOfRule = firstAfterfirstAfterAtLeastOneSep === undefined;
-            if (firstAfterfirstAfterAtLeastOneSep instanceof gast_1.Terminal) {
-                this.result.token = firstAfterfirstAfterAtLeastOneSep.terminalType;
-                this.result.occurrence = firstAfterfirstAfterAtLeastOneSep.idx;
-            }
-        }
-        else {
-            _super.prototype.walkAtLeastOneSep.call(this, atleastOneSepProd, currRest, prevRest);
-        }
-    };
-    return NextTerminalAfterAtLeastOneSepWalker;
-}(AbstractNextTerminalAfterProductionWalker));
-exports.NextTerminalAfterAtLeastOneSepWalker = NextTerminalAfterAtLeastOneSepWalker;
-function possiblePathsFrom(targetDef, maxLength, currPath) {
-    if (currPath === void 0) { currPath = []; }
-    // avoid side effects
-    currPath = (0, clone_1.default)(currPath);
-    var result = [];
-    var i = 0;
-    // TODO: avoid inner funcs
-    function remainingPathWith(nextDef) {
-        return nextDef.concat((0, drop_1.default)(targetDef, i + 1));
-    }
-    // TODO: avoid inner funcs
-    function getAlternativesForProd(definition) {
-        var alternatives = possiblePathsFrom(remainingPathWith(definition), maxLength, currPath);
-        return result.concat(alternatives);
-    }
-    /**
-     * Mandatory productions will halt the loop as the paths computed from their recursive calls will already contain the
-     * following (rest) of the targetDef.
-     *
-     * For optional productions (Option/Repetition/...) the loop will continue to represent the paths that do not include the
-     * the optional production.
-     */
-    while (currPath.length < maxLength && i < targetDef.length) {
-        var prod = targetDef[i];
-        /* istanbul ignore else */
-        if (prod instanceof gast_1.Alternative) {
-            return getAlternativesForProd(prod.definition);
-        }
-        else if (prod instanceof gast_1.NonTerminal) {
-            return getAlternativesForProd(prod.definition);
-        }
-        else if (prod instanceof gast_1.Option) {
-            result = getAlternativesForProd(prod.definition);
-        }
-        else if (prod instanceof gast_1.RepetitionMandatory) {
-            var newDef = prod.definition.concat([
-                new gast_1.Repetition({
-                    definition: prod.definition
-                })
-            ]);
-            return getAlternativesForProd(newDef);
-        }
-        else if (prod instanceof gast_1.RepetitionMandatoryWithSeparator) {
-            var newDef = [
-                new gast_1.Alternative({ definition: prod.definition }),
-                new gast_1.Repetition({
-                    definition: [new gast_1.Terminal({ terminalType: prod.separator })].concat(prod.definition)
-                })
-            ];
-            return getAlternativesForProd(newDef);
-        }
-        else if (prod instanceof gast_1.RepetitionWithSeparator) {
-            var newDef = prod.definition.concat([
-                new gast_1.Repetition({
-                    definition: [new gast_1.Terminal({ terminalType: prod.separator })].concat(prod.definition)
-                })
-            ]);
-            result = getAlternativesForProd(newDef);
-        }
-        else if (prod instanceof gast_1.Repetition) {
-            var newDef = prod.definition.concat([
-                new gast_1.Repetition({
-                    definition: prod.definition
-                })
-            ]);
-            result = getAlternativesForProd(newDef);
-        }
-        else if (prod instanceof gast_1.Alternation) {
-            (0, forEach_1.default)(prod.definition, function (currAlt) {
-                // TODO: this is a limited check for empty alternatives
-                //   It would prevent a common case of infinite loops during parser initialization.
-                //   However **in-directly** empty alternatives may still cause issues.
-                if ((0, isEmpty_1.default)(currAlt.definition) === false) {
-                    result = getAlternativesForProd(currAlt.definition);
-                }
-            });
-            return result;
-        }
-        else if (prod instanceof gast_1.Terminal) {
-            currPath.push(prod.terminalType);
-        }
-        else {
-            throw Error("non exhaustive match");
-        }
-        i++;
-    }
-    result.push({
-        partialPath: currPath,
-        suffixDef: (0, drop_1.default)(targetDef, i)
-    });
-    return result;
-}
-exports.possiblePathsFrom = possiblePathsFrom;
-function nextPossibleTokensAfter(initialDef, tokenVector, tokMatcher, maxLookAhead) {
-    var EXIT_NON_TERMINAL = "EXIT_NONE_TERMINAL";
-    // to avoid creating a new Array each time.
-    var EXIT_NON_TERMINAL_ARR = [EXIT_NON_TERMINAL];
-    var EXIT_ALTERNATIVE = "EXIT_ALTERNATIVE";
-    var foundCompletePath = false;
-    var tokenVectorLength = tokenVector.length;
-    var minimalAlternativesIndex = tokenVectorLength - maxLookAhead - 1;
-    var result = [];
-    var possiblePaths = [];
-    possiblePaths.push({
-        idx: -1,
-        def: initialDef,
-        ruleStack: [],
-        occurrenceStack: []
-    });
-    while (!(0, isEmpty_1.default)(possiblePaths)) {
-        var currPath = possiblePaths.pop();
-        // skip alternatives if no more results can be found (assuming deterministic grammar with fixed lookahead)
-        if (currPath === EXIT_ALTERNATIVE) {
-            if (foundCompletePath &&
-                (0, last_1.default)(possiblePaths).idx <= minimalAlternativesIndex) {
-                // remove irrelevant alternative
-                possiblePaths.pop();
-            }
-            continue;
-        }
-        var currDef = currPath.def;
-        var currIdx = currPath.idx;
-        var currRuleStack = currPath.ruleStack;
-        var currOccurrenceStack = currPath.occurrenceStack;
-        // For Example: an empty path could exist in a valid grammar in the case of an EMPTY_ALT
-        if ((0, isEmpty_1.default)(currDef)) {
-            continue;
-        }
-        var prod = currDef[0];
-        /* istanbul ignore else */
-        if (prod === EXIT_NON_TERMINAL) {
-            var nextPath = {
-                idx: currIdx,
-                def: (0, drop_1.default)(currDef),
-                ruleStack: (0, dropRight_1.default)(currRuleStack),
-                occurrenceStack: (0, dropRight_1.default)(currOccurrenceStack)
-            };
-            possiblePaths.push(nextPath);
-        }
-        else if (prod instanceof gast_1.Terminal) {
-            /* istanbul ignore else */
-            if (currIdx < tokenVectorLength - 1) {
-                var nextIdx = currIdx + 1;
-                var actualToken = tokenVector[nextIdx];
-                if (tokMatcher(actualToken, prod.terminalType)) {
-                    var nextPath = {
-                        idx: nextIdx,
-                        def: (0, drop_1.default)(currDef),
-                        ruleStack: currRuleStack,
-                        occurrenceStack: currOccurrenceStack
-                    };
-                    possiblePaths.push(nextPath);
-                }
-                // end of the line
-            }
-            else if (currIdx === tokenVectorLength - 1) {
-                // IGNORE ABOVE ELSE
-                result.push({
-                    nextTokenType: prod.terminalType,
-                    nextTokenOccurrence: prod.idx,
-                    ruleStack: currRuleStack,
-                    occurrenceStack: currOccurrenceStack
-                });
-                foundCompletePath = true;
-            }
-            else {
-                throw Error("non exhaustive match");
-            }
-        }
-        else if (prod instanceof gast_1.NonTerminal) {
-            var newRuleStack = (0, clone_1.default)(currRuleStack);
-            newRuleStack.push(prod.nonTerminalName);
-            var newOccurrenceStack = (0, clone_1.default)(currOccurrenceStack);
-            newOccurrenceStack.push(prod.idx);
-            var nextPath = {
-                idx: currIdx,
-                def: prod.definition.concat(EXIT_NON_TERMINAL_ARR, (0, drop_1.default)(currDef)),
-                ruleStack: newRuleStack,
-                occurrenceStack: newOccurrenceStack
-            };
-            possiblePaths.push(nextPath);
-        }
-        else if (prod instanceof gast_1.Option) {
-            // the order of alternatives is meaningful, FILO (Last path will be traversed first).
-            var nextPathWithout = {
-                idx: currIdx,
-                def: (0, drop_1.default)(currDef),
-                ruleStack: currRuleStack,
-                occurrenceStack: currOccurrenceStack
-            };
-            possiblePaths.push(nextPathWithout);
-            // required marker to avoid backtracking paths whose higher priority alternatives already matched
-            possiblePaths.push(EXIT_ALTERNATIVE);
-            var nextPathWith = {
-                idx: currIdx,
-                def: prod.definition.concat((0, drop_1.default)(currDef)),
-                ruleStack: currRuleStack,
-                occurrenceStack: currOccurrenceStack
-            };
-            possiblePaths.push(nextPathWith);
-        }
-        else if (prod instanceof gast_1.RepetitionMandatory) {
-            // TODO:(THE NEW operators here take a while...) (convert once?)
-            var secondIteration = new gast_1.Repetition({
-                definition: prod.definition,
-                idx: prod.idx
-            });
-            var nextDef = prod.definition.concat([secondIteration], (0, drop_1.default)(currDef));
-            var nextPath = {
-                idx: currIdx,
-                def: nextDef,
-                ruleStack: currRuleStack,
-                occurrenceStack: currOccurrenceStack
-            };
-            possiblePaths.push(nextPath);
-        }
-        else if (prod instanceof gast_1.RepetitionMandatoryWithSeparator) {
-            // TODO:(THE NEW operators here take a while...) (convert once?)
-            var separatorGast = new gast_1.Terminal({
-                terminalType: prod.separator
-            });
-            var secondIteration = new gast_1.Repetition({
-                definition: [separatorGast].concat(prod.definition),
-                idx: prod.idx
-            });
-            var nextDef = prod.definition.concat([secondIteration], (0, drop_1.default)(currDef));
-            var nextPath = {
-                idx: currIdx,
-                def: nextDef,
-                ruleStack: currRuleStack,
-                occurrenceStack: currOccurrenceStack
-            };
-            possiblePaths.push(nextPath);
-        }
-        else if (prod instanceof gast_1.RepetitionWithSeparator) {
-            // the order of alternatives is meaningful, FILO (Last path will be traversed first).
-            var nextPathWithout = {
-                idx: currIdx,
-                def: (0, drop_1.default)(currDef),
-                ruleStack: currRuleStack,
-                occurrenceStack: currOccurrenceStack
-            };
-            possiblePaths.push(nextPathWithout);
-            // required marker to avoid backtracking paths whose higher priority alternatives already matched
-            possiblePaths.push(EXIT_ALTERNATIVE);
-            var separatorGast = new gast_1.Terminal({
-                terminalType: prod.separator
-            });
-            var nthRepetition = new gast_1.Repetition({
-                definition: [separatorGast].concat(prod.definition),
-                idx: prod.idx
-            });
-            var nextDef = prod.definition.concat([nthRepetition], (0, drop_1.default)(currDef));
-            var nextPathWith = {
-                idx: currIdx,
-                def: nextDef,
-                ruleStack: currRuleStack,
-                occurrenceStack: currOccurrenceStack
-            };
-            possiblePaths.push(nextPathWith);
-        }
-        else if (prod instanceof gast_1.Repetition) {
-            // the order of alternatives is meaningful, FILO (Last path will be traversed first).
-            var nextPathWithout = {
-                idx: currIdx,
-                def: (0, drop_1.default)(currDef),
-                ruleStack: currRuleStack,
-                occurrenceStack: currOccurrenceStack
-            };
-            possiblePaths.push(nextPathWithout);
-            // required marker to avoid backtracking paths whose higher priority alternatives already matched
-            possiblePaths.push(EXIT_ALTERNATIVE);
-            // TODO: an empty repetition will cause infinite loops here, will the parser detect this in selfAnalysis?
-            var nthRepetition = new gast_1.Repetition({
-                definition: prod.definition,
-                idx: prod.idx
-            });
-            var nextDef = prod.definition.concat([nthRepetition], (0, drop_1.default)(currDef));
-            var nextPathWith = {
-                idx: currIdx,
-                def: nextDef,
-                ruleStack: currRuleStack,
-                occurrenceStack: currOccurrenceStack
-            };
-            possiblePaths.push(nextPathWith);
-        }
-        else if (prod instanceof gast_1.Alternation) {
-            // the order of alternatives is meaningful, FILO (Last path will be traversed first).
-            for (var i = prod.definition.length - 1; i >= 0; i--) {
-                var currAlt = prod.definition[i];
-                var currAltPath = {
-                    idx: currIdx,
-                    def: currAlt.definition.concat((0, drop_1.default)(currDef)),
-                    ruleStack: currRuleStack,
-                    occurrenceStack: currOccurrenceStack
-                };
-                possiblePaths.push(currAltPath);
-                possiblePaths.push(EXIT_ALTERNATIVE);
-            }
-        }
-        else if (prod instanceof gast_1.Alternative) {
-            possiblePaths.push({
-                idx: currIdx,
-                def: prod.definition.concat((0, drop_1.default)(currDef)),
-                ruleStack: currRuleStack,
-                occurrenceStack: currOccurrenceStack
-            });
-        }
-        else if (prod instanceof gast_1.Rule) {
-            // last because we should only encounter at most a single one of these per invocation.
-            possiblePaths.push(expandTopLevelRule(prod, currIdx, currRuleStack, currOccurrenceStack));
-        }
-        else {
-            throw Error("non exhaustive match");
-        }
-    }
-    return result;
-}
-exports.nextPossibleTokensAfter = nextPossibleTokensAfter;
-function expandTopLevelRule(topRule, currIdx, currRuleStack, currOccurrenceStack) {
-    var newRuleStack = (0, clone_1.default)(currRuleStack);
-    newRuleStack.push(topRule.name);
-    var newCurrOccurrenceStack = (0, clone_1.default)(currOccurrenceStack);
-    // top rule is always assumed to have been called with occurrence index 1
-    newCurrOccurrenceStack.push(1);
-    return {
-        idx: currIdx,
-        def: topRule.definition,
-        ruleStack: newRuleStack,
-        occurrenceStack: newCurrOccurrenceStack
-    };
-}
-//# sourceMappingURL=interpreter.js.map
-
-/***/ }),
-
-/***/ 38567:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-// Lookahead keys are 32Bit integers in the form
-// TTTTTTTT-ZZZZZZZZZZZZ-YYYY-XXXXXXXX
-// XXXX -> Occurrence Index bitmap.
-// YYYY -> DSL Method Type bitmap.
-// ZZZZZZZZZZZZZZZ -> Rule short Index bitmap.
-// TTTTTTTTT -> alternation alternative index bitmap
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.getKeyForAutomaticLookahead = exports.AT_LEAST_ONE_SEP_IDX = exports.MANY_SEP_IDX = exports.AT_LEAST_ONE_IDX = exports.MANY_IDX = exports.OPTION_IDX = exports.OR_IDX = exports.BITS_FOR_ALT_IDX = exports.BITS_FOR_RULE_IDX = exports.BITS_FOR_OCCURRENCE_IDX = exports.BITS_FOR_METHOD_TYPE = void 0;
-exports.BITS_FOR_METHOD_TYPE = 4;
-exports.BITS_FOR_OCCURRENCE_IDX = 8;
-exports.BITS_FOR_RULE_IDX = 12;
-// TODO: validation, this means that there may at most 2^8 --> 256 alternatives for an alternation.
-exports.BITS_FOR_ALT_IDX = 8;
-// short string used as part of mapping keys.
-// being short improves the performance when composing KEYS for maps out of these
-// The 5 - 8 bits (16 possible values, are reserved for the DSL method indices)
-exports.OR_IDX = 1 << exports.BITS_FOR_OCCURRENCE_IDX;
-exports.OPTION_IDX = 2 << exports.BITS_FOR_OCCURRENCE_IDX;
-exports.MANY_IDX = 3 << exports.BITS_FOR_OCCURRENCE_IDX;
-exports.AT_LEAST_ONE_IDX = 4 << exports.BITS_FOR_OCCURRENCE_IDX;
-exports.MANY_SEP_IDX = 5 << exports.BITS_FOR_OCCURRENCE_IDX;
-exports.AT_LEAST_ONE_SEP_IDX = 6 << exports.BITS_FOR_OCCURRENCE_IDX;
-// this actually returns a number, but it is always used as a string (object prop key)
-function getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) {
-    return occurrence | dslMethodIdx | ruleIdx;
-}
-exports.getKeyForAutomaticLookahead = getKeyForAutomaticLookahead;
-var BITS_START_FOR_ALT_IDX = 32 - exports.BITS_FOR_ALT_IDX;
-//# sourceMappingURL=keys.js.map
-
-/***/ }),
-
-/***/ 3449:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
-    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
-        if (ar || !(i in from)) {
-            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
-            ar[i] = from[i];
-        }
-    }
-    return to.concat(ar || Array.prototype.slice.call(from));
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.LLkLookaheadStrategy = void 0;
-var flatMap_1 = __importDefault(__webpack_require__(94654));
-var isEmpty_1 = __importDefault(__webpack_require__(41609));
-var errors_public_1 = __webpack_require__(27621);
-var parser_1 = __webpack_require__(81183);
-var checks_1 = __webpack_require__(4046);
-var lookahead_1 = __webpack_require__(63670);
-var LLkLookaheadStrategy = /** @class */ (function () {
-    function LLkLookaheadStrategy(options) {
-        var _a;
-        this.maxLookahead =
-            (_a = options === null || options === void 0 ? void 0 : options.maxLookahead) !== null && _a !== void 0 ? _a : parser_1.DEFAULT_PARSER_CONFIG.maxLookahead;
-    }
-    LLkLookaheadStrategy.prototype.validate = function (options) {
-        var leftRecursionErrors = this.validateNoLeftRecursion(options.rules);
-        if ((0, isEmpty_1.default)(leftRecursionErrors)) {
-            var emptyAltErrors = this.validateEmptyOrAlternatives(options.rules);
-            var ambiguousAltsErrors = this.validateAmbiguousAlternationAlternatives(options.rules, this.maxLookahead);
-            var emptyRepetitionErrors = this.validateSomeNonEmptyLookaheadPath(options.rules, this.maxLookahead);
-            var allErrors = __spreadArray(__spreadArray(__spreadArray(__spreadArray([], leftRecursionErrors, true), emptyAltErrors, true), ambiguousAltsErrors, true), emptyRepetitionErrors, true);
-            return allErrors;
-        }
-        return leftRecursionErrors;
-    };
-    LLkLookaheadStrategy.prototype.validateNoLeftRecursion = function (rules) {
-        return (0, flatMap_1.default)(rules, function (currTopRule) {
-            return (0, checks_1.validateNoLeftRecursion)(currTopRule, currTopRule, errors_public_1.defaultGrammarValidatorErrorProvider);
-        });
-    };
-    LLkLookaheadStrategy.prototype.validateEmptyOrAlternatives = function (rules) {
-        return (0, flatMap_1.default)(rules, function (currTopRule) {
-            return (0, checks_1.validateEmptyOrAlternative)(currTopRule, errors_public_1.defaultGrammarValidatorErrorProvider);
-        });
-    };
-    LLkLookaheadStrategy.prototype.validateAmbiguousAlternationAlternatives = function (rules, maxLookahead) {
-        return (0, flatMap_1.default)(rules, function (currTopRule) {
-            return (0, checks_1.validateAmbiguousAlternationAlternatives)(currTopRule, maxLookahead, errors_public_1.defaultGrammarValidatorErrorProvider);
-        });
-    };
-    LLkLookaheadStrategy.prototype.validateSomeNonEmptyLookaheadPath = function (rules, maxLookahead) {
-        return (0, checks_1.validateSomeNonEmptyLookaheadPath)(rules, maxLookahead, errors_public_1.defaultGrammarValidatorErrorProvider);
-    };
-    LLkLookaheadStrategy.prototype.buildLookaheadForAlternation = function (options) {
-        return (0, lookahead_1.buildLookaheadFuncForOr)(options.prodOccurrence, options.rule, options.maxLookahead, options.hasPredicates, options.dynamicTokensEnabled, lookahead_1.buildAlternativesLookAheadFunc);
-    };
-    LLkLookaheadStrategy.prototype.buildLookaheadForOptional = function (options) {
-        return (0, lookahead_1.buildLookaheadFuncForOptionalProd)(options.prodOccurrence, options.rule, options.maxLookahead, options.dynamicTokensEnabled, (0, lookahead_1.getProdType)(options.prodType), lookahead_1.buildSingleAlternativeLookaheadFunction);
-    };
-    return LLkLookaheadStrategy;
-}());
-exports.LLkLookaheadStrategy = LLkLookaheadStrategy;
-//# sourceMappingURL=llk_lookahead.js.map
-
-/***/ }),
-
-/***/ 63670:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        if (typeof b !== "function" && b !== null)
-            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.areTokenCategoriesNotUsed = exports.isStrictPrefixOfPath = exports.containsPath = exports.getLookaheadPathsForOptionalProd = exports.getLookaheadPathsForOr = exports.lookAheadSequenceFromAlternatives = exports.buildSingleAlternativeLookaheadFunction = exports.buildAlternativesLookAheadFunc = exports.buildLookaheadFuncForOptionalProd = exports.buildLookaheadFuncForOr = exports.getLookaheadPaths = exports.getProdType = exports.PROD_TYPE = void 0;
-var isEmpty_1 = __importDefault(__webpack_require__(41609));
-var flatten_1 = __importDefault(__webpack_require__(85564));
-var every_1 = __importDefault(__webpack_require__(711));
-var map_1 = __importDefault(__webpack_require__(35161));
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var has_1 = __importDefault(__webpack_require__(18721));
-var reduce_1 = __importDefault(__webpack_require__(54061));
-var interpreter_1 = __webpack_require__(6331);
-var rest_1 = __webpack_require__(20318);
-var tokens_1 = __webpack_require__(22963);
-var gast_1 = __webpack_require__(93062);
-var gast_2 = __webpack_require__(93062);
-var PROD_TYPE;
-(function (PROD_TYPE) {
-    PROD_TYPE[PROD_TYPE["OPTION"] = 0] = "OPTION";
-    PROD_TYPE[PROD_TYPE["REPETITION"] = 1] = "REPETITION";
-    PROD_TYPE[PROD_TYPE["REPETITION_MANDATORY"] = 2] = "REPETITION_MANDATORY";
-    PROD_TYPE[PROD_TYPE["REPETITION_MANDATORY_WITH_SEPARATOR"] = 3] = "REPETITION_MANDATORY_WITH_SEPARATOR";
-    PROD_TYPE[PROD_TYPE["REPETITION_WITH_SEPARATOR"] = 4] = "REPETITION_WITH_SEPARATOR";
-    PROD_TYPE[PROD_TYPE["ALTERNATION"] = 5] = "ALTERNATION";
-})(PROD_TYPE = exports.PROD_TYPE || (exports.PROD_TYPE = {}));
-function getProdType(prod) {
-    /* istanbul ignore else */
-    if (prod instanceof gast_1.Option || prod === "Option") {
-        return PROD_TYPE.OPTION;
-    }
-    else if (prod instanceof gast_1.Repetition || prod === "Repetition") {
-        return PROD_TYPE.REPETITION;
-    }
-    else if (prod instanceof gast_1.RepetitionMandatory ||
-        prod === "RepetitionMandatory") {
-        return PROD_TYPE.REPETITION_MANDATORY;
-    }
-    else if (prod instanceof gast_1.RepetitionMandatoryWithSeparator ||
-        prod === "RepetitionMandatoryWithSeparator") {
-        return PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR;
-    }
-    else if (prod instanceof gast_1.RepetitionWithSeparator ||
-        prod === "RepetitionWithSeparator") {
-        return PROD_TYPE.REPETITION_WITH_SEPARATOR;
-    }
-    else if (prod instanceof gast_1.Alternation || prod === "Alternation") {
-        return PROD_TYPE.ALTERNATION;
-    }
-    else {
-        throw Error("non exhaustive match");
-    }
-}
-exports.getProdType = getProdType;
-function getLookaheadPaths(options) {
-    var occurrence = options.occurrence, rule = options.rule, prodType = options.prodType, maxLookahead = options.maxLookahead;
-    var type = getProdType(prodType);
-    if (type === PROD_TYPE.ALTERNATION) {
-        return getLookaheadPathsForOr(occurrence, rule, maxLookahead);
-    }
-    else {
-        return getLookaheadPathsForOptionalProd(occurrence, rule, type, maxLookahead);
-    }
-}
-exports.getLookaheadPaths = getLookaheadPaths;
-function buildLookaheadFuncForOr(occurrence, ruleGrammar, maxLookahead, hasPredicates, dynamicTokensEnabled, laFuncBuilder) {
-    var lookAheadPaths = getLookaheadPathsForOr(occurrence, ruleGrammar, maxLookahead);
-    var tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)
-        ? tokens_1.tokenStructuredMatcherNoCategories
-        : tokens_1.tokenStructuredMatcher;
-    return laFuncBuilder(lookAheadPaths, hasPredicates, tokenMatcher, dynamicTokensEnabled);
-}
-exports.buildLookaheadFuncForOr = buildLookaheadFuncForOr;
-/**
- *  When dealing with an Optional production (OPTION/MANY/2nd iteration of AT_LEAST_ONE/...) we need to compare
- *  the lookahead "inside" the production and the lookahead immediately "after" it in the same top level rule (context free).
- *
- *  Example: given a production:
- *  ABC(DE)?DF
- *
- *  The optional '(DE)?' should only be entered if we see 'DE'. a single Token 'D' is not sufficient to distinguish between the two
- *  alternatives.
- *
- *  @returns A Lookahead function which will return true IFF the parser should parse the Optional production.
- */
-function buildLookaheadFuncForOptionalProd(occurrence, ruleGrammar, k, dynamicTokensEnabled, prodType, lookaheadBuilder) {
-    var lookAheadPaths = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k);
-    var tokenMatcher = areTokenCategoriesNotUsed(lookAheadPaths)
-        ? tokens_1.tokenStructuredMatcherNoCategories
-        : tokens_1.tokenStructuredMatcher;
-    return lookaheadBuilder(lookAheadPaths[0], tokenMatcher, dynamicTokensEnabled);
-}
-exports.buildLookaheadFuncForOptionalProd = buildLookaheadFuncForOptionalProd;
-function buildAlternativesLookAheadFunc(alts, hasPredicates, tokenMatcher, dynamicTokensEnabled) {
-    var numOfAlts = alts.length;
-    var areAllOneTokenLookahead = (0, every_1.default)(alts, function (currAlt) {
-        return (0, every_1.default)(currAlt, function (currPath) {
-            return currPath.length === 1;
-        });
-    });
-    // This version takes into account the predicates as well.
-    if (hasPredicates) {
-        /**
-         * @returns {number} - The chosen alternative index
-         */
-        return function (orAlts) {
-            // unfortunately the predicates must be extracted every single time
-            // as they cannot be cached due to references to parameters(vars) which are no longer valid.
-            // note that in the common case of no predicates, no cpu time will be wasted on this (see else block)
-            var predicates = (0, map_1.default)(orAlts, function (currAlt) { return currAlt.GATE; });
-            for (var t = 0; t < numOfAlts; t++) {
-                var currAlt = alts[t];
-                var currNumOfPaths = currAlt.length;
-                var currPredicate = predicates[t];
-                if (currPredicate !== undefined && currPredicate.call(this) === false) {
-                    // if the predicate does not match there is no point in checking the paths
-                    continue;
-                }
-                nextPath: for (var j = 0; j < currNumOfPaths; j++) {
-                    var currPath = currAlt[j];
-                    var currPathLength = currPath.length;
-                    for (var i = 0; i < currPathLength; i++) {
-                        var nextToken = this.LA(i + 1);
-                        if (tokenMatcher(nextToken, currPath[i]) === false) {
-                            // mismatch in current path
-                            // try the next pth
-                            continue nextPath;
-                        }
-                    }
-                    // found a full path that matches.
-                    // this will also work for an empty ALT as the loop will be skipped
-                    return t;
-                }
-                // none of the paths for the current alternative matched
-                // try the next alternative
-            }
-            // none of the alternatives could be matched
-            return undefined;
-        };
-    }
-    else if (areAllOneTokenLookahead && !dynamicTokensEnabled) {
-        // optimized (common) case of all the lookaheads paths requiring only
-        // a single token lookahead. These Optimizations cannot work if dynamically defined Tokens are used.
-        var singleTokenAlts = (0, map_1.default)(alts, function (currAlt) {
-            return (0, flatten_1.default)(currAlt);
-        });
-        var choiceToAlt_1 = (0, reduce_1.default)(singleTokenAlts, function (result, currAlt, idx) {
-            (0, forEach_1.default)(currAlt, function (currTokType) {
-                if (!(0, has_1.default)(result, currTokType.tokenTypeIdx)) {
-                    result[currTokType.tokenTypeIdx] = idx;
-                }
-                (0, forEach_1.default)(currTokType.categoryMatches, function (currExtendingType) {
-                    if (!(0, has_1.default)(result, currExtendingType)) {
-                        result[currExtendingType] = idx;
-                    }
-                });
-            });
-            return result;
-        }, {});
-        /**
-         * @returns {number} - The chosen alternative index
-         */
-        return function () {
-            var nextToken = this.LA(1);
-            return choiceToAlt_1[nextToken.tokenTypeIdx];
-        };
-    }
-    else {
-        // optimized lookahead without needing to check the predicates at all.
-        // this causes code duplication which is intentional to improve performance.
-        /**
-         * @returns {number} - The chosen alternative index
-         */
-        return function () {
-            for (var t = 0; t < numOfAlts; t++) {
-                var currAlt = alts[t];
-                var currNumOfPaths = currAlt.length;
-                nextPath: for (var j = 0; j < currNumOfPaths; j++) {
-                    var currPath = currAlt[j];
-                    var currPathLength = currPath.length;
-                    for (var i = 0; i < currPathLength; i++) {
-                        var nextToken = this.LA(i + 1);
-                        if (tokenMatcher(nextToken, currPath[i]) === false) {
-                            // mismatch in current path
-                            // try the next pth
-                            continue nextPath;
-                        }
-                    }
-                    // found a full path that matches.
-                    // this will also work for an empty ALT as the loop will be skipped
-                    return t;
-                }
-                // none of the paths for the current alternative matched
-                // try the next alternative
-            }
-            // none of the alternatives could be matched
-            return undefined;
-        };
-    }
-}
-exports.buildAlternativesLookAheadFunc = buildAlternativesLookAheadFunc;
-function buildSingleAlternativeLookaheadFunction(alt, tokenMatcher, dynamicTokensEnabled) {
-    var areAllOneTokenLookahead = (0, every_1.default)(alt, function (currPath) {
-        return currPath.length === 1;
-    });
-    var numOfPaths = alt.length;
-    // optimized (common) case of all the lookaheads paths requiring only
-    // a single token lookahead.
-    if (areAllOneTokenLookahead && !dynamicTokensEnabled) {
-        var singleTokensTypes = (0, flatten_1.default)(alt);
-        if (singleTokensTypes.length === 1 &&
-            (0, isEmpty_1.default)(singleTokensTypes[0].categoryMatches)) {
-            var expectedTokenType = singleTokensTypes[0];
-            var expectedTokenUniqueKey_1 = expectedTokenType.tokenTypeIdx;
-            return function () {
-                return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey_1;
-            };
-        }
-        else {
-            var choiceToAlt_2 = (0, reduce_1.default)(singleTokensTypes, function (result, currTokType, idx) {
-                result[currTokType.tokenTypeIdx] = true;
-                (0, forEach_1.default)(currTokType.categoryMatches, function (currExtendingType) {
-                    result[currExtendingType] = true;
-                });
-                return result;
-            }, []);
-            return function () {
-                var nextToken = this.LA(1);
-                return choiceToAlt_2[nextToken.tokenTypeIdx] === true;
-            };
-        }
-    }
-    else {
-        return function () {
-            nextPath: for (var j = 0; j < numOfPaths; j++) {
-                var currPath = alt[j];
-                var currPathLength = currPath.length;
-                for (var i = 0; i < currPathLength; i++) {
-                    var nextToken = this.LA(i + 1);
-                    if (tokenMatcher(nextToken, currPath[i]) === false) {
-                        // mismatch in current path
-                        // try the next pth
-                        continue nextPath;
-                    }
-                }
-                // found a full path that matches.
-                return true;
-            }
-            // none of the paths matched
-            return false;
-        };
-    }
-}
-exports.buildSingleAlternativeLookaheadFunction = buildSingleAlternativeLookaheadFunction;
-var RestDefinitionFinderWalker = /** @class */ (function (_super) {
-    __extends(RestDefinitionFinderWalker, _super);
-    function RestDefinitionFinderWalker(topProd, targetOccurrence, targetProdType) {
-        var _this = _super.call(this) || this;
-        _this.topProd = topProd;
-        _this.targetOccurrence = targetOccurrence;
-        _this.targetProdType = targetProdType;
-        return _this;
-    }
-    RestDefinitionFinderWalker.prototype.startWalking = function () {
-        this.walk(this.topProd);
-        return this.restDef;
-    };
-    RestDefinitionFinderWalker.prototype.checkIsTarget = function (node, expectedProdType, currRest, prevRest) {
-        if (node.idx === this.targetOccurrence &&
-            this.targetProdType === expectedProdType) {
-            this.restDef = currRest.concat(prevRest);
-            return true;
-        }
-        // performance optimization, do not iterate over the entire Grammar ast after we have found the target
-        return false;
-    };
-    RestDefinitionFinderWalker.prototype.walkOption = function (optionProd, currRest, prevRest) {
-        if (!this.checkIsTarget(optionProd, PROD_TYPE.OPTION, currRest, prevRest)) {
-            _super.prototype.walkOption.call(this, optionProd, currRest, prevRest);
-        }
-    };
-    RestDefinitionFinderWalker.prototype.walkAtLeastOne = function (atLeastOneProd, currRest, prevRest) {
-        if (!this.checkIsTarget(atLeastOneProd, PROD_TYPE.REPETITION_MANDATORY, currRest, prevRest)) {
-            _super.prototype.walkOption.call(this, atLeastOneProd, currRest, prevRest);
-        }
-    };
-    RestDefinitionFinderWalker.prototype.walkAtLeastOneSep = function (atLeastOneSepProd, currRest, prevRest) {
-        if (!this.checkIsTarget(atLeastOneSepProd, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, currRest, prevRest)) {
-            _super.prototype.walkOption.call(this, atLeastOneSepProd, currRest, prevRest);
-        }
-    };
-    RestDefinitionFinderWalker.prototype.walkMany = function (manyProd, currRest, prevRest) {
-        if (!this.checkIsTarget(manyProd, PROD_TYPE.REPETITION, currRest, prevRest)) {
-            _super.prototype.walkOption.call(this, manyProd, currRest, prevRest);
-        }
-    };
-    RestDefinitionFinderWalker.prototype.walkManySep = function (manySepProd, currRest, prevRest) {
-        if (!this.checkIsTarget(manySepProd, PROD_TYPE.REPETITION_WITH_SEPARATOR, currRest, prevRest)) {
-            _super.prototype.walkOption.call(this, manySepProd, currRest, prevRest);
-        }
-    };
-    return RestDefinitionFinderWalker;
-}(rest_1.RestWalker));
-/**
- * Returns the definition of a target production in a top level level rule.
- */
-var InsideDefinitionFinderVisitor = /** @class */ (function (_super) {
-    __extends(InsideDefinitionFinderVisitor, _super);
-    function InsideDefinitionFinderVisitor(targetOccurrence, targetProdType, targetRef) {
-        var _this = _super.call(this) || this;
-        _this.targetOccurrence = targetOccurrence;
-        _this.targetProdType = targetProdType;
-        _this.targetRef = targetRef;
-        _this.result = [];
-        return _this;
-    }
-    InsideDefinitionFinderVisitor.prototype.checkIsTarget = function (node, expectedProdName) {
-        if (node.idx === this.targetOccurrence &&
-            this.targetProdType === expectedProdName &&
-            (this.targetRef === undefined || node === this.targetRef)) {
-            this.result = node.definition;
-        }
-    };
-    InsideDefinitionFinderVisitor.prototype.visitOption = function (node) {
-        this.checkIsTarget(node, PROD_TYPE.OPTION);
-    };
-    InsideDefinitionFinderVisitor.prototype.visitRepetition = function (node) {
-        this.checkIsTarget(node, PROD_TYPE.REPETITION);
-    };
-    InsideDefinitionFinderVisitor.prototype.visitRepetitionMandatory = function (node) {
-        this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY);
-    };
-    InsideDefinitionFinderVisitor.prototype.visitRepetitionMandatoryWithSeparator = function (node) {
-        this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR);
-    };
-    InsideDefinitionFinderVisitor.prototype.visitRepetitionWithSeparator = function (node) {
-        this.checkIsTarget(node, PROD_TYPE.REPETITION_WITH_SEPARATOR);
-    };
-    InsideDefinitionFinderVisitor.prototype.visitAlternation = function (node) {
-        this.checkIsTarget(node, PROD_TYPE.ALTERNATION);
-    };
-    return InsideDefinitionFinderVisitor;
-}(gast_2.GAstVisitor));
-function initializeArrayOfArrays(size) {
-    var result = new Array(size);
-    for (var i = 0; i < size; i++) {
-        result[i] = [];
-    }
-    return result;
-}
-/**
- * A sort of hash function between a Path in the grammar and a string.
- * Note that this returns multiple "hashes" to support the scenario of token categories.
- * -  A single path with categories may match multiple **actual** paths.
- */
-function pathToHashKeys(path) {
-    var keys = [""];
-    for (var i = 0; i < path.length; i++) {
-        var tokType = path[i];
-        var longerKeys = [];
-        for (var j = 0; j < keys.length; j++) {
-            var currShorterKey = keys[j];
-            longerKeys.push(currShorterKey + "_" + tokType.tokenTypeIdx);
-            for (var t = 0; t < tokType.categoryMatches.length; t++) {
-                var categoriesKeySuffix = "_" + tokType.categoryMatches[t];
-                longerKeys.push(currShorterKey + categoriesKeySuffix);
-            }
-        }
-        keys = longerKeys;
-    }
-    return keys;
-}
-/**
- * Imperative style due to being called from a hot spot
- */
-function isUniquePrefixHash(altKnownPathsKeys, searchPathKeys, idx) {
-    for (var currAltIdx = 0; currAltIdx < altKnownPathsKeys.length; currAltIdx++) {
-        // We only want to test vs the other alternatives
-        if (currAltIdx === idx) {
-            continue;
-        }
-        var otherAltKnownPathsKeys = altKnownPathsKeys[currAltIdx];
-        for (var searchIdx = 0; searchIdx < searchPathKeys.length; searchIdx++) {
-            var searchKey = searchPathKeys[searchIdx];
-            if (otherAltKnownPathsKeys[searchKey] === true) {
-                return false;
-            }
-        }
-    }
-    // None of the SearchPathKeys were found in any of the other alternatives
-    return true;
-}
-function lookAheadSequenceFromAlternatives(altsDefs, k) {
-    var partialAlts = (0, map_1.default)(altsDefs, function (currAlt) {
-        return (0, interpreter_1.possiblePathsFrom)([currAlt], 1);
-    });
-    var finalResult = initializeArrayOfArrays(partialAlts.length);
-    var altsHashes = (0, map_1.default)(partialAlts, function (currAltPaths) {
-        var dict = {};
-        (0, forEach_1.default)(currAltPaths, function (item) {
-            var keys = pathToHashKeys(item.partialPath);
-            (0, forEach_1.default)(keys, function (currKey) {
-                dict[currKey] = true;
-            });
-        });
-        return dict;
-    });
-    var newData = partialAlts;
-    // maxLookahead loop
-    for (var pathLength = 1; pathLength <= k; pathLength++) {
-        var currDataset = newData;
-        newData = initializeArrayOfArrays(currDataset.length);
-        var _loop_1 = function (altIdx) {
-            var currAltPathsAndSuffixes = currDataset[altIdx];
-            // paths in current alternative loop
-            for (var currPathIdx = 0; currPathIdx < currAltPathsAndSuffixes.length; currPathIdx++) {
-                var currPathPrefix = currAltPathsAndSuffixes[currPathIdx].partialPath;
-                var suffixDef = currAltPathsAndSuffixes[currPathIdx].suffixDef;
-                var prefixKeys = pathToHashKeys(currPathPrefix);
-                var isUnique = isUniquePrefixHash(altsHashes, prefixKeys, altIdx);
-                // End of the line for this path.
-                if (isUnique || (0, isEmpty_1.default)(suffixDef) || currPathPrefix.length === k) {
-                    var currAltResult = finalResult[altIdx];
-                    // TODO: Can we implement a containsPath using Maps/Dictionaries?
-                    if (containsPath(currAltResult, currPathPrefix) === false) {
-                        currAltResult.push(currPathPrefix);
-                        // Update all new  keys for the current path.
-                        for (var j = 0; j < prefixKeys.length; j++) {
-                            var currKey = prefixKeys[j];
-                            altsHashes[altIdx][currKey] = true;
-                        }
-                    }
-                }
-                // Expand longer paths
-                else {
-                    var newPartialPathsAndSuffixes = (0, interpreter_1.possiblePathsFrom)(suffixDef, pathLength + 1, currPathPrefix);
-                    newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes);
-                    // Update keys for new known paths
-                    (0, forEach_1.default)(newPartialPathsAndSuffixes, function (item) {
-                        var prefixKeys = pathToHashKeys(item.partialPath);
-                        (0, forEach_1.default)(prefixKeys, function (key) {
-                            altsHashes[altIdx][key] = true;
-                        });
-                    });
-                }
-            }
-        };
-        // alternatives loop
-        for (var altIdx = 0; altIdx < currDataset.length; altIdx++) {
-            _loop_1(altIdx);
-        }
-    }
-    return finalResult;
-}
-exports.lookAheadSequenceFromAlternatives = lookAheadSequenceFromAlternatives;
-function getLookaheadPathsForOr(occurrence, ruleGrammar, k, orProd) {
-    var visitor = new InsideDefinitionFinderVisitor(occurrence, PROD_TYPE.ALTERNATION, orProd);
-    ruleGrammar.accept(visitor);
-    return lookAheadSequenceFromAlternatives(visitor.result, k);
-}
-exports.getLookaheadPathsForOr = getLookaheadPathsForOr;
-function getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k) {
-    var insideDefVisitor = new InsideDefinitionFinderVisitor(occurrence, prodType);
-    ruleGrammar.accept(insideDefVisitor);
-    var insideDef = insideDefVisitor.result;
-    var afterDefWalker = new RestDefinitionFinderWalker(ruleGrammar, occurrence, prodType);
-    var afterDef = afterDefWalker.startWalking();
-    var insideFlat = new gast_1.Alternative({ definition: insideDef });
-    var afterFlat = new gast_1.Alternative({ definition: afterDef });
-    return lookAheadSequenceFromAlternatives([insideFlat, afterFlat], k);
-}
-exports.getLookaheadPathsForOptionalProd = getLookaheadPathsForOptionalProd;
-function containsPath(alternative, searchPath) {
-    compareOtherPath: for (var i = 0; i < alternative.length; i++) {
-        var otherPath = alternative[i];
-        if (otherPath.length !== searchPath.length) {
-            continue;
-        }
-        for (var j = 0; j < otherPath.length; j++) {
-            var searchTok = searchPath[j];
-            var otherTok = otherPath[j];
-            var matchingTokens = searchTok === otherTok ||
-                otherTok.categoryMatchesMap[searchTok.tokenTypeIdx] !== undefined;
-            if (matchingTokens === false) {
-                continue compareOtherPath;
-            }
-        }
-        return true;
-    }
-    return false;
-}
-exports.containsPath = containsPath;
-function isStrictPrefixOfPath(prefix, other) {
-    return (prefix.length < other.length &&
-        (0, every_1.default)(prefix, function (tokType, idx) {
-            var otherTokType = other[idx];
-            return (tokType === otherTokType ||
-                otherTokType.categoryMatchesMap[tokType.tokenTypeIdx]);
-        }));
-}
-exports.isStrictPrefixOfPath = isStrictPrefixOfPath;
-function areTokenCategoriesNotUsed(lookAheadPaths) {
-    return (0, every_1.default)(lookAheadPaths, function (singleAltPaths) {
-        return (0, every_1.default)(singleAltPaths, function (singlePath) {
-            return (0, every_1.default)(singlePath, function (token) { return (0, isEmpty_1.default)(token.categoryMatches); });
-        });
-    });
-}
-exports.areTokenCategoriesNotUsed = areTokenCategoriesNotUsed;
-//# sourceMappingURL=lookahead.js.map
-
-/***/ }),
-
-/***/ 36671:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        if (typeof b !== "function" && b !== null)
-            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.GastRefResolverVisitor = exports.resolveGrammar = void 0;
-var parser_1 = __webpack_require__(81183);
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var values_1 = __importDefault(__webpack_require__(52628));
-var gast_1 = __webpack_require__(93062);
-function resolveGrammar(topLevels, errMsgProvider) {
-    var refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider);
-    refResolver.resolveRefs();
-    return refResolver.errors;
-}
-exports.resolveGrammar = resolveGrammar;
-var GastRefResolverVisitor = /** @class */ (function (_super) {
-    __extends(GastRefResolverVisitor, _super);
-    function GastRefResolverVisitor(nameToTopRule, errMsgProvider) {
-        var _this = _super.call(this) || this;
-        _this.nameToTopRule = nameToTopRule;
-        _this.errMsgProvider = errMsgProvider;
-        _this.errors = [];
-        return _this;
-    }
-    GastRefResolverVisitor.prototype.resolveRefs = function () {
-        var _this = this;
-        (0, forEach_1.default)((0, values_1.default)(this.nameToTopRule), function (prod) {
-            _this.currTopLevel = prod;
-            prod.accept(_this);
-        });
-    };
-    GastRefResolverVisitor.prototype.visitNonTerminal = function (node) {
-        var ref = this.nameToTopRule[node.nonTerminalName];
-        if (!ref) {
-            var msg = this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel, node);
-            this.errors.push({
-                message: msg,
-                type: parser_1.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,
-                ruleName: this.currTopLevel.name,
-                unresolvedRefName: node.nonTerminalName
-            });
-        }
-        else {
-            node.referencedRule = ref;
-        }
-    };
-    return GastRefResolverVisitor;
-}(gast_1.GAstVisitor));
-exports.GastRefResolverVisitor = GastRefResolverVisitor;
-//# sourceMappingURL=resolver.js.map
-
-/***/ }),
-
-/***/ 20318:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.RestWalker = void 0;
-var drop_1 = __importDefault(__webpack_require__(30731));
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var gast_1 = __webpack_require__(93062);
-/**
- *  A Grammar Walker that computes the "remaining" grammar "after" a productions in the grammar.
- */
-var RestWalker = /** @class */ (function () {
-    function RestWalker() {
-    }
-    RestWalker.prototype.walk = function (prod, prevRest) {
-        var _this = this;
-        if (prevRest === void 0) { prevRest = []; }
-        (0, forEach_1.default)(prod.definition, function (subProd, index) {
-            var currRest = (0, drop_1.default)(prod.definition, index + 1);
-            /* istanbul ignore else */
-            if (subProd instanceof gast_1.NonTerminal) {
-                _this.walkProdRef(subProd, currRest, prevRest);
-            }
-            else if (subProd instanceof gast_1.Terminal) {
-                _this.walkTerminal(subProd, currRest, prevRest);
-            }
-            else if (subProd instanceof gast_1.Alternative) {
-                _this.walkFlat(subProd, currRest, prevRest);
-            }
-            else if (subProd instanceof gast_1.Option) {
-                _this.walkOption(subProd, currRest, prevRest);
-            }
-            else if (subProd instanceof gast_1.RepetitionMandatory) {
-                _this.walkAtLeastOne(subProd, currRest, prevRest);
-            }
-            else if (subProd instanceof gast_1.RepetitionMandatoryWithSeparator) {
-                _this.walkAtLeastOneSep(subProd, currRest, prevRest);
-            }
-            else if (subProd instanceof gast_1.RepetitionWithSeparator) {
-                _this.walkManySep(subProd, currRest, prevRest);
-            }
-            else if (subProd instanceof gast_1.Repetition) {
-                _this.walkMany(subProd, currRest, prevRest);
-            }
-            else if (subProd instanceof gast_1.Alternation) {
-                _this.walkOr(subProd, currRest, prevRest);
-            }
-            else {
-                throw Error("non exhaustive match");
-            }
-        });
-    };
-    RestWalker.prototype.walkTerminal = function (terminal, currRest, prevRest) { };
-    RestWalker.prototype.walkProdRef = function (refProd, currRest, prevRest) { };
-    RestWalker.prototype.walkFlat = function (flatProd, currRest, prevRest) {
-        // ABCDEF => after the D the rest is EF
-        var fullOrRest = currRest.concat(prevRest);
-        this.walk(flatProd, fullOrRest);
-    };
-    RestWalker.prototype.walkOption = function (optionProd, currRest, prevRest) {
-        // ABC(DE)?F => after the (DE)? the rest is F
-        var fullOrRest = currRest.concat(prevRest);
-        this.walk(optionProd, fullOrRest);
-    };
-    RestWalker.prototype.walkAtLeastOne = function (atLeastOneProd, currRest, prevRest) {
-        // ABC(DE)+F => after the (DE)+ the rest is (DE)?F
-        var fullAtLeastOneRest = [
-            new gast_1.Option({ definition: atLeastOneProd.definition })
-        ].concat(currRest, prevRest);
-        this.walk(atLeastOneProd, fullAtLeastOneRest);
-    };
-    RestWalker.prototype.walkAtLeastOneSep = function (atLeastOneSepProd, currRest, prevRest) {
-        // ABC DE(,DE)* F => after the (,DE)+ the rest is (,DE)?F
-        var fullAtLeastOneSepRest = restForRepetitionWithSeparator(atLeastOneSepProd, currRest, prevRest);
-        this.walk(atLeastOneSepProd, fullAtLeastOneSepRest);
-    };
-    RestWalker.prototype.walkMany = function (manyProd, currRest, prevRest) {
-        // ABC(DE)*F => after the (DE)* the rest is (DE)?F
-        var fullManyRest = [
-            new gast_1.Option({ definition: manyProd.definition })
-        ].concat(currRest, prevRest);
-        this.walk(manyProd, fullManyRest);
-    };
-    RestWalker.prototype.walkManySep = function (manySepProd, currRest, prevRest) {
-        // ABC (DE(,DE)*)? F => after the (,DE)* the rest is (,DE)?F
-        var fullManySepRest = restForRepetitionWithSeparator(manySepProd, currRest, prevRest);
-        this.walk(manySepProd, fullManySepRest);
-    };
-    RestWalker.prototype.walkOr = function (orProd, currRest, prevRest) {
-        var _this = this;
-        // ABC(D|E|F)G => when finding the (D|E|F) the rest is G
-        var fullOrRest = currRest.concat(prevRest);
-        // walk all different alternatives
-        (0, forEach_1.default)(orProd.definition, function (alt) {
-            // wrapping each alternative in a single definition wrapper
-            // to avoid errors in computing the rest of that alternative in the invocation to computeInProdFollows
-            // (otherwise for OR([alt1,alt2]) alt2 will be considered in 'rest' of alt1
-            var prodWrapper = new gast_1.Alternative({ definition: [alt] });
-            _this.walk(prodWrapper, fullOrRest);
-        });
-    };
-    return RestWalker;
-}());
-exports.RestWalker = RestWalker;
-function restForRepetitionWithSeparator(repSepProd, currRest, prevRest) {
-    var repSepRest = [
-        new gast_1.Option({
-            definition: [
-                new gast_1.Terminal({ terminalType: repSepProd.separator })
-            ].concat(repSepProd.definition)
-        })
-    ];
-    var fullRepSepRest = repSepRest.concat(currRest, prevRest);
-    return fullRepSepRest;
-}
-//# sourceMappingURL=rest.js.map
-
-/***/ }),
-
-/***/ 81183:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        if (typeof b !== "function" && b !== null)
-            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.EmbeddedActionsParser = exports.CstParser = exports.Parser = exports.EMPTY_ALT = exports.ParserDefinitionErrorType = exports.DEFAULT_RULE_CONFIG = exports.DEFAULT_PARSER_CONFIG = exports.END_OF_FILE = void 0;
-var isEmpty_1 = __importDefault(__webpack_require__(41609));
-var map_1 = __importDefault(__webpack_require__(35161));
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var values_1 = __importDefault(__webpack_require__(52628));
-var has_1 = __importDefault(__webpack_require__(18721));
-var clone_1 = __importDefault(__webpack_require__(66678));
-var utils_1 = __webpack_require__(68877);
-var follow_1 = __webpack_require__(89476);
-var tokens_public_1 = __webpack_require__(58980);
-var errors_public_1 = __webpack_require__(27621);
-var gast_resolver_public_1 = __webpack_require__(65143);
-var recoverable_1 = __webpack_require__(35786);
-var looksahead_1 = __webpack_require__(44421);
-var tree_builder_1 = __webpack_require__(50943);
-var lexer_adapter_1 = __webpack_require__(81540);
-var recognizer_api_1 = __webpack_require__(70951);
-var recognizer_engine_1 = __webpack_require__(42691);
-var error_handler_1 = __webpack_require__(8205);
-var context_assist_1 = __webpack_require__(13701);
-var gast_recorder_1 = __webpack_require__(93398);
-var perf_tracer_1 = __webpack_require__(46427);
-var apply_mixins_1 = __webpack_require__(14989);
-var checks_1 = __webpack_require__(4046);
-exports.END_OF_FILE = (0, tokens_public_1.createTokenInstance)(tokens_public_1.EOF, "", NaN, NaN, NaN, NaN, NaN, NaN);
-Object.freeze(exports.END_OF_FILE);
-exports.DEFAULT_PARSER_CONFIG = Object.freeze({
-    recoveryEnabled: false,
-    maxLookahead: 3,
-    dynamicTokensEnabled: false,
-    outputCst: true,
-    errorMessageProvider: errors_public_1.defaultParserErrorProvider,
-    nodeLocationTracking: "none",
-    traceInitPerf: false,
-    skipValidations: false
-});
-exports.DEFAULT_RULE_CONFIG = Object.freeze({
-    recoveryValueFunc: function () { return undefined; },
-    resyncEnabled: true
-});
-var ParserDefinitionErrorType;
-(function (ParserDefinitionErrorType) {
-    ParserDefinitionErrorType[ParserDefinitionErrorType["INVALID_RULE_NAME"] = 0] = "INVALID_RULE_NAME";
-    ParserDefinitionErrorType[ParserDefinitionErrorType["DUPLICATE_RULE_NAME"] = 1] = "DUPLICATE_RULE_NAME";
-    ParserDefinitionErrorType[ParserDefinitionErrorType["INVALID_RULE_OVERRIDE"] = 2] = "INVALID_RULE_OVERRIDE";
-    ParserDefinitionErrorType[ParserDefinitionErrorType["DUPLICATE_PRODUCTIONS"] = 3] = "DUPLICATE_PRODUCTIONS";
-    ParserDefinitionErrorType[ParserDefinitionErrorType["UNRESOLVED_SUBRULE_REF"] = 4] = "UNRESOLVED_SUBRULE_REF";
-    ParserDefinitionErrorType[ParserDefinitionErrorType["LEFT_RECURSION"] = 5] = "LEFT_RECURSION";
-    ParserDefinitionErrorType[ParserDefinitionErrorType["NONE_LAST_EMPTY_ALT"] = 6] = "NONE_LAST_EMPTY_ALT";
-    ParserDefinitionErrorType[ParserDefinitionErrorType["AMBIGUOUS_ALTS"] = 7] = "AMBIGUOUS_ALTS";
-    ParserDefinitionErrorType[ParserDefinitionErrorType["CONFLICT_TOKENS_RULES_NAMESPACE"] = 8] = "CONFLICT_TOKENS_RULES_NAMESPACE";
-    ParserDefinitionErrorType[ParserDefinitionErrorType["INVALID_TOKEN_NAME"] = 9] = "INVALID_TOKEN_NAME";
-    ParserDefinitionErrorType[ParserDefinitionErrorType["NO_NON_EMPTY_LOOKAHEAD"] = 10] = "NO_NON_EMPTY_LOOKAHEAD";
-    ParserDefinitionErrorType[ParserDefinitionErrorType["AMBIGUOUS_PREFIX_ALTS"] = 11] = "AMBIGUOUS_PREFIX_ALTS";
-    ParserDefinitionErrorType[ParserDefinitionErrorType["TOO_MANY_ALTS"] = 12] = "TOO_MANY_ALTS";
-    ParserDefinitionErrorType[ParserDefinitionErrorType["CUSTOM_LOOKAHEAD_VALIDATION"] = 13] = "CUSTOM_LOOKAHEAD_VALIDATION";
-})(ParserDefinitionErrorType = exports.ParserDefinitionErrorType || (exports.ParserDefinitionErrorType = {}));
-function EMPTY_ALT(value) {
-    if (value === void 0) { value = undefined; }
-    return function () {
-        return value;
-    };
-}
-exports.EMPTY_ALT = EMPTY_ALT;
-var Parser = /** @class */ (function () {
-    function Parser(tokenVocabulary, config) {
-        this.definitionErrors = [];
-        this.selfAnalysisDone = false;
-        var that = this;
-        that.initErrorHandler(config);
-        that.initLexerAdapter();
-        that.initLooksAhead(config);
-        that.initRecognizerEngine(tokenVocabulary, config);
-        that.initRecoverable(config);
-        that.initTreeBuilder(config);
-        that.initContentAssist();
-        that.initGastRecorder(config);
-        that.initPerformanceTracer(config);
-        if ((0, has_1.default)(config, "ignoredIssues")) {
-            throw new Error("The <ignoredIssues> IParserConfig property has been deprecated.\n\t" +
-                "Please use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n\t" +
-                "See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n\t" +
-                "For further details.");
-        }
-        this.skipValidations = (0, has_1.default)(config, "skipValidations")
-            ? config.skipValidations // casting assumes the end user passing the correct type
-            : exports.DEFAULT_PARSER_CONFIG.skipValidations;
-    }
-    /**
-     *  @deprecated use the **instance** method with the same name instead
-     */
-    Parser.performSelfAnalysis = function (parserInstance) {
-        throw Error("The **static** `performSelfAnalysis` method has been deprecated." +
-            "\t\nUse the **instance** method with the same name instead.");
-    };
-    Parser.prototype.performSelfAnalysis = function () {
-        var _this = this;
-        this.TRACE_INIT("performSelfAnalysis", function () {
-            var defErrorsMsgs;
-            _this.selfAnalysisDone = true;
-            var className = _this.className;
-            _this.TRACE_INIT("toFastProps", function () {
-                // Without this voodoo magic the parser would be x3-x4 slower
-                // It seems it is better to invoke `toFastProperties` **before**
-                // Any manipulations of the `this` object done during the recording phase.
-                (0, utils_1.toFastProperties)(_this);
-            });
-            _this.TRACE_INIT("Grammar Recording", function () {
-                try {
-                    _this.enableRecording();
-                    // Building the GAST
-                    (0, forEach_1.default)(_this.definedRulesNames, function (currRuleName) {
-                        var wrappedRule = _this[currRuleName];
-                        var originalGrammarAction = wrappedRule["originalGrammarAction"];
-                        var recordedRuleGast;
-                        _this.TRACE_INIT("".concat(currRuleName, " Rule"), function () {
-                            recordedRuleGast = _this.topLevelRuleRecord(currRuleName, originalGrammarAction);
-                        });
-                        _this.gastProductionsCache[currRuleName] = recordedRuleGast;
-                    });
-                }
-                finally {
-                    _this.disableRecording();
-                }
-            });
-            var resolverErrors = [];
-            _this.TRACE_INIT("Grammar Resolving", function () {
-                resolverErrors = (0, gast_resolver_public_1.resolveGrammar)({
-                    rules: (0, values_1.default)(_this.gastProductionsCache)
-                });
-                _this.definitionErrors = _this.definitionErrors.concat(resolverErrors);
-            });
-            _this.TRACE_INIT("Grammar Validations", function () {
-                // only perform additional grammar validations IFF no resolving errors have occurred.
-                // as unresolved grammar may lead to unhandled runtime exceptions in the follow up validations.
-                if ((0, isEmpty_1.default)(resolverErrors) && _this.skipValidations === false) {
-                    var validationErrors = (0, gast_resolver_public_1.validateGrammar)({
-                        rules: (0, values_1.default)(_this.gastProductionsCache),
-                        tokenTypes: (0, values_1.default)(_this.tokensMap),
-                        errMsgProvider: errors_public_1.defaultGrammarValidatorErrorProvider,
-                        grammarName: className
-                    });
-                    var lookaheadValidationErrors = (0, checks_1.validateLookahead)({
-                        lookaheadStrategy: _this.lookaheadStrategy,
-                        rules: (0, values_1.default)(_this.gastProductionsCache),
-                        tokenTypes: (0, values_1.default)(_this.tokensMap),
-                        grammarName: className
-                    });
-                    _this.definitionErrors = _this.definitionErrors.concat(validationErrors, lookaheadValidationErrors);
-                }
-            });
-            // this analysis may fail if the grammar is not perfectly valid
-            if ((0, isEmpty_1.default)(_this.definitionErrors)) {
-                // The results of these computations are not needed unless error recovery is enabled.
-                if (_this.recoveryEnabled) {
-                    _this.TRACE_INIT("computeAllProdsFollows", function () {
-                        var allFollows = (0, follow_1.computeAllProdsFollows)((0, values_1.default)(_this.gastProductionsCache));
-                        _this.resyncFollows = allFollows;
-                    });
-                }
-                _this.TRACE_INIT("ComputeLookaheadFunctions", function () {
-                    var _a, _b;
-                    (_b = (_a = _this.lookaheadStrategy).initialize) === null || _b === void 0 ? void 0 : _b.call(_a, {
-                        rules: (0, values_1.default)(_this.gastProductionsCache)
-                    });
-                    _this.preComputeLookaheadFunctions((0, values_1.default)(_this.gastProductionsCache));
-                });
-            }
-            if (!Parser.DEFER_DEFINITION_ERRORS_HANDLING &&
-                !(0, isEmpty_1.default)(_this.definitionErrors)) {
-                defErrorsMsgs = (0, map_1.default)(_this.definitionErrors, function (defError) { return defError.message; });
-                throw new Error("Parser Definition Errors detected:\n ".concat(defErrorsMsgs.join("\n-------------------------------\n")));
-            }
-        });
-    };
-    // Set this flag to true if you don't want the Parser to throw error when problems in it's definition are detected.
-    // (normally during the parser's constructor).
-    // This is a design time flag, it will not affect the runtime error handling of the parser, just design time errors,
-    // for example: duplicate rule names, referencing an unresolved subrule, ect...
-    // This flag should not be enabled during normal usage, it is used in special situations, for example when
-    // needing to display the parser definition errors in some GUI(online playground).
-    Parser.DEFER_DEFINITION_ERRORS_HANDLING = false;
-    return Parser;
-}());
-exports.Parser = Parser;
-(0, apply_mixins_1.applyMixins)(Parser, [
-    recoverable_1.Recoverable,
-    looksahead_1.LooksAhead,
-    tree_builder_1.TreeBuilder,
-    lexer_adapter_1.LexerAdapter,
-    recognizer_engine_1.RecognizerEngine,
-    recognizer_api_1.RecognizerApi,
-    error_handler_1.ErrorHandler,
-    context_assist_1.ContentAssist,
-    gast_recorder_1.GastRecorder,
-    perf_tracer_1.PerformanceTracer
-]);
-var CstParser = /** @class */ (function (_super) {
-    __extends(CstParser, _super);
-    function CstParser(tokenVocabulary, config) {
-        if (config === void 0) { config = exports.DEFAULT_PARSER_CONFIG; }
-        var configClone = (0, clone_1.default)(config);
-        configClone.outputCst = true;
-        return _super.call(this, tokenVocabulary, configClone) || this;
-    }
-    return CstParser;
-}(Parser));
-exports.CstParser = CstParser;
-var EmbeddedActionsParser = /** @class */ (function (_super) {
-    __extends(EmbeddedActionsParser, _super);
-    function EmbeddedActionsParser(tokenVocabulary, config) {
-        if (config === void 0) { config = exports.DEFAULT_PARSER_CONFIG; }
-        var configClone = (0, clone_1.default)(config);
-        configClone.outputCst = false;
-        return _super.call(this, tokenVocabulary, configClone) || this;
-    }
-    return EmbeddedActionsParser;
-}(Parser));
-exports.EmbeddedActionsParser = EmbeddedActionsParser;
-//# sourceMappingURL=parser.js.map
-
-/***/ }),
-
-/***/ 13701:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.ContentAssist = void 0;
-var interpreter_1 = __webpack_require__(6331);
-var first_1 = __importDefault(__webpack_require__(8804));
-var isUndefined_1 = __importDefault(__webpack_require__(52353));
-var ContentAssist = /** @class */ (function () {
-    function ContentAssist() {
-    }
-    ContentAssist.prototype.initContentAssist = function () { };
-    ContentAssist.prototype.computeContentAssist = function (startRuleName, precedingInput) {
-        var startRuleGast = this.gastProductionsCache[startRuleName];
-        if ((0, isUndefined_1.default)(startRuleGast)) {
-            throw Error("Rule ->".concat(startRuleName, "<- does not exist in this grammar."));
-        }
-        return (0, interpreter_1.nextPossibleTokensAfter)([startRuleGast], precedingInput, this.tokenMatcher, this.maxLookahead);
-    };
-    // TODO: should this be a member method or a utility? it does not have any state or usage of 'this'...
-    // TODO: should this be more explicitly part of the public API?
-    ContentAssist.prototype.getNextPossibleTokenTypes = function (grammarPath) {
-        var topRuleName = (0, first_1.default)(grammarPath.ruleStack);
-        var gastProductions = this.getGAstProductions();
-        var topProduction = gastProductions[topRuleName];
-        var nextPossibleTokenTypes = new interpreter_1.NextAfterTokenWalker(topProduction, grammarPath).startWalking();
-        return nextPossibleTokenTypes;
-    };
-    return ContentAssist;
-}());
-exports.ContentAssist = ContentAssist;
-//# sourceMappingURL=context_assist.js.map
-
-/***/ }),
-
-/***/ 8205:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.ErrorHandler = void 0;
-var exceptions_public_1 = __webpack_require__(34400);
-var has_1 = __importDefault(__webpack_require__(18721));
-var clone_1 = __importDefault(__webpack_require__(66678));
-var lookahead_1 = __webpack_require__(63670);
-var parser_1 = __webpack_require__(81183);
-/**
- * Trait responsible for runtime parsing errors.
- */
-var ErrorHandler = /** @class */ (function () {
-    function ErrorHandler() {
-    }
-    ErrorHandler.prototype.initErrorHandler = function (config) {
-        this._errors = [];
-        this.errorMessageProvider = (0, has_1.default)(config, "errorMessageProvider")
-            ? config.errorMessageProvider // assumes end user provides the correct config value/type
-            : parser_1.DEFAULT_PARSER_CONFIG.errorMessageProvider;
-    };
-    ErrorHandler.prototype.SAVE_ERROR = function (error) {
-        if ((0, exceptions_public_1.isRecognitionException)(error)) {
-            error.context = {
-                ruleStack: this.getHumanReadableRuleStack(),
-                ruleOccurrenceStack: (0, clone_1.default)(this.RULE_OCCURRENCE_STACK)
-            };
-            this._errors.push(error);
-            return error;
-        }
-        else {
-            throw Error("Trying to save an Error which is not a RecognitionException");
-        }
-    };
-    Object.defineProperty(ErrorHandler.prototype, "errors", {
-        get: function () {
-            return (0, clone_1.default)(this._errors);
-        },
-        set: function (newErrors) {
-            this._errors = newErrors;
-        },
-        enumerable: false,
-        configurable: true
-    });
-    // TODO: consider caching the error message computed information
-    ErrorHandler.prototype.raiseEarlyExitException = function (occurrence, prodType, userDefinedErrMsg) {
-        var ruleName = this.getCurrRuleFullName();
-        var ruleGrammar = this.getGAstProductions()[ruleName];
-        var lookAheadPathsPerAlternative = (0, lookahead_1.getLookaheadPathsForOptionalProd)(occurrence, ruleGrammar, prodType, this.maxLookahead);
-        var insideProdPaths = lookAheadPathsPerAlternative[0];
-        var actualTokens = [];
-        for (var i = 1; i <= this.maxLookahead; i++) {
-            actualTokens.push(this.LA(i));
-        }
-        var msg = this.errorMessageProvider.buildEarlyExitMessage({
-            expectedIterationPaths: insideProdPaths,
-            actual: actualTokens,
-            previous: this.LA(0),
-            customUserDescription: userDefinedErrMsg,
-            ruleName: ruleName
-        });
-        throw this.SAVE_ERROR(new exceptions_public_1.EarlyExitException(msg, this.LA(1), this.LA(0)));
-    };
-    // TODO: consider caching the error message computed information
-    ErrorHandler.prototype.raiseNoAltException = function (occurrence, errMsgTypes) {
-        var ruleName = this.getCurrRuleFullName();
-        var ruleGrammar = this.getGAstProductions()[ruleName];
-        // TODO: getLookaheadPathsForOr can be slow for large enough maxLookahead and certain grammars, consider caching ?
-        var lookAheadPathsPerAlternative = (0, lookahead_1.getLookaheadPathsForOr)(occurrence, ruleGrammar, this.maxLookahead);
-        var actualTokens = [];
-        for (var i = 1; i <= this.maxLookahead; i++) {
-            actualTokens.push(this.LA(i));
-        }
-        var previousToken = this.LA(0);
-        var errMsg = this.errorMessageProvider.buildNoViableAltMessage({
-            expectedPathsPerAlt: lookAheadPathsPerAlternative,
-            actual: actualTokens,
-            previous: previousToken,
-            customUserDescription: errMsgTypes,
-            ruleName: this.getCurrRuleFullName()
-        });
-        throw this.SAVE_ERROR(new exceptions_public_1.NoViableAltException(errMsg, this.LA(1), previousToken));
-    };
-    return ErrorHandler;
-}());
-exports.ErrorHandler = ErrorHandler;
-//# sourceMappingURL=error_handler.js.map
-
-/***/ }),
-
-/***/ 93398:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.GastRecorder = void 0;
-var last_1 = __importDefault(__webpack_require__(10928));
-var isArray_1 = __importDefault(__webpack_require__(1469));
-var some_1 = __importDefault(__webpack_require__(59704));
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var isFunction_1 = __importDefault(__webpack_require__(23560));
-var has_1 = __importDefault(__webpack_require__(18721));
-var gast_1 = __webpack_require__(93062);
-var lexer_public_1 = __webpack_require__(88200);
-var tokens_1 = __webpack_require__(22963);
-var tokens_public_1 = __webpack_require__(58980);
-var parser_1 = __webpack_require__(81183);
-var keys_1 = __webpack_require__(38567);
-var RECORDING_NULL_OBJECT = {
-    description: "This Object indicates the Parser is during Recording Phase"
-};
-Object.freeze(RECORDING_NULL_OBJECT);
-var HANDLE_SEPARATOR = true;
-var MAX_METHOD_IDX = Math.pow(2, keys_1.BITS_FOR_OCCURRENCE_IDX) - 1;
-var RFT = (0, tokens_public_1.createToken)({ name: "RECORDING_PHASE_TOKEN", pattern: lexer_public_1.Lexer.NA });
-(0, tokens_1.augmentTokenTypes)([RFT]);
-var RECORDING_PHASE_TOKEN = (0, tokens_public_1.createTokenInstance)(RFT, "This IToken indicates the Parser is in Recording Phase\n\t" +
-    "" +
-    "See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details", 
-// Using "-1" instead of NaN (as in EOF) because an actual number is less likely to
-// cause errors if the output of LA or CONSUME would be (incorrectly) used during the recording phase.
--1, -1, -1, -1, -1, -1);
-Object.freeze(RECORDING_PHASE_TOKEN);
-var RECORDING_PHASE_CSTNODE = {
-    name: "This CSTNode indicates the Parser is in Recording Phase\n\t" +
-        "See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details",
-    children: {}
-};
-/**
- * This trait handles the creation of the GAST structure for Chevrotain Grammars
- */
-var GastRecorder = /** @class */ (function () {
-    function GastRecorder() {
-    }
-    GastRecorder.prototype.initGastRecorder = function (config) {
-        this.recordingProdStack = [];
-        this.RECORDING_PHASE = false;
-    };
-    GastRecorder.prototype.enableRecording = function () {
-        var _this = this;
-        this.RECORDING_PHASE = true;
-        this.TRACE_INIT("Enable Recording", function () {
-            var _loop_1 = function (i) {
-                var idx = i > 0 ? i : "";
-                _this["CONSUME".concat(idx)] = function (arg1, arg2) {
-                    return this.consumeInternalRecord(arg1, i, arg2);
-                };
-                _this["SUBRULE".concat(idx)] = function (arg1, arg2) {
-                    return this.subruleInternalRecord(arg1, i, arg2);
-                };
-                _this["OPTION".concat(idx)] = function (arg1) {
-                    return this.optionInternalRecord(arg1, i);
-                };
-                _this["OR".concat(idx)] = function (arg1) {
-                    return this.orInternalRecord(arg1, i);
-                };
-                _this["MANY".concat(idx)] = function (arg1) {
-                    this.manyInternalRecord(i, arg1);
-                };
-                _this["MANY_SEP".concat(idx)] = function (arg1) {
-                    this.manySepFirstInternalRecord(i, arg1);
-                };
-                _this["AT_LEAST_ONE".concat(idx)] = function (arg1) {
-                    this.atLeastOneInternalRecord(i, arg1);
-                };
-                _this["AT_LEAST_ONE_SEP".concat(idx)] = function (arg1) {
-                    this.atLeastOneSepFirstInternalRecord(i, arg1);
-                };
-            };
-            /**
-             * Warning Dark Voodoo Magic upcoming!
-             * We are "replacing" the public parsing DSL methods API
-             * With **new** alternative implementations on the Parser **instance**
-             *
-             * So far this is the only way I've found to avoid performance regressions during parsing time.
-             * - Approx 30% performance regression was measured on Chrome 75 Canary when attempting to replace the "internal"
-             *   implementations directly instead.
-             */
-            for (var i = 0; i < 10; i++) {
-                _loop_1(i);
-            }
-            // DSL methods with the idx(suffix) as an argument
-            _this["consume"] = function (idx, arg1, arg2) {
-                return this.consumeInternalRecord(arg1, idx, arg2);
-            };
-            _this["subrule"] = function (idx, arg1, arg2) {
-                return this.subruleInternalRecord(arg1, idx, arg2);
-            };
-            _this["option"] = function (idx, arg1) {
-                return this.optionInternalRecord(arg1, idx);
-            };
-            _this["or"] = function (idx, arg1) {
-                return this.orInternalRecord(arg1, idx);
-            };
-            _this["many"] = function (idx, arg1) {
-                this.manyInternalRecord(idx, arg1);
-            };
-            _this["atLeastOne"] = function (idx, arg1) {
-                this.atLeastOneInternalRecord(idx, arg1);
-            };
-            _this.ACTION = _this.ACTION_RECORD;
-            _this.BACKTRACK = _this.BACKTRACK_RECORD;
-            _this.LA = _this.LA_RECORD;
-        });
-    };
-    GastRecorder.prototype.disableRecording = function () {
-        var _this = this;
-        this.RECORDING_PHASE = false;
-        // By deleting these **instance** properties, any future invocation
-        // will be deferred to the original methods on the **prototype** object
-        // This seems to get rid of any incorrect optimizations that V8 may
-        // do during the recording phase.
-        this.TRACE_INIT("Deleting Recording methods", function () {
-            var that = _this;
-            for (var i = 0; i < 10; i++) {
-                var idx = i > 0 ? i : "";
-                delete that["CONSUME".concat(idx)];
-                delete that["SUBRULE".concat(idx)];
-                delete that["OPTION".concat(idx)];
-                delete that["OR".concat(idx)];
-                delete that["MANY".concat(idx)];
-                delete that["MANY_SEP".concat(idx)];
-                delete that["AT_LEAST_ONE".concat(idx)];
-                delete that["AT_LEAST_ONE_SEP".concat(idx)];
-            }
-            delete that["consume"];
-            delete that["subrule"];
-            delete that["option"];
-            delete that["or"];
-            delete that["many"];
-            delete that["atLeastOne"];
-            delete that.ACTION;
-            delete that.BACKTRACK;
-            delete that.LA;
-        });
-    };
-    //   Parser methods are called inside an ACTION?
-    //   Maybe try/catch/finally on ACTIONS while disabling the recorders state changes?
-    // @ts-expect-error -- noop place holder
-    GastRecorder.prototype.ACTION_RECORD = function (impl) {
-        // NO-OP during recording
-    };
-    // Executing backtracking logic will break our recording logic assumptions
-    GastRecorder.prototype.BACKTRACK_RECORD = function (grammarRule, args) {
-        return function () { return true; };
-    };
-    // LA is part of the official API and may be used for custom lookahead logic
-    // by end users who may forget to wrap it in ACTION or inside a GATE
-    GastRecorder.prototype.LA_RECORD = function (howMuch) {
-        // We cannot use the RECORD_PHASE_TOKEN here because someone may depend
-        // On LA return EOF at the end of the input so an infinite loop may occur.
-        return parser_1.END_OF_FILE;
-    };
-    GastRecorder.prototype.topLevelRuleRecord = function (name, def) {
-        try {
-            var newTopLevelRule = new gast_1.Rule({ definition: [], name: name });
-            newTopLevelRule.name = name;
-            this.recordingProdStack.push(newTopLevelRule);
-            def.call(this);
-            this.recordingProdStack.pop();
-            return newTopLevelRule;
-        }
-        catch (originalError) {
-            if (originalError.KNOWN_RECORDER_ERROR !== true) {
-                try {
-                    originalError.message =
-                        originalError.message +
-                            '\n\t This error was thrown during the "grammar recording phase" For more info see:\n\t' +
-                            "https://chevrotain.io/docs/guide/internals.html#grammar-recording";
-                }
-                catch (mutabilityError) {
-                    // We may not be able to modify the original error object
-                    throw originalError;
-                }
-            }
-            throw originalError;
-        }
-    };
-    // Implementation of parsing DSL
-    GastRecorder.prototype.optionInternalRecord = function (actionORMethodDef, occurrence) {
-        return recordProd.call(this, gast_1.Option, actionORMethodDef, occurrence);
-    };
-    GastRecorder.prototype.atLeastOneInternalRecord = function (occurrence, actionORMethodDef) {
-        recordProd.call(this, gast_1.RepetitionMandatory, actionORMethodDef, occurrence);
-    };
-    GastRecorder.prototype.atLeastOneSepFirstInternalRecord = function (occurrence, options) {
-        recordProd.call(this, gast_1.RepetitionMandatoryWithSeparator, options, occurrence, HANDLE_SEPARATOR);
-    };
-    GastRecorder.prototype.manyInternalRecord = function (occurrence, actionORMethodDef) {
-        recordProd.call(this, gast_1.Repetition, actionORMethodDef, occurrence);
-    };
-    GastRecorder.prototype.manySepFirstInternalRecord = function (occurrence, options) {
-        recordProd.call(this, gast_1.RepetitionWithSeparator, options, occurrence, HANDLE_SEPARATOR);
-    };
-    GastRecorder.prototype.orInternalRecord = function (altsOrOpts, occurrence) {
-        return recordOrProd.call(this, altsOrOpts, occurrence);
-    };
-    GastRecorder.prototype.subruleInternalRecord = function (ruleToCall, occurrence, options) {
-        assertMethodIdxIsValid(occurrence);
-        if (!ruleToCall || (0, has_1.default)(ruleToCall, "ruleName") === false) {
-            var error = new Error("<SUBRULE".concat(getIdxSuffix(occurrence), "> argument is invalid") +
-                " expecting a Parser method reference but got: <".concat(JSON.stringify(ruleToCall), ">") +
-                "\n inside top level rule: <".concat(this.recordingProdStack[0].name, ">"));
-            error.KNOWN_RECORDER_ERROR = true;
-            throw error;
-        }
-        var prevProd = (0, last_1.default)(this.recordingProdStack);
-        var ruleName = ruleToCall.ruleName;
-        var newNoneTerminal = new gast_1.NonTerminal({
-            idx: occurrence,
-            nonTerminalName: ruleName,
-            label: options === null || options === void 0 ? void 0 : options.LABEL,
-            // The resolving of the `referencedRule` property will be done once all the Rule's GASTs have been created
-            referencedRule: undefined
-        });
-        prevProd.definition.push(newNoneTerminal);
-        return this.outputCst ? RECORDING_PHASE_CSTNODE : RECORDING_NULL_OBJECT;
-    };
-    GastRecorder.prototype.consumeInternalRecord = function (tokType, occurrence, options) {
-        assertMethodIdxIsValid(occurrence);
-        if (!(0, tokens_1.hasShortKeyProperty)(tokType)) {
-            var error = new Error("<CONSUME".concat(getIdxSuffix(occurrence), "> argument is invalid") +
-                " expecting a TokenType reference but got: <".concat(JSON.stringify(tokType), ">") +
-                "\n inside top level rule: <".concat(this.recordingProdStack[0].name, ">"));
-            error.KNOWN_RECORDER_ERROR = true;
-            throw error;
-        }
-        var prevProd = (0, last_1.default)(this.recordingProdStack);
-        var newNoneTerminal = new gast_1.Terminal({
-            idx: occurrence,
-            terminalType: tokType,
-            label: options === null || options === void 0 ? void 0 : options.LABEL
-        });
-        prevProd.definition.push(newNoneTerminal);
-        return RECORDING_PHASE_TOKEN;
-    };
-    return GastRecorder;
-}());
-exports.GastRecorder = GastRecorder;
-function recordProd(prodConstructor, mainProdArg, occurrence, handleSep) {
-    if (handleSep === void 0) { handleSep = false; }
-    assertMethodIdxIsValid(occurrence);
-    var prevProd = (0, last_1.default)(this.recordingProdStack);
-    var grammarAction = (0, isFunction_1.default)(mainProdArg) ? mainProdArg : mainProdArg.DEF;
-    var newProd = new prodConstructor({ definition: [], idx: occurrence });
-    if (handleSep) {
-        newProd.separator = mainProdArg.SEP;
-    }
-    if ((0, has_1.default)(mainProdArg, "MAX_LOOKAHEAD")) {
-        newProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD;
-    }
-    this.recordingProdStack.push(newProd);
-    grammarAction.call(this);
-    prevProd.definition.push(newProd);
-    this.recordingProdStack.pop();
-    return RECORDING_NULL_OBJECT;
-}
-function recordOrProd(mainProdArg, occurrence) {
-    var _this = this;
-    assertMethodIdxIsValid(occurrence);
-    var prevProd = (0, last_1.default)(this.recordingProdStack);
-    // Only an array of alternatives
-    var hasOptions = (0, isArray_1.default)(mainProdArg) === false;
-    var alts = hasOptions === false ? mainProdArg : mainProdArg.DEF;
-    var newOrProd = new gast_1.Alternation({
-        definition: [],
-        idx: occurrence,
-        ignoreAmbiguities: hasOptions && mainProdArg.IGNORE_AMBIGUITIES === true
-    });
-    if ((0, has_1.default)(mainProdArg, "MAX_LOOKAHEAD")) {
-        newOrProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD;
-    }
-    var hasPredicates = (0, some_1.default)(alts, function (currAlt) { return (0, isFunction_1.default)(currAlt.GATE); });
-    newOrProd.hasPredicates = hasPredicates;
-    prevProd.definition.push(newOrProd);
-    (0, forEach_1.default)(alts, function (currAlt) {
-        var currAltFlat = new gast_1.Alternative({ definition: [] });
-        newOrProd.definition.push(currAltFlat);
-        if ((0, has_1.default)(currAlt, "IGNORE_AMBIGUITIES")) {
-            currAltFlat.ignoreAmbiguities = currAlt.IGNORE_AMBIGUITIES; // assumes end user provides the correct config value/type
-        }
-        // **implicit** ignoreAmbiguities due to usage of gate
-        else if ((0, has_1.default)(currAlt, "GATE")) {
-            currAltFlat.ignoreAmbiguities = true;
-        }
-        _this.recordingProdStack.push(currAltFlat);
-        currAlt.ALT.call(_this);
-        _this.recordingProdStack.pop();
-    });
-    return RECORDING_NULL_OBJECT;
-}
-function getIdxSuffix(idx) {
-    return idx === 0 ? "" : "".concat(idx);
-}
-function assertMethodIdxIsValid(idx) {
-    if (idx < 0 || idx > MAX_METHOD_IDX) {
-        var error = new Error(
-        // The stack trace will contain all the needed details
-        "Invalid DSL Method idx value: <".concat(idx, ">\n\t") +
-            "Idx value must be a none negative value smaller than ".concat(MAX_METHOD_IDX + 1));
-        error.KNOWN_RECORDER_ERROR = true;
-        throw error;
-    }
-}
-//# sourceMappingURL=gast_recorder.js.map
-
-/***/ }),
-
-/***/ 81540:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.LexerAdapter = void 0;
-var parser_1 = __webpack_require__(81183);
-/**
- * Trait responsible abstracting over the interaction with Lexer output (Token vector).
- *
- * This could be generalized to support other kinds of lexers, e.g.
- * - Just in Time Lexing / Lexer-Less parsing.
- * - Streaming Lexer.
- */
-var LexerAdapter = /** @class */ (function () {
-    function LexerAdapter() {
-    }
-    LexerAdapter.prototype.initLexerAdapter = function () {
-        this.tokVector = [];
-        this.tokVectorLength = 0;
-        this.currIdx = -1;
-    };
-    Object.defineProperty(LexerAdapter.prototype, "input", {
-        get: function () {
-            return this.tokVector;
-        },
-        set: function (newInput) {
-            // @ts-ignore - `this parameter` not supported in setters/getters
-            //   - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters
-            if (this.selfAnalysisDone !== true) {
-                throw Error("Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.");
-            }
-            // @ts-ignore - `this parameter` not supported in setters/getters
-            //   - https://www.typescriptlang.org/docs/handbook/functions.html#this-parameters
-            this.reset();
-            this.tokVector = newInput;
-            this.tokVectorLength = newInput.length;
-        },
-        enumerable: false,
-        configurable: true
-    });
-    // skips a token and returns the next token
-    LexerAdapter.prototype.SKIP_TOKEN = function () {
-        if (this.currIdx <= this.tokVector.length - 2) {
-            this.consumeToken();
-            return this.LA(1);
-        }
-        else {
-            return parser_1.END_OF_FILE;
-        }
-    };
-    // Lexer (accessing Token vector) related methods which can be overridden to implement lazy lexers
-    // or lexers dependent on parser context.
-    LexerAdapter.prototype.LA = function (howMuch) {
-        var soughtIdx = this.currIdx + howMuch;
-        if (soughtIdx < 0 || this.tokVectorLength <= soughtIdx) {
-            return parser_1.END_OF_FILE;
-        }
-        else {
-            return this.tokVector[soughtIdx];
-        }
-    };
-    LexerAdapter.prototype.consumeToken = function () {
-        this.currIdx++;
-    };
-    LexerAdapter.prototype.exportLexerState = function () {
-        return this.currIdx;
-    };
-    LexerAdapter.prototype.importLexerState = function (newState) {
-        this.currIdx = newState;
-    };
-    LexerAdapter.prototype.resetLexerState = function () {
-        this.currIdx = -1;
-    };
-    LexerAdapter.prototype.moveToTerminatedState = function () {
-        this.currIdx = this.tokVector.length - 1;
-    };
-    LexerAdapter.prototype.getLexerPosition = function () {
-        return this.exportLexerState();
-    };
-    return LexerAdapter;
-}());
-exports.LexerAdapter = LexerAdapter;
-//# sourceMappingURL=lexer_adapter.js.map
-
-/***/ }),
-
-/***/ 44421:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        if (typeof b !== "function" && b !== null)
-            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.collectMethods = exports.LooksAhead = void 0;
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var has_1 = __importDefault(__webpack_require__(18721));
-var parser_1 = __webpack_require__(81183);
-var keys_1 = __webpack_require__(38567);
-var gast_1 = __webpack_require__(93062);
-var gast_2 = __webpack_require__(93062);
-var llk_lookahead_1 = __webpack_require__(3449);
-/**
- * Trait responsible for the lookahead related utilities and optimizations.
- */
-var LooksAhead = /** @class */ (function () {
-    function LooksAhead() {
-    }
-    LooksAhead.prototype.initLooksAhead = function (config) {
-        this.dynamicTokensEnabled = (0, has_1.default)(config, "dynamicTokensEnabled")
-            ? config.dynamicTokensEnabled // assumes end user provides the correct config value/type
-            : parser_1.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled;
-        this.maxLookahead = (0, has_1.default)(config, "maxLookahead")
-            ? config.maxLookahead // assumes end user provides the correct config value/type
-            : parser_1.DEFAULT_PARSER_CONFIG.maxLookahead;
-        this.lookaheadStrategy = (0, has_1.default)(config, "lookaheadStrategy")
-            ? config.lookaheadStrategy // assumes end user provides the correct config value/type
-            : new llk_lookahead_1.LLkLookaheadStrategy({ maxLookahead: this.maxLookahead });
-        this.lookAheadFuncsCache = new Map();
-    };
-    LooksAhead.prototype.preComputeLookaheadFunctions = function (rules) {
-        var _this = this;
-        (0, forEach_1.default)(rules, function (currRule) {
-            _this.TRACE_INIT("".concat(currRule.name, " Rule Lookahead"), function () {
-                var _a = collectMethods(currRule), alternation = _a.alternation, repetition = _a.repetition, option = _a.option, repetitionMandatory = _a.repetitionMandatory, repetitionMandatoryWithSeparator = _a.repetitionMandatoryWithSeparator, repetitionWithSeparator = _a.repetitionWithSeparator;
-                (0, forEach_1.default)(alternation, function (currProd) {
-                    var prodIdx = currProd.idx === 0 ? "" : currProd.idx;
-                    _this.TRACE_INIT("".concat((0, gast_2.getProductionDslName)(currProd)).concat(prodIdx), function () {
-                        var laFunc = _this.lookaheadStrategy.buildLookaheadForAlternation({
-                            prodOccurrence: currProd.idx,
-                            rule: currRule,
-                            maxLookahead: currProd.maxLookahead || _this.maxLookahead,
-                            hasPredicates: currProd.hasPredicates,
-                            dynamicTokensEnabled: _this.dynamicTokensEnabled
-                        });
-                        var key = (0, keys_1.getKeyForAutomaticLookahead)(_this.fullRuleNameToShort[currRule.name], keys_1.OR_IDX, currProd.idx);
-                        _this.setLaFuncCache(key, laFunc);
-                    });
-                });
-                (0, forEach_1.default)(repetition, function (currProd) {
-                    _this.computeLookaheadFunc(currRule, currProd.idx, keys_1.MANY_IDX, "Repetition", currProd.maxLookahead, (0, gast_2.getProductionDslName)(currProd));
-                });
-                (0, forEach_1.default)(option, function (currProd) {
-                    _this.computeLookaheadFunc(currRule, currProd.idx, keys_1.OPTION_IDX, "Option", currProd.maxLookahead, (0, gast_2.getProductionDslName)(currProd));
-                });
-                (0, forEach_1.default)(repetitionMandatory, function (currProd) {
-                    _this.computeLookaheadFunc(currRule, currProd.idx, keys_1.AT_LEAST_ONE_IDX, "RepetitionMandatory", currProd.maxLookahead, (0, gast_2.getProductionDslName)(currProd));
-                });
-                (0, forEach_1.default)(repetitionMandatoryWithSeparator, function (currProd) {
-                    _this.computeLookaheadFunc(currRule, currProd.idx, keys_1.AT_LEAST_ONE_SEP_IDX, "RepetitionMandatoryWithSeparator", currProd.maxLookahead, (0, gast_2.getProductionDslName)(currProd));
-                });
-                (0, forEach_1.default)(repetitionWithSeparator, function (currProd) {
-                    _this.computeLookaheadFunc(currRule, currProd.idx, keys_1.MANY_SEP_IDX, "RepetitionWithSeparator", currProd.maxLookahead, (0, gast_2.getProductionDslName)(currProd));
-                });
-            });
-        });
-    };
-    LooksAhead.prototype.computeLookaheadFunc = function (rule, prodOccurrence, prodKey, prodType, prodMaxLookahead, dslMethodName) {
-        var _this = this;
-        this.TRACE_INIT("".concat(dslMethodName).concat(prodOccurrence === 0 ? "" : prodOccurrence), function () {
-            var laFunc = _this.lookaheadStrategy.buildLookaheadForOptional({
-                prodOccurrence: prodOccurrence,
-                rule: rule,
-                maxLookahead: prodMaxLookahead || _this.maxLookahead,
-                dynamicTokensEnabled: _this.dynamicTokensEnabled,
-                prodType: prodType
-            });
-            var key = (0, keys_1.getKeyForAutomaticLookahead)(_this.fullRuleNameToShort[rule.name], prodKey, prodOccurrence);
-            _this.setLaFuncCache(key, laFunc);
-        });
-    };
-    // this actually returns a number, but it is always used as a string (object prop key)
-    LooksAhead.prototype.getKeyForAutomaticLookahead = function (dslMethodIdx, occurrence) {
-        var currRuleShortName = this.getLastExplicitRuleShortName();
-        return (0, keys_1.getKeyForAutomaticLookahead)(currRuleShortName, dslMethodIdx, occurrence);
-    };
-    LooksAhead.prototype.getLaFuncFromCache = function (key) {
-        return this.lookAheadFuncsCache.get(key);
-    };
-    /* istanbul ignore next */
-    LooksAhead.prototype.setLaFuncCache = function (key, value) {
-        this.lookAheadFuncsCache.set(key, value);
-    };
-    return LooksAhead;
-}());
-exports.LooksAhead = LooksAhead;
-var DslMethodsCollectorVisitor = /** @class */ (function (_super) {
-    __extends(DslMethodsCollectorVisitor, _super);
-    function DslMethodsCollectorVisitor() {
-        var _this = _super !== null && _super.apply(this, arguments) || this;
-        _this.dslMethods = {
-            option: [],
-            alternation: [],
-            repetition: [],
-            repetitionWithSeparator: [],
-            repetitionMandatory: [],
-            repetitionMandatoryWithSeparator: []
-        };
-        return _this;
-    }
-    DslMethodsCollectorVisitor.prototype.reset = function () {
-        this.dslMethods = {
-            option: [],
-            alternation: [],
-            repetition: [],
-            repetitionWithSeparator: [],
-            repetitionMandatory: [],
-            repetitionMandatoryWithSeparator: []
-        };
-    };
-    DslMethodsCollectorVisitor.prototype.visitOption = function (option) {
-        this.dslMethods.option.push(option);
-    };
-    DslMethodsCollectorVisitor.prototype.visitRepetitionWithSeparator = function (manySep) {
-        this.dslMethods.repetitionWithSeparator.push(manySep);
-    };
-    DslMethodsCollectorVisitor.prototype.visitRepetitionMandatory = function (atLeastOne) {
-        this.dslMethods.repetitionMandatory.push(atLeastOne);
-    };
-    DslMethodsCollectorVisitor.prototype.visitRepetitionMandatoryWithSeparator = function (atLeastOneSep) {
-        this.dslMethods.repetitionMandatoryWithSeparator.push(atLeastOneSep);
-    };
-    DslMethodsCollectorVisitor.prototype.visitRepetition = function (many) {
-        this.dslMethods.repetition.push(many);
-    };
-    DslMethodsCollectorVisitor.prototype.visitAlternation = function (or) {
-        this.dslMethods.alternation.push(or);
-    };
-    return DslMethodsCollectorVisitor;
-}(gast_1.GAstVisitor));
-var collectorVisitor = new DslMethodsCollectorVisitor();
-function collectMethods(rule) {
-    collectorVisitor.reset();
-    rule.accept(collectorVisitor);
-    var dslMethods = collectorVisitor.dslMethods;
-    // avoid uncleaned references
-    collectorVisitor.reset();
-    return dslMethods;
-}
-exports.collectMethods = collectMethods;
-//# sourceMappingURL=looksahead.js.map
-
-/***/ }),
-
-/***/ 46427:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.PerformanceTracer = void 0;
-var has_1 = __importDefault(__webpack_require__(18721));
-var utils_1 = __webpack_require__(68877);
-var parser_1 = __webpack_require__(81183);
-/**
- * Trait responsible for runtime parsing errors.
- */
-var PerformanceTracer = /** @class */ (function () {
-    function PerformanceTracer() {
-    }
-    PerformanceTracer.prototype.initPerformanceTracer = function (config) {
-        if ((0, has_1.default)(config, "traceInitPerf")) {
-            var userTraceInitPerf = config.traceInitPerf;
-            var traceIsNumber = typeof userTraceInitPerf === "number";
-            this.traceInitMaxIdent = traceIsNumber
-                ? userTraceInitPerf
-                : Infinity;
-            this.traceInitPerf = traceIsNumber
-                ? userTraceInitPerf > 0
-                : userTraceInitPerf; // assumes end user provides the correct config value/type
-        }
-        else {
-            this.traceInitMaxIdent = 0;
-            this.traceInitPerf = parser_1.DEFAULT_PARSER_CONFIG.traceInitPerf;
-        }
-        this.traceInitIndent = -1;
-    };
-    PerformanceTracer.prototype.TRACE_INIT = function (phaseDesc, phaseImpl) {
-        // No need to optimize this using NOOP pattern because
-        // It is not called in a hot spot...
-        if (this.traceInitPerf === true) {
-            this.traceInitIndent++;
-            var indent = new Array(this.traceInitIndent + 1).join("\t");
-            if (this.traceInitIndent < this.traceInitMaxIdent) {
-                console.log("".concat(indent, "--> <").concat(phaseDesc, ">"));
-            }
-            var _a = (0, utils_1.timer)(phaseImpl), time = _a.time, value = _a.value;
-            /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */
-            var traceMethod = time > 10 ? console.warn : console.log;
-            if (this.traceInitIndent < this.traceInitMaxIdent) {
-                traceMethod("".concat(indent, "<-- <").concat(phaseDesc, "> time: ").concat(time, "ms"));
-            }
-            this.traceInitIndent--;
-            return value;
-        }
-        else {
-            return phaseImpl();
-        }
-    };
-    return PerformanceTracer;
-}());
-exports.PerformanceTracer = PerformanceTracer;
-//# sourceMappingURL=perf_tracer.js.map
-
-/***/ }),
-
-/***/ 70951:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.RecognizerApi = void 0;
-var values_1 = __importDefault(__webpack_require__(52628));
-var includes_1 = __importDefault(__webpack_require__(64721));
-var exceptions_public_1 = __webpack_require__(34400);
-var parser_1 = __webpack_require__(81183);
-var errors_public_1 = __webpack_require__(27621);
-var checks_1 = __webpack_require__(4046);
-var gast_1 = __webpack_require__(93062);
-/**
- * This trait is responsible for implementing the public API
- * for defining Chevrotain parsers, i.e:
- * - CONSUME
- * - RULE
- * - OPTION
- * - ...
- */
-var RecognizerApi = /** @class */ (function () {
-    function RecognizerApi() {
-    }
-    RecognizerApi.prototype.ACTION = function (impl) {
-        return impl.call(this);
-    };
-    RecognizerApi.prototype.consume = function (idx, tokType, options) {
-        return this.consumeInternal(tokType, idx, options);
-    };
-    RecognizerApi.prototype.subrule = function (idx, ruleToCall, options) {
-        return this.subruleInternal(ruleToCall, idx, options);
-    };
-    RecognizerApi.prototype.option = function (idx, actionORMethodDef) {
-        return this.optionInternal(actionORMethodDef, idx);
-    };
-    RecognizerApi.prototype.or = function (idx, altsOrOpts) {
-        return this.orInternal(altsOrOpts, idx);
-    };
-    RecognizerApi.prototype.many = function (idx, actionORMethodDef) {
-        return this.manyInternal(idx, actionORMethodDef);
-    };
-    RecognizerApi.prototype.atLeastOne = function (idx, actionORMethodDef) {
-        return this.atLeastOneInternal(idx, actionORMethodDef);
-    };
-    RecognizerApi.prototype.CONSUME = function (tokType, options) {
-        return this.consumeInternal(tokType, 0, options);
-    };
-    RecognizerApi.prototype.CONSUME1 = function (tokType, options) {
-        return this.consumeInternal(tokType, 1, options);
-    };
-    RecognizerApi.prototype.CONSUME2 = function (tokType, options) {
-        return this.consumeInternal(tokType, 2, options);
-    };
-    RecognizerApi.prototype.CONSUME3 = function (tokType, options) {
-        return this.consumeInternal(tokType, 3, options);
-    };
-    RecognizerApi.prototype.CONSUME4 = function (tokType, options) {
-        return this.consumeInternal(tokType, 4, options);
-    };
-    RecognizerApi.prototype.CONSUME5 = function (tokType, options) {
-        return this.consumeInternal(tokType, 5, options);
-    };
-    RecognizerApi.prototype.CONSUME6 = function (tokType, options) {
-        return this.consumeInternal(tokType, 6, options);
-    };
-    RecognizerApi.prototype.CONSUME7 = function (tokType, options) {
-        return this.consumeInternal(tokType, 7, options);
-    };
-    RecognizerApi.prototype.CONSUME8 = function (tokType, options) {
-        return this.consumeInternal(tokType, 8, options);
-    };
-    RecognizerApi.prototype.CONSUME9 = function (tokType, options) {
-        return this.consumeInternal(tokType, 9, options);
-    };
-    RecognizerApi.prototype.SUBRULE = function (ruleToCall, options) {
-        return this.subruleInternal(ruleToCall, 0, options);
-    };
-    RecognizerApi.prototype.SUBRULE1 = function (ruleToCall, options) {
-        return this.subruleInternal(ruleToCall, 1, options);
-    };
-    RecognizerApi.prototype.SUBRULE2 = function (ruleToCall, options) {
-        return this.subruleInternal(ruleToCall, 2, options);
-    };
-    RecognizerApi.prototype.SUBRULE3 = function (ruleToCall, options) {
-        return this.subruleInternal(ruleToCall, 3, options);
-    };
-    RecognizerApi.prototype.SUBRULE4 = function (ruleToCall, options) {
-        return this.subruleInternal(ruleToCall, 4, options);
-    };
-    RecognizerApi.prototype.SUBRULE5 = function (ruleToCall, options) {
-        return this.subruleInternal(ruleToCall, 5, options);
-    };
-    RecognizerApi.prototype.SUBRULE6 = function (ruleToCall, options) {
-        return this.subruleInternal(ruleToCall, 6, options);
-    };
-    RecognizerApi.prototype.SUBRULE7 = function (ruleToCall, options) {
-        return this.subruleInternal(ruleToCall, 7, options);
-    };
-    RecognizerApi.prototype.SUBRULE8 = function (ruleToCall, options) {
-        return this.subruleInternal(ruleToCall, 8, options);
-    };
-    RecognizerApi.prototype.SUBRULE9 = function (ruleToCall, options) {
-        return this.subruleInternal(ruleToCall, 9, options);
-    };
-    RecognizerApi.prototype.OPTION = function (actionORMethodDef) {
-        return this.optionInternal(actionORMethodDef, 0);
-    };
-    RecognizerApi.prototype.OPTION1 = function (actionORMethodDef) {
-        return this.optionInternal(actionORMethodDef, 1);
-    };
-    RecognizerApi.prototype.OPTION2 = function (actionORMethodDef) {
-        return this.optionInternal(actionORMethodDef, 2);
-    };
-    RecognizerApi.prototype.OPTION3 = function (actionORMethodDef) {
-        return this.optionInternal(actionORMethodDef, 3);
-    };
-    RecognizerApi.prototype.OPTION4 = function (actionORMethodDef) {
-        return this.optionInternal(actionORMethodDef, 4);
-    };
-    RecognizerApi.prototype.OPTION5 = function (actionORMethodDef) {
-        return this.optionInternal(actionORMethodDef, 5);
-    };
-    RecognizerApi.prototype.OPTION6 = function (actionORMethodDef) {
-        return this.optionInternal(actionORMethodDef, 6);
-    };
-    RecognizerApi.prototype.OPTION7 = function (actionORMethodDef) {
-        return this.optionInternal(actionORMethodDef, 7);
-    };
-    RecognizerApi.prototype.OPTION8 = function (actionORMethodDef) {
-        return this.optionInternal(actionORMethodDef, 8);
-    };
-    RecognizerApi.prototype.OPTION9 = function (actionORMethodDef) {
-        return this.optionInternal(actionORMethodDef, 9);
-    };
-    RecognizerApi.prototype.OR = function (altsOrOpts) {
-        return this.orInternal(altsOrOpts, 0);
-    };
-    RecognizerApi.prototype.OR1 = function (altsOrOpts) {
-        return this.orInternal(altsOrOpts, 1);
-    };
-    RecognizerApi.prototype.OR2 = function (altsOrOpts) {
-        return this.orInternal(altsOrOpts, 2);
-    };
-    RecognizerApi.prototype.OR3 = function (altsOrOpts) {
-        return this.orInternal(altsOrOpts, 3);
-    };
-    RecognizerApi.prototype.OR4 = function (altsOrOpts) {
-        return this.orInternal(altsOrOpts, 4);
-    };
-    RecognizerApi.prototype.OR5 = function (altsOrOpts) {
-        return this.orInternal(altsOrOpts, 5);
-    };
-    RecognizerApi.prototype.OR6 = function (altsOrOpts) {
-        return this.orInternal(altsOrOpts, 6);
-    };
-    RecognizerApi.prototype.OR7 = function (altsOrOpts) {
-        return this.orInternal(altsOrOpts, 7);
-    };
-    RecognizerApi.prototype.OR8 = function (altsOrOpts) {
-        return this.orInternal(altsOrOpts, 8);
-    };
-    RecognizerApi.prototype.OR9 = function (altsOrOpts) {
-        return this.orInternal(altsOrOpts, 9);
-    };
-    RecognizerApi.prototype.MANY = function (actionORMethodDef) {
-        this.manyInternal(0, actionORMethodDef);
-    };
-    RecognizerApi.prototype.MANY1 = function (actionORMethodDef) {
-        this.manyInternal(1, actionORMethodDef);
-    };
-    RecognizerApi.prototype.MANY2 = function (actionORMethodDef) {
-        this.manyInternal(2, actionORMethodDef);
-    };
-    RecognizerApi.prototype.MANY3 = function (actionORMethodDef) {
-        this.manyInternal(3, actionORMethodDef);
-    };
-    RecognizerApi.prototype.MANY4 = function (actionORMethodDef) {
-        this.manyInternal(4, actionORMethodDef);
-    };
-    RecognizerApi.prototype.MANY5 = function (actionORMethodDef) {
-        this.manyInternal(5, actionORMethodDef);
-    };
-    RecognizerApi.prototype.MANY6 = function (actionORMethodDef) {
-        this.manyInternal(6, actionORMethodDef);
-    };
-    RecognizerApi.prototype.MANY7 = function (actionORMethodDef) {
-        this.manyInternal(7, actionORMethodDef);
-    };
-    RecognizerApi.prototype.MANY8 = function (actionORMethodDef) {
-        this.manyInternal(8, actionORMethodDef);
-    };
-    RecognizerApi.prototype.MANY9 = function (actionORMethodDef) {
-        this.manyInternal(9, actionORMethodDef);
-    };
-    RecognizerApi.prototype.MANY_SEP = function (options) {
-        this.manySepFirstInternal(0, options);
-    };
-    RecognizerApi.prototype.MANY_SEP1 = function (options) {
-        this.manySepFirstInternal(1, options);
-    };
-    RecognizerApi.prototype.MANY_SEP2 = function (options) {
-        this.manySepFirstInternal(2, options);
-    };
-    RecognizerApi.prototype.MANY_SEP3 = function (options) {
-        this.manySepFirstInternal(3, options);
-    };
-    RecognizerApi.prototype.MANY_SEP4 = function (options) {
-        this.manySepFirstInternal(4, options);
-    };
-    RecognizerApi.prototype.MANY_SEP5 = function (options) {
-        this.manySepFirstInternal(5, options);
-    };
-    RecognizerApi.prototype.MANY_SEP6 = function (options) {
-        this.manySepFirstInternal(6, options);
-    };
-    RecognizerApi.prototype.MANY_SEP7 = function (options) {
-        this.manySepFirstInternal(7, options);
-    };
-    RecognizerApi.prototype.MANY_SEP8 = function (options) {
-        this.manySepFirstInternal(8, options);
-    };
-    RecognizerApi.prototype.MANY_SEP9 = function (options) {
-        this.manySepFirstInternal(9, options);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE = function (actionORMethodDef) {
-        this.atLeastOneInternal(0, actionORMethodDef);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE1 = function (actionORMethodDef) {
-        return this.atLeastOneInternal(1, actionORMethodDef);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE2 = function (actionORMethodDef) {
-        this.atLeastOneInternal(2, actionORMethodDef);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE3 = function (actionORMethodDef) {
-        this.atLeastOneInternal(3, actionORMethodDef);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE4 = function (actionORMethodDef) {
-        this.atLeastOneInternal(4, actionORMethodDef);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE5 = function (actionORMethodDef) {
-        this.atLeastOneInternal(5, actionORMethodDef);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE6 = function (actionORMethodDef) {
-        this.atLeastOneInternal(6, actionORMethodDef);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE7 = function (actionORMethodDef) {
-        this.atLeastOneInternal(7, actionORMethodDef);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE8 = function (actionORMethodDef) {
-        this.atLeastOneInternal(8, actionORMethodDef);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE9 = function (actionORMethodDef) {
-        this.atLeastOneInternal(9, actionORMethodDef);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE_SEP = function (options) {
-        this.atLeastOneSepFirstInternal(0, options);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE_SEP1 = function (options) {
-        this.atLeastOneSepFirstInternal(1, options);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE_SEP2 = function (options) {
-        this.atLeastOneSepFirstInternal(2, options);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE_SEP3 = function (options) {
-        this.atLeastOneSepFirstInternal(3, options);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE_SEP4 = function (options) {
-        this.atLeastOneSepFirstInternal(4, options);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE_SEP5 = function (options) {
-        this.atLeastOneSepFirstInternal(5, options);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE_SEP6 = function (options) {
-        this.atLeastOneSepFirstInternal(6, options);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE_SEP7 = function (options) {
-        this.atLeastOneSepFirstInternal(7, options);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE_SEP8 = function (options) {
-        this.atLeastOneSepFirstInternal(8, options);
-    };
-    RecognizerApi.prototype.AT_LEAST_ONE_SEP9 = function (options) {
-        this.atLeastOneSepFirstInternal(9, options);
-    };
-    RecognizerApi.prototype.RULE = function (name, implementation, config) {
-        if (config === void 0) { config = parser_1.DEFAULT_RULE_CONFIG; }
-        if ((0, includes_1.default)(this.definedRulesNames, name)) {
-            var errMsg = errors_public_1.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({
-                topLevelRule: name,
-                grammarName: this.className
-            });
-            var error = {
-                message: errMsg,
-                type: parser_1.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,
-                ruleName: name
-            };
-            this.definitionErrors.push(error);
-        }
-        this.definedRulesNames.push(name);
-        var ruleImplementation = this.defineRule(name, implementation, config);
-        this[name] = ruleImplementation;
-        return ruleImplementation;
-    };
-    RecognizerApi.prototype.OVERRIDE_RULE = function (name, impl, config) {
-        if (config === void 0) { config = parser_1.DEFAULT_RULE_CONFIG; }
-        var ruleErrors = (0, checks_1.validateRuleIsOverridden)(name, this.definedRulesNames, this.className);
-        this.definitionErrors = this.definitionErrors.concat(ruleErrors);
-        var ruleImplementation = this.defineRule(name, impl, config);
-        this[name] = ruleImplementation;
-        return ruleImplementation;
-    };
-    RecognizerApi.prototype.BACKTRACK = function (grammarRule, args) {
-        return function () {
-            // save org state
-            this.isBackTrackingStack.push(1);
-            var orgState = this.saveRecogState();
-            try {
-                grammarRule.apply(this, args);
-                // if no exception was thrown we have succeed parsing the rule.
-                return true;
-            }
-            catch (e) {
-                if ((0, exceptions_public_1.isRecognitionException)(e)) {
-                    return false;
-                }
-                else {
-                    throw e;
-                }
-            }
-            finally {
-                this.reloadRecogState(orgState);
-                this.isBackTrackingStack.pop();
-            }
-        };
-    };
-    // GAST export APIs
-    RecognizerApi.prototype.getGAstProductions = function () {
-        return this.gastProductionsCache;
-    };
-    RecognizerApi.prototype.getSerializedGastProductions = function () {
-        return (0, gast_1.serializeGrammar)((0, values_1.default)(this.gastProductionsCache));
-    };
-    return RecognizerApi;
-}());
-exports.RecognizerApi = RecognizerApi;
-//# sourceMappingURL=recognizer_api.js.map
-
-/***/ }),
-
-/***/ 42691:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.RecognizerEngine = void 0;
-var isEmpty_1 = __importDefault(__webpack_require__(41609));
-var isArray_1 = __importDefault(__webpack_require__(1469));
-var flatten_1 = __importDefault(__webpack_require__(85564));
-var every_1 = __importDefault(__webpack_require__(711));
-var uniq_1 = __importDefault(__webpack_require__(44908));
-var isObject_1 = __importDefault(__webpack_require__(13218));
-var has_1 = __importDefault(__webpack_require__(18721));
-var values_1 = __importDefault(__webpack_require__(52628));
-var reduce_1 = __importDefault(__webpack_require__(54061));
-var clone_1 = __importDefault(__webpack_require__(66678));
-var keys_1 = __webpack_require__(38567);
-var exceptions_public_1 = __webpack_require__(34400);
-var lookahead_1 = __webpack_require__(63670);
-var interpreter_1 = __webpack_require__(6331);
-var parser_1 = __webpack_require__(81183);
-var recoverable_1 = __webpack_require__(35786);
-var tokens_public_1 = __webpack_require__(58980);
-var tokens_1 = __webpack_require__(22963);
-/**
- * This trait is responsible for the runtime parsing engine
- * Used by the official API (recognizer_api.ts)
- */
-var RecognizerEngine = /** @class */ (function () {
-    function RecognizerEngine() {
-    }
-    RecognizerEngine.prototype.initRecognizerEngine = function (tokenVocabulary, config) {
-        this.className = this.constructor.name;
-        // TODO: would using an ES6 Map or plain object be faster (CST building scenario)
-        this.shortRuleNameToFull = {};
-        this.fullRuleNameToShort = {};
-        this.ruleShortNameIdx = 256;
-        this.tokenMatcher = tokens_1.tokenStructuredMatcherNoCategories;
-        this.subruleIdx = 0;
-        this.definedRulesNames = [];
-        this.tokensMap = {};
-        this.isBackTrackingStack = [];
-        this.RULE_STACK = [];
-        this.RULE_OCCURRENCE_STACK = [];
-        this.gastProductionsCache = {};
-        if ((0, has_1.default)(config, "serializedGrammar")) {
-            throw Error("The Parser's configuration can no longer contain a <serializedGrammar> property.\n" +
-                "\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n" +
-                "\tFor Further details.");
-        }
-        if ((0, isArray_1.default)(tokenVocabulary)) {
-            // This only checks for Token vocabularies provided as arrays.
-            // That is good enough because the main objective is to detect users of pre-V4.0 APIs
-            // rather than all edge cases of empty Token vocabularies.
-            if ((0, isEmpty_1.default)(tokenVocabulary)) {
-                throw Error("A Token Vocabulary cannot be empty.\n" +
-                    "\tNote that the first argument for the parser constructor\n" +
-                    "\tis no longer a Token vector (since v4.0).");
-            }
-            if (typeof tokenVocabulary[0].startOffset === "number") {
-                throw Error("The Parser constructor no longer accepts a token vector as the first argument.\n" +
-                    "\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n" +
-                    "\tFor Further details.");
-            }
-        }
-        if ((0, isArray_1.default)(tokenVocabulary)) {
-            this.tokensMap = (0, reduce_1.default)(tokenVocabulary, function (acc, tokType) {
-                acc[tokType.name] = tokType;
-                return acc;
-            }, {});
-        }
-        else if ((0, has_1.default)(tokenVocabulary, "modes") &&
-            (0, every_1.default)((0, flatten_1.default)((0, values_1.default)(tokenVocabulary.modes)), tokens_1.isTokenType)) {
-            var allTokenTypes_1 = (0, flatten_1.default)((0, values_1.default)(tokenVocabulary.modes));
-            var uniqueTokens = (0, uniq_1.default)(allTokenTypes_1);
-            this.tokensMap = (0, reduce_1.default)(uniqueTokens, function (acc, tokType) {
-                acc[tokType.name] = tokType;
-                return acc;
-            }, {});
-        }
-        else if ((0, isObject_1.default)(tokenVocabulary)) {
-            this.tokensMap = (0, clone_1.default)(tokenVocabulary);
-        }
-        else {
-            throw new Error("<tokensDictionary> argument must be An Array of Token constructors," +
-                " A dictionary of Token constructors or an IMultiModeLexerDefinition");
-        }
-        // always add EOF to the tokenNames -> constructors map. it is useful to assure all the input has been
-        // parsed with a clear error message ("expecting EOF but found ...")
-        this.tokensMap["EOF"] = tokens_public_1.EOF;
-        var allTokenTypes = (0, has_1.default)(tokenVocabulary, "modes")
-            ? (0, flatten_1.default)((0, values_1.default)(tokenVocabulary.modes))
-            : (0, values_1.default)(tokenVocabulary);
-        var noTokenCategoriesUsed = (0, every_1.default)(allTokenTypes, function (tokenConstructor) {
-            return (0, isEmpty_1.default)(tokenConstructor.categoryMatches);
-        });
-        this.tokenMatcher = noTokenCategoriesUsed
-            ? tokens_1.tokenStructuredMatcherNoCategories
-            : tokens_1.tokenStructuredMatcher;
-        // Because ES2015+ syntax should be supported for creating Token classes
-        // We cannot assume that the Token classes were created using the "extendToken" utilities
-        // Therefore we must augment the Token classes both on Lexer initialization and on Parser initialization
-        (0, tokens_1.augmentTokenTypes)((0, values_1.default)(this.tokensMap));
-    };
-    RecognizerEngine.prototype.defineRule = function (ruleName, impl, config) {
-        if (this.selfAnalysisDone) {
-            throw Error("Grammar rule <".concat(ruleName, "> may not be defined after the 'performSelfAnalysis' method has been called'\n") +
-                "Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.");
-        }
-        var resyncEnabled = (0, has_1.default)(config, "resyncEnabled")
-            ? config.resyncEnabled // assumes end user provides the correct config value/type
-            : parser_1.DEFAULT_RULE_CONFIG.resyncEnabled;
-        var recoveryValueFunc = (0, has_1.default)(config, "recoveryValueFunc")
-            ? config.recoveryValueFunc // assumes end user provides the correct config value/type
-            : parser_1.DEFAULT_RULE_CONFIG.recoveryValueFunc;
-        // performance optimization: Use small integers as keys for the longer human readable "full" rule names.
-        // this greatly improves Map access time (as much as 8% for some performance benchmarks).
-        var shortName = this.ruleShortNameIdx << (keys_1.BITS_FOR_METHOD_TYPE + keys_1.BITS_FOR_OCCURRENCE_IDX);
-        this.ruleShortNameIdx++;
-        this.shortRuleNameToFull[shortName] = ruleName;
-        this.fullRuleNameToShort[ruleName] = shortName;
-        var invokeRuleWithTry;
-        // Micro optimization, only check the condition **once** on rule definition
-        // instead of **every single** rule invocation.
-        if (this.outputCst === true) {
-            invokeRuleWithTry = function invokeRuleWithTry() {
-                var args = [];
-                for (var _i = 0; _i < arguments.length; _i++) {
-                    args[_i] = arguments[_i];
-                }
-                try {
-                    this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx);
-                    impl.apply(this, args);
-                    var cst = this.CST_STACK[this.CST_STACK.length - 1];
-                    this.cstPostRule(cst);
-                    return cst;
-                }
-                catch (e) {
-                    return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc);
-                }
-                finally {
-                    this.ruleFinallyStateUpdate();
-                }
-            };
-        }
-        else {
-            invokeRuleWithTry = function invokeRuleWithTryCst() {
-                var args = [];
-                for (var _i = 0; _i < arguments.length; _i++) {
-                    args[_i] = arguments[_i];
-                }
-                try {
-                    this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx);
-                    return impl.apply(this, args);
-                }
-                catch (e) {
-                    return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc);
-                }
-                finally {
-                    this.ruleFinallyStateUpdate();
-                }
-            };
-        }
-        var wrappedGrammarRule = Object.assign(invokeRuleWithTry, { ruleName: ruleName, originalGrammarAction: impl });
-        return wrappedGrammarRule;
-    };
-    RecognizerEngine.prototype.invokeRuleCatch = function (e, resyncEnabledConfig, recoveryValueFunc) {
-        var isFirstInvokedRule = this.RULE_STACK.length === 1;
-        // note the reSync is always enabled for the first rule invocation, because we must always be able to
-        // reSync with EOF and just output some INVALID ParseTree
-        // during backtracking reSync recovery is disabled, otherwise we can't be certain the backtracking
-        // path is really the most valid one
-        var reSyncEnabled = resyncEnabledConfig && !this.isBackTracking() && this.recoveryEnabled;
-        if ((0, exceptions_public_1.isRecognitionException)(e)) {
-            var recogError = e;
-            if (reSyncEnabled) {
-                var reSyncTokType = this.findReSyncTokenType();
-                if (this.isInCurrentRuleReSyncSet(reSyncTokType)) {
-                    recogError.resyncedTokens = this.reSyncTo(reSyncTokType);
-                    if (this.outputCst) {
-                        var partialCstResult = this.CST_STACK[this.CST_STACK.length - 1];
-                        partialCstResult.recoveredNode = true;
-                        return partialCstResult;
-                    }
-                    else {
-                        return recoveryValueFunc(e);
-                    }
-                }
-                else {
-                    if (this.outputCst) {
-                        var partialCstResult = this.CST_STACK[this.CST_STACK.length - 1];
-                        partialCstResult.recoveredNode = true;
-                        recogError.partialCstResult = partialCstResult;
-                    }
-                    // to be handled Further up the call stack
-                    throw recogError;
-                }
-            }
-            else if (isFirstInvokedRule) {
-                // otherwise a Redundant input error will be created as well and we cannot guarantee that this is indeed the case
-                this.moveToTerminatedState();
-                // the parser should never throw one of its own errors outside its flow.
-                // even if error recovery is disabled
-                return recoveryValueFunc(e);
-            }
-            else {
-                // to be recovered Further up the call stack
-                throw recogError;
-            }
-        }
-        else {
-            // some other Error type which we don't know how to handle (for example a built in JavaScript Error)
-            throw e;
-        }
-    };
-    // Implementation of parsing DSL
-    RecognizerEngine.prototype.optionInternal = function (actionORMethodDef, occurrence) {
-        var key = this.getKeyForAutomaticLookahead(keys_1.OPTION_IDX, occurrence);
-        return this.optionInternalLogic(actionORMethodDef, occurrence, key);
-    };
-    RecognizerEngine.prototype.optionInternalLogic = function (actionORMethodDef, occurrence, key) {
-        var _this = this;
-        var lookAheadFunc = this.getLaFuncFromCache(key);
-        var action;
-        if (typeof actionORMethodDef !== "function") {
-            action = actionORMethodDef.DEF;
-            var predicate_1 = actionORMethodDef.GATE;
-            // predicate present
-            if (predicate_1 !== undefined) {
-                var orgLookaheadFunction_1 = lookAheadFunc;
-                lookAheadFunc = function () {
-                    return predicate_1.call(_this) && orgLookaheadFunction_1.call(_this);
-                };
-            }
-        }
-        else {
-            action = actionORMethodDef;
-        }
-        if (lookAheadFunc.call(this) === true) {
-            return action.call(this);
-        }
-        return undefined;
-    };
-    RecognizerEngine.prototype.atLeastOneInternal = function (prodOccurrence, actionORMethodDef) {
-        var laKey = this.getKeyForAutomaticLookahead(keys_1.AT_LEAST_ONE_IDX, prodOccurrence);
-        return this.atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, laKey);
-    };
-    RecognizerEngine.prototype.atLeastOneInternalLogic = function (prodOccurrence, actionORMethodDef, key) {
-        var _this = this;
-        var lookAheadFunc = this.getLaFuncFromCache(key);
-        var action;
-        if (typeof actionORMethodDef !== "function") {
-            action = actionORMethodDef.DEF;
-            var predicate_2 = actionORMethodDef.GATE;
-            // predicate present
-            if (predicate_2 !== undefined) {
-                var orgLookaheadFunction_2 = lookAheadFunc;
-                lookAheadFunc = function () {
-                    return predicate_2.call(_this) && orgLookaheadFunction_2.call(_this);
-                };
-            }
-        }
-        else {
-            action = actionORMethodDef;
-        }
-        if (lookAheadFunc.call(this) === true) {
-            var notStuck = this.doSingleRepetition(action);
-            while (lookAheadFunc.call(this) === true &&
-                notStuck === true) {
-                notStuck = this.doSingleRepetition(action);
-            }
-        }
-        else {
-            throw this.raiseEarlyExitException(prodOccurrence, lookahead_1.PROD_TYPE.REPETITION_MANDATORY, actionORMethodDef.ERR_MSG);
-        }
-        // note that while it may seem that this can cause an error because by using a recursive call to
-        // AT_LEAST_ONE we change the grammar to AT_LEAST_TWO, AT_LEAST_THREE ... , the possible recursive call
-        // from the tryInRepetitionRecovery(...) will only happen IFF there really are TWO/THREE/.... items.
-        // Performance optimization: "attemptInRepetitionRecovery" will be defined as NOOP unless recovery is enabled
-        this.attemptInRepetitionRecovery(this.atLeastOneInternal, [prodOccurrence, actionORMethodDef], lookAheadFunc, keys_1.AT_LEAST_ONE_IDX, prodOccurrence, interpreter_1.NextTerminalAfterAtLeastOneWalker);
-    };
-    RecognizerEngine.prototype.atLeastOneSepFirstInternal = function (prodOccurrence, options) {
-        var laKey = this.getKeyForAutomaticLookahead(keys_1.AT_LEAST_ONE_SEP_IDX, prodOccurrence);
-        this.atLeastOneSepFirstInternalLogic(prodOccurrence, options, laKey);
-    };
-    RecognizerEngine.prototype.atLeastOneSepFirstInternalLogic = function (prodOccurrence, options, key) {
-        var _this = this;
-        var action = options.DEF;
-        var separator = options.SEP;
-        var firstIterationLookaheadFunc = this.getLaFuncFromCache(key);
-        // 1st iteration
-        if (firstIterationLookaheadFunc.call(this) === true) {
-            ;
-            action.call(this);
-            //  TODO: Optimization can move this function construction into "attemptInRepetitionRecovery"
-            //  because it is only needed in error recovery scenarios.
-            var separatorLookAheadFunc = function () {
-                return _this.tokenMatcher(_this.LA(1), separator);
-            };
-            // 2nd..nth iterations
-            while (this.tokenMatcher(this.LA(1), separator) === true) {
-                // note that this CONSUME will never enter recovery because
-                // the separatorLookAheadFunc checks that the separator really does exist.
-                this.CONSUME(separator);
-                action.call(this);
-            }
-            // Performance optimization: "attemptInRepetitionRecovery" will be defined as NOOP unless recovery is enabled
-            this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [
-                prodOccurrence,
-                separator,
-                separatorLookAheadFunc,
-                action,
-                interpreter_1.NextTerminalAfterAtLeastOneSepWalker
-            ], separatorLookAheadFunc, keys_1.AT_LEAST_ONE_SEP_IDX, prodOccurrence, interpreter_1.NextTerminalAfterAtLeastOneSepWalker);
-        }
-        else {
-            throw this.raiseEarlyExitException(prodOccurrence, lookahead_1.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, options.ERR_MSG);
-        }
-    };
-    RecognizerEngine.prototype.manyInternal = function (prodOccurrence, actionORMethodDef) {
-        var laKey = this.getKeyForAutomaticLookahead(keys_1.MANY_IDX, prodOccurrence);
-        return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey);
-    };
-    RecognizerEngine.prototype.manyInternalLogic = function (prodOccurrence, actionORMethodDef, key) {
-        var _this = this;
-        var lookaheadFunction = this.getLaFuncFromCache(key);
-        var action;
-        if (typeof actionORMethodDef !== "function") {
-            action = actionORMethodDef.DEF;
-            var predicate_3 = actionORMethodDef.GATE;
-            // predicate present
-            if (predicate_3 !== undefined) {
-                var orgLookaheadFunction_3 = lookaheadFunction;
-                lookaheadFunction = function () {
-                    return predicate_3.call(_this) && orgLookaheadFunction_3.call(_this);
-                };
-            }
-        }
-        else {
-            action = actionORMethodDef;
-        }
-        var notStuck = true;
-        while (lookaheadFunction.call(this) === true && notStuck === true) {
-            notStuck = this.doSingleRepetition(action);
-        }
-        // Performance optimization: "attemptInRepetitionRecovery" will be defined as NOOP unless recovery is enabled
-        this.attemptInRepetitionRecovery(this.manyInternal, [prodOccurrence, actionORMethodDef], lookaheadFunction, keys_1.MANY_IDX, prodOccurrence, interpreter_1.NextTerminalAfterManyWalker, 
-        // The notStuck parameter is only relevant when "attemptInRepetitionRecovery"
-        // is invoked from manyInternal, in the MANY_SEP case and AT_LEAST_ONE[_SEP]
-        // An infinite loop cannot occur as:
-        // - Either the lookahead is guaranteed to consume something (Single Token Separator)
-        // - AT_LEAST_ONE by definition is guaranteed to consume something (or error out).
-        notStuck);
-    };
-    RecognizerEngine.prototype.manySepFirstInternal = function (prodOccurrence, options) {
-        var laKey = this.getKeyForAutomaticLookahead(keys_1.MANY_SEP_IDX, prodOccurrence);
-        this.manySepFirstInternalLogic(prodOccurrence, options, laKey);
-    };
-    RecognizerEngine.prototype.manySepFirstInternalLogic = function (prodOccurrence, options, key) {
-        var _this = this;
-        var action = options.DEF;
-        var separator = options.SEP;
-        var firstIterationLaFunc = this.getLaFuncFromCache(key);
-        // 1st iteration
-        if (firstIterationLaFunc.call(this) === true) {
-            action.call(this);
-            var separatorLookAheadFunc = function () {
-                return _this.tokenMatcher(_this.LA(1), separator);
-            };
-            // 2nd..nth iterations
-            while (this.tokenMatcher(this.LA(1), separator) === true) {
-                // note that this CONSUME will never enter recovery because
-                // the separatorLookAheadFunc checks that the separator really does exist.
-                this.CONSUME(separator);
-                // No need for checking infinite loop here due to consuming the separator.
-                action.call(this);
-            }
-            // Performance optimization: "attemptInRepetitionRecovery" will be defined as NOOP unless recovery is enabled
-            this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [
-                prodOccurrence,
-                separator,
-                separatorLookAheadFunc,
-                action,
-                interpreter_1.NextTerminalAfterManySepWalker
-            ], separatorLookAheadFunc, keys_1.MANY_SEP_IDX, prodOccurrence, interpreter_1.NextTerminalAfterManySepWalker);
-        }
-    };
-    RecognizerEngine.prototype.repetitionSepSecondInternal = function (prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker) {
-        while (separatorLookAheadFunc()) {
-            // note that this CONSUME will never enter recovery because
-            // the separatorLookAheadFunc checks that the separator really does exist.
-            this.CONSUME(separator);
-            action.call(this);
-        }
-        // we can only arrive to this function after an error
-        // has occurred (hence the name 'second') so the following
-        // IF will always be entered, its possible to remove it...
-        // however it is kept to avoid confusion and be consistent.
-        // Performance optimization: "attemptInRepetitionRecovery" will be defined as NOOP unless recovery is enabled
-        /* istanbul ignore else */
-        this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [
-            prodOccurrence,
-            separator,
-            separatorLookAheadFunc,
-            action,
-            nextTerminalAfterWalker
-        ], separatorLookAheadFunc, keys_1.AT_LEAST_ONE_SEP_IDX, prodOccurrence, nextTerminalAfterWalker);
-    };
-    RecognizerEngine.prototype.doSingleRepetition = function (action) {
-        var beforeIteration = this.getLexerPosition();
-        action.call(this);
-        var afterIteration = this.getLexerPosition();
-        // This boolean will indicate if this repetition progressed
-        // or if we are "stuck" (potential infinite loop in the repetition).
-        return afterIteration > beforeIteration;
-    };
-    RecognizerEngine.prototype.orInternal = function (altsOrOpts, occurrence) {
-        var laKey = this.getKeyForAutomaticLookahead(keys_1.OR_IDX, occurrence);
-        var alts = (0, isArray_1.default)(altsOrOpts) ? altsOrOpts : altsOrOpts.DEF;
-        var laFunc = this.getLaFuncFromCache(laKey);
-        var altIdxToTake = laFunc.call(this, alts);
-        if (altIdxToTake !== undefined) {
-            var chosenAlternative = alts[altIdxToTake];
-            return chosenAlternative.ALT.call(this);
-        }
-        this.raiseNoAltException(occurrence, altsOrOpts.ERR_MSG);
-    };
-    RecognizerEngine.prototype.ruleFinallyStateUpdate = function () {
-        this.RULE_STACK.pop();
-        this.RULE_OCCURRENCE_STACK.pop();
-        // NOOP when cst is disabled
-        this.cstFinallyStateUpdate();
-        if (this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) {
-            var firstRedundantTok = this.LA(1);
-            var errMsg = this.errorMessageProvider.buildNotAllInputParsedMessage({
-                firstRedundant: firstRedundantTok,
-                ruleName: this.getCurrRuleFullName()
-            });
-            this.SAVE_ERROR(new exceptions_public_1.NotAllInputParsedException(errMsg, firstRedundantTok));
-        }
-    };
-    RecognizerEngine.prototype.subruleInternal = function (ruleToCall, idx, options) {
-        var ruleResult;
-        try {
-            var args = options !== undefined ? options.ARGS : undefined;
-            this.subruleIdx = idx;
-            ruleResult = ruleToCall.apply(this, args);
-            this.cstPostNonTerminal(ruleResult, options !== undefined && options.LABEL !== undefined
-                ? options.LABEL
-                : ruleToCall.ruleName);
-            return ruleResult;
-        }
-        catch (e) {
-            throw this.subruleInternalError(e, options, ruleToCall.ruleName);
-        }
-    };
-    RecognizerEngine.prototype.subruleInternalError = function (e, options, ruleName) {
-        if ((0, exceptions_public_1.isRecognitionException)(e) && e.partialCstResult !== undefined) {
-            this.cstPostNonTerminal(e.partialCstResult, options !== undefined && options.LABEL !== undefined
-                ? options.LABEL
-                : ruleName);
-            delete e.partialCstResult;
-        }
-        throw e;
-    };
-    RecognizerEngine.prototype.consumeInternal = function (tokType, idx, options) {
-        var consumedToken;
-        try {
-            var nextToken = this.LA(1);
-            if (this.tokenMatcher(nextToken, tokType) === true) {
-                this.consumeToken();
-                consumedToken = nextToken;
-            }
-            else {
-                this.consumeInternalError(tokType, nextToken, options);
-            }
-        }
-        catch (eFromConsumption) {
-            consumedToken = this.consumeInternalRecovery(tokType, idx, eFromConsumption);
-        }
-        this.cstPostTerminal(options !== undefined && options.LABEL !== undefined
-            ? options.LABEL
-            : tokType.name, consumedToken);
-        return consumedToken;
-    };
-    RecognizerEngine.prototype.consumeInternalError = function (tokType, nextToken, options) {
-        var msg;
-        var previousToken = this.LA(0);
-        if (options !== undefined && options.ERR_MSG) {
-            msg = options.ERR_MSG;
-        }
-        else {
-            msg = this.errorMessageProvider.buildMismatchTokenMessage({
-                expected: tokType,
-                actual: nextToken,
-                previous: previousToken,
-                ruleName: this.getCurrRuleFullName()
-            });
-        }
-        throw this.SAVE_ERROR(new exceptions_public_1.MismatchedTokenException(msg, nextToken, previousToken));
-    };
-    RecognizerEngine.prototype.consumeInternalRecovery = function (tokType, idx, eFromConsumption) {
-        // no recovery allowed during backtracking, otherwise backtracking may recover invalid syntax and accept it
-        // but the original syntax could have been parsed successfully without any backtracking + recovery
-        if (this.recoveryEnabled &&
-            // TODO: more robust checking of the exception type. Perhaps Typescript extending expressions?
-            eFromConsumption.name === "MismatchedTokenException" &&
-            !this.isBackTracking()) {
-            var follows = this.getFollowsForInRuleRecovery(tokType, idx);
-            try {
-                return this.tryInRuleRecovery(tokType, follows);
-            }
-            catch (eFromInRuleRecovery) {
-                if (eFromInRuleRecovery.name === recoverable_1.IN_RULE_RECOVERY_EXCEPTION) {
-                    // failed in RuleRecovery.
-                    // throw the original error in order to trigger reSync error recovery
-                    throw eFromConsumption;
-                }
-                else {
-                    throw eFromInRuleRecovery;
-                }
-            }
-        }
-        else {
-            throw eFromConsumption;
-        }
-    };
-    RecognizerEngine.prototype.saveRecogState = function () {
-        // errors is a getter which will clone the errors array
-        var savedErrors = this.errors;
-        var savedRuleStack = (0, clone_1.default)(this.RULE_STACK);
-        return {
-            errors: savedErrors,
-            lexerState: this.exportLexerState(),
-            RULE_STACK: savedRuleStack,
-            CST_STACK: this.CST_STACK
-        };
-    };
-    RecognizerEngine.prototype.reloadRecogState = function (newState) {
-        this.errors = newState.errors;
-        this.importLexerState(newState.lexerState);
-        this.RULE_STACK = newState.RULE_STACK;
-    };
-    RecognizerEngine.prototype.ruleInvocationStateUpdate = function (shortName, fullName, idxInCallingRule) {
-        this.RULE_OCCURRENCE_STACK.push(idxInCallingRule);
-        this.RULE_STACK.push(shortName);
-        // NOOP when cst is disabled
-        this.cstInvocationStateUpdate(fullName);
-    };
-    RecognizerEngine.prototype.isBackTracking = function () {
-        return this.isBackTrackingStack.length !== 0;
-    };
-    RecognizerEngine.prototype.getCurrRuleFullName = function () {
-        var shortName = this.getLastExplicitRuleShortName();
-        return this.shortRuleNameToFull[shortName];
-    };
-    RecognizerEngine.prototype.shortRuleNameToFullName = function (shortName) {
-        return this.shortRuleNameToFull[shortName];
-    };
-    RecognizerEngine.prototype.isAtEndOfInput = function () {
-        return this.tokenMatcher(this.LA(1), tokens_public_1.EOF);
-    };
-    RecognizerEngine.prototype.reset = function () {
-        this.resetLexerState();
-        this.subruleIdx = 0;
-        this.isBackTrackingStack = [];
-        this.errors = [];
-        this.RULE_STACK = [];
-        // TODO: extract a specific reset for TreeBuilder trait
-        this.CST_STACK = [];
-        this.RULE_OCCURRENCE_STACK = [];
-    };
-    return RecognizerEngine;
-}());
-exports.RecognizerEngine = RecognizerEngine;
-//# sourceMappingURL=recognizer_engine.js.map
-
-/***/ }),
-
-/***/ 35786:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        if (typeof b !== "function" && b !== null)
-            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.attemptInRepetitionRecovery = exports.Recoverable = exports.InRuleRecoveryException = exports.IN_RULE_RECOVERY_EXCEPTION = exports.EOF_FOLLOW_KEY = void 0;
-var tokens_public_1 = __webpack_require__(58980);
-var isEmpty_1 = __importDefault(__webpack_require__(41609));
-var dropRight_1 = __importDefault(__webpack_require__(43624));
-var flatten_1 = __importDefault(__webpack_require__(85564));
-var map_1 = __importDefault(__webpack_require__(35161));
-var find_1 = __importDefault(__webpack_require__(13311));
-var has_1 = __importDefault(__webpack_require__(18721));
-var includes_1 = __importDefault(__webpack_require__(64721));
-var clone_1 = __importDefault(__webpack_require__(66678));
-var exceptions_public_1 = __webpack_require__(34400);
-var constants_1 = __webpack_require__(24997);
-var parser_1 = __webpack_require__(81183);
-exports.EOF_FOLLOW_KEY = {};
-exports.IN_RULE_RECOVERY_EXCEPTION = "InRuleRecoveryException";
-var InRuleRecoveryException = /** @class */ (function (_super) {
-    __extends(InRuleRecoveryException, _super);
-    function InRuleRecoveryException(message) {
-        var _this = _super.call(this, message) || this;
-        _this.name = exports.IN_RULE_RECOVERY_EXCEPTION;
-        return _this;
-    }
-    return InRuleRecoveryException;
-}(Error));
-exports.InRuleRecoveryException = InRuleRecoveryException;
-/**
- * This trait is responsible for the error recovery and fault tolerant logic
- */
-var Recoverable = /** @class */ (function () {
-    function Recoverable() {
-    }
-    Recoverable.prototype.initRecoverable = function (config) {
-        this.firstAfterRepMap = {};
-        this.resyncFollows = {};
-        this.recoveryEnabled = (0, has_1.default)(config, "recoveryEnabled")
-            ? config.recoveryEnabled // assumes end user provides the correct config value/type
-            : parser_1.DEFAULT_PARSER_CONFIG.recoveryEnabled;
-        // performance optimization, NOOP will be inlined which
-        // effectively means that this optional feature does not exist
-        // when not used.
-        if (this.recoveryEnabled) {
-            this.attemptInRepetitionRecovery = attemptInRepetitionRecovery;
-        }
-    };
-    Recoverable.prototype.getTokenToInsert = function (tokType) {
-        var tokToInsert = (0, tokens_public_1.createTokenInstance)(tokType, "", NaN, NaN, NaN, NaN, NaN, NaN);
-        tokToInsert.isInsertedInRecovery = true;
-        return tokToInsert;
-    };
-    Recoverable.prototype.canTokenTypeBeInsertedInRecovery = function (tokType) {
-        return true;
-    };
-    Recoverable.prototype.canTokenTypeBeDeletedInRecovery = function (tokType) {
-        return true;
-    };
-    Recoverable.prototype.tryInRepetitionRecovery = function (grammarRule, grammarRuleArgs, lookAheadFunc, expectedTokType) {
-        var _this = this;
-        // TODO: can the resyncTokenType be cached?
-        var reSyncTokType = this.findReSyncTokenType();
-        var savedLexerState = this.exportLexerState();
-        var resyncedTokens = [];
-        var passedResyncPoint = false;
-        var nextTokenWithoutResync = this.LA(1);
-        var currToken = this.LA(1);
-        var generateErrorMessage = function () {
-            var previousToken = _this.LA(0);
-            // we are preemptively re-syncing before an error has been detected, therefor we must reproduce
-            // the error that would have been thrown
-            var msg = _this.errorMessageProvider.buildMismatchTokenMessage({
-                expected: expectedTokType,
-                actual: nextTokenWithoutResync,
-                previous: previousToken,
-                ruleName: _this.getCurrRuleFullName()
-            });
-            var error = new exceptions_public_1.MismatchedTokenException(msg, nextTokenWithoutResync, _this.LA(0));
-            // the first token here will be the original cause of the error, this is not part of the resyncedTokens property.
-            error.resyncedTokens = (0, dropRight_1.default)(resyncedTokens);
-            _this.SAVE_ERROR(error);
-        };
-        while (!passedResyncPoint) {
-            // re-synced to a point where we can safely exit the repetition/
-            if (this.tokenMatcher(currToken, expectedTokType)) {
-                generateErrorMessage();
-                return; // must return here to avoid reverting the inputIdx
-            }
-            else if (lookAheadFunc.call(this)) {
-                // we skipped enough tokens so we can resync right back into another iteration of the repetition grammar rule
-                generateErrorMessage();
-                // recursive invocation in other to support multiple re-syncs in the same top level repetition grammar rule
-                grammarRule.apply(this, grammarRuleArgs);
-                return; // must return here to avoid reverting the inputIdx
-            }
-            else if (this.tokenMatcher(currToken, reSyncTokType)) {
-                passedResyncPoint = true;
-            }
-            else {
-                currToken = this.SKIP_TOKEN();
-                this.addToResyncTokens(currToken, resyncedTokens);
-            }
-        }
-        // we were unable to find a CLOSER point to resync inside the Repetition, reset the state.
-        // The parsing exception we were trying to prevent will happen in the NEXT parsing step. it may be handled by
-        // "between rules" resync recovery later in the flow.
-        this.importLexerState(savedLexerState);
-    };
-    Recoverable.prototype.shouldInRepetitionRecoveryBeTried = function (expectTokAfterLastMatch, nextTokIdx, notStuck) {
-        // Edge case of arriving from a MANY repetition which is stuck
-        // Attempting recovery in this case could cause an infinite loop
-        if (notStuck === false) {
-            return false;
-        }
-        // no need to recover, next token is what we expect...
-        if (this.tokenMatcher(this.LA(1), expectTokAfterLastMatch)) {
-            return false;
-        }
-        // error recovery is disabled during backtracking as it can make the parser ignore a valid grammar path
-        // and prefer some backtracking path that includes recovered errors.
-        if (this.isBackTracking()) {
-            return false;
-        }
-        // if we can perform inRule recovery (single token insertion or deletion) we always prefer that recovery algorithm
-        // because if it works, it makes the least amount of changes to the input stream (greedy algorithm)
-        //noinspection RedundantIfStatementJS
-        if (this.canPerformInRuleRecovery(expectTokAfterLastMatch, this.getFollowsForInRuleRecovery(expectTokAfterLastMatch, nextTokIdx))) {
-            return false;
-        }
-        return true;
-    };
-    // Error Recovery functionality
-    Recoverable.prototype.getFollowsForInRuleRecovery = function (tokType, tokIdxInRule) {
-        var grammarPath = this.getCurrentGrammarPath(tokType, tokIdxInRule);
-        var follows = this.getNextPossibleTokenTypes(grammarPath);
-        return follows;
-    };
-    Recoverable.prototype.tryInRuleRecovery = function (expectedTokType, follows) {
-        if (this.canRecoverWithSingleTokenInsertion(expectedTokType, follows)) {
-            var tokToInsert = this.getTokenToInsert(expectedTokType);
-            return tokToInsert;
-        }
-        if (this.canRecoverWithSingleTokenDeletion(expectedTokType)) {
-            var nextTok = this.SKIP_TOKEN();
-            this.consumeToken();
-            return nextTok;
-        }
-        throw new InRuleRecoveryException("sad sad panda");
-    };
-    Recoverable.prototype.canPerformInRuleRecovery = function (expectedToken, follows) {
-        return (this.canRecoverWithSingleTokenInsertion(expectedToken, follows) ||
-            this.canRecoverWithSingleTokenDeletion(expectedToken));
-    };
-    Recoverable.prototype.canRecoverWithSingleTokenInsertion = function (expectedTokType, follows) {
-        var _this = this;
-        if (!this.canTokenTypeBeInsertedInRecovery(expectedTokType)) {
-            return false;
-        }
-        // must know the possible following tokens to perform single token insertion
-        if ((0, isEmpty_1.default)(follows)) {
-            return false;
-        }
-        var mismatchedTok = this.LA(1);
-        var isMisMatchedTokInFollows = (0, find_1.default)(follows, function (possibleFollowsTokType) {
-            return _this.tokenMatcher(mismatchedTok, possibleFollowsTokType);
-        }) !== undefined;
-        return isMisMatchedTokInFollows;
-    };
-    Recoverable.prototype.canRecoverWithSingleTokenDeletion = function (expectedTokType) {
-        if (!this.canTokenTypeBeDeletedInRecovery(expectedTokType)) {
-            return false;
-        }
-        var isNextTokenWhatIsExpected = this.tokenMatcher(this.LA(2), expectedTokType);
-        return isNextTokenWhatIsExpected;
-    };
-    Recoverable.prototype.isInCurrentRuleReSyncSet = function (tokenTypeIdx) {
-        var followKey = this.getCurrFollowKey();
-        var currentRuleReSyncSet = this.getFollowSetFromFollowKey(followKey);
-        return (0, includes_1.default)(currentRuleReSyncSet, tokenTypeIdx);
-    };
-    Recoverable.prototype.findReSyncTokenType = function () {
-        var allPossibleReSyncTokTypes = this.flattenFollowSet();
-        // this loop will always terminate as EOF is always in the follow stack and also always (virtually) in the input
-        var nextToken = this.LA(1);
-        var k = 2;
-        while (true) {
-            var foundMatch = (0, find_1.default)(allPossibleReSyncTokTypes, function (resyncTokType) {
-                var canMatch = (0, tokens_public_1.tokenMatcher)(nextToken, resyncTokType);
-                return canMatch;
-            });
-            if (foundMatch !== undefined) {
-                return foundMatch;
-            }
-            nextToken = this.LA(k);
-            k++;
-        }
-    };
-    Recoverable.prototype.getCurrFollowKey = function () {
-        // the length is at least one as we always add the ruleName to the stack before invoking the rule.
-        if (this.RULE_STACK.length === 1) {
-            return exports.EOF_FOLLOW_KEY;
-        }
-        var currRuleShortName = this.getLastExplicitRuleShortName();
-        var currRuleIdx = this.getLastExplicitRuleOccurrenceIndex();
-        var prevRuleShortName = this.getPreviousExplicitRuleShortName();
-        return {
-            ruleName: this.shortRuleNameToFullName(currRuleShortName),
-            idxInCallingRule: currRuleIdx,
-            inRule: this.shortRuleNameToFullName(prevRuleShortName)
-        };
-    };
-    Recoverable.prototype.buildFullFollowKeyStack = function () {
-        var _this = this;
-        var explicitRuleStack = this.RULE_STACK;
-        var explicitOccurrenceStack = this.RULE_OCCURRENCE_STACK;
-        return (0, map_1.default)(explicitRuleStack, function (ruleName, idx) {
-            if (idx === 0) {
-                return exports.EOF_FOLLOW_KEY;
-            }
-            return {
-                ruleName: _this.shortRuleNameToFullName(ruleName),
-                idxInCallingRule: explicitOccurrenceStack[idx],
-                inRule: _this.shortRuleNameToFullName(explicitRuleStack[idx - 1])
-            };
-        });
-    };
-    Recoverable.prototype.flattenFollowSet = function () {
-        var _this = this;
-        var followStack = (0, map_1.default)(this.buildFullFollowKeyStack(), function (currKey) {
-            return _this.getFollowSetFromFollowKey(currKey);
-        });
-        return (0, flatten_1.default)(followStack);
-    };
-    Recoverable.prototype.getFollowSetFromFollowKey = function (followKey) {
-        if (followKey === exports.EOF_FOLLOW_KEY) {
-            return [tokens_public_1.EOF];
-        }
-        var followName = followKey.ruleName + followKey.idxInCallingRule + constants_1.IN + followKey.inRule;
-        return this.resyncFollows[followName];
-    };
-    // It does not make any sense to include a virtual EOF token in the list of resynced tokens
-    // as EOF does not really exist and thus does not contain any useful information (line/column numbers)
-    Recoverable.prototype.addToResyncTokens = function (token, resyncTokens) {
-        if (!this.tokenMatcher(token, tokens_public_1.EOF)) {
-            resyncTokens.push(token);
-        }
-        return resyncTokens;
-    };
-    Recoverable.prototype.reSyncTo = function (tokType) {
-        var resyncedTokens = [];
-        var nextTok = this.LA(1);
-        while (this.tokenMatcher(nextTok, tokType) === false) {
-            nextTok = this.SKIP_TOKEN();
-            this.addToResyncTokens(nextTok, resyncedTokens);
-        }
-        // the last token is not part of the error.
-        return (0, dropRight_1.default)(resyncedTokens);
-    };
-    Recoverable.prototype.attemptInRepetitionRecovery = function (prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {
-        // by default this is a NO-OP
-        // The actual implementation is with the function(not method) below
-    };
-    Recoverable.prototype.getCurrentGrammarPath = function (tokType, tokIdxInRule) {
-        var pathRuleStack = this.getHumanReadableRuleStack();
-        var pathOccurrenceStack = (0, clone_1.default)(this.RULE_OCCURRENCE_STACK);
-        var grammarPath = {
-            ruleStack: pathRuleStack,
-            occurrenceStack: pathOccurrenceStack,
-            lastTok: tokType,
-            lastTokOccurrence: tokIdxInRule
-        };
-        return grammarPath;
-    };
-    Recoverable.prototype.getHumanReadableRuleStack = function () {
-        var _this = this;
-        return (0, map_1.default)(this.RULE_STACK, function (currShortName) {
-            return _this.shortRuleNameToFullName(currShortName);
-        });
-    };
-    return Recoverable;
-}());
-exports.Recoverable = Recoverable;
-function attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {
-    var key = this.getKeyForAutomaticLookahead(dslMethodIdx, prodOccurrence);
-    var firstAfterRepInfo = this.firstAfterRepMap[key];
-    if (firstAfterRepInfo === undefined) {
-        var currRuleName = this.getCurrRuleFullName();
-        var ruleGrammar = this.getGAstProductions()[currRuleName];
-        var walker = new nextToksWalker(ruleGrammar, prodOccurrence);
-        firstAfterRepInfo = walker.startWalking();
-        this.firstAfterRepMap[key] = firstAfterRepInfo;
-    }
-    var expectTokAfterLastMatch = firstAfterRepInfo.token;
-    var nextTokIdx = firstAfterRepInfo.occurrence;
-    var isEndOfRule = firstAfterRepInfo.isEndOfRule;
-    // special edge case of a TOP most repetition after which the input should END.
-    // this will force an attempt for inRule recovery in that scenario.
-    if (this.RULE_STACK.length === 1 &&
-        isEndOfRule &&
-        expectTokAfterLastMatch === undefined) {
-        expectTokAfterLastMatch = tokens_public_1.EOF;
-        nextTokIdx = 1;
-    }
-    // We don't have anything to re-sync to...
-    // this condition was extracted from `shouldInRepetitionRecoveryBeTried` to act as a type-guard
-    if (expectTokAfterLastMatch === undefined || nextTokIdx === undefined) {
-        return;
-    }
-    if (this.shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck)) {
-        // TODO: performance optimization: instead of passing the original args here, we modify
-        // the args param (or create a new one) and make sure the lookahead func is explicitly provided
-        // to avoid searching the cache for it once more.
-        this.tryInRepetitionRecovery(prodFunc, args, lookaheadFunc, expectTokAfterLastMatch);
-    }
-}
-exports.attemptInRepetitionRecovery = attemptInRepetitionRecovery;
-//# sourceMappingURL=recoverable.js.map
-
-/***/ }),
-
-/***/ 50943:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.TreeBuilder = void 0;
-var cst_1 = __webpack_require__(23059);
-var noop_1 = __importDefault(__webpack_require__(50308));
-var has_1 = __importDefault(__webpack_require__(18721));
-var keys_1 = __importDefault(__webpack_require__(3674));
-var isUndefined_1 = __importDefault(__webpack_require__(52353));
-var cst_visitor_1 = __webpack_require__(85480);
-var parser_1 = __webpack_require__(81183);
-/**
- * This trait is responsible for the CST building logic.
- */
-var TreeBuilder = /** @class */ (function () {
-    function TreeBuilder() {
-    }
-    TreeBuilder.prototype.initTreeBuilder = function (config) {
-        this.CST_STACK = [];
-        // outputCst is no longer exposed/defined in the pubic API
-        this.outputCst = config.outputCst;
-        this.nodeLocationTracking = (0, has_1.default)(config, "nodeLocationTracking")
-            ? config.nodeLocationTracking // assumes end user provides the correct config value/type
-            : parser_1.DEFAULT_PARSER_CONFIG.nodeLocationTracking;
-        if (!this.outputCst) {
-            this.cstInvocationStateUpdate = noop_1.default;
-            this.cstFinallyStateUpdate = noop_1.default;
-            this.cstPostTerminal = noop_1.default;
-            this.cstPostNonTerminal = noop_1.default;
-            this.cstPostRule = noop_1.default;
-        }
-        else {
-            if (/full/i.test(this.nodeLocationTracking)) {
-                if (this.recoveryEnabled) {
-                    this.setNodeLocationFromToken = cst_1.setNodeLocationFull;
-                    this.setNodeLocationFromNode = cst_1.setNodeLocationFull;
-                    this.cstPostRule = noop_1.default;
-                    this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery;
-                }
-                else {
-                    this.setNodeLocationFromToken = noop_1.default;
-                    this.setNodeLocationFromNode = noop_1.default;
-                    this.cstPostRule = this.cstPostRuleFull;
-                    this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular;
-                }
-            }
-            else if (/onlyOffset/i.test(this.nodeLocationTracking)) {
-                if (this.recoveryEnabled) {
-                    this.setNodeLocationFromToken = cst_1.setNodeLocationOnlyOffset;
-                    this.setNodeLocationFromNode = cst_1.setNodeLocationOnlyOffset;
-                    this.cstPostRule = noop_1.default;
-                    this.setInitialNodeLocation =
-                        this.setInitialNodeLocationOnlyOffsetRecovery;
-                }
-                else {
-                    this.setNodeLocationFromToken = noop_1.default;
-                    this.setNodeLocationFromNode = noop_1.default;
-                    this.cstPostRule = this.cstPostRuleOnlyOffset;
-                    this.setInitialNodeLocation =
-                        this.setInitialNodeLocationOnlyOffsetRegular;
-                }
-            }
-            else if (/none/i.test(this.nodeLocationTracking)) {
-                this.setNodeLocationFromToken = noop_1.default;
-                this.setNodeLocationFromNode = noop_1.default;
-                this.cstPostRule = noop_1.default;
-                this.setInitialNodeLocation = noop_1.default;
-            }
-            else {
-                throw Error("Invalid <nodeLocationTracking> config option: \"".concat(config.nodeLocationTracking, "\""));
-            }
-        }
-    };
-    TreeBuilder.prototype.setInitialNodeLocationOnlyOffsetRecovery = function (cstNode) {
-        cstNode.location = {
-            startOffset: NaN,
-            endOffset: NaN
-        };
-    };
-    TreeBuilder.prototype.setInitialNodeLocationOnlyOffsetRegular = function (cstNode) {
-        cstNode.location = {
-            // without error recovery the starting Location of a new CstNode is guaranteed
-            // To be the next Token's startOffset (for valid inputs).
-            // For invalid inputs there won't be any CSTOutput so this potential
-            // inaccuracy does not matter
-            startOffset: this.LA(1).startOffset,
-            endOffset: NaN
-        };
-    };
-    TreeBuilder.prototype.setInitialNodeLocationFullRecovery = function (cstNode) {
-        cstNode.location = {
-            startOffset: NaN,
-            startLine: NaN,
-            startColumn: NaN,
-            endOffset: NaN,
-            endLine: NaN,
-            endColumn: NaN
-        };
-    };
-    /**
-       *  @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work
-  
-       * @param cstNode
-       */
-    TreeBuilder.prototype.setInitialNodeLocationFullRegular = function (cstNode) {
-        var nextToken = this.LA(1);
-        cstNode.location = {
-            startOffset: nextToken.startOffset,
-            startLine: nextToken.startLine,
-            startColumn: nextToken.startColumn,
-            endOffset: NaN,
-            endLine: NaN,
-            endColumn: NaN
-        };
-    };
-    TreeBuilder.prototype.cstInvocationStateUpdate = function (fullRuleName) {
-        var cstNode = {
-            name: fullRuleName,
-            children: Object.create(null)
-        };
-        this.setInitialNodeLocation(cstNode);
-        this.CST_STACK.push(cstNode);
-    };
-    TreeBuilder.prototype.cstFinallyStateUpdate = function () {
-        this.CST_STACK.pop();
-    };
-    TreeBuilder.prototype.cstPostRuleFull = function (ruleCstNode) {
-        // casts to `required<CstNodeLocation>` are safe because `cstPostRuleFull` should only be invoked when full location is enabled
-        var prevToken = this.LA(0);
-        var loc = ruleCstNode.location;
-        // If this condition is true it means we consumed at least one Token
-        // In this CstNode.
-        if (loc.startOffset <= prevToken.startOffset === true) {
-            loc.endOffset = prevToken.endOffset;
-            loc.endLine = prevToken.endLine;
-            loc.endColumn = prevToken.endColumn;
-        }
-        // "empty" CstNode edge case
-        else {
-            loc.startOffset = NaN;
-            loc.startLine = NaN;
-            loc.startColumn = NaN;
-        }
-    };
-    TreeBuilder.prototype.cstPostRuleOnlyOffset = function (ruleCstNode) {
-        var prevToken = this.LA(0);
-        // `location' is not null because `cstPostRuleOnlyOffset` will only be invoked when location tracking is enabled.
-        var loc = ruleCstNode.location;
-        // If this condition is true it means we consumed at least one Token
-        // In this CstNode.
-        if (loc.startOffset <= prevToken.startOffset === true) {
-            loc.endOffset = prevToken.endOffset;
-        }
-        // "empty" CstNode edge case
-        else {
-            loc.startOffset = NaN;
-        }
-    };
-    TreeBuilder.prototype.cstPostTerminal = function (key, consumedToken) {
-        var rootCst = this.CST_STACK[this.CST_STACK.length - 1];
-        (0, cst_1.addTerminalToCst)(rootCst, consumedToken, key);
-        // This is only used when **both** error recovery and CST Output are enabled.
-        this.setNodeLocationFromToken(rootCst.location, consumedToken);
-    };
-    TreeBuilder.prototype.cstPostNonTerminal = function (ruleCstResult, ruleName) {
-        var preCstNode = this.CST_STACK[this.CST_STACK.length - 1];
-        (0, cst_1.addNoneTerminalToCst)(preCstNode, ruleName, ruleCstResult);
-        // This is only used when **both** error recovery and CST Output are enabled.
-        this.setNodeLocationFromNode(preCstNode.location, ruleCstResult.location);
-    };
-    TreeBuilder.prototype.getBaseCstVisitorConstructor = function () {
-        if ((0, isUndefined_1.default)(this.baseCstVisitorConstructor)) {
-            var newBaseCstVisitorConstructor = (0, cst_visitor_1.createBaseSemanticVisitorConstructor)(this.className, (0, keys_1.default)(this.gastProductionsCache));
-            this.baseCstVisitorConstructor = newBaseCstVisitorConstructor;
-            return newBaseCstVisitorConstructor;
-        }
-        return this.baseCstVisitorConstructor;
-    };
-    TreeBuilder.prototype.getBaseCstVisitorConstructorWithDefaults = function () {
-        if ((0, isUndefined_1.default)(this.baseCstVisitorWithDefaultsConstructor)) {
-            var newConstructor = (0, cst_visitor_1.createBaseVisitorConstructorWithDefaults)(this.className, (0, keys_1.default)(this.gastProductionsCache), this.getBaseCstVisitorConstructor());
-            this.baseCstVisitorWithDefaultsConstructor = newConstructor;
-            return newConstructor;
-        }
-        return this.baseCstVisitorWithDefaultsConstructor;
-    };
-    TreeBuilder.prototype.getLastExplicitRuleShortName = function () {
-        var ruleStack = this.RULE_STACK;
-        return ruleStack[ruleStack.length - 1];
-    };
-    TreeBuilder.prototype.getPreviousExplicitRuleShortName = function () {
-        var ruleStack = this.RULE_STACK;
-        return ruleStack[ruleStack.length - 2];
-    };
-    TreeBuilder.prototype.getLastExplicitRuleOccurrenceIndex = function () {
-        var occurrenceStack = this.RULE_OCCURRENCE_STACK;
-        return occurrenceStack[occurrenceStack.length - 1];
-    };
-    return TreeBuilder;
-}());
-exports.TreeBuilder = TreeBuilder;
-//# sourceMappingURL=tree_builder.js.map
-
-/***/ }),
-
-/***/ 14989:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.applyMixins = void 0;
-function applyMixins(derivedCtor, baseCtors) {
-    baseCtors.forEach(function (baseCtor) {
-        var baseProto = baseCtor.prototype;
-        Object.getOwnPropertyNames(baseProto).forEach(function (propName) {
-            if (propName === "constructor") {
-                return;
-            }
-            var basePropDescriptor = Object.getOwnPropertyDescriptor(baseProto, propName);
-            // Handle Accessors
-            if (basePropDescriptor &&
-                (basePropDescriptor.get || basePropDescriptor.set)) {
-                Object.defineProperty(derivedCtor.prototype, propName, basePropDescriptor);
-            }
-            else {
-                derivedCtor.prototype[propName] = baseCtor.prototype[propName];
-            }
-        });
-    });
-}
-exports.applyMixins = applyMixins;
-//# sourceMappingURL=apply_mixins.js.map
-
-/***/ }),
-
-/***/ 74879:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        if (typeof b !== "function" && b !== null)
-            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.charCodeToOptimizedIndex = exports.minOptimizationVal = exports.buildLineBreakIssueMessage = exports.LineTerminatorOptimizedTester = exports.isShortPattern = exports.isCustomPattern = exports.cloneEmptyGroups = exports.performWarningRuntimeChecks = exports.performRuntimeChecks = exports.addStickyFlag = exports.addStartOfInput = exports.findUnreachablePatterns = exports.findModesThatDoNotExist = exports.findInvalidGroupType = exports.findDuplicatePatterns = exports.findUnsupportedFlags = exports.findStartOfInputAnchor = exports.findEmptyMatchRegExps = exports.findEndOfInputAnchor = exports.findInvalidPatterns = exports.findMissingPatterns = exports.validatePatterns = exports.analyzeTokenTypes = exports.enableSticky = exports.disableSticky = exports.SUPPORT_STICKY = exports.MODES = exports.DEFAULT_MODE = void 0;
-var regexp_to_ast_1 = __webpack_require__(94556);
-var lexer_public_1 = __webpack_require__(88200);
-var first_1 = __importDefault(__webpack_require__(8804));
-var isEmpty_1 = __importDefault(__webpack_require__(41609));
-var compact_1 = __importDefault(__webpack_require__(39693));
-var isArray_1 = __importDefault(__webpack_require__(1469));
-var values_1 = __importDefault(__webpack_require__(52628));
-var flatten_1 = __importDefault(__webpack_require__(85564));
-var reject_1 = __importDefault(__webpack_require__(43063));
-var difference_1 = __importDefault(__webpack_require__(91966));
-var indexOf_1 = __importDefault(__webpack_require__(3651));
-var map_1 = __importDefault(__webpack_require__(35161));
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var isString_1 = __importDefault(__webpack_require__(47037));
-var isFunction_1 = __importDefault(__webpack_require__(23560));
-var isUndefined_1 = __importDefault(__webpack_require__(52353));
-var find_1 = __importDefault(__webpack_require__(13311));
-var has_1 = __importDefault(__webpack_require__(18721));
-var keys_1 = __importDefault(__webpack_require__(3674));
-var isRegExp_1 = __importDefault(__webpack_require__(96347));
-var filter_1 = __importDefault(__webpack_require__(63105));
-var defaults_1 = __importDefault(__webpack_require__(91747));
-var reduce_1 = __importDefault(__webpack_require__(54061));
-var includes_1 = __importDefault(__webpack_require__(64721));
-var utils_1 = __webpack_require__(68877);
-var reg_exp_1 = __webpack_require__(98759);
-var reg_exp_parser_1 = __webpack_require__(34811);
-var PATTERN = "PATTERN";
-exports.DEFAULT_MODE = "defaultMode";
-exports.MODES = "modes";
-exports.SUPPORT_STICKY = typeof new RegExp("(?:)").sticky === "boolean";
-function disableSticky() {
-    exports.SUPPORT_STICKY = false;
-}
-exports.disableSticky = disableSticky;
-function enableSticky() {
-    exports.SUPPORT_STICKY = true;
-}
-exports.enableSticky = enableSticky;
-function analyzeTokenTypes(tokenTypes, options) {
-    options = (0, defaults_1.default)(options, {
-        useSticky: exports.SUPPORT_STICKY,
-        debug: false,
-        safeMode: false,
-        positionTracking: "full",
-        lineTerminatorCharacters: ["\r", "\n"],
-        tracer: function (msg, action) { return action(); }
-    });
-    var tracer = options.tracer;
-    tracer("initCharCodeToOptimizedIndexMap", function () {
-        initCharCodeToOptimizedIndexMap();
-    });
-    var onlyRelevantTypes;
-    tracer("Reject Lexer.NA", function () {
-        onlyRelevantTypes = (0, reject_1.default)(tokenTypes, function (currType) {
-            return currType[PATTERN] === lexer_public_1.Lexer.NA;
-        });
-    });
-    var hasCustom = false;
-    var allTransformedPatterns;
-    tracer("Transform Patterns", function () {
-        hasCustom = false;
-        allTransformedPatterns = (0, map_1.default)(onlyRelevantTypes, function (currType) {
-            var currPattern = currType[PATTERN];
-            /* istanbul ignore else */
-            if ((0, isRegExp_1.default)(currPattern)) {
-                var regExpSource = currPattern.source;
-                if (regExpSource.length === 1 &&
-                    // only these regExp meta characters which can appear in a length one regExp
-                    regExpSource !== "^" &&
-                    regExpSource !== "$" &&
-                    regExpSource !== "." &&
-                    !currPattern.ignoreCase) {
-                    return regExpSource;
-                }
-                else if (regExpSource.length === 2 &&
-                    regExpSource[0] === "\\" &&
-                    // not a meta character
-                    !(0, includes_1.default)([
-                        "d",
-                        "D",
-                        "s",
-                        "S",
-                        "t",
-                        "r",
-                        "n",
-                        "t",
-                        "0",
-                        "c",
-                        "b",
-                        "B",
-                        "f",
-                        "v",
-                        "w",
-                        "W"
-                    ], regExpSource[1])) {
-                    // escaped meta Characters: /\+/ /\[/
-                    // or redundant escaping: /\a/
-                    // without the escaping "\"
-                    return regExpSource[1];
-                }
-                else {
-                    return options.useSticky
-                        ? addStickyFlag(currPattern)
-                        : addStartOfInput(currPattern);
-                }
-            }
-            else if ((0, isFunction_1.default)(currPattern)) {
-                hasCustom = true;
-                // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object
-                return { exec: currPattern };
-            }
-            else if (typeof currPattern === "object") {
-                hasCustom = true;
-                // ICustomPattern
-                return currPattern;
-            }
-            else if (typeof currPattern === "string") {
-                if (currPattern.length === 1) {
-                    return currPattern;
-                }
-                else {
-                    var escapedRegExpString = currPattern.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
-                    var wrappedRegExp = new RegExp(escapedRegExpString);
-                    return options.useSticky
-                        ? addStickyFlag(wrappedRegExp)
-                        : addStartOfInput(wrappedRegExp);
-                }
-            }
-            else {
-                throw Error("non exhaustive match");
-            }
-        });
-    });
-    var patternIdxToType;
-    var patternIdxToGroup;
-    var patternIdxToLongerAltIdxArr;
-    var patternIdxToPushMode;
-    var patternIdxToPopMode;
-    tracer("misc mapping", function () {
-        patternIdxToType = (0, map_1.default)(onlyRelevantTypes, function (currType) { return currType.tokenTypeIdx; });
-        patternIdxToGroup = (0, map_1.default)(onlyRelevantTypes, function (clazz) {
-            var groupName = clazz.GROUP;
-            /* istanbul ignore next */
-            if (groupName === lexer_public_1.Lexer.SKIPPED) {
-                return undefined;
-            }
-            else if ((0, isString_1.default)(groupName)) {
-                return groupName;
-            }
-            else if ((0, isUndefined_1.default)(groupName)) {
-                return false;
-            }
-            else {
-                throw Error("non exhaustive match");
-            }
-        });
-        patternIdxToLongerAltIdxArr = (0, map_1.default)(onlyRelevantTypes, function (clazz) {
-            var longerAltType = clazz.LONGER_ALT;
-            if (longerAltType) {
-                var longerAltIdxArr = (0, isArray_1.default)(longerAltType)
-                    ? (0, map_1.default)(longerAltType, function (type) { return (0, indexOf_1.default)(onlyRelevantTypes, type); })
-                    : [(0, indexOf_1.default)(onlyRelevantTypes, longerAltType)];
-                return longerAltIdxArr;
-            }
-        });
-        patternIdxToPushMode = (0, map_1.default)(onlyRelevantTypes, function (clazz) { return clazz.PUSH_MODE; });
-        patternIdxToPopMode = (0, map_1.default)(onlyRelevantTypes, function (clazz) {
-            return (0, has_1.default)(clazz, "POP_MODE");
-        });
-    });
-    var patternIdxToCanLineTerminator;
-    tracer("Line Terminator Handling", function () {
-        var lineTerminatorCharCodes = getCharCodes(options.lineTerminatorCharacters);
-        patternIdxToCanLineTerminator = (0, map_1.default)(onlyRelevantTypes, function (tokType) { return false; });
-        if (options.positionTracking !== "onlyOffset") {
-            patternIdxToCanLineTerminator = (0, map_1.default)(onlyRelevantTypes, function (tokType) {
-                if ((0, has_1.default)(tokType, "LINE_BREAKS")) {
-                    return !!tokType.LINE_BREAKS;
-                }
-                else {
-                    return (checkLineBreaksIssues(tokType, lineTerminatorCharCodes) === false &&
-                        (0, reg_exp_1.canMatchCharCode)(lineTerminatorCharCodes, tokType.PATTERN));
-                }
-            });
-        }
-    });
-    var patternIdxToIsCustom;
-    var patternIdxToShort;
-    var emptyGroups;
-    var patternIdxToConfig;
-    tracer("Misc Mapping #2", function () {
-        patternIdxToIsCustom = (0, map_1.default)(onlyRelevantTypes, isCustomPattern);
-        patternIdxToShort = (0, map_1.default)(allTransformedPatterns, isShortPattern);
-        emptyGroups = (0, reduce_1.default)(onlyRelevantTypes, function (acc, clazz) {
-            var groupName = clazz.GROUP;
-            if ((0, isString_1.default)(groupName) && !(groupName === lexer_public_1.Lexer.SKIPPED)) {
-                acc[groupName] = [];
-            }
-            return acc;
-        }, {});
-        patternIdxToConfig = (0, map_1.default)(allTransformedPatterns, function (x, idx) {
-            return {
-                pattern: allTransformedPatterns[idx],
-                longerAlt: patternIdxToLongerAltIdxArr[idx],
-                canLineTerminator: patternIdxToCanLineTerminator[idx],
-                isCustom: patternIdxToIsCustom[idx],
-                short: patternIdxToShort[idx],
-                group: patternIdxToGroup[idx],
-                push: patternIdxToPushMode[idx],
-                pop: patternIdxToPopMode[idx],
-                tokenTypeIdx: patternIdxToType[idx],
-                tokenType: onlyRelevantTypes[idx]
-            };
-        });
-    });
-    var canBeOptimized = true;
-    var charCodeToPatternIdxToConfig = [];
-    if (!options.safeMode) {
-        tracer("First Char Optimization", function () {
-            charCodeToPatternIdxToConfig = (0, reduce_1.default)(onlyRelevantTypes, function (result, currTokType, idx) {
-                if (typeof currTokType.PATTERN === "string") {
-                    var charCode = currTokType.PATTERN.charCodeAt(0);
-                    var optimizedIdx = charCodeToOptimizedIndex(charCode);
-                    addToMapOfArrays(result, optimizedIdx, patternIdxToConfig[idx]);
-                }
-                else if ((0, isArray_1.default)(currTokType.START_CHARS_HINT)) {
-                    var lastOptimizedIdx_1;
-                    (0, forEach_1.default)(currTokType.START_CHARS_HINT, function (charOrInt) {
-                        var charCode = typeof charOrInt === "string"
-                            ? charOrInt.charCodeAt(0)
-                            : charOrInt;
-                        var currOptimizedIdx = charCodeToOptimizedIndex(charCode);
-                        // Avoid adding the config multiple times
-                        /* istanbul ignore else */
-                        // - Difficult to check this scenario effects as it is only a performance
-                        //   optimization that does not change correctness
-                        if (lastOptimizedIdx_1 !== currOptimizedIdx) {
-                            lastOptimizedIdx_1 = currOptimizedIdx;
-                            addToMapOfArrays(result, currOptimizedIdx, patternIdxToConfig[idx]);
-                        }
-                    });
-                }
-                else if ((0, isRegExp_1.default)(currTokType.PATTERN)) {
-                    if (currTokType.PATTERN.unicode) {
-                        canBeOptimized = false;
-                        if (options.ensureOptimizations) {
-                            (0, utils_1.PRINT_ERROR)("".concat(reg_exp_1.failedOptimizationPrefixMsg) +
-                                "\tUnable to analyze < ".concat(currTokType.PATTERN.toString(), " > pattern.\n") +
-                                "\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\n" +
-                                "\tThis will disable the lexer's first char optimizations.\n" +
-                                "\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE");
-                        }
-                    }
-                    else {
-                        var optimizedCodes = (0, reg_exp_1.getOptimizedStartCodesIndices)(currTokType.PATTERN, options.ensureOptimizations);
-                        /* istanbul ignore if */
-                        // start code will only be empty given an empty regExp or failure of regexp-to-ast library
-                        // the first should be a different validation and the second cannot be tested.
-                        if ((0, isEmpty_1.default)(optimizedCodes)) {
-                            // we cannot understand what codes may start possible matches
-                            // The optimization correctness requires knowing start codes for ALL patterns.
-                            // Not actually sure this is an error, no debug message
-                            canBeOptimized = false;
-                        }
-                        (0, forEach_1.default)(optimizedCodes, function (code) {
-                            addToMapOfArrays(result, code, patternIdxToConfig[idx]);
-                        });
-                    }
-                }
-                else {
-                    if (options.ensureOptimizations) {
-                        (0, utils_1.PRINT_ERROR)("".concat(reg_exp_1.failedOptimizationPrefixMsg) +
-                            "\tTokenType: <".concat(currTokType.name, "> is using a custom token pattern without providing <start_chars_hint> parameter.\n") +
-                            "\tThis will disable the lexer's first char optimizations.\n" +
-                            "\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE");
-                    }
-                    canBeOptimized = false;
-                }
-                return result;
-            }, []);
-        });
-    }
-    return {
-        emptyGroups: emptyGroups,
-        patternIdxToConfig: patternIdxToConfig,
-        charCodeToPatternIdxToConfig: charCodeToPatternIdxToConfig,
-        hasCustom: hasCustom,
-        canBeOptimized: canBeOptimized
-    };
-}
-exports.analyzeTokenTypes = analyzeTokenTypes;
-function validatePatterns(tokenTypes, validModesNames) {
-    var errors = [];
-    var missingResult = findMissingPatterns(tokenTypes);
-    errors = errors.concat(missingResult.errors);
-    var invalidResult = findInvalidPatterns(missingResult.valid);
-    var validTokenTypes = invalidResult.valid;
-    errors = errors.concat(invalidResult.errors);
-    errors = errors.concat(validateRegExpPattern(validTokenTypes));
-    errors = errors.concat(findInvalidGroupType(validTokenTypes));
-    errors = errors.concat(findModesThatDoNotExist(validTokenTypes, validModesNames));
-    errors = errors.concat(findUnreachablePatterns(validTokenTypes));
-    return errors;
-}
-exports.validatePatterns = validatePatterns;
-function validateRegExpPattern(tokenTypes) {
-    var errors = [];
-    var withRegExpPatterns = (0, filter_1.default)(tokenTypes, function (currTokType) {
-        return (0, isRegExp_1.default)(currTokType[PATTERN]);
-    });
-    errors = errors.concat(findEndOfInputAnchor(withRegExpPatterns));
-    errors = errors.concat(findStartOfInputAnchor(withRegExpPatterns));
-    errors = errors.concat(findUnsupportedFlags(withRegExpPatterns));
-    errors = errors.concat(findDuplicatePatterns(withRegExpPatterns));
-    errors = errors.concat(findEmptyMatchRegExps(withRegExpPatterns));
-    return errors;
-}
-function findMissingPatterns(tokenTypes) {
-    var tokenTypesWithMissingPattern = (0, filter_1.default)(tokenTypes, function (currType) {
-        return !(0, has_1.default)(currType, PATTERN);
-    });
-    var errors = (0, map_1.default)(tokenTypesWithMissingPattern, function (currType) {
-        return {
-            message: "Token Type: ->" +
-                currType.name +
-                "<- missing static 'PATTERN' property",
-            type: lexer_public_1.LexerDefinitionErrorType.MISSING_PATTERN,
-            tokenTypes: [currType]
-        };
-    });
-    var valid = (0, difference_1.default)(tokenTypes, tokenTypesWithMissingPattern);
-    return { errors: errors, valid: valid };
-}
-exports.findMissingPatterns = findMissingPatterns;
-function findInvalidPatterns(tokenTypes) {
-    var tokenTypesWithInvalidPattern = (0, filter_1.default)(tokenTypes, function (currType) {
-        var pattern = currType[PATTERN];
-        return (!(0, isRegExp_1.default)(pattern) &&
-            !(0, isFunction_1.default)(pattern) &&
-            !(0, has_1.default)(pattern, "exec") &&
-            !(0, isString_1.default)(pattern));
-    });
-    var errors = (0, map_1.default)(tokenTypesWithInvalidPattern, function (currType) {
-        return {
-            message: "Token Type: ->" +
-                currType.name +
-                "<- static 'PATTERN' can only be a RegExp, a" +
-                " Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",
-            type: lexer_public_1.LexerDefinitionErrorType.INVALID_PATTERN,
-            tokenTypes: [currType]
-        };
-    });
-    var valid = (0, difference_1.default)(tokenTypes, tokenTypesWithInvalidPattern);
-    return { errors: errors, valid: valid };
-}
-exports.findInvalidPatterns = findInvalidPatterns;
-var end_of_input = /[^\\][$]/;
-function findEndOfInputAnchor(tokenTypes) {
-    var EndAnchorFinder = /** @class */ (function (_super) {
-        __extends(EndAnchorFinder, _super);
-        function EndAnchorFinder() {
-            var _this = _super !== null && _super.apply(this, arguments) || this;
-            _this.found = false;
-            return _this;
-        }
-        EndAnchorFinder.prototype.visitEndAnchor = function (node) {
-            this.found = true;
-        };
-        return EndAnchorFinder;
-    }(regexp_to_ast_1.BaseRegExpVisitor));
-    var invalidRegex = (0, filter_1.default)(tokenTypes, function (currType) {
-        var pattern = currType.PATTERN;
-        try {
-            var regexpAst = (0, reg_exp_parser_1.getRegExpAst)(pattern);
-            var endAnchorVisitor = new EndAnchorFinder();
-            endAnchorVisitor.visit(regexpAst);
-            return endAnchorVisitor.found;
-        }
-        catch (e) {
-            // old behavior in case of runtime exceptions with regexp-to-ast.
-            /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/
-            return end_of_input.test(pattern.source);
-        }
-    });
-    var errors = (0, map_1.default)(invalidRegex, function (currType) {
-        return {
-            message: "Unexpected RegExp Anchor Error:\n" +
-                "\tToken Type: ->" +
-                currType.name +
-                "<- static 'PATTERN' cannot contain end of input anchor '$'\n" +
-                "\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS" +
-                "\tfor details.",
-            type: lexer_public_1.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,
-            tokenTypes: [currType]
-        };
-    });
-    return errors;
-}
-exports.findEndOfInputAnchor = findEndOfInputAnchor;
-function findEmptyMatchRegExps(tokenTypes) {
-    var matchesEmptyString = (0, filter_1.default)(tokenTypes, function (currType) {
-        var pattern = currType.PATTERN;
-        return pattern.test("");
-    });
-    var errors = (0, map_1.default)(matchesEmptyString, function (currType) {
-        return {
-            message: "Token Type: ->" +
-                currType.name +
-                "<- static 'PATTERN' must not match an empty string",
-            type: lexer_public_1.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,
-            tokenTypes: [currType]
-        };
-    });
-    return errors;
-}
-exports.findEmptyMatchRegExps = findEmptyMatchRegExps;
-var start_of_input = /[^\\[][\^]|^\^/;
-function findStartOfInputAnchor(tokenTypes) {
-    var StartAnchorFinder = /** @class */ (function (_super) {
-        __extends(StartAnchorFinder, _super);
-        function StartAnchorFinder() {
-            var _this = _super !== null && _super.apply(this, arguments) || this;
-            _this.found = false;
-            return _this;
-        }
-        StartAnchorFinder.prototype.visitStartAnchor = function (node) {
-            this.found = true;
-        };
-        return StartAnchorFinder;
-    }(regexp_to_ast_1.BaseRegExpVisitor));
-    var invalidRegex = (0, filter_1.default)(tokenTypes, function (currType) {
-        var pattern = currType.PATTERN;
-        try {
-            var regexpAst = (0, reg_exp_parser_1.getRegExpAst)(pattern);
-            var startAnchorVisitor = new StartAnchorFinder();
-            startAnchorVisitor.visit(regexpAst);
-            return startAnchorVisitor.found;
-        }
-        catch (e) {
-            // old behavior in case of runtime exceptions with regexp-to-ast.
-            /* istanbul ignore next - cannot ensure an error in regexp-to-ast*/
-            return start_of_input.test(pattern.source);
-        }
-    });
-    var errors = (0, map_1.default)(invalidRegex, function (currType) {
-        return {
-            message: "Unexpected RegExp Anchor Error:\n" +
-                "\tToken Type: ->" +
-                currType.name +
-                "<- static 'PATTERN' cannot contain start of input anchor '^'\n" +
-                "\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS" +
-                "\tfor details.",
-            type: lexer_public_1.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,
-            tokenTypes: [currType]
-        };
-    });
-    return errors;
-}
-exports.findStartOfInputAnchor = findStartOfInputAnchor;
-function findUnsupportedFlags(tokenTypes) {
-    var invalidFlags = (0, filter_1.default)(tokenTypes, function (currType) {
-        var pattern = currType[PATTERN];
-        return pattern instanceof RegExp && (pattern.multiline || pattern.global);
-    });
-    var errors = (0, map_1.default)(invalidFlags, function (currType) {
-        return {
-            message: "Token Type: ->" +
-                currType.name +
-                "<- static 'PATTERN' may NOT contain global('g') or multiline('m')",
-            type: lexer_public_1.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,
-            tokenTypes: [currType]
-        };
-    });
-    return errors;
-}
-exports.findUnsupportedFlags = findUnsupportedFlags;
-// This can only test for identical duplicate RegExps, not semantically equivalent ones.
-function findDuplicatePatterns(tokenTypes) {
-    var found = [];
-    var identicalPatterns = (0, map_1.default)(tokenTypes, function (outerType) {
-        return (0, reduce_1.default)(tokenTypes, function (result, innerType) {
-            if (outerType.PATTERN.source === innerType.PATTERN.source &&
-                !(0, includes_1.default)(found, innerType) &&
-                innerType.PATTERN !== lexer_public_1.Lexer.NA) {
-                // this avoids duplicates in the result, each Token Type may only appear in one "set"
-                // in essence we are creating Equivalence classes on equality relation.
-                found.push(innerType);
-                result.push(innerType);
-                return result;
-            }
-            return result;
-        }, []);
-    });
-    identicalPatterns = (0, compact_1.default)(identicalPatterns);
-    var duplicatePatterns = (0, filter_1.default)(identicalPatterns, function (currIdenticalSet) {
-        return currIdenticalSet.length > 1;
-    });
-    var errors = (0, map_1.default)(duplicatePatterns, function (setOfIdentical) {
-        var tokenTypeNames = (0, map_1.default)(setOfIdentical, function (currType) {
-            return currType.name;
-        });
-        var dupPatternSrc = (0, first_1.default)(setOfIdentical).PATTERN;
-        return {
-            message: "The same RegExp pattern ->".concat(dupPatternSrc, "<-") +
-                "has been used in all of the following Token Types: ".concat(tokenTypeNames.join(", "), " <-"),
-            type: lexer_public_1.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,
-            tokenTypes: setOfIdentical
-        };
-    });
-    return errors;
-}
-exports.findDuplicatePatterns = findDuplicatePatterns;
-function findInvalidGroupType(tokenTypes) {
-    var invalidTypes = (0, filter_1.default)(tokenTypes, function (clazz) {
-        if (!(0, has_1.default)(clazz, "GROUP")) {
-            return false;
-        }
-        var group = clazz.GROUP;
-        return group !== lexer_public_1.Lexer.SKIPPED && group !== lexer_public_1.Lexer.NA && !(0, isString_1.default)(group);
-    });
-    var errors = (0, map_1.default)(invalidTypes, function (currType) {
-        return {
-            message: "Token Type: ->" +
-                currType.name +
-                "<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",
-            type: lexer_public_1.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,
-            tokenTypes: [currType]
-        };
-    });
-    return errors;
-}
-exports.findInvalidGroupType = findInvalidGroupType;
-function findModesThatDoNotExist(tokenTypes, validModes) {
-    var invalidModes = (0, filter_1.default)(tokenTypes, function (clazz) {
-        return (clazz.PUSH_MODE !== undefined && !(0, includes_1.default)(validModes, clazz.PUSH_MODE));
-    });
-    var errors = (0, map_1.default)(invalidModes, function (tokType) {
-        var msg = "Token Type: ->".concat(tokType.name, "<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->").concat(tokType.PUSH_MODE, "<-") +
-            "which does not exist";
-        return {
-            message: msg,
-            type: lexer_public_1.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,
-            tokenTypes: [tokType]
-        };
-    });
-    return errors;
-}
-exports.findModesThatDoNotExist = findModesThatDoNotExist;
-function findUnreachablePatterns(tokenTypes) {
-    var errors = [];
-    var canBeTested = (0, reduce_1.default)(tokenTypes, function (result, tokType, idx) {
-        var pattern = tokType.PATTERN;
-        if (pattern === lexer_public_1.Lexer.NA) {
-            return result;
-        }
-        // a more comprehensive validation for all forms of regExps would require
-        // deeper regExp analysis capabilities
-        if ((0, isString_1.default)(pattern)) {
-            result.push({ str: pattern, idx: idx, tokenType: tokType });
-        }
-        else if ((0, isRegExp_1.default)(pattern) && noMetaChar(pattern)) {
-            result.push({ str: pattern.source, idx: idx, tokenType: tokType });
-        }
-        return result;
-    }, []);
-    (0, forEach_1.default)(tokenTypes, function (tokType, testIdx) {
-        (0, forEach_1.default)(canBeTested, function (_a) {
-            var str = _a.str, idx = _a.idx, tokenType = _a.tokenType;
-            if (testIdx < idx && testTokenType(str, tokType.PATTERN)) {
-                var msg = "Token: ->".concat(tokenType.name, "<- can never be matched.\n") +
-                    "Because it appears AFTER the Token Type ->".concat(tokType.name, "<-") +
-                    "in the lexer's definition.\n" +
-                    "See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE";
-                errors.push({
-                    message: msg,
-                    type: lexer_public_1.LexerDefinitionErrorType.UNREACHABLE_PATTERN,
-                    tokenTypes: [tokType, tokenType]
-                });
-            }
-        });
-    });
-    return errors;
-}
-exports.findUnreachablePatterns = findUnreachablePatterns;
-function testTokenType(str, pattern) {
-    /* istanbul ignore else */
-    if ((0, isRegExp_1.default)(pattern)) {
-        var regExpArray = pattern.exec(str);
-        return regExpArray !== null && regExpArray.index === 0;
-    }
-    else if ((0, isFunction_1.default)(pattern)) {
-        // maintain the API of custom patterns
-        return pattern(str, 0, [], {});
-    }
-    else if ((0, has_1.default)(pattern, "exec")) {
-        // maintain the API of custom patterns
-        return pattern.exec(str, 0, [], {});
-    }
-    else if (typeof pattern === "string") {
-        return pattern === str;
-    }
-    else {
-        throw Error("non exhaustive match");
-    }
-}
-function noMetaChar(regExp) {
-    //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp
-    var metaChars = [
-        ".",
-        "\\",
-        "[",
-        "]",
-        "|",
-        "^",
-        "$",
-        "(",
-        ")",
-        "?",
-        "*",
-        "+",
-        "{"
-    ];
-    return ((0, find_1.default)(metaChars, function (char) { return regExp.source.indexOf(char) !== -1; }) === undefined);
-}
-function addStartOfInput(pattern) {
-    var flags = pattern.ignoreCase ? "i" : "";
-    // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.
-    // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)
-    return new RegExp("^(?:".concat(pattern.source, ")"), flags);
-}
-exports.addStartOfInput = addStartOfInput;
-function addStickyFlag(pattern) {
-    var flags = pattern.ignoreCase ? "iy" : "y";
-    // always wrapping in a none capturing group preceded by '^' to make sure matching can only work on start of input.
-    // duplicate/redundant start of input markers have no meaning (/^^^^A/ === /^A/)
-    return new RegExp("".concat(pattern.source), flags);
-}
-exports.addStickyFlag = addStickyFlag;
-function performRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {
-    var errors = [];
-    // some run time checks to help the end users.
-    if (!(0, has_1.default)(lexerDefinition, exports.DEFAULT_MODE)) {
-        errors.push({
-            message: "A MultiMode Lexer cannot be initialized without a <" +
-                exports.DEFAULT_MODE +
-                "> property in its definition\n",
-            type: lexer_public_1.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE
-        });
-    }
-    if (!(0, has_1.default)(lexerDefinition, exports.MODES)) {
-        errors.push({
-            message: "A MultiMode Lexer cannot be initialized without a <" +
-                exports.MODES +
-                "> property in its definition\n",
-            type: lexer_public_1.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY
-        });
-    }
-    if ((0, has_1.default)(lexerDefinition, exports.MODES) &&
-        (0, has_1.default)(lexerDefinition, exports.DEFAULT_MODE) &&
-        !(0, has_1.default)(lexerDefinition.modes, lexerDefinition.defaultMode)) {
-        errors.push({
-            message: "A MultiMode Lexer cannot be initialized with a ".concat(exports.DEFAULT_MODE, ": <").concat(lexerDefinition.defaultMode, ">") +
-                "which does not exist\n",
-            type: lexer_public_1.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST
-        });
-    }
-    if ((0, has_1.default)(lexerDefinition, exports.MODES)) {
-        (0, forEach_1.default)(lexerDefinition.modes, function (currModeValue, currModeName) {
-            (0, forEach_1.default)(currModeValue, function (currTokType, currIdx) {
-                if ((0, isUndefined_1.default)(currTokType)) {
-                    errors.push({
-                        message: "A Lexer cannot be initialized using an undefined Token Type. Mode:" +
-                            "<".concat(currModeName, "> at index: <").concat(currIdx, ">\n"),
-                        type: lexer_public_1.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED
-                    });
-                }
-                else if ((0, has_1.default)(currTokType, "LONGER_ALT")) {
-                    var longerAlt = (0, isArray_1.default)(currTokType.LONGER_ALT)
-                        ? currTokType.LONGER_ALT
-                        : [currTokType.LONGER_ALT];
-                    (0, forEach_1.default)(longerAlt, function (currLongerAlt) {
-                        if (!(0, isUndefined_1.default)(currLongerAlt) &&
-                            !(0, includes_1.default)(currModeValue, currLongerAlt)) {
-                            errors.push({
-                                message: "A MultiMode Lexer cannot be initialized with a longer_alt <".concat(currLongerAlt.name, "> on token <").concat(currTokType.name, "> outside of mode <").concat(currModeName, ">\n"),
-                                type: lexer_public_1.LexerDefinitionErrorType.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE
-                            });
-                        }
-                    });
-                }
-            });
-        });
-    }
-    return errors;
-}
-exports.performRuntimeChecks = performRuntimeChecks;
-function performWarningRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {
-    var warnings = [];
-    var hasAnyLineBreak = false;
-    var allTokenTypes = (0, compact_1.default)((0, flatten_1.default)((0, values_1.default)(lexerDefinition.modes)));
-    var concreteTokenTypes = (0, reject_1.default)(allTokenTypes, function (currType) { return currType[PATTERN] === lexer_public_1.Lexer.NA; });
-    var terminatorCharCodes = getCharCodes(lineTerminatorCharacters);
-    if (trackLines) {
-        (0, forEach_1.default)(concreteTokenTypes, function (tokType) {
-            var currIssue = checkLineBreaksIssues(tokType, terminatorCharCodes);
-            if (currIssue !== false) {
-                var message = buildLineBreakIssueMessage(tokType, currIssue);
-                var warningDescriptor = {
-                    message: message,
-                    type: currIssue.issue,
-                    tokenType: tokType
-                };
-                warnings.push(warningDescriptor);
-            }
-            else {
-                // we don't want to attempt to scan if the user explicitly specified the line_breaks option.
-                if ((0, has_1.default)(tokType, "LINE_BREAKS")) {
-                    if (tokType.LINE_BREAKS === true) {
-                        hasAnyLineBreak = true;
-                    }
-                }
-                else {
-                    if ((0, reg_exp_1.canMatchCharCode)(terminatorCharCodes, tokType.PATTERN)) {
-                        hasAnyLineBreak = true;
-                    }
-                }
-            }
-        });
-    }
-    if (trackLines && !hasAnyLineBreak) {
-        warnings.push({
-            message: "Warning: No LINE_BREAKS Found.\n" +
-                "\tThis Lexer has been defined to track line and column information,\n" +
-                "\tBut none of the Token Types can be identified as matching a line terminator.\n" +
-                "\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n" +
-                "\tfor details.",
-            type: lexer_public_1.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS
-        });
-    }
-    return warnings;
-}
-exports.performWarningRuntimeChecks = performWarningRuntimeChecks;
-function cloneEmptyGroups(emptyGroups) {
-    var clonedResult = {};
-    var groupKeys = (0, keys_1.default)(emptyGroups);
-    (0, forEach_1.default)(groupKeys, function (currKey) {
-        var currGroupValue = emptyGroups[currKey];
-        /* istanbul ignore else */
-        if ((0, isArray_1.default)(currGroupValue)) {
-            clonedResult[currKey] = [];
-        }
-        else {
-            throw Error("non exhaustive match");
-        }
-    });
-    return clonedResult;
-}
-exports.cloneEmptyGroups = cloneEmptyGroups;
-// TODO: refactor to avoid duplication
-function isCustomPattern(tokenType) {
-    var pattern = tokenType.PATTERN;
-    /* istanbul ignore else */
-    if ((0, isRegExp_1.default)(pattern)) {
-        return false;
-    }
-    else if ((0, isFunction_1.default)(pattern)) {
-        // CustomPatternMatcherFunc - custom patterns do not require any transformations, only wrapping in a RegExp Like object
-        return true;
-    }
-    else if ((0, has_1.default)(pattern, "exec")) {
-        // ICustomPattern
-        return true;
-    }
-    else if ((0, isString_1.default)(pattern)) {
-        return false;
-    }
-    else {
-        throw Error("non exhaustive match");
-    }
-}
-exports.isCustomPattern = isCustomPattern;
-function isShortPattern(pattern) {
-    if ((0, isString_1.default)(pattern) && pattern.length === 1) {
-        return pattern.charCodeAt(0);
-    }
-    else {
-        return false;
-    }
-}
-exports.isShortPattern = isShortPattern;
-/**
- * Faster than using a RegExp for default newline detection during lexing.
- */
-exports.LineTerminatorOptimizedTester = {
-    // implements /\n|\r\n?/g.test
-    test: function (text) {
-        var len = text.length;
-        for (var i = this.lastIndex; i < len; i++) {
-            var c = text.charCodeAt(i);
-            if (c === 10) {
-                this.lastIndex = i + 1;
-                return true;
-            }
-            else if (c === 13) {
-                if (text.charCodeAt(i + 1) === 10) {
-                    this.lastIndex = i + 2;
-                }
-                else {
-                    this.lastIndex = i + 1;
-                }
-                return true;
-            }
-        }
-        return false;
-    },
-    lastIndex: 0
-};
-function checkLineBreaksIssues(tokType, lineTerminatorCharCodes) {
-    if ((0, has_1.default)(tokType, "LINE_BREAKS")) {
-        // if the user explicitly declared the line_breaks option we will respect their choice
-        // and assume it is correct.
-        return false;
-    }
-    else {
-        /* istanbul ignore else */
-        if ((0, isRegExp_1.default)(tokType.PATTERN)) {
-            try {
-                // TODO: why is the casting suddenly needed?
-                (0, reg_exp_1.canMatchCharCode)(lineTerminatorCharCodes, tokType.PATTERN);
-            }
-            catch (e) {
-                /* istanbul ignore next - to test this we would have to mock <canMatchCharCode> to throw an error */
-                return {
-                    issue: lexer_public_1.LexerDefinitionErrorType.IDENTIFY_TERMINATOR,
-                    errMsg: e.message
-                };
-            }
-            return false;
-        }
-        else if ((0, isString_1.default)(tokType.PATTERN)) {
-            // string literal patterns can always be analyzed to detect line terminator usage
-            return false;
-        }
-        else if (isCustomPattern(tokType)) {
-            // custom token types
-            return { issue: lexer_public_1.LexerDefinitionErrorType.CUSTOM_LINE_BREAK };
-        }
-        else {
-            throw Error("non exhaustive match");
-        }
-    }
-}
-function buildLineBreakIssueMessage(tokType, details) {
-    /* istanbul ignore else */
-    if (details.issue === lexer_public_1.LexerDefinitionErrorType.IDENTIFY_TERMINATOR) {
-        return ("Warning: unable to identify line terminator usage in pattern.\n" +
-            "\tThe problem is in the <".concat(tokType.name, "> Token Type\n") +
-            "\t Root cause: ".concat(details.errMsg, ".\n") +
-            "\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR");
-    }
-    else if (details.issue === lexer_public_1.LexerDefinitionErrorType.CUSTOM_LINE_BREAK) {
-        return ("Warning: A Custom Token Pattern should specify the <line_breaks> option.\n" +
-            "\tThe problem is in the <".concat(tokType.name, "> Token Type\n") +
-            "\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK");
-    }
-    else {
-        throw Error("non exhaustive match");
-    }
-}
-exports.buildLineBreakIssueMessage = buildLineBreakIssueMessage;
-function getCharCodes(charsOrCodes) {
-    var charCodes = (0, map_1.default)(charsOrCodes, function (numOrString) {
-        if ((0, isString_1.default)(numOrString)) {
-            return numOrString.charCodeAt(0);
-        }
-        else {
-            return numOrString;
-        }
-    });
-    return charCodes;
-}
-function addToMapOfArrays(map, key, value) {
-    if (map[key] === undefined) {
-        map[key] = [value];
-    }
-    else {
-        map[key].push(value);
-    }
-}
-exports.minOptimizationVal = 256;
-/**
- * We are mapping charCode above ASCI (256) into buckets each in the size of 256.
- * This is because ASCI are the most common start chars so each one of those will get its own
- * possible token configs vector.
- *
- * Tokens starting with charCodes "above" ASCI are uncommon, so we can "afford"
- * to place these into buckets of possible token configs, What we gain from
- * this is avoiding the case of creating an optimization 'charCodeToPatternIdxToConfig'
- * which would contain 10,000+ arrays of small size (e.g unicode Identifiers scenario).
- * Our 'charCodeToPatternIdxToConfig' max size will now be:
- * 256 + (2^16 / 2^8) - 1 === 511
- *
- * note the hack for fast division integer part extraction
- * See: https://stackoverflow.com/a/4228528
- */
-var charCodeToOptimizedIdxMap = [];
-function charCodeToOptimizedIndex(charCode) {
-    return charCode < exports.minOptimizationVal
-        ? charCode
-        : charCodeToOptimizedIdxMap[charCode];
-}
-exports.charCodeToOptimizedIndex = charCodeToOptimizedIndex;
-/**
- * This is a compromise between cold start / hot running performance
- * Creating this array takes ~3ms on a modern machine,
- * But if we perform the computation at runtime as needed the CSS Lexer benchmark
- * performance degrades by ~10%
- *
- * TODO: Perhaps it should be lazy initialized only if a charCode > 255 is used.
- */
-function initCharCodeToOptimizedIndexMap() {
-    if ((0, isEmpty_1.default)(charCodeToOptimizedIdxMap)) {
-        charCodeToOptimizedIdxMap = new Array(65536);
-        for (var i = 0; i < 65536; i++) {
-            charCodeToOptimizedIdxMap[i] = i > 255 ? 255 + ~~(i / 255) : i;
-        }
-    }
-}
-//# sourceMappingURL=lexer.js.map
-
-/***/ }),
-
-/***/ 58232:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.defaultLexerErrorProvider = void 0;
-exports.defaultLexerErrorProvider = {
-    buildUnableToPopLexerModeMessage: function (token) {
-        return "Unable to pop Lexer Mode after encountering Token ->".concat(token.image, "<- The Mode Stack is empty");
-    },
-    buildUnexpectedCharactersMessage: function (fullText, startOffset, length, line, column) {
-        return ("unexpected character: ->".concat(fullText.charAt(startOffset), "<- at offset: ").concat(startOffset, ",") + " skipped ".concat(length, " characters."));
-    }
-};
-//# sourceMappingURL=lexer_errors_public.js.map
-
-/***/ }),
-
-/***/ 88200:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.Lexer = exports.LexerDefinitionErrorType = void 0;
-var lexer_1 = __webpack_require__(74879);
-var noop_1 = __importDefault(__webpack_require__(50308));
-var isEmpty_1 = __importDefault(__webpack_require__(41609));
-var isArray_1 = __importDefault(__webpack_require__(1469));
-var last_1 = __importDefault(__webpack_require__(10928));
-var reject_1 = __importDefault(__webpack_require__(43063));
-var map_1 = __importDefault(__webpack_require__(35161));
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var keys_1 = __importDefault(__webpack_require__(3674));
-var isUndefined_1 = __importDefault(__webpack_require__(52353));
-var identity_1 = __importDefault(__webpack_require__(6557));
-var assign_1 = __importDefault(__webpack_require__(28583));
-var reduce_1 = __importDefault(__webpack_require__(54061));
-var clone_1 = __importDefault(__webpack_require__(66678));
-var utils_1 = __webpack_require__(68877);
-var tokens_1 = __webpack_require__(22963);
-var lexer_errors_public_1 = __webpack_require__(58232);
-var reg_exp_parser_1 = __webpack_require__(34811);
-var LexerDefinitionErrorType;
-(function (LexerDefinitionErrorType) {
-    LexerDefinitionErrorType[LexerDefinitionErrorType["MISSING_PATTERN"] = 0] = "MISSING_PATTERN";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["INVALID_PATTERN"] = 1] = "INVALID_PATTERN";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["EOI_ANCHOR_FOUND"] = 2] = "EOI_ANCHOR_FOUND";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["UNSUPPORTED_FLAGS_FOUND"] = 3] = "UNSUPPORTED_FLAGS_FOUND";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["DUPLICATE_PATTERNS_FOUND"] = 4] = "DUPLICATE_PATTERNS_FOUND";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["INVALID_GROUP_TYPE_FOUND"] = 5] = "INVALID_GROUP_TYPE_FOUND";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["PUSH_MODE_DOES_NOT_EXIST"] = 6] = "PUSH_MODE_DOES_NOT_EXIST";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE"] = 7] = "MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY"] = 8] = "MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST"] = 9] = "MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED"] = 10] = "LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["SOI_ANCHOR_FOUND"] = 11] = "SOI_ANCHOR_FOUND";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["EMPTY_MATCH_PATTERN"] = 12] = "EMPTY_MATCH_PATTERN";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["NO_LINE_BREAKS_FLAGS"] = 13] = "NO_LINE_BREAKS_FLAGS";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["UNREACHABLE_PATTERN"] = 14] = "UNREACHABLE_PATTERN";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["IDENTIFY_TERMINATOR"] = 15] = "IDENTIFY_TERMINATOR";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["CUSTOM_LINE_BREAK"] = 16] = "CUSTOM_LINE_BREAK";
-    LexerDefinitionErrorType[LexerDefinitionErrorType["MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"] = 17] = "MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE";
-})(LexerDefinitionErrorType = exports.LexerDefinitionErrorType || (exports.LexerDefinitionErrorType = {}));
-var DEFAULT_LEXER_CONFIG = {
-    deferDefinitionErrorsHandling: false,
-    positionTracking: "full",
-    lineTerminatorsPattern: /\n|\r\n?/g,
-    lineTerminatorCharacters: ["\n", "\r"],
-    ensureOptimizations: false,
-    safeMode: false,
-    errorMessageProvider: lexer_errors_public_1.defaultLexerErrorProvider,
-    traceInitPerf: false,
-    skipValidations: false,
-    recoveryEnabled: true
-};
-Object.freeze(DEFAULT_LEXER_CONFIG);
-var Lexer = /** @class */ (function () {
-    function Lexer(lexerDefinition, config) {
-        if (config === void 0) { config = DEFAULT_LEXER_CONFIG; }
-        var _this = this;
-        this.lexerDefinition = lexerDefinition;
-        this.lexerDefinitionErrors = [];
-        this.lexerDefinitionWarning = [];
-        this.patternIdxToConfig = {};
-        this.charCodeToPatternIdxToConfig = {};
-        this.modes = [];
-        this.emptyGroups = {};
-        this.trackStartLines = true;
-        this.trackEndLines = true;
-        this.hasCustom = false;
-        this.canModeBeOptimized = {};
-        // Duplicated from the parser's perf trace trait to allow future extraction
-        // of the lexer to a separate package.
-        this.TRACE_INIT = function (phaseDesc, phaseImpl) {
-            // No need to optimize this using NOOP pattern because
-            // It is not called in a hot spot...
-            if (_this.traceInitPerf === true) {
-                _this.traceInitIndent++;
-                var indent = new Array(_this.traceInitIndent + 1).join("\t");
-                if (_this.traceInitIndent < _this.traceInitMaxIdent) {
-                    console.log("".concat(indent, "--> <").concat(phaseDesc, ">"));
-                }
-                var _a = (0, utils_1.timer)(phaseImpl), time = _a.time, value = _a.value;
-                /* istanbul ignore next - Difficult to reproduce specific performance behavior (>10ms) in tests */
-                var traceMethod = time > 10 ? console.warn : console.log;
-                if (_this.traceInitIndent < _this.traceInitMaxIdent) {
-                    traceMethod("".concat(indent, "<-- <").concat(phaseDesc, "> time: ").concat(time, "ms"));
-                }
-                _this.traceInitIndent--;
-                return value;
-            }
-            else {
-                return phaseImpl();
-            }
-        };
-        if (typeof config === "boolean") {
-            throw Error("The second argument to the Lexer constructor is now an ILexerConfig Object.\n" +
-                "a boolean 2nd argument is no longer supported");
-        }
-        // todo: defaults func?
-        this.config = (0, assign_1.default)({}, DEFAULT_LEXER_CONFIG, config);
-        var traceInitVal = this.config.traceInitPerf;
-        if (traceInitVal === true) {
-            this.traceInitMaxIdent = Infinity;
-            this.traceInitPerf = true;
-        }
-        else if (typeof traceInitVal === "number") {
-            this.traceInitMaxIdent = traceInitVal;
-            this.traceInitPerf = true;
-        }
-        this.traceInitIndent = -1;
-        this.TRACE_INIT("Lexer Constructor", function () {
-            var actualDefinition;
-            var hasOnlySingleMode = true;
-            _this.TRACE_INIT("Lexer Config handling", function () {
-                if (_this.config.lineTerminatorsPattern ===
-                    DEFAULT_LEXER_CONFIG.lineTerminatorsPattern) {
-                    // optimized built-in implementation for the defaults definition of lineTerminators
-                    _this.config.lineTerminatorsPattern = lexer_1.LineTerminatorOptimizedTester;
-                }
-                else {
-                    if (_this.config.lineTerminatorCharacters ===
-                        DEFAULT_LEXER_CONFIG.lineTerminatorCharacters) {
-                        throw Error("Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n" +
-                            "\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS");
-                    }
-                }
-                if (config.safeMode && config.ensureOptimizations) {
-                    throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');
-                }
-                _this.trackStartLines = /full|onlyStart/i.test(_this.config.positionTracking);
-                _this.trackEndLines = /full/i.test(_this.config.positionTracking);
-                // Convert SingleModeLexerDefinition into a IMultiModeLexerDefinition.
-                if ((0, isArray_1.default)(lexerDefinition)) {
-                    actualDefinition = {
-                        modes: { defaultMode: (0, clone_1.default)(lexerDefinition) },
-                        defaultMode: lexer_1.DEFAULT_MODE
-                    };
-                }
-                else {
-                    // no conversion needed, input should already be a IMultiModeLexerDefinition
-                    hasOnlySingleMode = false;
-                    actualDefinition = (0, clone_1.default)(lexerDefinition);
-                }
-            });
-            if (_this.config.skipValidations === false) {
-                _this.TRACE_INIT("performRuntimeChecks", function () {
-                    _this.lexerDefinitionErrors = _this.lexerDefinitionErrors.concat((0, lexer_1.performRuntimeChecks)(actualDefinition, _this.trackStartLines, _this.config.lineTerminatorCharacters));
-                });
-                _this.TRACE_INIT("performWarningRuntimeChecks", function () {
-                    _this.lexerDefinitionWarning = _this.lexerDefinitionWarning.concat((0, lexer_1.performWarningRuntimeChecks)(actualDefinition, _this.trackStartLines, _this.config.lineTerminatorCharacters));
-                });
-            }
-            // for extra robustness to avoid throwing an none informative error message
-            actualDefinition.modes = actualDefinition.modes
-                ? actualDefinition.modes
-                : {};
-            // an error of undefined TokenTypes will be detected in "performRuntimeChecks" above.
-            // this transformation is to increase robustness in the case of partially invalid lexer definition.
-            (0, forEach_1.default)(actualDefinition.modes, function (currModeValue, currModeName) {
-                actualDefinition.modes[currModeName] = (0, reject_1.default)(currModeValue, function (currTokType) { return (0, isUndefined_1.default)(currTokType); });
-            });
-            var allModeNames = (0, keys_1.default)(actualDefinition.modes);
-            (0, forEach_1.default)(actualDefinition.modes, function (currModDef, currModName) {
-                _this.TRACE_INIT("Mode: <".concat(currModName, "> processing"), function () {
-                    _this.modes.push(currModName);
-                    if (_this.config.skipValidations === false) {
-                        _this.TRACE_INIT("validatePatterns", function () {
-                            _this.lexerDefinitionErrors = _this.lexerDefinitionErrors.concat((0, lexer_1.validatePatterns)(currModDef, allModeNames));
-                        });
-                    }
-                    // If definition errors were encountered, the analysis phase may fail unexpectedly/
-                    // Considering a lexer with definition errors may never be used, there is no point
-                    // to performing the analysis anyhow...
-                    if ((0, isEmpty_1.default)(_this.lexerDefinitionErrors)) {
-                        (0, tokens_1.augmentTokenTypes)(currModDef);
-                        var currAnalyzeResult_1;
-                        _this.TRACE_INIT("analyzeTokenTypes", function () {
-                            currAnalyzeResult_1 = (0, lexer_1.analyzeTokenTypes)(currModDef, {
-                                lineTerminatorCharacters: _this.config.lineTerminatorCharacters,
-                                positionTracking: config.positionTracking,
-                                ensureOptimizations: config.ensureOptimizations,
-                                safeMode: config.safeMode,
-                                tracer: _this.TRACE_INIT
-                            });
-                        });
-                        _this.patternIdxToConfig[currModName] =
-                            currAnalyzeResult_1.patternIdxToConfig;
-                        _this.charCodeToPatternIdxToConfig[currModName] =
-                            currAnalyzeResult_1.charCodeToPatternIdxToConfig;
-                        _this.emptyGroups = (0, assign_1.default)({}, _this.emptyGroups, currAnalyzeResult_1.emptyGroups);
-                        _this.hasCustom = currAnalyzeResult_1.hasCustom || _this.hasCustom;
-                        _this.canModeBeOptimized[currModName] =
-                            currAnalyzeResult_1.canBeOptimized;
-                    }
-                });
-            });
-            _this.defaultMode = actualDefinition.defaultMode;
-            if (!(0, isEmpty_1.default)(_this.lexerDefinitionErrors) &&
-                !_this.config.deferDefinitionErrorsHandling) {
-                var allErrMessages = (0, map_1.default)(_this.lexerDefinitionErrors, function (error) {
-                    return error.message;
-                });
-                var allErrMessagesString = allErrMessages.join("-----------------------\n");
-                throw new Error("Errors detected in definition of Lexer:\n" + allErrMessagesString);
-            }
-            // Only print warning if there are no errors, This will avoid pl
-            (0, forEach_1.default)(_this.lexerDefinitionWarning, function (warningDescriptor) {
-                (0, utils_1.PRINT_WARNING)(warningDescriptor.message);
-            });
-            _this.TRACE_INIT("Choosing sub-methods implementations", function () {
-                // Choose the relevant internal implementations for this specific parser.
-                // These implementations should be in-lined by the JavaScript engine
-                // to provide optimal performance in each scenario.
-                if (lexer_1.SUPPORT_STICKY) {
-                    _this.chopInput = identity_1.default;
-                    _this.match = _this.matchWithTest;
-                }
-                else {
-                    _this.updateLastIndex = noop_1.default;
-                    _this.match = _this.matchWithExec;
-                }
-                if (hasOnlySingleMode) {
-                    _this.handleModes = noop_1.default;
-                }
-                if (_this.trackStartLines === false) {
-                    _this.computeNewColumn = identity_1.default;
-                }
-                if (_this.trackEndLines === false) {
-                    _this.updateTokenEndLineColumnLocation = noop_1.default;
-                }
-                if (/full/i.test(_this.config.positionTracking)) {
-                    _this.createTokenInstance = _this.createFullToken;
-                }
-                else if (/onlyStart/i.test(_this.config.positionTracking)) {
-                    _this.createTokenInstance = _this.createStartOnlyToken;
-                }
-                else if (/onlyOffset/i.test(_this.config.positionTracking)) {
-                    _this.createTokenInstance = _this.createOffsetOnlyToken;
-                }
-                else {
-                    throw Error("Invalid <positionTracking> config option: \"".concat(_this.config.positionTracking, "\""));
-                }
-                if (_this.hasCustom) {
-                    _this.addToken = _this.addTokenUsingPush;
-                    _this.handlePayload = _this.handlePayloadWithCustom;
-                }
-                else {
-                    _this.addToken = _this.addTokenUsingMemberAccess;
-                    _this.handlePayload = _this.handlePayloadNoCustom;
-                }
-            });
-            _this.TRACE_INIT("Failed Optimization Warnings", function () {
-                var unOptimizedModes = (0, reduce_1.default)(_this.canModeBeOptimized, function (cannotBeOptimized, canBeOptimized, modeName) {
-                    if (canBeOptimized === false) {
-                        cannotBeOptimized.push(modeName);
-                    }
-                    return cannotBeOptimized;
-                }, []);
-                if (config.ensureOptimizations && !(0, isEmpty_1.default)(unOptimizedModes)) {
-                    throw Error("Lexer Modes: < ".concat(unOptimizedModes.join(", "), " > cannot be optimized.\n") +
-                        '\t Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\n' +
-                        "\t Or inspect the console log for details on how to resolve these issues.");
-                }
-            });
-            _this.TRACE_INIT("clearRegExpParserCache", function () {
-                (0, reg_exp_parser_1.clearRegExpParserCache)();
-            });
-            _this.TRACE_INIT("toFastProperties", function () {
-                (0, utils_1.toFastProperties)(_this);
-            });
-        });
-    }
-    Lexer.prototype.tokenize = function (text, initialMode) {
-        if (initialMode === void 0) { initialMode = this.defaultMode; }
-        if (!(0, isEmpty_1.default)(this.lexerDefinitionErrors)) {
-            var allErrMessages = (0, map_1.default)(this.lexerDefinitionErrors, function (error) {
-                return error.message;
-            });
-            var allErrMessagesString = allErrMessages.join("-----------------------\n");
-            throw new Error("Unable to Tokenize because Errors detected in definition of Lexer:\n" +
-                allErrMessagesString);
-        }
-        return this.tokenizeInternal(text, initialMode);
-    };
-    // There is quite a bit of duplication between this and "tokenizeInternalLazy"
-    // This is intentional due to performance considerations.
-    // this method also used quite a bit of `!` none null assertions because it is too optimized
-    // for `tsc` to always understand it is "safe"
-    Lexer.prototype.tokenizeInternal = function (text, initialMode) {
-        var _this = this;
-        var i, j, k, matchAltImage, longerAlt, matchedImage, payload, altPayload, imageLength, group, tokType, newToken, errLength, droppedChar, msg, match;
-        var orgText = text;
-        var orgLength = orgText.length;
-        var offset = 0;
-        var matchedTokensIndex = 0;
-        // initializing the tokensArray to the "guessed" size.
-        // guessing too little will still reduce the number of array re-sizes on pushes.
-        // guessing too large (Tested by guessing x4 too large) may cost a bit more of memory
-        // but would still have a faster runtime by avoiding (All but one) array resizing.
-        var guessedNumberOfTokens = this.hasCustom
-            ? 0 // will break custom token pattern APIs the matchedTokens array will contain undefined elements.
-            : Math.floor(text.length / 10);
-        var matchedTokens = new Array(guessedNumberOfTokens);
-        var errors = [];
-        var line = this.trackStartLines ? 1 : undefined;
-        var column = this.trackStartLines ? 1 : undefined;
-        var groups = (0, lexer_1.cloneEmptyGroups)(this.emptyGroups);
-        var trackLines = this.trackStartLines;
-        var lineTerminatorPattern = this.config.lineTerminatorsPattern;
-        var currModePatternsLength = 0;
-        var patternIdxToConfig = [];
-        var currCharCodeToPatternIdxToConfig = [];
-        var modeStack = [];
-        var emptyArray = [];
-        Object.freeze(emptyArray);
-        var getPossiblePatterns;
-        function getPossiblePatternsSlow() {
-            return patternIdxToConfig;
-        }
-        function getPossiblePatternsOptimized(charCode) {
-            var optimizedCharIdx = (0, lexer_1.charCodeToOptimizedIndex)(charCode);
-            var possiblePatterns = currCharCodeToPatternIdxToConfig[optimizedCharIdx];
-            if (possiblePatterns === undefined) {
-                return emptyArray;
-            }
-            else {
-                return possiblePatterns;
-            }
-        }
-        var pop_mode = function (popToken) {
-            // TODO: perhaps avoid this error in the edge case there is no more input?
-            if (modeStack.length === 1 &&
-                // if we have both a POP_MODE and a PUSH_MODE this is in-fact a "transition"
-                // So no error should occur.
-                popToken.tokenType.PUSH_MODE === undefined) {
-                // if we try to pop the last mode there lexer will no longer have ANY mode.
-                // thus the pop is ignored, an error will be created and the lexer will continue parsing in the previous mode.
-                var msg_1 = _this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(popToken);
-                errors.push({
-                    offset: popToken.startOffset,
-                    line: popToken.startLine,
-                    column: popToken.startColumn,
-                    length: popToken.image.length,
-                    message: msg_1
-                });
-            }
-            else {
-                modeStack.pop();
-                var newMode = (0, last_1.default)(modeStack);
-                patternIdxToConfig = _this.patternIdxToConfig[newMode];
-                currCharCodeToPatternIdxToConfig =
-                    _this.charCodeToPatternIdxToConfig[newMode];
-                currModePatternsLength = patternIdxToConfig.length;
-                var modeCanBeOptimized = _this.canModeBeOptimized[newMode] && _this.config.safeMode === false;
-                if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {
-                    getPossiblePatterns = getPossiblePatternsOptimized;
-                }
-                else {
-                    getPossiblePatterns = getPossiblePatternsSlow;
-                }
-            }
-        };
-        function push_mode(newMode) {
-            modeStack.push(newMode);
-            currCharCodeToPatternIdxToConfig =
-                this.charCodeToPatternIdxToConfig[newMode];
-            patternIdxToConfig = this.patternIdxToConfig[newMode];
-            currModePatternsLength = patternIdxToConfig.length;
-            currModePatternsLength = patternIdxToConfig.length;
-            var modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false;
-            if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {
-                getPossiblePatterns = getPossiblePatternsOptimized;
-            }
-            else {
-                getPossiblePatterns = getPossiblePatternsSlow;
-            }
-        }
-        // this pattern seems to avoid a V8 de-optimization, although that de-optimization does not
-        // seem to matter performance wise.
-        push_mode.call(this, initialMode);
-        var currConfig;
-        var recoveryEnabled = this.config.recoveryEnabled;
-        while (offset < orgLength) {
-            matchedImage = null;
-            var nextCharCode = orgText.charCodeAt(offset);
-            var chosenPatternIdxToConfig = getPossiblePatterns(nextCharCode);
-            var chosenPatternsLength = chosenPatternIdxToConfig.length;
-            for (i = 0; i < chosenPatternsLength; i++) {
-                currConfig = chosenPatternIdxToConfig[i];
-                var currPattern = currConfig.pattern;
-                payload = null;
-                // manually in-lined because > 600 chars won't be in-lined in V8
-                var singleCharCode = currConfig.short;
-                if (singleCharCode !== false) {
-                    if (nextCharCode === singleCharCode) {
-                        // single character string
-                        matchedImage = currPattern;
-                    }
-                }
-                else if (currConfig.isCustom === true) {
-                    match = currPattern.exec(orgText, offset, matchedTokens, groups);
-                    if (match !== null) {
-                        matchedImage = match[0];
-                        if (match.payload !== undefined) {
-                            payload = match.payload;
-                        }
-                    }
-                    else {
-                        matchedImage = null;
-                    }
-                }
-                else {
-                    this.updateLastIndex(currPattern, offset);
-                    matchedImage = this.match(currPattern, text, offset);
-                }
-                if (matchedImage !== null) {
-                    // even though this pattern matched we must try a another longer alternative.
-                    // this can be used to prioritize keywords over identifiers
-                    longerAlt = currConfig.longerAlt;
-                    if (longerAlt !== undefined) {
-                        // TODO: micro optimize, avoid extra prop access
-                        // by saving/linking longerAlt on the original config?
-                        var longerAltLength = longerAlt.length;
-                        for (k = 0; k < longerAltLength; k++) {
-                            var longerAltConfig = patternIdxToConfig[longerAlt[k]];
-                            var longerAltPattern = longerAltConfig.pattern;
-                            altPayload = null;
-                            // single Char can never be a longer alt so no need to test it.
-                            // manually in-lined because > 600 chars won't be in-lined in V8
-                            if (longerAltConfig.isCustom === true) {
-                                match = longerAltPattern.exec(orgText, offset, matchedTokens, groups);
-                                if (match !== null) {
-                                    matchAltImage = match[0];
-                                    if (match.payload !== undefined) {
-                                        altPayload = match.payload;
-                                    }
-                                }
-                                else {
-                                    matchAltImage = null;
-                                }
-                            }
-                            else {
-                                this.updateLastIndex(longerAltPattern, offset);
-                                matchAltImage = this.match(longerAltPattern, text, offset);
-                            }
-                            if (matchAltImage && matchAltImage.length > matchedImage.length) {
-                                matchedImage = matchAltImage;
-                                payload = altPayload;
-                                currConfig = longerAltConfig;
-                                // Exit the loop early after matching one of the longer alternatives
-                                // The first matched alternative takes precedence
-                                break;
-                            }
-                        }
-                    }
-                    break;
-                }
-            }
-            // successful match
-            if (matchedImage !== null) {
-                imageLength = matchedImage.length;
-                group = currConfig.group;
-                if (group !== undefined) {
-                    tokType = currConfig.tokenTypeIdx;
-                    // TODO: "offset + imageLength" and the new column may be computed twice in case of "full" location information inside
-                    // createFullToken method
-                    newToken = this.createTokenInstance(matchedImage, offset, tokType, currConfig.tokenType, line, column, imageLength);
-                    this.handlePayload(newToken, payload);
-                    // TODO: optimize NOOP in case there are no special groups?
-                    if (group === false) {
-                        matchedTokensIndex = this.addToken(matchedTokens, matchedTokensIndex, newToken);
-                    }
-                    else {
-                        groups[group].push(newToken);
-                    }
-                }
-                text = this.chopInput(text, imageLength);
-                offset = offset + imageLength;
-                // TODO: with newlines the column may be assigned twice
-                column = this.computeNewColumn(column, imageLength);
-                if (trackLines === true && currConfig.canLineTerminator === true) {
-                    var numOfLTsInMatch = 0;
-                    var foundTerminator = void 0;
-                    var lastLTEndOffset = void 0;
-                    lineTerminatorPattern.lastIndex = 0;
-                    do {
-                        foundTerminator = lineTerminatorPattern.test(matchedImage);
-                        if (foundTerminator === true) {
-                            lastLTEndOffset = lineTerminatorPattern.lastIndex - 1;
-                            numOfLTsInMatch++;
-                        }
-                    } while (foundTerminator === true);
-                    if (numOfLTsInMatch !== 0) {
-                        line = line + numOfLTsInMatch;
-                        column = imageLength - lastLTEndOffset;
-                        this.updateTokenEndLineColumnLocation(newToken, group, lastLTEndOffset, numOfLTsInMatch, line, column, imageLength);
-                    }
-                }
-                // will be NOOP if no modes present
-                this.handleModes(currConfig, pop_mode, push_mode, newToken);
-            }
-            else {
-                // error recovery, drop characters until we identify a valid token's start point
-                var errorStartOffset = offset;
-                var errorLine = line;
-                var errorColumn = column;
-                var foundResyncPoint = recoveryEnabled === false;
-                while (foundResyncPoint === false && offset < orgLength) {
-                    // Identity Func (when sticky flag is enabled)
-                    text = this.chopInput(text, 1);
-                    offset++;
-                    for (j = 0; j < currModePatternsLength; j++) {
-                        var currConfig_1 = patternIdxToConfig[j];
-                        var currPattern = currConfig_1.pattern;
-                        // manually in-lined because > 600 chars won't be in-lined in V8
-                        var singleCharCode = currConfig_1.short;
-                        if (singleCharCode !== false) {
-                            if (orgText.charCodeAt(offset) === singleCharCode) {
-                                // single character string
-                                foundResyncPoint = true;
-                            }
-                        }
-                        else if (currConfig_1.isCustom === true) {
-                            foundResyncPoint =
-                                currPattern.exec(orgText, offset, matchedTokens, groups) !== null;
-                        }
-                        else {
-                            this.updateLastIndex(currPattern, offset);
-                            foundResyncPoint = currPattern.exec(text) !== null;
-                        }
-                        if (foundResyncPoint === true) {
-                            break;
-                        }
-                    }
-                }
-                errLength = offset - errorStartOffset;
-                // at this point we either re-synced or reached the end of the input text
-                msg = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(orgText, errorStartOffset, errLength, errorLine, errorColumn);
-                errors.push({
-                    offset: errorStartOffset,
-                    line: errorLine,
-                    column: errorColumn,
-                    length: errLength,
-                    message: msg
-                });
-                if (recoveryEnabled === false) {
-                    break;
-                }
-            }
-        }
-        // if we do have custom patterns which push directly into the
-        // TODO: custom tokens should not push directly??
-        if (!this.hasCustom) {
-            // if we guessed a too large size for the tokens array this will shrink it to the right size.
-            matchedTokens.length = matchedTokensIndex;
-        }
-        return {
-            tokens: matchedTokens,
-            groups: groups,
-            errors: errors
-        };
-    };
-    Lexer.prototype.handleModes = function (config, pop_mode, push_mode, newToken) {
-        if (config.pop === true) {
-            // need to save the PUSH_MODE property as if the mode is popped
-            // patternIdxToPopMode is updated to reflect the new mode after popping the stack
-            var pushMode = config.push;
-            pop_mode(newToken);
-            if (pushMode !== undefined) {
-                push_mode.call(this, pushMode);
-            }
-        }
-        else if (config.push !== undefined) {
-            push_mode.call(this, config.push);
-        }
-    };
-    Lexer.prototype.chopInput = function (text, length) {
-        return text.substring(length);
-    };
-    Lexer.prototype.updateLastIndex = function (regExp, newLastIndex) {
-        regExp.lastIndex = newLastIndex;
-    };
-    // TODO: decrease this under 600 characters? inspect stripping comments option in TSC compiler
-    Lexer.prototype.updateTokenEndLineColumnLocation = function (newToken, group, lastLTIdx, numOfLTsInMatch, line, column, imageLength) {
-        var lastCharIsLT, fixForEndingInLT;
-        if (group !== undefined) {
-            // a none skipped multi line Token, need to update endLine/endColumn
-            lastCharIsLT = lastLTIdx === imageLength - 1;
-            fixForEndingInLT = lastCharIsLT ? -1 : 0;
-            if (!(numOfLTsInMatch === 1 && lastCharIsLT === true)) {
-                // if a token ends in a LT that last LT only affects the line numbering of following Tokens
-                newToken.endLine = line + fixForEndingInLT;
-                // the last LT in a token does not affect the endColumn either as the [columnStart ... columnEnd)
-                // inclusive to exclusive range.
-                newToken.endColumn = column - 1 + -fixForEndingInLT;
-            }
-            // else single LT in the last character of a token, no need to modify the endLine/EndColumn
-        }
-    };
-    Lexer.prototype.computeNewColumn = function (oldColumn, imageLength) {
-        return oldColumn + imageLength;
-    };
-    Lexer.prototype.createOffsetOnlyToken = function (image, startOffset, tokenTypeIdx, tokenType) {
-        return {
-            image: image,
-            startOffset: startOffset,
-            tokenTypeIdx: tokenTypeIdx,
-            tokenType: tokenType
-        };
-    };
-    Lexer.prototype.createStartOnlyToken = function (image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn) {
-        return {
-            image: image,
-            startOffset: startOffset,
-            startLine: startLine,
-            startColumn: startColumn,
-            tokenTypeIdx: tokenTypeIdx,
-            tokenType: tokenType
-        };
-    };
-    Lexer.prototype.createFullToken = function (image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn, imageLength) {
-        return {
-            image: image,
-            startOffset: startOffset,
-            endOffset: startOffset + imageLength - 1,
-            startLine: startLine,
-            endLine: startLine,
-            startColumn: startColumn,
-            endColumn: startColumn + imageLength - 1,
-            tokenTypeIdx: tokenTypeIdx,
-            tokenType: tokenType
-        };
-    };
-    Lexer.prototype.addTokenUsingPush = function (tokenVector, index, tokenToAdd) {
-        tokenVector.push(tokenToAdd);
-        return index;
-    };
-    Lexer.prototype.addTokenUsingMemberAccess = function (tokenVector, index, tokenToAdd) {
-        tokenVector[index] = tokenToAdd;
-        index++;
-        return index;
-    };
-    Lexer.prototype.handlePayloadNoCustom = function (token, payload) { };
-    Lexer.prototype.handlePayloadWithCustom = function (token, payload) {
-        if (payload !== null) {
-            token.payload = payload;
-        }
-    };
-    Lexer.prototype.matchWithTest = function (pattern, text, offset) {
-        var found = pattern.test(text);
-        if (found === true) {
-            return text.substring(offset, pattern.lastIndex);
-        }
-        return null;
-    };
-    Lexer.prototype.matchWithExec = function (pattern, text) {
-        var regExpArray = pattern.exec(text);
-        return regExpArray !== null ? regExpArray[0] : null;
-    };
-    Lexer.SKIPPED = "This marks a skipped Token pattern, this means each token identified by it will" +
-        "be consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.";
-    Lexer.NA = /NOT_APPLICABLE/;
-    return Lexer;
-}());
-exports.Lexer = Lexer;
-//# sourceMappingURL=lexer_public.js.map
-
-/***/ }),
-
-/***/ 98759:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __extends = (this && this.__extends) || (function () {
-    var extendStatics = function (d, b) {
-        extendStatics = Object.setPrototypeOf ||
-            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-            function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
-        return extendStatics(d, b);
-    };
-    return function (d, b) {
-        if (typeof b !== "function" && b !== null)
-            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-        extendStatics(d, b);
-        function __() { this.constructor = d; }
-        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-    };
-})();
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.canMatchCharCode = exports.firstCharOptimizedIndices = exports.getOptimizedStartCodesIndices = exports.failedOptimizationPrefixMsg = void 0;
-var regexp_to_ast_1 = __webpack_require__(94556);
-var isArray_1 = __importDefault(__webpack_require__(1469));
-var every_1 = __importDefault(__webpack_require__(711));
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var find_1 = __importDefault(__webpack_require__(13311));
-var values_1 = __importDefault(__webpack_require__(52628));
-var includes_1 = __importDefault(__webpack_require__(64721));
-var utils_1 = __webpack_require__(68877);
-var reg_exp_parser_1 = __webpack_require__(34811);
-var lexer_1 = __webpack_require__(74879);
-var complementErrorMessage = "Complement Sets are not supported for first char optimization";
-exports.failedOptimizationPrefixMsg = 'Unable to use "first char" lexer optimizations:\n';
-function getOptimizedStartCodesIndices(regExp, ensureOptimizations) {
-    if (ensureOptimizations === void 0) { ensureOptimizations = false; }
-    try {
-        var ast = (0, reg_exp_parser_1.getRegExpAst)(regExp);
-        var firstChars = firstCharOptimizedIndices(ast.value, {}, ast.flags.ignoreCase);
-        return firstChars;
-    }
-    catch (e) {
-        /* istanbul ignore next */
-        // Testing this relies on the regexp-to-ast library having a bug... */
-        // TODO: only the else branch needs to be ignored, try to fix with newer prettier / tsc
-        if (e.message === complementErrorMessage) {
-            if (ensureOptimizations) {
-                (0, utils_1.PRINT_WARNING)("".concat(exports.failedOptimizationPrefixMsg) +
-                    "\tUnable to optimize: < ".concat(regExp.toString(), " >\n") +
-                    "\tComplement Sets cannot be automatically optimized.\n" +
-                    "\tThis will disable the lexer's first char optimizations.\n" +
-                    "\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.");
-            }
-        }
-        else {
-            var msgSuffix = "";
-            if (ensureOptimizations) {
-                msgSuffix =
-                    "\n\tThis will disable the lexer's first char optimizations.\n" +
-                        "\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.";
-            }
-            (0, utils_1.PRINT_ERROR)("".concat(exports.failedOptimizationPrefixMsg, "\n") +
-                "\tFailed parsing: < ".concat(regExp.toString(), " >\n") +
-                "\tUsing the regexp-to-ast library version: ".concat(regexp_to_ast_1.VERSION, "\n") +
-                "\tPlease open an issue at: https://github.com/bd82/regexp-to-ast/issues" +
-                msgSuffix);
-        }
-    }
-    return [];
-}
-exports.getOptimizedStartCodesIndices = getOptimizedStartCodesIndices;
-function firstCharOptimizedIndices(ast, result, ignoreCase) {
-    switch (ast.type) {
-        case "Disjunction":
-            for (var i = 0; i < ast.value.length; i++) {
-                firstCharOptimizedIndices(ast.value[i], result, ignoreCase);
-            }
-            break;
-        case "Alternative":
-            var terms = ast.value;
-            for (var i = 0; i < terms.length; i++) {
-                var term = terms[i];
-                // skip terms that cannot effect the first char results
-                switch (term.type) {
-                    case "EndAnchor":
-                    // A group back reference cannot affect potential starting char.
-                    // because if a back reference is the first production than automatically
-                    // the group being referenced has had to come BEFORE so its codes have already been added
-                    case "GroupBackReference":
-                    // assertions do not affect potential starting codes
-                    case "Lookahead":
-                    case "NegativeLookahead":
-                    case "StartAnchor":
-                    case "WordBoundary":
-                    case "NonWordBoundary":
-                        continue;
-                }
-                var atom = term;
-                switch (atom.type) {
-                    case "Character":
-                        addOptimizedIdxToResult(atom.value, result, ignoreCase);
-                        break;
-                    case "Set":
-                        if (atom.complement === true) {
-                            throw Error(complementErrorMessage);
-                        }
-                        (0, forEach_1.default)(atom.value, function (code) {
-                            if (typeof code === "number") {
-                                addOptimizedIdxToResult(code, result, ignoreCase);
-                            }
-                            else {
-                                // range
-                                var range = code;
-                                // cannot optimize when ignoreCase is
-                                if (ignoreCase === true) {
-                                    for (var rangeCode = range.from; rangeCode <= range.to; rangeCode++) {
-                                        addOptimizedIdxToResult(rangeCode, result, ignoreCase);
-                                    }
-                                }
-                                // Optimization (2 orders of magnitude less work for very large ranges)
-                                else {
-                                    // handle unoptimized values
-                                    for (var rangeCode = range.from; rangeCode <= range.to && rangeCode < lexer_1.minOptimizationVal; rangeCode++) {
-                                        addOptimizedIdxToResult(rangeCode, result, ignoreCase);
-                                    }
-                                    // Less common charCode where we optimize for faster init time, by using larger "buckets"
-                                    if (range.to >= lexer_1.minOptimizationVal) {
-                                        var minUnOptVal = range.from >= lexer_1.minOptimizationVal
-                                            ? range.from
-                                            : lexer_1.minOptimizationVal;
-                                        var maxUnOptVal = range.to;
-                                        var minOptIdx = (0, lexer_1.charCodeToOptimizedIndex)(minUnOptVal);
-                                        var maxOptIdx = (0, lexer_1.charCodeToOptimizedIndex)(maxUnOptVal);
-                                        for (var currOptIdx = minOptIdx; currOptIdx <= maxOptIdx; currOptIdx++) {
-                                            result[currOptIdx] = currOptIdx;
-                                        }
-                                    }
-                                }
-                            }
-                        });
-                        break;
-                    case "Group":
-                        firstCharOptimizedIndices(atom.value, result, ignoreCase);
-                        break;
-                    /* istanbul ignore next */
-                    default:
-                        throw Error("Non Exhaustive Match");
-                }
-                // reached a mandatory production, no more **start** codes can be found on this alternative
-                var isOptionalQuantifier = atom.quantifier !== undefined && atom.quantifier.atLeast === 0;
-                if (
-                // A group may be optional due to empty contents /(?:)/
-                // or if everything inside it is optional /((a)?)/
-                (atom.type === "Group" && isWholeOptional(atom) === false) ||
-                    // If this term is not a group it may only be optional if it has an optional quantifier
-                    (atom.type !== "Group" && isOptionalQuantifier === false)) {
-                    break;
-                }
-            }
-            break;
-        /* istanbul ignore next */
-        default:
-            throw Error("non exhaustive match!");
-    }
-    // console.log(Object.keys(result).length)
-    return (0, values_1.default)(result);
-}
-exports.firstCharOptimizedIndices = firstCharOptimizedIndices;
-function addOptimizedIdxToResult(code, result, ignoreCase) {
-    var optimizedCharIdx = (0, lexer_1.charCodeToOptimizedIndex)(code);
-    result[optimizedCharIdx] = optimizedCharIdx;
-    if (ignoreCase === true) {
-        handleIgnoreCase(code, result);
-    }
-}
-function handleIgnoreCase(code, result) {
-    var char = String.fromCharCode(code);
-    var upperChar = char.toUpperCase();
-    /* istanbul ignore else */
-    if (upperChar !== char) {
-        var optimizedCharIdx = (0, lexer_1.charCodeToOptimizedIndex)(upperChar.charCodeAt(0));
-        result[optimizedCharIdx] = optimizedCharIdx;
-    }
-    else {
-        var lowerChar = char.toLowerCase();
-        if (lowerChar !== char) {
-            var optimizedCharIdx = (0, lexer_1.charCodeToOptimizedIndex)(lowerChar.charCodeAt(0));
-            result[optimizedCharIdx] = optimizedCharIdx;
-        }
-    }
-}
-function findCode(setNode, targetCharCodes) {
-    return (0, find_1.default)(setNode.value, function (codeOrRange) {
-        if (typeof codeOrRange === "number") {
-            return (0, includes_1.default)(targetCharCodes, codeOrRange);
-        }
-        else {
-            // range
-            var range_1 = codeOrRange;
-            return ((0, find_1.default)(targetCharCodes, function (targetCode) { return range_1.from <= targetCode && targetCode <= range_1.to; }) !== undefined);
-        }
-    });
-}
-function isWholeOptional(ast) {
-    var quantifier = ast.quantifier;
-    if (quantifier && quantifier.atLeast === 0) {
-        return true;
-    }
-    if (!ast.value) {
-        return false;
-    }
-    return (0, isArray_1.default)(ast.value)
-        ? (0, every_1.default)(ast.value, isWholeOptional)
-        : isWholeOptional(ast.value);
-}
-var CharCodeFinder = /** @class */ (function (_super) {
-    __extends(CharCodeFinder, _super);
-    function CharCodeFinder(targetCharCodes) {
-        var _this = _super.call(this) || this;
-        _this.targetCharCodes = targetCharCodes;
-        _this.found = false;
-        return _this;
-    }
-    CharCodeFinder.prototype.visitChildren = function (node) {
-        // No need to keep looking...
-        if (this.found === true) {
-            return;
-        }
-        // switch lookaheads as they do not actually consume any characters thus
-        // finding a charCode at lookahead context does not mean that regexp can actually contain it in a match.
-        switch (node.type) {
-            case "Lookahead":
-                this.visitLookahead(node);
-                return;
-            case "NegativeLookahead":
-                this.visitNegativeLookahead(node);
-                return;
-        }
-        _super.prototype.visitChildren.call(this, node);
-    };
-    CharCodeFinder.prototype.visitCharacter = function (node) {
-        if ((0, includes_1.default)(this.targetCharCodes, node.value)) {
-            this.found = true;
-        }
-    };
-    CharCodeFinder.prototype.visitSet = function (node) {
-        if (node.complement) {
-            if (findCode(node, this.targetCharCodes) === undefined) {
-                this.found = true;
-            }
-        }
-        else {
-            if (findCode(node, this.targetCharCodes) !== undefined) {
-                this.found = true;
-            }
-        }
-    };
-    return CharCodeFinder;
-}(regexp_to_ast_1.BaseRegExpVisitor));
-function canMatchCharCode(charCodes, pattern) {
-    if (pattern instanceof RegExp) {
-        var ast = (0, reg_exp_parser_1.getRegExpAst)(pattern);
-        var charCodeFinder = new CharCodeFinder(charCodes);
-        charCodeFinder.visit(ast);
-        return charCodeFinder.found;
-    }
-    else {
-        return ((0, find_1.default)(pattern, function (char) {
-            return (0, includes_1.default)(charCodes, char.charCodeAt(0));
-        }) !== undefined);
-    }
-}
-exports.canMatchCharCode = canMatchCharCode;
-//# sourceMappingURL=reg_exp.js.map
-
-/***/ }),
-
-/***/ 34811:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.clearRegExpParserCache = exports.getRegExpAst = void 0;
-var regexp_to_ast_1 = __webpack_require__(94556);
-var regExpAstCache = {};
-var regExpParser = new regexp_to_ast_1.RegExpParser();
-function getRegExpAst(regExp) {
-    var regExpStr = regExp.toString();
-    if (regExpAstCache.hasOwnProperty(regExpStr)) {
-        return regExpAstCache[regExpStr];
-    }
-    else {
-        var regExpAst = regExpParser.pattern(regExpStr);
-        regExpAstCache[regExpStr] = regExpAst;
-        return regExpAst;
-    }
-}
-exports.getRegExpAst = getRegExpAst;
-function clearRegExpParserCache() {
-    regExpAstCache = {};
-}
-exports.clearRegExpParserCache = clearRegExpParserCache;
-//# sourceMappingURL=reg_exp_parser.js.map
-
-/***/ }),
-
-/***/ 22963:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.isTokenType = exports.hasExtendingTokensTypesMapProperty = exports.hasExtendingTokensTypesProperty = exports.hasCategoriesProperty = exports.hasShortKeyProperty = exports.singleAssignCategoriesToksMap = exports.assignCategoriesMapProp = exports.assignCategoriesTokensProp = exports.assignTokenDefaultProps = exports.expandCategories = exports.augmentTokenTypes = exports.tokenIdxToClass = exports.tokenShortNameIdx = exports.tokenStructuredMatcherNoCategories = exports.tokenStructuredMatcher = void 0;
-var isEmpty_1 = __importDefault(__webpack_require__(41609));
-var compact_1 = __importDefault(__webpack_require__(39693));
-var isArray_1 = __importDefault(__webpack_require__(1469));
-var flatten_1 = __importDefault(__webpack_require__(85564));
-var difference_1 = __importDefault(__webpack_require__(91966));
-var map_1 = __importDefault(__webpack_require__(35161));
-var forEach_1 = __importDefault(__webpack_require__(84486));
-var has_1 = __importDefault(__webpack_require__(18721));
-var includes_1 = __importDefault(__webpack_require__(64721));
-var clone_1 = __importDefault(__webpack_require__(66678));
-function tokenStructuredMatcher(tokInstance, tokConstructor) {
-    var instanceType = tokInstance.tokenTypeIdx;
-    if (instanceType === tokConstructor.tokenTypeIdx) {
-        return true;
-    }
-    else {
-        return (tokConstructor.isParent === true &&
-            tokConstructor.categoryMatchesMap[instanceType] === true);
-    }
-}
-exports.tokenStructuredMatcher = tokenStructuredMatcher;
-// Optimized tokenMatcher in case our grammar does not use token categories
-// Being so tiny it is much more likely to be in-lined and this avoid the function call overhead
-function tokenStructuredMatcherNoCategories(token, tokType) {
-    return token.tokenTypeIdx === tokType.tokenTypeIdx;
-}
-exports.tokenStructuredMatcherNoCategories = tokenStructuredMatcherNoCategories;
-exports.tokenShortNameIdx = 1;
-exports.tokenIdxToClass = {};
-function augmentTokenTypes(tokenTypes) {
-    // collect the parent Token Types as well.
-    var tokenTypesAndParents = expandCategories(tokenTypes);
-    // add required tokenType and categoryMatches properties
-    assignTokenDefaultProps(tokenTypesAndParents);
-    // fill up the categoryMatches
-    assignCategoriesMapProp(tokenTypesAndParents);
-    assignCategoriesTokensProp(tokenTypesAndParents);
-    (0, forEach_1.default)(tokenTypesAndParents, function (tokType) {
-        tokType.isParent = tokType.categoryMatches.length > 0;
-    });
-}
-exports.augmentTokenTypes = augmentTokenTypes;
-function expandCategories(tokenTypes) {
-    var result = (0, clone_1.default)(tokenTypes);
-    var categories = tokenTypes;
-    var searching = true;
-    while (searching) {
-        categories = (0, compact_1.default)((0, flatten_1.default)((0, map_1.default)(categories, function (currTokType) { return currTokType.CATEGORIES; })));
-        var newCategories = (0, difference_1.default)(categories, result);
-        result = result.concat(newCategories);
-        if ((0, isEmpty_1.default)(newCategories)) {
-            searching = false;
-        }
-        else {
-            categories = newCategories;
-        }
-    }
-    return result;
-}
-exports.expandCategories = expandCategories;
-function assignTokenDefaultProps(tokenTypes) {
-    (0, forEach_1.default)(tokenTypes, function (currTokType) {
-        if (!hasShortKeyProperty(currTokType)) {
-            exports.tokenIdxToClass[exports.tokenShortNameIdx] = currTokType;
-            currTokType.tokenTypeIdx = exports.tokenShortNameIdx++;
-        }
-        // CATEGORIES? : TokenType | TokenType[]
-        if (hasCategoriesProperty(currTokType) &&
-            !(0, isArray_1.default)(currTokType.CATEGORIES)
-        // &&
-        // !isUndefined(currTokType.CATEGORIES.PATTERN)
-        ) {
-            currTokType.CATEGORIES = [currTokType.CATEGORIES];
-        }
-        if (!hasCategoriesProperty(currTokType)) {
-            currTokType.CATEGORIES = [];
-        }
-        if (!hasExtendingTokensTypesProperty(currTokType)) {
-            currTokType.categoryMatches = [];
-        }
-        if (!hasExtendingTokensTypesMapProperty(currTokType)) {
-            currTokType.categoryMatchesMap = {};
-        }
-    });
-}
-exports.assignTokenDefaultProps = assignTokenDefaultProps;
-function assignCategoriesTokensProp(tokenTypes) {
-    (0, forEach_1.default)(tokenTypes, function (currTokType) {
-        // avoid duplications
-        currTokType.categoryMatches = [];
-        (0, forEach_1.default)(currTokType.categoryMatchesMap, function (val, key) {
-            currTokType.categoryMatches.push(exports.tokenIdxToClass[key].tokenTypeIdx);
-        });
-    });
-}
-exports.assignCategoriesTokensProp = assignCategoriesTokensProp;
-function assignCategoriesMapProp(tokenTypes) {
-    (0, forEach_1.default)(tokenTypes, function (currTokType) {
-        singleAssignCategoriesToksMap([], currTokType);
-    });
-}
-exports.assignCategoriesMapProp = assignCategoriesMapProp;
-function singleAssignCategoriesToksMap(path, nextNode) {
-    (0, forEach_1.default)(path, function (pathNode) {
-        nextNode.categoryMatchesMap[pathNode.tokenTypeIdx] = true;
-    });
-    (0, forEach_1.default)(nextNode.CATEGORIES, function (nextCategory) {
-        var newPath = path.concat(nextNode);
-        // avoids infinite loops due to cyclic categories.
-        if (!(0, includes_1.default)(newPath, nextCategory)) {
-            singleAssignCategoriesToksMap(newPath, nextCategory);
-        }
-    });
-}
-exports.singleAssignCategoriesToksMap = singleAssignCategoriesToksMap;
-function hasShortKeyProperty(tokType) {
-    return (0, has_1.default)(tokType, "tokenTypeIdx");
-}
-exports.hasShortKeyProperty = hasShortKeyProperty;
-function hasCategoriesProperty(tokType) {
-    return (0, has_1.default)(tokType, "CATEGORIES");
-}
-exports.hasCategoriesProperty = hasCategoriesProperty;
-function hasExtendingTokensTypesProperty(tokType) {
-    return (0, has_1.default)(tokType, "categoryMatches");
-}
-exports.hasExtendingTokensTypesProperty = hasExtendingTokensTypesProperty;
-function hasExtendingTokensTypesMapProperty(tokType) {
-    return (0, has_1.default)(tokType, "categoryMatchesMap");
-}
-exports.hasExtendingTokensTypesMapProperty = hasExtendingTokensTypesMapProperty;
-function isTokenType(tokType) {
-    return (0, has_1.default)(tokType, "tokenTypeIdx");
-}
-exports.isTokenType = isTokenType;
-//# sourceMappingURL=tokens.js.map
-
-/***/ }),
-
-/***/ 58980:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.tokenMatcher = exports.createTokenInstance = exports.EOF = exports.createToken = exports.hasTokenLabel = exports.tokenName = exports.tokenLabel = void 0;
-var isString_1 = __importDefault(__webpack_require__(47037));
-var has_1 = __importDefault(__webpack_require__(18721));
-var isUndefined_1 = __importDefault(__webpack_require__(52353));
-var lexer_public_1 = __webpack_require__(88200);
-var tokens_1 = __webpack_require__(22963);
-function tokenLabel(tokType) {
-    if (hasTokenLabel(tokType)) {
-        return tokType.LABEL;
-    }
-    else {
-        return tokType.name;
-    }
-}
-exports.tokenLabel = tokenLabel;
-function tokenName(tokType) {
-    return tokType.name;
-}
-exports.tokenName = tokenName;
-function hasTokenLabel(obj) {
-    return (0, isString_1.default)(obj.LABEL) && obj.LABEL !== "";
-}
-exports.hasTokenLabel = hasTokenLabel;
-var PARENT = "parent";
-var CATEGORIES = "categories";
-var LABEL = "label";
-var GROUP = "group";
-var PUSH_MODE = "push_mode";
-var POP_MODE = "pop_mode";
-var LONGER_ALT = "longer_alt";
-var LINE_BREAKS = "line_breaks";
-var START_CHARS_HINT = "start_chars_hint";
-function createToken(config) {
-    return createTokenInternal(config);
-}
-exports.createToken = createToken;
-function createTokenInternal(config) {
-    var pattern = config.pattern;
-    var tokenType = {};
-    tokenType.name = config.name;
-    if (!(0, isUndefined_1.default)(pattern)) {
-        tokenType.PATTERN = pattern;
-    }
-    if ((0, has_1.default)(config, PARENT)) {
-        throw ("The parent property is no longer supported.\n" +
-            "See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.");
-    }
-    if ((0, has_1.default)(config, CATEGORIES)) {
-        // casting to ANY as this will be fixed inside `augmentTokenTypes``
-        tokenType.CATEGORIES = config[CATEGORIES];
-    }
-    (0, tokens_1.augmentTokenTypes)([tokenType]);
-    if ((0, has_1.default)(config, LABEL)) {
-        tokenType.LABEL = config[LABEL];
-    }
-    if ((0, has_1.default)(config, GROUP)) {
-        tokenType.GROUP = config[GROUP];
-    }
-    if ((0, has_1.default)(config, POP_MODE)) {
-        tokenType.POP_MODE = config[POP_MODE];
-    }
-    if ((0, has_1.default)(config, PUSH_MODE)) {
-        tokenType.PUSH_MODE = config[PUSH_MODE];
-    }
-    if ((0, has_1.default)(config, LONGER_ALT)) {
-        tokenType.LONGER_ALT = config[LONGER_ALT];
-    }
-    if ((0, has_1.default)(config, LINE_BREAKS)) {
-        tokenType.LINE_BREAKS = config[LINE_BREAKS];
-    }
-    if ((0, has_1.default)(config, START_CHARS_HINT)) {
-        tokenType.START_CHARS_HINT = config[START_CHARS_HINT];
-    }
-    return tokenType;
-}
-exports.EOF = createToken({ name: "EOF", pattern: lexer_public_1.Lexer.NA });
-(0, tokens_1.augmentTokenTypes)([exports.EOF]);
-function createTokenInstance(tokType, image, startOffset, endOffset, startLine, endLine, startColumn, endColumn) {
-    return {
-        image: image,
-        startOffset: startOffset,
-        endOffset: endOffset,
-        startLine: startLine,
-        endLine: endLine,
-        startColumn: startColumn,
-        endColumn: endColumn,
-        tokenTypeIdx: tokType.tokenTypeIdx,
-        tokenType: tokType
-    };
-}
-exports.createTokenInstance = createTokenInstance;
-function tokenMatcher(token, tokType) {
-    return (0, tokens_1.tokenStructuredMatcher)(token, tokType);
-}
-exports.tokenMatcher = tokenMatcher;
-//# sourceMappingURL=tokens_public.js.map
-
-/***/ }),
-
-/***/ 97657:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.VERSION = void 0;
-// needs a separate module as this is required inside chevrotain productive code
-// and also in the entry point for webpack(api.ts).
-// A separate file avoids cyclic dependencies and webpack errors.
-exports.VERSION = "10.5.0";
-//# sourceMappingURL=version.js.map
-
-/***/ }),
-
-/***/ 99039:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-module.exports = __webpack_require__(44578);
-
-
-/***/ }),
-
-/***/ 44578:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-/**
- * Clean-css - https://github.com/clean-css/clean-css
- * Released under the terms of MIT license
- */
-
-var level0Optimize = __webpack_require__(55303);
-var level1Optimize = __webpack_require__(52991);
-var level2Optimize = __webpack_require__(46445);
-var validator = __webpack_require__(77263);
-
-var compatibilityFrom = __webpack_require__(77511);
-var fetchFrom = __webpack_require__(30650);
-var formatFrom = (__webpack_require__(14687).formatFrom);
-var inlineFrom = __webpack_require__(3595);
-var inlineRequestFrom = __webpack_require__(76989);
-var inlineTimeoutFrom = __webpack_require__(29585);
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-var optimizationLevelFrom = (__webpack_require__(21905).optimizationLevelFrom);
-var pluginsFrom = __webpack_require__(81033);
-var rebaseFrom = __webpack_require__(82381);
-var rebaseToFrom = __webpack_require__(68835);
-
-var inputSourceMapTracker = __webpack_require__(94626);
-var readSources = __webpack_require__(48792);
-
-var serializeStyles = __webpack_require__(91225);
-var serializeStylesAndSourceMap = __webpack_require__(884);
-
-var CleanCSS = module.exports = function CleanCSS(options) {
-  options = options || {};
-
-  this.options = {
-    batch: !!options.batch,
-    compatibility: compatibilityFrom(options.compatibility),
-    explicitRebaseTo: 'rebaseTo' in options,
-    fetch: fetchFrom(options.fetch),
-    format: formatFrom(options.format),
-    inline: inlineFrom(options.inline),
-    inlineRequest: inlineRequestFrom(options.inlineRequest),
-    inlineTimeout: inlineTimeoutFrom(options.inlineTimeout),
-    level: optimizationLevelFrom(options.level),
-    plugins: pluginsFrom(options.plugins),
-    rebase: rebaseFrom(options.rebase, options.rebaseTo),
-    rebaseTo: rebaseToFrom(options.rebaseTo),
-    returnPromise: !!options.returnPromise,
-    sourceMap: !!options.sourceMap,
-    sourceMapInlineSources: !!options.sourceMapInlineSources
-  };
-};
-
-// for compatibility with optimize-css-assets-webpack-plugin
-CleanCSS.process = function(input, opts) {
-  var cleanCss;
-  var optsTo = opts.to;
-
-  delete opts.to;
-  cleanCss = new CleanCSS(Object.assign({
-    returnPromise: true, rebaseTo: optsTo
-  }, opts));
-
-  return cleanCss.minify(input)
-    .then(function(output) {
-      return { css: output.styles };
-    });
-};
-
-CleanCSS.prototype.minify = function(input, maybeSourceMap, maybeCallback) {
-  var options = this.options;
-
-  if (options.returnPromise) {
-    return new Promise(function(resolve, reject) {
-      minifyAll(input, options, maybeSourceMap, function(errors, output) {
-        return errors
-          ? reject(errors)
-          : resolve(output);
-      });
-    });
-  }
-  return minifyAll(input, options, maybeSourceMap, maybeCallback);
-};
-
-function minifyAll(input, options, maybeSourceMap, maybeCallback) {
-  if (options.batch && Array.isArray(input)) {
-    return minifyInBatchesFromArray(input, options, maybeSourceMap, maybeCallback);
-  } if (options.batch && (typeof input == 'object')) {
-    return minifyInBatchesFromHash(input, options, maybeSourceMap, maybeCallback);
-  }
-  return minify(input, options, maybeSourceMap, maybeCallback);
-}
-
-function minifyInBatchesFromArray(input, options, maybeSourceMap, maybeCallback) {
-  var callback = typeof maybeCallback == 'function'
-    ? maybeCallback
-    : (typeof maybeSourceMap == 'function' ? maybeSourceMap : null);
-  var errors = [];
-  var outputAsHash = {};
-  var inputValue;
-  var i, l;
-
-  function whenHashBatchDone(innerErrors, output) {
-    outputAsHash = Object.assign(outputAsHash, output);
-
-    if (innerErrors !== null) {
-      errors = errors.concat(innerErrors);
-    }
-  }
-
-  for (i = 0, l = input.length; i < l; i++) {
-    if (typeof input[i] == 'object') {
-      minifyInBatchesFromHash(input[i], options, whenHashBatchDone);
-    } else {
-      inputValue = input[i];
-
-      outputAsHash[inputValue] = minify([inputValue], options);
-      errors = errors.concat(outputAsHash[inputValue].errors);
-    }
-  }
-
-  return callback
-    ? callback(errors.length > 0 ? errors : null, outputAsHash)
-    : outputAsHash;
-}
-
-function minifyInBatchesFromHash(input, options, maybeSourceMap, maybeCallback) {
-  var callback = typeof maybeCallback == 'function'
-    ? maybeCallback
-    : (typeof maybeSourceMap == 'function' ? maybeSourceMap : null);
-  var errors = [];
-  var outputAsHash = {};
-  var inputKey;
-  var inputValue;
-
-  for (inputKey in input) {
-    inputValue = input[inputKey];
-
-    outputAsHash[inputKey] = minify(inputValue.styles, options, inputValue.sourceMap);
-    errors = errors.concat(outputAsHash[inputKey].errors);
-  }
-
-  return callback
-    ? callback(errors.length > 0 ? errors : null, outputAsHash)
-    : outputAsHash;
-}
-
-function minify(input, options, maybeSourceMap, maybeCallback) {
-  var sourceMap = typeof maybeSourceMap != 'function'
-    ? maybeSourceMap
-    : null;
-  var callback = typeof maybeCallback == 'function'
-    ? maybeCallback
-    : (typeof maybeSourceMap == 'function' ? maybeSourceMap : null);
-  var context = {
-    stats: {
-      efficiency: 0,
-      minifiedSize: 0,
-      originalSize: 0,
-      startedAt: Date.now(),
-      timeSpent: 0
-    },
-    cache: { specificity: {} },
-    errors: [],
-    inlinedStylesheets: [],
-    inputSourceMapTracker: inputSourceMapTracker(),
-    localOnly: !callback,
-    options: options,
-    source: null,
-    sourcesContent: {},
-    validator: validator(options.compatibility),
-    warnings: []
-  };
-  var implicitRebaseToWarning;
-
-  if (sourceMap) {
-    context.inputSourceMapTracker.track(undefined, sourceMap);
-  }
-
-  if (options.rebase && !options.explicitRebaseTo) {
-    implicitRebaseToWarning = 'You have set `rebase: true` without giving `rebaseTo` option, which, in this case, defaults to the current working directory. '
-      + 'You are then warned this can lead to unexpected URL rebasing (aka here be dragons)! '
-      + 'If you are OK with the clean-css output, then you can get rid of this warning by giving clean-css a `rebaseTo: process.cwd()` option.';
-    context.warnings.push(implicitRebaseToWarning);
-  }
-
-  return runner(context.localOnly)(function() {
-    return readSources(input, context, function(tokens) {
-      var serialize = context.options.sourceMap
-        ? serializeStylesAndSourceMap
-        : serializeStyles;
-
-      var optimizedTokens = optimize(tokens, context);
-      var optimizedStyles = serialize(optimizedTokens, context);
-      var output = withMetadata(optimizedStyles, context);
-
-      return callback
-        ? callback(context.errors.length > 0 ? context.errors : null, output)
-        : output;
-    });
-  });
-}
-
-function runner(localOnly) {
-  // to always execute code asynchronously when a callback is given
-  // more at blog.izs.me/post/59142742143/designing-apis-for-asynchrony
-  return localOnly
-    ? function(callback) { return callback(); }
-    : process.nextTick;
-}
-
-function optimize(tokens, context) {
-  var optimized = level0Optimize(tokens, context);
-
-  optimized = OptimizationLevel.One in context.options.level
-    ? level1Optimize(tokens, context)
-    : tokens;
-  optimized = OptimizationLevel.Two in context.options.level
-    ? level2Optimize(tokens, context, true)
-    : optimized;
-
-  return optimized;
-}
-
-function withMetadata(output, context) {
-  output.stats = calculateStatsFrom(output.styles, context);
-  output.errors = context.errors;
-  output.inlinedStylesheets = context.inlinedStylesheets;
-  output.warnings = context.warnings;
-
-  return output;
-}
-
-function calculateStatsFrom(styles, context) {
-  var finishedAt = Date.now();
-  var timeSpent = finishedAt - context.stats.startedAt;
-
-  delete context.stats.startedAt;
-  context.stats.timeSpent = timeSpent;
-  context.stats.efficiency = 1 - styles.length / context.stats.originalSize;
-  context.stats.minifiedSize = styles.length;
-
-  return context.stats;
-}
-
-
-/***/ }),
-
-/***/ 48315:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var wrapSingle = (__webpack_require__(93684).single);
-
-var Token = __webpack_require__(44633);
-
-function deep(property) {
-  var cloned = shallow(property);
-  for (var i = property.components.length - 1; i >= 0; i--) {
-    var component = shallow(property.components[i]);
-    component.value = property.components[i].value.slice(0);
-    cloned.components.unshift(component);
-  }
-
-  cloned.dirty = true;
-  cloned.value = property.value.slice(0);
-
-  return cloned;
-}
-
-function shallow(property) {
-  var cloned = wrapSingle([
-    Token.PROPERTY,
-    [Token.PROPERTY_NAME, property.name]
-  ]);
-  cloned.important = property.important;
-  cloned.hack = property.hack;
-  cloned.unused = false;
-  return cloned;
-}
-
-module.exports = {
-  deep: deep,
-  shallow: shallow
-};
-
-
-/***/ }),
-
-/***/ 6058:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-// Contains the interpretation of CSS properties, as used by the property optimizer
-
-var breakUp = __webpack_require__(69954);
-var canOverride = __webpack_require__(69638);
-var restore = __webpack_require__(64862);
-
-var propertyOptimizers = __webpack_require__(42388);
-var valueOptimizers = __webpack_require__(75125);
-
-var override = __webpack_require__(28832);
-
-// Properties to process
-// Extend this object in order to add support for more properties in the optimizer.
-//
-// Each key in this object represents a CSS property and should be an object.
-// Such an object contains properties that describe how the represented CSS property should be handled.
-// Possible options:
-//
-// * components: array (Only specify for shorthand properties.)
-//   Contains the names of the granular properties this shorthand compacts.
-//
-// * canOverride: function
-//   Returns whether two tokens of this property can be merged with each other.
-//   This property has no meaning for shorthands.
-//
-// * defaultValue: string
-//   Specifies the default value of the property according to the CSS standard.
-//   For shorthand, this is used when every component is set to its default value, therefore it should be the shortest possible default value of all the components.
-//
-// * shortestValue: string
-//   Specifies the shortest possible value the property can possibly have.
-//   (Falls back to defaultValue if unspecified.)
-//
-// * breakUp: function (Only specify for shorthand properties.)
-//   Breaks the shorthand up to its components.
-//
-// * restore: function (Only specify for shorthand properties.)
-//   Puts the shorthand together from its components.
-//
-var configuration = {
-  animation: {
-    canOverride: canOverride.generic.components([
-      canOverride.generic.time,
-      canOverride.generic.timingFunction,
-      canOverride.generic.time,
-      canOverride.property.animationIterationCount,
-      canOverride.property.animationDirection,
-      canOverride.property.animationFillMode,
-      canOverride.property.animationPlayState,
-      canOverride.property.animationName
-    ]),
-    components: [
-      'animation-duration',
-      'animation-timing-function',
-      'animation-delay',
-      'animation-iteration-count',
-      'animation-direction',
-      'animation-fill-mode',
-      'animation-play-state',
-      'animation-name'
-    ],
-    breakUp: breakUp.multiplex(breakUp.animation),
-    defaultValue: 'none',
-    restore: restore.multiplex(restore.withoutDefaults),
-    shorthand: true,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.textQuotes,
-      valueOptimizers.time,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  'animation-delay': {
-    canOverride: canOverride.generic.time,
-    componentOf: [
-      'animation'
-    ],
-    defaultValue: '0s',
-    intoMultiplexMode: 'real',
-    valueOptimizers: [
-      valueOptimizers.time,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  'animation-direction': {
-    canOverride: canOverride.property.animationDirection,
-    componentOf: [
-      'animation'
-    ],
-    defaultValue: 'normal',
-    intoMultiplexMode: 'real',
-    vendorPrefixes: [
-      '-moz-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  'animation-duration': {
-    canOverride: canOverride.generic.time,
-    componentOf: [
-      'animation'
-    ],
-    defaultValue: '0s',
-    intoMultiplexMode: 'real',
-    keepUnlessDefault: 'animation-delay',
-    valueOptimizers: [
-      valueOptimizers.time,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  'animation-fill-mode': {
-    canOverride: canOverride.property.animationFillMode,
-    componentOf: [
-      'animation'
-    ],
-    defaultValue: 'none',
-    intoMultiplexMode: 'real',
-    vendorPrefixes: [
-      '-moz-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  'animation-iteration-count': {
-    canOverride: canOverride.property.animationIterationCount,
-    componentOf: [
-      'animation'
-    ],
-    defaultValue: '1',
-    intoMultiplexMode: 'real',
-    vendorPrefixes: [
-      '-moz-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  'animation-name': {
-    canOverride: canOverride.property.animationName,
-    componentOf: [
-      'animation'
-    ],
-    defaultValue: 'none',
-    intoMultiplexMode: 'real',
-    valueOptimizers: [
-      valueOptimizers.textQuotes
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  'animation-play-state': {
-    canOverride: canOverride.property.animationPlayState,
-    componentOf: [
-      'animation'
-    ],
-    defaultValue: 'running',
-    intoMultiplexMode: 'real',
-    vendorPrefixes: [
-      '-moz-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  'animation-timing-function': {
-    canOverride: canOverride.generic.timingFunction,
-    componentOf: [
-      'animation'
-    ],
-    defaultValue: 'ease',
-    intoMultiplexMode: 'real',
-    vendorPrefixes: [
-      '-moz-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  background: {
-    canOverride: canOverride.generic.components([
-      canOverride.generic.image,
-      canOverride.property.backgroundPosition,
-      canOverride.property.backgroundSize,
-      canOverride.property.backgroundRepeat,
-      canOverride.property.backgroundAttachment,
-      canOverride.property.backgroundOrigin,
-      canOverride.property.backgroundClip,
-      canOverride.generic.color
-    ]),
-    components: [
-      'background-image',
-      'background-position',
-      'background-size',
-      'background-repeat',
-      'background-attachment',
-      'background-origin',
-      'background-clip',
-      'background-color'
-    ],
-    breakUp: breakUp.multiplex(breakUp.background),
-    defaultValue: '0 0',
-    propertyOptimizer: propertyOptimizers.background,
-    restore: restore.multiplex(restore.background),
-    shortestValue: '0',
-    shorthand: true,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.urlWhiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.zero,
-      valueOptimizers.color,
-      valueOptimizers.urlPrefix,
-      valueOptimizers.urlQuotes
-    ]
-  },
-  'background-attachment': {
-    canOverride: canOverride.property.backgroundAttachment,
-    componentOf: [
-      'background'
-    ],
-    defaultValue: 'scroll',
-    intoMultiplexMode: 'real'
-  },
-  'background-clip': {
-    canOverride: canOverride.property.backgroundClip,
-    componentOf: [
-      'background'
-    ],
-    defaultValue: 'border-box',
-    intoMultiplexMode: 'real',
-    shortestValue: 'border-box'
-  },
-  'background-color': {
-    canOverride: canOverride.generic.color,
-    componentOf: [
-      'background'
-    ],
-    defaultValue: 'transparent',
-    intoMultiplexMode: 'real', // otherwise real color will turn into default since color appears in last multiplex only
-    multiplexLastOnly: true,
-    nonMergeableValue: 'none',
-    shortestValue: 'red',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.color
-    ]
-  },
-  'background-image': {
-    canOverride: canOverride.generic.image,
-    componentOf: [
-      'background'
-    ],
-    defaultValue: 'none',
-    intoMultiplexMode: 'default',
-    valueOptimizers: [
-      valueOptimizers.urlWhiteSpace,
-      valueOptimizers.urlPrefix,
-      valueOptimizers.urlQuotes,
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero,
-      valueOptimizers.color
-    ]
-  },
-  'background-origin': {
-    canOverride: canOverride.property.backgroundOrigin,
-    componentOf: [
-      'background'
-    ],
-    defaultValue: 'padding-box',
-    intoMultiplexMode: 'real',
-    shortestValue: 'border-box'
-  },
-  'background-position': {
-    canOverride: canOverride.property.backgroundPosition,
-    componentOf: [
-      'background'
-    ],
-    defaultValue: ['0', '0'],
-    doubleValues: true,
-    intoMultiplexMode: 'real',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'background-repeat': {
-    canOverride: canOverride.property.backgroundRepeat,
-    componentOf: [
-      'background'
-    ],
-    defaultValue: ['repeat'],
-    doubleValues: true,
-    intoMultiplexMode: 'real'
-  },
-  'background-size': {
-    canOverride: canOverride.property.backgroundSize,
-    componentOf: [
-      'background'
-    ],
-    defaultValue: ['auto'],
-    doubleValues: true,
-    intoMultiplexMode: 'real',
-    shortestValue: '0 0',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  bottom: {
-    canOverride: canOverride.property.bottom,
-    defaultValue: 'auto',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  border: {
-    breakUp: breakUp.border,
-    canOverride: canOverride.generic.components([
-      canOverride.generic.unit,
-      canOverride.property.borderStyle,
-      canOverride.generic.color
-    ]),
-    components: [
-      'border-width',
-      'border-style',
-      'border-color'
-    ],
-    defaultValue: 'none',
-    overridesShorthands: [
-      'border-bottom',
-      'border-left',
-      'border-right',
-      'border-top'
-    ],
-    restore: restore.withoutDefaults,
-    shorthand: true,
-    shorthandComponents: true,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.zero,
-      valueOptimizers.color
-    ]
-  },
-  'border-bottom': {
-    breakUp: breakUp.border,
-    canOverride: canOverride.generic.components([
-      canOverride.generic.unit,
-      canOverride.property.borderStyle,
-      canOverride.generic.color
-    ]),
-    components: [
-      'border-bottom-width',
-      'border-bottom-style',
-      'border-bottom-color'
-    ],
-    defaultValue: 'none',
-    restore: restore.withoutDefaults,
-    shorthand: true,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.zero,
-      valueOptimizers.color
-    ]
-  },
-  'border-bottom-color': {
-    canOverride: canOverride.generic.color,
-    componentOf: [
-      'border-bottom',
-      'border-color'
-    ],
-    defaultValue: 'none',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.color
-    ]
-  },
-  'border-bottom-left-radius': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'border-radius'
-    ],
-    defaultValue: '0',
-    propertyOptimizer: propertyOptimizers.borderRadius,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-o-'
-    ]
-  },
-  'border-bottom-right-radius': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'border-radius'
-    ],
-    defaultValue: '0',
-    propertyOptimizer: propertyOptimizers.borderRadius,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-o-'
-    ]
-  },
-  'border-bottom-style': {
-    canOverride: canOverride.property.borderStyle,
-    componentOf: [
-      'border-bottom',
-      'border-style'
-    ],
-    defaultValue: 'none'
-  },
-  'border-bottom-width': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'border-bottom',
-      'border-width'
-    ],
-    defaultValue: 'medium',
-    oppositeTo: 'border-top-width',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'border-collapse': {
-    canOverride: canOverride.property.borderCollapse,
-    defaultValue: 'separate'
-  },
-  'border-color': {
-    breakUp: breakUp.fourValues,
-    canOverride: canOverride.generic.components([
-      canOverride.generic.color,
-      canOverride.generic.color,
-      canOverride.generic.color,
-      canOverride.generic.color
-    ]),
-    componentOf: [
-      'border'
-    ],
-    components: [
-      'border-top-color',
-      'border-right-color',
-      'border-bottom-color',
-      'border-left-color'
-    ],
-    defaultValue: 'none',
-    restore: restore.fourValues,
-    shortestValue: 'red',
-    shorthand: true,
-    singleTypeComponents: true,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.color
-    ]
-  },
-  'border-left': {
-    breakUp: breakUp.border,
-    canOverride: canOverride.generic.components([
-      canOverride.generic.unit,
-      canOverride.property.borderStyle,
-      canOverride.generic.color
-    ]),
-    components: [
-      'border-left-width',
-      'border-left-style',
-      'border-left-color'
-    ],
-    defaultValue: 'none',
-    restore: restore.withoutDefaults,
-    shorthand: true,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.zero,
-      valueOptimizers.color
-    ]
-  },
-  'border-left-color': {
-    canOverride: canOverride.generic.color,
-    componentOf: [
-      'border-color',
-      'border-left'
-    ],
-    defaultValue: 'none',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.color
-    ]
-  },
-  'border-left-style': {
-    canOverride: canOverride.property.borderStyle,
-    componentOf: [
-      'border-left',
-      'border-style'
-    ],
-    defaultValue: 'none'
-  },
-  'border-left-width': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'border-left',
-      'border-width'
-    ],
-    defaultValue: 'medium',
-    oppositeTo: 'border-right-width',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'border-radius': {
-    breakUp: breakUp.borderRadius,
-    canOverride: canOverride.generic.components([
-      canOverride.generic.unit,
-      canOverride.generic.unit,
-      canOverride.generic.unit,
-      canOverride.generic.unit
-    ]),
-    components: [
-      'border-top-left-radius',
-      'border-top-right-radius',
-      'border-bottom-right-radius',
-      'border-bottom-left-radius'
-    ],
-    defaultValue: '0',
-    propertyOptimizer: propertyOptimizers.borderRadius,
-    restore: restore.borderRadius,
-    shorthand: true,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-o-'
-    ]
-  },
-  'border-right': {
-    breakUp: breakUp.border,
-    canOverride: canOverride.generic.components([
-      canOverride.generic.unit,
-      canOverride.property.borderStyle,
-      canOverride.generic.color
-    ]),
-    components: [
-      'border-right-width',
-      'border-right-style',
-      'border-right-color'
-    ],
-    defaultValue: 'none',
-    restore: restore.withoutDefaults,
-    shorthand: true,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.color
-    ]
-  },
-  'border-right-color': {
-    canOverride: canOverride.generic.color,
-    componentOf: [
-      'border-color',
-      'border-right'
-    ],
-    defaultValue: 'none',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.color
-    ]
-  },
-  'border-right-style': {
-    canOverride: canOverride.property.borderStyle,
-    componentOf: [
-      'border-right',
-      'border-style'
-    ],
-    defaultValue: 'none'
-  },
-  'border-right-width': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'border-right',
-      'border-width'
-    ],
-    defaultValue: 'medium',
-    oppositeTo: 'border-left-width',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'border-style': {
-    breakUp: breakUp.fourValues,
-    canOverride: canOverride.generic.components([
-      canOverride.property.borderStyle,
-      canOverride.property.borderStyle,
-      canOverride.property.borderStyle,
-      canOverride.property.borderStyle
-    ]),
-    componentOf: [
-      'border'
-    ],
-    components: [
-      'border-top-style',
-      'border-right-style',
-      'border-bottom-style',
-      'border-left-style'
-    ],
-    defaultValue: 'none',
-    restore: restore.fourValues,
-    shorthand: true,
-    singleTypeComponents: true
-  },
-  'border-top': {
-    breakUp: breakUp.border,
-    canOverride: canOverride.generic.components([
-      canOverride.generic.unit,
-      canOverride.property.borderStyle,
-      canOverride.generic.color
-    ]),
-    components: [
-      'border-top-width',
-      'border-top-style',
-      'border-top-color'
-    ],
-    defaultValue: 'none',
-    restore: restore.withoutDefaults,
-    shorthand: true,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.zero,
-      valueOptimizers.color,
-      valueOptimizers.unit
-    ]
-  },
-  'border-top-color': {
-    canOverride: canOverride.generic.color,
-    componentOf: [
-      'border-color',
-      'border-top'
-    ],
-    defaultValue: 'none',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.color
-    ]
-  },
-  'border-top-left-radius': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'border-radius'
-    ],
-    defaultValue: '0',
-    propertyOptimizer: propertyOptimizers.borderRadius,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-o-'
-    ]
-  },
-  'border-top-right-radius': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'border-radius'
-    ],
-    defaultValue: '0',
-    propertyOptimizer: propertyOptimizers.borderRadius,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-o-'
-    ]
-  },
-  'border-top-style': {
-    canOverride: canOverride.property.borderStyle,
-    componentOf: [
-      'border-style',
-      'border-top'
-    ],
-    defaultValue: 'none'
-  },
-  'border-top-width': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'border-top',
-      'border-width'
-    ],
-    defaultValue: 'medium',
-    oppositeTo: 'border-bottom-width',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'border-width': {
-    breakUp: breakUp.fourValues,
-    canOverride: canOverride.generic.components([
-      canOverride.generic.unit,
-      canOverride.generic.unit,
-      canOverride.generic.unit,
-      canOverride.generic.unit
-    ]),
-    componentOf: [
-      'border'
-    ],
-    components: [
-      'border-top-width',
-      'border-right-width',
-      'border-bottom-width',
-      'border-left-width'
-    ],
-    defaultValue: 'medium',
-    restore: restore.fourValues,
-    shortestValue: '0',
-    shorthand: true,
-    singleTypeComponents: true,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'box-shadow': {
-    propertyOptimizer: propertyOptimizers.boxShadow,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero,
-      valueOptimizers.color
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-ms-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  clear: {
-    canOverride: canOverride.property.clear,
-    defaultValue: 'none'
-  },
-  clip: {
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  color: {
-    canOverride: canOverride.generic.color,
-    defaultValue: 'transparent',
-    shortestValue: 'red',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.color
-    ]
-  },
-  'column-gap': {
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  cursor: {
-    canOverride: canOverride.property.cursor,
-    defaultValue: 'auto'
-  },
-  display: { canOverride: canOverride.property.display },
-  filter: {
-    propertyOptimizer: propertyOptimizers.filter,
-    valueOptimizers: [
-      valueOptimizers.fraction
-    ]
-  },
-  float: {
-    canOverride: canOverride.property.float,
-    defaultValue: 'none'
-  },
-  font: {
-    breakUp: breakUp.font,
-    canOverride: canOverride.generic.components([
-      canOverride.property.fontStyle,
-      canOverride.property.fontVariant,
-      canOverride.property.fontWeight,
-      canOverride.property.fontStretch,
-      canOverride.generic.unit,
-      canOverride.generic.unit,
-      canOverride.property.fontFamily
-    ]),
-    components: [
-      'font-style',
-      'font-variant',
-      'font-weight',
-      'font-stretch',
-      'font-size',
-      'line-height',
-      'font-family'
-    ],
-    restore: restore.font,
-    shorthand: true,
-    valueOptimizers: [
-      valueOptimizers.textQuotes
-    ]
-  },
-  'font-family': {
-    canOverride: canOverride.property.fontFamily,
-    defaultValue: 'user|agent|specific',
-    valueOptimizers: [
-      valueOptimizers.textQuotes
-    ]
-  },
-  'font-size': {
-    canOverride: canOverride.generic.unit,
-    defaultValue: 'medium',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.fraction
-    ]
-  },
-  'font-stretch': {
-    canOverride: canOverride.property.fontStretch,
-    defaultValue: 'normal'
-  },
-  'font-style': {
-    canOverride: canOverride.property.fontStyle,
-    defaultValue: 'normal'
-  },
-  'font-variant': {
-    canOverride: canOverride.property.fontVariant,
-    defaultValue: 'normal'
-  },
-  'font-weight': {
-    canOverride: canOverride.property.fontWeight,
-    defaultValue: 'normal',
-    propertyOptimizer: propertyOptimizers.fontWeight,
-    shortestValue: '400'
-  },
-  gap: {
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  height: {
-    canOverride: canOverride.generic.unit,
-    defaultValue: 'auto',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  left: {
-    canOverride: canOverride.property.left,
-    defaultValue: 'auto',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'letter-spacing': {
-    valueOptimizers: [
-      valueOptimizers.fraction,
-      valueOptimizers.zero
-    ]
-  },
-  'line-height': {
-    canOverride: canOverride.generic.unitOrNumber,
-    defaultValue: 'normal',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.fraction,
-      valueOptimizers.zero
-    ]
-  },
-  'list-style': {
-    canOverride: canOverride.generic.components([
-      canOverride.property.listStyleType,
-      canOverride.property.listStylePosition,
-      canOverride.property.listStyleImage
-    ]),
-    components: [
-      'list-style-type',
-      'list-style-position',
-      'list-style-image'
-    ],
-    breakUp: breakUp.listStyle,
-    restore: restore.withoutDefaults,
-    defaultValue: 'outside', // can't use 'disc' because that'd override default 'decimal' for <ol>
-    shortestValue: 'none',
-    shorthand: true
-  },
-  'list-style-image': {
-    canOverride: canOverride.generic.image,
-    componentOf: [
-      'list-style'
-    ],
-    defaultValue: 'none'
-  },
-  'list-style-position': {
-    canOverride: canOverride.property.listStylePosition,
-    componentOf: [
-      'list-style'
-    ],
-    defaultValue: 'outside',
-    shortestValue: 'inside'
-  },
-  'list-style-type': {
-    canOverride: canOverride.property.listStyleType,
-    componentOf: [
-      'list-style'
-    ],
-    // NOTE: we can't tell the real default value here, it's 'disc' for <ul> and 'decimal' for <ol>
-    // this is a hack, but it doesn't matter because this value will be either overridden or
-    // it will disappear at the final step anyway
-    defaultValue: 'decimal|disc',
-    shortestValue: 'none'
-  },
-  margin: {
-    breakUp: breakUp.fourValues,
-    canOverride: canOverride.generic.components([
-      canOverride.generic.unit,
-      canOverride.generic.unit,
-      canOverride.generic.unit,
-      canOverride.generic.unit
-    ]),
-    components: [
-      'margin-top',
-      'margin-right',
-      'margin-bottom',
-      'margin-left'
-    ],
-    defaultValue: '0',
-    propertyOptimizer: propertyOptimizers.margin,
-    restore: restore.fourValues,
-    shorthand: true,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'margin-bottom': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'margin'
-    ],
-    defaultValue: '0',
-    oppositeTo: 'margin-top',
-    propertyOptimizer: propertyOptimizers.margin,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'margin-inline-end': {
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'margin-inline-start': {
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'margin-left': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'margin'
-    ],
-    defaultValue: '0',
-    oppositeTo: 'margin-right',
-    propertyOptimizer: propertyOptimizers.margin,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'margin-right': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'margin'
-    ],
-    defaultValue: '0',
-    oppositeTo: 'margin-left',
-    propertyOptimizer: propertyOptimizers.margin,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'margin-top': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'margin'
-    ],
-    defaultValue: '0',
-    oppositeTo: 'margin-bottom',
-    propertyOptimizer: propertyOptimizers.margin,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'max-height': {
-    canOverride: canOverride.generic.unit,
-    defaultValue: 'none',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'max-width': {
-    canOverride: canOverride.generic.unit,
-    defaultValue: 'none',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'min-height': {
-    canOverride: canOverride.generic.unit,
-    defaultValue: '0',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'min-width': {
-    canOverride: canOverride.generic.unit,
-    defaultValue: '0',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  opacity: {
-    valueOptimizers: [
-      valueOptimizers.fraction,
-      valueOptimizers.precision
-    ]
-  },
-  outline: {
-    canOverride: canOverride.generic.components([
-      canOverride.generic.color,
-      canOverride.property.outlineStyle,
-      canOverride.generic.unit
-    ]),
-    components: [
-      'outline-color',
-      'outline-style',
-      'outline-width'
-    ],
-    breakUp: breakUp.outline,
-    restore: restore.withoutDefaults,
-    defaultValue: '0',
-    propertyOptimizer: propertyOptimizers.outline,
-    shorthand: true,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'outline-color': {
-    canOverride: canOverride.generic.color,
-    componentOf: [
-      'outline'
-    ],
-    defaultValue: 'invert',
-    shortestValue: 'red',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.color
-    ]
-  },
-  'outline-style': {
-    canOverride: canOverride.property.outlineStyle,
-    componentOf: [
-      'outline'
-    ],
-    defaultValue: 'none'
-  },
-  'outline-width': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'outline'
-    ],
-    defaultValue: 'medium',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  overflow: {
-    canOverride: canOverride.property.overflow,
-    defaultValue: 'visible'
-  },
-  'overflow-x': {
-    canOverride: canOverride.property.overflow,
-    defaultValue: 'visible'
-  },
-  'overflow-y': {
-    canOverride: canOverride.property.overflow,
-    defaultValue: 'visible'
-  },
-  padding: {
-    breakUp: breakUp.fourValues,
-    canOverride: canOverride.generic.components([
-      canOverride.generic.unit,
-      canOverride.generic.unit,
-      canOverride.generic.unit,
-      canOverride.generic.unit
-    ]),
-    components: [
-      'padding-top',
-      'padding-right',
-      'padding-bottom',
-      'padding-left'
-    ],
-    defaultValue: '0',
-    propertyOptimizer: propertyOptimizers.padding,
-    restore: restore.fourValues,
-    shorthand: true,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'padding-bottom': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'padding'
-    ],
-    defaultValue: '0',
-    oppositeTo: 'padding-top',
-    propertyOptimizer: propertyOptimizers.padding,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'padding-left': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'padding'
-    ],
-    defaultValue: '0',
-    oppositeTo: 'padding-right',
-    propertyOptimizer: propertyOptimizers.padding,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'padding-right': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'padding'
-    ],
-    defaultValue: '0',
-    oppositeTo: 'padding-left',
-    propertyOptimizer: propertyOptimizers.padding,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'padding-top': {
-    canOverride: canOverride.generic.unit,
-    componentOf: [
-      'padding'
-    ],
-    defaultValue: '0',
-    oppositeTo: 'padding-bottom',
-    propertyOptimizer: propertyOptimizers.padding,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  position: {
-    canOverride: canOverride.property.position,
-    defaultValue: 'static'
-  },
-  right: {
-    canOverride: canOverride.property.right,
-    defaultValue: 'auto',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'row-gap': {
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  src: {
-    valueOptimizers: [
-      valueOptimizers.urlWhiteSpace,
-      valueOptimizers.urlPrefix,
-      valueOptimizers.urlQuotes
-    ]
-  },
-  'stroke-width': {
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'text-align': {
-    canOverride: canOverride.property.textAlign,
-    // NOTE: we can't tell the real default value here, as it depends on default text direction
-    // this is a hack, but it doesn't matter because this value will be either overridden or
-    // it will disappear anyway
-    defaultValue: 'left|right'
-  },
-  'text-decoration': {
-    canOverride: canOverride.property.textDecoration,
-    defaultValue: 'none'
-  },
-  'text-indent': {
-    canOverride: canOverride.property.textOverflow,
-    defaultValue: 'none',
-    valueOptimizers: [
-      valueOptimizers.fraction,
-      valueOptimizers.zero
-    ]
-  },
-  'text-overflow': {
-    canOverride: canOverride.property.textOverflow,
-    defaultValue: 'none'
-  },
-  'text-shadow': {
-    canOverride: canOverride.property.textShadow,
-    defaultValue: 'none',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.zero,
-      valueOptimizers.color
-    ]
-  },
-  top: {
-    canOverride: canOverride.property.top,
-    defaultValue: 'auto',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  transform: {
-    canOverride: canOverride.property.transform,
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.degrees,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-ms-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  transition: {
-    breakUp: breakUp.multiplex(breakUp.transition),
-    canOverride: canOverride.generic.components([
-      canOverride.property.transitionProperty,
-      canOverride.generic.time,
-      canOverride.generic.timingFunction,
-      canOverride.generic.time
-    ]),
-    components: [
-      'transition-property',
-      'transition-duration',
-      'transition-timing-function',
-      'transition-delay'
-    ],
-    defaultValue: 'none',
-    restore: restore.multiplex(restore.withoutDefaults),
-    shorthand: true,
-    valueOptimizers: [
-      valueOptimizers.time,
-      valueOptimizers.fraction
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-ms-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  'transition-delay': {
-    canOverride: canOverride.generic.time,
-    componentOf: [
-      'transition'
-    ],
-    defaultValue: '0s',
-    intoMultiplexMode: 'real',
-    valueOptimizers: [
-      valueOptimizers.time
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-ms-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  'transition-duration': {
-    canOverride: canOverride.generic.time,
-    componentOf: [
-      'transition'
-    ],
-    defaultValue: '0s',
-    intoMultiplexMode: 'real',
-    keepUnlessDefault: 'transition-delay',
-    valueOptimizers: [
-      valueOptimizers.time,
-      valueOptimizers.fraction
-    ],
-    vendorPrefixes: [
-      '-moz-',
-      '-ms-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  'transition-property': {
-    canOverride: canOverride.generic.propertyName,
-    componentOf: [
-      'transition'
-    ],
-    defaultValue: 'all',
-    intoMultiplexMode: 'placeholder',
-    placeholderValue: '_', // it's a short value that won't match any property and still be a valid `transition-property`
-    vendorPrefixes: [
-      '-moz-',
-      '-ms-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  'transition-timing-function': {
-    canOverride: canOverride.generic.timingFunction,
-    componentOf: [
-      'transition'
-    ],
-    defaultValue: 'ease',
-    intoMultiplexMode: 'real',
-    vendorPrefixes: [
-      '-moz-',
-      '-ms-',
-      '-o-',
-      '-webkit-'
-    ]
-  },
-  'vertical-align': {
-    canOverride: canOverride.property.verticalAlign,
-    defaultValue: 'baseline',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  visibility: {
-    canOverride: canOverride.property.visibility,
-    defaultValue: 'visible'
-  },
-  '-webkit-tap-highlight-color': {
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.color
-    ]
-  },
-  '-webkit-margin-end': {
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'white-space': {
-    canOverride: canOverride.property.whiteSpace,
-    defaultValue: 'normal'
-  },
-  width: {
-    canOverride: canOverride.generic.unit,
-    defaultValue: 'auto',
-    shortestValue: '0',
-    valueOptimizers: [
-      valueOptimizers.whiteSpace,
-      valueOptimizers.fraction,
-      valueOptimizers.precision,
-      valueOptimizers.unit,
-      valueOptimizers.zero
-    ]
-  },
-  'z-index': {
-    canOverride: canOverride.property.zIndex,
-    defaultValue: 'auto'
-  }
-};
-
-// generate vendor-prefixed configuration
-var vendorPrefixedConfiguration = {};
-
-function cloneDescriptor(propertyName, prefix) {
-  var clonedDescriptor = override(configuration[propertyName], {});
-
-  if ('componentOf' in clonedDescriptor) {
-    clonedDescriptor.componentOf = clonedDescriptor.componentOf.map(function(shorthandName) {
-      return prefix + shorthandName;
-    });
-  }
-
-  if ('components' in clonedDescriptor) {
-    clonedDescriptor.components = clonedDescriptor.components.map(function(longhandName) {
-      return prefix + longhandName;
-    });
-  }
-
-  if ('keepUnlessDefault' in clonedDescriptor) {
-    clonedDescriptor.keepUnlessDefault = prefix + clonedDescriptor.keepUnlessDefault;
-  }
-
-  return clonedDescriptor;
-}
-
-for (var propertyName in configuration) {
-  var descriptor = configuration[propertyName];
-
-  if (!('vendorPrefixes' in descriptor)) {
-    continue;
-  }
-
-  for (var i = 0; i < descriptor.vendorPrefixes.length; i++) {
-    var prefix = descriptor.vendorPrefixes[i];
-    var clonedDescriptor = cloneDescriptor(propertyName, prefix);
-    delete clonedDescriptor.vendorPrefixes;
-
-    vendorPrefixedConfiguration[prefix + propertyName] = clonedDescriptor;
-  }
-
-  delete descriptor.vendorPrefixes;
-}
-
-module.exports = override(configuration, vendorPrefixedConfiguration);
-
-
-/***/ }),
-
-/***/ 69954:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var InvalidPropertyError = __webpack_require__(5942);
-
-var wrapSingle = (__webpack_require__(93684).single);
-
-var Token = __webpack_require__(44633);
-var Marker = __webpack_require__(53820);
-
-var formatPosition = __webpack_require__(96187);
-
-function _anyIsInherit(values) {
-  var i, l;
-
-  for (i = 0, l = values.length; i < l; i++) {
-    if (values[i][1] == 'inherit') {
-      return true;
-    }
-  }
-
-  return false;
-}
-
-function _colorFilter(validator) {
-  return function(value) {
-    return value[1] == 'invert' || validator.isColor(value[1]) || validator.isPrefixed(value[1]);
-  };
-}
-
-function _styleFilter(validator) {
-  return function(value) {
-    return value[1] != 'inherit' && validator.isStyleKeyword(value[1]) && !validator.isColorFunction(value[1]);
-  };
-}
-
-function _wrapDefault(name, property, configuration) {
-  var descriptor = configuration[name];
-  if (descriptor.doubleValues && descriptor.defaultValue.length == 2) {
-    return wrapSingle([
-      Token.PROPERTY,
-      [Token.PROPERTY_NAME, name],
-      [Token.PROPERTY_VALUE, descriptor.defaultValue[0]],
-      [Token.PROPERTY_VALUE, descriptor.defaultValue[1]]
-    ]);
-  } if (descriptor.doubleValues && descriptor.defaultValue.length == 1) {
-    return wrapSingle([
-      Token.PROPERTY,
-      [Token.PROPERTY_NAME, name],
-      [Token.PROPERTY_VALUE, descriptor.defaultValue[0]]
-    ]);
-  }
-  return wrapSingle([
-    Token.PROPERTY,
-    [Token.PROPERTY_NAME, name],
-    [Token.PROPERTY_VALUE, descriptor.defaultValue]
-  ]);
-}
-
-function _widthFilter(validator) {
-  return function(value) {
-    return value[1] != 'inherit'
-      && (validator.isWidth(value[1]) || validator.isUnit(value[1]) || validator.isDynamicUnit(value[1]))
-      && !validator.isStyleKeyword(value[1])
-      && !validator.isColorFunction(value[1]);
-  };
-}
-
-function animation(property, configuration, validator) {
-  var duration = _wrapDefault(property.name + '-duration', property, configuration);
-  var timing = _wrapDefault(property.name + '-timing-function', property, configuration);
-  var delay = _wrapDefault(property.name + '-delay', property, configuration);
-  var iteration = _wrapDefault(property.name + '-iteration-count', property, configuration);
-  var direction = _wrapDefault(property.name + '-direction', property, configuration);
-  var fill = _wrapDefault(property.name + '-fill-mode', property, configuration);
-  var play = _wrapDefault(property.name + '-play-state', property, configuration);
-  var name = _wrapDefault(property.name + '-name', property, configuration);
-  var components = [duration, timing, delay, iteration, direction, fill, play, name];
-  var values = property.value;
-  var value;
-  var durationSet = false;
-  var timingSet = false;
-  var delaySet = false;
-  var iterationSet = false;
-  var directionSet = false;
-  var fillSet = false;
-  var playSet = false;
-  var nameSet = false;
-  var i;
-  var l;
-
-  if (property.value.length == 1 && property.value[0][1] == 'inherit') {
-    // eslint-disable-next-line max-len
-    duration.value = timing.value = delay.value = iteration.value = direction.value = fill.value = play.value = name.value = property.value;
-    return components;
-  }
-
-  if (values.length > 1 && _anyIsInherit(values)) {
-    throw new InvalidPropertyError('Invalid animation values at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
-  }
-
-  for (i = 0, l = values.length; i < l; i++) {
-    value = values[i];
-
-    if (validator.isTime(value[1]) && !durationSet) {
-      duration.value = [value];
-      durationSet = true;
-    } else if (validator.isTime(value[1]) && !delaySet) {
-      delay.value = [value];
-      delaySet = true;
-    } else if ((validator.isGlobal(value[1]) || validator.isTimingFunction(value[1])) && !timingSet) {
-      timing.value = [value];
-      timingSet = true;
-    } else if ((validator.isAnimationIterationCountKeyword(value[1])
-      || validator.isPositiveNumber(value[1]))
-      && !iterationSet) {
-      iteration.value = [value];
-      iterationSet = true;
-    } else if (validator.isAnimationDirectionKeyword(value[1]) && !directionSet) {
-      direction.value = [value];
-      directionSet = true;
-    } else if (validator.isAnimationFillModeKeyword(value[1]) && !fillSet) {
-      fill.value = [value];
-      fillSet = true;
-    } else if (validator.isAnimationPlayStateKeyword(value[1]) && !playSet) {
-      play.value = [value];
-      playSet = true;
-    } else if ((validator.isAnimationNameKeyword(value[1]) || validator.isIdentifier(value[1])) && !nameSet) {
-      name.value = [value];
-      nameSet = true;
-    } else {
-      throw new InvalidPropertyError('Invalid animation value at ' + formatPosition(value[2][0]) + '. Ignoring.');
-    }
-  }
-
-  return components;
-}
-
-function background(property, configuration, validator) {
-  var image = _wrapDefault('background-image', property, configuration);
-  var position = _wrapDefault('background-position', property, configuration);
-  var size = _wrapDefault('background-size', property, configuration);
-  var repeat = _wrapDefault('background-repeat', property, configuration);
-  var attachment = _wrapDefault('background-attachment', property, configuration);
-  var origin = _wrapDefault('background-origin', property, configuration);
-  var clip = _wrapDefault('background-clip', property, configuration);
-  var color = _wrapDefault('background-color', property, configuration);
-  var components = [image, position, size, repeat, attachment, origin, clip, color];
-  var values = property.value;
-
-  var positionSet = false;
-  var clipSet = false;
-  var originSet = false;
-  var repeatSet = false;
-
-  var anyValueSet = false;
-
-  if (property.value.length == 1 && property.value[0][1] == 'inherit') {
-    // NOTE: 'inherit' is not a valid value for background-attachment
-    color.value = image.value = repeat.value = position.value = size.value = origin.value = clip.value = property.value;
-    return components;
-  }
-
-  if (property.value.length == 1 && property.value[0][1] == '0 0') {
-    return components;
-  }
-
-  for (var i = values.length - 1; i >= 0; i--) {
-    var value = values[i];
-
-    if (validator.isBackgroundAttachmentKeyword(value[1])) {
-      attachment.value = [value];
-      anyValueSet = true;
-    } else if (validator.isBackgroundClipKeyword(value[1]) || validator.isBackgroundOriginKeyword(value[1])) {
-      if (clipSet) {
-        origin.value = [value];
-        originSet = true;
-      } else {
-        clip.value = [value];
-        clipSet = true;
-      }
-      anyValueSet = true;
-    } else if (validator.isBackgroundRepeatKeyword(value[1])) {
-      if (repeatSet) {
-        repeat.value.unshift(value);
-      } else {
-        repeat.value = [value];
-        repeatSet = true;
-      }
-      anyValueSet = true;
-    } else if (validator.isBackgroundPositionKeyword(value[1])
-    || validator.isBackgroundSizeKeyword(value[1])
-    || validator.isUnit(value[1])
-    || validator.isDynamicUnit(value[1])) {
-      if (i > 0) {
-        var previousValue = values[i - 1];
-
-        if (previousValue[1] == Marker.FORWARD_SLASH) {
-          size.value = [value];
-        } else if (i > 1 && values[i - 2][1] == Marker.FORWARD_SLASH) {
-          size.value = [previousValue, value];
-          i -= 2;
-        } else {
-          if (!positionSet) { position.value = []; }
-
-          position.value.unshift(value);
-          positionSet = true;
-        }
-      } else {
-        if (!positionSet) { position.value = []; }
-
-        position.value.unshift(value);
-        positionSet = true;
-      }
-      anyValueSet = true;
-    } else if ((color.value[0][1] == configuration[color.name].defaultValue || color.value[0][1] == 'none') && (validator.isColor(value[1]) || validator.isPrefixed(value[1]))) {
-      color.value = [value];
-      anyValueSet = true;
-    } else if (validator.isUrl(value[1]) || validator.isFunction(value[1])) {
-      image.value = [value];
-      anyValueSet = true;
-    }
-  }
-
-  if (clipSet && !originSet) { origin.value = clip.value.slice(0); }
-
-  if (!anyValueSet) {
-    throw new InvalidPropertyError('Invalid background value at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
-  }
-
-  return components;
-}
-
-function borderRadius(property, configuration) {
-  var values = property.value;
-  var splitAt = -1;
-
-  for (var i = 0, l = values.length; i < l; i++) {
-    if (values[i][1] == Marker.FORWARD_SLASH) {
-      splitAt = i;
-      break;
-    }
-  }
-
-  if (splitAt === 0 || splitAt === values.length - 1) {
-    throw new InvalidPropertyError('Invalid border-radius value at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
-  }
-
-  var target = _wrapDefault(property.name, property, configuration);
-  target.value = splitAt > -1
-    ? values.slice(0, splitAt)
-    : values.slice(0);
-  target.components = fourValues(target, configuration);
-
-  var remainder = _wrapDefault(property.name, property, configuration);
-  remainder.value = splitAt > -1
-    ? values.slice(splitAt + 1)
-    : values.slice(0);
-  remainder.components = fourValues(remainder, configuration);
-
-  for (var j = 0; j < 4; j++) {
-    target.components[j].multiplex = true;
-    target.components[j].value = target.components[j].value.concat(remainder.components[j].value);
-  }
-
-  return target.components;
-}
-
-function font(property, configuration, validator) {
-  var style = _wrapDefault('font-style', property, configuration);
-  var variant = _wrapDefault('font-variant', property, configuration);
-  var weight = _wrapDefault('font-weight', property, configuration);
-  var stretch = _wrapDefault('font-stretch', property, configuration);
-  var size = _wrapDefault('font-size', property, configuration);
-  var height = _wrapDefault('line-height', property, configuration);
-  var family = _wrapDefault('font-family', property, configuration);
-  var components = [style, variant, weight, stretch, size, height, family];
-  var values = property.value;
-  var fuzzyMatched = 4; // style, variant, weight, and stretch
-  var index = 0;
-  var isStretchSet = false;
-  var isStretchValid;
-  var isStyleSet = false;
-  var isStyleValid;
-  var isVariantSet = false;
-  var isVariantValid;
-  var isWeightSet = false;
-  var isWeightValid;
-  var appendableFamilyName = false;
-
-  if (!values[index]) {
-    throw new InvalidPropertyError('Missing font values at ' + formatPosition(property.all[property.position][1][2][0]) + '. Ignoring.');
-  }
-
-  if (values.length == 1 && values[0][1] == 'inherit') {
-    style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values;
-    return components;
-  }
-
-  if (values.length == 1
-    && (validator.isFontKeyword(values[0][1])
-    || validator.isGlobal(values[0][1])
-    || validator.isPrefixed(values[0][1]))
-  ) {
-    values[0][1] = Marker.INTERNAL + values[0][1];
-    style.value = variant.value = weight.value = stretch.value = size.value = height.value = family.value = values;
-    return components;
-  }
-
-  if (values.length < 2 || !_anyIsFontSize(values, validator) || !_anyIsFontFamily(values, validator)) {
-    throw new InvalidPropertyError('Invalid font values at ' + formatPosition(property.all[property.position][1][2][0]) + '. Ignoring.');
-  }
-
-  if (values.length > 1 && _anyIsInherit(values)) {
-    throw new InvalidPropertyError('Invalid font values at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
-  }
-
-  // fuzzy match style, variant, weight, and stretch on first elements
-  while (index < fuzzyMatched) {
-    isStretchValid = validator.isFontStretchKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
-    isStyleValid = validator.isFontStyleKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
-    isVariantValid = validator.isFontVariantKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
-    isWeightValid = validator.isFontWeightKeyword(values[index][1]) || validator.isGlobal(values[index][1]);
-
-    if (isStyleValid && !isStyleSet) {
-      style.value = [values[index]];
-      isStyleSet = true;
-    } else if (isVariantValid && !isVariantSet) {
-      variant.value = [values[index]];
-      isVariantSet = true;
-    } else if (isWeightValid && !isWeightSet) {
-      weight.value = [values[index]];
-      isWeightSet = true;
-    } else if (isStretchValid && !isStretchSet) {
-      stretch.value = [values[index]];
-      isStretchSet = true;
-    } else if (isStyleValid
-      && isStyleSet
-      || isVariantValid
-      && isVariantSet
-      || isWeightValid
-      && isWeightSet
-      || isStretchValid
-      && isStretchSet) {
-      throw new InvalidPropertyError('Invalid font style / variant / weight / stretch value at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
-    } else {
-      break;
-    }
-
-    index++;
-  }
-
-  // now comes font-size ...
-  if (validator.isFontSizeKeyword(values[index][1])
-    || validator.isUnit(values[index][1])
-    && !validator.isDynamicUnit(values[index][1])) {
-    size.value = [values[index]];
-    index++;
-  } else {
-    throw new InvalidPropertyError('Missing font size at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
-  }
-
-  if (!values[index]) {
-    throw new InvalidPropertyError('Missing font family at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
-  }
-
-  // ... and perhaps line-height
-  if (values[index]
-    && values[index][1] == Marker.FORWARD_SLASH
-    && values[index + 1]
-    && (validator.isLineHeightKeyword(values[index + 1][1])
-    || validator.isUnit(values[index + 1][1])
-    || validator.isNumber(values[index + 1][1]))) {
-    height.value = [values[index + 1]];
-    index++;
-    index++;
-  }
-
-  // ... and whatever comes next is font-family
-  family.value = [];
-
-  while (values[index]) {
-    if (values[index][1] == Marker.COMMA) {
-      appendableFamilyName = false;
-    } else {
-      if (appendableFamilyName) {
-        family.value[family.value.length - 1][1] += Marker.SPACE + values[index][1];
-      } else {
-        family.value.push(values[index]);
-      }
-
-      appendableFamilyName = true;
-    }
-
-    index++;
-  }
-
-  if (family.value.length === 0) {
-    throw new InvalidPropertyError('Missing font family at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
-  }
-
-  return components;
-}
-
-function _anyIsFontSize(values, validator) {
-  var value;
-  var i, l;
-
-  for (i = 0, l = values.length; i < l; i++) {
-    value = values[i];
-
-    if (validator.isFontSizeKeyword(value[1])
-      || validator.isUnit(value[1])
-      && !validator.isDynamicUnit(value[1])
-      || validator.isFunction(value[1])) {
-      return true;
-    }
-  }
-
-  return false;
-}
-
-function _anyIsFontFamily(values, validator) {
-  var value;
-  var i, l;
-
-  for (i = 0, l = values.length; i < l; i++) {
-    value = values[i];
-
-    if (validator.isIdentifier(value[1]) || validator.isQuotedText(value[1])) {
-      return true;
-    }
-  }
-
-  return false;
-}
-
-function fourValues(property, configuration) {
-  var componentNames = configuration[property.name].components;
-  var components = [];
-  var value = property.value;
-
-  if (value.length < 1) { return []; }
-
-  if (value.length < 2) { value[1] = value[0].slice(0); }
-  if (value.length < 3) { value[2] = value[0].slice(0); }
-  if (value.length < 4) { value[3] = value[1].slice(0); }
-
-  for (var i = componentNames.length - 1; i >= 0; i--) {
-    var component = wrapSingle([
-      Token.PROPERTY,
-      [Token.PROPERTY_NAME, componentNames[i]]
-    ]);
-    component.value = [value[i]];
-    components.unshift(component);
-  }
-
-  return components;
-}
-
-function multiplex(splitWith) {
-  return function(property, configuration, validator) {
-    var splitsAt = [];
-    var values = property.value;
-    var i, j, l, m;
-
-    // find split commas
-    for (i = 0, l = values.length; i < l; i++) {
-      if (values[i][1] == ',') { splitsAt.push(i); }
-    }
-
-    if (splitsAt.length === 0) { return splitWith(property, configuration, validator); }
-
-    var splitComponents = [];
-
-    // split over commas, and into components
-    for (i = 0, l = splitsAt.length; i <= l; i++) {
-      var from = i === 0 ? 0 : splitsAt[i - 1] + 1;
-      var to = i < l ? splitsAt[i] : values.length;
-
-      var _property = _wrapDefault(property.name, property, configuration);
-      _property.value = values.slice(from, to);
-
-      if (_property.value.length > 0) {
-        splitComponents.push(splitWith(_property, configuration, validator));
-      }
-    }
-
-    var components = splitComponents[0];
-
-    // group component values from each split
-    for (i = 0, l = components.length; i < l; i++) {
-      components[i].multiplex = true;
-
-      for (j = 1, m = splitComponents.length; j < m; j++) {
-        components[i].value.push([Token.PROPERTY_VALUE, Marker.COMMA]);
-        Array.prototype.push.apply(components[i].value, splitComponents[j][i].value);
-      }
-    }
-
-    return components;
-  };
-}
-
-function listStyle(property, configuration, validator) {
-  var type = _wrapDefault('list-style-type', property, configuration);
-  var position = _wrapDefault('list-style-position', property, configuration);
-  var image = _wrapDefault('list-style-image', property, configuration);
-  var components = [type, position, image];
-
-  if (property.value.length == 1 && property.value[0][1] == 'inherit') {
-    type.value = position.value = image.value = [property.value[0]];
-    return components;
-  }
-
-  var values = property.value.slice(0);
-  var total = values.length;
-  var index = 0;
-
-  // `image` first...
-  for (index = 0, total = values.length; index < total; index++) {
-    if (validator.isUrl(values[index][1]) || values[index][1] == '0') {
-      image.value = [values[index]];
-      values.splice(index, 1);
-      break;
-    }
-  }
-
-  // ... then `position`
-  for (index = 0, total = values.length; index < total; index++) {
-    if (validator.isListStylePositionKeyword(values[index][1])) {
-      position.value = [values[index]];
-      values.splice(index, 1);
-      break;
-    }
-  }
-
-  // ... and what's left is a `type`
-  if (values.length > 0 && (validator.isListStyleTypeKeyword(values[0][1]) || validator.isIdentifier(values[0][1]))) {
-    type.value = [values[0]];
-  }
-
-  return components;
-}
-
-function transition(property, configuration, validator) {
-  var prop = _wrapDefault(property.name + '-property', property, configuration);
-  var duration = _wrapDefault(property.name + '-duration', property, configuration);
-  var timing = _wrapDefault(property.name + '-timing-function', property, configuration);
-  var delay = _wrapDefault(property.name + '-delay', property, configuration);
-  var components = [prop, duration, timing, delay];
-  var values = property.value;
-  var value;
-  var durationSet = false;
-  var delaySet = false;
-  var propSet = false;
-  var timingSet = false;
-  var i;
-  var l;
-
-  if (property.value.length == 1 && property.value[0][1] == 'inherit') {
-    prop.value = duration.value = timing.value = delay.value = property.value;
-    return components;
-  }
-
-  if (values.length > 1 && _anyIsInherit(values)) {
-    throw new InvalidPropertyError('Invalid animation values at ' + formatPosition(values[0][2][0]) + '. Ignoring.');
-  }
-
-  for (i = 0, l = values.length; i < l; i++) {
-    value = values[i];
-
-    if (validator.isTime(value[1]) && !durationSet) {
-      duration.value = [value];
-      durationSet = true;
-    } else if (validator.isTime(value[1]) && !delaySet) {
-      delay.value = [value];
-      delaySet = true;
-    } else if ((validator.isGlobal(value[1]) || validator.isTimingFunction(value[1])) && !timingSet) {
-      timing.value = [value];
-      timingSet = true;
-    } else if (validator.isIdentifier(value[1]) && !propSet) {
-      prop.value = [value];
-      propSet = true;
-    } else {
-      throw new InvalidPropertyError('Invalid animation value at ' + formatPosition(value[2][0]) + '. Ignoring.');
-    }
-  }
-
-  return components;
-}
-
-function widthStyleColor(property, configuration, validator) {
-  var descriptor = configuration[property.name];
-  var components = [
-    _wrapDefault(descriptor.components[0], property, configuration),
-    _wrapDefault(descriptor.components[1], property, configuration),
-    _wrapDefault(descriptor.components[2], property, configuration)
-  ];
-  var color, style, width;
-
-  for (var i = 0; i < 3; i++) {
-    var component = components[i];
-
-    if (component.name.indexOf('color') > 0) { color = component; } else if (component.name.indexOf('style') > 0) { style = component; } else { width = component; }
-  }
-
-  if ((property.value.length == 1 && property.value[0][1] == 'inherit')
-      || (property.value.length == 3 && property.value[0][1] == 'inherit' && property.value[1][1] == 'inherit' && property.value[2][1] == 'inherit')) {
-    color.value = style.value = width.value = [property.value[0]];
-    return components;
-  }
-
-  var values = property.value.slice(0);
-  var match, matches;
-
-  // NOTE: usually users don't follow the required order of parts in this shorthand,
-  // so we'll try to parse it caring as little about order as possible
-
-  if (values.length > 0) {
-    matches = values.filter(_widthFilter(validator));
-    match = matches.length > 1 && (matches[0][1] == 'none' || matches[0][1] == 'auto') ? matches[1] : matches[0];
-    if (match) {
-      width.value = [match];
-      values.splice(values.indexOf(match), 1);
-    }
-  }
-
-  if (values.length > 0) {
-    match = values.filter(_styleFilter(validator))[0];
-    if (match) {
-      style.value = [match];
-      values.splice(values.indexOf(match), 1);
-    }
-  }
-
-  if (values.length > 0) {
-    match = values.filter(_colorFilter(validator))[0];
-    if (match) {
-      color.value = [match];
-      values.splice(values.indexOf(match), 1);
-    }
-  }
-
-  return components;
-}
-
-module.exports = {
-  animation: animation,
-  background: background,
-  border: widthStyleColor,
-  borderRadius: borderRadius,
-  font: font,
-  fourValues: fourValues,
-  listStyle: listStyle,
-  multiplex: multiplex,
-  outline: widthStyleColor,
-  transition: transition
-};
-
-
-/***/ }),
-
-/***/ 69638:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var understandable = __webpack_require__(16112);
-
-function animationIterationCount(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true)
-    && !(validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2))) {
-    return false;
-  } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-    return true;
-  }
-
-  return validator.isAnimationIterationCountKeyword(value2) || validator.isPositiveNumber(value2);
-}
-
-function animationName(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true)
-    && !(validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2))) {
-    return false;
-  } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-    return true;
-  }
-
-  return validator.isAnimationNameKeyword(value2) || validator.isIdentifier(value2);
-}
-
-function areSameFunction(validator, value1, value2) {
-  if (!validator.isFunction(value1) || !validator.isFunction(value2)) {
-    return false;
-  }
-
-  var function1Name = value1.substring(0, value1.indexOf('('));
-  var function2Name = value2.substring(0, value2.indexOf('('));
-
-  var function1Value = value1.substring(function1Name.length + 1, value1.length - 1);
-  var function2Value = value2.substring(function2Name.length + 1, value2.length - 1);
-
-  if (validator.isFunction(function1Value) || validator.isFunction(function2Value)) {
-    return function1Name === function2Name && areSameFunction(validator, function1Value, function2Value);
-  }
-  return function1Name === function2Name;
-}
-
-function backgroundPosition(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true)
-    && !(validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2))) {
-    return false;
-  } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-    return true;
-  } if (validator.isBackgroundPositionKeyword(value2) || validator.isGlobal(value2)) {
-    return true;
-  }
-
-  return unit(validator, value1, value2);
-}
-
-function backgroundSize(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true)
-    && !(validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2))) {
-    return false;
-  } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-    return true;
-  } if (validator.isBackgroundSizeKeyword(value2) || validator.isGlobal(value2)) {
-    return true;
-  }
-
-  return unit(validator, value1, value2);
-}
-
-function color(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true) && !validator.isColor(value2)) {
-    return false;
-  } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-    return true;
-  } if (!validator.colorOpacity && (validator.isRgbColor(value1) || validator.isHslColor(value1))) {
-    return false;
-  } if (!validator.colorOpacity && (validator.isRgbColor(value2) || validator.isHslColor(value2))) {
-    return false;
-  } if (!validator.colorHexAlpha && (validator.isHexAlphaColor(value1) || validator.isHexAlphaColor(value2))) {
-    return false;
-  } if (validator.isColor(value1) && validator.isColor(value2)) {
-    return true;
-  }
-
-  return sameFunctionOrValue(validator, value1, value2);
-}
-
-function components(overrideCheckers) {
-  return function(validator, value1, value2, position) {
-    return overrideCheckers[position](validator, value1, value2);
-  };
-}
-
-function fontFamily(validator, value1, value2) {
-  return understandable(validator, value1, value2, 0, true);
-}
-
-function image(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true) && !validator.isImage(value2)) {
-    return false;
-  } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-    return true;
-  } if (validator.isImage(value2)) {
-    return true;
-  } if (validator.isImage(value1)) {
-    return false;
-  }
-
-  return sameFunctionOrValue(validator, value1, value2);
-}
-
-function keyword(propertyName) {
-  return function(validator, value1, value2) {
-    if (!understandable(validator, value1, value2, 0, true) && !validator.isKeyword(propertyName)(value2)) {
-      return false;
-    } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-      return true;
-    }
-
-    return validator.isKeyword(propertyName)(value2);
-  };
-}
-
-function keywordWithGlobal(propertyName) {
-  return function(validator, value1, value2) {
-    if (!understandable(validator, value1, value2, 0, true)
-      && !(validator.isKeyword(propertyName)(value2) || validator.isGlobal(value2))) {
-      return false;
-    } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-      return true;
-    }
-
-    return validator.isKeyword(propertyName)(value2) || validator.isGlobal(value2);
-  };
-}
-
-function propertyName(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true) && !validator.isIdentifier(value2)) {
-    return false;
-  } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-    return true;
-  }
-
-  return validator.isIdentifier(value2);
-}
-
-function sameFunctionOrValue(validator, value1, value2) {
-  return areSameFunction(validator, value1, value2)
-    ? true
-    : value1 === value2;
-}
-
-function textShadow(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true)
-    && !(validator.isUnit(value2)
-    || validator.isColor(value2)
-    || validator.isGlobal(value2))) {
-    return false;
-  } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-    return true;
-  }
-
-  return validator.isUnit(value2) || validator.isColor(value2) || validator.isGlobal(value2);
-}
-
-function time(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true) && !validator.isTime(value2)) {
-    return false;
-  } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-    return true;
-  } if (validator.isTime(value1) && !validator.isTime(value2)) {
-    return false;
-  } if (validator.isTime(value2)) {
-    return true;
-  } if (validator.isTime(value1)) {
-    return false;
-  } if (validator.isFunction(value1)
-    && !validator.isPrefixed(value1)
-    && validator.isFunction(value2)
-    && !validator.isPrefixed(value2)) {
-    return true;
-  }
-
-  return sameFunctionOrValue(validator, value1, value2);
-}
-
-function timingFunction(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true)
-    && !(validator.isTimingFunction(value2) || validator.isGlobal(value2))) {
-    return false;
-  } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-    return true;
-  }
-
-  return validator.isTimingFunction(value2) || validator.isGlobal(value2);
-}
-
-function unit(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true) && !validator.isUnit(value2)) {
-    return false;
-  } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-    return true;
-  } if (validator.isUnit(value1) && !validator.isUnit(value2)) {
-    return false;
-  } if (validator.isUnit(value2)) {
-    return true;
-  } if (validator.isUnit(value1)) {
-    return false;
-  } if (validator.isFunction(value1)
-    && !validator.isPrefixed(value1)
-    && validator.isFunction(value2)
-    && !validator.isPrefixed(value2)) {
-    return true;
-  }
-
-  return sameFunctionOrValue(validator, value1, value2);
-}
-
-function unitOrKeywordWithGlobal(propertyName) {
-  var byKeyword = keywordWithGlobal(propertyName);
-
-  return function(validator, value1, value2) {
-    return unit(validator, value1, value2) || byKeyword(validator, value1, value2);
-  };
-}
-
-function unitOrNumber(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true)
-    && !(validator.isUnit(value2)
-    || validator.isNumber(value2))) {
-    return false;
-  } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-    return true;
-  } if ((validator.isUnit(value1)
-    || validator.isNumber(value1))
-    && !(validator.isUnit(value2)
-    || validator.isNumber(value2))) {
-    return false;
-  } if (validator.isUnit(value2) || validator.isNumber(value2)) {
-    return true;
-  } if (validator.isUnit(value1) || validator.isNumber(value1)) {
-    return false;
-  } if (validator.isFunction(value1)
-    && !validator.isPrefixed(value1)
-    && validator.isFunction(value2)
-    && !validator.isPrefixed(value2)) {
-    return true;
-  }
-
-  return sameFunctionOrValue(validator, value1, value2);
-}
-
-function zIndex(validator, value1, value2) {
-  if (!understandable(validator, value1, value2, 0, true) && !validator.isZIndex(value2)) {
-    return false;
-  } if (validator.isVariable(value1) && validator.isVariable(value2)) {
-    return true;
-  }
-
-  return validator.isZIndex(value2);
-}
-
-module.exports = {
-  generic: {
-    color: color,
-    components: components,
-    image: image,
-    propertyName: propertyName,
-    time: time,
-    timingFunction: timingFunction,
-    unit: unit,
-    unitOrNumber: unitOrNumber
-  },
-  property: {
-    animationDirection: keywordWithGlobal('animation-direction'),
-    animationFillMode: keyword('animation-fill-mode'),
-    animationIterationCount: animationIterationCount,
-    animationName: animationName,
-    animationPlayState: keywordWithGlobal('animation-play-state'),
-    backgroundAttachment: keyword('background-attachment'),
-    backgroundClip: keywordWithGlobal('background-clip'),
-    backgroundOrigin: keyword('background-origin'),
-    backgroundPosition: backgroundPosition,
-    backgroundRepeat: keyword('background-repeat'),
-    backgroundSize: backgroundSize,
-    bottom: unitOrKeywordWithGlobal('bottom'),
-    borderCollapse: keyword('border-collapse'),
-    borderStyle: keywordWithGlobal('*-style'),
-    clear: keywordWithGlobal('clear'),
-    cursor: keywordWithGlobal('cursor'),
-    display: keywordWithGlobal('display'),
-    float: keywordWithGlobal('float'),
-    left: unitOrKeywordWithGlobal('left'),
-    fontFamily: fontFamily,
-    fontStretch: keywordWithGlobal('font-stretch'),
-    fontStyle: keywordWithGlobal('font-style'),
-    fontVariant: keywordWithGlobal('font-variant'),
-    fontWeight: keywordWithGlobal('font-weight'),
-    listStyleType: keywordWithGlobal('list-style-type'),
-    listStylePosition: keywordWithGlobal('list-style-position'),
-    outlineStyle: keywordWithGlobal('*-style'),
-    overflow: keywordWithGlobal('overflow'),
-    position: keywordWithGlobal('position'),
-    right: unitOrKeywordWithGlobal('right'),
-    textAlign: keywordWithGlobal('text-align'),
-    textDecoration: keywordWithGlobal('text-decoration'),
-    textOverflow: keywordWithGlobal('text-overflow'),
-    textShadow: textShadow,
-    top: unitOrKeywordWithGlobal('top'),
-    transform: sameFunctionOrValue,
-    verticalAlign: unitOrKeywordWithGlobal('vertical-align'),
-    visibility: keywordWithGlobal('visibility'),
-    whiteSpace: keywordWithGlobal('white-space'),
-    zIndex: zIndex
-  }
-};
-
-
-/***/ }),
-
-/***/ 16112:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var sameVendorPrefixes = (__webpack_require__(21200).same);
-
-function understandable(validator, value1, value2, _position, isPaired) {
-  if (!sameVendorPrefixes(value1, value2)) {
-    return false;
-  }
-
-  if (isPaired && validator.isVariable(value1) !== validator.isVariable(value2)) {
-    return false;
-  }
-
-  return true;
-}
-
-module.exports = understandable;
-
-
-/***/ }),
-
-/***/ 64862:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var shallowClone = (__webpack_require__(48315).shallow);
-
-var Token = __webpack_require__(44633);
-var Marker = __webpack_require__(53820);
-
-function isInheritOnly(values) {
-  for (var i = 0, l = values.length; i < l; i++) {
-    var value = values[i][1];
-
-    if (value != 'inherit' && value != Marker.COMMA && value != Marker.FORWARD_SLASH) { return false; }
-  }
-
-  return true;
-}
-
-function background(property, configuration, lastInMultiplex) {
-  var components = property.components;
-  var restored = [];
-  var needsOne, needsBoth;
-
-  function restoreValue(component) {
-    Array.prototype.unshift.apply(restored, component.value);
-  }
-
-  function isDefaultValue(component) {
-    var descriptor = configuration[component.name];
-
-    if (descriptor.doubleValues && descriptor.defaultValue.length == 1) {
-      return component.value[0][1] == descriptor.defaultValue[0]
-        && (component.value[1]
-          ? component.value[1][1] == descriptor.defaultValue[0]
-          : true);
-    } if (descriptor.doubleValues && descriptor.defaultValue.length != 1) {
-      return component.value[0][1] == descriptor.defaultValue[0]
-      && ((component.value[1] ? component.value[1][1] : component.value[0][1])
-        == descriptor.defaultValue[1]);
-    }
-    return component.value[0][1] == descriptor.defaultValue;
-  }
-
-  for (var i = components.length - 1; i >= 0; i--) {
-    var component = components[i];
-    var isDefault = isDefaultValue(component);
-
-    if (component.name == 'background-clip') {
-      var originComponent = components[i - 1];
-      var isOriginDefault = isDefaultValue(originComponent);
-
-      needsOne = component.value[0][1] == originComponent.value[0][1];
-
-      needsBoth = !needsOne && (
-        (isOriginDefault && !isDefault)
-        || (!isOriginDefault && !isDefault)
-        || (!isOriginDefault && isDefault && component.value[0][1] != originComponent.value[0][1]));
-
-      if (needsOne) {
-        restoreValue(originComponent);
-      } else if (needsBoth) {
-        restoreValue(component);
-        restoreValue(originComponent);
-      }
-
-      i--;
-    } else if (component.name == 'background-size') {
-      var positionComponent = components[i - 1];
-      var isPositionDefault = isDefaultValue(positionComponent);
-
-      needsOne = !isPositionDefault && isDefault;
-
-      needsBoth = !needsOne
-        && (isPositionDefault && !isDefault || !isPositionDefault && !isDefault);
-
-      if (needsOne) {
-        restoreValue(positionComponent);
-      } else if (needsBoth) {
-        restoreValue(component);
-        restored.unshift([Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]);
-        restoreValue(positionComponent);
-      } else if (positionComponent.value.length == 1) {
-        restoreValue(positionComponent);
-      }
-
-      i--;
-    } else {
-      if (isDefault || configuration[component.name].multiplexLastOnly && !lastInMultiplex) { continue; }
-
-      restoreValue(component);
-    }
-  }
-
-  if (restored.length === 0 && property.value.length == 1 && property.value[0][1] == '0') { restored.push(property.value[0]); }
-
-  if (restored.length === 0) { restored.push([Token.PROPERTY_VALUE, configuration[property.name].defaultValue]); }
-
-  if (isInheritOnly(restored)) { return [restored[0]]; }
-
-  return restored;
-}
-
-function borderRadius(property) {
-  if (property.multiplex) {
-    var horizontal = shallowClone(property);
-    var vertical = shallowClone(property);
-
-    for (var i = 0; i < 4; i++) {
-      var component = property.components[i];
-
-      var horizontalComponent = shallowClone(property);
-      horizontalComponent.value = [component.value[0]];
-      horizontal.components.push(horizontalComponent);
-
-      var verticalComponent = shallowClone(property);
-      // FIXME: only shorthand compactor (see breakup#borderRadius) knows that border radius
-      // longhands have two values, whereas tokenizer does not care about populating 2nd value
-      // if it's missing, hence this fallback
-      verticalComponent.value = [component.value[1] || component.value[0]];
-      vertical.components.push(verticalComponent);
-    }
-
-    var horizontalValues = fourValues(horizontal);
-    var verticalValues = fourValues(vertical);
-
-    if (horizontalValues.length == verticalValues.length
-        && horizontalValues[0][1] == verticalValues[0][1]
-        && (horizontalValues.length > 1 ? horizontalValues[1][1] == verticalValues[1][1] : true)
-        && (horizontalValues.length > 2 ? horizontalValues[2][1] == verticalValues[2][1] : true)
-        && (horizontalValues.length > 3 ? horizontalValues[3][1] == verticalValues[3][1] : true)) {
-      return horizontalValues;
-    }
-    return horizontalValues.concat([[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]).concat(verticalValues);
-  }
-  return fourValues(property);
-}
-
-function font(property, configuration) {
-  var components = property.components;
-  var restored = [];
-  var component;
-  var componentIndex = 0;
-  var fontFamilyIndex = 0;
-
-  if (property.value[0][1].indexOf(Marker.INTERNAL) === 0) {
-    property.value[0][1] = property.value[0][1].substring(Marker.INTERNAL.length);
-    return property.value;
-  }
-
-  // first four components are optional
-  while (componentIndex < 4) {
-    component = components[componentIndex];
-
-    if (component.value[0][1] != configuration[component.name].defaultValue) {
-      Array.prototype.push.apply(restored, component.value);
-    }
-
-    componentIndex++;
-  }
-
-  // then comes font-size
-  Array.prototype.push.apply(restored, components[componentIndex].value);
-  componentIndex++;
-
-  // then may come line-height
-  if (components[componentIndex].value[0][1] != configuration[components[componentIndex].name].defaultValue) {
-    Array.prototype.push.apply(restored, [[Token.PROPERTY_VALUE, Marker.FORWARD_SLASH]]);
-    Array.prototype.push.apply(restored, components[componentIndex].value);
-  }
-
-  componentIndex++;
-
-  // then comes font-family
-  while (components[componentIndex].value[fontFamilyIndex]) {
-    restored.push(components[componentIndex].value[fontFamilyIndex]);
-
-    if (components[componentIndex].value[fontFamilyIndex + 1]) {
-      restored.push([Token.PROPERTY_VALUE, Marker.COMMA]);
-    }
-
-    fontFamilyIndex++;
-  }
-
-  if (isInheritOnly(restored)) {
-    return [restored[0]];
-  }
-
-  return restored;
-}
-
-function fourValues(property) {
-  var components = property.components;
-  var value1 = components[0].value[0];
-  var value2 = components[1].value[0];
-  var value3 = components[2].value[0];
-  var value4 = components[3].value[0];
-
-  if (value1[1] == value2[1] && value1[1] == value3[1] && value1[1] == value4[1]) {
-    return [value1];
-  } if (value1[1] == value3[1] && value2[1] == value4[1]) {
-    return [value1, value2];
-  } if (value2[1] == value4[1]) {
-    return [value1, value2, value3];
-  }
-  return [value1, value2, value3, value4];
-}
-
-function multiplex(restoreWith) {
-  return function(property, configuration) {
-    if (!property.multiplex) { return restoreWith(property, configuration, true); }
-
-    var multiplexSize = 0;
-    var restored = [];
-    var componentMultiplexSoFar = {};
-    var i, l;
-
-    // At this point we don't know what's the multiplex size, e.g. how many background layers are there
-    for (i = 0, l = property.components[0].value.length; i < l; i++) {
-      if (property.components[0].value[i][1] == Marker.COMMA) { multiplexSize++; }
-    }
-
-    for (i = 0; i <= multiplexSize; i++) {
-      var _property = shallowClone(property);
-
-      // We split multiplex into parts and restore them one by one
-      for (var j = 0, m = property.components.length; j < m; j++) {
-        var componentToClone = property.components[j];
-        var _component = shallowClone(componentToClone);
-        _property.components.push(_component);
-
-        // The trick is some properties has more than one value, so we iterate over values looking for
-        // a multiplex separator - a comma
-        for (var k = componentMultiplexSoFar[_component.name] || 0, n = componentToClone.value.length; k < n; k++) {
-          if (componentToClone.value[k][1] == Marker.COMMA) {
-            componentMultiplexSoFar[_component.name] = k + 1;
-            break;
-          }
-
-          _component.value.push(componentToClone.value[k]);
-        }
-      }
-
-      // No we can restore shorthand value
-      var lastInMultiplex = i == multiplexSize;
-      var _restored = restoreWith(_property, configuration, lastInMultiplex);
-      Array.prototype.push.apply(restored, _restored);
-
-      if (i < multiplexSize) { restored.push([Token.PROPERTY_VALUE, Marker.COMMA]); }
-    }
-
-    return restored;
-  };
-}
-
-function withoutDefaults(property, configuration) {
-  var components = property.components;
-  var restored = [];
-
-  for (var i = components.length - 1; i >= 0; i--) {
-    var component = components[i];
-    var descriptor = configuration[component.name];
-
-    if (component.value[0][1] != descriptor.defaultValue || ('keepUnlessDefault' in descriptor) && !isDefault(components, configuration, descriptor.keepUnlessDefault)) {
-      restored.unshift(component.value[0]);
-    }
-  }
-
-  if (restored.length === 0) { restored.push([Token.PROPERTY_VALUE, configuration[property.name].defaultValue]); }
-
-  if (isInheritOnly(restored)) { return [restored[0]]; }
-
-  return restored;
-}
-
-function isDefault(components, configuration, propertyName) {
-  var component;
-  var i, l;
-
-  for (i = 0, l = components.length; i < l; i++) {
-    component = components[i];
-
-    if (component.name == propertyName && component.value[0][1] == configuration[propertyName].defaultValue) {
-      return true;
-    }
-  }
-
-  return false;
-}
-
-module.exports = {
-  background: background,
-  borderRadius: borderRadius,
-  font: font,
-  fourValues: fourValues,
-  multiplex: multiplex,
-  withoutDefaults: withoutDefaults
-};
-
-
-/***/ }),
-
-/***/ 82878:
-/***/ ((module) => {
-
-var Hack = {
-  ASTERISK: 'asterisk',
-  BANG: 'bang',
-  BACKSLASH: 'backslash',
-  UNDERSCORE: 'underscore'
-};
-
-module.exports = Hack;
-
-
-/***/ }),
-
-/***/ 5942:
-/***/ ((module) => {
-
-function InvalidPropertyError(message) {
-  this.name = 'InvalidPropertyError';
-  this.message = message;
-  this.stack = (new Error()).stack;
-}
-
-InvalidPropertyError.prototype = Object.create(Error.prototype);
-InvalidPropertyError.prototype.constructor = InvalidPropertyError;
-
-module.exports = InvalidPropertyError;
-
-
-/***/ }),
-
-/***/ 55303:
-/***/ ((module) => {
-
-function level0Optimize(tokens) {
-  // noop as level 0 means no optimizations!
-  return tokens;
-}
-
-module.exports = level0Optimize;
-
-
-/***/ }),
-
-/***/ 52991:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var sortSelectors = __webpack_require__(95646);
-var tidyRules = __webpack_require__(41568);
-var tidyBlock = __webpack_require__(76515);
-var tidyAtRule = __webpack_require__(61228);
-
-var Hack = __webpack_require__(82878);
-var removeUnused = __webpack_require__(556);
-var restoreFromOptimizing = __webpack_require__(32700);
-var wrapForOptimizing = (__webpack_require__(93684).all);
-
-var configuration = __webpack_require__(6058);
-var optimizers = __webpack_require__(75125);
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var Token = __webpack_require__(44633);
-var Marker = __webpack_require__(53820);
-
-var formatPosition = __webpack_require__(96187);
-
-var serializeRules = (__webpack_require__(73694).rules);
-
-var CHARSET_TOKEN = '@charset';
-var CHARSET_REGEXP = new RegExp('^' + CHARSET_TOKEN, 'i');
-
-var DEFAULT_ROUNDING_PRECISION = (__webpack_require__(1672).DEFAULT);
-
-var VARIABLE_PROPERTY_NAME_PATTERN = /^--\S+$/;
-var PROPERTY_NAME_PATTERN = /^(?:-chrome-|-[\w-]+\w|\w[\w-]+\w|\w{1,})$/;
-var IMPORT_PREFIX_PATTERN = /^@import/i;
-var URL_PREFIX_PATTERN = /^url\(/i;
-
-function startsAsUrl(value) {
-  return URL_PREFIX_PATTERN.test(value);
-}
-
-function isImport(token) {
-  return IMPORT_PREFIX_PATTERN.test(token[1]);
-}
-
-function isLegacyFilter(property) {
-  var value;
-
-  if (property.name == 'filter' || property.name == '-ms-filter') {
-    value = property.value[0][1];
-
-    return value.indexOf('progid') > -1
-      || value.indexOf('alpha') === 0
-      || value.indexOf('chroma') === 0;
-  }
-  return false;
-}
-
-function noop() {}
-
-function noopValueOptimizer(_name, value, _options) { return value; }
-
-function optimizeBody(rule, properties, context) {
-  var options = context.options;
-  var valueOptimizers;
-  var property, name, type, value;
-  var propertyToken;
-  var propertyOptimizer;
-  var serializedRule = serializeRules(rule);
-  var _properties = wrapForOptimizing(properties);
-  var pluginValueOptimizers = context.options.plugins.level1Value;
-  var pluginPropertyOptimizers = context.options.plugins.level1Property;
-  var isVariable;
-  var i, l;
-
-  for (i = 0, l = _properties.length; i < l; i++) {
-    var j, k, m, n;
-
-    property = _properties[i];
-    name = property.name;
-    propertyOptimizer = configuration[name] && configuration[name].propertyOptimizer || noop;
-    valueOptimizers = configuration[name] && configuration[name].valueOptimizers || [optimizers.whiteSpace];
-    isVariable = VARIABLE_PROPERTY_NAME_PATTERN.test(name);
-
-    if (isVariable) {
-      valueOptimizers = options.variableOptimizers.length > 0
-        ? options.variableOptimizers
-        : [optimizers.whiteSpace];
-    }
-
-    if (!isVariable && !PROPERTY_NAME_PATTERN.test(name)) {
-      propertyToken = property.all[property.position];
-      context.warnings.push('Invalid property name \'' + name + '\' at ' + formatPosition(propertyToken[1][2][0]) + '. Ignoring.');
-      property.unused = true;
-      continue;
-    }
-
-    if (property.value.length === 0) {
-      propertyToken = property.all[property.position];
-      context.warnings.push('Empty property \'' + name + '\' at ' + formatPosition(propertyToken[1][2][0]) + '. Ignoring.');
-      property.unused = true;
-      continue;
-    }
-
-    if (property.hack && (
-      (property.hack[0] == Hack.ASTERISK || property.hack[0] == Hack.UNDERSCORE)
-        && !options.compatibility.properties.iePrefixHack
-        || property.hack[0] == Hack.BACKSLASH && !options.compatibility.properties.ieSuffixHack
-        || property.hack[0] == Hack.BANG && !options.compatibility.properties.ieBangHack)) {
-      property.unused = true;
-      continue;
-    }
-
-    if (!options.compatibility.properties.ieFilters && isLegacyFilter(property)) {
-      property.unused = true;
-      continue;
-    }
-
-    if (property.block) {
-      optimizeBody(rule, property.value[0][1], context);
-      continue;
-    }
-
-    for (j = 0, m = property.value.length; j < m; j++) {
-      type = property.value[j][0];
-      value = property.value[j][1];
-
-      if (type == Token.PROPERTY_BLOCK) {
-        property.unused = true;
-        context.warnings.push('Invalid value token at ' + formatPosition(value[0][1][2][0]) + '. Ignoring.');
-        break;
-      }
-
-      if (startsAsUrl(value) && !context.validator.isUrl(value)) {
-        property.unused = true;
-        context.warnings.push('Broken URL \'' + value + '\' at ' + formatPosition(property.value[j][2][0]) + '. Ignoring.');
-        break;
-      }
-
-      for (k = 0, n = valueOptimizers.length; k < n; k++) {
-        value = valueOptimizers[k](name, value, options);
-      }
-
-      for (k = 0, n = pluginValueOptimizers.length; k < n; k++) {
-        value = pluginValueOptimizers[k](name, value, options);
-      }
-
-      property.value[j][1] = value;
-    }
-
-    propertyOptimizer(serializedRule, property, options);
-
-    for (j = 0, m = pluginPropertyOptimizers.length; j < m; j++) {
-      pluginPropertyOptimizers[j](serializedRule, property, options);
-    }
-  }
-
-  restoreFromOptimizing(_properties);
-  removeUnused(_properties);
-  removeComments(properties, options);
-}
-
-function removeComments(tokens, options) {
-  var token;
-  var i;
-
-  for (i = 0; i < tokens.length; i++) {
-    token = tokens[i];
-
-    if (token[0] != Token.COMMENT) {
-      continue;
-    }
-
-    optimizeComment(token, options);
-
-    if (token[1].length === 0) {
-      tokens.splice(i, 1);
-      i--;
-    }
-  }
-}
-
-function optimizeComment(token, options) {
-  if (token[1][2] == Marker.EXCLAMATION && (options.level[OptimizationLevel.One].specialComments == 'all' || options.commentsKept < options.level[OptimizationLevel.One].specialComments)) {
-    options.commentsKept++;
-    return;
-  }
-
-  token[1] = [];
-}
-
-function cleanupCharsets(tokens) {
-  var hasCharset = false;
-
-  for (var i = 0, l = tokens.length; i < l; i++) {
-    var token = tokens[i];
-
-    if (token[0] != Token.AT_RULE) { continue; }
-
-    if (!CHARSET_REGEXP.test(token[1])) { continue; }
-
-    if (hasCharset || token[1].indexOf(CHARSET_TOKEN) == -1) {
-      tokens.splice(i, 1);
-      i--;
-      l--;
-    } else {
-      hasCharset = true;
-      tokens.splice(i, 1);
-      tokens.unshift([Token.AT_RULE, token[1].replace(CHARSET_REGEXP, CHARSET_TOKEN)]);
-    }
-  }
-}
-
-function buildUnitRegexp(options) {
-  var units = ['px', 'em', 'ex', 'cm', 'mm', 'in', 'pt', 'pc', '%'];
-  var otherUnits = ['ch', 'rem', 'vh', 'vm', 'vmax', 'vmin', 'vw'];
-
-  otherUnits.forEach(function(unit) {
-    if (options.compatibility.units[unit]) {
-      units.push(unit);
-    }
-  });
-
-  return new RegExp('(^|\\s|\\(|,)0(?:' + units.join('|') + ')(\\W|$)', 'g');
-}
-
-function buildPrecisionOptions(roundingPrecision) {
-  var precisionOptions = {
-    matcher: null,
-    units: {}
-  };
-  var optimizable = [];
-  var unit;
-  var value;
-
-  for (unit in roundingPrecision) {
-    value = roundingPrecision[unit];
-
-    if (value != DEFAULT_ROUNDING_PRECISION) {
-      precisionOptions.units[unit] = {};
-      precisionOptions.units[unit].value = value;
-      precisionOptions.units[unit].multiplier = 10 ** value;
-
-      optimizable.push(unit);
-    }
-  }
-
-  if (optimizable.length > 0) {
-    precisionOptions.enabled = true;
-    precisionOptions.decimalPointMatcher = new RegExp('(\\d)\\.($|' + optimizable.join('|') + ')($|\\W)', 'g');
-    precisionOptions.zeroMatcher = new RegExp('(\\d*)(\\.\\d+)(' + optimizable.join('|') + ')', 'g');
-  }
-
-  return precisionOptions;
-}
-
-function buildVariableOptimizers(options) {
-  return options.level[OptimizationLevel.One].variableValueOptimizers.map(function(optimizer) {
-    if (typeof (optimizer) == 'string') {
-      return optimizers[optimizer] || noopValueOptimizer;
-    }
-
-    return optimizer;
-  });
-}
-
-function level1Optimize(tokens, context) {
-  var options = context.options;
-  var levelOptions = options.level[OptimizationLevel.One];
-  var ie7Hack = options.compatibility.selectors.ie7Hack;
-  var adjacentSpace = options.compatibility.selectors.adjacentSpace;
-  var spaceAfterClosingBrace = options.compatibility.properties.spaceAfterClosingBrace;
-  var format = options.format;
-  var mayHaveCharset = false;
-  var afterRules = false;
-
-  options.unitsRegexp = options.unitsRegexp || buildUnitRegexp(options);
-  options.precision = options.precision || buildPrecisionOptions(levelOptions.roundingPrecision);
-  options.commentsKept = options.commentsKept || 0;
-  options.variableOptimizers = options.variableOptimizers || buildVariableOptimizers(options);
-
-  for (var i = 0, l = tokens.length; i < l; i++) {
-    var token = tokens[i];
-
-    switch (token[0]) {
-    case Token.AT_RULE:
-      token[1] = isImport(token) && afterRules ? '' : token[1];
-      token[1] = levelOptions.tidyAtRules ? tidyAtRule(token[1]) : token[1];
-      mayHaveCharset = true;
-      break;
-    case Token.AT_RULE_BLOCK:
-      optimizeBody(token[1], token[2], context);
-      afterRules = true;
-      break;
-    case Token.NESTED_BLOCK:
-      token[1] = levelOptions.tidyBlockScopes ? tidyBlock(token[1], spaceAfterClosingBrace) : token[1];
-      level1Optimize(token[2], context);
-      afterRules = true;
-      break;
-    case Token.COMMENT:
-      optimizeComment(token, options);
-      break;
-    case Token.RULE:
-      token[1] = levelOptions.tidySelectors
-        ? tidyRules(token[1], !ie7Hack, adjacentSpace, format, context.warnings)
-        : token[1];
-      token[1] = token[1].length > 1 ? sortSelectors(token[1], levelOptions.selectorsSortingMethod) : token[1];
-      optimizeBody(token[1], token[2], context);
-      afterRules = true;
-      break;
-    }
-
-    if (token[0] == Token.COMMENT
-      && token[1].length === 0
-      || levelOptions.removeEmpty
-      && (token[1].length === 0 || (token[2] && token[2].length === 0))) {
-      tokens.splice(i, 1);
-      i--;
-      l--;
-    }
-  }
-
-  if (levelOptions.cleanupCharsets && mayHaveCharset) {
-    cleanupCharsets(tokens);
-  }
-
-  return tokens;
-}
-
-module.exports = level1Optimize;
-
-
-/***/ }),
-
-/***/ 42388:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-module.exports = {
-  background: (__webpack_require__(87792).level1.property),
-  boxShadow: (__webpack_require__(37044).level1.property),
-  borderRadius: (__webpack_require__(1566).level1.property),
-  filter: (__webpack_require__(3577).level1.property),
-  fontWeight: (__webpack_require__(2929).level1.property),
-  margin: (__webpack_require__(97926).level1.property),
-  outline: (__webpack_require__(99664).level1.property),
-  padding: (__webpack_require__(64575).level1.property)
-};
-
-
-/***/ }),
-
-/***/ 87792:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var plugin = {
-  level1: {
-    property: function background(_rule, property, options) {
-      var values = property.value;
-
-      if (!options.level[OptimizationLevel.One].optimizeBackground) {
-        return;
-      }
-
-      if (values.length == 1 && values[0][1] == 'none') {
-        values[0][1] = '0 0';
-      }
-
-      if (values.length == 1 && values[0][1] == 'transparent') {
-        values[0][1] = '0 0';
-      }
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 1566:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var plugin = {
-  level1: {
-    property: function borderRadius(_rule, property, options) {
-      var values = property.value;
-
-      if (!options.level[OptimizationLevel.One].optimizeBorderRadius) {
-        return;
-      }
-
-      if (values.length == 3 && values[1][1] == '/' && values[0][1] == values[2][1]) {
-        property.value.splice(1);
-        property.dirty = true;
-      } else if (values.length == 5 && values[2][1] == '/' && values[0][1] == values[3][1] && values[1][1] == values[4][1]) {
-        property.value.splice(2);
-        property.dirty = true;
-      } else if (values.length == 7 && values[3][1] == '/' && values[0][1] == values[4][1] && values[1][1] == values[5][1] && values[2][1] == values[6][1]) {
-        property.value.splice(3);
-        property.dirty = true;
-      } else if (values.length == 9 && values[4][1] == '/' && values[0][1] == values[5][1] && values[1][1] == values[6][1] && values[2][1] == values[7][1] && values[3][1] == values[8][1]) {
-        property.value.splice(4);
-        property.dirty = true;
-      }
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 37044:
-/***/ ((module) => {
-
-var plugin = {
-  level1: {
-    property: function boxShadow(_rule, property) {
-      var values = property.value;
-
-      // remove multiple zeros
-      if (values.length == 4 && values[0][1] === '0' && values[1][1] === '0' && values[2][1] === '0' && values[3][1] === '0') {
-        property.value.splice(2);
-        property.dirty = true;
-      }
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 3577:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var ALPHA_OR_CHROMA_FILTER_PATTERN = /progid:DXImageTransform\.Microsoft\.(Alpha|Chroma)(\W)/;
-var NO_SPACE_AFTER_COMMA_PATTERN = /,(\S)/g;
-var WHITESPACE_AROUND_EQUALS_PATTERN = / ?= ?/g;
-
-var plugin = {
-  level1: {
-    property: function filter(_rule, property, options) {
-      if (!options.compatibility.properties.ieFilters) {
-        return;
-      }
-
-      if (!options.level[OptimizationLevel.One].optimizeFilter) {
-        return;
-      }
-
-      if (property.value.length == 1) {
-        property.value[0][1] = property.value[0][1].replace(
-          ALPHA_OR_CHROMA_FILTER_PATTERN,
-          function(match, filter, suffix) {
-            return filter.toLowerCase() + suffix;
-          }
-        );
-      }
-
-      property.value[0][1] = property.value[0][1]
-        .replace(NO_SPACE_AFTER_COMMA_PATTERN, ', $1')
-        .replace(WHITESPACE_AROUND_EQUALS_PATTERN, '=');
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 2929:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var plugin = {
-  level1: {
-    property: function fontWeight(_rule, property, options) {
-      var value = property.value[0][1];
-
-      if (!options.level[OptimizationLevel.One].optimizeFontWeight) {
-        return;
-      }
-
-      if (value == 'normal') {
-        value = '400';
-      } else if (value == 'bold') {
-        value = '700';
-      }
-
-      property.value[0][1] = value;
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 97926:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var plugin = {
-  level1: {
-    property: function margin(_rule, property, options) {
-      var values = property.value;
-
-      if (!options.level[OptimizationLevel.One].replaceMultipleZeros) {
-        return;
-      }
-
-      // remove multiple zeros
-      if (values.length == 4 && values[0][1] === '0' && values[1][1] === '0' && values[2][1] === '0' && values[3][1] === '0') {
-        property.value.splice(1);
-        property.dirty = true;
-      }
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 99664:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var plugin = {
-  level1: {
-    property: function outline(_rule, property, options) {
-      var values = property.value;
-
-      if (!options.level[OptimizationLevel.One].optimizeOutline) {
-        return;
-      }
-
-      if (values.length == 1 && values[0][1] == 'none') {
-        values[0][1] = '0';
-      }
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 64575:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-function isNegative(value) {
-  return value && value[1][0] == '-' && parseFloat(value[1]) < 0;
-}
-
-var plugin = {
-  level1: {
-    property: function padding(_rule, property, options) {
-      var values = property.value;
-
-      // remove multiple zeros
-      if (values.length == 4 && values[0][1] === '0' && values[1][1] === '0' && values[2][1] === '0' && values[3][1] === '0') {
-        property.value.splice(1);
-        property.dirty = true;
-      }
-
-      // remove negative paddings
-      if (options.level[OptimizationLevel.One].removeNegativePaddings
-        && (
-          isNegative(property.value[0])
-          || isNegative(property.value[1])
-          || isNegative(property.value[2])
-          || isNegative(property.value[3])
-        )) {
-        property.unused = true;
-      }
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 95646:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var naturalCompare = __webpack_require__(33814);
-
-function naturalSorter(scope1, scope2) {
-  return naturalCompare(scope1[1], scope2[1]);
-}
-
-function standardSorter(scope1, scope2) {
-  return scope1[1] > scope2[1] ? 1 : -1;
-}
-
-function sortSelectors(selectors, method) {
-  switch (method) {
-  case 'natural':
-    return selectors.sort(naturalSorter);
-  case 'standard':
-    return selectors.sort(standardSorter);
-  case 'none':
-  case false:
-    return selectors;
-  }
-}
-
-module.exports = sortSelectors;
-
-
-/***/ }),
-
-/***/ 61228:
-/***/ ((module) => {
-
-function tidyAtRule(value) {
-  return value
-    .replace(/\s+/g, ' ')
-    .replace(/url\(\s+/g, 'url(')
-    .replace(/\s+\)/g, ')')
-    .trim();
-}
-
-module.exports = tidyAtRule;
-
-
-/***/ }),
-
-/***/ 76515:
-/***/ ((module) => {
-
-var SUPPORTED_COMPACT_BLOCK_MATCHER = /^@media\W/;
-var SUPPORTED_QUOTE_REMOVAL_MATCHER = /^@(?:keyframes|-moz-keyframes|-o-keyframes|-webkit-keyframes)\W/;
-
-function tidyBlock(values, spaceAfterClosingBrace) {
-  var withoutSpaceAfterClosingBrace;
-  var withoutQuotes;
-  var i;
-
-  for (i = values.length - 1; i >= 0; i--) {
-    withoutSpaceAfterClosingBrace = !spaceAfterClosingBrace && SUPPORTED_COMPACT_BLOCK_MATCHER.test(values[i][1]);
-    withoutQuotes = SUPPORTED_QUOTE_REMOVAL_MATCHER.test(values[i][1]);
-
-    values[i][1] = values[i][1]
-      .replace(/\n|\r\n/g, ' ')
-      .replace(/\s+/g, ' ')
-      .replace(/(,|:|\() /g, '$1')
-      .replace(/ \)/g, ')');
-
-    if (withoutQuotes) {
-      values[i][1] = values[i][1]
-        .replace(/'([a-zA-Z][a-zA-Z\d\-_]+)'/, '$1')
-        .replace(/"([a-zA-Z][a-zA-Z\d\-_]+)"/, '$1');
-    }
-
-    if (withoutSpaceAfterClosingBrace) {
-      values[i][1] = values[i][1]
-        .replace(/\) /g, ')');
-    }
-  }
-
-  return values;
-}
-
-module.exports = tidyBlock;
-
-
-/***/ }),
-
-/***/ 41568:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Spaces = (__webpack_require__(14687).Spaces);
-var Marker = __webpack_require__(53820);
-var formatPosition = __webpack_require__(96187);
-
-var CASE_ATTRIBUTE_PATTERN = /[\s"'][iI]\s*\]/;
-var CASE_RESTORE_PATTERN = /([\d\w])([iI])\]/g;
-var DOUBLE_QUOTE_CASE_PATTERN = /="([a-zA-Z][a-zA-Z\d\-_]+)"([iI])/g;
-var DOUBLE_QUOTE_PATTERN = /="([a-zA-Z][a-zA-Z\d\-_]+)"(\s|\])/g;
-var HTML_COMMENT_PATTERN = /^(?:(?:<!--|-->)\s*)+/;
-var SINGLE_QUOTE_CASE_PATTERN = /='([a-zA-Z][a-zA-Z\d\-_]+)'([iI])/g;
-var SINGLE_QUOTE_PATTERN = /='([a-zA-Z][a-zA-Z\d\-_]+)'(\s|\])/g;
-var RELATION_PATTERN = /[>+~]/;
-var WHITESPACE_PATTERN = /\s/;
-
-var ASTERISK_PLUS_HTML_HACK = '*+html ';
-var ASTERISK_FIRST_CHILD_PLUS_HTML_HACK = '*:first-child+html ';
-var LESS_THAN = '<';
-
-var PSEUDO_CLASSES_WITH_SELECTORS = [
-  ':current',
-  ':future',
-  ':has',
-  ':host',
-  ':host-context',
-  ':is',
-  ':not',
-  ':past',
-  ':where'
-];
-
-function hasInvalidCharacters(value) {
-  var isEscaped;
-  var isInvalid = false;
-  var character;
-  var isQuote = false;
-  var i, l;
-
-  for (i = 0, l = value.length; i < l; i++) {
-    character = value[i];
-
-    if (isEscaped) {
-      // continue as always
-    } else if (character == Marker.SINGLE_QUOTE || character == Marker.DOUBLE_QUOTE) {
-      isQuote = !isQuote;
-    } else if (!isQuote
-      && (character == Marker.CLOSE_CURLY_BRACKET
-        || character == Marker.EXCLAMATION
-        || character == LESS_THAN
-        || character == Marker.SEMICOLON)
-    ) {
-      isInvalid = true;
-      break;
-    } else if (!isQuote && i === 0 && RELATION_PATTERN.test(character)) {
-      isInvalid = true;
-      break;
-    }
-
-    isEscaped = character == Marker.BACK_SLASH;
-  }
-
-  return isInvalid;
-}
-
-function removeWhitespace(value, format) {
-  var stripped = [];
-  var character;
-  var isNewLineNix;
-  var isNewLineWin;
-  var isEscaped;
-  var wasEscaped;
-  var isQuoted;
-  var isSingleQuoted;
-  var isDoubleQuoted;
-  var isAttribute;
-  var isRelation;
-  var isWhitespace;
-  var isSpaceAwarePseudoClass;
-  var roundBracketLevel = 0;
-  var wasComma = false;
-  var wasRelation = false;
-  var wasWhitespace = false;
-  var withCaseAttribute = CASE_ATTRIBUTE_PATTERN.test(value);
-  var spaceAroundRelation = format && format.spaces[Spaces.AroundSelectorRelation];
-  var i, l;
-
-  for (i = 0, l = value.length; i < l; i++) {
-    character = value[i];
-
-    isNewLineNix = character == Marker.NEW_LINE_NIX;
-    isNewLineWin = character == Marker.NEW_LINE_NIX && value[i - 1] == Marker.CARRIAGE_RETURN;
-    isQuoted = isSingleQuoted || isDoubleQuoted;
-    isRelation = !isAttribute && !isEscaped && roundBracketLevel === 0 && RELATION_PATTERN.test(character);
-    isWhitespace = WHITESPACE_PATTERN.test(character);
-    isSpaceAwarePseudoClass = roundBracketLevel == 1 && character == Marker.CLOSE_ROUND_BRACKET
-      ? false
-      : isSpaceAwarePseudoClass
-        || (roundBracketLevel === 0 && character == Marker.COLON && isPseudoClassWithSelectors(value, i));
-
-    if (wasEscaped && isQuoted && isNewLineWin) {
-      // swallow escaped new windows lines in comments
-      stripped.pop();
-      stripped.pop();
-    } else if (isEscaped && isQuoted && isNewLineNix) {
-      // swallow escaped new *nix lines in comments
-      stripped.pop();
-    } else if (isEscaped) {
-      stripped.push(character);
-    } else if (character == Marker.OPEN_SQUARE_BRACKET && !isQuoted) {
-      stripped.push(character);
-      isAttribute = true;
-    } else if (character == Marker.CLOSE_SQUARE_BRACKET && !isQuoted) {
-      stripped.push(character);
-      isAttribute = false;
-    } else if (character == Marker.OPEN_ROUND_BRACKET && !isQuoted) {
-      stripped.push(character);
-      roundBracketLevel++;
-    } else if (character == Marker.CLOSE_ROUND_BRACKET && !isQuoted) {
-      stripped.push(character);
-      roundBracketLevel--;
-    } else if (character == Marker.SINGLE_QUOTE && !isQuoted) {
-      stripped.push(character);
-      isSingleQuoted = true;
-    } else if (character == Marker.DOUBLE_QUOTE && !isQuoted) {
-      stripped.push(character);
-      isDoubleQuoted = true;
-    } else if (character == Marker.SINGLE_QUOTE && isQuoted) {
-      stripped.push(character);
-      isSingleQuoted = false;
-    } else if (character == Marker.DOUBLE_QUOTE && isQuoted) {
-      stripped.push(character);
-      isDoubleQuoted = false;
-    } else if (isWhitespace && wasRelation && !spaceAroundRelation) {
-      continue;
-    } else if (!isWhitespace && wasRelation && spaceAroundRelation) {
-      stripped.push(Marker.SPACE);
-      stripped.push(character);
-    } else if (isWhitespace && !wasWhitespace && wasComma && roundBracketLevel > 0 && isSpaceAwarePseudoClass) {
-      // skip space
-    } else if (isWhitespace && !wasWhitespace && roundBracketLevel > 0 && isSpaceAwarePseudoClass) {
-      stripped.push(character);
-    } else if (isWhitespace && (isAttribute || roundBracketLevel > 0) && !isQuoted) {
-      // skip space
-    } else if (isWhitespace && wasWhitespace && !isQuoted) {
-      // skip extra space
-    } else if ((isNewLineWin || isNewLineNix) && (isAttribute || roundBracketLevel > 0) && isQuoted) {
-      // skip newline
-    } else if (isRelation && wasWhitespace && !spaceAroundRelation) {
-      stripped.pop();
-      stripped.push(character);
-    } else if (isRelation && !wasWhitespace && spaceAroundRelation) {
-      stripped.push(Marker.SPACE);
-      stripped.push(character);
-    } else if (isWhitespace) {
-      stripped.push(Marker.SPACE);
-    } else {
-      stripped.push(character);
-    }
-
-    wasEscaped = isEscaped;
-    isEscaped = character == Marker.BACK_SLASH;
-    wasRelation = isRelation;
-    wasWhitespace = isWhitespace;
-    wasComma = character == Marker.COMMA;
-  }
-
-  return withCaseAttribute
-    ? stripped.join('').replace(CASE_RESTORE_PATTERN, '$1 $2]')
-    : stripped.join('');
-}
-
-function isPseudoClassWithSelectors(value, colonPosition) {
-  var pseudoClass = value.substring(colonPosition, value.indexOf(Marker.OPEN_ROUND_BRACKET, colonPosition));
-
-  return PSEUDO_CLASSES_WITH_SELECTORS.indexOf(pseudoClass) > -1;
-}
-
-function removeQuotes(value) {
-  if (value.indexOf('\'') == -1 && value.indexOf('"') == -1) {
-    return value;
-  }
-
-  return value
-    .replace(SINGLE_QUOTE_CASE_PATTERN, '=$1 $2')
-    .replace(SINGLE_QUOTE_PATTERN, '=$1$2')
-    .replace(DOUBLE_QUOTE_CASE_PATTERN, '=$1 $2')
-    .replace(DOUBLE_QUOTE_PATTERN, '=$1$2');
-}
-
-function replacePseudoClasses(value) {
-  return value
-    .replace('nth-child(1)', 'first-child')
-    .replace('nth-of-type(1)', 'first-of-type')
-    .replace('nth-of-type(even)', 'nth-of-type(2n)')
-    .replace('nth-child(even)', 'nth-child(2n)')
-    .replace('nth-of-type(2n+1)', 'nth-of-type(odd)')
-    .replace('nth-child(2n+1)', 'nth-child(odd)')
-    .replace('nth-last-child(1)', 'last-child')
-    .replace('nth-last-of-type(1)', 'last-of-type')
-    .replace('nth-last-of-type(even)', 'nth-last-of-type(2n)')
-    .replace('nth-last-child(even)', 'nth-last-child(2n)')
-    .replace('nth-last-of-type(2n+1)', 'nth-last-of-type(odd)')
-    .replace('nth-last-child(2n+1)', 'nth-last-child(odd)');
-}
-
-function tidyRules(rules, removeUnsupported, adjacentSpace, format, warnings) {
-  var list = [];
-  var repeated = [];
-
-  function removeHTMLComment(rule, match) {
-    warnings.push('HTML comment \'' + match + '\' at ' + formatPosition(rule[2][0]) + '. Removing.');
-    return '';
-  }
-
-  for (var i = 0, l = rules.length; i < l; i++) {
-    var rule = rules[i];
-    var reduced = rule[1];
-
-    reduced = reduced.replace(HTML_COMMENT_PATTERN, removeHTMLComment.bind(null, rule));
-
-    if (hasInvalidCharacters(reduced)) {
-      warnings.push('Invalid selector \'' + rule[1] + '\' at ' + formatPosition(rule[2][0]) + '. Ignoring.');
-      continue;
-    }
-
-    reduced = removeWhitespace(reduced, format);
-    reduced = removeQuotes(reduced);
-
-    if (adjacentSpace && reduced.indexOf('nav') > 0) {
-      reduced = reduced.replace(/\+nav(\S|$)/, '+ nav$1');
-    }
-
-    if (removeUnsupported && reduced.indexOf(ASTERISK_PLUS_HTML_HACK) > -1) {
-      continue;
-    }
-
-    if (removeUnsupported && reduced.indexOf(ASTERISK_FIRST_CHILD_PLUS_HTML_HACK) > -1) {
-      continue;
-    }
-
-    if (reduced.indexOf('*') > -1) {
-      reduced = reduced
-        .replace(/\*([:#.[])/g, '$1')
-        .replace(/^(:first-child)?\+html/, '*$1+html');
-    }
-
-    if (repeated.indexOf(reduced) > -1) {
-      continue;
-    }
-
-    reduced = replacePseudoClasses(reduced);
-
-    rule[1] = reduced;
-    repeated.push(reduced);
-    list.push(rule);
-  }
-
-  if (list.length == 1 && list[0][1].length === 0) {
-    warnings.push('Empty selector \'' + list[0][1] + '\' at ' + formatPosition(list[0][2][0]) + '. Ignoring.');
-    list = [];
-  }
-
-  return list;
-}
-
-module.exports = tidyRules;
-
-
-/***/ }),
-
-/***/ 75125:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-module.exports = {
-  color: (__webpack_require__(62158).level1.value),
-  degrees: (__webpack_require__(12453).level1.value),
-  fraction: (__webpack_require__(86603).level1.value),
-  precision: (__webpack_require__(44864).level1.value),
-  textQuotes: (__webpack_require__(15000).level1.value),
-  time: (__webpack_require__(10439).level1.value),
-  unit: (__webpack_require__(47457).level1.value),
-  urlPrefix: (__webpack_require__(99529).level1.value),
-  urlQuotes: (__webpack_require__(72273).level1.value),
-  urlWhiteSpace: (__webpack_require__(23798).level1.value),
-  whiteSpace: (__webpack_require__(63935).level1.value),
-  zero: (__webpack_require__(86030).level1.value)
-};
-
-
-/***/ }),
-
-/***/ 62158:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var shortenHex = __webpack_require__(11586);
-var shortenHsl = __webpack_require__(75030);
-var shortenRgb = __webpack_require__(59991);
-
-var split = __webpack_require__(76439);
-
-var ANY_COLOR_FUNCTION_PATTERN = /(rgb|rgba|hsl|hsla)\(([^()]+)\)/gi;
-var COLOR_PREFIX_PATTERN = /#|rgb|hsl/gi;
-var HEX_LONG_PATTERN = /(^|[^='"])#([0-9a-f]{6})/gi;
-var HEX_SHORT_PATTERN = /(^|[^='"])#([0-9a-f]{3})/gi;
-var HEX_VALUE_PATTERN = /[0-9a-f]/i;
-var HSL_PATTERN = /hsl\((-?\d+),(-?\d+)%?,(-?\d+)%?\)/gi;
-var RGBA_HSLA_PATTERN = /(rgb|hsl)a?\((-?\d+),(-?\d+%?),(-?\d+%?),(0*[1-9]+[0-9]*(\.?\d*)?)\)/gi;
-var RGB_PATTERN = /rgb\((-?\d+),(-?\d+),(-?\d+)\)/gi;
-var TRANSPARENT_FUNCTION_PATTERN = /(?:rgba|hsla)\(0,0%?,0%?,0\)/g;
-
-var plugin = {
-  level1: {
-    value: function color(name, value, options) {
-      if (!options.compatibility.properties.colors) {
-        return value;
-      }
-
-      if (!value.match(COLOR_PREFIX_PATTERN)) {
-        return shortenHex(value);
-      }
-
-      value = value
-        .replace(RGBA_HSLA_PATTERN, function(match, colorFn, p1, p2, p3, alpha) {
-          return (parseInt(alpha) >= 1 ? colorFn + '(' + [p1, p2, p3].join(',') + ')' : match);
-        })
-        .replace(RGB_PATTERN, function(match, red, green, blue) {
-          return shortenRgb(red, green, blue);
-        })
-        .replace(HSL_PATTERN, function(match, hue, saturation, lightness) {
-          return shortenHsl(hue, saturation, lightness);
-        })
-        .replace(HEX_LONG_PATTERN, function(match, prefix, color, at, inputValue) {
-          var suffix = inputValue[at + match.length];
-
-          if (suffix && HEX_VALUE_PATTERN.test(suffix)) {
-            return match;
-          } if (color[0] == color[1] && color[2] == color[3] && color[4] == color[5]) {
-            return (prefix + '#' + color[0] + color[2] + color[4]).toLowerCase();
-          }
-          return (prefix + '#' + color).toLowerCase();
-        })
-        .replace(HEX_SHORT_PATTERN, function(match, prefix, color) {
-          return prefix + '#' + color.toLowerCase();
-        })
-        .replace(ANY_COLOR_FUNCTION_PATTERN, function(match, colorFunction, colorDef) {
-          var tokens = colorDef.split(',');
-          var colorFnLowercase = colorFunction && colorFunction.toLowerCase();
-          var applies = (colorFnLowercase == 'hsl' && tokens.length == 3)
-            || (colorFnLowercase == 'hsla' && tokens.length == 4)
-            || (colorFnLowercase == 'rgb' && tokens.length === 3 && colorDef.indexOf('%') > 0)
-            || (colorFnLowercase == 'rgba' && tokens.length == 4 && colorDef.indexOf('%') > 0);
-
-          if (!applies) {
-            return match;
-          }
-
-          if (tokens[1].indexOf('%') == -1) {
-            tokens[1] += '%';
-          }
-
-          if (tokens[2].indexOf('%') == -1) {
-            tokens[2] += '%';
-          }
-
-          return colorFunction + '(' + tokens.join(',') + ')';
-        });
-
-      if (options.compatibility.colors.opacity && name.indexOf('background') == -1) {
-        value = value.replace(TRANSPARENT_FUNCTION_PATTERN, function(match) {
-          if (split(value, ',').pop().indexOf('gradient(') > -1) {
-            return match;
-          }
-
-          return 'transparent';
-        });
-      }
-
-      return shortenHex(value);
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 11586:
-/***/ ((module) => {
-
-var COLORS = {
-  aliceblue: '#f0f8ff',
-  antiquewhite: '#faebd7',
-  aqua: '#0ff',
-  aquamarine: '#7fffd4',
-  azure: '#f0ffff',
-  beige: '#f5f5dc',
-  bisque: '#ffe4c4',
-  black: '#000',
-  blanchedalmond: '#ffebcd',
-  blue: '#00f',
-  blueviolet: '#8a2be2',
-  brown: '#a52a2a',
-  burlywood: '#deb887',
-  cadetblue: '#5f9ea0',
-  chartreuse: '#7fff00',
-  chocolate: '#d2691e',
-  coral: '#ff7f50',
-  cornflowerblue: '#6495ed',
-  cornsilk: '#fff8dc',
-  crimson: '#dc143c',
-  cyan: '#0ff',
-  darkblue: '#00008b',
-  darkcyan: '#008b8b',
-  darkgoldenrod: '#b8860b',
-  darkgray: '#a9a9a9',
-  darkgreen: '#006400',
-  darkgrey: '#a9a9a9',
-  darkkhaki: '#bdb76b',
-  darkmagenta: '#8b008b',
-  darkolivegreen: '#556b2f',
-  darkorange: '#ff8c00',
-  darkorchid: '#9932cc',
-  darkred: '#8b0000',
-  darksalmon: '#e9967a',
-  darkseagreen: '#8fbc8f',
-  darkslateblue: '#483d8b',
-  darkslategray: '#2f4f4f',
-  darkslategrey: '#2f4f4f',
-  darkturquoise: '#00ced1',
-  darkviolet: '#9400d3',
-  deeppink: '#ff1493',
-  deepskyblue: '#00bfff',
-  dimgray: '#696969',
-  dimgrey: '#696969',
-  dodgerblue: '#1e90ff',
-  firebrick: '#b22222',
-  floralwhite: '#fffaf0',
-  forestgreen: '#228b22',
-  fuchsia: '#f0f',
-  gainsboro: '#dcdcdc',
-  ghostwhite: '#f8f8ff',
-  gold: '#ffd700',
-  goldenrod: '#daa520',
-  gray: '#808080',
-  green: '#008000',
-  greenyellow: '#adff2f',
-  grey: '#808080',
-  honeydew: '#f0fff0',
-  hotpink: '#ff69b4',
-  indianred: '#cd5c5c',
-  indigo: '#4b0082',
-  ivory: '#fffff0',
-  khaki: '#f0e68c',
-  lavender: '#e6e6fa',
-  lavenderblush: '#fff0f5',
-  lawngreen: '#7cfc00',
-  lemonchiffon: '#fffacd',
-  lightblue: '#add8e6',
-  lightcoral: '#f08080',
-  lightcyan: '#e0ffff',
-  lightgoldenrodyellow: '#fafad2',
-  lightgray: '#d3d3d3',
-  lightgreen: '#90ee90',
-  lightgrey: '#d3d3d3',
-  lightpink: '#ffb6c1',
-  lightsalmon: '#ffa07a',
-  lightseagreen: '#20b2aa',
-  lightskyblue: '#87cefa',
-  lightslategray: '#778899',
-  lightslategrey: '#778899',
-  lightsteelblue: '#b0c4de',
-  lightyellow: '#ffffe0',
-  lime: '#0f0',
-  limegreen: '#32cd32',
-  linen: '#faf0e6',
-  magenta: '#ff00ff',
-  maroon: '#800000',
-  mediumaquamarine: '#66cdaa',
-  mediumblue: '#0000cd',
-  mediumorchid: '#ba55d3',
-  mediumpurple: '#9370db',
-  mediumseagreen: '#3cb371',
-  mediumslateblue: '#7b68ee',
-  mediumspringgreen: '#00fa9a',
-  mediumturquoise: '#48d1cc',
-  mediumvioletred: '#c71585',
-  midnightblue: '#191970',
-  mintcream: '#f5fffa',
-  mistyrose: '#ffe4e1',
-  moccasin: '#ffe4b5',
-  navajowhite: '#ffdead',
-  navy: '#000080',
-  oldlace: '#fdf5e6',
-  olive: '#808000',
-  olivedrab: '#6b8e23',
-  orange: '#ffa500',
-  orangered: '#ff4500',
-  orchid: '#da70d6',
-  palegoldenrod: '#eee8aa',
-  palegreen: '#98fb98',
-  paleturquoise: '#afeeee',
-  palevioletred: '#db7093',
-  papayawhip: '#ffefd5',
-  peachpuff: '#ffdab9',
-  peru: '#cd853f',
-  pink: '#ffc0cb',
-  plum: '#dda0dd',
-  powderblue: '#b0e0e6',
-  purple: '#800080',
-  rebeccapurple: '#663399',
-  red: '#f00',
-  rosybrown: '#bc8f8f',
-  royalblue: '#4169e1',
-  saddlebrown: '#8b4513',
-  salmon: '#fa8072',
-  sandybrown: '#f4a460',
-  seagreen: '#2e8b57',
-  seashell: '#fff5ee',
-  sienna: '#a0522d',
-  silver: '#c0c0c0',
-  skyblue: '#87ceeb',
-  slateblue: '#6a5acd',
-  slategray: '#708090',
-  slategrey: '#708090',
-  snow: '#fffafa',
-  springgreen: '#00ff7f',
-  steelblue: '#4682b4',
-  tan: '#d2b48c',
-  teal: '#008080',
-  thistle: '#d8bfd8',
-  tomato: '#ff6347',
-  turquoise: '#40e0d0',
-  violet: '#ee82ee',
-  wheat: '#f5deb3',
-  white: '#fff',
-  whitesmoke: '#f5f5f5',
-  yellow: '#ff0',
-  yellowgreen: '#9acd32'
-};
-
-var toHex = {};
-var toName = {};
-
-for (var name in COLORS) {
-  var hex = COLORS[name];
-
-  if (name.length < hex.length) {
-    toName[hex] = name;
-  } else {
-    toHex[name] = hex;
-  }
-}
-
-var toHexPattern = new RegExp('(^| |,|\\))(' + Object.keys(toHex).join('|') + ')( |,|\\)|$)', 'ig');
-var toNamePattern = new RegExp('(' + Object.keys(toName).join('|') + ')([^a-f0-9]|$)', 'ig');
-
-function hexConverter(match, prefix, colorValue, suffix) {
-  return prefix + toHex[colorValue.toLowerCase()] + suffix;
-}
-
-function nameConverter(match, colorValue, suffix) {
-  return toName[colorValue.toLowerCase()] + suffix;
-}
-
-function shortenHex(value) {
-  var hasHex = value.indexOf('#') > -1;
-  var shortened = value.replace(toHexPattern, hexConverter);
-
-  if (shortened != value) {
-    shortened = shortened.replace(toHexPattern, hexConverter);
-  }
-
-  return hasHex
-    ? shortened.replace(toNamePattern, nameConverter)
-    : shortened;
-}
-
-module.exports = shortenHex;
-
-
-/***/ }),
-
-/***/ 75030:
-/***/ ((module) => {
-
-// HSL to RGB converter. Both methods adapted from:
-// http://mjijackson.com/2008/02/rgb-to-hsl-and-rgb-to-hsv-color-model-conversion-algorithms-in-javascript
-
-function hslToRgb(h, s, l) {
-  var r, g, b;
-
-  // normalize hue orientation b/w 0 and 360 degrees
-  h %= 360;
-  if (h < 0) { h += 360; }
-  h = ~~h / 360;
-
-  if (s < 0) { s = 0; } else if (s > 100) { s = 100; }
-  s = ~~s / 100;
-
-  if (l < 0) { l = 0; } else if (l > 100) { l = 100; }
-  l = ~~l / 100;
-
-  if (s === 0) {
-    r = g = b = l; // achromatic
-  } else {
-    var q = l < 0.5
-      ? l * (1 + s)
-      : l + s - l * s;
-    var p = 2 * l - q;
-    r = hueToRgb(p, q, h + 1 / 3);
-    g = hueToRgb(p, q, h);
-    b = hueToRgb(p, q, h - 1 / 3);
-  }
-
-  return [~~(r * 255), ~~(g * 255), ~~(b * 255)];
-}
-
-function hueToRgb(p, q, t) {
-  if (t < 0) { t += 1; }
-  if (t > 1) { t -= 1; }
-  if (t < 1 / 6) { return p + (q - p) * 6 * t; }
-  if (t < 1 / 2) { return q; }
-  if (t < 2 / 3) { return p + (q - p) * (2 / 3 - t) * 6; }
-  return p;
-}
-
-function shortenHsl(hue, saturation, lightness) {
-  var asRgb = hslToRgb(hue, saturation, lightness);
-  var redAsHex = asRgb[0].toString(16);
-  var greenAsHex = asRgb[1].toString(16);
-  var blueAsHex = asRgb[2].toString(16);
-
-  return '#'
-    + ((redAsHex.length == 1 ? '0' : '') + redAsHex)
-    + ((greenAsHex.length == 1 ? '0' : '') + greenAsHex)
-    + ((blueAsHex.length == 1 ? '0' : '') + blueAsHex);
-}
-
-module.exports = shortenHsl;
-
-
-/***/ }),
-
-/***/ 59991:
-/***/ ((module) => {
-
-function shortenRgb(red, green, blue) {
-  var normalizedRed = Math.max(0, Math.min(parseInt(red), 255));
-  var normalizedGreen = Math.max(0, Math.min(parseInt(green), 255));
-  var normalizedBlue = Math.max(0, Math.min(parseInt(blue), 255));
-
-  // Credit: Asen  http://jsbin.com/UPUmaGOc/2/edit?js,console
-  return '#' + ('00000' + (normalizedRed << 16 | normalizedGreen << 8 | normalizedBlue).toString(16)).slice(-6);
-}
-
-module.exports = shortenRgb;
-
-
-/***/ }),
-
-/***/ 12453:
-/***/ ((module) => {
-
-var ZERO_DEG_PATTERN = /\(0deg\)/g;
-
-var plugin = {
-  level1: {
-    value: function degrees(_name, value, options) {
-      if (!options.compatibility.properties.zeroUnits) {
-        return value;
-      }
-
-      if (value.indexOf('0deg') == -1) {
-        return value;
-      }
-
-      return value.replace(ZERO_DEG_PATTERN, '(0)');
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 86603:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var split = __webpack_require__(76439);
-var startsAsUrl = __webpack_require__(21781);
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var EXPRESSION_PATTERN = /^expression\(.*\)$/;
-var ANY_FUNCTION_PATTERN = /^(-(?:moz|ms|o|webkit)-[a-z-]+|[a-z-]+)\((.+)\)$/;
-var TOKEN_SEPARATOR_PATTERN = /([\s,/])/;
-
-var DOT_ZERO_PATTERN = /(^|\D)\.0+(\D|$)/g;
-var FRACTION_PATTERN = /\.([1-9]*)0+(\D|$)/g;
-var LEADING_ZERO_FRACTION_PATTERN = /(^|\D)0\.(\d)/g;
-var MINUS_ZERO_FRACTION_PATTERN = /([^\w\d-]|^)-0([^.]|$)/g;
-var ZERO_PREFIXED_UNIT_PATTERN = /(^|\s)0+([1-9])/g;
-
-function optimizeRecursively(value) {
-  var functionTokens;
-  var tokens;
-
-  if (startsAsUrl(value)) {
-    return value;
-  }
-
-  if (EXPRESSION_PATTERN.test(value)) {
-    return value;
-  }
-
-  functionTokens = ANY_FUNCTION_PATTERN.exec(value);
-
-  if (!functionTokens) {
-    return optimizeFractions(value);
-  }
-
-  tokens = split(functionTokens[2], TOKEN_SEPARATOR_PATTERN)
-    .map(function(token) { return optimizeRecursively(token); });
-
-  return functionTokens[1] + '(' + tokens.join('') + ')';
-}
-
-function optimizeFractions(value) {
-  if (value.indexOf('0') == -1) {
-    return value;
-  }
-
-  if (value.indexOf('-') > -1) {
-    value = value
-      .replace(MINUS_ZERO_FRACTION_PATTERN, '$10$2')
-      .replace(MINUS_ZERO_FRACTION_PATTERN, '$10$2');
-  }
-
-  return value
-    .replace(ZERO_PREFIXED_UNIT_PATTERN, '$1$2')
-    .replace(DOT_ZERO_PATTERN, '$10$2')
-    .replace(FRACTION_PATTERN, function(match, nonZeroPart, suffix) {
-      return (nonZeroPart.length > 0 ? '.' : '') + nonZeroPart + suffix;
-    })
-    .replace(LEADING_ZERO_FRACTION_PATTERN, '$1.$2');
-}
-
-var plugin = {
-  level1: {
-    value: function fraction(name, value, options) {
-      if (!options.level[OptimizationLevel.One].replaceZeroUnits) {
-        return value;
-      }
-
-      return optimizeRecursively(value);
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 44864:
-/***/ ((module) => {
-
-var plugin = {
-  level1: {
-    value: function precision(_name, value, options) {
-      if (!options.precision.enabled || value.indexOf('.') === -1) {
-        return value;
-      }
-
-      return value
-        .replace(options.precision.decimalPointMatcher, '$1$2$3')
-        .replace(options.precision.zeroMatcher, function(match, integerPart, fractionPart, unit) {
-          var multiplier = options.precision.units[unit].multiplier;
-          var parsedInteger = parseInt(integerPart);
-          var integer = Number.isNaN(parsedInteger) ? 0 : parsedInteger;
-          var fraction = parseFloat(fractionPart);
-
-          return Math.round((integer + fraction) * multiplier) / multiplier + unit;
-        });
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 21781:
-/***/ ((module) => {
-
-var URL_PREFIX_PATTERN = /^url\(/i;
-
-function startsAsUrl(value) {
-  return URL_PREFIX_PATTERN.test(value);
-}
-
-module.exports = startsAsUrl;
-
-
-/***/ }),
-
-/***/ 15000:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var LOCAL_PREFIX_PATTERN = /^local\(/i;
-var QUOTED_PATTERN = /^('.*'|".*")$/;
-var QUOTED_BUT_SAFE_PATTERN = /^['"][a-zA-Z][a-zA-Z\d\-_]+['"]$/;
-// eslint-disable-next-line max-len
-var GENERIC_FONT_FAMILY_PATTERN = /^['"](?:cursive|default|emoji|fangsong|fantasy|inherit|initial|math|monospace|revert|revert-layer|sans-serif|serif|system-ui|ui-monospace|ui-rounded|ui-sans-serif|ui-serif|unset)['"]$/;
-
-var plugin = {
-  level1: {
-    value: function textQuotes(name, value, options) {
-      if ((name == 'font-family' || name == 'font') && GENERIC_FONT_FAMILY_PATTERN.test(value)) {
-        return value;
-      }
-
-      if (!options.level[OptimizationLevel.One].removeQuotes) {
-        return value;
-      }
-
-      if (!QUOTED_PATTERN.test(value) && !LOCAL_PREFIX_PATTERN.test(value)) {
-        return value;
-      }
-
-      return QUOTED_BUT_SAFE_PATTERN.test(value)
-        ? value.substring(1, value.length - 1)
-        : value;
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 10439:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var TIME_VALUE = /^(-?[\d.]+)(m?s)$/;
-
-var plugin = {
-  level1: {
-    value: function time(name, value, options) {
-      if (!options.level[OptimizationLevel.One].replaceTimeUnits) {
-        return value;
-      }
-
-      if (!TIME_VALUE.test(value)) {
-        return value;
-      }
-
-      return value.replace(TIME_VALUE, function(match, val, unit) {
-        var newValue;
-
-        if (unit == 'ms') {
-          newValue = parseInt(val) / 1000 + 's';
-        } else if (unit == 's') {
-          newValue = parseFloat(val) * 1000 + 'ms';
-        }
-
-        return newValue.length < match.length ? newValue : match;
-      });
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 47457:
-/***/ ((module) => {
-
-var WHOLE_PIXEL_VALUE = /(?:^|\s|\()(-?\d+)px/;
-
-var plugin = {
-  level1: {
-    value: function unit(_name, value, options) {
-      if (!WHOLE_PIXEL_VALUE.test(value)) {
-        return value;
-      }
-
-      return value.replace(WHOLE_PIXEL_VALUE, function(match, val) {
-        var newValue;
-        var intVal = parseInt(val);
-
-        if (intVal === 0) {
-          return match;
-        }
-
-        if (options.compatibility.properties.shorterLengthUnits
-          && options.compatibility.units.pt
-          && intVal * 3 % 4 === 0) {
-          newValue = intVal * 3 / 4 + 'pt';
-        }
-
-        if (options.compatibility.properties.shorterLengthUnits
-          && options.compatibility.units.pc
-          && intVal % 16 === 0) {
-          newValue = intVal / 16 + 'pc';
-        }
-
-        if (options.compatibility.properties.shorterLengthUnits
-          && options.compatibility.units.in
-          && intVal % 96 === 0) {
-          newValue = intVal / 96 + 'in';
-        }
-
-        if (newValue) {
-          newValue = match.substring(0, match.indexOf(val)) + newValue;
-        }
-
-        return newValue && newValue.length < match.length ? newValue : match;
-      });
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 99529:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var startsAsUrl = __webpack_require__(21781);
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var URL_PREFIX_PATTERN = /^url\(/i;
-
-var plugin = {
-  level1: {
-    value: function urlPrefix(_name, value, options) {
-      if (!options.level[OptimizationLevel.One].normalizeUrls) {
-        return value;
-      }
-
-      if (!startsAsUrl(value)) {
-        return value;
-      }
-
-      return value.replace(URL_PREFIX_PATTERN, 'url(');
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 72273:
-/***/ ((module) => {
-
-var QUOTED_URL_PATTERN = /^url\(['"].+['"]\)$/;
-var QUOTED_URL_WITH_WHITESPACE_PATTERN = /^url\(['"].*[*\s()'"].*['"]\)$/;
-var QUOTES_PATTERN = /["']/g;
-var URL_DATA_PATTERN = /^url\(['"]data:[^;]+;charset/;
-
-var plugin = {
-  level1: {
-    value: function urlQuotes(_name, value, options) {
-      if (options.compatibility.properties.urlQuotes) {
-        return value;
-      }
-
-      return QUOTED_URL_PATTERN.test(value)
-        && !QUOTED_URL_WITH_WHITESPACE_PATTERN.test(value)
-        && !URL_DATA_PATTERN.test(value)
-        ? value.replace(QUOTES_PATTERN, '')
-        : value;
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 23798:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var startsAsUrl = __webpack_require__(21781);
-
-var WHITESPACE_PATTERN = /\\?\n|\\?\r\n/g;
-var WHITESPACE_PREFIX_PATTERN = /(\()\s+/g;
-var WHITESPACE_SUFFIX_PATTERN = /\s+(\))/g;
-
-var plugin = {
-  level1: {
-    value: function urlWhitespace(_name, value) {
-      if (!startsAsUrl(value)) {
-        return value;
-      }
-
-      return value
-        .replace(WHITESPACE_PATTERN, '')
-        .replace(WHITESPACE_PREFIX_PATTERN, '$1')
-        .replace(WHITESPACE_SUFFIX_PATTERN, '$1');
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 63935:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var Marker = __webpack_require__(53820);
-
-var CALC_DIVISION_WHITESPACE_PATTERN = /\) ?\/ ?/g;
-var COMMA_AND_SPACE_PATTERN = /, /g;
-var LINE_BREAK_PATTERN = /\r?\n/g;
-var MULTI_WHITESPACE_PATTERN = /\s+/g;
-var FUNCTION_CLOSING_BRACE_WHITESPACE_PATTERN = /\s+(;?\))/g;
-var FUNCTION_OPENING_BRACE_WHITESPACE_PATTERN = /(\(;?)\s+/g;
-var VARIABLE_NAME_PATTERN = /^--\S+$/;
-var VARIABLE_VALUE_PATTERN = /^var\(\s*--\S+\s*\)$/;
-
-var plugin = {
-  level1: {
-    value: function whitespace(name, value, options) {
-      if (!options.level[OptimizationLevel.One].removeWhitespace) {
-        return value;
-      }
-
-      if (VARIABLE_NAME_PATTERN.test(name) && !VARIABLE_VALUE_PATTERN.test(value)) {
-        return value;
-      }
-
-      if ((value.indexOf(' ') == -1 && value.indexOf('\n') == -1) || value.indexOf('expression') === 0) {
-        return value;
-      }
-
-      if (value.indexOf(Marker.SINGLE_QUOTE) > -1 || value.indexOf(Marker.DOUBLE_QUOTE) > -1) {
-        return value;
-      }
-
-      value = value.replace(LINE_BREAK_PATTERN, '');
-      value = value.replace(MULTI_WHITESPACE_PATTERN, ' ');
-
-      if (value.indexOf('calc') > -1) {
-        value = value.replace(CALC_DIVISION_WHITESPACE_PATTERN, ')/ ');
-      }
-
-      return value
-        .replace(FUNCTION_OPENING_BRACE_WHITESPACE_PATTERN, '$1')
-        .replace(FUNCTION_CLOSING_BRACE_WHITESPACE_PATTERN, '$1')
-        .replace(COMMA_AND_SPACE_PATTERN, ',');
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 86030:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var split = __webpack_require__(76439);
-
-var ANY_FUNCTION_PATTERN = /^(-(?:moz|ms|o|webkit)-[a-z-]+|[a-z-]+)\((.+)\)$/;
-var SKIP_FUNCTION_PATTERN = /^(?:-moz-calc|-webkit-calc|calc|rgb|hsl|rgba|hsla|min|max|clamp|expression)\(/;
-var TOKEN_SEPARATOR_PATTERN = /([\s,/])/;
-
-function removeRecursively(value, options) {
-  var functionTokens;
-  var tokens;
-
-  if (SKIP_FUNCTION_PATTERN.test(value)) {
-    return value;
-  }
-
-  functionTokens = ANY_FUNCTION_PATTERN.exec(value);
-
-  if (!functionTokens) {
-    return removeZeros(value, options);
-  }
-
-  tokens = split(functionTokens[2], TOKEN_SEPARATOR_PATTERN)
-    .map(function(token) { return removeRecursively(token, options); });
-
-  return functionTokens[1] + '(' + tokens.join('') + ')';
-}
-
-function removeZeros(value, options) {
-  return value
-    .replace(options.unitsRegexp, '$10$2')
-    .replace(options.unitsRegexp, '$10$2');
-}
-
-var plugin = {
-  level1: {
-    value: function zero(name, value, options) {
-      if (!options.compatibility.properties.zeroUnits) {
-        return value;
-      }
-
-      if (value.indexOf('%') > 0 && (name == 'height' || name == 'max-height' || name == 'width' || name == 'max-width')) {
-        return value;
-      }
-
-      return removeRecursively(value, options);
-    }
-  }
-};
-
-module.exports = plugin;
-
-
-/***/ }),
-
-/***/ 75878:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-// This extractor is used in level 2 optimizations
-// IMPORTANT: Mind Token class and this code is not related!
-// Properties will be tokenized in one step, see #429
-
-var Token = __webpack_require__(44633);
-var serializeRules = (__webpack_require__(73694).rules);
-var serializeValue = (__webpack_require__(73694).value);
-
-function extractProperties(token) {
-  var properties = [];
-  var inSpecificSelector;
-  var property;
-  var name;
-  var value;
-  var i, l;
-
-  if (token[0] == Token.RULE) {
-    inSpecificSelector = !/[.+>~]/.test(serializeRules(token[1]));
-
-    for (i = 0, l = token[2].length; i < l; i++) {
-      property = token[2][i];
-
-      if (property[0] != Token.PROPERTY) { continue; }
-
-      name = property[1][1];
-      if (name.length === 0) { continue; }
-
-      value = serializeValue(property, i);
-
-      properties.push([
-        name,
-        value,
-        findNameRoot(name),
-        token[2][i],
-        name + ':' + value,
-        token[1],
-        inSpecificSelector
-      ]);
-    }
-  } else if (token[0] == Token.NESTED_BLOCK) {
-    for (i = 0, l = token[2].length; i < l; i++) {
-      properties = properties.concat(extractProperties(token[2][i]));
-    }
-  }
-
-  return properties;
-}
-
-function findNameRoot(name) {
-  if (name == 'list-style') { return name; }
-  if (name.indexOf('-radius') > 0) { return 'border-radius'; }
-  if (name == 'border-collapse' || name == 'border-spacing' || name == 'border-image') { return name; }
-  if (name.indexOf('border-') === 0 && /^border-\w+-\w+$/.test(name)) { return name.match(/border-\w+/)[0]; }
-  if (name.indexOf('border-') === 0 && /^border-\w+$/.test(name)) { return 'border'; }
-  if (name.indexOf('text-') === 0) { return name; }
-  if (name == '-chrome-') { return name; }
-
-  return name.replace(/^-\w+-/, '').match(/([a-zA-Z]+)/)[0].toLowerCase();
-}
-
-module.exports = extractProperties;
-
-
-/***/ }),
-
-/***/ 54638:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Marker = __webpack_require__(53820);
-var split = __webpack_require__(76439);
-
-var DEEP_SELECTOR_PATTERN = /\/deep\//;
-var DOUBLE_COLON_PATTERN = /^::/;
-var VENDOR_PREFIXED_PATTERN = /:(-moz-|-ms-|-o-|-webkit-)/;
-
-var NOT_PSEUDO = ':not';
-var PSEUDO_CLASSES_WITH_ARGUMENTS = [
-  ':dir',
-  ':lang',
-  ':not',
-  ':nth-child',
-  ':nth-last-child',
-  ':nth-last-of-type',
-  ':nth-of-type'
-];
-var RELATION_PATTERN = /[>+~]/;
-var UNMIXABLE_PSEUDO_CLASSES = [
-  ':after',
-  ':before',
-  ':first-letter',
-  ':first-line',
-  ':lang'
-];
-var UNMIXABLE_PSEUDO_ELEMENTS = [
-  '::after',
-  '::before',
-  '::first-letter',
-  '::first-line'
-];
-
-var Level = {
-  DOUBLE_QUOTE: 'double-quote',
-  SINGLE_QUOTE: 'single-quote',
-  ROOT: 'root'
-};
-
-function isMergeable(selector, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) {
-  var singleSelectors = split(selector, Marker.COMMA);
-  var singleSelector;
-  var i, l;
-
-  for (i = 0, l = singleSelectors.length; i < l; i++) {
-    singleSelector = singleSelectors[i];
-
-    if (singleSelector.length === 0
-        || isDeepSelector(singleSelector)
-        || isVendorPrefixed(singleSelector)
-        || (singleSelector.indexOf(Marker.COLON) > -1
-          && !areMergeable(
-            singleSelector,
-            extractPseudoFrom(singleSelector),
-            mergeablePseudoClasses,
-            mergeablePseudoElements,
-            multiplePseudoMerging
-          ))) {
-      return false;
-    }
-  }
-
-  return true;
-}
-
-function isDeepSelector(selector) {
-  return DEEP_SELECTOR_PATTERN.test(selector);
-}
-
-function isVendorPrefixed(selector) {
-  return VENDOR_PREFIXED_PATTERN.test(selector);
-}
-
-function extractPseudoFrom(selector) {
-  var list = [];
-  var character;
-  var buffer = [];
-  var level = Level.ROOT;
-  var roundBracketLevel = 0;
-  var isQuoted;
-  var isEscaped;
-  var isPseudo = false;
-  var isRelation;
-  var wasColon = false;
-  var index;
-  var len;
-
-  for (index = 0, len = selector.length; index < len; index++) {
-    character = selector[index];
-
-    isRelation = !isEscaped && RELATION_PATTERN.test(character);
-    isQuoted = level == Level.DOUBLE_QUOTE || level == Level.SINGLE_QUOTE;
-
-    if (isEscaped) {
-      buffer.push(character);
-    } else if (character == Marker.DOUBLE_QUOTE && level == Level.ROOT) {
-      buffer.push(character);
-      level = Level.DOUBLE_QUOTE;
-    } else if (character == Marker.DOUBLE_QUOTE && level == Level.DOUBLE_QUOTE) {
-      buffer.push(character);
-      level = Level.ROOT;
-    } else if (character == Marker.SINGLE_QUOTE && level == Level.ROOT) {
-      buffer.push(character);
-      level = Level.SINGLE_QUOTE;
-    } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) {
-      buffer.push(character);
-      level = Level.ROOT;
-    } else if (isQuoted) {
-      buffer.push(character);
-    } else if (character == Marker.OPEN_ROUND_BRACKET) {
-      buffer.push(character);
-      roundBracketLevel++;
-    } else if (character == Marker.CLOSE_ROUND_BRACKET && roundBracketLevel == 1 && isPseudo) {
-      buffer.push(character);
-      list.push(buffer.join(''));
-      roundBracketLevel--;
-      buffer = [];
-      isPseudo = false;
-    } else if (character == Marker.CLOSE_ROUND_BRACKET) {
-      buffer.push(character);
-      roundBracketLevel--;
-    } else if (character == Marker.COLON && roundBracketLevel === 0 && isPseudo && !wasColon) {
-      list.push(buffer.join(''));
-      buffer = [];
-      buffer.push(character);
-    } else if (character == Marker.COLON && roundBracketLevel === 0 && !wasColon) {
-      buffer = [];
-      buffer.push(character);
-      isPseudo = true;
-    } else if (character == Marker.SPACE && roundBracketLevel === 0 && isPseudo) {
-      list.push(buffer.join(''));
-      buffer = [];
-      isPseudo = false;
-    } else if (isRelation && roundBracketLevel === 0 && isPseudo) {
-      list.push(buffer.join(''));
-      buffer = [];
-      isPseudo = false;
-    } else {
-      buffer.push(character);
-    }
-
-    isEscaped = character == Marker.BACK_SLASH;
-    wasColon = character == Marker.COLON;
-  }
-
-  if (buffer.length > 0 && isPseudo) {
-    list.push(buffer.join(''));
-  }
-
-  return list;
-}
-
-function areMergeable(selector, matches, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging) {
-  return areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements)
-    && needArguments(matches)
-    && (matches.length < 2 || !someIncorrectlyChained(selector, matches))
-    && (matches.length < 2 || multiplePseudoMerging && allMixable(matches));
-}
-
-function areAllowed(matches, mergeablePseudoClasses, mergeablePseudoElements) {
-  var match;
-  var name;
-  var i, l;
-
-  for (i = 0, l = matches.length; i < l; i++) {
-    match = matches[i];
-    name = match.indexOf(Marker.OPEN_ROUND_BRACKET) > -1
-      ? match.substring(0, match.indexOf(Marker.OPEN_ROUND_BRACKET))
-      : match;
-
-    if (mergeablePseudoClasses.indexOf(name) === -1 && mergeablePseudoElements.indexOf(name) === -1) {
-      return false;
-    }
-  }
-
-  return true;
-}
-
-function needArguments(matches) {
-  var match;
-  var name;
-  var bracketOpensAt;
-  var hasArguments;
-  var i, l;
-
-  for (i = 0, l = matches.length; i < l; i++) {
-    match = matches[i];
-
-    bracketOpensAt = match.indexOf(Marker.OPEN_ROUND_BRACKET);
-    hasArguments = bracketOpensAt > -1;
-    name = hasArguments
-      ? match.substring(0, bracketOpensAt)
-      : match;
-
-    if (hasArguments && PSEUDO_CLASSES_WITH_ARGUMENTS.indexOf(name) == -1) {
-      return false;
-    }
-
-    if (!hasArguments && PSEUDO_CLASSES_WITH_ARGUMENTS.indexOf(name) > -1) {
-      return false;
-    }
-  }
-
-  return true;
-}
-
-function someIncorrectlyChained(selector, matches) {
-  var positionInSelector = 0;
-  var match;
-  var matchAt;
-  var nextMatch;
-  var nextMatchAt;
-  var name;
-  var nextName;
-  var areChained;
-  var i, l;
-
-  for (i = 0, l = matches.length; i < l; i++) {
-    match = matches[i];
-    nextMatch = matches[i + 1];
-
-    if (!nextMatch) {
-      break;
-    }
-
-    matchAt = selector.indexOf(match, positionInSelector);
-    nextMatchAt = selector.indexOf(match, matchAt + 1);
-    positionInSelector = nextMatchAt;
-    areChained = matchAt + match.length == nextMatchAt;
-
-    if (areChained) {
-      name = match.indexOf(Marker.OPEN_ROUND_BRACKET) > -1
-        ? match.substring(0, match.indexOf(Marker.OPEN_ROUND_BRACKET))
-        : match;
-      nextName = nextMatch.indexOf(Marker.OPEN_ROUND_BRACKET) > -1
-        ? nextMatch.substring(0, nextMatch.indexOf(Marker.OPEN_ROUND_BRACKET))
-        : nextMatch;
-
-      if (name != NOT_PSEUDO || nextName != NOT_PSEUDO) {
-        return true;
-      }
-    }
-  }
-
-  return false;
-}
-
-function allMixable(matches) {
-  var unmixableMatches = 0;
-  var match;
-  var i, l;
-
-  for (i = 0, l = matches.length; i < l; i++) {
-    match = matches[i];
-
-    if (isPseudoElement(match)) {
-      unmixableMatches += UNMIXABLE_PSEUDO_ELEMENTS.indexOf(match) > -1 ? 1 : 0;
-    } else {
-      unmixableMatches += UNMIXABLE_PSEUDO_CLASSES.indexOf(match) > -1 ? 1 : 0;
-    }
-
-    if (unmixableMatches > 1) {
-      return false;
-    }
-  }
-
-  return true;
-}
-
-function isPseudoElement(pseudo) {
-  return DOUBLE_COLON_PATTERN.test(pseudo);
-}
-
-module.exports = isMergeable;
-
-
-/***/ }),
-
-/***/ 59031:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isMergeable = __webpack_require__(54638);
-
-var optimizeProperties = __webpack_require__(97847);
-
-var sortSelectors = __webpack_require__(95646);
-var tidyRules = __webpack_require__(41568);
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var serializeBody = (__webpack_require__(73694).body);
-var serializeRules = (__webpack_require__(73694).rules);
-
-var Token = __webpack_require__(44633);
-
-function mergeAdjacent(tokens, context) {
-  var lastToken = [null, [], []];
-  var options = context.options;
-  var adjacentSpace = options.compatibility.selectors.adjacentSpace;
-  var selectorsSortingMethod = options.level[OptimizationLevel.One].selectorsSortingMethod;
-  var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
-  var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
-  var mergeLimit = options.compatibility.selectors.mergeLimit;
-  var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
-
-  for (var i = 0, l = tokens.length; i < l; i++) {
-    var token = tokens[i];
-
-    if (token[0] != Token.RULE) {
-      lastToken = [null, [], []];
-      continue;
-    }
-
-    if (lastToken[0] == Token.RULE && serializeRules(token[1]) == serializeRules(lastToken[1])) {
-      Array.prototype.push.apply(lastToken[2], token[2]);
-      optimizeProperties(lastToken[2], true, true, context);
-      token[2] = [];
-    } else if (lastToken[0] == Token.RULE && serializeBody(token[2]) == serializeBody(lastToken[2])
-        && isMergeable(serializeRules(token[1]), mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)
-        && isMergeable(
-          serializeRules(lastToken[1]),
-          mergeablePseudoClasses,
-          mergeablePseudoElements,
-          multiplePseudoMerging
-        )
-        && lastToken[1].length < mergeLimit) {
-      lastToken[1] = tidyRules(lastToken[1].concat(token[1]), false, adjacentSpace, false, context.warnings);
-      lastToken[1] = lastToken.length > 1 ? sortSelectors(lastToken[1], selectorsSortingMethod) : lastToken[1];
-      token[2] = [];
-    } else {
-      lastToken = token;
-    }
-  }
-}
-
-module.exports = mergeAdjacent;
-
-
-/***/ }),
-
-/***/ 51619:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var canReorder = (__webpack_require__(57633).canReorder);
-var canReorderSingle = (__webpack_require__(57633).canReorderSingle);
-var extractProperties = __webpack_require__(75878);
-var rulesOverlap = __webpack_require__(84250);
-
-var serializeRules = (__webpack_require__(73694).rules);
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-var Token = __webpack_require__(44633);
-
-function mergeMediaQueries(tokens, context) {
-  var mergeSemantically = context.options.level[OptimizationLevel.Two].mergeSemantically;
-  var specificityCache = context.cache.specificity;
-  var candidates = {};
-  var reduced = [];
-
-  for (var i = tokens.length - 1; i >= 0; i--) {
-    var token = tokens[i];
-    if (token[0] != Token.NESTED_BLOCK) {
-      continue;
-    }
-
-    var key = serializeRules(token[1]);
-    var candidate = candidates[key];
-    if (!candidate) {
-      candidate = [];
-      candidates[key] = candidate;
-    }
-
-    candidate.push(i);
-  }
-
-  for (var name in candidates) {
-    var positions = candidates[name];
-
-    positionLoop:
-    for (var j = positions.length - 1; j > 0; j--) {
-      var positionOne = positions[j];
-      var tokenOne = tokens[positionOne];
-      var positionTwo = positions[j - 1];
-      var tokenTwo = tokens[positionTwo];
-
-      directionLoop:
-      for (var direction = 1; direction >= -1; direction -= 2) {
-        var topToBottom = direction == 1;
-        var from = topToBottom ? positionOne + 1 : positionTwo - 1;
-        var to = topToBottom ? positionTwo : positionOne;
-        var delta = topToBottom ? 1 : -1;
-        var source = topToBottom ? tokenOne : tokenTwo;
-        var target = topToBottom ? tokenTwo : tokenOne;
-        var movedProperties = extractProperties(source);
-
-        while (from != to) {
-          var traversedProperties = extractProperties(tokens[from]);
-          from += delta;
-
-          if (mergeSemantically
-            && allSameRulePropertiesCanBeReordered(movedProperties, traversedProperties, specificityCache)
-          ) {
-            continue;
-          }
-
-          if (!canReorder(movedProperties, traversedProperties, specificityCache)) { continue directionLoop; }
-        }
-
-        target[2] = topToBottom
-          ? source[2].concat(target[2])
-          : target[2].concat(source[2]);
-        source[2] = [];
-
-        reduced.push(target);
-        continue positionLoop;
-      }
-    }
-  }
-
-  return reduced;
-}
-
-function allSameRulePropertiesCanBeReordered(movedProperties, traversedProperties, specificityCache) {
-  var movedProperty;
-  var movedRule;
-  var traversedProperty;
-  var traversedRule;
-  var i, l;
-  var j, m;
-
-  for (i = 0, l = movedProperties.length; i < l; i++) {
-    movedProperty = movedProperties[i];
-    movedRule = movedProperty[5];
-
-    for (j = 0, m = traversedProperties.length; j < m; j++) {
-      traversedProperty = traversedProperties[j];
-      traversedRule = traversedProperty[5];
-
-      if (rulesOverlap(movedRule, traversedRule, true)
-        && !canReorderSingle(movedProperty, traversedProperty, specificityCache)) {
-        return false;
-      }
-    }
-  }
-
-  return true;
-}
-
-module.exports = mergeMediaQueries;
-
-
-/***/ }),
-
-/***/ 36962:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isMergeable = __webpack_require__(54638);
-
-var sortSelectors = __webpack_require__(95646);
-var tidyRules = __webpack_require__(41568);
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var serializeBody = (__webpack_require__(73694).body);
-var serializeRules = (__webpack_require__(73694).rules);
-
-var Token = __webpack_require__(44633);
-
-function unsafeSelector(value) {
-  return /\.|\*| :/.test(value);
-}
-
-function isBemElement(token) {
-  var asString = serializeRules(token[1]);
-  return asString.indexOf('__') > -1 || asString.indexOf('--') > -1;
-}
-
-function withoutModifier(selector) {
-  return selector.replace(/--[^ ,>+~:]+/g, '');
-}
-
-function removeAnyUnsafeElements(left, candidates) {
-  var leftSelector = withoutModifier(serializeRules(left[1]));
-
-  for (var body in candidates) {
-    var right = candidates[body];
-    var rightSelector = withoutModifier(serializeRules(right[1]));
-
-    if (rightSelector.indexOf(leftSelector) > -1 || leftSelector.indexOf(rightSelector) > -1) {
-      delete candidates[body];
-    }
-  }
-}
-
-function mergeNonAdjacentByBody(tokens, context) {
-  var options = context.options;
-  var mergeSemantically = options.level[OptimizationLevel.Two].mergeSemantically;
-  var adjacentSpace = options.compatibility.selectors.adjacentSpace;
-  var selectorsSortingMethod = options.level[OptimizationLevel.One].selectorsSortingMethod;
-  var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
-  var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
-  var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
-  var candidates = {};
-
-  for (var i = tokens.length - 1; i >= 0; i--) {
-    var token = tokens[i];
-    if (token[0] != Token.RULE) { continue; }
-
-    if (token[2].length > 0 && (!mergeSemantically && unsafeSelector(serializeRules(token[1])))) { candidates = {}; }
-
-    if (token[2].length > 0 && mergeSemantically && isBemElement(token)) { removeAnyUnsafeElements(token, candidates); }
-
-    var candidateBody = serializeBody(token[2]);
-    var oldToken = candidates[candidateBody];
-    if (oldToken
-        && isMergeable(
-          serializeRules(token[1]),
-          mergeablePseudoClasses,
-          mergeablePseudoElements,
-          multiplePseudoMerging
-        )
-        && isMergeable(
-          serializeRules(oldToken[1]),
-          mergeablePseudoClasses,
-          mergeablePseudoElements,
-          multiplePseudoMerging
-        )
-    ) {
-      if (token[2].length > 0) {
-        token[1] = tidyRules(oldToken[1].concat(token[1]), false, adjacentSpace, false, context.warnings);
-        token[1] = token[1].length > 1 ? sortSelectors(token[1], selectorsSortingMethod) : token[1];
-      } else {
-        token[1] = oldToken[1].concat(token[1]);
-      }
-
-      oldToken[2] = [];
-      candidates[candidateBody] = null;
-    }
-
-    candidates[serializeBody(token[2])] = token;
-  }
-}
-
-module.exports = mergeNonAdjacentByBody;
-
-
-/***/ }),
-
-/***/ 29377:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var canReorder = (__webpack_require__(57633).canReorder);
-var extractProperties = __webpack_require__(75878);
-
-var optimizeProperties = __webpack_require__(97847);
-
-var serializeRules = (__webpack_require__(73694).rules);
-
-var Token = __webpack_require__(44633);
-
-function mergeNonAdjacentBySelector(tokens, context) {
-  var specificityCache = context.cache.specificity;
-  var allSelectors = {};
-  var repeatedSelectors = [];
-  var i;
-
-  for (i = tokens.length - 1; i >= 0; i--) {
-    if (tokens[i][0] != Token.RULE) { continue; }
-    if (tokens[i][2].length === 0) { continue; }
-
-    var selector = serializeRules(tokens[i][1]);
-    allSelectors[selector] = [i].concat(allSelectors[selector] || []);
-
-    if (allSelectors[selector].length == 2) { repeatedSelectors.push(selector); }
-  }
-
-  for (i = repeatedSelectors.length - 1; i >= 0; i--) {
-    var positions = allSelectors[repeatedSelectors[i]];
-
-    selectorIterator:
-    for (var j = positions.length - 1; j > 0; j--) {
-      var positionOne = positions[j - 1];
-      var tokenOne = tokens[positionOne];
-      var positionTwo = positions[j];
-      var tokenTwo = tokens[positionTwo];
-
-      directionIterator:
-      for (var direction = 1; direction >= -1; direction -= 2) {
-        var topToBottom = direction == 1;
-        var from = topToBottom ? positionOne + 1 : positionTwo - 1;
-        var to = topToBottom ? positionTwo : positionOne;
-        var delta = topToBottom ? 1 : -1;
-        var moved = topToBottom ? tokenOne : tokenTwo;
-        var target = topToBottom ? tokenTwo : tokenOne;
-        var movedProperties = extractProperties(moved);
-
-        while (from != to) {
-          var traversedProperties = extractProperties(tokens[from]);
-          from += delta;
-
-          // traversed then moved as we move selectors towards the start
-          var reorderable = topToBottom
-            ? canReorder(movedProperties, traversedProperties, specificityCache)
-            : canReorder(traversedProperties, movedProperties, specificityCache);
-
-          if (!reorderable && !topToBottom) { continue selectorIterator; }
-          if (!reorderable && topToBottom) { continue directionIterator; }
-        }
-
-        if (topToBottom) {
-          Array.prototype.push.apply(moved[2], target[2]);
-          target[2] = moved[2];
-        } else {
-          Array.prototype.push.apply(target[2], moved[2]);
-        }
-
-        optimizeProperties(target[2], true, true, context);
-        moved[2] = [];
-      }
-    }
-  }
-}
-
-module.exports = mergeNonAdjacentBySelector;
-
-
-/***/ }),
-
-/***/ 46445:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var mergeAdjacent = __webpack_require__(59031);
-var mergeMediaQueries = __webpack_require__(51619);
-var mergeNonAdjacentByBody = __webpack_require__(36962);
-var mergeNonAdjacentBySelector = __webpack_require__(29377);
-var reduceNonAdjacent = __webpack_require__(75472);
-var removeDuplicateFontAtRules = __webpack_require__(61480);
-var removeDuplicateMediaQueries = __webpack_require__(76712);
-var removeDuplicates = __webpack_require__(15169);
-var removeUnusedAtRules = __webpack_require__(90329);
-var restructure = __webpack_require__(43002);
-
-var optimizeProperties = __webpack_require__(97847);
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-var Token = __webpack_require__(44633);
-
-function removeEmpty(tokens) {
-  for (var i = 0, l = tokens.length; i < l; i++) {
-    var token = tokens[i];
-    var isEmpty = false;
-
-    switch (token[0]) {
-    case Token.RULE:
-      isEmpty = token[1].length === 0 || token[2].length === 0;
-      break;
-    case Token.NESTED_BLOCK:
-      removeEmpty(token[2]);
-      isEmpty = token[2].length === 0;
-      break;
-    case Token.AT_RULE:
-      isEmpty = token[1].length === 0;
-      break;
-    case Token.AT_RULE_BLOCK:
-      isEmpty = token[2].length === 0;
-    }
-
-    if (isEmpty) {
-      tokens.splice(i, 1);
-      i--;
-      l--;
-    }
-  }
-}
-
-function recursivelyOptimizeBlocks(tokens, context) {
-  for (var i = 0, l = tokens.length; i < l; i++) {
-    var token = tokens[i];
-
-    if (token[0] == Token.NESTED_BLOCK) {
-      var isKeyframes = /@(-moz-|-o-|-webkit-)?keyframes/.test(token[1][0][1]);
-      level2Optimize(token[2], context, !isKeyframes);
-    }
-  }
-}
-
-function recursivelyOptimizeProperties(tokens, context) {
-  for (var i = 0, l = tokens.length; i < l; i++) {
-    var token = tokens[i];
-
-    switch (token[0]) {
-    case Token.RULE:
-      optimizeProperties(token[2], true, true, context);
-      break;
-    case Token.NESTED_BLOCK:
-      recursivelyOptimizeProperties(token[2], context);
-    }
-  }
-}
-
-function level2Optimize(tokens, context, withRestructuring) {
-  var levelOptions = context.options.level[OptimizationLevel.Two];
-  var level2Plugins = context.options.plugins.level2Block;
-  var reduced;
-  var i;
-
-  recursivelyOptimizeBlocks(tokens, context);
-  recursivelyOptimizeProperties(tokens, context);
-
-  if (levelOptions.removeDuplicateRules) {
-    removeDuplicates(tokens, context);
-  }
-
-  if (levelOptions.mergeAdjacentRules) {
-    mergeAdjacent(tokens, context);
-  }
-
-  if (levelOptions.reduceNonAdjacentRules) {
-    reduceNonAdjacent(tokens, context);
-  }
-
-  if (levelOptions.mergeNonAdjacentRules && levelOptions.mergeNonAdjacentRules != 'body') {
-    mergeNonAdjacentBySelector(tokens, context);
-  }
-
-  if (levelOptions.mergeNonAdjacentRules && levelOptions.mergeNonAdjacentRules != 'selector') {
-    mergeNonAdjacentByBody(tokens, context);
-  }
-
-  if (levelOptions.restructureRules && levelOptions.mergeAdjacentRules && withRestructuring) {
-    restructure(tokens, context);
-    mergeAdjacent(tokens, context);
-  }
-
-  if (levelOptions.restructureRules && !levelOptions.mergeAdjacentRules && withRestructuring) {
-    restructure(tokens, context);
-  }
-
-  if (levelOptions.removeDuplicateFontRules) {
-    removeDuplicateFontAtRules(tokens, context);
-  }
-
-  if (levelOptions.removeDuplicateMediaBlocks) {
-    removeDuplicateMediaQueries(tokens, context);
-  }
-
-  if (levelOptions.removeUnusedAtRules) {
-    removeUnusedAtRules(tokens, context);
-  }
-
-  if (levelOptions.mergeMedia) {
-    reduced = mergeMediaQueries(tokens, context);
-    for (i = reduced.length - 1; i >= 0; i--) {
-      level2Optimize(reduced[i][2], context, false);
-    }
-  }
-
-  for (i = 0; i < level2Plugins.length; i++) {
-    level2Plugins[i](tokens);
-  }
-
-  if (levelOptions.removeEmpty) {
-    removeEmpty(tokens);
-  }
-
-  return tokens;
-}
-
-module.exports = level2Optimize;
-
-
-/***/ }),
-
-/***/ 13641:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Marker = __webpack_require__(53820);
-
-function everyValuesPair(fn, left, right) {
-  var leftSize = left.value.length;
-  var rightSize = right.value.length;
-  var total = Math.max(leftSize, rightSize);
-  var lowerBound = Math.min(leftSize, rightSize) - 1;
-  var leftValue;
-  var rightValue;
-  var position;
-
-  for (position = 0; position < total; position++) {
-    leftValue = left.value[position] && left.value[position][1] || leftValue;
-    rightValue = right.value[position] && right.value[position][1] || rightValue;
-
-    if (leftValue == Marker.COMMA || rightValue == Marker.COMMA) {
-      continue;
-    }
-
-    if (!fn(leftValue, rightValue, position, position <= lowerBound)) {
-      return false;
-    }
-  }
-
-  return true;
-}
-
-module.exports = everyValuesPair;
-
-
-/***/ }),
-
-/***/ 64790:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var configuration = __webpack_require__(6058);
-
-function findComponentIn(shorthand, longhand) {
-  var comparator = nameComparator(longhand);
-
-  return findInDirectComponents(shorthand, comparator) || findInSubComponents(shorthand, comparator);
-}
-
-function nameComparator(to) {
-  return function(property) {
-    return to.name === property.name;
-  };
-}
-
-function findInDirectComponents(shorthand, comparator) {
-  return shorthand.components.filter(comparator)[0];
-}
-
-function findInSubComponents(shorthand, comparator) {
-  var shorthandComponent;
-  var longhandMatch;
-  var i, l;
-
-  if (!configuration[shorthand.name].shorthandComponents) {
-    return;
-  }
-
-  for (i = 0, l = shorthand.components.length; i < l; i++) {
-    shorthandComponent = shorthand.components[i];
-    longhandMatch = findInDirectComponents(shorthandComponent, comparator);
-
-    if (longhandMatch) {
-      return longhandMatch;
-    }
-  }
-}
-
-module.exports = findComponentIn;
-
-
-/***/ }),
-
-/***/ 95417:
-/***/ ((module) => {
-
-function hasInherit(property) {
-  for (var i = property.value.length - 1; i >= 0; i--) {
-    if (property.value[i][1] == 'inherit') { return true; }
-  }
-
-  return false;
-}
-
-module.exports = hasInherit;
-
-
-/***/ }),
-
-/***/ 88594:
-/***/ ((module) => {
-
-function hasSameValues(property) {
-  var firstValue = property.value[0][1];
-  var i, l;
-
-  for (i = 1, l = property.value.length; i < l; i++) {
-    if (property.value[i][1] != firstValue) {
-      return false;
-    }
-  }
-
-  return true;
-}
-
-module.exports = hasSameValues;
-
-
-/***/ }),
-
-/***/ 30256:
-/***/ ((module) => {
-
-function hasUnset(property) {
-  for (var i = property.value.length - 1; i >= 0; i--) {
-    if (property.value[i][1] == 'unset') { return true; }
-  }
-
-  return false;
-}
-
-module.exports = hasUnset;
-
-
-/***/ }),
-
-/***/ 43462:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var configuration = __webpack_require__(6058);
-
-function isComponentOf(property1, property2, shallow) {
-  return isDirectComponentOf(property1, property2)
-    || !shallow && !!configuration[property1.name].shorthandComponents && isSubComponentOf(property1, property2);
-}
-
-function isDirectComponentOf(property1, property2) {
-  var descriptor = configuration[property1.name];
-
-  return 'components' in descriptor && descriptor.components.indexOf(property2.name) > -1;
-}
-
-function isSubComponentOf(property1, property2) {
-  return property1
-    .components
-    .some(function(component) {
-      return isDirectComponentOf(component, property2);
-    });
-}
-
-module.exports = isComponentOf;
-
-
-/***/ }),
-
-/***/ 39036:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Marker = __webpack_require__(53820);
-
-function isMergeableShorthand(shorthand) {
-  if (shorthand.name != 'font') {
-    return true;
-  }
-
-  return shorthand.value[0][1].indexOf(Marker.INTERNAL) == -1;
-}
-
-module.exports = isMergeableShorthand;
-
-
-/***/ }),
-
-/***/ 77464:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var everyValuesPair = __webpack_require__(13641);
-var hasInherit = __webpack_require__(95417);
-var hasSameValues = __webpack_require__(88594);
-var populateComponents = __webpack_require__(71621);
-
-var configuration = __webpack_require__(6058);
-var deepClone = (__webpack_require__(48315).deep);
-var restoreWithComponents = __webpack_require__(40733);
-
-var restoreFromOptimizing = __webpack_require__(32700);
-var wrapSingle = (__webpack_require__(93684).single);
-
-var serializeBody = (__webpack_require__(73694).body);
-var Token = __webpack_require__(44633);
-
-function mergeIntoShorthands(properties, validator) {
-  var candidates = {};
-  var descriptor;
-  var componentOf;
-  var property;
-  var i, l;
-  var j, m;
-
-  // there is no shorthand property made up of less than 3 longhands
-  if (properties.length < 3) {
-    return;
-  }
-
-  for (i = 0, l = properties.length; i < l; i++) {
-    property = properties[i];
-    descriptor = configuration[property.name];
-
-    if (property.dynamic) {
-      continue;
-    }
-
-    if (property.unused) {
-      continue;
-    }
-
-    if (property.hack) {
-      continue;
-    }
-
-    if (property.block) {
-      continue;
-    }
-
-    if (descriptor && descriptor.singleTypeComponents && !hasSameValues(property)) {
-      continue;
-    }
-
-    invalidateOrCompact(properties, i, candidates, validator);
-
-    if (descriptor && descriptor.componentOf) {
-      for (j = 0, m = descriptor.componentOf.length; j < m; j++) {
-        componentOf = descriptor.componentOf[j];
-
-        candidates[componentOf] = candidates[componentOf] || {};
-        candidates[componentOf][property.name] = property;
-      }
-    }
-  }
-
-  invalidateOrCompact(properties, i, candidates, validator);
-}
-
-function invalidateOrCompact(properties, position, candidates, validator) {
-  var invalidatedBy = properties[position];
-  var shorthandName;
-  var shorthandDescriptor;
-  var candidateComponents;
-  var replacedCandidates = [];
-  var i;
-
-  for (shorthandName in candidates) {
-    if (undefined !== invalidatedBy && shorthandName == invalidatedBy.name) {
-      continue;
-    }
-
-    shorthandDescriptor = configuration[shorthandName];
-    candidateComponents = candidates[shorthandName];
-    if (invalidatedBy && invalidates(candidates, shorthandName, invalidatedBy)) {
-      delete candidates[shorthandName];
-      continue;
-    }
-
-    if (shorthandDescriptor.components.length > Object.keys(candidateComponents).length) {
-      continue;
-    }
-
-    if (mixedImportance(candidateComponents)) {
-      continue;
-    }
-
-    if (!overridable(candidateComponents, shorthandName, validator)) {
-      continue;
-    }
-
-    if (!mergeable(candidateComponents)) {
-      continue;
-    }
-
-    if (mixedInherit(candidateComponents)) {
-      replaceWithInheritBestFit(properties, candidateComponents, shorthandName, validator);
-    } else {
-      replaceWithShorthand(properties, candidateComponents, shorthandName, validator);
-    }
-
-    replacedCandidates.push(shorthandName);
-  }
-
-  for (i = replacedCandidates.length - 1; i >= 0; i--) {
-    delete candidates[replacedCandidates[i]];
-  }
-}
-
-function invalidates(candidates, shorthandName, invalidatedBy) {
-  var shorthandDescriptor = configuration[shorthandName];
-  var invalidatedByDescriptor = configuration[invalidatedBy.name];
-  var componentName;
-
-  if ('overridesShorthands' in shorthandDescriptor && shorthandDescriptor.overridesShorthands.indexOf(invalidatedBy.name) > -1) {
-    return true;
-  }
-
-  if (invalidatedByDescriptor && 'componentOf' in invalidatedByDescriptor) {
-    for (componentName in candidates[shorthandName]) {
-      if (invalidatedByDescriptor.componentOf.indexOf(componentName) > -1) {
-        return true;
-      }
-    }
-  }
-
-  return false;
-}
-
-function mixedImportance(components) {
-  var important;
-  var componentName;
-
-  for (componentName in components) {
-    if (undefined !== important && components[componentName].important != important) {
-      return true;
-    }
-
-    important = components[componentName].important;
-  }
-
-  return false;
-}
-
-function overridable(components, shorthandName, validator) {
-  var descriptor = configuration[shorthandName];
-  var newValuePlaceholder = [
-    Token.PROPERTY,
-    [Token.PROPERTY_NAME, shorthandName],
-    [Token.PROPERTY_VALUE, descriptor.defaultValue]
-  ];
-  var newProperty = wrapSingle(newValuePlaceholder);
-  var component;
-  var mayOverride;
-  var i, l;
-
-  populateComponents([newProperty], validator, []);
-
-  for (i = 0, l = descriptor.components.length; i < l; i++) {
-    component = components[descriptor.components[i]];
-    mayOverride = configuration[component.name].canOverride || sameValue;
-
-    if (!everyValuesPair(mayOverride.bind(null, validator), newProperty.components[i], component)) {
-      return false;
-    }
-  }
-
-  return true;
-}
-
-function sameValue(_validator, value1, value2) {
-  return value1 === value2;
-}
-
-function mergeable(components) {
-  var lastCount = null;
-  var currentCount;
-  var componentName;
-  var component;
-  var descriptor;
-  var values;
-
-  for (componentName in components) {
-    component = components[componentName];
-    descriptor = configuration[componentName];
-
-    if (!('restore' in descriptor)) {
-      continue;
-    }
-
-    restoreFromOptimizing([component.all[component.position]], restoreWithComponents);
-    values = descriptor.restore(component, configuration);
-
-    currentCount = values.length;
-
-    if (lastCount !== null && currentCount !== lastCount) {
-      return false;
-    }
-
-    lastCount = currentCount;
-  }
-
-  return true;
-}
-
-function mixedInherit(components) {
-  var componentName;
-  var lastValue = null;
-  var currentValue;
-
-  for (componentName in components) {
-    currentValue = hasInherit(components[componentName]);
-
-    if (lastValue !== null && lastValue !== currentValue) {
-      return true;
-    }
-
-    lastValue = currentValue;
-  }
-
-  return false;
-}
-
-function replaceWithInheritBestFit(properties, candidateComponents, shorthandName, validator) {
-  var viaLonghands = buildSequenceWithInheritLonghands(candidateComponents, shorthandName, validator);
-  var viaShorthand = buildSequenceWithInheritShorthand(candidateComponents, shorthandName, validator);
-  var longhandTokensSequence = viaLonghands[0];
-  var shorthandTokensSequence = viaShorthand[0];
-  var isLonghandsShorter = serializeBody(longhandTokensSequence).length < serializeBody(shorthandTokensSequence).length;
-  var newTokensSequence = isLonghandsShorter ? longhandTokensSequence : shorthandTokensSequence;
-  var newProperty = isLonghandsShorter ? viaLonghands[1] : viaShorthand[1];
-  var newComponents = isLonghandsShorter ? viaLonghands[2] : viaShorthand[2];
-  var lastComponent = candidateComponents[Object.keys(candidateComponents).pop()];
-  var all = lastComponent.all;
-  var insertAt = lastComponent.position;
-  var componentName;
-  var oldComponent;
-  var newComponent;
-  var newToken;
-
-  newProperty.position = insertAt;
-  newProperty.shorthand = true;
-  newProperty.important = lastComponent.important;
-  newProperty.multiplex = false;
-  newProperty.dirty = true;
-  newProperty.all = all;
-  newProperty.all[insertAt] = newTokensSequence[0];
-
-  properties.splice(insertAt, 1, newProperty);
-
-  for (componentName in candidateComponents) {
-    oldComponent = candidateComponents[componentName];
-    oldComponent.unused = true;
-
-    newProperty.multiplex = newProperty.multiplex || oldComponent.multiplex;
-
-    if (oldComponent.name in newComponents) {
-      newComponent = newComponents[oldComponent.name];
-      newToken = findTokenIn(newTokensSequence, componentName);
-
-      newComponent.position = all.length;
-      newComponent.all = all;
-      newComponent.all.push(newToken);
-
-      properties.push(newComponent);
-    }
-  }
-}
-
-function buildSequenceWithInheritLonghands(components, shorthandName, validator) {
-  var tokensSequence = [];
-  var inheritComponents = {};
-  var nonInheritComponents = {};
-  var descriptor = configuration[shorthandName];
-  var shorthandToken = [
-    Token.PROPERTY,
-    [Token.PROPERTY_NAME, shorthandName],
-    [Token.PROPERTY_VALUE, descriptor.defaultValue]
-  ];
-  var newProperty = wrapSingle(shorthandToken);
-  var component;
-  var longhandToken;
-  var newComponent;
-  var nameMetadata;
-  var i, l;
-
-  populateComponents([newProperty], validator, []);
-
-  for (i = 0, l = descriptor.components.length; i < l; i++) {
-    component = components[descriptor.components[i]];
-
-    if (hasInherit(component)) {
-      longhandToken = component.all[component.position].slice(0, 2);
-      Array.prototype.push.apply(longhandToken, component.value);
-      tokensSequence.push(longhandToken);
-
-      newComponent = deepClone(component);
-      newComponent.value = inferComponentValue(components, newComponent.name);
-
-      newProperty.components[i] = newComponent;
-      inheritComponents[component.name] = deepClone(component);
-    } else {
-      newComponent = deepClone(component);
-      newComponent.all = component.all;
-      newProperty.components[i] = newComponent;
-
-      nonInheritComponents[component.name] = component;
-    }
-  }
-
-  newProperty.important = components[Object.keys(components).pop()].important;
-
-  nameMetadata = joinMetadata(nonInheritComponents, 1);
-  shorthandToken[1].push(nameMetadata);
-
-  restoreFromOptimizing([newProperty], restoreWithComponents);
-
-  shorthandToken = shorthandToken.slice(0, 2);
-  Array.prototype.push.apply(shorthandToken, newProperty.value);
-
-  tokensSequence.unshift(shorthandToken);
-
-  return [tokensSequence, newProperty, inheritComponents];
-}
-
-function inferComponentValue(components, propertyName) {
-  var descriptor = configuration[propertyName];
-
-  if ('oppositeTo' in descriptor) {
-    return components[descriptor.oppositeTo].value;
-  }
-  return [[Token.PROPERTY_VALUE, descriptor.defaultValue]];
-}
-
-function joinMetadata(components, at) {
-  var metadata = [];
-  var component;
-  var originalValue;
-  var componentMetadata;
-  var componentName;
-
-  for (componentName in components) {
-    component = components[componentName];
-    originalValue = component.all[component.position];
-    componentMetadata = originalValue[at][originalValue[at].length - 1];
-
-    Array.prototype.push.apply(metadata, componentMetadata);
-  }
-
-  return metadata.sort(metadataSorter);
-}
-
-function metadataSorter(metadata1, metadata2) {
-  var line1 = metadata1[0];
-  var line2 = metadata2[0];
-  var column1 = metadata1[1];
-  var column2 = metadata2[1];
-
-  if (line1 < line2) {
-    return -1;
-  } if (line1 === line2) {
-    return column1 < column2 ? -1 : 1;
-  }
-  return 1;
-}
-
-function buildSequenceWithInheritShorthand(components, shorthandName, validator) {
-  var tokensSequence = [];
-  var inheritComponents = {};
-  var nonInheritComponents = {};
-  var descriptor = configuration[shorthandName];
-  var shorthandToken = [
-    Token.PROPERTY,
-    [Token.PROPERTY_NAME, shorthandName],
-    [Token.PROPERTY_VALUE, 'inherit']
-  ];
-  var newProperty = wrapSingle(shorthandToken);
-  var component;
-  var longhandToken;
-  var nameMetadata;
-  var valueMetadata;
-  var i, l;
-
-  populateComponents([newProperty], validator, []);
-
-  for (i = 0, l = descriptor.components.length; i < l; i++) {
-    component = components[descriptor.components[i]];
-
-    if (hasInherit(component)) {
-      inheritComponents[component.name] = component;
-    } else {
-      longhandToken = component.all[component.position].slice(0, 2);
-      Array.prototype.push.apply(longhandToken, component.value);
-      tokensSequence.push(longhandToken);
-
-      nonInheritComponents[component.name] = deepClone(component);
-    }
-  }
-
-  nameMetadata = joinMetadata(inheritComponents, 1);
-  shorthandToken[1].push(nameMetadata);
-
-  valueMetadata = joinMetadata(inheritComponents, 2);
-  shorthandToken[2].push(valueMetadata);
-
-  tokensSequence.unshift(shorthandToken);
-
-  return [tokensSequence, newProperty, nonInheritComponents];
-}
-
-function findTokenIn(tokens, componentName) {
-  var i, l;
-
-  for (i = 0, l = tokens.length; i < l; i++) {
-    if (tokens[i][1][1] == componentName) {
-      return tokens[i];
-    }
-  }
-}
-
-function replaceWithShorthand(properties, candidateComponents, shorthandName, validator) {
-  var descriptor = configuration[shorthandName];
-  var nameMetadata;
-  var valueMetadata;
-  var newValuePlaceholder = [
-    Token.PROPERTY,
-    [Token.PROPERTY_NAME, shorthandName],
-    [Token.PROPERTY_VALUE, descriptor.defaultValue]
-  ];
-  var all;
-  var insertAt = inferInsertAtFrom(properties, candidateComponents, shorthandName);
-
-  var newProperty = wrapSingle(newValuePlaceholder);
-  newProperty.shorthand = true;
-  newProperty.dirty = true;
-  newProperty.multiplex = false;
-
-  populateComponents([newProperty], validator, []);
-
-  for (var i = 0, l = descriptor.components.length; i < l; i++) {
-    var component = candidateComponents[descriptor.components[i]];
-
-    newProperty.components[i] = deepClone(component);
-    newProperty.important = component.important;
-    newProperty.multiplex = newProperty.multiplex || component.multiplex;
-
-    all = component.all;
-  }
-
-  for (var componentName in candidateComponents) {
-    candidateComponents[componentName].unused = true;
-  }
-
-  nameMetadata = joinMetadata(candidateComponents, 1);
-  newValuePlaceholder[1].push(nameMetadata);
-
-  valueMetadata = joinMetadata(candidateComponents, 2);
-  newValuePlaceholder[2].push(valueMetadata);
-
-  newProperty.position = insertAt;
-  newProperty.all = all;
-  newProperty.all[insertAt] = newValuePlaceholder;
-
-  properties.splice(insertAt, 1, newProperty);
-}
-
-function inferInsertAtFrom(properties, candidateComponents, shorthandName) {
-  var candidateComponentNames = Object.keys(candidateComponents);
-  var firstCandidatePosition = candidateComponents[candidateComponentNames[0]].position;
-  var lastCandidatePosition = candidateComponents[candidateComponentNames[candidateComponentNames.length - 1]].position;
-
-  if (shorthandName == 'border' && traversesVia(properties.slice(firstCandidatePosition, lastCandidatePosition), 'border-image')) {
-    return firstCandidatePosition;
-  }
-  return lastCandidatePosition;
-}
-
-function traversesVia(properties, propertyName) {
-  for (var i = properties.length - 1; i >= 0; i--) {
-    if (properties[i].name == propertyName) {
-      return true;
-    }
-  }
-
-  return false;
-}
-
-module.exports = mergeIntoShorthands;
-
-
-/***/ }),
-
-/***/ 97847:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var mergeIntoShorthands = __webpack_require__(77464);
-var overrideProperties = __webpack_require__(70136);
-var populateComponents = __webpack_require__(71621);
-
-var restoreWithComponents = __webpack_require__(40733);
-
-var wrapForOptimizing = (__webpack_require__(93684).all);
-var removeUnused = __webpack_require__(556);
-var restoreFromOptimizing = __webpack_require__(32700);
-
-var OptimizationLevel = (__webpack_require__(21905).OptimizationLevel);
-
-function optimizeProperties(properties, withOverriding, withMerging, context) {
-  var levelOptions = context.options.level[OptimizationLevel.Two];
-  var _properties = wrapForOptimizing(properties, levelOptions.skipProperties);
-  var _property;
-  var i, l;
-
-  populateComponents(_properties, context.validator, context.warnings);
-
-  for (i = 0, l = _properties.length; i < l; i++) {
-    _property = _properties[i];
-    if (_property.block) {
-      optimizeProperties(_property.value[0][1], withOverriding, withMerging, context);
-    }
-  }
-
-  if (withMerging && levelOptions.mergeIntoShorthands) {
-    mergeIntoShorthands(_properties, context.validator);
-  }
-
-  if (withOverriding && levelOptions.overrideProperties) {
-    overrideProperties(_properties, withMerging, context.options.compatibility, context.validator);
-  }
-
-  restoreFromOptimizing(_properties, restoreWithComponents);
-  removeUnused(_properties);
-}
-
-module.exports = optimizeProperties;
-
-
-/***/ }),
-
-/***/ 70136:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var hasInherit = __webpack_require__(95417);
-var hasUnset = __webpack_require__(30256);
-var everyValuesPair = __webpack_require__(13641);
-var findComponentIn = __webpack_require__(64790);
-var isComponentOf = __webpack_require__(43462);
-var isMergeableShorthand = __webpack_require__(39036);
-var overridesNonComponentShorthand = __webpack_require__(40188);
-var sameVendorPrefixesIn = (__webpack_require__(21200).same);
-
-var configuration = __webpack_require__(6058);
-var deepClone = (__webpack_require__(48315).deep);
-var restoreWithComponents = __webpack_require__(40733);
-var shallowClone = (__webpack_require__(48315).shallow);
-
-var restoreFromOptimizing = __webpack_require__(32700);
-
-var Token = __webpack_require__(44633);
-var Marker = __webpack_require__(53820);
-
-var serializeProperty = (__webpack_require__(73694).property);
-
-function sameValue(_validator, value1, value2) {
-  return value1 === value2;
-}
-
-function wouldBreakCompatibility(property, validator) {
-  for (var i = 0; i < property.components.length; i++) {
-    var component = property.components[i];
-    var descriptor = configuration[component.name];
-    var canOverride = descriptor && descriptor.canOverride || sameValue;
-
-    var _component = shallowClone(component);
-    _component.value = [[Token.PROPERTY_VALUE, descriptor.defaultValue]];
-
-    if (!everyValuesPair(canOverride.bind(null, validator), _component, component)) {
-      return true;
-    }
-  }
-
-  return false;
-}
-
-function overrideIntoMultiplex(property, by) {
-  by.unused = true;
-
-  turnIntoMultiplex(by, multiplexSize(property));
-  property.value = by.value;
-}
-
-function overrideByMultiplex(property, by) {
-  by.unused = true;
-  property.multiplex = true;
-  property.value = by.value;
-}
-
-function overrideSimple(property, by) {
-  by.unused = true;
-  property.value = by.value;
-}
-
-function override(property, by) {
-  if (by.multiplex) {
-    overrideByMultiplex(property, by);
-  } else if (property.multiplex) {
-    overrideIntoMultiplex(property, by);
-  } else {
-    overrideSimple(property, by);
-  }
-}
-
-function overrideShorthand(property, by) {
-  by.unused = true;
-
-  for (var i = 0, l = property.components.length; i < l; i++) {
-    override(property.components[i], by.components[i]);
-  }
-}
-
-function turnIntoMultiplex(property, size) {
-  property.multiplex = true;
-
-  if (configuration[property.name].shorthand) {
-    turnShorthandValueIntoMultiplex(property, size);
-  } else {
-    turnLonghandValueIntoMultiplex(property, size);
-  }
-}
-
-function turnShorthandValueIntoMultiplex(property, size) {
-  var component;
-  var i, l;
-
-  for (i = 0, l = property.components.length; i < l; i++) {
-    component = property.components[i];
-
-    if (!component.multiplex) {
-      turnLonghandValueIntoMultiplex(component, size);
-    }
-  }
-}
-
-function turnLonghandValueIntoMultiplex(property, size) {
-  var descriptor = configuration[property.name];
-  var withRealValue = descriptor.intoMultiplexMode == 'real';
-  var withValue = descriptor.intoMultiplexMode == 'real'
-    ? property.value.slice(0)
-    : (descriptor.intoMultiplexMode == 'placeholder' ? descriptor.placeholderValue : descriptor.defaultValue);
-  var i = multiplexSize(property);
-  var j;
-  var m = withValue.length;
-
-  for (; i < size; i++) {
-    property.value.push([Token.PROPERTY_VALUE, Marker.COMMA]);
-
-    if (Array.isArray(withValue)) {
-      for (j = 0; j < m; j++) {
-        property.value.push(withRealValue ? withValue[j] : [Token.PROPERTY_VALUE, withValue[j]]);
-      }
-    } else {
-      property.value.push(withRealValue ? withValue : [Token.PROPERTY_VALUE, withValue]);
-    }
-  }
-}
-
-function multiplexSize(component) {
-  var size = 0;
-
-  for (var i = 0, l = component.value.length; i < l; i++) {
-    if (component.value[i][1] == Marker.COMMA) { size++; }
-  }
-
-  return size + 1;
-}
-
-function lengthOf(property) {
-  var fakeAsArray = [
-    Token.PROPERTY,
-    [Token.PROPERTY_NAME, property.name]
-  ].concat(property.value);
-  return serializeProperty([fakeAsArray], 0).length;
-}
-
-function moreSameShorthands(properties, startAt, name) {
-  // Since we run the main loop in `compactOverrides` backwards, at this point some
-  // properties may not be marked as unused.
-  // We should consider reverting the order if possible
-  var count = 0;
-
-  for (var i = startAt; i >= 0; i--) {
-    if (properties[i].name == name && !properties[i].unused) { count++; }
-    if (count > 1) { break; }
-  }
-
-  return count > 1;
-}
-
-function overridingFunction(shorthand, validator) {
-  for (var i = 0, l = shorthand.components.length; i < l; i++) {
-    if (!anyValue(validator.isUrl, shorthand.components[i])
-      && anyValue(validator.isFunction, shorthand.components[i])) { return true; }
-  }
-
-  return false;
-}
-
-function anyValue(fn, property) {
-  for (var i = 0, l = property.value.length; i < l; i++) {
-    if (property.value[i][1] == Marker.COMMA) { continue; }
-
-    if (fn(property.value[i][1])) { return true; }
-  }
-
-  return false;
-}
-
-function wouldResultInLongerValue(left, right) {
-  if (!left.multiplex && !right.multiplex || left.multiplex && right.multiplex) { return false; }
-
-  var multiplex = left.multiplex ? left : right;
-  var simple = left.multiplex ? right : left;
-  var component;
-
-  var multiplexClone = deepClone(multiplex);
-  restoreFromOptimizing([multiplexClone], restoreWithComponents);
-
-  var simpleClone = deepClone(simple);
-  restoreFromOptimizing([simpleClone], restoreWithComponents);
-
-  var lengthBefore = lengthOf(multiplexClone) + 1 + lengthOf(simpleClone);
-
-  if (left.multiplex) {
-    component = findComponentIn(multiplexClone, simpleClone);
-    overrideIntoMultiplex(component, simpleClone);
-  } else {
-    component = findComponentIn(simpleClone, multiplexClone);
-    turnIntoMultiplex(simpleClone, multiplexSize(multiplexClone));
-    overrideByMultiplex(component, multiplexClone);
-  }
-
-  restoreFromOptimizing([simpleClone], restoreWithComponents);
-
-  var lengthAfter = lengthOf(simpleClone);
-
-  return lengthBefore <= lengthAfter;
-}
-
-function isCompactable(property) {
-  return property.name in configuration;
-}
-
-function noneOverrideHack(left, right) {
-  return !left.multiplex
-    && (left.name == 'background' || left.name == 'background-image')
-    && right.multiplex
-    && (right.name == 'background' || right.name == 'background-image')
-    && anyLayerIsNone(right.value);
-}
-
-function anyLayerIsNone(values) {
-  var layers = intoLayers(values);
-
-  for (var i = 0, l = layers.length; i < l; i++) {
-    if (layers[i].length == 1 && layers[i][0][1] == 'none') { return true; }
-  }
-
-  return false;
-}
-
-function intoLayers(values) {
-  var layers = [];
-
-  for (var i = 0, layer = [], l = values.length; i < l; i++) {
-    var value = values[i];
-    if (value[1] == Marker.COMMA) {
-      layers.push(layer);
-      layer = [];
-    } else {
-      layer.push(value);
-    }
-  }
-
-  layers.push(layer);
-  return layers;
-}
-
-function overrideProperties(properties, withMerging, compatibility, validator) {
-  var mayOverride, right, left, component;
-  var overriddenComponents;
-  var overriddenComponent;
-  var overridingComponent;
-  var overridable;
-  var i, j, k;
-
-  propertyLoop:
-  for (i = properties.length - 1; i >= 0; i--) {
-    right = properties[i];
-
-    if (!isCompactable(right)) { continue; }
-
-    if (right.block) { continue; }
-
-    mayOverride = configuration[right.name].canOverride || sameValue;
-
-    traverseLoop:
-    for (j = i - 1; j >= 0; j--) {
-      left = properties[j];
-
-      if (!isCompactable(left)) { continue; }
-
-      if (left.block) { continue; }
-
-      if (left.dynamic || right.dynamic) { continue; }
-
-      if (left.unused || right.unused) { continue; }
-
-      if (left.hack && !right.hack && !right.important || !left.hack && !left.important && right.hack) { continue; }
-
-      if (left.important == right.important && left.hack[0] != right.hack[0]) { continue; }
-
-      if (left.important == right.important
-        && (left.hack[0] != right.hack[0] || (left.hack[1] && left.hack[1] != right.hack[1]))) { continue; }
-
-      if (hasInherit(right)) { continue; }
-
-      if (noneOverrideHack(left, right)) { continue; }
-
-      if (right.shorthand && isComponentOf(right, left)) {
-        // maybe `left` can be overridden by `right` which is a shorthand?
-        if (!right.important && left.important) { continue; }
-
-        if (!sameVendorPrefixesIn([left], right.components)) { continue; }
-
-        if (!anyValue(validator.isFunction, left) && overridingFunction(right, validator)) { continue; }
-
-        if (!isMergeableShorthand(right)) {
-          left.unused = true;
-          continue;
-        }
-
-        component = findComponentIn(right, left);
-        mayOverride = configuration[left.name].canOverride || sameValue;
-        if (everyValuesPair(mayOverride.bind(null, validator), left, component)) {
-          left.unused = true;
-        }
-      } else if (right.shorthand && overridesNonComponentShorthand(right, left)) {
-        // `right` is a shorthand while `left` can be overriden by it, think `border` and `border-top`
-        if (!right.important && left.important) {
-          continue;
-        }
-
-        if (!sameVendorPrefixesIn([left], right.components)) {
-          continue;
-        }
-
-        if (!anyValue(validator.isFunction, left) && overridingFunction(right, validator)) {
-          continue;
-        }
-
-        overriddenComponents = left.shorthand
-          ? left.components
-          : [left];
-
-        for (k = overriddenComponents.length - 1; k >= 0; k--) {
-          overriddenComponent = overriddenComponents[k];
-          overridingComponent = findComponentIn(right, overriddenComponent);
-          mayOverride = configuration[overriddenComponent.name].canOverride || sameValue;
-
-          if (!everyValuesPair(mayOverride.bind(null, validator), left, overridingComponent)) {
-            continue traverseLoop;
-          }
-        }
-
-        left.unused = true;
-      } else if (withMerging && left.shorthand && !right.shorthand && isComponentOf(left, right, true)) {
-        // maybe `right` can be pulled into `left` which is a shorthand?
-        if (right.important && !left.important) { continue; }
-
-        if (!right.important && left.important) {
-          right.unused = true;
-          continue;
-        }
-
-        // Pending more clever algorithm in #527
-        if (moreSameShorthands(properties, i - 1, left.name)) { continue; }
-
-        if (overridingFunction(left, validator)) { continue; }
-
-        if (!isMergeableShorthand(left)) { continue; }
-
-        if (hasUnset(left) || hasUnset(right)) { continue; }
-
-        component = findComponentIn(left, right);
-        if (everyValuesPair(mayOverride.bind(null, validator), component, right)) {
-          var disabledBackgroundMerging = !compatibility.properties.backgroundClipMerging && component.name.indexOf('background-clip') > -1
-            || !compatibility.properties.backgroundOriginMerging && component.name.indexOf('background-origin') > -1
-            || !compatibility.properties.backgroundSizeMerging && component.name.indexOf('background-size') > -1;
-          var nonMergeableValue = configuration[right.name].nonMergeableValue === right.value[0][1];
-
-          if (disabledBackgroundMerging || nonMergeableValue) { continue; }
-
-          if (!compatibility.properties.merging && wouldBreakCompatibility(left, validator)) { continue; }
-
-          if (component.value[0][1] != right.value[0][1] && (hasInherit(left) || hasInherit(right))) { continue; }
-
-          if (wouldResultInLongerValue(left, right)) { continue; }
-
-          if (!left.multiplex && right.multiplex) { turnIntoMultiplex(left, multiplexSize(right)); }
-
-          override(component, right);
-          left.dirty = true;
-        }
-      } else if (withMerging && left.shorthand && right.shorthand && left.name == right.name) {
-        // merge if all components can be merged
-
-        if (!left.multiplex && right.multiplex) { continue; }
-
-        if (!right.important && left.important) {
-          right.unused = true;
-          continue propertyLoop;
-        }
-
-        if (right.important && !left.important) {
-          left.unused = true;
-          continue;
-        }
-
-        if (!isMergeableShorthand(right)) {
-          left.unused = true;
-          continue;
-        }
-
-        for (k = left.components.length - 1; k >= 0; k--) {
-          var leftComponent = left.components[k];
-          var rightComponent = right.components[k];
-
-          mayOverride = configuration[leftComponent.name].canOverride || sameValue;
-          if (!everyValuesPair(mayOverride.bind(null, validator), leftComponent, rightComponent)) {
-            continue propertyLoop;
-          }
-        }
-
-        overrideShorthand(left, right);
-        left.dirty = true;
-      } else if (withMerging && left.shorthand && right.shorthand && isComponentOf(left, right)) {
-        // border is a shorthand but any of its components is a shorthand too
-
-        if (!left.important && right.important) { continue; }
-
-        component = findComponentIn(left, right);
-        mayOverride = configuration[right.name].canOverride || sameValue;
-        if (!everyValuesPair(mayOverride.bind(null, validator), component, right)) { continue; }
-
-        if (left.important && !right.important) {
-          right.unused = true;
-          continue;
-        }
-
-        var rightRestored = configuration[right.name].restore(right, configuration);
-        if (rightRestored.length > 1) { continue; }
-
-        component = findComponentIn(left, right);
-        override(component, right);
-        right.dirty = true;
-      } else if (left.name == right.name) {
-        // two non-shorthands should be merged based on understandability
-        overridable = true;
-
-        if (right.shorthand) {
-          for (k = right.components.length - 1; k >= 0 && overridable; k--) {
-            overriddenComponent = left.components[k];
-            overridingComponent = right.components[k];
-            mayOverride = configuration[overridingComponent.name].canOverride || sameValue;
-
-            overridable = everyValuesPair(mayOverride.bind(null, validator), overriddenComponent, overridingComponent);
-          }
-        } else {
-          mayOverride = configuration[right.name].canOverride || sameValue;
-          overridable = everyValuesPair(mayOverride.bind(null, validator), left, right);
-        }
-
-        if (left.important && !right.important && overridable) {
-          right.unused = true;
-          continue;
-        }
-
-        if (!left.important && right.important && overridable) {
-          left.unused = true;
-          continue;
-        }
-
-        if (!overridable) {
-          continue;
-        }
-
-        left.unused = true;
-      }
-    }
-  }
-}
-
-module.exports = overrideProperties;
-
-
-/***/ }),
-
-/***/ 40188:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var configuration = __webpack_require__(6058);
-
-function overridesNonComponentShorthand(property1, property2) {
-  return property1.name in configuration
-    && 'overridesShorthands' in configuration[property1.name]
-    && configuration[property1.name].overridesShorthands.indexOf(property2.name) > -1;
-}
-
-module.exports = overridesNonComponentShorthand;
-
-
-/***/ }),
-
-/***/ 71621:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var configuration = __webpack_require__(6058);
-var InvalidPropertyError = __webpack_require__(5942);
-
-function populateComponents(properties, validator, warnings) {
-  var component;
-  var j, m;
-
-  for (var i = properties.length - 1; i >= 0; i--) {
-    var property = properties[i];
-    var descriptor = configuration[property.name];
-
-    if (!property.dynamic && descriptor && descriptor.shorthand) {
-      if (onlyValueIsVariable(property, validator) || moreThanOneValueIsVariable(property, validator)) {
-        property.optimizable = false;
-        continue;
-      }
-
-      property.shorthand = true;
-      property.dirty = true;
-
-      try {
-        property.components = descriptor.breakUp(property, configuration, validator);
-
-        if (descriptor.shorthandComponents) {
-          for (j = 0, m = property.components.length; j < m; j++) {
-            component = property.components[j];
-            component.components = configuration[component.name].breakUp(component, configuration, validator);
-          }
-        }
-      } catch (e) {
-        if (e instanceof InvalidPropertyError) {
-          property.components = []; // this will set property.unused to true below
-          warnings.push(e.message);
-        } else {
-          throw e;
-        }
-      }
-
-      if (property.components.length > 0) {
-        property.multiplex = property.components[0].multiplex;
-      } else {
-        property.unused = true;
-      }
-    }
-  }
-}
-
-function onlyValueIsVariable(property, validator) {
-  return property.value.length == 1 && validator.isVariable(property.value[0][1]);
-}
-
-function moreThanOneValueIsVariable(property, validator) {
-  return property.value.length > 1
-    && property.value.filter(
-      function(value) {
-        return validator.isVariable(value[1]);
-      }
-    ).length > 1;
-}
-
-module.exports = populateComponents;
-
-
-/***/ }),
-
-/***/ 75472:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isMergeable = __webpack_require__(54638);
-
-var optimizeProperties = __webpack_require__(97847);
-
-var cloneArray = __webpack_require__(43449);
-
-var Token = __webpack_require__(44633);
-
-var serializeBody = (__webpack_require__(73694).body);
-var serializeRules = (__webpack_require__(73694).rules);
-
-function reduceNonAdjacent(tokens, context) {
-  var options = context.options;
-  var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
-  var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
-  var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
-  var candidates = {};
-  var repeated = [];
-
-  for (var i = tokens.length - 1; i >= 0; i--) {
-    var token = tokens[i];
-
-    if (token[0] != Token.RULE) {
-      continue;
-    } else if (token[2].length === 0) {
-      continue;
-    }
-
-    var selectorAsString = serializeRules(token[1]);
-    var isComplexAndNotSpecial = token[1].length > 1
-      && isMergeable(selectorAsString, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging);
-    var wrappedSelectors = wrappedSelectorsFrom(token[1]);
-    var selectors = isComplexAndNotSpecial
-      ? [selectorAsString].concat(wrappedSelectors)
-      : [selectorAsString];
-
-    for (var j = 0, m = selectors.length; j < m; j++) {
-      var selector = selectors[j];
-
-      if (!candidates[selector]) { candidates[selector] = []; } else { repeated.push(selector); }
-
-      candidates[selector].push({
-        where: i,
-        list: wrappedSelectors,
-        isPartial: isComplexAndNotSpecial && j > 0,
-        isComplex: isComplexAndNotSpecial && j === 0
-      });
-    }
-  }
-
-  reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context);
-  reduceComplexNonAdjacentCases(tokens, candidates, options, context);
-}
-
-function wrappedSelectorsFrom(list) {
-  var wrapped = [];
-
-  for (var i = 0; i < list.length; i++) {
-    wrapped.push([list[i][1]]);
-  }
-
-  return wrapped;
-}
-
-function reduceSimpleNonAdjacentCases(tokens, repeated, candidates, options, context) {
-  function filterOut(idx, bodies) {
-    return data[idx].isPartial && bodies.length === 0;
-  }
-
-  function reduceBody(token, newBody, processedCount, tokenIdx) {
-    if (!data[processedCount - tokenIdx - 1].isPartial) { token[2] = newBody; }
-  }
-
-  for (var i = 0, l = repeated.length; i < l; i++) {
-    var selector = repeated[i];
-    var data = candidates[selector];
-
-    reduceSelector(tokens, data, {
-      filterOut: filterOut,
-      callback: reduceBody
-    }, options, context);
-  }
-}
-
-function reduceComplexNonAdjacentCases(tokens, candidates, options, context) {
-  var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
-  var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
-  var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
-  var localContext = {};
-
-  function filterOut(idx) {
-    return localContext.data[idx].where < localContext.intoPosition;
-  }
-
-  function collectReducedBodies(token, newBody, processedCount, tokenIdx) {
-    if (tokenIdx === 0) { localContext.reducedBodies.push(newBody); }
-  }
-
-  allSelectors:
-  for (var complexSelector in candidates) {
-    var into = candidates[complexSelector];
-    if (!into[0].isComplex) { continue; }
-
-    var intoPosition = into[into.length - 1].where;
-    var intoToken = tokens[intoPosition];
-    var reducedBodies = [];
-
-    var selectors = isMergeable(complexSelector, mergeablePseudoClasses, mergeablePseudoElements, multiplePseudoMerging)
-      ? into[0].list
-      : [complexSelector];
-
-    localContext.intoPosition = intoPosition;
-    localContext.reducedBodies = reducedBodies;
-
-    for (var j = 0, m = selectors.length; j < m; j++) {
-      var selector = selectors[j];
-      var data = candidates[selector];
-
-      if (data.length < 2) { continue allSelectors; }
-
-      localContext.data = data;
-
-      reduceSelector(tokens, data, {
-        filterOut: filterOut,
-        callback: collectReducedBodies
-      }, options, context);
-
-      if (serializeBody(reducedBodies[reducedBodies.length - 1]) != serializeBody(reducedBodies[0])) {
-        continue allSelectors;
-      }
-    }
-
-    intoToken[2] = reducedBodies[0];
-  }
-}
-
-function reduceSelector(tokens, data, context, options, outerContext) {
-  var bodies = [];
-  var bodiesAsList = [];
-  var processedTokens = [];
-
-  for (var j = data.length - 1; j >= 0; j--) {
-    if (context.filterOut(j, bodies)) { continue; }
-
-    var where = data[j].where;
-    var token = tokens[where];
-    var clonedBody = cloneArray(token[2]);
-
-    bodies = bodies.concat(clonedBody);
-    bodiesAsList.push(clonedBody);
-    processedTokens.push(where);
-  }
-
-  optimizeProperties(bodies, true, false, outerContext);
-
-  var processedCount = processedTokens.length;
-  var propertyIdx = bodies.length - 1;
-  var tokenIdx = processedCount - 1;
-
-  while (tokenIdx >= 0) {
-    if ((tokenIdx === 0
-      || (bodies[propertyIdx] && bodiesAsList[tokenIdx].indexOf(bodies[propertyIdx]) > -1)) && propertyIdx > -1) {
-      propertyIdx--;
-      continue;
-    }
-
-    var newBody = bodies.splice(propertyIdx + 1);
-    context.callback(tokens[processedTokens[tokenIdx]], newBody, processedCount, tokenIdx);
-
-    tokenIdx--;
-  }
-}
-
-module.exports = reduceNonAdjacent;
-
-
-/***/ }),
-
-/***/ 61480:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Token = __webpack_require__(44633);
-
-var serializeAll = (__webpack_require__(73694).all);
-
-var FONT_FACE_SCOPE = '@font-face';
-
-function removeDuplicateFontAtRules(tokens) {
-  var fontAtRules = [];
-  var token;
-  var key;
-  var i, l;
-
-  for (i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
-
-    if (token[0] != Token.AT_RULE_BLOCK && token[1][0][1] != FONT_FACE_SCOPE) {
-      continue;
-    }
-
-    key = serializeAll([token]);
-
-    if (fontAtRules.indexOf(key) > -1) {
-      token[2] = [];
-    } else {
-      fontAtRules.push(key);
-    }
-  }
-}
-
-module.exports = removeDuplicateFontAtRules;
-
-
-/***/ }),
-
-/***/ 76712:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Token = __webpack_require__(44633);
-
-var serializeAll = (__webpack_require__(73694).all);
-var serializeRules = (__webpack_require__(73694).rules);
-
-function removeDuplicateMediaQueries(tokens) {
-  var candidates = {};
-  var candidate;
-  var token;
-  var key;
-  var i, l;
-
-  for (i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
-    if (token[0] != Token.NESTED_BLOCK) {
-      continue;
-    }
-
-    key = serializeRules(token[1]) + '%' + serializeAll(token[2]);
-    candidate = candidates[key];
-
-    if (candidate) {
-      candidate[2] = [];
-    }
-
-    candidates[key] = token;
-  }
-}
-
-module.exports = removeDuplicateMediaQueries;
-
-
-/***/ }),
-
-/***/ 15169:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Token = __webpack_require__(44633);
-
-var serializeBody = (__webpack_require__(73694).body);
-var serializeRules = (__webpack_require__(73694).rules);
-
-function removeDuplicates(tokens) {
-  var matched = {};
-  var moreThanOnce = [];
-  var id, token;
-  var body, bodies;
-
-  for (var i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
-    if (token[0] != Token.RULE) { continue; }
-
-    id = serializeRules(token[1]);
-
-    if (matched[id] && matched[id].length == 1) { moreThanOnce.push(id); } else { matched[id] = matched[id] || []; }
-
-    matched[id].push(i);
-  }
-
-  for (i = 0, l = moreThanOnce.length; i < l; i++) {
-    id = moreThanOnce[i];
-    bodies = [];
-
-    for (var j = matched[id].length - 1; j >= 0; j--) {
-      token = tokens[matched[id][j]];
-      body = serializeBody(token[2]);
-
-      if (bodies.indexOf(body) > -1) { token[2] = []; } else { bodies.push(body); }
-    }
-  }
-}
-
-module.exports = removeDuplicates;
-
-
-/***/ }),
-
-/***/ 90329:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var populateComponents = __webpack_require__(71621);
-
-var wrapForOptimizing = (__webpack_require__(93684).single);
-var restoreFromOptimizing = __webpack_require__(32700);
-
-var Token = __webpack_require__(44633);
-
-var animationNameRegex = /^(-moz-|-o-|-webkit-)?animation-name$/;
-var animationRegex = /^(-moz-|-o-|-webkit-)?animation$/;
-var keyframeRegex = /^@(-moz-|-o-|-webkit-)?keyframes /;
-var importantRegex = /\s{0,31}!important$/;
-var optionalMatchingQuotesRegex = /^(['"]?)(.*)\1$/;
-
-function normalize(value) {
-  return value
-    .replace(optionalMatchingQuotesRegex, '$2')
-    .replace(importantRegex, '');
-}
-
-function removeUnusedAtRules(tokens, context) {
-  removeUnusedAtRule(tokens, matchCounterStyle, markCounterStylesAsUsed, context);
-  removeUnusedAtRule(tokens, matchFontFace, markFontFacesAsUsed, context);
-  removeUnusedAtRule(tokens, matchKeyframe, markKeyframesAsUsed, context);
-  removeUnusedAtRule(tokens, matchNamespace, markNamespacesAsUsed, context);
-}
-
-function removeUnusedAtRule(tokens, matchCallback, markCallback, context) {
-  var atRules = {};
-  var atRule;
-  var atRuleTokens;
-  var atRuleToken;
-  var zeroAt;
-  var i, l;
-
-  for (i = 0, l = tokens.length; i < l; i++) {
-    matchCallback(tokens[i], atRules);
-  }
-
-  if (Object.keys(atRules).length === 0) {
-    return;
-  }
-
-  markUsedAtRules(tokens, markCallback, atRules, context);
-
-  for (atRule in atRules) {
-    atRuleTokens = atRules[atRule];
-
-    for (i = 0, l = atRuleTokens.length; i < l; i++) {
-      atRuleToken = atRuleTokens[i];
-      zeroAt = atRuleToken[0] == Token.AT_RULE ? 1 : 2;
-      atRuleToken[zeroAt] = [];
-    }
-  }
-}
-
-function markUsedAtRules(tokens, markCallback, atRules, context) {
-  var boundMarkCallback = markCallback(atRules);
-  var i, l;
-
-  for (i = 0, l = tokens.length; i < l; i++) {
-    switch (tokens[i][0]) {
-    case Token.RULE:
-      boundMarkCallback(tokens[i], context);
-      break;
-    case Token.NESTED_BLOCK:
-      markUsedAtRules(tokens[i][2], markCallback, atRules, context);
-    }
-  }
-}
-
-function matchCounterStyle(token, atRules) {
-  var match;
-
-  if (token[0] == Token.AT_RULE_BLOCK && token[1][0][1].indexOf('@counter-style') === 0) {
-    match = token[1][0][1].split(' ')[1];
-    atRules[match] = atRules[match] || [];
-    atRules[match].push(token);
-  }
-}
-
-function markCounterStylesAsUsed(atRules) {
-  return function(token, context) {
-    var property;
-    var wrappedProperty;
-    var i, l;
-
-    for (i = 0, l = token[2].length; i < l; i++) {
-      property = token[2][i];
-
-      if (property[1][1] == 'list-style') {
-        wrappedProperty = wrapForOptimizing(property);
-        populateComponents([wrappedProperty], context.validator, context.warnings);
-
-        if (wrappedProperty.components[0].value[0][1] in atRules) {
-          delete atRules[property[2][1]];
-        }
-
-        restoreFromOptimizing([wrappedProperty]);
-      }
-
-      if (property[1][1] == 'list-style-type' && property[2][1] in atRules) {
-        delete atRules[property[2][1]];
-      }
-    }
-  };
-}
-
-function matchFontFace(token, atRules) {
-  var property;
-  var match;
-  var i, l;
-
-  if (token[0] == Token.AT_RULE_BLOCK && token[1][0][1] == '@font-face') {
-    for (i = 0, l = token[2].length; i < l; i++) {
-      property = token[2][i];
-
-      if (property[1][1] == 'font-family') {
-        match = normalize(property[2][1].toLowerCase());
-        atRules[match] = atRules[match] || [];
-        atRules[match].push(token);
-        break;
-      }
-    }
-  }
-}
-
-function markFontFacesAsUsed(atRules) {
-  return function(token, context) {
-    var property;
-    var wrappedProperty;
-    var component;
-    var normalizedMatch;
-    var i, l;
-    var j, m;
-
-    for (i = 0, l = token[2].length; i < l; i++) {
-      property = token[2][i];
-
-      if (property[1][1] == 'font') {
-        wrappedProperty = wrapForOptimizing(property);
-        populateComponents([wrappedProperty], context.validator, context.warnings);
-        component = wrappedProperty.components[6];
-
-        for (j = 0, m = component.value.length; j < m; j++) {
-          normalizedMatch = normalize(component.value[j][1].toLowerCase());
-
-          if (normalizedMatch in atRules) {
-            delete atRules[normalizedMatch];
-          }
-        }
-
-        restoreFromOptimizing([wrappedProperty]);
-      }
-
-      if (property[1][1] == 'font-family') {
-        for (j = 2, m = property.length; j < m; j++) {
-          normalizedMatch = normalize(property[j][1].toLowerCase());
-
-          if (normalizedMatch in atRules) {
-            delete atRules[normalizedMatch];
-          }
-        }
-      }
-    }
-  };
-}
-
-function matchKeyframe(token, atRules) {
-  var match;
-
-  if (token[0] == Token.NESTED_BLOCK && keyframeRegex.test(token[1][0][1])) {
-    match = token[1][0][1].split(' ')[1];
-    atRules[match] = atRules[match] || [];
-    atRules[match].push(token);
-  }
-}
-
-function markKeyframesAsUsed(atRules) {
-  return function(token, context) {
-    var property;
-    var wrappedProperty;
-    var component;
-    var i, l;
-    var j, m;
-
-    for (i = 0, l = token[2].length; i < l; i++) {
-      property = token[2][i];
-
-      if (animationRegex.test(property[1][1])) {
-        wrappedProperty = wrapForOptimizing(property);
-        populateComponents([wrappedProperty], context.validator, context.warnings);
-        component = wrappedProperty.components[7];
-
-        for (j = 0, m = component.value.length; j < m; j++) {
-          if (component.value[j][1] in atRules) {
-            delete atRules[component.value[j][1]];
-          }
-        }
-
-        restoreFromOptimizing([wrappedProperty]);
-      }
-
-      if (animationNameRegex.test(property[1][1])) {
-        for (j = 2, m = property.length; j < m; j++) {
-          if (property[j][1] in atRules) {
-            delete atRules[property[j][1]];
-          }
-        }
-      }
-    }
-  };
-}
-
-function matchNamespace(token, atRules) {
-  var match;
-
-  if (token[0] == Token.AT_RULE && token[1].indexOf('@namespace') === 0) {
-    match = token[1].split(' ')[1];
-    atRules[match] = atRules[match] || [];
-    atRules[match].push(token);
-  }
-}
-
-function markNamespacesAsUsed(atRules) {
-  var namespaceRegex = new RegExp(Object.keys(atRules).join('\\||') + '\\|', 'g');
-
-  return function(token) {
-    var match;
-    var scope;
-    var normalizedMatch;
-    var i, l;
-    var j, m;
-
-    for (i = 0, l = token[1].length; i < l; i++) {
-      scope = token[1][i];
-      match = scope[1].match(namespaceRegex);
-
-      for (j = 0, m = match.length; j < m; j++) {
-        normalizedMatch = match[j].substring(0, match[j].length - 1);
-
-        if (normalizedMatch in atRules) {
-          delete atRules[normalizedMatch];
-        }
-      }
-    }
-  };
-}
-
-module.exports = removeUnusedAtRules;
-
-
-/***/ }),
-
-/***/ 57633:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-// TODO: it'd be great to merge it with the other canReorder functionality
-
-var rulesOverlap = __webpack_require__(84250);
-var specificitiesOverlap = __webpack_require__(48868);
-
-var FLEX_PROPERTIES = /align-items|box-align|box-pack|flex|justify/;
-var BORDER_PROPERTIES = /^border-(top|right|bottom|left|color|style|width|radius)/;
-
-function canReorder(left, right, cache) {
-  for (var i = right.length - 1; i >= 0; i--) {
-    for (var j = left.length - 1; j >= 0; j--) {
-      if (!canReorderSingle(left[j], right[i], cache)) { return false; }
-    }
-  }
-
-  return true;
-}
-
-function canReorderSingle(left, right, cache) {
-  var leftName = left[0];
-  var leftValue = left[1];
-  var leftNameRoot = left[2];
-  var leftSelector = left[5];
-  var leftInSpecificSelector = left[6];
-  var rightName = right[0];
-  var rightValue = right[1];
-  var rightNameRoot = right[2];
-  var rightSelector = right[5];
-  var rightInSpecificSelector = right[6];
-
-  if (leftName == 'font' && rightName == 'line-height' || rightName == 'font' && leftName == 'line-height') { return false; }
-  if (FLEX_PROPERTIES.test(leftName) && FLEX_PROPERTIES.test(rightName)) { return false; }
-  if (leftNameRoot == rightNameRoot
-    && unprefixed(leftName) == unprefixed(rightName)
-    && (vendorPrefixed(leftName) ^ vendorPrefixed(rightName))) { return false; }
-  if (leftNameRoot == 'border' && BORDER_PROPERTIES.test(rightNameRoot) && (leftName == 'border' || leftName == rightNameRoot || (leftValue != rightValue && sameBorderComponent(leftName, rightName)))) { return false; }
-  if (rightNameRoot == 'border' && BORDER_PROPERTIES.test(leftNameRoot) && (rightName == 'border' || rightName == leftNameRoot || (leftValue != rightValue && sameBorderComponent(leftName, rightName)))) { return false; }
-  if (leftNameRoot == 'border' && rightNameRoot == 'border' && leftName != rightName && (isSideBorder(leftName) && isStyleBorder(rightName) || isStyleBorder(leftName) && isSideBorder(rightName))) { return false; }
-  if (leftNameRoot != rightNameRoot) { return true; }
-  if (leftName == rightName
-    && leftNameRoot == rightNameRoot
-    && (leftValue == rightValue || withDifferentVendorPrefix(leftValue, rightValue))) { return true; }
-  if (leftName != rightName
-    && leftNameRoot == rightNameRoot
-    && leftName != leftNameRoot
-    && rightName != rightNameRoot) { return true; }
-  if (leftName != rightName
-    && leftNameRoot == rightNameRoot
-    && leftValue == rightValue) { return true; }
-  if (rightInSpecificSelector
-    && leftInSpecificSelector
-    && !inheritable(leftNameRoot)
-    && !inheritable(rightNameRoot)
-    && !rulesOverlap(rightSelector, leftSelector, false)) { return true; }
-  if (!specificitiesOverlap(leftSelector, rightSelector, cache)) { return true; }
-
-  return false;
-}
-
-function vendorPrefixed(name) {
-  return /^-(?:moz|webkit|ms|o)-/.test(name);
-}
-
-function unprefixed(name) {
-  return name.replace(/^-(?:moz|webkit|ms|o)-/, '');
-}
-
-function sameBorderComponent(name1, name2) {
-  return name1.split('-').pop() == name2.split('-').pop();
-}
-
-function isSideBorder(name) {
-  return name == 'border-top' || name == 'border-right' || name == 'border-bottom' || name == 'border-left';
-}
-
-function isStyleBorder(name) {
-  return name == 'border-color' || name == 'border-style' || name == 'border-width';
-}
-
-function withDifferentVendorPrefix(value1, value2) {
-  return vendorPrefixed(value1) && vendorPrefixed(value2) && value1.split('-')[1] != value2.split('-')[2];
-}
-
-function inheritable(name) {
-  // According to http://www.w3.org/TR/CSS21/propidx.html
-  // Others will be catched by other, preceeding rules
-  return name == 'font' || name == 'line-height' || name == 'list-style';
-}
-
-module.exports = {
-  canReorder: canReorder,
-  canReorderSingle: canReorderSingle
-};
-
-
-/***/ }),
-
-/***/ 40733:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var configuration = __webpack_require__(6058);
-
-function restoreWithComponents(property) {
-  var descriptor = configuration[property.name];
-
-  if (descriptor && descriptor.shorthand) {
-    return descriptor.restore(property, configuration);
-  }
-  return property.value;
-}
-
-module.exports = restoreWithComponents;
-
-
-/***/ }),
-
-/***/ 43002:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var canReorderSingle = (__webpack_require__(57633).canReorderSingle);
-var extractProperties = __webpack_require__(75878);
-var isMergeable = __webpack_require__(54638);
-var tidyRuleDuplicates = __webpack_require__(26770);
-
-var Token = __webpack_require__(44633);
-
-var cloneArray = __webpack_require__(43449);
-
-var serializeBody = (__webpack_require__(73694).body);
-var serializeRules = (__webpack_require__(73694).rules);
-
-function naturalSorter(a, b) {
-  return a > b ? 1 : -1;
-}
-
-function cloneAndMergeSelectors(propertyA, propertyB) {
-  var cloned = cloneArray(propertyA);
-  cloned[5] = cloned[5].concat(propertyB[5]);
-
-  return cloned;
-}
-
-function restructure(tokens, context) {
-  var options = context.options;
-  var mergeablePseudoClasses = options.compatibility.selectors.mergeablePseudoClasses;
-  var mergeablePseudoElements = options.compatibility.selectors.mergeablePseudoElements;
-  var mergeLimit = options.compatibility.selectors.mergeLimit;
-  var multiplePseudoMerging = options.compatibility.selectors.multiplePseudoMerging;
-  var specificityCache = context.cache.specificity;
-  var movableTokens = {};
-  var movedProperties = [];
-  var multiPropertyMoveCache = {};
-  var movedToBeDropped = [];
-  var maxCombinationsLevel = 2;
-  var ID_JOIN_CHARACTER = '%';
-
-  function sendToMultiPropertyMoveCache(position, movedProperty, allFits) {
-    for (var i = allFits.length - 1; i >= 0; i--) {
-      var fit = allFits[i][0];
-      var id = addToCache(movedProperty, fit);
-
-      if (multiPropertyMoveCache[id].length > 1 && processMultiPropertyMove(position, multiPropertyMoveCache[id])) {
-        removeAllMatchingFromCache(id);
-        break;
-      }
-    }
-  }
-
-  function addToCache(movedProperty, fit) {
-    var id = cacheId(fit);
-    multiPropertyMoveCache[id] = multiPropertyMoveCache[id] || [];
-    multiPropertyMoveCache[id].push([movedProperty, fit]);
-    return id;
-  }
-
-  function removeAllMatchingFromCache(matchId) {
-    var matchSelectors = matchId.split(ID_JOIN_CHARACTER);
-    var forRemoval = [];
-    var i;
-
-    for (var id in multiPropertyMoveCache) {
-      var selectors = id.split(ID_JOIN_CHARACTER);
-      for (i = selectors.length - 1; i >= 0; i--) {
-        if (matchSelectors.indexOf(selectors[i]) > -1) {
-          forRemoval.push(id);
-          break;
-        }
-      }
-    }
-
-    for (i = forRemoval.length - 1; i >= 0; i--) {
-      delete multiPropertyMoveCache[forRemoval[i]];
-    }
-  }
-
-  function cacheId(cachedTokens) {
-    var id = [];
-    for (var i = 0, l = cachedTokens.length; i < l; i++) {
-      id.push(serializeRules(cachedTokens[i][1]));
-    }
-    return id.join(ID_JOIN_CHARACTER);
-  }
-
-  function tokensToMerge(sourceTokens) {
-    var uniqueTokensWithBody = [];
-    var mergeableTokens = [];
-
-    for (var i = sourceTokens.length - 1; i >= 0; i--) {
-      if (!isMergeable(
-        serializeRules(sourceTokens[i][1]),
-        mergeablePseudoClasses,
-        mergeablePseudoElements,
-        multiplePseudoMerging
-      )) {
-        continue;
-      }
-
-      mergeableTokens.unshift(sourceTokens[i]);
-      if (sourceTokens[i][2].length > 0
-        && uniqueTokensWithBody.indexOf(sourceTokens[i]) == -1) {
-        uniqueTokensWithBody.push(sourceTokens[i]);
-      }
-    }
-
-    return uniqueTokensWithBody.length > 1
-      ? mergeableTokens
-      : [];
-  }
-
-  function shortenIfPossible(position, movedProperty) {
-    var name = movedProperty[0];
-    var value = movedProperty[1];
-    var key = movedProperty[4];
-    var valueSize = name.length + value.length + 1;
-    var allSelectors = [];
-    var qualifiedTokens = [];
-
-    var mergeableTokens = tokensToMerge(movableTokens[key]);
-    if (mergeableTokens.length < 2) { return; }
-
-    var allFits = findAllFits(mergeableTokens, valueSize, 1);
-    var bestFit = allFits[0];
-    if (bestFit[1] > 0) { return sendToMultiPropertyMoveCache(position, movedProperty, allFits); }
-
-    for (var i = bestFit[0].length - 1; i >= 0; i--) {
-      allSelectors = bestFit[0][i][1].concat(allSelectors);
-      qualifiedTokens.unshift(bestFit[0][i]);
-    }
-
-    allSelectors = tidyRuleDuplicates(allSelectors);
-    dropAsNewTokenAt(position, [movedProperty], allSelectors, qualifiedTokens);
-  }
-
-  function fitSorter(fit1, fit2) {
-    return fit1[1] > fit2[1] ? 1 : (fit1[1] == fit2[1] ? 0 : -1);
-  }
-
-  function findAllFits(mergeableTokens, propertySize, propertiesCount) {
-    var combinations = allCombinations(mergeableTokens, propertySize, propertiesCount, maxCombinationsLevel - 1);
-    return combinations.sort(fitSorter);
-  }
-
-  function allCombinations(tokensVariant, propertySize, propertiesCount, level) {
-    var differenceVariants = [[tokensVariant, sizeDifference(tokensVariant, propertySize, propertiesCount)]];
-    if (tokensVariant.length > 2 && level > 0) {
-      for (var i = tokensVariant.length - 1; i >= 0; i--) {
-        var subVariant = Array.prototype.slice.call(tokensVariant, 0);
-        subVariant.splice(i, 1);
-        differenceVariants = differenceVariants.concat(
-          allCombinations(subVariant, propertySize, propertiesCount, level - 1)
-        );
-      }
-    }
-
-    return differenceVariants;
-  }
-
-  function sizeDifference(tokensVariant, propertySize, propertiesCount) {
-    var allSelectorsSize = 0;
-    for (var i = tokensVariant.length - 1; i >= 0; i--) {
-      allSelectorsSize += tokensVariant[i][2].length > propertiesCount
-        ? serializeRules(tokensVariant[i][1]).length
-        : -1;
-    }
-    return allSelectorsSize - (tokensVariant.length - 1) * propertySize + 1;
-  }
-
-  function dropAsNewTokenAt(position, properties, allSelectors, mergeableTokens) {
-    var i, j, k, m;
-    var allProperties = [];
-
-    for (i = mergeableTokens.length - 1; i >= 0; i--) {
-      var mergeableToken = mergeableTokens[i];
-
-      for (j = mergeableToken[2].length - 1; j >= 0; j--) {
-        var mergeableProperty = mergeableToken[2][j];
-
-        for (k = 0, m = properties.length; k < m; k++) {
-          var property = properties[k];
-
-          var mergeablePropertyName = mergeableProperty[1][1];
-          var propertyName = property[0];
-          var propertyBody = property[4];
-          if (mergeablePropertyName == propertyName && serializeBody([mergeableProperty]) == propertyBody) {
-            mergeableToken[2].splice(j, 1);
-            break;
-          }
-        }
-      }
-    }
-
-    for (i = properties.length - 1; i >= 0; i--) {
-      allProperties.unshift(properties[i][3]);
-    }
-
-    var newToken = [Token.RULE, allSelectors, allProperties];
-    tokens.splice(position, 0, newToken);
-  }
-
-  function dropPropertiesAt(position, movedProperty) {
-    var key = movedProperty[4];
-    var toMove = movableTokens[key];
-
-    if (toMove && toMove.length > 1) {
-      if (!shortenMultiMovesIfPossible(position, movedProperty)) { shortenIfPossible(position, movedProperty); }
-    }
-  }
-
-  function shortenMultiMovesIfPossible(position, movedProperty) {
-    var candidates = [];
-    var propertiesAndMergableTokens = [];
-    var key = movedProperty[4];
-    var j, k;
-
-    var mergeableTokens = tokensToMerge(movableTokens[key]);
-    if (mergeableTokens.length < 2) { return; }
-
-    movableLoop:
-    for (var value in movableTokens) {
-      var tokensList = movableTokens[value];
-
-      for (j = mergeableTokens.length - 1; j >= 0; j--) {
-        if (tokensList.indexOf(mergeableTokens[j]) == -1) { continue movableLoop; }
-      }
-
-      candidates.push(value);
-    }
-
-    if (candidates.length < 2) { return false; }
-
-    for (j = candidates.length - 1; j >= 0; j--) {
-      for (k = movedProperties.length - 1; k >= 0; k--) {
-        if (movedProperties[k][4] == candidates[j]) {
-          propertiesAndMergableTokens.unshift([movedProperties[k], mergeableTokens]);
-          break;
-        }
-      }
-    }
-
-    return processMultiPropertyMove(position, propertiesAndMergableTokens);
-  }
-
-  function processMultiPropertyMove(position, propertiesAndMergableTokens) {
-    var valueSize = 0;
-    var properties = [];
-    var property;
-
-    for (var i = propertiesAndMergableTokens.length - 1; i >= 0; i--) {
-      property = propertiesAndMergableTokens[i][0];
-      var fullValue = property[4];
-      valueSize += fullValue.length + (i > 0 ? 1 : 0);
-
-      properties.push(property);
-    }
-
-    var mergeableTokens = propertiesAndMergableTokens[0][1];
-    var bestFit = findAllFits(mergeableTokens, valueSize, properties.length)[0];
-    if (bestFit[1] > 0) { return false; }
-
-    var allSelectors = [];
-    var qualifiedTokens = [];
-    for (i = bestFit[0].length - 1; i >= 0; i--) {
-      allSelectors = bestFit[0][i][1].concat(allSelectors);
-      qualifiedTokens.unshift(bestFit[0][i]);
-    }
-
-    allSelectors = tidyRuleDuplicates(allSelectors);
-    dropAsNewTokenAt(position, properties, allSelectors, qualifiedTokens);
-
-    for (i = properties.length - 1; i >= 0; i--) {
-      property = properties[i];
-      var index = movedProperties.indexOf(property);
-
-      delete movableTokens[property[4]];
-
-      if (index > -1 && movedToBeDropped.indexOf(index) == -1) { movedToBeDropped.push(index); }
-    }
-
-    return true;
-  }
-
-  function boundToAnotherPropertyInCurrrentToken(property, movedProperty, token) {
-    var propertyName = property[0];
-    var movedPropertyName = movedProperty[0];
-    if (propertyName != movedPropertyName) { return false; }
-
-    var key = movedProperty[4];
-    var toMove = movableTokens[key];
-    return toMove && toMove.indexOf(token) > -1;
-  }
-
-  for (var i = tokens.length - 1; i >= 0; i--) {
-    var token = tokens[i];
-    var isRule;
-    var j, k, m;
-    var samePropertyAt;
-
-    if (token[0] == Token.RULE) {
-      isRule = true;
-    } else if (token[0] == Token.NESTED_BLOCK) {
-      isRule = false;
-    } else {
-      continue;
-    }
-
-    // We cache movedProperties.length as it may change in the loop
-    var movedCount = movedProperties.length;
-
-    var properties = extractProperties(token);
-    movedToBeDropped = [];
-
-    var unmovableInCurrentToken = [];
-    for (j = properties.length - 1; j >= 0; j--) {
-      for (k = j - 1; k >= 0; k--) {
-        if (!canReorderSingle(properties[j], properties[k], specificityCache)) {
-          unmovableInCurrentToken.push(j);
-          break;
-        }
-      }
-    }
-
-    for (j = properties.length - 1; j >= 0; j--) {
-      var property = properties[j];
-      var movedSameProperty = false;
-
-      for (k = 0; k < movedCount; k++) {
-        var movedProperty = movedProperties[k];
-
-        if (movedToBeDropped.indexOf(k) == -1 && (
-          !canReorderSingle(property, movedProperty, specificityCache)
-          && !boundToAnotherPropertyInCurrrentToken(property, movedProperty, token)
-          || movableTokens[movedProperty[4]] && movableTokens[movedProperty[4]].length === mergeLimit)
-        ) {
-          dropPropertiesAt(i + 1, movedProperty);
-
-          if (movedToBeDropped.indexOf(k) == -1) {
-            movedToBeDropped.push(k);
-            delete movableTokens[movedProperty[4]];
-          }
-        }
-
-        if (!movedSameProperty) {
-          movedSameProperty = property[0] == movedProperty[0] && property[1] == movedProperty[1];
-
-          if (movedSameProperty) {
-            samePropertyAt = k;
-          }
-        }
-      }
-
-      if (!isRule || unmovableInCurrentToken.indexOf(j) > -1) { continue; }
-
-      var key = property[4];
-
-      if (movedSameProperty && movedProperties[samePropertyAt][5].length + property[5].length > mergeLimit) {
-        dropPropertiesAt(i + 1, movedProperties[samePropertyAt]);
-        movedProperties.splice(samePropertyAt, 1);
-        movableTokens[key] = [token];
-        movedSameProperty = false;
-      } else {
-        movableTokens[key] = movableTokens[key] || [];
-        movableTokens[key].push(token);
-      }
-
-      if (movedSameProperty) {
-        movedProperties[samePropertyAt] = cloneAndMergeSelectors(movedProperties[samePropertyAt], property);
-      } else {
-        movedProperties.push(property);
-      }
-    }
-
-    movedToBeDropped = movedToBeDropped.sort(naturalSorter);
-    for (j = 0, m = movedToBeDropped.length; j < m; j++) {
-      var dropAt = movedToBeDropped[j] - j;
-      movedProperties.splice(dropAt, 1);
-    }
-  }
-
-  var position = tokens[0] && tokens[0][0] == Token.AT_RULE && tokens[0][1].indexOf('@charset') === 0 ? 1 : 0;
-  for (; position < tokens.length - 1; position++) {
-    var isImportRule = tokens[position][0] === Token.AT_RULE && tokens[position][1].indexOf('@import') === 0;
-    var isComment = tokens[position][0] === Token.COMMENT;
-    if (!(isImportRule || isComment)) { break; }
-  }
-
-  for (i = 0; i < movedProperties.length; i++) {
-    dropPropertiesAt(position, movedProperties[i]);
-  }
-}
-
-module.exports = restructure;
-
-
-/***/ }),
-
-/***/ 84250:
-/***/ ((module) => {
-
-var MODIFIER_PATTERN = /--.+$/;
-
-function rulesOverlap(rule1, rule2, bemMode) {
-  var scope1;
-  var scope2;
-  var i, l;
-  var j, m;
-
-  for (i = 0, l = rule1.length; i < l; i++) {
-    scope1 = rule1[i][1];
-
-    for (j = 0, m = rule2.length; j < m; j++) {
-      scope2 = rule2[j][1];
-
-      if (scope1 == scope2) {
-        return true;
-      }
-
-      if (bemMode && withoutModifiers(scope1) == withoutModifiers(scope2)) {
-        return true;
-      }
-    }
-  }
-
-  return false;
-}
-
-function withoutModifiers(scope) {
-  return scope.replace(MODIFIER_PATTERN, '');
-}
-
-module.exports = rulesOverlap;
-
-
-/***/ }),
-
-/***/ 48868:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var specificity = __webpack_require__(16565);
-
-function specificitiesOverlap(selector1, selector2, cache) {
-  var specificity1;
-  var specificity2;
-  var i, l;
-  var j, m;
-
-  for (i = 0, l = selector1.length; i < l; i++) {
-    specificity1 = findSpecificity(selector1[i][1], cache);
-
-    for (j = 0, m = selector2.length; j < m; j++) {
-      specificity2 = findSpecificity(selector2[j][1], cache);
-
-      if (specificity1[0] === specificity2[0]
-        && specificity1[1] === specificity2[1]
-        && specificity1[2] === specificity2[2]) {
-        return true;
-      }
-    }
-  }
-
-  return false;
-}
-
-function findSpecificity(selector, cache) {
-  var value;
-
-  if (!(selector in cache)) {
-    cache[selector] = value = specificity(selector);
-  }
-
-  return value || cache[selector];
-}
-
-module.exports = specificitiesOverlap;
-
-
-/***/ }),
-
-/***/ 16565:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Marker = __webpack_require__(53820);
-
-var Selector = {
-  ADJACENT_SIBLING: '+',
-  DESCENDANT: '>',
-  DOT: '.',
-  HASH: '#',
-  NON_ADJACENT_SIBLING: '~',
-  PSEUDO: ':'
-};
-
-var LETTER_PATTERN = /[a-zA-Z]/;
-var NOT_PREFIX = ':not(';
-var SEPARATOR_PATTERN = /[\s,(>~+]/;
-
-function specificity(selector) {
-  var result = [0, 0, 0];
-  var character;
-  var isEscaped;
-  var isSingleQuoted;
-  var isDoubleQuoted;
-  var roundBracketLevel = 0;
-  var couldIntroduceNewTypeSelector;
-  var withinNotPseudoClass = false;
-  var wasPseudoClass = false;
-  var i, l;
-
-  for (i = 0, l = selector.length; i < l; i++) {
-    character = selector[i];
-
-    if (isEscaped) {
-      // noop
-    } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) {
-      isSingleQuoted = true;
-    } else if (character == Marker.SINGLE_QUOTE && !isDoubleQuoted && isSingleQuoted) {
-      isSingleQuoted = false;
-    } else if (character == Marker.DOUBLE_QUOTE && !isDoubleQuoted && !isSingleQuoted) {
-      isDoubleQuoted = true;
-    } else if (character == Marker.DOUBLE_QUOTE && isDoubleQuoted && !isSingleQuoted) {
-      isDoubleQuoted = false;
-    } else if (isSingleQuoted || isDoubleQuoted) {
-      continue;
-    } else if (roundBracketLevel > 0 && !withinNotPseudoClass) {
-      // noop
-    } else if (character == Marker.OPEN_ROUND_BRACKET) {
-      roundBracketLevel++;
-    } else if (character == Marker.CLOSE_ROUND_BRACKET && roundBracketLevel == 1) {
-      roundBracketLevel--;
-      withinNotPseudoClass = false;
-    } else if (character == Marker.CLOSE_ROUND_BRACKET) {
-      roundBracketLevel--;
-    } else if (character == Selector.HASH) {
-      result[0]++;
-    } else if (character == Selector.DOT || character == Marker.OPEN_SQUARE_BRACKET) {
-      result[1]++;
-    } else if (character == Selector.PSEUDO && !wasPseudoClass && !isNotPseudoClass(selector, i)) {
-      result[1]++;
-      withinNotPseudoClass = false;
-    } else if (character == Selector.PSEUDO) {
-      withinNotPseudoClass = true;
-    } else if ((i === 0 || couldIntroduceNewTypeSelector) && LETTER_PATTERN.test(character)) {
-      result[2]++;
-    }
-
-    isEscaped = character == Marker.BACK_SLASH;
-    wasPseudoClass = character == Selector.PSEUDO;
-    couldIntroduceNewTypeSelector = !isEscaped && SEPARATOR_PATTERN.test(character);
-  }
-
-  return result;
-}
-
-function isNotPseudoClass(selector, index) {
-  return selector.indexOf(NOT_PREFIX, index) === index;
-}
-
-module.exports = specificity;
-
-
-/***/ }),
-
-/***/ 26770:
-/***/ ((module) => {
-
-function ruleSorter(s1, s2) {
-  return s1[1] > s2[1] ? 1 : -1;
-}
-
-function tidyRuleDuplicates(rules) {
-  var list = [];
-  var repeated = [];
-
-  for (var i = 0, l = rules.length; i < l; i++) {
-    var rule = rules[i];
-
-    if (repeated.indexOf(rule[1]) == -1) {
-      repeated.push(rule[1]);
-      list.push(rule);
-    }
-  }
-
-  return list.sort(ruleSorter);
-}
-
-module.exports = tidyRuleDuplicates;
-
-
-/***/ }),
-
-/***/ 556:
-/***/ ((module) => {
-
-function removeUnused(properties) {
-  for (var i = properties.length - 1; i >= 0; i--) {
-    var property = properties[i];
-
-    if (property.unused) {
-      property.all.splice(property.position, 1);
-    }
-  }
-}
-
-module.exports = removeUnused;
-
-
-/***/ }),
-
-/***/ 32700:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Hack = __webpack_require__(82878);
-
-var Marker = __webpack_require__(53820);
-
-var ASTERISK_HACK = '*';
-var BACKSLASH_HACK = '\\';
-var IMPORTANT_TOKEN = '!important';
-var UNDERSCORE_HACK = '_';
-var BANG_HACK = '!ie';
-
-function restoreFromOptimizing(properties, restoreCallback) {
-  var property;
-  var restored;
-  var current;
-  var i;
-
-  for (i = properties.length - 1; i >= 0; i--) {
-    property = properties[i];
-
-    if (property.dynamic && property.important) {
-      restoreImportant(property);
-      continue;
-    }
-
-    if (property.dynamic) {
-      continue;
-    }
-
-    if (property.unused) {
-      continue;
-    }
-
-    if (!property.dirty && !property.important && !property.hack) {
-      continue;
-    }
-
-    if (property.optimizable && restoreCallback) {
-      restored = restoreCallback(property);
-      property.value = restored;
-    } else {
-      restored = property.value;
-    }
-
-    if (property.important) {
-      restoreImportant(property);
-    }
-
-    if (property.hack) {
-      restoreHack(property);
-    }
-
-    if ('all' in property) {
-      current = property.all[property.position];
-      current[1][1] = property.name;
-
-      current.splice(2, current.length - 1);
-      Array.prototype.push.apply(current, restored);
-    }
-  }
-}
-
-function restoreImportant(property) {
-  property.value[property.value.length - 1][1] += IMPORTANT_TOKEN;
-}
-
-function restoreHack(property) {
-  if (property.hack[0] == Hack.UNDERSCORE) {
-    property.name = UNDERSCORE_HACK + property.name;
-  } else if (property.hack[0] == Hack.ASTERISK) {
-    property.name = ASTERISK_HACK + property.name;
-  } else if (property.hack[0] == Hack.BACKSLASH) {
-    property.value[property.value.length - 1][1] += BACKSLASH_HACK + property.hack[1];
-  } else if (property.hack[0] == Hack.BANG) {
-    property.value[property.value.length - 1][1] += Marker.SPACE + BANG_HACK;
-  }
-}
-
-module.exports = restoreFromOptimizing;
-
-
-/***/ }),
-
-/***/ 77263:
-/***/ ((module) => {
-
-var functionNoVendorRegexStr = '[A-Z]+(\\-|[A-Z]|[0-9])+\\(.*?\\)';
-var functionVendorRegexStr = '\\-(\\-|[A-Z]|[0-9])+\\(.*?\\)';
-var variableRegexStr = 'var\\(\\-\\-[^\\)]+\\)';
-var functionAnyRegexStr = '(' + variableRegexStr + '|' + functionNoVendorRegexStr + '|' + functionVendorRegexStr + ')';
-
-var calcRegex = new RegExp('^(\\-moz\\-|\\-webkit\\-)?calc\\([^\\)]+\\)$', 'i');
-var decimalRegex = /[0-9]/;
-var functionAnyRegex = new RegExp('^' + functionAnyRegexStr + '$', 'i');
-var hexAlphaColorRegex = /^#(?:[0-9a-f]{4}|[0-9a-f]{8})$/i;
-// eslint-disable-next-line max-len
-var hslColorRegex = /^hsl\(\s{0,31}[-.]?\d+\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31}\)|hsla\(\s{0,31}[-.]?\d+\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31},\s{0,31}\d*\.?\d+%\s{0,31},\s{0,31}\.?\d+\s{0,31}\)$/;
-// eslint-disable-next-line max-len
-var hslColorWithSpacesRegex = /^hsl\(\s{0,31}[-.]?\d+(deg)?\s{1,31}\d*\.?\d+%\s{1,31}\d*\.?\d+%\s{0,31}\)|hsla\(\s{0,31}[-.]?\d+(deg)?\s{1,31}\d*\.?\d+%\s{1,31}\d*\.?\d+%\s{1,31}\/\s{1,31}\d*\.?\d+%?\s{0,31}\)$/;
-var identifierRegex = /^(-[a-z0-9_][a-z0-9\-_]*|[a-z_][a-z0-9\-_]*)$/i;
-var namedEntityRegex = /^[a-z]+$/i;
-var prefixRegex = /^-([a-z0-9]|-)*$/i;
-var quotedTextRegex = /^("[^"]*"|'[^']*')$/i;
-// eslint-disable-next-line max-len
-var rgbColorRegex = /^rgb\(\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31}\)|rgba\(\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[\d]{1,3}\s{0,31},\s{0,31}[.\d]+\s{0,31}\)$/i;
-// eslint-disable-next-line max-len
-var rgbColorWithSpacesRegex = /^rgb\(\s{0,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{0,31}\)|rgba\(\s{0,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{1,31}[\d]{1,3}\s{1,31}\/\s{1,31}[\d]*\.?[.\d]+%?\s{0,31}\)$/i;
-var timeUnitPattern = /\d+(s|ms)/;
-var timingFunctionRegex = /^(cubic-bezier|steps)\([^)]+\)$/;
-var validTimeUnits = ['ms', 's'];
-var urlRegex = /^url\([\s\S]+\)$/i;
-var variableRegex = new RegExp('^' + variableRegexStr + '$', 'i');
-
-var eightValueColorRegex = /^#[0-9a-f]{8}$/i;
-var fourValueColorRegex = /^#[0-9a-f]{4}$/i;
-var sixValueColorRegex = /^#[0-9a-f]{6}$/i;
-var threeValueColorRegex = /^#[0-9a-f]{3}$/i;
-
-var DECIMAL_DOT = '.';
-var MINUS_SIGN = '-';
-var PLUS_SIGN = '+';
-
-var Keywords = {
-  '^': [
-    'inherit',
-    'initial',
-    'unset'
-  ],
-  '*-style': [
-    'auto',
-    'dashed',
-    'dotted',
-    'double',
-    'groove',
-    'hidden',
-    'inset',
-    'none',
-    'outset',
-    'ridge',
-    'solid'
-  ],
-  '*-timing-function': [
-    'ease',
-    'ease-in',
-    'ease-in-out',
-    'ease-out',
-    'linear',
-    'step-end',
-    'step-start'
-  ],
-  'animation-direction': [
-    'alternate',
-    'alternate-reverse',
-    'normal',
-    'reverse'
-  ],
-  'animation-fill-mode': [
-    'backwards',
-    'both',
-    'forwards',
-    'none'
-  ],
-  'animation-iteration-count': [
-    'infinite'
-  ],
-  'animation-name': [
-    'none'
-  ],
-  'animation-play-state': [
-    'paused',
-    'running'
-  ],
-  'background-attachment': [
-    'fixed',
-    'inherit',
-    'local',
-    'scroll'
-  ],
-  'background-clip': [
-    'border-box',
-    'content-box',
-    'inherit',
-    'padding-box',
-    'text'
-  ],
-  'background-origin': [
-    'border-box',
-    'content-box',
-    'inherit',
-    'padding-box'
-  ],
-  'background-position': [
-    'bottom',
-    'center',
-    'left',
-    'right',
-    'top'
-  ],
-  'background-repeat': [
-    'no-repeat',
-    'inherit',
-    'repeat',
-    'repeat-x',
-    'repeat-y',
-    'round',
-    'space'
-  ],
-  'background-size': [
-    'auto',
-    'cover',
-    'contain'
-  ],
-  'border-collapse': [
-    'collapse',
-    'inherit',
-    'separate'
-  ],
-  bottom: [
-    'auto'
-  ],
-  clear: [
-    'both',
-    'left',
-    'none',
-    'right'
-  ],
-  color: [
-    'transparent'
-  ],
-  cursor: [
-    'all-scroll',
-    'auto',
-    'col-resize',
-    'crosshair',
-    'default',
-    'e-resize',
-    'help',
-    'move',
-    'n-resize',
-    'ne-resize',
-    'no-drop',
-    'not-allowed',
-    'nw-resize',
-    'pointer',
-    'progress',
-    'row-resize',
-    's-resize',
-    'se-resize',
-    'sw-resize',
-    'text',
-    'vertical-text',
-    'w-resize',
-    'wait'
-  ],
-  display: [
-    'block',
-    'inline',
-    'inline-block',
-    'inline-table',
-    'list-item',
-    'none',
-    'table',
-    'table-caption',
-    'table-cell',
-    'table-column',
-    'table-column-group',
-    'table-footer-group',
-    'table-header-group',
-    'table-row',
-    'table-row-group'
-  ],
-  float: [
-    'left',
-    'none',
-    'right'
-  ],
-  left: [
-    'auto'
-  ],
-  font: [
-    'caption',
-    'icon',
-    'menu',
-    'message-box',
-    'small-caption',
-    'status-bar',
-    'unset'
-  ],
-  'font-size': [
-    'large',
-    'larger',
-    'medium',
-    'small',
-    'smaller',
-    'x-large',
-    'x-small',
-    'xx-large',
-    'xx-small'
-  ],
-  'font-stretch': [
-    'condensed',
-    'expanded',
-    'extra-condensed',
-    'extra-expanded',
-    'normal',
-    'semi-condensed',
-    'semi-expanded',
-    'ultra-condensed',
-    'ultra-expanded'
-  ],
-  'font-style': [
-    'italic',
-    'normal',
-    'oblique'
-  ],
-  'font-variant': [
-    'normal',
-    'small-caps'
-  ],
-  'font-weight': [
-    '100',
-    '200',
-    '300',
-    '400',
-    '500',
-    '600',
-    '700',
-    '800',
-    '900',
-    'bold',
-    'bolder',
-    'lighter',
-    'normal'
-  ],
-  'line-height': [
-    'normal'
-  ],
-  'list-style-position': [
-    'inside',
-    'outside'
-  ],
-  'list-style-type': [
-    'armenian',
-    'circle',
-    'decimal',
-    'decimal-leading-zero',
-    'disc',
-    'decimal|disc', // this is the default value of list-style-type, see comment in configuration.js
-    'georgian',
-    'lower-alpha',
-    'lower-greek',
-    'lower-latin',
-    'lower-roman',
-    'none',
-    'square',
-    'upper-alpha',
-    'upper-latin',
-    'upper-roman'
-  ],
-  overflow: [
-    'auto',
-    'hidden',
-    'scroll',
-    'visible'
-  ],
-  position: [
-    'absolute',
-    'fixed',
-    'relative',
-    'static'
-  ],
-  right: [
-    'auto'
-  ],
-  'text-align': [
-    'center',
-    'justify',
-    'left',
-    'left|right', // this is the default value of list-style-type, see comment in configuration.js
-    'right'
-  ],
-  'text-decoration': [
-    'line-through',
-    'none',
-    'overline',
-    'underline'
-  ],
-  'text-overflow': [
-    'clip',
-    'ellipsis'
-  ],
-  top: [
-    'auto'
-  ],
-  'vertical-align': [
-    'baseline',
-    'bottom',
-    'middle',
-    'sub',
-    'super',
-    'text-bottom',
-    'text-top',
-    'top'
-  ],
-  visibility: [
-    'collapse',
-    'hidden',
-    'visible'
-  ],
-  'white-space': [
-    'normal',
-    'nowrap',
-    'pre'
-  ],
-  width: [
-    'inherit',
-    'initial',
-    'medium',
-    'thick',
-    'thin'
-  ]
-};
-
-var Units = [
-  '%',
-  'ch',
-  'cm',
-  'em',
-  'ex',
-  'in',
-  'mm',
-  'pc',
-  'pt',
-  'px',
-  'rem',
-  'vh',
-  'vm',
-  'vmax',
-  'vmin',
-  'vw'
-];
-
-function isColor(value) {
-  return value != 'auto'
-    && (
-      isKeyword('color')(value)
-      || isHexColor(value)
-      || isColorFunction(value)
-      || isNamedEntity(value)
-    );
-}
-
-function isColorFunction(value) {
-  return isRgbColor(value) || isHslColor(value);
-}
-
-function isDynamicUnit(value) {
-  return calcRegex.test(value);
-}
-
-function isFunction(value) {
-  return functionAnyRegex.test(value);
-}
-
-function isHexColor(value) {
-  return threeValueColorRegex.test(value)
-    || fourValueColorRegex.test(value)
-    || sixValueColorRegex.test(value)
-    || eightValueColorRegex.test(value);
-}
-
-function isHslColor(value) {
-  return hslColorRegex.test(value) || hslColorWithSpacesRegex.test(value);
-}
-
-function isHexAlphaColor(value) {
-  return hexAlphaColorRegex.test(value);
-}
-
-function isIdentifier(value) {
-  return identifierRegex.test(value);
-}
-
-function isQuotedText(value) {
-  return quotedTextRegex.test(value);
-}
-
-function isImage(value) {
-  return value == 'none' || value == 'inherit' || isUrl(value);
-}
-
-function isKeyword(propertyName) {
-  return function(value) {
-    return Keywords[propertyName].indexOf(value) > -1;
-  };
-}
-
-function isNamedEntity(value) {
-  return namedEntityRegex.test(value);
-}
-
-function isNumber(value) {
-  return scanForNumber(value) == value.length;
-}
-
-function isRgbColor(value) {
-  return rgbColorRegex.test(value) || rgbColorWithSpacesRegex.test(value);
-}
-
-function isPrefixed(value) {
-  return prefixRegex.test(value);
-}
-
-function isPositiveNumber(value) {
-  return isNumber(value)
-    && parseFloat(value) >= 0;
-}
-
-function isVariable(value) {
-  return variableRegex.test(value);
-}
-
-function isTime(value) {
-  var numberUpTo = scanForNumber(value);
-
-  return numberUpTo == value.length && parseInt(value) === 0
-    || numberUpTo > -1 && validTimeUnits.indexOf(value.slice(numberUpTo + 1)) > -1
-    || isCalculatedTime(value);
-}
-
-function isCalculatedTime(value) {
-  return isFunction(value) && timeUnitPattern.test(value);
-}
-
-function isTimingFunction() {
-  var isTimingFunctionKeyword = isKeyword('*-timing-function');
-
-  return function(value) {
-    return isTimingFunctionKeyword(value) || timingFunctionRegex.test(value);
-  };
-}
-
-function isUnit(validUnits, value) {
-  var numberUpTo = scanForNumber(value);
-
-  return numberUpTo == value.length && parseInt(value) === 0
-    || numberUpTo > -1 && validUnits.indexOf(value.slice(numberUpTo + 1).toLowerCase()) > -1
-    || value == 'auto'
-    || value == 'inherit';
-}
-
-function isUrl(value) {
-  return urlRegex.test(value);
-}
-
-function isZIndex(value) {
-  return value == 'auto'
-    || isNumber(value)
-    || isKeyword('^')(value);
-}
-
-function scanForNumber(value) {
-  var hasDot = false;
-  var hasSign = false;
-  var character;
-  var i, l;
-
-  for (i = 0, l = value.length; i < l; i++) {
-    character = value[i];
-
-    if (i === 0 && (character == PLUS_SIGN || character == MINUS_SIGN)) {
-      hasSign = true;
-    } else if (i > 0 && hasSign && (character == PLUS_SIGN || character == MINUS_SIGN)) {
-      return i - 1;
-    } else if (character == DECIMAL_DOT && !hasDot) {
-      hasDot = true;
-    } else if (character == DECIMAL_DOT && hasDot) {
-      return i - 1;
-    } else if (decimalRegex.test(character)) {
-      continue;
-    } else {
-      return i - 1;
-    }
-  }
-
-  return i;
-}
-
-function validator(compatibility) {
-  var validUnits = Units.slice(0).filter(function(value) {
-    return !(value in compatibility.units) || compatibility.units[value] === true;
-  });
-
-  if (compatibility.customUnits.rpx) {
-    validUnits.push('rpx');
-  }
-
-  return {
-    colorOpacity: compatibility.colors.opacity,
-    colorHexAlpha: compatibility.colors.hexAlpha,
-    isAnimationDirectionKeyword: isKeyword('animation-direction'),
-    isAnimationFillModeKeyword: isKeyword('animation-fill-mode'),
-    isAnimationIterationCountKeyword: isKeyword('animation-iteration-count'),
-    isAnimationNameKeyword: isKeyword('animation-name'),
-    isAnimationPlayStateKeyword: isKeyword('animation-play-state'),
-    isTimingFunction: isTimingFunction(),
-    isBackgroundAttachmentKeyword: isKeyword('background-attachment'),
-    isBackgroundClipKeyword: isKeyword('background-clip'),
-    isBackgroundOriginKeyword: isKeyword('background-origin'),
-    isBackgroundPositionKeyword: isKeyword('background-position'),
-    isBackgroundRepeatKeyword: isKeyword('background-repeat'),
-    isBackgroundSizeKeyword: isKeyword('background-size'),
-    isColor: isColor,
-    isColorFunction: isColorFunction,
-    isDynamicUnit: isDynamicUnit,
-    isFontKeyword: isKeyword('font'),
-    isFontSizeKeyword: isKeyword('font-size'),
-    isFontStretchKeyword: isKeyword('font-stretch'),
-    isFontStyleKeyword: isKeyword('font-style'),
-    isFontVariantKeyword: isKeyword('font-variant'),
-    isFontWeightKeyword: isKeyword('font-weight'),
-    isFunction: isFunction,
-    isGlobal: isKeyword('^'),
-    isHexAlphaColor: isHexAlphaColor,
-    isHslColor: isHslColor,
-    isIdentifier: isIdentifier,
-    isImage: isImage,
-    isKeyword: isKeyword,
-    isLineHeightKeyword: isKeyword('line-height'),
-    isListStylePositionKeyword: isKeyword('list-style-position'),
-    isListStyleTypeKeyword: isKeyword('list-style-type'),
-    isNumber: isNumber,
-    isPrefixed: isPrefixed,
-    isPositiveNumber: isPositiveNumber,
-    isQuotedText: isQuotedText,
-    isRgbColor: isRgbColor,
-    isStyleKeyword: isKeyword('*-style'),
-    isTime: isTime,
-    isUnit: isUnit.bind(null, validUnits),
-    isUrl: isUrl,
-    isVariable: isVariable,
-    isWidth: isKeyword('width'),
-    isZIndex: isZIndex
-  };
-}
-
-module.exports = validator;
-
-
-/***/ }),
-
-/***/ 21200:
-/***/ ((module) => {
-
-var VENDOR_PREFIX_PATTERN = /(?:^|\W)(-\w+-)/g;
-
-function unique(value) {
-  var prefixes = [];
-  var match;
-
-  // eslint-disable-next-line no-cond-assign
-  while ((match = VENDOR_PREFIX_PATTERN.exec(value)) !== null) {
-    if (prefixes.indexOf(match[0]) == -1) {
-      prefixes.push(match[0]);
-    }
-  }
-
-  return prefixes;
-}
-
-function same(value1, value2) {
-  return unique(value1).sort().join(',') == unique(value2).sort().join(',');
-}
-
-module.exports = {
-  unique: unique,
-  same: same
-};
-
-
-/***/ }),
-
-/***/ 93684:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Hack = __webpack_require__(82878);
-
-var Marker = __webpack_require__(53820);
-var Token = __webpack_require__(44633);
-
-var Match = {
-  ASTERISK: '*',
-  BACKSLASH: '\\',
-  BANG: '!',
-  BANG_SUFFIX_PATTERN: /!\w+$/,
-  IMPORTANT_TOKEN: '!important',
-  IMPORTANT_TOKEN_PATTERN: new RegExp('!important$', 'i'),
-  IMPORTANT_WORD: 'important',
-  IMPORTANT_WORD_PATTERN: new RegExp('important$', 'i'),
-  SUFFIX_BANG_PATTERN: /!$/,
-  UNDERSCORE: '_',
-  VARIABLE_REFERENCE_PATTERN: /var\(--.+\)$/
-};
-
-function wrapAll(properties, skipProperties) {
-  var wrapped = [];
-  var single;
-  var property;
-  var i;
-
-  for (i = properties.length - 1; i >= 0; i--) {
-    property = properties[i];
-
-    if (property[0] != Token.PROPERTY) {
-      continue;
-    }
-
-    if (skipProperties && skipProperties.indexOf(property[1][1]) > -1) {
-      continue;
-    }
-
-    single = wrapSingle(property);
-    single.all = properties;
-    single.position = i;
-    wrapped.unshift(single);
-  }
-
-  return wrapped;
-}
-
-function someVariableReferences(property) {
-  var i, l;
-  var value;
-
-  // skipping `property` and property name tokens
-  for (i = 2, l = property.length; i < l; i++) {
-    value = property[i];
-
-    if (value[0] != Token.PROPERTY_VALUE) {
-      continue;
-    }
-
-    if (isVariableReference(value[1])) {
-      return true;
-    }
-  }
-
-  return false;
-}
-
-function isVariableReference(value) {
-  return Match.VARIABLE_REFERENCE_PATTERN.test(value);
-}
-
-function isMultiplex(property) {
-  var value;
-  var i, l;
-
-  for (i = 3, l = property.length; i < l; i++) {
-    value = property[i];
-
-    if (value[0] == Token.PROPERTY_VALUE && (value[1] == Marker.COMMA || value[1] == Marker.FORWARD_SLASH)) {
-      return true;
-    }
-  }
-
-  return false;
-}
-
-function hackFrom(property) {
-  var match = false;
-  var name = property[1][1];
-  var lastValue = property[property.length - 1];
-
-  if (name[0] == Match.UNDERSCORE) {
-    match = [Hack.UNDERSCORE];
-  } else if (name[0] == Match.ASTERISK) {
-    match = [Hack.ASTERISK];
-  } else if (lastValue[1][0] == Match.BANG && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN)) {
-    match = [Hack.BANG];
-  } else if (lastValue[1].indexOf(Match.BANG) > 0
-    && !lastValue[1].match(Match.IMPORTANT_WORD_PATTERN)
-    && Match.BANG_SUFFIX_PATTERN.test(lastValue[1])) {
-    match = [Hack.BANG];
-  } else if (lastValue[1].indexOf(Match.BACKSLASH) > 0
-    && lastValue[1].indexOf(Match.BACKSLASH) == lastValue[1].length - Match.BACKSLASH.length - 1) {
-    match = [Hack.BACKSLASH, lastValue[1].substring(lastValue[1].indexOf(Match.BACKSLASH) + 1)];
-  } else if (lastValue[1].indexOf(Match.BACKSLASH) === 0 && lastValue[1].length == 2) {
-    match = [Hack.BACKSLASH, lastValue[1].substring(1)];
-  }
-
-  return match;
-}
-
-function isImportant(property) {
-  if (property.length < 3) { return false; }
-
-  var lastValue = property[property.length - 1];
-  if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) {
-    return true;
-  } if (Match.IMPORTANT_WORD_PATTERN.test(lastValue[1])
-    && Match.SUFFIX_BANG_PATTERN.test(property[property.length - 2][1])) {
-    return true;
-  }
-
-  return false;
-}
-
-function stripImportant(property) {
-  var lastValue = property[property.length - 1];
-  var oneButLastValue = property[property.length - 2];
-
-  if (Match.IMPORTANT_TOKEN_PATTERN.test(lastValue[1])) {
-    lastValue[1] = lastValue[1].replace(Match.IMPORTANT_TOKEN_PATTERN, '');
-  } else {
-    lastValue[1] = lastValue[1].replace(Match.IMPORTANT_WORD_PATTERN, '');
-    oneButLastValue[1] = oneButLastValue[1].replace(Match.SUFFIX_BANG_PATTERN, '');
-  }
-
-  if (lastValue[1].length === 0) {
-    property.pop();
-  }
-
-  if (oneButLastValue[1].length === 0) {
-    property.pop();
-  }
-}
-
-function stripPrefixHack(property) {
-  property[1][1] = property[1][1].substring(1);
-}
-
-function stripSuffixHack(property, hackFrom) {
-  var lastValue = property[property.length - 1];
-  lastValue[1] = lastValue[1]
-    .substring(0, lastValue[1].indexOf(hackFrom[0] == Hack.BACKSLASH ? Match.BACKSLASH : Match.BANG))
-    .trim();
-
-  if (lastValue[1].length === 0) {
-    property.pop();
-  }
-}
-
-function wrapSingle(property) {
-  var importantProperty = isImportant(property);
-  if (importantProperty) {
-    stripImportant(property);
-  }
-
-  var whichHack = hackFrom(property);
-  if (whichHack[0] == Hack.ASTERISK || whichHack[0] == Hack.UNDERSCORE) {
-    stripPrefixHack(property);
-  } else if (whichHack[0] == Hack.BACKSLASH || whichHack[0] == Hack.BANG) {
-    stripSuffixHack(property, whichHack);
-  }
-
-  return {
-    block: property[2] && property[2][0] == Token.PROPERTY_BLOCK,
-    components: [],
-    dirty: false,
-    dynamic: someVariableReferences(property),
-    hack: whichHack,
-    important: importantProperty,
-    name: property[1][1],
-    multiplex: property.length > 3 ? isMultiplex(property) : false,
-    optimizable: true,
-    position: 0,
-    shorthand: false,
-    unused: false,
-    value: property.slice(2)
-  };
-}
-
-module.exports = {
-  all: wrapAll,
-  single: wrapSingle
-};
-
-
-/***/ }),
-
-/***/ 77511:
-/***/ ((module) => {
-
-var DEFAULTS = {
-  '*': {
-    colors: {
-      hexAlpha: false, // 4- and 8-character hex notation
-      opacity: true // rgba / hsla
-    },
-    customUnits: { rpx: false },
-    properties: {
-      backgroundClipMerging: true, // background-clip to shorthand
-      backgroundOriginMerging: true, // background-origin to shorthand
-      backgroundSizeMerging: true, // background-size to shorthand
-      colors: true, // any kind of color transformations, like `#ff00ff` to `#f0f` or `#fff` into `red`
-      ieBangHack: false, // !ie suffix hacks on IE<8
-      ieFilters: false, // whether to preserve `filter` and `-ms-filter` properties
-      iePrefixHack: false, // underscore / asterisk prefix hacks on IE
-      ieSuffixHack: false, // \9 suffix hacks on IE6-9, \0 suffix hack on IE6-11
-      merging: true, // merging properties into one
-      shorterLengthUnits: false, // optimize pixel units into `pt`, `pc` or `in` units
-      spaceAfterClosingBrace: true, // 'url() no-repeat' to 'url()no-repeat'
-      urlQuotes: true, // whether to wrap content of `url()` into quotes or not
-      zeroUnits: true // 0[unit] -> 0
-    },
-    selectors: {
-      adjacentSpace: false, // div+ nav Android stock browser hack
-      ie7Hack: false, // *+html hack
-      mergeablePseudoClasses: [
-        ':active',
-        ':after',
-        ':before',
-        ':empty',
-        ':checked',
-        ':disabled',
-        ':empty',
-        ':enabled',
-        ':first-child',
-        ':first-letter',
-        ':first-line',
-        ':first-of-type',
-        ':focus',
-        ':hover',
-        ':lang',
-        ':last-child',
-        ':last-of-type',
-        ':link',
-        ':not',
-        ':nth-child',
-        ':nth-last-child',
-        ':nth-last-of-type',
-        ':nth-of-type',
-        ':only-child',
-        ':only-of-type',
-        ':root',
-        ':target',
-        ':visited'
-      ], // selectors with these pseudo-classes can be merged as these are universally supported
-      mergeablePseudoElements: [
-        '::after',
-        '::before',
-        '::first-letter',
-        '::first-line'
-      ], // selectors with these pseudo-elements can be merged as these are universally supported
-      mergeLimit: 8191, // number of rules that can be safely merged together
-      multiplePseudoMerging: true
-    },
-    units: {
-      ch: true,
-      in: true,
-      pc: true,
-      pt: true,
-      rem: true,
-      vh: true,
-      vm: true, // vm is vmin on IE9+ see https://developer.mozilla.org/en-US/docs/Web/CSS/length
-      vmax: true,
-      vmin: true,
-      vw: true
-    }
-  }
-};
-
-DEFAULTS.ie11 = merge(DEFAULTS['*'], { properties: { ieSuffixHack: true } });
-
-DEFAULTS.ie10 = merge(DEFAULTS['*'], { properties: { ieSuffixHack: true } });
-
-DEFAULTS.ie9 = merge(DEFAULTS['*'], {
-  properties: {
-    ieFilters: true,
-    ieSuffixHack: true
-  }
-});
-
-DEFAULTS.ie8 = merge(DEFAULTS.ie9, {
-  colors: { opacity: false },
-  properties: {
-    backgroundClipMerging: false,
-    backgroundOriginMerging: false,
-    backgroundSizeMerging: false,
-    iePrefixHack: true,
-    merging: false
-  },
-  selectors: {
-    mergeablePseudoClasses: [
-      ':after',
-      ':before',
-      ':first-child',
-      ':first-letter',
-      ':focus',
-      ':hover',
-      ':visited'
-    ],
-    mergeablePseudoElements: []
-  },
-  units: {
-    ch: false,
-    rem: false,
-    vh: false,
-    vm: false,
-    vmax: false,
-    vmin: false,
-    vw: false
-  }
-});
-
-DEFAULTS.ie7 = merge(DEFAULTS.ie8, {
-  properties: { ieBangHack: true },
-  selectors: {
-    ie7Hack: true,
-    mergeablePseudoClasses: [
-      ':first-child',
-      ':first-letter',
-      ':hover',
-      ':visited'
-    ]
-  }
-});
-
-function compatibilityFrom(source) {
-  return merge(DEFAULTS['*'], calculateSource(source));
-}
-
-function merge(source, target) {
-  for (var key in source) {
-    if (Object.prototype.hasOwnProperty.call(source, key)) {
-      var value = source[key];
-
-      if (Object.prototype.hasOwnProperty.call(target, key) && typeof value === 'object' && !Array.isArray(value)) {
-        target[key] = merge(value, target[key] || {});
-      } else {
-        target[key] = key in target ? target[key] : value;
-      }
-    }
-  }
-
-  return target;
-}
-
-function calculateSource(source) {
-  if (typeof source == 'object') { return source; }
-
-  if (!/[,+-]/.test(source)) { return DEFAULTS[source] || DEFAULTS['*']; }
-
-  var parts = source.split(',');
-  var template = parts[0] in DEFAULTS
-    ? DEFAULTS[parts.shift()]
-    : DEFAULTS['*'];
-
-  source = {};
-
-  parts.forEach(function(part) {
-    var isAdd = part[0] == '+';
-    var key = part.substring(1).split('.');
-    var group = key[0];
-    var option = key[1];
-
-    source[group] = source[group] || {};
-    source[group][option] = isAdd;
-  });
-
-  return merge(template, source);
-}
-
-module.exports = compatibilityFrom;
-
-
-/***/ }),
-
-/***/ 30650:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var loadRemoteResource = __webpack_require__(60428);
-
-function fetchFrom(callback) {
-  return callback || loadRemoteResource;
-}
-
-module.exports = fetchFrom;
-
-
-/***/ }),
-
-/***/ 14687:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var systemLineBreak = (__webpack_require__(22037).EOL);
-
-var override = __webpack_require__(28832);
-
-var Breaks = {
-  AfterAtRule: 'afterAtRule',
-  AfterBlockBegins: 'afterBlockBegins',
-  AfterBlockEnds: 'afterBlockEnds',
-  AfterComment: 'afterComment',
-  AfterProperty: 'afterProperty',
-  AfterRuleBegins: 'afterRuleBegins',
-  AfterRuleEnds: 'afterRuleEnds',
-  BeforeBlockEnds: 'beforeBlockEnds',
-  BetweenSelectors: 'betweenSelectors'
-};
-
-var BreakWith = {
-  CarriageReturnLineFeed: '\r\n',
-  LineFeed: '\n',
-  System: systemLineBreak
-};
-
-var IndentWith = {
-  Space: ' ',
-  Tab: '\t'
-};
-
-var Spaces = {
-  AroundSelectorRelation: 'aroundSelectorRelation',
-  BeforeBlockBegins: 'beforeBlockBegins',
-  BeforeValue: 'beforeValue'
-};
-
-var DEFAULTS = {
-  breaks: breaks(false),
-  breakWith: BreakWith.System,
-  indentBy: 0,
-  indentWith: IndentWith.Space,
-  spaces: spaces(false),
-  wrapAt: false,
-  semicolonAfterLastProperty: false
-};
-
-var BEAUTIFY_ALIAS = 'beautify';
-var KEEP_BREAKS_ALIAS = 'keep-breaks';
-
-var OPTION_SEPARATOR = ';';
-var OPTION_NAME_VALUE_SEPARATOR = ':';
-var HASH_VALUES_OPTION_SEPARATOR = ',';
-var HASH_VALUES_NAME_VALUE_SEPARATOR = '=';
-
-var FALSE_KEYWORD_1 = 'false';
-var FALSE_KEYWORD_2 = 'off';
-var TRUE_KEYWORD_1 = 'true';
-var TRUE_KEYWORD_2 = 'on';
-
-function breaks(value) {
-  var breakOptions = {};
-
-  breakOptions[Breaks.AfterAtRule] = value;
-  breakOptions[Breaks.AfterBlockBegins] = value;
-  breakOptions[Breaks.AfterBlockEnds] = value;
-  breakOptions[Breaks.AfterComment] = value;
-  breakOptions[Breaks.AfterProperty] = value;
-  breakOptions[Breaks.AfterRuleBegins] = value;
-  breakOptions[Breaks.AfterRuleEnds] = value;
-  breakOptions[Breaks.BeforeBlockEnds] = value;
-  breakOptions[Breaks.BetweenSelectors] = value;
-
-  return breakOptions;
-}
-
-function spaces(value) {
-  var spaceOptions = {};
-
-  spaceOptions[Spaces.AroundSelectorRelation] = value;
-  spaceOptions[Spaces.BeforeBlockBegins] = value;
-  spaceOptions[Spaces.BeforeValue] = value;
-
-  return spaceOptions;
-}
-
-function formatFrom(source) {
-  if (source === undefined || source === false) {
-    return false;
-  }
-
-  if (typeof source == 'object' && 'breakWith' in source) {
-    source = override(source, { breakWith: mapBreakWith(source.breakWith) });
-  }
-
-  if (typeof source == 'object' && 'indentBy' in source) {
-    source = override(source, { indentBy: parseInt(source.indentBy) });
-  }
-
-  if (typeof source == 'object' && 'indentWith' in source) {
-    source = override(source, { indentWith: mapIndentWith(source.indentWith) });
-  }
-
-  if (typeof source == 'object') {
-    return remapBreaks(override(DEFAULTS, source));
-  }
-
-  if (typeof source == 'string' && source == BEAUTIFY_ALIAS) {
-    return remapBreaks(
-      override(DEFAULTS, {
-        breaks: breaks(true),
-        indentBy: 2,
-        spaces: spaces(true)
-      })
-    );
-  }
-
-  if (typeof source == 'string' && source == KEEP_BREAKS_ALIAS) {
-    return remapBreaks(
-      override(DEFAULTS, {
-        breaks: {
-          afterAtRule: true,
-          afterBlockBegins: true,
-          afterBlockEnds: true,
-          afterComment: true,
-          afterRuleEnds: true,
-          beforeBlockEnds: true
-        }
-      })
-    );
-  }
-
-  if (typeof source == 'string') {
-    return remapBreaks(override(DEFAULTS, toHash(source)));
-  }
-
-  return DEFAULTS;
-}
-
-function toHash(string) {
-  return string
-    .split(OPTION_SEPARATOR)
-    .reduce(function(accumulator, directive) {
-      var parts = directive.split(OPTION_NAME_VALUE_SEPARATOR);
-      var name = parts[0];
-      var value = parts[1];
-
-      if (name == 'breaks' || name == 'spaces') {
-        accumulator[name] = hashValuesToHash(value);
-      } else if (name == 'indentBy' || name == 'wrapAt') {
-        accumulator[name] = parseInt(value);
-      } else if (name == 'indentWith') {
-        accumulator[name] = mapIndentWith(value);
-      } else if (name == 'breakWith') {
-        accumulator[name] = mapBreakWith(value);
-      }
-
-      return accumulator;
-    }, {});
-}
-
-function hashValuesToHash(string) {
-  return string
-    .split(HASH_VALUES_OPTION_SEPARATOR)
-    .reduce(function(accumulator, directive) {
-      var parts = directive.split(HASH_VALUES_NAME_VALUE_SEPARATOR);
-      var name = parts[0];
-      var value = parts[1];
-
-      accumulator[name] = normalizeValue(value);
-
-      return accumulator;
-    }, {});
-}
-
-function normalizeValue(value) {
-  switch (value) {
-  case FALSE_KEYWORD_1:
-  case FALSE_KEYWORD_2:
-    return false;
-  case TRUE_KEYWORD_1:
-  case TRUE_KEYWORD_2:
-    return true;
-  default:
-    return value;
-  }
-}
-
-function mapBreakWith(value) {
-  switch (value) {
-  case 'windows':
-  case 'crlf':
-  case BreakWith.CarriageReturnLineFeed:
-    return BreakWith.CarriageReturnLineFeed;
-  case 'unix':
-  case 'lf':
-  case BreakWith.LineFeed:
-    return BreakWith.LineFeed;
-  default:
-    return systemLineBreak;
-  }
-}
-
-function mapIndentWith(value) {
-  switch (value) {
-  case 'space':
-    return IndentWith.Space;
-  case 'tab':
-    return IndentWith.Tab;
-  default:
-    return value;
-  }
-}
-
-function remapBreaks(source) {
-  for (var key in Breaks) {
-    var breakName = Breaks[key];
-    var breakValue = source.breaks[breakName];
-
-    if (breakValue === true) {
-      source.breaks[breakName] = source.breakWith;
-    } else if (breakValue === false) {
-      source.breaks[breakName] = '';
-    } else {
-      source.breaks[breakName] = source.breakWith.repeat(parseInt(breakValue));
-    }
-  }
-
-  return source;
-}
-
-module.exports = {
-  Breaks: Breaks,
-  Spaces: Spaces,
-  formatFrom: formatFrom
-};
-
-
-/***/ }),
-
-/***/ 76989:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var url = __webpack_require__(57310);
-
-var override = __webpack_require__(28832);
-
-function inlineRequestFrom(option) {
-  return override(
-    /* jshint camelcase: false */
-    proxyOptionsFrom(process.env.HTTP_PROXY || process.env.http_proxy),
-    option || {}
-  );
-}
-
-function proxyOptionsFrom(httpProxy) {
-  return httpProxy
-    ? {
-      hostname: url.parse(httpProxy).hostname,
-      port: parseInt(url.parse(httpProxy).port)
-    }
-    : {};
-}
-
-module.exports = inlineRequestFrom;
-
-
-/***/ }),
-
-/***/ 29585:
-/***/ ((module) => {
-
-var DEFAULT_TIMEOUT = 5000;
-
-function inlineTimeoutFrom(option) {
-  return option || DEFAULT_TIMEOUT;
-}
-
-module.exports = inlineTimeoutFrom;
-
-
-/***/ }),
-
-/***/ 3595:
-/***/ ((module) => {
-
-function inlineOptionsFrom(rules) {
-  if (Array.isArray(rules)) {
-    return rules;
-  }
-
-  if (rules === false) {
-    return ['none'];
-  }
-
-  return undefined === rules
-    ? ['local']
-    : rules.split(',');
-}
-
-module.exports = inlineOptionsFrom;
-
-
-/***/ }),
-
-/***/ 21905:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var roundingPrecisionFrom = (__webpack_require__(1672).roundingPrecisionFrom);
-
-var override = __webpack_require__(28832);
-
-var OptimizationLevel = {
-  Zero: '0',
-  One: '1',
-  Two: '2'
-};
-
-var DEFAULTS = {};
-
-DEFAULTS[OptimizationLevel.Zero] = {};
-DEFAULTS[OptimizationLevel.One] = {
-  cleanupCharsets: true,
-  normalizeUrls: true,
-  optimizeBackground: true,
-  optimizeBorderRadius: true,
-  optimizeFilter: true,
-  optimizeFontWeight: true,
-  optimizeOutline: true,
-  removeEmpty: true,
-  removeNegativePaddings: true,
-  removeQuotes: true,
-  removeWhitespace: true,
-  replaceMultipleZeros: true,
-  replaceTimeUnits: true,
-  replaceZeroUnits: true,
-  roundingPrecision: roundingPrecisionFrom(undefined),
-  selectorsSortingMethod: 'standard',
-  specialComments: 'all',
-  tidyAtRules: true,
-  tidyBlockScopes: true,
-  tidySelectors: true,
-  variableValueOptimizers: []
-};
-DEFAULTS[OptimizationLevel.Two] = {
-  mergeAdjacentRules: true,
-  mergeIntoShorthands: true,
-  mergeMedia: true,
-  mergeNonAdjacentRules: true,
-  mergeSemantically: false,
-  overrideProperties: true,
-  removeEmpty: true,
-  reduceNonAdjacentRules: true,
-  removeDuplicateFontRules: true,
-  removeDuplicateMediaBlocks: true,
-  removeDuplicateRules: true,
-  removeUnusedAtRules: false,
-  restructureRules: false,
-  skipProperties: []
-};
-
-var ALL_KEYWORD_1 = '*';
-var ALL_KEYWORD_2 = 'all';
-var FALSE_KEYWORD_1 = 'false';
-var FALSE_KEYWORD_2 = 'off';
-var TRUE_KEYWORD_1 = 'true';
-var TRUE_KEYWORD_2 = 'on';
-
-var LIST_VALUE_SEPARATOR = ',';
-var OPTION_SEPARATOR = ';';
-var OPTION_VALUE_SEPARATOR = ':';
-
-function optimizationLevelFrom(source) {
-  var level = override(DEFAULTS, {});
-  var Zero = OptimizationLevel.Zero;
-  var One = OptimizationLevel.One;
-  var Two = OptimizationLevel.Two;
-
-  if (undefined === source) {
-    delete level[Two];
-    return level;
-  }
-
-  if (typeof source == 'string') {
-    source = parseInt(source);
-  }
-
-  if (typeof source == 'number' && source === parseInt(Two)) {
-    return level;
-  }
-
-  if (typeof source == 'number' && source === parseInt(One)) {
-    delete level[Two];
-    return level;
-  }
-
-  if (typeof source == 'number' && source === parseInt(Zero)) {
-    delete level[Two];
-    delete level[One];
-    return level;
-  }
-
-  if (typeof source == 'object') {
-    source = covertValuesToHashes(source);
-  }
-
-  if (One in source && 'roundingPrecision' in source[One]) {
-    source[One].roundingPrecision = roundingPrecisionFrom(source[One].roundingPrecision);
-  }
-
-  if (Two in source && 'skipProperties' in source[Two] && typeof (source[Two].skipProperties) == 'string') {
-    source[Two].skipProperties = source[Two].skipProperties.split(LIST_VALUE_SEPARATOR);
-  }
-
-  if (Zero in source || One in source || Two in source) {
-    level[Zero] = override(level[Zero], source[Zero]);
-  }
-
-  if (One in source && ALL_KEYWORD_1 in source[One]) {
-    level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_1])));
-    delete source[One][ALL_KEYWORD_1];
-  }
-
-  if (One in source && ALL_KEYWORD_2 in source[One]) {
-    level[One] = override(level[One], defaults(One, normalizeValue(source[One][ALL_KEYWORD_2])));
-    delete source[One][ALL_KEYWORD_2];
-  }
-
-  if (One in source || Two in source) {
-    level[One] = override(level[One], source[One]);
-  } else {
-    delete level[One];
-  }
-
-  if (Two in source && ALL_KEYWORD_1 in source[Two]) {
-    level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_1])));
-    delete source[Two][ALL_KEYWORD_1];
-  }
-
-  if (Two in source && ALL_KEYWORD_2 in source[Two]) {
-    level[Two] = override(level[Two], defaults(Two, normalizeValue(source[Two][ALL_KEYWORD_2])));
-    delete source[Two][ALL_KEYWORD_2];
-  }
-
-  if (Two in source) {
-    level[Two] = override(level[Two], source[Two]);
-  } else {
-    delete level[Two];
-  }
-
-  return level;
-}
-
-function defaults(level, value) {
-  var options = override(DEFAULTS[level], {});
-  var key;
-
-  for (key in options) {
-    if (typeof options[key] == 'boolean') {
-      options[key] = value;
-    }
-  }
-
-  return options;
-}
-
-function normalizeValue(value) {
-  switch (value) {
-  case FALSE_KEYWORD_1:
-  case FALSE_KEYWORD_2:
-    return false;
-  case TRUE_KEYWORD_1:
-  case TRUE_KEYWORD_2:
-    return true;
-  default:
-    return value;
-  }
-}
-
-function covertValuesToHashes(source) {
-  var clonedSource = override(source, {});
-  var level;
-  var i;
-
-  for (i = 0; i <= 2; i++) {
-    level = '' + i;
-
-    if (level in clonedSource && (clonedSource[level] === undefined || clonedSource[level] === false)) {
-      delete clonedSource[level];
-    }
-
-    if (level in clonedSource && clonedSource[level] === true) {
-      clonedSource[level] = {};
-    }
-
-    if (level in clonedSource && typeof clonedSource[level] == 'string') {
-      clonedSource[level] = covertToHash(clonedSource[level], level);
-    }
-  }
-
-  return clonedSource;
-}
-
-function covertToHash(asString, level) {
-  return asString
-    .split(OPTION_SEPARATOR)
-    .reduce(function(accumulator, directive) {
-      var parts = directive.split(OPTION_VALUE_SEPARATOR);
-      var name = parts[0];
-      var value = parts[1];
-      var normalizedValue = normalizeValue(value);
-
-      if (ALL_KEYWORD_1 == name || ALL_KEYWORD_2 == name) {
-        accumulator = override(accumulator, defaults(level, normalizedValue));
-      } else {
-        accumulator[name] = normalizedValue;
-      }
-
-      return accumulator;
-    }, {});
-}
-
-module.exports = {
-  OptimizationLevel: OptimizationLevel,
-  optimizationLevelFrom: optimizationLevelFrom
-};
-
-
-/***/ }),
-
-/***/ 81033:
-/***/ ((module) => {
-
-function pluginsFrom(plugins) {
-  var flatPlugins = {
-    level1Value: [],
-    level1Property: [],
-    level2Block: []
-  };
-
-  plugins = plugins || [];
-
-  flatPlugins.level1Value = plugins
-    .map(function(plugin) { return plugin.level1 && plugin.level1.value; })
-    .filter(function(plugin) { return plugin != null; });
-
-  flatPlugins.level1Property = plugins
-    .map(function(plugin) { return plugin.level1 && plugin.level1.property; })
-    .filter(function(plugin) { return plugin != null; });
-
-  flatPlugins.level2Block = plugins
-    .map(function(plugin) { return plugin.level2 && plugin.level2.block; })
-    .filter(function(plugin) { return plugin != null; });
-
-  return flatPlugins;
-}
-
-module.exports = pluginsFrom;
-
-
-/***/ }),
-
-/***/ 68835:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var path = __webpack_require__(71017);
-
-function rebaseToFrom(option) {
-  return option ? path.resolve(option) : process.cwd();
-}
-
-module.exports = rebaseToFrom;
-
-
-/***/ }),
-
-/***/ 82381:
-/***/ ((module) => {
-
-function rebaseFrom(rebaseOption, rebaseToOption) {
-  if (undefined !== rebaseToOption) {
-    return true;
-  } if (undefined === rebaseOption) {
-    return false;
-  }
-  return !!rebaseOption;
-}
-
-module.exports = rebaseFrom;
-
-
-/***/ }),
-
-/***/ 1672:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var override = __webpack_require__(28832);
-
-var INTEGER_PATTERN = /^\d+$/;
-
-var ALL_UNITS = ['*', 'all'];
-var DEFAULT_PRECISION = 'off'; // all precision changes are disabled
-var DIRECTIVES_SEPARATOR = ','; // e.g. *=5,px=3
-var DIRECTIVE_VALUE_SEPARATOR = '='; // e.g. *=5
-
-function roundingPrecisionFrom(source) {
-  return override(defaults(DEFAULT_PRECISION), buildPrecisionFrom(source));
-}
-
-function defaults(value) {
-  return {
-    ch: value,
-    cm: value,
-    em: value,
-    ex: value,
-    in: value,
-    mm: value,
-    pc: value,
-    pt: value,
-    px: value,
-    q: value,
-    rem: value,
-    vh: value,
-    vmax: value,
-    vmin: value,
-    vw: value,
-    '%': value
-  };
-}
-
-function buildPrecisionFrom(source) {
-  if (source === null || source === undefined) {
-    return {};
-  }
-
-  if (typeof source == 'boolean') {
-    return {};
-  }
-
-  if (typeof source == 'number' && source == -1) {
-    return defaults(DEFAULT_PRECISION);
-  }
-
-  if (typeof source == 'number') {
-    return defaults(source);
-  }
-
-  if (typeof source == 'string' && INTEGER_PATTERN.test(source)) {
-    return defaults(parseInt(source));
-  }
-
-  if (typeof source == 'string' && source == DEFAULT_PRECISION) {
-    return defaults(DEFAULT_PRECISION);
-  }
-
-  if (typeof source == 'object') {
-    return source;
-  }
-
-  return source
-    .split(DIRECTIVES_SEPARATOR)
-    .reduce(function(accumulator, directive) {
-      var directiveParts = directive.split(DIRECTIVE_VALUE_SEPARATOR);
-      var name = directiveParts[0];
-      var value = parseInt(directiveParts[1]);
-
-      if (Number.isNaN(value) || value == -1) {
-        value = DEFAULT_PRECISION;
-      }
-
-      if (ALL_UNITS.indexOf(name) > -1) {
-        accumulator = override(accumulator, defaults(value));
-      } else {
-        accumulator[name] = value;
-      }
-
-      return accumulator;
-    }, {});
-}
-
-module.exports = {
-  DEFAULT: DEFAULT_PRECISION,
-  roundingPrecisionFrom: roundingPrecisionFrom
-};
-
-
-/***/ }),
-
-/***/ 78536:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var fs = __webpack_require__(57147);
-var path = __webpack_require__(71017);
-
-var isAllowedResource = __webpack_require__(42885);
-var matchDataUri = __webpack_require__(83191);
-var rebaseLocalMap = __webpack_require__(89858);
-var rebaseRemoteMap = __webpack_require__(40978);
-
-var Token = __webpack_require__(44633);
-var hasProtocol = __webpack_require__(13884);
-var isDataUriResource = __webpack_require__(9865);
-var isRemoteResource = __webpack_require__(14234);
-
-var MAP_MARKER_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/;
-
-function applySourceMaps(tokens, context, callback) {
-  var applyContext = {
-    callback: callback,
-    fetch: context.options.fetch,
-    index: 0,
-    inline: context.options.inline,
-    inlineRequest: context.options.inlineRequest,
-    inlineTimeout: context.options.inlineTimeout,
-    inputSourceMapTracker: context.inputSourceMapTracker,
-    localOnly: context.localOnly,
-    processedTokens: [],
-    rebaseTo: context.options.rebaseTo,
-    sourceTokens: tokens,
-    warnings: context.warnings
-  };
-
-  return context.options.sourceMap && tokens.length > 0
-    ? doApplySourceMaps(applyContext)
-    : callback(tokens);
-}
-
-function doApplySourceMaps(applyContext) {
-  var singleSourceTokens = [];
-  var lastSource = findTokenSource(applyContext.sourceTokens[0]);
-  var source;
-  var token;
-  var l;
-
-  for (l = applyContext.sourceTokens.length; applyContext.index < l; applyContext.index++) {
-    token = applyContext.sourceTokens[applyContext.index];
-    source = findTokenSource(token);
-
-    if (source != lastSource) {
-      singleSourceTokens = [];
-      lastSource = source;
-    }
-
-    singleSourceTokens.push(token);
-    applyContext.processedTokens.push(token);
-
-    if (token[0] == Token.COMMENT && MAP_MARKER_PATTERN.test(token[1])) {
-      return fetchAndApplySourceMap(token[1], source, singleSourceTokens, applyContext);
-    }
-  }
-
-  return applyContext.callback(applyContext.processedTokens);
-}
-
-function findTokenSource(token) {
-  var scope;
-  var metadata;
-
-  if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT || token[0] == Token.RAW) {
-    metadata = token[2][0];
-  } else {
-    scope = token[1][0];
-    metadata = scope[2][0];
-  }
-
-  return metadata[2];
-}
-
-function fetchAndApplySourceMap(sourceMapComment, source, singleSourceTokens, applyContext) {
-  return extractInputSourceMapFrom(sourceMapComment, applyContext, function(inputSourceMap) {
-    if (inputSourceMap) {
-      applyContext.inputSourceMapTracker.track(source, inputSourceMap);
-      applySourceMapRecursively(singleSourceTokens, applyContext.inputSourceMapTracker);
-    }
-
-    applyContext.index++;
-    return doApplySourceMaps(applyContext);
-  });
-}
-
-function extractInputSourceMapFrom(sourceMapComment, applyContext, whenSourceMapReady) {
-  var uri = MAP_MARKER_PATTERN.exec(sourceMapComment)[1];
-  var absoluteUri;
-  var sourceMap;
-  var rebasedMap;
-
-  if (isDataUriResource(uri)) {
-    sourceMap = extractInputSourceMapFromDataUri(uri);
-    return whenSourceMapReady(sourceMap);
-  } if (isRemoteResource(uri)) {
-    return loadInputSourceMapFromRemoteUri(uri, applyContext, function(sourceMap) {
-      var parsedMap;
-
-      if (sourceMap) {
-        parsedMap = JSON.parse(sourceMap);
-        rebasedMap = rebaseRemoteMap(parsedMap, uri);
-        whenSourceMapReady(rebasedMap);
-      } else {
-        whenSourceMapReady(null);
-      }
-    });
-  }
-  // at this point `uri` is already rebased, see lib/reader/rebase.js#rebaseSourceMapComment
-  // it is rebased to be consistent with rebasing other URIs
-  // however here we need to resolve it back to read it from disk
-  absoluteUri = path.resolve(applyContext.rebaseTo, uri);
-  sourceMap = loadInputSourceMapFromLocalUri(absoluteUri, applyContext);
-
-  if (sourceMap) {
-    rebasedMap = rebaseLocalMap(sourceMap, absoluteUri, applyContext.rebaseTo);
-    return whenSourceMapReady(rebasedMap);
-  }
-  return whenSourceMapReady(null);
-}
-
-function extractInputSourceMapFromDataUri(uri) {
-  var dataUriMatch = matchDataUri(uri);
-  var charset = dataUriMatch[2] ? dataUriMatch[2].split(/[=;]/)[2] : 'us-ascii';
-  var encoding = dataUriMatch[3] ? dataUriMatch[3].split(';')[1] : 'utf8';
-  var data = encoding == 'utf8' ? global.unescape(dataUriMatch[4]) : dataUriMatch[4];
-
-  var buffer = Buffer.from(data, encoding);
-  buffer.charset = charset;
-
-  return JSON.parse(buffer.toString());
-}
-
-function loadInputSourceMapFromRemoteUri(uri, applyContext, whenLoaded) {
-  var isAllowed = isAllowedResource(uri, true, applyContext.inline);
-  var isRuntimeResource = !hasProtocol(uri);
-
-  if (applyContext.localOnly) {
-    applyContext.warnings.push('Cannot fetch remote resource from "' + uri + '" as no callback given.');
-    return whenLoaded(null);
-  } if (isRuntimeResource) {
-    applyContext.warnings.push('Cannot fetch "' + uri + '" as no protocol given.');
-    return whenLoaded(null);
-  } if (!isAllowed) {
-    applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.');
-    return whenLoaded(null);
-  }
-
-  applyContext.fetch(uri, applyContext.inlineRequest, applyContext.inlineTimeout, function(error, body) {
-    if (error) {
-      applyContext.warnings.push('Missing source map at "' + uri + '" - ' + error);
-      return whenLoaded(null);
-    }
-
-    whenLoaded(body);
-  });
-}
-
-function loadInputSourceMapFromLocalUri(uri, applyContext) {
-  var isAllowed = isAllowedResource(uri, false, applyContext.inline);
-  var sourceMap;
-
-  if (!fs.existsSync(uri) || !fs.statSync(uri).isFile()) {
-    applyContext.warnings.push('Ignoring local source map at "' + uri + '" as resource is missing.');
-    return null;
-  } if (!isAllowed) {
-    applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.');
-    return null;
-  } if (!fs.statSync(uri).size) {
-    applyContext.warnings.push('Cannot fetch "' + uri + '" as resource is empty.');
-    return null;
-  }
-
-  sourceMap = fs.readFileSync(uri, 'utf-8');
-  return JSON.parse(sourceMap);
-}
-
-function applySourceMapRecursively(tokens, inputSourceMapTracker) {
-  var token;
-  var i, l;
-
-  for (i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
-
-    switch (token[0]) {
-    case Token.AT_RULE:
-      applySourceMapTo(token, inputSourceMapTracker);
-      break;
-    case Token.AT_RULE_BLOCK:
-      applySourceMapRecursively(token[1], inputSourceMapTracker);
-      applySourceMapRecursively(token[2], inputSourceMapTracker);
-      break;
-    case Token.AT_RULE_BLOCK_SCOPE:
-      applySourceMapTo(token, inputSourceMapTracker);
-      break;
-    case Token.NESTED_BLOCK:
-      applySourceMapRecursively(token[1], inputSourceMapTracker);
-      applySourceMapRecursively(token[2], inputSourceMapTracker);
-      break;
-    case Token.NESTED_BLOCK_SCOPE:
-      applySourceMapTo(token, inputSourceMapTracker);
-      break;
-    case Token.COMMENT:
-      applySourceMapTo(token, inputSourceMapTracker);
-      break;
-    case Token.PROPERTY:
-      applySourceMapRecursively(token, inputSourceMapTracker);
-      break;
-    case Token.PROPERTY_BLOCK:
-      applySourceMapRecursively(token[1], inputSourceMapTracker);
-      break;
-    case Token.PROPERTY_NAME:
-      applySourceMapTo(token, inputSourceMapTracker);
-      break;
-    case Token.PROPERTY_VALUE:
-      applySourceMapTo(token, inputSourceMapTracker);
-      break;
-    case Token.RULE:
-      applySourceMapRecursively(token[1], inputSourceMapTracker);
-      applySourceMapRecursively(token[2], inputSourceMapTracker);
-      break;
-    case Token.RULE_SCOPE:
-      applySourceMapTo(token, inputSourceMapTracker);
-    }
-  }
-
-  return tokens;
-}
-
-function applySourceMapTo(token, inputSourceMapTracker) {
-  var value = token[1];
-  var metadata = token[2];
-  var newMetadata = [];
-  var i, l;
-
-  for (i = 0, l = metadata.length; i < l; i++) {
-    newMetadata.push(inputSourceMapTracker.originalPositionFor(metadata[i], value.length));
-  }
-
-  token[2] = newMetadata;
-}
-
-module.exports = applySourceMaps;
-
-
-/***/ }),
-
-/***/ 73850:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var split = __webpack_require__(76439);
-
-var BRACE_PREFIX = /^\(/;
-var BRACE_SUFFIX = /\)$/;
-var IMPORT_PREFIX_PATTERN = /^@import/i;
-var QUOTE_PREFIX_PATTERN = /['"]\s{0,31}/;
-var QUOTE_SUFFIX_PATTERN = /\s{0,31}['"]/;
-var URL_PREFIX_PATTERN = /^url\(\s{0,31}/i;
-var URL_SUFFIX_PATTERN = /\s{0,31}\)/i;
-
-function extractImportUrlAndMedia(atRuleValue) {
-  var uri;
-  var mediaQuery;
-  var stripped;
-  var parts;
-
-  stripped = atRuleValue
-    .replace(IMPORT_PREFIX_PATTERN, '')
-    .trim()
-    .replace(URL_PREFIX_PATTERN, '(')
-    .replace(URL_SUFFIX_PATTERN, ')')
-    .replace(QUOTE_PREFIX_PATTERN, '')
-    .replace(QUOTE_SUFFIX_PATTERN, '');
-
-  parts = split(stripped, ' ');
-
-  uri = parts[0]
-    .replace(BRACE_PREFIX, '')
-    .replace(BRACE_SUFFIX, '');
-  mediaQuery = parts.slice(1).join(' ');
-
-  return [uri, mediaQuery];
-}
-
-module.exports = extractImportUrlAndMedia;
-
-
-/***/ }),
-
-/***/ 94626:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var SourceMapConsumer = (__webpack_require__(49125).SourceMapConsumer);
-
-function inputSourceMapTracker() {
-  var maps = {};
-
-  return {
-    all: all.bind(null, maps),
-    isTracking: isTracking.bind(null, maps),
-    originalPositionFor: originalPositionFor.bind(null, maps),
-    track: track.bind(null, maps)
-  };
-}
-
-function all(maps) {
-  return maps;
-}
-
-function isTracking(maps, source) {
-  return source in maps;
-}
-
-function originalPositionFor(maps, metadata, range, selectorFallbacks) {
-  var line = metadata[0];
-  var column = metadata[1];
-  var source = metadata[2];
-  var position = {
-    line: line,
-    column: column + range
-  };
-  var originalPosition;
-
-  while (!originalPosition && position.column > column) {
-    position.column--;
-    originalPosition = maps[source].originalPositionFor(position);
-  }
-
-  if (!originalPosition || originalPosition.column < 0) {
-    return metadata;
-  }
-
-  if (originalPosition.line === null && line > 1 && selectorFallbacks > 0) {
-    return originalPositionFor(maps, [line - 1, column, source], range, selectorFallbacks - 1);
-  }
-
-  return originalPosition.line !== null
-    ? toMetadata(originalPosition)
-    : metadata;
-}
-
-function toMetadata(asHash) {
-  return [asHash.line, asHash.column, asHash.source];
-}
-
-function track(maps, source, data) {
-  maps[source] = new SourceMapConsumer(data);
-}
-
-module.exports = inputSourceMapTracker;
-
-
-/***/ }),
-
-/***/ 42885:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var path = __webpack_require__(71017);
-var url = __webpack_require__(57310);
-
-var isRemoteResource = __webpack_require__(14234);
-var hasProtocol = __webpack_require__(13884);
-
-var HTTP_PROTOCOL = 'http:';
-
-function isAllowedResource(uri, isRemote, rules) {
-  var match;
-  var absoluteUri;
-  var allowed = !isRemote;
-  var rule;
-  var isNegated;
-  var normalizedRule;
-  var i;
-
-  if (rules.length === 0) {
-    return false;
-  }
-
-  if (isRemote && !hasProtocol(uri)) {
-    uri = HTTP_PROTOCOL + uri;
-  }
-
-  match = isRemote
-    ? url.parse(uri).host
-    : uri;
-
-  absoluteUri = isRemote
-    ? uri
-    : path.resolve(uri);
-
-  for (i = 0; i < rules.length; i++) {
-    rule = rules[i];
-    isNegated = rule[0] == '!';
-    normalizedRule = rule.substring(1);
-
-    if (isNegated && isRemote && isRemoteRule(normalizedRule)) {
-      allowed = allowed && !isAllowedResource(uri, true, [normalizedRule]);
-    } else if (isNegated && !isRemote && !isRemoteRule(normalizedRule)) {
-      allowed = allowed && !isAllowedResource(uri, false, [normalizedRule]);
-    } else if (isNegated) {
-      allowed = allowed && true;
-    } else if (rule == 'all') {
-      allowed = true;
-    } else if (isRemote && rule == 'local') {
-      allowed = allowed || false;
-    } else if (isRemote && rule == 'remote') {
-      allowed = true;
-    } else if (!isRemote && rule == 'remote') {
-      allowed = false;
-    } else if (!isRemote && rule == 'local') {
-      allowed = true;
-    } else if (rule === match) {
-      allowed = true;
-    } else if (rule === uri) {
-      allowed = true;
-    } else if (isRemote && absoluteUri.indexOf(rule) === 0) {
-      allowed = true;
-    } else if (!isRemote && absoluteUri.indexOf(path.resolve(rule)) === 0) {
-      allowed = true;
-    } else if (isRemote != isRemoteRule(normalizedRule)) {
-      allowed = allowed && true;
-    } else {
-      allowed = false;
-    }
-  }
-
-  return allowed;
-}
-
-function isRemoteRule(rule) {
-  return isRemoteResource(rule) || url.parse(HTTP_PROTOCOL + '//' + rule).host == rule;
-}
-
-module.exports = isAllowedResource;
-
-
-/***/ }),
-
-/***/ 15664:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var fs = __webpack_require__(57147);
-var path = __webpack_require__(71017);
-
-var isAllowedResource = __webpack_require__(42885);
-
-var hasProtocol = __webpack_require__(13884);
-var isRemoteResource = __webpack_require__(14234);
-
-function loadOriginalSources(context, callback) {
-  var loadContext = {
-    callback: callback,
-    fetch: context.options.fetch,
-    index: 0,
-    inline: context.options.inline,
-    inlineRequest: context.options.inlineRequest,
-    inlineTimeout: context.options.inlineTimeout,
-    localOnly: context.localOnly,
-    rebaseTo: context.options.rebaseTo,
-    sourcesContent: context.sourcesContent,
-    uriToSource: uriToSourceMapping(context.inputSourceMapTracker.all()),
-    warnings: context.warnings
-  };
-
-  return context.options.sourceMap && context.options.sourceMapInlineSources
-    ? doLoadOriginalSources(loadContext)
-    : callback();
-}
-
-function uriToSourceMapping(allSourceMapConsumers) {
-  var mapping = {};
-  var consumer;
-  var uri;
-  var source;
-  var i, l;
-
-  for (source in allSourceMapConsumers) {
-    consumer = allSourceMapConsumers[source];
-
-    for (i = 0, l = consumer.sources.length; i < l; i++) {
-      uri = consumer.sources[i];
-      source = consumer.sourceContentFor(uri, true);
-
-      mapping[uri] = source;
-    }
-  }
-
-  return mapping;
-}
-
-function doLoadOriginalSources(loadContext) {
-  var uris = Object.keys(loadContext.uriToSource);
-  var uri;
-  var source;
-  var total;
-
-  for (total = uris.length; loadContext.index < total; loadContext.index++) {
-    uri = uris[loadContext.index];
-    source = loadContext.uriToSource[uri];
-
-    if (source) {
-      loadContext.sourcesContent[uri] = source;
-    } else {
-      return loadOriginalSource(uri, loadContext);
-    }
-  }
-
-  return loadContext.callback();
-}
-
-function loadOriginalSource(uri, loadContext) {
-  var content;
-
-  if (isRemoteResource(uri)) {
-    return loadOriginalSourceFromRemoteUri(uri, loadContext, function(content) {
-      loadContext.index++;
-      loadContext.sourcesContent[uri] = content;
-      return doLoadOriginalSources(loadContext);
-    });
-  }
-  content = loadOriginalSourceFromLocalUri(uri, loadContext);
-  loadContext.index++;
-  loadContext.sourcesContent[uri] = content;
-  return doLoadOriginalSources(loadContext);
-}
-
-function loadOriginalSourceFromRemoteUri(uri, loadContext, whenLoaded) {
-  var isAllowed = isAllowedResource(uri, true, loadContext.inline);
-  var isRuntimeResource = !hasProtocol(uri);
-
-  if (loadContext.localOnly) {
-    loadContext.warnings.push('Cannot fetch remote resource from "' + uri + '" as no callback given.');
-    return whenLoaded(null);
-  } if (isRuntimeResource) {
-    loadContext.warnings.push('Cannot fetch "' + uri + '" as no protocol given.');
-    return whenLoaded(null);
-  } if (!isAllowed) {
-    loadContext.warnings.push('Cannot fetch "' + uri + '" as resource is not allowed.');
-    return whenLoaded(null);
-  }
-
-  loadContext.fetch(uri, loadContext.inlineRequest, loadContext.inlineTimeout, function(error, content) {
-    if (error) {
-      loadContext.warnings.push('Missing original source at "' + uri + '" - ' + error);
-    }
-
-    whenLoaded(content);
-  });
-}
-
-function loadOriginalSourceFromLocalUri(relativeUri, loadContext) {
-  var isAllowed = isAllowedResource(relativeUri, false, loadContext.inline);
-  var absoluteUri = path.resolve(loadContext.rebaseTo, relativeUri);
-
-  if (!fs.existsSync(absoluteUri) || !fs.statSync(absoluteUri).isFile()) {
-    loadContext.warnings.push('Ignoring local source map at "' + absoluteUri + '" as resource is missing.');
-    return null;
-  } if (!isAllowed) {
-    loadContext.warnings.push('Cannot fetch "' + absoluteUri + '" as resource is not allowed.');
-    return null;
-  }
-
-  return fs.readFileSync(absoluteUri, 'utf8');
-}
-
-module.exports = loadOriginalSources;
-
-
-/***/ }),
-
-/***/ 60428:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var http = __webpack_require__(13685);
-var https = __webpack_require__(95687);
-var url = __webpack_require__(57310);
-
-var isHttpResource = __webpack_require__(28276);
-var isHttpsResource = __webpack_require__(46683);
-var override = __webpack_require__(28832);
-
-var HTTP_PROTOCOL = 'http:';
-
-function loadRemoteResource(uri, inlineRequest, inlineTimeout, callback) {
-  var proxyProtocol = inlineRequest.protocol || inlineRequest.hostname;
-  var errorHandled = false;
-  var requestOptions;
-  var fetch;
-
-  requestOptions = override(
-    url.parse(uri),
-    inlineRequest || {}
-  );
-
-  if (inlineRequest.hostname !== undefined) {
-    // overwrite as we always expect a http proxy currently
-    requestOptions.protocol = inlineRequest.protocol || HTTP_PROTOCOL;
-    requestOptions.path = requestOptions.href;
-  }
-
-  fetch = (proxyProtocol && !isHttpsResource(proxyProtocol)) || isHttpResource(uri)
-    ? http.get
-    : https.get;
-
-  fetch(requestOptions, function(res) {
-    var chunks = [];
-    var movedUri;
-
-    if (errorHandled) {
-      return;
-    }
-
-    if (res.statusCode < 200 || res.statusCode > 399) {
-      return callback(res.statusCode, null);
-    } if (res.statusCode > 299) {
-      movedUri = url.resolve(uri, res.headers.location);
-      return loadRemoteResource(movedUri, inlineRequest, inlineTimeout, callback);
-    }
-
-    res.on('data', function(chunk) {
-      chunks.push(chunk.toString());
-    });
-    res.on('end', function() {
-      var body = chunks.join('');
-      callback(null, body);
-    });
-  })
-    .on('error', function(res) {
-      if (errorHandled) {
-        return;
-      }
-
-      errorHandled = true;
-      callback(res.message, null);
-    })
-    .on('timeout', function() {
-      if (errorHandled) {
-        return;
-      }
-
-      errorHandled = true;
-      callback('timeout', null);
-    })
-    .setTimeout(inlineTimeout);
-}
-
-module.exports = loadRemoteResource;
-
-
-/***/ }),
-
-/***/ 83191:
-/***/ ((module) => {
-
-var DATA_URI_PATTERN = /^data:(\S*?)?(;charset=(?:(?!;charset=)[^;])+)?(;[^,]+?)?,(.+)/;
-
-function matchDataUri(uri) {
-  return DATA_URI_PATTERN.exec(uri);
-}
-
-module.exports = matchDataUri;
-
-
-/***/ }),
-
-/***/ 26960:
-/***/ ((module) => {
-
-var UNIX_SEPARATOR = '/';
-var WINDOWS_SEPARATOR_PATTERN = /\\/g;
-
-function normalizePath(path) {
-  return path.replace(WINDOWS_SEPARATOR_PATTERN, UNIX_SEPARATOR);
-}
-
-module.exports = normalizePath;
-
-
-/***/ }),
-
-/***/ 48792:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var fs = __webpack_require__(57147);
-var path = __webpack_require__(71017);
-
-var applySourceMaps = __webpack_require__(78536);
-var extractImportUrlAndMedia = __webpack_require__(73850);
-var isAllowedResource = __webpack_require__(42885);
-var loadOriginalSources = __webpack_require__(15664);
-var normalizePath = __webpack_require__(26960);
-var rebase = __webpack_require__(18979);
-var rebaseLocalMap = __webpack_require__(89858);
-var rebaseRemoteMap = __webpack_require__(40978);
-var restoreImport = __webpack_require__(8058);
-
-var tokenize = __webpack_require__(58584);
-var Token = __webpack_require__(44633);
-var Marker = __webpack_require__(53820);
-var hasProtocol = __webpack_require__(13884);
-var isImport = __webpack_require__(67937);
-var isRemoteResource = __webpack_require__(14234);
-
-var UNKNOWN_URI = 'uri:unknown';
-var FILE_RESOURCE_PROTOCOL = 'file://';
-
-function readSources(input, context, callback) {
-  return doReadSources(input, context, function(tokens) {
-    return applySourceMaps(tokens, context, function() {
-      return loadOriginalSources(context, function() { return callback(tokens); });
-    });
-  });
-}
-
-function doReadSources(input, context, callback) {
-  if (typeof input == 'string') {
-    return fromString(input, context, callback);
-  } if (Buffer.isBuffer(input)) {
-    return fromString(input.toString(), context, callback);
-  } if (Array.isArray(input)) {
-    return fromArray(input, context, callback);
-  } if (typeof input == 'object') {
-    return fromHash(input, context, callback);
-  }
-}
-
-function fromString(input, context, callback) {
-  context.source = undefined;
-  context.sourcesContent[undefined] = input;
-  context.stats.originalSize += input.length;
-
-  return fromStyles(input, context, { inline: context.options.inline }, callback);
-}
-
-function fromArray(input, context, callback) {
-  var inputAsImports = input.reduce(function(accumulator, uriOrHash) {
-    if (typeof uriOrHash === 'string') {
-      return addStringSource(uriOrHash, accumulator);
-    }
-    return addHashSource(uriOrHash, context, accumulator);
-  }, []);
-
-  return fromStyles(inputAsImports.join(''), context, { inline: ['all'] }, callback);
-}
-
-function fromHash(input, context, callback) {
-  var inputAsImports = addHashSource(input, context, []);
-  return fromStyles(inputAsImports.join(''), context, { inline: ['all'] }, callback);
-}
-
-function addStringSource(input, imports) {
-  imports.push(restoreAsImport(normalizeUri(input)));
-  return imports;
-}
-
-function addHashSource(input, context, imports) {
-  var uri;
-  var normalizedUri;
-  var source;
-
-  for (uri in input) {
-    source = input[uri];
-    normalizedUri = normalizeUri(uri);
-
-    imports.push(restoreAsImport(normalizedUri));
-
-    context.sourcesContent[normalizedUri] = source.styles;
-
-    if (source.sourceMap) {
-      trackSourceMap(source.sourceMap, normalizedUri, context);
-    }
-  }
-
-  return imports;
-}
-
-function normalizeUri(uri) {
-  var currentPath = path.resolve('');
-  var absoluteUri;
-  var relativeToCurrentPath;
-  var normalizedUri;
-
-  if (isRemoteResource(uri)) {
-    return uri;
-  }
-
-  absoluteUri = path.isAbsolute(uri)
-    ? uri
-    : path.resolve(uri);
-  relativeToCurrentPath = path.relative(currentPath, absoluteUri);
-  normalizedUri = normalizePath(relativeToCurrentPath);
-
-  return normalizedUri;
-}
-
-function trackSourceMap(sourceMap, uri, context) {
-  var parsedMap = typeof sourceMap == 'string'
-    ? JSON.parse(sourceMap)
-    : sourceMap;
-  var rebasedMap = isRemoteResource(uri)
-    ? rebaseRemoteMap(parsedMap, uri)
-    : rebaseLocalMap(parsedMap, uri || UNKNOWN_URI, context.options.rebaseTo);
-
-  context.inputSourceMapTracker.track(uri, rebasedMap);
-}
-
-function restoreAsImport(uri) {
-  return restoreImport('url(' + uri + ')', '') + Marker.SEMICOLON;
-}
-
-function fromStyles(styles, context, parentInlinerContext, callback) {
-  var tokens;
-  var rebaseConfig = {};
-
-  if (!context.source) {
-    rebaseConfig.fromBase = path.resolve('');
-    rebaseConfig.toBase = context.options.rebaseTo;
-  } else if (isRemoteResource(context.source)) {
-    rebaseConfig.fromBase = context.source;
-    rebaseConfig.toBase = context.source;
-  } else if (path.isAbsolute(context.source)) {
-    rebaseConfig.fromBase = path.dirname(context.source);
-    rebaseConfig.toBase = context.options.rebaseTo;
-  } else {
-    rebaseConfig.fromBase = path.dirname(path.resolve(context.source));
-    rebaseConfig.toBase = context.options.rebaseTo;
-  }
-
-  tokens = tokenize(styles, context);
-  tokens = rebase(tokens, context.options.rebase, context.validator, rebaseConfig);
-
-  return allowsAnyImports(parentInlinerContext.inline)
-    ? inline(tokens, context, parentInlinerContext, callback)
-    : callback(tokens);
-}
-
-function allowsAnyImports(inline) {
-  return !(inline.length == 1 && inline[0] == 'none');
-}
-
-function inline(tokens, externalContext, parentInlinerContext, callback) {
-  var inlinerContext = {
-    afterContent: false,
-    callback: callback,
-    errors: externalContext.errors,
-    externalContext: externalContext,
-    fetch: externalContext.options.fetch,
-    inlinedStylesheets: parentInlinerContext.inlinedStylesheets || externalContext.inlinedStylesheets,
-    inline: parentInlinerContext.inline,
-    inlineRequest: externalContext.options.inlineRequest,
-    inlineTimeout: externalContext.options.inlineTimeout,
-    isRemote: parentInlinerContext.isRemote || false,
-    localOnly: externalContext.localOnly,
-    outputTokens: [],
-    rebaseTo: externalContext.options.rebaseTo,
-    sourceTokens: tokens,
-    warnings: externalContext.warnings
-  };
-
-  return doInlineImports(inlinerContext);
-}
-
-function doInlineImports(inlinerContext) {
-  var token;
-  var i, l;
-
-  for (i = 0, l = inlinerContext.sourceTokens.length; i < l; i++) {
-    token = inlinerContext.sourceTokens[i];
-
-    if (token[0] == Token.AT_RULE && isImport(token[1])) {
-      inlinerContext.sourceTokens.splice(0, i);
-      return inlineStylesheet(token, inlinerContext);
-    } if (token[0] == Token.AT_RULE || token[0] == Token.COMMENT) {
-      inlinerContext.outputTokens.push(token);
-    } else {
-      inlinerContext.outputTokens.push(token);
-      inlinerContext.afterContent = true;
-    }
-  }
-
-  inlinerContext.sourceTokens = [];
-  return inlinerContext.callback(inlinerContext.outputTokens);
-}
-
-function inlineStylesheet(token, inlinerContext) {
-  var uriAndMediaQuery = extractImportUrlAndMedia(token[1]);
-  var uri = uriAndMediaQuery[0];
-  var mediaQuery = uriAndMediaQuery[1];
-  var metadata = token[2];
-
-  return isRemoteResource(uri)
-    ? inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext)
-    : inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext);
-}
-
-function inlineRemoteStylesheet(uri, mediaQuery, metadata, inlinerContext) {
-  var isAllowed = isAllowedResource(uri, true, inlinerContext.inline);
-  var originalUri = uri;
-  var isLoaded = uri in inlinerContext.externalContext.sourcesContent;
-  var isRuntimeResource = !hasProtocol(uri);
-
-  if (inlinerContext.inlinedStylesheets.indexOf(uri) > -1) {
-    inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as it has already been imported.');
-    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-    return doInlineImports(inlinerContext);
-  } if (inlinerContext.localOnly && inlinerContext.afterContent) {
-    inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as no callback given and after other content.');
-    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-    return doInlineImports(inlinerContext);
-  } if (isRuntimeResource) {
-    inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as no protocol given.');
-    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
-    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-    return doInlineImports(inlinerContext);
-  } if (inlinerContext.localOnly && !isLoaded) {
-    inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as no callback given.');
-    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
-    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-    return doInlineImports(inlinerContext);
-  } if (!isAllowed && inlinerContext.afterContent) {
-    inlinerContext.warnings.push('Ignoring remote @import of "' + uri + '" as resource is not allowed and after other content.');
-    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-    return doInlineImports(inlinerContext);
-  } if (!isAllowed) {
-    inlinerContext.warnings.push('Skipping remote @import of "' + uri + '" as resource is not allowed.');
-    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
-    inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-    return doInlineImports(inlinerContext);
-  }
-
-  inlinerContext.inlinedStylesheets.push(uri);
-
-  function whenLoaded(error, importedStyles) {
-    if (error) {
-      inlinerContext.errors.push('Broken @import declaration of "' + uri + '" - ' + error);
-
-      return process.nextTick(function() {
-        inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
-        inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-        doInlineImports(inlinerContext);
-      });
-    }
-
-    inlinerContext.inline = inlinerContext.externalContext.options.inline;
-    inlinerContext.isRemote = true;
-
-    inlinerContext.externalContext.source = originalUri;
-    inlinerContext.externalContext.sourcesContent[uri] = importedStyles;
-    inlinerContext.externalContext.stats.originalSize += importedStyles.length;
-
-    return fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function(importedTokens) {
-      importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata);
-
-      inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens);
-      inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-
-      return doInlineImports(inlinerContext);
-    });
-  }
-
-  return isLoaded
-    ? whenLoaded(null, inlinerContext.externalContext.sourcesContent[uri])
-    : inlinerContext.fetch(uri, inlinerContext.inlineRequest, inlinerContext.inlineTimeout, whenLoaded);
-}
-
-function inlineLocalStylesheet(uri, mediaQuery, metadata, inlinerContext) {
-  var protocolLessUri = uri.replace(FILE_RESOURCE_PROTOCOL, '');
-  var currentPath = path.resolve('');
-  var absoluteUri = path.isAbsolute(protocolLessUri)
-    ? path.resolve(currentPath, protocolLessUri[0] == '/' ? protocolLessUri.substring(1) : protocolLessUri)
-    : path.resolve(inlinerContext.rebaseTo, protocolLessUri);
-  var relativeToCurrentPath = path.relative(currentPath, absoluteUri);
-  var importedStyles;
-  var isAllowed = isAllowedResource(protocolLessUri, false, inlinerContext.inline);
-  var normalizedPath = normalizePath(relativeToCurrentPath);
-  var isLoaded = normalizedPath in inlinerContext.externalContext.sourcesContent;
-
-  if (inlinerContext.inlinedStylesheets.indexOf(absoluteUri) > -1) {
-    inlinerContext.warnings.push('Ignoring local @import of "' + protocolLessUri + '" as it has already been imported.');
-  } else if (isAllowed && !isLoaded && (!fs.existsSync(absoluteUri) || !fs.statSync(absoluteUri).isFile())) {
-    inlinerContext.errors.push('Ignoring local @import of "' + protocolLessUri + '" as resource is missing.');
-  } else if (!isAllowed && inlinerContext.afterContent) {
-    inlinerContext.warnings.push('Ignoring local @import of "' + protocolLessUri + '" as resource is not allowed and after other content.');
-  } else if (inlinerContext.afterContent) {
-    inlinerContext.warnings.push('Ignoring local @import of "' + protocolLessUri + '" as after other content.');
-  } else if (!isAllowed) {
-    inlinerContext.warnings.push('Skipping local @import of "' + protocolLessUri + '" as resource is not allowed.');
-    inlinerContext.outputTokens = inlinerContext.outputTokens.concat(inlinerContext.sourceTokens.slice(0, 1));
-  } else {
-    importedStyles = isLoaded
-      ? inlinerContext.externalContext.sourcesContent[normalizedPath]
-      : fs.readFileSync(absoluteUri, 'utf-8');
-
-    inlinerContext.inlinedStylesheets.push(absoluteUri);
-    inlinerContext.inline = inlinerContext.externalContext.options.inline;
-
-    inlinerContext.externalContext.source = normalizedPath;
-    inlinerContext.externalContext.sourcesContent[normalizedPath] = importedStyles;
-    inlinerContext.externalContext.stats.originalSize += importedStyles.length;
-
-    return fromStyles(importedStyles, inlinerContext.externalContext, inlinerContext, function(importedTokens) {
-      importedTokens = wrapInMedia(importedTokens, mediaQuery, metadata);
-
-      inlinerContext.outputTokens = inlinerContext.outputTokens.concat(importedTokens);
-      inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-
-      return doInlineImports(inlinerContext);
-    });
-  }
-
-  inlinerContext.sourceTokens = inlinerContext.sourceTokens.slice(1);
-
-  return doInlineImports(inlinerContext);
-}
-
-function wrapInMedia(tokens, mediaQuery, metadata) {
-  if (mediaQuery) {
-    return [[Token.NESTED_BLOCK, [[Token.NESTED_BLOCK_SCOPE, '@media ' + mediaQuery, metadata]], tokens]];
-  }
-  return tokens;
-}
-
-module.exports = readSources;
-
-
-/***/ }),
-
-/***/ 89858:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var path = __webpack_require__(71017);
-
-function rebaseLocalMap(sourceMap, sourceUri, rebaseTo) {
-  var currentPath = path.resolve('');
-  var absoluteUri = path.resolve(currentPath, sourceUri);
-  var absoluteUriDirectory = path.dirname(absoluteUri);
-
-  sourceMap.sources = sourceMap.sources.map(function(source) {
-    return path.relative(rebaseTo, path.resolve(absoluteUriDirectory, source));
-  });
-
-  return sourceMap;
-}
-
-module.exports = rebaseLocalMap;
-
-
-/***/ }),
-
-/***/ 40978:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var path = __webpack_require__(71017);
-var url = __webpack_require__(57310);
-
-function rebaseRemoteMap(sourceMap, sourceUri) {
-  var sourceDirectory = path.dirname(sourceUri);
-
-  sourceMap.sources = sourceMap.sources.map(function(source) {
-    return url.resolve(sourceDirectory, source);
-  });
-
-  return sourceMap;
-}
-
-module.exports = rebaseRemoteMap;
-
-
-/***/ }),
-
-/***/ 18979:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var extractImportUrlAndMedia = __webpack_require__(73850);
-var restoreImport = __webpack_require__(8058);
-var rewriteUrl = __webpack_require__(76547);
-
-var Token = __webpack_require__(44633);
-var isImport = __webpack_require__(67937);
-
-var SOURCE_MAP_COMMENT_PATTERN = /^\/\*# sourceMappingURL=(\S+) \*\/$/;
-
-function rebase(tokens, rebaseAll, validator, rebaseConfig) {
-  return rebaseAll
-    ? rebaseEverything(tokens, validator, rebaseConfig)
-    : rebaseAtRules(tokens, validator, rebaseConfig);
-}
-
-function rebaseEverything(tokens, validator, rebaseConfig) {
-  var token;
-  var i, l;
-
-  for (i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
-
-    switch (token[0]) {
-    case Token.AT_RULE:
-      rebaseAtRule(token, validator, rebaseConfig);
-      break;
-    case Token.AT_RULE_BLOCK:
-      rebaseProperties(token[2], validator, rebaseConfig);
-      break;
-    case Token.COMMENT:
-      rebaseSourceMapComment(token, rebaseConfig);
-      break;
-    case Token.NESTED_BLOCK:
-      rebaseEverything(token[2], validator, rebaseConfig);
-      break;
-    case Token.RULE:
-      rebaseProperties(token[2], validator, rebaseConfig);
-      break;
-    }
-  }
-
-  return tokens;
-}
-
-function rebaseAtRules(tokens, validator, rebaseConfig) {
-  var token;
-  var i, l;
-
-  for (i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
-
-    switch (token[0]) {
-    case Token.AT_RULE:
-      rebaseAtRule(token, validator, rebaseConfig);
-      break;
-    }
-  }
-
-  return tokens;
-}
-
-function rebaseAtRule(token, validator, rebaseConfig) {
-  if (!isImport(token[1])) {
-    return;
-  }
-
-  var uriAndMediaQuery = extractImportUrlAndMedia(token[1]);
-  var newUrl = rewriteUrl(uriAndMediaQuery[0], rebaseConfig);
-  var mediaQuery = uriAndMediaQuery[1];
-
-  token[1] = restoreImport(newUrl, mediaQuery);
-}
-
-function rebaseSourceMapComment(token, rebaseConfig) {
-  var matches = SOURCE_MAP_COMMENT_PATTERN.exec(token[1]);
-
-  if (matches && matches[1].indexOf('data:') === -1) {
-    token[1] = token[1].replace(matches[1], rewriteUrl(matches[1], rebaseConfig, true));
-  }
-}
-
-function rebaseProperties(properties, validator, rebaseConfig) {
-  var property;
-  var value;
-  var i, l;
-  var j, m;
-
-  for (i = 0, l = properties.length; i < l; i++) {
-    property = properties[i];
-
-    for (j = 2 /* 0 is Token.PROPERTY, 1 is name */, m = property.length; j < m; j++) {
-      value = property[j][1];
-
-      if (validator.isUrl(value)) {
-        property[j][1] = rewriteUrl(value, rebaseConfig);
-      }
-    }
-  }
-}
-
-module.exports = rebase;
-
-
-/***/ }),
-
-/***/ 8058:
-/***/ ((module) => {
-
-function restoreImport(uri, mediaQuery) {
-  return ('@import ' + uri + ' ' + mediaQuery).trim();
-}
-
-module.exports = restoreImport;
-
-
-/***/ }),
-
-/***/ 76547:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var path = __webpack_require__(71017);
-var url = __webpack_require__(57310);
-
-var isDataUriResource = __webpack_require__(9865);
-
-var DOUBLE_QUOTE = '"';
-var SINGLE_QUOTE = '\'';
-var URL_PREFIX = 'url(';
-var URL_SUFFIX = ')';
-
-var PROTOCOL_LESS_PREFIX_PATTERN = /^[^\w\d]*\/\//;
-var QUOTE_PREFIX_PATTERN = /^["']/;
-var QUOTE_SUFFIX_PATTERN = /["']$/;
-var ROUND_BRACKETS_PATTERN = /[()]/;
-var URL_PREFIX_PATTERN = /^url\(/i;
-var URL_SUFFIX_PATTERN = /\)$/;
-var WHITESPACE_PATTERN = /\s/;
-
-var isWindows = process.platform == 'win32';
-
-function rebase(uri, rebaseConfig) {
-  if (!rebaseConfig) {
-    return uri;
-  }
-
-  if (isAbsolute(uri) && !isRemote(rebaseConfig.toBase)) {
-    return uri;
-  }
-
-  if (isRemote(uri) || isSVGMarker(uri) || isInternal(uri) || isDataUriResource(uri)) {
-    return uri;
-  }
-
-  if (isRemote(rebaseConfig.toBase)) {
-    return url.resolve(rebaseConfig.toBase, uri);
-  }
-
-  return rebaseConfig.absolute
-    ? normalize(absolute(uri, rebaseConfig))
-    : normalize(relative(uri, rebaseConfig));
-}
-
-function isAbsolute(uri) {
-  return path.isAbsolute(uri);
-}
-
-function isSVGMarker(uri) {
-  return uri[0] == '#';
-}
-
-function isInternal(uri) {
-  return /^\w+:\w+/.test(uri);
-}
-
-function isRemote(uri) {
-  return /^[^:]+?:\/\//.test(uri) || PROTOCOL_LESS_PREFIX_PATTERN.test(uri);
-}
-
-function absolute(uri, rebaseConfig) {
-  return path
-    .resolve(path.join(rebaseConfig.fromBase || '', uri))
-    .replace(rebaseConfig.toBase, '');
-}
-
-function relative(uri, rebaseConfig) {
-  return path.relative(rebaseConfig.toBase, path.join(rebaseConfig.fromBase || '', uri));
-}
-
-function normalize(uri) {
-  return isWindows ? uri.replace(/\\/g, '/') : uri;
-}
-
-function quoteFor(unquotedUrl) {
-  if (unquotedUrl.indexOf(SINGLE_QUOTE) > -1) {
-    return DOUBLE_QUOTE;
-  } if (unquotedUrl.indexOf(DOUBLE_QUOTE) > -1) {
-    return SINGLE_QUOTE;
-  } if (hasWhitespace(unquotedUrl) || hasRoundBrackets(unquotedUrl)) {
-    return SINGLE_QUOTE;
-  }
-  return '';
-}
-
-function hasWhitespace(url) {
-  return WHITESPACE_PATTERN.test(url);
-}
-
-function hasRoundBrackets(url) {
-  return ROUND_BRACKETS_PATTERN.test(url);
-}
-
-function rewriteUrl(originalUrl, rebaseConfig, pathOnly) {
-  var strippedUrl = originalUrl
-    .replace(URL_PREFIX_PATTERN, '')
-    .replace(URL_SUFFIX_PATTERN, '')
-    .trim();
-
-  var unquotedUrl = strippedUrl
-    .replace(QUOTE_PREFIX_PATTERN, '')
-    .replace(QUOTE_SUFFIX_PATTERN, '')
-    .trim();
-
-  var quote = strippedUrl[0] == SINGLE_QUOTE || strippedUrl[0] == DOUBLE_QUOTE
-    ? strippedUrl[0]
-    : quoteFor(unquotedUrl);
-
-  return pathOnly
-    ? rebase(unquotedUrl, rebaseConfig)
-    : URL_PREFIX + quote + rebase(unquotedUrl, rebaseConfig) + quote + URL_SUFFIX;
-}
-
-module.exports = rewriteUrl;
-
-
-/***/ }),
-
-/***/ 53820:
-/***/ ((module) => {
-
-var Marker = {
-  ASTERISK: '*',
-  AT: '@',
-  BACK_SLASH: '\\',
-  CARRIAGE_RETURN: '\r',
-  CLOSE_CURLY_BRACKET: '}',
-  CLOSE_ROUND_BRACKET: ')',
-  CLOSE_SQUARE_BRACKET: ']',
-  COLON: ':',
-  COMMA: ',',
-  DOUBLE_QUOTE: '"',
-  EXCLAMATION: '!',
-  FORWARD_SLASH: '/',
-  INTERNAL: '-clean-css-',
-  NEW_LINE_NIX: '\n',
-  OPEN_CURLY_BRACKET: '{',
-  OPEN_ROUND_BRACKET: '(',
-  OPEN_SQUARE_BRACKET: '[',
-  SEMICOLON: ';',
-  SINGLE_QUOTE: '\'',
-  SPACE: ' ',
-  TAB: '\t',
-  UNDERSCORE: '_'
-};
-
-module.exports = Marker;
-
-
-/***/ }),
-
-/***/ 44633:
-/***/ ((module) => {
-
-var Token = {
-  AT_RULE: 'at-rule', // e.g. `@import`, `@charset`
-  AT_RULE_BLOCK: 'at-rule-block', // e.g. `@font-face{...}`
-  AT_RULE_BLOCK_SCOPE: 'at-rule-block-scope', // e.g. `@font-face`
-  COMMENT: 'comment', // e.g. `/* comment */`
-  NESTED_BLOCK: 'nested-block', // e.g. `@media screen{...}`, `@keyframes animation {...}`
-  NESTED_BLOCK_SCOPE: 'nested-block-scope', // e.g. `@media`, `@keyframes`
-  PROPERTY: 'property', // e.g. `color:red`
-  PROPERTY_BLOCK: 'property-block', // e.g. `--var:{color:red}`
-  PROPERTY_NAME: 'property-name', // e.g. `color`
-  PROPERTY_VALUE: 'property-value', // e.g. `red`
-  RAW: 'raw', // e.g. anything between /* clean-css ignore:start */ and /* clean-css ignore:end */ comments
-  RULE: 'rule', // e.g `div > a{...}`
-  RULE_SCOPE: 'rule-scope' // e.g `div > a`
-};
-
-module.exports = Token;
-
-
-/***/ }),
-
-/***/ 58584:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Marker = __webpack_require__(53820);
-var Token = __webpack_require__(44633);
-
-var formatPosition = __webpack_require__(96187);
-
-var Level = {
-  BLOCK: 'block',
-  COMMENT: 'comment',
-  DOUBLE_QUOTE: 'double-quote',
-  RULE: 'rule',
-  SINGLE_QUOTE: 'single-quote'
-};
-
-var AT_RULES = [
-  '@charset',
-  '@import'
-];
-
-var BLOCK_RULES = [
-  '@-moz-document',
-  '@document',
-  '@-moz-keyframes',
-  '@-ms-keyframes',
-  '@-o-keyframes',
-  '@-webkit-keyframes',
-  '@keyframes',
-  '@media',
-  '@supports'
-];
-
-var IGNORE_END_COMMENT_PATTERN = /\/\* clean-css ignore:end \*\/$/;
-var IGNORE_START_COMMENT_PATTERN = /^\/\* clean-css ignore:start \*\//;
-
-var PAGE_MARGIN_BOXES = [
-  '@bottom-center',
-  '@bottom-left',
-  '@bottom-left-corner',
-  '@bottom-right',
-  '@bottom-right-corner',
-  '@left-bottom',
-  '@left-middle',
-  '@left-top',
-  '@right-bottom',
-  '@right-middle',
-  '@right-top',
-  '@top-center',
-  '@top-left',
-  '@top-left-corner',
-  '@top-right',
-  '@top-right-corner'
-];
-
-var EXTRA_PAGE_BOXES = [
-  '@footnote',
-  '@footnotes',
-  '@left',
-  '@page-float-bottom',
-  '@page-float-top',
-  '@right'
-];
-
-var REPEAT_PATTERN = /^\[\s{0,31}\d+\s{0,31}\]$/;
-var TAIL_BROKEN_VALUE_PATTERN = /([^}])\}*$/;
-var RULE_WORD_SEPARATOR_PATTERN = /[\s(]/;
-
-function tokenize(source, externalContext) {
-  var internalContext = {
-    level: Level.BLOCK,
-    position: {
-      source: externalContext.source || undefined,
-      line: 1,
-      column: 0,
-      index: 0
-    }
-  };
-
-  return intoTokens(source, externalContext, internalContext, false);
-}
-
-function intoTokens(source, externalContext, internalContext, isNested) {
-  var allTokens = [];
-  var newTokens = allTokens;
-  var lastToken;
-  var ruleToken;
-  var ruleTokens = [];
-  var propertyToken;
-  var metadata;
-  var metadatas = [];
-  var level = internalContext.level;
-  var levels = [];
-  var buffer = [];
-  var buffers = [];
-  var isBufferEmpty = true;
-  var serializedBuffer;
-  var serializedBufferPart;
-  var roundBracketLevel = 0;
-  var isQuoted;
-  var isSpace;
-  var isNewLineNix;
-  var isNewLineWin;
-  var isCarriageReturn;
-  var isCommentStart;
-  var wasCommentStart = false;
-  var isCommentEnd;
-  var wasCommentEnd = false;
-  var isCommentEndMarker;
-  var isEscaped;
-  var wasEscaped = false;
-  var characterWithNoSpecialMeaning;
-  var isPreviousDash = false;
-  var isVariable = false;
-  var isRaw = false;
-  var seekingValue = false;
-  var seekingPropertyBlockClosing = false;
-  var position = internalContext.position;
-  var lastCommentStartAt;
-
-  for (; position.index < source.length; position.index++) {
-    var character = source[position.index];
-
-    isQuoted = level == Level.SINGLE_QUOTE || level == Level.DOUBLE_QUOTE;
-    isSpace = character == Marker.SPACE || character == Marker.TAB;
-    isNewLineNix = character == Marker.NEW_LINE_NIX;
-    isNewLineWin = character == Marker.NEW_LINE_NIX
-      && source[position.index - 1] == Marker.CARRIAGE_RETURN;
-    isCarriageReturn = character == Marker.CARRIAGE_RETURN
-      && source[position.index + 1] && source[position.index + 1] != Marker.NEW_LINE_NIX;
-    isCommentStart = !wasCommentEnd
-      && level != Level.COMMENT && !isQuoted
-      && character == Marker.ASTERISK && source[position.index - 1] == Marker.FORWARD_SLASH;
-    isCommentEndMarker = !wasCommentStart
-      && !isQuoted && character == Marker.FORWARD_SLASH
-      && source[position.index - 1] == Marker.ASTERISK;
-    isCommentEnd = level == Level.COMMENT && isCommentEndMarker;
-    characterWithNoSpecialMeaning = !isSpace && !isCarriageReturn && (character >= 'A' && character <= 'Z' || character >= 'a' && character <= 'z' || character >= '0' && character <= '9' || character == '-');
-    isVariable = isVariable || (level != Level.COMMENT && !seekingValue && isPreviousDash && character === '-');
-    isPreviousDash = character === '-';
-    roundBracketLevel = Math.max(roundBracketLevel, 0);
-
-    metadata = isBufferEmpty
-      ? [position.line, position.column, position.source]
-      : metadata;
-
-    if (isEscaped) {
-      // previous character was a backslash
-      buffer.push(character);
-      isBufferEmpty = false;
-    } else if (characterWithNoSpecialMeaning) {
-      // it's just an alphanumeric character or a hyphen (part of any rule or property name) so let's end it quickly
-      buffer.push(character);
-      isBufferEmpty = false;
-    } else if ((isSpace || isNewLineNix && !isNewLineWin) && (isQuoted || level == Level.COMMENT)) {
-      buffer.push(character);
-      isBufferEmpty = false;
-    } else if ((isSpace || isNewLineNix && !isNewLineWin) && isBufferEmpty) {
-      // noop
-    } else if (!isCommentEnd && level == Level.COMMENT) {
-      buffer.push(character);
-      isBufferEmpty = false;
-    } else if (!isCommentStart && !isCommentEnd && isRaw) {
-      buffer.push(character);
-      isBufferEmpty = false;
-    } else if (isCommentStart
-        && isVariable
-        && (level == Level.BLOCK || level == Level.RULE) && buffer.length > 1) {
-      // comment start within a variable, e.g. var(/*<--
-      buffer.push(character);
-      isBufferEmpty = false;
-
-      levels.push(level);
-      level = Level.COMMENT;
-    } else if (isCommentStart && (level == Level.BLOCK || level == Level.RULE) && buffer.length > 1) {
-      // comment start within block preceded by some content, e.g. div/*<--
-      metadatas.push(metadata);
-      buffer.push(character);
-      buffers.push(buffer.slice(0, -2));
-      isBufferEmpty = false;
-
-      buffer = buffer.slice(-2);
-      metadata = [position.line, position.column - 1, position.source];
-
-      levels.push(level);
-      level = Level.COMMENT;
-    } else if (isCommentStart) {
-      // comment start, e.g. /*<--
-      levels.push(level);
-      level = Level.COMMENT;
-      buffer.push(character);
-      isBufferEmpty = false;
-    } else if (isCommentEnd && isVariable) {
-      // comment end within a variable, e.g. var(/*!*/<--
-      buffer.push(character);
-      level = levels.pop();
-    } else if (isCommentEnd && isIgnoreStartComment(buffer)) {
-      // ignore:start comment end, e.g. /* clean-css ignore:start */<--
-      serializedBuffer = buffer.join('').trim() + character;
-      lastToken = [
-        Token.COMMENT,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ];
-      newTokens.push(lastToken);
-
-      isRaw = true;
-      metadata = metadatas.pop() || null;
-      buffer = buffers.pop() || [];
-      isBufferEmpty = buffer.length === 0;
-    } else if (isCommentEnd && isIgnoreEndComment(buffer)) {
-      // ignore:start comment end, e.g. /* clean-css ignore:end */<--
-      serializedBuffer = buffer.join('') + character;
-      lastCommentStartAt = serializedBuffer.lastIndexOf(Marker.FORWARD_SLASH + Marker.ASTERISK);
-
-      serializedBufferPart = serializedBuffer.substring(0, lastCommentStartAt);
-      lastToken = [
-        Token.RAW,
-        serializedBufferPart,
-        [originalMetadata(metadata, serializedBufferPart, externalContext)]
-      ];
-      newTokens.push(lastToken);
-
-      serializedBufferPart = serializedBuffer.substring(lastCommentStartAt);
-      metadata = [position.line, position.column - serializedBufferPart.length + 1, position.source];
-      lastToken = [
-        Token.COMMENT,
-        serializedBufferPart,
-        [originalMetadata(metadata, serializedBufferPart, externalContext)]
-      ];
-      newTokens.push(lastToken);
-
-      isRaw = false;
-      level = levels.pop();
-      metadata = metadatas.pop() || null;
-      buffer = buffers.pop() || [];
-      isBufferEmpty = buffer.length === 0;
-    } else if (isCommentEnd) {
-      // comment end, e.g. /* comment */<--
-      serializedBuffer = buffer.join('').trim() + character;
-      lastToken = [
-        Token.COMMENT,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ];
-      newTokens.push(lastToken);
-
-      level = levels.pop();
-      metadata = metadatas.pop() || null;
-      buffer = buffers.pop() || [];
-      isBufferEmpty = buffer.length === 0;
-    } else if (isCommentEndMarker && source[position.index + 1] != Marker.ASTERISK) {
-      externalContext.warnings.push('Unexpected \'*/\' at ' + formatPosition([position.line, position.column, position.source]) + '.');
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.SINGLE_QUOTE && !isQuoted) {
-      // single quotation start, e.g. a[href^='https<--
-      levels.push(level);
-      level = Level.SINGLE_QUOTE;
-      buffer.push(character);
-      isBufferEmpty = false;
-    } else if (character == Marker.SINGLE_QUOTE && level == Level.SINGLE_QUOTE) {
-      // single quotation end, e.g. a[href^='https'<--
-      level = levels.pop();
-      buffer.push(character);
-      isBufferEmpty = false;
-    } else if (character == Marker.DOUBLE_QUOTE && !isQuoted) {
-      // double quotation start, e.g. a[href^="<--
-      levels.push(level);
-      level = Level.DOUBLE_QUOTE;
-      buffer.push(character);
-      isBufferEmpty = false;
-    } else if (character == Marker.DOUBLE_QUOTE && level == Level.DOUBLE_QUOTE) {
-      // double quotation end, e.g. a[href^="https"<--
-      level = levels.pop();
-      buffer.push(character);
-      isBufferEmpty = false;
-    } else if (character != Marker.CLOSE_ROUND_BRACKET
-      && character != Marker.OPEN_ROUND_BRACKET
-      && level != Level.COMMENT && !isQuoted && roundBracketLevel > 0) {
-      // character inside any function, e.g. hsla(.<--
-      buffer.push(character);
-      isBufferEmpty = false;
-    } else if (character == Marker.OPEN_ROUND_BRACKET
-      && !isQuoted && level != Level.COMMENT
-      && !seekingValue) {
-      // round open bracket, e.g. @import url(<--
-      buffer.push(character);
-      isBufferEmpty = false;
-
-      roundBracketLevel++;
-    } else if (character == Marker.CLOSE_ROUND_BRACKET
-      && !isQuoted
-      && level != Level.COMMENT
-      && !seekingValue) {
-      // round open bracket, e.g. @import url(test.css)<--
-      buffer.push(character);
-      isBufferEmpty = false;
-
-      roundBracketLevel--;
-    } else if (character == Marker.SEMICOLON && level == Level.BLOCK && buffer[0] == Marker.AT) {
-      // semicolon ending rule at block level, e.g. @import '...';<--
-      serializedBuffer = buffer.join('').trim();
-      allTokens.push([
-        Token.AT_RULE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.COMMA && level == Level.BLOCK && ruleToken) {
-      // comma separator at block level, e.g. a,div,<--
-      serializedBuffer = buffer.join('').trim();
-      ruleToken[1].push([
-        tokenScopeFrom(ruleToken[0]),
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)]
-      ]);
-
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.COMMA && level == Level.BLOCK && tokenTypeFrom(buffer) == Token.AT_RULE) {
-      // comma separator at block level, e.g. @import url(...) screen,<--
-      // keep iterating as end semicolon will create the token
-      buffer.push(character);
-      isBufferEmpty = false;
-    } else if (character == Marker.COMMA && level == Level.BLOCK) {
-      // comma separator at block level, e.g. a,<--
-      ruleToken = [tokenTypeFrom(buffer), [], []];
-      serializedBuffer = buffer.join('').trim();
-      ruleToken[1].push([
-        tokenScopeFrom(ruleToken[0]),
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext, 0)]
-      ]);
-
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.OPEN_CURLY_BRACKET
-      && level == Level.BLOCK
-      && ruleToken
-      && ruleToken[0] == Token.NESTED_BLOCK) {
-      // open brace opening at-rule at block level, e.g. @media{<--
-      serializedBuffer = buffer.join('').trim();
-      ruleToken[1].push([
-        Token.NESTED_BLOCK_SCOPE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-      allTokens.push(ruleToken);
-
-      levels.push(level);
-      position.column++;
-      position.index++;
-      buffer = [];
-      isBufferEmpty = true;
-
-      ruleToken[2] = intoTokens(source, externalContext, internalContext, true);
-      ruleToken = null;
-    } else if (character == Marker.OPEN_CURLY_BRACKET
-      && level == Level.BLOCK
-      && tokenTypeFrom(buffer) == Token.NESTED_BLOCK) {
-      // open brace opening at-rule at block level, e.g. @media{<--
-      serializedBuffer = buffer.join('').trim();
-      ruleToken = ruleToken || [Token.NESTED_BLOCK, [], []];
-      ruleToken[1].push([
-        Token.NESTED_BLOCK_SCOPE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-      allTokens.push(ruleToken);
-
-      levels.push(level);
-      position.column++;
-      position.index++;
-      buffer = [];
-      isBufferEmpty = true;
-      isVariable = false;
-
-      ruleToken[2] = intoTokens(source, externalContext, internalContext, true);
-      ruleToken = null;
-    } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.BLOCK) {
-      // open brace opening rule at block level, e.g. div{<--
-      serializedBuffer = buffer.join('').trim();
-      ruleToken = ruleToken || [tokenTypeFrom(buffer), [], []];
-      ruleToken[1].push([
-        tokenScopeFrom(ruleToken[0]),
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext, ruleToken[1].length)]
-      ]);
-      newTokens = ruleToken[2];
-      allTokens.push(ruleToken);
-
-      levels.push(level);
-      level = Level.RULE;
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.RULE && seekingValue) {
-      // open brace opening rule at rule level, e.g. div{--variable:{<--
-      ruleTokens.push(ruleToken);
-      ruleToken = [Token.PROPERTY_BLOCK, []];
-      propertyToken.push(ruleToken);
-      newTokens = ruleToken[1];
-
-      levels.push(level);
-      level = Level.RULE;
-      seekingValue = false;
-    } else if (character == Marker.OPEN_CURLY_BRACKET && level == Level.RULE && isPageMarginBox(buffer)) {
-      // open brace opening page-margin box at rule level, e.g. @page{@top-center{<--
-      serializedBuffer = buffer.join('').trim();
-      ruleTokens.push(ruleToken);
-      ruleToken = [Token.AT_RULE_BLOCK, [], []];
-      ruleToken[1].push([
-        Token.AT_RULE_BLOCK_SCOPE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-      newTokens.push(ruleToken);
-      newTokens = ruleToken[2];
-
-      levels.push(level);
-      level = Level.RULE;
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.COLON && level == Level.RULE && !seekingValue) {
-      // colon at rule level, e.g. a{color:<--
-      serializedBuffer = buffer.join('').trim();
-      propertyToken = [
-        Token.PROPERTY,
-        [
-          Token.PROPERTY_NAME,
-          serializedBuffer,
-          [originalMetadata(metadata, serializedBuffer, externalContext)]
-        ]
-      ];
-      newTokens.push(propertyToken);
-
-      seekingValue = true;
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.SEMICOLON
-      && level == Level.RULE
-      && propertyToken
-      && ruleTokens.length > 0
-      && !isBufferEmpty
-      && buffer[0] == Marker.AT) {
-      // semicolon at rule level for at-rule, e.g. a{--color:{@apply(--other-color);<--
-      serializedBuffer = buffer.join('').trim();
-      ruleToken[1].push([
-        Token.AT_RULE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && !isBufferEmpty) {
-      // semicolon at rule level, e.g. a{color:red;<--
-      serializedBuffer = buffer.join('').trim();
-      propertyToken.push([
-        Token.PROPERTY_VALUE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-
-      propertyToken = null;
-      seekingValue = false;
-      buffer = [];
-      isBufferEmpty = true;
-      isVariable = false;
-    } else if (character == Marker.SEMICOLON
-      && level == Level.RULE
-      && propertyToken
-      && isBufferEmpty
-      && isVariable
-      && !propertyToken[2]) {
-      // semicolon after empty variable value at rule level, e.g. a{--color: ;<--
-      propertyToken.push([Token.PROPERTY_VALUE, ' ', [originalMetadata(metadata, ' ', externalContext)]]);
-      isVariable = false;
-      propertyToken = null;
-      seekingValue = false;
-    } else if (character == Marker.SEMICOLON && level == Level.RULE && propertyToken && isBufferEmpty) {
-      // semicolon after bracketed value at rule level, e.g. a{color:rgb(...);<--
-      propertyToken = null;
-      seekingValue = false;
-    } else if (character == Marker.SEMICOLON
-      && level == Level.RULE
-      && !isBufferEmpty
-      && buffer[0] == Marker.AT) {
-      // semicolon for at-rule at rule level, e.g. a{@apply(--variable);<--
-      serializedBuffer = buffer.join('');
-      newTokens.push([
-        Token.AT_RULE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-
-      seekingValue = false;
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.SEMICOLON && level == Level.RULE && seekingPropertyBlockClosing) {
-      // close brace after a property block at rule level, e.g. a{--custom:{color:red;};<--
-      seekingPropertyBlockClosing = false;
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.SEMICOLON && level == Level.RULE && isBufferEmpty) {
-      // stray semicolon at rule level, e.g. a{;<--
-      // noop
-    } else if (character == Marker.CLOSE_CURLY_BRACKET
-      && level == Level.RULE
-      && propertyToken
-      && seekingValue
-      && !isBufferEmpty && ruleTokens.length > 0) {
-      // close brace at rule level, e.g. a{--color:{color:red}<--
-      serializedBuffer = buffer.join('');
-      propertyToken.push([
-        Token.PROPERTY_VALUE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-      propertyToken = null;
-      ruleToken = ruleTokens.pop();
-      newTokens = ruleToken[2];
-
-      level = levels.pop();
-      seekingValue = false;
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.CLOSE_CURLY_BRACKET
-      && level == Level.RULE
-      && propertyToken
-      && !isBufferEmpty
-      && buffer[0] == Marker.AT
-      && ruleTokens.length > 0) {
-      // close brace at rule level for at-rule, e.g. a{--color:{@apply(--other-color)}<--
-      serializedBuffer = buffer.join('');
-      ruleToken[1].push([
-        Token.AT_RULE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-      propertyToken = null;
-      ruleToken = ruleTokens.pop();
-      newTokens = ruleToken[2];
-
-      level = levels.pop();
-      seekingValue = false;
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.CLOSE_CURLY_BRACKET
-      && level == Level.RULE
-      && propertyToken
-      && ruleTokens.length > 0) {
-      // close brace at rule level after space, e.g. a{--color:{color:red }<--
-      propertyToken = null;
-      ruleToken = ruleTokens.pop();
-      newTokens = ruleToken[2];
-
-      level = levels.pop();
-      seekingValue = false;
-    } else if (character == Marker.CLOSE_CURLY_BRACKET
-      && level == Level.RULE
-      && propertyToken
-      && !isBufferEmpty) {
-      // close brace at rule level, e.g. a{color:red}<--
-      serializedBuffer = buffer.join('');
-      propertyToken.push([
-        Token.PROPERTY_VALUE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-      propertyToken = null;
-      ruleToken = ruleTokens.pop();
-      newTokens = allTokens;
-
-      level = levels.pop();
-      seekingValue = false;
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.CLOSE_CURLY_BRACKET
-      && level == Level.RULE
-      && !isBufferEmpty
-      && buffer[0] == Marker.AT) {
-      // close brace after at-rule at rule level, e.g. a{@apply(--variable)}<--
-      propertyToken = null;
-      ruleToken = null;
-      serializedBuffer = buffer.join('').trim();
-      newTokens.push([
-        Token.AT_RULE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-      newTokens = allTokens;
-
-      level = levels.pop();
-      seekingValue = false;
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.CLOSE_CURLY_BRACKET
-      && level == Level.RULE
-      && levels[levels.length - 1] == Level.RULE) {
-      // close brace after a property block at rule level, e.g. a{--custom:{color:red;}<--
-      propertyToken = null;
-      ruleToken = ruleTokens.pop();
-      newTokens = ruleToken[2];
-
-      level = levels.pop();
-      seekingValue = false;
-      seekingPropertyBlockClosing = true;
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.CLOSE_CURLY_BRACKET
-      && level == Level.RULE
-      && isVariable
-      && propertyToken
-      && !propertyToken[2]) {
-      // close brace after an empty variable declaration inside a rule, e.g. a{--color: }<--
-      propertyToken.push([Token.PROPERTY_VALUE, ' ', [originalMetadata(metadata, ' ', externalContext)]]);
-      isVariable = false;
-      propertyToken = null;
-      ruleToken = null;
-      newTokens = allTokens;
-
-      level = levels.pop();
-      seekingValue = false;
-      isVariable = false;
-    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.RULE) {
-      // close brace after a rule, e.g. a{color:red;}<--
-      propertyToken = null;
-      ruleToken = null;
-      newTokens = allTokens;
-
-      level = levels.pop();
-      seekingValue = false;
-      isVariable = false;
-    } else if (character == Marker.CLOSE_CURLY_BRACKET
-      && level == Level.BLOCK
-      && !isNested
-      && position.index <= source.length - 1) {
-      // stray close brace at block level, e.g. a{color:red}color:blue}<--
-      externalContext.warnings.push('Unexpected \'}\' at ' + formatPosition([position.line, position.column, position.source]) + '.');
-      buffer.push(character);
-      isBufferEmpty = false;
-    } else if (character == Marker.CLOSE_CURLY_BRACKET && level == Level.BLOCK) {
-      // close brace at block level, e.g. @media screen {...}<--
-      break;
-    } else if (character == Marker.OPEN_ROUND_BRACKET && level == Level.RULE && seekingValue) {
-      // round open bracket, e.g. a{color:hsla(<--
-      buffer.push(character);
-      isBufferEmpty = false;
-      roundBracketLevel++;
-    } else if (character == Marker.CLOSE_ROUND_BRACKET
-      && level == Level.RULE
-      && seekingValue
-      && roundBracketLevel == 1) {
-      // round close bracket, e.g. a{color:hsla(0,0%,0%)<--
-      buffer.push(character);
-      isBufferEmpty = false;
-      serializedBuffer = buffer.join('').trim();
-      propertyToken.push([
-        Token.PROPERTY_VALUE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-
-      roundBracketLevel--;
-      buffer = [];
-      isBufferEmpty = true;
-      isVariable = false;
-    } else if (character == Marker.CLOSE_ROUND_BRACKET && level == Level.RULE && seekingValue) {
-      // round close bracket within other brackets, e.g. a{width:calc((10rem / 2)<--
-      buffer.push(character);
-      isBufferEmpty = false;
-      isVariable = false;
-      roundBracketLevel--;
-    } else if (character == Marker.FORWARD_SLASH
-      && source[position.index + 1] != Marker.ASTERISK
-      && level == Level.RULE
-      && seekingValue
-      && !isBufferEmpty) {
-      // forward slash within a property, e.g. a{background:url(image.png) 0 0/<--
-      serializedBuffer = buffer.join('').trim();
-      propertyToken.push([
-        Token.PROPERTY_VALUE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-      propertyToken.push([
-        Token.PROPERTY_VALUE,
-        character,
-        [[position.line, position.column, position.source]]
-      ]);
-
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.FORWARD_SLASH
-      && source[position.index + 1] != Marker.ASTERISK
-      && level == Level.RULE
-      && seekingValue) {
-      // forward slash within a property after space, e.g. a{background:url(image.png) 0 0 /<--
-      propertyToken.push([
-        Token.PROPERTY_VALUE,
-        character,
-        [[position.line, position.column, position.source]]
-      ]);
-
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.COMMA && level == Level.RULE && seekingValue && !isBufferEmpty) {
-      // comma within a property, e.g. a{background:url(image.png),<--
-      serializedBuffer = buffer.join('').trim();
-      propertyToken.push([
-        Token.PROPERTY_VALUE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-      propertyToken.push([
-        Token.PROPERTY_VALUE,
-        character,
-        [[position.line, position.column, position.source]]
-      ]);
-
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.COMMA && level == Level.RULE && seekingValue) {
-      // comma within a property after space, e.g. a{background:url(image.png) ,<--
-      propertyToken.push([
-        Token.PROPERTY_VALUE,
-        character,
-        [[position.line, position.column, position.source]]
-      ]);
-
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (character == Marker.CLOSE_SQUARE_BRACKET
-      && propertyToken
-      && propertyToken.length > 1
-      && !isBufferEmpty
-      && isRepeatToken(buffer)) {
-      buffer.push(character);
-      serializedBuffer = buffer.join('').trim();
-      propertyToken[propertyToken.length - 1][1] += serializedBuffer;
-
-      buffer = [];
-      isBufferEmpty = true;
-    } else if ((isSpace || (isNewLineNix && !isNewLineWin))
-      && level == Level.RULE
-      && seekingValue
-      && propertyToken
-      && !isBufferEmpty) {
-      // space or *nix newline within property, e.g. a{margin:0 <--
-      serializedBuffer = buffer.join('').trim();
-      propertyToken.push([
-        Token.PROPERTY_VALUE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (isNewLineWin && level == Level.RULE && seekingValue && propertyToken && buffer.length > 1) {
-      // win newline within property, e.g. a{margin:0\r\n<--
-      serializedBuffer = buffer.join('').trim();
-      propertyToken.push([
-        Token.PROPERTY_VALUE,
-        serializedBuffer,
-        [originalMetadata(metadata, serializedBuffer, externalContext)]
-      ]);
-
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (isNewLineWin && level == Level.RULE && seekingValue) {
-      // win newline
-      buffer = [];
-      isBufferEmpty = true;
-    } else if (isNewLineWin && buffer.length == 1) {
-      // ignore windows newline which is composed of two characters
-      buffer.pop();
-      isBufferEmpty = buffer.length === 0;
-    } else if (!isBufferEmpty || !isSpace && !isNewLineNix && !isNewLineWin && !isCarriageReturn) {
-      // any character
-      buffer.push(character);
-      isBufferEmpty = false;
-    }
-
-    wasEscaped = isEscaped;
-    isEscaped = !wasEscaped && character == Marker.BACK_SLASH;
-    wasCommentStart = isCommentStart;
-    wasCommentEnd = isCommentEnd;
-
-    position.line = (isNewLineWin || isNewLineNix || isCarriageReturn) ? position.line + 1 : position.line;
-    position.column = (isNewLineWin || isNewLineNix || isCarriageReturn) ? 0 : position.column + 1;
-  }
-
-  if (seekingValue) {
-    externalContext.warnings.push('Missing \'}\' at ' + formatPosition([position.line, position.column, position.source]) + '.');
-  }
-
-  if (seekingValue && buffer.length > 0) {
-    serializedBuffer = buffer.join('').trimRight().replace(TAIL_BROKEN_VALUE_PATTERN, '$1').trimRight();
-    propertyToken.push([
-      Token.PROPERTY_VALUE,
-      serializedBuffer,
-      [originalMetadata(metadata, serializedBuffer, externalContext)]
-    ]);
-
-    buffer = [];
-  }
-
-  if (buffer.length > 0) {
-    externalContext.warnings.push('Invalid character(s) \'' + buffer.join('') + '\' at ' + formatPosition(metadata) + '. Ignoring.');
-  }
-
-  return allTokens;
-}
-
-function isIgnoreStartComment(buffer) {
-  return IGNORE_START_COMMENT_PATTERN.test(buffer.join('') + Marker.FORWARD_SLASH);
-}
-
-function isIgnoreEndComment(buffer) {
-  return IGNORE_END_COMMENT_PATTERN.test(buffer.join('') + Marker.FORWARD_SLASH);
-}
-
-function originalMetadata(metadata, value, externalContext, selectorFallbacks) {
-  var source = metadata[2];
-
-  return externalContext.inputSourceMapTracker.isTracking(source)
-    ? externalContext.inputSourceMapTracker.originalPositionFor(metadata, value.length, selectorFallbacks)
-    : metadata;
-}
-
-function tokenTypeFrom(buffer) {
-  var isAtRule = buffer[0] == Marker.AT || buffer[0] == Marker.UNDERSCORE;
-  var ruleWord = buffer.join('').split(RULE_WORD_SEPARATOR_PATTERN)[0];
-
-  if (isAtRule && BLOCK_RULES.indexOf(ruleWord) > -1) {
-    return Token.NESTED_BLOCK;
-  } if (isAtRule && AT_RULES.indexOf(ruleWord) > -1) {
-    return Token.AT_RULE;
-  } if (isAtRule) {
-    return Token.AT_RULE_BLOCK;
-  }
-  return Token.RULE;
-}
-
-function tokenScopeFrom(tokenType) {
-  if (tokenType == Token.RULE) {
-    return Token.RULE_SCOPE;
-  } if (tokenType == Token.NESTED_BLOCK) {
-    return Token.NESTED_BLOCK_SCOPE;
-  } if (tokenType == Token.AT_RULE_BLOCK) {
-    return Token.AT_RULE_BLOCK_SCOPE;
-  }
-}
-
-function isPageMarginBox(buffer) {
-  var serializedBuffer = buffer.join('').trim();
-
-  return PAGE_MARGIN_BOXES.indexOf(serializedBuffer) > -1 || EXTRA_PAGE_BOXES.indexOf(serializedBuffer) > -1;
-}
-
-function isRepeatToken(buffer) {
-  return REPEAT_PATTERN.test(buffer.join('') + Marker.CLOSE_SQUARE_BRACKET);
-}
-
-module.exports = tokenize;
-
-
-/***/ }),
-
-/***/ 43449:
-/***/ ((module) => {
-
-function cloneArray(array) {
-  var cloned = array.slice(0);
-
-  for (var i = 0, l = cloned.length; i < l; i++) {
-    if (Array.isArray(cloned[i])) { cloned[i] = cloneArray(cloned[i]); }
-  }
-
-  return cloned;
-}
-
-module.exports = cloneArray;
-
-
-/***/ }),
-
-/***/ 96187:
-/***/ ((module) => {
-
-function formatPosition(metadata) {
-  var line = metadata[0];
-  var column = metadata[1];
-  var source = metadata[2];
-
-  return source
-    ? source + ':' + line + ':' + column
-    : line + ':' + column;
-}
-
-module.exports = formatPosition;
-
-
-/***/ }),
-
-/***/ 13884:
-/***/ ((module) => {
-
-var NO_PROTOCOL_RESOURCE_PATTERN = /^\/\//;
-
-function hasProtocol(uri) {
-  return !NO_PROTOCOL_RESOURCE_PATTERN.test(uri);
-}
-
-module.exports = hasProtocol;
-
-
-/***/ }),
-
-/***/ 9865:
-/***/ ((module) => {
-
-var DATA_URI_PATTERN = /^data:(\S{0,31}?)?(;charset=(?:(?!;charset=)[^;])+)?(;[^,]+?)?,(.+)/;
-
-function isDataUriResource(uri) {
-  return DATA_URI_PATTERN.test(uri);
-}
-
-module.exports = isDataUriResource;
-
-
-/***/ }),
-
-/***/ 28276:
-/***/ ((module) => {
-
-var HTTP_RESOURCE_PATTERN = /^http:\/\//;
-
-function isHttpResource(uri) {
-  return HTTP_RESOURCE_PATTERN.test(uri);
-}
-
-module.exports = isHttpResource;
-
-
-/***/ }),
-
-/***/ 46683:
-/***/ ((module) => {
-
-var HTTPS_RESOURCE_PATTERN = /^https:\/\//;
-
-function isHttpsResource(uri) {
-  return HTTPS_RESOURCE_PATTERN.test(uri);
-}
-
-module.exports = isHttpsResource;
-
-
-/***/ }),
-
-/***/ 67937:
-/***/ ((module) => {
-
-var IMPORT_PREFIX_PATTERN = /^@import/i;
-
-function isImport(value) {
-  return IMPORT_PREFIX_PATTERN.test(value);
-}
-
-module.exports = isImport;
-
-
-/***/ }),
-
-/***/ 14234:
-/***/ ((module) => {
-
-var REMOTE_RESOURCE_PATTERN = /^(\w+:\/\/|\/\/)/;
-var FILE_RESOURCE_PATTERN = /^file:\/\//;
-
-function isRemoteResource(uri) {
-  return REMOTE_RESOURCE_PATTERN.test(uri) && !FILE_RESOURCE_PATTERN.test(uri);
-}
-
-module.exports = isRemoteResource;
-
-
-/***/ }),
-
-/***/ 33814:
-/***/ ((module) => {
-
-// adapted from http://nedbatchelder.com/blog/200712.html#e20071211T054956
-
-var NUMBER_PATTERN = /([0-9]+)/;
-
-function naturalCompare(value1, value2) {
-  var keys1 = ('' + value1).split(NUMBER_PATTERN).map(tryParseInt);
-  var keys2 = ('' + value2).split(NUMBER_PATTERN).map(tryParseInt);
-  var key1;
-  var key2;
-  var compareFirst = Math.min(keys1.length, keys2.length);
-  var i, l;
-
-  for (i = 0, l = compareFirst; i < l; i++) {
-    key1 = keys1[i];
-    key2 = keys2[i];
-
-    if (key1 != key2) {
-      return key1 > key2 ? 1 : -1;
-    }
-  }
-
-  return keys1.length > keys2.length ? 1 : (keys1.length == keys2.length ? 0 : -1);
-}
-
-function tryParseInt(value) {
-  return ('' + parseInt(value)) == value
-    ? parseInt(value)
-    : value;
-}
-
-module.exports = naturalCompare;
-
-
-/***/ }),
-
-/***/ 28832:
-/***/ ((module) => {
-
-function override(source1, source2) {
-  var target = {};
-  var key1;
-  var key2;
-  var item;
-
-  for (key1 in source1) {
-    item = source1[key1];
-
-    if (Array.isArray(item)) {
-      target[key1] = item.slice(0);
-    } else if (typeof item == 'object' && item !== null) {
-      target[key1] = override(item, {});
-    } else {
-      target[key1] = item;
-    }
-  }
-
-  for (key2 in source2) {
-    item = source2[key2];
-
-    if (key2 in target && Array.isArray(item)) {
-      target[key2] = item.slice(0);
-    } else if (key2 in target && typeof item == 'object' && item !== null) {
-      target[key2] = override(target[key2], item);
-    } else {
-      target[key2] = item;
-    }
-  }
-
-  return target;
-}
-
-module.exports = override;
-
-
-/***/ }),
-
-/***/ 76439:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Marker = __webpack_require__(53820);
-
-function is(value, separator, isSeparatorRegex) {
-  return isSeparatorRegex
-    ? separator.test(value)
-    : value === separator;
-}
-
-function split(value, separator) {
-  var openLevel = Marker.OPEN_ROUND_BRACKET;
-  var closeLevel = Marker.CLOSE_ROUND_BRACKET;
-  var level = 0;
-  var cursor = 0;
-  var lastStart = 0;
-  var lastValue;
-  var lastCharacter;
-  var len = value.length;
-  var parts = [];
-  var isSeparatorRegex = typeof (separator) == 'object' && 'exec' in separator;
-
-  if (!isSeparatorRegex && value.indexOf(separator) == -1) {
-    return [value];
-  }
-
-  if (value.indexOf(openLevel) == -1) {
-    return value.split(separator);
-  }
-
-  while (cursor < len) {
-    if (value[cursor] == openLevel) {
-      level++;
-    } else if (value[cursor] == closeLevel) {
-      level--;
-    }
-
-    if (level === 0 && cursor > 0 && cursor + 1 < len && is(value[cursor], separator, isSeparatorRegex)) {
-      parts.push(value.substring(lastStart, cursor));
-
-      if (isSeparatorRegex && separator.exec(value[cursor]).length > 1) {
-        parts.push(value[cursor]);
-      }
-
-      lastStart = cursor + 1;
-    }
-
-    cursor++;
-  }
-
-  if (lastStart < cursor + 1) {
-    lastValue = value.substring(lastStart);
-    lastCharacter = lastValue[lastValue.length - 1];
-    if (is(lastCharacter, separator, isSeparatorRegex)) {
-      lastValue = lastValue.substring(0, lastValue.length - 1);
-    }
-
-    parts.push(lastValue);
-  }
-
-  return parts;
-}
-
-module.exports = split;
-
-
-/***/ }),
-
-/***/ 4307:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var emptyCharacter = '';
-
-var Breaks = (__webpack_require__(14687).Breaks);
-var Spaces = (__webpack_require__(14687).Spaces);
-
-var Marker = __webpack_require__(53820);
-var Token = __webpack_require__(44633);
-
-function supportsAfterClosingBrace(token) {
-  return token[1][1] == 'background' || token[1][1] == 'transform' || token[1][1] == 'src';
-}
-
-function afterClosingBrace(token, valueIndex) {
-  return token[valueIndex][1][token[valueIndex][1].length - 1] == Marker.CLOSE_ROUND_BRACKET;
-}
-
-function afterComma(token, valueIndex) {
-  return token[valueIndex][1] == Marker.COMMA;
-}
-
-function afterSlash(token, valueIndex) {
-  return token[valueIndex][1] == Marker.FORWARD_SLASH;
-}
-
-function beforeComma(token, valueIndex) {
-  return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.COMMA;
-}
-
-function beforeSlash(token, valueIndex) {
-  return token[valueIndex + 1] && token[valueIndex + 1][1] == Marker.FORWARD_SLASH;
-}
-
-function inFilter(token) {
-  return token[1][1] == 'filter' || token[1][1] == '-ms-filter';
-}
-
-function disallowsSpace(context, token, valueIndex) {
-  return !context.spaceAfterClosingBrace
-    && supportsAfterClosingBrace(token)
-    && afterClosingBrace(token, valueIndex)
-    || beforeSlash(token, valueIndex)
-    || afterSlash(token, valueIndex)
-    || beforeComma(token, valueIndex)
-    || afterComma(token, valueIndex);
-}
-
-function rules(context, tokens) {
-  var store = context.store;
-
-  for (var i = 0, l = tokens.length; i < l; i++) {
-    store(context, tokens[i]);
-
-    if (i < l - 1) {
-      store(context, comma(context));
-    }
-  }
-}
-
-function body(context, tokens) {
-  var lastPropertyAt = lastPropertyIndex(tokens);
-
-  for (var i = 0, l = tokens.length; i < l; i++) {
-    property(context, tokens, i, lastPropertyAt);
-  }
-}
-
-function lastPropertyIndex(tokens) {
-  var index = tokens.length - 1;
-
-  for (; index >= 0; index--) {
-    if (tokens[index][0] != Token.COMMENT) {
-      break;
-    }
-  }
-
-  return index;
-}
-
-function property(context, tokens, position, lastPropertyAt) {
-  var store = context.store;
-  var token = tokens[position];
-
-  var propertyValue = token[2];
-  var isPropertyBlock = propertyValue && propertyValue[0] === Token.PROPERTY_BLOCK;
-
-  var needsSemicolon;
-  if (context.format) {
-    if (context.format.semicolonAfterLastProperty || isPropertyBlock) {
-      needsSemicolon = true;
-    } else if (position < lastPropertyAt) {
-      needsSemicolon = true;
-    } else {
-      needsSemicolon = false;
-    }
-  } else {
-    needsSemicolon = position < lastPropertyAt || isPropertyBlock;
-  }
-
-  var isLast = position === lastPropertyAt;
-
-  switch (token[0]) {
-  case Token.AT_RULE:
-    store(context, token);
-    store(context, semicolon(context, Breaks.AfterProperty, false));
-    break;
-  case Token.AT_RULE_BLOCK:
-    rules(context, token[1]);
-    store(context, openBrace(context, Breaks.AfterRuleBegins, true));
-    body(context, token[2]);
-    store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));
-    break;
-  case Token.COMMENT:
-    store(context, token);
-    store(context, breakFor(context, Breaks.AfterComment) + context.indentWith);
-    break;
-  case Token.PROPERTY:
-    store(context, token[1]);
-    store(context, colon(context));
-    if (propertyValue) {
-      value(context, token);
-    }
-    store(
-      context,
-      needsSemicolon ? semicolon(context, Breaks.AfterProperty, isLast) : emptyCharacter
-    );
-    break;
-  case Token.RAW:
-    store(context, token);
-  }
-}
-
-function value(context, token) {
-  var store = context.store;
-  var j, m;
-
-  if (token[2][0] == Token.PROPERTY_BLOCK) {
-    store(context, openBrace(context, Breaks.AfterBlockBegins, false));
-    body(context, token[2][1]);
-    store(context, closeBrace(context, Breaks.AfterBlockEnds, false, true));
-  } else {
-    for (j = 2, m = token.length; j < m; j++) {
-      store(context, token[j]);
-
-      if (j < m - 1 && (inFilter(token) || !disallowsSpace(context, token, j))) {
-        store(context, Marker.SPACE);
-      }
-    }
-  }
-}
-
-function breakFor(context, where) {
-  return context.format ? context.format.breaks[where] : emptyCharacter;
-}
-
-function allowsSpace(context, where) {
-  return context.format && context.format.spaces[where];
-}
-
-function openBrace(context, where, needsPrefixSpace) {
-  if (context.format) {
-    context.indentBy += context.format.indentBy;
-    context.indentWith = context.format.indentWith.repeat(context.indentBy);
-    return (
-      needsPrefixSpace
-      && allowsSpace(context, Spaces.BeforeBlockBegins) ? Marker.SPACE : emptyCharacter
-    ) + Marker.OPEN_CURLY_BRACKET
-      + breakFor(context, where)
-      + context.indentWith;
-  }
-  return Marker.OPEN_CURLY_BRACKET;
-}
-
-function closeBrace(context, where, beforeBlockEnd, isLast) {
-  if (context.format) {
-    context.indentBy -= context.format.indentBy;
-    context.indentWith = context.format.indentWith.repeat(context.indentBy);
-    return (
-      beforeBlockEnd
-        ? breakFor(context, Breaks.BeforeBlockEnds)
-        : breakFor(context, Breaks.AfterProperty)
-    ) + context.indentWith
-      + Marker.CLOSE_CURLY_BRACKET
-      + (isLast ? emptyCharacter : breakFor(context, where) + context.indentWith);
-  }
-  return Marker.CLOSE_CURLY_BRACKET;
-}
-
-function colon(context) {
-  return context.format
-    ? Marker.COLON + (allowsSpace(context, Spaces.BeforeValue) ? Marker.SPACE : emptyCharacter)
-    : Marker.COLON;
-}
-
-function semicolon(context, where, isLast) {
-  return context.format
-    ? Marker.SEMICOLON + (isLast ? emptyCharacter : (breakFor(context, where) + context.indentWith))
-    : Marker.SEMICOLON;
-}
-
-function comma(context) {
-  return context.format
-    ? Marker.COMMA + breakFor(context, Breaks.BetweenSelectors) + context.indentWith
-    : Marker.COMMA;
-}
-
-function all(context, tokens) {
-  var store = context.store;
-  var token;
-  var isLast;
-  var i, l;
-
-  for (i = 0, l = tokens.length; i < l; i++) {
-    token = tokens[i];
-    isLast = i == l - 1;
-
-    switch (token[0]) {
-    case Token.AT_RULE:
-      store(context, token);
-      store(context, semicolon(context, Breaks.AfterAtRule, isLast));
-      break;
-    case Token.AT_RULE_BLOCK:
-      rules(context, token[1]);
-      store(context, openBrace(context, Breaks.AfterRuleBegins, true));
-      body(context, token[2]);
-      store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));
-      break;
-    case Token.NESTED_BLOCK:
-      rules(context, token[1]);
-      store(context, openBrace(context, Breaks.AfterBlockBegins, true));
-      all(context, token[2]);
-      store(context, closeBrace(context, Breaks.AfterBlockEnds, true, isLast));
-      break;
-    case Token.COMMENT:
-      store(context, token);
-      store(context, breakFor(context, Breaks.AfterComment) + context.indentWith);
-      break;
-    case Token.RAW:
-      store(context, token);
-      break;
-    case Token.RULE:
-      rules(context, token[1]);
-      store(context, openBrace(context, Breaks.AfterRuleBegins, true));
-      body(context, token[2]);
-      store(context, closeBrace(context, Breaks.AfterRuleEnds, false, isLast));
-      break;
-    }
-  }
-}
-
-module.exports = {
-  all: all,
-  body: body,
-  property: property,
-  rules: rules,
-  value: value
-};
-
-
-/***/ }),
-
-/***/ 73694:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var helpers = __webpack_require__(4307);
-
-function store(serializeContext, token) {
-  serializeContext.output.push(typeof token == 'string' ? token : token[1]);
-}
-
-function context() {
-  var newContext = {
-    output: [],
-    store: store
-  };
-
-  return newContext;
-}
-
-function all(tokens) {
-  var oneTimeContext = context();
-  helpers.all(oneTimeContext, tokens);
-  return oneTimeContext.output.join('');
-}
-
-function body(tokens) {
-  var oneTimeContext = context();
-  helpers.body(oneTimeContext, tokens);
-  return oneTimeContext.output.join('');
-}
-
-function property(tokens, position) {
-  var oneTimeContext = context();
-  helpers.property(oneTimeContext, tokens, position, true);
-  return oneTimeContext.output.join('');
-}
-
-function rules(tokens) {
-  var oneTimeContext = context();
-  helpers.rules(oneTimeContext, tokens);
-  return oneTimeContext.output.join('');
-}
-
-function value(tokens) {
-  var oneTimeContext = context();
-  helpers.value(oneTimeContext, tokens);
-  return oneTimeContext.output.join('');
-}
-
-module.exports = {
-  all: all,
-  body: body,
-  property: property,
-  rules: rules,
-  value: value
-};
-
-
-/***/ }),
-
-/***/ 91225:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var all = (__webpack_require__(4307).all);
-
-function store(serializeContext, token) {
-  var value = typeof token == 'string'
-    ? token
-    : token[1];
-  var wrap = serializeContext.wrap;
-
-  wrap(serializeContext, value);
-  track(serializeContext, value);
-  serializeContext.output.push(value);
-}
-
-function wrap(serializeContext, value) {
-  if (serializeContext.column + value.length > serializeContext.format.wrapAt) {
-    track(serializeContext, serializeContext.format.breakWith);
-    serializeContext.output.push(serializeContext.format.breakWith);
-  }
-}
-
-function track(serializeContext, value) {
-  var parts = value.split('\n');
-
-  serializeContext.line += parts.length - 1;
-  serializeContext.column = parts.length > 1 ? 0 : (serializeContext.column + parts.pop().length);
-}
-
-function serializeStyles(tokens, context) {
-  var serializeContext = {
-    column: 0,
-    format: context.options.format,
-    indentBy: 0,
-    indentWith: '',
-    line: 1,
-    output: [],
-    spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,
-    store: store,
-    wrap: context.options.format.wrapAt
-      ? wrap
-      : function() { /* noop */ }
-  };
-
-  all(serializeContext, tokens);
-
-  return { styles: serializeContext.output.join('') };
-}
-
-module.exports = serializeStyles;
-
-
-/***/ }),
-
-/***/ 884:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var SourceMapGenerator = (__webpack_require__(49125).SourceMapGenerator);
-var all = (__webpack_require__(4307).all);
-
-var isRemoteResource = __webpack_require__(14234);
-
-var isWindows = process.platform == 'win32';
-
-var NIX_SEPARATOR_PATTERN = /\//g;
-var UNKNOWN_SOURCE = '$stdin';
-var WINDOWS_SEPARATOR = '\\';
-
-function store(serializeContext, element) {
-  var fromString = typeof element == 'string';
-  var value = fromString ? element : element[1];
-  var mappings = fromString ? null : element[2];
-  var wrap = serializeContext.wrap;
-
-  wrap(serializeContext, value);
-  track(serializeContext, value, mappings);
-  serializeContext.output.push(value);
-}
-
-function wrap(serializeContext, value) {
-  if (serializeContext.column + value.length > serializeContext.format.wrapAt) {
-    track(serializeContext, serializeContext.format.breakWith, false);
-    serializeContext.output.push(serializeContext.format.breakWith);
-  }
-}
-
-function track(serializeContext, value, mappings) {
-  var parts = value.split('\n');
-
-  if (mappings) {
-    trackAllMappings(serializeContext, mappings);
-  }
-
-  serializeContext.line += parts.length - 1;
-  serializeContext.column = parts.length > 1 ? 0 : (serializeContext.column + parts.pop().length);
-}
-
-function trackAllMappings(serializeContext, mappings) {
-  for (var i = 0, l = mappings.length; i < l; i++) {
-    trackMapping(serializeContext, mappings[i]);
-  }
-}
-
-function trackMapping(serializeContext, mapping) {
-  var line = mapping[0];
-  var column = mapping[1];
-  var originalSource = mapping[2];
-  var source = originalSource;
-  var storedSource = source || UNKNOWN_SOURCE;
-
-  if (isWindows && source && !isRemoteResource(source)) {
-    storedSource = source.replace(NIX_SEPARATOR_PATTERN, WINDOWS_SEPARATOR);
-  }
-
-  serializeContext.outputMap.addMapping({
-    generated: {
-      line: serializeContext.line,
-      column: serializeContext.column
-    },
-    source: storedSource,
-    original: {
-      line: line,
-      column: column
-    }
-  });
-
-  if (serializeContext.inlineSources && (originalSource in serializeContext.sourcesContent)) {
-    serializeContext.outputMap.setSourceContent(
-      storedSource,
-      serializeContext.sourcesContent[originalSource]
-    );
-  }
-}
-
-function serializeStylesAndSourceMap(tokens, context) {
-  var serializeContext = {
-    column: 0,
-    format: context.options.format,
-    indentBy: 0,
-    indentWith: '',
-    inlineSources: context.options.sourceMapInlineSources,
-    line: 1,
-    output: [],
-    outputMap: new SourceMapGenerator(),
-    sourcesContent: context.sourcesContent,
-    spaceAfterClosingBrace: context.options.compatibility.properties.spaceAfterClosingBrace,
-    store: store,
-    wrap: context.options.format.wrapAt
-      ? wrap
-      : function() { /* noop */ }
-  };
-
-  all(serializeContext, tokens);
-
-  return {
-    sourceMap: serializeContext.outputMap,
-    styles: serializeContext.output.join('')
-  };
-}
-
-module.exports = serializeStylesAndSourceMap;
-
-
-/***/ }),
-
-/***/ 86010:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "clsx": () => (/* binding */ clsx),
-/* harmony export */   "default": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-function r(e){var t,f,n="";if("string"==typeof e||"number"==typeof e)n+=e;else if("object"==typeof e)if(Array.isArray(e))for(t=0;t<e.length;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=" "),n+=f);else for(t in e)e[t]&&(n&&(n+=" "),n+=t);return n}function clsx(){for(var e,t,f=0,n="";f<arguments.length;)(e=arguments[f++])&&(t=r(e))&&(n&&(n+=" "),n+=t);return n}/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (clsx);
-
-/***/ }),
-
-/***/ 48168:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-/* MIT license */
-/* eslint-disable no-mixed-operators */
-const cssKeywords = __webpack_require__(8874);
-
-// NOTE: conversions should only return primitive values (i.e. arrays, or
-//       values that give correct `typeof` results).
-//       do not use box values types (i.e. Number(), String(), etc.)
-
-const reverseKeywords = {};
-for (const key of Object.keys(cssKeywords)) {
-	reverseKeywords[cssKeywords[key]] = key;
-}
-
-const convert = {
-	rgb: {channels: 3, labels: 'rgb'},
-	hsl: {channels: 3, labels: 'hsl'},
-	hsv: {channels: 3, labels: 'hsv'},
-	hwb: {channels: 3, labels: 'hwb'},
-	cmyk: {channels: 4, labels: 'cmyk'},
-	xyz: {channels: 3, labels: 'xyz'},
-	lab: {channels: 3, labels: 'lab'},
-	lch: {channels: 3, labels: 'lch'},
-	hex: {channels: 1, labels: ['hex']},
-	keyword: {channels: 1, labels: ['keyword']},
-	ansi16: {channels: 1, labels: ['ansi16']},
-	ansi256: {channels: 1, labels: ['ansi256']},
-	hcg: {channels: 3, labels: ['h', 'c', 'g']},
-	apple: {channels: 3, labels: ['r16', 'g16', 'b16']},
-	gray: {channels: 1, labels: ['gray']}
-};
-
-module.exports = convert;
-
-// Hide .channels and .labels properties
-for (const model of Object.keys(convert)) {
-	if (!('channels' in convert[model])) {
-		throw new Error('missing channels property: ' + model);
-	}
-
-	if (!('labels' in convert[model])) {
-		throw new Error('missing channel labels property: ' + model);
-	}
-
-	if (convert[model].labels.length !== convert[model].channels) {
-		throw new Error('channel and label counts mismatch: ' + model);
-	}
-
-	const {channels, labels} = convert[model];
-	delete convert[model].channels;
-	delete convert[model].labels;
-	Object.defineProperty(convert[model], 'channels', {value: channels});
-	Object.defineProperty(convert[model], 'labels', {value: labels});
-}
-
-convert.rgb.hsl = function (rgb) {
-	const r = rgb[0] / 255;
-	const g = rgb[1] / 255;
-	const b = rgb[2] / 255;
-	const min = Math.min(r, g, b);
-	const max = Math.max(r, g, b);
-	const delta = max - min;
-	let h;
-	let s;
-
-	if (max === min) {
-		h = 0;
-	} else if (r === max) {
-		h = (g - b) / delta;
-	} else if (g === max) {
-		h = 2 + (b - r) / delta;
-	} else if (b === max) {
-		h = 4 + (r - g) / delta;
-	}
-
-	h = Math.min(h * 60, 360);
-
-	if (h < 0) {
-		h += 360;
-	}
-
-	const l = (min + max) / 2;
-
-	if (max === min) {
-		s = 0;
-	} else if (l <= 0.5) {
-		s = delta / (max + min);
-	} else {
-		s = delta / (2 - max - min);
-	}
-
-	return [h, s * 100, l * 100];
-};
-
-convert.rgb.hsv = function (rgb) {
-	let rdif;
-	let gdif;
-	let bdif;
-	let h;
-	let s;
-
-	const r = rgb[0] / 255;
-	const g = rgb[1] / 255;
-	const b = rgb[2] / 255;
-	const v = Math.max(r, g, b);
-	const diff = v - Math.min(r, g, b);
-	const diffc = function (c) {
-		return (v - c) / 6 / diff + 1 / 2;
-	};
-
-	if (diff === 0) {
-		h = 0;
-		s = 0;
-	} else {
-		s = diff / v;
-		rdif = diffc(r);
-		gdif = diffc(g);
-		bdif = diffc(b);
-
-		if (r === v) {
-			h = bdif - gdif;
-		} else if (g === v) {
-			h = (1 / 3) + rdif - bdif;
-		} else if (b === v) {
-			h = (2 / 3) + gdif - rdif;
-		}
-
-		if (h < 0) {
-			h += 1;
-		} else if (h > 1) {
-			h -= 1;
-		}
-	}
-
-	return [
-		h * 360,
-		s * 100,
-		v * 100
-	];
-};
-
-convert.rgb.hwb = function (rgb) {
-	const r = rgb[0];
-	const g = rgb[1];
-	let b = rgb[2];
-	const h = convert.rgb.hsl(rgb)[0];
-	const w = 1 / 255 * Math.min(r, Math.min(g, b));
-
-	b = 1 - 1 / 255 * Math.max(r, Math.max(g, b));
-
-	return [h, w * 100, b * 100];
-};
-
-convert.rgb.cmyk = function (rgb) {
-	const r = rgb[0] / 255;
-	const g = rgb[1] / 255;
-	const b = rgb[2] / 255;
-
-	const k = Math.min(1 - r, 1 - g, 1 - b);
-	const c = (1 - r - k) / (1 - k) || 0;
-	const m = (1 - g - k) / (1 - k) || 0;
-	const y = (1 - b - k) / (1 - k) || 0;
-
-	return [c * 100, m * 100, y * 100, k * 100];
-};
-
-function comparativeDistance(x, y) {
-	/*
-		See https://en.m.wikipedia.org/wiki/Euclidean_distance#Squared_Euclidean_distance
-	*/
-	return (
-		((x[0] - y[0]) ** 2) +
-		((x[1] - y[1]) ** 2) +
-		((x[2] - y[2]) ** 2)
-	);
-}
-
-convert.rgb.keyword = function (rgb) {
-	const reversed = reverseKeywords[rgb];
-	if (reversed) {
-		return reversed;
-	}
-
-	let currentClosestDistance = Infinity;
-	let currentClosestKeyword;
-
-	for (const keyword of Object.keys(cssKeywords)) {
-		const value = cssKeywords[keyword];
-
-		// Compute comparative distance
-		const distance = comparativeDistance(rgb, value);
-
-		// Check if its less, if so set as closest
-		if (distance < currentClosestDistance) {
-			currentClosestDistance = distance;
-			currentClosestKeyword = keyword;
-		}
-	}
-
-	return currentClosestKeyword;
-};
-
-convert.keyword.rgb = function (keyword) {
-	return cssKeywords[keyword];
-};
-
-convert.rgb.xyz = function (rgb) {
-	let r = rgb[0] / 255;
-	let g = rgb[1] / 255;
-	let b = rgb[2] / 255;
-
-	// Assume sRGB
-	r = r > 0.04045 ? (((r + 0.055) / 1.055) ** 2.4) : (r / 12.92);
-	g = g > 0.04045 ? (((g + 0.055) / 1.055) ** 2.4) : (g / 12.92);
-	b = b > 0.04045 ? (((b + 0.055) / 1.055) ** 2.4) : (b / 12.92);
-
-	const x = (r * 0.4124) + (g * 0.3576) + (b * 0.1805);
-	const y = (r * 0.2126) + (g * 0.7152) + (b * 0.0722);
-	const z = (r * 0.0193) + (g * 0.1192) + (b * 0.9505);
-
-	return [x * 100, y * 100, z * 100];
-};
-
-convert.rgb.lab = function (rgb) {
-	const xyz = convert.rgb.xyz(rgb);
-	let x = xyz[0];
-	let y = xyz[1];
-	let z = xyz[2];
-
-	x /= 95.047;
-	y /= 100;
-	z /= 108.883;
-
-	x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
-	y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
-	z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
-
-	const l = (116 * y) - 16;
-	const a = 500 * (x - y);
-	const b = 200 * (y - z);
-
-	return [l, a, b];
-};
-
-convert.hsl.rgb = function (hsl) {
-	const h = hsl[0] / 360;
-	const s = hsl[1] / 100;
-	const l = hsl[2] / 100;
-	let t2;
-	let t3;
-	let val;
-
-	if (s === 0) {
-		val = l * 255;
-		return [val, val, val];
-	}
-
-	if (l < 0.5) {
-		t2 = l * (1 + s);
-	} else {
-		t2 = l + s - l * s;
-	}
-
-	const t1 = 2 * l - t2;
-
-	const rgb = [0, 0, 0];
-	for (let i = 0; i < 3; i++) {
-		t3 = h + 1 / 3 * -(i - 1);
-		if (t3 < 0) {
-			t3++;
-		}
-
-		if (t3 > 1) {
-			t3--;
-		}
-
-		if (6 * t3 < 1) {
-			val = t1 + (t2 - t1) * 6 * t3;
-		} else if (2 * t3 < 1) {
-			val = t2;
-		} else if (3 * t3 < 2) {
-			val = t1 + (t2 - t1) * (2 / 3 - t3) * 6;
-		} else {
-			val = t1;
-		}
-
-		rgb[i] = val * 255;
-	}
-
-	return rgb;
-};
-
-convert.hsl.hsv = function (hsl) {
-	const h = hsl[0];
-	let s = hsl[1] / 100;
-	let l = hsl[2] / 100;
-	let smin = s;
-	const lmin = Math.max(l, 0.01);
-
-	l *= 2;
-	s *= (l <= 1) ? l : 2 - l;
-	smin *= lmin <= 1 ? lmin : 2 - lmin;
-	const v = (l + s) / 2;
-	const sv = l === 0 ? (2 * smin) / (lmin + smin) : (2 * s) / (l + s);
-
-	return [h, sv * 100, v * 100];
-};
-
-convert.hsv.rgb = function (hsv) {
-	const h = hsv[0] / 60;
-	const s = hsv[1] / 100;
-	let v = hsv[2] / 100;
-	const hi = Math.floor(h) % 6;
-
-	const f = h - Math.floor(h);
-	const p = 255 * v * (1 - s);
-	const q = 255 * v * (1 - (s * f));
-	const t = 255 * v * (1 - (s * (1 - f)));
-	v *= 255;
-
-	switch (hi) {
-		case 0:
-			return [v, t, p];
-		case 1:
-			return [q, v, p];
-		case 2:
-			return [p, v, t];
-		case 3:
-			return [p, q, v];
-		case 4:
-			return [t, p, v];
-		case 5:
-			return [v, p, q];
-	}
-};
-
-convert.hsv.hsl = function (hsv) {
-	const h = hsv[0];
-	const s = hsv[1] / 100;
-	const v = hsv[2] / 100;
-	const vmin = Math.max(v, 0.01);
-	let sl;
-	let l;
-
-	l = (2 - s) * v;
-	const lmin = (2 - s) * vmin;
-	sl = s * vmin;
-	sl /= (lmin <= 1) ? lmin : 2 - lmin;
-	sl = sl || 0;
-	l /= 2;
-
-	return [h, sl * 100, l * 100];
-};
-
-// http://dev.w3.org/csswg/css-color/#hwb-to-rgb
-convert.hwb.rgb = function (hwb) {
-	const h = hwb[0] / 360;
-	let wh = hwb[1] / 100;
-	let bl = hwb[2] / 100;
-	const ratio = wh + bl;
-	let f;
-
-	// Wh + bl cant be > 1
-	if (ratio > 1) {
-		wh /= ratio;
-		bl /= ratio;
-	}
-
-	const i = Math.floor(6 * h);
-	const v = 1 - bl;
-	f = 6 * h - i;
-
-	if ((i & 0x01) !== 0) {
-		f = 1 - f;
-	}
-
-	const n = wh + f * (v - wh); // Linear interpolation
-
-	let r;
-	let g;
-	let b;
-	/* eslint-disable max-statements-per-line,no-multi-spaces */
-	switch (i) {
-		default:
-		case 6:
-		case 0: r = v;  g = n;  b = wh; break;
-		case 1: r = n;  g = v;  b = wh; break;
-		case 2: r = wh; g = v;  b = n; break;
-		case 3: r = wh; g = n;  b = v; break;
-		case 4: r = n;  g = wh; b = v; break;
-		case 5: r = v;  g = wh; b = n; break;
-	}
-	/* eslint-enable max-statements-per-line,no-multi-spaces */
-
-	return [r * 255, g * 255, b * 255];
-};
-
-convert.cmyk.rgb = function (cmyk) {
-	const c = cmyk[0] / 100;
-	const m = cmyk[1] / 100;
-	const y = cmyk[2] / 100;
-	const k = cmyk[3] / 100;
-
-	const r = 1 - Math.min(1, c * (1 - k) + k);
-	const g = 1 - Math.min(1, m * (1 - k) + k);
-	const b = 1 - Math.min(1, y * (1 - k) + k);
-
-	return [r * 255, g * 255, b * 255];
-};
-
-convert.xyz.rgb = function (xyz) {
-	const x = xyz[0] / 100;
-	const y = xyz[1] / 100;
-	const z = xyz[2] / 100;
-	let r;
-	let g;
-	let b;
-
-	r = (x * 3.2406) + (y * -1.5372) + (z * -0.4986);
-	g = (x * -0.9689) + (y * 1.8758) + (z * 0.0415);
-	b = (x * 0.0557) + (y * -0.2040) + (z * 1.0570);
-
-	// Assume sRGB
-	r = r > 0.0031308
-		? ((1.055 * (r ** (1.0 / 2.4))) - 0.055)
-		: r * 12.92;
-
-	g = g > 0.0031308
-		? ((1.055 * (g ** (1.0 / 2.4))) - 0.055)
-		: g * 12.92;
-
-	b = b > 0.0031308
-		? ((1.055 * (b ** (1.0 / 2.4))) - 0.055)
-		: b * 12.92;
-
-	r = Math.min(Math.max(0, r), 1);
-	g = Math.min(Math.max(0, g), 1);
-	b = Math.min(Math.max(0, b), 1);
-
-	return [r * 255, g * 255, b * 255];
-};
-
-convert.xyz.lab = function (xyz) {
-	let x = xyz[0];
-	let y = xyz[1];
-	let z = xyz[2];
-
-	x /= 95.047;
-	y /= 100;
-	z /= 108.883;
-
-	x = x > 0.008856 ? (x ** (1 / 3)) : (7.787 * x) + (16 / 116);
-	y = y > 0.008856 ? (y ** (1 / 3)) : (7.787 * y) + (16 / 116);
-	z = z > 0.008856 ? (z ** (1 / 3)) : (7.787 * z) + (16 / 116);
-
-	const l = (116 * y) - 16;
-	const a = 500 * (x - y);
-	const b = 200 * (y - z);
-
-	return [l, a, b];
-};
-
-convert.lab.xyz = function (lab) {
-	const l = lab[0];
-	const a = lab[1];
-	const b = lab[2];
-	let x;
-	let y;
-	let z;
-
-	y = (l + 16) / 116;
-	x = a / 500 + y;
-	z = y - b / 200;
-
-	const y2 = y ** 3;
-	const x2 = x ** 3;
-	const z2 = z ** 3;
-	y = y2 > 0.008856 ? y2 : (y - 16 / 116) / 7.787;
-	x = x2 > 0.008856 ? x2 : (x - 16 / 116) / 7.787;
-	z = z2 > 0.008856 ? z2 : (z - 16 / 116) / 7.787;
-
-	x *= 95.047;
-	y *= 100;
-	z *= 108.883;
-
-	return [x, y, z];
-};
-
-convert.lab.lch = function (lab) {
-	const l = lab[0];
-	const a = lab[1];
-	const b = lab[2];
-	let h;
-
-	const hr = Math.atan2(b, a);
-	h = hr * 360 / 2 / Math.PI;
-
-	if (h < 0) {
-		h += 360;
-	}
-
-	const c = Math.sqrt(a * a + b * b);
-
-	return [l, c, h];
-};
-
-convert.lch.lab = function (lch) {
-	const l = lch[0];
-	const c = lch[1];
-	const h = lch[2];
-
-	const hr = h / 360 * 2 * Math.PI;
-	const a = c * Math.cos(hr);
-	const b = c * Math.sin(hr);
-
-	return [l, a, b];
-};
-
-convert.rgb.ansi16 = function (args, saturation = null) {
-	const [r, g, b] = args;
-	let value = saturation === null ? convert.rgb.hsv(args)[2] : saturation; // Hsv -> ansi16 optimization
-
-	value = Math.round(value / 50);
-
-	if (value === 0) {
-		return 30;
-	}
-
-	let ansi = 30
-		+ ((Math.round(b / 255) << 2)
-		| (Math.round(g / 255) << 1)
-		| Math.round(r / 255));
-
-	if (value === 2) {
-		ansi += 60;
-	}
-
-	return ansi;
-};
-
-convert.hsv.ansi16 = function (args) {
-	// Optimization here; we already know the value and don't need to get
-	// it converted for us.
-	return convert.rgb.ansi16(convert.hsv.rgb(args), args[2]);
-};
-
-convert.rgb.ansi256 = function (args) {
-	const r = args[0];
-	const g = args[1];
-	const b = args[2];
-
-	// We use the extended greyscale palette here, with the exception of
-	// black and white. normal palette only has 4 greyscale shades.
-	if (r === g && g === b) {
-		if (r < 8) {
-			return 16;
-		}
-
-		if (r > 248) {
-			return 231;
-		}
-
-		return Math.round(((r - 8) / 247) * 24) + 232;
-	}
-
-	const ansi = 16
-		+ (36 * Math.round(r / 255 * 5))
-		+ (6 * Math.round(g / 255 * 5))
-		+ Math.round(b / 255 * 5);
-
-	return ansi;
-};
-
-convert.ansi16.rgb = function (args) {
-	let color = args % 10;
-
-	// Handle greyscale
-	if (color === 0 || color === 7) {
-		if (args > 50) {
-			color += 3.5;
-		}
-
-		color = color / 10.5 * 255;
-
-		return [color, color, color];
-	}
-
-	const mult = (~~(args > 50) + 1) * 0.5;
-	const r = ((color & 1) * mult) * 255;
-	const g = (((color >> 1) & 1) * mult) * 255;
-	const b = (((color >> 2) & 1) * mult) * 255;
-
-	return [r, g, b];
-};
-
-convert.ansi256.rgb = function (args) {
-	// Handle greyscale
-	if (args >= 232) {
-		const c = (args - 232) * 10 + 8;
-		return [c, c, c];
-	}
-
-	args -= 16;
-
-	let rem;
-	const r = Math.floor(args / 36) / 5 * 255;
-	const g = Math.floor((rem = args % 36) / 6) / 5 * 255;
-	const b = (rem % 6) / 5 * 255;
-
-	return [r, g, b];
-};
-
-convert.rgb.hex = function (args) {
-	const integer = ((Math.round(args[0]) & 0xFF) << 16)
-		+ ((Math.round(args[1]) & 0xFF) << 8)
-		+ (Math.round(args[2]) & 0xFF);
-
-	const string = integer.toString(16).toUpperCase();
-	return '000000'.substring(string.length) + string;
-};
-
-convert.hex.rgb = function (args) {
-	const match = args.toString(16).match(/[a-f0-9]{6}|[a-f0-9]{3}/i);
-	if (!match) {
-		return [0, 0, 0];
-	}
-
-	let colorString = match[0];
-
-	if (match[0].length === 3) {
-		colorString = colorString.split('').map(char => {
-			return char + char;
-		}).join('');
-	}
-
-	const integer = parseInt(colorString, 16);
-	const r = (integer >> 16) & 0xFF;
-	const g = (integer >> 8) & 0xFF;
-	const b = integer & 0xFF;
-
-	return [r, g, b];
-};
-
-convert.rgb.hcg = function (rgb) {
-	const r = rgb[0] / 255;
-	const g = rgb[1] / 255;
-	const b = rgb[2] / 255;
-	const max = Math.max(Math.max(r, g), b);
-	const min = Math.min(Math.min(r, g), b);
-	const chroma = (max - min);
-	let grayscale;
-	let hue;
-
-	if (chroma < 1) {
-		grayscale = min / (1 - chroma);
-	} else {
-		grayscale = 0;
-	}
-
-	if (chroma <= 0) {
-		hue = 0;
-	} else
-	if (max === r) {
-		hue = ((g - b) / chroma) % 6;
-	} else
-	if (max === g) {
-		hue = 2 + (b - r) / chroma;
-	} else {
-		hue = 4 + (r - g) / chroma;
-	}
-
-	hue /= 6;
-	hue %= 1;
-
-	return [hue * 360, chroma * 100, grayscale * 100];
-};
-
-convert.hsl.hcg = function (hsl) {
-	const s = hsl[1] / 100;
-	const l = hsl[2] / 100;
-
-	const c = l < 0.5 ? (2.0 * s * l) : (2.0 * s * (1.0 - l));
-
-	let f = 0;
-	if (c < 1.0) {
-		f = (l - 0.5 * c) / (1.0 - c);
-	}
-
-	return [hsl[0], c * 100, f * 100];
-};
-
-convert.hsv.hcg = function (hsv) {
-	const s = hsv[1] / 100;
-	const v = hsv[2] / 100;
-
-	const c = s * v;
-	let f = 0;
-
-	if (c < 1.0) {
-		f = (v - c) / (1 - c);
-	}
-
-	return [hsv[0], c * 100, f * 100];
-};
-
-convert.hcg.rgb = function (hcg) {
-	const h = hcg[0] / 360;
-	const c = hcg[1] / 100;
-	const g = hcg[2] / 100;
-
-	if (c === 0.0) {
-		return [g * 255, g * 255, g * 255];
-	}
-
-	const pure = [0, 0, 0];
-	const hi = (h % 1) * 6;
-	const v = hi % 1;
-	const w = 1 - v;
-	let mg = 0;
-
-	/* eslint-disable max-statements-per-line */
-	switch (Math.floor(hi)) {
-		case 0:
-			pure[0] = 1; pure[1] = v; pure[2] = 0; break;
-		case 1:
-			pure[0] = w; pure[1] = 1; pure[2] = 0; break;
-		case 2:
-			pure[0] = 0; pure[1] = 1; pure[2] = v; break;
-		case 3:
-			pure[0] = 0; pure[1] = w; pure[2] = 1; break;
-		case 4:
-			pure[0] = v; pure[1] = 0; pure[2] = 1; break;
-		default:
-			pure[0] = 1; pure[1] = 0; pure[2] = w;
-	}
-	/* eslint-enable max-statements-per-line */
-
-	mg = (1.0 - c) * g;
-
-	return [
-		(c * pure[0] + mg) * 255,
-		(c * pure[1] + mg) * 255,
-		(c * pure[2] + mg) * 255
-	];
-};
-
-convert.hcg.hsv = function (hcg) {
-	const c = hcg[1] / 100;
-	const g = hcg[2] / 100;
-
-	const v = c + g * (1.0 - c);
-	let f = 0;
-
-	if (v > 0.0) {
-		f = c / v;
-	}
-
-	return [hcg[0], f * 100, v * 100];
-};
-
-convert.hcg.hsl = function (hcg) {
-	const c = hcg[1] / 100;
-	const g = hcg[2] / 100;
-
-	const l = g * (1.0 - c) + 0.5 * c;
-	let s = 0;
-
-	if (l > 0.0 && l < 0.5) {
-		s = c / (2 * l);
-	} else
-	if (l >= 0.5 && l < 1.0) {
-		s = c / (2 * (1 - l));
-	}
-
-	return [hcg[0], s * 100, l * 100];
-};
-
-convert.hcg.hwb = function (hcg) {
-	const c = hcg[1] / 100;
-	const g = hcg[2] / 100;
-	const v = c + g * (1.0 - c);
-	return [hcg[0], (v - c) * 100, (1 - v) * 100];
-};
-
-convert.hwb.hcg = function (hwb) {
-	const w = hwb[1] / 100;
-	const b = hwb[2] / 100;
-	const v = 1 - b;
-	const c = v - w;
-	let g = 0;
-
-	if (c < 1) {
-		g = (v - c) / (1 - c);
-	}
-
-	return [hwb[0], c * 100, g * 100];
-};
-
-convert.apple.rgb = function (apple) {
-	return [(apple[0] / 65535) * 255, (apple[1] / 65535) * 255, (apple[2] / 65535) * 255];
-};
-
-convert.rgb.apple = function (rgb) {
-	return [(rgb[0] / 255) * 65535, (rgb[1] / 255) * 65535, (rgb[2] / 255) * 65535];
-};
-
-convert.gray.rgb = function (args) {
-	return [args[0] / 100 * 255, args[0] / 100 * 255, args[0] / 100 * 255];
-};
-
-convert.gray.hsl = function (args) {
-	return [0, 0, args[0]];
-};
-
-convert.gray.hsv = convert.gray.hsl;
-
-convert.gray.hwb = function (gray) {
-	return [0, 100, gray[0]];
-};
-
-convert.gray.cmyk = function (gray) {
-	return [0, 0, 0, gray[0]];
-};
-
-convert.gray.lab = function (gray) {
-	return [gray[0], 0, 0];
-};
-
-convert.gray.hex = function (gray) {
-	const val = Math.round(gray[0] / 100 * 255) & 0xFF;
-	const integer = (val << 16) + (val << 8) + val;
-
-	const string = integer.toString(16).toUpperCase();
-	return '000000'.substring(string.length) + string;
-};
-
-convert.rgb.gray = function (rgb) {
-	const val = (rgb[0] + rgb[1] + rgb[2]) / 3;
-	return [val / 255 * 100];
-};
-
-
-/***/ }),
-
-/***/ 12085:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-const conversions = __webpack_require__(48168);
-const route = __webpack_require__(4111);
-
-const convert = {};
-
-const models = Object.keys(conversions);
-
-function wrapRaw(fn) {
-	const wrappedFn = function (...args) {
-		const arg0 = args[0];
-		if (arg0 === undefined || arg0 === null) {
-			return arg0;
-		}
-
-		if (arg0.length > 1) {
-			args = arg0;
-		}
-
-		return fn(args);
-	};
-
-	// Preserve .conversion property if there is one
-	if ('conversion' in fn) {
-		wrappedFn.conversion = fn.conversion;
-	}
-
-	return wrappedFn;
-}
-
-function wrapRounded(fn) {
-	const wrappedFn = function (...args) {
-		const arg0 = args[0];
-
-		if (arg0 === undefined || arg0 === null) {
-			return arg0;
-		}
-
-		if (arg0.length > 1) {
-			args = arg0;
-		}
-
-		const result = fn(args);
-
-		// We're assuming the result is an array here.
-		// see notice in conversions.js; don't use box types
-		// in conversion functions.
-		if (typeof result === 'object') {
-			for (let len = result.length, i = 0; i < len; i++) {
-				result[i] = Math.round(result[i]);
-			}
-		}
-
-		return result;
-	};
-
-	// Preserve .conversion property if there is one
-	if ('conversion' in fn) {
-		wrappedFn.conversion = fn.conversion;
-	}
-
-	return wrappedFn;
-}
-
-models.forEach(fromModel => {
-	convert[fromModel] = {};
-
-	Object.defineProperty(convert[fromModel], 'channels', {value: conversions[fromModel].channels});
-	Object.defineProperty(convert[fromModel], 'labels', {value: conversions[fromModel].labels});
-
-	const routes = route(fromModel);
-	const routeModels = Object.keys(routes);
-
-	routeModels.forEach(toModel => {
-		const fn = routes[toModel];
-
-		convert[fromModel][toModel] = wrapRounded(fn);
-		convert[fromModel][toModel].raw = wrapRaw(fn);
-	});
-});
-
-module.exports = convert;
-
-
-/***/ }),
-
-/***/ 4111:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-const conversions = __webpack_require__(48168);
-
-/*
-	This function routes a model to all other models.
-
-	all functions that are routed have a property `.conversion` attached
-	to the returned synthetic function. This property is an array
-	of strings, each with the steps in between the 'from' and 'to'
-	color models (inclusive).
-
-	conversions that are not possible simply are not included.
-*/
-
-function buildGraph() {
-	const graph = {};
-	// https://jsperf.com/object-keys-vs-for-in-with-closure/3
-	const models = Object.keys(conversions);
-
-	for (let len = models.length, i = 0; i < len; i++) {
-		graph[models[i]] = {
-			// http://jsperf.com/1-vs-infinity
-			// micro-opt, but this is simple.
-			distance: -1,
-			parent: null
-		};
-	}
-
-	return graph;
-}
-
-// https://en.wikipedia.org/wiki/Breadth-first_search
-function deriveBFS(fromModel) {
-	const graph = buildGraph();
-	const queue = [fromModel]; // Unshift -> queue -> pop
-
-	graph[fromModel].distance = 0;
-
-	while (queue.length) {
-		const current = queue.pop();
-		const adjacents = Object.keys(conversions[current]);
-
-		for (let len = adjacents.length, i = 0; i < len; i++) {
-			const adjacent = adjacents[i];
-			const node = graph[adjacent];
-
-			if (node.distance === -1) {
-				node.distance = graph[current].distance + 1;
-				node.parent = current;
-				queue.unshift(adjacent);
-			}
-		}
-	}
-
-	return graph;
-}
-
-function link(from, to) {
-	return function (args) {
-		return to(from(args));
-	};
-}
-
-function wrapConversion(toModel, graph) {
-	const path = [graph[toModel].parent, toModel];
-	let fn = conversions[graph[toModel].parent][toModel];
-
-	let cur = graph[toModel].parent;
-	while (graph[cur].parent) {
-		path.unshift(graph[cur].parent);
-		fn = link(conversions[graph[cur].parent][cur], fn);
-		cur = graph[cur].parent;
-	}
-
-	fn.conversion = path;
-	return fn;
-}
-
-module.exports = function (fromModel) {
-	const graph = deriveBFS(fromModel);
-	const conversion = {};
-
-	const models = Object.keys(graph);
-	for (let len = models.length, i = 0; i < len; i++) {
-		const toModel = models[i];
-		const node = graph[toModel];
-
-		if (node.parent === null) {
-			// No possible conversion, or this node is the source model.
-			continue;
-		}
-
-		conversion[toModel] = wrapConversion(toModel, graph);
-	}
-
-	return conversion;
-};
-
-
-
-/***/ }),
-
-/***/ 8874:
-/***/ ((module) => {
-
-"use strict";
-
-
-module.exports = {
-	"aliceblue": [240, 248, 255],
-	"antiquewhite": [250, 235, 215],
-	"aqua": [0, 255, 255],
-	"aquamarine": [127, 255, 212],
-	"azure": [240, 255, 255],
-	"beige": [245, 245, 220],
-	"bisque": [255, 228, 196],
-	"black": [0, 0, 0],
-	"blanchedalmond": [255, 235, 205],
-	"blue": [0, 0, 255],
-	"blueviolet": [138, 43, 226],
-	"brown": [165, 42, 42],
-	"burlywood": [222, 184, 135],
-	"cadetblue": [95, 158, 160],
-	"chartreuse": [127, 255, 0],
-	"chocolate": [210, 105, 30],
-	"coral": [255, 127, 80],
-	"cornflowerblue": [100, 149, 237],
-	"cornsilk": [255, 248, 220],
-	"crimson": [220, 20, 60],
-	"cyan": [0, 255, 255],
-	"darkblue": [0, 0, 139],
-	"darkcyan": [0, 139, 139],
-	"darkgoldenrod": [184, 134, 11],
-	"darkgray": [169, 169, 169],
-	"darkgreen": [0, 100, 0],
-	"darkgrey": [169, 169, 169],
-	"darkkhaki": [189, 183, 107],
-	"darkmagenta": [139, 0, 139],
-	"darkolivegreen": [85, 107, 47],
-	"darkorange": [255, 140, 0],
-	"darkorchid": [153, 50, 204],
-	"darkred": [139, 0, 0],
-	"darksalmon": [233, 150, 122],
-	"darkseagreen": [143, 188, 143],
-	"darkslateblue": [72, 61, 139],
-	"darkslategray": [47, 79, 79],
-	"darkslategrey": [47, 79, 79],
-	"darkturquoise": [0, 206, 209],
-	"darkviolet": [148, 0, 211],
-	"deeppink": [255, 20, 147],
-	"deepskyblue": [0, 191, 255],
-	"dimgray": [105, 105, 105],
-	"dimgrey": [105, 105, 105],
-	"dodgerblue": [30, 144, 255],
-	"firebrick": [178, 34, 34],
-	"floralwhite": [255, 250, 240],
-	"forestgreen": [34, 139, 34],
-	"fuchsia": [255, 0, 255],
-	"gainsboro": [220, 220, 220],
-	"ghostwhite": [248, 248, 255],
-	"gold": [255, 215, 0],
-	"goldenrod": [218, 165, 32],
-	"gray": [128, 128, 128],
-	"green": [0, 128, 0],
-	"greenyellow": [173, 255, 47],
-	"grey": [128, 128, 128],
-	"honeydew": [240, 255, 240],
-	"hotpink": [255, 105, 180],
-	"indianred": [205, 92, 92],
-	"indigo": [75, 0, 130],
-	"ivory": [255, 255, 240],
-	"khaki": [240, 230, 140],
-	"lavender": [230, 230, 250],
-	"lavenderblush": [255, 240, 245],
-	"lawngreen": [124, 252, 0],
-	"lemonchiffon": [255, 250, 205],
-	"lightblue": [173, 216, 230],
-	"lightcoral": [240, 128, 128],
-	"lightcyan": [224, 255, 255],
-	"lightgoldenrodyellow": [250, 250, 210],
-	"lightgray": [211, 211, 211],
-	"lightgreen": [144, 238, 144],
-	"lightgrey": [211, 211, 211],
-	"lightpink": [255, 182, 193],
-	"lightsalmon": [255, 160, 122],
-	"lightseagreen": [32, 178, 170],
-	"lightskyblue": [135, 206, 250],
-	"lightslategray": [119, 136, 153],
-	"lightslategrey": [119, 136, 153],
-	"lightsteelblue": [176, 196, 222],
-	"lightyellow": [255, 255, 224],
-	"lime": [0, 255, 0],
-	"limegreen": [50, 205, 50],
-	"linen": [250, 240, 230],
-	"magenta": [255, 0, 255],
-	"maroon": [128, 0, 0],
-	"mediumaquamarine": [102, 205, 170],
-	"mediumblue": [0, 0, 205],
-	"mediumorchid": [186, 85, 211],
-	"mediumpurple": [147, 112, 219],
-	"mediumseagreen": [60, 179, 113],
-	"mediumslateblue": [123, 104, 238],
-	"mediumspringgreen": [0, 250, 154],
-	"mediumturquoise": [72, 209, 204],
-	"mediumvioletred": [199, 21, 133],
-	"midnightblue": [25, 25, 112],
-	"mintcream": [245, 255, 250],
-	"mistyrose": [255, 228, 225],
-	"moccasin": [255, 228, 181],
-	"navajowhite": [255, 222, 173],
-	"navy": [0, 0, 128],
-	"oldlace": [253, 245, 230],
-	"olive": [128, 128, 0],
-	"olivedrab": [107, 142, 35],
-	"orange": [255, 165, 0],
-	"orangered": [255, 69, 0],
-	"orchid": [218, 112, 214],
-	"palegoldenrod": [238, 232, 170],
-	"palegreen": [152, 251, 152],
-	"paleturquoise": [175, 238, 238],
-	"palevioletred": [219, 112, 147],
-	"papayawhip": [255, 239, 213],
-	"peachpuff": [255, 218, 185],
-	"peru": [205, 133, 63],
-	"pink": [255, 192, 203],
-	"plum": [221, 160, 221],
-	"powderblue": [176, 224, 230],
-	"purple": [128, 0, 128],
-	"rebeccapurple": [102, 51, 153],
-	"red": [255, 0, 0],
-	"rosybrown": [188, 143, 143],
-	"royalblue": [65, 105, 225],
-	"saddlebrown": [139, 69, 19],
-	"salmon": [250, 128, 114],
-	"sandybrown": [244, 164, 96],
-	"seagreen": [46, 139, 87],
-	"seashell": [255, 245, 238],
-	"sienna": [160, 82, 45],
-	"silver": [192, 192, 192],
-	"skyblue": [135, 206, 235],
-	"slateblue": [106, 90, 205],
-	"slategray": [112, 128, 144],
-	"slategrey": [112, 128, 144],
-	"snow": [255, 250, 250],
-	"springgreen": [0, 255, 127],
-	"steelblue": [70, 130, 180],
-	"tan": [210, 180, 140],
-	"teal": [0, 128, 128],
-	"thistle": [216, 191, 216],
-	"tomato": [255, 99, 71],
-	"turquoise": [64, 224, 208],
-	"violet": [238, 130, 238],
-	"wheat": [245, 222, 179],
-	"white": [255, 255, 255],
-	"whitesmoke": [245, 245, 245],
-	"yellow": [255, 255, 0],
-	"yellowgreen": [154, 205, 50]
-};
-
-
-/***/ }),
-
-/***/ 20640:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var deselectCurrent = __webpack_require__(11742);
-
-var clipboardToIE11Formatting = {
-  "text/plain": "Text",
-  "text/html": "Url",
-  "default": "Text"
-}
-
-var defaultMessage = "Copy to clipboard: #{key}, Enter";
-
-function format(message) {
-  var copyKey = (/mac os x/i.test(navigator.userAgent) ? "⌘" : "Ctrl") + "+C";
-  return message.replace(/#{\s*key\s*}/g, copyKey);
-}
-
-function copy(text, options) {
-  var debug,
-    message,
-    reselectPrevious,
-    range,
-    selection,
-    mark,
-    success = false;
-  if (!options) {
-    options = {};
-  }
-  debug = options.debug || false;
-  try {
-    reselectPrevious = deselectCurrent();
-
-    range = document.createRange();
-    selection = document.getSelection();
-
-    mark = document.createElement("span");
-    mark.textContent = text;
-    // avoid screen readers from reading out loud the text
-    mark.ariaHidden = "true"
-    // reset user styles for span element
-    mark.style.all = "unset";
-    // prevents scrolling to the end of the page
-    mark.style.position = "fixed";
-    mark.style.top = 0;
-    mark.style.clip = "rect(0, 0, 0, 0)";
-    // used to preserve spaces and line breaks
-    mark.style.whiteSpace = "pre";
-    // do not inherit user-select (it may be `none`)
-    mark.style.webkitUserSelect = "text";
-    mark.style.MozUserSelect = "text";
-    mark.style.msUserSelect = "text";
-    mark.style.userSelect = "text";
-    mark.addEventListener("copy", function(e) {
-      e.stopPropagation();
-      if (options.format) {
-        e.preventDefault();
-        if (typeof e.clipboardData === "undefined") { // IE 11
-          debug && console.warn("unable to use e.clipboardData");
-          debug && console.warn("trying IE specific stuff");
-          window.clipboardData.clearData();
-          var format = clipboardToIE11Formatting[options.format] || clipboardToIE11Formatting["default"]
-          window.clipboardData.setData(format, text);
-        } else { // all other browsers
-          e.clipboardData.clearData();
-          e.clipboardData.setData(options.format, text);
-        }
-      }
-      if (options.onCopy) {
-        e.preventDefault();
-        options.onCopy(e.clipboardData);
-      }
-    });
-
-    document.body.appendChild(mark);
-
-    range.selectNodeContents(mark);
-    selection.addRange(range);
-
-    var successful = document.execCommand("copy");
-    if (!successful) {
-      throw new Error("copy command was unsuccessful");
-    }
-    success = true;
-  } catch (err) {
-    debug && console.error("unable to copy using execCommand: ", err);
-    debug && console.warn("trying IE specific stuff");
-    try {
-      window.clipboardData.setData(options.format || "text", text);
-      options.onCopy && options.onCopy(window.clipboardData);
-      success = true;
-    } catch (err) {
-      debug && console.error("unable to copy using clipboardData: ", err);
-      debug && console.error("falling back to prompt");
-      message = format("message" in options ? options.message : defaultMessage);
-      window.prompt(message, text);
-    }
-  } finally {
-    if (selection) {
-      if (typeof selection.removeRange == "function") {
-        selection.removeRange(range);
-      } else {
-        selection.removeAllRanges();
-      }
-    }
-
-    if (mark) {
-      document.body.removeChild(mark);
-    }
-    reselectPrevious();
-  }
-
-  return success;
-}
-
-module.exports = copy;
-
-
-/***/ }),
-
-/***/ 61547:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"icon": "icon_S7Kx",
-	"s": "s_AZDZ",
-	"m": "m_thRi",
-	"l": "l_WHPt",
-	"fill": "fill_hNhN",
-	"stroke": "stroke_N8dm"
-};
-
-
-/***/ }),
-
-/***/ 361:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"root": "root_TTsz",
-	"fullWidth": "fullWidth_HBtH",
-	"fullHeight": "fullHeight_ls1u",
-	"content": "content_feMR",
-	"keep": "keep_Y9Ea"
-};
-
-
-/***/ }),
-
-/***/ 7332:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"scrollToBottom": "scrollToBottom_NE5w",
-	"hide": "hide_q_kn"
-};
-
-
-/***/ }),
-
-/***/ 97679:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"backdrop": "backdrop_Ifvc",
-	"navWrapper": "navWrapper_ybYI",
-	"nav": "nav_cMpg",
-	"visible": "visible_ynAX",
-	"wrapper": "wrapper_SWrM",
-	"fullscreenButton": "fullscreenButton_Bocn",
-	"active": "active_qZD5"
-};
-
-
-/***/ }),
-
-/***/ 41520:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"toggle": "toggle_K23S",
-	"toggleButton": "toggleButton_dl49",
-	"darkToggleIcon": "darkToggleIcon_lKkA",
-	"lightToggleIcon": "lightToggleIcon_K4TL",
-	"toggleButtonDisabled": "toggleButtonDisabled_AAS_"
-};
-
-
-/***/ }),
-
-/***/ 58615:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"docItemContainer": "docItemContainer_hrrU",
-	"docItemGrid": "docItemGrid_SzoZ",
-	"gap1": "gap1_XuuQ",
-	"toc": "toc_pP_5",
-	"tocMobile": "tocMobile_imaF",
-	"docItemCol": "docItemCol_F52z"
-};
-
-
-/***/ }),
-
-/***/ 56676:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"chevron": "chevron_How5"
-};
-
-
-/***/ }),
-
-/***/ 15450:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"badge": "badge_AsjZ"
-};
-
-
-/***/ }),
-
-/***/ 2932:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"firstRow": "firstRow_ar1q",
-	"secondRow": "secondRow__ww3",
-	"backToTop": "backToTop_wDfN",
-	"footerLink": "footerLink_sh7M"
-};
-
-
-/***/ }),
-
-/***/ 98547:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"collapse": "collapse_LWBd"
-};
-
-
-/***/ }),
-
-/***/ 66058:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"colorModeToggle": "colorModeToggle_GSaI",
-	"rightSection": "rightSection_CLeF",
-	"iconButtonGroup": "iconButtonGroup_ktNv"
-};
-
-
-/***/ }),
-
-/***/ 1443:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"dropdownNavbarItem": "dropdownNavbarItem_o23I"
-};
-
-
-/***/ }),
-
-/***/ 83328:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"root": "root_jG9K"
-};
-
-
-/***/ }),
-
-/***/ 75984:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"modal": "modal_kLVz",
-	"closeButton": "closeButton_Rr0e",
-	"header": "header_QwCa"
-};
-
-
-/***/ }),
-
-/***/ 51378:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"root": "root_ONDG",
-	"empty": "empty_a7qb",
-	"title": "title_uwS_",
-	"item": "item_RHYF",
-	"itemTitle": "itemTitle_jtAv"
-};
-
-
-/***/ }),
-
-/***/ 42795:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"root": "root_xZfc",
-	"textField": "textField_af43"
-};
-
-
-/***/ }),
-
-/***/ 99606:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"root": "root_N57j"
-};
-
-
-/***/ }),
-
-/***/ 59317:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"root": "root_Ooa0",
-	"level1": "level1_fpUf",
-	"icon": "icon_sZn2",
-	"fill": "fill_fkan",
-	"stroke": "stroke_j3wH"
-};
-
-
-/***/ }),
-
-/***/ 84676:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"root": "root_JWD1"
-};
-
-
-/***/ }),
-
-/***/ 88894:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"root": "root_EFVO"
-};
-
-
-/***/ }),
-
-/***/ 82782:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"root": "root_ltHz",
-	"noResults": "noResults_mD2O",
-	"groups": "groups_p1lF",
-	"divider": "divider_eGUz",
-	"topBar": "topBar_Dtew"
-};
-
-
-/***/ }),
-
-/***/ 30292:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"admonition": "admonition_ntHH",
-	"admonitionHeading": "admonitionHeading_JPfy",
-	"admonitionIcon": "admonitionIcon_BGV6",
-	"admonitionContent": "admonitionContent_iozl"
-};
-
-
-/***/ }),
-
-/***/ 57003:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"codeBlockContainer": "codeBlockContainer_EB2s"
-};
-
-
-/***/ }),
-
-/***/ 66292:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"codeBlockContent": "codeBlockContent_ugSV",
-	"codeBlockTitle": "codeBlockTitle_sjMo",
-	"codeBlock": "codeBlock_TWhw",
-	"codeBlockStandalone": "codeBlockStandalone_BRZX",
-	"codeBlockLines": "codeBlockLines_LDrR",
-	"codeBlockLinesWithNumbering": "codeBlockLinesWithNumbering_bsRF",
-	"buttonGroup": "buttonGroup_Qu4e"
-};
-
-
-/***/ }),
-
-/***/ 96931:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"copyButtonCopied": "copyButtonCopied_YovB",
-	"copyButtonIcons": "copyButtonIcons_an20",
-	"copyButtonIcon": "copyButtonIcon_ZL7v",
-	"copyButtonSuccessIcon": "copyButtonSuccessIcon_P2h8"
-};
-
-
-/***/ }),
-
-/***/ 23718:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"breadcrumbsContainer": "breadcrumbsContainer_RLvU"
-};
-
-
-/***/ }),
-
-/***/ 71907:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"menu": "menu_NjKY",
-	"menuWithAnnouncementBar": "menuWithAnnouncementBar_U5pk"
-};
-
-
-/***/ }),
-
-/***/ 40458:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"sidebar": "sidebar_UEyd",
-	"sidebarWithHideableNavbar": "sidebarWithHideableNavbar__00c",
-	"sidebarHidden": "sidebarHidden_F1ZE",
-	"sidebarLogo": "sidebarLogo_Ydl9"
-};
-
-
-/***/ }),
-
-/***/ 96300:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"navbarHideable": "navbarHideable_OoEf",
-	"navbarHidden": "navbarHidden_zoxl"
-};
-
-
-/***/ }),
-
-/***/ 43234:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"linkContent": "linkContent__x3v",
-	"externalLinkIcon": "externalLinkIcon_Qfue"
-};
-
-
-/***/ }),
-
-/***/ 57986:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"tocCollapsibleButton": "tocCollapsibleButton_dxRj",
-	"tocCollapsibleButtonExpanded": "tocCollapsibleButtonExpanded_TSyC"
-};
-
-
-/***/ }),
-
-/***/ 73506:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"tocCollapsible": "tocCollapsible_ROek",
-	"tocCollapsibleContent": "tocCollapsibleContent_Qsjj",
-	"tocCollapsibleExpanded": "tocCollapsibleExpanded_zTjk"
-};
-
-
-/***/ }),
-
-/***/ 71211:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"tag": "tag_dtsN",
-	"tagRegular": "tagRegular_SGIC",
-	"tagWithCount": "tagWithCount_gIvh"
-};
-
-
-/***/ }),
-
-/***/ 88288:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"root": "root_UH70",
-	"tags": "tags_LT8x",
-	"tag": "tag_NdBD"
-};
-
-
-/***/ }),
-
-/***/ 9991:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"themedImage": "themedImage_kfRS",
-	"themedImage--light": "themedImage--light_BL8e",
-	"themedImage--dark": "themedImage--dark_OvIx"
-};
-
-
-/***/ }),
-
-/***/ 31467:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"root": "root_QACb"
-};
-
-
-/***/ }),
-
-/***/ 76641:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-
-};
-
-
-/***/ }),
-
-/***/ 23845:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"closeButton": "closeButton_CVFx"
-};
-
-
-/***/ }),
-
-/***/ 37021:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"content": "content_knG7"
-};
-
-
-/***/ }),
-
-/***/ 9239:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"announcementBar": "announcementBar_mb4j",
-	"announcementBarPlaceholder": "announcementBarPlaceholder_vyr4",
-	"announcementBarClose": "announcementBarClose_gvF7",
-	"announcementBarContent": "announcementBarContent_xLdY"
-};
-
-
-/***/ }),
-
-/***/ 9783:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"backToTopButton": "backToTopButton_sjWU",
-	"backToTopButtonShow": "backToTopButtonShow_xfvO"
-};
-
-
-/***/ }),
-
-/***/ 51633:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"codeBlockContainer": "codeBlockContainer_Ckt0"
-};
-
-
-/***/ }),
-
-/***/ 9130:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"codeBlockContent": "codeBlockContent_biex",
-	"codeBlockTitle": "codeBlockTitle_Ktv7",
-	"codeBlock": "codeBlock_bY9V",
-	"codeBlockStandalone": "codeBlockStandalone_MEMb",
-	"codeBlockLines": "codeBlockLines_e6Vv",
-	"codeBlockLinesWithNumbering": "codeBlockLinesWithNumbering_o6Pm",
-	"buttonGroup": "buttonGroup__atx"
-};
-
-
-/***/ }),
-
-/***/ 85576:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"codeLine": "codeLine_lJS_",
-	"codeLineNumber": "codeLineNumber_Tfdd",
-	"codeLineContent": "codeLineContent_feaV"
-};
-
-
-/***/ }),
-
-/***/ 65647:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"wordWrapButtonIcon": "wordWrapButtonIcon_Bwma",
-	"wordWrapButtonEnabled": "wordWrapButtonEnabled_EoeP"
-};
-
-
-/***/ }),
-
-/***/ 44856:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"lastUpdated": "lastUpdated_vwxv"
-};
-
-
-/***/ }),
-
-/***/ 67192:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"tocMobile": "tocMobile_ITEo"
-};
-
-
-/***/ }),
-
-/***/ 40296:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"docMainContainer": "docMainContainer_gTbr",
-	"docMainContainerEnhanced": "docMainContainerEnhanced_Uz_u",
-	"docItemWrapperEnhanced": "docItemWrapperEnhanced_czyv"
-};
-
-
-/***/ }),
-
-/***/ 70818:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"expandButton": "expandButton_m80_",
-	"expandButtonIcon": "expandButtonIcon_BlDH"
-};
-
-
-/***/ }),
-
-/***/ 79141:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"docSidebarContainer": "docSidebarContainer_b6E3",
-	"docSidebarContainerHidden": "docSidebarContainerHidden_b3ry",
-	"sidebarViewport": "sidebarViewport_Xe31"
-};
-
-
-/***/ }),
-
-/***/ 57212:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"docPage": "docPage__5DB",
-	"docsWrapper": "docsWrapper_BCFX"
-};
-
-
-/***/ }),
-
-/***/ 9171:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"menuHtmlItem": "menuHtmlItem_M9Kj"
-};
-
-
-/***/ }),
-
-/***/ 86014:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"menuExternalLink": "menuExternalLink_NmtK"
-};
-
-
-/***/ }),
-
-/***/ 40937:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"footerLogoLink": "footerLogoLink_BH7S"
-};
-
-
-/***/ }),
-
-/***/ 19475:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"anchorWithStickyNavbar": "anchorWithStickyNavbar_LWe7",
-	"anchorWithHideOnScrollNavbar": "anchorWithHideOnScrollNavbar_WYt5"
-};
-
-
-/***/ }),
-
-/***/ 89073:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"iconExternalLink": "iconExternalLink_nPIU"
-};
-
-
-/***/ }),
-
-/***/ 64874:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"mainWrapper": "mainWrapper_z2l0"
-};
-
-
-/***/ }),
-
-/***/ 7588:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"img": "img_ev3q"
-};
-
-
-/***/ }),
-
-/***/ 46655:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"containsTaskList": "containsTaskList_mC6p"
-};
-
-
-/***/ }),
-
-/***/ 720:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"mdxPageWrapper": "mdxPageWrapper_j9I6"
-};
-
-
-/***/ }),
-
-/***/ 14283:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"darkNavbarColorModeToggle": "darkNavbarColorModeToggle_X3D1"
-};
-
-
-/***/ }),
-
-/***/ 17641:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"searchBox": "searchBox_ZlJk"
-};
-
-
-/***/ }),
-
-/***/ 42824:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"skipToContent": "skipToContent_fXgn"
-};
-
-
-/***/ }),
-
-/***/ 70578:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"tableOfContents": "tableOfContents_bqdL",
-	"docItemContainer": "docItemContainer_F8PC"
-};
-
-
-/***/ }),
-
-/***/ 25716:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"errorBoundaryError": "errorBoundaryError_a6uf"
-};
-
-
-/***/ }),
-
-/***/ 25822:
-/***/ ((module) => {
-
-// Exports
-module.exports = {
-	"container": "container_lyt7"
-};
-
-
-/***/ }),
-
-/***/ 99486:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ format)
-});
-
-;// CONCATENATED MODULE: ./node_modules/date-fns/node_modules/@babel/runtime/helpers/esm/typeof.js
-function _typeof(obj) {
-  "@babel/helpers - typeof";
-
-  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
-    return typeof obj;
-  } : function (obj) {
-    return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
-  }, _typeof(obj);
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/requiredArgs/index.js
-function requiredArgs(required, args) {
-  if (args.length < required) {
-    throw new TypeError(required + ' argument' + (required > 1 ? 's' : '') + ' required, but only ' + args.length + ' present');
-  }
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/isDate/index.js
-
-
-/**
- * @name isDate
- * @category Common Helpers
- * @summary Is the given value a date?
- *
- * @description
- * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.
- *
- * @param {*} value - the value to check
- * @returns {boolean} true if the given value is a date
- * @throws {TypeError} 1 arguments required
- *
- * @example
- * // For a valid date:
- * const result = isDate(new Date())
- * //=> true
- *
- * @example
- * // For an invalid date:
- * const result = isDate(new Date(NaN))
- * //=> true
- *
- * @example
- * // For some value:
- * const result = isDate('2014-02-31')
- * //=> false
- *
- * @example
- * // For an object:
- * const result = isDate({})
- * //=> false
- */
-function isDate(value) {
-  requiredArgs(1, arguments);
-  return value instanceof Date || _typeof(value) === 'object' && Object.prototype.toString.call(value) === '[object Date]';
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/toDate/index.js
-
-
-/**
- * @name toDate
- * @category Common Helpers
- * @summary Convert the given argument to an instance of Date.
- *
- * @description
- * Convert the given argument to an instance of Date.
- *
- * If the argument is an instance of Date, the function returns its clone.
- *
- * If the argument is a number, it is treated as a timestamp.
- *
- * If the argument is none of the above, the function returns Invalid Date.
- *
- * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.
- *
- * @param {Date|Number} argument - the value to convert
- * @returns {Date} the parsed date in the local time zone
- * @throws {TypeError} 1 argument required
- *
- * @example
- * // Clone the date:
- * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))
- * //=> Tue Feb 11 2014 11:30:30
- *
- * @example
- * // Convert the timestamp to date:
- * const result = toDate(1392098430000)
- * //=> Tue Feb 11 2014 11:30:30
- */
-function toDate(argument) {
-  requiredArgs(1, arguments);
-  var argStr = Object.prototype.toString.call(argument);
-
-  // Clone the date
-  if (argument instanceof Date || _typeof(argument) === 'object' && argStr === '[object Date]') {
-    // Prevent the date to lose the milliseconds when passed to new Date() in IE10
-    return new Date(argument.getTime());
-  } else if (typeof argument === 'number' || argStr === '[object Number]') {
-    return new Date(argument);
-  } else {
-    if ((typeof argument === 'string' || argStr === '[object String]') && typeof console !== 'undefined') {
-      // eslint-disable-next-line no-console
-      console.warn("Starting with v2.0.0-beta.1 date-fns doesn't accept strings as date arguments. Please use `parseISO` to parse strings. See: https://github.com/date-fns/date-fns/blob/master/docs/upgradeGuide.md#string-arguments");
-      // eslint-disable-next-line no-console
-      console.warn(new Error().stack);
-    }
-    return new Date(NaN);
-  }
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/isValid/index.js
-
-
-
-/**
- * @name isValid
- * @category Common Helpers
- * @summary Is the given date valid?
- *
- * @description
- * Returns false if argument is Invalid Date and true otherwise.
- * Argument is converted to Date using `toDate`. See [toDate]{@link https://date-fns.org/docs/toDate}
- * Invalid Date is a Date, whose time value is NaN.
- *
- * Time value of Date: http://es5.github.io/#x15.9.1.1
- *
- * @param {*} date - the date to check
- * @returns {Boolean} the date is valid
- * @throws {TypeError} 1 argument required
- *
- * @example
- * // For the valid date:
- * const result = isValid(new Date(2014, 1, 31))
- * //=> true
- *
- * @example
- * // For the value, convertable into a date:
- * const result = isValid(1393804800000)
- * //=> true
- *
- * @example
- * // For the invalid date:
- * const result = isValid(new Date(''))
- * //=> false
- */
-function isValid(dirtyDate) {
-  requiredArgs(1, arguments);
-  if (!isDate(dirtyDate) && typeof dirtyDate !== 'number') {
-    return false;
-  }
-  var date = toDate(dirtyDate);
-  return !isNaN(Number(date));
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/toInteger/index.js
-function toInteger(dirtyNumber) {
-  if (dirtyNumber === null || dirtyNumber === true || dirtyNumber === false) {
-    return NaN;
-  }
-  var number = Number(dirtyNumber);
-  if (isNaN(number)) {
-    return number;
-  }
-  return number < 0 ? Math.ceil(number) : Math.floor(number);
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/addMilliseconds/index.js
-
-
-
-/**
- * @name addMilliseconds
- * @category Millisecond Helpers
- * @summary Add the specified number of milliseconds to the given date.
- *
- * @description
- * Add the specified number of milliseconds to the given date.
- *
- * @param {Date|Number} date - the date to be changed
- * @param {Number} amount - the amount of milliseconds to be added. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
- * @returns {Date} the new date with the milliseconds added
- * @throws {TypeError} 2 arguments required
- *
- * @example
- * // Add 750 milliseconds to 10 July 2014 12:45:30.000:
- * const result = addMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)
- * //=> Thu Jul 10 2014 12:45:30.750
- */
-function addMilliseconds(dirtyDate, dirtyAmount) {
-  requiredArgs(2, arguments);
-  var timestamp = toDate(dirtyDate).getTime();
-  var amount = toInteger(dirtyAmount);
-  return new Date(timestamp + amount);
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/subMilliseconds/index.js
-
-
-
-/**
- * @name subMilliseconds
- * @category Millisecond Helpers
- * @summary Subtract the specified number of milliseconds from the given date.
- *
- * @description
- * Subtract the specified number of milliseconds from the given date.
- *
- * @param {Date|Number} date - the date to be changed
- * @param {Number} amount - the amount of milliseconds to be subtracted. Positive decimals will be rounded using `Math.floor`, decimals less than zero will be rounded using `Math.ceil`.
- * @returns {Date} the new date with the milliseconds subtracted
- * @throws {TypeError} 2 arguments required
- *
- * @example
- * // Subtract 750 milliseconds from 10 July 2014 12:45:30.000:
- * const result = subMilliseconds(new Date(2014, 6, 10, 12, 45, 30, 0), 750)
- * //=> Thu Jul 10 2014 12:45:29.250
- */
-function subMilliseconds(dirtyDate, dirtyAmount) {
-  requiredArgs(2, arguments);
-  var amount = toInteger(dirtyAmount);
-  return addMilliseconds(dirtyDate, -amount);
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/getUTCDayOfYear/index.js
-
-
-var MILLISECONDS_IN_DAY = 86400000;
-function getUTCDayOfYear(dirtyDate) {
-  requiredArgs(1, arguments);
-  var date = toDate(dirtyDate);
-  var timestamp = date.getTime();
-  date.setUTCMonth(0, 1);
-  date.setUTCHours(0, 0, 0, 0);
-  var startOfYearTimestamp = date.getTime();
-  var difference = timestamp - startOfYearTimestamp;
-  return Math.floor(difference / MILLISECONDS_IN_DAY) + 1;
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/startOfUTCISOWeek/index.js
-
-
-function startOfUTCISOWeek(dirtyDate) {
-  requiredArgs(1, arguments);
-  var weekStartsOn = 1;
-  var date = toDate(dirtyDate);
-  var day = date.getUTCDay();
-  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;
-  date.setUTCDate(date.getUTCDate() - diff);
-  date.setUTCHours(0, 0, 0, 0);
-  return date;
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/getUTCISOWeekYear/index.js
-
-
-
-function getUTCISOWeekYear(dirtyDate) {
-  requiredArgs(1, arguments);
-  var date = toDate(dirtyDate);
-  var year = date.getUTCFullYear();
-  var fourthOfJanuaryOfNextYear = new Date(0);
-  fourthOfJanuaryOfNextYear.setUTCFullYear(year + 1, 0, 4);
-  fourthOfJanuaryOfNextYear.setUTCHours(0, 0, 0, 0);
-  var startOfNextYear = startOfUTCISOWeek(fourthOfJanuaryOfNextYear);
-  var fourthOfJanuaryOfThisYear = new Date(0);
-  fourthOfJanuaryOfThisYear.setUTCFullYear(year, 0, 4);
-  fourthOfJanuaryOfThisYear.setUTCHours(0, 0, 0, 0);
-  var startOfThisYear = startOfUTCISOWeek(fourthOfJanuaryOfThisYear);
-  if (date.getTime() >= startOfNextYear.getTime()) {
-    return year + 1;
-  } else if (date.getTime() >= startOfThisYear.getTime()) {
-    return year;
-  } else {
-    return year - 1;
-  }
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/startOfUTCISOWeekYear/index.js
-
-
-
-function startOfUTCISOWeekYear(dirtyDate) {
-  requiredArgs(1, arguments);
-  var year = getUTCISOWeekYear(dirtyDate);
-  var fourthOfJanuary = new Date(0);
-  fourthOfJanuary.setUTCFullYear(year, 0, 4);
-  fourthOfJanuary.setUTCHours(0, 0, 0, 0);
-  var date = startOfUTCISOWeek(fourthOfJanuary);
-  return date;
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/getUTCISOWeek/index.js
-
-
-
-
-var MILLISECONDS_IN_WEEK = 604800000;
-function getUTCISOWeek(dirtyDate) {
-  requiredArgs(1, arguments);
-  var date = toDate(dirtyDate);
-  var diff = startOfUTCISOWeek(date).getTime() - startOfUTCISOWeekYear(date).getTime();
-
-  // Round the number of days to the nearest integer
-  // because the number of milliseconds in a week is not constant
-  // (e.g. it's different in the week of the daylight saving time clock shift)
-  return Math.round(diff / MILLISECONDS_IN_WEEK) + 1;
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/defaultOptions/index.js
-var defaultOptions = {};
-function getDefaultOptions() {
-  return defaultOptions;
-}
-function setDefaultOptions(newOptions) {
-  defaultOptions = newOptions;
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/startOfUTCWeek/index.js
-
-
-
-
-function startOfUTCWeek(dirtyDate, options) {
-  var _ref, _ref2, _ref3, _options$weekStartsOn, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
-  requiredArgs(1, arguments);
-  var defaultOptions = getDefaultOptions();
-  var weekStartsOn = toInteger((_ref = (_ref2 = (_ref3 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.weekStartsOn) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.weekStartsOn) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.weekStartsOn) !== null && _ref !== void 0 ? _ref : 0);
-
-  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
-  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
-    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');
-  }
-  var date = toDate(dirtyDate);
-  var day = date.getUTCDay();
-  var diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;
-  date.setUTCDate(date.getUTCDate() - diff);
-  date.setUTCHours(0, 0, 0, 0);
-  return date;
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/getUTCWeekYear/index.js
-
-
-
-
-
-function getUTCWeekYear(dirtyDate, options) {
-  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
-  requiredArgs(1, arguments);
-  var date = toDate(dirtyDate);
-  var year = date.getUTCFullYear();
-  var defaultOptions = getDefaultOptions();
-  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);
-
-  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN
-  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {
-    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');
-  }
-  var firstWeekOfNextYear = new Date(0);
-  firstWeekOfNextYear.setUTCFullYear(year + 1, 0, firstWeekContainsDate);
-  firstWeekOfNextYear.setUTCHours(0, 0, 0, 0);
-  var startOfNextYear = startOfUTCWeek(firstWeekOfNextYear, options);
-  var firstWeekOfThisYear = new Date(0);
-  firstWeekOfThisYear.setUTCFullYear(year, 0, firstWeekContainsDate);
-  firstWeekOfThisYear.setUTCHours(0, 0, 0, 0);
-  var startOfThisYear = startOfUTCWeek(firstWeekOfThisYear, options);
-  if (date.getTime() >= startOfNextYear.getTime()) {
-    return year + 1;
-  } else if (date.getTime() >= startOfThisYear.getTime()) {
-    return year;
-  } else {
-    return year - 1;
-  }
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/startOfUTCWeekYear/index.js
-
-
-
-
-
-function startOfUTCWeekYear(dirtyDate, options) {
-  var _ref, _ref2, _ref3, _options$firstWeekCon, _options$locale, _options$locale$optio, _defaultOptions$local, _defaultOptions$local2;
-  requiredArgs(1, arguments);
-  var defaultOptions = getDefaultOptions();
-  var firstWeekContainsDate = toInteger((_ref = (_ref2 = (_ref3 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale = options.locale) === null || _options$locale === void 0 ? void 0 : (_options$locale$optio = _options$locale.options) === null || _options$locale$optio === void 0 ? void 0 : _options$locale$optio.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : defaultOptions.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref !== void 0 ? _ref : 1);
-  var year = getUTCWeekYear(dirtyDate, options);
-  var firstWeek = new Date(0);
-  firstWeek.setUTCFullYear(year, 0, firstWeekContainsDate);
-  firstWeek.setUTCHours(0, 0, 0, 0);
-  var date = startOfUTCWeek(firstWeek, options);
-  return date;
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/getUTCWeek/index.js
-
-
-
-
-var getUTCWeek_MILLISECONDS_IN_WEEK = 604800000;
-function getUTCWeek(dirtyDate, options) {
-  requiredArgs(1, arguments);
-  var date = toDate(dirtyDate);
-  var diff = startOfUTCWeek(date, options).getTime() - startOfUTCWeekYear(date, options).getTime();
-
-  // Round the number of days to the nearest integer
-  // because the number of milliseconds in a week is not constant
-  // (e.g. it's different in the week of the daylight saving time clock shift)
-  return Math.round(diff / getUTCWeek_MILLISECONDS_IN_WEEK) + 1;
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/addLeadingZeros/index.js
-function addLeadingZeros(number, targetLength) {
-  var sign = number < 0 ? '-' : '';
-  var output = Math.abs(number).toString();
-  while (output.length < targetLength) {
-    output = '0' + output;
-  }
-  return sign + output;
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/format/lightFormatters/index.js
-
-/*
- * |     | Unit                           |     | Unit                           |
- * |-----|--------------------------------|-----|--------------------------------|
- * |  a  | AM, PM                         |  A* |                                |
- * |  d  | Day of month                   |  D  |                                |
- * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |
- * |  m  | Minute                         |  M  | Month                          |
- * |  s  | Second                         |  S  | Fraction of second             |
- * |  y  | Year (abs)                     |  Y  |                                |
- *
- * Letters marked by * are not implemented but reserved by Unicode standard.
- */
-var formatters = {
-  // Year
-  y: function y(date, token) {
-    // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens
-    // | Year     |     y | yy |   yyy |  yyyy | yyyyy |
-    // |----------|-------|----|-------|-------|-------|
-    // | AD 1     |     1 | 01 |   001 |  0001 | 00001 |
-    // | AD 12    |    12 | 12 |   012 |  0012 | 00012 |
-    // | AD 123   |   123 | 23 |   123 |  0123 | 00123 |
-    // | AD 1234  |  1234 | 34 |  1234 |  1234 | 01234 |
-    // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |
-
-    var signedYear = date.getUTCFullYear();
-    // Returns 1 for 1 BC (which is year 0 in JavaScript)
-    var year = signedYear > 0 ? signedYear : 1 - signedYear;
-    return addLeadingZeros(token === 'yy' ? year % 100 : year, token.length);
-  },
-  // Month
-  M: function M(date, token) {
-    var month = date.getUTCMonth();
-    return token === 'M' ? String(month + 1) : addLeadingZeros(month + 1, 2);
-  },
-  // Day of the month
-  d: function d(date, token) {
-    return addLeadingZeros(date.getUTCDate(), token.length);
-  },
-  // AM or PM
-  a: function a(date, token) {
-    var dayPeriodEnumValue = date.getUTCHours() / 12 >= 1 ? 'pm' : 'am';
-    switch (token) {
-      case 'a':
-      case 'aa':
-        return dayPeriodEnumValue.toUpperCase();
-      case 'aaa':
-        return dayPeriodEnumValue;
-      case 'aaaaa':
-        return dayPeriodEnumValue[0];
-      case 'aaaa':
-      default:
-        return dayPeriodEnumValue === 'am' ? 'a.m.' : 'p.m.';
-    }
-  },
-  // Hour [1-12]
-  h: function h(date, token) {
-    return addLeadingZeros(date.getUTCHours() % 12 || 12, token.length);
-  },
-  // Hour [0-23]
-  H: function H(date, token) {
-    return addLeadingZeros(date.getUTCHours(), token.length);
-  },
-  // Minute
-  m: function m(date, token) {
-    return addLeadingZeros(date.getUTCMinutes(), token.length);
-  },
-  // Second
-  s: function s(date, token) {
-    return addLeadingZeros(date.getUTCSeconds(), token.length);
-  },
-  // Fraction of second
-  S: function S(date, token) {
-    var numberOfDigits = token.length;
-    var milliseconds = date.getUTCMilliseconds();
-    var fractionalSeconds = Math.floor(milliseconds * Math.pow(10, numberOfDigits - 3));
-    return addLeadingZeros(fractionalSeconds, token.length);
-  }
-};
-/* harmony default export */ const lightFormatters = (formatters);
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/format/formatters/index.js
-
-
-
-
-
-
-
-var dayPeriodEnum = {
-  am: 'am',
-  pm: 'pm',
-  midnight: 'midnight',
-  noon: 'noon',
-  morning: 'morning',
-  afternoon: 'afternoon',
-  evening: 'evening',
-  night: 'night'
-};
-/*
- * |     | Unit                           |     | Unit                           |
- * |-----|--------------------------------|-----|--------------------------------|
- * |  a  | AM, PM                         |  A* | Milliseconds in day            |
- * |  b  | AM, PM, noon, midnight         |  B  | Flexible day period            |
- * |  c  | Stand-alone local day of week  |  C* | Localized hour w/ day period   |
- * |  d  | Day of month                   |  D  | Day of year                    |
- * |  e  | Local day of week              |  E  | Day of week                    |
- * |  f  |                                |  F* | Day of week in month           |
- * |  g* | Modified Julian day            |  G  | Era                            |
- * |  h  | Hour [1-12]                    |  H  | Hour [0-23]                    |
- * |  i! | ISO day of week                |  I! | ISO week of year               |
- * |  j* | Localized hour w/ day period   |  J* | Localized hour w/o day period  |
- * |  k  | Hour [1-24]                    |  K  | Hour [0-11]                    |
- * |  l* | (deprecated)                   |  L  | Stand-alone month              |
- * |  m  | Minute                         |  M  | Month                          |
- * |  n  |                                |  N  |                                |
- * |  o! | Ordinal number modifier        |  O  | Timezone (GMT)                 |
- * |  p! | Long localized time            |  P! | Long localized date            |
- * |  q  | Stand-alone quarter            |  Q  | Quarter                        |
- * |  r* | Related Gregorian year         |  R! | ISO week-numbering year        |
- * |  s  | Second                         |  S  | Fraction of second             |
- * |  t! | Seconds timestamp              |  T! | Milliseconds timestamp         |
- * |  u  | Extended year                  |  U* | Cyclic year                    |
- * |  v* | Timezone (generic non-locat.)  |  V* | Timezone (location)            |
- * |  w  | Local week of year             |  W* | Week of month                  |
- * |  x  | Timezone (ISO-8601 w/o Z)      |  X  | Timezone (ISO-8601)            |
- * |  y  | Year (abs)                     |  Y  | Local week-numbering year      |
- * |  z  | Timezone (specific non-locat.) |  Z* | Timezone (aliases)             |
- *
- * Letters marked by * are not implemented but reserved by Unicode standard.
- *
- * Letters marked by ! are non-standard, but implemented by date-fns:
- * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)
- * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,
- *   i.e. 7 for Sunday, 1 for Monday, etc.
- * - `I` is ISO week of year, as opposed to `w` which is local week of year.
- * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.
- *   `R` is supposed to be used in conjunction with `I` and `i`
- *   for universal ISO week-numbering date, whereas
- *   `Y` is supposed to be used in conjunction with `w` and `e`
- *   for week-numbering date specific to the locale.
- * - `P` is long localized date format
- * - `p` is long localized time format
- */
-
-var formatters_formatters = {
-  // Era
-  G: function G(date, token, localize) {
-    var era = date.getUTCFullYear() > 0 ? 1 : 0;
-    switch (token) {
-      // AD, BC
-      case 'G':
-      case 'GG':
-      case 'GGG':
-        return localize.era(era, {
-          width: 'abbreviated'
-        });
-      // A, B
-      case 'GGGGG':
-        return localize.era(era, {
-          width: 'narrow'
-        });
-      // Anno Domini, Before Christ
-      case 'GGGG':
-      default:
-        return localize.era(era, {
-          width: 'wide'
-        });
-    }
-  },
-  // Year
-  y: function y(date, token, localize) {
-    // Ordinal number
-    if (token === 'yo') {
-      var signedYear = date.getUTCFullYear();
-      // Returns 1 for 1 BC (which is year 0 in JavaScript)
-      var year = signedYear > 0 ? signedYear : 1 - signedYear;
-      return localize.ordinalNumber(year, {
-        unit: 'year'
-      });
-    }
-    return lightFormatters.y(date, token);
-  },
-  // Local week-numbering year
-  Y: function Y(date, token, localize, options) {
-    var signedWeekYear = getUTCWeekYear(date, options);
-    // Returns 1 for 1 BC (which is year 0 in JavaScript)
-    var weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;
-
-    // Two digit year
-    if (token === 'YY') {
-      var twoDigitYear = weekYear % 100;
-      return addLeadingZeros(twoDigitYear, 2);
-    }
-
-    // Ordinal number
-    if (token === 'Yo') {
-      return localize.ordinalNumber(weekYear, {
-        unit: 'year'
-      });
-    }
-
-    // Padding
-    return addLeadingZeros(weekYear, token.length);
-  },
-  // ISO week-numbering year
-  R: function R(date, token) {
-    var isoWeekYear = getUTCISOWeekYear(date);
-
-    // Padding
-    return addLeadingZeros(isoWeekYear, token.length);
-  },
-  // Extended year. This is a single number designating the year of this calendar system.
-  // The main difference between `y` and `u` localizers are B.C. years:
-  // | Year | `y` | `u` |
-  // |------|-----|-----|
-  // | AC 1 |   1 |   1 |
-  // | BC 1 |   1 |   0 |
-  // | BC 2 |   2 |  -1 |
-  // Also `yy` always returns the last two digits of a year,
-  // while `uu` pads single digit years to 2 characters and returns other years unchanged.
-  u: function u(date, token) {
-    var year = date.getUTCFullYear();
-    return addLeadingZeros(year, token.length);
-  },
-  // Quarter
-  Q: function Q(date, token, localize) {
-    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);
-    switch (token) {
-      // 1, 2, 3, 4
-      case 'Q':
-        return String(quarter);
-      // 01, 02, 03, 04
-      case 'QQ':
-        return addLeadingZeros(quarter, 2);
-      // 1st, 2nd, 3rd, 4th
-      case 'Qo':
-        return localize.ordinalNumber(quarter, {
-          unit: 'quarter'
-        });
-      // Q1, Q2, Q3, Q4
-      case 'QQQ':
-        return localize.quarter(quarter, {
-          width: 'abbreviated',
-          context: 'formatting'
-        });
-      // 1, 2, 3, 4 (narrow quarter; could be not numerical)
-      case 'QQQQQ':
-        return localize.quarter(quarter, {
-          width: 'narrow',
-          context: 'formatting'
-        });
-      // 1st quarter, 2nd quarter, ...
-      case 'QQQQ':
-      default:
-        return localize.quarter(quarter, {
-          width: 'wide',
-          context: 'formatting'
-        });
-    }
-  },
-  // Stand-alone quarter
-  q: function q(date, token, localize) {
-    var quarter = Math.ceil((date.getUTCMonth() + 1) / 3);
-    switch (token) {
-      // 1, 2, 3, 4
-      case 'q':
-        return String(quarter);
-      // 01, 02, 03, 04
-      case 'qq':
-        return addLeadingZeros(quarter, 2);
-      // 1st, 2nd, 3rd, 4th
-      case 'qo':
-        return localize.ordinalNumber(quarter, {
-          unit: 'quarter'
-        });
-      // Q1, Q2, Q3, Q4
-      case 'qqq':
-        return localize.quarter(quarter, {
-          width: 'abbreviated',
-          context: 'standalone'
-        });
-      // 1, 2, 3, 4 (narrow quarter; could be not numerical)
-      case 'qqqqq':
-        return localize.quarter(quarter, {
-          width: 'narrow',
-          context: 'standalone'
-        });
-      // 1st quarter, 2nd quarter, ...
-      case 'qqqq':
-      default:
-        return localize.quarter(quarter, {
-          width: 'wide',
-          context: 'standalone'
-        });
-    }
-  },
-  // Month
-  M: function M(date, token, localize) {
-    var month = date.getUTCMonth();
-    switch (token) {
-      case 'M':
-      case 'MM':
-        return lightFormatters.M(date, token);
-      // 1st, 2nd, ..., 12th
-      case 'Mo':
-        return localize.ordinalNumber(month + 1, {
-          unit: 'month'
-        });
-      // Jan, Feb, ..., Dec
-      case 'MMM':
-        return localize.month(month, {
-          width: 'abbreviated',
-          context: 'formatting'
-        });
-      // J, F, ..., D
-      case 'MMMMM':
-        return localize.month(month, {
-          width: 'narrow',
-          context: 'formatting'
-        });
-      // January, February, ..., December
-      case 'MMMM':
-      default:
-        return localize.month(month, {
-          width: 'wide',
-          context: 'formatting'
-        });
-    }
-  },
-  // Stand-alone month
-  L: function L(date, token, localize) {
-    var month = date.getUTCMonth();
-    switch (token) {
-      // 1, 2, ..., 12
-      case 'L':
-        return String(month + 1);
-      // 01, 02, ..., 12
-      case 'LL':
-        return addLeadingZeros(month + 1, 2);
-      // 1st, 2nd, ..., 12th
-      case 'Lo':
-        return localize.ordinalNumber(month + 1, {
-          unit: 'month'
-        });
-      // Jan, Feb, ..., Dec
-      case 'LLL':
-        return localize.month(month, {
-          width: 'abbreviated',
-          context: 'standalone'
-        });
-      // J, F, ..., D
-      case 'LLLLL':
-        return localize.month(month, {
-          width: 'narrow',
-          context: 'standalone'
-        });
-      // January, February, ..., December
-      case 'LLLL':
-      default:
-        return localize.month(month, {
-          width: 'wide',
-          context: 'standalone'
-        });
-    }
-  },
-  // Local week of year
-  w: function w(date, token, localize, options) {
-    var week = getUTCWeek(date, options);
-    if (token === 'wo') {
-      return localize.ordinalNumber(week, {
-        unit: 'week'
-      });
-    }
-    return addLeadingZeros(week, token.length);
-  },
-  // ISO week of year
-  I: function I(date, token, localize) {
-    var isoWeek = getUTCISOWeek(date);
-    if (token === 'Io') {
-      return localize.ordinalNumber(isoWeek, {
-        unit: 'week'
-      });
-    }
-    return addLeadingZeros(isoWeek, token.length);
-  },
-  // Day of the month
-  d: function d(date, token, localize) {
-    if (token === 'do') {
-      return localize.ordinalNumber(date.getUTCDate(), {
-        unit: 'date'
-      });
-    }
-    return lightFormatters.d(date, token);
-  },
-  // Day of year
-  D: function D(date, token, localize) {
-    var dayOfYear = getUTCDayOfYear(date);
-    if (token === 'Do') {
-      return localize.ordinalNumber(dayOfYear, {
-        unit: 'dayOfYear'
-      });
-    }
-    return addLeadingZeros(dayOfYear, token.length);
-  },
-  // Day of week
-  E: function E(date, token, localize) {
-    var dayOfWeek = date.getUTCDay();
-    switch (token) {
-      // Tue
-      case 'E':
-      case 'EE':
-      case 'EEE':
-        return localize.day(dayOfWeek, {
-          width: 'abbreviated',
-          context: 'formatting'
-        });
-      // T
-      case 'EEEEE':
-        return localize.day(dayOfWeek, {
-          width: 'narrow',
-          context: 'formatting'
-        });
-      // Tu
-      case 'EEEEEE':
-        return localize.day(dayOfWeek, {
-          width: 'short',
-          context: 'formatting'
-        });
-      // Tuesday
-      case 'EEEE':
-      default:
-        return localize.day(dayOfWeek, {
-          width: 'wide',
-          context: 'formatting'
-        });
-    }
-  },
-  // Local day of week
-  e: function e(date, token, localize, options) {
-    var dayOfWeek = date.getUTCDay();
-    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
-    switch (token) {
-      // Numerical value (Nth day of week with current locale or weekStartsOn)
-      case 'e':
-        return String(localDayOfWeek);
-      // Padded numerical value
-      case 'ee':
-        return addLeadingZeros(localDayOfWeek, 2);
-      // 1st, 2nd, ..., 7th
-      case 'eo':
-        return localize.ordinalNumber(localDayOfWeek, {
-          unit: 'day'
-        });
-      case 'eee':
-        return localize.day(dayOfWeek, {
-          width: 'abbreviated',
-          context: 'formatting'
-        });
-      // T
-      case 'eeeee':
-        return localize.day(dayOfWeek, {
-          width: 'narrow',
-          context: 'formatting'
-        });
-      // Tu
-      case 'eeeeee':
-        return localize.day(dayOfWeek, {
-          width: 'short',
-          context: 'formatting'
-        });
-      // Tuesday
-      case 'eeee':
-      default:
-        return localize.day(dayOfWeek, {
-          width: 'wide',
-          context: 'formatting'
-        });
-    }
-  },
-  // Stand-alone local day of week
-  c: function c(date, token, localize, options) {
-    var dayOfWeek = date.getUTCDay();
-    var localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;
-    switch (token) {
-      // Numerical value (same as in `e`)
-      case 'c':
-        return String(localDayOfWeek);
-      // Padded numerical value
-      case 'cc':
-        return addLeadingZeros(localDayOfWeek, token.length);
-      // 1st, 2nd, ..., 7th
-      case 'co':
-        return localize.ordinalNumber(localDayOfWeek, {
-          unit: 'day'
-        });
-      case 'ccc':
-        return localize.day(dayOfWeek, {
-          width: 'abbreviated',
-          context: 'standalone'
-        });
-      // T
-      case 'ccccc':
-        return localize.day(dayOfWeek, {
-          width: 'narrow',
-          context: 'standalone'
-        });
-      // Tu
-      case 'cccccc':
-        return localize.day(dayOfWeek, {
-          width: 'short',
-          context: 'standalone'
-        });
-      // Tuesday
-      case 'cccc':
-      default:
-        return localize.day(dayOfWeek, {
-          width: 'wide',
-          context: 'standalone'
-        });
-    }
-  },
-  // ISO day of week
-  i: function i(date, token, localize) {
-    var dayOfWeek = date.getUTCDay();
-    var isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;
-    switch (token) {
-      // 2
-      case 'i':
-        return String(isoDayOfWeek);
-      // 02
-      case 'ii':
-        return addLeadingZeros(isoDayOfWeek, token.length);
-      // 2nd
-      case 'io':
-        return localize.ordinalNumber(isoDayOfWeek, {
-          unit: 'day'
-        });
-      // Tue
-      case 'iii':
-        return localize.day(dayOfWeek, {
-          width: 'abbreviated',
-          context: 'formatting'
-        });
-      // T
-      case 'iiiii':
-        return localize.day(dayOfWeek, {
-          width: 'narrow',
-          context: 'formatting'
-        });
-      // Tu
-      case 'iiiiii':
-        return localize.day(dayOfWeek, {
-          width: 'short',
-          context: 'formatting'
-        });
-      // Tuesday
-      case 'iiii':
-      default:
-        return localize.day(dayOfWeek, {
-          width: 'wide',
-          context: 'formatting'
-        });
-    }
-  },
-  // AM or PM
-  a: function a(date, token, localize) {
-    var hours = date.getUTCHours();
-    var dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';
-    switch (token) {
-      case 'a':
-      case 'aa':
-        return localize.dayPeriod(dayPeriodEnumValue, {
-          width: 'abbreviated',
-          context: 'formatting'
-        });
-      case 'aaa':
-        return localize.dayPeriod(dayPeriodEnumValue, {
-          width: 'abbreviated',
-          context: 'formatting'
-        }).toLowerCase();
-      case 'aaaaa':
-        return localize.dayPeriod(dayPeriodEnumValue, {
-          width: 'narrow',
-          context: 'formatting'
-        });
-      case 'aaaa':
-      default:
-        return localize.dayPeriod(dayPeriodEnumValue, {
-          width: 'wide',
-          context: 'formatting'
-        });
-    }
-  },
-  // AM, PM, midnight, noon
-  b: function b(date, token, localize) {
-    var hours = date.getUTCHours();
-    var dayPeriodEnumValue;
-    if (hours === 12) {
-      dayPeriodEnumValue = dayPeriodEnum.noon;
-    } else if (hours === 0) {
-      dayPeriodEnumValue = dayPeriodEnum.midnight;
-    } else {
-      dayPeriodEnumValue = hours / 12 >= 1 ? 'pm' : 'am';
-    }
-    switch (token) {
-      case 'b':
-      case 'bb':
-        return localize.dayPeriod(dayPeriodEnumValue, {
-          width: 'abbreviated',
-          context: 'formatting'
-        });
-      case 'bbb':
-        return localize.dayPeriod(dayPeriodEnumValue, {
-          width: 'abbreviated',
-          context: 'formatting'
-        }).toLowerCase();
-      case 'bbbbb':
-        return localize.dayPeriod(dayPeriodEnumValue, {
-          width: 'narrow',
-          context: 'formatting'
-        });
-      case 'bbbb':
-      default:
-        return localize.dayPeriod(dayPeriodEnumValue, {
-          width: 'wide',
-          context: 'formatting'
-        });
-    }
-  },
-  // in the morning, in the afternoon, in the evening, at night
-  B: function B(date, token, localize) {
-    var hours = date.getUTCHours();
-    var dayPeriodEnumValue;
-    if (hours >= 17) {
-      dayPeriodEnumValue = dayPeriodEnum.evening;
-    } else if (hours >= 12) {
-      dayPeriodEnumValue = dayPeriodEnum.afternoon;
-    } else if (hours >= 4) {
-      dayPeriodEnumValue = dayPeriodEnum.morning;
-    } else {
-      dayPeriodEnumValue = dayPeriodEnum.night;
-    }
-    switch (token) {
-      case 'B':
-      case 'BB':
-      case 'BBB':
-        return localize.dayPeriod(dayPeriodEnumValue, {
-          width: 'abbreviated',
-          context: 'formatting'
-        });
-      case 'BBBBB':
-        return localize.dayPeriod(dayPeriodEnumValue, {
-          width: 'narrow',
-          context: 'formatting'
-        });
-      case 'BBBB':
-      default:
-        return localize.dayPeriod(dayPeriodEnumValue, {
-          width: 'wide',
-          context: 'formatting'
-        });
-    }
-  },
-  // Hour [1-12]
-  h: function h(date, token, localize) {
-    if (token === 'ho') {
-      var hours = date.getUTCHours() % 12;
-      if (hours === 0) hours = 12;
-      return localize.ordinalNumber(hours, {
-        unit: 'hour'
-      });
-    }
-    return lightFormatters.h(date, token);
-  },
-  // Hour [0-23]
-  H: function H(date, token, localize) {
-    if (token === 'Ho') {
-      return localize.ordinalNumber(date.getUTCHours(), {
-        unit: 'hour'
-      });
-    }
-    return lightFormatters.H(date, token);
-  },
-  // Hour [0-11]
-  K: function K(date, token, localize) {
-    var hours = date.getUTCHours() % 12;
-    if (token === 'Ko') {
-      return localize.ordinalNumber(hours, {
-        unit: 'hour'
-      });
-    }
-    return addLeadingZeros(hours, token.length);
-  },
-  // Hour [1-24]
-  k: function k(date, token, localize) {
-    var hours = date.getUTCHours();
-    if (hours === 0) hours = 24;
-    if (token === 'ko') {
-      return localize.ordinalNumber(hours, {
-        unit: 'hour'
-      });
-    }
-    return addLeadingZeros(hours, token.length);
-  },
-  // Minute
-  m: function m(date, token, localize) {
-    if (token === 'mo') {
-      return localize.ordinalNumber(date.getUTCMinutes(), {
-        unit: 'minute'
-      });
-    }
-    return lightFormatters.m(date, token);
-  },
-  // Second
-  s: function s(date, token, localize) {
-    if (token === 'so') {
-      return localize.ordinalNumber(date.getUTCSeconds(), {
-        unit: 'second'
-      });
-    }
-    return lightFormatters.s(date, token);
-  },
-  // Fraction of second
-  S: function S(date, token) {
-    return lightFormatters.S(date, token);
-  },
-  // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)
-  X: function X(date, token, _localize, options) {
-    var originalDate = options._originalDate || date;
-    var timezoneOffset = originalDate.getTimezoneOffset();
-    if (timezoneOffset === 0) {
-      return 'Z';
-    }
-    switch (token) {
-      // Hours and optional minutes
-      case 'X':
-        return formatTimezoneWithOptionalMinutes(timezoneOffset);
-
-      // Hours, minutes and optional seconds without `:` delimiter
-      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
-      // so this token always has the same output as `XX`
-      case 'XXXX':
-      case 'XX':
-        // Hours and minutes without `:` delimiter
-        return formatTimezone(timezoneOffset);
-
-      // Hours, minutes and optional seconds with `:` delimiter
-      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
-      // so this token always has the same output as `XXX`
-      case 'XXXXX':
-      case 'XXX': // Hours and minutes with `:` delimiter
-      default:
-        return formatTimezone(timezoneOffset, ':');
-    }
-  },
-  // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)
-  x: function x(date, token, _localize, options) {
-    var originalDate = options._originalDate || date;
-    var timezoneOffset = originalDate.getTimezoneOffset();
-    switch (token) {
-      // Hours and optional minutes
-      case 'x':
-        return formatTimezoneWithOptionalMinutes(timezoneOffset);
-
-      // Hours, minutes and optional seconds without `:` delimiter
-      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
-      // so this token always has the same output as `xx`
-      case 'xxxx':
-      case 'xx':
-        // Hours and minutes without `:` delimiter
-        return formatTimezone(timezoneOffset);
-
-      // Hours, minutes and optional seconds with `:` delimiter
-      // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets
-      // so this token always has the same output as `xxx`
-      case 'xxxxx':
-      case 'xxx': // Hours and minutes with `:` delimiter
-      default:
-        return formatTimezone(timezoneOffset, ':');
-    }
-  },
-  // Timezone (GMT)
-  O: function O(date, token, _localize, options) {
-    var originalDate = options._originalDate || date;
-    var timezoneOffset = originalDate.getTimezoneOffset();
-    switch (token) {
-      // Short
-      case 'O':
-      case 'OO':
-      case 'OOO':
-        return 'GMT' + formatTimezoneShort(timezoneOffset, ':');
-      // Long
-      case 'OOOO':
-      default:
-        return 'GMT' + formatTimezone(timezoneOffset, ':');
-    }
-  },
-  // Timezone (specific non-location)
-  z: function z(date, token, _localize, options) {
-    var originalDate = options._originalDate || date;
-    var timezoneOffset = originalDate.getTimezoneOffset();
-    switch (token) {
-      // Short
-      case 'z':
-      case 'zz':
-      case 'zzz':
-        return 'GMT' + formatTimezoneShort(timezoneOffset, ':');
-      // Long
-      case 'zzzz':
-      default:
-        return 'GMT' + formatTimezone(timezoneOffset, ':');
-    }
-  },
-  // Seconds timestamp
-  t: function t(date, token, _localize, options) {
-    var originalDate = options._originalDate || date;
-    var timestamp = Math.floor(originalDate.getTime() / 1000);
-    return addLeadingZeros(timestamp, token.length);
-  },
-  // Milliseconds timestamp
-  T: function T(date, token, _localize, options) {
-    var originalDate = options._originalDate || date;
-    var timestamp = originalDate.getTime();
-    return addLeadingZeros(timestamp, token.length);
-  }
-};
-function formatTimezoneShort(offset, dirtyDelimiter) {
-  var sign = offset > 0 ? '-' : '+';
-  var absOffset = Math.abs(offset);
-  var hours = Math.floor(absOffset / 60);
-  var minutes = absOffset % 60;
-  if (minutes === 0) {
-    return sign + String(hours);
-  }
-  var delimiter = dirtyDelimiter || '';
-  return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);
-}
-function formatTimezoneWithOptionalMinutes(offset, dirtyDelimiter) {
-  if (offset % 60 === 0) {
-    var sign = offset > 0 ? '-' : '+';
-    return sign + addLeadingZeros(Math.abs(offset) / 60, 2);
-  }
-  return formatTimezone(offset, dirtyDelimiter);
-}
-function formatTimezone(offset, dirtyDelimiter) {
-  var delimiter = dirtyDelimiter || '';
-  var sign = offset > 0 ? '-' : '+';
-  var absOffset = Math.abs(offset);
-  var hours = addLeadingZeros(Math.floor(absOffset / 60), 2);
-  var minutes = addLeadingZeros(absOffset % 60, 2);
-  return sign + hours + delimiter + minutes;
-}
-/* harmony default export */ const format_formatters = (formatters_formatters);
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/format/longFormatters/index.js
-var dateLongFormatter = function dateLongFormatter(pattern, formatLong) {
-  switch (pattern) {
-    case 'P':
-      return formatLong.date({
-        width: 'short'
-      });
-    case 'PP':
-      return formatLong.date({
-        width: 'medium'
-      });
-    case 'PPP':
-      return formatLong.date({
-        width: 'long'
-      });
-    case 'PPPP':
-    default:
-      return formatLong.date({
-        width: 'full'
-      });
-  }
-};
-var timeLongFormatter = function timeLongFormatter(pattern, formatLong) {
-  switch (pattern) {
-    case 'p':
-      return formatLong.time({
-        width: 'short'
-      });
-    case 'pp':
-      return formatLong.time({
-        width: 'medium'
-      });
-    case 'ppp':
-      return formatLong.time({
-        width: 'long'
-      });
-    case 'pppp':
-    default:
-      return formatLong.time({
-        width: 'full'
-      });
-  }
-};
-var dateTimeLongFormatter = function dateTimeLongFormatter(pattern, formatLong) {
-  var matchResult = pattern.match(/(P+)(p+)?/) || [];
-  var datePattern = matchResult[1];
-  var timePattern = matchResult[2];
-  if (!timePattern) {
-    return dateLongFormatter(pattern, formatLong);
-  }
-  var dateTimeFormat;
-  switch (datePattern) {
-    case 'P':
-      dateTimeFormat = formatLong.dateTime({
-        width: 'short'
-      });
-      break;
-    case 'PP':
-      dateTimeFormat = formatLong.dateTime({
-        width: 'medium'
-      });
-      break;
-    case 'PPP':
-      dateTimeFormat = formatLong.dateTime({
-        width: 'long'
-      });
-      break;
-    case 'PPPP':
-    default:
-      dateTimeFormat = formatLong.dateTime({
-        width: 'full'
-      });
-      break;
-  }
-  return dateTimeFormat.replace('{{date}}', dateLongFormatter(datePattern, formatLong)).replace('{{time}}', timeLongFormatter(timePattern, formatLong));
-};
-var longFormatters = {
-  p: timeLongFormatter,
-  P: dateTimeLongFormatter
-};
-/* harmony default export */ const format_longFormatters = (longFormatters);
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/getTimezoneOffsetInMilliseconds/index.js
-/**
- * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.
- * They usually appear for dates that denote time before the timezones were introduced
- * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891
- * and GMT+01:00:00 after that date)
- *
- * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,
- * which would lead to incorrect calculations.
- *
- * This function returns the timezone offset in milliseconds that takes seconds in account.
- */
-function getTimezoneOffsetInMilliseconds(date) {
-  var utcDate = new Date(Date.UTC(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds()));
-  utcDate.setUTCFullYear(date.getFullYear());
-  return date.getTime() - utcDate.getTime();
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/protectedTokens/index.js
-var protectedDayOfYearTokens = ['D', 'DD'];
-var protectedWeekYearTokens = ['YY', 'YYYY'];
-function isProtectedDayOfYearToken(token) {
-  return protectedDayOfYearTokens.indexOf(token) !== -1;
-}
-function isProtectedWeekYearToken(token) {
-  return protectedWeekYearTokens.indexOf(token) !== -1;
-}
-function throwProtectedError(token, format, input) {
-  if (token === 'YYYY') {
-    throw new RangeError("Use `yyyy` instead of `YYYY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));
-  } else if (token === 'YY') {
-    throw new RangeError("Use `yy` instead of `YY` (in `".concat(format, "`) for formatting years to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));
-  } else if (token === 'D') {
-    throw new RangeError("Use `d` instead of `D` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));
-  } else if (token === 'DD') {
-    throw new RangeError("Use `dd` instead of `DD` (in `".concat(format, "`) for formatting days of the month to the input `").concat(input, "`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md"));
-  }
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/locale/en-US/_lib/formatDistance/index.js
-var formatDistanceLocale = {
-  lessThanXSeconds: {
-    one: 'less than a second',
-    other: 'less than {{count}} seconds'
-  },
-  xSeconds: {
-    one: '1 second',
-    other: '{{count}} seconds'
-  },
-  halfAMinute: 'half a minute',
-  lessThanXMinutes: {
-    one: 'less than a minute',
-    other: 'less than {{count}} minutes'
-  },
-  xMinutes: {
-    one: '1 minute',
-    other: '{{count}} minutes'
-  },
-  aboutXHours: {
-    one: 'about 1 hour',
-    other: 'about {{count}} hours'
-  },
-  xHours: {
-    one: '1 hour',
-    other: '{{count}} hours'
-  },
-  xDays: {
-    one: '1 day',
-    other: '{{count}} days'
-  },
-  aboutXWeeks: {
-    one: 'about 1 week',
-    other: 'about {{count}} weeks'
-  },
-  xWeeks: {
-    one: '1 week',
-    other: '{{count}} weeks'
-  },
-  aboutXMonths: {
-    one: 'about 1 month',
-    other: 'about {{count}} months'
-  },
-  xMonths: {
-    one: '1 month',
-    other: '{{count}} months'
-  },
-  aboutXYears: {
-    one: 'about 1 year',
-    other: 'about {{count}} years'
-  },
-  xYears: {
-    one: '1 year',
-    other: '{{count}} years'
-  },
-  overXYears: {
-    one: 'over 1 year',
-    other: 'over {{count}} years'
-  },
-  almostXYears: {
-    one: 'almost 1 year',
-    other: 'almost {{count}} years'
-  }
-};
-var formatDistance = function formatDistance(token, count, options) {
-  var result;
-  var tokenValue = formatDistanceLocale[token];
-  if (typeof tokenValue === 'string') {
-    result = tokenValue;
-  } else if (count === 1) {
-    result = tokenValue.one;
-  } else {
-    result = tokenValue.other.replace('{{count}}', count.toString());
-  }
-  if (options !== null && options !== void 0 && options.addSuffix) {
-    if (options.comparison && options.comparison > 0) {
-      return 'in ' + result;
-    } else {
-      return result + ' ago';
-    }
-  }
-  return result;
-};
-/* harmony default export */ const _lib_formatDistance = (formatDistance);
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/locale/_lib/buildFormatLongFn/index.js
-function buildFormatLongFn(args) {
-  return function () {
-    var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
-    // TODO: Remove String()
-    var width = options.width ? String(options.width) : args.defaultWidth;
-    var format = args.formats[width] || args.formats[args.defaultWidth];
-    return format;
-  };
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/locale/en-US/_lib/formatLong/index.js
-
-var dateFormats = {
-  full: 'EEEE, MMMM do, y',
-  long: 'MMMM do, y',
-  medium: 'MMM d, y',
-  short: 'MM/dd/yyyy'
-};
-var timeFormats = {
-  full: 'h:mm:ss a zzzz',
-  long: 'h:mm:ss a z',
-  medium: 'h:mm:ss a',
-  short: 'h:mm a'
-};
-var dateTimeFormats = {
-  full: "{{date}} 'at' {{time}}",
-  long: "{{date}} 'at' {{time}}",
-  medium: '{{date}}, {{time}}',
-  short: '{{date}}, {{time}}'
-};
-var formatLong = {
-  date: buildFormatLongFn({
-    formats: dateFormats,
-    defaultWidth: 'full'
-  }),
-  time: buildFormatLongFn({
-    formats: timeFormats,
-    defaultWidth: 'full'
-  }),
-  dateTime: buildFormatLongFn({
-    formats: dateTimeFormats,
-    defaultWidth: 'full'
-  })
-};
-/* harmony default export */ const _lib_formatLong = (formatLong);
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/locale/en-US/_lib/formatRelative/index.js
-var formatRelativeLocale = {
-  lastWeek: "'last' eeee 'at' p",
-  yesterday: "'yesterday at' p",
-  today: "'today at' p",
-  tomorrow: "'tomorrow at' p",
-  nextWeek: "eeee 'at' p",
-  other: 'P'
-};
-var formatRelative = function formatRelative(token, _date, _baseDate, _options) {
-  return formatRelativeLocale[token];
-};
-/* harmony default export */ const _lib_formatRelative = (formatRelative);
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/locale/_lib/buildLocalizeFn/index.js
-function buildLocalizeFn(args) {
-  return function (dirtyIndex, options) {
-    var context = options !== null && options !== void 0 && options.context ? String(options.context) : 'standalone';
-    var valuesArray;
-    if (context === 'formatting' && args.formattingValues) {
-      var defaultWidth = args.defaultFormattingWidth || args.defaultWidth;
-      var width = options !== null && options !== void 0 && options.width ? String(options.width) : defaultWidth;
-      valuesArray = args.formattingValues[width] || args.formattingValues[defaultWidth];
-    } else {
-      var _defaultWidth = args.defaultWidth;
-      var _width = options !== null && options !== void 0 && options.width ? String(options.width) : args.defaultWidth;
-      valuesArray = args.values[_width] || args.values[_defaultWidth];
-    }
-    var index = args.argumentCallback ? args.argumentCallback(dirtyIndex) : dirtyIndex;
-    // @ts-ignore: For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!
-    return valuesArray[index];
-  };
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/locale/en-US/_lib/localize/index.js
-
-var eraValues = {
-  narrow: ['B', 'A'],
-  abbreviated: ['BC', 'AD'],
-  wide: ['Before Christ', 'Anno Domini']
-};
-var quarterValues = {
-  narrow: ['1', '2', '3', '4'],
-  abbreviated: ['Q1', 'Q2', 'Q3', 'Q4'],
-  wide: ['1st quarter', '2nd quarter', '3rd quarter', '4th quarter']
-};
-
-// Note: in English, the names of days of the week and months are capitalized.
-// If you are making a new locale based on this one, check if the same is true for the language you're working on.
-// Generally, formatted dates should look like they are in the middle of a sentence,
-// e.g. in Spanish language the weekdays and months should be in the lowercase.
-var monthValues = {
-  narrow: ['J', 'F', 'M', 'A', 'M', 'J', 'J', 'A', 'S', 'O', 'N', 'D'],
-  abbreviated: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
-  wide: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
-};
-var dayValues = {
-  narrow: ['S', 'M', 'T', 'W', 'T', 'F', 'S'],
-  short: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],
-  abbreviated: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],
-  wide: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']
-};
-var dayPeriodValues = {
-  narrow: {
-    am: 'a',
-    pm: 'p',
-    midnight: 'mi',
-    noon: 'n',
-    morning: 'morning',
-    afternoon: 'afternoon',
-    evening: 'evening',
-    night: 'night'
-  },
-  abbreviated: {
-    am: 'AM',
-    pm: 'PM',
-    midnight: 'midnight',
-    noon: 'noon',
-    morning: 'morning',
-    afternoon: 'afternoon',
-    evening: 'evening',
-    night: 'night'
-  },
-  wide: {
-    am: 'a.m.',
-    pm: 'p.m.',
-    midnight: 'midnight',
-    noon: 'noon',
-    morning: 'morning',
-    afternoon: 'afternoon',
-    evening: 'evening',
-    night: 'night'
-  }
-};
-var formattingDayPeriodValues = {
-  narrow: {
-    am: 'a',
-    pm: 'p',
-    midnight: 'mi',
-    noon: 'n',
-    morning: 'in the morning',
-    afternoon: 'in the afternoon',
-    evening: 'in the evening',
-    night: 'at night'
-  },
-  abbreviated: {
-    am: 'AM',
-    pm: 'PM',
-    midnight: 'midnight',
-    noon: 'noon',
-    morning: 'in the morning',
-    afternoon: 'in the afternoon',
-    evening: 'in the evening',
-    night: 'at night'
-  },
-  wide: {
-    am: 'a.m.',
-    pm: 'p.m.',
-    midnight: 'midnight',
-    noon: 'noon',
-    morning: 'in the morning',
-    afternoon: 'in the afternoon',
-    evening: 'in the evening',
-    night: 'at night'
-  }
-};
-var ordinalNumber = function ordinalNumber(dirtyNumber, _options) {
-  var number = Number(dirtyNumber);
-
-  // If ordinal numbers depend on context, for example,
-  // if they are different for different grammatical genders,
-  // use `options.unit`.
-  //
-  // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',
-  // 'day', 'hour', 'minute', 'second'.
-
-  var rem100 = number % 100;
-  if (rem100 > 20 || rem100 < 10) {
-    switch (rem100 % 10) {
-      case 1:
-        return number + 'st';
-      case 2:
-        return number + 'nd';
-      case 3:
-        return number + 'rd';
-    }
-  }
-  return number + 'th';
-};
-var localize = {
-  ordinalNumber: ordinalNumber,
-  era: buildLocalizeFn({
-    values: eraValues,
-    defaultWidth: 'wide'
-  }),
-  quarter: buildLocalizeFn({
-    values: quarterValues,
-    defaultWidth: 'wide',
-    argumentCallback: function argumentCallback(quarter) {
-      return quarter - 1;
-    }
-  }),
-  month: buildLocalizeFn({
-    values: monthValues,
-    defaultWidth: 'wide'
-  }),
-  day: buildLocalizeFn({
-    values: dayValues,
-    defaultWidth: 'wide'
-  }),
-  dayPeriod: buildLocalizeFn({
-    values: dayPeriodValues,
-    defaultWidth: 'wide',
-    formattingValues: formattingDayPeriodValues,
-    defaultFormattingWidth: 'wide'
-  })
-};
-/* harmony default export */ const _lib_localize = (localize);
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/locale/_lib/buildMatchFn/index.js
-function buildMatchFn(args) {
-  return function (string) {
-    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-    var width = options.width;
-    var matchPattern = width && args.matchPatterns[width] || args.matchPatterns[args.defaultMatchWidth];
-    var matchResult = string.match(matchPattern);
-    if (!matchResult) {
-      return null;
-    }
-    var matchedString = matchResult[0];
-    var parsePatterns = width && args.parsePatterns[width] || args.parsePatterns[args.defaultParseWidth];
-    var key = Array.isArray(parsePatterns) ? findIndex(parsePatterns, function (pattern) {
-      return pattern.test(matchedString);
-    }) : findKey(parsePatterns, function (pattern) {
-      return pattern.test(matchedString);
-    });
-    var value;
-    value = args.valueCallback ? args.valueCallback(key) : key;
-    value = options.valueCallback ? options.valueCallback(value) : value;
-    var rest = string.slice(matchedString.length);
-    return {
-      value: value,
-      rest: rest
-    };
-  };
-}
-function findKey(object, predicate) {
-  for (var key in object) {
-    if (object.hasOwnProperty(key) && predicate(object[key])) {
-      return key;
-    }
-  }
-  return undefined;
-}
-function findIndex(array, predicate) {
-  for (var key = 0; key < array.length; key++) {
-    if (predicate(array[key])) {
-      return key;
-    }
-  }
-  return undefined;
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/locale/_lib/buildMatchPatternFn/index.js
-function buildMatchPatternFn(args) {
-  return function (string) {
-    var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-    var matchResult = string.match(args.matchPattern);
-    if (!matchResult) return null;
-    var matchedString = matchResult[0];
-    var parseResult = string.match(args.parsePattern);
-    if (!parseResult) return null;
-    var value = args.valueCallback ? args.valueCallback(parseResult[0]) : parseResult[0];
-    value = options.valueCallback ? options.valueCallback(value) : value;
-    var rest = string.slice(matchedString.length);
-    return {
-      value: value,
-      rest: rest
-    };
-  };
-}
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/locale/en-US/_lib/match/index.js
-
-
-var matchOrdinalNumberPattern = /^(\d+)(th|st|nd|rd)?/i;
-var parseOrdinalNumberPattern = /\d+/i;
-var matchEraPatterns = {
-  narrow: /^(b|a)/i,
-  abbreviated: /^(b\.?\s?c\.?|b\.?\s?c\.?\s?e\.?|a\.?\s?d\.?|c\.?\s?e\.?)/i,
-  wide: /^(before christ|before common era|anno domini|common era)/i
-};
-var parseEraPatterns = {
-  any: [/^b/i, /^(a|c)/i]
-};
-var matchQuarterPatterns = {
-  narrow: /^[1234]/i,
-  abbreviated: /^q[1234]/i,
-  wide: /^[1234](th|st|nd|rd)? quarter/i
-};
-var parseQuarterPatterns = {
-  any: [/1/i, /2/i, /3/i, /4/i]
-};
-var matchMonthPatterns = {
-  narrow: /^[jfmasond]/i,
-  abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,
-  wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i
-};
-var parseMonthPatterns = {
-  narrow: [/^j/i, /^f/i, /^m/i, /^a/i, /^m/i, /^j/i, /^j/i, /^a/i, /^s/i, /^o/i, /^n/i, /^d/i],
-  any: [/^ja/i, /^f/i, /^mar/i, /^ap/i, /^may/i, /^jun/i, /^jul/i, /^au/i, /^s/i, /^o/i, /^n/i, /^d/i]
-};
-var matchDayPatterns = {
-  narrow: /^[smtwf]/i,
-  short: /^(su|mo|tu|we|th|fr|sa)/i,
-  abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,
-  wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i
-};
-var parseDayPatterns = {
-  narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],
-  any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i]
-};
-var matchDayPeriodPatterns = {
-  narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,
-  any: /^([ap]\.?\s?m\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i
-};
-var parseDayPeriodPatterns = {
-  any: {
-    am: /^a/i,
-    pm: /^p/i,
-    midnight: /^mi/i,
-    noon: /^no/i,
-    morning: /morning/i,
-    afternoon: /afternoon/i,
-    evening: /evening/i,
-    night: /night/i
-  }
-};
-var match = {
-  ordinalNumber: buildMatchPatternFn({
-    matchPattern: matchOrdinalNumberPattern,
-    parsePattern: parseOrdinalNumberPattern,
-    valueCallback: function valueCallback(value) {
-      return parseInt(value, 10);
-    }
-  }),
-  era: buildMatchFn({
-    matchPatterns: matchEraPatterns,
-    defaultMatchWidth: 'wide',
-    parsePatterns: parseEraPatterns,
-    defaultParseWidth: 'any'
-  }),
-  quarter: buildMatchFn({
-    matchPatterns: matchQuarterPatterns,
-    defaultMatchWidth: 'wide',
-    parsePatterns: parseQuarterPatterns,
-    defaultParseWidth: 'any',
-    valueCallback: function valueCallback(index) {
-      return index + 1;
-    }
-  }),
-  month: buildMatchFn({
-    matchPatterns: matchMonthPatterns,
-    defaultMatchWidth: 'wide',
-    parsePatterns: parseMonthPatterns,
-    defaultParseWidth: 'any'
-  }),
-  day: buildMatchFn({
-    matchPatterns: matchDayPatterns,
-    defaultMatchWidth: 'wide',
-    parsePatterns: parseDayPatterns,
-    defaultParseWidth: 'any'
-  }),
-  dayPeriod: buildMatchFn({
-    matchPatterns: matchDayPeriodPatterns,
-    defaultMatchWidth: 'any',
-    parsePatterns: parseDayPeriodPatterns,
-    defaultParseWidth: 'any'
-  })
-};
-/* harmony default export */ const _lib_match = (match);
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/locale/en-US/index.js
-
-
-
-
-
-/**
- * @type {Locale}
- * @category Locales
- * @summary English locale (United States).
- * @language English
- * @iso-639-2 eng
- * @author Sasha Koss [@kossnocorp]{@link https://github.com/kossnocorp}
- * @author Lesha Koss [@leshakoss]{@link https://github.com/leshakoss}
- */
-var locale = {
-  code: 'en-US',
-  formatDistance: _lib_formatDistance,
-  formatLong: _lib_formatLong,
-  formatRelative: _lib_formatRelative,
-  localize: _lib_localize,
-  match: _lib_match,
-  options: {
-    weekStartsOn: 0 /* Sunday */,
-    firstWeekContainsDate: 1
-  }
-};
-/* harmony default export */ const en_US = (locale);
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/_lib/defaultLocale/index.js
-
-/* harmony default export */ const defaultLocale = (en_US);
-;// CONCATENATED MODULE: ./node_modules/date-fns/esm/format/index.js
-
-
-
-
-
-
-
-
-
-
- // This RegExp consists of three parts separated by `|`:
-// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token
-//   (one of the certain letters followed by `o`)
-// - (\w)\1* matches any sequences of the same letter
-// - '' matches two quote characters in a row
-// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),
-//   except a single quote symbol, which ends the sequence.
-//   Two quote characters do not end the sequence.
-//   If there is no matching single quote
-//   then the sequence will continue until the end of the string.
-// - . matches any single character unmatched by previous parts of the RegExps
-var formattingTokensRegExp = /[yYQqMLwIdDecihHKkms]o|(\w)\1*|''|'(''|[^'])+('|$)|./g;
-
-// This RegExp catches symbols escaped by quotes, and also
-// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`
-var longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;
-var escapedStringRegExp = /^'([^]*?)'?$/;
-var doubleQuoteRegExp = /''/g;
-var unescapedLatinCharacterRegExp = /[a-zA-Z]/;
-
-/**
- * @name format
- * @category Common Helpers
- * @summary Format the date.
- *
- * @description
- * Return the formatted date string in the given format. The result may vary by locale.
- *
- * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.
- * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
- *
- * The characters wrapped between two single quotes characters (') are escaped.
- * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.
- * (see the last example)
- *
- * Format of the string is based on Unicode Technical Standard #35:
- * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table
- * with a few additions (see note 7 below the table).
- *
- * Accepted patterns:
- * | Unit                            | Pattern | Result examples                   | Notes |
- * |---------------------------------|---------|-----------------------------------|-------|
- * | Era                             | G..GGG  | AD, BC                            |       |
- * |                                 | GGGG    | Anno Domini, Before Christ        | 2     |
- * |                                 | GGGGG   | A, B                              |       |
- * | Calendar year                   | y       | 44, 1, 1900, 2017                 | 5     |
- * |                                 | yo      | 44th, 1st, 0th, 17th              | 5,7   |
- * |                                 | yy      | 44, 01, 00, 17                    | 5     |
- * |                                 | yyy     | 044, 001, 1900, 2017              | 5     |
- * |                                 | yyyy    | 0044, 0001, 1900, 2017            | 5     |
- * |                                 | yyyyy   | ...                               | 3,5   |
- * | Local week-numbering year       | Y       | 44, 1, 1900, 2017                 | 5     |
- * |                                 | Yo      | 44th, 1st, 1900th, 2017th         | 5,7   |
- * |                                 | YY      | 44, 01, 00, 17                    | 5,8   |
- * |                                 | YYY     | 044, 001, 1900, 2017              | 5     |
- * |                                 | YYYY    | 0044, 0001, 1900, 2017            | 5,8   |
- * |                                 | YYYYY   | ...                               | 3,5   |
- * | ISO week-numbering year         | R       | -43, 0, 1, 1900, 2017             | 5,7   |
- * |                                 | RR      | -43, 00, 01, 1900, 2017           | 5,7   |
- * |                                 | RRR     | -043, 000, 001, 1900, 2017        | 5,7   |
- * |                                 | RRRR    | -0043, 0000, 0001, 1900, 2017     | 5,7   |
- * |                                 | RRRRR   | ...                               | 3,5,7 |
- * | Extended year                   | u       | -43, 0, 1, 1900, 2017             | 5     |
- * |                                 | uu      | -43, 01, 1900, 2017               | 5     |
- * |                                 | uuu     | -043, 001, 1900, 2017             | 5     |
- * |                                 | uuuu    | -0043, 0001, 1900, 2017           | 5     |
- * |                                 | uuuuu   | ...                               | 3,5   |
- * | Quarter (formatting)            | Q       | 1, 2, 3, 4                        |       |
- * |                                 | Qo      | 1st, 2nd, 3rd, 4th                | 7     |
- * |                                 | QQ      | 01, 02, 03, 04                    |       |
- * |                                 | QQQ     | Q1, Q2, Q3, Q4                    |       |
- * |                                 | QQQQ    | 1st quarter, 2nd quarter, ...     | 2     |
- * |                                 | QQQQQ   | 1, 2, 3, 4                        | 4     |
- * | Quarter (stand-alone)           | q       | 1, 2, 3, 4                        |       |
- * |                                 | qo      | 1st, 2nd, 3rd, 4th                | 7     |
- * |                                 | qq      | 01, 02, 03, 04                    |       |
- * |                                 | qqq     | Q1, Q2, Q3, Q4                    |       |
- * |                                 | qqqq    | 1st quarter, 2nd quarter, ...     | 2     |
- * |                                 | qqqqq   | 1, 2, 3, 4                        | 4     |
- * | Month (formatting)              | M       | 1, 2, ..., 12                     |       |
- * |                                 | Mo      | 1st, 2nd, ..., 12th               | 7     |
- * |                                 | MM      | 01, 02, ..., 12                   |       |
- * |                                 | MMM     | Jan, Feb, ..., Dec                |       |
- * |                                 | MMMM    | January, February, ..., December  | 2     |
- * |                                 | MMMMM   | J, F, ..., D                      |       |
- * | Month (stand-alone)             | L       | 1, 2, ..., 12                     |       |
- * |                                 | Lo      | 1st, 2nd, ..., 12th               | 7     |
- * |                                 | LL      | 01, 02, ..., 12                   |       |
- * |                                 | LLL     | Jan, Feb, ..., Dec                |       |
- * |                                 | LLLL    | January, February, ..., December  | 2     |
- * |                                 | LLLLL   | J, F, ..., D                      |       |
- * | Local week of year              | w       | 1, 2, ..., 53                     |       |
- * |                                 | wo      | 1st, 2nd, ..., 53th               | 7     |
- * |                                 | ww      | 01, 02, ..., 53                   |       |
- * | ISO week of year                | I       | 1, 2, ..., 53                     | 7     |
- * |                                 | Io      | 1st, 2nd, ..., 53th               | 7     |
- * |                                 | II      | 01, 02, ..., 53                   | 7     |
- * | Day of month                    | d       | 1, 2, ..., 31                     |       |
- * |                                 | do      | 1st, 2nd, ..., 31st               | 7     |
- * |                                 | dd      | 01, 02, ..., 31                   |       |
- * | Day of year                     | D       | 1, 2, ..., 365, 366               | 9     |
- * |                                 | Do      | 1st, 2nd, ..., 365th, 366th       | 7     |
- * |                                 | DD      | 01, 02, ..., 365, 366             | 9     |
- * |                                 | DDD     | 001, 002, ..., 365, 366           |       |
- * |                                 | DDDD    | ...                               | 3     |
- * | Day of week (formatting)        | E..EEE  | Mon, Tue, Wed, ..., Sun           |       |
- * |                                 | EEEE    | Monday, Tuesday, ..., Sunday      | 2     |
- * |                                 | EEEEE   | M, T, W, T, F, S, S               |       |
- * |                                 | EEEEEE  | Mo, Tu, We, Th, Fr, Sa, Su        |       |
- * | ISO day of week (formatting)    | i       | 1, 2, 3, ..., 7                   | 7     |
- * |                                 | io      | 1st, 2nd, ..., 7th                | 7     |
- * |                                 | ii      | 01, 02, ..., 07                   | 7     |
- * |                                 | iii     | Mon, Tue, Wed, ..., Sun           | 7     |
- * |                                 | iiii    | Monday, Tuesday, ..., Sunday      | 2,7   |
- * |                                 | iiiii   | M, T, W, T, F, S, S               | 7     |
- * |                                 | iiiiii  | Mo, Tu, We, Th, Fr, Sa, Su        | 7     |
- * | Local day of week (formatting)  | e       | 2, 3, 4, ..., 1                   |       |
- * |                                 | eo      | 2nd, 3rd, ..., 1st                | 7     |
- * |                                 | ee      | 02, 03, ..., 01                   |       |
- * |                                 | eee     | Mon, Tue, Wed, ..., Sun           |       |
- * |                                 | eeee    | Monday, Tuesday, ..., Sunday      | 2     |
- * |                                 | eeeee   | M, T, W, T, F, S, S               |       |
- * |                                 | eeeeee  | Mo, Tu, We, Th, Fr, Sa, Su        |       |
- * | Local day of week (stand-alone) | c       | 2, 3, 4, ..., 1                   |       |
- * |                                 | co      | 2nd, 3rd, ..., 1st                | 7     |
- * |                                 | cc      | 02, 03, ..., 01                   |       |
- * |                                 | ccc     | Mon, Tue, Wed, ..., Sun           |       |
- * |                                 | cccc    | Monday, Tuesday, ..., Sunday      | 2     |
- * |                                 | ccccc   | M, T, W, T, F, S, S               |       |
- * |                                 | cccccc  | Mo, Tu, We, Th, Fr, Sa, Su        |       |
- * | AM, PM                          | a..aa   | AM, PM                            |       |
- * |                                 | aaa     | am, pm                            |       |
- * |                                 | aaaa    | a.m., p.m.                        | 2     |
- * |                                 | aaaaa   | a, p                              |       |
- * | AM, PM, noon, midnight          | b..bb   | AM, PM, noon, midnight            |       |
- * |                                 | bbb     | am, pm, noon, midnight            |       |
- * |                                 | bbbb    | a.m., p.m., noon, midnight        | 2     |
- * |                                 | bbbbb   | a, p, n, mi                       |       |
- * | Flexible day period             | B..BBB  | at night, in the morning, ...     |       |
- * |                                 | BBBB    | at night, in the morning, ...     | 2     |
- * |                                 | BBBBB   | at night, in the morning, ...     |       |
- * | Hour [1-12]                     | h       | 1, 2, ..., 11, 12                 |       |
- * |                                 | ho      | 1st, 2nd, ..., 11th, 12th         | 7     |
- * |                                 | hh      | 01, 02, ..., 11, 12               |       |
- * | Hour [0-23]                     | H       | 0, 1, 2, ..., 23                  |       |
- * |                                 | Ho      | 0th, 1st, 2nd, ..., 23rd          | 7     |
- * |                                 | HH      | 00, 01, 02, ..., 23               |       |
- * | Hour [0-11]                     | K       | 1, 2, ..., 11, 0                  |       |
- * |                                 | Ko      | 1st, 2nd, ..., 11th, 0th          | 7     |
- * |                                 | KK      | 01, 02, ..., 11, 00               |       |
- * | Hour [1-24]                     | k       | 24, 1, 2, ..., 23                 |       |
- * |                                 | ko      | 24th, 1st, 2nd, ..., 23rd         | 7     |
- * |                                 | kk      | 24, 01, 02, ..., 23               |       |
- * | Minute                          | m       | 0, 1, ..., 59                     |       |
- * |                                 | mo      | 0th, 1st, ..., 59th               | 7     |
- * |                                 | mm      | 00, 01, ..., 59                   |       |
- * | Second                          | s       | 0, 1, ..., 59                     |       |
- * |                                 | so      | 0th, 1st, ..., 59th               | 7     |
- * |                                 | ss      | 00, 01, ..., 59                   |       |
- * | Fraction of second              | S       | 0, 1, ..., 9                      |       |
- * |                                 | SS      | 00, 01, ..., 99                   |       |
- * |                                 | SSS     | 000, 001, ..., 999                |       |
- * |                                 | SSSS    | ...                               | 3     |
- * | Timezone (ISO-8601 w/ Z)        | X       | -08, +0530, Z                     |       |
- * |                                 | XX      | -0800, +0530, Z                   |       |
- * |                                 | XXX     | -08:00, +05:30, Z                 |       |
- * |                                 | XXXX    | -0800, +0530, Z, +123456          | 2     |
- * |                                 | XXXXX   | -08:00, +05:30, Z, +12:34:56      |       |
- * | Timezone (ISO-8601 w/o Z)       | x       | -08, +0530, +00                   |       |
- * |                                 | xx      | -0800, +0530, +0000               |       |
- * |                                 | xxx     | -08:00, +05:30, +00:00            | 2     |
- * |                                 | xxxx    | -0800, +0530, +0000, +123456      |       |
- * |                                 | xxxxx   | -08:00, +05:30, +00:00, +12:34:56 |       |
- * | Timezone (GMT)                  | O...OOO | GMT-8, GMT+5:30, GMT+0            |       |
- * |                                 | OOOO    | GMT-08:00, GMT+05:30, GMT+00:00   | 2     |
- * | Timezone (specific non-locat.)  | z...zzz | GMT-8, GMT+5:30, GMT+0            | 6     |
- * |                                 | zzzz    | GMT-08:00, GMT+05:30, GMT+00:00   | 2,6   |
- * | Seconds timestamp               | t       | 512969520                         | 7     |
- * |                                 | tt      | ...                               | 3,7   |
- * | Milliseconds timestamp          | T       | 512969520900                      | 7     |
- * |                                 | TT      | ...                               | 3,7   |
- * | Long localized date             | P       | 04/29/1453                        | 7     |
- * |                                 | PP      | Apr 29, 1453                      | 7     |
- * |                                 | PPP     | April 29th, 1453                  | 7     |
- * |                                 | PPPP    | Friday, April 29th, 1453          | 2,7   |
- * | Long localized time             | p       | 12:00 AM                          | 7     |
- * |                                 | pp      | 12:00:00 AM                       | 7     |
- * |                                 | ppp     | 12:00:00 AM GMT+2                 | 7     |
- * |                                 | pppp    | 12:00:00 AM GMT+02:00             | 2,7   |
- * | Combination of date and time    | Pp      | 04/29/1453, 12:00 AM              | 7     |
- * |                                 | PPpp    | Apr 29, 1453, 12:00:00 AM         | 7     |
- * |                                 | PPPppp  | April 29th, 1453 at ...           | 7     |
- * |                                 | PPPPpppp| Friday, April 29th, 1453 at ...   | 2,7   |
- * Notes:
- * 1. "Formatting" units (e.g. formatting quarter) in the default en-US locale
- *    are the same as "stand-alone" units, but are different in some languages.
- *    "Formatting" units are declined according to the rules of the language
- *    in the context of a date. "Stand-alone" units are always nominative singular:
- *
- *    `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`
- *
- *    `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`
- *
- * 2. Any sequence of the identical letters is a pattern, unless it is escaped by
- *    the single quote characters (see below).
- *    If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)
- *    the output will be the same as default pattern for this unit, usually
- *    the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units
- *    are marked with "2" in the last column of the table.
- *
- *    `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`
- *
- *    `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`
- *
- *    `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`
- *
- *    `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`
- *
- *    `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`
- *
- * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).
- *    The output will be padded with zeros to match the length of the pattern.
- *
- *    `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`
- *
- * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.
- *    These tokens represent the shortest form of the quarter.
- *
- * 5. The main difference between `y` and `u` patterns are B.C. years:
- *
- *    | Year | `y` | `u` |
- *    |------|-----|-----|
- *    | AC 1 |   1 |   1 |
- *    | BC 1 |   1 |   0 |
- *    | BC 2 |   2 |  -1 |
- *
- *    Also `yy` always returns the last two digits of a year,
- *    while `uu` pads single digit years to 2 characters and returns other years unchanged:
- *
- *    | Year | `yy` | `uu` |
- *    |------|------|------|
- *    | 1    |   01 |   01 |
- *    | 14   |   14 |   14 |
- *    | 376  |   76 |  376 |
- *    | 1453 |   53 | 1453 |
- *
- *    The same difference is true for local and ISO week-numbering years (`Y` and `R`),
- *    except local week-numbering years are dependent on `options.weekStartsOn`
- *    and `options.firstWeekContainsDate` (compare [getISOWeekYear]{@link https://date-fns.org/docs/getISOWeekYear}
- *    and [getWeekYear]{@link https://date-fns.org/docs/getWeekYear}).
- *
- * 6. Specific non-location timezones are currently unavailable in `date-fns`,
- *    so right now these tokens fall back to GMT timezones.
- *
- * 7. These patterns are not in the Unicode Technical Standard #35:
- *    - `i`: ISO day of week
- *    - `I`: ISO week of year
- *    - `R`: ISO week-numbering year
- *    - `t`: seconds timestamp
- *    - `T`: milliseconds timestamp
- *    - `o`: ordinal number modifier
- *    - `P`: long localized date
- *    - `p`: long localized time
- *
- * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.
- *    You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
- *
- * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.
- *    You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
- *
- * @param {Date|Number} date - the original date
- * @param {String} format - the string of tokens
- * @param {Object} [options] - an object with options.
- * @param {Locale} [options.locale=defaultLocale] - the locale object. See [Locale]{@link https://date-fns.org/docs/Locale}
- * @param {0|1|2|3|4|5|6} [options.weekStartsOn=0] - the index of the first day of the week (0 - Sunday)
- * @param {Number} [options.firstWeekContainsDate=1] - the day of January, which is
- * @param {Boolean} [options.useAdditionalWeekYearTokens=false] - if true, allows usage of the week-numbering year tokens `YY` and `YYYY`;
- *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
- * @param {Boolean} [options.useAdditionalDayOfYearTokens=false] - if true, allows usage of the day of year tokens `D` and `DD`;
- *   see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
- * @returns {String} the formatted date string
- * @throws {TypeError} 2 arguments required
- * @throws {RangeError} `date` must not be Invalid Date
- * @throws {RangeError} `options.locale` must contain `localize` property
- * @throws {RangeError} `options.locale` must contain `formatLong` property
- * @throws {RangeError} `options.weekStartsOn` must be between 0 and 6
- * @throws {RangeError} `options.firstWeekContainsDate` must be between 1 and 7
- * @throws {RangeError} use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
- * @throws {RangeError} use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
- * @throws {RangeError} use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
- * @throws {RangeError} use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md
- * @throws {RangeError} format string contains an unescaped latin alphabet character
- *
- * @example
- * // Represent 11 February 2014 in middle-endian format:
- * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')
- * //=> '02/11/2014'
- *
- * @example
- * // Represent 2 July 2014 in Esperanto:
- * import { eoLocale } from 'date-fns/locale/eo'
- * const result = format(new Date(2014, 6, 2), "do 'de' MMMM yyyy", {
- *   locale: eoLocale
- * })
- * //=> '2-a de julio 2014'
- *
- * @example
- * // Escape string by single quote characters:
- * const result = format(new Date(2014, 6, 2, 15), "h 'o''clock'")
- * //=> "3 o'clock"
- */
-
-function format(dirtyDate, dirtyFormatStr, options) {
-  var _ref, _options$locale, _ref2, _ref3, _ref4, _options$firstWeekCon, _options$locale2, _options$locale2$opti, _defaultOptions$local, _defaultOptions$local2, _ref5, _ref6, _ref7, _options$weekStartsOn, _options$locale3, _options$locale3$opti, _defaultOptions$local3, _defaultOptions$local4;
-  requiredArgs(2, arguments);
-  var formatStr = String(dirtyFormatStr);
-  var defaultOptions = getDefaultOptions();
-  var locale = (_ref = (_options$locale = options === null || options === void 0 ? void 0 : options.locale) !== null && _options$locale !== void 0 ? _options$locale : defaultOptions.locale) !== null && _ref !== void 0 ? _ref : defaultLocale;
-  var firstWeekContainsDate = toInteger((_ref2 = (_ref3 = (_ref4 = (_options$firstWeekCon = options === null || options === void 0 ? void 0 : options.firstWeekContainsDate) !== null && _options$firstWeekCon !== void 0 ? _options$firstWeekCon : options === null || options === void 0 ? void 0 : (_options$locale2 = options.locale) === null || _options$locale2 === void 0 ? void 0 : (_options$locale2$opti = _options$locale2.options) === null || _options$locale2$opti === void 0 ? void 0 : _options$locale2$opti.firstWeekContainsDate) !== null && _ref4 !== void 0 ? _ref4 : defaultOptions.firstWeekContainsDate) !== null && _ref3 !== void 0 ? _ref3 : (_defaultOptions$local = defaultOptions.locale) === null || _defaultOptions$local === void 0 ? void 0 : (_defaultOptions$local2 = _defaultOptions$local.options) === null || _defaultOptions$local2 === void 0 ? void 0 : _defaultOptions$local2.firstWeekContainsDate) !== null && _ref2 !== void 0 ? _ref2 : 1);
-
-  // Test if weekStartsOn is between 1 and 7 _and_ is not NaN
-  if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {
-    throw new RangeError('firstWeekContainsDate must be between 1 and 7 inclusively');
-  }
-  var weekStartsOn = toInteger((_ref5 = (_ref6 = (_ref7 = (_options$weekStartsOn = options === null || options === void 0 ? void 0 : options.weekStartsOn) !== null && _options$weekStartsOn !== void 0 ? _options$weekStartsOn : options === null || options === void 0 ? void 0 : (_options$locale3 = options.locale) === null || _options$locale3 === void 0 ? void 0 : (_options$locale3$opti = _options$locale3.options) === null || _options$locale3$opti === void 0 ? void 0 : _options$locale3$opti.weekStartsOn) !== null && _ref7 !== void 0 ? _ref7 : defaultOptions.weekStartsOn) !== null && _ref6 !== void 0 ? _ref6 : (_defaultOptions$local3 = defaultOptions.locale) === null || _defaultOptions$local3 === void 0 ? void 0 : (_defaultOptions$local4 = _defaultOptions$local3.options) === null || _defaultOptions$local4 === void 0 ? void 0 : _defaultOptions$local4.weekStartsOn) !== null && _ref5 !== void 0 ? _ref5 : 0);
-
-  // Test if weekStartsOn is between 0 and 6 _and_ is not NaN
-  if (!(weekStartsOn >= 0 && weekStartsOn <= 6)) {
-    throw new RangeError('weekStartsOn must be between 0 and 6 inclusively');
-  }
-  if (!locale.localize) {
-    throw new RangeError('locale must contain localize property');
-  }
-  if (!locale.formatLong) {
-    throw new RangeError('locale must contain formatLong property');
-  }
-  var originalDate = toDate(dirtyDate);
-  if (!isValid(originalDate)) {
-    throw new RangeError('Invalid time value');
-  }
-
-  // Convert the date in system timezone to the same date in UTC+00:00 timezone.
-  // This ensures that when UTC functions will be implemented, locales will be compatible with them.
-  // See an issue about UTC functions: https://github.com/date-fns/date-fns/issues/376
-  var timezoneOffset = getTimezoneOffsetInMilliseconds(originalDate);
-  var utcDate = subMilliseconds(originalDate, timezoneOffset);
-  var formatterOptions = {
-    firstWeekContainsDate: firstWeekContainsDate,
-    weekStartsOn: weekStartsOn,
-    locale: locale,
-    _originalDate: originalDate
-  };
-  var result = formatStr.match(longFormattingTokensRegExp).map(function (substring) {
-    var firstCharacter = substring[0];
-    if (firstCharacter === 'p' || firstCharacter === 'P') {
-      var longFormatter = format_longFormatters[firstCharacter];
-      return longFormatter(substring, locale.formatLong);
-    }
-    return substring;
-  }).join('').match(formattingTokensRegExp).map(function (substring) {
-    // Replace two single quote characters with one single quote character
-    if (substring === "''") {
-      return "'";
-    }
-    var firstCharacter = substring[0];
-    if (firstCharacter === "'") {
-      return cleanEscapedString(substring);
-    }
-    var formatter = format_formatters[firstCharacter];
-    if (formatter) {
-      if (!(options !== null && options !== void 0 && options.useAdditionalWeekYearTokens) && isProtectedWeekYearToken(substring)) {
-        throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));
-      }
-      if (!(options !== null && options !== void 0 && options.useAdditionalDayOfYearTokens) && isProtectedDayOfYearToken(substring)) {
-        throwProtectedError(substring, dirtyFormatStr, String(dirtyDate));
-      }
-      return formatter(utcDate, substring, locale.localize, formatterOptions);
-    }
-    if (firstCharacter.match(unescapedLatinCharacterRegExp)) {
-      throw new RangeError('Format string contains an unescaped latin alphabet character `' + firstCharacter + '`');
-    }
-    return substring;
-  }).join('');
-  return result;
-}
-function cleanEscapedString(input) {
-  var matched = input.match(escapedStringRegExp);
-  if (!matched) {
-    return input;
-  }
-  return matched[1].replace(doubleQuoteRegExp, "'");
-}
-
-/***/ }),
-
-/***/ 27484:
-/***/ (function(module) {
-
-!function(t,e){ true?module.exports=e():0}(this,(function(){"use strict";var t=1e3,e=6e4,n=36e5,r="millisecond",i="second",s="minute",u="hour",a="day",o="week",f="month",h="quarter",c="year",d="date",l="Invalid Date",$=/^(\d{4})[-/]?(\d{1,2})?[-/]?(\d{0,2})[Tt\s]*(\d{1,2})?:?(\d{1,2})?:?(\d{1,2})?[.:]?(\d+)?$/,y=/\[([^\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:"en",weekdays:"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday".split("_"),months:"January_February_March_April_May_June_July_August_September_October_November_December".split("_"),ordinal:function(t){var e=["th","st","nd","rd"],n=t%100;return"["+t+(e[(n-20)%10]||e[n]||e[0])+"]"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:""+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?"+":"-")+m(r,2,"0")+":"+m(i,2,"0")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,f),s=n-i<0,u=e.clone().add(r+(s?-1:1),f);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:f,y:c,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:h}[t]||String(t||"").toLowerCase().replace(/s$/,"")},u:function(t){return void 0===t}},g="en",D={};D[g]=M;var p=function(t){return t instanceof _},S=function t(e,n,r){var i;if(!e)return g;if("string"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split("-");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},w=function(t,e){if(p(t))return t.clone();var n="object"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},O=v;O.l=S,O.i=p,O.w=function(t,e){return w(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=S(t.locale,null,!0),this.parse(t)}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(O.u(e))return new Date;if(e instanceof Date)return new Date(e);if("string"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||"0").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.$x=t.x||{},this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return O},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=w(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return w(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<w(t)},m.$g=function(t,e,n){return O.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!O.u(e)||e,h=O.p(t),l=function(t,e){var i=O.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return O.w(n.toDate()[t].apply(n.toDate("s"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v="set"+(this.$u?"UTC":"");switch(h){case c:return r?l(1,0):l(31,11);case f:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+"Hours",0);case u:return $(v+"Minutes",1);case s:return $(v+"Seconds",2);case i:return $(v+"Milliseconds",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=O.p(t),h="set"+(this.$u?"UTC":""),l=(n={},n[a]=h+"Date",n[d]=h+"Date",n[f]=h+"Month",n[c]=h+"FullYear",n[u]=h+"Hours",n[s]=h+"Minutes",n[i]=h+"Seconds",n[r]=h+"Milliseconds",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===f||o===c){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[O.p(t)]()},m.add=function(r,h){var d,l=this;r=Number(r);var $=O.p(h),y=function(t){var e=w(l);return O.w(e.date(e.date()+Math.round(t*r)),l)};if($===f)return this.set(f,this.$M+r);if($===c)return this.set(c,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return O.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||"YYYY-MM-DDTHH:mm:ssZ",i=O.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,f=n.months,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},c=function(t){return O.s(s%12||12,t,"0")},d=n.meridiem||function(t,e,n){var r=t<12?"AM":"PM";return n?r.toLowerCase():r},$={YY:String(this.$y).slice(-2),YYYY:this.$y,M:a+1,MM:O.s(a+1,2,"0"),MMM:h(n.monthsShort,a,f,3),MMMM:h(f,a),D:this.$D,DD:O.s(this.$D,2,"0"),d:String(this.$W),dd:h(n.weekdaysMin,this.$W,o,2),ddd:h(n.weekdaysShort,this.$W,o,3),dddd:o[this.$W],H:String(s),HH:O.s(s,2,"0"),h:c(1),hh:c(2),a:d(s,u,!0),A:d(s,u,!1),m:String(u),mm:O.s(u,2,"0"),s:String(this.$s),ss:O.s(this.$s,2,"0"),SSS:O.s(this.$ms,3,"0"),Z:i};return r.replace(y,(function(t,e){return e||$[t]||i.replace(":","")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=O.p(d),M=w(r),m=(M.utcOffset()-this.utcOffset())*e,v=this-M,g=O.m(this,M);return g=($={},$[c]=g/12,$[f]=g,$[h]=g/3,$[o]=(v-m)/6048e5,$[a]=(v-m)/864e5,$[u]=v/n,$[s]=v/e,$[i]=v/t,$)[y]||v,l?g:O.a(g)},m.daysInMonth=function(){return this.endOf(f).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=S(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return O.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),T=_.prototype;return w.prototype=T,[["$ms",r],["$s",i],["$m",s],["$H",u],["$W",a],["$M",f],["$y",c],["$D",d]].forEach((function(t){T[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),w.extend=function(t,e){return t.$i||(t(e,_,w),t.$i=!0),w},w.locale=S,w.isDayjs=p,w.unix=function(t){return w(1e3*t)},w.en=D[g],w.Ls=D,w.p={},w}));
-
-/***/ }),
-
-/***/ 28734:
-/***/ (function(module) {
-
-!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";return function(e,t){var r=t.prototype,n=r.format;r.format=function(e){var t=this,r=this.$locale();if(!this.isValid())return n.bind(this)(e);var s=this.$utils(),a=(e||"YYYY-MM-DDTHH:mm:ssZ").replace(/\[([^\]]+)]|Q|wo|ww|w|WW|W|zzz|z|gggg|GGGG|Do|X|x|k{1,2}|S/g,(function(e){switch(e){case"Q":return Math.ceil((t.$M+1)/3);case"Do":return r.ordinal(t.$D);case"gggg":return t.weekYear();case"GGGG":return t.isoWeekYear();case"wo":return r.ordinal(t.week(),"W");case"w":case"ww":return s.s(t.week(),"w"===e?1:2,"0");case"W":case"WW":return s.s(t.isoWeek(),"W"===e?1:2,"0");case"k":case"kk":return s.s(String(0===t.$H?24:t.$H),"k"===e?1:2,"0");case"X":return Math.floor(t.$d.getTime()/1e3);case"x":return t.$d.getTime();case"z":return"["+t.offsetName()+"]";case"zzz":return"["+t.offsetName("long")+"]";default:return e}}));return n.bind(this)(a)}}}));
-
-/***/ }),
-
-/***/ 10285:
-/***/ (function(module) {
-
-!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e={LTS:"h:mm:ss A",LT:"h:mm A",L:"MM/DD/YYYY",LL:"MMMM D, YYYY",LLL:"MMMM D, YYYY h:mm A",LLLL:"dddd, MMMM D, YYYY h:mm A"},t=/(\[[^[]*\])|([-_:/.,()\s]+)|(A|a|YYYY|YY?|MM?M?M?|Do|DD?|hh?|HH?|mm?|ss?|S{1,3}|z|ZZ?)/g,n=/\d\d/,r=/\d\d?/,i=/\d*[^-_:/,()\s\d]+/,o={},s=function(e){return(e=+e)+(e>68?1900:2e3)};var a=function(e){return function(t){this[e]=+t}},f=[/[+-]\d\d:?(\d\d)?|Z/,function(e){(this.zone||(this.zone={})).offset=function(e){if(!e)return 0;if("Z"===e)return 0;var t=e.match(/([+-]|\d\d)/g),n=60*t[1]+(+t[2]||0);return 0===n?0:"+"===t[0]?-n:n}(e)}],h=function(e){var t=o[e];return t&&(t.indexOf?t:t.s.concat(t.f))},u=function(e,t){var n,r=o.meridiem;if(r){for(var i=1;i<=24;i+=1)if(e.indexOf(r(i,0,t))>-1){n=i>12;break}}else n=e===(t?"pm":"PM");return n},d={A:[i,function(e){this.afternoon=u(e,!1)}],a:[i,function(e){this.afternoon=u(e,!0)}],S:[/\d/,function(e){this.milliseconds=100*+e}],SS:[n,function(e){this.milliseconds=10*+e}],SSS:[/\d{3}/,function(e){this.milliseconds=+e}],s:[r,a("seconds")],ss:[r,a("seconds")],m:[r,a("minutes")],mm:[r,a("minutes")],H:[r,a("hours")],h:[r,a("hours")],HH:[r,a("hours")],hh:[r,a("hours")],D:[r,a("day")],DD:[n,a("day")],Do:[i,function(e){var t=o.ordinal,n=e.match(/\d+/);if(this.day=n[0],t)for(var r=1;r<=31;r+=1)t(r).replace(/\[|\]/g,"")===e&&(this.day=r)}],M:[r,a("month")],MM:[n,a("month")],MMM:[i,function(e){var t=h("months"),n=(h("monthsShort")||t.map((function(e){return e.slice(0,3)}))).indexOf(e)+1;if(n<1)throw new Error;this.month=n%12||n}],MMMM:[i,function(e){var t=h("months").indexOf(e)+1;if(t<1)throw new Error;this.month=t%12||t}],Y:[/[+-]?\d+/,a("year")],YY:[n,function(e){this.year=s(e)}],YYYY:[/\d{4}/,a("year")],Z:f,ZZ:f};function c(n){var r,i;r=n,i=o&&o.formats;for(var s=(n=r.replace(/(\[[^\]]+])|(LTS?|l{1,4}|L{1,4})/g,(function(t,n,r){var o=r&&r.toUpperCase();return n||i[r]||e[r]||i[o].replace(/(\[[^\]]+])|(MMMM|MM|DD|dddd)/g,(function(e,t,n){return t||n.slice(1)}))}))).match(t),a=s.length,f=0;f<a;f+=1){var h=s[f],u=d[h],c=u&&u[0],l=u&&u[1];s[f]=l?{regex:c,parser:l}:h.replace(/^\[|\]$/g,"")}return function(e){for(var t={},n=0,r=0;n<a;n+=1){var i=s[n];if("string"==typeof i)r+=i.length;else{var o=i.regex,f=i.parser,h=e.slice(r),u=o.exec(h)[0];f.call(t,u),e=e.replace(u,"")}}return function(e){var t=e.afternoon;if(void 0!==t){var n=e.hours;t?n<12&&(e.hours+=12):12===n&&(e.hours=0),delete e.afternoon}}(t),t}}return function(e,t,n){n.p.customParseFormat=!0,e&&e.parseTwoDigitYear&&(s=e.parseTwoDigitYear);var r=t.prototype,i=r.parse;r.parse=function(e){var t=e.date,r=e.utc,s=e.args;this.$u=r;var a=s[1];if("string"==typeof a){var f=!0===s[2],h=!0===s[3],u=f||h,d=s[2];h&&(d=s[2]),o=this.$locale(),!f&&d&&(o=n.Ls[d]),this.$d=function(e,t,n){try{if(["x","X"].indexOf(t)>-1)return new Date(("X"===t?1e3:1)*e);var r=c(t)(e),i=r.year,o=r.month,s=r.day,a=r.hours,f=r.minutes,h=r.seconds,u=r.milliseconds,d=r.zone,l=new Date,m=s||(i||o?1:l.getDate()),M=i||l.getFullYear(),Y=0;i&&!o||(Y=o>0?o-1:l.getMonth());var p=a||0,v=f||0,D=h||0,g=u||0;return d?new Date(Date.UTC(M,Y,m,p,v,D,g+60*d.offset*1e3)):n?new Date(Date.UTC(M,Y,m,p,v,D,g)):new Date(M,Y,m,p,v,D,g)}catch(e){return new Date("")}}(t,a,r),this.init(),d&&!0!==d&&(this.$L=this.locale(d).$L),u&&t!=this.format(a)&&(this.$d=new Date("")),o={}}else if(a instanceof Array)for(var l=a.length,m=1;m<=l;m+=1){s[1]=a[m-1];var M=n.apply(this,s);if(M.isValid()){this.$d=M.$d,this.$L=M.$L,this.init();break}m===l&&(this.$d=new Date(""))}else i.call(this,e)}}}));
-
-/***/ }),
-
-/***/ 59542:
-/***/ (function(module) {
-
-!function(e,t){ true?module.exports=t():0}(this,(function(){"use strict";var e="day";return function(t,i,s){var a=function(t){return t.add(4-t.isoWeekday(),e)},d=i.prototype;d.isoWeekYear=function(){return a(this).year()},d.isoWeek=function(t){if(!this.$utils().u(t))return this.add(7*(t-this.isoWeek()),e);var i,d,n,o,r=a(this),u=(i=this.isoWeekYear(),d=this.$u,n=(d?s.utc:s)().year(i).startOf("year"),o=4-n.isoWeekday(),n.isoWeekday()>4&&(o+=7),n.add(o,e));return r.diff(u,"week")+1},d.isoWeekday=function(e){return this.$utils().u(e)?this.day()||7:this.day(this.day()%7?e:e-7)};var n=d.startOf;d.startOf=function(e,t){var i=this.$utils(),s=!!i.u(t)||t;return"isoweek"===i.p(e)?s?this.date(this.date()-(this.isoWeekday()-1)).startOf("day"):this.date(this.date()-1-(this.isoWeekday()-1)+7).endOf("day"):n.bind(this)(e,t)}}}));
-
-/***/ }),
-
-/***/ 20296:
-/***/ ((module) => {
-
-/**
- * Returns a function, that, as long as it continues to be invoked, will not
- * be triggered. The function will be called after it stops being called for
- * N milliseconds. If `immediate` is passed, trigger the function on the
- * leading edge, instead of the trailing. The function also has a property 'clear' 
- * that is a function which will clear the timer to prevent previously scheduled executions. 
- *
- * @source underscore.js
- * @see http://unscriptable.com/2009/03/20/debouncing-javascript-methods/
- * @param {Function} function to wrap
- * @param {Number} timeout in ms (`100`)
- * @param {Boolean} whether to execute at the beginning (`false`)
- * @api public
- */
-function debounce(func, wait, immediate){
-  var timeout, args, context, timestamp, result;
-  if (null == wait) wait = 100;
-
-  function later() {
-    var last = Date.now() - timestamp;
-
-    if (last < wait && last >= 0) {
-      timeout = setTimeout(later, wait - last);
-    } else {
-      timeout = null;
-      if (!immediate) {
-        result = func.apply(context, args);
-        context = args = null;
-      }
-    }
-  };
-
-  var debounced = function(){
-    context = this;
-    args = arguments;
-    timestamp = Date.now();
-    var callNow = immediate && !timeout;
-    if (!timeout) timeout = setTimeout(later, wait);
-    if (callNow) {
-      result = func.apply(context, args);
-      context = args = null;
-    }
-
-    return result;
-  };
-
-  debounced.clear = function() {
-    if (timeout) {
-      clearTimeout(timeout);
-      timeout = null;
-    }
-  };
-  
-  debounced.flush = function() {
-    if (timeout) {
-      result = func.apply(context, args);
-      context = args = null;
-      
-      clearTimeout(timeout);
-      timeout = null;
-    }
-  };
-
-  return debounced;
-};
-
-// Adds compatibility for ES modules
-debounce.debounce = debounce;
-
-module.exports = debounce;
-
-
-/***/ }),
-
-/***/ 20683:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (/* binding */ purify)
-/* harmony export */ });
-/*! @license DOMPurify 2.4.3 | (c) Cure53 and other contributors | Released under the Apache license 2.0 and Mozilla Public License 2.0 | github.com/cure53/DOMPurify/blob/2.4.3/LICENSE */
-
-function _typeof(obj) {
-  "@babel/helpers - typeof";
-
-  return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) {
-    return typeof obj;
-  } : function (obj) {
-    return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
-  }, _typeof(obj);
-}
-
-function _setPrototypeOf(o, p) {
-  _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {
-    o.__proto__ = p;
-    return o;
-  };
-
-  return _setPrototypeOf(o, p);
-}
-
-function _isNativeReflectConstruct() {
-  if (typeof Reflect === "undefined" || !Reflect.construct) return false;
-  if (Reflect.construct.sham) return false;
-  if (typeof Proxy === "function") return true;
-
-  try {
-    Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));
-    return true;
-  } catch (e) {
-    return false;
-  }
-}
-
-function _construct(Parent, args, Class) {
-  if (_isNativeReflectConstruct()) {
-    _construct = Reflect.construct;
-  } else {
-    _construct = function _construct(Parent, args, Class) {
-      var a = [null];
-      a.push.apply(a, args);
-      var Constructor = Function.bind.apply(Parent, a);
-      var instance = new Constructor();
-      if (Class) _setPrototypeOf(instance, Class.prototype);
-      return instance;
-    };
-  }
-
-  return _construct.apply(null, arguments);
-}
-
-function _toConsumableArray(arr) {
-  return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
-}
-
-function _arrayWithoutHoles(arr) {
-  if (Array.isArray(arr)) return _arrayLikeToArray(arr);
-}
-
-function _iterableToArray(iter) {
-  if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
-}
-
-function _unsupportedIterableToArray(o, minLen) {
-  if (!o) return;
-  if (typeof o === "string") return _arrayLikeToArray(o, minLen);
-  var n = Object.prototype.toString.call(o).slice(8, -1);
-  if (n === "Object" && o.constructor) n = o.constructor.name;
-  if (n === "Map" || n === "Set") return Array.from(o);
-  if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
-}
-
-function _arrayLikeToArray(arr, len) {
-  if (len == null || len > arr.length) len = arr.length;
-
-  for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
-
-  return arr2;
-}
-
-function _nonIterableSpread() {
-  throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
-}
-
-var hasOwnProperty = Object.hasOwnProperty,
-    setPrototypeOf = Object.setPrototypeOf,
-    isFrozen = Object.isFrozen,
-    getPrototypeOf = Object.getPrototypeOf,
-    getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
-var freeze = Object.freeze,
-    seal = Object.seal,
-    create = Object.create; // eslint-disable-line import/no-mutable-exports
-
-var _ref = typeof Reflect !== 'undefined' && Reflect,
-    apply = _ref.apply,
-    construct = _ref.construct;
-
-if (!apply) {
-  apply = function apply(fun, thisValue, args) {
-    return fun.apply(thisValue, args);
-  };
-}
-
-if (!freeze) {
-  freeze = function freeze(x) {
-    return x;
-  };
-}
-
-if (!seal) {
-  seal = function seal(x) {
-    return x;
-  };
-}
-
-if (!construct) {
-  construct = function construct(Func, args) {
-    return _construct(Func, _toConsumableArray(args));
-  };
-}
-
-var arrayForEach = unapply(Array.prototype.forEach);
-var arrayPop = unapply(Array.prototype.pop);
-var arrayPush = unapply(Array.prototype.push);
-var stringToLowerCase = unapply(String.prototype.toLowerCase);
-var stringToString = unapply(String.prototype.toString);
-var stringMatch = unapply(String.prototype.match);
-var stringReplace = unapply(String.prototype.replace);
-var stringIndexOf = unapply(String.prototype.indexOf);
-var stringTrim = unapply(String.prototype.trim);
-var regExpTest = unapply(RegExp.prototype.test);
-var typeErrorCreate = unconstruct(TypeError);
-function unapply(func) {
-  return function (thisArg) {
-    for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
-      args[_key - 1] = arguments[_key];
-    }
-
-    return apply(func, thisArg, args);
-  };
-}
-function unconstruct(func) {
-  return function () {
-    for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
-      args[_key2] = arguments[_key2];
-    }
-
-    return construct(func, args);
-  };
-}
-/* Add properties to a lookup table */
-
-function addToSet(set, array, transformCaseFunc) {
-  transformCaseFunc = transformCaseFunc ? transformCaseFunc : stringToLowerCase;
-
-  if (setPrototypeOf) {
-    // Make 'in' and truthy checks like Boolean(set.constructor)
-    // independent of any properties defined on Object.prototype.
-    // Prevent prototype setters from intercepting set as a this value.
-    setPrototypeOf(set, null);
-  }
-
-  var l = array.length;
-
-  while (l--) {
-    var element = array[l];
-
-    if (typeof element === 'string') {
-      var lcElement = transformCaseFunc(element);
-
-      if (lcElement !== element) {
-        // Config presets (e.g. tags.js, attrs.js) are immutable.
-        if (!isFrozen(array)) {
-          array[l] = lcElement;
-        }
-
-        element = lcElement;
-      }
-    }
-
-    set[element] = true;
-  }
-
-  return set;
-}
-/* Shallow clone an object */
-
-function clone(object) {
-  var newObject = create(null);
-  var property;
-
-  for (property in object) {
-    if (apply(hasOwnProperty, object, [property]) === true) {
-      newObject[property] = object[property];
-    }
-  }
-
-  return newObject;
-}
-/* IE10 doesn't support __lookupGetter__ so lets'
- * simulate it. It also automatically checks
- * if the prop is function or getter and behaves
- * accordingly. */
-
-function lookupGetter(object, prop) {
-  while (object !== null) {
-    var desc = getOwnPropertyDescriptor(object, prop);
-
-    if (desc) {
-      if (desc.get) {
-        return unapply(desc.get);
-      }
-
-      if (typeof desc.value === 'function') {
-        return unapply(desc.value);
-      }
-    }
-
-    object = getPrototypeOf(object);
-  }
-
-  function fallbackValue(element) {
-    console.warn('fallback value for', element);
-    return null;
-  }
-
-  return fallbackValue;
-}
-
-var html$1 = freeze(['a', 'abbr', 'acronym', 'address', 'area', 'article', 'aside', 'audio', 'b', 'bdi', 'bdo', 'big', 'blink', 'blockquote', 'body', 'br', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'content', 'data', 'datalist', 'dd', 'decorator', 'del', 'details', 'dfn', 'dialog', 'dir', 'div', 'dl', 'dt', 'element', 'em', 'fieldset', 'figcaption', 'figure', 'font', 'footer', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'head', 'header', 'hgroup', 'hr', 'html', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'main', 'map', 'mark', 'marquee', 'menu', 'menuitem', 'meter', 'nav', 'nobr', 'ol', 'optgroup', 'option', 'output', 'p', 'picture', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'section', 'select', 'shadow', 'small', 'source', 'spacer', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'template', 'textarea', 'tfoot', 'th', 'thead', 'time', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr']); // SVG
-
-var svg$1 = freeze(['svg', 'a', 'altglyph', 'altglyphdef', 'altglyphitem', 'animatecolor', 'animatemotion', 'animatetransform', 'circle', 'clippath', 'defs', 'desc', 'ellipse', 'filter', 'font', 'g', 'glyph', 'glyphref', 'hkern', 'image', 'line', 'lineargradient', 'marker', 'mask', 'metadata', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialgradient', 'rect', 'stop', 'style', 'switch', 'symbol', 'text', 'textpath', 'title', 'tref', 'tspan', 'view', 'vkern']);
-var svgFilters = freeze(['feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence']); // List of SVG elements that are disallowed by default.
-// We still need to know them so that we can do namespace
-// checks properly in case one wants to add them to
-// allow-list.
-
-var svgDisallowed = freeze(['animate', 'color-profile', 'cursor', 'discard', 'fedropshadow', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignobject', 'hatch', 'hatchpath', 'mesh', 'meshgradient', 'meshpatch', 'meshrow', 'missing-glyph', 'script', 'set', 'solidcolor', 'unknown', 'use']);
-var mathMl$1 = freeze(['math', 'menclose', 'merror', 'mfenced', 'mfrac', 'mglyph', 'mi', 'mlabeledtr', 'mmultiscripts', 'mn', 'mo', 'mover', 'mpadded', 'mphantom', 'mroot', 'mrow', 'ms', 'mspace', 'msqrt', 'mstyle', 'msub', 'msup', 'msubsup', 'mtable', 'mtd', 'mtext', 'mtr', 'munder', 'munderover']); // Similarly to SVG, we want to know all MathML elements,
-// even those that we disallow by default.
-
-var mathMlDisallowed = freeze(['maction', 'maligngroup', 'malignmark', 'mlongdiv', 'mscarries', 'mscarry', 'msgroup', 'mstack', 'msline', 'msrow', 'semantics', 'annotation', 'annotation-xml', 'mprescripts', 'none']);
-var text = freeze(['#text']);
-
-var html = freeze(['accept', 'action', 'align', 'alt', 'autocapitalize', 'autocomplete', 'autopictureinpicture', 'autoplay', 'background', 'bgcolor', 'border', 'capture', 'cellpadding', 'cellspacing', 'checked', 'cite', 'class', 'clear', 'color', 'cols', 'colspan', 'controls', 'controlslist', 'coords', 'crossorigin', 'datetime', 'decoding', 'default', 'dir', 'disabled', 'disablepictureinpicture', 'disableremoteplayback', 'download', 'draggable', 'enctype', 'enterkeyhint', 'face', 'for', 'headers', 'height', 'hidden', 'high', 'href', 'hreflang', 'id', 'inputmode', 'integrity', 'ismap', 'kind', 'label', 'lang', 'list', 'loading', 'loop', 'low', 'max', 'maxlength', 'media', 'method', 'min', 'minlength', 'multiple', 'muted', 'name', 'nonce', 'noshade', 'novalidate', 'nowrap', 'open', 'optimum', 'pattern', 'placeholder', 'playsinline', 'poster', 'preload', 'pubdate', 'radiogroup', 'readonly', 'rel', 'required', 'rev', 'reversed', 'role', 'rows', 'rowspan', 'spellcheck', 'scope', 'selected', 'shape', 'size', 'sizes', 'span', 'srclang', 'start', 'src', 'srcset', 'step', 'style', 'summary', 'tabindex', 'title', 'translate', 'type', 'usemap', 'valign', 'value', 'width', 'xmlns', 'slot']);
-var svg = freeze(['accent-height', 'accumulate', 'additive', 'alignment-baseline', 'ascent', 'attributename', 'attributetype', 'azimuth', 'basefrequency', 'baseline-shift', 'begin', 'bias', 'by', 'class', 'clip', 'clippathunits', 'clip-path', 'clip-rule', 'color', 'color-interpolation', 'color-interpolation-filters', 'color-profile', 'color-rendering', 'cx', 'cy', 'd', 'dx', 'dy', 'diffuseconstant', 'direction', 'display', 'divisor', 'dur', 'edgemode', 'elevation', 'end', 'fill', 'fill-opacity', 'fill-rule', 'filter', 'filterunits', 'flood-color', 'flood-opacity', 'font-family', 'font-size', 'font-size-adjust', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'fx', 'fy', 'g1', 'g2', 'glyph-name', 'glyphref', 'gradientunits', 'gradienttransform', 'height', 'href', 'id', 'image-rendering', 'in', 'in2', 'k', 'k1', 'k2', 'k3', 'k4', 'kerning', 'keypoints', 'keysplines', 'keytimes', 'lang', 'lengthadjust', 'letter-spacing', 'kernelmatrix', 'kernelunitlength', 'lighting-color', 'local', 'marker-end', 'marker-mid', 'marker-start', 'markerheight', 'markerunits', 'markerwidth', 'maskcontentunits', 'maskunits', 'max', 'mask', 'media', 'method', 'mode', 'min', 'name', 'numoctaves', 'offset', 'operator', 'opacity', 'order', 'orient', 'orientation', 'origin', 'overflow', 'paint-order', 'path', 'pathlength', 'patterncontentunits', 'patterntransform', 'patternunits', 'points', 'preservealpha', 'preserveaspectratio', 'primitiveunits', 'r', 'rx', 'ry', 'radius', 'refx', 'refy', 'repeatcount', 'repeatdur', 'restart', 'result', 'rotate', 'scale', 'seed', 'shape-rendering', 'specularconstant', 'specularexponent', 'spreadmethod', 'startoffset', 'stddeviation', 'stitchtiles', 'stop-color', 'stop-opacity', 'stroke-dasharray', 'stroke-dashoffset', 'stroke-linecap', 'stroke-linejoin', 'stroke-miterlimit', 'stroke-opacity', 'stroke', 'stroke-width', 'style', 'surfacescale', 'systemlanguage', 'tabindex', 'targetx', 'targety', 'transform', 'transform-origin', 'text-anchor', 'text-decoration', 'text-rendering', 'textlength', 'type', 'u1', 'u2', 'unicode', 'values', 'viewbox', 'visibility', 'version', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'width', 'word-spacing', 'wrap', 'writing-mode', 'xchannelselector', 'ychannelselector', 'x', 'x1', 'x2', 'xmlns', 'y', 'y1', 'y2', 'z', 'zoomandpan']);
-var mathMl = freeze(['accent', 'accentunder', 'align', 'bevelled', 'close', 'columnsalign', 'columnlines', 'columnspan', 'denomalign', 'depth', 'dir', 'display', 'displaystyle', 'encoding', 'fence', 'frame', 'height', 'href', 'id', 'largeop', 'length', 'linethickness', 'lspace', 'lquote', 'mathbackground', 'mathcolor', 'mathsize', 'mathvariant', 'maxsize', 'minsize', 'movablelimits', 'notation', 'numalign', 'open', 'rowalign', 'rowlines', 'rowspacing', 'rowspan', 'rspace', 'rquote', 'scriptlevel', 'scriptminsize', 'scriptsizemultiplier', 'selection', 'separator', 'separators', 'stretchy', 'subscriptshift', 'supscriptshift', 'symmetric', 'voffset', 'width', 'xmlns']);
-var xml = freeze(['xlink:href', 'xml:id', 'xlink:title', 'xml:space', 'xmlns:xlink']);
-
-var MUSTACHE_EXPR = seal(/\{\{[\w\W]*|[\w\W]*\}\}/gm); // Specify template detection regex for SAFE_FOR_TEMPLATES mode
-
-var ERB_EXPR = seal(/<%[\w\W]*|[\w\W]*%>/gm);
-var TMPLIT_EXPR = seal(/\${[\w\W]*}/gm);
-var DATA_ATTR = seal(/^data-[\-\w.\u00B7-\uFFFF]/); // eslint-disable-line no-useless-escape
-
-var ARIA_ATTR = seal(/^aria-[\-\w]+$/); // eslint-disable-line no-useless-escape
-
-var IS_ALLOWED_URI = seal(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|cid|xmpp):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i // eslint-disable-line no-useless-escape
-);
-var IS_SCRIPT_OR_DATA = seal(/^(?:\w+script|data):/i);
-var ATTR_WHITESPACE = seal(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g // eslint-disable-line no-control-regex
-);
-var DOCTYPE_NAME = seal(/^html$/i);
-
-var getGlobal = function getGlobal() {
-  return typeof window === 'undefined' ? null : window;
-};
-/**
- * Creates a no-op policy for internal use only.
- * Don't export this function outside this module!
- * @param {?TrustedTypePolicyFactory} trustedTypes The policy factory.
- * @param {Document} document The document object (to determine policy name suffix)
- * @return {?TrustedTypePolicy} The policy created (or null, if Trusted Types
- * are not supported).
- */
-
-
-var _createTrustedTypesPolicy = function _createTrustedTypesPolicy(trustedTypes, document) {
-  if (_typeof(trustedTypes) !== 'object' || typeof trustedTypes.createPolicy !== 'function') {
-    return null;
-  } // Allow the callers to control the unique policy name
-  // by adding a data-tt-policy-suffix to the script element with the DOMPurify.
-  // Policy creation with duplicate names throws in Trusted Types.
-
-
-  var suffix = null;
-  var ATTR_NAME = 'data-tt-policy-suffix';
-
-  if (document.currentScript && document.currentScript.hasAttribute(ATTR_NAME)) {
-    suffix = document.currentScript.getAttribute(ATTR_NAME);
-  }
-
-  var policyName = 'dompurify' + (suffix ? '#' + suffix : '');
-
-  try {
-    return trustedTypes.createPolicy(policyName, {
-      createHTML: function createHTML(html) {
-        return html;
-      },
-      createScriptURL: function createScriptURL(scriptUrl) {
-        return scriptUrl;
-      }
-    });
-  } catch (_) {
-    // Policy creation failed (most likely another DOMPurify script has
-    // already run). Skip creating the policy, as this will only cause errors
-    // if TT are enforced.
-    console.warn('TrustedTypes policy ' + policyName + ' could not be created.');
-    return null;
-  }
-};
-
-function createDOMPurify() {
-  var window = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : getGlobal();
-
-  var DOMPurify = function DOMPurify(root) {
-    return createDOMPurify(root);
-  };
-  /**
-   * Version label, exposed for easier checks
-   * if DOMPurify is up to date or not
-   */
-
-
-  DOMPurify.version = '2.4.3';
-  /**
-   * Array of elements that DOMPurify removed during sanitation.
-   * Empty if nothing was removed.
-   */
-
-  DOMPurify.removed = [];
-
-  if (!window || !window.document || window.document.nodeType !== 9) {
-    // Not running in a browser, provide a factory function
-    // so that you can pass your own Window
-    DOMPurify.isSupported = false;
-    return DOMPurify;
-  }
-
-  var originalDocument = window.document;
-  var document = window.document;
-  var DocumentFragment = window.DocumentFragment,
-      HTMLTemplateElement = window.HTMLTemplateElement,
-      Node = window.Node,
-      Element = window.Element,
-      NodeFilter = window.NodeFilter,
-      _window$NamedNodeMap = window.NamedNodeMap,
-      NamedNodeMap = _window$NamedNodeMap === void 0 ? window.NamedNodeMap || window.MozNamedAttrMap : _window$NamedNodeMap,
-      HTMLFormElement = window.HTMLFormElement,
-      DOMParser = window.DOMParser,
-      trustedTypes = window.trustedTypes;
-  var ElementPrototype = Element.prototype;
-  var cloneNode = lookupGetter(ElementPrototype, 'cloneNode');
-  var getNextSibling = lookupGetter(ElementPrototype, 'nextSibling');
-  var getChildNodes = lookupGetter(ElementPrototype, 'childNodes');
-  var getParentNode = lookupGetter(ElementPrototype, 'parentNode'); // As per issue #47, the web-components registry is inherited by a
-  // new document created via createHTMLDocument. As per the spec
-  // (http://w3c.github.io/webcomponents/spec/custom/#creating-and-passing-registries)
-  // a new empty registry is used when creating a template contents owner
-  // document, so we use that as our parent document to ensure nothing
-  // is inherited.
-
-  if (typeof HTMLTemplateElement === 'function') {
-    var template = document.createElement('template');
-
-    if (template.content && template.content.ownerDocument) {
-      document = template.content.ownerDocument;
-    }
-  }
-
-  var trustedTypesPolicy = _createTrustedTypesPolicy(trustedTypes, originalDocument);
-
-  var emptyHTML = trustedTypesPolicy ? trustedTypesPolicy.createHTML('') : '';
-  var _document = document,
-      implementation = _document.implementation,
-      createNodeIterator = _document.createNodeIterator,
-      createDocumentFragment = _document.createDocumentFragment,
-      getElementsByTagName = _document.getElementsByTagName;
-  var importNode = originalDocument.importNode;
-  var documentMode = {};
-
-  try {
-    documentMode = clone(document).documentMode ? document.documentMode : {};
-  } catch (_) {}
-
-  var hooks = {};
-  /**
-   * Expose whether this browser supports running the full DOMPurify.
-   */
-
-  DOMPurify.isSupported = typeof getParentNode === 'function' && implementation && typeof implementation.createHTMLDocument !== 'undefined' && documentMode !== 9;
-  var MUSTACHE_EXPR$1 = MUSTACHE_EXPR,
-      ERB_EXPR$1 = ERB_EXPR,
-      TMPLIT_EXPR$1 = TMPLIT_EXPR,
-      DATA_ATTR$1 = DATA_ATTR,
-      ARIA_ATTR$1 = ARIA_ATTR,
-      IS_SCRIPT_OR_DATA$1 = IS_SCRIPT_OR_DATA,
-      ATTR_WHITESPACE$1 = ATTR_WHITESPACE;
-  var IS_ALLOWED_URI$1 = IS_ALLOWED_URI;
-  /**
-   * We consider the elements and attributes below to be safe. Ideally
-   * don't add any new ones but feel free to remove unwanted ones.
-   */
-
-  /* allowed element names */
-
-  var ALLOWED_TAGS = null;
-  var DEFAULT_ALLOWED_TAGS = addToSet({}, [].concat(_toConsumableArray(html$1), _toConsumableArray(svg$1), _toConsumableArray(svgFilters), _toConsumableArray(mathMl$1), _toConsumableArray(text)));
-  /* Allowed attribute names */
-
-  var ALLOWED_ATTR = null;
-  var DEFAULT_ALLOWED_ATTR = addToSet({}, [].concat(_toConsumableArray(html), _toConsumableArray(svg), _toConsumableArray(mathMl), _toConsumableArray(xml)));
-  /*
-   * Configure how DOMPUrify should handle custom elements and their attributes as well as customized built-in elements.
-   * @property {RegExp|Function|null} tagNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any custom elements)
-   * @property {RegExp|Function|null} attributeNameCheck one of [null, regexPattern, predicate]. Default: `null` (disallow any attributes not on the allow list)
-   * @property {boolean} allowCustomizedBuiltInElements allow custom elements derived from built-ins if they pass CUSTOM_ELEMENT_HANDLING.tagNameCheck. Default: `false`.
-   */
-
-  var CUSTOM_ELEMENT_HANDLING = Object.seal(Object.create(null, {
-    tagNameCheck: {
-      writable: true,
-      configurable: false,
-      enumerable: true,
-      value: null
-    },
-    attributeNameCheck: {
-      writable: true,
-      configurable: false,
-      enumerable: true,
-      value: null
-    },
-    allowCustomizedBuiltInElements: {
-      writable: true,
-      configurable: false,
-      enumerable: true,
-      value: false
-    }
-  }));
-  /* Explicitly forbidden tags (overrides ALLOWED_TAGS/ADD_TAGS) */
-
-  var FORBID_TAGS = null;
-  /* Explicitly forbidden attributes (overrides ALLOWED_ATTR/ADD_ATTR) */
-
-  var FORBID_ATTR = null;
-  /* Decide if ARIA attributes are okay */
-
-  var ALLOW_ARIA_ATTR = true;
-  /* Decide if custom data attributes are okay */
-
-  var ALLOW_DATA_ATTR = true;
-  /* Decide if unknown protocols are okay */
-
-  var ALLOW_UNKNOWN_PROTOCOLS = false;
-  /* Output should be safe for common template engines.
-   * This means, DOMPurify removes data attributes, mustaches and ERB
-   */
-
-  var SAFE_FOR_TEMPLATES = false;
-  /* Decide if document with <html>... should be returned */
-
-  var WHOLE_DOCUMENT = false;
-  /* Track whether config is already set on this instance of DOMPurify. */
-
-  var SET_CONFIG = false;
-  /* Decide if all elements (e.g. style, script) must be children of
-   * document.body. By default, browsers might move them to document.head */
-
-  var FORCE_BODY = false;
-  /* Decide if a DOM `HTMLBodyElement` should be returned, instead of a html
-   * string (or a TrustedHTML object if Trusted Types are supported).
-   * If `WHOLE_DOCUMENT` is enabled a `HTMLHtmlElement` will be returned instead
-   */
-
-  var RETURN_DOM = false;
-  /* Decide if a DOM `DocumentFragment` should be returned, instead of a html
-   * string  (or a TrustedHTML object if Trusted Types are supported) */
-
-  var RETURN_DOM_FRAGMENT = false;
-  /* Try to return a Trusted Type object instead of a string, return a string in
-   * case Trusted Types are not supported  */
-
-  var RETURN_TRUSTED_TYPE = false;
-  /* Output should be free from DOM clobbering attacks?
-   * This sanitizes markups named with colliding, clobberable built-in DOM APIs.
-   */
-
-  var SANITIZE_DOM = true;
-  /* Achieve full DOM Clobbering protection by isolating the namespace of named
-   * properties and JS variables, mitigating attacks that abuse the HTML/DOM spec rules.
-   *
-   * HTML/DOM spec rules that enable DOM Clobbering:
-   *   - Named Access on Window (§7.3.3)
-   *   - DOM Tree Accessors (§3.1.5)
-   *   - Form Element Parent-Child Relations (§4.10.3)
-   *   - Iframe srcdoc / Nested WindowProxies (§4.8.5)
-   *   - HTMLCollection (§4.2.10.2)
-   *
-   * Namespace isolation is implemented by prefixing `id` and `name` attributes
-   * with a constant string, i.e., `user-content-`
-   */
-
-  var SANITIZE_NAMED_PROPS = false;
-  var SANITIZE_NAMED_PROPS_PREFIX = 'user-content-';
-  /* Keep element content when removing element? */
-
-  var KEEP_CONTENT = true;
-  /* If a `Node` is passed to sanitize(), then performs sanitization in-place instead
-   * of importing it into a new Document and returning a sanitized copy */
-
-  var IN_PLACE = false;
-  /* Allow usage of profiles like html, svg and mathMl */
-
-  var USE_PROFILES = {};
-  /* Tags to ignore content of when KEEP_CONTENT is true */
-
-  var FORBID_CONTENTS = null;
-  var DEFAULT_FORBID_CONTENTS = addToSet({}, ['annotation-xml', 'audio', 'colgroup', 'desc', 'foreignobject', 'head', 'iframe', 'math', 'mi', 'mn', 'mo', 'ms', 'mtext', 'noembed', 'noframes', 'noscript', 'plaintext', 'script', 'style', 'svg', 'template', 'thead', 'title', 'video', 'xmp']);
-  /* Tags that are safe for data: URIs */
-
-  var DATA_URI_TAGS = null;
-  var DEFAULT_DATA_URI_TAGS = addToSet({}, ['audio', 'video', 'img', 'source', 'image', 'track']);
-  /* Attributes safe for values like "javascript:" */
-
-  var URI_SAFE_ATTRIBUTES = null;
-  var DEFAULT_URI_SAFE_ATTRIBUTES = addToSet({}, ['alt', 'class', 'for', 'id', 'label', 'name', 'pattern', 'placeholder', 'role', 'summary', 'title', 'value', 'style', 'xmlns']);
-  var MATHML_NAMESPACE = 'http://www.w3.org/1998/Math/MathML';
-  var SVG_NAMESPACE = 'http://www.w3.org/2000/svg';
-  var HTML_NAMESPACE = 'http://www.w3.org/1999/xhtml';
-  /* Document namespace */
-
-  var NAMESPACE = HTML_NAMESPACE;
-  var IS_EMPTY_INPUT = false;
-  /* Allowed XHTML+XML namespaces */
-
-  var ALLOWED_NAMESPACES = null;
-  var DEFAULT_ALLOWED_NAMESPACES = addToSet({}, [MATHML_NAMESPACE, SVG_NAMESPACE, HTML_NAMESPACE], stringToString);
-  /* Parsing of strict XHTML documents */
-
-  var PARSER_MEDIA_TYPE;
-  var SUPPORTED_PARSER_MEDIA_TYPES = ['application/xhtml+xml', 'text/html'];
-  var DEFAULT_PARSER_MEDIA_TYPE = 'text/html';
-  var transformCaseFunc;
-  /* Keep a reference to config to pass to hooks */
-
-  var CONFIG = null;
-  /* Ideally, do not touch anything below this line */
-
-  /* ______________________________________________ */
-
-  var formElement = document.createElement('form');
-
-  var isRegexOrFunction = function isRegexOrFunction(testValue) {
-    return testValue instanceof RegExp || testValue instanceof Function;
-  };
-  /**
-   * _parseConfig
-   *
-   * @param  {Object} cfg optional config literal
-   */
-  // eslint-disable-next-line complexity
-
-
-  var _parseConfig = function _parseConfig(cfg) {
-    if (CONFIG && CONFIG === cfg) {
-      return;
-    }
-    /* Shield configuration object from tampering */
-
-
-    if (!cfg || _typeof(cfg) !== 'object') {
-      cfg = {};
-    }
-    /* Shield configuration object from prototype pollution */
-
-
-    cfg = clone(cfg);
-    PARSER_MEDIA_TYPE = // eslint-disable-next-line unicorn/prefer-includes
-    SUPPORTED_PARSER_MEDIA_TYPES.indexOf(cfg.PARSER_MEDIA_TYPE) === -1 ? PARSER_MEDIA_TYPE = DEFAULT_PARSER_MEDIA_TYPE : PARSER_MEDIA_TYPE = cfg.PARSER_MEDIA_TYPE; // HTML tags and attributes are not case-sensitive, converting to lowercase. Keeping XHTML as is.
-
-    transformCaseFunc = PARSER_MEDIA_TYPE === 'application/xhtml+xml' ? stringToString : stringToLowerCase;
-    /* Set configuration parameters */
-
-    ALLOWED_TAGS = 'ALLOWED_TAGS' in cfg ? addToSet({}, cfg.ALLOWED_TAGS, transformCaseFunc) : DEFAULT_ALLOWED_TAGS;
-    ALLOWED_ATTR = 'ALLOWED_ATTR' in cfg ? addToSet({}, cfg.ALLOWED_ATTR, transformCaseFunc) : DEFAULT_ALLOWED_ATTR;
-    ALLOWED_NAMESPACES = 'ALLOWED_NAMESPACES' in cfg ? addToSet({}, cfg.ALLOWED_NAMESPACES, stringToString) : DEFAULT_ALLOWED_NAMESPACES;
-    URI_SAFE_ATTRIBUTES = 'ADD_URI_SAFE_ATTR' in cfg ? addToSet(clone(DEFAULT_URI_SAFE_ATTRIBUTES), // eslint-disable-line indent
-    cfg.ADD_URI_SAFE_ATTR, // eslint-disable-line indent
-    transformCaseFunc // eslint-disable-line indent
-    ) // eslint-disable-line indent
-    : DEFAULT_URI_SAFE_ATTRIBUTES;
-    DATA_URI_TAGS = 'ADD_DATA_URI_TAGS' in cfg ? addToSet(clone(DEFAULT_DATA_URI_TAGS), // eslint-disable-line indent
-    cfg.ADD_DATA_URI_TAGS, // eslint-disable-line indent
-    transformCaseFunc // eslint-disable-line indent
-    ) // eslint-disable-line indent
-    : DEFAULT_DATA_URI_TAGS;
-    FORBID_CONTENTS = 'FORBID_CONTENTS' in cfg ? addToSet({}, cfg.FORBID_CONTENTS, transformCaseFunc) : DEFAULT_FORBID_CONTENTS;
-    FORBID_TAGS = 'FORBID_TAGS' in cfg ? addToSet({}, cfg.FORBID_TAGS, transformCaseFunc) : {};
-    FORBID_ATTR = 'FORBID_ATTR' in cfg ? addToSet({}, cfg.FORBID_ATTR, transformCaseFunc) : {};
-    USE_PROFILES = 'USE_PROFILES' in cfg ? cfg.USE_PROFILES : false;
-    ALLOW_ARIA_ATTR = cfg.ALLOW_ARIA_ATTR !== false; // Default true
-
-    ALLOW_DATA_ATTR = cfg.ALLOW_DATA_ATTR !== false; // Default true
-
-    ALLOW_UNKNOWN_PROTOCOLS = cfg.ALLOW_UNKNOWN_PROTOCOLS || false; // Default false
-
-    SAFE_FOR_TEMPLATES = cfg.SAFE_FOR_TEMPLATES || false; // Default false
-
-    WHOLE_DOCUMENT = cfg.WHOLE_DOCUMENT || false; // Default false
-
-    RETURN_DOM = cfg.RETURN_DOM || false; // Default false
-
-    RETURN_DOM_FRAGMENT = cfg.RETURN_DOM_FRAGMENT || false; // Default false
-
-    RETURN_TRUSTED_TYPE = cfg.RETURN_TRUSTED_TYPE || false; // Default false
-
-    FORCE_BODY = cfg.FORCE_BODY || false; // Default false
-
-    SANITIZE_DOM = cfg.SANITIZE_DOM !== false; // Default true
-
-    SANITIZE_NAMED_PROPS = cfg.SANITIZE_NAMED_PROPS || false; // Default false
-
-    KEEP_CONTENT = cfg.KEEP_CONTENT !== false; // Default true
-
-    IN_PLACE = cfg.IN_PLACE || false; // Default false
-
-    IS_ALLOWED_URI$1 = cfg.ALLOWED_URI_REGEXP || IS_ALLOWED_URI$1;
-    NAMESPACE = cfg.NAMESPACE || HTML_NAMESPACE;
-
-    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck)) {
-      CUSTOM_ELEMENT_HANDLING.tagNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.tagNameCheck;
-    }
-
-    if (cfg.CUSTOM_ELEMENT_HANDLING && isRegexOrFunction(cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck)) {
-      CUSTOM_ELEMENT_HANDLING.attributeNameCheck = cfg.CUSTOM_ELEMENT_HANDLING.attributeNameCheck;
-    }
-
-    if (cfg.CUSTOM_ELEMENT_HANDLING && typeof cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements === 'boolean') {
-      CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements = cfg.CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements;
-    }
-
-    if (SAFE_FOR_TEMPLATES) {
-      ALLOW_DATA_ATTR = false;
-    }
-
-    if (RETURN_DOM_FRAGMENT) {
-      RETURN_DOM = true;
-    }
-    /* Parse profile info */
-
-
-    if (USE_PROFILES) {
-      ALLOWED_TAGS = addToSet({}, _toConsumableArray(text));
-      ALLOWED_ATTR = [];
-
-      if (USE_PROFILES.html === true) {
-        addToSet(ALLOWED_TAGS, html$1);
-        addToSet(ALLOWED_ATTR, html);
-      }
-
-      if (USE_PROFILES.svg === true) {
-        addToSet(ALLOWED_TAGS, svg$1);
-        addToSet(ALLOWED_ATTR, svg);
-        addToSet(ALLOWED_ATTR, xml);
-      }
-
-      if (USE_PROFILES.svgFilters === true) {
-        addToSet(ALLOWED_TAGS, svgFilters);
-        addToSet(ALLOWED_ATTR, svg);
-        addToSet(ALLOWED_ATTR, xml);
-      }
-
-      if (USE_PROFILES.mathMl === true) {
-        addToSet(ALLOWED_TAGS, mathMl$1);
-        addToSet(ALLOWED_ATTR, mathMl);
-        addToSet(ALLOWED_ATTR, xml);
-      }
-    }
-    /* Merge configuration parameters */
-
-
-    if (cfg.ADD_TAGS) {
-      if (ALLOWED_TAGS === DEFAULT_ALLOWED_TAGS) {
-        ALLOWED_TAGS = clone(ALLOWED_TAGS);
-      }
-
-      addToSet(ALLOWED_TAGS, cfg.ADD_TAGS, transformCaseFunc);
-    }
-
-    if (cfg.ADD_ATTR) {
-      if (ALLOWED_ATTR === DEFAULT_ALLOWED_ATTR) {
-        ALLOWED_ATTR = clone(ALLOWED_ATTR);
-      }
-
-      addToSet(ALLOWED_ATTR, cfg.ADD_ATTR, transformCaseFunc);
-    }
-
-    if (cfg.ADD_URI_SAFE_ATTR) {
-      addToSet(URI_SAFE_ATTRIBUTES, cfg.ADD_URI_SAFE_ATTR, transformCaseFunc);
-    }
-
-    if (cfg.FORBID_CONTENTS) {
-      if (FORBID_CONTENTS === DEFAULT_FORBID_CONTENTS) {
-        FORBID_CONTENTS = clone(FORBID_CONTENTS);
-      }
-
-      addToSet(FORBID_CONTENTS, cfg.FORBID_CONTENTS, transformCaseFunc);
-    }
-    /* Add #text in case KEEP_CONTENT is set to true */
-
-
-    if (KEEP_CONTENT) {
-      ALLOWED_TAGS['#text'] = true;
-    }
-    /* Add html, head and body to ALLOWED_TAGS in case WHOLE_DOCUMENT is true */
-
-
-    if (WHOLE_DOCUMENT) {
-      addToSet(ALLOWED_TAGS, ['html', 'head', 'body']);
-    }
-    /* Add tbody to ALLOWED_TAGS in case tables are permitted, see #286, #365 */
-
-
-    if (ALLOWED_TAGS.table) {
-      addToSet(ALLOWED_TAGS, ['tbody']);
-      delete FORBID_TAGS.tbody;
-    } // Prevent further manipulation of configuration.
-    // Not available in IE8, Safari 5, etc.
-
-
-    if (freeze) {
-      freeze(cfg);
-    }
-
-    CONFIG = cfg;
-  };
-
-  var MATHML_TEXT_INTEGRATION_POINTS = addToSet({}, ['mi', 'mo', 'mn', 'ms', 'mtext']);
-  var HTML_INTEGRATION_POINTS = addToSet({}, ['foreignobject', 'desc', 'title', 'annotation-xml']); // Certain elements are allowed in both SVG and HTML
-  // namespace. We need to specify them explicitly
-  // so that they don't get erroneously deleted from
-  // HTML namespace.
-
-  var COMMON_SVG_AND_HTML_ELEMENTS = addToSet({}, ['title', 'style', 'font', 'a', 'script']);
-  /* Keep track of all possible SVG and MathML tags
-   * so that we can perform the namespace checks
-   * correctly. */
-
-  var ALL_SVG_TAGS = addToSet({}, svg$1);
-  addToSet(ALL_SVG_TAGS, svgFilters);
-  addToSet(ALL_SVG_TAGS, svgDisallowed);
-  var ALL_MATHML_TAGS = addToSet({}, mathMl$1);
-  addToSet(ALL_MATHML_TAGS, mathMlDisallowed);
-  /**
-   *
-   *
-   * @param  {Element} element a DOM element whose namespace is being checked
-   * @returns {boolean} Return false if the element has a
-   *  namespace that a spec-compliant parser would never
-   *  return. Return true otherwise.
-   */
-
-  var _checkValidNamespace = function _checkValidNamespace(element) {
-    var parent = getParentNode(element); // In JSDOM, if we're inside shadow DOM, then parentNode
-    // can be null. We just simulate parent in this case.
-
-    if (!parent || !parent.tagName) {
-      parent = {
-        namespaceURI: NAMESPACE,
-        tagName: 'template'
-      };
-    }
-
-    var tagName = stringToLowerCase(element.tagName);
-    var parentTagName = stringToLowerCase(parent.tagName);
-
-    if (!ALLOWED_NAMESPACES[element.namespaceURI]) {
-      return false;
-    }
-
-    if (element.namespaceURI === SVG_NAMESPACE) {
-      // The only way to switch from HTML namespace to SVG
-      // is via <svg>. If it happens via any other tag, then
-      // it should be killed.
-      if (parent.namespaceURI === HTML_NAMESPACE) {
-        return tagName === 'svg';
-      } // The only way to switch from MathML to SVG is via`
-      // svg if parent is either <annotation-xml> or MathML
-      // text integration points.
-
-
-      if (parent.namespaceURI === MATHML_NAMESPACE) {
-        return tagName === 'svg' && (parentTagName === 'annotation-xml' || MATHML_TEXT_INTEGRATION_POINTS[parentTagName]);
-      } // We only allow elements that are defined in SVG
-      // spec. All others are disallowed in SVG namespace.
-
-
-      return Boolean(ALL_SVG_TAGS[tagName]);
-    }
-
-    if (element.namespaceURI === MATHML_NAMESPACE) {
-      // The only way to switch from HTML namespace to MathML
-      // is via <math>. If it happens via any other tag, then
-      // it should be killed.
-      if (parent.namespaceURI === HTML_NAMESPACE) {
-        return tagName === 'math';
-      } // The only way to switch from SVG to MathML is via
-      // <math> and HTML integration points
-
-
-      if (parent.namespaceURI === SVG_NAMESPACE) {
-        return tagName === 'math' && HTML_INTEGRATION_POINTS[parentTagName];
-      } // We only allow elements that are defined in MathML
-      // spec. All others are disallowed in MathML namespace.
-
-
-      return Boolean(ALL_MATHML_TAGS[tagName]);
-    }
-
-    if (element.namespaceURI === HTML_NAMESPACE) {
-      // The only way to switch from SVG to HTML is via
-      // HTML integration points, and from MathML to HTML
-      // is via MathML text integration points
-      if (parent.namespaceURI === SVG_NAMESPACE && !HTML_INTEGRATION_POINTS[parentTagName]) {
-        return false;
-      }
-
-      if (parent.namespaceURI === MATHML_NAMESPACE && !MATHML_TEXT_INTEGRATION_POINTS[parentTagName]) {
-        return false;
-      } // We disallow tags that are specific for MathML
-      // or SVG and should never appear in HTML namespace
-
-
-      return !ALL_MATHML_TAGS[tagName] && (COMMON_SVG_AND_HTML_ELEMENTS[tagName] || !ALL_SVG_TAGS[tagName]);
-    } // For XHTML and XML documents that support custom namespaces
-
-
-    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && ALLOWED_NAMESPACES[element.namespaceURI]) {
-      return true;
-    } // The code should never reach this place (this means
-    // that the element somehow got namespace that is not
-    // HTML, SVG, MathML or allowed via ALLOWED_NAMESPACES).
-    // Return false just in case.
-
-
-    return false;
-  };
-  /**
-   * _forceRemove
-   *
-   * @param  {Node} node a DOM node
-   */
-
-
-  var _forceRemove = function _forceRemove(node) {
-    arrayPush(DOMPurify.removed, {
-      element: node
-    });
-
-    try {
-      // eslint-disable-next-line unicorn/prefer-dom-node-remove
-      node.parentNode.removeChild(node);
-    } catch (_) {
-      try {
-        node.outerHTML = emptyHTML;
-      } catch (_) {
-        node.remove();
-      }
-    }
-  };
-  /**
-   * _removeAttribute
-   *
-   * @param  {String} name an Attribute name
-   * @param  {Node} node a DOM node
-   */
-
-
-  var _removeAttribute = function _removeAttribute(name, node) {
-    try {
-      arrayPush(DOMPurify.removed, {
-        attribute: node.getAttributeNode(name),
-        from: node
-      });
-    } catch (_) {
-      arrayPush(DOMPurify.removed, {
-        attribute: null,
-        from: node
-      });
-    }
-
-    node.removeAttribute(name); // We void attribute values for unremovable "is"" attributes
-
-    if (name === 'is' && !ALLOWED_ATTR[name]) {
-      if (RETURN_DOM || RETURN_DOM_FRAGMENT) {
-        try {
-          _forceRemove(node);
-        } catch (_) {}
-      } else {
-        try {
-          node.setAttribute(name, '');
-        } catch (_) {}
-      }
-    }
-  };
-  /**
-   * _initDocument
-   *
-   * @param  {String} dirty a string of dirty markup
-   * @return {Document} a DOM, filled with the dirty markup
-   */
-
-
-  var _initDocument = function _initDocument(dirty) {
-    /* Create a HTML document */
-    var doc;
-    var leadingWhitespace;
-
-    if (FORCE_BODY) {
-      dirty = '<remove></remove>' + dirty;
-    } else {
-      /* If FORCE_BODY isn't used, leading whitespace needs to be preserved manually */
-      var matches = stringMatch(dirty, /^[\r\n\t ]+/);
-      leadingWhitespace = matches && matches[0];
-    }
-
-    if (PARSER_MEDIA_TYPE === 'application/xhtml+xml' && NAMESPACE === HTML_NAMESPACE) {
-      // Root of XHTML doc must contain xmlns declaration (see https://www.w3.org/TR/xhtml1/normative.html#strict)
-      dirty = '<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body>' + dirty + '</body></html>';
-    }
-
-    var dirtyPayload = trustedTypesPolicy ? trustedTypesPolicy.createHTML(dirty) : dirty;
-    /*
-     * Use the DOMParser API by default, fallback later if needs be
-     * DOMParser not work for svg when has multiple root element.
-     */
-
-    if (NAMESPACE === HTML_NAMESPACE) {
-      try {
-        doc = new DOMParser().parseFromString(dirtyPayload, PARSER_MEDIA_TYPE);
-      } catch (_) {}
-    }
-    /* Use createHTMLDocument in case DOMParser is not available */
-
-
-    if (!doc || !doc.documentElement) {
-      doc = implementation.createDocument(NAMESPACE, 'template', null);
-
-      try {
-        doc.documentElement.innerHTML = IS_EMPTY_INPUT ? emptyHTML : dirtyPayload;
-      } catch (_) {// Syntax error if dirtyPayload is invalid xml
-      }
-    }
-
-    var body = doc.body || doc.documentElement;
-
-    if (dirty && leadingWhitespace) {
-      body.insertBefore(document.createTextNode(leadingWhitespace), body.childNodes[0] || null);
-    }
-    /* Work on whole document or just its body */
-
-
-    if (NAMESPACE === HTML_NAMESPACE) {
-      return getElementsByTagName.call(doc, WHOLE_DOCUMENT ? 'html' : 'body')[0];
-    }
-
-    return WHOLE_DOCUMENT ? doc.documentElement : body;
-  };
-  /**
-   * _createIterator
-   *
-   * @param  {Document} root document/fragment to create iterator for
-   * @return {Iterator} iterator instance
-   */
-
-
-  var _createIterator = function _createIterator(root) {
-    return createNodeIterator.call(root.ownerDocument || root, root, // eslint-disable-next-line no-bitwise
-    NodeFilter.SHOW_ELEMENT | NodeFilter.SHOW_COMMENT | NodeFilter.SHOW_TEXT, null, false);
-  };
-  /**
-   * _isClobbered
-   *
-   * @param  {Node} elm element to check for clobbering attacks
-   * @return {Boolean} true if clobbered, false if safe
-   */
-
-
-  var _isClobbered = function _isClobbered(elm) {
-    return elm instanceof HTMLFormElement && (typeof elm.nodeName !== 'string' || typeof elm.textContent !== 'string' || typeof elm.removeChild !== 'function' || !(elm.attributes instanceof NamedNodeMap) || typeof elm.removeAttribute !== 'function' || typeof elm.setAttribute !== 'function' || typeof elm.namespaceURI !== 'string' || typeof elm.insertBefore !== 'function' || typeof elm.hasChildNodes !== 'function');
-  };
-  /**
-   * _isNode
-   *
-   * @param  {Node} obj object to check whether it's a DOM node
-   * @return {Boolean} true is object is a DOM node
-   */
-
-
-  var _isNode = function _isNode(object) {
-    return _typeof(Node) === 'object' ? object instanceof Node : object && _typeof(object) === 'object' && typeof object.nodeType === 'number' && typeof object.nodeName === 'string';
-  };
-  /**
-   * _executeHook
-   * Execute user configurable hooks
-   *
-   * @param  {String} entryPoint  Name of the hook's entry point
-   * @param  {Node} currentNode node to work on with the hook
-   * @param  {Object} data additional hook parameters
-   */
-
-
-  var _executeHook = function _executeHook(entryPoint, currentNode, data) {
-    if (!hooks[entryPoint]) {
-      return;
-    }
-
-    arrayForEach(hooks[entryPoint], function (hook) {
-      hook.call(DOMPurify, currentNode, data, CONFIG);
-    });
-  };
-  /**
-   * _sanitizeElements
-   *
-   * @protect nodeName
-   * @protect textContent
-   * @protect removeChild
-   *
-   * @param   {Node} currentNode to check for permission to exist
-   * @return  {Boolean} true if node was killed, false if left alive
-   */
-
-
-  var _sanitizeElements = function _sanitizeElements(currentNode) {
-    var content;
-    /* Execute a hook if present */
-
-    _executeHook('beforeSanitizeElements', currentNode, null);
-    /* Check if element is clobbered or can clobber */
-
-
-    if (_isClobbered(currentNode)) {
-      _forceRemove(currentNode);
-
-      return true;
-    }
-    /* Check if tagname contains Unicode */
-
-
-    if (regExpTest(/[\u0080-\uFFFF]/, currentNode.nodeName)) {
-      _forceRemove(currentNode);
-
-      return true;
-    }
-    /* Now let's check the element's type and name */
-
-
-    var tagName = transformCaseFunc(currentNode.nodeName);
-    /* Execute a hook if present */
-
-    _executeHook('uponSanitizeElement', currentNode, {
-      tagName: tagName,
-      allowedTags: ALLOWED_TAGS
-    });
-    /* Detect mXSS attempts abusing namespace confusion */
-
-
-    if (currentNode.hasChildNodes() && !_isNode(currentNode.firstElementChild) && (!_isNode(currentNode.content) || !_isNode(currentNode.content.firstElementChild)) && regExpTest(/<[/\w]/g, currentNode.innerHTML) && regExpTest(/<[/\w]/g, currentNode.textContent)) {
-      _forceRemove(currentNode);
-
-      return true;
-    }
-    /* Mitigate a problem with templates inside select */
-
-
-    if (tagName === 'select' && regExpTest(/<template/i, currentNode.innerHTML)) {
-      _forceRemove(currentNode);
-
-      return true;
-    }
-    /* Remove element if anything forbids its presence */
-
-
-    if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
-      /* Check if we have a custom element to handle */
-      if (!FORBID_TAGS[tagName] && _basicCustomElementTest(tagName)) {
-        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, tagName)) return false;
-        if (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(tagName)) return false;
-      }
-      /* Keep content except for bad-listed elements */
-
-
-      if (KEEP_CONTENT && !FORBID_CONTENTS[tagName]) {
-        var parentNode = getParentNode(currentNode) || currentNode.parentNode;
-        var childNodes = getChildNodes(currentNode) || currentNode.childNodes;
-
-        if (childNodes && parentNode) {
-          var childCount = childNodes.length;
-
-          for (var i = childCount - 1; i >= 0; --i) {
-            parentNode.insertBefore(cloneNode(childNodes[i], true), getNextSibling(currentNode));
-          }
-        }
-      }
-
-      _forceRemove(currentNode);
-
-      return true;
-    }
-    /* Check whether element has a valid namespace */
-
-
-    if (currentNode instanceof Element && !_checkValidNamespace(currentNode)) {
-      _forceRemove(currentNode);
-
-      return true;
-    }
-
-    if ((tagName === 'noscript' || tagName === 'noembed') && regExpTest(/<\/no(script|embed)/i, currentNode.innerHTML)) {
-      _forceRemove(currentNode);
-
-      return true;
-    }
-    /* Sanitize element content to be template-safe */
-
-
-    if (SAFE_FOR_TEMPLATES && currentNode.nodeType === 3) {
-      /* Get the element's text content */
-      content = currentNode.textContent;
-      content = stringReplace(content, MUSTACHE_EXPR$1, ' ');
-      content = stringReplace(content, ERB_EXPR$1, ' ');
-      content = stringReplace(content, TMPLIT_EXPR$1, ' ');
-
-      if (currentNode.textContent !== content) {
-        arrayPush(DOMPurify.removed, {
-          element: currentNode.cloneNode()
-        });
-        currentNode.textContent = content;
-      }
-    }
-    /* Execute a hook if present */
-
-
-    _executeHook('afterSanitizeElements', currentNode, null);
-
-    return false;
-  };
-  /**
-   * _isValidAttribute
-   *
-   * @param  {string} lcTag Lowercase tag name of containing element.
-   * @param  {string} lcName Lowercase attribute name.
-   * @param  {string} value Attribute value.
-   * @return {Boolean} Returns true if `value` is valid, otherwise false.
-   */
-  // eslint-disable-next-line complexity
-
-
-  var _isValidAttribute = function _isValidAttribute(lcTag, lcName, value) {
-    /* Make sure attribute cannot clobber */
-    if (SANITIZE_DOM && (lcName === 'id' || lcName === 'name') && (value in document || value in formElement)) {
-      return false;
-    }
-    /* Allow valid data-* attributes: At least one character after "-"
-        (https://html.spec.whatwg.org/multipage/dom.html#embedding-custom-non-visible-data-with-the-data-*-attributes)
-        XML-compatible (https://html.spec.whatwg.org/multipage/infrastructure.html#xml-compatible and http://www.w3.org/TR/xml/#d0e804)
-        We don't need to check the value; it's always URI safe. */
-
-
-    if (ALLOW_DATA_ATTR && !FORBID_ATTR[lcName] && regExpTest(DATA_ATTR$1, lcName)) ; else if (ALLOW_ARIA_ATTR && regExpTest(ARIA_ATTR$1, lcName)) ; else if (!ALLOWED_ATTR[lcName] || FORBID_ATTR[lcName]) {
-      if ( // First condition does a very basic check if a) it's basically a valid custom element tagname AND
-      // b) if the tagName passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
-      // and c) if the attribute name passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.attributeNameCheck
-      _basicCustomElementTest(lcTag) && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, lcTag) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(lcTag)) && (CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.attributeNameCheck, lcName) || CUSTOM_ELEMENT_HANDLING.attributeNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.attributeNameCheck(lcName)) || // Alternative, second condition checks if it's an `is`-attribute, AND
-      // the value passes whatever the user has configured for CUSTOM_ELEMENT_HANDLING.tagNameCheck
-      lcName === 'is' && CUSTOM_ELEMENT_HANDLING.allowCustomizedBuiltInElements && (CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof RegExp && regExpTest(CUSTOM_ELEMENT_HANDLING.tagNameCheck, value) || CUSTOM_ELEMENT_HANDLING.tagNameCheck instanceof Function && CUSTOM_ELEMENT_HANDLING.tagNameCheck(value))) ; else {
-        return false;
-      }
-      /* Check value is safe. First, is attr inert? If so, is safe */
-
-    } else if (URI_SAFE_ATTRIBUTES[lcName]) ; else if (regExpTest(IS_ALLOWED_URI$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if ((lcName === 'src' || lcName === 'xlink:href' || lcName === 'href') && lcTag !== 'script' && stringIndexOf(value, 'data:') === 0 && DATA_URI_TAGS[lcTag]) ; else if (ALLOW_UNKNOWN_PROTOCOLS && !regExpTest(IS_SCRIPT_OR_DATA$1, stringReplace(value, ATTR_WHITESPACE$1, ''))) ; else if (!value) ; else {
-      return false;
-    }
-
-    return true;
-  };
-  /**
-   * _basicCustomElementCheck
-   * checks if at least one dash is included in tagName, and it's not the first char
-   * for more sophisticated checking see https://github.com/sindresorhus/validate-element-name
-   * @param {string} tagName name of the tag of the node to sanitize
-   */
-
-
-  var _basicCustomElementTest = function _basicCustomElementTest(tagName) {
-    return tagName.indexOf('-') > 0;
-  };
-  /**
-   * _sanitizeAttributes
-   *
-   * @protect attributes
-   * @protect nodeName
-   * @protect removeAttribute
-   * @protect setAttribute
-   *
-   * @param  {Node} currentNode to sanitize
-   */
-
-
-  var _sanitizeAttributes = function _sanitizeAttributes(currentNode) {
-    var attr;
-    var value;
-    var lcName;
-    var l;
-    /* Execute a hook if present */
-
-    _executeHook('beforeSanitizeAttributes', currentNode, null);
-
-    var attributes = currentNode.attributes;
-    /* Check if we have attributes; if not we might have a text node */
-
-    if (!attributes) {
-      return;
-    }
-
-    var hookEvent = {
-      attrName: '',
-      attrValue: '',
-      keepAttr: true,
-      allowedAttributes: ALLOWED_ATTR
-    };
-    l = attributes.length;
-    /* Go backwards over all attributes; safely remove bad ones */
-
-    while (l--) {
-      attr = attributes[l];
-      var _attr = attr,
-          name = _attr.name,
-          namespaceURI = _attr.namespaceURI;
-      value = name === 'value' ? attr.value : stringTrim(attr.value);
-      lcName = transformCaseFunc(name);
-      /* Execute a hook if present */
-
-      hookEvent.attrName = lcName;
-      hookEvent.attrValue = value;
-      hookEvent.keepAttr = true;
-      hookEvent.forceKeepAttr = undefined; // Allows developers to see this is a property they can set
-
-      _executeHook('uponSanitizeAttribute', currentNode, hookEvent);
-
-      value = hookEvent.attrValue;
-      /* Did the hooks approve of the attribute? */
-
-      if (hookEvent.forceKeepAttr) {
-        continue;
-      }
-      /* Remove attribute */
-
-
-      _removeAttribute(name, currentNode);
-      /* Did the hooks approve of the attribute? */
-
-
-      if (!hookEvent.keepAttr) {
-        continue;
-      }
-      /* Work around a security issue in jQuery 3.0 */
-
-
-      if (regExpTest(/\/>/i, value)) {
-        _removeAttribute(name, currentNode);
-
-        continue;
-      }
-      /* Sanitize attribute content to be template-safe */
-
-
-      if (SAFE_FOR_TEMPLATES) {
-        value = stringReplace(value, MUSTACHE_EXPR$1, ' ');
-        value = stringReplace(value, ERB_EXPR$1, ' ');
-        value = stringReplace(value, TMPLIT_EXPR$1, ' ');
-      }
-      /* Is `value` valid for this attribute? */
-
-
-      var lcTag = transformCaseFunc(currentNode.nodeName);
-
-      if (!_isValidAttribute(lcTag, lcName, value)) {
-        continue;
-      }
-      /* Full DOM Clobbering protection via namespace isolation,
-       * Prefix id and name attributes with `user-content-`
-       */
-
-
-      if (SANITIZE_NAMED_PROPS && (lcName === 'id' || lcName === 'name')) {
-        // Remove the attribute with this value
-        _removeAttribute(name, currentNode); // Prefix the value and later re-create the attribute with the sanitized value
-
-
-        value = SANITIZE_NAMED_PROPS_PREFIX + value;
-      }
-      /* Handle attributes that require Trusted Types */
-
-
-      if (trustedTypesPolicy && _typeof(trustedTypes) === 'object' && typeof trustedTypes.getAttributeType === 'function') {
-        if (namespaceURI) ; else {
-          switch (trustedTypes.getAttributeType(lcTag, lcName)) {
-            case 'TrustedHTML':
-              value = trustedTypesPolicy.createHTML(value);
-              break;
-
-            case 'TrustedScriptURL':
-              value = trustedTypesPolicy.createScriptURL(value);
-              break;
-          }
-        }
-      }
-      /* Handle invalid data-* attribute set by try-catching it */
-
-
-      try {
-        if (namespaceURI) {
-          currentNode.setAttributeNS(namespaceURI, name, value);
-        } else {
-          /* Fallback to setAttribute() for browser-unrecognized namespaces e.g. "x-schema". */
-          currentNode.setAttribute(name, value);
-        }
-
-        arrayPop(DOMPurify.removed);
-      } catch (_) {}
-    }
-    /* Execute a hook if present */
-
-
-    _executeHook('afterSanitizeAttributes', currentNode, null);
-  };
-  /**
-   * _sanitizeShadowDOM
-   *
-   * @param  {DocumentFragment} fragment to iterate over recursively
-   */
-
-
-  var _sanitizeShadowDOM = function _sanitizeShadowDOM(fragment) {
-    var shadowNode;
-
-    var shadowIterator = _createIterator(fragment);
-    /* Execute a hook if present */
-
-
-    _executeHook('beforeSanitizeShadowDOM', fragment, null);
-
-    while (shadowNode = shadowIterator.nextNode()) {
-      /* Execute a hook if present */
-      _executeHook('uponSanitizeShadowNode', shadowNode, null);
-      /* Sanitize tags and elements */
-
-
-      if (_sanitizeElements(shadowNode)) {
-        continue;
-      }
-      /* Deep shadow DOM detected */
-
-
-      if (shadowNode.content instanceof DocumentFragment) {
-        _sanitizeShadowDOM(shadowNode.content);
-      }
-      /* Check attributes, sanitize if necessary */
-
-
-      _sanitizeAttributes(shadowNode);
-    }
-    /* Execute a hook if present */
-
-
-    _executeHook('afterSanitizeShadowDOM', fragment, null);
-  };
-  /**
-   * Sanitize
-   * Public method providing core sanitation functionality
-   *
-   * @param {String|Node} dirty string or DOM node
-   * @param {Object} configuration object
-   */
-  // eslint-disable-next-line complexity
-
-
-  DOMPurify.sanitize = function (dirty) {
-    var cfg = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
-    var body;
-    var importedNode;
-    var currentNode;
-    var oldNode;
-    var returnNode;
-    /* Make sure we have a string to sanitize.
-      DO NOT return early, as this will return the wrong type if
-      the user has requested a DOM object rather than a string */
-
-    IS_EMPTY_INPUT = !dirty;
-
-    if (IS_EMPTY_INPUT) {
-      dirty = '<!-->';
-    }
-    /* Stringify, in case dirty is an object */
-
-
-    if (typeof dirty !== 'string' && !_isNode(dirty)) {
-      // eslint-disable-next-line no-negated-condition
-      if (typeof dirty.toString !== 'function') {
-        throw typeErrorCreate('toString is not a function');
-      } else {
-        dirty = dirty.toString();
-
-        if (typeof dirty !== 'string') {
-          throw typeErrorCreate('dirty is not a string, aborting');
-        }
-      }
-    }
-    /* Check we can run. Otherwise fall back or ignore */
-
-
-    if (!DOMPurify.isSupported) {
-      if (_typeof(window.toStaticHTML) === 'object' || typeof window.toStaticHTML === 'function') {
-        if (typeof dirty === 'string') {
-          return window.toStaticHTML(dirty);
-        }
-
-        if (_isNode(dirty)) {
-          return window.toStaticHTML(dirty.outerHTML);
-        }
-      }
-
-      return dirty;
-    }
-    /* Assign config vars */
-
-
-    if (!SET_CONFIG) {
-      _parseConfig(cfg);
-    }
-    /* Clean up removed elements */
-
-
-    DOMPurify.removed = [];
-    /* Check if dirty is correctly typed for IN_PLACE */
-
-    if (typeof dirty === 'string') {
-      IN_PLACE = false;
-    }
-
-    if (IN_PLACE) {
-      /* Do some early pre-sanitization to avoid unsafe root nodes */
-      if (dirty.nodeName) {
-        var tagName = transformCaseFunc(dirty.nodeName);
-
-        if (!ALLOWED_TAGS[tagName] || FORBID_TAGS[tagName]) {
-          throw typeErrorCreate('root node is forbidden and cannot be sanitized in-place');
-        }
-      }
-    } else if (dirty instanceof Node) {
-      /* If dirty is a DOM element, append to an empty document to avoid
-         elements being stripped by the parser */
-      body = _initDocument('<!---->');
-      importedNode = body.ownerDocument.importNode(dirty, true);
-
-      if (importedNode.nodeType === 1 && importedNode.nodeName === 'BODY') {
-        /* Node is already a body, use as is */
-        body = importedNode;
-      } else if (importedNode.nodeName === 'HTML') {
-        body = importedNode;
-      } else {
-        // eslint-disable-next-line unicorn/prefer-dom-node-append
-        body.appendChild(importedNode);
-      }
-    } else {
-      /* Exit directly if we have nothing to do */
-      if (!RETURN_DOM && !SAFE_FOR_TEMPLATES && !WHOLE_DOCUMENT && // eslint-disable-next-line unicorn/prefer-includes
-      dirty.indexOf('<') === -1) {
-        return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(dirty) : dirty;
-      }
-      /* Initialize the document to work on */
-
-
-      body = _initDocument(dirty);
-      /* Check we have a DOM node from the data */
-
-      if (!body) {
-        return RETURN_DOM ? null : RETURN_TRUSTED_TYPE ? emptyHTML : '';
-      }
-    }
-    /* Remove first element node (ours) if FORCE_BODY is set */
-
-
-    if (body && FORCE_BODY) {
-      _forceRemove(body.firstChild);
-    }
-    /* Get node iterator */
-
-
-    var nodeIterator = _createIterator(IN_PLACE ? dirty : body);
-    /* Now start iterating over the created document */
-
-
-    while (currentNode = nodeIterator.nextNode()) {
-      /* Fix IE's strange behavior with manipulated textNodes #89 */
-      if (currentNode.nodeType === 3 && currentNode === oldNode) {
-        continue;
-      }
-      /* Sanitize tags and elements */
-
-
-      if (_sanitizeElements(currentNode)) {
-        continue;
-      }
-      /* Shadow DOM detected, sanitize it */
-
-
-      if (currentNode.content instanceof DocumentFragment) {
-        _sanitizeShadowDOM(currentNode.content);
-      }
-      /* Check attributes, sanitize if necessary */
-
-
-      _sanitizeAttributes(currentNode);
-
-      oldNode = currentNode;
-    }
-
-    oldNode = null;
-    /* If we sanitized `dirty` in-place, return it. */
-
-    if (IN_PLACE) {
-      return dirty;
-    }
-    /* Return sanitized string or DOM */
-
-
-    if (RETURN_DOM) {
-      if (RETURN_DOM_FRAGMENT) {
-        returnNode = createDocumentFragment.call(body.ownerDocument);
-
-        while (body.firstChild) {
-          // eslint-disable-next-line unicorn/prefer-dom-node-append
-          returnNode.appendChild(body.firstChild);
-        }
-      } else {
-        returnNode = body;
-      }
-
-      if (ALLOWED_ATTR.shadowroot) {
-        /*
-          AdoptNode() is not used because internal state is not reset
-          (e.g. the past names map of a HTMLFormElement), this is safe
-          in theory but we would rather not risk another attack vector.
-          The state that is cloned by importNode() is explicitly defined
-          by the specs.
-        */
-        returnNode = importNode.call(originalDocument, returnNode, true);
-      }
-
-      return returnNode;
-    }
-
-    var serializedHTML = WHOLE_DOCUMENT ? body.outerHTML : body.innerHTML;
-    /* Serialize doctype if allowed */
-
-    if (WHOLE_DOCUMENT && ALLOWED_TAGS['!doctype'] && body.ownerDocument && body.ownerDocument.doctype && body.ownerDocument.doctype.name && regExpTest(DOCTYPE_NAME, body.ownerDocument.doctype.name)) {
-      serializedHTML = '<!DOCTYPE ' + body.ownerDocument.doctype.name + '>\n' + serializedHTML;
-    }
-    /* Sanitize final string template-safe */
-
-
-    if (SAFE_FOR_TEMPLATES) {
-      serializedHTML = stringReplace(serializedHTML, MUSTACHE_EXPR$1, ' ');
-      serializedHTML = stringReplace(serializedHTML, ERB_EXPR$1, ' ');
-      serializedHTML = stringReplace(serializedHTML, TMPLIT_EXPR$1, ' ');
-    }
-
-    return trustedTypesPolicy && RETURN_TRUSTED_TYPE ? trustedTypesPolicy.createHTML(serializedHTML) : serializedHTML;
-  };
-  /**
-   * Public method to set the configuration once
-   * setConfig
-   *
-   * @param {Object} cfg configuration object
-   */
-
-
-  DOMPurify.setConfig = function (cfg) {
-    _parseConfig(cfg);
-
-    SET_CONFIG = true;
-  };
-  /**
-   * Public method to remove the configuration
-   * clearConfig
-   *
-   */
-
-
-  DOMPurify.clearConfig = function () {
-    CONFIG = null;
-    SET_CONFIG = false;
-  };
-  /**
-   * Public method to check if an attribute value is valid.
-   * Uses last set config, if any. Otherwise, uses config defaults.
-   * isValidAttribute
-   *
-   * @param  {string} tag Tag name of containing element.
-   * @param  {string} attr Attribute name.
-   * @param  {string} value Attribute value.
-   * @return {Boolean} Returns true if `value` is valid. Otherwise, returns false.
-   */
-
-
-  DOMPurify.isValidAttribute = function (tag, attr, value) {
-    /* Initialize shared config vars if necessary. */
-    if (!CONFIG) {
-      _parseConfig({});
-    }
-
-    var lcTag = transformCaseFunc(tag);
-    var lcName = transformCaseFunc(attr);
-    return _isValidAttribute(lcTag, lcName, value);
-  };
-  /**
-   * AddHook
-   * Public method to add DOMPurify hooks
-   *
-   * @param {String} entryPoint entry point for the hook to add
-   * @param {Function} hookFunction function to execute
-   */
-
-
-  DOMPurify.addHook = function (entryPoint, hookFunction) {
-    if (typeof hookFunction !== 'function') {
-      return;
-    }
-
-    hooks[entryPoint] = hooks[entryPoint] || [];
-    arrayPush(hooks[entryPoint], hookFunction);
-  };
-  /**
-   * RemoveHook
-   * Public method to remove a DOMPurify hook at a given entryPoint
-   * (pops it from the stack of hooks if more are present)
-   *
-   * @param {String} entryPoint entry point for the hook to remove
-   * @return {Function} removed(popped) hook
-   */
-
-
-  DOMPurify.removeHook = function (entryPoint) {
-    if (hooks[entryPoint]) {
-      return arrayPop(hooks[entryPoint]);
-    }
-  };
-  /**
-   * RemoveHooks
-   * Public method to remove all DOMPurify hooks at a given entryPoint
-   *
-   * @param  {String} entryPoint entry point for the hooks to remove
-   */
-
-
-  DOMPurify.removeHooks = function (entryPoint) {
-    if (hooks[entryPoint]) {
-      hooks[entryPoint] = [];
-    }
-  };
-  /**
-   * RemoveAllHooks
-   * Public method to remove all DOMPurify hooks
-   *
-   */
-
-
-  DOMPurify.removeAllHooks = function () {
-    hooks = {};
-  };
-
-  return DOMPurify;
-}
-
-var purify = createDOMPurify();
-
-
-//# sourceMappingURL=purify.es.js.map
-
-
-/***/ }),
-
-/***/ 64063:
-/***/ ((module) => {
-
-"use strict";
-
-
-// do not edit .js files directly - edit src/index.jst
-
-
-
-module.exports = function equal(a, b) {
-  if (a === b) return true;
-
-  if (a && b && typeof a == 'object' && typeof b == 'object') {
-    if (a.constructor !== b.constructor) return false;
-
-    var length, i, keys;
-    if (Array.isArray(a)) {
-      length = a.length;
-      if (length != b.length) return false;
-      for (i = length; i-- !== 0;)
-        if (!equal(a[i], b[i])) return false;
-      return true;
-    }
-
-
-
-    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
-    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
-    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
-
-    keys = Object.keys(a);
-    length = keys.length;
-    if (length !== Object.keys(b).length) return false;
-
-    for (i = length; i-- !== 0;)
-      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
-
-    for (i = length; i-- !== 0;) {
-      var key = keys[i];
-
-      if (!equal(a[key], b[key])) return false;
-    }
-
-    return true;
-  }
-
-  // true if both NaN, false otherwise
-  return a!==a && b!==b;
-};
-
-
-/***/ }),
-
-/***/ 38252:
-/***/ ((module) => {
-
-"use strict";
-
-
-// do not edit .js files directly - edit src/index.jst
-
-
-
-module.exports = function equal(a, b) {
-  if (a === b) return true;
-
-  if (a && b && typeof a == 'object' && typeof b == 'object') {
-    if (a.constructor !== b.constructor) return false;
-
-    var length, i, keys;
-    if (Array.isArray(a)) {
-      length = a.length;
-      if (length != b.length) return false;
-      for (i = length; i-- !== 0;)
-        if (!equal(a[i], b[i])) return false;
-      return true;
-    }
-
-
-
-    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
-    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
-    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
-
-    keys = Object.keys(a);
-    length = keys.length;
-    if (length !== Object.keys(b).length) return false;
-
-    for (i = length; i-- !== 0;)
-      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
-
-    for (i = length; i-- !== 0;) {
-      var key = keys[i];
-
-      if (key === '_owner' && a.$$typeof) {
-        // React-specific: avoid traversing React elements' _owner.
-        //  _owner contains circular references
-        // and is not needed when comparing the actual elements (and not their owners)
-        continue;
-      }
-
-      if (!equal(a[key], b[key])) return false;
-    }
-
-    return true;
-  }
-
-  // true if both NaN, false otherwise
-  return a!==a && b!==b;
-};
-
-
-/***/ }),
-
-/***/ 99376:
-/***/ ((__unused_webpack_module, exports) => {
-
-var keyList = Object.keys;
-
-exports.D = function equal (a, b) {
-  if (a === b) return true;
-  if (!(a instanceof Object) || !(b instanceof Object)) return false;
-
-  var keys = keyList(a);
-  var length = keys.length;
-
-  for (var i = 0; i < length; i++)
-    if (!(keys[i] in b)) return false;
-
-  for (var i = 0; i < length; i++)
-    if (a[keys[i]] !== b[keys[i]]) return false;
-
-  return length === keyList(b).length;
-};
-
-
-/***/ }),
-
-/***/ 31769:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__webpack_require__.p + "assets/files/codex-whitepaper-ea67f8022ad84740b1f9bf3ba66b36ac.pdf");
-
-/***/ }),
-
-/***/ 83873:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const fs = __webpack_require__(20077)
-const path = __webpack_require__(71017)
-const mkdirsSync = (__webpack_require__(11381).mkdirsSync)
-const utimesMillisSync = (__webpack_require__(80318).utimesMillisSync)
-const stat = __webpack_require__(42733)
-
-function copySync (src, dest, opts) {
-  if (typeof opts === 'function') {
-    opts = { filter: opts }
-  }
-
-  opts = opts || {}
-  opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
-  opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber
-
-  // Warn about using preserveTimestamps on 32-bit node
-  if (opts.preserveTimestamps && process.arch === 'ia32') {
-    process.emitWarning(
-      'Using the preserveTimestamps option in 32-bit node is not recommended;\n\n' +
-      '\tsee https://github.com/jprichardson/node-fs-extra/issues/269',
-      'Warning', 'fs-extra-WARN0002'
-    )
-  }
-
-  const { srcStat, destStat } = stat.checkPathsSync(src, dest, 'copy', opts)
-  stat.checkParentPathsSync(src, srcStat, dest, 'copy')
-  return handleFilterAndCopy(destStat, src, dest, opts)
-}
-
-function handleFilterAndCopy (destStat, src, dest, opts) {
-  if (opts.filter && !opts.filter(src, dest)) return
-  const destParent = path.dirname(dest)
-  if (!fs.existsSync(destParent)) mkdirsSync(destParent)
-  return getStats(destStat, src, dest, opts)
-}
-
-function startCopy (destStat, src, dest, opts) {
-  if (opts.filter && !opts.filter(src, dest)) return
-  return getStats(destStat, src, dest, opts)
-}
-
-function getStats (destStat, src, dest, opts) {
-  const statSync = opts.dereference ? fs.statSync : fs.lstatSync
-  const srcStat = statSync(src)
-
-  if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts)
-  else if (srcStat.isFile() ||
-           srcStat.isCharacterDevice() ||
-           srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts)
-  else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts)
-  else if (srcStat.isSocket()) throw new Error(`Cannot copy a socket file: ${src}`)
-  else if (srcStat.isFIFO()) throw new Error(`Cannot copy a FIFO pipe: ${src}`)
-  throw new Error(`Unknown file: ${src}`)
-}
-
-function onFile (srcStat, destStat, src, dest, opts) {
-  if (!destStat) return copyFile(srcStat, src, dest, opts)
-  return mayCopyFile(srcStat, src, dest, opts)
-}
-
-function mayCopyFile (srcStat, src, dest, opts) {
-  if (opts.overwrite) {
-    fs.unlinkSync(dest)
-    return copyFile(srcStat, src, dest, opts)
-  } else if (opts.errorOnExist) {
-    throw new Error(`'${dest}' already exists`)
-  }
-}
-
-function copyFile (srcStat, src, dest, opts) {
-  fs.copyFileSync(src, dest)
-  if (opts.preserveTimestamps) handleTimestamps(srcStat.mode, src, dest)
-  return setDestMode(dest, srcStat.mode)
-}
-
-function handleTimestamps (srcMode, src, dest) {
-  // Make sure the file is writable before setting the timestamp
-  // otherwise open fails with EPERM when invoked with 'r+'
-  // (through utimes call)
-  if (fileIsNotWritable(srcMode)) makeFileWritable(dest, srcMode)
-  return setDestTimestamps(src, dest)
-}
-
-function fileIsNotWritable (srcMode) {
-  return (srcMode & 0o200) === 0
-}
-
-function makeFileWritable (dest, srcMode) {
-  return setDestMode(dest, srcMode | 0o200)
-}
-
-function setDestMode (dest, srcMode) {
-  return fs.chmodSync(dest, srcMode)
-}
-
-function setDestTimestamps (src, dest) {
-  // The initial srcStat.atime cannot be trusted
-  // because it is modified by the read(2) system call
-  // (See https://nodejs.org/api/fs.html#fs_stat_time_values)
-  const updatedSrcStat = fs.statSync(src)
-  return utimesMillisSync(dest, updatedSrcStat.atime, updatedSrcStat.mtime)
-}
-
-function onDir (srcStat, destStat, src, dest, opts) {
-  if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts)
-  return copyDir(src, dest, opts)
-}
-
-function mkDirAndCopy (srcMode, src, dest, opts) {
-  fs.mkdirSync(dest)
-  copyDir(src, dest, opts)
-  return setDestMode(dest, srcMode)
-}
-
-function copyDir (src, dest, opts) {
-  fs.readdirSync(src).forEach(item => copyDirItem(item, src, dest, opts))
-}
-
-function copyDirItem (item, src, dest, opts) {
-  const srcItem = path.join(src, item)
-  const destItem = path.join(dest, item)
-  const { destStat } = stat.checkPathsSync(srcItem, destItem, 'copy', opts)
-  return startCopy(destStat, srcItem, destItem, opts)
-}
-
-function onLink (destStat, src, dest, opts) {
-  let resolvedSrc = fs.readlinkSync(src)
-  if (opts.dereference) {
-    resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
-  }
-
-  if (!destStat) {
-    return fs.symlinkSync(resolvedSrc, dest)
-  } else {
-    let resolvedDest
-    try {
-      resolvedDest = fs.readlinkSync(dest)
-    } catch (err) {
-      // dest exists and is a regular file or directory,
-      // Windows may throw UNKNOWN error. If dest already exists,
-      // fs throws error anyway, so no need to guard against it here.
-      if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlinkSync(resolvedSrc, dest)
-      throw err
-    }
-    if (opts.dereference) {
-      resolvedDest = path.resolve(process.cwd(), resolvedDest)
-    }
-    if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
-      throw new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`)
-    }
-
-    // prevent copy if src is a subdir of dest since unlinking
-    // dest in this case would result in removing src contents
-    // and therefore a broken symlink would be created.
-    if (fs.statSync(dest).isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
-      throw new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`)
-    }
-    return copyLink(resolvedSrc, dest)
-  }
-}
-
-function copyLink (resolvedSrc, dest) {
-  fs.unlinkSync(dest)
-  return fs.symlinkSync(resolvedSrc, dest)
-}
-
-module.exports = copySync
-
-
-/***/ }),
-
-/***/ 67189:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const fs = __webpack_require__(20077)
-const path = __webpack_require__(71017)
-const mkdirs = (__webpack_require__(11381).mkdirs)
-const pathExists = (__webpack_require__(99257).pathExists)
-const utimesMillis = (__webpack_require__(80318).utimesMillis)
-const stat = __webpack_require__(42733)
-
-function copy (src, dest, opts, cb) {
-  if (typeof opts === 'function' && !cb) {
-    cb = opts
-    opts = {}
-  } else if (typeof opts === 'function') {
-    opts = { filter: opts }
-  }
-
-  cb = cb || function () {}
-  opts = opts || {}
-
-  opts.clobber = 'clobber' in opts ? !!opts.clobber : true // default to true for now
-  opts.overwrite = 'overwrite' in opts ? !!opts.overwrite : opts.clobber // overwrite falls back to clobber
-
-  // Warn about using preserveTimestamps on 32-bit node
-  if (opts.preserveTimestamps && process.arch === 'ia32') {
-    process.emitWarning(
-      'Using the preserveTimestamps option in 32-bit node is not recommended;\n\n' +
-      '\tsee https://github.com/jprichardson/node-fs-extra/issues/269',
-      'Warning', 'fs-extra-WARN0001'
-    )
-  }
-
-  stat.checkPaths(src, dest, 'copy', opts, (err, stats) => {
-    if (err) return cb(err)
-    const { srcStat, destStat } = stats
-    stat.checkParentPaths(src, srcStat, dest, 'copy', err => {
-      if (err) return cb(err)
-      if (opts.filter) return handleFilter(checkParentDir, destStat, src, dest, opts, cb)
-      return checkParentDir(destStat, src, dest, opts, cb)
-    })
-  })
-}
-
-function checkParentDir (destStat, src, dest, opts, cb) {
-  const destParent = path.dirname(dest)
-  pathExists(destParent, (err, dirExists) => {
-    if (err) return cb(err)
-    if (dirExists) return getStats(destStat, src, dest, opts, cb)
-    mkdirs(destParent, err => {
-      if (err) return cb(err)
-      return getStats(destStat, src, dest, opts, cb)
-    })
-  })
-}
-
-function handleFilter (onInclude, destStat, src, dest, opts, cb) {
-  Promise.resolve(opts.filter(src, dest)).then(include => {
-    if (include) return onInclude(destStat, src, dest, opts, cb)
-    return cb()
-  }, error => cb(error))
-}
-
-function startCopy (destStat, src, dest, opts, cb) {
-  if (opts.filter) return handleFilter(getStats, destStat, src, dest, opts, cb)
-  return getStats(destStat, src, dest, opts, cb)
-}
-
-function getStats (destStat, src, dest, opts, cb) {
-  const stat = opts.dereference ? fs.stat : fs.lstat
-  stat(src, (err, srcStat) => {
-    if (err) return cb(err)
-
-    if (srcStat.isDirectory()) return onDir(srcStat, destStat, src, dest, opts, cb)
-    else if (srcStat.isFile() ||
-             srcStat.isCharacterDevice() ||
-             srcStat.isBlockDevice()) return onFile(srcStat, destStat, src, dest, opts, cb)
-    else if (srcStat.isSymbolicLink()) return onLink(destStat, src, dest, opts, cb)
-    else if (srcStat.isSocket()) return cb(new Error(`Cannot copy a socket file: ${src}`))
-    else if (srcStat.isFIFO()) return cb(new Error(`Cannot copy a FIFO pipe: ${src}`))
-    return cb(new Error(`Unknown file: ${src}`))
-  })
-}
-
-function onFile (srcStat, destStat, src, dest, opts, cb) {
-  if (!destStat) return copyFile(srcStat, src, dest, opts, cb)
-  return mayCopyFile(srcStat, src, dest, opts, cb)
-}
-
-function mayCopyFile (srcStat, src, dest, opts, cb) {
-  if (opts.overwrite) {
-    fs.unlink(dest, err => {
-      if (err) return cb(err)
-      return copyFile(srcStat, src, dest, opts, cb)
-    })
-  } else if (opts.errorOnExist) {
-    return cb(new Error(`'${dest}' already exists`))
-  } else return cb()
-}
-
-function copyFile (srcStat, src, dest, opts, cb) {
-  fs.copyFile(src, dest, err => {
-    if (err) return cb(err)
-    if (opts.preserveTimestamps) return handleTimestampsAndMode(srcStat.mode, src, dest, cb)
-    return setDestMode(dest, srcStat.mode, cb)
-  })
-}
-
-function handleTimestampsAndMode (srcMode, src, dest, cb) {
-  // Make sure the file is writable before setting the timestamp
-  // otherwise open fails with EPERM when invoked with 'r+'
-  // (through utimes call)
-  if (fileIsNotWritable(srcMode)) {
-    return makeFileWritable(dest, srcMode, err => {
-      if (err) return cb(err)
-      return setDestTimestampsAndMode(srcMode, src, dest, cb)
-    })
-  }
-  return setDestTimestampsAndMode(srcMode, src, dest, cb)
-}
-
-function fileIsNotWritable (srcMode) {
-  return (srcMode & 0o200) === 0
-}
-
-function makeFileWritable (dest, srcMode, cb) {
-  return setDestMode(dest, srcMode | 0o200, cb)
-}
-
-function setDestTimestampsAndMode (srcMode, src, dest, cb) {
-  setDestTimestamps(src, dest, err => {
-    if (err) return cb(err)
-    return setDestMode(dest, srcMode, cb)
-  })
-}
-
-function setDestMode (dest, srcMode, cb) {
-  return fs.chmod(dest, srcMode, cb)
-}
-
-function setDestTimestamps (src, dest, cb) {
-  // The initial srcStat.atime cannot be trusted
-  // because it is modified by the read(2) system call
-  // (See https://nodejs.org/api/fs.html#fs_stat_time_values)
-  fs.stat(src, (err, updatedSrcStat) => {
-    if (err) return cb(err)
-    return utimesMillis(dest, updatedSrcStat.atime, updatedSrcStat.mtime, cb)
-  })
-}
-
-function onDir (srcStat, destStat, src, dest, opts, cb) {
-  if (!destStat) return mkDirAndCopy(srcStat.mode, src, dest, opts, cb)
-  return copyDir(src, dest, opts, cb)
-}
-
-function mkDirAndCopy (srcMode, src, dest, opts, cb) {
-  fs.mkdir(dest, err => {
-    if (err) return cb(err)
-    copyDir(src, dest, opts, err => {
-      if (err) return cb(err)
-      return setDestMode(dest, srcMode, cb)
-    })
-  })
-}
-
-function copyDir (src, dest, opts, cb) {
-  fs.readdir(src, (err, items) => {
-    if (err) return cb(err)
-    return copyDirItems(items, src, dest, opts, cb)
-  })
-}
-
-function copyDirItems (items, src, dest, opts, cb) {
-  const item = items.pop()
-  if (!item) return cb()
-  return copyDirItem(items, item, src, dest, opts, cb)
-}
-
-function copyDirItem (items, item, src, dest, opts, cb) {
-  const srcItem = path.join(src, item)
-  const destItem = path.join(dest, item)
-  stat.checkPaths(srcItem, destItem, 'copy', opts, (err, stats) => {
-    if (err) return cb(err)
-    const { destStat } = stats
-    startCopy(destStat, srcItem, destItem, opts, err => {
-      if (err) return cb(err)
-      return copyDirItems(items, src, dest, opts, cb)
-    })
-  })
-}
-
-function onLink (destStat, src, dest, opts, cb) {
-  fs.readlink(src, (err, resolvedSrc) => {
-    if (err) return cb(err)
-    if (opts.dereference) {
-      resolvedSrc = path.resolve(process.cwd(), resolvedSrc)
-    }
-
-    if (!destStat) {
-      return fs.symlink(resolvedSrc, dest, cb)
-    } else {
-      fs.readlink(dest, (err, resolvedDest) => {
-        if (err) {
-          // dest exists and is a regular file or directory,
-          // Windows may throw UNKNOWN error. If dest already exists,
-          // fs throws error anyway, so no need to guard against it here.
-          if (err.code === 'EINVAL' || err.code === 'UNKNOWN') return fs.symlink(resolvedSrc, dest, cb)
-          return cb(err)
-        }
-        if (opts.dereference) {
-          resolvedDest = path.resolve(process.cwd(), resolvedDest)
-        }
-        if (stat.isSrcSubdir(resolvedSrc, resolvedDest)) {
-          return cb(new Error(`Cannot copy '${resolvedSrc}' to a subdirectory of itself, '${resolvedDest}'.`))
-        }
-
-        // do not copy if src is a subdir of dest since unlinking
-        // dest in this case would result in removing src contents
-        // and therefore a broken symlink would be created.
-        if (destStat.isDirectory() && stat.isSrcSubdir(resolvedDest, resolvedSrc)) {
-          return cb(new Error(`Cannot overwrite '${resolvedDest}' with '${resolvedSrc}'.`))
-        }
-        return copyLink(resolvedSrc, dest, cb)
-      })
-    }
-  })
-}
-
-function copyLink (resolvedSrc, dest, cb) {
-  fs.unlink(dest, err => {
-    if (err) return cb(err)
-    return fs.symlink(resolvedSrc, dest, cb)
-  })
-}
-
-module.exports = copy
-
-
-/***/ }),
-
-/***/ 66464:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const u = (__webpack_require__(48930).fromCallback)
-module.exports = {
-  copy: u(__webpack_require__(67189)),
-  copySync: __webpack_require__(83873)
-}
-
-
-/***/ }),
-
-/***/ 15590:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const u = (__webpack_require__(48930).fromPromise)
-const fs = __webpack_require__(67749)
-const path = __webpack_require__(71017)
-const mkdir = __webpack_require__(11381)
-const remove = __webpack_require__(54542)
-
-const emptyDir = u(async function emptyDir (dir) {
-  let items
-  try {
-    items = await fs.readdir(dir)
-  } catch {
-    return mkdir.mkdirs(dir)
-  }
-
-  return Promise.all(items.map(item => remove.remove(path.join(dir, item))))
-})
-
-function emptyDirSync (dir) {
-  let items
-  try {
-    items = fs.readdirSync(dir)
-  } catch {
-    return mkdir.mkdirsSync(dir)
-  }
-
-  items.forEach(item => {
-    item = path.join(dir, item)
-    remove.removeSync(item)
-  })
-}
-
-module.exports = {
-  emptyDirSync,
-  emptydirSync: emptyDirSync,
-  emptyDir,
-  emptydir: emptyDir
-}
-
-
-/***/ }),
-
-/***/ 36530:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const u = (__webpack_require__(48930).fromCallback)
-const path = __webpack_require__(71017)
-const fs = __webpack_require__(20077)
-const mkdir = __webpack_require__(11381)
-
-function createFile (file, callback) {
-  function makeFile () {
-    fs.writeFile(file, '', err => {
-      if (err) return callback(err)
-      callback()
-    })
-  }
-
-  fs.stat(file, (err, stats) => { // eslint-disable-line handle-callback-err
-    if (!err && stats.isFile()) return callback()
-    const dir = path.dirname(file)
-    fs.stat(dir, (err, stats) => {
-      if (err) {
-        // if the directory doesn't exist, make it
-        if (err.code === 'ENOENT') {
-          return mkdir.mkdirs(dir, err => {
-            if (err) return callback(err)
-            makeFile()
-          })
-        }
-        return callback(err)
-      }
-
-      if (stats.isDirectory()) makeFile()
-      else {
-        // parent is not a directory
-        // This is just to cause an internal ENOTDIR error to be thrown
-        fs.readdir(dir, err => {
-          if (err) return callback(err)
-        })
-      }
-    })
-  })
-}
-
-function createFileSync (file) {
-  let stats
-  try {
-    stats = fs.statSync(file)
-  } catch {}
-  if (stats && stats.isFile()) return
-
-  const dir = path.dirname(file)
-  try {
-    if (!fs.statSync(dir).isDirectory()) {
-      // parent is not a directory
-      // This is just to cause an internal ENOTDIR error to be thrown
-      fs.readdirSync(dir)
-    }
-  } catch (err) {
-    // If the stat call above failed because the directory doesn't exist, create it
-    if (err && err.code === 'ENOENT') mkdir.mkdirsSync(dir)
-    else throw err
-  }
-
-  fs.writeFileSync(file, '')
-}
-
-module.exports = {
-  createFile: u(createFile),
-  createFileSync
-}
-
-
-/***/ }),
-
-/***/ 21720:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const { createFile, createFileSync } = __webpack_require__(36530)
-const { createLink, createLinkSync } = __webpack_require__(54147)
-const { createSymlink, createSymlinkSync } = __webpack_require__(83635)
-
-module.exports = {
-  // file
-  createFile,
-  createFileSync,
-  ensureFile: createFile,
-  ensureFileSync: createFileSync,
-  // link
-  createLink,
-  createLinkSync,
-  ensureLink: createLink,
-  ensureLinkSync: createLinkSync,
-  // symlink
-  createSymlink,
-  createSymlinkSync,
-  ensureSymlink: createSymlink,
-  ensureSymlinkSync: createSymlinkSync
-}
-
-
-/***/ }),
-
-/***/ 54147:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const u = (__webpack_require__(48930).fromCallback)
-const path = __webpack_require__(71017)
-const fs = __webpack_require__(20077)
-const mkdir = __webpack_require__(11381)
-const pathExists = (__webpack_require__(99257).pathExists)
-const { areIdentical } = __webpack_require__(42733)
-
-function createLink (srcpath, dstpath, callback) {
-  function makeLink (srcpath, dstpath) {
-    fs.link(srcpath, dstpath, err => {
-      if (err) return callback(err)
-      callback(null)
-    })
-  }
-
-  fs.lstat(dstpath, (_, dstStat) => {
-    fs.lstat(srcpath, (err, srcStat) => {
-      if (err) {
-        err.message = err.message.replace('lstat', 'ensureLink')
-        return callback(err)
-      }
-      if (dstStat && areIdentical(srcStat, dstStat)) return callback(null)
-
-      const dir = path.dirname(dstpath)
-      pathExists(dir, (err, dirExists) => {
-        if (err) return callback(err)
-        if (dirExists) return makeLink(srcpath, dstpath)
-        mkdir.mkdirs(dir, err => {
-          if (err) return callback(err)
-          makeLink(srcpath, dstpath)
-        })
-      })
-    })
-  })
-}
-
-function createLinkSync (srcpath, dstpath) {
-  let dstStat
-  try {
-    dstStat = fs.lstatSync(dstpath)
-  } catch {}
-
-  try {
-    const srcStat = fs.lstatSync(srcpath)
-    if (dstStat && areIdentical(srcStat, dstStat)) return
-  } catch (err) {
-    err.message = err.message.replace('lstat', 'ensureLink')
-    throw err
-  }
-
-  const dir = path.dirname(dstpath)
-  const dirExists = fs.existsSync(dir)
-  if (dirExists) return fs.linkSync(srcpath, dstpath)
-  mkdir.mkdirsSync(dir)
-
-  return fs.linkSync(srcpath, dstpath)
-}
-
-module.exports = {
-  createLink: u(createLink),
-  createLinkSync
-}
-
-
-/***/ }),
-
-/***/ 6072:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const path = __webpack_require__(71017)
-const fs = __webpack_require__(20077)
-const pathExists = (__webpack_require__(99257).pathExists)
-
-/**
- * Function that returns two types of paths, one relative to symlink, and one
- * relative to the current working directory. Checks if path is absolute or
- * relative. If the path is relative, this function checks if the path is
- * relative to symlink or relative to current working directory. This is an
- * initiative to find a smarter `srcpath` to supply when building symlinks.
- * This allows you to determine which path to use out of one of three possible
- * types of source paths. The first is an absolute path. This is detected by
- * `path.isAbsolute()`. When an absolute path is provided, it is checked to
- * see if it exists. If it does it's used, if not an error is returned
- * (callback)/ thrown (sync). The other two options for `srcpath` are a
- * relative url. By default Node's `fs.symlink` works by creating a symlink
- * using `dstpath` and expects the `srcpath` to be relative to the newly
- * created symlink. If you provide a `srcpath` that does not exist on the file
- * system it results in a broken symlink. To minimize this, the function
- * checks to see if the 'relative to symlink' source file exists, and if it
- * does it will use it. If it does not, it checks if there's a file that
- * exists that is relative to the current working directory, if does its used.
- * This preserves the expectations of the original fs.symlink spec and adds
- * the ability to pass in `relative to current working direcotry` paths.
- */
-
-function symlinkPaths (srcpath, dstpath, callback) {
-  if (path.isAbsolute(srcpath)) {
-    return fs.lstat(srcpath, (err) => {
-      if (err) {
-        err.message = err.message.replace('lstat', 'ensureSymlink')
-        return callback(err)
-      }
-      return callback(null, {
-        toCwd: srcpath,
-        toDst: srcpath
-      })
-    })
-  } else {
-    const dstdir = path.dirname(dstpath)
-    const relativeToDst = path.join(dstdir, srcpath)
-    return pathExists(relativeToDst, (err, exists) => {
-      if (err) return callback(err)
-      if (exists) {
-        return callback(null, {
-          toCwd: relativeToDst,
-          toDst: srcpath
-        })
-      } else {
-        return fs.lstat(srcpath, (err) => {
-          if (err) {
-            err.message = err.message.replace('lstat', 'ensureSymlink')
-            return callback(err)
-          }
-          return callback(null, {
-            toCwd: srcpath,
-            toDst: path.relative(dstdir, srcpath)
-          })
-        })
-      }
-    })
-  }
-}
-
-function symlinkPathsSync (srcpath, dstpath) {
-  let exists
-  if (path.isAbsolute(srcpath)) {
-    exists = fs.existsSync(srcpath)
-    if (!exists) throw new Error('absolute srcpath does not exist')
-    return {
-      toCwd: srcpath,
-      toDst: srcpath
-    }
-  } else {
-    const dstdir = path.dirname(dstpath)
-    const relativeToDst = path.join(dstdir, srcpath)
-    exists = fs.existsSync(relativeToDst)
-    if (exists) {
-      return {
-        toCwd: relativeToDst,
-        toDst: srcpath
-      }
-    } else {
-      exists = fs.existsSync(srcpath)
-      if (!exists) throw new Error('relative srcpath does not exist')
-      return {
-        toCwd: srcpath,
-        toDst: path.relative(dstdir, srcpath)
-      }
-    }
-  }
-}
-
-module.exports = {
-  symlinkPaths,
-  symlinkPathsSync
-}
-
-
-/***/ }),
-
-/***/ 89259:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const fs = __webpack_require__(20077)
-
-function symlinkType (srcpath, type, callback) {
-  callback = (typeof type === 'function') ? type : callback
-  type = (typeof type === 'function') ? false : type
-  if (type) return callback(null, type)
-  fs.lstat(srcpath, (err, stats) => {
-    if (err) return callback(null, 'file')
-    type = (stats && stats.isDirectory()) ? 'dir' : 'file'
-    callback(null, type)
-  })
-}
-
-function symlinkTypeSync (srcpath, type) {
-  let stats
-
-  if (type) return type
-  try {
-    stats = fs.lstatSync(srcpath)
-  } catch {
-    return 'file'
-  }
-  return (stats && stats.isDirectory()) ? 'dir' : 'file'
-}
-
-module.exports = {
-  symlinkType,
-  symlinkTypeSync
-}
-
-
-/***/ }),
-
-/***/ 83635:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const u = (__webpack_require__(48930).fromCallback)
-const path = __webpack_require__(71017)
-const fs = __webpack_require__(67749)
-const _mkdirs = __webpack_require__(11381)
-const mkdirs = _mkdirs.mkdirs
-const mkdirsSync = _mkdirs.mkdirsSync
-
-const _symlinkPaths = __webpack_require__(6072)
-const symlinkPaths = _symlinkPaths.symlinkPaths
-const symlinkPathsSync = _symlinkPaths.symlinkPathsSync
-
-const _symlinkType = __webpack_require__(89259)
-const symlinkType = _symlinkType.symlinkType
-const symlinkTypeSync = _symlinkType.symlinkTypeSync
-
-const pathExists = (__webpack_require__(99257).pathExists)
-
-const { areIdentical } = __webpack_require__(42733)
-
-function createSymlink (srcpath, dstpath, type, callback) {
-  callback = (typeof type === 'function') ? type : callback
-  type = (typeof type === 'function') ? false : type
-
-  fs.lstat(dstpath, (err, stats) => {
-    if (!err && stats.isSymbolicLink()) {
-      Promise.all([
-        fs.stat(srcpath),
-        fs.stat(dstpath)
-      ]).then(([srcStat, dstStat]) => {
-        if (areIdentical(srcStat, dstStat)) return callback(null)
-        _createSymlink(srcpath, dstpath, type, callback)
-      })
-    } else _createSymlink(srcpath, dstpath, type, callback)
-  })
-}
-
-function _createSymlink (srcpath, dstpath, type, callback) {
-  symlinkPaths(srcpath, dstpath, (err, relative) => {
-    if (err) return callback(err)
-    srcpath = relative.toDst
-    symlinkType(relative.toCwd, type, (err, type) => {
-      if (err) return callback(err)
-      const dir = path.dirname(dstpath)
-      pathExists(dir, (err, dirExists) => {
-        if (err) return callback(err)
-        if (dirExists) return fs.symlink(srcpath, dstpath, type, callback)
-        mkdirs(dir, err => {
-          if (err) return callback(err)
-          fs.symlink(srcpath, dstpath, type, callback)
-        })
-      })
-    })
-  })
-}
-
-function createSymlinkSync (srcpath, dstpath, type) {
-  let stats
-  try {
-    stats = fs.lstatSync(dstpath)
-  } catch {}
-  if (stats && stats.isSymbolicLink()) {
-    const srcStat = fs.statSync(srcpath)
-    const dstStat = fs.statSync(dstpath)
-    if (areIdentical(srcStat, dstStat)) return
-  }
-
-  const relative = symlinkPathsSync(srcpath, dstpath)
-  srcpath = relative.toDst
-  type = symlinkTypeSync(relative.toCwd, type)
-  const dir = path.dirname(dstpath)
-  const exists = fs.existsSync(dir)
-  if (exists) return fs.symlinkSync(srcpath, dstpath, type)
-  mkdirsSync(dir)
-  return fs.symlinkSync(srcpath, dstpath, type)
-}
-
-module.exports = {
-  createSymlink: u(createSymlink),
-  createSymlinkSync
-}
-
-
-/***/ }),
-
-/***/ 67749:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-// This is adapted from https://github.com/normalize/mz
-// Copyright (c) 2014-2016 Jonathan Ong me@jongleberry.com and Contributors
-const u = (__webpack_require__(48930).fromCallback)
-const fs = __webpack_require__(20077)
-
-const api = [
-  'access',
-  'appendFile',
-  'chmod',
-  'chown',
-  'close',
-  'copyFile',
-  'fchmod',
-  'fchown',
-  'fdatasync',
-  'fstat',
-  'fsync',
-  'ftruncate',
-  'futimes',
-  'lchmod',
-  'lchown',
-  'link',
-  'lstat',
-  'mkdir',
-  'mkdtemp',
-  'open',
-  'opendir',
-  'readdir',
-  'readFile',
-  'readlink',
-  'realpath',
-  'rename',
-  'rm',
-  'rmdir',
-  'stat',
-  'symlink',
-  'truncate',
-  'unlink',
-  'utimes',
-  'writeFile'
-].filter(key => {
-  // Some commands are not available on some systems. Ex:
-  // fs.opendir was added in Node.js v12.12.0
-  // fs.rm was added in Node.js v14.14.0
-  // fs.lchown is not available on at least some Linux
-  return typeof fs[key] === 'function'
-})
-
-// Export cloned fs:
-Object.assign(exports, fs)
-
-// Universalify async methods:
-api.forEach(method => {
-  exports[method] = u(fs[method])
-})
-
-// We differ from mz/fs in that we still ship the old, broken, fs.exists()
-// since we are a drop-in replacement for the native module
-exports.exists = function (filename, callback) {
-  if (typeof callback === 'function') {
-    return fs.exists(filename, callback)
-  }
-  return new Promise(resolve => {
-    return fs.exists(filename, resolve)
-  })
-}
-
-// fs.read(), fs.write(), & fs.writev() need special treatment due to multiple callback args
-
-exports.read = function (fd, buffer, offset, length, position, callback) {
-  if (typeof callback === 'function') {
-    return fs.read(fd, buffer, offset, length, position, callback)
-  }
-  return new Promise((resolve, reject) => {
-    fs.read(fd, buffer, offset, length, position, (err, bytesRead, buffer) => {
-      if (err) return reject(err)
-      resolve({ bytesRead, buffer })
-    })
-  })
-}
-
-// Function signature can be
-// fs.write(fd, buffer[, offset[, length[, position]]], callback)
-// OR
-// fs.write(fd, string[, position[, encoding]], callback)
-// We need to handle both cases, so we use ...args
-exports.write = function (fd, buffer, ...args) {
-  if (typeof args[args.length - 1] === 'function') {
-    return fs.write(fd, buffer, ...args)
-  }
-
-  return new Promise((resolve, reject) => {
-    fs.write(fd, buffer, ...args, (err, bytesWritten, buffer) => {
-      if (err) return reject(err)
-      resolve({ bytesWritten, buffer })
-    })
-  })
-}
-
-// fs.writev only available in Node v12.9.0+
-if (typeof fs.writev === 'function') {
-  // Function signature is
-  // s.writev(fd, buffers[, position], callback)
-  // We need to handle the optional arg, so we use ...args
-  exports.writev = function (fd, buffers, ...args) {
-    if (typeof args[args.length - 1] === 'function') {
-      return fs.writev(fd, buffers, ...args)
-    }
-
-    return new Promise((resolve, reject) => {
-      fs.writev(fd, buffers, ...args, (err, bytesWritten, buffers) => {
-        if (err) return reject(err)
-        resolve({ bytesWritten, buffers })
-      })
-    })
-  }
-}
-
-// fs.realpath.native sometimes not available if fs is monkey-patched
-if (typeof fs.realpath.native === 'function') {
-  exports.realpath.native = u(fs.realpath.native)
-} else {
-  process.emitWarning(
-    'fs.realpath.native is not a function. Is fs being monkey-patched?',
-    'Warning', 'fs-extra-WARN0003'
-  )
-}
-
-
-/***/ }),
-
-/***/ 55674:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-module.exports = {
-  // Export promiseified graceful-fs:
-  ...__webpack_require__(67749),
-  // Export extra methods:
-  ...__webpack_require__(66464),
-  ...__webpack_require__(15590),
-  ...__webpack_require__(21720),
-  ...__webpack_require__(46573),
-  ...__webpack_require__(11381),
-  ...__webpack_require__(80530),
-  ...__webpack_require__(54670),
-  ...__webpack_require__(99257),
-  ...__webpack_require__(54542)
-}
-
-
-/***/ }),
-
-/***/ 46573:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const u = (__webpack_require__(48930).fromPromise)
-const jsonFile = __webpack_require__(7183)
-
-jsonFile.outputJson = u(__webpack_require__(43508))
-jsonFile.outputJsonSync = __webpack_require__(39578)
-// aliases
-jsonFile.outputJSON = jsonFile.outputJson
-jsonFile.outputJSONSync = jsonFile.outputJsonSync
-jsonFile.writeJSON = jsonFile.writeJson
-jsonFile.writeJSONSync = jsonFile.writeJsonSync
-jsonFile.readJSON = jsonFile.readJson
-jsonFile.readJSONSync = jsonFile.readJsonSync
-
-module.exports = jsonFile
-
-
-/***/ }),
-
-/***/ 7183:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const jsonFile = __webpack_require__(96813)
-
-module.exports = {
-  // jsonfile exports
-  readJson: jsonFile.readFile,
-  readJsonSync: jsonFile.readFileSync,
-  writeJson: jsonFile.writeFile,
-  writeJsonSync: jsonFile.writeFileSync
-}
-
-
-/***/ }),
-
-/***/ 39578:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const { stringify } = __webpack_require__(96780)
-const { outputFileSync } = __webpack_require__(54670)
-
-function outputJsonSync (file, data, options) {
-  const str = stringify(data, options)
-
-  outputFileSync(file, str, options)
-}
-
-module.exports = outputJsonSync
-
-
-/***/ }),
-
-/***/ 43508:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const { stringify } = __webpack_require__(96780)
-const { outputFile } = __webpack_require__(54670)
-
-async function outputJson (file, data, options = {}) {
-  const str = stringify(data, options)
-
-  await outputFile(file, str, options)
-}
-
-module.exports = outputJson
-
-
-/***/ }),
-
-/***/ 11381:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-const u = (__webpack_require__(48930).fromPromise)
-const { makeDir: _makeDir, makeDirSync } = __webpack_require__(18233)
-const makeDir = u(_makeDir)
-
-module.exports = {
-  mkdirs: makeDir,
-  mkdirsSync: makeDirSync,
-  // alias
-  mkdirp: makeDir,
-  mkdirpSync: makeDirSync,
-  ensureDir: makeDir,
-  ensureDirSync: makeDirSync
-}
-
-
-/***/ }),
-
-/***/ 18233:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-const fs = __webpack_require__(67749)
-const { checkPath } = __webpack_require__(33468)
-
-const getMode = options => {
-  const defaults = { mode: 0o777 }
-  if (typeof options === 'number') return options
-  return ({ ...defaults, ...options }).mode
-}
-
-module.exports.makeDir = async (dir, options) => {
-  checkPath(dir)
-
-  return fs.mkdir(dir, {
-    mode: getMode(options),
-    recursive: true
-  })
-}
-
-module.exports.makeDirSync = (dir, options) => {
-  checkPath(dir)
-
-  return fs.mkdirSync(dir, {
-    mode: getMode(options),
-    recursive: true
-  })
-}
-
-
-/***/ }),
-
-/***/ 33468:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-// Adapted from https://github.com/sindresorhus/make-dir
-// Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
-// 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.
-
-const path = __webpack_require__(71017)
-
-// https://github.com/nodejs/node/issues/8987
-// https://github.com/libuv/libuv/pull/1088
-module.exports.checkPath = function checkPath (pth) {
-  if (process.platform === 'win32') {
-    const pathHasInvalidWinCharacters = /[<>:"|?*]/.test(pth.replace(path.parse(pth).root, ''))
-
-    if (pathHasInvalidWinCharacters) {
-      const error = new Error(`Path contains invalid characters: ${pth}`)
-      error.code = 'EINVAL'
-      throw error
-    }
-  }
-}
-
-
-/***/ }),
-
-/***/ 80530:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const u = (__webpack_require__(48930).fromCallback)
-module.exports = {
-  move: u(__webpack_require__(436)),
-  moveSync: __webpack_require__(43736)
-}
-
-
-/***/ }),
-
-/***/ 43736:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const fs = __webpack_require__(20077)
-const path = __webpack_require__(71017)
-const copySync = (__webpack_require__(66464).copySync)
-const removeSync = (__webpack_require__(54542).removeSync)
-const mkdirpSync = (__webpack_require__(11381).mkdirpSync)
-const stat = __webpack_require__(42733)
-
-function moveSync (src, dest, opts) {
-  opts = opts || {}
-  const overwrite = opts.overwrite || opts.clobber || false
-
-  const { srcStat, isChangingCase = false } = stat.checkPathsSync(src, dest, 'move', opts)
-  stat.checkParentPathsSync(src, srcStat, dest, 'move')
-  if (!isParentRoot(dest)) mkdirpSync(path.dirname(dest))
-  return doRename(src, dest, overwrite, isChangingCase)
-}
-
-function isParentRoot (dest) {
-  const parent = path.dirname(dest)
-  const parsedPath = path.parse(parent)
-  return parsedPath.root === parent
-}
-
-function doRename (src, dest, overwrite, isChangingCase) {
-  if (isChangingCase) return rename(src, dest, overwrite)
-  if (overwrite) {
-    removeSync(dest)
-    return rename(src, dest, overwrite)
-  }
-  if (fs.existsSync(dest)) throw new Error('dest already exists.')
-  return rename(src, dest, overwrite)
-}
-
-function rename (src, dest, overwrite) {
-  try {
-    fs.renameSync(src, dest)
-  } catch (err) {
-    if (err.code !== 'EXDEV') throw err
-    return moveAcrossDevice(src, dest, overwrite)
-  }
-}
-
-function moveAcrossDevice (src, dest, overwrite) {
-  const opts = {
-    overwrite,
-    errorOnExist: true
-  }
-  copySync(src, dest, opts)
-  return removeSync(src)
-}
-
-module.exports = moveSync
-
-
-/***/ }),
-
-/***/ 436:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const fs = __webpack_require__(20077)
-const path = __webpack_require__(71017)
-const copy = (__webpack_require__(66464).copy)
-const remove = (__webpack_require__(54542).remove)
-const mkdirp = (__webpack_require__(11381).mkdirp)
-const pathExists = (__webpack_require__(99257).pathExists)
-const stat = __webpack_require__(42733)
-
-function move (src, dest, opts, cb) {
-  if (typeof opts === 'function') {
-    cb = opts
-    opts = {}
-  }
-
-  opts = opts || {}
-
-  const overwrite = opts.overwrite || opts.clobber || false
-
-  stat.checkPaths(src, dest, 'move', opts, (err, stats) => {
-    if (err) return cb(err)
-    const { srcStat, isChangingCase = false } = stats
-    stat.checkParentPaths(src, srcStat, dest, 'move', err => {
-      if (err) return cb(err)
-      if (isParentRoot(dest)) return doRename(src, dest, overwrite, isChangingCase, cb)
-      mkdirp(path.dirname(dest), err => {
-        if (err) return cb(err)
-        return doRename(src, dest, overwrite, isChangingCase, cb)
-      })
-    })
-  })
-}
-
-function isParentRoot (dest) {
-  const parent = path.dirname(dest)
-  const parsedPath = path.parse(parent)
-  return parsedPath.root === parent
-}
-
-function doRename (src, dest, overwrite, isChangingCase, cb) {
-  if (isChangingCase) return rename(src, dest, overwrite, cb)
-  if (overwrite) {
-    return remove(dest, err => {
-      if (err) return cb(err)
-      return rename(src, dest, overwrite, cb)
-    })
-  }
-  pathExists(dest, (err, destExists) => {
-    if (err) return cb(err)
-    if (destExists) return cb(new Error('dest already exists.'))
-    return rename(src, dest, overwrite, cb)
-  })
-}
-
-function rename (src, dest, overwrite, cb) {
-  fs.rename(src, dest, err => {
-    if (!err) return cb()
-    if (err.code !== 'EXDEV') return cb(err)
-    return moveAcrossDevice(src, dest, overwrite, cb)
-  })
-}
-
-function moveAcrossDevice (src, dest, overwrite, cb) {
-  const opts = {
-    overwrite,
-    errorOnExist: true
-  }
-  copy(src, dest, opts, err => {
-    if (err) return cb(err)
-    return remove(src, cb)
-  })
-}
-
-module.exports = move
-
-
-/***/ }),
-
-/***/ 54670:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const u = (__webpack_require__(48930).fromCallback)
-const fs = __webpack_require__(20077)
-const path = __webpack_require__(71017)
-const mkdir = __webpack_require__(11381)
-const pathExists = (__webpack_require__(99257).pathExists)
-
-function outputFile (file, data, encoding, callback) {
-  if (typeof encoding === 'function') {
-    callback = encoding
-    encoding = 'utf8'
-  }
-
-  const dir = path.dirname(file)
-  pathExists(dir, (err, itDoes) => {
-    if (err) return callback(err)
-    if (itDoes) return fs.writeFile(file, data, encoding, callback)
-
-    mkdir.mkdirs(dir, err => {
-      if (err) return callback(err)
-
-      fs.writeFile(file, data, encoding, callback)
-    })
-  })
-}
-
-function outputFileSync (file, ...args) {
-  const dir = path.dirname(file)
-  if (fs.existsSync(dir)) {
-    return fs.writeFileSync(file, ...args)
-  }
-  mkdir.mkdirsSync(dir)
-  fs.writeFileSync(file, ...args)
-}
-
-module.exports = {
-  outputFile: u(outputFile),
-  outputFileSync
-}
-
-
-/***/ }),
-
-/***/ 99257:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-const u = (__webpack_require__(48930).fromPromise)
-const fs = __webpack_require__(67749)
-
-function pathExists (path) {
-  return fs.access(path).then(() => true).catch(() => false)
-}
-
-module.exports = {
-  pathExists: u(pathExists),
-  pathExistsSync: fs.existsSync
-}
-
-
-/***/ }),
-
-/***/ 54542:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const fs = __webpack_require__(20077)
-const u = (__webpack_require__(48930).fromCallback)
-const rimraf = __webpack_require__(33456)
-
-function remove (path, callback) {
-  // Node 14.14.0+
-  if (fs.rm) return fs.rm(path, { recursive: true, force: true }, callback)
-  rimraf(path, callback)
-}
-
-function removeSync (path) {
-  // Node 14.14.0+
-  if (fs.rmSync) return fs.rmSync(path, { recursive: true, force: true })
-  rimraf.sync(path)
-}
-
-module.exports = {
-  remove: u(remove),
-  removeSync
-}
-
-
-/***/ }),
-
-/***/ 33456:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const fs = __webpack_require__(20077)
-const path = __webpack_require__(71017)
-const assert = __webpack_require__(39491)
-
-const isWindows = (process.platform === 'win32')
-
-function defaults (options) {
-  const methods = [
-    'unlink',
-    'chmod',
-    'stat',
-    'lstat',
-    'rmdir',
-    'readdir'
-  ]
-  methods.forEach(m => {
-    options[m] = options[m] || fs[m]
-    m = m + 'Sync'
-    options[m] = options[m] || fs[m]
-  })
-
-  options.maxBusyTries = options.maxBusyTries || 3
-}
-
-function rimraf (p, options, cb) {
-  let busyTries = 0
-
-  if (typeof options === 'function') {
-    cb = options
-    options = {}
-  }
-
-  assert(p, 'rimraf: missing path')
-  assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
-  assert.strictEqual(typeof cb, 'function', 'rimraf: callback function required')
-  assert(options, 'rimraf: invalid options argument provided')
-  assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')
-
-  defaults(options)
-
-  rimraf_(p, options, function CB (er) {
-    if (er) {
-      if ((er.code === 'EBUSY' || er.code === 'ENOTEMPTY' || er.code === 'EPERM') &&
-          busyTries < options.maxBusyTries) {
-        busyTries++
-        const time = busyTries * 100
-        // try again, with the same exact callback as this one.
-        return setTimeout(() => rimraf_(p, options, CB), time)
-      }
-
-      // already gone
-      if (er.code === 'ENOENT') er = null
-    }
-
-    cb(er)
-  })
-}
-
-// Two possible strategies.
-// 1. Assume it's a file.  unlink it, then do the dir stuff on EPERM or EISDIR
-// 2. Assume it's a directory.  readdir, then do the file stuff on ENOTDIR
-//
-// Both result in an extra syscall when you guess wrong.  However, there
-// are likely far more normal files in the world than directories.  This
-// is based on the assumption that a the average number of files per
-// directory is >= 1.
-//
-// If anyone ever complains about this, then I guess the strategy could
-// be made configurable somehow.  But until then, YAGNI.
-function rimraf_ (p, options, cb) {
-  assert(p)
-  assert(options)
-  assert(typeof cb === 'function')
-
-  // sunos lets the root user unlink directories, which is... weird.
-  // so we have to lstat here and make sure it's not a dir.
-  options.lstat(p, (er, st) => {
-    if (er && er.code === 'ENOENT') {
-      return cb(null)
-    }
-
-    // Windows can EPERM on stat.  Life is suffering.
-    if (er && er.code === 'EPERM' && isWindows) {
-      return fixWinEPERM(p, options, er, cb)
-    }
-
-    if (st && st.isDirectory()) {
-      return rmdir(p, options, er, cb)
-    }
-
-    options.unlink(p, er => {
-      if (er) {
-        if (er.code === 'ENOENT') {
-          return cb(null)
-        }
-        if (er.code === 'EPERM') {
-          return (isWindows)
-            ? fixWinEPERM(p, options, er, cb)
-            : rmdir(p, options, er, cb)
-        }
-        if (er.code === 'EISDIR') {
-          return rmdir(p, options, er, cb)
-        }
-      }
-      return cb(er)
-    })
-  })
-}
-
-function fixWinEPERM (p, options, er, cb) {
-  assert(p)
-  assert(options)
-  assert(typeof cb === 'function')
-
-  options.chmod(p, 0o666, er2 => {
-    if (er2) {
-      cb(er2.code === 'ENOENT' ? null : er)
-    } else {
-      options.stat(p, (er3, stats) => {
-        if (er3) {
-          cb(er3.code === 'ENOENT' ? null : er)
-        } else if (stats.isDirectory()) {
-          rmdir(p, options, er, cb)
-        } else {
-          options.unlink(p, cb)
-        }
-      })
-    }
-  })
-}
-
-function fixWinEPERMSync (p, options, er) {
-  let stats
-
-  assert(p)
-  assert(options)
-
-  try {
-    options.chmodSync(p, 0o666)
-  } catch (er2) {
-    if (er2.code === 'ENOENT') {
-      return
-    } else {
-      throw er
-    }
-  }
-
-  try {
-    stats = options.statSync(p)
-  } catch (er3) {
-    if (er3.code === 'ENOENT') {
-      return
-    } else {
-      throw er
-    }
-  }
-
-  if (stats.isDirectory()) {
-    rmdirSync(p, options, er)
-  } else {
-    options.unlinkSync(p)
-  }
-}
-
-function rmdir (p, options, originalEr, cb) {
-  assert(p)
-  assert(options)
-  assert(typeof cb === 'function')
-
-  // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS)
-  // if we guessed wrong, and it's not a directory, then
-  // raise the original error.
-  options.rmdir(p, er => {
-    if (er && (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM')) {
-      rmkids(p, options, cb)
-    } else if (er && er.code === 'ENOTDIR') {
-      cb(originalEr)
-    } else {
-      cb(er)
-    }
-  })
-}
-
-function rmkids (p, options, cb) {
-  assert(p)
-  assert(options)
-  assert(typeof cb === 'function')
-
-  options.readdir(p, (er, files) => {
-    if (er) return cb(er)
-
-    let n = files.length
-    let errState
-
-    if (n === 0) return options.rmdir(p, cb)
-
-    files.forEach(f => {
-      rimraf(path.join(p, f), options, er => {
-        if (errState) {
-          return
-        }
-        if (er) return cb(errState = er)
-        if (--n === 0) {
-          options.rmdir(p, cb)
-        }
-      })
-    })
-  })
-}
-
-// this looks simpler, and is strictly *faster*, but will
-// tie up the JavaScript thread and fail on excessively
-// deep directory trees.
-function rimrafSync (p, options) {
-  let st
-
-  options = options || {}
-  defaults(options)
-
-  assert(p, 'rimraf: missing path')
-  assert.strictEqual(typeof p, 'string', 'rimraf: path should be a string')
-  assert(options, 'rimraf: missing options')
-  assert.strictEqual(typeof options, 'object', 'rimraf: options should be object')
-
-  try {
-    st = options.lstatSync(p)
-  } catch (er) {
-    if (er.code === 'ENOENT') {
-      return
-    }
-
-    // Windows can EPERM on stat.  Life is suffering.
-    if (er.code === 'EPERM' && isWindows) {
-      fixWinEPERMSync(p, options, er)
-    }
-  }
-
-  try {
-    // sunos lets the root user unlink directories, which is... weird.
-    if (st && st.isDirectory()) {
-      rmdirSync(p, options, null)
-    } else {
-      options.unlinkSync(p)
-    }
-  } catch (er) {
-    if (er.code === 'ENOENT') {
-      return
-    } else if (er.code === 'EPERM') {
-      return isWindows ? fixWinEPERMSync(p, options, er) : rmdirSync(p, options, er)
-    } else if (er.code !== 'EISDIR') {
-      throw er
-    }
-    rmdirSync(p, options, er)
-  }
-}
-
-function rmdirSync (p, options, originalEr) {
-  assert(p)
-  assert(options)
-
-  try {
-    options.rmdirSync(p)
-  } catch (er) {
-    if (er.code === 'ENOTDIR') {
-      throw originalEr
-    } else if (er.code === 'ENOTEMPTY' || er.code === 'EEXIST' || er.code === 'EPERM') {
-      rmkidsSync(p, options)
-    } else if (er.code !== 'ENOENT') {
-      throw er
-    }
-  }
-}
-
-function rmkidsSync (p, options) {
-  assert(p)
-  assert(options)
-  options.readdirSync(p).forEach(f => rimrafSync(path.join(p, f), options))
-
-  if (isWindows) {
-    // We only end up here once we got ENOTEMPTY at least once, and
-    // at this point, we are guaranteed to have removed all the kids.
-    // So, we know that it won't be ENOENT or ENOTDIR or anything else.
-    // try really hard to delete stuff on windows, because it has a
-    // PROFOUNDLY annoying habit of not closing handles promptly when
-    // files are deleted, resulting in spurious ENOTEMPTY errors.
-    const startTime = Date.now()
-    do {
-      try {
-        const ret = options.rmdirSync(p, options)
-        return ret
-      } catch {}
-    } while (Date.now() - startTime < 500) // give up after 500ms
-  } else {
-    const ret = options.rmdirSync(p, options)
-    return ret
-  }
-}
-
-module.exports = rimraf
-rimraf.sync = rimrafSync
-
-
-/***/ }),
-
-/***/ 42733:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const fs = __webpack_require__(67749)
-const path = __webpack_require__(71017)
-const util = __webpack_require__(73837)
-
-function getStats (src, dest, opts) {
-  const statFunc = opts.dereference
-    ? (file) => fs.stat(file, { bigint: true })
-    : (file) => fs.lstat(file, { bigint: true })
-  return Promise.all([
-    statFunc(src),
-    statFunc(dest).catch(err => {
-      if (err.code === 'ENOENT') return null
-      throw err
-    })
-  ]).then(([srcStat, destStat]) => ({ srcStat, destStat }))
-}
-
-function getStatsSync (src, dest, opts) {
-  let destStat
-  const statFunc = opts.dereference
-    ? (file) => fs.statSync(file, { bigint: true })
-    : (file) => fs.lstatSync(file, { bigint: true })
-  const srcStat = statFunc(src)
-  try {
-    destStat = statFunc(dest)
-  } catch (err) {
-    if (err.code === 'ENOENT') return { srcStat, destStat: null }
-    throw err
-  }
-  return { srcStat, destStat }
-}
-
-function checkPaths (src, dest, funcName, opts, cb) {
-  util.callbackify(getStats)(src, dest, opts, (err, stats) => {
-    if (err) return cb(err)
-    const { srcStat, destStat } = stats
-
-    if (destStat) {
-      if (areIdentical(srcStat, destStat)) {
-        const srcBaseName = path.basename(src)
-        const destBaseName = path.basename(dest)
-        if (funcName === 'move' &&
-          srcBaseName !== destBaseName &&
-          srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {
-          return cb(null, { srcStat, destStat, isChangingCase: true })
-        }
-        return cb(new Error('Source and destination must not be the same.'))
-      }
-      if (srcStat.isDirectory() && !destStat.isDirectory()) {
-        return cb(new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`))
-      }
-      if (!srcStat.isDirectory() && destStat.isDirectory()) {
-        return cb(new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`))
-      }
-    }
-
-    if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
-      return cb(new Error(errMsg(src, dest, funcName)))
-    }
-    return cb(null, { srcStat, destStat })
-  })
-}
-
-function checkPathsSync (src, dest, funcName, opts) {
-  const { srcStat, destStat } = getStatsSync(src, dest, opts)
-
-  if (destStat) {
-    if (areIdentical(srcStat, destStat)) {
-      const srcBaseName = path.basename(src)
-      const destBaseName = path.basename(dest)
-      if (funcName === 'move' &&
-        srcBaseName !== destBaseName &&
-        srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {
-        return { srcStat, destStat, isChangingCase: true }
-      }
-      throw new Error('Source and destination must not be the same.')
-    }
-    if (srcStat.isDirectory() && !destStat.isDirectory()) {
-      throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)
-    }
-    if (!srcStat.isDirectory() && destStat.isDirectory()) {
-      throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)
-    }
-  }
-
-  if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
-    throw new Error(errMsg(src, dest, funcName))
-  }
-  return { srcStat, destStat }
-}
-
-// recursively check if dest parent is a subdirectory of src.
-// It works for all file types including symlinks since it
-// checks the src and dest inodes. It starts from the deepest
-// parent and stops once it reaches the src parent or the root path.
-function checkParentPaths (src, srcStat, dest, funcName, cb) {
-  const srcParent = path.resolve(path.dirname(src))
-  const destParent = path.resolve(path.dirname(dest))
-  if (destParent === srcParent || destParent === path.parse(destParent).root) return cb()
-  fs.stat(destParent, { bigint: true }, (err, destStat) => {
-    if (err) {
-      if (err.code === 'ENOENT') return cb()
-      return cb(err)
-    }
-    if (areIdentical(srcStat, destStat)) {
-      return cb(new Error(errMsg(src, dest, funcName)))
-    }
-    return checkParentPaths(src, srcStat, destParent, funcName, cb)
-  })
-}
-
-function checkParentPathsSync (src, srcStat, dest, funcName) {
-  const srcParent = path.resolve(path.dirname(src))
-  const destParent = path.resolve(path.dirname(dest))
-  if (destParent === srcParent || destParent === path.parse(destParent).root) return
-  let destStat
-  try {
-    destStat = fs.statSync(destParent, { bigint: true })
-  } catch (err) {
-    if (err.code === 'ENOENT') return
-    throw err
-  }
-  if (areIdentical(srcStat, destStat)) {
-    throw new Error(errMsg(src, dest, funcName))
-  }
-  return checkParentPathsSync(src, srcStat, destParent, funcName)
-}
-
-function areIdentical (srcStat, destStat) {
-  return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev
-}
-
-// return true if dest is a subdir of src, otherwise false.
-// It only checks the path strings.
-function isSrcSubdir (src, dest) {
-  const srcArr = path.resolve(src).split(path.sep).filter(i => i)
-  const destArr = path.resolve(dest).split(path.sep).filter(i => i)
-  return srcArr.reduce((acc, cur, i) => acc && destArr[i] === cur, true)
-}
-
-function errMsg (src, dest, funcName) {
-  return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`
-}
-
-module.exports = {
-  checkPaths,
-  checkPathsSync,
-  checkParentPaths,
-  checkParentPathsSync,
-  isSrcSubdir,
-  areIdentical
-}
-
-
-/***/ }),
-
-/***/ 80318:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-const fs = __webpack_require__(20077)
-
-function utimesMillis (path, atime, mtime, callback) {
-  // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)
-  fs.open(path, 'r+', (err, fd) => {
-    if (err) return callback(err)
-    fs.futimes(fd, atime, mtime, futimesErr => {
-      fs.close(fd, closeErr => {
-        if (callback) callback(futimesErr || closeErr)
-      })
-    })
-  })
-}
-
-function utimesMillisSync (path, atime, mtime) {
-  const fd = fs.openSync(path, 'r+')
-  fs.futimesSync(fd, atime, mtime)
-  return fs.closeSync(fd)
-}
-
-module.exports = {
-  utimesMillis,
-  utimesMillisSync
-}
-
-
-/***/ }),
-
-/***/ 66458:
-/***/ ((module) => {
-
-"use strict";
-
-
-module.exports = clone
-
-var getPrototypeOf = Object.getPrototypeOf || function (obj) {
-  return obj.__proto__
-}
-
-function clone (obj) {
-  if (obj === null || typeof obj !== 'object')
-    return obj
-
-  if (obj instanceof Object)
-    var copy = { __proto__: getPrototypeOf(obj) }
-  else
-    var copy = Object.create(null)
-
-  Object.getOwnPropertyNames(obj).forEach(function (key) {
-    Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))
-  })
-
-  return copy
-}
-
-
-/***/ }),
-
-/***/ 20077:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var fs = __webpack_require__(57147)
-var polyfills = __webpack_require__(72161)
-var legacy = __webpack_require__(78520)
-var clone = __webpack_require__(66458)
-
-var util = __webpack_require__(73837)
-
-/* istanbul ignore next - node 0.x polyfill */
-var gracefulQueue
-var previousSymbol
-
-/* istanbul ignore else - node 0.x polyfill */
-if (typeof Symbol === 'function' && typeof Symbol.for === 'function') {
-  gracefulQueue = Symbol.for('graceful-fs.queue')
-  // This is used in testing by future versions
-  previousSymbol = Symbol.for('graceful-fs.previous')
-} else {
-  gracefulQueue = '___graceful-fs.queue'
-  previousSymbol = '___graceful-fs.previous'
-}
-
-function noop () {}
-
-function publishQueue(context, queue) {
-  Object.defineProperty(context, gracefulQueue, {
-    get: function() {
-      return queue
-    }
-  })
-}
-
-var debug = noop
-if (util.debuglog)
-  debug = util.debuglog('gfs4')
-else if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || ''))
-  debug = function() {
-    var m = util.format.apply(util, arguments)
-    m = 'GFS4: ' + m.split(/\n/).join('\nGFS4: ')
-    console.error(m)
-  }
-
-// Once time initialization
-if (!fs[gracefulQueue]) {
-  // This queue can be shared by multiple loaded instances
-  var queue = global[gracefulQueue] || []
-  publishQueue(fs, queue)
-
-  // Patch fs.close/closeSync to shared queue version, because we need
-  // to retry() whenever a close happens *anywhere* in the program.
-  // This is essential when multiple graceful-fs instances are
-  // in play at the same time.
-  fs.close = (function (fs$close) {
-    function close (fd, cb) {
-      return fs$close.call(fs, fd, function (err) {
-        // This function uses the graceful-fs shared queue
-        if (!err) {
-          resetQueue()
-        }
-
-        if (typeof cb === 'function')
-          cb.apply(this, arguments)
-      })
-    }
-
-    Object.defineProperty(close, previousSymbol, {
-      value: fs$close
-    })
-    return close
-  })(fs.close)
-
-  fs.closeSync = (function (fs$closeSync) {
-    function closeSync (fd) {
-      // This function uses the graceful-fs shared queue
-      fs$closeSync.apply(fs, arguments)
-      resetQueue()
-    }
-
-    Object.defineProperty(closeSync, previousSymbol, {
-      value: fs$closeSync
-    })
-    return closeSync
-  })(fs.closeSync)
-
-  if (/\bgfs4\b/i.test(process.env.NODE_DEBUG || '')) {
-    process.on('exit', function() {
-      debug(fs[gracefulQueue])
-      __webpack_require__(39491).equal(fs[gracefulQueue].length, 0)
-    })
-  }
-}
-
-if (!global[gracefulQueue]) {
-  publishQueue(global, fs[gracefulQueue]);
-}
-
-module.exports = patch(clone(fs))
-if (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {
-    module.exports = patch(fs)
-    fs.__patched = true;
-}
-
-function patch (fs) {
-  // Everything that references the open() function needs to be in here
-  polyfills(fs)
-  fs.gracefulify = patch
-
-  fs.createReadStream = createReadStream
-  fs.createWriteStream = createWriteStream
-  var fs$readFile = fs.readFile
-  fs.readFile = readFile
-  function readFile (path, options, cb) {
-    if (typeof options === 'function')
-      cb = options, options = null
-
-    return go$readFile(path, options, cb)
-
-    function go$readFile (path, options, cb, startTime) {
-      return fs$readFile(path, options, function (err) {
-        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
-          enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])
-        else {
-          if (typeof cb === 'function')
-            cb.apply(this, arguments)
-        }
-      })
-    }
-  }
-
-  var fs$writeFile = fs.writeFile
-  fs.writeFile = writeFile
-  function writeFile (path, data, options, cb) {
-    if (typeof options === 'function')
-      cb = options, options = null
-
-    return go$writeFile(path, data, options, cb)
-
-    function go$writeFile (path, data, options, cb, startTime) {
-      return fs$writeFile(path, data, options, function (err) {
-        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
-          enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])
-        else {
-          if (typeof cb === 'function')
-            cb.apply(this, arguments)
-        }
-      })
-    }
-  }
-
-  var fs$appendFile = fs.appendFile
-  if (fs$appendFile)
-    fs.appendFile = appendFile
-  function appendFile (path, data, options, cb) {
-    if (typeof options === 'function')
-      cb = options, options = null
-
-    return go$appendFile(path, data, options, cb)
-
-    function go$appendFile (path, data, options, cb, startTime) {
-      return fs$appendFile(path, data, options, function (err) {
-        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
-          enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])
-        else {
-          if (typeof cb === 'function')
-            cb.apply(this, arguments)
-        }
-      })
-    }
-  }
-
-  var fs$copyFile = fs.copyFile
-  if (fs$copyFile)
-    fs.copyFile = copyFile
-  function copyFile (src, dest, flags, cb) {
-    if (typeof flags === 'function') {
-      cb = flags
-      flags = 0
-    }
-    return go$copyFile(src, dest, flags, cb)
-
-    function go$copyFile (src, dest, flags, cb, startTime) {
-      return fs$copyFile(src, dest, flags, function (err) {
-        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
-          enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])
-        else {
-          if (typeof cb === 'function')
-            cb.apply(this, arguments)
-        }
-      })
-    }
-  }
-
-  var fs$readdir = fs.readdir
-  fs.readdir = readdir
-  var noReaddirOptionVersions = /^v[0-5]\./
-  function readdir (path, options, cb) {
-    if (typeof options === 'function')
-      cb = options, options = null
-
-    var go$readdir = noReaddirOptionVersions.test(process.version)
-      ? function go$readdir (path, options, cb, startTime) {
-        return fs$readdir(path, fs$readdirCallback(
-          path, options, cb, startTime
-        ))
-      }
-      : function go$readdir (path, options, cb, startTime) {
-        return fs$readdir(path, options, fs$readdirCallback(
-          path, options, cb, startTime
-        ))
-      }
-
-    return go$readdir(path, options, cb)
-
-    function fs$readdirCallback (path, options, cb, startTime) {
-      return function (err, files) {
-        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
-          enqueue([
-            go$readdir,
-            [path, options, cb],
-            err,
-            startTime || Date.now(),
-            Date.now()
-          ])
-        else {
-          if (files && files.sort)
-            files.sort()
-
-          if (typeof cb === 'function')
-            cb.call(this, err, files)
-        }
-      }
-    }
-  }
-
-  if (process.version.substr(0, 4) === 'v0.8') {
-    var legStreams = legacy(fs)
-    ReadStream = legStreams.ReadStream
-    WriteStream = legStreams.WriteStream
-  }
-
-  var fs$ReadStream = fs.ReadStream
-  if (fs$ReadStream) {
-    ReadStream.prototype = Object.create(fs$ReadStream.prototype)
-    ReadStream.prototype.open = ReadStream$open
-  }
-
-  var fs$WriteStream = fs.WriteStream
-  if (fs$WriteStream) {
-    WriteStream.prototype = Object.create(fs$WriteStream.prototype)
-    WriteStream.prototype.open = WriteStream$open
-  }
-
-  Object.defineProperty(fs, 'ReadStream', {
-    get: function () {
-      return ReadStream
-    },
-    set: function (val) {
-      ReadStream = val
-    },
-    enumerable: true,
-    configurable: true
-  })
-  Object.defineProperty(fs, 'WriteStream', {
-    get: function () {
-      return WriteStream
-    },
-    set: function (val) {
-      WriteStream = val
-    },
-    enumerable: true,
-    configurable: true
-  })
-
-  // legacy names
-  var FileReadStream = ReadStream
-  Object.defineProperty(fs, 'FileReadStream', {
-    get: function () {
-      return FileReadStream
-    },
-    set: function (val) {
-      FileReadStream = val
-    },
-    enumerable: true,
-    configurable: true
-  })
-  var FileWriteStream = WriteStream
-  Object.defineProperty(fs, 'FileWriteStream', {
-    get: function () {
-      return FileWriteStream
-    },
-    set: function (val) {
-      FileWriteStream = val
-    },
-    enumerable: true,
-    configurable: true
-  })
-
-  function ReadStream (path, options) {
-    if (this instanceof ReadStream)
-      return fs$ReadStream.apply(this, arguments), this
-    else
-      return ReadStream.apply(Object.create(ReadStream.prototype), arguments)
-  }
-
-  function ReadStream$open () {
-    var that = this
-    open(that.path, that.flags, that.mode, function (err, fd) {
-      if (err) {
-        if (that.autoClose)
-          that.destroy()
-
-        that.emit('error', err)
-      } else {
-        that.fd = fd
-        that.emit('open', fd)
-        that.read()
-      }
-    })
-  }
-
-  function WriteStream (path, options) {
-    if (this instanceof WriteStream)
-      return fs$WriteStream.apply(this, arguments), this
-    else
-      return WriteStream.apply(Object.create(WriteStream.prototype), arguments)
-  }
-
-  function WriteStream$open () {
-    var that = this
-    open(that.path, that.flags, that.mode, function (err, fd) {
-      if (err) {
-        that.destroy()
-        that.emit('error', err)
-      } else {
-        that.fd = fd
-        that.emit('open', fd)
-      }
-    })
-  }
-
-  function createReadStream (path, options) {
-    return new fs.ReadStream(path, options)
-  }
-
-  function createWriteStream (path, options) {
-    return new fs.WriteStream(path, options)
-  }
-
-  var fs$open = fs.open
-  fs.open = open
-  function open (path, flags, mode, cb) {
-    if (typeof mode === 'function')
-      cb = mode, mode = null
-
-    return go$open(path, flags, mode, cb)
-
-    function go$open (path, flags, mode, cb, startTime) {
-      return fs$open(path, flags, mode, function (err, fd) {
-        if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))
-          enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])
-        else {
-          if (typeof cb === 'function')
-            cb.apply(this, arguments)
-        }
-      })
-    }
-  }
-
-  return fs
-}
-
-function enqueue (elem) {
-  debug('ENQUEUE', elem[0].name, elem[1])
-  fs[gracefulQueue].push(elem)
-  retry()
-}
-
-// keep track of the timeout between retry() calls
-var retryTimer
-
-// reset the startTime and lastTime to now
-// this resets the start of the 60 second overall timeout as well as the
-// delay between attempts so that we'll retry these jobs sooner
-function resetQueue () {
-  var now = Date.now()
-  for (var i = 0; i < fs[gracefulQueue].length; ++i) {
-    // entries that are only a length of 2 are from an older version, don't
-    // bother modifying those since they'll be retried anyway.
-    if (fs[gracefulQueue][i].length > 2) {
-      fs[gracefulQueue][i][3] = now // startTime
-      fs[gracefulQueue][i][4] = now // lastTime
-    }
-  }
-  // call retry to make sure we're actively processing the queue
-  retry()
-}
-
-function retry () {
-  // clear the timer and remove it to help prevent unintended concurrency
-  clearTimeout(retryTimer)
-  retryTimer = undefined
-
-  if (fs[gracefulQueue].length === 0)
-    return
-
-  var elem = fs[gracefulQueue].shift()
-  var fn = elem[0]
-  var args = elem[1]
-  // these items may be unset if they were added by an older graceful-fs
-  var err = elem[2]
-  var startTime = elem[3]
-  var lastTime = elem[4]
-
-  // if we don't have a startTime we have no way of knowing if we've waited
-  // long enough, so go ahead and retry this item now
-  if (startTime === undefined) {
-    debug('RETRY', fn.name, args)
-    fn.apply(null, args)
-  } else if (Date.now() - startTime >= 60000) {
-    // it's been more than 60 seconds total, bail now
-    debug('TIMEOUT', fn.name, args)
-    var cb = args.pop()
-    if (typeof cb === 'function')
-      cb.call(null, err)
-  } else {
-    // the amount of time between the last attempt and right now
-    var sinceAttempt = Date.now() - lastTime
-    // the amount of time between when we first tried, and when we last tried
-    // rounded up to at least 1
-    var sinceStart = Math.max(lastTime - startTime, 1)
-    // backoff. wait longer than the total time we've been retrying, but only
-    // up to a maximum of 100ms
-    var desiredDelay = Math.min(sinceStart * 1.2, 100)
-    // it's been long enough since the last retry, do it again
-    if (sinceAttempt >= desiredDelay) {
-      debug('RETRY', fn.name, args)
-      fn.apply(null, args.concat([startTime]))
-    } else {
-      // if we can't do this job yet, push it to the end of the queue
-      // and let the next iteration check again
-      fs[gracefulQueue].push(elem)
-    }
-  }
-
-  // schedule our next run if one isn't already scheduled
-  if (retryTimer === undefined) {
-    retryTimer = setTimeout(retry, 0)
-  }
-}
-
-
-/***/ }),
-
-/***/ 78520:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Stream = (__webpack_require__(12781).Stream)
-
-module.exports = legacy
-
-function legacy (fs) {
-  return {
-    ReadStream: ReadStream,
-    WriteStream: WriteStream
-  }
-
-  function ReadStream (path, options) {
-    if (!(this instanceof ReadStream)) return new ReadStream(path, options);
-
-    Stream.call(this);
-
-    var self = this;
-
-    this.path = path;
-    this.fd = null;
-    this.readable = true;
-    this.paused = false;
-
-    this.flags = 'r';
-    this.mode = 438; /*=0666*/
-    this.bufferSize = 64 * 1024;
-
-    options = options || {};
-
-    // Mixin options into this
-    var keys = Object.keys(options);
-    for (var index = 0, length = keys.length; index < length; index++) {
-      var key = keys[index];
-      this[key] = options[key];
-    }
-
-    if (this.encoding) this.setEncoding(this.encoding);
-
-    if (this.start !== undefined) {
-      if ('number' !== typeof this.start) {
-        throw TypeError('start must be a Number');
-      }
-      if (this.end === undefined) {
-        this.end = Infinity;
-      } else if ('number' !== typeof this.end) {
-        throw TypeError('end must be a Number');
-      }
-
-      if (this.start > this.end) {
-        throw new Error('start must be <= end');
-      }
-
-      this.pos = this.start;
-    }
-
-    if (this.fd !== null) {
-      process.nextTick(function() {
-        self._read();
-      });
-      return;
-    }
-
-    fs.open(this.path, this.flags, this.mode, function (err, fd) {
-      if (err) {
-        self.emit('error', err);
-        self.readable = false;
-        return;
-      }
-
-      self.fd = fd;
-      self.emit('open', fd);
-      self._read();
-    })
-  }
-
-  function WriteStream (path, options) {
-    if (!(this instanceof WriteStream)) return new WriteStream(path, options);
-
-    Stream.call(this);
-
-    this.path = path;
-    this.fd = null;
-    this.writable = true;
-
-    this.flags = 'w';
-    this.encoding = 'binary';
-    this.mode = 438; /*=0666*/
-    this.bytesWritten = 0;
-
-    options = options || {};
-
-    // Mixin options into this
-    var keys = Object.keys(options);
-    for (var index = 0, length = keys.length; index < length; index++) {
-      var key = keys[index];
-      this[key] = options[key];
-    }
-
-    if (this.start !== undefined) {
-      if ('number' !== typeof this.start) {
-        throw TypeError('start must be a Number');
-      }
-      if (this.start < 0) {
-        throw new Error('start must be >= zero');
-      }
-
-      this.pos = this.start;
-    }
-
-    this.busy = false;
-    this._queue = [];
-
-    if (this.fd === null) {
-      this._open = fs.open;
-      this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);
-      this.flush();
-    }
-  }
-}
-
-
-/***/ }),
-
-/***/ 72161:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var constants = __webpack_require__(22057)
-
-var origCwd = process.cwd
-var cwd = null
-
-var platform = process.env.GRACEFUL_FS_PLATFORM || process.platform
-
-process.cwd = function() {
-  if (!cwd)
-    cwd = origCwd.call(process)
-  return cwd
-}
-try {
-  process.cwd()
-} catch (er) {}
-
-// This check is needed until node.js 12 is required
-if (typeof process.chdir === 'function') {
-  var chdir = process.chdir
-  process.chdir = function (d) {
-    cwd = null
-    chdir.call(process, d)
-  }
-  if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)
-}
-
-module.exports = patch
-
-function patch (fs) {
-  // (re-)implement some things that are known busted or missing.
-
-  // lchmod, broken prior to 0.6.2
-  // back-port the fix here.
-  if (constants.hasOwnProperty('O_SYMLINK') &&
-      process.version.match(/^v0\.6\.[0-2]|^v0\.5\./)) {
-    patchLchmod(fs)
-  }
-
-  // lutimes implementation, or no-op
-  if (!fs.lutimes) {
-    patchLutimes(fs)
-  }
-
-  // https://github.com/isaacs/node-graceful-fs/issues/4
-  // Chown should not fail on einval or eperm if non-root.
-  // It should not fail on enosys ever, as this just indicates
-  // that a fs doesn't support the intended operation.
-
-  fs.chown = chownFix(fs.chown)
-  fs.fchown = chownFix(fs.fchown)
-  fs.lchown = chownFix(fs.lchown)
-
-  fs.chmod = chmodFix(fs.chmod)
-  fs.fchmod = chmodFix(fs.fchmod)
-  fs.lchmod = chmodFix(fs.lchmod)
-
-  fs.chownSync = chownFixSync(fs.chownSync)
-  fs.fchownSync = chownFixSync(fs.fchownSync)
-  fs.lchownSync = chownFixSync(fs.lchownSync)
-
-  fs.chmodSync = chmodFixSync(fs.chmodSync)
-  fs.fchmodSync = chmodFixSync(fs.fchmodSync)
-  fs.lchmodSync = chmodFixSync(fs.lchmodSync)
-
-  fs.stat = statFix(fs.stat)
-  fs.fstat = statFix(fs.fstat)
-  fs.lstat = statFix(fs.lstat)
-
-  fs.statSync = statFixSync(fs.statSync)
-  fs.fstatSync = statFixSync(fs.fstatSync)
-  fs.lstatSync = statFixSync(fs.lstatSync)
-
-  // if lchmod/lchown do not exist, then make them no-ops
-  if (fs.chmod && !fs.lchmod) {
-    fs.lchmod = function (path, mode, cb) {
-      if (cb) process.nextTick(cb)
-    }
-    fs.lchmodSync = function () {}
-  }
-  if (fs.chown && !fs.lchown) {
-    fs.lchown = function (path, uid, gid, cb) {
-      if (cb) process.nextTick(cb)
-    }
-    fs.lchownSync = function () {}
-  }
-
-  // on Windows, A/V software can lock the directory, causing this
-  // to fail with an EACCES or EPERM if the directory contains newly
-  // created files.  Try again on failure, for up to 60 seconds.
-
-  // Set the timeout this long because some Windows Anti-Virus, such as Parity
-  // bit9, may lock files for up to a minute, causing npm package install
-  // failures. Also, take care to yield the scheduler. Windows scheduling gives
-  // CPU to a busy looping process, which can cause the program causing the lock
-  // contention to be starved of CPU by node, so the contention doesn't resolve.
-  if (platform === "win32") {
-    fs.rename = typeof fs.rename !== 'function' ? fs.rename
-    : (function (fs$rename) {
-      function rename (from, to, cb) {
-        var start = Date.now()
-        var backoff = 0;
-        fs$rename(from, to, function CB (er) {
-          if (er
-              && (er.code === "EACCES" || er.code === "EPERM")
-              && Date.now() - start < 60000) {
-            setTimeout(function() {
-              fs.stat(to, function (stater, st) {
-                if (stater && stater.code === "ENOENT")
-                  fs$rename(from, to, CB);
-                else
-                  cb(er)
-              })
-            }, backoff)
-            if (backoff < 100)
-              backoff += 10;
-            return;
-          }
-          if (cb) cb(er)
-        })
-      }
-      if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)
-      return rename
-    })(fs.rename)
-  }
-
-  // if read() returns EAGAIN, then just try it again.
-  fs.read = typeof fs.read !== 'function' ? fs.read
-  : (function (fs$read) {
-    function read (fd, buffer, offset, length, position, callback_) {
-      var callback
-      if (callback_ && typeof callback_ === 'function') {
-        var eagCounter = 0
-        callback = function (er, _, __) {
-          if (er && er.code === 'EAGAIN' && eagCounter < 10) {
-            eagCounter ++
-            return fs$read.call(fs, fd, buffer, offset, length, position, callback)
-          }
-          callback_.apply(this, arguments)
-        }
-      }
-      return fs$read.call(fs, fd, buffer, offset, length, position, callback)
-    }
-
-    // This ensures `util.promisify` works as it does for native `fs.read`.
-    if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)
-    return read
-  })(fs.read)
-
-  fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync
-  : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {
-    var eagCounter = 0
-    while (true) {
-      try {
-        return fs$readSync.call(fs, fd, buffer, offset, length, position)
-      } catch (er) {
-        if (er.code === 'EAGAIN' && eagCounter < 10) {
-          eagCounter ++
-          continue
-        }
-        throw er
-      }
-    }
-  }})(fs.readSync)
-
-  function patchLchmod (fs) {
-    fs.lchmod = function (path, mode, callback) {
-      fs.open( path
-             , constants.O_WRONLY | constants.O_SYMLINK
-             , mode
-             , function (err, fd) {
-        if (err) {
-          if (callback) callback(err)
-          return
-        }
-        // prefer to return the chmod error, if one occurs,
-        // but still try to close, and report closing errors if they occur.
-        fs.fchmod(fd, mode, function (err) {
-          fs.close(fd, function(err2) {
-            if (callback) callback(err || err2)
-          })
-        })
-      })
-    }
-
-    fs.lchmodSync = function (path, mode) {
-      var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)
-
-      // prefer to return the chmod error, if one occurs,
-      // but still try to close, and report closing errors if they occur.
-      var threw = true
-      var ret
-      try {
-        ret = fs.fchmodSync(fd, mode)
-        threw = false
-      } finally {
-        if (threw) {
-          try {
-            fs.closeSync(fd)
-          } catch (er) {}
-        } else {
-          fs.closeSync(fd)
-        }
-      }
-      return ret
-    }
-  }
-
-  function patchLutimes (fs) {
-    if (constants.hasOwnProperty("O_SYMLINK") && fs.futimes) {
-      fs.lutimes = function (path, at, mt, cb) {
-        fs.open(path, constants.O_SYMLINK, function (er, fd) {
-          if (er) {
-            if (cb) cb(er)
-            return
-          }
-          fs.futimes(fd, at, mt, function (er) {
-            fs.close(fd, function (er2) {
-              if (cb) cb(er || er2)
-            })
-          })
-        })
-      }
-
-      fs.lutimesSync = function (path, at, mt) {
-        var fd = fs.openSync(path, constants.O_SYMLINK)
-        var ret
-        var threw = true
-        try {
-          ret = fs.futimesSync(fd, at, mt)
-          threw = false
-        } finally {
-          if (threw) {
-            try {
-              fs.closeSync(fd)
-            } catch (er) {}
-          } else {
-            fs.closeSync(fd)
-          }
-        }
-        return ret
-      }
-
-    } else if (fs.futimes) {
-      fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }
-      fs.lutimesSync = function () {}
-    }
-  }
-
-  function chmodFix (orig) {
-    if (!orig) return orig
-    return function (target, mode, cb) {
-      return orig.call(fs, target, mode, function (er) {
-        if (chownErOk(er)) er = null
-        if (cb) cb.apply(this, arguments)
-      })
-    }
-  }
-
-  function chmodFixSync (orig) {
-    if (!orig) return orig
-    return function (target, mode) {
-      try {
-        return orig.call(fs, target, mode)
-      } catch (er) {
-        if (!chownErOk(er)) throw er
-      }
-    }
-  }
-
-
-  function chownFix (orig) {
-    if (!orig) return orig
-    return function (target, uid, gid, cb) {
-      return orig.call(fs, target, uid, gid, function (er) {
-        if (chownErOk(er)) er = null
-        if (cb) cb.apply(this, arguments)
-      })
-    }
-  }
-
-  function chownFixSync (orig) {
-    if (!orig) return orig
-    return function (target, uid, gid) {
-      try {
-        return orig.call(fs, target, uid, gid)
-      } catch (er) {
-        if (!chownErOk(er)) throw er
-      }
-    }
-  }
-
-  function statFix (orig) {
-    if (!orig) return orig
-    // Older versions of Node erroneously returned signed integers for
-    // uid + gid.
-    return function (target, options, cb) {
-      if (typeof options === 'function') {
-        cb = options
-        options = null
-      }
-      function callback (er, stats) {
-        if (stats) {
-          if (stats.uid < 0) stats.uid += 0x100000000
-          if (stats.gid < 0) stats.gid += 0x100000000
-        }
-        if (cb) cb.apply(this, arguments)
-      }
-      return options ? orig.call(fs, target, options, callback)
-        : orig.call(fs, target, callback)
-    }
-  }
-
-  function statFixSync (orig) {
-    if (!orig) return orig
-    // Older versions of Node erroneously returned signed integers for
-    // uid + gid.
-    return function (target, options) {
-      var stats = options ? orig.call(fs, target, options)
-        : orig.call(fs, target)
-      if (stats) {
-        if (stats.uid < 0) stats.uid += 0x100000000
-        if (stats.gid < 0) stats.gid += 0x100000000
-      }
-      return stats;
-    }
-  }
-
-  // ENOSYS means that the fs doesn't support the op. Just ignore
-  // that, because it doesn't matter.
-  //
-  // if there's no getuid, or if getuid() is something other
-  // than 0, and the error is EINVAL or EPERM, then just ignore
-  // it.
-  //
-  // This specific case is a silent failure in cp, install, tar,
-  // and most other unix tools that manage permissions.
-  //
-  // When running as root, or if other types of errors are
-  // encountered, then it's strict.
-  function chownErOk (er) {
-    if (!er)
-      return true
-
-    if (er.code === "ENOSYS")
-      return true
-
-    var nonroot = !process.getuid || process.getuid() !== 0
-    if (nonroot) {
-      if (er.code === "EINVAL" || er.code === "EPERM")
-        return true
-    }
-
-    return false
-  }
-}
-
-
-/***/ }),
-
-/***/ 86560:
-/***/ ((module) => {
-
-"use strict";
-
-
-module.exports = (flag, argv = process.argv) => {
-	const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
-	const position = argv.indexOf(prefix + flag);
-	const terminatorPosition = argv.indexOf('--');
-	return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
-};
-
-
-/***/ }),
-
-/***/ 86492:
-/***/ (function(module, exports, __webpack_require__) {
-
-/* module decorator */ module = __webpack_require__.nmd(module);
-var __WEBPACK_AMD_DEFINE_RESULT__;/*! https://mths.be/he v1.2.0 by @mathias | MIT license */
-;(function(root) {
-
-	// Detect free variables `exports`.
-	var freeExports =  true && exports;
-
-	// Detect free variable `module`.
-	var freeModule =  true && module &&
-		module.exports == freeExports && module;
-
-	// Detect free variable `global`, from Node.js or Browserified code,
-	// and use it as `root`.
-	var freeGlobal = typeof global == 'object' && global;
-	if (freeGlobal.global === freeGlobal || freeGlobal.window === freeGlobal) {
-		root = freeGlobal;
-	}
-
-	/*--------------------------------------------------------------------------*/
-
-	// All astral symbols.
-	var regexAstralSymbols = /[\uD800-\uDBFF][\uDC00-\uDFFF]/g;
-	// All ASCII symbols (not just printable ASCII) except those listed in the
-	// first column of the overrides table.
-	// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides
-	var regexAsciiWhitelist = /[\x01-\x7F]/g;
-	// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
-	// code points listed in the first column of the overrides table on
-	// https://html.spec.whatwg.org/multipage/syntax.html#table-charref-overrides.
-	var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;
-
-	var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2261\u20E5|\u2264\u20D2|\u2265\u20D2|\u2266\u0338|\u2267\u0338|\u2268\uFE00|\u2269\uFE00|\u226A\u0338|\u226A\u20D2|\u226B\u0338|\u226B\u20D2|\u227F\u0338|\u2282\u20D2|\u2283\u20D2|\u228A\uFE00|\u228B\uFE00|\u228F\u0338|\u2290\u0338|\u2293\uFE00|\u2294\uFE00|\u22B4\u20D2|\u22B5\u20D2|\u22D8\u0338|\u22D9\u0338|\u22DA\uFE00|\u22DB\uFE00|\u22F5\u0338|\u22F9\u0338|\u2933\u0338|\u29CF\u0338|\u29D0\u0338|\u2A6D\u0338|\u2A70\u0338|\u2A7D\u0338|\u2A7E\u0338|\u2AA1\u0338|\u2AA2\u0338|\u2AAC\uFE00|\u2AAD\uFE00|\u2AAF\u0338|\u2AB0\u0338|\u2AC5\u0338|\u2AC6\u0338|\u2ACB\uFE00|\u2ACC\uFE00|\u2AFD\u20E5|[\xA0-\u0113\u0116-\u0122\u0124-\u012B\u012E-\u014D\u0150-\u017E\u0192\u01B5\u01F5\u0237\u02C6\u02C7\u02D8-\u02DD\u0311\u0391-\u03A1\u03A3-\u03A9\u03B1-\u03C9\u03D1\u03D2\u03D5\u03D6\u03DC\u03DD\u03F0\u03F1\u03F5\u03F6\u0401-\u040C\u040E-\u044F\u0451-\u045C\u045E\u045F\u2002-\u2005\u2007-\u2010\u2013-\u2016\u2018-\u201A\u201C-\u201E\u2020-\u2022\u2025\u2026\u2030-\u2035\u2039\u203A\u203E\u2041\u2043\u2044\u204F\u2057\u205F-\u2063\u20AC\u20DB\u20DC\u2102\u2105\u210A-\u2113\u2115-\u211E\u2122\u2124\u2127-\u2129\u212C\u212D\u212F-\u2131\u2133-\u2138\u2145-\u2148\u2153-\u215E\u2190-\u219B\u219D-\u21A7\u21A9-\u21AE\u21B0-\u21B3\u21B5-\u21B7\u21BA-\u21DB\u21DD\u21E4\u21E5\u21F5\u21FD-\u2205\u2207-\u2209\u220B\u220C\u220F-\u2214\u2216-\u2218\u221A\u221D-\u2238\u223A-\u2257\u2259\u225A\u225C\u225F-\u2262\u2264-\u228B\u228D-\u229B\u229D-\u22A5\u22A7-\u22B0\u22B2-\u22BB\u22BD-\u22DB\u22DE-\u22E3\u22E6-\u22F7\u22F9-\u22FE\u2305\u2306\u2308-\u2310\u2312\u2313\u2315\u2316\u231C-\u231F\u2322\u2323\u232D\u232E\u2336\u233D\u233F\u237C\u23B0\u23B1\u23B4-\u23B6\u23DC-\u23DF\u23E2\u23E7\u2423\u24C8\u2500\u2502\u250C\u2510\u2514\u2518\u251C\u2524\u252C\u2534\u253C\u2550-\u256C\u2580\u2584\u2588\u2591-\u2593\u25A1\u25AA\u25AB\u25AD\u25AE\u25B1\u25B3-\u25B5\u25B8\u25B9\u25BD-\u25BF\u25C2\u25C3\u25CA\u25CB\u25EC\u25EF\u25F8-\u25FC\u2605\u2606\u260E\u2640\u2642\u2660\u2663\u2665\u2666\u266A\u266D-\u266F\u2713\u2717\u2720\u2736\u2758\u2772\u2773\u27C8\u27C9\u27E6-\u27ED\u27F5-\u27FA\u27FC\u27FF\u2902-\u2905\u290C-\u2913\u2916\u2919-\u2920\u2923-\u292A\u2933\u2935-\u2939\u293C\u293D\u2945\u2948-\u294B\u294E-\u2976\u2978\u2979\u297B-\u297F\u2985\u2986\u298B-\u2996\u299A\u299C\u299D\u29A4-\u29B7\u29B9\u29BB\u29BC\u29BE-\u29C5\u29C9\u29CD-\u29D0\u29DC-\u29DE\u29E3-\u29E5\u29EB\u29F4\u29F6\u2A00-\u2A02\u2A04\u2A06\u2A0C\u2A0D\u2A10-\u2A17\u2A22-\u2A27\u2A29\u2A2A\u2A2D-\u2A31\u2A33-\u2A3C\u2A3F\u2A40\u2A42-\u2A4D\u2A50\u2A53-\u2A58\u2A5A-\u2A5D\u2A5F\u2A66\u2A6A\u2A6D-\u2A75\u2A77-\u2A9A\u2A9D-\u2AA2\u2AA4-\u2AB0\u2AB3-\u2AC8\u2ACB\u2ACC\u2ACF-\u2ADB\u2AE4\u2AE6-\u2AE9\u2AEB-\u2AF3\u2AFD\uFB00-\uFB04]|\uD835[\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDCCF\uDD04\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDD6B]/g;
-	var encodeMap = {'\xAD':'shy','\u200C':'zwnj','\u200D':'zwj','\u200E':'lrm','\u2063':'ic','\u2062':'it','\u2061':'af','\u200F':'rlm','\u200B':'ZeroWidthSpace','\u2060':'NoBreak','\u0311':'DownBreve','\u20DB':'tdot','\u20DC':'DotDot','\t':'Tab','\n':'NewLine','\u2008':'puncsp','\u205F':'MediumSpace','\u2009':'thinsp','\u200A':'hairsp','\u2004':'emsp13','\u2002':'ensp','\u2005':'emsp14','\u2003':'emsp','\u2007':'numsp','\xA0':'nbsp','\u205F\u200A':'ThickSpace','\u203E':'oline','_':'lowbar','\u2010':'dash','\u2013':'ndash','\u2014':'mdash','\u2015':'horbar',',':'comma',';':'semi','\u204F':'bsemi',':':'colon','\u2A74':'Colone','!':'excl','\xA1':'iexcl','?':'quest','\xBF':'iquest','.':'period','\u2025':'nldr','\u2026':'mldr','\xB7':'middot','\'':'apos','\u2018':'lsquo','\u2019':'rsquo','\u201A':'sbquo','\u2039':'lsaquo','\u203A':'rsaquo','"':'quot','\u201C':'ldquo','\u201D':'rdquo','\u201E':'bdquo','\xAB':'laquo','\xBB':'raquo','(':'lpar',')':'rpar','[':'lsqb',']':'rsqb','{':'lcub','}':'rcub','\u2308':'lceil','\u2309':'rceil','\u230A':'lfloor','\u230B':'rfloor','\u2985':'lopar','\u2986':'ropar','\u298B':'lbrke','\u298C':'rbrke','\u298D':'lbrkslu','\u298E':'rbrksld','\u298F':'lbrksld','\u2990':'rbrkslu','\u2991':'langd','\u2992':'rangd','\u2993':'lparlt','\u2994':'rpargt','\u2995':'gtlPar','\u2996':'ltrPar','\u27E6':'lobrk','\u27E7':'robrk','\u27E8':'lang','\u27E9':'rang','\u27EA':'Lang','\u27EB':'Rang','\u27EC':'loang','\u27ED':'roang','\u2772':'lbbrk','\u2773':'rbbrk','\u2016':'Vert','\xA7':'sect','\xB6':'para','@':'commat','*':'ast','/':'sol','undefined':null,'&':'amp','#':'num','%':'percnt','\u2030':'permil','\u2031':'pertenk','\u2020':'dagger','\u2021':'Dagger','\u2022':'bull','\u2043':'hybull','\u2032':'prime','\u2033':'Prime','\u2034':'tprime','\u2057':'qprime','\u2035':'bprime','\u2041':'caret','`':'grave','\xB4':'acute','\u02DC':'tilde','^':'Hat','\xAF':'macr','\u02D8':'breve','\u02D9':'dot','\xA8':'die','\u02DA':'ring','\u02DD':'dblac','\xB8':'cedil','\u02DB':'ogon','\u02C6':'circ','\u02C7':'caron','\xB0':'deg','\xA9':'copy','\xAE':'reg','\u2117':'copysr','\u2118':'wp','\u211E':'rx','\u2127':'mho','\u2129':'iiota','\u2190':'larr','\u219A':'nlarr','\u2192':'rarr','\u219B':'nrarr','\u2191':'uarr','\u2193':'darr','\u2194':'harr','\u21AE':'nharr','\u2195':'varr','\u2196':'nwarr','\u2197':'nearr','\u2198':'searr','\u2199':'swarr','\u219D':'rarrw','\u219D\u0338':'nrarrw','\u219E':'Larr','\u219F':'Uarr','\u21A0':'Rarr','\u21A1':'Darr','\u21A2':'larrtl','\u21A3':'rarrtl','\u21A4':'mapstoleft','\u21A5':'mapstoup','\u21A6':'map','\u21A7':'mapstodown','\u21A9':'larrhk','\u21AA':'rarrhk','\u21AB':'larrlp','\u21AC':'rarrlp','\u21AD':'harrw','\u21B0':'lsh','\u21B1':'rsh','\u21B2':'ldsh','\u21B3':'rdsh','\u21B5':'crarr','\u21B6':'cularr','\u21B7':'curarr','\u21BA':'olarr','\u21BB':'orarr','\u21BC':'lharu','\u21BD':'lhard','\u21BE':'uharr','\u21BF':'uharl','\u21C0':'rharu','\u21C1':'rhard','\u21C2':'dharr','\u21C3':'dharl','\u21C4':'rlarr','\u21C5':'udarr','\u21C6':'lrarr','\u21C7':'llarr','\u21C8':'uuarr','\u21C9':'rrarr','\u21CA':'ddarr','\u21CB':'lrhar','\u21CC':'rlhar','\u21D0':'lArr','\u21CD':'nlArr','\u21D1':'uArr','\u21D2':'rArr','\u21CF':'nrArr','\u21D3':'dArr','\u21D4':'iff','\u21CE':'nhArr','\u21D5':'vArr','\u21D6':'nwArr','\u21D7':'neArr','\u21D8':'seArr','\u21D9':'swArr','\u21DA':'lAarr','\u21DB':'rAarr','\u21DD':'zigrarr','\u21E4':'larrb','\u21E5':'rarrb','\u21F5':'duarr','\u21FD':'loarr','\u21FE':'roarr','\u21FF':'hoarr','\u2200':'forall','\u2201':'comp','\u2202':'part','\u2202\u0338':'npart','\u2203':'exist','\u2204':'nexist','\u2205':'empty','\u2207':'Del','\u2208':'in','\u2209':'notin','\u220B':'ni','\u220C':'notni','\u03F6':'bepsi','\u220F':'prod','\u2210':'coprod','\u2211':'sum','+':'plus','\xB1':'pm','\xF7':'div','\xD7':'times','<':'lt','\u226E':'nlt','<\u20D2':'nvlt','=':'equals','\u2260':'ne','=\u20E5':'bne','\u2A75':'Equal','>':'gt','\u226F':'ngt','>\u20D2':'nvgt','\xAC':'not','|':'vert','\xA6':'brvbar','\u2212':'minus','\u2213':'mp','\u2214':'plusdo','\u2044':'frasl','\u2216':'setmn','\u2217':'lowast','\u2218':'compfn','\u221A':'Sqrt','\u221D':'prop','\u221E':'infin','\u221F':'angrt','\u2220':'ang','\u2220\u20D2':'nang','\u2221':'angmsd','\u2222':'angsph','\u2223':'mid','\u2224':'nmid','\u2225':'par','\u2226':'npar','\u2227':'and','\u2228':'or','\u2229':'cap','\u2229\uFE00':'caps','\u222A':'cup','\u222A\uFE00':'cups','\u222B':'int','\u222C':'Int','\u222D':'tint','\u2A0C':'qint','\u222E':'oint','\u222F':'Conint','\u2230':'Cconint','\u2231':'cwint','\u2232':'cwconint','\u2233':'awconint','\u2234':'there4','\u2235':'becaus','\u2236':'ratio','\u2237':'Colon','\u2238':'minusd','\u223A':'mDDot','\u223B':'homtht','\u223C':'sim','\u2241':'nsim','\u223C\u20D2':'nvsim','\u223D':'bsim','\u223D\u0331':'race','\u223E':'ac','\u223E\u0333':'acE','\u223F':'acd','\u2240':'wr','\u2242':'esim','\u2242\u0338':'nesim','\u2243':'sime','\u2244':'nsime','\u2245':'cong','\u2247':'ncong','\u2246':'simne','\u2248':'ap','\u2249':'nap','\u224A':'ape','\u224B':'apid','\u224B\u0338':'napid','\u224C':'bcong','\u224D':'CupCap','\u226D':'NotCupCap','\u224D\u20D2':'nvap','\u224E':'bump','\u224E\u0338':'nbump','\u224F':'bumpe','\u224F\u0338':'nbumpe','\u2250':'doteq','\u2250\u0338':'nedot','\u2251':'eDot','\u2252':'efDot','\u2253':'erDot','\u2254':'colone','\u2255':'ecolon','\u2256':'ecir','\u2257':'cire','\u2259':'wedgeq','\u225A':'veeeq','\u225C':'trie','\u225F':'equest','\u2261':'equiv','\u2262':'nequiv','\u2261\u20E5':'bnequiv','\u2264':'le','\u2270':'nle','\u2264\u20D2':'nvle','\u2265':'ge','\u2271':'nge','\u2265\u20D2':'nvge','\u2266':'lE','\u2266\u0338':'nlE','\u2267':'gE','\u2267\u0338':'ngE','\u2268\uFE00':'lvnE','\u2268':'lnE','\u2269':'gnE','\u2269\uFE00':'gvnE','\u226A':'ll','\u226A\u0338':'nLtv','\u226A\u20D2':'nLt','\u226B':'gg','\u226B\u0338':'nGtv','\u226B\u20D2':'nGt','\u226C':'twixt','\u2272':'lsim','\u2274':'nlsim','\u2273':'gsim','\u2275':'ngsim','\u2276':'lg','\u2278':'ntlg','\u2277':'gl','\u2279':'ntgl','\u227A':'pr','\u2280':'npr','\u227B':'sc','\u2281':'nsc','\u227C':'prcue','\u22E0':'nprcue','\u227D':'sccue','\u22E1':'nsccue','\u227E':'prsim','\u227F':'scsim','\u227F\u0338':'NotSucceedsTilde','\u2282':'sub','\u2284':'nsub','\u2282\u20D2':'vnsub','\u2283':'sup','\u2285':'nsup','\u2283\u20D2':'vnsup','\u2286':'sube','\u2288':'nsube','\u2287':'supe','\u2289':'nsupe','\u228A\uFE00':'vsubne','\u228A':'subne','\u228B\uFE00':'vsupne','\u228B':'supne','\u228D':'cupdot','\u228E':'uplus','\u228F':'sqsub','\u228F\u0338':'NotSquareSubset','\u2290':'sqsup','\u2290\u0338':'NotSquareSuperset','\u2291':'sqsube','\u22E2':'nsqsube','\u2292':'sqsupe','\u22E3':'nsqsupe','\u2293':'sqcap','\u2293\uFE00':'sqcaps','\u2294':'sqcup','\u2294\uFE00':'sqcups','\u2295':'oplus','\u2296':'ominus','\u2297':'otimes','\u2298':'osol','\u2299':'odot','\u229A':'ocir','\u229B':'oast','\u229D':'odash','\u229E':'plusb','\u229F':'minusb','\u22A0':'timesb','\u22A1':'sdotb','\u22A2':'vdash','\u22AC':'nvdash','\u22A3':'dashv','\u22A4':'top','\u22A5':'bot','\u22A7':'models','\u22A8':'vDash','\u22AD':'nvDash','\u22A9':'Vdash','\u22AE':'nVdash','\u22AA':'Vvdash','\u22AB':'VDash','\u22AF':'nVDash','\u22B0':'prurel','\u22B2':'vltri','\u22EA':'nltri','\u22B3':'vrtri','\u22EB':'nrtri','\u22B4':'ltrie','\u22EC':'nltrie','\u22B4\u20D2':'nvltrie','\u22B5':'rtrie','\u22ED':'nrtrie','\u22B5\u20D2':'nvrtrie','\u22B6':'origof','\u22B7':'imof','\u22B8':'mumap','\u22B9':'hercon','\u22BA':'intcal','\u22BB':'veebar','\u22BD':'barvee','\u22BE':'angrtvb','\u22BF':'lrtri','\u22C0':'Wedge','\u22C1':'Vee','\u22C2':'xcap','\u22C3':'xcup','\u22C4':'diam','\u22C5':'sdot','\u22C6':'Star','\u22C7':'divonx','\u22C8':'bowtie','\u22C9':'ltimes','\u22CA':'rtimes','\u22CB':'lthree','\u22CC':'rthree','\u22CD':'bsime','\u22CE':'cuvee','\u22CF':'cuwed','\u22D0':'Sub','\u22D1':'Sup','\u22D2':'Cap','\u22D3':'Cup','\u22D4':'fork','\u22D5':'epar','\u22D6':'ltdot','\u22D7':'gtdot','\u22D8':'Ll','\u22D8\u0338':'nLl','\u22D9':'Gg','\u22D9\u0338':'nGg','\u22DA\uFE00':'lesg','\u22DA':'leg','\u22DB':'gel','\u22DB\uFE00':'gesl','\u22DE':'cuepr','\u22DF':'cuesc','\u22E6':'lnsim','\u22E7':'gnsim','\u22E8':'prnsim','\u22E9':'scnsim','\u22EE':'vellip','\u22EF':'ctdot','\u22F0':'utdot','\u22F1':'dtdot','\u22F2':'disin','\u22F3':'isinsv','\u22F4':'isins','\u22F5':'isindot','\u22F5\u0338':'notindot','\u22F6':'notinvc','\u22F7':'notinvb','\u22F9':'isinE','\u22F9\u0338':'notinE','\u22FA':'nisd','\u22FB':'xnis','\u22FC':'nis','\u22FD':'notnivc','\u22FE':'notnivb','\u2305':'barwed','\u2306':'Barwed','\u230C':'drcrop','\u230D':'dlcrop','\u230E':'urcrop','\u230F':'ulcrop','\u2310':'bnot','\u2312':'profline','\u2313':'profsurf','\u2315':'telrec','\u2316':'target','\u231C':'ulcorn','\u231D':'urcorn','\u231E':'dlcorn','\u231F':'drcorn','\u2322':'frown','\u2323':'smile','\u232D':'cylcty','\u232E':'profalar','\u2336':'topbot','\u233D':'ovbar','\u233F':'solbar','\u237C':'angzarr','\u23B0':'lmoust','\u23B1':'rmoust','\u23B4':'tbrk','\u23B5':'bbrk','\u23B6':'bbrktbrk','\u23DC':'OverParenthesis','\u23DD':'UnderParenthesis','\u23DE':'OverBrace','\u23DF':'UnderBrace','\u23E2':'trpezium','\u23E7':'elinters','\u2423':'blank','\u2500':'boxh','\u2502':'boxv','\u250C':'boxdr','\u2510':'boxdl','\u2514':'boxur','\u2518':'boxul','\u251C':'boxvr','\u2524':'boxvl','\u252C':'boxhd','\u2534':'boxhu','\u253C':'boxvh','\u2550':'boxH','\u2551':'boxV','\u2552':'boxdR','\u2553':'boxDr','\u2554':'boxDR','\u2555':'boxdL','\u2556':'boxDl','\u2557':'boxDL','\u2558':'boxuR','\u2559':'boxUr','\u255A':'boxUR','\u255B':'boxuL','\u255C':'boxUl','\u255D':'boxUL','\u255E':'boxvR','\u255F':'boxVr','\u2560':'boxVR','\u2561':'boxvL','\u2562':'boxVl','\u2563':'boxVL','\u2564':'boxHd','\u2565':'boxhD','\u2566':'boxHD','\u2567':'boxHu','\u2568':'boxhU','\u2569':'boxHU','\u256A':'boxvH','\u256B':'boxVh','\u256C':'boxVH','\u2580':'uhblk','\u2584':'lhblk','\u2588':'block','\u2591':'blk14','\u2592':'blk12','\u2593':'blk34','\u25A1':'squ','\u25AA':'squf','\u25AB':'EmptyVerySmallSquare','\u25AD':'rect','\u25AE':'marker','\u25B1':'fltns','\u25B3':'xutri','\u25B4':'utrif','\u25B5':'utri','\u25B8':'rtrif','\u25B9':'rtri','\u25BD':'xdtri','\u25BE':'dtrif','\u25BF':'dtri','\u25C2':'ltrif','\u25C3':'ltri','\u25CA':'loz','\u25CB':'cir','\u25EC':'tridot','\u25EF':'xcirc','\u25F8':'ultri','\u25F9':'urtri','\u25FA':'lltri','\u25FB':'EmptySmallSquare','\u25FC':'FilledSmallSquare','\u2605':'starf','\u2606':'star','\u260E':'phone','\u2640':'female','\u2642':'male','\u2660':'spades','\u2663':'clubs','\u2665':'hearts','\u2666':'diams','\u266A':'sung','\u2713':'check','\u2717':'cross','\u2720':'malt','\u2736':'sext','\u2758':'VerticalSeparator','\u27C8':'bsolhsub','\u27C9':'suphsol','\u27F5':'xlarr','\u27F6':'xrarr','\u27F7':'xharr','\u27F8':'xlArr','\u27F9':'xrArr','\u27FA':'xhArr','\u27FC':'xmap','\u27FF':'dzigrarr','\u2902':'nvlArr','\u2903':'nvrArr','\u2904':'nvHarr','\u2905':'Map','\u290C':'lbarr','\u290D':'rbarr','\u290E':'lBarr','\u290F':'rBarr','\u2910':'RBarr','\u2911':'DDotrahd','\u2912':'UpArrowBar','\u2913':'DownArrowBar','\u2916':'Rarrtl','\u2919':'latail','\u291A':'ratail','\u291B':'lAtail','\u291C':'rAtail','\u291D':'larrfs','\u291E':'rarrfs','\u291F':'larrbfs','\u2920':'rarrbfs','\u2923':'nwarhk','\u2924':'nearhk','\u2925':'searhk','\u2926':'swarhk','\u2927':'nwnear','\u2928':'toea','\u2929':'tosa','\u292A':'swnwar','\u2933':'rarrc','\u2933\u0338':'nrarrc','\u2935':'cudarrr','\u2936':'ldca','\u2937':'rdca','\u2938':'cudarrl','\u2939':'larrpl','\u293C':'curarrm','\u293D':'cularrp','\u2945':'rarrpl','\u2948':'harrcir','\u2949':'Uarrocir','\u294A':'lurdshar','\u294B':'ldrushar','\u294E':'LeftRightVector','\u294F':'RightUpDownVector','\u2950':'DownLeftRightVector','\u2951':'LeftUpDownVector','\u2952':'LeftVectorBar','\u2953':'RightVectorBar','\u2954':'RightUpVectorBar','\u2955':'RightDownVectorBar','\u2956':'DownLeftVectorBar','\u2957':'DownRightVectorBar','\u2958':'LeftUpVectorBar','\u2959':'LeftDownVectorBar','\u295A':'LeftTeeVector','\u295B':'RightTeeVector','\u295C':'RightUpTeeVector','\u295D':'RightDownTeeVector','\u295E':'DownLeftTeeVector','\u295F':'DownRightTeeVector','\u2960':'LeftUpTeeVector','\u2961':'LeftDownTeeVector','\u2962':'lHar','\u2963':'uHar','\u2964':'rHar','\u2965':'dHar','\u2966':'luruhar','\u2967':'ldrdhar','\u2968':'ruluhar','\u2969':'rdldhar','\u296A':'lharul','\u296B':'llhard','\u296C':'rharul','\u296D':'lrhard','\u296E':'udhar','\u296F':'duhar','\u2970':'RoundImplies','\u2971':'erarr','\u2972':'simrarr','\u2973':'larrsim','\u2974':'rarrsim','\u2975':'rarrap','\u2976':'ltlarr','\u2978':'gtrarr','\u2979':'subrarr','\u297B':'suplarr','\u297C':'lfisht','\u297D':'rfisht','\u297E':'ufisht','\u297F':'dfisht','\u299A':'vzigzag','\u299C':'vangrt','\u299D':'angrtvbd','\u29A4':'ange','\u29A5':'range','\u29A6':'dwangle','\u29A7':'uwangle','\u29A8':'angmsdaa','\u29A9':'angmsdab','\u29AA':'angmsdac','\u29AB':'angmsdad','\u29AC':'angmsdae','\u29AD':'angmsdaf','\u29AE':'angmsdag','\u29AF':'angmsdah','\u29B0':'bemptyv','\u29B1':'demptyv','\u29B2':'cemptyv','\u29B3':'raemptyv','\u29B4':'laemptyv','\u29B5':'ohbar','\u29B6':'omid','\u29B7':'opar','\u29B9':'operp','\u29BB':'olcross','\u29BC':'odsold','\u29BE':'olcir','\u29BF':'ofcir','\u29C0':'olt','\u29C1':'ogt','\u29C2':'cirscir','\u29C3':'cirE','\u29C4':'solb','\u29C5':'bsolb','\u29C9':'boxbox','\u29CD':'trisb','\u29CE':'rtriltri','\u29CF':'LeftTriangleBar','\u29CF\u0338':'NotLeftTriangleBar','\u29D0':'RightTriangleBar','\u29D0\u0338':'NotRightTriangleBar','\u29DC':'iinfin','\u29DD':'infintie','\u29DE':'nvinfin','\u29E3':'eparsl','\u29E4':'smeparsl','\u29E5':'eqvparsl','\u29EB':'lozf','\u29F4':'RuleDelayed','\u29F6':'dsol','\u2A00':'xodot','\u2A01':'xoplus','\u2A02':'xotime','\u2A04':'xuplus','\u2A06':'xsqcup','\u2A0D':'fpartint','\u2A10':'cirfnint','\u2A11':'awint','\u2A12':'rppolint','\u2A13':'scpolint','\u2A14':'npolint','\u2A15':'pointint','\u2A16':'quatint','\u2A17':'intlarhk','\u2A22':'pluscir','\u2A23':'plusacir','\u2A24':'simplus','\u2A25':'plusdu','\u2A26':'plussim','\u2A27':'plustwo','\u2A29':'mcomma','\u2A2A':'minusdu','\u2A2D':'loplus','\u2A2E':'roplus','\u2A2F':'Cross','\u2A30':'timesd','\u2A31':'timesbar','\u2A33':'smashp','\u2A34':'lotimes','\u2A35':'rotimes','\u2A36':'otimesas','\u2A37':'Otimes','\u2A38':'odiv','\u2A39':'triplus','\u2A3A':'triminus','\u2A3B':'tritime','\u2A3C':'iprod','\u2A3F':'amalg','\u2A40':'capdot','\u2A42':'ncup','\u2A43':'ncap','\u2A44':'capand','\u2A45':'cupor','\u2A46':'cupcap','\u2A47':'capcup','\u2A48':'cupbrcap','\u2A49':'capbrcup','\u2A4A':'cupcup','\u2A4B':'capcap','\u2A4C':'ccups','\u2A4D':'ccaps','\u2A50':'ccupssm','\u2A53':'And','\u2A54':'Or','\u2A55':'andand','\u2A56':'oror','\u2A57':'orslope','\u2A58':'andslope','\u2A5A':'andv','\u2A5B':'orv','\u2A5C':'andd','\u2A5D':'ord','\u2A5F':'wedbar','\u2A66':'sdote','\u2A6A':'simdot','\u2A6D':'congdot','\u2A6D\u0338':'ncongdot','\u2A6E':'easter','\u2A6F':'apacir','\u2A70':'apE','\u2A70\u0338':'napE','\u2A71':'eplus','\u2A72':'pluse','\u2A73':'Esim','\u2A77':'eDDot','\u2A78':'equivDD','\u2A79':'ltcir','\u2A7A':'gtcir','\u2A7B':'ltquest','\u2A7C':'gtquest','\u2A7D':'les','\u2A7D\u0338':'nles','\u2A7E':'ges','\u2A7E\u0338':'nges','\u2A7F':'lesdot','\u2A80':'gesdot','\u2A81':'lesdoto','\u2A82':'gesdoto','\u2A83':'lesdotor','\u2A84':'gesdotol','\u2A85':'lap','\u2A86':'gap','\u2A87':'lne','\u2A88':'gne','\u2A89':'lnap','\u2A8A':'gnap','\u2A8B':'lEg','\u2A8C':'gEl','\u2A8D':'lsime','\u2A8E':'gsime','\u2A8F':'lsimg','\u2A90':'gsiml','\u2A91':'lgE','\u2A92':'glE','\u2A93':'lesges','\u2A94':'gesles','\u2A95':'els','\u2A96':'egs','\u2A97':'elsdot','\u2A98':'egsdot','\u2A99':'el','\u2A9A':'eg','\u2A9D':'siml','\u2A9E':'simg','\u2A9F':'simlE','\u2AA0':'simgE','\u2AA1':'LessLess','\u2AA1\u0338':'NotNestedLessLess','\u2AA2':'GreaterGreater','\u2AA2\u0338':'NotNestedGreaterGreater','\u2AA4':'glj','\u2AA5':'gla','\u2AA6':'ltcc','\u2AA7':'gtcc','\u2AA8':'lescc','\u2AA9':'gescc','\u2AAA':'smt','\u2AAB':'lat','\u2AAC':'smte','\u2AAC\uFE00':'smtes','\u2AAD':'late','\u2AAD\uFE00':'lates','\u2AAE':'bumpE','\u2AAF':'pre','\u2AAF\u0338':'npre','\u2AB0':'sce','\u2AB0\u0338':'nsce','\u2AB3':'prE','\u2AB4':'scE','\u2AB5':'prnE','\u2AB6':'scnE','\u2AB7':'prap','\u2AB8':'scap','\u2AB9':'prnap','\u2ABA':'scnap','\u2ABB':'Pr','\u2ABC':'Sc','\u2ABD':'subdot','\u2ABE':'supdot','\u2ABF':'subplus','\u2AC0':'supplus','\u2AC1':'submult','\u2AC2':'supmult','\u2AC3':'subedot','\u2AC4':'supedot','\u2AC5':'subE','\u2AC5\u0338':'nsubE','\u2AC6':'supE','\u2AC6\u0338':'nsupE','\u2AC7':'subsim','\u2AC8':'supsim','\u2ACB\uFE00':'vsubnE','\u2ACB':'subnE','\u2ACC\uFE00':'vsupnE','\u2ACC':'supnE','\u2ACF':'csub','\u2AD0':'csup','\u2AD1':'csube','\u2AD2':'csupe','\u2AD3':'subsup','\u2AD4':'supsub','\u2AD5':'subsub','\u2AD6':'supsup','\u2AD7':'suphsub','\u2AD8':'supdsub','\u2AD9':'forkv','\u2ADA':'topfork','\u2ADB':'mlcp','\u2AE4':'Dashv','\u2AE6':'Vdashl','\u2AE7':'Barv','\u2AE8':'vBar','\u2AE9':'vBarv','\u2AEB':'Vbar','\u2AEC':'Not','\u2AED':'bNot','\u2AEE':'rnmid','\u2AEF':'cirmid','\u2AF0':'midcir','\u2AF1':'topcir','\u2AF2':'nhpar','\u2AF3':'parsim','\u2AFD':'parsl','\u2AFD\u20E5':'nparsl','\u266D':'flat','\u266E':'natur','\u266F':'sharp','\xA4':'curren','\xA2':'cent','$':'dollar','\xA3':'pound','\xA5':'yen','\u20AC':'euro','\xB9':'sup1','\xBD':'half','\u2153':'frac13','\xBC':'frac14','\u2155':'frac15','\u2159':'frac16','\u215B':'frac18','\xB2':'sup2','\u2154':'frac23','\u2156':'frac25','\xB3':'sup3','\xBE':'frac34','\u2157':'frac35','\u215C':'frac38','\u2158':'frac45','\u215A':'frac56','\u215D':'frac58','\u215E':'frac78','\uD835\uDCB6':'ascr','\uD835\uDD52':'aopf','\uD835\uDD1E':'afr','\uD835\uDD38':'Aopf','\uD835\uDD04':'Afr','\uD835\uDC9C':'Ascr','\xAA':'ordf','\xE1':'aacute','\xC1':'Aacute','\xE0':'agrave','\xC0':'Agrave','\u0103':'abreve','\u0102':'Abreve','\xE2':'acirc','\xC2':'Acirc','\xE5':'aring','\xC5':'angst','\xE4':'auml','\xC4':'Auml','\xE3':'atilde','\xC3':'Atilde','\u0105':'aogon','\u0104':'Aogon','\u0101':'amacr','\u0100':'Amacr','\xE6':'aelig','\xC6':'AElig','\uD835\uDCB7':'bscr','\uD835\uDD53':'bopf','\uD835\uDD1F':'bfr','\uD835\uDD39':'Bopf','\u212C':'Bscr','\uD835\uDD05':'Bfr','\uD835\uDD20':'cfr','\uD835\uDCB8':'cscr','\uD835\uDD54':'copf','\u212D':'Cfr','\uD835\uDC9E':'Cscr','\u2102':'Copf','\u0107':'cacute','\u0106':'Cacute','\u0109':'ccirc','\u0108':'Ccirc','\u010D':'ccaron','\u010C':'Ccaron','\u010B':'cdot','\u010A':'Cdot','\xE7':'ccedil','\xC7':'Ccedil','\u2105':'incare','\uD835\uDD21':'dfr','\u2146':'dd','\uD835\uDD55':'dopf','\uD835\uDCB9':'dscr','\uD835\uDC9F':'Dscr','\uD835\uDD07':'Dfr','\u2145':'DD','\uD835\uDD3B':'Dopf','\u010F':'dcaron','\u010E':'Dcaron','\u0111':'dstrok','\u0110':'Dstrok','\xF0':'eth','\xD0':'ETH','\u2147':'ee','\u212F':'escr','\uD835\uDD22':'efr','\uD835\uDD56':'eopf','\u2130':'Escr','\uD835\uDD08':'Efr','\uD835\uDD3C':'Eopf','\xE9':'eacute','\xC9':'Eacute','\xE8':'egrave','\xC8':'Egrave','\xEA':'ecirc','\xCA':'Ecirc','\u011B':'ecaron','\u011A':'Ecaron','\xEB':'euml','\xCB':'Euml','\u0117':'edot','\u0116':'Edot','\u0119':'eogon','\u0118':'Eogon','\u0113':'emacr','\u0112':'Emacr','\uD835\uDD23':'ffr','\uD835\uDD57':'fopf','\uD835\uDCBB':'fscr','\uD835\uDD09':'Ffr','\uD835\uDD3D':'Fopf','\u2131':'Fscr','\uFB00':'fflig','\uFB03':'ffilig','\uFB04':'ffllig','\uFB01':'filig','fj':'fjlig','\uFB02':'fllig','\u0192':'fnof','\u210A':'gscr','\uD835\uDD58':'gopf','\uD835\uDD24':'gfr','\uD835\uDCA2':'Gscr','\uD835\uDD3E':'Gopf','\uD835\uDD0A':'Gfr','\u01F5':'gacute','\u011F':'gbreve','\u011E':'Gbreve','\u011D':'gcirc','\u011C':'Gcirc','\u0121':'gdot','\u0120':'Gdot','\u0122':'Gcedil','\uD835\uDD25':'hfr','\u210E':'planckh','\uD835\uDCBD':'hscr','\uD835\uDD59':'hopf','\u210B':'Hscr','\u210C':'Hfr','\u210D':'Hopf','\u0125':'hcirc','\u0124':'Hcirc','\u210F':'hbar','\u0127':'hstrok','\u0126':'Hstrok','\uD835\uDD5A':'iopf','\uD835\uDD26':'ifr','\uD835\uDCBE':'iscr','\u2148':'ii','\uD835\uDD40':'Iopf','\u2110':'Iscr','\u2111':'Im','\xED':'iacute','\xCD':'Iacute','\xEC':'igrave','\xCC':'Igrave','\xEE':'icirc','\xCE':'Icirc','\xEF':'iuml','\xCF':'Iuml','\u0129':'itilde','\u0128':'Itilde','\u0130':'Idot','\u012F':'iogon','\u012E':'Iogon','\u012B':'imacr','\u012A':'Imacr','\u0133':'ijlig','\u0132':'IJlig','\u0131':'imath','\uD835\uDCBF':'jscr','\uD835\uDD5B':'jopf','\uD835\uDD27':'jfr','\uD835\uDCA5':'Jscr','\uD835\uDD0D':'Jfr','\uD835\uDD41':'Jopf','\u0135':'jcirc','\u0134':'Jcirc','\u0237':'jmath','\uD835\uDD5C':'kopf','\uD835\uDCC0':'kscr','\uD835\uDD28':'kfr','\uD835\uDCA6':'Kscr','\uD835\uDD42':'Kopf','\uD835\uDD0E':'Kfr','\u0137':'kcedil','\u0136':'Kcedil','\uD835\uDD29':'lfr','\uD835\uDCC1':'lscr','\u2113':'ell','\uD835\uDD5D':'lopf','\u2112':'Lscr','\uD835\uDD0F':'Lfr','\uD835\uDD43':'Lopf','\u013A':'lacute','\u0139':'Lacute','\u013E':'lcaron','\u013D':'Lcaron','\u013C':'lcedil','\u013B':'Lcedil','\u0142':'lstrok','\u0141':'Lstrok','\u0140':'lmidot','\u013F':'Lmidot','\uD835\uDD2A':'mfr','\uD835\uDD5E':'mopf','\uD835\uDCC2':'mscr','\uD835\uDD10':'Mfr','\uD835\uDD44':'Mopf','\u2133':'Mscr','\uD835\uDD2B':'nfr','\uD835\uDD5F':'nopf','\uD835\uDCC3':'nscr','\u2115':'Nopf','\uD835\uDCA9':'Nscr','\uD835\uDD11':'Nfr','\u0144':'nacute','\u0143':'Nacute','\u0148':'ncaron','\u0147':'Ncaron','\xF1':'ntilde','\xD1':'Ntilde','\u0146':'ncedil','\u0145':'Ncedil','\u2116':'numero','\u014B':'eng','\u014A':'ENG','\uD835\uDD60':'oopf','\uD835\uDD2C':'ofr','\u2134':'oscr','\uD835\uDCAA':'Oscr','\uD835\uDD12':'Ofr','\uD835\uDD46':'Oopf','\xBA':'ordm','\xF3':'oacute','\xD3':'Oacute','\xF2':'ograve','\xD2':'Ograve','\xF4':'ocirc','\xD4':'Ocirc','\xF6':'ouml','\xD6':'Ouml','\u0151':'odblac','\u0150':'Odblac','\xF5':'otilde','\xD5':'Otilde','\xF8':'oslash','\xD8':'Oslash','\u014D':'omacr','\u014C':'Omacr','\u0153':'oelig','\u0152':'OElig','\uD835\uDD2D':'pfr','\uD835\uDCC5':'pscr','\uD835\uDD61':'popf','\u2119':'Popf','\uD835\uDD13':'Pfr','\uD835\uDCAB':'Pscr','\uD835\uDD62':'qopf','\uD835\uDD2E':'qfr','\uD835\uDCC6':'qscr','\uD835\uDCAC':'Qscr','\uD835\uDD14':'Qfr','\u211A':'Qopf','\u0138':'kgreen','\uD835\uDD2F':'rfr','\uD835\uDD63':'ropf','\uD835\uDCC7':'rscr','\u211B':'Rscr','\u211C':'Re','\u211D':'Ropf','\u0155':'racute','\u0154':'Racute','\u0159':'rcaron','\u0158':'Rcaron','\u0157':'rcedil','\u0156':'Rcedil','\uD835\uDD64':'sopf','\uD835\uDCC8':'sscr','\uD835\uDD30':'sfr','\uD835\uDD4A':'Sopf','\uD835\uDD16':'Sfr','\uD835\uDCAE':'Sscr','\u24C8':'oS','\u015B':'sacute','\u015A':'Sacute','\u015D':'scirc','\u015C':'Scirc','\u0161':'scaron','\u0160':'Scaron','\u015F':'scedil','\u015E':'Scedil','\xDF':'szlig','\uD835\uDD31':'tfr','\uD835\uDCC9':'tscr','\uD835\uDD65':'topf','\uD835\uDCAF':'Tscr','\uD835\uDD17':'Tfr','\uD835\uDD4B':'Topf','\u0165':'tcaron','\u0164':'Tcaron','\u0163':'tcedil','\u0162':'Tcedil','\u2122':'trade','\u0167':'tstrok','\u0166':'Tstrok','\uD835\uDCCA':'uscr','\uD835\uDD66':'uopf','\uD835\uDD32':'ufr','\uD835\uDD4C':'Uopf','\uD835\uDD18':'Ufr','\uD835\uDCB0':'Uscr','\xFA':'uacute','\xDA':'Uacute','\xF9':'ugrave','\xD9':'Ugrave','\u016D':'ubreve','\u016C':'Ubreve','\xFB':'ucirc','\xDB':'Ucirc','\u016F':'uring','\u016E':'Uring','\xFC':'uuml','\xDC':'Uuml','\u0171':'udblac','\u0170':'Udblac','\u0169':'utilde','\u0168':'Utilde','\u0173':'uogon','\u0172':'Uogon','\u016B':'umacr','\u016A':'Umacr','\uD835\uDD33':'vfr','\uD835\uDD67':'vopf','\uD835\uDCCB':'vscr','\uD835\uDD19':'Vfr','\uD835\uDD4D':'Vopf','\uD835\uDCB1':'Vscr','\uD835\uDD68':'wopf','\uD835\uDCCC':'wscr','\uD835\uDD34':'wfr','\uD835\uDCB2':'Wscr','\uD835\uDD4E':'Wopf','\uD835\uDD1A':'Wfr','\u0175':'wcirc','\u0174':'Wcirc','\uD835\uDD35':'xfr','\uD835\uDCCD':'xscr','\uD835\uDD69':'xopf','\uD835\uDD4F':'Xopf','\uD835\uDD1B':'Xfr','\uD835\uDCB3':'Xscr','\uD835\uDD36':'yfr','\uD835\uDCCE':'yscr','\uD835\uDD6A':'yopf','\uD835\uDCB4':'Yscr','\uD835\uDD1C':'Yfr','\uD835\uDD50':'Yopf','\xFD':'yacute','\xDD':'Yacute','\u0177':'ycirc','\u0176':'Ycirc','\xFF':'yuml','\u0178':'Yuml','\uD835\uDCCF':'zscr','\uD835\uDD37':'zfr','\uD835\uDD6B':'zopf','\u2128':'Zfr','\u2124':'Zopf','\uD835\uDCB5':'Zscr','\u017A':'zacute','\u0179':'Zacute','\u017E':'zcaron','\u017D':'Zcaron','\u017C':'zdot','\u017B':'Zdot','\u01B5':'imped','\xFE':'thorn','\xDE':'THORN','\u0149':'napos','\u03B1':'alpha','\u0391':'Alpha','\u03B2':'beta','\u0392':'Beta','\u03B3':'gamma','\u0393':'Gamma','\u03B4':'delta','\u0394':'Delta','\u03B5':'epsi','\u03F5':'epsiv','\u0395':'Epsilon','\u03DD':'gammad','\u03DC':'Gammad','\u03B6':'zeta','\u0396':'Zeta','\u03B7':'eta','\u0397':'Eta','\u03B8':'theta','\u03D1':'thetav','\u0398':'Theta','\u03B9':'iota','\u0399':'Iota','\u03BA':'kappa','\u03F0':'kappav','\u039A':'Kappa','\u03BB':'lambda','\u039B':'Lambda','\u03BC':'mu','\xB5':'micro','\u039C':'Mu','\u03BD':'nu','\u039D':'Nu','\u03BE':'xi','\u039E':'Xi','\u03BF':'omicron','\u039F':'Omicron','\u03C0':'pi','\u03D6':'piv','\u03A0':'Pi','\u03C1':'rho','\u03F1':'rhov','\u03A1':'Rho','\u03C3':'sigma','\u03A3':'Sigma','\u03C2':'sigmaf','\u03C4':'tau','\u03A4':'Tau','\u03C5':'upsi','\u03A5':'Upsilon','\u03D2':'Upsi','\u03C6':'phi','\u03D5':'phiv','\u03A6':'Phi','\u03C7':'chi','\u03A7':'Chi','\u03C8':'psi','\u03A8':'Psi','\u03C9':'omega','\u03A9':'ohm','\u0430':'acy','\u0410':'Acy','\u0431':'bcy','\u0411':'Bcy','\u0432':'vcy','\u0412':'Vcy','\u0433':'gcy','\u0413':'Gcy','\u0453':'gjcy','\u0403':'GJcy','\u0434':'dcy','\u0414':'Dcy','\u0452':'djcy','\u0402':'DJcy','\u0435':'iecy','\u0415':'IEcy','\u0451':'iocy','\u0401':'IOcy','\u0454':'jukcy','\u0404':'Jukcy','\u0436':'zhcy','\u0416':'ZHcy','\u0437':'zcy','\u0417':'Zcy','\u0455':'dscy','\u0405':'DScy','\u0438':'icy','\u0418':'Icy','\u0456':'iukcy','\u0406':'Iukcy','\u0457':'yicy','\u0407':'YIcy','\u0439':'jcy','\u0419':'Jcy','\u0458':'jsercy','\u0408':'Jsercy','\u043A':'kcy','\u041A':'Kcy','\u045C':'kjcy','\u040C':'KJcy','\u043B':'lcy','\u041B':'Lcy','\u0459':'ljcy','\u0409':'LJcy','\u043C':'mcy','\u041C':'Mcy','\u043D':'ncy','\u041D':'Ncy','\u045A':'njcy','\u040A':'NJcy','\u043E':'ocy','\u041E':'Ocy','\u043F':'pcy','\u041F':'Pcy','\u0440':'rcy','\u0420':'Rcy','\u0441':'scy','\u0421':'Scy','\u0442':'tcy','\u0422':'Tcy','\u045B':'tshcy','\u040B':'TSHcy','\u0443':'ucy','\u0423':'Ucy','\u045E':'ubrcy','\u040E':'Ubrcy','\u0444':'fcy','\u0424':'Fcy','\u0445':'khcy','\u0425':'KHcy','\u0446':'tscy','\u0426':'TScy','\u0447':'chcy','\u0427':'CHcy','\u045F':'dzcy','\u040F':'DZcy','\u0448':'shcy','\u0428':'SHcy','\u0449':'shchcy','\u0429':'SHCHcy','\u044A':'hardcy','\u042A':'HARDcy','\u044B':'ycy','\u042B':'Ycy','\u044C':'softcy','\u042C':'SOFTcy','\u044D':'ecy','\u042D':'Ecy','\u044E':'yucy','\u042E':'YUcy','\u044F':'yacy','\u042F':'YAcy','\u2135':'aleph','\u2136':'beth','\u2137':'gimel','\u2138':'daleth'};
-
-	var regexEscape = /["&'<>`]/g;
-	var escapeMap = {
-		'"': '"',
-		'&': '&',
-		'\'': ''',
-		'<': '<',
-		// See https://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
-		// following is not strictly necessary unless it’s part of a tag or an
-		// unquoted attribute value. We’re only escaping it to support those
-		// situations, and for XML support.
-		'>': '>',
-		// In Internet Explorer ≤ 8, the backtick character can be used
-		// to break out of (un)quoted attribute values or HTML comments.
-		// See http://html5sec.org/#102, http://html5sec.org/#108, and
-		// http://html5sec.org/#133.
-		'`': '`'
-	};
-
-	var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
-	var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
-	var regexDecode = /&(CounterClockwiseContourIntegral|DoubleLongLeftRightArrow|ClockwiseContourIntegral|NotNestedGreaterGreater|NotSquareSupersetEqual|DiacriticalDoubleAcute|NotRightTriangleEqual|NotSucceedsSlantEqual|NotPrecedesSlantEqual|CloseCurlyDoubleQuote|NegativeVeryThinSpace|DoubleContourIntegral|FilledVerySmallSquare|CapitalDifferentialD|OpenCurlyDoubleQuote|EmptyVerySmallSquare|NestedGreaterGreater|DoubleLongRightArrow|NotLeftTriangleEqual|NotGreaterSlantEqual|ReverseUpEquilibrium|DoubleLeftRightArrow|NotSquareSubsetEqual|NotDoubleVerticalBar|RightArrowLeftArrow|NotGreaterFullEqual|NotRightTriangleBar|SquareSupersetEqual|DownLeftRightVector|DoubleLongLeftArrow|leftrightsquigarrow|LeftArrowRightArrow|NegativeMediumSpace|blacktriangleright|RightDownVectorBar|PrecedesSlantEqual|RightDoubleBracket|SucceedsSlantEqual|NotLeftTriangleBar|RightTriangleEqual|SquareIntersection|RightDownTeeVector|ReverseEquilibrium|NegativeThickSpace|longleftrightarrow|Longleftrightarrow|LongLeftRightArrow|DownRightTeeVector|DownRightVectorBar|GreaterSlantEqual|SquareSubsetEqual|LeftDownVectorBar|LeftDoubleBracket|VerticalSeparator|rightleftharpoons|NotGreaterGreater|NotSquareSuperset|blacktriangleleft|blacktriangledown|NegativeThinSpace|LeftDownTeeVector|NotLessSlantEqual|leftrightharpoons|DoubleUpDownArrow|DoubleVerticalBar|LeftTriangleEqual|FilledSmallSquare|twoheadrightarrow|NotNestedLessLess|DownLeftTeeVector|DownLeftVectorBar|RightAngleBracket|NotTildeFullEqual|NotReverseElement|RightUpDownVector|DiacriticalTilde|NotSucceedsTilde|circlearrowright|NotPrecedesEqual|rightharpoondown|DoubleRightArrow|NotSucceedsEqual|NonBreakingSpace|NotRightTriangle|LessEqualGreater|RightUpTeeVector|LeftAngleBracket|GreaterFullEqual|DownArrowUpArrow|RightUpVectorBar|twoheadleftarrow|GreaterEqualLess|downharpoonright|RightTriangleBar|ntrianglerighteq|NotSupersetEqual|LeftUpDownVector|DiacriticalAcute|rightrightarrows|vartriangleright|UpArrowDownArrow|DiacriticalGrave|UnderParenthesis|EmptySmallSquare|LeftUpVectorBar|leftrightarrows|DownRightVector|downharpoonleft|trianglerighteq|ShortRightArrow|OverParenthesis|DoubleLeftArrow|DoubleDownArrow|NotSquareSubset|bigtriangledown|ntrianglelefteq|UpperRightArrow|curvearrowright|vartriangleleft|NotLeftTriangle|nleftrightarrow|LowerRightArrow|NotHumpDownHump|NotGreaterTilde|rightthreetimes|LeftUpTeeVector|NotGreaterEqual|straightepsilon|LeftTriangleBar|rightsquigarrow|ContourIntegral|rightleftarrows|CloseCurlyQuote|RightDownVector|LeftRightVector|nLeftrightarrow|leftharpoondown|circlearrowleft|SquareSuperset|OpenCurlyQuote|hookrightarrow|HorizontalLine|DiacriticalDot|NotLessGreater|ntriangleright|DoubleRightTee|InvisibleComma|InvisibleTimes|LowerLeftArrow|DownLeftVector|NotSubsetEqual|curvearrowleft|trianglelefteq|NotVerticalBar|TildeFullEqual|downdownarrows|NotGreaterLess|RightTeeVector|ZeroWidthSpace|looparrowright|LongRightArrow|doublebarwedge|ShortLeftArrow|ShortDownArrow|RightVectorBar|GreaterGreater|ReverseElement|rightharpoonup|LessSlantEqual|leftthreetimes|upharpoonright|rightarrowtail|LeftDownVector|Longrightarrow|NestedLessLess|UpperLeftArrow|nshortparallel|leftleftarrows|leftrightarrow|Leftrightarrow|LeftRightArrow|longrightarrow|upharpoonleft|RightArrowBar|ApplyFunction|LeftTeeVector|leftarrowtail|NotEqualTilde|varsubsetneqq|varsupsetneqq|RightTeeArrow|SucceedsEqual|SucceedsTilde|LeftVectorBar|SupersetEqual|hookleftarrow|DifferentialD|VerticalTilde|VeryThinSpace|blacktriangle|bigtriangleup|LessFullEqual|divideontimes|leftharpoonup|UpEquilibrium|ntriangleleft|RightTriangle|measuredangle|shortparallel|longleftarrow|Longleftarrow|LongLeftArrow|DoubleLeftTee|Poincareplane|PrecedesEqual|triangleright|DoubleUpArrow|RightUpVector|fallingdotseq|looparrowleft|PrecedesTilde|NotTildeEqual|NotTildeTilde|smallsetminus|Proportional|triangleleft|triangledown|UnderBracket|NotHumpEqual|exponentiale|ExponentialE|NotLessTilde|HilbertSpace|RightCeiling|blacklozenge|varsupsetneq|HumpDownHump|GreaterEqual|VerticalLine|LeftTeeArrow|NotLessEqual|DownTeeArrow|LeftTriangle|varsubsetneq|Intersection|NotCongruent|DownArrowBar|LeftUpVector|LeftArrowBar|risingdotseq|GreaterTilde|RoundImplies|SquareSubset|ShortUpArrow|NotSuperset|quaternions|precnapprox|backepsilon|preccurlyeq|OverBracket|blacksquare|MediumSpace|VerticalBar|circledcirc|circleddash|CircleMinus|CircleTimes|LessGreater|curlyeqprec|curlyeqsucc|diamondsuit|UpDownArrow|Updownarrow|RuleDelayed|Rrightarrow|updownarrow|RightVector|nRightarrow|nrightarrow|eqslantless|LeftCeiling|Equilibrium|SmallCircle|expectation|NotSucceeds|thickapprox|GreaterLess|SquareUnion|NotPrecedes|NotLessLess|straightphi|succnapprox|succcurlyeq|SubsetEqual|sqsupseteq|Proportion|Laplacetrf|ImaginaryI|supsetneqq|NotGreater|gtreqqless|NotElement|ThickSpace|TildeEqual|TildeTilde|Fouriertrf|rmoustache|EqualTilde|eqslantgtr|UnderBrace|LeftVector|UpArrowBar|nLeftarrow|nsubseteqq|subsetneqq|nsupseteqq|nleftarrow|succapprox|lessapprox|UpTeeArrow|upuparrows|curlywedge|lesseqqgtr|varepsilon|varnothing|RightFloor|complement|CirclePlus|sqsubseteq|Lleftarrow|circledast|RightArrow|Rightarrow|rightarrow|lmoustache|Bernoullis|precapprox|mapstoleft|mapstodown|longmapsto|dotsquare|downarrow|DoubleDot|nsubseteq|supsetneq|leftarrow|nsupseteq|subsetneq|ThinSpace|ngeqslant|subseteqq|HumpEqual|NotSubset|triangleq|NotCupCap|lesseqgtr|heartsuit|TripleDot|Leftarrow|Coproduct|Congruent|varpropto|complexes|gvertneqq|LeftArrow|LessTilde|supseteqq|MinusPlus|CircleDot|nleqslant|NotExists|gtreqless|nparallel|UnionPlus|LeftFloor|checkmark|CenterDot|centerdot|Mellintrf|gtrapprox|bigotimes|OverBrace|spadesuit|therefore|pitchfork|rationals|PlusMinus|Backslash|Therefore|DownBreve|backsimeq|backprime|DownArrow|nshortmid|Downarrow|lvertneqq|eqvparsl|imagline|imagpart|infintie|integers|Integral|intercal|LessLess|Uarrocir|intlarhk|sqsupset|angmsdaf|sqsubset|llcorner|vartheta|cupbrcap|lnapprox|Superset|SuchThat|succnsim|succneqq|angmsdag|biguplus|curlyvee|trpezium|Succeeds|NotTilde|bigwedge|angmsdah|angrtvbd|triminus|cwconint|fpartint|lrcorner|smeparsl|subseteq|urcorner|lurdshar|laemptyv|DDotrahd|approxeq|ldrushar|awconint|mapstoup|backcong|shortmid|triangle|geqslant|gesdotol|timesbar|circledR|circledS|setminus|multimap|naturals|scpolint|ncongdot|RightTee|boxminus|gnapprox|boxtimes|andslope|thicksim|angmsdaa|varsigma|cirfnint|rtriltri|angmsdab|rppolint|angmsdac|barwedge|drbkarow|clubsuit|thetasym|bsolhsub|capbrcup|dzigrarr|doteqdot|DotEqual|dotminus|UnderBar|NotEqual|realpart|otimesas|ulcorner|hksearow|hkswarow|parallel|PartialD|elinters|emptyset|plusacir|bbrktbrk|angmsdad|pointint|bigoplus|angmsdae|Precedes|bigsqcup|varkappa|notindot|supseteq|precneqq|precnsim|profalar|profline|profsurf|leqslant|lesdotor|raemptyv|subplus|notnivb|notnivc|subrarr|zigrarr|vzigzag|submult|subedot|Element|between|cirscir|larrbfs|larrsim|lotimes|lbrksld|lbrkslu|lozenge|ldrdhar|dbkarow|bigcirc|epsilon|simrarr|simplus|ltquest|Epsilon|luruhar|gtquest|maltese|npolint|eqcolon|npreceq|bigodot|ddagger|gtrless|bnequiv|harrcir|ddotseq|equivDD|backsim|demptyv|nsqsube|nsqsupe|Upsilon|nsubset|upsilon|minusdu|nsucceq|swarrow|nsupset|coloneq|searrow|boxplus|napprox|natural|asympeq|alefsym|congdot|nearrow|bigstar|diamond|supplus|tritime|LeftTee|nvinfin|triplus|NewLine|nvltrie|nvrtrie|nwarrow|nexists|Diamond|ruluhar|Implies|supmult|angzarr|suplarr|suphsub|questeq|because|digamma|Because|olcross|bemptyv|omicron|Omicron|rotimes|NoBreak|intprod|angrtvb|orderof|uwangle|suphsol|lesdoto|orslope|DownTee|realine|cudarrl|rdldhar|OverBar|supedot|lessdot|supdsub|topfork|succsim|rbrkslu|rbrksld|pertenk|cudarrr|isindot|planckh|lessgtr|pluscir|gesdoto|plussim|plustwo|lesssim|cularrp|rarrsim|Cayleys|notinva|notinvb|notinvc|UpArrow|Uparrow|uparrow|NotLess|dwangle|precsim|Product|curarrm|Cconint|dotplus|rarrbfs|ccupssm|Cedilla|cemptyv|notniva|quatint|frac35|frac38|frac45|frac56|frac58|frac78|tridot|xoplus|gacute|gammad|Gammad|lfisht|lfloor|bigcup|sqsupe|gbreve|Gbreve|lharul|sqsube|sqcups|Gcedil|apacir|llhard|lmidot|Lmidot|lmoust|andand|sqcaps|approx|Abreve|spades|circeq|tprime|divide|topcir|Assign|topbot|gesdot|divonx|xuplus|timesd|gesles|atilde|solbar|SOFTcy|loplus|timesb|lowast|lowbar|dlcorn|dlcrop|softcy|dollar|lparlt|thksim|lrhard|Atilde|lsaquo|smashp|bigvee|thinsp|wreath|bkarow|lsquor|lstrok|Lstrok|lthree|ltimes|ltlarr|DotDot|simdot|ltrPar|weierp|xsqcup|angmsd|sigmav|sigmaf|zeetrf|Zcaron|zcaron|mapsto|vsupne|thetav|cirmid|marker|mcomma|Zacute|vsubnE|there4|gtlPar|vsubne|bottom|gtrarr|SHCHcy|shchcy|midast|midcir|middot|minusb|minusd|gtrdot|bowtie|sfrown|mnplus|models|colone|seswar|Colone|mstpos|searhk|gtrsim|nacute|Nacute|boxbox|telrec|hairsp|Tcedil|nbumpe|scnsim|ncaron|Ncaron|ncedil|Ncedil|hamilt|Scedil|nearhk|hardcy|HARDcy|tcedil|Tcaron|commat|nequiv|nesear|tcaron|target|hearts|nexist|varrho|scedil|Scaron|scaron|hellip|Sacute|sacute|hercon|swnwar|compfn|rtimes|rthree|rsquor|rsaquo|zacute|wedgeq|homtht|barvee|barwed|Barwed|rpargt|horbar|conint|swarhk|roplus|nltrie|hslash|hstrok|Hstrok|rmoust|Conint|bprime|hybull|hyphen|iacute|Iacute|supsup|supsub|supsim|varphi|coprod|brvbar|agrave|Supset|supset|igrave|Igrave|notinE|Agrave|iiiint|iinfin|copysr|wedbar|Verbar|vangrt|becaus|incare|verbar|inodot|bullet|drcorn|intcal|drcrop|cularr|vellip|Utilde|bumpeq|cupcap|dstrok|Dstrok|CupCap|cupcup|cupdot|eacute|Eacute|supdot|iquest|easter|ecaron|Ecaron|ecolon|isinsv|utilde|itilde|Itilde|curarr|succeq|Bumpeq|cacute|ulcrop|nparsl|Cacute|nprcue|egrave|Egrave|nrarrc|nrarrw|subsup|subsub|nrtrie|jsercy|nsccue|Jsercy|kappav|kcedil|Kcedil|subsim|ulcorn|nsimeq|egsdot|veebar|kgreen|capand|elsdot|Subset|subset|curren|aacute|lacute|Lacute|emptyv|ntilde|Ntilde|lagran|lambda|Lambda|capcap|Ugrave|langle|subdot|emsp13|numero|emsp14|nvdash|nvDash|nVdash|nVDash|ugrave|ufisht|nvHarr|larrfs|nvlArr|larrhk|larrlp|larrpl|nvrArr|Udblac|nwarhk|larrtl|nwnear|oacute|Oacute|latail|lAtail|sstarf|lbrace|odblac|Odblac|lbrack|udblac|odsold|eparsl|lcaron|Lcaron|ograve|Ograve|lcedil|Lcedil|Aacute|ssmile|ssetmn|squarf|ldquor|capcup|ominus|cylcty|rharul|eqcirc|dagger|rfloor|rfisht|Dagger|daleth|equals|origof|capdot|equest|dcaron|Dcaron|rdquor|oslash|Oslash|otilde|Otilde|otimes|Otimes|urcrop|Ubreve|ubreve|Yacute|Uacute|uacute|Rcedil|rcedil|urcorn|parsim|Rcaron|Vdashl|rcaron|Tstrok|percnt|period|permil|Exists|yacute|rbrack|rbrace|phmmat|ccaron|Ccaron|planck|ccedil|plankv|tstrok|female|plusdo|plusdu|ffilig|plusmn|ffllig|Ccedil|rAtail|dfisht|bernou|ratail|Rarrtl|rarrtl|angsph|rarrpl|rarrlp|rarrhk|xwedge|xotime|forall|ForAll|Vvdash|vsupnE|preceq|bigcap|frac12|frac13|frac14|primes|rarrfs|prnsim|frac15|Square|frac16|square|lesdot|frac18|frac23|propto|prurel|rarrap|rangle|puncsp|frac25|Racute|qprime|racute|lesges|frac34|abreve|AElig|eqsim|utdot|setmn|urtri|Equal|Uring|seArr|uring|searr|dashv|Dashv|mumap|nabla|iogon|Iogon|sdote|sdotb|scsim|napid|napos|equiv|natur|Acirc|dblac|erarr|nbump|iprod|erDot|ucirc|awint|esdot|angrt|ncong|isinE|scnap|Scirc|scirc|ndash|isins|Ubrcy|nearr|neArr|isinv|nedot|ubrcy|acute|Ycirc|iukcy|Iukcy|xutri|nesim|caret|jcirc|Jcirc|caron|twixt|ddarr|sccue|exist|jmath|sbquo|ngeqq|angst|ccaps|lceil|ngsim|UpTee|delta|Delta|rtrif|nharr|nhArr|nhpar|rtrie|jukcy|Jukcy|kappa|rsquo|Kappa|nlarr|nlArr|TSHcy|rrarr|aogon|Aogon|fflig|xrarr|tshcy|ccirc|nleqq|filig|upsih|nless|dharl|nlsim|fjlig|ropar|nltri|dharr|robrk|roarr|fllig|fltns|roang|rnmid|subnE|subne|lAarr|trisb|Ccirc|acirc|ccups|blank|VDash|forkv|Vdash|langd|cedil|blk12|blk14|laquo|strns|diams|notin|vDash|larrb|blk34|block|disin|uplus|vdash|vBarv|aelig|starf|Wedge|check|xrArr|lates|lbarr|lBarr|notni|lbbrk|bcong|frasl|lbrke|frown|vrtri|vprop|vnsup|gamma|Gamma|wedge|xodot|bdquo|srarr|doteq|ldquo|boxdl|boxdL|gcirc|Gcirc|boxDl|boxDL|boxdr|boxdR|boxDr|TRADE|trade|rlhar|boxDR|vnsub|npart|vltri|rlarr|boxhd|boxhD|nprec|gescc|nrarr|nrArr|boxHd|boxHD|boxhu|boxhU|nrtri|boxHu|clubs|boxHU|times|colon|Colon|gimel|xlArr|Tilde|nsime|tilde|nsmid|nspar|THORN|thorn|xlarr|nsube|nsubE|thkap|xhArr|comma|nsucc|boxul|boxuL|nsupe|nsupE|gneqq|gnsim|boxUl|boxUL|grave|boxur|boxuR|boxUr|boxUR|lescc|angle|bepsi|boxvh|varpi|boxvH|numsp|Theta|gsime|gsiml|theta|boxVh|boxVH|boxvl|gtcir|gtdot|boxvL|boxVl|boxVL|crarr|cross|Cross|nvsim|boxvr|nwarr|nwArr|sqsup|dtdot|Uogon|lhard|lharu|dtrif|ocirc|Ocirc|lhblk|duarr|odash|sqsub|Hacek|sqcup|llarr|duhar|oelig|OElig|ofcir|boxvR|uogon|lltri|boxVr|csube|uuarr|ohbar|csupe|ctdot|olarr|olcir|harrw|oline|sqcap|omacr|Omacr|omega|Omega|boxVR|aleph|lneqq|lnsim|loang|loarr|rharu|lobrk|hcirc|operp|oplus|rhard|Hcirc|orarr|Union|order|ecirc|Ecirc|cuepr|szlig|cuesc|breve|reals|eDDot|Breve|hoarr|lopar|utrif|rdquo|Umacr|umacr|efDot|swArr|ultri|alpha|rceil|ovbar|swarr|Wcirc|wcirc|smtes|smile|bsemi|lrarr|aring|parsl|lrhar|bsime|uhblk|lrtri|cupor|Aring|uharr|uharl|slarr|rbrke|bsolb|lsime|rbbrk|RBarr|lsimg|phone|rBarr|rbarr|icirc|lsquo|Icirc|emacr|Emacr|ratio|simne|plusb|simlE|simgE|simeq|pluse|ltcir|ltdot|empty|xharr|xdtri|iexcl|Alpha|ltrie|rarrw|pound|ltrif|xcirc|bumpe|prcue|bumpE|asymp|amacr|cuvee|Sigma|sigma|iiint|udhar|iiota|ijlig|IJlig|supnE|imacr|Imacr|prime|Prime|image|prnap|eogon|Eogon|rarrc|mdash|mDDot|cuwed|imath|supne|imped|Amacr|udarr|prsim|micro|rarrb|cwint|raquo|infin|eplus|range|rangd|Ucirc|radic|minus|amalg|veeeq|rAarr|epsiv|ycirc|quest|sharp|quot|zwnj|Qscr|race|qscr|Qopf|qopf|qint|rang|Rang|Zscr|zscr|Zopf|zopf|rarr|rArr|Rarr|Pscr|pscr|prop|prod|prnE|prec|ZHcy|zhcy|prap|Zeta|zeta|Popf|popf|Zdot|plus|zdot|Yuml|yuml|phiv|YUcy|yucy|Yscr|yscr|perp|Yopf|yopf|part|para|YIcy|Ouml|rcub|yicy|YAcy|rdca|ouml|osol|Oscr|rdsh|yacy|real|oscr|xvee|andd|rect|andv|Xscr|oror|ordm|ordf|xscr|ange|aopf|Aopf|rHar|Xopf|opar|Oopf|xopf|xnis|rhov|oopf|omid|xmap|oint|apid|apos|ogon|ascr|Ascr|odot|odiv|xcup|xcap|ocir|oast|nvlt|nvle|nvgt|nvge|nvap|Wscr|wscr|auml|ntlg|ntgl|nsup|nsub|nsim|Nscr|nscr|nsce|Wopf|ring|npre|wopf|npar|Auml|Barv|bbrk|Nopf|nopf|nmid|nLtv|beta|ropf|Ropf|Beta|beth|nles|rpar|nleq|bnot|bNot|nldr|NJcy|rscr|Rscr|Vscr|vscr|rsqb|njcy|bopf|nisd|Bopf|rtri|Vopf|nGtv|ngtr|vopf|boxh|boxH|boxv|nges|ngeq|boxV|bscr|scap|Bscr|bsim|Vert|vert|bsol|bull|bump|caps|cdot|ncup|scnE|ncap|nbsp|napE|Cdot|cent|sdot|Vbar|nang|vBar|chcy|Mscr|mscr|sect|semi|CHcy|Mopf|mopf|sext|circ|cire|mldr|mlcp|cirE|comp|shcy|SHcy|vArr|varr|cong|copf|Copf|copy|COPY|malt|male|macr|lvnE|cscr|ltri|sime|ltcc|simg|Cscr|siml|csub|Uuml|lsqb|lsim|uuml|csup|Lscr|lscr|utri|smid|lpar|cups|smte|lozf|darr|Lopf|Uscr|solb|lopf|sopf|Sopf|lneq|uscr|spar|dArr|lnap|Darr|dash|Sqrt|LJcy|ljcy|lHar|dHar|Upsi|upsi|diam|lesg|djcy|DJcy|leqq|dopf|Dopf|dscr|Dscr|dscy|ldsh|ldca|squf|DScy|sscr|Sscr|dsol|lcub|late|star|Star|Uopf|Larr|lArr|larr|uopf|dtri|dzcy|sube|subE|Lang|lang|Kscr|kscr|Kopf|kopf|KJcy|kjcy|KHcy|khcy|DZcy|ecir|edot|eDot|Jscr|jscr|succ|Jopf|jopf|Edot|uHar|emsp|ensp|Iuml|iuml|eopf|isin|Iscr|iscr|Eopf|epar|sung|epsi|escr|sup1|sup2|sup3|Iota|iota|supe|supE|Iopf|iopf|IOcy|iocy|Escr|esim|Esim|imof|Uarr|QUOT|uArr|uarr|euml|IEcy|iecy|Idot|Euml|euro|excl|Hscr|hscr|Hopf|hopf|TScy|tscy|Tscr|hbar|tscr|flat|tbrk|fnof|hArr|harr|half|fopf|Fopf|tdot|gvnE|fork|trie|gtcc|fscr|Fscr|gdot|gsim|Gscr|gscr|Gopf|gopf|gneq|Gdot|tosa|gnap|Topf|topf|geqq|toea|GJcy|gjcy|tint|gesl|mid|Sfr|ggg|top|ges|gla|glE|glj|geq|gne|gEl|gel|gnE|Gcy|gcy|gap|Tfr|tfr|Tcy|tcy|Hat|Tau|Ffr|tau|Tab|hfr|Hfr|ffr|Fcy|fcy|icy|Icy|iff|ETH|eth|ifr|Ifr|Eta|eta|int|Int|Sup|sup|ucy|Ucy|Sum|sum|jcy|ENG|ufr|Ufr|eng|Jcy|jfr|els|ell|egs|Efr|efr|Jfr|uml|kcy|Kcy|Ecy|ecy|kfr|Kfr|lap|Sub|sub|lat|lcy|Lcy|leg|Dot|dot|lEg|leq|les|squ|div|die|lfr|Lfr|lgE|Dfr|dfr|Del|deg|Dcy|dcy|lne|lnE|sol|loz|smt|Cup|lrm|cup|lsh|Lsh|sim|shy|map|Map|mcy|Mcy|mfr|Mfr|mho|gfr|Gfr|sfr|cir|Chi|chi|nap|Cfr|vcy|Vcy|cfr|Scy|scy|ncy|Ncy|vee|Vee|Cap|cap|nfr|scE|sce|Nfr|nge|ngE|nGg|vfr|Vfr|ngt|bot|nGt|nis|niv|Rsh|rsh|nle|nlE|bne|Bfr|bfr|nLl|nlt|nLt|Bcy|bcy|not|Not|rlm|wfr|Wfr|npr|nsc|num|ocy|ast|Ocy|ofr|xfr|Xfr|Ofr|ogt|ohm|apE|olt|Rho|ape|rho|Rfr|rfr|ord|REG|ang|reg|orv|And|and|AMP|Rcy|amp|Afr|ycy|Ycy|yen|yfr|Yfr|rcy|par|pcy|Pcy|pfr|Pfr|phi|Phi|afr|Acy|acy|zcy|Zcy|piv|acE|acd|zfr|Zfr|pre|prE|psi|Psi|qfr|Qfr|zwj|Or|ge|Gg|gt|gg|el|oS|lt|Lt|LT|Re|lg|gl|eg|ne|Im|it|le|DD|wp|wr|nu|Nu|dd|lE|Sc|sc|pi|Pi|ee|af|ll|Ll|rx|gE|xi|pm|Xi|ic|pr|Pr|in|ni|mp|mu|ac|Mu|or|ap|Gt|GT|ii);|&(Aacute|Agrave|Atilde|Ccedil|Eacute|Egrave|Iacute|Igrave|Ntilde|Oacute|Ograve|Oslash|Otilde|Uacute|Ugrave|Yacute|aacute|agrave|atilde|brvbar|ccedil|curren|divide|eacute|egrave|frac12|frac14|frac34|iacute|igrave|iquest|middot|ntilde|oacute|ograve|oslash|otilde|plusmn|uacute|ugrave|yacute|AElig|Acirc|Aring|Ecirc|Icirc|Ocirc|THORN|Ucirc|acirc|acute|aelig|aring|cedil|ecirc|icirc|iexcl|laquo|micro|ocirc|pound|raquo|szlig|thorn|times|ucirc|Auml|COPY|Euml|Iuml|Ouml|QUOT|Uuml|auml|cent|copy|euml|iuml|macr|nbsp|ordf|ordm|ouml|para|quot|sect|sup1|sup2|sup3|uuml|yuml|AMP|ETH|REG|amp|deg|eth|not|reg|shy|uml|yen|GT|LT|gt|lt)(?!;)([=a-zA-Z0-9]?)|&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+)/g;
-	var decodeMap = {'aacute':'\xE1','Aacute':'\xC1','abreve':'\u0103','Abreve':'\u0102','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','acy':'\u0430','Acy':'\u0410','aelig':'\xE6','AElig':'\xC6','af':'\u2061','afr':'\uD835\uDD1E','Afr':'\uD835\uDD04','agrave':'\xE0','Agrave':'\xC0','alefsym':'\u2135','aleph':'\u2135','alpha':'\u03B1','Alpha':'\u0391','amacr':'\u0101','Amacr':'\u0100','amalg':'\u2A3F','amp':'&','AMP':'&','and':'\u2227','And':'\u2A53','andand':'\u2A55','andd':'\u2A5C','andslope':'\u2A58','andv':'\u2A5A','ang':'\u2220','ange':'\u29A4','angle':'\u2220','angmsd':'\u2221','angmsdaa':'\u29A8','angmsdab':'\u29A9','angmsdac':'\u29AA','angmsdad':'\u29AB','angmsdae':'\u29AC','angmsdaf':'\u29AD','angmsdag':'\u29AE','angmsdah':'\u29AF','angrt':'\u221F','angrtvb':'\u22BE','angrtvbd':'\u299D','angsph':'\u2222','angst':'\xC5','angzarr':'\u237C','aogon':'\u0105','Aogon':'\u0104','aopf':'\uD835\uDD52','Aopf':'\uD835\uDD38','ap':'\u2248','apacir':'\u2A6F','ape':'\u224A','apE':'\u2A70','apid':'\u224B','apos':'\'','ApplyFunction':'\u2061','approx':'\u2248','approxeq':'\u224A','aring':'\xE5','Aring':'\xC5','ascr':'\uD835\uDCB6','Ascr':'\uD835\uDC9C','Assign':'\u2254','ast':'*','asymp':'\u2248','asympeq':'\u224D','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','awconint':'\u2233','awint':'\u2A11','backcong':'\u224C','backepsilon':'\u03F6','backprime':'\u2035','backsim':'\u223D','backsimeq':'\u22CD','Backslash':'\u2216','Barv':'\u2AE7','barvee':'\u22BD','barwed':'\u2305','Barwed':'\u2306','barwedge':'\u2305','bbrk':'\u23B5','bbrktbrk':'\u23B6','bcong':'\u224C','bcy':'\u0431','Bcy':'\u0411','bdquo':'\u201E','becaus':'\u2235','because':'\u2235','Because':'\u2235','bemptyv':'\u29B0','bepsi':'\u03F6','bernou':'\u212C','Bernoullis':'\u212C','beta':'\u03B2','Beta':'\u0392','beth':'\u2136','between':'\u226C','bfr':'\uD835\uDD1F','Bfr':'\uD835\uDD05','bigcap':'\u22C2','bigcirc':'\u25EF','bigcup':'\u22C3','bigodot':'\u2A00','bigoplus':'\u2A01','bigotimes':'\u2A02','bigsqcup':'\u2A06','bigstar':'\u2605','bigtriangledown':'\u25BD','bigtriangleup':'\u25B3','biguplus':'\u2A04','bigvee':'\u22C1','bigwedge':'\u22C0','bkarow':'\u290D','blacklozenge':'\u29EB','blacksquare':'\u25AA','blacktriangle':'\u25B4','blacktriangledown':'\u25BE','blacktriangleleft':'\u25C2','blacktriangleright':'\u25B8','blank':'\u2423','blk12':'\u2592','blk14':'\u2591','blk34':'\u2593','block':'\u2588','bne':'=\u20E5','bnequiv':'\u2261\u20E5','bnot':'\u2310','bNot':'\u2AED','bopf':'\uD835\uDD53','Bopf':'\uD835\uDD39','bot':'\u22A5','bottom':'\u22A5','bowtie':'\u22C8','boxbox':'\u29C9','boxdl':'\u2510','boxdL':'\u2555','boxDl':'\u2556','boxDL':'\u2557','boxdr':'\u250C','boxdR':'\u2552','boxDr':'\u2553','boxDR':'\u2554','boxh':'\u2500','boxH':'\u2550','boxhd':'\u252C','boxhD':'\u2565','boxHd':'\u2564','boxHD':'\u2566','boxhu':'\u2534','boxhU':'\u2568','boxHu':'\u2567','boxHU':'\u2569','boxminus':'\u229F','boxplus':'\u229E','boxtimes':'\u22A0','boxul':'\u2518','boxuL':'\u255B','boxUl':'\u255C','boxUL':'\u255D','boxur':'\u2514','boxuR':'\u2558','boxUr':'\u2559','boxUR':'\u255A','boxv':'\u2502','boxV':'\u2551','boxvh':'\u253C','boxvH':'\u256A','boxVh':'\u256B','boxVH':'\u256C','boxvl':'\u2524','boxvL':'\u2561','boxVl':'\u2562','boxVL':'\u2563','boxvr':'\u251C','boxvR':'\u255E','boxVr':'\u255F','boxVR':'\u2560','bprime':'\u2035','breve':'\u02D8','Breve':'\u02D8','brvbar':'\xA6','bscr':'\uD835\uDCB7','Bscr':'\u212C','bsemi':'\u204F','bsim':'\u223D','bsime':'\u22CD','bsol':'\\','bsolb':'\u29C5','bsolhsub':'\u27C8','bull':'\u2022','bullet':'\u2022','bump':'\u224E','bumpe':'\u224F','bumpE':'\u2AAE','bumpeq':'\u224F','Bumpeq':'\u224E','cacute':'\u0107','Cacute':'\u0106','cap':'\u2229','Cap':'\u22D2','capand':'\u2A44','capbrcup':'\u2A49','capcap':'\u2A4B','capcup':'\u2A47','capdot':'\u2A40','CapitalDifferentialD':'\u2145','caps':'\u2229\uFE00','caret':'\u2041','caron':'\u02C7','Cayleys':'\u212D','ccaps':'\u2A4D','ccaron':'\u010D','Ccaron':'\u010C','ccedil':'\xE7','Ccedil':'\xC7','ccirc':'\u0109','Ccirc':'\u0108','Cconint':'\u2230','ccups':'\u2A4C','ccupssm':'\u2A50','cdot':'\u010B','Cdot':'\u010A','cedil':'\xB8','Cedilla':'\xB8','cemptyv':'\u29B2','cent':'\xA2','centerdot':'\xB7','CenterDot':'\xB7','cfr':'\uD835\uDD20','Cfr':'\u212D','chcy':'\u0447','CHcy':'\u0427','check':'\u2713','checkmark':'\u2713','chi':'\u03C7','Chi':'\u03A7','cir':'\u25CB','circ':'\u02C6','circeq':'\u2257','circlearrowleft':'\u21BA','circlearrowright':'\u21BB','circledast':'\u229B','circledcirc':'\u229A','circleddash':'\u229D','CircleDot':'\u2299','circledR':'\xAE','circledS':'\u24C8','CircleMinus':'\u2296','CirclePlus':'\u2295','CircleTimes':'\u2297','cire':'\u2257','cirE':'\u29C3','cirfnint':'\u2A10','cirmid':'\u2AEF','cirscir':'\u29C2','ClockwiseContourIntegral':'\u2232','CloseCurlyDoubleQuote':'\u201D','CloseCurlyQuote':'\u2019','clubs':'\u2663','clubsuit':'\u2663','colon':':','Colon':'\u2237','colone':'\u2254','Colone':'\u2A74','coloneq':'\u2254','comma':',','commat':'@','comp':'\u2201','compfn':'\u2218','complement':'\u2201','complexes':'\u2102','cong':'\u2245','congdot':'\u2A6D','Congruent':'\u2261','conint':'\u222E','Conint':'\u222F','ContourIntegral':'\u222E','copf':'\uD835\uDD54','Copf':'\u2102','coprod':'\u2210','Coproduct':'\u2210','copy':'\xA9','COPY':'\xA9','copysr':'\u2117','CounterClockwiseContourIntegral':'\u2233','crarr':'\u21B5','cross':'\u2717','Cross':'\u2A2F','cscr':'\uD835\uDCB8','Cscr':'\uD835\uDC9E','csub':'\u2ACF','csube':'\u2AD1','csup':'\u2AD0','csupe':'\u2AD2','ctdot':'\u22EF','cudarrl':'\u2938','cudarrr':'\u2935','cuepr':'\u22DE','cuesc':'\u22DF','cularr':'\u21B6','cularrp':'\u293D','cup':'\u222A','Cup':'\u22D3','cupbrcap':'\u2A48','cupcap':'\u2A46','CupCap':'\u224D','cupcup':'\u2A4A','cupdot':'\u228D','cupor':'\u2A45','cups':'\u222A\uFE00','curarr':'\u21B7','curarrm':'\u293C','curlyeqprec':'\u22DE','curlyeqsucc':'\u22DF','curlyvee':'\u22CE','curlywedge':'\u22CF','curren':'\xA4','curvearrowleft':'\u21B6','curvearrowright':'\u21B7','cuvee':'\u22CE','cuwed':'\u22CF','cwconint':'\u2232','cwint':'\u2231','cylcty':'\u232D','dagger':'\u2020','Dagger':'\u2021','daleth':'\u2138','darr':'\u2193','dArr':'\u21D3','Darr':'\u21A1','dash':'\u2010','dashv':'\u22A3','Dashv':'\u2AE4','dbkarow':'\u290F','dblac':'\u02DD','dcaron':'\u010F','Dcaron':'\u010E','dcy':'\u0434','Dcy':'\u0414','dd':'\u2146','DD':'\u2145','ddagger':'\u2021','ddarr':'\u21CA','DDotrahd':'\u2911','ddotseq':'\u2A77','deg':'\xB0','Del':'\u2207','delta':'\u03B4','Delta':'\u0394','demptyv':'\u29B1','dfisht':'\u297F','dfr':'\uD835\uDD21','Dfr':'\uD835\uDD07','dHar':'\u2965','dharl':'\u21C3','dharr':'\u21C2','DiacriticalAcute':'\xB4','DiacriticalDot':'\u02D9','DiacriticalDoubleAcute':'\u02DD','DiacriticalGrave':'`','DiacriticalTilde':'\u02DC','diam':'\u22C4','diamond':'\u22C4','Diamond':'\u22C4','diamondsuit':'\u2666','diams':'\u2666','die':'\xA8','DifferentialD':'\u2146','digamma':'\u03DD','disin':'\u22F2','div':'\xF7','divide':'\xF7','divideontimes':'\u22C7','divonx':'\u22C7','djcy':'\u0452','DJcy':'\u0402','dlcorn':'\u231E','dlcrop':'\u230D','dollar':'$','dopf':'\uD835\uDD55','Dopf':'\uD835\uDD3B','dot':'\u02D9','Dot':'\xA8','DotDot':'\u20DC','doteq':'\u2250','doteqdot':'\u2251','DotEqual':'\u2250','dotminus':'\u2238','dotplus':'\u2214','dotsquare':'\u22A1','doublebarwedge':'\u2306','DoubleContourIntegral':'\u222F','DoubleDot':'\xA8','DoubleDownArrow':'\u21D3','DoubleLeftArrow':'\u21D0','DoubleLeftRightArrow':'\u21D4','DoubleLeftTee':'\u2AE4','DoubleLongLeftArrow':'\u27F8','DoubleLongLeftRightArrow':'\u27FA','DoubleLongRightArrow':'\u27F9','DoubleRightArrow':'\u21D2','DoubleRightTee':'\u22A8','DoubleUpArrow':'\u21D1','DoubleUpDownArrow':'\u21D5','DoubleVerticalBar':'\u2225','downarrow':'\u2193','Downarrow':'\u21D3','DownArrow':'\u2193','DownArrowBar':'\u2913','DownArrowUpArrow':'\u21F5','DownBreve':'\u0311','downdownarrows':'\u21CA','downharpoonleft':'\u21C3','downharpoonright':'\u21C2','DownLeftRightVector':'\u2950','DownLeftTeeVector':'\u295E','DownLeftVector':'\u21BD','DownLeftVectorBar':'\u2956','DownRightTeeVector':'\u295F','DownRightVector':'\u21C1','DownRightVectorBar':'\u2957','DownTee':'\u22A4','DownTeeArrow':'\u21A7','drbkarow':'\u2910','drcorn':'\u231F','drcrop':'\u230C','dscr':'\uD835\uDCB9','Dscr':'\uD835\uDC9F','dscy':'\u0455','DScy':'\u0405','dsol':'\u29F6','dstrok':'\u0111','Dstrok':'\u0110','dtdot':'\u22F1','dtri':'\u25BF','dtrif':'\u25BE','duarr':'\u21F5','duhar':'\u296F','dwangle':'\u29A6','dzcy':'\u045F','DZcy':'\u040F','dzigrarr':'\u27FF','eacute':'\xE9','Eacute':'\xC9','easter':'\u2A6E','ecaron':'\u011B','Ecaron':'\u011A','ecir':'\u2256','ecirc':'\xEA','Ecirc':'\xCA','ecolon':'\u2255','ecy':'\u044D','Ecy':'\u042D','eDDot':'\u2A77','edot':'\u0117','eDot':'\u2251','Edot':'\u0116','ee':'\u2147','efDot':'\u2252','efr':'\uD835\uDD22','Efr':'\uD835\uDD08','eg':'\u2A9A','egrave':'\xE8','Egrave':'\xC8','egs':'\u2A96','egsdot':'\u2A98','el':'\u2A99','Element':'\u2208','elinters':'\u23E7','ell':'\u2113','els':'\u2A95','elsdot':'\u2A97','emacr':'\u0113','Emacr':'\u0112','empty':'\u2205','emptyset':'\u2205','EmptySmallSquare':'\u25FB','emptyv':'\u2205','EmptyVerySmallSquare':'\u25AB','emsp':'\u2003','emsp13':'\u2004','emsp14':'\u2005','eng':'\u014B','ENG':'\u014A','ensp':'\u2002','eogon':'\u0119','Eogon':'\u0118','eopf':'\uD835\uDD56','Eopf':'\uD835\uDD3C','epar':'\u22D5','eparsl':'\u29E3','eplus':'\u2A71','epsi':'\u03B5','epsilon':'\u03B5','Epsilon':'\u0395','epsiv':'\u03F5','eqcirc':'\u2256','eqcolon':'\u2255','eqsim':'\u2242','eqslantgtr':'\u2A96','eqslantless':'\u2A95','Equal':'\u2A75','equals':'=','EqualTilde':'\u2242','equest':'\u225F','Equilibrium':'\u21CC','equiv':'\u2261','equivDD':'\u2A78','eqvparsl':'\u29E5','erarr':'\u2971','erDot':'\u2253','escr':'\u212F','Escr':'\u2130','esdot':'\u2250','esim':'\u2242','Esim':'\u2A73','eta':'\u03B7','Eta':'\u0397','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','euro':'\u20AC','excl':'!','exist':'\u2203','Exists':'\u2203','expectation':'\u2130','exponentiale':'\u2147','ExponentialE':'\u2147','fallingdotseq':'\u2252','fcy':'\u0444','Fcy':'\u0424','female':'\u2640','ffilig':'\uFB03','fflig':'\uFB00','ffllig':'\uFB04','ffr':'\uD835\uDD23','Ffr':'\uD835\uDD09','filig':'\uFB01','FilledSmallSquare':'\u25FC','FilledVerySmallSquare':'\u25AA','fjlig':'fj','flat':'\u266D','fllig':'\uFB02','fltns':'\u25B1','fnof':'\u0192','fopf':'\uD835\uDD57','Fopf':'\uD835\uDD3D','forall':'\u2200','ForAll':'\u2200','fork':'\u22D4','forkv':'\u2AD9','Fouriertrf':'\u2131','fpartint':'\u2A0D','frac12':'\xBD','frac13':'\u2153','frac14':'\xBC','frac15':'\u2155','frac16':'\u2159','frac18':'\u215B','frac23':'\u2154','frac25':'\u2156','frac34':'\xBE','frac35':'\u2157','frac38':'\u215C','frac45':'\u2158','frac56':'\u215A','frac58':'\u215D','frac78':'\u215E','frasl':'\u2044','frown':'\u2322','fscr':'\uD835\uDCBB','Fscr':'\u2131','gacute':'\u01F5','gamma':'\u03B3','Gamma':'\u0393','gammad':'\u03DD','Gammad':'\u03DC','gap':'\u2A86','gbreve':'\u011F','Gbreve':'\u011E','Gcedil':'\u0122','gcirc':'\u011D','Gcirc':'\u011C','gcy':'\u0433','Gcy':'\u0413','gdot':'\u0121','Gdot':'\u0120','ge':'\u2265','gE':'\u2267','gel':'\u22DB','gEl':'\u2A8C','geq':'\u2265','geqq':'\u2267','geqslant':'\u2A7E','ges':'\u2A7E','gescc':'\u2AA9','gesdot':'\u2A80','gesdoto':'\u2A82','gesdotol':'\u2A84','gesl':'\u22DB\uFE00','gesles':'\u2A94','gfr':'\uD835\uDD24','Gfr':'\uD835\uDD0A','gg':'\u226B','Gg':'\u22D9','ggg':'\u22D9','gimel':'\u2137','gjcy':'\u0453','GJcy':'\u0403','gl':'\u2277','gla':'\u2AA5','glE':'\u2A92','glj':'\u2AA4','gnap':'\u2A8A','gnapprox':'\u2A8A','gne':'\u2A88','gnE':'\u2269','gneq':'\u2A88','gneqq':'\u2269','gnsim':'\u22E7','gopf':'\uD835\uDD58','Gopf':'\uD835\uDD3E','grave':'`','GreaterEqual':'\u2265','GreaterEqualLess':'\u22DB','GreaterFullEqual':'\u2267','GreaterGreater':'\u2AA2','GreaterLess':'\u2277','GreaterSlantEqual':'\u2A7E','GreaterTilde':'\u2273','gscr':'\u210A','Gscr':'\uD835\uDCA2','gsim':'\u2273','gsime':'\u2A8E','gsiml':'\u2A90','gt':'>','Gt':'\u226B','GT':'>','gtcc':'\u2AA7','gtcir':'\u2A7A','gtdot':'\u22D7','gtlPar':'\u2995','gtquest':'\u2A7C','gtrapprox':'\u2A86','gtrarr':'\u2978','gtrdot':'\u22D7','gtreqless':'\u22DB','gtreqqless':'\u2A8C','gtrless':'\u2277','gtrsim':'\u2273','gvertneqq':'\u2269\uFE00','gvnE':'\u2269\uFE00','Hacek':'\u02C7','hairsp':'\u200A','half':'\xBD','hamilt':'\u210B','hardcy':'\u044A','HARDcy':'\u042A','harr':'\u2194','hArr':'\u21D4','harrcir':'\u2948','harrw':'\u21AD','Hat':'^','hbar':'\u210F','hcirc':'\u0125','Hcirc':'\u0124','hearts':'\u2665','heartsuit':'\u2665','hellip':'\u2026','hercon':'\u22B9','hfr':'\uD835\uDD25','Hfr':'\u210C','HilbertSpace':'\u210B','hksearow':'\u2925','hkswarow':'\u2926','hoarr':'\u21FF','homtht':'\u223B','hookleftarrow':'\u21A9','hookrightarrow':'\u21AA','hopf':'\uD835\uDD59','Hopf':'\u210D','horbar':'\u2015','HorizontalLine':'\u2500','hscr':'\uD835\uDCBD','Hscr':'\u210B','hslash':'\u210F','hstrok':'\u0127','Hstrok':'\u0126','HumpDownHump':'\u224E','HumpEqual':'\u224F','hybull':'\u2043','hyphen':'\u2010','iacute':'\xED','Iacute':'\xCD','ic':'\u2063','icirc':'\xEE','Icirc':'\xCE','icy':'\u0438','Icy':'\u0418','Idot':'\u0130','iecy':'\u0435','IEcy':'\u0415','iexcl':'\xA1','iff':'\u21D4','ifr':'\uD835\uDD26','Ifr':'\u2111','igrave':'\xEC','Igrave':'\xCC','ii':'\u2148','iiiint':'\u2A0C','iiint':'\u222D','iinfin':'\u29DC','iiota':'\u2129','ijlig':'\u0133','IJlig':'\u0132','Im':'\u2111','imacr':'\u012B','Imacr':'\u012A','image':'\u2111','ImaginaryI':'\u2148','imagline':'\u2110','imagpart':'\u2111','imath':'\u0131','imof':'\u22B7','imped':'\u01B5','Implies':'\u21D2','in':'\u2208','incare':'\u2105','infin':'\u221E','infintie':'\u29DD','inodot':'\u0131','int':'\u222B','Int':'\u222C','intcal':'\u22BA','integers':'\u2124','Integral':'\u222B','intercal':'\u22BA','Intersection':'\u22C2','intlarhk':'\u2A17','intprod':'\u2A3C','InvisibleComma':'\u2063','InvisibleTimes':'\u2062','iocy':'\u0451','IOcy':'\u0401','iogon':'\u012F','Iogon':'\u012E','iopf':'\uD835\uDD5A','Iopf':'\uD835\uDD40','iota':'\u03B9','Iota':'\u0399','iprod':'\u2A3C','iquest':'\xBF','iscr':'\uD835\uDCBE','Iscr':'\u2110','isin':'\u2208','isindot':'\u22F5','isinE':'\u22F9','isins':'\u22F4','isinsv':'\u22F3','isinv':'\u2208','it':'\u2062','itilde':'\u0129','Itilde':'\u0128','iukcy':'\u0456','Iukcy':'\u0406','iuml':'\xEF','Iuml':'\xCF','jcirc':'\u0135','Jcirc':'\u0134','jcy':'\u0439','Jcy':'\u0419','jfr':'\uD835\uDD27','Jfr':'\uD835\uDD0D','jmath':'\u0237','jopf':'\uD835\uDD5B','Jopf':'\uD835\uDD41','jscr':'\uD835\uDCBF','Jscr':'\uD835\uDCA5','jsercy':'\u0458','Jsercy':'\u0408','jukcy':'\u0454','Jukcy':'\u0404','kappa':'\u03BA','Kappa':'\u039A','kappav':'\u03F0','kcedil':'\u0137','Kcedil':'\u0136','kcy':'\u043A','Kcy':'\u041A','kfr':'\uD835\uDD28','Kfr':'\uD835\uDD0E','kgreen':'\u0138','khcy':'\u0445','KHcy':'\u0425','kjcy':'\u045C','KJcy':'\u040C','kopf':'\uD835\uDD5C','Kopf':'\uD835\uDD42','kscr':'\uD835\uDCC0','Kscr':'\uD835\uDCA6','lAarr':'\u21DA','lacute':'\u013A','Lacute':'\u0139','laemptyv':'\u29B4','lagran':'\u2112','lambda':'\u03BB','Lambda':'\u039B','lang':'\u27E8','Lang':'\u27EA','langd':'\u2991','langle':'\u27E8','lap':'\u2A85','Laplacetrf':'\u2112','laquo':'\xAB','larr':'\u2190','lArr':'\u21D0','Larr':'\u219E','larrb':'\u21E4','larrbfs':'\u291F','larrfs':'\u291D','larrhk':'\u21A9','larrlp':'\u21AB','larrpl':'\u2939','larrsim':'\u2973','larrtl':'\u21A2','lat':'\u2AAB','latail':'\u2919','lAtail':'\u291B','late':'\u2AAD','lates':'\u2AAD\uFE00','lbarr':'\u290C','lBarr':'\u290E','lbbrk':'\u2772','lbrace':'{','lbrack':'[','lbrke':'\u298B','lbrksld':'\u298F','lbrkslu':'\u298D','lcaron':'\u013E','Lcaron':'\u013D','lcedil':'\u013C','Lcedil':'\u013B','lceil':'\u2308','lcub':'{','lcy':'\u043B','Lcy':'\u041B','ldca':'\u2936','ldquo':'\u201C','ldquor':'\u201E','ldrdhar':'\u2967','ldrushar':'\u294B','ldsh':'\u21B2','le':'\u2264','lE':'\u2266','LeftAngleBracket':'\u27E8','leftarrow':'\u2190','Leftarrow':'\u21D0','LeftArrow':'\u2190','LeftArrowBar':'\u21E4','LeftArrowRightArrow':'\u21C6','leftarrowtail':'\u21A2','LeftCeiling':'\u2308','LeftDoubleBracket':'\u27E6','LeftDownTeeVector':'\u2961','LeftDownVector':'\u21C3','LeftDownVectorBar':'\u2959','LeftFloor':'\u230A','leftharpoondown':'\u21BD','leftharpoonup':'\u21BC','leftleftarrows':'\u21C7','leftrightarrow':'\u2194','Leftrightarrow':'\u21D4','LeftRightArrow':'\u2194','leftrightarrows':'\u21C6','leftrightharpoons':'\u21CB','leftrightsquigarrow':'\u21AD','LeftRightVector':'\u294E','LeftTee':'\u22A3','LeftTeeArrow':'\u21A4','LeftTeeVector':'\u295A','leftthreetimes':'\u22CB','LeftTriangle':'\u22B2','LeftTriangleBar':'\u29CF','LeftTriangleEqual':'\u22B4','LeftUpDownVector':'\u2951','LeftUpTeeVector':'\u2960','LeftUpVector':'\u21BF','LeftUpVectorBar':'\u2958','LeftVector':'\u21BC','LeftVectorBar':'\u2952','leg':'\u22DA','lEg':'\u2A8B','leq':'\u2264','leqq':'\u2266','leqslant':'\u2A7D','les':'\u2A7D','lescc':'\u2AA8','lesdot':'\u2A7F','lesdoto':'\u2A81','lesdotor':'\u2A83','lesg':'\u22DA\uFE00','lesges':'\u2A93','lessapprox':'\u2A85','lessdot':'\u22D6','lesseqgtr':'\u22DA','lesseqqgtr':'\u2A8B','LessEqualGreater':'\u22DA','LessFullEqual':'\u2266','LessGreater':'\u2276','lessgtr':'\u2276','LessLess':'\u2AA1','lesssim':'\u2272','LessSlantEqual':'\u2A7D','LessTilde':'\u2272','lfisht':'\u297C','lfloor':'\u230A','lfr':'\uD835\uDD29','Lfr':'\uD835\uDD0F','lg':'\u2276','lgE':'\u2A91','lHar':'\u2962','lhard':'\u21BD','lharu':'\u21BC','lharul':'\u296A','lhblk':'\u2584','ljcy':'\u0459','LJcy':'\u0409','ll':'\u226A','Ll':'\u22D8','llarr':'\u21C7','llcorner':'\u231E','Lleftarrow':'\u21DA','llhard':'\u296B','lltri':'\u25FA','lmidot':'\u0140','Lmidot':'\u013F','lmoust':'\u23B0','lmoustache':'\u23B0','lnap':'\u2A89','lnapprox':'\u2A89','lne':'\u2A87','lnE':'\u2268','lneq':'\u2A87','lneqq':'\u2268','lnsim':'\u22E6','loang':'\u27EC','loarr':'\u21FD','lobrk':'\u27E6','longleftarrow':'\u27F5','Longleftarrow':'\u27F8','LongLeftArrow':'\u27F5','longleftrightarrow':'\u27F7','Longleftrightarrow':'\u27FA','LongLeftRightArrow':'\u27F7','longmapsto':'\u27FC','longrightarrow':'\u27F6','Longrightarrow':'\u27F9','LongRightArrow':'\u27F6','looparrowleft':'\u21AB','looparrowright':'\u21AC','lopar':'\u2985','lopf':'\uD835\uDD5D','Lopf':'\uD835\uDD43','loplus':'\u2A2D','lotimes':'\u2A34','lowast':'\u2217','lowbar':'_','LowerLeftArrow':'\u2199','LowerRightArrow':'\u2198','loz':'\u25CA','lozenge':'\u25CA','lozf':'\u29EB','lpar':'(','lparlt':'\u2993','lrarr':'\u21C6','lrcorner':'\u231F','lrhar':'\u21CB','lrhard':'\u296D','lrm':'\u200E','lrtri':'\u22BF','lsaquo':'\u2039','lscr':'\uD835\uDCC1','Lscr':'\u2112','lsh':'\u21B0','Lsh':'\u21B0','lsim':'\u2272','lsime':'\u2A8D','lsimg':'\u2A8F','lsqb':'[','lsquo':'\u2018','lsquor':'\u201A','lstrok':'\u0142','Lstrok':'\u0141','lt':'<','Lt':'\u226A','LT':'<','ltcc':'\u2AA6','ltcir':'\u2A79','ltdot':'\u22D6','lthree':'\u22CB','ltimes':'\u22C9','ltlarr':'\u2976','ltquest':'\u2A7B','ltri':'\u25C3','ltrie':'\u22B4','ltrif':'\u25C2','ltrPar':'\u2996','lurdshar':'\u294A','luruhar':'\u2966','lvertneqq':'\u2268\uFE00','lvnE':'\u2268\uFE00','macr':'\xAF','male':'\u2642','malt':'\u2720','maltese':'\u2720','map':'\u21A6','Map':'\u2905','mapsto':'\u21A6','mapstodown':'\u21A7','mapstoleft':'\u21A4','mapstoup':'\u21A5','marker':'\u25AE','mcomma':'\u2A29','mcy':'\u043C','Mcy':'\u041C','mdash':'\u2014','mDDot':'\u223A','measuredangle':'\u2221','MediumSpace':'\u205F','Mellintrf':'\u2133','mfr':'\uD835\uDD2A','Mfr':'\uD835\uDD10','mho':'\u2127','micro':'\xB5','mid':'\u2223','midast':'*','midcir':'\u2AF0','middot':'\xB7','minus':'\u2212','minusb':'\u229F','minusd':'\u2238','minusdu':'\u2A2A','MinusPlus':'\u2213','mlcp':'\u2ADB','mldr':'\u2026','mnplus':'\u2213','models':'\u22A7','mopf':'\uD835\uDD5E','Mopf':'\uD835\uDD44','mp':'\u2213','mscr':'\uD835\uDCC2','Mscr':'\u2133','mstpos':'\u223E','mu':'\u03BC','Mu':'\u039C','multimap':'\u22B8','mumap':'\u22B8','nabla':'\u2207','nacute':'\u0144','Nacute':'\u0143','nang':'\u2220\u20D2','nap':'\u2249','napE':'\u2A70\u0338','napid':'\u224B\u0338','napos':'\u0149','napprox':'\u2249','natur':'\u266E','natural':'\u266E','naturals':'\u2115','nbsp':'\xA0','nbump':'\u224E\u0338','nbumpe':'\u224F\u0338','ncap':'\u2A43','ncaron':'\u0148','Ncaron':'\u0147','ncedil':'\u0146','Ncedil':'\u0145','ncong':'\u2247','ncongdot':'\u2A6D\u0338','ncup':'\u2A42','ncy':'\u043D','Ncy':'\u041D','ndash':'\u2013','ne':'\u2260','nearhk':'\u2924','nearr':'\u2197','neArr':'\u21D7','nearrow':'\u2197','nedot':'\u2250\u0338','NegativeMediumSpace':'\u200B','NegativeThickSpace':'\u200B','NegativeThinSpace':'\u200B','NegativeVeryThinSpace':'\u200B','nequiv':'\u2262','nesear':'\u2928','nesim':'\u2242\u0338','NestedGreaterGreater':'\u226B','NestedLessLess':'\u226A','NewLine':'\n','nexist':'\u2204','nexists':'\u2204','nfr':'\uD835\uDD2B','Nfr':'\uD835\uDD11','nge':'\u2271','ngE':'\u2267\u0338','ngeq':'\u2271','ngeqq':'\u2267\u0338','ngeqslant':'\u2A7E\u0338','nges':'\u2A7E\u0338','nGg':'\u22D9\u0338','ngsim':'\u2275','ngt':'\u226F','nGt':'\u226B\u20D2','ngtr':'\u226F','nGtv':'\u226B\u0338','nharr':'\u21AE','nhArr':'\u21CE','nhpar':'\u2AF2','ni':'\u220B','nis':'\u22FC','nisd':'\u22FA','niv':'\u220B','njcy':'\u045A','NJcy':'\u040A','nlarr':'\u219A','nlArr':'\u21CD','nldr':'\u2025','nle':'\u2270','nlE':'\u2266\u0338','nleftarrow':'\u219A','nLeftarrow':'\u21CD','nleftrightarrow':'\u21AE','nLeftrightarrow':'\u21CE','nleq':'\u2270','nleqq':'\u2266\u0338','nleqslant':'\u2A7D\u0338','nles':'\u2A7D\u0338','nless':'\u226E','nLl':'\u22D8\u0338','nlsim':'\u2274','nlt':'\u226E','nLt':'\u226A\u20D2','nltri':'\u22EA','nltrie':'\u22EC','nLtv':'\u226A\u0338','nmid':'\u2224','NoBreak':'\u2060','NonBreakingSpace':'\xA0','nopf':'\uD835\uDD5F','Nopf':'\u2115','not':'\xAC','Not':'\u2AEC','NotCongruent':'\u2262','NotCupCap':'\u226D','NotDoubleVerticalBar':'\u2226','NotElement':'\u2209','NotEqual':'\u2260','NotEqualTilde':'\u2242\u0338','NotExists':'\u2204','NotGreater':'\u226F','NotGreaterEqual':'\u2271','NotGreaterFullEqual':'\u2267\u0338','NotGreaterGreater':'\u226B\u0338','NotGreaterLess':'\u2279','NotGreaterSlantEqual':'\u2A7E\u0338','NotGreaterTilde':'\u2275','NotHumpDownHump':'\u224E\u0338','NotHumpEqual':'\u224F\u0338','notin':'\u2209','notindot':'\u22F5\u0338','notinE':'\u22F9\u0338','notinva':'\u2209','notinvb':'\u22F7','notinvc':'\u22F6','NotLeftTriangle':'\u22EA','NotLeftTriangleBar':'\u29CF\u0338','NotLeftTriangleEqual':'\u22EC','NotLess':'\u226E','NotLessEqual':'\u2270','NotLessGreater':'\u2278','NotLessLess':'\u226A\u0338','NotLessSlantEqual':'\u2A7D\u0338','NotLessTilde':'\u2274','NotNestedGreaterGreater':'\u2AA2\u0338','NotNestedLessLess':'\u2AA1\u0338','notni':'\u220C','notniva':'\u220C','notnivb':'\u22FE','notnivc':'\u22FD','NotPrecedes':'\u2280','NotPrecedesEqual':'\u2AAF\u0338','NotPrecedesSlantEqual':'\u22E0','NotReverseElement':'\u220C','NotRightTriangle':'\u22EB','NotRightTriangleBar':'\u29D0\u0338','NotRightTriangleEqual':'\u22ED','NotSquareSubset':'\u228F\u0338','NotSquareSubsetEqual':'\u22E2','NotSquareSuperset':'\u2290\u0338','NotSquareSupersetEqual':'\u22E3','NotSubset':'\u2282\u20D2','NotSubsetEqual':'\u2288','NotSucceeds':'\u2281','NotSucceedsEqual':'\u2AB0\u0338','NotSucceedsSlantEqual':'\u22E1','NotSucceedsTilde':'\u227F\u0338','NotSuperset':'\u2283\u20D2','NotSupersetEqual':'\u2289','NotTilde':'\u2241','NotTildeEqual':'\u2244','NotTildeFullEqual':'\u2247','NotTildeTilde':'\u2249','NotVerticalBar':'\u2224','npar':'\u2226','nparallel':'\u2226','nparsl':'\u2AFD\u20E5','npart':'\u2202\u0338','npolint':'\u2A14','npr':'\u2280','nprcue':'\u22E0','npre':'\u2AAF\u0338','nprec':'\u2280','npreceq':'\u2AAF\u0338','nrarr':'\u219B','nrArr':'\u21CF','nrarrc':'\u2933\u0338','nrarrw':'\u219D\u0338','nrightarrow':'\u219B','nRightarrow':'\u21CF','nrtri':'\u22EB','nrtrie':'\u22ED','nsc':'\u2281','nsccue':'\u22E1','nsce':'\u2AB0\u0338','nscr':'\uD835\uDCC3','Nscr':'\uD835\uDCA9','nshortmid':'\u2224','nshortparallel':'\u2226','nsim':'\u2241','nsime':'\u2244','nsimeq':'\u2244','nsmid':'\u2224','nspar':'\u2226','nsqsube':'\u22E2','nsqsupe':'\u22E3','nsub':'\u2284','nsube':'\u2288','nsubE':'\u2AC5\u0338','nsubset':'\u2282\u20D2','nsubseteq':'\u2288','nsubseteqq':'\u2AC5\u0338','nsucc':'\u2281','nsucceq':'\u2AB0\u0338','nsup':'\u2285','nsupe':'\u2289','nsupE':'\u2AC6\u0338','nsupset':'\u2283\u20D2','nsupseteq':'\u2289','nsupseteqq':'\u2AC6\u0338','ntgl':'\u2279','ntilde':'\xF1','Ntilde':'\xD1','ntlg':'\u2278','ntriangleleft':'\u22EA','ntrianglelefteq':'\u22EC','ntriangleright':'\u22EB','ntrianglerighteq':'\u22ED','nu':'\u03BD','Nu':'\u039D','num':'#','numero':'\u2116','numsp':'\u2007','nvap':'\u224D\u20D2','nvdash':'\u22AC','nvDash':'\u22AD','nVdash':'\u22AE','nVDash':'\u22AF','nvge':'\u2265\u20D2','nvgt':'>\u20D2','nvHarr':'\u2904','nvinfin':'\u29DE','nvlArr':'\u2902','nvle':'\u2264\u20D2','nvlt':'<\u20D2','nvltrie':'\u22B4\u20D2','nvrArr':'\u2903','nvrtrie':'\u22B5\u20D2','nvsim':'\u223C\u20D2','nwarhk':'\u2923','nwarr':'\u2196','nwArr':'\u21D6','nwarrow':'\u2196','nwnear':'\u2927','oacute':'\xF3','Oacute':'\xD3','oast':'\u229B','ocir':'\u229A','ocirc':'\xF4','Ocirc':'\xD4','ocy':'\u043E','Ocy':'\u041E','odash':'\u229D','odblac':'\u0151','Odblac':'\u0150','odiv':'\u2A38','odot':'\u2299','odsold':'\u29BC','oelig':'\u0153','OElig':'\u0152','ofcir':'\u29BF','ofr':'\uD835\uDD2C','Ofr':'\uD835\uDD12','ogon':'\u02DB','ograve':'\xF2','Ograve':'\xD2','ogt':'\u29C1','ohbar':'\u29B5','ohm':'\u03A9','oint':'\u222E','olarr':'\u21BA','olcir':'\u29BE','olcross':'\u29BB','oline':'\u203E','olt':'\u29C0','omacr':'\u014D','Omacr':'\u014C','omega':'\u03C9','Omega':'\u03A9','omicron':'\u03BF','Omicron':'\u039F','omid':'\u29B6','ominus':'\u2296','oopf':'\uD835\uDD60','Oopf':'\uD835\uDD46','opar':'\u29B7','OpenCurlyDoubleQuote':'\u201C','OpenCurlyQuote':'\u2018','operp':'\u29B9','oplus':'\u2295','or':'\u2228','Or':'\u2A54','orarr':'\u21BB','ord':'\u2A5D','order':'\u2134','orderof':'\u2134','ordf':'\xAA','ordm':'\xBA','origof':'\u22B6','oror':'\u2A56','orslope':'\u2A57','orv':'\u2A5B','oS':'\u24C8','oscr':'\u2134','Oscr':'\uD835\uDCAA','oslash':'\xF8','Oslash':'\xD8','osol':'\u2298','otilde':'\xF5','Otilde':'\xD5','otimes':'\u2297','Otimes':'\u2A37','otimesas':'\u2A36','ouml':'\xF6','Ouml':'\xD6','ovbar':'\u233D','OverBar':'\u203E','OverBrace':'\u23DE','OverBracket':'\u23B4','OverParenthesis':'\u23DC','par':'\u2225','para':'\xB6','parallel':'\u2225','parsim':'\u2AF3','parsl':'\u2AFD','part':'\u2202','PartialD':'\u2202','pcy':'\u043F','Pcy':'\u041F','percnt':'%','period':'.','permil':'\u2030','perp':'\u22A5','pertenk':'\u2031','pfr':'\uD835\uDD2D','Pfr':'\uD835\uDD13','phi':'\u03C6','Phi':'\u03A6','phiv':'\u03D5','phmmat':'\u2133','phone':'\u260E','pi':'\u03C0','Pi':'\u03A0','pitchfork':'\u22D4','piv':'\u03D6','planck':'\u210F','planckh':'\u210E','plankv':'\u210F','plus':'+','plusacir':'\u2A23','plusb':'\u229E','pluscir':'\u2A22','plusdo':'\u2214','plusdu':'\u2A25','pluse':'\u2A72','PlusMinus':'\xB1','plusmn':'\xB1','plussim':'\u2A26','plustwo':'\u2A27','pm':'\xB1','Poincareplane':'\u210C','pointint':'\u2A15','popf':'\uD835\uDD61','Popf':'\u2119','pound':'\xA3','pr':'\u227A','Pr':'\u2ABB','prap':'\u2AB7','prcue':'\u227C','pre':'\u2AAF','prE':'\u2AB3','prec':'\u227A','precapprox':'\u2AB7','preccurlyeq':'\u227C','Precedes':'\u227A','PrecedesEqual':'\u2AAF','PrecedesSlantEqual':'\u227C','PrecedesTilde':'\u227E','preceq':'\u2AAF','precnapprox':'\u2AB9','precneqq':'\u2AB5','precnsim':'\u22E8','precsim':'\u227E','prime':'\u2032','Prime':'\u2033','primes':'\u2119','prnap':'\u2AB9','prnE':'\u2AB5','prnsim':'\u22E8','prod':'\u220F','Product':'\u220F','profalar':'\u232E','profline':'\u2312','profsurf':'\u2313','prop':'\u221D','Proportion':'\u2237','Proportional':'\u221D','propto':'\u221D','prsim':'\u227E','prurel':'\u22B0','pscr':'\uD835\uDCC5','Pscr':'\uD835\uDCAB','psi':'\u03C8','Psi':'\u03A8','puncsp':'\u2008','qfr':'\uD835\uDD2E','Qfr':'\uD835\uDD14','qint':'\u2A0C','qopf':'\uD835\uDD62','Qopf':'\u211A','qprime':'\u2057','qscr':'\uD835\uDCC6','Qscr':'\uD835\uDCAC','quaternions':'\u210D','quatint':'\u2A16','quest':'?','questeq':'\u225F','quot':'"','QUOT':'"','rAarr':'\u21DB','race':'\u223D\u0331','racute':'\u0155','Racute':'\u0154','radic':'\u221A','raemptyv':'\u29B3','rang':'\u27E9','Rang':'\u27EB','rangd':'\u2992','range':'\u29A5','rangle':'\u27E9','raquo':'\xBB','rarr':'\u2192','rArr':'\u21D2','Rarr':'\u21A0','rarrap':'\u2975','rarrb':'\u21E5','rarrbfs':'\u2920','rarrc':'\u2933','rarrfs':'\u291E','rarrhk':'\u21AA','rarrlp':'\u21AC','rarrpl':'\u2945','rarrsim':'\u2974','rarrtl':'\u21A3','Rarrtl':'\u2916','rarrw':'\u219D','ratail':'\u291A','rAtail':'\u291C','ratio':'\u2236','rationals':'\u211A','rbarr':'\u290D','rBarr':'\u290F','RBarr':'\u2910','rbbrk':'\u2773','rbrace':'}','rbrack':']','rbrke':'\u298C','rbrksld':'\u298E','rbrkslu':'\u2990','rcaron':'\u0159','Rcaron':'\u0158','rcedil':'\u0157','Rcedil':'\u0156','rceil':'\u2309','rcub':'}','rcy':'\u0440','Rcy':'\u0420','rdca':'\u2937','rdldhar':'\u2969','rdquo':'\u201D','rdquor':'\u201D','rdsh':'\u21B3','Re':'\u211C','real':'\u211C','realine':'\u211B','realpart':'\u211C','reals':'\u211D','rect':'\u25AD','reg':'\xAE','REG':'\xAE','ReverseElement':'\u220B','ReverseEquilibrium':'\u21CB','ReverseUpEquilibrium':'\u296F','rfisht':'\u297D','rfloor':'\u230B','rfr':'\uD835\uDD2F','Rfr':'\u211C','rHar':'\u2964','rhard':'\u21C1','rharu':'\u21C0','rharul':'\u296C','rho':'\u03C1','Rho':'\u03A1','rhov':'\u03F1','RightAngleBracket':'\u27E9','rightarrow':'\u2192','Rightarrow':'\u21D2','RightArrow':'\u2192','RightArrowBar':'\u21E5','RightArrowLeftArrow':'\u21C4','rightarrowtail':'\u21A3','RightCeiling':'\u2309','RightDoubleBracket':'\u27E7','RightDownTeeVector':'\u295D','RightDownVector':'\u21C2','RightDownVectorBar':'\u2955','RightFloor':'\u230B','rightharpoondown':'\u21C1','rightharpoonup':'\u21C0','rightleftarrows':'\u21C4','rightleftharpoons':'\u21CC','rightrightarrows':'\u21C9','rightsquigarrow':'\u219D','RightTee':'\u22A2','RightTeeArrow':'\u21A6','RightTeeVector':'\u295B','rightthreetimes':'\u22CC','RightTriangle':'\u22B3','RightTriangleBar':'\u29D0','RightTriangleEqual':'\u22B5','RightUpDownVector':'\u294F','RightUpTeeVector':'\u295C','RightUpVector':'\u21BE','RightUpVectorBar':'\u2954','RightVector':'\u21C0','RightVectorBar':'\u2953','ring':'\u02DA','risingdotseq':'\u2253','rlarr':'\u21C4','rlhar':'\u21CC','rlm':'\u200F','rmoust':'\u23B1','rmoustache':'\u23B1','rnmid':'\u2AEE','roang':'\u27ED','roarr':'\u21FE','robrk':'\u27E7','ropar':'\u2986','ropf':'\uD835\uDD63','Ropf':'\u211D','roplus':'\u2A2E','rotimes':'\u2A35','RoundImplies':'\u2970','rpar':')','rpargt':'\u2994','rppolint':'\u2A12','rrarr':'\u21C9','Rrightarrow':'\u21DB','rsaquo':'\u203A','rscr':'\uD835\uDCC7','Rscr':'\u211B','rsh':'\u21B1','Rsh':'\u21B1','rsqb':']','rsquo':'\u2019','rsquor':'\u2019','rthree':'\u22CC','rtimes':'\u22CA','rtri':'\u25B9','rtrie':'\u22B5','rtrif':'\u25B8','rtriltri':'\u29CE','RuleDelayed':'\u29F4','ruluhar':'\u2968','rx':'\u211E','sacute':'\u015B','Sacute':'\u015A','sbquo':'\u201A','sc':'\u227B','Sc':'\u2ABC','scap':'\u2AB8','scaron':'\u0161','Scaron':'\u0160','sccue':'\u227D','sce':'\u2AB0','scE':'\u2AB4','scedil':'\u015F','Scedil':'\u015E','scirc':'\u015D','Scirc':'\u015C','scnap':'\u2ABA','scnE':'\u2AB6','scnsim':'\u22E9','scpolint':'\u2A13','scsim':'\u227F','scy':'\u0441','Scy':'\u0421','sdot':'\u22C5','sdotb':'\u22A1','sdote':'\u2A66','searhk':'\u2925','searr':'\u2198','seArr':'\u21D8','searrow':'\u2198','sect':'\xA7','semi':';','seswar':'\u2929','setminus':'\u2216','setmn':'\u2216','sext':'\u2736','sfr':'\uD835\uDD30','Sfr':'\uD835\uDD16','sfrown':'\u2322','sharp':'\u266F','shchcy':'\u0449','SHCHcy':'\u0429','shcy':'\u0448','SHcy':'\u0428','ShortDownArrow':'\u2193','ShortLeftArrow':'\u2190','shortmid':'\u2223','shortparallel':'\u2225','ShortRightArrow':'\u2192','ShortUpArrow':'\u2191','shy':'\xAD','sigma':'\u03C3','Sigma':'\u03A3','sigmaf':'\u03C2','sigmav':'\u03C2','sim':'\u223C','simdot':'\u2A6A','sime':'\u2243','simeq':'\u2243','simg':'\u2A9E','simgE':'\u2AA0','siml':'\u2A9D','simlE':'\u2A9F','simne':'\u2246','simplus':'\u2A24','simrarr':'\u2972','slarr':'\u2190','SmallCircle':'\u2218','smallsetminus':'\u2216','smashp':'\u2A33','smeparsl':'\u29E4','smid':'\u2223','smile':'\u2323','smt':'\u2AAA','smte':'\u2AAC','smtes':'\u2AAC\uFE00','softcy':'\u044C','SOFTcy':'\u042C','sol':'/','solb':'\u29C4','solbar':'\u233F','sopf':'\uD835\uDD64','Sopf':'\uD835\uDD4A','spades':'\u2660','spadesuit':'\u2660','spar':'\u2225','sqcap':'\u2293','sqcaps':'\u2293\uFE00','sqcup':'\u2294','sqcups':'\u2294\uFE00','Sqrt':'\u221A','sqsub':'\u228F','sqsube':'\u2291','sqsubset':'\u228F','sqsubseteq':'\u2291','sqsup':'\u2290','sqsupe':'\u2292','sqsupset':'\u2290','sqsupseteq':'\u2292','squ':'\u25A1','square':'\u25A1','Square':'\u25A1','SquareIntersection':'\u2293','SquareSubset':'\u228F','SquareSubsetEqual':'\u2291','SquareSuperset':'\u2290','SquareSupersetEqual':'\u2292','SquareUnion':'\u2294','squarf':'\u25AA','squf':'\u25AA','srarr':'\u2192','sscr':'\uD835\uDCC8','Sscr':'\uD835\uDCAE','ssetmn':'\u2216','ssmile':'\u2323','sstarf':'\u22C6','star':'\u2606','Star':'\u22C6','starf':'\u2605','straightepsilon':'\u03F5','straightphi':'\u03D5','strns':'\xAF','sub':'\u2282','Sub':'\u22D0','subdot':'\u2ABD','sube':'\u2286','subE':'\u2AC5','subedot':'\u2AC3','submult':'\u2AC1','subne':'\u228A','subnE':'\u2ACB','subplus':'\u2ABF','subrarr':'\u2979','subset':'\u2282','Subset':'\u22D0','subseteq':'\u2286','subseteqq':'\u2AC5','SubsetEqual':'\u2286','subsetneq':'\u228A','subsetneqq':'\u2ACB','subsim':'\u2AC7','subsub':'\u2AD5','subsup':'\u2AD3','succ':'\u227B','succapprox':'\u2AB8','succcurlyeq':'\u227D','Succeeds':'\u227B','SucceedsEqual':'\u2AB0','SucceedsSlantEqual':'\u227D','SucceedsTilde':'\u227F','succeq':'\u2AB0','succnapprox':'\u2ABA','succneqq':'\u2AB6','succnsim':'\u22E9','succsim':'\u227F','SuchThat':'\u220B','sum':'\u2211','Sum':'\u2211','sung':'\u266A','sup':'\u2283','Sup':'\u22D1','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','supdot':'\u2ABE','supdsub':'\u2AD8','supe':'\u2287','supE':'\u2AC6','supedot':'\u2AC4','Superset':'\u2283','SupersetEqual':'\u2287','suphsol':'\u27C9','suphsub':'\u2AD7','suplarr':'\u297B','supmult':'\u2AC2','supne':'\u228B','supnE':'\u2ACC','supplus':'\u2AC0','supset':'\u2283','Supset':'\u22D1','supseteq':'\u2287','supseteqq':'\u2AC6','supsetneq':'\u228B','supsetneqq':'\u2ACC','supsim':'\u2AC8','supsub':'\u2AD4','supsup':'\u2AD6','swarhk':'\u2926','swarr':'\u2199','swArr':'\u21D9','swarrow':'\u2199','swnwar':'\u292A','szlig':'\xDF','Tab':'\t','target':'\u2316','tau':'\u03C4','Tau':'\u03A4','tbrk':'\u23B4','tcaron':'\u0165','Tcaron':'\u0164','tcedil':'\u0163','Tcedil':'\u0162','tcy':'\u0442','Tcy':'\u0422','tdot':'\u20DB','telrec':'\u2315','tfr':'\uD835\uDD31','Tfr':'\uD835\uDD17','there4':'\u2234','therefore':'\u2234','Therefore':'\u2234','theta':'\u03B8','Theta':'\u0398','thetasym':'\u03D1','thetav':'\u03D1','thickapprox':'\u2248','thicksim':'\u223C','ThickSpace':'\u205F\u200A','thinsp':'\u2009','ThinSpace':'\u2009','thkap':'\u2248','thksim':'\u223C','thorn':'\xFE','THORN':'\xDE','tilde':'\u02DC','Tilde':'\u223C','TildeEqual':'\u2243','TildeFullEqual':'\u2245','TildeTilde':'\u2248','times':'\xD7','timesb':'\u22A0','timesbar':'\u2A31','timesd':'\u2A30','tint':'\u222D','toea':'\u2928','top':'\u22A4','topbot':'\u2336','topcir':'\u2AF1','topf':'\uD835\uDD65','Topf':'\uD835\uDD4B','topfork':'\u2ADA','tosa':'\u2929','tprime':'\u2034','trade':'\u2122','TRADE':'\u2122','triangle':'\u25B5','triangledown':'\u25BF','triangleleft':'\u25C3','trianglelefteq':'\u22B4','triangleq':'\u225C','triangleright':'\u25B9','trianglerighteq':'\u22B5','tridot':'\u25EC','trie':'\u225C','triminus':'\u2A3A','TripleDot':'\u20DB','triplus':'\u2A39','trisb':'\u29CD','tritime':'\u2A3B','trpezium':'\u23E2','tscr':'\uD835\uDCC9','Tscr':'\uD835\uDCAF','tscy':'\u0446','TScy':'\u0426','tshcy':'\u045B','TSHcy':'\u040B','tstrok':'\u0167','Tstrok':'\u0166','twixt':'\u226C','twoheadleftarrow':'\u219E','twoheadrightarrow':'\u21A0','uacute':'\xFA','Uacute':'\xDA','uarr':'\u2191','uArr':'\u21D1','Uarr':'\u219F','Uarrocir':'\u2949','ubrcy':'\u045E','Ubrcy':'\u040E','ubreve':'\u016D','Ubreve':'\u016C','ucirc':'\xFB','Ucirc':'\xDB','ucy':'\u0443','Ucy':'\u0423','udarr':'\u21C5','udblac':'\u0171','Udblac':'\u0170','udhar':'\u296E','ufisht':'\u297E','ufr':'\uD835\uDD32','Ufr':'\uD835\uDD18','ugrave':'\xF9','Ugrave':'\xD9','uHar':'\u2963','uharl':'\u21BF','uharr':'\u21BE','uhblk':'\u2580','ulcorn':'\u231C','ulcorner':'\u231C','ulcrop':'\u230F','ultri':'\u25F8','umacr':'\u016B','Umacr':'\u016A','uml':'\xA8','UnderBar':'_','UnderBrace':'\u23DF','UnderBracket':'\u23B5','UnderParenthesis':'\u23DD','Union':'\u22C3','UnionPlus':'\u228E','uogon':'\u0173','Uogon':'\u0172','uopf':'\uD835\uDD66','Uopf':'\uD835\uDD4C','uparrow':'\u2191','Uparrow':'\u21D1','UpArrow':'\u2191','UpArrowBar':'\u2912','UpArrowDownArrow':'\u21C5','updownarrow':'\u2195','Updownarrow':'\u21D5','UpDownArrow':'\u2195','UpEquilibrium':'\u296E','upharpoonleft':'\u21BF','upharpoonright':'\u21BE','uplus':'\u228E','UpperLeftArrow':'\u2196','UpperRightArrow':'\u2197','upsi':'\u03C5','Upsi':'\u03D2','upsih':'\u03D2','upsilon':'\u03C5','Upsilon':'\u03A5','UpTee':'\u22A5','UpTeeArrow':'\u21A5','upuparrows':'\u21C8','urcorn':'\u231D','urcorner':'\u231D','urcrop':'\u230E','uring':'\u016F','Uring':'\u016E','urtri':'\u25F9','uscr':'\uD835\uDCCA','Uscr':'\uD835\uDCB0','utdot':'\u22F0','utilde':'\u0169','Utilde':'\u0168','utri':'\u25B5','utrif':'\u25B4','uuarr':'\u21C8','uuml':'\xFC','Uuml':'\xDC','uwangle':'\u29A7','vangrt':'\u299C','varepsilon':'\u03F5','varkappa':'\u03F0','varnothing':'\u2205','varphi':'\u03D5','varpi':'\u03D6','varpropto':'\u221D','varr':'\u2195','vArr':'\u21D5','varrho':'\u03F1','varsigma':'\u03C2','varsubsetneq':'\u228A\uFE00','varsubsetneqq':'\u2ACB\uFE00','varsupsetneq':'\u228B\uFE00','varsupsetneqq':'\u2ACC\uFE00','vartheta':'\u03D1','vartriangleleft':'\u22B2','vartriangleright':'\u22B3','vBar':'\u2AE8','Vbar':'\u2AEB','vBarv':'\u2AE9','vcy':'\u0432','Vcy':'\u0412','vdash':'\u22A2','vDash':'\u22A8','Vdash':'\u22A9','VDash':'\u22AB','Vdashl':'\u2AE6','vee':'\u2228','Vee':'\u22C1','veebar':'\u22BB','veeeq':'\u225A','vellip':'\u22EE','verbar':'|','Verbar':'\u2016','vert':'|','Vert':'\u2016','VerticalBar':'\u2223','VerticalLine':'|','VerticalSeparator':'\u2758','VerticalTilde':'\u2240','VeryThinSpace':'\u200A','vfr':'\uD835\uDD33','Vfr':'\uD835\uDD19','vltri':'\u22B2','vnsub':'\u2282\u20D2','vnsup':'\u2283\u20D2','vopf':'\uD835\uDD67','Vopf':'\uD835\uDD4D','vprop':'\u221D','vrtri':'\u22B3','vscr':'\uD835\uDCCB','Vscr':'\uD835\uDCB1','vsubne':'\u228A\uFE00','vsubnE':'\u2ACB\uFE00','vsupne':'\u228B\uFE00','vsupnE':'\u2ACC\uFE00','Vvdash':'\u22AA','vzigzag':'\u299A','wcirc':'\u0175','Wcirc':'\u0174','wedbar':'\u2A5F','wedge':'\u2227','Wedge':'\u22C0','wedgeq':'\u2259','weierp':'\u2118','wfr':'\uD835\uDD34','Wfr':'\uD835\uDD1A','wopf':'\uD835\uDD68','Wopf':'\uD835\uDD4E','wp':'\u2118','wr':'\u2240','wreath':'\u2240','wscr':'\uD835\uDCCC','Wscr':'\uD835\uDCB2','xcap':'\u22C2','xcirc':'\u25EF','xcup':'\u22C3','xdtri':'\u25BD','xfr':'\uD835\uDD35','Xfr':'\uD835\uDD1B','xharr':'\u27F7','xhArr':'\u27FA','xi':'\u03BE','Xi':'\u039E','xlarr':'\u27F5','xlArr':'\u27F8','xmap':'\u27FC','xnis':'\u22FB','xodot':'\u2A00','xopf':'\uD835\uDD69','Xopf':'\uD835\uDD4F','xoplus':'\u2A01','xotime':'\u2A02','xrarr':'\u27F6','xrArr':'\u27F9','xscr':'\uD835\uDCCD','Xscr':'\uD835\uDCB3','xsqcup':'\u2A06','xuplus':'\u2A04','xutri':'\u25B3','xvee':'\u22C1','xwedge':'\u22C0','yacute':'\xFD','Yacute':'\xDD','yacy':'\u044F','YAcy':'\u042F','ycirc':'\u0177','Ycirc':'\u0176','ycy':'\u044B','Ycy':'\u042B','yen':'\xA5','yfr':'\uD835\uDD36','Yfr':'\uD835\uDD1C','yicy':'\u0457','YIcy':'\u0407','yopf':'\uD835\uDD6A','Yopf':'\uD835\uDD50','yscr':'\uD835\uDCCE','Yscr':'\uD835\uDCB4','yucy':'\u044E','YUcy':'\u042E','yuml':'\xFF','Yuml':'\u0178','zacute':'\u017A','Zacute':'\u0179','zcaron':'\u017E','Zcaron':'\u017D','zcy':'\u0437','Zcy':'\u0417','zdot':'\u017C','Zdot':'\u017B','zeetrf':'\u2128','ZeroWidthSpace':'\u200B','zeta':'\u03B6','Zeta':'\u0396','zfr':'\uD835\uDD37','Zfr':'\u2128','zhcy':'\u0436','ZHcy':'\u0416','zigrarr':'\u21DD','zopf':'\uD835\uDD6B','Zopf':'\u2124','zscr':'\uD835\uDCCF','Zscr':'\uD835\uDCB5','zwj':'\u200D','zwnj':'\u200C'};
-	var decodeMapLegacy = {'aacute':'\xE1','Aacute':'\xC1','acirc':'\xE2','Acirc':'\xC2','acute':'\xB4','aelig':'\xE6','AElig':'\xC6','agrave':'\xE0','Agrave':'\xC0','amp':'&','AMP':'&','aring':'\xE5','Aring':'\xC5','atilde':'\xE3','Atilde':'\xC3','auml':'\xE4','Auml':'\xC4','brvbar':'\xA6','ccedil':'\xE7','Ccedil':'\xC7','cedil':'\xB8','cent':'\xA2','copy':'\xA9','COPY':'\xA9','curren':'\xA4','deg':'\xB0','divide':'\xF7','eacute':'\xE9','Eacute':'\xC9','ecirc':'\xEA','Ecirc':'\xCA','egrave':'\xE8','Egrave':'\xC8','eth':'\xF0','ETH':'\xD0','euml':'\xEB','Euml':'\xCB','frac12':'\xBD','frac14':'\xBC','frac34':'\xBE','gt':'>','GT':'>','iacute':'\xED','Iacute':'\xCD','icirc':'\xEE','Icirc':'\xCE','iexcl':'\xA1','igrave':'\xEC','Igrave':'\xCC','iquest':'\xBF','iuml':'\xEF','Iuml':'\xCF','laquo':'\xAB','lt':'<','LT':'<','macr':'\xAF','micro':'\xB5','middot':'\xB7','nbsp':'\xA0','not':'\xAC','ntilde':'\xF1','Ntilde':'\xD1','oacute':'\xF3','Oacute':'\xD3','ocirc':'\xF4','Ocirc':'\xD4','ograve':'\xF2','Ograve':'\xD2','ordf':'\xAA','ordm':'\xBA','oslash':'\xF8','Oslash':'\xD8','otilde':'\xF5','Otilde':'\xD5','ouml':'\xF6','Ouml':'\xD6','para':'\xB6','plusmn':'\xB1','pound':'\xA3','quot':'"','QUOT':'"','raquo':'\xBB','reg':'\xAE','REG':'\xAE','sect':'\xA7','shy':'\xAD','sup1':'\xB9','sup2':'\xB2','sup3':'\xB3','szlig':'\xDF','thorn':'\xFE','THORN':'\xDE','times':'\xD7','uacute':'\xFA','Uacute':'\xDA','ucirc':'\xFB','Ucirc':'\xDB','ugrave':'\xF9','Ugrave':'\xD9','uml':'\xA8','uuml':'\xFC','Uuml':'\xDC','yacute':'\xFD','Yacute':'\xDD','yen':'\xA5','yuml':'\xFF'};
-	var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','146':'\u2019','147':'\u201C','148':'\u201D','149':'\u2022','150':'\u2013','151':'\u2014','152':'\u02DC','153':'\u2122','154':'\u0161','155':'\u203A','156':'\u0153','158':'\u017E','159':'\u0178'};
-	var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,64977,64978,64979,64980,64981,64982,64983,64984,64985,64986,64987,64988,64989,64990,64991,64992,64993,64994,64995,64996,64997,64998,64999,65000,65001,65002,65003,65004,65005,65006,65007,65534,65535,131070,131071,196606,196607,262142,262143,327678,327679,393214,393215,458750,458751,524286,524287,589822,589823,655358,655359,720894,720895,786430,786431,851966,851967,917502,917503,983038,983039,1048574,1048575,1114110,1114111];
-
-	/*--------------------------------------------------------------------------*/
-
-	var stringFromCharCode = String.fromCharCode;
-
-	var object = {};
-	var hasOwnProperty = object.hasOwnProperty;
-	var has = function(object, propertyName) {
-		return hasOwnProperty.call(object, propertyName);
-	};
-
-	var contains = function(array, value) {
-		var index = -1;
-		var length = array.length;
-		while (++index < length) {
-			if (array[index] == value) {
-				return true;
-			}
-		}
-		return false;
-	};
-
-	var merge = function(options, defaults) {
-		if (!options) {
-			return defaults;
-		}
-		var result = {};
-		var key;
-		for (key in defaults) {
-			// A `hasOwnProperty` check is not needed here, since only recognized
-			// option names are used anyway. Any others are ignored.
-			result[key] = has(options, key) ? options[key] : defaults[key];
-		}
-		return result;
-	};
-
-	// Modified version of `ucs2encode`; see https://mths.be/punycode.
-	var codePointToSymbol = function(codePoint, strict) {
-		var output = '';
-		if ((codePoint >= 0xD800 && codePoint <= 0xDFFF) || codePoint > 0x10FFFF) {
-			// See issue #4:
-			// “Otherwise, if the number is in the range 0xD800 to 0xDFFF or is
-			// greater than 0x10FFFF, then this is a parse error. Return a U+FFFD
-			// REPLACEMENT CHARACTER.”
-			if (strict) {
-				parseError('character reference outside the permissible Unicode range');
-			}
-			return '\uFFFD';
-		}
-		if (has(decodeMapNumeric, codePoint)) {
-			if (strict) {
-				parseError('disallowed character reference');
-			}
-			return decodeMapNumeric[codePoint];
-		}
-		if (strict && contains(invalidReferenceCodePoints, codePoint)) {
-			parseError('disallowed character reference');
-		}
-		if (codePoint > 0xFFFF) {
-			codePoint -= 0x10000;
-			output += stringFromCharCode(codePoint >>> 10 & 0x3FF | 0xD800);
-			codePoint = 0xDC00 | codePoint & 0x3FF;
-		}
-		output += stringFromCharCode(codePoint);
-		return output;
-	};
-
-	var hexEscape = function(codePoint) {
-		return '&#x' + codePoint.toString(16).toUpperCase() + ';';
-	};
-
-	var decEscape = function(codePoint) {
-		return '&#' + codePoint + ';';
-	};
-
-	var parseError = function(message) {
-		throw Error('Parse error: ' + message);
-	};
-
-	/*--------------------------------------------------------------------------*/
-
-	var encode = function(string, options) {
-		options = merge(options, encode.options);
-		var strict = options.strict;
-		if (strict && regexInvalidRawCodePoint.test(string)) {
-			parseError('forbidden code point');
-		}
-		var encodeEverything = options.encodeEverything;
-		var useNamedReferences = options.useNamedReferences;
-		var allowUnsafeSymbols = options.allowUnsafeSymbols;
-		var escapeCodePoint = options.decimal ? decEscape : hexEscape;
-
-		var escapeBmpSymbol = function(symbol) {
-			return escapeCodePoint(symbol.charCodeAt(0));
-		};
-
-		if (encodeEverything) {
-			// Encode ASCII symbols.
-			string = string.replace(regexAsciiWhitelist, function(symbol) {
-				// Use named references if requested & possible.
-				if (useNamedReferences && has(encodeMap, symbol)) {
-					return '&' + encodeMap[symbol] + ';';
-				}
-				return escapeBmpSymbol(symbol);
-			});
-			// Shorten a few escapes that represent two symbols, of which at least one
-			// is within the ASCII range.
-			if (useNamedReferences) {
-				string = string
-					.replace(/>\u20D2/g, '>⃒')
-					.replace(/<\u20D2/g, '<⃒')
-					.replace(/fj/g, 'fj');
-			}
-			// Encode non-ASCII symbols.
-			if (useNamedReferences) {
-				// Encode non-ASCII symbols that can be replaced with a named reference.
-				string = string.replace(regexEncodeNonAscii, function(string) {
-					// Note: there is no need to check `has(encodeMap, string)` here.
-					return '&' + encodeMap[string] + ';';
-				});
-			}
-			// Note: any remaining non-ASCII symbols are handled outside of the `if`.
-		} else if (useNamedReferences) {
-			// Apply named character references.
-			// Encode `<>"'&` using named character references.
-			if (!allowUnsafeSymbols) {
-				string = string.replace(regexEscape, function(string) {
-					return '&' + encodeMap[string] + ';'; // no need to check `has()` here
-				});
-			}
-			// Shorten escapes that represent two symbols, of which at least one is
-			// `<>"'&`.
-			string = string
-				.replace(/>\u20D2/g, '>⃒')
-				.replace(/<\u20D2/g, '<⃒');
-			// Encode non-ASCII symbols that can be replaced with a named reference.
-			string = string.replace(regexEncodeNonAscii, function(string) {
-				// Note: there is no need to check `has(encodeMap, string)` here.
-				return '&' + encodeMap[string] + ';';
-			});
-		} else if (!allowUnsafeSymbols) {
-			// Encode `<>"'&` using hexadecimal escapes, now that they’re not handled
-			// using named character references.
-			string = string.replace(regexEscape, escapeBmpSymbol);
-		}
-		return string
-			// Encode astral symbols.
-			.replace(regexAstralSymbols, function($0) {
-				// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
-				var high = $0.charCodeAt(0);
-				var low = $0.charCodeAt(1);
-				var codePoint = (high - 0xD800) * 0x400 + low - 0xDC00 + 0x10000;
-				return escapeCodePoint(codePoint);
-			})
-			// Encode any remaining BMP symbols that are not printable ASCII symbols
-			// using a hexadecimal escape.
-			.replace(regexBmpWhitelist, escapeBmpSymbol);
-	};
-	// Expose default options (so they can be overridden globally).
-	encode.options = {
-		'allowUnsafeSymbols': false,
-		'encodeEverything': false,
-		'strict': false,
-		'useNamedReferences': false,
-		'decimal' : false
-	};
-
-	var decode = function(html, options) {
-		options = merge(options, decode.options);
-		var strict = options.strict;
-		if (strict && regexInvalidEntity.test(html)) {
-			parseError('malformed character reference');
-		}
-		return html.replace(regexDecode, function($0, $1, $2, $3, $4, $5, $6, $7, $8) {
-			var codePoint;
-			var semicolon;
-			var decDigits;
-			var hexDigits;
-			var reference;
-			var next;
-
-			if ($1) {
-				reference = $1;
-				// Note: there is no need to check `has(decodeMap, reference)`.
-				return decodeMap[reference];
-			}
-
-			if ($2) {
-				// Decode named character references without trailing `;`, e.g. `&`.
-				// This is only a parse error if it gets converted to `&`, or if it is
-				// followed by `=` in an attribute context.
-				reference = $2;
-				next = $3;
-				if (next && options.isAttributeValue) {
-					if (strict && next == '=') {
-						parseError('`&` did not start a character reference');
-					}
-					return $0;
-				} else {
-					if (strict) {
-						parseError(
-							'named character reference was not terminated by a semicolon'
-						);
-					}
-					// Note: there is no need to check `has(decodeMapLegacy, reference)`.
-					return decodeMapLegacy[reference] + (next || '');
-				}
-			}
-
-			if ($4) {
-				// Decode decimal escapes, e.g. `𝌆`.
-				decDigits = $4;
-				semicolon = $5;
-				if (strict && !semicolon) {
-					parseError('character reference was not terminated by a semicolon');
-				}
-				codePoint = parseInt(decDigits, 10);
-				return codePointToSymbol(codePoint, strict);
-			}
-
-			if ($6) {
-				// Decode hexadecimal escapes, e.g. `𝌆`.
-				hexDigits = $6;
-				semicolon = $7;
-				if (strict && !semicolon) {
-					parseError('character reference was not terminated by a semicolon');
-				}
-				codePoint = parseInt(hexDigits, 16);
-				return codePointToSymbol(codePoint, strict);
-			}
-
-			// If we’re still here, `if ($7)` is implied; it’s an ambiguous
-			// ampersand for sure. https://mths.be/notes/ambiguous-ampersands
-			if (strict) {
-				parseError(
-					'named character reference was not terminated by a semicolon'
-				);
-			}
-			return $0;
-		});
-	};
-	// Expose default options (so they can be overridden globally).
-	decode.options = {
-		'isAttributeValue': false,
-		'strict': false
-	};
-
-	var escape = function(string) {
-		return string.replace(regexEscape, function($0) {
-			// Note: there is no need to check `has(escapeMap, $0)` here.
-			return escapeMap[$0];
-		});
-	};
-
-	/*--------------------------------------------------------------------------*/
-
-	var he = {
-		'version': '1.2.0',
-		'encode': encode,
-		'decode': decode,
-		'escape': escape,
-		'unescape': decode
-	};
-
-	// Some AMD build optimizers, like r.js, check for specific condition patterns
-	// like the following:
-	if (
-		true
-	) {
-		!(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
-			return he;
-		}).call(exports, __webpack_require__, exports, module),
-		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-	}	else { var key; }
-
-}(this));
-
-
-/***/ }),
-
-/***/ 42358:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "lX": () => (/* binding */ createBrowserHistory),
-  "q_": () => (/* binding */ createHashHistory),
-  "ob": () => (/* binding */ createLocation),
-  "PP": () => (/* binding */ createMemoryHistory),
-  "Ep": () => (/* binding */ createPath),
-  "Hp": () => (/* binding */ locationsAreEqual)
-});
-
-// UNUSED EXPORTS: parsePath
-
-// EXTERNAL MODULE: ./node_modules/@babel/runtime/helpers/esm/extends.js
-var esm_extends = __webpack_require__(87462);
-;// CONCATENATED MODULE: ./node_modules/resolve-pathname/esm/resolve-pathname.js
-function isAbsolute(pathname) {
-  return pathname.charAt(0) === '/';
-}
-
-// About 1.5x faster than the two-arg version of Array#splice()
-function spliceOne(list, index) {
-  for (var i = index, k = i + 1, n = list.length; k < n; i += 1, k += 1) {
-    list[i] = list[k];
-  }
-
-  list.pop();
-}
-
-// This implementation is based heavily on node's url.parse
-function resolvePathname(to, from) {
-  if (from === undefined) from = '';
-
-  var toParts = (to && to.split('/')) || [];
-  var fromParts = (from && from.split('/')) || [];
-
-  var isToAbs = to && isAbsolute(to);
-  var isFromAbs = from && isAbsolute(from);
-  var mustEndAbs = isToAbs || isFromAbs;
-
-  if (to && isAbsolute(to)) {
-    // to is absolute
-    fromParts = toParts;
-  } else if (toParts.length) {
-    // to is relative, drop the filename
-    fromParts.pop();
-    fromParts = fromParts.concat(toParts);
-  }
-
-  if (!fromParts.length) return '/';
-
-  var hasTrailingSlash;
-  if (fromParts.length) {
-    var last = fromParts[fromParts.length - 1];
-    hasTrailingSlash = last === '.' || last === '..' || last === '';
-  } else {
-    hasTrailingSlash = false;
-  }
-
-  var up = 0;
-  for (var i = fromParts.length; i >= 0; i--) {
-    var part = fromParts[i];
-
-    if (part === '.') {
-      spliceOne(fromParts, i);
-    } else if (part === '..') {
-      spliceOne(fromParts, i);
-      up++;
-    } else if (up) {
-      spliceOne(fromParts, i);
-      up--;
-    }
-  }
-
-  if (!mustEndAbs) for (; up--; up) fromParts.unshift('..');
-
-  if (
-    mustEndAbs &&
-    fromParts[0] !== '' &&
-    (!fromParts[0] || !isAbsolute(fromParts[0]))
-  )
-    fromParts.unshift('');
-
-  var result = fromParts.join('/');
-
-  if (hasTrailingSlash && result.substr(-1) !== '/') result += '/';
-
-  return result;
-}
-
-/* harmony default export */ const resolve_pathname = (resolvePathname);
-
-;// CONCATENATED MODULE: ./node_modules/value-equal/esm/value-equal.js
-function value_equal_valueOf(obj) {
-  return obj.valueOf ? obj.valueOf() : Object.prototype.valueOf.call(obj);
-}
-
-function valueEqual(a, b) {
-  // Test for strict equality first.
-  if (a === b) return true;
-
-  // Otherwise, if either of them == null they are not equal.
-  if (a == null || b == null) return false;
-
-  if (Array.isArray(a)) {
-    return (
-      Array.isArray(b) &&
-      a.length === b.length &&
-      a.every(function(item, index) {
-        return valueEqual(item, b[index]);
-      })
-    );
-  }
-
-  if (typeof a === 'object' || typeof b === 'object') {
-    var aValue = value_equal_valueOf(a);
-    var bValue = value_equal_valueOf(b);
-
-    if (aValue !== a || bValue !== b) return valueEqual(aValue, bValue);
-
-    return Object.keys(Object.assign({}, a, b)).every(function(key) {
-      return valueEqual(a[key], b[key]);
-    });
-  }
-
-  return false;
-}
-
-/* harmony default export */ const value_equal = (valueEqual);
-
-// EXTERNAL MODULE: ./node_modules/tiny-invariant/dist/esm/tiny-invariant.js
-var tiny_invariant = __webpack_require__(38776);
-;// CONCATENATED MODULE: ./node_modules/history/esm/history.js
-
-
-
-
-
-
-function addLeadingSlash(path) {
-  return path.charAt(0) === '/' ? path : '/' + path;
-}
-function stripLeadingSlash(path) {
-  return path.charAt(0) === '/' ? path.substr(1) : path;
-}
-function hasBasename(path, prefix) {
-  return path.toLowerCase().indexOf(prefix.toLowerCase()) === 0 && '/?#'.indexOf(path.charAt(prefix.length)) !== -1;
-}
-function stripBasename(path, prefix) {
-  return hasBasename(path, prefix) ? path.substr(prefix.length) : path;
-}
-function stripTrailingSlash(path) {
-  return path.charAt(path.length - 1) === '/' ? path.slice(0, -1) : path;
-}
-function parsePath(path) {
-  var pathname = path || '/';
-  var search = '';
-  var hash = '';
-  var hashIndex = pathname.indexOf('#');
-
-  if (hashIndex !== -1) {
-    hash = pathname.substr(hashIndex);
-    pathname = pathname.substr(0, hashIndex);
-  }
-
-  var searchIndex = pathname.indexOf('?');
-
-  if (searchIndex !== -1) {
-    search = pathname.substr(searchIndex);
-    pathname = pathname.substr(0, searchIndex);
-  }
-
-  return {
-    pathname: pathname,
-    search: search === '?' ? '' : search,
-    hash: hash === '#' ? '' : hash
-  };
-}
-function createPath(location) {
-  var pathname = location.pathname,
-      search = location.search,
-      hash = location.hash;
-  var path = pathname || '/';
-  if (search && search !== '?') path += search.charAt(0) === '?' ? search : "?" + search;
-  if (hash && hash !== '#') path += hash.charAt(0) === '#' ? hash : "#" + hash;
-  return path;
-}
-
-function createLocation(path, state, key, currentLocation) {
-  var location;
-
-  if (typeof path === 'string') {
-    // Two-arg form: push(path, state)
-    location = parsePath(path);
-    location.state = state;
-  } else {
-    // One-arg form: push(location)
-    location = (0,esm_extends/* default */.Z)({}, path);
-    if (location.pathname === undefined) location.pathname = '';
-
-    if (location.search) {
-      if (location.search.charAt(0) !== '?') location.search = '?' + location.search;
-    } else {
-      location.search = '';
-    }
-
-    if (location.hash) {
-      if (location.hash.charAt(0) !== '#') location.hash = '#' + location.hash;
-    } else {
-      location.hash = '';
-    }
-
-    if (state !== undefined && location.state === undefined) location.state = state;
-  }
-
-  try {
-    location.pathname = decodeURI(location.pathname);
-  } catch (e) {
-    if (e instanceof URIError) {
-      throw new URIError('Pathname "' + location.pathname + '" could not be decoded. ' + 'This is likely caused by an invalid percent-encoding.');
-    } else {
-      throw e;
-    }
-  }
-
-  if (key) location.key = key;
-
-  if (currentLocation) {
-    // Resolve incomplete/relative pathname relative to current location.
-    if (!location.pathname) {
-      location.pathname = currentLocation.pathname;
-    } else if (location.pathname.charAt(0) !== '/') {
-      location.pathname = resolve_pathname(location.pathname, currentLocation.pathname);
-    }
-  } else {
-    // When there is no prior location and pathname is empty, set it to /
-    if (!location.pathname) {
-      location.pathname = '/';
-    }
-  }
-
-  return location;
-}
-function locationsAreEqual(a, b) {
-  return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash && a.key === b.key && value_equal(a.state, b.state);
-}
-
-function createTransitionManager() {
-  var prompt = null;
-
-  function setPrompt(nextPrompt) {
-     false ? 0 : void 0;
-    prompt = nextPrompt;
-    return function () {
-      if (prompt === nextPrompt) prompt = null;
-    };
-  }
-
-  function confirmTransitionTo(location, action, getUserConfirmation, callback) {
-    // TODO: If another transition starts while we're still confirming
-    // the previous one, we may end up in a weird state. Figure out the
-    // best way to handle this.
-    if (prompt != null) {
-      var result = typeof prompt === 'function' ? prompt(location, action) : prompt;
-
-      if (typeof result === 'string') {
-        if (typeof getUserConfirmation === 'function') {
-          getUserConfirmation(result, callback);
-        } else {
-           false ? 0 : void 0;
-          callback(true);
-        }
-      } else {
-        // Return false from a transition hook to cancel the transition.
-        callback(result !== false);
-      }
-    } else {
-      callback(true);
-    }
-  }
-
-  var listeners = [];
-
-  function appendListener(fn) {
-    var isActive = true;
-
-    function listener() {
-      if (isActive) fn.apply(void 0, arguments);
-    }
-
-    listeners.push(listener);
-    return function () {
-      isActive = false;
-      listeners = listeners.filter(function (item) {
-        return item !== listener;
-      });
-    };
-  }
-
-  function notifyListeners() {
-    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-
-    listeners.forEach(function (listener) {
-      return listener.apply(void 0, args);
-    });
-  }
-
-  return {
-    setPrompt: setPrompt,
-    confirmTransitionTo: confirmTransitionTo,
-    appendListener: appendListener,
-    notifyListeners: notifyListeners
-  };
-}
-
-var canUseDOM = !!(typeof window !== 'undefined' && window.document && window.document.createElement);
-function getConfirmation(message, callback) {
-  callback(window.confirm(message)); // eslint-disable-line no-alert
-}
-/**
- * Returns true if the HTML5 history API is supported. Taken from Modernizr.
- *
- * https://github.com/Modernizr/Modernizr/blob/master/LICENSE
- * https://github.com/Modernizr/Modernizr/blob/master/feature-detects/history.js
- * changed to avoid false negatives for Windows Phones: https://github.com/reactjs/react-router/issues/586
- */
-
-function supportsHistory() {
-  var ua = window.navigator.userAgent;
-  if ((ua.indexOf('Android 2.') !== -1 || ua.indexOf('Android 4.0') !== -1) && ua.indexOf('Mobile Safari') !== -1 && ua.indexOf('Chrome') === -1 && ua.indexOf('Windows Phone') === -1) return false;
-  return window.history && 'pushState' in window.history;
-}
-/**
- * Returns true if browser fires popstate on hash change.
- * IE10 and IE11 do not.
- */
-
-function supportsPopStateOnHashChange() {
-  return window.navigator.userAgent.indexOf('Trident') === -1;
-}
-/**
- * Returns false if using go(n) with hash history causes a full page reload.
- */
-
-function supportsGoWithoutReloadUsingHash() {
-  return window.navigator.userAgent.indexOf('Firefox') === -1;
-}
-/**
- * Returns true if a given popstate event is an extraneous WebKit event.
- * Accounts for the fact that Chrome on iOS fires real popstate events
- * containing undefined state when pressing the back button.
- */
-
-function isExtraneousPopstateEvent(event) {
-  return event.state === undefined && navigator.userAgent.indexOf('CriOS') === -1;
-}
-
-var PopStateEvent = 'popstate';
-var HashChangeEvent = 'hashchange';
-
-function getHistoryState() {
-  try {
-    return window.history.state || {};
-  } catch (e) {
-    // IE 11 sometimes throws when accessing window.history.state
-    // See https://github.com/ReactTraining/history/pull/289
-    return {};
-  }
-}
-/**
- * Creates a history object that uses the HTML5 history API including
- * pushState, replaceState, and the popstate event.
- */
-
-
-function createBrowserHistory(props) {
-  if (props === void 0) {
-    props = {};
-  }
-
-  !canUseDOM ?  false ? 0 : (0,tiny_invariant/* default */.Z)(false) : void 0;
-  var globalHistory = window.history;
-  var canUseHistory = supportsHistory();
-  var needsHashChangeListener = !supportsPopStateOnHashChange();
-  var _props = props,
-      _props$forceRefresh = _props.forceRefresh,
-      forceRefresh = _props$forceRefresh === void 0 ? false : _props$forceRefresh,
-      _props$getUserConfirm = _props.getUserConfirmation,
-      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,
-      _props$keyLength = _props.keyLength,
-      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;
-  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';
-
-  function getDOMLocation(historyState) {
-    var _ref = historyState || {},
-        key = _ref.key,
-        state = _ref.state;
-
-    var _window$location = window.location,
-        pathname = _window$location.pathname,
-        search = _window$location.search,
-        hash = _window$location.hash;
-    var path = pathname + search + hash;
-     false ? 0 : void 0;
-    if (basename) path = stripBasename(path, basename);
-    return createLocation(path, state, key);
-  }
-
-  function createKey() {
-    return Math.random().toString(36).substr(2, keyLength);
-  }
-
-  var transitionManager = createTransitionManager();
-
-  function setState(nextState) {
-    (0,esm_extends/* default */.Z)(history, nextState);
-
-    history.length = globalHistory.length;
-    transitionManager.notifyListeners(history.location, history.action);
-  }
-
-  function handlePopState(event) {
-    // Ignore extraneous popstate events in WebKit.
-    if (isExtraneousPopstateEvent(event)) return;
-    handlePop(getDOMLocation(event.state));
-  }
-
-  function handleHashChange() {
-    handlePop(getDOMLocation(getHistoryState()));
-  }
-
-  var forceNextPop = false;
-
-  function handlePop(location) {
-    if (forceNextPop) {
-      forceNextPop = false;
-      setState();
-    } else {
-      var action = 'POP';
-      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
-        if (ok) {
-          setState({
-            action: action,
-            location: location
-          });
-        } else {
-          revertPop(location);
-        }
-      });
-    }
-  }
-
-  function revertPop(fromLocation) {
-    var toLocation = history.location; // TODO: We could probably make this more reliable by
-    // keeping a list of keys we've seen in sessionStorage.
-    // Instead, we just default to 0 for keys we don't know.
-
-    var toIndex = allKeys.indexOf(toLocation.key);
-    if (toIndex === -1) toIndex = 0;
-    var fromIndex = allKeys.indexOf(fromLocation.key);
-    if (fromIndex === -1) fromIndex = 0;
-    var delta = toIndex - fromIndex;
-
-    if (delta) {
-      forceNextPop = true;
-      go(delta);
-    }
-  }
-
-  var initialLocation = getDOMLocation(getHistoryState());
-  var allKeys = [initialLocation.key]; // Public interface
-
-  function createHref(location) {
-    return basename + createPath(location);
-  }
-
-  function push(path, state) {
-     false ? 0 : void 0;
-    var action = 'PUSH';
-    var location = createLocation(path, state, createKey(), history.location);
-    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
-      if (!ok) return;
-      var href = createHref(location);
-      var key = location.key,
-          state = location.state;
-
-      if (canUseHistory) {
-        globalHistory.pushState({
-          key: key,
-          state: state
-        }, null, href);
-
-        if (forceRefresh) {
-          window.location.href = href;
-        } else {
-          var prevIndex = allKeys.indexOf(history.location.key);
-          var nextKeys = allKeys.slice(0, prevIndex + 1);
-          nextKeys.push(location.key);
-          allKeys = nextKeys;
-          setState({
-            action: action,
-            location: location
-          });
-        }
-      } else {
-         false ? 0 : void 0;
-        window.location.href = href;
-      }
-    });
-  }
-
-  function replace(path, state) {
-     false ? 0 : void 0;
-    var action = 'REPLACE';
-    var location = createLocation(path, state, createKey(), history.location);
-    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
-      if (!ok) return;
-      var href = createHref(location);
-      var key = location.key,
-          state = location.state;
-
-      if (canUseHistory) {
-        globalHistory.replaceState({
-          key: key,
-          state: state
-        }, null, href);
-
-        if (forceRefresh) {
-          window.location.replace(href);
-        } else {
-          var prevIndex = allKeys.indexOf(history.location.key);
-          if (prevIndex !== -1) allKeys[prevIndex] = location.key;
-          setState({
-            action: action,
-            location: location
-          });
-        }
-      } else {
-         false ? 0 : void 0;
-        window.location.replace(href);
-      }
-    });
-  }
-
-  function go(n) {
-    globalHistory.go(n);
-  }
-
-  function goBack() {
-    go(-1);
-  }
-
-  function goForward() {
-    go(1);
-  }
-
-  var listenerCount = 0;
-
-  function checkDOMListeners(delta) {
-    listenerCount += delta;
-
-    if (listenerCount === 1 && delta === 1) {
-      window.addEventListener(PopStateEvent, handlePopState);
-      if (needsHashChangeListener) window.addEventListener(HashChangeEvent, handleHashChange);
-    } else if (listenerCount === 0) {
-      window.removeEventListener(PopStateEvent, handlePopState);
-      if (needsHashChangeListener) window.removeEventListener(HashChangeEvent, handleHashChange);
-    }
-  }
-
-  var isBlocked = false;
-
-  function block(prompt) {
-    if (prompt === void 0) {
-      prompt = false;
-    }
-
-    var unblock = transitionManager.setPrompt(prompt);
-
-    if (!isBlocked) {
-      checkDOMListeners(1);
-      isBlocked = true;
-    }
-
-    return function () {
-      if (isBlocked) {
-        isBlocked = false;
-        checkDOMListeners(-1);
-      }
-
-      return unblock();
-    };
-  }
-
-  function listen(listener) {
-    var unlisten = transitionManager.appendListener(listener);
-    checkDOMListeners(1);
-    return function () {
-      checkDOMListeners(-1);
-      unlisten();
-    };
-  }
-
-  var history = {
-    length: globalHistory.length,
-    action: 'POP',
-    location: initialLocation,
-    createHref: createHref,
-    push: push,
-    replace: replace,
-    go: go,
-    goBack: goBack,
-    goForward: goForward,
-    block: block,
-    listen: listen
-  };
-  return history;
-}
-
-var HashChangeEvent$1 = 'hashchange';
-var HashPathCoders = {
-  hashbang: {
-    encodePath: function encodePath(path) {
-      return path.charAt(0) === '!' ? path : '!/' + stripLeadingSlash(path);
-    },
-    decodePath: function decodePath(path) {
-      return path.charAt(0) === '!' ? path.substr(1) : path;
-    }
-  },
-  noslash: {
-    encodePath: stripLeadingSlash,
-    decodePath: addLeadingSlash
-  },
-  slash: {
-    encodePath: addLeadingSlash,
-    decodePath: addLeadingSlash
-  }
-};
-
-function stripHash(url) {
-  var hashIndex = url.indexOf('#');
-  return hashIndex === -1 ? url : url.slice(0, hashIndex);
-}
-
-function getHashPath() {
-  // We can't use window.location.hash here because it's not
-  // consistent across browsers - Firefox will pre-decode it!
-  var href = window.location.href;
-  var hashIndex = href.indexOf('#');
-  return hashIndex === -1 ? '' : href.substring(hashIndex + 1);
-}
-
-function pushHashPath(path) {
-  window.location.hash = path;
-}
-
-function replaceHashPath(path) {
-  window.location.replace(stripHash(window.location.href) + '#' + path);
-}
-
-function createHashHistory(props) {
-  if (props === void 0) {
-    props = {};
-  }
-
-  !canUseDOM ?  false ? 0 : (0,tiny_invariant/* default */.Z)(false) : void 0;
-  var globalHistory = window.history;
-  var canGoWithoutReload = supportsGoWithoutReloadUsingHash();
-  var _props = props,
-      _props$getUserConfirm = _props.getUserConfirmation,
-      getUserConfirmation = _props$getUserConfirm === void 0 ? getConfirmation : _props$getUserConfirm,
-      _props$hashType = _props.hashType,
-      hashType = _props$hashType === void 0 ? 'slash' : _props$hashType;
-  var basename = props.basename ? stripTrailingSlash(addLeadingSlash(props.basename)) : '';
-  var _HashPathCoders$hashT = HashPathCoders[hashType],
-      encodePath = _HashPathCoders$hashT.encodePath,
-      decodePath = _HashPathCoders$hashT.decodePath;
-
-  function getDOMLocation() {
-    var path = decodePath(getHashPath());
-     false ? 0 : void 0;
-    if (basename) path = stripBasename(path, basename);
-    return createLocation(path);
-  }
-
-  var transitionManager = createTransitionManager();
-
-  function setState(nextState) {
-    (0,esm_extends/* default */.Z)(history, nextState);
-
-    history.length = globalHistory.length;
-    transitionManager.notifyListeners(history.location, history.action);
-  }
-
-  var forceNextPop = false;
-  var ignorePath = null;
-
-  function locationsAreEqual$$1(a, b) {
-    return a.pathname === b.pathname && a.search === b.search && a.hash === b.hash;
-  }
-
-  function handleHashChange() {
-    var path = getHashPath();
-    var encodedPath = encodePath(path);
-
-    if (path !== encodedPath) {
-      // Ensure we always have a properly-encoded hash.
-      replaceHashPath(encodedPath);
-    } else {
-      var location = getDOMLocation();
-      var prevLocation = history.location;
-      if (!forceNextPop && locationsAreEqual$$1(prevLocation, location)) return; // A hashchange doesn't always == location change.
-
-      if (ignorePath === createPath(location)) return; // Ignore this change; we already setState in push/replace.
-
-      ignorePath = null;
-      handlePop(location);
-    }
-  }
-
-  function handlePop(location) {
-    if (forceNextPop) {
-      forceNextPop = false;
-      setState();
-    } else {
-      var action = 'POP';
-      transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
-        if (ok) {
-          setState({
-            action: action,
-            location: location
-          });
-        } else {
-          revertPop(location);
-        }
-      });
-    }
-  }
-
-  function revertPop(fromLocation) {
-    var toLocation = history.location; // TODO: We could probably make this more reliable by
-    // keeping a list of paths we've seen in sessionStorage.
-    // Instead, we just default to 0 for paths we don't know.
-
-    var toIndex = allPaths.lastIndexOf(createPath(toLocation));
-    if (toIndex === -1) toIndex = 0;
-    var fromIndex = allPaths.lastIndexOf(createPath(fromLocation));
-    if (fromIndex === -1) fromIndex = 0;
-    var delta = toIndex - fromIndex;
-
-    if (delta) {
-      forceNextPop = true;
-      go(delta);
-    }
-  } // Ensure the hash is encoded properly before doing anything else.
-
-
-  var path = getHashPath();
-  var encodedPath = encodePath(path);
-  if (path !== encodedPath) replaceHashPath(encodedPath);
-  var initialLocation = getDOMLocation();
-  var allPaths = [createPath(initialLocation)]; // Public interface
-
-  function createHref(location) {
-    var baseTag = document.querySelector('base');
-    var href = '';
-
-    if (baseTag && baseTag.getAttribute('href')) {
-      href = stripHash(window.location.href);
-    }
-
-    return href + '#' + encodePath(basename + createPath(location));
-  }
-
-  function push(path, state) {
-     false ? 0 : void 0;
-    var action = 'PUSH';
-    var location = createLocation(path, undefined, undefined, history.location);
-    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
-      if (!ok) return;
-      var path = createPath(location);
-      var encodedPath = encodePath(basename + path);
-      var hashChanged = getHashPath() !== encodedPath;
-
-      if (hashChanged) {
-        // We cannot tell if a hashchange was caused by a PUSH, so we'd
-        // rather setState here and ignore the hashchange. The caveat here
-        // is that other hash histories in the page will consider it a POP.
-        ignorePath = path;
-        pushHashPath(encodedPath);
-        var prevIndex = allPaths.lastIndexOf(createPath(history.location));
-        var nextPaths = allPaths.slice(0, prevIndex + 1);
-        nextPaths.push(path);
-        allPaths = nextPaths;
-        setState({
-          action: action,
-          location: location
-        });
-      } else {
-         false ? 0 : void 0;
-        setState();
-      }
-    });
-  }
-
-  function replace(path, state) {
-     false ? 0 : void 0;
-    var action = 'REPLACE';
-    var location = createLocation(path, undefined, undefined, history.location);
-    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
-      if (!ok) return;
-      var path = createPath(location);
-      var encodedPath = encodePath(basename + path);
-      var hashChanged = getHashPath() !== encodedPath;
-
-      if (hashChanged) {
-        // We cannot tell if a hashchange was caused by a REPLACE, so we'd
-        // rather setState here and ignore the hashchange. The caveat here
-        // is that other hash histories in the page will consider it a POP.
-        ignorePath = path;
-        replaceHashPath(encodedPath);
-      }
-
-      var prevIndex = allPaths.indexOf(createPath(history.location));
-      if (prevIndex !== -1) allPaths[prevIndex] = path;
-      setState({
-        action: action,
-        location: location
-      });
-    });
-  }
-
-  function go(n) {
-     false ? 0 : void 0;
-    globalHistory.go(n);
-  }
-
-  function goBack() {
-    go(-1);
-  }
-
-  function goForward() {
-    go(1);
-  }
-
-  var listenerCount = 0;
-
-  function checkDOMListeners(delta) {
-    listenerCount += delta;
-
-    if (listenerCount === 1 && delta === 1) {
-      window.addEventListener(HashChangeEvent$1, handleHashChange);
-    } else if (listenerCount === 0) {
-      window.removeEventListener(HashChangeEvent$1, handleHashChange);
-    }
-  }
-
-  var isBlocked = false;
-
-  function block(prompt) {
-    if (prompt === void 0) {
-      prompt = false;
-    }
-
-    var unblock = transitionManager.setPrompt(prompt);
-
-    if (!isBlocked) {
-      checkDOMListeners(1);
-      isBlocked = true;
-    }
-
-    return function () {
-      if (isBlocked) {
-        isBlocked = false;
-        checkDOMListeners(-1);
-      }
-
-      return unblock();
-    };
-  }
-
-  function listen(listener) {
-    var unlisten = transitionManager.appendListener(listener);
-    checkDOMListeners(1);
-    return function () {
-      checkDOMListeners(-1);
-      unlisten();
-    };
-  }
-
-  var history = {
-    length: globalHistory.length,
-    action: 'POP',
-    location: initialLocation,
-    createHref: createHref,
-    push: push,
-    replace: replace,
-    go: go,
-    goBack: goBack,
-    goForward: goForward,
-    block: block,
-    listen: listen
-  };
-  return history;
-}
-
-function clamp(n, lowerBound, upperBound) {
-  return Math.min(Math.max(n, lowerBound), upperBound);
-}
-/**
- * Creates a history object that stores locations in memory.
- */
-
-
-function createMemoryHistory(props) {
-  if (props === void 0) {
-    props = {};
-  }
-
-  var _props = props,
-      getUserConfirmation = _props.getUserConfirmation,
-      _props$initialEntries = _props.initialEntries,
-      initialEntries = _props$initialEntries === void 0 ? ['/'] : _props$initialEntries,
-      _props$initialIndex = _props.initialIndex,
-      initialIndex = _props$initialIndex === void 0 ? 0 : _props$initialIndex,
-      _props$keyLength = _props.keyLength,
-      keyLength = _props$keyLength === void 0 ? 6 : _props$keyLength;
-  var transitionManager = createTransitionManager();
-
-  function setState(nextState) {
-    (0,esm_extends/* default */.Z)(history, nextState);
-
-    history.length = history.entries.length;
-    transitionManager.notifyListeners(history.location, history.action);
-  }
-
-  function createKey() {
-    return Math.random().toString(36).substr(2, keyLength);
-  }
-
-  var index = clamp(initialIndex, 0, initialEntries.length - 1);
-  var entries = initialEntries.map(function (entry) {
-    return typeof entry === 'string' ? createLocation(entry, undefined, createKey()) : createLocation(entry, undefined, entry.key || createKey());
-  }); // Public interface
-
-  var createHref = createPath;
-
-  function push(path, state) {
-     false ? 0 : void 0;
-    var action = 'PUSH';
-    var location = createLocation(path, state, createKey(), history.location);
-    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
-      if (!ok) return;
-      var prevIndex = history.index;
-      var nextIndex = prevIndex + 1;
-      var nextEntries = history.entries.slice(0);
-
-      if (nextEntries.length > nextIndex) {
-        nextEntries.splice(nextIndex, nextEntries.length - nextIndex, location);
-      } else {
-        nextEntries.push(location);
-      }
-
-      setState({
-        action: action,
-        location: location,
-        index: nextIndex,
-        entries: nextEntries
-      });
-    });
-  }
-
-  function replace(path, state) {
-     false ? 0 : void 0;
-    var action = 'REPLACE';
-    var location = createLocation(path, state, createKey(), history.location);
-    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
-      if (!ok) return;
-      history.entries[history.index] = location;
-      setState({
-        action: action,
-        location: location
-      });
-    });
-  }
-
-  function go(n) {
-    var nextIndex = clamp(history.index + n, 0, history.entries.length - 1);
-    var action = 'POP';
-    var location = history.entries[nextIndex];
-    transitionManager.confirmTransitionTo(location, action, getUserConfirmation, function (ok) {
-      if (ok) {
-        setState({
-          action: action,
-          location: location,
-          index: nextIndex
-        });
-      } else {
-        // Mimic the behavior of DOM histories by
-        // causing a render after a cancelled POP.
-        setState();
-      }
-    });
-  }
-
-  function goBack() {
-    go(-1);
-  }
-
-  function goForward() {
-    go(1);
-  }
-
-  function canGo(n) {
-    var nextIndex = history.index + n;
-    return nextIndex >= 0 && nextIndex < history.entries.length;
-  }
-
-  function block(prompt) {
-    if (prompt === void 0) {
-      prompt = false;
-    }
-
-    return transitionManager.setPrompt(prompt);
-  }
-
-  function listen(listener) {
-    return transitionManager.appendListener(listener);
-  }
-
-  var history = {
-    length: entries.length,
-    action: 'POP',
-    location: entries[index],
-    index: index,
-    entries: entries,
-    createHref: createHref,
-    push: push,
-    replace: replace,
-    go: go,
-    goBack: goBack,
-    goForward: goForward,
-    canGo: canGo,
-    block: block,
-    listen: listen
-  };
-  return history;
-}
-
-
-
-
-/***/ }),
-
-/***/ 8679:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var reactIs = __webpack_require__(59864);
-
-/**
- * Copyright 2015, Yahoo! Inc.
- * Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
- */
-var REACT_STATICS = {
-  childContextTypes: true,
-  contextType: true,
-  contextTypes: true,
-  defaultProps: true,
-  displayName: true,
-  getDefaultProps: true,
-  getDerivedStateFromError: true,
-  getDerivedStateFromProps: true,
-  mixins: true,
-  propTypes: true,
-  type: true
-};
-var KNOWN_STATICS = {
-  name: true,
-  length: true,
-  prototype: true,
-  caller: true,
-  callee: true,
-  arguments: true,
-  arity: true
-};
-var FORWARD_REF_STATICS = {
-  '$$typeof': true,
-  render: true,
-  defaultProps: true,
-  displayName: true,
-  propTypes: true
-};
-var MEMO_STATICS = {
-  '$$typeof': true,
-  compare: true,
-  defaultProps: true,
-  displayName: true,
-  propTypes: true,
-  type: true
-};
-var TYPE_STATICS = {};
-TYPE_STATICS[reactIs.ForwardRef] = FORWARD_REF_STATICS;
-TYPE_STATICS[reactIs.Memo] = MEMO_STATICS;
-
-function getStatics(component) {
-  // React v16.11 and below
-  if (reactIs.isMemo(component)) {
-    return MEMO_STATICS;
-  } // React v16.12 and above
-
-
-  return TYPE_STATICS[component['$$typeof']] || REACT_STATICS;
-}
-
-var defineProperty = Object.defineProperty;
-var getOwnPropertyNames = Object.getOwnPropertyNames;
-var getOwnPropertySymbols = Object.getOwnPropertySymbols;
-var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
-var getPrototypeOf = Object.getPrototypeOf;
-var objectPrototype = Object.prototype;
-function hoistNonReactStatics(targetComponent, sourceComponent, blacklist) {
-  if (typeof sourceComponent !== 'string') {
-    // don't hoist over string (html) components
-    if (objectPrototype) {
-      var inheritedComponent = getPrototypeOf(sourceComponent);
-
-      if (inheritedComponent && inheritedComponent !== objectPrototype) {
-        hoistNonReactStatics(targetComponent, inheritedComponent, blacklist);
-      }
-    }
-
-    var keys = getOwnPropertyNames(sourceComponent);
-
-    if (getOwnPropertySymbols) {
-      keys = keys.concat(getOwnPropertySymbols(sourceComponent));
-    }
-
-    var targetStatics = getStatics(targetComponent);
-    var sourceStatics = getStatics(sourceComponent);
-
-    for (var i = 0; i < keys.length; ++i) {
-      var key = keys[i];
-
-      if (!KNOWN_STATICS[key] && !(blacklist && blacklist[key]) && !(sourceStatics && sourceStatics[key]) && !(targetStatics && targetStatics[key])) {
-        var descriptor = getOwnPropertyDescriptor(sourceComponent, key);
-
-        try {
-          // Avoid failures from read-only properties
-          defineProperty(targetComponent, key, descriptor);
-        } catch (e) {}
-      }
-    }
-  }
-
-  return targetComponent;
-}
-
-module.exports = hoistNonReactStatics;
-
-
-/***/ }),
-
-/***/ 85110:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-
-var CleanCSS = __webpack_require__(99039);
-var decode = (__webpack_require__(86492).decode);
-var HTMLParser = (__webpack_require__(56337)/* .HTMLParser */ .Ji);
-var endTag = (__webpack_require__(56337)/* .endTag */ .r7);
-var RelateUrl = __webpack_require__(87961);
-var TokenChain = __webpack_require__(12564);
-var Terser = __webpack_require__(34950);
-var utils = __webpack_require__(84402);
-
-function trimWhitespace(str) {
-  return str && str.replace(/^[ \n\r\t\f]+/, '').replace(/[ \n\r\t\f]+$/, '');
-}
-
-function collapseWhitespaceAll(str) {
-  // Non-breaking space is specifically handled inside the replacer function here:
-  return str && str.replace(/[ \n\r\t\f\xA0]+/g, function(spaces) {
-    return spaces === '\t' ? '\t' : spaces.replace(/(^|\xA0+)[^\xA0]+/g, '$1 ');
-  });
-}
-
-function collapseWhitespace(str, options, trimLeft, trimRight, collapseAll) {
-  var lineBreakBefore = '', lineBreakAfter = '';
-
-  if (options.preserveLineBreaks) {
-    str = str.replace(/^[ \n\r\t\f]*?[\n\r][ \n\r\t\f]*/, function() {
-      lineBreakBefore = '\n';
-      return '';
-    }).replace(/[ \n\r\t\f]*?[\n\r][ \n\r\t\f]*$/, function() {
-      lineBreakAfter = '\n';
-      return '';
-    });
-  }
-
-  if (trimLeft) {
-    // Non-breaking space is specifically handled inside the replacer function here:
-    str = str.replace(/^[ \n\r\t\f\xA0]+/, function(spaces) {
-      var conservative = !lineBreakBefore && options.conservativeCollapse;
-      if (conservative && spaces === '\t') {
-        return '\t';
-      }
-      return spaces.replace(/^[^\xA0]+/, '').replace(/(\xA0+)[^\xA0]+/g, '$1 ') || (conservative ? ' ' : '');
-    });
-  }
-
-  if (trimRight) {
-    // Non-breaking space is specifically handled inside the replacer function here:
-    str = str.replace(/[ \n\r\t\f\xA0]+$/, function(spaces) {
-      var conservative = !lineBreakAfter && options.conservativeCollapse;
-      if (conservative && spaces === '\t') {
-        return '\t';
-      }
-      return spaces.replace(/[^\xA0]+(\xA0+)/g, ' $1').replace(/[^\xA0]+$/, '') || (conservative ? ' ' : '');
-    });
-  }
-
-  if (collapseAll) {
-    // strip non space whitespace then compress spaces to one
-    str = collapseWhitespaceAll(str);
-  }
-
-  return lineBreakBefore + str + lineBreakAfter;
-}
-
-var createMapFromString = utils.createMapFromString;
-// non-empty tags that will maintain whitespace around them
-var inlineTags = createMapFromString('a,abbr,acronym,b,bdi,bdo,big,button,cite,code,del,dfn,em,font,i,ins,kbd,label,mark,math,nobr,object,q,rp,rt,rtc,ruby,s,samp,select,small,span,strike,strong,sub,sup,svg,textarea,time,tt,u,var');
-// non-empty tags that will maintain whitespace within them
-var inlineTextTags = createMapFromString('a,abbr,acronym,b,big,del,em,font,i,ins,kbd,mark,nobr,rp,s,samp,small,span,strike,strong,sub,sup,time,tt,u,var');
-// self-closing tags that will maintain whitespace around them
-var selfClosingInlineTags = createMapFromString('comment,img,input,wbr');
-
-function collapseWhitespaceSmart(str, prevTag, nextTag, options) {
-  var trimLeft = prevTag && !selfClosingInlineTags(prevTag);
-  if (trimLeft && !options.collapseInlineTagWhitespace) {
-    trimLeft = prevTag.charAt(0) === '/' ? !inlineTags(prevTag.slice(1)) : !inlineTextTags(prevTag);
-  }
-  var trimRight = nextTag && !selfClosingInlineTags(nextTag);
-  if (trimRight && !options.collapseInlineTagWhitespace) {
-    trimRight = nextTag.charAt(0) === '/' ? !inlineTextTags(nextTag.slice(1)) : !inlineTags(nextTag);
-  }
-  return collapseWhitespace(str, options, trimLeft, trimRight, prevTag && nextTag);
-}
-
-function isConditionalComment(text) {
-  return /^\[if\s[^\]]+]|\[endif]$/.test(text);
-}
-
-function isIgnoredComment(text, options) {
-  for (var i = 0, len = options.ignoreCustomComments.length; i < len; i++) {
-    if (options.ignoreCustomComments[i].test(text)) {
-      return true;
-    }
-  }
-  return false;
-}
-
-function isEventAttribute(attrName, options) {
-  var patterns = options.customEventAttributes;
-  if (patterns) {
-    for (var i = patterns.length; i--;) {
-      if (patterns[i].test(attrName)) {
-        return true;
-      }
-    }
-    return false;
-  }
-  return /^on[a-z]{3,}$/.test(attrName);
-}
-
-function canRemoveAttributeQuotes(value) {
-  // https://mathiasbynens.be/notes/unquoted-attribute-values
-  return /^[^ \t\n\f\r"'`=<>]+$/.test(value);
-}
-
-function attributesInclude(attributes, attribute) {
-  for (var i = attributes.length; i--;) {
-    if (attributes[i].name.toLowerCase() === attribute) {
-      return true;
-    }
-  }
-  return false;
-}
-
-function isAttributeRedundant(tag, attrName, attrValue, attrs) {
-  attrValue = attrValue ? trimWhitespace(attrValue.toLowerCase()) : '';
-
-  return (
-    tag === 'script' &&
-    attrName === 'language' &&
-    attrValue === 'javascript' ||
-
-    tag === 'form' &&
-    attrName === 'method' &&
-    attrValue === 'get' ||
-
-    tag === 'input' &&
-    attrName === 'type' &&
-    attrValue === 'text' ||
-
-    tag === 'script' &&
-    attrName === 'charset' &&
-    !attributesInclude(attrs, 'src') ||
-
-    tag === 'a' &&
-    attrName === 'name' &&
-    attributesInclude(attrs, 'id') ||
-
-    tag === 'area' &&
-    attrName === 'shape' &&
-    attrValue === 'rect'
-  );
-}
-
-// https://mathiasbynens.be/demo/javascript-mime-type
-// https://developer.mozilla.org/en/docs/Web/HTML/Element/script#attr-type
-var executableScriptsMimetypes = utils.createMap([
-  'text/javascript',
-  'text/ecmascript',
-  'text/jscript',
-  'application/javascript',
-  'application/x-javascript',
-  'application/ecmascript',
-  'module'
-]);
-
-var keepScriptsMimetypes = utils.createMap([
-  'module'
-]);
-
-function isScriptTypeAttribute(attrValue) {
-  attrValue = trimWhitespace(attrValue.split(/;/, 2)[0]).toLowerCase();
-  return attrValue === '' || executableScriptsMimetypes(attrValue);
-}
-
-function keepScriptTypeAttribute(attrValue) {
-  attrValue = trimWhitespace(attrValue.split(/;/, 2)[0]).toLowerCase();
-  return keepScriptsMimetypes(attrValue);
-}
-
-function isExecutableScript(tag, attrs) {
-  if (tag !== 'script') {
-    return false;
-  }
-  for (var i = 0, len = attrs.length; i < len; i++) {
-    var attrName = attrs[i].name.toLowerCase();
-    if (attrName === 'type') {
-      return isScriptTypeAttribute(attrs[i].value);
-    }
-  }
-  return true;
-}
-
-function isStyleLinkTypeAttribute(attrValue) {
-  attrValue = trimWhitespace(attrValue).toLowerCase();
-  return attrValue === '' || attrValue === 'text/css';
-}
-
-function isStyleSheet(tag, attrs) {
-  if (tag !== 'style') {
-    return false;
-  }
-  for (var i = 0, len = attrs.length; i < len; i++) {
-    var attrName = attrs[i].name.toLowerCase();
-    if (attrName === 'type') {
-      return isStyleLinkTypeAttribute(attrs[i].value);
-    }
-  }
-  return true;
-}
-
-var isSimpleBoolean = createMapFromString('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,truespeed,typemustmatch,visible');
-var isBooleanValue = createMapFromString('true,false');
-
-function isBooleanAttribute(attrName, attrValue) {
-  return isSimpleBoolean(attrName) || attrName === 'draggable' && !isBooleanValue(attrValue);
-}
-
-function isUriTypeAttribute(attrName, tag) {
-  return (
-    /^(?:a|area|link|base)$/.test(tag) && attrName === 'href' ||
-    tag === 'img' && /^(?:src|longdesc|usemap)$/.test(attrName) ||
-    tag === 'object' && /^(?:classid|codebase|data|usemap)$/.test(attrName) ||
-    tag === 'q' && attrName === 'cite' ||
-    tag === 'blockquote' && attrName === 'cite' ||
-    (tag === 'ins' || tag === 'del') && attrName === 'cite' ||
-    tag === 'form' && attrName === 'action' ||
-    tag === 'input' && (attrName === 'src' || attrName === 'usemap') ||
-    tag === 'head' && attrName === 'profile' ||
-    tag === 'script' && (attrName === 'src' || attrName === 'for')
-  );
-}
-
-function isNumberTypeAttribute(attrName, tag) {
-  return (
-    /^(?:a|area|object|button)$/.test(tag) && attrName === 'tabindex' ||
-    tag === 'input' && (attrName === 'maxlength' || attrName === 'tabindex') ||
-    tag === 'select' && (attrName === 'size' || attrName === 'tabindex') ||
-    tag === 'textarea' && /^(?:rows|cols|tabindex)$/.test(attrName) ||
-    tag === 'colgroup' && attrName === 'span' ||
-    tag === 'col' && attrName === 'span' ||
-    (tag === 'th' || tag === 'td') && (attrName === 'rowspan' || attrName === 'colspan')
-  );
-}
-
-function isLinkType(tag, attrs, value) {
-  if (tag !== 'link') {
-    return false;
-  }
-  for (var i = 0, len = attrs.length; i < len; i++) {
-    if (attrs[i].name === 'rel' && attrs[i].value === value) {
-      return true;
-    }
-  }
-}
-
-function isMediaQuery(tag, attrs, attrName) {
-  return attrName === 'media' && (isLinkType(tag, attrs, 'stylesheet') || isStyleSheet(tag, attrs));
-}
-
-var srcsetTags = createMapFromString('img,source');
-
-function isSrcset(attrName, tag) {
-  return attrName === 'srcset' && srcsetTags(tag);
-}
-
-async function cleanAttributeValue(tag, attrName, attrValue, options, attrs) {
-  if (isEventAttribute(attrName, options)) {
-    attrValue = trimWhitespace(attrValue).replace(/^javascript:\s*/i, '');
-    return await options.minifyJS(attrValue, true);
-  }
-  else if (attrName === 'class') {
-    attrValue = trimWhitespace(attrValue);
-    if (options.sortClassName) {
-      attrValue = options.sortClassName(attrValue);
-    }
-    else {
-      attrValue = collapseWhitespaceAll(attrValue);
-    }
-    return attrValue;
-  }
-  else if (isUriTypeAttribute(attrName, tag)) {
-    attrValue = trimWhitespace(attrValue);
-    return isLinkType(tag, attrs, 'canonical') ? attrValue : options.minifyURLs(attrValue);
-  }
-  else if (isNumberTypeAttribute(attrName, tag)) {
-    return trimWhitespace(attrValue);
-  }
-  else if (attrName === 'style') {
-    attrValue = trimWhitespace(attrValue);
-    if (attrValue) {
-      if (/;$/.test(attrValue) && !/&#?[0-9a-zA-Z]+;$/.test(attrValue)) {
-        attrValue = attrValue.replace(/\s*;$/, ';');
-      }
-      attrValue = options.minifyCSS(attrValue, 'inline');
-    }
-    return attrValue;
-  }
-  else if (isSrcset(attrName, tag)) {
-    // https://html.spec.whatwg.org/multipage/embedded-content.html#attr-img-srcset
-    attrValue = trimWhitespace(attrValue).split(/\s+,\s*|\s*,\s+/).map(function(candidate) {
-      var url = candidate;
-      var descriptor = '';
-      var match = candidate.match(/\s+([1-9][0-9]*w|[0-9]+(?:\.[0-9]+)?x)$/);
-      if (match) {
-        url = url.slice(0, -match[0].length);
-        var num = +match[1].slice(0, -1);
-        var suffix = match[1].slice(-1);
-        if (num !== 1 || suffix !== 'x') {
-          descriptor = ' ' + num + suffix;
-        }
-      }
-      return options.minifyURLs(url) + descriptor;
-    }).join(', ');
-  }
-  else if (isMetaViewport(tag, attrs) && attrName === 'content') {
-    attrValue = attrValue.replace(/\s+/g, '').replace(/[0-9]+\.[0-9]+/g, function(numString) {
-      // "0.90000" -> "0.9"
-      // "1.0" -> "1"
-      // "1.0001" -> "1.0001" (unchanged)
-      return (+numString).toString();
-    });
-  }
-  else if (isContentSecurityPolicy(tag, attrs) && attrName.toLowerCase() === 'content') {
-    return collapseWhitespaceAll(attrValue);
-  }
-  else if (options.customAttrCollapse && options.customAttrCollapse.test(attrName)) {
-    attrValue = trimWhitespace(attrValue.replace(/ ?[\n\r]+ ?/g, '').replace(/\s{2,}/g, options.conservativeCollapse ? ' ' : ''));
-  }
-  else if (tag === 'script' && attrName === 'type') {
-    attrValue = trimWhitespace(attrValue.replace(/\s*;\s*/g, ';'));
-  }
-  else if (isMediaQuery(tag, attrs, attrName)) {
-    attrValue = trimWhitespace(attrValue);
-    return options.minifyCSS(attrValue, 'media');
-  }
-  return attrValue;
-}
-
-function isMetaViewport(tag, attrs) {
-  if (tag !== 'meta') {
-    return false;
-  }
-  for (var i = 0, len = attrs.length; i < len; i++) {
-    if (attrs[i].name === 'name' && attrs[i].value === 'viewport') {
-      return true;
-    }
-  }
-}
-
-function isContentSecurityPolicy(tag, attrs) {
-  if (tag !== 'meta') {
-    return false;
-  }
-  for (var i = 0, len = attrs.length; i < len; i++) {
-    if (attrs[i].name.toLowerCase() === 'http-equiv' && attrs[i].value.toLowerCase() === 'content-security-policy') {
-      return true;
-    }
-  }
-}
-
-function ignoreCSS(id) {
-  return '/* clean-css ignore:start */' + id + '/* clean-css ignore:end */';
-}
-
-// Wrap CSS declarations for CleanCSS > 3.x
-// See https://github.com/jakubpawlowicz/clean-css/issues/418
-function wrapCSS(text, type) {
-  switch (type) {
-    case 'inline':
-      return '*{' + text + '}';
-    case 'media':
-      return '@media ' + text + '{a{top:0}}';
-    default:
-      return text;
-  }
-}
-
-function unwrapCSS(text, type) {
-  var matches;
-  switch (type) {
-    case 'inline':
-      matches = text.match(/^\*\{([\s\S]*)\}$/);
-      break;
-    case 'media':
-      matches = text.match(/^@media ([\s\S]*?)\s*{[\s\S]*}$/);
-      break;
-  }
-  return matches ? matches[1] : text;
-}
-
-async function cleanConditionalComment(comment, options) {
-  return options.processConditionalComments ? await utils.replaceAsync(comment, /^(\[if\s[^\]]+]>)([\s\S]*?)(<!\[endif])$/, async function(match, prefix, text, suffix) {
-    return prefix + await minify(text, options, true) + suffix;
-  }) : comment;
-}
-
-async function processScript(text, options, currentAttrs) {
-  for (var i = 0, len = currentAttrs.length; i < len; i++) {
-    if (currentAttrs[i].name.toLowerCase() === 'type' &&
-        options.processScripts.indexOf(currentAttrs[i].value) > -1) {
-      return await minify(text, options);
-    }
-  }
-  return text;
-}
-
-// Tag omission rules from https://html.spec.whatwg.org/multipage/syntax.html#optional-tags
-// with the following deviations:
-// - retain <body> if followed by <noscript>
-// - </rb>, </rt>, </rtc>, </rp> & </tfoot> follow https://www.w3.org/TR/html5/syntax.html#optional-tags
-// - retain all tags which are adjacent to non-standard HTML tags
-var optionalStartTags = createMapFromString('html,head,body,colgroup,tbody');
-var optionalEndTags = createMapFromString('html,head,body,li,dt,dd,p,rb,rt,rtc,rp,optgroup,option,colgroup,caption,thead,tbody,tfoot,tr,td,th');
-var headerTags = createMapFromString('meta,link,script,style,template,noscript');
-var descriptionTags = createMapFromString('dt,dd');
-var pBlockTags = createMapFromString('address,article,aside,blockquote,details,div,dl,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,header,hgroup,hr,main,menu,nav,ol,p,pre,section,table,ul');
-var pInlineTags = createMapFromString('a,audio,del,ins,map,noscript,video');
-var rubyTags = createMapFromString('rb,rt,rtc,rp');
-var rtcTag = createMapFromString('rb,rtc,rp');
-var optionTag = createMapFromString('option,optgroup');
-var tableContentTags = createMapFromString('tbody,tfoot');
-var tableSectionTags = createMapFromString('thead,tbody,tfoot');
-var cellTags = createMapFromString('td,th');
-var topLevelTags = createMapFromString('html,head,body');
-var compactTags = createMapFromString('html,body');
-var looseTags = createMapFromString('head,colgroup,caption');
-var trailingTags = createMapFromString('dt,thead');
-var htmlTags = createMapFromString('a,abbr,acronym,address,applet,area,article,aside,audio,b,base,basefont,bdi,bdo,bgsound,big,blink,blockquote,body,br,button,canvas,caption,center,cite,code,col,colgroup,command,content,data,datalist,dd,del,details,dfn,dialog,dir,div,dl,dt,element,em,embed,fieldset,figcaption,figure,font,footer,form,frame,frameset,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,i,iframe,image,img,input,ins,isindex,kbd,keygen,label,legend,li,link,listing,main,map,mark,marquee,menu,menuitem,meta,meter,multicol,nav,nobr,noembed,noframes,noscript,object,ol,optgroup,option,output,p,param,picture,plaintext,pre,progress,q,rb,rp,rt,rtc,ruby,s,samp,script,section,select,shadow,small,source,spacer,span,strike,strong,style,sub,summary,sup,table,tbody,td,template,textarea,tfoot,th,thead,time,title,tr,track,tt,u,ul,var,video,wbr,xmp');
-
-function canRemoveParentTag(optionalStartTag, tag) {
-  switch (optionalStartTag) {
-    case 'html':
-    case 'head':
-      return true;
-    case 'body':
-      return !headerTags(tag);
-    case 'colgroup':
-      return tag === 'col';
-    case 'tbody':
-      return tag === 'tr';
-  }
-  return false;
-}
-
-function isStartTagMandatory(optionalEndTag, tag) {
-  switch (tag) {
-    case 'colgroup':
-      return optionalEndTag === 'colgroup';
-    case 'tbody':
-      return tableSectionTags(optionalEndTag);
-  }
-  return false;
-}
-
-function canRemovePrecedingTag(optionalEndTag, tag) {
-  switch (optionalEndTag) {
-    case 'html':
-    case 'head':
-    case 'body':
-    case 'colgroup':
-    case 'caption':
-      return true;
-    case 'li':
-    case 'optgroup':
-    case 'tr':
-      return tag === optionalEndTag;
-    case 'dt':
-    case 'dd':
-      return descriptionTags(tag);
-    case 'p':
-      return pBlockTags(tag);
-    case 'rb':
-    case 'rt':
-    case 'rp':
-      return rubyTags(tag);
-    case 'rtc':
-      return rtcTag(tag);
-    case 'option':
-      return optionTag(tag);
-    case 'thead':
-    case 'tbody':
-      return tableContentTags(tag);
-    case 'tfoot':
-      return tag === 'tbody';
-    case 'td':
-    case 'th':
-      return cellTags(tag);
-  }
-  return false;
-}
-
-var reEmptyAttribute = new RegExp(
-  '^(?:class|id|style|title|lang|dir|on(?:focus|blur|change|click|dblclick|mouse(' +
-    '?:down|up|over|move|out)|key(?:press|down|up)))$');
-
-function canDeleteEmptyAttribute(tag, attrName, attrValue, options) {
-  var isValueEmpty = !attrValue || /^\s*$/.test(attrValue);
-  if (!isValueEmpty) {
-    return false;
-  }
-  if (typeof options.removeEmptyAttributes === 'function') {
-    return options.removeEmptyAttributes(attrName, tag);
-  }
-  return tag === 'input' && attrName === 'value' || reEmptyAttribute.test(attrName);
-}
-
-function hasAttrName(name, attrs) {
-  for (var i = attrs.length - 1; i >= 0; i--) {
-    if (attrs[i].name === name) {
-      return true;
-    }
-  }
-  return false;
-}
-
-function canRemoveElement(tag, attrs) {
-  switch (tag) {
-    case 'textarea':
-      return false;
-    case 'audio':
-    case 'script':
-    case 'video':
-      if (hasAttrName('src', attrs)) {
-        return false;
-      }
-      break;
-    case 'iframe':
-      if (hasAttrName('src', attrs) || hasAttrName('srcdoc', attrs)) {
-        return false;
-      }
-      break;
-    case 'object':
-      if (hasAttrName('data', attrs)) {
-        return false;
-      }
-      break;
-    case 'applet':
-      if (hasAttrName('code', attrs)) {
-        return false;
-      }
-      break;
-  }
-  return true;
-}
-
-function canCollapseWhitespace(tag) {
-  return !/^(?:script|style|pre|textarea)$/.test(tag);
-}
-
-function canTrimWhitespace(tag) {
-  return !/^(?:pre|textarea)$/.test(tag);
-}
-
-async function normalizeAttr(attr, attrs, tag, options) {
-  var attrName = options.name(attr.name),
-      attrValue = attr.value;
-
-  if (options.decodeEntities && attrValue) {
-    attrValue = decode(attrValue, { isAttributeValue: true });
-  }
-
-  if (options.removeRedundantAttributes &&
-    isAttributeRedundant(tag, attrName, attrValue, attrs) ||
-    options.removeScriptTypeAttributes && tag === 'script' &&
-    attrName === 'type' && isScriptTypeAttribute(attrValue) && !keepScriptTypeAttribute(attrValue) ||
-    options.removeStyleLinkTypeAttributes && (tag === 'style' || tag === 'link') &&
-    attrName === 'type' && isStyleLinkTypeAttribute(attrValue)) {
-    return;
-  }
-
-  if (attrValue) {
-    attrValue = await cleanAttributeValue(tag, attrName, attrValue, options, attrs);
-  }
-
-  if (options.removeEmptyAttributes &&
-      canDeleteEmptyAttribute(tag, attrName, attrValue, options)) {
-    return;
-  }
-
-  if (options.decodeEntities && attrValue) {
-    attrValue = attrValue.replace(/&(#?[0-9a-zA-Z]+;)/g, '&$1');
-  }
-
-  return {
-    attr: attr,
-    name: attrName,
-    value: attrValue
-  };
-}
-
-function buildAttr(normalized, hasUnarySlash, options, isLast, uidAttr) {
-  var attrName = normalized.name,
-      attrValue = normalized.value,
-      attr = normalized.attr,
-      attrQuote = attr.quote,
-      attrFragment,
-      emittedAttrValue;
-
-  if (typeof attrValue !== 'undefined' && (!options.removeAttributeQuotes ||
-      ~attrValue.indexOf(uidAttr) || !canRemoveAttributeQuotes(attrValue))) {
-    if (!options.preventAttributesEscaping) {
-      if (typeof options.quoteCharacter === 'undefined') {
-        var apos = (attrValue.match(/'/g) || []).length;
-        var quot = (attrValue.match(/"/g) || []).length;
-        attrQuote = apos < quot ? '\'' : '"';
-      }
-      else {
-        attrQuote = options.quoteCharacter === '\'' ? '\'' : '"';
-      }
-      if (attrQuote === '"') {
-        attrValue = attrValue.replace(/"/g, '"');
-      }
-      else {
-        attrValue = attrValue.replace(/'/g, ''');
-      }
-    }
-    emittedAttrValue = attrQuote + attrValue + attrQuote;
-    if (!isLast && !options.removeTagWhitespace) {
-      emittedAttrValue += ' ';
-    }
-  }
-  // make sure trailing slash is not interpreted as HTML self-closing tag
-  else if (isLast && !hasUnarySlash && !/\/$/.test(attrValue)) {
-    emittedAttrValue = attrValue;
-  }
-  else {
-    emittedAttrValue = attrValue + ' ';
-  }
-
-  if (typeof attrValue === 'undefined' || options.collapseBooleanAttributes &&
-      isBooleanAttribute(attrName.toLowerCase(), attrValue.toLowerCase())) {
-    attrFragment = attrName;
-    if (!isLast) {
-      attrFragment += ' ';
-    }
-  }
-  else {
-    attrFragment = attrName + attr.customAssign + emittedAttrValue;
-  }
-
-  return attr.customOpen + attrFragment + attr.customClose;
-}
-
-function identity(value) {
-  return value;
-}
-
-function processOptions(values) {
-  var options = {
-    name: function(name) {
-      return name.toLowerCase();
-    },
-    canCollapseWhitespace: canCollapseWhitespace,
-    canTrimWhitespace: canTrimWhitespace,
-    html5: true,
-    ignoreCustomComments: [
-      /^!/,
-      /^\s*#/
-    ],
-    ignoreCustomFragments: [
-      /<%[\s\S]*?%>/,
-      /<\?[\s\S]*?\?>/
-    ],
-    includeAutoGeneratedTags: true,
-    log: identity,
-    minifyCSS: identity,
-    minifyJS: identity,
-    minifyURLs: identity
-  };
-  Object.keys(values).forEach(function(key) {
-    var value = values[key];
-    if (key === 'caseSensitive') {
-      if (value) {
-        options.name = identity;
-      }
-    }
-    else if (key === 'log') {
-      if (typeof value === 'function') {
-        options.log = value;
-      }
-    }
-    else if (key === 'minifyCSS' && typeof value !== 'function') {
-      if (!value) {
-        return;
-      }
-      if (typeof value !== 'object') {
-        value = {};
-      }
-      options.minifyCSS = function(text, type) {
-        text = text.replace(/(url\s*\(\s*)("|'|)(.*?)\2(\s*\))/ig, function(match, prefix, quote, url, suffix) {
-          return prefix + quote + options.minifyURLs(url) + quote + suffix;
-        });
-        var cleanCssOutput = new CleanCSS(value).minify(wrapCSS(text, type));
-        if (cleanCssOutput.errors.length > 0) {
-          cleanCssOutput.errors.forEach(options.log);
-          return text;
-        }
-        return unwrapCSS(cleanCssOutput.styles, type);
-      };
-    }
-    else if (key === 'minifyJS' && typeof value !== 'function') {
-      if (!value) {
-        return;
-      }
-      if (typeof value !== 'object') {
-        value = {};
-      }
-      (value.parse || (value.parse = {})).bare_returns = false;
-      options.minifyJS = async function(text, inline) {
-        var start = text.match(/^\s*<!--.*/);
-        var code = start ? text.slice(start[0].length).replace(/\n\s*-->\s*$/, '') : text;
-        value.parse.bare_returns = inline;
-        try {
-          const result = await Terser.minify(code, value);
-          return result.code.replace(/;$/, '');
-        }
-        catch (error) {
-          options.log(error);
-          return text;
-        }
-      };
-    }
-    else if (key === 'minifyURLs' && typeof value !== 'function') {
-      if (!value) {
-        return;
-      }
-      if (typeof value === 'string') {
-        value = { site: value };
-      }
-      else if (typeof value !== 'object') {
-        value = {};
-      }
-      options.minifyURLs = function(text) {
-        try {
-          return RelateUrl.relate(text, value);
-        }
-        catch (err) {
-          options.log(err);
-          return text;
-        }
-      };
-    }
-    else {
-      options[key] = value;
-    }
-  });
-  return options;
-}
-
-function uniqueId(value) {
-  var id;
-  do {
-    id = Math.random().toString(36).replace(/^0\.[0-9]*/, '');
-  } while (~value.indexOf(id));
-  return id;
-}
-
-var specialContentTags = createMapFromString('script,style');
-
-async function createSortFns(value, options, uidIgnore, uidAttr) {
-  var attrChains = options.sortAttributes && Object.create(null);
-  var classChain = options.sortClassName && new TokenChain();
-
-  function attrNames(attrs) {
-    return attrs.map(function(attr) {
-      return options.name(attr.name);
-    });
-  }
-
-  function shouldSkipUID(token, uid) {
-    return !uid || token.indexOf(uid) === -1;
-  }
-
-  function shouldSkipUIDs(token) {
-    return shouldSkipUID(token, uidIgnore) && shouldSkipUID(token, uidAttr);
-  }
-
-  async function scan(input) {
-    var currentTag, currentType;
-    const parser = new HTMLParser(input, {
-      start: function(tag, attrs) {
-        if (attrChains) {
-          if (!attrChains[tag]) {
-            attrChains[tag] = new TokenChain();
-          }
-          attrChains[tag].add(attrNames(attrs).filter(shouldSkipUIDs));
-        }
-        for (var i = 0, len = attrs.length; i < len; i++) {
-          var attr = attrs[i];
-          if (classChain && attr.value && options.name(attr.name) === 'class') {
-            classChain.add(trimWhitespace(attr.value).split(/[ \t\n\f\r]+/).filter(shouldSkipUIDs));
-          }
-          else if (options.processScripts && attr.name.toLowerCase() === 'type') {
-            currentTag = tag;
-            currentType = attr.value;
-          }
-        }
-      },
-      end: function() {
-        currentTag = '';
-      },
-      chars: async function(text) {
-        if (options.processScripts && specialContentTags(currentTag) &&
-            options.processScripts.indexOf(currentType) > -1) {
-          await scan(text);
-        }
-      }
-    });
-
-    await parser.parse();
-  }
-
-  var log = options.log;
-  options.log = identity;
-  options.sortAttributes = false;
-  options.sortClassName = false;
-  await scan(await minify(value, options));
-  options.log = log;
-  if (attrChains) {
-    var attrSorters = Object.create(null);
-    for (var tag in attrChains) {
-      attrSorters[tag] = attrChains[tag].createSorter();
-    }
-    options.sortAttributes = function(tag, attrs) {
-      var sorter = attrSorters[tag];
-      if (sorter) {
-        var attrMap = Object.create(null);
-        var names = attrNames(attrs);
-        names.forEach(function(name, index) {
-          (attrMap[name] || (attrMap[name] = [])).push(attrs[index]);
-        });
-        sorter.sort(names).forEach(function(name, index) {
-          attrs[index] = attrMap[name].shift();
-        });
-      }
-    };
-  }
-  if (classChain) {
-    var sorter = classChain.createSorter();
-    options.sortClassName = function(value) {
-      return sorter.sort(value.split(/[ \n\f\r]+/)).join(' ');
-    };
-  }
-}
-
-async function minify(value, options, partialMarkup) {
-  if (options.collapseWhitespace) {
-    value = collapseWhitespace(value, options, true, true);
-  }
-
-  var buffer = [],
-      charsPrevTag,
-      currentChars = '',
-      hasChars,
-      currentTag = '',
-      currentAttrs = [],
-      stackNoTrimWhitespace = [],
-      stackNoCollapseWhitespace = [],
-      optionalStartTag = '',
-      optionalEndTag = '',
-      ignoredMarkupChunks = [],
-      ignoredCustomMarkupChunks = [],
-      uidIgnore,
-      uidAttr,
-      uidPattern;
-
-  // temporarily replace ignored chunks with comments,
-  // so that we don't have to worry what's there.
-  // for all we care there might be
-  // completely-horribly-broken-alien-non-html-emoj-cthulhu-filled content
-  value = value.replace(/<!-- htmlmin:ignore -->([\s\S]*?)<!-- htmlmin:ignore -->/g, function(match, group1) {
-    if (!uidIgnore) {
-      uidIgnore = uniqueId(value);
-      var pattern = new RegExp('^' + uidIgnore + '([0-9]+)$');
-      if (options.ignoreCustomComments) {
-        options.ignoreCustomComments = options.ignoreCustomComments.slice();
-      }
-      else {
-        options.ignoreCustomComments = [];
-      }
-      options.ignoreCustomComments.push(pattern);
-    }
-    var token = '<!--' + uidIgnore + ignoredMarkupChunks.length + '-->';
-    ignoredMarkupChunks.push(group1);
-    return token;
-  });
-
-  var customFragments = options.ignoreCustomFragments.map(function(re) {
-    return re.source;
-  });
-  if (customFragments.length) {
-    var reCustomIgnore = new RegExp('\\s*(?:' + customFragments.join('|') + ')+\\s*', 'g');
-    // temporarily replace custom ignored fragments with unique attributes
-    value = value.replace(reCustomIgnore, function(match) {
-      if (!uidAttr) {
-        uidAttr = uniqueId(value);
-        uidPattern = new RegExp('(\\s*)' + uidAttr + '([0-9]+)' + uidAttr + '(\\s*)', 'g');
-        if (options.minifyCSS) {
-          options.minifyCSS = (function(fn) {
-            return function(text, type) {
-              text = text.replace(uidPattern, function(match, prefix, index) {
-                var chunks = ignoredCustomMarkupChunks[+index];
-                return chunks[1] + uidAttr + index + uidAttr + chunks[2];
-              });
-              var ids = [];
-              new CleanCSS().minify(wrapCSS(text, type)).warnings.forEach(function(warning) {
-                var match = uidPattern.exec(warning);
-                if (match) {
-                  var id = uidAttr + match[2] + uidAttr;
-                  text = text.replace(id, ignoreCSS(id));
-                  ids.push(id);
-                }
-              });
-              text = fn(text, type);
-              ids.forEach(function(id) {
-                text = text.replace(ignoreCSS(id), id);
-              });
-              return text;
-            };
-          })(options.minifyCSS);
-        }
-        if (options.minifyJS) {
-          options.minifyJS = (function(fn) {
-            return function(text, type) {
-              return fn(text.replace(uidPattern, function(match, prefix, index) {
-                var chunks = ignoredCustomMarkupChunks[+index];
-                return chunks[1] + uidAttr + index + uidAttr + chunks[2];
-              }), type);
-            };
-          })(options.minifyJS);
-        }
-      }
-      var token = uidAttr + ignoredCustomMarkupChunks.length + uidAttr;
-      ignoredCustomMarkupChunks.push(/^(\s*)[\s\S]*?(\s*)$/.exec(match));
-      return '\t' + token + '\t';
-    });
-  }
-
-  if (options.sortAttributes && typeof options.sortAttributes !== 'function' ||
-      options.sortClassName && typeof options.sortClassName !== 'function') {
-    await createSortFns(value, options, uidIgnore, uidAttr);
-  }
-
-  function _canCollapseWhitespace(tag, attrs) {
-    return options.canCollapseWhitespace(tag, attrs, canCollapseWhitespace);
-  }
-
-  function _canTrimWhitespace(tag, attrs) {
-    return options.canTrimWhitespace(tag, attrs, canTrimWhitespace);
-  }
-
-  function removeStartTag() {
-    var index = buffer.length - 1;
-    while (index > 0 && !/^<[^/!]/.test(buffer[index])) {
-      index--;
-    }
-    buffer.length = Math.max(0, index);
-  }
-
-  function removeEndTag() {
-    var index = buffer.length - 1;
-    while (index > 0 && !/^<\//.test(buffer[index])) {
-      index--;
-    }
-    buffer.length = Math.max(0, index);
-  }
-
-  // look for trailing whitespaces, bypass any inline tags
-  function trimTrailingWhitespace(index, nextTag) {
-    for (var endTag = null; index >= 0 && _canTrimWhitespace(endTag); index--) {
-      var str = buffer[index];
-      var match = str.match(/^<\/([\w:-]+)>$/);
-      if (match) {
-        endTag = match[1];
-      }
-      else if (/>$/.test(str) || (buffer[index] = collapseWhitespaceSmart(str, null, nextTag, options))) {
-        break;
-      }
-    }
-  }
-
-  // look for trailing whitespaces from previously processed text
-  // which may not be trimmed due to a following comment or an empty
-  // element which has now been removed
-  function squashTrailingWhitespace(nextTag) {
-    var charsIndex = buffer.length - 1;
-    if (buffer.length > 1) {
-      var item = buffer[buffer.length - 1];
-      if (/^(?:<!|$)/.test(item) && item.indexOf(uidIgnore) === -1) {
-        charsIndex--;
-      }
-    }
-    trimTrailingWhitespace(charsIndex, nextTag);
-  }
-
-  const parser = new HTMLParser(value, {
-    partialMarkup: partialMarkup,
-    continueOnParseError: options.continueOnParseError,
-    customAttrAssign: options.customAttrAssign,
-    customAttrSurround: options.customAttrSurround,
-    html5: options.html5,
-
-    start: async function(tag, attrs, unary, unarySlash, autoGenerated) {
-      if (tag.toLowerCase() === 'svg') {
-        options = Object.create(options);
-        options.caseSensitive = true;
-        options.keepClosingSlash = true;
-        options.name = identity;
-      }
-      tag = options.name(tag);
-      currentTag = tag;
-      charsPrevTag = tag;
-      if (!inlineTextTags(tag)) {
-        currentChars = '';
-      }
-      hasChars = false;
-      currentAttrs = attrs;
-
-      var optional = options.removeOptionalTags;
-      if (optional) {
-        var htmlTag = htmlTags(tag);
-        // <html> may be omitted if first thing inside is not comment
-        // <head> may be omitted if first thing inside is an element
-        // <body> may be omitted if first thing inside is not space, comment, <meta>, <link>, <script>, <style> or <template>
-        // <colgroup> may be omitted if first thing inside is <col>
-        // <tbody> may be omitted if first thing inside is <tr>
-        if (htmlTag && canRemoveParentTag(optionalStartTag, tag)) {
-          removeStartTag();
-        }
-        optionalStartTag = '';
-        // end-tag-followed-by-start-tag omission rules
-        if (htmlTag && canRemovePrecedingTag(optionalEndTag, tag)) {
-          removeEndTag();
-          // <colgroup> cannot be omitted if preceding </colgroup> is omitted
-          // <tbody> cannot be omitted if preceding </tbody>, </thead> or </tfoot> is omitted
-          optional = !isStartTagMandatory(optionalEndTag, tag);
-        }
-        optionalEndTag = '';
-      }
-
-      // set whitespace flags for nested tags (eg. <code> within a <pre>)
-      if (options.collapseWhitespace) {
-        if (!stackNoTrimWhitespace.length) {
-          squashTrailingWhitespace(tag);
-        }
-        if (!unary) {
-          if (!_canTrimWhitespace(tag, attrs) || stackNoTrimWhitespace.length) {
-            stackNoTrimWhitespace.push(tag);
-          }
-          if (!_canCollapseWhitespace(tag, attrs) || stackNoCollapseWhitespace.length) {
-            stackNoCollapseWhitespace.push(tag);
-          }
-        }
-      }
-
-      var openTag = '<' + tag;
-      var hasUnarySlash = unarySlash && options.keepClosingSlash;
-
-      buffer.push(openTag);
-
-      if (options.sortAttributes) {
-        options.sortAttributes(tag, attrs);
-      }
-
-      var parts = [];
-      for (var i = attrs.length, isLast = true; --i >= 0;) {
-        var normalized = await normalizeAttr(attrs[i], attrs, tag, options);
-        if (normalized) {
-          parts.unshift(buildAttr(normalized, hasUnarySlash, options, isLast, uidAttr));
-          isLast = false;
-        }
-      }
-      if (parts.length > 0) {
-        buffer.push(' ');
-        buffer.push.apply(buffer, parts);
-      }
-      // start tag must never be omitted if it has any attributes
-      else if (optional && optionalStartTags(tag)) {
-        optionalStartTag = tag;
-      }
-
-      buffer.push(buffer.pop() + (hasUnarySlash ? '/' : '') + '>');
-
-      if (autoGenerated && !options.includeAutoGeneratedTags) {
-        removeStartTag();
-        optionalStartTag = '';
-      }
-    },
-    end: function(tag, attrs, autoGenerated) {
-      if (tag.toLowerCase() === 'svg') {
-        options = Object.getPrototypeOf(options);
-      }
-      tag = options.name(tag);
-
-      // check if current tag is in a whitespace stack
-      if (options.collapseWhitespace) {
-        if (stackNoTrimWhitespace.length) {
-          if (tag === stackNoTrimWhitespace[stackNoTrimWhitespace.length - 1]) {
-            stackNoTrimWhitespace.pop();
-          }
-        }
-        else {
-          squashTrailingWhitespace('/' + tag);
-        }
-        if (stackNoCollapseWhitespace.length &&
-          tag === stackNoCollapseWhitespace[stackNoCollapseWhitespace.length - 1]) {
-          stackNoCollapseWhitespace.pop();
-        }
-      }
-
-      var isElementEmpty = false;
-      if (tag === currentTag) {
-        currentTag = '';
-        isElementEmpty = !hasChars;
-      }
-
-      if (options.removeOptionalTags) {
-        // <html>, <head> or <body> may be omitted if the element is empty
-        if (isElementEmpty && topLevelTags(optionalStartTag)) {
-          removeStartTag();
-        }
-        optionalStartTag = '';
-        // </html> or </body> may be omitted if not followed by comment
-        // </head> may be omitted if not followed by space or comment
-        // </p> may be omitted if no more content in non-</a> parent
-        // except for </dt> or </thead>, end tags may be omitted if no more content in parent element
-        if (htmlTags(tag) && optionalEndTag && !trailingTags(optionalEndTag) && (optionalEndTag !== 'p' || !pInlineTags(tag))) {
-          removeEndTag();
-        }
-        optionalEndTag = optionalEndTags(tag) ? tag : '';
-      }
-
-      if (options.removeEmptyElements && isElementEmpty && canRemoveElement(tag, attrs)) {
-        // remove last "element" from buffer
-        removeStartTag();
-        optionalStartTag = '';
-        optionalEndTag = '';
-      }
-      else {
-        if (autoGenerated && !options.includeAutoGeneratedTags) {
-          optionalEndTag = '';
-        }
-        else {
-          buffer.push('</' + tag + '>');
-        }
-        charsPrevTag = '/' + tag;
-        if (!inlineTags(tag)) {
-          currentChars = '';
-        }
-        else if (isElementEmpty) {
-          currentChars += '|';
-        }
-      }
-    },
-    chars: async function(text, prevTag, nextTag) {
-      prevTag = prevTag === '' ? 'comment' : prevTag;
-      nextTag = nextTag === '' ? 'comment' : nextTag;
-      if (options.decodeEntities && text && !specialContentTags(currentTag)) {
-        text = decode(text);
-      }
-      if (options.collapseWhitespace) {
-        if (!stackNoTrimWhitespace.length) {
-          if (prevTag === 'comment') {
-            var prevComment = buffer[buffer.length - 1];
-            if (prevComment.indexOf(uidIgnore) === -1) {
-              if (!prevComment) {
-                prevTag = charsPrevTag;
-              }
-              if (buffer.length > 1 && (!prevComment || !options.conservativeCollapse && / $/.test(currentChars))) {
-                var charsIndex = buffer.length - 2;
-                buffer[charsIndex] = buffer[charsIndex].replace(/\s+$/, function(trailingSpaces) {
-                  text = trailingSpaces + text;
-                  return '';
-                });
-              }
-            }
-          }
-          if (prevTag) {
-            if (prevTag === '/nobr' || prevTag === 'wbr') {
-              if (/^\s/.test(text)) {
-                var tagIndex = buffer.length - 1;
-                while (tagIndex > 0 && buffer[tagIndex].lastIndexOf('<' + prevTag) !== 0) {
-                  tagIndex--;
-                }
-                trimTrailingWhitespace(tagIndex - 1, 'br');
-              }
-            }
-            else if (inlineTextTags(prevTag.charAt(0) === '/' ? prevTag.slice(1) : prevTag)) {
-              text = collapseWhitespace(text, options, /(?:^|\s)$/.test(currentChars));
-            }
-          }
-          if (prevTag || nextTag) {
-            text = collapseWhitespaceSmart(text, prevTag, nextTag, options);
-          }
-          else {
-            text = collapseWhitespace(text, options, true, true);
-          }
-          if (!text && /\s$/.test(currentChars) && prevTag && prevTag.charAt(0) === '/') {
-            trimTrailingWhitespace(buffer.length - 1, nextTag);
-          }
-        }
-        if (!stackNoCollapseWhitespace.length && nextTag !== 'html' && !(prevTag && nextTag)) {
-          text = collapseWhitespace(text, options, false, false, true);
-        }
-      }
-      if (options.processScripts && specialContentTags(currentTag)) {
-        text = await processScript(text, options, currentAttrs);
-      }
-      if (isExecutableScript(currentTag, currentAttrs)) {
-        text = await options.minifyJS(text);
-      }
-      if (isStyleSheet(currentTag, currentAttrs)) {
-        text = options.minifyCSS(text);
-      }
-      if (options.removeOptionalTags && text) {
-        // <html> may be omitted if first thing inside is not comment
-        // <body> may be omitted if first thing inside is not space, comment, <meta>, <link>, <script>, <style> or <template>
-        if (optionalStartTag === 'html' || optionalStartTag === 'body' && !/^\s/.test(text)) {
-          removeStartTag();
-        }
-        optionalStartTag = '';
-        // </html> or </body> may be omitted if not followed by comment
-        // </head>, </colgroup> or </caption> may be omitted if not followed by space or comment
-        if (compactTags(optionalEndTag) || looseTags(optionalEndTag) && !/^\s/.test(text)) {
-          removeEndTag();
-        }
-        optionalEndTag = '';
-      }
-      charsPrevTag = /^\s*$/.test(text) ? prevTag : 'comment';
-      if (options.decodeEntities && text && !specialContentTags(currentTag)) {
-        // Escape any `&` symbols that start either:
-        // 1) a legacy named character reference (i.e. one that doesn't end with `;`)
-        // 2) or any other character reference (i.e. one that does end with `;`)
-        // Note that `&` can be escaped as `&`, without the semi-colon.
-        // https://mathiasbynens.be/notes/ambiguous-ampersands
-        text = text.replace(/&((?:Iacute|aacute|uacute|plusmn|Otilde|otilde|agrave|Agrave|Yacute|yacute|Oslash|oslash|atilde|Atilde|brvbar|ccedil|Ccedil|Ograve|curren|divide|eacute|Eacute|ograve|Oacute|egrave|Egrave|Ugrave|frac12|frac14|frac34|ugrave|oacute|iacute|Ntilde|ntilde|Uacute|middot|igrave|Igrave|iquest|Aacute|cedil|laquo|micro|iexcl|Icirc|icirc|acirc|Ucirc|Ecirc|ocirc|Ocirc|ecirc|ucirc|Aring|aring|AElig|aelig|acute|pound|raquo|Acirc|times|THORN|szlig|thorn|COPY|auml|ordf|ordm|Uuml|macr|uuml|Auml|ouml|Ouml|para|nbsp|euml|quot|QUOT|Euml|yuml|cent|sect|copy|sup1|sup2|sup3|iuml|Iuml|ETH|shy|reg|not|yen|amp|AMP|REG|uml|eth|deg|gt|GT|LT|lt)(?!;)|(?:#?[0-9a-zA-Z]+;))/g, '&$1').replace(/</g, '<');
-      }
-      if (uidPattern && options.collapseWhitespace && stackNoTrimWhitespace.length) {
-        text = text.replace(uidPattern, function(match, prefix, index) {
-          return ignoredCustomMarkupChunks[+index][0];
-        });
-      }
-      currentChars += text;
-      if (text) {
-        hasChars = true;
-      }
-      buffer.push(text);
-    },
-    comment: async function(text, nonStandard) {
-      var prefix = nonStandard ? '<!' : '<!--';
-      var suffix = nonStandard ? '>' : '-->';
-      if (isConditionalComment(text)) {
-        text = prefix + await cleanConditionalComment(text, options) + suffix;
-      }
-      else if (options.removeComments) {
-        if (isIgnoredComment(text, options)) {
-          text = '<!--' + text + '-->';
-        }
-        else {
-          text = '';
-        }
-      }
-      else {
-        text = prefix + text + suffix;
-      }
-      if (options.removeOptionalTags && text) {
-        // preceding comments suppress tag omissions
-        optionalStartTag = '';
-        optionalEndTag = '';
-      }
-      buffer.push(text);
-    },
-    doctype: function(doctype) {
-      buffer.push(options.useShortDoctype ? '<!doctype' +
-        (options.removeTagWhitespace ? '' : ' ') + 'html>' :
-        collapseWhitespaceAll(doctype));
-    }
-  });
-
-  await parser.parse();
-
-  if (options.removeOptionalTags) {
-    // <html> may be omitted if first thing inside is not comment
-    // <head> or <body> may be omitted if empty
-    if (topLevelTags(optionalStartTag)) {
-      removeStartTag();
-    }
-    // except for </dt> or </thead>, end tags may be omitted if no more content in parent element
-    if (optionalEndTag && !trailingTags(optionalEndTag)) {
-      removeEndTag();
-    }
-  }
-  if (options.collapseWhitespace) {
-    squashTrailingWhitespace('br');
-  }
-
-  return joinResultSegments(buffer, options, uidPattern ? function(str) {
-    return str.replace(uidPattern, function(match, prefix, index, suffix) {
-      var chunk = ignoredCustomMarkupChunks[+index][0];
-      if (options.collapseWhitespace) {
-        if (prefix !== '\t') {
-          chunk = prefix + chunk;
-        }
-        if (suffix !== '\t') {
-          chunk += suffix;
-        }
-        return collapseWhitespace(chunk, {
-          preserveLineBreaks: options.preserveLineBreaks,
-          conservativeCollapse: !options.trimCustomFragments
-        }, /^[ \n\r\t\f]/.test(chunk), /[ \n\r\t\f]$/.test(chunk));
-      }
-      return chunk;
-    });
-  } : identity, uidIgnore ? function(str) {
-    return str.replace(new RegExp('<!--' + uidIgnore + '([0-9]+)-->', 'g'), function(match, index) {
-      return ignoredMarkupChunks[+index];
-    });
-  } : identity);
-}
-
-function joinResultSegments(results, options, restoreCustom, restoreIgnore) {
-  var str;
-  var maxLineLength = options.maxLineLength;
-  var noNewlinesBeforeTagClose = options.noNewlinesBeforeTagClose;
-
-  if (maxLineLength) {
-    var line = '', lines = [];
-    while (results.length) {
-      var len = line.length;
-      var end = results[0].indexOf('\n');
-      var isClosingTag = Boolean(results[0].match(endTag));
-      var shouldKeepSameLine = noNewlinesBeforeTagClose && isClosingTag;
-      if (end < 0) {
-        line += restoreIgnore(restoreCustom(results.shift()));
-      }
-      else {
-        line += restoreIgnore(restoreCustom(results[0].slice(0, end)));
-        results[0] = results[0].slice(end + 1);
-      }
-      if (len > 0 && line.length > maxLineLength && !shouldKeepSameLine) {
-        lines.push(line.slice(0, len));
-        line = line.slice(len);
-      }
-      else if (end >= 0) {
-        lines.push(line);
-        line = '';
-      }
-    }
-    if (line) {
-      lines.push(line);
-    }
-    str = lines.join('\n');
-  }
-  else {
-    str = restoreIgnore(restoreCustom(results.join('')));
-  }
-  return options.collapseWhitespace ? collapseWhitespace(str, options, true, true) : str;
-}
-
-exports.S = async function(value, options) {
-  var start = Date.now();
-  options = processOptions(options || {});
-  var result = await minify(value, options);
-  options.log('minified in: ' + (Date.now() - start) + 'ms');
-  return result;
-};
-
-
-/***/ }),
-
-/***/ 56337:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-var __webpack_unused_export__;
-/*!
- * HTML Parser By John Resig (ejohn.org)
- * Modified by Juriy "kangax" Zaytsev
- * Original code by Erik Arvidsson, Mozilla Public License
- * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js
- */
-
-/*
- * // Use like so:
- * HTMLParser(htmlString, {
- *     start: function(tag, attrs, unary) {},
- *     end: function(tag) {},
- *     chars: function(text) {},
- *     comment: function(text) {}
- * });
- *
- * // or to get an XML string:
- * HTMLtoXML(htmlString);
- *
- * // or to get an XML DOM Document
- * HTMLtoDOM(htmlString);
- *
- * // or to inject into an existing document/DOM node
- * HTMLtoDOM(htmlString, document);
- * HTMLtoDOM(htmlString, document.body);
- *
- */
-
-/* global ActiveXObject, DOMDocument */
-
-
-
-var createMapFromString = (__webpack_require__(84402).createMapFromString);
-var replaceAsync = (__webpack_require__(84402).replaceAsync);
-
-function makeMap(values) {
-  return createMapFromString(values, true);
-}
-
-// Regular Expressions for parsing tags and attributes
-var singleAttrIdentifier = /([^\s"'<>/=]+)/,
-    singleAttrAssigns = [/=/],
-    singleAttrValues = [
-    // attr value double quotes
-      /"([^"]*)"+/.source,
-      // attr value, single quotes
-      /'([^']*)'+/.source,
-      // attr value, no quotes
-      /([^ \t\n\f\r"'`=<>]+)/.source
-    ],
-    // https://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-QName
-    qnameCapture = (function() {
-    // based on https://www.npmjs.com/package/ncname
-      var combiningChar = '\\u0300-\\u0345\\u0360\\u0361\\u0483-\\u0486\\u0591-\\u05A1\\u05A3-\\u05B9\\u05BB-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u064B-\\u0652\\u0670\\u06D6-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0901-\\u0903\\u093C\\u093E-\\u094D\\u0951-\\u0954\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u0A02\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A70\\u0A71\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B43\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B82\\u0B83\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C01-\\u0C03\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C82\\u0C83\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D43\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EB9\\u0EBB\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86-\\u0F8B\\u0F90-\\u0F95\\u0F97\\u0F99-\\u0FAD\\u0FB1-\\u0FB7\\u0FB9\\u20D0-\\u20DC\\u20E1\\u302A-\\u302F\\u3099\\u309A';
-      var digit = '0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE7-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29';
-      var extender = '\\xB7\\u02D0\\u02D1\\u0387\\u0640\\u0E46\\u0EC6\\u3005\\u3031-\\u3035\\u309D\\u309E\\u30FC-\\u30FE';
-      var letter = 'A-Za-z\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u0131\\u0134-\\u013E\\u0141-\\u0148\\u014A-\\u017E\\u0180-\\u01C3\\u01CD-\\u01F0\\u01F4\\u01F5\\u01FA-\\u0217\\u0250-\\u02A8\\u02BB-\\u02C1\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03CE\\u03D0-\\u03D6\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2-\\u03F3\\u0401-\\u040C\\u040E-\\u044F\\u0451-\\u045C\\u045E-\\u0481\\u0490-\\u04C4\\u04C7\\u04C8\\u04CB\\u04CC\\u04D0-\\u04EB\\u04EE-\\u04F5\\u04F8\\u04F9\\u0531-\\u0556\\u0559\\u0561-\\u0586\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0621-\\u063A\\u0641-\\u064A\\u0671-\\u06B7\\u06BA-\\u06BE\\u06C0-\\u06CE\\u06D0-\\u06D3\\u06D5\\u06E5\\u06E6\\u0905-\\u0939\\u093D\\u0958-\\u0961\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8B\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AE0\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B36-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB5\\u0BB7-\\u0BB9\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C33\\u0C35-\\u0C39\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CDE\\u0CE0\\u0CE1\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D28\\u0D2A-\\u0D39\\u0D60\\u0D61\\u0E01-\\u0E2E\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E45\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD\\u0EAE\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0F40-\\u0F47\\u0F49-\\u0F69\\u10A0-\\u10C5\\u10D0-\\u10F6\\u1100\\u1102\\u1103\\u1105-\\u1107\\u1109\\u110B\\u110C\\u110E-\\u1112\\u113C\\u113E\\u1140\\u114C\\u114E\\u1150\\u1154\\u1155\\u1159\\u115F-\\u1161\\u1163\\u1165\\u1167\\u1169\\u116D\\u116E\\u1172\\u1173\\u1175\\u119E\\u11A8\\u11AB\\u11AE\\u11AF\\u11B7\\u11B8\\u11BA\\u11BC-\\u11C2\\u11EB\\u11F0\\u11F9\\u1E00-\\u1E9B\\u1EA0-\\u1EF9\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2126\\u212A\\u212B\\u212E\\u2180-\\u2182\\u3007\\u3021-\\u3029\\u3041-\\u3094\\u30A1-\\u30FA\\u3105-\\u312C\\u4E00-\\u9FA5\\uAC00-\\uD7A3';
-      var ncname = '[' + letter + '_][' + letter + digit + '\\.\\-_' + combiningChar + extender + ']*';
-      return '((?:' + ncname + '\\:)?' + ncname + ')';
-    })(),
-    startTagOpen = new RegExp('^<' + qnameCapture),
-    startTagClose = /^\s*(\/?)>/,
-    endTag = new RegExp('^<\\/' + qnameCapture + '[^>]*>'),
-    doctype = /^<!DOCTYPE\s?[^>]+>/i;
-
-var IS_REGEX_CAPTURING_BROKEN = false;
-'x'.replace(/x(.)?/g, function(m, g) {
-  IS_REGEX_CAPTURING_BROKEN = g === '';
-});
-
-// Empty Elements
-var empty = makeMap('area,base,basefont,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr');
-
-// Inline Elements
-var inline = makeMap('a,abbr,acronym,applet,b,basefont,bdo,big,br,button,cite,code,del,dfn,em,font,i,iframe,img,input,ins,kbd,label,map,noscript,object,q,s,samp,script,select,small,span,strike,strong,sub,sup,svg,textarea,tt,u,var');
-
-// Elements that you can, intentionally, leave open
-// (and which close themselves)
-var closeSelf = makeMap('colgroup,dd,dt,li,option,p,td,tfoot,th,thead,tr,source');
-
-// Attributes that have their values filled in disabled='disabled'
-var fillAttrs = makeMap('checked,compact,declare,defer,disabled,ismap,multiple,nohref,noresize,noshade,nowrap,readonly,selected');
-
-// Special Elements (can contain anything)
-var special = makeMap('script,style');
-
-// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
-// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
-var nonPhrasing = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,ol,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track,ul');
-
-var reCache = {};
-
-function attrForHandler(handler) {
-  var pattern = singleAttrIdentifier.source +
-    '(?:\\s*(' + joinSingleAttrAssigns(handler) + ')' +
-    '[ \\t\\n\\f\\r]*(?:' + singleAttrValues.join('|') + '))?';
-  if (handler.customAttrSurround) {
-    var attrClauses = [];
-    for (var i = handler.customAttrSurround.length - 1; i >= 0; i--) {
-      attrClauses[i] = '(?:' +
-        '(' + handler.customAttrSurround[i][0].source + ')\\s*' +
-        pattern +
-        '\\s*(' + handler.customAttrSurround[i][1].source + ')' +
-        ')';
-    }
-    attrClauses.push('(?:' + pattern + ')');
-    pattern = '(?:' + attrClauses.join('|') + ')';
-  }
-  return new RegExp('^\\s*' + pattern);
-}
-
-function joinSingleAttrAssigns(handler) {
-  return singleAttrAssigns.concat(
-    handler.customAttrAssign || []
-  ).map(function(assign) {
-    return '(?:' + assign.source + ')';
-  }).join('|');
-}
-
-class HTMLParser {
-  constructor(html, handler) {
-    this.html = html;
-    this.handler = handler;
-  }
-
-  async parse() {
-    let html = this.html;
-    const handler = this.handler;
-
-    var stack = [], lastTag;
-    var attribute = attrForHandler(handler);
-    var last, prevTag, nextTag;
-    while (html) {
-      last = html;
-      // Make sure we're not in a script or style element
-      if (!lastTag || !special(lastTag)) {
-        var textEnd = html.indexOf('<');
-        if (textEnd === 0) {
-          // Comment:
-          if (/^<!--/.test(html)) {
-            var commentEnd = html.indexOf('-->');
-
-            if (commentEnd >= 0) {
-              if (handler.comment) {
-                await handler.comment(html.substring(4, commentEnd));
-              }
-              html = html.substring(commentEnd + 3);
-              prevTag = '';
-              continue;
-            }
-          }
-
-          // https://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
-          if (/^<!\[/.test(html)) {
-            var conditionalEnd = html.indexOf(']>');
-
-            if (conditionalEnd >= 0) {
-              if (handler.comment) {
-                await handler.comment(html.substring(2, conditionalEnd + 1), true /* non-standard */);
-              }
-              html = html.substring(conditionalEnd + 2);
-              prevTag = '';
-              continue;
-            }
-          }
-
-          // Doctype:
-          var doctypeMatch = html.match(doctype);
-          if (doctypeMatch) {
-            if (handler.doctype) {
-              handler.doctype(doctypeMatch[0]);
-            }
-            html = html.substring(doctypeMatch[0].length);
-            prevTag = '';
-            continue;
-          }
-
-          // End tag:
-          var endTagMatch = html.match(endTag);
-          if (endTagMatch) {
-            html = html.substring(endTagMatch[0].length);
-            await replaceAsync(endTagMatch[0], endTag, parseEndTag);
-            prevTag = '/' + endTagMatch[1].toLowerCase();
-            continue;
-          }
-
-          // Start tag:
-          var startTagMatch = parseStartTag(html);
-          if (startTagMatch) {
-            html = startTagMatch.rest;
-            await handleStartTag(startTagMatch);
-            prevTag = startTagMatch.tagName.toLowerCase();
-            continue;
-          }
-
-          // Treat `<` as text
-          if (handler.continueOnParseError) {
-            textEnd = html.indexOf('<', 1);
-          }
-        }
-
-        var text;
-        if (textEnd >= 0) {
-          text = html.substring(0, textEnd);
-          html = html.substring(textEnd);
-        }
-        else {
-          text = html;
-          html = '';
-        }
-
-        // next tag
-        var nextTagMatch = parseStartTag(html);
-        if (nextTagMatch) {
-          nextTag = nextTagMatch.tagName;
-        }
-        else {
-          nextTagMatch = html.match(endTag);
-          if (nextTagMatch) {
-            nextTag = '/' + nextTagMatch[1];
-          }
-          else {
-            nextTag = '';
-          }
-        }
-
-        if (handler.chars) {
-          await handler.chars(text, prevTag, nextTag);
-        }
-        prevTag = '';
-      }
-      else {
-        var stackedTag = lastTag.toLowerCase();
-        var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp('([\\s\\S]*?)</' + stackedTag + '[^>]*>', 'i'));
-
-        html = await replaceAsync(html, reStackedTag, async(_, text) => {
-          if (stackedTag !== 'script' && stackedTag !== 'style' && stackedTag !== 'noscript') {
-            text = text
-              .replace(/<!--([\s\S]*?)-->/g, '$1')
-              .replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
-          }
-
-
-          if (handler.chars) {
-            await handler.chars(text);
-          }
-
-          return '';
-        });
-
-        await parseEndTag('</' + stackedTag + '>', stackedTag);
-      }
-
-      if (html === last) {
-        throw new Error('Parse Error: ' + html);
-      }
-    }
-
-    if (!handler.partialMarkup) {
-      // Clean up any remaining tags
-      await parseEndTag();
-    }
-
-    function parseStartTag(input) {
-      var start = input.match(startTagOpen);
-      if (start) {
-        var match = {
-          tagName: start[1],
-          attrs: []
-        };
-        input = input.slice(start[0].length);
-        var end, attr;
-        while (!(end = input.match(startTagClose)) && (attr = input.match(attribute))) {
-          input = input.slice(attr[0].length);
-          match.attrs.push(attr);
-        }
-        if (end) {
-          match.unarySlash = end[1];
-          match.rest = input.slice(end[0].length);
-          return match;
-        }
-      }
-    }
-
-    async function closeIfFound(tagName) {
-      if (findTag(tagName) >= 0) {
-        await parseEndTag('', tagName);
-        return true;
-      }
-    }
-
-    async function handleStartTag(match) {
-      var tagName = match.tagName;
-      var unarySlash = match.unarySlash;
-
-      if (handler.html5) {
-        if (lastTag === 'p' && nonPhrasing(tagName)) {
-          await parseEndTag('', lastTag);
-        }
-        else if (tagName === 'tbody') {
-          await closeIfFound('thead');
-        }
-        else if (tagName === 'tfoot') {
-          if (!await closeIfFound('tbody')) {
-            await closeIfFound('thead');
-          }
-        }
-        if (tagName === 'col' && findTag('colgroup') < 0) {
-          lastTag = 'colgroup';
-          stack.push({ tag: lastTag, attrs: [] });
-          if (handler.start) {
-            await handler.start(lastTag, [], false, '');
-          }
-        }
-      }
-
-      if (!handler.html5 && !inline(tagName)) {
-        while (lastTag && inline(lastTag)) {
-          await parseEndTag('', lastTag);
-        }
-      }
-
-      if (closeSelf(tagName) && lastTag === tagName) {
-        await parseEndTag('', tagName);
-      }
-
-      var unary = empty(tagName) || tagName === 'html' && lastTag === 'head' || !!unarySlash;
-
-      var attrs = match.attrs.map(function(args) {
-        var name, value, customOpen, customClose, customAssign, quote;
-        var ncp = 7; // number of captured parts, scalar
-
-        // hackish work around FF bug https://bugzilla.mozilla.org/show_bug.cgi?id=369778
-        if (IS_REGEX_CAPTURING_BROKEN && args[0].indexOf('""') === -1) {
-          if (args[3] === '') { delete args[3]; }
-          if (args[4] === '') { delete args[4]; }
-          if (args[5] === '') { delete args[5]; }
-        }
-
-        function populate(index) {
-          customAssign = args[index];
-          value = args[index + 1];
-          if (typeof value !== 'undefined') {
-            return '"';
-          }
-          value = args[index + 2];
-          if (typeof value !== 'undefined') {
-            return '\'';
-          }
-          value = args[index + 3];
-          if (typeof value === 'undefined' && fillAttrs(name)) {
-            value = name;
-          }
-          return '';
-        }
-
-        var j = 1;
-        if (handler.customAttrSurround) {
-          for (var i = 0, l = handler.customAttrSurround.length; i < l; i++, j += ncp) {
-            name = args[j + 1];
-            if (name) {
-              quote = populate(j + 2);
-              customOpen = args[j];
-              customClose = args[j + 6];
-              break;
-            }
-          }
-        }
-
-        if (!name && (name = args[j])) {
-          quote = populate(j + 1);
-        }
-
-        return {
-          name: name,
-          value: value,
-          customAssign: customAssign || '=',
-          customOpen: customOpen || '',
-          customClose: customClose || '',
-          quote: quote || ''
-        };
-      });
-
-      if (!unary) {
-        stack.push({ tag: tagName, attrs: attrs });
-        lastTag = tagName;
-        unarySlash = '';
-      }
-
-      if (handler.start) {
-        await handler.start(tagName, attrs, unary, unarySlash);
-      }
-    }
-
-    function findTag(tagName) {
-      var pos;
-      var needle = tagName.toLowerCase();
-      for (pos = stack.length - 1; pos >= 0; pos--) {
-        if (stack[pos].tag.toLowerCase() === needle) {
-          break;
-        }
-      }
-      return pos;
-    }
-
-    async function parseEndTag(tag, tagName) {
-      var pos;
-
-      // Find the closest opened tag of the same type
-      if (tagName) {
-        pos = findTag(tagName);
-      }
-      // If no tag name is provided, clean shop
-      else {
-        pos = 0;
-      }
-
-      if (pos >= 0) {
-        // Close all the open elements, up the stack
-        for (var i = stack.length - 1; i >= pos; i--) {
-          if (handler.end) {
-            handler.end(stack[i].tag, stack[i].attrs, i > pos || !tag);
-          }
-        }
-
-        // Remove the open elements from the stack
-        stack.length = pos;
-        lastTag = pos && stack[pos - 1].tag;
-      }
-      else if (tagName.toLowerCase() === 'br') {
-        if (handler.start) {
-          await handler.start(tagName, [], true, '');
-        }
-      }
-      else if (tagName.toLowerCase() === 'p') {
-        if (handler.start) {
-          await handler.start(tagName, [], false, '', true);
-        }
-        if (handler.end) {
-          handler.end(tagName, []);
-        }
-      }
-    }
-  }
-}
-
-exports.Ji = HTMLParser;
-__webpack_unused_export__ = function(html) {
-  var results = '';
-
-  new HTMLParser(html, {
-    start: function(tag, attrs, unary) {
-      results += '<' + tag;
-
-      for (var i = 0, len = attrs.length; i < len; i++) {
-        results += ' ' + attrs[i].name + '="' + (attrs[i].value || '').replace(/"/g, '"') + '"';
-      }
-
-      results += (unary ? '/' : '') + '>';
-    },
-    end: function(tag) {
-      results += '</' + tag + '>';
-    },
-    chars: function(text) {
-      results += text;
-    },
-    comment: function(text) {
-      results += '<!--' + text + '-->';
-    },
-    ignore: function(text) {
-      results += text;
-    }
-  });
-
-  return results;
-};
-
-__webpack_unused_export__ = function(html, doc) {
-  // There can be only one of these elements
-  var one = {
-    html: true,
-    head: true,
-    body: true,
-    title: true
-  };
-
-  // Enforce a structure for the document
-  var structure = {
-    link: 'head',
-    base: 'head'
-  };
-
-  if (doc) {
-    doc = doc.ownerDocument || doc.getOwnerDocument && doc.getOwnerDocument() || doc;
-  }
-  else if (typeof DOMDocument !== 'undefined') {
-    doc = new DOMDocument();
-  }
-  else if (typeof document !== 'undefined' && document.implementation && document.implementation.createDocument) {
-    doc = document.implementation.createDocument('', '', null);
-  }
-  else if (typeof ActiveX !== 'undefined') {
-    doc = new ActiveXObject('Msxml.DOMDocument');
-  }
-
-  var elems = [],
-      documentElement = doc.documentElement ||
-      doc.getDocumentElement && doc.getDocumentElement();
-
-  // If we're dealing with an empty document then we
-  // need to pre-populate it with the HTML document structure
-  if (!documentElement && doc.createElement) {
-    (function() {
-      var html = doc.createElement('html');
-      var head = doc.createElement('head');
-      head.appendChild(doc.createElement('title'));
-      html.appendChild(head);
-      html.appendChild(doc.createElement('body'));
-      doc.appendChild(html);
-    })();
-  }
-
-  // Find all the unique elements
-  if (doc.getElementsByTagName) {
-    for (var i in one) {
-      one[i] = doc.getElementsByTagName(i)[0];
-    }
-  }
-
-  // If we're working with a document, inject contents into
-  // the body element
-  var curParentNode = one.body;
-
-  new HTMLParser(html, {
-    start: function(tagName, attrs, unary) {
-      // If it's a pre-built element, then we can ignore
-      // its construction
-      if (one[tagName]) {
-        curParentNode = one[tagName];
-        return;
-      }
-
-      var elem = doc.createElement(tagName);
-
-      for (var attr in attrs) {
-        elem.setAttribute(attrs[attr].name, attrs[attr].value);
-      }
-
-      if (structure[tagName] && typeof one[structure[tagName]] !== 'boolean') {
-        one[structure[tagName]].appendChild(elem);
-      }
-      else if (curParentNode && curParentNode.appendChild) {
-        curParentNode.appendChild(elem);
-      }
-
-      if (!unary) {
-        elems.push(elem);
-        curParentNode = elem;
-      }
-    },
-    end: function(/* tag */) {
-      elems.length -= 1;
-
-      // Init the new parentNode
-      curParentNode = elems[elems.length - 1];
-    },
-    chars: function(text) {
-      curParentNode.appendChild(doc.createTextNode(text));
-    },
-    comment: function(/* text */) {
-      // create comment node
-    },
-    ignore: function(/* text */) {
-      // What to do here?
-    }
-  });
-
-  return doc;
-};
-
-exports.r7 = endTag;
-
-
-/***/ }),
-
-/***/ 12564:
-/***/ ((module) => {
-
-"use strict";
-
-
-function Sorter() {
-}
-
-Sorter.prototype.sort = function(tokens, fromIndex) {
-  fromIndex = fromIndex || 0;
-  for (var i = 0, len = this.keys.length; i < len; i++) {
-    var key = this.keys[i];
-    var token = key.slice(1);
-    var index = tokens.indexOf(token, fromIndex);
-    if (index !== -1) {
-      do {
-        if (index !== fromIndex) {
-          tokens.splice(index, 1);
-          tokens.splice(fromIndex, 0, token);
-        }
-        fromIndex++;
-      } while ((index = tokens.indexOf(token, fromIndex)) !== -1);
-      return this[key].sort(tokens, fromIndex);
-    }
-  }
-  return tokens;
-};
-
-function TokenChain() {
-}
-
-TokenChain.prototype = {
-  add: function(tokens) {
-    var self = this;
-    tokens.forEach(function(token) {
-      var key = '$' + token;
-      if (!self[key]) {
-        self[key] = [];
-        self[key].processed = 0;
-      }
-      self[key].push(tokens);
-    });
-  },
-  createSorter: function() {
-    var self = this;
-    var sorter = new Sorter();
-    sorter.keys = Object.keys(self).sort(function(j, k) {
-      var m = self[j].length;
-      var n = self[k].length;
-      return m < n ? 1 : m > n ? -1 : j < k ? -1 : j > k ? 1 : 0;
-    }).filter(function(key) {
-      if (self[key].processed < self[key].length) {
-        var token = key.slice(1);
-        var chain = new TokenChain();
-        self[key].forEach(function(tokens) {
-          var index;
-          while ((index = tokens.indexOf(token)) !== -1) {
-            tokens.splice(index, 1);
-          }
-          tokens.forEach(function(token) {
-            self['$' + token].processed++;
-          });
-          chain.add(tokens.slice(0));
-        });
-        sorter[key] = chain.createSorter();
-        return true;
-      }
-      return false;
-    });
-    return sorter;
-  }
-};
-
-module.exports = TokenChain;
-
-
-/***/ }),
-
-/***/ 84402:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-
-function createMap(values, ignoreCase) {
-  var map = {};
-  values.forEach(function(value) {
-    map[value] = 1;
-  });
-  return ignoreCase ? function(value) {
-    return map[value.toLowerCase()] === 1;
-  } : function(value) {
-    return map[value] === 1;
-  };
-}
-
-async function replaceAsync(str, regex, asyncFn) {
-  const promises = [];
-  str.replace(regex, (match, ...args) => {
-    const promise = asyncFn(match, ...args);
-    promises.push(promise);
-  });
-  const data = await Promise.all(promises);
-  return str.replace(regex, () => data.shift());
-}
-
-
-exports.createMap = createMap;
-exports.createMapFromString = function(values, ignoreCase) {
-  return createMap(values.split(/,/), ignoreCase);
-};
-
-exports.replaceAsync = replaceAsync;
-
-
-/***/ }),
-
-/***/ 46128:
-/***/ ((module) => {
-
-"use strict";
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-
-
-/**
- * Use invariant() to assert state which your program assumes to be true.
- *
- * Provide sprintf-style format (only %s is supported) and arguments
- * to provide information about what broke and what you were
- * expecting.
- *
- * The invariant message will be stripped in production, but the invariant
- * will remain to ensure logic does not differ in production.
- */
-
-var NODE_ENV = "production";
-
-var invariant = function(condition, format, a, b, c, d, e, f) {
-  if (NODE_ENV !== 'production') {
-    if (format === undefined) {
-      throw new Error('invariant requires an error message argument');
-    }
-  }
-
-  if (!condition) {
-    var error;
-    if (format === undefined) {
-      error = new Error(
-        'Minified exception occurred; use the non-minified dev environment ' +
-        'for the full error message and additional helpful warnings.'
-      );
-    } else {
-      var args = [a, b, c, d, e, f];
-      var argIndex = 0;
-      error = new Error(
-        format.replace(/%s/g, function() { return args[argIndex++]; })
-      );
-      error.name = 'Invariant Violation';
-    }
-
-    error.framesToPop = 1; // we don't care about invariant's own frame
-    throw error;
-  }
-};
-
-module.exports = invariant;
-
-
-/***/ }),
-
-/***/ 36808:
-/***/ ((module, exports, __webpack_require__) => {
-
-var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/*!
- * JavaScript Cookie v2.2.1
- * https://github.com/js-cookie/js-cookie
- *
- * Copyright 2006, 2015 Klaus Hartl & Fagner Brack
- * Released under the MIT license
- */
-;(function (factory) {
-	var registeredInModuleLoader;
-	if (true) {
-		!(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
-		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
-		(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :
-		__WEBPACK_AMD_DEFINE_FACTORY__),
-		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-		registeredInModuleLoader = true;
-	}
-	if (true) {
-		module.exports = factory();
-		registeredInModuleLoader = true;
-	}
-	if (!registeredInModuleLoader) {
-		var OldCookies = window.Cookies;
-		var api = window.Cookies = factory();
-		api.noConflict = function () {
-			window.Cookies = OldCookies;
-			return api;
-		};
-	}
-}(function () {
-	function extend () {
-		var i = 0;
-		var result = {};
-		for (; i < arguments.length; i++) {
-			var attributes = arguments[ i ];
-			for (var key in attributes) {
-				result[key] = attributes[key];
-			}
-		}
-		return result;
-	}
-
-	function decode (s) {
-		return s.replace(/(%[0-9A-Z]{2})+/g, decodeURIComponent);
-	}
-
-	function init (converter) {
-		function api() {}
-
-		function set (key, value, attributes) {
-			if (typeof document === 'undefined') {
-				return;
-			}
-
-			attributes = extend({
-				path: '/'
-			}, api.defaults, attributes);
-
-			if (typeof attributes.expires === 'number') {
-				attributes.expires = new Date(new Date() * 1 + attributes.expires * 864e+5);
-			}
-
-			// We're using "expires" because "max-age" is not supported by IE
-			attributes.expires = attributes.expires ? attributes.expires.toUTCString() : '';
-
-			try {
-				var result = JSON.stringify(value);
-				if (/^[\{\[]/.test(result)) {
-					value = result;
-				}
-			} catch (e) {}
-
-			value = converter.write ?
-				converter.write(value, key) :
-				encodeURIComponent(String(value))
-					.replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g, decodeURIComponent);
-
-			key = encodeURIComponent(String(key))
-				.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent)
-				.replace(/[\(\)]/g, escape);
-
-			var stringifiedAttributes = '';
-			for (var attributeName in attributes) {
-				if (!attributes[attributeName]) {
-					continue;
-				}
-				stringifiedAttributes += '; ' + attributeName;
-				if (attributes[attributeName] === true) {
-					continue;
-				}
-
-				// Considers RFC 6265 section 5.2:
-				// ...
-				// 3.  If the remaining unparsed-attributes contains a %x3B (";")
-				//     character:
-				// Consume the characters of the unparsed-attributes up to,
-				// not including, the first %x3B (";") character.
-				// ...
-				stringifiedAttributes += '=' + attributes[attributeName].split(';')[0];
-			}
-
-			return (document.cookie = key + '=' + value + stringifiedAttributes);
-		}
-
-		function get (key, json) {
-			if (typeof document === 'undefined') {
-				return;
-			}
-
-			var jar = {};
-			// To prevent the for loop in the first place assign an empty array
-			// in case there are no cookies at all.
-			var cookies = document.cookie ? document.cookie.split('; ') : [];
-			var i = 0;
-
-			for (; i < cookies.length; i++) {
-				var parts = cookies[i].split('=');
-				var cookie = parts.slice(1).join('=');
-
-				if (!json && cookie.charAt(0) === '"') {
-					cookie = cookie.slice(1, -1);
-				}
-
-				try {
-					var name = decode(parts[0]);
-					cookie = (converter.read || converter)(cookie, name) ||
-						decode(cookie);
-
-					if (json) {
-						try {
-							cookie = JSON.parse(cookie);
-						} catch (e) {}
-					}
-
-					jar[name] = cookie;
-
-					if (key === name) {
-						break;
-					}
-				} catch (e) {}
-			}
-
-			return key ? jar[key] : jar;
-		}
-
-		api.set = set;
-		api.get = function (key) {
-			return get(key, false /* read as raw */);
-		};
-		api.getJSON = function (key) {
-			return get(key, true /* read as json */);
-		};
-		api.remove = function (key, attributes) {
-			set(key, '', extend(attributes, {
-				expires: -1
-			}));
-		};
-
-		api.defaults = {};
-
-		api.withConverter = init;
-
-		return api;
-	}
-
-	return init(function () {});
-}));
-
-
-/***/ }),
-
-/***/ 96813:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-let _fs
-try {
-  _fs = __webpack_require__(20077)
-} catch (_) {
-  _fs = __webpack_require__(57147)
-}
-const universalify = __webpack_require__(48930)
-const { stringify, stripBom } = __webpack_require__(96780)
-
-async function _readFile (file, options = {}) {
-  if (typeof options === 'string') {
-    options = { encoding: options }
-  }
-
-  const fs = options.fs || _fs
-
-  const shouldThrow = 'throws' in options ? options.throws : true
-
-  let data = await universalify.fromCallback(fs.readFile)(file, options)
-
-  data = stripBom(data)
-
-  let obj
-  try {
-    obj = JSON.parse(data, options ? options.reviver : null)
-  } catch (err) {
-    if (shouldThrow) {
-      err.message = `${file}: ${err.message}`
-      throw err
-    } else {
-      return null
-    }
-  }
-
-  return obj
-}
-
-const readFile = universalify.fromPromise(_readFile)
-
-function readFileSync (file, options = {}) {
-  if (typeof options === 'string') {
-    options = { encoding: options }
-  }
-
-  const fs = options.fs || _fs
-
-  const shouldThrow = 'throws' in options ? options.throws : true
-
-  try {
-    let content = fs.readFileSync(file, options)
-    content = stripBom(content)
-    return JSON.parse(content, options.reviver)
-  } catch (err) {
-    if (shouldThrow) {
-      err.message = `${file}: ${err.message}`
-      throw err
-    } else {
-      return null
-    }
-  }
-}
-
-async function _writeFile (file, obj, options = {}) {
-  const fs = options.fs || _fs
-
-  const str = stringify(obj, options)
-
-  await universalify.fromCallback(fs.writeFile)(file, str, options)
-}
-
-const writeFile = universalify.fromPromise(_writeFile)
-
-function writeFileSync (file, obj, options = {}) {
-  const fs = options.fs || _fs
-
-  const str = stringify(obj, options)
-  // not sure if fs.writeFileSync returns anything, but just in case
-  return fs.writeFileSync(file, str, options)
-}
-
-const jsonfile = {
-  readFile,
-  readFileSync,
-  writeFile,
-  writeFileSync
-}
-
-module.exports = jsonfile
-
-
-/***/ }),
-
-/***/ 96780:
-/***/ ((module) => {
-
-function stringify (obj, { EOL = '\n', finalEOL = true, replacer = null, spaces } = {}) {
-  const EOF = finalEOL ? EOL : ''
-  const str = JSON.stringify(obj, replacer, spaces)
-
-  return str.replace(/\n/g, EOL) + EOF
-}
-
-function stripBom (content) {
-  // we do this because JSON.parse would convert it to a utf8 string if encoding wasn't specified
-  if (Buffer.isBuffer(content)) content = content.toString('utf8')
-  return content.replace(/^\uFEFF/, '')
-}
-
-module.exports = { stringify, stripBom }
-
-
-/***/ }),
-
-/***/ 76427:
-/***/ ((module) => {
-
-/**
- * lodash (Custom Build) <https://lodash.com/>
- * Build: `lodash modularize exports="npm" -o ./`
- * Copyright jQuery Foundation and other contributors <https://jquery.org/>
- * Released under MIT license <https://lodash.com/license>
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- */
-
-/** Used as the size to enable large array optimizations. */
-var LARGE_ARRAY_SIZE = 200;
-
-/** Used to stand-in for `undefined` hash values. */
-var HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0,
-    MAX_SAFE_INTEGER = 9007199254740991;
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]',
-    funcTag = '[object Function]',
-    genTag = '[object GeneratorFunction]',
-    symbolTag = '[object Symbol]';
-
-/**
- * Used to match `RegExp`
- * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
- */
-var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
-
-/** Used to detect host constructors (Safari). */
-var reIsHostCtor = /^\[object .+?Constructor\]$/;
-
-/** Used to detect unsigned integer values. */
-var reIsUint = /^(?:0|[1-9]\d*)$/;
-
-/** Detect free variable `global` from Node.js. */
-var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
-
-/** Detect free variable `self`. */
-var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
-
-/** Used as a reference to the global object. */
-var root = freeGlobal || freeSelf || Function('return this')();
-
-/**
- * A faster alternative to `Function#apply`, this function invokes `func`
- * with the `this` binding of `thisArg` and the arguments of `args`.
- *
- * @private
- * @param {Function} func The function to invoke.
- * @param {*} thisArg The `this` binding of `func`.
- * @param {Array} args The arguments to invoke `func` with.
- * @returns {*} Returns the result of `func`.
- */
-function apply(func, thisArg, args) {
-  switch (args.length) {
-    case 0: return func.call(thisArg);
-    case 1: return func.call(thisArg, args[0]);
-    case 2: return func.call(thisArg, args[0], args[1]);
-    case 3: return func.call(thisArg, args[0], args[1], args[2]);
-  }
-  return func.apply(thisArg, args);
-}
-
-/**
- * A specialized version of `_.includes` for arrays without support for
- * specifying an index to search from.
- *
- * @private
- * @param {Array} [array] The array to inspect.
- * @param {*} target The value to search for.
- * @returns {boolean} Returns `true` if `target` is found, else `false`.
- */
-function arrayIncludes(array, value) {
-  var length = array ? array.length : 0;
-  return !!length && baseIndexOf(array, value, 0) > -1;
-}
-
-/**
- * This function is like `arrayIncludes` except that it accepts a comparator.
- *
- * @private
- * @param {Array} [array] The array to inspect.
- * @param {*} target The value to search for.
- * @param {Function} comparator The comparator invoked per element.
- * @returns {boolean} Returns `true` if `target` is found, else `false`.
- */
-function arrayIncludesWith(array, value, comparator) {
-  var index = -1,
-      length = array ? array.length : 0;
-
-  while (++index < length) {
-    if (comparator(value, array[index])) {
-      return true;
-    }
-  }
-  return false;
-}
-
-/**
- * A specialized version of `_.map` for arrays without support for iteratee
- * shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the new mapped array.
- */
-function arrayMap(array, iteratee) {
-  var index = -1,
-      length = array ? array.length : 0,
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = iteratee(array[index], index, array);
-  }
-  return result;
-}
-
-/**
- * Appends the elements of `values` to `array`.
- *
- * @private
- * @param {Array} array The array to modify.
- * @param {Array} values The values to append.
- * @returns {Array} Returns `array`.
- */
-function arrayPush(array, values) {
-  var index = -1,
-      length = values.length,
-      offset = array.length;
-
-  while (++index < length) {
-    array[offset + index] = values[index];
-  }
-  return array;
-}
-
-/**
- * The base implementation of `_.findIndex` and `_.findLastIndex` without
- * support for iteratee shorthands.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {Function} predicate The function invoked per iteration.
- * @param {number} fromIndex The index to search from.
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function baseFindIndex(array, predicate, fromIndex, fromRight) {
-  var length = array.length,
-      index = fromIndex + (fromRight ? 1 : -1);
-
-  while ((fromRight ? index-- : ++index < length)) {
-    if (predicate(array[index], index, array)) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-/**
- * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} value The value to search for.
- * @param {number} fromIndex The index to search from.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function baseIndexOf(array, value, fromIndex) {
-  if (value !== value) {
-    return baseFindIndex(array, baseIsNaN, fromIndex);
-  }
-  var index = fromIndex - 1,
-      length = array.length;
-
-  while (++index < length) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-/**
- * The base implementation of `_.isNaN` without support for number objects.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
- */
-function baseIsNaN(value) {
-  return value !== value;
-}
-
-/**
- * The base implementation of `_.times` without support for iteratee shorthands
- * or max array length checks.
- *
- * @private
- * @param {number} n The number of times to invoke `iteratee`.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the array of results.
- */
-function baseTimes(n, iteratee) {
-  var index = -1,
-      result = Array(n);
-
-  while (++index < n) {
-    result[index] = iteratee(index);
-  }
-  return result;
-}
-
-/**
- * The base implementation of `_.unary` without support for storing metadata.
- *
- * @private
- * @param {Function} func The function to cap arguments for.
- * @returns {Function} Returns the new capped function.
- */
-function baseUnary(func) {
-  return function(value) {
-    return func(value);
-  };
-}
-
-/**
- * Checks if a cache value for `key` exists.
- *
- * @private
- * @param {Object} cache The cache to query.
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function cacheHas(cache, key) {
-  return cache.has(key);
-}
-
-/**
- * Gets the value at `key` of `object`.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {string} key The key of the property to get.
- * @returns {*} Returns the property value.
- */
-function getValue(object, key) {
-  return object == null ? undefined : object[key];
-}
-
-/**
- * Checks if `value` is a host object in IE < 9.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
- */
-function isHostObject(value) {
-  // Many host objects are `Object` objects that can coerce to strings
-  // despite having improperly defined `toString` methods.
-  var result = false;
-  if (value != null && typeof value.toString != 'function') {
-    try {
-      result = !!(value + '');
-    } catch (e) {}
-  }
-  return result;
-}
-
-/**
- * Creates a unary function that invokes `func` with its argument transformed.
- *
- * @private
- * @param {Function} func The function to wrap.
- * @param {Function} transform The argument transform.
- * @returns {Function} Returns the new function.
- */
-function overArg(func, transform) {
-  return function(arg) {
-    return func(transform(arg));
-  };
-}
-
-/** Used for built-in method references. */
-var arrayProto = Array.prototype,
-    funcProto = Function.prototype,
-    objectProto = Object.prototype;
-
-/** Used to detect overreaching core-js shims. */
-var coreJsData = root['__core-js_shared__'];
-
-/** Used to detect methods masquerading as native. */
-var maskSrcKey = (function() {
-  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
-  return uid ? ('Symbol(src)_1.' + uid) : '';
-}());
-
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
-var objectToString = objectProto.toString;
-
-/** Used to detect if a method is native. */
-var reIsNative = RegExp('^' +
-  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
-  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
-);
-
-/** Built-in value references. */
-var Symbol = root.Symbol,
-    getPrototype = overArg(Object.getPrototypeOf, Object),
-    propertyIsEnumerable = objectProto.propertyIsEnumerable,
-    splice = arrayProto.splice,
-    spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeGetSymbols = Object.getOwnPropertySymbols,
-    nativeMax = Math.max;
-
-/* Built-in method references that are verified to be native. */
-var Map = getNative(root, 'Map'),
-    nativeCreate = getNative(Object, 'create');
-
-/**
- * Creates a hash object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function Hash(entries) {
-  var index = -1,
-      length = entries ? entries.length : 0;
-
-  this.clear();
-  while (++index < length) {
-    var entry = entries[index];
-    this.set(entry[0], entry[1]);
-  }
-}
-
-/**
- * Removes all key-value entries from the hash.
- *
- * @private
- * @name clear
- * @memberOf Hash
- */
-function hashClear() {
-  this.__data__ = nativeCreate ? nativeCreate(null) : {};
-}
-
-/**
- * Removes `key` and its value from the hash.
- *
- * @private
- * @name delete
- * @memberOf Hash
- * @param {Object} hash The hash to modify.
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function hashDelete(key) {
-  return this.has(key) && delete this.__data__[key];
-}
-
-/**
- * Gets the hash value for `key`.
- *
- * @private
- * @name get
- * @memberOf Hash
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function hashGet(key) {
-  var data = this.__data__;
-  if (nativeCreate) {
-    var result = data[key];
-    return result === HASH_UNDEFINED ? undefined : result;
-  }
-  return hasOwnProperty.call(data, key) ? data[key] : undefined;
-}
-
-/**
- * Checks if a hash value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Hash
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function hashHas(key) {
-  var data = this.__data__;
-  return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
-}
-
-/**
- * Sets the hash `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Hash
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the hash instance.
- */
-function hashSet(key, value) {
-  var data = this.__data__;
-  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
-  return this;
-}
-
-// Add methods to `Hash`.
-Hash.prototype.clear = hashClear;
-Hash.prototype['delete'] = hashDelete;
-Hash.prototype.get = hashGet;
-Hash.prototype.has = hashHas;
-Hash.prototype.set = hashSet;
-
-/**
- * Creates an list cache object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function ListCache(entries) {
-  var index = -1,
-      length = entries ? entries.length : 0;
-
-  this.clear();
-  while (++index < length) {
-    var entry = entries[index];
-    this.set(entry[0], entry[1]);
-  }
-}
-
-/**
- * Removes all key-value entries from the list cache.
- *
- * @private
- * @name clear
- * @memberOf ListCache
- */
-function listCacheClear() {
-  this.__data__ = [];
-}
-
-/**
- * Removes `key` and its value from the list cache.
- *
- * @private
- * @name delete
- * @memberOf ListCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function listCacheDelete(key) {
-  var data = this.__data__,
-      index = assocIndexOf(data, key);
-
-  if (index < 0) {
-    return false;
-  }
-  var lastIndex = data.length - 1;
-  if (index == lastIndex) {
-    data.pop();
-  } else {
-    splice.call(data, index, 1);
-  }
-  return true;
-}
-
-/**
- * Gets the list cache value for `key`.
- *
- * @private
- * @name get
- * @memberOf ListCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function listCacheGet(key) {
-  var data = this.__data__,
-      index = assocIndexOf(data, key);
-
-  return index < 0 ? undefined : data[index][1];
-}
-
-/**
- * Checks if a list cache value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf ListCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function listCacheHas(key) {
-  return assocIndexOf(this.__data__, key) > -1;
-}
-
-/**
- * Sets the list cache `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf ListCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the list cache instance.
- */
-function listCacheSet(key, value) {
-  var data = this.__data__,
-      index = assocIndexOf(data, key);
-
-  if (index < 0) {
-    data.push([key, value]);
-  } else {
-    data[index][1] = value;
-  }
-  return this;
-}
-
-// Add methods to `ListCache`.
-ListCache.prototype.clear = listCacheClear;
-ListCache.prototype['delete'] = listCacheDelete;
-ListCache.prototype.get = listCacheGet;
-ListCache.prototype.has = listCacheHas;
-ListCache.prototype.set = listCacheSet;
-
-/**
- * Creates a map cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function MapCache(entries) {
-  var index = -1,
-      length = entries ? entries.length : 0;
-
-  this.clear();
-  while (++index < length) {
-    var entry = entries[index];
-    this.set(entry[0], entry[1]);
-  }
-}
-
-/**
- * Removes all key-value entries from the map.
- *
- * @private
- * @name clear
- * @memberOf MapCache
- */
-function mapCacheClear() {
-  this.__data__ = {
-    'hash': new Hash,
-    'map': new (Map || ListCache),
-    'string': new Hash
-  };
-}
-
-/**
- * Removes `key` and its value from the map.
- *
- * @private
- * @name delete
- * @memberOf MapCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function mapCacheDelete(key) {
-  return getMapData(this, key)['delete'](key);
-}
-
-/**
- * Gets the map value for `key`.
- *
- * @private
- * @name get
- * @memberOf MapCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function mapCacheGet(key) {
-  return getMapData(this, key).get(key);
-}
-
-/**
- * Checks if a map value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf MapCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function mapCacheHas(key) {
-  return getMapData(this, key).has(key);
-}
-
-/**
- * Sets the map `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf MapCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the map cache instance.
- */
-function mapCacheSet(key, value) {
-  getMapData(this, key).set(key, value);
-  return this;
-}
-
-// Add methods to `MapCache`.
-MapCache.prototype.clear = mapCacheClear;
-MapCache.prototype['delete'] = mapCacheDelete;
-MapCache.prototype.get = mapCacheGet;
-MapCache.prototype.has = mapCacheHas;
-MapCache.prototype.set = mapCacheSet;
-
-/**
- *
- * Creates an array cache object to store unique values.
- *
- * @private
- * @constructor
- * @param {Array} [values] The values to cache.
- */
-function SetCache(values) {
-  var index = -1,
-      length = values ? values.length : 0;
-
-  this.__data__ = new MapCache;
-  while (++index < length) {
-    this.add(values[index]);
-  }
-}
-
-/**
- * Adds `value` to the array cache.
- *
- * @private
- * @name add
- * @memberOf SetCache
- * @alias push
- * @param {*} value The value to cache.
- * @returns {Object} Returns the cache instance.
- */
-function setCacheAdd(value) {
-  this.__data__.set(value, HASH_UNDEFINED);
-  return this;
-}
-
-/**
- * Checks if `value` is in the array cache.
- *
- * @private
- * @name has
- * @memberOf SetCache
- * @param {*} value The value to search for.
- * @returns {number} Returns `true` if `value` is found, else `false`.
- */
-function setCacheHas(value) {
-  return this.__data__.has(value);
-}
-
-// Add methods to `SetCache`.
-SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
-SetCache.prototype.has = setCacheHas;
-
-/**
- * Creates an array of the enumerable property names of the array-like `value`.
- *
- * @private
- * @param {*} value The value to query.
- * @param {boolean} inherited Specify returning inherited property names.
- * @returns {Array} Returns the array of property names.
- */
-function arrayLikeKeys(value, inherited) {
-  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
-  // Safari 9 makes `arguments.length` enumerable in strict mode.
-  var result = (isArray(value) || isArguments(value))
-    ? baseTimes(value.length, String)
-    : [];
-
-  var length = result.length,
-      skipIndexes = !!length;
-
-  for (var key in value) {
-    if ((inherited || hasOwnProperty.call(value, key)) &&
-        !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
-      result.push(key);
-    }
-  }
-  return result;
-}
-
-/**
- * Gets the index at which the `key` is found in `array` of key-value pairs.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} key The key to search for.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function assocIndexOf(array, key) {
-  var length = array.length;
-  while (length--) {
-    if (eq(array[length][0], key)) {
-      return length;
-    }
-  }
-  return -1;
-}
-
-/**
- * The base implementation of methods like `_.difference` without support
- * for excluding multiple arrays or iteratee shorthands.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {Array} values The values to exclude.
- * @param {Function} [iteratee] The iteratee invoked per element.
- * @param {Function} [comparator] The comparator invoked per element.
- * @returns {Array} Returns the new array of filtered values.
- */
-function baseDifference(array, values, iteratee, comparator) {
-  var index = -1,
-      includes = arrayIncludes,
-      isCommon = true,
-      length = array.length,
-      result = [],
-      valuesLength = values.length;
-
-  if (!length) {
-    return result;
-  }
-  if (iteratee) {
-    values = arrayMap(values, baseUnary(iteratee));
-  }
-  if (comparator) {
-    includes = arrayIncludesWith;
-    isCommon = false;
-  }
-  else if (values.length >= LARGE_ARRAY_SIZE) {
-    includes = cacheHas;
-    isCommon = false;
-    values = new SetCache(values);
-  }
-  outer:
-  while (++index < length) {
-    var value = array[index],
-        computed = iteratee ? iteratee(value) : value;
-
-    value = (comparator || value !== 0) ? value : 0;
-    if (isCommon && computed === computed) {
-      var valuesIndex = valuesLength;
-      while (valuesIndex--) {
-        if (values[valuesIndex] === computed) {
-          continue outer;
-        }
-      }
-      result.push(value);
-    }
-    else if (!includes(values, computed, comparator)) {
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-/**
- * The base implementation of `_.flatten` with support for restricting flattening.
- *
- * @private
- * @param {Array} array The array to flatten.
- * @param {number} depth The maximum recursion depth.
- * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
- * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
- * @param {Array} [result=[]] The initial result value.
- * @returns {Array} Returns the new flattened array.
- */
-function baseFlatten(array, depth, predicate, isStrict, result) {
-  var index = -1,
-      length = array.length;
-
-  predicate || (predicate = isFlattenable);
-  result || (result = []);
-
-  while (++index < length) {
-    var value = array[index];
-    if (depth > 0 && predicate(value)) {
-      if (depth > 1) {
-        // Recursively flatten arrays (susceptible to call stack limits).
-        baseFlatten(value, depth - 1, predicate, isStrict, result);
-      } else {
-        arrayPush(result, value);
-      }
-    } else if (!isStrict) {
-      result[result.length] = value;
-    }
-  }
-  return result;
-}
-
-/**
- * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
- * `keysFunc` and `symbolsFunc` to get the enumerable property names and
- * symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Function} keysFunc The function to get the keys of `object`.
- * @param {Function} symbolsFunc The function to get the symbols of `object`.
- * @returns {Array} Returns the array of property names and symbols.
- */
-function baseGetAllKeys(object, keysFunc, symbolsFunc) {
-  var result = keysFunc(object);
-  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
-}
-
-/**
- * The base implementation of `_.isNative` without bad shim checks.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a native function,
- *  else `false`.
- */
-function baseIsNative(value) {
-  if (!isObject(value) || isMasked(value)) {
-    return false;
-  }
-  var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
-  return pattern.test(toSource(value));
-}
-
-/**
- * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
-function baseKeysIn(object) {
-  if (!isObject(object)) {
-    return nativeKeysIn(object);
-  }
-  var isProto = isPrototype(object),
-      result = [];
-
-  for (var key in object) {
-    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
-      result.push(key);
-    }
-  }
-  return result;
-}
-
-/**
- * The base implementation of `_.pick` without support for individual
- * property identifiers.
- *
- * @private
- * @param {Object} object The source object.
- * @param {string[]} props The property identifiers to pick.
- * @returns {Object} Returns the new object.
- */
-function basePick(object, props) {
-  object = Object(object);
-  return basePickBy(object, props, function(value, key) {
-    return key in object;
-  });
-}
-
-/**
- * The base implementation of  `_.pickBy` without support for iteratee shorthands.
- *
- * @private
- * @param {Object} object The source object.
- * @param {string[]} props The property identifiers to pick from.
- * @param {Function} predicate The function invoked per property.
- * @returns {Object} Returns the new object.
- */
-function basePickBy(object, props, predicate) {
-  var index = -1,
-      length = props.length,
-      result = {};
-
-  while (++index < length) {
-    var key = props[index],
-        value = object[key];
-
-    if (predicate(value, key)) {
-      result[key] = value;
-    }
-  }
-  return result;
-}
-
-/**
- * The base implementation of `_.rest` which doesn't validate or coerce arguments.
- *
- * @private
- * @param {Function} func The function to apply a rest parameter to.
- * @param {number} [start=func.length-1] The start position of the rest parameter.
- * @returns {Function} Returns the new function.
- */
-function baseRest(func, start) {
-  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
-  return function() {
-    var args = arguments,
-        index = -1,
-        length = nativeMax(args.length - start, 0),
-        array = Array(length);
-
-    while (++index < length) {
-      array[index] = args[start + index];
-    }
-    index = -1;
-    var otherArgs = Array(start + 1);
-    while (++index < start) {
-      otherArgs[index] = args[index];
-    }
-    otherArgs[start] = array;
-    return apply(func, this, otherArgs);
-  };
-}
-
-/**
- * Creates an array of own and inherited enumerable property names and
- * symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names and symbols.
- */
-function getAllKeysIn(object) {
-  return baseGetAllKeys(object, keysIn, getSymbolsIn);
-}
-
-/**
- * Gets the data for `map`.
- *
- * @private
- * @param {Object} map The map to query.
- * @param {string} key The reference key.
- * @returns {*} Returns the map data.
- */
-function getMapData(map, key) {
-  var data = map.__data__;
-  return isKeyable(key)
-    ? data[typeof key == 'string' ? 'string' : 'hash']
-    : data.map;
-}
-
-/**
- * Gets the native function at `key` of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the method to get.
- * @returns {*} Returns the function if it's native, else `undefined`.
- */
-function getNative(object, key) {
-  var value = getValue(object, key);
-  return baseIsNative(value) ? value : undefined;
-}
-
-/**
- * Creates an array of the own enumerable symbol properties of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of symbols.
- */
-var getSymbols = nativeGetSymbols ? overArg(nativeGetSymbols, Object) : stubArray;
-
-/**
- * Creates an array of the own and inherited enumerable symbol properties
- * of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of symbols.
- */
-var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
-  var result = [];
-  while (object) {
-    arrayPush(result, getSymbols(object));
-    object = getPrototype(object);
-  }
-  return result;
-};
-
-/**
- * Checks if `value` is a flattenable `arguments` object or array.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
- */
-function isFlattenable(value) {
-  return isArray(value) || isArguments(value) ||
-    !!(spreadableSymbol && value && value[spreadableSymbol]);
-}
-
-/**
- * Checks if `value` is a valid array-like index.
- *
- * @private
- * @param {*} value The value to check.
- * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
- * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
- */
-function isIndex(value, length) {
-  length = length == null ? MAX_SAFE_INTEGER : length;
-  return !!length &&
-    (typeof value == 'number' || reIsUint.test(value)) &&
-    (value > -1 && value % 1 == 0 && value < length);
-}
-
-/**
- * Checks if `value` is suitable for use as unique object key.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
- */
-function isKeyable(value) {
-  var type = typeof value;
-  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
-    ? (value !== '__proto__')
-    : (value === null);
-}
-
-/**
- * Checks if `func` has its source masked.
- *
- * @private
- * @param {Function} func The function to check.
- * @returns {boolean} Returns `true` if `func` is masked, else `false`.
- */
-function isMasked(func) {
-  return !!maskSrcKey && (maskSrcKey in func);
-}
-
-/**
- * Checks if `value` is likely a prototype object.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
- */
-function isPrototype(value) {
-  var Ctor = value && value.constructor,
-      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
-
-  return value === proto;
-}
-
-/**
- * This function is like
- * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
- * except that it includes inherited enumerable properties.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
-function nativeKeysIn(object) {
-  var result = [];
-  if (object != null) {
-    for (var key in Object(object)) {
-      result.push(key);
-    }
-  }
-  return result;
-}
-
-/**
- * Converts `value` to a string key if it's not a string or symbol.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {string|symbol} Returns the key.
- */
-function toKey(value) {
-  if (typeof value == 'string' || isSymbol(value)) {
-    return value;
-  }
-  var result = (value + '');
-  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
-
-/**
- * Converts `func` to its source code.
- *
- * @private
- * @param {Function} func The function to process.
- * @returns {string} Returns the source code.
- */
-function toSource(func) {
-  if (func != null) {
-    try {
-      return funcToString.call(func);
-    } catch (e) {}
-    try {
-      return (func + '');
-    } catch (e) {}
-  }
-  return '';
-}
-
-/**
- * Performs a
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * comparison between two values to determine if they are equivalent.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'a': 1 };
- * var other = { 'a': 1 };
- *
- * _.eq(object, object);
- * // => true
- *
- * _.eq(object, other);
- * // => false
- *
- * _.eq('a', 'a');
- * // => true
- *
- * _.eq('a', Object('a'));
- * // => false
- *
- * _.eq(NaN, NaN);
- * // => true
- */
-function eq(value, other) {
-  return value === other || (value !== value && other !== other);
-}
-
-/**
- * Checks if `value` is likely an `arguments` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an `arguments` object,
- *  else `false`.
- * @example
- *
- * _.isArguments(function() { return arguments; }());
- * // => true
- *
- * _.isArguments([1, 2, 3]);
- * // => false
- */
-function isArguments(value) {
-  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
-  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
-    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
-}
-
-/**
- * Checks if `value` is classified as an `Array` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array, else `false`.
- * @example
- *
- * _.isArray([1, 2, 3]);
- * // => true
- *
- * _.isArray(document.body.children);
- * // => false
- *
- * _.isArray('abc');
- * // => false
- *
- * _.isArray(_.noop);
- * // => false
- */
-var isArray = Array.isArray;
-
-/**
- * Checks if `value` is array-like. A value is considered array-like if it's
- * not a function and has a `value.length` that's an integer greater than or
- * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
- * @example
- *
- * _.isArrayLike([1, 2, 3]);
- * // => true
- *
- * _.isArrayLike(document.body.children);
- * // => true
- *
- * _.isArrayLike('abc');
- * // => true
- *
- * _.isArrayLike(_.noop);
- * // => false
- */
-function isArrayLike(value) {
-  return value != null && isLength(value.length) && !isFunction(value);
-}
-
-/**
- * This method is like `_.isArrayLike` except that it also checks if `value`
- * is an object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array-like object,
- *  else `false`.
- * @example
- *
- * _.isArrayLikeObject([1, 2, 3]);
- * // => true
- *
- * _.isArrayLikeObject(document.body.children);
- * // => true
- *
- * _.isArrayLikeObject('abc');
- * // => false
- *
- * _.isArrayLikeObject(_.noop);
- * // => false
- */
-function isArrayLikeObject(value) {
-  return isObjectLike(value) && isArrayLike(value);
-}
-
-/**
- * Checks if `value` is classified as a `Function` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- *
- * _.isFunction(/abc/);
- * // => false
- */
-function isFunction(value) {
-  // The use of `Object#toString` avoids issues with the `typeof` operator
-  // in Safari 8-9 which returns 'object' for typed array and other constructors.
-  var tag = isObject(value) ? objectToString.call(value) : '';
-  return tag == funcTag || tag == genTag;
-}
-
-/**
- * Checks if `value` is a valid array-like length.
- *
- * **Note:** This method is loosely based on
- * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
- * @example
- *
- * _.isLength(3);
- * // => true
- *
- * _.isLength(Number.MIN_VALUE);
- * // => false
- *
- * _.isLength(Infinity);
- * // => false
- *
- * _.isLength('3');
- * // => false
- */
-function isLength(value) {
-  return typeof value == 'number' &&
-    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
-}
-
-/**
- * Checks if `value` is the
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(_.noop);
- * // => true
- *
- * _.isObject(null);
- * // => false
- */
-function isObject(value) {
-  var type = typeof value;
-  return !!value && (type == 'object' || type == 'function');
-}
-
-/**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
- *
- * _.isObjectLike(null);
- * // => false
- */
-function isObjectLike(value) {
-  return !!value && typeof value == 'object';
-}
-
-/**
- * Checks if `value` is classified as a `Symbol` primitive or object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
- * @example
- *
- * _.isSymbol(Symbol.iterator);
- * // => true
- *
- * _.isSymbol('abc');
- * // => false
- */
-function isSymbol(value) {
-  return typeof value == 'symbol' ||
-    (isObjectLike(value) && objectToString.call(value) == symbolTag);
-}
-
-/**
- * Creates an array of the own and inherited enumerable property names of `object`.
- *
- * **Note:** Non-object values are coerced to objects.
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category Object
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- * @example
- *
- * function Foo() {
- *   this.a = 1;
- *   this.b = 2;
- * }
- *
- * Foo.prototype.c = 3;
- *
- * _.keysIn(new Foo);
- * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
- */
-function keysIn(object) {
-  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
-}
-
-/**
- * The opposite of `_.pick`; this method creates an object composed of the
- * own and inherited enumerable string keyed properties of `object` that are
- * not omitted.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The source object.
- * @param {...(string|string[])} [props] The property identifiers to omit.
- * @returns {Object} Returns the new object.
- * @example
- *
- * var object = { 'a': 1, 'b': '2', 'c': 3 };
- *
- * _.omit(object, ['a', 'c']);
- * // => { 'b': '2' }
- */
-var omit = baseRest(function(object, props) {
-  if (object == null) {
-    return {};
-  }
-  props = arrayMap(baseFlatten(props, 1), toKey);
-  return basePick(object, baseDifference(getAllKeysIn(object), props));
-});
-
-/**
- * This method returns a new empty array.
- *
- * @static
- * @memberOf _
- * @since 4.13.0
- * @category Util
- * @returns {Array} Returns the new empty array.
- * @example
- *
- * var arrays = _.times(2, _.stubArray);
- *
- * console.log(arrays);
- * // => [[], []]
- *
- * console.log(arrays[0] === arrays[1]);
- * // => false
- */
-function stubArray() {
-  return [];
-}
-
-module.exports = omit;
-
-
-/***/ }),
-
-/***/ 25030:
-/***/ ((module) => {
-
-/**
- * lodash (Custom Build) <https://lodash.com/>
- * Build: `lodash modularize exports="npm" -o ./`
- * Copyright jQuery Foundation and other contributors <https://jquery.org/>
- * Released under MIT license <https://lodash.com/license>
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- */
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0,
-    MAX_SAFE_INTEGER = 9007199254740991;
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]',
-    funcTag = '[object Function]',
-    genTag = '[object GeneratorFunction]',
-    symbolTag = '[object Symbol]';
-
-/** Detect free variable `global` from Node.js. */
-var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
-
-/** Detect free variable `self`. */
-var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
-
-/** Used as a reference to the global object. */
-var root = freeGlobal || freeSelf || Function('return this')();
-
-/**
- * A faster alternative to `Function#apply`, this function invokes `func`
- * with the `this` binding of `thisArg` and the arguments of `args`.
- *
- * @private
- * @param {Function} func The function to invoke.
- * @param {*} thisArg The `this` binding of `func`.
- * @param {Array} args The arguments to invoke `func` with.
- * @returns {*} Returns the result of `func`.
- */
-function apply(func, thisArg, args) {
-  switch (args.length) {
-    case 0: return func.call(thisArg);
-    case 1: return func.call(thisArg, args[0]);
-    case 2: return func.call(thisArg, args[0], args[1]);
-    case 3: return func.call(thisArg, args[0], args[1], args[2]);
-  }
-  return func.apply(thisArg, args);
-}
-
-/**
- * A specialized version of `_.map` for arrays without support for iteratee
- * shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the new mapped array.
- */
-function arrayMap(array, iteratee) {
-  var index = -1,
-      length = array ? array.length : 0,
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = iteratee(array[index], index, array);
-  }
-  return result;
-}
-
-/**
- * Appends the elements of `values` to `array`.
- *
- * @private
- * @param {Array} array The array to modify.
- * @param {Array} values The values to append.
- * @returns {Array} Returns `array`.
- */
-function arrayPush(array, values) {
-  var index = -1,
-      length = values.length,
-      offset = array.length;
-
-  while (++index < length) {
-    array[offset + index] = values[index];
-  }
-  return array;
-}
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
-var objectToString = objectProto.toString;
-
-/** Built-in value references. */
-var Symbol = root.Symbol,
-    propertyIsEnumerable = objectProto.propertyIsEnumerable,
-    spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeMax = Math.max;
-
-/**
- * The base implementation of `_.flatten` with support for restricting flattening.
- *
- * @private
- * @param {Array} array The array to flatten.
- * @param {number} depth The maximum recursion depth.
- * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
- * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
- * @param {Array} [result=[]] The initial result value.
- * @returns {Array} Returns the new flattened array.
- */
-function baseFlatten(array, depth, predicate, isStrict, result) {
-  var index = -1,
-      length = array.length;
-
-  predicate || (predicate = isFlattenable);
-  result || (result = []);
-
-  while (++index < length) {
-    var value = array[index];
-    if (depth > 0 && predicate(value)) {
-      if (depth > 1) {
-        // Recursively flatten arrays (susceptible to call stack limits).
-        baseFlatten(value, depth - 1, predicate, isStrict, result);
-      } else {
-        arrayPush(result, value);
-      }
-    } else if (!isStrict) {
-      result[result.length] = value;
-    }
-  }
-  return result;
-}
-
-/**
- * The base implementation of `_.pick` without support for individual
- * property identifiers.
- *
- * @private
- * @param {Object} object The source object.
- * @param {string[]} props The property identifiers to pick.
- * @returns {Object} Returns the new object.
- */
-function basePick(object, props) {
-  object = Object(object);
-  return basePickBy(object, props, function(value, key) {
-    return key in object;
-  });
-}
-
-/**
- * The base implementation of  `_.pickBy` without support for iteratee shorthands.
- *
- * @private
- * @param {Object} object The source object.
- * @param {string[]} props The property identifiers to pick from.
- * @param {Function} predicate The function invoked per property.
- * @returns {Object} Returns the new object.
- */
-function basePickBy(object, props, predicate) {
-  var index = -1,
-      length = props.length,
-      result = {};
-
-  while (++index < length) {
-    var key = props[index],
-        value = object[key];
-
-    if (predicate(value, key)) {
-      result[key] = value;
-    }
-  }
-  return result;
-}
-
-/**
- * The base implementation of `_.rest` which doesn't validate or coerce arguments.
- *
- * @private
- * @param {Function} func The function to apply a rest parameter to.
- * @param {number} [start=func.length-1] The start position of the rest parameter.
- * @returns {Function} Returns the new function.
- */
-function baseRest(func, start) {
-  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
-  return function() {
-    var args = arguments,
-        index = -1,
-        length = nativeMax(args.length - start, 0),
-        array = Array(length);
-
-    while (++index < length) {
-      array[index] = args[start + index];
-    }
-    index = -1;
-    var otherArgs = Array(start + 1);
-    while (++index < start) {
-      otherArgs[index] = args[index];
-    }
-    otherArgs[start] = array;
-    return apply(func, this, otherArgs);
-  };
-}
-
-/**
- * Checks if `value` is a flattenable `arguments` object or array.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
- */
-function isFlattenable(value) {
-  return isArray(value) || isArguments(value) ||
-    !!(spreadableSymbol && value && value[spreadableSymbol]);
-}
-
-/**
- * Converts `value` to a string key if it's not a string or symbol.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {string|symbol} Returns the key.
- */
-function toKey(value) {
-  if (typeof value == 'string' || isSymbol(value)) {
-    return value;
-  }
-  var result = (value + '');
-  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
-
-/**
- * Checks if `value` is likely an `arguments` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an `arguments` object,
- *  else `false`.
- * @example
- *
- * _.isArguments(function() { return arguments; }());
- * // => true
- *
- * _.isArguments([1, 2, 3]);
- * // => false
- */
-function isArguments(value) {
-  // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
-  return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
-    (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
-}
-
-/**
- * Checks if `value` is classified as an `Array` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array, else `false`.
- * @example
- *
- * _.isArray([1, 2, 3]);
- * // => true
- *
- * _.isArray(document.body.children);
- * // => false
- *
- * _.isArray('abc');
- * // => false
- *
- * _.isArray(_.noop);
- * // => false
- */
-var isArray = Array.isArray;
-
-/**
- * Checks if `value` is array-like. A value is considered array-like if it's
- * not a function and has a `value.length` that's an integer greater than or
- * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
- * @example
- *
- * _.isArrayLike([1, 2, 3]);
- * // => true
- *
- * _.isArrayLike(document.body.children);
- * // => true
- *
- * _.isArrayLike('abc');
- * // => true
- *
- * _.isArrayLike(_.noop);
- * // => false
- */
-function isArrayLike(value) {
-  return value != null && isLength(value.length) && !isFunction(value);
-}
-
-/**
- * This method is like `_.isArrayLike` except that it also checks if `value`
- * is an object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array-like object,
- *  else `false`.
- * @example
- *
- * _.isArrayLikeObject([1, 2, 3]);
- * // => true
- *
- * _.isArrayLikeObject(document.body.children);
- * // => true
- *
- * _.isArrayLikeObject('abc');
- * // => false
- *
- * _.isArrayLikeObject(_.noop);
- * // => false
- */
-function isArrayLikeObject(value) {
-  return isObjectLike(value) && isArrayLike(value);
-}
-
-/**
- * Checks if `value` is classified as a `Function` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- *
- * _.isFunction(/abc/);
- * // => false
- */
-function isFunction(value) {
-  // The use of `Object#toString` avoids issues with the `typeof` operator
-  // in Safari 8-9 which returns 'object' for typed array and other constructors.
-  var tag = isObject(value) ? objectToString.call(value) : '';
-  return tag == funcTag || tag == genTag;
-}
-
-/**
- * Checks if `value` is a valid array-like length.
- *
- * **Note:** This method is loosely based on
- * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
- * @example
- *
- * _.isLength(3);
- * // => true
- *
- * _.isLength(Number.MIN_VALUE);
- * // => false
- *
- * _.isLength(Infinity);
- * // => false
- *
- * _.isLength('3');
- * // => false
- */
-function isLength(value) {
-  return typeof value == 'number' &&
-    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
-}
-
-/**
- * Checks if `value` is the
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(_.noop);
- * // => true
- *
- * _.isObject(null);
- * // => false
- */
-function isObject(value) {
-  var type = typeof value;
-  return !!value && (type == 'object' || type == 'function');
-}
-
-/**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
- *
- * _.isObjectLike(null);
- * // => false
- */
-function isObjectLike(value) {
-  return !!value && typeof value == 'object';
-}
-
-/**
- * Checks if `value` is classified as a `Symbol` primitive or object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
- * @example
- *
- * _.isSymbol(Symbol.iterator);
- * // => true
- *
- * _.isSymbol('abc');
- * // => false
- */
-function isSymbol(value) {
-  return typeof value == 'symbol' ||
-    (isObjectLike(value) && objectToString.call(value) == symbolTag);
-}
-
-/**
- * Creates an object composed of the picked `object` properties.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The source object.
- * @param {...(string|string[])} [props] The property identifiers to pick.
- * @returns {Object} Returns the new object.
- * @example
- *
- * var object = { 'a': 1, 'b': '2', 'c': 3 };
- *
- * _.pick(object, ['a', 'c']);
- * // => { 'a': 1, 'c': 3 }
- */
-var pick = baseRest(function(object, props) {
-  return object == null ? {} : basePick(object, arrayMap(baseFlatten(props, 1), toKey));
-});
-
-module.exports = pick;
-
-
-/***/ }),
-
-/***/ 18552:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getNative = __webpack_require__(10852),
-    root = __webpack_require__(55639);
-
-/* Built-in method references that are verified to be native. */
-var DataView = getNative(root, 'DataView');
-
-module.exports = DataView;
-
-
-/***/ }),
-
-/***/ 1989:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var hashClear = __webpack_require__(51789),
-    hashDelete = __webpack_require__(80401),
-    hashGet = __webpack_require__(57667),
-    hashHas = __webpack_require__(21327),
-    hashSet = __webpack_require__(81866);
-
-/**
- * Creates a hash object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function Hash(entries) {
-  var index = -1,
-      length = entries == null ? 0 : entries.length;
-
-  this.clear();
-  while (++index < length) {
-    var entry = entries[index];
-    this.set(entry[0], entry[1]);
-  }
-}
-
-// Add methods to `Hash`.
-Hash.prototype.clear = hashClear;
-Hash.prototype['delete'] = hashDelete;
-Hash.prototype.get = hashGet;
-Hash.prototype.has = hashHas;
-Hash.prototype.set = hashSet;
-
-module.exports = Hash;
-
-
-/***/ }),
-
-/***/ 38407:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var listCacheClear = __webpack_require__(27040),
-    listCacheDelete = __webpack_require__(14125),
-    listCacheGet = __webpack_require__(82117),
-    listCacheHas = __webpack_require__(67518),
-    listCacheSet = __webpack_require__(54705);
-
-/**
- * Creates an list cache object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function ListCache(entries) {
-  var index = -1,
-      length = entries == null ? 0 : entries.length;
-
-  this.clear();
-  while (++index < length) {
-    var entry = entries[index];
-    this.set(entry[0], entry[1]);
-  }
-}
-
-// Add methods to `ListCache`.
-ListCache.prototype.clear = listCacheClear;
-ListCache.prototype['delete'] = listCacheDelete;
-ListCache.prototype.get = listCacheGet;
-ListCache.prototype.has = listCacheHas;
-ListCache.prototype.set = listCacheSet;
-
-module.exports = ListCache;
-
-
-/***/ }),
-
-/***/ 57071:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getNative = __webpack_require__(10852),
-    root = __webpack_require__(55639);
-
-/* Built-in method references that are verified to be native. */
-var Map = getNative(root, 'Map');
-
-module.exports = Map;
-
-
-/***/ }),
-
-/***/ 83369:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var mapCacheClear = __webpack_require__(24785),
-    mapCacheDelete = __webpack_require__(11285),
-    mapCacheGet = __webpack_require__(96000),
-    mapCacheHas = __webpack_require__(49916),
-    mapCacheSet = __webpack_require__(95265);
-
-/**
- * Creates a map cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function MapCache(entries) {
-  var index = -1,
-      length = entries == null ? 0 : entries.length;
-
-  this.clear();
-  while (++index < length) {
-    var entry = entries[index];
-    this.set(entry[0], entry[1]);
-  }
-}
-
-// Add methods to `MapCache`.
-MapCache.prototype.clear = mapCacheClear;
-MapCache.prototype['delete'] = mapCacheDelete;
-MapCache.prototype.get = mapCacheGet;
-MapCache.prototype.has = mapCacheHas;
-MapCache.prototype.set = mapCacheSet;
-
-module.exports = MapCache;
-
-
-/***/ }),
-
-/***/ 53818:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getNative = __webpack_require__(10852),
-    root = __webpack_require__(55639);
-
-/* Built-in method references that are verified to be native. */
-var Promise = getNative(root, 'Promise');
-
-module.exports = Promise;
-
-
-/***/ }),
-
-/***/ 58525:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getNative = __webpack_require__(10852),
-    root = __webpack_require__(55639);
-
-/* Built-in method references that are verified to be native. */
-var Set = getNative(root, 'Set');
-
-module.exports = Set;
-
-
-/***/ }),
-
-/***/ 88668:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var MapCache = __webpack_require__(83369),
-    setCacheAdd = __webpack_require__(90619),
-    setCacheHas = __webpack_require__(72385);
-
-/**
- *
- * Creates an array cache object to store unique values.
- *
- * @private
- * @constructor
- * @param {Array} [values] The values to cache.
- */
-function SetCache(values) {
-  var index = -1,
-      length = values == null ? 0 : values.length;
-
-  this.__data__ = new MapCache;
-  while (++index < length) {
-    this.add(values[index]);
-  }
-}
-
-// Add methods to `SetCache`.
-SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
-SetCache.prototype.has = setCacheHas;
-
-module.exports = SetCache;
-
-
-/***/ }),
-
-/***/ 46384:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var ListCache = __webpack_require__(38407),
-    stackClear = __webpack_require__(37465),
-    stackDelete = __webpack_require__(63779),
-    stackGet = __webpack_require__(67599),
-    stackHas = __webpack_require__(44758),
-    stackSet = __webpack_require__(34309);
-
-/**
- * Creates a stack cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function Stack(entries) {
-  var data = this.__data__ = new ListCache(entries);
-  this.size = data.size;
-}
-
-// Add methods to `Stack`.
-Stack.prototype.clear = stackClear;
-Stack.prototype['delete'] = stackDelete;
-Stack.prototype.get = stackGet;
-Stack.prototype.has = stackHas;
-Stack.prototype.set = stackSet;
-
-module.exports = Stack;
-
-
-/***/ }),
-
-/***/ 62705:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var root = __webpack_require__(55639);
-
-/** Built-in value references. */
-var Symbol = root.Symbol;
-
-module.exports = Symbol;
-
-
-/***/ }),
-
-/***/ 11149:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var root = __webpack_require__(55639);
-
-/** Built-in value references. */
-var Uint8Array = root.Uint8Array;
-
-module.exports = Uint8Array;
-
-
-/***/ }),
-
-/***/ 70577:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getNative = __webpack_require__(10852),
-    root = __webpack_require__(55639);
-
-/* Built-in method references that are verified to be native. */
-var WeakMap = getNative(root, 'WeakMap');
-
-module.exports = WeakMap;
-
-
-/***/ }),
-
-/***/ 96874:
-/***/ ((module) => {
-
-/**
- * A faster alternative to `Function#apply`, this function invokes `func`
- * with the `this` binding of `thisArg` and the arguments of `args`.
- *
- * @private
- * @param {Function} func The function to invoke.
- * @param {*} thisArg The `this` binding of `func`.
- * @param {Array} args The arguments to invoke `func` with.
- * @returns {*} Returns the result of `func`.
- */
-function apply(func, thisArg, args) {
-  switch (args.length) {
-    case 0: return func.call(thisArg);
-    case 1: return func.call(thisArg, args[0]);
-    case 2: return func.call(thisArg, args[0], args[1]);
-    case 3: return func.call(thisArg, args[0], args[1], args[2]);
-  }
-  return func.apply(thisArg, args);
-}
-
-module.exports = apply;
-
-
-/***/ }),
-
-/***/ 44174:
-/***/ ((module) => {
-
-/**
- * A specialized version of `baseAggregator` for arrays.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} setter The function to set `accumulator` values.
- * @param {Function} iteratee The iteratee to transform keys.
- * @param {Object} accumulator The initial aggregated object.
- * @returns {Function} Returns `accumulator`.
- */
-function arrayAggregator(array, setter, iteratee, accumulator) {
-  var index = -1,
-      length = array == null ? 0 : array.length;
-
-  while (++index < length) {
-    var value = array[index];
-    setter(accumulator, value, iteratee(value), array);
-  }
-  return accumulator;
-}
-
-module.exports = arrayAggregator;
-
-
-/***/ }),
-
-/***/ 77412:
-/***/ ((module) => {
-
-/**
- * A specialized version of `_.forEach` for arrays without support for
- * iteratee shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns `array`.
- */
-function arrayEach(array, iteratee) {
-  var index = -1,
-      length = array == null ? 0 : array.length;
-
-  while (++index < length) {
-    if (iteratee(array[index], index, array) === false) {
-      break;
-    }
-  }
-  return array;
-}
-
-module.exports = arrayEach;
-
-
-/***/ }),
-
-/***/ 66193:
-/***/ ((module) => {
-
-/**
- * A specialized version of `_.every` for arrays without support for
- * iteratee shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {boolean} Returns `true` if all elements pass the predicate check,
- *  else `false`.
- */
-function arrayEvery(array, predicate) {
-  var index = -1,
-      length = array == null ? 0 : array.length;
-
-  while (++index < length) {
-    if (!predicate(array[index], index, array)) {
-      return false;
-    }
-  }
-  return true;
-}
-
-module.exports = arrayEvery;
-
-
-/***/ }),
-
-/***/ 34963:
-/***/ ((module) => {
-
-/**
- * A specialized version of `_.filter` for arrays without support for
- * iteratee shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {Array} Returns the new filtered array.
- */
-function arrayFilter(array, predicate) {
-  var index = -1,
-      length = array == null ? 0 : array.length,
-      resIndex = 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-    if (predicate(value, index, array)) {
-      result[resIndex++] = value;
-    }
-  }
-  return result;
-}
-
-module.exports = arrayFilter;
-
-
-/***/ }),
-
-/***/ 47443:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseIndexOf = __webpack_require__(42118);
-
-/**
- * A specialized version of `_.includes` for arrays without support for
- * specifying an index to search from.
- *
- * @private
- * @param {Array} [array] The array to inspect.
- * @param {*} target The value to search for.
- * @returns {boolean} Returns `true` if `target` is found, else `false`.
- */
-function arrayIncludes(array, value) {
-  var length = array == null ? 0 : array.length;
-  return !!length && baseIndexOf(array, value, 0) > -1;
-}
-
-module.exports = arrayIncludes;
-
-
-/***/ }),
-
-/***/ 1196:
-/***/ ((module) => {
-
-/**
- * This function is like `arrayIncludes` except that it accepts a comparator.
- *
- * @private
- * @param {Array} [array] The array to inspect.
- * @param {*} target The value to search for.
- * @param {Function} comparator The comparator invoked per element.
- * @returns {boolean} Returns `true` if `target` is found, else `false`.
- */
-function arrayIncludesWith(array, value, comparator) {
-  var index = -1,
-      length = array == null ? 0 : array.length;
-
-  while (++index < length) {
-    if (comparator(value, array[index])) {
-      return true;
-    }
-  }
-  return false;
-}
-
-module.exports = arrayIncludesWith;
-
-
-/***/ }),
-
-/***/ 14636:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseTimes = __webpack_require__(22545),
-    isArguments = __webpack_require__(35694),
-    isArray = __webpack_require__(1469),
-    isBuffer = __webpack_require__(44144),
-    isIndex = __webpack_require__(65776),
-    isTypedArray = __webpack_require__(36719);
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates an array of the enumerable property names of the array-like `value`.
- *
- * @private
- * @param {*} value The value to query.
- * @param {boolean} inherited Specify returning inherited property names.
- * @returns {Array} Returns the array of property names.
- */
-function arrayLikeKeys(value, inherited) {
-  var isArr = isArray(value),
-      isArg = !isArr && isArguments(value),
-      isBuff = !isArr && !isArg && isBuffer(value),
-      isType = !isArr && !isArg && !isBuff && isTypedArray(value),
-      skipIndexes = isArr || isArg || isBuff || isType,
-      result = skipIndexes ? baseTimes(value.length, String) : [],
-      length = result.length;
-
-  for (var key in value) {
-    if ((inherited || hasOwnProperty.call(value, key)) &&
-        !(skipIndexes && (
-           // Safari 9 has enumerable `arguments.length` in strict mode.
-           key == 'length' ||
-           // Node.js 0.10 has enumerable non-index properties on buffers.
-           (isBuff && (key == 'offset' || key == 'parent')) ||
-           // PhantomJS 2 has enumerable non-index properties on typed arrays.
-           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
-           // Skip index properties.
-           isIndex(key, length)
-        ))) {
-      result.push(key);
-    }
-  }
-  return result;
-}
-
-module.exports = arrayLikeKeys;
-
-
-/***/ }),
-
-/***/ 29932:
-/***/ ((module) => {
-
-/**
- * A specialized version of `_.map` for arrays without support for iteratee
- * shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the new mapped array.
- */
-function arrayMap(array, iteratee) {
-  var index = -1,
-      length = array == null ? 0 : array.length,
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = iteratee(array[index], index, array);
-  }
-  return result;
-}
-
-module.exports = arrayMap;
-
-
-/***/ }),
-
-/***/ 62488:
-/***/ ((module) => {
-
-/**
- * Appends the elements of `values` to `array`.
- *
- * @private
- * @param {Array} array The array to modify.
- * @param {Array} values The values to append.
- * @returns {Array} Returns `array`.
- */
-function arrayPush(array, values) {
-  var index = -1,
-      length = values.length,
-      offset = array.length;
-
-  while (++index < length) {
-    array[offset + index] = values[index];
-  }
-  return array;
-}
-
-module.exports = arrayPush;
-
-
-/***/ }),
-
-/***/ 62663:
-/***/ ((module) => {
-
-/**
- * A specialized version of `_.reduce` for arrays without support for
- * iteratee shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @param {*} [accumulator] The initial value.
- * @param {boolean} [initAccum] Specify using the first element of `array` as
- *  the initial value.
- * @returns {*} Returns the accumulated value.
- */
-function arrayReduce(array, iteratee, accumulator, initAccum) {
-  var index = -1,
-      length = array == null ? 0 : array.length;
-
-  if (initAccum && length) {
-    accumulator = array[++index];
-  }
-  while (++index < length) {
-    accumulator = iteratee(accumulator, array[index], index, array);
-  }
-  return accumulator;
-}
-
-module.exports = arrayReduce;
-
-
-/***/ }),
-
-/***/ 82908:
-/***/ ((module) => {
-
-/**
- * A specialized version of `_.some` for arrays without support for iteratee
- * shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {boolean} Returns `true` if any element passes the predicate check,
- *  else `false`.
- */
-function arraySome(array, predicate) {
-  var index = -1,
-      length = array == null ? 0 : array.length;
-
-  while (++index < length) {
-    if (predicate(array[index], index, array)) {
-      return true;
-    }
-  }
-  return false;
-}
-
-module.exports = arraySome;
-
-
-/***/ }),
-
-/***/ 44286:
-/***/ ((module) => {
-
-/**
- * Converts an ASCII `string` to an array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the converted array.
- */
-function asciiToArray(string) {
-  return string.split('');
-}
-
-module.exports = asciiToArray;
-
-
-/***/ }),
-
-/***/ 34865:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseAssignValue = __webpack_require__(89465),
-    eq = __webpack_require__(77813);
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Assigns `value` to `key` of `object` if the existing value is not equivalent
- * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * for equality comparisons.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {string} key The key of the property to assign.
- * @param {*} value The value to assign.
- */
-function assignValue(object, key, value) {
-  var objValue = object[key];
-  if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
-      (value === undefined && !(key in object))) {
-    baseAssignValue(object, key, value);
-  }
-}
-
-module.exports = assignValue;
-
-
-/***/ }),
-
-/***/ 18470:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var eq = __webpack_require__(77813);
-
-/**
- * Gets the index at which the `key` is found in `array` of key-value pairs.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} key The key to search for.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function assocIndexOf(array, key) {
-  var length = array.length;
-  while (length--) {
-    if (eq(array[length][0], key)) {
-      return length;
-    }
-  }
-  return -1;
-}
-
-module.exports = assocIndexOf;
-
-
-/***/ }),
-
-/***/ 81119:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseEach = __webpack_require__(89881);
-
-/**
- * Aggregates elements of `collection` on `accumulator` with keys transformed
- * by `iteratee` and values set by `setter`.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} setter The function to set `accumulator` values.
- * @param {Function} iteratee The iteratee to transform keys.
- * @param {Object} accumulator The initial aggregated object.
- * @returns {Function} Returns `accumulator`.
- */
-function baseAggregator(collection, setter, iteratee, accumulator) {
-  baseEach(collection, function(value, key, collection) {
-    setter(accumulator, value, iteratee(value), collection);
-  });
-  return accumulator;
-}
-
-module.exports = baseAggregator;
-
-
-/***/ }),
-
-/***/ 44037:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var copyObject = __webpack_require__(98363),
-    keys = __webpack_require__(3674);
-
-/**
- * The base implementation of `_.assign` without support for multiple sources
- * or `customizer` functions.
- *
- * @private
- * @param {Object} object The destination object.
- * @param {Object} source The source object.
- * @returns {Object} Returns `object`.
- */
-function baseAssign(object, source) {
-  return object && copyObject(source, keys(source), object);
-}
-
-module.exports = baseAssign;
-
-
-/***/ }),
-
-/***/ 63886:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var copyObject = __webpack_require__(98363),
-    keysIn = __webpack_require__(81704);
-
-/**
- * The base implementation of `_.assignIn` without support for multiple sources
- * or `customizer` functions.
- *
- * @private
- * @param {Object} object The destination object.
- * @param {Object} source The source object.
- * @returns {Object} Returns `object`.
- */
-function baseAssignIn(object, source) {
-  return object && copyObject(source, keysIn(source), object);
-}
-
-module.exports = baseAssignIn;
-
-
-/***/ }),
-
-/***/ 89465:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var defineProperty = __webpack_require__(38777);
-
-/**
- * The base implementation of `assignValue` and `assignMergeValue` without
- * value checks.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {string} key The key of the property to assign.
- * @param {*} value The value to assign.
- */
-function baseAssignValue(object, key, value) {
-  if (key == '__proto__' && defineProperty) {
-    defineProperty(object, key, {
-      'configurable': true,
-      'enumerable': true,
-      'value': value,
-      'writable': true
-    });
-  } else {
-    object[key] = value;
-  }
-}
-
-module.exports = baseAssignValue;
-
-
-/***/ }),
-
-/***/ 85990:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Stack = __webpack_require__(46384),
-    arrayEach = __webpack_require__(77412),
-    assignValue = __webpack_require__(34865),
-    baseAssign = __webpack_require__(44037),
-    baseAssignIn = __webpack_require__(63886),
-    cloneBuffer = __webpack_require__(64626),
-    copyArray = __webpack_require__(278),
-    copySymbols = __webpack_require__(18805),
-    copySymbolsIn = __webpack_require__(1911),
-    getAllKeys = __webpack_require__(58234),
-    getAllKeysIn = __webpack_require__(46904),
-    getTag = __webpack_require__(64160),
-    initCloneArray = __webpack_require__(43824),
-    initCloneByTag = __webpack_require__(29148),
-    initCloneObject = __webpack_require__(38517),
-    isArray = __webpack_require__(1469),
-    isBuffer = __webpack_require__(44144),
-    isMap = __webpack_require__(56688),
-    isObject = __webpack_require__(13218),
-    isSet = __webpack_require__(72928),
-    keys = __webpack_require__(3674),
-    keysIn = __webpack_require__(81704);
-
-/** Used to compose bitmasks for cloning. */
-var CLONE_DEEP_FLAG = 1,
-    CLONE_FLAT_FLAG = 2,
-    CLONE_SYMBOLS_FLAG = 4;
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]',
-    arrayTag = '[object Array]',
-    boolTag = '[object Boolean]',
-    dateTag = '[object Date]',
-    errorTag = '[object Error]',
-    funcTag = '[object Function]',
-    genTag = '[object GeneratorFunction]',
-    mapTag = '[object Map]',
-    numberTag = '[object Number]',
-    objectTag = '[object Object]',
-    regexpTag = '[object RegExp]',
-    setTag = '[object Set]',
-    stringTag = '[object String]',
-    symbolTag = '[object Symbol]',
-    weakMapTag = '[object WeakMap]';
-
-var arrayBufferTag = '[object ArrayBuffer]',
-    dataViewTag = '[object DataView]',
-    float32Tag = '[object Float32Array]',
-    float64Tag = '[object Float64Array]',
-    int8Tag = '[object Int8Array]',
-    int16Tag = '[object Int16Array]',
-    int32Tag = '[object Int32Array]',
-    uint8Tag = '[object Uint8Array]',
-    uint8ClampedTag = '[object Uint8ClampedArray]',
-    uint16Tag = '[object Uint16Array]',
-    uint32Tag = '[object Uint32Array]';
-
-/** Used to identify `toStringTag` values supported by `_.clone`. */
-var cloneableTags = {};
-cloneableTags[argsTag] = cloneableTags[arrayTag] =
-cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
-cloneableTags[boolTag] = cloneableTags[dateTag] =
-cloneableTags[float32Tag] = cloneableTags[float64Tag] =
-cloneableTags[int8Tag] = cloneableTags[int16Tag] =
-cloneableTags[int32Tag] = cloneableTags[mapTag] =
-cloneableTags[numberTag] = cloneableTags[objectTag] =
-cloneableTags[regexpTag] = cloneableTags[setTag] =
-cloneableTags[stringTag] = cloneableTags[symbolTag] =
-cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
-cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
-cloneableTags[errorTag] = cloneableTags[funcTag] =
-cloneableTags[weakMapTag] = false;
-
-/**
- * The base implementation of `_.clone` and `_.cloneDeep` which tracks
- * traversed objects.
- *
- * @private
- * @param {*} value The value to clone.
- * @param {boolean} bitmask The bitmask flags.
- *  1 - Deep clone
- *  2 - Flatten inherited properties
- *  4 - Clone symbols
- * @param {Function} [customizer] The function to customize cloning.
- * @param {string} [key] The key of `value`.
- * @param {Object} [object] The parent object of `value`.
- * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
- * @returns {*} Returns the cloned value.
- */
-function baseClone(value, bitmask, customizer, key, object, stack) {
-  var result,
-      isDeep = bitmask & CLONE_DEEP_FLAG,
-      isFlat = bitmask & CLONE_FLAT_FLAG,
-      isFull = bitmask & CLONE_SYMBOLS_FLAG;
-
-  if (customizer) {
-    result = object ? customizer(value, key, object, stack) : customizer(value);
-  }
-  if (result !== undefined) {
-    return result;
-  }
-  if (!isObject(value)) {
-    return value;
-  }
-  var isArr = isArray(value);
-  if (isArr) {
-    result = initCloneArray(value);
-    if (!isDeep) {
-      return copyArray(value, result);
-    }
-  } else {
-    var tag = getTag(value),
-        isFunc = tag == funcTag || tag == genTag;
-
-    if (isBuffer(value)) {
-      return cloneBuffer(value, isDeep);
-    }
-    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
-      result = (isFlat || isFunc) ? {} : initCloneObject(value);
-      if (!isDeep) {
-        return isFlat
-          ? copySymbolsIn(value, baseAssignIn(result, value))
-          : copySymbols(value, baseAssign(result, value));
-      }
-    } else {
-      if (!cloneableTags[tag]) {
-        return object ? value : {};
-      }
-      result = initCloneByTag(value, tag, isDeep);
-    }
-  }
-  // Check for circular references and return its corresponding clone.
-  stack || (stack = new Stack);
-  var stacked = stack.get(value);
-  if (stacked) {
-    return stacked;
-  }
-  stack.set(value, result);
-
-  if (isSet(value)) {
-    value.forEach(function(subValue) {
-      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
-    });
-  } else if (isMap(value)) {
-    value.forEach(function(subValue, key) {
-      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
-    });
-  }
-
-  var keysFunc = isFull
-    ? (isFlat ? getAllKeysIn : getAllKeys)
-    : (isFlat ? keysIn : keys);
-
-  var props = isArr ? undefined : keysFunc(value);
-  arrayEach(props || value, function(subValue, key) {
-    if (props) {
-      key = subValue;
-      subValue = value[key];
-    }
-    // Recursively populate clone (susceptible to call stack limits).
-    assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
-  });
-  return result;
-}
-
-module.exports = baseClone;
-
-
-/***/ }),
-
-/***/ 3118:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isObject = __webpack_require__(13218);
-
-/** Built-in value references. */
-var objectCreate = Object.create;
-
-/**
- * The base implementation of `_.create` without support for assigning
- * properties to the created object.
- *
- * @private
- * @param {Object} proto The object to inherit from.
- * @returns {Object} Returns the new object.
- */
-var baseCreate = (function() {
-  function object() {}
-  return function(proto) {
-    if (!isObject(proto)) {
-      return {};
-    }
-    if (objectCreate) {
-      return objectCreate(proto);
-    }
-    object.prototype = proto;
-    var result = new object;
-    object.prototype = undefined;
-    return result;
-  };
-}());
-
-module.exports = baseCreate;
-
-
-/***/ }),
-
-/***/ 20731:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var SetCache = __webpack_require__(88668),
-    arrayIncludes = __webpack_require__(47443),
-    arrayIncludesWith = __webpack_require__(1196),
-    arrayMap = __webpack_require__(29932),
-    baseUnary = __webpack_require__(7518),
-    cacheHas = __webpack_require__(74757);
-
-/** Used as the size to enable large array optimizations. */
-var LARGE_ARRAY_SIZE = 200;
-
-/**
- * The base implementation of methods like `_.difference` without support
- * for excluding multiple arrays or iteratee shorthands.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {Array} values The values to exclude.
- * @param {Function} [iteratee] The iteratee invoked per element.
- * @param {Function} [comparator] The comparator invoked per element.
- * @returns {Array} Returns the new array of filtered values.
- */
-function baseDifference(array, values, iteratee, comparator) {
-  var index = -1,
-      includes = arrayIncludes,
-      isCommon = true,
-      length = array.length,
-      result = [],
-      valuesLength = values.length;
-
-  if (!length) {
-    return result;
-  }
-  if (iteratee) {
-    values = arrayMap(values, baseUnary(iteratee));
-  }
-  if (comparator) {
-    includes = arrayIncludesWith;
-    isCommon = false;
-  }
-  else if (values.length >= LARGE_ARRAY_SIZE) {
-    includes = cacheHas;
-    isCommon = false;
-    values = new SetCache(values);
-  }
-  outer:
-  while (++index < length) {
-    var value = array[index],
-        computed = iteratee == null ? value : iteratee(value);
-
-    value = (comparator || value !== 0) ? value : 0;
-    if (isCommon && computed === computed) {
-      var valuesIndex = valuesLength;
-      while (valuesIndex--) {
-        if (values[valuesIndex] === computed) {
-          continue outer;
-        }
-      }
-      result.push(value);
-    }
-    else if (!includes(values, computed, comparator)) {
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = baseDifference;
-
-
-/***/ }),
-
-/***/ 89881:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseForOwn = __webpack_require__(47816),
-    createBaseEach = __webpack_require__(99291);
-
-/**
- * The base implementation of `_.forEach` without support for iteratee shorthands.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array|Object} Returns `collection`.
- */
-var baseEach = createBaseEach(baseForOwn);
-
-module.exports = baseEach;
-
-
-/***/ }),
-
-/***/ 93239:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseEach = __webpack_require__(89881);
-
-/**
- * The base implementation of `_.every` without support for iteratee shorthands.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {boolean} Returns `true` if all elements pass the predicate check,
- *  else `false`
- */
-function baseEvery(collection, predicate) {
-  var result = true;
-  baseEach(collection, function(value, index, collection) {
-    result = !!predicate(value, index, collection);
-    return result;
-  });
-  return result;
-}
-
-module.exports = baseEvery;
-
-
-/***/ }),
-
-/***/ 80760:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseEach = __webpack_require__(89881);
-
-/**
- * The base implementation of `_.filter` without support for iteratee shorthands.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {Array} Returns the new filtered array.
- */
-function baseFilter(collection, predicate) {
-  var result = [];
-  baseEach(collection, function(value, index, collection) {
-    if (predicate(value, index, collection)) {
-      result.push(value);
-    }
-  });
-  return result;
-}
-
-module.exports = baseFilter;
-
-
-/***/ }),
-
-/***/ 41848:
-/***/ ((module) => {
-
-/**
- * The base implementation of `_.findIndex` and `_.findLastIndex` without
- * support for iteratee shorthands.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {Function} predicate The function invoked per iteration.
- * @param {number} fromIndex The index to search from.
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function baseFindIndex(array, predicate, fromIndex, fromRight) {
-  var length = array.length,
-      index = fromIndex + (fromRight ? 1 : -1);
-
-  while ((fromRight ? index-- : ++index < length)) {
-    if (predicate(array[index], index, array)) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = baseFindIndex;
-
-
-/***/ }),
-
-/***/ 21078:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayPush = __webpack_require__(62488),
-    isFlattenable = __webpack_require__(37285);
-
-/**
- * The base implementation of `_.flatten` with support for restricting flattening.
- *
- * @private
- * @param {Array} array The array to flatten.
- * @param {number} depth The maximum recursion depth.
- * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
- * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
- * @param {Array} [result=[]] The initial result value.
- * @returns {Array} Returns the new flattened array.
- */
-function baseFlatten(array, depth, predicate, isStrict, result) {
-  var index = -1,
-      length = array.length;
-
-  predicate || (predicate = isFlattenable);
-  result || (result = []);
-
-  while (++index < length) {
-    var value = array[index];
-    if (depth > 0 && predicate(value)) {
-      if (depth > 1) {
-        // Recursively flatten arrays (susceptible to call stack limits).
-        baseFlatten(value, depth - 1, predicate, isStrict, result);
-      } else {
-        arrayPush(result, value);
-      }
-    } else if (!isStrict) {
-      result[result.length] = value;
-    }
-  }
-  return result;
-}
-
-module.exports = baseFlatten;
-
-
-/***/ }),
-
-/***/ 28483:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var createBaseFor = __webpack_require__(25063);
-
-/**
- * The base implementation of `baseForOwn` which iterates over `object`
- * properties returned by `keysFunc` and invokes `iteratee` for each property.
- * Iteratee functions may exit iteration early by explicitly returning `false`.
- *
- * @private
- * @param {Object} object The object to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @param {Function} keysFunc The function to get the keys of `object`.
- * @returns {Object} Returns `object`.
- */
-var baseFor = createBaseFor();
-
-module.exports = baseFor;
-
-
-/***/ }),
-
-/***/ 47816:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseFor = __webpack_require__(28483),
-    keys = __webpack_require__(3674);
-
-/**
- * The base implementation of `_.forOwn` without support for iteratee shorthands.
- *
- * @private
- * @param {Object} object The object to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Object} Returns `object`.
- */
-function baseForOwn(object, iteratee) {
-  return object && baseFor(object, iteratee, keys);
-}
-
-module.exports = baseForOwn;
-
-
-/***/ }),
-
-/***/ 97786:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var castPath = __webpack_require__(71811),
-    toKey = __webpack_require__(40327);
-
-/**
- * The base implementation of `_.get` without support for default values.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array|string} path The path of the property to get.
- * @returns {*} Returns the resolved value.
- */
-function baseGet(object, path) {
-  path = castPath(path, object);
-
-  var index = 0,
-      length = path.length;
-
-  while (object != null && index < length) {
-    object = object[toKey(path[index++])];
-  }
-  return (index && index == length) ? object : undefined;
-}
-
-module.exports = baseGet;
-
-
-/***/ }),
-
-/***/ 68866:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayPush = __webpack_require__(62488),
-    isArray = __webpack_require__(1469);
-
-/**
- * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
- * `keysFunc` and `symbolsFunc` to get the enumerable property names and
- * symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Function} keysFunc The function to get the keys of `object`.
- * @param {Function} symbolsFunc The function to get the symbols of `object`.
- * @returns {Array} Returns the array of property names and symbols.
- */
-function baseGetAllKeys(object, keysFunc, symbolsFunc) {
-  var result = keysFunc(object);
-  return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
-}
-
-module.exports = baseGetAllKeys;
-
-
-/***/ }),
-
-/***/ 44239:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Symbol = __webpack_require__(62705),
-    getRawTag = __webpack_require__(89607),
-    objectToString = __webpack_require__(2333);
-
-/** `Object#toString` result references. */
-var nullTag = '[object Null]',
-    undefinedTag = '[object Undefined]';
-
-/** Built-in value references. */
-var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
-
-/**
- * The base implementation of `getTag` without fallbacks for buggy environments.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
-function baseGetTag(value) {
-  if (value == null) {
-    return value === undefined ? undefinedTag : nullTag;
-  }
-  return (symToStringTag && symToStringTag in Object(value))
-    ? getRawTag(value)
-    : objectToString(value);
-}
-
-module.exports = baseGetTag;
-
-
-/***/ }),
-
-/***/ 78565:
-/***/ ((module) => {
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * The base implementation of `_.has` without support for deep paths.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {Array|string} key The key to check.
- * @returns {boolean} Returns `true` if `key` exists, else `false`.
- */
-function baseHas(object, key) {
-  return object != null && hasOwnProperty.call(object, key);
-}
-
-module.exports = baseHas;
-
-
-/***/ }),
-
-/***/ 13:
-/***/ ((module) => {
-
-/**
- * The base implementation of `_.hasIn` without support for deep paths.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {Array|string} key The key to check.
- * @returns {boolean} Returns `true` if `key` exists, else `false`.
- */
-function baseHasIn(object, key) {
-  return object != null && key in Object(object);
-}
-
-module.exports = baseHasIn;
-
-
-/***/ }),
-
-/***/ 42118:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseFindIndex = __webpack_require__(41848),
-    baseIsNaN = __webpack_require__(62722),
-    strictIndexOf = __webpack_require__(42351);
-
-/**
- * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} value The value to search for.
- * @param {number} fromIndex The index to search from.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function baseIndexOf(array, value, fromIndex) {
-  return value === value
-    ? strictIndexOf(array, value, fromIndex)
-    : baseFindIndex(array, baseIsNaN, fromIndex);
-}
-
-module.exports = baseIndexOf;
-
-
-/***/ }),
-
-/***/ 9454:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseGetTag = __webpack_require__(44239),
-    isObjectLike = __webpack_require__(37005);
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]';
-
-/**
- * The base implementation of `_.isArguments`.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an `arguments` object,
- */
-function baseIsArguments(value) {
-  return isObjectLike(value) && baseGetTag(value) == argsTag;
-}
-
-module.exports = baseIsArguments;
-
-
-/***/ }),
-
-/***/ 90939:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseIsEqualDeep = __webpack_require__(2492),
-    isObjectLike = __webpack_require__(37005);
-
-/**
- * The base implementation of `_.isEqual` which supports partial comparisons
- * and tracks traversed objects.
- *
- * @private
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @param {boolean} bitmask The bitmask flags.
- *  1 - Unordered comparison
- *  2 - Partial comparison
- * @param {Function} [customizer] The function to customize comparisons.
- * @param {Object} [stack] Tracks traversed `value` and `other` objects.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- */
-function baseIsEqual(value, other, bitmask, customizer, stack) {
-  if (value === other) {
-    return true;
-  }
-  if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
-    return value !== value && other !== other;
-  }
-  return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
-}
-
-module.exports = baseIsEqual;
-
-
-/***/ }),
-
-/***/ 2492:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Stack = __webpack_require__(46384),
-    equalArrays = __webpack_require__(67114),
-    equalByTag = __webpack_require__(18351),
-    equalObjects = __webpack_require__(16096),
-    getTag = __webpack_require__(64160),
-    isArray = __webpack_require__(1469),
-    isBuffer = __webpack_require__(44144),
-    isTypedArray = __webpack_require__(36719);
-
-/** Used to compose bitmasks for value comparisons. */
-var COMPARE_PARTIAL_FLAG = 1;
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]',
-    arrayTag = '[object Array]',
-    objectTag = '[object Object]';
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * A specialized version of `baseIsEqual` for arrays and objects which performs
- * deep comparisons and tracks traversed objects enabling objects with circular
- * references to be compared.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
- * @param {Function} customizer The function to customize comparisons.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Object} [stack] Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
-function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
-  var objIsArr = isArray(object),
-      othIsArr = isArray(other),
-      objTag = objIsArr ? arrayTag : getTag(object),
-      othTag = othIsArr ? arrayTag : getTag(other);
-
-  objTag = objTag == argsTag ? objectTag : objTag;
-  othTag = othTag == argsTag ? objectTag : othTag;
-
-  var objIsObj = objTag == objectTag,
-      othIsObj = othTag == objectTag,
-      isSameTag = objTag == othTag;
-
-  if (isSameTag && isBuffer(object)) {
-    if (!isBuffer(other)) {
-      return false;
-    }
-    objIsArr = true;
-    objIsObj = false;
-  }
-  if (isSameTag && !objIsObj) {
-    stack || (stack = new Stack);
-    return (objIsArr || isTypedArray(object))
-      ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
-      : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
-  }
-  if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
-    var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
-        othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
-
-    if (objIsWrapped || othIsWrapped) {
-      var objUnwrapped = objIsWrapped ? object.value() : object,
-          othUnwrapped = othIsWrapped ? other.value() : other;
-
-      stack || (stack = new Stack);
-      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
-    }
-  }
-  if (!isSameTag) {
-    return false;
-  }
-  stack || (stack = new Stack);
-  return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
-}
-
-module.exports = baseIsEqualDeep;
-
-
-/***/ }),
-
-/***/ 25588:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getTag = __webpack_require__(64160),
-    isObjectLike = __webpack_require__(37005);
-
-/** `Object#toString` result references. */
-var mapTag = '[object Map]';
-
-/**
- * The base implementation of `_.isMap` without Node.js optimizations.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a map, else `false`.
- */
-function baseIsMap(value) {
-  return isObjectLike(value) && getTag(value) == mapTag;
-}
-
-module.exports = baseIsMap;
-
-
-/***/ }),
-
-/***/ 2958:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Stack = __webpack_require__(46384),
-    baseIsEqual = __webpack_require__(90939);
-
-/** Used to compose bitmasks for value comparisons. */
-var COMPARE_PARTIAL_FLAG = 1,
-    COMPARE_UNORDERED_FLAG = 2;
-
-/**
- * The base implementation of `_.isMatch` without support for iteratee shorthands.
- *
- * @private
- * @param {Object} object The object to inspect.
- * @param {Object} source The object of property values to match.
- * @param {Array} matchData The property names, values, and compare flags to match.
- * @param {Function} [customizer] The function to customize comparisons.
- * @returns {boolean} Returns `true` if `object` is a match, else `false`.
- */
-function baseIsMatch(object, source, matchData, customizer) {
-  var index = matchData.length,
-      length = index,
-      noCustomizer = !customizer;
-
-  if (object == null) {
-    return !length;
-  }
-  object = Object(object);
-  while (index--) {
-    var data = matchData[index];
-    if ((noCustomizer && data[2])
-          ? data[1] !== object[data[0]]
-          : !(data[0] in object)
-        ) {
-      return false;
-    }
-  }
-  while (++index < length) {
-    data = matchData[index];
-    var key = data[0],
-        objValue = object[key],
-        srcValue = data[1];
-
-    if (noCustomizer && data[2]) {
-      if (objValue === undefined && !(key in object)) {
-        return false;
-      }
-    } else {
-      var stack = new Stack;
-      if (customizer) {
-        var result = customizer(objValue, srcValue, key, object, source, stack);
-      }
-      if (!(result === undefined
-            ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
-            : result
-          )) {
-        return false;
-      }
-    }
-  }
-  return true;
-}
-
-module.exports = baseIsMatch;
-
-
-/***/ }),
-
-/***/ 62722:
-/***/ ((module) => {
-
-/**
- * The base implementation of `_.isNaN` without support for number objects.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
- */
-function baseIsNaN(value) {
-  return value !== value;
-}
-
-module.exports = baseIsNaN;
-
-
-/***/ }),
-
-/***/ 28458:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isFunction = __webpack_require__(23560),
-    isMasked = __webpack_require__(15346),
-    isObject = __webpack_require__(13218),
-    toSource = __webpack_require__(80346);
-
-/**
- * Used to match `RegExp`
- * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
- */
-var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
-
-/** Used to detect host constructors (Safari). */
-var reIsHostCtor = /^\[object .+?Constructor\]$/;
-
-/** Used for built-in method references. */
-var funcProto = Function.prototype,
-    objectProto = Object.prototype;
-
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/** Used to detect if a method is native. */
-var reIsNative = RegExp('^' +
-  funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
-  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
-);
-
-/**
- * The base implementation of `_.isNative` without bad shim checks.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a native function,
- *  else `false`.
- */
-function baseIsNative(value) {
-  if (!isObject(value) || isMasked(value)) {
-    return false;
-  }
-  var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
-  return pattern.test(toSource(value));
-}
-
-module.exports = baseIsNative;
-
-
-/***/ }),
-
-/***/ 23933:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseGetTag = __webpack_require__(44239),
-    isObjectLike = __webpack_require__(37005);
-
-/** `Object#toString` result references. */
-var regexpTag = '[object RegExp]';
-
-/**
- * The base implementation of `_.isRegExp` without Node.js optimizations.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
- */
-function baseIsRegExp(value) {
-  return isObjectLike(value) && baseGetTag(value) == regexpTag;
-}
-
-module.exports = baseIsRegExp;
-
-
-/***/ }),
-
-/***/ 29221:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getTag = __webpack_require__(64160),
-    isObjectLike = __webpack_require__(37005);
-
-/** `Object#toString` result references. */
-var setTag = '[object Set]';
-
-/**
- * The base implementation of `_.isSet` without Node.js optimizations.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a set, else `false`.
- */
-function baseIsSet(value) {
-  return isObjectLike(value) && getTag(value) == setTag;
-}
-
-module.exports = baseIsSet;
-
-
-/***/ }),
-
-/***/ 38749:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseGetTag = __webpack_require__(44239),
-    isLength = __webpack_require__(41780),
-    isObjectLike = __webpack_require__(37005);
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]',
-    arrayTag = '[object Array]',
-    boolTag = '[object Boolean]',
-    dateTag = '[object Date]',
-    errorTag = '[object Error]',
-    funcTag = '[object Function]',
-    mapTag = '[object Map]',
-    numberTag = '[object Number]',
-    objectTag = '[object Object]',
-    regexpTag = '[object RegExp]',
-    setTag = '[object Set]',
-    stringTag = '[object String]',
-    weakMapTag = '[object WeakMap]';
-
-var arrayBufferTag = '[object ArrayBuffer]',
-    dataViewTag = '[object DataView]',
-    float32Tag = '[object Float32Array]',
-    float64Tag = '[object Float64Array]',
-    int8Tag = '[object Int8Array]',
-    int16Tag = '[object Int16Array]',
-    int32Tag = '[object Int32Array]',
-    uint8Tag = '[object Uint8Array]',
-    uint8ClampedTag = '[object Uint8ClampedArray]',
-    uint16Tag = '[object Uint16Array]',
-    uint32Tag = '[object Uint32Array]';
-
-/** Used to identify `toStringTag` values of typed arrays. */
-var typedArrayTags = {};
-typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
-typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
-typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
-typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
-typedArrayTags[uint32Tag] = true;
-typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
-typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
-typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
-typedArrayTags[errorTag] = typedArrayTags[funcTag] =
-typedArrayTags[mapTag] = typedArrayTags[numberTag] =
-typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
-typedArrayTags[setTag] = typedArrayTags[stringTag] =
-typedArrayTags[weakMapTag] = false;
-
-/**
- * The base implementation of `_.isTypedArray` without Node.js optimizations.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
- */
-function baseIsTypedArray(value) {
-  return isObjectLike(value) &&
-    isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
-}
-
-module.exports = baseIsTypedArray;
-
-
-/***/ }),
-
-/***/ 67206:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseMatches = __webpack_require__(91573),
-    baseMatchesProperty = __webpack_require__(16432),
-    identity = __webpack_require__(6557),
-    isArray = __webpack_require__(1469),
-    property = __webpack_require__(39601);
-
-/**
- * The base implementation of `_.iteratee`.
- *
- * @private
- * @param {*} [value=_.identity] The value to convert to an iteratee.
- * @returns {Function} Returns the iteratee.
- */
-function baseIteratee(value) {
-  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
-  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
-  if (typeof value == 'function') {
-    return value;
-  }
-  if (value == null) {
-    return identity;
-  }
-  if (typeof value == 'object') {
-    return isArray(value)
-      ? baseMatchesProperty(value[0], value[1])
-      : baseMatches(value);
-  }
-  return property(value);
-}
-
-module.exports = baseIteratee;
-
-
-/***/ }),
-
-/***/ 280:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isPrototype = __webpack_require__(25726),
-    nativeKeys = __webpack_require__(86916);
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
-function baseKeys(object) {
-  if (!isPrototype(object)) {
-    return nativeKeys(object);
-  }
-  var result = [];
-  for (var key in Object(object)) {
-    if (hasOwnProperty.call(object, key) && key != 'constructor') {
-      result.push(key);
-    }
-  }
-  return result;
-}
-
-module.exports = baseKeys;
-
-
-/***/ }),
-
-/***/ 10313:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isObject = __webpack_require__(13218),
-    isPrototype = __webpack_require__(25726),
-    nativeKeysIn = __webpack_require__(33498);
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
-function baseKeysIn(object) {
-  if (!isObject(object)) {
-    return nativeKeysIn(object);
-  }
-  var isProto = isPrototype(object),
-      result = [];
-
-  for (var key in object) {
-    if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
-      result.push(key);
-    }
-  }
-  return result;
-}
-
-module.exports = baseKeysIn;
-
-
-/***/ }),
-
-/***/ 69199:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseEach = __webpack_require__(89881),
-    isArrayLike = __webpack_require__(98612);
-
-/**
- * The base implementation of `_.map` without support for iteratee shorthands.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the new mapped array.
- */
-function baseMap(collection, iteratee) {
-  var index = -1,
-      result = isArrayLike(collection) ? Array(collection.length) : [];
-
-  baseEach(collection, function(value, key, collection) {
-    result[++index] = iteratee(value, key, collection);
-  });
-  return result;
-}
-
-module.exports = baseMap;
-
-
-/***/ }),
-
-/***/ 91573:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseIsMatch = __webpack_require__(2958),
-    getMatchData = __webpack_require__(1499),
-    matchesStrictComparable = __webpack_require__(42634);
-
-/**
- * The base implementation of `_.matches` which doesn't clone `source`.
- *
- * @private
- * @param {Object} source The object of property values to match.
- * @returns {Function} Returns the new spec function.
- */
-function baseMatches(source) {
-  var matchData = getMatchData(source);
-  if (matchData.length == 1 && matchData[0][2]) {
-    return matchesStrictComparable(matchData[0][0], matchData[0][1]);
-  }
-  return function(object) {
-    return object === source || baseIsMatch(object, source, matchData);
-  };
-}
-
-module.exports = baseMatches;
-
-
-/***/ }),
-
-/***/ 16432:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseIsEqual = __webpack_require__(90939),
-    get = __webpack_require__(27361),
-    hasIn = __webpack_require__(79095),
-    isKey = __webpack_require__(15403),
-    isStrictComparable = __webpack_require__(89162),
-    matchesStrictComparable = __webpack_require__(42634),
-    toKey = __webpack_require__(40327);
-
-/** Used to compose bitmasks for value comparisons. */
-var COMPARE_PARTIAL_FLAG = 1,
-    COMPARE_UNORDERED_FLAG = 2;
-
-/**
- * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
- *
- * @private
- * @param {string} path The path of the property to get.
- * @param {*} srcValue The value to match.
- * @returns {Function} Returns the new spec function.
- */
-function baseMatchesProperty(path, srcValue) {
-  if (isKey(path) && isStrictComparable(srcValue)) {
-    return matchesStrictComparable(toKey(path), srcValue);
-  }
-  return function(object) {
-    var objValue = get(object, path);
-    return (objValue === undefined && objValue === srcValue)
-      ? hasIn(object, path)
-      : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
-  };
-}
-
-module.exports = baseMatchesProperty;
-
-
-/***/ }),
-
-/***/ 63012:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseGet = __webpack_require__(97786),
-    baseSet = __webpack_require__(10611),
-    castPath = __webpack_require__(71811);
-
-/**
- * The base implementation of  `_.pickBy` without support for iteratee shorthands.
- *
- * @private
- * @param {Object} object The source object.
- * @param {string[]} paths The property paths to pick.
- * @param {Function} predicate The function invoked per property.
- * @returns {Object} Returns the new object.
- */
-function basePickBy(object, paths, predicate) {
-  var index = -1,
-      length = paths.length,
-      result = {};
-
-  while (++index < length) {
-    var path = paths[index],
-        value = baseGet(object, path);
-
-    if (predicate(value, path)) {
-      baseSet(result, castPath(path, object), value);
-    }
-  }
-  return result;
-}
-
-module.exports = basePickBy;
-
-
-/***/ }),
-
-/***/ 40371:
-/***/ ((module) => {
-
-/**
- * The base implementation of `_.property` without support for deep paths.
- *
- * @private
- * @param {string} key The key of the property to get.
- * @returns {Function} Returns the new accessor function.
- */
-function baseProperty(key) {
-  return function(object) {
-    return object == null ? undefined : object[key];
-  };
-}
-
-module.exports = baseProperty;
-
-
-/***/ }),
-
-/***/ 79152:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseGet = __webpack_require__(97786);
-
-/**
- * A specialized version of `baseProperty` which supports deep paths.
- *
- * @private
- * @param {Array|string} path The path of the property to get.
- * @returns {Function} Returns the new accessor function.
- */
-function basePropertyDeep(path) {
-  return function(object) {
-    return baseGet(object, path);
-  };
-}
-
-module.exports = basePropertyDeep;
-
-
-/***/ }),
-
-/***/ 10107:
-/***/ ((module) => {
-
-/**
- * The base implementation of `_.reduce` and `_.reduceRight`, without support
- * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @param {*} accumulator The initial value.
- * @param {boolean} initAccum Specify using the first or last element of
- *  `collection` as the initial value.
- * @param {Function} eachFunc The function to iterate over `collection`.
- * @returns {*} Returns the accumulated value.
- */
-function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
-  eachFunc(collection, function(value, index, collection) {
-    accumulator = initAccum
-      ? (initAccum = false, value)
-      : iteratee(accumulator, value, index, collection);
-  });
-  return accumulator;
-}
-
-module.exports = baseReduce;
-
-
-/***/ }),
-
-/***/ 5976:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var identity = __webpack_require__(6557),
-    overRest = __webpack_require__(45357),
-    setToString = __webpack_require__(30061);
-
-/**
- * The base implementation of `_.rest` which doesn't validate or coerce arguments.
- *
- * @private
- * @param {Function} func The function to apply a rest parameter to.
- * @param {number} [start=func.length-1] The start position of the rest parameter.
- * @returns {Function} Returns the new function.
- */
-function baseRest(func, start) {
-  return setToString(overRest(func, start, identity), func + '');
-}
-
-module.exports = baseRest;
-
-
-/***/ }),
-
-/***/ 10611:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var assignValue = __webpack_require__(34865),
-    castPath = __webpack_require__(71811),
-    isIndex = __webpack_require__(65776),
-    isObject = __webpack_require__(13218),
-    toKey = __webpack_require__(40327);
-
-/**
- * The base implementation of `_.set`.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {Array|string} path The path of the property to set.
- * @param {*} value The value to set.
- * @param {Function} [customizer] The function to customize path creation.
- * @returns {Object} Returns `object`.
- */
-function baseSet(object, path, value, customizer) {
-  if (!isObject(object)) {
-    return object;
-  }
-  path = castPath(path, object);
-
-  var index = -1,
-      length = path.length,
-      lastIndex = length - 1,
-      nested = object;
-
-  while (nested != null && ++index < length) {
-    var key = toKey(path[index]),
-        newValue = value;
-
-    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
-      return object;
-    }
-
-    if (index != lastIndex) {
-      var objValue = nested[key];
-      newValue = customizer ? customizer(objValue, key, nested) : undefined;
-      if (newValue === undefined) {
-        newValue = isObject(objValue)
-          ? objValue
-          : (isIndex(path[index + 1]) ? [] : {});
-      }
-    }
-    assignValue(nested, key, newValue);
-    nested = nested[key];
-  }
-  return object;
-}
-
-module.exports = baseSet;
-
-
-/***/ }),
-
-/***/ 56560:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var constant = __webpack_require__(75703),
-    defineProperty = __webpack_require__(38777),
-    identity = __webpack_require__(6557);
-
-/**
- * The base implementation of `setToString` without support for hot loop shorting.
- *
- * @private
- * @param {Function} func The function to modify.
- * @param {Function} string The `toString` result.
- * @returns {Function} Returns `func`.
- */
-var baseSetToString = !defineProperty ? identity : function(func, string) {
-  return defineProperty(func, 'toString', {
-    'configurable': true,
-    'enumerable': false,
-    'value': constant(string),
-    'writable': true
-  });
-};
-
-module.exports = baseSetToString;
-
-
-/***/ }),
-
-/***/ 14259:
-/***/ ((module) => {
-
-/**
- * The base implementation of `_.slice` without an iteratee call guard.
- *
- * @private
- * @param {Array} array The array to slice.
- * @param {number} [start=0] The start position.
- * @param {number} [end=array.length] The end position.
- * @returns {Array} Returns the slice of `array`.
- */
-function baseSlice(array, start, end) {
-  var index = -1,
-      length = array.length;
-
-  if (start < 0) {
-    start = -start > length ? 0 : (length + start);
-  }
-  end = end > length ? length : end;
-  if (end < 0) {
-    end += length;
-  }
-  length = start > end ? 0 : ((end - start) >>> 0);
-  start >>>= 0;
-
-  var result = Array(length);
-  while (++index < length) {
-    result[index] = array[index + start];
-  }
-  return result;
-}
-
-module.exports = baseSlice;
-
-
-/***/ }),
-
-/***/ 5076:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseEach = __webpack_require__(89881);
-
-/**
- * The base implementation of `_.some` without support for iteratee shorthands.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {boolean} Returns `true` if any element passes the predicate check,
- *  else `false`.
- */
-function baseSome(collection, predicate) {
-  var result;
-
-  baseEach(collection, function(value, index, collection) {
-    result = predicate(value, index, collection);
-    return !result;
-  });
-  return !!result;
-}
-
-module.exports = baseSome;
-
-
-/***/ }),
-
-/***/ 22545:
-/***/ ((module) => {
-
-/**
- * The base implementation of `_.times` without support for iteratee shorthands
- * or max array length checks.
- *
- * @private
- * @param {number} n The number of times to invoke `iteratee`.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the array of results.
- */
-function baseTimes(n, iteratee) {
-  var index = -1,
-      result = Array(n);
-
-  while (++index < n) {
-    result[index] = iteratee(index);
-  }
-  return result;
-}
-
-module.exports = baseTimes;
-
-
-/***/ }),
-
-/***/ 80531:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Symbol = __webpack_require__(62705),
-    arrayMap = __webpack_require__(29932),
-    isArray = __webpack_require__(1469),
-    isSymbol = __webpack_require__(33448);
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0;
-
-/** Used to convert symbols to primitives and strings. */
-var symbolProto = Symbol ? Symbol.prototype : undefined,
-    symbolToString = symbolProto ? symbolProto.toString : undefined;
-
-/**
- * The base implementation of `_.toString` which doesn't convert nullish
- * values to empty strings.
- *
- * @private
- * @param {*} value The value to process.
- * @returns {string} Returns the string.
- */
-function baseToString(value) {
-  // Exit early for strings to avoid a performance hit in some environments.
-  if (typeof value == 'string') {
-    return value;
-  }
-  if (isArray(value)) {
-    // Recursively convert values (susceptible to call stack limits).
-    return arrayMap(value, baseToString) + '';
-  }
-  if (isSymbol(value)) {
-    return symbolToString ? symbolToString.call(value) : '';
-  }
-  var result = (value + '');
-  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
-
-module.exports = baseToString;
-
-
-/***/ }),
-
-/***/ 27561:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var trimmedEndIndex = __webpack_require__(67990);
-
-/** Used to match leading whitespace. */
-var reTrimStart = /^\s+/;
-
-/**
- * The base implementation of `_.trim`.
- *
- * @private
- * @param {string} string The string to trim.
- * @returns {string} Returns the trimmed string.
- */
-function baseTrim(string) {
-  return string
-    ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
-    : string;
-}
-
-module.exports = baseTrim;
-
-
-/***/ }),
-
-/***/ 7518:
-/***/ ((module) => {
-
-/**
- * The base implementation of `_.unary` without support for storing metadata.
- *
- * @private
- * @param {Function} func The function to cap arguments for.
- * @returns {Function} Returns the new capped function.
- */
-function baseUnary(func) {
-  return function(value) {
-    return func(value);
-  };
-}
-
-module.exports = baseUnary;
-
-
-/***/ }),
-
-/***/ 45652:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var SetCache = __webpack_require__(88668),
-    arrayIncludes = __webpack_require__(47443),
-    arrayIncludesWith = __webpack_require__(1196),
-    cacheHas = __webpack_require__(74757),
-    createSet = __webpack_require__(23593),
-    setToArray = __webpack_require__(21814);
-
-/** Used as the size to enable large array optimizations. */
-var LARGE_ARRAY_SIZE = 200;
-
-/**
- * The base implementation of `_.uniqBy` without support for iteratee shorthands.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {Function} [iteratee] The iteratee invoked per element.
- * @param {Function} [comparator] The comparator invoked per element.
- * @returns {Array} Returns the new duplicate free array.
- */
-function baseUniq(array, iteratee, comparator) {
-  var index = -1,
-      includes = arrayIncludes,
-      length = array.length,
-      isCommon = true,
-      result = [],
-      seen = result;
-
-  if (comparator) {
-    isCommon = false;
-    includes = arrayIncludesWith;
-  }
-  else if (length >= LARGE_ARRAY_SIZE) {
-    var set = iteratee ? null : createSet(array);
-    if (set) {
-      return setToArray(set);
-    }
-    isCommon = false;
-    includes = cacheHas;
-    seen = new SetCache;
-  }
-  else {
-    seen = iteratee ? [] : result;
-  }
-  outer:
-  while (++index < length) {
-    var value = array[index],
-        computed = iteratee ? iteratee(value) : value;
-
-    value = (comparator || value !== 0) ? value : 0;
-    if (isCommon && computed === computed) {
-      var seenIndex = seen.length;
-      while (seenIndex--) {
-        if (seen[seenIndex] === computed) {
-          continue outer;
-        }
-      }
-      if (iteratee) {
-        seen.push(computed);
-      }
-      result.push(value);
-    }
-    else if (!includes(seen, computed, comparator)) {
-      if (seen !== result) {
-        seen.push(computed);
-      }
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-module.exports = baseUniq;
-
-
-/***/ }),
-
-/***/ 57406:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var castPath = __webpack_require__(71811),
-    last = __webpack_require__(10928),
-    parent = __webpack_require__(40292),
-    toKey = __webpack_require__(40327);
-
-/**
- * The base implementation of `_.unset`.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {Array|string} path The property path to unset.
- * @returns {boolean} Returns `true` if the property is deleted, else `false`.
- */
-function baseUnset(object, path) {
-  path = castPath(path, object);
-  object = parent(object, path);
-  return object == null || delete object[toKey(last(path))];
-}
-
-module.exports = baseUnset;
-
-
-/***/ }),
-
-/***/ 47415:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayMap = __webpack_require__(29932);
-
-/**
- * The base implementation of `_.values` and `_.valuesIn` which creates an
- * array of `object` property values corresponding to the property names
- * of `props`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array} props The property names to get values for.
- * @returns {Object} Returns the array of property values.
- */
-function baseValues(object, props) {
-  return arrayMap(props, function(key) {
-    return object[key];
-  });
-}
-
-module.exports = baseValues;
-
-
-/***/ }),
-
-/***/ 74757:
-/***/ ((module) => {
-
-/**
- * Checks if a `cache` value for `key` exists.
- *
- * @private
- * @param {Object} cache The cache to query.
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function cacheHas(cache, key) {
-  return cache.has(key);
-}
-
-module.exports = cacheHas;
-
-
-/***/ }),
-
-/***/ 54290:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var identity = __webpack_require__(6557);
-
-/**
- * Casts `value` to `identity` if it's not a function.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {Function} Returns cast function.
- */
-function castFunction(value) {
-  return typeof value == 'function' ? value : identity;
-}
-
-module.exports = castFunction;
-
-
-/***/ }),
-
-/***/ 71811:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isArray = __webpack_require__(1469),
-    isKey = __webpack_require__(15403),
-    stringToPath = __webpack_require__(55514),
-    toString = __webpack_require__(79833);
-
-/**
- * Casts `value` to a path array if it's not one.
- *
- * @private
- * @param {*} value The value to inspect.
- * @param {Object} [object] The object to query keys on.
- * @returns {Array} Returns the cast property path array.
- */
-function castPath(value, object) {
-  if (isArray(value)) {
-    return value;
-  }
-  return isKey(value, object) ? [value] : stringToPath(toString(value));
-}
-
-module.exports = castPath;
-
-
-/***/ }),
-
-/***/ 40180:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseSlice = __webpack_require__(14259);
-
-/**
- * Casts `array` to a slice if it's needed.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {number} start The start position.
- * @param {number} [end=array.length] The end position.
- * @returns {Array} Returns the cast slice.
- */
-function castSlice(array, start, end) {
-  var length = array.length;
-  end = end === undefined ? length : end;
-  return (!start && end >= length) ? array : baseSlice(array, start, end);
-}
-
-module.exports = castSlice;
-
-
-/***/ }),
-
-/***/ 74318:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Uint8Array = __webpack_require__(11149);
-
-/**
- * Creates a clone of `arrayBuffer`.
- *
- * @private
- * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
- * @returns {ArrayBuffer} Returns the cloned array buffer.
- */
-function cloneArrayBuffer(arrayBuffer) {
-  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
-  new Uint8Array(result).set(new Uint8Array(arrayBuffer));
-  return result;
-}
-
-module.exports = cloneArrayBuffer;
-
-
-/***/ }),
-
-/***/ 64626:
-/***/ ((module, exports, __webpack_require__) => {
-
-/* module decorator */ module = __webpack_require__.nmd(module);
-var root = __webpack_require__(55639);
-
-/** Detect free variable `exports`. */
-var freeExports =  true && exports && !exports.nodeType && exports;
-
-/** Detect free variable `module`. */
-var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module;
-
-/** Detect the popular CommonJS extension `module.exports`. */
-var moduleExports = freeModule && freeModule.exports === freeExports;
-
-/** Built-in value references. */
-var Buffer = moduleExports ? root.Buffer : undefined,
-    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;
-
-/**
- * Creates a clone of  `buffer`.
- *
- * @private
- * @param {Buffer} buffer The buffer to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Buffer} Returns the cloned buffer.
- */
-function cloneBuffer(buffer, isDeep) {
-  if (isDeep) {
-    return buffer.slice();
-  }
-  var length = buffer.length,
-      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
-
-  buffer.copy(result);
-  return result;
-}
-
-module.exports = cloneBuffer;
-
-
-/***/ }),
-
-/***/ 57157:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var cloneArrayBuffer = __webpack_require__(74318);
-
-/**
- * Creates a clone of `dataView`.
- *
- * @private
- * @param {Object} dataView The data view to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Object} Returns the cloned data view.
- */
-function cloneDataView(dataView, isDeep) {
-  var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
-  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
-}
-
-module.exports = cloneDataView;
-
-
-/***/ }),
-
-/***/ 93147:
-/***/ ((module) => {
-
-/** Used to match `RegExp` flags from their coerced string values. */
-var reFlags = /\w*$/;
-
-/**
- * Creates a clone of `regexp`.
- *
- * @private
- * @param {Object} regexp The regexp to clone.
- * @returns {Object} Returns the cloned regexp.
- */
-function cloneRegExp(regexp) {
-  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
-  result.lastIndex = regexp.lastIndex;
-  return result;
-}
-
-module.exports = cloneRegExp;
-
-
-/***/ }),
-
-/***/ 40419:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Symbol = __webpack_require__(62705);
-
-/** Used to convert symbols to primitives and strings. */
-var symbolProto = Symbol ? Symbol.prototype : undefined,
-    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
-
-/**
- * Creates a clone of the `symbol` object.
- *
- * @private
- * @param {Object} symbol The symbol object to clone.
- * @returns {Object} Returns the cloned symbol object.
- */
-function cloneSymbol(symbol) {
-  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
-}
-
-module.exports = cloneSymbol;
-
-
-/***/ }),
-
-/***/ 77133:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var cloneArrayBuffer = __webpack_require__(74318);
-
-/**
- * Creates a clone of `typedArray`.
- *
- * @private
- * @param {Object} typedArray The typed array to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Object} Returns the cloned typed array.
- */
-function cloneTypedArray(typedArray, isDeep) {
-  var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
-  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
-}
-
-module.exports = cloneTypedArray;
-
-
-/***/ }),
-
-/***/ 278:
-/***/ ((module) => {
-
-/**
- * Copies the values of `source` to `array`.
- *
- * @private
- * @param {Array} source The array to copy values from.
- * @param {Array} [array=[]] The array to copy values to.
- * @returns {Array} Returns `array`.
- */
-function copyArray(source, array) {
-  var index = -1,
-      length = source.length;
-
-  array || (array = Array(length));
-  while (++index < length) {
-    array[index] = source[index];
-  }
-  return array;
-}
-
-module.exports = copyArray;
-
-
-/***/ }),
-
-/***/ 98363:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var assignValue = __webpack_require__(34865),
-    baseAssignValue = __webpack_require__(89465);
-
-/**
- * Copies properties of `source` to `object`.
- *
- * @private
- * @param {Object} source The object to copy properties from.
- * @param {Array} props The property identifiers to copy.
- * @param {Object} [object={}] The object to copy properties to.
- * @param {Function} [customizer] The function to customize copied values.
- * @returns {Object} Returns `object`.
- */
-function copyObject(source, props, object, customizer) {
-  var isNew = !object;
-  object || (object = {});
-
-  var index = -1,
-      length = props.length;
-
-  while (++index < length) {
-    var key = props[index];
-
-    var newValue = customizer
-      ? customizer(object[key], source[key], key, object, source)
-      : undefined;
-
-    if (newValue === undefined) {
-      newValue = source[key];
-    }
-    if (isNew) {
-      baseAssignValue(object, key, newValue);
-    } else {
-      assignValue(object, key, newValue);
-    }
-  }
-  return object;
-}
-
-module.exports = copyObject;
-
-
-/***/ }),
-
-/***/ 18805:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var copyObject = __webpack_require__(98363),
-    getSymbols = __webpack_require__(99551);
-
-/**
- * Copies own symbols of `source` to `object`.
- *
- * @private
- * @param {Object} source The object to copy symbols from.
- * @param {Object} [object={}] The object to copy symbols to.
- * @returns {Object} Returns `object`.
- */
-function copySymbols(source, object) {
-  return copyObject(source, getSymbols(source), object);
-}
-
-module.exports = copySymbols;
-
-
-/***/ }),
-
-/***/ 1911:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var copyObject = __webpack_require__(98363),
-    getSymbolsIn = __webpack_require__(51442);
-
-/**
- * Copies own and inherited symbols of `source` to `object`.
- *
- * @private
- * @param {Object} source The object to copy symbols from.
- * @param {Object} [object={}] The object to copy symbols to.
- * @returns {Object} Returns `object`.
- */
-function copySymbolsIn(source, object) {
-  return copyObject(source, getSymbolsIn(source), object);
-}
-
-module.exports = copySymbolsIn;
-
-
-/***/ }),
-
-/***/ 14429:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var root = __webpack_require__(55639);
-
-/** Used to detect overreaching core-js shims. */
-var coreJsData = root['__core-js_shared__'];
-
-module.exports = coreJsData;
-
-
-/***/ }),
-
-/***/ 55189:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayAggregator = __webpack_require__(44174),
-    baseAggregator = __webpack_require__(81119),
-    baseIteratee = __webpack_require__(67206),
-    isArray = __webpack_require__(1469);
-
-/**
- * Creates a function like `_.groupBy`.
- *
- * @private
- * @param {Function} setter The function to set accumulator values.
- * @param {Function} [initializer] The accumulator object initializer.
- * @returns {Function} Returns the new aggregator function.
- */
-function createAggregator(setter, initializer) {
-  return function(collection, iteratee) {
-    var func = isArray(collection) ? arrayAggregator : baseAggregator,
-        accumulator = initializer ? initializer() : {};
-
-    return func(collection, setter, baseIteratee(iteratee, 2), accumulator);
-  };
-}
-
-module.exports = createAggregator;
-
-
-/***/ }),
-
-/***/ 21463:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseRest = __webpack_require__(5976),
-    isIterateeCall = __webpack_require__(16612);
-
-/**
- * Creates a function like `_.assign`.
- *
- * @private
- * @param {Function} assigner The function to assign values.
- * @returns {Function} Returns the new assigner function.
- */
-function createAssigner(assigner) {
-  return baseRest(function(object, sources) {
-    var index = -1,
-        length = sources.length,
-        customizer = length > 1 ? sources[length - 1] : undefined,
-        guard = length > 2 ? sources[2] : undefined;
-
-    customizer = (assigner.length > 3 && typeof customizer == 'function')
-      ? (length--, customizer)
-      : undefined;
-
-    if (guard && isIterateeCall(sources[0], sources[1], guard)) {
-      customizer = length < 3 ? undefined : customizer;
-      length = 1;
-    }
-    object = Object(object);
-    while (++index < length) {
-      var source = sources[index];
-      if (source) {
-        assigner(object, source, index, customizer);
-      }
-    }
-    return object;
-  });
-}
-
-module.exports = createAssigner;
-
-
-/***/ }),
-
-/***/ 99291:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isArrayLike = __webpack_require__(98612);
-
-/**
- * Creates a `baseEach` or `baseEachRight` function.
- *
- * @private
- * @param {Function} eachFunc The function to iterate over a collection.
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {Function} Returns the new base function.
- */
-function createBaseEach(eachFunc, fromRight) {
-  return function(collection, iteratee) {
-    if (collection == null) {
-      return collection;
-    }
-    if (!isArrayLike(collection)) {
-      return eachFunc(collection, iteratee);
-    }
-    var length = collection.length,
-        index = fromRight ? length : -1,
-        iterable = Object(collection);
-
-    while ((fromRight ? index-- : ++index < length)) {
-      if (iteratee(iterable[index], index, iterable) === false) {
-        break;
-      }
-    }
-    return collection;
-  };
-}
-
-module.exports = createBaseEach;
-
-
-/***/ }),
-
-/***/ 25063:
-/***/ ((module) => {
-
-/**
- * Creates a base function for methods like `_.forIn` and `_.forOwn`.
- *
- * @private
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {Function} Returns the new base function.
- */
-function createBaseFor(fromRight) {
-  return function(object, iteratee, keysFunc) {
-    var index = -1,
-        iterable = Object(object),
-        props = keysFunc(object),
-        length = props.length;
-
-    while (length--) {
-      var key = props[fromRight ? length : ++index];
-      if (iteratee(iterable[key], key, iterable) === false) {
-        break;
-      }
-    }
-    return object;
-  };
-}
-
-module.exports = createBaseFor;
-
-
-/***/ }),
-
-/***/ 98805:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var castSlice = __webpack_require__(40180),
-    hasUnicode = __webpack_require__(62689),
-    stringToArray = __webpack_require__(83140),
-    toString = __webpack_require__(79833);
-
-/**
- * Creates a function like `_.lowerFirst`.
- *
- * @private
- * @param {string} methodName The name of the `String` case method to use.
- * @returns {Function} Returns the new case function.
- */
-function createCaseFirst(methodName) {
-  return function(string) {
-    string = toString(string);
-
-    var strSymbols = hasUnicode(string)
-      ? stringToArray(string)
-      : undefined;
-
-    var chr = strSymbols
-      ? strSymbols[0]
-      : string.charAt(0);
-
-    var trailing = strSymbols
-      ? castSlice(strSymbols, 1).join('')
-      : string.slice(1);
-
-    return chr[methodName]() + trailing;
-  };
-}
-
-module.exports = createCaseFirst;
-
-
-/***/ }),
-
-/***/ 67740:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseIteratee = __webpack_require__(67206),
-    isArrayLike = __webpack_require__(98612),
-    keys = __webpack_require__(3674);
-
-/**
- * Creates a `_.find` or `_.findLast` function.
- *
- * @private
- * @param {Function} findIndexFunc The function to find the collection index.
- * @returns {Function} Returns the new find function.
- */
-function createFind(findIndexFunc) {
-  return function(collection, predicate, fromIndex) {
-    var iterable = Object(collection);
-    if (!isArrayLike(collection)) {
-      var iteratee = baseIteratee(predicate, 3);
-      collection = keys(collection);
-      predicate = function(key) { return iteratee(iterable[key], key, iterable); };
-    }
-    var index = findIndexFunc(collection, predicate, fromIndex);
-    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
-  };
-}
-
-module.exports = createFind;
-
-
-/***/ }),
-
-/***/ 23593:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Set = __webpack_require__(58525),
-    noop = __webpack_require__(50308),
-    setToArray = __webpack_require__(21814);
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0;
-
-/**
- * Creates a set object of `values`.
- *
- * @private
- * @param {Array} values The values to add to the set.
- * @returns {Object} Returns the new set.
- */
-var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
-  return new Set(values);
-};
-
-module.exports = createSet;
-
-
-/***/ }),
-
-/***/ 60696:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isPlainObject = __webpack_require__(68630);
-
-/**
- * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
- * objects.
- *
- * @private
- * @param {*} value The value to inspect.
- * @param {string} key The key of the property to inspect.
- * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
- */
-function customOmitClone(value) {
-  return isPlainObject(value) ? undefined : value;
-}
-
-module.exports = customOmitClone;
-
-
-/***/ }),
-
-/***/ 38777:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getNative = __webpack_require__(10852);
-
-var defineProperty = (function() {
-  try {
-    var func = getNative(Object, 'defineProperty');
-    func({}, '', {});
-    return func;
-  } catch (e) {}
-}());
-
-module.exports = defineProperty;
-
-
-/***/ }),
-
-/***/ 67114:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var SetCache = __webpack_require__(88668),
-    arraySome = __webpack_require__(82908),
-    cacheHas = __webpack_require__(74757);
-
-/** Used to compose bitmasks for value comparisons. */
-var COMPARE_PARTIAL_FLAG = 1,
-    COMPARE_UNORDERED_FLAG = 2;
-
-/**
- * A specialized version of `baseIsEqualDeep` for arrays with support for
- * partial deep comparisons.
- *
- * @private
- * @param {Array} array The array to compare.
- * @param {Array} other The other array to compare.
- * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
- * @param {Function} customizer The function to customize comparisons.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Object} stack Tracks traversed `array` and `other` objects.
- * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
- */
-function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
-  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
-      arrLength = array.length,
-      othLength = other.length;
-
-  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
-    return false;
-  }
-  // Check that cyclic values are equal.
-  var arrStacked = stack.get(array);
-  var othStacked = stack.get(other);
-  if (arrStacked && othStacked) {
-    return arrStacked == other && othStacked == array;
-  }
-  var index = -1,
-      result = true,
-      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
-
-  stack.set(array, other);
-  stack.set(other, array);
-
-  // Ignore non-index properties.
-  while (++index < arrLength) {
-    var arrValue = array[index],
-        othValue = other[index];
-
-    if (customizer) {
-      var compared = isPartial
-        ? customizer(othValue, arrValue, index, other, array, stack)
-        : customizer(arrValue, othValue, index, array, other, stack);
-    }
-    if (compared !== undefined) {
-      if (compared) {
-        continue;
-      }
-      result = false;
-      break;
-    }
-    // Recursively compare arrays (susceptible to call stack limits).
-    if (seen) {
-      if (!arraySome(other, function(othValue, othIndex) {
-            if (!cacheHas(seen, othIndex) &&
-                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
-              return seen.push(othIndex);
-            }
-          })) {
-        result = false;
-        break;
-      }
-    } else if (!(
-          arrValue === othValue ||
-            equalFunc(arrValue, othValue, bitmask, customizer, stack)
-        )) {
-      result = false;
-      break;
-    }
-  }
-  stack['delete'](array);
-  stack['delete'](other);
-  return result;
-}
-
-module.exports = equalArrays;
-
-
-/***/ }),
-
-/***/ 18351:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Symbol = __webpack_require__(62705),
-    Uint8Array = __webpack_require__(11149),
-    eq = __webpack_require__(77813),
-    equalArrays = __webpack_require__(67114),
-    mapToArray = __webpack_require__(68776),
-    setToArray = __webpack_require__(21814);
-
-/** Used to compose bitmasks for value comparisons. */
-var COMPARE_PARTIAL_FLAG = 1,
-    COMPARE_UNORDERED_FLAG = 2;
-
-/** `Object#toString` result references. */
-var boolTag = '[object Boolean]',
-    dateTag = '[object Date]',
-    errorTag = '[object Error]',
-    mapTag = '[object Map]',
-    numberTag = '[object Number]',
-    regexpTag = '[object RegExp]',
-    setTag = '[object Set]',
-    stringTag = '[object String]',
-    symbolTag = '[object Symbol]';
-
-var arrayBufferTag = '[object ArrayBuffer]',
-    dataViewTag = '[object DataView]';
-
-/** Used to convert symbols to primitives and strings. */
-var symbolProto = Symbol ? Symbol.prototype : undefined,
-    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
-
-/**
- * A specialized version of `baseIsEqualDeep` for comparing objects of
- * the same `toStringTag`.
- *
- * **Note:** This function only supports comparing values with tags of
- * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {string} tag The `toStringTag` of the objects to compare.
- * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
- * @param {Function} customizer The function to customize comparisons.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Object} stack Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
-function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
-  switch (tag) {
-    case dataViewTag:
-      if ((object.byteLength != other.byteLength) ||
-          (object.byteOffset != other.byteOffset)) {
-        return false;
-      }
-      object = object.buffer;
-      other = other.buffer;
-
-    case arrayBufferTag:
-      if ((object.byteLength != other.byteLength) ||
-          !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
-        return false;
-      }
-      return true;
-
-    case boolTag:
-    case dateTag:
-    case numberTag:
-      // Coerce booleans to `1` or `0` and dates to milliseconds.
-      // Invalid dates are coerced to `NaN`.
-      return eq(+object, +other);
-
-    case errorTag:
-      return object.name == other.name && object.message == other.message;
-
-    case regexpTag:
-    case stringTag:
-      // Coerce regexes to strings and treat strings, primitives and objects,
-      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
-      // for more details.
-      return object == (other + '');
-
-    case mapTag:
-      var convert = mapToArray;
-
-    case setTag:
-      var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
-      convert || (convert = setToArray);
-
-      if (object.size != other.size && !isPartial) {
-        return false;
-      }
-      // Assume cyclic values are equal.
-      var stacked = stack.get(object);
-      if (stacked) {
-        return stacked == other;
-      }
-      bitmask |= COMPARE_UNORDERED_FLAG;
-
-      // Recursively compare objects (susceptible to call stack limits).
-      stack.set(object, other);
-      var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
-      stack['delete'](object);
-      return result;
-
-    case symbolTag:
-      if (symbolValueOf) {
-        return symbolValueOf.call(object) == symbolValueOf.call(other);
-      }
-  }
-  return false;
-}
-
-module.exports = equalByTag;
-
-
-/***/ }),
-
-/***/ 16096:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getAllKeys = __webpack_require__(58234);
-
-/** Used to compose bitmasks for value comparisons. */
-var COMPARE_PARTIAL_FLAG = 1;
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * A specialized version of `baseIsEqualDeep` for objects with support for
- * partial deep comparisons.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
- * @param {Function} customizer The function to customize comparisons.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Object} stack Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
-function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
-  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
-      objProps = getAllKeys(object),
-      objLength = objProps.length,
-      othProps = getAllKeys(other),
-      othLength = othProps.length;
-
-  if (objLength != othLength && !isPartial) {
-    return false;
-  }
-  var index = objLength;
-  while (index--) {
-    var key = objProps[index];
-    if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
-      return false;
-    }
-  }
-  // Check that cyclic values are equal.
-  var objStacked = stack.get(object);
-  var othStacked = stack.get(other);
-  if (objStacked && othStacked) {
-    return objStacked == other && othStacked == object;
-  }
-  var result = true;
-  stack.set(object, other);
-  stack.set(other, object);
-
-  var skipCtor = isPartial;
-  while (++index < objLength) {
-    key = objProps[index];
-    var objValue = object[key],
-        othValue = other[key];
-
-    if (customizer) {
-      var compared = isPartial
-        ? customizer(othValue, objValue, key, other, object, stack)
-        : customizer(objValue, othValue, key, object, other, stack);
-    }
-    // Recursively compare objects (susceptible to call stack limits).
-    if (!(compared === undefined
-          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
-          : compared
-        )) {
-      result = false;
-      break;
-    }
-    skipCtor || (skipCtor = key == 'constructor');
-  }
-  if (result && !skipCtor) {
-    var objCtor = object.constructor,
-        othCtor = other.constructor;
-
-    // Non `Object` object instances with different constructors are not equal.
-    if (objCtor != othCtor &&
-        ('constructor' in object && 'constructor' in other) &&
-        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
-          typeof othCtor == 'function' && othCtor instanceof othCtor)) {
-      result = false;
-    }
-  }
-  stack['delete'](object);
-  stack['delete'](other);
-  return result;
-}
-
-module.exports = equalObjects;
-
-
-/***/ }),
-
-/***/ 99021:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var flatten = __webpack_require__(85564),
-    overRest = __webpack_require__(45357),
-    setToString = __webpack_require__(30061);
-
-/**
- * A specialized version of `baseRest` which flattens the rest array.
- *
- * @private
- * @param {Function} func The function to apply a rest parameter to.
- * @returns {Function} Returns the new function.
- */
-function flatRest(func) {
-  return setToString(overRest(func, undefined, flatten), func + '');
-}
-
-module.exports = flatRest;
-
-
-/***/ }),
-
-/***/ 31957:
-/***/ ((module) => {
-
-/** Detect free variable `global` from Node.js. */
-var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
-
-module.exports = freeGlobal;
-
-
-/***/ }),
-
-/***/ 58234:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseGetAllKeys = __webpack_require__(68866),
-    getSymbols = __webpack_require__(99551),
-    keys = __webpack_require__(3674);
-
-/**
- * Creates an array of own enumerable property names and symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names and symbols.
- */
-function getAllKeys(object) {
-  return baseGetAllKeys(object, keys, getSymbols);
-}
-
-module.exports = getAllKeys;
-
-
-/***/ }),
-
-/***/ 46904:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseGetAllKeys = __webpack_require__(68866),
-    getSymbolsIn = __webpack_require__(51442),
-    keysIn = __webpack_require__(81704);
-
-/**
- * Creates an array of own and inherited enumerable property names and
- * symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names and symbols.
- */
-function getAllKeysIn(object) {
-  return baseGetAllKeys(object, keysIn, getSymbolsIn);
-}
-
-module.exports = getAllKeysIn;
-
-
-/***/ }),
-
-/***/ 45050:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isKeyable = __webpack_require__(37019);
-
-/**
- * Gets the data for `map`.
- *
- * @private
- * @param {Object} map The map to query.
- * @param {string} key The reference key.
- * @returns {*} Returns the map data.
- */
-function getMapData(map, key) {
-  var data = map.__data__;
-  return isKeyable(key)
-    ? data[typeof key == 'string' ? 'string' : 'hash']
-    : data.map;
-}
-
-module.exports = getMapData;
-
-
-/***/ }),
-
-/***/ 1499:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isStrictComparable = __webpack_require__(89162),
-    keys = __webpack_require__(3674);
-
-/**
- * Gets the property names, values, and compare flags of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the match data of `object`.
- */
-function getMatchData(object) {
-  var result = keys(object),
-      length = result.length;
-
-  while (length--) {
-    var key = result[length],
-        value = object[key];
-
-    result[length] = [key, value, isStrictComparable(value)];
-  }
-  return result;
-}
-
-module.exports = getMatchData;
-
-
-/***/ }),
-
-/***/ 10852:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseIsNative = __webpack_require__(28458),
-    getValue = __webpack_require__(47801);
-
-/**
- * Gets the native function at `key` of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the method to get.
- * @returns {*} Returns the function if it's native, else `undefined`.
- */
-function getNative(object, key) {
-  var value = getValue(object, key);
-  return baseIsNative(value) ? value : undefined;
-}
-
-module.exports = getNative;
-
-
-/***/ }),
-
-/***/ 85924:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var overArg = __webpack_require__(5569);
-
-/** Built-in value references. */
-var getPrototype = overArg(Object.getPrototypeOf, Object);
-
-module.exports = getPrototype;
-
-
-/***/ }),
-
-/***/ 89607:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Symbol = __webpack_require__(62705);
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
-var nativeObjectToString = objectProto.toString;
-
-/** Built-in value references. */
-var symToStringTag = Symbol ? Symbol.toStringTag : undefined;
-
-/**
- * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the raw `toStringTag`.
- */
-function getRawTag(value) {
-  var isOwn = hasOwnProperty.call(value, symToStringTag),
-      tag = value[symToStringTag];
-
-  try {
-    value[symToStringTag] = undefined;
-    var unmasked = true;
-  } catch (e) {}
-
-  var result = nativeObjectToString.call(value);
-  if (unmasked) {
-    if (isOwn) {
-      value[symToStringTag] = tag;
-    } else {
-      delete value[symToStringTag];
-    }
-  }
-  return result;
-}
-
-module.exports = getRawTag;
-
-
-/***/ }),
-
-/***/ 99551:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayFilter = __webpack_require__(34963),
-    stubArray = __webpack_require__(70479);
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Built-in value references. */
-var propertyIsEnumerable = objectProto.propertyIsEnumerable;
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeGetSymbols = Object.getOwnPropertySymbols;
-
-/**
- * Creates an array of the own enumerable symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of symbols.
- */
-var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
-  if (object == null) {
-    return [];
-  }
-  object = Object(object);
-  return arrayFilter(nativeGetSymbols(object), function(symbol) {
-    return propertyIsEnumerable.call(object, symbol);
-  });
-};
-
-module.exports = getSymbols;
-
-
-/***/ }),
-
-/***/ 51442:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayPush = __webpack_require__(62488),
-    getPrototype = __webpack_require__(85924),
-    getSymbols = __webpack_require__(99551),
-    stubArray = __webpack_require__(70479);
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeGetSymbols = Object.getOwnPropertySymbols;
-
-/**
- * Creates an array of the own and inherited enumerable symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of symbols.
- */
-var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
-  var result = [];
-  while (object) {
-    arrayPush(result, getSymbols(object));
-    object = getPrototype(object);
-  }
-  return result;
-};
-
-module.exports = getSymbolsIn;
-
-
-/***/ }),
-
-/***/ 64160:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var DataView = __webpack_require__(18552),
-    Map = __webpack_require__(57071),
-    Promise = __webpack_require__(53818),
-    Set = __webpack_require__(58525),
-    WeakMap = __webpack_require__(70577),
-    baseGetTag = __webpack_require__(44239),
-    toSource = __webpack_require__(80346);
-
-/** `Object#toString` result references. */
-var mapTag = '[object Map]',
-    objectTag = '[object Object]',
-    promiseTag = '[object Promise]',
-    setTag = '[object Set]',
-    weakMapTag = '[object WeakMap]';
-
-var dataViewTag = '[object DataView]';
-
-/** Used to detect maps, sets, and weakmaps. */
-var dataViewCtorString = toSource(DataView),
-    mapCtorString = toSource(Map),
-    promiseCtorString = toSource(Promise),
-    setCtorString = toSource(Set),
-    weakMapCtorString = toSource(WeakMap);
-
-/**
- * Gets the `toStringTag` of `value`.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
-var getTag = baseGetTag;
-
-// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
-if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
-    (Map && getTag(new Map) != mapTag) ||
-    (Promise && getTag(Promise.resolve()) != promiseTag) ||
-    (Set && getTag(new Set) != setTag) ||
-    (WeakMap && getTag(new WeakMap) != weakMapTag)) {
-  getTag = function(value) {
-    var result = baseGetTag(value),
-        Ctor = result == objectTag ? value.constructor : undefined,
-        ctorString = Ctor ? toSource(Ctor) : '';
-
-    if (ctorString) {
-      switch (ctorString) {
-        case dataViewCtorString: return dataViewTag;
-        case mapCtorString: return mapTag;
-        case promiseCtorString: return promiseTag;
-        case setCtorString: return setTag;
-        case weakMapCtorString: return weakMapTag;
-      }
-    }
-    return result;
-  };
-}
-
-module.exports = getTag;
-
-
-/***/ }),
-
-/***/ 47801:
-/***/ ((module) => {
-
-/**
- * Gets the value at `key` of `object`.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {string} key The key of the property to get.
- * @returns {*} Returns the property value.
- */
-function getValue(object, key) {
-  return object == null ? undefined : object[key];
-}
-
-module.exports = getValue;
-
-
-/***/ }),
-
-/***/ 222:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var castPath = __webpack_require__(71811),
-    isArguments = __webpack_require__(35694),
-    isArray = __webpack_require__(1469),
-    isIndex = __webpack_require__(65776),
-    isLength = __webpack_require__(41780),
-    toKey = __webpack_require__(40327);
-
-/**
- * Checks if `path` exists on `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array|string} path The path to check.
- * @param {Function} hasFunc The function to check properties.
- * @returns {boolean} Returns `true` if `path` exists, else `false`.
- */
-function hasPath(object, path, hasFunc) {
-  path = castPath(path, object);
-
-  var index = -1,
-      length = path.length,
-      result = false;
-
-  while (++index < length) {
-    var key = toKey(path[index]);
-    if (!(result = object != null && hasFunc(object, key))) {
-      break;
-    }
-    object = object[key];
-  }
-  if (result || ++index != length) {
-    return result;
-  }
-  length = object == null ? 0 : object.length;
-  return !!length && isLength(length) && isIndex(key, length) &&
-    (isArray(object) || isArguments(object));
-}
-
-module.exports = hasPath;
-
-
-/***/ }),
-
-/***/ 62689:
-/***/ ((module) => {
-
-/** Used to compose unicode character classes. */
-var rsAstralRange = '\\ud800-\\udfff',
-    rsComboMarksRange = '\\u0300-\\u036f',
-    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
-    rsComboSymbolsRange = '\\u20d0-\\u20ff',
-    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
-    rsVarRange = '\\ufe0e\\ufe0f';
-
-/** Used to compose unicode capture groups. */
-var rsZWJ = '\\u200d';
-
-/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
-var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');
-
-/**
- * Checks if `string` contains Unicode symbols.
- *
- * @private
- * @param {string} string The string to inspect.
- * @returns {boolean} Returns `true` if a symbol is found, else `false`.
- */
-function hasUnicode(string) {
-  return reHasUnicode.test(string);
-}
-
-module.exports = hasUnicode;
-
-
-/***/ }),
-
-/***/ 51789:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var nativeCreate = __webpack_require__(94536);
-
-/**
- * Removes all key-value entries from the hash.
- *
- * @private
- * @name clear
- * @memberOf Hash
- */
-function hashClear() {
-  this.__data__ = nativeCreate ? nativeCreate(null) : {};
-  this.size = 0;
-}
-
-module.exports = hashClear;
-
-
-/***/ }),
-
-/***/ 80401:
-/***/ ((module) => {
-
-/**
- * Removes `key` and its value from the hash.
- *
- * @private
- * @name delete
- * @memberOf Hash
- * @param {Object} hash The hash to modify.
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function hashDelete(key) {
-  var result = this.has(key) && delete this.__data__[key];
-  this.size -= result ? 1 : 0;
-  return result;
-}
-
-module.exports = hashDelete;
-
-
-/***/ }),
-
-/***/ 57667:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var nativeCreate = __webpack_require__(94536);
-
-/** Used to stand-in for `undefined` hash values. */
-var HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Gets the hash value for `key`.
- *
- * @private
- * @name get
- * @memberOf Hash
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function hashGet(key) {
-  var data = this.__data__;
-  if (nativeCreate) {
-    var result = data[key];
-    return result === HASH_UNDEFINED ? undefined : result;
-  }
-  return hasOwnProperty.call(data, key) ? data[key] : undefined;
-}
-
-module.exports = hashGet;
-
-
-/***/ }),
-
-/***/ 21327:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var nativeCreate = __webpack_require__(94536);
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Checks if a hash value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Hash
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function hashHas(key) {
-  var data = this.__data__;
-  return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
-}
-
-module.exports = hashHas;
-
-
-/***/ }),
-
-/***/ 81866:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var nativeCreate = __webpack_require__(94536);
-
-/** Used to stand-in for `undefined` hash values. */
-var HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-/**
- * Sets the hash `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Hash
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the hash instance.
- */
-function hashSet(key, value) {
-  var data = this.__data__;
-  this.size += this.has(key) ? 0 : 1;
-  data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
-  return this;
-}
-
-module.exports = hashSet;
-
-
-/***/ }),
-
-/***/ 43824:
-/***/ ((module) => {
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Initializes an array clone.
- *
- * @private
- * @param {Array} array The array to clone.
- * @returns {Array} Returns the initialized clone.
- */
-function initCloneArray(array) {
-  var length = array.length,
-      result = new array.constructor(length);
-
-  // Add properties assigned by `RegExp#exec`.
-  if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
-    result.index = array.index;
-    result.input = array.input;
-  }
-  return result;
-}
-
-module.exports = initCloneArray;
-
-
-/***/ }),
-
-/***/ 29148:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var cloneArrayBuffer = __webpack_require__(74318),
-    cloneDataView = __webpack_require__(57157),
-    cloneRegExp = __webpack_require__(93147),
-    cloneSymbol = __webpack_require__(40419),
-    cloneTypedArray = __webpack_require__(77133);
-
-/** `Object#toString` result references. */
-var boolTag = '[object Boolean]',
-    dateTag = '[object Date]',
-    mapTag = '[object Map]',
-    numberTag = '[object Number]',
-    regexpTag = '[object RegExp]',
-    setTag = '[object Set]',
-    stringTag = '[object String]',
-    symbolTag = '[object Symbol]';
-
-var arrayBufferTag = '[object ArrayBuffer]',
-    dataViewTag = '[object DataView]',
-    float32Tag = '[object Float32Array]',
-    float64Tag = '[object Float64Array]',
-    int8Tag = '[object Int8Array]',
-    int16Tag = '[object Int16Array]',
-    int32Tag = '[object Int32Array]',
-    uint8Tag = '[object Uint8Array]',
-    uint8ClampedTag = '[object Uint8ClampedArray]',
-    uint16Tag = '[object Uint16Array]',
-    uint32Tag = '[object Uint32Array]';
-
-/**
- * Initializes an object clone based on its `toStringTag`.
- *
- * **Note:** This function only supports cloning values with tags of
- * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
- *
- * @private
- * @param {Object} object The object to clone.
- * @param {string} tag The `toStringTag` of the object to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Object} Returns the initialized clone.
- */
-function initCloneByTag(object, tag, isDeep) {
-  var Ctor = object.constructor;
-  switch (tag) {
-    case arrayBufferTag:
-      return cloneArrayBuffer(object);
-
-    case boolTag:
-    case dateTag:
-      return new Ctor(+object);
-
-    case dataViewTag:
-      return cloneDataView(object, isDeep);
-
-    case float32Tag: case float64Tag:
-    case int8Tag: case int16Tag: case int32Tag:
-    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
-      return cloneTypedArray(object, isDeep);
-
-    case mapTag:
-      return new Ctor;
-
-    case numberTag:
-    case stringTag:
-      return new Ctor(object);
-
-    case regexpTag:
-      return cloneRegExp(object);
-
-    case setTag:
-      return new Ctor;
-
-    case symbolTag:
-      return cloneSymbol(object);
-  }
-}
-
-module.exports = initCloneByTag;
-
-
-/***/ }),
-
-/***/ 38517:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseCreate = __webpack_require__(3118),
-    getPrototype = __webpack_require__(85924),
-    isPrototype = __webpack_require__(25726);
-
-/**
- * Initializes an object clone.
- *
- * @private
- * @param {Object} object The object to clone.
- * @returns {Object} Returns the initialized clone.
- */
-function initCloneObject(object) {
-  return (typeof object.constructor == 'function' && !isPrototype(object))
-    ? baseCreate(getPrototype(object))
-    : {};
-}
-
-module.exports = initCloneObject;
-
-
-/***/ }),
-
-/***/ 37285:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Symbol = __webpack_require__(62705),
-    isArguments = __webpack_require__(35694),
-    isArray = __webpack_require__(1469);
-
-/** Built-in value references. */
-var spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined;
-
-/**
- * Checks if `value` is a flattenable `arguments` object or array.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
- */
-function isFlattenable(value) {
-  return isArray(value) || isArguments(value) ||
-    !!(spreadableSymbol && value && value[spreadableSymbol]);
-}
-
-module.exports = isFlattenable;
-
-
-/***/ }),
-
-/***/ 65776:
-/***/ ((module) => {
-
-/** Used as references for various `Number` constants. */
-var MAX_SAFE_INTEGER = 9007199254740991;
-
-/** Used to detect unsigned integer values. */
-var reIsUint = /^(?:0|[1-9]\d*)$/;
-
-/**
- * Checks if `value` is a valid array-like index.
- *
- * @private
- * @param {*} value The value to check.
- * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
- * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
- */
-function isIndex(value, length) {
-  var type = typeof value;
-  length = length == null ? MAX_SAFE_INTEGER : length;
-
-  return !!length &&
-    (type == 'number' ||
-      (type != 'symbol' && reIsUint.test(value))) &&
-        (value > -1 && value % 1 == 0 && value < length);
-}
-
-module.exports = isIndex;
-
-
-/***/ }),
-
-/***/ 16612:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var eq = __webpack_require__(77813),
-    isArrayLike = __webpack_require__(98612),
-    isIndex = __webpack_require__(65776),
-    isObject = __webpack_require__(13218);
-
-/**
- * Checks if the given arguments are from an iteratee call.
- *
- * @private
- * @param {*} value The potential iteratee value argument.
- * @param {*} index The potential iteratee index or key argument.
- * @param {*} object The potential iteratee object argument.
- * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
- *  else `false`.
- */
-function isIterateeCall(value, index, object) {
-  if (!isObject(object)) {
-    return false;
-  }
-  var type = typeof index;
-  if (type == 'number'
-        ? (isArrayLike(object) && isIndex(index, object.length))
-        : (type == 'string' && index in object)
-      ) {
-    return eq(object[index], value);
-  }
-  return false;
-}
-
-module.exports = isIterateeCall;
-
-
-/***/ }),
-
-/***/ 15403:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isArray = __webpack_require__(1469),
-    isSymbol = __webpack_require__(33448);
-
-/** Used to match property names within property paths. */
-var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
-    reIsPlainProp = /^\w*$/;
-
-/**
- * Checks if `value` is a property name and not a property path.
- *
- * @private
- * @param {*} value The value to check.
- * @param {Object} [object] The object to query keys on.
- * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
- */
-function isKey(value, object) {
-  if (isArray(value)) {
-    return false;
-  }
-  var type = typeof value;
-  if (type == 'number' || type == 'symbol' || type == 'boolean' ||
-      value == null || isSymbol(value)) {
-    return true;
-  }
-  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
-    (object != null && value in Object(object));
-}
-
-module.exports = isKey;
-
-
-/***/ }),
-
-/***/ 37019:
-/***/ ((module) => {
-
-/**
- * Checks if `value` is suitable for use as unique object key.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
- */
-function isKeyable(value) {
-  var type = typeof value;
-  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
-    ? (value !== '__proto__')
-    : (value === null);
-}
-
-module.exports = isKeyable;
-
-
-/***/ }),
-
-/***/ 15346:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var coreJsData = __webpack_require__(14429);
-
-/** Used to detect methods masquerading as native. */
-var maskSrcKey = (function() {
-  var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
-  return uid ? ('Symbol(src)_1.' + uid) : '';
-}());
-
-/**
- * Checks if `func` has its source masked.
- *
- * @private
- * @param {Function} func The function to check.
- * @returns {boolean} Returns `true` if `func` is masked, else `false`.
- */
-function isMasked(func) {
-  return !!maskSrcKey && (maskSrcKey in func);
-}
-
-module.exports = isMasked;
-
-
-/***/ }),
-
-/***/ 25726:
-/***/ ((module) => {
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/**
- * Checks if `value` is likely a prototype object.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
- */
-function isPrototype(value) {
-  var Ctor = value && value.constructor,
-      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
-
-  return value === proto;
-}
-
-module.exports = isPrototype;
-
-
-/***/ }),
-
-/***/ 89162:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isObject = __webpack_require__(13218);
-
-/**
- * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` if suitable for strict
- *  equality comparisons, else `false`.
- */
-function isStrictComparable(value) {
-  return value === value && !isObject(value);
-}
-
-module.exports = isStrictComparable;
-
-
-/***/ }),
-
-/***/ 27040:
-/***/ ((module) => {
-
-/**
- * Removes all key-value entries from the list cache.
- *
- * @private
- * @name clear
- * @memberOf ListCache
- */
-function listCacheClear() {
-  this.__data__ = [];
-  this.size = 0;
-}
-
-module.exports = listCacheClear;
-
-
-/***/ }),
-
-/***/ 14125:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var assocIndexOf = __webpack_require__(18470);
-
-/** Used for built-in method references. */
-var arrayProto = Array.prototype;
-
-/** Built-in value references. */
-var splice = arrayProto.splice;
-
-/**
- * Removes `key` and its value from the list cache.
- *
- * @private
- * @name delete
- * @memberOf ListCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function listCacheDelete(key) {
-  var data = this.__data__,
-      index = assocIndexOf(data, key);
-
-  if (index < 0) {
-    return false;
-  }
-  var lastIndex = data.length - 1;
-  if (index == lastIndex) {
-    data.pop();
-  } else {
-    splice.call(data, index, 1);
-  }
-  --this.size;
-  return true;
-}
-
-module.exports = listCacheDelete;
-
-
-/***/ }),
-
-/***/ 82117:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var assocIndexOf = __webpack_require__(18470);
-
-/**
- * Gets the list cache value for `key`.
- *
- * @private
- * @name get
- * @memberOf ListCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function listCacheGet(key) {
-  var data = this.__data__,
-      index = assocIndexOf(data, key);
-
-  return index < 0 ? undefined : data[index][1];
-}
-
-module.exports = listCacheGet;
-
-
-/***/ }),
-
-/***/ 67518:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var assocIndexOf = __webpack_require__(18470);
-
-/**
- * Checks if a list cache value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf ListCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function listCacheHas(key) {
-  return assocIndexOf(this.__data__, key) > -1;
-}
-
-module.exports = listCacheHas;
-
-
-/***/ }),
-
-/***/ 54705:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var assocIndexOf = __webpack_require__(18470);
-
-/**
- * Sets the list cache `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf ListCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the list cache instance.
- */
-function listCacheSet(key, value) {
-  var data = this.__data__,
-      index = assocIndexOf(data, key);
-
-  if (index < 0) {
-    ++this.size;
-    data.push([key, value]);
-  } else {
-    data[index][1] = value;
-  }
-  return this;
-}
-
-module.exports = listCacheSet;
-
-
-/***/ }),
-
-/***/ 24785:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var Hash = __webpack_require__(1989),
-    ListCache = __webpack_require__(38407),
-    Map = __webpack_require__(57071);
-
-/**
- * Removes all key-value entries from the map.
- *
- * @private
- * @name clear
- * @memberOf MapCache
- */
-function mapCacheClear() {
-  this.size = 0;
-  this.__data__ = {
-    'hash': new Hash,
-    'map': new (Map || ListCache),
-    'string': new Hash
-  };
-}
-
-module.exports = mapCacheClear;
-
-
-/***/ }),
-
-/***/ 11285:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getMapData = __webpack_require__(45050);
-
-/**
- * Removes `key` and its value from the map.
- *
- * @private
- * @name delete
- * @memberOf MapCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function mapCacheDelete(key) {
-  var result = getMapData(this, key)['delete'](key);
-  this.size -= result ? 1 : 0;
-  return result;
-}
-
-module.exports = mapCacheDelete;
-
-
-/***/ }),
-
-/***/ 96000:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getMapData = __webpack_require__(45050);
-
-/**
- * Gets the map value for `key`.
- *
- * @private
- * @name get
- * @memberOf MapCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function mapCacheGet(key) {
-  return getMapData(this, key).get(key);
-}
-
-module.exports = mapCacheGet;
-
-
-/***/ }),
-
-/***/ 49916:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getMapData = __webpack_require__(45050);
-
-/**
- * Checks if a map value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf MapCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function mapCacheHas(key) {
-  return getMapData(this, key).has(key);
-}
-
-module.exports = mapCacheHas;
-
-
-/***/ }),
-
-/***/ 95265:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getMapData = __webpack_require__(45050);
-
-/**
- * Sets the map `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf MapCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the map cache instance.
- */
-function mapCacheSet(key, value) {
-  var data = getMapData(this, key),
-      size = data.size;
-
-  data.set(key, value);
-  this.size += data.size == size ? 0 : 1;
-  return this;
-}
-
-module.exports = mapCacheSet;
-
-
-/***/ }),
-
-/***/ 68776:
-/***/ ((module) => {
-
-/**
- * Converts `map` to its key-value pairs.
- *
- * @private
- * @param {Object} map The map to convert.
- * @returns {Array} Returns the key-value pairs.
- */
-function mapToArray(map) {
-  var index = -1,
-      result = Array(map.size);
-
-  map.forEach(function(value, key) {
-    result[++index] = [key, value];
-  });
-  return result;
-}
-
-module.exports = mapToArray;
-
-
-/***/ }),
-
-/***/ 42634:
-/***/ ((module) => {
-
-/**
- * A specialized version of `matchesProperty` for source values suitable
- * for strict equality comparisons, i.e. `===`.
- *
- * @private
- * @param {string} key The key of the property to get.
- * @param {*} srcValue The value to match.
- * @returns {Function} Returns the new spec function.
- */
-function matchesStrictComparable(key, srcValue) {
-  return function(object) {
-    if (object == null) {
-      return false;
-    }
-    return object[key] === srcValue &&
-      (srcValue !== undefined || (key in Object(object)));
-  };
-}
-
-module.exports = matchesStrictComparable;
-
-
-/***/ }),
-
-/***/ 24523:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var memoize = __webpack_require__(88306);
-
-/** Used as the maximum memoize cache size. */
-var MAX_MEMOIZE_SIZE = 500;
-
-/**
- * A specialized version of `_.memoize` which clears the memoized function's
- * cache when it exceeds `MAX_MEMOIZE_SIZE`.
- *
- * @private
- * @param {Function} func The function to have its output memoized.
- * @returns {Function} Returns the new memoized function.
- */
-function memoizeCapped(func) {
-  var result = memoize(func, function(key) {
-    if (cache.size === MAX_MEMOIZE_SIZE) {
-      cache.clear();
-    }
-    return key;
-  });
-
-  var cache = result.cache;
-  return result;
-}
-
-module.exports = memoizeCapped;
-
-
-/***/ }),
-
-/***/ 94536:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var getNative = __webpack_require__(10852);
-
-/* Built-in method references that are verified to be native. */
-var nativeCreate = getNative(Object, 'create');
-
-module.exports = nativeCreate;
-
-
-/***/ }),
-
-/***/ 86916:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var overArg = __webpack_require__(5569);
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeKeys = overArg(Object.keys, Object);
-
-module.exports = nativeKeys;
-
-
-/***/ }),
-
-/***/ 33498:
-/***/ ((module) => {
-
-/**
- * This function is like
- * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
- * except that it includes inherited enumerable properties.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
-function nativeKeysIn(object) {
-  var result = [];
-  if (object != null) {
-    for (var key in Object(object)) {
-      result.push(key);
-    }
-  }
-  return result;
-}
-
-module.exports = nativeKeysIn;
-
-
-/***/ }),
-
-/***/ 31167:
-/***/ ((module, exports, __webpack_require__) => {
-
-/* module decorator */ module = __webpack_require__.nmd(module);
-var freeGlobal = __webpack_require__(31957);
-
-/** Detect free variable `exports`. */
-var freeExports =  true && exports && !exports.nodeType && exports;
-
-/** Detect free variable `module`. */
-var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module;
-
-/** Detect the popular CommonJS extension `module.exports`. */
-var moduleExports = freeModule && freeModule.exports === freeExports;
-
-/** Detect free variable `process` from Node.js. */
-var freeProcess = moduleExports && freeGlobal.process;
-
-/** Used to access faster Node.js helpers. */
-var nodeUtil = (function() {
-  try {
-    // Use `util.types` for Node.js 10+.
-    var types = freeModule && freeModule.require && freeModule.require('util').types;
-
-    if (types) {
-      return types;
-    }
-
-    // Legacy `process.binding('util')` for Node.js < 10.
-    return freeProcess && freeProcess.binding && freeProcess.binding('util');
-  } catch (e) {}
-}());
-
-module.exports = nodeUtil;
-
-
-/***/ }),
-
-/***/ 2333:
-/***/ ((module) => {
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
-var nativeObjectToString = objectProto.toString;
-
-/**
- * Converts `value` to a string using `Object.prototype.toString`.
- *
- * @private
- * @param {*} value The value to convert.
- * @returns {string} Returns the converted string.
- */
-function objectToString(value) {
-  return nativeObjectToString.call(value);
-}
-
-module.exports = objectToString;
-
-
-/***/ }),
-
-/***/ 5569:
-/***/ ((module) => {
-
-/**
- * Creates a unary function that invokes `func` with its argument transformed.
- *
- * @private
- * @param {Function} func The function to wrap.
- * @param {Function} transform The argument transform.
- * @returns {Function} Returns the new function.
- */
-function overArg(func, transform) {
-  return function(arg) {
-    return func(transform(arg));
-  };
-}
-
-module.exports = overArg;
-
-
-/***/ }),
-
-/***/ 45357:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var apply = __webpack_require__(96874);
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeMax = Math.max;
-
-/**
- * A specialized version of `baseRest` which transforms the rest array.
- *
- * @private
- * @param {Function} func The function to apply a rest parameter to.
- * @param {number} [start=func.length-1] The start position of the rest parameter.
- * @param {Function} transform The rest array transform.
- * @returns {Function} Returns the new function.
- */
-function overRest(func, start, transform) {
-  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
-  return function() {
-    var args = arguments,
-        index = -1,
-        length = nativeMax(args.length - start, 0),
-        array = Array(length);
-
-    while (++index < length) {
-      array[index] = args[start + index];
-    }
-    index = -1;
-    var otherArgs = Array(start + 1);
-    while (++index < start) {
-      otherArgs[index] = args[index];
-    }
-    otherArgs[start] = transform(array);
-    return apply(func, this, otherArgs);
-  };
-}
-
-module.exports = overRest;
-
-
-/***/ }),
-
-/***/ 40292:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseGet = __webpack_require__(97786),
-    baseSlice = __webpack_require__(14259);
-
-/**
- * Gets the parent value at `path` of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array} path The path to get the parent value of.
- * @returns {*} Returns the parent value.
- */
-function parent(object, path) {
-  return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
-}
-
-module.exports = parent;
-
-
-/***/ }),
-
-/***/ 55639:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var freeGlobal = __webpack_require__(31957);
-
-/** Detect free variable `self`. */
-var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
-
-/** Used as a reference to the global object. */
-var root = freeGlobal || freeSelf || Function('return this')();
-
-module.exports = root;
-
-
-/***/ }),
-
-/***/ 90619:
-/***/ ((module) => {
-
-/** Used to stand-in for `undefined` hash values. */
-var HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-/**
- * Adds `value` to the array cache.
- *
- * @private
- * @name add
- * @memberOf SetCache
- * @alias push
- * @param {*} value The value to cache.
- * @returns {Object} Returns the cache instance.
- */
-function setCacheAdd(value) {
-  this.__data__.set(value, HASH_UNDEFINED);
-  return this;
-}
-
-module.exports = setCacheAdd;
-
-
-/***/ }),
-
-/***/ 72385:
-/***/ ((module) => {
-
-/**
- * Checks if `value` is in the array cache.
- *
- * @private
- * @name has
- * @memberOf SetCache
- * @param {*} value The value to search for.
- * @returns {number} Returns `true` if `value` is found, else `false`.
- */
-function setCacheHas(value) {
-  return this.__data__.has(value);
-}
-
-module.exports = setCacheHas;
-
-
-/***/ }),
-
-/***/ 21814:
-/***/ ((module) => {
-
-/**
- * Converts `set` to an array of its values.
- *
- * @private
- * @param {Object} set The set to convert.
- * @returns {Array} Returns the values.
- */
-function setToArray(set) {
-  var index = -1,
-      result = Array(set.size);
-
-  set.forEach(function(value) {
-    result[++index] = value;
-  });
-  return result;
-}
-
-module.exports = setToArray;
-
-
-/***/ }),
-
-/***/ 30061:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseSetToString = __webpack_require__(56560),
-    shortOut = __webpack_require__(21275);
-
-/**
- * Sets the `toString` method of `func` to return `string`.
- *
- * @private
- * @param {Function} func The function to modify.
- * @param {Function} string The `toString` result.
- * @returns {Function} Returns `func`.
- */
-var setToString = shortOut(baseSetToString);
-
-module.exports = setToString;
-
-
-/***/ }),
-
-/***/ 21275:
-/***/ ((module) => {
-
-/** Used to detect hot functions by number of calls within a span of milliseconds. */
-var HOT_COUNT = 800,
-    HOT_SPAN = 16;
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeNow = Date.now;
-
-/**
- * Creates a function that'll short out and invoke `identity` instead
- * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
- * milliseconds.
- *
- * @private
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new shortable function.
- */
-function shortOut(func) {
-  var count = 0,
-      lastCalled = 0;
-
-  return function() {
-    var stamp = nativeNow(),
-        remaining = HOT_SPAN - (stamp - lastCalled);
-
-    lastCalled = stamp;
-    if (remaining > 0) {
-      if (++count >= HOT_COUNT) {
-        return arguments[0];
-      }
-    } else {
-      count = 0;
-    }
-    return func.apply(undefined, arguments);
-  };
-}
-
-module.exports = shortOut;
-
-
-/***/ }),
-
-/***/ 37465:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var ListCache = __webpack_require__(38407);
-
-/**
- * Removes all key-value entries from the stack.
- *
- * @private
- * @name clear
- * @memberOf Stack
- */
-function stackClear() {
-  this.__data__ = new ListCache;
-  this.size = 0;
-}
-
-module.exports = stackClear;
-
-
-/***/ }),
-
-/***/ 63779:
-/***/ ((module) => {
-
-/**
- * Removes `key` and its value from the stack.
- *
- * @private
- * @name delete
- * @memberOf Stack
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function stackDelete(key) {
-  var data = this.__data__,
-      result = data['delete'](key);
-
-  this.size = data.size;
-  return result;
-}
-
-module.exports = stackDelete;
-
-
-/***/ }),
-
-/***/ 67599:
-/***/ ((module) => {
-
-/**
- * Gets the stack value for `key`.
- *
- * @private
- * @name get
- * @memberOf Stack
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function stackGet(key) {
-  return this.__data__.get(key);
-}
-
-module.exports = stackGet;
-
-
-/***/ }),
-
-/***/ 44758:
-/***/ ((module) => {
-
-/**
- * Checks if a stack value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Stack
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function stackHas(key) {
-  return this.__data__.has(key);
-}
-
-module.exports = stackHas;
-
-
-/***/ }),
-
-/***/ 34309:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var ListCache = __webpack_require__(38407),
-    Map = __webpack_require__(57071),
-    MapCache = __webpack_require__(83369);
-
-/** Used as the size to enable large array optimizations. */
-var LARGE_ARRAY_SIZE = 200;
-
-/**
- * Sets the stack `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Stack
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the stack cache instance.
- */
-function stackSet(key, value) {
-  var data = this.__data__;
-  if (data instanceof ListCache) {
-    var pairs = data.__data__;
-    if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
-      pairs.push([key, value]);
-      this.size = ++data.size;
-      return this;
-    }
-    data = this.__data__ = new MapCache(pairs);
-  }
-  data.set(key, value);
-  this.size = data.size;
-  return this;
-}
-
-module.exports = stackSet;
-
-
-/***/ }),
-
-/***/ 42351:
-/***/ ((module) => {
-
-/**
- * A specialized version of `_.indexOf` which performs strict equality
- * comparisons of values, i.e. `===`.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} value The value to search for.
- * @param {number} fromIndex The index to search from.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function strictIndexOf(array, value, fromIndex) {
-  var index = fromIndex - 1,
-      length = array.length;
-
-  while (++index < length) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-module.exports = strictIndexOf;
-
-
-/***/ }),
-
-/***/ 83140:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var asciiToArray = __webpack_require__(44286),
-    hasUnicode = __webpack_require__(62689),
-    unicodeToArray = __webpack_require__(676);
-
-/**
- * Converts `string` to an array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the converted array.
- */
-function stringToArray(string) {
-  return hasUnicode(string)
-    ? unicodeToArray(string)
-    : asciiToArray(string);
-}
-
-module.exports = stringToArray;
-
-
-/***/ }),
-
-/***/ 55514:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var memoizeCapped = __webpack_require__(24523);
-
-/** Used to match property names within property paths. */
-var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
-
-/** Used to match backslashes in property paths. */
-var reEscapeChar = /\\(\\)?/g;
-
-/**
- * Converts `string` to a property path array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the property path array.
- */
-var stringToPath = memoizeCapped(function(string) {
-  var result = [];
-  if (string.charCodeAt(0) === 46 /* . */) {
-    result.push('');
-  }
-  string.replace(rePropName, function(match, number, quote, subString) {
-    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
-  });
-  return result;
-});
-
-module.exports = stringToPath;
-
-
-/***/ }),
-
-/***/ 40327:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isSymbol = __webpack_require__(33448);
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0;
-
-/**
- * Converts `value` to a string key if it's not a string or symbol.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {string|symbol} Returns the key.
- */
-function toKey(value) {
-  if (typeof value == 'string' || isSymbol(value)) {
-    return value;
-  }
-  var result = (value + '');
-  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
-
-module.exports = toKey;
-
-
-/***/ }),
-
-/***/ 80346:
-/***/ ((module) => {
-
-/** Used for built-in method references. */
-var funcProto = Function.prototype;
-
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
-
-/**
- * Converts `func` to its source code.
- *
- * @private
- * @param {Function} func The function to convert.
- * @returns {string} Returns the source code.
- */
-function toSource(func) {
-  if (func != null) {
-    try {
-      return funcToString.call(func);
-    } catch (e) {}
-    try {
-      return (func + '');
-    } catch (e) {}
-  }
-  return '';
-}
-
-module.exports = toSource;
-
-
-/***/ }),
-
-/***/ 67990:
-/***/ ((module) => {
-
-/** Used to match a single whitespace character. */
-var reWhitespace = /\s/;
-
-/**
- * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
- * character of `string`.
- *
- * @private
- * @param {string} string The string to inspect.
- * @returns {number} Returns the index of the last non-whitespace character.
- */
-function trimmedEndIndex(string) {
-  var index = string.length;
-
-  while (index-- && reWhitespace.test(string.charAt(index))) {}
-  return index;
-}
-
-module.exports = trimmedEndIndex;
-
-
-/***/ }),
-
-/***/ 676:
-/***/ ((module) => {
-
-/** Used to compose unicode character classes. */
-var rsAstralRange = '\\ud800-\\udfff',
-    rsComboMarksRange = '\\u0300-\\u036f',
-    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
-    rsComboSymbolsRange = '\\u20d0-\\u20ff',
-    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
-    rsVarRange = '\\ufe0e\\ufe0f';
-
-/** Used to compose unicode capture groups. */
-var rsAstral = '[' + rsAstralRange + ']',
-    rsCombo = '[' + rsComboRange + ']',
-    rsFitz = '\\ud83c[\\udffb-\\udfff]',
-    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
-    rsNonAstral = '[^' + rsAstralRange + ']',
-    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
-    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
-    rsZWJ = '\\u200d';
-
-/** Used to compose unicode regexes. */
-var reOptMod = rsModifier + '?',
-    rsOptVar = '[' + rsVarRange + ']?',
-    rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
-    rsSeq = rsOptVar + reOptMod + rsOptJoin,
-    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
-
-/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
-var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
-
-/**
- * Converts a Unicode `string` to an array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the converted array.
- */
-function unicodeToArray(string) {
-  return string.match(reUnicode) || [];
-}
-
-module.exports = unicodeToArray;
-
-
-/***/ }),
-
-/***/ 28583:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var assignValue = __webpack_require__(34865),
-    copyObject = __webpack_require__(98363),
-    createAssigner = __webpack_require__(21463),
-    isArrayLike = __webpack_require__(98612),
-    isPrototype = __webpack_require__(25726),
-    keys = __webpack_require__(3674);
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Assigns own enumerable string keyed properties of source objects to the
- * destination object. Source objects are applied from left to right.
- * Subsequent sources overwrite property assignments of previous sources.
- *
- * **Note:** This method mutates `object` and is loosely based on
- * [`Object.assign`](https://mdn.io/Object/assign).
- *
- * @static
- * @memberOf _
- * @since 0.10.0
- * @category Object
- * @param {Object} object The destination object.
- * @param {...Object} [sources] The source objects.
- * @returns {Object} Returns `object`.
- * @see _.assignIn
- * @example
- *
- * function Foo() {
- *   this.a = 1;
- * }
- *
- * function Bar() {
- *   this.c = 3;
- * }
- *
- * Foo.prototype.b = 2;
- * Bar.prototype.d = 4;
- *
- * _.assign({ 'a': 0 }, new Foo, new Bar);
- * // => { 'a': 1, 'c': 3 }
- */
-var assign = createAssigner(function(object, source) {
-  if (isPrototype(source) || isArrayLike(source)) {
-    copyObject(source, keys(source), object);
-    return;
-  }
-  for (var key in source) {
-    if (hasOwnProperty.call(source, key)) {
-      assignValue(object, key, source[key]);
-    }
-  }
-});
-
-module.exports = assign;
-
-
-/***/ }),
-
-/***/ 66678:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseClone = __webpack_require__(85990);
-
-/** Used to compose bitmasks for cloning. */
-var CLONE_SYMBOLS_FLAG = 4;
-
-/**
- * Creates a shallow clone of `value`.
- *
- * **Note:** This method is loosely based on the
- * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
- * and supports cloning arrays, array buffers, booleans, date objects, maps,
- * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
- * arrays. The own enumerable properties of `arguments` objects are cloned
- * as plain objects. An empty object is returned for uncloneable values such
- * as error objects, functions, DOM nodes, and WeakMaps.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to clone.
- * @returns {*} Returns the cloned value.
- * @see _.cloneDeep
- * @example
- *
- * var objects = [{ 'a': 1 }, { 'b': 2 }];
- *
- * var shallow = _.clone(objects);
- * console.log(shallow[0] === objects[0]);
- * // => true
- */
-function clone(value) {
-  return baseClone(value, CLONE_SYMBOLS_FLAG);
-}
-
-module.exports = clone;
-
-
-/***/ }),
-
-/***/ 39693:
-/***/ ((module) => {
-
-/**
- * Creates an array with all falsey values removed. The values `false`, `null`,
- * `0`, `""`, `undefined`, and `NaN` are falsey.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Array
- * @param {Array} array The array to compact.
- * @returns {Array} Returns the new array of filtered values.
- * @example
- *
- * _.compact([0, 1, false, 2, '', 3]);
- * // => [1, 2, 3]
- */
-function compact(array) {
-  var index = -1,
-      length = array == null ? 0 : array.length,
-      resIndex = 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-    if (value) {
-      result[resIndex++] = value;
-    }
-  }
-  return result;
-}
-
-module.exports = compact;
-
-
-/***/ }),
-
-/***/ 75703:
-/***/ ((module) => {
-
-/**
- * Creates a function that returns `value`.
- *
- * @static
- * @memberOf _
- * @since 2.4.0
- * @category Util
- * @param {*} value The value to return from the new function.
- * @returns {Function} Returns the new constant function.
- * @example
- *
- * var objects = _.times(2, _.constant({ 'a': 1 }));
- *
- * console.log(objects);
- * // => [{ 'a': 1 }, { 'a': 1 }]
- *
- * console.log(objects[0] === objects[1]);
- * // => true
- */
-function constant(value) {
-  return function() {
-    return value;
-  };
-}
-
-module.exports = constant;
-
-
-/***/ }),
-
-/***/ 91747:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseRest = __webpack_require__(5976),
-    eq = __webpack_require__(77813),
-    isIterateeCall = __webpack_require__(16612),
-    keysIn = __webpack_require__(81704);
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Assigns own and inherited enumerable string keyed properties of source
- * objects to the destination object for all destination properties that
- * resolve to `undefined`. Source objects are applied from left to right.
- * Once a property is set, additional values of the same property are ignored.
- *
- * **Note:** This method mutates `object`.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The destination object.
- * @param {...Object} [sources] The source objects.
- * @returns {Object} Returns `object`.
- * @see _.defaultsDeep
- * @example
- *
- * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
- * // => { 'a': 1, 'b': 2 }
- */
-var defaults = baseRest(function(object, sources) {
-  object = Object(object);
-
-  var index = -1;
-  var length = sources.length;
-  var guard = length > 2 ? sources[2] : undefined;
-
-  if (guard && isIterateeCall(sources[0], sources[1], guard)) {
-    length = 1;
-  }
-
-  while (++index < length) {
-    var source = sources[index];
-    var props = keysIn(source);
-    var propsIndex = -1;
-    var propsLength = props.length;
-
-    while (++propsIndex < propsLength) {
-      var key = props[propsIndex];
-      var value = object[key];
-
-      if (value === undefined ||
-          (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
-        object[key] = source[key];
-      }
-    }
-  }
-
-  return object;
-});
-
-module.exports = defaults;
-
-
-/***/ }),
-
-/***/ 91966:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseDifference = __webpack_require__(20731),
-    baseFlatten = __webpack_require__(21078),
-    baseRest = __webpack_require__(5976),
-    isArrayLikeObject = __webpack_require__(29246);
-
-/**
- * Creates an array of `array` values not included in the other given arrays
- * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * for equality comparisons. The order and references of result values are
- * determined by the first array.
- *
- * **Note:** Unlike `_.pullAll`, this method returns a new array.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Array
- * @param {Array} array The array to inspect.
- * @param {...Array} [values] The values to exclude.
- * @returns {Array} Returns the new array of filtered values.
- * @see _.without, _.xor
- * @example
- *
- * _.difference([2, 1], [2, 3]);
- * // => [1]
- */
-var difference = baseRest(function(array, values) {
-  return isArrayLikeObject(array)
-    ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
-    : [];
-});
-
-module.exports = difference;
-
-
-/***/ }),
-
-/***/ 30731:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseSlice = __webpack_require__(14259),
-    toInteger = __webpack_require__(40554);
-
-/**
- * Creates a slice of `array` with `n` elements dropped from the beginning.
- *
- * @static
- * @memberOf _
- * @since 0.5.0
- * @category Array
- * @param {Array} array The array to query.
- * @param {number} [n=1] The number of elements to drop.
- * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
- * @returns {Array} Returns the slice of `array`.
- * @example
- *
- * _.drop([1, 2, 3]);
- * // => [2, 3]
- *
- * _.drop([1, 2, 3], 2);
- * // => [3]
- *
- * _.drop([1, 2, 3], 5);
- * // => []
- *
- * _.drop([1, 2, 3], 0);
- * // => [1, 2, 3]
- */
-function drop(array, n, guard) {
-  var length = array == null ? 0 : array.length;
-  if (!length) {
-    return [];
-  }
-  n = (guard || n === undefined) ? 1 : toInteger(n);
-  return baseSlice(array, n < 0 ? 0 : n, length);
-}
-
-module.exports = drop;
-
-
-/***/ }),
-
-/***/ 43624:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseSlice = __webpack_require__(14259),
-    toInteger = __webpack_require__(40554);
-
-/**
- * Creates a slice of `array` with `n` elements dropped from the end.
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category Array
- * @param {Array} array The array to query.
- * @param {number} [n=1] The number of elements to drop.
- * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
- * @returns {Array} Returns the slice of `array`.
- * @example
- *
- * _.dropRight([1, 2, 3]);
- * // => [1, 2]
- *
- * _.dropRight([1, 2, 3], 2);
- * // => [1]
- *
- * _.dropRight([1, 2, 3], 5);
- * // => []
- *
- * _.dropRight([1, 2, 3], 0);
- * // => [1, 2, 3]
- */
-function dropRight(array, n, guard) {
-  var length = array == null ? 0 : array.length;
-  if (!length) {
-    return [];
-  }
-  n = (guard || n === undefined) ? 1 : toInteger(n);
-  n = length - n;
-  return baseSlice(array, 0, n < 0 ? 0 : n);
-}
-
-module.exports = dropRight;
-
-
-/***/ }),
-
-/***/ 77813:
-/***/ ((module) => {
-
-/**
- * Performs a
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * comparison between two values to determine if they are equivalent.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'a': 1 };
- * var other = { 'a': 1 };
- *
- * _.eq(object, object);
- * // => true
- *
- * _.eq(object, other);
- * // => false
- *
- * _.eq('a', 'a');
- * // => true
- *
- * _.eq('a', Object('a'));
- * // => false
- *
- * _.eq(NaN, NaN);
- * // => true
- */
-function eq(value, other) {
-  return value === other || (value !== value && other !== other);
-}
-
-module.exports = eq;
-
-
-/***/ }),
-
-/***/ 711:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayEvery = __webpack_require__(66193),
-    baseEvery = __webpack_require__(93239),
-    baseIteratee = __webpack_require__(67206),
-    isArray = __webpack_require__(1469),
-    isIterateeCall = __webpack_require__(16612);
-
-/**
- * Checks if `predicate` returns truthy for **all** elements of `collection`.
- * Iteration is stopped once `predicate` returns falsey. The predicate is
- * invoked with three arguments: (value, index|key, collection).
- *
- * **Note:** This method returns `true` for
- * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
- * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
- * elements of empty collections.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [predicate=_.identity] The function invoked per iteration.
- * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
- * @returns {boolean} Returns `true` if all elements pass the predicate check,
- *  else `false`.
- * @example
- *
- * _.every([true, 1, null, 'yes'], Boolean);
- * // => false
- *
- * var users = [
- *   { 'user': 'barney', 'age': 36, 'active': false },
- *   { 'user': 'fred',   'age': 40, 'active': false }
- * ];
- *
- * // The `_.matches` iteratee shorthand.
- * _.every(users, { 'user': 'barney', 'active': false });
- * // => false
- *
- * // The `_.matchesProperty` iteratee shorthand.
- * _.every(users, ['active', false]);
- * // => true
- *
- * // The `_.property` iteratee shorthand.
- * _.every(users, 'active');
- * // => false
- */
-function every(collection, predicate, guard) {
-  var func = isArray(collection) ? arrayEvery : baseEvery;
-  if (guard && isIterateeCall(collection, predicate, guard)) {
-    predicate = undefined;
-  }
-  return func(collection, baseIteratee(predicate, 3));
-}
-
-module.exports = every;
-
-
-/***/ }),
-
-/***/ 63105:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayFilter = __webpack_require__(34963),
-    baseFilter = __webpack_require__(80760),
-    baseIteratee = __webpack_require__(67206),
-    isArray = __webpack_require__(1469);
-
-/**
- * Iterates over elements of `collection`, returning an array of all elements
- * `predicate` returns truthy for. The predicate is invoked with three
- * arguments: (value, index|key, collection).
- *
- * **Note:** Unlike `_.remove`, this method returns a new array.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [predicate=_.identity] The function invoked per iteration.
- * @returns {Array} Returns the new filtered array.
- * @see _.reject
- * @example
- *
- * var users = [
- *   { 'user': 'barney', 'age': 36, 'active': true },
- *   { 'user': 'fred',   'age': 40, 'active': false }
- * ];
- *
- * _.filter(users, function(o) { return !o.active; });
- * // => objects for ['fred']
- *
- * // The `_.matches` iteratee shorthand.
- * _.filter(users, { 'age': 36, 'active': true });
- * // => objects for ['barney']
- *
- * // The `_.matchesProperty` iteratee shorthand.
- * _.filter(users, ['active', false]);
- * // => objects for ['fred']
- *
- * // The `_.property` iteratee shorthand.
- * _.filter(users, 'active');
- * // => objects for ['barney']
- *
- * // Combining several predicates using `_.overEvery` or `_.overSome`.
- * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
- * // => objects for ['fred', 'barney']
- */
-function filter(collection, predicate) {
-  var func = isArray(collection) ? arrayFilter : baseFilter;
-  return func(collection, baseIteratee(predicate, 3));
-}
-
-module.exports = filter;
-
-
-/***/ }),
-
-/***/ 13311:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var createFind = __webpack_require__(67740),
-    findIndex = __webpack_require__(30998);
-
-/**
- * Iterates over elements of `collection`, returning the first element
- * `predicate` returns truthy for. The predicate is invoked with three
- * arguments: (value, index|key, collection).
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to inspect.
- * @param {Function} [predicate=_.identity] The function invoked per iteration.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {*} Returns the matched element, else `undefined`.
- * @example
- *
- * var users = [
- *   { 'user': 'barney',  'age': 36, 'active': true },
- *   { 'user': 'fred',    'age': 40, 'active': false },
- *   { 'user': 'pebbles', 'age': 1,  'active': true }
- * ];
- *
- * _.find(users, function(o) { return o.age < 40; });
- * // => object for 'barney'
- *
- * // The `_.matches` iteratee shorthand.
- * _.find(users, { 'age': 1, 'active': true });
- * // => object for 'pebbles'
- *
- * // The `_.matchesProperty` iteratee shorthand.
- * _.find(users, ['active', false]);
- * // => object for 'fred'
- *
- * // The `_.property` iteratee shorthand.
- * _.find(users, 'active');
- * // => object for 'barney'
- */
-var find = createFind(findIndex);
-
-module.exports = find;
-
-
-/***/ }),
-
-/***/ 30998:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseFindIndex = __webpack_require__(41848),
-    baseIteratee = __webpack_require__(67206),
-    toInteger = __webpack_require__(40554);
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeMax = Math.max;
-
-/**
- * This method is like `_.find` except that it returns the index of the first
- * element `predicate` returns truthy for instead of the element itself.
- *
- * @static
- * @memberOf _
- * @since 1.1.0
- * @category Array
- * @param {Array} array The array to inspect.
- * @param {Function} [predicate=_.identity] The function invoked per iteration.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {number} Returns the index of the found element, else `-1`.
- * @example
- *
- * var users = [
- *   { 'user': 'barney',  'active': false },
- *   { 'user': 'fred',    'active': false },
- *   { 'user': 'pebbles', 'active': true }
- * ];
- *
- * _.findIndex(users, function(o) { return o.user == 'barney'; });
- * // => 0
- *
- * // The `_.matches` iteratee shorthand.
- * _.findIndex(users, { 'user': 'fred', 'active': false });
- * // => 1
- *
- * // The `_.matchesProperty` iteratee shorthand.
- * _.findIndex(users, ['active', false]);
- * // => 0
- *
- * // The `_.property` iteratee shorthand.
- * _.findIndex(users, 'active');
- * // => 2
- */
-function findIndex(array, predicate, fromIndex) {
-  var length = array == null ? 0 : array.length;
-  if (!length) {
-    return -1;
-  }
-  var index = fromIndex == null ? 0 : toInteger(fromIndex);
-  if (index < 0) {
-    index = nativeMax(length + index, 0);
-  }
-  return baseFindIndex(array, baseIteratee(predicate, 3), index);
-}
-
-module.exports = findIndex;
-
-
-/***/ }),
-
-/***/ 8804:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-module.exports = __webpack_require__(91175);
-
-
-/***/ }),
-
-/***/ 94654:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseFlatten = __webpack_require__(21078),
-    map = __webpack_require__(35161);
-
-/**
- * Creates a flattened array of values by running each element in `collection`
- * thru `iteratee` and flattening the mapped results. The iteratee is invoked
- * with three arguments: (value, index|key, collection).
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [iteratee=_.identity] The function invoked per iteration.
- * @returns {Array} Returns the new flattened array.
- * @example
- *
- * function duplicate(n) {
- *   return [n, n];
- * }
- *
- * _.flatMap([1, 2], duplicate);
- * // => [1, 1, 2, 2]
- */
-function flatMap(collection, iteratee) {
-  return baseFlatten(map(collection, iteratee), 1);
-}
-
-module.exports = flatMap;
-
-
-/***/ }),
-
-/***/ 85564:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseFlatten = __webpack_require__(21078);
-
-/**
- * Flattens `array` a single level deep.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Array
- * @param {Array} array The array to flatten.
- * @returns {Array} Returns the new flattened array.
- * @example
- *
- * _.flatten([1, [2, [3, [4]], 5]]);
- * // => [1, 2, [3, [4]], 5]
- */
-function flatten(array) {
-  var length = array == null ? 0 : array.length;
-  return length ? baseFlatten(array, 1) : [];
-}
-
-module.exports = flatten;
-
-
-/***/ }),
-
-/***/ 84486:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayEach = __webpack_require__(77412),
-    baseEach = __webpack_require__(89881),
-    castFunction = __webpack_require__(54290),
-    isArray = __webpack_require__(1469);
-
-/**
- * Iterates over elements of `collection` and invokes `iteratee` for each element.
- * The iteratee is invoked with three arguments: (value, index|key, collection).
- * Iteratee functions may exit iteration early by explicitly returning `false`.
- *
- * **Note:** As with other "Collections" methods, objects with a "length"
- * property are iterated like arrays. To avoid this behavior use `_.forIn`
- * or `_.forOwn` for object iteration.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @alias each
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [iteratee=_.identity] The function invoked per iteration.
- * @returns {Array|Object} Returns `collection`.
- * @see _.forEachRight
- * @example
- *
- * _.forEach([1, 2], function(value) {
- *   console.log(value);
- * });
- * // => Logs `1` then `2`.
- *
- * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
- *   console.log(key);
- * });
- * // => Logs 'a' then 'b' (iteration order is not guaranteed).
- */
-function forEach(collection, iteratee) {
-  var func = isArray(collection) ? arrayEach : baseEach;
-  return func(collection, castFunction(iteratee));
-}
-
-module.exports = forEach;
-
-
-/***/ }),
-
-/***/ 27361:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseGet = __webpack_require__(97786);
-
-/**
- * Gets the value at `path` of `object`. If the resolved value is
- * `undefined`, the `defaultValue` is returned in its place.
- *
- * @static
- * @memberOf _
- * @since 3.7.0
- * @category Object
- * @param {Object} object The object to query.
- * @param {Array|string} path The path of the property to get.
- * @param {*} [defaultValue] The value returned for `undefined` resolved values.
- * @returns {*} Returns the resolved value.
- * @example
- *
- * var object = { 'a': [{ 'b': { 'c': 3 } }] };
- *
- * _.get(object, 'a[0].b.c');
- * // => 3
- *
- * _.get(object, ['a', '0', 'b', 'c']);
- * // => 3
- *
- * _.get(object, 'a.b.c', 'default');
- * // => 'default'
- */
-function get(object, path, defaultValue) {
-  var result = object == null ? undefined : baseGet(object, path);
-  return result === undefined ? defaultValue : result;
-}
-
-module.exports = get;
-
-
-/***/ }),
-
-/***/ 7739:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseAssignValue = __webpack_require__(89465),
-    createAggregator = __webpack_require__(55189);
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates an object composed of keys generated from the results of running
- * each element of `collection` thru `iteratee`. The order of grouped values
- * is determined by the order they occur in `collection`. The corresponding
- * value of each key is an array of elements responsible for generating the
- * key. The iteratee is invoked with one argument: (value).
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
- * @returns {Object} Returns the composed aggregate object.
- * @example
- *
- * _.groupBy([6.1, 4.2, 6.3], Math.floor);
- * // => { '4': [4.2], '6': [6.1, 6.3] }
- *
- * // The `_.property` iteratee shorthand.
- * _.groupBy(['one', 'two', 'three'], 'length');
- * // => { '3': ['one', 'two'], '5': ['three'] }
- */
-var groupBy = createAggregator(function(result, value, key) {
-  if (hasOwnProperty.call(result, key)) {
-    result[key].push(value);
-  } else {
-    baseAssignValue(result, key, [value]);
-  }
-});
-
-module.exports = groupBy;
-
-
-/***/ }),
-
-/***/ 18721:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseHas = __webpack_require__(78565),
-    hasPath = __webpack_require__(222);
-
-/**
- * Checks if `path` is a direct property of `object`.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The object to query.
- * @param {Array|string} path The path to check.
- * @returns {boolean} Returns `true` if `path` exists, else `false`.
- * @example
- *
- * var object = { 'a': { 'b': 2 } };
- * var other = _.create({ 'a': _.create({ 'b': 2 }) });
- *
- * _.has(object, 'a');
- * // => true
- *
- * _.has(object, 'a.b');
- * // => true
- *
- * _.has(object, ['a', 'b']);
- * // => true
- *
- * _.has(other, 'a');
- * // => false
- */
-function has(object, path) {
-  return object != null && hasPath(object, path, baseHas);
-}
-
-module.exports = has;
-
-
-/***/ }),
-
-/***/ 79095:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseHasIn = __webpack_require__(13),
-    hasPath = __webpack_require__(222);
-
-/**
- * Checks if `path` is a direct or inherited property of `object`.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Object
- * @param {Object} object The object to query.
- * @param {Array|string} path The path to check.
- * @returns {boolean} Returns `true` if `path` exists, else `false`.
- * @example
- *
- * var object = _.create({ 'a': _.create({ 'b': 2 }) });
- *
- * _.hasIn(object, 'a');
- * // => true
- *
- * _.hasIn(object, 'a.b');
- * // => true
- *
- * _.hasIn(object, ['a', 'b']);
- * // => true
- *
- * _.hasIn(object, 'b');
- * // => false
- */
-function hasIn(object, path) {
-  return object != null && hasPath(object, path, baseHasIn);
-}
-
-module.exports = hasIn;
-
-
-/***/ }),
-
-/***/ 91175:
-/***/ ((module) => {
-
-/**
- * Gets the first element of `array`.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @alias first
- * @category Array
- * @param {Array} array The array to query.
- * @returns {*} Returns the first element of `array`.
- * @example
- *
- * _.head([1, 2, 3]);
- * // => 1
- *
- * _.head([]);
- * // => undefined
- */
-function head(array) {
-  return (array && array.length) ? array[0] : undefined;
-}
-
-module.exports = head;
-
-
-/***/ }),
-
-/***/ 6557:
-/***/ ((module) => {
-
-/**
- * This method returns the first argument it receives.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Util
- * @param {*} value Any value.
- * @returns {*} Returns `value`.
- * @example
- *
- * var object = { 'a': 1 };
- *
- * console.log(_.identity(object) === object);
- * // => true
- */
-function identity(value) {
-  return value;
-}
-
-module.exports = identity;
-
-
-/***/ }),
-
-/***/ 64721:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseIndexOf = __webpack_require__(42118),
-    isArrayLike = __webpack_require__(98612),
-    isString = __webpack_require__(47037),
-    toInteger = __webpack_require__(40554),
-    values = __webpack_require__(52628);
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeMax = Math.max;
-
-/**
- * Checks if `value` is in `collection`. If `collection` is a string, it's
- * checked for a substring of `value`, otherwise
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * is used for equality comparisons. If `fromIndex` is negative, it's used as
- * the offset from the end of `collection`.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object|string} collection The collection to inspect.
- * @param {*} value The value to search for.
- * @param {number} [fromIndex=0] The index to search from.
- * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
- * @returns {boolean} Returns `true` if `value` is found, else `false`.
- * @example
- *
- * _.includes([1, 2, 3], 1);
- * // => true
- *
- * _.includes([1, 2, 3], 1, 2);
- * // => false
- *
- * _.includes({ 'a': 1, 'b': 2 }, 1);
- * // => true
- *
- * _.includes('abcd', 'bc');
- * // => true
- */
-function includes(collection, value, fromIndex, guard) {
-  collection = isArrayLike(collection) ? collection : values(collection);
-  fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;
-
-  var length = collection.length;
-  if (fromIndex < 0) {
-    fromIndex = nativeMax(length + fromIndex, 0);
-  }
-  return isString(collection)
-    ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
-    : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
-}
-
-module.exports = includes;
-
-
-/***/ }),
-
-/***/ 3651:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseIndexOf = __webpack_require__(42118),
-    toInteger = __webpack_require__(40554);
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeMax = Math.max;
-
-/**
- * Gets the index at which the first occurrence of `value` is found in `array`
- * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * for equality comparisons. If `fromIndex` is negative, it's used as the
- * offset from the end of `array`.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Array
- * @param {Array} array The array to inspect.
- * @param {*} value The value to search for.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {number} Returns the index of the matched value, else `-1`.
- * @example
- *
- * _.indexOf([1, 2, 1, 2], 2);
- * // => 1
- *
- * // Search from the `fromIndex`.
- * _.indexOf([1, 2, 1, 2], 2, 2);
- * // => 3
- */
-function indexOf(array, value, fromIndex) {
-  var length = array == null ? 0 : array.length;
-  if (!length) {
-    return -1;
-  }
-  var index = fromIndex == null ? 0 : toInteger(fromIndex);
-  if (index < 0) {
-    index = nativeMax(length + index, 0);
-  }
-  return baseIndexOf(array, value, index);
-}
-
-module.exports = indexOf;
-
-
-/***/ }),
-
-/***/ 35694:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseIsArguments = __webpack_require__(9454),
-    isObjectLike = __webpack_require__(37005);
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/** Built-in value references. */
-var propertyIsEnumerable = objectProto.propertyIsEnumerable;
-
-/**
- * Checks if `value` is likely an `arguments` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an `arguments` object,
- *  else `false`.
- * @example
- *
- * _.isArguments(function() { return arguments; }());
- * // => true
- *
- * _.isArguments([1, 2, 3]);
- * // => false
- */
-var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
-  return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
-    !propertyIsEnumerable.call(value, 'callee');
-};
-
-module.exports = isArguments;
-
-
-/***/ }),
-
-/***/ 1469:
-/***/ ((module) => {
-
-/**
- * Checks if `value` is classified as an `Array` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array, else `false`.
- * @example
- *
- * _.isArray([1, 2, 3]);
- * // => true
- *
- * _.isArray(document.body.children);
- * // => false
- *
- * _.isArray('abc');
- * // => false
- *
- * _.isArray(_.noop);
- * // => false
- */
-var isArray = Array.isArray;
-
-module.exports = isArray;
-
-
-/***/ }),
-
-/***/ 98612:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isFunction = __webpack_require__(23560),
-    isLength = __webpack_require__(41780);
-
-/**
- * Checks if `value` is array-like. A value is considered array-like if it's
- * not a function and has a `value.length` that's an integer greater than or
- * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
- * @example
- *
- * _.isArrayLike([1, 2, 3]);
- * // => true
- *
- * _.isArrayLike(document.body.children);
- * // => true
- *
- * _.isArrayLike('abc');
- * // => true
- *
- * _.isArrayLike(_.noop);
- * // => false
- */
-function isArrayLike(value) {
-  return value != null && isLength(value.length) && !isFunction(value);
-}
-
-module.exports = isArrayLike;
-
-
-/***/ }),
-
-/***/ 29246:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isArrayLike = __webpack_require__(98612),
-    isObjectLike = __webpack_require__(37005);
-
-/**
- * This method is like `_.isArrayLike` except that it also checks if `value`
- * is an object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array-like object,
- *  else `false`.
- * @example
- *
- * _.isArrayLikeObject([1, 2, 3]);
- * // => true
- *
- * _.isArrayLikeObject(document.body.children);
- * // => true
- *
- * _.isArrayLikeObject('abc');
- * // => false
- *
- * _.isArrayLikeObject(_.noop);
- * // => false
- */
-function isArrayLikeObject(value) {
-  return isObjectLike(value) && isArrayLike(value);
-}
-
-module.exports = isArrayLikeObject;
-
-
-/***/ }),
-
-/***/ 44144:
-/***/ ((module, exports, __webpack_require__) => {
-
-/* module decorator */ module = __webpack_require__.nmd(module);
-var root = __webpack_require__(55639),
-    stubFalse = __webpack_require__(95062);
-
-/** Detect free variable `exports`. */
-var freeExports =  true && exports && !exports.nodeType && exports;
-
-/** Detect free variable `module`. */
-var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module;
-
-/** Detect the popular CommonJS extension `module.exports`. */
-var moduleExports = freeModule && freeModule.exports === freeExports;
-
-/** Built-in value references. */
-var Buffer = moduleExports ? root.Buffer : undefined;
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;
-
-/**
- * Checks if `value` is a buffer.
- *
- * @static
- * @memberOf _
- * @since 4.3.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
- * @example
- *
- * _.isBuffer(new Buffer(2));
- * // => true
- *
- * _.isBuffer(new Uint8Array(2));
- * // => false
- */
-var isBuffer = nativeIsBuffer || stubFalse;
-
-module.exports = isBuffer;
-
-
-/***/ }),
-
-/***/ 41609:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseKeys = __webpack_require__(280),
-    getTag = __webpack_require__(64160),
-    isArguments = __webpack_require__(35694),
-    isArray = __webpack_require__(1469),
-    isArrayLike = __webpack_require__(98612),
-    isBuffer = __webpack_require__(44144),
-    isPrototype = __webpack_require__(25726),
-    isTypedArray = __webpack_require__(36719);
-
-/** `Object#toString` result references. */
-var mapTag = '[object Map]',
-    setTag = '[object Set]';
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Checks if `value` is an empty object, collection, map, or set.
- *
- * Objects are considered empty if they have no own enumerable string keyed
- * properties.
- *
- * Array-like values such as `arguments` objects, arrays, buffers, strings, or
- * jQuery-like collections are considered empty if they have a `length` of `0`.
- * Similarly, maps and sets are considered empty if they have a `size` of `0`.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is empty, else `false`.
- * @example
- *
- * _.isEmpty(null);
- * // => true
- *
- * _.isEmpty(true);
- * // => true
- *
- * _.isEmpty(1);
- * // => true
- *
- * _.isEmpty([1, 2, 3]);
- * // => false
- *
- * _.isEmpty({ 'a': 1 });
- * // => false
- */
-function isEmpty(value) {
-  if (value == null) {
-    return true;
-  }
-  if (isArrayLike(value) &&
-      (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
-        isBuffer(value) || isTypedArray(value) || isArguments(value))) {
-    return !value.length;
-  }
-  var tag = getTag(value);
-  if (tag == mapTag || tag == setTag) {
-    return !value.size;
-  }
-  if (isPrototype(value)) {
-    return !baseKeys(value).length;
-  }
-  for (var key in value) {
-    if (hasOwnProperty.call(value, key)) {
-      return false;
-    }
-  }
-  return true;
-}
-
-module.exports = isEmpty;
-
-
-/***/ }),
-
-/***/ 23560:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseGetTag = __webpack_require__(44239),
-    isObject = __webpack_require__(13218);
-
-/** `Object#toString` result references. */
-var asyncTag = '[object AsyncFunction]',
-    funcTag = '[object Function]',
-    genTag = '[object GeneratorFunction]',
-    proxyTag = '[object Proxy]';
-
-/**
- * Checks if `value` is classified as a `Function` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- *
- * _.isFunction(/abc/);
- * // => false
- */
-function isFunction(value) {
-  if (!isObject(value)) {
-    return false;
-  }
-  // The use of `Object#toString` avoids issues with the `typeof` operator
-  // in Safari 9 which returns 'object' for typed arrays and other constructors.
-  var tag = baseGetTag(value);
-  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
-}
-
-module.exports = isFunction;
-
-
-/***/ }),
-
-/***/ 41780:
-/***/ ((module) => {
-
-/** Used as references for various `Number` constants. */
-var MAX_SAFE_INTEGER = 9007199254740991;
-
-/**
- * Checks if `value` is a valid array-like length.
- *
- * **Note:** This method is loosely based on
- * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
- * @example
- *
- * _.isLength(3);
- * // => true
- *
- * _.isLength(Number.MIN_VALUE);
- * // => false
- *
- * _.isLength(Infinity);
- * // => false
- *
- * _.isLength('3');
- * // => false
- */
-function isLength(value) {
-  return typeof value == 'number' &&
-    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
-}
-
-module.exports = isLength;
-
-
-/***/ }),
-
-/***/ 56688:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseIsMap = __webpack_require__(25588),
-    baseUnary = __webpack_require__(7518),
-    nodeUtil = __webpack_require__(31167);
-
-/* Node.js helper references. */
-var nodeIsMap = nodeUtil && nodeUtil.isMap;
-
-/**
- * Checks if `value` is classified as a `Map` object.
- *
- * @static
- * @memberOf _
- * @since 4.3.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a map, else `false`.
- * @example
- *
- * _.isMap(new Map);
- * // => true
- *
- * _.isMap(new WeakMap);
- * // => false
- */
-var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
-
-module.exports = isMap;
-
-
-/***/ }),
-
-/***/ 13218:
-/***/ ((module) => {
-
-/**
- * Checks if `value` is the
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(_.noop);
- * // => true
- *
- * _.isObject(null);
- * // => false
- */
-function isObject(value) {
-  var type = typeof value;
-  return value != null && (type == 'object' || type == 'function');
-}
-
-module.exports = isObject;
-
-
-/***/ }),
-
-/***/ 37005:
-/***/ ((module) => {
-
-/**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
- *
- * _.isObjectLike(null);
- * // => false
- */
-function isObjectLike(value) {
-  return value != null && typeof value == 'object';
-}
-
-module.exports = isObjectLike;
-
-
-/***/ }),
-
-/***/ 68630:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseGetTag = __webpack_require__(44239),
-    getPrototype = __webpack_require__(85924),
-    isObjectLike = __webpack_require__(37005);
-
-/** `Object#toString` result references. */
-var objectTag = '[object Object]';
-
-/** Used for built-in method references. */
-var funcProto = Function.prototype,
-    objectProto = Object.prototype;
-
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/** Used to infer the `Object` constructor. */
-var objectCtorString = funcToString.call(Object);
-
-/**
- * Checks if `value` is a plain object, that is, an object created by the
- * `Object` constructor or one with a `[[Prototype]]` of `null`.
- *
- * @static
- * @memberOf _
- * @since 0.8.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
- * @example
- *
- * function Foo() {
- *   this.a = 1;
- * }
- *
- * _.isPlainObject(new Foo);
- * // => false
- *
- * _.isPlainObject([1, 2, 3]);
- * // => false
- *
- * _.isPlainObject({ 'x': 0, 'y': 0 });
- * // => true
- *
- * _.isPlainObject(Object.create(null));
- * // => true
- */
-function isPlainObject(value) {
-  if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
-    return false;
-  }
-  var proto = getPrototype(value);
-  if (proto === null) {
-    return true;
-  }
-  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
-  return typeof Ctor == 'function' && Ctor instanceof Ctor &&
-    funcToString.call(Ctor) == objectCtorString;
-}
-
-module.exports = isPlainObject;
-
-
-/***/ }),
-
-/***/ 96347:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseIsRegExp = __webpack_require__(23933),
-    baseUnary = __webpack_require__(7518),
-    nodeUtil = __webpack_require__(31167);
-
-/* Node.js helper references. */
-var nodeIsRegExp = nodeUtil && nodeUtil.isRegExp;
-
-/**
- * Checks if `value` is classified as a `RegExp` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
- * @example
- *
- * _.isRegExp(/abc/);
- * // => true
- *
- * _.isRegExp('/abc/');
- * // => false
- */
-var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
-
-module.exports = isRegExp;
-
-
-/***/ }),
-
-/***/ 72928:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseIsSet = __webpack_require__(29221),
-    baseUnary = __webpack_require__(7518),
-    nodeUtil = __webpack_require__(31167);
-
-/* Node.js helper references. */
-var nodeIsSet = nodeUtil && nodeUtil.isSet;
-
-/**
- * Checks if `value` is classified as a `Set` object.
- *
- * @static
- * @memberOf _
- * @since 4.3.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a set, else `false`.
- * @example
- *
- * _.isSet(new Set);
- * // => true
- *
- * _.isSet(new WeakSet);
- * // => false
- */
-var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
-
-module.exports = isSet;
-
-
-/***/ }),
-
-/***/ 47037:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseGetTag = __webpack_require__(44239),
-    isArray = __webpack_require__(1469),
-    isObjectLike = __webpack_require__(37005);
-
-/** `Object#toString` result references. */
-var stringTag = '[object String]';
-
-/**
- * Checks if `value` is classified as a `String` primitive or object.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a string, else `false`.
- * @example
- *
- * _.isString('abc');
- * // => true
- *
- * _.isString(1);
- * // => false
- */
-function isString(value) {
-  return typeof value == 'string' ||
-    (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
-}
-
-module.exports = isString;
-
-
-/***/ }),
-
-/***/ 33448:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseGetTag = __webpack_require__(44239),
-    isObjectLike = __webpack_require__(37005);
-
-/** `Object#toString` result references. */
-var symbolTag = '[object Symbol]';
-
-/**
- * Checks if `value` is classified as a `Symbol` primitive or object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
- * @example
- *
- * _.isSymbol(Symbol.iterator);
- * // => true
- *
- * _.isSymbol('abc');
- * // => false
- */
-function isSymbol(value) {
-  return typeof value == 'symbol' ||
-    (isObjectLike(value) && baseGetTag(value) == symbolTag);
-}
-
-module.exports = isSymbol;
-
-
-/***/ }),
-
-/***/ 36719:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseIsTypedArray = __webpack_require__(38749),
-    baseUnary = __webpack_require__(7518),
-    nodeUtil = __webpack_require__(31167);
-
-/* Node.js helper references. */
-var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
-
-/**
- * Checks if `value` is classified as a typed array.
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
- * @example
- *
- * _.isTypedArray(new Uint8Array);
- * // => true
- *
- * _.isTypedArray([]);
- * // => false
- */
-var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
-
-module.exports = isTypedArray;
-
-
-/***/ }),
-
-/***/ 52353:
-/***/ ((module) => {
-
-/**
- * Checks if `value` is `undefined`.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
- * @example
- *
- * _.isUndefined(void 0);
- * // => true
- *
- * _.isUndefined(null);
- * // => false
- */
-function isUndefined(value) {
-  return value === undefined;
-}
-
-module.exports = isUndefined;
-
-
-/***/ }),
-
-/***/ 3674:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayLikeKeys = __webpack_require__(14636),
-    baseKeys = __webpack_require__(280),
-    isArrayLike = __webpack_require__(98612);
-
-/**
- * Creates an array of the own enumerable property names of `object`.
- *
- * **Note:** Non-object values are coerced to objects. See the
- * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
- * for more details.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- * @example
- *
- * function Foo() {
- *   this.a = 1;
- *   this.b = 2;
- * }
- *
- * Foo.prototype.c = 3;
- *
- * _.keys(new Foo);
- * // => ['a', 'b'] (iteration order is not guaranteed)
- *
- * _.keys('hi');
- * // => ['0', '1']
- */
-function keys(object) {
-  return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
-}
-
-module.exports = keys;
-
-
-/***/ }),
-
-/***/ 81704:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayLikeKeys = __webpack_require__(14636),
-    baseKeysIn = __webpack_require__(10313),
-    isArrayLike = __webpack_require__(98612);
-
-/**
- * Creates an array of the own and inherited enumerable property names of `object`.
- *
- * **Note:** Non-object values are coerced to objects.
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category Object
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- * @example
- *
- * function Foo() {
- *   this.a = 1;
- *   this.b = 2;
- * }
- *
- * Foo.prototype.c = 3;
- *
- * _.keysIn(new Foo);
- * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
- */
-function keysIn(object) {
-  return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
-}
-
-module.exports = keysIn;
-
-
-/***/ }),
-
-/***/ 10928:
-/***/ ((module) => {
-
-/**
- * Gets the last element of `array`.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Array
- * @param {Array} array The array to query.
- * @returns {*} Returns the last element of `array`.
- * @example
- *
- * _.last([1, 2, 3]);
- * // => 3
- */
-function last(array) {
-  var length = array == null ? 0 : array.length;
-  return length ? array[length - 1] : undefined;
-}
-
-module.exports = last;
-
-
-/***/ }),
-
-/***/ 96486:
-/***/ (function(module, exports, __webpack_require__) {
-
-/* module decorator */ module = __webpack_require__.nmd(module);
-var __WEBPACK_AMD_DEFINE_RESULT__;/**
- * @license
- * Lodash <https://lodash.com/>
- * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
- * Released under MIT license <https://lodash.com/license>
- * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
- * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
- */
-;(function() {
-
-  /** Used as a safe reference for `undefined` in pre-ES5 environments. */
-  var undefined;
-
-  /** Used as the semantic version number. */
-  var VERSION = '4.17.21';
-
-  /** Used as the size to enable large array optimizations. */
-  var LARGE_ARRAY_SIZE = 200;
-
-  /** Error message constants. */
-  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',
-      FUNC_ERROR_TEXT = 'Expected a function',
-      INVALID_TEMPL_VAR_ERROR_TEXT = 'Invalid `variable` option passed into `_.template`';
-
-  /** Used to stand-in for `undefined` hash values. */
-  var HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-  /** Used as the maximum memoize cache size. */
-  var MAX_MEMOIZE_SIZE = 500;
-
-  /** Used as the internal argument placeholder. */
-  var PLACEHOLDER = '__lodash_placeholder__';
-
-  /** Used to compose bitmasks for cloning. */
-  var CLONE_DEEP_FLAG = 1,
-      CLONE_FLAT_FLAG = 2,
-      CLONE_SYMBOLS_FLAG = 4;
-
-  /** Used to compose bitmasks for value comparisons. */
-  var COMPARE_PARTIAL_FLAG = 1,
-      COMPARE_UNORDERED_FLAG = 2;
-
-  /** Used to compose bitmasks for function metadata. */
-  var WRAP_BIND_FLAG = 1,
-      WRAP_BIND_KEY_FLAG = 2,
-      WRAP_CURRY_BOUND_FLAG = 4,
-      WRAP_CURRY_FLAG = 8,
-      WRAP_CURRY_RIGHT_FLAG = 16,
-      WRAP_PARTIAL_FLAG = 32,
-      WRAP_PARTIAL_RIGHT_FLAG = 64,
-      WRAP_ARY_FLAG = 128,
-      WRAP_REARG_FLAG = 256,
-      WRAP_FLIP_FLAG = 512;
-
-  /** Used as default options for `_.truncate`. */
-  var DEFAULT_TRUNC_LENGTH = 30,
-      DEFAULT_TRUNC_OMISSION = '...';
-
-  /** Used to detect hot functions by number of calls within a span of milliseconds. */
-  var HOT_COUNT = 800,
-      HOT_SPAN = 16;
-
-  /** Used to indicate the type of lazy iteratees. */
-  var LAZY_FILTER_FLAG = 1,
-      LAZY_MAP_FLAG = 2,
-      LAZY_WHILE_FLAG = 3;
-
-  /** Used as references for various `Number` constants. */
-  var INFINITY = 1 / 0,
-      MAX_SAFE_INTEGER = 9007199254740991,
-      MAX_INTEGER = 1.7976931348623157e+308,
-      NAN = 0 / 0;
-
-  /** Used as references for the maximum length and index of an array. */
-  var MAX_ARRAY_LENGTH = 4294967295,
-      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,
-      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;
-
-  /** Used to associate wrap methods with their bit flags. */
-  var wrapFlags = [
-    ['ary', WRAP_ARY_FLAG],
-    ['bind', WRAP_BIND_FLAG],
-    ['bindKey', WRAP_BIND_KEY_FLAG],
-    ['curry', WRAP_CURRY_FLAG],
-    ['curryRight', WRAP_CURRY_RIGHT_FLAG],
-    ['flip', WRAP_FLIP_FLAG],
-    ['partial', WRAP_PARTIAL_FLAG],
-    ['partialRight', WRAP_PARTIAL_RIGHT_FLAG],
-    ['rearg', WRAP_REARG_FLAG]
-  ];
-
-  /** `Object#toString` result references. */
-  var argsTag = '[object Arguments]',
-      arrayTag = '[object Array]',
-      asyncTag = '[object AsyncFunction]',
-      boolTag = '[object Boolean]',
-      dateTag = '[object Date]',
-      domExcTag = '[object DOMException]',
-      errorTag = '[object Error]',
-      funcTag = '[object Function]',
-      genTag = '[object GeneratorFunction]',
-      mapTag = '[object Map]',
-      numberTag = '[object Number]',
-      nullTag = '[object Null]',
-      objectTag = '[object Object]',
-      promiseTag = '[object Promise]',
-      proxyTag = '[object Proxy]',
-      regexpTag = '[object RegExp]',
-      setTag = '[object Set]',
-      stringTag = '[object String]',
-      symbolTag = '[object Symbol]',
-      undefinedTag = '[object Undefined]',
-      weakMapTag = '[object WeakMap]',
-      weakSetTag = '[object WeakSet]';
-
-  var arrayBufferTag = '[object ArrayBuffer]',
-      dataViewTag = '[object DataView]',
-      float32Tag = '[object Float32Array]',
-      float64Tag = '[object Float64Array]',
-      int8Tag = '[object Int8Array]',
-      int16Tag = '[object Int16Array]',
-      int32Tag = '[object Int32Array]',
-      uint8Tag = '[object Uint8Array]',
-      uint8ClampedTag = '[object Uint8ClampedArray]',
-      uint16Tag = '[object Uint16Array]',
-      uint32Tag = '[object Uint32Array]';
-
-  /** Used to match empty string literals in compiled template source. */
-  var reEmptyStringLeading = /\b__p \+= '';/g,
-      reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
-      reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
-
-  /** Used to match HTML entities and HTML characters. */
-  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,
-      reUnescapedHtml = /[&<>"']/g,
-      reHasEscapedHtml = RegExp(reEscapedHtml.source),
-      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
-
-  /** Used to match template delimiters. */
-  var reEscape = /<%-([\s\S]+?)%>/g,
-      reEvaluate = /<%([\s\S]+?)%>/g,
-      reInterpolate = /<%=([\s\S]+?)%>/g;
-
-  /** Used to match property names within property paths. */
-  var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
-      reIsPlainProp = /^\w*$/,
-      rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
-
-  /**
-   * Used to match `RegExp`
-   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
-   */
-  var reRegExpChar = /[\\^$.*+?()[\]{}|]/g,
-      reHasRegExpChar = RegExp(reRegExpChar.source);
-
-  /** Used to match leading whitespace. */
-  var reTrimStart = /^\s+/;
-
-  /** Used to match a single whitespace character. */
-  var reWhitespace = /\s/;
-
-  /** Used to match wrap detail comments. */
-  var reWrapComment = /\{(?:\n\/\* \[wrapped with .+\] \*\/)?\n?/,
-      reWrapDetails = /\{\n\/\* \[wrapped with (.+)\] \*/,
-      reSplitDetails = /,? & /;
-
-  /** Used to match words composed of alphanumeric characters. */
-  var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
-
-  /**
-   * Used to validate the `validate` option in `_.template` variable.
-   *
-   * Forbids characters which could potentially change the meaning of the function argument definition:
-   * - "()," (modification of function parameters)
-   * - "=" (default value)
-   * - "[]{}" (destructuring of function parameters)
-   * - "/" (beginning of a comment)
-   * - whitespace
-   */
-  var reForbiddenIdentifierChars = /[()=,{}\[\]\/\s]/;
-
-  /** Used to match backslashes in property paths. */
-  var reEscapeChar = /\\(\\)?/g;
-
-  /**
-   * Used to match
-   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).
-   */
-  var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
-
-  /** Used to match `RegExp` flags from their coerced string values. */
-  var reFlags = /\w*$/;
-
-  /** Used to detect bad signed hexadecimal string values. */
-  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
-
-  /** Used to detect binary string values. */
-  var reIsBinary = /^0b[01]+$/i;
-
-  /** Used to detect host constructors (Safari). */
-  var reIsHostCtor = /^\[object .+?Constructor\]$/;
-
-  /** Used to detect octal string values. */
-  var reIsOctal = /^0o[0-7]+$/i;
-
-  /** Used to detect unsigned integer values. */
-  var reIsUint = /^(?:0|[1-9]\d*)$/;
-
-  /** Used to match Latin Unicode letters (excluding mathematical operators). */
-  var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
-
-  /** Used to ensure capturing order of template delimiters. */
-  var reNoMatch = /($^)/;
-
-  /** Used to match unescaped characters in compiled string literals. */
-  var reUnescapedString = /['\n\r\u2028\u2029\\]/g;
-
-  /** Used to compose unicode character classes. */
-  var rsAstralRange = '\\ud800-\\udfff',
-      rsComboMarksRange = '\\u0300-\\u036f',
-      reComboHalfMarksRange = '\\ufe20-\\ufe2f',
-      rsComboSymbolsRange = '\\u20d0-\\u20ff',
-      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
-      rsDingbatRange = '\\u2700-\\u27bf',
-      rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
-      rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
-      rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
-      rsPunctuationRange = '\\u2000-\\u206f',
-      rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
-      rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
-      rsVarRange = '\\ufe0e\\ufe0f',
-      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
-
-  /** Used to compose unicode capture groups. */
-  var rsApos = "['\u2019]",
-      rsAstral = '[' + rsAstralRange + ']',
-      rsBreak = '[' + rsBreakRange + ']',
-      rsCombo = '[' + rsComboRange + ']',
-      rsDigits = '\\d+',
-      rsDingbat = '[' + rsDingbatRange + ']',
-      rsLower = '[' + rsLowerRange + ']',
-      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
-      rsFitz = '\\ud83c[\\udffb-\\udfff]',
-      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
-      rsNonAstral = '[^' + rsAstralRange + ']',
-      rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
-      rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
-      rsUpper = '[' + rsUpperRange + ']',
-      rsZWJ = '\\u200d';
-
-  /** Used to compose unicode regexes. */
-  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',
-      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',
-      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
-      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
-      reOptMod = rsModifier + '?',
-      rsOptVar = '[' + rsVarRange + ']?',
-      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
-      rsOrdLower = '\\d*(?:1st|2nd|3rd|(?![123])\\dth)(?=\\b|[A-Z_])',
-      rsOrdUpper = '\\d*(?:1ST|2ND|3RD|(?![123])\\dTH)(?=\\b|[a-z_])',
-      rsSeq = rsOptVar + reOptMod + rsOptJoin,
-      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,
-      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
-
-  /** Used to match apostrophes. */
-  var reApos = RegExp(rsApos, 'g');
-
-  /**
-   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
-   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
-   */
-  var reComboMark = RegExp(rsCombo, 'g');
-
-  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
-  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
-
-  /** Used to match complex or compound words. */
-  var reUnicodeWord = RegExp([
-    rsUpper + '?' + rsLower + '+' + rsOptContrLower + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
-    rsMiscUpper + '+' + rsOptContrUpper + '(?=' + [rsBreak, rsUpper + rsMiscLower, '$'].join('|') + ')',
-    rsUpper + '?' + rsMiscLower + '+' + rsOptContrLower,
-    rsUpper + '+' + rsOptContrUpper,
-    rsOrdUpper,
-    rsOrdLower,
-    rsDigits,
-    rsEmoji
-  ].join('|'), 'g');
-
-  /** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
-  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');
-
-  /** Used to detect strings that need a more robust regexp to match words. */
-  var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
-
-  /** Used to assign default `context` object properties. */
-  var contextProps = [
-    'Array', 'Buffer', 'DataView', 'Date', 'Error', 'Float32Array', 'Float64Array',
-    'Function', 'Int8Array', 'Int16Array', 'Int32Array', 'Map', 'Math', 'Object',
-    'Promise', 'RegExp', 'Set', 'String', 'Symbol', 'TypeError', 'Uint8Array',
-    'Uint8ClampedArray', 'Uint16Array', 'Uint32Array', 'WeakMap',
-    '_', 'clearTimeout', 'isFinite', 'parseInt', 'setTimeout'
-  ];
-
-  /** Used to make template sourceURLs easier to identify. */
-  var templateCounter = -1;
-
-  /** Used to identify `toStringTag` values of typed arrays. */
-  var typedArrayTags = {};
-  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
-  typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
-  typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
-  typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
-  typedArrayTags[uint32Tag] = true;
-  typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
-  typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
-  typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
-  typedArrayTags[errorTag] = typedArrayTags[funcTag] =
-  typedArrayTags[mapTag] = typedArrayTags[numberTag] =
-  typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
-  typedArrayTags[setTag] = typedArrayTags[stringTag] =
-  typedArrayTags[weakMapTag] = false;
-
-  /** Used to identify `toStringTag` values supported by `_.clone`. */
-  var cloneableTags = {};
-  cloneableTags[argsTag] = cloneableTags[arrayTag] =
-  cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] =
-  cloneableTags[boolTag] = cloneableTags[dateTag] =
-  cloneableTags[float32Tag] = cloneableTags[float64Tag] =
-  cloneableTags[int8Tag] = cloneableTags[int16Tag] =
-  cloneableTags[int32Tag] = cloneableTags[mapTag] =
-  cloneableTags[numberTag] = cloneableTags[objectTag] =
-  cloneableTags[regexpTag] = cloneableTags[setTag] =
-  cloneableTags[stringTag] = cloneableTags[symbolTag] =
-  cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] =
-  cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
-  cloneableTags[errorTag] = cloneableTags[funcTag] =
-  cloneableTags[weakMapTag] = false;
-
-  /** Used to map Latin Unicode letters to basic Latin letters. */
-  var deburredLetters = {
-    // Latin-1 Supplement block.
-    '\xc0': 'A',  '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
-    '\xe0': 'a',  '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
-    '\xc7': 'C',  '\xe7': 'c',
-    '\xd0': 'D',  '\xf0': 'd',
-    '\xc8': 'E',  '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
-    '\xe8': 'e',  '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
-    '\xcc': 'I',  '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
-    '\xec': 'i',  '\xed': 'i', '\xee': 'i', '\xef': 'i',
-    '\xd1': 'N',  '\xf1': 'n',
-    '\xd2': 'O',  '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
-    '\xf2': 'o',  '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
-    '\xd9': 'U',  '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
-    '\xf9': 'u',  '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
-    '\xdd': 'Y',  '\xfd': 'y', '\xff': 'y',
-    '\xc6': 'Ae', '\xe6': 'ae',
-    '\xde': 'Th', '\xfe': 'th',
-    '\xdf': 'ss',
-    // Latin Extended-A block.
-    '\u0100': 'A',  '\u0102': 'A', '\u0104': 'A',
-    '\u0101': 'a',  '\u0103': 'a', '\u0105': 'a',
-    '\u0106': 'C',  '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
-    '\u0107': 'c',  '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
-    '\u010e': 'D',  '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
-    '\u0112': 'E',  '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
-    '\u0113': 'e',  '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
-    '\u011c': 'G',  '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
-    '\u011d': 'g',  '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
-    '\u0124': 'H',  '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
-    '\u0128': 'I',  '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
-    '\u0129': 'i',  '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
-    '\u0134': 'J',  '\u0135': 'j',
-    '\u0136': 'K',  '\u0137': 'k', '\u0138': 'k',
-    '\u0139': 'L',  '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
-    '\u013a': 'l',  '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
-    '\u0143': 'N',  '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
-    '\u0144': 'n',  '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
-    '\u014c': 'O',  '\u014e': 'O', '\u0150': 'O',
-    '\u014d': 'o',  '\u014f': 'o', '\u0151': 'o',
-    '\u0154': 'R',  '\u0156': 'R', '\u0158': 'R',
-    '\u0155': 'r',  '\u0157': 'r', '\u0159': 'r',
-    '\u015a': 'S',  '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
-    '\u015b': 's',  '\u015d': 's', '\u015f': 's', '\u0161': 's',
-    '\u0162': 'T',  '\u0164': 'T', '\u0166': 'T',
-    '\u0163': 't',  '\u0165': 't', '\u0167': 't',
-    '\u0168': 'U',  '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
-    '\u0169': 'u',  '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
-    '\u0174': 'W',  '\u0175': 'w',
-    '\u0176': 'Y',  '\u0177': 'y', '\u0178': 'Y',
-    '\u0179': 'Z',  '\u017b': 'Z', '\u017d': 'Z',
-    '\u017a': 'z',  '\u017c': 'z', '\u017e': 'z',
-    '\u0132': 'IJ', '\u0133': 'ij',
-    '\u0152': 'Oe', '\u0153': 'oe',
-    '\u0149': "'n", '\u017f': 's'
-  };
-
-  /** Used to map characters to HTML entities. */
-  var htmlEscapes = {
-    '&': '&',
-    '<': '<',
-    '>': '>',
-    '"': '"',
-    "'": '''
-  };
-
-  /** Used to map HTML entities to characters. */
-  var htmlUnescapes = {
-    '&': '&',
-    '<': '<',
-    '>': '>',
-    '"': '"',
-    ''': "'"
-  };
-
-  /** Used to escape characters for inclusion in compiled string literals. */
-  var stringEscapes = {
-    '\\': '\\',
-    "'": "'",
-    '\n': 'n',
-    '\r': 'r',
-    '\u2028': 'u2028',
-    '\u2029': 'u2029'
-  };
-
-  /** Built-in method references without a dependency on `root`. */
-  var freeParseFloat = parseFloat,
-      freeParseInt = parseInt;
-
-  /** Detect free variable `global` from Node.js. */
-  var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
-
-  /** Detect free variable `self`. */
-  var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
-
-  /** Used as a reference to the global object. */
-  var root = freeGlobal || freeSelf || Function('return this')();
-
-  /** Detect free variable `exports`. */
-  var freeExports =  true && exports && !exports.nodeType && exports;
-
-  /** Detect free variable `module`. */
-  var freeModule = freeExports && "object" == 'object' && module && !module.nodeType && module;
-
-  /** Detect the popular CommonJS extension `module.exports`. */
-  var moduleExports = freeModule && freeModule.exports === freeExports;
-
-  /** Detect free variable `process` from Node.js. */
-  var freeProcess = moduleExports && freeGlobal.process;
-
-  /** Used to access faster Node.js helpers. */
-  var nodeUtil = (function() {
-    try {
-      // Use `util.types` for Node.js 10+.
-      var types = freeModule && freeModule.require && freeModule.require('util').types;
-
-      if (types) {
-        return types;
-      }
-
-      // Legacy `process.binding('util')` for Node.js < 10.
-      return freeProcess && freeProcess.binding && freeProcess.binding('util');
-    } catch (e) {}
-  }());
-
-  /* Node.js helper references. */
-  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,
-      nodeIsDate = nodeUtil && nodeUtil.isDate,
-      nodeIsMap = nodeUtil && nodeUtil.isMap,
-      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,
-      nodeIsSet = nodeUtil && nodeUtil.isSet,
-      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
-
-  /*--------------------------------------------------------------------------*/
-
-  /**
-   * A faster alternative to `Function#apply`, this function invokes `func`
-   * with the `this` binding of `thisArg` and the arguments of `args`.
-   *
-   * @private
-   * @param {Function} func The function to invoke.
-   * @param {*} thisArg The `this` binding of `func`.
-   * @param {Array} args The arguments to invoke `func` with.
-   * @returns {*} Returns the result of `func`.
-   */
-  function apply(func, thisArg, args) {
-    switch (args.length) {
-      case 0: return func.call(thisArg);
-      case 1: return func.call(thisArg, args[0]);
-      case 2: return func.call(thisArg, args[0], args[1]);
-      case 3: return func.call(thisArg, args[0], args[1], args[2]);
-    }
-    return func.apply(thisArg, args);
-  }
-
-  /**
-   * A specialized version of `baseAggregator` for arrays.
-   *
-   * @private
-   * @param {Array} [array] The array to iterate over.
-   * @param {Function} setter The function to set `accumulator` values.
-   * @param {Function} iteratee The iteratee to transform keys.
-   * @param {Object} accumulator The initial aggregated object.
-   * @returns {Function} Returns `accumulator`.
-   */
-  function arrayAggregator(array, setter, iteratee, accumulator) {
-    var index = -1,
-        length = array == null ? 0 : array.length;
-
-    while (++index < length) {
-      var value = array[index];
-      setter(accumulator, value, iteratee(value), array);
-    }
-    return accumulator;
-  }
-
-  /**
-   * A specialized version of `_.forEach` for arrays without support for
-   * iteratee shorthands.
-   *
-   * @private
-   * @param {Array} [array] The array to iterate over.
-   * @param {Function} iteratee The function invoked per iteration.
-   * @returns {Array} Returns `array`.
-   */
-  function arrayEach(array, iteratee) {
-    var index = -1,
-        length = array == null ? 0 : array.length;
-
-    while (++index < length) {
-      if (iteratee(array[index], index, array) === false) {
-        break;
-      }
-    }
-    return array;
-  }
-
-  /**
-   * A specialized version of `_.forEachRight` for arrays without support for
-   * iteratee shorthands.
-   *
-   * @private
-   * @param {Array} [array] The array to iterate over.
-   * @param {Function} iteratee The function invoked per iteration.
-   * @returns {Array} Returns `array`.
-   */
-  function arrayEachRight(array, iteratee) {
-    var length = array == null ? 0 : array.length;
-
-    while (length--) {
-      if (iteratee(array[length], length, array) === false) {
-        break;
-      }
-    }
-    return array;
-  }
-
-  /**
-   * A specialized version of `_.every` for arrays without support for
-   * iteratee shorthands.
-   *
-   * @private
-   * @param {Array} [array] The array to iterate over.
-   * @param {Function} predicate The function invoked per iteration.
-   * @returns {boolean} Returns `true` if all elements pass the predicate check,
-   *  else `false`.
-   */
-  function arrayEvery(array, predicate) {
-    var index = -1,
-        length = array == null ? 0 : array.length;
-
-    while (++index < length) {
-      if (!predicate(array[index], index, array)) {
-        return false;
-      }
-    }
-    return true;
-  }
-
-  /**
-   * A specialized version of `_.filter` for arrays without support for
-   * iteratee shorthands.
-   *
-   * @private
-   * @param {Array} [array] The array to iterate over.
-   * @param {Function} predicate The function invoked per iteration.
-   * @returns {Array} Returns the new filtered array.
-   */
-  function arrayFilter(array, predicate) {
-    var index = -1,
-        length = array == null ? 0 : array.length,
-        resIndex = 0,
-        result = [];
-
-    while (++index < length) {
-      var value = array[index];
-      if (predicate(value, index, array)) {
-        result[resIndex++] = value;
-      }
-    }
-    return result;
-  }
-
-  /**
-   * A specialized version of `_.includes` for arrays without support for
-   * specifying an index to search from.
-   *
-   * @private
-   * @param {Array} [array] The array to inspect.
-   * @param {*} target The value to search for.
-   * @returns {boolean} Returns `true` if `target` is found, else `false`.
-   */
-  function arrayIncludes(array, value) {
-    var length = array == null ? 0 : array.length;
-    return !!length && baseIndexOf(array, value, 0) > -1;
-  }
-
-  /**
-   * This function is like `arrayIncludes` except that it accepts a comparator.
-   *
-   * @private
-   * @param {Array} [array] The array to inspect.
-   * @param {*} target The value to search for.
-   * @param {Function} comparator The comparator invoked per element.
-   * @returns {boolean} Returns `true` if `target` is found, else `false`.
-   */
-  function arrayIncludesWith(array, value, comparator) {
-    var index = -1,
-        length = array == null ? 0 : array.length;
-
-    while (++index < length) {
-      if (comparator(value, array[index])) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * A specialized version of `_.map` for arrays without support for iteratee
-   * shorthands.
-   *
-   * @private
-   * @param {Array} [array] The array to iterate over.
-   * @param {Function} iteratee The function invoked per iteration.
-   * @returns {Array} Returns the new mapped array.
-   */
-  function arrayMap(array, iteratee) {
-    var index = -1,
-        length = array == null ? 0 : array.length,
-        result = Array(length);
-
-    while (++index < length) {
-      result[index] = iteratee(array[index], index, array);
-    }
-    return result;
-  }
-
-  /**
-   * Appends the elements of `values` to `array`.
-   *
-   * @private
-   * @param {Array} array The array to modify.
-   * @param {Array} values The values to append.
-   * @returns {Array} Returns `array`.
-   */
-  function arrayPush(array, values) {
-    var index = -1,
-        length = values.length,
-        offset = array.length;
-
-    while (++index < length) {
-      array[offset + index] = values[index];
-    }
-    return array;
-  }
-
-  /**
-   * A specialized version of `_.reduce` for arrays without support for
-   * iteratee shorthands.
-   *
-   * @private
-   * @param {Array} [array] The array to iterate over.
-   * @param {Function} iteratee The function invoked per iteration.
-   * @param {*} [accumulator] The initial value.
-   * @param {boolean} [initAccum] Specify using the first element of `array` as
-   *  the initial value.
-   * @returns {*} Returns the accumulated value.
-   */
-  function arrayReduce(array, iteratee, accumulator, initAccum) {
-    var index = -1,
-        length = array == null ? 0 : array.length;
-
-    if (initAccum && length) {
-      accumulator = array[++index];
-    }
-    while (++index < length) {
-      accumulator = iteratee(accumulator, array[index], index, array);
-    }
-    return accumulator;
-  }
-
-  /**
-   * A specialized version of `_.reduceRight` for arrays without support for
-   * iteratee shorthands.
-   *
-   * @private
-   * @param {Array} [array] The array to iterate over.
-   * @param {Function} iteratee The function invoked per iteration.
-   * @param {*} [accumulator] The initial value.
-   * @param {boolean} [initAccum] Specify using the last element of `array` as
-   *  the initial value.
-   * @returns {*} Returns the accumulated value.
-   */
-  function arrayReduceRight(array, iteratee, accumulator, initAccum) {
-    var length = array == null ? 0 : array.length;
-    if (initAccum && length) {
-      accumulator = array[--length];
-    }
-    while (length--) {
-      accumulator = iteratee(accumulator, array[length], length, array);
-    }
-    return accumulator;
-  }
-
-  /**
-   * A specialized version of `_.some` for arrays without support for iteratee
-   * shorthands.
-   *
-   * @private
-   * @param {Array} [array] The array to iterate over.
-   * @param {Function} predicate The function invoked per iteration.
-   * @returns {boolean} Returns `true` if any element passes the predicate check,
-   *  else `false`.
-   */
-  function arraySome(array, predicate) {
-    var index = -1,
-        length = array == null ? 0 : array.length;
-
-    while (++index < length) {
-      if (predicate(array[index], index, array)) {
-        return true;
-      }
-    }
-    return false;
-  }
-
-  /**
-   * Gets the size of an ASCII `string`.
-   *
-   * @private
-   * @param {string} string The string inspect.
-   * @returns {number} Returns the string size.
-   */
-  var asciiSize = baseProperty('length');
-
-  /**
-   * Converts an ASCII `string` to an array.
-   *
-   * @private
-   * @param {string} string The string to convert.
-   * @returns {Array} Returns the converted array.
-   */
-  function asciiToArray(string) {
-    return string.split('');
-  }
-
-  /**
-   * Splits an ASCII `string` into an array of its words.
-   *
-   * @private
-   * @param {string} The string to inspect.
-   * @returns {Array} Returns the words of `string`.
-   */
-  function asciiWords(string) {
-    return string.match(reAsciiWord) || [];
-  }
-
-  /**
-   * The base implementation of methods like `_.findKey` and `_.findLastKey`,
-   * without support for iteratee shorthands, which iterates over `collection`
-   * using `eachFunc`.
-   *
-   * @private
-   * @param {Array|Object} collection The collection to inspect.
-   * @param {Function} predicate The function invoked per iteration.
-   * @param {Function} eachFunc The function to iterate over `collection`.
-   * @returns {*} Returns the found element or its key, else `undefined`.
-   */
-  function baseFindKey(collection, predicate, eachFunc) {
-    var result;
-    eachFunc(collection, function(value, key, collection) {
-      if (predicate(value, key, collection)) {
-        result = key;
-        return false;
-      }
-    });
-    return result;
-  }
-
-  /**
-   * The base implementation of `_.findIndex` and `_.findLastIndex` without
-   * support for iteratee shorthands.
-   *
-   * @private
-   * @param {Array} array The array to inspect.
-   * @param {Function} predicate The function invoked per iteration.
-   * @param {number} fromIndex The index to search from.
-   * @param {boolean} [fromRight] Specify iterating from right to left.
-   * @returns {number} Returns the index of the matched value, else `-1`.
-   */
-  function baseFindIndex(array, predicate, fromIndex, fromRight) {
-    var length = array.length,
-        index = fromIndex + (fromRight ? 1 : -1);
-
-    while ((fromRight ? index-- : ++index < length)) {
-      if (predicate(array[index], index, array)) {
-        return index;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
-   *
-   * @private
-   * @param {Array} array The array to inspect.
-   * @param {*} value The value to search for.
-   * @param {number} fromIndex The index to search from.
-   * @returns {number} Returns the index of the matched value, else `-1`.
-   */
-  function baseIndexOf(array, value, fromIndex) {
-    return value === value
-      ? strictIndexOf(array, value, fromIndex)
-      : baseFindIndex(array, baseIsNaN, fromIndex);
-  }
-
-  /**
-   * This function is like `baseIndexOf` except that it accepts a comparator.
-   *
-   * @private
-   * @param {Array} array The array to inspect.
-   * @param {*} value The value to search for.
-   * @param {number} fromIndex The index to search from.
-   * @param {Function} comparator The comparator invoked per element.
-   * @returns {number} Returns the index of the matched value, else `-1`.
-   */
-  function baseIndexOfWith(array, value, fromIndex, comparator) {
-    var index = fromIndex - 1,
-        length = array.length;
-
-    while (++index < length) {
-      if (comparator(array[index], value)) {
-        return index;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * The base implementation of `_.isNaN` without support for number objects.
-   *
-   * @private
-   * @param {*} value The value to check.
-   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
-   */
-  function baseIsNaN(value) {
-    return value !== value;
-  }
-
-  /**
-   * The base implementation of `_.mean` and `_.meanBy` without support for
-   * iteratee shorthands.
-   *
-   * @private
-   * @param {Array} array The array to iterate over.
-   * @param {Function} iteratee The function invoked per iteration.
-   * @returns {number} Returns the mean.
-   */
-  function baseMean(array, iteratee) {
-    var length = array == null ? 0 : array.length;
-    return length ? (baseSum(array, iteratee) / length) : NAN;
-  }
-
-  /**
-   * The base implementation of `_.property` without support for deep paths.
-   *
-   * @private
-   * @param {string} key The key of the property to get.
-   * @returns {Function} Returns the new accessor function.
-   */
-  function baseProperty(key) {
-    return function(object) {
-      return object == null ? undefined : object[key];
-    };
-  }
-
-  /**
-   * The base implementation of `_.propertyOf` without support for deep paths.
-   *
-   * @private
-   * @param {Object} object The object to query.
-   * @returns {Function} Returns the new accessor function.
-   */
-  function basePropertyOf(object) {
-    return function(key) {
-      return object == null ? undefined : object[key];
-    };
-  }
-
-  /**
-   * The base implementation of `_.reduce` and `_.reduceRight`, without support
-   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
-   *
-   * @private
-   * @param {Array|Object} collection The collection to iterate over.
-   * @param {Function} iteratee The function invoked per iteration.
-   * @param {*} accumulator The initial value.
-   * @param {boolean} initAccum Specify using the first or last element of
-   *  `collection` as the initial value.
-   * @param {Function} eachFunc The function to iterate over `collection`.
-   * @returns {*} Returns the accumulated value.
-   */
-  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
-    eachFunc(collection, function(value, index, collection) {
-      accumulator = initAccum
-        ? (initAccum = false, value)
-        : iteratee(accumulator, value, index, collection);
-    });
-    return accumulator;
-  }
-
-  /**
-   * The base implementation of `_.sortBy` which uses `comparer` to define the
-   * sort order of `array` and replaces criteria objects with their corresponding
-   * values.
-   *
-   * @private
-   * @param {Array} array The array to sort.
-   * @param {Function} comparer The function to define sort order.
-   * @returns {Array} Returns `array`.
-   */
-  function baseSortBy(array, comparer) {
-    var length = array.length;
-
-    array.sort(comparer);
-    while (length--) {
-      array[length] = array[length].value;
-    }
-    return array;
-  }
-
-  /**
-   * The base implementation of `_.sum` and `_.sumBy` without support for
-   * iteratee shorthands.
-   *
-   * @private
-   * @param {Array} array The array to iterate over.
-   * @param {Function} iteratee The function invoked per iteration.
-   * @returns {number} Returns the sum.
-   */
-  function baseSum(array, iteratee) {
-    var result,
-        index = -1,
-        length = array.length;
-
-    while (++index < length) {
-      var current = iteratee(array[index]);
-      if (current !== undefined) {
-        result = result === undefined ? current : (result + current);
-      }
-    }
-    return result;
-  }
-
-  /**
-   * The base implementation of `_.times` without support for iteratee shorthands
-   * or max array length checks.
-   *
-   * @private
-   * @param {number} n The number of times to invoke `iteratee`.
-   * @param {Function} iteratee The function invoked per iteration.
-   * @returns {Array} Returns the array of results.
-   */
-  function baseTimes(n, iteratee) {
-    var index = -1,
-        result = Array(n);
-
-    while (++index < n) {
-      result[index] = iteratee(index);
-    }
-    return result;
-  }
-
-  /**
-   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array
-   * of key-value pairs for `object` corresponding to the property names of `props`.
-   *
-   * @private
-   * @param {Object} object The object to query.
-   * @param {Array} props The property names to get values for.
-   * @returns {Object} Returns the key-value pairs.
-   */
-  function baseToPairs(object, props) {
-    return arrayMap(props, function(key) {
-      return [key, object[key]];
-    });
-  }
-
-  /**
-   * The base implementation of `_.trim`.
-   *
-   * @private
-   * @param {string} string The string to trim.
-   * @returns {string} Returns the trimmed string.
-   */
-  function baseTrim(string) {
-    return string
-      ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')
-      : string;
-  }
-
-  /**
-   * The base implementation of `_.unary` without support for storing metadata.
-   *
-   * @private
-   * @param {Function} func The function to cap arguments for.
-   * @returns {Function} Returns the new capped function.
-   */
-  function baseUnary(func) {
-    return function(value) {
-      return func(value);
-    };
-  }
-
-  /**
-   * The base implementation of `_.values` and `_.valuesIn` which creates an
-   * array of `object` property values corresponding to the property names
-   * of `props`.
-   *
-   * @private
-   * @param {Object} object The object to query.
-   * @param {Array} props The property names to get values for.
-   * @returns {Object} Returns the array of property values.
-   */
-  function baseValues(object, props) {
-    return arrayMap(props, function(key) {
-      return object[key];
-    });
-  }
-
-  /**
-   * Checks if a `cache` value for `key` exists.
-   *
-   * @private
-   * @param {Object} cache The cache to query.
-   * @param {string} key The key of the entry to check.
-   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
-   */
-  function cacheHas(cache, key) {
-    return cache.has(key);
-  }
-
-  /**
-   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol
-   * that is not found in the character symbols.
-   *
-   * @private
-   * @param {Array} strSymbols The string symbols to inspect.
-   * @param {Array} chrSymbols The character symbols to find.
-   * @returns {number} Returns the index of the first unmatched string symbol.
-   */
-  function charsStartIndex(strSymbols, chrSymbols) {
-    var index = -1,
-        length = strSymbols.length;
-
-    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
-    return index;
-  }
-
-  /**
-   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol
-   * that is not found in the character symbols.
-   *
-   * @private
-   * @param {Array} strSymbols The string symbols to inspect.
-   * @param {Array} chrSymbols The character symbols to find.
-   * @returns {number} Returns the index of the last unmatched string symbol.
-   */
-  function charsEndIndex(strSymbols, chrSymbols) {
-    var index = strSymbols.length;
-
-    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}
-    return index;
-  }
-
-  /**
-   * Gets the number of `placeholder` occurrences in `array`.
-   *
-   * @private
-   * @param {Array} array The array to inspect.
-   * @param {*} placeholder The placeholder to search for.
-   * @returns {number} Returns the placeholder count.
-   */
-  function countHolders(array, placeholder) {
-    var length = array.length,
-        result = 0;
-
-    while (length--) {
-      if (array[length] === placeholder) {
-        ++result;
-      }
-    }
-    return result;
-  }
-
-  /**
-   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
-   * letters to basic Latin letters.
-   *
-   * @private
-   * @param {string} letter The matched letter to deburr.
-   * @returns {string} Returns the deburred letter.
-   */
-  var deburrLetter = basePropertyOf(deburredLetters);
-
-  /**
-   * Used by `_.escape` to convert characters to HTML entities.
-   *
-   * @private
-   * @param {string} chr The matched character to escape.
-   * @returns {string} Returns the escaped character.
-   */
-  var escapeHtmlChar = basePropertyOf(htmlEscapes);
-
-  /**
-   * Used by `_.template` to escape characters for inclusion in compiled string literals.
-   *
-   * @private
-   * @param {string} chr The matched character to escape.
-   * @returns {string} Returns the escaped character.
-   */
-  function escapeStringChar(chr) {
-    return '\\' + stringEscapes[chr];
-  }
-
-  /**
-   * Gets the value at `key` of `object`.
-   *
-   * @private
-   * @param {Object} [object] The object to query.
-   * @param {string} key The key of the property to get.
-   * @returns {*} Returns the property value.
-   */
-  function getValue(object, key) {
-    return object == null ? undefined : object[key];
-  }
-
-  /**
-   * Checks if `string` contains Unicode symbols.
-   *
-   * @private
-   * @param {string} string The string to inspect.
-   * @returns {boolean} Returns `true` if a symbol is found, else `false`.
-   */
-  function hasUnicode(string) {
-    return reHasUnicode.test(string);
-  }
-
-  /**
-   * Checks if `string` contains a word composed of Unicode symbols.
-   *
-   * @private
-   * @param {string} string The string to inspect.
-   * @returns {boolean} Returns `true` if a word is found, else `false`.
-   */
-  function hasUnicodeWord(string) {
-    return reHasUnicodeWord.test(string);
-  }
-
-  /**
-   * Converts `iterator` to an array.
-   *
-   * @private
-   * @param {Object} iterator The iterator to convert.
-   * @returns {Array} Returns the converted array.
-   */
-  function iteratorToArray(iterator) {
-    var data,
-        result = [];
-
-    while (!(data = iterator.next()).done) {
-      result.push(data.value);
-    }
-    return result;
-  }
-
-  /**
-   * Converts `map` to its key-value pairs.
-   *
-   * @private
-   * @param {Object} map The map to convert.
-   * @returns {Array} Returns the key-value pairs.
-   */
-  function mapToArray(map) {
-    var index = -1,
-        result = Array(map.size);
-
-    map.forEach(function(value, key) {
-      result[++index] = [key, value];
-    });
-    return result;
-  }
-
-  /**
-   * Creates a unary function that invokes `func` with its argument transformed.
-   *
-   * @private
-   * @param {Function} func The function to wrap.
-   * @param {Function} transform The argument transform.
-   * @returns {Function} Returns the new function.
-   */
-  function overArg(func, transform) {
-    return function(arg) {
-      return func(transform(arg));
-    };
-  }
-
-  /**
-   * Replaces all `placeholder` elements in `array` with an internal placeholder
-   * and returns an array of their indexes.
-   *
-   * @private
-   * @param {Array} array The array to modify.
-   * @param {*} placeholder The placeholder to replace.
-   * @returns {Array} Returns the new array of placeholder indexes.
-   */
-  function replaceHolders(array, placeholder) {
-    var index = -1,
-        length = array.length,
-        resIndex = 0,
-        result = [];
-
-    while (++index < length) {
-      var value = array[index];
-      if (value === placeholder || value === PLACEHOLDER) {
-        array[index] = PLACEHOLDER;
-        result[resIndex++] = index;
-      }
-    }
-    return result;
-  }
-
-  /**
-   * Converts `set` to an array of its values.
-   *
-   * @private
-   * @param {Object} set The set to convert.
-   * @returns {Array} Returns the values.
-   */
-  function setToArray(set) {
-    var index = -1,
-        result = Array(set.size);
-
-    set.forEach(function(value) {
-      result[++index] = value;
-    });
-    return result;
-  }
-
-  /**
-   * Converts `set` to its value-value pairs.
-   *
-   * @private
-   * @param {Object} set The set to convert.
-   * @returns {Array} Returns the value-value pairs.
-   */
-  function setToPairs(set) {
-    var index = -1,
-        result = Array(set.size);
-
-    set.forEach(function(value) {
-      result[++index] = [value, value];
-    });
-    return result;
-  }
-
-  /**
-   * A specialized version of `_.indexOf` which performs strict equality
-   * comparisons of values, i.e. `===`.
-   *
-   * @private
-   * @param {Array} array The array to inspect.
-   * @param {*} value The value to search for.
-   * @param {number} fromIndex The index to search from.
-   * @returns {number} Returns the index of the matched value, else `-1`.
-   */
-  function strictIndexOf(array, value, fromIndex) {
-    var index = fromIndex - 1,
-        length = array.length;
-
-    while (++index < length) {
-      if (array[index] === value) {
-        return index;
-      }
-    }
-    return -1;
-  }
-
-  /**
-   * A specialized version of `_.lastIndexOf` which performs strict equality
-   * comparisons of values, i.e. `===`.
-   *
-   * @private
-   * @param {Array} array The array to inspect.
-   * @param {*} value The value to search for.
-   * @param {number} fromIndex The index to search from.
-   * @returns {number} Returns the index of the matched value, else `-1`.
-   */
-  function strictLastIndexOf(array, value, fromIndex) {
-    var index = fromIndex + 1;
-    while (index--) {
-      if (array[index] === value) {
-        return index;
-      }
-    }
-    return index;
-  }
-
-  /**
-   * Gets the number of symbols in `string`.
-   *
-   * @private
-   * @param {string} string The string to inspect.
-   * @returns {number} Returns the string size.
-   */
-  function stringSize(string) {
-    return hasUnicode(string)
-      ? unicodeSize(string)
-      : asciiSize(string);
-  }
-
-  /**
-   * Converts `string` to an array.
-   *
-   * @private
-   * @param {string} string The string to convert.
-   * @returns {Array} Returns the converted array.
-   */
-  function stringToArray(string) {
-    return hasUnicode(string)
-      ? unicodeToArray(string)
-      : asciiToArray(string);
-  }
-
-  /**
-   * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
-   * character of `string`.
-   *
-   * @private
-   * @param {string} string The string to inspect.
-   * @returns {number} Returns the index of the last non-whitespace character.
-   */
-  function trimmedEndIndex(string) {
-    var index = string.length;
-
-    while (index-- && reWhitespace.test(string.charAt(index))) {}
-    return index;
-  }
-
-  /**
-   * Used by `_.unescape` to convert HTML entities to characters.
-   *
-   * @private
-   * @param {string} chr The matched character to unescape.
-   * @returns {string} Returns the unescaped character.
-   */
-  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);
-
-  /**
-   * Gets the size of a Unicode `string`.
-   *
-   * @private
-   * @param {string} string The string inspect.
-   * @returns {number} Returns the string size.
-   */
-  function unicodeSize(string) {
-    var result = reUnicode.lastIndex = 0;
-    while (reUnicode.test(string)) {
-      ++result;
-    }
-    return result;
-  }
-
-  /**
-   * Converts a Unicode `string` to an array.
-   *
-   * @private
-   * @param {string} string The string to convert.
-   * @returns {Array} Returns the converted array.
-   */
-  function unicodeToArray(string) {
-    return string.match(reUnicode) || [];
-  }
-
-  /**
-   * Splits a Unicode `string` into an array of its words.
-   *
-   * @private
-   * @param {string} The string to inspect.
-   * @returns {Array} Returns the words of `string`.
-   */
-  function unicodeWords(string) {
-    return string.match(reUnicodeWord) || [];
-  }
-
-  /*--------------------------------------------------------------------------*/
-
-  /**
-   * Create a new pristine `lodash` function using the `context` object.
-   *
-   * @static
-   * @memberOf _
-   * @since 1.1.0
-   * @category Util
-   * @param {Object} [context=root] The context object.
-   * @returns {Function} Returns a new `lodash` function.
-   * @example
-   *
-   * _.mixin({ 'foo': _.constant('foo') });
-   *
-   * var lodash = _.runInContext();
-   * lodash.mixin({ 'bar': lodash.constant('bar') });
-   *
-   * _.isFunction(_.foo);
-   * // => true
-   * _.isFunction(_.bar);
-   * // => false
-   *
-   * lodash.isFunction(lodash.foo);
-   * // => false
-   * lodash.isFunction(lodash.bar);
-   * // => true
-   *
-   * // Create a suped-up `defer` in Node.js.
-   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;
-   */
-  var runInContext = (function runInContext(context) {
-    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));
-
-    /** Built-in constructor references. */
-    var Array = context.Array,
-        Date = context.Date,
-        Error = context.Error,
-        Function = context.Function,
-        Math = context.Math,
-        Object = context.Object,
-        RegExp = context.RegExp,
-        String = context.String,
-        TypeError = context.TypeError;
-
-    /** Used for built-in method references. */
-    var arrayProto = Array.prototype,
-        funcProto = Function.prototype,
-        objectProto = Object.prototype;
-
-    /** Used to detect overreaching core-js shims. */
-    var coreJsData = context['__core-js_shared__'];
-
-    /** Used to resolve the decompiled source of functions. */
-    var funcToString = funcProto.toString;
-
-    /** Used to check objects for own properties. */
-    var hasOwnProperty = objectProto.hasOwnProperty;
-
-    /** Used to generate unique IDs. */
-    var idCounter = 0;
-
-    /** Used to detect methods masquerading as native. */
-    var maskSrcKey = (function() {
-      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
-      return uid ? ('Symbol(src)_1.' + uid) : '';
-    }());
-
-    /**
-     * Used to resolve the
-     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
-     * of values.
-     */
-    var nativeObjectToString = objectProto.toString;
-
-    /** Used to infer the `Object` constructor. */
-    var objectCtorString = funcToString.call(Object);
-
-    /** Used to restore the original `_` reference in `_.noConflict`. */
-    var oldDash = root._;
-
-    /** Used to detect if a method is native. */
-    var reIsNative = RegExp('^' +
-      funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
-      .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
-    );
-
-    /** Built-in value references. */
-    var Buffer = moduleExports ? context.Buffer : undefined,
-        Symbol = context.Symbol,
-        Uint8Array = context.Uint8Array,
-        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,
-        getPrototype = overArg(Object.getPrototypeOf, Object),
-        objectCreate = Object.create,
-        propertyIsEnumerable = objectProto.propertyIsEnumerable,
-        splice = arrayProto.splice,
-        spreadableSymbol = Symbol ? Symbol.isConcatSpreadable : undefined,
-        symIterator = Symbol ? Symbol.iterator : undefined,
-        symToStringTag = Symbol ? Symbol.toStringTag : undefined;
-
-    var defineProperty = (function() {
-      try {
-        var func = getNative(Object, 'defineProperty');
-        func({}, '', {});
-        return func;
-      } catch (e) {}
-    }());
-
-    /** Mocked built-ins. */
-    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,
-        ctxNow = Date && Date.now !== root.Date.now && Date.now,
-        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;
-
-    /* Built-in method references for those with the same name as other `lodash` methods. */
-    var nativeCeil = Math.ceil,
-        nativeFloor = Math.floor,
-        nativeGetSymbols = Object.getOwnPropertySymbols,
-        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,
-        nativeIsFinite = context.isFinite,
-        nativeJoin = arrayProto.join,
-        nativeKeys = overArg(Object.keys, Object),
-        nativeMax = Math.max,
-        nativeMin = Math.min,
-        nativeNow = Date.now,
-        nativeParseInt = context.parseInt,
-        nativeRandom = Math.random,
-        nativeReverse = arrayProto.reverse;
-
-    /* Built-in method references that are verified to be native. */
-    var DataView = getNative(context, 'DataView'),
-        Map = getNative(context, 'Map'),
-        Promise = getNative(context, 'Promise'),
-        Set = getNative(context, 'Set'),
-        WeakMap = getNative(context, 'WeakMap'),
-        nativeCreate = getNative(Object, 'create');
-
-    /** Used to store function metadata. */
-    var metaMap = WeakMap && new WeakMap;
-
-    /** Used to lookup unminified function names. */
-    var realNames = {};
-
-    /** Used to detect maps, sets, and weakmaps. */
-    var dataViewCtorString = toSource(DataView),
-        mapCtorString = toSource(Map),
-        promiseCtorString = toSource(Promise),
-        setCtorString = toSource(Set),
-        weakMapCtorString = toSource(WeakMap);
-
-    /** Used to convert symbols to primitives and strings. */
-    var symbolProto = Symbol ? Symbol.prototype : undefined,
-        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
-        symbolToString = symbolProto ? symbolProto.toString : undefined;
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Creates a `lodash` object which wraps `value` to enable implicit method
-     * chain sequences. Methods that operate on and return arrays, collections,
-     * and functions can be chained together. Methods that retrieve a single value
-     * or may return a primitive value will automatically end the chain sequence
-     * and return the unwrapped value. Otherwise, the value must be unwrapped
-     * with `_#value`.
-     *
-     * Explicit chain sequences, which must be unwrapped with `_#value`, may be
-     * enabled using `_.chain`.
-     *
-     * The execution of chained methods is lazy, that is, it's deferred until
-     * `_#value` is implicitly or explicitly called.
-     *
-     * Lazy evaluation allows several methods to support shortcut fusion.
-     * Shortcut fusion is an optimization to merge iteratee calls; this avoids
-     * the creation of intermediate arrays and can greatly reduce the number of
-     * iteratee executions. Sections of a chain sequence qualify for shortcut
-     * fusion if the section is applied to an array and iteratees accept only
-     * one argument. The heuristic for whether a section qualifies for shortcut
-     * fusion is subject to change.
-     *
-     * Chaining is supported in custom builds as long as the `_#value` method is
-     * directly or indirectly included in the build.
-     *
-     * In addition to lodash methods, wrappers have `Array` and `String` methods.
-     *
-     * The wrapper `Array` methods are:
-     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`
-     *
-     * The wrapper `String` methods are:
-     * `replace` and `split`
-     *
-     * The wrapper methods that support shortcut fusion are:
-     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,
-     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,
-     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`
-     *
-     * The chainable wrapper methods are:
-     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,
-     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,
-     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,
-     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,
-     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,
-     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,
-     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,
-     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,
-     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,
-     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,
-     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,
-     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,
-     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,
-     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,
-     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,
-     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,
-     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,
-     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,
-     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,
-     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,
-     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,
-     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,
-     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,
-     * `zipObject`, `zipObjectDeep`, and `zipWith`
-     *
-     * The wrapper methods that are **not** chainable by default are:
-     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,
-     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,
-     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,
-     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,
-     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,
-     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,
-     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,
-     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,
-     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,
-     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,
-     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,
-     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,
-     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,
-     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,
-     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,
-     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,
-     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,
-     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,
-     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,
-     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,
-     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,
-     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,
-     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,
-     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,
-     * `upperFirst`, `value`, and `words`
-     *
-     * @name _
-     * @constructor
-     * @category Seq
-     * @param {*} value The value to wrap in a `lodash` instance.
-     * @returns {Object} Returns the new `lodash` wrapper instance.
-     * @example
-     *
-     * function square(n) {
-     *   return n * n;
-     * }
-     *
-     * var wrapped = _([1, 2, 3]);
-     *
-     * // Returns an unwrapped value.
-     * wrapped.reduce(_.add);
-     * // => 6
-     *
-     * // Returns a wrapped value.
-     * var squares = wrapped.map(square);
-     *
-     * _.isArray(squares);
-     * // => false
-     *
-     * _.isArray(squares.value());
-     * // => true
-     */
-    function lodash(value) {
-      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {
-        if (value instanceof LodashWrapper) {
-          return value;
-        }
-        if (hasOwnProperty.call(value, '__wrapped__')) {
-          return wrapperClone(value);
-        }
-      }
-      return new LodashWrapper(value);
-    }
-
-    /**
-     * The base implementation of `_.create` without support for assigning
-     * properties to the created object.
-     *
-     * @private
-     * @param {Object} proto The object to inherit from.
-     * @returns {Object} Returns the new object.
-     */
-    var baseCreate = (function() {
-      function object() {}
-      return function(proto) {
-        if (!isObject(proto)) {
-          return {};
-        }
-        if (objectCreate) {
-          return objectCreate(proto);
-        }
-        object.prototype = proto;
-        var result = new object;
-        object.prototype = undefined;
-        return result;
-      };
-    }());
-
-    /**
-     * The function whose prototype chain sequence wrappers inherit from.
-     *
-     * @private
-     */
-    function baseLodash() {
-      // No operation performed.
-    }
-
-    /**
-     * The base constructor for creating `lodash` wrapper objects.
-     *
-     * @private
-     * @param {*} value The value to wrap.
-     * @param {boolean} [chainAll] Enable explicit method chain sequences.
-     */
-    function LodashWrapper(value, chainAll) {
-      this.__wrapped__ = value;
-      this.__actions__ = [];
-      this.__chain__ = !!chainAll;
-      this.__index__ = 0;
-      this.__values__ = undefined;
-    }
-
-    /**
-     * By default, the template delimiters used by lodash are like those in
-     * embedded Ruby (ERB) as well as ES2015 template strings. Change the
-     * following template settings to use alternative delimiters.
-     *
-     * @static
-     * @memberOf _
-     * @type {Object}
-     */
-    lodash.templateSettings = {
-
-      /**
-       * Used to detect `data` property values to be HTML-escaped.
-       *
-       * @memberOf _.templateSettings
-       * @type {RegExp}
-       */
-      'escape': reEscape,
-
-      /**
-       * Used to detect code to be evaluated.
-       *
-       * @memberOf _.templateSettings
-       * @type {RegExp}
-       */
-      'evaluate': reEvaluate,
-
-      /**
-       * Used to detect `data` property values to inject.
-       *
-       * @memberOf _.templateSettings
-       * @type {RegExp}
-       */
-      'interpolate': reInterpolate,
-
-      /**
-       * Used to reference the data object in the template text.
-       *
-       * @memberOf _.templateSettings
-       * @type {string}
-       */
-      'variable': '',
-
-      /**
-       * Used to import variables into the compiled template.
-       *
-       * @memberOf _.templateSettings
-       * @type {Object}
-       */
-      'imports': {
-
-        /**
-         * A reference to the `lodash` function.
-         *
-         * @memberOf _.templateSettings.imports
-         * @type {Function}
-         */
-        '_': lodash
-      }
-    };
-
-    // Ensure wrappers are instances of `baseLodash`.
-    lodash.prototype = baseLodash.prototype;
-    lodash.prototype.constructor = lodash;
-
-    LodashWrapper.prototype = baseCreate(baseLodash.prototype);
-    LodashWrapper.prototype.constructor = LodashWrapper;
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.
-     *
-     * @private
-     * @constructor
-     * @param {*} value The value to wrap.
-     */
-    function LazyWrapper(value) {
-      this.__wrapped__ = value;
-      this.__actions__ = [];
-      this.__dir__ = 1;
-      this.__filtered__ = false;
-      this.__iteratees__ = [];
-      this.__takeCount__ = MAX_ARRAY_LENGTH;
-      this.__views__ = [];
-    }
-
-    /**
-     * Creates a clone of the lazy wrapper object.
-     *
-     * @private
-     * @name clone
-     * @memberOf LazyWrapper
-     * @returns {Object} Returns the cloned `LazyWrapper` object.
-     */
-    function lazyClone() {
-      var result = new LazyWrapper(this.__wrapped__);
-      result.__actions__ = copyArray(this.__actions__);
-      result.__dir__ = this.__dir__;
-      result.__filtered__ = this.__filtered__;
-      result.__iteratees__ = copyArray(this.__iteratees__);
-      result.__takeCount__ = this.__takeCount__;
-      result.__views__ = copyArray(this.__views__);
-      return result;
-    }
-
-    /**
-     * Reverses the direction of lazy iteration.
-     *
-     * @private
-     * @name reverse
-     * @memberOf LazyWrapper
-     * @returns {Object} Returns the new reversed `LazyWrapper` object.
-     */
-    function lazyReverse() {
-      if (this.__filtered__) {
-        var result = new LazyWrapper(this);
-        result.__dir__ = -1;
-        result.__filtered__ = true;
-      } else {
-        result = this.clone();
-        result.__dir__ *= -1;
-      }
-      return result;
-    }
-
-    /**
-     * Extracts the unwrapped value from its lazy wrapper.
-     *
-     * @private
-     * @name value
-     * @memberOf LazyWrapper
-     * @returns {*} Returns the unwrapped value.
-     */
-    function lazyValue() {
-      var array = this.__wrapped__.value(),
-          dir = this.__dir__,
-          isArr = isArray(array),
-          isRight = dir < 0,
-          arrLength = isArr ? array.length : 0,
-          view = getView(0, arrLength, this.__views__),
-          start = view.start,
-          end = view.end,
-          length = end - start,
-          index = isRight ? end : (start - 1),
-          iteratees = this.__iteratees__,
-          iterLength = iteratees.length,
-          resIndex = 0,
-          takeCount = nativeMin(length, this.__takeCount__);
-
-      if (!isArr || (!isRight && arrLength == length && takeCount == length)) {
-        return baseWrapperValue(array, this.__actions__);
-      }
-      var result = [];
-
-      outer:
-      while (length-- && resIndex < takeCount) {
-        index += dir;
-
-        var iterIndex = -1,
-            value = array[index];
-
-        while (++iterIndex < iterLength) {
-          var data = iteratees[iterIndex],
-              iteratee = data.iteratee,
-              type = data.type,
-              computed = iteratee(value);
-
-          if (type == LAZY_MAP_FLAG) {
-            value = computed;
-          } else if (!computed) {
-            if (type == LAZY_FILTER_FLAG) {
-              continue outer;
-            } else {
-              break outer;
-            }
-          }
-        }
-        result[resIndex++] = value;
-      }
-      return result;
-    }
-
-    // Ensure `LazyWrapper` is an instance of `baseLodash`.
-    LazyWrapper.prototype = baseCreate(baseLodash.prototype);
-    LazyWrapper.prototype.constructor = LazyWrapper;
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Creates a hash object.
-     *
-     * @private
-     * @constructor
-     * @param {Array} [entries] The key-value pairs to cache.
-     */
-    function Hash(entries) {
-      var index = -1,
-          length = entries == null ? 0 : entries.length;
-
-      this.clear();
-      while (++index < length) {
-        var entry = entries[index];
-        this.set(entry[0], entry[1]);
-      }
-    }
-
-    /**
-     * Removes all key-value entries from the hash.
-     *
-     * @private
-     * @name clear
-     * @memberOf Hash
-     */
-    function hashClear() {
-      this.__data__ = nativeCreate ? nativeCreate(null) : {};
-      this.size = 0;
-    }
-
-    /**
-     * Removes `key` and its value from the hash.
-     *
-     * @private
-     * @name delete
-     * @memberOf Hash
-     * @param {Object} hash The hash to modify.
-     * @param {string} key The key of the value to remove.
-     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
-     */
-    function hashDelete(key) {
-      var result = this.has(key) && delete this.__data__[key];
-      this.size -= result ? 1 : 0;
-      return result;
-    }
-
-    /**
-     * Gets the hash value for `key`.
-     *
-     * @private
-     * @name get
-     * @memberOf Hash
-     * @param {string} key The key of the value to get.
-     * @returns {*} Returns the entry value.
-     */
-    function hashGet(key) {
-      var data = this.__data__;
-      if (nativeCreate) {
-        var result = data[key];
-        return result === HASH_UNDEFINED ? undefined : result;
-      }
-      return hasOwnProperty.call(data, key) ? data[key] : undefined;
-    }
-
-    /**
-     * Checks if a hash value for `key` exists.
-     *
-     * @private
-     * @name has
-     * @memberOf Hash
-     * @param {string} key The key of the entry to check.
-     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
-     */
-    function hashHas(key) {
-      var data = this.__data__;
-      return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);
-    }
-
-    /**
-     * Sets the hash `key` to `value`.
-     *
-     * @private
-     * @name set
-     * @memberOf Hash
-     * @param {string} key The key of the value to set.
-     * @param {*} value The value to set.
-     * @returns {Object} Returns the hash instance.
-     */
-    function hashSet(key, value) {
-      var data = this.__data__;
-      this.size += this.has(key) ? 0 : 1;
-      data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
-      return this;
-    }
-
-    // Add methods to `Hash`.
-    Hash.prototype.clear = hashClear;
-    Hash.prototype['delete'] = hashDelete;
-    Hash.prototype.get = hashGet;
-    Hash.prototype.has = hashHas;
-    Hash.prototype.set = hashSet;
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Creates an list cache object.
-     *
-     * @private
-     * @constructor
-     * @param {Array} [entries] The key-value pairs to cache.
-     */
-    function ListCache(entries) {
-      var index = -1,
-          length = entries == null ? 0 : entries.length;
-
-      this.clear();
-      while (++index < length) {
-        var entry = entries[index];
-        this.set(entry[0], entry[1]);
-      }
-    }
-
-    /**
-     * Removes all key-value entries from the list cache.
-     *
-     * @private
-     * @name clear
-     * @memberOf ListCache
-     */
-    function listCacheClear() {
-      this.__data__ = [];
-      this.size = 0;
-    }
-
-    /**
-     * Removes `key` and its value from the list cache.
-     *
-     * @private
-     * @name delete
-     * @memberOf ListCache
-     * @param {string} key The key of the value to remove.
-     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
-     */
-    function listCacheDelete(key) {
-      var data = this.__data__,
-          index = assocIndexOf(data, key);
-
-      if (index < 0) {
-        return false;
-      }
-      var lastIndex = data.length - 1;
-      if (index == lastIndex) {
-        data.pop();
-      } else {
-        splice.call(data, index, 1);
-      }
-      --this.size;
-      return true;
-    }
-
-    /**
-     * Gets the list cache value for `key`.
-     *
-     * @private
-     * @name get
-     * @memberOf ListCache
-     * @param {string} key The key of the value to get.
-     * @returns {*} Returns the entry value.
-     */
-    function listCacheGet(key) {
-      var data = this.__data__,
-          index = assocIndexOf(data, key);
-
-      return index < 0 ? undefined : data[index][1];
-    }
-
-    /**
-     * Checks if a list cache value for `key` exists.
-     *
-     * @private
-     * @name has
-     * @memberOf ListCache
-     * @param {string} key The key of the entry to check.
-     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
-     */
-    function listCacheHas(key) {
-      return assocIndexOf(this.__data__, key) > -1;
-    }
-
-    /**
-     * Sets the list cache `key` to `value`.
-     *
-     * @private
-     * @name set
-     * @memberOf ListCache
-     * @param {string} key The key of the value to set.
-     * @param {*} value The value to set.
-     * @returns {Object} Returns the list cache instance.
-     */
-    function listCacheSet(key, value) {
-      var data = this.__data__,
-          index = assocIndexOf(data, key);
-
-      if (index < 0) {
-        ++this.size;
-        data.push([key, value]);
-      } else {
-        data[index][1] = value;
-      }
-      return this;
-    }
-
-    // Add methods to `ListCache`.
-    ListCache.prototype.clear = listCacheClear;
-    ListCache.prototype['delete'] = listCacheDelete;
-    ListCache.prototype.get = listCacheGet;
-    ListCache.prototype.has = listCacheHas;
-    ListCache.prototype.set = listCacheSet;
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Creates a map cache object to store key-value pairs.
-     *
-     * @private
-     * @constructor
-     * @param {Array} [entries] The key-value pairs to cache.
-     */
-    function MapCache(entries) {
-      var index = -1,
-          length = entries == null ? 0 : entries.length;
-
-      this.clear();
-      while (++index < length) {
-        var entry = entries[index];
-        this.set(entry[0], entry[1]);
-      }
-    }
-
-    /**
-     * Removes all key-value entries from the map.
-     *
-     * @private
-     * @name clear
-     * @memberOf MapCache
-     */
-    function mapCacheClear() {
-      this.size = 0;
-      this.__data__ = {
-        'hash': new Hash,
-        'map': new (Map || ListCache),
-        'string': new Hash
-      };
-    }
-
-    /**
-     * Removes `key` and its value from the map.
-     *
-     * @private
-     * @name delete
-     * @memberOf MapCache
-     * @param {string} key The key of the value to remove.
-     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
-     */
-    function mapCacheDelete(key) {
-      var result = getMapData(this, key)['delete'](key);
-      this.size -= result ? 1 : 0;
-      return result;
-    }
-
-    /**
-     * Gets the map value for `key`.
-     *
-     * @private
-     * @name get
-     * @memberOf MapCache
-     * @param {string} key The key of the value to get.
-     * @returns {*} Returns the entry value.
-     */
-    function mapCacheGet(key) {
-      return getMapData(this, key).get(key);
-    }
-
-    /**
-     * Checks if a map value for `key` exists.
-     *
-     * @private
-     * @name has
-     * @memberOf MapCache
-     * @param {string} key The key of the entry to check.
-     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
-     */
-    function mapCacheHas(key) {
-      return getMapData(this, key).has(key);
-    }
-
-    /**
-     * Sets the map `key` to `value`.
-     *
-     * @private
-     * @name set
-     * @memberOf MapCache
-     * @param {string} key The key of the value to set.
-     * @param {*} value The value to set.
-     * @returns {Object} Returns the map cache instance.
-     */
-    function mapCacheSet(key, value) {
-      var data = getMapData(this, key),
-          size = data.size;
-
-      data.set(key, value);
-      this.size += data.size == size ? 0 : 1;
-      return this;
-    }
-
-    // Add methods to `MapCache`.
-    MapCache.prototype.clear = mapCacheClear;
-    MapCache.prototype['delete'] = mapCacheDelete;
-    MapCache.prototype.get = mapCacheGet;
-    MapCache.prototype.has = mapCacheHas;
-    MapCache.prototype.set = mapCacheSet;
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     *
-     * Creates an array cache object to store unique values.
-     *
-     * @private
-     * @constructor
-     * @param {Array} [values] The values to cache.
-     */
-    function SetCache(values) {
-      var index = -1,
-          length = values == null ? 0 : values.length;
-
-      this.__data__ = new MapCache;
-      while (++index < length) {
-        this.add(values[index]);
-      }
-    }
-
-    /**
-     * Adds `value` to the array cache.
-     *
-     * @private
-     * @name add
-     * @memberOf SetCache
-     * @alias push
-     * @param {*} value The value to cache.
-     * @returns {Object} Returns the cache instance.
-     */
-    function setCacheAdd(value) {
-      this.__data__.set(value, HASH_UNDEFINED);
-      return this;
-    }
-
-    /**
-     * Checks if `value` is in the array cache.
-     *
-     * @private
-     * @name has
-     * @memberOf SetCache
-     * @param {*} value The value to search for.
-     * @returns {number} Returns `true` if `value` is found, else `false`.
-     */
-    function setCacheHas(value) {
-      return this.__data__.has(value);
-    }
-
-    // Add methods to `SetCache`.
-    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
-    SetCache.prototype.has = setCacheHas;
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Creates a stack cache object to store key-value pairs.
-     *
-     * @private
-     * @constructor
-     * @param {Array} [entries] The key-value pairs to cache.
-     */
-    function Stack(entries) {
-      var data = this.__data__ = new ListCache(entries);
-      this.size = data.size;
-    }
-
-    /**
-     * Removes all key-value entries from the stack.
-     *
-     * @private
-     * @name clear
-     * @memberOf Stack
-     */
-    function stackClear() {
-      this.__data__ = new ListCache;
-      this.size = 0;
-    }
-
-    /**
-     * Removes `key` and its value from the stack.
-     *
-     * @private
-     * @name delete
-     * @memberOf Stack
-     * @param {string} key The key of the value to remove.
-     * @returns {boolean} Returns `true` if the entry was removed, else `false`.
-     */
-    function stackDelete(key) {
-      var data = this.__data__,
-          result = data['delete'](key);
-
-      this.size = data.size;
-      return result;
-    }
-
-    /**
-     * Gets the stack value for `key`.
-     *
-     * @private
-     * @name get
-     * @memberOf Stack
-     * @param {string} key The key of the value to get.
-     * @returns {*} Returns the entry value.
-     */
-    function stackGet(key) {
-      return this.__data__.get(key);
-    }
-
-    /**
-     * Checks if a stack value for `key` exists.
-     *
-     * @private
-     * @name has
-     * @memberOf Stack
-     * @param {string} key The key of the entry to check.
-     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
-     */
-    function stackHas(key) {
-      return this.__data__.has(key);
-    }
-
-    /**
-     * Sets the stack `key` to `value`.
-     *
-     * @private
-     * @name set
-     * @memberOf Stack
-     * @param {string} key The key of the value to set.
-     * @param {*} value The value to set.
-     * @returns {Object} Returns the stack cache instance.
-     */
-    function stackSet(key, value) {
-      var data = this.__data__;
-      if (data instanceof ListCache) {
-        var pairs = data.__data__;
-        if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
-          pairs.push([key, value]);
-          this.size = ++data.size;
-          return this;
-        }
-        data = this.__data__ = new MapCache(pairs);
-      }
-      data.set(key, value);
-      this.size = data.size;
-      return this;
-    }
-
-    // Add methods to `Stack`.
-    Stack.prototype.clear = stackClear;
-    Stack.prototype['delete'] = stackDelete;
-    Stack.prototype.get = stackGet;
-    Stack.prototype.has = stackHas;
-    Stack.prototype.set = stackSet;
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Creates an array of the enumerable property names of the array-like `value`.
-     *
-     * @private
-     * @param {*} value The value to query.
-     * @param {boolean} inherited Specify returning inherited property names.
-     * @returns {Array} Returns the array of property names.
-     */
-    function arrayLikeKeys(value, inherited) {
-      var isArr = isArray(value),
-          isArg = !isArr && isArguments(value),
-          isBuff = !isArr && !isArg && isBuffer(value),
-          isType = !isArr && !isArg && !isBuff && isTypedArray(value),
-          skipIndexes = isArr || isArg || isBuff || isType,
-          result = skipIndexes ? baseTimes(value.length, String) : [],
-          length = result.length;
-
-      for (var key in value) {
-        if ((inherited || hasOwnProperty.call(value, key)) &&
-            !(skipIndexes && (
-               // Safari 9 has enumerable `arguments.length` in strict mode.
-               key == 'length' ||
-               // Node.js 0.10 has enumerable non-index properties on buffers.
-               (isBuff && (key == 'offset' || key == 'parent')) ||
-               // PhantomJS 2 has enumerable non-index properties on typed arrays.
-               (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
-               // Skip index properties.
-               isIndex(key, length)
-            ))) {
-          result.push(key);
-        }
-      }
-      return result;
-    }
-
-    /**
-     * A specialized version of `_.sample` for arrays.
-     *
-     * @private
-     * @param {Array} array The array to sample.
-     * @returns {*} Returns the random element.
-     */
-    function arraySample(array) {
-      var length = array.length;
-      return length ? array[baseRandom(0, length - 1)] : undefined;
-    }
-
-    /**
-     * A specialized version of `_.sampleSize` for arrays.
-     *
-     * @private
-     * @param {Array} array The array to sample.
-     * @param {number} n The number of elements to sample.
-     * @returns {Array} Returns the random elements.
-     */
-    function arraySampleSize(array, n) {
-      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));
-    }
-
-    /**
-     * A specialized version of `_.shuffle` for arrays.
-     *
-     * @private
-     * @param {Array} array The array to shuffle.
-     * @returns {Array} Returns the new shuffled array.
-     */
-    function arrayShuffle(array) {
-      return shuffleSelf(copyArray(array));
-    }
-
-    /**
-     * This function is like `assignValue` except that it doesn't assign
-     * `undefined` values.
-     *
-     * @private
-     * @param {Object} object The object to modify.
-     * @param {string} key The key of the property to assign.
-     * @param {*} value The value to assign.
-     */
-    function assignMergeValue(object, key, value) {
-      if ((value !== undefined && !eq(object[key], value)) ||
-          (value === undefined && !(key in object))) {
-        baseAssignValue(object, key, value);
-      }
-    }
-
-    /**
-     * Assigns `value` to `key` of `object` if the existing value is not equivalent
-     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
-     * for equality comparisons.
-     *
-     * @private
-     * @param {Object} object The object to modify.
-     * @param {string} key The key of the property to assign.
-     * @param {*} value The value to assign.
-     */
-    function assignValue(object, key, value) {
-      var objValue = object[key];
-      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||
-          (value === undefined && !(key in object))) {
-        baseAssignValue(object, key, value);
-      }
-    }
-
-    /**
-     * Gets the index at which the `key` is found in `array` of key-value pairs.
-     *
-     * @private
-     * @param {Array} array The array to inspect.
-     * @param {*} key The key to search for.
-     * @returns {number} Returns the index of the matched value, else `-1`.
-     */
-    function assocIndexOf(array, key) {
-      var length = array.length;
-      while (length--) {
-        if (eq(array[length][0], key)) {
-          return length;
-        }
-      }
-      return -1;
-    }
-
-    /**
-     * Aggregates elements of `collection` on `accumulator` with keys transformed
-     * by `iteratee` and values set by `setter`.
-     *
-     * @private
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} setter The function to set `accumulator` values.
-     * @param {Function} iteratee The iteratee to transform keys.
-     * @param {Object} accumulator The initial aggregated object.
-     * @returns {Function} Returns `accumulator`.
-     */
-    function baseAggregator(collection, setter, iteratee, accumulator) {
-      baseEach(collection, function(value, key, collection) {
-        setter(accumulator, value, iteratee(value), collection);
-      });
-      return accumulator;
-    }
-
-    /**
-     * The base implementation of `_.assign` without support for multiple sources
-     * or `customizer` functions.
-     *
-     * @private
-     * @param {Object} object The destination object.
-     * @param {Object} source The source object.
-     * @returns {Object} Returns `object`.
-     */
-    function baseAssign(object, source) {
-      return object && copyObject(source, keys(source), object);
-    }
-
-    /**
-     * The base implementation of `_.assignIn` without support for multiple sources
-     * or `customizer` functions.
-     *
-     * @private
-     * @param {Object} object The destination object.
-     * @param {Object} source The source object.
-     * @returns {Object} Returns `object`.
-     */
-    function baseAssignIn(object, source) {
-      return object && copyObject(source, keysIn(source), object);
-    }
-
-    /**
-     * The base implementation of `assignValue` and `assignMergeValue` without
-     * value checks.
-     *
-     * @private
-     * @param {Object} object The object to modify.
-     * @param {string} key The key of the property to assign.
-     * @param {*} value The value to assign.
-     */
-    function baseAssignValue(object, key, value) {
-      if (key == '__proto__' && defineProperty) {
-        defineProperty(object, key, {
-          'configurable': true,
-          'enumerable': true,
-          'value': value,
-          'writable': true
-        });
-      } else {
-        object[key] = value;
-      }
-    }
-
-    /**
-     * The base implementation of `_.at` without support for individual paths.
-     *
-     * @private
-     * @param {Object} object The object to iterate over.
-     * @param {string[]} paths The property paths to pick.
-     * @returns {Array} Returns the picked elements.
-     */
-    function baseAt(object, paths) {
-      var index = -1,
-          length = paths.length,
-          result = Array(length),
-          skip = object == null;
-
-      while (++index < length) {
-        result[index] = skip ? undefined : get(object, paths[index]);
-      }
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.clamp` which doesn't coerce arguments.
-     *
-     * @private
-     * @param {number} number The number to clamp.
-     * @param {number} [lower] The lower bound.
-     * @param {number} upper The upper bound.
-     * @returns {number} Returns the clamped number.
-     */
-    function baseClamp(number, lower, upper) {
-      if (number === number) {
-        if (upper !== undefined) {
-          number = number <= upper ? number : upper;
-        }
-        if (lower !== undefined) {
-          number = number >= lower ? number : lower;
-        }
-      }
-      return number;
-    }
-
-    /**
-     * The base implementation of `_.clone` and `_.cloneDeep` which tracks
-     * traversed objects.
-     *
-     * @private
-     * @param {*} value The value to clone.
-     * @param {boolean} bitmask The bitmask flags.
-     *  1 - Deep clone
-     *  2 - Flatten inherited properties
-     *  4 - Clone symbols
-     * @param {Function} [customizer] The function to customize cloning.
-     * @param {string} [key] The key of `value`.
-     * @param {Object} [object] The parent object of `value`.
-     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
-     * @returns {*} Returns the cloned value.
-     */
-    function baseClone(value, bitmask, customizer, key, object, stack) {
-      var result,
-          isDeep = bitmask & CLONE_DEEP_FLAG,
-          isFlat = bitmask & CLONE_FLAT_FLAG,
-          isFull = bitmask & CLONE_SYMBOLS_FLAG;
-
-      if (customizer) {
-        result = object ? customizer(value, key, object, stack) : customizer(value);
-      }
-      if (result !== undefined) {
-        return result;
-      }
-      if (!isObject(value)) {
-        return value;
-      }
-      var isArr = isArray(value);
-      if (isArr) {
-        result = initCloneArray(value);
-        if (!isDeep) {
-          return copyArray(value, result);
-        }
-      } else {
-        var tag = getTag(value),
-            isFunc = tag == funcTag || tag == genTag;
-
-        if (isBuffer(value)) {
-          return cloneBuffer(value, isDeep);
-        }
-        if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
-          result = (isFlat || isFunc) ? {} : initCloneObject(value);
-          if (!isDeep) {
-            return isFlat
-              ? copySymbolsIn(value, baseAssignIn(result, value))
-              : copySymbols(value, baseAssign(result, value));
-          }
-        } else {
-          if (!cloneableTags[tag]) {
-            return object ? value : {};
-          }
-          result = initCloneByTag(value, tag, isDeep);
-        }
-      }
-      // Check for circular references and return its corresponding clone.
-      stack || (stack = new Stack);
-      var stacked = stack.get(value);
-      if (stacked) {
-        return stacked;
-      }
-      stack.set(value, result);
-
-      if (isSet(value)) {
-        value.forEach(function(subValue) {
-          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
-        });
-      } else if (isMap(value)) {
-        value.forEach(function(subValue, key) {
-          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
-        });
-      }
-
-      var keysFunc = isFull
-        ? (isFlat ? getAllKeysIn : getAllKeys)
-        : (isFlat ? keysIn : keys);
-
-      var props = isArr ? undefined : keysFunc(value);
-      arrayEach(props || value, function(subValue, key) {
-        if (props) {
-          key = subValue;
-          subValue = value[key];
-        }
-        // Recursively populate clone (susceptible to call stack limits).
-        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
-      });
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.conforms` which doesn't clone `source`.
-     *
-     * @private
-     * @param {Object} source The object of property predicates to conform to.
-     * @returns {Function} Returns the new spec function.
-     */
-    function baseConforms(source) {
-      var props = keys(source);
-      return function(object) {
-        return baseConformsTo(object, source, props);
-      };
-    }
-
-    /**
-     * The base implementation of `_.conformsTo` which accepts `props` to check.
-     *
-     * @private
-     * @param {Object} object The object to inspect.
-     * @param {Object} source The object of property predicates to conform to.
-     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
-     */
-    function baseConformsTo(object, source, props) {
-      var length = props.length;
-      if (object == null) {
-        return !length;
-      }
-      object = Object(object);
-      while (length--) {
-        var key = props[length],
-            predicate = source[key],
-            value = object[key];
-
-        if ((value === undefined && !(key in object)) || !predicate(value)) {
-          return false;
-        }
-      }
-      return true;
-    }
-
-    /**
-     * The base implementation of `_.delay` and `_.defer` which accepts `args`
-     * to provide to `func`.
-     *
-     * @private
-     * @param {Function} func The function to delay.
-     * @param {number} wait The number of milliseconds to delay invocation.
-     * @param {Array} args The arguments to provide to `func`.
-     * @returns {number|Object} Returns the timer id or timeout object.
-     */
-    function baseDelay(func, wait, args) {
-      if (typeof func != 'function') {
-        throw new TypeError(FUNC_ERROR_TEXT);
-      }
-      return setTimeout(function() { func.apply(undefined, args); }, wait);
-    }
-
-    /**
-     * The base implementation of methods like `_.difference` without support
-     * for excluding multiple arrays or iteratee shorthands.
-     *
-     * @private
-     * @param {Array} array The array to inspect.
-     * @param {Array} values The values to exclude.
-     * @param {Function} [iteratee] The iteratee invoked per element.
-     * @param {Function} [comparator] The comparator invoked per element.
-     * @returns {Array} Returns the new array of filtered values.
-     */
-    function baseDifference(array, values, iteratee, comparator) {
-      var index = -1,
-          includes = arrayIncludes,
-          isCommon = true,
-          length = array.length,
-          result = [],
-          valuesLength = values.length;
-
-      if (!length) {
-        return result;
-      }
-      if (iteratee) {
-        values = arrayMap(values, baseUnary(iteratee));
-      }
-      if (comparator) {
-        includes = arrayIncludesWith;
-        isCommon = false;
-      }
-      else if (values.length >= LARGE_ARRAY_SIZE) {
-        includes = cacheHas;
-        isCommon = false;
-        values = new SetCache(values);
-      }
-      outer:
-      while (++index < length) {
-        var value = array[index],
-            computed = iteratee == null ? value : iteratee(value);
-
-        value = (comparator || value !== 0) ? value : 0;
-        if (isCommon && computed === computed) {
-          var valuesIndex = valuesLength;
-          while (valuesIndex--) {
-            if (values[valuesIndex] === computed) {
-              continue outer;
-            }
-          }
-          result.push(value);
-        }
-        else if (!includes(values, computed, comparator)) {
-          result.push(value);
-        }
-      }
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.forEach` without support for iteratee shorthands.
-     *
-     * @private
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} iteratee The function invoked per iteration.
-     * @returns {Array|Object} Returns `collection`.
-     */
-    var baseEach = createBaseEach(baseForOwn);
-
-    /**
-     * The base implementation of `_.forEachRight` without support for iteratee shorthands.
-     *
-     * @private
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} iteratee The function invoked per iteration.
-     * @returns {Array|Object} Returns `collection`.
-     */
-    var baseEachRight = createBaseEach(baseForOwnRight, true);
-
-    /**
-     * The base implementation of `_.every` without support for iteratee shorthands.
-     *
-     * @private
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} predicate The function invoked per iteration.
-     * @returns {boolean} Returns `true` if all elements pass the predicate check,
-     *  else `false`
-     */
-    function baseEvery(collection, predicate) {
-      var result = true;
-      baseEach(collection, function(value, index, collection) {
-        result = !!predicate(value, index, collection);
-        return result;
-      });
-      return result;
-    }
-
-    /**
-     * The base implementation of methods like `_.max` and `_.min` which accepts a
-     * `comparator` to determine the extremum value.
-     *
-     * @private
-     * @param {Array} array The array to iterate over.
-     * @param {Function} iteratee The iteratee invoked per iteration.
-     * @param {Function} comparator The comparator used to compare values.
-     * @returns {*} Returns the extremum value.
-     */
-    function baseExtremum(array, iteratee, comparator) {
-      var index = -1,
-          length = array.length;
-
-      while (++index < length) {
-        var value = array[index],
-            current = iteratee(value);
-
-        if (current != null && (computed === undefined
-              ? (current === current && !isSymbol(current))
-              : comparator(current, computed)
-            )) {
-          var computed = current,
-              result = value;
-        }
-      }
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.fill` without an iteratee call guard.
-     *
-     * @private
-     * @param {Array} array The array to fill.
-     * @param {*} value The value to fill `array` with.
-     * @param {number} [start=0] The start position.
-     * @param {number} [end=array.length] The end position.
-     * @returns {Array} Returns `array`.
-     */
-    function baseFill(array, value, start, end) {
-      var length = array.length;
-
-      start = toInteger(start);
-      if (start < 0) {
-        start = -start > length ? 0 : (length + start);
-      }
-      end = (end === undefined || end > length) ? length : toInteger(end);
-      if (end < 0) {
-        end += length;
-      }
-      end = start > end ? 0 : toLength(end);
-      while (start < end) {
-        array[start++] = value;
-      }
-      return array;
-    }
-
-    /**
-     * The base implementation of `_.filter` without support for iteratee shorthands.
-     *
-     * @private
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} predicate The function invoked per iteration.
-     * @returns {Array} Returns the new filtered array.
-     */
-    function baseFilter(collection, predicate) {
-      var result = [];
-      baseEach(collection, function(value, index, collection) {
-        if (predicate(value, index, collection)) {
-          result.push(value);
-        }
-      });
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.flatten` with support for restricting flattening.
-     *
-     * @private
-     * @param {Array} array The array to flatten.
-     * @param {number} depth The maximum recursion depth.
-     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
-     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
-     * @param {Array} [result=[]] The initial result value.
-     * @returns {Array} Returns the new flattened array.
-     */
-    function baseFlatten(array, depth, predicate, isStrict, result) {
-      var index = -1,
-          length = array.length;
-
-      predicate || (predicate = isFlattenable);
-      result || (result = []);
-
-      while (++index < length) {
-        var value = array[index];
-        if (depth > 0 && predicate(value)) {
-          if (depth > 1) {
-            // Recursively flatten arrays (susceptible to call stack limits).
-            baseFlatten(value, depth - 1, predicate, isStrict, result);
-          } else {
-            arrayPush(result, value);
-          }
-        } else if (!isStrict) {
-          result[result.length] = value;
-        }
-      }
-      return result;
-    }
-
-    /**
-     * The base implementation of `baseForOwn` which iterates over `object`
-     * properties returned by `keysFunc` and invokes `iteratee` for each property.
-     * Iteratee functions may exit iteration early by explicitly returning `false`.
-     *
-     * @private
-     * @param {Object} object The object to iterate over.
-     * @param {Function} iteratee The function invoked per iteration.
-     * @param {Function} keysFunc The function to get the keys of `object`.
-     * @returns {Object} Returns `object`.
-     */
-    var baseFor = createBaseFor();
-
-    /**
-     * This function is like `baseFor` except that it iterates over properties
-     * in the opposite order.
-     *
-     * @private
-     * @param {Object} object The object to iterate over.
-     * @param {Function} iteratee The function invoked per iteration.
-     * @param {Function} keysFunc The function to get the keys of `object`.
-     * @returns {Object} Returns `object`.
-     */
-    var baseForRight = createBaseFor(true);
-
-    /**
-     * The base implementation of `_.forOwn` without support for iteratee shorthands.
-     *
-     * @private
-     * @param {Object} object The object to iterate over.
-     * @param {Function} iteratee The function invoked per iteration.
-     * @returns {Object} Returns `object`.
-     */
-    function baseForOwn(object, iteratee) {
-      return object && baseFor(object, iteratee, keys);
-    }
-
-    /**
-     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.
-     *
-     * @private
-     * @param {Object} object The object to iterate over.
-     * @param {Function} iteratee The function invoked per iteration.
-     * @returns {Object} Returns `object`.
-     */
-    function baseForOwnRight(object, iteratee) {
-      return object && baseForRight(object, iteratee, keys);
-    }
-
-    /**
-     * The base implementation of `_.functions` which creates an array of
-     * `object` function property names filtered from `props`.
-     *
-     * @private
-     * @param {Object} object The object to inspect.
-     * @param {Array} props The property names to filter.
-     * @returns {Array} Returns the function names.
-     */
-    function baseFunctions(object, props) {
-      return arrayFilter(props, function(key) {
-        return isFunction(object[key]);
-      });
-    }
-
-    /**
-     * The base implementation of `_.get` without support for default values.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @param {Array|string} path The path of the property to get.
-     * @returns {*} Returns the resolved value.
-     */
-    function baseGet(object, path) {
-      path = castPath(path, object);
-
-      var index = 0,
-          length = path.length;
-
-      while (object != null && index < length) {
-        object = object[toKey(path[index++])];
-      }
-      return (index && index == length) ? object : undefined;
-    }
-
-    /**
-     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
-     * `keysFunc` and `symbolsFunc` to get the enumerable property names and
-     * symbols of `object`.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @param {Function} keysFunc The function to get the keys of `object`.
-     * @param {Function} symbolsFunc The function to get the symbols of `object`.
-     * @returns {Array} Returns the array of property names and symbols.
-     */
-    function baseGetAllKeys(object, keysFunc, symbolsFunc) {
-      var result = keysFunc(object);
-      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));
-    }
-
-    /**
-     * The base implementation of `getTag` without fallbacks for buggy environments.
-     *
-     * @private
-     * @param {*} value The value to query.
-     * @returns {string} Returns the `toStringTag`.
-     */
-    function baseGetTag(value) {
-      if (value == null) {
-        return value === undefined ? undefinedTag : nullTag;
-      }
-      return (symToStringTag && symToStringTag in Object(value))
-        ? getRawTag(value)
-        : objectToString(value);
-    }
-
-    /**
-     * The base implementation of `_.gt` which doesn't coerce arguments.
-     *
-     * @private
-     * @param {*} value The value to compare.
-     * @param {*} other The other value to compare.
-     * @returns {boolean} Returns `true` if `value` is greater than `other`,
-     *  else `false`.
-     */
-    function baseGt(value, other) {
-      return value > other;
-    }
-
-    /**
-     * The base implementation of `_.has` without support for deep paths.
-     *
-     * @private
-     * @param {Object} [object] The object to query.
-     * @param {Array|string} key The key to check.
-     * @returns {boolean} Returns `true` if `key` exists, else `false`.
-     */
-    function baseHas(object, key) {
-      return object != null && hasOwnProperty.call(object, key);
-    }
-
-    /**
-     * The base implementation of `_.hasIn` without support for deep paths.
-     *
-     * @private
-     * @param {Object} [object] The object to query.
-     * @param {Array|string} key The key to check.
-     * @returns {boolean} Returns `true` if `key` exists, else `false`.
-     */
-    function baseHasIn(object, key) {
-      return object != null && key in Object(object);
-    }
-
-    /**
-     * The base implementation of `_.inRange` which doesn't coerce arguments.
-     *
-     * @private
-     * @param {number} number The number to check.
-     * @param {number} start The start of the range.
-     * @param {number} end The end of the range.
-     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
-     */
-    function baseInRange(number, start, end) {
-      return number >= nativeMin(start, end) && number < nativeMax(start, end);
-    }
-
-    /**
-     * The base implementation of methods like `_.intersection`, without support
-     * for iteratee shorthands, that accepts an array of arrays to inspect.
-     *
-     * @private
-     * @param {Array} arrays The arrays to inspect.
-     * @param {Function} [iteratee] The iteratee invoked per element.
-     * @param {Function} [comparator] The comparator invoked per element.
-     * @returns {Array} Returns the new array of shared values.
-     */
-    function baseIntersection(arrays, iteratee, comparator) {
-      var includes = comparator ? arrayIncludesWith : arrayIncludes,
-          length = arrays[0].length,
-          othLength = arrays.length,
-          othIndex = othLength,
-          caches = Array(othLength),
-          maxLength = Infinity,
-          result = [];
-
-      while (othIndex--) {
-        var array = arrays[othIndex];
-        if (othIndex && iteratee) {
-          array = arrayMap(array, baseUnary(iteratee));
-        }
-        maxLength = nativeMin(array.length, maxLength);
-        caches[othIndex] = !comparator && (iteratee || (length >= 120 && array.length >= 120))
-          ? new SetCache(othIndex && array)
-          : undefined;
-      }
-      array = arrays[0];
-
-      var index = -1,
-          seen = caches[0];
-
-      outer:
-      while (++index < length && result.length < maxLength) {
-        var value = array[index],
-            computed = iteratee ? iteratee(value) : value;
-
-        value = (comparator || value !== 0) ? value : 0;
-        if (!(seen
-              ? cacheHas(seen, computed)
-              : includes(result, computed, comparator)
-            )) {
-          othIndex = othLength;
-          while (--othIndex) {
-            var cache = caches[othIndex];
-            if (!(cache
-                  ? cacheHas(cache, computed)
-                  : includes(arrays[othIndex], computed, comparator))
-                ) {
-              continue outer;
-            }
-          }
-          if (seen) {
-            seen.push(computed);
-          }
-          result.push(value);
-        }
-      }
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.invert` and `_.invertBy` which inverts
-     * `object` with values transformed by `iteratee` and set by `setter`.
-     *
-     * @private
-     * @param {Object} object The object to iterate over.
-     * @param {Function} setter The function to set `accumulator` values.
-     * @param {Function} iteratee The iteratee to transform values.
-     * @param {Object} accumulator The initial inverted object.
-     * @returns {Function} Returns `accumulator`.
-     */
-    function baseInverter(object, setter, iteratee, accumulator) {
-      baseForOwn(object, function(value, key, object) {
-        setter(accumulator, iteratee(value), key, object);
-      });
-      return accumulator;
-    }
-
-    /**
-     * The base implementation of `_.invoke` without support for individual
-     * method arguments.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @param {Array|string} path The path of the method to invoke.
-     * @param {Array} args The arguments to invoke the method with.
-     * @returns {*} Returns the result of the invoked method.
-     */
-    function baseInvoke(object, path, args) {
-      path = castPath(path, object);
-      object = parent(object, path);
-      var func = object == null ? object : object[toKey(last(path))];
-      return func == null ? undefined : apply(func, object, args);
-    }
-
-    /**
-     * The base implementation of `_.isArguments`.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
-     */
-    function baseIsArguments(value) {
-      return isObjectLike(value) && baseGetTag(value) == argsTag;
-    }
-
-    /**
-     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
-     */
-    function baseIsArrayBuffer(value) {
-      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;
-    }
-
-    /**
-     * The base implementation of `_.isDate` without Node.js optimizations.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
-     */
-    function baseIsDate(value) {
-      return isObjectLike(value) && baseGetTag(value) == dateTag;
-    }
-
-    /**
-     * The base implementation of `_.isEqual` which supports partial comparisons
-     * and tracks traversed objects.
-     *
-     * @private
-     * @param {*} value The value to compare.
-     * @param {*} other The other value to compare.
-     * @param {boolean} bitmask The bitmask flags.
-     *  1 - Unordered comparison
-     *  2 - Partial comparison
-     * @param {Function} [customizer] The function to customize comparisons.
-     * @param {Object} [stack] Tracks traversed `value` and `other` objects.
-     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
-     */
-    function baseIsEqual(value, other, bitmask, customizer, stack) {
-      if (value === other) {
-        return true;
-      }
-      if (value == null || other == null || (!isObjectLike(value) && !isObjectLike(other))) {
-        return value !== value && other !== other;
-      }
-      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
-    }
-
-    /**
-     * A specialized version of `baseIsEqual` for arrays and objects which performs
-     * deep comparisons and tracks traversed objects enabling objects with circular
-     * references to be compared.
-     *
-     * @private
-     * @param {Object} object The object to compare.
-     * @param {Object} other The other object to compare.
-     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
-     * @param {Function} customizer The function to customize comparisons.
-     * @param {Function} equalFunc The function to determine equivalents of values.
-     * @param {Object} [stack] Tracks traversed `object` and `other` objects.
-     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
-     */
-    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
-      var objIsArr = isArray(object),
-          othIsArr = isArray(other),
-          objTag = objIsArr ? arrayTag : getTag(object),
-          othTag = othIsArr ? arrayTag : getTag(other);
-
-      objTag = objTag == argsTag ? objectTag : objTag;
-      othTag = othTag == argsTag ? objectTag : othTag;
-
-      var objIsObj = objTag == objectTag,
-          othIsObj = othTag == objectTag,
-          isSameTag = objTag == othTag;
-
-      if (isSameTag && isBuffer(object)) {
-        if (!isBuffer(other)) {
-          return false;
-        }
-        objIsArr = true;
-        objIsObj = false;
-      }
-      if (isSameTag && !objIsObj) {
-        stack || (stack = new Stack);
-        return (objIsArr || isTypedArray(object))
-          ? equalArrays(object, other, bitmask, customizer, equalFunc, stack)
-          : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
-      }
-      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {
-        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
-            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
-
-        if (objIsWrapped || othIsWrapped) {
-          var objUnwrapped = objIsWrapped ? object.value() : object,
-              othUnwrapped = othIsWrapped ? other.value() : other;
-
-          stack || (stack = new Stack);
-          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
-        }
-      }
-      if (!isSameTag) {
-        return false;
-      }
-      stack || (stack = new Stack);
-      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);
-    }
-
-    /**
-     * The base implementation of `_.isMap` without Node.js optimizations.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
-     */
-    function baseIsMap(value) {
-      return isObjectLike(value) && getTag(value) == mapTag;
-    }
-
-    /**
-     * The base implementation of `_.isMatch` without support for iteratee shorthands.
-     *
-     * @private
-     * @param {Object} object The object to inspect.
-     * @param {Object} source The object of property values to match.
-     * @param {Array} matchData The property names, values, and compare flags to match.
-     * @param {Function} [customizer] The function to customize comparisons.
-     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
-     */
-    function baseIsMatch(object, source, matchData, customizer) {
-      var index = matchData.length,
-          length = index,
-          noCustomizer = !customizer;
-
-      if (object == null) {
-        return !length;
-      }
-      object = Object(object);
-      while (index--) {
-        var data = matchData[index];
-        if ((noCustomizer && data[2])
-              ? data[1] !== object[data[0]]
-              : !(data[0] in object)
-            ) {
-          return false;
-        }
-      }
-      while (++index < length) {
-        data = matchData[index];
-        var key = data[0],
-            objValue = object[key],
-            srcValue = data[1];
-
-        if (noCustomizer && data[2]) {
-          if (objValue === undefined && !(key in object)) {
-            return false;
-          }
-        } else {
-          var stack = new Stack;
-          if (customizer) {
-            var result = customizer(objValue, srcValue, key, object, source, stack);
-          }
-          if (!(result === undefined
-                ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack)
-                : result
-              )) {
-            return false;
-          }
-        }
-      }
-      return true;
-    }
-
-    /**
-     * The base implementation of `_.isNative` without bad shim checks.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a native function,
-     *  else `false`.
-     */
-    function baseIsNative(value) {
-      if (!isObject(value) || isMasked(value)) {
-        return false;
-      }
-      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;
-      return pattern.test(toSource(value));
-    }
-
-    /**
-     * The base implementation of `_.isRegExp` without Node.js optimizations.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
-     */
-    function baseIsRegExp(value) {
-      return isObjectLike(value) && baseGetTag(value) == regexpTag;
-    }
-
-    /**
-     * The base implementation of `_.isSet` without Node.js optimizations.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
-     */
-    function baseIsSet(value) {
-      return isObjectLike(value) && getTag(value) == setTag;
-    }
-
-    /**
-     * The base implementation of `_.isTypedArray` without Node.js optimizations.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
-     */
-    function baseIsTypedArray(value) {
-      return isObjectLike(value) &&
-        isLength(value.length) && !!typedArrayTags[baseGetTag(value)];
-    }
-
-    /**
-     * The base implementation of `_.iteratee`.
-     *
-     * @private
-     * @param {*} [value=_.identity] The value to convert to an iteratee.
-     * @returns {Function} Returns the iteratee.
-     */
-    function baseIteratee(value) {
-      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
-      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
-      if (typeof value == 'function') {
-        return value;
-      }
-      if (value == null) {
-        return identity;
-      }
-      if (typeof value == 'object') {
-        return isArray(value)
-          ? baseMatchesProperty(value[0], value[1])
-          : baseMatches(value);
-      }
-      return property(value);
-    }
-
-    /**
-     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the array of property names.
-     */
-    function baseKeys(object) {
-      if (!isPrototype(object)) {
-        return nativeKeys(object);
-      }
-      var result = [];
-      for (var key in Object(object)) {
-        if (hasOwnProperty.call(object, key) && key != 'constructor') {
-          result.push(key);
-        }
-      }
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the array of property names.
-     */
-    function baseKeysIn(object) {
-      if (!isObject(object)) {
-        return nativeKeysIn(object);
-      }
-      var isProto = isPrototype(object),
-          result = [];
-
-      for (var key in object) {
-        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {
-          result.push(key);
-        }
-      }
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.lt` which doesn't coerce arguments.
-     *
-     * @private
-     * @param {*} value The value to compare.
-     * @param {*} other The other value to compare.
-     * @returns {boolean} Returns `true` if `value` is less than `other`,
-     *  else `false`.
-     */
-    function baseLt(value, other) {
-      return value < other;
-    }
-
-    /**
-     * The base implementation of `_.map` without support for iteratee shorthands.
-     *
-     * @private
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} iteratee The function invoked per iteration.
-     * @returns {Array} Returns the new mapped array.
-     */
-    function baseMap(collection, iteratee) {
-      var index = -1,
-          result = isArrayLike(collection) ? Array(collection.length) : [];
-
-      baseEach(collection, function(value, key, collection) {
-        result[++index] = iteratee(value, key, collection);
-      });
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.matches` which doesn't clone `source`.
-     *
-     * @private
-     * @param {Object} source The object of property values to match.
-     * @returns {Function} Returns the new spec function.
-     */
-    function baseMatches(source) {
-      var matchData = getMatchData(source);
-      if (matchData.length == 1 && matchData[0][2]) {
-        return matchesStrictComparable(matchData[0][0], matchData[0][1]);
-      }
-      return function(object) {
-        return object === source || baseIsMatch(object, source, matchData);
-      };
-    }
-
-    /**
-     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
-     *
-     * @private
-     * @param {string} path The path of the property to get.
-     * @param {*} srcValue The value to match.
-     * @returns {Function} Returns the new spec function.
-     */
-    function baseMatchesProperty(path, srcValue) {
-      if (isKey(path) && isStrictComparable(srcValue)) {
-        return matchesStrictComparable(toKey(path), srcValue);
-      }
-      return function(object) {
-        var objValue = get(object, path);
-        return (objValue === undefined && objValue === srcValue)
-          ? hasIn(object, path)
-          : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);
-      };
-    }
-
-    /**
-     * The base implementation of `_.merge` without support for multiple sources.
-     *
-     * @private
-     * @param {Object} object The destination object.
-     * @param {Object} source The source object.
-     * @param {number} srcIndex The index of `source`.
-     * @param {Function} [customizer] The function to customize merged values.
-     * @param {Object} [stack] Tracks traversed source values and their merged
-     *  counterparts.
-     */
-    function baseMerge(object, source, srcIndex, customizer, stack) {
-      if (object === source) {
-        return;
-      }
-      baseFor(source, function(srcValue, key) {
-        stack || (stack = new Stack);
-        if (isObject(srcValue)) {
-          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
-        }
-        else {
-          var newValue = customizer
-            ? customizer(safeGet(object, key), srcValue, (key + ''), object, source, stack)
-            : undefined;
-
-          if (newValue === undefined) {
-            newValue = srcValue;
-          }
-          assignMergeValue(object, key, newValue);
-        }
-      }, keysIn);
-    }
-
-    /**
-     * A specialized version of `baseMerge` for arrays and objects which performs
-     * deep merges and tracks traversed objects enabling objects with circular
-     * references to be merged.
-     *
-     * @private
-     * @param {Object} object The destination object.
-     * @param {Object} source The source object.
-     * @param {string} key The key of the value to merge.
-     * @param {number} srcIndex The index of `source`.
-     * @param {Function} mergeFunc The function to merge values.
-     * @param {Function} [customizer] The function to customize assigned values.
-     * @param {Object} [stack] Tracks traversed source values and their merged
-     *  counterparts.
-     */
-    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
-      var objValue = safeGet(object, key),
-          srcValue = safeGet(source, key),
-          stacked = stack.get(srcValue);
-
-      if (stacked) {
-        assignMergeValue(object, key, stacked);
-        return;
-      }
-      var newValue = customizer
-        ? customizer(objValue, srcValue, (key + ''), object, source, stack)
-        : undefined;
-
-      var isCommon = newValue === undefined;
-
-      if (isCommon) {
-        var isArr = isArray(srcValue),
-            isBuff = !isArr && isBuffer(srcValue),
-            isTyped = !isArr && !isBuff && isTypedArray(srcValue);
-
-        newValue = srcValue;
-        if (isArr || isBuff || isTyped) {
-          if (isArray(objValue)) {
-            newValue = objValue;
-          }
-          else if (isArrayLikeObject(objValue)) {
-            newValue = copyArray(objValue);
-          }
-          else if (isBuff) {
-            isCommon = false;
-            newValue = cloneBuffer(srcValue, true);
-          }
-          else if (isTyped) {
-            isCommon = false;
-            newValue = cloneTypedArray(srcValue, true);
-          }
-          else {
-            newValue = [];
-          }
-        }
-        else if (isPlainObject(srcValue) || isArguments(srcValue)) {
-          newValue = objValue;
-          if (isArguments(objValue)) {
-            newValue = toPlainObject(objValue);
-          }
-          else if (!isObject(objValue) || isFunction(objValue)) {
-            newValue = initCloneObject(srcValue);
-          }
-        }
-        else {
-          isCommon = false;
-        }
-      }
-      if (isCommon) {
-        // Recursively merge objects and arrays (susceptible to call stack limits).
-        stack.set(srcValue, newValue);
-        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
-        stack['delete'](srcValue);
-      }
-      assignMergeValue(object, key, newValue);
-    }
-
-    /**
-     * The base implementation of `_.nth` which doesn't coerce arguments.
-     *
-     * @private
-     * @param {Array} array The array to query.
-     * @param {number} n The index of the element to return.
-     * @returns {*} Returns the nth element of `array`.
-     */
-    function baseNth(array, n) {
-      var length = array.length;
-      if (!length) {
-        return;
-      }
-      n += n < 0 ? length : 0;
-      return isIndex(n, length) ? array[n] : undefined;
-    }
-
-    /**
-     * The base implementation of `_.orderBy` without param guards.
-     *
-     * @private
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
-     * @param {string[]} orders The sort orders of `iteratees`.
-     * @returns {Array} Returns the new sorted array.
-     */
-    function baseOrderBy(collection, iteratees, orders) {
-      if (iteratees.length) {
-        iteratees = arrayMap(iteratees, function(iteratee) {
-          if (isArray(iteratee)) {
-            return function(value) {
-              return baseGet(value, iteratee.length === 1 ? iteratee[0] : iteratee);
-            }
-          }
-          return iteratee;
-        });
-      } else {
-        iteratees = [identity];
-      }
-
-      var index = -1;
-      iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
-
-      var result = baseMap(collection, function(value, key, collection) {
-        var criteria = arrayMap(iteratees, function(iteratee) {
-          return iteratee(value);
-        });
-        return { 'criteria': criteria, 'index': ++index, 'value': value };
-      });
-
-      return baseSortBy(result, function(object, other) {
-        return compareMultiple(object, other, orders);
-      });
-    }
-
-    /**
-     * The base implementation of `_.pick` without support for individual
-     * property identifiers.
-     *
-     * @private
-     * @param {Object} object The source object.
-     * @param {string[]} paths The property paths to pick.
-     * @returns {Object} Returns the new object.
-     */
-    function basePick(object, paths) {
-      return basePickBy(object, paths, function(value, path) {
-        return hasIn(object, path);
-      });
-    }
-
-    /**
-     * The base implementation of  `_.pickBy` without support for iteratee shorthands.
-     *
-     * @private
-     * @param {Object} object The source object.
-     * @param {string[]} paths The property paths to pick.
-     * @param {Function} predicate The function invoked per property.
-     * @returns {Object} Returns the new object.
-     */
-    function basePickBy(object, paths, predicate) {
-      var index = -1,
-          length = paths.length,
-          result = {};
-
-      while (++index < length) {
-        var path = paths[index],
-            value = baseGet(object, path);
-
-        if (predicate(value, path)) {
-          baseSet(result, castPath(path, object), value);
-        }
-      }
-      return result;
-    }
-
-    /**
-     * A specialized version of `baseProperty` which supports deep paths.
-     *
-     * @private
-     * @param {Array|string} path The path of the property to get.
-     * @returns {Function} Returns the new accessor function.
-     */
-    function basePropertyDeep(path) {
-      return function(object) {
-        return baseGet(object, path);
-      };
-    }
-
-    /**
-     * The base implementation of `_.pullAllBy` without support for iteratee
-     * shorthands.
-     *
-     * @private
-     * @param {Array} array The array to modify.
-     * @param {Array} values The values to remove.
-     * @param {Function} [iteratee] The iteratee invoked per element.
-     * @param {Function} [comparator] The comparator invoked per element.
-     * @returns {Array} Returns `array`.
-     */
-    function basePullAll(array, values, iteratee, comparator) {
-      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,
-          index = -1,
-          length = values.length,
-          seen = array;
-
-      if (array === values) {
-        values = copyArray(values);
-      }
-      if (iteratee) {
-        seen = arrayMap(array, baseUnary(iteratee));
-      }
-      while (++index < length) {
-        var fromIndex = 0,
-            value = values[index],
-            computed = iteratee ? iteratee(value) : value;
-
-        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {
-          if (seen !== array) {
-            splice.call(seen, fromIndex, 1);
-          }
-          splice.call(array, fromIndex, 1);
-        }
-      }
-      return array;
-    }
-
-    /**
-     * The base implementation of `_.pullAt` without support for individual
-     * indexes or capturing the removed elements.
-     *
-     * @private
-     * @param {Array} array The array to modify.
-     * @param {number[]} indexes The indexes of elements to remove.
-     * @returns {Array} Returns `array`.
-     */
-    function basePullAt(array, indexes) {
-      var length = array ? indexes.length : 0,
-          lastIndex = length - 1;
-
-      while (length--) {
-        var index = indexes[length];
-        if (length == lastIndex || index !== previous) {
-          var previous = index;
-          if (isIndex(index)) {
-            splice.call(array, index, 1);
-          } else {
-            baseUnset(array, index);
-          }
-        }
-      }
-      return array;
-    }
-
-    /**
-     * The base implementation of `_.random` without support for returning
-     * floating-point numbers.
-     *
-     * @private
-     * @param {number} lower The lower bound.
-     * @param {number} upper The upper bound.
-     * @returns {number} Returns the random number.
-     */
-    function baseRandom(lower, upper) {
-      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));
-    }
-
-    /**
-     * The base implementation of `_.range` and `_.rangeRight` which doesn't
-     * coerce arguments.
-     *
-     * @private
-     * @param {number} start The start of the range.
-     * @param {number} end The end of the range.
-     * @param {number} step The value to increment or decrement by.
-     * @param {boolean} [fromRight] Specify iterating from right to left.
-     * @returns {Array} Returns the range of numbers.
-     */
-    function baseRange(start, end, step, fromRight) {
-      var index = -1,
-          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
-          result = Array(length);
-
-      while (length--) {
-        result[fromRight ? length : ++index] = start;
-        start += step;
-      }
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.repeat` which doesn't coerce arguments.
-     *
-     * @private
-     * @param {string} string The string to repeat.
-     * @param {number} n The number of times to repeat the string.
-     * @returns {string} Returns the repeated string.
-     */
-    function baseRepeat(string, n) {
-      var result = '';
-      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {
-        return result;
-      }
-      // Leverage the exponentiation by squaring algorithm for a faster repeat.
-      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.
-      do {
-        if (n % 2) {
-          result += string;
-        }
-        n = nativeFloor(n / 2);
-        if (n) {
-          string += string;
-        }
-      } while (n);
-
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.rest` which doesn't validate or coerce arguments.
-     *
-     * @private
-     * @param {Function} func The function to apply a rest parameter to.
-     * @param {number} [start=func.length-1] The start position of the rest parameter.
-     * @returns {Function} Returns the new function.
-     */
-    function baseRest(func, start) {
-      return setToString(overRest(func, start, identity), func + '');
-    }
-
-    /**
-     * The base implementation of `_.sample`.
-     *
-     * @private
-     * @param {Array|Object} collection The collection to sample.
-     * @returns {*} Returns the random element.
-     */
-    function baseSample(collection) {
-      return arraySample(values(collection));
-    }
-
-    /**
-     * The base implementation of `_.sampleSize` without param guards.
-     *
-     * @private
-     * @param {Array|Object} collection The collection to sample.
-     * @param {number} n The number of elements to sample.
-     * @returns {Array} Returns the random elements.
-     */
-    function baseSampleSize(collection, n) {
-      var array = values(collection);
-      return shuffleSelf(array, baseClamp(n, 0, array.length));
-    }
-
-    /**
-     * The base implementation of `_.set`.
-     *
-     * @private
-     * @param {Object} object The object to modify.
-     * @param {Array|string} path The path of the property to set.
-     * @param {*} value The value to set.
-     * @param {Function} [customizer] The function to customize path creation.
-     * @returns {Object} Returns `object`.
-     */
-    function baseSet(object, path, value, customizer) {
-      if (!isObject(object)) {
-        return object;
-      }
-      path = castPath(path, object);
-
-      var index = -1,
-          length = path.length,
-          lastIndex = length - 1,
-          nested = object;
-
-      while (nested != null && ++index < length) {
-        var key = toKey(path[index]),
-            newValue = value;
-
-        if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
-          return object;
-        }
-
-        if (index != lastIndex) {
-          var objValue = nested[key];
-          newValue = customizer ? customizer(objValue, key, nested) : undefined;
-          if (newValue === undefined) {
-            newValue = isObject(objValue)
-              ? objValue
-              : (isIndex(path[index + 1]) ? [] : {});
-          }
-        }
-        assignValue(nested, key, newValue);
-        nested = nested[key];
-      }
-      return object;
-    }
-
-    /**
-     * The base implementation of `setData` without support for hot loop shorting.
-     *
-     * @private
-     * @param {Function} func The function to associate metadata with.
-     * @param {*} data The metadata.
-     * @returns {Function} Returns `func`.
-     */
-    var baseSetData = !metaMap ? identity : function(func, data) {
-      metaMap.set(func, data);
-      return func;
-    };
-
-    /**
-     * The base implementation of `setToString` without support for hot loop shorting.
-     *
-     * @private
-     * @param {Function} func The function to modify.
-     * @param {Function} string The `toString` result.
-     * @returns {Function} Returns `func`.
-     */
-    var baseSetToString = !defineProperty ? identity : function(func, string) {
-      return defineProperty(func, 'toString', {
-        'configurable': true,
-        'enumerable': false,
-        'value': constant(string),
-        'writable': true
-      });
-    };
-
-    /**
-     * The base implementation of `_.shuffle`.
-     *
-     * @private
-     * @param {Array|Object} collection The collection to shuffle.
-     * @returns {Array} Returns the new shuffled array.
-     */
-    function baseShuffle(collection) {
-      return shuffleSelf(values(collection));
-    }
-
-    /**
-     * The base implementation of `_.slice` without an iteratee call guard.
-     *
-     * @private
-     * @param {Array} array The array to slice.
-     * @param {number} [start=0] The start position.
-     * @param {number} [end=array.length] The end position.
-     * @returns {Array} Returns the slice of `array`.
-     */
-    function baseSlice(array, start, end) {
-      var index = -1,
-          length = array.length;
-
-      if (start < 0) {
-        start = -start > length ? 0 : (length + start);
-      }
-      end = end > length ? length : end;
-      if (end < 0) {
-        end += length;
-      }
-      length = start > end ? 0 : ((end - start) >>> 0);
-      start >>>= 0;
-
-      var result = Array(length);
-      while (++index < length) {
-        result[index] = array[index + start];
-      }
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.some` without support for iteratee shorthands.
-     *
-     * @private
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} predicate The function invoked per iteration.
-     * @returns {boolean} Returns `true` if any element passes the predicate check,
-     *  else `false`.
-     */
-    function baseSome(collection, predicate) {
-      var result;
-
-      baseEach(collection, function(value, index, collection) {
-        result = predicate(value, index, collection);
-        return !result;
-      });
-      return !!result;
-    }
-
-    /**
-     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which
-     * performs a binary search of `array` to determine the index at which `value`
-     * should be inserted into `array` in order to maintain its sort order.
-     *
-     * @private
-     * @param {Array} array The sorted array to inspect.
-     * @param {*} value The value to evaluate.
-     * @param {boolean} [retHighest] Specify returning the highest qualified index.
-     * @returns {number} Returns the index at which `value` should be inserted
-     *  into `array`.
-     */
-    function baseSortedIndex(array, value, retHighest) {
-      var low = 0,
-          high = array == null ? low : array.length;
-
-      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {
-        while (low < high) {
-          var mid = (low + high) >>> 1,
-              computed = array[mid];
-
-          if (computed !== null && !isSymbol(computed) &&
-              (retHighest ? (computed <= value) : (computed < value))) {
-            low = mid + 1;
-          } else {
-            high = mid;
-          }
-        }
-        return high;
-      }
-      return baseSortedIndexBy(array, value, identity, retHighest);
-    }
-
-    /**
-     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`
-     * which invokes `iteratee` for `value` and each element of `array` to compute
-     * their sort ranking. The iteratee is invoked with one argument; (value).
-     *
-     * @private
-     * @param {Array} array The sorted array to inspect.
-     * @param {*} value The value to evaluate.
-     * @param {Function} iteratee The iteratee invoked per element.
-     * @param {boolean} [retHighest] Specify returning the highest qualified index.
-     * @returns {number} Returns the index at which `value` should be inserted
-     *  into `array`.
-     */
-    function baseSortedIndexBy(array, value, iteratee, retHighest) {
-      var low = 0,
-          high = array == null ? 0 : array.length;
-      if (high === 0) {
-        return 0;
-      }
-
-      value = iteratee(value);
-      var valIsNaN = value !== value,
-          valIsNull = value === null,
-          valIsSymbol = isSymbol(value),
-          valIsUndefined = value === undefined;
-
-      while (low < high) {
-        var mid = nativeFloor((low + high) / 2),
-            computed = iteratee(array[mid]),
-            othIsDefined = computed !== undefined,
-            othIsNull = computed === null,
-            othIsReflexive = computed === computed,
-            othIsSymbol = isSymbol(computed);
-
-        if (valIsNaN) {
-          var setLow = retHighest || othIsReflexive;
-        } else if (valIsUndefined) {
-          setLow = othIsReflexive && (retHighest || othIsDefined);
-        } else if (valIsNull) {
-          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);
-        } else if (valIsSymbol) {
-          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);
-        } else if (othIsNull || othIsSymbol) {
-          setLow = false;
-        } else {
-          setLow = retHighest ? (computed <= value) : (computed < value);
-        }
-        if (setLow) {
-          low = mid + 1;
-        } else {
-          high = mid;
-        }
-      }
-      return nativeMin(high, MAX_ARRAY_INDEX);
-    }
-
-    /**
-     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without
-     * support for iteratee shorthands.
-     *
-     * @private
-     * @param {Array} array The array to inspect.
-     * @param {Function} [iteratee] The iteratee invoked per element.
-     * @returns {Array} Returns the new duplicate free array.
-     */
-    function baseSortedUniq(array, iteratee) {
-      var index = -1,
-          length = array.length,
-          resIndex = 0,
-          result = [];
-
-      while (++index < length) {
-        var value = array[index],
-            computed = iteratee ? iteratee(value) : value;
-
-        if (!index || !eq(computed, seen)) {
-          var seen = computed;
-          result[resIndex++] = value === 0 ? 0 : value;
-        }
-      }
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.toNumber` which doesn't ensure correct
-     * conversions of binary, hexadecimal, or octal string values.
-     *
-     * @private
-     * @param {*} value The value to process.
-     * @returns {number} Returns the number.
-     */
-    function baseToNumber(value) {
-      if (typeof value == 'number') {
-        return value;
-      }
-      if (isSymbol(value)) {
-        return NAN;
-      }
-      return +value;
-    }
-
-    /**
-     * The base implementation of `_.toString` which doesn't convert nullish
-     * values to empty strings.
-     *
-     * @private
-     * @param {*} value The value to process.
-     * @returns {string} Returns the string.
-     */
-    function baseToString(value) {
-      // Exit early for strings to avoid a performance hit in some environments.
-      if (typeof value == 'string') {
-        return value;
-      }
-      if (isArray(value)) {
-        // Recursively convert values (susceptible to call stack limits).
-        return arrayMap(value, baseToString) + '';
-      }
-      if (isSymbol(value)) {
-        return symbolToString ? symbolToString.call(value) : '';
-      }
-      var result = (value + '');
-      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-    }
-
-    /**
-     * The base implementation of `_.uniqBy` without support for iteratee shorthands.
-     *
-     * @private
-     * @param {Array} array The array to inspect.
-     * @param {Function} [iteratee] The iteratee invoked per element.
-     * @param {Function} [comparator] The comparator invoked per element.
-     * @returns {Array} Returns the new duplicate free array.
-     */
-    function baseUniq(array, iteratee, comparator) {
-      var index = -1,
-          includes = arrayIncludes,
-          length = array.length,
-          isCommon = true,
-          result = [],
-          seen = result;
-
-      if (comparator) {
-        isCommon = false;
-        includes = arrayIncludesWith;
-      }
-      else if (length >= LARGE_ARRAY_SIZE) {
-        var set = iteratee ? null : createSet(array);
-        if (set) {
-          return setToArray(set);
-        }
-        isCommon = false;
-        includes = cacheHas;
-        seen = new SetCache;
-      }
-      else {
-        seen = iteratee ? [] : result;
-      }
-      outer:
-      while (++index < length) {
-        var value = array[index],
-            computed = iteratee ? iteratee(value) : value;
-
-        value = (comparator || value !== 0) ? value : 0;
-        if (isCommon && computed === computed) {
-          var seenIndex = seen.length;
-          while (seenIndex--) {
-            if (seen[seenIndex] === computed) {
-              continue outer;
-            }
-          }
-          if (iteratee) {
-            seen.push(computed);
-          }
-          result.push(value);
-        }
-        else if (!includes(seen, computed, comparator)) {
-          if (seen !== result) {
-            seen.push(computed);
-          }
-          result.push(value);
-        }
-      }
-      return result;
-    }
-
-    /**
-     * The base implementation of `_.unset`.
-     *
-     * @private
-     * @param {Object} object The object to modify.
-     * @param {Array|string} path The property path to unset.
-     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
-     */
-    function baseUnset(object, path) {
-      path = castPath(path, object);
-      object = parent(object, path);
-      return object == null || delete object[toKey(last(path))];
-    }
-
-    /**
-     * The base implementation of `_.update`.
-     *
-     * @private
-     * @param {Object} object The object to modify.
-     * @param {Array|string} path The path of the property to update.
-     * @param {Function} updater The function to produce the updated value.
-     * @param {Function} [customizer] The function to customize path creation.
-     * @returns {Object} Returns `object`.
-     */
-    function baseUpdate(object, path, updater, customizer) {
-      return baseSet(object, path, updater(baseGet(object, path)), customizer);
-    }
-
-    /**
-     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`
-     * without support for iteratee shorthands.
-     *
-     * @private
-     * @param {Array} array The array to query.
-     * @param {Function} predicate The function invoked per iteration.
-     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.
-     * @param {boolean} [fromRight] Specify iterating from right to left.
-     * @returns {Array} Returns the slice of `array`.
-     */
-    function baseWhile(array, predicate, isDrop, fromRight) {
-      var length = array.length,
-          index = fromRight ? length : -1;
-
-      while ((fromRight ? index-- : ++index < length) &&
-        predicate(array[index], index, array)) {}
-
-      return isDrop
-        ? baseSlice(array, (fromRight ? 0 : index), (fromRight ? index + 1 : length))
-        : baseSlice(array, (fromRight ? index + 1 : 0), (fromRight ? length : index));
-    }
-
-    /**
-     * The base implementation of `wrapperValue` which returns the result of
-     * performing a sequence of actions on the unwrapped `value`, where each
-     * successive action is supplied the return value of the previous.
-     *
-     * @private
-     * @param {*} value The unwrapped value.
-     * @param {Array} actions Actions to perform to resolve the unwrapped value.
-     * @returns {*} Returns the resolved value.
-     */
-    function baseWrapperValue(value, actions) {
-      var result = value;
-      if (result instanceof LazyWrapper) {
-        result = result.value();
-      }
-      return arrayReduce(actions, function(result, action) {
-        return action.func.apply(action.thisArg, arrayPush([result], action.args));
-      }, result);
-    }
-
-    /**
-     * The base implementation of methods like `_.xor`, without support for
-     * iteratee shorthands, that accepts an array of arrays to inspect.
-     *
-     * @private
-     * @param {Array} arrays The arrays to inspect.
-     * @param {Function} [iteratee] The iteratee invoked per element.
-     * @param {Function} [comparator] The comparator invoked per element.
-     * @returns {Array} Returns the new array of values.
-     */
-    function baseXor(arrays, iteratee, comparator) {
-      var length = arrays.length;
-      if (length < 2) {
-        return length ? baseUniq(arrays[0]) : [];
-      }
-      var index = -1,
-          result = Array(length);
-
-      while (++index < length) {
-        var array = arrays[index],
-            othIndex = -1;
-
-        while (++othIndex < length) {
-          if (othIndex != index) {
-            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);
-          }
-        }
-      }
-      return baseUniq(baseFlatten(result, 1), iteratee, comparator);
-    }
-
-    /**
-     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
-     *
-     * @private
-     * @param {Array} props The property identifiers.
-     * @param {Array} values The property values.
-     * @param {Function} assignFunc The function to assign values.
-     * @returns {Object} Returns the new object.
-     */
-    function baseZipObject(props, values, assignFunc) {
-      var index = -1,
-          length = props.length,
-          valsLength = values.length,
-          result = {};
-
-      while (++index < length) {
-        var value = index < valsLength ? values[index] : undefined;
-        assignFunc(result, props[index], value);
-      }
-      return result;
-    }
-
-    /**
-     * Casts `value` to an empty array if it's not an array like object.
-     *
-     * @private
-     * @param {*} value The value to inspect.
-     * @returns {Array|Object} Returns the cast array-like object.
-     */
-    function castArrayLikeObject(value) {
-      return isArrayLikeObject(value) ? value : [];
-    }
-
-    /**
-     * Casts `value` to `identity` if it's not a function.
-     *
-     * @private
-     * @param {*} value The value to inspect.
-     * @returns {Function} Returns cast function.
-     */
-    function castFunction(value) {
-      return typeof value == 'function' ? value : identity;
-    }
-
-    /**
-     * Casts `value` to a path array if it's not one.
-     *
-     * @private
-     * @param {*} value The value to inspect.
-     * @param {Object} [object] The object to query keys on.
-     * @returns {Array} Returns the cast property path array.
-     */
-    function castPath(value, object) {
-      if (isArray(value)) {
-        return value;
-      }
-      return isKey(value, object) ? [value] : stringToPath(toString(value));
-    }
-
-    /**
-     * A `baseRest` alias which can be replaced with `identity` by module
-     * replacement plugins.
-     *
-     * @private
-     * @type {Function}
-     * @param {Function} func The function to apply a rest parameter to.
-     * @returns {Function} Returns the new function.
-     */
-    var castRest = baseRest;
-
-    /**
-     * Casts `array` to a slice if it's needed.
-     *
-     * @private
-     * @param {Array} array The array to inspect.
-     * @param {number} start The start position.
-     * @param {number} [end=array.length] The end position.
-     * @returns {Array} Returns the cast slice.
-     */
-    function castSlice(array, start, end) {
-      var length = array.length;
-      end = end === undefined ? length : end;
-      return (!start && end >= length) ? array : baseSlice(array, start, end);
-    }
-
-    /**
-     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).
-     *
-     * @private
-     * @param {number|Object} id The timer id or timeout object of the timer to clear.
-     */
-    var clearTimeout = ctxClearTimeout || function(id) {
-      return root.clearTimeout(id);
-    };
-
-    /**
-     * Creates a clone of  `buffer`.
-     *
-     * @private
-     * @param {Buffer} buffer The buffer to clone.
-     * @param {boolean} [isDeep] Specify a deep clone.
-     * @returns {Buffer} Returns the cloned buffer.
-     */
-    function cloneBuffer(buffer, isDeep) {
-      if (isDeep) {
-        return buffer.slice();
-      }
-      var length = buffer.length,
-          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
-
-      buffer.copy(result);
-      return result;
-    }
-
-    /**
-     * Creates a clone of `arrayBuffer`.
-     *
-     * @private
-     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
-     * @returns {ArrayBuffer} Returns the cloned array buffer.
-     */
-    function cloneArrayBuffer(arrayBuffer) {
-      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
-      new Uint8Array(result).set(new Uint8Array(arrayBuffer));
-      return result;
-    }
-
-    /**
-     * Creates a clone of `dataView`.
-     *
-     * @private
-     * @param {Object} dataView The data view to clone.
-     * @param {boolean} [isDeep] Specify a deep clone.
-     * @returns {Object} Returns the cloned data view.
-     */
-    function cloneDataView(dataView, isDeep) {
-      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;
-      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
-    }
-
-    /**
-     * Creates a clone of `regexp`.
-     *
-     * @private
-     * @param {Object} regexp The regexp to clone.
-     * @returns {Object} Returns the cloned regexp.
-     */
-    function cloneRegExp(regexp) {
-      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
-      result.lastIndex = regexp.lastIndex;
-      return result;
-    }
-
-    /**
-     * Creates a clone of the `symbol` object.
-     *
-     * @private
-     * @param {Object} symbol The symbol object to clone.
-     * @returns {Object} Returns the cloned symbol object.
-     */
-    function cloneSymbol(symbol) {
-      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
-    }
-
-    /**
-     * Creates a clone of `typedArray`.
-     *
-     * @private
-     * @param {Object} typedArray The typed array to clone.
-     * @param {boolean} [isDeep] Specify a deep clone.
-     * @returns {Object} Returns the cloned typed array.
-     */
-    function cloneTypedArray(typedArray, isDeep) {
-      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;
-      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
-    }
-
-    /**
-     * Compares values to sort them in ascending order.
-     *
-     * @private
-     * @param {*} value The value to compare.
-     * @param {*} other The other value to compare.
-     * @returns {number} Returns the sort order indicator for `value`.
-     */
-    function compareAscending(value, other) {
-      if (value !== other) {
-        var valIsDefined = value !== undefined,
-            valIsNull = value === null,
-            valIsReflexive = value === value,
-            valIsSymbol = isSymbol(value);
-
-        var othIsDefined = other !== undefined,
-            othIsNull = other === null,
-            othIsReflexive = other === other,
-            othIsSymbol = isSymbol(other);
-
-        if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
-            (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
-            (valIsNull && othIsDefined && othIsReflexive) ||
-            (!valIsDefined && othIsReflexive) ||
-            !valIsReflexive) {
-          return 1;
-        }
-        if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
-            (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
-            (othIsNull && valIsDefined && valIsReflexive) ||
-            (!othIsDefined && valIsReflexive) ||
-            !othIsReflexive) {
-          return -1;
-        }
-      }
-      return 0;
-    }
-
-    /**
-     * Used by `_.orderBy` to compare multiple properties of a value to another
-     * and stable sort them.
-     *
-     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
-     * specify an order of "desc" for descending or "asc" for ascending sort order
-     * of corresponding values.
-     *
-     * @private
-     * @param {Object} object The object to compare.
-     * @param {Object} other The other object to compare.
-     * @param {boolean[]|string[]} orders The order to sort by for each property.
-     * @returns {number} Returns the sort order indicator for `object`.
-     */
-    function compareMultiple(object, other, orders) {
-      var index = -1,
-          objCriteria = object.criteria,
-          othCriteria = other.criteria,
-          length = objCriteria.length,
-          ordersLength = orders.length;
-
-      while (++index < length) {
-        var result = compareAscending(objCriteria[index], othCriteria[index]);
-        if (result) {
-          if (index >= ordersLength) {
-            return result;
-          }
-          var order = orders[index];
-          return result * (order == 'desc' ? -1 : 1);
-        }
-      }
-      // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
-      // that causes it, under certain circumstances, to provide the same value for
-      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
-      // for more details.
-      //
-      // This also ensures a stable sort in V8 and other engines.
-      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
-      return object.index - other.index;
-    }
-
-    /**
-     * Creates an array that is the composition of partially applied arguments,
-     * placeholders, and provided arguments into a single array of arguments.
-     *
-     * @private
-     * @param {Array} args The provided arguments.
-     * @param {Array} partials The arguments to prepend to those provided.
-     * @param {Array} holders The `partials` placeholder indexes.
-     * @params {boolean} [isCurried] Specify composing for a curried function.
-     * @returns {Array} Returns the new array of composed arguments.
-     */
-    function composeArgs(args, partials, holders, isCurried) {
-      var argsIndex = -1,
-          argsLength = args.length,
-          holdersLength = holders.length,
-          leftIndex = -1,
-          leftLength = partials.length,
-          rangeLength = nativeMax(argsLength - holdersLength, 0),
-          result = Array(leftLength + rangeLength),
-          isUncurried = !isCurried;
-
-      while (++leftIndex < leftLength) {
-        result[leftIndex] = partials[leftIndex];
-      }
-      while (++argsIndex < holdersLength) {
-        if (isUncurried || argsIndex < argsLength) {
-          result[holders[argsIndex]] = args[argsIndex];
-        }
-      }
-      while (rangeLength--) {
-        result[leftIndex++] = args[argsIndex++];
-      }
-      return result;
-    }
-
-    /**
-     * This function is like `composeArgs` except that the arguments composition
-     * is tailored for `_.partialRight`.
-     *
-     * @private
-     * @param {Array} args The provided arguments.
-     * @param {Array} partials The arguments to append to those provided.
-     * @param {Array} holders The `partials` placeholder indexes.
-     * @params {boolean} [isCurried] Specify composing for a curried function.
-     * @returns {Array} Returns the new array of composed arguments.
-     */
-    function composeArgsRight(args, partials, holders, isCurried) {
-      var argsIndex = -1,
-          argsLength = args.length,
-          holdersIndex = -1,
-          holdersLength = holders.length,
-          rightIndex = -1,
-          rightLength = partials.length,
-          rangeLength = nativeMax(argsLength - holdersLength, 0),
-          result = Array(rangeLength + rightLength),
-          isUncurried = !isCurried;
-
-      while (++argsIndex < rangeLength) {
-        result[argsIndex] = args[argsIndex];
-      }
-      var offset = argsIndex;
-      while (++rightIndex < rightLength) {
-        result[offset + rightIndex] = partials[rightIndex];
-      }
-      while (++holdersIndex < holdersLength) {
-        if (isUncurried || argsIndex < argsLength) {
-          result[offset + holders[holdersIndex]] = args[argsIndex++];
-        }
-      }
-      return result;
-    }
-
-    /**
-     * Copies the values of `source` to `array`.
-     *
-     * @private
-     * @param {Array} source The array to copy values from.
-     * @param {Array} [array=[]] The array to copy values to.
-     * @returns {Array} Returns `array`.
-     */
-    function copyArray(source, array) {
-      var index = -1,
-          length = source.length;
-
-      array || (array = Array(length));
-      while (++index < length) {
-        array[index] = source[index];
-      }
-      return array;
-    }
-
-    /**
-     * Copies properties of `source` to `object`.
-     *
-     * @private
-     * @param {Object} source The object to copy properties from.
-     * @param {Array} props The property identifiers to copy.
-     * @param {Object} [object={}] The object to copy properties to.
-     * @param {Function} [customizer] The function to customize copied values.
-     * @returns {Object} Returns `object`.
-     */
-    function copyObject(source, props, object, customizer) {
-      var isNew = !object;
-      object || (object = {});
-
-      var index = -1,
-          length = props.length;
-
-      while (++index < length) {
-        var key = props[index];
-
-        var newValue = customizer
-          ? customizer(object[key], source[key], key, object, source)
-          : undefined;
-
-        if (newValue === undefined) {
-          newValue = source[key];
-        }
-        if (isNew) {
-          baseAssignValue(object, key, newValue);
-        } else {
-          assignValue(object, key, newValue);
-        }
-      }
-      return object;
-    }
-
-    /**
-     * Copies own symbols of `source` to `object`.
-     *
-     * @private
-     * @param {Object} source The object to copy symbols from.
-     * @param {Object} [object={}] The object to copy symbols to.
-     * @returns {Object} Returns `object`.
-     */
-    function copySymbols(source, object) {
-      return copyObject(source, getSymbols(source), object);
-    }
-
-    /**
-     * Copies own and inherited symbols of `source` to `object`.
-     *
-     * @private
-     * @param {Object} source The object to copy symbols from.
-     * @param {Object} [object={}] The object to copy symbols to.
-     * @returns {Object} Returns `object`.
-     */
-    function copySymbolsIn(source, object) {
-      return copyObject(source, getSymbolsIn(source), object);
-    }
-
-    /**
-     * Creates a function like `_.groupBy`.
-     *
-     * @private
-     * @param {Function} setter The function to set accumulator values.
-     * @param {Function} [initializer] The accumulator object initializer.
-     * @returns {Function} Returns the new aggregator function.
-     */
-    function createAggregator(setter, initializer) {
-      return function(collection, iteratee) {
-        var func = isArray(collection) ? arrayAggregator : baseAggregator,
-            accumulator = initializer ? initializer() : {};
-
-        return func(collection, setter, getIteratee(iteratee, 2), accumulator);
-      };
-    }
-
-    /**
-     * Creates a function like `_.assign`.
-     *
-     * @private
-     * @param {Function} assigner The function to assign values.
-     * @returns {Function} Returns the new assigner function.
-     */
-    function createAssigner(assigner) {
-      return baseRest(function(object, sources) {
-        var index = -1,
-            length = sources.length,
-            customizer = length > 1 ? sources[length - 1] : undefined,
-            guard = length > 2 ? sources[2] : undefined;
-
-        customizer = (assigner.length > 3 && typeof customizer == 'function')
-          ? (length--, customizer)
-          : undefined;
-
-        if (guard && isIterateeCall(sources[0], sources[1], guard)) {
-          customizer = length < 3 ? undefined : customizer;
-          length = 1;
-        }
-        object = Object(object);
-        while (++index < length) {
-          var source = sources[index];
-          if (source) {
-            assigner(object, source, index, customizer);
-          }
-        }
-        return object;
-      });
-    }
-
-    /**
-     * Creates a `baseEach` or `baseEachRight` function.
-     *
-     * @private
-     * @param {Function} eachFunc The function to iterate over a collection.
-     * @param {boolean} [fromRight] Specify iterating from right to left.
-     * @returns {Function} Returns the new base function.
-     */
-    function createBaseEach(eachFunc, fromRight) {
-      return function(collection, iteratee) {
-        if (collection == null) {
-          return collection;
-        }
-        if (!isArrayLike(collection)) {
-          return eachFunc(collection, iteratee);
-        }
-        var length = collection.length,
-            index = fromRight ? length : -1,
-            iterable = Object(collection);
-
-        while ((fromRight ? index-- : ++index < length)) {
-          if (iteratee(iterable[index], index, iterable) === false) {
-            break;
-          }
-        }
-        return collection;
-      };
-    }
-
-    /**
-     * Creates a base function for methods like `_.forIn` and `_.forOwn`.
-     *
-     * @private
-     * @param {boolean} [fromRight] Specify iterating from right to left.
-     * @returns {Function} Returns the new base function.
-     */
-    function createBaseFor(fromRight) {
-      return function(object, iteratee, keysFunc) {
-        var index = -1,
-            iterable = Object(object),
-            props = keysFunc(object),
-            length = props.length;
-
-        while (length--) {
-          var key = props[fromRight ? length : ++index];
-          if (iteratee(iterable[key], key, iterable) === false) {
-            break;
-          }
-        }
-        return object;
-      };
-    }
-
-    /**
-     * Creates a function that wraps `func` to invoke it with the optional `this`
-     * binding of `thisArg`.
-     *
-     * @private
-     * @param {Function} func The function to wrap.
-     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
-     * @param {*} [thisArg] The `this` binding of `func`.
-     * @returns {Function} Returns the new wrapped function.
-     */
-    function createBind(func, bitmask, thisArg) {
-      var isBind = bitmask & WRAP_BIND_FLAG,
-          Ctor = createCtor(func);
-
-      function wrapper() {
-        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
-        return fn.apply(isBind ? thisArg : this, arguments);
-      }
-      return wrapper;
-    }
-
-    /**
-     * Creates a function like `_.lowerFirst`.
-     *
-     * @private
-     * @param {string} methodName The name of the `String` case method to use.
-     * @returns {Function} Returns the new case function.
-     */
-    function createCaseFirst(methodName) {
-      return function(string) {
-        string = toString(string);
-
-        var strSymbols = hasUnicode(string)
-          ? stringToArray(string)
-          : undefined;
-
-        var chr = strSymbols
-          ? strSymbols[0]
-          : string.charAt(0);
-
-        var trailing = strSymbols
-          ? castSlice(strSymbols, 1).join('')
-          : string.slice(1);
-
-        return chr[methodName]() + trailing;
-      };
-    }
-
-    /**
-     * Creates a function like `_.camelCase`.
-     *
-     * @private
-     * @param {Function} callback The function to combine each word.
-     * @returns {Function} Returns the new compounder function.
-     */
-    function createCompounder(callback) {
-      return function(string) {
-        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
-      };
-    }
-
-    /**
-     * Creates a function that produces an instance of `Ctor` regardless of
-     * whether it was invoked as part of a `new` expression or by `call` or `apply`.
-     *
-     * @private
-     * @param {Function} Ctor The constructor to wrap.
-     * @returns {Function} Returns the new wrapped function.
-     */
-    function createCtor(Ctor) {
-      return function() {
-        // Use a `switch` statement to work with class constructors. See
-        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist
-        // for more details.
-        var args = arguments;
-        switch (args.length) {
-          case 0: return new Ctor;
-          case 1: return new Ctor(args[0]);
-          case 2: return new Ctor(args[0], args[1]);
-          case 3: return new Ctor(args[0], args[1], args[2]);
-          case 4: return new Ctor(args[0], args[1], args[2], args[3]);
-          case 5: return new Ctor(args[0], args[1], args[2], args[3], args[4]);
-          case 6: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);
-          case 7: return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
-        }
-        var thisBinding = baseCreate(Ctor.prototype),
-            result = Ctor.apply(thisBinding, args);
-
-        // Mimic the constructor's `return` behavior.
-        // See https://es5.github.io/#x13.2.2 for more details.
-        return isObject(result) ? result : thisBinding;
-      };
-    }
-
-    /**
-     * Creates a function that wraps `func` to enable currying.
-     *
-     * @private
-     * @param {Function} func The function to wrap.
-     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
-     * @param {number} arity The arity of `func`.
-     * @returns {Function} Returns the new wrapped function.
-     */
-    function createCurry(func, bitmask, arity) {
-      var Ctor = createCtor(func);
-
-      function wrapper() {
-        var length = arguments.length,
-            args = Array(length),
-            index = length,
-            placeholder = getHolder(wrapper);
-
-        while (index--) {
-          args[index] = arguments[index];
-        }
-        var holders = (length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder)
-          ? []
-          : replaceHolders(args, placeholder);
-
-        length -= holders.length;
-        if (length < arity) {
-          return createRecurry(
-            func, bitmask, createHybrid, wrapper.placeholder, undefined,
-            args, holders, undefined, undefined, arity - length);
-        }
-        var fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
-        return apply(fn, this, args);
-      }
-      return wrapper;
-    }
-
-    /**
-     * Creates a `_.find` or `_.findLast` function.
-     *
-     * @private
-     * @param {Function} findIndexFunc The function to find the collection index.
-     * @returns {Function} Returns the new find function.
-     */
-    function createFind(findIndexFunc) {
-      return function(collection, predicate, fromIndex) {
-        var iterable = Object(collection);
-        if (!isArrayLike(collection)) {
-          var iteratee = getIteratee(predicate, 3);
-          collection = keys(collection);
-          predicate = function(key) { return iteratee(iterable[key], key, iterable); };
-        }
-        var index = findIndexFunc(collection, predicate, fromIndex);
-        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
-      };
-    }
-
-    /**
-     * Creates a `_.flow` or `_.flowRight` function.
-     *
-     * @private
-     * @param {boolean} [fromRight] Specify iterating from right to left.
-     * @returns {Function} Returns the new flow function.
-     */
-    function createFlow(fromRight) {
-      return flatRest(function(funcs) {
-        var length = funcs.length,
-            index = length,
-            prereq = LodashWrapper.prototype.thru;
-
-        if (fromRight) {
-          funcs.reverse();
-        }
-        while (index--) {
-          var func = funcs[index];
-          if (typeof func != 'function') {
-            throw new TypeError(FUNC_ERROR_TEXT);
-          }
-          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {
-            var wrapper = new LodashWrapper([], true);
-          }
-        }
-        index = wrapper ? index : length;
-        while (++index < length) {
-          func = funcs[index];
-
-          var funcName = getFuncName(func),
-              data = funcName == 'wrapper' ? getData(func) : undefined;
-
-          if (data && isLaziable(data[0]) &&
-                data[1] == (WRAP_ARY_FLAG | WRAP_CURRY_FLAG | WRAP_PARTIAL_FLAG | WRAP_REARG_FLAG) &&
-                !data[4].length && data[9] == 1
-              ) {
-            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);
-          } else {
-            wrapper = (func.length == 1 && isLaziable(func))
-              ? wrapper[funcName]()
-              : wrapper.thru(func);
-          }
-        }
-        return function() {
-          var args = arguments,
-              value = args[0];
-
-          if (wrapper && args.length == 1 && isArray(value)) {
-            return wrapper.plant(value).value();
-          }
-          var index = 0,
-              result = length ? funcs[index].apply(this, args) : value;
-
-          while (++index < length) {
-            result = funcs[index].call(this, result);
-          }
-          return result;
-        };
-      });
-    }
-
-    /**
-     * Creates a function that wraps `func` to invoke it with optional `this`
-     * binding of `thisArg`, partial application, and currying.
-     *
-     * @private
-     * @param {Function|string} func The function or method name to wrap.
-     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
-     * @param {*} [thisArg] The `this` binding of `func`.
-     * @param {Array} [partials] The arguments to prepend to those provided to
-     *  the new function.
-     * @param {Array} [holders] The `partials` placeholder indexes.
-     * @param {Array} [partialsRight] The arguments to append to those provided
-     *  to the new function.
-     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.
-     * @param {Array} [argPos] The argument positions of the new function.
-     * @param {number} [ary] The arity cap of `func`.
-     * @param {number} [arity] The arity of `func`.
-     * @returns {Function} Returns the new wrapped function.
-     */
-    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {
-      var isAry = bitmask & WRAP_ARY_FLAG,
-          isBind = bitmask & WRAP_BIND_FLAG,
-          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,
-          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),
-          isFlip = bitmask & WRAP_FLIP_FLAG,
-          Ctor = isBindKey ? undefined : createCtor(func);
-
-      function wrapper() {
-        var length = arguments.length,
-            args = Array(length),
-            index = length;
-
-        while (index--) {
-          args[index] = arguments[index];
-        }
-        if (isCurried) {
-          var placeholder = getHolder(wrapper),
-              holdersCount = countHolders(args, placeholder);
-        }
-        if (partials) {
-          args = composeArgs(args, partials, holders, isCurried);
-        }
-        if (partialsRight) {
-          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);
-        }
-        length -= holdersCount;
-        if (isCurried && length < arity) {
-          var newHolders = replaceHolders(args, placeholder);
-          return createRecurry(
-            func, bitmask, createHybrid, wrapper.placeholder, thisArg,
-            args, newHolders, argPos, ary, arity - length
-          );
-        }
-        var thisBinding = isBind ? thisArg : this,
-            fn = isBindKey ? thisBinding[func] : func;
-
-        length = args.length;
-        if (argPos) {
-          args = reorder(args, argPos);
-        } else if (isFlip && length > 1) {
-          args.reverse();
-        }
-        if (isAry && ary < length) {
-          args.length = ary;
-        }
-        if (this && this !== root && this instanceof wrapper) {
-          fn = Ctor || createCtor(fn);
-        }
-        return fn.apply(thisBinding, args);
-      }
-      return wrapper;
-    }
-
-    /**
-     * Creates a function like `_.invertBy`.
-     *
-     * @private
-     * @param {Function} setter The function to set accumulator values.
-     * @param {Function} toIteratee The function to resolve iteratees.
-     * @returns {Function} Returns the new inverter function.
-     */
-    function createInverter(setter, toIteratee) {
-      return function(object, iteratee) {
-        return baseInverter(object, setter, toIteratee(iteratee), {});
-      };
-    }
-
-    /**
-     * Creates a function that performs a mathematical operation on two values.
-     *
-     * @private
-     * @param {Function} operator The function to perform the operation.
-     * @param {number} [defaultValue] The value used for `undefined` arguments.
-     * @returns {Function} Returns the new mathematical operation function.
-     */
-    function createMathOperation(operator, defaultValue) {
-      return function(value, other) {
-        var result;
-        if (value === undefined && other === undefined) {
-          return defaultValue;
-        }
-        if (value !== undefined) {
-          result = value;
-        }
-        if (other !== undefined) {
-          if (result === undefined) {
-            return other;
-          }
-          if (typeof value == 'string' || typeof other == 'string') {
-            value = baseToString(value);
-            other = baseToString(other);
-          } else {
-            value = baseToNumber(value);
-            other = baseToNumber(other);
-          }
-          result = operator(value, other);
-        }
-        return result;
-      };
-    }
-
-    /**
-     * Creates a function like `_.over`.
-     *
-     * @private
-     * @param {Function} arrayFunc The function to iterate over iteratees.
-     * @returns {Function} Returns the new over function.
-     */
-    function createOver(arrayFunc) {
-      return flatRest(function(iteratees) {
-        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));
-        return baseRest(function(args) {
-          var thisArg = this;
-          return arrayFunc(iteratees, function(iteratee) {
-            return apply(iteratee, thisArg, args);
-          });
-        });
-      });
-    }
-
-    /**
-     * Creates the padding for `string` based on `length`. The `chars` string
-     * is truncated if the number of characters exceeds `length`.
-     *
-     * @private
-     * @param {number} length The padding length.
-     * @param {string} [chars=' '] The string used as padding.
-     * @returns {string} Returns the padding for `string`.
-     */
-    function createPadding(length, chars) {
-      chars = chars === undefined ? ' ' : baseToString(chars);
-
-      var charsLength = chars.length;
-      if (charsLength < 2) {
-        return charsLength ? baseRepeat(chars, length) : chars;
-      }
-      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));
-      return hasUnicode(chars)
-        ? castSlice(stringToArray(result), 0, length).join('')
-        : result.slice(0, length);
-    }
-
-    /**
-     * Creates a function that wraps `func` to invoke it with the `this` binding
-     * of `thisArg` and `partials` prepended to the arguments it receives.
-     *
-     * @private
-     * @param {Function} func The function to wrap.
-     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
-     * @param {*} thisArg The `this` binding of `func`.
-     * @param {Array} partials The arguments to prepend to those provided to
-     *  the new function.
-     * @returns {Function} Returns the new wrapped function.
-     */
-    function createPartial(func, bitmask, thisArg, partials) {
-      var isBind = bitmask & WRAP_BIND_FLAG,
-          Ctor = createCtor(func);
-
-      function wrapper() {
-        var argsIndex = -1,
-            argsLength = arguments.length,
-            leftIndex = -1,
-            leftLength = partials.length,
-            args = Array(leftLength + argsLength),
-            fn = (this && this !== root && this instanceof wrapper) ? Ctor : func;
-
-        while (++leftIndex < leftLength) {
-          args[leftIndex] = partials[leftIndex];
-        }
-        while (argsLength--) {
-          args[leftIndex++] = arguments[++argsIndex];
-        }
-        return apply(fn, isBind ? thisArg : this, args);
-      }
-      return wrapper;
-    }
-
-    /**
-     * Creates a `_.range` or `_.rangeRight` function.
-     *
-     * @private
-     * @param {boolean} [fromRight] Specify iterating from right to left.
-     * @returns {Function} Returns the new range function.
-     */
-    function createRange(fromRight) {
-      return function(start, end, step) {
-        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {
-          end = step = undefined;
-        }
-        // Ensure the sign of `-0` is preserved.
-        start = toFinite(start);
-        if (end === undefined) {
-          end = start;
-          start = 0;
-        } else {
-          end = toFinite(end);
-        }
-        step = step === undefined ? (start < end ? 1 : -1) : toFinite(step);
-        return baseRange(start, end, step, fromRight);
-      };
-    }
-
-    /**
-     * Creates a function that performs a relational operation on two values.
-     *
-     * @private
-     * @param {Function} operator The function to perform the operation.
-     * @returns {Function} Returns the new relational operation function.
-     */
-    function createRelationalOperation(operator) {
-      return function(value, other) {
-        if (!(typeof value == 'string' && typeof other == 'string')) {
-          value = toNumber(value);
-          other = toNumber(other);
-        }
-        return operator(value, other);
-      };
-    }
-
-    /**
-     * Creates a function that wraps `func` to continue currying.
-     *
-     * @private
-     * @param {Function} func The function to wrap.
-     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
-     * @param {Function} wrapFunc The function to create the `func` wrapper.
-     * @param {*} placeholder The placeholder value.
-     * @param {*} [thisArg] The `this` binding of `func`.
-     * @param {Array} [partials] The arguments to prepend to those provided to
-     *  the new function.
-     * @param {Array} [holders] The `partials` placeholder indexes.
-     * @param {Array} [argPos] The argument positions of the new function.
-     * @param {number} [ary] The arity cap of `func`.
-     * @param {number} [arity] The arity of `func`.
-     * @returns {Function} Returns the new wrapped function.
-     */
-    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {
-      var isCurry = bitmask & WRAP_CURRY_FLAG,
-          newHolders = isCurry ? holders : undefined,
-          newHoldersRight = isCurry ? undefined : holders,
-          newPartials = isCurry ? partials : undefined,
-          newPartialsRight = isCurry ? undefined : partials;
-
-      bitmask |= (isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG);
-      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);
-
-      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {
-        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);
-      }
-      var newData = [
-        func, bitmask, thisArg, newPartials, newHolders, newPartialsRight,
-        newHoldersRight, argPos, ary, arity
-      ];
-
-      var result = wrapFunc.apply(undefined, newData);
-      if (isLaziable(func)) {
-        setData(result, newData);
-      }
-      result.placeholder = placeholder;
-      return setWrapToString(result, func, bitmask);
-    }
-
-    /**
-     * Creates a function like `_.round`.
-     *
-     * @private
-     * @param {string} methodName The name of the `Math` method to use when rounding.
-     * @returns {Function} Returns the new round function.
-     */
-    function createRound(methodName) {
-      var func = Math[methodName];
-      return function(number, precision) {
-        number = toNumber(number);
-        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);
-        if (precision && nativeIsFinite(number)) {
-          // Shift with exponential notation to avoid floating-point issues.
-          // See [MDN](https://mdn.io/round#Examples) for more details.
-          var pair = (toString(number) + 'e').split('e'),
-              value = func(pair[0] + 'e' + (+pair[1] + precision));
-
-          pair = (toString(value) + 'e').split('e');
-          return +(pair[0] + 'e' + (+pair[1] - precision));
-        }
-        return func(number);
-      };
-    }
-
-    /**
-     * Creates a set object of `values`.
-     *
-     * @private
-     * @param {Array} values The values to add to the set.
-     * @returns {Object} Returns the new set.
-     */
-    var createSet = !(Set && (1 / setToArray(new Set([,-0]))[1]) == INFINITY) ? noop : function(values) {
-      return new Set(values);
-    };
-
-    /**
-     * Creates a `_.toPairs` or `_.toPairsIn` function.
-     *
-     * @private
-     * @param {Function} keysFunc The function to get the keys of a given object.
-     * @returns {Function} Returns the new pairs function.
-     */
-    function createToPairs(keysFunc) {
-      return function(object) {
-        var tag = getTag(object);
-        if (tag == mapTag) {
-          return mapToArray(object);
-        }
-        if (tag == setTag) {
-          return setToPairs(object);
-        }
-        return baseToPairs(object, keysFunc(object));
-      };
-    }
-
-    /**
-     * Creates a function that either curries or invokes `func` with optional
-     * `this` binding and partially applied arguments.
-     *
-     * @private
-     * @param {Function|string} func The function or method name to wrap.
-     * @param {number} bitmask The bitmask flags.
-     *    1 - `_.bind`
-     *    2 - `_.bindKey`
-     *    4 - `_.curry` or `_.curryRight` of a bound function
-     *    8 - `_.curry`
-     *   16 - `_.curryRight`
-     *   32 - `_.partial`
-     *   64 - `_.partialRight`
-     *  128 - `_.rearg`
-     *  256 - `_.ary`
-     *  512 - `_.flip`
-     * @param {*} [thisArg] The `this` binding of `func`.
-     * @param {Array} [partials] The arguments to be partially applied.
-     * @param {Array} [holders] The `partials` placeholder indexes.
-     * @param {Array} [argPos] The argument positions of the new function.
-     * @param {number} [ary] The arity cap of `func`.
-     * @param {number} [arity] The arity of `func`.
-     * @returns {Function} Returns the new wrapped function.
-     */
-    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {
-      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;
-      if (!isBindKey && typeof func != 'function') {
-        throw new TypeError(FUNC_ERROR_TEXT);
-      }
-      var length = partials ? partials.length : 0;
-      if (!length) {
-        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);
-        partials = holders = undefined;
-      }
-      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);
-      arity = arity === undefined ? arity : toInteger(arity);
-      length -= holders ? holders.length : 0;
-
-      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {
-        var partialsRight = partials,
-            holdersRight = holders;
-
-        partials = holders = undefined;
-      }
-      var data = isBindKey ? undefined : getData(func);
-
-      var newData = [
-        func, bitmask, thisArg, partials, holders, partialsRight, holdersRight,
-        argPos, ary, arity
-      ];
-
-      if (data) {
-        mergeData(newData, data);
-      }
-      func = newData[0];
-      bitmask = newData[1];
-      thisArg = newData[2];
-      partials = newData[3];
-      holders = newData[4];
-      arity = newData[9] = newData[9] === undefined
-        ? (isBindKey ? 0 : func.length)
-        : nativeMax(newData[9] - length, 0);
-
-      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {
-        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);
-      }
-      if (!bitmask || bitmask == WRAP_BIND_FLAG) {
-        var result = createBind(func, bitmask, thisArg);
-      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {
-        result = createCurry(func, bitmask, arity);
-      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {
-        result = createPartial(func, bitmask, thisArg, partials);
-      } else {
-        result = createHybrid.apply(undefined, newData);
-      }
-      var setter = data ? baseSetData : setData;
-      return setWrapToString(setter(result, newData), func, bitmask);
-    }
-
-    /**
-     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties
-     * of source objects to the destination object for all destination properties
-     * that resolve to `undefined`.
-     *
-     * @private
-     * @param {*} objValue The destination value.
-     * @param {*} srcValue The source value.
-     * @param {string} key The key of the property to assign.
-     * @param {Object} object The parent object of `objValue`.
-     * @returns {*} Returns the value to assign.
-     */
-    function customDefaultsAssignIn(objValue, srcValue, key, object) {
-      if (objValue === undefined ||
-          (eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key))) {
-        return srcValue;
-      }
-      return objValue;
-    }
-
-    /**
-     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source
-     * objects into destination objects that are passed thru.
-     *
-     * @private
-     * @param {*} objValue The destination value.
-     * @param {*} srcValue The source value.
-     * @param {string} key The key of the property to merge.
-     * @param {Object} object The parent object of `objValue`.
-     * @param {Object} source The parent object of `srcValue`.
-     * @param {Object} [stack] Tracks traversed source values and their merged
-     *  counterparts.
-     * @returns {*} Returns the value to assign.
-     */
-    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {
-      if (isObject(objValue) && isObject(srcValue)) {
-        // Recursively merge objects and arrays (susceptible to call stack limits).
-        stack.set(srcValue, objValue);
-        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);
-        stack['delete'](srcValue);
-      }
-      return objValue;
-    }
-
-    /**
-     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain
-     * objects.
-     *
-     * @private
-     * @param {*} value The value to inspect.
-     * @param {string} key The key of the property to inspect.
-     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.
-     */
-    function customOmitClone(value) {
-      return isPlainObject(value) ? undefined : value;
-    }
-
-    /**
-     * A specialized version of `baseIsEqualDeep` for arrays with support for
-     * partial deep comparisons.
-     *
-     * @private
-     * @param {Array} array The array to compare.
-     * @param {Array} other The other array to compare.
-     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
-     * @param {Function} customizer The function to customize comparisons.
-     * @param {Function} equalFunc The function to determine equivalents of values.
-     * @param {Object} stack Tracks traversed `array` and `other` objects.
-     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
-     */
-    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
-      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
-          arrLength = array.length,
-          othLength = other.length;
-
-      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
-        return false;
-      }
-      // Check that cyclic values are equal.
-      var arrStacked = stack.get(array);
-      var othStacked = stack.get(other);
-      if (arrStacked && othStacked) {
-        return arrStacked == other && othStacked == array;
-      }
-      var index = -1,
-          result = true,
-          seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new SetCache : undefined;
-
-      stack.set(array, other);
-      stack.set(other, array);
-
-      // Ignore non-index properties.
-      while (++index < arrLength) {
-        var arrValue = array[index],
-            othValue = other[index];
-
-        if (customizer) {
-          var compared = isPartial
-            ? customizer(othValue, arrValue, index, other, array, stack)
-            : customizer(arrValue, othValue, index, array, other, stack);
-        }
-        if (compared !== undefined) {
-          if (compared) {
-            continue;
-          }
-          result = false;
-          break;
-        }
-        // Recursively compare arrays (susceptible to call stack limits).
-        if (seen) {
-          if (!arraySome(other, function(othValue, othIndex) {
-                if (!cacheHas(seen, othIndex) &&
-                    (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
-                  return seen.push(othIndex);
-                }
-              })) {
-            result = false;
-            break;
-          }
-        } else if (!(
-              arrValue === othValue ||
-                equalFunc(arrValue, othValue, bitmask, customizer, stack)
-            )) {
-          result = false;
-          break;
-        }
-      }
-      stack['delete'](array);
-      stack['delete'](other);
-      return result;
-    }
-
-    /**
-     * A specialized version of `baseIsEqualDeep` for comparing objects of
-     * the same `toStringTag`.
-     *
-     * **Note:** This function only supports comparing values with tags of
-     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
-     *
-     * @private
-     * @param {Object} object The object to compare.
-     * @param {Object} other The other object to compare.
-     * @param {string} tag The `toStringTag` of the objects to compare.
-     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
-     * @param {Function} customizer The function to customize comparisons.
-     * @param {Function} equalFunc The function to determine equivalents of values.
-     * @param {Object} stack Tracks traversed `object` and `other` objects.
-     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
-     */
-    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
-      switch (tag) {
-        case dataViewTag:
-          if ((object.byteLength != other.byteLength) ||
-              (object.byteOffset != other.byteOffset)) {
-            return false;
-          }
-          object = object.buffer;
-          other = other.buffer;
-
-        case arrayBufferTag:
-          if ((object.byteLength != other.byteLength) ||
-              !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
-            return false;
-          }
-          return true;
-
-        case boolTag:
-        case dateTag:
-        case numberTag:
-          // Coerce booleans to `1` or `0` and dates to milliseconds.
-          // Invalid dates are coerced to `NaN`.
-          return eq(+object, +other);
-
-        case errorTag:
-          return object.name == other.name && object.message == other.message;
-
-        case regexpTag:
-        case stringTag:
-          // Coerce regexes to strings and treat strings, primitives and objects,
-          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
-          // for more details.
-          return object == (other + '');
-
-        case mapTag:
-          var convert = mapToArray;
-
-        case setTag:
-          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;
-          convert || (convert = setToArray);
-
-          if (object.size != other.size && !isPartial) {
-            return false;
-          }
-          // Assume cyclic values are equal.
-          var stacked = stack.get(object);
-          if (stacked) {
-            return stacked == other;
-          }
-          bitmask |= COMPARE_UNORDERED_FLAG;
-
-          // Recursively compare objects (susceptible to call stack limits).
-          stack.set(object, other);
-          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
-          stack['delete'](object);
-          return result;
-
-        case symbolTag:
-          if (symbolValueOf) {
-            return symbolValueOf.call(object) == symbolValueOf.call(other);
-          }
-      }
-      return false;
-    }
-
-    /**
-     * A specialized version of `baseIsEqualDeep` for objects with support for
-     * partial deep comparisons.
-     *
-     * @private
-     * @param {Object} object The object to compare.
-     * @param {Object} other The other object to compare.
-     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
-     * @param {Function} customizer The function to customize comparisons.
-     * @param {Function} equalFunc The function to determine equivalents of values.
-     * @param {Object} stack Tracks traversed `object` and `other` objects.
-     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
-     */
-    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
-      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
-          objProps = getAllKeys(object),
-          objLength = objProps.length,
-          othProps = getAllKeys(other),
-          othLength = othProps.length;
-
-      if (objLength != othLength && !isPartial) {
-        return false;
-      }
-      var index = objLength;
-      while (index--) {
-        var key = objProps[index];
-        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
-          return false;
-        }
-      }
-      // Check that cyclic values are equal.
-      var objStacked = stack.get(object);
-      var othStacked = stack.get(other);
-      if (objStacked && othStacked) {
-        return objStacked == other && othStacked == object;
-      }
-      var result = true;
-      stack.set(object, other);
-      stack.set(other, object);
-
-      var skipCtor = isPartial;
-      while (++index < objLength) {
-        key = objProps[index];
-        var objValue = object[key],
-            othValue = other[key];
-
-        if (customizer) {
-          var compared = isPartial
-            ? customizer(othValue, objValue, key, other, object, stack)
-            : customizer(objValue, othValue, key, object, other, stack);
-        }
-        // Recursively compare objects (susceptible to call stack limits).
-        if (!(compared === undefined
-              ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
-              : compared
-            )) {
-          result = false;
-          break;
-        }
-        skipCtor || (skipCtor = key == 'constructor');
-      }
-      if (result && !skipCtor) {
-        var objCtor = object.constructor,
-            othCtor = other.constructor;
-
-        // Non `Object` object instances with different constructors are not equal.
-        if (objCtor != othCtor &&
-            ('constructor' in object && 'constructor' in other) &&
-            !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
-              typeof othCtor == 'function' && othCtor instanceof othCtor)) {
-          result = false;
-        }
-      }
-      stack['delete'](object);
-      stack['delete'](other);
-      return result;
-    }
-
-    /**
-     * A specialized version of `baseRest` which flattens the rest array.
-     *
-     * @private
-     * @param {Function} func The function to apply a rest parameter to.
-     * @returns {Function} Returns the new function.
-     */
-    function flatRest(func) {
-      return setToString(overRest(func, undefined, flatten), func + '');
-    }
-
-    /**
-     * Creates an array of own enumerable property names and symbols of `object`.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the array of property names and symbols.
-     */
-    function getAllKeys(object) {
-      return baseGetAllKeys(object, keys, getSymbols);
-    }
-
-    /**
-     * Creates an array of own and inherited enumerable property names and
-     * symbols of `object`.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the array of property names and symbols.
-     */
-    function getAllKeysIn(object) {
-      return baseGetAllKeys(object, keysIn, getSymbolsIn);
-    }
-
-    /**
-     * Gets metadata for `func`.
-     *
-     * @private
-     * @param {Function} func The function to query.
-     * @returns {*} Returns the metadata for `func`.
-     */
-    var getData = !metaMap ? noop : function(func) {
-      return metaMap.get(func);
-    };
-
-    /**
-     * Gets the name of `func`.
-     *
-     * @private
-     * @param {Function} func The function to query.
-     * @returns {string} Returns the function name.
-     */
-    function getFuncName(func) {
-      var result = (func.name + ''),
-          array = realNames[result],
-          length = hasOwnProperty.call(realNames, result) ? array.length : 0;
-
-      while (length--) {
-        var data = array[length],
-            otherFunc = data.func;
-        if (otherFunc == null || otherFunc == func) {
-          return data.name;
-        }
-      }
-      return result;
-    }
-
-    /**
-     * Gets the argument placeholder value for `func`.
-     *
-     * @private
-     * @param {Function} func The function to inspect.
-     * @returns {*} Returns the placeholder value.
-     */
-    function getHolder(func) {
-      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;
-      return object.placeholder;
-    }
-
-    /**
-     * Gets the appropriate "iteratee" function. If `_.iteratee` is customized,
-     * this function returns the custom method, otherwise it returns `baseIteratee`.
-     * If arguments are provided, the chosen function is invoked with them and
-     * its result is returned.
-     *
-     * @private
-     * @param {*} [value] The value to convert to an iteratee.
-     * @param {number} [arity] The arity of the created iteratee.
-     * @returns {Function} Returns the chosen function or its result.
-     */
-    function getIteratee() {
-      var result = lodash.iteratee || iteratee;
-      result = result === iteratee ? baseIteratee : result;
-      return arguments.length ? result(arguments[0], arguments[1]) : result;
-    }
-
-    /**
-     * Gets the data for `map`.
-     *
-     * @private
-     * @param {Object} map The map to query.
-     * @param {string} key The reference key.
-     * @returns {*} Returns the map data.
-     */
-    function getMapData(map, key) {
-      var data = map.__data__;
-      return isKeyable(key)
-        ? data[typeof key == 'string' ? 'string' : 'hash']
-        : data.map;
-    }
-
-    /**
-     * Gets the property names, values, and compare flags of `object`.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the match data of `object`.
-     */
-    function getMatchData(object) {
-      var result = keys(object),
-          length = result.length;
-
-      while (length--) {
-        var key = result[length],
-            value = object[key];
-
-        result[length] = [key, value, isStrictComparable(value)];
-      }
-      return result;
-    }
-
-    /**
-     * Gets the native function at `key` of `object`.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @param {string} key The key of the method to get.
-     * @returns {*} Returns the function if it's native, else `undefined`.
-     */
-    function getNative(object, key) {
-      var value = getValue(object, key);
-      return baseIsNative(value) ? value : undefined;
-    }
-
-    /**
-     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
-     *
-     * @private
-     * @param {*} value The value to query.
-     * @returns {string} Returns the raw `toStringTag`.
-     */
-    function getRawTag(value) {
-      var isOwn = hasOwnProperty.call(value, symToStringTag),
-          tag = value[symToStringTag];
-
-      try {
-        value[symToStringTag] = undefined;
-        var unmasked = true;
-      } catch (e) {}
-
-      var result = nativeObjectToString.call(value);
-      if (unmasked) {
-        if (isOwn) {
-          value[symToStringTag] = tag;
-        } else {
-          delete value[symToStringTag];
-        }
-      }
-      return result;
-    }
-
-    /**
-     * Creates an array of the own enumerable symbols of `object`.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the array of symbols.
-     */
-    var getSymbols = !nativeGetSymbols ? stubArray : function(object) {
-      if (object == null) {
-        return [];
-      }
-      object = Object(object);
-      return arrayFilter(nativeGetSymbols(object), function(symbol) {
-        return propertyIsEnumerable.call(object, symbol);
-      });
-    };
-
-    /**
-     * Creates an array of the own and inherited enumerable symbols of `object`.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the array of symbols.
-     */
-    var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {
-      var result = [];
-      while (object) {
-        arrayPush(result, getSymbols(object));
-        object = getPrototype(object);
-      }
-      return result;
-    };
-
-    /**
-     * Gets the `toStringTag` of `value`.
-     *
-     * @private
-     * @param {*} value The value to query.
-     * @returns {string} Returns the `toStringTag`.
-     */
-    var getTag = baseGetTag;
-
-    // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
-    if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
-        (Map && getTag(new Map) != mapTag) ||
-        (Promise && getTag(Promise.resolve()) != promiseTag) ||
-        (Set && getTag(new Set) != setTag) ||
-        (WeakMap && getTag(new WeakMap) != weakMapTag)) {
-      getTag = function(value) {
-        var result = baseGetTag(value),
-            Ctor = result == objectTag ? value.constructor : undefined,
-            ctorString = Ctor ? toSource(Ctor) : '';
-
-        if (ctorString) {
-          switch (ctorString) {
-            case dataViewCtorString: return dataViewTag;
-            case mapCtorString: return mapTag;
-            case promiseCtorString: return promiseTag;
-            case setCtorString: return setTag;
-            case weakMapCtorString: return weakMapTag;
-          }
-        }
-        return result;
-      };
-    }
-
-    /**
-     * Gets the view, applying any `transforms` to the `start` and `end` positions.
-     *
-     * @private
-     * @param {number} start The start of the view.
-     * @param {number} end The end of the view.
-     * @param {Array} transforms The transformations to apply to the view.
-     * @returns {Object} Returns an object containing the `start` and `end`
-     *  positions of the view.
-     */
-    function getView(start, end, transforms) {
-      var index = -1,
-          length = transforms.length;
-
-      while (++index < length) {
-        var data = transforms[index],
-            size = data.size;
-
-        switch (data.type) {
-          case 'drop':      start += size; break;
-          case 'dropRight': end -= size; break;
-          case 'take':      end = nativeMin(end, start + size); break;
-          case 'takeRight': start = nativeMax(start, end - size); break;
-        }
-      }
-      return { 'start': start, 'end': end };
-    }
-
-    /**
-     * Extracts wrapper details from the `source` body comment.
-     *
-     * @private
-     * @param {string} source The source to inspect.
-     * @returns {Array} Returns the wrapper details.
-     */
-    function getWrapDetails(source) {
-      var match = source.match(reWrapDetails);
-      return match ? match[1].split(reSplitDetails) : [];
-    }
-
-    /**
-     * Checks if `path` exists on `object`.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @param {Array|string} path The path to check.
-     * @param {Function} hasFunc The function to check properties.
-     * @returns {boolean} Returns `true` if `path` exists, else `false`.
-     */
-    function hasPath(object, path, hasFunc) {
-      path = castPath(path, object);
-
-      var index = -1,
-          length = path.length,
-          result = false;
-
-      while (++index < length) {
-        var key = toKey(path[index]);
-        if (!(result = object != null && hasFunc(object, key))) {
-          break;
-        }
-        object = object[key];
-      }
-      if (result || ++index != length) {
-        return result;
-      }
-      length = object == null ? 0 : object.length;
-      return !!length && isLength(length) && isIndex(key, length) &&
-        (isArray(object) || isArguments(object));
-    }
-
-    /**
-     * Initializes an array clone.
-     *
-     * @private
-     * @param {Array} array The array to clone.
-     * @returns {Array} Returns the initialized clone.
-     */
-    function initCloneArray(array) {
-      var length = array.length,
-          result = new array.constructor(length);
-
-      // Add properties assigned by `RegExp#exec`.
-      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {
-        result.index = array.index;
-        result.input = array.input;
-      }
-      return result;
-    }
-
-    /**
-     * Initializes an object clone.
-     *
-     * @private
-     * @param {Object} object The object to clone.
-     * @returns {Object} Returns the initialized clone.
-     */
-    function initCloneObject(object) {
-      return (typeof object.constructor == 'function' && !isPrototype(object))
-        ? baseCreate(getPrototype(object))
-        : {};
-    }
-
-    /**
-     * Initializes an object clone based on its `toStringTag`.
-     *
-     * **Note:** This function only supports cloning values with tags of
-     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
-     *
-     * @private
-     * @param {Object} object The object to clone.
-     * @param {string} tag The `toStringTag` of the object to clone.
-     * @param {boolean} [isDeep] Specify a deep clone.
-     * @returns {Object} Returns the initialized clone.
-     */
-    function initCloneByTag(object, tag, isDeep) {
-      var Ctor = object.constructor;
-      switch (tag) {
-        case arrayBufferTag:
-          return cloneArrayBuffer(object);
-
-        case boolTag:
-        case dateTag:
-          return new Ctor(+object);
-
-        case dataViewTag:
-          return cloneDataView(object, isDeep);
-
-        case float32Tag: case float64Tag:
-        case int8Tag: case int16Tag: case int32Tag:
-        case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
-          return cloneTypedArray(object, isDeep);
-
-        case mapTag:
-          return new Ctor;
-
-        case numberTag:
-        case stringTag:
-          return new Ctor(object);
-
-        case regexpTag:
-          return cloneRegExp(object);
-
-        case setTag:
-          return new Ctor;
-
-        case symbolTag:
-          return cloneSymbol(object);
-      }
-    }
-
-    /**
-     * Inserts wrapper `details` in a comment at the top of the `source` body.
-     *
-     * @private
-     * @param {string} source The source to modify.
-     * @returns {Array} details The details to insert.
-     * @returns {string} Returns the modified source.
-     */
-    function insertWrapDetails(source, details) {
-      var length = details.length;
-      if (!length) {
-        return source;
-      }
-      var lastIndex = length - 1;
-      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];
-      details = details.join(length > 2 ? ', ' : ' ');
-      return source.replace(reWrapComment, '{\n/* [wrapped with ' + details + '] */\n');
-    }
-
-    /**
-     * Checks if `value` is a flattenable `arguments` object or array.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
-     */
-    function isFlattenable(value) {
-      return isArray(value) || isArguments(value) ||
-        !!(spreadableSymbol && value && value[spreadableSymbol]);
-    }
-
-    /**
-     * Checks if `value` is a valid array-like index.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
-     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
-     */
-    function isIndex(value, length) {
-      var type = typeof value;
-      length = length == null ? MAX_SAFE_INTEGER : length;
-
-      return !!length &&
-        (type == 'number' ||
-          (type != 'symbol' && reIsUint.test(value))) &&
-            (value > -1 && value % 1 == 0 && value < length);
-    }
-
-    /**
-     * Checks if the given arguments are from an iteratee call.
-     *
-     * @private
-     * @param {*} value The potential iteratee value argument.
-     * @param {*} index The potential iteratee index or key argument.
-     * @param {*} object The potential iteratee object argument.
-     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
-     *  else `false`.
-     */
-    function isIterateeCall(value, index, object) {
-      if (!isObject(object)) {
-        return false;
-      }
-      var type = typeof index;
-      if (type == 'number'
-            ? (isArrayLike(object) && isIndex(index, object.length))
-            : (type == 'string' && index in object)
-          ) {
-        return eq(object[index], value);
-      }
-      return false;
-    }
-
-    /**
-     * Checks if `value` is a property name and not a property path.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @param {Object} [object] The object to query keys on.
-     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
-     */
-    function isKey(value, object) {
-      if (isArray(value)) {
-        return false;
-      }
-      var type = typeof value;
-      if (type == 'number' || type == 'symbol' || type == 'boolean' ||
-          value == null || isSymbol(value)) {
-        return true;
-      }
-      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
-        (object != null && value in Object(object));
-    }
-
-    /**
-     * Checks if `value` is suitable for use as unique object key.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
-     */
-    function isKeyable(value) {
-      var type = typeof value;
-      return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
-        ? (value !== '__proto__')
-        : (value === null);
-    }
-
-    /**
-     * Checks if `func` has a lazy counterpart.
-     *
-     * @private
-     * @param {Function} func The function to check.
-     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,
-     *  else `false`.
-     */
-    function isLaziable(func) {
-      var funcName = getFuncName(func),
-          other = lodash[funcName];
-
-      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {
-        return false;
-      }
-      if (func === other) {
-        return true;
-      }
-      var data = getData(other);
-      return !!data && func === data[0];
-    }
-
-    /**
-     * Checks if `func` has its source masked.
-     *
-     * @private
-     * @param {Function} func The function to check.
-     * @returns {boolean} Returns `true` if `func` is masked, else `false`.
-     */
-    function isMasked(func) {
-      return !!maskSrcKey && (maskSrcKey in func);
-    }
-
-    /**
-     * Checks if `func` is capable of being masked.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.
-     */
-    var isMaskable = coreJsData ? isFunction : stubFalse;
-
-    /**
-     * Checks if `value` is likely a prototype object.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
-     */
-    function isPrototype(value) {
-      var Ctor = value && value.constructor,
-          proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
-
-      return value === proto;
-    }
-
-    /**
-     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
-     *
-     * @private
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` if suitable for strict
-     *  equality comparisons, else `false`.
-     */
-    function isStrictComparable(value) {
-      return value === value && !isObject(value);
-    }
-
-    /**
-     * A specialized version of `matchesProperty` for source values suitable
-     * for strict equality comparisons, i.e. `===`.
-     *
-     * @private
-     * @param {string} key The key of the property to get.
-     * @param {*} srcValue The value to match.
-     * @returns {Function} Returns the new spec function.
-     */
-    function matchesStrictComparable(key, srcValue) {
-      return function(object) {
-        if (object == null) {
-          return false;
-        }
-        return object[key] === srcValue &&
-          (srcValue !== undefined || (key in Object(object)));
-      };
-    }
-
-    /**
-     * A specialized version of `_.memoize` which clears the memoized function's
-     * cache when it exceeds `MAX_MEMOIZE_SIZE`.
-     *
-     * @private
-     * @param {Function} func The function to have its output memoized.
-     * @returns {Function} Returns the new memoized function.
-     */
-    function memoizeCapped(func) {
-      var result = memoize(func, function(key) {
-        if (cache.size === MAX_MEMOIZE_SIZE) {
-          cache.clear();
-        }
-        return key;
-      });
-
-      var cache = result.cache;
-      return result;
-    }
-
-    /**
-     * Merges the function metadata of `source` into `data`.
-     *
-     * Merging metadata reduces the number of wrappers used to invoke a function.
-     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`
-     * may be applied regardless of execution order. Methods like `_.ary` and
-     * `_.rearg` modify function arguments, making the order in which they are
-     * executed important, preventing the merging of metadata. However, we make
-     * an exception for a safe combined case where curried functions have `_.ary`
-     * and or `_.rearg` applied.
-     *
-     * @private
-     * @param {Array} data The destination metadata.
-     * @param {Array} source The source metadata.
-     * @returns {Array} Returns `data`.
-     */
-    function mergeData(data, source) {
-      var bitmask = data[1],
-          srcBitmask = source[1],
-          newBitmask = bitmask | srcBitmask,
-          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);
-
-      var isCombo =
-        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_CURRY_FLAG)) ||
-        ((srcBitmask == WRAP_ARY_FLAG) && (bitmask == WRAP_REARG_FLAG) && (data[7].length <= source[8])) ||
-        ((srcBitmask == (WRAP_ARY_FLAG | WRAP_REARG_FLAG)) && (source[7].length <= source[8]) && (bitmask == WRAP_CURRY_FLAG));
-
-      // Exit early if metadata can't be merged.
-      if (!(isCommon || isCombo)) {
-        return data;
-      }
-      // Use source `thisArg` if available.
-      if (srcBitmask & WRAP_BIND_FLAG) {
-        data[2] = source[2];
-        // Set when currying a bound function.
-        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;
-      }
-      // Compose partial arguments.
-      var value = source[3];
-      if (value) {
-        var partials = data[3];
-        data[3] = partials ? composeArgs(partials, value, source[4]) : value;
-        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];
-      }
-      // Compose partial right arguments.
-      value = source[5];
-      if (value) {
-        partials = data[5];
-        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;
-        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];
-      }
-      // Use source `argPos` if available.
-      value = source[7];
-      if (value) {
-        data[7] = value;
-      }
-      // Use source `ary` if it's smaller.
-      if (srcBitmask & WRAP_ARY_FLAG) {
-        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);
-      }
-      // Use source `arity` if one is not provided.
-      if (data[9] == null) {
-        data[9] = source[9];
-      }
-      // Use source `func` and merge bitmasks.
-      data[0] = source[0];
-      data[1] = newBitmask;
-
-      return data;
-    }
-
-    /**
-     * This function is like
-     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
-     * except that it includes inherited enumerable properties.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the array of property names.
-     */
-    function nativeKeysIn(object) {
-      var result = [];
-      if (object != null) {
-        for (var key in Object(object)) {
-          result.push(key);
-        }
-      }
-      return result;
-    }
-
-    /**
-     * Converts `value` to a string using `Object.prototype.toString`.
-     *
-     * @private
-     * @param {*} value The value to convert.
-     * @returns {string} Returns the converted string.
-     */
-    function objectToString(value) {
-      return nativeObjectToString.call(value);
-    }
-
-    /**
-     * A specialized version of `baseRest` which transforms the rest array.
-     *
-     * @private
-     * @param {Function} func The function to apply a rest parameter to.
-     * @param {number} [start=func.length-1] The start position of the rest parameter.
-     * @param {Function} transform The rest array transform.
-     * @returns {Function} Returns the new function.
-     */
-    function overRest(func, start, transform) {
-      start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
-      return function() {
-        var args = arguments,
-            index = -1,
-            length = nativeMax(args.length - start, 0),
-            array = Array(length);
-
-        while (++index < length) {
-          array[index] = args[start + index];
-        }
-        index = -1;
-        var otherArgs = Array(start + 1);
-        while (++index < start) {
-          otherArgs[index] = args[index];
-        }
-        otherArgs[start] = transform(array);
-        return apply(func, this, otherArgs);
-      };
-    }
-
-    /**
-     * Gets the parent value at `path` of `object`.
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @param {Array} path The path to get the parent value of.
-     * @returns {*} Returns the parent value.
-     */
-    function parent(object, path) {
-      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));
-    }
-
-    /**
-     * Reorder `array` according to the specified indexes where the element at
-     * the first index is assigned as the first element, the element at
-     * the second index is assigned as the second element, and so on.
-     *
-     * @private
-     * @param {Array} array The array to reorder.
-     * @param {Array} indexes The arranged array indexes.
-     * @returns {Array} Returns `array`.
-     */
-    function reorder(array, indexes) {
-      var arrLength = array.length,
-          length = nativeMin(indexes.length, arrLength),
-          oldArray = copyArray(array);
-
-      while (length--) {
-        var index = indexes[length];
-        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;
-      }
-      return array;
-    }
-
-    /**
-     * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
-     *
-     * @private
-     * @param {Object} object The object to query.
-     * @param {string} key The key of the property to get.
-     * @returns {*} Returns the property value.
-     */
-    function safeGet(object, key) {
-      if (key === 'constructor' && typeof object[key] === 'function') {
-        return;
-      }
-
-      if (key == '__proto__') {
-        return;
-      }
-
-      return object[key];
-    }
-
-    /**
-     * Sets metadata for `func`.
-     *
-     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short
-     * period of time, it will trip its breaker and transition to an identity
-     * function to avoid garbage collection pauses in V8. See
-     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)
-     * for more details.
-     *
-     * @private
-     * @param {Function} func The function to associate metadata with.
-     * @param {*} data The metadata.
-     * @returns {Function} Returns `func`.
-     */
-    var setData = shortOut(baseSetData);
-
-    /**
-     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).
-     *
-     * @private
-     * @param {Function} func The function to delay.
-     * @param {number} wait The number of milliseconds to delay invocation.
-     * @returns {number|Object} Returns the timer id or timeout object.
-     */
-    var setTimeout = ctxSetTimeout || function(func, wait) {
-      return root.setTimeout(func, wait);
-    };
-
-    /**
-     * Sets the `toString` method of `func` to return `string`.
-     *
-     * @private
-     * @param {Function} func The function to modify.
-     * @param {Function} string The `toString` result.
-     * @returns {Function} Returns `func`.
-     */
-    var setToString = shortOut(baseSetToString);
-
-    /**
-     * Sets the `toString` method of `wrapper` to mimic the source of `reference`
-     * with wrapper details in a comment at the top of the source body.
-     *
-     * @private
-     * @param {Function} wrapper The function to modify.
-     * @param {Function} reference The reference function.
-     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
-     * @returns {Function} Returns `wrapper`.
-     */
-    function setWrapToString(wrapper, reference, bitmask) {
-      var source = (reference + '');
-      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));
-    }
-
-    /**
-     * Creates a function that'll short out and invoke `identity` instead
-     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
-     * milliseconds.
-     *
-     * @private
-     * @param {Function} func The function to restrict.
-     * @returns {Function} Returns the new shortable function.
-     */
-    function shortOut(func) {
-      var count = 0,
-          lastCalled = 0;
-
-      return function() {
-        var stamp = nativeNow(),
-            remaining = HOT_SPAN - (stamp - lastCalled);
-
-        lastCalled = stamp;
-        if (remaining > 0) {
-          if (++count >= HOT_COUNT) {
-            return arguments[0];
-          }
-        } else {
-          count = 0;
-        }
-        return func.apply(undefined, arguments);
-      };
-    }
-
-    /**
-     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.
-     *
-     * @private
-     * @param {Array} array The array to shuffle.
-     * @param {number} [size=array.length] The size of `array`.
-     * @returns {Array} Returns `array`.
-     */
-    function shuffleSelf(array, size) {
-      var index = -1,
-          length = array.length,
-          lastIndex = length - 1;
-
-      size = size === undefined ? length : size;
-      while (++index < size) {
-        var rand = baseRandom(index, lastIndex),
-            value = array[rand];
-
-        array[rand] = array[index];
-        array[index] = value;
-      }
-      array.length = size;
-      return array;
-    }
-
-    /**
-     * Converts `string` to a property path array.
-     *
-     * @private
-     * @param {string} string The string to convert.
-     * @returns {Array} Returns the property path array.
-     */
-    var stringToPath = memoizeCapped(function(string) {
-      var result = [];
-      if (string.charCodeAt(0) === 46 /* . */) {
-        result.push('');
-      }
-      string.replace(rePropName, function(match, number, quote, subString) {
-        result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
-      });
-      return result;
-    });
-
-    /**
-     * Converts `value` to a string key if it's not a string or symbol.
-     *
-     * @private
-     * @param {*} value The value to inspect.
-     * @returns {string|symbol} Returns the key.
-     */
-    function toKey(value) {
-      if (typeof value == 'string' || isSymbol(value)) {
-        return value;
-      }
-      var result = (value + '');
-      return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-    }
-
-    /**
-     * Converts `func` to its source code.
-     *
-     * @private
-     * @param {Function} func The function to convert.
-     * @returns {string} Returns the source code.
-     */
-    function toSource(func) {
-      if (func != null) {
-        try {
-          return funcToString.call(func);
-        } catch (e) {}
-        try {
-          return (func + '');
-        } catch (e) {}
-      }
-      return '';
-    }
-
-    /**
-     * Updates wrapper `details` based on `bitmask` flags.
-     *
-     * @private
-     * @returns {Array} details The details to modify.
-     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.
-     * @returns {Array} Returns `details`.
-     */
-    function updateWrapDetails(details, bitmask) {
-      arrayEach(wrapFlags, function(pair) {
-        var value = '_.' + pair[0];
-        if ((bitmask & pair[1]) && !arrayIncludes(details, value)) {
-          details.push(value);
-        }
-      });
-      return details.sort();
-    }
-
-    /**
-     * Creates a clone of `wrapper`.
-     *
-     * @private
-     * @param {Object} wrapper The wrapper to clone.
-     * @returns {Object} Returns the cloned wrapper.
-     */
-    function wrapperClone(wrapper) {
-      if (wrapper instanceof LazyWrapper) {
-        return wrapper.clone();
-      }
-      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);
-      result.__actions__ = copyArray(wrapper.__actions__);
-      result.__index__  = wrapper.__index__;
-      result.__values__ = wrapper.__values__;
-      return result;
-    }
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Creates an array of elements split into groups the length of `size`.
-     * If `array` can't be split evenly, the final chunk will be the remaining
-     * elements.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Array
-     * @param {Array} array The array to process.
-     * @param {number} [size=1] The length of each chunk
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {Array} Returns the new array of chunks.
-     * @example
-     *
-     * _.chunk(['a', 'b', 'c', 'd'], 2);
-     * // => [['a', 'b'], ['c', 'd']]
-     *
-     * _.chunk(['a', 'b', 'c', 'd'], 3);
-     * // => [['a', 'b', 'c'], ['d']]
-     */
-    function chunk(array, size, guard) {
-      if ((guard ? isIterateeCall(array, size, guard) : size === undefined)) {
-        size = 1;
-      } else {
-        size = nativeMax(toInteger(size), 0);
-      }
-      var length = array == null ? 0 : array.length;
-      if (!length || size < 1) {
-        return [];
-      }
-      var index = 0,
-          resIndex = 0,
-          result = Array(nativeCeil(length / size));
-
-      while (index < length) {
-        result[resIndex++] = baseSlice(array, index, (index += size));
-      }
-      return result;
-    }
-
-    /**
-     * Creates an array with all falsey values removed. The values `false`, `null`,
-     * `0`, `""`, `undefined`, and `NaN` are falsey.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {Array} array The array to compact.
-     * @returns {Array} Returns the new array of filtered values.
-     * @example
-     *
-     * _.compact([0, 1, false, 2, '', 3]);
-     * // => [1, 2, 3]
-     */
-    function compact(array) {
-      var index = -1,
-          length = array == null ? 0 : array.length,
-          resIndex = 0,
-          result = [];
-
-      while (++index < length) {
-        var value = array[index];
-        if (value) {
-          result[resIndex++] = value;
-        }
-      }
-      return result;
-    }
-
-    /**
-     * Creates a new array concatenating `array` with any additional arrays
-     * and/or values.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to concatenate.
-     * @param {...*} [values] The values to concatenate.
-     * @returns {Array} Returns the new concatenated array.
-     * @example
-     *
-     * var array = [1];
-     * var other = _.concat(array, 2, [3], [[4]]);
-     *
-     * console.log(other);
-     * // => [1, 2, 3, [4]]
-     *
-     * console.log(array);
-     * // => [1]
-     */
-    function concat() {
-      var length = arguments.length;
-      if (!length) {
-        return [];
-      }
-      var args = Array(length - 1),
-          array = arguments[0],
-          index = length;
-
-      while (index--) {
-        args[index - 1] = arguments[index];
-      }
-      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));
-    }
-
-    /**
-     * Creates an array of `array` values not included in the other given arrays
-     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
-     * for equality comparisons. The order and references of result values are
-     * determined by the first array.
-     *
-     * **Note:** Unlike `_.pullAll`, this method returns a new array.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @param {...Array} [values] The values to exclude.
-     * @returns {Array} Returns the new array of filtered values.
-     * @see _.without, _.xor
-     * @example
-     *
-     * _.difference([2, 1], [2, 3]);
-     * // => [1]
-     */
-    var difference = baseRest(function(array, values) {
-      return isArrayLikeObject(array)
-        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true))
-        : [];
-    });
-
-    /**
-     * This method is like `_.difference` except that it accepts `iteratee` which
-     * is invoked for each element of `array` and `values` to generate the criterion
-     * by which they're compared. The order and references of result values are
-     * determined by the first array. The iteratee is invoked with one argument:
-     * (value).
-     *
-     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @param {...Array} [values] The values to exclude.
-     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-     * @returns {Array} Returns the new array of filtered values.
-     * @example
-     *
-     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
-     * // => [1.2]
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
-     * // => [{ 'x': 2 }]
-     */
-    var differenceBy = baseRest(function(array, values) {
-      var iteratee = last(values);
-      if (isArrayLikeObject(iteratee)) {
-        iteratee = undefined;
-      }
-      return isArrayLikeObject(array)
-        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2))
-        : [];
-    });
-
-    /**
-     * This method is like `_.difference` except that it accepts `comparator`
-     * which is invoked to compare elements of `array` to `values`. The order and
-     * references of result values are determined by the first array. The comparator
-     * is invoked with two arguments: (arrVal, othVal).
-     *
-     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @param {...Array} [values] The values to exclude.
-     * @param {Function} [comparator] The comparator invoked per element.
-     * @returns {Array} Returns the new array of filtered values.
-     * @example
-     *
-     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
-     *
-     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
-     * // => [{ 'x': 2, 'y': 1 }]
-     */
-    var differenceWith = baseRest(function(array, values) {
-      var comparator = last(values);
-      if (isArrayLikeObject(comparator)) {
-        comparator = undefined;
-      }
-      return isArrayLikeObject(array)
-        ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator)
-        : [];
-    });
-
-    /**
-     * Creates a slice of `array` with `n` elements dropped from the beginning.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.5.0
-     * @category Array
-     * @param {Array} array The array to query.
-     * @param {number} [n=1] The number of elements to drop.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {Array} Returns the slice of `array`.
-     * @example
-     *
-     * _.drop([1, 2, 3]);
-     * // => [2, 3]
-     *
-     * _.drop([1, 2, 3], 2);
-     * // => [3]
-     *
-     * _.drop([1, 2, 3], 5);
-     * // => []
-     *
-     * _.drop([1, 2, 3], 0);
-     * // => [1, 2, 3]
-     */
-    function drop(array, n, guard) {
-      var length = array == null ? 0 : array.length;
-      if (!length) {
-        return [];
-      }
-      n = (guard || n === undefined) ? 1 : toInteger(n);
-      return baseSlice(array, n < 0 ? 0 : n, length);
-    }
-
-    /**
-     * Creates a slice of `array` with `n` elements dropped from the end.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Array
-     * @param {Array} array The array to query.
-     * @param {number} [n=1] The number of elements to drop.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {Array} Returns the slice of `array`.
-     * @example
-     *
-     * _.dropRight([1, 2, 3]);
-     * // => [1, 2]
-     *
-     * _.dropRight([1, 2, 3], 2);
-     * // => [1]
-     *
-     * _.dropRight([1, 2, 3], 5);
-     * // => []
-     *
-     * _.dropRight([1, 2, 3], 0);
-     * // => [1, 2, 3]
-     */
-    function dropRight(array, n, guard) {
-      var length = array == null ? 0 : array.length;
-      if (!length) {
-        return [];
-      }
-      n = (guard || n === undefined) ? 1 : toInteger(n);
-      n = length - n;
-      return baseSlice(array, 0, n < 0 ? 0 : n);
-    }
-
-    /**
-     * Creates a slice of `array` excluding elements dropped from the end.
-     * Elements are dropped until `predicate` returns falsey. The predicate is
-     * invoked with three arguments: (value, index, array).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Array
-     * @param {Array} array The array to query.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @returns {Array} Returns the slice of `array`.
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'barney',  'active': true },
-     *   { 'user': 'fred',    'active': false },
-     *   { 'user': 'pebbles', 'active': false }
-     * ];
-     *
-     * _.dropRightWhile(users, function(o) { return !o.active; });
-     * // => objects for ['barney']
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });
-     * // => objects for ['barney', 'fred']
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.dropRightWhile(users, ['active', false]);
-     * // => objects for ['barney']
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.dropRightWhile(users, 'active');
-     * // => objects for ['barney', 'fred', 'pebbles']
-     */
-    function dropRightWhile(array, predicate) {
-      return (array && array.length)
-        ? baseWhile(array, getIteratee(predicate, 3), true, true)
-        : [];
-    }
-
-    /**
-     * Creates a slice of `array` excluding elements dropped from the beginning.
-     * Elements are dropped until `predicate` returns falsey. The predicate is
-     * invoked with three arguments: (value, index, array).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Array
-     * @param {Array} array The array to query.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @returns {Array} Returns the slice of `array`.
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'barney',  'active': false },
-     *   { 'user': 'fred',    'active': false },
-     *   { 'user': 'pebbles', 'active': true }
-     * ];
-     *
-     * _.dropWhile(users, function(o) { return !o.active; });
-     * // => objects for ['pebbles']
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.dropWhile(users, { 'user': 'barney', 'active': false });
-     * // => objects for ['fred', 'pebbles']
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.dropWhile(users, ['active', false]);
-     * // => objects for ['pebbles']
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.dropWhile(users, 'active');
-     * // => objects for ['barney', 'fred', 'pebbles']
-     */
-    function dropWhile(array, predicate) {
-      return (array && array.length)
-        ? baseWhile(array, getIteratee(predicate, 3), true)
-        : [];
-    }
-
-    /**
-     * Fills elements of `array` with `value` from `start` up to, but not
-     * including, `end`.
-     *
-     * **Note:** This method mutates `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.2.0
-     * @category Array
-     * @param {Array} array The array to fill.
-     * @param {*} value The value to fill `array` with.
-     * @param {number} [start=0] The start position.
-     * @param {number} [end=array.length] The end position.
-     * @returns {Array} Returns `array`.
-     * @example
-     *
-     * var array = [1, 2, 3];
-     *
-     * _.fill(array, 'a');
-     * console.log(array);
-     * // => ['a', 'a', 'a']
-     *
-     * _.fill(Array(3), 2);
-     * // => [2, 2, 2]
-     *
-     * _.fill([4, 6, 8, 10], '*', 1, 3);
-     * // => [4, '*', '*', 10]
-     */
-    function fill(array, value, start, end) {
-      var length = array == null ? 0 : array.length;
-      if (!length) {
-        return [];
-      }
-      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {
-        start = 0;
-        end = length;
-      }
-      return baseFill(array, value, start, end);
-    }
-
-    /**
-     * This method is like `_.find` except that it returns the index of the first
-     * element `predicate` returns truthy for instead of the element itself.
-     *
-     * @static
-     * @memberOf _
-     * @since 1.1.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @param {number} [fromIndex=0] The index to search from.
-     * @returns {number} Returns the index of the found element, else `-1`.
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'barney',  'active': false },
-     *   { 'user': 'fred',    'active': false },
-     *   { 'user': 'pebbles', 'active': true }
-     * ];
-     *
-     * _.findIndex(users, function(o) { return o.user == 'barney'; });
-     * // => 0
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.findIndex(users, { 'user': 'fred', 'active': false });
-     * // => 1
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.findIndex(users, ['active', false]);
-     * // => 0
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.findIndex(users, 'active');
-     * // => 2
-     */
-    function findIndex(array, predicate, fromIndex) {
-      var length = array == null ? 0 : array.length;
-      if (!length) {
-        return -1;
-      }
-      var index = fromIndex == null ? 0 : toInteger(fromIndex);
-      if (index < 0) {
-        index = nativeMax(length + index, 0);
-      }
-      return baseFindIndex(array, getIteratee(predicate, 3), index);
-    }
-
-    /**
-     * This method is like `_.findIndex` except that it iterates over elements
-     * of `collection` from right to left.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.0.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @param {number} [fromIndex=array.length-1] The index to search from.
-     * @returns {number} Returns the index of the found element, else `-1`.
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'barney',  'active': true },
-     *   { 'user': 'fred',    'active': false },
-     *   { 'user': 'pebbles', 'active': false }
-     * ];
-     *
-     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });
-     * // => 2
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.findLastIndex(users, { 'user': 'barney', 'active': true });
-     * // => 0
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.findLastIndex(users, ['active', false]);
-     * // => 2
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.findLastIndex(users, 'active');
-     * // => 0
-     */
-    function findLastIndex(array, predicate, fromIndex) {
-      var length = array == null ? 0 : array.length;
-      if (!length) {
-        return -1;
-      }
-      var index = length - 1;
-      if (fromIndex !== undefined) {
-        index = toInteger(fromIndex);
-        index = fromIndex < 0
-          ? nativeMax(length + index, 0)
-          : nativeMin(index, length - 1);
-      }
-      return baseFindIndex(array, getIteratee(predicate, 3), index, true);
-    }
-
-    /**
-     * Flattens `array` a single level deep.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {Array} array The array to flatten.
-     * @returns {Array} Returns the new flattened array.
-     * @example
-     *
-     * _.flatten([1, [2, [3, [4]], 5]]);
-     * // => [1, 2, [3, [4]], 5]
-     */
-    function flatten(array) {
-      var length = array == null ? 0 : array.length;
-      return length ? baseFlatten(array, 1) : [];
-    }
-
-    /**
-     * Recursively flattens `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Array
-     * @param {Array} array The array to flatten.
-     * @returns {Array} Returns the new flattened array.
-     * @example
-     *
-     * _.flattenDeep([1, [2, [3, [4]], 5]]);
-     * // => [1, 2, 3, 4, 5]
-     */
-    function flattenDeep(array) {
-      var length = array == null ? 0 : array.length;
-      return length ? baseFlatten(array, INFINITY) : [];
-    }
-
-    /**
-     * Recursively flatten `array` up to `depth` times.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.4.0
-     * @category Array
-     * @param {Array} array The array to flatten.
-     * @param {number} [depth=1] The maximum recursion depth.
-     * @returns {Array} Returns the new flattened array.
-     * @example
-     *
-     * var array = [1, [2, [3, [4]], 5]];
-     *
-     * _.flattenDepth(array, 1);
-     * // => [1, 2, [3, [4]], 5]
-     *
-     * _.flattenDepth(array, 2);
-     * // => [1, 2, 3, [4], 5]
-     */
-    function flattenDepth(array, depth) {
-      var length = array == null ? 0 : array.length;
-      if (!length) {
-        return [];
-      }
-      depth = depth === undefined ? 1 : toInteger(depth);
-      return baseFlatten(array, depth);
-    }
-
-    /**
-     * The inverse of `_.toPairs`; this method returns an object composed
-     * from key-value `pairs`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} pairs The key-value pairs.
-     * @returns {Object} Returns the new object.
-     * @example
-     *
-     * _.fromPairs([['a', 1], ['b', 2]]);
-     * // => { 'a': 1, 'b': 2 }
-     */
-    function fromPairs(pairs) {
-      var index = -1,
-          length = pairs == null ? 0 : pairs.length,
-          result = {};
-
-      while (++index < length) {
-        var pair = pairs[index];
-        result[pair[0]] = pair[1];
-      }
-      return result;
-    }
-
-    /**
-     * Gets the first element of `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @alias first
-     * @category Array
-     * @param {Array} array The array to query.
-     * @returns {*} Returns the first element of `array`.
-     * @example
-     *
-     * _.head([1, 2, 3]);
-     * // => 1
-     *
-     * _.head([]);
-     * // => undefined
-     */
-    function head(array) {
-      return (array && array.length) ? array[0] : undefined;
-    }
-
-    /**
-     * Gets the index at which the first occurrence of `value` is found in `array`
-     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
-     * for equality comparisons. If `fromIndex` is negative, it's used as the
-     * offset from the end of `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @param {*} value The value to search for.
-     * @param {number} [fromIndex=0] The index to search from.
-     * @returns {number} Returns the index of the matched value, else `-1`.
-     * @example
-     *
-     * _.indexOf([1, 2, 1, 2], 2);
-     * // => 1
-     *
-     * // Search from the `fromIndex`.
-     * _.indexOf([1, 2, 1, 2], 2, 2);
-     * // => 3
-     */
-    function indexOf(array, value, fromIndex) {
-      var length = array == null ? 0 : array.length;
-      if (!length) {
-        return -1;
-      }
-      var index = fromIndex == null ? 0 : toInteger(fromIndex);
-      if (index < 0) {
-        index = nativeMax(length + index, 0);
-      }
-      return baseIndexOf(array, value, index);
-    }
-
-    /**
-     * Gets all but the last element of `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {Array} array The array to query.
-     * @returns {Array} Returns the slice of `array`.
-     * @example
-     *
-     * _.initial([1, 2, 3]);
-     * // => [1, 2]
-     */
-    function initial(array) {
-      var length = array == null ? 0 : array.length;
-      return length ? baseSlice(array, 0, -1) : [];
-    }
-
-    /**
-     * Creates an array of unique values that are included in all given arrays
-     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
-     * for equality comparisons. The order and references of result values are
-     * determined by the first array.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {...Array} [arrays] The arrays to inspect.
-     * @returns {Array} Returns the new array of intersecting values.
-     * @example
-     *
-     * _.intersection([2, 1], [2, 3]);
-     * // => [2]
-     */
-    var intersection = baseRest(function(arrays) {
-      var mapped = arrayMap(arrays, castArrayLikeObject);
-      return (mapped.length && mapped[0] === arrays[0])
-        ? baseIntersection(mapped)
-        : [];
-    });
-
-    /**
-     * This method is like `_.intersection` except that it accepts `iteratee`
-     * which is invoked for each element of each `arrays` to generate the criterion
-     * by which they're compared. The order and references of result values are
-     * determined by the first array. The iteratee is invoked with one argument:
-     * (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {...Array} [arrays] The arrays to inspect.
-     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-     * @returns {Array} Returns the new array of intersecting values.
-     * @example
-     *
-     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);
-     * // => [2.1]
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
-     * // => [{ 'x': 1 }]
-     */
-    var intersectionBy = baseRest(function(arrays) {
-      var iteratee = last(arrays),
-          mapped = arrayMap(arrays, castArrayLikeObject);
-
-      if (iteratee === last(mapped)) {
-        iteratee = undefined;
-      } else {
-        mapped.pop();
-      }
-      return (mapped.length && mapped[0] === arrays[0])
-        ? baseIntersection(mapped, getIteratee(iteratee, 2))
-        : [];
-    });
-
-    /**
-     * This method is like `_.intersection` except that it accepts `comparator`
-     * which is invoked to compare elements of `arrays`. The order and references
-     * of result values are determined by the first array. The comparator is
-     * invoked with two arguments: (arrVal, othVal).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {...Array} [arrays] The arrays to inspect.
-     * @param {Function} [comparator] The comparator invoked per element.
-     * @returns {Array} Returns the new array of intersecting values.
-     * @example
-     *
-     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
-     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
-     *
-     * _.intersectionWith(objects, others, _.isEqual);
-     * // => [{ 'x': 1, 'y': 2 }]
-     */
-    var intersectionWith = baseRest(function(arrays) {
-      var comparator = last(arrays),
-          mapped = arrayMap(arrays, castArrayLikeObject);
-
-      comparator = typeof comparator == 'function' ? comparator : undefined;
-      if (comparator) {
-        mapped.pop();
-      }
-      return (mapped.length && mapped[0] === arrays[0])
-        ? baseIntersection(mapped, undefined, comparator)
-        : [];
-    });
-
-    /**
-     * Converts all elements in `array` into a string separated by `separator`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to convert.
-     * @param {string} [separator=','] The element separator.
-     * @returns {string} Returns the joined string.
-     * @example
-     *
-     * _.join(['a', 'b', 'c'], '~');
-     * // => 'a~b~c'
-     */
-    function join(array, separator) {
-      return array == null ? '' : nativeJoin.call(array, separator);
-    }
-
-    /**
-     * Gets the last element of `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {Array} array The array to query.
-     * @returns {*} Returns the last element of `array`.
-     * @example
-     *
-     * _.last([1, 2, 3]);
-     * // => 3
-     */
-    function last(array) {
-      var length = array == null ? 0 : array.length;
-      return length ? array[length - 1] : undefined;
-    }
-
-    /**
-     * This method is like `_.indexOf` except that it iterates over elements of
-     * `array` from right to left.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @param {*} value The value to search for.
-     * @param {number} [fromIndex=array.length-1] The index to search from.
-     * @returns {number} Returns the index of the matched value, else `-1`.
-     * @example
-     *
-     * _.lastIndexOf([1, 2, 1, 2], 2);
-     * // => 3
-     *
-     * // Search from the `fromIndex`.
-     * _.lastIndexOf([1, 2, 1, 2], 2, 2);
-     * // => 1
-     */
-    function lastIndexOf(array, value, fromIndex) {
-      var length = array == null ? 0 : array.length;
-      if (!length) {
-        return -1;
-      }
-      var index = length;
-      if (fromIndex !== undefined) {
-        index = toInteger(fromIndex);
-        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);
-      }
-      return value === value
-        ? strictLastIndexOf(array, value, index)
-        : baseFindIndex(array, baseIsNaN, index, true);
-    }
-
-    /**
-     * Gets the element at index `n` of `array`. If `n` is negative, the nth
-     * element from the end is returned.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.11.0
-     * @category Array
-     * @param {Array} array The array to query.
-     * @param {number} [n=0] The index of the element to return.
-     * @returns {*} Returns the nth element of `array`.
-     * @example
-     *
-     * var array = ['a', 'b', 'c', 'd'];
-     *
-     * _.nth(array, 1);
-     * // => 'b'
-     *
-     * _.nth(array, -2);
-     * // => 'c';
-     */
-    function nth(array, n) {
-      return (array && array.length) ? baseNth(array, toInteger(n)) : undefined;
-    }
-
-    /**
-     * Removes all given values from `array` using
-     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
-     * for equality comparisons.
-     *
-     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`
-     * to remove elements from an array by predicate.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.0.0
-     * @category Array
-     * @param {Array} array The array to modify.
-     * @param {...*} [values] The values to remove.
-     * @returns {Array} Returns `array`.
-     * @example
-     *
-     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
-     *
-     * _.pull(array, 'a', 'c');
-     * console.log(array);
-     * // => ['b', 'b']
-     */
-    var pull = baseRest(pullAll);
-
-    /**
-     * This method is like `_.pull` except that it accepts an array of values to remove.
-     *
-     * **Note:** Unlike `_.difference`, this method mutates `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to modify.
-     * @param {Array} values The values to remove.
-     * @returns {Array} Returns `array`.
-     * @example
-     *
-     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];
-     *
-     * _.pullAll(array, ['a', 'c']);
-     * console.log(array);
-     * // => ['b', 'b']
-     */
-    function pullAll(array, values) {
-      return (array && array.length && values && values.length)
-        ? basePullAll(array, values)
-        : array;
-    }
-
-    /**
-     * This method is like `_.pullAll` except that it accepts `iteratee` which is
-     * invoked for each element of `array` and `values` to generate the criterion
-     * by which they're compared. The iteratee is invoked with one argument: (value).
-     *
-     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to modify.
-     * @param {Array} values The values to remove.
-     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-     * @returns {Array} Returns `array`.
-     * @example
-     *
-     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];
-     *
-     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');
-     * console.log(array);
-     * // => [{ 'x': 2 }]
-     */
-    function pullAllBy(array, values, iteratee) {
-      return (array && array.length && values && values.length)
-        ? basePullAll(array, values, getIteratee(iteratee, 2))
-        : array;
-    }
-
-    /**
-     * This method is like `_.pullAll` except that it accepts `comparator` which
-     * is invoked to compare elements of `array` to `values`. The comparator is
-     * invoked with two arguments: (arrVal, othVal).
-     *
-     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.6.0
-     * @category Array
-     * @param {Array} array The array to modify.
-     * @param {Array} values The values to remove.
-     * @param {Function} [comparator] The comparator invoked per element.
-     * @returns {Array} Returns `array`.
-     * @example
-     *
-     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];
-     *
-     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);
-     * console.log(array);
-     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]
-     */
-    function pullAllWith(array, values, comparator) {
-      return (array && array.length && values && values.length)
-        ? basePullAll(array, values, undefined, comparator)
-        : array;
-    }
-
-    /**
-     * Removes elements from `array` corresponding to `indexes` and returns an
-     * array of removed elements.
-     *
-     * **Note:** Unlike `_.at`, this method mutates `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Array
-     * @param {Array} array The array to modify.
-     * @param {...(number|number[])} [indexes] The indexes of elements to remove.
-     * @returns {Array} Returns the new array of removed elements.
-     * @example
-     *
-     * var array = ['a', 'b', 'c', 'd'];
-     * var pulled = _.pullAt(array, [1, 3]);
-     *
-     * console.log(array);
-     * // => ['a', 'c']
-     *
-     * console.log(pulled);
-     * // => ['b', 'd']
-     */
-    var pullAt = flatRest(function(array, indexes) {
-      var length = array == null ? 0 : array.length,
-          result = baseAt(array, indexes);
-
-      basePullAt(array, arrayMap(indexes, function(index) {
-        return isIndex(index, length) ? +index : index;
-      }).sort(compareAscending));
-
-      return result;
-    });
-
-    /**
-     * Removes all elements from `array` that `predicate` returns truthy for
-     * and returns an array of the removed elements. The predicate is invoked
-     * with three arguments: (value, index, array).
-     *
-     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
-     * to pull elements from an array by value.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.0.0
-     * @category Array
-     * @param {Array} array The array to modify.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @returns {Array} Returns the new array of removed elements.
-     * @example
-     *
-     * var array = [1, 2, 3, 4];
-     * var evens = _.remove(array, function(n) {
-     *   return n % 2 == 0;
-     * });
-     *
-     * console.log(array);
-     * // => [1, 3]
-     *
-     * console.log(evens);
-     * // => [2, 4]
-     */
-    function remove(array, predicate) {
-      var result = [];
-      if (!(array && array.length)) {
-        return result;
-      }
-      var index = -1,
-          indexes = [],
-          length = array.length;
-
-      predicate = getIteratee(predicate, 3);
-      while (++index < length) {
-        var value = array[index];
-        if (predicate(value, index, array)) {
-          result.push(value);
-          indexes.push(index);
-        }
-      }
-      basePullAt(array, indexes);
-      return result;
-    }
-
-    /**
-     * Reverses `array` so that the first element becomes the last, the second
-     * element becomes the second to last, and so on.
-     *
-     * **Note:** This method mutates `array` and is based on
-     * [`Array#reverse`](https://mdn.io/Array/reverse).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to modify.
-     * @returns {Array} Returns `array`.
-     * @example
-     *
-     * var array = [1, 2, 3];
-     *
-     * _.reverse(array);
-     * // => [3, 2, 1]
-     *
-     * console.log(array);
-     * // => [3, 2, 1]
-     */
-    function reverse(array) {
-      return array == null ? array : nativeReverse.call(array);
-    }
-
-    /**
-     * Creates a slice of `array` from `start` up to, but not including, `end`.
-     *
-     * **Note:** This method is used instead of
-     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are
-     * returned.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Array
-     * @param {Array} array The array to slice.
-     * @param {number} [start=0] The start position.
-     * @param {number} [end=array.length] The end position.
-     * @returns {Array} Returns the slice of `array`.
-     */
-    function slice(array, start, end) {
-      var length = array == null ? 0 : array.length;
-      if (!length) {
-        return [];
-      }
-      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {
-        start = 0;
-        end = length;
-      }
-      else {
-        start = start == null ? 0 : toInteger(start);
-        end = end === undefined ? length : toInteger(end);
-      }
-      return baseSlice(array, start, end);
-    }
-
-    /**
-     * Uses a binary search to determine the lowest index at which `value`
-     * should be inserted into `array` in order to maintain its sort order.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {Array} array The sorted array to inspect.
-     * @param {*} value The value to evaluate.
-     * @returns {number} Returns the index at which `value` should be inserted
-     *  into `array`.
-     * @example
-     *
-     * _.sortedIndex([30, 50], 40);
-     * // => 1
-     */
-    function sortedIndex(array, value) {
-      return baseSortedIndex(array, value);
-    }
-
-    /**
-     * This method is like `_.sortedIndex` except that it accepts `iteratee`
-     * which is invoked for `value` and each element of `array` to compute their
-     * sort ranking. The iteratee is invoked with one argument: (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The sorted array to inspect.
-     * @param {*} value The value to evaluate.
-     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-     * @returns {number} Returns the index at which `value` should be inserted
-     *  into `array`.
-     * @example
-     *
-     * var objects = [{ 'x': 4 }, { 'x': 5 }];
-     *
-     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
-     * // => 0
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');
-     * // => 0
-     */
-    function sortedIndexBy(array, value, iteratee) {
-      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));
-    }
-
-    /**
-     * This method is like `_.indexOf` except that it performs a binary
-     * search on a sorted `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @param {*} value The value to search for.
-     * @returns {number} Returns the index of the matched value, else `-1`.
-     * @example
-     *
-     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);
-     * // => 1
-     */
-    function sortedIndexOf(array, value) {
-      var length = array == null ? 0 : array.length;
-      if (length) {
-        var index = baseSortedIndex(array, value);
-        if (index < length && eq(array[index], value)) {
-          return index;
-        }
-      }
-      return -1;
-    }
-
-    /**
-     * This method is like `_.sortedIndex` except that it returns the highest
-     * index at which `value` should be inserted into `array` in order to
-     * maintain its sort order.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Array
-     * @param {Array} array The sorted array to inspect.
-     * @param {*} value The value to evaluate.
-     * @returns {number} Returns the index at which `value` should be inserted
-     *  into `array`.
-     * @example
-     *
-     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);
-     * // => 4
-     */
-    function sortedLastIndex(array, value) {
-      return baseSortedIndex(array, value, true);
-    }
-
-    /**
-     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`
-     * which is invoked for `value` and each element of `array` to compute their
-     * sort ranking. The iteratee is invoked with one argument: (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The sorted array to inspect.
-     * @param {*} value The value to evaluate.
-     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-     * @returns {number} Returns the index at which `value` should be inserted
-     *  into `array`.
-     * @example
-     *
-     * var objects = [{ 'x': 4 }, { 'x': 5 }];
-     *
-     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });
-     * // => 1
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');
-     * // => 1
-     */
-    function sortedLastIndexBy(array, value, iteratee) {
-      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);
-    }
-
-    /**
-     * This method is like `_.lastIndexOf` except that it performs a binary
-     * search on a sorted `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @param {*} value The value to search for.
-     * @returns {number} Returns the index of the matched value, else `-1`.
-     * @example
-     *
-     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);
-     * // => 3
-     */
-    function sortedLastIndexOf(array, value) {
-      var length = array == null ? 0 : array.length;
-      if (length) {
-        var index = baseSortedIndex(array, value, true) - 1;
-        if (eq(array[index], value)) {
-          return index;
-        }
-      }
-      return -1;
-    }
-
-    /**
-     * This method is like `_.uniq` except that it's designed and optimized
-     * for sorted arrays.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @returns {Array} Returns the new duplicate free array.
-     * @example
-     *
-     * _.sortedUniq([1, 1, 2]);
-     * // => [1, 2]
-     */
-    function sortedUniq(array) {
-      return (array && array.length)
-        ? baseSortedUniq(array)
-        : [];
-    }
-
-    /**
-     * This method is like `_.uniqBy` except that it's designed and optimized
-     * for sorted arrays.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @param {Function} [iteratee] The iteratee invoked per element.
-     * @returns {Array} Returns the new duplicate free array.
-     * @example
-     *
-     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);
-     * // => [1.1, 2.3]
-     */
-    function sortedUniqBy(array, iteratee) {
-      return (array && array.length)
-        ? baseSortedUniq(array, getIteratee(iteratee, 2))
-        : [];
-    }
-
-    /**
-     * Gets all but the first element of `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to query.
-     * @returns {Array} Returns the slice of `array`.
-     * @example
-     *
-     * _.tail([1, 2, 3]);
-     * // => [2, 3]
-     */
-    function tail(array) {
-      var length = array == null ? 0 : array.length;
-      return length ? baseSlice(array, 1, length) : [];
-    }
-
-    /**
-     * Creates a slice of `array` with `n` elements taken from the beginning.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {Array} array The array to query.
-     * @param {number} [n=1] The number of elements to take.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {Array} Returns the slice of `array`.
-     * @example
-     *
-     * _.take([1, 2, 3]);
-     * // => [1]
-     *
-     * _.take([1, 2, 3], 2);
-     * // => [1, 2]
-     *
-     * _.take([1, 2, 3], 5);
-     * // => [1, 2, 3]
-     *
-     * _.take([1, 2, 3], 0);
-     * // => []
-     */
-    function take(array, n, guard) {
-      if (!(array && array.length)) {
-        return [];
-      }
-      n = (guard || n === undefined) ? 1 : toInteger(n);
-      return baseSlice(array, 0, n < 0 ? 0 : n);
-    }
-
-    /**
-     * Creates a slice of `array` with `n` elements taken from the end.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Array
-     * @param {Array} array The array to query.
-     * @param {number} [n=1] The number of elements to take.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {Array} Returns the slice of `array`.
-     * @example
-     *
-     * _.takeRight([1, 2, 3]);
-     * // => [3]
-     *
-     * _.takeRight([1, 2, 3], 2);
-     * // => [2, 3]
-     *
-     * _.takeRight([1, 2, 3], 5);
-     * // => [1, 2, 3]
-     *
-     * _.takeRight([1, 2, 3], 0);
-     * // => []
-     */
-    function takeRight(array, n, guard) {
-      var length = array == null ? 0 : array.length;
-      if (!length) {
-        return [];
-      }
-      n = (guard || n === undefined) ? 1 : toInteger(n);
-      n = length - n;
-      return baseSlice(array, n < 0 ? 0 : n, length);
-    }
-
-    /**
-     * Creates a slice of `array` with elements taken from the end. Elements are
-     * taken until `predicate` returns falsey. The predicate is invoked with
-     * three arguments: (value, index, array).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Array
-     * @param {Array} array The array to query.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @returns {Array} Returns the slice of `array`.
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'barney',  'active': true },
-     *   { 'user': 'fred',    'active': false },
-     *   { 'user': 'pebbles', 'active': false }
-     * ];
-     *
-     * _.takeRightWhile(users, function(o) { return !o.active; });
-     * // => objects for ['fred', 'pebbles']
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });
-     * // => objects for ['pebbles']
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.takeRightWhile(users, ['active', false]);
-     * // => objects for ['fred', 'pebbles']
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.takeRightWhile(users, 'active');
-     * // => []
-     */
-    function takeRightWhile(array, predicate) {
-      return (array && array.length)
-        ? baseWhile(array, getIteratee(predicate, 3), false, true)
-        : [];
-    }
-
-    /**
-     * Creates a slice of `array` with elements taken from the beginning. Elements
-     * are taken until `predicate` returns falsey. The predicate is invoked with
-     * three arguments: (value, index, array).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Array
-     * @param {Array} array The array to query.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @returns {Array} Returns the slice of `array`.
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'barney',  'active': false },
-     *   { 'user': 'fred',    'active': false },
-     *   { 'user': 'pebbles', 'active': true }
-     * ];
-     *
-     * _.takeWhile(users, function(o) { return !o.active; });
-     * // => objects for ['barney', 'fred']
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.takeWhile(users, { 'user': 'barney', 'active': false });
-     * // => objects for ['barney']
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.takeWhile(users, ['active', false]);
-     * // => objects for ['barney', 'fred']
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.takeWhile(users, 'active');
-     * // => []
-     */
-    function takeWhile(array, predicate) {
-      return (array && array.length)
-        ? baseWhile(array, getIteratee(predicate, 3))
-        : [];
-    }
-
-    /**
-     * Creates an array of unique values, in order, from all given arrays using
-     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
-     * for equality comparisons.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {...Array} [arrays] The arrays to inspect.
-     * @returns {Array} Returns the new array of combined values.
-     * @example
-     *
-     * _.union([2], [1, 2]);
-     * // => [2, 1]
-     */
-    var union = baseRest(function(arrays) {
-      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));
-    });
-
-    /**
-     * This method is like `_.union` except that it accepts `iteratee` which is
-     * invoked for each element of each `arrays` to generate the criterion by
-     * which uniqueness is computed. Result values are chosen from the first
-     * array in which the value occurs. The iteratee is invoked with one argument:
-     * (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {...Array} [arrays] The arrays to inspect.
-     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-     * @returns {Array} Returns the new array of combined values.
-     * @example
-     *
-     * _.unionBy([2.1], [1.2, 2.3], Math.floor);
-     * // => [2.1, 1.2]
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
-     * // => [{ 'x': 1 }, { 'x': 2 }]
-     */
-    var unionBy = baseRest(function(arrays) {
-      var iteratee = last(arrays);
-      if (isArrayLikeObject(iteratee)) {
-        iteratee = undefined;
-      }
-      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));
-    });
-
-    /**
-     * This method is like `_.union` except that it accepts `comparator` which
-     * is invoked to compare elements of `arrays`. Result values are chosen from
-     * the first array in which the value occurs. The comparator is invoked
-     * with two arguments: (arrVal, othVal).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {...Array} [arrays] The arrays to inspect.
-     * @param {Function} [comparator] The comparator invoked per element.
-     * @returns {Array} Returns the new array of combined values.
-     * @example
-     *
-     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
-     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
-     *
-     * _.unionWith(objects, others, _.isEqual);
-     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
-     */
-    var unionWith = baseRest(function(arrays) {
-      var comparator = last(arrays);
-      comparator = typeof comparator == 'function' ? comparator : undefined;
-      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);
-    });
-
-    /**
-     * Creates a duplicate-free version of an array, using
-     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
-     * for equality comparisons, in which only the first occurrence of each element
-     * is kept. The order of result values is determined by the order they occur
-     * in the array.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @returns {Array} Returns the new duplicate free array.
-     * @example
-     *
-     * _.uniq([2, 1, 2]);
-     * // => [2, 1]
-     */
-    function uniq(array) {
-      return (array && array.length) ? baseUniq(array) : [];
-    }
-
-    /**
-     * This method is like `_.uniq` except that it accepts `iteratee` which is
-     * invoked for each element in `array` to generate the criterion by which
-     * uniqueness is computed. The order of result values is determined by the
-     * order they occur in the array. The iteratee is invoked with one argument:
-     * (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-     * @returns {Array} Returns the new duplicate free array.
-     * @example
-     *
-     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);
-     * // => [2.1, 1.2]
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');
-     * // => [{ 'x': 1 }, { 'x': 2 }]
-     */
-    function uniqBy(array, iteratee) {
-      return (array && array.length) ? baseUniq(array, getIteratee(iteratee, 2)) : [];
-    }
-
-    /**
-     * This method is like `_.uniq` except that it accepts `comparator` which
-     * is invoked to compare elements of `array`. The order of result values is
-     * determined by the order they occur in the array.The comparator is invoked
-     * with two arguments: (arrVal, othVal).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @param {Function} [comparator] The comparator invoked per element.
-     * @returns {Array} Returns the new duplicate free array.
-     * @example
-     *
-     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];
-     *
-     * _.uniqWith(objects, _.isEqual);
-     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]
-     */
-    function uniqWith(array, comparator) {
-      comparator = typeof comparator == 'function' ? comparator : undefined;
-      return (array && array.length) ? baseUniq(array, undefined, comparator) : [];
-    }
-
-    /**
-     * This method is like `_.zip` except that it accepts an array of grouped
-     * elements and creates an array regrouping the elements to their pre-zip
-     * configuration.
-     *
-     * @static
-     * @memberOf _
-     * @since 1.2.0
-     * @category Array
-     * @param {Array} array The array of grouped elements to process.
-     * @returns {Array} Returns the new array of regrouped elements.
-     * @example
-     *
-     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);
-     * // => [['a', 1, true], ['b', 2, false]]
-     *
-     * _.unzip(zipped);
-     * // => [['a', 'b'], [1, 2], [true, false]]
-     */
-    function unzip(array) {
-      if (!(array && array.length)) {
-        return [];
-      }
-      var length = 0;
-      array = arrayFilter(array, function(group) {
-        if (isArrayLikeObject(group)) {
-          length = nativeMax(group.length, length);
-          return true;
-        }
-      });
-      return baseTimes(length, function(index) {
-        return arrayMap(array, baseProperty(index));
-      });
-    }
-
-    /**
-     * This method is like `_.unzip` except that it accepts `iteratee` to specify
-     * how regrouped values should be combined. The iteratee is invoked with the
-     * elements of each group: (...group).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.8.0
-     * @category Array
-     * @param {Array} array The array of grouped elements to process.
-     * @param {Function} [iteratee=_.identity] The function to combine
-     *  regrouped values.
-     * @returns {Array} Returns the new array of regrouped elements.
-     * @example
-     *
-     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);
-     * // => [[1, 10, 100], [2, 20, 200]]
-     *
-     * _.unzipWith(zipped, _.add);
-     * // => [3, 30, 300]
-     */
-    function unzipWith(array, iteratee) {
-      if (!(array && array.length)) {
-        return [];
-      }
-      var result = unzip(array);
-      if (iteratee == null) {
-        return result;
-      }
-      return arrayMap(result, function(group) {
-        return apply(iteratee, undefined, group);
-      });
-    }
-
-    /**
-     * Creates an array excluding all given values using
-     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
-     * for equality comparisons.
-     *
-     * **Note:** Unlike `_.pull`, this method returns a new array.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {Array} array The array to inspect.
-     * @param {...*} [values] The values to exclude.
-     * @returns {Array} Returns the new array of filtered values.
-     * @see _.difference, _.xor
-     * @example
-     *
-     * _.without([2, 1, 2, 3], 1, 2);
-     * // => [3]
-     */
-    var without = baseRest(function(array, values) {
-      return isArrayLikeObject(array)
-        ? baseDifference(array, values)
-        : [];
-    });
-
-    /**
-     * Creates an array of unique values that is the
-     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)
-     * of the given arrays. The order of result values is determined by the order
-     * they occur in the arrays.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.4.0
-     * @category Array
-     * @param {...Array} [arrays] The arrays to inspect.
-     * @returns {Array} Returns the new array of filtered values.
-     * @see _.difference, _.without
-     * @example
-     *
-     * _.xor([2, 1], [2, 3]);
-     * // => [1, 3]
-     */
-    var xor = baseRest(function(arrays) {
-      return baseXor(arrayFilter(arrays, isArrayLikeObject));
-    });
-
-    /**
-     * This method is like `_.xor` except that it accepts `iteratee` which is
-     * invoked for each element of each `arrays` to generate the criterion by
-     * which by which they're compared. The order of result values is determined
-     * by the order they occur in the arrays. The iteratee is invoked with one
-     * argument: (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {...Array} [arrays] The arrays to inspect.
-     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-     * @returns {Array} Returns the new array of filtered values.
-     * @example
-     *
-     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);
-     * // => [1.2, 3.4]
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');
-     * // => [{ 'x': 2 }]
-     */
-    var xorBy = baseRest(function(arrays) {
-      var iteratee = last(arrays);
-      if (isArrayLikeObject(iteratee)) {
-        iteratee = undefined;
-      }
-      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));
-    });
-
-    /**
-     * This method is like `_.xor` except that it accepts `comparator` which is
-     * invoked to compare elements of `arrays`. The order of result values is
-     * determined by the order they occur in the arrays. The comparator is invoked
-     * with two arguments: (arrVal, othVal).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Array
-     * @param {...Array} [arrays] The arrays to inspect.
-     * @param {Function} [comparator] The comparator invoked per element.
-     * @returns {Array} Returns the new array of filtered values.
-     * @example
-     *
-     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
-     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];
-     *
-     * _.xorWith(objects, others, _.isEqual);
-     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]
-     */
-    var xorWith = baseRest(function(arrays) {
-      var comparator = last(arrays);
-      comparator = typeof comparator == 'function' ? comparator : undefined;
-      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);
-    });
-
-    /**
-     * Creates an array of grouped elements, the first of which contains the
-     * first elements of the given arrays, the second of which contains the
-     * second elements of the given arrays, and so on.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Array
-     * @param {...Array} [arrays] The arrays to process.
-     * @returns {Array} Returns the new array of grouped elements.
-     * @example
-     *
-     * _.zip(['a', 'b'], [1, 2], [true, false]);
-     * // => [['a', 1, true], ['b', 2, false]]
-     */
-    var zip = baseRest(unzip);
-
-    /**
-     * This method is like `_.fromPairs` except that it accepts two arrays,
-     * one of property identifiers and one of corresponding values.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.4.0
-     * @category Array
-     * @param {Array} [props=[]] The property identifiers.
-     * @param {Array} [values=[]] The property values.
-     * @returns {Object} Returns the new object.
-     * @example
-     *
-     * _.zipObject(['a', 'b'], [1, 2]);
-     * // => { 'a': 1, 'b': 2 }
-     */
-    function zipObject(props, values) {
-      return baseZipObject(props || [], values || [], assignValue);
-    }
-
-    /**
-     * This method is like `_.zipObject` except that it supports property paths.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.1.0
-     * @category Array
-     * @param {Array} [props=[]] The property identifiers.
-     * @param {Array} [values=[]] The property values.
-     * @returns {Object} Returns the new object.
-     * @example
-     *
-     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);
-     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }
-     */
-    function zipObjectDeep(props, values) {
-      return baseZipObject(props || [], values || [], baseSet);
-    }
-
-    /**
-     * This method is like `_.zip` except that it accepts `iteratee` to specify
-     * how grouped values should be combined. The iteratee is invoked with the
-     * elements of each group: (...group).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.8.0
-     * @category Array
-     * @param {...Array} [arrays] The arrays to process.
-     * @param {Function} [iteratee=_.identity] The function to combine
-     *  grouped values.
-     * @returns {Array} Returns the new array of grouped elements.
-     * @example
-     *
-     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {
-     *   return a + b + c;
-     * });
-     * // => [111, 222]
-     */
-    var zipWith = baseRest(function(arrays) {
-      var length = arrays.length,
-          iteratee = length > 1 ? arrays[length - 1] : undefined;
-
-      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;
-      return unzipWith(arrays, iteratee);
-    });
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Creates a `lodash` wrapper instance that wraps `value` with explicit method
-     * chain sequences enabled. The result of such sequences must be unwrapped
-     * with `_#value`.
-     *
-     * @static
-     * @memberOf _
-     * @since 1.3.0
-     * @category Seq
-     * @param {*} value The value to wrap.
-     * @returns {Object} Returns the new `lodash` wrapper instance.
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'barney',  'age': 36 },
-     *   { 'user': 'fred',    'age': 40 },
-     *   { 'user': 'pebbles', 'age': 1 }
-     * ];
-     *
-     * var youngest = _
-     *   .chain(users)
-     *   .sortBy('age')
-     *   .map(function(o) {
-     *     return o.user + ' is ' + o.age;
-     *   })
-     *   .head()
-     *   .value();
-     * // => 'pebbles is 1'
-     */
-    function chain(value) {
-      var result = lodash(value);
-      result.__chain__ = true;
-      return result;
-    }
-
-    /**
-     * This method invokes `interceptor` and returns `value`. The interceptor
-     * is invoked with one argument; (value). The purpose of this method is to
-     * "tap into" a method chain sequence in order to modify intermediate results.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Seq
-     * @param {*} value The value to provide to `interceptor`.
-     * @param {Function} interceptor The function to invoke.
-     * @returns {*} Returns `value`.
-     * @example
-     *
-     * _([1, 2, 3])
-     *  .tap(function(array) {
-     *    // Mutate input array.
-     *    array.pop();
-     *  })
-     *  .reverse()
-     *  .value();
-     * // => [2, 1]
-     */
-    function tap(value, interceptor) {
-      interceptor(value);
-      return value;
-    }
-
-    /**
-     * This method is like `_.tap` except that it returns the result of `interceptor`.
-     * The purpose of this method is to "pass thru" values replacing intermediate
-     * results in a method chain sequence.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Seq
-     * @param {*} value The value to provide to `interceptor`.
-     * @param {Function} interceptor The function to invoke.
-     * @returns {*} Returns the result of `interceptor`.
-     * @example
-     *
-     * _('  abc  ')
-     *  .chain()
-     *  .trim()
-     *  .thru(function(value) {
-     *    return [value];
-     *  })
-     *  .value();
-     * // => ['abc']
-     */
-    function thru(value, interceptor) {
-      return interceptor(value);
-    }
-
-    /**
-     * This method is the wrapper version of `_.at`.
-     *
-     * @name at
-     * @memberOf _
-     * @since 1.0.0
-     * @category Seq
-     * @param {...(string|string[])} [paths] The property paths to pick.
-     * @returns {Object} Returns the new `lodash` wrapper instance.
-     * @example
-     *
-     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
-     *
-     * _(object).at(['a[0].b.c', 'a[1]']).value();
-     * // => [3, 4]
-     */
-    var wrapperAt = flatRest(function(paths) {
-      var length = paths.length,
-          start = length ? paths[0] : 0,
-          value = this.__wrapped__,
-          interceptor = function(object) { return baseAt(object, paths); };
-
-      if (length > 1 || this.__actions__.length ||
-          !(value instanceof LazyWrapper) || !isIndex(start)) {
-        return this.thru(interceptor);
-      }
-      value = value.slice(start, +start + (length ? 1 : 0));
-      value.__actions__.push({
-        'func': thru,
-        'args': [interceptor],
-        'thisArg': undefined
-      });
-      return new LodashWrapper(value, this.__chain__).thru(function(array) {
-        if (length && !array.length) {
-          array.push(undefined);
-        }
-        return array;
-      });
-    });
-
-    /**
-     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.
-     *
-     * @name chain
-     * @memberOf _
-     * @since 0.1.0
-     * @category Seq
-     * @returns {Object} Returns the new `lodash` wrapper instance.
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'barney', 'age': 36 },
-     *   { 'user': 'fred',   'age': 40 }
-     * ];
-     *
-     * // A sequence without explicit chaining.
-     * _(users).head();
-     * // => { 'user': 'barney', 'age': 36 }
-     *
-     * // A sequence with explicit chaining.
-     * _(users)
-     *   .chain()
-     *   .head()
-     *   .pick('user')
-     *   .value();
-     * // => { 'user': 'barney' }
-     */
-    function wrapperChain() {
-      return chain(this);
-    }
-
-    /**
-     * Executes the chain sequence and returns the wrapped result.
-     *
-     * @name commit
-     * @memberOf _
-     * @since 3.2.0
-     * @category Seq
-     * @returns {Object} Returns the new `lodash` wrapper instance.
-     * @example
-     *
-     * var array = [1, 2];
-     * var wrapped = _(array).push(3);
-     *
-     * console.log(array);
-     * // => [1, 2]
-     *
-     * wrapped = wrapped.commit();
-     * console.log(array);
-     * // => [1, 2, 3]
-     *
-     * wrapped.last();
-     * // => 3
-     *
-     * console.log(array);
-     * // => [1, 2, 3]
-     */
-    function wrapperCommit() {
-      return new LodashWrapper(this.value(), this.__chain__);
-    }
-
-    /**
-     * Gets the next value on a wrapped object following the
-     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).
-     *
-     * @name next
-     * @memberOf _
-     * @since 4.0.0
-     * @category Seq
-     * @returns {Object} Returns the next iterator value.
-     * @example
-     *
-     * var wrapped = _([1, 2]);
-     *
-     * wrapped.next();
-     * // => { 'done': false, 'value': 1 }
-     *
-     * wrapped.next();
-     * // => { 'done': false, 'value': 2 }
-     *
-     * wrapped.next();
-     * // => { 'done': true, 'value': undefined }
-     */
-    function wrapperNext() {
-      if (this.__values__ === undefined) {
-        this.__values__ = toArray(this.value());
-      }
-      var done = this.__index__ >= this.__values__.length,
-          value = done ? undefined : this.__values__[this.__index__++];
-
-      return { 'done': done, 'value': value };
-    }
-
-    /**
-     * Enables the wrapper to be iterable.
-     *
-     * @name Symbol.iterator
-     * @memberOf _
-     * @since 4.0.0
-     * @category Seq
-     * @returns {Object} Returns the wrapper object.
-     * @example
-     *
-     * var wrapped = _([1, 2]);
-     *
-     * wrapped[Symbol.iterator]() === wrapped;
-     * // => true
-     *
-     * Array.from(wrapped);
-     * // => [1, 2]
-     */
-    function wrapperToIterator() {
-      return this;
-    }
-
-    /**
-     * Creates a clone of the chain sequence planting `value` as the wrapped value.
-     *
-     * @name plant
-     * @memberOf _
-     * @since 3.2.0
-     * @category Seq
-     * @param {*} value The value to plant.
-     * @returns {Object} Returns the new `lodash` wrapper instance.
-     * @example
-     *
-     * function square(n) {
-     *   return n * n;
-     * }
-     *
-     * var wrapped = _([1, 2]).map(square);
-     * var other = wrapped.plant([3, 4]);
-     *
-     * other.value();
-     * // => [9, 16]
-     *
-     * wrapped.value();
-     * // => [1, 4]
-     */
-    function wrapperPlant(value) {
-      var result,
-          parent = this;
-
-      while (parent instanceof baseLodash) {
-        var clone = wrapperClone(parent);
-        clone.__index__ = 0;
-        clone.__values__ = undefined;
-        if (result) {
-          previous.__wrapped__ = clone;
-        } else {
-          result = clone;
-        }
-        var previous = clone;
-        parent = parent.__wrapped__;
-      }
-      previous.__wrapped__ = value;
-      return result;
-    }
-
-    /**
-     * This method is the wrapper version of `_.reverse`.
-     *
-     * **Note:** This method mutates the wrapped array.
-     *
-     * @name reverse
-     * @memberOf _
-     * @since 0.1.0
-     * @category Seq
-     * @returns {Object} Returns the new `lodash` wrapper instance.
-     * @example
-     *
-     * var array = [1, 2, 3];
-     *
-     * _(array).reverse().value()
-     * // => [3, 2, 1]
-     *
-     * console.log(array);
-     * // => [3, 2, 1]
-     */
-    function wrapperReverse() {
-      var value = this.__wrapped__;
-      if (value instanceof LazyWrapper) {
-        var wrapped = value;
-        if (this.__actions__.length) {
-          wrapped = new LazyWrapper(this);
-        }
-        wrapped = wrapped.reverse();
-        wrapped.__actions__.push({
-          'func': thru,
-          'args': [reverse],
-          'thisArg': undefined
-        });
-        return new LodashWrapper(wrapped, this.__chain__);
-      }
-      return this.thru(reverse);
-    }
-
-    /**
-     * Executes the chain sequence to resolve the unwrapped value.
-     *
-     * @name value
-     * @memberOf _
-     * @since 0.1.0
-     * @alias toJSON, valueOf
-     * @category Seq
-     * @returns {*} Returns the resolved unwrapped value.
-     * @example
-     *
-     * _([1, 2, 3]).value();
-     * // => [1, 2, 3]
-     */
-    function wrapperValue() {
-      return baseWrapperValue(this.__wrapped__, this.__actions__);
-    }
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Creates an object composed of keys generated from the results of running
-     * each element of `collection` thru `iteratee`. The corresponding value of
-     * each key is the number of times the key was returned by `iteratee`. The
-     * iteratee is invoked with one argument: (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 0.5.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
-     * @returns {Object} Returns the composed aggregate object.
-     * @example
-     *
-     * _.countBy([6.1, 4.2, 6.3], Math.floor);
-     * // => { '4': 1, '6': 2 }
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.countBy(['one', 'two', 'three'], 'length');
-     * // => { '3': 2, '5': 1 }
-     */
-    var countBy = createAggregator(function(result, value, key) {
-      if (hasOwnProperty.call(result, key)) {
-        ++result[key];
-      } else {
-        baseAssignValue(result, key, 1);
-      }
-    });
-
-    /**
-     * Checks if `predicate` returns truthy for **all** elements of `collection`.
-     * Iteration is stopped once `predicate` returns falsey. The predicate is
-     * invoked with three arguments: (value, index|key, collection).
-     *
-     * **Note:** This method returns `true` for
-     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because
-     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of
-     * elements of empty collections.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {boolean} Returns `true` if all elements pass the predicate check,
-     *  else `false`.
-     * @example
-     *
-     * _.every([true, 1, null, 'yes'], Boolean);
-     * // => false
-     *
-     * var users = [
-     *   { 'user': 'barney', 'age': 36, 'active': false },
-     *   { 'user': 'fred',   'age': 40, 'active': false }
-     * ];
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.every(users, { 'user': 'barney', 'active': false });
-     * // => false
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.every(users, ['active', false]);
-     * // => true
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.every(users, 'active');
-     * // => false
-     */
-    function every(collection, predicate, guard) {
-      var func = isArray(collection) ? arrayEvery : baseEvery;
-      if (guard && isIterateeCall(collection, predicate, guard)) {
-        predicate = undefined;
-      }
-      return func(collection, getIteratee(predicate, 3));
-    }
-
-    /**
-     * Iterates over elements of `collection`, returning an array of all elements
-     * `predicate` returns truthy for. The predicate is invoked with three
-     * arguments: (value, index|key, collection).
-     *
-     * **Note:** Unlike `_.remove`, this method returns a new array.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @returns {Array} Returns the new filtered array.
-     * @see _.reject
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'barney', 'age': 36, 'active': true },
-     *   { 'user': 'fred',   'age': 40, 'active': false }
-     * ];
-     *
-     * _.filter(users, function(o) { return !o.active; });
-     * // => objects for ['fred']
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.filter(users, { 'age': 36, 'active': true });
-     * // => objects for ['barney']
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.filter(users, ['active', false]);
-     * // => objects for ['fred']
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.filter(users, 'active');
-     * // => objects for ['barney']
-     *
-     * // Combining several predicates using `_.overEvery` or `_.overSome`.
-     * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
-     * // => objects for ['fred', 'barney']
-     */
-    function filter(collection, predicate) {
-      var func = isArray(collection) ? arrayFilter : baseFilter;
-      return func(collection, getIteratee(predicate, 3));
-    }
-
-    /**
-     * Iterates over elements of `collection`, returning the first element
-     * `predicate` returns truthy for. The predicate is invoked with three
-     * arguments: (value, index|key, collection).
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to inspect.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @param {number} [fromIndex=0] The index to search from.
-     * @returns {*} Returns the matched element, else `undefined`.
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'barney',  'age': 36, 'active': true },
-     *   { 'user': 'fred',    'age': 40, 'active': false },
-     *   { 'user': 'pebbles', 'age': 1,  'active': true }
-     * ];
-     *
-     * _.find(users, function(o) { return o.age < 40; });
-     * // => object for 'barney'
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.find(users, { 'age': 1, 'active': true });
-     * // => object for 'pebbles'
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.find(users, ['active', false]);
-     * // => object for 'fred'
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.find(users, 'active');
-     * // => object for 'barney'
-     */
-    var find = createFind(findIndex);
-
-    /**
-     * This method is like `_.find` except that it iterates over elements of
-     * `collection` from right to left.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.0.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to inspect.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @param {number} [fromIndex=collection.length-1] The index to search from.
-     * @returns {*} Returns the matched element, else `undefined`.
-     * @example
-     *
-     * _.findLast([1, 2, 3, 4], function(n) {
-     *   return n % 2 == 1;
-     * });
-     * // => 3
-     */
-    var findLast = createFind(findLastIndex);
-
-    /**
-     * Creates a flattened array of values by running each element in `collection`
-     * thru `iteratee` and flattening the mapped results. The iteratee is invoked
-     * with three arguments: (value, index|key, collection).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @returns {Array} Returns the new flattened array.
-     * @example
-     *
-     * function duplicate(n) {
-     *   return [n, n];
-     * }
-     *
-     * _.flatMap([1, 2], duplicate);
-     * // => [1, 1, 2, 2]
-     */
-    function flatMap(collection, iteratee) {
-      return baseFlatten(map(collection, iteratee), 1);
-    }
-
-    /**
-     * This method is like `_.flatMap` except that it recursively flattens the
-     * mapped results.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.7.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @returns {Array} Returns the new flattened array.
-     * @example
-     *
-     * function duplicate(n) {
-     *   return [[[n, n]]];
-     * }
-     *
-     * _.flatMapDeep([1, 2], duplicate);
-     * // => [1, 1, 2, 2]
-     */
-    function flatMapDeep(collection, iteratee) {
-      return baseFlatten(map(collection, iteratee), INFINITY);
-    }
-
-    /**
-     * This method is like `_.flatMap` except that it recursively flattens the
-     * mapped results up to `depth` times.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.7.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @param {number} [depth=1] The maximum recursion depth.
-     * @returns {Array} Returns the new flattened array.
-     * @example
-     *
-     * function duplicate(n) {
-     *   return [[[n, n]]];
-     * }
-     *
-     * _.flatMapDepth([1, 2], duplicate, 2);
-     * // => [[1, 1], [2, 2]]
-     */
-    function flatMapDepth(collection, iteratee, depth) {
-      depth = depth === undefined ? 1 : toInteger(depth);
-      return baseFlatten(map(collection, iteratee), depth);
-    }
-
-    /**
-     * Iterates over elements of `collection` and invokes `iteratee` for each element.
-     * The iteratee is invoked with three arguments: (value, index|key, collection).
-     * Iteratee functions may exit iteration early by explicitly returning `false`.
-     *
-     * **Note:** As with other "Collections" methods, objects with a "length"
-     * property are iterated like arrays. To avoid this behavior use `_.forIn`
-     * or `_.forOwn` for object iteration.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @alias each
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @returns {Array|Object} Returns `collection`.
-     * @see _.forEachRight
-     * @example
-     *
-     * _.forEach([1, 2], function(value) {
-     *   console.log(value);
-     * });
-     * // => Logs `1` then `2`.
-     *
-     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
-     *   console.log(key);
-     * });
-     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
-     */
-    function forEach(collection, iteratee) {
-      var func = isArray(collection) ? arrayEach : baseEach;
-      return func(collection, getIteratee(iteratee, 3));
-    }
-
-    /**
-     * This method is like `_.forEach` except that it iterates over elements of
-     * `collection` from right to left.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.0.0
-     * @alias eachRight
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @returns {Array|Object} Returns `collection`.
-     * @see _.forEach
-     * @example
-     *
-     * _.forEachRight([1, 2], function(value) {
-     *   console.log(value);
-     * });
-     * // => Logs `2` then `1`.
-     */
-    function forEachRight(collection, iteratee) {
-      var func = isArray(collection) ? arrayEachRight : baseEachRight;
-      return func(collection, getIteratee(iteratee, 3));
-    }
-
-    /**
-     * Creates an object composed of keys generated from the results of running
-     * each element of `collection` thru `iteratee`. The order of grouped values
-     * is determined by the order they occur in `collection`. The corresponding
-     * value of each key is an array of elements responsible for generating the
-     * key. The iteratee is invoked with one argument: (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
-     * @returns {Object} Returns the composed aggregate object.
-     * @example
-     *
-     * _.groupBy([6.1, 4.2, 6.3], Math.floor);
-     * // => { '4': [4.2], '6': [6.1, 6.3] }
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.groupBy(['one', 'two', 'three'], 'length');
-     * // => { '3': ['one', 'two'], '5': ['three'] }
-     */
-    var groupBy = createAggregator(function(result, value, key) {
-      if (hasOwnProperty.call(result, key)) {
-        result[key].push(value);
-      } else {
-        baseAssignValue(result, key, [value]);
-      }
-    });
-
-    /**
-     * Checks if `value` is in `collection`. If `collection` is a string, it's
-     * checked for a substring of `value`, otherwise
-     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
-     * is used for equality comparisons. If `fromIndex` is negative, it's used as
-     * the offset from the end of `collection`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Collection
-     * @param {Array|Object|string} collection The collection to inspect.
-     * @param {*} value The value to search for.
-     * @param {number} [fromIndex=0] The index to search from.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
-     * @returns {boolean} Returns `true` if `value` is found, else `false`.
-     * @example
-     *
-     * _.includes([1, 2, 3], 1);
-     * // => true
-     *
-     * _.includes([1, 2, 3], 1, 2);
-     * // => false
-     *
-     * _.includes({ 'a': 1, 'b': 2 }, 1);
-     * // => true
-     *
-     * _.includes('abcd', 'bc');
-     * // => true
-     */
-    function includes(collection, value, fromIndex, guard) {
-      collection = isArrayLike(collection) ? collection : values(collection);
-      fromIndex = (fromIndex && !guard) ? toInteger(fromIndex) : 0;
-
-      var length = collection.length;
-      if (fromIndex < 0) {
-        fromIndex = nativeMax(length + fromIndex, 0);
-      }
-      return isString(collection)
-        ? (fromIndex <= length && collection.indexOf(value, fromIndex) > -1)
-        : (!!length && baseIndexOf(collection, value, fromIndex) > -1);
-    }
-
-    /**
-     * Invokes the method at `path` of each element in `collection`, returning
-     * an array of the results of each invoked method. Any additional arguments
-     * are provided to each invoked method. If `path` is a function, it's invoked
-     * for, and `this` bound to, each element in `collection`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Array|Function|string} path The path of the method to invoke or
-     *  the function invoked per iteration.
-     * @param {...*} [args] The arguments to invoke each method with.
-     * @returns {Array} Returns the array of results.
-     * @example
-     *
-     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');
-     * // => [[1, 5, 7], [1, 2, 3]]
-     *
-     * _.invokeMap([123, 456], String.prototype.split, '');
-     * // => [['1', '2', '3'], ['4', '5', '6']]
-     */
-    var invokeMap = baseRest(function(collection, path, args) {
-      var index = -1,
-          isFunc = typeof path == 'function',
-          result = isArrayLike(collection) ? Array(collection.length) : [];
-
-      baseEach(collection, function(value) {
-        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);
-      });
-      return result;
-    });
-
-    /**
-     * Creates an object composed of keys generated from the results of running
-     * each element of `collection` thru `iteratee`. The corresponding value of
-     * each key is the last element responsible for generating the key. The
-     * iteratee is invoked with one argument: (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.
-     * @returns {Object} Returns the composed aggregate object.
-     * @example
-     *
-     * var array = [
-     *   { 'dir': 'left', 'code': 97 },
-     *   { 'dir': 'right', 'code': 100 }
-     * ];
-     *
-     * _.keyBy(array, function(o) {
-     *   return String.fromCharCode(o.code);
-     * });
-     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }
-     *
-     * _.keyBy(array, 'dir');
-     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }
-     */
-    var keyBy = createAggregator(function(result, value, key) {
-      baseAssignValue(result, key, value);
-    });
-
-    /**
-     * Creates an array of values by running each element in `collection` thru
-     * `iteratee`. The iteratee is invoked with three arguments:
-     * (value, index|key, collection).
-     *
-     * Many lodash methods are guarded to work as iteratees for methods like
-     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
-     *
-     * The guarded methods are:
-     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
-     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
-     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
-     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @returns {Array} Returns the new mapped array.
-     * @example
-     *
-     * function square(n) {
-     *   return n * n;
-     * }
-     *
-     * _.map([4, 8], square);
-     * // => [16, 64]
-     *
-     * _.map({ 'a': 4, 'b': 8 }, square);
-     * // => [16, 64] (iteration order is not guaranteed)
-     *
-     * var users = [
-     *   { 'user': 'barney' },
-     *   { 'user': 'fred' }
-     * ];
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.map(users, 'user');
-     * // => ['barney', 'fred']
-     */
-    function map(collection, iteratee) {
-      var func = isArray(collection) ? arrayMap : baseMap;
-      return func(collection, getIteratee(iteratee, 3));
-    }
-
-    /**
-     * This method is like `_.sortBy` except that it allows specifying the sort
-     * orders of the iteratees to sort by. If `orders` is unspecified, all values
-     * are sorted in ascending order. Otherwise, specify an order of "desc" for
-     * descending or "asc" for ascending sort order of corresponding values.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]
-     *  The iteratees to sort by.
-     * @param {string[]} [orders] The sort orders of `iteratees`.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.
-     * @returns {Array} Returns the new sorted array.
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'fred',   'age': 48 },
-     *   { 'user': 'barney', 'age': 34 },
-     *   { 'user': 'fred',   'age': 40 },
-     *   { 'user': 'barney', 'age': 36 }
-     * ];
-     *
-     * // Sort by `user` in ascending order and by `age` in descending order.
-     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);
-     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]
-     */
-    function orderBy(collection, iteratees, orders, guard) {
-      if (collection == null) {
-        return [];
-      }
-      if (!isArray(iteratees)) {
-        iteratees = iteratees == null ? [] : [iteratees];
-      }
-      orders = guard ? undefined : orders;
-      if (!isArray(orders)) {
-        orders = orders == null ? [] : [orders];
-      }
-      return baseOrderBy(collection, iteratees, orders);
-    }
-
-    /**
-     * Creates an array of elements split into two groups, the first of which
-     * contains elements `predicate` returns truthy for, the second of which
-     * contains elements `predicate` returns falsey for. The predicate is
-     * invoked with one argument: (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @returns {Array} Returns the array of grouped elements.
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'barney',  'age': 36, 'active': false },
-     *   { 'user': 'fred',    'age': 40, 'active': true },
-     *   { 'user': 'pebbles', 'age': 1,  'active': false }
-     * ];
-     *
-     * _.partition(users, function(o) { return o.active; });
-     * // => objects for [['fred'], ['barney', 'pebbles']]
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.partition(users, { 'age': 1, 'active': false });
-     * // => objects for [['pebbles'], ['barney', 'fred']]
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.partition(users, ['active', false]);
-     * // => objects for [['barney', 'pebbles'], ['fred']]
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.partition(users, 'active');
-     * // => objects for [['fred'], ['barney', 'pebbles']]
-     */
-    var partition = createAggregator(function(result, value, key) {
-      result[key ? 0 : 1].push(value);
-    }, function() { return [[], []]; });
-
-    /**
-     * Reduces `collection` to a value which is the accumulated result of running
-     * each element in `collection` thru `iteratee`, where each successive
-     * invocation is supplied the return value of the previous. If `accumulator`
-     * is not given, the first element of `collection` is used as the initial
-     * value. The iteratee is invoked with four arguments:
-     * (accumulator, value, index|key, collection).
-     *
-     * Many lodash methods are guarded to work as iteratees for methods like
-     * `_.reduce`, `_.reduceRight`, and `_.transform`.
-     *
-     * The guarded methods are:
-     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
-     * and `sortBy`
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @param {*} [accumulator] The initial value.
-     * @returns {*} Returns the accumulated value.
-     * @see _.reduceRight
-     * @example
-     *
-     * _.reduce([1, 2], function(sum, n) {
-     *   return sum + n;
-     * }, 0);
-     * // => 3
-     *
-     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
-     *   (result[value] || (result[value] = [])).push(key);
-     *   return result;
-     * }, {});
-     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
-     */
-    function reduce(collection, iteratee, accumulator) {
-      var func = isArray(collection) ? arrayReduce : baseReduce,
-          initAccum = arguments.length < 3;
-
-      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);
-    }
-
-    /**
-     * This method is like `_.reduce` except that it iterates over elements of
-     * `collection` from right to left.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @param {*} [accumulator] The initial value.
-     * @returns {*} Returns the accumulated value.
-     * @see _.reduce
-     * @example
-     *
-     * var array = [[0, 1], [2, 3], [4, 5]];
-     *
-     * _.reduceRight(array, function(flattened, other) {
-     *   return flattened.concat(other);
-     * }, []);
-     * // => [4, 5, 2, 3, 0, 1]
-     */
-    function reduceRight(collection, iteratee, accumulator) {
-      var func = isArray(collection) ? arrayReduceRight : baseReduce,
-          initAccum = arguments.length < 3;
-
-      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);
-    }
-
-    /**
-     * The opposite of `_.filter`; this method returns the elements of `collection`
-     * that `predicate` does **not** return truthy for.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @returns {Array} Returns the new filtered array.
-     * @see _.filter
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'barney', 'age': 36, 'active': false },
-     *   { 'user': 'fred',   'age': 40, 'active': true }
-     * ];
-     *
-     * _.reject(users, function(o) { return !o.active; });
-     * // => objects for ['fred']
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.reject(users, { 'age': 40, 'active': true });
-     * // => objects for ['barney']
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.reject(users, ['active', false]);
-     * // => objects for ['fred']
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.reject(users, 'active');
-     * // => objects for ['barney']
-     */
-    function reject(collection, predicate) {
-      var func = isArray(collection) ? arrayFilter : baseFilter;
-      return func(collection, negate(getIteratee(predicate, 3)));
-    }
-
-    /**
-     * Gets a random element from `collection`.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.0.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to sample.
-     * @returns {*} Returns the random element.
-     * @example
-     *
-     * _.sample([1, 2, 3, 4]);
-     * // => 2
-     */
-    function sample(collection) {
-      var func = isArray(collection) ? arraySample : baseSample;
-      return func(collection);
-    }
-
-    /**
-     * Gets `n` random elements at unique keys from `collection` up to the
-     * size of `collection`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to sample.
-     * @param {number} [n=1] The number of elements to sample.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {Array} Returns the random elements.
-     * @example
-     *
-     * _.sampleSize([1, 2, 3], 2);
-     * // => [3, 1]
-     *
-     * _.sampleSize([1, 2, 3], 4);
-     * // => [2, 3, 1]
-     */
-    function sampleSize(collection, n, guard) {
-      if ((guard ? isIterateeCall(collection, n, guard) : n === undefined)) {
-        n = 1;
-      } else {
-        n = toInteger(n);
-      }
-      var func = isArray(collection) ? arraySampleSize : baseSampleSize;
-      return func(collection, n);
-    }
-
-    /**
-     * Creates an array of shuffled values, using a version of the
-     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to shuffle.
-     * @returns {Array} Returns the new shuffled array.
-     * @example
-     *
-     * _.shuffle([1, 2, 3, 4]);
-     * // => [4, 1, 3, 2]
-     */
-    function shuffle(collection) {
-      var func = isArray(collection) ? arrayShuffle : baseShuffle;
-      return func(collection);
-    }
-
-    /**
-     * Gets the size of `collection` by returning its length for array-like
-     * values or the number of own enumerable string keyed properties for objects.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Collection
-     * @param {Array|Object|string} collection The collection to inspect.
-     * @returns {number} Returns the collection size.
-     * @example
-     *
-     * _.size([1, 2, 3]);
-     * // => 3
-     *
-     * _.size({ 'a': 1, 'b': 2 });
-     * // => 2
-     *
-     * _.size('pebbles');
-     * // => 7
-     */
-    function size(collection) {
-      if (collection == null) {
-        return 0;
-      }
-      if (isArrayLike(collection)) {
-        return isString(collection) ? stringSize(collection) : collection.length;
-      }
-      var tag = getTag(collection);
-      if (tag == mapTag || tag == setTag) {
-        return collection.size;
-      }
-      return baseKeys(collection).length;
-    }
-
-    /**
-     * Checks if `predicate` returns truthy for **any** element of `collection`.
-     * Iteration is stopped once `predicate` returns truthy. The predicate is
-     * invoked with three arguments: (value, index|key, collection).
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {boolean} Returns `true` if any element passes the predicate check,
-     *  else `false`.
-     * @example
-     *
-     * _.some([null, 0, 'yes', false], Boolean);
-     * // => true
-     *
-     * var users = [
-     *   { 'user': 'barney', 'active': true },
-     *   { 'user': 'fred',   'active': false }
-     * ];
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.some(users, { 'user': 'barney', 'active': false });
-     * // => false
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.some(users, ['active', false]);
-     * // => true
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.some(users, 'active');
-     * // => true
-     */
-    function some(collection, predicate, guard) {
-      var func = isArray(collection) ? arraySome : baseSome;
-      if (guard && isIterateeCall(collection, predicate, guard)) {
-        predicate = undefined;
-      }
-      return func(collection, getIteratee(predicate, 3));
-    }
-
-    /**
-     * Creates an array of elements, sorted in ascending order by the results of
-     * running each element in a collection thru each iteratee. This method
-     * performs a stable sort, that is, it preserves the original sort order of
-     * equal elements. The iteratees are invoked with one argument: (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Collection
-     * @param {Array|Object} collection The collection to iterate over.
-     * @param {...(Function|Function[])} [iteratees=[_.identity]]
-     *  The iteratees to sort by.
-     * @returns {Array} Returns the new sorted array.
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'fred',   'age': 48 },
-     *   { 'user': 'barney', 'age': 36 },
-     *   { 'user': 'fred',   'age': 30 },
-     *   { 'user': 'barney', 'age': 34 }
-     * ];
-     *
-     * _.sortBy(users, [function(o) { return o.user; }]);
-     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
-     *
-     * _.sortBy(users, ['user', 'age']);
-     * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
-     */
-    var sortBy = baseRest(function(collection, iteratees) {
-      if (collection == null) {
-        return [];
-      }
-      var length = iteratees.length;
-      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {
-        iteratees = [];
-      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {
-        iteratees = [iteratees[0]];
-      }
-      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);
-    });
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Gets the timestamp of the number of milliseconds that have elapsed since
-     * the Unix epoch (1 January 1970 00:00:00 UTC).
-     *
-     * @static
-     * @memberOf _
-     * @since 2.4.0
-     * @category Date
-     * @returns {number} Returns the timestamp.
-     * @example
-     *
-     * _.defer(function(stamp) {
-     *   console.log(_.now() - stamp);
-     * }, _.now());
-     * // => Logs the number of milliseconds it took for the deferred invocation.
-     */
-    var now = ctxNow || function() {
-      return root.Date.now();
-    };
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * The opposite of `_.before`; this method creates a function that invokes
-     * `func` once it's called `n` or more times.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Function
-     * @param {number} n The number of calls before `func` is invoked.
-     * @param {Function} func The function to restrict.
-     * @returns {Function} Returns the new restricted function.
-     * @example
-     *
-     * var saves = ['profile', 'settings'];
-     *
-     * var done = _.after(saves.length, function() {
-     *   console.log('done saving!');
-     * });
-     *
-     * _.forEach(saves, function(type) {
-     *   asyncSave({ 'type': type, 'complete': done });
-     * });
-     * // => Logs 'done saving!' after the two async saves have completed.
-     */
-    function after(n, func) {
-      if (typeof func != 'function') {
-        throw new TypeError(FUNC_ERROR_TEXT);
-      }
-      n = toInteger(n);
-      return function() {
-        if (--n < 1) {
-          return func.apply(this, arguments);
-        }
-      };
-    }
-
-    /**
-     * Creates a function that invokes `func`, with up to `n` arguments,
-     * ignoring any additional arguments.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Function
-     * @param {Function} func The function to cap arguments for.
-     * @param {number} [n=func.length] The arity cap.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {Function} Returns the new capped function.
-     * @example
-     *
-     * _.map(['6', '8', '10'], _.ary(parseInt, 1));
-     * // => [6, 8, 10]
-     */
-    function ary(func, n, guard) {
-      n = guard ? undefined : n;
-      n = (func && n == null) ? func.length : n;
-      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);
-    }
-
-    /**
-     * Creates a function that invokes `func`, with the `this` binding and arguments
-     * of the created function, while it's called less than `n` times. Subsequent
-     * calls to the created function return the result of the last `func` invocation.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Function
-     * @param {number} n The number of calls at which `func` is no longer invoked.
-     * @param {Function} func The function to restrict.
-     * @returns {Function} Returns the new restricted function.
-     * @example
-     *
-     * jQuery(element).on('click', _.before(5, addContactToList));
-     * // => Allows adding up to 4 contacts to the list.
-     */
-    function before(n, func) {
-      var result;
-      if (typeof func != 'function') {
-        throw new TypeError(FUNC_ERROR_TEXT);
-      }
-      n = toInteger(n);
-      return function() {
-        if (--n > 0) {
-          result = func.apply(this, arguments);
-        }
-        if (n <= 1) {
-          func = undefined;
-        }
-        return result;
-      };
-    }
-
-    /**
-     * Creates a function that invokes `func` with the `this` binding of `thisArg`
-     * and `partials` prepended to the arguments it receives.
-     *
-     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,
-     * may be used as a placeholder for partially applied arguments.
-     *
-     * **Note:** Unlike native `Function#bind`, this method doesn't set the "length"
-     * property of bound functions.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Function
-     * @param {Function} func The function to bind.
-     * @param {*} thisArg The `this` binding of `func`.
-     * @param {...*} [partials] The arguments to be partially applied.
-     * @returns {Function} Returns the new bound function.
-     * @example
-     *
-     * function greet(greeting, punctuation) {
-     *   return greeting + ' ' + this.user + punctuation;
-     * }
-     *
-     * var object = { 'user': 'fred' };
-     *
-     * var bound = _.bind(greet, object, 'hi');
-     * bound('!');
-     * // => 'hi fred!'
-     *
-     * // Bound with placeholders.
-     * var bound = _.bind(greet, object, _, '!');
-     * bound('hi');
-     * // => 'hi fred!'
-     */
-    var bind = baseRest(function(func, thisArg, partials) {
-      var bitmask = WRAP_BIND_FLAG;
-      if (partials.length) {
-        var holders = replaceHolders(partials, getHolder(bind));
-        bitmask |= WRAP_PARTIAL_FLAG;
-      }
-      return createWrap(func, bitmask, thisArg, partials, holders);
-    });
-
-    /**
-     * Creates a function that invokes the method at `object[key]` with `partials`
-     * prepended to the arguments it receives.
-     *
-     * This method differs from `_.bind` by allowing bound functions to reference
-     * methods that may be redefined or don't yet exist. See
-     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)
-     * for more details.
-     *
-     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic
-     * builds, may be used as a placeholder for partially applied arguments.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.10.0
-     * @category Function
-     * @param {Object} object The object to invoke the method on.
-     * @param {string} key The key of the method.
-     * @param {...*} [partials] The arguments to be partially applied.
-     * @returns {Function} Returns the new bound function.
-     * @example
-     *
-     * var object = {
-     *   'user': 'fred',
-     *   'greet': function(greeting, punctuation) {
-     *     return greeting + ' ' + this.user + punctuation;
-     *   }
-     * };
-     *
-     * var bound = _.bindKey(object, 'greet', 'hi');
-     * bound('!');
-     * // => 'hi fred!'
-     *
-     * object.greet = function(greeting, punctuation) {
-     *   return greeting + 'ya ' + this.user + punctuation;
-     * };
-     *
-     * bound('!');
-     * // => 'hiya fred!'
-     *
-     * // Bound with placeholders.
-     * var bound = _.bindKey(object, 'greet', _, '!');
-     * bound('hi');
-     * // => 'hiya fred!'
-     */
-    var bindKey = baseRest(function(object, key, partials) {
-      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;
-      if (partials.length) {
-        var holders = replaceHolders(partials, getHolder(bindKey));
-        bitmask |= WRAP_PARTIAL_FLAG;
-      }
-      return createWrap(key, bitmask, object, partials, holders);
-    });
-
-    /**
-     * Creates a function that accepts arguments of `func` and either invokes
-     * `func` returning its result, if at least `arity` number of arguments have
-     * been provided, or returns a function that accepts the remaining `func`
-     * arguments, and so on. The arity of `func` may be specified if `func.length`
-     * is not sufficient.
-     *
-     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,
-     * may be used as a placeholder for provided arguments.
-     *
-     * **Note:** This method doesn't set the "length" property of curried functions.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.0.0
-     * @category Function
-     * @param {Function} func The function to curry.
-     * @param {number} [arity=func.length] The arity of `func`.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {Function} Returns the new curried function.
-     * @example
-     *
-     * var abc = function(a, b, c) {
-     *   return [a, b, c];
-     * };
-     *
-     * var curried = _.curry(abc);
-     *
-     * curried(1)(2)(3);
-     * // => [1, 2, 3]
-     *
-     * curried(1, 2)(3);
-     * // => [1, 2, 3]
-     *
-     * curried(1, 2, 3);
-     * // => [1, 2, 3]
-     *
-     * // Curried with placeholders.
-     * curried(1)(_, 3)(2);
-     * // => [1, 2, 3]
-     */
-    function curry(func, arity, guard) {
-      arity = guard ? undefined : arity;
-      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
-      result.placeholder = curry.placeholder;
-      return result;
-    }
-
-    /**
-     * This method is like `_.curry` except that arguments are applied to `func`
-     * in the manner of `_.partialRight` instead of `_.partial`.
-     *
-     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic
-     * builds, may be used as a placeholder for provided arguments.
-     *
-     * **Note:** This method doesn't set the "length" property of curried functions.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Function
-     * @param {Function} func The function to curry.
-     * @param {number} [arity=func.length] The arity of `func`.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {Function} Returns the new curried function.
-     * @example
-     *
-     * var abc = function(a, b, c) {
-     *   return [a, b, c];
-     * };
-     *
-     * var curried = _.curryRight(abc);
-     *
-     * curried(3)(2)(1);
-     * // => [1, 2, 3]
-     *
-     * curried(2, 3)(1);
-     * // => [1, 2, 3]
-     *
-     * curried(1, 2, 3);
-     * // => [1, 2, 3]
-     *
-     * // Curried with placeholders.
-     * curried(3)(1, _)(2);
-     * // => [1, 2, 3]
-     */
-    function curryRight(func, arity, guard) {
-      arity = guard ? undefined : arity;
-      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);
-      result.placeholder = curryRight.placeholder;
-      return result;
-    }
-
-    /**
-     * Creates a debounced function that delays invoking `func` until after `wait`
-     * milliseconds have elapsed since the last time the debounced function was
-     * invoked. The debounced function comes with a `cancel` method to cancel
-     * delayed `func` invocations and a `flush` method to immediately invoke them.
-     * Provide `options` to indicate whether `func` should be invoked on the
-     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked
-     * with the last arguments provided to the debounced function. Subsequent
-     * calls to the debounced function return the result of the last `func`
-     * invocation.
-     *
-     * **Note:** If `leading` and `trailing` options are `true`, `func` is
-     * invoked on the trailing edge of the timeout only if the debounced function
-     * is invoked more than once during the `wait` timeout.
-     *
-     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
-     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
-     *
-     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
-     * for details over the differences between `_.debounce` and `_.throttle`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Function
-     * @param {Function} func The function to debounce.
-     * @param {number} [wait=0] The number of milliseconds to delay.
-     * @param {Object} [options={}] The options object.
-     * @param {boolean} [options.leading=false]
-     *  Specify invoking on the leading edge of the timeout.
-     * @param {number} [options.maxWait]
-     *  The maximum time `func` is allowed to be delayed before it's invoked.
-     * @param {boolean} [options.trailing=true]
-     *  Specify invoking on the trailing edge of the timeout.
-     * @returns {Function} Returns the new debounced function.
-     * @example
-     *
-     * // Avoid costly calculations while the window size is in flux.
-     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));
-     *
-     * // Invoke `sendMail` when clicked, debouncing subsequent calls.
-     * jQuery(element).on('click', _.debounce(sendMail, 300, {
-     *   'leading': true,
-     *   'trailing': false
-     * }));
-     *
-     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.
-     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });
-     * var source = new EventSource('/stream');
-     * jQuery(source).on('message', debounced);
-     *
-     * // Cancel the trailing debounced invocation.
-     * jQuery(window).on('popstate', debounced.cancel);
-     */
-    function debounce(func, wait, options) {
-      var lastArgs,
-          lastThis,
-          maxWait,
-          result,
-          timerId,
-          lastCallTime,
-          lastInvokeTime = 0,
-          leading = false,
-          maxing = false,
-          trailing = true;
-
-      if (typeof func != 'function') {
-        throw new TypeError(FUNC_ERROR_TEXT);
-      }
-      wait = toNumber(wait) || 0;
-      if (isObject(options)) {
-        leading = !!options.leading;
-        maxing = 'maxWait' in options;
-        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
-        trailing = 'trailing' in options ? !!options.trailing : trailing;
-      }
-
-      function invokeFunc(time) {
-        var args = lastArgs,
-            thisArg = lastThis;
-
-        lastArgs = lastThis = undefined;
-        lastInvokeTime = time;
-        result = func.apply(thisArg, args);
-        return result;
-      }
-
-      function leadingEdge(time) {
-        // Reset any `maxWait` timer.
-        lastInvokeTime = time;
-        // Start the timer for the trailing edge.
-        timerId = setTimeout(timerExpired, wait);
-        // Invoke the leading edge.
-        return leading ? invokeFunc(time) : result;
-      }
-
-      function remainingWait(time) {
-        var timeSinceLastCall = time - lastCallTime,
-            timeSinceLastInvoke = time - lastInvokeTime,
-            timeWaiting = wait - timeSinceLastCall;
-
-        return maxing
-          ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke)
-          : timeWaiting;
-      }
-
-      function shouldInvoke(time) {
-        var timeSinceLastCall = time - lastCallTime,
-            timeSinceLastInvoke = time - lastInvokeTime;
-
-        // Either this is the first call, activity has stopped and we're at the
-        // trailing edge, the system time has gone backwards and we're treating
-        // it as the trailing edge, or we've hit the `maxWait` limit.
-        return (lastCallTime === undefined || (timeSinceLastCall >= wait) ||
-          (timeSinceLastCall < 0) || (maxing && timeSinceLastInvoke >= maxWait));
-      }
-
-      function timerExpired() {
-        var time = now();
-        if (shouldInvoke(time)) {
-          return trailingEdge(time);
-        }
-        // Restart the timer.
-        timerId = setTimeout(timerExpired, remainingWait(time));
-      }
-
-      function trailingEdge(time) {
-        timerId = undefined;
-
-        // Only invoke if we have `lastArgs` which means `func` has been
-        // debounced at least once.
-        if (trailing && lastArgs) {
-          return invokeFunc(time);
-        }
-        lastArgs = lastThis = undefined;
-        return result;
-      }
-
-      function cancel() {
-        if (timerId !== undefined) {
-          clearTimeout(timerId);
-        }
-        lastInvokeTime = 0;
-        lastArgs = lastCallTime = lastThis = timerId = undefined;
-      }
-
-      function flush() {
-        return timerId === undefined ? result : trailingEdge(now());
-      }
-
-      function debounced() {
-        var time = now(),
-            isInvoking = shouldInvoke(time);
-
-        lastArgs = arguments;
-        lastThis = this;
-        lastCallTime = time;
-
-        if (isInvoking) {
-          if (timerId === undefined) {
-            return leadingEdge(lastCallTime);
-          }
-          if (maxing) {
-            // Handle invocations in a tight loop.
-            clearTimeout(timerId);
-            timerId = setTimeout(timerExpired, wait);
-            return invokeFunc(lastCallTime);
-          }
-        }
-        if (timerId === undefined) {
-          timerId = setTimeout(timerExpired, wait);
-        }
-        return result;
-      }
-      debounced.cancel = cancel;
-      debounced.flush = flush;
-      return debounced;
-    }
-
-    /**
-     * Defers invoking the `func` until the current call stack has cleared. Any
-     * additional arguments are provided to `func` when it's invoked.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Function
-     * @param {Function} func The function to defer.
-     * @param {...*} [args] The arguments to invoke `func` with.
-     * @returns {number} Returns the timer id.
-     * @example
-     *
-     * _.defer(function(text) {
-     *   console.log(text);
-     * }, 'deferred');
-     * // => Logs 'deferred' after one millisecond.
-     */
-    var defer = baseRest(function(func, args) {
-      return baseDelay(func, 1, args);
-    });
-
-    /**
-     * Invokes `func` after `wait` milliseconds. Any additional arguments are
-     * provided to `func` when it's invoked.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Function
-     * @param {Function} func The function to delay.
-     * @param {number} wait The number of milliseconds to delay invocation.
-     * @param {...*} [args] The arguments to invoke `func` with.
-     * @returns {number} Returns the timer id.
-     * @example
-     *
-     * _.delay(function(text) {
-     *   console.log(text);
-     * }, 1000, 'later');
-     * // => Logs 'later' after one second.
-     */
-    var delay = baseRest(function(func, wait, args) {
-      return baseDelay(func, toNumber(wait) || 0, args);
-    });
-
-    /**
-     * Creates a function that invokes `func` with arguments reversed.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Function
-     * @param {Function} func The function to flip arguments for.
-     * @returns {Function} Returns the new flipped function.
-     * @example
-     *
-     * var flipped = _.flip(function() {
-     *   return _.toArray(arguments);
-     * });
-     *
-     * flipped('a', 'b', 'c', 'd');
-     * // => ['d', 'c', 'b', 'a']
-     */
-    function flip(func) {
-      return createWrap(func, WRAP_FLIP_FLAG);
-    }
-
-    /**
-     * Creates a function that memoizes the result of `func`. If `resolver` is
-     * provided, it determines the cache key for storing the result based on the
-     * arguments provided to the memoized function. By default, the first argument
-     * provided to the memoized function is used as the map cache key. The `func`
-     * is invoked with the `this` binding of the memoized function.
-     *
-     * **Note:** The cache is exposed as the `cache` property on the memoized
-     * function. Its creation may be customized by replacing the `_.memoize.Cache`
-     * constructor with one whose instances implement the
-     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
-     * method interface of `clear`, `delete`, `get`, `has`, and `set`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Function
-     * @param {Function} func The function to have its output memoized.
-     * @param {Function} [resolver] The function to resolve the cache key.
-     * @returns {Function} Returns the new memoized function.
-     * @example
-     *
-     * var object = { 'a': 1, 'b': 2 };
-     * var other = { 'c': 3, 'd': 4 };
-     *
-     * var values = _.memoize(_.values);
-     * values(object);
-     * // => [1, 2]
-     *
-     * values(other);
-     * // => [3, 4]
-     *
-     * object.a = 2;
-     * values(object);
-     * // => [1, 2]
-     *
-     * // Modify the result cache.
-     * values.cache.set(object, ['a', 'b']);
-     * values(object);
-     * // => ['a', 'b']
-     *
-     * // Replace `_.memoize.Cache`.
-     * _.memoize.Cache = WeakMap;
-     */
-    function memoize(func, resolver) {
-      if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
-        throw new TypeError(FUNC_ERROR_TEXT);
-      }
-      var memoized = function() {
-        var args = arguments,
-            key = resolver ? resolver.apply(this, args) : args[0],
-            cache = memoized.cache;
-
-        if (cache.has(key)) {
-          return cache.get(key);
-        }
-        var result = func.apply(this, args);
-        memoized.cache = cache.set(key, result) || cache;
-        return result;
-      };
-      memoized.cache = new (memoize.Cache || MapCache);
-      return memoized;
-    }
-
-    // Expose `MapCache`.
-    memoize.Cache = MapCache;
-
-    /**
-     * Creates a function that negates the result of the predicate `func`. The
-     * `func` predicate is invoked with the `this` binding and arguments of the
-     * created function.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Function
-     * @param {Function} predicate The predicate to negate.
-     * @returns {Function} Returns the new negated function.
-     * @example
-     *
-     * function isEven(n) {
-     *   return n % 2 == 0;
-     * }
-     *
-     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
-     * // => [1, 3, 5]
-     */
-    function negate(predicate) {
-      if (typeof predicate != 'function') {
-        throw new TypeError(FUNC_ERROR_TEXT);
-      }
-      return function() {
-        var args = arguments;
-        switch (args.length) {
-          case 0: return !predicate.call(this);
-          case 1: return !predicate.call(this, args[0]);
-          case 2: return !predicate.call(this, args[0], args[1]);
-          case 3: return !predicate.call(this, args[0], args[1], args[2]);
-        }
-        return !predicate.apply(this, args);
-      };
-    }
-
-    /**
-     * Creates a function that is restricted to invoking `func` once. Repeat calls
-     * to the function return the value of the first invocation. The `func` is
-     * invoked with the `this` binding and arguments of the created function.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Function
-     * @param {Function} func The function to restrict.
-     * @returns {Function} Returns the new restricted function.
-     * @example
-     *
-     * var initialize = _.once(createApplication);
-     * initialize();
-     * initialize();
-     * // => `createApplication` is invoked once
-     */
-    function once(func) {
-      return before(2, func);
-    }
-
-    /**
-     * Creates a function that invokes `func` with its arguments transformed.
-     *
-     * @static
-     * @since 4.0.0
-     * @memberOf _
-     * @category Function
-     * @param {Function} func The function to wrap.
-     * @param {...(Function|Function[])} [transforms=[_.identity]]
-     *  The argument transforms.
-     * @returns {Function} Returns the new function.
-     * @example
-     *
-     * function doubled(n) {
-     *   return n * 2;
-     * }
-     *
-     * function square(n) {
-     *   return n * n;
-     * }
-     *
-     * var func = _.overArgs(function(x, y) {
-     *   return [x, y];
-     * }, [square, doubled]);
-     *
-     * func(9, 3);
-     * // => [81, 6]
-     *
-     * func(10, 5);
-     * // => [100, 10]
-     */
-    var overArgs = castRest(function(func, transforms) {
-      transforms = (transforms.length == 1 && isArray(transforms[0]))
-        ? arrayMap(transforms[0], baseUnary(getIteratee()))
-        : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));
-
-      var funcsLength = transforms.length;
-      return baseRest(function(args) {
-        var index = -1,
-            length = nativeMin(args.length, funcsLength);
-
-        while (++index < length) {
-          args[index] = transforms[index].call(this, args[index]);
-        }
-        return apply(func, this, args);
-      });
-    });
-
-    /**
-     * Creates a function that invokes `func` with `partials` prepended to the
-     * arguments it receives. This method is like `_.bind` except it does **not**
-     * alter the `this` binding.
-     *
-     * The `_.partial.placeholder` value, which defaults to `_` in monolithic
-     * builds, may be used as a placeholder for partially applied arguments.
-     *
-     * **Note:** This method doesn't set the "length" property of partially
-     * applied functions.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.2.0
-     * @category Function
-     * @param {Function} func The function to partially apply arguments to.
-     * @param {...*} [partials] The arguments to be partially applied.
-     * @returns {Function} Returns the new partially applied function.
-     * @example
-     *
-     * function greet(greeting, name) {
-     *   return greeting + ' ' + name;
-     * }
-     *
-     * var sayHelloTo = _.partial(greet, 'hello');
-     * sayHelloTo('fred');
-     * // => 'hello fred'
-     *
-     * // Partially applied with placeholders.
-     * var greetFred = _.partial(greet, _, 'fred');
-     * greetFred('hi');
-     * // => 'hi fred'
-     */
-    var partial = baseRest(function(func, partials) {
-      var holders = replaceHolders(partials, getHolder(partial));
-      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);
-    });
-
-    /**
-     * This method is like `_.partial` except that partially applied arguments
-     * are appended to the arguments it receives.
-     *
-     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic
-     * builds, may be used as a placeholder for partially applied arguments.
-     *
-     * **Note:** This method doesn't set the "length" property of partially
-     * applied functions.
-     *
-     * @static
-     * @memberOf _
-     * @since 1.0.0
-     * @category Function
-     * @param {Function} func The function to partially apply arguments to.
-     * @param {...*} [partials] The arguments to be partially applied.
-     * @returns {Function} Returns the new partially applied function.
-     * @example
-     *
-     * function greet(greeting, name) {
-     *   return greeting + ' ' + name;
-     * }
-     *
-     * var greetFred = _.partialRight(greet, 'fred');
-     * greetFred('hi');
-     * // => 'hi fred'
-     *
-     * // Partially applied with placeholders.
-     * var sayHelloTo = _.partialRight(greet, 'hello', _);
-     * sayHelloTo('fred');
-     * // => 'hello fred'
-     */
-    var partialRight = baseRest(function(func, partials) {
-      var holders = replaceHolders(partials, getHolder(partialRight));
-      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);
-    });
-
-    /**
-     * Creates a function that invokes `func` with arguments arranged according
-     * to the specified `indexes` where the argument value at the first index is
-     * provided as the first argument, the argument value at the second index is
-     * provided as the second argument, and so on.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Function
-     * @param {Function} func The function to rearrange arguments for.
-     * @param {...(number|number[])} indexes The arranged argument indexes.
-     * @returns {Function} Returns the new function.
-     * @example
-     *
-     * var rearged = _.rearg(function(a, b, c) {
-     *   return [a, b, c];
-     * }, [2, 0, 1]);
-     *
-     * rearged('b', 'c', 'a')
-     * // => ['a', 'b', 'c']
-     */
-    var rearg = flatRest(function(func, indexes) {
-      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);
-    });
-
-    /**
-     * Creates a function that invokes `func` with the `this` binding of the
-     * created function and arguments from `start` and beyond provided as
-     * an array.
-     *
-     * **Note:** This method is based on the
-     * [rest parameter](https://mdn.io/rest_parameters).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Function
-     * @param {Function} func The function to apply a rest parameter to.
-     * @param {number} [start=func.length-1] The start position of the rest parameter.
-     * @returns {Function} Returns the new function.
-     * @example
-     *
-     * var say = _.rest(function(what, names) {
-     *   return what + ' ' + _.initial(names).join(', ') +
-     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);
-     * });
-     *
-     * say('hello', 'fred', 'barney', 'pebbles');
-     * // => 'hello fred, barney, & pebbles'
-     */
-    function rest(func, start) {
-      if (typeof func != 'function') {
-        throw new TypeError(FUNC_ERROR_TEXT);
-      }
-      start = start === undefined ? start : toInteger(start);
-      return baseRest(func, start);
-    }
-
-    /**
-     * Creates a function that invokes `func` with the `this` binding of the
-     * create function and an array of arguments much like
-     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).
-     *
-     * **Note:** This method is based on the
-     * [spread operator](https://mdn.io/spread_operator).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.2.0
-     * @category Function
-     * @param {Function} func The function to spread arguments over.
-     * @param {number} [start=0] The start position of the spread.
-     * @returns {Function} Returns the new function.
-     * @example
-     *
-     * var say = _.spread(function(who, what) {
-     *   return who + ' says ' + what;
-     * });
-     *
-     * say(['fred', 'hello']);
-     * // => 'fred says hello'
-     *
-     * var numbers = Promise.all([
-     *   Promise.resolve(40),
-     *   Promise.resolve(36)
-     * ]);
-     *
-     * numbers.then(_.spread(function(x, y) {
-     *   return x + y;
-     * }));
-     * // => a Promise of 76
-     */
-    function spread(func, start) {
-      if (typeof func != 'function') {
-        throw new TypeError(FUNC_ERROR_TEXT);
-      }
-      start = start == null ? 0 : nativeMax(toInteger(start), 0);
-      return baseRest(function(args) {
-        var array = args[start],
-            otherArgs = castSlice(args, 0, start);
-
-        if (array) {
-          arrayPush(otherArgs, array);
-        }
-        return apply(func, this, otherArgs);
-      });
-    }
-
-    /**
-     * Creates a throttled function that only invokes `func` at most once per
-     * every `wait` milliseconds. The throttled function comes with a `cancel`
-     * method to cancel delayed `func` invocations and a `flush` method to
-     * immediately invoke them. Provide `options` to indicate whether `func`
-     * should be invoked on the leading and/or trailing edge of the `wait`
-     * timeout. The `func` is invoked with the last arguments provided to the
-     * throttled function. Subsequent calls to the throttled function return the
-     * result of the last `func` invocation.
-     *
-     * **Note:** If `leading` and `trailing` options are `true`, `func` is
-     * invoked on the trailing edge of the timeout only if the throttled function
-     * is invoked more than once during the `wait` timeout.
-     *
-     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred
-     * until to the next tick, similar to `setTimeout` with a timeout of `0`.
-     *
-     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)
-     * for details over the differences between `_.throttle` and `_.debounce`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Function
-     * @param {Function} func The function to throttle.
-     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.
-     * @param {Object} [options={}] The options object.
-     * @param {boolean} [options.leading=true]
-     *  Specify invoking on the leading edge of the timeout.
-     * @param {boolean} [options.trailing=true]
-     *  Specify invoking on the trailing edge of the timeout.
-     * @returns {Function} Returns the new throttled function.
-     * @example
-     *
-     * // Avoid excessively updating the position while scrolling.
-     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));
-     *
-     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.
-     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });
-     * jQuery(element).on('click', throttled);
-     *
-     * // Cancel the trailing throttled invocation.
-     * jQuery(window).on('popstate', throttled.cancel);
-     */
-    function throttle(func, wait, options) {
-      var leading = true,
-          trailing = true;
-
-      if (typeof func != 'function') {
-        throw new TypeError(FUNC_ERROR_TEXT);
-      }
-      if (isObject(options)) {
-        leading = 'leading' in options ? !!options.leading : leading;
-        trailing = 'trailing' in options ? !!options.trailing : trailing;
-      }
-      return debounce(func, wait, {
-        'leading': leading,
-        'maxWait': wait,
-        'trailing': trailing
-      });
-    }
-
-    /**
-     * Creates a function that accepts up to one argument, ignoring any
-     * additional arguments.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Function
-     * @param {Function} func The function to cap arguments for.
-     * @returns {Function} Returns the new capped function.
-     * @example
-     *
-     * _.map(['6', '8', '10'], _.unary(parseInt));
-     * // => [6, 8, 10]
-     */
-    function unary(func) {
-      return ary(func, 1);
-    }
-
-    /**
-     * Creates a function that provides `value` to `wrapper` as its first
-     * argument. Any additional arguments provided to the function are appended
-     * to those provided to the `wrapper`. The wrapper is invoked with the `this`
-     * binding of the created function.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Function
-     * @param {*} value The value to wrap.
-     * @param {Function} [wrapper=identity] The wrapper function.
-     * @returns {Function} Returns the new function.
-     * @example
-     *
-     * var p = _.wrap(_.escape, function(func, text) {
-     *   return '<p>' + func(text) + '</p>';
-     * });
-     *
-     * p('fred, barney, & pebbles');
-     * // => '<p>fred, barney, & pebbles</p>'
-     */
-    function wrap(value, wrapper) {
-      return partial(castFunction(wrapper), value);
-    }
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Casts `value` as an array if it's not one.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.4.0
-     * @category Lang
-     * @param {*} value The value to inspect.
-     * @returns {Array} Returns the cast array.
-     * @example
-     *
-     * _.castArray(1);
-     * // => [1]
-     *
-     * _.castArray({ 'a': 1 });
-     * // => [{ 'a': 1 }]
-     *
-     * _.castArray('abc');
-     * // => ['abc']
-     *
-     * _.castArray(null);
-     * // => [null]
-     *
-     * _.castArray(undefined);
-     * // => [undefined]
-     *
-     * _.castArray();
-     * // => []
-     *
-     * var array = [1, 2, 3];
-     * console.log(_.castArray(array) === array);
-     * // => true
-     */
-    function castArray() {
-      if (!arguments.length) {
-        return [];
-      }
-      var value = arguments[0];
-      return isArray(value) ? value : [value];
-    }
-
-    /**
-     * Creates a shallow clone of `value`.
-     *
-     * **Note:** This method is loosely based on the
-     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
-     * and supports cloning arrays, array buffers, booleans, date objects, maps,
-     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
-     * arrays. The own enumerable properties of `arguments` objects are cloned
-     * as plain objects. An empty object is returned for uncloneable values such
-     * as error objects, functions, DOM nodes, and WeakMaps.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to clone.
-     * @returns {*} Returns the cloned value.
-     * @see _.cloneDeep
-     * @example
-     *
-     * var objects = [{ 'a': 1 }, { 'b': 2 }];
-     *
-     * var shallow = _.clone(objects);
-     * console.log(shallow[0] === objects[0]);
-     * // => true
-     */
-    function clone(value) {
-      return baseClone(value, CLONE_SYMBOLS_FLAG);
-    }
-
-    /**
-     * This method is like `_.clone` except that it accepts `customizer` which
-     * is invoked to produce the cloned value. If `customizer` returns `undefined`,
-     * cloning is handled by the method instead. The `customizer` is invoked with
-     * up to four arguments; (value [, index|key, object, stack]).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to clone.
-     * @param {Function} [customizer] The function to customize cloning.
-     * @returns {*} Returns the cloned value.
-     * @see _.cloneDeepWith
-     * @example
-     *
-     * function customizer(value) {
-     *   if (_.isElement(value)) {
-     *     return value.cloneNode(false);
-     *   }
-     * }
-     *
-     * var el = _.cloneWith(document.body, customizer);
-     *
-     * console.log(el === document.body);
-     * // => false
-     * console.log(el.nodeName);
-     * // => 'BODY'
-     * console.log(el.childNodes.length);
-     * // => 0
-     */
-    function cloneWith(value, customizer) {
-      customizer = typeof customizer == 'function' ? customizer : undefined;
-      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);
-    }
-
-    /**
-     * This method is like `_.clone` except that it recursively clones `value`.
-     *
-     * @static
-     * @memberOf _
-     * @since 1.0.0
-     * @category Lang
-     * @param {*} value The value to recursively clone.
-     * @returns {*} Returns the deep cloned value.
-     * @see _.clone
-     * @example
-     *
-     * var objects = [{ 'a': 1 }, { 'b': 2 }];
-     *
-     * var deep = _.cloneDeep(objects);
-     * console.log(deep[0] === objects[0]);
-     * // => false
-     */
-    function cloneDeep(value) {
-      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
-    }
-
-    /**
-     * This method is like `_.cloneWith` except that it recursively clones `value`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to recursively clone.
-     * @param {Function} [customizer] The function to customize cloning.
-     * @returns {*} Returns the deep cloned value.
-     * @see _.cloneWith
-     * @example
-     *
-     * function customizer(value) {
-     *   if (_.isElement(value)) {
-     *     return value.cloneNode(true);
-     *   }
-     * }
-     *
-     * var el = _.cloneDeepWith(document.body, customizer);
-     *
-     * console.log(el === document.body);
-     * // => false
-     * console.log(el.nodeName);
-     * // => 'BODY'
-     * console.log(el.childNodes.length);
-     * // => 20
-     */
-    function cloneDeepWith(value, customizer) {
-      customizer = typeof customizer == 'function' ? customizer : undefined;
-      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);
-    }
-
-    /**
-     * Checks if `object` conforms to `source` by invoking the predicate
-     * properties of `source` with the corresponding property values of `object`.
-     *
-     * **Note:** This method is equivalent to `_.conforms` when `source` is
-     * partially applied.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.14.0
-     * @category Lang
-     * @param {Object} object The object to inspect.
-     * @param {Object} source The object of property predicates to conform to.
-     * @returns {boolean} Returns `true` if `object` conforms, else `false`.
-     * @example
-     *
-     * var object = { 'a': 1, 'b': 2 };
-     *
-     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });
-     * // => true
-     *
-     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });
-     * // => false
-     */
-    function conformsTo(object, source) {
-      return source == null || baseConformsTo(object, source, keys(source));
-    }
-
-    /**
-     * Performs a
-     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
-     * comparison between two values to determine if they are equivalent.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to compare.
-     * @param {*} other The other value to compare.
-     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
-     * @example
-     *
-     * var object = { 'a': 1 };
-     * var other = { 'a': 1 };
-     *
-     * _.eq(object, object);
-     * // => true
-     *
-     * _.eq(object, other);
-     * // => false
-     *
-     * _.eq('a', 'a');
-     * // => true
-     *
-     * _.eq('a', Object('a'));
-     * // => false
-     *
-     * _.eq(NaN, NaN);
-     * // => true
-     */
-    function eq(value, other) {
-      return value === other || (value !== value && other !== other);
-    }
-
-    /**
-     * Checks if `value` is greater than `other`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.9.0
-     * @category Lang
-     * @param {*} value The value to compare.
-     * @param {*} other The other value to compare.
-     * @returns {boolean} Returns `true` if `value` is greater than `other`,
-     *  else `false`.
-     * @see _.lt
-     * @example
-     *
-     * _.gt(3, 1);
-     * // => true
-     *
-     * _.gt(3, 3);
-     * // => false
-     *
-     * _.gt(1, 3);
-     * // => false
-     */
-    var gt = createRelationalOperation(baseGt);
-
-    /**
-     * Checks if `value` is greater than or equal to `other`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.9.0
-     * @category Lang
-     * @param {*} value The value to compare.
-     * @param {*} other The other value to compare.
-     * @returns {boolean} Returns `true` if `value` is greater than or equal to
-     *  `other`, else `false`.
-     * @see _.lte
-     * @example
-     *
-     * _.gte(3, 1);
-     * // => true
-     *
-     * _.gte(3, 3);
-     * // => true
-     *
-     * _.gte(1, 3);
-     * // => false
-     */
-    var gte = createRelationalOperation(function(value, other) {
-      return value >= other;
-    });
-
-    /**
-     * Checks if `value` is likely an `arguments` object.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is an `arguments` object,
-     *  else `false`.
-     * @example
-     *
-     * _.isArguments(function() { return arguments; }());
-     * // => true
-     *
-     * _.isArguments([1, 2, 3]);
-     * // => false
-     */
-    var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {
-      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&
-        !propertyIsEnumerable.call(value, 'callee');
-    };
-
-    /**
-     * Checks if `value` is classified as an `Array` object.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is an array, else `false`.
-     * @example
-     *
-     * _.isArray([1, 2, 3]);
-     * // => true
-     *
-     * _.isArray(document.body.children);
-     * // => false
-     *
-     * _.isArray('abc');
-     * // => false
-     *
-     * _.isArray(_.noop);
-     * // => false
-     */
-    var isArray = Array.isArray;
-
-    /**
-     * Checks if `value` is classified as an `ArrayBuffer` object.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.3.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.
-     * @example
-     *
-     * _.isArrayBuffer(new ArrayBuffer(2));
-     * // => true
-     *
-     * _.isArrayBuffer(new Array(2));
-     * // => false
-     */
-    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;
-
-    /**
-     * Checks if `value` is array-like. A value is considered array-like if it's
-     * not a function and has a `value.length` that's an integer greater than or
-     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
-     * @example
-     *
-     * _.isArrayLike([1, 2, 3]);
-     * // => true
-     *
-     * _.isArrayLike(document.body.children);
-     * // => true
-     *
-     * _.isArrayLike('abc');
-     * // => true
-     *
-     * _.isArrayLike(_.noop);
-     * // => false
-     */
-    function isArrayLike(value) {
-      return value != null && isLength(value.length) && !isFunction(value);
-    }
-
-    /**
-     * This method is like `_.isArrayLike` except that it also checks if `value`
-     * is an object.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is an array-like object,
-     *  else `false`.
-     * @example
-     *
-     * _.isArrayLikeObject([1, 2, 3]);
-     * // => true
-     *
-     * _.isArrayLikeObject(document.body.children);
-     * // => true
-     *
-     * _.isArrayLikeObject('abc');
-     * // => false
-     *
-     * _.isArrayLikeObject(_.noop);
-     * // => false
-     */
-    function isArrayLikeObject(value) {
-      return isObjectLike(value) && isArrayLike(value);
-    }
-
-    /**
-     * Checks if `value` is classified as a boolean primitive or object.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.
-     * @example
-     *
-     * _.isBoolean(false);
-     * // => true
-     *
-     * _.isBoolean(null);
-     * // => false
-     */
-    function isBoolean(value) {
-      return value === true || value === false ||
-        (isObjectLike(value) && baseGetTag(value) == boolTag);
-    }
-
-    /**
-     * Checks if `value` is a buffer.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.3.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
-     * @example
-     *
-     * _.isBuffer(new Buffer(2));
-     * // => true
-     *
-     * _.isBuffer(new Uint8Array(2));
-     * // => false
-     */
-    var isBuffer = nativeIsBuffer || stubFalse;
-
-    /**
-     * Checks if `value` is classified as a `Date` object.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.
-     * @example
-     *
-     * _.isDate(new Date);
-     * // => true
-     *
-     * _.isDate('Mon April 23 2012');
-     * // => false
-     */
-    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;
-
-    /**
-     * Checks if `value` is likely a DOM element.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.
-     * @example
-     *
-     * _.isElement(document.body);
-     * // => true
-     *
-     * _.isElement('<body>');
-     * // => false
-     */
-    function isElement(value) {
-      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);
-    }
-
-    /**
-     * Checks if `value` is an empty object, collection, map, or set.
-     *
-     * Objects are considered empty if they have no own enumerable string keyed
-     * properties.
-     *
-     * Array-like values such as `arguments` objects, arrays, buffers, strings, or
-     * jQuery-like collections are considered empty if they have a `length` of `0`.
-     * Similarly, maps and sets are considered empty if they have a `size` of `0`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is empty, else `false`.
-     * @example
-     *
-     * _.isEmpty(null);
-     * // => true
-     *
-     * _.isEmpty(true);
-     * // => true
-     *
-     * _.isEmpty(1);
-     * // => true
-     *
-     * _.isEmpty([1, 2, 3]);
-     * // => false
-     *
-     * _.isEmpty({ 'a': 1 });
-     * // => false
-     */
-    function isEmpty(value) {
-      if (value == null) {
-        return true;
-      }
-      if (isArrayLike(value) &&
-          (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' ||
-            isBuffer(value) || isTypedArray(value) || isArguments(value))) {
-        return !value.length;
-      }
-      var tag = getTag(value);
-      if (tag == mapTag || tag == setTag) {
-        return !value.size;
-      }
-      if (isPrototype(value)) {
-        return !baseKeys(value).length;
-      }
-      for (var key in value) {
-        if (hasOwnProperty.call(value, key)) {
-          return false;
-        }
-      }
-      return true;
-    }
-
-    /**
-     * Performs a deep comparison between two values to determine if they are
-     * equivalent.
-     *
-     * **Note:** This method supports comparing arrays, array buffers, booleans,
-     * date objects, error objects, maps, numbers, `Object` objects, regexes,
-     * sets, strings, symbols, and typed arrays. `Object` objects are compared
-     * by their own, not inherited, enumerable properties. Functions and DOM
-     * nodes are compared by strict equality, i.e. `===`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to compare.
-     * @param {*} other The other value to compare.
-     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
-     * @example
-     *
-     * var object = { 'a': 1 };
-     * var other = { 'a': 1 };
-     *
-     * _.isEqual(object, other);
-     * // => true
-     *
-     * object === other;
-     * // => false
-     */
-    function isEqual(value, other) {
-      return baseIsEqual(value, other);
-    }
-
-    /**
-     * This method is like `_.isEqual` except that it accepts `customizer` which
-     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
-     * are handled by the method instead. The `customizer` is invoked with up to
-     * six arguments: (objValue, othValue [, index|key, object, other, stack]).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to compare.
-     * @param {*} other The other value to compare.
-     * @param {Function} [customizer] The function to customize comparisons.
-     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
-     * @example
-     *
-     * function isGreeting(value) {
-     *   return /^h(?:i|ello)$/.test(value);
-     * }
-     *
-     * function customizer(objValue, othValue) {
-     *   if (isGreeting(objValue) && isGreeting(othValue)) {
-     *     return true;
-     *   }
-     * }
-     *
-     * var array = ['hello', 'goodbye'];
-     * var other = ['hi', 'goodbye'];
-     *
-     * _.isEqualWith(array, other, customizer);
-     * // => true
-     */
-    function isEqualWith(value, other, customizer) {
-      customizer = typeof customizer == 'function' ? customizer : undefined;
-      var result = customizer ? customizer(value, other) : undefined;
-      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;
-    }
-
-    /**
-     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,
-     * `SyntaxError`, `TypeError`, or `URIError` object.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.
-     * @example
-     *
-     * _.isError(new Error);
-     * // => true
-     *
-     * _.isError(Error);
-     * // => false
-     */
-    function isError(value) {
-      if (!isObjectLike(value)) {
-        return false;
-      }
-      var tag = baseGetTag(value);
-      return tag == errorTag || tag == domExcTag ||
-        (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value));
-    }
-
-    /**
-     * Checks if `value` is a finite primitive number.
-     *
-     * **Note:** This method is based on
-     * [`Number.isFinite`](https://mdn.io/Number/isFinite).
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.
-     * @example
-     *
-     * _.isFinite(3);
-     * // => true
-     *
-     * _.isFinite(Number.MIN_VALUE);
-     * // => true
-     *
-     * _.isFinite(Infinity);
-     * // => false
-     *
-     * _.isFinite('3');
-     * // => false
-     */
-    function isFinite(value) {
-      return typeof value == 'number' && nativeIsFinite(value);
-    }
-
-    /**
-     * Checks if `value` is classified as a `Function` object.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a function, else `false`.
-     * @example
-     *
-     * _.isFunction(_);
-     * // => true
-     *
-     * _.isFunction(/abc/);
-     * // => false
-     */
-    function isFunction(value) {
-      if (!isObject(value)) {
-        return false;
-      }
-      // The use of `Object#toString` avoids issues with the `typeof` operator
-      // in Safari 9 which returns 'object' for typed arrays and other constructors.
-      var tag = baseGetTag(value);
-      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
-    }
-
-    /**
-     * Checks if `value` is an integer.
-     *
-     * **Note:** This method is based on
-     * [`Number.isInteger`](https://mdn.io/Number/isInteger).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.
-     * @example
-     *
-     * _.isInteger(3);
-     * // => true
-     *
-     * _.isInteger(Number.MIN_VALUE);
-     * // => false
-     *
-     * _.isInteger(Infinity);
-     * // => false
-     *
-     * _.isInteger('3');
-     * // => false
-     */
-    function isInteger(value) {
-      return typeof value == 'number' && value == toInteger(value);
-    }
-
-    /**
-     * Checks if `value` is a valid array-like length.
-     *
-     * **Note:** This method is loosely based on
-     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
-     * @example
-     *
-     * _.isLength(3);
-     * // => true
-     *
-     * _.isLength(Number.MIN_VALUE);
-     * // => false
-     *
-     * _.isLength(Infinity);
-     * // => false
-     *
-     * _.isLength('3');
-     * // => false
-     */
-    function isLength(value) {
-      return typeof value == 'number' &&
-        value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
-    }
-
-    /**
-     * Checks if `value` is the
-     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
-     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is an object, else `false`.
-     * @example
-     *
-     * _.isObject({});
-     * // => true
-     *
-     * _.isObject([1, 2, 3]);
-     * // => true
-     *
-     * _.isObject(_.noop);
-     * // => true
-     *
-     * _.isObject(null);
-     * // => false
-     */
-    function isObject(value) {
-      var type = typeof value;
-      return value != null && (type == 'object' || type == 'function');
-    }
-
-    /**
-     * Checks if `value` is object-like. A value is object-like if it's not `null`
-     * and has a `typeof` result of "object".
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
-     * @example
-     *
-     * _.isObjectLike({});
-     * // => true
-     *
-     * _.isObjectLike([1, 2, 3]);
-     * // => true
-     *
-     * _.isObjectLike(_.noop);
-     * // => false
-     *
-     * _.isObjectLike(null);
-     * // => false
-     */
-    function isObjectLike(value) {
-      return value != null && typeof value == 'object';
-    }
-
-    /**
-     * Checks if `value` is classified as a `Map` object.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.3.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a map, else `false`.
-     * @example
-     *
-     * _.isMap(new Map);
-     * // => true
-     *
-     * _.isMap(new WeakMap);
-     * // => false
-     */
-    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;
-
-    /**
-     * Performs a partial deep comparison between `object` and `source` to
-     * determine if `object` contains equivalent property values.
-     *
-     * **Note:** This method is equivalent to `_.matches` when `source` is
-     * partially applied.
-     *
-     * Partial comparisons will match empty array and empty object `source`
-     * values against any array or object value, respectively. See `_.isEqual`
-     * for a list of supported value comparisons.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Lang
-     * @param {Object} object The object to inspect.
-     * @param {Object} source The object of property values to match.
-     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
-     * @example
-     *
-     * var object = { 'a': 1, 'b': 2 };
-     *
-     * _.isMatch(object, { 'b': 2 });
-     * // => true
-     *
-     * _.isMatch(object, { 'b': 1 });
-     * // => false
-     */
-    function isMatch(object, source) {
-      return object === source || baseIsMatch(object, source, getMatchData(source));
-    }
-
-    /**
-     * This method is like `_.isMatch` except that it accepts `customizer` which
-     * is invoked to compare values. If `customizer` returns `undefined`, comparisons
-     * are handled by the method instead. The `customizer` is invoked with five
-     * arguments: (objValue, srcValue, index|key, object, source).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {Object} object The object to inspect.
-     * @param {Object} source The object of property values to match.
-     * @param {Function} [customizer] The function to customize comparisons.
-     * @returns {boolean} Returns `true` if `object` is a match, else `false`.
-     * @example
-     *
-     * function isGreeting(value) {
-     *   return /^h(?:i|ello)$/.test(value);
-     * }
-     *
-     * function customizer(objValue, srcValue) {
-     *   if (isGreeting(objValue) && isGreeting(srcValue)) {
-     *     return true;
-     *   }
-     * }
-     *
-     * var object = { 'greeting': 'hello' };
-     * var source = { 'greeting': 'hi' };
-     *
-     * _.isMatchWith(object, source, customizer);
-     * // => true
-     */
-    function isMatchWith(object, source, customizer) {
-      customizer = typeof customizer == 'function' ? customizer : undefined;
-      return baseIsMatch(object, source, getMatchData(source), customizer);
-    }
-
-    /**
-     * Checks if `value` is `NaN`.
-     *
-     * **Note:** This method is based on
-     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as
-     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for
-     * `undefined` and other non-number values.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
-     * @example
-     *
-     * _.isNaN(NaN);
-     * // => true
-     *
-     * _.isNaN(new Number(NaN));
-     * // => true
-     *
-     * isNaN(undefined);
-     * // => true
-     *
-     * _.isNaN(undefined);
-     * // => false
-     */
-    function isNaN(value) {
-      // An `NaN` primitive is the only value that is not equal to itself.
-      // Perform the `toStringTag` check first to avoid errors with some
-      // ActiveX objects in IE.
-      return isNumber(value) && value != +value;
-    }
-
-    /**
-     * Checks if `value` is a pristine native function.
-     *
-     * **Note:** This method can't reliably detect native functions in the presence
-     * of the core-js package because core-js circumvents this kind of detection.
-     * Despite multiple requests, the core-js maintainer has made it clear: any
-     * attempt to fix the detection will be obstructed. As a result, we're left
-     * with little choice but to throw an error. Unfortunately, this also affects
-     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),
-     * which rely on core-js.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a native function,
-     *  else `false`.
-     * @example
-     *
-     * _.isNative(Array.prototype.push);
-     * // => true
-     *
-     * _.isNative(_);
-     * // => false
-     */
-    function isNative(value) {
-      if (isMaskable(value)) {
-        throw new Error(CORE_ERROR_TEXT);
-      }
-      return baseIsNative(value);
-    }
-
-    /**
-     * Checks if `value` is `null`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.
-     * @example
-     *
-     * _.isNull(null);
-     * // => true
-     *
-     * _.isNull(void 0);
-     * // => false
-     */
-    function isNull(value) {
-      return value === null;
-    }
-
-    /**
-     * Checks if `value` is `null` or `undefined`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.
-     * @example
-     *
-     * _.isNil(null);
-     * // => true
-     *
-     * _.isNil(void 0);
-     * // => true
-     *
-     * _.isNil(NaN);
-     * // => false
-     */
-    function isNil(value) {
-      return value == null;
-    }
-
-    /**
-     * Checks if `value` is classified as a `Number` primitive or object.
-     *
-     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are
-     * classified as numbers, use the `_.isFinite` method.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a number, else `false`.
-     * @example
-     *
-     * _.isNumber(3);
-     * // => true
-     *
-     * _.isNumber(Number.MIN_VALUE);
-     * // => true
-     *
-     * _.isNumber(Infinity);
-     * // => true
-     *
-     * _.isNumber('3');
-     * // => false
-     */
-    function isNumber(value) {
-      return typeof value == 'number' ||
-        (isObjectLike(value) && baseGetTag(value) == numberTag);
-    }
-
-    /**
-     * Checks if `value` is a plain object, that is, an object created by the
-     * `Object` constructor or one with a `[[Prototype]]` of `null`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.8.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
-     * @example
-     *
-     * function Foo() {
-     *   this.a = 1;
-     * }
-     *
-     * _.isPlainObject(new Foo);
-     * // => false
-     *
-     * _.isPlainObject([1, 2, 3]);
-     * // => false
-     *
-     * _.isPlainObject({ 'x': 0, 'y': 0 });
-     * // => true
-     *
-     * _.isPlainObject(Object.create(null));
-     * // => true
-     */
-    function isPlainObject(value) {
-      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {
-        return false;
-      }
-      var proto = getPrototype(value);
-      if (proto === null) {
-        return true;
-      }
-      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
-      return typeof Ctor == 'function' && Ctor instanceof Ctor &&
-        funcToString.call(Ctor) == objectCtorString;
-    }
-
-    /**
-     * Checks if `value` is classified as a `RegExp` object.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.1.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.
-     * @example
-     *
-     * _.isRegExp(/abc/);
-     * // => true
-     *
-     * _.isRegExp('/abc/');
-     * // => false
-     */
-    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;
-
-    /**
-     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754
-     * double precision number which isn't the result of a rounded unsafe integer.
-     *
-     * **Note:** This method is based on
-     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.
-     * @example
-     *
-     * _.isSafeInteger(3);
-     * // => true
-     *
-     * _.isSafeInteger(Number.MIN_VALUE);
-     * // => false
-     *
-     * _.isSafeInteger(Infinity);
-     * // => false
-     *
-     * _.isSafeInteger('3');
-     * // => false
-     */
-    function isSafeInteger(value) {
-      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;
-    }
-
-    /**
-     * Checks if `value` is classified as a `Set` object.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.3.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a set, else `false`.
-     * @example
-     *
-     * _.isSet(new Set);
-     * // => true
-     *
-     * _.isSet(new WeakSet);
-     * // => false
-     */
-    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
-
-    /**
-     * Checks if `value` is classified as a `String` primitive or object.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a string, else `false`.
-     * @example
-     *
-     * _.isString('abc');
-     * // => true
-     *
-     * _.isString(1);
-     * // => false
-     */
-    function isString(value) {
-      return typeof value == 'string' ||
-        (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag);
-    }
-
-    /**
-     * Checks if `value` is classified as a `Symbol` primitive or object.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
-     * @example
-     *
-     * _.isSymbol(Symbol.iterator);
-     * // => true
-     *
-     * _.isSymbol('abc');
-     * // => false
-     */
-    function isSymbol(value) {
-      return typeof value == 'symbol' ||
-        (isObjectLike(value) && baseGetTag(value) == symbolTag);
-    }
-
-    /**
-     * Checks if `value` is classified as a typed array.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
-     * @example
-     *
-     * _.isTypedArray(new Uint8Array);
-     * // => true
-     *
-     * _.isTypedArray([]);
-     * // => false
-     */
-    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
-
-    /**
-     * Checks if `value` is `undefined`.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
-     * @example
-     *
-     * _.isUndefined(void 0);
-     * // => true
-     *
-     * _.isUndefined(null);
-     * // => false
-     */
-    function isUndefined(value) {
-      return value === undefined;
-    }
-
-    /**
-     * Checks if `value` is classified as a `WeakMap` object.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.3.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.
-     * @example
-     *
-     * _.isWeakMap(new WeakMap);
-     * // => true
-     *
-     * _.isWeakMap(new Map);
-     * // => false
-     */
-    function isWeakMap(value) {
-      return isObjectLike(value) && getTag(value) == weakMapTag;
-    }
-
-    /**
-     * Checks if `value` is classified as a `WeakSet` object.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.3.0
-     * @category Lang
-     * @param {*} value The value to check.
-     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.
-     * @example
-     *
-     * _.isWeakSet(new WeakSet);
-     * // => true
-     *
-     * _.isWeakSet(new Set);
-     * // => false
-     */
-    function isWeakSet(value) {
-      return isObjectLike(value) && baseGetTag(value) == weakSetTag;
-    }
-
-    /**
-     * Checks if `value` is less than `other`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.9.0
-     * @category Lang
-     * @param {*} value The value to compare.
-     * @param {*} other The other value to compare.
-     * @returns {boolean} Returns `true` if `value` is less than `other`,
-     *  else `false`.
-     * @see _.gt
-     * @example
-     *
-     * _.lt(1, 3);
-     * // => true
-     *
-     * _.lt(3, 3);
-     * // => false
-     *
-     * _.lt(3, 1);
-     * // => false
-     */
-    var lt = createRelationalOperation(baseLt);
-
-    /**
-     * Checks if `value` is less than or equal to `other`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.9.0
-     * @category Lang
-     * @param {*} value The value to compare.
-     * @param {*} other The other value to compare.
-     * @returns {boolean} Returns `true` if `value` is less than or equal to
-     *  `other`, else `false`.
-     * @see _.gte
-     * @example
-     *
-     * _.lte(1, 3);
-     * // => true
-     *
-     * _.lte(3, 3);
-     * // => true
-     *
-     * _.lte(3, 1);
-     * // => false
-     */
-    var lte = createRelationalOperation(function(value, other) {
-      return value <= other;
-    });
-
-    /**
-     * Converts `value` to an array.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Lang
-     * @param {*} value The value to convert.
-     * @returns {Array} Returns the converted array.
-     * @example
-     *
-     * _.toArray({ 'a': 1, 'b': 2 });
-     * // => [1, 2]
-     *
-     * _.toArray('abc');
-     * // => ['a', 'b', 'c']
-     *
-     * _.toArray(1);
-     * // => []
-     *
-     * _.toArray(null);
-     * // => []
-     */
-    function toArray(value) {
-      if (!value) {
-        return [];
-      }
-      if (isArrayLike(value)) {
-        return isString(value) ? stringToArray(value) : copyArray(value);
-      }
-      if (symIterator && value[symIterator]) {
-        return iteratorToArray(value[symIterator]());
-      }
-      var tag = getTag(value),
-          func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values);
-
-      return func(value);
-    }
-
-    /**
-     * Converts `value` to a finite number.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.12.0
-     * @category Lang
-     * @param {*} value The value to convert.
-     * @returns {number} Returns the converted number.
-     * @example
-     *
-     * _.toFinite(3.2);
-     * // => 3.2
-     *
-     * _.toFinite(Number.MIN_VALUE);
-     * // => 5e-324
-     *
-     * _.toFinite(Infinity);
-     * // => 1.7976931348623157e+308
-     *
-     * _.toFinite('3.2');
-     * // => 3.2
-     */
-    function toFinite(value) {
-      if (!value) {
-        return value === 0 ? value : 0;
-      }
-      value = toNumber(value);
-      if (value === INFINITY || value === -INFINITY) {
-        var sign = (value < 0 ? -1 : 1);
-        return sign * MAX_INTEGER;
-      }
-      return value === value ? value : 0;
-    }
-
-    /**
-     * Converts `value` to an integer.
-     *
-     * **Note:** This method is loosely based on
-     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to convert.
-     * @returns {number} Returns the converted integer.
-     * @example
-     *
-     * _.toInteger(3.2);
-     * // => 3
-     *
-     * _.toInteger(Number.MIN_VALUE);
-     * // => 0
-     *
-     * _.toInteger(Infinity);
-     * // => 1.7976931348623157e+308
-     *
-     * _.toInteger('3.2');
-     * // => 3
-     */
-    function toInteger(value) {
-      var result = toFinite(value),
-          remainder = result % 1;
-
-      return result === result ? (remainder ? result - remainder : result) : 0;
-    }
-
-    /**
-     * Converts `value` to an integer suitable for use as the length of an
-     * array-like object.
-     *
-     * **Note:** This method is based on
-     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to convert.
-     * @returns {number} Returns the converted integer.
-     * @example
-     *
-     * _.toLength(3.2);
-     * // => 3
-     *
-     * _.toLength(Number.MIN_VALUE);
-     * // => 0
-     *
-     * _.toLength(Infinity);
-     * // => 4294967295
-     *
-     * _.toLength('3.2');
-     * // => 3
-     */
-    function toLength(value) {
-      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;
-    }
-
-    /**
-     * Converts `value` to a number.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to process.
-     * @returns {number} Returns the number.
-     * @example
-     *
-     * _.toNumber(3.2);
-     * // => 3.2
-     *
-     * _.toNumber(Number.MIN_VALUE);
-     * // => 5e-324
-     *
-     * _.toNumber(Infinity);
-     * // => Infinity
-     *
-     * _.toNumber('3.2');
-     * // => 3.2
-     */
-    function toNumber(value) {
-      if (typeof value == 'number') {
-        return value;
-      }
-      if (isSymbol(value)) {
-        return NAN;
-      }
-      if (isObject(value)) {
-        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
-        value = isObject(other) ? (other + '') : other;
-      }
-      if (typeof value != 'string') {
-        return value === 0 ? value : +value;
-      }
-      value = baseTrim(value);
-      var isBinary = reIsBinary.test(value);
-      return (isBinary || reIsOctal.test(value))
-        ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
-        : (reIsBadHex.test(value) ? NAN : +value);
-    }
-
-    /**
-     * Converts `value` to a plain object flattening inherited enumerable string
-     * keyed properties of `value` to own properties of the plain object.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Lang
-     * @param {*} value The value to convert.
-     * @returns {Object} Returns the converted plain object.
-     * @example
-     *
-     * function Foo() {
-     *   this.b = 2;
-     * }
-     *
-     * Foo.prototype.c = 3;
-     *
-     * _.assign({ 'a': 1 }, new Foo);
-     * // => { 'a': 1, 'b': 2 }
-     *
-     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
-     * // => { 'a': 1, 'b': 2, 'c': 3 }
-     */
-    function toPlainObject(value) {
-      return copyObject(value, keysIn(value));
-    }
-
-    /**
-     * Converts `value` to a safe integer. A safe integer can be compared and
-     * represented correctly.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to convert.
-     * @returns {number} Returns the converted integer.
-     * @example
-     *
-     * _.toSafeInteger(3.2);
-     * // => 3
-     *
-     * _.toSafeInteger(Number.MIN_VALUE);
-     * // => 0
-     *
-     * _.toSafeInteger(Infinity);
-     * // => 9007199254740991
-     *
-     * _.toSafeInteger('3.2');
-     * // => 3
-     */
-    function toSafeInteger(value) {
-      return value
-        ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
-        : (value === 0 ? value : 0);
-    }
-
-    /**
-     * Converts `value` to a string. An empty string is returned for `null`
-     * and `undefined` values. The sign of `-0` is preserved.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Lang
-     * @param {*} value The value to convert.
-     * @returns {string} Returns the converted string.
-     * @example
-     *
-     * _.toString(null);
-     * // => ''
-     *
-     * _.toString(-0);
-     * // => '-0'
-     *
-     * _.toString([1, 2, 3]);
-     * // => '1,2,3'
-     */
-    function toString(value) {
-      return value == null ? '' : baseToString(value);
-    }
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Assigns own enumerable string keyed properties of source objects to the
-     * destination object. Source objects are applied from left to right.
-     * Subsequent sources overwrite property assignments of previous sources.
-     *
-     * **Note:** This method mutates `object` and is loosely based on
-     * [`Object.assign`](https://mdn.io/Object/assign).
-     *
-     * @static
-     * @memberOf _
-     * @since 0.10.0
-     * @category Object
-     * @param {Object} object The destination object.
-     * @param {...Object} [sources] The source objects.
-     * @returns {Object} Returns `object`.
-     * @see _.assignIn
-     * @example
-     *
-     * function Foo() {
-     *   this.a = 1;
-     * }
-     *
-     * function Bar() {
-     *   this.c = 3;
-     * }
-     *
-     * Foo.prototype.b = 2;
-     * Bar.prototype.d = 4;
-     *
-     * _.assign({ 'a': 0 }, new Foo, new Bar);
-     * // => { 'a': 1, 'c': 3 }
-     */
-    var assign = createAssigner(function(object, source) {
-      if (isPrototype(source) || isArrayLike(source)) {
-        copyObject(source, keys(source), object);
-        return;
-      }
-      for (var key in source) {
-        if (hasOwnProperty.call(source, key)) {
-          assignValue(object, key, source[key]);
-        }
-      }
-    });
-
-    /**
-     * This method is like `_.assign` except that it iterates over own and
-     * inherited source properties.
-     *
-     * **Note:** This method mutates `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @alias extend
-     * @category Object
-     * @param {Object} object The destination object.
-     * @param {...Object} [sources] The source objects.
-     * @returns {Object} Returns `object`.
-     * @see _.assign
-     * @example
-     *
-     * function Foo() {
-     *   this.a = 1;
-     * }
-     *
-     * function Bar() {
-     *   this.c = 3;
-     * }
-     *
-     * Foo.prototype.b = 2;
-     * Bar.prototype.d = 4;
-     *
-     * _.assignIn({ 'a': 0 }, new Foo, new Bar);
-     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }
-     */
-    var assignIn = createAssigner(function(object, source) {
-      copyObject(source, keysIn(source), object);
-    });
-
-    /**
-     * This method is like `_.assignIn` except that it accepts `customizer`
-     * which is invoked to produce the assigned values. If `customizer` returns
-     * `undefined`, assignment is handled by the method instead. The `customizer`
-     * is invoked with five arguments: (objValue, srcValue, key, object, source).
-     *
-     * **Note:** This method mutates `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @alias extendWith
-     * @category Object
-     * @param {Object} object The destination object.
-     * @param {...Object} sources The source objects.
-     * @param {Function} [customizer] The function to customize assigned values.
-     * @returns {Object} Returns `object`.
-     * @see _.assignWith
-     * @example
-     *
-     * function customizer(objValue, srcValue) {
-     *   return _.isUndefined(objValue) ? srcValue : objValue;
-     * }
-     *
-     * var defaults = _.partialRight(_.assignInWith, customizer);
-     *
-     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
-     * // => { 'a': 1, 'b': 2 }
-     */
-    var assignInWith = createAssigner(function(object, source, srcIndex, customizer) {
-      copyObject(source, keysIn(source), object, customizer);
-    });
-
-    /**
-     * This method is like `_.assign` except that it accepts `customizer`
-     * which is invoked to produce the assigned values. If `customizer` returns
-     * `undefined`, assignment is handled by the method instead. The `customizer`
-     * is invoked with five arguments: (objValue, srcValue, key, object, source).
-     *
-     * **Note:** This method mutates `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Object
-     * @param {Object} object The destination object.
-     * @param {...Object} sources The source objects.
-     * @param {Function} [customizer] The function to customize assigned values.
-     * @returns {Object} Returns `object`.
-     * @see _.assignInWith
-     * @example
-     *
-     * function customizer(objValue, srcValue) {
-     *   return _.isUndefined(objValue) ? srcValue : objValue;
-     * }
-     *
-     * var defaults = _.partialRight(_.assignWith, customizer);
-     *
-     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
-     * // => { 'a': 1, 'b': 2 }
-     */
-    var assignWith = createAssigner(function(object, source, srcIndex, customizer) {
-      copyObject(source, keys(source), object, customizer);
-    });
-
-    /**
-     * Creates an array of values corresponding to `paths` of `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 1.0.0
-     * @category Object
-     * @param {Object} object The object to iterate over.
-     * @param {...(string|string[])} [paths] The property paths to pick.
-     * @returns {Array} Returns the picked values.
-     * @example
-     *
-     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };
-     *
-     * _.at(object, ['a[0].b.c', 'a[1]']);
-     * // => [3, 4]
-     */
-    var at = flatRest(baseAt);
-
-    /**
-     * Creates an object that inherits from the `prototype` object. If a
-     * `properties` object is given, its own enumerable string keyed properties
-     * are assigned to the created object.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.3.0
-     * @category Object
-     * @param {Object} prototype The object to inherit from.
-     * @param {Object} [properties] The properties to assign to the object.
-     * @returns {Object} Returns the new object.
-     * @example
-     *
-     * function Shape() {
-     *   this.x = 0;
-     *   this.y = 0;
-     * }
-     *
-     * function Circle() {
-     *   Shape.call(this);
-     * }
-     *
-     * Circle.prototype = _.create(Shape.prototype, {
-     *   'constructor': Circle
-     * });
-     *
-     * var circle = new Circle;
-     * circle instanceof Circle;
-     * // => true
-     *
-     * circle instanceof Shape;
-     * // => true
-     */
-    function create(prototype, properties) {
-      var result = baseCreate(prototype);
-      return properties == null ? result : baseAssign(result, properties);
-    }
-
-    /**
-     * Assigns own and inherited enumerable string keyed properties of source
-     * objects to the destination object for all destination properties that
-     * resolve to `undefined`. Source objects are applied from left to right.
-     * Once a property is set, additional values of the same property are ignored.
-     *
-     * **Note:** This method mutates `object`.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Object
-     * @param {Object} object The destination object.
-     * @param {...Object} [sources] The source objects.
-     * @returns {Object} Returns `object`.
-     * @see _.defaultsDeep
-     * @example
-     *
-     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
-     * // => { 'a': 1, 'b': 2 }
-     */
-    var defaults = baseRest(function(object, sources) {
-      object = Object(object);
-
-      var index = -1;
-      var length = sources.length;
-      var guard = length > 2 ? sources[2] : undefined;
-
-      if (guard && isIterateeCall(sources[0], sources[1], guard)) {
-        length = 1;
-      }
-
-      while (++index < length) {
-        var source = sources[index];
-        var props = keysIn(source);
-        var propsIndex = -1;
-        var propsLength = props.length;
-
-        while (++propsIndex < propsLength) {
-          var key = props[propsIndex];
-          var value = object[key];
-
-          if (value === undefined ||
-              (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
-            object[key] = source[key];
-          }
-        }
-      }
-
-      return object;
-    });
-
-    /**
-     * This method is like `_.defaults` except that it recursively assigns
-     * default properties.
-     *
-     * **Note:** This method mutates `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.10.0
-     * @category Object
-     * @param {Object} object The destination object.
-     * @param {...Object} [sources] The source objects.
-     * @returns {Object} Returns `object`.
-     * @see _.defaults
-     * @example
-     *
-     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });
-     * // => { 'a': { 'b': 2, 'c': 3 } }
-     */
-    var defaultsDeep = baseRest(function(args) {
-      args.push(undefined, customDefaultsMerge);
-      return apply(mergeWith, undefined, args);
-    });
-
-    /**
-     * This method is like `_.find` except that it returns the key of the first
-     * element `predicate` returns truthy for instead of the element itself.
-     *
-     * @static
-     * @memberOf _
-     * @since 1.1.0
-     * @category Object
-     * @param {Object} object The object to inspect.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @returns {string|undefined} Returns the key of the matched element,
-     *  else `undefined`.
-     * @example
-     *
-     * var users = {
-     *   'barney':  { 'age': 36, 'active': true },
-     *   'fred':    { 'age': 40, 'active': false },
-     *   'pebbles': { 'age': 1,  'active': true }
-     * };
-     *
-     * _.findKey(users, function(o) { return o.age < 40; });
-     * // => 'barney' (iteration order is not guaranteed)
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.findKey(users, { 'age': 1, 'active': true });
-     * // => 'pebbles'
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.findKey(users, ['active', false]);
-     * // => 'fred'
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.findKey(users, 'active');
-     * // => 'barney'
-     */
-    function findKey(object, predicate) {
-      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);
-    }
-
-    /**
-     * This method is like `_.findKey` except that it iterates over elements of
-     * a collection in the opposite order.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.0.0
-     * @category Object
-     * @param {Object} object The object to inspect.
-     * @param {Function} [predicate=_.identity] The function invoked per iteration.
-     * @returns {string|undefined} Returns the key of the matched element,
-     *  else `undefined`.
-     * @example
-     *
-     * var users = {
-     *   'barney':  { 'age': 36, 'active': true },
-     *   'fred':    { 'age': 40, 'active': false },
-     *   'pebbles': { 'age': 1,  'active': true }
-     * };
-     *
-     * _.findLastKey(users, function(o) { return o.age < 40; });
-     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.findLastKey(users, { 'age': 36, 'active': true });
-     * // => 'barney'
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.findLastKey(users, ['active', false]);
-     * // => 'fred'
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.findLastKey(users, 'active');
-     * // => 'pebbles'
-     */
-    function findLastKey(object, predicate) {
-      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);
-    }
-
-    /**
-     * Iterates over own and inherited enumerable string keyed properties of an
-     * object and invokes `iteratee` for each property. The iteratee is invoked
-     * with three arguments: (value, key, object). Iteratee functions may exit
-     * iteration early by explicitly returning `false`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.3.0
-     * @category Object
-     * @param {Object} object The object to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @returns {Object} Returns `object`.
-     * @see _.forInRight
-     * @example
-     *
-     * function Foo() {
-     *   this.a = 1;
-     *   this.b = 2;
-     * }
-     *
-     * Foo.prototype.c = 3;
-     *
-     * _.forIn(new Foo, function(value, key) {
-     *   console.log(key);
-     * });
-     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
-     */
-    function forIn(object, iteratee) {
-      return object == null
-        ? object
-        : baseFor(object, getIteratee(iteratee, 3), keysIn);
-    }
-
-    /**
-     * This method is like `_.forIn` except that it iterates over properties of
-     * `object` in the opposite order.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.0.0
-     * @category Object
-     * @param {Object} object The object to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @returns {Object} Returns `object`.
-     * @see _.forIn
-     * @example
-     *
-     * function Foo() {
-     *   this.a = 1;
-     *   this.b = 2;
-     * }
-     *
-     * Foo.prototype.c = 3;
-     *
-     * _.forInRight(new Foo, function(value, key) {
-     *   console.log(key);
-     * });
-     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.
-     */
-    function forInRight(object, iteratee) {
-      return object == null
-        ? object
-        : baseForRight(object, getIteratee(iteratee, 3), keysIn);
-    }
-
-    /**
-     * Iterates over own enumerable string keyed properties of an object and
-     * invokes `iteratee` for each property. The iteratee is invoked with three
-     * arguments: (value, key, object). Iteratee functions may exit iteration
-     * early by explicitly returning `false`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.3.0
-     * @category Object
-     * @param {Object} object The object to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @returns {Object} Returns `object`.
-     * @see _.forOwnRight
-     * @example
-     *
-     * function Foo() {
-     *   this.a = 1;
-     *   this.b = 2;
-     * }
-     *
-     * Foo.prototype.c = 3;
-     *
-     * _.forOwn(new Foo, function(value, key) {
-     *   console.log(key);
-     * });
-     * // => Logs 'a' then 'b' (iteration order is not guaranteed).
-     */
-    function forOwn(object, iteratee) {
-      return object && baseForOwn(object, getIteratee(iteratee, 3));
-    }
-
-    /**
-     * This method is like `_.forOwn` except that it iterates over properties of
-     * `object` in the opposite order.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.0.0
-     * @category Object
-     * @param {Object} object The object to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @returns {Object} Returns `object`.
-     * @see _.forOwn
-     * @example
-     *
-     * function Foo() {
-     *   this.a = 1;
-     *   this.b = 2;
-     * }
-     *
-     * Foo.prototype.c = 3;
-     *
-     * _.forOwnRight(new Foo, function(value, key) {
-     *   console.log(key);
-     * });
-     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.
-     */
-    function forOwnRight(object, iteratee) {
-      return object && baseForOwnRight(object, getIteratee(iteratee, 3));
-    }
-
-    /**
-     * Creates an array of function property names from own enumerable properties
-     * of `object`.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Object
-     * @param {Object} object The object to inspect.
-     * @returns {Array} Returns the function names.
-     * @see _.functionsIn
-     * @example
-     *
-     * function Foo() {
-     *   this.a = _.constant('a');
-     *   this.b = _.constant('b');
-     * }
-     *
-     * Foo.prototype.c = _.constant('c');
-     *
-     * _.functions(new Foo);
-     * // => ['a', 'b']
-     */
-    function functions(object) {
-      return object == null ? [] : baseFunctions(object, keys(object));
-    }
-
-    /**
-     * Creates an array of function property names from own and inherited
-     * enumerable properties of `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Object
-     * @param {Object} object The object to inspect.
-     * @returns {Array} Returns the function names.
-     * @see _.functions
-     * @example
-     *
-     * function Foo() {
-     *   this.a = _.constant('a');
-     *   this.b = _.constant('b');
-     * }
-     *
-     * Foo.prototype.c = _.constant('c');
-     *
-     * _.functionsIn(new Foo);
-     * // => ['a', 'b', 'c']
-     */
-    function functionsIn(object) {
-      return object == null ? [] : baseFunctions(object, keysIn(object));
-    }
-
-    /**
-     * Gets the value at `path` of `object`. If the resolved value is
-     * `undefined`, the `defaultValue` is returned in its place.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.7.0
-     * @category Object
-     * @param {Object} object The object to query.
-     * @param {Array|string} path The path of the property to get.
-     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
-     * @returns {*} Returns the resolved value.
-     * @example
-     *
-     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
-     *
-     * _.get(object, 'a[0].b.c');
-     * // => 3
-     *
-     * _.get(object, ['a', '0', 'b', 'c']);
-     * // => 3
-     *
-     * _.get(object, 'a.b.c', 'default');
-     * // => 'default'
-     */
-    function get(object, path, defaultValue) {
-      var result = object == null ? undefined : baseGet(object, path);
-      return result === undefined ? defaultValue : result;
-    }
-
-    /**
-     * Checks if `path` is a direct property of `object`.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Object
-     * @param {Object} object The object to query.
-     * @param {Array|string} path The path to check.
-     * @returns {boolean} Returns `true` if `path` exists, else `false`.
-     * @example
-     *
-     * var object = { 'a': { 'b': 2 } };
-     * var other = _.create({ 'a': _.create({ 'b': 2 }) });
-     *
-     * _.has(object, 'a');
-     * // => true
-     *
-     * _.has(object, 'a.b');
-     * // => true
-     *
-     * _.has(object, ['a', 'b']);
-     * // => true
-     *
-     * _.has(other, 'a');
-     * // => false
-     */
-    function has(object, path) {
-      return object != null && hasPath(object, path, baseHas);
-    }
-
-    /**
-     * Checks if `path` is a direct or inherited property of `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Object
-     * @param {Object} object The object to query.
-     * @param {Array|string} path The path to check.
-     * @returns {boolean} Returns `true` if `path` exists, else `false`.
-     * @example
-     *
-     * var object = _.create({ 'a': _.create({ 'b': 2 }) });
-     *
-     * _.hasIn(object, 'a');
-     * // => true
-     *
-     * _.hasIn(object, 'a.b');
-     * // => true
-     *
-     * _.hasIn(object, ['a', 'b']);
-     * // => true
-     *
-     * _.hasIn(object, 'b');
-     * // => false
-     */
-    function hasIn(object, path) {
-      return object != null && hasPath(object, path, baseHasIn);
-    }
-
-    /**
-     * Creates an object composed of the inverted keys and values of `object`.
-     * If `object` contains duplicate values, subsequent values overwrite
-     * property assignments of previous values.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.7.0
-     * @category Object
-     * @param {Object} object The object to invert.
-     * @returns {Object} Returns the new inverted object.
-     * @example
-     *
-     * var object = { 'a': 1, 'b': 2, 'c': 1 };
-     *
-     * _.invert(object);
-     * // => { '1': 'c', '2': 'b' }
-     */
-    var invert = createInverter(function(result, value, key) {
-      if (value != null &&
-          typeof value.toString != 'function') {
-        value = nativeObjectToString.call(value);
-      }
-
-      result[value] = key;
-    }, constant(identity));
-
-    /**
-     * This method is like `_.invert` except that the inverted object is generated
-     * from the results of running each element of `object` thru `iteratee`. The
-     * corresponding inverted value of each inverted key is an array of keys
-     * responsible for generating the inverted value. The iteratee is invoked
-     * with one argument: (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.1.0
-     * @category Object
-     * @param {Object} object The object to invert.
-     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-     * @returns {Object} Returns the new inverted object.
-     * @example
-     *
-     * var object = { 'a': 1, 'b': 2, 'c': 1 };
-     *
-     * _.invertBy(object);
-     * // => { '1': ['a', 'c'], '2': ['b'] }
-     *
-     * _.invertBy(object, function(value) {
-     *   return 'group' + value;
-     * });
-     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }
-     */
-    var invertBy = createInverter(function(result, value, key) {
-      if (value != null &&
-          typeof value.toString != 'function') {
-        value = nativeObjectToString.call(value);
-      }
-
-      if (hasOwnProperty.call(result, value)) {
-        result[value].push(key);
-      } else {
-        result[value] = [key];
-      }
-    }, getIteratee);
-
-    /**
-     * Invokes the method at `path` of `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Object
-     * @param {Object} object The object to query.
-     * @param {Array|string} path The path of the method to invoke.
-     * @param {...*} [args] The arguments to invoke the method with.
-     * @returns {*} Returns the result of the invoked method.
-     * @example
-     *
-     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };
-     *
-     * _.invoke(object, 'a[0].b.c.slice', 1, 3);
-     * // => [2, 3]
-     */
-    var invoke = baseRest(baseInvoke);
-
-    /**
-     * Creates an array of the own enumerable property names of `object`.
-     *
-     * **Note:** Non-object values are coerced to objects. See the
-     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
-     * for more details.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Object
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the array of property names.
-     * @example
-     *
-     * function Foo() {
-     *   this.a = 1;
-     *   this.b = 2;
-     * }
-     *
-     * Foo.prototype.c = 3;
-     *
-     * _.keys(new Foo);
-     * // => ['a', 'b'] (iteration order is not guaranteed)
-     *
-     * _.keys('hi');
-     * // => ['0', '1']
-     */
-    function keys(object) {
-      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
-    }
-
-    /**
-     * Creates an array of the own and inherited enumerable property names of `object`.
-     *
-     * **Note:** Non-object values are coerced to objects.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Object
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the array of property names.
-     * @example
-     *
-     * function Foo() {
-     *   this.a = 1;
-     *   this.b = 2;
-     * }
-     *
-     * Foo.prototype.c = 3;
-     *
-     * _.keysIn(new Foo);
-     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
-     */
-    function keysIn(object) {
-      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);
-    }
-
-    /**
-     * The opposite of `_.mapValues`; this method creates an object with the
-     * same values as `object` and keys generated by running each own enumerable
-     * string keyed property of `object` thru `iteratee`. The iteratee is invoked
-     * with three arguments: (value, key, object).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.8.0
-     * @category Object
-     * @param {Object} object The object to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @returns {Object} Returns the new mapped object.
-     * @see _.mapValues
-     * @example
-     *
-     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {
-     *   return key + value;
-     * });
-     * // => { 'a1': 1, 'b2': 2 }
-     */
-    function mapKeys(object, iteratee) {
-      var result = {};
-      iteratee = getIteratee(iteratee, 3);
-
-      baseForOwn(object, function(value, key, object) {
-        baseAssignValue(result, iteratee(value, key, object), value);
-      });
-      return result;
-    }
-
-    /**
-     * Creates an object with the same keys as `object` and values generated
-     * by running each own enumerable string keyed property of `object` thru
-     * `iteratee`. The iteratee is invoked with three arguments:
-     * (value, key, object).
-     *
-     * @static
-     * @memberOf _
-     * @since 2.4.0
-     * @category Object
-     * @param {Object} object The object to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @returns {Object} Returns the new mapped object.
-     * @see _.mapKeys
-     * @example
-     *
-     * var users = {
-     *   'fred':    { 'user': 'fred',    'age': 40 },
-     *   'pebbles': { 'user': 'pebbles', 'age': 1 }
-     * };
-     *
-     * _.mapValues(users, function(o) { return o.age; });
-     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.mapValues(users, 'age');
-     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
-     */
-    function mapValues(object, iteratee) {
-      var result = {};
-      iteratee = getIteratee(iteratee, 3);
-
-      baseForOwn(object, function(value, key, object) {
-        baseAssignValue(result, key, iteratee(value, key, object));
-      });
-      return result;
-    }
-
-    /**
-     * This method is like `_.assign` except that it recursively merges own and
-     * inherited enumerable string keyed properties of source objects into the
-     * destination object. Source properties that resolve to `undefined` are
-     * skipped if a destination value exists. Array and plain object properties
-     * are merged recursively. Other objects and value types are overridden by
-     * assignment. Source objects are applied from left to right. Subsequent
-     * sources overwrite property assignments of previous sources.
-     *
-     * **Note:** This method mutates `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.5.0
-     * @category Object
-     * @param {Object} object The destination object.
-     * @param {...Object} [sources] The source objects.
-     * @returns {Object} Returns `object`.
-     * @example
-     *
-     * var object = {
-     *   'a': [{ 'b': 2 }, { 'd': 4 }]
-     * };
-     *
-     * var other = {
-     *   'a': [{ 'c': 3 }, { 'e': 5 }]
-     * };
-     *
-     * _.merge(object, other);
-     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
-     */
-    var merge = createAssigner(function(object, source, srcIndex) {
-      baseMerge(object, source, srcIndex);
-    });
-
-    /**
-     * This method is like `_.merge` except that it accepts `customizer` which
-     * is invoked to produce the merged values of the destination and source
-     * properties. If `customizer` returns `undefined`, merging is handled by the
-     * method instead. The `customizer` is invoked with six arguments:
-     * (objValue, srcValue, key, object, source, stack).
-     *
-     * **Note:** This method mutates `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Object
-     * @param {Object} object The destination object.
-     * @param {...Object} sources The source objects.
-     * @param {Function} customizer The function to customize assigned values.
-     * @returns {Object} Returns `object`.
-     * @example
-     *
-     * function customizer(objValue, srcValue) {
-     *   if (_.isArray(objValue)) {
-     *     return objValue.concat(srcValue);
-     *   }
-     * }
-     *
-     * var object = { 'a': [1], 'b': [2] };
-     * var other = { 'a': [3], 'b': [4] };
-     *
-     * _.mergeWith(object, other, customizer);
-     * // => { 'a': [1, 3], 'b': [2, 4] }
-     */
-    var mergeWith = createAssigner(function(object, source, srcIndex, customizer) {
-      baseMerge(object, source, srcIndex, customizer);
-    });
-
-    /**
-     * The opposite of `_.pick`; this method creates an object composed of the
-     * own and inherited enumerable property paths of `object` that are not omitted.
-     *
-     * **Note:** This method is considerably slower than `_.pick`.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Object
-     * @param {Object} object The source object.
-     * @param {...(string|string[])} [paths] The property paths to omit.
-     * @returns {Object} Returns the new object.
-     * @example
-     *
-     * var object = { 'a': 1, 'b': '2', 'c': 3 };
-     *
-     * _.omit(object, ['a', 'c']);
-     * // => { 'b': '2' }
-     */
-    var omit = flatRest(function(object, paths) {
-      var result = {};
-      if (object == null) {
-        return result;
-      }
-      var isDeep = false;
-      paths = arrayMap(paths, function(path) {
-        path = castPath(path, object);
-        isDeep || (isDeep = path.length > 1);
-        return path;
-      });
-      copyObject(object, getAllKeysIn(object), result);
-      if (isDeep) {
-        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
-      }
-      var length = paths.length;
-      while (length--) {
-        baseUnset(result, paths[length]);
-      }
-      return result;
-    });
-
-    /**
-     * The opposite of `_.pickBy`; this method creates an object composed of
-     * the own and inherited enumerable string keyed properties of `object` that
-     * `predicate` doesn't return truthy for. The predicate is invoked with two
-     * arguments: (value, key).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Object
-     * @param {Object} object The source object.
-     * @param {Function} [predicate=_.identity] The function invoked per property.
-     * @returns {Object} Returns the new object.
-     * @example
-     *
-     * var object = { 'a': 1, 'b': '2', 'c': 3 };
-     *
-     * _.omitBy(object, _.isNumber);
-     * // => { 'b': '2' }
-     */
-    function omitBy(object, predicate) {
-      return pickBy(object, negate(getIteratee(predicate)));
-    }
-
-    /**
-     * Creates an object composed of the picked `object` properties.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Object
-     * @param {Object} object The source object.
-     * @param {...(string|string[])} [paths] The property paths to pick.
-     * @returns {Object} Returns the new object.
-     * @example
-     *
-     * var object = { 'a': 1, 'b': '2', 'c': 3 };
-     *
-     * _.pick(object, ['a', 'c']);
-     * // => { 'a': 1, 'c': 3 }
-     */
-    var pick = flatRest(function(object, paths) {
-      return object == null ? {} : basePick(object, paths);
-    });
-
-    /**
-     * Creates an object composed of the `object` properties `predicate` returns
-     * truthy for. The predicate is invoked with two arguments: (value, key).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Object
-     * @param {Object} object The source object.
-     * @param {Function} [predicate=_.identity] The function invoked per property.
-     * @returns {Object} Returns the new object.
-     * @example
-     *
-     * var object = { 'a': 1, 'b': '2', 'c': 3 };
-     *
-     * _.pickBy(object, _.isNumber);
-     * // => { 'a': 1, 'c': 3 }
-     */
-    function pickBy(object, predicate) {
-      if (object == null) {
-        return {};
-      }
-      var props = arrayMap(getAllKeysIn(object), function(prop) {
-        return [prop];
-      });
-      predicate = getIteratee(predicate);
-      return basePickBy(object, props, function(value, path) {
-        return predicate(value, path[0]);
-      });
-    }
-
-    /**
-     * This method is like `_.get` except that if the resolved value is a
-     * function it's invoked with the `this` binding of its parent object and
-     * its result is returned.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Object
-     * @param {Object} object The object to query.
-     * @param {Array|string} path The path of the property to resolve.
-     * @param {*} [defaultValue] The value returned for `undefined` resolved values.
-     * @returns {*} Returns the resolved value.
-     * @example
-     *
-     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };
-     *
-     * _.result(object, 'a[0].b.c1');
-     * // => 3
-     *
-     * _.result(object, 'a[0].b.c2');
-     * // => 4
-     *
-     * _.result(object, 'a[0].b.c3', 'default');
-     * // => 'default'
-     *
-     * _.result(object, 'a[0].b.c3', _.constant('default'));
-     * // => 'default'
-     */
-    function result(object, path, defaultValue) {
-      path = castPath(path, object);
-
-      var index = -1,
-          length = path.length;
-
-      // Ensure the loop is entered when path is empty.
-      if (!length) {
-        length = 1;
-        object = undefined;
-      }
-      while (++index < length) {
-        var value = object == null ? undefined : object[toKey(path[index])];
-        if (value === undefined) {
-          index = length;
-          value = defaultValue;
-        }
-        object = isFunction(value) ? value.call(object) : value;
-      }
-      return object;
-    }
-
-    /**
-     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,
-     * it's created. Arrays are created for missing index properties while objects
-     * are created for all other missing properties. Use `_.setWith` to customize
-     * `path` creation.
-     *
-     * **Note:** This method mutates `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.7.0
-     * @category Object
-     * @param {Object} object The object to modify.
-     * @param {Array|string} path The path of the property to set.
-     * @param {*} value The value to set.
-     * @returns {Object} Returns `object`.
-     * @example
-     *
-     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
-     *
-     * _.set(object, 'a[0].b.c', 4);
-     * console.log(object.a[0].b.c);
-     * // => 4
-     *
-     * _.set(object, ['x', '0', 'y', 'z'], 5);
-     * console.log(object.x[0].y.z);
-     * // => 5
-     */
-    function set(object, path, value) {
-      return object == null ? object : baseSet(object, path, value);
-    }
-
-    /**
-     * This method is like `_.set` except that it accepts `customizer` which is
-     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
-     * path creation is handled by the method instead. The `customizer` is invoked
-     * with three arguments: (nsValue, key, nsObject).
-     *
-     * **Note:** This method mutates `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Object
-     * @param {Object} object The object to modify.
-     * @param {Array|string} path The path of the property to set.
-     * @param {*} value The value to set.
-     * @param {Function} [customizer] The function to customize assigned values.
-     * @returns {Object} Returns `object`.
-     * @example
-     *
-     * var object = {};
-     *
-     * _.setWith(object, '[0][1]', 'a', Object);
-     * // => { '0': { '1': 'a' } }
-     */
-    function setWith(object, path, value, customizer) {
-      customizer = typeof customizer == 'function' ? customizer : undefined;
-      return object == null ? object : baseSet(object, path, value, customizer);
-    }
-
-    /**
-     * Creates an array of own enumerable string keyed-value pairs for `object`
-     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its
-     * entries are returned.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @alias entries
-     * @category Object
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the key-value pairs.
-     * @example
-     *
-     * function Foo() {
-     *   this.a = 1;
-     *   this.b = 2;
-     * }
-     *
-     * Foo.prototype.c = 3;
-     *
-     * _.toPairs(new Foo);
-     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)
-     */
-    var toPairs = createToPairs(keys);
-
-    /**
-     * Creates an array of own and inherited enumerable string keyed-value pairs
-     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map
-     * or set, its entries are returned.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @alias entriesIn
-     * @category Object
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the key-value pairs.
-     * @example
-     *
-     * function Foo() {
-     *   this.a = 1;
-     *   this.b = 2;
-     * }
-     *
-     * Foo.prototype.c = 3;
-     *
-     * _.toPairsIn(new Foo);
-     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)
-     */
-    var toPairsIn = createToPairs(keysIn);
-
-    /**
-     * An alternative to `_.reduce`; this method transforms `object` to a new
-     * `accumulator` object which is the result of running each of its own
-     * enumerable string keyed properties thru `iteratee`, with each invocation
-     * potentially mutating the `accumulator` object. If `accumulator` is not
-     * provided, a new object with the same `[[Prototype]]` will be used. The
-     * iteratee is invoked with four arguments: (accumulator, value, key, object).
-     * Iteratee functions may exit iteration early by explicitly returning `false`.
-     *
-     * @static
-     * @memberOf _
-     * @since 1.3.0
-     * @category Object
-     * @param {Object} object The object to iterate over.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @param {*} [accumulator] The custom accumulator value.
-     * @returns {*} Returns the accumulated value.
-     * @example
-     *
-     * _.transform([2, 3, 4], function(result, n) {
-     *   result.push(n *= n);
-     *   return n % 2 == 0;
-     * }, []);
-     * // => [4, 9]
-     *
-     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
-     *   (result[value] || (result[value] = [])).push(key);
-     * }, {});
-     * // => { '1': ['a', 'c'], '2': ['b'] }
-     */
-    function transform(object, iteratee, accumulator) {
-      var isArr = isArray(object),
-          isArrLike = isArr || isBuffer(object) || isTypedArray(object);
-
-      iteratee = getIteratee(iteratee, 4);
-      if (accumulator == null) {
-        var Ctor = object && object.constructor;
-        if (isArrLike) {
-          accumulator = isArr ? new Ctor : [];
-        }
-        else if (isObject(object)) {
-          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};
-        }
-        else {
-          accumulator = {};
-        }
-      }
-      (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) {
-        return iteratee(accumulator, value, index, object);
-      });
-      return accumulator;
-    }
-
-    /**
-     * Removes the property at `path` of `object`.
-     *
-     * **Note:** This method mutates `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Object
-     * @param {Object} object The object to modify.
-     * @param {Array|string} path The path of the property to unset.
-     * @returns {boolean} Returns `true` if the property is deleted, else `false`.
-     * @example
-     *
-     * var object = { 'a': [{ 'b': { 'c': 7 } }] };
-     * _.unset(object, 'a[0].b.c');
-     * // => true
-     *
-     * console.log(object);
-     * // => { 'a': [{ 'b': {} }] };
-     *
-     * _.unset(object, ['a', '0', 'b', 'c']);
-     * // => true
-     *
-     * console.log(object);
-     * // => { 'a': [{ 'b': {} }] };
-     */
-    function unset(object, path) {
-      return object == null ? true : baseUnset(object, path);
-    }
-
-    /**
-     * This method is like `_.set` except that accepts `updater` to produce the
-     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`
-     * is invoked with one argument: (value).
-     *
-     * **Note:** This method mutates `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.6.0
-     * @category Object
-     * @param {Object} object The object to modify.
-     * @param {Array|string} path The path of the property to set.
-     * @param {Function} updater The function to produce the updated value.
-     * @returns {Object} Returns `object`.
-     * @example
-     *
-     * var object = { 'a': [{ 'b': { 'c': 3 } }] };
-     *
-     * _.update(object, 'a[0].b.c', function(n) { return n * n; });
-     * console.log(object.a[0].b.c);
-     * // => 9
-     *
-     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });
-     * console.log(object.x[0].y.z);
-     * // => 0
-     */
-    function update(object, path, updater) {
-      return object == null ? object : baseUpdate(object, path, castFunction(updater));
-    }
-
-    /**
-     * This method is like `_.update` except that it accepts `customizer` which is
-     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`
-     * path creation is handled by the method instead. The `customizer` is invoked
-     * with three arguments: (nsValue, key, nsObject).
-     *
-     * **Note:** This method mutates `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.6.0
-     * @category Object
-     * @param {Object} object The object to modify.
-     * @param {Array|string} path The path of the property to set.
-     * @param {Function} updater The function to produce the updated value.
-     * @param {Function} [customizer] The function to customize assigned values.
-     * @returns {Object} Returns `object`.
-     * @example
-     *
-     * var object = {};
-     *
-     * _.updateWith(object, '[0][1]', _.constant('a'), Object);
-     * // => { '0': { '1': 'a' } }
-     */
-    function updateWith(object, path, updater, customizer) {
-      customizer = typeof customizer == 'function' ? customizer : undefined;
-      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);
-    }
-
-    /**
-     * Creates an array of the own enumerable string keyed property values of `object`.
-     *
-     * **Note:** Non-object values are coerced to objects.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Object
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the array of property values.
-     * @example
-     *
-     * function Foo() {
-     *   this.a = 1;
-     *   this.b = 2;
-     * }
-     *
-     * Foo.prototype.c = 3;
-     *
-     * _.values(new Foo);
-     * // => [1, 2] (iteration order is not guaranteed)
-     *
-     * _.values('hi');
-     * // => ['h', 'i']
-     */
-    function values(object) {
-      return object == null ? [] : baseValues(object, keys(object));
-    }
-
-    /**
-     * Creates an array of the own and inherited enumerable string keyed property
-     * values of `object`.
-     *
-     * **Note:** Non-object values are coerced to objects.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Object
-     * @param {Object} object The object to query.
-     * @returns {Array} Returns the array of property values.
-     * @example
-     *
-     * function Foo() {
-     *   this.a = 1;
-     *   this.b = 2;
-     * }
-     *
-     * Foo.prototype.c = 3;
-     *
-     * _.valuesIn(new Foo);
-     * // => [1, 2, 3] (iteration order is not guaranteed)
-     */
-    function valuesIn(object) {
-      return object == null ? [] : baseValues(object, keysIn(object));
-    }
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Clamps `number` within the inclusive `lower` and `upper` bounds.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Number
-     * @param {number} number The number to clamp.
-     * @param {number} [lower] The lower bound.
-     * @param {number} upper The upper bound.
-     * @returns {number} Returns the clamped number.
-     * @example
-     *
-     * _.clamp(-10, -5, 5);
-     * // => -5
-     *
-     * _.clamp(10, -5, 5);
-     * // => 5
-     */
-    function clamp(number, lower, upper) {
-      if (upper === undefined) {
-        upper = lower;
-        lower = undefined;
-      }
-      if (upper !== undefined) {
-        upper = toNumber(upper);
-        upper = upper === upper ? upper : 0;
-      }
-      if (lower !== undefined) {
-        lower = toNumber(lower);
-        lower = lower === lower ? lower : 0;
-      }
-      return baseClamp(toNumber(number), lower, upper);
-    }
-
-    /**
-     * Checks if `n` is between `start` and up to, but not including, `end`. If
-     * `end` is not specified, it's set to `start` with `start` then set to `0`.
-     * If `start` is greater than `end` the params are swapped to support
-     * negative ranges.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.3.0
-     * @category Number
-     * @param {number} number The number to check.
-     * @param {number} [start=0] The start of the range.
-     * @param {number} end The end of the range.
-     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.
-     * @see _.range, _.rangeRight
-     * @example
-     *
-     * _.inRange(3, 2, 4);
-     * // => true
-     *
-     * _.inRange(4, 8);
-     * // => true
-     *
-     * _.inRange(4, 2);
-     * // => false
-     *
-     * _.inRange(2, 2);
-     * // => false
-     *
-     * _.inRange(1.2, 2);
-     * // => true
-     *
-     * _.inRange(5.2, 4);
-     * // => false
-     *
-     * _.inRange(-3, -2, -6);
-     * // => true
-     */
-    function inRange(number, start, end) {
-      start = toFinite(start);
-      if (end === undefined) {
-        end = start;
-        start = 0;
-      } else {
-        end = toFinite(end);
-      }
-      number = toNumber(number);
-      return baseInRange(number, start, end);
-    }
-
-    /**
-     * Produces a random number between the inclusive `lower` and `upper` bounds.
-     * If only one argument is provided a number between `0` and the given number
-     * is returned. If `floating` is `true`, or either `lower` or `upper` are
-     * floats, a floating-point number is returned instead of an integer.
-     *
-     * **Note:** JavaScript follows the IEEE-754 standard for resolving
-     * floating-point values which can produce unexpected results.
-     *
-     * @static
-     * @memberOf _
-     * @since 0.7.0
-     * @category Number
-     * @param {number} [lower=0] The lower bound.
-     * @param {number} [upper=1] The upper bound.
-     * @param {boolean} [floating] Specify returning a floating-point number.
-     * @returns {number} Returns the random number.
-     * @example
-     *
-     * _.random(0, 5);
-     * // => an integer between 0 and 5
-     *
-     * _.random(5);
-     * // => also an integer between 0 and 5
-     *
-     * _.random(5, true);
-     * // => a floating-point number between 0 and 5
-     *
-     * _.random(1.2, 5.2);
-     * // => a floating-point number between 1.2 and 5.2
-     */
-    function random(lower, upper, floating) {
-      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {
-        upper = floating = undefined;
-      }
-      if (floating === undefined) {
-        if (typeof upper == 'boolean') {
-          floating = upper;
-          upper = undefined;
-        }
-        else if (typeof lower == 'boolean') {
-          floating = lower;
-          lower = undefined;
-        }
-      }
-      if (lower === undefined && upper === undefined) {
-        lower = 0;
-        upper = 1;
-      }
-      else {
-        lower = toFinite(lower);
-        if (upper === undefined) {
-          upper = lower;
-          lower = 0;
-        } else {
-          upper = toFinite(upper);
-        }
-      }
-      if (lower > upper) {
-        var temp = lower;
-        lower = upper;
-        upper = temp;
-      }
-      if (floating || lower % 1 || upper % 1) {
-        var rand = nativeRandom();
-        return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper);
-      }
-      return baseRandom(lower, upper);
-    }
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category String
-     * @param {string} [string=''] The string to convert.
-     * @returns {string} Returns the camel cased string.
-     * @example
-     *
-     * _.camelCase('Foo Bar');
-     * // => 'fooBar'
-     *
-     * _.camelCase('--foo-bar--');
-     * // => 'fooBar'
-     *
-     * _.camelCase('__FOO_BAR__');
-     * // => 'fooBar'
-     */
-    var camelCase = createCompounder(function(result, word, index) {
-      word = word.toLowerCase();
-      return result + (index ? capitalize(word) : word);
-    });
-
-    /**
-     * Converts the first character of `string` to upper case and the remaining
-     * to lower case.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category String
-     * @param {string} [string=''] The string to capitalize.
-     * @returns {string} Returns the capitalized string.
-     * @example
-     *
-     * _.capitalize('FRED');
-     * // => 'Fred'
-     */
-    function capitalize(string) {
-      return upperFirst(toString(string).toLowerCase());
-    }
-
-    /**
-     * Deburrs `string` by converting
-     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
-     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
-     * letters to basic Latin letters and removing
-     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category String
-     * @param {string} [string=''] The string to deburr.
-     * @returns {string} Returns the deburred string.
-     * @example
-     *
-     * _.deburr('déjà vu');
-     * // => 'deja vu'
-     */
-    function deburr(string) {
-      string = toString(string);
-      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
-    }
-
-    /**
-     * Checks if `string` ends with the given target string.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category String
-     * @param {string} [string=''] The string to inspect.
-     * @param {string} [target] The string to search for.
-     * @param {number} [position=string.length] The position to search up to.
-     * @returns {boolean} Returns `true` if `string` ends with `target`,
-     *  else `false`.
-     * @example
-     *
-     * _.endsWith('abc', 'c');
-     * // => true
-     *
-     * _.endsWith('abc', 'b');
-     * // => false
-     *
-     * _.endsWith('abc', 'b', 2);
-     * // => true
-     */
-    function endsWith(string, target, position) {
-      string = toString(string);
-      target = baseToString(target);
-
-      var length = string.length;
-      position = position === undefined
-        ? length
-        : baseClamp(toInteger(position), 0, length);
-
-      var end = position;
-      position -= target.length;
-      return position >= 0 && string.slice(position, end) == target;
-    }
-
-    /**
-     * Converts the characters "&", "<", ">", '"', and "'" in `string` to their
-     * corresponding HTML entities.
-     *
-     * **Note:** No other characters are escaped. To escape additional
-     * characters use a third-party library like [_he_](https://mths.be/he).
-     *
-     * Though the ">" character is escaped for symmetry, characters like
-     * ">" and "/" don't need escaping in HTML and have no special meaning
-     * unless they're part of a tag or unquoted attribute value. See
-     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
-     * (under "semi-related fun fact") for more details.
-     *
-     * When working with HTML you should always
-     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
-     * XSS vectors.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category String
-     * @param {string} [string=''] The string to escape.
-     * @returns {string} Returns the escaped string.
-     * @example
-     *
-     * _.escape('fred, barney, & pebbles');
-     * // => 'fred, barney, & pebbles'
-     */
-    function escape(string) {
-      string = toString(string);
-      return (string && reHasUnescapedHtml.test(string))
-        ? string.replace(reUnescapedHtml, escapeHtmlChar)
-        : string;
-    }
-
-    /**
-     * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+",
-     * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category String
-     * @param {string} [string=''] The string to escape.
-     * @returns {string} Returns the escaped string.
-     * @example
-     *
-     * _.escapeRegExp('[lodash](https://lodash.com/)');
-     * // => '\[lodash\]\(https://lodash\.com/\)'
-     */
-    function escapeRegExp(string) {
-      string = toString(string);
-      return (string && reHasRegExpChar.test(string))
-        ? string.replace(reRegExpChar, '\\$&')
-        : string;
-    }
-
-    /**
-     * Converts `string` to
-     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category String
-     * @param {string} [string=''] The string to convert.
-     * @returns {string} Returns the kebab cased string.
-     * @example
-     *
-     * _.kebabCase('Foo Bar');
-     * // => 'foo-bar'
-     *
-     * _.kebabCase('fooBar');
-     * // => 'foo-bar'
-     *
-     * _.kebabCase('__FOO_BAR__');
-     * // => 'foo-bar'
-     */
-    var kebabCase = createCompounder(function(result, word, index) {
-      return result + (index ? '-' : '') + word.toLowerCase();
-    });
-
-    /**
-     * Converts `string`, as space separated words, to lower case.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category String
-     * @param {string} [string=''] The string to convert.
-     * @returns {string} Returns the lower cased string.
-     * @example
-     *
-     * _.lowerCase('--Foo-Bar--');
-     * // => 'foo bar'
-     *
-     * _.lowerCase('fooBar');
-     * // => 'foo bar'
-     *
-     * _.lowerCase('__FOO_BAR__');
-     * // => 'foo bar'
-     */
-    var lowerCase = createCompounder(function(result, word, index) {
-      return result + (index ? ' ' : '') + word.toLowerCase();
-    });
-
-    /**
-     * Converts the first character of `string` to lower case.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category String
-     * @param {string} [string=''] The string to convert.
-     * @returns {string} Returns the converted string.
-     * @example
-     *
-     * _.lowerFirst('Fred');
-     * // => 'fred'
-     *
-     * _.lowerFirst('FRED');
-     * // => 'fRED'
-     */
-    var lowerFirst = createCaseFirst('toLowerCase');
-
-    /**
-     * Pads `string` on the left and right sides if it's shorter than `length`.
-     * Padding characters are truncated if they can't be evenly divided by `length`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category String
-     * @param {string} [string=''] The string to pad.
-     * @param {number} [length=0] The padding length.
-     * @param {string} [chars=' '] The string used as padding.
-     * @returns {string} Returns the padded string.
-     * @example
-     *
-     * _.pad('abc', 8);
-     * // => '  abc   '
-     *
-     * _.pad('abc', 8, '_-');
-     * // => '_-abc_-_'
-     *
-     * _.pad('abc', 3);
-     * // => 'abc'
-     */
-    function pad(string, length, chars) {
-      string = toString(string);
-      length = toInteger(length);
-
-      var strLength = length ? stringSize(string) : 0;
-      if (!length || strLength >= length) {
-        return string;
-      }
-      var mid = (length - strLength) / 2;
-      return (
-        createPadding(nativeFloor(mid), chars) +
-        string +
-        createPadding(nativeCeil(mid), chars)
-      );
-    }
-
-    /**
-     * Pads `string` on the right side if it's shorter than `length`. Padding
-     * characters are truncated if they exceed `length`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category String
-     * @param {string} [string=''] The string to pad.
-     * @param {number} [length=0] The padding length.
-     * @param {string} [chars=' '] The string used as padding.
-     * @returns {string} Returns the padded string.
-     * @example
-     *
-     * _.padEnd('abc', 6);
-     * // => 'abc   '
-     *
-     * _.padEnd('abc', 6, '_-');
-     * // => 'abc_-_'
-     *
-     * _.padEnd('abc', 3);
-     * // => 'abc'
-     */
-    function padEnd(string, length, chars) {
-      string = toString(string);
-      length = toInteger(length);
-
-      var strLength = length ? stringSize(string) : 0;
-      return (length && strLength < length)
-        ? (string + createPadding(length - strLength, chars))
-        : string;
-    }
-
-    /**
-     * Pads `string` on the left side if it's shorter than `length`. Padding
-     * characters are truncated if they exceed `length`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category String
-     * @param {string} [string=''] The string to pad.
-     * @param {number} [length=0] The padding length.
-     * @param {string} [chars=' '] The string used as padding.
-     * @returns {string} Returns the padded string.
-     * @example
-     *
-     * _.padStart('abc', 6);
-     * // => '   abc'
-     *
-     * _.padStart('abc', 6, '_-');
-     * // => '_-_abc'
-     *
-     * _.padStart('abc', 3);
-     * // => 'abc'
-     */
-    function padStart(string, length, chars) {
-      string = toString(string);
-      length = toInteger(length);
-
-      var strLength = length ? stringSize(string) : 0;
-      return (length && strLength < length)
-        ? (createPadding(length - strLength, chars) + string)
-        : string;
-    }
-
-    /**
-     * Converts `string` to an integer of the specified radix. If `radix` is
-     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a
-     * hexadecimal, in which case a `radix` of `16` is used.
-     *
-     * **Note:** This method aligns with the
-     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.
-     *
-     * @static
-     * @memberOf _
-     * @since 1.1.0
-     * @category String
-     * @param {string} string The string to convert.
-     * @param {number} [radix=10] The radix to interpret `value` by.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {number} Returns the converted integer.
-     * @example
-     *
-     * _.parseInt('08');
-     * // => 8
-     *
-     * _.map(['6', '08', '10'], _.parseInt);
-     * // => [6, 8, 10]
-     */
-    function parseInt(string, radix, guard) {
-      if (guard || radix == null) {
-        radix = 0;
-      } else if (radix) {
-        radix = +radix;
-      }
-      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);
-    }
-
-    /**
-     * Repeats the given string `n` times.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category String
-     * @param {string} [string=''] The string to repeat.
-     * @param {number} [n=1] The number of times to repeat the string.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {string} Returns the repeated string.
-     * @example
-     *
-     * _.repeat('*', 3);
-     * // => '***'
-     *
-     * _.repeat('abc', 2);
-     * // => 'abcabc'
-     *
-     * _.repeat('abc', 0);
-     * // => ''
-     */
-    function repeat(string, n, guard) {
-      if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) {
-        n = 1;
-      } else {
-        n = toInteger(n);
-      }
-      return baseRepeat(toString(string), n);
-    }
-
-    /**
-     * Replaces matches for `pattern` in `string` with `replacement`.
-     *
-     * **Note:** This method is based on
-     * [`String#replace`](https://mdn.io/String/replace).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category String
-     * @param {string} [string=''] The string to modify.
-     * @param {RegExp|string} pattern The pattern to replace.
-     * @param {Function|string} replacement The match replacement.
-     * @returns {string} Returns the modified string.
-     * @example
-     *
-     * _.replace('Hi Fred', 'Fred', 'Barney');
-     * // => 'Hi Barney'
-     */
-    function replace() {
-      var args = arguments,
-          string = toString(args[0]);
-
-      return args.length < 3 ? string : string.replace(args[1], args[2]);
-    }
-
-    /**
-     * Converts `string` to
-     * [snake case](https://en.wikipedia.org/wiki/Snake_case).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category String
-     * @param {string} [string=''] The string to convert.
-     * @returns {string} Returns the snake cased string.
-     * @example
-     *
-     * _.snakeCase('Foo Bar');
-     * // => 'foo_bar'
-     *
-     * _.snakeCase('fooBar');
-     * // => 'foo_bar'
-     *
-     * _.snakeCase('--FOO-BAR--');
-     * // => 'foo_bar'
-     */
-    var snakeCase = createCompounder(function(result, word, index) {
-      return result + (index ? '_' : '') + word.toLowerCase();
-    });
-
-    /**
-     * Splits `string` by `separator`.
-     *
-     * **Note:** This method is based on
-     * [`String#split`](https://mdn.io/String/split).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category String
-     * @param {string} [string=''] The string to split.
-     * @param {RegExp|string} separator The separator pattern to split by.
-     * @param {number} [limit] The length to truncate results to.
-     * @returns {Array} Returns the string segments.
-     * @example
-     *
-     * _.split('a-b-c', '-', 2);
-     * // => ['a', 'b']
-     */
-    function split(string, separator, limit) {
-      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {
-        separator = limit = undefined;
-      }
-      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;
-      if (!limit) {
-        return [];
-      }
-      string = toString(string);
-      if (string && (
-            typeof separator == 'string' ||
-            (separator != null && !isRegExp(separator))
-          )) {
-        separator = baseToString(separator);
-        if (!separator && hasUnicode(string)) {
-          return castSlice(stringToArray(string), 0, limit);
-        }
-      }
-      return string.split(separator, limit);
-    }
-
-    /**
-     * Converts `string` to
-     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).
-     *
-     * @static
-     * @memberOf _
-     * @since 3.1.0
-     * @category String
-     * @param {string} [string=''] The string to convert.
-     * @returns {string} Returns the start cased string.
-     * @example
-     *
-     * _.startCase('--foo-bar--');
-     * // => 'Foo Bar'
-     *
-     * _.startCase('fooBar');
-     * // => 'Foo Bar'
-     *
-     * _.startCase('__FOO_BAR__');
-     * // => 'FOO BAR'
-     */
-    var startCase = createCompounder(function(result, word, index) {
-      return result + (index ? ' ' : '') + upperFirst(word);
-    });
-
-    /**
-     * Checks if `string` starts with the given target string.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category String
-     * @param {string} [string=''] The string to inspect.
-     * @param {string} [target] The string to search for.
-     * @param {number} [position=0] The position to search from.
-     * @returns {boolean} Returns `true` if `string` starts with `target`,
-     *  else `false`.
-     * @example
-     *
-     * _.startsWith('abc', 'a');
-     * // => true
-     *
-     * _.startsWith('abc', 'b');
-     * // => false
-     *
-     * _.startsWith('abc', 'b', 1);
-     * // => true
-     */
-    function startsWith(string, target, position) {
-      string = toString(string);
-      position = position == null
-        ? 0
-        : baseClamp(toInteger(position), 0, string.length);
-
-      target = baseToString(target);
-      return string.slice(position, position + target.length) == target;
-    }
-
-    /**
-     * Creates a compiled template function that can interpolate data properties
-     * in "interpolate" delimiters, HTML-escape interpolated data properties in
-     * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data
-     * properties may be accessed as free variables in the template. If a setting
-     * object is given, it takes precedence over `_.templateSettings` values.
-     *
-     * **Note:** In the development build `_.template` utilizes
-     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)
-     * for easier debugging.
-     *
-     * For more information on precompiling templates see
-     * [lodash's custom builds documentation](https://lodash.com/custom-builds).
-     *
-     * For more information on Chrome extension sandboxes see
-     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category String
-     * @param {string} [string=''] The template string.
-     * @param {Object} [options={}] The options object.
-     * @param {RegExp} [options.escape=_.templateSettings.escape]
-     *  The HTML "escape" delimiter.
-     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]
-     *  The "evaluate" delimiter.
-     * @param {Object} [options.imports=_.templateSettings.imports]
-     *  An object to import into the template as free variables.
-     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]
-     *  The "interpolate" delimiter.
-     * @param {string} [options.sourceURL='lodash.templateSources[n]']
-     *  The sourceURL of the compiled template.
-     * @param {string} [options.variable='obj']
-     *  The data object variable name.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {Function} Returns the compiled template function.
-     * @example
-     *
-     * // Use the "interpolate" delimiter to create a compiled template.
-     * var compiled = _.template('hello <%= user %>!');
-     * compiled({ 'user': 'fred' });
-     * // => 'hello fred!'
-     *
-     * // Use the HTML "escape" delimiter to escape data property values.
-     * var compiled = _.template('<b><%- value %></b>');
-     * compiled({ 'value': '<script>' });
-     * // => '<b><script></b>'
-     *
-     * // Use the "evaluate" delimiter to execute JavaScript and generate HTML.
-     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');
-     * compiled({ 'users': ['fred', 'barney'] });
-     * // => '<li>fred</li><li>barney</li>'
-     *
-     * // Use the internal `print` function in "evaluate" delimiters.
-     * var compiled = _.template('<% print("hello " + user); %>!');
-     * compiled({ 'user': 'barney' });
-     * // => 'hello barney!'
-     *
-     * // Use the ES template literal delimiter as an "interpolate" delimiter.
-     * // Disable support by replacing the "interpolate" delimiter.
-     * var compiled = _.template('hello ${ user }!');
-     * compiled({ 'user': 'pebbles' });
-     * // => 'hello pebbles!'
-     *
-     * // Use backslashes to treat delimiters as plain text.
-     * var compiled = _.template('<%= "\\<%- value %\\>" %>');
-     * compiled({ 'value': 'ignored' });
-     * // => '<%- value %>'
-     *
-     * // Use the `imports` option to import `jQuery` as `jq`.
-     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';
-     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });
-     * compiled({ 'users': ['fred', 'barney'] });
-     * // => '<li>fred</li><li>barney</li>'
-     *
-     * // Use the `sourceURL` option to specify a custom sourceURL for the template.
-     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });
-     * compiled(data);
-     * // => Find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector.
-     *
-     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.
-     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });
-     * compiled.source;
-     * // => function(data) {
-     * //   var __t, __p = '';
-     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';
-     * //   return __p;
-     * // }
-     *
-     * // Use custom template delimiters.
-     * _.templateSettings.interpolate = /{{([\s\S]+?)}}/g;
-     * var compiled = _.template('hello {{ user }}!');
-     * compiled({ 'user': 'mustache' });
-     * // => 'hello mustache!'
-     *
-     * // Use the `source` property to inline compiled templates for meaningful
-     * // line numbers in error messages and stack traces.
-     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\
-     *   var JST = {\
-     *     "main": ' + _.template(mainText).source + '\
-     *   };\
-     * ');
-     */
-    function template(string, options, guard) {
-      // Based on John Resig's `tmpl` implementation
-      // (http://ejohn.org/blog/javascript-micro-templating/)
-      // and Laura Doktorova's doT.js (https://github.com/olado/doT).
-      var settings = lodash.templateSettings;
-
-      if (guard && isIterateeCall(string, options, guard)) {
-        options = undefined;
-      }
-      string = toString(string);
-      options = assignInWith({}, options, settings, customDefaultsAssignIn);
-
-      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),
-          importsKeys = keys(imports),
-          importsValues = baseValues(imports, importsKeys);
-
-      var isEscaping,
-          isEvaluating,
-          index = 0,
-          interpolate = options.interpolate || reNoMatch,
-          source = "__p += '";
-
-      // Compile the regexp to match each delimiter.
-      var reDelimiters = RegExp(
-        (options.escape || reNoMatch).source + '|' +
-        interpolate.source + '|' +
-        (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
-        (options.evaluate || reNoMatch).source + '|$'
-      , 'g');
-
-      // Use a sourceURL for easier debugging.
-      // The sourceURL gets injected into the source that's eval-ed, so be careful
-      // to normalize all kinds of whitespace, so e.g. newlines (and unicode versions of it) can't sneak in
-      // and escape the comment, thus injecting code that gets evaled.
-      var sourceURL = '//# sourceURL=' +
-        (hasOwnProperty.call(options, 'sourceURL')
-          ? (options.sourceURL + '').replace(/\s/g, ' ')
-          : ('lodash.templateSources[' + (++templateCounter) + ']')
-        ) + '\n';
-
-      string.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
-        interpolateValue || (interpolateValue = esTemplateValue);
-
-        // Escape characters that can't be included in string literals.
-        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar);
-
-        // Replace delimiters with snippets.
-        if (escapeValue) {
-          isEscaping = true;
-          source += "' +\n__e(" + escapeValue + ") +\n'";
-        }
-        if (evaluateValue) {
-          isEvaluating = true;
-          source += "';\n" + evaluateValue + ";\n__p += '";
-        }
-        if (interpolateValue) {
-          source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
-        }
-        index = offset + match.length;
-
-        // The JS engine embedded in Adobe products needs `match` returned in
-        // order to produce the correct `offset` value.
-        return match;
-      });
-
-      source += "';\n";
-
-      // If `variable` is not specified wrap a with-statement around the generated
-      // code to add the data object to the top of the scope chain.
-      var variable = hasOwnProperty.call(options, 'variable') && options.variable;
-      if (!variable) {
-        source = 'with (obj) {\n' + source + '\n}\n';
-      }
-      // Throw an error if a forbidden character was found in `variable`, to prevent
-      // potential command injection attacks.
-      else if (reForbiddenIdentifierChars.test(variable)) {
-        throw new Error(INVALID_TEMPL_VAR_ERROR_TEXT);
-      }
-
-      // Cleanup code by stripping empty strings.
-      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
-        .replace(reEmptyStringMiddle, '$1')
-        .replace(reEmptyStringTrailing, '$1;');
-
-      // Frame code as the function body.
-      source = 'function(' + (variable || 'obj') + ') {\n' +
-        (variable
-          ? ''
-          : 'obj || (obj = {});\n'
-        ) +
-        "var __t, __p = ''" +
-        (isEscaping
-           ? ', __e = _.escape'
-           : ''
-        ) +
-        (isEvaluating
-          ? ', __j = Array.prototype.join;\n' +
-            "function print() { __p += __j.call(arguments, '') }\n"
-          : ';\n'
-        ) +
-        source +
-        'return __p\n}';
-
-      var result = attempt(function() {
-        return Function(importsKeys, sourceURL + 'return ' + source)
-          .apply(undefined, importsValues);
-      });
-
-      // Provide the compiled function's source by its `toString` method or
-      // the `source` property as a convenience for inlining compiled templates.
-      result.source = source;
-      if (isError(result)) {
-        throw result;
-      }
-      return result;
-    }
-
-    /**
-     * Converts `string`, as a whole, to lower case just like
-     * [String#toLowerCase](https://mdn.io/toLowerCase).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category String
-     * @param {string} [string=''] The string to convert.
-     * @returns {string} Returns the lower cased string.
-     * @example
-     *
-     * _.toLower('--Foo-Bar--');
-     * // => '--foo-bar--'
-     *
-     * _.toLower('fooBar');
-     * // => 'foobar'
-     *
-     * _.toLower('__FOO_BAR__');
-     * // => '__foo_bar__'
-     */
-    function toLower(value) {
-      return toString(value).toLowerCase();
-    }
-
-    /**
-     * Converts `string`, as a whole, to upper case just like
-     * [String#toUpperCase](https://mdn.io/toUpperCase).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category String
-     * @param {string} [string=''] The string to convert.
-     * @returns {string} Returns the upper cased string.
-     * @example
-     *
-     * _.toUpper('--foo-bar--');
-     * // => '--FOO-BAR--'
-     *
-     * _.toUpper('fooBar');
-     * // => 'FOOBAR'
-     *
-     * _.toUpper('__foo_bar__');
-     * // => '__FOO_BAR__'
-     */
-    function toUpper(value) {
-      return toString(value).toUpperCase();
-    }
-
-    /**
-     * Removes leading and trailing whitespace or specified characters from `string`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category String
-     * @param {string} [string=''] The string to trim.
-     * @param {string} [chars=whitespace] The characters to trim.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {string} Returns the trimmed string.
-     * @example
-     *
-     * _.trim('  abc  ');
-     * // => 'abc'
-     *
-     * _.trim('-_-abc-_-', '_-');
-     * // => 'abc'
-     *
-     * _.map(['  foo  ', '  bar  '], _.trim);
-     * // => ['foo', 'bar']
-     */
-    function trim(string, chars, guard) {
-      string = toString(string);
-      if (string && (guard || chars === undefined)) {
-        return baseTrim(string);
-      }
-      if (!string || !(chars = baseToString(chars))) {
-        return string;
-      }
-      var strSymbols = stringToArray(string),
-          chrSymbols = stringToArray(chars),
-          start = charsStartIndex(strSymbols, chrSymbols),
-          end = charsEndIndex(strSymbols, chrSymbols) + 1;
-
-      return castSlice(strSymbols, start, end).join('');
-    }
-
-    /**
-     * Removes trailing whitespace or specified characters from `string`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category String
-     * @param {string} [string=''] The string to trim.
-     * @param {string} [chars=whitespace] The characters to trim.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {string} Returns the trimmed string.
-     * @example
-     *
-     * _.trimEnd('  abc  ');
-     * // => '  abc'
-     *
-     * _.trimEnd('-_-abc-_-', '_-');
-     * // => '-_-abc'
-     */
-    function trimEnd(string, chars, guard) {
-      string = toString(string);
-      if (string && (guard || chars === undefined)) {
-        return string.slice(0, trimmedEndIndex(string) + 1);
-      }
-      if (!string || !(chars = baseToString(chars))) {
-        return string;
-      }
-      var strSymbols = stringToArray(string),
-          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;
-
-      return castSlice(strSymbols, 0, end).join('');
-    }
-
-    /**
-     * Removes leading whitespace or specified characters from `string`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category String
-     * @param {string} [string=''] The string to trim.
-     * @param {string} [chars=whitespace] The characters to trim.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {string} Returns the trimmed string.
-     * @example
-     *
-     * _.trimStart('  abc  ');
-     * // => 'abc  '
-     *
-     * _.trimStart('-_-abc-_-', '_-');
-     * // => 'abc-_-'
-     */
-    function trimStart(string, chars, guard) {
-      string = toString(string);
-      if (string && (guard || chars === undefined)) {
-        return string.replace(reTrimStart, '');
-      }
-      if (!string || !(chars = baseToString(chars))) {
-        return string;
-      }
-      var strSymbols = stringToArray(string),
-          start = charsStartIndex(strSymbols, stringToArray(chars));
-
-      return castSlice(strSymbols, start).join('');
-    }
-
-    /**
-     * Truncates `string` if it's longer than the given maximum string length.
-     * The last characters of the truncated string are replaced with the omission
-     * string which defaults to "...".
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category String
-     * @param {string} [string=''] The string to truncate.
-     * @param {Object} [options={}] The options object.
-     * @param {number} [options.length=30] The maximum string length.
-     * @param {string} [options.omission='...'] The string to indicate text is omitted.
-     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.
-     * @returns {string} Returns the truncated string.
-     * @example
-     *
-     * _.truncate('hi-diddly-ho there, neighborino');
-     * // => 'hi-diddly-ho there, neighbo...'
-     *
-     * _.truncate('hi-diddly-ho there, neighborino', {
-     *   'length': 24,
-     *   'separator': ' '
-     * });
-     * // => 'hi-diddly-ho there,...'
-     *
-     * _.truncate('hi-diddly-ho there, neighborino', {
-     *   'length': 24,
-     *   'separator': /,? +/
-     * });
-     * // => 'hi-diddly-ho there...'
-     *
-     * _.truncate('hi-diddly-ho there, neighborino', {
-     *   'omission': ' [...]'
-     * });
-     * // => 'hi-diddly-ho there, neig [...]'
-     */
-    function truncate(string, options) {
-      var length = DEFAULT_TRUNC_LENGTH,
-          omission = DEFAULT_TRUNC_OMISSION;
-
-      if (isObject(options)) {
-        var separator = 'separator' in options ? options.separator : separator;
-        length = 'length' in options ? toInteger(options.length) : length;
-        omission = 'omission' in options ? baseToString(options.omission) : omission;
-      }
-      string = toString(string);
-
-      var strLength = string.length;
-      if (hasUnicode(string)) {
-        var strSymbols = stringToArray(string);
-        strLength = strSymbols.length;
-      }
-      if (length >= strLength) {
-        return string;
-      }
-      var end = length - stringSize(omission);
-      if (end < 1) {
-        return omission;
-      }
-      var result = strSymbols
-        ? castSlice(strSymbols, 0, end).join('')
-        : string.slice(0, end);
-
-      if (separator === undefined) {
-        return result + omission;
-      }
-      if (strSymbols) {
-        end += (result.length - end);
-      }
-      if (isRegExp(separator)) {
-        if (string.slice(end).search(separator)) {
-          var match,
-              substring = result;
-
-          if (!separator.global) {
-            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');
-          }
-          separator.lastIndex = 0;
-          while ((match = separator.exec(substring))) {
-            var newEnd = match.index;
-          }
-          result = result.slice(0, newEnd === undefined ? end : newEnd);
-        }
-      } else if (string.indexOf(baseToString(separator), end) != end) {
-        var index = result.lastIndexOf(separator);
-        if (index > -1) {
-          result = result.slice(0, index);
-        }
-      }
-      return result + omission;
-    }
-
-    /**
-     * The inverse of `_.escape`; this method converts the HTML entities
-     * `&`, `<`, `>`, `"`, and `'` in `string` to
-     * their corresponding characters.
-     *
-     * **Note:** No other HTML entities are unescaped. To unescape additional
-     * HTML entities use a third-party library like [_he_](https://mths.be/he).
-     *
-     * @static
-     * @memberOf _
-     * @since 0.6.0
-     * @category String
-     * @param {string} [string=''] The string to unescape.
-     * @returns {string} Returns the unescaped string.
-     * @example
-     *
-     * _.unescape('fred, barney, & pebbles');
-     * // => 'fred, barney, & pebbles'
-     */
-    function unescape(string) {
-      string = toString(string);
-      return (string && reHasEscapedHtml.test(string))
-        ? string.replace(reEscapedHtml, unescapeHtmlChar)
-        : string;
-    }
-
-    /**
-     * Converts `string`, as space separated words, to upper case.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category String
-     * @param {string} [string=''] The string to convert.
-     * @returns {string} Returns the upper cased string.
-     * @example
-     *
-     * _.upperCase('--foo-bar');
-     * // => 'FOO BAR'
-     *
-     * _.upperCase('fooBar');
-     * // => 'FOO BAR'
-     *
-     * _.upperCase('__foo_bar__');
-     * // => 'FOO BAR'
-     */
-    var upperCase = createCompounder(function(result, word, index) {
-      return result + (index ? ' ' : '') + word.toUpperCase();
-    });
-
-    /**
-     * Converts the first character of `string` to upper case.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category String
-     * @param {string} [string=''] The string to convert.
-     * @returns {string} Returns the converted string.
-     * @example
-     *
-     * _.upperFirst('fred');
-     * // => 'Fred'
-     *
-     * _.upperFirst('FRED');
-     * // => 'FRED'
-     */
-    var upperFirst = createCaseFirst('toUpperCase');
-
-    /**
-     * Splits `string` into an array of its words.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category String
-     * @param {string} [string=''] The string to inspect.
-     * @param {RegExp|string} [pattern] The pattern to match words.
-     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
-     * @returns {Array} Returns the words of `string`.
-     * @example
-     *
-     * _.words('fred, barney, & pebbles');
-     * // => ['fred', 'barney', 'pebbles']
-     *
-     * _.words('fred, barney, & pebbles', /[^, ]+/g);
-     * // => ['fred', 'barney', '&', 'pebbles']
-     */
-    function words(string, pattern, guard) {
-      string = toString(string);
-      pattern = guard ? undefined : pattern;
-
-      if (pattern === undefined) {
-        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
-      }
-      return string.match(pattern) || [];
-    }
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Attempts to invoke `func`, returning either the result or the caught error
-     * object. Any additional arguments are provided to `func` when it's invoked.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Util
-     * @param {Function} func The function to attempt.
-     * @param {...*} [args] The arguments to invoke `func` with.
-     * @returns {*} Returns the `func` result or error object.
-     * @example
-     *
-     * // Avoid throwing errors for invalid selectors.
-     * var elements = _.attempt(function(selector) {
-     *   return document.querySelectorAll(selector);
-     * }, '>_>');
-     *
-     * if (_.isError(elements)) {
-     *   elements = [];
-     * }
-     */
-    var attempt = baseRest(function(func, args) {
-      try {
-        return apply(func, undefined, args);
-      } catch (e) {
-        return isError(e) ? e : new Error(e);
-      }
-    });
-
-    /**
-     * Binds methods of an object to the object itself, overwriting the existing
-     * method.
-     *
-     * **Note:** This method doesn't set the "length" property of bound functions.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Util
-     * @param {Object} object The object to bind and assign the bound methods to.
-     * @param {...(string|string[])} methodNames The object method names to bind.
-     * @returns {Object} Returns `object`.
-     * @example
-     *
-     * var view = {
-     *   'label': 'docs',
-     *   'click': function() {
-     *     console.log('clicked ' + this.label);
-     *   }
-     * };
-     *
-     * _.bindAll(view, ['click']);
-     * jQuery(element).on('click', view.click);
-     * // => Logs 'clicked docs' when clicked.
-     */
-    var bindAll = flatRest(function(object, methodNames) {
-      arrayEach(methodNames, function(key) {
-        key = toKey(key);
-        baseAssignValue(object, key, bind(object[key], object));
-      });
-      return object;
-    });
-
-    /**
-     * Creates a function that iterates over `pairs` and invokes the corresponding
-     * function of the first predicate to return truthy. The predicate-function
-     * pairs are invoked with the `this` binding and arguments of the created
-     * function.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Util
-     * @param {Array} pairs The predicate-function pairs.
-     * @returns {Function} Returns the new composite function.
-     * @example
-     *
-     * var func = _.cond([
-     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],
-     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],
-     *   [_.stubTrue,                      _.constant('no match')]
-     * ]);
-     *
-     * func({ 'a': 1, 'b': 2 });
-     * // => 'matches A'
-     *
-     * func({ 'a': 0, 'b': 1 });
-     * // => 'matches B'
-     *
-     * func({ 'a': '1', 'b': '2' });
-     * // => 'no match'
-     */
-    function cond(pairs) {
-      var length = pairs == null ? 0 : pairs.length,
-          toIteratee = getIteratee();
-
-      pairs = !length ? [] : arrayMap(pairs, function(pair) {
-        if (typeof pair[1] != 'function') {
-          throw new TypeError(FUNC_ERROR_TEXT);
-        }
-        return [toIteratee(pair[0]), pair[1]];
-      });
-
-      return baseRest(function(args) {
-        var index = -1;
-        while (++index < length) {
-          var pair = pairs[index];
-          if (apply(pair[0], this, args)) {
-            return apply(pair[1], this, args);
-          }
-        }
-      });
-    }
-
-    /**
-     * Creates a function that invokes the predicate properties of `source` with
-     * the corresponding property values of a given object, returning `true` if
-     * all predicates return truthy, else `false`.
-     *
-     * **Note:** The created function is equivalent to `_.conformsTo` with
-     * `source` partially applied.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Util
-     * @param {Object} source The object of property predicates to conform to.
-     * @returns {Function} Returns the new spec function.
-     * @example
-     *
-     * var objects = [
-     *   { 'a': 2, 'b': 1 },
-     *   { 'a': 1, 'b': 2 }
-     * ];
-     *
-     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));
-     * // => [{ 'a': 1, 'b': 2 }]
-     */
-    function conforms(source) {
-      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));
-    }
-
-    /**
-     * Creates a function that returns `value`.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.4.0
-     * @category Util
-     * @param {*} value The value to return from the new function.
-     * @returns {Function} Returns the new constant function.
-     * @example
-     *
-     * var objects = _.times(2, _.constant({ 'a': 1 }));
-     *
-     * console.log(objects);
-     * // => [{ 'a': 1 }, { 'a': 1 }]
-     *
-     * console.log(objects[0] === objects[1]);
-     * // => true
-     */
-    function constant(value) {
-      return function() {
-        return value;
-      };
-    }
-
-    /**
-     * Checks `value` to determine whether a default value should be returned in
-     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,
-     * or `undefined`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.14.0
-     * @category Util
-     * @param {*} value The value to check.
-     * @param {*} defaultValue The default value.
-     * @returns {*} Returns the resolved value.
-     * @example
-     *
-     * _.defaultTo(1, 10);
-     * // => 1
-     *
-     * _.defaultTo(undefined, 10);
-     * // => 10
-     */
-    function defaultTo(value, defaultValue) {
-      return (value == null || value !== value) ? defaultValue : value;
-    }
-
-    /**
-     * Creates a function that returns the result of invoking the given functions
-     * with the `this` binding of the created function, where each successive
-     * invocation is supplied the return value of the previous.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Util
-     * @param {...(Function|Function[])} [funcs] The functions to invoke.
-     * @returns {Function} Returns the new composite function.
-     * @see _.flowRight
-     * @example
-     *
-     * function square(n) {
-     *   return n * n;
-     * }
-     *
-     * var addSquare = _.flow([_.add, square]);
-     * addSquare(1, 2);
-     * // => 9
-     */
-    var flow = createFlow();
-
-    /**
-     * This method is like `_.flow` except that it creates a function that
-     * invokes the given functions from right to left.
-     *
-     * @static
-     * @since 3.0.0
-     * @memberOf _
-     * @category Util
-     * @param {...(Function|Function[])} [funcs] The functions to invoke.
-     * @returns {Function} Returns the new composite function.
-     * @see _.flow
-     * @example
-     *
-     * function square(n) {
-     *   return n * n;
-     * }
-     *
-     * var addSquare = _.flowRight([square, _.add]);
-     * addSquare(1, 2);
-     * // => 9
-     */
-    var flowRight = createFlow(true);
-
-    /**
-     * This method returns the first argument it receives.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Util
-     * @param {*} value Any value.
-     * @returns {*} Returns `value`.
-     * @example
-     *
-     * var object = { 'a': 1 };
-     *
-     * console.log(_.identity(object) === object);
-     * // => true
-     */
-    function identity(value) {
-      return value;
-    }
-
-    /**
-     * Creates a function that invokes `func` with the arguments of the created
-     * function. If `func` is a property name, the created function returns the
-     * property value for a given element. If `func` is an array or object, the
-     * created function returns `true` for elements that contain the equivalent
-     * source properties, otherwise it returns `false`.
-     *
-     * @static
-     * @since 4.0.0
-     * @memberOf _
-     * @category Util
-     * @param {*} [func=_.identity] The value to convert to a callback.
-     * @returns {Function} Returns the callback.
-     * @example
-     *
-     * var users = [
-     *   { 'user': 'barney', 'age': 36, 'active': true },
-     *   { 'user': 'fred',   'age': 40, 'active': false }
-     * ];
-     *
-     * // The `_.matches` iteratee shorthand.
-     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));
-     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]
-     *
-     * // The `_.matchesProperty` iteratee shorthand.
-     * _.filter(users, _.iteratee(['user', 'fred']));
-     * // => [{ 'user': 'fred', 'age': 40 }]
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.map(users, _.iteratee('user'));
-     * // => ['barney', 'fred']
-     *
-     * // Create custom iteratee shorthands.
-     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {
-     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {
-     *     return func.test(string);
-     *   };
-     * });
-     *
-     * _.filter(['abc', 'def'], /ef/);
-     * // => ['def']
-     */
-    function iteratee(func) {
-      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));
-    }
-
-    /**
-     * Creates a function that performs a partial deep comparison between a given
-     * object and `source`, returning `true` if the given object has equivalent
-     * property values, else `false`.
-     *
-     * **Note:** The created function is equivalent to `_.isMatch` with `source`
-     * partially applied.
-     *
-     * Partial comparisons will match empty array and empty object `source`
-     * values against any array or object value, respectively. See `_.isEqual`
-     * for a list of supported value comparisons.
-     *
-     * **Note:** Multiple values can be checked by combining several matchers
-     * using `_.overSome`
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Util
-     * @param {Object} source The object of property values to match.
-     * @returns {Function} Returns the new spec function.
-     * @example
-     *
-     * var objects = [
-     *   { 'a': 1, 'b': 2, 'c': 3 },
-     *   { 'a': 4, 'b': 5, 'c': 6 }
-     * ];
-     *
-     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));
-     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]
-     *
-     * // Checking for several possible values
-     * _.filter(objects, _.overSome([_.matches({ 'a': 1 }), _.matches({ 'a': 4 })]));
-     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
-     */
-    function matches(source) {
-      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));
-    }
-
-    /**
-     * Creates a function that performs a partial deep comparison between the
-     * value at `path` of a given object to `srcValue`, returning `true` if the
-     * object value is equivalent, else `false`.
-     *
-     * **Note:** Partial comparisons will match empty array and empty object
-     * `srcValue` values against any array or object value, respectively. See
-     * `_.isEqual` for a list of supported value comparisons.
-     *
-     * **Note:** Multiple values can be checked by combining several matchers
-     * using `_.overSome`
-     *
-     * @static
-     * @memberOf _
-     * @since 3.2.0
-     * @category Util
-     * @param {Array|string} path The path of the property to get.
-     * @param {*} srcValue The value to match.
-     * @returns {Function} Returns the new spec function.
-     * @example
-     *
-     * var objects = [
-     *   { 'a': 1, 'b': 2, 'c': 3 },
-     *   { 'a': 4, 'b': 5, 'c': 6 }
-     * ];
-     *
-     * _.find(objects, _.matchesProperty('a', 4));
-     * // => { 'a': 4, 'b': 5, 'c': 6 }
-     *
-     * // Checking for several possible values
-     * _.filter(objects, _.overSome([_.matchesProperty('a', 1), _.matchesProperty('a', 4)]));
-     * // => [{ 'a': 1, 'b': 2, 'c': 3 }, { 'a': 4, 'b': 5, 'c': 6 }]
-     */
-    function matchesProperty(path, srcValue) {
-      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));
-    }
-
-    /**
-     * Creates a function that invokes the method at `path` of a given object.
-     * Any additional arguments are provided to the invoked method.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.7.0
-     * @category Util
-     * @param {Array|string} path The path of the method to invoke.
-     * @param {...*} [args] The arguments to invoke the method with.
-     * @returns {Function} Returns the new invoker function.
-     * @example
-     *
-     * var objects = [
-     *   { 'a': { 'b': _.constant(2) } },
-     *   { 'a': { 'b': _.constant(1) } }
-     * ];
-     *
-     * _.map(objects, _.method('a.b'));
-     * // => [2, 1]
-     *
-     * _.map(objects, _.method(['a', 'b']));
-     * // => [2, 1]
-     */
-    var method = baseRest(function(path, args) {
-      return function(object) {
-        return baseInvoke(object, path, args);
-      };
-    });
-
-    /**
-     * The opposite of `_.method`; this method creates a function that invokes
-     * the method at a given path of `object`. Any additional arguments are
-     * provided to the invoked method.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.7.0
-     * @category Util
-     * @param {Object} object The object to query.
-     * @param {...*} [args] The arguments to invoke the method with.
-     * @returns {Function} Returns the new invoker function.
-     * @example
-     *
-     * var array = _.times(3, _.constant),
-     *     object = { 'a': array, 'b': array, 'c': array };
-     *
-     * _.map(['a[2]', 'c[0]'], _.methodOf(object));
-     * // => [2, 0]
-     *
-     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));
-     * // => [2, 0]
-     */
-    var methodOf = baseRest(function(object, args) {
-      return function(path) {
-        return baseInvoke(object, path, args);
-      };
-    });
-
-    /**
-     * Adds all own enumerable string keyed function properties of a source
-     * object to the destination object. If `object` is a function, then methods
-     * are added to its prototype as well.
-     *
-     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to
-     * avoid conflicts caused by modifying the original.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Util
-     * @param {Function|Object} [object=lodash] The destination object.
-     * @param {Object} source The object of functions to add.
-     * @param {Object} [options={}] The options object.
-     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.
-     * @returns {Function|Object} Returns `object`.
-     * @example
-     *
-     * function vowels(string) {
-     *   return _.filter(string, function(v) {
-     *     return /[aeiou]/i.test(v);
-     *   });
-     * }
-     *
-     * _.mixin({ 'vowels': vowels });
-     * _.vowels('fred');
-     * // => ['e']
-     *
-     * _('fred').vowels().value();
-     * // => ['e']
-     *
-     * _.mixin({ 'vowels': vowels }, { 'chain': false });
-     * _('fred').vowels();
-     * // => ['e']
-     */
-    function mixin(object, source, options) {
-      var props = keys(source),
-          methodNames = baseFunctions(source, props);
-
-      if (options == null &&
-          !(isObject(source) && (methodNames.length || !props.length))) {
-        options = source;
-        source = object;
-        object = this;
-        methodNames = baseFunctions(source, keys(source));
-      }
-      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,
-          isFunc = isFunction(object);
-
-      arrayEach(methodNames, function(methodName) {
-        var func = source[methodName];
-        object[methodName] = func;
-        if (isFunc) {
-          object.prototype[methodName] = function() {
-            var chainAll = this.__chain__;
-            if (chain || chainAll) {
-              var result = object(this.__wrapped__),
-                  actions = result.__actions__ = copyArray(this.__actions__);
-
-              actions.push({ 'func': func, 'args': arguments, 'thisArg': object });
-              result.__chain__ = chainAll;
-              return result;
-            }
-            return func.apply(object, arrayPush([this.value()], arguments));
-          };
-        }
-      });
-
-      return object;
-    }
-
-    /**
-     * Reverts the `_` variable to its previous value and returns a reference to
-     * the `lodash` function.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Util
-     * @returns {Function} Returns the `lodash` function.
-     * @example
-     *
-     * var lodash = _.noConflict();
-     */
-    function noConflict() {
-      if (root._ === this) {
-        root._ = oldDash;
-      }
-      return this;
-    }
-
-    /**
-     * This method returns `undefined`.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.3.0
-     * @category Util
-     * @example
-     *
-     * _.times(2, _.noop);
-     * // => [undefined, undefined]
-     */
-    function noop() {
-      // No operation performed.
-    }
-
-    /**
-     * Creates a function that gets the argument at index `n`. If `n` is negative,
-     * the nth argument from the end is returned.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Util
-     * @param {number} [n=0] The index of the argument to return.
-     * @returns {Function} Returns the new pass-thru function.
-     * @example
-     *
-     * var func = _.nthArg(1);
-     * func('a', 'b', 'c', 'd');
-     * // => 'b'
-     *
-     * var func = _.nthArg(-2);
-     * func('a', 'b', 'c', 'd');
-     * // => 'c'
-     */
-    function nthArg(n) {
-      n = toInteger(n);
-      return baseRest(function(args) {
-        return baseNth(args, n);
-      });
-    }
-
-    /**
-     * Creates a function that invokes `iteratees` with the arguments it receives
-     * and returns their results.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Util
-     * @param {...(Function|Function[])} [iteratees=[_.identity]]
-     *  The iteratees to invoke.
-     * @returns {Function} Returns the new function.
-     * @example
-     *
-     * var func = _.over([Math.max, Math.min]);
-     *
-     * func(1, 2, 3, 4);
-     * // => [4, 1]
-     */
-    var over = createOver(arrayMap);
-
-    /**
-     * Creates a function that checks if **all** of the `predicates` return
-     * truthy when invoked with the arguments it receives.
-     *
-     * Following shorthands are possible for providing predicates.
-     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
-     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Util
-     * @param {...(Function|Function[])} [predicates=[_.identity]]
-     *  The predicates to check.
-     * @returns {Function} Returns the new function.
-     * @example
-     *
-     * var func = _.overEvery([Boolean, isFinite]);
-     *
-     * func('1');
-     * // => true
-     *
-     * func(null);
-     * // => false
-     *
-     * func(NaN);
-     * // => false
-     */
-    var overEvery = createOver(arrayEvery);
-
-    /**
-     * Creates a function that checks if **any** of the `predicates` return
-     * truthy when invoked with the arguments it receives.
-     *
-     * Following shorthands are possible for providing predicates.
-     * Pass an `Object` and it will be used as an parameter for `_.matches` to create the predicate.
-     * Pass an `Array` of parameters for `_.matchesProperty` and the predicate will be created using them.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Util
-     * @param {...(Function|Function[])} [predicates=[_.identity]]
-     *  The predicates to check.
-     * @returns {Function} Returns the new function.
-     * @example
-     *
-     * var func = _.overSome([Boolean, isFinite]);
-     *
-     * func('1');
-     * // => true
-     *
-     * func(null);
-     * // => true
-     *
-     * func(NaN);
-     * // => false
-     *
-     * var matchesFunc = _.overSome([{ 'a': 1 }, { 'a': 2 }])
-     * var matchesPropertyFunc = _.overSome([['a', 1], ['a', 2]])
-     */
-    var overSome = createOver(arraySome);
-
-    /**
-     * Creates a function that returns the value at `path` of a given object.
-     *
-     * @static
-     * @memberOf _
-     * @since 2.4.0
-     * @category Util
-     * @param {Array|string} path The path of the property to get.
-     * @returns {Function} Returns the new accessor function.
-     * @example
-     *
-     * var objects = [
-     *   { 'a': { 'b': 2 } },
-     *   { 'a': { 'b': 1 } }
-     * ];
-     *
-     * _.map(objects, _.property('a.b'));
-     * // => [2, 1]
-     *
-     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
-     * // => [1, 2]
-     */
-    function property(path) {
-      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
-    }
-
-    /**
-     * The opposite of `_.property`; this method creates a function that returns
-     * the value at a given path of `object`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.0.0
-     * @category Util
-     * @param {Object} object The object to query.
-     * @returns {Function} Returns the new accessor function.
-     * @example
-     *
-     * var array = [0, 1, 2],
-     *     object = { 'a': array, 'b': array, 'c': array };
-     *
-     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));
-     * // => [2, 0]
-     *
-     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));
-     * // => [2, 0]
-     */
-    function propertyOf(object) {
-      return function(path) {
-        return object == null ? undefined : baseGet(object, path);
-      };
-    }
-
-    /**
-     * Creates an array of numbers (positive and/or negative) progressing from
-     * `start` up to, but not including, `end`. A step of `-1` is used if a negative
-     * `start` is specified without an `end` or `step`. If `end` is not specified,
-     * it's set to `start` with `start` then set to `0`.
-     *
-     * **Note:** JavaScript follows the IEEE-754 standard for resolving
-     * floating-point values which can produce unexpected results.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Util
-     * @param {number} [start=0] The start of the range.
-     * @param {number} end The end of the range.
-     * @param {number} [step=1] The value to increment or decrement by.
-     * @returns {Array} Returns the range of numbers.
-     * @see _.inRange, _.rangeRight
-     * @example
-     *
-     * _.range(4);
-     * // => [0, 1, 2, 3]
-     *
-     * _.range(-4);
-     * // => [0, -1, -2, -3]
-     *
-     * _.range(1, 5);
-     * // => [1, 2, 3, 4]
-     *
-     * _.range(0, 20, 5);
-     * // => [0, 5, 10, 15]
-     *
-     * _.range(0, -4, -1);
-     * // => [0, -1, -2, -3]
-     *
-     * _.range(1, 4, 0);
-     * // => [1, 1, 1]
-     *
-     * _.range(0);
-     * // => []
-     */
-    var range = createRange();
-
-    /**
-     * This method is like `_.range` except that it populates values in
-     * descending order.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Util
-     * @param {number} [start=0] The start of the range.
-     * @param {number} end The end of the range.
-     * @param {number} [step=1] The value to increment or decrement by.
-     * @returns {Array} Returns the range of numbers.
-     * @see _.inRange, _.range
-     * @example
-     *
-     * _.rangeRight(4);
-     * // => [3, 2, 1, 0]
-     *
-     * _.rangeRight(-4);
-     * // => [-3, -2, -1, 0]
-     *
-     * _.rangeRight(1, 5);
-     * // => [4, 3, 2, 1]
-     *
-     * _.rangeRight(0, 20, 5);
-     * // => [15, 10, 5, 0]
-     *
-     * _.rangeRight(0, -4, -1);
-     * // => [-3, -2, -1, 0]
-     *
-     * _.rangeRight(1, 4, 0);
-     * // => [1, 1, 1]
-     *
-     * _.rangeRight(0);
-     * // => []
-     */
-    var rangeRight = createRange(true);
-
-    /**
-     * This method returns a new empty array.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.13.0
-     * @category Util
-     * @returns {Array} Returns the new empty array.
-     * @example
-     *
-     * var arrays = _.times(2, _.stubArray);
-     *
-     * console.log(arrays);
-     * // => [[], []]
-     *
-     * console.log(arrays[0] === arrays[1]);
-     * // => false
-     */
-    function stubArray() {
-      return [];
-    }
-
-    /**
-     * This method returns `false`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.13.0
-     * @category Util
-     * @returns {boolean} Returns `false`.
-     * @example
-     *
-     * _.times(2, _.stubFalse);
-     * // => [false, false]
-     */
-    function stubFalse() {
-      return false;
-    }
-
-    /**
-     * This method returns a new empty object.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.13.0
-     * @category Util
-     * @returns {Object} Returns the new empty object.
-     * @example
-     *
-     * var objects = _.times(2, _.stubObject);
-     *
-     * console.log(objects);
-     * // => [{}, {}]
-     *
-     * console.log(objects[0] === objects[1]);
-     * // => false
-     */
-    function stubObject() {
-      return {};
-    }
-
-    /**
-     * This method returns an empty string.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.13.0
-     * @category Util
-     * @returns {string} Returns the empty string.
-     * @example
-     *
-     * _.times(2, _.stubString);
-     * // => ['', '']
-     */
-    function stubString() {
-      return '';
-    }
-
-    /**
-     * This method returns `true`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.13.0
-     * @category Util
-     * @returns {boolean} Returns `true`.
-     * @example
-     *
-     * _.times(2, _.stubTrue);
-     * // => [true, true]
-     */
-    function stubTrue() {
-      return true;
-    }
-
-    /**
-     * Invokes the iteratee `n` times, returning an array of the results of
-     * each invocation. The iteratee is invoked with one argument; (index).
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Util
-     * @param {number} n The number of times to invoke `iteratee`.
-     * @param {Function} [iteratee=_.identity] The function invoked per iteration.
-     * @returns {Array} Returns the array of results.
-     * @example
-     *
-     * _.times(3, String);
-     * // => ['0', '1', '2']
-     *
-     *  _.times(4, _.constant(0));
-     * // => [0, 0, 0, 0]
-     */
-    function times(n, iteratee) {
-      n = toInteger(n);
-      if (n < 1 || n > MAX_SAFE_INTEGER) {
-        return [];
-      }
-      var index = MAX_ARRAY_LENGTH,
-          length = nativeMin(n, MAX_ARRAY_LENGTH);
-
-      iteratee = getIteratee(iteratee);
-      n -= MAX_ARRAY_LENGTH;
-
-      var result = baseTimes(length, iteratee);
-      while (++index < n) {
-        iteratee(index);
-      }
-      return result;
-    }
-
-    /**
-     * Converts `value` to a property path array.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Util
-     * @param {*} value The value to convert.
-     * @returns {Array} Returns the new property path array.
-     * @example
-     *
-     * _.toPath('a.b.c');
-     * // => ['a', 'b', 'c']
-     *
-     * _.toPath('a[0].b.c');
-     * // => ['a', '0', 'b', 'c']
-     */
-    function toPath(value) {
-      if (isArray(value)) {
-        return arrayMap(value, toKey);
-      }
-      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));
-    }
-
-    /**
-     * Generates a unique ID. If `prefix` is given, the ID is appended to it.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Util
-     * @param {string} [prefix=''] The value to prefix the ID with.
-     * @returns {string} Returns the unique ID.
-     * @example
-     *
-     * _.uniqueId('contact_');
-     * // => 'contact_104'
-     *
-     * _.uniqueId();
-     * // => '105'
-     */
-    function uniqueId(prefix) {
-      var id = ++idCounter;
-      return toString(prefix) + id;
-    }
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * Adds two numbers.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.4.0
-     * @category Math
-     * @param {number} augend The first number in an addition.
-     * @param {number} addend The second number in an addition.
-     * @returns {number} Returns the total.
-     * @example
-     *
-     * _.add(6, 4);
-     * // => 10
-     */
-    var add = createMathOperation(function(augend, addend) {
-      return augend + addend;
-    }, 0);
-
-    /**
-     * Computes `number` rounded up to `precision`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.10.0
-     * @category Math
-     * @param {number} number The number to round up.
-     * @param {number} [precision=0] The precision to round up to.
-     * @returns {number} Returns the rounded up number.
-     * @example
-     *
-     * _.ceil(4.006);
-     * // => 5
-     *
-     * _.ceil(6.004, 2);
-     * // => 6.01
-     *
-     * _.ceil(6040, -2);
-     * // => 6100
-     */
-    var ceil = createRound('ceil');
-
-    /**
-     * Divide two numbers.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.7.0
-     * @category Math
-     * @param {number} dividend The first number in a division.
-     * @param {number} divisor The second number in a division.
-     * @returns {number} Returns the quotient.
-     * @example
-     *
-     * _.divide(6, 4);
-     * // => 1.5
-     */
-    var divide = createMathOperation(function(dividend, divisor) {
-      return dividend / divisor;
-    }, 1);
-
-    /**
-     * Computes `number` rounded down to `precision`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.10.0
-     * @category Math
-     * @param {number} number The number to round down.
-     * @param {number} [precision=0] The precision to round down to.
-     * @returns {number} Returns the rounded down number.
-     * @example
-     *
-     * _.floor(4.006);
-     * // => 4
-     *
-     * _.floor(0.046, 2);
-     * // => 0.04
-     *
-     * _.floor(4060, -2);
-     * // => 4000
-     */
-    var floor = createRound('floor');
-
-    /**
-     * Computes the maximum value of `array`. If `array` is empty or falsey,
-     * `undefined` is returned.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Math
-     * @param {Array} array The array to iterate over.
-     * @returns {*} Returns the maximum value.
-     * @example
-     *
-     * _.max([4, 2, 8, 6]);
-     * // => 8
-     *
-     * _.max([]);
-     * // => undefined
-     */
-    function max(array) {
-      return (array && array.length)
-        ? baseExtremum(array, identity, baseGt)
-        : undefined;
-    }
-
-    /**
-     * This method is like `_.max` except that it accepts `iteratee` which is
-     * invoked for each element in `array` to generate the criterion by which
-     * the value is ranked. The iteratee is invoked with one argument: (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Math
-     * @param {Array} array The array to iterate over.
-     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-     * @returns {*} Returns the maximum value.
-     * @example
-     *
-     * var objects = [{ 'n': 1 }, { 'n': 2 }];
-     *
-     * _.maxBy(objects, function(o) { return o.n; });
-     * // => { 'n': 2 }
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.maxBy(objects, 'n');
-     * // => { 'n': 2 }
-     */
-    function maxBy(array, iteratee) {
-      return (array && array.length)
-        ? baseExtremum(array, getIteratee(iteratee, 2), baseGt)
-        : undefined;
-    }
-
-    /**
-     * Computes the mean of the values in `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Math
-     * @param {Array} array The array to iterate over.
-     * @returns {number} Returns the mean.
-     * @example
-     *
-     * _.mean([4, 2, 8, 6]);
-     * // => 5
-     */
-    function mean(array) {
-      return baseMean(array, identity);
-    }
-
-    /**
-     * This method is like `_.mean` except that it accepts `iteratee` which is
-     * invoked for each element in `array` to generate the value to be averaged.
-     * The iteratee is invoked with one argument: (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.7.0
-     * @category Math
-     * @param {Array} array The array to iterate over.
-     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-     * @returns {number} Returns the mean.
-     * @example
-     *
-     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
-     *
-     * _.meanBy(objects, function(o) { return o.n; });
-     * // => 5
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.meanBy(objects, 'n');
-     * // => 5
-     */
-    function meanBy(array, iteratee) {
-      return baseMean(array, getIteratee(iteratee, 2));
-    }
-
-    /**
-     * Computes the minimum value of `array`. If `array` is empty or falsey,
-     * `undefined` is returned.
-     *
-     * @static
-     * @since 0.1.0
-     * @memberOf _
-     * @category Math
-     * @param {Array} array The array to iterate over.
-     * @returns {*} Returns the minimum value.
-     * @example
-     *
-     * _.min([4, 2, 8, 6]);
-     * // => 2
-     *
-     * _.min([]);
-     * // => undefined
-     */
-    function min(array) {
-      return (array && array.length)
-        ? baseExtremum(array, identity, baseLt)
-        : undefined;
-    }
-
-    /**
-     * This method is like `_.min` except that it accepts `iteratee` which is
-     * invoked for each element in `array` to generate the criterion by which
-     * the value is ranked. The iteratee is invoked with one argument: (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Math
-     * @param {Array} array The array to iterate over.
-     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-     * @returns {*} Returns the minimum value.
-     * @example
-     *
-     * var objects = [{ 'n': 1 }, { 'n': 2 }];
-     *
-     * _.minBy(objects, function(o) { return o.n; });
-     * // => { 'n': 1 }
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.minBy(objects, 'n');
-     * // => { 'n': 1 }
-     */
-    function minBy(array, iteratee) {
-      return (array && array.length)
-        ? baseExtremum(array, getIteratee(iteratee, 2), baseLt)
-        : undefined;
-    }
-
-    /**
-     * Multiply two numbers.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.7.0
-     * @category Math
-     * @param {number} multiplier The first number in a multiplication.
-     * @param {number} multiplicand The second number in a multiplication.
-     * @returns {number} Returns the product.
-     * @example
-     *
-     * _.multiply(6, 4);
-     * // => 24
-     */
-    var multiply = createMathOperation(function(multiplier, multiplicand) {
-      return multiplier * multiplicand;
-    }, 1);
-
-    /**
-     * Computes `number` rounded to `precision`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.10.0
-     * @category Math
-     * @param {number} number The number to round.
-     * @param {number} [precision=0] The precision to round to.
-     * @returns {number} Returns the rounded number.
-     * @example
-     *
-     * _.round(4.006);
-     * // => 4
-     *
-     * _.round(4.006, 2);
-     * // => 4.01
-     *
-     * _.round(4060, -2);
-     * // => 4100
-     */
-    var round = createRound('round');
-
-    /**
-     * Subtract two numbers.
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Math
-     * @param {number} minuend The first number in a subtraction.
-     * @param {number} subtrahend The second number in a subtraction.
-     * @returns {number} Returns the difference.
-     * @example
-     *
-     * _.subtract(6, 4);
-     * // => 2
-     */
-    var subtract = createMathOperation(function(minuend, subtrahend) {
-      return minuend - subtrahend;
-    }, 0);
-
-    /**
-     * Computes the sum of the values in `array`.
-     *
-     * @static
-     * @memberOf _
-     * @since 3.4.0
-     * @category Math
-     * @param {Array} array The array to iterate over.
-     * @returns {number} Returns the sum.
-     * @example
-     *
-     * _.sum([4, 2, 8, 6]);
-     * // => 20
-     */
-    function sum(array) {
-      return (array && array.length)
-        ? baseSum(array, identity)
-        : 0;
-    }
-
-    /**
-     * This method is like `_.sum` except that it accepts `iteratee` which is
-     * invoked for each element in `array` to generate the value to be summed.
-     * The iteratee is invoked with one argument: (value).
-     *
-     * @static
-     * @memberOf _
-     * @since 4.0.0
-     * @category Math
-     * @param {Array} array The array to iterate over.
-     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
-     * @returns {number} Returns the sum.
-     * @example
-     *
-     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];
-     *
-     * _.sumBy(objects, function(o) { return o.n; });
-     * // => 20
-     *
-     * // The `_.property` iteratee shorthand.
-     * _.sumBy(objects, 'n');
-     * // => 20
-     */
-    function sumBy(array, iteratee) {
-      return (array && array.length)
-        ? baseSum(array, getIteratee(iteratee, 2))
-        : 0;
-    }
-
-    /*------------------------------------------------------------------------*/
-
-    // Add methods that return wrapped values in chain sequences.
-    lodash.after = after;
-    lodash.ary = ary;
-    lodash.assign = assign;
-    lodash.assignIn = assignIn;
-    lodash.assignInWith = assignInWith;
-    lodash.assignWith = assignWith;
-    lodash.at = at;
-    lodash.before = before;
-    lodash.bind = bind;
-    lodash.bindAll = bindAll;
-    lodash.bindKey = bindKey;
-    lodash.castArray = castArray;
-    lodash.chain = chain;
-    lodash.chunk = chunk;
-    lodash.compact = compact;
-    lodash.concat = concat;
-    lodash.cond = cond;
-    lodash.conforms = conforms;
-    lodash.constant = constant;
-    lodash.countBy = countBy;
-    lodash.create = create;
-    lodash.curry = curry;
-    lodash.curryRight = curryRight;
-    lodash.debounce = debounce;
-    lodash.defaults = defaults;
-    lodash.defaultsDeep = defaultsDeep;
-    lodash.defer = defer;
-    lodash.delay = delay;
-    lodash.difference = difference;
-    lodash.differenceBy = differenceBy;
-    lodash.differenceWith = differenceWith;
-    lodash.drop = drop;
-    lodash.dropRight = dropRight;
-    lodash.dropRightWhile = dropRightWhile;
-    lodash.dropWhile = dropWhile;
-    lodash.fill = fill;
-    lodash.filter = filter;
-    lodash.flatMap = flatMap;
-    lodash.flatMapDeep = flatMapDeep;
-    lodash.flatMapDepth = flatMapDepth;
-    lodash.flatten = flatten;
-    lodash.flattenDeep = flattenDeep;
-    lodash.flattenDepth = flattenDepth;
-    lodash.flip = flip;
-    lodash.flow = flow;
-    lodash.flowRight = flowRight;
-    lodash.fromPairs = fromPairs;
-    lodash.functions = functions;
-    lodash.functionsIn = functionsIn;
-    lodash.groupBy = groupBy;
-    lodash.initial = initial;
-    lodash.intersection = intersection;
-    lodash.intersectionBy = intersectionBy;
-    lodash.intersectionWith = intersectionWith;
-    lodash.invert = invert;
-    lodash.invertBy = invertBy;
-    lodash.invokeMap = invokeMap;
-    lodash.iteratee = iteratee;
-    lodash.keyBy = keyBy;
-    lodash.keys = keys;
-    lodash.keysIn = keysIn;
-    lodash.map = map;
-    lodash.mapKeys = mapKeys;
-    lodash.mapValues = mapValues;
-    lodash.matches = matches;
-    lodash.matchesProperty = matchesProperty;
-    lodash.memoize = memoize;
-    lodash.merge = merge;
-    lodash.mergeWith = mergeWith;
-    lodash.method = method;
-    lodash.methodOf = methodOf;
-    lodash.mixin = mixin;
-    lodash.negate = negate;
-    lodash.nthArg = nthArg;
-    lodash.omit = omit;
-    lodash.omitBy = omitBy;
-    lodash.once = once;
-    lodash.orderBy = orderBy;
-    lodash.over = over;
-    lodash.overArgs = overArgs;
-    lodash.overEvery = overEvery;
-    lodash.overSome = overSome;
-    lodash.partial = partial;
-    lodash.partialRight = partialRight;
-    lodash.partition = partition;
-    lodash.pick = pick;
-    lodash.pickBy = pickBy;
-    lodash.property = property;
-    lodash.propertyOf = propertyOf;
-    lodash.pull = pull;
-    lodash.pullAll = pullAll;
-    lodash.pullAllBy = pullAllBy;
-    lodash.pullAllWith = pullAllWith;
-    lodash.pullAt = pullAt;
-    lodash.range = range;
-    lodash.rangeRight = rangeRight;
-    lodash.rearg = rearg;
-    lodash.reject = reject;
-    lodash.remove = remove;
-    lodash.rest = rest;
-    lodash.reverse = reverse;
-    lodash.sampleSize = sampleSize;
-    lodash.set = set;
-    lodash.setWith = setWith;
-    lodash.shuffle = shuffle;
-    lodash.slice = slice;
-    lodash.sortBy = sortBy;
-    lodash.sortedUniq = sortedUniq;
-    lodash.sortedUniqBy = sortedUniqBy;
-    lodash.split = split;
-    lodash.spread = spread;
-    lodash.tail = tail;
-    lodash.take = take;
-    lodash.takeRight = takeRight;
-    lodash.takeRightWhile = takeRightWhile;
-    lodash.takeWhile = takeWhile;
-    lodash.tap = tap;
-    lodash.throttle = throttle;
-    lodash.thru = thru;
-    lodash.toArray = toArray;
-    lodash.toPairs = toPairs;
-    lodash.toPairsIn = toPairsIn;
-    lodash.toPath = toPath;
-    lodash.toPlainObject = toPlainObject;
-    lodash.transform = transform;
-    lodash.unary = unary;
-    lodash.union = union;
-    lodash.unionBy = unionBy;
-    lodash.unionWith = unionWith;
-    lodash.uniq = uniq;
-    lodash.uniqBy = uniqBy;
-    lodash.uniqWith = uniqWith;
-    lodash.unset = unset;
-    lodash.unzip = unzip;
-    lodash.unzipWith = unzipWith;
-    lodash.update = update;
-    lodash.updateWith = updateWith;
-    lodash.values = values;
-    lodash.valuesIn = valuesIn;
-    lodash.without = without;
-    lodash.words = words;
-    lodash.wrap = wrap;
-    lodash.xor = xor;
-    lodash.xorBy = xorBy;
-    lodash.xorWith = xorWith;
-    lodash.zip = zip;
-    lodash.zipObject = zipObject;
-    lodash.zipObjectDeep = zipObjectDeep;
-    lodash.zipWith = zipWith;
-
-    // Add aliases.
-    lodash.entries = toPairs;
-    lodash.entriesIn = toPairsIn;
-    lodash.extend = assignIn;
-    lodash.extendWith = assignInWith;
-
-    // Add methods to `lodash.prototype`.
-    mixin(lodash, lodash);
-
-    /*------------------------------------------------------------------------*/
-
-    // Add methods that return unwrapped values in chain sequences.
-    lodash.add = add;
-    lodash.attempt = attempt;
-    lodash.camelCase = camelCase;
-    lodash.capitalize = capitalize;
-    lodash.ceil = ceil;
-    lodash.clamp = clamp;
-    lodash.clone = clone;
-    lodash.cloneDeep = cloneDeep;
-    lodash.cloneDeepWith = cloneDeepWith;
-    lodash.cloneWith = cloneWith;
-    lodash.conformsTo = conformsTo;
-    lodash.deburr = deburr;
-    lodash.defaultTo = defaultTo;
-    lodash.divide = divide;
-    lodash.endsWith = endsWith;
-    lodash.eq = eq;
-    lodash.escape = escape;
-    lodash.escapeRegExp = escapeRegExp;
-    lodash.every = every;
-    lodash.find = find;
-    lodash.findIndex = findIndex;
-    lodash.findKey = findKey;
-    lodash.findLast = findLast;
-    lodash.findLastIndex = findLastIndex;
-    lodash.findLastKey = findLastKey;
-    lodash.floor = floor;
-    lodash.forEach = forEach;
-    lodash.forEachRight = forEachRight;
-    lodash.forIn = forIn;
-    lodash.forInRight = forInRight;
-    lodash.forOwn = forOwn;
-    lodash.forOwnRight = forOwnRight;
-    lodash.get = get;
-    lodash.gt = gt;
-    lodash.gte = gte;
-    lodash.has = has;
-    lodash.hasIn = hasIn;
-    lodash.head = head;
-    lodash.identity = identity;
-    lodash.includes = includes;
-    lodash.indexOf = indexOf;
-    lodash.inRange = inRange;
-    lodash.invoke = invoke;
-    lodash.isArguments = isArguments;
-    lodash.isArray = isArray;
-    lodash.isArrayBuffer = isArrayBuffer;
-    lodash.isArrayLike = isArrayLike;
-    lodash.isArrayLikeObject = isArrayLikeObject;
-    lodash.isBoolean = isBoolean;
-    lodash.isBuffer = isBuffer;
-    lodash.isDate = isDate;
-    lodash.isElement = isElement;
-    lodash.isEmpty = isEmpty;
-    lodash.isEqual = isEqual;
-    lodash.isEqualWith = isEqualWith;
-    lodash.isError = isError;
-    lodash.isFinite = isFinite;
-    lodash.isFunction = isFunction;
-    lodash.isInteger = isInteger;
-    lodash.isLength = isLength;
-    lodash.isMap = isMap;
-    lodash.isMatch = isMatch;
-    lodash.isMatchWith = isMatchWith;
-    lodash.isNaN = isNaN;
-    lodash.isNative = isNative;
-    lodash.isNil = isNil;
-    lodash.isNull = isNull;
-    lodash.isNumber = isNumber;
-    lodash.isObject = isObject;
-    lodash.isObjectLike = isObjectLike;
-    lodash.isPlainObject = isPlainObject;
-    lodash.isRegExp = isRegExp;
-    lodash.isSafeInteger = isSafeInteger;
-    lodash.isSet = isSet;
-    lodash.isString = isString;
-    lodash.isSymbol = isSymbol;
-    lodash.isTypedArray = isTypedArray;
-    lodash.isUndefined = isUndefined;
-    lodash.isWeakMap = isWeakMap;
-    lodash.isWeakSet = isWeakSet;
-    lodash.join = join;
-    lodash.kebabCase = kebabCase;
-    lodash.last = last;
-    lodash.lastIndexOf = lastIndexOf;
-    lodash.lowerCase = lowerCase;
-    lodash.lowerFirst = lowerFirst;
-    lodash.lt = lt;
-    lodash.lte = lte;
-    lodash.max = max;
-    lodash.maxBy = maxBy;
-    lodash.mean = mean;
-    lodash.meanBy = meanBy;
-    lodash.min = min;
-    lodash.minBy = minBy;
-    lodash.stubArray = stubArray;
-    lodash.stubFalse = stubFalse;
-    lodash.stubObject = stubObject;
-    lodash.stubString = stubString;
-    lodash.stubTrue = stubTrue;
-    lodash.multiply = multiply;
-    lodash.nth = nth;
-    lodash.noConflict = noConflict;
-    lodash.noop = noop;
-    lodash.now = now;
-    lodash.pad = pad;
-    lodash.padEnd = padEnd;
-    lodash.padStart = padStart;
-    lodash.parseInt = parseInt;
-    lodash.random = random;
-    lodash.reduce = reduce;
-    lodash.reduceRight = reduceRight;
-    lodash.repeat = repeat;
-    lodash.replace = replace;
-    lodash.result = result;
-    lodash.round = round;
-    lodash.runInContext = runInContext;
-    lodash.sample = sample;
-    lodash.size = size;
-    lodash.snakeCase = snakeCase;
-    lodash.some = some;
-    lodash.sortedIndex = sortedIndex;
-    lodash.sortedIndexBy = sortedIndexBy;
-    lodash.sortedIndexOf = sortedIndexOf;
-    lodash.sortedLastIndex = sortedLastIndex;
-    lodash.sortedLastIndexBy = sortedLastIndexBy;
-    lodash.sortedLastIndexOf = sortedLastIndexOf;
-    lodash.startCase = startCase;
-    lodash.startsWith = startsWith;
-    lodash.subtract = subtract;
-    lodash.sum = sum;
-    lodash.sumBy = sumBy;
-    lodash.template = template;
-    lodash.times = times;
-    lodash.toFinite = toFinite;
-    lodash.toInteger = toInteger;
-    lodash.toLength = toLength;
-    lodash.toLower = toLower;
-    lodash.toNumber = toNumber;
-    lodash.toSafeInteger = toSafeInteger;
-    lodash.toString = toString;
-    lodash.toUpper = toUpper;
-    lodash.trim = trim;
-    lodash.trimEnd = trimEnd;
-    lodash.trimStart = trimStart;
-    lodash.truncate = truncate;
-    lodash.unescape = unescape;
-    lodash.uniqueId = uniqueId;
-    lodash.upperCase = upperCase;
-    lodash.upperFirst = upperFirst;
-
-    // Add aliases.
-    lodash.each = forEach;
-    lodash.eachRight = forEachRight;
-    lodash.first = head;
-
-    mixin(lodash, (function() {
-      var source = {};
-      baseForOwn(lodash, function(func, methodName) {
-        if (!hasOwnProperty.call(lodash.prototype, methodName)) {
-          source[methodName] = func;
-        }
-      });
-      return source;
-    }()), { 'chain': false });
-
-    /*------------------------------------------------------------------------*/
-
-    /**
-     * The semantic version number.
-     *
-     * @static
-     * @memberOf _
-     * @type {string}
-     */
-    lodash.VERSION = VERSION;
-
-    // Assign default placeholders.
-    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function(methodName) {
-      lodash[methodName].placeholder = lodash;
-    });
-
-    // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.
-    arrayEach(['drop', 'take'], function(methodName, index) {
-      LazyWrapper.prototype[methodName] = function(n) {
-        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);
-
-        var result = (this.__filtered__ && !index)
-          ? new LazyWrapper(this)
-          : this.clone();
-
-        if (result.__filtered__) {
-          result.__takeCount__ = nativeMin(n, result.__takeCount__);
-        } else {
-          result.__views__.push({
-            'size': nativeMin(n, MAX_ARRAY_LENGTH),
-            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')
-          });
-        }
-        return result;
-      };
-
-      LazyWrapper.prototype[methodName + 'Right'] = function(n) {
-        return this.reverse()[methodName](n).reverse();
-      };
-    });
-
-    // Add `LazyWrapper` methods that accept an `iteratee` value.
-    arrayEach(['filter', 'map', 'takeWhile'], function(methodName, index) {
-      var type = index + 1,
-          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;
-
-      LazyWrapper.prototype[methodName] = function(iteratee) {
-        var result = this.clone();
-        result.__iteratees__.push({
-          'iteratee': getIteratee(iteratee, 3),
-          'type': type
-        });
-        result.__filtered__ = result.__filtered__ || isFilter;
-        return result;
-      };
-    });
-
-    // Add `LazyWrapper` methods for `_.head` and `_.last`.
-    arrayEach(['head', 'last'], function(methodName, index) {
-      var takeName = 'take' + (index ? 'Right' : '');
-
-      LazyWrapper.prototype[methodName] = function() {
-        return this[takeName](1).value()[0];
-      };
-    });
-
-    // Add `LazyWrapper` methods for `_.initial` and `_.tail`.
-    arrayEach(['initial', 'tail'], function(methodName, index) {
-      var dropName = 'drop' + (index ? '' : 'Right');
-
-      LazyWrapper.prototype[methodName] = function() {
-        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);
-      };
-    });
-
-    LazyWrapper.prototype.compact = function() {
-      return this.filter(identity);
-    };
-
-    LazyWrapper.prototype.find = function(predicate) {
-      return this.filter(predicate).head();
-    };
-
-    LazyWrapper.prototype.findLast = function(predicate) {
-      return this.reverse().find(predicate);
-    };
-
-    LazyWrapper.prototype.invokeMap = baseRest(function(path, args) {
-      if (typeof path == 'function') {
-        return new LazyWrapper(this);
-      }
-      return this.map(function(value) {
-        return baseInvoke(value, path, args);
-      });
-    });
-
-    LazyWrapper.prototype.reject = function(predicate) {
-      return this.filter(negate(getIteratee(predicate)));
-    };
-
-    LazyWrapper.prototype.slice = function(start, end) {
-      start = toInteger(start);
-
-      var result = this;
-      if (result.__filtered__ && (start > 0 || end < 0)) {
-        return new LazyWrapper(result);
-      }
-      if (start < 0) {
-        result = result.takeRight(-start);
-      } else if (start) {
-        result = result.drop(start);
-      }
-      if (end !== undefined) {
-        end = toInteger(end);
-        result = end < 0 ? result.dropRight(-end) : result.take(end - start);
-      }
-      return result;
-    };
-
-    LazyWrapper.prototype.takeRightWhile = function(predicate) {
-      return this.reverse().takeWhile(predicate).reverse();
-    };
-
-    LazyWrapper.prototype.toArray = function() {
-      return this.take(MAX_ARRAY_LENGTH);
-    };
-
-    // Add `LazyWrapper` methods to `lodash.prototype`.
-    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
-      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),
-          isTaker = /^(?:head|last)$/.test(methodName),
-          lodashFunc = lodash[isTaker ? ('take' + (methodName == 'last' ? 'Right' : '')) : methodName],
-          retUnwrapped = isTaker || /^find/.test(methodName);
-
-      if (!lodashFunc) {
-        return;
-      }
-      lodash.prototype[methodName] = function() {
-        var value = this.__wrapped__,
-            args = isTaker ? [1] : arguments,
-            isLazy = value instanceof LazyWrapper,
-            iteratee = args[0],
-            useLazy = isLazy || isArray(value);
-
-        var interceptor = function(value) {
-          var result = lodashFunc.apply(lodash, arrayPush([value], args));
-          return (isTaker && chainAll) ? result[0] : result;
-        };
-
-        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {
-          // Avoid lazy use if the iteratee has a "length" value other than `1`.
-          isLazy = useLazy = false;
-        }
-        var chainAll = this.__chain__,
-            isHybrid = !!this.__actions__.length,
-            isUnwrapped = retUnwrapped && !chainAll,
-            onlyLazy = isLazy && !isHybrid;
-
-        if (!retUnwrapped && useLazy) {
-          value = onlyLazy ? value : new LazyWrapper(this);
-          var result = func.apply(value, args);
-          result.__actions__.push({ 'func': thru, 'args': [interceptor], 'thisArg': undefined });
-          return new LodashWrapper(result, chainAll);
-        }
-        if (isUnwrapped && onlyLazy) {
-          return func.apply(this, args);
-        }
-        result = this.thru(interceptor);
-        return isUnwrapped ? (isTaker ? result.value()[0] : result.value()) : result;
-      };
-    });
-
-    // Add `Array` methods to `lodash.prototype`.
-    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function(methodName) {
-      var func = arrayProto[methodName],
-          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',
-          retUnwrapped = /^(?:pop|shift)$/.test(methodName);
-
-      lodash.prototype[methodName] = function() {
-        var args = arguments;
-        if (retUnwrapped && !this.__chain__) {
-          var value = this.value();
-          return func.apply(isArray(value) ? value : [], args);
-        }
-        return this[chainName](function(value) {
-          return func.apply(isArray(value) ? value : [], args);
-        });
-      };
-    });
-
-    // Map minified method names to their real names.
-    baseForOwn(LazyWrapper.prototype, function(func, methodName) {
-      var lodashFunc = lodash[methodName];
-      if (lodashFunc) {
-        var key = lodashFunc.name + '';
-        if (!hasOwnProperty.call(realNames, key)) {
-          realNames[key] = [];
-        }
-        realNames[key].push({ 'name': methodName, 'func': lodashFunc });
-      }
-    });
-
-    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{
-      'name': 'wrapper',
-      'func': undefined
-    }];
-
-    // Add methods to `LazyWrapper`.
-    LazyWrapper.prototype.clone = lazyClone;
-    LazyWrapper.prototype.reverse = lazyReverse;
-    LazyWrapper.prototype.value = lazyValue;
-
-    // Add chain sequence methods to the `lodash` wrapper.
-    lodash.prototype.at = wrapperAt;
-    lodash.prototype.chain = wrapperChain;
-    lodash.prototype.commit = wrapperCommit;
-    lodash.prototype.next = wrapperNext;
-    lodash.prototype.plant = wrapperPlant;
-    lodash.prototype.reverse = wrapperReverse;
-    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue;
-
-    // Add lazy aliases.
-    lodash.prototype.first = lodash.prototype.head;
-
-    if (symIterator) {
-      lodash.prototype[symIterator] = wrapperToIterator;
-    }
-    return lodash;
-  });
-
-  /*--------------------------------------------------------------------------*/
-
-  // Export lodash.
-  var _ = runInContext();
-
-  // Some AMD build optimizers, like r.js, check for condition patterns like:
-  if (true) {
-    // Expose Lodash on the global object to prevent errors when Lodash is
-    // loaded by a script tag in the presence of an AMD loader.
-    // See http://requirejs.org/docs/errors.html#mismatch for more details.
-    // Use `_.noConflict` to remove Lodash from the global object.
-    root._ = _;
-
-    // Define as an anonymous module so, through path mapping, it can be
-    // referenced as the "underscore" module.
-    !(__WEBPACK_AMD_DEFINE_RESULT__ = (function() {
-      return _;
-    }).call(exports, __webpack_require__, exports, module),
-		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-  }
-  // Check for `exports` after `define` in case a build optimizer adds it.
-  else {}
-}.call(this));
-
-
-/***/ }),
-
-/***/ 35161:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayMap = __webpack_require__(29932),
-    baseIteratee = __webpack_require__(67206),
-    baseMap = __webpack_require__(69199),
-    isArray = __webpack_require__(1469);
-
-/**
- * Creates an array of values by running each element in `collection` thru
- * `iteratee`. The iteratee is invoked with three arguments:
- * (value, index|key, collection).
- *
- * Many lodash methods are guarded to work as iteratees for methods like
- * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
- *
- * The guarded methods are:
- * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
- * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
- * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
- * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [iteratee=_.identity] The function invoked per iteration.
- * @returns {Array} Returns the new mapped array.
- * @example
- *
- * function square(n) {
- *   return n * n;
- * }
- *
- * _.map([4, 8], square);
- * // => [16, 64]
- *
- * _.map({ 'a': 4, 'b': 8 }, square);
- * // => [16, 64] (iteration order is not guaranteed)
- *
- * var users = [
- *   { 'user': 'barney' },
- *   { 'user': 'fred' }
- * ];
- *
- * // The `_.property` iteratee shorthand.
- * _.map(users, 'user');
- * // => ['barney', 'fred']
- */
-function map(collection, iteratee) {
-  var func = isArray(collection) ? arrayMap : baseMap;
-  return func(collection, baseIteratee(iteratee, 3));
-}
-
-module.exports = map;
-
-
-/***/ }),
-
-/***/ 88306:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var MapCache = __webpack_require__(83369);
-
-/** Error message constants. */
-var FUNC_ERROR_TEXT = 'Expected a function';
-
-/**
- * Creates a function that memoizes the result of `func`. If `resolver` is
- * provided, it determines the cache key for storing the result based on the
- * arguments provided to the memoized function. By default, the first argument
- * provided to the memoized function is used as the map cache key. The `func`
- * is invoked with the `this` binding of the memoized function.
- *
- * **Note:** The cache is exposed as the `cache` property on the memoized
- * function. Its creation may be customized by replacing the `_.memoize.Cache`
- * constructor with one whose instances implement the
- * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
- * method interface of `clear`, `delete`, `get`, `has`, and `set`.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Function
- * @param {Function} func The function to have its output memoized.
- * @param {Function} [resolver] The function to resolve the cache key.
- * @returns {Function} Returns the new memoized function.
- * @example
- *
- * var object = { 'a': 1, 'b': 2 };
- * var other = { 'c': 3, 'd': 4 };
- *
- * var values = _.memoize(_.values);
- * values(object);
- * // => [1, 2]
- *
- * values(other);
- * // => [3, 4]
- *
- * object.a = 2;
- * values(object);
- * // => [1, 2]
- *
- * // Modify the result cache.
- * values.cache.set(object, ['a', 'b']);
- * values(object);
- * // => ['a', 'b']
- *
- * // Replace `_.memoize.Cache`.
- * _.memoize.Cache = WeakMap;
- */
-function memoize(func, resolver) {
-  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
-    throw new TypeError(FUNC_ERROR_TEXT);
-  }
-  var memoized = function() {
-    var args = arguments,
-        key = resolver ? resolver.apply(this, args) : args[0],
-        cache = memoized.cache;
-
-    if (cache.has(key)) {
-      return cache.get(key);
-    }
-    var result = func.apply(this, args);
-    memoized.cache = cache.set(key, result) || cache;
-    return result;
-  };
-  memoized.cache = new (memoize.Cache || MapCache);
-  return memoized;
-}
-
-// Expose `MapCache`.
-memoize.Cache = MapCache;
-
-module.exports = memoize;
-
-
-/***/ }),
-
-/***/ 94885:
-/***/ ((module) => {
-
-/** Error message constants. */
-var FUNC_ERROR_TEXT = 'Expected a function';
-
-/**
- * Creates a function that negates the result of the predicate `func`. The
- * `func` predicate is invoked with the `this` binding and arguments of the
- * created function.
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category Function
- * @param {Function} predicate The predicate to negate.
- * @returns {Function} Returns the new negated function.
- * @example
- *
- * function isEven(n) {
- *   return n % 2 == 0;
- * }
- *
- * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));
- * // => [1, 3, 5]
- */
-function negate(predicate) {
-  if (typeof predicate != 'function') {
-    throw new TypeError(FUNC_ERROR_TEXT);
-  }
-  return function() {
-    var args = arguments;
-    switch (args.length) {
-      case 0: return !predicate.call(this);
-      case 1: return !predicate.call(this, args[0]);
-      case 2: return !predicate.call(this, args[0], args[1]);
-      case 3: return !predicate.call(this, args[0], args[1], args[2]);
-    }
-    return !predicate.apply(this, args);
-  };
-}
-
-module.exports = negate;
-
-
-/***/ }),
-
-/***/ 50308:
-/***/ ((module) => {
-
-/**
- * This method returns `undefined`.
- *
- * @static
- * @memberOf _
- * @since 2.3.0
- * @category Util
- * @example
- *
- * _.times(2, _.noop);
- * // => [undefined, undefined]
- */
-function noop() {
-  // No operation performed.
-}
-
-module.exports = noop;
-
-
-/***/ }),
-
-/***/ 57557:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayMap = __webpack_require__(29932),
-    baseClone = __webpack_require__(85990),
-    baseUnset = __webpack_require__(57406),
-    castPath = __webpack_require__(71811),
-    copyObject = __webpack_require__(98363),
-    customOmitClone = __webpack_require__(60696),
-    flatRest = __webpack_require__(99021),
-    getAllKeysIn = __webpack_require__(46904);
-
-/** Used to compose bitmasks for cloning. */
-var CLONE_DEEP_FLAG = 1,
-    CLONE_FLAT_FLAG = 2,
-    CLONE_SYMBOLS_FLAG = 4;
-
-/**
- * The opposite of `_.pick`; this method creates an object composed of the
- * own and inherited enumerable property paths of `object` that are not omitted.
- *
- * **Note:** This method is considerably slower than `_.pick`.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The source object.
- * @param {...(string|string[])} [paths] The property paths to omit.
- * @returns {Object} Returns the new object.
- * @example
- *
- * var object = { 'a': 1, 'b': '2', 'c': 3 };
- *
- * _.omit(object, ['a', 'c']);
- * // => { 'b': '2' }
- */
-var omit = flatRest(function(object, paths) {
-  var result = {};
-  if (object == null) {
-    return result;
-  }
-  var isDeep = false;
-  paths = arrayMap(paths, function(path) {
-    path = castPath(path, object);
-    isDeep || (isDeep = path.length > 1);
-    return path;
-  });
-  copyObject(object, getAllKeysIn(object), result);
-  if (isDeep) {
-    result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);
-  }
-  var length = paths.length;
-  while (length--) {
-    baseUnset(result, paths[length]);
-  }
-  return result;
-});
-
-module.exports = omit;
-
-
-/***/ }),
-
-/***/ 35937:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayMap = __webpack_require__(29932),
-    baseIteratee = __webpack_require__(67206),
-    basePickBy = __webpack_require__(63012),
-    getAllKeysIn = __webpack_require__(46904);
-
-/**
- * Creates an object composed of the `object` properties `predicate` returns
- * truthy for. The predicate is invoked with two arguments: (value, key).
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Object
- * @param {Object} object The source object.
- * @param {Function} [predicate=_.identity] The function invoked per property.
- * @returns {Object} Returns the new object.
- * @example
- *
- * var object = { 'a': 1, 'b': '2', 'c': 3 };
- *
- * _.pickBy(object, _.isNumber);
- * // => { 'a': 1, 'c': 3 }
- */
-function pickBy(object, predicate) {
-  if (object == null) {
-    return {};
-  }
-  var props = arrayMap(getAllKeysIn(object), function(prop) {
-    return [prop];
-  });
-  predicate = baseIteratee(predicate);
-  return basePickBy(object, props, function(value, path) {
-    return predicate(value, path[0]);
-  });
-}
-
-module.exports = pickBy;
-
-
-/***/ }),
-
-/***/ 39601:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseProperty = __webpack_require__(40371),
-    basePropertyDeep = __webpack_require__(79152),
-    isKey = __webpack_require__(15403),
-    toKey = __webpack_require__(40327);
-
-/**
- * Creates a function that returns the value at `path` of a given object.
- *
- * @static
- * @memberOf _
- * @since 2.4.0
- * @category Util
- * @param {Array|string} path The path of the property to get.
- * @returns {Function} Returns the new accessor function.
- * @example
- *
- * var objects = [
- *   { 'a': { 'b': 2 } },
- *   { 'a': { 'b': 1 } }
- * ];
- *
- * _.map(objects, _.property('a.b'));
- * // => [2, 1]
- *
- * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
- * // => [1, 2]
- */
-function property(path) {
-  return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
-}
-
-module.exports = property;
-
-
-/***/ }),
-
-/***/ 54061:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayReduce = __webpack_require__(62663),
-    baseEach = __webpack_require__(89881),
-    baseIteratee = __webpack_require__(67206),
-    baseReduce = __webpack_require__(10107),
-    isArray = __webpack_require__(1469);
-
-/**
- * Reduces `collection` to a value which is the accumulated result of running
- * each element in `collection` thru `iteratee`, where each successive
- * invocation is supplied the return value of the previous. If `accumulator`
- * is not given, the first element of `collection` is used as the initial
- * value. The iteratee is invoked with four arguments:
- * (accumulator, value, index|key, collection).
- *
- * Many lodash methods are guarded to work as iteratees for methods like
- * `_.reduce`, `_.reduceRight`, and `_.transform`.
- *
- * The guarded methods are:
- * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
- * and `sortBy`
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [iteratee=_.identity] The function invoked per iteration.
- * @param {*} [accumulator] The initial value.
- * @returns {*} Returns the accumulated value.
- * @see _.reduceRight
- * @example
- *
- * _.reduce([1, 2], function(sum, n) {
- *   return sum + n;
- * }, 0);
- * // => 3
- *
- * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
- *   (result[value] || (result[value] = [])).push(key);
- *   return result;
- * }, {});
- * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
- */
-function reduce(collection, iteratee, accumulator) {
-  var func = isArray(collection) ? arrayReduce : baseReduce,
-      initAccum = arguments.length < 3;
-
-  return func(collection, baseIteratee(iteratee, 4), accumulator, initAccum, baseEach);
-}
-
-module.exports = reduce;
-
-
-/***/ }),
-
-/***/ 43063:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arrayFilter = __webpack_require__(34963),
-    baseFilter = __webpack_require__(80760),
-    baseIteratee = __webpack_require__(67206),
-    isArray = __webpack_require__(1469),
-    negate = __webpack_require__(94885);
-
-/**
- * The opposite of `_.filter`; this method returns the elements of `collection`
- * that `predicate` does **not** return truthy for.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [predicate=_.identity] The function invoked per iteration.
- * @returns {Array} Returns the new filtered array.
- * @see _.filter
- * @example
- *
- * var users = [
- *   { 'user': 'barney', 'age': 36, 'active': false },
- *   { 'user': 'fred',   'age': 40, 'active': true }
- * ];
- *
- * _.reject(users, function(o) { return !o.active; });
- * // => objects for ['fred']
- *
- * // The `_.matches` iteratee shorthand.
- * _.reject(users, { 'age': 40, 'active': true });
- * // => objects for ['barney']
- *
- * // The `_.matchesProperty` iteratee shorthand.
- * _.reject(users, ['active', false]);
- * // => objects for ['fred']
- *
- * // The `_.property` iteratee shorthand.
- * _.reject(users, 'active');
- * // => objects for ['barney']
- */
-function reject(collection, predicate) {
-  var func = isArray(collection) ? arrayFilter : baseFilter;
-  return func(collection, negate(baseIteratee(predicate, 3)));
-}
-
-module.exports = reject;
-
-
-/***/ }),
-
-/***/ 59704:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var arraySome = __webpack_require__(82908),
-    baseIteratee = __webpack_require__(67206),
-    baseSome = __webpack_require__(5076),
-    isArray = __webpack_require__(1469),
-    isIterateeCall = __webpack_require__(16612);
-
-/**
- * Checks if `predicate` returns truthy for **any** element of `collection`.
- * Iteration is stopped once `predicate` returns truthy. The predicate is
- * invoked with three arguments: (value, index|key, collection).
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [predicate=_.identity] The function invoked per iteration.
- * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
- * @returns {boolean} Returns `true` if any element passes the predicate check,
- *  else `false`.
- * @example
- *
- * _.some([null, 0, 'yes', false], Boolean);
- * // => true
- *
- * var users = [
- *   { 'user': 'barney', 'active': true },
- *   { 'user': 'fred',   'active': false }
- * ];
- *
- * // The `_.matches` iteratee shorthand.
- * _.some(users, { 'user': 'barney', 'active': false });
- * // => false
- *
- * // The `_.matchesProperty` iteratee shorthand.
- * _.some(users, ['active', false]);
- * // => true
- *
- * // The `_.property` iteratee shorthand.
- * _.some(users, 'active');
- * // => true
- */
-function some(collection, predicate, guard) {
-  var func = isArray(collection) ? arraySome : baseSome;
-  if (guard && isIterateeCall(collection, predicate, guard)) {
-    predicate = undefined;
-  }
-  return func(collection, baseIteratee(predicate, 3));
-}
-
-module.exports = some;
-
-
-/***/ }),
-
-/***/ 70479:
-/***/ ((module) => {
-
-/**
- * This method returns a new empty array.
- *
- * @static
- * @memberOf _
- * @since 4.13.0
- * @category Util
- * @returns {Array} Returns the new empty array.
- * @example
- *
- * var arrays = _.times(2, _.stubArray);
- *
- * console.log(arrays);
- * // => [[], []]
- *
- * console.log(arrays[0] === arrays[1]);
- * // => false
- */
-function stubArray() {
-  return [];
-}
-
-module.exports = stubArray;
-
-
-/***/ }),
-
-/***/ 95062:
-/***/ ((module) => {
-
-/**
- * This method returns `false`.
- *
- * @static
- * @memberOf _
- * @since 4.13.0
- * @category Util
- * @returns {boolean} Returns `false`.
- * @example
- *
- * _.times(2, _.stubFalse);
- * // => [false, false]
- */
-function stubFalse() {
-  return false;
-}
-
-module.exports = stubFalse;
-
-
-/***/ }),
-
-/***/ 18601:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var toNumber = __webpack_require__(14841);
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0,
-    MAX_INTEGER = 1.7976931348623157e+308;
-
-/**
- * Converts `value` to a finite number.
- *
- * @static
- * @memberOf _
- * @since 4.12.0
- * @category Lang
- * @param {*} value The value to convert.
- * @returns {number} Returns the converted number.
- * @example
- *
- * _.toFinite(3.2);
- * // => 3.2
- *
- * _.toFinite(Number.MIN_VALUE);
- * // => 5e-324
- *
- * _.toFinite(Infinity);
- * // => 1.7976931348623157e+308
- *
- * _.toFinite('3.2');
- * // => 3.2
- */
-function toFinite(value) {
-  if (!value) {
-    return value === 0 ? value : 0;
-  }
-  value = toNumber(value);
-  if (value === INFINITY || value === -INFINITY) {
-    var sign = (value < 0 ? -1 : 1);
-    return sign * MAX_INTEGER;
-  }
-  return value === value ? value : 0;
-}
-
-module.exports = toFinite;
-
-
-/***/ }),
-
-/***/ 40554:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var toFinite = __webpack_require__(18601);
-
-/**
- * Converts `value` to an integer.
- *
- * **Note:** This method is loosely based on
- * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to convert.
- * @returns {number} Returns the converted integer.
- * @example
- *
- * _.toInteger(3.2);
- * // => 3
- *
- * _.toInteger(Number.MIN_VALUE);
- * // => 0
- *
- * _.toInteger(Infinity);
- * // => 1.7976931348623157e+308
- *
- * _.toInteger('3.2');
- * // => 3
- */
-function toInteger(value) {
-  var result = toFinite(value),
-      remainder = result % 1;
-
-  return result === result ? (remainder ? result - remainder : result) : 0;
-}
-
-module.exports = toInteger;
-
-
-/***/ }),
-
-/***/ 14841:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseTrim = __webpack_require__(27561),
-    isObject = __webpack_require__(13218),
-    isSymbol = __webpack_require__(33448);
-
-/** Used as references for various `Number` constants. */
-var NAN = 0 / 0;
-
-/** Used to detect bad signed hexadecimal string values. */
-var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
-
-/** Used to detect binary string values. */
-var reIsBinary = /^0b[01]+$/i;
-
-/** Used to detect octal string values. */
-var reIsOctal = /^0o[0-7]+$/i;
-
-/** Built-in method references without a dependency on `root`. */
-var freeParseInt = parseInt;
-
-/**
- * Converts `value` to a number.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to process.
- * @returns {number} Returns the number.
- * @example
- *
- * _.toNumber(3.2);
- * // => 3.2
- *
- * _.toNumber(Number.MIN_VALUE);
- * // => 5e-324
- *
- * _.toNumber(Infinity);
- * // => Infinity
- *
- * _.toNumber('3.2');
- * // => 3.2
- */
-function toNumber(value) {
-  if (typeof value == 'number') {
-    return value;
-  }
-  if (isSymbol(value)) {
-    return NAN;
-  }
-  if (isObject(value)) {
-    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
-    value = isObject(other) ? (other + '') : other;
-  }
-  if (typeof value != 'string') {
-    return value === 0 ? value : +value;
-  }
-  value = baseTrim(value);
-  var isBinary = reIsBinary.test(value);
-  return (isBinary || reIsOctal.test(value))
-    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
-    : (reIsBadHex.test(value) ? NAN : +value);
-}
-
-module.exports = toNumber;
-
-
-/***/ }),
-
-/***/ 79833:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseToString = __webpack_require__(80531);
-
-/**
- * Converts `value` to a string. An empty string is returned for `null`
- * and `undefined` values. The sign of `-0` is preserved.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to convert.
- * @returns {string} Returns the converted string.
- * @example
- *
- * _.toString(null);
- * // => ''
- *
- * _.toString(-0);
- * // => '-0'
- *
- * _.toString([1, 2, 3]);
- * // => '1,2,3'
- */
-function toString(value) {
-  return value == null ? '' : baseToString(value);
-}
-
-module.exports = toString;
-
-
-/***/ }),
-
-/***/ 44908:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseUniq = __webpack_require__(45652);
-
-/**
- * Creates a duplicate-free version of an array, using
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * for equality comparisons, in which only the first occurrence of each element
- * is kept. The order of result values is determined by the order they occur
- * in the array.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Array
- * @param {Array} array The array to inspect.
- * @returns {Array} Returns the new duplicate free array.
- * @example
- *
- * _.uniq([2, 1, 2]);
- * // => [2, 1]
- */
-function uniq(array) {
-  return (array && array.length) ? baseUniq(array) : [];
-}
-
-module.exports = uniq;
-
-
-/***/ }),
-
-/***/ 73955:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var toString = __webpack_require__(79833);
-
-/** Used to generate unique IDs. */
-var idCounter = 0;
-
-/**
- * Generates a unique ID. If `prefix` is given, the ID is appended to it.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Util
- * @param {string} [prefix=''] The value to prefix the ID with.
- * @returns {string} Returns the unique ID.
- * @example
- *
- * _.uniqueId('contact_');
- * // => 'contact_104'
- *
- * _.uniqueId();
- * // => '105'
- */
-function uniqueId(prefix) {
-  var id = ++idCounter;
-  return toString(prefix) + id;
-}
-
-module.exports = uniqueId;
-
-
-/***/ }),
-
-/***/ 11700:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var createCaseFirst = __webpack_require__(98805);
-
-/**
- * Converts the first character of `string` to upper case.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category String
- * @param {string} [string=''] The string to convert.
- * @returns {string} Returns the converted string.
- * @example
- *
- * _.upperFirst('fred');
- * // => 'Fred'
- *
- * _.upperFirst('FRED');
- * // => 'FRED'
- */
-var upperFirst = createCaseFirst('toUpperCase');
-
-module.exports = upperFirst;
-
-
-/***/ }),
-
-/***/ 52628:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var baseValues = __webpack_require__(47415),
-    keys = __webpack_require__(3674);
-
-/**
- * Creates an array of the own enumerable string keyed property values of `object`.
- *
- * **Note:** Non-object values are coerced to objects.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property values.
- * @example
- *
- * function Foo() {
- *   this.a = 1;
- *   this.b = 2;
- * }
- *
- * Foo.prototype.c = 3;
- *
- * _.values(new Foo);
- * // => [1, 2] (iteration order is not guaranteed)
- *
- * _.values('hi');
- * // => ['h', 'i']
- */
-function values(object) {
-  return object == null ? [] : baseValues(object, keys(object));
-}
-
-module.exports = values;
-
-
-/***/ }),
-
-/***/ 31336:
-/***/ ((module, exports, __webpack_require__) => {
-
-var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/**
- * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 2.3.9
- * Copyright (C) 2020 Oliver Nightingale
- * @license MIT
- */
-
-;(function(){
-
-/**
- * A convenience function for configuring and constructing
- * a new lunr Index.
- *
- * A lunr.Builder instance is created and the pipeline setup
- * with a trimmer, stop word filter and stemmer.
- *
- * This builder object is yielded to the configuration function
- * that is passed as a parameter, allowing the list of fields
- * and other builder parameters to be customised.
- *
- * All documents _must_ be added within the passed config function.
- *
- * @example
- * var idx = lunr(function () {
- *   this.field('title')
- *   this.field('body')
- *   this.ref('id')
- *
- *   documents.forEach(function (doc) {
- *     this.add(doc)
- *   }, this)
- * })
- *
- * @see {@link lunr.Builder}
- * @see {@link lunr.Pipeline}
- * @see {@link lunr.trimmer}
- * @see {@link lunr.stopWordFilter}
- * @see {@link lunr.stemmer}
- * @namespace {function} lunr
- */
-var lunr = function (config) {
-  var builder = new lunr.Builder
-
-  builder.pipeline.add(
-    lunr.trimmer,
-    lunr.stopWordFilter,
-    lunr.stemmer
-  )
-
-  builder.searchPipeline.add(
-    lunr.stemmer
-  )
-
-  config.call(builder, builder)
-  return builder.build()
-}
-
-lunr.version = "2.3.9"
-/*!
- * lunr.utils
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * A namespace containing utils for the rest of the lunr library
- * @namespace lunr.utils
- */
-lunr.utils = {}
-
-/**
- * Print a warning message to the console.
- *
- * @param {String} message The message to be printed.
- * @memberOf lunr.utils
- * @function
- */
-lunr.utils.warn = (function (global) {
-  /* eslint-disable no-console */
-  return function (message) {
-    if (global.console && console.warn) {
-      console.warn(message)
-    }
-  }
-  /* eslint-enable no-console */
-})(this)
-
-/**
- * Convert an object to a string.
- *
- * In the case of `null` and `undefined` the function returns
- * the empty string, in all other cases the result of calling
- * `toString` on the passed object is returned.
- *
- * @param {Any} obj The object to convert to a string.
- * @return {String} string representation of the passed object.
- * @memberOf lunr.utils
- */
-lunr.utils.asString = function (obj) {
-  if (obj === void 0 || obj === null) {
-    return ""
-  } else {
-    return obj.toString()
-  }
-}
-
-/**
- * Clones an object.
- *
- * Will create a copy of an existing object such that any mutations
- * on the copy cannot affect the original.
- *
- * Only shallow objects are supported, passing a nested object to this
- * function will cause a TypeError.
- *
- * Objects with primitives, and arrays of primitives are supported.
- *
- * @param {Object} obj The object to clone.
- * @return {Object} a clone of the passed object.
- * @throws {TypeError} when a nested object is passed.
- * @memberOf Utils
- */
-lunr.utils.clone = function (obj) {
-  if (obj === null || obj === undefined) {
-    return obj
-  }
-
-  var clone = Object.create(null),
-      keys = Object.keys(obj)
-
-  for (var i = 0; i < keys.length; i++) {
-    var key = keys[i],
-        val = obj[key]
-
-    if (Array.isArray(val)) {
-      clone[key] = val.slice()
-      continue
-    }
-
-    if (typeof val === 'string' ||
-        typeof val === 'number' ||
-        typeof val === 'boolean') {
-      clone[key] = val
-      continue
-    }
-
-    throw new TypeError("clone is not deep and does not support nested objects")
-  }
-
-  return clone
-}
-lunr.FieldRef = function (docRef, fieldName, stringValue) {
-  this.docRef = docRef
-  this.fieldName = fieldName
-  this._stringValue = stringValue
-}
-
-lunr.FieldRef.joiner = "/"
-
-lunr.FieldRef.fromString = function (s) {
-  var n = s.indexOf(lunr.FieldRef.joiner)
-
-  if (n === -1) {
-    throw "malformed field ref string"
-  }
-
-  var fieldRef = s.slice(0, n),
-      docRef = s.slice(n + 1)
-
-  return new lunr.FieldRef (docRef, fieldRef, s)
-}
-
-lunr.FieldRef.prototype.toString = function () {
-  if (this._stringValue == undefined) {
-    this._stringValue = this.fieldName + lunr.FieldRef.joiner + this.docRef
-  }
-
-  return this._stringValue
-}
-/*!
- * lunr.Set
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * A lunr set.
- *
- * @constructor
- */
-lunr.Set = function (elements) {
-  this.elements = Object.create(null)
-
-  if (elements) {
-    this.length = elements.length
-
-    for (var i = 0; i < this.length; i++) {
-      this.elements[elements[i]] = true
-    }
-  } else {
-    this.length = 0
-  }
-}
-
-/**
- * A complete set that contains all elements.
- *
- * @static
- * @readonly
- * @type {lunr.Set}
- */
-lunr.Set.complete = {
-  intersect: function (other) {
-    return other
-  },
-
-  union: function () {
-    return this
-  },
-
-  contains: function () {
-    return true
-  }
-}
-
-/**
- * An empty set that contains no elements.
- *
- * @static
- * @readonly
- * @type {lunr.Set}
- */
-lunr.Set.empty = {
-  intersect: function () {
-    return this
-  },
-
-  union: function (other) {
-    return other
-  },
-
-  contains: function () {
-    return false
-  }
-}
-
-/**
- * Returns true if this set contains the specified object.
- *
- * @param {object} object - Object whose presence in this set is to be tested.
- * @returns {boolean} - True if this set contains the specified object.
- */
-lunr.Set.prototype.contains = function (object) {
-  return !!this.elements[object]
-}
-
-/**
- * Returns a new set containing only the elements that are present in both
- * this set and the specified set.
- *
- * @param {lunr.Set} other - set to intersect with this set.
- * @returns {lunr.Set} a new set that is the intersection of this and the specified set.
- */
-
-lunr.Set.prototype.intersect = function (other) {
-  var a, b, elements, intersection = []
-
-  if (other === lunr.Set.complete) {
-    return this
-  }
-
-  if (other === lunr.Set.empty) {
-    return other
-  }
-
-  if (this.length < other.length) {
-    a = this
-    b = other
-  } else {
-    a = other
-    b = this
-  }
-
-  elements = Object.keys(a.elements)
-
-  for (var i = 0; i < elements.length; i++) {
-    var element = elements[i]
-    if (element in b.elements) {
-      intersection.push(element)
-    }
-  }
-
-  return new lunr.Set (intersection)
-}
-
-/**
- * Returns a new set combining the elements of this and the specified set.
- *
- * @param {lunr.Set} other - set to union with this set.
- * @return {lunr.Set} a new set that is the union of this and the specified set.
- */
-
-lunr.Set.prototype.union = function (other) {
-  if (other === lunr.Set.complete) {
-    return lunr.Set.complete
-  }
-
-  if (other === lunr.Set.empty) {
-    return this
-  }
-
-  return new lunr.Set(Object.keys(this.elements).concat(Object.keys(other.elements)))
-}
-/**
- * A function to calculate the inverse document frequency for
- * a posting. This is shared between the builder and the index
- *
- * @private
- * @param {object} posting - The posting for a given term
- * @param {number} documentCount - The total number of documents.
- */
-lunr.idf = function (posting, documentCount) {
-  var documentsWithTerm = 0
-
-  for (var fieldName in posting) {
-    if (fieldName == '_index') continue // Ignore the term index, its not a field
-    documentsWithTerm += Object.keys(posting[fieldName]).length
-  }
-
-  var x = (documentCount - documentsWithTerm + 0.5) / (documentsWithTerm + 0.5)
-
-  return Math.log(1 + Math.abs(x))
-}
-
-/**
- * A token wraps a string representation of a token
- * as it is passed through the text processing pipeline.
- *
- * @constructor
- * @param {string} [str=''] - The string token being wrapped.
- * @param {object} [metadata={}] - Metadata associated with this token.
- */
-lunr.Token = function (str, metadata) {
-  this.str = str || ""
-  this.metadata = metadata || {}
-}
-
-/**
- * Returns the token string that is being wrapped by this object.
- *
- * @returns {string}
- */
-lunr.Token.prototype.toString = function () {
-  return this.str
-}
-
-/**
- * A token update function is used when updating or optionally
- * when cloning a token.
- *
- * @callback lunr.Token~updateFunction
- * @param {string} str - The string representation of the token.
- * @param {Object} metadata - All metadata associated with this token.
- */
-
-/**
- * Applies the given function to the wrapped string token.
- *
- * @example
- * token.update(function (str, metadata) {
- *   return str.toUpperCase()
- * })
- *
- * @param {lunr.Token~updateFunction} fn - A function to apply to the token string.
- * @returns {lunr.Token}
- */
-lunr.Token.prototype.update = function (fn) {
-  this.str = fn(this.str, this.metadata)
-  return this
-}
-
-/**
- * Creates a clone of this token. Optionally a function can be
- * applied to the cloned token.
- *
- * @param {lunr.Token~updateFunction} [fn] - An optional function to apply to the cloned token.
- * @returns {lunr.Token}
- */
-lunr.Token.prototype.clone = function (fn) {
-  fn = fn || function (s) { return s }
-  return new lunr.Token (fn(this.str, this.metadata), this.metadata)
-}
-/*!
- * lunr.tokenizer
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * A function for splitting a string into tokens ready to be inserted into
- * the search index. Uses `lunr.tokenizer.separator` to split strings, change
- * the value of this property to change how strings are split into tokens.
- *
- * This tokenizer will convert its parameter to a string by calling `toString` and
- * then will split this string on the character in `lunr.tokenizer.separator`.
- * Arrays will have their elements converted to strings and wrapped in a lunr.Token.
- *
- * Optional metadata can be passed to the tokenizer, this metadata will be cloned and
- * added as metadata to every token that is created from the object to be tokenized.
- *
- * @static
- * @param {?(string|object|object[])} obj - The object to convert into tokens
- * @param {?object} metadata - Optional metadata to associate with every token
- * @returns {lunr.Token[]}
- * @see {@link lunr.Pipeline}
- */
-lunr.tokenizer = function (obj, metadata) {
-  if (obj == null || obj == undefined) {
-    return []
-  }
-
-  if (Array.isArray(obj)) {
-    return obj.map(function (t) {
-      return new lunr.Token(
-        lunr.utils.asString(t).toLowerCase(),
-        lunr.utils.clone(metadata)
-      )
-    })
-  }
-
-  var str = obj.toString().toLowerCase(),
-      len = str.length,
-      tokens = []
-
-  for (var sliceEnd = 0, sliceStart = 0; sliceEnd <= len; sliceEnd++) {
-    var char = str.charAt(sliceEnd),
-        sliceLength = sliceEnd - sliceStart
-
-    if ((char.match(lunr.tokenizer.separator) || sliceEnd == len)) {
-
-      if (sliceLength > 0) {
-        var tokenMetadata = lunr.utils.clone(metadata) || {}
-        tokenMetadata["position"] = [sliceStart, sliceLength]
-        tokenMetadata["index"] = tokens.length
-
-        tokens.push(
-          new lunr.Token (
-            str.slice(sliceStart, sliceEnd),
-            tokenMetadata
-          )
-        )
-      }
-
-      sliceStart = sliceEnd + 1
-    }
-
-  }
-
-  return tokens
-}
-
-/**
- * The separator used to split a string into tokens. Override this property to change the behaviour of
- * `lunr.tokenizer` behaviour when tokenizing strings. By default this splits on whitespace and hyphens.
- *
- * @static
- * @see lunr.tokenizer
- */
-lunr.tokenizer.separator = /[\s\-]+/
-/*!
- * lunr.Pipeline
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * lunr.Pipelines maintain an ordered list of functions to be applied to all
- * tokens in documents entering the search index and queries being ran against
- * the index.
- *
- * An instance of lunr.Index created with the lunr shortcut will contain a
- * pipeline with a stop word filter and an English language stemmer. Extra
- * functions can be added before or after either of these functions or these
- * default functions can be removed.
- *
- * When run the pipeline will call each function in turn, passing a token, the
- * index of that token in the original list of all tokens and finally a list of
- * all the original tokens.
- *
- * The output of functions in the pipeline will be passed to the next function
- * in the pipeline. To exclude a token from entering the index the function
- * should return undefined, the rest of the pipeline will not be called with
- * this token.
- *
- * For serialisation of pipelines to work, all functions used in an instance of
- * a pipeline should be registered with lunr.Pipeline. Registered functions can
- * then be loaded. If trying to load a serialised pipeline that uses functions
- * that are not registered an error will be thrown.
- *
- * If not planning on serialising the pipeline then registering pipeline functions
- * is not necessary.
- *
- * @constructor
- */
-lunr.Pipeline = function () {
-  this._stack = []
-}
-
-lunr.Pipeline.registeredFunctions = Object.create(null)
-
-/**
- * A pipeline function maps lunr.Token to lunr.Token. A lunr.Token contains the token
- * string as well as all known metadata. A pipeline function can mutate the token string
- * or mutate (or add) metadata for a given token.
- *
- * A pipeline function can indicate that the passed token should be discarded by returning
- * null, undefined or an empty string. This token will not be passed to any downstream pipeline
- * functions and will not be added to the index.
- *
- * Multiple tokens can be returned by returning an array of tokens. Each token will be passed
- * to any downstream pipeline functions and all will returned tokens will be added to the index.
- *
- * Any number of pipeline functions may be chained together using a lunr.Pipeline.
- *
- * @interface lunr.PipelineFunction
- * @param {lunr.Token} token - A token from the document being processed.
- * @param {number} i - The index of this token in the complete list of tokens for this document/field.
- * @param {lunr.Token[]} tokens - All tokens for this document/field.
- * @returns {(?lunr.Token|lunr.Token[])}
- */
-
-/**
- * Register a function with the pipeline.
- *
- * Functions that are used in the pipeline should be registered if the pipeline
- * needs to be serialised, or a serialised pipeline needs to be loaded.
- *
- * Registering a function does not add it to a pipeline, functions must still be
- * added to instances of the pipeline for them to be used when running a pipeline.
- *
- * @param {lunr.PipelineFunction} fn - The function to check for.
- * @param {String} label - The label to register this function with
- */
-lunr.Pipeline.registerFunction = function (fn, label) {
-  if (label in this.registeredFunctions) {
-    lunr.utils.warn('Overwriting existing registered function: ' + label)
-  }
-
-  fn.label = label
-  lunr.Pipeline.registeredFunctions[fn.label] = fn
-}
-
-/**
- * Warns if the function is not registered as a Pipeline function.
- *
- * @param {lunr.PipelineFunction} fn - The function to check for.
- * @private
- */
-lunr.Pipeline.warnIfFunctionNotRegistered = function (fn) {
-  var isRegistered = fn.label && (fn.label in this.registeredFunctions)
-
-  if (!isRegistered) {
-    lunr.utils.warn('Function is not registered with pipeline. This may cause problems when serialising the index.\n', fn)
-  }
-}
-
-/**
- * Loads a previously serialised pipeline.
- *
- * All functions to be loaded must already be registered with lunr.Pipeline.
- * If any function from the serialised data has not been registered then an
- * error will be thrown.
- *
- * @param {Object} serialised - The serialised pipeline to load.
- * @returns {lunr.Pipeline}
- */
-lunr.Pipeline.load = function (serialised) {
-  var pipeline = new lunr.Pipeline
-
-  serialised.forEach(function (fnName) {
-    var fn = lunr.Pipeline.registeredFunctions[fnName]
-
-    if (fn) {
-      pipeline.add(fn)
-    } else {
-      throw new Error('Cannot load unregistered function: ' + fnName)
-    }
-  })
-
-  return pipeline
-}
-
-/**
- * Adds new functions to the end of the pipeline.
- *
- * Logs a warning if the function has not been registered.
- *
- * @param {lunr.PipelineFunction[]} functions - Any number of functions to add to the pipeline.
- */
-lunr.Pipeline.prototype.add = function () {
-  var fns = Array.prototype.slice.call(arguments)
-
-  fns.forEach(function (fn) {
-    lunr.Pipeline.warnIfFunctionNotRegistered(fn)
-    this._stack.push(fn)
-  }, this)
-}
-
-/**
- * Adds a single function after a function that already exists in the
- * pipeline.
- *
- * Logs a warning if the function has not been registered.
- *
- * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.
- * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.
- */
-lunr.Pipeline.prototype.after = function (existingFn, newFn) {
-  lunr.Pipeline.warnIfFunctionNotRegistered(newFn)
-
-  var pos = this._stack.indexOf(existingFn)
-  if (pos == -1) {
-    throw new Error('Cannot find existingFn')
-  }
-
-  pos = pos + 1
-  this._stack.splice(pos, 0, newFn)
-}
-
-/**
- * Adds a single function before a function that already exists in the
- * pipeline.
- *
- * Logs a warning if the function has not been registered.
- *
- * @param {lunr.PipelineFunction} existingFn - A function that already exists in the pipeline.
- * @param {lunr.PipelineFunction} newFn - The new function to add to the pipeline.
- */
-lunr.Pipeline.prototype.before = function (existingFn, newFn) {
-  lunr.Pipeline.warnIfFunctionNotRegistered(newFn)
-
-  var pos = this._stack.indexOf(existingFn)
-  if (pos == -1) {
-    throw new Error('Cannot find existingFn')
-  }
-
-  this._stack.splice(pos, 0, newFn)
-}
-
-/**
- * Removes a function from the pipeline.
- *
- * @param {lunr.PipelineFunction} fn The function to remove from the pipeline.
- */
-lunr.Pipeline.prototype.remove = function (fn) {
-  var pos = this._stack.indexOf(fn)
-  if (pos == -1) {
-    return
-  }
-
-  this._stack.splice(pos, 1)
-}
-
-/**
- * Runs the current list of functions that make up the pipeline against the
- * passed tokens.
- *
- * @param {Array} tokens The tokens to run through the pipeline.
- * @returns {Array}
- */
-lunr.Pipeline.prototype.run = function (tokens) {
-  var stackLength = this._stack.length
-
-  for (var i = 0; i < stackLength; i++) {
-    var fn = this._stack[i]
-    var memo = []
-
-    for (var j = 0; j < tokens.length; j++) {
-      var result = fn(tokens[j], j, tokens)
-
-      if (result === null || result === void 0 || result === '') continue
-
-      if (Array.isArray(result)) {
-        for (var k = 0; k < result.length; k++) {
-          memo.push(result[k])
-        }
-      } else {
-        memo.push(result)
-      }
-    }
-
-    tokens = memo
-  }
-
-  return tokens
-}
-
-/**
- * Convenience method for passing a string through a pipeline and getting
- * strings out. This method takes care of wrapping the passed string in a
- * token and mapping the resulting tokens back to strings.
- *
- * @param {string} str - The string to pass through the pipeline.
- * @param {?object} metadata - Optional metadata to associate with the token
- * passed to the pipeline.
- * @returns {string[]}
- */
-lunr.Pipeline.prototype.runString = function (str, metadata) {
-  var token = new lunr.Token (str, metadata)
-
-  return this.run([token]).map(function (t) {
-    return t.toString()
-  })
-}
-
-/**
- * Resets the pipeline by removing any existing processors.
- *
- */
-lunr.Pipeline.prototype.reset = function () {
-  this._stack = []
-}
-
-/**
- * Returns a representation of the pipeline ready for serialisation.
- *
- * Logs a warning if the function has not been registered.
- *
- * @returns {Array}
- */
-lunr.Pipeline.prototype.toJSON = function () {
-  return this._stack.map(function (fn) {
-    lunr.Pipeline.warnIfFunctionNotRegistered(fn)
-
-    return fn.label
-  })
-}
-/*!
- * lunr.Vector
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * A vector is used to construct the vector space of documents and queries. These
- * vectors support operations to determine the similarity between two documents or
- * a document and a query.
- *
- * Normally no parameters are required for initializing a vector, but in the case of
- * loading a previously dumped vector the raw elements can be provided to the constructor.
- *
- * For performance reasons vectors are implemented with a flat array, where an elements
- * index is immediately followed by its value. E.g. [index, value, index, value]. This
- * allows the underlying array to be as sparse as possible and still offer decent
- * performance when being used for vector calculations.
- *
- * @constructor
- * @param {Number[]} [elements] - The flat list of element index and element value pairs.
- */
-lunr.Vector = function (elements) {
-  this._magnitude = 0
-  this.elements = elements || []
-}
-
-
-/**
- * Calculates the position within the vector to insert a given index.
- *
- * This is used internally by insert and upsert. If there are duplicate indexes then
- * the position is returned as if the value for that index were to be updated, but it
- * is the callers responsibility to check whether there is a duplicate at that index
- *
- * @param {Number} insertIdx - The index at which the element should be inserted.
- * @returns {Number}
- */
-lunr.Vector.prototype.positionForIndex = function (index) {
-  // For an empty vector the tuple can be inserted at the beginning
-  if (this.elements.length == 0) {
-    return 0
-  }
-
-  var start = 0,
-      end = this.elements.length / 2,
-      sliceLength = end - start,
-      pivotPoint = Math.floor(sliceLength / 2),
-      pivotIndex = this.elements[pivotPoint * 2]
-
-  while (sliceLength > 1) {
-    if (pivotIndex < index) {
-      start = pivotPoint
-    }
-
-    if (pivotIndex > index) {
-      end = pivotPoint
-    }
-
-    if (pivotIndex == index) {
-      break
-    }
-
-    sliceLength = end - start
-    pivotPoint = start + Math.floor(sliceLength / 2)
-    pivotIndex = this.elements[pivotPoint * 2]
-  }
-
-  if (pivotIndex == index) {
-    return pivotPoint * 2
-  }
-
-  if (pivotIndex > index) {
-    return pivotPoint * 2
-  }
-
-  if (pivotIndex < index) {
-    return (pivotPoint + 1) * 2
-  }
-}
-
-/**
- * Inserts an element at an index within the vector.
- *
- * Does not allow duplicates, will throw an error if there is already an entry
- * for this index.
- *
- * @param {Number} insertIdx - The index at which the element should be inserted.
- * @param {Number} val - The value to be inserted into the vector.
- */
-lunr.Vector.prototype.insert = function (insertIdx, val) {
-  this.upsert(insertIdx, val, function () {
-    throw "duplicate index"
-  })
-}
-
-/**
- * Inserts or updates an existing index within the vector.
- *
- * @param {Number} insertIdx - The index at which the element should be inserted.
- * @param {Number} val - The value to be inserted into the vector.
- * @param {function} fn - A function that is called for updates, the existing value and the
- * requested value are passed as arguments
- */
-lunr.Vector.prototype.upsert = function (insertIdx, val, fn) {
-  this._magnitude = 0
-  var position = this.positionForIndex(insertIdx)
-
-  if (this.elements[position] == insertIdx) {
-    this.elements[position + 1] = fn(this.elements[position + 1], val)
-  } else {
-    this.elements.splice(position, 0, insertIdx, val)
-  }
-}
-
-/**
- * Calculates the magnitude of this vector.
- *
- * @returns {Number}
- */
-lunr.Vector.prototype.magnitude = function () {
-  if (this._magnitude) return this._magnitude
-
-  var sumOfSquares = 0,
-      elementsLength = this.elements.length
-
-  for (var i = 1; i < elementsLength; i += 2) {
-    var val = this.elements[i]
-    sumOfSquares += val * val
-  }
-
-  return this._magnitude = Math.sqrt(sumOfSquares)
-}
-
-/**
- * Calculates the dot product of this vector and another vector.
- *
- * @param {lunr.Vector} otherVector - The vector to compute the dot product with.
- * @returns {Number}
- */
-lunr.Vector.prototype.dot = function (otherVector) {
-  var dotProduct = 0,
-      a = this.elements, b = otherVector.elements,
-      aLen = a.length, bLen = b.length,
-      aVal = 0, bVal = 0,
-      i = 0, j = 0
-
-  while (i < aLen && j < bLen) {
-    aVal = a[i], bVal = b[j]
-    if (aVal < bVal) {
-      i += 2
-    } else if (aVal > bVal) {
-      j += 2
-    } else if (aVal == bVal) {
-      dotProduct += a[i + 1] * b[j + 1]
-      i += 2
-      j += 2
-    }
-  }
-
-  return dotProduct
-}
-
-/**
- * Calculates the similarity between this vector and another vector.
- *
- * @param {lunr.Vector} otherVector - The other vector to calculate the
- * similarity with.
- * @returns {Number}
- */
-lunr.Vector.prototype.similarity = function (otherVector) {
-  return this.dot(otherVector) / this.magnitude() || 0
-}
-
-/**
- * Converts the vector to an array of the elements within the vector.
- *
- * @returns {Number[]}
- */
-lunr.Vector.prototype.toArray = function () {
-  var output = new Array (this.elements.length / 2)
-
-  for (var i = 1, j = 0; i < this.elements.length; i += 2, j++) {
-    output[j] = this.elements[i]
-  }
-
-  return output
-}
-
-/**
- * A JSON serializable representation of the vector.
- *
- * @returns {Number[]}
- */
-lunr.Vector.prototype.toJSON = function () {
-  return this.elements
-}
-/* eslint-disable */
-/*!
- * lunr.stemmer
- * Copyright (C) 2020 Oliver Nightingale
- * Includes code from - http://tartarus.org/~martin/PorterStemmer/js.txt
- */
-
-/**
- * lunr.stemmer is an english language stemmer, this is a JavaScript
- * implementation of the PorterStemmer taken from http://tartarus.org/~martin
- *
- * @static
- * @implements {lunr.PipelineFunction}
- * @param {lunr.Token} token - The string to stem
- * @returns {lunr.Token}
- * @see {@link lunr.Pipeline}
- * @function
- */
-lunr.stemmer = (function(){
-  var step2list = {
-      "ational" : "ate",
-      "tional" : "tion",
-      "enci" : "ence",
-      "anci" : "ance",
-      "izer" : "ize",
-      "bli" : "ble",
-      "alli" : "al",
-      "entli" : "ent",
-      "eli" : "e",
-      "ousli" : "ous",
-      "ization" : "ize",
-      "ation" : "ate",
-      "ator" : "ate",
-      "alism" : "al",
-      "iveness" : "ive",
-      "fulness" : "ful",
-      "ousness" : "ous",
-      "aliti" : "al",
-      "iviti" : "ive",
-      "biliti" : "ble",
-      "logi" : "log"
-    },
-
-    step3list = {
-      "icate" : "ic",
-      "ative" : "",
-      "alize" : "al",
-      "iciti" : "ic",
-      "ical" : "ic",
-      "ful" : "",
-      "ness" : ""
-    },
-
-    c = "[^aeiou]",          // consonant
-    v = "[aeiouy]",          // vowel
-    C = c + "[^aeiouy]*",    // consonant sequence
-    V = v + "[aeiou]*",      // vowel sequence
-
-    mgr0 = "^(" + C + ")?" + V + C,               // [C]VC... is m>0
-    meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$",  // [C]VC[V] is m=1
-    mgr1 = "^(" + C + ")?" + V + C + V + C,       // [C]VCVC... is m>1
-    s_v = "^(" + C + ")?" + v;                   // vowel in stem
-
-  var re_mgr0 = new RegExp(mgr0);
-  var re_mgr1 = new RegExp(mgr1);
-  var re_meq1 = new RegExp(meq1);
-  var re_s_v = new RegExp(s_v);
-
-  var re_1a = /^(.+?)(ss|i)es$/;
-  var re2_1a = /^(.+?)([^s])s$/;
-  var re_1b = /^(.+?)eed$/;
-  var re2_1b = /^(.+?)(ed|ing)$/;
-  var re_1b_2 = /.$/;
-  var re2_1b_2 = /(at|bl|iz)$/;
-  var re3_1b_2 = new RegExp("([^aeiouylsz])\\1$");
-  var re4_1b_2 = new RegExp("^" + C + v + "[^aeiouwxy]$");
-
-  var re_1c = /^(.+?[^aeiou])y$/;
-  var re_2 = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
-
-  var re_3 = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
-
-  var re_4 = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
-  var re2_4 = /^(.+?)(s|t)(ion)$/;
-
-  var re_5 = /^(.+?)e$/;
-  var re_5_1 = /ll$/;
-  var re3_5 = new RegExp("^" + C + v + "[^aeiouwxy]$");
-
-  var porterStemmer = function porterStemmer(w) {
-    var stem,
-      suffix,
-      firstch,
-      re,
-      re2,
-      re3,
-      re4;
-
-    if (w.length < 3) { return w; }
-
-    firstch = w.substr(0,1);
-    if (firstch == "y") {
-      w = firstch.toUpperCase() + w.substr(1);
-    }
-
-    // Step 1a
-    re = re_1a
-    re2 = re2_1a;
-
-    if (re.test(w)) { w = w.replace(re,"$1$2"); }
-    else if (re2.test(w)) { w = w.replace(re2,"$1$2"); }
-
-    // Step 1b
-    re = re_1b;
-    re2 = re2_1b;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      re = re_mgr0;
-      if (re.test(fp[1])) {
-        re = re_1b_2;
-        w = w.replace(re,"");
-      }
-    } else if (re2.test(w)) {
-      var fp = re2.exec(w);
-      stem = fp[1];
-      re2 = re_s_v;
-      if (re2.test(stem)) {
-        w = stem;
-        re2 = re2_1b_2;
-        re3 = re3_1b_2;
-        re4 = re4_1b_2;
-        if (re2.test(w)) { w = w + "e"; }
-        else if (re3.test(w)) { re = re_1b_2; w = w.replace(re,""); }
-        else if (re4.test(w)) { w = w + "e"; }
-      }
-    }
-
-    // Step 1c - replace suffix y or Y by i if preceded by a non-vowel which is not the first letter of the word (so cry -> cri, by -> by, say -> say)
-    re = re_1c;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      w = stem + "i";
-    }
-
-    // Step 2
-    re = re_2;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      suffix = fp[2];
-      re = re_mgr0;
-      if (re.test(stem)) {
-        w = stem + step2list[suffix];
-      }
-    }
-
-    // Step 3
-    re = re_3;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      suffix = fp[2];
-      re = re_mgr0;
-      if (re.test(stem)) {
-        w = stem + step3list[suffix];
-      }
-    }
-
-    // Step 4
-    re = re_4;
-    re2 = re2_4;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      re = re_mgr1;
-      if (re.test(stem)) {
-        w = stem;
-      }
-    } else if (re2.test(w)) {
-      var fp = re2.exec(w);
-      stem = fp[1] + fp[2];
-      re2 = re_mgr1;
-      if (re2.test(stem)) {
-        w = stem;
-      }
-    }
-
-    // Step 5
-    re = re_5;
-    if (re.test(w)) {
-      var fp = re.exec(w);
-      stem = fp[1];
-      re = re_mgr1;
-      re2 = re_meq1;
-      re3 = re3_5;
-      if (re.test(stem) || (re2.test(stem) && !(re3.test(stem)))) {
-        w = stem;
-      }
-    }
-
-    re = re_5_1;
-    re2 = re_mgr1;
-    if (re.test(w) && re2.test(w)) {
-      re = re_1b_2;
-      w = w.replace(re,"");
-    }
-
-    // and turn initial Y back to y
-
-    if (firstch == "y") {
-      w = firstch.toLowerCase() + w.substr(1);
-    }
-
-    return w;
-  };
-
-  return function (token) {
-    return token.update(porterStemmer);
-  }
-})();
-
-lunr.Pipeline.registerFunction(lunr.stemmer, 'stemmer')
-/*!
- * lunr.stopWordFilter
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * lunr.generateStopWordFilter builds a stopWordFilter function from the provided
- * list of stop words.
- *
- * The built in lunr.stopWordFilter is built using this generator and can be used
- * to generate custom stopWordFilters for applications or non English languages.
- *
- * @function
- * @param {Array} token The token to pass through the filter
- * @returns {lunr.PipelineFunction}
- * @see lunr.Pipeline
- * @see lunr.stopWordFilter
- */
-lunr.generateStopWordFilter = function (stopWords) {
-  var words = stopWords.reduce(function (memo, stopWord) {
-    memo[stopWord] = stopWord
-    return memo
-  }, {})
-
-  return function (token) {
-    if (token && words[token.toString()] !== token.toString()) return token
-  }
-}
-
-/**
- * lunr.stopWordFilter is an English language stop word list filter, any words
- * contained in the list will not be passed through the filter.
- *
- * This is intended to be used in the Pipeline. If the token does not pass the
- * filter then undefined will be returned.
- *
- * @function
- * @implements {lunr.PipelineFunction}
- * @params {lunr.Token} token - A token to check for being a stop word.
- * @returns {lunr.Token}
- * @see {@link lunr.Pipeline}
- */
-lunr.stopWordFilter = lunr.generateStopWordFilter([
-  'a',
-  'able',
-  'about',
-  'across',
-  'after',
-  'all',
-  'almost',
-  'also',
-  'am',
-  'among',
-  'an',
-  'and',
-  'any',
-  'are',
-  'as',
-  'at',
-  'be',
-  'because',
-  'been',
-  'but',
-  'by',
-  'can',
-  'cannot',
-  'could',
-  'dear',
-  'did',
-  'do',
-  'does',
-  'either',
-  'else',
-  'ever',
-  'every',
-  'for',
-  'from',
-  'get',
-  'got',
-  'had',
-  'has',
-  'have',
-  'he',
-  'her',
-  'hers',
-  'him',
-  'his',
-  'how',
-  'however',
-  'i',
-  'if',
-  'in',
-  'into',
-  'is',
-  'it',
-  'its',
-  'just',
-  'least',
-  'let',
-  'like',
-  'likely',
-  'may',
-  'me',
-  'might',
-  'most',
-  'must',
-  'my',
-  'neither',
-  'no',
-  'nor',
-  'not',
-  'of',
-  'off',
-  'often',
-  'on',
-  'only',
-  'or',
-  'other',
-  'our',
-  'own',
-  'rather',
-  'said',
-  'say',
-  'says',
-  'she',
-  'should',
-  'since',
-  'so',
-  'some',
-  'than',
-  'that',
-  'the',
-  'their',
-  'them',
-  'then',
-  'there',
-  'these',
-  'they',
-  'this',
-  'tis',
-  'to',
-  'too',
-  'twas',
-  'us',
-  'wants',
-  'was',
-  'we',
-  'were',
-  'what',
-  'when',
-  'where',
-  'which',
-  'while',
-  'who',
-  'whom',
-  'why',
-  'will',
-  'with',
-  'would',
-  'yet',
-  'you',
-  'your'
-])
-
-lunr.Pipeline.registerFunction(lunr.stopWordFilter, 'stopWordFilter')
-/*!
- * lunr.trimmer
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * lunr.trimmer is a pipeline function for trimming non word
- * characters from the beginning and end of tokens before they
- * enter the index.
- *
- * This implementation may not work correctly for non latin
- * characters and should either be removed or adapted for use
- * with languages with non-latin characters.
- *
- * @static
- * @implements {lunr.PipelineFunction}
- * @param {lunr.Token} token The token to pass through the filter
- * @returns {lunr.Token}
- * @see lunr.Pipeline
- */
-lunr.trimmer = function (token) {
-  return token.update(function (s) {
-    return s.replace(/^\W+/, '').replace(/\W+$/, '')
-  })
-}
-
-lunr.Pipeline.registerFunction(lunr.trimmer, 'trimmer')
-/*!
- * lunr.TokenSet
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * A token set is used to store the unique list of all tokens
- * within an index. Token sets are also used to represent an
- * incoming query to the index, this query token set and index
- * token set are then intersected to find which tokens to look
- * up in the inverted index.
- *
- * A token set can hold multiple tokens, as in the case of the
- * index token set, or it can hold a single token as in the
- * case of a simple query token set.
- *
- * Additionally token sets are used to perform wildcard matching.
- * Leading, contained and trailing wildcards are supported, and
- * from this edit distance matching can also be provided.
- *
- * Token sets are implemented as a minimal finite state automata,
- * where both common prefixes and suffixes are shared between tokens.
- * This helps to reduce the space used for storing the token set.
- *
- * @constructor
- */
-lunr.TokenSet = function () {
-  this.final = false
-  this.edges = {}
-  this.id = lunr.TokenSet._nextId
-  lunr.TokenSet._nextId += 1
-}
-
-/**
- * Keeps track of the next, auto increment, identifier to assign
- * to a new tokenSet.
- *
- * TokenSets require a unique identifier to be correctly minimised.
- *
- * @private
- */
-lunr.TokenSet._nextId = 1
-
-/**
- * Creates a TokenSet instance from the given sorted array of words.
- *
- * @param {String[]} arr - A sorted array of strings to create the set from.
- * @returns {lunr.TokenSet}
- * @throws Will throw an error if the input array is not sorted.
- */
-lunr.TokenSet.fromArray = function (arr) {
-  var builder = new lunr.TokenSet.Builder
-
-  for (var i = 0, len = arr.length; i < len; i++) {
-    builder.insert(arr[i])
-  }
-
-  builder.finish()
-  return builder.root
-}
-
-/**
- * Creates a token set from a query clause.
- *
- * @private
- * @param {Object} clause - A single clause from lunr.Query.
- * @param {string} clause.term - The query clause term.
- * @param {number} [clause.editDistance] - The optional edit distance for the term.
- * @returns {lunr.TokenSet}
- */
-lunr.TokenSet.fromClause = function (clause) {
-  if ('editDistance' in clause) {
-    return lunr.TokenSet.fromFuzzyString(clause.term, clause.editDistance)
-  } else {
-    return lunr.TokenSet.fromString(clause.term)
-  }
-}
-
-/**
- * Creates a token set representing a single string with a specified
- * edit distance.
- *
- * Insertions, deletions, substitutions and transpositions are each
- * treated as an edit distance of 1.
- *
- * Increasing the allowed edit distance will have a dramatic impact
- * on the performance of both creating and intersecting these TokenSets.
- * It is advised to keep the edit distance less than 3.
- *
- * @param {string} str - The string to create the token set from.
- * @param {number} editDistance - The allowed edit distance to match.
- * @returns {lunr.Vector}
- */
-lunr.TokenSet.fromFuzzyString = function (str, editDistance) {
-  var root = new lunr.TokenSet
-
-  var stack = [{
-    node: root,
-    editsRemaining: editDistance,
-    str: str
-  }]
-
-  while (stack.length) {
-    var frame = stack.pop()
-
-    // no edit
-    if (frame.str.length > 0) {
-      var char = frame.str.charAt(0),
-          noEditNode
-
-      if (char in frame.node.edges) {
-        noEditNode = frame.node.edges[char]
-      } else {
-        noEditNode = new lunr.TokenSet
-        frame.node.edges[char] = noEditNode
-      }
-
-      if (frame.str.length == 1) {
-        noEditNode.final = true
-      }
-
-      stack.push({
-        node: noEditNode,
-        editsRemaining: frame.editsRemaining,
-        str: frame.str.slice(1)
-      })
-    }
-
-    if (frame.editsRemaining == 0) {
-      continue
-    }
-
-    // insertion
-    if ("*" in frame.node.edges) {
-      var insertionNode = frame.node.edges["*"]
-    } else {
-      var insertionNode = new lunr.TokenSet
-      frame.node.edges["*"] = insertionNode
-    }
-
-    if (frame.str.length == 0) {
-      insertionNode.final = true
-    }
-
-    stack.push({
-      node: insertionNode,
-      editsRemaining: frame.editsRemaining - 1,
-      str: frame.str
-    })
-
-    // deletion
-    // can only do a deletion if we have enough edits remaining
-    // and if there are characters left to delete in the string
-    if (frame.str.length > 1) {
-      stack.push({
-        node: frame.node,
-        editsRemaining: frame.editsRemaining - 1,
-        str: frame.str.slice(1)
-      })
-    }
-
-    // deletion
-    // just removing the last character from the str
-    if (frame.str.length == 1) {
-      frame.node.final = true
-    }
-
-    // substitution
-    // can only do a substitution if we have enough edits remaining
-    // and if there are characters left to substitute
-    if (frame.str.length >= 1) {
-      if ("*" in frame.node.edges) {
-        var substitutionNode = frame.node.edges["*"]
-      } else {
-        var substitutionNode = new lunr.TokenSet
-        frame.node.edges["*"] = substitutionNode
-      }
-
-      if (frame.str.length == 1) {
-        substitutionNode.final = true
-      }
-
-      stack.push({
-        node: substitutionNode,
-        editsRemaining: frame.editsRemaining - 1,
-        str: frame.str.slice(1)
-      })
-    }
-
-    // transposition
-    // can only do a transposition if there are edits remaining
-    // and there are enough characters to transpose
-    if (frame.str.length > 1) {
-      var charA = frame.str.charAt(0),
-          charB = frame.str.charAt(1),
-          transposeNode
-
-      if (charB in frame.node.edges) {
-        transposeNode = frame.node.edges[charB]
-      } else {
-        transposeNode = new lunr.TokenSet
-        frame.node.edges[charB] = transposeNode
-      }
-
-      if (frame.str.length == 1) {
-        transposeNode.final = true
-      }
-
-      stack.push({
-        node: transposeNode,
-        editsRemaining: frame.editsRemaining - 1,
-        str: charA + frame.str.slice(2)
-      })
-    }
-  }
-
-  return root
-}
-
-/**
- * Creates a TokenSet from a string.
- *
- * The string may contain one or more wildcard characters (*)
- * that will allow wildcard matching when intersecting with
- * another TokenSet.
- *
- * @param {string} str - The string to create a TokenSet from.
- * @returns {lunr.TokenSet}
- */
-lunr.TokenSet.fromString = function (str) {
-  var node = new lunr.TokenSet,
-      root = node
-
-  /*
-   * Iterates through all characters within the passed string
-   * appending a node for each character.
-   *
-   * When a wildcard character is found then a self
-   * referencing edge is introduced to continually match
-   * any number of any characters.
-   */
-  for (var i = 0, len = str.length; i < len; i++) {
-    var char = str[i],
-        final = (i == len - 1)
-
-    if (char == "*") {
-      node.edges[char] = node
-      node.final = final
-
-    } else {
-      var next = new lunr.TokenSet
-      next.final = final
-
-      node.edges[char] = next
-      node = next
-    }
-  }
-
-  return root
-}
-
-/**
- * Converts this TokenSet into an array of strings
- * contained within the TokenSet.
- *
- * This is not intended to be used on a TokenSet that
- * contains wildcards, in these cases the results are
- * undefined and are likely to cause an infinite loop.
- *
- * @returns {string[]}
- */
-lunr.TokenSet.prototype.toArray = function () {
-  var words = []
-
-  var stack = [{
-    prefix: "",
-    node: this
-  }]
-
-  while (stack.length) {
-    var frame = stack.pop(),
-        edges = Object.keys(frame.node.edges),
-        len = edges.length
-
-    if (frame.node.final) {
-      /* In Safari, at this point the prefix is sometimes corrupted, see:
-       * https://github.com/olivernn/lunr.js/issues/279 Calling any
-       * String.prototype method forces Safari to "cast" this string to what
-       * it's supposed to be, fixing the bug. */
-      frame.prefix.charAt(0)
-      words.push(frame.prefix)
-    }
-
-    for (var i = 0; i < len; i++) {
-      var edge = edges[i]
-
-      stack.push({
-        prefix: frame.prefix.concat(edge),
-        node: frame.node.edges[edge]
-      })
-    }
-  }
-
-  return words
-}
-
-/**
- * Generates a string representation of a TokenSet.
- *
- * This is intended to allow TokenSets to be used as keys
- * in objects, largely to aid the construction and minimisation
- * of a TokenSet. As such it is not designed to be a human
- * friendly representation of the TokenSet.
- *
- * @returns {string}
- */
-lunr.TokenSet.prototype.toString = function () {
-  // NOTE: Using Object.keys here as this.edges is very likely
-  // to enter 'hash-mode' with many keys being added
-  //
-  // avoiding a for-in loop here as it leads to the function
-  // being de-optimised (at least in V8). From some simple
-  // benchmarks the performance is comparable, but allowing
-  // V8 to optimize may mean easy performance wins in the future.
-
-  if (this._str) {
-    return this._str
-  }
-
-  var str = this.final ? '1' : '0',
-      labels = Object.keys(this.edges).sort(),
-      len = labels.length
-
-  for (var i = 0; i < len; i++) {
-    var label = labels[i],
-        node = this.edges[label]
-
-    str = str + label + node.id
-  }
-
-  return str
-}
-
-/**
- * Returns a new TokenSet that is the intersection of
- * this TokenSet and the passed TokenSet.
- *
- * This intersection will take into account any wildcards
- * contained within the TokenSet.
- *
- * @param {lunr.TokenSet} b - An other TokenSet to intersect with.
- * @returns {lunr.TokenSet}
- */
-lunr.TokenSet.prototype.intersect = function (b) {
-  var output = new lunr.TokenSet,
-      frame = undefined
-
-  var stack = [{
-    qNode: b,
-    output: output,
-    node: this
-  }]
-
-  while (stack.length) {
-    frame = stack.pop()
-
-    // NOTE: As with the #toString method, we are using
-    // Object.keys and a for loop instead of a for-in loop
-    // as both of these objects enter 'hash' mode, causing
-    // the function to be de-optimised in V8
-    var qEdges = Object.keys(frame.qNode.edges),
-        qLen = qEdges.length,
-        nEdges = Object.keys(frame.node.edges),
-        nLen = nEdges.length
-
-    for (var q = 0; q < qLen; q++) {
-      var qEdge = qEdges[q]
-
-      for (var n = 0; n < nLen; n++) {
-        var nEdge = nEdges[n]
-
-        if (nEdge == qEdge || qEdge == '*') {
-          var node = frame.node.edges[nEdge],
-              qNode = frame.qNode.edges[qEdge],
-              final = node.final && qNode.final,
-              next = undefined
-
-          if (nEdge in frame.output.edges) {
-            // an edge already exists for this character
-            // no need to create a new node, just set the finality
-            // bit unless this node is already final
-            next = frame.output.edges[nEdge]
-            next.final = next.final || final
-
-          } else {
-            // no edge exists yet, must create one
-            // set the finality bit and insert it
-            // into the output
-            next = new lunr.TokenSet
-            next.final = final
-            frame.output.edges[nEdge] = next
-          }
-
-          stack.push({
-            qNode: qNode,
-            output: next,
-            node: node
-          })
-        }
-      }
-    }
-  }
-
-  return output
-}
-lunr.TokenSet.Builder = function () {
-  this.previousWord = ""
-  this.root = new lunr.TokenSet
-  this.uncheckedNodes = []
-  this.minimizedNodes = {}
-}
-
-lunr.TokenSet.Builder.prototype.insert = function (word) {
-  var node,
-      commonPrefix = 0
-
-  if (word < this.previousWord) {
-    throw new Error ("Out of order word insertion")
-  }
-
-  for (var i = 0; i < word.length && i < this.previousWord.length; i++) {
-    if (word[i] != this.previousWord[i]) break
-    commonPrefix++
-  }
-
-  this.minimize(commonPrefix)
-
-  if (this.uncheckedNodes.length == 0) {
-    node = this.root
-  } else {
-    node = this.uncheckedNodes[this.uncheckedNodes.length - 1].child
-  }
-
-  for (var i = commonPrefix; i < word.length; i++) {
-    var nextNode = new lunr.TokenSet,
-        char = word[i]
-
-    node.edges[char] = nextNode
-
-    this.uncheckedNodes.push({
-      parent: node,
-      char: char,
-      child: nextNode
-    })
-
-    node = nextNode
-  }
-
-  node.final = true
-  this.previousWord = word
-}
-
-lunr.TokenSet.Builder.prototype.finish = function () {
-  this.minimize(0)
-}
-
-lunr.TokenSet.Builder.prototype.minimize = function (downTo) {
-  for (var i = this.uncheckedNodes.length - 1; i >= downTo; i--) {
-    var node = this.uncheckedNodes[i],
-        childKey = node.child.toString()
-
-    if (childKey in this.minimizedNodes) {
-      node.parent.edges[node.char] = this.minimizedNodes[childKey]
-    } else {
-      // Cache the key for this node since
-      // we know it can't change anymore
-      node.child._str = childKey
-
-      this.minimizedNodes[childKey] = node.child
-    }
-
-    this.uncheckedNodes.pop()
-  }
-}
-/*!
- * lunr.Index
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * An index contains the built index of all documents and provides a query interface
- * to the index.
- *
- * Usually instances of lunr.Index will not be created using this constructor, instead
- * lunr.Builder should be used to construct new indexes, or lunr.Index.load should be
- * used to load previously built and serialized indexes.
- *
- * @constructor
- * @param {Object} attrs - The attributes of the built search index.
- * @param {Object} attrs.invertedIndex - An index of term/field to document reference.
- * @param {Object<string, lunr.Vector>} attrs.fieldVectors - Field vectors
- * @param {lunr.TokenSet} attrs.tokenSet - An set of all corpus tokens.
- * @param {string[]} attrs.fields - The names of indexed document fields.
- * @param {lunr.Pipeline} attrs.pipeline - The pipeline to use for search terms.
- */
-lunr.Index = function (attrs) {
-  this.invertedIndex = attrs.invertedIndex
-  this.fieldVectors = attrs.fieldVectors
-  this.tokenSet = attrs.tokenSet
-  this.fields = attrs.fields
-  this.pipeline = attrs.pipeline
-}
-
-/**
- * A result contains details of a document matching a search query.
- * @typedef {Object} lunr.Index~Result
- * @property {string} ref - The reference of the document this result represents.
- * @property {number} score - A number between 0 and 1 representing how similar this document is to the query.
- * @property {lunr.MatchData} matchData - Contains metadata about this match including which term(s) caused the match.
- */
-
-/**
- * Although lunr provides the ability to create queries using lunr.Query, it also provides a simple
- * query language which itself is parsed into an instance of lunr.Query.
- *
- * For programmatically building queries it is advised to directly use lunr.Query, the query language
- * is best used for human entered text rather than program generated text.
- *
- * At its simplest queries can just be a single term, e.g. `hello`, multiple terms are also supported
- * and will be combined with OR, e.g `hello world` will match documents that contain either 'hello'
- * or 'world', though those that contain both will rank higher in the results.
- *
- * Wildcards can be included in terms to match one or more unspecified characters, these wildcards can
- * be inserted anywhere within the term, and more than one wildcard can exist in a single term. Adding
- * wildcards will increase the number of documents that will be found but can also have a negative
- * impact on query performance, especially with wildcards at the beginning of a term.
- *
- * Terms can be restricted to specific fields, e.g. `title:hello`, only documents with the term
- * hello in the title field will match this query. Using a field not present in the index will lead
- * to an error being thrown.
- *
- * Modifiers can also be added to terms, lunr supports edit distance and boost modifiers on terms. A term
- * boost will make documents matching that term score higher, e.g. `foo^5`. Edit distance is also supported
- * to provide fuzzy matching, e.g. 'hello~2' will match documents with hello with an edit distance of 2.
- * Avoid large values for edit distance to improve query performance.
- *
- * Each term also supports a presence modifier. By default a term's presence in document is optional, however
- * this can be changed to either required or prohibited. For a term's presence to be required in a document the
- * term should be prefixed with a '+', e.g. `+foo bar` is a search for documents that must contain 'foo' and
- * optionally contain 'bar'. Conversely a leading '-' sets the terms presence to prohibited, i.e. it must not
- * appear in a document, e.g. `-foo bar` is a search for documents that do not contain 'foo' but may contain 'bar'.
- *
- * To escape special characters the backslash character '\' can be used, this allows searches to include
- * characters that would normally be considered modifiers, e.g. `foo\~2` will search for a term "foo~2" instead
- * of attempting to apply a boost of 2 to the search term "foo".
- *
- * @typedef {string} lunr.Index~QueryString
- * @example <caption>Simple single term query</caption>
- * hello
- * @example <caption>Multiple term query</caption>
- * hello world
- * @example <caption>term scoped to a field</caption>
- * title:hello
- * @example <caption>term with a boost of 10</caption>
- * hello^10
- * @example <caption>term with an edit distance of 2</caption>
- * hello~2
- * @example <caption>terms with presence modifiers</caption>
- * -foo +bar baz
- */
-
-/**
- * Performs a search against the index using lunr query syntax.
- *
- * Results will be returned sorted by their score, the most relevant results
- * will be returned first.  For details on how the score is calculated, please see
- * the {@link https://lunrjs.com/guides/searching.html#scoring|guide}.
- *
- * For more programmatic querying use lunr.Index#query.
- *
- * @param {lunr.Index~QueryString} queryString - A string containing a lunr query.
- * @throws {lunr.QueryParseError} If the passed query string cannot be parsed.
- * @returns {lunr.Index~Result[]}
- */
-lunr.Index.prototype.search = function (queryString) {
-  return this.query(function (query) {
-    var parser = new lunr.QueryParser(queryString, query)
-    parser.parse()
-  })
-}
-
-/**
- * A query builder callback provides a query object to be used to express
- * the query to perform on the index.
- *
- * @callback lunr.Index~queryBuilder
- * @param {lunr.Query} query - The query object to build up.
- * @this lunr.Query
- */
-
-/**
- * Performs a query against the index using the yielded lunr.Query object.
- *
- * If performing programmatic queries against the index, this method is preferred
- * over lunr.Index#search so as to avoid the additional query parsing overhead.
- *
- * A query object is yielded to the supplied function which should be used to
- * express the query to be run against the index.
- *
- * Note that although this function takes a callback parameter it is _not_ an
- * asynchronous operation, the callback is just yielded a query object to be
- * customized.
- *
- * @param {lunr.Index~queryBuilder} fn - A function that is used to build the query.
- * @returns {lunr.Index~Result[]}
- */
-lunr.Index.prototype.query = function (fn) {
-  // for each query clause
-  // * process terms
-  // * expand terms from token set
-  // * find matching documents and metadata
-  // * get document vectors
-  // * score documents
-
-  var query = new lunr.Query(this.fields),
-      matchingFields = Object.create(null),
-      queryVectors = Object.create(null),
-      termFieldCache = Object.create(null),
-      requiredMatches = Object.create(null),
-      prohibitedMatches = Object.create(null)
-
-  /*
-   * To support field level boosts a query vector is created per
-   * field. An empty vector is eagerly created to support negated
-   * queries.
-   */
-  for (var i = 0; i < this.fields.length; i++) {
-    queryVectors[this.fields[i]] = new lunr.Vector
-  }
-
-  fn.call(query, query)
-
-  for (var i = 0; i < query.clauses.length; i++) {
-    /*
-     * Unless the pipeline has been disabled for this term, which is
-     * the case for terms with wildcards, we need to pass the clause
-     * term through the search pipeline. A pipeline returns an array
-     * of processed terms. Pipeline functions may expand the passed
-     * term, which means we may end up performing multiple index lookups
-     * for a single query term.
-     */
-    var clause = query.clauses[i],
-        terms = null,
-        clauseMatches = lunr.Set.empty
-
-    if (clause.usePipeline) {
-      terms = this.pipeline.runString(clause.term, {
-        fields: clause.fields
-      })
-    } else {
-      terms = [clause.term]
-    }
-
-    for (var m = 0; m < terms.length; m++) {
-      var term = terms[m]
-
-      /*
-       * Each term returned from the pipeline needs to use the same query
-       * clause object, e.g. the same boost and or edit distance. The
-       * simplest way to do this is to re-use the clause object but mutate
-       * its term property.
-       */
-      clause.term = term
-
-      /*
-       * From the term in the clause we create a token set which will then
-       * be used to intersect the indexes token set to get a list of terms
-       * to lookup in the inverted index
-       */
-      var termTokenSet = lunr.TokenSet.fromClause(clause),
-          expandedTerms = this.tokenSet.intersect(termTokenSet).toArray()
-
-      /*
-       * If a term marked as required does not exist in the tokenSet it is
-       * impossible for the search to return any matches. We set all the field
-       * scoped required matches set to empty and stop examining any further
-       * clauses.
-       */
-      if (expandedTerms.length === 0 && clause.presence === lunr.Query.presence.REQUIRED) {
-        for (var k = 0; k < clause.fields.length; k++) {
-          var field = clause.fields[k]
-          requiredMatches[field] = lunr.Set.empty
-        }
-
-        break
-      }
-
-      for (var j = 0; j < expandedTerms.length; j++) {
-        /*
-         * For each term get the posting and termIndex, this is required for
-         * building the query vector.
-         */
-        var expandedTerm = expandedTerms[j],
-            posting = this.invertedIndex[expandedTerm],
-            termIndex = posting._index
-
-        for (var k = 0; k < clause.fields.length; k++) {
-          /*
-           * For each field that this query term is scoped by (by default
-           * all fields are in scope) we need to get all the document refs
-           * that have this term in that field.
-           *
-           * The posting is the entry in the invertedIndex for the matching
-           * term from above.
-           */
-          var field = clause.fields[k],
-              fieldPosting = posting[field],
-              matchingDocumentRefs = Object.keys(fieldPosting),
-              termField = expandedTerm + "/" + field,
-              matchingDocumentsSet = new lunr.Set(matchingDocumentRefs)
-
-          /*
-           * if the presence of this term is required ensure that the matching
-           * documents are added to the set of required matches for this clause.
-           *
-           */
-          if (clause.presence == lunr.Query.presence.REQUIRED) {
-            clauseMatches = clauseMatches.union(matchingDocumentsSet)
-
-            if (requiredMatches[field] === undefined) {
-              requiredMatches[field] = lunr.Set.complete
-            }
-          }
-
-          /*
-           * if the presence of this term is prohibited ensure that the matching
-           * documents are added to the set of prohibited matches for this field,
-           * creating that set if it does not yet exist.
-           */
-          if (clause.presence == lunr.Query.presence.PROHIBITED) {
-            if (prohibitedMatches[field] === undefined) {
-              prohibitedMatches[field] = lunr.Set.empty
-            }
-
-            prohibitedMatches[field] = prohibitedMatches[field].union(matchingDocumentsSet)
-
-            /*
-             * Prohibited matches should not be part of the query vector used for
-             * similarity scoring and no metadata should be extracted so we continue
-             * to the next field
-             */
-            continue
-          }
-
-          /*
-           * The query field vector is populated using the termIndex found for
-           * the term and a unit value with the appropriate boost applied.
-           * Using upsert because there could already be an entry in the vector
-           * for the term we are working with. In that case we just add the scores
-           * together.
-           */
-          queryVectors[field].upsert(termIndex, clause.boost, function (a, b) { return a + b })
-
-          /**
-           * If we've already seen this term, field combo then we've already collected
-           * the matching documents and metadata, no need to go through all that again
-           */
-          if (termFieldCache[termField]) {
-            continue
-          }
-
-          for (var l = 0; l < matchingDocumentRefs.length; l++) {
-            /*
-             * All metadata for this term/field/document triple
-             * are then extracted and collected into an instance
-             * of lunr.MatchData ready to be returned in the query
-             * results
-             */
-            var matchingDocumentRef = matchingDocumentRefs[l],
-                matchingFieldRef = new lunr.FieldRef (matchingDocumentRef, field),
-                metadata = fieldPosting[matchingDocumentRef],
-                fieldMatch
-
-            if ((fieldMatch = matchingFields[matchingFieldRef]) === undefined) {
-              matchingFields[matchingFieldRef] = new lunr.MatchData (expandedTerm, field, metadata)
-            } else {
-              fieldMatch.add(expandedTerm, field, metadata)
-            }
-
-          }
-
-          termFieldCache[termField] = true
-        }
-      }
-    }
-
-    /**
-     * If the presence was required we need to update the requiredMatches field sets.
-     * We do this after all fields for the term have collected their matches because
-     * the clause terms presence is required in _any_ of the fields not _all_ of the
-     * fields.
-     */
-    if (clause.presence === lunr.Query.presence.REQUIRED) {
-      for (var k = 0; k < clause.fields.length; k++) {
-        var field = clause.fields[k]
-        requiredMatches[field] = requiredMatches[field].intersect(clauseMatches)
-      }
-    }
-  }
-
-  /**
-   * Need to combine the field scoped required and prohibited
-   * matching documents into a global set of required and prohibited
-   * matches
-   */
-  var allRequiredMatches = lunr.Set.complete,
-      allProhibitedMatches = lunr.Set.empty
-
-  for (var i = 0; i < this.fields.length; i++) {
-    var field = this.fields[i]
-
-    if (requiredMatches[field]) {
-      allRequiredMatches = allRequiredMatches.intersect(requiredMatches[field])
-    }
-
-    if (prohibitedMatches[field]) {
-      allProhibitedMatches = allProhibitedMatches.union(prohibitedMatches[field])
-    }
-  }
-
-  var matchingFieldRefs = Object.keys(matchingFields),
-      results = [],
-      matches = Object.create(null)
-
-  /*
-   * If the query is negated (contains only prohibited terms)
-   * we need to get _all_ fieldRefs currently existing in the
-   * index. This is only done when we know that the query is
-   * entirely prohibited terms to avoid any cost of getting all
-   * fieldRefs unnecessarily.
-   *
-   * Additionally, blank MatchData must be created to correctly
-   * populate the results.
-   */
-  if (query.isNegated()) {
-    matchingFieldRefs = Object.keys(this.fieldVectors)
-
-    for (var i = 0; i < matchingFieldRefs.length; i++) {
-      var matchingFieldRef = matchingFieldRefs[i]
-      var fieldRef = lunr.FieldRef.fromString(matchingFieldRef)
-      matchingFields[matchingFieldRef] = new lunr.MatchData
-    }
-  }
-
-  for (var i = 0; i < matchingFieldRefs.length; i++) {
-    /*
-     * Currently we have document fields that match the query, but we
-     * need to return documents. The matchData and scores are combined
-     * from multiple fields belonging to the same document.
-     *
-     * Scores are calculated by field, using the query vectors created
-     * above, and combined into a final document score using addition.
-     */
-    var fieldRef = lunr.FieldRef.fromString(matchingFieldRefs[i]),
-        docRef = fieldRef.docRef
-
-    if (!allRequiredMatches.contains(docRef)) {
-      continue
-    }
-
-    if (allProhibitedMatches.contains(docRef)) {
-      continue
-    }
-
-    var fieldVector = this.fieldVectors[fieldRef],
-        score = queryVectors[fieldRef.fieldName].similarity(fieldVector),
-        docMatch
-
-    if ((docMatch = matches[docRef]) !== undefined) {
-      docMatch.score += score
-      docMatch.matchData.combine(matchingFields[fieldRef])
-    } else {
-      var match = {
-        ref: docRef,
-        score: score,
-        matchData: matchingFields[fieldRef]
-      }
-      matches[docRef] = match
-      results.push(match)
-    }
-  }
-
-  /*
-   * Sort the results objects by score, highest first.
-   */
-  return results.sort(function (a, b) {
-    return b.score - a.score
-  })
-}
-
-/**
- * Prepares the index for JSON serialization.
- *
- * The schema for this JSON blob will be described in a
- * separate JSON schema file.
- *
- * @returns {Object}
- */
-lunr.Index.prototype.toJSON = function () {
-  var invertedIndex = Object.keys(this.invertedIndex)
-    .sort()
-    .map(function (term) {
-      return [term, this.invertedIndex[term]]
-    }, this)
-
-  var fieldVectors = Object.keys(this.fieldVectors)
-    .map(function (ref) {
-      return [ref, this.fieldVectors[ref].toJSON()]
-    }, this)
-
-  return {
-    version: lunr.version,
-    fields: this.fields,
-    fieldVectors: fieldVectors,
-    invertedIndex: invertedIndex,
-    pipeline: this.pipeline.toJSON()
-  }
-}
-
-/**
- * Loads a previously serialized lunr.Index
- *
- * @param {Object} serializedIndex - A previously serialized lunr.Index
- * @returns {lunr.Index}
- */
-lunr.Index.load = function (serializedIndex) {
-  var attrs = {},
-      fieldVectors = {},
-      serializedVectors = serializedIndex.fieldVectors,
-      invertedIndex = Object.create(null),
-      serializedInvertedIndex = serializedIndex.invertedIndex,
-      tokenSetBuilder = new lunr.TokenSet.Builder,
-      pipeline = lunr.Pipeline.load(serializedIndex.pipeline)
-
-  if (serializedIndex.version != lunr.version) {
-    lunr.utils.warn("Version mismatch when loading serialised index. Current version of lunr '" + lunr.version + "' does not match serialized index '" + serializedIndex.version + "'")
-  }
-
-  for (var i = 0; i < serializedVectors.length; i++) {
-    var tuple = serializedVectors[i],
-        ref = tuple[0],
-        elements = tuple[1]
-
-    fieldVectors[ref] = new lunr.Vector(elements)
-  }
-
-  for (var i = 0; i < serializedInvertedIndex.length; i++) {
-    var tuple = serializedInvertedIndex[i],
-        term = tuple[0],
-        posting = tuple[1]
-
-    tokenSetBuilder.insert(term)
-    invertedIndex[term] = posting
-  }
-
-  tokenSetBuilder.finish()
-
-  attrs.fields = serializedIndex.fields
-
-  attrs.fieldVectors = fieldVectors
-  attrs.invertedIndex = invertedIndex
-  attrs.tokenSet = tokenSetBuilder.root
-  attrs.pipeline = pipeline
-
-  return new lunr.Index(attrs)
-}
-/*!
- * lunr.Builder
- * Copyright (C) 2020 Oliver Nightingale
- */
-
-/**
- * lunr.Builder performs indexing on a set of documents and
- * returns instances of lunr.Index ready for querying.
- *
- * All configuration of the index is done via the builder, the
- * fields to index, the document reference, the text processing
- * pipeline and document scoring parameters are all set on the
- * builder before indexing.
- *
- * @constructor
- * @property {string} _ref - Internal reference to the document reference field.
- * @property {string[]} _fields - Internal reference to the document fields to index.
- * @property {object} invertedIndex - The inverted index maps terms to document fields.
- * @property {object} documentTermFrequencies - Keeps track of document term frequencies.
- * @property {object} documentLengths - Keeps track of the length of documents added to the index.
- * @property {lunr.tokenizer} tokenizer - Function for splitting strings into tokens for indexing.
- * @property {lunr.Pipeline} pipeline - The pipeline performs text processing on tokens before indexing.
- * @property {lunr.Pipeline} searchPipeline - A pipeline for processing search terms before querying the index.
- * @property {number} documentCount - Keeps track of the total number of documents indexed.
- * @property {number} _b - A parameter to control field length normalization, setting this to 0 disabled normalization, 1 fully normalizes field lengths, the default value is 0.75.
- * @property {number} _k1 - A parameter to control how quickly an increase in term frequency results in term frequency saturation, the default value is 1.2.
- * @property {number} termIndex - A counter incremented for each unique term, used to identify a terms position in the vector space.
- * @property {array} metadataWhitelist - A list of metadata keys that have been whitelisted for entry in the index.
- */
-lunr.Builder = function () {
-  this._ref = "id"
-  this._fields = Object.create(null)
-  this._documents = Object.create(null)
-  this.invertedIndex = Object.create(null)
-  this.fieldTermFrequencies = {}
-  this.fieldLengths = {}
-  this.tokenizer = lunr.tokenizer
-  this.pipeline = new lunr.Pipeline
-  this.searchPipeline = new lunr.Pipeline
-  this.documentCount = 0
-  this._b = 0.75
-  this._k1 = 1.2
-  this.termIndex = 0
-  this.metadataWhitelist = []
-}
-
-/**
- * Sets the document field used as the document reference. Every document must have this field.
- * The type of this field in the document should be a string, if it is not a string it will be
- * coerced into a string by calling toString.
- *
- * The default ref is 'id'.
- *
- * The ref should _not_ be changed during indexing, it should be set before any documents are
- * added to the index. Changing it during indexing can lead to inconsistent results.
- *
- * @param {string} ref - The name of the reference field in the document.
- */
-lunr.Builder.prototype.ref = function (ref) {
-  this._ref = ref
-}
-
-/**
- * A function that is used to extract a field from a document.
- *
- * Lunr expects a field to be at the top level of a document, if however the field
- * is deeply nested within a document an extractor function can be used to extract
- * the right field for indexing.
- *
- * @callback fieldExtractor
- * @param {object} doc - The document being added to the index.
- * @returns {?(string|object|object[])} obj - The object that will be indexed for this field.
- * @example <caption>Extracting a nested field</caption>
- * function (doc) { return doc.nested.field }
- */
-
-/**
- * Adds a field to the list of document fields that will be indexed. Every document being
- * indexed should have this field. Null values for this field in indexed documents will
- * not cause errors but will limit the chance of that document being retrieved by searches.
- *
- * All fields should be added before adding documents to the index. Adding fields after
- * a document has been indexed will have no effect on already indexed documents.
- *
- * Fields can be boosted at build time. This allows terms within that field to have more
- * importance when ranking search results. Use a field boost to specify that matches within
- * one field are more important than other fields.
- *
- * @param {string} fieldName - The name of a field to index in all documents.
- * @param {object} attributes - Optional attributes associated with this field.
- * @param {number} [attributes.boost=1] - Boost applied to all terms within this field.
- * @param {fieldExtractor} [attributes.extractor] - Function to extract a field from a document.
- * @throws {RangeError} fieldName cannot contain unsupported characters '/'
- */
-lunr.Builder.prototype.field = function (fieldName, attributes) {
-  if (/\//.test(fieldName)) {
-    throw new RangeError ("Field '" + fieldName + "' contains illegal character '/'")
-  }
-
-  this._fields[fieldName] = attributes || {}
-}
-
-/**
- * A parameter to tune the amount of field length normalisation that is applied when
- * calculating relevance scores. A value of 0 will completely disable any normalisation
- * and a value of 1 will fully normalise field lengths. The default is 0.75. Values of b
- * will be clamped to the range 0 - 1.
- *
- * @param {number} number - The value to set for this tuning parameter.
- */
-lunr.Builder.prototype.b = function (number) {
-  if (number < 0) {
-    this._b = 0
-  } else if (number > 1) {
-    this._b = 1
-  } else {
-    this._b = number
-  }
-}
-
-/**
- * A parameter that controls the speed at which a rise in term frequency results in term
- * frequency saturation. The default value is 1.2. Setting this to a higher value will give
- * slower saturation levels, a lower value will result in quicker saturation.
- *
- * @param {number} number - The value to set for this tuning parameter.
- */
-lunr.Builder.prototype.k1 = function (number) {
-  this._k1 = number
-}
-
-/**
- * Adds a document to the index.
- *
- * Before adding fields to the index the index should have been fully setup, with the document
- * ref and all fields to index already having been specified.
- *
- * The document must have a field name as specified by the ref (by default this is 'id') and
- * it should have all fields defined for indexing, though null or undefined values will not
- * cause errors.
- *
- * Entire documents can be boosted at build time. Applying a boost to a document indicates that
- * this document should rank higher in search results than other documents.
- *
- * @param {object} doc - The document to add to the index.
- * @param {object} attributes - Optional attributes associated with this document.
- * @param {number} [attributes.boost=1] - Boost applied to all terms within this document.
- */
-lunr.Builder.prototype.add = function (doc, attributes) {
-  var docRef = doc[this._ref],
-      fields = Object.keys(this._fields)
-
-  this._documents[docRef] = attributes || {}
-  this.documentCount += 1
-
-  for (var i = 0; i < fields.length; i++) {
-    var fieldName = fields[i],
-        extractor = this._fields[fieldName].extractor,
-        field = extractor ? extractor(doc) : doc[fieldName],
-        tokens = this.tokenizer(field, {
-          fields: [fieldName]
-        }),
-        terms = this.pipeline.run(tokens),
-        fieldRef = new lunr.FieldRef (docRef, fieldName),
-        fieldTerms = Object.create(null)
-
-    this.fieldTermFrequencies[fieldRef] = fieldTerms
-    this.fieldLengths[fieldRef] = 0
-
-    // store the length of this field for this document
-    this.fieldLengths[fieldRef] += terms.length
-
-    // calculate term frequencies for this field
-    for (var j = 0; j < terms.length; j++) {
-      var term = terms[j]
-
-      if (fieldTerms[term] == undefined) {
-        fieldTerms[term] = 0
-      }
-
-      fieldTerms[term] += 1
-
-      // add to inverted index
-      // create an initial posting if one doesn't exist
-      if (this.invertedIndex[term] == undefined) {
-        var posting = Object.create(null)
-        posting["_index"] = this.termIndex
-        this.termIndex += 1
-
-        for (var k = 0; k < fields.length; k++) {
-          posting[fields[k]] = Object.create(null)
-        }
-
-        this.invertedIndex[term] = posting
-      }
-
-      // add an entry for this term/fieldName/docRef to the invertedIndex
-      if (this.invertedIndex[term][fieldName][docRef] == undefined) {
-        this.invertedIndex[term][fieldName][docRef] = Object.create(null)
-      }
-
-      // store all whitelisted metadata about this token in the
-      // inverted index
-      for (var l = 0; l < this.metadataWhitelist.length; l++) {
-        var metadataKey = this.metadataWhitelist[l],
-            metadata = term.metadata[metadataKey]
-
-        if (this.invertedIndex[term][fieldName][docRef][metadataKey] == undefined) {
-          this.invertedIndex[term][fieldName][docRef][metadataKey] = []
-        }
-
-        this.invertedIndex[term][fieldName][docRef][metadataKey].push(metadata)
-      }
-    }
-
-  }
-}
-
-/**
- * Calculates the average document length for this index
- *
- * @private
- */
-lunr.Builder.prototype.calculateAverageFieldLengths = function () {
-
-  var fieldRefs = Object.keys(this.fieldLengths),
-      numberOfFields = fieldRefs.length,
-      accumulator = {},
-      documentsWithField = {}
-
-  for (var i = 0; i < numberOfFields; i++) {
-    var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),
-        field = fieldRef.fieldName
-
-    documentsWithField[field] || (documentsWithField[field] = 0)
-    documentsWithField[field] += 1
-
-    accumulator[field] || (accumulator[field] = 0)
-    accumulator[field] += this.fieldLengths[fieldRef]
-  }
-
-  var fields = Object.keys(this._fields)
-
-  for (var i = 0; i < fields.length; i++) {
-    var fieldName = fields[i]
-    accumulator[fieldName] = accumulator[fieldName] / documentsWithField[fieldName]
-  }
-
-  this.averageFieldLength = accumulator
-}
-
-/**
- * Builds a vector space model of every document using lunr.Vector
- *
- * @private
- */
-lunr.Builder.prototype.createFieldVectors = function () {
-  var fieldVectors = {},
-      fieldRefs = Object.keys(this.fieldTermFrequencies),
-      fieldRefsLength = fieldRefs.length,
-      termIdfCache = Object.create(null)
-
-  for (var i = 0; i < fieldRefsLength; i++) {
-    var fieldRef = lunr.FieldRef.fromString(fieldRefs[i]),
-        fieldName = fieldRef.fieldName,
-        fieldLength = this.fieldLengths[fieldRef],
-        fieldVector = new lunr.Vector,
-        termFrequencies = this.fieldTermFrequencies[fieldRef],
-        terms = Object.keys(termFrequencies),
-        termsLength = terms.length
-
-
-    var fieldBoost = this._fields[fieldName].boost || 1,
-        docBoost = this._documents[fieldRef.docRef].boost || 1
-
-    for (var j = 0; j < termsLength; j++) {
-      var term = terms[j],
-          tf = termFrequencies[term],
-          termIndex = this.invertedIndex[term]._index,
-          idf, score, scoreWithPrecision
-
-      if (termIdfCache[term] === undefined) {
-        idf = lunr.idf(this.invertedIndex[term], this.documentCount)
-        termIdfCache[term] = idf
-      } else {
-        idf = termIdfCache[term]
-      }
-
-      score = idf * ((this._k1 + 1) * tf) / (this._k1 * (1 - this._b + this._b * (fieldLength / this.averageFieldLength[fieldName])) + tf)
-      score *= fieldBoost
-      score *= docBoost
-      scoreWithPrecision = Math.round(score * 1000) / 1000
-      // Converts 1.23456789 to 1.234.
-      // Reducing the precision so that the vectors take up less
-      // space when serialised. Doing it now so that they behave
-      // the same before and after serialisation. Also, this is
-      // the fastest approach to reducing a number's precision in
-      // JavaScript.
-
-      fieldVector.insert(termIndex, scoreWithPrecision)
-    }
-
-    fieldVectors[fieldRef] = fieldVector
-  }
-
-  this.fieldVectors = fieldVectors
-}
-
-/**
- * Creates a token set of all tokens in the index using lunr.TokenSet
- *
- * @private
- */
-lunr.Builder.prototype.createTokenSet = function () {
-  this.tokenSet = lunr.TokenSet.fromArray(
-    Object.keys(this.invertedIndex).sort()
-  )
-}
-
-/**
- * Builds the index, creating an instance of lunr.Index.
- *
- * This completes the indexing process and should only be called
- * once all documents have been added to the index.
- *
- * @returns {lunr.Index}
- */
-lunr.Builder.prototype.build = function () {
-  this.calculateAverageFieldLengths()
-  this.createFieldVectors()
-  this.createTokenSet()
-
-  return new lunr.Index({
-    invertedIndex: this.invertedIndex,
-    fieldVectors: this.fieldVectors,
-    tokenSet: this.tokenSet,
-    fields: Object.keys(this._fields),
-    pipeline: this.searchPipeline
-  })
-}
-
-/**
- * Applies a plugin to the index builder.
- *
- * A plugin is a function that is called with the index builder as its context.
- * Plugins can be used to customise or extend the behaviour of the index
- * in some way. A plugin is just a function, that encapsulated the custom
- * behaviour that should be applied when building the index.
- *
- * The plugin function will be called with the index builder as its argument, additional
- * arguments can also be passed when calling use. The function will be called
- * with the index builder as its context.
- *
- * @param {Function} plugin The plugin to apply.
- */
-lunr.Builder.prototype.use = function (fn) {
-  var args = Array.prototype.slice.call(arguments, 1)
-  args.unshift(this)
-  fn.apply(this, args)
-}
-/**
- * Contains and collects metadata about a matching document.
- * A single instance of lunr.MatchData is returned as part of every
- * lunr.Index~Result.
- *
- * @constructor
- * @param {string} term - The term this match data is associated with
- * @param {string} field - The field in which the term was found
- * @param {object} metadata - The metadata recorded about this term in this field
- * @property {object} metadata - A cloned collection of metadata associated with this document.
- * @see {@link lunr.Index~Result}
- */
-lunr.MatchData = function (term, field, metadata) {
-  var clonedMetadata = Object.create(null),
-      metadataKeys = Object.keys(metadata || {})
-
-  // Cloning the metadata to prevent the original
-  // being mutated during match data combination.
-  // Metadata is kept in an array within the inverted
-  // index so cloning the data can be done with
-  // Array#slice
-  for (var i = 0; i < metadataKeys.length; i++) {
-    var key = metadataKeys[i]
-    clonedMetadata[key] = metadata[key].slice()
-  }
-
-  this.metadata = Object.create(null)
-
-  if (term !== undefined) {
-    this.metadata[term] = Object.create(null)
-    this.metadata[term][field] = clonedMetadata
-  }
-}
-
-/**
- * An instance of lunr.MatchData will be created for every term that matches a
- * document. However only one instance is required in a lunr.Index~Result. This
- * method combines metadata from another instance of lunr.MatchData with this
- * objects metadata.
- *
- * @param {lunr.MatchData} otherMatchData - Another instance of match data to merge with this one.
- * @see {@link lunr.Index~Result}
- */
-lunr.MatchData.prototype.combine = function (otherMatchData) {
-  var terms = Object.keys(otherMatchData.metadata)
-
-  for (var i = 0; i < terms.length; i++) {
-    var term = terms[i],
-        fields = Object.keys(otherMatchData.metadata[term])
-
-    if (this.metadata[term] == undefined) {
-      this.metadata[term] = Object.create(null)
-    }
-
-    for (var j = 0; j < fields.length; j++) {
-      var field = fields[j],
-          keys = Object.keys(otherMatchData.metadata[term][field])
-
-      if (this.metadata[term][field] == undefined) {
-        this.metadata[term][field] = Object.create(null)
-      }
-
-      for (var k = 0; k < keys.length; k++) {
-        var key = keys[k]
-
-        if (this.metadata[term][field][key] == undefined) {
-          this.metadata[term][field][key] = otherMatchData.metadata[term][field][key]
-        } else {
-          this.metadata[term][field][key] = this.metadata[term][field][key].concat(otherMatchData.metadata[term][field][key])
-        }
-
-      }
-    }
-  }
-}
-
-/**
- * Add metadata for a term/field pair to this instance of match data.
- *
- * @param {string} term - The term this match data is associated with
- * @param {string} field - The field in which the term was found
- * @param {object} metadata - The metadata recorded about this term in this field
- */
-lunr.MatchData.prototype.add = function (term, field, metadata) {
-  if (!(term in this.metadata)) {
-    this.metadata[term] = Object.create(null)
-    this.metadata[term][field] = metadata
-    return
-  }
-
-  if (!(field in this.metadata[term])) {
-    this.metadata[term][field] = metadata
-    return
-  }
-
-  var metadataKeys = Object.keys(metadata)
-
-  for (var i = 0; i < metadataKeys.length; i++) {
-    var key = metadataKeys[i]
-
-    if (key in this.metadata[term][field]) {
-      this.metadata[term][field][key] = this.metadata[term][field][key].concat(metadata[key])
-    } else {
-      this.metadata[term][field][key] = metadata[key]
-    }
-  }
-}
-/**
- * A lunr.Query provides a programmatic way of defining queries to be performed
- * against a {@link lunr.Index}.
- *
- * Prefer constructing a lunr.Query using the {@link lunr.Index#query} method
- * so the query object is pre-initialized with the right index fields.
- *
- * @constructor
- * @property {lunr.Query~Clause[]} clauses - An array of query clauses.
- * @property {string[]} allFields - An array of all available fields in a lunr.Index.
- */
-lunr.Query = function (allFields) {
-  this.clauses = []
-  this.allFields = allFields
-}
-
-/**
- * Constants for indicating what kind of automatic wildcard insertion will be used when constructing a query clause.
- *
- * This allows wildcards to be added to the beginning and end of a term without having to manually do any string
- * concatenation.
- *
- * The wildcard constants can be bitwise combined to select both leading and trailing wildcards.
- *
- * @constant
- * @default
- * @property {number} wildcard.NONE - The term will have no wildcards inserted, this is the default behaviour
- * @property {number} wildcard.LEADING - Prepend the term with a wildcard, unless a leading wildcard already exists
- * @property {number} wildcard.TRAILING - Append a wildcard to the term, unless a trailing wildcard already exists
- * @see lunr.Query~Clause
- * @see lunr.Query#clause
- * @see lunr.Query#term
- * @example <caption>query term with trailing wildcard</caption>
- * query.term('foo', { wildcard: lunr.Query.wildcard.TRAILING })
- * @example <caption>query term with leading and trailing wildcard</caption>
- * query.term('foo', {
- *   wildcard: lunr.Query.wildcard.LEADING | lunr.Query.wildcard.TRAILING
- * })
- */
-
-lunr.Query.wildcard = new String ("*")
-lunr.Query.wildcard.NONE = 0
-lunr.Query.wildcard.LEADING = 1
-lunr.Query.wildcard.TRAILING = 2
-
-/**
- * Constants for indicating what kind of presence a term must have in matching documents.
- *
- * @constant
- * @enum {number}
- * @see lunr.Query~Clause
- * @see lunr.Query#clause
- * @see lunr.Query#term
- * @example <caption>query term with required presence</caption>
- * query.term('foo', { presence: lunr.Query.presence.REQUIRED })
- */
-lunr.Query.presence = {
-  /**
-   * Term's presence in a document is optional, this is the default value.
-   */
-  OPTIONAL: 1,
-
-  /**
-   * Term's presence in a document is required, documents that do not contain
-   * this term will not be returned.
-   */
-  REQUIRED: 2,
-
-  /**
-   * Term's presence in a document is prohibited, documents that do contain
-   * this term will not be returned.
-   */
-  PROHIBITED: 3
-}
-
-/**
- * A single clause in a {@link lunr.Query} contains a term and details on how to
- * match that term against a {@link lunr.Index}.
- *
- * @typedef {Object} lunr.Query~Clause
- * @property {string[]} fields - The fields in an index this clause should be matched against.
- * @property {number} [boost=1] - Any boost that should be applied when matching this clause.
- * @property {number} [editDistance] - Whether the term should have fuzzy matching applied, and how fuzzy the match should be.
- * @property {boolean} [usePipeline] - Whether the term should be passed through the search pipeline.
- * @property {number} [wildcard=lunr.Query.wildcard.NONE] - Whether the term should have wildcards appended or prepended.
- * @property {number} [presence=lunr.Query.presence.OPTIONAL] - The terms presence in any matching documents.
- */
-
-/**
- * Adds a {@link lunr.Query~Clause} to this query.
- *
- * Unless the clause contains the fields to be matched all fields will be matched. In addition
- * a default boost of 1 is applied to the clause.
- *
- * @param {lunr.Query~Clause} clause - The clause to add to this query.
- * @see lunr.Query~Clause
- * @returns {lunr.Query}
- */
-lunr.Query.prototype.clause = function (clause) {
-  if (!('fields' in clause)) {
-    clause.fields = this.allFields
-  }
-
-  if (!('boost' in clause)) {
-    clause.boost = 1
-  }
-
-  if (!('usePipeline' in clause)) {
-    clause.usePipeline = true
-  }
-
-  if (!('wildcard' in clause)) {
-    clause.wildcard = lunr.Query.wildcard.NONE
-  }
-
-  if ((clause.wildcard & lunr.Query.wildcard.LEADING) && (clause.term.charAt(0) != lunr.Query.wildcard)) {
-    clause.term = "*" + clause.term
-  }
-
-  if ((clause.wildcard & lunr.Query.wildcard.TRAILING) && (clause.term.slice(-1) != lunr.Query.wildcard)) {
-    clause.term = "" + clause.term + "*"
-  }
-
-  if (!('presence' in clause)) {
-    clause.presence = lunr.Query.presence.OPTIONAL
-  }
-
-  this.clauses.push(clause)
-
-  return this
-}
-
-/**
- * A negated query is one in which every clause has a presence of
- * prohibited. These queries require some special processing to return
- * the expected results.
- *
- * @returns boolean
- */
-lunr.Query.prototype.isNegated = function () {
-  for (var i = 0; i < this.clauses.length; i++) {
-    if (this.clauses[i].presence != lunr.Query.presence.PROHIBITED) {
-      return false
-    }
-  }
-
-  return true
-}
-
-/**
- * Adds a term to the current query, under the covers this will create a {@link lunr.Query~Clause}
- * to the list of clauses that make up this query.
- *
- * The term is used as is, i.e. no tokenization will be performed by this method. Instead conversion
- * to a token or token-like string should be done before calling this method.
- *
- * The term will be converted to a string by calling `toString`. Multiple terms can be passed as an
- * array, each term in the array will share the same options.
- *
- * @param {object|object[]} term - The term(s) to add to the query.
- * @param {object} [options] - Any additional properties to add to the query clause.
- * @returns {lunr.Query}
- * @see lunr.Query#clause
- * @see lunr.Query~Clause
- * @example <caption>adding a single term to a query</caption>
- * query.term("foo")
- * @example <caption>adding a single term to a query and specifying search fields, term boost and automatic trailing wildcard</caption>
- * query.term("foo", {
- *   fields: ["title"],
- *   boost: 10,
- *   wildcard: lunr.Query.wildcard.TRAILING
- * })
- * @example <caption>using lunr.tokenizer to convert a string to tokens before using them as terms</caption>
- * query.term(lunr.tokenizer("foo bar"))
- */
-lunr.Query.prototype.term = function (term, options) {
-  if (Array.isArray(term)) {
-    term.forEach(function (t) { this.term(t, lunr.utils.clone(options)) }, this)
-    return this
-  }
-
-  var clause = options || {}
-  clause.term = term.toString()
-
-  this.clause(clause)
-
-  return this
-}
-lunr.QueryParseError = function (message, start, end) {
-  this.name = "QueryParseError"
-  this.message = message
-  this.start = start
-  this.end = end
-}
-
-lunr.QueryParseError.prototype = new Error
-lunr.QueryLexer = function (str) {
-  this.lexemes = []
-  this.str = str
-  this.length = str.length
-  this.pos = 0
-  this.start = 0
-  this.escapeCharPositions = []
-}
-
-lunr.QueryLexer.prototype.run = function () {
-  var state = lunr.QueryLexer.lexText
-
-  while (state) {
-    state = state(this)
-  }
-}
-
-lunr.QueryLexer.prototype.sliceString = function () {
-  var subSlices = [],
-      sliceStart = this.start,
-      sliceEnd = this.pos
-
-  for (var i = 0; i < this.escapeCharPositions.length; i++) {
-    sliceEnd = this.escapeCharPositions[i]
-    subSlices.push(this.str.slice(sliceStart, sliceEnd))
-    sliceStart = sliceEnd + 1
-  }
-
-  subSlices.push(this.str.slice(sliceStart, this.pos))
-  this.escapeCharPositions.length = 0
-
-  return subSlices.join('')
-}
-
-lunr.QueryLexer.prototype.emit = function (type) {
-  this.lexemes.push({
-    type: type,
-    str: this.sliceString(),
-    start: this.start,
-    end: this.pos
-  })
-
-  this.start = this.pos
-}
-
-lunr.QueryLexer.prototype.escapeCharacter = function () {
-  this.escapeCharPositions.push(this.pos - 1)
-  this.pos += 1
-}
-
-lunr.QueryLexer.prototype.next = function () {
-  if (this.pos >= this.length) {
-    return lunr.QueryLexer.EOS
-  }
-
-  var char = this.str.charAt(this.pos)
-  this.pos += 1
-  return char
-}
-
-lunr.QueryLexer.prototype.width = function () {
-  return this.pos - this.start
-}
-
-lunr.QueryLexer.prototype.ignore = function () {
-  if (this.start == this.pos) {
-    this.pos += 1
-  }
-
-  this.start = this.pos
-}
-
-lunr.QueryLexer.prototype.backup = function () {
-  this.pos -= 1
-}
-
-lunr.QueryLexer.prototype.acceptDigitRun = function () {
-  var char, charCode
-
-  do {
-    char = this.next()
-    charCode = char.charCodeAt(0)
-  } while (charCode > 47 && charCode < 58)
-
-  if (char != lunr.QueryLexer.EOS) {
-    this.backup()
-  }
-}
-
-lunr.QueryLexer.prototype.more = function () {
-  return this.pos < this.length
-}
-
-lunr.QueryLexer.EOS = 'EOS'
-lunr.QueryLexer.FIELD = 'FIELD'
-lunr.QueryLexer.TERM = 'TERM'
-lunr.QueryLexer.EDIT_DISTANCE = 'EDIT_DISTANCE'
-lunr.QueryLexer.BOOST = 'BOOST'
-lunr.QueryLexer.PRESENCE = 'PRESENCE'
-
-lunr.QueryLexer.lexField = function (lexer) {
-  lexer.backup()
-  lexer.emit(lunr.QueryLexer.FIELD)
-  lexer.ignore()
-  return lunr.QueryLexer.lexText
-}
-
-lunr.QueryLexer.lexTerm = function (lexer) {
-  if (lexer.width() > 1) {
-    lexer.backup()
-    lexer.emit(lunr.QueryLexer.TERM)
-  }
-
-  lexer.ignore()
-
-  if (lexer.more()) {
-    return lunr.QueryLexer.lexText
-  }
-}
-
-lunr.QueryLexer.lexEditDistance = function (lexer) {
-  lexer.ignore()
-  lexer.acceptDigitRun()
-  lexer.emit(lunr.QueryLexer.EDIT_DISTANCE)
-  return lunr.QueryLexer.lexText
-}
-
-lunr.QueryLexer.lexBoost = function (lexer) {
-  lexer.ignore()
-  lexer.acceptDigitRun()
-  lexer.emit(lunr.QueryLexer.BOOST)
-  return lunr.QueryLexer.lexText
-}
-
-lunr.QueryLexer.lexEOS = function (lexer) {
-  if (lexer.width() > 0) {
-    lexer.emit(lunr.QueryLexer.TERM)
-  }
-}
-
-// This matches the separator used when tokenising fields
-// within a document. These should match otherwise it is
-// not possible to search for some tokens within a document.
-//
-// It is possible for the user to change the separator on the
-// tokenizer so it _might_ clash with any other of the special
-// characters already used within the search string, e.g. :.
-//
-// This means that it is possible to change the separator in
-// such a way that makes some words unsearchable using a search
-// string.
-lunr.QueryLexer.termSeparator = lunr.tokenizer.separator
-
-lunr.QueryLexer.lexText = function (lexer) {
-  while (true) {
-    var char = lexer.next()
-
-    if (char == lunr.QueryLexer.EOS) {
-      return lunr.QueryLexer.lexEOS
-    }
-
-    // Escape character is '\'
-    if (char.charCodeAt(0) == 92) {
-      lexer.escapeCharacter()
-      continue
-    }
-
-    if (char == ":") {
-      return lunr.QueryLexer.lexField
-    }
-
-    if (char == "~") {
-      lexer.backup()
-      if (lexer.width() > 0) {
-        lexer.emit(lunr.QueryLexer.TERM)
-      }
-      return lunr.QueryLexer.lexEditDistance
-    }
-
-    if (char == "^") {
-      lexer.backup()
-      if (lexer.width() > 0) {
-        lexer.emit(lunr.QueryLexer.TERM)
-      }
-      return lunr.QueryLexer.lexBoost
-    }
-
-    // "+" indicates term presence is required
-    // checking for length to ensure that only
-    // leading "+" are considered
-    if (char == "+" && lexer.width() === 1) {
-      lexer.emit(lunr.QueryLexer.PRESENCE)
-      return lunr.QueryLexer.lexText
-    }
-
-    // "-" indicates term presence is prohibited
-    // checking for length to ensure that only
-    // leading "-" are considered
-    if (char == "-" && lexer.width() === 1) {
-      lexer.emit(lunr.QueryLexer.PRESENCE)
-      return lunr.QueryLexer.lexText
-    }
-
-    if (char.match(lunr.QueryLexer.termSeparator)) {
-      return lunr.QueryLexer.lexTerm
-    }
-  }
-}
-
-lunr.QueryParser = function (str, query) {
-  this.lexer = new lunr.QueryLexer (str)
-  this.query = query
-  this.currentClause = {}
-  this.lexemeIdx = 0
-}
-
-lunr.QueryParser.prototype.parse = function () {
-  this.lexer.run()
-  this.lexemes = this.lexer.lexemes
-
-  var state = lunr.QueryParser.parseClause
-
-  while (state) {
-    state = state(this)
-  }
-
-  return this.query
-}
-
-lunr.QueryParser.prototype.peekLexeme = function () {
-  return this.lexemes[this.lexemeIdx]
-}
-
-lunr.QueryParser.prototype.consumeLexeme = function () {
-  var lexeme = this.peekLexeme()
-  this.lexemeIdx += 1
-  return lexeme
-}
-
-lunr.QueryParser.prototype.nextClause = function () {
-  var completedClause = this.currentClause
-  this.query.clause(completedClause)
-  this.currentClause = {}
-}
-
-lunr.QueryParser.parseClause = function (parser) {
-  var lexeme = parser.peekLexeme()
-
-  if (lexeme == undefined) {
-    return
-  }
-
-  switch (lexeme.type) {
-    case lunr.QueryLexer.PRESENCE:
-      return lunr.QueryParser.parsePresence
-    case lunr.QueryLexer.FIELD:
-      return lunr.QueryParser.parseField
-    case lunr.QueryLexer.TERM:
-      return lunr.QueryParser.parseTerm
-    default:
-      var errorMessage = "expected either a field or a term, found " + lexeme.type
-
-      if (lexeme.str.length >= 1) {
-        errorMessage += " with value '" + lexeme.str + "'"
-      }
-
-      throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-}
-
-lunr.QueryParser.parsePresence = function (parser) {
-  var lexeme = parser.consumeLexeme()
-
-  if (lexeme == undefined) {
-    return
-  }
-
-  switch (lexeme.str) {
-    case "-":
-      parser.currentClause.presence = lunr.Query.presence.PROHIBITED
-      break
-    case "+":
-      parser.currentClause.presence = lunr.Query.presence.REQUIRED
-      break
-    default:
-      var errorMessage = "unrecognised presence operator'" + lexeme.str + "'"
-      throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-
-  var nextLexeme = parser.peekLexeme()
-
-  if (nextLexeme == undefined) {
-    var errorMessage = "expecting term or field, found nothing"
-    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-
-  switch (nextLexeme.type) {
-    case lunr.QueryLexer.FIELD:
-      return lunr.QueryParser.parseField
-    case lunr.QueryLexer.TERM:
-      return lunr.QueryParser.parseTerm
-    default:
-      var errorMessage = "expecting term or field, found '" + nextLexeme.type + "'"
-      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
-  }
-}
-
-lunr.QueryParser.parseField = function (parser) {
-  var lexeme = parser.consumeLexeme()
-
-  if (lexeme == undefined) {
-    return
-  }
-
-  if (parser.query.allFields.indexOf(lexeme.str) == -1) {
-    var possibleFields = parser.query.allFields.map(function (f) { return "'" + f + "'" }).join(', '),
-        errorMessage = "unrecognised field '" + lexeme.str + "', possible fields: " + possibleFields
-
-    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-
-  parser.currentClause.fields = [lexeme.str]
-
-  var nextLexeme = parser.peekLexeme()
-
-  if (nextLexeme == undefined) {
-    var errorMessage = "expecting term, found nothing"
-    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-
-  switch (nextLexeme.type) {
-    case lunr.QueryLexer.TERM:
-      return lunr.QueryParser.parseTerm
-    default:
-      var errorMessage = "expecting term, found '" + nextLexeme.type + "'"
-      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
-  }
-}
-
-lunr.QueryParser.parseTerm = function (parser) {
-  var lexeme = parser.consumeLexeme()
-
-  if (lexeme == undefined) {
-    return
-  }
-
-  parser.currentClause.term = lexeme.str.toLowerCase()
-
-  if (lexeme.str.indexOf("*") != -1) {
-    parser.currentClause.usePipeline = false
-  }
-
-  var nextLexeme = parser.peekLexeme()
-
-  if (nextLexeme == undefined) {
-    parser.nextClause()
-    return
-  }
-
-  switch (nextLexeme.type) {
-    case lunr.QueryLexer.TERM:
-      parser.nextClause()
-      return lunr.QueryParser.parseTerm
-    case lunr.QueryLexer.FIELD:
-      parser.nextClause()
-      return lunr.QueryParser.parseField
-    case lunr.QueryLexer.EDIT_DISTANCE:
-      return lunr.QueryParser.parseEditDistance
-    case lunr.QueryLexer.BOOST:
-      return lunr.QueryParser.parseBoost
-    case lunr.QueryLexer.PRESENCE:
-      parser.nextClause()
-      return lunr.QueryParser.parsePresence
-    default:
-      var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'"
-      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
-  }
-}
-
-lunr.QueryParser.parseEditDistance = function (parser) {
-  var lexeme = parser.consumeLexeme()
-
-  if (lexeme == undefined) {
-    return
-  }
-
-  var editDistance = parseInt(lexeme.str, 10)
-
-  if (isNaN(editDistance)) {
-    var errorMessage = "edit distance must be numeric"
-    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-
-  parser.currentClause.editDistance = editDistance
-
-  var nextLexeme = parser.peekLexeme()
-
-  if (nextLexeme == undefined) {
-    parser.nextClause()
-    return
-  }
-
-  switch (nextLexeme.type) {
-    case lunr.QueryLexer.TERM:
-      parser.nextClause()
-      return lunr.QueryParser.parseTerm
-    case lunr.QueryLexer.FIELD:
-      parser.nextClause()
-      return lunr.QueryParser.parseField
-    case lunr.QueryLexer.EDIT_DISTANCE:
-      return lunr.QueryParser.parseEditDistance
-    case lunr.QueryLexer.BOOST:
-      return lunr.QueryParser.parseBoost
-    case lunr.QueryLexer.PRESENCE:
-      parser.nextClause()
-      return lunr.QueryParser.parsePresence
-    default:
-      var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'"
-      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
-  }
-}
-
-lunr.QueryParser.parseBoost = function (parser) {
-  var lexeme = parser.consumeLexeme()
-
-  if (lexeme == undefined) {
-    return
-  }
-
-  var boost = parseInt(lexeme.str, 10)
-
-  if (isNaN(boost)) {
-    var errorMessage = "boost must be numeric"
-    throw new lunr.QueryParseError (errorMessage, lexeme.start, lexeme.end)
-  }
-
-  parser.currentClause.boost = boost
-
-  var nextLexeme = parser.peekLexeme()
-
-  if (nextLexeme == undefined) {
-    parser.nextClause()
-    return
-  }
-
-  switch (nextLexeme.type) {
-    case lunr.QueryLexer.TERM:
-      parser.nextClause()
-      return lunr.QueryParser.parseTerm
-    case lunr.QueryLexer.FIELD:
-      parser.nextClause()
-      return lunr.QueryParser.parseField
-    case lunr.QueryLexer.EDIT_DISTANCE:
-      return lunr.QueryParser.parseEditDistance
-    case lunr.QueryLexer.BOOST:
-      return lunr.QueryParser.parseBoost
-    case lunr.QueryLexer.PRESENCE:
-      parser.nextClause()
-      return lunr.QueryParser.parsePresence
-    default:
-      var errorMessage = "Unexpected lexeme type '" + nextLexeme.type + "'"
-      throw new lunr.QueryParseError (errorMessage, nextLexeme.start, nextLexeme.end)
-  }
-}
-
-  /**
-   * export the module via AMD, CommonJS or as a browser global
-   * Export code from https://github.com/umdjs/umd/blob/master/returnExports.js
-   */
-  ;(function (root, factory) {
-    if (true) {
-      // AMD. Register as an anonymous module.
-      !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
-		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
-		(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :
-		__WEBPACK_AMD_DEFINE_FACTORY__),
-		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))
-    } else {}
-  }(this, function () {
-    /**
-     * Just return a value to define the module export.
-     * This example returns an object, but the module
-     * can return a function as the exported value.
-     */
-    return lunr
-  }))
-})();
-
-
-/***/ }),
-
-/***/ 79917:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "a": () => (/* binding */ getStylesFromArray),
-  "b": () => (/* binding */ insertNode),
-  "c": () => (/* binding */ common$1),
-  "d": () => (/* binding */ interpolateToCurve),
-  "e": () => (/* binding */ evaluate),
-  "f": () => (/* binding */ insertEdgeLabel),
-  "g": () => (/* binding */ getConfig$1),
-  "h": () => (/* binding */ db),
-  "i": () => (/* binding */ insertMarkers$3),
-  "j": () => (/* binding */ commonDb$1),
-  "k": () => (/* binding */ parseDirective$c),
-  "l": () => (/* binding */ log$1),
-  "m": () => (/* binding */ clear$g),
-  "n": () => (/* binding */ sanitizeText$5),
-  "o": () => (/* binding */ mermaid),
-  "p": () => (/* binding */ parser$8),
-  "s": () => (/* binding */ setupGraphViewbox$1)
-});
-
-;// CONCATENATED MODULE: ./node_modules/ts-dedent/esm/index.js
-function dedent(templ) {
-    var values = [];
-    for (var _i = 1; _i < arguments.length; _i++) {
-        values[_i - 1] = arguments[_i];
-    }
-    var strings = Array.from(typeof templ === 'string' ? [templ] : templ);
-    strings[strings.length - 1] = strings[strings.length - 1].replace(/\r?\n([\t ]*)$/, '');
-    var indentLengths = strings.reduce(function (arr, str) {
-        var matches = str.match(/\n([\t ]+|(?!\s).)/g);
-        if (matches) {
-            return arr.concat(matches.map(function (match) { var _a, _b; return (_b = (_a = match.match(/[\t ]/g)) === null || _a === void 0 ? void 0 : _a.length) !== null && _b !== void 0 ? _b : 0; }));
-        }
-        return arr;
-    }, []);
-    if (indentLengths.length) {
-        var pattern_1 = new RegExp("\n[\t ]{" + Math.min.apply(Math, indentLengths) + "}", 'g');
-        strings = strings.map(function (str) { return str.replace(pattern_1, '\n'); });
-    }
-    strings[0] = strings[0].replace(/^\r?\n/, '');
-    var string = strings[0];
-    values.forEach(function (value, i) {
-        var endentations = string.match(/(?:^|\n)( *)$/);
-        var endentation = endentations ? endentations[1] : '';
-        var indentedValue = value;
-        if (typeof value === 'string' && value.includes('\n')) {
-            indentedValue = String(value)
-                .split('\n')
-                .map(function (str, i) {
-                return i === 0 ? str : "" + endentation + str;
-            })
-                .join('\n');
-        }
-        string += indentedValue + strings[i + 1];
-    });
-    return string;
-}
-/* harmony default export */ const esm = (dedent);
-//# sourceMappingURL=index.js.map
-// EXTERNAL MODULE: ./node_modules/dayjs/dayjs.min.js
-var dayjs_min = __webpack_require__(27484);
-var dayjs_min_default = /*#__PURE__*/__webpack_require__.n(dayjs_min);
-// EXTERNAL MODULE: ./node_modules/@braintree/sanitize-url/dist/index.js
-var dist = __webpack_require__(17967);
-// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 192 modules
-var src = __webpack_require__(59373);
-// EXTERNAL MODULE: ./node_modules/dompurify/dist/purify.es.js
-var purify_es = __webpack_require__(20683);
-// EXTERNAL MODULE: ./node_modules/khroma/dist/color/index.js + 4 modules
-var dist_color = __webpack_require__(71610);
-// EXTERNAL MODULE: ./node_modules/khroma/dist/utils/index.js + 3 modules
-var utils = __webpack_require__(61691);
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/change.js
-/* IMPORT */
-
-
-/* MAIN */
-const change = (color, channels) => {
-    const ch = dist_color/* default.parse */.Z.parse(color);
-    for (const c in channels) {
-        ch[c] = utils/* default.channel.clamp */.Z.channel.clamp[c](channels[c]);
-    }
-    return dist_color/* default.stringify */.Z.stringify(ch);
-};
-/* EXPORT */
-/* harmony default export */ const methods_change = (change);
-
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/adjust.js
-/* IMPORT */
-
-
-/* MAIN */
-const adjust = (color, channels) => {
-    const ch = dist_color/* default.parse */.Z.parse(color);
-    const changes = {};
-    for (const c in channels) {
-        if (!channels[c])
-            continue;
-        changes[c] = ch[c] + channels[c];
-    }
-    return methods_change(color, changes);
-};
-/* EXPORT */
-/* harmony default export */ const methods_adjust = (adjust);
-
-// EXTERNAL MODULE: ./node_modules/khroma/dist/channels/reusable.js + 2 modules
-var reusable = __webpack_require__(21883);
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/rgba.js
-/* IMPORT */
-
-
-
-
-/* MAIN */
-const rgba = (r, g, b = 0, a = 1) => {
-    if (typeof r !== 'number')
-        return methods_change(r, { a: g });
-    const channels = reusable/* default.set */.Z.set({
-        r: utils/* default.channel.clamp.r */.Z.channel.clamp.r(r),
-        g: utils/* default.channel.clamp.g */.Z.channel.clamp.g(g),
-        b: utils/* default.channel.clamp.b */.Z.channel.clamp.b(b),
-        a: utils/* default.channel.clamp.a */.Z.channel.clamp.a(a)
-    });
-    return dist_color/* default.stringify */.Z.stringify(channels);
-};
-/* EXPORT */
-/* harmony default export */ const methods_rgba = (rgba);
-
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/mix.js
-/* IMPORT */
-
-
-/* MAIN */
-//SOURCE: https://github.com/sass/dart-sass/blob/7457d2e9e7e623d9844ffd037a070cf32d39c348/lib/src/functions/color.dart#L718-L756
-const mix = (color1, color2, weight = 50) => {
-    const { r: r1, g: g1, b: b1, a: a1 } = dist_color/* default.parse */.Z.parse(color1);
-    const { r: r2, g: g2, b: b2, a: a2 } = dist_color/* default.parse */.Z.parse(color2);
-    const weightScale = weight / 100;
-    const weightNormalized = (weightScale * 2) - 1;
-    const alphaDelta = a1 - a2;
-    const weight1combined = ((weightNormalized * alphaDelta) === -1) ? weightNormalized : (weightNormalized + alphaDelta) / (1 + weightNormalized * alphaDelta);
-    const weight1 = (weight1combined + 1) / 2;
-    const weight2 = 1 - weight1;
-    const r = (r1 * weight1) + (r2 * weight2);
-    const g = (g1 * weight1) + (g2 * weight2);
-    const b = (b1 * weight1) + (b2 * weight2);
-    const a = (a1 * weightScale) + (a2 * (1 - weightScale));
-    return methods_rgba(r, g, b, a);
-};
-/* EXPORT */
-/* harmony default export */ const methods_mix = (mix);
-
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/methods/invert.js
-/* IMPORT */
-
-
-/* MAIN */
-const invert = (color, weight = 100) => {
-    const inverse = dist_color/* default.parse */.Z.parse(color);
-    inverse.r = 255 - inverse.r;
-    inverse.g = 255 - inverse.g;
-    inverse.b = 255 - inverse.b;
-    return methods_mix(inverse, color, weight);
-};
-/* EXPORT */
-/* harmony default export */ const methods_invert = (invert);
-
-// EXTERNAL MODULE: ./node_modules/khroma/dist/methods/darken.js
-var darken = __webpack_require__(7201);
-// EXTERNAL MODULE: ./node_modules/khroma/dist/methods/lighten.js
-var lighten = __webpack_require__(12281);
-// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js
-var memoize = __webpack_require__(42454);
-// EXTERNAL MODULE: ./node_modules/stylis/src/Serializer.js
-var Serializer = __webpack_require__(20211);
-// EXTERNAL MODULE: ./node_modules/stylis/src/Parser.js
-var Parser = __webpack_require__(92190);
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + 70 modules
-var dagre = __webpack_require__(70277);
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js
-var graphlib = __webpack_require__(45625);
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/json.js + 1 modules
-var json = __webpack_require__(39354);
-;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/stringify.js
-
-/**
- * Convert array of 16 byte values to UUID string format of the form:
- * XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
- */
-
-const byteToHex = [];
-
-for (let i = 0; i < 256; ++i) {
-  byteToHex.push((i + 0x100).toString(16).slice(1));
-}
-
-function unsafeStringify(arr, offset = 0) {
-  // Note: Be careful editing this code!  It's been tuned for performance
-  // and works in ways you may not expect. See https://github.com/uuidjs/uuid/pull/434
-  return (byteToHex[arr[offset + 0]] + byteToHex[arr[offset + 1]] + byteToHex[arr[offset + 2]] + byteToHex[arr[offset + 3]] + '-' + byteToHex[arr[offset + 4]] + byteToHex[arr[offset + 5]] + '-' + byteToHex[arr[offset + 6]] + byteToHex[arr[offset + 7]] + '-' + byteToHex[arr[offset + 8]] + byteToHex[arr[offset + 9]] + '-' + byteToHex[arr[offset + 10]] + byteToHex[arr[offset + 11]] + byteToHex[arr[offset + 12]] + byteToHex[arr[offset + 13]] + byteToHex[arr[offset + 14]] + byteToHex[arr[offset + 15]]).toLowerCase();
-}
-
-function stringify(arr, offset = 0) {
-  const uuid = unsafeStringify(arr, offset); // Consistency check for valid UUID.  If this throws, it's likely due to one
-  // of the following:
-  // - One or more input array values don't map to a hex octet (leading to
-  // "undefined" in the uuid)
-  // - Invalid input values for the RFC `version` or `variant` fields
-
-  if (!validate(uuid)) {
-    throw TypeError('Stringified UUID is invalid');
-  }
-
-  return uuid;
-}
-
-/* harmony default export */ const esm_node_stringify = ((/* unused pure expression or super */ null && (stringify)));
-;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/regex.js
-/* harmony default export */ const regex = (/^(?:[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}|00000000-0000-0000-0000-000000000000)$/i);
-;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/validate.js
-
-
-function validate_validate(uuid) {
-  return typeof uuid === 'string' && regex.test(uuid);
-}
-
-/* harmony default export */ const esm_node_validate = (validate_validate);
-;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/parse.js
-
-
-function parse(uuid) {
-  if (!esm_node_validate(uuid)) {
-    throw TypeError('Invalid UUID');
-  }
-
-  let v;
-  const arr = new Uint8Array(16); // Parse ########-....-....-....-............
-
-  arr[0] = (v = parseInt(uuid.slice(0, 8), 16)) >>> 24;
-  arr[1] = v >>> 16 & 0xff;
-  arr[2] = v >>> 8 & 0xff;
-  arr[3] = v & 0xff; // Parse ........-####-....-....-............
-
-  arr[4] = (v = parseInt(uuid.slice(9, 13), 16)) >>> 8;
-  arr[5] = v & 0xff; // Parse ........-....-####-....-............
-
-  arr[6] = (v = parseInt(uuid.slice(14, 18), 16)) >>> 8;
-  arr[7] = v & 0xff; // Parse ........-....-....-####-............
-
-  arr[8] = (v = parseInt(uuid.slice(19, 23), 16)) >>> 8;
-  arr[9] = v & 0xff; // Parse ........-....-....-....-############
-  // (Use "/" to avoid 32-bit truncation when bit-shifting high-order bytes)
-
-  arr[10] = (v = parseInt(uuid.slice(24, 36), 16)) / 0x10000000000 & 0xff;
-  arr[11] = v / 0x100000000 & 0xff;
-  arr[12] = v >>> 24 & 0xff;
-  arr[13] = v >>> 16 & 0xff;
-  arr[14] = v >>> 8 & 0xff;
-  arr[15] = v & 0xff;
-  return arr;
-}
-
-/* harmony default export */ const esm_node_parse = (parse);
-;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v35.js
-
-
-
-function stringToBytes(str) {
-  str = unescape(encodeURIComponent(str)); // UTF8 escape
-
-  const bytes = [];
-
-  for (let i = 0; i < str.length; ++i) {
-    bytes.push(str.charCodeAt(i));
-  }
-
-  return bytes;
-}
-
-const DNS = '6ba7b810-9dad-11d1-80b4-00c04fd430c8';
-const URL = '6ba7b811-9dad-11d1-80b4-00c04fd430c8';
-function v35(name, version, hashfunc) {
-  function generateUUID(value, namespace, buf, offset) {
-    var _namespace;
-
-    if (typeof value === 'string') {
-      value = stringToBytes(value);
-    }
-
-    if (typeof namespace === 'string') {
-      namespace = esm_node_parse(namespace);
-    }
-
-    if (((_namespace = namespace) === null || _namespace === void 0 ? void 0 : _namespace.length) !== 16) {
-      throw TypeError('Namespace must be array-like (16 iterable integer values, 0-255)');
-    } // Compute hash of namespace and value, Per 4.3
-    // Future: Use spread syntax when supported on all platforms, e.g. `bytes =
-    // hashfunc([...namespace, ... value])`
-
-
-    let bytes = new Uint8Array(16 + value.length);
-    bytes.set(namespace);
-    bytes.set(value, namespace.length);
-    bytes = hashfunc(bytes);
-    bytes[6] = bytes[6] & 0x0f | version;
-    bytes[8] = bytes[8] & 0x3f | 0x80;
-
-    if (buf) {
-      offset = offset || 0;
-
-      for (let i = 0; i < 16; ++i) {
-        buf[offset + i] = bytes[i];
-      }
-
-      return buf;
-    }
-
-    return unsafeStringify(bytes);
-  } // Function#name is not settable on some platforms (#270)
-
-
-  try {
-    generateUUID.name = name; // eslint-disable-next-line no-empty
-  } catch (err) {} // For CommonJS default export support
-
-
-  generateUUID.DNS = DNS;
-  generateUUID.URL = URL;
-  return generateUUID;
-}
-// EXTERNAL MODULE: external "crypto"
-var external_crypto_ = __webpack_require__(6113);
-var external_crypto_default = /*#__PURE__*/__webpack_require__.n(external_crypto_);
-;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/sha1.js
-
-
-function sha1(bytes) {
-  if (Array.isArray(bytes)) {
-    bytes = Buffer.from(bytes);
-  } else if (typeof bytes === 'string') {
-    bytes = Buffer.from(bytes, 'utf8');
-  }
-
-  return external_crypto_default().createHash('sha1').update(bytes).digest();
-}
-
-/* harmony default export */ const esm_node_sha1 = (sha1);
-;// CONCATENATED MODULE: ./node_modules/uuid/dist/esm-node/v5.js
-
-
-const v5 = v35('v5', 0x50, esm_node_sha1);
-/* harmony default export */ const esm_node_v5 = (v5);
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/index.js + 16 modules
-var dagre_d3_es_src = __webpack_require__(91518);
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/util.js
-var util = __webpack_require__(96225);
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js
-var add_html_label = __webpack_require__(43349);
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js + 1 modules
-var intersect_polygon = __webpack_require__(23352);
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.js
-var intersect_rect = __webpack_require__(22930);
-// EXTERNAL MODULE: ./node_modules/dayjs/plugin/isoWeek.js
-var isoWeek = __webpack_require__(59542);
-var isoWeek_default = /*#__PURE__*/__webpack_require__.n(isoWeek);
-// EXTERNAL MODULE: ./node_modules/dayjs/plugin/customParseFormat.js
-var customParseFormat = __webpack_require__(10285);
-var customParseFormat_default = /*#__PURE__*/__webpack_require__.n(customParseFormat);
-// EXTERNAL MODULE: ./node_modules/dayjs/plugin/advancedFormat.js
-var advancedFormat = __webpack_require__(28734);
-var advancedFormat_default = /*#__PURE__*/__webpack_require__.n(advancedFormat);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js
-var isEmpty = __webpack_require__(79697);
-;// CONCATENATED MODULE: ./node_modules/mermaid/dist/mermaid-ae477ddf.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-const LEVELS = {
-  trace: 0,
-  debug: 1,
-  info: 2,
-  warn: 3,
-  error: 4,
-  fatal: 5
-};
-const log$1 = {
-  trace: (..._args) => {
-  },
-  debug: (..._args) => {
-  },
-  info: (..._args) => {
-  },
-  warn: (..._args) => {
-  },
-  error: (..._args) => {
-  },
-  fatal: (..._args) => {
-  }
-};
-const setLogLevel$1 = function(level = "fatal") {
-  let numericLevel = LEVELS.fatal;
-  if (typeof level === "string") {
-    level = level.toLowerCase();
-    if (level in LEVELS) {
-      numericLevel = LEVELS[level];
-    }
-  } else if (typeof level === "number") {
-    numericLevel = level;
-  }
-  log$1.trace = () => {
-  };
-  log$1.debug = () => {
-  };
-  log$1.info = () => {
-  };
-  log$1.warn = () => {
-  };
-  log$1.error = () => {
-  };
-  log$1.fatal = () => {
-  };
-  if (numericLevel <= LEVELS.fatal) {
-    log$1.fatal = console.error ? console.error.bind(console, format("FATAL"), "color: orange") : console.log.bind(console, "\x1B[35m", format("FATAL"));
-  }
-  if (numericLevel <= LEVELS.error) {
-    log$1.error = console.error ? console.error.bind(console, format("ERROR"), "color: orange") : console.log.bind(console, "\x1B[31m", format("ERROR"));
-  }
-  if (numericLevel <= LEVELS.warn) {
-    log$1.warn = console.warn ? console.warn.bind(console, format("WARN"), "color: orange") : console.log.bind(console, `\x1B[33m`, format("WARN"));
-  }
-  if (numericLevel <= LEVELS.info) {
-    log$1.info = console.info ? console.info.bind(console, format("INFO"), "color: lightblue") : console.log.bind(console, "\x1B[34m", format("INFO"));
-  }
-  if (numericLevel <= LEVELS.debug) {
-    log$1.debug = console.debug ? console.debug.bind(console, format("DEBUG"), "color: lightgreen") : console.log.bind(console, "\x1B[32m", format("DEBUG"));
-  }
-  if (numericLevel <= LEVELS.trace) {
-    log$1.trace = console.debug ? console.debug.bind(console, format("TRACE"), "color: lightgreen") : console.log.bind(console, "\x1B[32m", format("TRACE"));
-  }
-};
-const format = (level) => {
-  const time = dayjs_min_default()().format("ss.SSS");
-  return `%c${time} : ${level} : `;
-};
-const getRows = (s) => {
-  if (!s) {
-    return [""];
-  }
-  const str2 = breakToPlaceholder(s).replace(/\\n/g, "#br#");
-  return str2.split("#br#");
-};
-const removeScript = (txt) => {
-  return purify_es/* default.sanitize */.Z.sanitize(txt);
-};
-const sanitizeMore = (text, config2) => {
-  var _a;
-  if (((_a = config2.flowchart) == null ? void 0 : _a.htmlLabels) !== false) {
-    const level = config2.securityLevel;
-    if (level === "antiscript" || level === "strict") {
-      text = removeScript(text);
-    } else if (level !== "loose") {
-      text = breakToPlaceholder(text);
-      text = text.replace(/</g, "<").replace(/>/g, ">");
-      text = text.replace(/=/g, "=");
-      text = placeholderToBreak(text);
-    }
-  }
-  return text;
-};
-const sanitizeText$5 = (text, config2) => {
-  if (!text) {
-    return text;
-  }
-  if (config2.dompurifyConfig) {
-    text = purify_es/* default.sanitize */.Z.sanitize(sanitizeMore(text, config2), config2.dompurifyConfig).toString();
-  } else {
-    text = purify_es/* default.sanitize */.Z.sanitize(sanitizeMore(text, config2), {
-      FORBID_TAGS: ["style"]
-    }).toString();
-  }
-  return text;
-};
-const sanitizeTextOrArray = (a, config2) => {
-  if (typeof a === "string") {
-    return sanitizeText$5(a, config2);
-  }
-  return a.flat().map((x) => sanitizeText$5(x, config2));
-};
-const lineBreakRegex = /<br\s*\/?>/gi;
-const hasBreaks = (text) => {
-  return lineBreakRegex.test(text);
-};
-const splitBreaks = (text) => {
-  return text.split(lineBreakRegex);
-};
-const placeholderToBreak = (s) => {
-  return s.replace(/#br#/g, "<br/>");
-};
-const breakToPlaceholder = (s) => {
-  return s.replace(lineBreakRegex, "#br#");
-};
-const getUrl = (useAbsolute) => {
-  let url = "";
-  if (useAbsolute) {
-    url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search;
-    url = url.replaceAll(/\(/g, "\\(");
-    url = url.replaceAll(/\)/g, "\\)");
-  }
-  return url;
-};
-const evaluate = (val) => val === false || ["false", "null", "0"].includes(String(val).trim().toLowerCase()) ? false : true;
-const parseGenericTypes = function(text) {
-  let cleanedText = text;
-  if (text.split("~").length - 1 >= 2) {
-    let newCleanedText = cleanedText;
-    do {
-      cleanedText = newCleanedText;
-      newCleanedText = cleanedText.replace(/~([^\s,:;]+)~/, "<$1>");
-    } while (newCleanedText != cleanedText);
-    return parseGenericTypes(newCleanedText);
-  } else {
-    return cleanedText;
-  }
-};
-const common$1 = {
-  getRows,
-  sanitizeText: sanitizeText$5,
-  sanitizeTextOrArray,
-  hasBreaks,
-  splitBreaks,
-  lineBreakRegex,
-  removeScript,
-  getUrl,
-  evaluate
-};
-const mkBorder = (col, darkMode) => darkMode ? methods_adjust(col, { s: -40, l: 10 }) : methods_adjust(col, { s: -40, l: -10 });
-const oldAttributeBackgroundColorOdd = "#ffffff";
-const oldAttributeBackgroundColorEven = "#f2f2f2";
-let Theme$4 = class Theme {
-  constructor() {
-    this.background = "#f4f4f4";
-    this.primaryColor = "#fff4dd";
-    this.noteBkgColor = "#fff5ad";
-    this.noteTextColor = "#333";
-    this.THEME_COLOR_LIMIT = 12;
-    this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif';
-    this.fontSize = "16px";
-  }
-  updateColors() {
-    this.primaryTextColor = this.primaryTextColor || (this.darkMode ? "#eee" : "#333");
-    this.secondaryColor = this.secondaryColor || methods_adjust(this.primaryColor, { h: -120 });
-    this.tertiaryColor = this.tertiaryColor || methods_adjust(this.primaryColor, { h: 180, l: 5 });
-    this.primaryBorderColor = this.primaryBorderColor || mkBorder(this.primaryColor, this.darkMode);
-    this.secondaryBorderColor = this.secondaryBorderColor || mkBorder(this.secondaryColor, this.darkMode);
-    this.tertiaryBorderColor = this.tertiaryBorderColor || mkBorder(this.tertiaryColor, this.darkMode);
-    this.noteBorderColor = this.noteBorderColor || mkBorder(this.noteBkgColor, this.darkMode);
-    this.noteBkgColor = this.noteBkgColor || "#fff5ad";
-    this.noteTextColor = this.noteTextColor || "#333";
-    this.secondaryTextColor = this.secondaryTextColor || methods_invert(this.secondaryColor);
-    this.tertiaryTextColor = this.tertiaryTextColor || methods_invert(this.tertiaryColor);
-    this.lineColor = this.lineColor || methods_invert(this.background);
-    this.textColor = this.textColor || this.primaryTextColor;
-    this.nodeBkg = this.nodeBkg || this.primaryColor;
-    this.mainBkg = this.mainBkg || this.primaryColor;
-    this.nodeBorder = this.nodeBorder || this.primaryBorderColor;
-    this.clusterBkg = this.clusterBkg || this.tertiaryColor;
-    this.clusterBorder = this.clusterBorder || this.tertiaryBorderColor;
-    this.defaultLinkColor = this.defaultLinkColor || this.lineColor;
-    this.titleColor = this.titleColor || this.tertiaryTextColor;
-    this.edgeLabelBackground = this.edgeLabelBackground || (this.darkMode ? (0,darken/* default */.Z)(this.secondaryColor, 30) : this.secondaryColor);
-    this.nodeTextColor = this.nodeTextColor || this.primaryTextColor;
-    this.actorBorder = this.actorBorder || this.primaryBorderColor;
-    this.actorBkg = this.actorBkg || this.mainBkg;
-    this.actorTextColor = this.actorTextColor || this.primaryTextColor;
-    this.actorLineColor = this.actorLineColor || "grey";
-    this.labelBoxBkgColor = this.labelBoxBkgColor || this.actorBkg;
-    this.signalColor = this.signalColor || this.textColor;
-    this.signalTextColor = this.signalTextColor || this.textColor;
-    this.labelBoxBorderColor = this.labelBoxBorderColor || this.actorBorder;
-    this.labelTextColor = this.labelTextColor || this.actorTextColor;
-    this.loopTextColor = this.loopTextColor || this.actorTextColor;
-    this.activationBorderColor = this.activationBorderColor || (0,darken/* default */.Z)(this.secondaryColor, 10);
-    this.activationBkgColor = this.activationBkgColor || this.secondaryColor;
-    this.sequenceNumberColor = this.sequenceNumberColor || methods_invert(this.lineColor);
-    this.sectionBkgColor = this.sectionBkgColor || this.tertiaryColor;
-    this.altSectionBkgColor = this.altSectionBkgColor || "white";
-    this.sectionBkgColor = this.sectionBkgColor || this.secondaryColor;
-    this.sectionBkgColor2 = this.sectionBkgColor2 || this.primaryColor;
-    this.excludeBkgColor = this.excludeBkgColor || "#eeeeee";
-    this.taskBorderColor = this.taskBorderColor || this.primaryBorderColor;
-    this.taskBkgColor = this.taskBkgColor || this.primaryColor;
-    this.activeTaskBorderColor = this.activeTaskBorderColor || this.primaryColor;
-    this.activeTaskBkgColor = this.activeTaskBkgColor || (0,lighten/* default */.Z)(this.primaryColor, 23);
-    this.gridColor = this.gridColor || "lightgrey";
-    this.doneTaskBkgColor = this.doneTaskBkgColor || "lightgrey";
-    this.doneTaskBorderColor = this.doneTaskBorderColor || "grey";
-    this.critBorderColor = this.critBorderColor || "#ff8888";
-    this.critBkgColor = this.critBkgColor || "red";
-    this.todayLineColor = this.todayLineColor || "red";
-    this.taskTextColor = this.taskTextColor || this.textColor;
-    this.taskTextOutsideColor = this.taskTextOutsideColor || this.textColor;
-    this.taskTextLightColor = this.taskTextLightColor || this.textColor;
-    this.taskTextColor = this.taskTextColor || this.primaryTextColor;
-    this.taskTextDarkColor = this.taskTextDarkColor || this.textColor;
-    this.taskTextClickableColor = this.taskTextClickableColor || "#003163";
-    this.personBorder = this.personBorder || this.primaryBorderColor;
-    this.personBkg = this.personBkg || this.mainBkg;
-    this.transitionColor = this.transitionColor || this.lineColor;
-    this.transitionLabelColor = this.transitionLabelColor || this.textColor;
-    this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
-    this.stateBkg = this.stateBkg || this.mainBkg;
-    this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
-    this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
-    this.altBackground = this.altBackground || this.tertiaryColor;
-    this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
-    this.compositeBorder = this.compositeBorder || this.nodeBorder;
-    this.innerEndBackground = this.nodeBorder;
-    this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
-    this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
-    this.transitionColor = this.transitionColor || this.lineColor;
-    this.specialStateColor = this.lineColor;
-    this.cScale0 = this.cScale0 || this.primaryColor;
-    this.cScale1 = this.cScale1 || this.secondaryColor;
-    this.cScale2 = this.cScale2 || this.tertiaryColor;
-    this.cScale3 = this.cScale3 || methods_adjust(this.primaryColor, { h: 30 });
-    this.cScale4 = this.cScale4 || methods_adjust(this.primaryColor, { h: 60 });
-    this.cScale5 = this.cScale5 || methods_adjust(this.primaryColor, { h: 90 });
-    this.cScale6 = this.cScale6 || methods_adjust(this.primaryColor, { h: 120 });
-    this.cScale7 = this.cScale7 || methods_adjust(this.primaryColor, { h: 150 });
-    this.cScale8 = this.cScale8 || methods_adjust(this.primaryColor, { h: 210, l: 150 });
-    this.cScale9 = this.cScale9 || methods_adjust(this.primaryColor, { h: 270 });
-    this.cScale10 = this.cScale10 || methods_adjust(this.primaryColor, { h: 300 });
-    this.cScale11 = this.cScale11 || methods_adjust(this.primaryColor, { h: 330 });
-    if (this.darkMode) {
-      for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-        this["cScale" + i] = (0,darken/* default */.Z)(this["cScale" + i], 75);
-      }
-    } else {
-      for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-        this["cScale" + i] = (0,darken/* default */.Z)(this["cScale" + i], 25);
-      }
-    }
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["cScaleInv" + i] = this["cScaleInv" + i] || methods_invert(this["cScale" + i]);
-    }
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      if (this.darkMode) {
-        this["cScalePeer" + i] = this["cScalePeer" + i] || (0,lighten/* default */.Z)(this["cScale" + i], 10);
-      } else {
-        this["cScalePeer" + i] = this["cScalePeer" + i] || (0,darken/* default */.Z)(this["cScale" + i], 10);
-      }
-    }
-    this.scaleLabelColor = this.scaleLabelColor || this.labelTextColor;
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["cScaleLabel" + i] = this["cScaleLabel" + i] || this.scaleLabelColor;
-    }
-    const multiplier = this.darkMode ? -4 : -1;
-    for (let i = 0; i < 5; i++) {
-      this["surface" + i] = this["surface" + i] || methods_adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (5 + i * 3) });
-      this["surfacePeer" + i] = this["surfacePeer" + i] || methods_adjust(this.mainBkg, { h: 180, s: -15, l: multiplier * (8 + i * 3) });
-    }
-    this.classText = this.classText || this.textColor;
-    this.fillType0 = this.fillType0 || this.primaryColor;
-    this.fillType1 = this.fillType1 || this.secondaryColor;
-    this.fillType2 = this.fillType2 || methods_adjust(this.primaryColor, { h: 64 });
-    this.fillType3 = this.fillType3 || methods_adjust(this.secondaryColor, { h: 64 });
-    this.fillType4 = this.fillType4 || methods_adjust(this.primaryColor, { h: -64 });
-    this.fillType5 = this.fillType5 || methods_adjust(this.secondaryColor, { h: -64 });
-    this.fillType6 = this.fillType6 || methods_adjust(this.primaryColor, { h: 128 });
-    this.fillType7 = this.fillType7 || methods_adjust(this.secondaryColor, { h: 128 });
-    this.pie1 = this.pie1 || this.primaryColor;
-    this.pie2 = this.pie2 || this.secondaryColor;
-    this.pie3 = this.pie3 || this.tertiaryColor;
-    this.pie4 = this.pie4 || methods_adjust(this.primaryColor, { l: -10 });
-    this.pie5 = this.pie5 || methods_adjust(this.secondaryColor, { l: -10 });
-    this.pie6 = this.pie6 || methods_adjust(this.tertiaryColor, { l: -10 });
-    this.pie7 = this.pie7 || methods_adjust(this.primaryColor, { h: 60, l: -10 });
-    this.pie8 = this.pie8 || methods_adjust(this.primaryColor, { h: -60, l: -10 });
-    this.pie9 = this.pie9 || methods_adjust(this.primaryColor, { h: 120, l: 0 });
-    this.pie10 = this.pie10 || methods_adjust(this.primaryColor, { h: 60, l: -20 });
-    this.pie11 = this.pie11 || methods_adjust(this.primaryColor, { h: -60, l: -20 });
-    this.pie12 = this.pie12 || methods_adjust(this.primaryColor, { h: 120, l: -10 });
-    this.pieTitleTextSize = this.pieTitleTextSize || "25px";
-    this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
-    this.pieSectionTextSize = this.pieSectionTextSize || "17px";
-    this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
-    this.pieLegendTextSize = this.pieLegendTextSize || "17px";
-    this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
-    this.pieStrokeColor = this.pieStrokeColor || "black";
-    this.pieStrokeWidth = this.pieStrokeWidth || "2px";
-    this.pieOpacity = this.pieOpacity || "0.7";
-    this.requirementBackground = this.requirementBackground || this.primaryColor;
-    this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
-    this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor;
-    this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
-    this.relationColor = this.relationColor || this.lineColor;
-    this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? (0,darken/* default */.Z)(this.secondaryColor, 30) : this.secondaryColor);
-    this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
-    this.git0 = this.git0 || this.primaryColor;
-    this.git1 = this.git1 || this.secondaryColor;
-    this.git2 = this.git2 || this.tertiaryColor;
-    this.git3 = this.git3 || methods_adjust(this.primaryColor, { h: -30 });
-    this.git4 = this.git4 || methods_adjust(this.primaryColor, { h: -60 });
-    this.git5 = this.git5 || methods_adjust(this.primaryColor, { h: -90 });
-    this.git6 = this.git6 || methods_adjust(this.primaryColor, { h: 60 });
-    this.git7 = this.git7 || methods_adjust(this.primaryColor, { h: 120 });
-    if (this.darkMode) {
-      this.git0 = (0,lighten/* default */.Z)(this.git0, 25);
-      this.git1 = (0,lighten/* default */.Z)(this.git1, 25);
-      this.git2 = (0,lighten/* default */.Z)(this.git2, 25);
-      this.git3 = (0,lighten/* default */.Z)(this.git3, 25);
-      this.git4 = (0,lighten/* default */.Z)(this.git4, 25);
-      this.git5 = (0,lighten/* default */.Z)(this.git5, 25);
-      this.git6 = (0,lighten/* default */.Z)(this.git6, 25);
-      this.git7 = (0,lighten/* default */.Z)(this.git7, 25);
-    } else {
-      this.git0 = (0,darken/* default */.Z)(this.git0, 25);
-      this.git1 = (0,darken/* default */.Z)(this.git1, 25);
-      this.git2 = (0,darken/* default */.Z)(this.git2, 25);
-      this.git3 = (0,darken/* default */.Z)(this.git3, 25);
-      this.git4 = (0,darken/* default */.Z)(this.git4, 25);
-      this.git5 = (0,darken/* default */.Z)(this.git5, 25);
-      this.git6 = (0,darken/* default */.Z)(this.git6, 25);
-      this.git7 = (0,darken/* default */.Z)(this.git7, 25);
-    }
-    this.gitInv0 = this.gitInv0 || methods_invert(this.git0);
-    this.gitInv1 = this.gitInv1 || methods_invert(this.git1);
-    this.gitInv2 = this.gitInv2 || methods_invert(this.git2);
-    this.gitInv3 = this.gitInv3 || methods_invert(this.git3);
-    this.gitInv4 = this.gitInv4 || methods_invert(this.git4);
-    this.gitInv5 = this.gitInv5 || methods_invert(this.git5);
-    this.gitInv6 = this.gitInv6 || methods_invert(this.git6);
-    this.gitInv7 = this.gitInv7 || methods_invert(this.git7);
-    this.branchLabelColor = this.branchLabelColor || (this.darkMode ? "black" : this.labelTextColor);
-    this.gitBranchLabel0 = this.gitBranchLabel0 || this.branchLabelColor;
-    this.gitBranchLabel1 = this.gitBranchLabel1 || this.branchLabelColor;
-    this.gitBranchLabel2 = this.gitBranchLabel2 || this.branchLabelColor;
-    this.gitBranchLabel3 = this.gitBranchLabel3 || this.branchLabelColor;
-    this.gitBranchLabel4 = this.gitBranchLabel4 || this.branchLabelColor;
-    this.gitBranchLabel5 = this.gitBranchLabel5 || this.branchLabelColor;
-    this.gitBranchLabel6 = this.gitBranchLabel6 || this.branchLabelColor;
-    this.gitBranchLabel7 = this.gitBranchLabel7 || this.branchLabelColor;
-    this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
-    this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
-    this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
-    this.tagLabelFontSize = this.tagLabelFontSize || "10px";
-    this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
-    this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
-    this.commitLabelFontSize = this.commitLabelFontSize || "10px";
-    this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
-    this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
-  }
-  calculate(overrides) {
-    if (typeof overrides !== "object") {
-      this.updateColors();
-      return;
-    }
-    const keys2 = Object.keys(overrides);
-    keys2.forEach((k) => {
-      this[k] = overrides[k];
-    });
-    this.updateColors();
-    keys2.forEach((k) => {
-      this[k] = overrides[k];
-    });
-  }
-};
-const getThemeVariables$4 = (userOverrides) => {
-  const theme2 = new Theme$4();
-  theme2.calculate(userOverrides);
-  return theme2;
-};
-let Theme$3 = class Theme2 {
-  constructor() {
-    this.background = "#333";
-    this.primaryColor = "#1f2020";
-    this.secondaryColor = (0,lighten/* default */.Z)(this.primaryColor, 16);
-    this.tertiaryColor = methods_adjust(this.primaryColor, { h: -160 });
-    this.primaryBorderColor = methods_invert(this.background);
-    this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);
-    this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);
-    this.primaryTextColor = methods_invert(this.primaryColor);
-    this.secondaryTextColor = methods_invert(this.secondaryColor);
-    this.tertiaryTextColor = methods_invert(this.tertiaryColor);
-    this.lineColor = methods_invert(this.background);
-    this.textColor = methods_invert(this.background);
-    this.mainBkg = "#1f2020";
-    this.secondBkg = "calculated";
-    this.mainContrastColor = "lightgrey";
-    this.darkTextColor = (0,lighten/* default */.Z)(methods_invert("#323D47"), 10);
-    this.lineColor = "calculated";
-    this.border1 = "#81B1DB";
-    this.border2 = methods_rgba(255, 255, 255, 0.25);
-    this.arrowheadColor = "calculated";
-    this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif';
-    this.fontSize = "16px";
-    this.labelBackground = "#181818";
-    this.textColor = "#ccc";
-    this.THEME_COLOR_LIMIT = 12;
-    this.nodeBkg = "calculated";
-    this.nodeBorder = "calculated";
-    this.clusterBkg = "calculated";
-    this.clusterBorder = "calculated";
-    this.defaultLinkColor = "calculated";
-    this.titleColor = "#F9FFFE";
-    this.edgeLabelBackground = "calculated";
-    this.actorBorder = "calculated";
-    this.actorBkg = "calculated";
-    this.actorTextColor = "calculated";
-    this.actorLineColor = "calculated";
-    this.signalColor = "calculated";
-    this.signalTextColor = "calculated";
-    this.labelBoxBkgColor = "calculated";
-    this.labelBoxBorderColor = "calculated";
-    this.labelTextColor = "calculated";
-    this.loopTextColor = "calculated";
-    this.noteBorderColor = "calculated";
-    this.noteBkgColor = "#fff5ad";
-    this.noteTextColor = "calculated";
-    this.activationBorderColor = "calculated";
-    this.activationBkgColor = "calculated";
-    this.sequenceNumberColor = "black";
-    this.sectionBkgColor = (0,darken/* default */.Z)("#EAE8D9", 30);
-    this.altSectionBkgColor = "calculated";
-    this.sectionBkgColor2 = "#EAE8D9";
-    this.taskBorderColor = methods_rgba(255, 255, 255, 70);
-    this.taskBkgColor = "calculated";
-    this.taskTextColor = "calculated";
-    this.taskTextLightColor = "calculated";
-    this.taskTextOutsideColor = "calculated";
-    this.taskTextClickableColor = "#003163";
-    this.activeTaskBorderColor = methods_rgba(255, 255, 255, 50);
-    this.activeTaskBkgColor = "#81B1DB";
-    this.gridColor = "calculated";
-    this.doneTaskBkgColor = "calculated";
-    this.doneTaskBorderColor = "grey";
-    this.critBorderColor = "#E83737";
-    this.critBkgColor = "#E83737";
-    this.taskTextDarkColor = "calculated";
-    this.todayLineColor = "#DB5757";
-    this.personBorder = "calculated";
-    this.personBkg = "calculated";
-    this.labelColor = "calculated";
-    this.errorBkgColor = "#a44141";
-    this.errorTextColor = "#ddd";
-  }
-  updateColors() {
-    this.secondBkg = (0,lighten/* default */.Z)(this.mainBkg, 16);
-    this.lineColor = this.mainContrastColor;
-    this.arrowheadColor = this.mainContrastColor;
-    this.nodeBkg = this.mainBkg;
-    this.nodeBorder = this.border1;
-    this.clusterBkg = this.secondBkg;
-    this.clusterBorder = this.border2;
-    this.defaultLinkColor = this.lineColor;
-    this.edgeLabelBackground = (0,lighten/* default */.Z)(this.labelBackground, 25);
-    this.actorBorder = this.border1;
-    this.actorBkg = this.mainBkg;
-    this.actorTextColor = this.mainContrastColor;
-    this.actorLineColor = this.mainContrastColor;
-    this.signalColor = this.mainContrastColor;
-    this.signalTextColor = this.mainContrastColor;
-    this.labelBoxBkgColor = this.actorBkg;
-    this.labelBoxBorderColor = this.actorBorder;
-    this.labelTextColor = this.mainContrastColor;
-    this.loopTextColor = this.mainContrastColor;
-    this.noteBorderColor = this.secondaryBorderColor;
-    this.noteBkgColor = this.secondBkg;
-    this.noteTextColor = this.secondaryTextColor;
-    this.activationBorderColor = this.border1;
-    this.activationBkgColor = this.secondBkg;
-    this.altSectionBkgColor = this.background;
-    this.taskBkgColor = (0,lighten/* default */.Z)(this.mainBkg, 23);
-    this.taskTextColor = this.darkTextColor;
-    this.taskTextLightColor = this.mainContrastColor;
-    this.taskTextOutsideColor = this.taskTextLightColor;
-    this.gridColor = this.mainContrastColor;
-    this.doneTaskBkgColor = this.mainContrastColor;
-    this.taskTextDarkColor = this.darkTextColor;
-    this.transitionColor = this.transitionColor || this.lineColor;
-    this.transitionLabelColor = this.transitionLabelColor || this.textColor;
-    this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
-    this.stateBkg = this.stateBkg || this.mainBkg;
-    this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
-    this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
-    this.altBackground = this.altBackground || "#555";
-    this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
-    this.compositeBorder = this.compositeBorder || this.nodeBorder;
-    this.innerEndBackground = this.primaryBorderColor;
-    this.specialStateColor = "#f4f4f4";
-    this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
-    this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
-    this.fillType0 = this.primaryColor;
-    this.fillType1 = this.secondaryColor;
-    this.fillType2 = methods_adjust(this.primaryColor, { h: 64 });
-    this.fillType3 = methods_adjust(this.secondaryColor, { h: 64 });
-    this.fillType4 = methods_adjust(this.primaryColor, { h: -64 });
-    this.fillType5 = methods_adjust(this.secondaryColor, { h: -64 });
-    this.fillType6 = methods_adjust(this.primaryColor, { h: 128 });
-    this.fillType7 = methods_adjust(this.secondaryColor, { h: 128 });
-    this.cScale1 = this.cScale1 || "#0b0000";
-    this.cScale2 = this.cScale2 || "#4d1037";
-    this.cScale3 = this.cScale3 || "#3f5258";
-    this.cScale4 = this.cScale4 || "#4f2f1b";
-    this.cScale5 = this.cScale5 || "#6e0a0a";
-    this.cScale6 = this.cScale6 || "#3b0048";
-    this.cScale7 = this.cScale7 || "#995a01";
-    this.cScale8 = this.cScale8 || "#154706";
-    this.cScale9 = this.cScale9 || "#161722";
-    this.cScale10 = this.cScale10 || "#00296f";
-    this.cScale11 = this.cScale11 || "#01629c";
-    this.cScale12 = this.cScale12 || "#010029";
-    this.cScale0 = this.cScale0 || this.primaryColor;
-    this.cScale1 = this.cScale1 || this.secondaryColor;
-    this.cScale2 = this.cScale2 || this.tertiaryColor;
-    this.cScale3 = this.cScale3 || methods_adjust(this.primaryColor, { h: 30 });
-    this.cScale4 = this.cScale4 || methods_adjust(this.primaryColor, { h: 60 });
-    this.cScale5 = this.cScale5 || methods_adjust(this.primaryColor, { h: 90 });
-    this.cScale6 = this.cScale6 || methods_adjust(this.primaryColor, { h: 120 });
-    this.cScale7 = this.cScale7 || methods_adjust(this.primaryColor, { h: 150 });
-    this.cScale8 = this.cScale8 || methods_adjust(this.primaryColor, { h: 210 });
-    this.cScale9 = this.cScale9 || methods_adjust(this.primaryColor, { h: 270 });
-    this.cScale10 = this.cScale10 || methods_adjust(this.primaryColor, { h: 300 });
-    this.cScale11 = this.cScale11 || methods_adjust(this.primaryColor, { h: 330 });
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["cScaleInv" + i] = this["cScaleInv" + i] || methods_invert(this["cScale" + i]);
-    }
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["cScalePeer" + i] = this["cScalePeer" + i] || (0,lighten/* default */.Z)(this["cScale" + i], 10);
-    }
-    for (let i = 0; i < 5; i++) {
-      this["surface" + i] = this["surface" + i] || methods_adjust(this.mainBkg, { h: 30, s: -30, l: -(-10 + i * 4) });
-      this["surfacePeer" + i] = this["surfacePeer" + i] || methods_adjust(this.mainBkg, { h: 30, s: -30, l: -(-7 + i * 4) });
-    }
-    this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? "black" : this.labelTextColor);
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["cScaleLabel" + i] = this["cScaleLabel" + i] || this.scaleLabelColor;
-    }
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["pie" + i] = this["cScale" + i];
-    }
-    this.pieTitleTextSize = this.pieTitleTextSize || "25px";
-    this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
-    this.pieSectionTextSize = this.pieSectionTextSize || "17px";
-    this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
-    this.pieLegendTextSize = this.pieLegendTextSize || "17px";
-    this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
-    this.pieStrokeColor = this.pieStrokeColor || "black";
-    this.pieStrokeWidth = this.pieStrokeWidth || "2px";
-    this.pieOpacity = this.pieOpacity || "0.7";
-    this.classText = this.primaryTextColor;
-    this.requirementBackground = this.requirementBackground || this.primaryColor;
-    this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
-    this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor;
-    this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
-    this.relationColor = this.relationColor || this.lineColor;
-    this.relationLabelBackground = this.relationLabelBackground || (this.darkMode ? (0,darken/* default */.Z)(this.secondaryColor, 30) : this.secondaryColor);
-    this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
-    this.git0 = (0,lighten/* default */.Z)(this.secondaryColor, 20);
-    this.git1 = (0,lighten/* default */.Z)(this.pie2 || this.secondaryColor, 20);
-    this.git2 = (0,lighten/* default */.Z)(this.pie3 || this.tertiaryColor, 20);
-    this.git3 = (0,lighten/* default */.Z)(this.pie4 || methods_adjust(this.primaryColor, { h: -30 }), 20);
-    this.git4 = (0,lighten/* default */.Z)(this.pie5 || methods_adjust(this.primaryColor, { h: -60 }), 20);
-    this.git5 = (0,lighten/* default */.Z)(this.pie6 || methods_adjust(this.primaryColor, { h: -90 }), 10);
-    this.git6 = (0,lighten/* default */.Z)(this.pie7 || methods_adjust(this.primaryColor, { h: 60 }), 10);
-    this.git7 = (0,lighten/* default */.Z)(this.pie8 || methods_adjust(this.primaryColor, { h: 120 }), 20);
-    this.gitInv0 = this.gitInv0 || methods_invert(this.git0);
-    this.gitInv1 = this.gitInv1 || methods_invert(this.git1);
-    this.gitInv2 = this.gitInv2 || methods_invert(this.git2);
-    this.gitInv3 = this.gitInv3 || methods_invert(this.git3);
-    this.gitInv4 = this.gitInv4 || methods_invert(this.git4);
-    this.gitInv5 = this.gitInv5 || methods_invert(this.git5);
-    this.gitInv6 = this.gitInv6 || methods_invert(this.git6);
-    this.gitInv7 = this.gitInv7 || methods_invert(this.git7);
-    this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
-    this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
-    this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
-    this.tagLabelFontSize = this.tagLabelFontSize || "10px";
-    this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
-    this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
-    this.commitLabelFontSize = this.commitLabelFontSize || "10px";
-    this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || (0,lighten/* default */.Z)(this.background, 12);
-    this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || (0,lighten/* default */.Z)(this.background, 2);
-  }
-  calculate(overrides) {
-    if (typeof overrides !== "object") {
-      this.updateColors();
-      return;
-    }
-    const keys2 = Object.keys(overrides);
-    keys2.forEach((k) => {
-      this[k] = overrides[k];
-    });
-    this.updateColors();
-    keys2.forEach((k) => {
-      this[k] = overrides[k];
-    });
-  }
-};
-const getThemeVariables$3 = (userOverrides) => {
-  const theme2 = new Theme$3();
-  theme2.calculate(userOverrides);
-  return theme2;
-};
-let Theme$2 = class Theme3 {
-  constructor() {
-    this.background = "#f4f4f4";
-    this.primaryColor = "#ECECFF";
-    this.secondaryColor = methods_adjust(this.primaryColor, { h: 120 });
-    this.secondaryColor = "#ffffde";
-    this.tertiaryColor = methods_adjust(this.primaryColor, { h: -160 });
-    this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);
-    this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);
-    this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);
-    this.primaryTextColor = methods_invert(this.primaryColor);
-    this.secondaryTextColor = methods_invert(this.secondaryColor);
-    this.tertiaryTextColor = methods_invert(this.tertiaryColor);
-    this.lineColor = methods_invert(this.background);
-    this.textColor = methods_invert(this.background);
-    this.background = "white";
-    this.mainBkg = "#ECECFF";
-    this.secondBkg = "#ffffde";
-    this.lineColor = "#333333";
-    this.border1 = "#9370DB";
-    this.border2 = "#aaaa33";
-    this.arrowheadColor = "#333333";
-    this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif';
-    this.fontSize = "16px";
-    this.labelBackground = "#e8e8e8";
-    this.textColor = "#333";
-    this.THEME_COLOR_LIMIT = 12;
-    this.nodeBkg = "calculated";
-    this.nodeBorder = "calculated";
-    this.clusterBkg = "calculated";
-    this.clusterBorder = "calculated";
-    this.defaultLinkColor = "calculated";
-    this.titleColor = "calculated";
-    this.edgeLabelBackground = "calculated";
-    this.actorBorder = "calculated";
-    this.actorBkg = "calculated";
-    this.actorTextColor = "black";
-    this.actorLineColor = "grey";
-    this.signalColor = "calculated";
-    this.signalTextColor = "calculated";
-    this.labelBoxBkgColor = "calculated";
-    this.labelBoxBorderColor = "calculated";
-    this.labelTextColor = "calculated";
-    this.loopTextColor = "calculated";
-    this.noteBorderColor = "calculated";
-    this.noteBkgColor = "#fff5ad";
-    this.noteTextColor = "calculated";
-    this.activationBorderColor = "#666";
-    this.activationBkgColor = "#f4f4f4";
-    this.sequenceNumberColor = "white";
-    this.sectionBkgColor = "calculated";
-    this.altSectionBkgColor = "calculated";
-    this.sectionBkgColor2 = "calculated";
-    this.excludeBkgColor = "#eeeeee";
-    this.taskBorderColor = "calculated";
-    this.taskBkgColor = "calculated";
-    this.taskTextLightColor = "calculated";
-    this.taskTextColor = this.taskTextLightColor;
-    this.taskTextDarkColor = "calculated";
-    this.taskTextOutsideColor = this.taskTextDarkColor;
-    this.taskTextClickableColor = "calculated";
-    this.activeTaskBorderColor = "calculated";
-    this.activeTaskBkgColor = "calculated";
-    this.gridColor = "calculated";
-    this.doneTaskBkgColor = "calculated";
-    this.doneTaskBorderColor = "calculated";
-    this.critBorderColor = "calculated";
-    this.critBkgColor = "calculated";
-    this.todayLineColor = "calculated";
-    this.sectionBkgColor = methods_rgba(102, 102, 255, 0.49);
-    this.altSectionBkgColor = "white";
-    this.sectionBkgColor2 = "#fff400";
-    this.taskBorderColor = "#534fbc";
-    this.taskBkgColor = "#8a90dd";
-    this.taskTextLightColor = "white";
-    this.taskTextColor = "calculated";
-    this.taskTextDarkColor = "black";
-    this.taskTextOutsideColor = "calculated";
-    this.taskTextClickableColor = "#003163";
-    this.activeTaskBorderColor = "#534fbc";
-    this.activeTaskBkgColor = "#bfc7ff";
-    this.gridColor = "lightgrey";
-    this.doneTaskBkgColor = "lightgrey";
-    this.doneTaskBorderColor = "grey";
-    this.critBorderColor = "#ff8888";
-    this.critBkgColor = "red";
-    this.todayLineColor = "red";
-    this.personBorder = "calculated";
-    this.personBkg = "calculated";
-    this.labelColor = "black";
-    this.errorBkgColor = "#552222";
-    this.errorTextColor = "#552222";
-    this.updateColors();
-  }
-  updateColors() {
-    this.cScale0 = this.cScale0 || this.primaryColor;
-    this.cScale1 = this.cScale1 || this.secondaryColor;
-    this.cScale2 = this.cScale2 || this.tertiaryColor;
-    this.cScale3 = this.cScale3 || methods_adjust(this.primaryColor, { h: 30 });
-    this.cScale4 = this.cScale4 || methods_adjust(this.primaryColor, { h: 60 });
-    this.cScale5 = this.cScale5 || methods_adjust(this.primaryColor, { h: 90 });
-    this.cScale6 = this.cScale6 || methods_adjust(this.primaryColor, { h: 120 });
-    this.cScale7 = this.cScale7 || methods_adjust(this.primaryColor, { h: 150 });
-    this.cScale8 = this.cScale8 || methods_adjust(this.primaryColor, { h: 210 });
-    this.cScale9 = this.cScale9 || methods_adjust(this.primaryColor, { h: 270 });
-    this.cScale10 = this.cScale10 || methods_adjust(this.primaryColor, { h: 300 });
-    this.cScale11 = this.cScale11 || methods_adjust(this.primaryColor, { h: 330 });
-    this["cScalePeer" + 1] = this["cScalePeer" + 1] || (0,darken/* default */.Z)(this.secondaryColor, 45);
-    this["cScalePeer" + 2] = this["cScalePeer" + 2] || (0,darken/* default */.Z)(this.tertiaryColor, 40);
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["cScale" + i] = (0,darken/* default */.Z)(this["cScale" + i], 10);
-      this["cScalePeer" + i] = this["cScalePeer" + i] || (0,darken/* default */.Z)(this["cScale" + i], 25);
-    }
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["cScaleInv" + i] = this["cScaleInv" + i] || methods_adjust(this["cScale" + i], { h: 180 });
-    }
-    for (let i = 0; i < 5; i++) {
-      this["surface" + i] = this["surface" + i] || methods_adjust(this.mainBkg, { h: 30, l: -(5 + i * 5) });
-      this["surfacePeer" + i] = this["surfacePeer" + i] || methods_adjust(this.mainBkg, { h: 30, l: -(7 + i * 5) });
-    }
-    this.scaleLabelColor = this.scaleLabelColor !== "calculated" && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor;
-    if (this.labelTextColor !== "calculated") {
-      this.cScaleLabel0 = this.cScaleLabel0 || methods_invert(this.labelTextColor);
-      this.cScaleLabel3 = this.cScaleLabel3 || methods_invert(this.labelTextColor);
-      for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-        this["cScaleLabel" + i] = this["cScaleLabel" + i] || this.labelTextColor;
-      }
-    }
-    this.nodeBkg = this.mainBkg;
-    this.nodeBorder = this.border1;
-    this.clusterBkg = this.secondBkg;
-    this.clusterBorder = this.border2;
-    this.defaultLinkColor = this.lineColor;
-    this.titleColor = this.textColor;
-    this.edgeLabelBackground = this.labelBackground;
-    this.actorBorder = (0,lighten/* default */.Z)(this.border1, 23);
-    this.actorBkg = this.mainBkg;
-    this.labelBoxBkgColor = this.actorBkg;
-    this.signalColor = this.textColor;
-    this.signalTextColor = this.textColor;
-    this.labelBoxBorderColor = this.actorBorder;
-    this.labelTextColor = this.actorTextColor;
-    this.loopTextColor = this.actorTextColor;
-    this.noteBorderColor = this.border2;
-    this.noteTextColor = this.actorTextColor;
-    this.taskTextColor = this.taskTextLightColor;
-    this.taskTextOutsideColor = this.taskTextDarkColor;
-    this.transitionColor = this.transitionColor || this.lineColor;
-    this.transitionLabelColor = this.transitionLabelColor || this.textColor;
-    this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
-    this.stateBkg = this.stateBkg || this.mainBkg;
-    this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
-    this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
-    this.altBackground = this.altBackground || "#f0f0f0";
-    this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
-    this.compositeBorder = this.compositeBorder || this.nodeBorder;
-    this.innerEndBackground = this.nodeBorder;
-    this.specialStateColor = this.lineColor;
-    this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
-    this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
-    this.transitionColor = this.transitionColor || this.lineColor;
-    this.classText = this.primaryTextColor;
-    this.fillType0 = this.primaryColor;
-    this.fillType1 = this.secondaryColor;
-    this.fillType2 = methods_adjust(this.primaryColor, { h: 64 });
-    this.fillType3 = methods_adjust(this.secondaryColor, { h: 64 });
-    this.fillType4 = methods_adjust(this.primaryColor, { h: -64 });
-    this.fillType5 = methods_adjust(this.secondaryColor, { h: -64 });
-    this.fillType6 = methods_adjust(this.primaryColor, { h: 128 });
-    this.fillType7 = methods_adjust(this.secondaryColor, { h: 128 });
-    this.pie1 = this.pie1 || this.primaryColor;
-    this.pie2 = this.pie2 || this.secondaryColor;
-    this.pie3 = this.pie3 || methods_adjust(this.tertiaryColor, { l: -40 });
-    this.pie4 = this.pie4 || methods_adjust(this.primaryColor, { l: -10 });
-    this.pie5 = this.pie5 || methods_adjust(this.secondaryColor, { l: -30 });
-    this.pie6 = this.pie6 || methods_adjust(this.tertiaryColor, { l: -20 });
-    this.pie7 = this.pie7 || methods_adjust(this.primaryColor, { h: 60, l: -20 });
-    this.pie8 = this.pie8 || methods_adjust(this.primaryColor, { h: -60, l: -40 });
-    this.pie9 = this.pie9 || methods_adjust(this.primaryColor, { h: 120, l: -40 });
-    this.pie10 = this.pie10 || methods_adjust(this.primaryColor, { h: 60, l: -40 });
-    this.pie11 = this.pie11 || methods_adjust(this.primaryColor, { h: -90, l: -40 });
-    this.pie12 = this.pie12 || methods_adjust(this.primaryColor, { h: 120, l: -30 });
-    this.pieTitleTextSize = this.pieTitleTextSize || "25px";
-    this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
-    this.pieSectionTextSize = this.pieSectionTextSize || "17px";
-    this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
-    this.pieLegendTextSize = this.pieLegendTextSize || "17px";
-    this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
-    this.pieStrokeColor = this.pieStrokeColor || "black";
-    this.pieStrokeWidth = this.pieStrokeWidth || "2px";
-    this.pieOpacity = this.pieOpacity || "0.7";
-    this.requirementBackground = this.requirementBackground || this.primaryColor;
-    this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
-    this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor;
-    this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
-    this.relationColor = this.relationColor || this.lineColor;
-    this.relationLabelBackground = this.relationLabelBackground || this.labelBackground;
-    this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
-    this.git0 = this.git0 || this.primaryColor;
-    this.git1 = this.git1 || this.secondaryColor;
-    this.git2 = this.git2 || this.tertiaryColor;
-    this.git3 = this.git3 || methods_adjust(this.primaryColor, { h: -30 });
-    this.git4 = this.git4 || methods_adjust(this.primaryColor, { h: -60 });
-    this.git5 = this.git5 || methods_adjust(this.primaryColor, { h: -90 });
-    this.git6 = this.git6 || methods_adjust(this.primaryColor, { h: 60 });
-    this.git7 = this.git7 || methods_adjust(this.primaryColor, { h: 120 });
-    if (this.darkMode) {
-      this.git0 = (0,lighten/* default */.Z)(this.git0, 25);
-      this.git1 = (0,lighten/* default */.Z)(this.git1, 25);
-      this.git2 = (0,lighten/* default */.Z)(this.git2, 25);
-      this.git3 = (0,lighten/* default */.Z)(this.git3, 25);
-      this.git4 = (0,lighten/* default */.Z)(this.git4, 25);
-      this.git5 = (0,lighten/* default */.Z)(this.git5, 25);
-      this.git6 = (0,lighten/* default */.Z)(this.git6, 25);
-      this.git7 = (0,lighten/* default */.Z)(this.git7, 25);
-    } else {
-      this.git0 = (0,darken/* default */.Z)(this.git0, 25);
-      this.git1 = (0,darken/* default */.Z)(this.git1, 25);
-      this.git2 = (0,darken/* default */.Z)(this.git2, 25);
-      this.git3 = (0,darken/* default */.Z)(this.git3, 25);
-      this.git4 = (0,darken/* default */.Z)(this.git4, 25);
-      this.git5 = (0,darken/* default */.Z)(this.git5, 25);
-      this.git6 = (0,darken/* default */.Z)(this.git6, 25);
-      this.git7 = (0,darken/* default */.Z)(this.git7, 25);
-    }
-    this.gitInv0 = this.gitInv0 || (0,darken/* default */.Z)(methods_invert(this.git0), 25);
-    this.gitInv1 = this.gitInv1 || methods_invert(this.git1);
-    this.gitInv2 = this.gitInv2 || methods_invert(this.git2);
-    this.gitInv3 = this.gitInv3 || methods_invert(this.git3);
-    this.gitInv4 = this.gitInv4 || methods_invert(this.git4);
-    this.gitInv5 = this.gitInv5 || methods_invert(this.git5);
-    this.gitInv6 = this.gitInv6 || methods_invert(this.git6);
-    this.gitInv7 = this.gitInv7 || methods_invert(this.git7);
-    this.gitBranchLabel0 = this.gitBranchLabel0 || methods_invert(this.labelTextColor);
-    this.gitBranchLabel1 = this.gitBranchLabel1 || this.labelTextColor;
-    this.gitBranchLabel2 = this.gitBranchLabel2 || this.labelTextColor;
-    this.gitBranchLabel3 = this.gitBranchLabel3 || methods_invert(this.labelTextColor);
-    this.gitBranchLabel4 = this.gitBranchLabel4 || this.labelTextColor;
-    this.gitBranchLabel5 = this.gitBranchLabel5 || this.labelTextColor;
-    this.gitBranchLabel6 = this.gitBranchLabel6 || this.labelTextColor;
-    this.gitBranchLabel7 = this.gitBranchLabel7 || this.labelTextColor;
-    this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
-    this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
-    this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
-    this.tagLabelFontSize = this.tagLabelFontSize || "10px";
-    this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
-    this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
-    this.commitLabelFontSize = this.commitLabelFontSize || "10px";
-    this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
-    this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
-  }
-  calculate(overrides) {
-    if (typeof overrides !== "object") {
-      this.updateColors();
-      return;
-    }
-    const keys2 = Object.keys(overrides);
-    keys2.forEach((k) => {
-      this[k] = overrides[k];
-    });
-    this.updateColors();
-    keys2.forEach((k) => {
-      this[k] = overrides[k];
-    });
-  }
-};
-const getThemeVariables$2 = (userOverrides) => {
-  const theme2 = new Theme$2();
-  theme2.calculate(userOverrides);
-  return theme2;
-};
-let Theme$1 = class Theme4 {
-  constructor() {
-    this.background = "#f4f4f4";
-    this.primaryColor = "#cde498";
-    this.secondaryColor = "#cdffb2";
-    this.background = "white";
-    this.mainBkg = "#cde498";
-    this.secondBkg = "#cdffb2";
-    this.lineColor = "green";
-    this.border1 = "#13540c";
-    this.border2 = "#6eaa49";
-    this.arrowheadColor = "green";
-    this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif';
-    this.fontSize = "16px";
-    this.tertiaryColor = (0,lighten/* default */.Z)("#cde498", 10);
-    this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);
-    this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);
-    this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);
-    this.primaryTextColor = methods_invert(this.primaryColor);
-    this.secondaryTextColor = methods_invert(this.secondaryColor);
-    this.tertiaryTextColor = methods_invert(this.primaryColor);
-    this.lineColor = methods_invert(this.background);
-    this.textColor = methods_invert(this.background);
-    this.THEME_COLOR_LIMIT = 12;
-    this.nodeBkg = "calculated";
-    this.nodeBorder = "calculated";
-    this.clusterBkg = "calculated";
-    this.clusterBorder = "calculated";
-    this.defaultLinkColor = "calculated";
-    this.titleColor = "#333";
-    this.edgeLabelBackground = "#e8e8e8";
-    this.actorBorder = "calculated";
-    this.actorBkg = "calculated";
-    this.actorTextColor = "black";
-    this.actorLineColor = "grey";
-    this.signalColor = "#333";
-    this.signalTextColor = "#333";
-    this.labelBoxBkgColor = "calculated";
-    this.labelBoxBorderColor = "#326932";
-    this.labelTextColor = "calculated";
-    this.loopTextColor = "calculated";
-    this.noteBorderColor = "calculated";
-    this.noteBkgColor = "#fff5ad";
-    this.noteTextColor = "calculated";
-    this.activationBorderColor = "#666";
-    this.activationBkgColor = "#f4f4f4";
-    this.sequenceNumberColor = "white";
-    this.sectionBkgColor = "#6eaa49";
-    this.altSectionBkgColor = "white";
-    this.sectionBkgColor2 = "#6eaa49";
-    this.excludeBkgColor = "#eeeeee";
-    this.taskBorderColor = "calculated";
-    this.taskBkgColor = "#487e3a";
-    this.taskTextLightColor = "white";
-    this.taskTextColor = "calculated";
-    this.taskTextDarkColor = "black";
-    this.taskTextOutsideColor = "calculated";
-    this.taskTextClickableColor = "#003163";
-    this.activeTaskBorderColor = "calculated";
-    this.activeTaskBkgColor = "calculated";
-    this.gridColor = "lightgrey";
-    this.doneTaskBkgColor = "lightgrey";
-    this.doneTaskBorderColor = "grey";
-    this.critBorderColor = "#ff8888";
-    this.critBkgColor = "red";
-    this.todayLineColor = "red";
-    this.personBorder = "calculated";
-    this.personBkg = "calculated";
-    this.labelColor = "black";
-    this.errorBkgColor = "#552222";
-    this.errorTextColor = "#552222";
-  }
-  updateColors() {
-    this.cScale0 = this.cScale0 || this.primaryColor;
-    this.cScale1 = this.cScale1 || this.secondaryColor;
-    this.cScale2 = this.cScale2 || this.tertiaryColor;
-    this.cScale3 = this.cScale3 || methods_adjust(this.primaryColor, { h: 30 });
-    this.cScale4 = this.cScale4 || methods_adjust(this.primaryColor, { h: 60 });
-    this.cScale5 = this.cScale5 || methods_adjust(this.primaryColor, { h: 90 });
-    this.cScale6 = this.cScale6 || methods_adjust(this.primaryColor, { h: 120 });
-    this.cScale7 = this.cScale7 || methods_adjust(this.primaryColor, { h: 150 });
-    this.cScale8 = this.cScale8 || methods_adjust(this.primaryColor, { h: 210 });
-    this.cScale9 = this.cScale9 || methods_adjust(this.primaryColor, { h: 270 });
-    this.cScale10 = this.cScale10 || methods_adjust(this.primaryColor, { h: 300 });
-    this.cScale11 = this.cScale11 || methods_adjust(this.primaryColor, { h: 330 });
-    this["cScalePeer" + 1] = this["cScalePeer" + 1] || (0,darken/* default */.Z)(this.secondaryColor, 45);
-    this["cScalePeer" + 2] = this["cScalePeer" + 2] || (0,darken/* default */.Z)(this.tertiaryColor, 40);
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["cScale" + i] = (0,darken/* default */.Z)(this["cScale" + i], 10);
-      this["cScalePeer" + i] = this["cScalePeer" + i] || (0,darken/* default */.Z)(this["cScale" + i], 25);
-    }
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["cScaleInv" + i] = this["cScaleInv" + i] || methods_adjust(this["cScale" + i], { h: 180 });
-    }
-    this.scaleLabelColor = this.scaleLabelColor !== "calculated" && this.scaleLabelColor ? this.scaleLabelColor : this.labelTextColor;
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["cScaleLabel" + i] = this["cScaleLabel" + i] || this.scaleLabelColor;
-    }
-    for (let i = 0; i < 5; i++) {
-      this["surface" + i] = this["surface" + i] || methods_adjust(this.mainBkg, { h: 30, s: -30, l: -(5 + i * 5) });
-      this["surfacePeer" + i] = this["surfacePeer" + i] || methods_adjust(this.mainBkg, { h: 30, s: -30, l: -(8 + i * 5) });
-    }
-    this.nodeBkg = this.mainBkg;
-    this.nodeBorder = this.border1;
-    this.clusterBkg = this.secondBkg;
-    this.clusterBorder = this.border2;
-    this.defaultLinkColor = this.lineColor;
-    this.actorBorder = (0,darken/* default */.Z)(this.mainBkg, 20);
-    this.actorBkg = this.mainBkg;
-    this.labelBoxBkgColor = this.actorBkg;
-    this.labelTextColor = this.actorTextColor;
-    this.loopTextColor = this.actorTextColor;
-    this.noteBorderColor = this.border2;
-    this.noteTextColor = this.actorTextColor;
-    this.taskBorderColor = this.border1;
-    this.taskTextColor = this.taskTextLightColor;
-    this.taskTextOutsideColor = this.taskTextDarkColor;
-    this.activeTaskBorderColor = this.taskBorderColor;
-    this.activeTaskBkgColor = this.mainBkg;
-    this.transitionColor = this.transitionColor || this.lineColor;
-    this.transitionLabelColor = this.transitionLabelColor || this.textColor;
-    this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
-    this.stateBkg = this.stateBkg || this.mainBkg;
-    this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
-    this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
-    this.altBackground = this.altBackground || "#f0f0f0";
-    this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
-    this.compositeBorder = this.compositeBorder || this.nodeBorder;
-    this.innerEndBackground = this.primaryBorderColor;
-    this.specialStateColor = this.lineColor;
-    this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
-    this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
-    this.transitionColor = this.transitionColor || this.lineColor;
-    this.classText = this.primaryTextColor;
-    this.fillType0 = this.primaryColor;
-    this.fillType1 = this.secondaryColor;
-    this.fillType2 = methods_adjust(this.primaryColor, { h: 64 });
-    this.fillType3 = methods_adjust(this.secondaryColor, { h: 64 });
-    this.fillType4 = methods_adjust(this.primaryColor, { h: -64 });
-    this.fillType5 = methods_adjust(this.secondaryColor, { h: -64 });
-    this.fillType6 = methods_adjust(this.primaryColor, { h: 128 });
-    this.fillType7 = methods_adjust(this.secondaryColor, { h: 128 });
-    this.pie1 = this.pie1 || this.primaryColor;
-    this.pie2 = this.pie2 || this.secondaryColor;
-    this.pie3 = this.pie3 || this.tertiaryColor;
-    this.pie4 = this.pie4 || methods_adjust(this.primaryColor, { l: -30 });
-    this.pie5 = this.pie5 || methods_adjust(this.secondaryColor, { l: -30 });
-    this.pie6 = this.pie6 || methods_adjust(this.tertiaryColor, { h: 40, l: -40 });
-    this.pie7 = this.pie7 || methods_adjust(this.primaryColor, { h: 60, l: -10 });
-    this.pie8 = this.pie8 || methods_adjust(this.primaryColor, { h: -60, l: -10 });
-    this.pie9 = this.pie9 || methods_adjust(this.primaryColor, { h: 120, l: 0 });
-    this.pie10 = this.pie10 || methods_adjust(this.primaryColor, { h: 60, l: -50 });
-    this.pie11 = this.pie11 || methods_adjust(this.primaryColor, { h: -60, l: -50 });
-    this.pie12 = this.pie12 || methods_adjust(this.primaryColor, { h: 120, l: -50 });
-    this.pieTitleTextSize = this.pieTitleTextSize || "25px";
-    this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
-    this.pieSectionTextSize = this.pieSectionTextSize || "17px";
-    this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
-    this.pieLegendTextSize = this.pieLegendTextSize || "17px";
-    this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
-    this.pieStrokeColor = this.pieStrokeColor || "black";
-    this.pieStrokeWidth = this.pieStrokeWidth || "2px";
-    this.pieOpacity = this.pieOpacity || "0.7";
-    this.requirementBackground = this.requirementBackground || this.primaryColor;
-    this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
-    this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor;
-    this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
-    this.relationColor = this.relationColor || this.lineColor;
-    this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;
-    this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
-    this.git0 = this.git0 || this.primaryColor;
-    this.git1 = this.git1 || this.secondaryColor;
-    this.git2 = this.git2 || this.tertiaryColor;
-    this.git3 = this.git3 || methods_adjust(this.primaryColor, { h: -30 });
-    this.git4 = this.git4 || methods_adjust(this.primaryColor, { h: -60 });
-    this.git5 = this.git5 || methods_adjust(this.primaryColor, { h: -90 });
-    this.git6 = this.git6 || methods_adjust(this.primaryColor, { h: 60 });
-    this.git7 = this.git7 || methods_adjust(this.primaryColor, { h: 120 });
-    if (this.darkMode) {
-      this.git0 = (0,lighten/* default */.Z)(this.git0, 25);
-      this.git1 = (0,lighten/* default */.Z)(this.git1, 25);
-      this.git2 = (0,lighten/* default */.Z)(this.git2, 25);
-      this.git3 = (0,lighten/* default */.Z)(this.git3, 25);
-      this.git4 = (0,lighten/* default */.Z)(this.git4, 25);
-      this.git5 = (0,lighten/* default */.Z)(this.git5, 25);
-      this.git6 = (0,lighten/* default */.Z)(this.git6, 25);
-      this.git7 = (0,lighten/* default */.Z)(this.git7, 25);
-    } else {
-      this.git0 = (0,darken/* default */.Z)(this.git0, 25);
-      this.git1 = (0,darken/* default */.Z)(this.git1, 25);
-      this.git2 = (0,darken/* default */.Z)(this.git2, 25);
-      this.git3 = (0,darken/* default */.Z)(this.git3, 25);
-      this.git4 = (0,darken/* default */.Z)(this.git4, 25);
-      this.git5 = (0,darken/* default */.Z)(this.git5, 25);
-      this.git6 = (0,darken/* default */.Z)(this.git6, 25);
-      this.git7 = (0,darken/* default */.Z)(this.git7, 25);
-    }
-    this.gitInv0 = this.gitInv0 || methods_invert(this.git0);
-    this.gitInv1 = this.gitInv1 || methods_invert(this.git1);
-    this.gitInv2 = this.gitInv2 || methods_invert(this.git2);
-    this.gitInv3 = this.gitInv3 || methods_invert(this.git3);
-    this.gitInv4 = this.gitInv4 || methods_invert(this.git4);
-    this.gitInv5 = this.gitInv5 || methods_invert(this.git5);
-    this.gitInv6 = this.gitInv6 || methods_invert(this.git6);
-    this.gitInv7 = this.gitInv7 || methods_invert(this.git7);
-    this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
-    this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
-    this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
-    this.tagLabelFontSize = this.tagLabelFontSize || "10px";
-    this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
-    this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
-    this.commitLabelFontSize = this.commitLabelFontSize || "10px";
-    this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
-    this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
-  }
-  calculate(overrides) {
-    if (typeof overrides !== "object") {
-      this.updateColors();
-      return;
-    }
-    const keys2 = Object.keys(overrides);
-    keys2.forEach((k) => {
-      this[k] = overrides[k];
-    });
-    this.updateColors();
-    keys2.forEach((k) => {
-      this[k] = overrides[k];
-    });
-  }
-};
-const getThemeVariables$1 = (userOverrides) => {
-  const theme2 = new Theme$1();
-  theme2.calculate(userOverrides);
-  return theme2;
-};
-class Theme5 {
-  constructor() {
-    this.primaryColor = "#eee";
-    this.contrast = "#707070";
-    this.secondaryColor = (0,lighten/* default */.Z)(this.contrast, 55);
-    this.background = "#ffffff";
-    this.tertiaryColor = methods_adjust(this.primaryColor, { h: -160 });
-    this.primaryBorderColor = mkBorder(this.primaryColor, this.darkMode);
-    this.secondaryBorderColor = mkBorder(this.secondaryColor, this.darkMode);
-    this.tertiaryBorderColor = mkBorder(this.tertiaryColor, this.darkMode);
-    this.primaryTextColor = methods_invert(this.primaryColor);
-    this.secondaryTextColor = methods_invert(this.secondaryColor);
-    this.tertiaryTextColor = methods_invert(this.tertiaryColor);
-    this.lineColor = methods_invert(this.background);
-    this.textColor = methods_invert(this.background);
-    this.mainBkg = "#eee";
-    this.secondBkg = "calculated";
-    this.lineColor = "#666";
-    this.border1 = "#999";
-    this.border2 = "calculated";
-    this.note = "#ffa";
-    this.text = "#333";
-    this.critical = "#d42";
-    this.done = "#bbb";
-    this.arrowheadColor = "#333333";
-    this.fontFamily = '"trebuchet ms", verdana, arial, sans-serif';
-    this.fontSize = "16px";
-    this.THEME_COLOR_LIMIT = 12;
-    this.nodeBkg = "calculated";
-    this.nodeBorder = "calculated";
-    this.clusterBkg = "calculated";
-    this.clusterBorder = "calculated";
-    this.defaultLinkColor = "calculated";
-    this.titleColor = "calculated";
-    this.edgeLabelBackground = "white";
-    this.actorBorder = "calculated";
-    this.actorBkg = "calculated";
-    this.actorTextColor = "calculated";
-    this.actorLineColor = "calculated";
-    this.signalColor = "calculated";
-    this.signalTextColor = "calculated";
-    this.labelBoxBkgColor = "calculated";
-    this.labelBoxBorderColor = "calculated";
-    this.labelTextColor = "calculated";
-    this.loopTextColor = "calculated";
-    this.noteBorderColor = "calculated";
-    this.noteBkgColor = "calculated";
-    this.noteTextColor = "calculated";
-    this.activationBorderColor = "#666";
-    this.activationBkgColor = "#f4f4f4";
-    this.sequenceNumberColor = "white";
-    this.sectionBkgColor = "calculated";
-    this.altSectionBkgColor = "white";
-    this.sectionBkgColor2 = "calculated";
-    this.excludeBkgColor = "#eeeeee";
-    this.taskBorderColor = "calculated";
-    this.taskBkgColor = "calculated";
-    this.taskTextLightColor = "white";
-    this.taskTextColor = "calculated";
-    this.taskTextDarkColor = "calculated";
-    this.taskTextOutsideColor = "calculated";
-    this.taskTextClickableColor = "#003163";
-    this.activeTaskBorderColor = "calculated";
-    this.activeTaskBkgColor = "calculated";
-    this.gridColor = "calculated";
-    this.doneTaskBkgColor = "calculated";
-    this.doneTaskBorderColor = "calculated";
-    this.critBkgColor = "calculated";
-    this.critBorderColor = "calculated";
-    this.todayLineColor = "calculated";
-    this.personBorder = "calculated";
-    this.personBkg = "calculated";
-    this.labelColor = "black";
-    this.errorBkgColor = "#552222";
-    this.errorTextColor = "#552222";
-  }
-  updateColors() {
-    this.secondBkg = (0,lighten/* default */.Z)(this.contrast, 55);
-    this.border2 = this.contrast;
-    this.cScale0 = this.cScale0 || "#555";
-    this.cScale1 = this.cScale1 || "#F4F4F4";
-    this.cScale2 = this.cScale2 || "#555";
-    this.cScale3 = this.cScale3 || "#BBB";
-    this.cScale4 = this.cScale4 || "#777";
-    this.cScale5 = this.cScale5 || "#999";
-    this.cScale6 = this.cScale6 || "#DDD";
-    this.cScale7 = this.cScale7 || "#FFF";
-    this.cScale8 = this.cScale8 || "#DDD";
-    this.cScale9 = this.cScale9 || "#BBB";
-    this.cScale10 = this.cScale10 || "#999";
-    this.cScale11 = this.cScale11 || "#777";
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["cScaleInv" + i] = this["cScaleInv" + i] || methods_invert(this["cScale" + i]);
-    }
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      if (this.darkMode) {
-        this["cScalePeer" + i] = this["cScalePeer" + i] || (0,lighten/* default */.Z)(this["cScale" + i], 10);
-      } else {
-        this["cScalePeer" + i] = this["cScalePeer" + i] || (0,darken/* default */.Z)(this["cScale" + i], 10);
-      }
-    }
-    this.scaleLabelColor = this.scaleLabelColor || (this.darkMode ? "black" : this.labelTextColor);
-    this["cScaleLabel0"] = this["cScaleLabel0"] || this.cScale1;
-    this["cScaleLabel2"] = this["cScaleLabel2"] || this.cScale1;
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["cScaleLabel" + i] = this["cScaleLabel" + i] || this.scaleLabelColor;
-    }
-    for (let i = 0; i < 5; i++) {
-      this["surface" + i] = this["surface" + i] || methods_adjust(this.mainBkg, { l: -(5 + i * 5) });
-      this["surfacePeer" + i] = this["surfacePeer" + i] || methods_adjust(this.mainBkg, { l: -(8 + i * 5) });
-    }
-    this.nodeBkg = this.mainBkg;
-    this.nodeBorder = this.border1;
-    this.clusterBkg = this.secondBkg;
-    this.clusterBorder = this.border2;
-    this.defaultLinkColor = this.lineColor;
-    this.titleColor = this.text;
-    this.actorBorder = (0,lighten/* default */.Z)(this.border1, 23);
-    this.actorBkg = this.mainBkg;
-    this.actorTextColor = this.text;
-    this.actorLineColor = this.lineColor;
-    this.signalColor = this.text;
-    this.signalTextColor = this.text;
-    this.labelBoxBkgColor = this.actorBkg;
-    this.labelBoxBorderColor = this.actorBorder;
-    this.labelTextColor = this.text;
-    this.loopTextColor = this.text;
-    this.noteBorderColor = "#999";
-    this.noteBkgColor = "#666";
-    this.noteTextColor = "#fff";
-    this.sectionBkgColor = (0,lighten/* default */.Z)(this.contrast, 30);
-    this.sectionBkgColor2 = (0,lighten/* default */.Z)(this.contrast, 30);
-    this.taskBorderColor = (0,darken/* default */.Z)(this.contrast, 10);
-    this.taskBkgColor = this.contrast;
-    this.taskTextColor = this.taskTextLightColor;
-    this.taskTextDarkColor = this.text;
-    this.taskTextOutsideColor = this.taskTextDarkColor;
-    this.activeTaskBorderColor = this.taskBorderColor;
-    this.activeTaskBkgColor = this.mainBkg;
-    this.gridColor = (0,lighten/* default */.Z)(this.border1, 30);
-    this.doneTaskBkgColor = this.done;
-    this.doneTaskBorderColor = this.lineColor;
-    this.critBkgColor = this.critical;
-    this.critBorderColor = (0,darken/* default */.Z)(this.critBkgColor, 10);
-    this.todayLineColor = this.critBkgColor;
-    this.transitionColor = this.transitionColor || "#000";
-    this.transitionLabelColor = this.transitionLabelColor || this.textColor;
-    this.stateLabelColor = this.stateLabelColor || this.stateBkg || this.primaryTextColor;
-    this.stateBkg = this.stateBkg || this.mainBkg;
-    this.labelBackgroundColor = this.labelBackgroundColor || this.stateBkg;
-    this.compositeBackground = this.compositeBackground || this.background || this.tertiaryColor;
-    this.altBackground = this.altBackground || "#f4f4f4";
-    this.compositeTitleBackground = this.compositeTitleBackground || this.mainBkg;
-    this.stateBorder = this.stateBorder || "#000";
-    this.innerEndBackground = this.primaryBorderColor;
-    this.specialStateColor = "#222";
-    this.errorBkgColor = this.errorBkgColor || this.tertiaryColor;
-    this.errorTextColor = this.errorTextColor || this.tertiaryTextColor;
-    this.classText = this.primaryTextColor;
-    this.fillType0 = this.primaryColor;
-    this.fillType1 = this.secondaryColor;
-    this.fillType2 = methods_adjust(this.primaryColor, { h: 64 });
-    this.fillType3 = methods_adjust(this.secondaryColor, { h: 64 });
-    this.fillType4 = methods_adjust(this.primaryColor, { h: -64 });
-    this.fillType5 = methods_adjust(this.secondaryColor, { h: -64 });
-    this.fillType6 = methods_adjust(this.primaryColor, { h: 128 });
-    this.fillType7 = methods_adjust(this.secondaryColor, { h: 128 });
-    for (let i = 0; i < this.THEME_COLOR_LIMIT; i++) {
-      this["pie" + i] = this["cScale" + i];
-    }
-    this.pie12 = this.pie0;
-    this.pieTitleTextSize = this.pieTitleTextSize || "25px";
-    this.pieTitleTextColor = this.pieTitleTextColor || this.taskTextDarkColor;
-    this.pieSectionTextSize = this.pieSectionTextSize || "17px";
-    this.pieSectionTextColor = this.pieSectionTextColor || this.textColor;
-    this.pieLegendTextSize = this.pieLegendTextSize || "17px";
-    this.pieLegendTextColor = this.pieLegendTextColor || this.taskTextDarkColor;
-    this.pieStrokeColor = this.pieStrokeColor || "black";
-    this.pieStrokeWidth = this.pieStrokeWidth || "2px";
-    this.pieOpacity = this.pieOpacity || "0.7";
-    this.requirementBackground = this.requirementBackground || this.primaryColor;
-    this.requirementBorderColor = this.requirementBorderColor || this.primaryBorderColor;
-    this.requirementBorderSize = this.requirementBorderSize || this.primaryBorderColor;
-    this.requirementTextColor = this.requirementTextColor || this.primaryTextColor;
-    this.relationColor = this.relationColor || this.lineColor;
-    this.relationLabelBackground = this.relationLabelBackground || this.edgeLabelBackground;
-    this.relationLabelColor = this.relationLabelColor || this.actorTextColor;
-    this.git0 = (0,darken/* default */.Z)(this.pie1, 25) || this.primaryColor;
-    this.git1 = this.pie2 || this.secondaryColor;
-    this.git2 = this.pie3 || this.tertiaryColor;
-    this.git3 = this.pie4 || methods_adjust(this.primaryColor, { h: -30 });
-    this.git4 = this.pie5 || methods_adjust(this.primaryColor, { h: -60 });
-    this.git5 = this.pie6 || methods_adjust(this.primaryColor, { h: -90 });
-    this.git6 = this.pie7 || methods_adjust(this.primaryColor, { h: 60 });
-    this.git7 = this.pie8 || methods_adjust(this.primaryColor, { h: 120 });
-    this.gitInv0 = this.gitInv0 || methods_invert(this.git0);
-    this.gitInv1 = this.gitInv1 || methods_invert(this.git1);
-    this.gitInv2 = this.gitInv2 || methods_invert(this.git2);
-    this.gitInv3 = this.gitInv3 || methods_invert(this.git3);
-    this.gitInv4 = this.gitInv4 || methods_invert(this.git4);
-    this.gitInv5 = this.gitInv5 || methods_invert(this.git5);
-    this.gitInv6 = this.gitInv6 || methods_invert(this.git6);
-    this.gitInv7 = this.gitInv7 || methods_invert(this.git7);
-    this.branchLabelColor = this.branchLabelColor || this.labelTextColor;
-    this.gitBranchLabel0 = this.branchLabelColor;
-    this.gitBranchLabel1 = "white";
-    this.gitBranchLabel2 = this.branchLabelColor;
-    this.gitBranchLabel3 = "white";
-    this.gitBranchLabel4 = this.branchLabelColor;
-    this.gitBranchLabel5 = this.branchLabelColor;
-    this.gitBranchLabel6 = this.branchLabelColor;
-    this.gitBranchLabel7 = this.branchLabelColor;
-    this.tagLabelColor = this.tagLabelColor || this.primaryTextColor;
-    this.tagLabelBackground = this.tagLabelBackground || this.primaryColor;
-    this.tagLabelBorder = this.tagBorder || this.primaryBorderColor;
-    this.tagLabelFontSize = this.tagLabelFontSize || "10px";
-    this.commitLabelColor = this.commitLabelColor || this.secondaryTextColor;
-    this.commitLabelBackground = this.commitLabelBackground || this.secondaryColor;
-    this.commitLabelFontSize = this.commitLabelFontSize || "10px";
-    this.attributeBackgroundColorOdd = this.attributeBackgroundColorOdd || oldAttributeBackgroundColorOdd;
-    this.attributeBackgroundColorEven = this.attributeBackgroundColorEven || oldAttributeBackgroundColorEven;
-  }
-  calculate(overrides) {
-    if (typeof overrides !== "object") {
-      this.updateColors();
-      return;
-    }
-    const keys2 = Object.keys(overrides);
-    keys2.forEach((k) => {
-      this[k] = overrides[k];
-    });
-    this.updateColors();
-    keys2.forEach((k) => {
-      this[k] = overrides[k];
-    });
-  }
-}
-const getThemeVariables = (userOverrides) => {
-  const theme2 = new Theme5();
-  theme2.calculate(userOverrides);
-  return theme2;
-};
-const theme = {
-  base: {
-    getThemeVariables: getThemeVariables$4
-  },
-  dark: {
-    getThemeVariables: getThemeVariables$3
-  },
-  default: {
-    getThemeVariables: getThemeVariables$2
-  },
-  forest: {
-    getThemeVariables: getThemeVariables$1
-  },
-  neutral: {
-    getThemeVariables
-  }
-};
-const config$1 = {
-  /**
-   * Theme , the CSS style sheet
-   *
-   * | Parameter | Description     | Type   | Required | Values                                         |
-   * | --------- | --------------- | ------ | -------- | ---------------------------------------------- |
-   * | theme     | Built in Themes | string | Optional | 'default', 'forest', 'dark', 'neutral', 'null' |
-   *
-   * **Notes:** To disable any pre-defined mermaid theme, use "null".
-   *
-   * @example
-   *
-   * ```js
-   * {
-   *   "theme": "forest",
-   *   "themeCSS": ".node rect { fill: red; }"
-   * }
-   * ```
-   */
-  theme: "default",
-  themeVariables: theme["default"].getThemeVariables(),
-  themeCSS: void 0,
-  /* **maxTextSize** - The maximum allowed size of the users text diagram */
-  maxTextSize: 5e4,
-  darkMode: false,
-  /**
-   * | Parameter  | Description                                            | Type   | Required | Values                      |
-   * | ---------- | ------------------------------------------------------ | ------ | -------- | --------------------------- |
-   * | fontFamily | specifies the font to be used in the rendered diagrams | string | Required | Any Possible CSS FontFamily |
-   *
-   * **Notes:** Default value: '"trebuchet ms", verdana, arial, sans-serif;'.
-   */
-  fontFamily: '"trebuchet ms", verdana, arial, sans-serif;',
-  /**
-   * | Parameter | Description                                           | Type             | Required | Values                                        |
-   * | --------- | ----------------------------------------------------- | ---------------- | -------- | --------------------------------------------- |
-   * | logLevel  | This option decides the amount of logging to be used. | string \| number | Required | 'trace','debug','info','warn','error','fatal' |
-   *
-   * **Notes:**
-   *
-   * - Trace: 0
-   * - Debug: 1
-   * - Info: 2
-   * - Warn: 3
-   * - Error: 4
-   * - Fatal: 5 (default)
-   */
-  logLevel: 5,
-  /**
-   * | Parameter     | Description                       | Type   | Required | Values                                     |
-   * | ------------- | --------------------------------- | ------ | -------- | ------------------------------------------ |
-   * | securityLevel | Level of trust for parsed diagram | string | Required | 'sandbox', 'strict', 'loose', 'antiscript' |
-   *
-   * **Notes**:
-   *
-   * - **strict**: (**default**) tags in text are encoded, click functionality is disabled
-   * - **loose**: tags in text are allowed, click functionality is enabled
-   * - **antiscript**: html tags in text are allowed, (only script element is removed), click
-   *   functionality is enabled
-   * - **sandbox**: With this security level all rendering takes place in a sandboxed iframe. This
-   *   prevent any JavaScript from running in the context. This may hinder interactive functionality
-   *   of the diagram like scripts, popups in sequence diagram or links to other tabs/targets etc.
-   */
-  securityLevel: "strict",
-  /**
-   * | Parameter   | Description                                  | Type    | Required | Values      |
-   * | ----------- | -------------------------------------------- | ------- | -------- | ----------- |
-   * | startOnLoad | Dictates whether mermaid starts on Page load | boolean | Required | true, false |
-   *
-   * **Notes:** Default value: true
-   */
-  startOnLoad: true,
-  /**
-   * | Parameter           | Description                                                                  | Type    | Required | Values      |
-   * | ------------------- | ---------------------------------------------------------------------------- | ------- | -------- | ----------- |
-   * | arrowMarkerAbsolute | Controls whether or arrow markers in html code are absolute paths or anchors | boolean | Required | true, false |
-   *
-   * **Notes**:
-   *
-   * This matters if you are using base tag settings.
-   *
-   * Default value: false
-   */
-  arrowMarkerAbsolute: false,
-  /**
-   * This option controls which currentConfig keys are considered _secure_ and can only be changed
-   * via call to mermaidAPI.initialize. Calls to mermaidAPI.reinitialize cannot make changes to the
-   * `secure` keys in the current currentConfig. This prevents malicious graph directives from
-   * overriding a site's default security.
-   *
-   * **Notes**:
-   *
-   * Default value: ['secure', 'securityLevel', 'startOnLoad', 'maxTextSize']
-   */
-  secure: ["secure", "securityLevel", "startOnLoad", "maxTextSize"],
-  /**
-   * This option controls if the generated ids of nodes in the SVG are generated randomly or based
-   * on a seed. If set to false, the IDs are generated based on the current date and thus are not
-   * deterministic. This is the default behavior.
-   *
-   * **Notes**:
-   *
-   * This matters if your files are checked into source control e.g. git and should not change unless
-   * content is changed.
-   *
-   * Default value: false
-   */
-  deterministicIds: false,
-  /**
-   * This option is the optional seed for deterministic ids. if set to undefined but
-   * deterministicIds is true, a simple number iterator is used. You can set this attribute to base
-   * the seed on a static string.
-   */
-  deterministicIDSeed: void 0,
-  /** The object containing configurations specific for flowcharts */
-  flowchart: {
-    /**
-     * ### titleTopMargin
-     *
-     * | Parameter      | Description                                    | Type    | Required | Values             |
-     * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |
-     * | titleTopMargin | Margin top for the text over the flowchart     | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 25
-     */
-    titleTopMargin: 25,
-    /**
-     * | Parameter      | Description                                     | Type    | Required | Values             |
-     * | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ |
-     * | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value |
-     *
-     * **Notes:**
-     *
-     * The amount of padding around the diagram as a whole so that embedded diagrams have margins,
-     * expressed in pixels
-     *
-     * Default value: 8
-     */
-    diagramPadding: 8,
-    /**
-     * | Parameter  | Description                                                                                  | Type    | Required | Values      |
-     * | ---------- | -------------------------------------------------------------------------------------------- | ------- | -------- | ----------- |
-     * | htmlLabels | Flag for setting whether or not a html tag should be used for rendering labels on the edges. | boolean | Required | true, false |
-     *
-     * **Notes:** Default value: true.
-     */
-    htmlLabels: true,
-    /**
-     * | Parameter   | Description                                         | Type    | Required | Values              |
-     * | ----------- | --------------------------------------------------- | ------- | -------- | ------------------- |
-     * | nodeSpacing | Defines the spacing between nodes on the same level | Integer | Required | Any positive Number |
-     *
-     * **Notes:**
-     *
-     * Pertains to horizontal spacing for TB (top to bottom) or BT (bottom to top) graphs, and the
-     * vertical spacing for LR as well as RL graphs.**
-     *
-     * Default value: 50
-     */
-    nodeSpacing: 50,
-    /**
-     * | Parameter   | Description                                           | Type    | Required | Values              |
-     * | ----------- | ----------------------------------------------------- | ------- | -------- | ------------------- |
-     * | rankSpacing | Defines the spacing between nodes on different levels | Integer | Required | Any Positive Number |
-     *
-     * **Notes**:
-     *
-     * Pertains to vertical spacing for TB (top to bottom) or BT (bottom to top), and the horizontal
-     * spacing for LR as well as RL graphs.
-     *
-     * Default value 50
-     */
-    rankSpacing: 50,
-    /**
-     * | Parameter | Description                                        | Type   | Required | Values                        |
-     * | --------- | -------------------------------------------------- | ------ | -------- | ----------------------------- |
-     * | curve     | Defines how mermaid renders curves for flowcharts. | string | Required | 'basis', 'linear', 'cardinal' |
-     *
-     * **Notes:**
-     *
-     * Default Value: 'basis'
-     */
-    curve: "basis",
-    // Only used in new experimental rendering
-    // represents the padding between the labels and the shape
-    padding: 15,
-    /**
-     * | Parameter   | Description | Type    | Required | Values      |
-     * | ----------- | ----------- | ------- | -------- | ----------- |
-     * | useMaxWidth | See notes   | boolean | 4        | true, false |
-     *
-     * **Notes:**
-     *
-     * When this flag is set the height and width is set to 100% and is then scaling with the
-     * available space if not the absolute space required is used.
-     *
-     * Default value: true
-     */
-    useMaxWidth: true,
-    /**
-     * | Parameter       | Description | Type    | Required | Values                  |
-     * | --------------- | ----------- | ------- | -------- | ----------------------- |
-     * | defaultRenderer | See notes   | boolean | 4        | dagre-d3, dagre-wrapper, elk |
-     *
-     * **Notes:**
-     *
-     * Decides which rendering engine that is to be used for the rendering. Legal values are:
-     * dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid, elk for layout using
-     * elkjs
-     *
-     * Default value: 'dagre-wrapper'
-     */
-    defaultRenderer: "dagre-wrapper"
-  },
-  /** The object containing configurations specific for sequence diagrams */
-  sequence: {
-    hideUnusedParticipants: false,
-    /**
-     * | Parameter       | Description                  | Type    | Required | Values             |
-     * | --------------- | ---------------------------- | ------- | -------- | ------------------ |
-     * | activationWidth | Width of the activation rect | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value :10
-     */
-    activationWidth: 10,
-    /**
-     * | Parameter      | Description                                          | Type    | Required | Values             |
-     * | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ |
-     * | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 50
-     */
-    diagramMarginX: 50,
-    /**
-     * | Parameter      | Description                                       | Type    | Required | Values             |
-     * | -------------- | ------------------------------------------------- | ------- | -------- | ------------------ |
-     * | diagramMarginY | Margin to the over and under the sequence diagram | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 10
-     */
-    diagramMarginY: 10,
-    /**
-     * | Parameter   | Description           | Type    | Required | Values             |
-     * | ----------- | --------------------- | ------- | -------- | ------------------ |
-     * | actorMargin | Margin between actors | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 50
-     */
-    actorMargin: 50,
-    /**
-     * | Parameter | Description          | Type    | Required | Values             |
-     * | --------- | -------------------- | ------- | -------- | ------------------ |
-     * | width     | Width of actor boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 150
-     */
-    width: 150,
-    /**
-     * | Parameter | Description           | Type    | Required | Values             |
-     * | --------- | --------------------- | ------- | -------- | ------------------ |
-     * | height    | Height of actor boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 65
-     */
-    height: 65,
-    /**
-     * | Parameter | Description              | Type    | Required | Values             |
-     * | --------- | ------------------------ | ------- | -------- | ------------------ |
-     * | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 10
-     */
-    boxMargin: 10,
-    /**
-     * | Parameter     | Description                                  | Type    | Required | Values             |
-     * | ------------- | -------------------------------------------- | ------- | -------- | ------------------ |
-     * | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 5
-     */
-    boxTextMargin: 5,
-    /**
-     * | Parameter  | Description         | Type    | Required | Values             |
-     * | ---------- | ------------------- | ------- | -------- | ------------------ |
-     * | noteMargin | margin around notes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 10
-     */
-    noteMargin: 10,
-    /**
-     * | Parameter     | Description            | Type    | Required | Values             |
-     * | ------------- | ---------------------- | ------- | -------- | ------------------ |
-     * | messageMargin | Space between messages | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 35
-     */
-    messageMargin: 35,
-    /**
-     * | Parameter    | Description                 | Type   | Required | Values                    |
-     * | ------------ | --------------------------- | ------ | -------- | ------------------------- |
-     * | messageAlign | Multiline message alignment | string | Required | 'left', 'center', 'right' |
-     *
-     * **Notes:** Default value: 'center'
-     */
-    messageAlign: "center",
-    /**
-     * | Parameter    | Description                 | Type    | Required | Values      |
-     * | ------------ | --------------------------- | ------- | -------- | ----------- |
-     * | mirrorActors | Mirror actors under diagram | boolean | Required | true, false |
-     *
-     * **Notes:** Default value: true
-     */
-    mirrorActors: true,
-    /**
-     * | Parameter  | Description                                                             | Type    | Required | Values      |
-     * | ---------- | ----------------------------------------------------------------------- | ------- | -------- | ----------- |
-     * | forceMenus | forces actor popup menus to always be visible (to support E2E testing). | Boolean | Required | True, False |
-     *
-     * **Notes:**
-     *
-     * Default value: false.
-     */
-    forceMenus: false,
-    /**
-     * | Parameter       | Description                                | Type    | Required | Values             |
-     * | --------------- | ------------------------------------------ | ------- | -------- | ------------------ |
-     * | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | Required | Any Positive Value |
-     *
-     * **Notes:**
-     *
-     * Depending on css styling this might need adjustment.
-     *
-     * Default value: 1
-     */
-    bottomMarginAdj: 1,
-    /**
-     * | Parameter   | Description | Type    | Required | Values      |
-     * | ----------- | ----------- | ------- | -------- | ----------- |
-     * | useMaxWidth | See Notes   | boolean | Required | true, false |
-     *
-     * **Notes:** When this flag is set to true, the height and width is set to 100% and is then
-     * scaling with the available space. If set to false, the absolute space required is used.
-     *
-     * Default value: true
-     */
-    useMaxWidth: true,
-    /**
-     * | Parameter   | Description                          | Type    | Required | Values      |
-     * | ----------- | ------------------------------------ | ------- | -------- | ----------- |
-     * | rightAngles | display curve arrows as right angles | boolean | Required | true, false |
-     *
-     * **Notes:**
-     *
-     * This will display arrows that start and begin at the same node as right angles, rather than a
-     * curve
-     *
-     * Default value: false
-     */
-    rightAngles: false,
-    /**
-     * | Parameter           | Description                     | Type    | Required | Values      |
-     * | ------------------- | ------------------------------- | ------- | -------- | ----------- |
-     * | showSequenceNumbers | This will show the node numbers | boolean | Required | true, false |
-     *
-     * **Notes:** Default value: false
-     */
-    showSequenceNumbers: false,
-    /**
-     * | Parameter     | Description                                        | Type    | Required | Values             |
-     * | ------------- | -------------------------------------------------- | ------- | -------- | ------------------ |
-     * | actorFontSize | This sets the font size of the actor's description | Integer | Require  | Any Positive Value |
-     *
-     * **Notes:** **Default value 14**..
-     */
-    actorFontSize: 14,
-    /**
-     * | Parameter       | Description                                          | Type   | Required | Values                      |
-     * | --------------- | ---------------------------------------------------- | ------ | -------- | --------------------------- |
-     * | actorFontFamily | This sets the font family of the actor's description | string | Required | Any Possible CSS FontFamily |
-     *
-     * **Notes:** Default value: "'Open Sans", sans-serif'
-     */
-    actorFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of the actor's description
-     *
-     * **Notes:** Default value: 400.
-     */
-    actorFontWeight: 400,
-    /**
-     * | Parameter    | Description                                     | Type    | Required | Values             |
-     * | ------------ | ----------------------------------------------- | ------- | -------- | ------------------ |
-     * | noteFontSize | This sets the font size of actor-attached notes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 14
-     */
-    noteFontSize: 14,
-    /**
-     * | Parameter      | Description                                        | Type   | Required | Values                      |
-     * | -------------- | -------------------------------------------------- | ------ | -------- | --------------------------- |
-     * | noteFontFamily | This sets the font family of actor-attached notes. | string | Required | Any Possible CSS FontFamily |
-     *
-     * **Notes:** Default value: ''"trebuchet ms", verdana, arial, sans-serif'
-     */
-    noteFontFamily: '"trebuchet ms", verdana, arial, sans-serif',
-    /**
-     * This sets the font weight of the note's description
-     *
-     * **Notes:** Default value: 400
-     */
-    noteFontWeight: 400,
-    /**
-     * | Parameter | Description                                          | Type   | Required | Values                    |
-     * | --------- | ---------------------------------------------------- | ------ | -------- | ------------------------- |
-     * | noteAlign | This sets the text alignment of actor-attached notes | string | required | 'left', 'center', 'right' |
-     *
-     * **Notes:** Default value: 'center'
-     */
-    noteAlign: "center",
-    /**
-     * | Parameter       | Description                               | Type    | Required | Values              |
-     * | --------------- | ----------------------------------------- | ------- | -------- | ------------------- |
-     * | messageFontSize | This sets the font size of actor messages | Integer | Required | Any Positive Number |
-     *
-     * **Notes:** Default value: 16
-     */
-    messageFontSize: 16,
-    /**
-     * | Parameter         | Description                                 | Type   | Required | Values                      |
-     * | ----------------- | ------------------------------------------- | ------ | -------- | --------------------------- |
-     * | messageFontFamily | This sets the font family of actor messages | string | Required | Any Possible CSS FontFamily |
-     *
-     * **Notes:** Default value: '"trebuchet ms", verdana, arial, sans-serif'
-     */
-    messageFontFamily: '"trebuchet ms", verdana, arial, sans-serif',
-    /**
-     * This sets the font weight of the message's description
-     *
-     * **Notes:** Default value: 400.
-     */
-    messageFontWeight: 400,
-    /**
-     * This sets the auto-wrap state for the diagram
-     *
-     * **Notes:** Default value: false.
-     */
-    wrap: false,
-    /**
-     * This sets the auto-wrap padding for the diagram (sides only)
-     *
-     * **Notes:** Default value: 0.
-     */
-    wrapPadding: 10,
-    /**
-     * This sets the width of the loop-box (loop, alt, opt, par)
-     *
-     * **Notes:** Default value: 50.
-     */
-    labelBoxWidth: 50,
-    /**
-     * This sets the height of the loop-box (loop, alt, opt, par)
-     *
-     * **Notes:** Default value: 20.
-     */
-    labelBoxHeight: 20,
-    messageFont: function() {
-      return {
-        fontFamily: this.messageFontFamily,
-        fontSize: this.messageFontSize,
-        fontWeight: this.messageFontWeight
-      };
-    },
-    noteFont: function() {
-      return {
-        fontFamily: this.noteFontFamily,
-        fontSize: this.noteFontSize,
-        fontWeight: this.noteFontWeight
-      };
-    },
-    actorFont: function() {
-      return {
-        fontFamily: this.actorFontFamily,
-        fontSize: this.actorFontSize,
-        fontWeight: this.actorFontWeight
-      };
-    }
-  },
-  /** The object containing configurations specific for gantt diagrams */
-  gantt: {
-    /**
-     * ### titleTopMargin
-     *
-     * | Parameter      | Description                                    | Type    | Required | Values             |
-     * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |
-     * | titleTopMargin | Margin top for the text over the gantt diagram | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 25
-     */
-    titleTopMargin: 25,
-    /**
-     * | Parameter | Description                         | Type    | Required | Values             |
-     * | --------- | ----------------------------------- | ------- | -------- | ------------------ |
-     * | barHeight | The height of the bars in the graph | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 20
-     */
-    barHeight: 20,
-    /**
-     * | Parameter | Description                                                      | Type    | Required | Values             |
-     * | --------- | ---------------------------------------------------------------- | ------- | -------- | ------------------ |
-     * | barGap    | The margin between the different activities in the gantt diagram | Integer | Optional | Any Positive Value |
-     *
-     * **Notes:** Default value: 4
-     */
-    barGap: 4,
-    /**
-     * | Parameter  | Description                                                                | Type    | Required | Values             |
-     * | ---------- | -------------------------------------------------------------------------- | ------- | -------- | ------------------ |
-     * | topPadding | Margin between title and gantt diagram and between axis and gantt diagram. | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 50
-     */
-    topPadding: 50,
-    /**
-     * | Parameter    | Description                                                             | Type    | Required | Values             |
-     * | ------------ | ----------------------------------------------------------------------- | ------- | -------- | ------------------ |
-     * | rightPadding | The space allocated for the section name to the right of the activities | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 75
-     */
-    rightPadding: 75,
-    /**
-     * | Parameter   | Description                                                            | Type    | Required | Values             |
-     * | ----------- | ---------------------------------------------------------------------- | ------- | -------- | ------------------ |
-     * | leftPadding | The space allocated for the section name to the left of the activities | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 75
-     */
-    leftPadding: 75,
-    /**
-     * | Parameter            | Description                                  | Type    | Required | Values             |
-     * | -------------------- | -------------------------------------------- | ------- | -------- | ------------------ |
-     * | gridLineStartPadding | Vertical starting position of the grid lines | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 35
-     */
-    gridLineStartPadding: 35,
-    /**
-     * | Parameter | Description | Type    | Required | Values             |
-     * | --------- | ----------- | ------- | -------- | ------------------ |
-     * | fontSize  | Font size   | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 11
-     */
-    fontSize: 11,
-    /**
-     * | Parameter       | Description            | Type    | Required | Values             |
-     * | --------------- | ---------------------- | ------- | -------- | ------------------ |
-     * | sectionFontSize | Font size for sections | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 11
-     */
-    sectionFontSize: 11,
-    /**
-     * | Parameter           | Description                              | Type    | Required | Values             |
-     * | ------------------- | ---------------------------------------- | ------- | -------- | ------------------ |
-     * | numberSectionStyles | The number of alternating section styles | Integer | 4        | Any Positive Value |
-     *
-     * **Notes:** Default value: 4
-     */
-    numberSectionStyles: 4,
-    /**
-     * | Parameter  | Description                  | Type | Required | Values           |
-     * | ---------- | ---------------------------- | ---- | -------- | ---------------- |
-     * | axisFormat | Date/time format of the axis | 3    | Required | Date in yy-mm-dd |
-     *
-     * **Notes:**
-     *
-     * This might need adjustment to match your locale and preferences
-     *
-     * Default value: '%Y-%m-%d'.
-     */
-    axisFormat: "%Y-%m-%d",
-    /**
-     * | Parameter    | Description | Type   | Required | Values  |
-     * | ------------ | ------------| ------ | -------- | ------- |
-     * | tickInterval | axis ticks  | string | Optional | string  |
-     *
-     * **Notes:**
-     *
-     * Pattern is /^([1-9][0-9]*)(minute|hour|day|week|month)$/
-     *
-     * Default value: undefined
-     */
-    tickInterval: void 0,
-    /**
-     * | Parameter   | Description | Type    | Required | Values      |
-     * | ----------- | ----------- | ------- | -------- | ----------- |
-     * | useMaxWidth | See notes   | boolean | 4        | true, false |
-     *
-     * **Notes:**
-     *
-     * When this flag is set the height and width is set to 100% and is then scaling with the
-     * available space if not the absolute space required is used.
-     *
-     * Default value: true
-     */
-    useMaxWidth: true,
-    /**
-     * | Parameter | Description | Type    | Required | Values      |
-     * | --------- | ----------- | ------- | -------- | ----------- |
-     * | topAxis   | See notes   | Boolean | 4        | True, False |
-     *
-     * **Notes:** when this flag is set date labels will be added to the top of the chart
-     *
-     * **Default value false**.
-     */
-    topAxis: false,
-    useWidth: void 0
-  },
-  /** The object containing configurations specific for journey diagrams */
-  journey: {
-    /**
-     * | Parameter      | Description                                          | Type    | Required | Values             |
-     * | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ |
-     * | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 50
-     */
-    diagramMarginX: 50,
-    /**
-     * | Parameter      | Description                                        | Type    | Required | Values             |
-     * | -------------- | -------------------------------------------------- | ------- | -------- | ------------------ |
-     * | diagramMarginY | Margin to the over and under the sequence diagram. | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 10
-     */
-    diagramMarginY: 10,
-    /**
-     * | Parameter   | Description           | Type    | Required | Values             |
-     * | ----------- | --------------------- | ------- | -------- | ------------------ |
-     * | actorMargin | Margin between actors | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 50
-     */
-    leftMargin: 150,
-    /**
-     * | Parameter | Description          | Type    | Required | Values             |
-     * | --------- | -------------------- | ------- | -------- | ------------------ |
-     * | width     | Width of actor boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 150
-     */
-    width: 150,
-    /**
-     * | Parameter | Description           | Type    | Required | Values             |
-     * | --------- | --------------------- | ------- | -------- | ------------------ |
-     * | height    | Height of actor boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 65
-     */
-    height: 50,
-    /**
-     * | Parameter | Description              | Type    | Required | Values             |
-     * | --------- | ------------------------ | ------- | -------- | ------------------ |
-     * | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 10
-     */
-    boxMargin: 10,
-    /**
-     * | Parameter     | Description                                  | Type    | Required | Values             |
-     * | ------------- | -------------------------------------------- | ------- | -------- | ------------------ |
-     * | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 5
-     */
-    boxTextMargin: 5,
-    /**
-     * | Parameter  | Description         | Type    | Required | Values             |
-     * | ---------- | ------------------- | ------- | -------- | ------------------ |
-     * | noteMargin | Margin around notes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 10
-     */
-    noteMargin: 10,
-    /**
-     * | Parameter     | Description             | Type    | Required | Values             |
-     * | ------------- | ----------------------- | ------- | -------- | ------------------ |
-     * | messageMargin | Space between messages. | Integer | Required | Any Positive Value |
-     *
-     * **Notes:**
-     *
-     * Space between messages.
-     *
-     * Default value: 35
-     */
-    messageMargin: 35,
-    /**
-     * | Parameter    | Description                 | Type | Required | Values                    |
-     * | ------------ | --------------------------- | ---- | -------- | ------------------------- |
-     * | messageAlign | Multiline message alignment | 3    | 4        | 'left', 'center', 'right' |
-     *
-     * **Notes:** Default value: 'center'
-     */
-    messageAlign: "center",
-    /**
-     * | Parameter       | Description                                | Type    | Required | Values             |
-     * | --------------- | ------------------------------------------ | ------- | -------- | ------------------ |
-     * | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | 4        | Any Positive Value |
-     *
-     * **Notes:**
-     *
-     * Depending on css styling this might need adjustment.
-     *
-     * Default value: 1
-     */
-    bottomMarginAdj: 1,
-    /**
-     * | Parameter   | Description | Type    | Required | Values      |
-     * | ----------- | ----------- | ------- | -------- | ----------- |
-     * | useMaxWidth | See notes   | boolean | 4        | true, false |
-     *
-     * **Notes:**
-     *
-     * When this flag is set the height and width is set to 100% and is then scaling with the
-     * available space if not the absolute space required is used.
-     *
-     * Default value: true
-     */
-    useMaxWidth: true,
-    /**
-     * | Parameter   | Description                       | Type | Required | Values      |
-     * | ----------- | --------------------------------- | ---- | -------- | ----------- |
-     * | rightAngles | Curved Arrows become Right Angles | 3    | 4        | true, false |
-     *
-     * **Notes:**
-     *
-     * This will display arrows that start and begin at the same node as right angles, rather than a
-     * curves
-     *
-     * Default value: false
-     */
-    rightAngles: false,
-    taskFontSize: 14,
-    taskFontFamily: '"Open Sans", sans-serif',
-    taskMargin: 50,
-    // width of activation box
-    activationWidth: 10,
-    // text placement as: tspan | fo | old only text as before
-    textPlacement: "fo",
-    actorColours: ["#8FBC8F", "#7CFC00", "#00FFFF", "#20B2AA", "#B0E0E6", "#FFFFE0"],
-    sectionFills: ["#191970", "#8B008B", "#4B0082", "#2F4F4F", "#800000", "#8B4513", "#00008B"],
-    sectionColours: ["#fff"]
-  },
-  /** The object containing configurations specific for timeline diagrams */
-  timeline: {
-    /**
-     * | Parameter      | Description                                          | Type    | Required | Values             |
-     * | -------------- | ---------------------------------------------------- | ------- | -------- | ------------------ |
-     * | diagramMarginX | Margin to the right and left of the sequence diagram | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 50
-     */
-    diagramMarginX: 50,
-    /**
-     * | Parameter      | Description                                        | Type    | Required | Values             |
-     * | -------------- | -------------------------------------------------- | ------- | -------- | ------------------ |
-     * | diagramMarginY | Margin to the over and under the sequence diagram. | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 10
-     */
-    diagramMarginY: 10,
-    /**
-     * | Parameter   | Description           | Type    | Required | Values             |
-     * | ----------- | --------------------- | ------- | -------- | ------------------ |
-     * | actorMargin | Margin between actors | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 50
-     */
-    leftMargin: 150,
-    /**
-     * | Parameter | Description          | Type    | Required | Values             |
-     * | --------- | -------------------- | ------- | -------- | ------------------ |
-     * | width     | Width of actor boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 150
-     */
-    width: 150,
-    /**
-     * | Parameter | Description           | Type    | Required | Values             |
-     * | --------- | --------------------- | ------- | -------- | ------------------ |
-     * | height    | Height of actor boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 65
-     */
-    height: 50,
-    /**
-     * | Parameter | Description              | Type    | Required | Values             |
-     * | --------- | ------------------------ | ------- | -------- | ------------------ |
-     * | boxMargin | Margin around loop boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 10
-     */
-    boxMargin: 10,
-    /**
-     * | Parameter     | Description                                  | Type    | Required | Values             |
-     * | ------------- | -------------------------------------------- | ------- | -------- | ------------------ |
-     * | boxTextMargin | Margin around the text in loop/alt/opt boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 5
-     */
-    boxTextMargin: 5,
-    /**
-     * | Parameter  | Description         | Type    | Required | Values             |
-     * | ---------- | ------------------- | ------- | -------- | ------------------ |
-     * | noteMargin | Margin around notes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 10
-     */
-    noteMargin: 10,
-    /**
-     * | Parameter     | Description             | Type    | Required | Values             |
-     * | ------------- | ----------------------- | ------- | -------- | ------------------ |
-     * | messageMargin | Space between messages. | Integer | Required | Any Positive Value |
-     *
-     * **Notes:**
-     *
-     * Space between messages.
-     *
-     * Default value: 35
-     */
-    messageMargin: 35,
-    /**
-     * | Parameter    | Description                 | Type | Required | Values                    |
-     * | ------------ | --------------------------- | ---- | -------- | ------------------------- |
-     * | messageAlign | Multiline message alignment | 3    | 4        | 'left', 'center', 'right' |
-     *
-     * **Notes:** Default value: 'center'
-     */
-    messageAlign: "center",
-    /**
-     * | Parameter       | Description                                | Type    | Required | Values             |
-     * | --------------- | ------------------------------------------ | ------- | -------- | ------------------ |
-     * | bottomMarginAdj | Prolongs the edge of the diagram downwards | Integer | 4        | Any Positive Value |
-     *
-     * **Notes:**
-     *
-     * Depending on css styling this might need adjustment.
-     *
-     * Default value: 1
-     */
-    bottomMarginAdj: 1,
-    /**
-     * | Parameter   | Description | Type    | Required | Values      |
-     * | ----------- | ----------- | ------- | -------- | ----------- |
-     * | useMaxWidth | See notes   | boolean | 4        | true, false |
-     *
-     * **Notes:**
-     *
-     * When this flag is set the height and width is set to 100% and is then scaling with the
-     * available space if not the absolute space required is used.
-     *
-     * Default value: true
-     */
-    useMaxWidth: true,
-    /**
-     * | Parameter   | Description                       | Type | Required | Values      |
-     * | ----------- | --------------------------------- | ---- | -------- | ----------- |
-     * | rightAngles | Curved Arrows become Right Angles | 3    | 4        | true, false |
-     *
-     * **Notes:**
-     *
-     * This will display arrows that start and begin at the same node as right angles, rather than a
-     * curves
-     *
-     * Default value: false
-     */
-    rightAngles: false,
-    taskFontSize: 14,
-    taskFontFamily: '"Open Sans", sans-serif',
-    taskMargin: 50,
-    // width of activation box
-    activationWidth: 10,
-    // text placement as: tspan | fo | old only text as before
-    textPlacement: "fo",
-    actorColours: ["#8FBC8F", "#7CFC00", "#00FFFF", "#20B2AA", "#B0E0E6", "#FFFFE0"],
-    sectionFills: ["#191970", "#8B008B", "#4B0082", "#2F4F4F", "#800000", "#8B4513", "#00008B"],
-    sectionColours: ["#fff"],
-    disableMulticolor: false
-  },
-  class: {
-    /**
-     * ### titleTopMargin
-     *
-     * | Parameter      | Description                                    | Type    | Required | Values             |
-     * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |
-     * | titleTopMargin | Margin top for the text over the class diagram | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 25
-     */
-    titleTopMargin: 25,
-    arrowMarkerAbsolute: false,
-    dividerMargin: 10,
-    padding: 5,
-    textHeight: 10,
-    /**
-     * | Parameter   | Description | Type    | Required | Values      |
-     * | ----------- | ----------- | ------- | -------- | ----------- |
-     * | useMaxWidth | See notes   | boolean | 4        | true, false |
-     *
-     * **Notes:**
-     *
-     * When this flag is set the height and width is set to 100% and is then scaling with the
-     * available space if not the absolute space required is used.
-     *
-     * Default value: true
-     */
-    useMaxWidth: true,
-    /**
-     * | Parameter       | Description | Type    | Required | Values                  |
-     * | --------------- | ----------- | ------- | -------- | ----------------------- |
-     * | defaultRenderer | See notes   | boolean | 4        | dagre-d3, dagre-wrapper |
-     *
-     * **Notes**:
-     *
-     * Decides which rendering engine that is to be used for the rendering. Legal values are:
-     * dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid
-     *
-     * Default value: 'dagre-d3'
-     */
-    defaultRenderer: "dagre-wrapper"
-  },
-  state: {
-    /**
-     * ### titleTopMargin
-     *
-     * | Parameter      | Description                                    | Type    | Required | Values             |
-     * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |
-     * | titleTopMargin | Margin top for the text over the state diagram | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 25
-     */
-    titleTopMargin: 25,
-    dividerMargin: 10,
-    sizeUnit: 5,
-    padding: 8,
-    textHeight: 10,
-    titleShift: -15,
-    noteMargin: 10,
-    forkWidth: 70,
-    forkHeight: 7,
-    // Used
-    miniPadding: 2,
-    // Font size factor, this is used to guess the width of the edges labels before rendering by dagre
-    // layout. This might need updating if/when switching font
-    fontSizeFactor: 5.02,
-    fontSize: 24,
-    labelHeight: 16,
-    edgeLengthFactor: "20",
-    compositTitleSize: 35,
-    radius: 5,
-    /**
-     * | Parameter   | Description | Type    | Required | Values      |
-     * | ----------- | ----------- | ------- | -------- | ----------- |
-     * | useMaxWidth | See notes   | boolean | 4        | true, false |
-     *
-     * **Notes:**
-     *
-     * When this flag is set the height and width is set to 100% and is then scaling with the
-     * available space if not the absolute space required is used.
-     *
-     * Default value: true
-     */
-    useMaxWidth: true,
-    /**
-     * | Parameter       | Description | Type    | Required | Values                  |
-     * | --------------- | ----------- | ------- | -------- | ----------------------- |
-     * | defaultRenderer | See notes   | boolean | 4        | dagre-d3, dagre-wrapper |
-     *
-     * **Notes:**
-     *
-     * Decides which rendering engine that is to be used for the rendering. Legal values are:
-     * dagre-d3 dagre-wrapper - wrapper for dagre implemented in mermaid
-     *
-     * Default value: 'dagre-d3'
-     */
-    defaultRenderer: "dagre-wrapper"
-  },
-  /** The object containing configurations specific for entity relationship diagrams */
-  er: {
-    /**
-     * ### titleTopMargin
-     *
-     * | Parameter      | Description                                    | Type    | Required | Values             |
-     * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |
-     * | titleTopMargin | Margin top for the text over the diagram       | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 25
-     */
-    titleTopMargin: 25,
-    /**
-     * | Parameter      | Description                                     | Type    | Required | Values             |
-     * | -------------- | ----------------------------------------------- | ------- | -------- | ------------------ |
-     * | diagramPadding | Amount of padding around the diagram as a whole | Integer | Required | Any Positive Value |
-     *
-     * **Notes:**
-     *
-     * The amount of padding around the diagram as a whole so that embedded diagrams have margins,
-     * expressed in pixels
-     *
-     * Default value: 20
-     */
-    diagramPadding: 20,
-    /**
-     * | Parameter       | Description                              | Type   | Required | Values                 |
-     * | --------------- | ---------------------------------------- | ------ | -------- | ---------------------- |
-     * | layoutDirection | Directional bias for layout of entities. | string | Required | "TB", "BT", "LR", "RL" |
-     *
-     * **Notes:**
-     *
-     * 'TB' for Top-Bottom, 'BT'for Bottom-Top, 'LR' for Left-Right, or 'RL' for Right to Left.
-     *
-     * T = top, B = bottom, L = left, and R = right.
-     *
-     * Default value: 'TB'
-     */
-    layoutDirection: "TB",
-    /**
-     * | Parameter      | Description                        | Type    | Required | Values             |
-     * | -------------- | ---------------------------------- | ------- | -------- | ------------------ |
-     * | minEntityWidth | The minimum width of an entity box | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Expressed in pixels. Default value: 100
-     */
-    minEntityWidth: 100,
-    /**
-     * | Parameter       | Description                         | Type    | Required | Values             |
-     * | --------------- | ----------------------------------- | ------- | -------- | ------------------ |
-     * | minEntityHeight | The minimum height of an entity box | Integer | 4        | Any Positive Value |
-     *
-     * **Notes:** Expressed in pixels Default value: 75
-     */
-    minEntityHeight: 75,
-    /**
-     * | Parameter     | Description                                                  | Type    | Required | Values             |
-     * | ------------- | ------------------------------------------------------------ | ------- | -------- | ------------------ |
-     * | entityPadding | Minimum internal padding between text in box and box borders | Integer | 4        | Any Positive Value |
-     *
-     * **Notes:**
-     *
-     * The minimum internal padding between text in an entity box and the enclosing box borders,
-     * expressed in pixels.
-     *
-     * Default value: 15
-     */
-    entityPadding: 15,
-    /**
-     * | Parameter | Description                         | Type   | Required | Values               |
-     * | --------- | ----------------------------------- | ------ | -------- | -------------------- |
-     * | stroke    | Stroke color of box edges and lines | string | 4        | Any recognized color |
-     *
-     * **Notes:** Default value: 'gray'
-     */
-    stroke: "gray",
-    /**
-     * | Parameter | Description                | Type   | Required | Values               |
-     * | --------- | -------------------------- | ------ | -------- | -------------------- |
-     * | fill      | Fill color of entity boxes | string | 4        | Any recognized color |
-     *
-     * **Notes:** Default value: 'honeydew'
-     */
-    fill: "honeydew",
-    /**
-     * | Parameter | Description         | Type    | Required | Values             |
-     * | --------- | ------------------- | ------- | -------- | ------------------ |
-     * | fontSize  | Font Size in pixels | Integer |          | Any Positive Value |
-     *
-     * **Notes:**
-     *
-     * Font size (expressed as an integer representing a number of pixels) Default value: 12
-     */
-    fontSize: 12,
-    /**
-     * | Parameter   | Description | Type    | Required | Values      |
-     * | ----------- | ----------- | ------- | -------- | ----------- |
-     * | useMaxWidth | See Notes   | boolean | Required | true, false |
-     *
-     * **Notes:**
-     *
-     * When this flag is set to true, the diagram width is locked to 100% and scaled based on
-     * available space. If set to false, the diagram reserves its absolute width.
-     *
-     * Default value: true
-     */
-    useMaxWidth: true
-  },
-  /** The object containing configurations specific for pie diagrams */
-  pie: {
-    useWidth: void 0,
-    /**
-     * | Parameter   | Description | Type    | Required | Values      |
-     * | ----------- | ----------- | ------- | -------- | ----------- |
-     * | useMaxWidth | See Notes   | boolean | Required | true, false |
-     *
-     * **Notes:**
-     *
-     * When this flag is set to true, the diagram width is locked to 100% and scaled based on
-     * available space. If set to false, the diagram reserves its absolute width.
-     *
-     * Default value: true
-     */
-    useMaxWidth: true
-  },
-  /** The object containing configurations specific for req diagrams */
-  requirement: {
-    useWidth: void 0,
-    /**
-     * | Parameter   | Description | Type    | Required | Values      |
-     * | ----------- | ----------- | ------- | -------- | ----------- |
-     * | useMaxWidth | See Notes   | boolean | Required | true, false |
-     *
-     * **Notes:**
-     *
-     * When this flag is set to true, the diagram width is locked to 100% and scaled based on
-     * available space. If set to false, the diagram reserves its absolute width.
-     *
-     * Default value: true
-     */
-    useMaxWidth: true,
-    rect_fill: "#f9f9f9",
-    text_color: "#333",
-    rect_border_size: "0.5px",
-    rect_border_color: "#bbb",
-    rect_min_width: 200,
-    rect_min_height: 200,
-    fontSize: 14,
-    rect_padding: 10,
-    line_height: 20
-  },
-  gitGraph: {
-    /**
-     * ### titleTopMargin
-     *
-     * | Parameter      | Description                                    | Type    | Required | Values             |
-     * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |
-     * | titleTopMargin | Margin top for the text over the Git diagram   | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 25
-     */
-    titleTopMargin: 25,
-    diagramPadding: 8,
-    nodeLabel: {
-      width: 75,
-      height: 100,
-      x: -25,
-      y: 0
-    },
-    mainBranchName: "main",
-    mainBranchOrder: 0,
-    showCommitLabel: true,
-    showBranches: true,
-    rotateCommitLabel: true
-  },
-  /** The object containing configurations specific for c4 diagrams */
-  c4: {
-    useWidth: void 0,
-    /**
-     * | Parameter      | Description                                    | Type    | Required | Values             |
-     * | -------------- | ---------------------------------------------- | ------- | -------- | ------------------ |
-     * | diagramMarginX | Margin to the right and left of the c4 diagram | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 50
-     */
-    diagramMarginX: 50,
-    /**
-     * | Parameter      | Description                                 | Type    | Required | Values             |
-     * | -------------- | ------------------------------------------- | ------- | -------- | ------------------ |
-     * | diagramMarginY | Margin to the over and under the c4 diagram | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 10
-     */
-    diagramMarginY: 10,
-    /**
-     * | Parameter     | Description           | Type    | Required | Values             |
-     * | ------------- | --------------------- | ------- | -------- | ------------------ |
-     * | c4ShapeMargin | Margin between shapes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 50
-     */
-    c4ShapeMargin: 50,
-    /**
-     * | Parameter      | Description            | Type    | Required | Values             |
-     * | -------------- | ---------------------- | ------- | -------- | ------------------ |
-     * | c4ShapePadding | Padding between shapes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 20
-     */
-    c4ShapePadding: 20,
-    /**
-     * | Parameter | Description           | Type    | Required | Values             |
-     * | --------- | --------------------- | ------- | -------- | ------------------ |
-     * | width     | Width of person boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 216
-     */
-    width: 216,
-    /**
-     * | Parameter | Description            | Type    | Required | Values             |
-     * | --------- | ---------------------- | ------- | -------- | ------------------ |
-     * | height    | Height of person boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 60
-     */
-    height: 60,
-    /**
-     * | Parameter | Description         | Type    | Required | Values             |
-     * | --------- | ------------------- | ------- | -------- | ------------------ |
-     * | boxMargin | Margin around boxes | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** Default value: 10
-     */
-    boxMargin: 10,
-    /**
-     * | Parameter   | Description | Type    | Required | Values      |
-     * | ----------- | ----------- | ------- | -------- | ----------- |
-     * | useMaxWidth | See Notes   | boolean | Required | true, false |
-     *
-     * **Notes:** When this flag is set to true, the height and width is set to 100% and is then
-     * scaling with the available space. If set to false, the absolute space required is used.
-     *
-     * Default value: true
-     */
-    useMaxWidth: true,
-    /**
-     * | Parameter    | Description | Type    | Required | Values             |
-     * | ------------ | ----------- | ------- | -------- | ------------------ |
-     * | c4ShapeInRow | See Notes   | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** How many shapes to place in each row.
-     *
-     * Default value: 4
-     */
-    c4ShapeInRow: 4,
-    nextLinePaddingX: 0,
-    /**
-     * | Parameter       | Description | Type    | Required | Values             |
-     * | --------------- | ----------- | ------- | -------- | ------------------ |
-     * | c4BoundaryInRow | See Notes   | Integer | Required | Any Positive Value |
-     *
-     * **Notes:** How many boundaries to place in each row.
-     *
-     * Default value: 2
-     */
-    c4BoundaryInRow: 2,
-    /**
-     * This sets the font size of Person shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    personFontSize: 14,
-    /**
-     * This sets the font family of Person shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    personFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of Person shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    personFontWeight: "normal",
-    /**
-     * This sets the font size of External Person shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    external_personFontSize: 14,
-    /**
-     * This sets the font family of External Person shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    external_personFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of External Person shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    external_personFontWeight: "normal",
-    /**
-     * This sets the font size of System shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    systemFontSize: 14,
-    /**
-     * This sets the font family of System shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    systemFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of System shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    systemFontWeight: "normal",
-    /**
-     * This sets the font size of External System shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    external_systemFontSize: 14,
-    /**
-     * This sets the font family of External System shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    external_systemFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of External System shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    external_systemFontWeight: "normal",
-    /**
-     * This sets the font size of System DB shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    system_dbFontSize: 14,
-    /**
-     * This sets the font family of System DB shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    system_dbFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of System DB shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    system_dbFontWeight: "normal",
-    /**
-     * This sets the font size of External System DB shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    external_system_dbFontSize: 14,
-    /**
-     * This sets the font family of External System DB shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    external_system_dbFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of External System DB shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    external_system_dbFontWeight: "normal",
-    /**
-     * This sets the font size of System Queue shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    system_queueFontSize: 14,
-    /**
-     * This sets the font family of System Queue shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    system_queueFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of System Queue shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    system_queueFontWeight: "normal",
-    /**
-     * This sets the font size of External System Queue shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    external_system_queueFontSize: 14,
-    /**
-     * This sets the font family of External System Queue shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    external_system_queueFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of External System Queue shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    external_system_queueFontWeight: "normal",
-    /**
-     * This sets the font size of Boundary shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    boundaryFontSize: 14,
-    /**
-     * This sets the font family of Boundary shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    boundaryFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of Boundary shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    boundaryFontWeight: "normal",
-    /**
-     * This sets the font size of Message shape for the diagram
-     *
-     * **Notes:** Default value: 12.
-     */
-    messageFontSize: 12,
-    /**
-     * This sets the font family of Message shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    messageFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of Message shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    messageFontWeight: "normal",
-    /**
-     * This sets the font size of Container shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    containerFontSize: 14,
-    /**
-     * This sets the font family of Container shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    containerFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of Container shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    containerFontWeight: "normal",
-    /**
-     * This sets the font size of External Container shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    external_containerFontSize: 14,
-    /**
-     * This sets the font family of External Container shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    external_containerFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of External Container shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    external_containerFontWeight: "normal",
-    /**
-     * This sets the font size of Container DB shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    container_dbFontSize: 14,
-    /**
-     * This sets the font family of Container DB shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    container_dbFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of Container DB shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    container_dbFontWeight: "normal",
-    /**
-     * This sets the font size of External Container DB shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    external_container_dbFontSize: 14,
-    /**
-     * This sets the font family of External Container DB shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    external_container_dbFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of External Container DB shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    external_container_dbFontWeight: "normal",
-    /**
-     * This sets the font size of Container Queue shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    container_queueFontSize: 14,
-    /**
-     * This sets the font family of Container Queue shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    container_queueFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of Container Queue shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    container_queueFontWeight: "normal",
-    /**
-     * This sets the font size of External Container Queue shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    external_container_queueFontSize: 14,
-    /**
-     * This sets the font family of External Container Queue shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    external_container_queueFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of External Container Queue shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    external_container_queueFontWeight: "normal",
-    /**
-     * This sets the font size of Component shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    componentFontSize: 14,
-    /**
-     * This sets the font family of Component shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    componentFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of Component shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    componentFontWeight: "normal",
-    /**
-     * This sets the font size of External Component shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    external_componentFontSize: 14,
-    /**
-     * This sets the font family of External Component shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    external_componentFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of External Component shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    external_componentFontWeight: "normal",
-    /**
-     * This sets the font size of Component DB shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    component_dbFontSize: 14,
-    /**
-     * This sets the font family of Component DB shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    component_dbFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of Component DB shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    component_dbFontWeight: "normal",
-    /**
-     * This sets the font size of External Component DB shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    external_component_dbFontSize: 14,
-    /**
-     * This sets the font family of External Component DB shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    external_component_dbFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of External Component DB shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    external_component_dbFontWeight: "normal",
-    /**
-     * This sets the font size of Component Queue shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    component_queueFontSize: 14,
-    /**
-     * This sets the font family of Component Queue shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    component_queueFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of Component Queue shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    component_queueFontWeight: "normal",
-    /**
-     * This sets the font size of External Component Queue shape for the diagram
-     *
-     * **Notes:** Default value: 14.
-     */
-    external_component_queueFontSize: 14,
-    /**
-     * This sets the font family of External Component Queue shape for the diagram
-     *
-     * **Notes:** Default value: "Open Sans", sans-serif.
-     */
-    external_component_queueFontFamily: '"Open Sans", sans-serif',
-    /**
-     * This sets the font weight of External Component Queue shape for the diagram
-     *
-     * **Notes:** Default value: normal.
-     */
-    external_component_queueFontWeight: "normal",
-    /**
-     * This sets the auto-wrap state for the diagram
-     *
-     * **Notes:** Default value: true.
-     */
-    wrap: true,
-    /**
-     * This sets the auto-wrap padding for the diagram (sides only)
-     *
-     * **Notes:** Default value: 0.
-     */
-    wrapPadding: 10,
-    personFont: function() {
-      return {
-        fontFamily: this.personFontFamily,
-        fontSize: this.personFontSize,
-        fontWeight: this.personFontWeight
-      };
-    },
-    external_personFont: function() {
-      return {
-        fontFamily: this.external_personFontFamily,
-        fontSize: this.external_personFontSize,
-        fontWeight: this.external_personFontWeight
-      };
-    },
-    systemFont: function() {
-      return {
-        fontFamily: this.systemFontFamily,
-        fontSize: this.systemFontSize,
-        fontWeight: this.systemFontWeight
-      };
-    },
-    external_systemFont: function() {
-      return {
-        fontFamily: this.external_systemFontFamily,
-        fontSize: this.external_systemFontSize,
-        fontWeight: this.external_systemFontWeight
-      };
-    },
-    system_dbFont: function() {
-      return {
-        fontFamily: this.system_dbFontFamily,
-        fontSize: this.system_dbFontSize,
-        fontWeight: this.system_dbFontWeight
-      };
-    },
-    external_system_dbFont: function() {
-      return {
-        fontFamily: this.external_system_dbFontFamily,
-        fontSize: this.external_system_dbFontSize,
-        fontWeight: this.external_system_dbFontWeight
-      };
-    },
-    system_queueFont: function() {
-      return {
-        fontFamily: this.system_queueFontFamily,
-        fontSize: this.system_queueFontSize,
-        fontWeight: this.system_queueFontWeight
-      };
-    },
-    external_system_queueFont: function() {
-      return {
-        fontFamily: this.external_system_queueFontFamily,
-        fontSize: this.external_system_queueFontSize,
-        fontWeight: this.external_system_queueFontWeight
-      };
-    },
-    containerFont: function() {
-      return {
-        fontFamily: this.containerFontFamily,
-        fontSize: this.containerFontSize,
-        fontWeight: this.containerFontWeight
-      };
-    },
-    external_containerFont: function() {
-      return {
-        fontFamily: this.external_containerFontFamily,
-        fontSize: this.external_containerFontSize,
-        fontWeight: this.external_containerFontWeight
-      };
-    },
-    container_dbFont: function() {
-      return {
-        fontFamily: this.container_dbFontFamily,
-        fontSize: this.container_dbFontSize,
-        fontWeight: this.container_dbFontWeight
-      };
-    },
-    external_container_dbFont: function() {
-      return {
-        fontFamily: this.external_container_dbFontFamily,
-        fontSize: this.external_container_dbFontSize,
-        fontWeight: this.external_container_dbFontWeight
-      };
-    },
-    container_queueFont: function() {
-      return {
-        fontFamily: this.container_queueFontFamily,
-        fontSize: this.container_queueFontSize,
-        fontWeight: this.container_queueFontWeight
-      };
-    },
-    external_container_queueFont: function() {
-      return {
-        fontFamily: this.external_container_queueFontFamily,
-        fontSize: this.external_container_queueFontSize,
-        fontWeight: this.external_container_queueFontWeight
-      };
-    },
-    componentFont: function() {
-      return {
-        fontFamily: this.componentFontFamily,
-        fontSize: this.componentFontSize,
-        fontWeight: this.componentFontWeight
-      };
-    },
-    external_componentFont: function() {
-      return {
-        fontFamily: this.external_componentFontFamily,
-        fontSize: this.external_componentFontSize,
-        fontWeight: this.external_componentFontWeight
-      };
-    },
-    component_dbFont: function() {
-      return {
-        fontFamily: this.component_dbFontFamily,
-        fontSize: this.component_dbFontSize,
-        fontWeight: this.component_dbFontWeight
-      };
-    },
-    external_component_dbFont: function() {
-      return {
-        fontFamily: this.external_component_dbFontFamily,
-        fontSize: this.external_component_dbFontSize,
-        fontWeight: this.external_component_dbFontWeight
-      };
-    },
-    component_queueFont: function() {
-      return {
-        fontFamily: this.component_queueFontFamily,
-        fontSize: this.component_queueFontSize,
-        fontWeight: this.component_queueFontWeight
-      };
-    },
-    external_component_queueFont: function() {
-      return {
-        fontFamily: this.external_component_queueFontFamily,
-        fontSize: this.external_component_queueFontSize,
-        fontWeight: this.external_component_queueFontWeight
-      };
-    },
-    boundaryFont: function() {
-      return {
-        fontFamily: this.boundaryFontFamily,
-        fontSize: this.boundaryFontSize,
-        fontWeight: this.boundaryFontWeight
-      };
-    },
-    messageFont: function() {
-      return {
-        fontFamily: this.messageFontFamily,
-        fontSize: this.messageFontSize,
-        fontWeight: this.messageFontWeight
-      };
-    },
-    // ' Colors
-    // ' ##################################
-    person_bg_color: "#08427B",
-    person_border_color: "#073B6F",
-    external_person_bg_color: "#686868",
-    external_person_border_color: "#8A8A8A",
-    system_bg_color: "#1168BD",
-    system_border_color: "#3C7FC0",
-    system_db_bg_color: "#1168BD",
-    system_db_border_color: "#3C7FC0",
-    system_queue_bg_color: "#1168BD",
-    system_queue_border_color: "#3C7FC0",
-    external_system_bg_color: "#999999",
-    external_system_border_color: "#8A8A8A",
-    external_system_db_bg_color: "#999999",
-    external_system_db_border_color: "#8A8A8A",
-    external_system_queue_bg_color: "#999999",
-    external_system_queue_border_color: "#8A8A8A",
-    container_bg_color: "#438DD5",
-    container_border_color: "#3C7FC0",
-    container_db_bg_color: "#438DD5",
-    container_db_border_color: "#3C7FC0",
-    container_queue_bg_color: "#438DD5",
-    container_queue_border_color: "#3C7FC0",
-    external_container_bg_color: "#B3B3B3",
-    external_container_border_color: "#A6A6A6",
-    external_container_db_bg_color: "#B3B3B3",
-    external_container_db_border_color: "#A6A6A6",
-    external_container_queue_bg_color: "#B3B3B3",
-    external_container_queue_border_color: "#A6A6A6",
-    component_bg_color: "#85BBF0",
-    component_border_color: "#78A8D8",
-    component_db_bg_color: "#85BBF0",
-    component_db_border_color: "#78A8D8",
-    component_queue_bg_color: "#85BBF0",
-    component_queue_border_color: "#78A8D8",
-    external_component_bg_color: "#CCCCCC",
-    external_component_border_color: "#BFBFBF",
-    external_component_db_bg_color: "#CCCCCC",
-    external_component_db_border_color: "#BFBFBF",
-    external_component_queue_bg_color: "#CCCCCC",
-    external_component_queue_border_color: "#BFBFBF"
-  },
-  mindmap: {
-    useMaxWidth: true,
-    padding: 10,
-    maxNodeWidth: 200
-  },
-  fontSize: 16
-};
-if (config$1.class) {
-  config$1.class.arrowMarkerAbsolute = config$1.arrowMarkerAbsolute;
-}
-if (config$1.gitGraph) {
-  config$1.gitGraph.arrowMarkerAbsolute = config$1.arrowMarkerAbsolute;
-}
-const keyify = (obj, prefix = "") => Object.keys(obj).reduce((res, el) => {
-  if (Array.isArray(obj[el])) {
-    return res;
-  } else if (typeof obj[el] === "object" && obj[el] !== null) {
-    return [...res, prefix + el, ...keyify(obj[el], "")];
-  }
-  return [...res, prefix + el];
-}, []);
-const configKeys = keyify(config$1, "");
-const config$2 = config$1;
-/*! js-yaml 4.1.0 https://github.com/nodeca/js-yaml @license MIT */
-function isNothing(subject) {
-  return typeof subject === "undefined" || subject === null;
-}
-function isObject(subject) {
-  return typeof subject === "object" && subject !== null;
-}
-function toArray(sequence) {
-  if (Array.isArray(sequence))
-    return sequence;
-  else if (isNothing(sequence))
-    return [];
-  return [sequence];
-}
-function extend(target, source) {
-  var index, length, key, sourceKeys;
-  if (source) {
-    sourceKeys = Object.keys(source);
-    for (index = 0, length = sourceKeys.length; index < length; index += 1) {
-      key = sourceKeys[index];
-      target[key] = source[key];
-    }
-  }
-  return target;
-}
-function repeat(string, count) {
-  var result = "", cycle;
-  for (cycle = 0; cycle < count; cycle += 1) {
-    result += string;
-  }
-  return result;
-}
-function isNegativeZero(number) {
-  return number === 0 && Number.NEGATIVE_INFINITY === 1 / number;
-}
-var isNothing_1 = isNothing;
-var isObject_1 = isObject;
-var toArray_1 = toArray;
-var repeat_1 = repeat;
-var isNegativeZero_1 = isNegativeZero;
-var extend_1 = extend;
-var common = {
-  isNothing: isNothing_1,
-  isObject: isObject_1,
-  toArray: toArray_1,
-  repeat: repeat_1,
-  isNegativeZero: isNegativeZero_1,
-  extend: extend_1
-};
-function formatError(exception2, compact) {
-  var where = "", message2 = exception2.reason || "(unknown reason)";
-  if (!exception2.mark)
-    return message2;
-  if (exception2.mark.name) {
-    where += 'in "' + exception2.mark.name + '" ';
-  }
-  where += "(" + (exception2.mark.line + 1) + ":" + (exception2.mark.column + 1) + ")";
-  if (!compact && exception2.mark.snippet) {
-    where += "\n\n" + exception2.mark.snippet;
-  }
-  return message2 + " " + where;
-}
-function YAMLException$1(reason, mark) {
-  Error.call(this);
-  this.name = "YAMLException";
-  this.reason = reason;
-  this.mark = mark;
-  this.message = formatError(this, false);
-  if (Error.captureStackTrace) {
-    Error.captureStackTrace(this, this.constructor);
-  } else {
-    this.stack = new Error().stack || "";
-  }
-}
-YAMLException$1.prototype = Object.create(Error.prototype);
-YAMLException$1.prototype.constructor = YAMLException$1;
-YAMLException$1.prototype.toString = function toString(compact) {
-  return this.name + ": " + formatError(this, compact);
-};
-var exception = YAMLException$1;
-function getLine(buffer, lineStart, lineEnd, position, maxLineLength) {
-  var head2 = "";
-  var tail = "";
-  var maxHalfLength = Math.floor(maxLineLength / 2) - 1;
-  if (position - lineStart > maxHalfLength) {
-    head2 = " ... ";
-    lineStart = position - maxHalfLength + head2.length;
-  }
-  if (lineEnd - position > maxHalfLength) {
-    tail = " ...";
-    lineEnd = position + maxHalfLength - tail.length;
-  }
-  return {
-    str: head2 + buffer.slice(lineStart, lineEnd).replace(/\t/g, "→") + tail,
-    pos: position - lineStart + head2.length
-    // relative position
-  };
-}
-function padStart(string, max2) {
-  return common.repeat(" ", max2 - string.length) + string;
-}
-function makeSnippet(mark, options2) {
-  options2 = Object.create(options2 || null);
-  if (!mark.buffer)
-    return null;
-  if (!options2.maxLength)
-    options2.maxLength = 79;
-  if (typeof options2.indent !== "number")
-    options2.indent = 1;
-  if (typeof options2.linesBefore !== "number")
-    options2.linesBefore = 3;
-  if (typeof options2.linesAfter !== "number")
-    options2.linesAfter = 2;
-  var re = /\r?\n|\r|\0/g;
-  var lineStarts = [0];
-  var lineEnds = [];
-  var match;
-  var foundLineNo = -1;
-  while (match = re.exec(mark.buffer)) {
-    lineEnds.push(match.index);
-    lineStarts.push(match.index + match[0].length);
-    if (mark.position <= match.index && foundLineNo < 0) {
-      foundLineNo = lineStarts.length - 2;
-    }
-  }
-  if (foundLineNo < 0)
-    foundLineNo = lineStarts.length - 1;
-  var result = "", i, line2;
-  var lineNoLength = Math.min(mark.line + options2.linesAfter, lineEnds.length).toString().length;
-  var maxLineLength = options2.maxLength - (options2.indent + lineNoLength + 3);
-  for (i = 1; i <= options2.linesBefore; i++) {
-    if (foundLineNo - i < 0)
-      break;
-    line2 = getLine(
-      mark.buffer,
-      lineStarts[foundLineNo - i],
-      lineEnds[foundLineNo - i],
-      mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo - i]),
-      maxLineLength
-    );
-    result = common.repeat(" ", options2.indent) + padStart((mark.line - i + 1).toString(), lineNoLength) + " | " + line2.str + "\n" + result;
-  }
-  line2 = getLine(mark.buffer, lineStarts[foundLineNo], lineEnds[foundLineNo], mark.position, maxLineLength);
-  result += common.repeat(" ", options2.indent) + padStart((mark.line + 1).toString(), lineNoLength) + " | " + line2.str + "\n";
-  result += common.repeat("-", options2.indent + lineNoLength + 3 + line2.pos) + "^\n";
-  for (i = 1; i <= options2.linesAfter; i++) {
-    if (foundLineNo + i >= lineEnds.length)
-      break;
-    line2 = getLine(
-      mark.buffer,
-      lineStarts[foundLineNo + i],
-      lineEnds[foundLineNo + i],
-      mark.position - (lineStarts[foundLineNo] - lineStarts[foundLineNo + i]),
-      maxLineLength
-    );
-    result += common.repeat(" ", options2.indent) + padStart((mark.line + i + 1).toString(), lineNoLength) + " | " + line2.str + "\n";
-  }
-  return result.replace(/\n$/, "");
-}
-var snippet = makeSnippet;
-var TYPE_CONSTRUCTOR_OPTIONS = [
-  "kind",
-  "multi",
-  "resolve",
-  "construct",
-  "instanceOf",
-  "predicate",
-  "represent",
-  "representName",
-  "defaultStyle",
-  "styleAliases"
-];
-var YAML_NODE_KINDS = [
-  "scalar",
-  "sequence",
-  "mapping"
-];
-function compileStyleAliases(map2) {
-  var result = {};
-  if (map2 !== null) {
-    Object.keys(map2).forEach(function(style) {
-      map2[style].forEach(function(alias) {
-        result[String(alias)] = style;
-      });
-    });
-  }
-  return result;
-}
-function Type$1(tag, options2) {
-  options2 = options2 || {};
-  Object.keys(options2).forEach(function(name) {
-    if (TYPE_CONSTRUCTOR_OPTIONS.indexOf(name) === -1) {
-      throw new exception('Unknown option "' + name + '" is met in definition of "' + tag + '" YAML type.');
-    }
-  });
-  this.options = options2;
-  this.tag = tag;
-  this.kind = options2["kind"] || null;
-  this.resolve = options2["resolve"] || function() {
-    return true;
-  };
-  this.construct = options2["construct"] || function(data) {
-    return data;
-  };
-  this.instanceOf = options2["instanceOf"] || null;
-  this.predicate = options2["predicate"] || null;
-  this.represent = options2["represent"] || null;
-  this.representName = options2["representName"] || null;
-  this.defaultStyle = options2["defaultStyle"] || null;
-  this.multi = options2["multi"] || false;
-  this.styleAliases = compileStyleAliases(options2["styleAliases"] || null);
-  if (YAML_NODE_KINDS.indexOf(this.kind) === -1) {
-    throw new exception('Unknown kind "' + this.kind + '" is specified for "' + tag + '" YAML type.');
-  }
-}
-var type = Type$1;
-function compileList(schema2, name) {
-  var result = [];
-  schema2[name].forEach(function(currentType) {
-    var newIndex = result.length;
-    result.forEach(function(previousType, previousIndex) {
-      if (previousType.tag === currentType.tag && previousType.kind === currentType.kind && previousType.multi === currentType.multi) {
-        newIndex = previousIndex;
-      }
-    });
-    result[newIndex] = currentType;
-  });
-  return result;
-}
-function compileMap() {
-  var result = {
-    scalar: {},
-    sequence: {},
-    mapping: {},
-    fallback: {},
-    multi: {
-      scalar: [],
-      sequence: [],
-      mapping: [],
-      fallback: []
-    }
-  }, index, length;
-  function collectType(type2) {
-    if (type2.multi) {
-      result.multi[type2.kind].push(type2);
-      result.multi["fallback"].push(type2);
-    } else {
-      result[type2.kind][type2.tag] = result["fallback"][type2.tag] = type2;
-    }
-  }
-  for (index = 0, length = arguments.length; index < length; index += 1) {
-    arguments[index].forEach(collectType);
-  }
-  return result;
-}
-function Schema$1(definition) {
-  return this.extend(definition);
-}
-Schema$1.prototype.extend = function extend2(definition) {
-  var implicit = [];
-  var explicit = [];
-  if (definition instanceof type) {
-    explicit.push(definition);
-  } else if (Array.isArray(definition)) {
-    explicit = explicit.concat(definition);
-  } else if (definition && (Array.isArray(definition.implicit) || Array.isArray(definition.explicit))) {
-    if (definition.implicit)
-      implicit = implicit.concat(definition.implicit);
-    if (definition.explicit)
-      explicit = explicit.concat(definition.explicit);
-  } else {
-    throw new exception("Schema.extend argument should be a Type, [ Type ], or a schema definition ({ implicit: [...], explicit: [...] })");
-  }
-  implicit.forEach(function(type$1) {
-    if (!(type$1 instanceof type)) {
-      throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.");
-    }
-    if (type$1.loadKind && type$1.loadKind !== "scalar") {
-      throw new exception("There is a non-scalar type in the implicit list of a schema. Implicit resolving of such types is not supported.");
-    }
-    if (type$1.multi) {
-      throw new exception("There is a multi type in the implicit list of a schema. Multi tags can only be listed as explicit.");
-    }
-  });
-  explicit.forEach(function(type$1) {
-    if (!(type$1 instanceof type)) {
-      throw new exception("Specified list of YAML types (or a single Type object) contains a non-Type object.");
-    }
-  });
-  var result = Object.create(Schema$1.prototype);
-  result.implicit = (this.implicit || []).concat(implicit);
-  result.explicit = (this.explicit || []).concat(explicit);
-  result.compiledImplicit = compileList(result, "implicit");
-  result.compiledExplicit = compileList(result, "explicit");
-  result.compiledTypeMap = compileMap(result.compiledImplicit, result.compiledExplicit);
-  return result;
-};
-var schema = Schema$1;
-var str = new type("tag:yaml.org,2002:str", {
-  kind: "scalar",
-  construct: function(data) {
-    return data !== null ? data : "";
-  }
-});
-var seq$1 = new type("tag:yaml.org,2002:seq", {
-  kind: "sequence",
-  construct: function(data) {
-    return data !== null ? data : [];
-  }
-});
-var map = new type("tag:yaml.org,2002:map", {
-  kind: "mapping",
-  construct: function(data) {
-    return data !== null ? data : {};
-  }
-});
-var failsafe = new schema({
-  explicit: [
-    str,
-    seq$1,
-    map
-  ]
-});
-function resolveYamlNull(data) {
-  if (data === null)
-    return true;
-  var max2 = data.length;
-  return max2 === 1 && data === "~" || max2 === 4 && (data === "null" || data === "Null" || data === "NULL");
-}
-function constructYamlNull() {
-  return null;
-}
-function isNull(object) {
-  return object === null;
-}
-var _null = new type("tag:yaml.org,2002:null", {
-  kind: "scalar",
-  resolve: resolveYamlNull,
-  construct: constructYamlNull,
-  predicate: isNull,
-  represent: {
-    canonical: function() {
-      return "~";
-    },
-    lowercase: function() {
-      return "null";
-    },
-    uppercase: function() {
-      return "NULL";
-    },
-    camelcase: function() {
-      return "Null";
-    },
-    empty: function() {
-      return "";
-    }
-  },
-  defaultStyle: "lowercase"
-});
-function resolveYamlBoolean(data) {
-  if (data === null)
-    return false;
-  var max2 = data.length;
-  return max2 === 4 && (data === "true" || data === "True" || data === "TRUE") || max2 === 5 && (data === "false" || data === "False" || data === "FALSE");
-}
-function constructYamlBoolean(data) {
-  return data === "true" || data === "True" || data === "TRUE";
-}
-function isBoolean(object) {
-  return Object.prototype.toString.call(object) === "[object Boolean]";
-}
-var bool = new type("tag:yaml.org,2002:bool", {
-  kind: "scalar",
-  resolve: resolveYamlBoolean,
-  construct: constructYamlBoolean,
-  predicate: isBoolean,
-  represent: {
-    lowercase: function(object) {
-      return object ? "true" : "false";
-    },
-    uppercase: function(object) {
-      return object ? "TRUE" : "FALSE";
-    },
-    camelcase: function(object) {
-      return object ? "True" : "False";
-    }
-  },
-  defaultStyle: "lowercase"
-});
-function isHexCode(c2) {
-  return 48 <= c2 && c2 <= 57 || 65 <= c2 && c2 <= 70 || 97 <= c2 && c2 <= 102;
-}
-function isOctCode(c2) {
-  return 48 <= c2 && c2 <= 55;
-}
-function isDecCode(c2) {
-  return 48 <= c2 && c2 <= 57;
-}
-function resolveYamlInteger(data) {
-  if (data === null)
-    return false;
-  var max2 = data.length, index = 0, hasDigits = false, ch;
-  if (!max2)
-    return false;
-  ch = data[index];
-  if (ch === "-" || ch === "+") {
-    ch = data[++index];
-  }
-  if (ch === "0") {
-    if (index + 1 === max2)
-      return true;
-    ch = data[++index];
-    if (ch === "b") {
-      index++;
-      for (; index < max2; index++) {
-        ch = data[index];
-        if (ch === "_")
-          continue;
-        if (ch !== "0" && ch !== "1")
-          return false;
-        hasDigits = true;
-      }
-      return hasDigits && ch !== "_";
-    }
-    if (ch === "x") {
-      index++;
-      for (; index < max2; index++) {
-        ch = data[index];
-        if (ch === "_")
-          continue;
-        if (!isHexCode(data.charCodeAt(index)))
-          return false;
-        hasDigits = true;
-      }
-      return hasDigits && ch !== "_";
-    }
-    if (ch === "o") {
-      index++;
-      for (; index < max2; index++) {
-        ch = data[index];
-        if (ch === "_")
-          continue;
-        if (!isOctCode(data.charCodeAt(index)))
-          return false;
-        hasDigits = true;
-      }
-      return hasDigits && ch !== "_";
-    }
-  }
-  if (ch === "_")
-    return false;
-  for (; index < max2; index++) {
-    ch = data[index];
-    if (ch === "_")
-      continue;
-    if (!isDecCode(data.charCodeAt(index))) {
-      return false;
-    }
-    hasDigits = true;
-  }
-  if (!hasDigits || ch === "_")
-    return false;
-  return true;
-}
-function constructYamlInteger(data) {
-  var value = data, sign = 1, ch;
-  if (value.indexOf("_") !== -1) {
-    value = value.replace(/_/g, "");
-  }
-  ch = value[0];
-  if (ch === "-" || ch === "+") {
-    if (ch === "-")
-      sign = -1;
-    value = value.slice(1);
-    ch = value[0];
-  }
-  if (value === "0")
-    return 0;
-  if (ch === "0") {
-    if (value[1] === "b")
-      return sign * parseInt(value.slice(2), 2);
-    if (value[1] === "x")
-      return sign * parseInt(value.slice(2), 16);
-    if (value[1] === "o")
-      return sign * parseInt(value.slice(2), 8);
-  }
-  return sign * parseInt(value, 10);
-}
-function isInteger(object) {
-  return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 === 0 && !common.isNegativeZero(object));
-}
-var mermaid_ae477ddf_int = new type("tag:yaml.org,2002:int", {
-  kind: "scalar",
-  resolve: resolveYamlInteger,
-  construct: constructYamlInteger,
-  predicate: isInteger,
-  represent: {
-    binary: function(obj) {
-      return obj >= 0 ? "0b" + obj.toString(2) : "-0b" + obj.toString(2).slice(1);
-    },
-    octal: function(obj) {
-      return obj >= 0 ? "0o" + obj.toString(8) : "-0o" + obj.toString(8).slice(1);
-    },
-    decimal: function(obj) {
-      return obj.toString(10);
-    },
-    /* eslint-disable max-len */
-    hexadecimal: function(obj) {
-      return obj >= 0 ? "0x" + obj.toString(16).toUpperCase() : "-0x" + obj.toString(16).toUpperCase().slice(1);
-    }
-  },
-  defaultStyle: "decimal",
-  styleAliases: {
-    binary: [2, "bin"],
-    octal: [8, "oct"],
-    decimal: [10, "dec"],
-    hexadecimal: [16, "hex"]
-  }
-});
-var YAML_FLOAT_PATTERN = new RegExp(
-  // 2.5e4, 2.5 and integers
-  "^(?:[-+]?(?:[0-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$"
-);
-function resolveYamlFloat(data) {
-  if (data === null)
-    return false;
-  if (!YAML_FLOAT_PATTERN.test(data) || // Quick hack to not allow integers end with `_`
-  // Probably should update regexp & check speed
-  data[data.length - 1] === "_") {
-    return false;
-  }
-  return true;
-}
-function constructYamlFloat(data) {
-  var value, sign;
-  value = data.replace(/_/g, "").toLowerCase();
-  sign = value[0] === "-" ? -1 : 1;
-  if ("+-".indexOf(value[0]) >= 0) {
-    value = value.slice(1);
-  }
-  if (value === ".inf") {
-    return sign === 1 ? Number.POSITIVE_INFINITY : Number.NEGATIVE_INFINITY;
-  } else if (value === ".nan") {
-    return NaN;
-  }
-  return sign * parseFloat(value, 10);
-}
-var SCIENTIFIC_WITHOUT_DOT = /^[-+]?[0-9]+e/;
-function representYamlFloat(object, style) {
-  var res;
-  if (isNaN(object)) {
-    switch (style) {
-      case "lowercase":
-        return ".nan";
-      case "uppercase":
-        return ".NAN";
-      case "camelcase":
-        return ".NaN";
-    }
-  } else if (Number.POSITIVE_INFINITY === object) {
-    switch (style) {
-      case "lowercase":
-        return ".inf";
-      case "uppercase":
-        return ".INF";
-      case "camelcase":
-        return ".Inf";
-    }
-  } else if (Number.NEGATIVE_INFINITY === object) {
-    switch (style) {
-      case "lowercase":
-        return "-.inf";
-      case "uppercase":
-        return "-.INF";
-      case "camelcase":
-        return "-.Inf";
-    }
-  } else if (common.isNegativeZero(object)) {
-    return "-0.0";
-  }
-  res = object.toString(10);
-  return SCIENTIFIC_WITHOUT_DOT.test(res) ? res.replace("e", ".e") : res;
-}
-function isFloat(object) {
-  return Object.prototype.toString.call(object) === "[object Number]" && (object % 1 !== 0 || common.isNegativeZero(object));
-}
-var mermaid_ae477ddf_float = new type("tag:yaml.org,2002:float", {
-  kind: "scalar",
-  resolve: resolveYamlFloat,
-  construct: constructYamlFloat,
-  predicate: isFloat,
-  represent: representYamlFloat,
-  defaultStyle: "lowercase"
-});
-var mermaid_ae477ddf_json = failsafe.extend({
-  implicit: [
-    _null,
-    bool,
-    mermaid_ae477ddf_int,
-    mermaid_ae477ddf_float
-  ]
-});
-var core = mermaid_ae477ddf_json;
-var YAML_DATE_REGEXP = new RegExp(
-  "^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"
-);
-var YAML_TIMESTAMP_REGEXP = new RegExp(
-  "^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$"
-);
-function resolveYamlTimestamp(data) {
-  if (data === null)
-    return false;
-  if (YAML_DATE_REGEXP.exec(data) !== null)
-    return true;
-  if (YAML_TIMESTAMP_REGEXP.exec(data) !== null)
-    return true;
-  return false;
-}
-function constructYamlTimestamp(data) {
-  var match, year, month, day, hour, minute, second, fraction = 0, delta = null, tz_hour, tz_minute, date;
-  match = YAML_DATE_REGEXP.exec(data);
-  if (match === null)
-    match = YAML_TIMESTAMP_REGEXP.exec(data);
-  if (match === null)
-    throw new Error("Date resolve error");
-  year = +match[1];
-  month = +match[2] - 1;
-  day = +match[3];
-  if (!match[4]) {
-    return new Date(Date.UTC(year, month, day));
-  }
-  hour = +match[4];
-  minute = +match[5];
-  second = +match[6];
-  if (match[7]) {
-    fraction = match[7].slice(0, 3);
-    while (fraction.length < 3) {
-      fraction += "0";
-    }
-    fraction = +fraction;
-  }
-  if (match[9]) {
-    tz_hour = +match[10];
-    tz_minute = +(match[11] || 0);
-    delta = (tz_hour * 60 + tz_minute) * 6e4;
-    if (match[9] === "-")
-      delta = -delta;
-  }
-  date = new Date(Date.UTC(year, month, day, hour, minute, second, fraction));
-  if (delta)
-    date.setTime(date.getTime() - delta);
-  return date;
-}
-function representYamlTimestamp(object) {
-  return object.toISOString();
-}
-var timestamp = new type("tag:yaml.org,2002:timestamp", {
-  kind: "scalar",
-  resolve: resolveYamlTimestamp,
-  construct: constructYamlTimestamp,
-  instanceOf: Date,
-  represent: representYamlTimestamp
-});
-function resolveYamlMerge(data) {
-  return data === "<<" || data === null;
-}
-var merge$1 = new type("tag:yaml.org,2002:merge", {
-  kind: "scalar",
-  resolve: resolveYamlMerge
-});
-var BASE64_MAP = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\n\r";
-function resolveYamlBinary(data) {
-  if (data === null)
-    return false;
-  var code, idx, bitlen = 0, max2 = data.length, map2 = BASE64_MAP;
-  for (idx = 0; idx < max2; idx++) {
-    code = map2.indexOf(data.charAt(idx));
-    if (code > 64)
-      continue;
-    if (code < 0)
-      return false;
-    bitlen += 6;
-  }
-  return bitlen % 8 === 0;
-}
-function constructYamlBinary(data) {
-  var idx, tailbits, input = data.replace(/[\r\n=]/g, ""), max2 = input.length, map2 = BASE64_MAP, bits = 0, result = [];
-  for (idx = 0; idx < max2; idx++) {
-    if (idx % 4 === 0 && idx) {
-      result.push(bits >> 16 & 255);
-      result.push(bits >> 8 & 255);
-      result.push(bits & 255);
-    }
-    bits = bits << 6 | map2.indexOf(input.charAt(idx));
-  }
-  tailbits = max2 % 4 * 6;
-  if (tailbits === 0) {
-    result.push(bits >> 16 & 255);
-    result.push(bits >> 8 & 255);
-    result.push(bits & 255);
-  } else if (tailbits === 18) {
-    result.push(bits >> 10 & 255);
-    result.push(bits >> 2 & 255);
-  } else if (tailbits === 12) {
-    result.push(bits >> 4 & 255);
-  }
-  return new Uint8Array(result);
-}
-function representYamlBinary(object) {
-  var result = "", bits = 0, idx, tail, max2 = object.length, map2 = BASE64_MAP;
-  for (idx = 0; idx < max2; idx++) {
-    if (idx % 3 === 0 && idx) {
-      result += map2[bits >> 18 & 63];
-      result += map2[bits >> 12 & 63];
-      result += map2[bits >> 6 & 63];
-      result += map2[bits & 63];
-    }
-    bits = (bits << 8) + object[idx];
-  }
-  tail = max2 % 3;
-  if (tail === 0) {
-    result += map2[bits >> 18 & 63];
-    result += map2[bits >> 12 & 63];
-    result += map2[bits >> 6 & 63];
-    result += map2[bits & 63];
-  } else if (tail === 2) {
-    result += map2[bits >> 10 & 63];
-    result += map2[bits >> 4 & 63];
-    result += map2[bits << 2 & 63];
-    result += map2[64];
-  } else if (tail === 1) {
-    result += map2[bits >> 2 & 63];
-    result += map2[bits << 4 & 63];
-    result += map2[64];
-    result += map2[64];
-  }
-  return result;
-}
-function isBinary(obj) {
-  return Object.prototype.toString.call(obj) === "[object Uint8Array]";
-}
-var binary = new type("tag:yaml.org,2002:binary", {
-  kind: "scalar",
-  resolve: resolveYamlBinary,
-  construct: constructYamlBinary,
-  predicate: isBinary,
-  represent: representYamlBinary
-});
-var _hasOwnProperty$3 = Object.prototype.hasOwnProperty;
-var _toString$2 = Object.prototype.toString;
-function resolveYamlOmap(data) {
-  if (data === null)
-    return true;
-  var objectKeys = [], index, length, pair, pairKey, pairHasKey, object = data;
-  for (index = 0, length = object.length; index < length; index += 1) {
-    pair = object[index];
-    pairHasKey = false;
-    if (_toString$2.call(pair) !== "[object Object]")
-      return false;
-    for (pairKey in pair) {
-      if (_hasOwnProperty$3.call(pair, pairKey)) {
-        if (!pairHasKey)
-          pairHasKey = true;
-        else
-          return false;
-      }
-    }
-    if (!pairHasKey)
-      return false;
-    if (objectKeys.indexOf(pairKey) === -1)
-      objectKeys.push(pairKey);
-    else
-      return false;
-  }
-  return true;
-}
-function constructYamlOmap(data) {
-  return data !== null ? data : [];
-}
-var omap = new type("tag:yaml.org,2002:omap", {
-  kind: "sequence",
-  resolve: resolveYamlOmap,
-  construct: constructYamlOmap
-});
-var _toString$1 = Object.prototype.toString;
-function resolveYamlPairs(data) {
-  if (data === null)
-    return true;
-  var index, length, pair, keys2, result, object = data;
-  result = new Array(object.length);
-  for (index = 0, length = object.length; index < length; index += 1) {
-    pair = object[index];
-    if (_toString$1.call(pair) !== "[object Object]")
-      return false;
-    keys2 = Object.keys(pair);
-    if (keys2.length !== 1)
-      return false;
-    result[index] = [keys2[0], pair[keys2[0]]];
-  }
-  return true;
-}
-function constructYamlPairs(data) {
-  if (data === null)
-    return [];
-  var index, length, pair, keys2, result, object = data;
-  result = new Array(object.length);
-  for (index = 0, length = object.length; index < length; index += 1) {
-    pair = object[index];
-    keys2 = Object.keys(pair);
-    result[index] = [keys2[0], pair[keys2[0]]];
-  }
-  return result;
-}
-var pairs = new type("tag:yaml.org,2002:pairs", {
-  kind: "sequence",
-  resolve: resolveYamlPairs,
-  construct: constructYamlPairs
-});
-var _hasOwnProperty$2 = Object.prototype.hasOwnProperty;
-function resolveYamlSet(data) {
-  if (data === null)
-    return true;
-  var key, object = data;
-  for (key in object) {
-    if (_hasOwnProperty$2.call(object, key)) {
-      if (object[key] !== null)
-        return false;
-    }
-  }
-  return true;
-}
-function constructYamlSet(data) {
-  return data !== null ? data : {};
-}
-var set$1 = new type("tag:yaml.org,2002:set", {
-  kind: "mapping",
-  resolve: resolveYamlSet,
-  construct: constructYamlSet
-});
-var _default = core.extend({
-  implicit: [
-    timestamp,
-    merge$1
-  ],
-  explicit: [
-    binary,
-    omap,
-    pairs,
-    set$1
-  ]
-});
-var _hasOwnProperty$1 = Object.prototype.hasOwnProperty;
-var CONTEXT_FLOW_IN = 1;
-var CONTEXT_FLOW_OUT = 2;
-var CONTEXT_BLOCK_IN = 3;
-var CONTEXT_BLOCK_OUT = 4;
-var CHOMPING_CLIP = 1;
-var CHOMPING_STRIP = 2;
-var CHOMPING_KEEP = 3;
-var PATTERN_NON_PRINTABLE = /[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/;
-var PATTERN_NON_ASCII_LINE_BREAKS = /[\x85\u2028\u2029]/;
-var PATTERN_FLOW_INDICATORS = /[,\[\]\{\}]/;
-var PATTERN_TAG_HANDLE = /^(?:!|!!|![a-z\-]+!)$/i;
-var PATTERN_TAG_URI = /^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;
-function _class(obj) {
-  return Object.prototype.toString.call(obj);
-}
-function is_EOL(c2) {
-  return c2 === 10 || c2 === 13;
-}
-function is_WHITE_SPACE(c2) {
-  return c2 === 9 || c2 === 32;
-}
-function is_WS_OR_EOL(c2) {
-  return c2 === 9 || c2 === 32 || c2 === 10 || c2 === 13;
-}
-function is_FLOW_INDICATOR(c2) {
-  return c2 === 44 || c2 === 91 || c2 === 93 || c2 === 123 || c2 === 125;
-}
-function fromHexCode(c2) {
-  var lc;
-  if (48 <= c2 && c2 <= 57) {
-    return c2 - 48;
-  }
-  lc = c2 | 32;
-  if (97 <= lc && lc <= 102) {
-    return lc - 97 + 10;
-  }
-  return -1;
-}
-function escapedHexLen(c2) {
-  if (c2 === 120) {
-    return 2;
-  }
-  if (c2 === 117) {
-    return 4;
-  }
-  if (c2 === 85) {
-    return 8;
-  }
-  return 0;
-}
-function fromDecimalCode(c2) {
-  if (48 <= c2 && c2 <= 57) {
-    return c2 - 48;
-  }
-  return -1;
-}
-function simpleEscapeSequence(c2) {
-  return c2 === 48 ? "\0" : c2 === 97 ? "\x07" : c2 === 98 ? "\b" : c2 === 116 ? "	" : c2 === 9 ? "	" : c2 === 110 ? "\n" : c2 === 118 ? "\v" : c2 === 102 ? "\f" : c2 === 114 ? "\r" : c2 === 101 ? "\x1B" : c2 === 32 ? " " : c2 === 34 ? '"' : c2 === 47 ? "/" : c2 === 92 ? "\\" : c2 === 78 ? "…" : c2 === 95 ? " " : c2 === 76 ? "\u2028" : c2 === 80 ? "\u2029" : "";
-}
-function charFromCodepoint(c2) {
-  if (c2 <= 65535) {
-    return String.fromCharCode(c2);
-  }
-  return String.fromCharCode(
-    (c2 - 65536 >> 10) + 55296,
-    (c2 - 65536 & 1023) + 56320
-  );
-}
-var simpleEscapeCheck = new Array(256);
-var simpleEscapeMap = new Array(256);
-for (var i = 0; i < 256; i++) {
-  simpleEscapeCheck[i] = simpleEscapeSequence(i) ? 1 : 0;
-  simpleEscapeMap[i] = simpleEscapeSequence(i);
-}
-function State$1(input, options2) {
-  this.input = input;
-  this.filename = options2["filename"] || null;
-  this.schema = options2["schema"] || _default;
-  this.onWarning = options2["onWarning"] || null;
-  this.legacy = options2["legacy"] || false;
-  this.json = options2["json"] || false;
-  this.listener = options2["listener"] || null;
-  this.implicitTypes = this.schema.compiledImplicit;
-  this.typeMap = this.schema.compiledTypeMap;
-  this.length = input.length;
-  this.position = 0;
-  this.line = 0;
-  this.lineStart = 0;
-  this.lineIndent = 0;
-  this.firstTabInLine = -1;
-  this.documents = [];
-}
-function generateError(state, message2) {
-  var mark = {
-    name: state.filename,
-    buffer: state.input.slice(0, -1),
-    // omit trailing \0
-    position: state.position,
-    line: state.line,
-    column: state.position - state.lineStart
-  };
-  mark.snippet = snippet(mark);
-  return new exception(message2, mark);
-}
-function throwError(state, message2) {
-  throw generateError(state, message2);
-}
-function throwWarning(state, message2) {
-  if (state.onWarning) {
-    state.onWarning.call(null, generateError(state, message2));
-  }
-}
-var directiveHandlers = {
-  YAML: function handleYamlDirective(state, name, args) {
-    var match, major, minor;
-    if (state.version !== null) {
-      throwError(state, "duplication of %YAML directive");
-    }
-    if (args.length !== 1) {
-      throwError(state, "YAML directive accepts exactly one argument");
-    }
-    match = /^([0-9]+)\.([0-9]+)$/.exec(args[0]);
-    if (match === null) {
-      throwError(state, "ill-formed argument of the YAML directive");
-    }
-    major = parseInt(match[1], 10);
-    minor = parseInt(match[2], 10);
-    if (major !== 1) {
-      throwError(state, "unacceptable YAML version of the document");
-    }
-    state.version = args[0];
-    state.checkLineBreaks = minor < 2;
-    if (minor !== 1 && minor !== 2) {
-      throwWarning(state, "unsupported YAML version of the document");
-    }
-  },
-  TAG: function handleTagDirective(state, name, args) {
-    var handle, prefix;
-    if (args.length !== 2) {
-      throwError(state, "TAG directive accepts exactly two arguments");
-    }
-    handle = args[0];
-    prefix = args[1];
-    if (!PATTERN_TAG_HANDLE.test(handle)) {
-      throwError(state, "ill-formed tag handle (first argument) of the TAG directive");
-    }
-    if (_hasOwnProperty$1.call(state.tagMap, handle)) {
-      throwError(state, 'there is a previously declared suffix for "' + handle + '" tag handle');
-    }
-    if (!PATTERN_TAG_URI.test(prefix)) {
-      throwError(state, "ill-formed tag prefix (second argument) of the TAG directive");
-    }
-    try {
-      prefix = decodeURIComponent(prefix);
-    } catch (err) {
-      throwError(state, "tag prefix is malformed: " + prefix);
-    }
-    state.tagMap[handle] = prefix;
-  }
-};
-function captureSegment(state, start2, end2, checkJson) {
-  var _position, _length, _character, _result;
-  if (start2 < end2) {
-    _result = state.input.slice(start2, end2);
-    if (checkJson) {
-      for (_position = 0, _length = _result.length; _position < _length; _position += 1) {
-        _character = _result.charCodeAt(_position);
-        if (!(_character === 9 || 32 <= _character && _character <= 1114111)) {
-          throwError(state, "expected valid JSON character");
-        }
-      }
-    } else if (PATTERN_NON_PRINTABLE.test(_result)) {
-      throwError(state, "the stream contains non-printable characters");
-    }
-    state.result += _result;
-  }
-}
-function mergeMappings(state, destination, source, overridableKeys) {
-  var sourceKeys, key, index, quantity;
-  if (!common.isObject(source)) {
-    throwError(state, "cannot merge mappings; the provided source object is unacceptable");
-  }
-  sourceKeys = Object.keys(source);
-  for (index = 0, quantity = sourceKeys.length; index < quantity; index += 1) {
-    key = sourceKeys[index];
-    if (!_hasOwnProperty$1.call(destination, key)) {
-      destination[key] = source[key];
-      overridableKeys[key] = true;
-    }
-  }
-}
-function storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, startLine, startLineStart, startPos) {
-  var index, quantity;
-  if (Array.isArray(keyNode)) {
-    keyNode = Array.prototype.slice.call(keyNode);
-    for (index = 0, quantity = keyNode.length; index < quantity; index += 1) {
-      if (Array.isArray(keyNode[index])) {
-        throwError(state, "nested arrays are not supported inside keys");
-      }
-      if (typeof keyNode === "object" && _class(keyNode[index]) === "[object Object]") {
-        keyNode[index] = "[object Object]";
-      }
-    }
-  }
-  if (typeof keyNode === "object" && _class(keyNode) === "[object Object]") {
-    keyNode = "[object Object]";
-  }
-  keyNode = String(keyNode);
-  if (_result === null) {
-    _result = {};
-  }
-  if (keyTag === "tag:yaml.org,2002:merge") {
-    if (Array.isArray(valueNode)) {
-      for (index = 0, quantity = valueNode.length; index < quantity; index += 1) {
-        mergeMappings(state, _result, valueNode[index], overridableKeys);
-      }
-    } else {
-      mergeMappings(state, _result, valueNode, overridableKeys);
-    }
-  } else {
-    if (!state.json && !_hasOwnProperty$1.call(overridableKeys, keyNode) && _hasOwnProperty$1.call(_result, keyNode)) {
-      state.line = startLine || state.line;
-      state.lineStart = startLineStart || state.lineStart;
-      state.position = startPos || state.position;
-      throwError(state, "duplicated mapping key");
-    }
-    if (keyNode === "__proto__") {
-      Object.defineProperty(_result, keyNode, {
-        configurable: true,
-        enumerable: true,
-        writable: true,
-        value: valueNode
-      });
-    } else {
-      _result[keyNode] = valueNode;
-    }
-    delete overridableKeys[keyNode];
-  }
-  return _result;
-}
-function readLineBreak(state) {
-  var ch;
-  ch = state.input.charCodeAt(state.position);
-  if (ch === 10) {
-    state.position++;
-  } else if (ch === 13) {
-    state.position++;
-    if (state.input.charCodeAt(state.position) === 10) {
-      state.position++;
-    }
-  } else {
-    throwError(state, "a line break is expected");
-  }
-  state.line += 1;
-  state.lineStart = state.position;
-  state.firstTabInLine = -1;
-}
-function skipSeparationSpace(state, allowComments, checkIndent) {
-  var lineBreaks = 0, ch = state.input.charCodeAt(state.position);
-  while (ch !== 0) {
-    while (is_WHITE_SPACE(ch)) {
-      if (ch === 9 && state.firstTabInLine === -1) {
-        state.firstTabInLine = state.position;
-      }
-      ch = state.input.charCodeAt(++state.position);
-    }
-    if (allowComments && ch === 35) {
-      do {
-        ch = state.input.charCodeAt(++state.position);
-      } while (ch !== 10 && ch !== 13 && ch !== 0);
-    }
-    if (is_EOL(ch)) {
-      readLineBreak(state);
-      ch = state.input.charCodeAt(state.position);
-      lineBreaks++;
-      state.lineIndent = 0;
-      while (ch === 32) {
-        state.lineIndent++;
-        ch = state.input.charCodeAt(++state.position);
-      }
-    } else {
-      break;
-    }
-  }
-  if (checkIndent !== -1 && lineBreaks !== 0 && state.lineIndent < checkIndent) {
-    throwWarning(state, "deficient indentation");
-  }
-  return lineBreaks;
-}
-function testDocumentSeparator(state) {
-  var _position = state.position, ch;
-  ch = state.input.charCodeAt(_position);
-  if ((ch === 45 || ch === 46) && ch === state.input.charCodeAt(_position + 1) && ch === state.input.charCodeAt(_position + 2)) {
-    _position += 3;
-    ch = state.input.charCodeAt(_position);
-    if (ch === 0 || is_WS_OR_EOL(ch)) {
-      return true;
-    }
-  }
-  return false;
-}
-function writeFoldedLines(state, count) {
-  if (count === 1) {
-    state.result += " ";
-  } else if (count > 1) {
-    state.result += common.repeat("\n", count - 1);
-  }
-}
-function readPlainScalar(state, nodeIndent, withinFlowCollection) {
-  var preceding, following, captureStart, captureEnd, hasPendingContent, _line, _lineStart, _lineIndent, _kind = state.kind, _result = state.result, ch;
-  ch = state.input.charCodeAt(state.position);
-  if (is_WS_OR_EOL(ch) || is_FLOW_INDICATOR(ch) || ch === 35 || ch === 38 || ch === 42 || ch === 33 || ch === 124 || ch === 62 || ch === 39 || ch === 34 || ch === 37 || ch === 64 || ch === 96) {
-    return false;
-  }
-  if (ch === 63 || ch === 45) {
-    following = state.input.charCodeAt(state.position + 1);
-    if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
-      return false;
-    }
-  }
-  state.kind = "scalar";
-  state.result = "";
-  captureStart = captureEnd = state.position;
-  hasPendingContent = false;
-  while (ch !== 0) {
-    if (ch === 58) {
-      following = state.input.charCodeAt(state.position + 1);
-      if (is_WS_OR_EOL(following) || withinFlowCollection && is_FLOW_INDICATOR(following)) {
-        break;
-      }
-    } else if (ch === 35) {
-      preceding = state.input.charCodeAt(state.position - 1);
-      if (is_WS_OR_EOL(preceding)) {
-        break;
-      }
-    } else if (state.position === state.lineStart && testDocumentSeparator(state) || withinFlowCollection && is_FLOW_INDICATOR(ch)) {
-      break;
-    } else if (is_EOL(ch)) {
-      _line = state.line;
-      _lineStart = state.lineStart;
-      _lineIndent = state.lineIndent;
-      skipSeparationSpace(state, false, -1);
-      if (state.lineIndent >= nodeIndent) {
-        hasPendingContent = true;
-        ch = state.input.charCodeAt(state.position);
-        continue;
-      } else {
-        state.position = captureEnd;
-        state.line = _line;
-        state.lineStart = _lineStart;
-        state.lineIndent = _lineIndent;
-        break;
-      }
-    }
-    if (hasPendingContent) {
-      captureSegment(state, captureStart, captureEnd, false);
-      writeFoldedLines(state, state.line - _line);
-      captureStart = captureEnd = state.position;
-      hasPendingContent = false;
-    }
-    if (!is_WHITE_SPACE(ch)) {
-      captureEnd = state.position + 1;
-    }
-    ch = state.input.charCodeAt(++state.position);
-  }
-  captureSegment(state, captureStart, captureEnd, false);
-  if (state.result) {
-    return true;
-  }
-  state.kind = _kind;
-  state.result = _result;
-  return false;
-}
-function readSingleQuotedScalar(state, nodeIndent) {
-  var ch, captureStart, captureEnd;
-  ch = state.input.charCodeAt(state.position);
-  if (ch !== 39) {
-    return false;
-  }
-  state.kind = "scalar";
-  state.result = "";
-  state.position++;
-  captureStart = captureEnd = state.position;
-  while ((ch = state.input.charCodeAt(state.position)) !== 0) {
-    if (ch === 39) {
-      captureSegment(state, captureStart, state.position, true);
-      ch = state.input.charCodeAt(++state.position);
-      if (ch === 39) {
-        captureStart = state.position;
-        state.position++;
-        captureEnd = state.position;
-      } else {
-        return true;
-      }
-    } else if (is_EOL(ch)) {
-      captureSegment(state, captureStart, captureEnd, true);
-      writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
-      captureStart = captureEnd = state.position;
-    } else if (state.position === state.lineStart && testDocumentSeparator(state)) {
-      throwError(state, "unexpected end of the document within a single quoted scalar");
-    } else {
-      state.position++;
-      captureEnd = state.position;
-    }
-  }
-  throwError(state, "unexpected end of the stream within a single quoted scalar");
-}
-function readDoubleQuotedScalar(state, nodeIndent) {
-  var captureStart, captureEnd, hexLength, hexResult, tmp, ch;
-  ch = state.input.charCodeAt(state.position);
-  if (ch !== 34) {
-    return false;
-  }
-  state.kind = "scalar";
-  state.result = "";
-  state.position++;
-  captureStart = captureEnd = state.position;
-  while ((ch = state.input.charCodeAt(state.position)) !== 0) {
-    if (ch === 34) {
-      captureSegment(state, captureStart, state.position, true);
-      state.position++;
-      return true;
-    } else if (ch === 92) {
-      captureSegment(state, captureStart, state.position, true);
-      ch = state.input.charCodeAt(++state.position);
-      if (is_EOL(ch)) {
-        skipSeparationSpace(state, false, nodeIndent);
-      } else if (ch < 256 && simpleEscapeCheck[ch]) {
-        state.result += simpleEscapeMap[ch];
-        state.position++;
-      } else if ((tmp = escapedHexLen(ch)) > 0) {
-        hexLength = tmp;
-        hexResult = 0;
-        for (; hexLength > 0; hexLength--) {
-          ch = state.input.charCodeAt(++state.position);
-          if ((tmp = fromHexCode(ch)) >= 0) {
-            hexResult = (hexResult << 4) + tmp;
-          } else {
-            throwError(state, "expected hexadecimal character");
-          }
-        }
-        state.result += charFromCodepoint(hexResult);
-        state.position++;
-      } else {
-        throwError(state, "unknown escape sequence");
-      }
-      captureStart = captureEnd = state.position;
-    } else if (is_EOL(ch)) {
-      captureSegment(state, captureStart, captureEnd, true);
-      writeFoldedLines(state, skipSeparationSpace(state, false, nodeIndent));
-      captureStart = captureEnd = state.position;
-    } else if (state.position === state.lineStart && testDocumentSeparator(state)) {
-      throwError(state, "unexpected end of the document within a double quoted scalar");
-    } else {
-      state.position++;
-      captureEnd = state.position;
-    }
-  }
-  throwError(state, "unexpected end of the stream within a double quoted scalar");
-}
-function readFlowCollection(state, nodeIndent) {
-  var readNext = true, _line, _lineStart, _pos, _tag = state.tag, _result, _anchor = state.anchor, following, terminator, isPair, isExplicitPair, isMapping, overridableKeys = /* @__PURE__ */ Object.create(null), keyNode, keyTag, valueNode, ch;
-  ch = state.input.charCodeAt(state.position);
-  if (ch === 91) {
-    terminator = 93;
-    isMapping = false;
-    _result = [];
-  } else if (ch === 123) {
-    terminator = 125;
-    isMapping = true;
-    _result = {};
-  } else {
-    return false;
-  }
-  if (state.anchor !== null) {
-    state.anchorMap[state.anchor] = _result;
-  }
-  ch = state.input.charCodeAt(++state.position);
-  while (ch !== 0) {
-    skipSeparationSpace(state, true, nodeIndent);
-    ch = state.input.charCodeAt(state.position);
-    if (ch === terminator) {
-      state.position++;
-      state.tag = _tag;
-      state.anchor = _anchor;
-      state.kind = isMapping ? "mapping" : "sequence";
-      state.result = _result;
-      return true;
-    } else if (!readNext) {
-      throwError(state, "missed comma between flow collection entries");
-    } else if (ch === 44) {
-      throwError(state, "expected the node content, but found ','");
-    }
-    keyTag = keyNode = valueNode = null;
-    isPair = isExplicitPair = false;
-    if (ch === 63) {
-      following = state.input.charCodeAt(state.position + 1);
-      if (is_WS_OR_EOL(following)) {
-        isPair = isExplicitPair = true;
-        state.position++;
-        skipSeparationSpace(state, true, nodeIndent);
-      }
-    }
-    _line = state.line;
-    _lineStart = state.lineStart;
-    _pos = state.position;
-    composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
-    keyTag = state.tag;
-    keyNode = state.result;
-    skipSeparationSpace(state, true, nodeIndent);
-    ch = state.input.charCodeAt(state.position);
-    if ((isExplicitPair || state.line === _line) && ch === 58) {
-      isPair = true;
-      ch = state.input.charCodeAt(++state.position);
-      skipSeparationSpace(state, true, nodeIndent);
-      composeNode(state, nodeIndent, CONTEXT_FLOW_IN, false, true);
-      valueNode = state.result;
-    }
-    if (isMapping) {
-      storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos);
-    } else if (isPair) {
-      _result.push(storeMappingPair(state, null, overridableKeys, keyTag, keyNode, valueNode, _line, _lineStart, _pos));
-    } else {
-      _result.push(keyNode);
-    }
-    skipSeparationSpace(state, true, nodeIndent);
-    ch = state.input.charCodeAt(state.position);
-    if (ch === 44) {
-      readNext = true;
-      ch = state.input.charCodeAt(++state.position);
-    } else {
-      readNext = false;
-    }
-  }
-  throwError(state, "unexpected end of the stream within a flow collection");
-}
-function readBlockScalar(state, nodeIndent) {
-  var captureStart, folding, chomping = CHOMPING_CLIP, didReadContent = false, detectedIndent = false, textIndent = nodeIndent, emptyLines = 0, atMoreIndented = false, tmp, ch;
-  ch = state.input.charCodeAt(state.position);
-  if (ch === 124) {
-    folding = false;
-  } else if (ch === 62) {
-    folding = true;
-  } else {
-    return false;
-  }
-  state.kind = "scalar";
-  state.result = "";
-  while (ch !== 0) {
-    ch = state.input.charCodeAt(++state.position);
-    if (ch === 43 || ch === 45) {
-      if (CHOMPING_CLIP === chomping) {
-        chomping = ch === 43 ? CHOMPING_KEEP : CHOMPING_STRIP;
-      } else {
-        throwError(state, "repeat of a chomping mode identifier");
-      }
-    } else if ((tmp = fromDecimalCode(ch)) >= 0) {
-      if (tmp === 0) {
-        throwError(state, "bad explicit indentation width of a block scalar; it cannot be less than one");
-      } else if (!detectedIndent) {
-        textIndent = nodeIndent + tmp - 1;
-        detectedIndent = true;
-      } else {
-        throwError(state, "repeat of an indentation width identifier");
-      }
-    } else {
-      break;
-    }
-  }
-  if (is_WHITE_SPACE(ch)) {
-    do {
-      ch = state.input.charCodeAt(++state.position);
-    } while (is_WHITE_SPACE(ch));
-    if (ch === 35) {
-      do {
-        ch = state.input.charCodeAt(++state.position);
-      } while (!is_EOL(ch) && ch !== 0);
-    }
-  }
-  while (ch !== 0) {
-    readLineBreak(state);
-    state.lineIndent = 0;
-    ch = state.input.charCodeAt(state.position);
-    while ((!detectedIndent || state.lineIndent < textIndent) && ch === 32) {
-      state.lineIndent++;
-      ch = state.input.charCodeAt(++state.position);
-    }
-    if (!detectedIndent && state.lineIndent > textIndent) {
-      textIndent = state.lineIndent;
-    }
-    if (is_EOL(ch)) {
-      emptyLines++;
-      continue;
-    }
-    if (state.lineIndent < textIndent) {
-      if (chomping === CHOMPING_KEEP) {
-        state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines);
-      } else if (chomping === CHOMPING_CLIP) {
-        if (didReadContent) {
-          state.result += "\n";
-        }
-      }
-      break;
-    }
-    if (folding) {
-      if (is_WHITE_SPACE(ch)) {
-        atMoreIndented = true;
-        state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines);
-      } else if (atMoreIndented) {
-        atMoreIndented = false;
-        state.result += common.repeat("\n", emptyLines + 1);
-      } else if (emptyLines === 0) {
-        if (didReadContent) {
-          state.result += " ";
-        }
-      } else {
-        state.result += common.repeat("\n", emptyLines);
-      }
-    } else {
-      state.result += common.repeat("\n", didReadContent ? 1 + emptyLines : emptyLines);
-    }
-    didReadContent = true;
-    detectedIndent = true;
-    emptyLines = 0;
-    captureStart = state.position;
-    while (!is_EOL(ch) && ch !== 0) {
-      ch = state.input.charCodeAt(++state.position);
-    }
-    captureSegment(state, captureStart, state.position, false);
-  }
-  return true;
-}
-function readBlockSequence(state, nodeIndent) {
-  var _line, _tag = state.tag, _anchor = state.anchor, _result = [], following, detected = false, ch;
-  if (state.firstTabInLine !== -1)
-    return false;
-  if (state.anchor !== null) {
-    state.anchorMap[state.anchor] = _result;
-  }
-  ch = state.input.charCodeAt(state.position);
-  while (ch !== 0) {
-    if (state.firstTabInLine !== -1) {
-      state.position = state.firstTabInLine;
-      throwError(state, "tab characters must not be used in indentation");
-    }
-    if (ch !== 45) {
-      break;
-    }
-    following = state.input.charCodeAt(state.position + 1);
-    if (!is_WS_OR_EOL(following)) {
-      break;
-    }
-    detected = true;
-    state.position++;
-    if (skipSeparationSpace(state, true, -1)) {
-      if (state.lineIndent <= nodeIndent) {
-        _result.push(null);
-        ch = state.input.charCodeAt(state.position);
-        continue;
-      }
-    }
-    _line = state.line;
-    composeNode(state, nodeIndent, CONTEXT_BLOCK_IN, false, true);
-    _result.push(state.result);
-    skipSeparationSpace(state, true, -1);
-    ch = state.input.charCodeAt(state.position);
-    if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {
-      throwError(state, "bad indentation of a sequence entry");
-    } else if (state.lineIndent < nodeIndent) {
-      break;
-    }
-  }
-  if (detected) {
-    state.tag = _tag;
-    state.anchor = _anchor;
-    state.kind = "sequence";
-    state.result = _result;
-    return true;
-  }
-  return false;
-}
-function readBlockMapping(state, nodeIndent, flowIndent) {
-  var following, allowCompact, _line, _keyLine, _keyLineStart, _keyPos, _tag = state.tag, _anchor = state.anchor, _result = {}, overridableKeys = /* @__PURE__ */ Object.create(null), keyTag = null, keyNode = null, valueNode = null, atExplicitKey = false, detected = false, ch;
-  if (state.firstTabInLine !== -1)
-    return false;
-  if (state.anchor !== null) {
-    state.anchorMap[state.anchor] = _result;
-  }
-  ch = state.input.charCodeAt(state.position);
-  while (ch !== 0) {
-    if (!atExplicitKey && state.firstTabInLine !== -1) {
-      state.position = state.firstTabInLine;
-      throwError(state, "tab characters must not be used in indentation");
-    }
-    following = state.input.charCodeAt(state.position + 1);
-    _line = state.line;
-    if ((ch === 63 || ch === 58) && is_WS_OR_EOL(following)) {
-      if (ch === 63) {
-        if (atExplicitKey) {
-          storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
-          keyTag = keyNode = valueNode = null;
-        }
-        detected = true;
-        atExplicitKey = true;
-        allowCompact = true;
-      } else if (atExplicitKey) {
-        atExplicitKey = false;
-        allowCompact = true;
-      } else {
-        throwError(state, "incomplete explicit mapping pair; a key node is missed; or followed by a non-tabulated empty line");
-      }
-      state.position += 1;
-      ch = following;
-    } else {
-      _keyLine = state.line;
-      _keyLineStart = state.lineStart;
-      _keyPos = state.position;
-      if (!composeNode(state, flowIndent, CONTEXT_FLOW_OUT, false, true)) {
-        break;
-      }
-      if (state.line === _line) {
-        ch = state.input.charCodeAt(state.position);
-        while (is_WHITE_SPACE(ch)) {
-          ch = state.input.charCodeAt(++state.position);
-        }
-        if (ch === 58) {
-          ch = state.input.charCodeAt(++state.position);
-          if (!is_WS_OR_EOL(ch)) {
-            throwError(state, "a whitespace character is expected after the key-value separator within a block mapping");
-          }
-          if (atExplicitKey) {
-            storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
-            keyTag = keyNode = valueNode = null;
-          }
-          detected = true;
-          atExplicitKey = false;
-          allowCompact = false;
-          keyTag = state.tag;
-          keyNode = state.result;
-        } else if (detected) {
-          throwError(state, "can not read an implicit mapping pair; a colon is missed");
-        } else {
-          state.tag = _tag;
-          state.anchor = _anchor;
-          return true;
-        }
-      } else if (detected) {
-        throwError(state, "can not read a block mapping entry; a multiline key may not be an implicit key");
-      } else {
-        state.tag = _tag;
-        state.anchor = _anchor;
-        return true;
-      }
-    }
-    if (state.line === _line || state.lineIndent > nodeIndent) {
-      if (atExplicitKey) {
-        _keyLine = state.line;
-        _keyLineStart = state.lineStart;
-        _keyPos = state.position;
-      }
-      if (composeNode(state, nodeIndent, CONTEXT_BLOCK_OUT, true, allowCompact)) {
-        if (atExplicitKey) {
-          keyNode = state.result;
-        } else {
-          valueNode = state.result;
-        }
-      }
-      if (!atExplicitKey) {
-        storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, valueNode, _keyLine, _keyLineStart, _keyPos);
-        keyTag = keyNode = valueNode = null;
-      }
-      skipSeparationSpace(state, true, -1);
-      ch = state.input.charCodeAt(state.position);
-    }
-    if ((state.line === _line || state.lineIndent > nodeIndent) && ch !== 0) {
-      throwError(state, "bad indentation of a mapping entry");
-    } else if (state.lineIndent < nodeIndent) {
-      break;
-    }
-  }
-  if (atExplicitKey) {
-    storeMappingPair(state, _result, overridableKeys, keyTag, keyNode, null, _keyLine, _keyLineStart, _keyPos);
-  }
-  if (detected) {
-    state.tag = _tag;
-    state.anchor = _anchor;
-    state.kind = "mapping";
-    state.result = _result;
-  }
-  return detected;
-}
-function readTagProperty(state) {
-  var _position, isVerbatim = false, isNamed = false, tagHandle, tagName, ch;
-  ch = state.input.charCodeAt(state.position);
-  if (ch !== 33)
-    return false;
-  if (state.tag !== null) {
-    throwError(state, "duplication of a tag property");
-  }
-  ch = state.input.charCodeAt(++state.position);
-  if (ch === 60) {
-    isVerbatim = true;
-    ch = state.input.charCodeAt(++state.position);
-  } else if (ch === 33) {
-    isNamed = true;
-    tagHandle = "!!";
-    ch = state.input.charCodeAt(++state.position);
-  } else {
-    tagHandle = "!";
-  }
-  _position = state.position;
-  if (isVerbatim) {
-    do {
-      ch = state.input.charCodeAt(++state.position);
-    } while (ch !== 0 && ch !== 62);
-    if (state.position < state.length) {
-      tagName = state.input.slice(_position, state.position);
-      ch = state.input.charCodeAt(++state.position);
-    } else {
-      throwError(state, "unexpected end of the stream within a verbatim tag");
-    }
-  } else {
-    while (ch !== 0 && !is_WS_OR_EOL(ch)) {
-      if (ch === 33) {
-        if (!isNamed) {
-          tagHandle = state.input.slice(_position - 1, state.position + 1);
-          if (!PATTERN_TAG_HANDLE.test(tagHandle)) {
-            throwError(state, "named tag handle cannot contain such characters");
-          }
-          isNamed = true;
-          _position = state.position + 1;
-        } else {
-          throwError(state, "tag suffix cannot contain exclamation marks");
-        }
-      }
-      ch = state.input.charCodeAt(++state.position);
-    }
-    tagName = state.input.slice(_position, state.position);
-    if (PATTERN_FLOW_INDICATORS.test(tagName)) {
-      throwError(state, "tag suffix cannot contain flow indicator characters");
-    }
-  }
-  if (tagName && !PATTERN_TAG_URI.test(tagName)) {
-    throwError(state, "tag name cannot contain such characters: " + tagName);
-  }
-  try {
-    tagName = decodeURIComponent(tagName);
-  } catch (err) {
-    throwError(state, "tag name is malformed: " + tagName);
-  }
-  if (isVerbatim) {
-    state.tag = tagName;
-  } else if (_hasOwnProperty$1.call(state.tagMap, tagHandle)) {
-    state.tag = state.tagMap[tagHandle] + tagName;
-  } else if (tagHandle === "!") {
-    state.tag = "!" + tagName;
-  } else if (tagHandle === "!!") {
-    state.tag = "tag:yaml.org,2002:" + tagName;
-  } else {
-    throwError(state, 'undeclared tag handle "' + tagHandle + '"');
-  }
-  return true;
-}
-function readAnchorProperty(state) {
-  var _position, ch;
-  ch = state.input.charCodeAt(state.position);
-  if (ch !== 38)
-    return false;
-  if (state.anchor !== null) {
-    throwError(state, "duplication of an anchor property");
-  }
-  ch = state.input.charCodeAt(++state.position);
-  _position = state.position;
-  while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
-    ch = state.input.charCodeAt(++state.position);
-  }
-  if (state.position === _position) {
-    throwError(state, "name of an anchor node must contain at least one character");
-  }
-  state.anchor = state.input.slice(_position, state.position);
-  return true;
-}
-function readAlias(state) {
-  var _position, alias, ch;
-  ch = state.input.charCodeAt(state.position);
-  if (ch !== 42)
-    return false;
-  ch = state.input.charCodeAt(++state.position);
-  _position = state.position;
-  while (ch !== 0 && !is_WS_OR_EOL(ch) && !is_FLOW_INDICATOR(ch)) {
-    ch = state.input.charCodeAt(++state.position);
-  }
-  if (state.position === _position) {
-    throwError(state, "name of an alias node must contain at least one character");
-  }
-  alias = state.input.slice(_position, state.position);
-  if (!_hasOwnProperty$1.call(state.anchorMap, alias)) {
-    throwError(state, 'unidentified alias "' + alias + '"');
-  }
-  state.result = state.anchorMap[alias];
-  skipSeparationSpace(state, true, -1);
-  return true;
-}
-function composeNode(state, parentIndent, nodeContext, allowToSeek, allowCompact) {
-  var allowBlockStyles, allowBlockScalars, allowBlockCollections, indentStatus = 1, atNewLine = false, hasContent = false, typeIndex, typeQuantity, typeList, type2, flowIndent, blockIndent;
-  if (state.listener !== null) {
-    state.listener("open", state);
-  }
-  state.tag = null;
-  state.anchor = null;
-  state.kind = null;
-  state.result = null;
-  allowBlockStyles = allowBlockScalars = allowBlockCollections = CONTEXT_BLOCK_OUT === nodeContext || CONTEXT_BLOCK_IN === nodeContext;
-  if (allowToSeek) {
-    if (skipSeparationSpace(state, true, -1)) {
-      atNewLine = true;
-      if (state.lineIndent > parentIndent) {
-        indentStatus = 1;
-      } else if (state.lineIndent === parentIndent) {
-        indentStatus = 0;
-      } else if (state.lineIndent < parentIndent) {
-        indentStatus = -1;
-      }
-    }
-  }
-  if (indentStatus === 1) {
-    while (readTagProperty(state) || readAnchorProperty(state)) {
-      if (skipSeparationSpace(state, true, -1)) {
-        atNewLine = true;
-        allowBlockCollections = allowBlockStyles;
-        if (state.lineIndent > parentIndent) {
-          indentStatus = 1;
-        } else if (state.lineIndent === parentIndent) {
-          indentStatus = 0;
-        } else if (state.lineIndent < parentIndent) {
-          indentStatus = -1;
-        }
-      } else {
-        allowBlockCollections = false;
-      }
-    }
-  }
-  if (allowBlockCollections) {
-    allowBlockCollections = atNewLine || allowCompact;
-  }
-  if (indentStatus === 1 || CONTEXT_BLOCK_OUT === nodeContext) {
-    if (CONTEXT_FLOW_IN === nodeContext || CONTEXT_FLOW_OUT === nodeContext) {
-      flowIndent = parentIndent;
-    } else {
-      flowIndent = parentIndent + 1;
-    }
-    blockIndent = state.position - state.lineStart;
-    if (indentStatus === 1) {
-      if (allowBlockCollections && (readBlockSequence(state, blockIndent) || readBlockMapping(state, blockIndent, flowIndent)) || readFlowCollection(state, flowIndent)) {
-        hasContent = true;
-      } else {
-        if (allowBlockScalars && readBlockScalar(state, flowIndent) || readSingleQuotedScalar(state, flowIndent) || readDoubleQuotedScalar(state, flowIndent)) {
-          hasContent = true;
-        } else if (readAlias(state)) {
-          hasContent = true;
-          if (state.tag !== null || state.anchor !== null) {
-            throwError(state, "alias node should not have any properties");
-          }
-        } else if (readPlainScalar(state, flowIndent, CONTEXT_FLOW_IN === nodeContext)) {
-          hasContent = true;
-          if (state.tag === null) {
-            state.tag = "?";
-          }
-        }
-        if (state.anchor !== null) {
-          state.anchorMap[state.anchor] = state.result;
-        }
-      }
-    } else if (indentStatus === 0) {
-      hasContent = allowBlockCollections && readBlockSequence(state, blockIndent);
-    }
-  }
-  if (state.tag === null) {
-    if (state.anchor !== null) {
-      state.anchorMap[state.anchor] = state.result;
-    }
-  } else if (state.tag === "?") {
-    if (state.result !== null && state.kind !== "scalar") {
-      throwError(state, 'unacceptable node kind for !<?> tag; it should be "scalar", not "' + state.kind + '"');
-    }
-    for (typeIndex = 0, typeQuantity = state.implicitTypes.length; typeIndex < typeQuantity; typeIndex += 1) {
-      type2 = state.implicitTypes[typeIndex];
-      if (type2.resolve(state.result)) {
-        state.result = type2.construct(state.result);
-        state.tag = type2.tag;
-        if (state.anchor !== null) {
-          state.anchorMap[state.anchor] = state.result;
-        }
-        break;
-      }
-    }
-  } else if (state.tag !== "!") {
-    if (_hasOwnProperty$1.call(state.typeMap[state.kind || "fallback"], state.tag)) {
-      type2 = state.typeMap[state.kind || "fallback"][state.tag];
-    } else {
-      type2 = null;
-      typeList = state.typeMap.multi[state.kind || "fallback"];
-      for (typeIndex = 0, typeQuantity = typeList.length; typeIndex < typeQuantity; typeIndex += 1) {
-        if (state.tag.slice(0, typeList[typeIndex].tag.length) === typeList[typeIndex].tag) {
-          type2 = typeList[typeIndex];
-          break;
-        }
-      }
-    }
-    if (!type2) {
-      throwError(state, "unknown tag !<" + state.tag + ">");
-    }
-    if (state.result !== null && type2.kind !== state.kind) {
-      throwError(state, "unacceptable node kind for !<" + state.tag + '> tag; it should be "' + type2.kind + '", not "' + state.kind + '"');
-    }
-    if (!type2.resolve(state.result, state.tag)) {
-      throwError(state, "cannot resolve a node with !<" + state.tag + "> explicit tag");
-    } else {
-      state.result = type2.construct(state.result, state.tag);
-      if (state.anchor !== null) {
-        state.anchorMap[state.anchor] = state.result;
-      }
-    }
-  }
-  if (state.listener !== null) {
-    state.listener("close", state);
-  }
-  return state.tag !== null || state.anchor !== null || hasContent;
-}
-function readDocument(state) {
-  var documentStart = state.position, _position, directiveName, directiveArgs, hasDirectives = false, ch;
-  state.version = null;
-  state.checkLineBreaks = state.legacy;
-  state.tagMap = /* @__PURE__ */ Object.create(null);
-  state.anchorMap = /* @__PURE__ */ Object.create(null);
-  while ((ch = state.input.charCodeAt(state.position)) !== 0) {
-    skipSeparationSpace(state, true, -1);
-    ch = state.input.charCodeAt(state.position);
-    if (state.lineIndent > 0 || ch !== 37) {
-      break;
-    }
-    hasDirectives = true;
-    ch = state.input.charCodeAt(++state.position);
-    _position = state.position;
-    while (ch !== 0 && !is_WS_OR_EOL(ch)) {
-      ch = state.input.charCodeAt(++state.position);
-    }
-    directiveName = state.input.slice(_position, state.position);
-    directiveArgs = [];
-    if (directiveName.length < 1) {
-      throwError(state, "directive name must not be less than one character in length");
-    }
-    while (ch !== 0) {
-      while (is_WHITE_SPACE(ch)) {
-        ch = state.input.charCodeAt(++state.position);
-      }
-      if (ch === 35) {
-        do {
-          ch = state.input.charCodeAt(++state.position);
-        } while (ch !== 0 && !is_EOL(ch));
-        break;
-      }
-      if (is_EOL(ch))
-        break;
-      _position = state.position;
-      while (ch !== 0 && !is_WS_OR_EOL(ch)) {
-        ch = state.input.charCodeAt(++state.position);
-      }
-      directiveArgs.push(state.input.slice(_position, state.position));
-    }
-    if (ch !== 0)
-      readLineBreak(state);
-    if (_hasOwnProperty$1.call(directiveHandlers, directiveName)) {
-      directiveHandlers[directiveName](state, directiveName, directiveArgs);
-    } else {
-      throwWarning(state, 'unknown document directive "' + directiveName + '"');
-    }
-  }
-  skipSeparationSpace(state, true, -1);
-  if (state.lineIndent === 0 && state.input.charCodeAt(state.position) === 45 && state.input.charCodeAt(state.position + 1) === 45 && state.input.charCodeAt(state.position + 2) === 45) {
-    state.position += 3;
-    skipSeparationSpace(state, true, -1);
-  } else if (hasDirectives) {
-    throwError(state, "directives end mark is expected");
-  }
-  composeNode(state, state.lineIndent - 1, CONTEXT_BLOCK_OUT, false, true);
-  skipSeparationSpace(state, true, -1);
-  if (state.checkLineBreaks && PATTERN_NON_ASCII_LINE_BREAKS.test(state.input.slice(documentStart, state.position))) {
-    throwWarning(state, "non-ASCII line breaks are interpreted as content");
-  }
-  state.documents.push(state.result);
-  if (state.position === state.lineStart && testDocumentSeparator(state)) {
-    if (state.input.charCodeAt(state.position) === 46) {
-      state.position += 3;
-      skipSeparationSpace(state, true, -1);
-    }
-    return;
-  }
-  if (state.position < state.length - 1) {
-    throwError(state, "end of the stream or a document separator is expected");
-  } else {
-    return;
-  }
-}
-function loadDocuments(input, options2) {
-  input = String(input);
-  options2 = options2 || {};
-  if (input.length !== 0) {
-    if (input.charCodeAt(input.length - 1) !== 10 && input.charCodeAt(input.length - 1) !== 13) {
-      input += "\n";
-    }
-    if (input.charCodeAt(0) === 65279) {
-      input = input.slice(1);
-    }
-  }
-  var state = new State$1(input, options2);
-  var nullpos = input.indexOf("\0");
-  if (nullpos !== -1) {
-    state.position = nullpos;
-    throwError(state, "null byte is not allowed in input");
-  }
-  state.input += "\0";
-  while (state.input.charCodeAt(state.position) === 32) {
-    state.lineIndent += 1;
-    state.position += 1;
-  }
-  while (state.position < state.length - 1) {
-    readDocument(state);
-  }
-  return state.documents;
-}
-function loadAll$1(input, iterator2, options2) {
-  if (iterator2 !== null && typeof iterator2 === "object" && typeof options2 === "undefined") {
-    options2 = iterator2;
-    iterator2 = null;
-  }
-  var documents2 = loadDocuments(input, options2);
-  if (typeof iterator2 !== "function") {
-    return documents2;
-  }
-  for (var index = 0, length = documents2.length; index < length; index += 1) {
-    iterator2(documents2[index]);
-  }
-}
-function load$1(input, options2) {
-  var documents2 = loadDocuments(input, options2);
-  if (documents2.length === 0) {
-    return void 0;
-  } else if (documents2.length === 1) {
-    return documents2[0];
-  }
-  throw new exception("expected a single document in the stream, but found more");
-}
-var loadAll_1 = loadAll$1;
-var load_1 = load$1;
-var loader$3 = {
-  loadAll: loadAll_1,
-  load: load_1
-};
-var FAILSAFE_SCHEMA = failsafe;
-var load = loader$3.load;
-const frontMatterRegex = /^-{3}\s*[\n\r](.*?)[\n\r]-{3}\s*[\n\r]+/s;
-function extractFrontMatter(text, db2) {
-  var _a;
-  const matches = text.match(frontMatterRegex);
-  if (matches) {
-    const parsed = load(matches[1], {
-      // To keep things simple, only allow strings, arrays, and plain objects.
-      // https://www.yaml.org/spec/1.2/spec.html#id2802346
-      schema: FAILSAFE_SCHEMA
-    });
-    if (parsed == null ? void 0 : parsed.title) {
-      (_a = db2.setDiagramTitle) == null ? void 0 : _a.call(db2, parsed.title);
-    }
-    return text.slice(matches[0].length);
-  } else {
-    return text;
-  }
-}
-const directive$1 = /%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi;
-const anyComment = /\s*%%.*\n/gm;
-const detectors = {};
-const detectType = function(text, config2) {
-  text = text.replace(frontMatterRegex, "").replace(directive$1, "").replace(anyComment, "\n");
-  for (const [key, { detector: detector2 }] of Object.entries(detectors)) {
-    const diagram = detector2(text, config2);
-    if (diagram) {
-      return key;
-    }
-  }
-  throw new Error(`No diagram type detected for text: ${text}`);
-};
-const registerLazyLoadedDiagrams = (...diagrams2) => {
-  for (const { id: id2, detector: detector2, loader: loader2 } of diagrams2) {
-    addDetector(id2, detector2, loader2);
-  }
-};
-const addDetector = (key, detector2, loader2) => {
-  if (detectors[key]) {
-    log$1.error(`Detector with key ${key} already exists`);
-  } else {
-    detectors[key] = { detector: detector2, loader: loader2 };
-  }
-  log$1.debug(`Detector with key ${key} added${loader2 ? " with loader" : ""}`);
-};
-const getDiagramLoader = (key) => detectors[key].loader;
-const assignWithDepth = function(dst, src, config2) {
-  const { depth, clobber } = Object.assign({ depth: 2, clobber: false }, config2);
-  if (Array.isArray(src) && !Array.isArray(dst)) {
-    src.forEach((s) => assignWithDepth(dst, s, config2));
-    return dst;
-  } else if (Array.isArray(src) && Array.isArray(dst)) {
-    src.forEach((s) => {
-      if (!dst.includes(s)) {
-        dst.push(s);
-      }
-    });
-    return dst;
-  }
-  if (dst === void 0 || depth <= 0) {
-    if (dst !== void 0 && dst !== null && typeof dst === "object" && typeof src === "object") {
-      return Object.assign(dst, src);
-    } else {
-      return src;
-    }
-  }
-  if (src !== void 0 && typeof dst === "object" && typeof src === "object") {
-    Object.keys(src).forEach((key) => {
-      if (typeof src[key] === "object" && (dst[key] === void 0 || typeof dst[key] === "object")) {
-        if (dst[key] === void 0) {
-          dst[key] = Array.isArray(src[key]) ? [] : {};
-        }
-        dst[key] = assignWithDepth(dst[key], src[key], { depth: depth - 1, clobber });
-      } else if (clobber || typeof dst[key] !== "object" && typeof src[key] !== "object") {
-        dst[key] = src[key];
-      }
-    });
-  }
-  return dst;
-};
-const assignWithDepth$1 = assignWithDepth;
-const d3CurveTypes = {
-  curveBasis: src/* curveBasis */.$0Z,
-  curveBasisClosed: src/* curveBasisClosed */.Dts,
-  curveBasisOpen: src/* curveBasisOpen */.WQY,
-  curveBumpX: src/* curveBumpX */.qpX,
-  curveBumpY: src/* curveBumpY */.u93,
-  curveBundle: src/* curveBundle */.tFB,
-  curveCardinalClosed: src/* curveCardinalClosed */.OvA,
-  curveCardinalOpen: src/* curveCardinalOpen */.dCK,
-  curveCardinal: src/* curveCardinal */.YY7,
-  curveCatmullRomClosed: src/* curveCatmullRomClosed */.fGX,
-  curveCatmullRomOpen: src/* curveCatmullRomOpen */.$m7,
-  curveCatmullRom: src/* curveCatmullRom */.zgE,
-  curveLinear: src/* curveLinear */.c_6,
-  curveLinearClosed: src/* curveLinearClosed */.fxm,
-  curveMonotoneX: src/* curveMonotoneX */.FdL,
-  curveMonotoneY: src/* curveMonotoneY */.ak_,
-  curveNatural: src/* curveNatural */.SxZ,
-  curveStep: src/* curveStep */.eA_,
-  curveStepAfter: src/* curveStepAfter */.jsv,
-  curveStepBefore: src/* curveStepBefore */.iJ
-};
-const directive = /%{2}{\s*(?:(\w+)\s*:|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi;
-const directiveWithoutOpen = /\s*(?:(\w+)(?=:):|(\w+))\s*(?:(\w+)|((?:(?!}%{2}).|\r?\n)*))?\s*(?:}%{2})?/gi;
-const detectInit = function(text, config2) {
-  const inits = detectDirective(text, /(?:init\b)|(?:initialize\b)/);
-  let results = {};
-  if (Array.isArray(inits)) {
-    const args = inits.map((init2) => init2.args);
-    directiveSanitizer(args);
-    results = assignWithDepth$1(results, [...args]);
-  } else {
-    results = inits.args;
-  }
-  if (results) {
-    let type2 = detectType(text, config2);
-    ["config"].forEach((prop) => {
-      if (results[prop] !== void 0) {
-        if (type2 === "flowchart-v2") {
-          type2 = "flowchart";
-        }
-        results[type2] = results[prop];
-        delete results[prop];
-      }
-    });
-  }
-  return results;
-};
-const detectDirective = function(text, type2 = null) {
-  try {
-    const commentWithoutDirectives = new RegExp(
-      `[%]{2}(?![{]${directiveWithoutOpen.source})(?=[}][%]{2}).*
-`,
-      "ig"
-    );
-    text = text.trim().replace(commentWithoutDirectives, "").replace(/'/gm, '"');
-    log$1.debug(
-      `Detecting diagram directive${type2 !== null ? " type:" + type2 : ""} based on the text:${text}`
-    );
-    let match;
-    const result = [];
-    while ((match = directive.exec(text)) !== null) {
-      if (match.index === directive.lastIndex) {
-        directive.lastIndex++;
-      }
-      if (match && !type2 || type2 && match[1] && match[1].match(type2) || type2 && match[2] && match[2].match(type2)) {
-        const type22 = match[1] ? match[1] : match[2];
-        const args = match[3] ? match[3].trim() : match[4] ? JSON.parse(match[4].trim()) : null;
-        result.push({ type: type22, args });
-      }
-    }
-    if (result.length === 0) {
-      result.push({ type: text, args: null });
-    }
-    return result.length === 1 ? result[0] : result;
-  } catch (error) {
-    log$1.error(
-      `ERROR: ${error.message} - Unable to parse directive
-      ${type2 !== null ? " type:" + type2 : ""} based on the text:${text}`
-    );
-    return { type: null, args: null };
-  }
-};
-const isSubstringInArray = function(str2, arr) {
-  for (const [i, element] of arr.entries()) {
-    if (element.match(str2)) {
-      return i;
-    }
-  }
-  return -1;
-};
-function interpolateToCurve(interpolate, defaultCurve) {
-  if (!interpolate) {
-    return defaultCurve;
-  }
-  const curveName = `curve${interpolate.charAt(0).toUpperCase() + interpolate.slice(1)}`;
-  return d3CurveTypes[curveName] || defaultCurve;
-}
-function formatUrl(linkStr, config2) {
-  const url = linkStr.trim();
-  if (url) {
-    if (config2.securityLevel !== "loose") {
-      return (0,dist/* sanitizeUrl */.N)(url);
-    }
-    return url;
-  }
-}
-const runFunc = (functionName, ...params) => {
-  const arrPaths = functionName.split(".");
-  const len = arrPaths.length - 1;
-  const fnName = arrPaths[len];
-  let obj = window;
-  for (let i = 0; i < len; i++) {
-    obj = obj[arrPaths[i]];
-    if (!obj) {
-      return;
-    }
-  }
-  obj[fnName](...params);
-};
-function distance(p1, p2) {
-  return p1 && p2 ? Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)) : 0;
-}
-function traverseEdge(points) {
-  let prevPoint;
-  let totalDistance = 0;
-  points.forEach((point2) => {
-    totalDistance += distance(point2, prevPoint);
-    prevPoint = point2;
-  });
-  let remainingDistance = totalDistance / 2;
-  let center = void 0;
-  prevPoint = void 0;
-  points.forEach((point2) => {
-    if (prevPoint && !center) {
-      const vectorDistance = distance(point2, prevPoint);
-      if (vectorDistance < remainingDistance) {
-        remainingDistance -= vectorDistance;
-      } else {
-        const distanceRatio = remainingDistance / vectorDistance;
-        if (distanceRatio <= 0) {
-          center = prevPoint;
-        }
-        if (distanceRatio >= 1) {
-          center = { x: point2.x, y: point2.y };
-        }
-        if (distanceRatio > 0 && distanceRatio < 1) {
-          center = {
-            x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point2.x,
-            y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point2.y
-          };
-        }
-      }
-    }
-    prevPoint = point2;
-  });
-  return center;
-}
-function calcLabelPosition(points) {
-  if (points.length === 1) {
-    return points[0];
-  }
-  return traverseEdge(points);
-}
-const calcCardinalityPosition = (isRelationTypePresent, points, initialPosition) => {
-  let prevPoint;
-  log$1.info(`our points ${JSON.stringify(points)}`);
-  if (points[0] !== initialPosition) {
-    points = points.reverse();
-  }
-  const distanceToCardinalityPoint = 25;
-  let remainingDistance = distanceToCardinalityPoint;
-  let center;
-  prevPoint = void 0;
-  points.forEach((point2) => {
-    if (prevPoint && !center) {
-      const vectorDistance = distance(point2, prevPoint);
-      if (vectorDistance < remainingDistance) {
-        remainingDistance -= vectorDistance;
-      } else {
-        const distanceRatio = remainingDistance / vectorDistance;
-        if (distanceRatio <= 0) {
-          center = prevPoint;
-        }
-        if (distanceRatio >= 1) {
-          center = { x: point2.x, y: point2.y };
-        }
-        if (distanceRatio > 0 && distanceRatio < 1) {
-          center = {
-            x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point2.x,
-            y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point2.y
-          };
-        }
-      }
-    }
-    prevPoint = point2;
-  });
-  const d = isRelationTypePresent ? 10 : 5;
-  const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);
-  const cardinalityPosition = { x: 0, y: 0 };
-  cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;
-  cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;
-  return cardinalityPosition;
-};
-function calcTerminalLabelPosition(terminalMarkerSize, position, _points) {
-  let points = JSON.parse(JSON.stringify(_points));
-  let prevPoint;
-  log$1.info("our points", points);
-  if (position !== "start_left" && position !== "start_right") {
-    points = points.reverse();
-  }
-  points.forEach((point2) => {
-    prevPoint = point2;
-  });
-  const distanceToCardinalityPoint = 25 + terminalMarkerSize;
-  let remainingDistance = distanceToCardinalityPoint;
-  let center;
-  prevPoint = void 0;
-  points.forEach((point2) => {
-    if (prevPoint && !center) {
-      const vectorDistance = distance(point2, prevPoint);
-      if (vectorDistance < remainingDistance) {
-        remainingDistance -= vectorDistance;
-      } else {
-        const distanceRatio = remainingDistance / vectorDistance;
-        if (distanceRatio <= 0) {
-          center = prevPoint;
-        }
-        if (distanceRatio >= 1) {
-          center = { x: point2.x, y: point2.y };
-        }
-        if (distanceRatio > 0 && distanceRatio < 1) {
-          center = {
-            x: (1 - distanceRatio) * prevPoint.x + distanceRatio * point2.x,
-            y: (1 - distanceRatio) * prevPoint.y + distanceRatio * point2.y
-          };
-        }
-      }
-    }
-    prevPoint = point2;
-  });
-  const d = 10 + terminalMarkerSize * 0.5;
-  const angle = Math.atan2(points[0].y - center.y, points[0].x - center.x);
-  const cardinalityPosition = { x: 0, y: 0 };
-  cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2;
-  cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2;
-  if (position === "start_left") {
-    cardinalityPosition.x = Math.sin(angle + Math.PI) * d + (points[0].x + center.x) / 2;
-    cardinalityPosition.y = -Math.cos(angle + Math.PI) * d + (points[0].y + center.y) / 2;
-  }
-  if (position === "end_right") {
-    cardinalityPosition.x = Math.sin(angle - Math.PI) * d + (points[0].x + center.x) / 2 - 5;
-    cardinalityPosition.y = -Math.cos(angle - Math.PI) * d + (points[0].y + center.y) / 2 - 5;
-  }
-  if (position === "end_left") {
-    cardinalityPosition.x = Math.sin(angle) * d + (points[0].x + center.x) / 2 - 5;
-    cardinalityPosition.y = -Math.cos(angle) * d + (points[0].y + center.y) / 2 - 5;
-  }
-  return cardinalityPosition;
-}
-function getStylesFromArray(arr) {
-  let style = "";
-  let labelStyle = "";
-  for (const element of arr) {
-    if (element !== void 0) {
-      if (element.startsWith("color:") || element.startsWith("text-align:")) {
-        labelStyle = labelStyle + element + ";";
-      } else {
-        style = style + element + ";";
-      }
-    }
-  }
-  return { style, labelStyle };
-}
-let cnt = 0;
-const generateId$1 = () => {
-  cnt++;
-  return "id-" + Math.random().toString(36).substr(2, 12) + "-" + cnt;
-};
-function makeid(length) {
-  let result = "";
-  const characters = "0123456789abcdef";
-  const charactersLength = characters.length;
-  for (let i = 0; i < length; i++) {
-    result += characters.charAt(Math.floor(Math.random() * charactersLength));
-  }
-  return result;
-}
-const random = (options2) => {
-  return makeid(options2.length);
-};
-const getTextObj$2 = function() {
-  return {
-    x: 0,
-    y: 0,
-    fill: void 0,
-    anchor: "start",
-    style: "#666",
-    width: 100,
-    height: 100,
-    textMargin: 0,
-    rx: 0,
-    ry: 0,
-    valign: void 0
-  };
-};
-const drawSimpleText = function(elem, textData) {
-  const nText = textData.text.replace(common$1.lineBreakRegex, " ");
-  const [, _fontSizePx] = parseFontSize(textData.fontSize);
-  const textElem = elem.append("text");
-  textElem.attr("x", textData.x);
-  textElem.attr("y", textData.y);
-  textElem.style("text-anchor", textData.anchor);
-  textElem.style("font-family", textData.fontFamily);
-  textElem.style("font-size", _fontSizePx);
-  textElem.style("font-weight", textData.fontWeight);
-  textElem.attr("fill", textData.fill);
-  if (textData.class !== void 0) {
-    textElem.attr("class", textData.class);
-  }
-  const span = textElem.append("tspan");
-  span.attr("x", textData.x + textData.textMargin * 2);
-  span.attr("fill", textData.fill);
-  span.text(nText);
-  return textElem;
-};
-const wrapLabel = (0,memoize/* default */.Z)(
-  (label, maxWidth, config2) => {
-    if (!label) {
-      return label;
-    }
-    config2 = Object.assign(
-      { fontSize: 12, fontWeight: 400, fontFamily: "Arial", joinWith: "<br/>" },
-      config2
-    );
-    if (common$1.lineBreakRegex.test(label)) {
-      return label;
-    }
-    const words = label.split(" ");
-    const completedLines = [];
-    let nextLine = "";
-    words.forEach((word, index) => {
-      const wordLength = calculateTextWidth(`${word} `, config2);
-      const nextLineLength = calculateTextWidth(nextLine, config2);
-      if (wordLength > maxWidth) {
-        const { hyphenatedStrings, remainingWord } = breakString(word, maxWidth, "-", config2);
-        completedLines.push(nextLine, ...hyphenatedStrings);
-        nextLine = remainingWord;
-      } else if (nextLineLength + wordLength >= maxWidth) {
-        completedLines.push(nextLine);
-        nextLine = word;
-      } else {
-        nextLine = [nextLine, word].filter(Boolean).join(" ");
-      }
-      const currentWord = index + 1;
-      const isLastWord = currentWord === words.length;
-      if (isLastWord) {
-        completedLines.push(nextLine);
-      }
-    });
-    return completedLines.filter((line2) => line2 !== "").join(config2.joinWith);
-  },
-  (label, maxWidth, config2) => `${label}${maxWidth}${config2.fontSize}${config2.fontWeight}${config2.fontFamily}${config2.joinWith}`
-);
-const breakString = (0,memoize/* default */.Z)(
-  (word, maxWidth, hyphenCharacter = "-", config2) => {
-    config2 = Object.assign(
-      { fontSize: 12, fontWeight: 400, fontFamily: "Arial", margin: 0 },
-      config2
-    );
-    const characters = [...word];
-    const lines = [];
-    let currentLine = "";
-    characters.forEach((character, index) => {
-      const nextLine = `${currentLine}${character}`;
-      const lineWidth = calculateTextWidth(nextLine, config2);
-      if (lineWidth >= maxWidth) {
-        const currentCharacter = index + 1;
-        const isLastLine = characters.length === currentCharacter;
-        const hyphenatedNextLine = `${nextLine}${hyphenCharacter}`;
-        lines.push(isLastLine ? nextLine : hyphenatedNextLine);
-        currentLine = "";
-      } else {
-        currentLine = nextLine;
-      }
-    });
-    return { hyphenatedStrings: lines, remainingWord: currentLine };
-  },
-  (word, maxWidth, hyphenCharacter = "-", config2) => `${word}${maxWidth}${hyphenCharacter}${config2.fontSize}${config2.fontWeight}${config2.fontFamily}`
-);
-function calculateTextHeight(text, config2) {
-  config2 = Object.assign(
-    { fontSize: 12, fontWeight: 400, fontFamily: "Arial", margin: 15 },
-    config2
-  );
-  return calculateTextDimensions(text, config2).height;
-}
-function calculateTextWidth(text, config2) {
-  config2 = Object.assign({ fontSize: 12, fontWeight: 400, fontFamily: "Arial" }, config2);
-  return calculateTextDimensions(text, config2).width;
-}
-const calculateTextDimensions = (0,memoize/* default */.Z)(
-  (text, config2) => {
-    config2 = Object.assign({ fontSize: 12, fontWeight: 400, fontFamily: "Arial" }, config2);
-    const { fontSize, fontFamily, fontWeight } = config2;
-    if (!text) {
-      return { width: 0, height: 0 };
-    }
-    const [, _fontSizePx] = parseFontSize(fontSize);
-    const fontFamilies = ["sans-serif", fontFamily];
-    const lines = text.split(common$1.lineBreakRegex);
-    const dims = [];
-    const body = (0,src/* select */.Ys)("body");
-    if (!body.remove) {
-      return { width: 0, height: 0, lineHeight: 0 };
-    }
-    const g = body.append("svg");
-    for (const fontFamily2 of fontFamilies) {
-      let cheight = 0;
-      const dim = { width: 0, height: 0, lineHeight: 0 };
-      for (const line2 of lines) {
-        const textObj = getTextObj$2();
-        textObj.text = line2;
-        const textElem = drawSimpleText(g, textObj).style("font-size", _fontSizePx).style("font-weight", fontWeight).style("font-family", fontFamily2);
-        const bBox = (textElem._groups || textElem)[0][0].getBBox();
-        dim.width = Math.round(Math.max(dim.width, bBox.width));
-        cheight = Math.round(bBox.height);
-        dim.height += cheight;
-        dim.lineHeight = Math.round(Math.max(dim.lineHeight, cheight));
-      }
-      dims.push(dim);
-    }
-    g.remove();
-    const index = isNaN(dims[1].height) || isNaN(dims[1].width) || isNaN(dims[1].lineHeight) || dims[0].height > dims[1].height && dims[0].width > dims[1].width && dims[0].lineHeight > dims[1].lineHeight ? 0 : 1;
-    return dims[index];
-  },
-  (text, config2) => `${text}${config2.fontSize}${config2.fontWeight}${config2.fontFamily}`
-);
-const initIdGenerator = class iterator {
-  constructor(deterministic, seed) {
-    this.deterministic = deterministic;
-    this.seed = seed;
-    this.count = seed ? seed.length : 0;
-  }
-  next() {
-    if (!this.deterministic) {
-      return Date.now();
-    }
-    return this.count++;
-  }
-};
-let decoder;
-const entityDecode = function(html) {
-  decoder = decoder || document.createElement("div");
-  html = escape(html).replace(/%26/g, "&").replace(/%23/g, "#").replace(/%3B/g, ";");
-  decoder.innerHTML = html;
-  return unescape(decoder.textContent);
-};
-const directiveSanitizer = (args) => {
-  log$1.debug("directiveSanitizer called with", args);
-  if (typeof args === "object") {
-    if (args.length) {
-      args.forEach((arg) => directiveSanitizer(arg));
-    } else {
-      Object.keys(args).forEach((key) => {
-        log$1.debug("Checking key", key);
-        if (key.startsWith("__")) {
-          log$1.debug("sanitize deleting __ option", key);
-          delete args[key];
-        }
-        if (key.includes("proto")) {
-          log$1.debug("sanitize deleting proto option", key);
-          delete args[key];
-        }
-        if (key.includes("constr")) {
-          log$1.debug("sanitize deleting constr option", key);
-          delete args[key];
-        }
-        if (key.includes("themeCSS")) {
-          log$1.debug("sanitizing themeCss option");
-          args[key] = sanitizeCss(args[key]);
-        }
-        if (key.includes("fontFamily")) {
-          log$1.debug("sanitizing fontFamily option");
-          args[key] = sanitizeCss(args[key]);
-        }
-        if (key.includes("altFontFamily")) {
-          log$1.debug("sanitizing altFontFamily option");
-          args[key] = sanitizeCss(args[key]);
-        }
-        if (!configKeys.includes(key)) {
-          log$1.debug("sanitize deleting option", key);
-          delete args[key];
-        } else {
-          if (typeof args[key] === "object") {
-            log$1.debug("sanitize deleting object", key);
-            directiveSanitizer(args[key]);
-          }
-        }
-      });
-    }
-  }
-  if (args.themeVariables) {
-    const kArr = Object.keys(args.themeVariables);
-    for (const k of kArr) {
-      const val = args.themeVariables[k];
-      if (val && val.match && !val.match(/^[\d "#%(),.;A-Za-z]+$/)) {
-        args.themeVariables[k] = "";
-      }
-    }
-  }
-  log$1.debug("After sanitization", args);
-};
-const sanitizeCss = (str2) => {
-  let startCnt = 0;
-  let endCnt = 0;
-  for (const element of str2) {
-    if (startCnt < endCnt) {
-      return "{ /* ERROR: Unbalanced CSS */ }";
-    }
-    if (element === "{") {
-      startCnt++;
-    } else if (element === "}") {
-      endCnt++;
-    }
-  }
-  if (startCnt !== endCnt) {
-    return "{ /* ERROR: Unbalanced CSS */ }";
-  }
-  return str2;
-};
-function isDetailedError(error) {
-  return "str" in error;
-}
-function getErrorMessage(error) {
-  if (error instanceof Error) {
-    return error.message;
-  }
-  return String(error);
-}
-const insertTitle = (parent, cssClass, titleTopMargin, title2) => {
-  if (!title2) {
-    return;
-  }
-  const bounds2 = parent.node().getBBox();
-  parent.append("text").text(title2).attr("x", bounds2.x + bounds2.width / 2).attr("y", -titleTopMargin).attr("class", cssClass);
-};
-const parseFontSize = (fontSize) => {
-  if (typeof fontSize === "number") {
-    return [fontSize, fontSize + "px"];
-  }
-  const fontSizeNumber = parseInt(fontSize, 10);
-  if (Number.isNaN(fontSizeNumber)) {
-    return [void 0, void 0];
-  } else if (fontSize === String(fontSizeNumber)) {
-    return [fontSizeNumber, fontSize + "px"];
-  } else {
-    return [fontSizeNumber, fontSize];
-  }
-};
-const mermaid_ae477ddf_utils = {
-  assignWithDepth: assignWithDepth$1,
-  wrapLabel,
-  calculateTextHeight,
-  calculateTextWidth,
-  calculateTextDimensions,
-  detectInit,
-  detectDirective,
-  isSubstringInArray,
-  interpolateToCurve,
-  calcLabelPosition,
-  calcCardinalityPosition,
-  calcTerminalLabelPosition,
-  formatUrl,
-  getStylesFromArray,
-  generateId: generateId$1,
-  random,
-  runFunc,
-  entityDecode,
-  initIdGenerator,
-  directiveSanitizer,
-  sanitizeCss,
-  insertTitle,
-  parseFontSize
-};
-const version$1 = "9.4.3";
-const defaultConfig = Object.freeze(config$2);
-let siteConfig = assignWithDepth$1({}, defaultConfig);
-let configFromInitialize;
-let directives = [];
-let currentConfig = assignWithDepth$1({}, defaultConfig);
-const updateCurrentConfig = (siteCfg, _directives) => {
-  let cfg = assignWithDepth$1({}, siteCfg);
-  let sumOfDirectives = {};
-  for (const d of _directives) {
-    sanitize(d);
-    sumOfDirectives = assignWithDepth$1(sumOfDirectives, d);
-  }
-  cfg = assignWithDepth$1(cfg, sumOfDirectives);
-  if (sumOfDirectives.theme && sumOfDirectives.theme in theme) {
-    const tmpConfigFromInitialize = assignWithDepth$1({}, configFromInitialize);
-    const themeVariables = assignWithDepth$1(
-      tmpConfigFromInitialize.themeVariables || {},
-      sumOfDirectives.themeVariables
-    );
-    if (cfg.theme && cfg.theme in theme) {
-      cfg.themeVariables = theme[cfg.theme].getThemeVariables(themeVariables);
-    }
-  }
-  currentConfig = cfg;
-  checkConfig(currentConfig);
-  return currentConfig;
-};
-const setSiteConfig = (conf2) => {
-  siteConfig = assignWithDepth$1({}, defaultConfig);
-  siteConfig = assignWithDepth$1(siteConfig, conf2);
-  if (conf2.theme && theme[conf2.theme]) {
-    siteConfig.themeVariables = theme[conf2.theme].getThemeVariables(conf2.themeVariables);
-  }
-  updateCurrentConfig(siteConfig, directives);
-  return siteConfig;
-};
-const saveConfigFromInitialize = (conf2) => {
-  configFromInitialize = assignWithDepth$1({}, conf2);
-};
-const updateSiteConfig = (conf2) => {
-  siteConfig = assignWithDepth$1(siteConfig, conf2);
-  updateCurrentConfig(siteConfig, directives);
-  return siteConfig;
-};
-const getSiteConfig = () => {
-  return assignWithDepth$1({}, siteConfig);
-};
-const setConfig = (conf2) => {
-  checkConfig(conf2);
-  assignWithDepth$1(currentConfig, conf2);
-  return getConfig$1();
-};
-const getConfig$1 = () => {
-  return assignWithDepth$1({}, currentConfig);
-};
-const sanitize = (options2) => {
-  ["secure", ...siteConfig.secure ?? []].forEach((key) => {
-    if (options2[key] !== void 0) {
-      log$1.debug(`Denied attempt to modify a secure key ${key}`, options2[key]);
-      delete options2[key];
-    }
-  });
-  Object.keys(options2).forEach((key) => {
-    if (key.indexOf("__") === 0) {
-      delete options2[key];
-    }
-  });
-  Object.keys(options2).forEach((key) => {
-    if (typeof options2[key] === "string" && (options2[key].includes("<") || options2[key].includes(">") || options2[key].includes("url(data:"))) {
-      delete options2[key];
-    }
-    if (typeof options2[key] === "object") {
-      sanitize(options2[key]);
-    }
-  });
-};
-const addDirective = (directive2) => {
-  if (directive2.fontFamily) {
-    if (!directive2.themeVariables) {
-      directive2.themeVariables = { fontFamily: directive2.fontFamily };
-    } else {
-      if (!directive2.themeVariables.fontFamily) {
-        directive2.themeVariables = { fontFamily: directive2.fontFamily };
-      }
-    }
-  }
-  directives.push(directive2);
-  updateCurrentConfig(siteConfig, directives);
-};
-const mermaid_ae477ddf_reset = (config2 = siteConfig) => {
-  directives = [];
-  updateCurrentConfig(config2, directives);
-};
-var ConfigWarning = /* @__PURE__ */ ((ConfigWarning2) => {
-  ConfigWarning2["LAZY_LOAD_DEPRECATED"] = "The configuration options lazyLoadedDiagrams and loadExternalDiagramsAtStartup are deprecated. Please use registerExternalDiagrams instead.";
-  return ConfigWarning2;
-})(ConfigWarning || {});
-const issuedWarnings = {};
-const issueWarning = (warning) => {
-  if (issuedWarnings[warning]) {
-    return;
-  }
-  log$1.warn(ConfigWarning[warning]);
-  issuedWarnings[warning] = true;
-};
-const checkConfig = (config2) => {
-  if (!config2) {
-    return;
-  }
-  if (config2.lazyLoadedDiagrams || config2.loadExternalDiagramsAtStartup) {
-    issueWarning("LAZY_LOAD_DEPRECATED");
-  }
-};
-const d3Attrs = function(d3Elem, attrs) {
-  for (let attr of attrs) {
-    d3Elem.attr(attr[0], attr[1]);
-  }
-};
-const calculateSvgSizeAttrs = function(height2, width2, useMaxWidth) {
-  let attrs = /* @__PURE__ */ new Map();
-  if (useMaxWidth) {
-    attrs.set("width", "100%");
-    attrs.set("style", `max-width: ${width2}px;`);
-  } else {
-    attrs.set("height", height2);
-    attrs.set("width", width2);
-  }
-  return attrs;
-};
-const configureSvgSize = function(svgElem, height2, width2, useMaxWidth) {
-  const attrs = calculateSvgSizeAttrs(height2, width2, useMaxWidth);
-  d3Attrs(svgElem, attrs);
-};
-const setupGraphViewbox$1 = function(graph, svgElem, padding2, useMaxWidth) {
-  const svgBounds = svgElem.node().getBBox();
-  const sWidth = svgBounds.width;
-  const sHeight = svgBounds.height;
-  log$1.info(`SVG bounds: ${sWidth}x${sHeight}`, svgBounds);
-  let width2 = 0;
-  let height2 = 0;
-  log$1.info(`Graph bounds: ${width2}x${height2}`, graph);
-  width2 = sWidth + padding2 * 2;
-  height2 = sHeight + padding2 * 2;
-  log$1.info(`Calculated bounds: ${width2}x${height2}`);
-  configureSvgSize(svgElem, height2, width2, useMaxWidth);
-  const vBox = `${svgBounds.x - padding2} ${svgBounds.y - padding2} ${svgBounds.width + 2 * padding2} ${svgBounds.height + 2 * padding2}`;
-  svgElem.attr("viewBox", vBox);
-};
-const getStyles$e = (options2) => `g.classGroup text {
-  fill: ${options2.nodeBorder};
-  fill: ${options2.classText};
-  stroke: none;
-  font-family: ${options2.fontFamily};
-  font-size: 10px;
-
-  .title {
-    font-weight: bolder;
-  }
-
-}
-
-.nodeLabel, .edgeLabel {
-  color: ${options2.classText};
-}
-.edgeLabel .label rect {
-  fill: ${options2.mainBkg};
-}
-.label text {
-  fill: ${options2.classText};
-}
-.edgeLabel .label span {
-  background: ${options2.mainBkg};
-}
-
-.classTitle {
-  font-weight: bolder;
-}
-.node rect,
-  .node circle,
-  .node ellipse,
-  .node polygon,
-  .node path {
-    fill: ${options2.mainBkg};
-    stroke: ${options2.nodeBorder};
-    stroke-width: 1px;
-  }
-
-
-.divider {
-  stroke: ${options2.nodeBorder};
-  stroke: 1;
-}
-
-g.clickable {
-  cursor: pointer;
-}
-
-g.classGroup rect {
-  fill: ${options2.mainBkg};
-  stroke: ${options2.nodeBorder};
-}
-
-g.classGroup line {
-  stroke: ${options2.nodeBorder};
-  stroke-width: 1;
-}
-
-.classLabel .box {
-  stroke: none;
-  stroke-width: 0;
-  fill: ${options2.mainBkg};
-  opacity: 0.5;
-}
-
-.classLabel .label {
-  fill: ${options2.nodeBorder};
-  font-size: 10px;
-}
-
-.relation {
-  stroke: ${options2.lineColor};
-  stroke-width: 1;
-  fill: none;
-}
-
-.dashed-line{
-  stroke-dasharray: 3;
-}
-
-.dotted-line{
-  stroke-dasharray: 1 2;
-}
-
-#compositionStart, .composition {
-  fill: ${options2.lineColor} !important;
-  stroke: ${options2.lineColor} !important;
-  stroke-width: 1;
-}
-
-#compositionEnd, .composition {
-  fill: ${options2.lineColor} !important;
-  stroke: ${options2.lineColor} !important;
-  stroke-width: 1;
-}
-
-#dependencyStart, .dependency {
-  fill: ${options2.lineColor} !important;
-  stroke: ${options2.lineColor} !important;
-  stroke-width: 1;
-}
-
-#dependencyStart, .dependency {
-  fill: ${options2.lineColor} !important;
-  stroke: ${options2.lineColor} !important;
-  stroke-width: 1;
-}
-
-#extensionStart, .extension {
-  fill: ${options2.mainBkg} !important;
-  stroke: ${options2.lineColor} !important;
-  stroke-width: 1;
-}
-
-#extensionEnd, .extension {
-  fill: ${options2.mainBkg} !important;
-  stroke: ${options2.lineColor} !important;
-  stroke-width: 1;
-}
-
-#aggregationStart, .aggregation {
-  fill: ${options2.mainBkg} !important;
-  stroke: ${options2.lineColor} !important;
-  stroke-width: 1;
-}
-
-#aggregationEnd, .aggregation {
-  fill: ${options2.mainBkg} !important;
-  stroke: ${options2.lineColor} !important;
-  stroke-width: 1;
-}
-
-#lollipopStart, .lollipop {
-  fill: ${options2.mainBkg} !important;
-  stroke: ${options2.lineColor} !important;
-  stroke-width: 1;
-}
-
-#lollipopEnd, .lollipop {
-  fill: ${options2.mainBkg} !important;
-  stroke: ${options2.lineColor} !important;
-  stroke-width: 1;
-}
-
-.edgeTerminals {
-  font-size: 11px;
-}
-
-.classTitleText {
-  text-anchor: middle;
-  font-size: 18px;
-  fill: ${options2.textColor};
-}
-`;
-const classStyles = getStyles$e;
-const getStyles$d = (options2) => `
-  .entityBox {
-    fill: ${options2.mainBkg};
-    stroke: ${options2.nodeBorder};
-  }
-
-  .attributeBoxOdd {
-    fill: ${options2.attributeBackgroundColorOdd};
-    stroke: ${options2.nodeBorder};
-  }
-
-  .attributeBoxEven {
-    fill:  ${options2.attributeBackgroundColorEven};
-    stroke: ${options2.nodeBorder};
-  }
-
-  .relationshipLabelBox {
-    fill: ${options2.tertiaryColor};
-    opacity: 0.7;
-    background-color: ${options2.tertiaryColor};
-      rect {
-        opacity: 0.5;
-      }
-  }
-
-    .relationshipLine {
-      stroke: ${options2.lineColor};
-    }
-
-  .entityTitleText {
-    text-anchor: middle;
-    font-size: 18px;
-    fill: ${options2.textColor};
-  }    
-`;
-const erStyles = getStyles$d;
-const getStyles$c = () => ``;
-const errorStyles = getStyles$c;
-const getStyles$b = (options2) => `.label {
-    font-family: ${options2.fontFamily};
-    color: ${options2.nodeTextColor || options2.textColor};
-  }
-  .cluster-label text {
-    fill: ${options2.titleColor};
-  }
-  .cluster-label span {
-    color: ${options2.titleColor};
-  }
-
-  .label text,span {
-    fill: ${options2.nodeTextColor || options2.textColor};
-    color: ${options2.nodeTextColor || options2.textColor};
-  }
-
-  .node rect,
-  .node circle,
-  .node ellipse,
-  .node polygon,
-  .node path {
-    fill: ${options2.mainBkg};
-    stroke: ${options2.nodeBorder};
-    stroke-width: 1px;
-  }
-
-  .node .label {
-    text-align: center;
-  }
-  .node.clickable {
-    cursor: pointer;
-  }
-
-  .arrowheadPath {
-    fill: ${options2.arrowheadColor};
-  }
-
-  .edgePath .path {
-    stroke: ${options2.lineColor};
-    stroke-width: 2.0px;
-  }
-
-  .flowchart-link {
-    stroke: ${options2.lineColor};
-    fill: none;
-  }
-
-  .edgeLabel {
-    background-color: ${options2.edgeLabelBackground};
-    rect {
-      opacity: 0.5;
-      background-color: ${options2.edgeLabelBackground};
-      fill: ${options2.edgeLabelBackground};
-    }
-    text-align: center;
-  }
-
-  .cluster rect {
-    fill: ${options2.clusterBkg};
-    stroke: ${options2.clusterBorder};
-    stroke-width: 1px;
-  }
-
-  .cluster text {
-    fill: ${options2.titleColor};
-  }
-
-  .cluster span {
-    color: ${options2.titleColor};
-  }
-  /* .cluster div {
-    color: ${options2.titleColor};
-  } */
-
-  div.mermaidTooltip {
-    position: absolute;
-    text-align: center;
-    max-width: 200px;
-    padding: 2px;
-    font-family: ${options2.fontFamily};
-    font-size: 12px;
-    background: ${options2.tertiaryColor};
-    border: 1px solid ${options2.border2};
-    border-radius: 2px;
-    pointer-events: none;
-    z-index: 100;
-  }
-
-  .flowchartTitleText {
-    text-anchor: middle;
-    font-size: 18px;
-    fill: ${options2.textColor};
-  }
-`;
-const flowStyles = getStyles$b;
-const getStyles$a = (options2) => `
-  .mermaid-main-font {
-    font-family: "trebuchet ms", verdana, arial, sans-serif;
-    font-family: var(--mermaid-font-family);
-  }
-  .exclude-range {
-    fill: ${options2.excludeBkgColor};
-  }
-
-  .section {
-    stroke: none;
-    opacity: 0.2;
-  }
-
-  .section0 {
-    fill: ${options2.sectionBkgColor};
-  }
-
-  .section2 {
-    fill: ${options2.sectionBkgColor2};
-  }
-
-  .section1,
-  .section3 {
-    fill: ${options2.altSectionBkgColor};
-    opacity: 0.2;
-  }
-
-  .sectionTitle0 {
-    fill: ${options2.titleColor};
-  }
-
-  .sectionTitle1 {
-    fill: ${options2.titleColor};
-  }
-
-  .sectionTitle2 {
-    fill: ${options2.titleColor};
-  }
-
-  .sectionTitle3 {
-    fill: ${options2.titleColor};
-  }
-
-  .sectionTitle {
-    text-anchor: start;
-    // font-size: ${options2.ganttFontSize};
-    // text-height: 14px;
-    font-family: 'trebuchet ms', verdana, arial, sans-serif;
-    font-family: var(--mermaid-font-family);
-
-  }
-
-
-  /* Grid and axis */
-
-  .grid .tick {
-    stroke: ${options2.gridColor};
-    opacity: 0.8;
-    shape-rendering: crispEdges;
-    text {
-      font-family: ${options2.fontFamily};
-      fill: ${options2.textColor};
-    }
-  }
-
-  .grid path {
-    stroke-width: 0;
-  }
-
-
-  /* Today line */
-
-  .today {
-    fill: none;
-    stroke: ${options2.todayLineColor};
-    stroke-width: 2px;
-  }
-
-
-  /* Task styling */
-
-  /* Default task */
-
-  .task {
-    stroke-width: 2;
-  }
-
-  .taskText {
-    text-anchor: middle;
-    font-family: 'trebuchet ms', verdana, arial, sans-serif;
-    font-family: var(--mermaid-font-family);
-  }
-
-  // .taskText:not([font-size]) {
-  //   font-size: ${options2.ganttFontSize};
-  // }
-
-  .taskTextOutsideRight {
-    fill: ${options2.taskTextDarkColor};
-    text-anchor: start;
-    // font-size: ${options2.ganttFontSize};
-    font-family: 'trebuchet ms', verdana, arial, sans-serif;
-    font-family: var(--mermaid-font-family);
-
-  }
-
-  .taskTextOutsideLeft {
-    fill: ${options2.taskTextDarkColor};
-    text-anchor: end;
-    // font-size: ${options2.ganttFontSize};
-  }
-
-  /* Special case clickable */
-  .task.clickable {
-    cursor: pointer;
-  }
-  .taskText.clickable {
-    cursor: pointer;
-    fill: ${options2.taskTextClickableColor} !important;
-    font-weight: bold;
-  }
-
-  .taskTextOutsideLeft.clickable {
-    cursor: pointer;
-    fill: ${options2.taskTextClickableColor} !important;
-    font-weight: bold;
-  }
-
-  .taskTextOutsideRight.clickable {
-    cursor: pointer;
-    fill: ${options2.taskTextClickableColor} !important;
-    font-weight: bold;
-  }
-
-  /* Specific task settings for the sections*/
-
-  .taskText0,
-  .taskText1,
-  .taskText2,
-  .taskText3 {
-    fill: ${options2.taskTextColor};
-  }
-
-  .task0,
-  .task1,
-  .task2,
-  .task3 {
-    fill: ${options2.taskBkgColor};
-    stroke: ${options2.taskBorderColor};
-  }
-
-  .taskTextOutside0,
-  .taskTextOutside2
-  {
-    fill: ${options2.taskTextOutsideColor};
-  }
-
-  .taskTextOutside1,
-  .taskTextOutside3 {
-    fill: ${options2.taskTextOutsideColor};
-  }
-
-
-  /* Active task */
-
-  .active0,
-  .active1,
-  .active2,
-  .active3 {
-    fill: ${options2.activeTaskBkgColor};
-    stroke: ${options2.activeTaskBorderColor};
-  }
-
-  .activeText0,
-  .activeText1,
-  .activeText2,
-  .activeText3 {
-    fill: ${options2.taskTextDarkColor} !important;
-  }
-
-
-  /* Completed task */
-
-  .done0,
-  .done1,
-  .done2,
-  .done3 {
-    stroke: ${options2.doneTaskBorderColor};
-    fill: ${options2.doneTaskBkgColor};
-    stroke-width: 2;
-  }
-
-  .doneText0,
-  .doneText1,
-  .doneText2,
-  .doneText3 {
-    fill: ${options2.taskTextDarkColor} !important;
-  }
-
-
-  /* Tasks on the critical line */
-
-  .crit0,
-  .crit1,
-  .crit2,
-  .crit3 {
-    stroke: ${options2.critBorderColor};
-    fill: ${options2.critBkgColor};
-    stroke-width: 2;
-  }
-
-  .activeCrit0,
-  .activeCrit1,
-  .activeCrit2,
-  .activeCrit3 {
-    stroke: ${options2.critBorderColor};
-    fill: ${options2.activeTaskBkgColor};
-    stroke-width: 2;
-  }
-
-  .doneCrit0,
-  .doneCrit1,
-  .doneCrit2,
-  .doneCrit3 {
-    stroke: ${options2.critBorderColor};
-    fill: ${options2.doneTaskBkgColor};
-    stroke-width: 2;
-    cursor: pointer;
-    shape-rendering: crispEdges;
-  }
-
-  .milestone {
-    transform: rotate(45deg) scale(0.8,0.8);
-  }
-
-  .milestoneText {
-    font-style: italic;
-  }
-  .doneCritText0,
-  .doneCritText1,
-  .doneCritText2,
-  .doneCritText3 {
-    fill: ${options2.taskTextDarkColor} !important;
-  }
-
-  .activeCritText0,
-  .activeCritText1,
-  .activeCritText2,
-  .activeCritText3 {
-    fill: ${options2.taskTextDarkColor} !important;
-  }
-
-  .titleText {
-    text-anchor: middle;
-    font-size: 18px;
-    fill: ${options2.textColor}    ;
-    font-family: 'trebuchet ms', verdana, arial, sans-serif;
-    font-family: var(--mermaid-font-family);
-  }
-`;
-const ganttStyles = getStyles$a;
-const getStyles$9 = () => ``;
-const infoStyles = getStyles$9;
-const getStyles$8 = (options2) => `
-  .pieCircle{
-    stroke: ${options2.pieStrokeColor};
-    stroke-width : ${options2.pieStrokeWidth};
-    opacity : ${options2.pieOpacity};
-  }
-  .pieTitleText {
-    text-anchor: middle;
-    font-size: ${options2.pieTitleTextSize};
-    fill: ${options2.pieTitleTextColor};
-    font-family: ${options2.fontFamily};
-  }
-  .slice {
-    font-family: ${options2.fontFamily};
-    fill: ${options2.pieSectionTextColor};
-    font-size:${options2.pieSectionTextSize};
-    // fill: white;
-  }
-  .legend text {
-    fill: ${options2.pieLegendTextColor};
-    font-family: ${options2.fontFamily};
-    font-size: ${options2.pieLegendTextSize};
-  }
-`;
-const pieStyles = getStyles$8;
-const getStyles$7 = (options2) => `
-
-  marker {
-    fill: ${options2.relationColor};
-    stroke: ${options2.relationColor};
-  }
-
-  marker.cross {
-    stroke: ${options2.lineColor};
-  }
-
-  svg {
-    font-family: ${options2.fontFamily};
-    font-size: ${options2.fontSize};
-  }
-
-  .reqBox {
-    fill: ${options2.requirementBackground};
-    fill-opacity: 100%;
-    stroke: ${options2.requirementBorderColor};
-    stroke-width: ${options2.requirementBorderSize};
-  }
-  
-  .reqTitle, .reqLabel{
-    fill:  ${options2.requirementTextColor};
-  }
-  .reqLabelBox {
-    fill: ${options2.relationLabelBackground};
-    fill-opacity: 100%;
-  }
-
-  .req-title-line {
-    stroke: ${options2.requirementBorderColor};
-    stroke-width: ${options2.requirementBorderSize};
-  }
-  .relationshipLine {
-    stroke: ${options2.relationColor};
-    stroke-width: 1;
-  }
-  .relationshipLabel {
-    fill: ${options2.relationLabelColor};
-  }
-
-`;
-const requirementStyles = getStyles$7;
-const getStyles$6 = (options2) => `.actor {
-    stroke: ${options2.actorBorder};
-    fill: ${options2.actorBkg};
-  }
-
-  text.actor > tspan {
-    fill: ${options2.actorTextColor};
-    stroke: none;
-  }
-
-  .actor-line {
-    stroke: ${options2.actorLineColor};
-  }
-
-  .messageLine0 {
-    stroke-width: 1.5;
-    stroke-dasharray: none;
-    stroke: ${options2.signalColor};
-  }
-
-  .messageLine1 {
-    stroke-width: 1.5;
-    stroke-dasharray: 2, 2;
-    stroke: ${options2.signalColor};
-  }
-
-  #arrowhead path {
-    fill: ${options2.signalColor};
-    stroke: ${options2.signalColor};
-  }
-
-  .sequenceNumber {
-    fill: ${options2.sequenceNumberColor};
-  }
-
-  #sequencenumber {
-    fill: ${options2.signalColor};
-  }
-
-  #crosshead path {
-    fill: ${options2.signalColor};
-    stroke: ${options2.signalColor};
-  }
-
-  .messageText {
-    fill: ${options2.signalTextColor};
-    stroke: none;
-  }
-
-  .labelBox {
-    stroke: ${options2.labelBoxBorderColor};
-    fill: ${options2.labelBoxBkgColor};
-  }
-
-  .labelText, .labelText > tspan {
-    fill: ${options2.labelTextColor};
-    stroke: none;
-  }
-
-  .loopText, .loopText > tspan {
-    fill: ${options2.loopTextColor};
-    stroke: none;
-  }
-
-  .loopLine {
-    stroke-width: 2px;
-    stroke-dasharray: 2, 2;
-    stroke: ${options2.labelBoxBorderColor};
-    fill: ${options2.labelBoxBorderColor};
-  }
-
-  .note {
-    //stroke: #decc93;
-    stroke: ${options2.noteBorderColor};
-    fill: ${options2.noteBkgColor};
-  }
-
-  .noteText, .noteText > tspan {
-    fill: ${options2.noteTextColor};
-    stroke: none;
-  }
-
-  .activation0 {
-    fill: ${options2.activationBkgColor};
-    stroke: ${options2.activationBorderColor};
-  }
-
-  .activation1 {
-    fill: ${options2.activationBkgColor};
-    stroke: ${options2.activationBorderColor};
-  }
-
-  .activation2 {
-    fill: ${options2.activationBkgColor};
-    stroke: ${options2.activationBorderColor};
-  }
-
-  .actorPopupMenu {
-    position: absolute;
-  }
-
-  .actorPopupMenuPanel {
-    position: absolute;
-    fill: ${options2.actorBkg};
-    box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
-    filter: drop-shadow(3px 5px 2px rgb(0 0 0 / 0.4));
-}
-  .actor-man line {
-    stroke: ${options2.actorBorder};
-    fill: ${options2.actorBkg};
-  }
-  .actor-man circle, line {
-    stroke: ${options2.actorBorder};
-    fill: ${options2.actorBkg};
-    stroke-width: 2px;
-  }
-`;
-const sequenceStyles = getStyles$6;
-const getStyles$5 = (options2) => `
-defs #statediagram-barbEnd {
-    fill: ${options2.transitionColor};
-    stroke: ${options2.transitionColor};
-  }
-g.stateGroup text {
-  fill: ${options2.nodeBorder};
-  stroke: none;
-  font-size: 10px;
-}
-g.stateGroup text {
-  fill: ${options2.textColor};
-  stroke: none;
-  font-size: 10px;
-
-}
-g.stateGroup .state-title {
-  font-weight: bolder;
-  fill: ${options2.stateLabelColor};
-}
-
-g.stateGroup rect {
-  fill: ${options2.mainBkg};
-  stroke: ${options2.nodeBorder};
-}
-
-g.stateGroup line {
-  stroke: ${options2.lineColor};
-  stroke-width: 1;
-}
-
-.transition {
-  stroke: ${options2.transitionColor};
-  stroke-width: 1;
-  fill: none;
-}
-
-.stateGroup .composit {
-  fill: ${options2.background};
-  border-bottom: 1px
-}
-
-.stateGroup .alt-composit {
-  fill: #e0e0e0;
-  border-bottom: 1px
-}
-
-.state-note {
-  stroke: ${options2.noteBorderColor};
-  fill: ${options2.noteBkgColor};
-
-  text {
-    fill: ${options2.noteTextColor};
-    stroke: none;
-    font-size: 10px;
-  }
-}
-
-.stateLabel .box {
-  stroke: none;
-  stroke-width: 0;
-  fill: ${options2.mainBkg};
-  opacity: 0.5;
-}
-
-.edgeLabel .label rect {
-  fill: ${options2.labelBackgroundColor};
-  opacity: 0.5;
-}
-.edgeLabel .label text {
-  fill: ${options2.transitionLabelColor || options2.tertiaryTextColor};
-}
-.label div .edgeLabel {
-  color: ${options2.transitionLabelColor || options2.tertiaryTextColor};
-}
-
-.stateLabel text {
-  fill: ${options2.stateLabelColor};
-  font-size: 10px;
-  font-weight: bold;
-}
-
-.node circle.state-start {
-  fill: ${options2.specialStateColor};
-  stroke: ${options2.specialStateColor};
-}
-
-.node .fork-join {
-  fill: ${options2.specialStateColor};
-  stroke: ${options2.specialStateColor};
-}
-
-.node circle.state-end {
-  fill: ${options2.innerEndBackground};
-  stroke: ${options2.background};
-  stroke-width: 1.5
-}
-.end-state-inner {
-  fill: ${options2.compositeBackground || options2.background};
-  // stroke: ${options2.background};
-  stroke-width: 1.5
-}
-
-.node rect {
-  fill: ${options2.stateBkg || options2.mainBkg};
-  stroke: ${options2.stateBorder || options2.nodeBorder};
-  stroke-width: 1px;
-}
-.node polygon {
-  fill: ${options2.mainBkg};
-  stroke: ${options2.stateBorder || options2.nodeBorder};;
-  stroke-width: 1px;
-}
-#statediagram-barbEnd {
-  fill: ${options2.lineColor};
-}
-
-.statediagram-cluster rect {
-  fill: ${options2.compositeTitleBackground};
-  stroke: ${options2.stateBorder || options2.nodeBorder};
-  stroke-width: 1px;
-}
-
-.cluster-label, .nodeLabel {
-  color: ${options2.stateLabelColor};
-}
-
-.statediagram-cluster rect.outer {
-  rx: 5px;
-  ry: 5px;
-}
-.statediagram-state .divider {
-  stroke: ${options2.stateBorder || options2.nodeBorder};
-}
-
-.statediagram-state .title-state {
-  rx: 5px;
-  ry: 5px;
-}
-.statediagram-cluster.statediagram-cluster .inner {
-  fill: ${options2.compositeBackground || options2.background};
-}
-.statediagram-cluster.statediagram-cluster-alt .inner {
-  fill: ${options2.altBackground ? options2.altBackground : "#efefef"};
-}
-
-.statediagram-cluster .inner {
-  rx:0;
-  ry:0;
-}
-
-.statediagram-state rect.basic {
-  rx: 5px;
-  ry: 5px;
-}
-.statediagram-state rect.divider {
-  stroke-dasharray: 10,10;
-  fill: ${options2.altBackground ? options2.altBackground : "#efefef"};
-}
-
-.note-edge {
-  stroke-dasharray: 5;
-}
-
-.statediagram-note rect {
-  fill: ${options2.noteBkgColor};
-  stroke: ${options2.noteBorderColor};
-  stroke-width: 1px;
-  rx: 0;
-  ry: 0;
-}
-.statediagram-note rect {
-  fill: ${options2.noteBkgColor};
-  stroke: ${options2.noteBorderColor};
-  stroke-width: 1px;
-  rx: 0;
-  ry: 0;
-}
-
-.statediagram-note text {
-  fill: ${options2.noteTextColor};
-}
-
-.statediagram-note .nodeLabel {
-  color: ${options2.noteTextColor};
-}
-.statediagram .edgeLabel {
-  color: red; // ${options2.noteTextColor};
-}
-
-#dependencyStart, #dependencyEnd {
-  fill: ${options2.lineColor};
-  stroke: ${options2.lineColor};
-  stroke-width: 1;
-}
-
-.statediagramTitleText {
-  text-anchor: middle;
-  font-size: 18px;
-  fill: ${options2.textColor};
-}
-`;
-const stateStyles = getStyles$5;
-const getStyles$4 = (options2) => `.label {
-    font-family: 'trebuchet ms', verdana, arial, sans-serif;
-    font-family: var(--mermaid-font-family);
-    color: ${options2.textColor};
-  }
-  .mouth {
-    stroke: #666;
-  }
-
-  line {
-    stroke: ${options2.textColor}
-  }
-
-  .legend {
-    fill: ${options2.textColor};
-  }
-
-  .label text {
-    fill: #333;
-  }
-  .label {
-    color: ${options2.textColor}
-  }
-
-  .face {
-    ${options2.faceColor ? `fill: ${options2.faceColor}` : "fill: #FFF8DC"};
-    stroke: #999;
-  }
-
-  .node rect,
-  .node circle,
-  .node ellipse,
-  .node polygon,
-  .node path {
-    fill: ${options2.mainBkg};
-    stroke: ${options2.nodeBorder};
-    stroke-width: 1px;
-  }
-
-  .node .label {
-    text-align: center;
-  }
-  .node.clickable {
-    cursor: pointer;
-  }
-
-  .arrowheadPath {
-    fill: ${options2.arrowheadColor};
-  }
-
-  .edgePath .path {
-    stroke: ${options2.lineColor};
-    stroke-width: 1.5px;
-  }
-
-  .flowchart-link {
-    stroke: ${options2.lineColor};
-    fill: none;
-  }
-
-  .edgeLabel {
-    background-color: ${options2.edgeLabelBackground};
-    rect {
-      opacity: 0.5;
-    }
-    text-align: center;
-  }
-
-  .cluster rect {
-  }
-
-  .cluster text {
-    fill: ${options2.titleColor};
-  }
-
-  div.mermaidTooltip {
-    position: absolute;
-    text-align: center;
-    max-width: 200px;
-    padding: 2px;
-    font-family: 'trebuchet ms', verdana, arial, sans-serif;
-    font-family: var(--mermaid-font-family);
-    font-size: 12px;
-    background: ${options2.tertiaryColor};
-    border: 1px solid ${options2.border2};
-    border-radius: 2px;
-    pointer-events: none;
-    z-index: 100;
-  }
-
-  .task-type-0, .section-type-0  {
-    ${options2.fillType0 ? `fill: ${options2.fillType0}` : ""};
-  }
-  .task-type-1, .section-type-1  {
-    ${options2.fillType0 ? `fill: ${options2.fillType1}` : ""};
-  }
-  .task-type-2, .section-type-2  {
-    ${options2.fillType0 ? `fill: ${options2.fillType2}` : ""};
-  }
-  .task-type-3, .section-type-3  {
-    ${options2.fillType0 ? `fill: ${options2.fillType3}` : ""};
-  }
-  .task-type-4, .section-type-4  {
-    ${options2.fillType0 ? `fill: ${options2.fillType4}` : ""};
-  }
-  .task-type-5, .section-type-5  {
-    ${options2.fillType0 ? `fill: ${options2.fillType5}` : ""};
-  }
-  .task-type-6, .section-type-6  {
-    ${options2.fillType0 ? `fill: ${options2.fillType6}` : ""};
-  }
-  .task-type-7, .section-type-7  {
-    ${options2.fillType0 ? `fill: ${options2.fillType7}` : ""};
-  }
-
-  .actor-0 {
-    ${options2.actor0 ? `fill: ${options2.actor0}` : ""};
-  }
-  .actor-1 {
-    ${options2.actor1 ? `fill: ${options2.actor1}` : ""};
-  }
-  .actor-2 {
-    ${options2.actor2 ? `fill: ${options2.actor2}` : ""};
-  }
-  .actor-3 {
-    ${options2.actor3 ? `fill: ${options2.actor3}` : ""};
-  }
-  .actor-4 {
-    ${options2.actor4 ? `fill: ${options2.actor4}` : ""};
-  }
-  .actor-5 {
-    ${options2.actor5 ? `fill: ${options2.actor5}` : ""};
-  }
-`;
-const journeyStyles = getStyles$4;
-const getStyles$3 = (options2) => `.person {
-    stroke: ${options2.personBorder};
-    fill: ${options2.personBkg};
-  }
-`;
-const c4Styles = getStyles$3;
-const themes = {
-  flowchart: flowStyles,
-  "flowchart-v2": flowStyles,
-  sequence: sequenceStyles,
-  gantt: ganttStyles,
-  classDiagram: classStyles,
-  "classDiagram-v2": classStyles,
-  class: classStyles,
-  stateDiagram: stateStyles,
-  state: stateStyles,
-  // gitGraph,
-  info: infoStyles,
-  pie: pieStyles,
-  er: erStyles,
-  error: errorStyles,
-  journey: journeyStyles,
-  requirement: requirementStyles,
-  c4: c4Styles
-};
-const getStyles$1 = (type2, userStyles, options2) => {
-  let diagramStyles = "";
-  if (type2 in themes && themes[type2]) {
-    diagramStyles = themes[type2](options2);
-  } else {
-    log$1.warn(`No theme found for ${type2}`);
-  }
-  return ` & {
-    font-family: ${options2.fontFamily};
-    font-size: ${options2.fontSize};
-    fill: ${options2.textColor}
-  }
-
-  /* Classes common for multiple diagrams */
-
-  & .error-icon {
-    fill: ${options2.errorBkgColor};
-  }
-  & .error-text {
-    fill: ${options2.errorTextColor};
-    stroke: ${options2.errorTextColor};
-  }
-
-  & .edge-thickness-normal {
-    stroke-width: 2px;
-  }
-  & .edge-thickness-thick {
-    stroke-width: 3.5px
-  }
-  & .edge-pattern-solid {
-    stroke-dasharray: 0;
-  }
-
-  & .edge-pattern-dashed{
-    stroke-dasharray: 3;
-  }
-  .edge-pattern-dotted {
-    stroke-dasharray: 2;
-  }
-
-  & .marker {
-    fill: ${options2.lineColor};
-    stroke: ${options2.lineColor};
-  }
-  & .marker.cross {
-    stroke: ${options2.lineColor};
-  }
-
-  & svg {
-    font-family: ${options2.fontFamily};
-    font-size: ${options2.fontSize};
-  }
-
-  ${diagramStyles}
-
-  ${userStyles}
-`;
-};
-const addStylesForDiagram = (type2, diagramTheme) => {
-  themes[type2] = diagramTheme;
-};
-const getStyles$2 = getStyles$1;
-let title$1 = "";
-let diagramTitle = "";
-let description = "";
-const sanitizeText$4 = (txt) => sanitizeText$5(txt, getConfig$1());
-const clear$g = function() {
-  title$1 = "";
-  description = "";
-  diagramTitle = "";
-};
-const setAccTitle = function(txt) {
-  title$1 = sanitizeText$4(txt).replace(/^\s+/g, "");
-};
-const getAccTitle = function() {
-  return title$1 || diagramTitle;
-};
-const setAccDescription = function(txt) {
-  description = sanitizeText$4(txt).replace(/\n\s+/g, "\n");
-};
-const getAccDescription = function() {
-  return description;
-};
-const setDiagramTitle = function(txt) {
-  diagramTitle = sanitizeText$4(txt);
-};
-const getDiagramTitle = function() {
-  return diagramTitle;
-};
-const commonDb = {
-  setAccTitle,
-  getAccTitle,
-  setDiagramTitle,
-  getDiagramTitle,
-  getAccDescription,
-  setAccDescription,
-  clear: clear$g
-};
-const commonDb$1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
-  __proto__: null,
-  clear: clear$g,
-  default: commonDb,
-  getAccDescription,
-  getAccTitle,
-  getDiagramTitle,
-  setAccDescription,
-  setAccTitle,
-  setDiagramTitle
-}, Symbol.toStringTag, { value: "Module" }));
-let currentDirective = {};
-const parseDirective$c = function(p, statement, context, type2) {
-  log$1.debug("parseDirective is being called", statement, context, type2);
-  try {
-    if (statement !== void 0) {
-      statement = statement.trim();
-      switch (context) {
-        case "open_directive":
-          currentDirective = {};
-          break;
-        case "type_directive":
-          if (!currentDirective) {
-            throw new Error("currentDirective is undefined");
-          }
-          currentDirective.type = statement.toLowerCase();
-          break;
-        case "arg_directive":
-          if (!currentDirective) {
-            throw new Error("currentDirective is undefined");
-          }
-          currentDirective.args = JSON.parse(statement);
-          break;
-        case "close_directive":
-          handleDirective(p, currentDirective, type2);
-          currentDirective = void 0;
-          break;
-      }
-    }
-  } catch (error) {
-    log$1.error(
-      `Error while rendering sequenceDiagram directive: ${statement} jison context: ${context}`
-    );
-    log$1.error(error.message);
-  }
-};
-const handleDirective = function(p, directive2, type2) {
-  log$1.info(`Directive type=${directive2.type} with args:`, directive2.args);
-  switch (directive2.type) {
-    case "init":
-    case "initialize": {
-      ["config"].forEach((prop) => {
-        if (directive2.args[prop] !== void 0) {
-          if (type2 === "flowchart-v2") {
-            type2 = "flowchart";
-          }
-          directive2.args[type2] = directive2.args[prop];
-          delete directive2.args[prop];
-        }
-      });
-      log$1.info("sanitize in handleDirective", directive2.args);
-      directiveSanitizer(directive2.args);
-      log$1.info("sanitize in handleDirective (done)", directive2.args);
-      addDirective(directive2.args);
-      break;
-    }
-    case "wrap":
-    case "nowrap":
-      if (p && p["setWrap"]) {
-        p.setWrap(directive2.type === "wrap");
-      }
-      break;
-    case "themeCss":
-      log$1.warn("themeCss encountered");
-      break;
-    default:
-      log$1.warn(
-        `Unhandled directive: source: '%%{${directive2.type}: ${JSON.stringify(
-          directive2.args ? directive2.args : {}
-        )}}%%`,
-        directive2
-      );
-      break;
-  }
-};
-const log = log$1;
-const setLogLevel = setLogLevel$1;
-const getConfig = getConfig$1;
-const sanitizeText$3 = (text) => sanitizeText$5(text, getConfig());
-const setupGraphViewbox = setupGraphViewbox$1;
-const getCommonDb = () => {
-  return commonDb$1;
-};
-const parseDirective$b = (p, statement, context, type2) => parseDirective$c(p, statement, context, type2);
-const diagrams = {};
-const registerDiagram = (id2, diagram, detector2) => {
-  if (diagrams[id2]) {
-    throw new Error(`Diagram ${id2} already registered.`);
-  }
-  diagrams[id2] = diagram;
-  if (detector2) {
-    addDetector(id2, detector2);
-  }
-  addStylesForDiagram(id2, diagram.styles);
-  if (diagram.injectUtils) {
-    diagram.injectUtils(
-      log,
-      setLogLevel,
-      getConfig,
-      sanitizeText$3,
-      setupGraphViewbox,
-      getCommonDb(),
-      parseDirective$b
-    );
-  }
-};
-const getDiagram = (name) => {
-  if (name in diagrams) {
-    return diagrams[name];
-  }
-  throw new Error(`Diagram ${name} not found.`);
-};
-var parser$c = function() {
-  var o = function(k, v, o2, l) {
-    for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
-      ;
-    return o2;
-  }, $V0 = [1, 4], $V1 = [1, 7], $V2 = [1, 5], $V3 = [1, 9], $V4 = [1, 6], $V5 = [2, 6], $V6 = [1, 16], $V7 = [6, 8, 14, 20, 22, 24, 25, 27, 29, 32, 37, 40, 50, 55], $V8 = [8, 14, 20, 22, 24, 25, 27, 29, 32, 37, 40], $V9 = [8, 13, 14, 20, 22, 24, 25, 27, 29, 32, 37, 40], $Va = [1, 26], $Vb = [6, 8, 14, 50, 55], $Vc = [8, 14, 55], $Vd = [1, 53], $Ve = [1, 52], $Vf = [8, 14, 30, 33, 35, 38, 55], $Vg = [1, 67], $Vh = [1, 68], $Vi = [1, 69], $Vj = [8, 14, 33, 35, 42, 55];
-  var parser2 = {
-    trace: function trace() {
-    },
-    yy: {},
-    symbols_: { "error": 2, "start": 3, "eol": 4, "directive": 5, "GG": 6, "document": 7, "EOF": 8, ":": 9, "DIR": 10, "options": 11, "body": 12, "OPT": 13, "NL": 14, "line": 15, "statement": 16, "commitStatement": 17, "mergeStatement": 18, "cherryPickStatement": 19, "acc_title": 20, "acc_title_value": 21, "acc_descr": 22, "acc_descr_value": 23, "acc_descr_multiline_value": 24, "section": 25, "branchStatement": 26, "CHECKOUT": 27, "ref": 28, "BRANCH": 29, "ORDER": 30, "NUM": 31, "CHERRY_PICK": 32, "COMMIT_ID": 33, "STR": 34, "COMMIT_TAG": 35, "EMPTYSTR": 36, "MERGE": 37, "COMMIT_TYPE": 38, "commitType": 39, "COMMIT": 40, "commit_arg": 41, "COMMIT_MSG": 42, "NORMAL": 43, "REVERSE": 44, "HIGHLIGHT": 45, "openDirective": 46, "typeDirective": 47, "closeDirective": 48, "argDirective": 49, "open_directive": 50, "type_directive": 51, "arg_directive": 52, "close_directive": 53, "ID": 54, ";": 55, "$accept": 0, "$end": 1 },
-    terminals_: { 2: "error", 6: "GG", 8: "EOF", 9: ":", 10: "DIR", 13: "OPT", 14: "NL", 20: "acc_title", 21: "acc_title_value", 22: "acc_descr", 23: "acc_descr_value", 24: "acc_descr_multiline_value", 25: "section", 27: "CHECKOUT", 29: "BRANCH", 30: "ORDER", 31: "NUM", 32: "CHERRY_PICK", 33: "COMMIT_ID", 34: "STR", 35: "COMMIT_TAG", 36: "EMPTYSTR", 37: "MERGE", 38: "COMMIT_TYPE", 40: "COMMIT", 42: "COMMIT_MSG", 43: "NORMAL", 44: "REVERSE", 45: "HIGHLIGHT", 50: "open_directive", 51: "type_directive", 52: "arg_directive", 53: "close_directive", 54: "ID", 55: ";" },
-    productions_: [0, [3, 2], [3, 2], [3, 3], [3, 4], [3, 5], [7, 0], [7, 2], [11, 2], [11, 1], [12, 0], [12, 2], [15, 2], [15, 1], [16, 1], [16, 1], [16, 1], [16, 2], [16, 2], [16, 1], [16, 1], [16, 1], [16, 2], [26, 2], [26, 4], [19, 3], [19, 5], [19, 5], [19, 5], [19, 5], [18, 2], [18, 4], [18, 4], [18, 4], [18, 6], [18, 6], [18, 6], [18, 6], [18, 6], [18, 6], [18, 8], [18, 8], [18, 8], [18, 8], [18, 8], [18, 8], [17, 2], [17, 3], [17, 3], [17, 5], [17, 5], [17, 3], [17, 5], [17, 5], [17, 5], [17, 5], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 3], [17, 5], [17, 5], [17, 5], [17, 5], [17, 5], [17, 5], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 7], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [17, 9], [41, 0], [41, 1], [39, 1], [39, 1], [39, 1], [5, 3], [5, 5], [46, 1], [47, 1], [49, 1], [48, 1], [28, 1], [28, 1], [4, 1], [4, 1], [4, 1]],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
-      var $0 = $$.length - 1;
-      switch (yystate) {
-        case 3:
-          return $$[$0];
-        case 4:
-          return $$[$0 - 1];
-        case 5:
-          yy.setDirection($$[$0 - 3]);
-          return $$[$0 - 1];
-        case 7:
-          yy.setOptions($$[$0 - 1]);
-          this.$ = $$[$0];
-          break;
-        case 8:
-          $$[$0 - 1] += $$[$0];
-          this.$ = $$[$0 - 1];
-          break;
-        case 10:
-          this.$ = [];
-          break;
-        case 11:
-          $$[$0 - 1].push($$[$0]);
-          this.$ = $$[$0 - 1];
-          break;
-        case 12:
-          this.$ = $$[$0 - 1];
-          break;
-        case 17:
-          this.$ = $$[$0].trim();
-          yy.setAccTitle(this.$);
-          break;
-        case 18:
-        case 19:
-          this.$ = $$[$0].trim();
-          yy.setAccDescription(this.$);
-          break;
-        case 20:
-          yy.addSection($$[$0].substr(8));
-          this.$ = $$[$0].substr(8);
-          break;
-        case 22:
-          yy.checkout($$[$0]);
-          break;
-        case 23:
-          yy.branch($$[$0]);
-          break;
-        case 24:
-          yy.branch($$[$0 - 2], $$[$0]);
-          break;
-        case 25:
-          yy.cherryPick($$[$0], "", void 0);
-          break;
-        case 26:
-          yy.cherryPick($$[$0 - 2], "", $$[$0]);
-          break;
-        case 27:
-        case 29:
-          yy.cherryPick($$[$0 - 2], "", "");
-          break;
-        case 28:
-          yy.cherryPick($$[$0], "", $$[$0 - 2]);
-          break;
-        case 30:
-          yy.merge($$[$0], "", "", "");
-          break;
-        case 31:
-          yy.merge($$[$0 - 2], $$[$0], "", "");
-          break;
-        case 32:
-          yy.merge($$[$0 - 2], "", $$[$0], "");
-          break;
-        case 33:
-          yy.merge($$[$0 - 2], "", "", $$[$0]);
-          break;
-        case 34:
-          yy.merge($$[$0 - 4], $$[$0], "", $$[$0 - 2]);
-          break;
-        case 35:
-          yy.merge($$[$0 - 4], "", $$[$0], $$[$0 - 2]);
-          break;
-        case 36:
-          yy.merge($$[$0 - 4], "", $$[$0 - 2], $$[$0]);
-          break;
-        case 37:
-          yy.merge($$[$0 - 4], $$[$0 - 2], $$[$0], "");
-          break;
-        case 38:
-          yy.merge($$[$0 - 4], $$[$0 - 2], "", $$[$0]);
-          break;
-        case 39:
-          yy.merge($$[$0 - 4], $$[$0], $$[$0 - 2], "");
-          break;
-        case 40:
-          yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]);
-          break;
-        case 41:
-          yy.merge($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]);
-          break;
-        case 42:
-          yy.merge($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]);
-          break;
-        case 43:
-          yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]);
-          break;
-        case 44:
-          yy.merge($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]);
-          break;
-        case 45:
-          yy.merge($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]);
-          break;
-        case 46:
-          yy.commit($$[$0]);
-          break;
-        case 47:
-          yy.commit("", "", yy.commitType.NORMAL, $$[$0]);
-          break;
-        case 48:
-          yy.commit("", "", $$[$0], "");
-          break;
-        case 49:
-          yy.commit("", "", $$[$0], $$[$0 - 2]);
-          break;
-        case 50:
-          yy.commit("", "", $$[$0 - 2], $$[$0]);
-          break;
-        case 51:
-          yy.commit("", $$[$0], yy.commitType.NORMAL, "");
-          break;
-        case 52:
-          yy.commit("", $$[$0 - 2], yy.commitType.NORMAL, $$[$0]);
-          break;
-        case 53:
-          yy.commit("", $$[$0], yy.commitType.NORMAL, $$[$0 - 2]);
-          break;
-        case 54:
-          yy.commit("", $$[$0 - 2], $$[$0], "");
-          break;
-        case 55:
-          yy.commit("", $$[$0], $$[$0 - 2], "");
-          break;
-        case 56:
-          yy.commit("", $$[$0 - 4], $$[$0 - 2], $$[$0]);
-          break;
-        case 57:
-          yy.commit("", $$[$0 - 4], $$[$0], $$[$0 - 2]);
-          break;
-        case 58:
-          yy.commit("", $$[$0 - 2], $$[$0 - 4], $$[$0]);
-          break;
-        case 59:
-          yy.commit("", $$[$0], $$[$0 - 4], $$[$0 - 2]);
-          break;
-        case 60:
-          yy.commit("", $$[$0], $$[$0 - 2], $$[$0 - 4]);
-          break;
-        case 61:
-          yy.commit("", $$[$0 - 2], $$[$0], $$[$0 - 4]);
-          break;
-        case 62:
-          yy.commit($$[$0], "", yy.commitType.NORMAL, "");
-          break;
-        case 63:
-          yy.commit($$[$0], "", yy.commitType.NORMAL, $$[$0 - 2]);
-          break;
-        case 64:
-          yy.commit($$[$0 - 2], "", yy.commitType.NORMAL, $$[$0]);
-          break;
-        case 65:
-          yy.commit($$[$0 - 2], "", $$[$0], "");
-          break;
-        case 66:
-          yy.commit($$[$0], "", $$[$0 - 2], "");
-          break;
-        case 67:
-          yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, "");
-          break;
-        case 68:
-          yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, "");
-          break;
-        case 69:
-          yy.commit($$[$0 - 4], "", $$[$0 - 2], $$[$0]);
-          break;
-        case 70:
-          yy.commit($$[$0 - 4], "", $$[$0], $$[$0 - 2]);
-          break;
-        case 71:
-          yy.commit($$[$0 - 2], "", $$[$0 - 4], $$[$0]);
-          break;
-        case 72:
-          yy.commit($$[$0], "", $$[$0 - 4], $$[$0 - 2]);
-          break;
-        case 73:
-          yy.commit($$[$0], "", $$[$0 - 2], $$[$0 - 4]);
-          break;
-        case 74:
-          yy.commit($$[$0 - 2], "", $$[$0], $$[$0 - 4]);
-          break;
-        case 75:
-          yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], "");
-          break;
-        case 76:
-          yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], "");
-          break;
-        case 77:
-          yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], "");
-          break;
-        case 78:
-          yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], "");
-          break;
-        case 79:
-          yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], "");
-          break;
-        case 80:
-          yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], "");
-          break;
-        case 81:
-          yy.commit($$[$0 - 4], $$[$0], yy.commitType.NORMAL, $$[$0 - 2]);
-          break;
-        case 82:
-          yy.commit($$[$0 - 4], $$[$0 - 2], yy.commitType.NORMAL, $$[$0]);
-          break;
-        case 83:
-          yy.commit($$[$0 - 2], $$[$0], yy.commitType.NORMAL, $$[$0 - 4]);
-          break;
-        case 84:
-          yy.commit($$[$0], $$[$0 - 2], yy.commitType.NORMAL, $$[$0 - 4]);
-          break;
-        case 85:
-          yy.commit($$[$0], $$[$0 - 4], yy.commitType.NORMAL, $$[$0 - 2]);
-          break;
-        case 86:
-          yy.commit($$[$0 - 2], $$[$0 - 4], yy.commitType.NORMAL, $$[$0]);
-          break;
-        case 87:
-          yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0 - 2], $$[$0]);
-          break;
-        case 88:
-          yy.commit($$[$0 - 6], $$[$0 - 4], $$[$0], $$[$0 - 2]);
-          break;
-        case 89:
-          yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0 - 4], $$[$0]);
-          break;
-        case 90:
-          yy.commit($$[$0 - 6], $$[$0], $$[$0 - 4], $$[$0 - 2]);
-          break;
-        case 91:
-          yy.commit($$[$0 - 6], $$[$0 - 2], $$[$0], $$[$0 - 4]);
-          break;
-        case 92:
-          yy.commit($$[$0 - 6], $$[$0], $$[$0 - 2], $$[$0 - 4]);
-          break;
-        case 93:
-          yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0 - 2], $$[$0]);
-          break;
-        case 94:
-          yy.commit($$[$0 - 4], $$[$0 - 6], $$[$0], $$[$0 - 2]);
-          break;
-        case 95:
-          yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0 - 4], $$[$0]);
-          break;
-        case 96:
-          yy.commit($$[$0], $$[$0 - 6], $$[$0 - 4], $$[$0 - 2]);
-          break;
-        case 97:
-          yy.commit($$[$0 - 2], $$[$0 - 6], $$[$0], $$[$0 - 4]);
-          break;
-        case 98:
-          yy.commit($$[$0], $$[$0 - 6], $$[$0 - 2], $$[$0 - 4]);
-          break;
-        case 99:
-          yy.commit($$[$0], $$[$0 - 4], $$[$0 - 2], $$[$0 - 6]);
-          break;
-        case 100:
-          yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0], $$[$0 - 6]);
-          break;
-        case 101:
-          yy.commit($$[$0], $$[$0 - 2], $$[$0 - 4], $$[$0 - 6]);
-          break;
-        case 102:
-          yy.commit($$[$0 - 2], $$[$0], $$[$0 - 4], $$[$0 - 6]);
-          break;
-        case 103:
-          yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0], $$[$0 - 6]);
-          break;
-        case 104:
-          yy.commit($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 6]);
-          break;
-        case 105:
-          yy.commit($$[$0 - 2], $$[$0 - 4], $$[$0 - 6], $$[$0]);
-          break;
-        case 106:
-          yy.commit($$[$0], $$[$0 - 4], $$[$0 - 6], $$[$0 - 2]);
-          break;
-        case 107:
-          yy.commit($$[$0 - 2], $$[$0], $$[$0 - 6], $$[$0 - 4]);
-          break;
-        case 108:
-          yy.commit($$[$0], $$[$0 - 2], $$[$0 - 6], $$[$0 - 4]);
-          break;
-        case 109:
-          yy.commit($$[$0 - 4], $$[$0 - 2], $$[$0 - 6], $$[$0]);
-          break;
-        case 110:
-          yy.commit($$[$0 - 4], $$[$0], $$[$0 - 6], $$[$0 - 2]);
-          break;
-        case 111:
-          this.$ = "";
-          break;
-        case 112:
-          this.$ = $$[$0];
-          break;
-        case 113:
-          this.$ = yy.commitType.NORMAL;
-          break;
-        case 114:
-          this.$ = yy.commitType.REVERSE;
-          break;
-        case 115:
-          this.$ = yy.commitType.HIGHLIGHT;
-          break;
-        case 118:
-          yy.parseDirective("%%{", "open_directive");
-          break;
-        case 119:
-          yy.parseDirective($$[$0], "type_directive");
-          break;
-        case 120:
-          $$[$0] = $$[$0].trim().replace(/'/g, '"');
-          yy.parseDirective($$[$0], "arg_directive");
-          break;
-        case 121:
-          yy.parseDirective("}%%", "close_directive", "gitGraph");
-          break;
-      }
-    },
-    table: [{ 3: 1, 4: 2, 5: 3, 6: $V0, 8: $V1, 14: $V2, 46: 8, 50: $V3, 55: $V4 }, { 1: [3] }, { 3: 10, 4: 2, 5: 3, 6: $V0, 8: $V1, 14: $V2, 46: 8, 50: $V3, 55: $V4 }, { 3: 11, 4: 2, 5: 3, 6: $V0, 8: $V1, 14: $V2, 46: 8, 50: $V3, 55: $V4 }, { 7: 12, 8: $V5, 9: [1, 13], 10: [1, 14], 11: 15, 14: $V6 }, o($V7, [2, 124]), o($V7, [2, 125]), o($V7, [2, 126]), { 47: 17, 51: [1, 18] }, { 51: [2, 118] }, { 1: [2, 1] }, { 1: [2, 2] }, { 8: [1, 19] }, { 7: 20, 8: $V5, 11: 15, 14: $V6 }, { 9: [1, 21] }, o($V8, [2, 10], { 12: 22, 13: [1, 23] }), o($V9, [2, 9]), { 9: [1, 25], 48: 24, 53: $Va }, o([9, 53], [2, 119]), { 1: [2, 3] }, { 8: [1, 27] }, { 7: 28, 8: $V5, 11: 15, 14: $V6 }, { 8: [2, 7], 14: [1, 31], 15: 29, 16: 30, 17: 32, 18: 33, 19: 34, 20: [1, 35], 22: [1, 36], 24: [1, 37], 25: [1, 38], 26: 39, 27: [1, 40], 29: [1, 44], 32: [1, 43], 37: [1, 42], 40: [1, 41] }, o($V9, [2, 8]), o($Vb, [2, 116]), { 49: 45, 52: [1, 46] }, o($Vb, [2, 121]), { 1: [2, 4] }, { 8: [1, 47] }, o($V8, [2, 11]), { 4: 48, 8: $V1, 14: $V2, 55: $V4 }, o($V8, [2, 13]), o($Vc, [2, 14]), o($Vc, [2, 15]), o($Vc, [2, 16]), { 21: [1, 49] }, { 23: [1, 50] }, o($Vc, [2, 19]), o($Vc, [2, 20]), o($Vc, [2, 21]), { 28: 51, 34: $Vd, 54: $Ve }, o($Vc, [2, 111], { 41: 54, 33: [1, 57], 34: [1, 59], 35: [1, 55], 38: [1, 56], 42: [1, 58] }), { 28: 60, 34: $Vd, 54: $Ve }, { 33: [1, 61], 35: [1, 62] }, { 28: 63, 34: $Vd, 54: $Ve }, { 48: 64, 53: $Va }, { 53: [2, 120] }, { 1: [2, 5] }, o($V8, [2, 12]), o($Vc, [2, 17]), o($Vc, [2, 18]), o($Vc, [2, 22]), o($Vf, [2, 122]), o($Vf, [2, 123]), o($Vc, [2, 46]), { 34: [1, 65] }, { 39: 66, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 70] }, { 34: [1, 71] }, o($Vc, [2, 112]), o($Vc, [2, 30], { 33: [1, 72], 35: [1, 74], 38: [1, 73] }), { 34: [1, 75] }, { 34: [1, 76], 36: [1, 77] }, o($Vc, [2, 23], { 30: [1, 78] }), o($Vb, [2, 117]), o($Vc, [2, 47], { 33: [1, 80], 38: [1, 79], 42: [1, 81] }), o($Vc, [2, 48], { 33: [1, 83], 35: [1, 82], 42: [1, 84] }), o($Vj, [2, 113]), o($Vj, [2, 114]), o($Vj, [2, 115]), o($Vc, [2, 51], { 35: [1, 85], 38: [1, 86], 42: [1, 87] }), o($Vc, [2, 62], { 33: [1, 90], 35: [1, 88], 38: [1, 89] }), { 34: [1, 91] }, { 39: 92, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 93] }, o($Vc, [2, 25], { 35: [1, 94] }), { 33: [1, 95] }, { 33: [1, 96] }, { 31: [1, 97] }, { 39: 98, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 99] }, { 34: [1, 100] }, { 34: [1, 101] }, { 34: [1, 102] }, { 34: [1, 103] }, { 34: [1, 104] }, { 39: 105, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 106] }, { 34: [1, 107] }, { 39: 108, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 109] }, o($Vc, [2, 31], { 35: [1, 111], 38: [1, 110] }), o($Vc, [2, 32], { 33: [1, 113], 35: [1, 112] }), o($Vc, [2, 33], { 33: [1, 114], 38: [1, 115] }), { 34: [1, 116], 36: [1, 117] }, { 34: [1, 118] }, { 34: [1, 119] }, o($Vc, [2, 24]), o($Vc, [2, 49], { 33: [1, 120], 42: [1, 121] }), o($Vc, [2, 53], { 38: [1, 122], 42: [1, 123] }), o($Vc, [2, 63], { 33: [1, 125], 38: [1, 124] }), o($Vc, [2, 50], { 33: [1, 126], 42: [1, 127] }), o($Vc, [2, 55], { 35: [1, 128], 42: [1, 129] }), o($Vc, [2, 66], { 33: [1, 131], 35: [1, 130] }), o($Vc, [2, 52], { 38: [1, 132], 42: [1, 133] }), o($Vc, [2, 54], { 35: [1, 134], 42: [1, 135] }), o($Vc, [2, 67], { 35: [1, 137], 38: [1, 136] }), o($Vc, [2, 64], { 33: [1, 139], 38: [1, 138] }), o($Vc, [2, 65], { 33: [1, 141], 35: [1, 140] }), o($Vc, [2, 68], { 35: [1, 143], 38: [1, 142] }), { 39: 144, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 145] }, { 34: [1, 146] }, { 34: [1, 147] }, { 34: [1, 148] }, { 39: 149, 43: $Vg, 44: $Vh, 45: $Vi }, o($Vc, [2, 26]), o($Vc, [2, 27]), o($Vc, [2, 28]), o($Vc, [2, 29]), { 34: [1, 150] }, { 34: [1, 151] }, { 39: 152, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 153] }, { 39: 154, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 155] }, { 34: [1, 156] }, { 34: [1, 157] }, { 34: [1, 158] }, { 34: [1, 159] }, { 34: [1, 160] }, { 34: [1, 161] }, { 39: 162, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 163] }, { 34: [1, 164] }, { 34: [1, 165] }, { 39: 166, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 167] }, { 39: 168, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 169] }, { 34: [1, 170] }, { 34: [1, 171] }, { 39: 172, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 173] }, o($Vc, [2, 37], { 35: [1, 174] }), o($Vc, [2, 38], { 38: [1, 175] }), o($Vc, [2, 36], { 33: [1, 176] }), o($Vc, [2, 39], { 35: [1, 177] }), o($Vc, [2, 34], { 38: [1, 178] }), o($Vc, [2, 35], { 33: [1, 179] }), o($Vc, [2, 60], { 42: [1, 180] }), o($Vc, [2, 73], { 33: [1, 181] }), o($Vc, [2, 61], { 42: [1, 182] }), o($Vc, [2, 84], { 38: [1, 183] }), o($Vc, [2, 74], { 33: [1, 184] }), o($Vc, [2, 83], { 38: [1, 185] }), o($Vc, [2, 59], { 42: [1, 186] }), o($Vc, [2, 72], { 33: [1, 187] }), o($Vc, [2, 58], { 42: [1, 188] }), o($Vc, [2, 78], { 35: [1, 189] }), o($Vc, [2, 71], { 33: [1, 190] }), o($Vc, [2, 77], { 35: [1, 191] }), o($Vc, [2, 57], { 42: [1, 192] }), o($Vc, [2, 85], { 38: [1, 193] }), o($Vc, [2, 56], { 42: [1, 194] }), o($Vc, [2, 79], { 35: [1, 195] }), o($Vc, [2, 80], { 35: [1, 196] }), o($Vc, [2, 86], { 38: [1, 197] }), o($Vc, [2, 70], { 33: [1, 198] }), o($Vc, [2, 81], { 38: [1, 199] }), o($Vc, [2, 69], { 33: [1, 200] }), o($Vc, [2, 75], { 35: [1, 201] }), o($Vc, [2, 76], { 35: [1, 202] }), o($Vc, [2, 82], { 38: [1, 203] }), { 34: [1, 204] }, { 39: 205, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 206] }, { 34: [1, 207] }, { 39: 208, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 209] }, { 34: [1, 210] }, { 34: [1, 211] }, { 34: [1, 212] }, { 39: 213, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 214] }, { 39: 215, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 216] }, { 34: [1, 217] }, { 34: [1, 218] }, { 34: [1, 219] }, { 34: [1, 220] }, { 34: [1, 221] }, { 34: [1, 222] }, { 39: 223, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 224] }, { 34: [1, 225] }, { 34: [1, 226] }, { 39: 227, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 228] }, { 39: 229, 43: $Vg, 44: $Vh, 45: $Vi }, { 34: [1, 230] }, { 34: [1, 231] }, { 34: [1, 232] }, { 39: 233, 43: $Vg, 44: $Vh, 45: $Vi }, o($Vc, [2, 40]), o($Vc, [2, 42]), o($Vc, [2, 41]), o($Vc, [2, 43]), o($Vc, [2, 45]), o($Vc, [2, 44]), o($Vc, [2, 101]), o($Vc, [2, 102]), o($Vc, [2, 99]), o($Vc, [2, 100]), o($Vc, [2, 104]), o($Vc, [2, 103]), o($Vc, [2, 108]), o($Vc, [2, 107]), o($Vc, [2, 106]), o($Vc, [2, 105]), o($Vc, [2, 110]), o($Vc, [2, 109]), o($Vc, [2, 98]), o($Vc, [2, 97]), o($Vc, [2, 96]), o($Vc, [2, 95]), o($Vc, [2, 93]), o($Vc, [2, 94]), o($Vc, [2, 92]), o($Vc, [2, 91]), o($Vc, [2, 90]), o($Vc, [2, 89]), o($Vc, [2, 87]), o($Vc, [2, 88])],
-    defaultActions: { 9: [2, 118], 10: [2, 1], 11: [2, 2], 19: [2, 3], 27: [2, 4], 46: [2, 120], 47: [2, 5] },
-    parseError: function parseError(str2, hash) {
-      if (hash.recoverable) {
-        this.trace(str2);
-      } else {
-        var error = new Error(str2);
-        error.hash = hash;
-        throw error;
-      }
-    },
-    parse: function parse2(input) {
-      var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;
-      var args = lstack.slice.call(arguments, 1);
-      var lexer2 = Object.create(this.lexer);
-      var sharedState = { yy: {} };
-      for (var k in this.yy) {
-        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
-          sharedState.yy[k] = this.yy[k];
-        }
-      }
-      lexer2.setInput(input, sharedState.yy);
-      sharedState.yy.lexer = lexer2;
-      sharedState.yy.parser = this;
-      if (typeof lexer2.yylloc == "undefined") {
-        lexer2.yylloc = {};
-      }
-      var yyloc = lexer2.yylloc;
-      lstack.push(yyloc);
-      var ranges = lexer2.options && lexer2.options.ranges;
-      if (typeof sharedState.yy.parseError === "function") {
-        this.parseError = sharedState.yy.parseError;
-      } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-      }
-      function lex2() {
-        var token;
-        token = tstack.pop() || lexer2.lex() || EOF;
-        if (typeof token !== "number") {
-          if (token instanceof Array) {
-            tstack = token;
-            token = tstack.pop();
-          }
-          token = self.symbols_[token] || token;
-        }
-        return token;
-      }
-      var symbol, state, action, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-          action = this.defaultActions[state];
-        } else {
-          if (symbol === null || typeof symbol == "undefined") {
-            symbol = lex2();
-          }
-          action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-          var errStr = "";
-          expected = [];
-          for (p in table[state]) {
-            if (this.terminals_[p] && p > TERROR) {
-              expected.push("'" + this.terminals_[p] + "'");
-            }
-          }
-          if (lexer2.showPosition) {
-            errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-          } else {
-            errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
-          }
-          this.parseError(errStr, {
-            text: lexer2.match,
-            token: this.terminals_[symbol] || symbol,
-            line: lexer2.yylineno,
-            loc: yyloc,
-            expected
-          });
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-          throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-          case 1:
-            stack.push(symbol);
-            vstack.push(lexer2.yytext);
-            lstack.push(lexer2.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            {
-              yyleng = lexer2.yyleng;
-              yytext = lexer2.yytext;
-              yylineno = lexer2.yylineno;
-              yyloc = lexer2.yylloc;
-            }
-            break;
-          case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-              first_line: lstack[lstack.length - (len || 1)].first_line,
-              last_line: lstack[lstack.length - 1].last_line,
-              first_column: lstack[lstack.length - (len || 1)].first_column,
-              last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-              yyval._$.range = [
-                lstack[lstack.length - (len || 1)].range[0],
-                lstack[lstack.length - 1].range[1]
-              ];
-            }
-            r = this.performAction.apply(yyval, [
-              yytext,
-              yyleng,
-              yylineno,
-              sharedState.yy,
-              action[1],
-              vstack,
-              lstack
-            ].concat(args));
-            if (typeof r !== "undefined") {
-              return r;
-            }
-            if (len) {
-              stack = stack.slice(0, -1 * len * 2);
-              vstack = vstack.slice(0, -1 * len);
-              lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-          case 3:
-            return true;
-        }
-      }
-      return true;
-    }
-  };
-  var lexer = function() {
-    var lexer2 = {
-      EOF: 1,
-      parseError: function parseError(str2, hash) {
-        if (this.yy.parser) {
-          this.yy.parser.parseError(str2, hash);
-        } else {
-          throw new Error(str2);
-        }
-      },
-      // resets the lexer, sets new input
-      setInput: function(input, yy) {
-        this.yy = yy || this.yy || {};
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = "";
-        this.conditionStack = ["INITIAL"];
-        this.yylloc = {
-          first_line: 1,
-          first_column: 0,
-          last_line: 1,
-          last_column: 0
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [0, 0];
-        }
-        this.offset = 0;
-        return this;
-      },
-      // consumes and returns one char from the input
-      input: function() {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno++;
-          this.yylloc.last_line++;
-        } else {
-          this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-          this.yylloc.range[1]++;
-        }
-        this._input = this._input.slice(1);
-        return ch;
-      },
-      // unshifts one char (or a string) into the input
-      unput: function(ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len);
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-        if (lines.length - 1) {
-          this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-        this.yylloc = {
-          first_line: this.yylloc.first_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.first_column,
-          last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-      },
-      // When called from action, caches matched text and appends it on next action
-      more: function() {
-        this._more = true;
-        return this;
-      },
-      // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-      reject: function() {
-        if (this.options.backtrack_lexer) {
-          this._backtrack = true;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-        return this;
-      },
-      // retain first n characters of the match
-      less: function(n) {
-        this.unput(this.match.slice(n));
-      },
-      // displays already matched input, i.e. for error messages
-      pastInput: function() {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
-      },
-      // displays upcoming input, i.e. for error messages
-      upcomingInput: function() {
-        var next = this.match;
-        if (next.length < 20) {
-          next += this._input.substr(0, 20 - next.length);
-        }
-        return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
-      },
-      // displays the character position where the lexing error occurred, i.e. for error messages
-      showPosition: function() {
-        var pre = this.pastInput();
-        var c2 = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c2 + "^";
-      },
-      // test the lexed token: return FALSE when not a match, otherwise return token
-      test_match: function(match, indexed_rule) {
-        var token, lines, backup;
-        if (this.options.backtrack_lexer) {
-          backup = {
-            yylineno: this.yylineno,
-            yylloc: {
-              first_line: this.yylloc.first_line,
-              last_line: this.last_line,
-              first_column: this.yylloc.first_column,
-              last_column: this.yylloc.last_column
-            },
-            yytext: this.yytext,
-            match: this.match,
-            matches: this.matches,
-            matched: this.matched,
-            yyleng: this.yyleng,
-            offset: this.offset,
-            _more: this._more,
-            _input: this._input,
-            yy: this.yy,
-            conditionStack: this.conditionStack.slice(0),
-            done: this.done
-          };
-          if (this.options.ranges) {
-            backup.yylloc.range = this.yylloc.range.slice(0);
-          }
-        }
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno += lines.length;
-        }
-        this.yylloc = {
-          first_line: this.yylloc.last_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.last_column,
-          last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-          this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-          this.done = false;
-        }
-        if (token) {
-          return token;
-        } else if (this._backtrack) {
-          for (var k in backup) {
-            this[k] = backup[k];
-          }
-          return false;
-        }
-        return false;
-      },
-      // return next match in input
-      next: function() {
-        if (this.done) {
-          return this.EOF;
-        }
-        if (!this._input) {
-          this.done = true;
-        }
-        var token, match, tempMatch, index;
-        if (!this._more) {
-          this.yytext = "";
-          this.match = "";
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-          tempMatch = this._input.match(this.rules[rules[i]]);
-          if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-            match = tempMatch;
-            index = i;
-            if (this.options.backtrack_lexer) {
-              token = this.test_match(tempMatch, rules[i]);
-              if (token !== false) {
-                return token;
-              } else if (this._backtrack) {
-                match = false;
-                continue;
-              } else {
-                return false;
-              }
-            } else if (!this.options.flex) {
-              break;
-            }
-          }
-        }
-        if (match) {
-          token = this.test_match(match, rules[index]);
-          if (token !== false) {
-            return token;
-          }
-          return false;
-        }
-        if (this._input === "") {
-          return this.EOF;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-      },
-      // return next match that has a token
-      lex: function lex2() {
-        var r = this.next();
-        if (r) {
-          return r;
-        } else {
-          return this.lex();
-        }
-      },
-      // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-      begin: function begin(condition) {
-        this.conditionStack.push(condition);
-      },
-      // pop the previously active lexer condition state off the condition stack
-      popState: function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-          return this.conditionStack.pop();
-        } else {
-          return this.conditionStack[0];
-        }
-      },
-      // produce the lexer rule set which is active for the currently active lexer condition state
-      _currentRules: function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-          return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-          return this.conditions["INITIAL"].rules;
-        }
-      },
-      // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-      topState: function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-          return this.conditionStack[n];
-        } else {
-          return "INITIAL";
-        }
-      },
-      // alias for begin(condition)
-      pushState: function pushState(condition) {
-        this.begin(condition);
-      },
-      // return the number of states currently on the stack
-      stateStackSize: function stateStackSize() {
-        return this.conditionStack.length;
-      },
-      options: { "case-insensitive": true },
-      performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
-        switch ($avoiding_name_collisions) {
-          case 0:
-            this.begin("open_directive");
-            return 50;
-          case 1:
-            this.begin("type_directive");
-            return 51;
-          case 2:
-            this.popState();
-            this.begin("arg_directive");
-            return 9;
-          case 3:
-            this.popState();
-            this.popState();
-            return 53;
-          case 4:
-            return 52;
-          case 5:
-            this.begin("acc_title");
-            return 20;
-          case 6:
-            this.popState();
-            return "acc_title_value";
-          case 7:
-            this.begin("acc_descr");
-            return 22;
-          case 8:
-            this.popState();
-            return "acc_descr_value";
-          case 9:
-            this.begin("acc_descr_multiline");
-            break;
-          case 10:
-            this.popState();
-            break;
-          case 11:
-            return "acc_descr_multiline_value";
-          case 12:
-            return 14;
-          case 13:
-            break;
-          case 14:
-            break;
-          case 15:
-            return 6;
-          case 16:
-            return 40;
-          case 17:
-            return 33;
-          case 18:
-            return 38;
-          case 19:
-            return 42;
-          case 20:
-            return 43;
-          case 21:
-            return 44;
-          case 22:
-            return 45;
-          case 23:
-            return 35;
-          case 24:
-            return 29;
-          case 25:
-            return 30;
-          case 26:
-            return 37;
-          case 27:
-            return 32;
-          case 28:
-            return 27;
-          case 29:
-            return 10;
-          case 30:
-            return 10;
-          case 31:
-            return 9;
-          case 32:
-            return "CARET";
-          case 33:
-            this.begin("options");
-            break;
-          case 34:
-            this.popState();
-            break;
-          case 35:
-            return 13;
-          case 36:
-            return 36;
-          case 37:
-            this.begin("string");
-            break;
-          case 38:
-            this.popState();
-            break;
-          case 39:
-            return 34;
-          case 40:
-            return 31;
-          case 41:
-            return 54;
-          case 42:
-            return 8;
-        }
-      },
-      rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:(\r?\n)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:gitGraph\b)/i, /^(?:commit(?=\s|$))/i, /^(?:id:)/i, /^(?:type:)/i, /^(?:msg:)/i, /^(?:NORMAL\b)/i, /^(?:REVERSE\b)/i, /^(?:HIGHLIGHT\b)/i, /^(?:tag:)/i, /^(?:branch(?=\s|$))/i, /^(?:order:)/i, /^(?:merge(?=\s|$))/i, /^(?:cherry-pick(?=\s|$))/i, /^(?:checkout(?=\s|$))/i, /^(?:LR\b)/i, /^(?:BT\b)/i, /^(?::)/i, /^(?:\^)/i, /^(?:options\r?\n)/i, /^(?:[ \r\n\t]+end\b)/i, /^(?:[\s\S]+(?=[ \r\n\t]+end))/i, /^(?:["]["])/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[0-9]+(?=\s|$))/i, /^(?:\w([-\./\w]*[-\w])?)/i, /^(?:$)/i, /^(?:\s+)/i],
-      conditions: { "acc_descr_multiline": { "rules": [10, 11], "inclusive": false }, "acc_descr": { "rules": [8], "inclusive": false }, "acc_title": { "rules": [6], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "options": { "rules": [34, 35], "inclusive": false }, "string": { "rules": [38, 39], "inclusive": false }, "INITIAL": { "rules": [0, 5, 7, 9, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 36, 37, 40, 41, 42, 43], "inclusive": true } }
-    };
-    return lexer2;
-  }();
-  parser2.lexer = lexer;
-  function Parser() {
-    this.yy = {};
-  }
-  Parser.prototype = parser2;
-  parser2.Parser = Parser;
-  return new Parser();
-}();
-parser$c.parser = parser$c;
-const gitGraphParser = parser$c;
-const gitGraphDetector = (txt) => {
-  return txt.match(/^\s*gitGraph/) !== null;
-};
-let mainBranchName = getConfig$1().gitGraph.mainBranchName;
-let mainBranchOrder = getConfig$1().gitGraph.mainBranchOrder;
-let commits = {};
-let head = null;
-let branchesConfig = {};
-branchesConfig[mainBranchName] = { name: mainBranchName, order: mainBranchOrder };
-let branches = {};
-branches[mainBranchName] = head;
-let curBranch = mainBranchName;
-let direction$3 = "LR";
-let seq = 0;
-function getId() {
-  return random({ length: 7 });
-}
-const parseDirective$a = function(statement, context, type2) {
-  mermaidAPI.parseDirective(this, statement, context, type2);
-};
-function uniqBy(list, fn) {
-  const recordMap = /* @__PURE__ */ Object.create(null);
-  return list.reduce((out, item) => {
-    const key = fn(item);
-    if (!recordMap[key]) {
-      recordMap[key] = true;
-      out.push(item);
-    }
-    return out;
-  }, []);
-}
-const setDirection$3 = function(dir) {
-  direction$3 = dir;
-};
-let options = {};
-const setOptions = function(rawOptString) {
-  log$1.debug("options str", rawOptString);
-  rawOptString = rawOptString && rawOptString.trim();
-  rawOptString = rawOptString || "{}";
-  try {
-    options = JSON.parse(rawOptString);
-  } catch (e) {
-    log$1.error("error while parsing gitGraph options", e.message);
-  }
-};
-const getOptions = function() {
-  return options;
-};
-const commit = function(msg, id2, type2, tag) {
-  log$1.debug("Entering commit:", msg, id2, type2, tag);
-  id2 = common$1.sanitizeText(id2, getConfig$1());
-  msg = common$1.sanitizeText(msg, getConfig$1());
-  tag = common$1.sanitizeText(tag, getConfig$1());
-  const commit2 = {
-    id: id2 ? id2 : seq + "-" + getId(),
-    message: msg,
-    seq: seq++,
-    type: type2 ? type2 : commitType$1.NORMAL,
-    tag: tag ? tag : "",
-    parents: head == null ? [] : [head.id],
-    branch: curBranch
-  };
-  head = commit2;
-  commits[commit2.id] = commit2;
-  branches[curBranch] = commit2.id;
-  log$1.debug("in pushCommit " + commit2.id);
-};
-const branch = function(name, order) {
-  name = common$1.sanitizeText(name, getConfig$1());
-  if (branches[name] === void 0) {
-    branches[name] = head != null ? head.id : null;
-    branchesConfig[name] = { name, order: order ? parseInt(order, 10) : null };
-    checkout(name);
-    log$1.debug("in createBranch");
-  } else {
-    let error = new Error(
-      'Trying to create an existing branch. (Help: Either use a new name if you want create a new branch or try using "checkout ' + name + '")'
-    );
-    error.hash = {
-      text: "branch " + name,
-      token: "branch " + name,
-      line: "1",
-      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
-      expected: ['"checkout ' + name + '"']
-    };
-    throw error;
-  }
-};
-const merge = function(otherBranch, custom_id, override_type, custom_tag) {
-  otherBranch = common$1.sanitizeText(otherBranch, getConfig$1());
-  custom_id = common$1.sanitizeText(custom_id, getConfig$1());
-  const currentCommit = commits[branches[curBranch]];
-  const otherCommit = commits[branches[otherBranch]];
-  if (curBranch === otherBranch) {
-    let error = new Error('Incorrect usage of "merge". Cannot merge a branch to itself');
-    error.hash = {
-      text: "merge " + otherBranch,
-      token: "merge " + otherBranch,
-      line: "1",
-      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
-      expected: ["branch abc"]
-    };
-    throw error;
-  } else if (currentCommit === void 0 || !currentCommit) {
-    let error = new Error(
-      'Incorrect usage of "merge". Current branch (' + curBranch + ")has no commits"
-    );
-    error.hash = {
-      text: "merge " + otherBranch,
-      token: "merge " + otherBranch,
-      line: "1",
-      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
-      expected: ["commit"]
-    };
-    throw error;
-  } else if (branches[otherBranch] === void 0) {
-    let error = new Error(
-      'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") does not exist"
-    );
-    error.hash = {
-      text: "merge " + otherBranch,
-      token: "merge " + otherBranch,
-      line: "1",
-      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
-      expected: ["branch " + otherBranch]
-    };
-    throw error;
-  } else if (otherCommit === void 0 || !otherCommit) {
-    let error = new Error(
-      'Incorrect usage of "merge". Branch to be merged (' + otherBranch + ") has no commits"
-    );
-    error.hash = {
-      text: "merge " + otherBranch,
-      token: "merge " + otherBranch,
-      line: "1",
-      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
-      expected: ['"commit"']
-    };
-    throw error;
-  } else if (currentCommit === otherCommit) {
-    let error = new Error('Incorrect usage of "merge". Both branches have same head');
-    error.hash = {
-      text: "merge " + otherBranch,
-      token: "merge " + otherBranch,
-      line: "1",
-      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
-      expected: ["branch abc"]
-    };
-    throw error;
-  } else if (custom_id && commits[custom_id] !== void 0) {
-    let error = new Error(
-      'Incorrect usage of "merge". Commit with id:' + custom_id + " already exists, use different custom Id"
-    );
-    error.hash = {
-      text: "merge " + otherBranch + custom_id + override_type + custom_tag,
-      token: "merge " + otherBranch + custom_id + override_type + custom_tag,
-      line: "1",
-      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
-      expected: [
-        "merge " + otherBranch + " " + custom_id + "_UNIQUE " + override_type + " " + custom_tag
-      ]
-    };
-    throw error;
-  }
-  const commit2 = {
-    id: custom_id ? custom_id : seq + "-" + getId(),
-    message: "merged branch " + otherBranch + " into " + curBranch,
-    seq: seq++,
-    parents: [head == null ? null : head.id, branches[otherBranch]],
-    branch: curBranch,
-    type: commitType$1.MERGE,
-    customType: override_type,
-    customId: custom_id ? true : false,
-    tag: custom_tag ? custom_tag : ""
-  };
-  head = commit2;
-  commits[commit2.id] = commit2;
-  branches[curBranch] = commit2.id;
-  log$1.debug(branches);
-  log$1.debug("in mergeBranch");
-};
-const cherryPick = function(sourceId, targetId, tag) {
-  log$1.debug("Entering cherryPick:", sourceId, targetId, tag);
-  sourceId = common$1.sanitizeText(sourceId, getConfig$1());
-  targetId = common$1.sanitizeText(targetId, getConfig$1());
-  tag = common$1.sanitizeText(tag, getConfig$1());
-  if (!sourceId || commits[sourceId] === void 0) {
-    let error = new Error(
-      'Incorrect usage of "cherryPick". Source commit id should exist and provided'
-    );
-    error.hash = {
-      text: "cherryPick " + sourceId + " " + targetId,
-      token: "cherryPick " + sourceId + " " + targetId,
-      line: "1",
-      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
-      expected: ["cherry-pick abc"]
-    };
-    throw error;
-  }
-  let sourceCommit = commits[sourceId];
-  let sourceCommitBranch = sourceCommit.branch;
-  if (sourceCommit.type === commitType$1.MERGE) {
-    let error = new Error(
-      'Incorrect usage of "cherryPick". Source commit should not be a merge commit'
-    );
-    error.hash = {
-      text: "cherryPick " + sourceId + " " + targetId,
-      token: "cherryPick " + sourceId + " " + targetId,
-      line: "1",
-      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
-      expected: ["cherry-pick abc"]
-    };
-    throw error;
-  }
-  if (!targetId || commits[targetId] === void 0) {
-    if (sourceCommitBranch === curBranch) {
-      let error = new Error(
-        'Incorrect usage of "cherryPick". Source commit is already on current branch'
-      );
-      error.hash = {
-        text: "cherryPick " + sourceId + " " + targetId,
-        token: "cherryPick " + sourceId + " " + targetId,
-        line: "1",
-        loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
-        expected: ["cherry-pick abc"]
-      };
-      throw error;
-    }
-    const currentCommit = commits[branches[curBranch]];
-    if (currentCommit === void 0 || !currentCommit) {
-      let error = new Error(
-        'Incorrect usage of "cherry-pick". Current branch (' + curBranch + ")has no commits"
-      );
-      error.hash = {
-        text: "cherryPick " + sourceId + " " + targetId,
-        token: "cherryPick " + sourceId + " " + targetId,
-        line: "1",
-        loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
-        expected: ["cherry-pick abc"]
-      };
-      throw error;
-    }
-    const commit2 = {
-      id: seq + "-" + getId(),
-      message: "cherry-picked " + sourceCommit + " into " + curBranch,
-      seq: seq++,
-      parents: [head == null ? null : head.id, sourceCommit.id],
-      branch: curBranch,
-      type: commitType$1.CHERRY_PICK,
-      tag: tag ?? "cherry-pick:" + sourceCommit.id
-    };
-    head = commit2;
-    commits[commit2.id] = commit2;
-    branches[curBranch] = commit2.id;
-    log$1.debug(branches);
-    log$1.debug("in cherryPick");
-  }
-};
-const checkout = function(branch2) {
-  branch2 = common$1.sanitizeText(branch2, getConfig$1());
-  if (branches[branch2] === void 0) {
-    let error = new Error(
-      'Trying to checkout branch which is not yet created. (Help try using "branch ' + branch2 + '")'
-    );
-    error.hash = {
-      text: "checkout " + branch2,
-      token: "checkout " + branch2,
-      line: "1",
-      loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
-      expected: ['"branch ' + branch2 + '"']
-    };
-    throw error;
-  } else {
-    curBranch = branch2;
-    const id2 = branches[curBranch];
-    head = commits[id2];
-  }
-};
-function upsert(arr, key, newVal) {
-  const index = arr.indexOf(key);
-  if (index === -1) {
-    arr.push(newVal);
-  } else {
-    arr.splice(index, 1, newVal);
-  }
-}
-function prettyPrintCommitHistory(commitArr) {
-  const commit2 = commitArr.reduce((out, commit3) => {
-    if (out.seq > commit3.seq) {
-      return out;
-    }
-    return commit3;
-  }, commitArr[0]);
-  let line2 = "";
-  commitArr.forEach(function(c2) {
-    if (c2 === commit2) {
-      line2 += "	*";
-    } else {
-      line2 += "	|";
-    }
-  });
-  const label = [line2, commit2.id, commit2.seq];
-  for (let branch2 in branches) {
-    if (branches[branch2] === commit2.id) {
-      label.push(branch2);
-    }
-  }
-  log$1.debug(label.join(" "));
-  if (commit2.parents && commit2.parents.length == 2) {
-    const newCommit = commits[commit2.parents[0]];
-    upsert(commitArr, commit2, newCommit);
-    commitArr.push(commits[commit2.parents[1]]);
-  } else if (commit2.parents.length == 0) {
-    return;
-  } else {
-    const nextCommit = commits[commit2.parents];
-    upsert(commitArr, commit2, nextCommit);
-  }
-  commitArr = uniqBy(commitArr, (c2) => c2.id);
-  prettyPrintCommitHistory(commitArr);
-}
-const prettyPrint = function() {
-  log$1.debug(commits);
-  const node = getCommitsArray()[0];
-  prettyPrintCommitHistory([node]);
-};
-const clear$f = function() {
-  commits = {};
-  head = null;
-  let mainBranch = getConfig$1().gitGraph.mainBranchName;
-  let mainBranchOrder2 = getConfig$1().gitGraph.mainBranchOrder;
-  branches = {};
-  branches[mainBranch] = null;
-  branchesConfig = {};
-  branchesConfig[mainBranch] = { name: mainBranch, order: mainBranchOrder2 };
-  curBranch = mainBranch;
-  seq = 0;
-  clear$g();
-};
-const getBranchesAsObjArray = function() {
-  const branchesArray = Object.values(branchesConfig).map((branchConfig, i) => {
-    if (branchConfig.order !== null) {
-      return branchConfig;
-    }
-    return {
-      ...branchConfig,
-      order: parseFloat(`0.${i}`, 10)
-    };
-  }).sort((a, b) => a.order - b.order).map(({ name }) => ({ name }));
-  return branchesArray;
-};
-const getBranches = function() {
-  return branches;
-};
-const getCommits = function() {
-  return commits;
-};
-const getCommitsArray = function() {
-  const commitArr = Object.keys(commits).map(function(key) {
-    return commits[key];
-  });
-  commitArr.forEach(function(o) {
-    log$1.debug(o.id);
-  });
-  commitArr.sort((a, b) => a.seq - b.seq);
-  return commitArr;
-};
-const getCurrentBranch = function() {
-  return curBranch;
-};
-const getDirection$3 = function() {
-  return direction$3;
-};
-const getHead = function() {
-  return head;
-};
-const commitType$1 = {
-  NORMAL: 0,
-  REVERSE: 1,
-  HIGHLIGHT: 2,
-  MERGE: 3,
-  CHERRY_PICK: 4
-};
-const gitGraphDb = {
-  parseDirective: parseDirective$a,
-  getConfig: () => getConfig$1().gitGraph,
-  setDirection: setDirection$3,
-  setOptions,
-  getOptions,
-  commit,
-  branch,
-  merge,
-  cherryPick,
-  checkout,
-  //reset,
-  prettyPrint,
-  clear: clear$f,
-  getBranchesAsObjArray,
-  getBranches,
-  getCommits,
-  getCommitsArray,
-  getCurrentBranch,
-  getDirection: getDirection$3,
-  getHead,
-  setAccTitle,
-  getAccTitle,
-  getAccDescription,
-  setAccDescription,
-  setDiagramTitle,
-  getDiagramTitle,
-  commitType: commitType$1
-};
-let allCommitsDict = {};
-const commitType = {
-  NORMAL: 0,
-  REVERSE: 1,
-  HIGHLIGHT: 2,
-  MERGE: 3,
-  CHERRY_PICK: 4
-};
-const THEME_COLOR_LIMIT = 8;
-let branchPos = {};
-let commitPos = {};
-let lanes = [];
-let maxPos = 0;
-const clear$e = () => {
-  branchPos = {};
-  commitPos = {};
-  allCommitsDict = {};
-  maxPos = 0;
-  lanes = [];
-};
-const drawText$2 = (txt) => {
-  const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text");
-  let rows = [];
-  if (typeof txt === "string") {
-    rows = txt.split(/\\n|\n|<br\s*\/?>/gi);
-  } else if (Array.isArray(txt)) {
-    rows = txt;
-  } else {
-    rows = [];
-  }
-  for (const row of rows) {
-    const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
-    tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve");
-    tspan.setAttribute("dy", "1em");
-    tspan.setAttribute("x", "0");
-    tspan.setAttribute("class", "row");
-    tspan.textContent = row.trim();
-    svgLabel.appendChild(tspan);
-  }
-  return svgLabel;
-};
-const drawCommits = (svg, commits2, modifyGraph) => {
-  const gitGraphConfig = getConfig().gitGraph;
-  const gBullets = svg.append("g").attr("class", "commit-bullets");
-  const gLabels = svg.append("g").attr("class", "commit-labels");
-  let pos = 0;
-  const keys2 = Object.keys(commits2);
-  const sortedKeys = keys2.sort((a, b) => {
-    return commits2[a].seq - commits2[b].seq;
-  });
-  sortedKeys.forEach((key) => {
-    const commit2 = commits2[key];
-    const y = branchPos[commit2.branch].pos;
-    const x = pos + 10;
-    if (modifyGraph) {
-      let typeClass;
-      let commitSymbolType = commit2.customType !== void 0 && commit2.customType !== "" ? commit2.customType : commit2.type;
-      switch (commitSymbolType) {
-        case commitType.NORMAL:
-          typeClass = "commit-normal";
-          break;
-        case commitType.REVERSE:
-          typeClass = "commit-reverse";
-          break;
-        case commitType.HIGHLIGHT:
-          typeClass = "commit-highlight";
-          break;
-        case commitType.MERGE:
-          typeClass = "commit-merge";
-          break;
-        case commitType.CHERRY_PICK:
-          typeClass = "commit-cherry-pick";
-          break;
-        default:
-          typeClass = "commit-normal";
-      }
-      if (commitSymbolType === commitType.HIGHLIGHT) {
-        const circle2 = gBullets.append("rect");
-        circle2.attr("x", x - 10);
-        circle2.attr("y", y - 10);
-        circle2.attr("height", 20);
-        circle2.attr("width", 20);
-        circle2.attr(
-          "class",
-          `commit ${commit2.id} commit-highlight${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-outer`
-        );
-        gBullets.append("rect").attr("x", x - 6).attr("y", y - 6).attr("height", 12).attr("width", 12).attr(
-          "class",
-          `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT} ${typeClass}-inner`
-        );
-      } else if (commitSymbolType === commitType.CHERRY_PICK) {
-        gBullets.append("circle").attr("cx", x).attr("cy", y).attr("r", 10).attr("class", `commit ${commit2.id} ${typeClass}`);
-        gBullets.append("circle").attr("cx", x - 3).attr("cy", y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`);
-        gBullets.append("circle").attr("cx", x + 3).attr("cy", y + 2).attr("r", 2.75).attr("fill", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`);
-        gBullets.append("line").attr("x1", x + 3).attr("y1", y + 1).attr("x2", x).attr("y2", y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`);
-        gBullets.append("line").attr("x1", x - 3).attr("y1", y + 1).attr("x2", x).attr("y2", y - 5).attr("stroke", "#fff").attr("class", `commit ${commit2.id} ${typeClass}`);
-      } else {
-        const circle2 = gBullets.append("circle");
-        circle2.attr("cx", x);
-        circle2.attr("cy", y);
-        circle2.attr("r", commit2.type === commitType.MERGE ? 9 : 10);
-        circle2.attr(
-          "class",
-          `commit ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}`
-        );
-        if (commitSymbolType === commitType.MERGE) {
-          const circle22 = gBullets.append("circle");
-          circle22.attr("cx", x);
-          circle22.attr("cy", y);
-          circle22.attr("r", 6);
-          circle22.attr(
-            "class",
-            `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}`
-          );
-        }
-        if (commitSymbolType === commitType.REVERSE) {
-          const cross2 = gBullets.append("path");
-          cross2.attr("d", `M ${x - 5},${y - 5}L${x + 5},${y + 5}M${x - 5},${y + 5}L${x + 5},${y - 5}`).attr(
-            "class",
-            `commit ${typeClass} ${commit2.id} commit${branchPos[commit2.branch].index % THEME_COLOR_LIMIT}`
-          );
-        }
-      }
-    }
-    commitPos[commit2.id] = { x: pos + 10, y };
-    if (modifyGraph) {
-      const px = 4;
-      const py = 2;
-      if (commit2.type !== commitType.CHERRY_PICK && (commit2.customId && commit2.type === commitType.MERGE || commit2.type !== commitType.MERGE) && gitGraphConfig.showCommitLabel) {
-        const wrapper = gLabels.append("g");
-        const labelBkg = wrapper.insert("rect").attr("class", "commit-label-bkg");
-        const text = wrapper.append("text").attr("x", pos).attr("y", y + 25).attr("class", "commit-label").text(commit2.id);
-        let bbox = text.node().getBBox();
-        labelBkg.attr("x", pos + 10 - bbox.width / 2 - py).attr("y", y + 13.5).attr("width", bbox.width + 2 * py).attr("height", bbox.height + 2 * py);
-        text.attr("x", pos + 10 - bbox.width / 2);
-        if (gitGraphConfig.rotateCommitLabel) {
-          let r_x = -7.5 - (bbox.width + 10) / 25 * 9.5;
-          let r_y = 10 + bbox.width / 25 * 8.5;
-          wrapper.attr(
-            "transform",
-            "translate(" + r_x + ", " + r_y + ") rotate(" + -45 + ", " + pos + ", " + y + ")"
-          );
-        }
-      }
-      if (commit2.tag) {
-        const rect2 = gLabels.insert("polygon");
-        const hole = gLabels.append("circle");
-        const tag = gLabels.append("text").attr("y", y - 16).attr("class", "tag-label").text(commit2.tag);
-        let tagBbox = tag.node().getBBox();
-        tag.attr("x", pos + 10 - tagBbox.width / 2);
-        const h2 = tagBbox.height / 2;
-        const ly = y - 19.2;
-        rect2.attr("class", "tag-label-bkg").attr(
-          "points",
-          `
-          ${pos - tagBbox.width / 2 - px / 2},${ly + py}
-          ${pos - tagBbox.width / 2 - px / 2},${ly - py}
-          ${pos + 10 - tagBbox.width / 2 - px},${ly - h2 - py}
-          ${pos + 10 + tagBbox.width / 2 + px},${ly - h2 - py}
-          ${pos + 10 + tagBbox.width / 2 + px},${ly + h2 + py}
-          ${pos + 10 - tagBbox.width / 2 - px},${ly + h2 + py}`
-        );
-        hole.attr("cx", pos - tagBbox.width / 2 + px / 2).attr("cy", ly).attr("r", 1.5).attr("class", "tag-hole");
-      }
-    }
-    pos += 50;
-    if (pos > maxPos) {
-      maxPos = pos;
-    }
-  });
-};
-const hasOverlappingCommits = (commit1, commit2, allCommits) => {
-  const keys2 = Object.keys(allCommits);
-  const overlappingComits = keys2.filter((key) => {
-    return allCommits[key].branch === commit2.branch && allCommits[key].seq > commit1.seq && allCommits[key].seq < commit2.seq;
-  });
-  return overlappingComits.length > 0;
-};
-const findLane = (y1, y2, depth = 0) => {
-  const candidate = y1 + Math.abs(y1 - y2) / 2;
-  if (depth > 5) {
-    return candidate;
-  }
-  let ok = lanes.every((lane) => Math.abs(lane - candidate) >= 10);
-  if (ok) {
-    lanes.push(candidate);
-    return candidate;
-  }
-  const diff = Math.abs(y1 - y2);
-  return findLane(y1, y2 - diff / 5, depth + 1);
-};
-const drawArrow = (svg, commit1, commit2, allCommits) => {
-  const p1 = commitPos[commit1.id];
-  const p2 = commitPos[commit2.id];
-  const overlappingCommits = hasOverlappingCommits(commit1, commit2, allCommits);
-  let arc2 = "";
-  let arc22 = "";
-  let radius = 0;
-  let offset = 0;
-  let colorClassNum = branchPos[commit2.branch].index;
-  let lineDef;
-  if (overlappingCommits) {
-    arc2 = "A 10 10, 0, 0, 0,";
-    arc22 = "A 10 10, 0, 0, 1,";
-    radius = 10;
-    offset = 10;
-    colorClassNum = branchPos[commit2.branch].index;
-    const lineY = p1.y < p2.y ? findLane(p1.y, p2.y) : findLane(p2.y, p1.y);
-    if (p1.y < p2.y) {
-      lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY - radius} ${arc2} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc22} ${p2.x} ${lineY + offset} L ${p2.x} ${p2.y}`;
-    } else {
-      lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${lineY + radius} ${arc22} ${p1.x + offset} ${lineY} L ${p2.x - radius} ${lineY} ${arc2} ${p2.x} ${lineY - offset} L ${p2.x} ${p2.y}`;
-    }
-  } else {
-    if (p1.y < p2.y) {
-      arc2 = "A 20 20, 0, 0, 0,";
-      radius = 20;
-      offset = 20;
-      colorClassNum = branchPos[commit2.branch].index;
-      lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;
-    }
-    if (p1.y > p2.y) {
-      arc2 = "A 20 20, 0, 0, 0,";
-      radius = 20;
-      offset = 20;
-      colorClassNum = branchPos[commit1.branch].index;
-      lineDef = `M ${p1.x} ${p1.y} L ${p2.x - radius} ${p1.y} ${arc2} ${p2.x} ${p1.y - offset} L ${p2.x} ${p2.y}`;
-    }
-    if (p1.y === p2.y) {
-      colorClassNum = branchPos[commit1.branch].index;
-      lineDef = `M ${p1.x} ${p1.y} L ${p1.x} ${p2.y - radius} ${arc2} ${p1.x + offset} ${p2.y} L ${p2.x} ${p2.y}`;
-    }
-  }
-  svg.append("path").attr("d", lineDef).attr("class", "arrow arrow" + colorClassNum % THEME_COLOR_LIMIT);
-};
-const drawArrows = (svg, commits2) => {
-  const gArrows = svg.append("g").attr("class", "commit-arrows");
-  Object.keys(commits2).forEach((key) => {
-    const commit2 = commits2[key];
-    if (commit2.parents && commit2.parents.length > 0) {
-      commit2.parents.forEach((parent) => {
-        drawArrow(gArrows, commits2[parent], commit2, commits2);
-      });
-    }
-  });
-};
-const drawBranches = (svg, branches2) => {
-  const gitGraphConfig = getConfig().gitGraph;
-  const g = svg.append("g");
-  branches2.forEach((branch2, index) => {
-    const adjustIndexForTheme = index % THEME_COLOR_LIMIT;
-    const pos = branchPos[branch2.name].pos;
-    const line2 = g.append("line");
-    line2.attr("x1", 0);
-    line2.attr("y1", pos);
-    line2.attr("x2", maxPos);
-    line2.attr("y2", pos);
-    line2.attr("class", "branch branch" + adjustIndexForTheme);
-    lanes.push(pos);
-    let name = branch2.name;
-    const labelElement = drawText$2(name);
-    const bkg = g.insert("rect");
-    const branchLabel = g.insert("g").attr("class", "branchLabel");
-    const label = branchLabel.insert("g").attr("class", "label branch-label" + adjustIndexForTheme);
-    label.node().appendChild(labelElement);
-    let bbox = labelElement.getBBox();
-    bkg.attr("class", "branchLabelBkg label" + adjustIndexForTheme).attr("rx", 4).attr("ry", 4).attr("x", -bbox.width - 4 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)).attr("y", -bbox.height / 2 + 8).attr("width", bbox.width + 18).attr("height", bbox.height + 4);
-    label.attr(
-      "transform",
-      "translate(" + (-bbox.width - 14 - (gitGraphConfig.rotateCommitLabel === true ? 30 : 0)) + ", " + (pos - bbox.height / 2 - 1) + ")"
-    );
-    bkg.attr("transform", "translate(" + -19 + ", " + (pos - bbox.height / 2) + ")");
-  });
-};
-const draw$f = function(txt, id2, ver, diagObj) {
-  clear$e();
-  const conf2 = getConfig();
-  const gitGraphConfig = conf2.gitGraph;
-  log$1.debug("in gitgraph renderer", txt + "\n", "id:", id2, ver);
-  allCommitsDict = diagObj.db.getCommits();
-  const branches2 = diagObj.db.getBranchesAsObjArray();
-  let pos = 0;
-  branches2.forEach((branch2, index) => {
-    branchPos[branch2.name] = { pos, index };
-    pos += 50 + (gitGraphConfig.rotateCommitLabel ? 40 : 0);
-  });
-  const diagram = (0,src/* select */.Ys)(`[id="${id2}"]`);
-  drawCommits(diagram, allCommitsDict, false);
-  if (gitGraphConfig.showBranches) {
-    drawBranches(diagram, branches2);
-  }
-  drawArrows(diagram, allCommitsDict);
-  drawCommits(diagram, allCommitsDict, true);
-  mermaid_ae477ddf_utils.insertTitle(
-    diagram,
-    "gitTitleText",
-    gitGraphConfig.titleTopMargin,
-    diagObj.db.getDiagramTitle()
-  );
-  setupGraphViewbox(
-    void 0,
-    diagram,
-    gitGraphConfig.diagramPadding,
-    gitGraphConfig.useMaxWidth ?? conf2.useMaxWidth
-  );
-};
-const gitGraphRenderer = {
-  draw: draw$f
-};
-const getStyles = (options2) => `
-  .commit-id,
-  .commit-msg,
-  .branch-label {
-    fill: lightgrey;
-    color: lightgrey;
-    font-family: 'trebuchet ms', verdana, arial, sans-serif;
-    font-family: var(--mermaid-font-family);
-  }
-  ${[0, 1, 2, 3, 4, 5, 6, 7].map(
-  (i) => `
-        .branch-label${i} { fill: ${options2["gitBranchLabel" + i]}; }
-        .commit${i} { stroke: ${options2["git" + i]}; fill: ${options2["git" + i]}; }
-        .commit-highlight${i} { stroke: ${options2["gitInv" + i]}; fill: ${options2["gitInv" + i]}; }
-        .label${i}  { fill: ${options2["git" + i]}; }
-        .arrow${i} { stroke: ${options2["git" + i]}; }
-        `
-).join("\n")}
-
-  .branch {
-    stroke-width: 1;
-    stroke: ${options2.lineColor};
-    stroke-dasharray: 2;
-  }
-  .commit-label { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelColor};}
-  .commit-label-bkg { font-size: ${options2.commitLabelFontSize}; fill: ${options2.commitLabelBackground}; opacity: 0.5; }
-  .tag-label { font-size: ${options2.tagLabelFontSize}; fill: ${options2.tagLabelColor};}
-  .tag-label-bkg { fill: ${options2.tagLabelBackground}; stroke: ${options2.tagLabelBorder}; }
-  .tag-hole { fill: ${options2.textColor}; }
-
-  .commit-merge {
-    stroke: ${options2.primaryColor};
-    fill: ${options2.primaryColor};
-  }
-  .commit-reverse {
-    stroke: ${options2.primaryColor};
-    fill: ${options2.primaryColor};
-    stroke-width: 3;
-  }
-  .commit-highlight-outer {
-  }
-  .commit-highlight-inner {
-    stroke: ${options2.primaryColor};
-    fill: ${options2.primaryColor};
-  }
-
-  .arrow { stroke-width: 8; stroke-linecap: round; fill: none}
-  .gitTitleText {
-    text-anchor: middle;
-    font-size: 18px;
-    fill: ${options2.textColor};
-  }
-  }
-`;
-const gitGraphStyles = getStyles;
-var parser$b = function() {
-  var o = function(k, v, o2, l) {
-    for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
-      ;
-    return o2;
-  }, $V0 = [1, 6], $V1 = [1, 7], $V2 = [1, 8], $V3 = [1, 9], $V4 = [1, 16], $V5 = [1, 11], $V6 = [1, 12], $V7 = [1, 13], $V8 = [1, 14], $V9 = [1, 15], $Va = [1, 27], $Vb = [1, 33], $Vc = [1, 34], $Vd = [1, 35], $Ve = [1, 36], $Vf = [1, 37], $Vg = [1, 72], $Vh = [1, 73], $Vi = [1, 74], $Vj = [1, 75], $Vk = [1, 76], $Vl = [1, 77], $Vm = [1, 78], $Vn = [1, 38], $Vo = [1, 39], $Vp = [1, 40], $Vq = [1, 41], $Vr = [1, 42], $Vs = [1, 43], $Vt = [1, 44], $Vu = [1, 45], $Vv = [1, 46], $Vw = [1, 47], $Vx = [1, 48], $Vy = [1, 49], $Vz = [1, 50], $VA = [1, 51], $VB = [1, 52], $VC = [1, 53], $VD = [1, 54], $VE = [1, 55], $VF = [1, 56], $VG = [1, 57], $VH = [1, 59], $VI = [1, 60], $VJ = [1, 61], $VK = [1, 62], $VL = [1, 63], $VM = [1, 64], $VN = [1, 65], $VO = [1, 66], $VP = [1, 67], $VQ = [1, 68], $VR = [1, 69], $VS = [24, 52], $VT = [24, 44, 46, 47, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84], $VU = [15, 24, 44, 46, 47, 48, 49, 50, 51, 52, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84], $VV = [1, 94], $VW = [1, 95], $VX = [1, 96], $VY = [1, 97], $VZ = [15, 24, 52], $V_ = [7, 8, 9, 10, 18, 22, 25, 26, 27, 28], $V$ = [15, 24, 43, 52], $V01 = [15, 24, 43, 52, 86, 87, 89, 90], $V11 = [15, 43], $V21 = [44, 46, 47, 48, 49, 50, 51, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84];
-  var parser2 = {
-    trace: function trace() {
-    },
-    yy: {},
-    symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "direction": 5, "directive": 6, "direction_tb": 7, "direction_bt": 8, "direction_rl": 9, "direction_lr": 10, "graphConfig": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, "NEWLINE": 15, ":": 16, "argDirective": 17, "open_directive": 18, "type_directive": 19, "arg_directive": 20, "close_directive": 21, "C4_CONTEXT": 22, "statements": 23, "EOF": 24, "C4_CONTAINER": 25, "C4_COMPONENT": 26, "C4_DYNAMIC": 27, "C4_DEPLOYMENT": 28, "otherStatements": 29, "diagramStatements": 30, "otherStatement": 31, "title": 32, "accDescription": 33, "acc_title": 34, "acc_title_value": 35, "acc_descr": 36, "acc_descr_value": 37, "acc_descr_multiline_value": 38, "boundaryStatement": 39, "boundaryStartStatement": 40, "boundaryStopStatement": 41, "boundaryStart": 42, "LBRACE": 43, "ENTERPRISE_BOUNDARY": 44, "attributes": 45, "SYSTEM_BOUNDARY": 46, "BOUNDARY": 47, "CONTAINER_BOUNDARY": 48, "NODE": 49, "NODE_L": 50, "NODE_R": 51, "RBRACE": 52, "diagramStatement": 53, "PERSON": 54, "PERSON_EXT": 55, "SYSTEM": 56, "SYSTEM_DB": 57, "SYSTEM_QUEUE": 58, "SYSTEM_EXT": 59, "SYSTEM_EXT_DB": 60, "SYSTEM_EXT_QUEUE": 61, "CONTAINER": 62, "CONTAINER_DB": 63, "CONTAINER_QUEUE": 64, "CONTAINER_EXT": 65, "CONTAINER_EXT_DB": 66, "CONTAINER_EXT_QUEUE": 67, "COMPONENT": 68, "COMPONENT_DB": 69, "COMPONENT_QUEUE": 70, "COMPONENT_EXT": 71, "COMPONENT_EXT_DB": 72, "COMPONENT_EXT_QUEUE": 73, "REL": 74, "BIREL": 75, "REL_U": 76, "REL_D": 77, "REL_L": 78, "REL_R": 79, "REL_B": 80, "REL_INDEX": 81, "UPDATE_EL_STYLE": 82, "UPDATE_REL_STYLE": 83, "UPDATE_LAYOUT_CONFIG": 84, "attribute": 85, "STR": 86, "STR_KEY": 87, "STR_VALUE": 88, "ATTRIBUTE": 89, "ATTRIBUTE_EMPTY": 90, "$accept": 0, "$end": 1 },
-    terminals_: { 2: "error", 7: "direction_tb", 8: "direction_bt", 9: "direction_rl", 10: "direction_lr", 15: "NEWLINE", 16: ":", 18: "open_directive", 19: "type_directive", 20: "arg_directive", 21: "close_directive", 22: "C4_CONTEXT", 24: "EOF", 25: "C4_CONTAINER", 26: "C4_COMPONENT", 27: "C4_DYNAMIC", 28: "C4_DEPLOYMENT", 32: "title", 33: "accDescription", 34: "acc_title", 35: "acc_title_value", 36: "acc_descr", 37: "acc_descr_value", 38: "acc_descr_multiline_value", 43: "LBRACE", 44: "ENTERPRISE_BOUNDARY", 46: "SYSTEM_BOUNDARY", 47: "BOUNDARY", 48: "CONTAINER_BOUNDARY", 49: "NODE", 50: "NODE_L", 51: "NODE_R", 52: "RBRACE", 54: "PERSON", 55: "PERSON_EXT", 56: "SYSTEM", 57: "SYSTEM_DB", 58: "SYSTEM_QUEUE", 59: "SYSTEM_EXT", 60: "SYSTEM_EXT_DB", 61: "SYSTEM_EXT_QUEUE", 62: "CONTAINER", 63: "CONTAINER_DB", 64: "CONTAINER_QUEUE", 65: "CONTAINER_EXT", 66: "CONTAINER_EXT_DB", 67: "CONTAINER_EXT_QUEUE", 68: "COMPONENT", 69: "COMPONENT_DB", 70: "COMPONENT_QUEUE", 71: "COMPONENT_EXT", 72: "COMPONENT_EXT_DB", 73: "COMPONENT_EXT_QUEUE", 74: "REL", 75: "BIREL", 76: "REL_U", 77: "REL_D", 78: "REL_L", 79: "REL_R", 80: "REL_B", 81: "REL_INDEX", 82: "UPDATE_EL_STYLE", 83: "UPDATE_REL_STYLE", 84: "UPDATE_LAYOUT_CONFIG", 86: "STR", 87: "STR_KEY", 88: "STR_VALUE", 89: "ATTRIBUTE", 90: "ATTRIBUTE_EMPTY" },
-    productions_: [0, [3, 1], [3, 1], [3, 2], [5, 1], [5, 1], [5, 1], [5, 1], [4, 1], [6, 4], [6, 6], [12, 1], [13, 1], [17, 1], [14, 1], [11, 4], [11, 4], [11, 4], [11, 4], [11, 4], [23, 1], [23, 1], [23, 2], [29, 1], [29, 2], [29, 3], [31, 1], [31, 1], [31, 2], [31, 2], [31, 1], [39, 3], [40, 3], [40, 3], [40, 4], [42, 2], [42, 2], [42, 2], [42, 2], [42, 2], [42, 2], [42, 2], [41, 1], [30, 1], [30, 2], [30, 3], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 1], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [53, 2], [45, 1], [45, 2], [85, 1], [85, 2], [85, 1], [85, 1]],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
-      var $0 = $$.length - 1;
-      switch (yystate) {
-        case 4:
-          yy.setDirection("TB");
-          break;
-        case 5:
-          yy.setDirection("BT");
-          break;
-        case 6:
-          yy.setDirection("RL");
-          break;
-        case 7:
-          yy.setDirection("LR");
-          break;
-        case 11:
-          yy.parseDirective("%%{", "open_directive");
-          break;
-        case 12:
-          break;
-        case 13:
-          $$[$0] = $$[$0].trim().replace(/'/g, '"');
-          yy.parseDirective($$[$0], "arg_directive");
-          break;
-        case 14:
-          yy.parseDirective("}%%", "close_directive", "c4Context");
-          break;
-        case 15:
-        case 16:
-        case 17:
-        case 18:
-        case 19:
-          yy.setC4Type($$[$0 - 3]);
-          break;
-        case 26:
-          yy.setTitle($$[$0].substring(6));
-          this.$ = $$[$0].substring(6);
-          break;
-        case 27:
-          yy.setAccDescription($$[$0].substring(15));
-          this.$ = $$[$0].substring(15);
-          break;
-        case 28:
-          this.$ = $$[$0].trim();
-          yy.setTitle(this.$);
-          break;
-        case 29:
-        case 30:
-          this.$ = $$[$0].trim();
-          yy.setAccDescription(this.$);
-          break;
-        case 35:
-        case 36:
-          $$[$0].splice(2, 0, "ENTERPRISE");
-          yy.addPersonOrSystemBoundary(...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 37:
-          yy.addPersonOrSystemBoundary(...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 38:
-          $$[$0].splice(2, 0, "CONTAINER");
-          yy.addContainerBoundary(...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 39:
-          yy.addDeploymentNode("node", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 40:
-          yy.addDeploymentNode("nodeL", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 41:
-          yy.addDeploymentNode("nodeR", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 42:
-          yy.popBoundaryParseStack();
-          break;
-        case 46:
-          yy.addPersonOrSystem("person", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 47:
-          yy.addPersonOrSystem("external_person", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 48:
-          yy.addPersonOrSystem("system", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 49:
-          yy.addPersonOrSystem("system_db", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 50:
-          yy.addPersonOrSystem("system_queue", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 51:
-          yy.addPersonOrSystem("external_system", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 52:
-          yy.addPersonOrSystem("external_system_db", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 53:
-          yy.addPersonOrSystem("external_system_queue", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 54:
-          yy.addContainer("container", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 55:
-          yy.addContainer("container_db", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 56:
-          yy.addContainer("container_queue", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 57:
-          yy.addContainer("external_container", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 58:
-          yy.addContainer("external_container_db", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 59:
-          yy.addContainer("external_container_queue", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 60:
-          yy.addComponent("component", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 61:
-          yy.addComponent("component_db", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 62:
-          yy.addComponent("component_queue", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 63:
-          yy.addComponent("external_component", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 64:
-          yy.addComponent("external_component_db", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 65:
-          yy.addComponent("external_component_queue", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 67:
-          yy.addRel("rel", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 68:
-          yy.addRel("birel", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 69:
-          yy.addRel("rel_u", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 70:
-          yy.addRel("rel_d", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 71:
-          yy.addRel("rel_l", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 72:
-          yy.addRel("rel_r", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 73:
-          yy.addRel("rel_b", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 74:
-          $$[$0].splice(0, 1);
-          yy.addRel("rel", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 75:
-          yy.updateElStyle("update_el_style", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 76:
-          yy.updateRelStyle("update_rel_style", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 77:
-          yy.updateLayoutConfig("update_layout_config", ...$$[$0]);
-          this.$ = $$[$0];
-          break;
-        case 78:
-          this.$ = [$$[$0]];
-          break;
-        case 79:
-          $$[$0].unshift($$[$0 - 1]);
-          this.$ = $$[$0];
-          break;
-        case 80:
-        case 82:
-          this.$ = $$[$0].trim();
-          break;
-        case 81:
-          let kv = {};
-          kv[$$[$0 - 1].trim()] = $$[$0].trim();
-          this.$ = kv;
-          break;
-        case 83:
-          this.$ = "";
-          break;
-      }
-    },
-    table: [{ 3: 1, 4: 2, 5: 3, 6: 4, 7: $V0, 8: $V1, 9: $V2, 10: $V3, 11: 5, 12: 10, 18: $V4, 22: $V5, 25: $V6, 26: $V7, 27: $V8, 28: $V9 }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 3: 17, 4: 2, 5: 3, 6: 4, 7: $V0, 8: $V1, 9: $V2, 10: $V3, 11: 5, 12: 10, 18: $V4, 22: $V5, 25: $V6, 26: $V7, 27: $V8, 28: $V9 }, { 1: [2, 8] }, { 1: [2, 4] }, { 1: [2, 5] }, { 1: [2, 6] }, { 1: [2, 7] }, { 13: 18, 19: [1, 19] }, { 15: [1, 20] }, { 15: [1, 21] }, { 15: [1, 22] }, { 15: [1, 23] }, { 15: [1, 24] }, { 19: [2, 11] }, { 1: [2, 3] }, { 14: 25, 16: [1, 26], 21: $Va }, o([16, 21], [2, 12]), { 23: 28, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 79, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 80, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 81, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 23: 82, 29: 29, 30: 30, 31: 31, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 15: [1, 83] }, { 17: 84, 20: [1, 85] }, { 15: [2, 14] }, { 24: [1, 86] }, o($VS, [2, 20], { 53: 32, 39: 58, 40: 70, 42: 71, 30: 87, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }), o($VS, [2, 21]), o($VT, [2, 23], { 15: [1, 88] }), o($VS, [2, 43], { 15: [1, 89] }), o($VU, [2, 26]), o($VU, [2, 27]), { 35: [1, 90] }, { 37: [1, 91] }, o($VU, [2, 30]), { 45: 92, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 98, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 99, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 100, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 101, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 102, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 103, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 104, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 105, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 106, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 107, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 108, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 109, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 110, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 111, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 112, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 113, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 114, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 115, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 116, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, o($VZ, [2, 66]), { 45: 117, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 118, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 119, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 120, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 121, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 122, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 123, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 124, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 125, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 126, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 127, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 30: 128, 39: 58, 40: 70, 42: 71, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 53: 32, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }, { 15: [1, 130], 43: [1, 129] }, { 45: 131, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 132, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 133, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 134, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 135, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 136, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 45: 137, 85: 93, 86: $VV, 87: $VW, 89: $VX, 90: $VY }, { 24: [1, 138] }, { 24: [1, 139] }, { 24: [1, 140] }, { 24: [1, 141] }, o($V_, [2, 9]), { 14: 142, 21: $Va }, { 21: [2, 13] }, { 1: [2, 15] }, o($VS, [2, 22]), o($VT, [2, 24], { 31: 31, 29: 143, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf }), o($VS, [2, 44], { 29: 29, 30: 30, 31: 31, 53: 32, 39: 58, 40: 70, 42: 71, 23: 144, 32: $Vb, 33: $Vc, 34: $Vd, 36: $Ve, 38: $Vf, 44: $Vg, 46: $Vh, 47: $Vi, 48: $Vj, 49: $Vk, 50: $Vl, 51: $Vm, 54: $Vn, 55: $Vo, 56: $Vp, 57: $Vq, 58: $Vr, 59: $Vs, 60: $Vt, 61: $Vu, 62: $Vv, 63: $Vw, 64: $Vx, 65: $Vy, 66: $Vz, 67: $VA, 68: $VB, 69: $VC, 70: $VD, 71: $VE, 72: $VF, 73: $VG, 74: $VH, 75: $VI, 76: $VJ, 77: $VK, 78: $VL, 79: $VM, 80: $VN, 81: $VO, 82: $VP, 83: $VQ, 84: $VR }), o($VU, [2, 28]), o($VU, [2, 29]), o($VZ, [2, 46]), o($V$, [2, 78], { 85: 93, 45: 145, 86: $VV, 87: $VW, 89: $VX, 90: $VY }), o($V01, [2, 80]), { 88: [1, 146] }, o($V01, [2, 82]), o($V01, [2, 83]), o($VZ, [2, 47]), o($VZ, [2, 48]), o($VZ, [2, 49]), o($VZ, [2, 50]), o($VZ, [2, 51]), o($VZ, [2, 52]), o($VZ, [2, 53]), o($VZ, [2, 54]), o($VZ, [2, 55]), o($VZ, [2, 56]), o($VZ, [2, 57]), o($VZ, [2, 58]), o($VZ, [2, 59]), o($VZ, [2, 60]), o($VZ, [2, 61]), o($VZ, [2, 62]), o($VZ, [2, 63]), o($VZ, [2, 64]), o($VZ, [2, 65]), o($VZ, [2, 67]), o($VZ, [2, 68]), o($VZ, [2, 69]), o($VZ, [2, 70]), o($VZ, [2, 71]), o($VZ, [2, 72]), o($VZ, [2, 73]), o($VZ, [2, 74]), o($VZ, [2, 75]), o($VZ, [2, 76]), o($VZ, [2, 77]), { 41: 147, 52: [1, 148] }, { 15: [1, 149] }, { 43: [1, 150] }, o($V11, [2, 35]), o($V11, [2, 36]), o($V11, [2, 37]), o($V11, [2, 38]), o($V11, [2, 39]), o($V11, [2, 40]), o($V11, [2, 41]), { 1: [2, 16] }, { 1: [2, 17] }, { 1: [2, 18] }, { 1: [2, 19] }, { 15: [1, 151] }, o($VT, [2, 25]), o($VS, [2, 45]), o($V$, [2, 79]), o($V01, [2, 81]), o($VZ, [2, 31]), o($VZ, [2, 42]), o($V21, [2, 32]), o($V21, [2, 33], { 15: [1, 152] }), o($V_, [2, 10]), o($V21, [2, 34])],
-    defaultActions: { 2: [2, 1], 3: [2, 2], 5: [2, 8], 6: [2, 4], 7: [2, 5], 8: [2, 6], 9: [2, 7], 16: [2, 11], 17: [2, 3], 27: [2, 14], 85: [2, 13], 86: [2, 15], 138: [2, 16], 139: [2, 17], 140: [2, 18], 141: [2, 19] },
-    parseError: function parseError(str2, hash) {
-      if (hash.recoverable) {
-        this.trace(str2);
-      } else {
-        var error = new Error(str2);
-        error.hash = hash;
-        throw error;
-      }
-    },
-    parse: function parse2(input) {
-      var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;
-      var args = lstack.slice.call(arguments, 1);
-      var lexer2 = Object.create(this.lexer);
-      var sharedState = { yy: {} };
-      for (var k in this.yy) {
-        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
-          sharedState.yy[k] = this.yy[k];
-        }
-      }
-      lexer2.setInput(input, sharedState.yy);
-      sharedState.yy.lexer = lexer2;
-      sharedState.yy.parser = this;
-      if (typeof lexer2.yylloc == "undefined") {
-        lexer2.yylloc = {};
-      }
-      var yyloc = lexer2.yylloc;
-      lstack.push(yyloc);
-      var ranges = lexer2.options && lexer2.options.ranges;
-      if (typeof sharedState.yy.parseError === "function") {
-        this.parseError = sharedState.yy.parseError;
-      } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-      }
-      function lex2() {
-        var token;
-        token = tstack.pop() || lexer2.lex() || EOF;
-        if (typeof token !== "number") {
-          if (token instanceof Array) {
-            tstack = token;
-            token = tstack.pop();
-          }
-          token = self.symbols_[token] || token;
-        }
-        return token;
-      }
-      var symbol, state, action, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-          action = this.defaultActions[state];
-        } else {
-          if (symbol === null || typeof symbol == "undefined") {
-            symbol = lex2();
-          }
-          action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-          var errStr = "";
-          expected = [];
-          for (p in table[state]) {
-            if (this.terminals_[p] && p > TERROR) {
-              expected.push("'" + this.terminals_[p] + "'");
-            }
-          }
-          if (lexer2.showPosition) {
-            errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-          } else {
-            errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
-          }
-          this.parseError(errStr, {
-            text: lexer2.match,
-            token: this.terminals_[symbol] || symbol,
-            line: lexer2.yylineno,
-            loc: yyloc,
-            expected
-          });
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-          throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-          case 1:
-            stack.push(symbol);
-            vstack.push(lexer2.yytext);
-            lstack.push(lexer2.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            {
-              yyleng = lexer2.yyleng;
-              yytext = lexer2.yytext;
-              yylineno = lexer2.yylineno;
-              yyloc = lexer2.yylloc;
-            }
-            break;
-          case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-              first_line: lstack[lstack.length - (len || 1)].first_line,
-              last_line: lstack[lstack.length - 1].last_line,
-              first_column: lstack[lstack.length - (len || 1)].first_column,
-              last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-              yyval._$.range = [
-                lstack[lstack.length - (len || 1)].range[0],
-                lstack[lstack.length - 1].range[1]
-              ];
-            }
-            r = this.performAction.apply(yyval, [
-              yytext,
-              yyleng,
-              yylineno,
-              sharedState.yy,
-              action[1],
-              vstack,
-              lstack
-            ].concat(args));
-            if (typeof r !== "undefined") {
-              return r;
-            }
-            if (len) {
-              stack = stack.slice(0, -1 * len * 2);
-              vstack = vstack.slice(0, -1 * len);
-              lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-          case 3:
-            return true;
-        }
-      }
-      return true;
-    }
-  };
-  var lexer = function() {
-    var lexer2 = {
-      EOF: 1,
-      parseError: function parseError(str2, hash) {
-        if (this.yy.parser) {
-          this.yy.parser.parseError(str2, hash);
-        } else {
-          throw new Error(str2);
-        }
-      },
-      // resets the lexer, sets new input
-      setInput: function(input, yy) {
-        this.yy = yy || this.yy || {};
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = "";
-        this.conditionStack = ["INITIAL"];
-        this.yylloc = {
-          first_line: 1,
-          first_column: 0,
-          last_line: 1,
-          last_column: 0
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [0, 0];
-        }
-        this.offset = 0;
-        return this;
-      },
-      // consumes and returns one char from the input
-      input: function() {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno++;
-          this.yylloc.last_line++;
-        } else {
-          this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-          this.yylloc.range[1]++;
-        }
-        this._input = this._input.slice(1);
-        return ch;
-      },
-      // unshifts one char (or a string) into the input
-      unput: function(ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len);
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-        if (lines.length - 1) {
-          this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-        this.yylloc = {
-          first_line: this.yylloc.first_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.first_column,
-          last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-      },
-      // When called from action, caches matched text and appends it on next action
-      more: function() {
-        this._more = true;
-        return this;
-      },
-      // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-      reject: function() {
-        if (this.options.backtrack_lexer) {
-          this._backtrack = true;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-        return this;
-      },
-      // retain first n characters of the match
-      less: function(n) {
-        this.unput(this.match.slice(n));
-      },
-      // displays already matched input, i.e. for error messages
-      pastInput: function() {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
-      },
-      // displays upcoming input, i.e. for error messages
-      upcomingInput: function() {
-        var next = this.match;
-        if (next.length < 20) {
-          next += this._input.substr(0, 20 - next.length);
-        }
-        return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
-      },
-      // displays the character position where the lexing error occurred, i.e. for error messages
-      showPosition: function() {
-        var pre = this.pastInput();
-        var c2 = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c2 + "^";
-      },
-      // test the lexed token: return FALSE when not a match, otherwise return token
-      test_match: function(match, indexed_rule) {
-        var token, lines, backup;
-        if (this.options.backtrack_lexer) {
-          backup = {
-            yylineno: this.yylineno,
-            yylloc: {
-              first_line: this.yylloc.first_line,
-              last_line: this.last_line,
-              first_column: this.yylloc.first_column,
-              last_column: this.yylloc.last_column
-            },
-            yytext: this.yytext,
-            match: this.match,
-            matches: this.matches,
-            matched: this.matched,
-            yyleng: this.yyleng,
-            offset: this.offset,
-            _more: this._more,
-            _input: this._input,
-            yy: this.yy,
-            conditionStack: this.conditionStack.slice(0),
-            done: this.done
-          };
-          if (this.options.ranges) {
-            backup.yylloc.range = this.yylloc.range.slice(0);
-          }
-        }
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno += lines.length;
-        }
-        this.yylloc = {
-          first_line: this.yylloc.last_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.last_column,
-          last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-          this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-          this.done = false;
-        }
-        if (token) {
-          return token;
-        } else if (this._backtrack) {
-          for (var k in backup) {
-            this[k] = backup[k];
-          }
-          return false;
-        }
-        return false;
-      },
-      // return next match in input
-      next: function() {
-        if (this.done) {
-          return this.EOF;
-        }
-        if (!this._input) {
-          this.done = true;
-        }
-        var token, match, tempMatch, index;
-        if (!this._more) {
-          this.yytext = "";
-          this.match = "";
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-          tempMatch = this._input.match(this.rules[rules[i]]);
-          if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-            match = tempMatch;
-            index = i;
-            if (this.options.backtrack_lexer) {
-              token = this.test_match(tempMatch, rules[i]);
-              if (token !== false) {
-                return token;
-              } else if (this._backtrack) {
-                match = false;
-                continue;
-              } else {
-                return false;
-              }
-            } else if (!this.options.flex) {
-              break;
-            }
-          }
-        }
-        if (match) {
-          token = this.test_match(match, rules[index]);
-          if (token !== false) {
-            return token;
-          }
-          return false;
-        }
-        if (this._input === "") {
-          return this.EOF;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-      },
-      // return next match that has a token
-      lex: function lex2() {
-        var r = this.next();
-        if (r) {
-          return r;
-        } else {
-          return this.lex();
-        }
-      },
-      // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-      begin: function begin(condition) {
-        this.conditionStack.push(condition);
-      },
-      // pop the previously active lexer condition state off the condition stack
-      popState: function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-          return this.conditionStack.pop();
-        } else {
-          return this.conditionStack[0];
-        }
-      },
-      // produce the lexer rule set which is active for the currently active lexer condition state
-      _currentRules: function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-          return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-          return this.conditions["INITIAL"].rules;
-        }
-      },
-      // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-      topState: function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-          return this.conditionStack[n];
-        } else {
-          return "INITIAL";
-        }
-      },
-      // alias for begin(condition)
-      pushState: function pushState(condition) {
-        this.begin(condition);
-      },
-      // return the number of states currently on the stack
-      stateStackSize: function stateStackSize() {
-        return this.conditionStack.length;
-      },
-      options: {},
-      performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
-        switch ($avoiding_name_collisions) {
-          case 0:
-            this.begin("open_directive");
-            return 18;
-          case 1:
-            return 7;
-          case 2:
-            return 8;
-          case 3:
-            return 9;
-          case 4:
-            return 10;
-          case 5:
-            this.begin("type_directive");
-            return 19;
-          case 6:
-            this.popState();
-            this.begin("arg_directive");
-            return 16;
-          case 7:
-            this.popState();
-            this.popState();
-            return 21;
-          case 8:
-            return 20;
-          case 9:
-            return 32;
-          case 10:
-            return 33;
-          case 11:
-            this.begin("acc_title");
-            return 34;
-          case 12:
-            this.popState();
-            return "acc_title_value";
-          case 13:
-            this.begin("acc_descr");
-            return 36;
-          case 14:
-            this.popState();
-            return "acc_descr_value";
-          case 15:
-            this.begin("acc_descr_multiline");
-            break;
-          case 16:
-            this.popState();
-            break;
-          case 17:
-            return "acc_descr_multiline_value";
-          case 18:
-            break;
-          case 19:
-            c;
-            break;
-          case 20:
-            return 15;
-          case 21:
-            break;
-          case 22:
-            return 22;
-          case 23:
-            return 25;
-          case 24:
-            return 26;
-          case 25:
-            return 27;
-          case 26:
-            return 28;
-          case 27:
-            this.begin("person_ext");
-            return 55;
-          case 28:
-            this.begin("person");
-            return 54;
-          case 29:
-            this.begin("system_ext_queue");
-            return 61;
-          case 30:
-            this.begin("system_ext_db");
-            return 60;
-          case 31:
-            this.begin("system_ext");
-            return 59;
-          case 32:
-            this.begin("system_queue");
-            return 58;
-          case 33:
-            this.begin("system_db");
-            return 57;
-          case 34:
-            this.begin("system");
-            return 56;
-          case 35:
-            this.begin("boundary");
-            return 47;
-          case 36:
-            this.begin("enterprise_boundary");
-            return 44;
-          case 37:
-            this.begin("system_boundary");
-            return 46;
-          case 38:
-            this.begin("container_ext_queue");
-            return 67;
-          case 39:
-            this.begin("container_ext_db");
-            return 66;
-          case 40:
-            this.begin("container_ext");
-            return 65;
-          case 41:
-            this.begin("container_queue");
-            return 64;
-          case 42:
-            this.begin("container_db");
-            return 63;
-          case 43:
-            this.begin("container");
-            return 62;
-          case 44:
-            this.begin("container_boundary");
-            return 48;
-          case 45:
-            this.begin("component_ext_queue");
-            return 73;
-          case 46:
-            this.begin("component_ext_db");
-            return 72;
-          case 47:
-            this.begin("component_ext");
-            return 71;
-          case 48:
-            this.begin("component_queue");
-            return 70;
-          case 49:
-            this.begin("component_db");
-            return 69;
-          case 50:
-            this.begin("component");
-            return 68;
-          case 51:
-            this.begin("node");
-            return 49;
-          case 52:
-            this.begin("node");
-            return 49;
-          case 53:
-            this.begin("node_l");
-            return 50;
-          case 54:
-            this.begin("node_r");
-            return 51;
-          case 55:
-            this.begin("rel");
-            return 74;
-          case 56:
-            this.begin("birel");
-            return 75;
-          case 57:
-            this.begin("rel_u");
-            return 76;
-          case 58:
-            this.begin("rel_u");
-            return 76;
-          case 59:
-            this.begin("rel_d");
-            return 77;
-          case 60:
-            this.begin("rel_d");
-            return 77;
-          case 61:
-            this.begin("rel_l");
-            return 78;
-          case 62:
-            this.begin("rel_l");
-            return 78;
-          case 63:
-            this.begin("rel_r");
-            return 79;
-          case 64:
-            this.begin("rel_r");
-            return 79;
-          case 65:
-            this.begin("rel_b");
-            return 80;
-          case 66:
-            this.begin("rel_index");
-            return 81;
-          case 67:
-            this.begin("update_el_style");
-            return 82;
-          case 68:
-            this.begin("update_rel_style");
-            return 83;
-          case 69:
-            this.begin("update_layout_config");
-            return 84;
-          case 70:
-            return "EOF_IN_STRUCT";
-          case 71:
-            this.begin("attribute");
-            return "ATTRIBUTE_EMPTY";
-          case 72:
-            this.begin("attribute");
-            break;
-          case 73:
-            this.popState();
-            this.popState();
-            break;
-          case 74:
-            return 90;
-          case 75:
-            break;
-          case 76:
-            return 90;
-          case 77:
-            this.begin("string");
-            break;
-          case 78:
-            this.popState();
-            break;
-          case 79:
-            return "STR";
-          case 80:
-            this.begin("string_kv");
-            break;
-          case 81:
-            this.begin("string_kv_key");
-            return "STR_KEY";
-          case 82:
-            this.popState();
-            this.begin("string_kv_value");
-            break;
-          case 83:
-            return "STR_VALUE";
-          case 84:
-            this.popState();
-            this.popState();
-            break;
-          case 85:
-            return "STR";
-          case 86:
-            return "LBRACE";
-          case 87:
-            return "RBRACE";
-          case 88:
-            return "SPACE";
-          case 89:
-            return "EOL";
-          case 90:
-            return 24;
-        }
-      },
-      rules: [/^(?:%%\{)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:title\s[^#\n;]+)/, /^(?:accDescription\s[^#\n;]+)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:C4Context\b)/, /^(?:C4Container\b)/, /^(?:C4Component\b)/, /^(?:C4Dynamic\b)/, /^(?:C4Deployment\b)/, /^(?:Person_Ext\b)/, /^(?:Person\b)/, /^(?:SystemQueue_Ext\b)/, /^(?:SystemDb_Ext\b)/, /^(?:System_Ext\b)/, /^(?:SystemQueue\b)/, /^(?:SystemDb\b)/, /^(?:System\b)/, /^(?:Boundary\b)/, /^(?:Enterprise_Boundary\b)/, /^(?:System_Boundary\b)/, /^(?:ContainerQueue_Ext\b)/, /^(?:ContainerDb_Ext\b)/, /^(?:Container_Ext\b)/, /^(?:ContainerQueue\b)/, /^(?:ContainerDb\b)/, /^(?:Container\b)/, /^(?:Container_Boundary\b)/, /^(?:ComponentQueue_Ext\b)/, /^(?:ComponentDb_Ext\b)/, /^(?:Component_Ext\b)/, /^(?:ComponentQueue\b)/, /^(?:ComponentDb\b)/, /^(?:Component\b)/, /^(?:Deployment_Node\b)/, /^(?:Node\b)/, /^(?:Node_L\b)/, /^(?:Node_R\b)/, /^(?:Rel\b)/, /^(?:BiRel\b)/, /^(?:Rel_Up\b)/, /^(?:Rel_U\b)/, /^(?:Rel_Down\b)/, /^(?:Rel_D\b)/, /^(?:Rel_Left\b)/, /^(?:Rel_L\b)/, /^(?:Rel_Right\b)/, /^(?:Rel_R\b)/, /^(?:Rel_Back\b)/, /^(?:RelIndex\b)/, /^(?:UpdateElementStyle\b)/, /^(?:UpdateRelStyle\b)/, /^(?:UpdateLayoutConfig\b)/, /^(?:$)/, /^(?:[(][ ]*[,])/, /^(?:[(])/, /^(?:[)])/, /^(?:,,)/, /^(?:,)/, /^(?:[ ]*["]["])/, /^(?:[ ]*["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:[ ]*[\$])/, /^(?:[^=]*)/, /^(?:[=][ ]*["])/, /^(?:[^"]+)/, /^(?:["])/, /^(?:[^,]+)/, /^(?:\{)/, /^(?:\})/, /^(?:[\s]+)/, /^(?:[\n\r]+)/, /^(?:$)/],
-      conditions: { "acc_descr_multiline": { "rules": [16, 17], "inclusive": false }, "acc_descr": { "rules": [14], "inclusive": false }, "acc_title": { "rules": [12], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [7, 8], "inclusive": false }, "type_directive": { "rules": [6, 7], "inclusive": false }, "open_directive": { "rules": [5], "inclusive": false }, "string_kv_value": { "rules": [83, 84], "inclusive": false }, "string_kv_key": { "rules": [82], "inclusive": false }, "string_kv": { "rules": [81], "inclusive": false }, "string": { "rules": [78, 79], "inclusive": false }, "attribute": { "rules": [73, 74, 75, 76, 77, 80, 85], "inclusive": false }, "update_layout_config": { "rules": [70, 71, 72, 73], "inclusive": false }, "update_rel_style": { "rules": [70, 71, 72, 73], "inclusive": false }, "update_el_style": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_b": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_r": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_l": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_d": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_u": { "rules": [70, 71, 72, 73], "inclusive": false }, "rel_bi": { "rules": [], "inclusive": false }, "rel": { "rules": [70, 71, 72, 73], "inclusive": false }, "node_r": { "rules": [70, 71, 72, 73], "inclusive": false }, "node_l": { "rules": [70, 71, 72, 73], "inclusive": false }, "node": { "rules": [70, 71, 72, 73], "inclusive": false }, "index": { "rules": [], "inclusive": false }, "rel_index": { "rules": [70, 71, 72, 73], "inclusive": false }, "component_ext_queue": { "rules": [], "inclusive": false }, "component_ext_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "component_ext": { "rules": [70, 71, 72, 73], "inclusive": false }, "component_queue": { "rules": [70, 71, 72, 73], "inclusive": false }, "component_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "component": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_boundary": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_ext_queue": { "rules": [], "inclusive": false }, "container_ext_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_ext": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_queue": { "rules": [70, 71, 72, 73], "inclusive": false }, "container_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "container": { "rules": [70, 71, 72, 73], "inclusive": false }, "birel": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_boundary": { "rules": [70, 71, 72, 73], "inclusive": false }, "enterprise_boundary": { "rules": [70, 71, 72, 73], "inclusive": false }, "boundary": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_ext_queue": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_ext_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_ext": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_queue": { "rules": [70, 71, 72, 73], "inclusive": false }, "system_db": { "rules": [70, 71, 72, 73], "inclusive": false }, "system": { "rules": [70, 71, 72, 73], "inclusive": false }, "person_ext": { "rules": [70, 71, 72, 73], "inclusive": false }, "person": { "rules": [70, 71, 72, 73], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 9, 10, 11, 13, 15, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 86, 87, 88, 89, 90], "inclusive": true } }
-    };
-    return lexer2;
-  }();
-  parser2.lexer = lexer;
-  function Parser() {
-    this.yy = {};
-  }
-  Parser.prototype = parser2;
-  parser2.Parser = Parser;
-  return new Parser();
-}();
-parser$b.parser = parser$b;
-const c4Parser = parser$b;
-const c4Detector = (txt) => {
-  return txt.match(/^\s*C4Context|C4Container|C4Component|C4Dynamic|C4Deployment/) !== null;
-};
-let c4ShapeArray = [];
-let boundaryParseStack = [""];
-let currentBoundaryParse = "global";
-let parentBoundaryParse = "";
-let boundarys = [
-  {
-    alias: "global",
-    label: { text: "global" },
-    type: { text: "global" },
-    tags: null,
-    link: null,
-    parentBoundary: ""
-  }
-];
-let rels = [];
-let title = "";
-let wrapEnabled$1 = false;
-let c4ShapeInRow$1 = 4;
-let c4BoundaryInRow$1 = 2;
-var c4Type;
-const getC4Type = function() {
-  return c4Type;
-};
-const setC4Type = function(c4TypeParam) {
-  let sanitizedText = sanitizeText$5(c4TypeParam, getConfig$1());
-  c4Type = sanitizedText;
-};
-const parseDirective$9 = function(statement, context, type2) {
-  mermaidAPI.parseDirective(this, statement, context, type2);
-};
-const addRel = function(type2, from, to, label, techn, descr, sprite, tags2, link) {
-  if (type2 === void 0 || type2 === null || from === void 0 || from === null || to === void 0 || to === null || label === void 0 || label === null) {
-    return;
-  }
-  let rel = {};
-  const old = rels.find((rel2) => rel2.from === from && rel2.to === to);
-  if (old) {
-    rel = old;
-  } else {
-    rels.push(rel);
-  }
-  rel.type = type2;
-  rel.from = from;
-  rel.to = to;
-  rel.label = { text: label };
-  if (techn === void 0 || techn === null) {
-    rel.techn = { text: "" };
-  } else {
-    if (typeof techn === "object") {
-      let [key, value] = Object.entries(techn)[0];
-      rel[key] = { text: value };
-    } else {
-      rel.techn = { text: techn };
-    }
-  }
-  if (descr === void 0 || descr === null) {
-    rel.descr = { text: "" };
-  } else {
-    if (typeof descr === "object") {
-      let [key, value] = Object.entries(descr)[0];
-      rel[key] = { text: value };
-    } else {
-      rel.descr = { text: descr };
-    }
-  }
-  if (typeof sprite === "object") {
-    let [key, value] = Object.entries(sprite)[0];
-    rel[key] = value;
-  } else {
-    rel.sprite = sprite;
-  }
-  if (typeof tags2 === "object") {
-    let [key, value] = Object.entries(tags2)[0];
-    rel[key] = value;
-  } else {
-    rel.tags = tags2;
-  }
-  if (typeof link === "object") {
-    let [key, value] = Object.entries(link)[0];
-    rel[key] = value;
-  } else {
-    rel.link = link;
-  }
-  rel.wrap = autoWrap$1();
-};
-const addPersonOrSystem = function(typeC4Shape, alias, label, descr, sprite, tags2, link) {
-  if (alias === null || label === null) {
-    return;
-  }
-  let personOrSystem = {};
-  const old = c4ShapeArray.find((personOrSystem2) => personOrSystem2.alias === alias);
-  if (old && alias === old.alias) {
-    personOrSystem = old;
-  } else {
-    personOrSystem.alias = alias;
-    c4ShapeArray.push(personOrSystem);
-  }
-  if (label === void 0 || label === null) {
-    personOrSystem.label = { text: "" };
-  } else {
-    personOrSystem.label = { text: label };
-  }
-  if (descr === void 0 || descr === null) {
-    personOrSystem.descr = { text: "" };
-  } else {
-    if (typeof descr === "object") {
-      let [key, value] = Object.entries(descr)[0];
-      personOrSystem[key] = { text: value };
-    } else {
-      personOrSystem.descr = { text: descr };
-    }
-  }
-  if (typeof sprite === "object") {
-    let [key, value] = Object.entries(sprite)[0];
-    personOrSystem[key] = value;
-  } else {
-    personOrSystem.sprite = sprite;
-  }
-  if (typeof tags2 === "object") {
-    let [key, value] = Object.entries(tags2)[0];
-    personOrSystem[key] = value;
-  } else {
-    personOrSystem.tags = tags2;
-  }
-  if (typeof link === "object") {
-    let [key, value] = Object.entries(link)[0];
-    personOrSystem[key] = value;
-  } else {
-    personOrSystem.link = link;
-  }
-  personOrSystem.typeC4Shape = { text: typeC4Shape };
-  personOrSystem.parentBoundary = currentBoundaryParse;
-  personOrSystem.wrap = autoWrap$1();
-};
-const addContainer = function(typeC4Shape, alias, label, techn, descr, sprite, tags2, link) {
-  if (alias === null || label === null) {
-    return;
-  }
-  let container = {};
-  const old = c4ShapeArray.find((container2) => container2.alias === alias);
-  if (old && alias === old.alias) {
-    container = old;
-  } else {
-    container.alias = alias;
-    c4ShapeArray.push(container);
-  }
-  if (label === void 0 || label === null) {
-    container.label = { text: "" };
-  } else {
-    container.label = { text: label };
-  }
-  if (techn === void 0 || techn === null) {
-    container.techn = { text: "" };
-  } else {
-    if (typeof techn === "object") {
-      let [key, value] = Object.entries(techn)[0];
-      container[key] = { text: value };
-    } else {
-      container.techn = { text: techn };
-    }
-  }
-  if (descr === void 0 || descr === null) {
-    container.descr = { text: "" };
-  } else {
-    if (typeof descr === "object") {
-      let [key, value] = Object.entries(descr)[0];
-      container[key] = { text: value };
-    } else {
-      container.descr = { text: descr };
-    }
-  }
-  if (typeof sprite === "object") {
-    let [key, value] = Object.entries(sprite)[0];
-    container[key] = value;
-  } else {
-    container.sprite = sprite;
-  }
-  if (typeof tags2 === "object") {
-    let [key, value] = Object.entries(tags2)[0];
-    container[key] = value;
-  } else {
-    container.tags = tags2;
-  }
-  if (typeof link === "object") {
-    let [key, value] = Object.entries(link)[0];
-    container[key] = value;
-  } else {
-    container.link = link;
-  }
-  container.wrap = autoWrap$1();
-  container.typeC4Shape = { text: typeC4Shape };
-  container.parentBoundary = currentBoundaryParse;
-};
-const addComponent = function(typeC4Shape, alias, label, techn, descr, sprite, tags2, link) {
-  if (alias === null || label === null) {
-    return;
-  }
-  let component = {};
-  const old = c4ShapeArray.find((component2) => component2.alias === alias);
-  if (old && alias === old.alias) {
-    component = old;
-  } else {
-    component.alias = alias;
-    c4ShapeArray.push(component);
-  }
-  if (label === void 0 || label === null) {
-    component.label = { text: "" };
-  } else {
-    component.label = { text: label };
-  }
-  if (techn === void 0 || techn === null) {
-    component.techn = { text: "" };
-  } else {
-    if (typeof techn === "object") {
-      let [key, value] = Object.entries(techn)[0];
-      component[key] = { text: value };
-    } else {
-      component.techn = { text: techn };
-    }
-  }
-  if (descr === void 0 || descr === null) {
-    component.descr = { text: "" };
-  } else {
-    if (typeof descr === "object") {
-      let [key, value] = Object.entries(descr)[0];
-      component[key] = { text: value };
-    } else {
-      component.descr = { text: descr };
-    }
-  }
-  if (typeof sprite === "object") {
-    let [key, value] = Object.entries(sprite)[0];
-    component[key] = value;
-  } else {
-    component.sprite = sprite;
-  }
-  if (typeof tags2 === "object") {
-    let [key, value] = Object.entries(tags2)[0];
-    component[key] = value;
-  } else {
-    component.tags = tags2;
-  }
-  if (typeof link === "object") {
-    let [key, value] = Object.entries(link)[0];
-    component[key] = value;
-  } else {
-    component.link = link;
-  }
-  component.wrap = autoWrap$1();
-  component.typeC4Shape = { text: typeC4Shape };
-  component.parentBoundary = currentBoundaryParse;
-};
-const addPersonOrSystemBoundary = function(alias, label, type2, tags2, link) {
-  if (alias === null || label === null) {
-    return;
-  }
-  let boundary = {};
-  const old = boundarys.find((boundary2) => boundary2.alias === alias);
-  if (old && alias === old.alias) {
-    boundary = old;
-  } else {
-    boundary.alias = alias;
-    boundarys.push(boundary);
-  }
-  if (label === void 0 || label === null) {
-    boundary.label = { text: "" };
-  } else {
-    boundary.label = { text: label };
-  }
-  if (type2 === void 0 || type2 === null) {
-    boundary.type = { text: "system" };
-  } else {
-    if (typeof type2 === "object") {
-      let [key, value] = Object.entries(type2)[0];
-      boundary[key] = { text: value };
-    } else {
-      boundary.type = { text: type2 };
-    }
-  }
-  if (typeof tags2 === "object") {
-    let [key, value] = Object.entries(tags2)[0];
-    boundary[key] = value;
-  } else {
-    boundary.tags = tags2;
-  }
-  if (typeof link === "object") {
-    let [key, value] = Object.entries(link)[0];
-    boundary[key] = value;
-  } else {
-    boundary.link = link;
-  }
-  boundary.parentBoundary = currentBoundaryParse;
-  boundary.wrap = autoWrap$1();
-  parentBoundaryParse = currentBoundaryParse;
-  currentBoundaryParse = alias;
-  boundaryParseStack.push(parentBoundaryParse);
-};
-const addContainerBoundary = function(alias, label, type2, tags2, link) {
-  if (alias === null || label === null) {
-    return;
-  }
-  let boundary = {};
-  const old = boundarys.find((boundary2) => boundary2.alias === alias);
-  if (old && alias === old.alias) {
-    boundary = old;
-  } else {
-    boundary.alias = alias;
-    boundarys.push(boundary);
-  }
-  if (label === void 0 || label === null) {
-    boundary.label = { text: "" };
-  } else {
-    boundary.label = { text: label };
-  }
-  if (type2 === void 0 || type2 === null) {
-    boundary.type = { text: "container" };
-  } else {
-    if (typeof type2 === "object") {
-      let [key, value] = Object.entries(type2)[0];
-      boundary[key] = { text: value };
-    } else {
-      boundary.type = { text: type2 };
-    }
-  }
-  if (typeof tags2 === "object") {
-    let [key, value] = Object.entries(tags2)[0];
-    boundary[key] = value;
-  } else {
-    boundary.tags = tags2;
-  }
-  if (typeof link === "object") {
-    let [key, value] = Object.entries(link)[0];
-    boundary[key] = value;
-  } else {
-    boundary.link = link;
-  }
-  boundary.parentBoundary = currentBoundaryParse;
-  boundary.wrap = autoWrap$1();
-  parentBoundaryParse = currentBoundaryParse;
-  currentBoundaryParse = alias;
-  boundaryParseStack.push(parentBoundaryParse);
-};
-const addDeploymentNode = function(nodeType, alias, label, type2, descr, sprite, tags2, link) {
-  if (alias === null || label === null) {
-    return;
-  }
-  let boundary = {};
-  const old = boundarys.find((boundary2) => boundary2.alias === alias);
-  if (old && alias === old.alias) {
-    boundary = old;
-  } else {
-    boundary.alias = alias;
-    boundarys.push(boundary);
-  }
-  if (label === void 0 || label === null) {
-    boundary.label = { text: "" };
-  } else {
-    boundary.label = { text: label };
-  }
-  if (type2 === void 0 || type2 === null) {
-    boundary.type = { text: "node" };
-  } else {
-    if (typeof type2 === "object") {
-      let [key, value] = Object.entries(type2)[0];
-      boundary[key] = { text: value };
-    } else {
-      boundary.type = { text: type2 };
-    }
-  }
-  if (descr === void 0 || descr === null) {
-    boundary.descr = { text: "" };
-  } else {
-    if (typeof descr === "object") {
-      let [key, value] = Object.entries(descr)[0];
-      boundary[key] = { text: value };
-    } else {
-      boundary.descr = { text: descr };
-    }
-  }
-  if (typeof tags2 === "object") {
-    let [key, value] = Object.entries(tags2)[0];
-    boundary[key] = value;
-  } else {
-    boundary.tags = tags2;
-  }
-  if (typeof link === "object") {
-    let [key, value] = Object.entries(link)[0];
-    boundary[key] = value;
-  } else {
-    boundary.link = link;
-  }
-  boundary.nodeType = nodeType;
-  boundary.parentBoundary = currentBoundaryParse;
-  boundary.wrap = autoWrap$1();
-  parentBoundaryParse = currentBoundaryParse;
-  currentBoundaryParse = alias;
-  boundaryParseStack.push(parentBoundaryParse);
-};
-const popBoundaryParseStack = function() {
-  currentBoundaryParse = parentBoundaryParse;
-  boundaryParseStack.pop();
-  parentBoundaryParse = boundaryParseStack.pop();
-  boundaryParseStack.push(parentBoundaryParse);
-};
-const updateElStyle = function(typeC4Shape, elementName, bgColor, fontColor, borderColor, shadowing, shape, sprite, techn, legendText, legendSprite) {
-  let old = c4ShapeArray.find((element) => element.alias === elementName);
-  if (old === void 0) {
-    old = boundarys.find((element) => element.alias === elementName);
-    if (old === void 0) {
-      return;
-    }
-  }
-  if (bgColor !== void 0 && bgColor !== null) {
-    if (typeof bgColor === "object") {
-      let [key, value] = Object.entries(bgColor)[0];
-      old[key] = value;
-    } else {
-      old.bgColor = bgColor;
-    }
-  }
-  if (fontColor !== void 0 && fontColor !== null) {
-    if (typeof fontColor === "object") {
-      let [key, value] = Object.entries(fontColor)[0];
-      old[key] = value;
-    } else {
-      old.fontColor = fontColor;
-    }
-  }
-  if (borderColor !== void 0 && borderColor !== null) {
-    if (typeof borderColor === "object") {
-      let [key, value] = Object.entries(borderColor)[0];
-      old[key] = value;
-    } else {
-      old.borderColor = borderColor;
-    }
-  }
-  if (shadowing !== void 0 && shadowing !== null) {
-    if (typeof shadowing === "object") {
-      let [key, value] = Object.entries(shadowing)[0];
-      old[key] = value;
-    } else {
-      old.shadowing = shadowing;
-    }
-  }
-  if (shape !== void 0 && shape !== null) {
-    if (typeof shape === "object") {
-      let [key, value] = Object.entries(shape)[0];
-      old[key] = value;
-    } else {
-      old.shape = shape;
-    }
-  }
-  if (sprite !== void 0 && sprite !== null) {
-    if (typeof sprite === "object") {
-      let [key, value] = Object.entries(sprite)[0];
-      old[key] = value;
-    } else {
-      old.sprite = sprite;
-    }
-  }
-  if (techn !== void 0 && techn !== null) {
-    if (typeof techn === "object") {
-      let [key, value] = Object.entries(techn)[0];
-      old[key] = value;
-    } else {
-      old.techn = techn;
-    }
-  }
-  if (legendText !== void 0 && legendText !== null) {
-    if (typeof legendText === "object") {
-      let [key, value] = Object.entries(legendText)[0];
-      old[key] = value;
-    } else {
-      old.legendText = legendText;
-    }
-  }
-  if (legendSprite !== void 0 && legendSprite !== null) {
-    if (typeof legendSprite === "object") {
-      let [key, value] = Object.entries(legendSprite)[0];
-      old[key] = value;
-    } else {
-      old.legendSprite = legendSprite;
-    }
-  }
-};
-const updateRelStyle = function(typeC4Shape, from, to, textColor, lineColor, offsetX, offsetY) {
-  const old = rels.find((rel) => rel.from === from && rel.to === to);
-  if (old === void 0) {
-    return;
-  }
-  if (textColor !== void 0 && textColor !== null) {
-    if (typeof textColor === "object") {
-      let [key, value] = Object.entries(textColor)[0];
-      old[key] = value;
-    } else {
-      old.textColor = textColor;
-    }
-  }
-  if (lineColor !== void 0 && lineColor !== null) {
-    if (typeof lineColor === "object") {
-      let [key, value] = Object.entries(lineColor)[0];
-      old[key] = value;
-    } else {
-      old.lineColor = lineColor;
-    }
-  }
-  if (offsetX !== void 0 && offsetX !== null) {
-    if (typeof offsetX === "object") {
-      let [key, value] = Object.entries(offsetX)[0];
-      old[key] = parseInt(value);
-    } else {
-      old.offsetX = parseInt(offsetX);
-    }
-  }
-  if (offsetY !== void 0 && offsetY !== null) {
-    if (typeof offsetY === "object") {
-      let [key, value] = Object.entries(offsetY)[0];
-      old[key] = parseInt(value);
-    } else {
-      old.offsetY = parseInt(offsetY);
-    }
-  }
-};
-const updateLayoutConfig = function(typeC4Shape, c4ShapeInRowParam, c4BoundaryInRowParam) {
-  let c4ShapeInRowValue = c4ShapeInRow$1;
-  let c4BoundaryInRowValue = c4BoundaryInRow$1;
-  if (typeof c4ShapeInRowParam === "object") {
-    const value = Object.values(c4ShapeInRowParam)[0];
-    c4ShapeInRowValue = parseInt(value);
-  } else {
-    c4ShapeInRowValue = parseInt(c4ShapeInRowParam);
-  }
-  if (typeof c4BoundaryInRowParam === "object") {
-    const value = Object.values(c4BoundaryInRowParam)[0];
-    c4BoundaryInRowValue = parseInt(value);
-  } else {
-    c4BoundaryInRowValue = parseInt(c4BoundaryInRowParam);
-  }
-  if (c4ShapeInRowValue >= 1) {
-    c4ShapeInRow$1 = c4ShapeInRowValue;
-  }
-  if (c4BoundaryInRowValue >= 1) {
-    c4BoundaryInRow$1 = c4BoundaryInRowValue;
-  }
-};
-const getC4ShapeInRow = function() {
-  return c4ShapeInRow$1;
-};
-const getC4BoundaryInRow = function() {
-  return c4BoundaryInRow$1;
-};
-const getCurrentBoundaryParse = function() {
-  return currentBoundaryParse;
-};
-const getParentBoundaryParse = function() {
-  return parentBoundaryParse;
-};
-const getC4ShapeArray = function(parentBoundary) {
-  if (parentBoundary === void 0 || parentBoundary === null) {
-    return c4ShapeArray;
-  } else {
-    return c4ShapeArray.filter((personOrSystem) => {
-      return personOrSystem.parentBoundary === parentBoundary;
-    });
-  }
-};
-const getC4Shape = function(alias) {
-  return c4ShapeArray.find((personOrSystem) => personOrSystem.alias === alias);
-};
-const getC4ShapeKeys = function(parentBoundary) {
-  return Object.keys(getC4ShapeArray(parentBoundary));
-};
-const getBoundarys = function(parentBoundary) {
-  if (parentBoundary === void 0 || parentBoundary === null) {
-    return boundarys;
-  } else {
-    return boundarys.filter((boundary) => boundary.parentBoundary === parentBoundary);
-  }
-};
-const getRels = function() {
-  return rels;
-};
-const getTitle = function() {
-  return title;
-};
-const setWrap$1 = function(wrapSetting) {
-  wrapEnabled$1 = wrapSetting;
-};
-const autoWrap$1 = function() {
-  return wrapEnabled$1;
-};
-const clear$d = function() {
-  c4ShapeArray = [];
-  boundarys = [
-    {
-      alias: "global",
-      label: { text: "global" },
-      type: { text: "global" },
-      tags: null,
-      link: null,
-      parentBoundary: ""
-    }
-  ];
-  parentBoundaryParse = "";
-  currentBoundaryParse = "global";
-  boundaryParseStack = [""];
-  rels = [];
-  boundaryParseStack = [""];
-  title = "";
-  wrapEnabled$1 = false;
-  c4ShapeInRow$1 = 4;
-  c4BoundaryInRow$1 = 2;
-};
-const LINETYPE$1 = {
-  SOLID: 0,
-  DOTTED: 1,
-  NOTE: 2,
-  SOLID_CROSS: 3,
-  DOTTED_CROSS: 4,
-  SOLID_OPEN: 5,
-  DOTTED_OPEN: 6,
-  LOOP_START: 10,
-  LOOP_END: 11,
-  ALT_START: 12,
-  ALT_ELSE: 13,
-  ALT_END: 14,
-  OPT_START: 15,
-  OPT_END: 16,
-  ACTIVE_START: 17,
-  ACTIVE_END: 18,
-  PAR_START: 19,
-  PAR_AND: 20,
-  PAR_END: 21,
-  RECT_START: 22,
-  RECT_END: 23,
-  SOLID_POINT: 24,
-  DOTTED_POINT: 25
-};
-const ARROWTYPE$1 = {
-  FILLED: 0,
-  OPEN: 1
-};
-const PLACEMENT$1 = {
-  LEFTOF: 0,
-  RIGHTOF: 1,
-  OVER: 2
-};
-const setTitle = function(txt) {
-  let sanitizedText = sanitizeText$5(txt, getConfig$1());
-  title = sanitizedText;
-};
-const c4Db = {
-  addPersonOrSystem,
-  addPersonOrSystemBoundary,
-  addContainer,
-  addContainerBoundary,
-  addComponent,
-  addDeploymentNode,
-  popBoundaryParseStack,
-  addRel,
-  updateElStyle,
-  updateRelStyle,
-  updateLayoutConfig,
-  autoWrap: autoWrap$1,
-  setWrap: setWrap$1,
-  getC4ShapeArray,
-  getC4Shape,
-  getC4ShapeKeys,
-  getBoundarys,
-  getCurrentBoundaryParse,
-  getParentBoundaryParse,
-  getRels,
-  getTitle,
-  getC4Type,
-  getC4ShapeInRow,
-  getC4BoundaryInRow,
-  setAccTitle,
-  getAccTitle,
-  getAccDescription,
-  setAccDescription,
-  parseDirective: parseDirective$9,
-  getConfig: () => getConfig$1().c4,
-  clear: clear$d,
-  LINETYPE: LINETYPE$1,
-  ARROWTYPE: ARROWTYPE$1,
-  PLACEMENT: PLACEMENT$1,
-  setTitle,
-  setC4Type
-  // apply,
-};
-const drawRect$2 = function(elem, rectData) {
-  const rectElem = elem.append("rect");
-  rectElem.attr("x", rectData.x);
-  rectElem.attr("y", rectData.y);
-  rectElem.attr("fill", rectData.fill);
-  rectElem.attr("stroke", rectData.stroke);
-  rectElem.attr("width", rectData.width);
-  rectElem.attr("height", rectData.height);
-  rectElem.attr("rx", rectData.rx);
-  rectElem.attr("ry", rectData.ry);
-  if (rectData.attrs !== "undefined" && rectData.attrs !== null) {
-    for (let attrKey in rectData.attrs) {
-      rectElem.attr(attrKey, rectData.attrs[attrKey]);
-    }
-  }
-  if (rectData.class !== "undefined") {
-    rectElem.attr("class", rectData.class);
-  }
-  return rectElem;
-};
-const drawImage$1 = function(elem, width2, height2, x, y, link) {
-  const imageElem = elem.append("image");
-  imageElem.attr("width", width2);
-  imageElem.attr("height", height2);
-  imageElem.attr("x", x);
-  imageElem.attr("y", y);
-  let sanitizedLink = link.startsWith("data:image/png;base64") ? link : (0,dist/* sanitizeUrl */.N)(link);
-  imageElem.attr("xlink:href", sanitizedLink);
-};
-const drawRels$1 = (elem, rels2, conf2) => {
-  const relsElem = elem.append("g");
-  let i = 0;
-  for (let rel of rels2) {
-    let textColor = rel.textColor ? rel.textColor : "#444444";
-    let strokeColor = rel.lineColor ? rel.lineColor : "#444444";
-    let offsetX = rel.offsetX ? parseInt(rel.offsetX) : 0;
-    let offsetY = rel.offsetY ? parseInt(rel.offsetY) : 0;
-    let url = "";
-    if (i === 0) {
-      let line2 = relsElem.append("line");
-      line2.attr("x1", rel.startPoint.x);
-      line2.attr("y1", rel.startPoint.y);
-      line2.attr("x2", rel.endPoint.x);
-      line2.attr("y2", rel.endPoint.y);
-      line2.attr("stroke-width", "1");
-      line2.attr("stroke", strokeColor);
-      line2.style("fill", "none");
-      if (rel.type !== "rel_b") {
-        line2.attr("marker-end", "url(" + url + "#arrowhead)");
-      }
-      if (rel.type === "birel" || rel.type === "rel_b") {
-        line2.attr("marker-start", "url(" + url + "#arrowend)");
-      }
-      i = -1;
-    } else {
-      let line2 = relsElem.append("path");
-      line2.attr("fill", "none").attr("stroke-width", "1").attr("stroke", strokeColor).attr(
-        "d",
-        "Mstartx,starty Qcontrolx,controly stopx,stopy ".replaceAll("startx", rel.startPoint.x).replaceAll("starty", rel.startPoint.y).replaceAll(
-          "controlx",
-          rel.startPoint.x + (rel.endPoint.x - rel.startPoint.x) / 2 - (rel.endPoint.x - rel.startPoint.x) / 4
-        ).replaceAll("controly", rel.startPoint.y + (rel.endPoint.y - rel.startPoint.y) / 2).replaceAll("stopx", rel.endPoint.x).replaceAll("stopy", rel.endPoint.y)
-      );
-      if (rel.type !== "rel_b") {
-        line2.attr("marker-end", "url(" + url + "#arrowhead)");
-      }
-      if (rel.type === "birel" || rel.type === "rel_b") {
-        line2.attr("marker-start", "url(" + url + "#arrowend)");
-      }
-    }
-    let messageConf = conf2.messageFont();
-    _drawTextCandidateFunc$2(conf2)(
-      rel.label.text,
-      relsElem,
-      Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX,
-      Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + offsetY,
-      rel.label.width,
-      rel.label.height,
-      { fill: textColor },
-      messageConf
-    );
-    if (rel.techn && rel.techn.text !== "") {
-      messageConf = conf2.messageFont();
-      _drawTextCandidateFunc$2(conf2)(
-        "[" + rel.techn.text + "]",
-        relsElem,
-        Math.min(rel.startPoint.x, rel.endPoint.x) + Math.abs(rel.endPoint.x - rel.startPoint.x) / 2 + offsetX,
-        Math.min(rel.startPoint.y, rel.endPoint.y) + Math.abs(rel.endPoint.y - rel.startPoint.y) / 2 + conf2.messageFontSize + 5 + offsetY,
-        Math.max(rel.label.width, rel.techn.width),
-        rel.techn.height,
-        { fill: textColor, "font-style": "italic" },
-        messageConf
-      );
-    }
-  }
-};
-const drawBoundary$1 = function(elem, boundary, conf2) {
-  const boundaryElem = elem.append("g");
-  let fillColor = boundary.bgColor ? boundary.bgColor : "none";
-  let strokeColor = boundary.borderColor ? boundary.borderColor : "#444444";
-  let fontColor = boundary.fontColor ? boundary.fontColor : "black";
-  let attrsValue = { "stroke-width": 1, "stroke-dasharray": "7.0,7.0" };
-  if (boundary.nodeType) {
-    attrsValue = { "stroke-width": 1 };
-  }
-  let rectData = {
-    x: boundary.x,
-    y: boundary.y,
-    fill: fillColor,
-    stroke: strokeColor,
-    width: boundary.width,
-    height: boundary.height,
-    rx: 2.5,
-    ry: 2.5,
-    attrs: attrsValue
-  };
-  drawRect$2(boundaryElem, rectData);
-  let boundaryConf = conf2.boundaryFont();
-  boundaryConf.fontWeight = "bold";
-  boundaryConf.fontSize = boundaryConf.fontSize + 2;
-  boundaryConf.fontColor = fontColor;
-  _drawTextCandidateFunc$2(conf2)(
-    boundary.label.text,
-    boundaryElem,
-    boundary.x,
-    boundary.y + boundary.label.Y,
-    boundary.width,
-    boundary.height,
-    { fill: "#444444" },
-    boundaryConf
-  );
-  if (boundary.type && boundary.type.text !== "") {
-    boundaryConf = conf2.boundaryFont();
-    boundaryConf.fontColor = fontColor;
-    _drawTextCandidateFunc$2(conf2)(
-      boundary.type.text,
-      boundaryElem,
-      boundary.x,
-      boundary.y + boundary.type.Y,
-      boundary.width,
-      boundary.height,
-      { fill: "#444444" },
-      boundaryConf
-    );
-  }
-  if (boundary.descr && boundary.descr.text !== "") {
-    boundaryConf = conf2.boundaryFont();
-    boundaryConf.fontSize = boundaryConf.fontSize - 2;
-    boundaryConf.fontColor = fontColor;
-    _drawTextCandidateFunc$2(conf2)(
-      boundary.descr.text,
-      boundaryElem,
-      boundary.x,
-      boundary.y + boundary.descr.Y,
-      boundary.width,
-      boundary.height,
-      { fill: "#444444" },
-      boundaryConf
-    );
-  }
-};
-const drawC4Shape = function(elem, c4Shape, conf2) {
-  var _a;
-  let fillColor = c4Shape.bgColor ? c4Shape.bgColor : conf2[c4Shape.typeC4Shape.text + "_bg_color"];
-  let strokeColor = c4Shape.borderColor ? c4Shape.borderColor : conf2[c4Shape.typeC4Shape.text + "_border_color"];
-  let fontColor = c4Shape.fontColor ? c4Shape.fontColor : "#FFFFFF";
-  let personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";
-  switch (c4Shape.typeC4Shape.text) {
-    case "person":
-      personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAACD0lEQVR4Xu2YoU4EMRCGT+4j8Ai8AhaH4QHgAUjQuFMECUgMIUgwJAgMhgQsAYUiJCiQIBBY+EITsjfTdme6V24v4c8vyGbb+ZjOtN0bNcvjQXmkH83WvYBWto6PLm6v7p7uH1/w2fXD+PBycX1Pv2l3IdDm/vn7x+dXQiAubRzoURa7gRZWd0iGRIiJbOnhnfYBQZNJjNbuyY2eJG8fkDE3bbG4ep6MHUAsgYxmE3nVs6VsBWJSGccsOlFPmLIViMzLOB7pCVO2AtHJMohH7Fh6zqitQK7m0rJvAVYgGcEpe//PLdDz65sM4pF9N7ICcXDKIB5Nv6j7tD0NoSdM2QrU9Gg0ewE1LqBhHR3BBdvj2vapnidjHxD/q6vd7Pvhr31AwcY8eXMTXAKECZZJFXuEq27aLgQK5uLMohCenGGuGewOxSjBvYBqeG6B+Nqiblggdjnc+ZXDy+FNFpFzw76O3UBAROuXh6FoiAcf5g9eTvUgzy0nWg6I8cXHRUpg5bOVBCo+KDpFajOf23GgPme7RSQ+lacIENUgJ6gg1k6HjgOlqnLqip4tEuhv0hNEMXUD0clyXE3p6pZA0S2nnvTlXwLJEZWlb7cTQH1+USgTN4VhAenm/wea1OCAOmqo6fE1WCb9WSKBah+rbUWPWAmE2Rvk0ApiB45eOyNAzU8xcTvj8KvkKEoOaIYeHNA3ZuygAvFMUO0AAAAASUVORK5CYII=";
-      break;
-    case "external_person":
-      personImg = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAIAAADYYG7QAAAB6ElEQVR4Xu2YLY+EMBCG9+dWr0aj0Wg0Go1Go0+j8Xdv2uTCvv1gpt0ebHKPuhDaeW4605Z9mJvx4AdXUyTUdd08z+u6flmWZRnHsWkafk9DptAwDPu+f0eAYtu2PEaGWuj5fCIZrBAC2eLBAnRCsEkkxmeaJp7iDJ2QMDdHsLg8SxKFEJaAo8lAXnmuOFIhTMpxxKATebo4UiFknuNo4OniSIXQyRxEA3YsnjGCVEjVXD7yLUAqxBGUyPv/Y4W2beMgGuS7kVQIBycH0fD+oi5pezQETxdHKmQKGk1eQEYldK+jw5GxPfZ9z7Mk0Qnhf1W1m3w//EUn5BDmSZsbR44QQLBEqrBHqOrmSKaQAxdnLArCrxZcM7A7ZKs4ioRq8LFC+NpC3WCBJsvpVw5edm9iEXFuyNfxXAgSwfrFQ1c0iNda8AdejvUgnktOtJQQxmcfFzGglc5WVCj7oDgFqU18boeFSs52CUh8LE8BIVQDT1ABrB0HtgSEYlX5doJnCwv9TXocKCaKbnwhdDKPq4lf3SwU3HLq4V/+WYhHVMa/3b4IlfyikAduCkcBc7mQ3/z/Qq/cTuikhkzB12Ae/mcJC9U+Vo8Ej1gWAtgbeGgFsAMHr50BIWOLCbezvhpBFUdY6EJuJ/QDW0XoMX60zZ0AAAAASUVORK5CYII=";
-      break;
-  }
-  const c4ShapeElem = elem.append("g");
-  c4ShapeElem.attr("class", "person-man");
-  const rect2 = getNoteRect$2();
-  switch (c4Shape.typeC4Shape.text) {
-    case "person":
-    case "external_person":
-    case "system":
-    case "external_system":
-    case "container":
-    case "external_container":
-    case "component":
-    case "external_component":
-      rect2.x = c4Shape.x;
-      rect2.y = c4Shape.y;
-      rect2.fill = fillColor;
-      rect2.width = c4Shape.width;
-      rect2.height = c4Shape.height;
-      rect2.stroke = strokeColor;
-      rect2.rx = 2.5;
-      rect2.ry = 2.5;
-      rect2.attrs = { "stroke-width": 0.5 };
-      drawRect$2(c4ShapeElem, rect2);
-      break;
-    case "system_db":
-    case "external_system_db":
-    case "container_db":
-    case "external_container_db":
-    case "component_db":
-    case "external_component_db":
-      c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr(
-        "d",
-        "Mstartx,startyc0,-10 half,-10 half,-10c0,0 half,0 half,10l0,heightc0,10 -half,10 -half,10c0,0 -half,0 -half,-10l0,-height".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2).replaceAll("height", c4Shape.height)
-      );
-      c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr(
-        "d",
-        "Mstartx,startyc0,10 half,10 half,10c0,0 half,0 half,-10".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.width / 2)
-      );
-      break;
-    case "system_queue":
-    case "external_system_queue":
-    case "container_queue":
-    case "external_container_queue":
-    case "component_queue":
-    case "external_component_queue":
-      c4ShapeElem.append("path").attr("fill", fillColor).attr("stroke-width", "0.5").attr("stroke", strokeColor).attr(
-        "d",
-        "Mstartx,startylwidth,0c5,0 5,half 5,halfc0,0 0,half -5,halfl-width,0c-5,0 -5,-half -5,-halfc0,0 0,-half 5,-half".replaceAll("startx", c4Shape.x).replaceAll("starty", c4Shape.y).replaceAll("width", c4Shape.width).replaceAll("half", c4Shape.height / 2)
-      );
-      c4ShapeElem.append("path").attr("fill", "none").attr("stroke-width", "0.5").attr("stroke", strokeColor).attr(
-        "d",
-        "Mstartx,startyc-5,0 -5,half -5,halfc0,half 5,half 5,half".replaceAll("startx", c4Shape.x + c4Shape.width).replaceAll("starty", c4Shape.y).replaceAll("half", c4Shape.height / 2)
-      );
-      break;
-  }
-  let c4ShapeFontConf = getC4ShapeFont(conf2, c4Shape.typeC4Shape.text);
-  c4ShapeElem.append("text").attr("fill", fontColor).attr("font-family", c4ShapeFontConf.fontFamily).attr("font-size", c4ShapeFontConf.fontSize - 2).attr("font-style", "italic").attr("lengthAdjust", "spacing").attr("textLength", c4Shape.typeC4Shape.width).attr("x", c4Shape.x + c4Shape.width / 2 - c4Shape.typeC4Shape.width / 2).attr("y", c4Shape.y + c4Shape.typeC4Shape.Y).text("<<" + c4Shape.typeC4Shape.text + ">>");
-  switch (c4Shape.typeC4Shape.text) {
-    case "person":
-    case "external_person":
-      drawImage$1(
-        c4ShapeElem,
-        48,
-        48,
-        c4Shape.x + c4Shape.width / 2 - 24,
-        c4Shape.y + c4Shape.image.Y,
-        personImg
-      );
-      break;
-  }
-  let textFontConf = conf2[c4Shape.typeC4Shape.text + "Font"]();
-  textFontConf.fontWeight = "bold";
-  textFontConf.fontSize = textFontConf.fontSize + 2;
-  textFontConf.fontColor = fontColor;
-  _drawTextCandidateFunc$2(conf2)(
-    c4Shape.label.text,
-    c4ShapeElem,
-    c4Shape.x,
-    c4Shape.y + c4Shape.label.Y,
-    c4Shape.width,
-    c4Shape.height,
-    { fill: fontColor },
-    textFontConf
-  );
-  textFontConf = conf2[c4Shape.typeC4Shape.text + "Font"]();
-  textFontConf.fontColor = fontColor;
-  if (c4Shape.techn && ((_a = c4Shape.techn) == null ? void 0 : _a.text) !== "") {
-    _drawTextCandidateFunc$2(conf2)(
-      c4Shape.techn.text,
-      c4ShapeElem,
-      c4Shape.x,
-      c4Shape.y + c4Shape.techn.Y,
-      c4Shape.width,
-      c4Shape.height,
-      { fill: fontColor, "font-style": "italic" },
-      textFontConf
-    );
-  } else if (c4Shape.type && c4Shape.type.text !== "") {
-    _drawTextCandidateFunc$2(conf2)(
-      c4Shape.type.text,
-      c4ShapeElem,
-      c4Shape.x,
-      c4Shape.y + c4Shape.type.Y,
-      c4Shape.width,
-      c4Shape.height,
-      { fill: fontColor, "font-style": "italic" },
-      textFontConf
-    );
-  }
-  if (c4Shape.descr && c4Shape.descr.text !== "") {
-    textFontConf = conf2.personFont();
-    textFontConf.fontColor = fontColor;
-    _drawTextCandidateFunc$2(conf2)(
-      c4Shape.descr.text,
-      c4ShapeElem,
-      c4Shape.x,
-      c4Shape.y + c4Shape.descr.Y,
-      c4Shape.width,
-      c4Shape.height,
-      { fill: fontColor },
-      textFontConf
-    );
-  }
-  return c4Shape.height;
-};
-const insertDatabaseIcon$1 = function(elem) {
-  elem.append("defs").append("symbol").attr("id", "database").attr("fill-rule", "evenodd").attr("clip-rule", "evenodd").append("path").attr("transform", "scale(.5)").attr(
-    "d",
-    "M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z"
-  );
-};
-const insertComputerIcon$1 = function(elem) {
-  elem.append("defs").append("symbol").attr("id", "computer").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr(
-    "d",
-    "M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z"
-  );
-};
-const insertClockIcon$1 = function(elem) {
-  elem.append("defs").append("symbol").attr("id", "clock").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr(
-    "d",
-    "M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z"
-  );
-};
-const insertArrowHead$1 = function(elem) {
-  elem.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 9).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z");
-};
-const insertArrowEnd = function(elem) {
-  elem.append("defs").append("marker").attr("id", "arrowend").attr("refX", 1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 10 0 L 0 5 L 10 10 z");
-};
-const insertArrowFilledHead$1 = function(elem) {
-  elem.append("defs").append("marker").attr("id", "filled-head").attr("refX", 18).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z");
-};
-const insertDynamicNumber = function(elem) {
-  elem.append("defs").append("marker").attr("id", "sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6);
-};
-const insertArrowCrossHead$1 = function(elem) {
-  const defs = elem.append("defs");
-  const marker = defs.append("marker").attr("id", "crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 16).attr("refY", 4);
-  marker.append("path").attr("fill", "black").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1px").attr("d", "M 9,2 V 6 L16,4 Z");
-  marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1px").attr("d", "M 0,1 L 6,7 M 6,1 L 0,7");
-};
-const getNoteRect$2 = function() {
-  return {
-    x: 0,
-    y: 0,
-    fill: "#EDF2AE",
-    stroke: "#666",
-    width: 100,
-    anchor: "start",
-    height: 100,
-    rx: 0,
-    ry: 0
-  };
-};
-const getC4ShapeFont = (cnf, typeC4Shape) => {
-  return {
-    fontFamily: cnf[typeC4Shape + "FontFamily"],
-    fontSize: cnf[typeC4Shape + "FontSize"],
-    fontWeight: cnf[typeC4Shape + "FontWeight"]
-  };
-};
-const _drawTextCandidateFunc$2 = function() {
-  function byText(content, g, x, y, width2, height2, textAttrs) {
-    const text = g.append("text").attr("x", x + width2 / 2).attr("y", y + height2 / 2 + 5).style("text-anchor", "middle").text(content);
-    _setTextAttrs(text, textAttrs);
-  }
-  function byTspan(content, g, x, y, width2, height2, textAttrs, conf2) {
-    const { fontSize, fontFamily, fontWeight } = conf2;
-    const lines = content.split(common$1.lineBreakRegex);
-    for (let i = 0; i < lines.length; i++) {
-      const dy = i * fontSize - fontSize * (lines.length - 1) / 2;
-      const text = g.append("text").attr("x", x + width2 / 2).attr("y", y).style("text-anchor", "middle").attr("dominant-baseline", "middle").style("font-size", fontSize).style("font-weight", fontWeight).style("font-family", fontFamily);
-      text.append("tspan").attr("dy", dy).text(lines[i]).attr("alignment-baseline", "mathematical");
-      _setTextAttrs(text, textAttrs);
-    }
-  }
-  function byFo(content, g, x, y, width2, height2, textAttrs, conf2) {
-    const s = g.append("switch");
-    const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width2).attr("height", height2);
-    const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
-    text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content);
-    byTspan(content, s, x, y, width2, height2, textAttrs, conf2);
-    _setTextAttrs(text, textAttrs);
-  }
-  function _setTextAttrs(toText, fromTextAttrsDict) {
-    for (const key in fromTextAttrsDict) {
-      if (fromTextAttrsDict.hasOwnProperty(key)) {
-        toText.attr(key, fromTextAttrsDict[key]);
-      }
-    }
-  }
-  return function(conf2) {
-    return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan;
-  };
-}();
-const svgDraw$3 = {
-  drawRect: drawRect$2,
-  drawBoundary: drawBoundary$1,
-  drawC4Shape,
-  drawRels: drawRels$1,
-  drawImage: drawImage$1,
-  insertArrowHead: insertArrowHead$1,
-  insertArrowEnd,
-  insertArrowFilledHead: insertArrowFilledHead$1,
-  insertDynamicNumber,
-  insertArrowCrossHead: insertArrowCrossHead$1,
-  insertDatabaseIcon: insertDatabaseIcon$1,
-  insertComputerIcon: insertComputerIcon$1,
-  insertClockIcon: insertClockIcon$1,
-  getNoteRect: getNoteRect$2,
-  sanitizeUrl: dist/* sanitizeUrl */.N
-  // TODO why is this exported?
-};
-let globalBoundaryMaxX = 0, globalBoundaryMaxY = 0;
-let c4ShapeInRow = 4;
-let c4BoundaryInRow = 2;
-parser$b.yy = c4Db;
-let conf$a = {};
-class Bounds {
-  constructor(diagObj) {
-    this.name = "";
-    this.data = {};
-    this.data.startx = void 0;
-    this.data.stopx = void 0;
-    this.data.starty = void 0;
-    this.data.stopy = void 0;
-    this.data.widthLimit = void 0;
-    this.nextData = {};
-    this.nextData.startx = void 0;
-    this.nextData.stopx = void 0;
-    this.nextData.starty = void 0;
-    this.nextData.stopy = void 0;
-    this.nextData.cnt = 0;
-    setConf$a(diagObj.db.getConfig());
-  }
-  setData(startx, stopx, starty, stopy) {
-    this.nextData.startx = this.data.startx = startx;
-    this.nextData.stopx = this.data.stopx = stopx;
-    this.nextData.starty = this.data.starty = starty;
-    this.nextData.stopy = this.data.stopy = stopy;
-  }
-  updateVal(obj, key, val, fun) {
-    if (obj[key] === void 0) {
-      obj[key] = val;
-    } else {
-      obj[key] = fun(val, obj[key]);
-    }
-  }
-  insert(c4Shape) {
-    this.nextData.cnt = this.nextData.cnt + 1;
-    let _startx = this.nextData.startx === this.nextData.stopx ? this.nextData.stopx + c4Shape.margin : this.nextData.stopx + c4Shape.margin * 2;
-    let _stopx = _startx + c4Shape.width;
-    let _starty = this.nextData.starty + c4Shape.margin * 2;
-    let _stopy = _starty + c4Shape.height;
-    if (_startx >= this.data.widthLimit || _stopx >= this.data.widthLimit || this.nextData.cnt > c4ShapeInRow) {
-      _startx = this.nextData.startx + c4Shape.margin + conf$a.nextLinePaddingX;
-      _starty = this.nextData.stopy + c4Shape.margin * 2;
-      this.nextData.stopx = _stopx = _startx + c4Shape.width;
-      this.nextData.starty = this.nextData.stopy;
-      this.nextData.stopy = _stopy = _starty + c4Shape.height;
-      this.nextData.cnt = 1;
-    }
-    c4Shape.x = _startx;
-    c4Shape.y = _starty;
-    this.updateVal(this.data, "startx", _startx, Math.min);
-    this.updateVal(this.data, "starty", _starty, Math.min);
-    this.updateVal(this.data, "stopx", _stopx, Math.max);
-    this.updateVal(this.data, "stopy", _stopy, Math.max);
-    this.updateVal(this.nextData, "startx", _startx, Math.min);
-    this.updateVal(this.nextData, "starty", _starty, Math.min);
-    this.updateVal(this.nextData, "stopx", _stopx, Math.max);
-    this.updateVal(this.nextData, "stopy", _stopy, Math.max);
-  }
-  init(diagObj) {
-    this.name = "";
-    this.data = {
-      startx: void 0,
-      stopx: void 0,
-      starty: void 0,
-      stopy: void 0,
-      widthLimit: void 0
-    };
-    this.nextData = {
-      startx: void 0,
-      stopx: void 0,
-      starty: void 0,
-      stopy: void 0,
-      cnt: 0
-    };
-    setConf$a(diagObj.db.getConfig());
-  }
-  bumpLastMargin(margin) {
-    this.data.stopx += margin;
-    this.data.stopy += margin;
-  }
-}
-const setConf$a = function(cnf) {
-  assignWithDepth$1(conf$a, cnf);
-  if (cnf.fontFamily) {
-    conf$a.personFontFamily = conf$a.systemFontFamily = conf$a.messageFontFamily = cnf.fontFamily;
-  }
-  if (cnf.fontSize) {
-    conf$a.personFontSize = conf$a.systemFontSize = conf$a.messageFontSize = cnf.fontSize;
-  }
-  if (cnf.fontWeight) {
-    conf$a.personFontWeight = conf$a.systemFontWeight = conf$a.messageFontWeight = cnf.fontWeight;
-  }
-};
-const c4ShapeFont = (cnf, typeC4Shape) => {
-  return {
-    fontFamily: cnf[typeC4Shape + "FontFamily"],
-    fontSize: cnf[typeC4Shape + "FontSize"],
-    fontWeight: cnf[typeC4Shape + "FontWeight"]
-  };
-};
-const boundaryFont = (cnf) => {
-  return {
-    fontFamily: cnf.boundaryFontFamily,
-    fontSize: cnf.boundaryFontSize,
-    fontWeight: cnf.boundaryFontWeight
-  };
-};
-const messageFont$1 = (cnf) => {
-  return {
-    fontFamily: cnf.messageFontFamily,
-    fontSize: cnf.messageFontSize,
-    fontWeight: cnf.messageFontWeight
-  };
-};
-function calcC4ShapeTextWH(textType, c4Shape, c4ShapeTextWrap, textConf, textLimitWidth) {
-  if (!c4Shape[textType].width) {
-    if (c4ShapeTextWrap) {
-      c4Shape[textType].text = wrapLabel(c4Shape[textType].text, textLimitWidth, textConf);
-      c4Shape[textType].textLines = c4Shape[textType].text.split(common$1.lineBreakRegex).length;
-      c4Shape[textType].width = textLimitWidth;
-      c4Shape[textType].height = calculateTextHeight(c4Shape[textType].text, textConf);
-    } else {
-      let lines = c4Shape[textType].text.split(common$1.lineBreakRegex);
-      c4Shape[textType].textLines = lines.length;
-      let lineHeight = 0;
-      c4Shape[textType].height = 0;
-      c4Shape[textType].width = 0;
-      for (const line2 of lines) {
-        c4Shape[textType].width = Math.max(
-          calculateTextWidth(line2, textConf),
-          c4Shape[textType].width
-        );
-        lineHeight = calculateTextHeight(line2, textConf);
-        c4Shape[textType].height = c4Shape[textType].height + lineHeight;
-      }
-    }
-  }
-}
-const drawBoundary = function(diagram, boundary, bounds2) {
-  boundary.x = bounds2.data.startx;
-  boundary.y = bounds2.data.starty;
-  boundary.width = bounds2.data.stopx - bounds2.data.startx;
-  boundary.height = bounds2.data.stopy - bounds2.data.starty;
-  boundary.label.y = conf$a.c4ShapeMargin - 35;
-  let boundaryTextWrap = boundary.wrap && conf$a.wrap;
-  let boundaryLabelConf = boundaryFont(conf$a);
-  boundaryLabelConf.fontSize = boundaryLabelConf.fontSize + 2;
-  boundaryLabelConf.fontWeight = "bold";
-  let textLimitWidth = calculateTextWidth(boundary.label.text, boundaryLabelConf);
-  calcC4ShapeTextWH("label", boundary, boundaryTextWrap, boundaryLabelConf, textLimitWidth);
-  svgDraw$3.drawBoundary(diagram, boundary, conf$a);
-};
-const drawC4ShapeArray = function(currentBounds, diagram, c4ShapeArray2, c4ShapeKeys) {
-  let Y = 0;
-  for (const c4ShapeKey of c4ShapeKeys) {
-    Y = 0;
-    const c4Shape = c4ShapeArray2[c4ShapeKey];
-    let c4ShapeTypeConf = c4ShapeFont(conf$a, c4Shape.typeC4Shape.text);
-    c4ShapeTypeConf.fontSize = c4ShapeTypeConf.fontSize - 2;
-    c4Shape.typeC4Shape.width = calculateTextWidth(
-      "<<" + c4Shape.typeC4Shape.text + ">>",
-      c4ShapeTypeConf
-    );
-    c4Shape.typeC4Shape.height = c4ShapeTypeConf.fontSize + 2;
-    c4Shape.typeC4Shape.Y = conf$a.c4ShapePadding;
-    Y = c4Shape.typeC4Shape.Y + c4Shape.typeC4Shape.height - 4;
-    c4Shape.image = { width: 0, height: 0, Y: 0 };
-    switch (c4Shape.typeC4Shape.text) {
-      case "person":
-      case "external_person":
-        c4Shape.image.width = 48;
-        c4Shape.image.height = 48;
-        c4Shape.image.Y = Y;
-        Y = c4Shape.image.Y + c4Shape.image.height;
-        break;
-    }
-    if (c4Shape.sprite) {
-      c4Shape.image.width = 48;
-      c4Shape.image.height = 48;
-      c4Shape.image.Y = Y;
-      Y = c4Shape.image.Y + c4Shape.image.height;
-    }
-    let c4ShapeTextWrap = c4Shape.wrap && conf$a.wrap;
-    let textLimitWidth = conf$a.width - conf$a.c4ShapePadding * 2;
-    let c4ShapeLabelConf = c4ShapeFont(conf$a, c4Shape.typeC4Shape.text);
-    c4ShapeLabelConf.fontSize = c4ShapeLabelConf.fontSize + 2;
-    c4ShapeLabelConf.fontWeight = "bold";
-    calcC4ShapeTextWH("label", c4Shape, c4ShapeTextWrap, c4ShapeLabelConf, textLimitWidth);
-    c4Shape["label"].Y = Y + 8;
-    Y = c4Shape["label"].Y + c4Shape["label"].height;
-    if (c4Shape.type && c4Shape.type.text !== "") {
-      c4Shape.type.text = "[" + c4Shape.type.text + "]";
-      let c4ShapeTypeConf2 = c4ShapeFont(conf$a, c4Shape.typeC4Shape.text);
-      calcC4ShapeTextWH("type", c4Shape, c4ShapeTextWrap, c4ShapeTypeConf2, textLimitWidth);
-      c4Shape["type"].Y = Y + 5;
-      Y = c4Shape["type"].Y + c4Shape["type"].height;
-    } else if (c4Shape.techn && c4Shape.techn.text !== "") {
-      c4Shape.techn.text = "[" + c4Shape.techn.text + "]";
-      let c4ShapeTechnConf = c4ShapeFont(conf$a, c4Shape.techn.text);
-      calcC4ShapeTextWH("techn", c4Shape, c4ShapeTextWrap, c4ShapeTechnConf, textLimitWidth);
-      c4Shape["techn"].Y = Y + 5;
-      Y = c4Shape["techn"].Y + c4Shape["techn"].height;
-    }
-    let rectHeight = Y;
-    let rectWidth = c4Shape.label.width;
-    if (c4Shape.descr && c4Shape.descr.text !== "") {
-      let c4ShapeDescrConf = c4ShapeFont(conf$a, c4Shape.typeC4Shape.text);
-      calcC4ShapeTextWH("descr", c4Shape, c4ShapeTextWrap, c4ShapeDescrConf, textLimitWidth);
-      c4Shape["descr"].Y = Y + 20;
-      Y = c4Shape["descr"].Y + c4Shape["descr"].height;
-      rectWidth = Math.max(c4Shape.label.width, c4Shape.descr.width);
-      rectHeight = Y - c4Shape["descr"].textLines * 5;
-    }
-    rectWidth = rectWidth + conf$a.c4ShapePadding;
-    c4Shape.width = Math.max(c4Shape.width || conf$a.width, rectWidth, conf$a.width);
-    c4Shape.height = Math.max(c4Shape.height || conf$a.height, rectHeight, conf$a.height);
-    c4Shape.margin = c4Shape.margin || conf$a.c4ShapeMargin;
-    currentBounds.insert(c4Shape);
-    svgDraw$3.drawC4Shape(diagram, c4Shape, conf$a);
-  }
-  currentBounds.bumpLastMargin(conf$a.c4ShapeMargin);
-};
-class Point {
-  constructor(x, y) {
-    this.x = x;
-    this.y = y;
-  }
-}
-let getIntersectPoint = function(fromNode, endPoint) {
-  let x1 = fromNode.x;
-  let y1 = fromNode.y;
-  let x2 = endPoint.x;
-  let y2 = endPoint.y;
-  let fromCenterX = x1 + fromNode.width / 2;
-  let fromCenterY = y1 + fromNode.height / 2;
-  let dx = Math.abs(x1 - x2);
-  let dy = Math.abs(y1 - y2);
-  let tanDYX = dy / dx;
-  let fromDYX = fromNode.height / fromNode.width;
-  let returnPoint = null;
-  if (y1 == y2 && x1 < x2) {
-    returnPoint = new Point(x1 + fromNode.width, fromCenterY);
-  } else if (y1 == y2 && x1 > x2) {
-    returnPoint = new Point(x1, fromCenterY);
-  } else if (x1 == x2 && y1 < y2) {
-    returnPoint = new Point(fromCenterX, y1 + fromNode.height);
-  } else if (x1 == x2 && y1 > y2) {
-    returnPoint = new Point(fromCenterX, y1);
-  }
-  if (x1 > x2 && y1 < y2) {
-    if (fromDYX >= tanDYX) {
-      returnPoint = new Point(x1, fromCenterY + tanDYX * fromNode.width / 2);
-    } else {
-      returnPoint = new Point(
-        fromCenterX - dx / dy * fromNode.height / 2,
-        y1 + fromNode.height
-      );
-    }
-  } else if (x1 < x2 && y1 < y2) {
-    if (fromDYX >= tanDYX) {
-      returnPoint = new Point(x1 + fromNode.width, fromCenterY + tanDYX * fromNode.width / 2);
-    } else {
-      returnPoint = new Point(
-        fromCenterX + dx / dy * fromNode.height / 2,
-        y1 + fromNode.height
-      );
-    }
-  } else if (x1 < x2 && y1 > y2) {
-    if (fromDYX >= tanDYX) {
-      returnPoint = new Point(x1 + fromNode.width, fromCenterY - tanDYX * fromNode.width / 2);
-    } else {
-      returnPoint = new Point(fromCenterX + fromNode.height / 2 * dx / dy, y1);
-    }
-  } else if (x1 > x2 && y1 > y2) {
-    if (fromDYX >= tanDYX) {
-      returnPoint = new Point(x1, fromCenterY - fromNode.width / 2 * tanDYX);
-    } else {
-      returnPoint = new Point(fromCenterX - fromNode.height / 2 * dx / dy, y1);
-    }
-  }
-  return returnPoint;
-};
-let getIntersectPoints = function(fromNode, endNode) {
-  let endIntersectPoint = { x: 0, y: 0 };
-  endIntersectPoint.x = endNode.x + endNode.width / 2;
-  endIntersectPoint.y = endNode.y + endNode.height / 2;
-  let startPoint = getIntersectPoint(fromNode, endIntersectPoint);
-  endIntersectPoint.x = fromNode.x + fromNode.width / 2;
-  endIntersectPoint.y = fromNode.y + fromNode.height / 2;
-  let endPoint = getIntersectPoint(endNode, endIntersectPoint);
-  return { startPoint, endPoint };
-};
-const drawRels = function(diagram, rels2, getC4ShapeObj, diagObj) {
-  let i = 0;
-  for (let rel of rels2) {
-    i = i + 1;
-    let relTextWrap = rel.wrap && conf$a.wrap;
-    let relConf = messageFont$1(conf$a);
-    let diagramType = diagObj.db.getC4Type();
-    if (diagramType === "C4Dynamic") {
-      rel.label.text = i + ": " + rel.label.text;
-    }
-    let textLimitWidth = calculateTextWidth(rel.label.text, relConf);
-    calcC4ShapeTextWH("label", rel, relTextWrap, relConf, textLimitWidth);
-    if (rel.techn && rel.techn.text !== "") {
-      textLimitWidth = calculateTextWidth(rel.techn.text, relConf);
-      calcC4ShapeTextWH("techn", rel, relTextWrap, relConf, textLimitWidth);
-    }
-    if (rel.descr && rel.descr.text !== "") {
-      textLimitWidth = calculateTextWidth(rel.descr.text, relConf);
-      calcC4ShapeTextWH("descr", rel, relTextWrap, relConf, textLimitWidth);
-    }
-    let fromNode = getC4ShapeObj(rel.from);
-    let endNode = getC4ShapeObj(rel.to);
-    let points = getIntersectPoints(fromNode, endNode);
-    rel.startPoint = points.startPoint;
-    rel.endPoint = points.endPoint;
-  }
-  svgDraw$3.drawRels(diagram, rels2, conf$a);
-};
-function drawInsideBoundary(diagram, parentBoundaryAlias, parentBounds, currentBoundaries, diagObj) {
-  let currentBounds = new Bounds(diagObj);
-  currentBounds.data.widthLimit = parentBounds.data.widthLimit / Math.min(c4BoundaryInRow, currentBoundaries.length);
-  for (let [i, currentBoundary] of currentBoundaries.entries()) {
-    let Y = 0;
-    currentBoundary.image = { width: 0, height: 0, Y: 0 };
-    if (currentBoundary.sprite) {
-      currentBoundary.image.width = 48;
-      currentBoundary.image.height = 48;
-      currentBoundary.image.Y = Y;
-      Y = currentBoundary.image.Y + currentBoundary.image.height;
-    }
-    let currentBoundaryTextWrap = currentBoundary.wrap && conf$a.wrap;
-    let currentBoundaryLabelConf = boundaryFont(conf$a);
-    currentBoundaryLabelConf.fontSize = currentBoundaryLabelConf.fontSize + 2;
-    currentBoundaryLabelConf.fontWeight = "bold";
-    calcC4ShapeTextWH(
-      "label",
-      currentBoundary,
-      currentBoundaryTextWrap,
-      currentBoundaryLabelConf,
-      currentBounds.data.widthLimit
-    );
-    currentBoundary["label"].Y = Y + 8;
-    Y = currentBoundary["label"].Y + currentBoundary["label"].height;
-    if (currentBoundary.type && currentBoundary.type.text !== "") {
-      currentBoundary.type.text = "[" + currentBoundary.type.text + "]";
-      let currentBoundaryTypeConf = boundaryFont(conf$a);
-      calcC4ShapeTextWH(
-        "type",
-        currentBoundary,
-        currentBoundaryTextWrap,
-        currentBoundaryTypeConf,
-        currentBounds.data.widthLimit
-      );
-      currentBoundary["type"].Y = Y + 5;
-      Y = currentBoundary["type"].Y + currentBoundary["type"].height;
-    }
-    if (currentBoundary.descr && currentBoundary.descr.text !== "") {
-      let currentBoundaryDescrConf = boundaryFont(conf$a);
-      currentBoundaryDescrConf.fontSize = currentBoundaryDescrConf.fontSize - 2;
-      calcC4ShapeTextWH(
-        "descr",
-        currentBoundary,
-        currentBoundaryTextWrap,
-        currentBoundaryDescrConf,
-        currentBounds.data.widthLimit
-      );
-      currentBoundary["descr"].Y = Y + 20;
-      Y = currentBoundary["descr"].Y + currentBoundary["descr"].height;
-    }
-    if (i == 0 || i % c4BoundaryInRow === 0) {
-      let _x = parentBounds.data.startx + conf$a.diagramMarginX;
-      let _y = parentBounds.data.stopy + conf$a.diagramMarginY + Y;
-      currentBounds.setData(_x, _x, _y, _y);
-    } else {
-      let _x = currentBounds.data.stopx !== currentBounds.data.startx ? currentBounds.data.stopx + conf$a.diagramMarginX : currentBounds.data.startx;
-      let _y = currentBounds.data.starty;
-      currentBounds.setData(_x, _x, _y, _y);
-    }
-    currentBounds.name = currentBoundary.alias;
-    let currentPersonOrSystemArray = diagObj.db.getC4ShapeArray(currentBoundary.alias);
-    let currentPersonOrSystemKeys = diagObj.db.getC4ShapeKeys(currentBoundary.alias);
-    if (currentPersonOrSystemKeys.length > 0) {
-      drawC4ShapeArray(
-        currentBounds,
-        diagram,
-        currentPersonOrSystemArray,
-        currentPersonOrSystemKeys
-      );
-    }
-    parentBoundaryAlias = currentBoundary.alias;
-    let nextCurrentBoundarys = diagObj.db.getBoundarys(parentBoundaryAlias);
-    if (nextCurrentBoundarys.length > 0) {
-      drawInsideBoundary(
-        diagram,
-        parentBoundaryAlias,
-        currentBounds,
-        nextCurrentBoundarys,
-        diagObj
-      );
-    }
-    if (currentBoundary.alias !== "global") {
-      drawBoundary(diagram, currentBoundary, currentBounds);
-    }
-    parentBounds.data.stopy = Math.max(
-      currentBounds.data.stopy + conf$a.c4ShapeMargin,
-      parentBounds.data.stopy
-    );
-    parentBounds.data.stopx = Math.max(
-      currentBounds.data.stopx + conf$a.c4ShapeMargin,
-      parentBounds.data.stopx
-    );
-    globalBoundaryMaxX = Math.max(globalBoundaryMaxX, parentBounds.data.stopx);
-    globalBoundaryMaxY = Math.max(globalBoundaryMaxY, parentBounds.data.stopy);
-  }
-}
-const draw$e = function(_text, id2, _version, diagObj) {
-  conf$a = getConfig$1().c4;
-  const securityLevel = getConfig$1().securityLevel;
-  let sandboxElement;
-  if (securityLevel === "sandbox") {
-    sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-  }
-  const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-  let db2 = diagObj.db;
-  diagObj.db.setWrap(conf$a.wrap);
-  c4ShapeInRow = db2.getC4ShapeInRow();
-  c4BoundaryInRow = db2.getC4BoundaryInRow();
-  log$1.debug(`C:${JSON.stringify(conf$a, null, 2)}`);
-  const diagram = securityLevel === "sandbox" ? root.select(`[id="${id2}"]`) : (0,src/* select */.Ys)(`[id="${id2}"]`);
-  svgDraw$3.insertComputerIcon(diagram);
-  svgDraw$3.insertDatabaseIcon(diagram);
-  svgDraw$3.insertClockIcon(diagram);
-  let screenBounds = new Bounds(diagObj);
-  screenBounds.setData(
-    conf$a.diagramMarginX,
-    conf$a.diagramMarginX,
-    conf$a.diagramMarginY,
-    conf$a.diagramMarginY
-  );
-  screenBounds.data.widthLimit = screen.availWidth;
-  globalBoundaryMaxX = conf$a.diagramMarginX;
-  globalBoundaryMaxY = conf$a.diagramMarginY;
-  const title2 = diagObj.db.getTitle();
-  let currentBoundaries = diagObj.db.getBoundarys("");
-  drawInsideBoundary(diagram, "", screenBounds, currentBoundaries, diagObj);
-  svgDraw$3.insertArrowHead(diagram);
-  svgDraw$3.insertArrowEnd(diagram);
-  svgDraw$3.insertArrowCrossHead(diagram);
-  svgDraw$3.insertArrowFilledHead(diagram);
-  drawRels(diagram, diagObj.db.getRels(), diagObj.db.getC4Shape, diagObj);
-  screenBounds.data.stopx = globalBoundaryMaxX;
-  screenBounds.data.stopy = globalBoundaryMaxY;
-  const box = screenBounds.data;
-  let boxHeight = box.stopy - box.starty;
-  let height2 = boxHeight + 2 * conf$a.diagramMarginY;
-  let boxWidth = box.stopx - box.startx;
-  const width2 = boxWidth + 2 * conf$a.diagramMarginX;
-  if (title2) {
-    diagram.append("text").text(title2).attr("x", (box.stopx - box.startx) / 2 - 4 * conf$a.diagramMarginX).attr("y", box.starty + conf$a.diagramMarginY);
-  }
-  configureSvgSize(diagram, height2, width2, conf$a.useMaxWidth);
-  const extraVertForTitle = title2 ? 60 : 0;
-  diagram.attr(
-    "viewBox",
-    box.startx - conf$a.diagramMarginX + " -" + (conf$a.diagramMarginY + extraVertForTitle) + " " + width2 + " " + (height2 + extraVertForTitle)
-  );
-  log$1.debug(`models:`, box);
-};
-const c4Renderer = {
-  drawPersonOrSystemArray: drawC4ShapeArray,
-  drawBoundary,
-  setConf: setConf$a,
-  draw: draw$e
-};
-var parser$a = function() {
-  var o = function(k, v, o2, l) {
-    for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
-      ;
-    return o2;
-  }, $V0 = [1, 3], $V1 = [1, 7], $V2 = [1, 8], $V3 = [1, 9], $V4 = [1, 10], $V5 = [1, 13], $V6 = [1, 12], $V7 = [1, 16, 25], $V8 = [1, 20], $V9 = [1, 32], $Va = [1, 33], $Vb = [1, 34], $Vc = [1, 36], $Vd = [1, 39], $Ve = [1, 37], $Vf = [1, 38], $Vg = [1, 44], $Vh = [1, 45], $Vi = [1, 40], $Vj = [1, 41], $Vk = [1, 42], $Vl = [1, 43], $Vm = [1, 48], $Vn = [1, 49], $Vo = [1, 50], $Vp = [1, 51], $Vq = [16, 25], $Vr = [1, 65], $Vs = [1, 66], $Vt = [1, 67], $Vu = [1, 68], $Vv = [1, 69], $Vw = [1, 70], $Vx = [1, 71], $Vy = [1, 80], $Vz = [16, 25, 32, 45, 46, 54, 60, 61, 62, 63, 64, 65, 66, 71, 73], $VA = [16, 25, 30, 32, 45, 46, 50, 54, 60, 61, 62, 63, 64, 65, 66, 71, 73, 88, 89, 90, 91], $VB = [5, 8, 9, 10, 11, 16, 19, 23, 25], $VC = [54, 88, 89, 90, 91], $VD = [54, 65, 66, 88, 89, 90, 91], $VE = [54, 60, 61, 62, 63, 64, 88, 89, 90, 91], $VF = [16, 25, 32], $VG = [1, 107];
-  var parser2 = {
-    trace: function trace() {
-    },
-    yy: {},
-    symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "statments": 5, "direction": 6, "directive": 7, "direction_tb": 8, "direction_bt": 9, "direction_rl": 10, "direction_lr": 11, "graphConfig": 12, "openDirective": 13, "typeDirective": 14, "closeDirective": 15, "NEWLINE": 16, ":": 17, "argDirective": 18, "open_directive": 19, "type_directive": 20, "arg_directive": 21, "close_directive": 22, "CLASS_DIAGRAM": 23, "statements": 24, "EOF": 25, "statement": 26, "className": 27, "alphaNumToken": 28, "classLiteralName": 29, "GENERICTYPE": 30, "relationStatement": 31, "LABEL": 32, "classStatement": 33, "methodStatement": 34, "annotationStatement": 35, "clickStatement": 36, "cssClassStatement": 37, "noteStatement": 38, "acc_title": 39, "acc_title_value": 40, "acc_descr": 41, "acc_descr_value": 42, "acc_descr_multiline_value": 43, "CLASS": 44, "STYLE_SEPARATOR": 45, "STRUCT_START": 46, "members": 47, "STRUCT_STOP": 48, "ANNOTATION_START": 49, "ANNOTATION_END": 50, "MEMBER": 51, "SEPARATOR": 52, "relation": 53, "STR": 54, "NOTE_FOR": 55, "noteText": 56, "NOTE": 57, "relationType": 58, "lineType": 59, "AGGREGATION": 60, "EXTENSION": 61, "COMPOSITION": 62, "DEPENDENCY": 63, "LOLLIPOP": 64, "LINE": 65, "DOTTED_LINE": 66, "CALLBACK": 67, "LINK": 68, "LINK_TARGET": 69, "CLICK": 70, "CALLBACK_NAME": 71, "CALLBACK_ARGS": 72, "HREF": 73, "CSSCLASS": 74, "commentToken": 75, "textToken": 76, "graphCodeTokens": 77, "textNoTagsToken": 78, "TAGSTART": 79, "TAGEND": 80, "==": 81, "--": 82, "PCT": 83, "DEFAULT": 84, "SPACE": 85, "MINUS": 86, "keywords": 87, "UNICODE_TEXT": 88, "NUM": 89, "ALPHA": 90, "BQUOTE_STR": 91, "$accept": 0, "$end": 1 },
-    terminals_: { 2: "error", 5: "statments", 8: "direction_tb", 9: "direction_bt", 10: "direction_rl", 11: "direction_lr", 16: "NEWLINE", 17: ":", 19: "open_directive", 20: "type_directive", 21: "arg_directive", 22: "close_directive", 23: "CLASS_DIAGRAM", 25: "EOF", 30: "GENERICTYPE", 32: "LABEL", 39: "acc_title", 40: "acc_title_value", 41: "acc_descr", 42: "acc_descr_value", 43: "acc_descr_multiline_value", 44: "CLASS", 45: "STYLE_SEPARATOR", 46: "STRUCT_START", 48: "STRUCT_STOP", 49: "ANNOTATION_START", 50: "ANNOTATION_END", 51: "MEMBER", 52: "SEPARATOR", 54: "STR", 55: "NOTE_FOR", 57: "NOTE", 60: "AGGREGATION", 61: "EXTENSION", 62: "COMPOSITION", 63: "DEPENDENCY", 64: "LOLLIPOP", 65: "LINE", 66: "DOTTED_LINE", 67: "CALLBACK", 68: "LINK", 69: "LINK_TARGET", 70: "CLICK", 71: "CALLBACK_NAME", 72: "CALLBACK_ARGS", 73: "HREF", 74: "CSSCLASS", 77: "graphCodeTokens", 79: "TAGSTART", 80: "TAGEND", 81: "==", 82: "--", 83: "PCT", 84: "DEFAULT", 85: "SPACE", 86: "MINUS", 87: "keywords", 88: "UNICODE_TEXT", 89: "NUM", 90: "ALPHA", 91: "BQUOTE_STR" },
-    productions_: [0, [3, 1], [3, 1], [3, 1], [3, 2], [6, 1], [6, 1], [6, 1], [6, 1], [4, 1], [7, 4], [7, 6], [13, 1], [14, 1], [18, 1], [15, 1], [12, 4], [24, 1], [24, 2], [24, 3], [27, 1], [27, 1], [27, 2], [27, 2], [27, 2], [26, 1], [26, 2], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 2], [26, 2], [26, 1], [33, 2], [33, 4], [33, 5], [33, 7], [35, 4], [47, 1], [47, 2], [34, 1], [34, 2], [34, 1], [34, 1], [31, 3], [31, 4], [31, 4], [31, 5], [38, 3], [38, 2], [53, 3], [53, 2], [53, 2], [53, 1], [58, 1], [58, 1], [58, 1], [58, 1], [58, 1], [59, 1], [59, 1], [36, 3], [36, 4], [36, 3], [36, 4], [36, 4], [36, 5], [36, 3], [36, 4], [36, 4], [36, 5], [36, 3], [36, 4], [36, 4], [36, 5], [37, 3], [75, 1], [75, 1], [76, 1], [76, 1], [76, 1], [76, 1], [76, 1], [76, 1], [76, 1], [78, 1], [78, 1], [78, 1], [78, 1], [28, 1], [28, 1], [28, 1], [29, 1], [56, 1]],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
-      var $0 = $$.length - 1;
-      switch (yystate) {
-        case 5:
-          yy.setDirection("TB");
-          break;
-        case 6:
-          yy.setDirection("BT");
-          break;
-        case 7:
-          yy.setDirection("RL");
-          break;
-        case 8:
-          yy.setDirection("LR");
-          break;
-        case 12:
-          yy.parseDirective("%%{", "open_directive");
-          break;
-        case 13:
-          yy.parseDirective($$[$0], "type_directive");
-          break;
-        case 14:
-          $$[$0] = $$[$0].trim().replace(/'/g, '"');
-          yy.parseDirective($$[$0], "arg_directive");
-          break;
-        case 15:
-          yy.parseDirective("}%%", "close_directive", "class");
-          break;
-        case 20:
-        case 21:
-          this.$ = $$[$0];
-          break;
-        case 22:
-          this.$ = $$[$0 - 1] + $$[$0];
-          break;
-        case 23:
-        case 24:
-          this.$ = $$[$0 - 1] + "~" + $$[$0];
-          break;
-        case 25:
-          yy.addRelation($$[$0]);
-          break;
-        case 26:
-          $$[$0 - 1].title = yy.cleanupLabel($$[$0]);
-          yy.addRelation($$[$0 - 1]);
-          break;
-        case 35:
-          this.$ = $$[$0].trim();
-          yy.setAccTitle(this.$);
-          break;
-        case 36:
-        case 37:
-          this.$ = $$[$0].trim();
-          yy.setAccDescription(this.$);
-          break;
-        case 38:
-          yy.addClass($$[$0]);
-          break;
-        case 39:
-          yy.addClass($$[$0 - 2]);
-          yy.setCssClass($$[$0 - 2], $$[$0]);
-          break;
-        case 40:
-          yy.addClass($$[$0 - 3]);
-          yy.addMembers($$[$0 - 3], $$[$0 - 1]);
-          break;
-        case 41:
-          yy.addClass($$[$0 - 5]);
-          yy.setCssClass($$[$0 - 5], $$[$0 - 3]);
-          yy.addMembers($$[$0 - 5], $$[$0 - 1]);
-          break;
-        case 42:
-          yy.addAnnotation($$[$0], $$[$0 - 2]);
-          break;
-        case 43:
-          this.$ = [$$[$0]];
-          break;
-        case 44:
-          $$[$0].push($$[$0 - 1]);
-          this.$ = $$[$0];
-          break;
-        case 45:
-          break;
-        case 46:
-          yy.addMember($$[$0 - 1], yy.cleanupLabel($$[$0]));
-          break;
-        case 47:
-          break;
-        case 48:
-          break;
-        case 49:
-          this.$ = { "id1": $$[$0 - 2], "id2": $$[$0], relation: $$[$0 - 1], relationTitle1: "none", relationTitle2: "none" };
-          break;
-        case 50:
-          this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 1], relationTitle1: $$[$0 - 2], relationTitle2: "none" };
-          break;
-        case 51:
-          this.$ = { id1: $$[$0 - 3], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: "none", relationTitle2: $$[$0 - 1] };
-          break;
-        case 52:
-          this.$ = { id1: $$[$0 - 4], id2: $$[$0], relation: $$[$0 - 2], relationTitle1: $$[$0 - 3], relationTitle2: $$[$0 - 1] };
-          break;
-        case 53:
-          yy.addNote($$[$0], $$[$0 - 1]);
-          break;
-        case 54:
-          yy.addNote($$[$0]);
-          break;
-        case 55:
-          this.$ = { type1: $$[$0 - 2], type2: $$[$0], lineType: $$[$0 - 1] };
-          break;
-        case 56:
-          this.$ = { type1: "none", type2: $$[$0], lineType: $$[$0 - 1] };
-          break;
-        case 57:
-          this.$ = { type1: $$[$0 - 1], type2: "none", lineType: $$[$0] };
-          break;
-        case 58:
-          this.$ = { type1: "none", type2: "none", lineType: $$[$0] };
-          break;
-        case 59:
-          this.$ = yy.relationType.AGGREGATION;
-          break;
-        case 60:
-          this.$ = yy.relationType.EXTENSION;
-          break;
-        case 61:
-          this.$ = yy.relationType.COMPOSITION;
-          break;
-        case 62:
-          this.$ = yy.relationType.DEPENDENCY;
-          break;
-        case 63:
-          this.$ = yy.relationType.LOLLIPOP;
-          break;
-        case 64:
-          this.$ = yy.lineType.LINE;
-          break;
-        case 65:
-          this.$ = yy.lineType.DOTTED_LINE;
-          break;
-        case 66:
-        case 72:
-          this.$ = $$[$0 - 2];
-          yy.setClickEvent($$[$0 - 1], $$[$0]);
-          break;
-        case 67:
-        case 73:
-          this.$ = $$[$0 - 3];
-          yy.setClickEvent($$[$0 - 2], $$[$0 - 1]);
-          yy.setTooltip($$[$0 - 2], $$[$0]);
-          break;
-        case 68:
-        case 76:
-          this.$ = $$[$0 - 2];
-          yy.setLink($$[$0 - 1], $$[$0]);
-          break;
-        case 69:
-          this.$ = $$[$0 - 3];
-          yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]);
-          break;
-        case 70:
-        case 78:
-          this.$ = $$[$0 - 3];
-          yy.setLink($$[$0 - 2], $$[$0 - 1]);
-          yy.setTooltip($$[$0 - 2], $$[$0]);
-          break;
-        case 71:
-        case 79:
-          this.$ = $$[$0 - 4];
-          yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]);
-          yy.setTooltip($$[$0 - 3], $$[$0 - 1]);
-          break;
-        case 74:
-          this.$ = $$[$0 - 3];
-          yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);
-          break;
-        case 75:
-          this.$ = $$[$0 - 4];
-          yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]);
-          yy.setTooltip($$[$0 - 3], $$[$0]);
-          break;
-        case 77:
-          this.$ = $$[$0 - 3];
-          yy.setLink($$[$0 - 2], $$[$0 - 1], $$[$0]);
-          break;
-        case 80:
-          yy.setCssClass($$[$0 - 1], $$[$0]);
-          break;
-      }
-    },
-    table: [{ 3: 1, 4: 2, 5: $V0, 6: 4, 7: 5, 8: $V1, 9: $V2, 10: $V3, 11: $V4, 12: 6, 13: 11, 19: $V5, 23: $V6 }, { 1: [3] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, { 3: 14, 4: 2, 5: $V0, 6: 4, 7: 5, 8: $V1, 9: $V2, 10: $V3, 11: $V4, 12: 6, 13: 11, 19: $V5, 23: $V6 }, { 1: [2, 9] }, o($V7, [2, 5]), o($V7, [2, 6]), o($V7, [2, 7]), o($V7, [2, 8]), { 14: 15, 20: [1, 16] }, { 16: [1, 17] }, { 20: [2, 12] }, { 1: [2, 4] }, { 15: 18, 17: [1, 19], 22: $V8 }, o([17, 22], [2, 13]), { 6: 31, 7: 30, 8: $V1, 9: $V2, 10: $V3, 11: $V4, 13: 11, 19: $V5, 24: 21, 26: 22, 27: 35, 28: 46, 29: 47, 31: 23, 33: 24, 34: 25, 35: 26, 36: 27, 37: 28, 38: 29, 39: $V9, 41: $Va, 43: $Vb, 44: $Vc, 49: $Vd, 51: $Ve, 52: $Vf, 55: $Vg, 57: $Vh, 67: $Vi, 68: $Vj, 70: $Vk, 74: $Vl, 88: $Vm, 89: $Vn, 90: $Vo, 91: $Vp }, { 16: [1, 52] }, { 18: 53, 21: [1, 54] }, { 16: [2, 15] }, { 25: [1, 55] }, { 16: [1, 56], 25: [2, 17] }, o($Vq, [2, 25], { 32: [1, 57] }), o($Vq, [2, 27]), o($Vq, [2, 28]), o($Vq, [2, 29]), o($Vq, [2, 30]), o($Vq, [2, 31]), o($Vq, [2, 32]), o($Vq, [2, 33]), o($Vq, [2, 34]), { 40: [1, 58] }, { 42: [1, 59] }, o($Vq, [2, 37]), o($Vq, [2, 45], { 53: 60, 58: 63, 59: 64, 32: [1, 62], 54: [1, 61], 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx }), { 27: 72, 28: 46, 29: 47, 88: $Vm, 89: $Vn, 90: $Vo, 91: $Vp }, o($Vq, [2, 47]), o($Vq, [2, 48]), { 28: 73, 88: $Vm, 89: $Vn, 90: $Vo }, { 27: 74, 28: 46, 29: 47, 88: $Vm, 89: $Vn, 90: $Vo, 91: $Vp }, { 27: 75, 28: 46, 29: 47, 88: $Vm, 89: $Vn, 90: $Vo, 91: $Vp }, { 27: 76, 28: 46, 29: 47, 88: $Vm, 89: $Vn, 90: $Vo, 91: $Vp }, { 54: [1, 77] }, { 27: 78, 28: 46, 29: 47, 88: $Vm, 89: $Vn, 90: $Vo, 91: $Vp }, { 54: $Vy, 56: 79 }, o($Vz, [2, 20], { 28: 46, 29: 47, 27: 81, 30: [1, 82], 88: $Vm, 89: $Vn, 90: $Vo, 91: $Vp }), o($Vz, [2, 21], { 30: [1, 83] }), o($VA, [2, 94]), o($VA, [2, 95]), o($VA, [2, 96]), o([16, 25, 30, 32, 45, 46, 54, 60, 61, 62, 63, 64, 65, 66, 71, 73], [2, 97]), o($VB, [2, 10]), { 15: 84, 22: $V8 }, { 22: [2, 14] }, { 1: [2, 16] }, { 6: 31, 7: 30, 8: $V1, 9: $V2, 10: $V3, 11: $V4, 13: 11, 19: $V5, 24: 85, 25: [2, 18], 26: 22, 27: 35, 28: 46, 29: 47, 31: 23, 33: 24, 34: 25, 35: 26, 36: 27, 37: 28, 38: 29, 39: $V9, 41: $Va, 43: $Vb, 44: $Vc, 49: $Vd, 51: $Ve, 52: $Vf, 55: $Vg, 57: $Vh, 67: $Vi, 68: $Vj, 70: $Vk, 74: $Vl, 88: $Vm, 89: $Vn, 90: $Vo, 91: $Vp }, o($Vq, [2, 26]), o($Vq, [2, 35]), o($Vq, [2, 36]), { 27: 86, 28: 46, 29: 47, 54: [1, 87], 88: $Vm, 89: $Vn, 90: $Vo, 91: $Vp }, { 53: 88, 58: 63, 59: 64, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv, 65: $Vw, 66: $Vx }, o($Vq, [2, 46]), { 59: 89, 65: $Vw, 66: $Vx }, o($VC, [2, 58], { 58: 90, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv }), o($VD, [2, 59]), o($VD, [2, 60]), o($VD, [2, 61]), o($VD, [2, 62]), o($VD, [2, 63]), o($VE, [2, 64]), o($VE, [2, 65]), o($Vq, [2, 38], { 45: [1, 91], 46: [1, 92] }), { 50: [1, 93] }, { 54: [1, 94] }, { 54: [1, 95] }, { 71: [1, 96], 73: [1, 97] }, { 28: 98, 88: $Vm, 89: $Vn, 90: $Vo }, { 54: $Vy, 56: 99 }, o($Vq, [2, 54]), o($Vq, [2, 98]), o($Vz, [2, 22]), o($Vz, [2, 23]), o($Vz, [2, 24]), { 16: [1, 100] }, { 25: [2, 19] }, o($VF, [2, 49]), { 27: 101, 28: 46, 29: 47, 88: $Vm, 89: $Vn, 90: $Vo, 91: $Vp }, { 27: 102, 28: 46, 29: 47, 54: [1, 103], 88: $Vm, 89: $Vn, 90: $Vo, 91: $Vp }, o($VC, [2, 57], { 58: 104, 60: $Vr, 61: $Vs, 62: $Vt, 63: $Vu, 64: $Vv }), o($VC, [2, 56]), { 28: 105, 88: $Vm, 89: $Vn, 90: $Vo }, { 47: 106, 51: $VG }, { 27: 108, 28: 46, 29: 47, 88: $Vm, 89: $Vn, 90: $Vo, 91: $Vp }, o($Vq, [2, 66], { 54: [1, 109] }), o($Vq, [2, 68], { 54: [1, 111], 69: [1, 110] }), o($Vq, [2, 72], { 54: [1, 112], 72: [1, 113] }), o($Vq, [2, 76], { 54: [1, 115], 69: [1, 114] }), o($Vq, [2, 80]), o($Vq, [2, 53]), o($VB, [2, 11]), o($VF, [2, 51]), o($VF, [2, 50]), { 27: 116, 28: 46, 29: 47, 88: $Vm, 89: $Vn, 90: $Vo, 91: $Vp }, o($VC, [2, 55]), o($Vq, [2, 39], { 46: [1, 117] }), { 48: [1, 118] }, { 47: 119, 48: [2, 43], 51: $VG }, o($Vq, [2, 42]), o($Vq, [2, 67]), o($Vq, [2, 69]), o($Vq, [2, 70], { 69: [1, 120] }), o($Vq, [2, 73]), o($Vq, [2, 74], { 54: [1, 121] }), o($Vq, [2, 77]), o($Vq, [2, 78], { 69: [1, 122] }), o($VF, [2, 52]), { 47: 123, 51: $VG }, o($Vq, [2, 40]), { 48: [2, 44] }, o($Vq, [2, 71]), o($Vq, [2, 75]), o($Vq, [2, 79]), { 48: [1, 124] }, o($Vq, [2, 41])],
-    defaultActions: { 2: [2, 1], 3: [2, 2], 4: [2, 3], 6: [2, 9], 13: [2, 12], 14: [2, 4], 20: [2, 15], 54: [2, 14], 55: [2, 16], 85: [2, 19], 119: [2, 44] },
-    parseError: function parseError(str2, hash) {
-      if (hash.recoverable) {
-        this.trace(str2);
-      } else {
-        var error = new Error(str2);
-        error.hash = hash;
-        throw error;
-      }
-    },
-    parse: function parse2(input) {
-      var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;
-      var args = lstack.slice.call(arguments, 1);
-      var lexer2 = Object.create(this.lexer);
-      var sharedState = { yy: {} };
-      for (var k in this.yy) {
-        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
-          sharedState.yy[k] = this.yy[k];
-        }
-      }
-      lexer2.setInput(input, sharedState.yy);
-      sharedState.yy.lexer = lexer2;
-      sharedState.yy.parser = this;
-      if (typeof lexer2.yylloc == "undefined") {
-        lexer2.yylloc = {};
-      }
-      var yyloc = lexer2.yylloc;
-      lstack.push(yyloc);
-      var ranges = lexer2.options && lexer2.options.ranges;
-      if (typeof sharedState.yy.parseError === "function") {
-        this.parseError = sharedState.yy.parseError;
-      } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-      }
-      function lex2() {
-        var token;
-        token = tstack.pop() || lexer2.lex() || EOF;
-        if (typeof token !== "number") {
-          if (token instanceof Array) {
-            tstack = token;
-            token = tstack.pop();
-          }
-          token = self.symbols_[token] || token;
-        }
-        return token;
-      }
-      var symbol, state, action, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-          action = this.defaultActions[state];
-        } else {
-          if (symbol === null || typeof symbol == "undefined") {
-            symbol = lex2();
-          }
-          action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-          var errStr = "";
-          expected = [];
-          for (p in table[state]) {
-            if (this.terminals_[p] && p > TERROR) {
-              expected.push("'" + this.terminals_[p] + "'");
-            }
-          }
-          if (lexer2.showPosition) {
-            errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-          } else {
-            errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
-          }
-          this.parseError(errStr, {
-            text: lexer2.match,
-            token: this.terminals_[symbol] || symbol,
-            line: lexer2.yylineno,
-            loc: yyloc,
-            expected
-          });
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-          throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-          case 1:
-            stack.push(symbol);
-            vstack.push(lexer2.yytext);
-            lstack.push(lexer2.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            {
-              yyleng = lexer2.yyleng;
-              yytext = lexer2.yytext;
-              yylineno = lexer2.yylineno;
-              yyloc = lexer2.yylloc;
-            }
-            break;
-          case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-              first_line: lstack[lstack.length - (len || 1)].first_line,
-              last_line: lstack[lstack.length - 1].last_line,
-              first_column: lstack[lstack.length - (len || 1)].first_column,
-              last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-              yyval._$.range = [
-                lstack[lstack.length - (len || 1)].range[0],
-                lstack[lstack.length - 1].range[1]
-              ];
-            }
-            r = this.performAction.apply(yyval, [
-              yytext,
-              yyleng,
-              yylineno,
-              sharedState.yy,
-              action[1],
-              vstack,
-              lstack
-            ].concat(args));
-            if (typeof r !== "undefined") {
-              return r;
-            }
-            if (len) {
-              stack = stack.slice(0, -1 * len * 2);
-              vstack = vstack.slice(0, -1 * len);
-              lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-          case 3:
-            return true;
-        }
-      }
-      return true;
-    }
-  };
-  var lexer = function() {
-    var lexer2 = {
-      EOF: 1,
-      parseError: function parseError(str2, hash) {
-        if (this.yy.parser) {
-          this.yy.parser.parseError(str2, hash);
-        } else {
-          throw new Error(str2);
-        }
-      },
-      // resets the lexer, sets new input
-      setInput: function(input, yy) {
-        this.yy = yy || this.yy || {};
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = "";
-        this.conditionStack = ["INITIAL"];
-        this.yylloc = {
-          first_line: 1,
-          first_column: 0,
-          last_line: 1,
-          last_column: 0
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [0, 0];
-        }
-        this.offset = 0;
-        return this;
-      },
-      // consumes and returns one char from the input
-      input: function() {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno++;
-          this.yylloc.last_line++;
-        } else {
-          this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-          this.yylloc.range[1]++;
-        }
-        this._input = this._input.slice(1);
-        return ch;
-      },
-      // unshifts one char (or a string) into the input
-      unput: function(ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len);
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-        if (lines.length - 1) {
-          this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-        this.yylloc = {
-          first_line: this.yylloc.first_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.first_column,
-          last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-      },
-      // When called from action, caches matched text and appends it on next action
-      more: function() {
-        this._more = true;
-        return this;
-      },
-      // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-      reject: function() {
-        if (this.options.backtrack_lexer) {
-          this._backtrack = true;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-        return this;
-      },
-      // retain first n characters of the match
-      less: function(n) {
-        this.unput(this.match.slice(n));
-      },
-      // displays already matched input, i.e. for error messages
-      pastInput: function() {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
-      },
-      // displays upcoming input, i.e. for error messages
-      upcomingInput: function() {
-        var next = this.match;
-        if (next.length < 20) {
-          next += this._input.substr(0, 20 - next.length);
-        }
-        return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
-      },
-      // displays the character position where the lexing error occurred, i.e. for error messages
-      showPosition: function() {
-        var pre = this.pastInput();
-        var c2 = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c2 + "^";
-      },
-      // test the lexed token: return FALSE when not a match, otherwise return token
-      test_match: function(match, indexed_rule) {
-        var token, lines, backup;
-        if (this.options.backtrack_lexer) {
-          backup = {
-            yylineno: this.yylineno,
-            yylloc: {
-              first_line: this.yylloc.first_line,
-              last_line: this.last_line,
-              first_column: this.yylloc.first_column,
-              last_column: this.yylloc.last_column
-            },
-            yytext: this.yytext,
-            match: this.match,
-            matches: this.matches,
-            matched: this.matched,
-            yyleng: this.yyleng,
-            offset: this.offset,
-            _more: this._more,
-            _input: this._input,
-            yy: this.yy,
-            conditionStack: this.conditionStack.slice(0),
-            done: this.done
-          };
-          if (this.options.ranges) {
-            backup.yylloc.range = this.yylloc.range.slice(0);
-          }
-        }
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno += lines.length;
-        }
-        this.yylloc = {
-          first_line: this.yylloc.last_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.last_column,
-          last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-          this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-          this.done = false;
-        }
-        if (token) {
-          return token;
-        } else if (this._backtrack) {
-          for (var k in backup) {
-            this[k] = backup[k];
-          }
-          return false;
-        }
-        return false;
-      },
-      // return next match in input
-      next: function() {
-        if (this.done) {
-          return this.EOF;
-        }
-        if (!this._input) {
-          this.done = true;
-        }
-        var token, match, tempMatch, index;
-        if (!this._more) {
-          this.yytext = "";
-          this.match = "";
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-          tempMatch = this._input.match(this.rules[rules[i]]);
-          if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-            match = tempMatch;
-            index = i;
-            if (this.options.backtrack_lexer) {
-              token = this.test_match(tempMatch, rules[i]);
-              if (token !== false) {
-                return token;
-              } else if (this._backtrack) {
-                match = false;
-                continue;
-              } else {
-                return false;
-              }
-            } else if (!this.options.flex) {
-              break;
-            }
-          }
-        }
-        if (match) {
-          token = this.test_match(match, rules[index]);
-          if (token !== false) {
-            return token;
-          }
-          return false;
-        }
-        if (this._input === "") {
-          return this.EOF;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-      },
-      // return next match that has a token
-      lex: function lex2() {
-        var r = this.next();
-        if (r) {
-          return r;
-        } else {
-          return this.lex();
-        }
-      },
-      // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-      begin: function begin(condition) {
-        this.conditionStack.push(condition);
-      },
-      // pop the previously active lexer condition state off the condition stack
-      popState: function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-          return this.conditionStack.pop();
-        } else {
-          return this.conditionStack[0];
-        }
-      },
-      // produce the lexer rule set which is active for the currently active lexer condition state
-      _currentRules: function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-          return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-          return this.conditions["INITIAL"].rules;
-        }
-      },
-      // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-      topState: function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-          return this.conditionStack[n];
-        } else {
-          return "INITIAL";
-        }
-      },
-      // alias for begin(condition)
-      pushState: function pushState(condition) {
-        this.begin(condition);
-      },
-      // return the number of states currently on the stack
-      stateStackSize: function stateStackSize() {
-        return this.conditionStack.length;
-      },
-      options: {},
-      performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
-        switch ($avoiding_name_collisions) {
-          case 0:
-            this.begin("open_directive");
-            return 19;
-          case 1:
-            return 8;
-          case 2:
-            return 9;
-          case 3:
-            return 10;
-          case 4:
-            return 11;
-          case 5:
-            this.begin("type_directive");
-            return 20;
-          case 6:
-            this.popState();
-            this.begin("arg_directive");
-            return 17;
-          case 7:
-            this.popState();
-            this.popState();
-            return 22;
-          case 8:
-            return 21;
-          case 9:
-            break;
-          case 10:
-            break;
-          case 11:
-            this.begin("acc_title");
-            return 39;
-          case 12:
-            this.popState();
-            return "acc_title_value";
-          case 13:
-            this.begin("acc_descr");
-            return 41;
-          case 14:
-            this.popState();
-            return "acc_descr_value";
-          case 15:
-            this.begin("acc_descr_multiline");
-            break;
-          case 16:
-            this.popState();
-            break;
-          case 17:
-            return "acc_descr_multiline_value";
-          case 18:
-            return 16;
-          case 19:
-            break;
-          case 20:
-            return 23;
-          case 21:
-            return 23;
-          case 22:
-            this.begin("struct");
-            return 46;
-          case 23:
-            return "EDGE_STATE";
-          case 24:
-            return "EOF_IN_STRUCT";
-          case 25:
-            return "OPEN_IN_STRUCT";
-          case 26:
-            this.popState();
-            return 48;
-          case 27:
-            break;
-          case 28:
-            return "MEMBER";
-          case 29:
-            return 44;
-          case 30:
-            return 74;
-          case 31:
-            return 67;
-          case 32:
-            return 68;
-          case 33:
-            return 70;
-          case 34:
-            return 55;
-          case 35:
-            return 57;
-          case 36:
-            return 49;
-          case 37:
-            return 50;
-          case 38:
-            this.begin("generic");
-            break;
-          case 39:
-            this.popState();
-            break;
-          case 40:
-            return "GENERICTYPE";
-          case 41:
-            this.begin("string");
-            break;
-          case 42:
-            this.popState();
-            break;
-          case 43:
-            return "STR";
-          case 44:
-            this.begin("bqstring");
-            break;
-          case 45:
-            this.popState();
-            break;
-          case 46:
-            return "BQUOTE_STR";
-          case 47:
-            this.begin("href");
-            break;
-          case 48:
-            this.popState();
-            break;
-          case 49:
-            return 73;
-          case 50:
-            this.begin("callback_name");
-            break;
-          case 51:
-            this.popState();
-            break;
-          case 52:
-            this.popState();
-            this.begin("callback_args");
-            break;
-          case 53:
-            return 71;
-          case 54:
-            this.popState();
-            break;
-          case 55:
-            return 72;
-          case 56:
-            return 69;
-          case 57:
-            return 69;
-          case 58:
-            return 69;
-          case 59:
-            return 69;
-          case 60:
-            return 61;
-          case 61:
-            return 61;
-          case 62:
-            return 63;
-          case 63:
-            return 63;
-          case 64:
-            return 62;
-          case 65:
-            return 60;
-          case 66:
-            return 64;
-          case 67:
-            return 65;
-          case 68:
-            return 66;
-          case 69:
-            return 32;
-          case 70:
-            return 45;
-          case 71:
-            return 86;
-          case 72:
-            return "DOT";
-          case 73:
-            return "PLUS";
-          case 74:
-            return 83;
-          case 75:
-            return "EQUALS";
-          case 76:
-            return "EQUALS";
-          case 77:
-            return 90;
-          case 78:
-            return "PUNCTUATION";
-          case 79:
-            return 89;
-          case 80:
-            return 88;
-          case 81:
-            return 85;
-          case 82:
-            return 25;
-        }
-      },
-      rules: [/^(?:%%\{)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:%%(?!\{)*[^\n]*(\r?\n?)+)/, /^(?:%%[^\n]*(\r?\n)*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:\s*(\r?\n)+)/, /^(?:\s+)/, /^(?:classDiagram-v2\b)/, /^(?:classDiagram\b)/, /^(?:[{])/, /^(?:\[\*\])/, /^(?:$)/, /^(?:[{])/, /^(?:[}])/, /^(?:[\n])/, /^(?:[^{}\n]*)/, /^(?:class\b)/, /^(?:cssClass\b)/, /^(?:callback\b)/, /^(?:link\b)/, /^(?:click\b)/, /^(?:note for\b)/, /^(?:note\b)/, /^(?:<<)/, /^(?:>>)/, /^(?:[~])/, /^(?:[~])/, /^(?:[^~]*)/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:[`])/, /^(?:[`])/, /^(?:[^`]+)/, /^(?:href[\s]+["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:\s*<\|)/, /^(?:\s*\|>)/, /^(?:\s*>)/, /^(?:\s*<)/, /^(?:\s*\*)/, /^(?:\s*o\b)/, /^(?:\s*\(\))/, /^(?:--)/, /^(?:\.\.)/, /^(?::{1}[^:\n;]+)/, /^(?::{3})/, /^(?:-)/, /^(?:\.)/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:\w+)/, /^(?:[!"#$%&'*+,-.`?\\/])/, /^(?:[0-9]+)/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\s)/, /^(?:$)/],
-      conditions: { "acc_descr_multiline": { "rules": [16, 17], "inclusive": false }, "acc_descr": { "rules": [14], "inclusive": false }, "acc_title": { "rules": [12], "inclusive": false }, "arg_directive": { "rules": [7, 8], "inclusive": false }, "type_directive": { "rules": [6, 7], "inclusive": false }, "open_directive": { "rules": [5], "inclusive": false }, "callback_args": { "rules": [54, 55], "inclusive": false }, "callback_name": { "rules": [51, 52, 53], "inclusive": false }, "href": { "rules": [48, 49], "inclusive": false }, "struct": { "rules": [23, 24, 25, 26, 27, 28], "inclusive": false }, "generic": { "rules": [39, 40], "inclusive": false }, "bqstring": { "rules": [45, 46], "inclusive": false }, "string": { "rules": [42, 43], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 9, 10, 11, 13, 15, 18, 19, 20, 21, 22, 23, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 41, 44, 47, 50, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82], "inclusive": true } }
-    };
-    return lexer2;
-  }();
-  parser2.lexer = lexer;
-  function Parser() {
-    this.yy = {};
-  }
-  Parser.prototype = parser2;
-  parser2.Parser = Parser;
-  return new Parser();
-}();
-parser$a.parser = parser$a;
-const classParser = parser$a;
-const classDetector = (txt, config2) => {
-  var _a;
-  if (((_a = config2 == null ? void 0 : config2.class) == null ? void 0 : _a.defaultRenderer) === "dagre-wrapper") {
-    return false;
-  }
-  return txt.match(/^\s*classDiagram/) !== null;
-};
-const classDetectorV2 = (txt, config2) => {
-  var _a;
-  if (txt.match(/^\s*classDiagram/) !== null && ((_a = config2 == null ? void 0 : config2.class) == null ? void 0 : _a.defaultRenderer) === "dagre-wrapper") {
-    return true;
-  }
-  return txt.match(/^\s*classDiagram-v2/) !== null;
-};
-const MERMAID_DOM_ID_PREFIX$1 = "classid-";
-let relations$1 = [];
-let classes$2 = {};
-let notes = [];
-let classCounter = 0;
-let funs$2 = [];
-const sanitizeText$2 = (txt) => common$1.sanitizeText(txt, getConfig$1());
-const parseDirective$8 = function(statement, context, type2) {
-  mermaidAPI.parseDirective(this, statement, context, type2);
-};
-const splitClassNameAndType = function(id2) {
-  let genericType = "";
-  let className = id2;
-  if (id2.indexOf("~") > 0) {
-    let split = id2.split("~");
-    className = split[0];
-    genericType = common$1.sanitizeText(split[1], getConfig$1());
-  }
-  return { className, type: genericType };
-};
-const addClass$1 = function(id2) {
-  let classId = splitClassNameAndType(id2);
-  if (classes$2[classId.className] !== void 0) {
-    return;
-  }
-  classes$2[classId.className] = {
-    id: classId.className,
-    type: classId.type,
-    cssClasses: [],
-    methods: [],
-    members: [],
-    annotations: [],
-    domId: MERMAID_DOM_ID_PREFIX$1 + classId.className + "-" + classCounter
-  };
-  classCounter++;
-};
-const lookUpDomId$1 = function(id2) {
-  const classKeys = Object.keys(classes$2);
-  for (const classKey of classKeys) {
-    if (classes$2[classKey].id === id2) {
-      return classes$2[classKey].domId;
-    }
-  }
-};
-const clear$c = function() {
-  relations$1 = [];
-  classes$2 = {};
-  notes = [];
-  funs$2 = [];
-  funs$2.push(setupToolTips$1);
-  clear$g();
-};
-const getClass = function(id2) {
-  return classes$2[id2];
-};
-const getClasses$5 = function() {
-  return classes$2;
-};
-const getRelations$1 = function() {
-  return relations$1;
-};
-const getNotes = function() {
-  return notes;
-};
-const addRelation$1 = function(relation) {
-  log$1.debug("Adding relation: " + JSON.stringify(relation));
-  addClass$1(relation.id1);
-  addClass$1(relation.id2);
-  relation.id1 = splitClassNameAndType(relation.id1).className;
-  relation.id2 = splitClassNameAndType(relation.id2).className;
-  relation.relationTitle1 = common$1.sanitizeText(
-    relation.relationTitle1.trim(),
-    getConfig$1()
-  );
-  relation.relationTitle2 = common$1.sanitizeText(
-    relation.relationTitle2.trim(),
-    getConfig$1()
-  );
-  relations$1.push(relation);
-};
-const addAnnotation = function(className, annotation) {
-  const validatedClassName = splitClassNameAndType(className).className;
-  classes$2[validatedClassName].annotations.push(annotation);
-};
-const addMember = function(className, member) {
-  const validatedClassName = splitClassNameAndType(className).className;
-  const theClass = classes$2[validatedClassName];
-  if (typeof member === "string") {
-    const memberString = member.trim();
-    if (memberString.startsWith("<<") && memberString.endsWith(">>")) {
-      theClass.annotations.push(sanitizeText$2(memberString.substring(2, memberString.length - 2)));
-    } else if (memberString.indexOf(")") > 0) {
-      theClass.methods.push(sanitizeText$2(memberString));
-    } else if (memberString) {
-      theClass.members.push(sanitizeText$2(memberString));
-    }
-  }
-};
-const addMembers = function(className, members) {
-  if (Array.isArray(members)) {
-    members.reverse();
-    members.forEach((member) => addMember(className, member));
-  }
-};
-const addNote$1 = function(text, className) {
-  const note2 = {
-    id: `note${notes.length}`,
-    class: className,
-    text
-  };
-  notes.push(note2);
-};
-const cleanupLabel$1 = function(label) {
-  if (label.substring(0, 1) === ":") {
-    return common$1.sanitizeText(label.substr(1).trim(), getConfig$1());
-  } else {
-    return sanitizeText$2(label.trim());
-  }
-};
-const setCssClass$1 = function(ids, className) {
-  ids.split(",").forEach(function(_id) {
-    let id2 = _id;
-    if (_id[0].match(/\d/)) {
-      id2 = MERMAID_DOM_ID_PREFIX$1 + id2;
-    }
-    if (classes$2[id2] !== void 0) {
-      classes$2[id2].cssClasses.push(className);
-    }
-  });
-};
-const setTooltip$1 = function(ids, tooltip) {
-  const config2 = getConfig$1();
-  ids.split(",").forEach(function(id2) {
-    if (tooltip !== void 0) {
-      classes$2[id2].tooltip = common$1.sanitizeText(tooltip, config2);
-    }
-  });
-};
-const getTooltip$1 = function(id2) {
-  return classes$2[id2].tooltip;
-};
-const setLink$2 = function(ids, linkStr, target) {
-  const config2 = getConfig$1();
-  ids.split(",").forEach(function(_id) {
-    let id2 = _id;
-    if (_id[0].match(/\d/)) {
-      id2 = MERMAID_DOM_ID_PREFIX$1 + id2;
-    }
-    if (classes$2[id2] !== void 0) {
-      classes$2[id2].link = mermaid_ae477ddf_utils.formatUrl(linkStr, config2);
-      if (config2.securityLevel === "sandbox") {
-        classes$2[id2].linkTarget = "_top";
-      } else if (typeof target === "string") {
-        classes$2[id2].linkTarget = sanitizeText$2(target);
-      } else {
-        classes$2[id2].linkTarget = "_blank";
-      }
-    }
-  });
-  setCssClass$1(ids, "clickable");
-};
-const setClickEvent$2 = function(ids, functionName, functionArgs) {
-  ids.split(",").forEach(function(id2) {
-    setClickFunc(id2, functionName, functionArgs);
-    classes$2[id2].haveCallback = true;
-  });
-  setCssClass$1(ids, "clickable");
-};
-const setClickFunc = function(domId, functionName, functionArgs) {
-  const config2 = getConfig$1();
-  let id2 = domId;
-  let elemId = lookUpDomId$1(id2);
-  if (config2.securityLevel !== "loose") {
-    return;
-  }
-  if (functionName === void 0) {
-    return;
-  }
-  if (classes$2[id2] !== void 0) {
-    let argList = [];
-    if (typeof functionArgs === "string") {
-      argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);
-      for (let i = 0; i < argList.length; i++) {
-        let item = argList[i].trim();
-        if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') {
-          item = item.substr(1, item.length - 2);
-        }
-        argList[i] = item;
-      }
-    }
-    if (argList.length === 0) {
-      argList.push(elemId);
-    }
-    funs$2.push(function() {
-      const elem = document.querySelector(`[id="${elemId}"]`);
-      if (elem !== null) {
-        elem.addEventListener(
-          "click",
-          function() {
-            mermaid_ae477ddf_utils.runFunc(functionName, ...argList);
-          },
-          false
-        );
-      }
-    });
-  }
-};
-const bindFunctions$2 = function(element) {
-  funs$2.forEach(function(fun) {
-    fun(element);
-  });
-};
-const lineType$1 = {
-  LINE: 0,
-  DOTTED_LINE: 1
-};
-const relationType$1 = {
-  AGGREGATION: 0,
-  EXTENSION: 1,
-  COMPOSITION: 2,
-  DEPENDENCY: 3,
-  LOLLIPOP: 4
-};
-const setupToolTips$1 = function(element) {
-  let tooltipElem = (0,src/* select */.Ys)(".mermaidTooltip");
-  if ((tooltipElem._groups || tooltipElem)[0][0] === null) {
-    tooltipElem = (0,src/* select */.Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0);
-  }
-  const svg = (0,src/* select */.Ys)(element).select("svg");
-  const nodes = svg.selectAll("g.node");
-  nodes.on("mouseover", function() {
-    const el = (0,src/* select */.Ys)(this);
-    const title2 = el.attr("title");
-    if (title2 === null) {
-      return;
-    }
-    const rect2 = this.getBoundingClientRect();
-    tooltipElem.transition().duration(200).style("opacity", ".9");
-    tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect2.left + (rect2.right - rect2.left) / 2 + "px").style("top", window.scrollY + rect2.top - 14 + document.body.scrollTop + "px");
-    tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>"));
-    el.classed("hover", true);
-  }).on("mouseout", function() {
-    tooltipElem.transition().duration(500).style("opacity", 0);
-    const el = (0,src/* select */.Ys)(this);
-    el.classed("hover", false);
-  });
-};
-funs$2.push(setupToolTips$1);
-let direction$2 = "TB";
-const getDirection$2 = () => direction$2;
-const setDirection$2 = (dir) => {
-  direction$2 = dir;
-};
-const classDb = {
-  parseDirective: parseDirective$8,
-  setAccTitle,
-  getAccTitle,
-  getAccDescription,
-  setAccDescription,
-  getConfig: () => getConfig$1().class,
-  addClass: addClass$1,
-  bindFunctions: bindFunctions$2,
-  clear: clear$c,
-  getClass,
-  getClasses: getClasses$5,
-  getNotes,
-  addAnnotation,
-  addNote: addNote$1,
-  getRelations: getRelations$1,
-  addRelation: addRelation$1,
-  getDirection: getDirection$2,
-  setDirection: setDirection$2,
-  addMember,
-  addMembers,
-  cleanupLabel: cleanupLabel$1,
-  lineType: lineType$1,
-  relationType: relationType$1,
-  setClickEvent: setClickEvent$2,
-  setCssClass: setCssClass$1,
-  setLink: setLink$2,
-  getTooltip: getTooltip$1,
-  setTooltip: setTooltip$1,
-  lookUpDomId: lookUpDomId$1,
-  setDiagramTitle,
-  getDiagramTitle
-};
-let edgeCount$1 = 0;
-const drawEdge$1 = function(elem, path, relation, conf2, diagObj) {
-  const getRelationType = function(type2) {
-    switch (type2) {
-      case diagObj.db.relationType.AGGREGATION:
-        return "aggregation";
-      case diagObj.db.relationType.EXTENSION:
-        return "extension";
-      case diagObj.db.relationType.COMPOSITION:
-        return "composition";
-      case diagObj.db.relationType.DEPENDENCY:
-        return "dependency";
-      case diagObj.db.relationType.LOLLIPOP:
-        return "lollipop";
-    }
-  };
-  path.points = path.points.filter((p) => !Number.isNaN(p.y));
-  const lineData = path.points;
-  const lineFunction = (0,src/* line */.jvg)().x(function(d) {
-    return d.x;
-  }).y(function(d) {
-    return d.y;
-  }).curve(src/* curveBasis */.$0Z);
-  const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount$1).attr("class", "relation");
-  let url = "";
-  if (conf2.arrowMarkerAbsolute) {
-    url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search;
-    url = url.replace(/\(/g, "\\(");
-    url = url.replace(/\)/g, "\\)");
-  }
-  if (relation.relation.lineType == 1) {
-    svgPath.attr("class", "relation dashed-line");
-  }
-  if (relation.relation.lineType == 10) {
-    svgPath.attr("class", "relation dotted-line");
-  }
-  if (relation.relation.type1 !== "none") {
-    svgPath.attr(
-      "marker-start",
-      "url(" + url + "#" + getRelationType(relation.relation.type1) + "Start)"
-    );
-  }
-  if (relation.relation.type2 !== "none") {
-    svgPath.attr(
-      "marker-end",
-      "url(" + url + "#" + getRelationType(relation.relation.type2) + "End)"
-    );
-  }
-  let x, y;
-  const l = path.points.length;
-  let labelPosition = mermaid_ae477ddf_utils.calcLabelPosition(path.points);
-  x = labelPosition.x;
-  y = labelPosition.y;
-  let p1_card_x, p1_card_y;
-  let p2_card_x, p2_card_y;
-  if (l % 2 !== 0 && l > 1) {
-    let cardinality_1_point = mermaid_ae477ddf_utils.calcCardinalityPosition(
-      relation.relation.type1 !== "none",
-      path.points,
-      path.points[0]
-    );
-    let cardinality_2_point = mermaid_ae477ddf_utils.calcCardinalityPosition(
-      relation.relation.type2 !== "none",
-      path.points,
-      path.points[l - 1]
-    );
-    log$1.debug("cardinality_1_point " + JSON.stringify(cardinality_1_point));
-    log$1.debug("cardinality_2_point " + JSON.stringify(cardinality_2_point));
-    p1_card_x = cardinality_1_point.x;
-    p1_card_y = cardinality_1_point.y;
-    p2_card_x = cardinality_2_point.x;
-    p2_card_y = cardinality_2_point.y;
-  }
-  if (relation.title !== void 0) {
-    const g = elem.append("g").attr("class", "classLabel");
-    const label = g.append("text").attr("class", "label").attr("x", x).attr("y", y).attr("fill", "red").attr("text-anchor", "middle").text(relation.title);
-    window.label = label;
-    const bounds2 = label.node().getBBox();
-    g.insert("rect", ":first-child").attr("class", "box").attr("x", bounds2.x - conf2.padding / 2).attr("y", bounds2.y - conf2.padding / 2).attr("width", bounds2.width + conf2.padding).attr("height", bounds2.height + conf2.padding);
-  }
-  log$1.info("Rendering relation " + JSON.stringify(relation));
-  if (relation.relationTitle1 !== void 0 && relation.relationTitle1 !== "none") {
-    const g = elem.append("g").attr("class", "cardinality");
-    g.append("text").attr("class", "type1").attr("x", p1_card_x).attr("y", p1_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle1);
-  }
-  if (relation.relationTitle2 !== void 0 && relation.relationTitle2 !== "none") {
-    const g = elem.append("g").attr("class", "cardinality");
-    g.append("text").attr("class", "type2").attr("x", p2_card_x).attr("y", p2_card_y).attr("fill", "black").attr("font-size", "6").text(relation.relationTitle2);
-  }
-  edgeCount$1++;
-};
-const drawClass = function(elem, classDef, conf2, diagObj) {
-  log$1.debug("Rendering class ", classDef, conf2);
-  const id2 = classDef.id;
-  const classInfo = {
-    id: id2,
-    label: classDef.id,
-    width: 0,
-    height: 0
-  };
-  const g = elem.append("g").attr("id", diagObj.db.lookUpDomId(id2)).attr("class", "classGroup");
-  let title2;
-  if (classDef.link) {
-    title2 = g.append("svg:a").attr("xlink:href", classDef.link).attr("target", classDef.linkTarget).append("text").attr("y", conf2.textHeight + conf2.padding).attr("x", 0);
-  } else {
-    title2 = g.append("text").attr("y", conf2.textHeight + conf2.padding).attr("x", 0);
-  }
-  let isFirst = true;
-  classDef.annotations.forEach(function(member) {
-    const titleText2 = title2.append("tspan").text("«" + member + "»");
-    if (!isFirst) {
-      titleText2.attr("dy", conf2.textHeight);
-    }
-    isFirst = false;
-  });
-  let classTitleString = classDef.id;
-  if (classDef.type !== void 0 && classDef.type !== "") {
-    classTitleString += "<" + classDef.type + ">";
-  }
-  const classTitle = title2.append("tspan").text(classTitleString).attr("class", "title");
-  if (!isFirst) {
-    classTitle.attr("dy", conf2.textHeight);
-  }
-  const titleHeight = title2.node().getBBox().height;
-  const membersLine = g.append("line").attr("x1", 0).attr("y1", conf2.padding + titleHeight + conf2.dividerMargin / 2).attr("y2", conf2.padding + titleHeight + conf2.dividerMargin / 2);
-  const members = g.append("text").attr("x", conf2.padding).attr("y", titleHeight + conf2.dividerMargin + conf2.textHeight).attr("fill", "white").attr("class", "classText");
-  isFirst = true;
-  classDef.members.forEach(function(member) {
-    addTspan(members, member, isFirst, conf2);
-    isFirst = false;
-  });
-  const membersBox = members.node().getBBox();
-  const methodsLine = g.append("line").attr("x1", 0).attr("y1", conf2.padding + titleHeight + conf2.dividerMargin + membersBox.height).attr("y2", conf2.padding + titleHeight + conf2.dividerMargin + membersBox.height);
-  const methods = g.append("text").attr("x", conf2.padding).attr("y", titleHeight + 2 * conf2.dividerMargin + membersBox.height + conf2.textHeight).attr("fill", "white").attr("class", "classText");
-  isFirst = true;
-  classDef.methods.forEach(function(method) {
-    addTspan(methods, method, isFirst, conf2);
-    isFirst = false;
-  });
-  const classBox = g.node().getBBox();
-  var cssClassStr = " ";
-  if (classDef.cssClasses.length > 0) {
-    cssClassStr = cssClassStr + classDef.cssClasses.join(" ");
-  }
-  const rect2 = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", classBox.width + 2 * conf2.padding).attr("height", classBox.height + conf2.padding + 0.5 * conf2.dividerMargin).attr("class", cssClassStr);
-  const rectWidth = rect2.node().getBBox().width;
-  title2.node().childNodes.forEach(function(x) {
-    x.setAttribute("x", (rectWidth - x.getBBox().width) / 2);
-  });
-  if (classDef.tooltip) {
-    title2.insert("title").text(classDef.tooltip);
-  }
-  membersLine.attr("x2", rectWidth);
-  methodsLine.attr("x2", rectWidth);
-  classInfo.width = rectWidth;
-  classInfo.height = classBox.height + conf2.padding + 0.5 * conf2.dividerMargin;
-  return classInfo;
-};
-const drawNote$2 = function(elem, note2, conf2, diagObj) {
-  log$1.debug("Rendering note ", note2, conf2);
-  const id2 = note2.id;
-  const noteInfo = {
-    id: id2,
-    text: note2.text,
-    width: 0,
-    height: 0
-  };
-  const g = elem.append("g").attr("id", id2).attr("class", "classGroup");
-  let text = g.append("text").attr("y", conf2.textHeight + conf2.padding).attr("x", 0);
-  const lines = JSON.parse(`"${note2.text}"`).split("\n");
-  lines.forEach(function(line2) {
-    log$1.debug(`Adding line: ${line2}`);
-    text.append("tspan").text(line2).attr("class", "title").attr("dy", conf2.textHeight);
-  });
-  const noteBox = g.node().getBBox();
-  const rect2 = g.insert("rect", ":first-child").attr("x", 0).attr("y", 0).attr("width", noteBox.width + 2 * conf2.padding).attr(
-    "height",
-    noteBox.height + lines.length * conf2.textHeight + conf2.padding + 0.5 * conf2.dividerMargin
-  );
-  const rectWidth = rect2.node().getBBox().width;
-  text.node().childNodes.forEach(function(x) {
-    x.setAttribute("x", (rectWidth - x.getBBox().width) / 2);
-  });
-  noteInfo.width = rectWidth;
-  noteInfo.height = noteBox.height + lines.length * conf2.textHeight + conf2.padding + 0.5 * conf2.dividerMargin;
-  return noteInfo;
-};
-const parseMember = function(text) {
-  const fieldRegEx = /^([#+~-])?(\w+)(~\w+~|\[])?\s+(\w+) *([$*])?$/;
-  const methodRegEx = /^([#+|~-])?(\w+) *\( *(.*)\) *([$*])? *(\w*[[\]|~]*\s*\w*~?)$/;
-  let fieldMatch = text.match(fieldRegEx);
-  let methodMatch = text.match(methodRegEx);
-  if (fieldMatch && !methodMatch) {
-    return buildFieldDisplay(fieldMatch);
-  } else if (methodMatch) {
-    return buildMethodDisplay(methodMatch);
-  } else {
-    return buildLegacyDisplay(text);
-  }
-};
-const buildFieldDisplay = function(parsedText) {
-  let cssStyle = "";
-  let displayText = "";
-  try {
-    let visibility = parsedText[1] ? parsedText[1].trim() : "";
-    let fieldType = parsedText[2] ? parsedText[2].trim() : "";
-    let genericType = parsedText[3] ? parseGenericTypes(parsedText[3].trim()) : "";
-    let fieldName = parsedText[4] ? parsedText[4].trim() : "";
-    let classifier = parsedText[5] ? parsedText[5].trim() : "";
-    displayText = visibility + fieldType + genericType + " " + fieldName;
-    cssStyle = parseClassifier(classifier);
-  } catch (err) {
-    displayText = parsedText;
-  }
-  return {
-    displayText,
-    cssStyle
-  };
-};
-const buildMethodDisplay = function(parsedText) {
-  let cssStyle = "";
-  let displayText = "";
-  try {
-    let visibility = parsedText[1] ? parsedText[1].trim() : "";
-    let methodName = parsedText[2] ? parsedText[2].trim() : "";
-    let parameters = parsedText[3] ? parseGenericTypes(parsedText[3].trim()) : "";
-    let classifier = parsedText[4] ? parsedText[4].trim() : "";
-    let returnType = parsedText[5] ? " : " + parseGenericTypes(parsedText[5]).trim() : "";
-    displayText = visibility + methodName + "(" + parameters + ")" + returnType;
-    cssStyle = parseClassifier(classifier);
-  } catch (err) {
-    displayText = parsedText;
-  }
-  return {
-    displayText,
-    cssStyle
-  };
-};
-const buildLegacyDisplay = function(text) {
-  let displayText = "";
-  let cssStyle = "";
-  let returnType = "";
-  let methodStart = text.indexOf("(");
-  let methodEnd = text.indexOf(")");
-  if (methodStart > 1 && methodEnd > methodStart && methodEnd <= text.length) {
-    let visibility = "";
-    let methodName = "";
-    let firstChar = text.substring(0, 1);
-    if (firstChar.match(/\w/)) {
-      methodName = text.substring(0, methodStart).trim();
-    } else {
-      if (firstChar.match(/[#+~-]/)) {
-        visibility = firstChar;
-      }
-      methodName = text.substring(1, methodStart).trim();
-    }
-    const parameters = text.substring(methodStart + 1, methodEnd);
-    text.substring(methodEnd + 1, 1);
-    cssStyle = parseClassifier(text.substring(methodEnd + 1, methodEnd + 2));
-    displayText = visibility + methodName + "(" + parseGenericTypes(parameters.trim()) + ")";
-    if (methodEnd < text.length) {
-      returnType = text.substring(methodEnd + 2).trim();
-      if (returnType !== "") {
-        returnType = " : " + parseGenericTypes(returnType);
-        displayText += returnType;
-      }
-    }
-  } else {
-    displayText = parseGenericTypes(text);
-  }
-  return {
-    displayText,
-    cssStyle
-  };
-};
-const addTspan = function(textEl, txt, isFirst, conf2) {
-  let member = parseMember(txt);
-  const tSpan = textEl.append("tspan").attr("x", conf2.padding).text(member.displayText);
-  if (member.cssStyle !== "") {
-    tSpan.attr("style", member.cssStyle);
-  }
-  if (!isFirst) {
-    tSpan.attr("dy", conf2.textHeight);
-  }
-};
-const parseClassifier = function(classifier) {
-  switch (classifier) {
-    case "*":
-      return "font-style:italic;";
-    case "$":
-      return "text-decoration:underline;";
-    default:
-      return "";
-  }
-};
-const svgDraw$2 = {
-  drawClass,
-  drawEdge: drawEdge$1,
-  drawNote: drawNote$2,
-  parseMember
-};
-let idCache$2 = {};
-const padding = 20;
-const getGraphId = function(label) {
-  const foundEntry = Object.entries(idCache$2).find((entry) => entry[1].label === label);
-  if (foundEntry) {
-    return foundEntry[0];
-  }
-};
-const insertMarkers$4 = function(elem) {
-  elem.append("defs").append("marker").attr("id", "extensionStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z");
-  elem.append("defs").append("marker").attr("id", "extensionEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z");
-  elem.append("defs").append("marker").attr("id", "compositionStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
-  elem.append("defs").append("marker").attr("id", "compositionEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
-  elem.append("defs").append("marker").attr("id", "aggregationStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
-  elem.append("defs").append("marker").attr("id", "aggregationEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
-  elem.append("defs").append("marker").attr("id", "dependencyStart").attr("class", "extension").attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z");
-  elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z");
-};
-const draw$d = function(text, id2, _version, diagObj) {
-  const conf2 = getConfig$1().class;
-  idCache$2 = {};
-  log$1.info("Rendering diagram " + text);
-  const securityLevel = getConfig$1().securityLevel;
-  let sandboxElement;
-  if (securityLevel === "sandbox") {
-    sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-  }
-  const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-  const diagram = root.select(`[id='${id2}']`);
-  insertMarkers$4(diagram);
-  const g = new graphlib/* Graph */.k({
-    multigraph: true
-  });
-  g.setGraph({
-    isMultiGraph: true
-  });
-  g.setDefaultEdgeLabel(function() {
-    return {};
-  });
-  const classes2 = diagObj.db.getClasses();
-  const keys2 = Object.keys(classes2);
-  for (const key of keys2) {
-    const classDef = classes2[key];
-    const node = svgDraw$2.drawClass(diagram, classDef, conf2, diagObj);
-    idCache$2[node.id] = node;
-    g.setNode(node.id, node);
-    log$1.info("Org height: " + node.height);
-  }
-  const relations2 = diagObj.db.getRelations();
-  relations2.forEach(function(relation) {
-    log$1.info(
-      "tjoho" + getGraphId(relation.id1) + getGraphId(relation.id2) + JSON.stringify(relation)
-    );
-    g.setEdge(
-      getGraphId(relation.id1),
-      getGraphId(relation.id2),
-      {
-        relation
-      },
-      relation.title || "DEFAULT"
-    );
-  });
-  const notes2 = diagObj.db.getNotes();
-  notes2.forEach(function(note2) {
-    log$1.debug(`Adding note: ${JSON.stringify(note2)}`);
-    const node = svgDraw$2.drawNote(diagram, note2, conf2, diagObj);
-    idCache$2[node.id] = node;
-    g.setNode(node.id, node);
-    if (note2.class && note2.class in classes2) {
-      g.setEdge(
-        note2.id,
-        getGraphId(note2.class),
-        {
-          relation: {
-            id1: note2.id,
-            id2: note2.class,
-            relation: {
-              type1: "none",
-              type2: "none",
-              lineType: 10
-            }
-          }
-        },
-        "DEFAULT"
-      );
-    }
-  });
-  (0,dagre/* layout */.bK)(g);
-  g.nodes().forEach(function(v) {
-    if (v !== void 0 && g.node(v) !== void 0) {
-      log$1.debug("Node " + v + ": " + JSON.stringify(g.node(v)));
-      root.select("#" + (diagObj.db.lookUpDomId(v) || v)).attr(
-        "transform",
-        "translate(" + (g.node(v).x - g.node(v).width / 2) + "," + (g.node(v).y - g.node(v).height / 2) + " )"
-      );
-    }
-  });
-  g.edges().forEach(function(e) {
-    if (e !== void 0 && g.edge(e) !== void 0) {
-      log$1.debug("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(g.edge(e)));
-      svgDraw$2.drawEdge(diagram, g.edge(e), g.edge(e).relation, conf2, diagObj);
-    }
-  });
-  const svgBounds = diagram.node().getBBox();
-  const width2 = svgBounds.width + padding * 2;
-  const height2 = svgBounds.height + padding * 2;
-  configureSvgSize(diagram, height2, width2, conf2.useMaxWidth);
-  const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${width2} ${height2}`;
-  log$1.debug(`viewBox ${vBox}`);
-  diagram.attr("viewBox", vBox);
-};
-const classRenderer = {
-  draw: draw$d
-};
-const insertMarkers$2 = (elem, markerArray, type2, id2) => {
-  markerArray.forEach((markerName) => {
-    markers$1[markerName](elem, type2, id2);
-  });
-};
-const extension = (elem, type2, id2) => {
-  log$1.trace("Making markers for ", id2);
-  elem.append("defs").append("marker").attr("id", type2 + "-extensionStart").attr("class", "marker extension " + type2).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 1,7 L18,13 V 1 Z");
-  elem.append("defs").append("marker").attr("id", type2 + "-extensionEnd").attr("class", "marker extension " + type2).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 1,1 V 13 L18,7 Z");
-};
-const composition = (elem, type2) => {
-  elem.append("defs").append("marker").attr("id", type2 + "-compositionStart").attr("class", "marker composition " + type2).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
-  elem.append("defs").append("marker").attr("id", type2 + "-compositionEnd").attr("class", "marker composition " + type2).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
-};
-const aggregation = (elem, type2) => {
-  elem.append("defs").append("marker").attr("id", type2 + "-aggregationStart").attr("class", "marker aggregation " + type2).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
-  elem.append("defs").append("marker").attr("id", type2 + "-aggregationEnd").attr("class", "marker aggregation " + type2).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L1,7 L9,1 Z");
-};
-const dependency = (elem, type2) => {
-  elem.append("defs").append("marker").attr("id", type2 + "-dependencyStart").attr("class", "marker dependency " + type2).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("path").attr("d", "M 5,7 L9,13 L1,7 L9,1 Z");
-  elem.append("defs").append("marker").attr("id", type2 + "-dependencyEnd").attr("class", "marker dependency " + type2).attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z");
-};
-const lollipop = (elem, type2) => {
-  elem.append("defs").append("marker").attr("id", type2 + "-lollipopStart").attr("class", "marker lollipop " + type2).attr("refX", 0).attr("refY", 7).attr("markerWidth", 190).attr("markerHeight", 240).attr("orient", "auto").append("circle").attr("stroke", "black").attr("fill", "white").attr("cx", 6).attr("cy", 7).attr("r", 6);
-};
-const point = (elem, type2) => {
-  elem.append("marker").attr("id", type2 + "-pointEnd").attr("class", "marker " + type2).attr("viewBox", "0 0 12 20").attr("refX", 10).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
-  elem.append("marker").attr("id", type2 + "-pointStart").attr("class", "marker " + type2).attr("viewBox", "0 0 10 10").attr("refX", 0).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 5 L 10 10 L 10 0 z").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
-};
-const circle$1 = (elem, type2) => {
-  elem.append("marker").attr("id", type2 + "-circleEnd").attr("class", "marker " + type2).attr("viewBox", "0 0 10 10").attr("refX", 11).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
-  elem.append("marker").attr("id", type2 + "-circleStart").attr("class", "marker " + type2).attr("viewBox", "0 0 10 10").attr("refX", -1).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("circle").attr("cx", "5").attr("cy", "5").attr("r", "5").attr("class", "arrowMarkerPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
-};
-const cross = (elem, type2) => {
-  elem.append("marker").attr("id", type2 + "-crossEnd").attr("class", "marker cross " + type2).attr("viewBox", "0 0 11 11").attr("refX", 12).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0");
-  elem.append("marker").attr("id", type2 + "-crossStart").attr("class", "marker cross " + type2).attr("viewBox", "0 0 11 11").attr("refX", -1).attr("refY", 5.2).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 11).attr("markerHeight", 11).attr("orient", "auto").append("path").attr("d", "M 1,1 l 9,9 M 10,1 l -9,9").attr("class", "arrowMarkerPath").style("stroke-width", 2).style("stroke-dasharray", "1,0");
-};
-const barb = (elem, type2) => {
-  elem.append("defs").append("marker").attr("id", type2 + "-barbEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 14).attr("markerUnits", "strokeWidth").attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z");
-};
-const markers$1 = {
-  extension,
-  composition,
-  aggregation,
-  dependency,
-  lollipop,
-  point,
-  circle: circle$1,
-  cross,
-  barb
-};
-const insertMarkers$3 = insertMarkers$2;
-function applyStyle(dom, styleFn) {
-  if (styleFn) {
-    dom.attr("style", styleFn);
-  }
-}
-function addHtmlLabel(node) {
-  const fo = (0,src/* select */.Ys)(document.createElementNS("http://www.w3.org/2000/svg", "foreignObject"));
-  const div = fo.append("xhtml:div");
-  const label = node.label;
-  const labelClass = node.isNode ? "nodeLabel" : "edgeLabel";
-  div.html(
-    '<span class="' + labelClass + '" ' + (node.labelStyle ? 'style="' + node.labelStyle + '"' : "") + ">" + label + "</span>"
-  );
-  applyStyle(div, node.labelStyle);
-  div.style("display", "inline-block");
-  div.style("white-space", "nowrap");
-  div.attr("xmlns", "http://www.w3.org/1999/xhtml");
-  return fo.node();
-}
-const createLabel = (_vertexText, style, isTitle, isNode) => {
-  let vertexText = _vertexText || "";
-  if (typeof vertexText === "object") {
-    vertexText = vertexText[0];
-  }
-  if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-    vertexText = vertexText.replace(/\\n|\n/g, "<br />");
-    log$1.info("vertexText" + vertexText);
-    const node = {
-      isNode,
-      label: decodeEntities(vertexText).replace(
-        /fa[blrs]?:fa-[\w-]+/g,
-        (s) => `<i class='${s.replace(":", " ")}'></i>`
-      ),
-      labelStyle: style.replace("fill:", "color:")
-    };
-    let vertexNode = addHtmlLabel(node);
-    return vertexNode;
-  } else {
-    const svgLabel = document.createElementNS("http://www.w3.org/2000/svg", "text");
-    svgLabel.setAttribute("style", style.replace("color:", "fill:"));
-    let rows = [];
-    if (typeof vertexText === "string") {
-      rows = vertexText.split(/\\n|\n|<br\s*\/?>/gi);
-    } else if (Array.isArray(vertexText)) {
-      rows = vertexText;
-    } else {
-      rows = [];
-    }
-    for (const row of rows) {
-      const tspan = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
-      tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve");
-      tspan.setAttribute("dy", "1em");
-      tspan.setAttribute("x", "0");
-      if (isTitle) {
-        tspan.setAttribute("class", "title-row");
-      } else {
-        tspan.setAttribute("class", "row");
-      }
-      tspan.textContent = row.trim();
-      svgLabel.appendChild(tspan);
-    }
-    return svgLabel;
-  }
-};
-const createLabel$1 = createLabel;
-const labelHelper = (parent, node, _classes, isNode) => {
-  let classes2;
-  if (!_classes) {
-    classes2 = "node default";
-  } else {
-    classes2 = _classes;
-  }
-  const shapeSvg = parent.insert("g").attr("class", classes2).attr("id", node.domId || node.id);
-  const label = shapeSvg.insert("g").attr("class", "label").attr("style", node.labelStyle);
-  let labelText;
-  if (node.labelText === void 0) {
-    labelText = "";
-  } else {
-    labelText = typeof node.labelText === "string" ? node.labelText : node.labelText[0];
-  }
-  const text = label.node().appendChild(
-    createLabel$1(
-      sanitizeText$5(decodeEntities(labelText), getConfig$1()),
-      node.labelStyle,
-      false,
-      isNode
-    )
-  );
-  let bbox = text.getBBox();
-  if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-    const div = text.children[0];
-    const dv = (0,src/* select */.Ys)(text);
-    bbox = div.getBoundingClientRect();
-    dv.attr("width", bbox.width);
-    dv.attr("height", bbox.height);
-  }
-  const halfPadding = node.padding / 2;
-  label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")");
-  return { shapeSvg, bbox, halfPadding, label };
-};
-const updateNodeBounds = (node, element) => {
-  const bbox = element.node().getBBox();
-  node.width = bbox.width;
-  node.height = bbox.height;
-};
-function insertPolygonShape$1(parent, w2, h, points) {
-  return parent.insert("polygon", ":first-child").attr(
-    "points",
-    points.map(function(d) {
-      return d.x + "," + d.y;
-    }).join(" ")
-  ).attr("class", "label-container").attr("transform", "translate(" + -w2 / 2 + "," + h / 2 + ")");
-}
-let clusterDb = {};
-let descendants = {};
-let parents = {};
-const clear$b = () => {
-  descendants = {};
-  parents = {};
-  clusterDb = {};
-};
-const isDescendant = (id2, ancenstorId) => {
-  log$1.trace("In isDecendant", ancenstorId, " ", id2, " = ", descendants[ancenstorId].includes(id2));
-  if (descendants[ancenstorId].includes(id2)) {
-    return true;
-  }
-  return false;
-};
-const edgeInCluster = (edge, clusterId) => {
-  log$1.info("Decendants of ", clusterId, " is ", descendants[clusterId]);
-  log$1.info("Edge is ", edge);
-  if (edge.v === clusterId) {
-    return false;
-  }
-  if (edge.w === clusterId) {
-    return false;
-  }
-  if (!descendants[clusterId]) {
-    log$1.debug("Tilt, ", clusterId, ",not in decendants");
-    return false;
-  }
-  return descendants[clusterId].includes(edge.v) || isDescendant(edge.v, clusterId) || isDescendant(edge.w, clusterId) || descendants[clusterId].includes(edge.w);
-};
-const copy = (clusterId, graph, newGraph, rootId) => {
-  log$1.warn(
-    "Copying children of ",
-    clusterId,
-    "root",
-    rootId,
-    "data",
-    graph.node(clusterId),
-    rootId
-  );
-  const nodes = graph.children(clusterId) || [];
-  if (clusterId !== rootId) {
-    nodes.push(clusterId);
-  }
-  log$1.warn("Copying (nodes) clusterId", clusterId, "nodes", nodes);
-  nodes.forEach((node) => {
-    if (graph.children(node).length > 0) {
-      copy(node, graph, newGraph, rootId);
-    } else {
-      const data = graph.node(node);
-      log$1.info("cp ", node, " to ", rootId, " with parent ", clusterId);
-      newGraph.setNode(node, data);
-      if (rootId !== graph.parent(node)) {
-        log$1.warn("Setting parent", node, graph.parent(node));
-        newGraph.setParent(node, graph.parent(node));
-      }
-      if (clusterId !== rootId && node !== clusterId) {
-        log$1.debug("Setting parent", node, clusterId);
-        newGraph.setParent(node, clusterId);
-      } else {
-        log$1.info("In copy ", clusterId, "root", rootId, "data", graph.node(clusterId), rootId);
-        log$1.debug(
-          "Not Setting parent for node=",
-          node,
-          "cluster!==rootId",
-          clusterId !== rootId,
-          "node!==clusterId",
-          node !== clusterId
-        );
-      }
-      const edges2 = graph.edges(node);
-      log$1.debug("Copying Edges", edges2);
-      edges2.forEach((edge) => {
-        log$1.info("Edge", edge);
-        const data2 = graph.edge(edge.v, edge.w, edge.name);
-        log$1.info("Edge data", data2, rootId);
-        try {
-          if (edgeInCluster(edge, rootId)) {
-            log$1.info("Copying as ", edge.v, edge.w, data2, edge.name);
-            newGraph.setEdge(edge.v, edge.w, data2, edge.name);
-            log$1.info("newGraph edges ", newGraph.edges(), newGraph.edge(newGraph.edges()[0]));
-          } else {
-            log$1.info(
-              "Skipping copy of edge ",
-              edge.v,
-              "-->",
-              edge.w,
-              " rootId: ",
-              rootId,
-              " clusterId:",
-              clusterId
-            );
-          }
-        } catch (e) {
-          log$1.error(e);
-        }
-      });
-    }
-    log$1.debug("Removing node", node);
-    graph.removeNode(node);
-  });
-};
-const extractDescendants = (id2, graph) => {
-  const children = graph.children(id2);
-  let res = [...children];
-  for (const child of children) {
-    parents[child] = id2;
-    res = [...res, ...extractDescendants(child, graph)];
-  }
-  return res;
-};
-const findNonClusterChild = (id2, graph) => {
-  log$1.trace("Searching", id2);
-  const children = graph.children(id2);
-  log$1.trace("Searching children of id ", id2, children);
-  if (children.length < 1) {
-    log$1.trace("This is a valid node", id2);
-    return id2;
-  }
-  for (const child of children) {
-    const _id = findNonClusterChild(child, graph);
-    if (_id) {
-      log$1.trace("Found replacement for", id2, " => ", _id);
-      return _id;
-    }
-  }
-};
-const getAnchorId = (id2) => {
-  if (!clusterDb[id2]) {
-    return id2;
-  }
-  if (!clusterDb[id2].externalConnections) {
-    return id2;
-  }
-  if (clusterDb[id2]) {
-    return clusterDb[id2].id;
-  }
-  return id2;
-};
-const adjustClustersAndEdges = (graph, depth) => {
-  if (!graph || depth > 10) {
-    log$1.debug("Opting out, no graph ");
-    return;
-  } else {
-    log$1.debug("Opting in, graph ");
-  }
-  graph.nodes().forEach(function(id2) {
-    const children = graph.children(id2);
-    if (children.length > 0) {
-      log$1.warn(
-        "Cluster identified",
-        id2,
-        " Replacement id in edges: ",
-        findNonClusterChild(id2, graph)
-      );
-      descendants[id2] = extractDescendants(id2, graph);
-      clusterDb[id2] = { id: findNonClusterChild(id2, graph), clusterData: graph.node(id2) };
-    }
-  });
-  graph.nodes().forEach(function(id2) {
-    const children = graph.children(id2);
-    const edges2 = graph.edges();
-    if (children.length > 0) {
-      log$1.debug("Cluster identified", id2, descendants);
-      edges2.forEach((edge) => {
-        if (edge.v !== id2 && edge.w !== id2) {
-          const d1 = isDescendant(edge.v, id2);
-          const d2 = isDescendant(edge.w, id2);
-          if (d1 ^ d2) {
-            log$1.warn("Edge: ", edge, " leaves cluster ", id2);
-            log$1.warn("Decendants of XXX ", id2, ": ", descendants[id2]);
-            clusterDb[id2].externalConnections = true;
-          }
-        }
-      });
-    } else {
-      log$1.debug("Not a cluster ", id2, descendants);
-    }
-  });
-  graph.edges().forEach(function(e) {
-    const edge = graph.edge(e);
-    log$1.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e));
-    log$1.warn("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e)));
-    let v = e.v;
-    let w2 = e.w;
-    log$1.warn(
-      "Fix XXX",
-      clusterDb,
-      "ids:",
-      e.v,
-      e.w,
-      "Translating: ",
-      clusterDb[e.v],
-      " --- ",
-      clusterDb[e.w]
-    );
-    if (clusterDb[e.v] && clusterDb[e.w] && clusterDb[e.v] === clusterDb[e.w]) {
-      log$1.warn("Fixing and trixing link to self - removing XXX", e.v, e.w, e.name);
-      log$1.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name);
-      v = getAnchorId(e.v);
-      w2 = getAnchorId(e.w);
-      graph.removeEdge(e.v, e.w, e.name);
-      const specialId = e.w + "---" + e.v;
-      graph.setNode(specialId, {
-        domId: specialId,
-        id: specialId,
-        labelStyle: "",
-        labelText: edge.label,
-        padding: 0,
-        shape: "labelRect",
-        style: ""
-      });
-      const edge1 = JSON.parse(JSON.stringify(edge));
-      const edge2 = JSON.parse(JSON.stringify(edge));
-      edge1.label = "";
-      edge1.arrowTypeEnd = "none";
-      edge2.label = "";
-      edge1.fromCluster = e.v;
-      edge2.toCluster = e.v;
-      graph.setEdge(v, specialId, edge1, e.name + "-cyclic-special");
-      graph.setEdge(specialId, w2, edge2, e.name + "-cyclic-special");
-    } else if (clusterDb[e.v] || clusterDb[e.w]) {
-      log$1.warn("Fixing and trixing - removing XXX", e.v, e.w, e.name);
-      v = getAnchorId(e.v);
-      w2 = getAnchorId(e.w);
-      graph.removeEdge(e.v, e.w, e.name);
-      if (v !== e.v) {
-        edge.fromCluster = e.v;
-      }
-      if (w2 !== e.w) {
-        edge.toCluster = e.w;
-      }
-      log$1.warn("Fix Replacing with XXX", v, w2, e.name);
-      graph.setEdge(v, w2, edge, e.name);
-    }
-  });
-  log$1.warn("Adjusted Graph", json/* write */.c(graph));
-  extractor(graph, 0);
-  log$1.trace(clusterDb);
-};
-const extractor = (graph, depth) => {
-  log$1.warn("extractor - ", depth, json/* write */.c(graph), graph.children("D"));
-  if (depth > 10) {
-    log$1.error("Bailing out");
-    return;
-  }
-  let nodes = graph.nodes();
-  let hasChildren = false;
-  for (const node of nodes) {
-    const children = graph.children(node);
-    hasChildren = hasChildren || children.length > 0;
-  }
-  if (!hasChildren) {
-    log$1.debug("Done, no node has children", graph.nodes());
-    return;
-  }
-  log$1.debug("Nodes = ", nodes, depth);
-  for (const node of nodes) {
-    log$1.debug(
-      "Extracting node",
-      node,
-      clusterDb,
-      clusterDb[node] && !clusterDb[node].externalConnections,
-      !graph.parent(node),
-      graph.node(node),
-      graph.children("D"),
-      " Depth ",
-      depth
-    );
-    if (!clusterDb[node]) {
-      log$1.debug("Not a cluster", node, depth);
-    } else if (!clusterDb[node].externalConnections && // !graph.parent(node) &&
-    graph.children(node) && graph.children(node).length > 0) {
-      log$1.warn(
-        "Cluster without external connections, without a parent and with children",
-        node,
-        depth
-      );
-      const graphSettings = graph.graph();
-      let dir = graphSettings.rankdir === "TB" ? "LR" : "TB";
-      if (clusterDb[node] && clusterDb[node].clusterData && clusterDb[node].clusterData.dir) {
-        dir = clusterDb[node].clusterData.dir;
-        log$1.warn("Fixing dir", clusterDb[node].clusterData.dir, dir);
-      }
-      const clusterGraph = new graphlib/* Graph */.k({
-        multigraph: true,
-        compound: true
-      }).setGraph({
-        rankdir: dir,
-        // Todo: set proper spacing
-        nodesep: 50,
-        ranksep: 50,
-        marginx: 8,
-        marginy: 8
-      }).setDefaultEdgeLabel(function() {
-        return {};
-      });
-      log$1.warn("Old graph before copy", json/* write */.c(graph));
-      copy(node, graph, clusterGraph, node);
-      graph.setNode(node, {
-        clusterNode: true,
-        id: node,
-        clusterData: clusterDb[node].clusterData,
-        labelText: clusterDb[node].labelText,
-        graph: clusterGraph
-      });
-      log$1.warn("New graph after copy node: (", node, ")", json/* write */.c(clusterGraph));
-      log$1.debug("Old graph after copy", json/* write */.c(graph));
-    } else {
-      log$1.warn(
-        "Cluster ** ",
-        node,
-        " **not meeting the criteria !externalConnections:",
-        !clusterDb[node].externalConnections,
-        " no parent: ",
-        !graph.parent(node),
-        " children ",
-        graph.children(node) && graph.children(node).length > 0,
-        graph.children("D"),
-        depth
-      );
-      log$1.debug(clusterDb);
-    }
-  }
-  nodes = graph.nodes();
-  log$1.warn("New list of nodes", nodes);
-  for (const node of nodes) {
-    const data = graph.node(node);
-    log$1.warn(" Now next level", node, data);
-    if (data.clusterNode) {
-      extractor(data.graph, depth + 1);
-    }
-  }
-};
-const sorter = (graph, nodes) => {
-  if (nodes.length === 0) {
-    return [];
-  }
-  let result = Object.assign(nodes);
-  nodes.forEach((node) => {
-    const children = graph.children(node);
-    const sorted = sorter(graph, children);
-    result = [...result, ...sorted];
-  });
-  return result;
-};
-const sortNodesByHierarchy = (graph) => sorter(graph, graph.children());
-function intersectNode(node, point2) {
-  return node.intersect(point2);
-}
-function intersectEllipse(node, rx, ry, point2) {
-  var cx = node.x;
-  var cy = node.y;
-  var px = cx - point2.x;
-  var py = cy - point2.y;
-  var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);
-  var dx = Math.abs(rx * ry * px / det);
-  if (point2.x < cx) {
-    dx = -dx;
-  }
-  var dy = Math.abs(rx * ry * py / det);
-  if (point2.y < cy) {
-    dy = -dy;
-  }
-  return { x: cx + dx, y: cy + dy };
-}
-function intersectCircle(node, rx, point2) {
-  return intersectEllipse(node, rx, rx, point2);
-}
-function intersectLine(p1, p2, q1, q2) {
-  var a1, a2, b1, b2, c1, c2;
-  var r1, r2, r3, r4;
-  var denom, offset, num;
-  var x, y;
-  a1 = p2.y - p1.y;
-  b1 = p1.x - p2.x;
-  c1 = p2.x * p1.y - p1.x * p2.y;
-  r3 = a1 * q1.x + b1 * q1.y + c1;
-  r4 = a1 * q2.x + b1 * q2.y + c1;
-  if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {
-    return;
-  }
-  a2 = q2.y - q1.y;
-  b2 = q1.x - q2.x;
-  c2 = q2.x * q1.y - q1.x * q2.y;
-  r1 = a2 * p1.x + b2 * p1.y + c2;
-  r2 = a2 * p2.x + b2 * p2.y + c2;
-  if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) {
-    return;
-  }
-  denom = a1 * b2 - a2 * b1;
-  if (denom === 0) {
-    return;
-  }
-  offset = Math.abs(denom / 2);
-  num = b1 * c2 - b2 * c1;
-  x = num < 0 ? (num - offset) / denom : (num + offset) / denom;
-  num = a2 * c1 - a1 * c2;
-  y = num < 0 ? (num - offset) / denom : (num + offset) / denom;
-  return { x, y };
-}
-function sameSign(r1, r2) {
-  return r1 * r2 > 0;
-}
-function intersectPolygon(node, polyPoints, point2) {
-  var x1 = node.x;
-  var y1 = node.y;
-  var intersections = [];
-  var minX = Number.POSITIVE_INFINITY;
-  var minY = Number.POSITIVE_INFINITY;
-  if (typeof polyPoints.forEach === "function") {
-    polyPoints.forEach(function(entry) {
-      minX = Math.min(minX, entry.x);
-      minY = Math.min(minY, entry.y);
-    });
-  } else {
-    minX = Math.min(minX, polyPoints.x);
-    minY = Math.min(minY, polyPoints.y);
-  }
-  var left = x1 - node.width / 2 - minX;
-  var top = y1 - node.height / 2 - minY;
-  for (var i = 0; i < polyPoints.length; i++) {
-    var p1 = polyPoints[i];
-    var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];
-    var intersect2 = intersectLine(
-      node,
-      point2,
-      { x: left + p1.x, y: top + p1.y },
-      { x: left + p2.x, y: top + p2.y }
-    );
-    if (intersect2) {
-      intersections.push(intersect2);
-    }
-  }
-  if (!intersections.length) {
-    return node;
-  }
-  if (intersections.length > 1) {
-    intersections.sort(function(p, q) {
-      var pdx = p.x - point2.x;
-      var pdy = p.y - point2.y;
-      var distp = Math.sqrt(pdx * pdx + pdy * pdy);
-      var qdx = q.x - point2.x;
-      var qdy = q.y - point2.y;
-      var distq = Math.sqrt(qdx * qdx + qdy * qdy);
-      return distp < distq ? -1 : distp === distq ? 0 : 1;
-    });
-  }
-  return intersections[0];
-}
-const intersectRect = (node, point2) => {
-  var x = node.x;
-  var y = node.y;
-  var dx = point2.x - x;
-  var dy = point2.y - y;
-  var w2 = node.width / 2;
-  var h = node.height / 2;
-  var sx, sy;
-  if (Math.abs(dy) * w2 > Math.abs(dx) * h) {
-    if (dy < 0) {
-      h = -h;
-    }
-    sx = dy === 0 ? 0 : h * dx / dy;
-    sy = h;
-  } else {
-    if (dx < 0) {
-      w2 = -w2;
-    }
-    sx = w2;
-    sy = dx === 0 ? 0 : w2 * dy / dx;
-  }
-  return { x: x + sx, y: y + sy };
-};
-const intersectRect$1 = intersectRect;
-const intersect = {
-  node: intersectNode,
-  circle: intersectCircle,
-  ellipse: intersectEllipse,
-  polygon: intersectPolygon,
-  rect: intersectRect$1
-};
-const note = (parent, node) => {
-  const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, "node " + node.classes, true);
-  log$1.info("Classes = ", node.classes);
-  const rect2 = shapeSvg.insert("rect", ":first-child");
-  rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding);
-  updateNodeBounds(node, rect2);
-  node.intersect = function(point2) {
-    return intersect.rect(node, point2);
-  };
-  return shapeSvg;
-};
-const note$1 = note;
-const question$1 = (parent, node) => {
-  const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true);
-  const w2 = bbox.width + node.padding;
-  const h = bbox.height + node.padding;
-  const s = w2 + h;
-  const points = [
-    { x: s / 2, y: 0 },
-    { x: s, y: -s / 2 },
-    { x: s / 2, y: -s },
-    { x: 0, y: -s / 2 }
-  ];
-  log$1.info("Question main (Circle)");
-  const questionElem = insertPolygonShape$1(shapeSvg, s, s, points);
-  questionElem.attr("style", node.style);
-  updateNodeBounds(node, questionElem);
-  node.intersect = function(point2) {
-    log$1.warn("Intersect called");
-    return intersect.polygon(node, points, point2);
-  };
-  return shapeSvg;
-};
-const choice = (parent, node) => {
-  const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id);
-  const s = 28;
-  const points = [
-    { x: 0, y: s / 2 },
-    { x: s / 2, y: 0 },
-    { x: 0, y: -s / 2 },
-    { x: -s / 2, y: 0 }
-  ];
-  const choice2 = shapeSvg.insert("polygon", ":first-child").attr(
-    "points",
-    points.map(function(d) {
-      return d.x + "," + d.y;
-    }).join(" ")
-  );
-  choice2.attr("class", "state-start").attr("r", 7).attr("width", 28).attr("height", 28);
-  node.width = 28;
-  node.height = 28;
-  node.intersect = function(point2) {
-    return intersect.circle(node, 14, point2);
-  };
-  return shapeSvg;
-};
-const hexagon$1 = (parent, node) => {
-  const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true);
-  const f = 4;
-  const h = bbox.height + node.padding;
-  const m = h / f;
-  const w2 = bbox.width + 2 * m + node.padding;
-  const points = [
-    { x: m, y: 0 },
-    { x: w2 - m, y: 0 },
-    { x: w2, y: -h / 2 },
-    { x: w2 - m, y: -h },
-    { x: m, y: -h },
-    { x: 0, y: -h / 2 }
-  ];
-  const hex = insertPolygonShape$1(shapeSvg, w2, h, points);
-  hex.attr("style", node.style);
-  updateNodeBounds(node, hex);
-  node.intersect = function(point2) {
-    return intersect.polygon(node, points, point2);
-  };
-  return shapeSvg;
-};
-const rect_left_inv_arrow$1 = (parent, node) => {
-  const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true);
-  const w2 = bbox.width + node.padding;
-  const h = bbox.height + node.padding;
-  const points = [
-    { x: -h / 2, y: 0 },
-    { x: w2, y: 0 },
-    { x: w2, y: -h },
-    { x: -h / 2, y: -h },
-    { x: 0, y: -h / 2 }
-  ];
-  const el = insertPolygonShape$1(shapeSvg, w2, h, points);
-  el.attr("style", node.style);
-  node.width = w2 + h;
-  node.height = h;
-  node.intersect = function(point2) {
-    return intersect.polygon(node, points, point2);
-  };
-  return shapeSvg;
-};
-const lean_right$1 = (parent, node) => {
-  const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true);
-  const w2 = bbox.width + node.padding;
-  const h = bbox.height + node.padding;
-  const points = [
-    { x: -2 * h / 6, y: 0 },
-    { x: w2 - h / 6, y: 0 },
-    { x: w2 + 2 * h / 6, y: -h },
-    { x: h / 6, y: -h }
-  ];
-  const el = insertPolygonShape$1(shapeSvg, w2, h, points);
-  el.attr("style", node.style);
-  updateNodeBounds(node, el);
-  node.intersect = function(point2) {
-    return intersect.polygon(node, points, point2);
-  };
-  return shapeSvg;
-};
-const lean_left$1 = (parent, node) => {
-  const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true);
-  const w2 = bbox.width + node.padding;
-  const h = bbox.height + node.padding;
-  const points = [
-    { x: 2 * h / 6, y: 0 },
-    { x: w2 + h / 6, y: 0 },
-    { x: w2 - 2 * h / 6, y: -h },
-    { x: -h / 6, y: -h }
-  ];
-  const el = insertPolygonShape$1(shapeSvg, w2, h, points);
-  el.attr("style", node.style);
-  updateNodeBounds(node, el);
-  node.intersect = function(point2) {
-    return intersect.polygon(node, points, point2);
-  };
-  return shapeSvg;
-};
-const trapezoid$1 = (parent, node) => {
-  const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true);
-  const w2 = bbox.width + node.padding;
-  const h = bbox.height + node.padding;
-  const points = [
-    { x: -2 * h / 6, y: 0 },
-    { x: w2 + 2 * h / 6, y: 0 },
-    { x: w2 - h / 6, y: -h },
-    { x: h / 6, y: -h }
-  ];
-  const el = insertPolygonShape$1(shapeSvg, w2, h, points);
-  el.attr("style", node.style);
-  updateNodeBounds(node, el);
-  node.intersect = function(point2) {
-    return intersect.polygon(node, points, point2);
-  };
-  return shapeSvg;
-};
-const inv_trapezoid$1 = (parent, node) => {
-  const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true);
-  const w2 = bbox.width + node.padding;
-  const h = bbox.height + node.padding;
-  const points = [
-    { x: h / 6, y: 0 },
-    { x: w2 - h / 6, y: 0 },
-    { x: w2 + 2 * h / 6, y: -h },
-    { x: -2 * h / 6, y: -h }
-  ];
-  const el = insertPolygonShape$1(shapeSvg, w2, h, points);
-  el.attr("style", node.style);
-  updateNodeBounds(node, el);
-  node.intersect = function(point2) {
-    return intersect.polygon(node, points, point2);
-  };
-  return shapeSvg;
-};
-const rect_right_inv_arrow$1 = (parent, node) => {
-  const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true);
-  const w2 = bbox.width + node.padding;
-  const h = bbox.height + node.padding;
-  const points = [
-    { x: 0, y: 0 },
-    { x: w2 + h / 2, y: 0 },
-    { x: w2, y: -h / 2 },
-    { x: w2 + h / 2, y: -h },
-    { x: 0, y: -h }
-  ];
-  const el = insertPolygonShape$1(shapeSvg, w2, h, points);
-  el.attr("style", node.style);
-  updateNodeBounds(node, el);
-  node.intersect = function(point2) {
-    return intersect.polygon(node, points, point2);
-  };
-  return shapeSvg;
-};
-const cylinder$1 = (parent, node) => {
-  const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true);
-  const w2 = bbox.width + node.padding;
-  const rx = w2 / 2;
-  const ry = rx / (2.5 + w2 / 50);
-  const h = bbox.height + ry + node.padding;
-  const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w2 + " 0 a " + rx + "," + ry + " 0,0,0 " + -w2 + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w2 + " 0 l 0," + -h;
-  const el = shapeSvg.attr("label-offset-y", ry).insert("path", ":first-child").attr("style", node.style).attr("d", shape).attr("transform", "translate(" + -w2 / 2 + "," + -(h / 2 + ry) + ")");
-  updateNodeBounds(node, el);
-  node.intersect = function(point2) {
-    const pos = intersect.rect(node, point2);
-    const x = pos.x - node.x;
-    if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) {
-      let y = ry * ry * (1 - x * x / (rx * rx));
-      if (y != 0) {
-        y = Math.sqrt(y);
-      }
-      y = ry - y;
-      if (point2.y - node.y > 0) {
-        y = -y;
-      }
-      pos.y += y;
-    }
-    return pos;
-  };
-  return shapeSvg;
-};
-const rect$1 = (parent, node) => {
-  const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, "node " + node.classes, true);
-  log$1.trace("Classes = ", node.classes);
-  const rect2 = shapeSvg.insert("rect", ":first-child");
-  const totalWidth = bbox.width + node.padding;
-  const totalHeight = bbox.height + node.padding;
-  rect2.attr("class", "basic label-container").attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", totalWidth).attr("height", totalHeight);
-  if (node.props) {
-    const propKeys = new Set(Object.keys(node.props));
-    if (node.props.borders) {
-      applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);
-      propKeys.delete("borders");
-    }
-    propKeys.forEach((propKey) => {
-      log$1.warn(`Unknown node property ${propKey}`);
-    });
-  }
-  updateNodeBounds(node, rect2);
-  node.intersect = function(point2) {
-    return intersect.rect(node, point2);
-  };
-  return shapeSvg;
-};
-const labelRect = (parent, node) => {
-  const { shapeSvg } = labelHelper(parent, node, "label", true);
-  log$1.trace("Classes = ", node.classes);
-  const rect2 = shapeSvg.insert("rect", ":first-child");
-  const totalWidth = 0;
-  const totalHeight = 0;
-  rect2.attr("width", totalWidth).attr("height", totalHeight);
-  shapeSvg.attr("class", "label edgeLabel");
-  if (node.props) {
-    const propKeys = new Set(Object.keys(node.props));
-    if (node.props.borders) {
-      applyNodePropertyBorders(rect2, node.props.borders, totalWidth, totalHeight);
-      propKeys.delete("borders");
-    }
-    propKeys.forEach((propKey) => {
-      log$1.warn(`Unknown node property ${propKey}`);
-    });
-  }
-  updateNodeBounds(node, rect2);
-  node.intersect = function(point2) {
-    return intersect.rect(node, point2);
-  };
-  return shapeSvg;
-};
-function applyNodePropertyBorders(rect2, borders, totalWidth, totalHeight) {
-  const strokeDashArray = [];
-  const addBorder = (length) => {
-    strokeDashArray.push(length, 0);
-  };
-  const skipBorder = (length) => {
-    strokeDashArray.push(0, length);
-  };
-  if (borders.includes("t")) {
-    log$1.debug("add top border");
-    addBorder(totalWidth);
-  } else {
-    skipBorder(totalWidth);
-  }
-  if (borders.includes("r")) {
-    log$1.debug("add right border");
-    addBorder(totalHeight);
-  } else {
-    skipBorder(totalHeight);
-  }
-  if (borders.includes("b")) {
-    log$1.debug("add bottom border");
-    addBorder(totalWidth);
-  } else {
-    skipBorder(totalWidth);
-  }
-  if (borders.includes("l")) {
-    log$1.debug("add left border");
-    addBorder(totalHeight);
-  } else {
-    skipBorder(totalHeight);
-  }
-  rect2.attr("stroke-dasharray", strokeDashArray.join(" "));
-}
-const rectWithTitle = (parent, node) => {
-  let classes2;
-  if (!node.classes) {
-    classes2 = "node default";
-  } else {
-    classes2 = "node " + node.classes;
-  }
-  const shapeSvg = parent.insert("g").attr("class", classes2).attr("id", node.domId || node.id);
-  const rect2 = shapeSvg.insert("rect", ":first-child");
-  const innerLine = shapeSvg.insert("line");
-  const label = shapeSvg.insert("g").attr("class", "label");
-  const text2 = node.labelText.flat ? node.labelText.flat() : node.labelText;
-  let title2 = "";
-  if (typeof text2 === "object") {
-    title2 = text2[0];
-  } else {
-    title2 = text2;
-  }
-  log$1.info("Label text abc79", title2, text2, typeof text2 === "object");
-  const text = label.node().appendChild(createLabel$1(title2, node.labelStyle, true, true));
-  let bbox = { width: 0, height: 0 };
-  if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-    const div = text.children[0];
-    const dv = (0,src/* select */.Ys)(text);
-    bbox = div.getBoundingClientRect();
-    dv.attr("width", bbox.width);
-    dv.attr("height", bbox.height);
-  }
-  log$1.info("Text 2", text2);
-  const textRows = text2.slice(1, text2.length);
-  let titleBox = text.getBBox();
-  const descr = label.node().appendChild(
-    createLabel$1(textRows.join ? textRows.join("<br/>") : textRows, node.labelStyle, true, true)
-  );
-  if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-    const div = descr.children[0];
-    const dv = (0,src/* select */.Ys)(descr);
-    bbox = div.getBoundingClientRect();
-    dv.attr("width", bbox.width);
-    dv.attr("height", bbox.height);
-  }
-  const halfPadding = node.padding / 2;
-  (0,src/* select */.Ys)(descr).attr(
-    "transform",
-    "translate( " + // (titleBox.width - bbox.width) / 2 +
-    (bbox.width > titleBox.width ? 0 : (titleBox.width - bbox.width) / 2) + ", " + (titleBox.height + halfPadding + 5) + ")"
-  );
-  (0,src/* select */.Ys)(text).attr(
-    "transform",
-    "translate( " + // (titleBox.width - bbox.width) / 2 +
-    (bbox.width < titleBox.width ? 0 : -(titleBox.width - bbox.width) / 2) + ", " + 0 + ")"
-  );
-  bbox = label.node().getBBox();
-  label.attr(
-    "transform",
-    "translate(" + -bbox.width / 2 + ", " + (-bbox.height / 2 - halfPadding + 3) + ")"
-  );
-  rect2.attr("class", "outer title-state").attr("x", -bbox.width / 2 - halfPadding).attr("y", -bbox.height / 2 - halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding);
-  innerLine.attr("class", "divider").attr("x1", -bbox.width / 2 - halfPadding).attr("x2", bbox.width / 2 + halfPadding).attr("y1", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding).attr("y2", -bbox.height / 2 - halfPadding + titleBox.height + halfPadding);
-  updateNodeBounds(node, rect2);
-  node.intersect = function(point2) {
-    return intersect.rect(node, point2);
-  };
-  return shapeSvg;
-};
-const stadium$1 = (parent, node) => {
-  const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true);
-  const h = bbox.height + node.padding;
-  const w2 = bbox.width + h / 4 + node.padding;
-  const rect2 = shapeSvg.insert("rect", ":first-child").attr("style", node.style).attr("rx", h / 2).attr("ry", h / 2).attr("x", -w2 / 2).attr("y", -h / 2).attr("width", w2).attr("height", h);
-  updateNodeBounds(node, rect2);
-  node.intersect = function(point2) {
-    return intersect.rect(node, point2);
-  };
-  return shapeSvg;
-};
-const circle = (parent, node) => {
-  const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, void 0, true);
-  const circle2 = shapeSvg.insert("circle", ":first-child");
-  circle2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding);
-  log$1.info("Circle main");
-  updateNodeBounds(node, circle2);
-  node.intersect = function(point2) {
-    log$1.info("Circle intersect", node, bbox.width / 2 + halfPadding, point2);
-    return intersect.circle(node, bbox.width / 2 + halfPadding, point2);
-  };
-  return shapeSvg;
-};
-const doublecircle = (parent, node) => {
-  const { shapeSvg, bbox, halfPadding } = labelHelper(parent, node, void 0, true);
-  const gap = 5;
-  const circleGroup = shapeSvg.insert("g", ":first-child");
-  const outerCircle = circleGroup.insert("circle");
-  const innerCircle = circleGroup.insert("circle");
-  outerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding + gap).attr("width", bbox.width + node.padding + gap * 2).attr("height", bbox.height + node.padding + gap * 2);
-  innerCircle.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("r", bbox.width / 2 + halfPadding).attr("width", bbox.width + node.padding).attr("height", bbox.height + node.padding);
-  log$1.info("DoubleCircle main");
-  updateNodeBounds(node, outerCircle);
-  node.intersect = function(point2) {
-    log$1.info("DoubleCircle intersect", node, bbox.width / 2 + halfPadding + gap, point2);
-    return intersect.circle(node, bbox.width / 2 + halfPadding + gap, point2);
-  };
-  return shapeSvg;
-};
-const subroutine$1 = (parent, node) => {
-  const { shapeSvg, bbox } = labelHelper(parent, node, void 0, true);
-  const w2 = bbox.width + node.padding;
-  const h = bbox.height + node.padding;
-  const points = [
-    { x: 0, y: 0 },
-    { x: w2, y: 0 },
-    { x: w2, y: -h },
-    { x: 0, y: -h },
-    { x: 0, y: 0 },
-    { x: -8, y: 0 },
-    { x: w2 + 8, y: 0 },
-    { x: w2 + 8, y: -h },
-    { x: -8, y: -h },
-    { x: -8, y: 0 }
-  ];
-  const el = insertPolygonShape$1(shapeSvg, w2, h, points);
-  el.attr("style", node.style);
-  updateNodeBounds(node, el);
-  node.intersect = function(point2) {
-    return intersect.polygon(node, points, point2);
-  };
-  return shapeSvg;
-};
-const start = (parent, node) => {
-  const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id);
-  const circle2 = shapeSvg.insert("circle", ":first-child");
-  circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14);
-  updateNodeBounds(node, circle2);
-  node.intersect = function(point2) {
-    return intersect.circle(node, 7, point2);
-  };
-  return shapeSvg;
-};
-const forkJoin = (parent, node, dir) => {
-  const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id);
-  let width2 = 70;
-  let height2 = 10;
-  if (dir === "LR") {
-    width2 = 10;
-    height2 = 70;
-  }
-  const shape = shapeSvg.append("rect").attr("x", -1 * width2 / 2).attr("y", -1 * height2 / 2).attr("width", width2).attr("height", height2).attr("class", "fork-join");
-  updateNodeBounds(node, shape);
-  node.height = node.height + node.padding / 2;
-  node.width = node.width + node.padding / 2;
-  node.intersect = function(point2) {
-    return intersect.rect(node, point2);
-  };
-  return shapeSvg;
-};
-const end = (parent, node) => {
-  const shapeSvg = parent.insert("g").attr("class", "node default").attr("id", node.domId || node.id);
-  const innerCircle = shapeSvg.insert("circle", ":first-child");
-  const circle2 = shapeSvg.insert("circle", ":first-child");
-  circle2.attr("class", "state-start").attr("r", 7).attr("width", 14).attr("height", 14);
-  innerCircle.attr("class", "state-end").attr("r", 5).attr("width", 10).attr("height", 10);
-  updateNodeBounds(node, circle2);
-  node.intersect = function(point2) {
-    return intersect.circle(node, 7, point2);
-  };
-  return shapeSvg;
-};
-const class_box = (parent, node) => {
-  const halfPadding = node.padding / 2;
-  const rowPadding = 4;
-  const lineHeight = 8;
-  let classes2;
-  if (!node.classes) {
-    classes2 = "node default";
-  } else {
-    classes2 = "node " + node.classes;
-  }
-  const shapeSvg = parent.insert("g").attr("class", classes2).attr("id", node.domId || node.id);
-  const rect2 = shapeSvg.insert("rect", ":first-child");
-  const topLine = shapeSvg.insert("line");
-  const bottomLine = shapeSvg.insert("line");
-  let maxWidth = 0;
-  let maxHeight = rowPadding;
-  const labelContainer = shapeSvg.insert("g").attr("class", "label");
-  let verticalPos = 0;
-  const hasInterface = node.classData.annotations && node.classData.annotations[0];
-  const interfaceLabelText = node.classData.annotations[0] ? "«" + node.classData.annotations[0] + "»" : "";
-  const interfaceLabel = labelContainer.node().appendChild(createLabel$1(interfaceLabelText, node.labelStyle, true, true));
-  let interfaceBBox = interfaceLabel.getBBox();
-  if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-    const div = interfaceLabel.children[0];
-    const dv = (0,src/* select */.Ys)(interfaceLabel);
-    interfaceBBox = div.getBoundingClientRect();
-    dv.attr("width", interfaceBBox.width);
-    dv.attr("height", interfaceBBox.height);
-  }
-  if (node.classData.annotations[0]) {
-    maxHeight += interfaceBBox.height + rowPadding;
-    maxWidth += interfaceBBox.width;
-  }
-  let classTitleString = node.classData.id;
-  if (node.classData.type !== void 0 && node.classData.type !== "") {
-    if (getConfig$1().flowchart.htmlLabels) {
-      classTitleString += "<" + node.classData.type + ">";
-    } else {
-      classTitleString += "<" + node.classData.type + ">";
-    }
-  }
-  const classTitleLabel = labelContainer.node().appendChild(createLabel$1(classTitleString, node.labelStyle, true, true));
-  (0,src/* select */.Ys)(classTitleLabel).attr("class", "classTitle");
-  let classTitleBBox = classTitleLabel.getBBox();
-  if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-    const div = classTitleLabel.children[0];
-    const dv = (0,src/* select */.Ys)(classTitleLabel);
-    classTitleBBox = div.getBoundingClientRect();
-    dv.attr("width", classTitleBBox.width);
-    dv.attr("height", classTitleBBox.height);
-  }
-  maxHeight += classTitleBBox.height + rowPadding;
-  if (classTitleBBox.width > maxWidth) {
-    maxWidth = classTitleBBox.width;
-  }
-  const classAttributes = [];
-  node.classData.members.forEach((str2) => {
-    const parsedInfo = parseMember(str2);
-    let parsedText = parsedInfo.displayText;
-    if (getConfig$1().flowchart.htmlLabels) {
-      parsedText = parsedText.replace(/</g, "<").replace(/>/g, ">");
-    }
-    const lbl = labelContainer.node().appendChild(
-      createLabel$1(
-        parsedText,
-        parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,
-        true,
-        true
-      )
-    );
-    let bbox = lbl.getBBox();
-    if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-      const div = lbl.children[0];
-      const dv = (0,src/* select */.Ys)(lbl);
-      bbox = div.getBoundingClientRect();
-      dv.attr("width", bbox.width);
-      dv.attr("height", bbox.height);
-    }
-    if (bbox.width > maxWidth) {
-      maxWidth = bbox.width;
-    }
-    maxHeight += bbox.height + rowPadding;
-    classAttributes.push(lbl);
-  });
-  maxHeight += lineHeight;
-  const classMethods = [];
-  node.classData.methods.forEach((str2) => {
-    const parsedInfo = parseMember(str2);
-    let displayText = parsedInfo.displayText;
-    if (getConfig$1().flowchart.htmlLabels) {
-      displayText = displayText.replace(/</g, "<").replace(/>/g, ">");
-    }
-    const lbl = labelContainer.node().appendChild(
-      createLabel$1(
-        displayText,
-        parsedInfo.cssStyle ? parsedInfo.cssStyle : node.labelStyle,
-        true,
-        true
-      )
-    );
-    let bbox = lbl.getBBox();
-    if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-      const div = lbl.children[0];
-      const dv = (0,src/* select */.Ys)(lbl);
-      bbox = div.getBoundingClientRect();
-      dv.attr("width", bbox.width);
-      dv.attr("height", bbox.height);
-    }
-    if (bbox.width > maxWidth) {
-      maxWidth = bbox.width;
-    }
-    maxHeight += bbox.height + rowPadding;
-    classMethods.push(lbl);
-  });
-  maxHeight += lineHeight;
-  if (hasInterface) {
-    let diffX2 = (maxWidth - interfaceBBox.width) / 2;
-    (0,src/* select */.Ys)(interfaceLabel).attr(
-      "transform",
-      "translate( " + (-1 * maxWidth / 2 + diffX2) + ", " + -1 * maxHeight / 2 + ")"
-    );
-    verticalPos = interfaceBBox.height + rowPadding;
-  }
-  let diffX = (maxWidth - classTitleBBox.width) / 2;
-  (0,src/* select */.Ys)(classTitleLabel).attr(
-    "transform",
-    "translate( " + (-1 * maxWidth / 2 + diffX) + ", " + (-1 * maxHeight / 2 + verticalPos) + ")"
-  );
-  verticalPos += classTitleBBox.height + rowPadding;
-  topLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);
-  verticalPos += lineHeight;
-  classAttributes.forEach((lbl) => {
-    (0,src/* select */.Ys)(lbl).attr(
-      "transform",
-      "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos + lineHeight / 2) + ")"
-    );
-    verticalPos += classTitleBBox.height + rowPadding;
-  });
-  verticalPos += lineHeight;
-  bottomLine.attr("class", "divider").attr("x1", -maxWidth / 2 - halfPadding).attr("x2", maxWidth / 2 + halfPadding).attr("y1", -maxHeight / 2 - halfPadding + lineHeight + verticalPos).attr("y2", -maxHeight / 2 - halfPadding + lineHeight + verticalPos);
-  verticalPos += lineHeight;
-  classMethods.forEach((lbl) => {
-    (0,src/* select */.Ys)(lbl).attr(
-      "transform",
-      "translate( " + -maxWidth / 2 + ", " + (-1 * maxHeight / 2 + verticalPos) + ")"
-    );
-    verticalPos += classTitleBBox.height + rowPadding;
-  });
-  rect2.attr("class", "outer title-state").attr("x", -maxWidth / 2 - halfPadding).attr("y", -(maxHeight / 2) - halfPadding).attr("width", maxWidth + node.padding).attr("height", maxHeight + node.padding);
-  updateNodeBounds(node, rect2);
-  node.intersect = function(point2) {
-    return intersect.rect(node, point2);
-  };
-  return shapeSvg;
-};
-const shapes$1 = {
-  rhombus: question$1,
-  question: question$1,
-  rect: rect$1,
-  labelRect,
-  rectWithTitle,
-  choice,
-  circle,
-  doublecircle,
-  stadium: stadium$1,
-  hexagon: hexagon$1,
-  rect_left_inv_arrow: rect_left_inv_arrow$1,
-  lean_right: lean_right$1,
-  lean_left: lean_left$1,
-  trapezoid: trapezoid$1,
-  inv_trapezoid: inv_trapezoid$1,
-  rect_right_inv_arrow: rect_right_inv_arrow$1,
-  cylinder: cylinder$1,
-  start,
-  end,
-  note: note$1,
-  subroutine: subroutine$1,
-  fork: forkJoin,
-  join: forkJoin,
-  class_box
-};
-let nodeElems = {};
-const insertNode = (elem, node, dir) => {
-  let newEl;
-  let el;
-  if (node.link) {
-    let target;
-    if (getConfig$1().securityLevel === "sandbox") {
-      target = "_top";
-    } else if (node.linkTarget) {
-      target = node.linkTarget || "_blank";
-    }
-    newEl = elem.insert("svg:a").attr("xlink:href", node.link).attr("target", target);
-    el = shapes$1[node.shape](newEl, node, dir);
-  } else {
-    el = shapes$1[node.shape](elem, node, dir);
-    newEl = el;
-  }
-  if (node.tooltip) {
-    el.attr("title", node.tooltip);
-  }
-  if (node.class) {
-    el.attr("class", "node default " + node.class);
-  }
-  nodeElems[node.id] = newEl;
-  if (node.haveCallback) {
-    nodeElems[node.id].attr("class", nodeElems[node.id].attr("class") + " clickable");
-  }
-  return newEl;
-};
-const setNodeElem = (elem, node) => {
-  nodeElems[node.id] = elem;
-};
-const clear$a = () => {
-  nodeElems = {};
-};
-const positionNode = (node) => {
-  const el = nodeElems[node.id];
-  log$1.trace(
-    "Transforming node",
-    node.diff,
-    node,
-    "translate(" + (node.x - node.width / 2 - 5) + ", " + node.width / 2 + ")"
-  );
-  const padding2 = 8;
-  const diff = node.diff || 0;
-  if (node.clusterNode) {
-    el.attr(
-      "transform",
-      "translate(" + (node.x + diff - node.width / 2) + ", " + (node.y - node.height / 2 - padding2) + ")"
-    );
-  } else {
-    el.attr("transform", "translate(" + node.x + ", " + node.y + ")");
-  }
-  return diff;
-};
-const rect = (parent, node) => {
-  log$1.trace("Creating subgraph rect for ", node.id, node);
-  const shapeSvg = parent.insert("g").attr("class", "cluster" + (node.class ? " " + node.class : "")).attr("id", node.id);
-  const rect2 = shapeSvg.insert("rect", ":first-child");
-  const label = shapeSvg.insert("g").attr("class", "cluster-label");
-  const text = label.node().appendChild(createLabel$1(node.labelText, node.labelStyle, void 0, true));
-  let bbox = text.getBBox();
-  if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-    const div = text.children[0];
-    const dv = (0,src/* select */.Ys)(text);
-    bbox = div.getBoundingClientRect();
-    dv.attr("width", bbox.width);
-    dv.attr("height", bbox.height);
-  }
-  const padding2 = 0 * node.padding;
-  const halfPadding = padding2 / 2;
-  const width2 = node.width <= bbox.width + padding2 ? bbox.width + padding2 : node.width;
-  if (node.width <= bbox.width + padding2) {
-    node.diff = (bbox.width - node.width) / 2 - node.padding / 2;
-  } else {
-    node.diff = -node.padding / 2;
-  }
-  log$1.trace("Data ", node, JSON.stringify(node));
-  rect2.attr("style", node.style).attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - width2 / 2).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width2).attr("height", node.height + padding2);
-  label.attr(
-    "transform",
-    // This puts the labal on top of the box instead of inside it
-    // 'translate(' + (node.x - bbox.width / 2) + ', ' + (node.y - node.height / 2 - bbox.height) + ')'
-    "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2) + ")"
-  );
-  const rectBox = rect2.node().getBBox();
-  node.width = rectBox.width;
-  node.height = rectBox.height;
-  node.intersect = function(point2) {
-    return intersectRect$1(node, point2);
-  };
-  return shapeSvg;
-};
-const noteGroup = (parent, node) => {
-  const shapeSvg = parent.insert("g").attr("class", "note-cluster").attr("id", node.id);
-  const rect2 = shapeSvg.insert("rect", ":first-child");
-  const padding2 = 0 * node.padding;
-  const halfPadding = padding2 / 2;
-  rect2.attr("rx", node.rx).attr("ry", node.ry).attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", node.width + padding2).attr("height", node.height + padding2).attr("fill", "none");
-  const rectBox = rect2.node().getBBox();
-  node.width = rectBox.width;
-  node.height = rectBox.height;
-  node.intersect = function(point2) {
-    return intersectRect$1(node, point2);
-  };
-  return shapeSvg;
-};
-const roundedWithTitle = (parent, node) => {
-  const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id);
-  const rect2 = shapeSvg.insert("rect", ":first-child");
-  const label = shapeSvg.insert("g").attr("class", "cluster-label");
-  const innerRect = shapeSvg.append("rect");
-  const text = label.node().appendChild(createLabel$1(node.labelText, node.labelStyle, void 0, true));
-  let bbox = text.getBBox();
-  if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-    const div = text.children[0];
-    const dv = (0,src/* select */.Ys)(text);
-    bbox = div.getBoundingClientRect();
-    dv.attr("width", bbox.width);
-    dv.attr("height", bbox.height);
-  }
-  bbox = text.getBBox();
-  const padding2 = 0 * node.padding;
-  const halfPadding = padding2 / 2;
-  const width2 = node.width <= bbox.width + node.padding ? bbox.width + node.padding : node.width;
-  if (node.width <= bbox.width + node.padding) {
-    node.diff = (bbox.width + node.padding * 0 - node.width) / 2;
-  } else {
-    node.diff = -node.padding / 2;
-  }
-  rect2.attr("class", "outer").attr("x", node.x - width2 / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding).attr("width", width2 + padding2).attr("height", node.height + padding2);
-  innerRect.attr("class", "inner").attr("x", node.x - width2 / 2 - halfPadding).attr("y", node.y - node.height / 2 - halfPadding + bbox.height - 1).attr("width", width2 + padding2).attr("height", node.height + padding2 - bbox.height - 3);
-  label.attr(
-    "transform",
-    "translate(" + (node.x - bbox.width / 2) + ", " + (node.y - node.height / 2 - node.padding / 3 + (evaluate(getConfig$1().flowchart.htmlLabels) ? 5 : 3)) + ")"
-  );
-  const rectBox = rect2.node().getBBox();
-  node.height = rectBox.height;
-  node.intersect = function(point2) {
-    return intersectRect$1(node, point2);
-  };
-  return shapeSvg;
-};
-const divider = (parent, node) => {
-  const shapeSvg = parent.insert("g").attr("class", node.classes).attr("id", node.id);
-  const rect2 = shapeSvg.insert("rect", ":first-child");
-  const padding2 = 0 * node.padding;
-  const halfPadding = padding2 / 2;
-  rect2.attr("class", "divider").attr("x", node.x - node.width / 2 - halfPadding).attr("y", node.y - node.height / 2).attr("width", node.width + padding2).attr("height", node.height + padding2);
-  const rectBox = rect2.node().getBBox();
-  node.width = rectBox.width;
-  node.height = rectBox.height;
-  node.diff = -node.padding / 2;
-  node.intersect = function(point2) {
-    return intersectRect$1(node, point2);
-  };
-  return shapeSvg;
-};
-const shapes = { rect, roundedWithTitle, noteGroup, divider };
-let clusterElems = {};
-const insertCluster = (elem, node) => {
-  log$1.trace("Inserting cluster");
-  const shape = node.shape || "rect";
-  clusterElems[node.id] = shapes[shape](elem, node);
-};
-const clear$9 = () => {
-  clusterElems = {};
-};
-let edgeLabels = {};
-let terminalLabels = {};
-const clear$8 = () => {
-  edgeLabels = {};
-  terminalLabels = {};
-};
-const insertEdgeLabel = (elem, edge) => {
-  const labelElement = createLabel$1(edge.label, edge.labelStyle);
-  const edgeLabel = elem.insert("g").attr("class", "edgeLabel");
-  const label = edgeLabel.insert("g").attr("class", "label");
-  label.node().appendChild(labelElement);
-  let bbox = labelElement.getBBox();
-  if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-    const div = labelElement.children[0];
-    const dv = (0,src/* select */.Ys)(labelElement);
-    bbox = div.getBoundingClientRect();
-    dv.attr("width", bbox.width);
-    dv.attr("height", bbox.height);
-  }
-  label.attr("transform", "translate(" + -bbox.width / 2 + ", " + -bbox.height / 2 + ")");
-  edgeLabels[edge.id] = edgeLabel;
-  edge.width = bbox.width;
-  edge.height = bbox.height;
-  let fo;
-  if (edge.startLabelLeft) {
-    const startLabelElement = createLabel$1(edge.startLabelLeft, edge.labelStyle);
-    const startEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals");
-    const inner = startEdgeLabelLeft.insert("g").attr("class", "inner");
-    fo = inner.node().appendChild(startLabelElement);
-    const slBox = startLabelElement.getBBox();
-    inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")");
-    if (!terminalLabels[edge.id]) {
-      terminalLabels[edge.id] = {};
-    }
-    terminalLabels[edge.id].startLeft = startEdgeLabelLeft;
-    setTerminalWidth(fo, edge.startLabelLeft);
-  }
-  if (edge.startLabelRight) {
-    const startLabelElement = createLabel$1(edge.startLabelRight, edge.labelStyle);
-    const startEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals");
-    const inner = startEdgeLabelRight.insert("g").attr("class", "inner");
-    fo = startEdgeLabelRight.node().appendChild(startLabelElement);
-    inner.node().appendChild(startLabelElement);
-    const slBox = startLabelElement.getBBox();
-    inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")");
-    if (!terminalLabels[edge.id]) {
-      terminalLabels[edge.id] = {};
-    }
-    terminalLabels[edge.id].startRight = startEdgeLabelRight;
-    setTerminalWidth(fo, edge.startLabelRight);
-  }
-  if (edge.endLabelLeft) {
-    const endLabelElement = createLabel$1(edge.endLabelLeft, edge.labelStyle);
-    const endEdgeLabelLeft = elem.insert("g").attr("class", "edgeTerminals");
-    const inner = endEdgeLabelLeft.insert("g").attr("class", "inner");
-    fo = inner.node().appendChild(endLabelElement);
-    const slBox = endLabelElement.getBBox();
-    inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")");
-    endEdgeLabelLeft.node().appendChild(endLabelElement);
-    if (!terminalLabels[edge.id]) {
-      terminalLabels[edge.id] = {};
-    }
-    terminalLabels[edge.id].endLeft = endEdgeLabelLeft;
-    setTerminalWidth(fo, edge.endLabelLeft);
-  }
-  if (edge.endLabelRight) {
-    const endLabelElement = createLabel$1(edge.endLabelRight, edge.labelStyle);
-    const endEdgeLabelRight = elem.insert("g").attr("class", "edgeTerminals");
-    const inner = endEdgeLabelRight.insert("g").attr("class", "inner");
-    fo = inner.node().appendChild(endLabelElement);
-    const slBox = endLabelElement.getBBox();
-    inner.attr("transform", "translate(" + -slBox.width / 2 + ", " + -slBox.height / 2 + ")");
-    endEdgeLabelRight.node().appendChild(endLabelElement);
-    if (!terminalLabels[edge.id]) {
-      terminalLabels[edge.id] = {};
-    }
-    terminalLabels[edge.id].endRight = endEdgeLabelRight;
-    setTerminalWidth(fo, edge.endLabelRight);
-  }
-  return labelElement;
-};
-function setTerminalWidth(fo, value) {
-  if (getConfig$1().flowchart.htmlLabels && fo) {
-    fo.style.width = value.length * 9 + "px";
-    fo.style.height = "12px";
-  }
-}
-const positionEdgeLabel = (edge, paths) => {
-  log$1.info("Moving label abc78 ", edge.id, edge.label, edgeLabels[edge.id]);
-  let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;
-  if (edge.label) {
-    const el = edgeLabels[edge.id];
-    let x = edge.x;
-    let y = edge.y;
-    if (path) {
-      const pos = mermaid_ae477ddf_utils.calcLabelPosition(path);
-      log$1.info(
-        "Moving label " + edge.label + " from (",
-        x,
-        ",",
-        y,
-        ") to (",
-        pos.x,
-        ",",
-        pos.y,
-        ") abc78"
-      );
-      if (paths.updatedPath) {
-        x = pos.x;
-        y = pos.y;
-      }
-    }
-    el.attr("transform", "translate(" + x + ", " + y + ")");
-  }
-  if (edge.startLabelLeft) {
-    const el = terminalLabels[edge.id].startLeft;
-    let x = edge.x;
-    let y = edge.y;
-    if (path) {
-      const pos = mermaid_ae477ddf_utils.calcTerminalLabelPosition(edge.arrowTypeStart ? 10 : 0, "start_left", path);
-      x = pos.x;
-      y = pos.y;
-    }
-    el.attr("transform", "translate(" + x + ", " + y + ")");
-  }
-  if (edge.startLabelRight) {
-    const el = terminalLabels[edge.id].startRight;
-    let x = edge.x;
-    let y = edge.y;
-    if (path) {
-      const pos = mermaid_ae477ddf_utils.calcTerminalLabelPosition(
-        edge.arrowTypeStart ? 10 : 0,
-        "start_right",
-        path
-      );
-      x = pos.x;
-      y = pos.y;
-    }
-    el.attr("transform", "translate(" + x + ", " + y + ")");
-  }
-  if (edge.endLabelLeft) {
-    const el = terminalLabels[edge.id].endLeft;
-    let x = edge.x;
-    let y = edge.y;
-    if (path) {
-      const pos = mermaid_ae477ddf_utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_left", path);
-      x = pos.x;
-      y = pos.y;
-    }
-    el.attr("transform", "translate(" + x + ", " + y + ")");
-  }
-  if (edge.endLabelRight) {
-    const el = terminalLabels[edge.id].endRight;
-    let x = edge.x;
-    let y = edge.y;
-    if (path) {
-      const pos = mermaid_ae477ddf_utils.calcTerminalLabelPosition(edge.arrowTypeEnd ? 10 : 0, "end_right", path);
-      x = pos.x;
-      y = pos.y;
-    }
-    el.attr("transform", "translate(" + x + ", " + y + ")");
-  }
-};
-const outsideNode = (node, point2) => {
-  const x = node.x;
-  const y = node.y;
-  const dx = Math.abs(point2.x - x);
-  const dy = Math.abs(point2.y - y);
-  const w2 = node.width / 2;
-  const h = node.height / 2;
-  if (dx >= w2 || dy >= h) {
-    return true;
-  }
-  return false;
-};
-const intersection = (node, outsidePoint, insidePoint) => {
-  log$1.warn(`intersection calc abc89:
-  outsidePoint: ${JSON.stringify(outsidePoint)}
-  insidePoint : ${JSON.stringify(insidePoint)}
-  node        : x:${node.x} y:${node.y} w:${node.width} h:${node.height}`);
-  const x = node.x;
-  const y = node.y;
-  const dx = Math.abs(x - insidePoint.x);
-  const w2 = node.width / 2;
-  let r = insidePoint.x < outsidePoint.x ? w2 - dx : w2 + dx;
-  const h = node.height / 2;
-  const Q = Math.abs(outsidePoint.y - insidePoint.y);
-  const R = Math.abs(outsidePoint.x - insidePoint.x);
-  if (Math.abs(y - outsidePoint.y) * w2 > Math.abs(x - outsidePoint.x) * h) {
-    let q = insidePoint.y < outsidePoint.y ? outsidePoint.y - h - y : y - h - outsidePoint.y;
-    r = R * q / Q;
-    const res = {
-      x: insidePoint.x < outsidePoint.x ? insidePoint.x + r : insidePoint.x - R + r,
-      y: insidePoint.y < outsidePoint.y ? insidePoint.y + Q - q : insidePoint.y - Q + q
-    };
-    if (r === 0) {
-      res.x = outsidePoint.x;
-      res.y = outsidePoint.y;
-    }
-    if (R === 0) {
-      res.x = outsidePoint.x;
-    }
-    if (Q === 0) {
-      res.y = outsidePoint.y;
-    }
-    log$1.warn(`abc89 topp/bott calc, Q ${Q}, q ${q}, R ${R}, r ${r}`, res);
-    return res;
-  } else {
-    if (insidePoint.x < outsidePoint.x) {
-      r = outsidePoint.x - w2 - x;
-    } else {
-      r = x - w2 - outsidePoint.x;
-    }
-    let q = Q * r / R;
-    let _x = insidePoint.x < outsidePoint.x ? insidePoint.x + R - r : insidePoint.x - R + r;
-    let _y = insidePoint.y < outsidePoint.y ? insidePoint.y + q : insidePoint.y - q;
-    log$1.warn(`sides calc abc89, Q ${Q}, q ${q}, R ${R}, r ${r}`, { _x, _y });
-    if (r === 0) {
-      _x = outsidePoint.x;
-      _y = outsidePoint.y;
-    }
-    if (R === 0) {
-      _x = outsidePoint.x;
-    }
-    if (Q === 0) {
-      _y = outsidePoint.y;
-    }
-    return { x: _x, y: _y };
-  }
-};
-const cutPathAtIntersect = (_points, boundryNode) => {
-  log$1.warn("abc88 cutPathAtIntersect", _points, boundryNode);
-  let points = [];
-  let lastPointOutside = _points[0];
-  let isInside = false;
-  _points.forEach((point2) => {
-    log$1.info("abc88 checking point", point2, boundryNode);
-    if (!outsideNode(boundryNode, point2) && !isInside) {
-      const inter = intersection(boundryNode, lastPointOutside, point2);
-      log$1.warn("abc88 inside", point2, lastPointOutside, inter);
-      log$1.warn("abc88 intersection", inter);
-      let pointPresent = false;
-      points.forEach((p) => {
-        pointPresent = pointPresent || p.x === inter.x && p.y === inter.y;
-      });
-      if (!points.some((e) => e.x === inter.x && e.y === inter.y)) {
-        points.push(inter);
-      } else {
-        log$1.warn("abc88 no intersect", inter, points);
-      }
-      isInside = true;
-    } else {
-      log$1.warn("abc88 outside", point2, lastPointOutside);
-      lastPointOutside = point2;
-      if (!isInside) {
-        points.push(point2);
-      }
-    }
-  });
-  log$1.warn("abc88 returning points", points);
-  return points;
-};
-const insertEdge = function(elem, e, edge, clusterDb2, diagramType, graph) {
-  let points = edge.points;
-  let pointsHasChanged = false;
-  const tail = graph.node(e.v);
-  var head2 = graph.node(e.w);
-  log$1.info("abc88 InsertEdge: ", edge);
-  if (head2.intersect && tail.intersect) {
-    points = points.slice(1, edge.points.length - 1);
-    points.unshift(tail.intersect(points[0]));
-    log$1.info(
-      "Last point",
-      points[points.length - 1],
-      head2,
-      head2.intersect(points[points.length - 1])
-    );
-    points.push(head2.intersect(points[points.length - 1]));
-  }
-  if (edge.toCluster) {
-    log$1.info("to cluster abc88", clusterDb2[edge.toCluster]);
-    points = cutPathAtIntersect(edge.points, clusterDb2[edge.toCluster].node);
-    pointsHasChanged = true;
-  }
-  if (edge.fromCluster) {
-    log$1.info("from cluster abc88", clusterDb2[edge.fromCluster]);
-    points = cutPathAtIntersect(points.reverse(), clusterDb2[edge.fromCluster].node).reverse();
-    pointsHasChanged = true;
-  }
-  const lineData = points.filter((p) => !Number.isNaN(p.y));
-  let curve;
-  if (diagramType === "graph" || diagramType === "flowchart") {
-    curve = edge.curve || src/* curveBasis */.$0Z;
-  } else {
-    curve = src/* curveBasis */.$0Z;
-  }
-  const lineFunction = (0,src/* line */.jvg)().x(function(d) {
-    return d.x;
-  }).y(function(d) {
-    return d.y;
-  }).curve(curve);
-  let strokeClasses;
-  switch (edge.thickness) {
-    case "normal":
-      strokeClasses = "edge-thickness-normal";
-      break;
-    case "thick":
-      strokeClasses = "edge-thickness-thick";
-      break;
-    default:
-      strokeClasses = "";
-  }
-  switch (edge.pattern) {
-    case "solid":
-      strokeClasses += " edge-pattern-solid";
-      break;
-    case "dotted":
-      strokeClasses += " edge-pattern-dotted";
-      break;
-    case "dashed":
-      strokeClasses += " edge-pattern-dashed";
-      break;
-  }
-  const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", edge.id).attr("class", " " + strokeClasses + (edge.classes ? " " + edge.classes : "")).attr("style", edge.style);
-  let url = "";
-  if (getConfig$1().flowchart.arrowMarkerAbsolute || getConfig$1().state.arrowMarkerAbsolute) {
-    url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search;
-    url = url.replace(/\(/g, "\\(");
-    url = url.replace(/\)/g, "\\)");
-  }
-  log$1.info("arrowTypeStart", edge.arrowTypeStart);
-  log$1.info("arrowTypeEnd", edge.arrowTypeEnd);
-  switch (edge.arrowTypeStart) {
-    case "arrow_cross":
-      svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-crossStart)");
-      break;
-    case "arrow_point":
-      svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-pointStart)");
-      break;
-    case "arrow_barb":
-      svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-barbStart)");
-      break;
-    case "arrow_circle":
-      svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-circleStart)");
-      break;
-    case "aggregation":
-      svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-aggregationStart)");
-      break;
-    case "extension":
-      svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-extensionStart)");
-      break;
-    case "composition":
-      svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-compositionStart)");
-      break;
-    case "dependency":
-      svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-dependencyStart)");
-      break;
-    case "lollipop":
-      svgPath.attr("marker-start", "url(" + url + "#" + diagramType + "-lollipopStart)");
-      break;
-  }
-  switch (edge.arrowTypeEnd) {
-    case "arrow_cross":
-      svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-crossEnd)");
-      break;
-    case "arrow_point":
-      svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-pointEnd)");
-      break;
-    case "arrow_barb":
-      svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-barbEnd)");
-      break;
-    case "arrow_circle":
-      svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-circleEnd)");
-      break;
-    case "aggregation":
-      svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-aggregationEnd)");
-      break;
-    case "extension":
-      svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-extensionEnd)");
-      break;
-    case "composition":
-      svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-compositionEnd)");
-      break;
-    case "dependency":
-      svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-dependencyEnd)");
-      break;
-    case "lollipop":
-      svgPath.attr("marker-end", "url(" + url + "#" + diagramType + "-lollipopEnd)");
-      break;
-  }
-  let paths = {};
-  if (pointsHasChanged) {
-    paths.updatedPath = points;
-  }
-  paths.originalPath = edge.points;
-  return paths;
-};
-const recursiveRender = (_elem, graph, diagramtype, parentCluster) => {
-  log$1.info("Graph in recursive render: XXX", json/* write */.c(graph), parentCluster);
-  const dir = graph.graph().rankdir;
-  log$1.trace("Dir in recursive render - dir:", dir);
-  const elem = _elem.insert("g").attr("class", "root");
-  if (!graph.nodes()) {
-    log$1.info("No nodes found for", graph);
-  } else {
-    log$1.info("Recursive render XXX", graph.nodes());
-  }
-  if (graph.edges().length > 0) {
-    log$1.trace("Recursive edges", graph.edge(graph.edges()[0]));
-  }
-  const clusters = elem.insert("g").attr("class", "clusters");
-  const edgePaths = elem.insert("g").attr("class", "edgePaths");
-  const edgeLabels2 = elem.insert("g").attr("class", "edgeLabels");
-  const nodes = elem.insert("g").attr("class", "nodes");
-  graph.nodes().forEach(function(v) {
-    const node = graph.node(v);
-    if (parentCluster !== void 0) {
-      const data = JSON.parse(JSON.stringify(parentCluster.clusterData));
-      log$1.info("Setting data for cluster XXX (", v, ") ", data, parentCluster);
-      graph.setNode(parentCluster.id, data);
-      if (!graph.parent(v)) {
-        log$1.trace("Setting parent", v, parentCluster.id);
-        graph.setParent(v, parentCluster.id, data);
-      }
-    }
-    log$1.info("(Insert) Node XXX" + v + ": " + JSON.stringify(graph.node(v)));
-    if (node && node.clusterNode) {
-      log$1.info("Cluster identified", v, node.width, graph.node(v));
-      const o = recursiveRender(nodes, node.graph, diagramtype, graph.node(v));
-      const newEl = o.elem;
-      updateNodeBounds(node, newEl);
-      node.diff = o.diff || 0;
-      log$1.info("Node bounds (abc123)", v, node, node.width, node.x, node.y);
-      setNodeElem(newEl, node);
-      log$1.warn("Recursive render complete ", newEl, node);
-    } else {
-      if (graph.children(v).length > 0) {
-        log$1.info("Cluster - the non recursive path XXX", v, node.id, node, graph);
-        log$1.info(findNonClusterChild(node.id, graph));
-        clusterDb[node.id] = { id: findNonClusterChild(node.id, graph), node };
-      } else {
-        log$1.info("Node - the non recursive path", v, node.id, node);
-        insertNode(nodes, graph.node(v), dir);
-      }
-    }
-  });
-  graph.edges().forEach(function(e) {
-    const edge = graph.edge(e.v, e.w, e.name);
-    log$1.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e));
-    log$1.info("Edge " + e.v + " -> " + e.w + ": ", e, " ", JSON.stringify(graph.edge(e)));
-    log$1.info("Fix", clusterDb, "ids:", e.v, e.w, "Translateing: ", clusterDb[e.v], clusterDb[e.w]);
-    insertEdgeLabel(edgeLabels2, edge);
-  });
-  graph.edges().forEach(function(e) {
-    log$1.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(e));
-  });
-  log$1.info("#############################################");
-  log$1.info("###                Layout                 ###");
-  log$1.info("#############################################");
-  log$1.info(graph);
-  (0,dagre/* layout */.bK)(graph);
-  log$1.info("Graph after layout:", json/* write */.c(graph));
-  let diff = 0;
-  sortNodesByHierarchy(graph).forEach(function(v) {
-    const node = graph.node(v);
-    log$1.info("Position " + v + ": " + JSON.stringify(graph.node(v)));
-    log$1.info(
-      "Position " + v + ": (" + node.x,
-      "," + node.y,
-      ") width: ",
-      node.width,
-      " height: ",
-      node.height
-    );
-    if (node && node.clusterNode) {
-      positionNode(node);
-    } else {
-      if (graph.children(v).length > 0) {
-        insertCluster(clusters, node);
-        clusterDb[node.id].node = node;
-      } else {
-        positionNode(node);
-      }
-    }
-  });
-  graph.edges().forEach(function(e) {
-    const edge = graph.edge(e);
-    log$1.info("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(edge), edge);
-    const paths = insertEdge(edgePaths, e, edge, clusterDb, diagramtype, graph);
-    positionEdgeLabel(edge, paths);
-  });
-  graph.nodes().forEach(function(v) {
-    const n = graph.node(v);
-    log$1.info(v, n.type, n.diff);
-    if (n.type === "group") {
-      diff = n.diff;
-    }
-  });
-  return { elem, diff };
-};
-const render$1 = (elem, graph, markers2, diagramtype, id2) => {
-  insertMarkers$3(elem, markers2, diagramtype, id2);
-  clear$a();
-  clear$8();
-  clear$9();
-  clear$b();
-  log$1.warn("Graph at first:", json/* write */.c(graph));
-  adjustClustersAndEdges(graph);
-  log$1.warn("Graph after:", json/* write */.c(graph));
-  recursiveRender(elem, graph, diagramtype);
-};
-const sanitizeText$1 = (txt) => common$1.sanitizeText(txt, getConfig$1());
-let conf$9 = {
-  dividerMargin: 10,
-  padding: 5,
-  textHeight: 10
-};
-const addClasses = function(classes2, g, _id, diagObj) {
-  const keys2 = Object.keys(classes2);
-  log$1.info("keys:", keys2);
-  log$1.info(classes2);
-  keys2.forEach(function(id2) {
-    const vertex = classes2[id2];
-    let cssClassStr = "";
-    if (vertex.cssClasses.length > 0) {
-      cssClassStr = cssClassStr + " " + vertex.cssClasses.join(" ");
-    }
-    const styles = { labelStyle: "" };
-    let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id;
-    let radious = 0;
-    let _shape = "";
-    switch (vertex.type) {
-      case "class":
-        _shape = "class_box";
-        break;
-      default:
-        _shape = "class_box";
-    }
-    g.setNode(vertex.id, {
-      labelStyle: styles.labelStyle,
-      shape: _shape,
-      labelText: sanitizeText$1(vertexText),
-      classData: vertex,
-      rx: radious,
-      ry: radious,
-      class: cssClassStr,
-      style: styles.style,
-      id: vertex.id,
-      domId: vertex.domId,
-      tooltip: diagObj.db.getTooltip(vertex.id) || "",
-      haveCallback: vertex.haveCallback,
-      link: vertex.link,
-      width: vertex.type === "group" ? 500 : void 0,
-      type: vertex.type,
-      padding: getConfig$1().flowchart.padding
-    });
-    log$1.info("setNode", {
-      labelStyle: styles.labelStyle,
-      shape: _shape,
-      labelText: vertexText,
-      rx: radious,
-      ry: radious,
-      class: cssClassStr,
-      style: styles.style,
-      id: vertex.id,
-      width: vertex.type === "group" ? 500 : void 0,
-      type: vertex.type,
-      padding: getConfig$1().flowchart.padding
-    });
-  });
-};
-const addNotes = function(notes2, g, startEdgeId, classes2) {
-  log$1.info(notes2);
-  notes2.forEach(function(note2, i) {
-    const vertex = note2;
-    let cssNoteStr = "";
-    const styles = { labelStyle: "", style: "" };
-    let vertexText = vertex.text;
-    let radious = 0;
-    let _shape = "note";
-    g.setNode(vertex.id, {
-      labelStyle: styles.labelStyle,
-      shape: _shape,
-      labelText: sanitizeText$1(vertexText),
-      noteData: vertex,
-      rx: radious,
-      ry: radious,
-      class: cssNoteStr,
-      style: styles.style,
-      id: vertex.id,
-      domId: vertex.id,
-      tooltip: "",
-      type: "note",
-      padding: getConfig$1().flowchart.padding
-    });
-    log$1.info("setNode", {
-      labelStyle: styles.labelStyle,
-      shape: _shape,
-      labelText: vertexText,
-      rx: radious,
-      ry: radious,
-      style: styles.style,
-      id: vertex.id,
-      type: "note",
-      padding: getConfig$1().flowchart.padding
-    });
-    if (!vertex.class || !(vertex.class in classes2)) {
-      return;
-    }
-    const edgeId = startEdgeId + i;
-    const edgeData = {};
-    edgeData.classes = "relation";
-    edgeData.pattern = "dotted";
-    edgeData.id = `edgeNote${edgeId}`;
-    edgeData.arrowhead = "none";
-    log$1.info(`Note edge: ${JSON.stringify(edgeData)}, ${JSON.stringify(vertex)}`);
-    edgeData.startLabelRight = "";
-    edgeData.endLabelLeft = "";
-    edgeData.arrowTypeStart = "none";
-    edgeData.arrowTypeEnd = "none";
-    let style = "fill:none";
-    let labelStyle = "";
-    edgeData.style = style;
-    edgeData.labelStyle = labelStyle;
-    edgeData.curve = interpolateToCurve(conf$9.curve, src/* curveLinear */.c_6);
-    g.setEdge(vertex.id, vertex.class, edgeData, edgeId);
-  });
-};
-const addRelations = function(relations2, g) {
-  const conf2 = getConfig$1().flowchart;
-  let cnt2 = 0;
-  relations2.forEach(function(edge) {
-    cnt2++;
-    const edgeData = {};
-    edgeData.classes = "relation";
-    edgeData.pattern = edge.relation.lineType == 1 ? "dashed" : "solid";
-    edgeData.id = "id" + cnt2;
-    if (edge.type === "arrow_open") {
-      edgeData.arrowhead = "none";
-    } else {
-      edgeData.arrowhead = "normal";
-    }
-    log$1.info(edgeData, edge);
-    edgeData.startLabelRight = edge.relationTitle1 === "none" ? "" : edge.relationTitle1;
-    edgeData.endLabelLeft = edge.relationTitle2 === "none" ? "" : edge.relationTitle2;
-    edgeData.arrowTypeStart = getArrowMarker(edge.relation.type1);
-    edgeData.arrowTypeEnd = getArrowMarker(edge.relation.type2);
-    let style = "";
-    let labelStyle = "";
-    if (edge.style !== void 0) {
-      const styles = getStylesFromArray(edge.style);
-      style = styles.style;
-      labelStyle = styles.labelStyle;
-    } else {
-      style = "fill:none";
-    }
-    edgeData.style = style;
-    edgeData.labelStyle = labelStyle;
-    if (edge.interpolate !== void 0) {
-      edgeData.curve = interpolateToCurve(edge.interpolate, src/* curveLinear */.c_6);
-    } else if (relations2.defaultInterpolate !== void 0) {
-      edgeData.curve = interpolateToCurve(relations2.defaultInterpolate, src/* curveLinear */.c_6);
-    } else {
-      edgeData.curve = interpolateToCurve(conf2.curve, src/* curveLinear */.c_6);
-    }
-    edge.text = edge.title;
-    if (edge.text === void 0) {
-      if (edge.style !== void 0) {
-        edgeData.arrowheadStyle = "fill: #333";
-      }
-    } else {
-      edgeData.arrowheadStyle = "fill: #333";
-      edgeData.labelpos = "c";
-      if (getConfig$1().flowchart.htmlLabels) {
-        edgeData.labelType = "html";
-        edgeData.label = '<span class="edgeLabel">' + edge.text + "</span>";
-      } else {
-        edgeData.labelType = "text";
-        edgeData.label = edge.text.replace(common$1.lineBreakRegex, "\n");
-        if (edge.style === void 0) {
-          edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none";
-        }
-        edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:");
-      }
-    }
-    g.setEdge(edge.id1, edge.id2, edgeData, cnt2);
-  });
-};
-const setConf$9 = function(cnf) {
-  const keys2 = Object.keys(cnf);
-  keys2.forEach(function(key) {
-    conf$9[key] = cnf[key];
-  });
-};
-const draw$c = function(text, id2, _version, diagObj) {
-  log$1.info("Drawing class - ", id2);
-  const conf2 = getConfig$1().flowchart;
-  const securityLevel = getConfig$1().securityLevel;
-  log$1.info("config:", conf2);
-  const nodeSpacing = conf2.nodeSpacing || 50;
-  const rankSpacing = conf2.rankSpacing || 50;
-  const g = new graphlib/* Graph */.k({
-    multigraph: true,
-    compound: true
-  }).setGraph({
-    rankdir: diagObj.db.getDirection(),
-    nodesep: nodeSpacing,
-    ranksep: rankSpacing,
-    marginx: 8,
-    marginy: 8
-  }).setDefaultEdgeLabel(function() {
-    return {};
-  });
-  const classes2 = diagObj.db.getClasses();
-  const relations2 = diagObj.db.getRelations();
-  const notes2 = diagObj.db.getNotes();
-  log$1.info(relations2);
-  addClasses(classes2, g, id2, diagObj);
-  addRelations(relations2, g);
-  addNotes(notes2, g, relations2.length + 1, classes2);
-  let sandboxElement;
-  if (securityLevel === "sandbox") {
-    sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-  }
-  const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-  const svg = root.select(`[id="${id2}"]`);
-  const element = root.select("#" + id2 + " g");
-  render$1(
-    element,
-    g,
-    ["aggregation", "extension", "composition", "dependency", "lollipop"],
-    "classDiagram",
-    id2
-  );
-  mermaid_ae477ddf_utils.insertTitle(svg, "classTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle());
-  setupGraphViewbox$1(g, svg, conf2.diagramPadding, conf2.useMaxWidth);
-  if (!conf2.htmlLabels) {
-    const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document;
-    const labels = doc.querySelectorAll('[id="' + id2 + '"] .edgeLabel .label');
-    for (const label of labels) {
-      const dim = label.getBBox();
-      const rect2 = doc.createElementNS("http://www.w3.org/2000/svg", "rect");
-      rect2.setAttribute("rx", 0);
-      rect2.setAttribute("ry", 0);
-      rect2.setAttribute("width", dim.width);
-      rect2.setAttribute("height", dim.height);
-      label.insertBefore(rect2, label.firstChild);
-    }
-  }
-};
-function getArrowMarker(type2) {
-  let marker;
-  switch (type2) {
-    case 0:
-      marker = "aggregation";
-      break;
-    case 1:
-      marker = "extension";
-      break;
-    case 2:
-      marker = "composition";
-      break;
-    case 3:
-      marker = "dependency";
-      break;
-    case 4:
-      marker = "lollipop";
-      break;
-    default:
-      marker = "none";
-  }
-  return marker;
-}
-const classRendererV2 = {
-  setConf: setConf$9,
-  draw: draw$c
-};
-var parser$9 = function() {
-  var o = function(k, v, o2, l) {
-    for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
-      ;
-    return o2;
-  }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 23, 25, 27, 29, 30, 31, 51], $V3 = [1, 17], $V4 = [1, 18], $V5 = [1, 19], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 25], $Va = [1, 30], $Vb = [1, 31], $Vc = [1, 32], $Vd = [1, 33], $Ve = [6, 9, 11, 15, 20, 23, 25, 27, 29, 30, 31, 44, 45, 46, 47, 51], $Vf = [1, 45], $Vg = [30, 31, 48, 49], $Vh = [4, 6, 9, 11, 23, 25, 27, 29, 30, 31, 51], $Vi = [44, 45, 46, 47], $Vj = [22, 37], $Vk = [1, 65], $Vl = [1, 64], $Vm = [22, 37, 39, 41];
-  var parser2 = {
-    trace: function trace() {
-    },
-    yy: {},
-    symbols_: { "error": 2, "start": 3, "ER_DIAGRAM": 4, "document": 5, "EOF": 6, "directive": 7, "line": 8, "SPACE": 9, "statement": 10, "NEWLINE": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, ":": 15, "argDirective": 16, "entityName": 17, "relSpec": 18, "role": 19, "BLOCK_START": 20, "attributes": 21, "BLOCK_STOP": 22, "title": 23, "title_value": 24, "acc_title": 25, "acc_title_value": 26, "acc_descr": 27, "acc_descr_value": 28, "acc_descr_multiline_value": 29, "ALPHANUM": 30, "ENTITY_NAME": 31, "attribute": 32, "attributeType": 33, "attributeName": 34, "attributeKeyTypeList": 35, "attributeComment": 36, "ATTRIBUTE_WORD": 37, "attributeKeyType": 38, "COMMA": 39, "ATTRIBUTE_KEY": 40, "COMMENT": 41, "cardinality": 42, "relType": 43, "ZERO_OR_ONE": 44, "ZERO_OR_MORE": 45, "ONE_OR_MORE": 46, "ONLY_ONE": 47, "NON_IDENTIFYING": 48, "IDENTIFYING": 49, "WORD": 50, "open_directive": 51, "type_directive": 52, "arg_directive": 53, "close_directive": 54, "$accept": 0, "$end": 1 },
-    terminals_: { 2: "error", 4: "ER_DIAGRAM", 6: "EOF", 9: "SPACE", 11: "NEWLINE", 15: ":", 20: "BLOCK_START", 22: "BLOCK_STOP", 23: "title", 24: "title_value", 25: "acc_title", 26: "acc_title_value", 27: "acc_descr", 28: "acc_descr_value", 29: "acc_descr_multiline_value", 30: "ALPHANUM", 31: "ENTITY_NAME", 37: "ATTRIBUTE_WORD", 39: "COMMA", 40: "ATTRIBUTE_KEY", 41: "COMMENT", 44: "ZERO_OR_ONE", 45: "ZERO_OR_MORE", 46: "ONE_OR_MORE", 47: "ONLY_ONE", 48: "NON_IDENTIFYING", 49: "IDENTIFYING", 50: "WORD", 51: "open_directive", 52: "type_directive", 53: "arg_directive", 54: "close_directive" },
-    productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 5], [10, 4], [10, 3], [10, 1], [10, 2], [10, 2], [10, 2], [10, 1], [17, 1], [17, 1], [21, 1], [21, 2], [32, 2], [32, 3], [32, 3], [32, 4], [33, 1], [34, 1], [35, 1], [35, 3], [38, 1], [36, 1], [18, 3], [42, 1], [42, 1], [42, 1], [42, 1], [43, 1], [43, 1], [19, 1], [19, 1], [19, 1], [12, 1], [13, 1], [16, 1], [14, 1]],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
-      var $0 = $$.length - 1;
-      switch (yystate) {
-        case 1:
-          break;
-        case 3:
-          this.$ = [];
-          break;
-        case 4:
-          $$[$0 - 1].push($$[$0]);
-          this.$ = $$[$0 - 1];
-          break;
-        case 5:
-        case 6:
-          this.$ = $$[$0];
-          break;
-        case 7:
-        case 8:
-          this.$ = [];
-          break;
-        case 12:
-          yy.addEntity($$[$0 - 4]);
-          yy.addEntity($$[$0 - 2]);
-          yy.addRelationship($$[$0 - 4], $$[$0], $$[$0 - 2], $$[$0 - 3]);
-          break;
-        case 13:
-          yy.addEntity($$[$0 - 3]);
-          yy.addAttributes($$[$0 - 3], $$[$0 - 1]);
-          break;
-        case 14:
-          yy.addEntity($$[$0 - 2]);
-          break;
-        case 15:
-          yy.addEntity($$[$0]);
-          break;
-        case 16:
-        case 17:
-          this.$ = $$[$0].trim();
-          yy.setAccTitle(this.$);
-          break;
-        case 18:
-        case 19:
-          this.$ = $$[$0].trim();
-          yy.setAccDescription(this.$);
-          break;
-        case 20:
-        case 43:
-          this.$ = $$[$0];
-          break;
-        case 21:
-        case 41:
-        case 42:
-          this.$ = $$[$0].replace(/"/g, "");
-          break;
-        case 22:
-        case 30:
-          this.$ = [$$[$0]];
-          break;
-        case 23:
-          $$[$0].push($$[$0 - 1]);
-          this.$ = $$[$0];
-          break;
-        case 24:
-          this.$ = { attributeType: $$[$0 - 1], attributeName: $$[$0] };
-          break;
-        case 25:
-          this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeKeyTypeList: $$[$0] };
-          break;
-        case 26:
-          this.$ = { attributeType: $$[$0 - 2], attributeName: $$[$0 - 1], attributeComment: $$[$0] };
-          break;
-        case 27:
-          this.$ = { attributeType: $$[$0 - 3], attributeName: $$[$0 - 2], attributeKeyTypeList: $$[$0 - 1], attributeComment: $$[$0] };
-          break;
-        case 28:
-        case 29:
-        case 32:
-          this.$ = $$[$0];
-          break;
-        case 31:
-          $$[$0 - 2].push($$[$0]);
-          this.$ = $$[$0 - 2];
-          break;
-        case 33:
-          this.$ = $$[$0].replace(/"/g, "");
-          break;
-        case 34:
-          this.$ = { cardA: $$[$0], relType: $$[$0 - 1], cardB: $$[$0 - 2] };
-          break;
-        case 35:
-          this.$ = yy.Cardinality.ZERO_OR_ONE;
-          break;
-        case 36:
-          this.$ = yy.Cardinality.ZERO_OR_MORE;
-          break;
-        case 37:
-          this.$ = yy.Cardinality.ONE_OR_MORE;
-          break;
-        case 38:
-          this.$ = yy.Cardinality.ONLY_ONE;
-          break;
-        case 39:
-          this.$ = yy.Identification.NON_IDENTIFYING;
-          break;
-        case 40:
-          this.$ = yy.Identification.IDENTIFYING;
-          break;
-        case 44:
-          yy.parseDirective("%%{", "open_directive");
-          break;
-        case 45:
-          yy.parseDirective($$[$0], "type_directive");
-          break;
-        case 46:
-          $$[$0] = $$[$0].trim().replace(/'/g, '"');
-          yy.parseDirective($$[$0], "arg_directive");
-          break;
-        case 47:
-          yy.parseDirective("}%%", "close_directive", "er");
-          break;
-      }
-    },
-    table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 51: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 51: $V1 }, { 13: 8, 52: [1, 9] }, { 52: [2, 44] }, { 6: [1, 10], 7: 15, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: 16, 23: $V3, 25: $V4, 27: $V5, 29: $V6, 30: $V7, 31: $V8, 51: $V1 }, { 1: [2, 2] }, { 14: 23, 15: [1, 24], 54: $V9 }, o([15, 54], [2, 45]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 15, 10: 26, 12: 4, 17: 16, 23: $V3, 25: $V4, 27: $V5, 29: $V6, 30: $V7, 31: $V8, 51: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), o($V2, [2, 15], { 18: 27, 42: 29, 20: [1, 28], 44: $Va, 45: $Vb, 46: $Vc, 47: $Vd }), { 24: [1, 34] }, { 26: [1, 35] }, { 28: [1, 36] }, o($V2, [2, 19]), o($Ve, [2, 20]), o($Ve, [2, 21]), { 11: [1, 37] }, { 16: 38, 53: [1, 39] }, { 11: [2, 47] }, o($V2, [2, 5]), { 17: 40, 30: $V7, 31: $V8 }, { 21: 41, 22: [1, 42], 32: 43, 33: 44, 37: $Vf }, { 43: 46, 48: [1, 47], 49: [1, 48] }, o($Vg, [2, 35]), o($Vg, [2, 36]), o($Vg, [2, 37]), o($Vg, [2, 38]), o($V2, [2, 16]), o($V2, [2, 17]), o($V2, [2, 18]), o($Vh, [2, 9]), { 14: 49, 54: $V9 }, { 54: [2, 46] }, { 15: [1, 50] }, { 22: [1, 51] }, o($V2, [2, 14]), { 21: 52, 22: [2, 22], 32: 43, 33: 44, 37: $Vf }, { 34: 53, 37: [1, 54] }, { 37: [2, 28] }, { 42: 55, 44: $Va, 45: $Vb, 46: $Vc, 47: $Vd }, o($Vi, [2, 39]), o($Vi, [2, 40]), { 11: [1, 56] }, { 19: 57, 30: [1, 60], 31: [1, 59], 50: [1, 58] }, o($V2, [2, 13]), { 22: [2, 23] }, o($Vj, [2, 24], { 35: 61, 36: 62, 38: 63, 40: $Vk, 41: $Vl }), o([22, 37, 40, 41], [2, 29]), o([30, 31], [2, 34]), o($Vh, [2, 10]), o($V2, [2, 12]), o($V2, [2, 41]), o($V2, [2, 42]), o($V2, [2, 43]), o($Vj, [2, 25], { 36: 66, 39: [1, 67], 41: $Vl }), o($Vj, [2, 26]), o($Vm, [2, 30]), o($Vj, [2, 33]), o($Vm, [2, 32]), o($Vj, [2, 27]), { 38: 68, 40: $Vk }, o($Vm, [2, 31])],
-    defaultActions: { 5: [2, 44], 7: [2, 2], 25: [2, 47], 39: [2, 46], 45: [2, 28], 52: [2, 23] },
-    parseError: function parseError(str2, hash) {
-      if (hash.recoverable) {
-        this.trace(str2);
-      } else {
-        var error = new Error(str2);
-        error.hash = hash;
-        throw error;
-      }
-    },
-    parse: function parse2(input) {
-      var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;
-      var args = lstack.slice.call(arguments, 1);
-      var lexer2 = Object.create(this.lexer);
-      var sharedState = { yy: {} };
-      for (var k in this.yy) {
-        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
-          sharedState.yy[k] = this.yy[k];
-        }
-      }
-      lexer2.setInput(input, sharedState.yy);
-      sharedState.yy.lexer = lexer2;
-      sharedState.yy.parser = this;
-      if (typeof lexer2.yylloc == "undefined") {
-        lexer2.yylloc = {};
-      }
-      var yyloc = lexer2.yylloc;
-      lstack.push(yyloc);
-      var ranges = lexer2.options && lexer2.options.ranges;
-      if (typeof sharedState.yy.parseError === "function") {
-        this.parseError = sharedState.yy.parseError;
-      } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-      }
-      function lex2() {
-        var token;
-        token = tstack.pop() || lexer2.lex() || EOF;
-        if (typeof token !== "number") {
-          if (token instanceof Array) {
-            tstack = token;
-            token = tstack.pop();
-          }
-          token = self.symbols_[token] || token;
-        }
-        return token;
-      }
-      var symbol, state, action, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-          action = this.defaultActions[state];
-        } else {
-          if (symbol === null || typeof symbol == "undefined") {
-            symbol = lex2();
-          }
-          action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-          var errStr = "";
-          expected = [];
-          for (p in table[state]) {
-            if (this.terminals_[p] && p > TERROR) {
-              expected.push("'" + this.terminals_[p] + "'");
-            }
-          }
-          if (lexer2.showPosition) {
-            errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-          } else {
-            errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
-          }
-          this.parseError(errStr, {
-            text: lexer2.match,
-            token: this.terminals_[symbol] || symbol,
-            line: lexer2.yylineno,
-            loc: yyloc,
-            expected
-          });
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-          throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-          case 1:
-            stack.push(symbol);
-            vstack.push(lexer2.yytext);
-            lstack.push(lexer2.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            {
-              yyleng = lexer2.yyleng;
-              yytext = lexer2.yytext;
-              yylineno = lexer2.yylineno;
-              yyloc = lexer2.yylloc;
-            }
-            break;
-          case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-              first_line: lstack[lstack.length - (len || 1)].first_line,
-              last_line: lstack[lstack.length - 1].last_line,
-              first_column: lstack[lstack.length - (len || 1)].first_column,
-              last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-              yyval._$.range = [
-                lstack[lstack.length - (len || 1)].range[0],
-                lstack[lstack.length - 1].range[1]
-              ];
-            }
-            r = this.performAction.apply(yyval, [
-              yytext,
-              yyleng,
-              yylineno,
-              sharedState.yy,
-              action[1],
-              vstack,
-              lstack
-            ].concat(args));
-            if (typeof r !== "undefined") {
-              return r;
-            }
-            if (len) {
-              stack = stack.slice(0, -1 * len * 2);
-              vstack = vstack.slice(0, -1 * len);
-              lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-          case 3:
-            return true;
-        }
-      }
-      return true;
-    }
-  };
-  var lexer = function() {
-    var lexer2 = {
-      EOF: 1,
-      parseError: function parseError(str2, hash) {
-        if (this.yy.parser) {
-          this.yy.parser.parseError(str2, hash);
-        } else {
-          throw new Error(str2);
-        }
-      },
-      // resets the lexer, sets new input
-      setInput: function(input, yy) {
-        this.yy = yy || this.yy || {};
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = "";
-        this.conditionStack = ["INITIAL"];
-        this.yylloc = {
-          first_line: 1,
-          first_column: 0,
-          last_line: 1,
-          last_column: 0
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [0, 0];
-        }
-        this.offset = 0;
-        return this;
-      },
-      // consumes and returns one char from the input
-      input: function() {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno++;
-          this.yylloc.last_line++;
-        } else {
-          this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-          this.yylloc.range[1]++;
-        }
-        this._input = this._input.slice(1);
-        return ch;
-      },
-      // unshifts one char (or a string) into the input
-      unput: function(ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len);
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-        if (lines.length - 1) {
-          this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-        this.yylloc = {
-          first_line: this.yylloc.first_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.first_column,
-          last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-      },
-      // When called from action, caches matched text and appends it on next action
-      more: function() {
-        this._more = true;
-        return this;
-      },
-      // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-      reject: function() {
-        if (this.options.backtrack_lexer) {
-          this._backtrack = true;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-        return this;
-      },
-      // retain first n characters of the match
-      less: function(n) {
-        this.unput(this.match.slice(n));
-      },
-      // displays already matched input, i.e. for error messages
-      pastInput: function() {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
-      },
-      // displays upcoming input, i.e. for error messages
-      upcomingInput: function() {
-        var next = this.match;
-        if (next.length < 20) {
-          next += this._input.substr(0, 20 - next.length);
-        }
-        return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
-      },
-      // displays the character position where the lexing error occurred, i.e. for error messages
-      showPosition: function() {
-        var pre = this.pastInput();
-        var c2 = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c2 + "^";
-      },
-      // test the lexed token: return FALSE when not a match, otherwise return token
-      test_match: function(match, indexed_rule) {
-        var token, lines, backup;
-        if (this.options.backtrack_lexer) {
-          backup = {
-            yylineno: this.yylineno,
-            yylloc: {
-              first_line: this.yylloc.first_line,
-              last_line: this.last_line,
-              first_column: this.yylloc.first_column,
-              last_column: this.yylloc.last_column
-            },
-            yytext: this.yytext,
-            match: this.match,
-            matches: this.matches,
-            matched: this.matched,
-            yyleng: this.yyleng,
-            offset: this.offset,
-            _more: this._more,
-            _input: this._input,
-            yy: this.yy,
-            conditionStack: this.conditionStack.slice(0),
-            done: this.done
-          };
-          if (this.options.ranges) {
-            backup.yylloc.range = this.yylloc.range.slice(0);
-          }
-        }
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno += lines.length;
-        }
-        this.yylloc = {
-          first_line: this.yylloc.last_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.last_column,
-          last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-          this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-          this.done = false;
-        }
-        if (token) {
-          return token;
-        } else if (this._backtrack) {
-          for (var k in backup) {
-            this[k] = backup[k];
-          }
-          return false;
-        }
-        return false;
-      },
-      // return next match in input
-      next: function() {
-        if (this.done) {
-          return this.EOF;
-        }
-        if (!this._input) {
-          this.done = true;
-        }
-        var token, match, tempMatch, index;
-        if (!this._more) {
-          this.yytext = "";
-          this.match = "";
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-          tempMatch = this._input.match(this.rules[rules[i]]);
-          if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-            match = tempMatch;
-            index = i;
-            if (this.options.backtrack_lexer) {
-              token = this.test_match(tempMatch, rules[i]);
-              if (token !== false) {
-                return token;
-              } else if (this._backtrack) {
-                match = false;
-                continue;
-              } else {
-                return false;
-              }
-            } else if (!this.options.flex) {
-              break;
-            }
-          }
-        }
-        if (match) {
-          token = this.test_match(match, rules[index]);
-          if (token !== false) {
-            return token;
-          }
-          return false;
-        }
-        if (this._input === "") {
-          return this.EOF;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-      },
-      // return next match that has a token
-      lex: function lex2() {
-        var r = this.next();
-        if (r) {
-          return r;
-        } else {
-          return this.lex();
-        }
-      },
-      // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-      begin: function begin(condition) {
-        this.conditionStack.push(condition);
-      },
-      // pop the previously active lexer condition state off the condition stack
-      popState: function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-          return this.conditionStack.pop();
-        } else {
-          return this.conditionStack[0];
-        }
-      },
-      // produce the lexer rule set which is active for the currently active lexer condition state
-      _currentRules: function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-          return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-          return this.conditions["INITIAL"].rules;
-        }
-      },
-      // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-      topState: function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-          return this.conditionStack[n];
-        } else {
-          return "INITIAL";
-        }
-      },
-      // alias for begin(condition)
-      pushState: function pushState(condition) {
-        this.begin(condition);
-      },
-      // return the number of states currently on the stack
-      stateStackSize: function stateStackSize() {
-        return this.conditionStack.length;
-      },
-      options: { "case-insensitive": true },
-      performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
-        switch ($avoiding_name_collisions) {
-          case 0:
-            this.begin("acc_title");
-            return 25;
-          case 1:
-            this.popState();
-            return "acc_title_value";
-          case 2:
-            this.begin("acc_descr");
-            return 27;
-          case 3:
-            this.popState();
-            return "acc_descr_value";
-          case 4:
-            this.begin("acc_descr_multiline");
-            break;
-          case 5:
-            this.popState();
-            break;
-          case 6:
-            return "acc_descr_multiline_value";
-          case 7:
-            this.begin("open_directive");
-            return 51;
-          case 8:
-            this.begin("type_directive");
-            return 52;
-          case 9:
-            this.popState();
-            this.begin("arg_directive");
-            return 15;
-          case 10:
-            this.popState();
-            this.popState();
-            return 54;
-          case 11:
-            return 53;
-          case 12:
-            break;
-          case 13:
-            break;
-          case 14:
-            return 11;
-          case 15:
-            break;
-          case 16:
-            return 9;
-          case 17:
-            return 31;
-          case 18:
-            return 50;
-          case 19:
-            return 4;
-          case 20:
-            this.begin("block");
-            return 20;
-          case 21:
-            return 39;
-          case 22:
-            break;
-          case 23:
-            return 40;
-          case 24:
-            return 37;
-          case 25:
-            return 37;
-          case 26:
-            return 41;
-          case 27:
-            break;
-          case 28:
-            this.popState();
-            return 22;
-          case 29:
-            return yy_.yytext[0];
-          case 30:
-            return 44;
-          case 31:
-            return 46;
-          case 32:
-            return 46;
-          case 33:
-            return 46;
-          case 34:
-            return 44;
-          case 35:
-            return 44;
-          case 36:
-            return 45;
-          case 37:
-            return 45;
-          case 38:
-            return 45;
-          case 39:
-            return 45;
-          case 40:
-            return 45;
-          case 41:
-            return 46;
-          case 42:
-            return 45;
-          case 43:
-            return 46;
-          case 44:
-            return 47;
-          case 45:
-            return 47;
-          case 46:
-            return 47;
-          case 47:
-            return 47;
-          case 48:
-            return 44;
-          case 49:
-            return 45;
-          case 50:
-            return 46;
-          case 51:
-            return 48;
-          case 52:
-            return 49;
-          case 53:
-            return 49;
-          case 54:
-            return 48;
-          case 55:
-            return 48;
-          case 56:
-            return 48;
-          case 57:
-            return 30;
-          case 58:
-            return yy_.yytext[0];
-          case 59:
-            return 6;
-        }
-      },
-      rules: [/^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:[\s]+)/i, /^(?:"[^"%\r\n\v\b\\]+")/i, /^(?:"[^"]*")/i, /^(?:erDiagram\b)/i, /^(?:\{)/i, /^(?:,)/i, /^(?:\s+)/i, /^(?:\b((?:PK)|(?:FK)|(?:UK))\b)/i, /^(?:(.*?)[~](.*?)*[~])/i, /^(?:[A-Za-z_][A-Za-z0-9\-_\[\]\(\)]*)/i, /^(?:"[^"]*")/i, /^(?:[\n]+)/i, /^(?:\})/i, /^(?:.)/i, /^(?:one or zero\b)/i, /^(?:one or more\b)/i, /^(?:one or many\b)/i, /^(?:1\+)/i, /^(?:\|o\b)/i, /^(?:zero or one\b)/i, /^(?:zero or more\b)/i, /^(?:zero or many\b)/i, /^(?:0\+)/i, /^(?:\}o\b)/i, /^(?:many\(0\))/i, /^(?:many\(1\))/i, /^(?:many\b)/i, /^(?:\}\|)/i, /^(?:one\b)/i, /^(?:only one\b)/i, /^(?:1\b)/i, /^(?:\|\|)/i, /^(?:o\|)/i, /^(?:o\{)/i, /^(?:\|\{)/i, /^(?:\.\.)/i, /^(?:--)/i, /^(?:to\b)/i, /^(?:optionally to\b)/i, /^(?:\.-)/i, /^(?:-\.)/i, /^(?:[A-Za-z][A-Za-z0-9\-_]*)/i, /^(?:.)/i, /^(?:$)/i],
-      conditions: { "acc_descr_multiline": { "rules": [5, 6], "inclusive": false }, "acc_descr": { "rules": [3], "inclusive": false }, "acc_title": { "rules": [1], "inclusive": false }, "open_directive": { "rules": [8], "inclusive": false }, "type_directive": { "rules": [9, 10], "inclusive": false }, "arg_directive": { "rules": [10, 11], "inclusive": false }, "block": { "rules": [21, 22, 23, 24, 25, 26, 27, 28, 29], "inclusive": false }, "INITIAL": { "rules": [0, 2, 4, 7, 12, 13, 14, 15, 16, 17, 18, 19, 20, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59], "inclusive": true } }
-    };
-    return lexer2;
-  }();
-  parser2.lexer = lexer;
-  function Parser() {
-    this.yy = {};
-  }
-  Parser.prototype = parser2;
-  parser2.Parser = Parser;
-  return new Parser();
-}();
-parser$9.parser = parser$9;
-const erParser = parser$9;
-const erDetector = (txt) => {
-  return txt.match(/^\s*erDiagram/) !== null;
-};
-let entities = {};
-let relationships = [];
-const Cardinality = {
-  ZERO_OR_ONE: "ZERO_OR_ONE",
-  ZERO_OR_MORE: "ZERO_OR_MORE",
-  ONE_OR_MORE: "ONE_OR_MORE",
-  ONLY_ONE: "ONLY_ONE"
-};
-const Identification = {
-  NON_IDENTIFYING: "NON_IDENTIFYING",
-  IDENTIFYING: "IDENTIFYING"
-};
-const parseDirective$7 = function(statement, context, type2) {
-  mermaidAPI.parseDirective(this, statement, context, type2);
-};
-const addEntity = function(name) {
-  if (entities[name] === void 0) {
-    entities[name] = { attributes: [] };
-    log$1.info("Added new entity :", name);
-  }
-  return entities[name];
-};
-const getEntities = () => entities;
-const addAttributes = function(entityName, attribs) {
-  let entity = addEntity(entityName);
-  let i;
-  for (i = attribs.length - 1; i >= 0; i--) {
-    entity.attributes.push(attribs[i]);
-    log$1.debug("Added attribute ", attribs[i].attributeName);
-  }
-};
-const addRelationship$1 = function(entA, rolA, entB, rSpec) {
-  let rel = {
-    entityA: entA,
-    roleA: rolA,
-    entityB: entB,
-    relSpec: rSpec
-  };
-  relationships.push(rel);
-  log$1.debug("Added new relationship :", rel);
-};
-const getRelationships$1 = () => relationships;
-const clear$7 = function() {
-  entities = {};
-  relationships = [];
-  clear$g();
-};
-const erDb = {
-  Cardinality,
-  Identification,
-  parseDirective: parseDirective$7,
-  getConfig: () => getConfig$1().er,
-  addEntity,
-  addAttributes,
-  getEntities,
-  addRelationship: addRelationship$1,
-  getRelationships: getRelationships$1,
-  clear: clear$7,
-  setAccTitle,
-  getAccTitle,
-  setAccDescription,
-  getAccDescription,
-  setDiagramTitle,
-  getDiagramTitle
-};
-const ERMarkers = {
-  ONLY_ONE_START: "ONLY_ONE_START",
-  ONLY_ONE_END: "ONLY_ONE_END",
-  ZERO_OR_ONE_START: "ZERO_OR_ONE_START",
-  ZERO_OR_ONE_END: "ZERO_OR_ONE_END",
-  ONE_OR_MORE_START: "ONE_OR_MORE_START",
-  ONE_OR_MORE_END: "ONE_OR_MORE_END",
-  ZERO_OR_MORE_START: "ZERO_OR_MORE_START",
-  ZERO_OR_MORE_END: "ZERO_OR_MORE_END"
-};
-const insertMarkers$1 = function(elem, conf2) {
-  let marker;
-  elem.append("defs").append("marker").attr("id", ERMarkers.ONLY_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M9,0 L9,18 M15,0 L15,18");
-  elem.append("defs").append("marker").attr("id", ERMarkers.ONLY_ONE_END).attr("refX", 18).attr("refY", 9).attr("markerWidth", 18).attr("markerHeight", 18).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M3,0 L3,18 M9,0 L9,18");
-  marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_START).attr("refX", 0).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto");
-  marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 21).attr("cy", 9).attr("r", 6);
-  marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M9,0 L9,18");
-  marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_ONE_END).attr("refX", 30).attr("refY", 9).attr("markerWidth", 30).attr("markerHeight", 18).attr("orient", "auto");
-  marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 9).attr("r", 6);
-  marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M21,0 L21,18");
-  elem.append("defs").append("marker").attr("id", ERMarkers.ONE_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M0,18 Q 18,0 36,18 Q 18,36 0,18 M42,9 L42,27");
-  elem.append("defs").append("marker").attr("id", ERMarkers.ONE_OR_MORE_END).attr("refX", 27).attr("refY", 18).attr("markerWidth", 45).attr("markerHeight", 36).attr("orient", "auto").append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M3,9 L3,27 M9,18 Q27,0 45,18 Q27,36 9,18");
-  marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_START).attr("refX", 18).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto");
-  marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 48).attr("cy", 18).attr("r", 6);
-  marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M0,18 Q18,0 36,18 Q18,36 0,18");
-  marker = elem.append("defs").append("marker").attr("id", ERMarkers.ZERO_OR_MORE_END).attr("refX", 39).attr("refY", 18).attr("markerWidth", 57).attr("markerHeight", 36).attr("orient", "auto");
-  marker.append("circle").attr("stroke", conf2.stroke).attr("fill", "white").attr("cx", 9).attr("cy", 18).attr("r", 6);
-  marker.append("path").attr("stroke", conf2.stroke).attr("fill", "none").attr("d", "M21,18 Q39,0 57,18 Q39,36 21,18");
-  return;
-};
-const erMarkers = {
-  ERMarkers,
-  insertMarkers: insertMarkers$1
-};
-const BAD_ID_CHARS_REGEXP = /[^\dA-Za-z](\W)*/g;
-let conf$8 = {};
-let entityNameIds = /* @__PURE__ */ new Map();
-const setConf$8 = function(cnf) {
-  const keys2 = Object.keys(cnf);
-  for (const key of keys2) {
-    conf$8[key] = cnf[key];
-  }
-};
-const drawAttributes = (groupNode, entityTextNode, attributes) => {
-  const heightPadding = conf$8.entityPadding / 3;
-  const widthPadding = conf$8.entityPadding / 3;
-  const attrFontSize = conf$8.fontSize * 0.85;
-  const labelBBox = entityTextNode.node().getBBox();
-  const attributeNodes = [];
-  let hasKeyType = false;
-  let hasComment = false;
-  let maxTypeWidth = 0;
-  let maxNameWidth = 0;
-  let maxKeyWidth = 0;
-  let maxCommentWidth = 0;
-  let cumulativeHeight = labelBBox.height + heightPadding * 2;
-  let attrNum = 1;
-  attributes.forEach((item) => {
-    if (item.attributeKeyTypeList !== void 0 && item.attributeKeyTypeList.length > 0) {
-      hasKeyType = true;
-    }
-    if (item.attributeComment !== void 0) {
-      hasComment = true;
-    }
-  });
-  attributes.forEach((item) => {
-    const attrPrefix = `${entityTextNode.node().id}-attr-${attrNum}`;
-    let nodeHeight = 0;
-    const attributeType = parseGenericTypes(item.attributeType);
-    const typeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-type`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", getConfig$1().fontFamily).style("font-size", attrFontSize + "px").text(attributeType);
-    const nameNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-name`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", getConfig$1().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeName);
-    const attributeNode = {};
-    attributeNode.tn = typeNode;
-    attributeNode.nn = nameNode;
-    const typeBBox = typeNode.node().getBBox();
-    const nameBBox = nameNode.node().getBBox();
-    maxTypeWidth = Math.max(maxTypeWidth, typeBBox.width);
-    maxNameWidth = Math.max(maxNameWidth, nameBBox.width);
-    nodeHeight = Math.max(typeBBox.height, nameBBox.height);
-    if (hasKeyType) {
-      const keyTypeNodeText = item.attributeKeyTypeList !== void 0 ? item.attributeKeyTypeList.join(",") : "";
-      const keyTypeNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-key`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", getConfig$1().fontFamily).style("font-size", attrFontSize + "px").text(keyTypeNodeText);
-      attributeNode.kn = keyTypeNode;
-      const keyTypeBBox = keyTypeNode.node().getBBox();
-      maxKeyWidth = Math.max(maxKeyWidth, keyTypeBBox.width);
-      nodeHeight = Math.max(nodeHeight, keyTypeBBox.height);
-    }
-    if (hasComment) {
-      const commentNode = groupNode.append("text").classed("er entityLabel", true).attr("id", `${attrPrefix}-comment`).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "left").style("font-family", getConfig$1().fontFamily).style("font-size", attrFontSize + "px").text(item.attributeComment || "");
-      attributeNode.cn = commentNode;
-      const commentNodeBBox = commentNode.node().getBBox();
-      maxCommentWidth = Math.max(maxCommentWidth, commentNodeBBox.width);
-      nodeHeight = Math.max(nodeHeight, commentNodeBBox.height);
-    }
-    attributeNode.height = nodeHeight;
-    attributeNodes.push(attributeNode);
-    cumulativeHeight += nodeHeight + heightPadding * 2;
-    attrNum += 1;
-  });
-  let widthPaddingFactor = 4;
-  if (hasKeyType) {
-    widthPaddingFactor += 2;
-  }
-  if (hasComment) {
-    widthPaddingFactor += 2;
-  }
-  const maxWidth = maxTypeWidth + maxNameWidth + maxKeyWidth + maxCommentWidth;
-  const bBox = {
-    width: Math.max(
-      conf$8.minEntityWidth,
-      Math.max(
-        labelBBox.width + conf$8.entityPadding * 2,
-        maxWidth + widthPadding * widthPaddingFactor
-      )
-    ),
-    height: attributes.length > 0 ? cumulativeHeight : Math.max(conf$8.minEntityHeight, labelBBox.height + conf$8.entityPadding * 2)
-  };
-  if (attributes.length > 0) {
-    const spareColumnWidth = Math.max(
-      0,
-      (bBox.width - maxWidth - widthPadding * widthPaddingFactor) / (widthPaddingFactor / 2)
-    );
-    entityTextNode.attr(
-      "transform",
-      "translate(" + bBox.width / 2 + "," + (heightPadding + labelBBox.height / 2) + ")"
-    );
-    let heightOffset = labelBBox.height + heightPadding * 2;
-    let attribStyle = "attributeBoxOdd";
-    attributeNodes.forEach((attributeNode) => {
-      const alignY = heightOffset + heightPadding + attributeNode.height / 2;
-      attributeNode.tn.attr("transform", "translate(" + widthPadding + "," + alignY + ")");
-      const typeRect = groupNode.insert("rect", "#" + attributeNode.tn.node().id).classed(`er ${attribStyle}`, true).attr("x", 0).attr("y", heightOffset).attr("width", maxTypeWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2);
-      const nameXOffset = parseFloat(typeRect.attr("x")) + parseFloat(typeRect.attr("width"));
-      attributeNode.nn.attr(
-        "transform",
-        "translate(" + (nameXOffset + widthPadding) + "," + alignY + ")"
-      );
-      const nameRect = groupNode.insert("rect", "#" + attributeNode.nn.node().id).classed(`er ${attribStyle}`, true).attr("x", nameXOffset).attr("y", heightOffset).attr("width", maxNameWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2);
-      let keyTypeAndCommentXOffset = parseFloat(nameRect.attr("x")) + parseFloat(nameRect.attr("width"));
-      if (hasKeyType) {
-        attributeNode.kn.attr(
-          "transform",
-          "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")"
-        );
-        const keyTypeRect = groupNode.insert("rect", "#" + attributeNode.kn.node().id).classed(`er ${attribStyle}`, true).attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxKeyWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2);
-        keyTypeAndCommentXOffset = parseFloat(keyTypeRect.attr("x")) + parseFloat(keyTypeRect.attr("width"));
-      }
-      if (hasComment) {
-        attributeNode.cn.attr(
-          "transform",
-          "translate(" + (keyTypeAndCommentXOffset + widthPadding) + "," + alignY + ")"
-        );
-        groupNode.insert("rect", "#" + attributeNode.cn.node().id).classed(`er ${attribStyle}`, "true").attr("x", keyTypeAndCommentXOffset).attr("y", heightOffset).attr("width", maxCommentWidth + widthPadding * 2 + spareColumnWidth).attr("height", attributeNode.height + heightPadding * 2);
-      }
-      heightOffset += attributeNode.height + heightPadding * 2;
-      attribStyle = attribStyle === "attributeBoxOdd" ? "attributeBoxEven" : "attributeBoxOdd";
-    });
-  } else {
-    bBox.height = Math.max(conf$8.minEntityHeight, cumulativeHeight);
-    entityTextNode.attr("transform", "translate(" + bBox.width / 2 + "," + bBox.height / 2 + ")");
-  }
-  return bBox;
-};
-const drawEntities = function(svgNode, entities2, graph) {
-  const keys2 = Object.keys(entities2);
-  let firstOne;
-  keys2.forEach(function(entityName) {
-    const entityId = generateId(entityName, "entity");
-    entityNameIds.set(entityName, entityId);
-    const groupNode = svgNode.append("g").attr("id", entityId);
-    firstOne = firstOne === void 0 ? entityId : firstOne;
-    const textId = "text-" + entityId;
-    const textNode = groupNode.append("text").classed("er entityLabel", true).attr("id", textId).attr("x", 0).attr("y", 0).style("dominant-baseline", "middle").style("text-anchor", "middle").style("font-family", getConfig$1().fontFamily).style("font-size", conf$8.fontSize + "px").text(entityName);
-    const { width: entityWidth, height: entityHeight } = drawAttributes(
-      groupNode,
-      textNode,
-      entities2[entityName].attributes
-    );
-    const rectNode = groupNode.insert("rect", "#" + textId).classed("er entityBox", true).attr("x", 0).attr("y", 0).attr("width", entityWidth).attr("height", entityHeight);
-    const rectBBox = rectNode.node().getBBox();
-    graph.setNode(entityId, {
-      width: rectBBox.width,
-      height: rectBBox.height,
-      shape: "rect",
-      id: entityId
-    });
-  });
-  return firstOne;
-};
-const adjustEntities$1 = function(svgNode, graph) {
-  graph.nodes().forEach(function(v) {
-    if (v !== void 0 && graph.node(v) !== void 0) {
-      svgNode.select("#" + v).attr(
-        "transform",
-        "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y - graph.node(v).height / 2) + " )"
-      );
-    }
-  });
-};
-const getEdgeName = function(rel) {
-  return (rel.entityA + rel.roleA + rel.entityB).replace(/\s/g, "");
-};
-const addRelationships$1 = function(relationships2, g) {
-  relationships2.forEach(function(r) {
-    g.setEdge(
-      entityNameIds.get(r.entityA),
-      entityNameIds.get(r.entityB),
-      { relationship: r },
-      getEdgeName(r)
-    );
-  });
-  return relationships2;
-};
-let relCnt$1 = 0;
-const drawRelationshipFromLayout$1 = function(svg, rel, g, insert, diagObj) {
-  relCnt$1++;
-  const edge = g.edge(
-    entityNameIds.get(rel.entityA),
-    entityNameIds.get(rel.entityB),
-    getEdgeName(rel)
-  );
-  const lineFunction = (0,src/* line */.jvg)().x(function(d) {
-    return d.x;
-  }).y(function(d) {
-    return d.y;
-  }).curve(src/* curveBasis */.$0Z);
-  const svgPath = svg.insert("path", "#" + insert).classed("er relationshipLine", true).attr("d", lineFunction(edge.points)).style("stroke", conf$8.stroke).style("fill", "none");
-  if (rel.relSpec.relType === diagObj.db.Identification.NON_IDENTIFYING) {
-    svgPath.attr("stroke-dasharray", "8,8");
-  }
-  let url = "";
-  if (conf$8.arrowMarkerAbsolute) {
-    url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search;
-    url = url.replace(/\(/g, "\\(");
-    url = url.replace(/\)/g, "\\)");
-  }
-  switch (rel.relSpec.cardA) {
-    case diagObj.db.Cardinality.ZERO_OR_ONE:
-      svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_ONE_END + ")");
-      break;
-    case diagObj.db.Cardinality.ZERO_OR_MORE:
-      svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_MORE_END + ")");
-      break;
-    case diagObj.db.Cardinality.ONE_OR_MORE:
-      svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ONE_OR_MORE_END + ")");
-      break;
-    case diagObj.db.Cardinality.ONLY_ONE:
-      svgPath.attr("marker-end", "url(" + url + "#" + erMarkers.ERMarkers.ONLY_ONE_END + ")");
-      break;
-  }
-  switch (rel.relSpec.cardB) {
-    case diagObj.db.Cardinality.ZERO_OR_ONE:
-      svgPath.attr(
-        "marker-start",
-        "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_ONE_START + ")"
-      );
-      break;
-    case diagObj.db.Cardinality.ZERO_OR_MORE:
-      svgPath.attr(
-        "marker-start",
-        "url(" + url + "#" + erMarkers.ERMarkers.ZERO_OR_MORE_START + ")"
-      );
-      break;
-    case diagObj.db.Cardinality.ONE_OR_MORE:
-      svgPath.attr(
-        "marker-start",
-        "url(" + url + "#" + erMarkers.ERMarkers.ONE_OR_MORE_START + ")"
-      );
-      break;
-    case diagObj.db.Cardinality.ONLY_ONE:
-      svgPath.attr("marker-start", "url(" + url + "#" + erMarkers.ERMarkers.ONLY_ONE_START + ")");
-      break;
-  }
-  const len = svgPath.node().getTotalLength();
-  const labelPoint = svgPath.node().getPointAtLength(len * 0.5);
-  const labelId = "rel" + relCnt$1;
-  const labelNode = svg.append("text").classed("er relationshipLabel", true).attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).style("text-anchor", "middle").style("dominant-baseline", "middle").style("font-family", getConfig$1().fontFamily).style("font-size", conf$8.fontSize + "px").text(rel.roleA);
-  const labelBBox = labelNode.node().getBBox();
-  svg.insert("rect", "#" + labelId).classed("er relationshipLabelBox", true).attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height);
-};
-const draw$b = function(text, id2, _version, diagObj) {
-  conf$8 = getConfig$1().er;
-  log$1.info("Drawing ER diagram");
-  const securityLevel = getConfig$1().securityLevel;
-  let sandboxElement;
-  if (securityLevel === "sandbox") {
-    sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-  }
-  const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-  const svg = root.select(`[id='${id2}']`);
-  erMarkers.insertMarkers(svg, conf$8);
-  let g;
-  g = new graphlib/* Graph */.k({
-    multigraph: true,
-    directed: true,
-    compound: false
-  }).setGraph({
-    rankdir: conf$8.layoutDirection,
-    marginx: 20,
-    marginy: 20,
-    nodesep: 100,
-    edgesep: 100,
-    ranksep: 100
-  }).setDefaultEdgeLabel(function() {
-    return {};
-  });
-  const firstEntity = drawEntities(svg, diagObj.db.getEntities(), g);
-  const relationships2 = addRelationships$1(diagObj.db.getRelationships(), g);
-  (0,dagre/* layout */.bK)(g);
-  adjustEntities$1(svg, g);
-  relationships2.forEach(function(rel) {
-    drawRelationshipFromLayout$1(svg, rel, g, firstEntity, diagObj);
-  });
-  const padding2 = conf$8.diagramPadding;
-  mermaid_ae477ddf_utils.insertTitle(svg, "entityTitleText", conf$8.titleTopMargin, diagObj.db.getDiagramTitle());
-  const svgBounds = svg.node().getBBox();
-  const width2 = svgBounds.width + padding2 * 2;
-  const height2 = svgBounds.height + padding2 * 2;
-  configureSvgSize(svg, height2, width2, conf$8.useMaxWidth);
-  svg.attr("viewBox", `${svgBounds.x - padding2} ${svgBounds.y - padding2} ${width2} ${height2}`);
-};
-const MERMAID_ERDIAGRAM_UUID = "28e9f9db-3c8d-5aa5-9faf-44286ae5937c";
-function generateId(str2 = "", prefix = "") {
-  const simplifiedStr = str2.replace(BAD_ID_CHARS_REGEXP, "");
-  return `${strWithHyphen(prefix)}${strWithHyphen(simplifiedStr)}${esm_node_v5(
-    str2,
-    MERMAID_ERDIAGRAM_UUID
-  )}`;
-}
-function strWithHyphen(str2 = "") {
-  return str2.length > 0 ? `${str2}-` : "";
-}
-const erRenderer = {
-  setConf: setConf$8,
-  draw: draw$b
-};
-var parser$7 = function() {
-  var o = function(k, v, o2, l) {
-    for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
-      ;
-    return o2;
-  }, $V0 = [1, 9], $V1 = [1, 7], $V2 = [1, 6], $V3 = [1, 8], $V4 = [1, 20, 21, 22, 23, 38, 44, 46, 48, 52, 66, 67, 86, 87, 88, 89, 90, 91, 95, 105, 106, 109, 111, 112, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127], $V5 = [2, 10], $V6 = [1, 20], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 30], $Vb = [1, 32], $Vc = [1, 33], $Vd = [1, 34], $Ve = [1, 62], $Vf = [1, 48], $Vg = [1, 52], $Vh = [1, 36], $Vi = [1, 37], $Vj = [1, 38], $Vk = [1, 39], $Vl = [1, 40], $Vm = [1, 56], $Vn = [1, 63], $Vo = [1, 51], $Vp = [1, 53], $Vq = [1, 55], $Vr = [1, 59], $Vs = [1, 60], $Vt = [1, 41], $Vu = [1, 42], $Vv = [1, 43], $Vw = [1, 44], $Vx = [1, 61], $Vy = [1, 50], $Vz = [1, 54], $VA = [1, 57], $VB = [1, 58], $VC = [1, 49], $VD = [1, 66], $VE = [1, 71], $VF = [1, 20, 21, 22, 23, 38, 42, 44, 46, 48, 52, 66, 67, 86, 87, 88, 89, 90, 91, 95, 105, 106, 109, 111, 112, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127], $VG = [1, 75], $VH = [1, 74], $VI = [1, 76], $VJ = [20, 21, 23, 81, 82], $VK = [1, 99], $VL = [1, 104], $VM = [1, 107], $VN = [1, 108], $VO = [1, 101], $VP = [1, 106], $VQ = [1, 109], $VR = [1, 102], $VS = [1, 114], $VT = [1, 113], $VU = [1, 103], $VV = [1, 105], $VW = [1, 110], $VX = [1, 111], $VY = [1, 112], $VZ = [1, 115], $V_ = [20, 21, 22, 23, 81, 82], $V$ = [20, 21, 22, 23, 53, 81, 82], $V01 = [20, 21, 22, 23, 40, 52, 53, 55, 57, 59, 61, 63, 65, 66, 67, 69, 71, 73, 74, 76, 81, 82, 91, 95, 105, 106, 109, 111, 112, 122, 123, 124, 125, 126, 127], $V11 = [20, 21, 23], $V21 = [20, 21, 23, 52, 66, 67, 81, 82, 91, 95, 105, 106, 109, 111, 112, 122, 123, 124, 125, 126, 127], $V31 = [1, 12, 20, 21, 22, 23, 24, 38, 42, 44, 46, 48, 52, 66, 67, 86, 87, 88, 89, 90, 91, 95, 105, 106, 109, 111, 112, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127], $V41 = [52, 66, 67, 91, 95, 105, 106, 109, 111, 112, 122, 123, 124, 125, 126, 127], $V51 = [1, 149], $V61 = [1, 157], $V71 = [1, 158], $V81 = [1, 159], $V91 = [1, 160], $Va1 = [1, 144], $Vb1 = [1, 145], $Vc1 = [1, 141], $Vd1 = [1, 152], $Ve1 = [1, 153], $Vf1 = [1, 154], $Vg1 = [1, 155], $Vh1 = [1, 156], $Vi1 = [1, 161], $Vj1 = [1, 162], $Vk1 = [1, 147], $Vl1 = [1, 150], $Vm1 = [1, 146], $Vn1 = [1, 143], $Vo1 = [20, 21, 22, 23, 38, 42, 44, 46, 48, 52, 66, 67, 86, 87, 88, 89, 90, 91, 95, 105, 106, 109, 111, 112, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127], $Vp1 = [1, 165], $Vq1 = [20, 21, 22, 23, 26, 52, 66, 67, 91, 105, 106, 109, 111, 112, 122, 123, 124, 125, 126, 127], $Vr1 = [20, 21, 22, 23, 24, 26, 38, 40, 41, 42, 52, 56, 58, 60, 62, 64, 66, 67, 68, 70, 72, 73, 75, 77, 81, 82, 86, 87, 88, 89, 90, 91, 92, 95, 105, 106, 109, 111, 112, 113, 114, 122, 123, 124, 125, 126, 127], $Vs1 = [12, 21, 22, 24], $Vt1 = [22, 106], $Vu1 = [1, 250], $Vv1 = [1, 245], $Vw1 = [1, 246], $Vx1 = [1, 254], $Vy1 = [1, 251], $Vz1 = [1, 248], $VA1 = [1, 247], $VB1 = [1, 249], $VC1 = [1, 252], $VD1 = [1, 253], $VE1 = [1, 255], $VF1 = [1, 273], $VG1 = [20, 21, 23, 106], $VH1 = [20, 21, 22, 23, 66, 67, 86, 102, 105, 106, 109, 110, 111, 112, 113];
-  var parser2 = {
-    trace: function trace() {
-    },
-    yy: {},
-    symbols_: { "error": 2, "start": 3, "mermaidDoc": 4, "directive": 5, "openDirective": 6, "typeDirective": 7, "closeDirective": 8, "separator": 9, ":": 10, "argDirective": 11, "open_directive": 12, "type_directive": 13, "arg_directive": 14, "close_directive": 15, "graphConfig": 16, "document": 17, "line": 18, "statement": 19, "SEMI": 20, "NEWLINE": 21, "SPACE": 22, "EOF": 23, "GRAPH": 24, "NODIR": 25, "DIR": 26, "FirstStmtSeperator": 27, "ending": 28, "endToken": 29, "spaceList": 30, "spaceListNewline": 31, "verticeStatement": 32, "styleStatement": 33, "linkStyleStatement": 34, "classDefStatement": 35, "classStatement": 36, "clickStatement": 37, "subgraph": 38, "text": 39, "SQS": 40, "SQE": 41, "end": 42, "direction": 43, "acc_title": 44, "acc_title_value": 45, "acc_descr": 46, "acc_descr_value": 47, "acc_descr_multiline_value": 48, "link": 49, "node": 50, "vertex": 51, "AMP": 52, "STYLE_SEPARATOR": 53, "idString": 54, "DOUBLECIRCLESTART": 55, "DOUBLECIRCLEEND": 56, "PS": 57, "PE": 58, "(-": 59, "-)": 60, "STADIUMSTART": 61, "STADIUMEND": 62, "SUBROUTINESTART": 63, "SUBROUTINEEND": 64, "VERTEX_WITH_PROPS_START": 65, "ALPHA": 66, "COLON": 67, "PIPE": 68, "CYLINDERSTART": 69, "CYLINDEREND": 70, "DIAMOND_START": 71, "DIAMOND_STOP": 72, "TAGEND": 73, "TRAPSTART": 74, "TRAPEND": 75, "INVTRAPSTART": 76, "INVTRAPEND": 77, "linkStatement": 78, "arrowText": 79, "TESTSTR": 80, "START_LINK": 81, "LINK": 82, "textToken": 83, "STR": 84, "keywords": 85, "STYLE": 86, "LINKSTYLE": 87, "CLASSDEF": 88, "CLASS": 89, "CLICK": 90, "DOWN": 91, "UP": 92, "textNoTags": 93, "textNoTagsToken": 94, "DEFAULT": 95, "stylesOpt": 96, "alphaNum": 97, "CALLBACKNAME": 98, "CALLBACKARGS": 99, "HREF": 100, "LINK_TARGET": 101, "HEX": 102, "numList": 103, "INTERPOLATE": 104, "NUM": 105, "COMMA": 106, "style": 107, "styleComponent": 108, "MINUS": 109, "UNIT": 110, "BRKT": 111, "DOT": 112, "PCT": 113, "TAGSTART": 114, "alphaNumToken": 115, "idStringToken": 116, "alphaNumStatement": 117, "direction_tb": 118, "direction_bt": 119, "direction_rl": 120, "direction_lr": 121, "PUNCTUATION": 122, "UNICODE_TEXT": 123, "PLUS": 124, "EQUALS": 125, "MULT": 126, "UNDERSCORE": 127, "graphCodeTokens": 128, "ARROW_CROSS": 129, "ARROW_POINT": 130, "ARROW_CIRCLE": 131, "ARROW_OPEN": 132, "QUOTE": 133, "$accept": 0, "$end": 1 },
-    terminals_: { 2: "error", 10: ":", 12: "open_directive", 13: "type_directive", 14: "arg_directive", 15: "close_directive", 20: "SEMI", 21: "NEWLINE", 22: "SPACE", 23: "EOF", 24: "GRAPH", 25: "NODIR", 26: "DIR", 38: "subgraph", 40: "SQS", 41: "SQE", 42: "end", 44: "acc_title", 45: "acc_title_value", 46: "acc_descr", 47: "acc_descr_value", 48: "acc_descr_multiline_value", 52: "AMP", 53: "STYLE_SEPARATOR", 55: "DOUBLECIRCLESTART", 56: "DOUBLECIRCLEEND", 57: "PS", 58: "PE", 59: "(-", 60: "-)", 61: "STADIUMSTART", 62: "STADIUMEND", 63: "SUBROUTINESTART", 64: "SUBROUTINEEND", 65: "VERTEX_WITH_PROPS_START", 66: "ALPHA", 67: "COLON", 68: "PIPE", 69: "CYLINDERSTART", 70: "CYLINDEREND", 71: "DIAMOND_START", 72: "DIAMOND_STOP", 73: "TAGEND", 74: "TRAPSTART", 75: "TRAPEND", 76: "INVTRAPSTART", 77: "INVTRAPEND", 80: "TESTSTR", 81: "START_LINK", 82: "LINK", 84: "STR", 86: "STYLE", 87: "LINKSTYLE", 88: "CLASSDEF", 89: "CLASS", 90: "CLICK", 91: "DOWN", 92: "UP", 95: "DEFAULT", 98: "CALLBACKNAME", 99: "CALLBACKARGS", 100: "HREF", 101: "LINK_TARGET", 102: "HEX", 104: "INTERPOLATE", 105: "NUM", 106: "COMMA", 109: "MINUS", 110: "UNIT", 111: "BRKT", 112: "DOT", 113: "PCT", 114: "TAGSTART", 118: "direction_tb", 119: "direction_bt", 120: "direction_rl", 121: "direction_lr", 122: "PUNCTUATION", 123: "UNICODE_TEXT", 124: "PLUS", 125: "EQUALS", 126: "MULT", 127: "UNDERSCORE", 129: "ARROW_CROSS", 130: "ARROW_POINT", 131: "ARROW_CIRCLE", 132: "ARROW_OPEN", 133: "QUOTE" },
-    productions_: [0, [3, 1], [3, 2], [5, 4], [5, 6], [6, 1], [7, 1], [11, 1], [8, 1], [4, 2], [17, 0], [17, 2], [18, 1], [18, 1], [18, 1], [18, 1], [18, 1], [16, 2], [16, 2], [16, 2], [16, 3], [28, 2], [28, 1], [29, 1], [29, 1], [29, 1], [27, 1], [27, 1], [27, 2], [31, 2], [31, 2], [31, 1], [31, 1], [30, 2], [30, 1], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 2], [19, 9], [19, 6], [19, 4], [19, 1], [19, 2], [19, 2], [19, 1], [9, 1], [9, 1], [9, 1], [32, 3], [32, 4], [32, 2], [32, 1], [50, 1], [50, 5], [50, 3], [51, 4], [51, 4], [51, 6], [51, 4], [51, 4], [51, 4], [51, 8], [51, 4], [51, 4], [51, 4], [51, 6], [51, 4], [51, 4], [51, 4], [51, 4], [51, 4], [51, 1], [49, 2], [49, 3], [49, 3], [49, 1], [49, 3], [78, 1], [79, 3], [39, 1], [39, 2], [39, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [85, 1], [93, 1], [93, 2], [35, 5], [35, 5], [36, 5], [37, 2], [37, 4], [37, 3], [37, 5], [37, 2], [37, 4], [37, 4], [37, 6], [37, 2], [37, 4], [37, 2], [37, 4], [37, 4], [37, 6], [33, 5], [33, 5], [34, 5], [34, 5], [34, 9], [34, 9], [34, 7], [34, 7], [103, 1], [103, 3], [96, 1], [96, 3], [107, 1], [107, 2], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [108, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [83, 1], [94, 1], [94, 1], [94, 1], [94, 1], [54, 1], [54, 2], [97, 1], [97, 2], [117, 1], [117, 1], [117, 1], [117, 1], [43, 1], [43, 1], [43, 1], [43, 1], [115, 1], [115, 1], [115, 1], [115, 1], [115, 1], [115, 1], [115, 1], [115, 1], [115, 1], [115, 1], [115, 1], [115, 1], [115, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [116, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1], [128, 1]],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
-      var $0 = $$.length - 1;
-      switch (yystate) {
-        case 5:
-          yy.parseDirective("%%{", "open_directive");
-          break;
-        case 6:
-          yy.parseDirective($$[$0], "type_directive");
-          break;
-        case 7:
-          $$[$0] = $$[$0].trim().replace(/'/g, '"');
-          yy.parseDirective($$[$0], "arg_directive");
-          break;
-        case 8:
-          yy.parseDirective("}%%", "close_directive", "flowchart");
-          break;
-        case 10:
-          this.$ = [];
-          break;
-        case 11:
-          if (!Array.isArray($$[$0]) || $$[$0].length > 0) {
-            $$[$0 - 1].push($$[$0]);
-          }
-          this.$ = $$[$0 - 1];
-          break;
-        case 12:
-        case 82:
-        case 84:
-        case 96:
-        case 152:
-        case 154:
-        case 155:
-          this.$ = $$[$0];
-          break;
-        case 19:
-          yy.setDirection("TB");
-          this.$ = "TB";
-          break;
-        case 20:
-          yy.setDirection($$[$0 - 1]);
-          this.$ = $$[$0 - 1];
-          break;
-        case 35:
-          this.$ = $$[$0 - 1].nodes;
-          break;
-        case 36:
-        case 37:
-        case 38:
-        case 39:
-        case 40:
-          this.$ = [];
-          break;
-        case 41:
-          this.$ = yy.addSubGraph($$[$0 - 6], $$[$0 - 1], $$[$0 - 4]);
-          break;
-        case 42:
-          this.$ = yy.addSubGraph($$[$0 - 3], $$[$0 - 1], $$[$0 - 3]);
-          break;
-        case 43:
-          this.$ = yy.addSubGraph(void 0, $$[$0 - 1], void 0);
-          break;
-        case 45:
-          this.$ = $$[$0].trim();
-          yy.setAccTitle(this.$);
-          break;
-        case 46:
-        case 47:
-          this.$ = $$[$0].trim();
-          yy.setAccDescription(this.$);
-          break;
-        case 51:
-          yy.addLink($$[$0 - 2].stmt, $$[$0], $$[$0 - 1]);
-          this.$ = { stmt: $$[$0], nodes: $$[$0].concat($$[$0 - 2].nodes) };
-          break;
-        case 52:
-          yy.addLink($$[$0 - 3].stmt, $$[$0 - 1], $$[$0 - 2]);
-          this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1].concat($$[$0 - 3].nodes) };
-          break;
-        case 53:
-          this.$ = { stmt: $$[$0 - 1], nodes: $$[$0 - 1] };
-          break;
-        case 54:
-          this.$ = { stmt: $$[$0], nodes: $$[$0] };
-          break;
-        case 55:
-          this.$ = [$$[$0]];
-          break;
-        case 56:
-          this.$ = $$[$0 - 4].concat($$[$0]);
-          break;
-        case 57:
-          this.$ = [$$[$0 - 2]];
-          yy.setClass($$[$0 - 2], $$[$0]);
-          break;
-        case 58:
-          this.$ = $$[$0 - 3];
-          yy.addVertex($$[$0 - 3], $$[$0 - 1], "square");
-          break;
-        case 59:
-          this.$ = $$[$0 - 3];
-          yy.addVertex($$[$0 - 3], $$[$0 - 1], "doublecircle");
-          break;
-        case 60:
-          this.$ = $$[$0 - 5];
-          yy.addVertex($$[$0 - 5], $$[$0 - 2], "circle");
-          break;
-        case 61:
-          this.$ = $$[$0 - 3];
-          yy.addVertex($$[$0 - 3], $$[$0 - 1], "ellipse");
-          break;
-        case 62:
-          this.$ = $$[$0 - 3];
-          yy.addVertex($$[$0 - 3], $$[$0 - 1], "stadium");
-          break;
-        case 63:
-          this.$ = $$[$0 - 3];
-          yy.addVertex($$[$0 - 3], $$[$0 - 1], "subroutine");
-          break;
-        case 64:
-          this.$ = $$[$0 - 7];
-          yy.addVertex($$[$0 - 7], $$[$0 - 1], "rect", void 0, void 0, void 0, Object.fromEntries([[$$[$0 - 5], $$[$0 - 3]]]));
-          break;
-        case 65:
-          this.$ = $$[$0 - 3];
-          yy.addVertex($$[$0 - 3], $$[$0 - 1], "cylinder");
-          break;
-        case 66:
-          this.$ = $$[$0 - 3];
-          yy.addVertex($$[$0 - 3], $$[$0 - 1], "round");
-          break;
-        case 67:
-          this.$ = $$[$0 - 3];
-          yy.addVertex($$[$0 - 3], $$[$0 - 1], "diamond");
-          break;
-        case 68:
-          this.$ = $$[$0 - 5];
-          yy.addVertex($$[$0 - 5], $$[$0 - 2], "hexagon");
-          break;
-        case 69:
-          this.$ = $$[$0 - 3];
-          yy.addVertex($$[$0 - 3], $$[$0 - 1], "odd");
-          break;
-        case 70:
-          this.$ = $$[$0 - 3];
-          yy.addVertex($$[$0 - 3], $$[$0 - 1], "trapezoid");
-          break;
-        case 71:
-          this.$ = $$[$0 - 3];
-          yy.addVertex($$[$0 - 3], $$[$0 - 1], "inv_trapezoid");
-          break;
-        case 72:
-          this.$ = $$[$0 - 3];
-          yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_right");
-          break;
-        case 73:
-          this.$ = $$[$0 - 3];
-          yy.addVertex($$[$0 - 3], $$[$0 - 1], "lean_left");
-          break;
-        case 74:
-          this.$ = $$[$0];
-          yy.addVertex($$[$0]);
-          break;
-        case 75:
-          $$[$0 - 1].text = $$[$0];
-          this.$ = $$[$0 - 1];
-          break;
-        case 76:
-        case 77:
-          $$[$0 - 2].text = $$[$0 - 1];
-          this.$ = $$[$0 - 2];
-          break;
-        case 78:
-          this.$ = $$[$0];
-          break;
-        case 79:
-          var inf = yy.destructLink($$[$0], $$[$0 - 2]);
-          this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length, "text": $$[$0 - 1] };
-          break;
-        case 80:
-          var inf = yy.destructLink($$[$0]);
-          this.$ = { "type": inf.type, "stroke": inf.stroke, "length": inf.length };
-          break;
-        case 81:
-          this.$ = $$[$0 - 1];
-          break;
-        case 83:
-        case 97:
-        case 153:
-          this.$ = $$[$0 - 1] + "" + $$[$0];
-          break;
-        case 98:
-        case 99:
-          this.$ = $$[$0 - 4];
-          yy.addClass($$[$0 - 2], $$[$0]);
-          break;
-        case 100:
-          this.$ = $$[$0 - 4];
-          yy.setClass($$[$0 - 2], $$[$0]);
-          break;
-        case 101:
-        case 109:
-          this.$ = $$[$0 - 1];
-          yy.setClickEvent($$[$0 - 1], $$[$0]);
-          break;
-        case 102:
-        case 110:
-          this.$ = $$[$0 - 3];
-          yy.setClickEvent($$[$0 - 3], $$[$0 - 2]);
-          yy.setTooltip($$[$0 - 3], $$[$0]);
-          break;
-        case 103:
-          this.$ = $$[$0 - 2];
-          yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);
-          break;
-        case 104:
-          this.$ = $$[$0 - 4];
-          yy.setClickEvent($$[$0 - 4], $$[$0 - 3], $$[$0 - 2]);
-          yy.setTooltip($$[$0 - 4], $$[$0]);
-          break;
-        case 105:
-        case 111:
-          this.$ = $$[$0 - 1];
-          yy.setLink($$[$0 - 1], $$[$0]);
-          break;
-        case 106:
-        case 112:
-          this.$ = $$[$0 - 3];
-          yy.setLink($$[$0 - 3], $$[$0 - 2]);
-          yy.setTooltip($$[$0 - 3], $$[$0]);
-          break;
-        case 107:
-        case 113:
-          this.$ = $$[$0 - 3];
-          yy.setLink($$[$0 - 3], $$[$0 - 2], $$[$0]);
-          break;
-        case 108:
-        case 114:
-          this.$ = $$[$0 - 5];
-          yy.setLink($$[$0 - 5], $$[$0 - 4], $$[$0]);
-          yy.setTooltip($$[$0 - 5], $$[$0 - 2]);
-          break;
-        case 115:
-          this.$ = $$[$0 - 4];
-          yy.addVertex($$[$0 - 2], void 0, void 0, $$[$0]);
-          break;
-        case 116:
-        case 118:
-          this.$ = $$[$0 - 4];
-          yy.updateLink($$[$0 - 2], $$[$0]);
-          break;
-        case 117:
-          this.$ = $$[$0 - 4];
-          yy.updateLink([$$[$0 - 2]], $$[$0]);
-          break;
-        case 119:
-          this.$ = $$[$0 - 8];
-          yy.updateLinkInterpolate([$$[$0 - 6]], $$[$0 - 2]);
-          yy.updateLink([$$[$0 - 6]], $$[$0]);
-          break;
-        case 120:
-          this.$ = $$[$0 - 8];
-          yy.updateLinkInterpolate($$[$0 - 6], $$[$0 - 2]);
-          yy.updateLink($$[$0 - 6], $$[$0]);
-          break;
-        case 121:
-          this.$ = $$[$0 - 6];
-          yy.updateLinkInterpolate([$$[$0 - 4]], $$[$0]);
-          break;
-        case 122:
-          this.$ = $$[$0 - 6];
-          yy.updateLinkInterpolate($$[$0 - 4], $$[$0]);
-          break;
-        case 123:
-        case 125:
-          this.$ = [$$[$0]];
-          break;
-        case 124:
-        case 126:
-          $$[$0 - 2].push($$[$0]);
-          this.$ = $$[$0 - 2];
-          break;
-        case 128:
-          this.$ = $$[$0 - 1] + $$[$0];
-          break;
-        case 150:
-          this.$ = $$[$0];
-          break;
-        case 151:
-          this.$ = $$[$0 - 1] + "" + $$[$0];
-          break;
-        case 156:
-          this.$ = "v";
-          break;
-        case 157:
-          this.$ = "-";
-          break;
-        case 158:
-          this.$ = { stmt: "dir", value: "TB" };
-          break;
-        case 159:
-          this.$ = { stmt: "dir", value: "BT" };
-          break;
-        case 160:
-          this.$ = { stmt: "dir", value: "RL" };
-          break;
-        case 161:
-          this.$ = { stmt: "dir", value: "LR" };
-          break;
-      }
-    },
-    table: [{ 3: 1, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, { 1: [3] }, { 1: [2, 1] }, { 3: 10, 4: 2, 5: 3, 6: 5, 12: $V0, 16: 4, 21: $V1, 22: $V2, 24: $V3 }, o($V4, $V5, { 17: 11 }), { 7: 12, 13: [1, 13] }, { 16: 14, 21: $V1, 22: $V2, 24: $V3 }, { 16: 15, 21: $V1, 22: $V2, 24: $V3 }, { 25: [1, 16], 26: [1, 17] }, { 13: [2, 5] }, { 1: [2, 2] }, { 1: [2, 9], 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 90: $Vl, 91: $Vm, 95: $Vn, 105: $Vo, 106: $Vp, 109: $Vq, 111: $Vr, 112: $Vs, 116: 47, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw, 122: $Vx, 123: $Vy, 124: $Vz, 125: $VA, 126: $VB, 127: $VC }, { 8: 64, 10: [1, 65], 15: $VD }, o([10, 15], [2, 6]), o($V4, [2, 17]), o($V4, [2, 18]), o($V4, [2, 19]), { 20: [1, 68], 21: [1, 69], 22: $VE, 27: 67, 30: 70 }, o($VF, [2, 11]), o($VF, [2, 12]), o($VF, [2, 13]), o($VF, [2, 14]), o($VF, [2, 15]), o($VF, [2, 16]), { 9: 72, 20: $VG, 21: $VH, 23: $VI, 49: 73, 78: 77, 81: [1, 78], 82: [1, 79] }, { 9: 80, 20: $VG, 21: $VH, 23: $VI }, { 9: 81, 20: $VG, 21: $VH, 23: $VI }, { 9: 82, 20: $VG, 21: $VH, 23: $VI }, { 9: 83, 20: $VG, 21: $VH, 23: $VI }, { 9: 84, 20: $VG, 21: $VH, 23: $VI }, { 9: 86, 20: $VG, 21: $VH, 22: [1, 85], 23: $VI }, o($VF, [2, 44]), { 45: [1, 87] }, { 47: [1, 88] }, o($VF, [2, 47]), o($VJ, [2, 54], { 30: 89, 22: $VE }), { 22: [1, 90] }, { 22: [1, 91] }, { 22: [1, 92] }, { 22: [1, 93] }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 84: [1, 97], 91: $VO, 97: 96, 98: [1, 94], 100: [1, 95], 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 115: 100, 117: 98, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, o($VF, [2, 158]), o($VF, [2, 159]), o($VF, [2, 160]), o($VF, [2, 161]), o($V_, [2, 55], { 53: [1, 116] }), o($V$, [2, 74], { 116: 129, 40: [1, 117], 52: $Ve, 55: [1, 118], 57: [1, 119], 59: [1, 120], 61: [1, 121], 63: [1, 122], 65: [1, 123], 66: $Vf, 67: $Vg, 69: [1, 124], 71: [1, 125], 73: [1, 126], 74: [1, 127], 76: [1, 128], 91: $Vm, 95: $Vn, 105: $Vo, 106: $Vp, 109: $Vq, 111: $Vr, 112: $Vs, 122: $Vx, 123: $Vy, 124: $Vz, 125: $VA, 126: $VB, 127: $VC }), o($V01, [2, 150]), o($V01, [2, 175]), o($V01, [2, 176]), o($V01, [2, 177]), o($V01, [2, 178]), o($V01, [2, 179]), o($V01, [2, 180]), o($V01, [2, 181]), o($V01, [2, 182]), o($V01, [2, 183]), o($V01, [2, 184]), o($V01, [2, 185]), o($V01, [2, 186]), o($V01, [2, 187]), o($V01, [2, 188]), o($V01, [2, 189]), o($V01, [2, 190]), { 9: 130, 20: $VG, 21: $VH, 23: $VI }, { 11: 131, 14: [1, 132] }, o($V11, [2, 8]), o($V4, [2, 20]), o($V4, [2, 26]), o($V4, [2, 27]), { 21: [1, 133] }, o($V21, [2, 34], { 30: 134, 22: $VE }), o($VF, [2, 35]), { 50: 135, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 91: $Vm, 95: $Vn, 105: $Vo, 106: $Vp, 109: $Vq, 111: $Vr, 112: $Vs, 116: 47, 122: $Vx, 123: $Vy, 124: $Vz, 125: $VA, 126: $VB, 127: $VC }, o($V31, [2, 48]), o($V31, [2, 49]), o($V31, [2, 50]), o($V41, [2, 78], { 79: 136, 68: [1, 138], 80: [1, 137] }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 139, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, o([52, 66, 67, 68, 80, 91, 95, 105, 106, 109, 111, 112, 122, 123, 124, 125, 126, 127], [2, 80]), o($VF, [2, 36]), o($VF, [2, 37]), o($VF, [2, 38]), o($VF, [2, 39]), o($VF, [2, 40]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 163, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, o($Vo1, $V5, { 17: 164 }), o($VF, [2, 45]), o($VF, [2, 46]), o($VJ, [2, 53], { 52: $Vp1 }), { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 91: $VO, 97: 166, 102: [1, 167], 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 115: 100, 117: 98, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 95: [1, 168], 103: 169, 105: [1, 170] }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 91: $VO, 95: [1, 171], 97: 172, 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 115: 100, 117: 98, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 91: $VO, 97: 173, 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 115: 100, 117: 98, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, o($V11, [2, 101], { 22: [1, 174], 99: [1, 175] }), o($V11, [2, 105], { 22: [1, 176] }), o($V11, [2, 109], { 115: 100, 117: 178, 22: [1, 177], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 91: $VO, 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }), o($V11, [2, 111], { 22: [1, 179] }), o($Vq1, [2, 152]), o($Vq1, [2, 154]), o($Vq1, [2, 155]), o($Vq1, [2, 156]), o($Vq1, [2, 157]), o($Vr1, [2, 162]), o($Vr1, [2, 163]), o($Vr1, [2, 164]), o($Vr1, [2, 165]), o($Vr1, [2, 166]), o($Vr1, [2, 167]), o($Vr1, [2, 168]), o($Vr1, [2, 169]), o($Vr1, [2, 170]), o($Vr1, [2, 171]), o($Vr1, [2, 172]), o($Vr1, [2, 173]), o($Vr1, [2, 174]), { 52: $Ve, 54: 180, 66: $Vf, 67: $Vg, 91: $Vm, 95: $Vn, 105: $Vo, 106: $Vp, 109: $Vq, 111: $Vr, 112: $Vs, 116: 47, 122: $Vx, 123: $Vy, 124: $Vz, 125: $VA, 126: $VB, 127: $VC }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 181, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 182, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 184, 42: $V91, 52: $VL, 57: [1, 183], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 185, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 186, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 187, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 66: [1, 188] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 189, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 190, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 71: [1, 191], 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 192, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 193, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 194, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, o($V01, [2, 151]), o($Vs1, [2, 3]), { 8: 195, 15: $VD }, { 15: [2, 7] }, o($V4, [2, 28]), o($V21, [2, 33]), o($VJ, [2, 51], { 30: 196, 22: $VE }), o($V41, [2, 75], { 22: [1, 197] }), { 22: [1, 198] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 199, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 82: [1, 200], 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, o($Vr1, [2, 82]), o($Vr1, [2, 84]), o($Vr1, [2, 140]), o($Vr1, [2, 141]), o($Vr1, [2, 142]), o($Vr1, [2, 143]), o($Vr1, [2, 144]), o($Vr1, [2, 145]), o($Vr1, [2, 146]), o($Vr1, [2, 147]), o($Vr1, [2, 148]), o($Vr1, [2, 149]), o($Vr1, [2, 85]), o($Vr1, [2, 86]), o($Vr1, [2, 87]), o($Vr1, [2, 88]), o($Vr1, [2, 89]), o($Vr1, [2, 90]), o($Vr1, [2, 91]), o($Vr1, [2, 92]), o($Vr1, [2, 93]), o($Vr1, [2, 94]), o($Vr1, [2, 95]), { 9: 203, 20: $VG, 21: $VH, 22: $V51, 23: $VI, 24: $V61, 26: $V71, 38: $V81, 40: [1, 202], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 204], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 90: $Vl, 91: $Vm, 95: $Vn, 105: $Vo, 106: $Vp, 109: $Vq, 111: $Vr, 112: $Vs, 116: 47, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw, 122: $Vx, 123: $Vy, 124: $Vz, 125: $VA, 126: $VB, 127: $VC }, { 22: $VE, 30: 205 }, { 22: [1, 206], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 91: $VO, 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 115: 100, 117: 178, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: [1, 207] }, { 22: [1, 208] }, { 22: [1, 209], 106: [1, 210] }, o($Vt1, [2, 123]), { 22: [1, 211] }, { 22: [1, 212], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 91: $VO, 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 115: 100, 117: 178, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: [1, 213], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 91: $VO, 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 115: 100, 117: 178, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 84: [1, 214] }, o($V11, [2, 103], { 22: [1, 215] }), { 84: [1, 216], 101: [1, 217] }, { 84: [1, 218] }, o($Vq1, [2, 153]), { 84: [1, 219], 101: [1, 220] }, o($V_, [2, 57], { 116: 129, 52: $Ve, 66: $Vf, 67: $Vg, 91: $Vm, 95: $Vn, 105: $Vo, 106: $Vp, 109: $Vq, 111: $Vr, 112: $Vs, 122: $Vx, 123: $Vy, 124: $Vz, 125: $VA, 126: $VB, 127: $VC }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 221], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 56: [1, 222], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 223, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 58: [1, 224], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 60: [1, 225], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 62: [1, 226], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 64: [1, 227], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 67: [1, 228] }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 70: [1, 229], 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 72: [1, 230], 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 231, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 232], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 75: [1, 233], 77: [1, 234], 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 75: [1, 236], 77: [1, 235], 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 9: 237, 20: $VG, 21: $VH, 23: $VI }, o($VJ, [2, 52], { 52: $Vp1 }), o($V41, [2, 77]), o($V41, [2, 76]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 68: [1, 238], 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, o($V41, [2, 79]), o($Vr1, [2, 83]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 239, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, o($Vo1, $V5, { 17: 240 }), o($VF, [2, 43]), { 51: 241, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 91: $Vm, 95: $Vn, 105: $Vo, 106: $Vp, 109: $Vq, 111: $Vr, 112: $Vs, 116: 47, 122: $Vx, 123: $Vy, 124: $Vz, 125: $VA, 126: $VB, 127: $VC }, { 22: $Vu1, 66: $Vv1, 67: $Vw1, 86: $Vx1, 96: 242, 102: $Vy1, 105: $Vz1, 107: 243, 108: 244, 109: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1 }, { 22: $Vu1, 66: $Vv1, 67: $Vw1, 86: $Vx1, 96: 256, 102: $Vy1, 105: $Vz1, 107: 243, 108: 244, 109: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1 }, { 22: $Vu1, 66: $Vv1, 67: $Vw1, 86: $Vx1, 96: 257, 102: $Vy1, 104: [1, 258], 105: $Vz1, 107: 243, 108: 244, 109: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1 }, { 22: $Vu1, 66: $Vv1, 67: $Vw1, 86: $Vx1, 96: 259, 102: $Vy1, 104: [1, 260], 105: $Vz1, 107: 243, 108: 244, 109: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1 }, { 105: [1, 261] }, { 22: $Vu1, 66: $Vv1, 67: $Vw1, 86: $Vx1, 96: 262, 102: $Vy1, 105: $Vz1, 107: 243, 108: 244, 109: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1 }, { 22: $Vu1, 66: $Vv1, 67: $Vw1, 86: $Vx1, 96: 263, 102: $Vy1, 105: $Vz1, 107: 243, 108: 244, 109: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1 }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 91: $VO, 97: 264, 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 115: 100, 117: 98, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, o($V11, [2, 102]), { 84: [1, 265] }, o($V11, [2, 106], { 22: [1, 266] }), o($V11, [2, 107]), o($V11, [2, 110]), o($V11, [2, 112], { 22: [1, 267] }), o($V11, [2, 113]), o($V$, [2, 58]), o($V$, [2, 59]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 58: [1, 268], 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, o($V$, [2, 66]), o($V$, [2, 61]), o($V$, [2, 62]), o($V$, [2, 63]), { 66: [1, 269] }, o($V$, [2, 65]), o($V$, [2, 67]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 72: [1, 270], 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, o($V$, [2, 69]), o($V$, [2, 70]), o($V$, [2, 72]), o($V$, [2, 71]), o($V$, [2, 73]), o($Vs1, [2, 4]), o([22, 52, 66, 67, 91, 95, 105, 106, 109, 111, 112, 122, 123, 124, 125, 126, 127], [2, 81]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 271], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 272], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 90: $Vl, 91: $Vm, 95: $Vn, 105: $Vo, 106: $Vp, 109: $Vq, 111: $Vr, 112: $Vs, 116: 47, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw, 122: $Vx, 123: $Vy, 124: $Vz, 125: $VA, 126: $VB, 127: $VC }, o($V_, [2, 56]), o($V11, [2, 115], { 106: $VF1 }), o($VG1, [2, 125], { 108: 274, 22: $Vu1, 66: $Vv1, 67: $Vw1, 86: $Vx1, 102: $Vy1, 105: $Vz1, 109: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1 }), o($VH1, [2, 127]), o($VH1, [2, 129]), o($VH1, [2, 130]), o($VH1, [2, 131]), o($VH1, [2, 132]), o($VH1, [2, 133]), o($VH1, [2, 134]), o($VH1, [2, 135]), o($VH1, [2, 136]), o($VH1, [2, 137]), o($VH1, [2, 138]), o($VH1, [2, 139]), o($V11, [2, 116], { 106: $VF1 }), o($V11, [2, 117], { 106: $VF1 }), { 22: [1, 275] }, o($V11, [2, 118], { 106: $VF1 }), { 22: [1, 276] }, o($Vt1, [2, 124]), o($V11, [2, 98], { 106: $VF1 }), o($V11, [2, 99], { 106: $VF1 }), o($V11, [2, 100], { 115: 100, 117: 178, 26: $VK, 52: $VL, 66: $VM, 67: $VN, 91: $VO, 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }), o($V11, [2, 104]), { 101: [1, 277] }, { 101: [1, 278] }, { 58: [1, 279] }, { 68: [1, 280] }, { 72: [1, 281] }, { 9: 282, 20: $VG, 21: $VH, 23: $VI }, o($VF, [2, 42]), { 22: $Vu1, 66: $Vv1, 67: $Vw1, 86: $Vx1, 102: $Vy1, 105: $Vz1, 107: 283, 108: 244, 109: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1 }, o($VH1, [2, 128]), { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 91: $VO, 97: 284, 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 115: 100, 117: 98, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 26: $VK, 52: $VL, 66: $VM, 67: $VN, 91: $VO, 97: 285, 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 115: 100, 117: 98, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, o($V11, [2, 108]), o($V11, [2, 114]), o($V$, [2, 60]), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 39: 286, 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 140, 84: $Vc1, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, o($V$, [2, 68]), o($Vo1, $V5, { 17: 287 }), o($VG1, [2, 126], { 108: 274, 22: $Vu1, 66: $Vv1, 67: $Vw1, 86: $Vx1, 102: $Vy1, 105: $Vz1, 109: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1 }), o($V11, [2, 121], { 115: 100, 117: 178, 22: [1, 288], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 91: $VO, 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }), o($V11, [2, 122], { 115: 100, 117: 178, 22: [1, 289], 26: $VK, 52: $VL, 66: $VM, 67: $VN, 91: $VO, 105: $VP, 106: $VQ, 109: $VR, 111: $VS, 112: $VT, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }), { 22: $V51, 24: $V61, 26: $V71, 38: $V81, 41: [1, 290], 42: $V91, 52: $VL, 66: $VM, 67: $VN, 73: $Va1, 81: $Vb1, 83: 201, 85: 151, 86: $Vd1, 87: $Ve1, 88: $Vf1, 89: $Vg1, 90: $Vh1, 91: $Vi1, 92: $Vj1, 94: 142, 95: $Vk1, 105: $VP, 106: $VQ, 109: $Vl1, 111: $VS, 112: $VT, 113: $Vm1, 114: $Vn1, 115: 148, 122: $VU, 123: $VV, 124: $VW, 125: $VX, 126: $VY, 127: $VZ }, { 18: 18, 19: 19, 20: $V6, 21: $V7, 22: $V8, 23: $V9, 32: 24, 33: 25, 34: 26, 35: 27, 36: 28, 37: 29, 38: $Va, 42: [1, 291], 43: 31, 44: $Vb, 46: $Vc, 48: $Vd, 50: 35, 51: 45, 52: $Ve, 54: 46, 66: $Vf, 67: $Vg, 86: $Vh, 87: $Vi, 88: $Vj, 89: $Vk, 90: $Vl, 91: $Vm, 95: $Vn, 105: $Vo, 106: $Vp, 109: $Vq, 111: $Vr, 112: $Vs, 116: 47, 118: $Vt, 119: $Vu, 120: $Vv, 121: $Vw, 122: $Vx, 123: $Vy, 124: $Vz, 125: $VA, 126: $VB, 127: $VC }, { 22: $Vu1, 66: $Vv1, 67: $Vw1, 86: $Vx1, 96: 292, 102: $Vy1, 105: $Vz1, 107: 243, 108: 244, 109: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1 }, { 22: $Vu1, 66: $Vv1, 67: $Vw1, 86: $Vx1, 96: 293, 102: $Vy1, 105: $Vz1, 107: 243, 108: 244, 109: $VA1, 110: $VB1, 111: $VC1, 112: $VD1, 113: $VE1 }, o($V$, [2, 64]), o($VF, [2, 41]), o($V11, [2, 119], { 106: $VF1 }), o($V11, [2, 120], { 106: $VF1 })],
-    defaultActions: { 2: [2, 1], 9: [2, 5], 10: [2, 2], 132: [2, 7] },
-    parseError: function parseError(str2, hash) {
-      if (hash.recoverable) {
-        this.trace(str2);
-      } else {
-        var error = new Error(str2);
-        error.hash = hash;
-        throw error;
-      }
-    },
-    parse: function parse2(input) {
-      var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;
-      var args = lstack.slice.call(arguments, 1);
-      var lexer2 = Object.create(this.lexer);
-      var sharedState = { yy: {} };
-      for (var k in this.yy) {
-        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
-          sharedState.yy[k] = this.yy[k];
-        }
-      }
-      lexer2.setInput(input, sharedState.yy);
-      sharedState.yy.lexer = lexer2;
-      sharedState.yy.parser = this;
-      if (typeof lexer2.yylloc == "undefined") {
-        lexer2.yylloc = {};
-      }
-      var yyloc = lexer2.yylloc;
-      lstack.push(yyloc);
-      var ranges = lexer2.options && lexer2.options.ranges;
-      if (typeof sharedState.yy.parseError === "function") {
-        this.parseError = sharedState.yy.parseError;
-      } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-      }
-      function lex2() {
-        var token;
-        token = tstack.pop() || lexer2.lex() || EOF;
-        if (typeof token !== "number") {
-          if (token instanceof Array) {
-            tstack = token;
-            token = tstack.pop();
-          }
-          token = self.symbols_[token] || token;
-        }
-        return token;
-      }
-      var symbol, state, action, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-          action = this.defaultActions[state];
-        } else {
-          if (symbol === null || typeof symbol == "undefined") {
-            symbol = lex2();
-          }
-          action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-          var errStr = "";
-          expected = [];
-          for (p in table[state]) {
-            if (this.terminals_[p] && p > TERROR) {
-              expected.push("'" + this.terminals_[p] + "'");
-            }
-          }
-          if (lexer2.showPosition) {
-            errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-          } else {
-            errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
-          }
-          this.parseError(errStr, {
-            text: lexer2.match,
-            token: this.terminals_[symbol] || symbol,
-            line: lexer2.yylineno,
-            loc: yyloc,
-            expected
-          });
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-          throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-          case 1:
-            stack.push(symbol);
-            vstack.push(lexer2.yytext);
-            lstack.push(lexer2.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            {
-              yyleng = lexer2.yyleng;
-              yytext = lexer2.yytext;
-              yylineno = lexer2.yylineno;
-              yyloc = lexer2.yylloc;
-            }
-            break;
-          case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-              first_line: lstack[lstack.length - (len || 1)].first_line,
-              last_line: lstack[lstack.length - 1].last_line,
-              first_column: lstack[lstack.length - (len || 1)].first_column,
-              last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-              yyval._$.range = [
-                lstack[lstack.length - (len || 1)].range[0],
-                lstack[lstack.length - 1].range[1]
-              ];
-            }
-            r = this.performAction.apply(yyval, [
-              yytext,
-              yyleng,
-              yylineno,
-              sharedState.yy,
-              action[1],
-              vstack,
-              lstack
-            ].concat(args));
-            if (typeof r !== "undefined") {
-              return r;
-            }
-            if (len) {
-              stack = stack.slice(0, -1 * len * 2);
-              vstack = vstack.slice(0, -1 * len);
-              lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-          case 3:
-            return true;
-        }
-      }
-      return true;
-    }
-  };
-  var lexer = function() {
-    var lexer2 = {
-      EOF: 1,
-      parseError: function parseError(str2, hash) {
-        if (this.yy.parser) {
-          this.yy.parser.parseError(str2, hash);
-        } else {
-          throw new Error(str2);
-        }
-      },
-      // resets the lexer, sets new input
-      setInput: function(input, yy) {
-        this.yy = yy || this.yy || {};
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = "";
-        this.conditionStack = ["INITIAL"];
-        this.yylloc = {
-          first_line: 1,
-          first_column: 0,
-          last_line: 1,
-          last_column: 0
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [0, 0];
-        }
-        this.offset = 0;
-        return this;
-      },
-      // consumes and returns one char from the input
-      input: function() {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno++;
-          this.yylloc.last_line++;
-        } else {
-          this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-          this.yylloc.range[1]++;
-        }
-        this._input = this._input.slice(1);
-        return ch;
-      },
-      // unshifts one char (or a string) into the input
-      unput: function(ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len);
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-        if (lines.length - 1) {
-          this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-        this.yylloc = {
-          first_line: this.yylloc.first_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.first_column,
-          last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-      },
-      // When called from action, caches matched text and appends it on next action
-      more: function() {
-        this._more = true;
-        return this;
-      },
-      // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-      reject: function() {
-        if (this.options.backtrack_lexer) {
-          this._backtrack = true;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-        return this;
-      },
-      // retain first n characters of the match
-      less: function(n) {
-        this.unput(this.match.slice(n));
-      },
-      // displays already matched input, i.e. for error messages
-      pastInput: function() {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
-      },
-      // displays upcoming input, i.e. for error messages
-      upcomingInput: function() {
-        var next = this.match;
-        if (next.length < 20) {
-          next += this._input.substr(0, 20 - next.length);
-        }
-        return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
-      },
-      // displays the character position where the lexing error occurred, i.e. for error messages
-      showPosition: function() {
-        var pre = this.pastInput();
-        var c2 = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c2 + "^";
-      },
-      // test the lexed token: return FALSE when not a match, otherwise return token
-      test_match: function(match, indexed_rule) {
-        var token, lines, backup;
-        if (this.options.backtrack_lexer) {
-          backup = {
-            yylineno: this.yylineno,
-            yylloc: {
-              first_line: this.yylloc.first_line,
-              last_line: this.last_line,
-              first_column: this.yylloc.first_column,
-              last_column: this.yylloc.last_column
-            },
-            yytext: this.yytext,
-            match: this.match,
-            matches: this.matches,
-            matched: this.matched,
-            yyleng: this.yyleng,
-            offset: this.offset,
-            _more: this._more,
-            _input: this._input,
-            yy: this.yy,
-            conditionStack: this.conditionStack.slice(0),
-            done: this.done
-          };
-          if (this.options.ranges) {
-            backup.yylloc.range = this.yylloc.range.slice(0);
-          }
-        }
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno += lines.length;
-        }
-        this.yylloc = {
-          first_line: this.yylloc.last_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.last_column,
-          last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-          this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-          this.done = false;
-        }
-        if (token) {
-          return token;
-        } else if (this._backtrack) {
-          for (var k in backup) {
-            this[k] = backup[k];
-          }
-          return false;
-        }
-        return false;
-      },
-      // return next match in input
-      next: function() {
-        if (this.done) {
-          return this.EOF;
-        }
-        if (!this._input) {
-          this.done = true;
-        }
-        var token, match, tempMatch, index;
-        if (!this._more) {
-          this.yytext = "";
-          this.match = "";
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-          tempMatch = this._input.match(this.rules[rules[i]]);
-          if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-            match = tempMatch;
-            index = i;
-            if (this.options.backtrack_lexer) {
-              token = this.test_match(tempMatch, rules[i]);
-              if (token !== false) {
-                return token;
-              } else if (this._backtrack) {
-                match = false;
-                continue;
-              } else {
-                return false;
-              }
-            } else if (!this.options.flex) {
-              break;
-            }
-          }
-        }
-        if (match) {
-          token = this.test_match(match, rules[index]);
-          if (token !== false) {
-            return token;
-          }
-          return false;
-        }
-        if (this._input === "") {
-          return this.EOF;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-      },
-      // return next match that has a token
-      lex: function lex2() {
-        var r = this.next();
-        if (r) {
-          return r;
-        } else {
-          return this.lex();
-        }
-      },
-      // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-      begin: function begin(condition) {
-        this.conditionStack.push(condition);
-      },
-      // pop the previously active lexer condition state off the condition stack
-      popState: function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-          return this.conditionStack.pop();
-        } else {
-          return this.conditionStack[0];
-        }
-      },
-      // produce the lexer rule set which is active for the currently active lexer condition state
-      _currentRules: function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-          return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-          return this.conditions["INITIAL"].rules;
-        }
-      },
-      // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-      topState: function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-          return this.conditionStack[n];
-        } else {
-          return "INITIAL";
-        }
-      },
-      // alias for begin(condition)
-      pushState: function pushState(condition) {
-        this.begin(condition);
-      },
-      // return the number of states currently on the stack
-      stateStackSize: function stateStackSize() {
-        return this.conditionStack.length;
-      },
-      options: {},
-      performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
-        switch ($avoiding_name_collisions) {
-          case 0:
-            this.begin("open_directive");
-            return 12;
-          case 1:
-            this.begin("type_directive");
-            return 13;
-          case 2:
-            this.popState();
-            this.begin("arg_directive");
-            return 10;
-          case 3:
-            this.popState();
-            this.popState();
-            return 15;
-          case 4:
-            return 14;
-          case 5:
-            break;
-          case 6:
-            break;
-          case 7:
-            this.begin("acc_title");
-            return 44;
-          case 8:
-            this.popState();
-            return "acc_title_value";
-          case 9:
-            this.begin("acc_descr");
-            return 46;
-          case 10:
-            this.popState();
-            return "acc_descr_value";
-          case 11:
-            this.begin("acc_descr_multiline");
-            break;
-          case 12:
-            this.popState();
-            break;
-          case 13:
-            return "acc_descr_multiline_value";
-          case 14:
-            this.begin("string");
-            break;
-          case 15:
-            this.popState();
-            break;
-          case 16:
-            return "STR";
-          case 17:
-            return 86;
-          case 18:
-            return 95;
-          case 19:
-            return 87;
-          case 20:
-            return 104;
-          case 21:
-            return 88;
-          case 22:
-            return 89;
-          case 23:
-            this.begin("href");
-            break;
-          case 24:
-            this.popState();
-            break;
-          case 25:
-            return 100;
-          case 26:
-            this.begin("callbackname");
-            break;
-          case 27:
-            this.popState();
-            break;
-          case 28:
-            this.popState();
-            this.begin("callbackargs");
-            break;
-          case 29:
-            return 98;
-          case 30:
-            this.popState();
-            break;
-          case 31:
-            return 99;
-          case 32:
-            this.begin("click");
-            break;
-          case 33:
-            this.popState();
-            break;
-          case 34:
-            return 90;
-          case 35:
-            if (yy.lex.firstGraph()) {
-              this.begin("dir");
-            }
-            return 24;
-          case 36:
-            if (yy.lex.firstGraph()) {
-              this.begin("dir");
-            }
-            return 24;
-          case 37:
-            if (yy.lex.firstGraph()) {
-              this.begin("dir");
-            }
-            return 24;
-          case 38:
-            return 38;
-          case 39:
-            return 42;
-          case 40:
-            return 101;
-          case 41:
-            return 101;
-          case 42:
-            return 101;
-          case 43:
-            return 101;
-          case 44:
-            this.popState();
-            return 25;
-          case 45:
-            this.popState();
-            return 26;
-          case 46:
-            this.popState();
-            return 26;
-          case 47:
-            this.popState();
-            return 26;
-          case 48:
-            this.popState();
-            return 26;
-          case 49:
-            this.popState();
-            return 26;
-          case 50:
-            this.popState();
-            return 26;
-          case 51:
-            this.popState();
-            return 26;
-          case 52:
-            this.popState();
-            return 26;
-          case 53:
-            this.popState();
-            return 26;
-          case 54:
-            this.popState();
-            return 26;
-          case 55:
-            return 118;
-          case 56:
-            return 119;
-          case 57:
-            return 120;
-          case 58:
-            return 121;
-          case 59:
-            return 105;
-          case 60:
-            return 111;
-          case 61:
-            return 53;
-          case 62:
-            return 67;
-          case 63:
-            return 52;
-          case 64:
-            return 20;
-          case 65:
-            return 106;
-          case 66:
-            return 126;
-          case 67:
-            return 82;
-          case 68:
-            return 82;
-          case 69:
-            return 82;
-          case 70:
-            return 81;
-          case 71:
-            return 81;
-          case 72:
-            return 81;
-          case 73:
-            return 59;
-          case 74:
-            return 60;
-          case 75:
-            return 61;
-          case 76:
-            return 62;
-          case 77:
-            return 63;
-          case 78:
-            return 64;
-          case 79:
-            return 65;
-          case 80:
-            return 69;
-          case 81:
-            return 70;
-          case 82:
-            return 55;
-          case 83:
-            return 56;
-          case 84:
-            return 109;
-          case 85:
-            return 112;
-          case 86:
-            return 127;
-          case 87:
-            return 124;
-          case 88:
-            return 113;
-          case 89:
-            return 125;
-          case 90:
-            return 125;
-          case 91:
-            return 114;
-          case 92:
-            return 73;
-          case 93:
-            return 92;
-          case 94:
-            return "SEP";
-          case 95:
-            return 91;
-          case 96:
-            return 66;
-          case 97:
-            return 75;
-          case 98:
-            return 74;
-          case 99:
-            return 77;
-          case 100:
-            return 76;
-          case 101:
-            return 122;
-          case 102:
-            return 123;
-          case 103:
-            return 68;
-          case 104:
-            return 57;
-          case 105:
-            return 58;
-          case 106:
-            return 40;
-          case 107:
-            return 41;
-          case 108:
-            return 71;
-          case 109:
-            return 72;
-          case 110:
-            return 133;
-          case 111:
-            return 21;
-          case 112:
-            return 22;
-          case 113:
-            return 23;
-        }
-      },
-      rules: [/^(?:%%\{)/, /^(?:((?:(?!\}%%)[^:.])*))/, /^(?::)/, /^(?:\}%%)/, /^(?:((?:(?!\}%%).|\n)*))/, /^(?:%%(?!\{)[^\n]*)/, /^(?:[^\}]%%[^\n]*)/, /^(?:accTitle\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*:\s*)/, /^(?:(?!\n||)*[^\n]*)/, /^(?:accDescr\s*\{\s*)/, /^(?:[\}])/, /^(?:[^\}]*)/, /^(?:["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:style\b)/, /^(?:default\b)/, /^(?:linkStyle\b)/, /^(?:interpolate\b)/, /^(?:classDef\b)/, /^(?:class\b)/, /^(?:href[\s]+["])/, /^(?:["])/, /^(?:[^"]*)/, /^(?:call[\s]+)/, /^(?:\([\s]*\))/, /^(?:\()/, /^(?:[^(]*)/, /^(?:\))/, /^(?:[^)]*)/, /^(?:click[\s]+)/, /^(?:[\s\n])/, /^(?:[^\s\n]*)/, /^(?:flowchart-elk\b)/, /^(?:graph\b)/, /^(?:flowchart\b)/, /^(?:subgraph\b)/, /^(?:end\b\s*)/, /^(?:_self\b)/, /^(?:_blank\b)/, /^(?:_parent\b)/, /^(?:_top\b)/, /^(?:(\r?\n)*\s*\n)/, /^(?:\s*LR\b)/, /^(?:\s*RL\b)/, /^(?:\s*TB\b)/, /^(?:\s*BT\b)/, /^(?:\s*TD\b)/, /^(?:\s*BR\b)/, /^(?:\s*<)/, /^(?:\s*>)/, /^(?:\s*\^)/, /^(?:\s*v\b)/, /^(?:.*direction\s+TB[^\n]*)/, /^(?:.*direction\s+BT[^\n]*)/, /^(?:.*direction\s+RL[^\n]*)/, /^(?:.*direction\s+LR[^\n]*)/, /^(?:[0-9]+)/, /^(?:#)/, /^(?::::)/, /^(?::)/, /^(?:&)/, /^(?:;)/, /^(?:,)/, /^(?:\*)/, /^(?:\s*[xo<]?--+[-xo>]\s*)/, /^(?:\s*[xo<]?==+[=xo>]\s*)/, /^(?:\s*[xo<]?-?\.+-[xo>]?\s*)/, /^(?:\s*[xo<]?--\s*)/, /^(?:\s*[xo<]?==\s*)/, /^(?:\s*[xo<]?-\.\s*)/, /^(?:\(-)/, /^(?:-\))/, /^(?:\(\[)/, /^(?:\]\))/, /^(?:\[\[)/, /^(?:\]\])/, /^(?:\[\|)/, /^(?:\[\()/, /^(?:\)\])/, /^(?:\(\(\()/, /^(?:\)\)\))/, /^(?:-)/, /^(?:\.)/, /^(?:[\_])/, /^(?:\+)/, /^(?:%)/, /^(?:=)/, /^(?:=)/, /^(?:<)/, /^(?:>)/, /^(?:\^)/, /^(?:\\\|)/, /^(?:v\b)/, /^(?:[A-Za-z]+)/, /^(?:\\\])/, /^(?:\[\/)/, /^(?:\/\])/, /^(?:\[\\)/, /^(?:[!"#$%&'*+,-.`?\\_/])/, /^(?:[\u00AA\u00B5\u00BA\u00C0-\u00D6\u00D8-\u00F6]|[\u00F8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377]|[\u037A-\u037D\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5]|[\u03F7-\u0481\u048A-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA]|[\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE]|[\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA]|[\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0]|[\u08A2-\u08AC\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0977]|[\u0979-\u097F\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2]|[\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A]|[\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39]|[\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8]|[\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0B05-\u0B0C]|[\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C]|[\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99]|[\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0]|[\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C33\u0C35-\u0C39\u0C3D]|[\u0C58\u0C59\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3]|[\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10]|[\u0D12-\u0D3A\u0D3D\u0D4E\u0D60\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1]|[\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81]|[\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3]|[\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6]|[\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A]|[\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081]|[\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D]|[\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0]|[\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310]|[\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F4\u1401-\u166C]|[\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u1700-\u170C\u170E-\u1711]|[\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7]|[\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191C]|[\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19C1-\u19C7\u1A00-\u1A16]|[\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF]|[\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC]|[\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D]|[\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D]|[\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3]|[\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F]|[\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128]|[\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2183\u2184]|[\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3]|[\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6]|[\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE]|[\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005\u3006\u3031-\u3035\u303B\u303C]|[\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D]|[\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FCC]|[\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B]|[\uA640-\uA66E\uA67F-\uA697\uA6A0-\uA6E5\uA717-\uA71F\uA722-\uA788]|[\uA78B-\uA78E\uA790-\uA793\uA7A0-\uA7AA\uA7F8-\uA801\uA803-\uA805]|[\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB]|[\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uAA00-\uAA28]|[\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA80-\uAAAF\uAAB1\uAAB5]|[\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4]|[\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E]|[\uABC0-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D]|[\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36]|[\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D]|[\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC]|[\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF]|[\uFFD2-\uFFD7\uFFDA-\uFFDC])/, /^(?:\|)/, /^(?:\()/, /^(?:\))/, /^(?:\[)/, /^(?:\])/, /^(?:\{)/, /^(?:\})/, /^(?:")/, /^(?:(\r?\n)+)/, /^(?:\s)/, /^(?:$)/],
-      conditions: { "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "callbackargs": { "rules": [30, 31], "inclusive": false }, "callbackname": { "rules": [27, 28, 29], "inclusive": false }, "href": { "rules": [24, 25], "inclusive": false }, "click": { "rules": [33, 34], "inclusive": false }, "vertex": { "rules": [], "inclusive": false }, "dir": { "rules": [44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "inclusive": false }, "acc_descr_multiline": { "rules": [12, 13], "inclusive": false }, "acc_descr": { "rules": [10], "inclusive": false }, "acc_title": { "rules": [8], "inclusive": false }, "string": { "rules": [15, 16], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 7, 9, 11, 14, 17, 18, 19, 20, 21, 22, 23, 26, 32, 35, 36, 37, 38, 39, 40, 41, 42, 43, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113], "inclusive": true } }
-    };
-    return lexer2;
-  }();
-  parser2.lexer = lexer;
-  function Parser() {
-    this.yy = {};
-  }
-  Parser.prototype = parser2;
-  parser2.Parser = Parser;
-  return new Parser();
-}();
-parser$7.parser = parser$7;
-const parser$8 = parser$7;
-const flowDetector = (txt, config2) => {
-  var _a, _b;
-  if (((_a = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _a.defaultRenderer) === "dagre-wrapper") {
-    return false;
-  }
-  if (((_b = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _b.defaultRenderer) === "elk") {
-    return false;
-  }
-  return txt.match(/^\s*graph/) !== null;
-};
-const flowDetectorV2 = (txt, config2) => {
-  var _a, _b;
-  if (((_a = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _a.defaultRenderer) === "dagre-d3") {
-    return false;
-  }
-  if (((_b = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _b.defaultRenderer) === "elk") {
-    return false;
-  }
-  if (txt.match(/^\s*graph/) !== null) {
-    return true;
-  }
-  return txt.match(/^\s*flowchart/) !== null;
-};
-const MERMAID_DOM_ID_PREFIX = "flowchart-";
-let vertexCounter = 0;
-let config = getConfig$1();
-let vertices = {};
-let edges = [];
-let classes$1 = {};
-let subGraphs = [];
-let subGraphLookup = {};
-let tooltips = {};
-let subCount = 0;
-let firstGraphFlag = true;
-let direction$1;
-let version;
-let funs$1 = [];
-const sanitizeText = (txt) => common$1.sanitizeText(txt, config);
-const parseDirective$6 = function(statement, context, type2) {
-  mermaidAPI.parseDirective(this, statement, context, type2);
-};
-const lookUpDomId = function(id2) {
-  const veritceKeys = Object.keys(vertices);
-  for (const veritceKey of veritceKeys) {
-    if (vertices[veritceKey].id === id2) {
-      return vertices[veritceKey].domId;
-    }
-  }
-  return id2;
-};
-const addVertex = function(_id, text, type2, style, classes2, dir, props = {}) {
-  let txt;
-  let id2 = _id;
-  if (id2 === void 0) {
-    return;
-  }
-  if (id2.trim().length === 0) {
-    return;
-  }
-  if (vertices[id2] === void 0) {
-    vertices[id2] = {
-      id: id2,
-      domId: MERMAID_DOM_ID_PREFIX + id2 + "-" + vertexCounter,
-      styles: [],
-      classes: []
-    };
-  }
-  vertexCounter++;
-  if (text !== void 0) {
-    config = getConfig$1();
-    txt = sanitizeText(text.trim());
-    if (txt[0] === '"' && txt[txt.length - 1] === '"') {
-      txt = txt.substring(1, txt.length - 1);
-    }
-    vertices[id2].text = txt;
-  } else {
-    if (vertices[id2].text === void 0) {
-      vertices[id2].text = _id;
-    }
-  }
-  if (type2 !== void 0) {
-    vertices[id2].type = type2;
-  }
-  if (style !== void 0 && style !== null) {
-    style.forEach(function(s) {
-      vertices[id2].styles.push(s);
-    });
-  }
-  if (classes2 !== void 0 && classes2 !== null) {
-    classes2.forEach(function(s) {
-      vertices[id2].classes.push(s);
-    });
-  }
-  if (dir !== void 0) {
-    vertices[id2].dir = dir;
-  }
-  if (vertices[id2].props === void 0) {
-    vertices[id2].props = props;
-  } else if (props !== void 0) {
-    Object.assign(vertices[id2].props, props);
-  }
-};
-const addSingleLink = function(_start, _end, type2, linkText) {
-  let start2 = _start;
-  let end2 = _end;
-  const edge = { start: start2, end: end2, type: void 0, text: "" };
-  linkText = type2.text;
-  if (linkText !== void 0) {
-    edge.text = sanitizeText(linkText.trim());
-    if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') {
-      edge.text = edge.text.substring(1, edge.text.length - 1);
-    }
-  }
-  if (type2 !== void 0) {
-    edge.type = type2.type;
-    edge.stroke = type2.stroke;
-    edge.length = type2.length;
-  }
-  edges.push(edge);
-};
-const addLink = function(_start, _end, type2, linktext) {
-  let i, j;
-  for (i = 0; i < _start.length; i++) {
-    for (j = 0; j < _end.length; j++) {
-      addSingleLink(_start[i], _end[j], type2, linktext);
-    }
-  }
-};
-const updateLinkInterpolate = function(positions, interp) {
-  positions.forEach(function(pos) {
-    if (pos === "default") {
-      edges.defaultInterpolate = interp;
-    } else {
-      edges[pos].interpolate = interp;
-    }
-  });
-};
-const updateLink = function(positions, style) {
-  positions.forEach(function(pos) {
-    if (pos === "default") {
-      edges.defaultStyle = style;
-    } else {
-      if (mermaid_ae477ddf_utils.isSubstringInArray("fill", style) === -1) {
-        style.push("fill:none");
-      }
-      edges[pos].style = style;
-    }
-  });
-};
-const addClass = function(id2, style) {
-  if (classes$1[id2] === void 0) {
-    classes$1[id2] = { id: id2, styles: [], textStyles: [] };
-  }
-  if (style !== void 0 && style !== null) {
-    style.forEach(function(s) {
-      if (s.match("color")) {
-        const newStyle1 = s.replace("fill", "bgFill");
-        const newStyle2 = newStyle1.replace("color", "fill");
-        classes$1[id2].textStyles.push(newStyle2);
-      }
-      classes$1[id2].styles.push(s);
-    });
-  }
-};
-const setDirection$1 = function(dir) {
-  direction$1 = dir;
-  if (direction$1.match(/.*</)) {
-    direction$1 = "RL";
-  }
-  if (direction$1.match(/.*\^/)) {
-    direction$1 = "BT";
-  }
-  if (direction$1.match(/.*>/)) {
-    direction$1 = "LR";
-  }
-  if (direction$1.match(/.*v/)) {
-    direction$1 = "TB";
-  }
-  if (direction$1 === "TD") {
-    direction$1 = "TB";
-  }
-};
-const setClass$1 = function(ids, className) {
-  ids.split(",").forEach(function(_id) {
-    let id2 = _id;
-    if (vertices[id2] !== void 0) {
-      vertices[id2].classes.push(className);
-    }
-    if (subGraphLookup[id2] !== void 0) {
-      subGraphLookup[id2].classes.push(className);
-    }
-  });
-};
-const setTooltip = function(ids, tooltip) {
-  ids.split(",").forEach(function(id2) {
-    if (tooltip !== void 0) {
-      tooltips[version === "gen-1" ? lookUpDomId(id2) : id2] = sanitizeText(tooltip);
-    }
-  });
-};
-const setClickFun$1 = function(id2, functionName, functionArgs) {
-  let domId = lookUpDomId(id2);
-  if (getConfig$1().securityLevel !== "loose") {
-    return;
-  }
-  if (functionName === void 0) {
-    return;
-  }
-  let argList = [];
-  if (typeof functionArgs === "string") {
-    argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);
-    for (let i = 0; i < argList.length; i++) {
-      let item = argList[i].trim();
-      if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') {
-        item = item.substr(1, item.length - 2);
-      }
-      argList[i] = item;
-    }
-  }
-  if (argList.length === 0) {
-    argList.push(id2);
-  }
-  if (vertices[id2] !== void 0) {
-    vertices[id2].haveCallback = true;
-    funs$1.push(function() {
-      const elem = document.querySelector(`[id="${domId}"]`);
-      if (elem !== null) {
-        elem.addEventListener(
-          "click",
-          function() {
-            mermaid_ae477ddf_utils.runFunc(functionName, ...argList);
-          },
-          false
-        );
-      }
-    });
-  }
-};
-const setLink$1 = function(ids, linkStr, target) {
-  ids.split(",").forEach(function(id2) {
-    if (vertices[id2] !== void 0) {
-      vertices[id2].link = mermaid_ae477ddf_utils.formatUrl(linkStr, config);
-      vertices[id2].linkTarget = target;
-    }
-  });
-  setClass$1(ids, "clickable");
-};
-const getTooltip = function(id2) {
-  return tooltips[id2];
-};
-const setClickEvent$1 = function(ids, functionName, functionArgs) {
-  ids.split(",").forEach(function(id2) {
-    setClickFun$1(id2, functionName, functionArgs);
-  });
-  setClass$1(ids, "clickable");
-};
-const bindFunctions$1 = function(element) {
-  funs$1.forEach(function(fun) {
-    fun(element);
-  });
-};
-const getDirection$1 = function() {
-  return direction$1.trim();
-};
-const getVertices = function() {
-  return vertices;
-};
-const getEdges = function() {
-  return edges;
-};
-const getClasses$4 = function() {
-  return classes$1;
-};
-const setupToolTips = function(element) {
-  let tooltipElem = (0,src/* select */.Ys)(".mermaidTooltip");
-  if ((tooltipElem._groups || tooltipElem)[0][0] === null) {
-    tooltipElem = (0,src/* select */.Ys)("body").append("div").attr("class", "mermaidTooltip").style("opacity", 0);
-  }
-  const svg = (0,src/* select */.Ys)(element).select("svg");
-  const nodes = svg.selectAll("g.node");
-  nodes.on("mouseover", function() {
-    const el = (0,src/* select */.Ys)(this);
-    const title2 = el.attr("title");
-    if (title2 === null) {
-      return;
-    }
-    const rect2 = this.getBoundingClientRect();
-    tooltipElem.transition().duration(200).style("opacity", ".9");
-    tooltipElem.text(el.attr("title")).style("left", window.scrollX + rect2.left + (rect2.right - rect2.left) / 2 + "px").style("top", window.scrollY + rect2.top - 14 + document.body.scrollTop + "px");
-    tooltipElem.html(tooltipElem.html().replace(/<br\/>/g, "<br/>"));
-    el.classed("hover", true);
-  }).on("mouseout", function() {
-    tooltipElem.transition().duration(500).style("opacity", 0);
-    const el = (0,src/* select */.Ys)(this);
-    el.classed("hover", false);
-  });
-};
-funs$1.push(setupToolTips);
-const clear$6 = function(ver = "gen-1") {
-  vertices = {};
-  classes$1 = {};
-  edges = [];
-  funs$1 = [setupToolTips];
-  subGraphs = [];
-  subGraphLookup = {};
-  subCount = 0;
-  tooltips = [];
-  firstGraphFlag = true;
-  version = ver;
-  clear$g();
-};
-const setGen = (ver) => {
-  version = ver || "gen-2";
-};
-const defaultStyle = function() {
-  return "fill:#ffa;stroke: #f66; stroke-width: 3px; stroke-dasharray: 5, 5;fill:#ffa;stroke: #666;";
-};
-const addSubGraph = function(_id, list, _title) {
-  let id2 = _id.trim();
-  let title2 = _title;
-  if (_id === _title && _title.match(/\s/)) {
-    id2 = void 0;
-  }
-  function uniq(a) {
-    const prims = { boolean: {}, number: {}, string: {} };
-    const objs = [];
-    let dir2;
-    const nodeList2 = a.filter(function(item) {
-      const type2 = typeof item;
-      if (item.stmt && item.stmt === "dir") {
-        dir2 = item.value;
-        return false;
-      }
-      if (item.trim() === "") {
-        return false;
-      }
-      if (type2 in prims) {
-        return prims[type2].hasOwnProperty(item) ? false : prims[type2][item] = true;
-      } else {
-        return objs.includes(item) ? false : objs.push(item);
-      }
-    });
-    return { nodeList: nodeList2, dir: dir2 };
-  }
-  let nodeList = [];
-  const { nodeList: nl, dir } = uniq(nodeList.concat.apply(nodeList, list));
-  nodeList = nl;
-  if (version === "gen-1") {
-    for (let i = 0; i < nodeList.length; i++) {
-      nodeList[i] = lookUpDomId(nodeList[i]);
-    }
-  }
-  id2 = id2 || "subGraph" + subCount;
-  title2 = title2 || "";
-  title2 = sanitizeText(title2);
-  subCount = subCount + 1;
-  const subGraph = { id: id2, nodes: nodeList, title: title2.trim(), classes: [], dir };
-  log$1.info("Adding", subGraph.id, subGraph.nodes, subGraph.dir);
-  subGraph.nodes = makeUniq(subGraph, subGraphs).nodes;
-  subGraphs.push(subGraph);
-  subGraphLookup[id2] = subGraph;
-  return id2;
-};
-const getPosForId = function(id2) {
-  for (const [i, subGraph] of subGraphs.entries()) {
-    if (subGraph.id === id2) {
-      return i;
-    }
-  }
-  return -1;
-};
-let secCount = -1;
-const posCrossRef = [];
-const indexNodes2 = function(id2, pos) {
-  const nodes = subGraphs[pos].nodes;
-  secCount = secCount + 1;
-  if (secCount > 2e3) {
-    return;
-  }
-  posCrossRef[secCount] = pos;
-  if (subGraphs[pos].id === id2) {
-    return {
-      result: true,
-      count: 0
-    };
-  }
-  let count = 0;
-  let posCount = 1;
-  while (count < nodes.length) {
-    const childPos = getPosForId(nodes[count]);
-    if (childPos >= 0) {
-      const res = indexNodes2(id2, childPos);
-      if (res.result) {
-        return {
-          result: true,
-          count: posCount + res.count
-        };
-      } else {
-        posCount = posCount + res.count;
-      }
-    }
-    count = count + 1;
-  }
-  return {
-    result: false,
-    count: posCount
-  };
-};
-const getDepthFirstPos = function(pos) {
-  return posCrossRef[pos];
-};
-const indexNodes = function() {
-  secCount = -1;
-  if (subGraphs.length > 0) {
-    indexNodes2("none", subGraphs.length - 1);
-  }
-};
-const getSubGraphs = function() {
-  return subGraphs;
-};
-const firstGraph = () => {
-  if (firstGraphFlag) {
-    firstGraphFlag = false;
-    return true;
-  }
-  return false;
-};
-const destructStartLink = (_str) => {
-  let str2 = _str.trim();
-  let type2 = "arrow_open";
-  switch (str2[0]) {
-    case "<":
-      type2 = "arrow_point";
-      str2 = str2.slice(1);
-      break;
-    case "x":
-      type2 = "arrow_cross";
-      str2 = str2.slice(1);
-      break;
-    case "o":
-      type2 = "arrow_circle";
-      str2 = str2.slice(1);
-      break;
-  }
-  let stroke = "normal";
-  if (str2.includes("=")) {
-    stroke = "thick";
-  }
-  if (str2.includes(".")) {
-    stroke = "dotted";
-  }
-  return { type: type2, stroke };
-};
-const countChar = (char, str2) => {
-  const length = str2.length;
-  let count = 0;
-  for (let i = 0; i < length; ++i) {
-    if (str2[i] === char) {
-      ++count;
-    }
-  }
-  return count;
-};
-const destructEndLink = (_str) => {
-  const str2 = _str.trim();
-  let line2 = str2.slice(0, -1);
-  let type2 = "arrow_open";
-  switch (str2.slice(-1)) {
-    case "x":
-      type2 = "arrow_cross";
-      if (str2[0] === "x") {
-        type2 = "double_" + type2;
-        line2 = line2.slice(1);
-      }
-      break;
-    case ">":
-      type2 = "arrow_point";
-      if (str2[0] === "<") {
-        type2 = "double_" + type2;
-        line2 = line2.slice(1);
-      }
-      break;
-    case "o":
-      type2 = "arrow_circle";
-      if (str2[0] === "o") {
-        type2 = "double_" + type2;
-        line2 = line2.slice(1);
-      }
-      break;
-  }
-  let stroke = "normal";
-  let length = line2.length - 1;
-  if (line2[0] === "=") {
-    stroke = "thick";
-  }
-  let dots = countChar(".", line2);
-  if (dots) {
-    stroke = "dotted";
-    length = dots;
-  }
-  return { type: type2, stroke, length };
-};
-const destructLink = (_str, _startStr) => {
-  const info2 = destructEndLink(_str);
-  let startInfo;
-  if (_startStr) {
-    startInfo = destructStartLink(_startStr);
-    if (startInfo.stroke !== info2.stroke) {
-      return { type: "INVALID", stroke: "INVALID" };
-    }
-    if (startInfo.type === "arrow_open") {
-      startInfo.type = info2.type;
-    } else {
-      if (startInfo.type !== info2.type) {
-        return { type: "INVALID", stroke: "INVALID" };
-      }
-      startInfo.type = "double_" + startInfo.type;
-    }
-    if (startInfo.type === "double_arrow") {
-      startInfo.type = "double_arrow_point";
-    }
-    startInfo.length = info2.length;
-    return startInfo;
-  }
-  return info2;
-};
-const exists = (allSgs, _id) => {
-  let res = false;
-  allSgs.forEach((sg) => {
-    const pos = sg.nodes.indexOf(_id);
-    if (pos >= 0) {
-      res = true;
-    }
-  });
-  return res;
-};
-const makeUniq = (sg, allSubgraphs) => {
-  const res = [];
-  sg.nodes.forEach((_id, pos) => {
-    if (!exists(allSubgraphs, _id)) {
-      res.push(sg.nodes[pos]);
-    }
-  });
-  return { nodes: res };
-};
-const lex = {
-  firstGraph
-};
-const flowDb = {
-  parseDirective: parseDirective$6,
-  defaultConfig: () => defaultConfig.flowchart,
-  setAccTitle,
-  getAccTitle,
-  getAccDescription,
-  setAccDescription,
-  addVertex,
-  lookUpDomId,
-  addLink,
-  updateLinkInterpolate,
-  updateLink,
-  addClass,
-  setDirection: setDirection$1,
-  setClass: setClass$1,
-  setTooltip,
-  getTooltip,
-  setClickEvent: setClickEvent$1,
-  setLink: setLink$1,
-  bindFunctions: bindFunctions$1,
-  getDirection: getDirection$1,
-  getVertices,
-  getEdges,
-  getClasses: getClasses$4,
-  clear: clear$6,
-  setGen,
-  defaultStyle,
-  addSubGraph,
-  getDepthFirstPos,
-  indexNodes,
-  getSubGraphs,
-  destructLink,
-  lex,
-  exists,
-  makeUniq,
-  setDiagramTitle,
-  getDiagramTitle
-};
-const db = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
-  __proto__: null,
-  addClass,
-  addLink,
-  addSingleLink,
-  addSubGraph,
-  addVertex,
-  bindFunctions: bindFunctions$1,
-  clear: clear$6,
-  default: flowDb,
-  defaultStyle,
-  destructLink,
-  firstGraph,
-  getClasses: getClasses$4,
-  getDepthFirstPos,
-  getDirection: getDirection$1,
-  getEdges,
-  getSubGraphs,
-  getTooltip,
-  getVertices,
-  indexNodes,
-  lex,
-  lookUpDomId,
-  parseDirective: parseDirective$6,
-  setClass: setClass$1,
-  setClickEvent: setClickEvent$1,
-  setDirection: setDirection$1,
-  setGen,
-  setLink: setLink$1,
-  updateLink,
-  updateLinkInterpolate
-}, Symbol.toStringTag, { value: "Module" }));
-function question(parent, bbox, node) {
-  const w2 = bbox.width;
-  const h = bbox.height;
-  const s = (w2 + h) * 0.9;
-  const points = [
-    { x: s / 2, y: 0 },
-    { x: s, y: -s / 2 },
-    { x: s / 2, y: -s },
-    { x: 0, y: -s / 2 }
-  ];
-  const shapeSvg = insertPolygonShape(parent, s, s, points);
-  node.intersect = function(point2) {
-    return (0,intersect_polygon/* intersectPolygon */.A)(node, points, point2);
-  };
-  return shapeSvg;
-}
-function hexagon(parent, bbox, node) {
-  const f = 4;
-  const h = bbox.height;
-  const m = h / f;
-  const w2 = bbox.width + 2 * m;
-  const points = [
-    { x: m, y: 0 },
-    { x: w2 - m, y: 0 },
-    { x: w2, y: -h / 2 },
-    { x: w2 - m, y: -h },
-    { x: m, y: -h },
-    { x: 0, y: -h / 2 }
-  ];
-  const shapeSvg = insertPolygonShape(parent, w2, h, points);
-  node.intersect = function(point2) {
-    return (0,intersect_polygon/* intersectPolygon */.A)(node, points, point2);
-  };
-  return shapeSvg;
-}
-function rect_left_inv_arrow(parent, bbox, node) {
-  const w2 = bbox.width;
-  const h = bbox.height;
-  const points = [
-    { x: -h / 2, y: 0 },
-    { x: w2, y: 0 },
-    { x: w2, y: -h },
-    { x: -h / 2, y: -h },
-    { x: 0, y: -h / 2 }
-  ];
-  const shapeSvg = insertPolygonShape(parent, w2, h, points);
-  node.intersect = function(point2) {
-    return (0,intersect_polygon/* intersectPolygon */.A)(node, points, point2);
-  };
-  return shapeSvg;
-}
-function lean_right(parent, bbox, node) {
-  const w2 = bbox.width;
-  const h = bbox.height;
-  const points = [
-    { x: -2 * h / 6, y: 0 },
-    { x: w2 - h / 6, y: 0 },
-    { x: w2 + 2 * h / 6, y: -h },
-    { x: h / 6, y: -h }
-  ];
-  const shapeSvg = insertPolygonShape(parent, w2, h, points);
-  node.intersect = function(point2) {
-    return (0,intersect_polygon/* intersectPolygon */.A)(node, points, point2);
-  };
-  return shapeSvg;
-}
-function lean_left(parent, bbox, node) {
-  const w2 = bbox.width;
-  const h = bbox.height;
-  const points = [
-    { x: 2 * h / 6, y: 0 },
-    { x: w2 + h / 6, y: 0 },
-    { x: w2 - 2 * h / 6, y: -h },
-    { x: -h / 6, y: -h }
-  ];
-  const shapeSvg = insertPolygonShape(parent, w2, h, points);
-  node.intersect = function(point2) {
-    return (0,intersect_polygon/* intersectPolygon */.A)(node, points, point2);
-  };
-  return shapeSvg;
-}
-function trapezoid(parent, bbox, node) {
-  const w2 = bbox.width;
-  const h = bbox.height;
-  const points = [
-    { x: -2 * h / 6, y: 0 },
-    { x: w2 + 2 * h / 6, y: 0 },
-    { x: w2 - h / 6, y: -h },
-    { x: h / 6, y: -h }
-  ];
-  const shapeSvg = insertPolygonShape(parent, w2, h, points);
-  node.intersect = function(point2) {
-    return (0,intersect_polygon/* intersectPolygon */.A)(node, points, point2);
-  };
-  return shapeSvg;
-}
-function inv_trapezoid(parent, bbox, node) {
-  const w2 = bbox.width;
-  const h = bbox.height;
-  const points = [
-    { x: h / 6, y: 0 },
-    { x: w2 - h / 6, y: 0 },
-    { x: w2 + 2 * h / 6, y: -h },
-    { x: -2 * h / 6, y: -h }
-  ];
-  const shapeSvg = insertPolygonShape(parent, w2, h, points);
-  node.intersect = function(point2) {
-    return (0,intersect_polygon/* intersectPolygon */.A)(node, points, point2);
-  };
-  return shapeSvg;
-}
-function rect_right_inv_arrow(parent, bbox, node) {
-  const w2 = bbox.width;
-  const h = bbox.height;
-  const points = [
-    { x: 0, y: 0 },
-    { x: w2 + h / 2, y: 0 },
-    { x: w2, y: -h / 2 },
-    { x: w2 + h / 2, y: -h },
-    { x: 0, y: -h }
-  ];
-  const shapeSvg = insertPolygonShape(parent, w2, h, points);
-  node.intersect = function(point2) {
-    return (0,intersect_polygon/* intersectPolygon */.A)(node, points, point2);
-  };
-  return shapeSvg;
-}
-function stadium(parent, bbox, node) {
-  const h = bbox.height;
-  const w2 = bbox.width + h / 4;
-  const shapeSvg = parent.insert("rect", ":first-child").attr("rx", h / 2).attr("ry", h / 2).attr("x", -w2 / 2).attr("y", -h / 2).attr("width", w2).attr("height", h);
-  node.intersect = function(point2) {
-    return (0,intersect_rect/* intersectRect */.q)(node, point2);
-  };
-  return shapeSvg;
-}
-function subroutine(parent, bbox, node) {
-  const w2 = bbox.width;
-  const h = bbox.height;
-  const points = [
-    { x: 0, y: 0 },
-    { x: w2, y: 0 },
-    { x: w2, y: -h },
-    { x: 0, y: -h },
-    { x: 0, y: 0 },
-    { x: -8, y: 0 },
-    { x: w2 + 8, y: 0 },
-    { x: w2 + 8, y: -h },
-    { x: -8, y: -h },
-    { x: -8, y: 0 }
-  ];
-  const shapeSvg = insertPolygonShape(parent, w2, h, points);
-  node.intersect = function(point2) {
-    return (0,intersect_polygon/* intersectPolygon */.A)(node, points, point2);
-  };
-  return shapeSvg;
-}
-function cylinder(parent, bbox, node) {
-  const w2 = bbox.width;
-  const rx = w2 / 2;
-  const ry = rx / (2.5 + w2 / 50);
-  const h = bbox.height + ry;
-  const shape = "M 0," + ry + " a " + rx + "," + ry + " 0,0,0 " + w2 + " 0 a " + rx + "," + ry + " 0,0,0 " + -w2 + " 0 l 0," + h + " a " + rx + "," + ry + " 0,0,0 " + w2 + " 0 l 0," + -h;
-  const shapeSvg = parent.attr("label-offset-y", ry).insert("path", ":first-child").attr("d", shape).attr("transform", "translate(" + -w2 / 2 + "," + -(h / 2 + ry) + ")");
-  node.intersect = function(point2) {
-    const pos = (0,intersect_rect/* intersectRect */.q)(node, point2);
-    const x = pos.x - node.x;
-    if (rx != 0 && (Math.abs(x) < node.width / 2 || Math.abs(x) == node.width / 2 && Math.abs(pos.y - node.y) > node.height / 2 - ry)) {
-      let y = ry * ry * (1 - x * x / (rx * rx));
-      if (y != 0) {
-        y = Math.sqrt(y);
-      }
-      y = ry - y;
-      if (point2.y - node.y > 0) {
-        y = -y;
-      }
-      pos.y += y;
-    }
-    return pos;
-  };
-  return shapeSvg;
-}
-function addToRender(render2) {
-  render2.shapes().question = question;
-  render2.shapes().hexagon = hexagon;
-  render2.shapes().stadium = stadium;
-  render2.shapes().subroutine = subroutine;
-  render2.shapes().cylinder = cylinder;
-  render2.shapes().rect_left_inv_arrow = rect_left_inv_arrow;
-  render2.shapes().lean_right = lean_right;
-  render2.shapes().lean_left = lean_left;
-  render2.shapes().trapezoid = trapezoid;
-  render2.shapes().inv_trapezoid = inv_trapezoid;
-  render2.shapes().rect_right_inv_arrow = rect_right_inv_arrow;
-}
-function addToRenderV2(addShape) {
-  addShape({ question });
-  addShape({ hexagon });
-  addShape({ stadium });
-  addShape({ subroutine });
-  addShape({ cylinder });
-  addShape({ rect_left_inv_arrow });
-  addShape({ lean_right });
-  addShape({ lean_left });
-  addShape({ trapezoid });
-  addShape({ inv_trapezoid });
-  addShape({ rect_right_inv_arrow });
-}
-function insertPolygonShape(parent, w2, h, points) {
-  return parent.insert("polygon", ":first-child").attr(
-    "points",
-    points.map(function(d) {
-      return d.x + "," + d.y;
-    }).join(" ")
-  ).attr("transform", "translate(" + -w2 / 2 + "," + h / 2 + ")");
-}
-const flowChartShapes = {
-  addToRender,
-  addToRenderV2
-};
-const conf$7 = {};
-const setConf$7 = function(cnf) {
-  const keys2 = Object.keys(cnf);
-  for (const key of keys2) {
-    conf$7[key] = cnf[key];
-  }
-};
-const addVertices$1 = function(vert, g, svgId, root, _doc, diagObj) {
-  const svg = !root ? (0,src/* select */.Ys)(`[id="${svgId}"]`) : root.select(`[id="${svgId}"]`);
-  const doc = !_doc ? document : _doc;
-  const keys2 = Object.keys(vert);
-  keys2.forEach(function(id2) {
-    const vertex = vert[id2];
-    let classStr = "default";
-    if (vertex.classes.length > 0) {
-      classStr = vertex.classes.join(" ");
-    }
-    const styles = getStylesFromArray(vertex.styles);
-    let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id;
-    let vertexNode;
-    if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-      const node = {
-        label: vertexText.replace(
-          /fa[blrs]?:fa-[\w-]+/g,
-          (s) => `<i class='${s.replace(":", " ")}'></i>`
-        )
-      };
-      vertexNode = (0,add_html_label/* addHtmlLabel */.a)(svg, node).node();
-      vertexNode.parentNode.removeChild(vertexNode);
-    } else {
-      const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text");
-      svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:"));
-      const rows = vertexText.split(common$1.lineBreakRegex);
-      for (const row of rows) {
-        const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan");
-        tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve");
-        tspan.setAttribute("dy", "1em");
-        tspan.setAttribute("x", "1");
-        tspan.textContent = row;
-        svgLabel.appendChild(tspan);
-      }
-      vertexNode = svgLabel;
-    }
-    let radious = 0;
-    let _shape = "";
-    switch (vertex.type) {
-      case "round":
-        radious = 5;
-        _shape = "rect";
-        break;
-      case "square":
-        _shape = "rect";
-        break;
-      case "diamond":
-        _shape = "question";
-        break;
-      case "hexagon":
-        _shape = "hexagon";
-        break;
-      case "odd":
-        _shape = "rect_left_inv_arrow";
-        break;
-      case "lean_right":
-        _shape = "lean_right";
-        break;
-      case "lean_left":
-        _shape = "lean_left";
-        break;
-      case "trapezoid":
-        _shape = "trapezoid";
-        break;
-      case "inv_trapezoid":
-        _shape = "inv_trapezoid";
-        break;
-      case "odd_right":
-        _shape = "rect_left_inv_arrow";
-        break;
-      case "circle":
-        _shape = "circle";
-        break;
-      case "ellipse":
-        _shape = "ellipse";
-        break;
-      case "stadium":
-        _shape = "stadium";
-        break;
-      case "subroutine":
-        _shape = "subroutine";
-        break;
-      case "cylinder":
-        _shape = "cylinder";
-        break;
-      case "group":
-        _shape = "rect";
-        break;
-      default:
-        _shape = "rect";
-    }
-    log$1.warn("Adding node", vertex.id, vertex.domId);
-    g.setNode(diagObj.db.lookUpDomId(vertex.id), {
-      labelType: "svg",
-      labelStyle: styles.labelStyle,
-      shape: _shape,
-      label: vertexNode,
-      rx: radious,
-      ry: radious,
-      class: classStr,
-      style: styles.style,
-      id: diagObj.db.lookUpDomId(vertex.id)
-    });
-  });
-};
-const addEdges$1 = function(edges2, g, diagObj) {
-  let cnt2 = 0;
-  let defaultStyle2;
-  let defaultLabelStyle;
-  if (edges2.defaultStyle !== void 0) {
-    const defaultStyles = getStylesFromArray(edges2.defaultStyle);
-    defaultStyle2 = defaultStyles.style;
-    defaultLabelStyle = defaultStyles.labelStyle;
-  }
-  edges2.forEach(function(edge) {
-    cnt2++;
-    var linkId = "L-" + edge.start + "-" + edge.end;
-    var linkNameStart = "LS-" + edge.start;
-    var linkNameEnd = "LE-" + edge.end;
-    const edgeData = {};
-    if (edge.type === "arrow_open") {
-      edgeData.arrowhead = "none";
-    } else {
-      edgeData.arrowhead = "normal";
-    }
-    let style = "";
-    let labelStyle = "";
-    if (edge.style !== void 0) {
-      const styles = getStylesFromArray(edge.style);
-      style = styles.style;
-      labelStyle = styles.labelStyle;
-    } else {
-      switch (edge.stroke) {
-        case "normal":
-          style = "fill:none";
-          if (defaultStyle2 !== void 0) {
-            style = defaultStyle2;
-          }
-          if (defaultLabelStyle !== void 0) {
-            labelStyle = defaultLabelStyle;
-          }
-          break;
-        case "dotted":
-          style = "fill:none;stroke-width:2px;stroke-dasharray:3;";
-          break;
-        case "thick":
-          style = " stroke-width: 3.5px;fill:none";
-          break;
-      }
-    }
-    edgeData.style = style;
-    edgeData.labelStyle = labelStyle;
-    if (edge.interpolate !== void 0) {
-      edgeData.curve = interpolateToCurve(edge.interpolate, src/* curveLinear */.c_6);
-    } else if (edges2.defaultInterpolate !== void 0) {
-      edgeData.curve = interpolateToCurve(edges2.defaultInterpolate, src/* curveLinear */.c_6);
-    } else {
-      edgeData.curve = interpolateToCurve(conf$7.curve, src/* curveLinear */.c_6);
-    }
-    if (edge.text === void 0) {
-      if (edge.style !== void 0) {
-        edgeData.arrowheadStyle = "fill: #333";
-      }
-    } else {
-      edgeData.arrowheadStyle = "fill: #333";
-      edgeData.labelpos = "c";
-      if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-        edgeData.labelType = "html";
-        edgeData.label = `<span id="L-${linkId}" class="edgeLabel L-${linkNameStart}' L-${linkNameEnd}" style="${edgeData.labelStyle}">${edge.text.replace(
-          /fa[blrs]?:fa-[\w-]+/g,
-          (s) => `<i class='${s.replace(":", " ")}'></i>`
-        )}</span>`;
-      } else {
-        edgeData.labelType = "text";
-        edgeData.label = edge.text.replace(common$1.lineBreakRegex, "\n");
-        if (edge.style === void 0) {
-          edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none";
-        }
-        edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:");
-      }
-    }
-    edgeData.id = linkId;
-    edgeData.class = linkNameStart + " " + linkNameEnd;
-    edgeData.minlen = edge.length || 1;
-    g.setEdge(diagObj.db.lookUpDomId(edge.start), diagObj.db.lookUpDomId(edge.end), edgeData, cnt2);
-  });
-};
-const getClasses$3 = function(text, diagObj) {
-  log$1.info("Extracting classes");
-  diagObj.db.clear();
-  try {
-    diagObj.parse(text);
-    return diagObj.db.getClasses();
-  } catch (e) {
-    log$1.error(e);
-    return {};
-  }
-};
-const draw$a = function(text, id2, _version, diagObj) {
-  log$1.info("Drawing flowchart");
-  diagObj.db.clear();
-  const { securityLevel, flowchart: conf2 } = getConfig$1();
-  let sandboxElement;
-  if (securityLevel === "sandbox") {
-    sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-  }
-  const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-  const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document;
-  try {
-    diagObj.parser.parse(text);
-  } catch (err) {
-    log$1.debug("Parsing failed");
-  }
-  let dir = diagObj.db.getDirection();
-  if (dir === void 0) {
-    dir = "TD";
-  }
-  const nodeSpacing = conf2.nodeSpacing || 50;
-  const rankSpacing = conf2.rankSpacing || 50;
-  const g = new graphlib/* Graph */.k({
-    multigraph: true,
-    compound: true
-  }).setGraph({
-    rankdir: dir,
-    nodesep: nodeSpacing,
-    ranksep: rankSpacing,
-    marginx: 8,
-    marginy: 8
-  }).setDefaultEdgeLabel(function() {
-    return {};
-  });
-  let subG;
-  const subGraphs2 = diagObj.db.getSubGraphs();
-  for (let i2 = subGraphs2.length - 1; i2 >= 0; i2--) {
-    subG = subGraphs2[i2];
-    diagObj.db.addVertex(subG.id, subG.title, "group", void 0, subG.classes);
-  }
-  const vert = diagObj.db.getVertices();
-  log$1.warn("Get vertices", vert);
-  const edges2 = diagObj.db.getEdges();
-  let i = 0;
-  for (i = subGraphs2.length - 1; i >= 0; i--) {
-    subG = subGraphs2[i];
-    (0,src/* selectAll */.td_)("cluster").append("text");
-    for (let j = 0; j < subG.nodes.length; j++) {
-      log$1.warn(
-        "Setting subgraph",
-        subG.nodes[j],
-        diagObj.db.lookUpDomId(subG.nodes[j]),
-        diagObj.db.lookUpDomId(subG.id)
-      );
-      g.setParent(diagObj.db.lookUpDomId(subG.nodes[j]), diagObj.db.lookUpDomId(subG.id));
-    }
-  }
-  addVertices$1(vert, g, id2, root, doc, diagObj);
-  addEdges$1(edges2, g, diagObj);
-  const render2 = new dagre_d3_es_src/* render */.sY();
-  flowChartShapes.addToRender(render2);
-  render2.arrows().none = function normal(parent, id3, edge, type2) {
-    const marker = parent.append("marker").attr("id", id3).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerUnits", "strokeWidth").attr("markerWidth", 8).attr("markerHeight", 6).attr("orient", "auto");
-    const path = marker.append("path").attr("d", "M 0 0 L 0 0 L 0 0 z");
-    (0,util/* applyStyle */.bg)(path, edge[type2 + "Style"]);
-  };
-  render2.arrows().normal = function normal(parent, id3) {
-    const marker = parent.append("marker").attr("id", id3).attr("viewBox", "0 0 10 10").attr("refX", 9).attr("refY", 5).attr("markerUnits", "strokeWidth").attr("markerWidth", 8).attr("markerHeight", 6).attr("orient", "auto");
-    marker.append("path").attr("d", "M 0 0 L 10 5 L 0 10 z").attr("class", "arrowheadPath").style("stroke-width", 1).style("stroke-dasharray", "1,0");
-  };
-  const svg = root.select(`[id="${id2}"]`);
-  const element = root.select("#" + id2 + " g");
-  render2(element, g);
-  element.selectAll("g.node").attr("title", function() {
-    return diagObj.db.getTooltip(this.id);
-  });
-  diagObj.db.indexNodes("subGraph" + i);
-  for (i = 0; i < subGraphs2.length; i++) {
-    subG = subGraphs2[i];
-    if (subG.title !== "undefined") {
-      const clusterRects = doc.querySelectorAll(
-        "#" + id2 + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"] rect'
-      );
-      const clusterEl = doc.querySelectorAll(
-        "#" + id2 + ' [id="' + diagObj.db.lookUpDomId(subG.id) + '"]'
-      );
-      const xPos = clusterRects[0].x.baseVal.value;
-      const yPos = clusterRects[0].y.baseVal.value;
-      const _width = clusterRects[0].width.baseVal.value;
-      const cluster = (0,src/* select */.Ys)(clusterEl[0]);
-      const te = cluster.select(".label");
-      te.attr("transform", `translate(${xPos + _width / 2}, ${yPos + 14})`);
-      te.attr("id", id2 + "Text");
-      for (let j = 0; j < subG.classes.length; j++) {
-        clusterEl[0].classList.add(subG.classes[j]);
-      }
-    }
-  }
-  if (!conf2.htmlLabels) {
-    const labels = doc.querySelectorAll('[id="' + id2 + '"] .edgeLabel .label');
-    for (const label of labels) {
-      const dim = label.getBBox();
-      const rect2 = doc.createElementNS("http://www.w3.org/2000/svg", "rect");
-      rect2.setAttribute("rx", 0);
-      rect2.setAttribute("ry", 0);
-      rect2.setAttribute("width", dim.width);
-      rect2.setAttribute("height", dim.height);
-      label.insertBefore(rect2, label.firstChild);
-    }
-  }
-  setupGraphViewbox$1(g, svg, conf2.diagramPadding, conf2.useMaxWidth);
-  const keys2 = Object.keys(vert);
-  keys2.forEach(function(key) {
-    const vertex = vert[key];
-    if (vertex.link) {
-      const node = root.select("#" + id2 + ' [id="' + diagObj.db.lookUpDomId(key) + '"]');
-      if (node) {
-        const link = doc.createElementNS("http://www.w3.org/2000/svg", "a");
-        link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" "));
-        link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link);
-        link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener");
-        if (securityLevel === "sandbox") {
-          link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top");
-        } else if (vertex.linkTarget) {
-          link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget);
-        }
-        const linkNode = node.insert(function() {
-          return link;
-        }, ":first-child");
-        const shape = node.select(".label-container");
-        if (shape) {
-          linkNode.append(function() {
-            return shape.node();
-          });
-        }
-        const label = node.select(".label");
-        if (label) {
-          linkNode.append(function() {
-            return label.node();
-          });
-        }
-      }
-    }
-  });
-};
-const flowRenderer = {
-  setConf: setConf$7,
-  addVertices: addVertices$1,
-  addEdges: addEdges$1,
-  getClasses: getClasses$3,
-  draw: draw$a
-};
-const conf$6 = {};
-const setConf$6 = function(cnf) {
-  const keys2 = Object.keys(cnf);
-  for (const key of keys2) {
-    conf$6[key] = cnf[key];
-  }
-};
-const addVertices = function(vert, g, svgId, root, doc, diagObj) {
-  const svg = root.select(`[id="${svgId}"]`);
-  const keys2 = Object.keys(vert);
-  keys2.forEach(function(id2) {
-    const vertex = vert[id2];
-    let classStr = "default";
-    if (vertex.classes.length > 0) {
-      classStr = vertex.classes.join(" ");
-    }
-    const styles = getStylesFromArray(vertex.styles);
-    let vertexText = vertex.text !== void 0 ? vertex.text : vertex.id;
-    let vertexNode;
-    if (evaluate(getConfig$1().flowchart.htmlLabels)) {
-      const node = {
-        label: vertexText.replace(
-          /fa[blrs]?:fa-[\w-]+/g,
-          (s) => `<i class='${s.replace(":", " ")}'></i>`
-        )
-      };
-      vertexNode = (0,add_html_label/* addHtmlLabel */.a)(svg, node).node();
-      vertexNode.parentNode.removeChild(vertexNode);
-    } else {
-      const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text");
-      svgLabel.setAttribute("style", styles.labelStyle.replace("color:", "fill:"));
-      const rows = vertexText.split(common$1.lineBreakRegex);
-      for (const row of rows) {
-        const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan");
-        tspan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve");
-        tspan.setAttribute("dy", "1em");
-        tspan.setAttribute("x", "1");
-        tspan.textContent = row;
-        svgLabel.appendChild(tspan);
-      }
-      vertexNode = svgLabel;
-    }
-    let radious = 0;
-    let _shape = "";
-    switch (vertex.type) {
-      case "round":
-        radious = 5;
-        _shape = "rect";
-        break;
-      case "square":
-        _shape = "rect";
-        break;
-      case "diamond":
-        _shape = "question";
-        break;
-      case "hexagon":
-        _shape = "hexagon";
-        break;
-      case "odd":
-        _shape = "rect_left_inv_arrow";
-        break;
-      case "lean_right":
-        _shape = "lean_right";
-        break;
-      case "lean_left":
-        _shape = "lean_left";
-        break;
-      case "trapezoid":
-        _shape = "trapezoid";
-        break;
-      case "inv_trapezoid":
-        _shape = "inv_trapezoid";
-        break;
-      case "odd_right":
-        _shape = "rect_left_inv_arrow";
-        break;
-      case "circle":
-        _shape = "circle";
-        break;
-      case "ellipse":
-        _shape = "ellipse";
-        break;
-      case "stadium":
-        _shape = "stadium";
-        break;
-      case "subroutine":
-        _shape = "subroutine";
-        break;
-      case "cylinder":
-        _shape = "cylinder";
-        break;
-      case "group":
-        _shape = "rect";
-        break;
-      case "doublecircle":
-        _shape = "doublecircle";
-        break;
-      default:
-        _shape = "rect";
-    }
-    g.setNode(vertex.id, {
-      labelStyle: styles.labelStyle,
-      shape: _shape,
-      labelText: vertexText,
-      rx: radious,
-      ry: radious,
-      class: classStr,
-      style: styles.style,
-      id: vertex.id,
-      link: vertex.link,
-      linkTarget: vertex.linkTarget,
-      tooltip: diagObj.db.getTooltip(vertex.id) || "",
-      domId: diagObj.db.lookUpDomId(vertex.id),
-      haveCallback: vertex.haveCallback,
-      width: vertex.type === "group" ? 500 : void 0,
-      dir: vertex.dir,
-      type: vertex.type,
-      props: vertex.props,
-      padding: getConfig$1().flowchart.padding
-    });
-    log$1.info("setNode", {
-      labelStyle: styles.labelStyle,
-      shape: _shape,
-      labelText: vertexText,
-      rx: radious,
-      ry: radious,
-      class: classStr,
-      style: styles.style,
-      id: vertex.id,
-      domId: diagObj.db.lookUpDomId(vertex.id),
-      width: vertex.type === "group" ? 500 : void 0,
-      type: vertex.type,
-      dir: vertex.dir,
-      props: vertex.props,
-      padding: getConfig$1().flowchart.padding
-    });
-  });
-};
-const addEdges = function(edges2, g, diagObj) {
-  log$1.info("abc78 edges = ", edges2);
-  let cnt2 = 0;
-  let linkIdCnt = {};
-  let defaultStyle2;
-  let defaultLabelStyle;
-  if (edges2.defaultStyle !== void 0) {
-    const defaultStyles = getStylesFromArray(edges2.defaultStyle);
-    defaultStyle2 = defaultStyles.style;
-    defaultLabelStyle = defaultStyles.labelStyle;
-  }
-  edges2.forEach(function(edge) {
-    cnt2++;
-    var linkIdBase = "L-" + edge.start + "-" + edge.end;
-    if (linkIdCnt[linkIdBase] === void 0) {
-      linkIdCnt[linkIdBase] = 0;
-      log$1.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]);
-    } else {
-      linkIdCnt[linkIdBase]++;
-      log$1.info("abc78 new entry", linkIdBase, linkIdCnt[linkIdBase]);
-    }
-    let linkId = linkIdBase + "-" + linkIdCnt[linkIdBase];
-    log$1.info("abc78 new link id to be used is", linkIdBase, linkId, linkIdCnt[linkIdBase]);
-    var linkNameStart = "LS-" + edge.start;
-    var linkNameEnd = "LE-" + edge.end;
-    const edgeData = { style: "", labelStyle: "" };
-    edgeData.minlen = edge.length || 1;
-    if (edge.type === "arrow_open") {
-      edgeData.arrowhead = "none";
-    } else {
-      edgeData.arrowhead = "normal";
-    }
-    edgeData.arrowTypeStart = "arrow_open";
-    edgeData.arrowTypeEnd = "arrow_open";
-    switch (edge.type) {
-      case "double_arrow_cross":
-        edgeData.arrowTypeStart = "arrow_cross";
-      case "arrow_cross":
-        edgeData.arrowTypeEnd = "arrow_cross";
-        break;
-      case "double_arrow_point":
-        edgeData.arrowTypeStart = "arrow_point";
-      case "arrow_point":
-        edgeData.arrowTypeEnd = "arrow_point";
-        break;
-      case "double_arrow_circle":
-        edgeData.arrowTypeStart = "arrow_circle";
-      case "arrow_circle":
-        edgeData.arrowTypeEnd = "arrow_circle";
-        break;
-    }
-    let style = "";
-    let labelStyle = "";
-    switch (edge.stroke) {
-      case "normal":
-        style = "fill:none;";
-        if (defaultStyle2 !== void 0) {
-          style = defaultStyle2;
-        }
-        if (defaultLabelStyle !== void 0) {
-          labelStyle = defaultLabelStyle;
-        }
-        edgeData.thickness = "normal";
-        edgeData.pattern = "solid";
-        break;
-      case "dotted":
-        edgeData.thickness = "normal";
-        edgeData.pattern = "dotted";
-        edgeData.style = "fill:none;stroke-width:2px;stroke-dasharray:3;";
-        break;
-      case "thick":
-        edgeData.thickness = "thick";
-        edgeData.pattern = "solid";
-        edgeData.style = "stroke-width: 3.5px;fill:none;";
-        break;
-    }
-    if (edge.style !== void 0) {
-      const styles = getStylesFromArray(edge.style);
-      style = styles.style;
-      labelStyle = styles.labelStyle;
-    }
-    edgeData.style = edgeData.style += style;
-    edgeData.labelStyle = edgeData.labelStyle += labelStyle;
-    if (edge.interpolate !== void 0) {
-      edgeData.curve = interpolateToCurve(edge.interpolate, src/* curveLinear */.c_6);
-    } else if (edges2.defaultInterpolate !== void 0) {
-      edgeData.curve = interpolateToCurve(edges2.defaultInterpolate, src/* curveLinear */.c_6);
-    } else {
-      edgeData.curve = interpolateToCurve(conf$6.curve, src/* curveLinear */.c_6);
-    }
-    if (edge.text === void 0) {
-      if (edge.style !== void 0) {
-        edgeData.arrowheadStyle = "fill: #333";
-      }
-    } else {
-      edgeData.arrowheadStyle = "fill: #333";
-      edgeData.labelpos = "c";
-    }
-    edgeData.labelType = "text";
-    edgeData.label = edge.text.replace(common$1.lineBreakRegex, "\n");
-    if (edge.style === void 0) {
-      edgeData.style = edgeData.style || "stroke: #333; stroke-width: 1.5px;fill:none;";
-    }
-    edgeData.labelStyle = edgeData.labelStyle.replace("color:", "fill:");
-    edgeData.id = linkId;
-    edgeData.classes = "flowchart-link " + linkNameStart + " " + linkNameEnd;
-    g.setEdge(edge.start, edge.end, edgeData, cnt2);
-  });
-};
-const getClasses$2 = function(text, diagObj) {
-  log$1.info("Extracting classes");
-  diagObj.db.clear();
-  try {
-    diagObj.parse(text);
-    return diagObj.db.getClasses();
-  } catch (e) {
-    return;
-  }
-};
-const draw$9 = function(text, id2, _version, diagObj) {
-  log$1.info("Drawing flowchart");
-  diagObj.db.clear();
-  flowDb.setGen("gen-2");
-  diagObj.parser.parse(text);
-  let dir = diagObj.db.getDirection();
-  if (dir === void 0) {
-    dir = "TD";
-  }
-  const { securityLevel, flowchart: conf2 } = getConfig$1();
-  const nodeSpacing = conf2.nodeSpacing || 50;
-  const rankSpacing = conf2.rankSpacing || 50;
-  let sandboxElement;
-  if (securityLevel === "sandbox") {
-    sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-  }
-  const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-  const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document;
-  const g = new graphlib/* Graph */.k({
-    multigraph: true,
-    compound: true
-  }).setGraph({
-    rankdir: dir,
-    nodesep: nodeSpacing,
-    ranksep: rankSpacing,
-    marginx: 0,
-    marginy: 0
-  }).setDefaultEdgeLabel(function() {
-    return {};
-  });
-  let subG;
-  const subGraphs2 = diagObj.db.getSubGraphs();
-  log$1.info("Subgraphs - ", subGraphs2);
-  for (let i2 = subGraphs2.length - 1; i2 >= 0; i2--) {
-    subG = subGraphs2[i2];
-    log$1.info("Subgraph - ", subG);
-    diagObj.db.addVertex(subG.id, subG.title, "group", void 0, subG.classes, subG.dir);
-  }
-  const vert = diagObj.db.getVertices();
-  const edges2 = diagObj.db.getEdges();
-  log$1.info("Edges", edges2);
-  let i = 0;
-  for (i = subGraphs2.length - 1; i >= 0; i--) {
-    subG = subGraphs2[i];
-    (0,src/* selectAll */.td_)("cluster").append("text");
-    for (let j = 0; j < subG.nodes.length; j++) {
-      log$1.info("Setting up subgraphs", subG.nodes[j], subG.id);
-      g.setParent(subG.nodes[j], subG.id);
-    }
-  }
-  addVertices(vert, g, id2, root, doc, diagObj);
-  addEdges(edges2, g);
-  const svg = root.select(`[id="${id2}"]`);
-  const element = root.select("#" + id2 + " g");
-  render$1(element, g, ["point", "circle", "cross"], "flowchart", id2);
-  mermaid_ae477ddf_utils.insertTitle(svg, "flowchartTitleText", conf2.titleTopMargin, diagObj.db.getDiagramTitle());
-  setupGraphViewbox$1(g, svg, conf2.diagramPadding, conf2.useMaxWidth);
-  diagObj.db.indexNodes("subGraph" + i);
-  if (!conf2.htmlLabels) {
-    const labels = doc.querySelectorAll('[id="' + id2 + '"] .edgeLabel .label');
-    for (const label of labels) {
-      const dim = label.getBBox();
-      const rect2 = doc.createElementNS("http://www.w3.org/2000/svg", "rect");
-      rect2.setAttribute("rx", 0);
-      rect2.setAttribute("ry", 0);
-      rect2.setAttribute("width", dim.width);
-      rect2.setAttribute("height", dim.height);
-      label.insertBefore(rect2, label.firstChild);
-    }
-  }
-  const keys2 = Object.keys(vert);
-  keys2.forEach(function(key) {
-    const vertex = vert[key];
-    if (vertex.link) {
-      const node = (0,src/* select */.Ys)("#" + id2 + ' [id="' + key + '"]');
-      if (node) {
-        const link = doc.createElementNS("http://www.w3.org/2000/svg", "a");
-        link.setAttributeNS("http://www.w3.org/2000/svg", "class", vertex.classes.join(" "));
-        link.setAttributeNS("http://www.w3.org/2000/svg", "href", vertex.link);
-        link.setAttributeNS("http://www.w3.org/2000/svg", "rel", "noopener");
-        if (securityLevel === "sandbox") {
-          link.setAttributeNS("http://www.w3.org/2000/svg", "target", "_top");
-        } else if (vertex.linkTarget) {
-          link.setAttributeNS("http://www.w3.org/2000/svg", "target", vertex.linkTarget);
-        }
-        const linkNode = node.insert(function() {
-          return link;
-        }, ":first-child");
-        const shape = node.select(".label-container");
-        if (shape) {
-          linkNode.append(function() {
-            return shape.node();
-          });
-        }
-        const label = node.select(".label");
-        if (label) {
-          linkNode.append(function() {
-            return label.node();
-          });
-        }
-      }
-    }
-  });
-};
-const flowRendererV2 = {
-  setConf: setConf$6,
-  addVertices,
-  addEdges,
-  getClasses: getClasses$2,
-  draw: draw$9
-};
-var parser$6 = function() {
-  var o = function(k, v, o2, l) {
-    for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
-      ;
-    return o2;
-  }, $V0 = [1, 3], $V1 = [1, 5], $V2 = [7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 25, 26, 28, 35, 40], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [1, 18], $V7 = [1, 19], $V8 = [1, 20], $V9 = [1, 21], $Va = [1, 22], $Vb = [1, 23], $Vc = [1, 24], $Vd = [1, 25], $Ve = [1, 26], $Vf = [1, 27], $Vg = [1, 29], $Vh = [1, 31], $Vi = [1, 34], $Vj = [5, 7, 9, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 23, 25, 26, 28, 35, 40];
-  var parser2 = {
-    trace: function trace() {
-    },
-    yy: {},
-    symbols_: { "error": 2, "start": 3, "directive": 4, "gantt": 5, "document": 6, "EOF": 7, "line": 8, "SPACE": 9, "statement": 10, "NL": 11, "dateFormat": 12, "inclusiveEndDates": 13, "topAxis": 14, "axisFormat": 15, "tickInterval": 16, "excludes": 17, "includes": 18, "todayMarker": 19, "title": 20, "acc_title": 21, "acc_title_value": 22, "acc_descr": 23, "acc_descr_value": 24, "acc_descr_multiline_value": 25, "section": 26, "clickStatement": 27, "taskTxt": 28, "taskData": 29, "openDirective": 30, "typeDirective": 31, "closeDirective": 32, ":": 33, "argDirective": 34, "click": 35, "callbackname": 36, "callbackargs": 37, "href": 38, "clickStatementDebug": 39, "open_directive": 40, "type_directive": 41, "arg_directive": 42, "close_directive": 43, "$accept": 0, "$end": 1 },
-    terminals_: { 2: "error", 5: "gantt", 7: "EOF", 9: "SPACE", 11: "NL", 12: "dateFormat", 13: "inclusiveEndDates", 14: "topAxis", 15: "axisFormat", 16: "tickInterval", 17: "excludes", 18: "includes", 19: "todayMarker", 20: "title", 21: "acc_title", 22: "acc_title_value", 23: "acc_descr", 24: "acc_descr_value", 25: "acc_descr_multiline_value", 26: "section", 28: "taskTxt", 29: "taskData", 33: ":", 35: "click", 36: "callbackname", 37: "callbackargs", 38: "href", 40: "open_directive", 41: "type_directive", 42: "arg_directive", 43: "close_directive" },
-    productions_: [0, [3, 2], [3, 3], [6, 0], [6, 2], [8, 2], [8, 1], [8, 1], [8, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [10, 2], [10, 1], [4, 4], [4, 6], [27, 2], [27, 3], [27, 3], [27, 4], [27, 3], [27, 4], [27, 2], [39, 2], [39, 3], [39, 3], [39, 4], [39, 3], [39, 4], [39, 2], [30, 1], [31, 1], [34, 1], [32, 1]],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
-      var $0 = $$.length - 1;
-      switch (yystate) {
-        case 2:
-          return $$[$0 - 1];
-        case 3:
-          this.$ = [];
-          break;
-        case 4:
-          $$[$0 - 1].push($$[$0]);
-          this.$ = $$[$0 - 1];
-          break;
-        case 5:
-        case 6:
-          this.$ = $$[$0];
-          break;
-        case 7:
-        case 8:
-          this.$ = [];
-          break;
-        case 9:
-          yy.setDateFormat($$[$0].substr(11));
-          this.$ = $$[$0].substr(11);
-          break;
-        case 10:
-          yy.enableInclusiveEndDates();
-          this.$ = $$[$0].substr(18);
-          break;
-        case 11:
-          yy.TopAxis();
-          this.$ = $$[$0].substr(8);
-          break;
-        case 12:
-          yy.setAxisFormat($$[$0].substr(11));
-          this.$ = $$[$0].substr(11);
-          break;
-        case 13:
-          yy.setTickInterval($$[$0].substr(13));
-          this.$ = $$[$0].substr(13);
-          break;
-        case 14:
-          yy.setExcludes($$[$0].substr(9));
-          this.$ = $$[$0].substr(9);
-          break;
-        case 15:
-          yy.setIncludes($$[$0].substr(9));
-          this.$ = $$[$0].substr(9);
-          break;
-        case 16:
-          yy.setTodayMarker($$[$0].substr(12));
-          this.$ = $$[$0].substr(12);
-          break;
-        case 17:
-          yy.setDiagramTitle($$[$0].substr(6));
-          this.$ = $$[$0].substr(6);
-          break;
-        case 18:
-          this.$ = $$[$0].trim();
-          yy.setAccTitle(this.$);
-          break;
-        case 19:
-        case 20:
-          this.$ = $$[$0].trim();
-          yy.setAccDescription(this.$);
-          break;
-        case 21:
-          yy.addSection($$[$0].substr(8));
-          this.$ = $$[$0].substr(8);
-          break;
-        case 23:
-          yy.addTask($$[$0 - 1], $$[$0]);
-          this.$ = "task";
-          break;
-        case 27:
-          this.$ = $$[$0 - 1];
-          yy.setClickEvent($$[$0 - 1], $$[$0], null);
-          break;
-        case 28:
-          this.$ = $$[$0 - 2];
-          yy.setClickEvent($$[$0 - 2], $$[$0 - 1], $$[$0]);
-          break;
-        case 29:
-          this.$ = $$[$0 - 2];
-          yy.setClickEvent($$[$0 - 2], $$[$0 - 1], null);
-          yy.setLink($$[$0 - 2], $$[$0]);
-          break;
-        case 30:
-          this.$ = $$[$0 - 3];
-          yy.setClickEvent($$[$0 - 3], $$[$0 - 2], $$[$0 - 1]);
-          yy.setLink($$[$0 - 3], $$[$0]);
-          break;
-        case 31:
-          this.$ = $$[$0 - 2];
-          yy.setClickEvent($$[$0 - 2], $$[$0], null);
-          yy.setLink($$[$0 - 2], $$[$0 - 1]);
-          break;
-        case 32:
-          this.$ = $$[$0 - 3];
-          yy.setClickEvent($$[$0 - 3], $$[$0 - 1], $$[$0]);
-          yy.setLink($$[$0 - 3], $$[$0 - 2]);
-          break;
-        case 33:
-          this.$ = $$[$0 - 1];
-          yy.setLink($$[$0 - 1], $$[$0]);
-          break;
-        case 34:
-        case 40:
-          this.$ = $$[$0 - 1] + " " + $$[$0];
-          break;
-        case 35:
-        case 36:
-        case 38:
-          this.$ = $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0];
-          break;
-        case 37:
-        case 39:
-          this.$ = $$[$0 - 3] + " " + $$[$0 - 2] + " " + $$[$0 - 1] + " " + $$[$0];
-          break;
-        case 41:
-          yy.parseDirective("%%{", "open_directive");
-          break;
-        case 42:
-          yy.parseDirective($$[$0], "type_directive");
-          break;
-        case 43:
-          $$[$0] = $$[$0].trim().replace(/'/g, '"');
-          yy.parseDirective($$[$0], "arg_directive");
-          break;
-        case 44:
-          yy.parseDirective("}%%", "close_directive", "gantt");
-          break;
-      }
-    },
-    table: [{ 3: 1, 4: 2, 5: $V0, 30: 4, 40: $V1 }, { 1: [3] }, { 3: 6, 4: 2, 5: $V0, 30: 4, 40: $V1 }, o($V2, [2, 3], { 6: 7 }), { 31: 8, 41: [1, 9] }, { 41: [2, 41] }, { 1: [2, 1] }, { 4: 30, 7: [1, 10], 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: $V3, 13: $V4, 14: $V5, 15: $V6, 16: $V7, 17: $V8, 18: $V9, 19: $Va, 20: $Vb, 21: $Vc, 23: $Vd, 25: $Ve, 26: $Vf, 27: 28, 28: $Vg, 30: 4, 35: $Vh, 40: $V1 }, { 32: 32, 33: [1, 33], 43: $Vi }, o([33, 43], [2, 42]), o($V2, [2, 8], { 1: [2, 2] }), o($V2, [2, 4]), { 4: 30, 10: 35, 12: $V3, 13: $V4, 14: $V5, 15: $V6, 16: $V7, 17: $V8, 18: $V9, 19: $Va, 20: $Vb, 21: $Vc, 23: $Vd, 25: $Ve, 26: $Vf, 27: 28, 28: $Vg, 30: 4, 35: $Vh, 40: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 9]), o($V2, [2, 10]), o($V2, [2, 11]), o($V2, [2, 12]), o($V2, [2, 13]), o($V2, [2, 14]), o($V2, [2, 15]), o($V2, [2, 16]), o($V2, [2, 17]), { 22: [1, 36] }, { 24: [1, 37] }, o($V2, [2, 20]), o($V2, [2, 21]), o($V2, [2, 22]), { 29: [1, 38] }, o($V2, [2, 24]), { 36: [1, 39], 38: [1, 40] }, { 11: [1, 41] }, { 34: 42, 42: [1, 43] }, { 11: [2, 44] }, o($V2, [2, 5]), o($V2, [2, 18]), o($V2, [2, 19]), o($V2, [2, 23]), o($V2, [2, 27], { 37: [1, 44], 38: [1, 45] }), o($V2, [2, 33], { 36: [1, 46] }), o($Vj, [2, 25]), { 32: 47, 43: $Vi }, { 43: [2, 43] }, o($V2, [2, 28], { 38: [1, 48] }), o($V2, [2, 29]), o($V2, [2, 31], { 37: [1, 49] }), { 11: [1, 50] }, o($V2, [2, 30]), o($V2, [2, 32]), o($Vj, [2, 26])],
-    defaultActions: { 5: [2, 41], 6: [2, 1], 34: [2, 44], 43: [2, 43] },
-    parseError: function parseError(str2, hash) {
-      if (hash.recoverable) {
-        this.trace(str2);
-      } else {
-        var error = new Error(str2);
-        error.hash = hash;
-        throw error;
-      }
-    },
-    parse: function parse2(input) {
-      var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;
-      var args = lstack.slice.call(arguments, 1);
-      var lexer2 = Object.create(this.lexer);
-      var sharedState = { yy: {} };
-      for (var k in this.yy) {
-        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
-          sharedState.yy[k] = this.yy[k];
-        }
-      }
-      lexer2.setInput(input, sharedState.yy);
-      sharedState.yy.lexer = lexer2;
-      sharedState.yy.parser = this;
-      if (typeof lexer2.yylloc == "undefined") {
-        lexer2.yylloc = {};
-      }
-      var yyloc = lexer2.yylloc;
-      lstack.push(yyloc);
-      var ranges = lexer2.options && lexer2.options.ranges;
-      if (typeof sharedState.yy.parseError === "function") {
-        this.parseError = sharedState.yy.parseError;
-      } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-      }
-      function lex2() {
-        var token;
-        token = tstack.pop() || lexer2.lex() || EOF;
-        if (typeof token !== "number") {
-          if (token instanceof Array) {
-            tstack = token;
-            token = tstack.pop();
-          }
-          token = self.symbols_[token] || token;
-        }
-        return token;
-      }
-      var symbol, state, action, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-          action = this.defaultActions[state];
-        } else {
-          if (symbol === null || typeof symbol == "undefined") {
-            symbol = lex2();
-          }
-          action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-          var errStr = "";
-          expected = [];
-          for (p in table[state]) {
-            if (this.terminals_[p] && p > TERROR) {
-              expected.push("'" + this.terminals_[p] + "'");
-            }
-          }
-          if (lexer2.showPosition) {
-            errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-          } else {
-            errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
-          }
-          this.parseError(errStr, {
-            text: lexer2.match,
-            token: this.terminals_[symbol] || symbol,
-            line: lexer2.yylineno,
-            loc: yyloc,
-            expected
-          });
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-          throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-          case 1:
-            stack.push(symbol);
-            vstack.push(lexer2.yytext);
-            lstack.push(lexer2.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            {
-              yyleng = lexer2.yyleng;
-              yytext = lexer2.yytext;
-              yylineno = lexer2.yylineno;
-              yyloc = lexer2.yylloc;
-            }
-            break;
-          case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-              first_line: lstack[lstack.length - (len || 1)].first_line,
-              last_line: lstack[lstack.length - 1].last_line,
-              first_column: lstack[lstack.length - (len || 1)].first_column,
-              last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-              yyval._$.range = [
-                lstack[lstack.length - (len || 1)].range[0],
-                lstack[lstack.length - 1].range[1]
-              ];
-            }
-            r = this.performAction.apply(yyval, [
-              yytext,
-              yyleng,
-              yylineno,
-              sharedState.yy,
-              action[1],
-              vstack,
-              lstack
-            ].concat(args));
-            if (typeof r !== "undefined") {
-              return r;
-            }
-            if (len) {
-              stack = stack.slice(0, -1 * len * 2);
-              vstack = vstack.slice(0, -1 * len);
-              lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-          case 3:
-            return true;
-        }
-      }
-      return true;
-    }
-  };
-  var lexer = function() {
-    var lexer2 = {
-      EOF: 1,
-      parseError: function parseError(str2, hash) {
-        if (this.yy.parser) {
-          this.yy.parser.parseError(str2, hash);
-        } else {
-          throw new Error(str2);
-        }
-      },
-      // resets the lexer, sets new input
-      setInput: function(input, yy) {
-        this.yy = yy || this.yy || {};
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = "";
-        this.conditionStack = ["INITIAL"];
-        this.yylloc = {
-          first_line: 1,
-          first_column: 0,
-          last_line: 1,
-          last_column: 0
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [0, 0];
-        }
-        this.offset = 0;
-        return this;
-      },
-      // consumes and returns one char from the input
-      input: function() {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno++;
-          this.yylloc.last_line++;
-        } else {
-          this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-          this.yylloc.range[1]++;
-        }
-        this._input = this._input.slice(1);
-        return ch;
-      },
-      // unshifts one char (or a string) into the input
-      unput: function(ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len);
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-        if (lines.length - 1) {
-          this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-        this.yylloc = {
-          first_line: this.yylloc.first_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.first_column,
-          last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-      },
-      // When called from action, caches matched text and appends it on next action
-      more: function() {
-        this._more = true;
-        return this;
-      },
-      // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-      reject: function() {
-        if (this.options.backtrack_lexer) {
-          this._backtrack = true;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-        return this;
-      },
-      // retain first n characters of the match
-      less: function(n) {
-        this.unput(this.match.slice(n));
-      },
-      // displays already matched input, i.e. for error messages
-      pastInput: function() {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
-      },
-      // displays upcoming input, i.e. for error messages
-      upcomingInput: function() {
-        var next = this.match;
-        if (next.length < 20) {
-          next += this._input.substr(0, 20 - next.length);
-        }
-        return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
-      },
-      // displays the character position where the lexing error occurred, i.e. for error messages
-      showPosition: function() {
-        var pre = this.pastInput();
-        var c2 = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c2 + "^";
-      },
-      // test the lexed token: return FALSE when not a match, otherwise return token
-      test_match: function(match, indexed_rule) {
-        var token, lines, backup;
-        if (this.options.backtrack_lexer) {
-          backup = {
-            yylineno: this.yylineno,
-            yylloc: {
-              first_line: this.yylloc.first_line,
-              last_line: this.last_line,
-              first_column: this.yylloc.first_column,
-              last_column: this.yylloc.last_column
-            },
-            yytext: this.yytext,
-            match: this.match,
-            matches: this.matches,
-            matched: this.matched,
-            yyleng: this.yyleng,
-            offset: this.offset,
-            _more: this._more,
-            _input: this._input,
-            yy: this.yy,
-            conditionStack: this.conditionStack.slice(0),
-            done: this.done
-          };
-          if (this.options.ranges) {
-            backup.yylloc.range = this.yylloc.range.slice(0);
-          }
-        }
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno += lines.length;
-        }
-        this.yylloc = {
-          first_line: this.yylloc.last_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.last_column,
-          last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-          this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-          this.done = false;
-        }
-        if (token) {
-          return token;
-        } else if (this._backtrack) {
-          for (var k in backup) {
-            this[k] = backup[k];
-          }
-          return false;
-        }
-        return false;
-      },
-      // return next match in input
-      next: function() {
-        if (this.done) {
-          return this.EOF;
-        }
-        if (!this._input) {
-          this.done = true;
-        }
-        var token, match, tempMatch, index;
-        if (!this._more) {
-          this.yytext = "";
-          this.match = "";
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-          tempMatch = this._input.match(this.rules[rules[i]]);
-          if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-            match = tempMatch;
-            index = i;
-            if (this.options.backtrack_lexer) {
-              token = this.test_match(tempMatch, rules[i]);
-              if (token !== false) {
-                return token;
-              } else if (this._backtrack) {
-                match = false;
-                continue;
-              } else {
-                return false;
-              }
-            } else if (!this.options.flex) {
-              break;
-            }
-          }
-        }
-        if (match) {
-          token = this.test_match(match, rules[index]);
-          if (token !== false) {
-            return token;
-          }
-          return false;
-        }
-        if (this._input === "") {
-          return this.EOF;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-      },
-      // return next match that has a token
-      lex: function lex2() {
-        var r = this.next();
-        if (r) {
-          return r;
-        } else {
-          return this.lex();
-        }
-      },
-      // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-      begin: function begin(condition) {
-        this.conditionStack.push(condition);
-      },
-      // pop the previously active lexer condition state off the condition stack
-      popState: function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-          return this.conditionStack.pop();
-        } else {
-          return this.conditionStack[0];
-        }
-      },
-      // produce the lexer rule set which is active for the currently active lexer condition state
-      _currentRules: function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-          return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-          return this.conditions["INITIAL"].rules;
-        }
-      },
-      // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-      topState: function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-          return this.conditionStack[n];
-        } else {
-          return "INITIAL";
-        }
-      },
-      // alias for begin(condition)
-      pushState: function pushState(condition) {
-        this.begin(condition);
-      },
-      // return the number of states currently on the stack
-      stateStackSize: function stateStackSize() {
-        return this.conditionStack.length;
-      },
-      options: { "case-insensitive": true },
-      performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
-        switch ($avoiding_name_collisions) {
-          case 0:
-            this.begin("open_directive");
-            return 40;
-          case 1:
-            this.begin("type_directive");
-            return 41;
-          case 2:
-            this.popState();
-            this.begin("arg_directive");
-            return 33;
-          case 3:
-            this.popState();
-            this.popState();
-            return 43;
-          case 4:
-            return 42;
-          case 5:
-            this.begin("acc_title");
-            return 21;
-          case 6:
-            this.popState();
-            return "acc_title_value";
-          case 7:
-            this.begin("acc_descr");
-            return 23;
-          case 8:
-            this.popState();
-            return "acc_descr_value";
-          case 9:
-            this.begin("acc_descr_multiline");
-            break;
-          case 10:
-            this.popState();
-            break;
-          case 11:
-            return "acc_descr_multiline_value";
-          case 12:
-            break;
-          case 13:
-            break;
-          case 14:
-            break;
-          case 15:
-            return 11;
-          case 16:
-            break;
-          case 17:
-            break;
-          case 18:
-            break;
-          case 19:
-            this.begin("href");
-            break;
-          case 20:
-            this.popState();
-            break;
-          case 21:
-            return 38;
-          case 22:
-            this.begin("callbackname");
-            break;
-          case 23:
-            this.popState();
-            break;
-          case 24:
-            this.popState();
-            this.begin("callbackargs");
-            break;
-          case 25:
-            return 36;
-          case 26:
-            this.popState();
-            break;
-          case 27:
-            return 37;
-          case 28:
-            this.begin("click");
-            break;
-          case 29:
-            this.popState();
-            break;
-          case 30:
-            return 35;
-          case 31:
-            return 5;
-          case 32:
-            return 12;
-          case 33:
-            return 13;
-          case 34:
-            return 14;
-          case 35:
-            return 15;
-          case 36:
-            return 16;
-          case 37:
-            return 18;
-          case 38:
-            return 17;
-          case 39:
-            return 19;
-          case 40:
-            return "date";
-          case 41:
-            return 20;
-          case 42:
-            return "accDescription";
-          case 43:
-            return 26;
-          case 44:
-            return 28;
-          case 45:
-            return 29;
-          case 46:
-            return 33;
-          case 47:
-            return 7;
-          case 48:
-            return "INVALID";
-        }
-      },
-      rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:%%(?!\{)*[^\n]*)/i, /^(?:[^\}]%%*[^\n]*)/i, /^(?:%%*[^\n]*[\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:href[\s]+["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:call[\s]+)/i, /^(?:\([\s]*\))/i, /^(?:\()/i, /^(?:[^(]*)/i, /^(?:\))/i, /^(?:[^)]*)/i, /^(?:click[\s]+)/i, /^(?:[\s\n])/i, /^(?:[^\s\n]*)/i, /^(?:gantt\b)/i, /^(?:dateFormat\s[^#\n;]+)/i, /^(?:inclusiveEndDates\b)/i, /^(?:topAxis\b)/i, /^(?:axisFormat\s[^#\n;]+)/i, /^(?:tickInterval\s[^#\n;]+)/i, /^(?:includes\s[^#\n;]+)/i, /^(?:excludes\s[^#\n;]+)/i, /^(?:todayMarker\s[^\n;]+)/i, /^(?:\d\d\d\d-\d\d-\d\d\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accDescription\s[^#\n;]+)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i],
-      conditions: { "acc_descr_multiline": { "rules": [10, 11], "inclusive": false }, "acc_descr": { "rules": [8], "inclusive": false }, "acc_title": { "rules": [6], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "callbackargs": { "rules": [26, 27], "inclusive": false }, "callbackname": { "rules": [23, 24, 25], "inclusive": false }, "href": { "rules": [20, 21], "inclusive": false }, "click": { "rules": [29, 30], "inclusive": false }, "INITIAL": { "rules": [0, 5, 7, 9, 12, 13, 14, 15, 16, 17, 18, 19, 22, 28, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48], "inclusive": true } }
-    };
-    return lexer2;
-  }();
-  parser2.lexer = lexer;
-  function Parser() {
-    this.yy = {};
-  }
-  Parser.prototype = parser2;
-  parser2.Parser = Parser;
-  return new Parser();
-}();
-parser$6.parser = parser$6;
-const ganttParser = parser$6;
-const ganttDetector = (txt) => {
-  return txt.match(/^\s*gantt/) !== null;
-};
-dayjs_min_default().extend((isoWeek_default()));
-dayjs_min_default().extend((customParseFormat_default()));
-dayjs_min_default().extend((advancedFormat_default()));
-let dateFormat = "";
-let axisFormat = "";
-let tickInterval = void 0;
-let todayMarker = "";
-let includes = [];
-let excludes = [];
-let links = {};
-let sections$2 = [];
-let tasks$1 = [];
-let currentSection$1 = "";
-const tags = ["active", "done", "crit", "milestone"];
-let funs = [];
-let inclusiveEndDates = false;
-let topAxis = false;
-let lastOrder = 0;
-const parseDirective$5 = function(statement, context, type2) {
-  mermaidAPI.parseDirective(this, statement, context, type2);
-};
-const clear$5 = function() {
-  sections$2 = [];
-  tasks$1 = [];
-  currentSection$1 = "";
-  funs = [];
-  taskCnt = 0;
-  lastTask = void 0;
-  lastTaskID = void 0;
-  rawTasks$1 = [];
-  dateFormat = "";
-  axisFormat = "";
-  tickInterval = void 0;
-  todayMarker = "";
-  includes = [];
-  excludes = [];
-  inclusiveEndDates = false;
-  topAxis = false;
-  lastOrder = 0;
-  links = {};
-  clear$g();
-};
-const setAxisFormat = function(txt) {
-  axisFormat = txt;
-};
-const getAxisFormat = function() {
-  return axisFormat;
-};
-const setTickInterval = function(txt) {
-  tickInterval = txt;
-};
-const getTickInterval = function() {
-  return tickInterval;
-};
-const setTodayMarker = function(txt) {
-  todayMarker = txt;
-};
-const getTodayMarker = function() {
-  return todayMarker;
-};
-const setDateFormat = function(txt) {
-  dateFormat = txt;
-};
-const enableInclusiveEndDates = function() {
-  inclusiveEndDates = true;
-};
-const endDatesAreInclusive = function() {
-  return inclusiveEndDates;
-};
-const enableTopAxis = function() {
-  topAxis = true;
-};
-const topAxisEnabled = function() {
-  return topAxis;
-};
-const getDateFormat = function() {
-  return dateFormat;
-};
-const setIncludes = function(txt) {
-  includes = txt.toLowerCase().split(/[\s,]+/);
-};
-const getIncludes = function() {
-  return includes;
-};
-const setExcludes = function(txt) {
-  excludes = txt.toLowerCase().split(/[\s,]+/);
-};
-const getExcludes = function() {
-  return excludes;
-};
-const getLinks = function() {
-  return links;
-};
-const addSection$2 = function(txt) {
-  currentSection$1 = txt;
-  sections$2.push(txt);
-};
-const getSections$2 = function() {
-  return sections$2;
-};
-const getTasks$1 = function() {
-  let allItemsPricessed = compileTasks$1();
-  const maxDepth = 10;
-  let iterationCount = 0;
-  while (!allItemsPricessed && iterationCount < maxDepth) {
-    allItemsPricessed = compileTasks$1();
-    iterationCount++;
-  }
-  tasks$1 = rawTasks$1;
-  return tasks$1;
-};
-const isInvalidDate = function(date, dateFormat2, excludes2, includes2) {
-  if (includes2.includes(date.format(dateFormat2.trim()))) {
-    return false;
-  }
-  if (date.isoWeekday() >= 6 && excludes2.includes("weekends")) {
-    return true;
-  }
-  if (excludes2.includes(date.format("dddd").toLowerCase())) {
-    return true;
-  }
-  return excludes2.includes(date.format(dateFormat2.trim()));
-};
-const checkTaskDates = function(task, dateFormat2, excludes2, includes2) {
-  if (!excludes2.length || task.manualEndTime) {
-    return;
-  }
-  let startTime;
-  if (task.startTime instanceof Date) {
-    startTime = dayjs_min_default()(task.startTime);
-  } else {
-    startTime = dayjs_min_default()(task.startTime, dateFormat2, true);
-  }
-  startTime = startTime.add(1, "d");
-  let originalEndTime;
-  if (task.endTime instanceof Date) {
-    originalEndTime = dayjs_min_default()(task.endTime);
-  } else {
-    originalEndTime = dayjs_min_default()(task.endTime, dateFormat2, true);
-  }
-  const [fixedEndTime, renderEndTime] = fixTaskDates(
-    startTime,
-    originalEndTime,
-    dateFormat2,
-    excludes2,
-    includes2
-  );
-  task.endTime = fixedEndTime.toDate();
-  task.renderEndTime = renderEndTime;
-};
-const fixTaskDates = function(startTime, endTime, dateFormat2, excludes2, includes2) {
-  let invalid = false;
-  let renderEndTime = null;
-  while (startTime <= endTime) {
-    if (!invalid) {
-      renderEndTime = endTime.toDate();
-    }
-    invalid = isInvalidDate(startTime, dateFormat2, excludes2, includes2);
-    if (invalid) {
-      endTime = endTime.add(1, "d");
-    }
-    startTime = startTime.add(1, "d");
-  }
-  return [endTime, renderEndTime];
-};
-const getStartDate = function(prevTime, dateFormat2, str2) {
-  str2 = str2.trim();
-  const re = /^after\s+([\d\w- ]+)/;
-  const afterStatement = re.exec(str2.trim());
-  if (afterStatement !== null) {
-    let latestEndingTask = null;
-    afterStatement[1].split(" ").forEach(function(id2) {
-      let task = findTaskById(id2);
-      if (task !== void 0) {
-        if (!latestEndingTask) {
-          latestEndingTask = task;
-        } else {
-          if (task.endTime > latestEndingTask.endTime) {
-            latestEndingTask = task;
-          }
-        }
-      }
-    });
-    if (!latestEndingTask) {
-      const dt = new Date();
-      dt.setHours(0, 0, 0, 0);
-      return dt;
-    } else {
-      return latestEndingTask.endTime;
-    }
-  }
-  let mDate = dayjs_min_default()(str2, dateFormat2.trim(), true);
-  if (mDate.isValid()) {
-    return mDate.toDate();
-  } else {
-    log$1.debug("Invalid date:" + str2);
-    log$1.debug("With date format:" + dateFormat2.trim());
-    const d = new Date(str2);
-    if (d === void 0 || isNaN(d.getTime())) {
-      throw new Error("Invalid date:" + str2);
-    }
-    return d;
-  }
-};
-const parseDuration = function(str2) {
-  const statement = /^(\d+(?:\.\d+)?)([Mdhmswy]|ms)$/.exec(str2.trim());
-  if (statement !== null) {
-    return [Number.parseFloat(statement[1]), statement[2]];
-  }
-  return [NaN, "ms"];
-};
-const getEndDate = function(prevTime, dateFormat2, str2, inclusive = false) {
-  str2 = str2.trim();
-  let mDate = dayjs_min_default()(str2, dateFormat2.trim(), true);
-  if (mDate.isValid()) {
-    if (inclusive) {
-      mDate = mDate.add(1, "d");
-    }
-    return mDate.toDate();
-  }
-  let endTime = dayjs_min_default()(prevTime);
-  const [durationValue, durationUnit] = parseDuration(str2);
-  if (!Number.isNaN(durationValue)) {
-    const newEndTime = endTime.add(durationValue, durationUnit);
-    if (newEndTime.isValid()) {
-      endTime = newEndTime;
-    }
-  }
-  return endTime.toDate();
-};
-let taskCnt = 0;
-const parseId = function(idStr) {
-  if (idStr === void 0) {
-    taskCnt = taskCnt + 1;
-    return "task" + taskCnt;
-  }
-  return idStr;
-};
-const compileData = function(prevTask, dataStr) {
-  let ds;
-  if (dataStr.substr(0, 1) === ":") {
-    ds = dataStr.substr(1, dataStr.length);
-  } else {
-    ds = dataStr;
-  }
-  const data = ds.split(",");
-  const task = {};
-  getTaskTags(data, task, tags);
-  for (let i = 0; i < data.length; i++) {
-    data[i] = data[i].trim();
-  }
-  let endTimeData = "";
-  switch (data.length) {
-    case 1:
-      task.id = parseId();
-      task.startTime = prevTask.endTime;
-      endTimeData = data[0];
-      break;
-    case 2:
-      task.id = parseId();
-      task.startTime = getStartDate(void 0, dateFormat, data[0]);
-      endTimeData = data[1];
-      break;
-    case 3:
-      task.id = parseId(data[0]);
-      task.startTime = getStartDate(void 0, dateFormat, data[1]);
-      endTimeData = data[2];
-      break;
-  }
-  if (endTimeData) {
-    task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates);
-    task.manualEndTime = dayjs_min_default()(endTimeData, "YYYY-MM-DD", true).isValid();
-    checkTaskDates(task, dateFormat, excludes, includes);
-  }
-  return task;
-};
-const parseData = function(prevTaskId, dataStr) {
-  let ds;
-  if (dataStr.substr(0, 1) === ":") {
-    ds = dataStr.substr(1, dataStr.length);
-  } else {
-    ds = dataStr;
-  }
-  const data = ds.split(",");
-  const task = {};
-  getTaskTags(data, task, tags);
-  for (let i = 0; i < data.length; i++) {
-    data[i] = data[i].trim();
-  }
-  switch (data.length) {
-    case 1:
-      task.id = parseId();
-      task.startTime = {
-        type: "prevTaskEnd",
-        id: prevTaskId
-      };
-      task.endTime = {
-        data: data[0]
-      };
-      break;
-    case 2:
-      task.id = parseId();
-      task.startTime = {
-        type: "getStartDate",
-        startData: data[0]
-      };
-      task.endTime = {
-        data: data[1]
-      };
-      break;
-    case 3:
-      task.id = parseId(data[0]);
-      task.startTime = {
-        type: "getStartDate",
-        startData: data[1]
-      };
-      task.endTime = {
-        data: data[2]
-      };
-      break;
-  }
-  return task;
-};
-let lastTask;
-let lastTaskID;
-let rawTasks$1 = [];
-const taskDb = {};
-const addTask$1 = function(descr, data) {
-  const rawTask = {
-    section: currentSection$1,
-    type: currentSection$1,
-    processed: false,
-    manualEndTime: false,
-    renderEndTime: null,
-    raw: { data },
-    task: descr,
-    classes: []
-  };
-  const taskInfo = parseData(lastTaskID, data);
-  rawTask.raw.startTime = taskInfo.startTime;
-  rawTask.raw.endTime = taskInfo.endTime;
-  rawTask.id = taskInfo.id;
-  rawTask.prevTaskId = lastTaskID;
-  rawTask.active = taskInfo.active;
-  rawTask.done = taskInfo.done;
-  rawTask.crit = taskInfo.crit;
-  rawTask.milestone = taskInfo.milestone;
-  rawTask.order = lastOrder;
-  lastOrder++;
-  const pos = rawTasks$1.push(rawTask);
-  lastTaskID = rawTask.id;
-  taskDb[rawTask.id] = pos - 1;
-};
-const findTaskById = function(id2) {
-  const pos = taskDb[id2];
-  return rawTasks$1[pos];
-};
-const addTaskOrg$1 = function(descr, data) {
-  const newTask = {
-    section: currentSection$1,
-    type: currentSection$1,
-    description: descr,
-    task: descr,
-    classes: []
-  };
-  const taskInfo = compileData(lastTask, data);
-  newTask.startTime = taskInfo.startTime;
-  newTask.endTime = taskInfo.endTime;
-  newTask.id = taskInfo.id;
-  newTask.active = taskInfo.active;
-  newTask.done = taskInfo.done;
-  newTask.crit = taskInfo.crit;
-  newTask.milestone = taskInfo.milestone;
-  lastTask = newTask;
-  tasks$1.push(newTask);
-};
-const compileTasks$1 = function() {
-  const compileTask = function(pos) {
-    const task = rawTasks$1[pos];
-    let startTime = "";
-    switch (rawTasks$1[pos].raw.startTime.type) {
-      case "prevTaskEnd": {
-        const prevTask = findTaskById(task.prevTaskId);
-        task.startTime = prevTask.endTime;
-        break;
-      }
-      case "getStartDate":
-        startTime = getStartDate(void 0, dateFormat, rawTasks$1[pos].raw.startTime.startData);
-        if (startTime) {
-          rawTasks$1[pos].startTime = startTime;
-        }
-        break;
-    }
-    if (rawTasks$1[pos].startTime) {
-      rawTasks$1[pos].endTime = getEndDate(
-        rawTasks$1[pos].startTime,
-        dateFormat,
-        rawTasks$1[pos].raw.endTime.data,
-        inclusiveEndDates
-      );
-      if (rawTasks$1[pos].endTime) {
-        rawTasks$1[pos].processed = true;
-        rawTasks$1[pos].manualEndTime = dayjs_min_default()(
-          rawTasks$1[pos].raw.endTime.data,
-          "YYYY-MM-DD",
-          true
-        ).isValid();
-        checkTaskDates(rawTasks$1[pos], dateFormat, excludes, includes);
-      }
-    }
-    return rawTasks$1[pos].processed;
-  };
-  let allProcessed = true;
-  for (const [i, rawTask] of rawTasks$1.entries()) {
-    compileTask(i);
-    allProcessed = allProcessed && rawTask.processed;
-  }
-  return allProcessed;
-};
-const setLink = function(ids, _linkStr) {
-  let linkStr = _linkStr;
-  if (getConfig$1().securityLevel !== "loose") {
-    linkStr = (0,dist/* sanitizeUrl */.N)(_linkStr);
-  }
-  ids.split(",").forEach(function(id2) {
-    let rawTask = findTaskById(id2);
-    if (rawTask !== void 0) {
-      pushFun(id2, () => {
-        window.open(linkStr, "_self");
-      });
-      links[id2] = linkStr;
-    }
-  });
-  setClass(ids, "clickable");
-};
-const setClass = function(ids, className) {
-  ids.split(",").forEach(function(id2) {
-    let rawTask = findTaskById(id2);
-    if (rawTask !== void 0) {
-      rawTask.classes.push(className);
-    }
-  });
-};
-const setClickFun = function(id2, functionName, functionArgs) {
-  if (getConfig$1().securityLevel !== "loose") {
-    return;
-  }
-  if (functionName === void 0) {
-    return;
-  }
-  let argList = [];
-  if (typeof functionArgs === "string") {
-    argList = functionArgs.split(/,(?=(?:(?:[^"]*"){2})*[^"]*$)/);
-    for (let i = 0; i < argList.length; i++) {
-      let item = argList[i].trim();
-      if (item.charAt(0) === '"' && item.charAt(item.length - 1) === '"') {
-        item = item.substr(1, item.length - 2);
-      }
-      argList[i] = item;
-    }
-  }
-  if (argList.length === 0) {
-    argList.push(id2);
-  }
-  let rawTask = findTaskById(id2);
-  if (rawTask !== void 0) {
-    pushFun(id2, () => {
-      mermaid_ae477ddf_utils.runFunc(functionName, ...argList);
-    });
-  }
-};
-const pushFun = function(id2, callbackFunction) {
-  funs.push(
-    function() {
-      const elem = document.querySelector(`[id="${id2}"]`);
-      if (elem !== null) {
-        elem.addEventListener("click", function() {
-          callbackFunction();
-        });
-      }
-    },
-    function() {
-      const elem = document.querySelector(`[id="${id2}-text"]`);
-      if (elem !== null) {
-        elem.addEventListener("click", function() {
-          callbackFunction();
-        });
-      }
-    }
-  );
-};
-const setClickEvent = function(ids, functionName, functionArgs) {
-  ids.split(",").forEach(function(id2) {
-    setClickFun(id2, functionName, functionArgs);
-  });
-  setClass(ids, "clickable");
-};
-const bindFunctions = function(element) {
-  funs.forEach(function(fun) {
-    fun(element);
-  });
-};
-const ganttDb = {
-  parseDirective: parseDirective$5,
-  getConfig: () => getConfig$1().gantt,
-  clear: clear$5,
-  setDateFormat,
-  getDateFormat,
-  enableInclusiveEndDates,
-  endDatesAreInclusive,
-  enableTopAxis,
-  topAxisEnabled,
-  setAxisFormat,
-  getAxisFormat,
-  setTickInterval,
-  getTickInterval,
-  setTodayMarker,
-  getTodayMarker,
-  setAccTitle,
-  getAccTitle,
-  setDiagramTitle,
-  getDiagramTitle,
-  setAccDescription,
-  getAccDescription,
-  addSection: addSection$2,
-  getSections: getSections$2,
-  getTasks: getTasks$1,
-  addTask: addTask$1,
-  findTaskById,
-  addTaskOrg: addTaskOrg$1,
-  setIncludes,
-  getIncludes,
-  setExcludes,
-  getExcludes,
-  setClickEvent,
-  setLink,
-  getLinks,
-  bindFunctions,
-  parseDuration,
-  isInvalidDate
-};
-function getTaskTags(data, task, tags2) {
-  let matchFound = true;
-  while (matchFound) {
-    matchFound = false;
-    tags2.forEach(function(t) {
-      const pattern = "^\\s*" + t + "\\s*$";
-      const regex = new RegExp(pattern);
-      if (data[0].match(regex)) {
-        task[t] = true;
-        data.shift(1);
-        matchFound = true;
-      }
-    });
-  }
-}
-const setConf$5 = function() {
-  log$1.debug("Something is calling, setConf, remove the call");
-};
-let w;
-const draw$8 = function(text, id2, version2, diagObj) {
-  const conf2 = getConfig$1().gantt;
-  const securityLevel = getConfig$1().securityLevel;
-  let sandboxElement;
-  if (securityLevel === "sandbox") {
-    sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-  }
-  const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-  const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document;
-  const elem = doc.getElementById(id2);
-  w = elem.parentElement.offsetWidth;
-  if (w === void 0) {
-    w = 1200;
-  }
-  if (conf2.useWidth !== void 0) {
-    w = conf2.useWidth;
-  }
-  const taskArray = diagObj.db.getTasks();
-  const h = taskArray.length * (conf2.barHeight + conf2.barGap) + 2 * conf2.topPadding;
-  elem.setAttribute("viewBox", "0 0 " + w + " " + h);
-  const svg = root.select(`[id="${id2}"]`);
-  const timeScale = (0,src/* scaleTime */.Xf)().domain([
-    (0,src/* min */.VV$)(taskArray, function(d) {
-      return d.startTime;
-    }),
-    (0,src/* max */.Fp7)(taskArray, function(d) {
-      return d.endTime;
-    })
-  ]).rangeRound([0, w - conf2.leftPadding - conf2.rightPadding]);
-  let categories = [];
-  for (const element of taskArray) {
-    categories.push(element.type);
-  }
-  const catsUnfiltered = categories;
-  categories = checkUnique(categories);
-  function taskCompare(a, b) {
-    const taskA = a.startTime;
-    const taskB = b.startTime;
-    let result = 0;
-    if (taskA > taskB) {
-      result = 1;
-    } else if (taskA < taskB) {
-      result = -1;
-    }
-    return result;
-  }
-  taskArray.sort(taskCompare);
-  makeGant(taskArray, w, h);
-  configureSvgSize(svg, h, w, conf2.useMaxWidth);
-  svg.append("text").text(diagObj.db.getDiagramTitle()).attr("x", w / 2).attr("y", conf2.titleTopMargin).attr("class", "titleText");
-  function makeGant(tasks2, pageWidth, pageHeight) {
-    const barHeight = conf2.barHeight;
-    const gap = barHeight + conf2.barGap;
-    const topPadding = conf2.topPadding;
-    const leftPadding = conf2.leftPadding;
-    const colorScale = (0,src/* scaleLinear */.BYU)().domain([0, categories.length]).range(["#00B9FA", "#F95002"]).interpolate(src/* interpolateHcl */.JHv);
-    drawExcludeDays(
-      gap,
-      topPadding,
-      leftPadding,
-      pageWidth,
-      pageHeight,
-      tasks2,
-      diagObj.db.getExcludes(),
-      diagObj.db.getIncludes()
-    );
-    makeGrid(leftPadding, topPadding, pageWidth, pageHeight);
-    drawRects(tasks2, gap, topPadding, leftPadding, barHeight, colorScale, pageWidth);
-    vertLabels(gap, topPadding);
-    drawToday(leftPadding, topPadding, pageWidth, pageHeight);
-  }
-  function drawRects(theArray, theGap, theTopPad, theSidePad, theBarHeight, theColorScale, w2) {
-    svg.append("g").selectAll("rect").data(theArray).enter().append("rect").attr("x", 0).attr("y", function(d, i) {
-      i = d.order;
-      return i * theGap + theTopPad - 2;
-    }).attr("width", function() {
-      return w2 - conf2.rightPadding / 2;
-    }).attr("height", theGap).attr("class", function(d) {
-      for (const [i, category] of categories.entries()) {
-        if (d.type === category) {
-          return "section section" + i % conf2.numberSectionStyles;
-        }
-      }
-      return "section section0";
-    });
-    const rectangles = svg.append("g").selectAll("rect").data(theArray).enter();
-    const links2 = diagObj.db.getLinks();
-    rectangles.append("rect").attr("id", function(d) {
-      return d.id;
-    }).attr("rx", 3).attr("ry", 3).attr("x", function(d) {
-      if (d.milestone) {
-        return timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight;
-      }
-      return timeScale(d.startTime) + theSidePad;
-    }).attr("y", function(d, i) {
-      i = d.order;
-      return i * theGap + theTopPad;
-    }).attr("width", function(d) {
-      if (d.milestone) {
-        return theBarHeight;
-      }
-      return timeScale(d.renderEndTime || d.endTime) - timeScale(d.startTime);
-    }).attr("height", theBarHeight).attr("transform-origin", function(d, i) {
-      i = d.order;
-      return (timeScale(d.startTime) + theSidePad + 0.5 * (timeScale(d.endTime) - timeScale(d.startTime))).toString() + "px " + (i * theGap + theTopPad + 0.5 * theBarHeight).toString() + "px";
-    }).attr("class", function(d) {
-      const res = "task";
-      let classStr = "";
-      if (d.classes.length > 0) {
-        classStr = d.classes.join(" ");
-      }
-      let secNum = 0;
-      for (const [i, category] of categories.entries()) {
-        if (d.type === category) {
-          secNum = i % conf2.numberSectionStyles;
-        }
-      }
-      let taskClass = "";
-      if (d.active) {
-        if (d.crit) {
-          taskClass += " activeCrit";
-        } else {
-          taskClass = " active";
-        }
-      } else if (d.done) {
-        if (d.crit) {
-          taskClass = " doneCrit";
-        } else {
-          taskClass = " done";
-        }
-      } else {
-        if (d.crit) {
-          taskClass += " crit";
-        }
-      }
-      if (taskClass.length === 0) {
-        taskClass = " task";
-      }
-      if (d.milestone) {
-        taskClass = " milestone " + taskClass;
-      }
-      taskClass += secNum;
-      taskClass += " " + classStr;
-      return res + taskClass;
-    });
-    rectangles.append("text").attr("id", function(d) {
-      return d.id + "-text";
-    }).text(function(d) {
-      return d.task;
-    }).attr("font-size", conf2.fontSize).attr("x", function(d) {
-      let startX = timeScale(d.startTime);
-      let endX = timeScale(d.renderEndTime || d.endTime);
-      if (d.milestone) {
-        startX += 0.5 * (timeScale(d.endTime) - timeScale(d.startTime)) - 0.5 * theBarHeight;
-      }
-      if (d.milestone) {
-        endX = startX + theBarHeight;
-      }
-      const textWidth = this.getBBox().width;
-      if (textWidth > endX - startX) {
-        if (endX + textWidth + 1.5 * conf2.leftPadding > w2) {
-          return startX + theSidePad - 5;
-        } else {
-          return endX + theSidePad + 5;
-        }
-      } else {
-        return (endX - startX) / 2 + startX + theSidePad;
-      }
-    }).attr("y", function(d, i) {
-      i = d.order;
-      return i * theGap + conf2.barHeight / 2 + (conf2.fontSize / 2 - 2) + theTopPad;
-    }).attr("text-height", theBarHeight).attr("class", function(d) {
-      const startX = timeScale(d.startTime);
-      let endX = timeScale(d.endTime);
-      if (d.milestone) {
-        endX = startX + theBarHeight;
-      }
-      const textWidth = this.getBBox().width;
-      let classStr = "";
-      if (d.classes.length > 0) {
-        classStr = d.classes.join(" ");
-      }
-      let secNum = 0;
-      for (const [i, category] of categories.entries()) {
-        if (d.type === category) {
-          secNum = i % conf2.numberSectionStyles;
-        }
-      }
-      let taskType = "";
-      if (d.active) {
-        if (d.crit) {
-          taskType = "activeCritText" + secNum;
-        } else {
-          taskType = "activeText" + secNum;
-        }
-      }
-      if (d.done) {
-        if (d.crit) {
-          taskType = taskType + " doneCritText" + secNum;
-        } else {
-          taskType = taskType + " doneText" + secNum;
-        }
-      } else {
-        if (d.crit) {
-          taskType = taskType + " critText" + secNum;
-        }
-      }
-      if (d.milestone) {
-        taskType += " milestoneText";
-      }
-      if (textWidth > endX - startX) {
-        if (endX + textWidth + 1.5 * conf2.leftPadding > w2) {
-          return classStr + " taskTextOutsideLeft taskTextOutside" + secNum + " " + taskType;
-        } else {
-          return classStr + " taskTextOutsideRight taskTextOutside" + secNum + " " + taskType + " width-" + textWidth;
-        }
-      } else {
-        return classStr + " taskText taskText" + secNum + " " + taskType + " width-" + textWidth;
-      }
-    });
-    const securityLevel2 = getConfig$1().securityLevel;
-    if (securityLevel2 === "sandbox") {
-      let sandboxElement2;
-      sandboxElement2 = (0,src/* select */.Ys)("#i" + id2);
-      const doc2 = sandboxElement2.nodes()[0].contentDocument;
-      rectangles.filter(function(d) {
-        return links2[d.id] !== void 0;
-      }).each(function(o) {
-        var taskRect = doc2.querySelector("#" + o.id);
-        var taskText = doc2.querySelector("#" + o.id + "-text");
-        const oldParent = taskRect.parentNode;
-        var Link = doc2.createElement("a");
-        Link.setAttribute("xlink:href", links2[o.id]);
-        Link.setAttribute("target", "_top");
-        oldParent.appendChild(Link);
-        Link.appendChild(taskRect);
-        Link.appendChild(taskText);
-      });
-    }
-  }
-  function drawExcludeDays(theGap, theTopPad, theSidePad, w2, h2, tasks2, excludes2, includes2) {
-    const minTime = tasks2.reduce(
-      (min2, { startTime }) => min2 ? Math.min(min2, startTime) : startTime,
-      0
-    );
-    const maxTime = tasks2.reduce((max2, { endTime }) => max2 ? Math.max(max2, endTime) : endTime, 0);
-    const dateFormat2 = diagObj.db.getDateFormat();
-    if (!minTime || !maxTime) {
-      return;
-    }
-    const excludeRanges = [];
-    let range = null;
-    let d = dayjs_min_default()(minTime);
-    while (d.valueOf() <= maxTime) {
-      if (diagObj.db.isInvalidDate(d, dateFormat2, excludes2, includes2)) {
-        if (!range) {
-          range = {
-            start: d,
-            end: d
-          };
-        } else {
-          range.end = d;
-        }
-      } else {
-        if (range) {
-          excludeRanges.push(range);
-          range = null;
-        }
-      }
-      d = d.add(1, "d");
-    }
-    const rectangles = svg.append("g").selectAll("rect").data(excludeRanges).enter();
-    rectangles.append("rect").attr("id", function(d2) {
-      return "exclude-" + d2.start.format("YYYY-MM-DD");
-    }).attr("x", function(d2) {
-      return timeScale(d2.start) + theSidePad;
-    }).attr("y", conf2.gridLineStartPadding).attr("width", function(d2) {
-      const renderEnd = d2.end.add(1, "day");
-      return timeScale(renderEnd) - timeScale(d2.start);
-    }).attr("height", h2 - theTopPad - conf2.gridLineStartPadding).attr("transform-origin", function(d2, i) {
-      return (timeScale(d2.start) + theSidePad + 0.5 * (timeScale(d2.end) - timeScale(d2.start))).toString() + "px " + (i * theGap + 0.5 * h2).toString() + "px";
-    }).attr("class", "exclude-range");
-  }
-  function makeGrid(theSidePad, theTopPad, w2, h2) {
-    let bottomXAxis = (0,src/* axisBottom */.LLu)(timeScale).tickSize(-h2 + theTopPad + conf2.gridLineStartPadding).tickFormat((0,src/* timeFormat */.i$Z)(diagObj.db.getAxisFormat() || conf2.axisFormat || "%Y-%m-%d"));
-    const reTickInterval = /^([1-9]\d*)(minute|hour|day|week|month)$/;
-    const resultTickInterval = reTickInterval.exec(
-      diagObj.db.getTickInterval() || conf2.tickInterval
-    );
-    if (resultTickInterval !== null) {
-      const every = resultTickInterval[1];
-      const interval = resultTickInterval[2];
-      switch (interval) {
-        case "minute":
-          bottomXAxis.ticks(src/* timeMinute.every */.Z_i.every(every));
-          break;
-        case "hour":
-          bottomXAxis.ticks(src/* timeHour.every */.WQD.every(every));
-          break;
-        case "day":
-          bottomXAxis.ticks(src/* timeDay.every */.rr1.every(every));
-          break;
-        case "week":
-          bottomXAxis.ticks(src/* timeWeek.every */.NGh.every(every));
-          break;
-        case "month":
-          bottomXAxis.ticks(src/* timeMonth.every */.F0B.every(every));
-          break;
-      }
-    }
-    svg.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + (h2 - 50) + ")").call(bottomXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10).attr("dy", "1em");
-    if (diagObj.db.topAxisEnabled() || conf2.topAxis) {
-      let topXAxis = (0,src/* axisTop */.F5q)(timeScale).tickSize(-h2 + theTopPad + conf2.gridLineStartPadding).tickFormat((0,src/* timeFormat */.i$Z)(diagObj.db.getAxisFormat() || conf2.axisFormat || "%Y-%m-%d"));
-      if (resultTickInterval !== null) {
-        const every = resultTickInterval[1];
-        const interval = resultTickInterval[2];
-        switch (interval) {
-          case "minute":
-            topXAxis.ticks(src/* timeMinute.every */.Z_i.every(every));
-            break;
-          case "hour":
-            topXAxis.ticks(src/* timeHour.every */.WQD.every(every));
-            break;
-          case "day":
-            topXAxis.ticks(src/* timeDay.every */.rr1.every(every));
-            break;
-          case "week":
-            topXAxis.ticks(src/* timeWeek.every */.NGh.every(every));
-            break;
-          case "month":
-            topXAxis.ticks(src/* timeMonth.every */.F0B.every(every));
-            break;
-        }
-      }
-      svg.append("g").attr("class", "grid").attr("transform", "translate(" + theSidePad + ", " + theTopPad + ")").call(topXAxis).selectAll("text").style("text-anchor", "middle").attr("fill", "#000").attr("stroke", "none").attr("font-size", 10);
-    }
-  }
-  function vertLabels(theGap, theTopPad) {
-    const numOccurances = [];
-    let prevGap = 0;
-    for (const [i, category] of categories.entries()) {
-      numOccurances[i] = [category, getCount(category, catsUnfiltered)];
-    }
-    svg.append("g").selectAll("text").data(numOccurances).enter().append(function(d) {
-      const rows = d[0].split(common$1.lineBreakRegex);
-      const dy = -(rows.length - 1) / 2;
-      const svgLabel = doc.createElementNS("http://www.w3.org/2000/svg", "text");
-      svgLabel.setAttribute("dy", dy + "em");
-      for (const [j, row] of rows.entries()) {
-        const tspan = doc.createElementNS("http://www.w3.org/2000/svg", "tspan");
-        tspan.setAttribute("alignment-baseline", "central");
-        tspan.setAttribute("x", "10");
-        if (j > 0) {
-          tspan.setAttribute("dy", "1em");
-        }
-        tspan.textContent = row;
-        svgLabel.appendChild(tspan);
-      }
-      return svgLabel;
-    }).attr("x", 10).attr("y", function(d, i) {
-      if (i > 0) {
-        for (let j = 0; j < i; j++) {
-          prevGap += numOccurances[i - 1][1];
-          return d[1] * theGap / 2 + prevGap * theGap + theTopPad;
-        }
-      } else {
-        return d[1] * theGap / 2 + theTopPad;
-      }
-    }).attr("font-size", conf2.sectionFontSize).attr("font-size", conf2.sectionFontSize).attr("class", function(d) {
-      for (const [i, category] of categories.entries()) {
-        if (d[0] === category) {
-          return "sectionTitle sectionTitle" + i % conf2.numberSectionStyles;
-        }
-      }
-      return "sectionTitle";
-    });
-  }
-  function drawToday(theSidePad, theTopPad, w2, h2) {
-    const todayMarker2 = diagObj.db.getTodayMarker();
-    if (todayMarker2 === "off") {
-      return;
-    }
-    const todayG = svg.append("g").attr("class", "today");
-    const today = new Date();
-    const todayLine = todayG.append("line");
-    todayLine.attr("x1", timeScale(today) + theSidePad).attr("x2", timeScale(today) + theSidePad).attr("y1", conf2.titleTopMargin).attr("y2", h2 - conf2.titleTopMargin).attr("class", "today");
-    if (todayMarker2 !== "") {
-      todayLine.attr("style", todayMarker2.replace(/,/g, ";"));
-    }
-  }
-  function checkUnique(arr) {
-    const hash = {};
-    const result = [];
-    for (let i = 0, l = arr.length; i < l; ++i) {
-      if (!Object.prototype.hasOwnProperty.call(hash, arr[i])) {
-        hash[arr[i]] = true;
-        result.push(arr[i]);
-      }
-    }
-    return result;
-  }
-  function getCounts(arr) {
-    let i = arr.length;
-    const obj = {};
-    while (i) {
-      obj[arr[--i]] = (obj[arr[i]] || 0) + 1;
-    }
-    return obj;
-  }
-  function getCount(word, arr) {
-    return getCounts(arr)[word] || 0;
-  }
-};
-const ganttRenderer = {
-  setConf: setConf$5,
-  draw: draw$8
-};
-var parser$5 = function() {
-  var o = function(k, v, o2, l) {
-    for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
-      ;
-    return o2;
-  }, $V0 = [6, 9, 10];
-  var parser2 = {
-    trace: function trace() {
-    },
-    yy: {},
-    symbols_: { "error": 2, "start": 3, "info": 4, "document": 5, "EOF": 6, "line": 7, "statement": 8, "NL": 9, "showInfo": 10, "$accept": 0, "$end": 1 },
-    terminals_: { 2: "error", 4: "info", 6: "EOF", 9: "NL", 10: "showInfo" },
-    productions_: [0, [3, 3], [5, 0], [5, 2], [7, 1], [7, 1], [8, 1]],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
-      $$.length - 1;
-      switch (yystate) {
-        case 1:
-          return yy;
-        case 4:
-          break;
-        case 6:
-          yy.setInfo(true);
-          break;
-      }
-    },
-    table: [{ 3: 1, 4: [1, 2] }, { 1: [3] }, o($V0, [2, 2], { 5: 3 }), { 6: [1, 4], 7: 5, 8: 6, 9: [1, 7], 10: [1, 8] }, { 1: [2, 1] }, o($V0, [2, 3]), o($V0, [2, 4]), o($V0, [2, 5]), o($V0, [2, 6])],
-    defaultActions: { 4: [2, 1] },
-    parseError: function parseError(str2, hash) {
-      if (hash.recoverable) {
-        this.trace(str2);
-      } else {
-        var error = new Error(str2);
-        error.hash = hash;
-        throw error;
-      }
-    },
-    parse: function parse2(input) {
-      var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;
-      var args = lstack.slice.call(arguments, 1);
-      var lexer2 = Object.create(this.lexer);
-      var sharedState = { yy: {} };
-      for (var k in this.yy) {
-        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
-          sharedState.yy[k] = this.yy[k];
-        }
-      }
-      lexer2.setInput(input, sharedState.yy);
-      sharedState.yy.lexer = lexer2;
-      sharedState.yy.parser = this;
-      if (typeof lexer2.yylloc == "undefined") {
-        lexer2.yylloc = {};
-      }
-      var yyloc = lexer2.yylloc;
-      lstack.push(yyloc);
-      var ranges = lexer2.options && lexer2.options.ranges;
-      if (typeof sharedState.yy.parseError === "function") {
-        this.parseError = sharedState.yy.parseError;
-      } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-      }
-      function lex2() {
-        var token;
-        token = tstack.pop() || lexer2.lex() || EOF;
-        if (typeof token !== "number") {
-          if (token instanceof Array) {
-            tstack = token;
-            token = tstack.pop();
-          }
-          token = self.symbols_[token] || token;
-        }
-        return token;
-      }
-      var symbol, state, action, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-          action = this.defaultActions[state];
-        } else {
-          if (symbol === null || typeof symbol == "undefined") {
-            symbol = lex2();
-          }
-          action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-          var errStr = "";
-          expected = [];
-          for (p in table[state]) {
-            if (this.terminals_[p] && p > TERROR) {
-              expected.push("'" + this.terminals_[p] + "'");
-            }
-          }
-          if (lexer2.showPosition) {
-            errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-          } else {
-            errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
-          }
-          this.parseError(errStr, {
-            text: lexer2.match,
-            token: this.terminals_[symbol] || symbol,
-            line: lexer2.yylineno,
-            loc: yyloc,
-            expected
-          });
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-          throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-          case 1:
-            stack.push(symbol);
-            vstack.push(lexer2.yytext);
-            lstack.push(lexer2.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            {
-              yyleng = lexer2.yyleng;
-              yytext = lexer2.yytext;
-              yylineno = lexer2.yylineno;
-              yyloc = lexer2.yylloc;
-            }
-            break;
-          case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-              first_line: lstack[lstack.length - (len || 1)].first_line,
-              last_line: lstack[lstack.length - 1].last_line,
-              first_column: lstack[lstack.length - (len || 1)].first_column,
-              last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-              yyval._$.range = [
-                lstack[lstack.length - (len || 1)].range[0],
-                lstack[lstack.length - 1].range[1]
-              ];
-            }
-            r = this.performAction.apply(yyval, [
-              yytext,
-              yyleng,
-              yylineno,
-              sharedState.yy,
-              action[1],
-              vstack,
-              lstack
-            ].concat(args));
-            if (typeof r !== "undefined") {
-              return r;
-            }
-            if (len) {
-              stack = stack.slice(0, -1 * len * 2);
-              vstack = vstack.slice(0, -1 * len);
-              lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-          case 3:
-            return true;
-        }
-      }
-      return true;
-    }
-  };
-  var lexer = function() {
-    var lexer2 = {
-      EOF: 1,
-      parseError: function parseError(str2, hash) {
-        if (this.yy.parser) {
-          this.yy.parser.parseError(str2, hash);
-        } else {
-          throw new Error(str2);
-        }
-      },
-      // resets the lexer, sets new input
-      setInput: function(input, yy) {
-        this.yy = yy || this.yy || {};
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = "";
-        this.conditionStack = ["INITIAL"];
-        this.yylloc = {
-          first_line: 1,
-          first_column: 0,
-          last_line: 1,
-          last_column: 0
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [0, 0];
-        }
-        this.offset = 0;
-        return this;
-      },
-      // consumes and returns one char from the input
-      input: function() {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno++;
-          this.yylloc.last_line++;
-        } else {
-          this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-          this.yylloc.range[1]++;
-        }
-        this._input = this._input.slice(1);
-        return ch;
-      },
-      // unshifts one char (or a string) into the input
-      unput: function(ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len);
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-        if (lines.length - 1) {
-          this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-        this.yylloc = {
-          first_line: this.yylloc.first_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.first_column,
-          last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-      },
-      // When called from action, caches matched text and appends it on next action
-      more: function() {
-        this._more = true;
-        return this;
-      },
-      // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-      reject: function() {
-        if (this.options.backtrack_lexer) {
-          this._backtrack = true;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-        return this;
-      },
-      // retain first n characters of the match
-      less: function(n) {
-        this.unput(this.match.slice(n));
-      },
-      // displays already matched input, i.e. for error messages
-      pastInput: function() {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
-      },
-      // displays upcoming input, i.e. for error messages
-      upcomingInput: function() {
-        var next = this.match;
-        if (next.length < 20) {
-          next += this._input.substr(0, 20 - next.length);
-        }
-        return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
-      },
-      // displays the character position where the lexing error occurred, i.e. for error messages
-      showPosition: function() {
-        var pre = this.pastInput();
-        var c2 = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c2 + "^";
-      },
-      // test the lexed token: return FALSE when not a match, otherwise return token
-      test_match: function(match, indexed_rule) {
-        var token, lines, backup;
-        if (this.options.backtrack_lexer) {
-          backup = {
-            yylineno: this.yylineno,
-            yylloc: {
-              first_line: this.yylloc.first_line,
-              last_line: this.last_line,
-              first_column: this.yylloc.first_column,
-              last_column: this.yylloc.last_column
-            },
-            yytext: this.yytext,
-            match: this.match,
-            matches: this.matches,
-            matched: this.matched,
-            yyleng: this.yyleng,
-            offset: this.offset,
-            _more: this._more,
-            _input: this._input,
-            yy: this.yy,
-            conditionStack: this.conditionStack.slice(0),
-            done: this.done
-          };
-          if (this.options.ranges) {
-            backup.yylloc.range = this.yylloc.range.slice(0);
-          }
-        }
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno += lines.length;
-        }
-        this.yylloc = {
-          first_line: this.yylloc.last_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.last_column,
-          last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-          this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-          this.done = false;
-        }
-        if (token) {
-          return token;
-        } else if (this._backtrack) {
-          for (var k in backup) {
-            this[k] = backup[k];
-          }
-          return false;
-        }
-        return false;
-      },
-      // return next match in input
-      next: function() {
-        if (this.done) {
-          return this.EOF;
-        }
-        if (!this._input) {
-          this.done = true;
-        }
-        var token, match, tempMatch, index;
-        if (!this._more) {
-          this.yytext = "";
-          this.match = "";
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-          tempMatch = this._input.match(this.rules[rules[i]]);
-          if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-            match = tempMatch;
-            index = i;
-            if (this.options.backtrack_lexer) {
-              token = this.test_match(tempMatch, rules[i]);
-              if (token !== false) {
-                return token;
-              } else if (this._backtrack) {
-                match = false;
-                continue;
-              } else {
-                return false;
-              }
-            } else if (!this.options.flex) {
-              break;
-            }
-          }
-        }
-        if (match) {
-          token = this.test_match(match, rules[index]);
-          if (token !== false) {
-            return token;
-          }
-          return false;
-        }
-        if (this._input === "") {
-          return this.EOF;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-      },
-      // return next match that has a token
-      lex: function lex2() {
-        var r = this.next();
-        if (r) {
-          return r;
-        } else {
-          return this.lex();
-        }
-      },
-      // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-      begin: function begin(condition) {
-        this.conditionStack.push(condition);
-      },
-      // pop the previously active lexer condition state off the condition stack
-      popState: function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-          return this.conditionStack.pop();
-        } else {
-          return this.conditionStack[0];
-        }
-      },
-      // produce the lexer rule set which is active for the currently active lexer condition state
-      _currentRules: function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-          return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-          return this.conditions["INITIAL"].rules;
-        }
-      },
-      // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-      topState: function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-          return this.conditionStack[n];
-        } else {
-          return "INITIAL";
-        }
-      },
-      // alias for begin(condition)
-      pushState: function pushState(condition) {
-        this.begin(condition);
-      },
-      // return the number of states currently on the stack
-      stateStackSize: function stateStackSize() {
-        return this.conditionStack.length;
-      },
-      options: { "case-insensitive": true },
-      performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
-        switch ($avoiding_name_collisions) {
-          case 0:
-            return 4;
-          case 1:
-            return 9;
-          case 2:
-            return "space";
-          case 3:
-            return 10;
-          case 4:
-            return 6;
-          case 5:
-            return "TXT";
-        }
-      },
-      rules: [/^(?:info\b)/i, /^(?:[\s\n\r]+)/i, /^(?:[\s]+)/i, /^(?:showInfo\b)/i, /^(?:$)/i, /^(?:.)/i],
-      conditions: { "INITIAL": { "rules": [0, 1, 2, 3, 4, 5], "inclusive": true } }
-    };
-    return lexer2;
-  }();
-  parser2.lexer = lexer;
-  function Parser() {
-    this.yy = {};
-  }
-  Parser.prototype = parser2;
-  parser2.Parser = Parser;
-  return new Parser();
-}();
-parser$5.parser = parser$5;
-const infoParser = parser$5;
-var message = "";
-var info = false;
-const setMessage = (txt) => {
-  log$1.debug("Setting message to: " + txt);
-  message = txt;
-};
-const getMessage = () => {
-  return message;
-};
-const setInfo = (inf) => {
-  info = inf;
-};
-const getInfo = () => {
-  return info;
-};
-const infoDb = {
-  setMessage,
-  getMessage,
-  setInfo,
-  getInfo,
-  clear: clear$g
-  // parseError
-};
-const draw$7 = (text, id2, version2) => {
-  try {
-    log$1.debug("Rendering info diagram\n" + text);
-    const securityLevel = getConfig$1().securityLevel;
-    let sandboxElement;
-    if (securityLevel === "sandbox") {
-      sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-    }
-    const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-    const svg = root.select("#" + id2);
-    const g = svg.append("g");
-    g.append("text").attr("x", 100).attr("y", 40).attr("class", "version").attr("font-size", "32px").style("text-anchor", "middle").text("v " + version2);
-    svg.attr("height", 100);
-    svg.attr("width", 400);
-  } catch (e) {
-    log$1.error("Error while rendering info diagram");
-    log$1.error(e.message);
-  }
-};
-const infoRenderer = {
-  draw: draw$7
-};
-const infoDetector = (txt) => {
-  return txt.match(/^\s*info/) !== null;
-};
-var parser$4 = function() {
-  var o = function(k, v, o2, l) {
-    for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
-      ;
-    return o2;
-  }, $V0 = [1, 4], $V1 = [1, 5], $V2 = [1, 6], $V3 = [1, 7], $V4 = [1, 9], $V5 = [1, 11, 13, 15, 17, 19, 20, 26, 27, 28, 29], $V6 = [2, 5], $V7 = [1, 6, 11, 13, 15, 17, 19, 20, 26, 27, 28, 29], $V8 = [26, 27, 28], $V9 = [2, 8], $Va = [1, 18], $Vb = [1, 19], $Vc = [1, 20], $Vd = [1, 21], $Ve = [1, 22], $Vf = [1, 23], $Vg = [1, 28], $Vh = [6, 26, 27, 28, 29];
-  var parser2 = {
-    trace: function trace() {
-    },
-    yy: {},
-    symbols_: { "error": 2, "start": 3, "eol": 4, "directive": 5, "PIE": 6, "document": 7, "showData": 8, "line": 9, "statement": 10, "txt": 11, "value": 12, "title": 13, "title_value": 14, "acc_title": 15, "acc_title_value": 16, "acc_descr": 17, "acc_descr_value": 18, "acc_descr_multiline_value": 19, "section": 20, "openDirective": 21, "typeDirective": 22, "closeDirective": 23, ":": 24, "argDirective": 25, "NEWLINE": 26, ";": 27, "EOF": 28, "open_directive": 29, "type_directive": 30, "arg_directive": 31, "close_directive": 32, "$accept": 0, "$end": 1 },
-    terminals_: { 2: "error", 6: "PIE", 8: "showData", 11: "txt", 12: "value", 13: "title", 14: "title_value", 15: "acc_title", 16: "acc_title_value", 17: "acc_descr", 18: "acc_descr_value", 19: "acc_descr_multiline_value", 20: "section", 24: ":", 26: "NEWLINE", 27: ";", 28: "EOF", 29: "open_directive", 30: "type_directive", 31: "arg_directive", 32: "close_directive" },
-    productions_: [0, [3, 2], [3, 2], [3, 2], [3, 3], [7, 0], [7, 2], [9, 2], [10, 0], [10, 2], [10, 2], [10, 2], [10, 2], [10, 1], [10, 1], [10, 1], [5, 3], [5, 5], [4, 1], [4, 1], [4, 1], [21, 1], [22, 1], [25, 1], [23, 1]],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
-      var $0 = $$.length - 1;
-      switch (yystate) {
-        case 4:
-          yy.setShowData(true);
-          break;
-        case 7:
-          this.$ = $$[$0 - 1];
-          break;
-        case 9:
-          yy.addSection($$[$0 - 1], yy.cleanupValue($$[$0]));
-          break;
-        case 10:
-          this.$ = $$[$0].trim();
-          yy.setDiagramTitle(this.$);
-          break;
-        case 11:
-          this.$ = $$[$0].trim();
-          yy.setAccTitle(this.$);
-          break;
-        case 12:
-        case 13:
-          this.$ = $$[$0].trim();
-          yy.setAccDescription(this.$);
-          break;
-        case 14:
-          yy.addSection($$[$0].substr(8));
-          this.$ = $$[$0].substr(8);
-          break;
-        case 21:
-          yy.parseDirective("%%{", "open_directive");
-          break;
-        case 22:
-          yy.parseDirective($$[$0], "type_directive");
-          break;
-        case 23:
-          $$[$0] = $$[$0].trim().replace(/'/g, '"');
-          yy.parseDirective($$[$0], "arg_directive");
-          break;
-        case 24:
-          yy.parseDirective("}%%", "close_directive", "pie");
-          break;
-      }
-    },
-    table: [{ 3: 1, 4: 2, 5: 3, 6: $V0, 21: 8, 26: $V1, 27: $V2, 28: $V3, 29: $V4 }, { 1: [3] }, { 3: 10, 4: 2, 5: 3, 6: $V0, 21: 8, 26: $V1, 27: $V2, 28: $V3, 29: $V4 }, { 3: 11, 4: 2, 5: 3, 6: $V0, 21: 8, 26: $V1, 27: $V2, 28: $V3, 29: $V4 }, o($V5, $V6, { 7: 12, 8: [1, 13] }), o($V7, [2, 18]), o($V7, [2, 19]), o($V7, [2, 20]), { 22: 14, 30: [1, 15] }, { 30: [2, 21] }, { 1: [2, 1] }, { 1: [2, 2] }, o($V8, $V9, { 21: 8, 9: 16, 10: 17, 5: 24, 1: [2, 3], 11: $Va, 13: $Vb, 15: $Vc, 17: $Vd, 19: $Ve, 20: $Vf, 29: $V4 }), o($V5, $V6, { 7: 25 }), { 23: 26, 24: [1, 27], 32: $Vg }, o([24, 32], [2, 22]), o($V5, [2, 6]), { 4: 29, 26: $V1, 27: $V2, 28: $V3 }, { 12: [1, 30] }, { 14: [1, 31] }, { 16: [1, 32] }, { 18: [1, 33] }, o($V8, [2, 13]), o($V8, [2, 14]), o($V8, [2, 15]), o($V8, $V9, { 21: 8, 9: 16, 10: 17, 5: 24, 1: [2, 4], 11: $Va, 13: $Vb, 15: $Vc, 17: $Vd, 19: $Ve, 20: $Vf, 29: $V4 }), o($Vh, [2, 16]), { 25: 34, 31: [1, 35] }, o($Vh, [2, 24]), o($V5, [2, 7]), o($V8, [2, 9]), o($V8, [2, 10]), o($V8, [2, 11]), o($V8, [2, 12]), { 23: 36, 32: $Vg }, { 32: [2, 23] }, o($Vh, [2, 17])],
-    defaultActions: { 9: [2, 21], 10: [2, 1], 11: [2, 2], 35: [2, 23] },
-    parseError: function parseError(str2, hash) {
-      if (hash.recoverable) {
-        this.trace(str2);
-      } else {
-        var error = new Error(str2);
-        error.hash = hash;
-        throw error;
-      }
-    },
-    parse: function parse2(input) {
-      var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;
-      var args = lstack.slice.call(arguments, 1);
-      var lexer2 = Object.create(this.lexer);
-      var sharedState = { yy: {} };
-      for (var k in this.yy) {
-        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
-          sharedState.yy[k] = this.yy[k];
-        }
-      }
-      lexer2.setInput(input, sharedState.yy);
-      sharedState.yy.lexer = lexer2;
-      sharedState.yy.parser = this;
-      if (typeof lexer2.yylloc == "undefined") {
-        lexer2.yylloc = {};
-      }
-      var yyloc = lexer2.yylloc;
-      lstack.push(yyloc);
-      var ranges = lexer2.options && lexer2.options.ranges;
-      if (typeof sharedState.yy.parseError === "function") {
-        this.parseError = sharedState.yy.parseError;
-      } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-      }
-      function lex2() {
-        var token;
-        token = tstack.pop() || lexer2.lex() || EOF;
-        if (typeof token !== "number") {
-          if (token instanceof Array) {
-            tstack = token;
-            token = tstack.pop();
-          }
-          token = self.symbols_[token] || token;
-        }
-        return token;
-      }
-      var symbol, state, action, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-          action = this.defaultActions[state];
-        } else {
-          if (symbol === null || typeof symbol == "undefined") {
-            symbol = lex2();
-          }
-          action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-          var errStr = "";
-          expected = [];
-          for (p in table[state]) {
-            if (this.terminals_[p] && p > TERROR) {
-              expected.push("'" + this.terminals_[p] + "'");
-            }
-          }
-          if (lexer2.showPosition) {
-            errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-          } else {
-            errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
-          }
-          this.parseError(errStr, {
-            text: lexer2.match,
-            token: this.terminals_[symbol] || symbol,
-            line: lexer2.yylineno,
-            loc: yyloc,
-            expected
-          });
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-          throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-          case 1:
-            stack.push(symbol);
-            vstack.push(lexer2.yytext);
-            lstack.push(lexer2.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            {
-              yyleng = lexer2.yyleng;
-              yytext = lexer2.yytext;
-              yylineno = lexer2.yylineno;
-              yyloc = lexer2.yylloc;
-            }
-            break;
-          case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-              first_line: lstack[lstack.length - (len || 1)].first_line,
-              last_line: lstack[lstack.length - 1].last_line,
-              first_column: lstack[lstack.length - (len || 1)].first_column,
-              last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-              yyval._$.range = [
-                lstack[lstack.length - (len || 1)].range[0],
-                lstack[lstack.length - 1].range[1]
-              ];
-            }
-            r = this.performAction.apply(yyval, [
-              yytext,
-              yyleng,
-              yylineno,
-              sharedState.yy,
-              action[1],
-              vstack,
-              lstack
-            ].concat(args));
-            if (typeof r !== "undefined") {
-              return r;
-            }
-            if (len) {
-              stack = stack.slice(0, -1 * len * 2);
-              vstack = vstack.slice(0, -1 * len);
-              lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-          case 3:
-            return true;
-        }
-      }
-      return true;
-    }
-  };
-  var lexer = function() {
-    var lexer2 = {
-      EOF: 1,
-      parseError: function parseError(str2, hash) {
-        if (this.yy.parser) {
-          this.yy.parser.parseError(str2, hash);
-        } else {
-          throw new Error(str2);
-        }
-      },
-      // resets the lexer, sets new input
-      setInput: function(input, yy) {
-        this.yy = yy || this.yy || {};
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = "";
-        this.conditionStack = ["INITIAL"];
-        this.yylloc = {
-          first_line: 1,
-          first_column: 0,
-          last_line: 1,
-          last_column: 0
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [0, 0];
-        }
-        this.offset = 0;
-        return this;
-      },
-      // consumes and returns one char from the input
-      input: function() {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno++;
-          this.yylloc.last_line++;
-        } else {
-          this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-          this.yylloc.range[1]++;
-        }
-        this._input = this._input.slice(1);
-        return ch;
-      },
-      // unshifts one char (or a string) into the input
-      unput: function(ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len);
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-        if (lines.length - 1) {
-          this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-        this.yylloc = {
-          first_line: this.yylloc.first_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.first_column,
-          last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-      },
-      // When called from action, caches matched text and appends it on next action
-      more: function() {
-        this._more = true;
-        return this;
-      },
-      // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-      reject: function() {
-        if (this.options.backtrack_lexer) {
-          this._backtrack = true;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-        return this;
-      },
-      // retain first n characters of the match
-      less: function(n) {
-        this.unput(this.match.slice(n));
-      },
-      // displays already matched input, i.e. for error messages
-      pastInput: function() {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
-      },
-      // displays upcoming input, i.e. for error messages
-      upcomingInput: function() {
-        var next = this.match;
-        if (next.length < 20) {
-          next += this._input.substr(0, 20 - next.length);
-        }
-        return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
-      },
-      // displays the character position where the lexing error occurred, i.e. for error messages
-      showPosition: function() {
-        var pre = this.pastInput();
-        var c2 = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c2 + "^";
-      },
-      // test the lexed token: return FALSE when not a match, otherwise return token
-      test_match: function(match, indexed_rule) {
-        var token, lines, backup;
-        if (this.options.backtrack_lexer) {
-          backup = {
-            yylineno: this.yylineno,
-            yylloc: {
-              first_line: this.yylloc.first_line,
-              last_line: this.last_line,
-              first_column: this.yylloc.first_column,
-              last_column: this.yylloc.last_column
-            },
-            yytext: this.yytext,
-            match: this.match,
-            matches: this.matches,
-            matched: this.matched,
-            yyleng: this.yyleng,
-            offset: this.offset,
-            _more: this._more,
-            _input: this._input,
-            yy: this.yy,
-            conditionStack: this.conditionStack.slice(0),
-            done: this.done
-          };
-          if (this.options.ranges) {
-            backup.yylloc.range = this.yylloc.range.slice(0);
-          }
-        }
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno += lines.length;
-        }
-        this.yylloc = {
-          first_line: this.yylloc.last_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.last_column,
-          last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-          this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-          this.done = false;
-        }
-        if (token) {
-          return token;
-        } else if (this._backtrack) {
-          for (var k in backup) {
-            this[k] = backup[k];
-          }
-          return false;
-        }
-        return false;
-      },
-      // return next match in input
-      next: function() {
-        if (this.done) {
-          return this.EOF;
-        }
-        if (!this._input) {
-          this.done = true;
-        }
-        var token, match, tempMatch, index;
-        if (!this._more) {
-          this.yytext = "";
-          this.match = "";
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-          tempMatch = this._input.match(this.rules[rules[i]]);
-          if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-            match = tempMatch;
-            index = i;
-            if (this.options.backtrack_lexer) {
-              token = this.test_match(tempMatch, rules[i]);
-              if (token !== false) {
-                return token;
-              } else if (this._backtrack) {
-                match = false;
-                continue;
-              } else {
-                return false;
-              }
-            } else if (!this.options.flex) {
-              break;
-            }
-          }
-        }
-        if (match) {
-          token = this.test_match(match, rules[index]);
-          if (token !== false) {
-            return token;
-          }
-          return false;
-        }
-        if (this._input === "") {
-          return this.EOF;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-      },
-      // return next match that has a token
-      lex: function lex2() {
-        var r = this.next();
-        if (r) {
-          return r;
-        } else {
-          return this.lex();
-        }
-      },
-      // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-      begin: function begin(condition) {
-        this.conditionStack.push(condition);
-      },
-      // pop the previously active lexer condition state off the condition stack
-      popState: function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-          return this.conditionStack.pop();
-        } else {
-          return this.conditionStack[0];
-        }
-      },
-      // produce the lexer rule set which is active for the currently active lexer condition state
-      _currentRules: function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-          return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-          return this.conditions["INITIAL"].rules;
-        }
-      },
-      // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-      topState: function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-          return this.conditionStack[n];
-        } else {
-          return "INITIAL";
-        }
-      },
-      // alias for begin(condition)
-      pushState: function pushState(condition) {
-        this.begin(condition);
-      },
-      // return the number of states currently on the stack
-      stateStackSize: function stateStackSize() {
-        return this.conditionStack.length;
-      },
-      options: { "case-insensitive": true },
-      performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
-        switch ($avoiding_name_collisions) {
-          case 0:
-            this.begin("open_directive");
-            return 29;
-          case 1:
-            this.begin("type_directive");
-            return 30;
-          case 2:
-            this.popState();
-            this.begin("arg_directive");
-            return 24;
-          case 3:
-            this.popState();
-            this.popState();
-            return 32;
-          case 4:
-            return 31;
-          case 5:
-            break;
-          case 6:
-            break;
-          case 7:
-            return 26;
-          case 8:
-            break;
-          case 9:
-            break;
-          case 10:
-            this.begin("title");
-            return 13;
-          case 11:
-            this.popState();
-            return "title_value";
-          case 12:
-            this.begin("acc_title");
-            return 15;
-          case 13:
-            this.popState();
-            return "acc_title_value";
-          case 14:
-            this.begin("acc_descr");
-            return 17;
-          case 15:
-            this.popState();
-            return "acc_descr_value";
-          case 16:
-            this.begin("acc_descr_multiline");
-            break;
-          case 17:
-            this.popState();
-            break;
-          case 18:
-            return "acc_descr_multiline_value";
-          case 19:
-            this.begin("string");
-            break;
-          case 20:
-            this.popState();
-            break;
-          case 21:
-            return "txt";
-          case 22:
-            return 6;
-          case 23:
-            return 8;
-          case 24:
-            return "value";
-          case 25:
-            return 28;
-        }
-      },
-      rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n\r]+)/i, /^(?:%%[^\n]*)/i, /^(?:[\s]+)/i, /^(?:title\b)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:pie\b)/i, /^(?:showData\b)/i, /^(?::[\s]*[\d]+(?:\.[\d]+)?)/i, /^(?:$)/i],
-      conditions: { "acc_descr_multiline": { "rules": [17, 18], "inclusive": false }, "acc_descr": { "rules": [15], "inclusive": false }, "acc_title": { "rules": [13], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "title": { "rules": [11], "inclusive": false }, "string": { "rules": [20, 21], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 7, 8, 9, 10, 12, 14, 16, 19, 22, 23, 24, 25], "inclusive": true } }
-    };
-    return lexer2;
-  }();
-  parser2.lexer = lexer;
-  function Parser() {
-    this.yy = {};
-  }
-  Parser.prototype = parser2;
-  parser2.Parser = Parser;
-  return new Parser();
-}();
-parser$4.parser = parser$4;
-const pieParser = parser$4;
-const pieDetector = (txt) => {
-  const logOutput = txt.match(/^\s*pie/) !== null || txt.match(/^\s*bar/) !== null;
-  return logOutput;
-};
-let sections$1 = {};
-let showData = false;
-const parseDirective$4 = function(statement, context, type2) {
-  mermaidAPI.parseDirective(this, statement, context, type2);
-};
-const addSection$1 = function(id2, value) {
-  id2 = common$1.sanitizeText(id2, getConfig$1());
-  if (sections$1[id2] === void 0) {
-    sections$1[id2] = value;
-    log$1.debug("Added new section :", id2);
-  }
-};
-const getSections$1 = () => sections$1;
-const setShowData = function(toggle) {
-  showData = toggle;
-};
-const getShowData = function() {
-  return showData;
-};
-const cleanupValue = function(value) {
-  if (value.substring(0, 1) === ":") {
-    value = value.substring(1).trim();
-    return Number(value.trim());
-  } else {
-    return Number(value.trim());
-  }
-};
-const clear$4 = function() {
-  sections$1 = {};
-  showData = false;
-  clear$g();
-};
-const pieDb = {
-  parseDirective: parseDirective$4,
-  getConfig: () => getConfig$1().pie,
-  addSection: addSection$1,
-  getSections: getSections$1,
-  cleanupValue,
-  clear: clear$4,
-  setAccTitle,
-  getAccTitle,
-  setDiagramTitle,
-  getDiagramTitle,
-  setShowData,
-  getShowData,
-  getAccDescription,
-  setAccDescription
-};
-let conf$5 = getConfig$1();
-let width;
-const height = 450;
-const draw$6 = (txt, id2, _version, diagObj) => {
-  try {
-    conf$5 = getConfig$1();
-    log$1.debug("Rendering info diagram\n" + txt);
-    const securityLevel = getConfig$1().securityLevel;
-    let sandboxElement;
-    if (securityLevel === "sandbox") {
-      sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-    }
-    const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-    const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document;
-    diagObj.db.clear();
-    diagObj.parser.parse(txt);
-    log$1.debug("Parsed info diagram");
-    const elem = doc.getElementById(id2);
-    width = elem.parentElement.offsetWidth;
-    if (width === void 0) {
-      width = 1200;
-    }
-    if (conf$5.useWidth !== void 0) {
-      width = conf$5.useWidth;
-    }
-    if (conf$5.pie.useWidth !== void 0) {
-      width = conf$5.pie.useWidth;
-    }
-    const diagram = root.select("#" + id2);
-    configureSvgSize(diagram, height, width, conf$5.pie.useMaxWidth);
-    elem.setAttribute("viewBox", "0 0 " + width + " " + height);
-    var margin = 40;
-    var legendRectSize = 18;
-    var legendSpacing = 4;
-    var radius = Math.min(width, height) / 2 - margin;
-    var svg = diagram.append("g").attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
-    var data = diagObj.db.getSections();
-    var sum = 0;
-    Object.keys(data).forEach(function(key) {
-      sum += data[key];
-    });
-    const themeVariables = conf$5.themeVariables;
-    var myGeneratedColors = [
-      themeVariables.pie1,
-      themeVariables.pie2,
-      themeVariables.pie3,
-      themeVariables.pie4,
-      themeVariables.pie5,
-      themeVariables.pie6,
-      themeVariables.pie7,
-      themeVariables.pie8,
-      themeVariables.pie9,
-      themeVariables.pie10,
-      themeVariables.pie11,
-      themeVariables.pie12
-    ];
-    var color = (0,src/* scaleOrdinal */.PKp)().range(myGeneratedColors);
-    var pieData = Object.entries(data).map(function(el, idx) {
-      return {
-        order: idx,
-        name: el[0],
-        value: el[1]
-      };
-    });
-    var pie$1 = (0,src/* pie */.ve8)().value(function(d) {
-      return d.value;
-    }).sort(function(a, b) {
-      return a.order - b.order;
-    });
-    var dataReady = pie$1(pieData);
-    var arcGenerator = (0,src/* arc */.Nb1)().innerRadius(0).outerRadius(radius);
-    svg.selectAll("mySlices").data(dataReady).enter().append("path").attr("d", arcGenerator).attr("fill", function(d) {
-      return color(d.data.name);
-    }).attr("class", "pieCircle");
-    svg.selectAll("mySlices").data(dataReady).enter().append("text").text(function(d) {
-      return (d.data.value / sum * 100).toFixed(0) + "%";
-    }).attr("transform", function(d) {
-      return "translate(" + arcGenerator.centroid(d) + ")";
-    }).style("text-anchor", "middle").attr("class", "slice");
-    svg.append("text").text(diagObj.db.getDiagramTitle()).attr("x", 0).attr("y", -(height - 50) / 2).attr("class", "pieTitleText");
-    var legend = svg.selectAll(".legend").data(color.domain()).enter().append("g").attr("class", "legend").attr("transform", function(d, i) {
-      const height2 = legendRectSize + legendSpacing;
-      const offset = height2 * color.domain().length / 2;
-      const horizontal = 12 * legendRectSize;
-      const vertical = i * height2 - offset;
-      return "translate(" + horizontal + "," + vertical + ")";
-    });
-    legend.append("rect").attr("width", legendRectSize).attr("height", legendRectSize).style("fill", color).style("stroke", color);
-    legend.data(dataReady).append("text").attr("x", legendRectSize + legendSpacing).attr("y", legendRectSize - legendSpacing).text(function(d) {
-      if (diagObj.db.getShowData() || conf$5.showData || conf$5.pie.showData) {
-        return d.data.name + " [" + d.data.value + "]";
-      } else {
-        return d.data.name;
-      }
-    });
-  } catch (e) {
-    log$1.error("Error while rendering info diagram");
-    log$1.error(e);
-  }
-};
-const pieRenderer = {
-  draw: draw$6
-};
-var parser$3 = function() {
-  var o = function(k, v, o2, l) {
-    for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
-      ;
-    return o2;
-  }, $V0 = [1, 3], $V1 = [1, 5], $V2 = [1, 6], $V3 = [1, 7], $V4 = [1, 8], $V5 = [5, 6, 8, 14, 16, 18, 19, 40, 41, 42, 43, 44, 45, 53, 71, 72], $V6 = [1, 22], $V7 = [2, 13], $V8 = [1, 26], $V9 = [1, 27], $Va = [1, 28], $Vb = [1, 29], $Vc = [1, 30], $Vd = [1, 31], $Ve = [1, 24], $Vf = [1, 32], $Vg = [1, 33], $Vh = [1, 36], $Vi = [71, 72], $Vj = [5, 8, 14, 16, 18, 19, 40, 41, 42, 43, 44, 45, 53, 60, 62, 71, 72], $Vk = [1, 56], $Vl = [1, 57], $Vm = [1, 58], $Vn = [1, 59], $Vo = [1, 60], $Vp = [1, 61], $Vq = [1, 62], $Vr = [62, 63], $Vs = [1, 74], $Vt = [1, 70], $Vu = [1, 71], $Vv = [1, 72], $Vw = [1, 73], $Vx = [1, 75], $Vy = [1, 79], $Vz = [1, 80], $VA = [1, 77], $VB = [1, 78], $VC = [5, 8, 14, 16, 18, 19, 40, 41, 42, 43, 44, 45, 53, 71, 72];
-  var parser2 = {
-    trace: function trace() {
-    },
-    yy: {},
-    symbols_: { "error": 2, "start": 3, "directive": 4, "NEWLINE": 5, "RD": 6, "diagram": 7, "EOF": 8, "openDirective": 9, "typeDirective": 10, "closeDirective": 11, ":": 12, "argDirective": 13, "acc_title": 14, "acc_title_value": 15, "acc_descr": 16, "acc_descr_value": 17, "acc_descr_multiline_value": 18, "open_directive": 19, "type_directive": 20, "arg_directive": 21, "close_directive": 22, "requirementDef": 23, "elementDef": 24, "relationshipDef": 25, "requirementType": 26, "requirementName": 27, "STRUCT_START": 28, "requirementBody": 29, "ID": 30, "COLONSEP": 31, "id": 32, "TEXT": 33, "text": 34, "RISK": 35, "riskLevel": 36, "VERIFYMTHD": 37, "verifyType": 38, "STRUCT_STOP": 39, "REQUIREMENT": 40, "FUNCTIONAL_REQUIREMENT": 41, "INTERFACE_REQUIREMENT": 42, "PERFORMANCE_REQUIREMENT": 43, "PHYSICAL_REQUIREMENT": 44, "DESIGN_CONSTRAINT": 45, "LOW_RISK": 46, "MED_RISK": 47, "HIGH_RISK": 48, "VERIFY_ANALYSIS": 49, "VERIFY_DEMONSTRATION": 50, "VERIFY_INSPECTION": 51, "VERIFY_TEST": 52, "ELEMENT": 53, "elementName": 54, "elementBody": 55, "TYPE": 56, "type": 57, "DOCREF": 58, "ref": 59, "END_ARROW_L": 60, "relationship": 61, "LINE": 62, "END_ARROW_R": 63, "CONTAINS": 64, "COPIES": 65, "DERIVES": 66, "SATISFIES": 67, "VERIFIES": 68, "REFINES": 69, "TRACES": 70, "unqString": 71, "qString": 72, "$accept": 0, "$end": 1 },
-    terminals_: { 2: "error", 5: "NEWLINE", 6: "RD", 8: "EOF", 12: ":", 14: "acc_title", 15: "acc_title_value", 16: "acc_descr", 17: "acc_descr_value", 18: "acc_descr_multiline_value", 19: "open_directive", 20: "type_directive", 21: "arg_directive", 22: "close_directive", 28: "STRUCT_START", 30: "ID", 31: "COLONSEP", 33: "TEXT", 35: "RISK", 37: "VERIFYMTHD", 39: "STRUCT_STOP", 40: "REQUIREMENT", 41: "FUNCTIONAL_REQUIREMENT", 42: "INTERFACE_REQUIREMENT", 43: "PERFORMANCE_REQUIREMENT", 44: "PHYSICAL_REQUIREMENT", 45: "DESIGN_CONSTRAINT", 46: "LOW_RISK", 47: "MED_RISK", 48: "HIGH_RISK", 49: "VERIFY_ANALYSIS", 50: "VERIFY_DEMONSTRATION", 51: "VERIFY_INSPECTION", 52: "VERIFY_TEST", 53: "ELEMENT", 56: "TYPE", 58: "DOCREF", 60: "END_ARROW_L", 62: "LINE", 63: "END_ARROW_R", 64: "CONTAINS", 65: "COPIES", 66: "DERIVES", 67: "SATISFIES", 68: "VERIFIES", 69: "REFINES", 70: "TRACES", 71: "unqString", 72: "qString" },
-    productions_: [0, [3, 3], [3, 2], [3, 4], [4, 3], [4, 5], [4, 2], [4, 2], [4, 1], [9, 1], [10, 1], [13, 1], [11, 1], [7, 0], [7, 2], [7, 2], [7, 2], [7, 2], [7, 2], [23, 5], [29, 5], [29, 5], [29, 5], [29, 5], [29, 2], [29, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [26, 1], [36, 1], [36, 1], [36, 1], [38, 1], [38, 1], [38, 1], [38, 1], [24, 5], [55, 5], [55, 5], [55, 2], [55, 1], [25, 5], [25, 5], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [61, 1], [27, 1], [27, 1], [32, 1], [32, 1], [34, 1], [34, 1], [54, 1], [54, 1], [57, 1], [57, 1], [59, 1], [59, 1]],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
-      var $0 = $$.length - 1;
-      switch (yystate) {
-        case 6:
-          this.$ = $$[$0].trim();
-          yy.setAccTitle(this.$);
-          break;
-        case 7:
-        case 8:
-          this.$ = $$[$0].trim();
-          yy.setAccDescription(this.$);
-          break;
-        case 9:
-          yy.parseDirective("%%{", "open_directive");
-          break;
-        case 10:
-          yy.parseDirective($$[$0], "type_directive");
-          break;
-        case 11:
-          $$[$0] = $$[$0].trim().replace(/'/g, '"');
-          yy.parseDirective($$[$0], "arg_directive");
-          break;
-        case 12:
-          yy.parseDirective("}%%", "close_directive", "pie");
-          break;
-        case 13:
-          this.$ = [];
-          break;
-        case 19:
-          yy.addRequirement($$[$0 - 3], $$[$0 - 4]);
-          break;
-        case 20:
-          yy.setNewReqId($$[$0 - 2]);
-          break;
-        case 21:
-          yy.setNewReqText($$[$0 - 2]);
-          break;
-        case 22:
-          yy.setNewReqRisk($$[$0 - 2]);
-          break;
-        case 23:
-          yy.setNewReqVerifyMethod($$[$0 - 2]);
-          break;
-        case 26:
-          this.$ = yy.RequirementType.REQUIREMENT;
-          break;
-        case 27:
-          this.$ = yy.RequirementType.FUNCTIONAL_REQUIREMENT;
-          break;
-        case 28:
-          this.$ = yy.RequirementType.INTERFACE_REQUIREMENT;
-          break;
-        case 29:
-          this.$ = yy.RequirementType.PERFORMANCE_REQUIREMENT;
-          break;
-        case 30:
-          this.$ = yy.RequirementType.PHYSICAL_REQUIREMENT;
-          break;
-        case 31:
-          this.$ = yy.RequirementType.DESIGN_CONSTRAINT;
-          break;
-        case 32:
-          this.$ = yy.RiskLevel.LOW_RISK;
-          break;
-        case 33:
-          this.$ = yy.RiskLevel.MED_RISK;
-          break;
-        case 34:
-          this.$ = yy.RiskLevel.HIGH_RISK;
-          break;
-        case 35:
-          this.$ = yy.VerifyType.VERIFY_ANALYSIS;
-          break;
-        case 36:
-          this.$ = yy.VerifyType.VERIFY_DEMONSTRATION;
-          break;
-        case 37:
-          this.$ = yy.VerifyType.VERIFY_INSPECTION;
-          break;
-        case 38:
-          this.$ = yy.VerifyType.VERIFY_TEST;
-          break;
-        case 39:
-          yy.addElement($$[$0 - 3]);
-          break;
-        case 40:
-          yy.setNewElementType($$[$0 - 2]);
-          break;
-        case 41:
-          yy.setNewElementDocRef($$[$0 - 2]);
-          break;
-        case 44:
-          yy.addRelationship($$[$0 - 2], $$[$0], $$[$0 - 4]);
-          break;
-        case 45:
-          yy.addRelationship($$[$0 - 2], $$[$0 - 4], $$[$0]);
-          break;
-        case 46:
-          this.$ = yy.Relationships.CONTAINS;
-          break;
-        case 47:
-          this.$ = yy.Relationships.COPIES;
-          break;
-        case 48:
-          this.$ = yy.Relationships.DERIVES;
-          break;
-        case 49:
-          this.$ = yy.Relationships.SATISFIES;
-          break;
-        case 50:
-          this.$ = yy.Relationships.VERIFIES;
-          break;
-        case 51:
-          this.$ = yy.Relationships.REFINES;
-          break;
-        case 52:
-          this.$ = yy.Relationships.TRACES;
-          break;
-      }
-    },
-    table: [{ 3: 1, 4: 2, 6: $V0, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4 }, { 1: [3] }, { 3: 10, 4: 2, 5: [1, 9], 6: $V0, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4 }, { 5: [1, 11] }, { 10: 12, 20: [1, 13] }, { 15: [1, 14] }, { 17: [1, 15] }, o($V5, [2, 8]), { 20: [2, 9] }, { 3: 16, 4: 2, 6: $V0, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4 }, { 1: [2, 2] }, { 4: 21, 5: $V6, 7: 17, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 11: 34, 12: [1, 35], 22: $Vh }, o([12, 22], [2, 10]), o($V5, [2, 6]), o($V5, [2, 7]), { 1: [2, 1] }, { 8: [1, 37] }, { 4: 21, 5: $V6, 7: 38, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 39, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 40, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 41, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 4: 21, 5: $V6, 7: 42, 8: $V7, 9: 4, 14: $V1, 16: $V2, 18: $V3, 19: $V4, 23: 18, 24: 19, 25: 20, 26: 23, 32: 25, 40: $V8, 41: $V9, 42: $Va, 43: $Vb, 44: $Vc, 45: $Vd, 53: $Ve, 71: $Vf, 72: $Vg }, { 27: 43, 71: [1, 44], 72: [1, 45] }, { 54: 46, 71: [1, 47], 72: [1, 48] }, { 60: [1, 49], 62: [1, 50] }, o($Vi, [2, 26]), o($Vi, [2, 27]), o($Vi, [2, 28]), o($Vi, [2, 29]), o($Vi, [2, 30]), o($Vi, [2, 31]), o($Vj, [2, 55]), o($Vj, [2, 56]), o($V5, [2, 4]), { 13: 51, 21: [1, 52] }, o($V5, [2, 12]), { 1: [2, 3] }, { 8: [2, 14] }, { 8: [2, 15] }, { 8: [2, 16] }, { 8: [2, 17] }, { 8: [2, 18] }, { 28: [1, 53] }, { 28: [2, 53] }, { 28: [2, 54] }, { 28: [1, 54] }, { 28: [2, 59] }, { 28: [2, 60] }, { 61: 55, 64: $Vk, 65: $Vl, 66: $Vm, 67: $Vn, 68: $Vo, 69: $Vp, 70: $Vq }, { 61: 63, 64: $Vk, 65: $Vl, 66: $Vm, 67: $Vn, 68: $Vo, 69: $Vp, 70: $Vq }, { 11: 64, 22: $Vh }, { 22: [2, 11] }, { 5: [1, 65] }, { 5: [1, 66] }, { 62: [1, 67] }, o($Vr, [2, 46]), o($Vr, [2, 47]), o($Vr, [2, 48]), o($Vr, [2, 49]), o($Vr, [2, 50]), o($Vr, [2, 51]), o($Vr, [2, 52]), { 63: [1, 68] }, o($V5, [2, 5]), { 5: $Vs, 29: 69, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vy, 39: $Vz, 55: 76, 56: $VA, 58: $VB }, { 32: 81, 71: $Vf, 72: $Vg }, { 32: 82, 71: $Vf, 72: $Vg }, o($VC, [2, 19]), { 31: [1, 83] }, { 31: [1, 84] }, { 31: [1, 85] }, { 31: [1, 86] }, { 5: $Vs, 29: 87, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, o($VC, [2, 25]), o($VC, [2, 39]), { 31: [1, 88] }, { 31: [1, 89] }, { 5: $Vy, 39: $Vz, 55: 90, 56: $VA, 58: $VB }, o($VC, [2, 43]), o($VC, [2, 44]), o($VC, [2, 45]), { 32: 91, 71: $Vf, 72: $Vg }, { 34: 92, 71: [1, 93], 72: [1, 94] }, { 36: 95, 46: [1, 96], 47: [1, 97], 48: [1, 98] }, { 38: 99, 49: [1, 100], 50: [1, 101], 51: [1, 102], 52: [1, 103] }, o($VC, [2, 24]), { 57: 104, 71: [1, 105], 72: [1, 106] }, { 59: 107, 71: [1, 108], 72: [1, 109] }, o($VC, [2, 42]), { 5: [1, 110] }, { 5: [1, 111] }, { 5: [2, 57] }, { 5: [2, 58] }, { 5: [1, 112] }, { 5: [2, 32] }, { 5: [2, 33] }, { 5: [2, 34] }, { 5: [1, 113] }, { 5: [2, 35] }, { 5: [2, 36] }, { 5: [2, 37] }, { 5: [2, 38] }, { 5: [1, 114] }, { 5: [2, 61] }, { 5: [2, 62] }, { 5: [1, 115] }, { 5: [2, 63] }, { 5: [2, 64] }, { 5: $Vs, 29: 116, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vs, 29: 117, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vs, 29: 118, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vs, 29: 119, 30: $Vt, 33: $Vu, 35: $Vv, 37: $Vw, 39: $Vx }, { 5: $Vy, 39: $Vz, 55: 120, 56: $VA, 58: $VB }, { 5: $Vy, 39: $Vz, 55: 121, 56: $VA, 58: $VB }, o($VC, [2, 20]), o($VC, [2, 21]), o($VC, [2, 22]), o($VC, [2, 23]), o($VC, [2, 40]), o($VC, [2, 41])],
-    defaultActions: { 8: [2, 9], 10: [2, 2], 16: [2, 1], 37: [2, 3], 38: [2, 14], 39: [2, 15], 40: [2, 16], 41: [2, 17], 42: [2, 18], 44: [2, 53], 45: [2, 54], 47: [2, 59], 48: [2, 60], 52: [2, 11], 93: [2, 57], 94: [2, 58], 96: [2, 32], 97: [2, 33], 98: [2, 34], 100: [2, 35], 101: [2, 36], 102: [2, 37], 103: [2, 38], 105: [2, 61], 106: [2, 62], 108: [2, 63], 109: [2, 64] },
-    parseError: function parseError(str2, hash) {
-      if (hash.recoverable) {
-        this.trace(str2);
-      } else {
-        var error = new Error(str2);
-        error.hash = hash;
-        throw error;
-      }
-    },
-    parse: function parse2(input) {
-      var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;
-      var args = lstack.slice.call(arguments, 1);
-      var lexer2 = Object.create(this.lexer);
-      var sharedState = { yy: {} };
-      for (var k in this.yy) {
-        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
-          sharedState.yy[k] = this.yy[k];
-        }
-      }
-      lexer2.setInput(input, sharedState.yy);
-      sharedState.yy.lexer = lexer2;
-      sharedState.yy.parser = this;
-      if (typeof lexer2.yylloc == "undefined") {
-        lexer2.yylloc = {};
-      }
-      var yyloc = lexer2.yylloc;
-      lstack.push(yyloc);
-      var ranges = lexer2.options && lexer2.options.ranges;
-      if (typeof sharedState.yy.parseError === "function") {
-        this.parseError = sharedState.yy.parseError;
-      } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-      }
-      function lex2() {
-        var token;
-        token = tstack.pop() || lexer2.lex() || EOF;
-        if (typeof token !== "number") {
-          if (token instanceof Array) {
-            tstack = token;
-            token = tstack.pop();
-          }
-          token = self.symbols_[token] || token;
-        }
-        return token;
-      }
-      var symbol, state, action, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-          action = this.defaultActions[state];
-        } else {
-          if (symbol === null || typeof symbol == "undefined") {
-            symbol = lex2();
-          }
-          action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-          var errStr = "";
-          expected = [];
-          for (p in table[state]) {
-            if (this.terminals_[p] && p > TERROR) {
-              expected.push("'" + this.terminals_[p] + "'");
-            }
-          }
-          if (lexer2.showPosition) {
-            errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-          } else {
-            errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
-          }
-          this.parseError(errStr, {
-            text: lexer2.match,
-            token: this.terminals_[symbol] || symbol,
-            line: lexer2.yylineno,
-            loc: yyloc,
-            expected
-          });
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-          throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-          case 1:
-            stack.push(symbol);
-            vstack.push(lexer2.yytext);
-            lstack.push(lexer2.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            {
-              yyleng = lexer2.yyleng;
-              yytext = lexer2.yytext;
-              yylineno = lexer2.yylineno;
-              yyloc = lexer2.yylloc;
-            }
-            break;
-          case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-              first_line: lstack[lstack.length - (len || 1)].first_line,
-              last_line: lstack[lstack.length - 1].last_line,
-              first_column: lstack[lstack.length - (len || 1)].first_column,
-              last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-              yyval._$.range = [
-                lstack[lstack.length - (len || 1)].range[0],
-                lstack[lstack.length - 1].range[1]
-              ];
-            }
-            r = this.performAction.apply(yyval, [
-              yytext,
-              yyleng,
-              yylineno,
-              sharedState.yy,
-              action[1],
-              vstack,
-              lstack
-            ].concat(args));
-            if (typeof r !== "undefined") {
-              return r;
-            }
-            if (len) {
-              stack = stack.slice(0, -1 * len * 2);
-              vstack = vstack.slice(0, -1 * len);
-              lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-          case 3:
-            return true;
-        }
-      }
-      return true;
-    }
-  };
-  var lexer = function() {
-    var lexer2 = {
-      EOF: 1,
-      parseError: function parseError(str2, hash) {
-        if (this.yy.parser) {
-          this.yy.parser.parseError(str2, hash);
-        } else {
-          throw new Error(str2);
-        }
-      },
-      // resets the lexer, sets new input
-      setInput: function(input, yy) {
-        this.yy = yy || this.yy || {};
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = "";
-        this.conditionStack = ["INITIAL"];
-        this.yylloc = {
-          first_line: 1,
-          first_column: 0,
-          last_line: 1,
-          last_column: 0
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [0, 0];
-        }
-        this.offset = 0;
-        return this;
-      },
-      // consumes and returns one char from the input
-      input: function() {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno++;
-          this.yylloc.last_line++;
-        } else {
-          this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-          this.yylloc.range[1]++;
-        }
-        this._input = this._input.slice(1);
-        return ch;
-      },
-      // unshifts one char (or a string) into the input
-      unput: function(ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len);
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-        if (lines.length - 1) {
-          this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-        this.yylloc = {
-          first_line: this.yylloc.first_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.first_column,
-          last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-      },
-      // When called from action, caches matched text and appends it on next action
-      more: function() {
-        this._more = true;
-        return this;
-      },
-      // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-      reject: function() {
-        if (this.options.backtrack_lexer) {
-          this._backtrack = true;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-        return this;
-      },
-      // retain first n characters of the match
-      less: function(n) {
-        this.unput(this.match.slice(n));
-      },
-      // displays already matched input, i.e. for error messages
-      pastInput: function() {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
-      },
-      // displays upcoming input, i.e. for error messages
-      upcomingInput: function() {
-        var next = this.match;
-        if (next.length < 20) {
-          next += this._input.substr(0, 20 - next.length);
-        }
-        return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
-      },
-      // displays the character position where the lexing error occurred, i.e. for error messages
-      showPosition: function() {
-        var pre = this.pastInput();
-        var c2 = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c2 + "^";
-      },
-      // test the lexed token: return FALSE when not a match, otherwise return token
-      test_match: function(match, indexed_rule) {
-        var token, lines, backup;
-        if (this.options.backtrack_lexer) {
-          backup = {
-            yylineno: this.yylineno,
-            yylloc: {
-              first_line: this.yylloc.first_line,
-              last_line: this.last_line,
-              first_column: this.yylloc.first_column,
-              last_column: this.yylloc.last_column
-            },
-            yytext: this.yytext,
-            match: this.match,
-            matches: this.matches,
-            matched: this.matched,
-            yyleng: this.yyleng,
-            offset: this.offset,
-            _more: this._more,
-            _input: this._input,
-            yy: this.yy,
-            conditionStack: this.conditionStack.slice(0),
-            done: this.done
-          };
-          if (this.options.ranges) {
-            backup.yylloc.range = this.yylloc.range.slice(0);
-          }
-        }
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno += lines.length;
-        }
-        this.yylloc = {
-          first_line: this.yylloc.last_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.last_column,
-          last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-          this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-          this.done = false;
-        }
-        if (token) {
-          return token;
-        } else if (this._backtrack) {
-          for (var k in backup) {
-            this[k] = backup[k];
-          }
-          return false;
-        }
-        return false;
-      },
-      // return next match in input
-      next: function() {
-        if (this.done) {
-          return this.EOF;
-        }
-        if (!this._input) {
-          this.done = true;
-        }
-        var token, match, tempMatch, index;
-        if (!this._more) {
-          this.yytext = "";
-          this.match = "";
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-          tempMatch = this._input.match(this.rules[rules[i]]);
-          if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-            match = tempMatch;
-            index = i;
-            if (this.options.backtrack_lexer) {
-              token = this.test_match(tempMatch, rules[i]);
-              if (token !== false) {
-                return token;
-              } else if (this._backtrack) {
-                match = false;
-                continue;
-              } else {
-                return false;
-              }
-            } else if (!this.options.flex) {
-              break;
-            }
-          }
-        }
-        if (match) {
-          token = this.test_match(match, rules[index]);
-          if (token !== false) {
-            return token;
-          }
-          return false;
-        }
-        if (this._input === "") {
-          return this.EOF;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-      },
-      // return next match that has a token
-      lex: function lex2() {
-        var r = this.next();
-        if (r) {
-          return r;
-        } else {
-          return this.lex();
-        }
-      },
-      // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-      begin: function begin(condition) {
-        this.conditionStack.push(condition);
-      },
-      // pop the previously active lexer condition state off the condition stack
-      popState: function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-          return this.conditionStack.pop();
-        } else {
-          return this.conditionStack[0];
-        }
-      },
-      // produce the lexer rule set which is active for the currently active lexer condition state
-      _currentRules: function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-          return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-          return this.conditions["INITIAL"].rules;
-        }
-      },
-      // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-      topState: function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-          return this.conditionStack[n];
-        } else {
-          return "INITIAL";
-        }
-      },
-      // alias for begin(condition)
-      pushState: function pushState(condition) {
-        this.begin(condition);
-      },
-      // return the number of states currently on the stack
-      stateStackSize: function stateStackSize() {
-        return this.conditionStack.length;
-      },
-      options: { "case-insensitive": true },
-      performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
-        switch ($avoiding_name_collisions) {
-          case 0:
-            this.begin("open_directive");
-            return 19;
-          case 1:
-            this.begin("type_directive");
-            return 20;
-          case 2:
-            this.popState();
-            this.begin("arg_directive");
-            return 12;
-          case 3:
-            this.popState();
-            this.popState();
-            return 22;
-          case 4:
-            return 21;
-          case 5:
-            return "title";
-          case 6:
-            this.begin("acc_title");
-            return 14;
-          case 7:
-            this.popState();
-            return "acc_title_value";
-          case 8:
-            this.begin("acc_descr");
-            return 16;
-          case 9:
-            this.popState();
-            return "acc_descr_value";
-          case 10:
-            this.begin("acc_descr_multiline");
-            break;
-          case 11:
-            this.popState();
-            break;
-          case 12:
-            return "acc_descr_multiline_value";
-          case 13:
-            return 5;
-          case 14:
-            break;
-          case 15:
-            break;
-          case 16:
-            break;
-          case 17:
-            return 8;
-          case 18:
-            return 6;
-          case 19:
-            return 28;
-          case 20:
-            return 39;
-          case 21:
-            return 31;
-          case 22:
-            return 30;
-          case 23:
-            return 33;
-          case 24:
-            return 35;
-          case 25:
-            return 37;
-          case 26:
-            return 40;
-          case 27:
-            return 41;
-          case 28:
-            return 42;
-          case 29:
-            return 43;
-          case 30:
-            return 44;
-          case 31:
-            return 45;
-          case 32:
-            return 46;
-          case 33:
-            return 47;
-          case 34:
-            return 48;
-          case 35:
-            return 49;
-          case 36:
-            return 50;
-          case 37:
-            return 51;
-          case 38:
-            return 52;
-          case 39:
-            return 53;
-          case 40:
-            return 64;
-          case 41:
-            return 65;
-          case 42:
-            return 66;
-          case 43:
-            return 67;
-          case 44:
-            return 68;
-          case 45:
-            return 69;
-          case 46:
-            return 70;
-          case 47:
-            return 56;
-          case 48:
-            return 58;
-          case 49:
-            return 60;
-          case 50:
-            return 63;
-          case 51:
-            return 62;
-          case 52:
-            this.begin("string");
-            break;
-          case 53:
-            this.popState();
-            break;
-          case 54:
-            return "qString";
-          case 55:
-            yy_.yytext = yy_.yytext.trim();
-            return 71;
-        }
-      },
-      rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:(\r?\n)+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:$)/i, /^(?:requirementDiagram\b)/i, /^(?:\{)/i, /^(?:\})/i, /^(?::)/i, /^(?:id\b)/i, /^(?:text\b)/i, /^(?:risk\b)/i, /^(?:verifyMethod\b)/i, /^(?:requirement\b)/i, /^(?:functionalRequirement\b)/i, /^(?:interfaceRequirement\b)/i, /^(?:performanceRequirement\b)/i, /^(?:physicalRequirement\b)/i, /^(?:designConstraint\b)/i, /^(?:low\b)/i, /^(?:medium\b)/i, /^(?:high\b)/i, /^(?:analysis\b)/i, /^(?:demonstration\b)/i, /^(?:inspection\b)/i, /^(?:test\b)/i, /^(?:element\b)/i, /^(?:contains\b)/i, /^(?:copies\b)/i, /^(?:derives\b)/i, /^(?:satisfies\b)/i, /^(?:verifies\b)/i, /^(?:refines\b)/i, /^(?:traces\b)/i, /^(?:type\b)/i, /^(?:docref\b)/i, /^(?:<-)/i, /^(?:->)/i, /^(?:-)/i, /^(?:["])/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[\w][^\r\n\{\<\>\-\=]*)/i],
-      conditions: { "acc_descr_multiline": { "rules": [11, 12], "inclusive": false }, "acc_descr": { "rules": [9], "inclusive": false }, "acc_title": { "rules": [7], "inclusive": false }, "close_directive": { "rules": [], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "open_directive": { "rules": [1], "inclusive": false }, "unqString": { "rules": [], "inclusive": false }, "token": { "rules": [], "inclusive": false }, "string": { "rules": [53, 54], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 8, 10, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 55], "inclusive": true } }
-    };
-    return lexer2;
-  }();
-  parser2.lexer = lexer;
-  function Parser() {
-    this.yy = {};
-  }
-  Parser.prototype = parser2;
-  parser2.Parser = Parser;
-  return new Parser();
-}();
-parser$3.parser = parser$3;
-const requirementParser = parser$3;
-const requirementDetector = (txt) => {
-  return txt.match(/^\s*requirement(Diagram)?/) !== null;
-};
-let relations = [];
-let latestRequirement = {};
-let requirements = {};
-let latestElement = {};
-let mermaid_ae477ddf_elements = {};
-const RequirementType = {
-  REQUIREMENT: "Requirement",
-  FUNCTIONAL_REQUIREMENT: "Functional Requirement",
-  INTERFACE_REQUIREMENT: "Interface Requirement",
-  PERFORMANCE_REQUIREMENT: "Performance Requirement",
-  PHYSICAL_REQUIREMENT: "Physical Requirement",
-  DESIGN_CONSTRAINT: "Design Constraint"
-};
-const RiskLevel = {
-  LOW_RISK: "Low",
-  MED_RISK: "Medium",
-  HIGH_RISK: "High"
-};
-const VerifyType = {
-  VERIFY_ANALYSIS: "Analysis",
-  VERIFY_DEMONSTRATION: "Demonstration",
-  VERIFY_INSPECTION: "Inspection",
-  VERIFY_TEST: "Test"
-};
-const Relationships = {
-  CONTAINS: "contains",
-  COPIES: "copies",
-  DERIVES: "derives",
-  SATISFIES: "satisfies",
-  VERIFIES: "verifies",
-  REFINES: "refines",
-  TRACES: "traces"
-};
-const parseDirective$3 = function(statement, context, type2) {
-  mermaidAPI.parseDirective(this, statement, context, type2);
-};
-const addRequirement = (name, type2) => {
-  if (requirements[name] === void 0) {
-    requirements[name] = {
-      name,
-      type: type2,
-      id: latestRequirement.id,
-      text: latestRequirement.text,
-      risk: latestRequirement.risk,
-      verifyMethod: latestRequirement.verifyMethod
-    };
-  }
-  latestRequirement = {};
-  return requirements[name];
-};
-const getRequirements = () => requirements;
-const setNewReqId = (id2) => {
-  if (latestRequirement !== void 0) {
-    latestRequirement.id = id2;
-  }
-};
-const setNewReqText = (text) => {
-  if (latestRequirement !== void 0) {
-    latestRequirement.text = text;
-  }
-};
-const setNewReqRisk = (risk) => {
-  if (latestRequirement !== void 0) {
-    latestRequirement.risk = risk;
-  }
-};
-const setNewReqVerifyMethod = (verifyMethod) => {
-  if (latestRequirement !== void 0) {
-    latestRequirement.verifyMethod = verifyMethod;
-  }
-};
-const addElement = (name) => {
-  if (mermaid_ae477ddf_elements[name] === void 0) {
-    mermaid_ae477ddf_elements[name] = {
-      name,
-      type: latestElement.type,
-      docRef: latestElement.docRef
-    };
-    log$1.info("Added new requirement: ", name);
-  }
-  latestElement = {};
-  return mermaid_ae477ddf_elements[name];
-};
-const getElements = () => mermaid_ae477ddf_elements;
-const setNewElementType = (type2) => {
-  if (latestElement !== void 0) {
-    latestElement.type = type2;
-  }
-};
-const setNewElementDocRef = (docRef) => {
-  if (latestElement !== void 0) {
-    latestElement.docRef = docRef;
-  }
-};
-const addRelationship = (type2, src, dst) => {
-  relations.push({
-    type: type2,
-    src,
-    dst
-  });
-};
-const getRelationships = () => relations;
-const clear$3 = () => {
-  relations = [];
-  latestRequirement = {};
-  requirements = {};
-  latestElement = {};
-  mermaid_ae477ddf_elements = {};
-  clear$g();
-};
-const requirementDb = {
-  RequirementType,
-  RiskLevel,
-  VerifyType,
-  Relationships,
-  parseDirective: parseDirective$3,
-  getConfig: () => getConfig$1().req,
-  addRequirement,
-  getRequirements,
-  setNewReqId,
-  setNewReqText,
-  setNewReqRisk,
-  setNewReqVerifyMethod,
-  setAccTitle,
-  getAccTitle,
-  setAccDescription,
-  getAccDescription,
-  addElement,
-  getElements,
-  setNewElementType,
-  setNewElementDocRef,
-  addRelationship,
-  getRelationships,
-  clear: clear$3
-};
-const ReqMarkers = {
-  CONTAINS: "contains",
-  ARROW: "arrow"
-};
-const insertLineEndings = (parentNode, conf2) => {
-  let containsNode = parentNode.append("defs").append("marker").attr("id", ReqMarkers.CONTAINS + "_line_ending").attr("refX", 0).attr("refY", conf2.line_height / 2).attr("markerWidth", conf2.line_height).attr("markerHeight", conf2.line_height).attr("orient", "auto").append("g");
-  containsNode.append("circle").attr("cx", conf2.line_height / 2).attr("cy", conf2.line_height / 2).attr("r", conf2.line_height / 2).attr("fill", "none");
-  containsNode.append("line").attr("x1", 0).attr("x2", conf2.line_height).attr("y1", conf2.line_height / 2).attr("y2", conf2.line_height / 2).attr("stroke-width", 1);
-  containsNode.append("line").attr("y1", 0).attr("y2", conf2.line_height).attr("x1", conf2.line_height / 2).attr("x2", conf2.line_height / 2).attr("stroke-width", 1);
-  parentNode.append("defs").append("marker").attr("id", ReqMarkers.ARROW + "_line_ending").attr("refX", conf2.line_height).attr("refY", 0.5 * conf2.line_height).attr("markerWidth", conf2.line_height).attr("markerHeight", conf2.line_height).attr("orient", "auto").append("path").attr(
-    "d",
-    `M0,0
-      L${conf2.line_height},${conf2.line_height / 2}
-      M${conf2.line_height},${conf2.line_height / 2}
-      L0,${conf2.line_height}`
-  ).attr("stroke-width", 1);
-};
-const markers = {
-  ReqMarkers,
-  insertLineEndings
-};
-let conf$4 = {};
-let relCnt = 0;
-const newRectNode = (parentNode, id2) => {
-  return parentNode.insert("rect", "#" + id2).attr("class", "req reqBox").attr("x", 0).attr("y", 0).attr("width", conf$4.rect_min_width + "px").attr("height", conf$4.rect_min_height + "px");
-};
-const newTitleNode = (parentNode, id2, txts) => {
-  let x = conf$4.rect_min_width / 2;
-  let title2 = parentNode.append("text").attr("class", "req reqLabel reqTitle").attr("id", id2).attr("x", x).attr("y", conf$4.rect_padding).attr("dominant-baseline", "hanging");
-  let i = 0;
-  txts.forEach((textStr) => {
-    if (i == 0) {
-      title2.append("tspan").attr("text-anchor", "middle").attr("x", conf$4.rect_min_width / 2).attr("dy", 0).text(textStr);
-    } else {
-      title2.append("tspan").attr("text-anchor", "middle").attr("x", conf$4.rect_min_width / 2).attr("dy", conf$4.line_height * 0.75).text(textStr);
-    }
-    i++;
-  });
-  let yPadding = 1.5 * conf$4.rect_padding;
-  let linePadding = i * conf$4.line_height * 0.75;
-  let totalY = yPadding + linePadding;
-  parentNode.append("line").attr("class", "req-title-line").attr("x1", "0").attr("x2", conf$4.rect_min_width).attr("y1", totalY).attr("y2", totalY);
-  return {
-    titleNode: title2,
-    y: totalY
-  };
-};
-const newBodyNode = (parentNode, id2, txts, yStart) => {
-  let body = parentNode.append("text").attr("class", "req reqLabel").attr("id", id2).attr("x", conf$4.rect_padding).attr("y", yStart).attr("dominant-baseline", "hanging");
-  let currentRow = 0;
-  const charLimit = 30;
-  let wrappedTxts = [];
-  txts.forEach((textStr) => {
-    let currentTextLen = textStr.length;
-    while (currentTextLen > charLimit && currentRow < 3) {
-      let firstPart = textStr.substring(0, charLimit);
-      textStr = textStr.substring(charLimit, textStr.length);
-      currentTextLen = textStr.length;
-      wrappedTxts[wrappedTxts.length] = firstPart;
-      currentRow++;
-    }
-    if (currentRow == 3) {
-      let lastStr = wrappedTxts[wrappedTxts.length - 1];
-      wrappedTxts[wrappedTxts.length - 1] = lastStr.substring(0, lastStr.length - 4) + "...";
-    } else {
-      wrappedTxts[wrappedTxts.length] = textStr;
-    }
-    currentRow = 0;
-  });
-  wrappedTxts.forEach((textStr) => {
-    body.append("tspan").attr("x", conf$4.rect_padding).attr("dy", conf$4.line_height).text(textStr);
-  });
-  return body;
-};
-const addEdgeLabel = (parentNode, svgPath, conf2, txt) => {
-  const len = svgPath.node().getTotalLength();
-  const labelPoint = svgPath.node().getPointAtLength(len * 0.5);
-  const labelId = "rel" + relCnt;
-  relCnt++;
-  const labelNode = parentNode.append("text").attr("class", "req relationshipLabel").attr("id", labelId).attr("x", labelPoint.x).attr("y", labelPoint.y).attr("text-anchor", "middle").attr("dominant-baseline", "middle").text(txt);
-  const labelBBox = labelNode.node().getBBox();
-  parentNode.insert("rect", "#" + labelId).attr("class", "req reqLabelBox").attr("x", labelPoint.x - labelBBox.width / 2).attr("y", labelPoint.y - labelBBox.height / 2).attr("width", labelBBox.width).attr("height", labelBBox.height).attr("fill", "white").attr("fill-opacity", "85%");
-};
-const drawRelationshipFromLayout = function(svg, rel, g, insert, diagObj) {
-  const edge = g.edge(elementString(rel.src), elementString(rel.dst));
-  const lineFunction = (0,src/* line */.jvg)().x(function(d) {
-    return d.x;
-  }).y(function(d) {
-    return d.y;
-  });
-  const svgPath = svg.insert("path", "#" + insert).attr("class", "er relationshipLine").attr("d", lineFunction(edge.points)).attr("fill", "none");
-  if (rel.type == diagObj.db.Relationships.CONTAINS) {
-    svgPath.attr(
-      "marker-start",
-      "url(" + common$1.getUrl(conf$4.arrowMarkerAbsolute) + "#" + rel.type + "_line_ending)"
-    );
-  } else {
-    svgPath.attr("stroke-dasharray", "10,7");
-    svgPath.attr(
-      "marker-end",
-      "url(" + common$1.getUrl(conf$4.arrowMarkerAbsolute) + "#" + markers.ReqMarkers.ARROW + "_line_ending)"
-    );
-  }
-  addEdgeLabel(svg, svgPath, conf$4, `<<${rel.type}>>`);
-  return;
-};
-const drawReqs = (reqs, graph, svgNode) => {
-  Object.keys(reqs).forEach((reqName) => {
-    let req = reqs[reqName];
-    reqName = elementString(reqName);
-    log$1.info("Added new requirement: ", reqName);
-    const groupNode = svgNode.append("g").attr("id", reqName);
-    const textId = "req-" + reqName;
-    const rectNode = newRectNode(groupNode, textId);
-    let titleNodeInfo = newTitleNode(groupNode, reqName + "_title", [
-      `<<${req.type}>>`,
-      `${req.name}`
-    ]);
-    newBodyNode(
-      groupNode,
-      reqName + "_body",
-      [
-        `Id: ${req.id}`,
-        `Text: ${req.text}`,
-        `Risk: ${req.risk}`,
-        `Verification: ${req.verifyMethod}`
-      ],
-      titleNodeInfo.y
-    );
-    const rectBBox = rectNode.node().getBBox();
-    graph.setNode(reqName, {
-      width: rectBBox.width,
-      height: rectBBox.height,
-      shape: "rect",
-      id: reqName
-    });
-  });
-};
-const drawElements = (els, graph, svgNode) => {
-  Object.keys(els).forEach((elName) => {
-    let el = els[elName];
-    const id2 = elementString(elName);
-    const groupNode = svgNode.append("g").attr("id", id2);
-    const textId = "element-" + id2;
-    const rectNode = newRectNode(groupNode, textId);
-    let titleNodeInfo = newTitleNode(groupNode, textId + "_title", [`<<Element>>`, `${elName}`]);
-    newBodyNode(
-      groupNode,
-      textId + "_body",
-      [`Type: ${el.type || "Not Specified"}`, `Doc Ref: ${el.docRef || "None"}`],
-      titleNodeInfo.y
-    );
-    const rectBBox = rectNode.node().getBBox();
-    graph.setNode(id2, {
-      width: rectBBox.width,
-      height: rectBBox.height,
-      shape: "rect",
-      id: id2
-    });
-  });
-};
-const addRelationships = (relationships2, g) => {
-  relationships2.forEach(function(r) {
-    let src = elementString(r.src);
-    let dst = elementString(r.dst);
-    g.setEdge(src, dst, { relationship: r });
-  });
-  return relationships2;
-};
-const adjustEntities = function(svgNode, graph) {
-  graph.nodes().forEach(function(v) {
-    if (v !== void 0 && graph.node(v) !== void 0) {
-      svgNode.select("#" + v);
-      svgNode.select("#" + v).attr(
-        "transform",
-        "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y - graph.node(v).height / 2) + " )"
-      );
-    }
-  });
-  return;
-};
-const elementString = (str2) => {
-  return str2.replace(/\s/g, "").replace(/\./g, "_");
-};
-const draw$5 = (text, id2, _version, diagObj) => {
-  conf$4 = getConfig$1().requirement;
-  diagObj.db.clear();
-  diagObj.parser.parse(text);
-  const securityLevel = conf$4.securityLevel;
-  let sandboxElement;
-  if (securityLevel === "sandbox") {
-    sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-  }
-  const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-  const svg = root.select(`[id='${id2}']`);
-  markers.insertLineEndings(svg, conf$4);
-  const g = new graphlib/* Graph */.k({
-    multigraph: false,
-    compound: false,
-    directed: true
-  }).setGraph({
-    rankdir: conf$4.layoutDirection,
-    marginx: 20,
-    marginy: 20,
-    nodesep: 100,
-    edgesep: 100,
-    ranksep: 100
-  }).setDefaultEdgeLabel(function() {
-    return {};
-  });
-  let requirements2 = diagObj.db.getRequirements();
-  let elements2 = diagObj.db.getElements();
-  let relationships2 = diagObj.db.getRelationships();
-  drawReqs(requirements2, g, svg);
-  drawElements(elements2, g, svg);
-  addRelationships(relationships2, g);
-  (0,dagre/* layout */.bK)(g);
-  adjustEntities(svg, g);
-  relationships2.forEach(function(rel) {
-    drawRelationshipFromLayout(svg, rel, g, id2, diagObj);
-  });
-  const padding2 = conf$4.rect_padding;
-  const svgBounds = svg.node().getBBox();
-  const width2 = svgBounds.width + padding2 * 2;
-  const height2 = svgBounds.height + padding2 * 2;
-  configureSvgSize(svg, height2, width2, conf$4.useMaxWidth);
-  svg.attr("viewBox", `${svgBounds.x - padding2} ${svgBounds.y - padding2} ${width2} ${height2}`);
-};
-const requirementRenderer = {
-  draw: draw$5
-};
-var parser$2 = function() {
-  var o = function(k, v, o2, l) {
-    for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
-      ;
-    return o2;
-  }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 7], $V4 = [2, 5], $V5 = [1, 15], $V6 = [1, 17], $V7 = [1, 19], $V8 = [1, 21], $V9 = [1, 22], $Va = [1, 23], $Vb = [1, 29], $Vc = [1, 30], $Vd = [1, 31], $Ve = [1, 32], $Vf = [1, 33], $Vg = [1, 34], $Vh = [1, 35], $Vi = [1, 36], $Vj = [1, 37], $Vk = [1, 38], $Vl = [1, 39], $Vm = [1, 40], $Vn = [1, 42], $Vo = [1, 43], $Vp = [1, 45], $Vq = [1, 46], $Vr = [1, 47], $Vs = [1, 48], $Vt = [1, 49], $Vu = [1, 50], $Vv = [1, 53], $Vw = [1, 4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 51, 52, 53, 54, 56, 57, 62, 63, 64, 65, 73, 83], $Vx = [4, 5, 21, 54, 56], $Vy = [4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 54, 56, 57, 62, 63, 64, 65, 73, 83], $Vz = [4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 53, 54, 56, 57, 62, 63, 64, 65, 73, 83], $VA = [4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 52, 54, 56, 57, 62, 63, 64, 65, 73, 83], $VB = [4, 5, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 51, 54, 56, 57, 62, 63, 64, 65, 73, 83], $VC = [71, 72, 73], $VD = [1, 125], $VE = [1, 4, 5, 7, 19, 21, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 51, 52, 53, 54, 56, 57, 62, 63, 64, 65, 73, 83];
-  var parser2 = {
-    trace: function trace() {
-    },
-    yy: {},
-    symbols_: { "error": 2, "start": 3, "SPACE": 4, "NEWLINE": 5, "directive": 6, "SD": 7, "document": 8, "line": 9, "statement": 10, "box_section": 11, "box_line": 12, "participant_statement": 13, "openDirective": 14, "typeDirective": 15, "closeDirective": 16, ":": 17, "argDirective": 18, "box": 19, "restOfLine": 20, "end": 21, "signal": 22, "autonumber": 23, "NUM": 24, "off": 25, "activate": 26, "actor": 27, "deactivate": 28, "note_statement": 29, "links_statement": 30, "link_statement": 31, "properties_statement": 32, "details_statement": 33, "title": 34, "legacy_title": 35, "acc_title": 36, "acc_title_value": 37, "acc_descr": 38, "acc_descr_value": 39, "acc_descr_multiline_value": 40, "loop": 41, "rect": 42, "opt": 43, "alt": 44, "else_sections": 45, "par": 46, "par_sections": 47, "critical": 48, "option_sections": 49, "break": 50, "option": 51, "and": 52, "else": 53, "participant": 54, "AS": 55, "participant_actor": 56, "note": 57, "placement": 58, "text2": 59, "over": 60, "actor_pair": 61, "links": 62, "link": 63, "properties": 64, "details": 65, "spaceList": 66, ",": 67, "left_of": 68, "right_of": 69, "signaltype": 70, "+": 71, "-": 72, "ACTOR": 73, "SOLID_OPEN_ARROW": 74, "DOTTED_OPEN_ARROW": 75, "SOLID_ARROW": 76, "DOTTED_ARROW": 77, "SOLID_CROSS": 78, "DOTTED_CROSS": 79, "SOLID_POINT": 80, "DOTTED_POINT": 81, "TXT": 82, "open_directive": 83, "type_directive": 84, "arg_directive": 85, "close_directive": 86, "$accept": 0, "$end": 1 },
-    terminals_: { 2: "error", 4: "SPACE", 5: "NEWLINE", 7: "SD", 17: ":", 19: "box", 20: "restOfLine", 21: "end", 23: "autonumber", 24: "NUM", 25: "off", 26: "activate", 28: "deactivate", 34: "title", 35: "legacy_title", 36: "acc_title", 37: "acc_title_value", 38: "acc_descr", 39: "acc_descr_value", 40: "acc_descr_multiline_value", 41: "loop", 42: "rect", 43: "opt", 44: "alt", 46: "par", 48: "critical", 50: "break", 51: "option", 52: "and", 53: "else", 54: "participant", 55: "AS", 56: "participant_actor", 57: "note", 60: "over", 62: "links", 63: "link", 64: "properties", 65: "details", 67: ",", 68: "left_of", 69: "right_of", 71: "+", 72: "-", 73: "ACTOR", 74: "SOLID_OPEN_ARROW", 75: "DOTTED_OPEN_ARROW", 76: "SOLID_ARROW", 77: "DOTTED_ARROW", 78: "SOLID_CROSS", 79: "DOTTED_CROSS", 80: "SOLID_POINT", 81: "DOTTED_POINT", 82: "TXT", 83: "open_directive", 84: "type_directive", 85: "arg_directive", 86: "close_directive" },
-    productions_: [0, [3, 2], [3, 2], [3, 2], [3, 2], [8, 0], [8, 2], [9, 2], [9, 1], [9, 1], [11, 0], [11, 2], [12, 2], [12, 1], [12, 1], [6, 4], [6, 6], [10, 1], [10, 4], [10, 2], [10, 4], [10, 3], [10, 3], [10, 2], [10, 3], [10, 3], [10, 2], [10, 2], [10, 2], [10, 2], [10, 2], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 4], [10, 1], [49, 1], [49, 4], [47, 1], [47, 4], [45, 1], [45, 4], [13, 5], [13, 3], [13, 5], [13, 3], [29, 4], [29, 4], [30, 3], [31, 3], [32, 3], [33, 3], [66, 2], [66, 1], [61, 3], [61, 1], [58, 1], [58, 1], [22, 5], [22, 5], [22, 4], [27, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [70, 1], [59, 1], [14, 1], [15, 1], [18, 1], [16, 1]],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
-      var $0 = $$.length - 1;
-      switch (yystate) {
-        case 4:
-          yy.apply($$[$0]);
-          return $$[$0];
-        case 5:
-        case 10:
-          this.$ = [];
-          break;
-        case 6:
-        case 11:
-          $$[$0 - 1].push($$[$0]);
-          this.$ = $$[$0 - 1];
-          break;
-        case 7:
-        case 8:
-        case 12:
-        case 13:
-          this.$ = $$[$0];
-          break;
-        case 9:
-        case 14:
-          this.$ = [];
-          break;
-        case 18:
-          $$[$0 - 1].unshift({ type: "boxStart", boxData: yy.parseBoxData($$[$0 - 2]) });
-          $$[$0 - 1].push({ type: "boxEnd", boxText: $$[$0 - 2] });
-          this.$ = $$[$0 - 1];
-          break;
-        case 20:
-          this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 2]), sequenceIndexStep: Number($$[$0 - 1]), sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER };
-          break;
-        case 21:
-          this.$ = { type: "sequenceIndex", sequenceIndex: Number($$[$0 - 1]), sequenceIndexStep: 1, sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER };
-          break;
-        case 22:
-          this.$ = { type: "sequenceIndex", sequenceVisible: false, signalType: yy.LINETYPE.AUTONUMBER };
-          break;
-        case 23:
-          this.$ = { type: "sequenceIndex", sequenceVisible: true, signalType: yy.LINETYPE.AUTONUMBER };
-          break;
-        case 24:
-          this.$ = { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] };
-          break;
-        case 25:
-          this.$ = { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 1] };
-          break;
-        case 31:
-          yy.setDiagramTitle($$[$0].substring(6));
-          this.$ = $$[$0].substring(6);
-          break;
-        case 32:
-          yy.setDiagramTitle($$[$0].substring(7));
-          this.$ = $$[$0].substring(7);
-          break;
-        case 33:
-          this.$ = $$[$0].trim();
-          yy.setAccTitle(this.$);
-          break;
-        case 34:
-        case 35:
-          this.$ = $$[$0].trim();
-          yy.setAccDescription(this.$);
-          break;
-        case 36:
-          $$[$0 - 1].unshift({ type: "loopStart", loopText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.LOOP_START });
-          $$[$0 - 1].push({ type: "loopEnd", loopText: $$[$0 - 2], signalType: yy.LINETYPE.LOOP_END });
-          this.$ = $$[$0 - 1];
-          break;
-        case 37:
-          $$[$0 - 1].unshift({ type: "rectStart", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_START });
-          $$[$0 - 1].push({ type: "rectEnd", color: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.RECT_END });
-          this.$ = $$[$0 - 1];
-          break;
-        case 38:
-          $$[$0 - 1].unshift({ type: "optStart", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_START });
-          $$[$0 - 1].push({ type: "optEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.OPT_END });
-          this.$ = $$[$0 - 1];
-          break;
-        case 39:
-          $$[$0 - 1].unshift({ type: "altStart", altText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.ALT_START });
-          $$[$0 - 1].push({ type: "altEnd", signalType: yy.LINETYPE.ALT_END });
-          this.$ = $$[$0 - 1];
-          break;
-        case 40:
-          $$[$0 - 1].unshift({ type: "parStart", parText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.PAR_START });
-          $$[$0 - 1].push({ type: "parEnd", signalType: yy.LINETYPE.PAR_END });
-          this.$ = $$[$0 - 1];
-          break;
-        case 41:
-          $$[$0 - 1].unshift({ type: "criticalStart", criticalText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.CRITICAL_START });
-          $$[$0 - 1].push({ type: "criticalEnd", signalType: yy.LINETYPE.CRITICAL_END });
-          this.$ = $$[$0 - 1];
-          break;
-        case 42:
-          $$[$0 - 1].unshift({ type: "breakStart", breakText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_START });
-          $$[$0 - 1].push({ type: "breakEnd", optText: yy.parseMessage($$[$0 - 2]), signalType: yy.LINETYPE.BREAK_END });
-          this.$ = $$[$0 - 1];
-          break;
-        case 45:
-          this.$ = $$[$0 - 3].concat([{ type: "option", optionText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.CRITICAL_OPTION }, $$[$0]]);
-          break;
-        case 47:
-          this.$ = $$[$0 - 3].concat([{ type: "and", parText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.PAR_AND }, $$[$0]]);
-          break;
-        case 49:
-          this.$ = $$[$0 - 3].concat([{ type: "else", altText: yy.parseMessage($$[$0 - 1]), signalType: yy.LINETYPE.ALT_ELSE }, $$[$0]]);
-          break;
-        case 50:
-          $$[$0 - 3].type = "addParticipant";
-          $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]);
-          this.$ = $$[$0 - 3];
-          break;
-        case 51:
-          $$[$0 - 1].type = "addParticipant";
-          this.$ = $$[$0 - 1];
-          break;
-        case 52:
-          $$[$0 - 3].type = "addActor";
-          $$[$0 - 3].description = yy.parseMessage($$[$0 - 1]);
-          this.$ = $$[$0 - 3];
-          break;
-        case 53:
-          $$[$0 - 1].type = "addActor";
-          this.$ = $$[$0 - 1];
-          break;
-        case 54:
-          this.$ = [$$[$0 - 1], { type: "addNote", placement: $$[$0 - 2], actor: $$[$0 - 1].actor, text: $$[$0] }];
-          break;
-        case 55:
-          $$[$0 - 2] = [].concat($$[$0 - 1], $$[$0 - 1]).slice(0, 2);
-          $$[$0 - 2][0] = $$[$0 - 2][0].actor;
-          $$[$0 - 2][1] = $$[$0 - 2][1].actor;
-          this.$ = [$$[$0 - 1], { type: "addNote", placement: yy.PLACEMENT.OVER, actor: $$[$0 - 2].slice(0, 2), text: $$[$0] }];
-          break;
-        case 56:
-          this.$ = [$$[$0 - 1], { type: "addLinks", actor: $$[$0 - 1].actor, text: $$[$0] }];
-          break;
-        case 57:
-          this.$ = [$$[$0 - 1], { type: "addALink", actor: $$[$0 - 1].actor, text: $$[$0] }];
-          break;
-        case 58:
-          this.$ = [$$[$0 - 1], { type: "addProperties", actor: $$[$0 - 1].actor, text: $$[$0] }];
-          break;
-        case 59:
-          this.$ = [$$[$0 - 1], { type: "addDetails", actor: $$[$0 - 1].actor, text: $$[$0] }];
-          break;
-        case 62:
-          this.$ = [$$[$0 - 2], $$[$0]];
-          break;
-        case 63:
-          this.$ = $$[$0];
-          break;
-        case 64:
-          this.$ = yy.PLACEMENT.LEFTOF;
-          break;
-        case 65:
-          this.$ = yy.PLACEMENT.RIGHTOF;
-          break;
-        case 66:
-          this.$ = [
-            $$[$0 - 4],
-            $$[$0 - 1],
-            { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0] },
-            { type: "activeStart", signalType: yy.LINETYPE.ACTIVE_START, actor: $$[$0 - 1] }
-          ];
-          break;
-        case 67:
-          this.$ = [
-            $$[$0 - 4],
-            $$[$0 - 1],
-            { type: "addMessage", from: $$[$0 - 4].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 3], msg: $$[$0] },
-            { type: "activeEnd", signalType: yy.LINETYPE.ACTIVE_END, actor: $$[$0 - 4] }
-          ];
-          break;
-        case 68:
-          this.$ = [$$[$0 - 3], $$[$0 - 1], { type: "addMessage", from: $$[$0 - 3].actor, to: $$[$0 - 1].actor, signalType: $$[$0 - 2], msg: $$[$0] }];
-          break;
-        case 69:
-          this.$ = { type: "addParticipant", actor: $$[$0] };
-          break;
-        case 70:
-          this.$ = yy.LINETYPE.SOLID_OPEN;
-          break;
-        case 71:
-          this.$ = yy.LINETYPE.DOTTED_OPEN;
-          break;
-        case 72:
-          this.$ = yy.LINETYPE.SOLID;
-          break;
-        case 73:
-          this.$ = yy.LINETYPE.DOTTED;
-          break;
-        case 74:
-          this.$ = yy.LINETYPE.SOLID_CROSS;
-          break;
-        case 75:
-          this.$ = yy.LINETYPE.DOTTED_CROSS;
-          break;
-        case 76:
-          this.$ = yy.LINETYPE.SOLID_POINT;
-          break;
-        case 77:
-          this.$ = yy.LINETYPE.DOTTED_POINT;
-          break;
-        case 78:
-          this.$ = yy.parseMessage($$[$0].trim().substring(1));
-          break;
-        case 79:
-          yy.parseDirective("%%{", "open_directive");
-          break;
-        case 80:
-          yy.parseDirective($$[$0], "type_directive");
-          break;
-        case 81:
-          $$[$0] = $$[$0].trim().replace(/'/g, '"');
-          yy.parseDirective($$[$0], "arg_directive");
-          break;
-        case 82:
-          yy.parseDirective("}%%", "close_directive", "sequence");
-          break;
-      }
-    },
-    table: [{ 3: 1, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 83: $V3 }, { 1: [3] }, { 3: 8, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 83: $V3 }, { 3: 9, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 83: $V3 }, { 3: 10, 4: $V0, 5: $V1, 6: 4, 7: $V2, 14: 6, 83: $V3 }, o([1, 4, 5, 19, 23, 26, 28, 34, 35, 36, 38, 40, 41, 42, 43, 44, 46, 48, 50, 54, 56, 57, 62, 63, 64, 65, 73, 83], $V4, { 8: 11 }), { 15: 12, 84: [1, 13] }, { 84: [2, 79] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, { 1: [2, 4], 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 16: 51, 17: [1, 52], 86: $Vv }, o([17, 86], [2, 80]), o($Vw, [2, 6]), { 6: 41, 10: 54, 13: 18, 14: 6, 19: $V7, 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, o($Vw, [2, 8]), o($Vw, [2, 9]), o($Vw, [2, 17]), { 20: [1, 55] }, { 5: [1, 56] }, { 5: [1, 59], 24: [1, 57], 25: [1, 58] }, { 27: 60, 73: $Vu }, { 27: 61, 73: $Vu }, { 5: [1, 62] }, { 5: [1, 63] }, { 5: [1, 64] }, { 5: [1, 65] }, { 5: [1, 66] }, o($Vw, [2, 31]), o($Vw, [2, 32]), { 37: [1, 67] }, { 39: [1, 68] }, o($Vw, [2, 35]), { 20: [1, 69] }, { 20: [1, 70] }, { 20: [1, 71] }, { 20: [1, 72] }, { 20: [1, 73] }, { 20: [1, 74] }, { 20: [1, 75] }, o($Vw, [2, 43]), { 27: 76, 73: $Vu }, { 27: 77, 73: $Vu }, { 70: 78, 74: [1, 79], 75: [1, 80], 76: [1, 81], 77: [1, 82], 78: [1, 83], 79: [1, 84], 80: [1, 85], 81: [1, 86] }, { 58: 87, 60: [1, 88], 68: [1, 89], 69: [1, 90] }, { 27: 91, 73: $Vu }, { 27: 92, 73: $Vu }, { 27: 93, 73: $Vu }, { 27: 94, 73: $Vu }, o([5, 55, 67, 74, 75, 76, 77, 78, 79, 80, 81, 82], [2, 69]), { 5: [1, 95] }, { 18: 96, 85: [1, 97] }, { 5: [2, 82] }, o($Vw, [2, 7]), o($Vx, [2, 10], { 11: 98 }), o($Vw, [2, 19]), { 5: [1, 100], 24: [1, 99] }, { 5: [1, 101] }, o($Vw, [2, 23]), { 5: [1, 102] }, { 5: [1, 103] }, o($Vw, [2, 26]), o($Vw, [2, 27]), o($Vw, [2, 28]), o($Vw, [2, 29]), o($Vw, [2, 30]), o($Vw, [2, 33]), o($Vw, [2, 34]), o($Vy, $V4, { 8: 104 }), o($Vy, $V4, { 8: 105 }), o($Vy, $V4, { 8: 106 }), o($Vz, $V4, { 45: 107, 8: 108 }), o($VA, $V4, { 47: 109, 8: 110 }), o($VB, $V4, { 49: 111, 8: 112 }), o($Vy, $V4, { 8: 113 }), { 5: [1, 115], 55: [1, 114] }, { 5: [1, 117], 55: [1, 116] }, { 27: 120, 71: [1, 118], 72: [1, 119], 73: $Vu }, o($VC, [2, 70]), o($VC, [2, 71]), o($VC, [2, 72]), o($VC, [2, 73]), o($VC, [2, 74]), o($VC, [2, 75]), o($VC, [2, 76]), o($VC, [2, 77]), { 27: 121, 73: $Vu }, { 27: 123, 61: 122, 73: $Vu }, { 73: [2, 64] }, { 73: [2, 65] }, { 59: 124, 82: $VD }, { 59: 126, 82: $VD }, { 59: 127, 82: $VD }, { 59: 128, 82: $VD }, o($VE, [2, 15]), { 16: 129, 86: $Vv }, { 86: [2, 81] }, { 4: [1, 132], 5: [1, 134], 12: 131, 13: 133, 21: [1, 130], 54: $Vn, 56: $Vo }, { 5: [1, 135] }, o($Vw, [2, 21]), o($Vw, [2, 22]), o($Vw, [2, 24]), o($Vw, [2, 25]), { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [1, 136], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [1, 137], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [1, 138], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 21: [1, 139] }, { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [2, 48], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 53: [1, 140], 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 21: [1, 141] }, { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [2, 46], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 52: [1, 142], 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 21: [1, 143] }, { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [2, 44], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 51: [1, 144], 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 4: $V5, 5: $V6, 6: 41, 9: 14, 10: 16, 13: 18, 14: 6, 19: $V7, 21: [1, 145], 22: 20, 23: $V8, 26: $V9, 27: 44, 28: $Va, 29: 24, 30: 25, 31: 26, 32: 27, 33: 28, 34: $Vb, 35: $Vc, 36: $Vd, 38: $Ve, 40: $Vf, 41: $Vg, 42: $Vh, 43: $Vi, 44: $Vj, 46: $Vk, 48: $Vl, 50: $Vm, 54: $Vn, 56: $Vo, 57: $Vp, 62: $Vq, 63: $Vr, 64: $Vs, 65: $Vt, 73: $Vu, 83: $V3 }, { 20: [1, 146] }, o($Vw, [2, 51]), { 20: [1, 147] }, o($Vw, [2, 53]), { 27: 148, 73: $Vu }, { 27: 149, 73: $Vu }, { 59: 150, 82: $VD }, { 59: 151, 82: $VD }, { 59: 152, 82: $VD }, { 67: [1, 153], 82: [2, 63] }, { 5: [2, 56] }, { 5: [2, 78] }, { 5: [2, 57] }, { 5: [2, 58] }, { 5: [2, 59] }, { 5: [1, 154] }, o($Vw, [2, 18]), o($Vx, [2, 11]), { 13: 155, 54: $Vn, 56: $Vo }, o($Vx, [2, 13]), o($Vx, [2, 14]), o($Vw, [2, 20]), o($Vw, [2, 36]), o($Vw, [2, 37]), o($Vw, [2, 38]), o($Vw, [2, 39]), { 20: [1, 156] }, o($Vw, [2, 40]), { 20: [1, 157] }, o($Vw, [2, 41]), { 20: [1, 158] }, o($Vw, [2, 42]), { 5: [1, 159] }, { 5: [1, 160] }, { 59: 161, 82: $VD }, { 59: 162, 82: $VD }, { 5: [2, 68] }, { 5: [2, 54] }, { 5: [2, 55] }, { 27: 163, 73: $Vu }, o($VE, [2, 16]), o($Vx, [2, 12]), o($Vz, $V4, { 8: 108, 45: 164 }), o($VA, $V4, { 8: 110, 47: 165 }), o($VB, $V4, { 8: 112, 49: 166 }), o($Vw, [2, 50]), o($Vw, [2, 52]), { 5: [2, 66] }, { 5: [2, 67] }, { 82: [2, 62] }, { 21: [2, 49] }, { 21: [2, 47] }, { 21: [2, 45] }],
-    defaultActions: { 7: [2, 79], 8: [2, 1], 9: [2, 2], 10: [2, 3], 53: [2, 82], 89: [2, 64], 90: [2, 65], 97: [2, 81], 124: [2, 56], 125: [2, 78], 126: [2, 57], 127: [2, 58], 128: [2, 59], 150: [2, 68], 151: [2, 54], 152: [2, 55], 161: [2, 66], 162: [2, 67], 163: [2, 62], 164: [2, 49], 165: [2, 47], 166: [2, 45] },
-    parseError: function parseError(str2, hash) {
-      if (hash.recoverable) {
-        this.trace(str2);
-      } else {
-        var error = new Error(str2);
-        error.hash = hash;
-        throw error;
-      }
-    },
-    parse: function parse2(input) {
-      var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;
-      var args = lstack.slice.call(arguments, 1);
-      var lexer2 = Object.create(this.lexer);
-      var sharedState = { yy: {} };
-      for (var k in this.yy) {
-        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
-          sharedState.yy[k] = this.yy[k];
-        }
-      }
-      lexer2.setInput(input, sharedState.yy);
-      sharedState.yy.lexer = lexer2;
-      sharedState.yy.parser = this;
-      if (typeof lexer2.yylloc == "undefined") {
-        lexer2.yylloc = {};
-      }
-      var yyloc = lexer2.yylloc;
-      lstack.push(yyloc);
-      var ranges = lexer2.options && lexer2.options.ranges;
-      if (typeof sharedState.yy.parseError === "function") {
-        this.parseError = sharedState.yy.parseError;
-      } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-      }
-      function lex2() {
-        var token;
-        token = tstack.pop() || lexer2.lex() || EOF;
-        if (typeof token !== "number") {
-          if (token instanceof Array) {
-            tstack = token;
-            token = tstack.pop();
-          }
-          token = self.symbols_[token] || token;
-        }
-        return token;
-      }
-      var symbol, state, action, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-          action = this.defaultActions[state];
-        } else {
-          if (symbol === null || typeof symbol == "undefined") {
-            symbol = lex2();
-          }
-          action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-          var errStr = "";
-          expected = [];
-          for (p in table[state]) {
-            if (this.terminals_[p] && p > TERROR) {
-              expected.push("'" + this.terminals_[p] + "'");
-            }
-          }
-          if (lexer2.showPosition) {
-            errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-          } else {
-            errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
-          }
-          this.parseError(errStr, {
-            text: lexer2.match,
-            token: this.terminals_[symbol] || symbol,
-            line: lexer2.yylineno,
-            loc: yyloc,
-            expected
-          });
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-          throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-          case 1:
-            stack.push(symbol);
-            vstack.push(lexer2.yytext);
-            lstack.push(lexer2.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            {
-              yyleng = lexer2.yyleng;
-              yytext = lexer2.yytext;
-              yylineno = lexer2.yylineno;
-              yyloc = lexer2.yylloc;
-            }
-            break;
-          case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-              first_line: lstack[lstack.length - (len || 1)].first_line,
-              last_line: lstack[lstack.length - 1].last_line,
-              first_column: lstack[lstack.length - (len || 1)].first_column,
-              last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-              yyval._$.range = [
-                lstack[lstack.length - (len || 1)].range[0],
-                lstack[lstack.length - 1].range[1]
-              ];
-            }
-            r = this.performAction.apply(yyval, [
-              yytext,
-              yyleng,
-              yylineno,
-              sharedState.yy,
-              action[1],
-              vstack,
-              lstack
-            ].concat(args));
-            if (typeof r !== "undefined") {
-              return r;
-            }
-            if (len) {
-              stack = stack.slice(0, -1 * len * 2);
-              vstack = vstack.slice(0, -1 * len);
-              lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-          case 3:
-            return true;
-        }
-      }
-      return true;
-    }
-  };
-  var lexer = function() {
-    var lexer2 = {
-      EOF: 1,
-      parseError: function parseError(str2, hash) {
-        if (this.yy.parser) {
-          this.yy.parser.parseError(str2, hash);
-        } else {
-          throw new Error(str2);
-        }
-      },
-      // resets the lexer, sets new input
-      setInput: function(input, yy) {
-        this.yy = yy || this.yy || {};
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = "";
-        this.conditionStack = ["INITIAL"];
-        this.yylloc = {
-          first_line: 1,
-          first_column: 0,
-          last_line: 1,
-          last_column: 0
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [0, 0];
-        }
-        this.offset = 0;
-        return this;
-      },
-      // consumes and returns one char from the input
-      input: function() {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno++;
-          this.yylloc.last_line++;
-        } else {
-          this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-          this.yylloc.range[1]++;
-        }
-        this._input = this._input.slice(1);
-        return ch;
-      },
-      // unshifts one char (or a string) into the input
-      unput: function(ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len);
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-        if (lines.length - 1) {
-          this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-        this.yylloc = {
-          first_line: this.yylloc.first_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.first_column,
-          last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-      },
-      // When called from action, caches matched text and appends it on next action
-      more: function() {
-        this._more = true;
-        return this;
-      },
-      // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-      reject: function() {
-        if (this.options.backtrack_lexer) {
-          this._backtrack = true;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-        return this;
-      },
-      // retain first n characters of the match
-      less: function(n) {
-        this.unput(this.match.slice(n));
-      },
-      // displays already matched input, i.e. for error messages
-      pastInput: function() {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
-      },
-      // displays upcoming input, i.e. for error messages
-      upcomingInput: function() {
-        var next = this.match;
-        if (next.length < 20) {
-          next += this._input.substr(0, 20 - next.length);
-        }
-        return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
-      },
-      // displays the character position where the lexing error occurred, i.e. for error messages
-      showPosition: function() {
-        var pre = this.pastInput();
-        var c2 = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c2 + "^";
-      },
-      // test the lexed token: return FALSE when not a match, otherwise return token
-      test_match: function(match, indexed_rule) {
-        var token, lines, backup;
-        if (this.options.backtrack_lexer) {
-          backup = {
-            yylineno: this.yylineno,
-            yylloc: {
-              first_line: this.yylloc.first_line,
-              last_line: this.last_line,
-              first_column: this.yylloc.first_column,
-              last_column: this.yylloc.last_column
-            },
-            yytext: this.yytext,
-            match: this.match,
-            matches: this.matches,
-            matched: this.matched,
-            yyleng: this.yyleng,
-            offset: this.offset,
-            _more: this._more,
-            _input: this._input,
-            yy: this.yy,
-            conditionStack: this.conditionStack.slice(0),
-            done: this.done
-          };
-          if (this.options.ranges) {
-            backup.yylloc.range = this.yylloc.range.slice(0);
-          }
-        }
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno += lines.length;
-        }
-        this.yylloc = {
-          first_line: this.yylloc.last_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.last_column,
-          last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-          this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-          this.done = false;
-        }
-        if (token) {
-          return token;
-        } else if (this._backtrack) {
-          for (var k in backup) {
-            this[k] = backup[k];
-          }
-          return false;
-        }
-        return false;
-      },
-      // return next match in input
-      next: function() {
-        if (this.done) {
-          return this.EOF;
-        }
-        if (!this._input) {
-          this.done = true;
-        }
-        var token, match, tempMatch, index;
-        if (!this._more) {
-          this.yytext = "";
-          this.match = "";
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-          tempMatch = this._input.match(this.rules[rules[i]]);
-          if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-            match = tempMatch;
-            index = i;
-            if (this.options.backtrack_lexer) {
-              token = this.test_match(tempMatch, rules[i]);
-              if (token !== false) {
-                return token;
-              } else if (this._backtrack) {
-                match = false;
-                continue;
-              } else {
-                return false;
-              }
-            } else if (!this.options.flex) {
-              break;
-            }
-          }
-        }
-        if (match) {
-          token = this.test_match(match, rules[index]);
-          if (token !== false) {
-            return token;
-          }
-          return false;
-        }
-        if (this._input === "") {
-          return this.EOF;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-      },
-      // return next match that has a token
-      lex: function lex2() {
-        var r = this.next();
-        if (r) {
-          return r;
-        } else {
-          return this.lex();
-        }
-      },
-      // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-      begin: function begin(condition) {
-        this.conditionStack.push(condition);
-      },
-      // pop the previously active lexer condition state off the condition stack
-      popState: function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-          return this.conditionStack.pop();
-        } else {
-          return this.conditionStack[0];
-        }
-      },
-      // produce the lexer rule set which is active for the currently active lexer condition state
-      _currentRules: function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-          return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-          return this.conditions["INITIAL"].rules;
-        }
-      },
-      // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-      topState: function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-          return this.conditionStack[n];
-        } else {
-          return "INITIAL";
-        }
-      },
-      // alias for begin(condition)
-      pushState: function pushState(condition) {
-        this.begin(condition);
-      },
-      // return the number of states currently on the stack
-      stateStackSize: function stateStackSize() {
-        return this.conditionStack.length;
-      },
-      options: { "case-insensitive": true },
-      performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
-        switch ($avoiding_name_collisions) {
-          case 0:
-            this.begin("open_directive");
-            return 83;
-          case 1:
-            this.begin("type_directive");
-            return 84;
-          case 2:
-            this.popState();
-            this.begin("arg_directive");
-            return 17;
-          case 3:
-            this.popState();
-            this.popState();
-            return 86;
-          case 4:
-            return 85;
-          case 5:
-            return 5;
-          case 6:
-            break;
-          case 7:
-            break;
-          case 8:
-            break;
-          case 9:
-            break;
-          case 10:
-            break;
-          case 11:
-            return 24;
-          case 12:
-            this.begin("LINE");
-            return 19;
-          case 13:
-            this.begin("ID");
-            return 54;
-          case 14:
-            this.begin("ID");
-            return 56;
-          case 15:
-            yy_.yytext = yy_.yytext.trim();
-            this.begin("ALIAS");
-            return 73;
-          case 16:
-            this.popState();
-            this.popState();
-            this.begin("LINE");
-            return 55;
-          case 17:
-            this.popState();
-            this.popState();
-            return 5;
-          case 18:
-            this.begin("LINE");
-            return 41;
-          case 19:
-            this.begin("LINE");
-            return 42;
-          case 20:
-            this.begin("LINE");
-            return 43;
-          case 21:
-            this.begin("LINE");
-            return 44;
-          case 22:
-            this.begin("LINE");
-            return 53;
-          case 23:
-            this.begin("LINE");
-            return 46;
-          case 24:
-            this.begin("LINE");
-            return 52;
-          case 25:
-            this.begin("LINE");
-            return 48;
-          case 26:
-            this.begin("LINE");
-            return 51;
-          case 27:
-            this.begin("LINE");
-            return 50;
-          case 28:
-            this.popState();
-            return 20;
-          case 29:
-            return 21;
-          case 30:
-            return 68;
-          case 31:
-            return 69;
-          case 32:
-            return 62;
-          case 33:
-            return 63;
-          case 34:
-            return 64;
-          case 35:
-            return 65;
-          case 36:
-            return 60;
-          case 37:
-            return 57;
-          case 38:
-            this.begin("ID");
-            return 26;
-          case 39:
-            this.begin("ID");
-            return 28;
-          case 40:
-            return 34;
-          case 41:
-            return 35;
-          case 42:
-            this.begin("acc_title");
-            return 36;
-          case 43:
-            this.popState();
-            return "acc_title_value";
-          case 44:
-            this.begin("acc_descr");
-            return 38;
-          case 45:
-            this.popState();
-            return "acc_descr_value";
-          case 46:
-            this.begin("acc_descr_multiline");
-            break;
-          case 47:
-            this.popState();
-            break;
-          case 48:
-            return "acc_descr_multiline_value";
-          case 49:
-            return 7;
-          case 50:
-            return 23;
-          case 51:
-            return 25;
-          case 52:
-            return 67;
-          case 53:
-            return 5;
-          case 54:
-            yy_.yytext = yy_.yytext.trim();
-            return 73;
-          case 55:
-            return 76;
-          case 56:
-            return 77;
-          case 57:
-            return 74;
-          case 58:
-            return 75;
-          case 59:
-            return 78;
-          case 60:
-            return 79;
-          case 61:
-            return 80;
-          case 62:
-            return 81;
-          case 63:
-            return 82;
-          case 64:
-            return 71;
-          case 65:
-            return 72;
-          case 66:
-            return 5;
-          case 67:
-            return "INVALID";
-        }
-      },
-      rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[0-9]+(?=[ \n]+))/i, /^(?:box\b)/i, /^(?:participant\b)/i, /^(?:actor\b)/i, /^(?:[^\->:\n,;]+?([\-]*[^\->:\n,;]+?)*?(?=((?!\n)\s)+as(?!\n)\s|[#\n;]|$))/i, /^(?:as\b)/i, /^(?:(?:))/i, /^(?:loop\b)/i, /^(?:rect\b)/i, /^(?:opt\b)/i, /^(?:alt\b)/i, /^(?:else\b)/i, /^(?:par\b)/i, /^(?:and\b)/i, /^(?:critical\b)/i, /^(?:option\b)/i, /^(?:break\b)/i, /^(?:(?:[:]?(?:no)?wrap)?[^#\n;]*)/i, /^(?:end\b)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:links\b)/i, /^(?:link\b)/i, /^(?:properties\b)/i, /^(?:details\b)/i, /^(?:over\b)/i, /^(?:note\b)/i, /^(?:activate\b)/i, /^(?:deactivate\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:title:\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:sequenceDiagram\b)/i, /^(?:autonumber\b)/i, /^(?:off\b)/i, /^(?:,)/i, /^(?:;)/i, /^(?:[^\+\->:\n,;]+((?!(-x|--x|-\)|--\)))[\-]*[^\+\->:\n,;]+)*)/i, /^(?:->>)/i, /^(?:-->>)/i, /^(?:->)/i, /^(?:-->)/i, /^(?:-[x])/i, /^(?:--[x])/i, /^(?:-[\)])/i, /^(?:--[\)])/i, /^(?::(?:(?:no)?wrap)?[^#\n;]+)/i, /^(?:\+)/i, /^(?:-)/i, /^(?:$)/i, /^(?:.)/i],
-      conditions: { "acc_descr_multiline": { "rules": [47, 48], "inclusive": false }, "acc_descr": { "rules": [45], "inclusive": false }, "acc_title": { "rules": [43], "inclusive": false }, "open_directive": { "rules": [1, 8], "inclusive": false }, "type_directive": { "rules": [2, 3, 8], "inclusive": false }, "arg_directive": { "rules": [3, 4, 8], "inclusive": false }, "ID": { "rules": [7, 8, 15], "inclusive": false }, "ALIAS": { "rules": [7, 8, 16, 17], "inclusive": false }, "LINE": { "rules": [7, 8, 28], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 8, 9, 10, 11, 12, 13, 14, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 44, 46, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67], "inclusive": true } }
-    };
-    return lexer2;
-  }();
-  parser2.lexer = lexer;
-  function Parser() {
-    this.yy = {};
-  }
-  Parser.prototype = parser2;
-  parser2.Parser = Parser;
-  return new Parser();
-}();
-parser$2.parser = parser$2;
-const sequenceParser = parser$2;
-const sequenceDetector = (txt) => {
-  return txt.match(/^\s*sequenceDiagram/) !== null;
-};
-let prevActor = void 0;
-let actors$1 = {};
-let boxes = [];
-let messages = [];
-let sequenceNumbersEnabled = false;
-let wrapEnabled;
-let currentBox = void 0;
-const parseDirective$2 = function(statement, context, type2) {
-  mermaidAPI.parseDirective(this, statement, context, type2);
-};
-const addBox = function(data) {
-  boxes.push({
-    name: data.text,
-    wrap: data.wrap === void 0 && autoWrap() || !!data.wrap,
-    fill: data.color,
-    actorKeys: []
-  });
-  currentBox = boxes.slice(-1)[0];
-};
-const addActor = function(id2, name, description2, type2) {
-  let assignedBox = currentBox;
-  const old = actors$1[id2];
-  if (old) {
-    if (currentBox && old.box && currentBox !== old.box) {
-      throw new Error(
-        "A same participant should only be defined in one Box: " + old.name + " can't be in '" + old.box.name + "' and in '" + currentBox.name + "' at the same time."
-      );
-    }
-    assignedBox = old.box ? old.box : currentBox;
-    old.box = assignedBox;
-    if (old && name === old.name && description2 == null) {
-      return;
-    }
-  }
-  if (description2 == null || description2.text == null) {
-    description2 = { text: name, wrap: null, type: type2 };
-  }
-  if (type2 == null || description2.text == null) {
-    description2 = { text: name, wrap: null, type: type2 };
-  }
-  actors$1[id2] = {
-    box: assignedBox,
-    name,
-    description: description2.text,
-    wrap: description2.wrap === void 0 && autoWrap() || !!description2.wrap,
-    prevActor,
-    links: {},
-    properties: {},
-    actorCnt: null,
-    rectData: null,
-    type: type2 || "participant"
-  };
-  if (prevActor && actors$1[prevActor]) {
-    actors$1[prevActor].nextActor = id2;
-  }
-  if (currentBox) {
-    currentBox.actorKeys.push(id2);
-  }
-  prevActor = id2;
-};
-const activationCount = (part) => {
-  let i;
-  let count = 0;
-  for (i = 0; i < messages.length; i++) {
-    if (messages[i].type === LINETYPE.ACTIVE_START && messages[i].from.actor === part) {
-      count++;
-    }
-    if (messages[i].type === LINETYPE.ACTIVE_END && messages[i].from.actor === part) {
-      count--;
-    }
-  }
-  return count;
-};
-const addMessage = function(idFrom, idTo, message2, answer) {
-  messages.push({
-    from: idFrom,
-    to: idTo,
-    message: message2.text,
-    wrap: message2.wrap === void 0 && autoWrap() || !!message2.wrap,
-    answer
-  });
-};
-const addSignal = function(idFrom, idTo, message2 = { text: void 0, wrap: void 0 }, messageType) {
-  if (messageType === LINETYPE.ACTIVE_END) {
-    const cnt2 = activationCount(idFrom.actor);
-    if (cnt2 < 1) {
-      let error = new Error("Trying to inactivate an inactive participant (" + idFrom.actor + ")");
-      error.hash = {
-        text: "->>-",
-        token: "->>-",
-        line: "1",
-        loc: { first_line: 1, last_line: 1, first_column: 1, last_column: 1 },
-        expected: ["'ACTIVE_PARTICIPANT'"]
-      };
-      throw error;
-    }
-  }
-  messages.push({
-    from: idFrom,
-    to: idTo,
-    message: message2.text,
-    wrap: message2.wrap === void 0 && autoWrap() || !!message2.wrap,
-    type: messageType
-  });
-  return true;
-};
-const hasAtLeastOneBox = function() {
-  return boxes.length > 0;
-};
-const hasAtLeastOneBoxWithTitle = function() {
-  return boxes.some((b) => b.name);
-};
-const getMessages = function() {
-  return messages;
-};
-const getBoxes = function() {
-  return boxes;
-};
-const getActors$1 = function() {
-  return actors$1;
-};
-const getActor = function(id2) {
-  return actors$1[id2];
-};
-const getActorKeys = function() {
-  return Object.keys(actors$1);
-};
-const enableSequenceNumbers = function() {
-  sequenceNumbersEnabled = true;
-};
-const disableSequenceNumbers = function() {
-  sequenceNumbersEnabled = false;
-};
-const showSequenceNumbers = () => sequenceNumbersEnabled;
-const setWrap = function(wrapSetting) {
-  wrapEnabled = wrapSetting;
-};
-const autoWrap = () => {
-  if (wrapEnabled !== void 0) {
-    return wrapEnabled;
-  }
-  return getConfig$1().sequence.wrap;
-};
-const clear$2 = function() {
-  actors$1 = {};
-  boxes = [];
-  messages = [];
-  sequenceNumbersEnabled = false;
-  clear$g();
-};
-const parseMessage = function(str2) {
-  const _str = str2.trim();
-  const message2 = {
-    text: _str.replace(/^:?(?:no)?wrap:/, "").trim(),
-    wrap: _str.match(/^:?wrap:/) !== null ? true : _str.match(/^:?nowrap:/) !== null ? false : void 0
-  };
-  log$1.debug("parseMessage:", message2);
-  return message2;
-};
-const parseBoxData = function(str2) {
-  const match = str2.match(/^((?:rgba?|hsla?)\s*\(.*\)|\w*)(.*)$/);
-  let color = match != null && match[1] ? match[1].trim() : "transparent";
-  let title2 = match != null && match[2] ? match[2].trim() : void 0;
-  if (window && window.CSS) {
-    if (!window.CSS.supports("color", color)) {
-      color = "transparent";
-      title2 = str2.trim();
-    }
-  } else {
-    const style = new Option().style;
-    style.color = color;
-    if (style.color !== color) {
-      color = "transparent";
-      title2 = str2.trim();
-    }
-  }
-  const boxData = {
-    color,
-    text: title2 !== void 0 ? sanitizeText$5(title2.replace(/^:?(?:no)?wrap:/, ""), getConfig$1()) : void 0,
-    wrap: title2 !== void 0 ? title2.match(/^:?wrap:/) !== null ? true : title2.match(/^:?nowrap:/) !== null ? false : void 0 : void 0
-  };
-  return boxData;
-};
-const LINETYPE = {
-  SOLID: 0,
-  DOTTED: 1,
-  NOTE: 2,
-  SOLID_CROSS: 3,
-  DOTTED_CROSS: 4,
-  SOLID_OPEN: 5,
-  DOTTED_OPEN: 6,
-  LOOP_START: 10,
-  LOOP_END: 11,
-  ALT_START: 12,
-  ALT_ELSE: 13,
-  ALT_END: 14,
-  OPT_START: 15,
-  OPT_END: 16,
-  ACTIVE_START: 17,
-  ACTIVE_END: 18,
-  PAR_START: 19,
-  PAR_AND: 20,
-  PAR_END: 21,
-  RECT_START: 22,
-  RECT_END: 23,
-  SOLID_POINT: 24,
-  DOTTED_POINT: 25,
-  AUTONUMBER: 26,
-  CRITICAL_START: 27,
-  CRITICAL_OPTION: 28,
-  CRITICAL_END: 29,
-  BREAK_START: 30,
-  BREAK_END: 31
-};
-const ARROWTYPE = {
-  FILLED: 0,
-  OPEN: 1
-};
-const PLACEMENT = {
-  LEFTOF: 0,
-  RIGHTOF: 1,
-  OVER: 2
-};
-const addNote = function(actor, placement, message2) {
-  ({
-    actor,
-    placement,
-    message: message2.text,
-    wrap: message2.wrap === void 0 && autoWrap() || !!message2.wrap
-  });
-  const actors2 = [].concat(actor, actor);
-  messages.push({
-    from: actors2[0],
-    to: actors2[1],
-    message: message2.text,
-    wrap: message2.wrap === void 0 && autoWrap() || !!message2.wrap,
-    type: LINETYPE.NOTE,
-    placement
-  });
-};
-const addLinks = function(actorId, text) {
-  const actor = getActor(actorId);
-  try {
-    let sanitizedText = sanitizeText$5(text.text, getConfig$1());
-    sanitizedText = sanitizedText.replace(/&/g, "&");
-    sanitizedText = sanitizedText.replace(/=/g, "=");
-    const links2 = JSON.parse(sanitizedText);
-    insertLinks(actor, links2);
-  } catch (e) {
-    log$1.error("error while parsing actor link text", e);
-  }
-};
-const addALink = function(actorId, text) {
-  const actor = getActor(actorId);
-  try {
-    const links2 = {};
-    let sanitizedText = sanitizeText$5(text.text, getConfig$1());
-    var sep = sanitizedText.indexOf("@");
-    sanitizedText = sanitizedText.replace(/&/g, "&");
-    sanitizedText = sanitizedText.replace(/=/g, "=");
-    var label = sanitizedText.slice(0, sep - 1).trim();
-    var link = sanitizedText.slice(sep + 1).trim();
-    links2[label] = link;
-    insertLinks(actor, links2);
-  } catch (e) {
-    log$1.error("error while parsing actor link text", e);
-  }
-};
-function insertLinks(actor, links2) {
-  if (actor.links == null) {
-    actor.links = links2;
-  } else {
-    for (let key in links2) {
-      actor.links[key] = links2[key];
-    }
-  }
-}
-const addProperties = function(actorId, text) {
-  const actor = getActor(actorId);
-  try {
-    let sanitizedText = sanitizeText$5(text.text, getConfig$1());
-    const properties = JSON.parse(sanitizedText);
-    insertProperties(actor, properties);
-  } catch (e) {
-    log$1.error("error while parsing actor properties text", e);
-  }
-};
-function insertProperties(actor, properties) {
-  if (actor.properties == null) {
-    actor.properties = properties;
-  } else {
-    for (let key in properties) {
-      actor.properties[key] = properties[key];
-    }
-  }
-}
-function boxEnd() {
-  currentBox = void 0;
-}
-const addDetails = function(actorId, text) {
-  const actor = getActor(actorId);
-  const elem = document.getElementById(text.text);
-  try {
-    const text2 = elem.innerHTML;
-    const details = JSON.parse(text2);
-    if (details["properties"]) {
-      insertProperties(actor, details["properties"]);
-    }
-    if (details["links"]) {
-      insertLinks(actor, details["links"]);
-    }
-  } catch (e) {
-    log$1.error("error while parsing actor details text", e);
-  }
-};
-const getActorProperty = function(actor, key) {
-  if (actor !== void 0 && actor.properties !== void 0) {
-    return actor.properties[key];
-  }
-  return void 0;
-};
-const apply = function(param) {
-  if (Array.isArray(param)) {
-    param.forEach(function(item) {
-      apply(item);
-    });
-  } else {
-    switch (param.type) {
-      case "sequenceIndex":
-        messages.push({
-          from: void 0,
-          to: void 0,
-          message: {
-            start: param.sequenceIndex,
-            step: param.sequenceIndexStep,
-            visible: param.sequenceVisible
-          },
-          wrap: false,
-          type: param.signalType
-        });
-        break;
-      case "addParticipant":
-        addActor(param.actor, param.actor, param.description, "participant");
-        break;
-      case "addActor":
-        addActor(param.actor, param.actor, param.description, "actor");
-        break;
-      case "activeStart":
-        addSignal(param.actor, void 0, void 0, param.signalType);
-        break;
-      case "activeEnd":
-        addSignal(param.actor, void 0, void 0, param.signalType);
-        break;
-      case "addNote":
-        addNote(param.actor, param.placement, param.text);
-        break;
-      case "addLinks":
-        addLinks(param.actor, param.text);
-        break;
-      case "addALink":
-        addALink(param.actor, param.text);
-        break;
-      case "addProperties":
-        addProperties(param.actor, param.text);
-        break;
-      case "addDetails":
-        addDetails(param.actor, param.text);
-        break;
-      case "addMessage":
-        addSignal(param.from, param.to, param.msg, param.signalType);
-        break;
-      case "boxStart":
-        addBox(param.boxData);
-        break;
-      case "boxEnd":
-        boxEnd();
-        break;
-      case "loopStart":
-        addSignal(void 0, void 0, param.loopText, param.signalType);
-        break;
-      case "loopEnd":
-        addSignal(void 0, void 0, void 0, param.signalType);
-        break;
-      case "rectStart":
-        addSignal(void 0, void 0, param.color, param.signalType);
-        break;
-      case "rectEnd":
-        addSignal(void 0, void 0, void 0, param.signalType);
-        break;
-      case "optStart":
-        addSignal(void 0, void 0, param.optText, param.signalType);
-        break;
-      case "optEnd":
-        addSignal(void 0, void 0, void 0, param.signalType);
-        break;
-      case "altStart":
-        addSignal(void 0, void 0, param.altText, param.signalType);
-        break;
-      case "else":
-        addSignal(void 0, void 0, param.altText, param.signalType);
-        break;
-      case "altEnd":
-        addSignal(void 0, void 0, void 0, param.signalType);
-        break;
-      case "setAccTitle":
-        setAccTitle(param.text);
-        break;
-      case "parStart":
-        addSignal(void 0, void 0, param.parText, param.signalType);
-        break;
-      case "and":
-        addSignal(void 0, void 0, param.parText, param.signalType);
-        break;
-      case "parEnd":
-        addSignal(void 0, void 0, void 0, param.signalType);
-        break;
-      case "criticalStart":
-        addSignal(void 0, void 0, param.criticalText, param.signalType);
-        break;
-      case "option":
-        addSignal(void 0, void 0, param.optionText, param.signalType);
-        break;
-      case "criticalEnd":
-        addSignal(void 0, void 0, void 0, param.signalType);
-        break;
-      case "breakStart":
-        addSignal(void 0, void 0, param.breakText, param.signalType);
-        break;
-      case "breakEnd":
-        addSignal(void 0, void 0, void 0, param.signalType);
-        break;
-    }
-  }
-};
-const sequenceDb = {
-  addActor,
-  addMessage,
-  addSignal,
-  addLinks,
-  addDetails,
-  addProperties,
-  autoWrap,
-  setWrap,
-  enableSequenceNumbers,
-  disableSequenceNumbers,
-  showSequenceNumbers,
-  getMessages,
-  getActors: getActors$1,
-  getActor,
-  getActorKeys,
-  getActorProperty,
-  getAccTitle,
-  getBoxes,
-  getDiagramTitle,
-  setDiagramTitle,
-  parseDirective: parseDirective$2,
-  getConfig: () => getConfig$1().sequence,
-  clear: clear$2,
-  parseMessage,
-  parseBoxData,
-  LINETYPE,
-  ARROWTYPE,
-  PLACEMENT,
-  addNote,
-  setAccTitle,
-  apply,
-  setAccDescription,
-  getAccDescription,
-  hasAtLeastOneBox,
-  hasAtLeastOneBoxWithTitle
-};
-let interactionFunctions = [];
-const addFunction = (func) => {
-  interactionFunctions.push(func);
-};
-const attachFunctions = () => {
-  interactionFunctions.forEach((f) => {
-    f();
-  });
-  interactionFunctions = [];
-};
-const drawRect$1 = function(elem, rectData) {
-  const rectElem = elem.append("rect");
-  rectElem.attr("x", rectData.x);
-  rectElem.attr("y", rectData.y);
-  rectElem.attr("fill", rectData.fill);
-  rectElem.attr("stroke", rectData.stroke);
-  rectElem.attr("width", rectData.width);
-  rectElem.attr("height", rectData.height);
-  rectElem.attr("rx", rectData.rx);
-  rectElem.attr("ry", rectData.ry);
-  if (rectData.class !== void 0) {
-    rectElem.attr("class", rectData.class);
-  }
-  return rectElem;
-};
-const addPopupInteraction = (id2, actorCnt2) => {
-  addFunction(() => {
-    const arr = document.querySelectorAll(id2);
-    if (arr.length === 0) {
-      return;
-    }
-    arr[0].addEventListener("mouseover", function() {
-      popupMenuUpFunc("actor" + actorCnt2 + "_popup");
-    });
-    arr[0].addEventListener("mouseout", function() {
-      popupMenuDownFunc("actor" + actorCnt2 + "_popup");
-    });
-  });
-};
-const drawPopup = function(elem, actor, minMenuWidth, textAttrs, forceMenus) {
-  if (actor.links === void 0 || actor.links === null || Object.keys(actor.links).length === 0) {
-    return { height: 0, width: 0 };
-  }
-  const links2 = actor.links;
-  const actorCnt2 = actor.actorCnt;
-  const rectData = actor.rectData;
-  var displayValue = "none";
-  if (forceMenus) {
-    displayValue = "block !important";
-  }
-  const g = elem.append("g");
-  g.attr("id", "actor" + actorCnt2 + "_popup");
-  g.attr("class", "actorPopupMenu");
-  g.attr("display", displayValue);
-  addPopupInteraction("#actor" + actorCnt2 + "_popup", actorCnt2);
-  var actorClass = "";
-  if (rectData.class !== void 0) {
-    actorClass = " " + rectData.class;
-  }
-  let menuWidth = rectData.width > minMenuWidth ? rectData.width : minMenuWidth;
-  const rectElem = g.append("rect");
-  rectElem.attr("class", "actorPopupMenuPanel" + actorClass);
-  rectElem.attr("x", rectData.x);
-  rectElem.attr("y", rectData.height);
-  rectElem.attr("fill", rectData.fill);
-  rectElem.attr("stroke", rectData.stroke);
-  rectElem.attr("width", menuWidth);
-  rectElem.attr("height", rectData.height);
-  rectElem.attr("rx", rectData.rx);
-  rectElem.attr("ry", rectData.ry);
-  if (links2 != null) {
-    var linkY = 20;
-    for (let key in links2) {
-      var linkElem = g.append("a");
-      var sanitizedLink = (0,dist/* sanitizeUrl */.N)(links2[key]);
-      linkElem.attr("xlink:href", sanitizedLink);
-      linkElem.attr("target", "_blank");
-      _drawMenuItemTextCandidateFunc(textAttrs)(
-        key,
-        linkElem,
-        rectData.x + 10,
-        rectData.height + linkY,
-        menuWidth,
-        20,
-        { class: "actor" },
-        textAttrs
-      );
-      linkY += 30;
-    }
-  }
-  rectElem.attr("height", linkY);
-  return { height: rectData.height + linkY, width: menuWidth };
-};
-const drawImage = function(elem, x, y, link) {
-  const imageElem = elem.append("image");
-  imageElem.attr("x", x);
-  imageElem.attr("y", y);
-  var sanitizedLink = (0,dist/* sanitizeUrl */.N)(link);
-  imageElem.attr("xlink:href", sanitizedLink);
-};
-const drawEmbeddedImage = function(elem, x, y, link) {
-  const imageElem = elem.append("use");
-  imageElem.attr("x", x);
-  imageElem.attr("y", y);
-  var sanitizedLink = (0,dist/* sanitizeUrl */.N)(link);
-  imageElem.attr("xlink:href", "#" + sanitizedLink);
-};
-const popupMenu = function(popid) {
-  return "var pu = document.getElementById('" + popid + "'); if (pu != null) { pu.style.display = 'block'; }";
-};
-const popdownMenu = function(popid) {
-  return "var pu = document.getElementById('" + popid + "'); if (pu != null) { pu.style.display = 'none'; }";
-};
-const popupMenuUpFunc = function(popupId) {
-  var pu = document.getElementById(popupId);
-  if (pu != null) {
-    pu.style.display = "block";
-  }
-};
-const popupMenuDownFunc = function(popupId) {
-  var pu = document.getElementById(popupId);
-  if (pu != null) {
-    pu.style.display = "none";
-  }
-};
-const drawText$1 = function(elem, textData) {
-  let prevTextHeight = 0, textHeight = 0;
-  const lines = textData.text.split(common$1.lineBreakRegex);
-  const [_textFontSize, _textFontSizePx] = parseFontSize(textData.fontSize);
-  let textElems = [];
-  let dy = 0;
-  let yfunc = () => textData.y;
-  if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) {
-    switch (textData.valign) {
-      case "top":
-      case "start":
-        yfunc = () => Math.round(textData.y + textData.textMargin);
-        break;
-      case "middle":
-      case "center":
-        yfunc = () => Math.round(textData.y + (prevTextHeight + textHeight + textData.textMargin) / 2);
-        break;
-      case "bottom":
-      case "end":
-        yfunc = () => Math.round(
-          textData.y + (prevTextHeight + textHeight + 2 * textData.textMargin) - textData.textMargin
-        );
-        break;
-    }
-  }
-  if (textData.anchor !== void 0 && textData.textMargin !== void 0 && textData.width !== void 0) {
-    switch (textData.anchor) {
-      case "left":
-      case "start":
-        textData.x = Math.round(textData.x + textData.textMargin);
-        textData.anchor = "start";
-        textData.dominantBaseline = "middle";
-        textData.alignmentBaseline = "middle";
-        break;
-      case "middle":
-      case "center":
-        textData.x = Math.round(textData.x + textData.width / 2);
-        textData.anchor = "middle";
-        textData.dominantBaseline = "middle";
-        textData.alignmentBaseline = "middle";
-        break;
-      case "right":
-      case "end":
-        textData.x = Math.round(textData.x + textData.width - textData.textMargin);
-        textData.anchor = "end";
-        textData.dominantBaseline = "middle";
-        textData.alignmentBaseline = "middle";
-        break;
-    }
-  }
-  for (let [i, line2] of lines.entries()) {
-    if (textData.textMargin !== void 0 && textData.textMargin === 0 && _textFontSize !== void 0) {
-      dy = i * _textFontSize;
-    }
-    const textElem = elem.append("text");
-    textElem.attr("x", textData.x);
-    textElem.attr("y", yfunc());
-    if (textData.anchor !== void 0) {
-      textElem.attr("text-anchor", textData.anchor).attr("dominant-baseline", textData.dominantBaseline).attr("alignment-baseline", textData.alignmentBaseline);
-    }
-    if (textData.fontFamily !== void 0) {
-      textElem.style("font-family", textData.fontFamily);
-    }
-    if (_textFontSizePx !== void 0) {
-      textElem.style("font-size", _textFontSizePx);
-    }
-    if (textData.fontWeight !== void 0) {
-      textElem.style("font-weight", textData.fontWeight);
-    }
-    if (textData.fill !== void 0) {
-      textElem.attr("fill", textData.fill);
-    }
-    if (textData.class !== void 0) {
-      textElem.attr("class", textData.class);
-    }
-    if (textData.dy !== void 0) {
-      textElem.attr("dy", textData.dy);
-    } else if (dy !== 0) {
-      textElem.attr("dy", dy);
-    }
-    if (textData.tspan) {
-      const span = textElem.append("tspan");
-      span.attr("x", textData.x);
-      if (textData.fill !== void 0) {
-        span.attr("fill", textData.fill);
-      }
-      span.text(line2);
-    } else {
-      textElem.text(line2);
-    }
-    if (textData.valign !== void 0 && textData.textMargin !== void 0 && textData.textMargin > 0) {
-      textHeight += (textElem._groups || textElem)[0][0].getBBox().height;
-      prevTextHeight = textHeight;
-    }
-    textElems.push(textElem);
-  }
-  return textElems;
-};
-const drawLabel$1 = function(elem, txtObject) {
-  function genPoints(x, y, width2, height2, cut) {
-    return x + "," + y + " " + (x + width2) + "," + y + " " + (x + width2) + "," + (y + height2 - cut) + " " + (x + width2 - cut * 1.2) + "," + (y + height2) + " " + x + "," + (y + height2);
-  }
-  const polygon = elem.append("polygon");
-  polygon.attr("points", genPoints(txtObject.x, txtObject.y, txtObject.width, txtObject.height, 7));
-  polygon.attr("class", "labelBox");
-  txtObject.y = txtObject.y + txtObject.height / 2;
-  drawText$1(elem, txtObject);
-  return polygon;
-};
-let actorCnt = -1;
-const fixLifeLineHeights = (diagram, bounds2) => {
-  if (!diagram.selectAll) {
-    return;
-  }
-  diagram.selectAll(".actor-line").attr("class", "200").attr("y2", bounds2 - 55);
-};
-const drawActorTypeParticipant = function(elem, actor, conf2, isFooter) {
-  const center = actor.x + actor.width / 2;
-  const centerY = actor.y + 5;
-  const boxpluslineGroup = elem.append("g");
-  var g = boxpluslineGroup;
-  if (!isFooter) {
-    actorCnt++;
-    g.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("stroke-width", "0.5px").attr("stroke", "#999");
-    g = boxpluslineGroup.append("g");
-    actor.actorCnt = actorCnt;
-    if (actor.links != null) {
-      g.attr("id", "root-" + actorCnt);
-      addPopupInteraction("#root-" + actorCnt, actorCnt);
-    }
-  }
-  const rect2 = getNoteRect$1();
-  var cssclass = "actor";
-  if (actor.properties != null && actor.properties["class"]) {
-    cssclass = actor.properties["class"];
-  } else {
-    rect2.fill = "#eaeaea";
-  }
-  rect2.x = actor.x;
-  rect2.y = actor.y;
-  rect2.width = actor.width;
-  rect2.height = actor.height;
-  rect2.class = cssclass;
-  rect2.rx = 3;
-  rect2.ry = 3;
-  const rectElem = drawRect$1(g, rect2);
-  actor.rectData = rect2;
-  if (actor.properties != null && actor.properties["icon"]) {
-    const iconSrc = actor.properties["icon"].trim();
-    if (iconSrc.charAt(0) === "@") {
-      drawEmbeddedImage(g, rect2.x + rect2.width - 20, rect2.y + 10, iconSrc.substr(1));
-    } else {
-      drawImage(g, rect2.x + rect2.width - 20, rect2.y + 10, iconSrc);
-    }
-  }
-  _drawTextCandidateFunc$1(conf2)(
-    actor.description,
-    g,
-    rect2.x,
-    rect2.y,
-    rect2.width,
-    rect2.height,
-    { class: "actor" },
-    conf2
-  );
-  let height2 = actor.height;
-  if (rectElem.node) {
-    const bounds2 = rectElem.node().getBBox();
-    actor.height = bounds2.height;
-    height2 = bounds2.height;
-  }
-  return height2;
-};
-const drawActorTypeActor = function(elem, actor, conf2, isFooter) {
-  const center = actor.x + actor.width / 2;
-  const centerY = actor.y + 80;
-  if (!isFooter) {
-    actorCnt++;
-    elem.append("line").attr("id", "actor" + actorCnt).attr("x1", center).attr("y1", centerY).attr("x2", center).attr("y2", 2e3).attr("class", "actor-line").attr("stroke-width", "0.5px").attr("stroke", "#999");
-  }
-  const actElem = elem.append("g");
-  actElem.attr("class", "actor-man");
-  const rect2 = getNoteRect$1();
-  rect2.x = actor.x;
-  rect2.y = actor.y;
-  rect2.fill = "#eaeaea";
-  rect2.width = actor.width;
-  rect2.height = actor.height;
-  rect2.class = "actor";
-  rect2.rx = 3;
-  rect2.ry = 3;
-  actElem.append("line").attr("id", "actor-man-torso" + actorCnt).attr("x1", center).attr("y1", actor.y + 25).attr("x2", center).attr("y2", actor.y + 45);
-  actElem.append("line").attr("id", "actor-man-arms" + actorCnt).attr("x1", center - 18).attr("y1", actor.y + 33).attr("x2", center + 18).attr("y2", actor.y + 33);
-  actElem.append("line").attr("x1", center - 18).attr("y1", actor.y + 60).attr("x2", center).attr("y2", actor.y + 45);
-  actElem.append("line").attr("x1", center).attr("y1", actor.y + 45).attr("x2", center + 16).attr("y2", actor.y + 60);
-  const circle2 = actElem.append("circle");
-  circle2.attr("cx", actor.x + actor.width / 2);
-  circle2.attr("cy", actor.y + 10);
-  circle2.attr("r", 15);
-  circle2.attr("width", actor.width);
-  circle2.attr("height", actor.height);
-  const bounds2 = actElem.node().getBBox();
-  actor.height = bounds2.height;
-  _drawTextCandidateFunc$1(conf2)(
-    actor.description,
-    actElem,
-    rect2.x,
-    rect2.y + 35,
-    rect2.width,
-    rect2.height,
-    { class: "actor" },
-    conf2
-  );
-  return actor.height;
-};
-const drawActor = function(elem, actor, conf2, isFooter) {
-  switch (actor.type) {
-    case "actor":
-      return drawActorTypeActor(elem, actor, conf2, isFooter);
-    case "participant":
-      return drawActorTypeParticipant(elem, actor, conf2, isFooter);
-  }
-};
-const drawBox = function(elem, box, conf2) {
-  const boxplustextGroup = elem.append("g");
-  const g = boxplustextGroup;
-  drawBackgroundRect$1(g, box);
-  if (box.name) {
-    _drawTextCandidateFunc$1(conf2)(
-      box.name,
-      g,
-      box.x,
-      box.y + (box.textMaxHeight || 0) / 2,
-      box.width,
-      0,
-      { class: "text" },
-      conf2
-    );
-  }
-  g.lower();
-};
-const anchorElement = function(elem) {
-  return elem.append("g");
-};
-const drawActivation = function(elem, bounds2, verticalPos, conf2, actorActivations2) {
-  const rect2 = getNoteRect$1();
-  const g = bounds2.anchored;
-  rect2.x = bounds2.startx;
-  rect2.y = bounds2.starty;
-  rect2.class = "activation" + actorActivations2 % 3;
-  rect2.width = bounds2.stopx - bounds2.startx;
-  rect2.height = verticalPos - bounds2.starty;
-  drawRect$1(g, rect2);
-};
-const drawLoop = function(elem, loopModel, labelText, conf2) {
-  const {
-    boxMargin,
-    boxTextMargin,
-    labelBoxHeight,
-    labelBoxWidth,
-    messageFontFamily: fontFamily,
-    messageFontSize: fontSize,
-    messageFontWeight: fontWeight
-  } = conf2;
-  const g = elem.append("g");
-  const drawLoopLine = function(startx, starty, stopx, stopy) {
-    return g.append("line").attr("x1", startx).attr("y1", starty).attr("x2", stopx).attr("y2", stopy).attr("class", "loopLine");
-  };
-  drawLoopLine(loopModel.startx, loopModel.starty, loopModel.stopx, loopModel.starty);
-  drawLoopLine(loopModel.stopx, loopModel.starty, loopModel.stopx, loopModel.stopy);
-  drawLoopLine(loopModel.startx, loopModel.stopy, loopModel.stopx, loopModel.stopy);
-  drawLoopLine(loopModel.startx, loopModel.starty, loopModel.startx, loopModel.stopy);
-  if (loopModel.sections !== void 0) {
-    loopModel.sections.forEach(function(item) {
-      drawLoopLine(loopModel.startx, item.y, loopModel.stopx, item.y).style(
-        "stroke-dasharray",
-        "3, 3"
-      );
-    });
-  }
-  let txt = getTextObj$1();
-  txt.text = labelText;
-  txt.x = loopModel.startx;
-  txt.y = loopModel.starty;
-  txt.fontFamily = fontFamily;
-  txt.fontSize = fontSize;
-  txt.fontWeight = fontWeight;
-  txt.anchor = "middle";
-  txt.valign = "middle";
-  txt.tspan = false;
-  txt.width = labelBoxWidth || 50;
-  txt.height = labelBoxHeight || 20;
-  txt.textMargin = boxTextMargin;
-  txt.class = "labelText";
-  drawLabel$1(g, txt);
-  txt = getTextObj$1();
-  txt.text = loopModel.title;
-  txt.x = loopModel.startx + labelBoxWidth / 2 + (loopModel.stopx - loopModel.startx) / 2;
-  txt.y = loopModel.starty + boxMargin + boxTextMargin;
-  txt.anchor = "middle";
-  txt.valign = "middle";
-  txt.textMargin = boxTextMargin;
-  txt.class = "loopText";
-  txt.fontFamily = fontFamily;
-  txt.fontSize = fontSize;
-  txt.fontWeight = fontWeight;
-  txt.wrap = true;
-  let textElem = drawText$1(g, txt);
-  if (loopModel.sectionTitles !== void 0) {
-    loopModel.sectionTitles.forEach(function(item, idx) {
-      if (item.message) {
-        txt.text = item.message;
-        txt.x = loopModel.startx + (loopModel.stopx - loopModel.startx) / 2;
-        txt.y = loopModel.sections[idx].y + boxMargin + boxTextMargin;
-        txt.class = "loopText";
-        txt.anchor = "middle";
-        txt.valign = "middle";
-        txt.tspan = false;
-        txt.fontFamily = fontFamily;
-        txt.fontSize = fontSize;
-        txt.fontWeight = fontWeight;
-        txt.wrap = loopModel.wrap;
-        textElem = drawText$1(g, txt);
-        let sectionHeight = Math.round(
-          textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr)
-        );
-        loopModel.sections[idx].height += sectionHeight - (boxMargin + boxTextMargin);
-      }
-    });
-  }
-  loopModel.height = Math.round(loopModel.stopy - loopModel.starty);
-  return g;
-};
-const drawBackgroundRect$1 = function(elem, bounds2) {
-  const rectElem = drawRect$1(elem, {
-    x: bounds2.startx,
-    y: bounds2.starty,
-    width: bounds2.stopx - bounds2.startx,
-    height: bounds2.stopy - bounds2.starty,
-    fill: bounds2.fill,
-    stroke: bounds2.stroke,
-    class: "rect"
-  });
-  rectElem.lower();
-};
-const insertDatabaseIcon = function(elem) {
-  elem.append("defs").append("symbol").attr("id", "database").attr("fill-rule", "evenodd").attr("clip-rule", "evenodd").append("path").attr("transform", "scale(.5)").attr(
-    "d",
-    "M12.258.001l.256.004.255.005.253.008.251.01.249.012.247.015.246.016.242.019.241.02.239.023.236.024.233.027.231.028.229.031.225.032.223.034.22.036.217.038.214.04.211.041.208.043.205.045.201.046.198.048.194.05.191.051.187.053.183.054.18.056.175.057.172.059.168.06.163.061.16.063.155.064.15.066.074.033.073.033.071.034.07.034.069.035.068.035.067.035.066.035.064.036.064.036.062.036.06.036.06.037.058.037.058.037.055.038.055.038.053.038.052.038.051.039.05.039.048.039.047.039.045.04.044.04.043.04.041.04.04.041.039.041.037.041.036.041.034.041.033.042.032.042.03.042.029.042.027.042.026.043.024.043.023.043.021.043.02.043.018.044.017.043.015.044.013.044.012.044.011.045.009.044.007.045.006.045.004.045.002.045.001.045v17l-.001.045-.002.045-.004.045-.006.045-.007.045-.009.044-.011.045-.012.044-.013.044-.015.044-.017.043-.018.044-.02.043-.021.043-.023.043-.024.043-.026.043-.027.042-.029.042-.03.042-.032.042-.033.042-.034.041-.036.041-.037.041-.039.041-.04.041-.041.04-.043.04-.044.04-.045.04-.047.039-.048.039-.05.039-.051.039-.052.038-.053.038-.055.038-.055.038-.058.037-.058.037-.06.037-.06.036-.062.036-.064.036-.064.036-.066.035-.067.035-.068.035-.069.035-.07.034-.071.034-.073.033-.074.033-.15.066-.155.064-.16.063-.163.061-.168.06-.172.059-.175.057-.18.056-.183.054-.187.053-.191.051-.194.05-.198.048-.201.046-.205.045-.208.043-.211.041-.214.04-.217.038-.22.036-.223.034-.225.032-.229.031-.231.028-.233.027-.236.024-.239.023-.241.02-.242.019-.246.016-.247.015-.249.012-.251.01-.253.008-.255.005-.256.004-.258.001-.258-.001-.256-.004-.255-.005-.253-.008-.251-.01-.249-.012-.247-.015-.245-.016-.243-.019-.241-.02-.238-.023-.236-.024-.234-.027-.231-.028-.228-.031-.226-.032-.223-.034-.22-.036-.217-.038-.214-.04-.211-.041-.208-.043-.204-.045-.201-.046-.198-.048-.195-.05-.19-.051-.187-.053-.184-.054-.179-.056-.176-.057-.172-.059-.167-.06-.164-.061-.159-.063-.155-.064-.151-.066-.074-.033-.072-.033-.072-.034-.07-.034-.069-.035-.068-.035-.067-.035-.066-.035-.064-.036-.063-.036-.062-.036-.061-.036-.06-.037-.058-.037-.057-.037-.056-.038-.055-.038-.053-.038-.052-.038-.051-.039-.049-.039-.049-.039-.046-.039-.046-.04-.044-.04-.043-.04-.041-.04-.04-.041-.039-.041-.037-.041-.036-.041-.034-.041-.033-.042-.032-.042-.03-.042-.029-.042-.027-.042-.026-.043-.024-.043-.023-.043-.021-.043-.02-.043-.018-.044-.017-.043-.015-.044-.013-.044-.012-.044-.011-.045-.009-.044-.007-.045-.006-.045-.004-.045-.002-.045-.001-.045v-17l.001-.045.002-.045.004-.045.006-.045.007-.045.009-.044.011-.045.012-.044.013-.044.015-.044.017-.043.018-.044.02-.043.021-.043.023-.043.024-.043.026-.043.027-.042.029-.042.03-.042.032-.042.033-.042.034-.041.036-.041.037-.041.039-.041.04-.041.041-.04.043-.04.044-.04.046-.04.046-.039.049-.039.049-.039.051-.039.052-.038.053-.038.055-.038.056-.038.057-.037.058-.037.06-.037.061-.036.062-.036.063-.036.064-.036.066-.035.067-.035.068-.035.069-.035.07-.034.072-.034.072-.033.074-.033.151-.066.155-.064.159-.063.164-.061.167-.06.172-.059.176-.057.179-.056.184-.054.187-.053.19-.051.195-.05.198-.048.201-.046.204-.045.208-.043.211-.041.214-.04.217-.038.22-.036.223-.034.226-.032.228-.031.231-.028.234-.027.236-.024.238-.023.241-.02.243-.019.245-.016.247-.015.249-.012.251-.01.253-.008.255-.005.256-.004.258-.001.258.001zm-9.258 20.499v.01l.001.021.003.021.004.022.005.021.006.022.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.023.018.024.019.024.021.024.022.025.023.024.024.025.052.049.056.05.061.051.066.051.07.051.075.051.079.052.084.052.088.052.092.052.097.052.102.051.105.052.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.048.144.049.147.047.152.047.155.047.16.045.163.045.167.043.171.043.176.041.178.041.183.039.187.039.19.037.194.035.197.035.202.033.204.031.209.03.212.029.216.027.219.025.222.024.226.021.23.02.233.018.236.016.24.015.243.012.246.01.249.008.253.005.256.004.259.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.021.224-.024.22-.026.216-.027.212-.028.21-.031.205-.031.202-.034.198-.034.194-.036.191-.037.187-.039.183-.04.179-.04.175-.042.172-.043.168-.044.163-.045.16-.046.155-.046.152-.047.148-.048.143-.049.139-.049.136-.05.131-.05.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.053.083-.051.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.05.023-.024.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.023.01-.022.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.127l-.077.055-.08.053-.083.054-.085.053-.087.052-.09.052-.093.051-.095.05-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.045-.118.044-.12.043-.122.042-.124.042-.126.041-.128.04-.13.04-.132.038-.134.038-.135.037-.138.037-.139.035-.142.035-.143.034-.144.033-.147.032-.148.031-.15.03-.151.03-.153.029-.154.027-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.01-.179.008-.179.008-.181.006-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.006-.179-.008-.179-.008-.178-.01-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.027-.153-.029-.151-.03-.15-.03-.148-.031-.146-.032-.145-.033-.143-.034-.141-.035-.14-.035-.137-.037-.136-.037-.134-.038-.132-.038-.13-.04-.128-.04-.126-.041-.124-.042-.122-.042-.12-.044-.117-.043-.116-.045-.113-.045-.112-.046-.109-.047-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.05-.093-.052-.09-.051-.087-.052-.085-.053-.083-.054-.08-.054-.077-.054v4.127zm0-5.654v.011l.001.021.003.021.004.021.005.022.006.022.007.022.009.022.01.022.011.023.012.023.013.023.015.024.016.023.017.024.018.024.019.024.021.024.022.024.023.025.024.024.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.052.11.051.114.051.119.052.123.05.127.051.131.05.135.049.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.044.171.042.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.022.23.02.233.018.236.016.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.012.241-.015.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.048.139-.05.136-.049.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.051.051-.049.023-.025.023-.024.021-.025.02-.024.019-.024.018-.024.017-.024.015-.023.014-.023.013-.024.012-.022.01-.023.01-.023.008-.022.006-.022.006-.022.004-.021.004-.022.001-.021.001-.021v-4.139l-.077.054-.08.054-.083.054-.085.052-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.049-.105.048-.106.047-.109.047-.111.046-.114.045-.115.044-.118.044-.12.044-.122.042-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.035-.143.033-.144.033-.147.033-.148.031-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.025-.161.024-.162.023-.163.022-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.011-.178.009-.179.009-.179.007-.181.007-.182.005-.182.004-.184.003-.184.002h-.37l-.184-.002-.184-.003-.182-.004-.182-.005-.181-.007-.179-.007-.179-.009-.178-.009-.176-.011-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.022-.162-.023-.161-.024-.159-.025-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.031-.146-.033-.145-.033-.143-.033-.141-.035-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.04-.126-.041-.124-.042-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.047-.105-.048-.102-.049-.1-.049-.097-.05-.095-.051-.093-.051-.09-.051-.087-.053-.085-.052-.083-.054-.08-.054-.077-.054v4.139zm0-5.666v.011l.001.02.003.022.004.021.005.022.006.021.007.022.009.023.01.022.011.023.012.023.013.023.015.023.016.024.017.024.018.023.019.024.021.025.022.024.023.024.024.025.052.05.056.05.061.05.066.051.07.051.075.052.079.051.084.052.088.052.092.052.097.052.102.052.105.051.11.052.114.051.119.051.123.051.127.05.131.05.135.05.139.049.144.048.147.048.152.047.155.046.16.045.163.045.167.043.171.043.176.042.178.04.183.04.187.038.19.037.194.036.197.034.202.033.204.032.209.03.212.028.216.027.219.025.222.024.226.021.23.02.233.018.236.017.24.014.243.012.246.01.249.008.253.006.256.003.259.001.26-.001.257-.003.254-.006.25-.008.247-.01.244-.013.241-.014.237-.016.233-.018.231-.02.226-.022.224-.024.22-.025.216-.027.212-.029.21-.03.205-.032.202-.033.198-.035.194-.036.191-.037.187-.039.183-.039.179-.041.175-.042.172-.043.168-.044.163-.045.16-.045.155-.047.152-.047.148-.048.143-.049.139-.049.136-.049.131-.051.126-.05.123-.051.118-.052.114-.051.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.052.07-.051.065-.051.06-.051.056-.05.051-.049.023-.025.023-.025.021-.024.02-.024.019-.024.018-.024.017-.024.015-.023.014-.024.013-.023.012-.023.01-.022.01-.023.008-.022.006-.022.006-.022.004-.022.004-.021.001-.021.001-.021v-4.153l-.077.054-.08.054-.083.053-.085.053-.087.053-.09.051-.093.051-.095.051-.097.05-.1.049-.102.048-.105.048-.106.048-.109.046-.111.046-.114.046-.115.044-.118.044-.12.043-.122.043-.124.042-.126.041-.128.04-.13.039-.132.039-.134.038-.135.037-.138.036-.139.036-.142.034-.143.034-.144.033-.147.032-.148.032-.15.03-.151.03-.153.028-.154.028-.156.027-.158.026-.159.024-.161.024-.162.023-.163.023-.165.021-.166.02-.167.019-.169.018-.169.017-.171.016-.173.015-.173.014-.175.013-.175.012-.177.01-.178.01-.179.009-.179.007-.181.006-.182.006-.182.004-.184.003-.184.001-.185.001-.185-.001-.184-.001-.184-.003-.182-.004-.182-.006-.181-.006-.179-.007-.179-.009-.178-.01-.176-.01-.176-.012-.175-.013-.173-.014-.172-.015-.171-.016-.17-.017-.169-.018-.167-.019-.166-.02-.165-.021-.163-.023-.162-.023-.161-.024-.159-.024-.157-.026-.156-.027-.155-.028-.153-.028-.151-.03-.15-.03-.148-.032-.146-.032-.145-.033-.143-.034-.141-.034-.14-.036-.137-.036-.136-.037-.134-.038-.132-.039-.13-.039-.128-.041-.126-.041-.124-.041-.122-.043-.12-.043-.117-.044-.116-.044-.113-.046-.112-.046-.109-.046-.106-.048-.105-.048-.102-.048-.1-.05-.097-.049-.095-.051-.093-.051-.09-.052-.087-.052-.085-.053-.083-.053-.08-.054-.077-.054v4.153zm8.74-8.179l-.257.004-.254.005-.25.008-.247.011-.244.012-.241.014-.237.016-.233.018-.231.021-.226.022-.224.023-.22.026-.216.027-.212.028-.21.031-.205.032-.202.033-.198.034-.194.036-.191.038-.187.038-.183.04-.179.041-.175.042-.172.043-.168.043-.163.045-.16.046-.155.046-.152.048-.148.048-.143.048-.139.049-.136.05-.131.05-.126.051-.123.051-.118.051-.114.052-.11.052-.106.052-.101.052-.096.052-.092.052-.088.052-.083.052-.079.052-.074.051-.07.052-.065.051-.06.05-.056.05-.051.05-.023.025-.023.024-.021.024-.02.025-.019.024-.018.024-.017.023-.015.024-.014.023-.013.023-.012.023-.01.023-.01.022-.008.022-.006.023-.006.021-.004.022-.004.021-.001.021-.001.021.001.021.001.021.004.021.004.022.006.021.006.023.008.022.01.022.01.023.012.023.013.023.014.023.015.024.017.023.018.024.019.024.02.025.021.024.023.024.023.025.051.05.056.05.06.05.065.051.07.052.074.051.079.052.083.052.088.052.092.052.096.052.101.052.106.052.11.052.114.052.118.051.123.051.126.051.131.05.136.05.139.049.143.048.148.048.152.048.155.046.16.046.163.045.168.043.172.043.175.042.179.041.183.04.187.038.191.038.194.036.198.034.202.033.205.032.21.031.212.028.216.027.22.026.224.023.226.022.231.021.233.018.237.016.241.014.244.012.247.011.25.008.254.005.257.004.26.001.26-.001.257-.004.254-.005.25-.008.247-.011.244-.012.241-.014.237-.016.233-.018.231-.021.226-.022.224-.023.22-.026.216-.027.212-.028.21-.031.205-.032.202-.033.198-.034.194-.036.191-.038.187-.038.183-.04.179-.041.175-.042.172-.043.168-.043.163-.045.16-.046.155-.046.152-.048.148-.048.143-.048.139-.049.136-.05.131-.05.126-.051.123-.051.118-.051.114-.052.11-.052.106-.052.101-.052.096-.052.092-.052.088-.052.083-.052.079-.052.074-.051.07-.052.065-.051.06-.05.056-.05.051-.05.023-.025.023-.024.021-.024.02-.025.019-.024.018-.024.017-.023.015-.024.014-.023.013-.023.012-.023.01-.023.01-.022.008-.022.006-.023.006-.021.004-.022.004-.021.001-.021.001-.021-.001-.021-.001-.021-.004-.021-.004-.022-.006-.021-.006-.023-.008-.022-.01-.022-.01-.023-.012-.023-.013-.023-.014-.023-.015-.024-.017-.023-.018-.024-.019-.024-.02-.025-.021-.024-.023-.024-.023-.025-.051-.05-.056-.05-.06-.05-.065-.051-.07-.052-.074-.051-.079-.052-.083-.052-.088-.052-.092-.052-.096-.052-.101-.052-.106-.052-.11-.052-.114-.052-.118-.051-.123-.051-.126-.051-.131-.05-.136-.05-.139-.049-.143-.048-.148-.048-.152-.048-.155-.046-.16-.046-.163-.045-.168-.043-.172-.043-.175-.042-.179-.041-.183-.04-.187-.038-.191-.038-.194-.036-.198-.034-.202-.033-.205-.032-.21-.031-.212-.028-.216-.027-.22-.026-.224-.023-.226-.022-.231-.021-.233-.018-.237-.016-.241-.014-.244-.012-.247-.011-.25-.008-.254-.005-.257-.004-.26-.001-.26.001z"
-  );
-};
-const insertComputerIcon = function(elem) {
-  elem.append("defs").append("symbol").attr("id", "computer").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr(
-    "d",
-    "M2 2v13h20v-13h-20zm18 11h-16v-9h16v9zm-10.228 6l.466-1h3.524l.467 1h-4.457zm14.228 3h-24l2-6h2.104l-1.33 4h18.45l-1.297-4h2.073l2 6zm-5-10h-14v-7h14v7z"
-  );
-};
-const insertClockIcon = function(elem) {
-  elem.append("defs").append("symbol").attr("id", "clock").attr("width", "24").attr("height", "24").append("path").attr("transform", "scale(.5)").attr(
-    "d",
-    "M12 2c5.514 0 10 4.486 10 10s-4.486 10-10 10-10-4.486-10-10 4.486-10 10-10zm0-2c-6.627 0-12 5.373-12 12s5.373 12 12 12 12-5.373 12-12-5.373-12-12-12zm5.848 12.459c.202.038.202.333.001.372-1.907.361-6.045 1.111-6.547 1.111-.719 0-1.301-.582-1.301-1.301 0-.512.77-5.447 1.125-7.445.034-.192.312-.181.343.014l.985 6.238 5.394 1.011z"
-  );
-};
-const insertArrowHead = function(elem) {
-  elem.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 9).attr("refY", 5).attr("markerUnits", "userSpaceOnUse").attr("markerWidth", 12).attr("markerHeight", 12).attr("orient", "auto").append("path").attr("d", "M 0 0 L 10 5 L 0 10 z");
-};
-const insertArrowFilledHead = function(elem) {
-  elem.append("defs").append("marker").attr("id", "filled-head").attr("refX", 18).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 18,7 L9,13 L14,7 L9,1 Z");
-};
-const insertSequenceNumber = function(elem) {
-  elem.append("defs").append("marker").attr("id", "sequencenumber").attr("refX", 15).attr("refY", 15).attr("markerWidth", 60).attr("markerHeight", 40).attr("orient", "auto").append("circle").attr("cx", 15).attr("cy", 15).attr("r", 6);
-};
-const insertArrowCrossHead = function(elem) {
-  const defs = elem.append("defs");
-  const marker = defs.append("marker").attr("id", "crosshead").attr("markerWidth", 15).attr("markerHeight", 8).attr("orient", "auto").attr("refX", 4).attr("refY", 5);
-  marker.append("path").attr("fill", "none").attr("stroke", "#000000").style("stroke-dasharray", "0, 0").attr("stroke-width", "1pt").attr("d", "M 1,2 L 6,7 M 6,2 L 1,7");
-};
-const getTextObj$1 = function() {
-  return {
-    x: 0,
-    y: 0,
-    fill: void 0,
-    anchor: void 0,
-    style: "#666",
-    width: void 0,
-    height: void 0,
-    textMargin: 0,
-    rx: 0,
-    ry: 0,
-    tspan: true,
-    valign: void 0
-  };
-};
-const getNoteRect$1 = function() {
-  return {
-    x: 0,
-    y: 0,
-    fill: "#EDF2AE",
-    stroke: "#666",
-    width: 100,
-    anchor: "start",
-    height: 100,
-    rx: 0,
-    ry: 0
-  };
-};
-const _drawTextCandidateFunc$1 = function() {
-  function byText(content, g, x, y, width2, height2, textAttrs) {
-    const text = g.append("text").attr("x", x + width2 / 2).attr("y", y + height2 / 2 + 5).style("text-anchor", "middle").text(content);
-    _setTextAttrs(text, textAttrs);
-  }
-  function byTspan(content, g, x, y, width2, height2, textAttrs, conf2) {
-    const { actorFontSize, actorFontFamily, actorFontWeight } = conf2;
-    const [_actorFontSize, _actorFontSizePx] = parseFontSize(actorFontSize);
-    const lines = content.split(common$1.lineBreakRegex);
-    for (let i = 0; i < lines.length; i++) {
-      const dy = i * _actorFontSize - _actorFontSize * (lines.length - 1) / 2;
-      const text = g.append("text").attr("x", x + width2 / 2).attr("y", y).style("text-anchor", "middle").style("font-size", _actorFontSizePx).style("font-weight", actorFontWeight).style("font-family", actorFontFamily);
-      text.append("tspan").attr("x", x + width2 / 2).attr("dy", dy).text(lines[i]);
-      text.attr("y", y + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central");
-      _setTextAttrs(text, textAttrs);
-    }
-  }
-  function byFo(content, g, x, y, width2, height2, textAttrs, conf2) {
-    const s = g.append("switch");
-    const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width2).attr("height", height2);
-    const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
-    text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content);
-    byTspan(content, s, x, y, width2, height2, textAttrs, conf2);
-    _setTextAttrs(text, textAttrs);
-  }
-  function _setTextAttrs(toText, fromTextAttrsDict) {
-    for (const key in fromTextAttrsDict) {
-      if (fromTextAttrsDict.hasOwnProperty(key)) {
-        toText.attr(key, fromTextAttrsDict[key]);
-      }
-    }
-  }
-  return function(conf2) {
-    return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan;
-  };
-}();
-const _drawMenuItemTextCandidateFunc = function() {
-  function byText(content, g, x, y, width2, height2, textAttrs) {
-    const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").text(content);
-    _setTextAttrs(text, textAttrs);
-  }
-  function byTspan(content, g, x, y, width2, height2, textAttrs, conf2) {
-    const { actorFontSize, actorFontFamily, actorFontWeight } = conf2;
-    const lines = content.split(common$1.lineBreakRegex);
-    for (let i = 0; i < lines.length; i++) {
-      const dy = i * actorFontSize - actorFontSize * (lines.length - 1) / 2;
-      const text = g.append("text").attr("x", x).attr("y", y).style("text-anchor", "start").style("font-size", actorFontSize).style("font-weight", actorFontWeight).style("font-family", actorFontFamily);
-      text.append("tspan").attr("x", x).attr("dy", dy).text(lines[i]);
-      text.attr("y", y + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central");
-      _setTextAttrs(text, textAttrs);
-    }
-  }
-  function byFo(content, g, x, y, width2, height2, textAttrs, conf2) {
-    const s = g.append("switch");
-    const f = s.append("foreignObject").attr("x", x).attr("y", y).attr("width", width2).attr("height", height2);
-    const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
-    text.append("div").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content);
-    byTspan(content, s, x, y, width2, height2, textAttrs, conf2);
-    _setTextAttrs(text, textAttrs);
-  }
-  function _setTextAttrs(toText, fromTextAttrsDict) {
-    for (const key in fromTextAttrsDict) {
-      if (fromTextAttrsDict.hasOwnProperty(key)) {
-        toText.attr(key, fromTextAttrsDict[key]);
-      }
-    }
-  }
-  return function(conf2) {
-    return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan;
-  };
-}();
-const svgDraw$1 = {
-  drawRect: drawRect$1,
-  drawText: drawText$1,
-  drawLabel: drawLabel$1,
-  drawActor,
-  drawBox,
-  drawPopup,
-  drawImage,
-  drawEmbeddedImage,
-  anchorElement,
-  drawActivation,
-  drawLoop,
-  drawBackgroundRect: drawBackgroundRect$1,
-  insertArrowHead,
-  insertArrowFilledHead,
-  insertSequenceNumber,
-  insertArrowCrossHead,
-  insertDatabaseIcon,
-  insertComputerIcon,
-  insertClockIcon,
-  getTextObj: getTextObj$1,
-  getNoteRect: getNoteRect$1,
-  popupMenu,
-  popdownMenu,
-  fixLifeLineHeights,
-  sanitizeUrl: dist/* sanitizeUrl */.N
-};
-let conf$3 = {};
-const bounds$1 = {
-  data: {
-    startx: void 0,
-    stopx: void 0,
-    starty: void 0,
-    stopy: void 0
-  },
-  verticalPos: 0,
-  sequenceItems: [],
-  activations: [],
-  models: {
-    getHeight: function() {
-      return Math.max.apply(
-        null,
-        this.actors.length === 0 ? [0] : this.actors.map((actor) => actor.height || 0)
-      ) + (this.loops.length === 0 ? 0 : this.loops.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.messages.length === 0 ? 0 : this.messages.map((it) => it.height || 0).reduce((acc, h) => acc + h)) + (this.notes.length === 0 ? 0 : this.notes.map((it) => it.height || 0).reduce((acc, h) => acc + h));
-    },
-    clear: function() {
-      this.actors = [];
-      this.boxes = [];
-      this.loops = [];
-      this.messages = [];
-      this.notes = [];
-    },
-    addBox: function(boxModel) {
-      this.boxes.push(boxModel);
-    },
-    addActor: function(actorModel) {
-      this.actors.push(actorModel);
-    },
-    addLoop: function(loopModel) {
-      this.loops.push(loopModel);
-    },
-    addMessage: function(msgModel) {
-      this.messages.push(msgModel);
-    },
-    addNote: function(noteModel) {
-      this.notes.push(noteModel);
-    },
-    lastActor: function() {
-      return this.actors[this.actors.length - 1];
-    },
-    lastLoop: function() {
-      return this.loops[this.loops.length - 1];
-    },
-    lastMessage: function() {
-      return this.messages[this.messages.length - 1];
-    },
-    lastNote: function() {
-      return this.notes[this.notes.length - 1];
-    },
-    actors: [],
-    boxes: [],
-    loops: [],
-    messages: [],
-    notes: []
-  },
-  init: function() {
-    this.sequenceItems = [];
-    this.activations = [];
-    this.models.clear();
-    this.data = {
-      startx: void 0,
-      stopx: void 0,
-      starty: void 0,
-      stopy: void 0
-    };
-    this.verticalPos = 0;
-    setConf$4(getConfig$1());
-  },
-  updateVal: function(obj, key, val, fun) {
-    if (obj[key] === void 0) {
-      obj[key] = val;
-    } else {
-      obj[key] = fun(val, obj[key]);
-    }
-  },
-  updateBounds: function(startx, starty, stopx, stopy) {
-    const _self = this;
-    let cnt2 = 0;
-    function updateFn(type2) {
-      return function updateItemBounds(item) {
-        cnt2++;
-        const n = _self.sequenceItems.length - cnt2 + 1;
-        _self.updateVal(item, "starty", starty - n * conf$3.boxMargin, Math.min);
-        _self.updateVal(item, "stopy", stopy + n * conf$3.boxMargin, Math.max);
-        _self.updateVal(bounds$1.data, "startx", startx - n * conf$3.boxMargin, Math.min);
-        _self.updateVal(bounds$1.data, "stopx", stopx + n * conf$3.boxMargin, Math.max);
-        if (!(type2 === "activation")) {
-          _self.updateVal(item, "startx", startx - n * conf$3.boxMargin, Math.min);
-          _self.updateVal(item, "stopx", stopx + n * conf$3.boxMargin, Math.max);
-          _self.updateVal(bounds$1.data, "starty", starty - n * conf$3.boxMargin, Math.min);
-          _self.updateVal(bounds$1.data, "stopy", stopy + n * conf$3.boxMargin, Math.max);
-        }
-      };
-    }
-    this.sequenceItems.forEach(updateFn());
-    this.activations.forEach(updateFn("activation"));
-  },
-  insert: function(startx, starty, stopx, stopy) {
-    const _startx = Math.min(startx, stopx);
-    const _stopx = Math.max(startx, stopx);
-    const _starty = Math.min(starty, stopy);
-    const _stopy = Math.max(starty, stopy);
-    this.updateVal(bounds$1.data, "startx", _startx, Math.min);
-    this.updateVal(bounds$1.data, "starty", _starty, Math.min);
-    this.updateVal(bounds$1.data, "stopx", _stopx, Math.max);
-    this.updateVal(bounds$1.data, "stopy", _stopy, Math.max);
-    this.updateBounds(_startx, _starty, _stopx, _stopy);
-  },
-  newActivation: function(message2, diagram, actors2) {
-    const actorRect = actors2[message2.from.actor];
-    const stackedSize = actorActivations(message2.from.actor).length || 0;
-    const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf$3.activationWidth / 2;
-    this.activations.push({
-      startx: x,
-      starty: this.verticalPos + 2,
-      stopx: x + conf$3.activationWidth,
-      stopy: void 0,
-      actor: message2.from.actor,
-      anchored: svgDraw$1.anchorElement(diagram)
-    });
-  },
-  endActivation: function(message2) {
-    const lastActorActivationIdx = this.activations.map(function(activation) {
-      return activation.actor;
-    }).lastIndexOf(message2.from.actor);
-    return this.activations.splice(lastActorActivationIdx, 1)[0];
-  },
-  createLoop: function(title2 = { message: void 0, wrap: false, width: void 0 }, fill) {
-    return {
-      startx: void 0,
-      starty: this.verticalPos,
-      stopx: void 0,
-      stopy: void 0,
-      title: title2.message,
-      wrap: title2.wrap,
-      width: title2.width,
-      height: 0,
-      fill
-    };
-  },
-  newLoop: function(title2 = { message: void 0, wrap: false, width: void 0 }, fill) {
-    this.sequenceItems.push(this.createLoop(title2, fill));
-  },
-  endLoop: function() {
-    return this.sequenceItems.pop();
-  },
-  addSectionToLoop: function(message2) {
-    const loop = this.sequenceItems.pop();
-    loop.sections = loop.sections || [];
-    loop.sectionTitles = loop.sectionTitles || [];
-    loop.sections.push({ y: bounds$1.getVerticalPos(), height: 0 });
-    loop.sectionTitles.push(message2);
-    this.sequenceItems.push(loop);
-  },
-  bumpVerticalPos: function(bump) {
-    this.verticalPos = this.verticalPos + bump;
-    this.data.stopy = this.verticalPos;
-  },
-  getVerticalPos: function() {
-    return this.verticalPos;
-  },
-  getBounds: function() {
-    return { bounds: this.data, models: this.models };
-  }
-};
-const drawNote$1 = function(elem, noteModel) {
-  bounds$1.bumpVerticalPos(conf$3.boxMargin);
-  noteModel.height = conf$3.boxMargin;
-  noteModel.starty = bounds$1.getVerticalPos();
-  const rect2 = svgDraw$1.getNoteRect();
-  rect2.x = noteModel.startx;
-  rect2.y = noteModel.starty;
-  rect2.width = noteModel.width || conf$3.width;
-  rect2.class = "note";
-  const g = elem.append("g");
-  const rectElem = svgDraw$1.drawRect(g, rect2);
-  const textObj = svgDraw$1.getTextObj();
-  textObj.x = noteModel.startx;
-  textObj.y = noteModel.starty;
-  textObj.width = rect2.width;
-  textObj.dy = "1em";
-  textObj.text = noteModel.message;
-  textObj.class = "noteText";
-  textObj.fontFamily = conf$3.noteFontFamily;
-  textObj.fontSize = conf$3.noteFontSize;
-  textObj.fontWeight = conf$3.noteFontWeight;
-  textObj.anchor = conf$3.noteAlign;
-  textObj.textMargin = conf$3.noteMargin;
-  textObj.valign = "center";
-  const textElem = drawText$1(g, textObj);
-  const textHeight = Math.round(
-    textElem.map((te) => (te._groups || te)[0][0].getBBox().height).reduce((acc, curr) => acc + curr)
-  );
-  rectElem.attr("height", textHeight + 2 * conf$3.noteMargin);
-  noteModel.height += textHeight + 2 * conf$3.noteMargin;
-  bounds$1.bumpVerticalPos(textHeight + 2 * conf$3.noteMargin);
-  noteModel.stopy = noteModel.starty + textHeight + 2 * conf$3.noteMargin;
-  noteModel.stopx = noteModel.startx + rect2.width;
-  bounds$1.insert(noteModel.startx, noteModel.starty, noteModel.stopx, noteModel.stopy);
-  bounds$1.models.addNote(noteModel);
-};
-const messageFont = (cnf) => {
-  return {
-    fontFamily: cnf.messageFontFamily,
-    fontSize: cnf.messageFontSize,
-    fontWeight: cnf.messageFontWeight
-  };
-};
-const noteFont = (cnf) => {
-  return {
-    fontFamily: cnf.noteFontFamily,
-    fontSize: cnf.noteFontSize,
-    fontWeight: cnf.noteFontWeight
-  };
-};
-const actorFont = (cnf) => {
-  return {
-    fontFamily: cnf.actorFontFamily,
-    fontSize: cnf.actorFontSize,
-    fontWeight: cnf.actorFontWeight
-  };
-};
-function boundMessage(_diagram, msgModel) {
-  bounds$1.bumpVerticalPos(10);
-  const { startx, stopx, message: message2 } = msgModel;
-  const lines = common$1.splitBreaks(message2).length;
-  const textDims = mermaid_ae477ddf_utils.calculateTextDimensions(message2, messageFont(conf$3));
-  const lineHeight = textDims.height / lines;
-  msgModel.height += lineHeight;
-  bounds$1.bumpVerticalPos(lineHeight);
-  let lineStartY;
-  let totalOffset = textDims.height - 10;
-  const textWidth = textDims.width;
-  if (startx === stopx) {
-    lineStartY = bounds$1.getVerticalPos() + totalOffset;
-    if (!conf$3.rightAngles) {
-      totalOffset += conf$3.boxMargin;
-      lineStartY = bounds$1.getVerticalPos() + totalOffset;
-    }
-    totalOffset += 30;
-    const dx = Math.max(textWidth / 2, conf$3.width / 2);
-    bounds$1.insert(
-      startx - dx,
-      bounds$1.getVerticalPos() - 10 + totalOffset,
-      stopx + dx,
-      bounds$1.getVerticalPos() + 30 + totalOffset
-    );
-  } else {
-    totalOffset += conf$3.boxMargin;
-    lineStartY = bounds$1.getVerticalPos() + totalOffset;
-    bounds$1.insert(startx, lineStartY - 10, stopx, lineStartY);
-  }
-  bounds$1.bumpVerticalPos(totalOffset);
-  msgModel.height += totalOffset;
-  msgModel.stopy = msgModel.starty + msgModel.height;
-  bounds$1.insert(msgModel.fromBounds, msgModel.starty, msgModel.toBounds, msgModel.stopy);
-  return lineStartY;
-}
-const drawMessage = function(diagram, msgModel, lineStartY, diagObj) {
-  const { startx, stopx, starty, message: message2, type: type2, sequenceIndex, sequenceVisible } = msgModel;
-  const textDims = mermaid_ae477ddf_utils.calculateTextDimensions(message2, messageFont(conf$3));
-  const textObj = svgDraw$1.getTextObj();
-  textObj.x = startx;
-  textObj.y = starty + 10;
-  textObj.width = stopx - startx;
-  textObj.class = "messageText";
-  textObj.dy = "1em";
-  textObj.text = message2;
-  textObj.fontFamily = conf$3.messageFontFamily;
-  textObj.fontSize = conf$3.messageFontSize;
-  textObj.fontWeight = conf$3.messageFontWeight;
-  textObj.anchor = conf$3.messageAlign;
-  textObj.valign = "center";
-  textObj.textMargin = conf$3.wrapPadding;
-  textObj.tspan = false;
-  drawText$1(diagram, textObj);
-  const textWidth = textDims.width;
-  let line2;
-  if (startx === stopx) {
-    if (conf$3.rightAngles) {
-      line2 = diagram.append("path").attr(
-        "d",
-        `M  ${startx},${lineStartY} H ${startx + Math.max(conf$3.width / 2, textWidth / 2)} V ${lineStartY + 25} H ${startx}`
-      );
-    } else {
-      line2 = diagram.append("path").attr(
-        "d",
-        "M " + startx + "," + lineStartY + " C " + (startx + 60) + "," + (lineStartY - 10) + " " + (startx + 60) + "," + (lineStartY + 30) + " " + startx + "," + (lineStartY + 20)
-      );
-    }
-  } else {
-    line2 = diagram.append("line");
-    line2.attr("x1", startx);
-    line2.attr("y1", lineStartY);
-    line2.attr("x2", stopx);
-    line2.attr("y2", lineStartY);
-  }
-  if (type2 === diagObj.db.LINETYPE.DOTTED || type2 === diagObj.db.LINETYPE.DOTTED_CROSS || type2 === diagObj.db.LINETYPE.DOTTED_POINT || type2 === diagObj.db.LINETYPE.DOTTED_OPEN) {
-    line2.style("stroke-dasharray", "3, 3");
-    line2.attr("class", "messageLine1");
-  } else {
-    line2.attr("class", "messageLine0");
-  }
-  let url = "";
-  if (conf$3.arrowMarkerAbsolute) {
-    url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search;
-    url = url.replace(/\(/g, "\\(");
-    url = url.replace(/\)/g, "\\)");
-  }
-  line2.attr("stroke-width", 2);
-  line2.attr("stroke", "none");
-  line2.style("fill", "none");
-  if (type2 === diagObj.db.LINETYPE.SOLID || type2 === diagObj.db.LINETYPE.DOTTED) {
-    line2.attr("marker-end", "url(" + url + "#arrowhead)");
-  }
-  if (type2 === diagObj.db.LINETYPE.SOLID_POINT || type2 === diagObj.db.LINETYPE.DOTTED_POINT) {
-    line2.attr("marker-end", "url(" + url + "#filled-head)");
-  }
-  if (type2 === diagObj.db.LINETYPE.SOLID_CROSS || type2 === diagObj.db.LINETYPE.DOTTED_CROSS) {
-    line2.attr("marker-end", "url(" + url + "#crosshead)");
-  }
-  if (sequenceVisible || conf$3.showSequenceNumbers) {
-    line2.attr("marker-start", "url(" + url + "#sequencenumber)");
-    diagram.append("text").attr("x", startx).attr("y", lineStartY + 4).attr("font-family", "sans-serif").attr("font-size", "12px").attr("text-anchor", "middle").attr("class", "sequenceNumber").text(sequenceIndex);
-  }
-};
-const drawActors = function(diagram, actors2, actorKeys, verticalPos, configuration, messages2, isFooter) {
-  if (configuration.hideUnusedParticipants === true) {
-    const newActors = /* @__PURE__ */ new Set();
-    messages2.forEach((message2) => {
-      newActors.add(message2.from);
-      newActors.add(message2.to);
-    });
-    actorKeys = actorKeys.filter((actorKey) => newActors.has(actorKey));
-  }
-  let prevWidth = 0;
-  let prevMargin = 0;
-  let maxHeight = 0;
-  let prevBox = void 0;
-  for (const actorKey of actorKeys) {
-    const actor = actors2[actorKey];
-    const box = actor.box;
-    if (prevBox && prevBox != box) {
-      if (!isFooter) {
-        bounds$1.models.addBox(prevBox);
-      }
-      prevMargin += conf$3.boxMargin + prevBox.margin;
-    }
-    if (box && box != prevBox) {
-      if (!isFooter) {
-        box.x = prevWidth + prevMargin;
-        box.y = verticalPos;
-      }
-      prevMargin += box.margin;
-    }
-    actor.width = actor.width || conf$3.width;
-    actor.height = Math.max(actor.height || conf$3.height, conf$3.height);
-    actor.margin = actor.margin || conf$3.actorMargin;
-    actor.x = prevWidth + prevMargin;
-    actor.y = bounds$1.getVerticalPos();
-    const height2 = svgDraw$1.drawActor(diagram, actor, conf$3, isFooter);
-    maxHeight = Math.max(maxHeight, height2);
-    bounds$1.insert(actor.x, verticalPos, actor.x + actor.width, actor.height);
-    prevWidth += actor.width + prevMargin;
-    if (actor.box) {
-      actor.box.width = prevWidth + box.margin - actor.box.x;
-    }
-    prevMargin = actor.margin;
-    prevBox = actor.box;
-    bounds$1.models.addActor(actor);
-  }
-  if (prevBox && !isFooter) {
-    bounds$1.models.addBox(prevBox);
-  }
-  bounds$1.bumpVerticalPos(maxHeight);
-};
-const drawActorsPopup = function(diagram, actors2, actorKeys, doc) {
-  let maxHeight = 0;
-  let maxWidth = 0;
-  for (const actorKey of actorKeys) {
-    const actor = actors2[actorKey];
-    const minMenuWidth = getRequiredPopupWidth(actor);
-    const menuDimensions = svgDraw$1.drawPopup(
-      diagram,
-      actor,
-      minMenuWidth,
-      conf$3,
-      conf$3.forceMenus,
-      doc
-    );
-    if (menuDimensions.height > maxHeight) {
-      maxHeight = menuDimensions.height;
-    }
-    if (menuDimensions.width + actor.x > maxWidth) {
-      maxWidth = menuDimensions.width + actor.x;
-    }
-  }
-  return { maxHeight, maxWidth };
-};
-const setConf$4 = function(cnf) {
-  assignWithDepth$1(conf$3, cnf);
-  if (cnf.fontFamily) {
-    conf$3.actorFontFamily = conf$3.noteFontFamily = conf$3.messageFontFamily = cnf.fontFamily;
-  }
-  if (cnf.fontSize) {
-    conf$3.actorFontSize = conf$3.noteFontSize = conf$3.messageFontSize = cnf.fontSize;
-  }
-  if (cnf.fontWeight) {
-    conf$3.actorFontWeight = conf$3.noteFontWeight = conf$3.messageFontWeight = cnf.fontWeight;
-  }
-};
-const actorActivations = function(actor) {
-  return bounds$1.activations.filter(function(activation) {
-    return activation.actor === actor;
-  });
-};
-const activationBounds = function(actor, actors2) {
-  const actorObj = actors2[actor];
-  const activations = actorActivations(actor);
-  const left = activations.reduce(function(acc, activation) {
-    return Math.min(acc, activation.startx);
-  }, actorObj.x + actorObj.width / 2);
-  const right = activations.reduce(function(acc, activation) {
-    return Math.max(acc, activation.stopx);
-  }, actorObj.x + actorObj.width / 2);
-  return [left, right];
-};
-function adjustLoopHeightForWrap(loopWidths, msg, preMargin, postMargin, addLoopFn) {
-  bounds$1.bumpVerticalPos(preMargin);
-  let heightAdjust = postMargin;
-  if (msg.id && msg.message && loopWidths[msg.id]) {
-    const loopWidth = loopWidths[msg.id].width;
-    const textConf = messageFont(conf$3);
-    msg.message = mermaid_ae477ddf_utils.wrapLabel(`[${msg.message}]`, loopWidth - 2 * conf$3.wrapPadding, textConf);
-    msg.width = loopWidth;
-    msg.wrap = true;
-    const textDims = mermaid_ae477ddf_utils.calculateTextDimensions(msg.message, textConf);
-    const totalOffset = Math.max(textDims.height, conf$3.labelBoxHeight);
-    heightAdjust = postMargin + totalOffset;
-    log$1.debug(`${totalOffset} - ${msg.message}`);
-  }
-  addLoopFn(msg);
-  bounds$1.bumpVerticalPos(heightAdjust);
-}
-const draw$4 = function(_text, id2, _version, diagObj) {
-  const { securityLevel, sequence } = getConfig$1();
-  conf$3 = sequence;
-  diagObj.db.clear();
-  diagObj.parser.parse(_text);
-  let sandboxElement;
-  if (securityLevel === "sandbox") {
-    sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-  }
-  const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-  const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document;
-  bounds$1.init();
-  log$1.debug(diagObj.db);
-  const diagram = securityLevel === "sandbox" ? root.select(`[id="${id2}"]`) : (0,src/* select */.Ys)(`[id="${id2}"]`);
-  const actors2 = diagObj.db.getActors();
-  const boxes2 = diagObj.db.getBoxes();
-  const actorKeys = diagObj.db.getActorKeys();
-  const messages2 = diagObj.db.getMessages();
-  const title2 = diagObj.db.getDiagramTitle();
-  const hasBoxes = diagObj.db.hasAtLeastOneBox();
-  const hasBoxTitles = diagObj.db.hasAtLeastOneBoxWithTitle();
-  const maxMessageWidthPerActor = getMaxMessageWidthPerActor(actors2, messages2, diagObj);
-  conf$3.height = calculateActorMargins(actors2, maxMessageWidthPerActor, boxes2);
-  svgDraw$1.insertComputerIcon(diagram);
-  svgDraw$1.insertDatabaseIcon(diagram);
-  svgDraw$1.insertClockIcon(diagram);
-  if (hasBoxes) {
-    bounds$1.bumpVerticalPos(conf$3.boxMargin);
-    if (hasBoxTitles) {
-      bounds$1.bumpVerticalPos(boxes2[0].textMaxHeight);
-    }
-  }
-  drawActors(diagram, actors2, actorKeys, 0, conf$3, messages2, false);
-  const loopWidths = calculateLoopBounds(messages2, actors2, maxMessageWidthPerActor, diagObj);
-  svgDraw$1.insertArrowHead(diagram);
-  svgDraw$1.insertArrowCrossHead(diagram);
-  svgDraw$1.insertArrowFilledHead(diagram);
-  svgDraw$1.insertSequenceNumber(diagram);
-  function activeEnd(msg, verticalPos) {
-    const activationData = bounds$1.endActivation(msg);
-    if (activationData.starty + 18 > verticalPos) {
-      activationData.starty = verticalPos - 6;
-      verticalPos += 12;
-    }
-    svgDraw$1.drawActivation(
-      diagram,
-      activationData,
-      verticalPos,
-      conf$3,
-      actorActivations(msg.from.actor).length
-    );
-    bounds$1.insert(activationData.startx, verticalPos - 10, activationData.stopx, verticalPos);
-  }
-  let sequenceIndex = 1;
-  let sequenceIndexStep = 1;
-  const messagesToDraw = [];
-  messages2.forEach(function(msg) {
-    let loopModel, noteModel, msgModel;
-    switch (msg.type) {
-      case diagObj.db.LINETYPE.NOTE:
-        noteModel = msg.noteModel;
-        drawNote$1(diagram, noteModel);
-        break;
-      case diagObj.db.LINETYPE.ACTIVE_START:
-        bounds$1.newActivation(msg, diagram, actors2);
-        break;
-      case diagObj.db.LINETYPE.ACTIVE_END:
-        activeEnd(msg, bounds$1.getVerticalPos());
-        break;
-      case diagObj.db.LINETYPE.LOOP_START:
-        adjustLoopHeightForWrap(
-          loopWidths,
-          msg,
-          conf$3.boxMargin,
-          conf$3.boxMargin + conf$3.boxTextMargin,
-          (message2) => bounds$1.newLoop(message2)
-        );
-        break;
-      case diagObj.db.LINETYPE.LOOP_END:
-        loopModel = bounds$1.endLoop();
-        svgDraw$1.drawLoop(diagram, loopModel, "loop", conf$3);
-        bounds$1.bumpVerticalPos(loopModel.stopy - bounds$1.getVerticalPos());
-        bounds$1.models.addLoop(loopModel);
-        break;
-      case diagObj.db.LINETYPE.RECT_START:
-        adjustLoopHeightForWrap(
-          loopWidths,
-          msg,
-          conf$3.boxMargin,
-          conf$3.boxMargin,
-          (message2) => bounds$1.newLoop(void 0, message2.message)
-        );
-        break;
-      case diagObj.db.LINETYPE.RECT_END:
-        loopModel = bounds$1.endLoop();
-        svgDraw$1.drawBackgroundRect(diagram, loopModel);
-        bounds$1.models.addLoop(loopModel);
-        bounds$1.bumpVerticalPos(loopModel.stopy - bounds$1.getVerticalPos());
-        break;
-      case diagObj.db.LINETYPE.OPT_START:
-        adjustLoopHeightForWrap(
-          loopWidths,
-          msg,
-          conf$3.boxMargin,
-          conf$3.boxMargin + conf$3.boxTextMargin,
-          (message2) => bounds$1.newLoop(message2)
-        );
-        break;
-      case diagObj.db.LINETYPE.OPT_END:
-        loopModel = bounds$1.endLoop();
-        svgDraw$1.drawLoop(diagram, loopModel, "opt", conf$3);
-        bounds$1.bumpVerticalPos(loopModel.stopy - bounds$1.getVerticalPos());
-        bounds$1.models.addLoop(loopModel);
-        break;
-      case diagObj.db.LINETYPE.ALT_START:
-        adjustLoopHeightForWrap(
-          loopWidths,
-          msg,
-          conf$3.boxMargin,
-          conf$3.boxMargin + conf$3.boxTextMargin,
-          (message2) => bounds$1.newLoop(message2)
-        );
-        break;
-      case diagObj.db.LINETYPE.ALT_ELSE:
-        adjustLoopHeightForWrap(
-          loopWidths,
-          msg,
-          conf$3.boxMargin + conf$3.boxTextMargin,
-          conf$3.boxMargin,
-          (message2) => bounds$1.addSectionToLoop(message2)
-        );
-        break;
-      case diagObj.db.LINETYPE.ALT_END:
-        loopModel = bounds$1.endLoop();
-        svgDraw$1.drawLoop(diagram, loopModel, "alt", conf$3);
-        bounds$1.bumpVerticalPos(loopModel.stopy - bounds$1.getVerticalPos());
-        bounds$1.models.addLoop(loopModel);
-        break;
-      case diagObj.db.LINETYPE.PAR_START:
-        adjustLoopHeightForWrap(
-          loopWidths,
-          msg,
-          conf$3.boxMargin,
-          conf$3.boxMargin + conf$3.boxTextMargin,
-          (message2) => bounds$1.newLoop(message2)
-        );
-        break;
-      case diagObj.db.LINETYPE.PAR_AND:
-        adjustLoopHeightForWrap(
-          loopWidths,
-          msg,
-          conf$3.boxMargin + conf$3.boxTextMargin,
-          conf$3.boxMargin,
-          (message2) => bounds$1.addSectionToLoop(message2)
-        );
-        break;
-      case diagObj.db.LINETYPE.PAR_END:
-        loopModel = bounds$1.endLoop();
-        svgDraw$1.drawLoop(diagram, loopModel, "par", conf$3);
-        bounds$1.bumpVerticalPos(loopModel.stopy - bounds$1.getVerticalPos());
-        bounds$1.models.addLoop(loopModel);
-        break;
-      case diagObj.db.LINETYPE.AUTONUMBER:
-        sequenceIndex = msg.message.start || sequenceIndex;
-        sequenceIndexStep = msg.message.step || sequenceIndexStep;
-        if (msg.message.visible) {
-          diagObj.db.enableSequenceNumbers();
-        } else {
-          diagObj.db.disableSequenceNumbers();
-        }
-        break;
-      case diagObj.db.LINETYPE.CRITICAL_START:
-        adjustLoopHeightForWrap(
-          loopWidths,
-          msg,
-          conf$3.boxMargin,
-          conf$3.boxMargin + conf$3.boxTextMargin,
-          (message2) => bounds$1.newLoop(message2)
-        );
-        break;
-      case diagObj.db.LINETYPE.CRITICAL_OPTION:
-        adjustLoopHeightForWrap(
-          loopWidths,
-          msg,
-          conf$3.boxMargin + conf$3.boxTextMargin,
-          conf$3.boxMargin,
-          (message2) => bounds$1.addSectionToLoop(message2)
-        );
-        break;
-      case diagObj.db.LINETYPE.CRITICAL_END:
-        loopModel = bounds$1.endLoop();
-        svgDraw$1.drawLoop(diagram, loopModel, "critical", conf$3);
-        bounds$1.bumpVerticalPos(loopModel.stopy - bounds$1.getVerticalPos());
-        bounds$1.models.addLoop(loopModel);
-        break;
-      case diagObj.db.LINETYPE.BREAK_START:
-        adjustLoopHeightForWrap(
-          loopWidths,
-          msg,
-          conf$3.boxMargin,
-          conf$3.boxMargin + conf$3.boxTextMargin,
-          (message2) => bounds$1.newLoop(message2)
-        );
-        break;
-      case diagObj.db.LINETYPE.BREAK_END:
-        loopModel = bounds$1.endLoop();
-        svgDraw$1.drawLoop(diagram, loopModel, "break", conf$3);
-        bounds$1.bumpVerticalPos(loopModel.stopy - bounds$1.getVerticalPos());
-        bounds$1.models.addLoop(loopModel);
-        break;
-      default:
-        try {
-          msgModel = msg.msgModel;
-          msgModel.starty = bounds$1.getVerticalPos();
-          msgModel.sequenceIndex = sequenceIndex;
-          msgModel.sequenceVisible = diagObj.db.showSequenceNumbers();
-          const lineStartY = boundMessage(diagram, msgModel);
-          messagesToDraw.push({ messageModel: msgModel, lineStartY });
-          bounds$1.models.addMessage(msgModel);
-        } catch (e) {
-          log$1.error("error while drawing message", e);
-        }
-    }
-    if ([
-      diagObj.db.LINETYPE.SOLID_OPEN,
-      diagObj.db.LINETYPE.DOTTED_OPEN,
-      diagObj.db.LINETYPE.SOLID,
-      diagObj.db.LINETYPE.DOTTED,
-      diagObj.db.LINETYPE.SOLID_CROSS,
-      diagObj.db.LINETYPE.DOTTED_CROSS,
-      diagObj.db.LINETYPE.SOLID_POINT,
-      diagObj.db.LINETYPE.DOTTED_POINT
-    ].includes(msg.type)) {
-      sequenceIndex = sequenceIndex + sequenceIndexStep;
-    }
-  });
-  messagesToDraw.forEach((e) => drawMessage(diagram, e.messageModel, e.lineStartY, diagObj));
-  if (conf$3.mirrorActors) {
-    bounds$1.bumpVerticalPos(conf$3.boxMargin * 2);
-    drawActors(diagram, actors2, actorKeys, bounds$1.getVerticalPos(), conf$3, messages2, true);
-    bounds$1.bumpVerticalPos(conf$3.boxMargin);
-    fixLifeLineHeights(diagram, bounds$1.getVerticalPos());
-  }
-  bounds$1.models.boxes.forEach(function(box2) {
-    box2.height = bounds$1.getVerticalPos() - box2.y;
-    bounds$1.insert(box2.x, box2.y, box2.x + box2.width, box2.height);
-    box2.startx = box2.x;
-    box2.starty = box2.y;
-    box2.stopx = box2.startx + box2.width;
-    box2.stopy = box2.starty + box2.height;
-    box2.stroke = "rgb(0,0,0, 0.5)";
-    svgDraw$1.drawBox(diagram, box2, conf$3);
-  });
-  if (hasBoxes) {
-    bounds$1.bumpVerticalPos(conf$3.boxMargin);
-  }
-  const requiredBoxSize = drawActorsPopup(diagram, actors2, actorKeys, doc);
-  const { bounds: box } = bounds$1.getBounds();
-  log$1.debug("For line height fix Querying: #" + id2 + " .actor-line");
-  const actorLines = (0,src/* selectAll */.td_)("#" + id2 + " .actor-line");
-  actorLines.attr("y2", box.stopy);
-  let boxHeight = box.stopy - box.starty;
-  if (boxHeight < requiredBoxSize.maxHeight) {
-    boxHeight = requiredBoxSize.maxHeight;
-  }
-  let height2 = boxHeight + 2 * conf$3.diagramMarginY;
-  if (conf$3.mirrorActors) {
-    height2 = height2 - conf$3.boxMargin + conf$3.bottomMarginAdj;
-  }
-  let boxWidth = box.stopx - box.startx;
-  if (boxWidth < requiredBoxSize.maxWidth) {
-    boxWidth = requiredBoxSize.maxWidth;
-  }
-  const width2 = boxWidth + 2 * conf$3.diagramMarginX;
-  if (title2) {
-    diagram.append("text").text(title2).attr("x", (box.stopx - box.startx) / 2 - 2 * conf$3.diagramMarginX).attr("y", -25);
-  }
-  configureSvgSize(diagram, height2, width2, conf$3.useMaxWidth);
-  const extraVertForTitle = title2 ? 40 : 0;
-  diagram.attr(
-    "viewBox",
-    box.startx - conf$3.diagramMarginX + " -" + (conf$3.diagramMarginY + extraVertForTitle) + " " + width2 + " " + (height2 + extraVertForTitle)
-  );
-  log$1.debug(`models:`, bounds$1.models);
-};
-function getMaxMessageWidthPerActor(actors2, messages2, diagObj) {
-  const maxMessageWidthPerActor = {};
-  messages2.forEach(function(msg) {
-    if (actors2[msg.to] && actors2[msg.from]) {
-      const actor = actors2[msg.to];
-      if (msg.placement === diagObj.db.PLACEMENT.LEFTOF && !actor.prevActor) {
-        return;
-      }
-      if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF && !actor.nextActor) {
-        return;
-      }
-      const isNote = msg.placement !== void 0;
-      const isMessage = !isNote;
-      const textFont = isNote ? noteFont(conf$3) : messageFont(conf$3);
-      const wrappedMessage = msg.wrap ? mermaid_ae477ddf_utils.wrapLabel(msg.message, conf$3.width - 2 * conf$3.wrapPadding, textFont) : msg.message;
-      const messageDimensions = mermaid_ae477ddf_utils.calculateTextDimensions(wrappedMessage, textFont);
-      const messageWidth = messageDimensions.width + 2 * conf$3.wrapPadding;
-      if (isMessage && msg.from === actor.nextActor) {
-        maxMessageWidthPerActor[msg.to] = Math.max(
-          maxMessageWidthPerActor[msg.to] || 0,
-          messageWidth
-        );
-      } else if (isMessage && msg.from === actor.prevActor) {
-        maxMessageWidthPerActor[msg.from] = Math.max(
-          maxMessageWidthPerActor[msg.from] || 0,
-          messageWidth
-        );
-      } else if (isMessage && msg.from === msg.to) {
-        maxMessageWidthPerActor[msg.from] = Math.max(
-          maxMessageWidthPerActor[msg.from] || 0,
-          messageWidth / 2
-        );
-        maxMessageWidthPerActor[msg.to] = Math.max(
-          maxMessageWidthPerActor[msg.to] || 0,
-          messageWidth / 2
-        );
-      } else if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) {
-        maxMessageWidthPerActor[msg.from] = Math.max(
-          maxMessageWidthPerActor[msg.from] || 0,
-          messageWidth
-        );
-      } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) {
-        maxMessageWidthPerActor[actor.prevActor] = Math.max(
-          maxMessageWidthPerActor[actor.prevActor] || 0,
-          messageWidth
-        );
-      } else if (msg.placement === diagObj.db.PLACEMENT.OVER) {
-        if (actor.prevActor) {
-          maxMessageWidthPerActor[actor.prevActor] = Math.max(
-            maxMessageWidthPerActor[actor.prevActor] || 0,
-            messageWidth / 2
-          );
-        }
-        if (actor.nextActor) {
-          maxMessageWidthPerActor[msg.from] = Math.max(
-            maxMessageWidthPerActor[msg.from] || 0,
-            messageWidth / 2
-          );
-        }
-      }
-    }
-  });
-  log$1.debug("maxMessageWidthPerActor:", maxMessageWidthPerActor);
-  return maxMessageWidthPerActor;
-}
-const getRequiredPopupWidth = function(actor) {
-  let requiredPopupWidth = 0;
-  const textFont = actorFont(conf$3);
-  for (const key in actor.links) {
-    const labelDimensions = mermaid_ae477ddf_utils.calculateTextDimensions(key, textFont);
-    const labelWidth = labelDimensions.width + 2 * conf$3.wrapPadding + 2 * conf$3.boxMargin;
-    if (requiredPopupWidth < labelWidth) {
-      requiredPopupWidth = labelWidth;
-    }
-  }
-  return requiredPopupWidth;
-};
-function calculateActorMargins(actors2, actorToMessageWidth, boxes2) {
-  let maxHeight = 0;
-  Object.keys(actors2).forEach((prop) => {
-    const actor = actors2[prop];
-    if (actor.wrap) {
-      actor.description = mermaid_ae477ddf_utils.wrapLabel(
-        actor.description,
-        conf$3.width - 2 * conf$3.wrapPadding,
-        actorFont(conf$3)
-      );
-    }
-    const actDims = mermaid_ae477ddf_utils.calculateTextDimensions(actor.description, actorFont(conf$3));
-    actor.width = actor.wrap ? conf$3.width : Math.max(conf$3.width, actDims.width + 2 * conf$3.wrapPadding);
-    actor.height = actor.wrap ? Math.max(actDims.height, conf$3.height) : conf$3.height;
-    maxHeight = Math.max(maxHeight, actor.height);
-  });
-  for (const actorKey in actorToMessageWidth) {
-    const actor = actors2[actorKey];
-    if (!actor) {
-      continue;
-    }
-    const nextActor = actors2[actor.nextActor];
-    if (!nextActor) {
-      const messageWidth2 = actorToMessageWidth[actorKey];
-      const actorWidth2 = messageWidth2 + conf$3.actorMargin - actor.width / 2;
-      actor.margin = Math.max(actorWidth2, conf$3.actorMargin);
-      continue;
-    }
-    const messageWidth = actorToMessageWidth[actorKey];
-    const actorWidth = messageWidth + conf$3.actorMargin - actor.width / 2 - nextActor.width / 2;
-    actor.margin = Math.max(actorWidth, conf$3.actorMargin);
-  }
-  let maxBoxHeight = 0;
-  boxes2.forEach((box) => {
-    const textFont = messageFont(conf$3);
-    let totalWidth = box.actorKeys.reduce((total, aKey) => {
-      return total += actors2[aKey].width + (actors2[aKey].margin || 0);
-    }, 0);
-    totalWidth -= 2 * conf$3.boxTextMargin;
-    if (box.wrap) {
-      box.name = mermaid_ae477ddf_utils.wrapLabel(box.name, totalWidth - 2 * conf$3.wrapPadding, textFont);
-    }
-    const boxMsgDimensions = mermaid_ae477ddf_utils.calculateTextDimensions(box.name, textFont);
-    maxBoxHeight = Math.max(boxMsgDimensions.height, maxBoxHeight);
-    const minWidth = Math.max(totalWidth, boxMsgDimensions.width + 2 * conf$3.wrapPadding);
-    box.margin = conf$3.boxTextMargin;
-    if (totalWidth < minWidth) {
-      const missing = (minWidth - totalWidth) / 2;
-      box.margin += missing;
-    }
-  });
-  boxes2.forEach((box) => box.textMaxHeight = maxBoxHeight);
-  return Math.max(maxHeight, conf$3.height);
-}
-const buildNoteModel = function(msg, actors2, diagObj) {
-  const startx = actors2[msg.from].x;
-  const stopx = actors2[msg.to].x;
-  const shouldWrap = msg.wrap && msg.message;
-  let textDimensions = mermaid_ae477ddf_utils.calculateTextDimensions(
-    shouldWrap ? mermaid_ae477ddf_utils.wrapLabel(msg.message, conf$3.width, noteFont(conf$3)) : msg.message,
-    noteFont(conf$3)
-  );
-  const noteModel = {
-    width: shouldWrap ? conf$3.width : Math.max(conf$3.width, textDimensions.width + 2 * conf$3.noteMargin),
-    height: 0,
-    startx: actors2[msg.from].x,
-    stopx: 0,
-    starty: 0,
-    stopy: 0,
-    message: msg.message
-  };
-  if (msg.placement === diagObj.db.PLACEMENT.RIGHTOF) {
-    noteModel.width = shouldWrap ? Math.max(conf$3.width, textDimensions.width) : Math.max(
-      actors2[msg.from].width / 2 + actors2[msg.to].width / 2,
-      textDimensions.width + 2 * conf$3.noteMargin
-    );
-    noteModel.startx = startx + (actors2[msg.from].width + conf$3.actorMargin) / 2;
-  } else if (msg.placement === diagObj.db.PLACEMENT.LEFTOF) {
-    noteModel.width = shouldWrap ? Math.max(conf$3.width, textDimensions.width + 2 * conf$3.noteMargin) : Math.max(
-      actors2[msg.from].width / 2 + actors2[msg.to].width / 2,
-      textDimensions.width + 2 * conf$3.noteMargin
-    );
-    noteModel.startx = startx - noteModel.width + (actors2[msg.from].width - conf$3.actorMargin) / 2;
-  } else if (msg.to === msg.from) {
-    textDimensions = mermaid_ae477ddf_utils.calculateTextDimensions(
-      shouldWrap ? mermaid_ae477ddf_utils.wrapLabel(msg.message, Math.max(conf$3.width, actors2[msg.from].width), noteFont(conf$3)) : msg.message,
-      noteFont(conf$3)
-    );
-    noteModel.width = shouldWrap ? Math.max(conf$3.width, actors2[msg.from].width) : Math.max(actors2[msg.from].width, conf$3.width, textDimensions.width + 2 * conf$3.noteMargin);
-    noteModel.startx = startx + (actors2[msg.from].width - noteModel.width) / 2;
-  } else {
-    noteModel.width = Math.abs(startx + actors2[msg.from].width / 2 - (stopx + actors2[msg.to].width / 2)) + conf$3.actorMargin;
-    noteModel.startx = startx < stopx ? startx + actors2[msg.from].width / 2 - conf$3.actorMargin / 2 : stopx + actors2[msg.to].width / 2 - conf$3.actorMargin / 2;
-  }
-  if (shouldWrap) {
-    noteModel.message = mermaid_ae477ddf_utils.wrapLabel(
-      msg.message,
-      noteModel.width - 2 * conf$3.wrapPadding,
-      noteFont(conf$3)
-    );
-  }
-  log$1.debug(
-    `NM:[${noteModel.startx},${noteModel.stopx},${noteModel.starty},${noteModel.stopy}:${noteModel.width},${noteModel.height}=${msg.message}]`
-  );
-  return noteModel;
-};
-const buildMessageModel = function(msg, actors2, diagObj) {
-  let process = false;
-  if ([
-    diagObj.db.LINETYPE.SOLID_OPEN,
-    diagObj.db.LINETYPE.DOTTED_OPEN,
-    diagObj.db.LINETYPE.SOLID,
-    diagObj.db.LINETYPE.DOTTED,
-    diagObj.db.LINETYPE.SOLID_CROSS,
-    diagObj.db.LINETYPE.DOTTED_CROSS,
-    diagObj.db.LINETYPE.SOLID_POINT,
-    diagObj.db.LINETYPE.DOTTED_POINT
-  ].includes(msg.type)) {
-    process = true;
-  }
-  if (!process) {
-    return {};
-  }
-  const fromBounds = activationBounds(msg.from, actors2);
-  const toBounds = activationBounds(msg.to, actors2);
-  const fromIdx = fromBounds[0] <= toBounds[0] ? 1 : 0;
-  const toIdx = fromBounds[0] < toBounds[0] ? 0 : 1;
-  const allBounds = [...fromBounds, ...toBounds];
-  const boundedWidth = Math.abs(toBounds[toIdx] - fromBounds[fromIdx]);
-  if (msg.wrap && msg.message) {
-    msg.message = mermaid_ae477ddf_utils.wrapLabel(
-      msg.message,
-      Math.max(boundedWidth + 2 * conf$3.wrapPadding, conf$3.width),
-      messageFont(conf$3)
-    );
-  }
-  const msgDims = mermaid_ae477ddf_utils.calculateTextDimensions(msg.message, messageFont(conf$3));
-  return {
-    width: Math.max(
-      msg.wrap ? 0 : msgDims.width + 2 * conf$3.wrapPadding,
-      boundedWidth + 2 * conf$3.wrapPadding,
-      conf$3.width
-    ),
-    height: 0,
-    startx: fromBounds[fromIdx],
-    stopx: toBounds[toIdx],
-    starty: 0,
-    stopy: 0,
-    message: msg.message,
-    type: msg.type,
-    wrap: msg.wrap,
-    fromBounds: Math.min.apply(null, allBounds),
-    toBounds: Math.max.apply(null, allBounds)
-  };
-};
-const calculateLoopBounds = function(messages2, actors2, _maxWidthPerActor, diagObj) {
-  const loops = {};
-  const stack = [];
-  let current, noteModel, msgModel;
-  messages2.forEach(function(msg) {
-    msg.id = mermaid_ae477ddf_utils.random({ length: 10 });
-    switch (msg.type) {
-      case diagObj.db.LINETYPE.LOOP_START:
-      case diagObj.db.LINETYPE.ALT_START:
-      case diagObj.db.LINETYPE.OPT_START:
-      case diagObj.db.LINETYPE.PAR_START:
-      case diagObj.db.LINETYPE.CRITICAL_START:
-      case diagObj.db.LINETYPE.BREAK_START:
-        stack.push({
-          id: msg.id,
-          msg: msg.message,
-          from: Number.MAX_SAFE_INTEGER,
-          to: Number.MIN_SAFE_INTEGER,
-          width: 0
-        });
-        break;
-      case diagObj.db.LINETYPE.ALT_ELSE:
-      case diagObj.db.LINETYPE.PAR_AND:
-      case diagObj.db.LINETYPE.CRITICAL_OPTION:
-        if (msg.message) {
-          current = stack.pop();
-          loops[current.id] = current;
-          loops[msg.id] = current;
-          stack.push(current);
-        }
-        break;
-      case diagObj.db.LINETYPE.LOOP_END:
-      case diagObj.db.LINETYPE.ALT_END:
-      case diagObj.db.LINETYPE.OPT_END:
-      case diagObj.db.LINETYPE.PAR_END:
-      case diagObj.db.LINETYPE.CRITICAL_END:
-      case diagObj.db.LINETYPE.BREAK_END:
-        current = stack.pop();
-        loops[current.id] = current;
-        break;
-      case diagObj.db.LINETYPE.ACTIVE_START:
-        {
-          const actorRect = actors2[msg.from ? msg.from.actor : msg.to.actor];
-          const stackedSize = actorActivations(msg.from ? msg.from.actor : msg.to.actor).length;
-          const x = actorRect.x + actorRect.width / 2 + (stackedSize - 1) * conf$3.activationWidth / 2;
-          const toAdd = {
-            startx: x,
-            stopx: x + conf$3.activationWidth,
-            actor: msg.from.actor,
-            enabled: true
-          };
-          bounds$1.activations.push(toAdd);
-        }
-        break;
-      case diagObj.db.LINETYPE.ACTIVE_END:
-        {
-          const lastActorActivationIdx = bounds$1.activations.map((a) => a.actor).lastIndexOf(msg.from.actor);
-          delete bounds$1.activations.splice(lastActorActivationIdx, 1)[0];
-        }
-        break;
-    }
-    const isNote = msg.placement !== void 0;
-    if (isNote) {
-      noteModel = buildNoteModel(msg, actors2, diagObj);
-      msg.noteModel = noteModel;
-      stack.forEach((stk) => {
-        current = stk;
-        current.from = Math.min(current.from, noteModel.startx);
-        current.to = Math.max(current.to, noteModel.startx + noteModel.width);
-        current.width = Math.max(current.width, Math.abs(current.from - current.to)) - conf$3.labelBoxWidth;
-      });
-    } else {
-      msgModel = buildMessageModel(msg, actors2, diagObj);
-      msg.msgModel = msgModel;
-      if (msgModel.startx && msgModel.stopx && stack.length > 0) {
-        stack.forEach((stk) => {
-          current = stk;
-          if (msgModel.startx === msgModel.stopx) {
-            const from = actors2[msg.from];
-            const to = actors2[msg.to];
-            current.from = Math.min(
-              from.x - msgModel.width / 2,
-              from.x - from.width / 2,
-              current.from
-            );
-            current.to = Math.max(to.x + msgModel.width / 2, to.x + from.width / 2, current.to);
-            current.width = Math.max(current.width, Math.abs(current.to - current.from)) - conf$3.labelBoxWidth;
-          } else {
-            current.from = Math.min(msgModel.startx, current.from);
-            current.to = Math.max(msgModel.stopx, current.to);
-            current.width = Math.max(current.width, msgModel.width) - conf$3.labelBoxWidth;
-          }
-        });
-      }
-    }
-  });
-  bounds$1.activations = [];
-  log$1.debug("Loop type widths:", loops);
-  return loops;
-};
-const sequenceRenderer = {
-  bounds: bounds$1,
-  drawActors,
-  drawActorsPopup,
-  setConf: setConf$4,
-  draw: draw$4
-};
-var parser$1 = function() {
-  var o = function(k, v, o2, l) {
-    for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
-      ;
-    return o2;
-  }, $V0 = [1, 2], $V1 = [1, 3], $V2 = [1, 5], $V3 = [1, 7], $V4 = [2, 5], $V5 = [1, 15], $V6 = [1, 17], $V7 = [1, 21], $V8 = [1, 22], $V9 = [1, 23], $Va = [1, 24], $Vb = [1, 37], $Vc = [1, 25], $Vd = [1, 26], $Ve = [1, 27], $Vf = [1, 28], $Vg = [1, 29], $Vh = [1, 32], $Vi = [1, 33], $Vj = [1, 34], $Vk = [1, 35], $Vl = [1, 36], $Vm = [1, 39], $Vn = [1, 40], $Vo = [1, 41], $Vp = [1, 42], $Vq = [1, 38], $Vr = [1, 45], $Vs = [1, 4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vt = [1, 4, 5, 14, 15, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vu = [1, 4, 5, 7, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $Vv = [4, 5, 16, 17, 19, 21, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60];
-  var parser2 = {
-    trace: function trace() {
-    },
-    yy: {},
-    symbols_: { "error": 2, "start": 3, "SPACE": 4, "NL": 5, "directive": 6, "SD": 7, "document": 8, "line": 9, "statement": 10, "classDefStatement": 11, "cssClassStatement": 12, "idStatement": 13, "DESCR": 14, "-->": 15, "HIDE_EMPTY": 16, "scale": 17, "WIDTH": 18, "COMPOSIT_STATE": 19, "STRUCT_START": 20, "STRUCT_STOP": 21, "STATE_DESCR": 22, "AS": 23, "ID": 24, "FORK": 25, "JOIN": 26, "CHOICE": 27, "CONCURRENT": 28, "note": 29, "notePosition": 30, "NOTE_TEXT": 31, "direction": 32, "acc_title": 33, "acc_title_value": 34, "acc_descr": 35, "acc_descr_value": 36, "acc_descr_multiline_value": 37, "classDef": 38, "CLASSDEF_ID": 39, "CLASSDEF_STYLEOPTS": 40, "DEFAULT": 41, "class": 42, "CLASSENTITY_IDS": 43, "STYLECLASS": 44, "openDirective": 45, "typeDirective": 46, "closeDirective": 47, ":": 48, "argDirective": 49, "direction_tb": 50, "direction_bt": 51, "direction_rl": 52, "direction_lr": 53, "eol": 54, ";": 55, "EDGE_STATE": 56, "STYLE_SEPARATOR": 57, "left_of": 58, "right_of": 59, "open_directive": 60, "type_directive": 61, "arg_directive": 62, "close_directive": 63, "$accept": 0, "$end": 1 },
-    terminals_: { 2: "error", 4: "SPACE", 5: "NL", 7: "SD", 14: "DESCR", 15: "-->", 16: "HIDE_EMPTY", 17: "scale", 18: "WIDTH", 19: "COMPOSIT_STATE", 20: "STRUCT_START", 21: "STRUCT_STOP", 22: "STATE_DESCR", 23: "AS", 24: "ID", 25: "FORK", 26: "JOIN", 27: "CHOICE", 28: "CONCURRENT", 29: "note", 31: "NOTE_TEXT", 33: "acc_title", 34: "acc_title_value", 35: "acc_descr", 36: "acc_descr_value", 37: "acc_descr_multiline_value", 38: "classDef", 39: "CLASSDEF_ID", 40: "CLASSDEF_STYLEOPTS", 41: "DEFAULT", 42: "class", 43: "CLASSENTITY_IDS", 44: "STYLECLASS", 48: ":", 50: "direction_tb", 51: "direction_bt", 52: "direction_rl", 53: "direction_lr", 55: ";", 56: "EDGE_STATE", 57: "STYLE_SEPARATOR", 58: "left_of", 59: "right_of", 60: "open_directive", 61: "type_directive", 62: "arg_directive", 63: "close_directive" },
-    productions_: [0, [3, 2], [3, 2], [3, 2], [3, 2], [8, 0], [8, 2], [9, 2], [9, 1], [9, 1], [10, 1], [10, 1], [10, 1], [10, 2], [10, 3], [10, 4], [10, 1], [10, 2], [10, 1], [10, 4], [10, 3], [10, 6], [10, 1], [10, 1], [10, 1], [10, 1], [10, 4], [10, 4], [10, 1], [10, 1], [10, 2], [10, 2], [10, 1], [11, 3], [11, 3], [12, 3], [6, 3], [6, 5], [32, 1], [32, 1], [32, 1], [32, 1], [54, 1], [54, 1], [13, 1], [13, 1], [13, 3], [13, 3], [30, 1], [30, 1], [45, 1], [46, 1], [49, 1], [47, 1]],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
-      var $0 = $$.length - 1;
-      switch (yystate) {
-        case 4:
-          yy.setRootDoc($$[$0]);
-          return $$[$0];
-        case 5:
-          this.$ = [];
-          break;
-        case 6:
-          if ($$[$0] != "nl") {
-            $$[$0 - 1].push($$[$0]);
-            this.$ = $$[$0 - 1];
-          }
-          break;
-        case 7:
-        case 8:
-          this.$ = $$[$0];
-          break;
-        case 9:
-          this.$ = "nl";
-          break;
-        case 12:
-          this.$ = $$[$0];
-          break;
-        case 13:
-          const stateStmt = $$[$0 - 1];
-          stateStmt.description = yy.trimColon($$[$0]);
-          this.$ = stateStmt;
-          break;
-        case 14:
-          this.$ = { stmt: "relation", state1: $$[$0 - 2], state2: $$[$0] };
-          break;
-        case 15:
-          const relDescription = yy.trimColon($$[$0]);
-          this.$ = { stmt: "relation", state1: $$[$0 - 3], state2: $$[$0 - 1], description: relDescription };
-          break;
-        case 19:
-          this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: "", doc: $$[$0 - 1] };
-          break;
-        case 20:
-          var id2 = $$[$0];
-          var description2 = $$[$0 - 2].trim();
-          if ($$[$0].match(":")) {
-            var parts = $$[$0].split(":");
-            id2 = parts[0];
-            description2 = [description2, parts[1]];
-          }
-          this.$ = { stmt: "state", id: id2, type: "default", description: description2 };
-          break;
-        case 21:
-          this.$ = { stmt: "state", id: $$[$0 - 3], type: "default", description: $$[$0 - 5], doc: $$[$0 - 1] };
-          break;
-        case 22:
-          this.$ = { stmt: "state", id: $$[$0], type: "fork" };
-          break;
-        case 23:
-          this.$ = { stmt: "state", id: $$[$0], type: "join" };
-          break;
-        case 24:
-          this.$ = { stmt: "state", id: $$[$0], type: "choice" };
-          break;
-        case 25:
-          this.$ = { stmt: "state", id: yy.getDividerId(), type: "divider" };
-          break;
-        case 26:
-          this.$ = { stmt: "state", id: $$[$0 - 1].trim(), note: { position: $$[$0 - 2].trim(), text: $$[$0].trim() } };
-          break;
-        case 30:
-          this.$ = $$[$0].trim();
-          yy.setAccTitle(this.$);
-          break;
-        case 31:
-        case 32:
-          this.$ = $$[$0].trim();
-          yy.setAccDescription(this.$);
-          break;
-        case 33:
-        case 34:
-          this.$ = { stmt: "classDef", id: $$[$0 - 1].trim(), classes: $$[$0].trim() };
-          break;
-        case 35:
-          this.$ = { stmt: "applyClass", id: $$[$0 - 1].trim(), styleClass: $$[$0].trim() };
-          break;
-        case 38:
-          yy.setDirection("TB");
-          this.$ = { stmt: "dir", value: "TB" };
-          break;
-        case 39:
-          yy.setDirection("BT");
-          this.$ = { stmt: "dir", value: "BT" };
-          break;
-        case 40:
-          yy.setDirection("RL");
-          this.$ = { stmt: "dir", value: "RL" };
-          break;
-        case 41:
-          yy.setDirection("LR");
-          this.$ = { stmt: "dir", value: "LR" };
-          break;
-        case 44:
-        case 45:
-          this.$ = { stmt: "state", id: $$[$0].trim(), type: "default", description: "" };
-          break;
-        case 46:
-          this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" };
-          break;
-        case 47:
-          this.$ = { stmt: "state", id: $$[$0 - 2].trim(), classes: [$$[$0].trim()], type: "default", description: "" };
-          break;
-        case 50:
-          yy.parseDirective("%%{", "open_directive");
-          break;
-        case 51:
-          yy.parseDirective($$[$0], "type_directive");
-          break;
-        case 52:
-          $$[$0] = $$[$0].trim().replace(/'/g, '"');
-          yy.parseDirective($$[$0], "arg_directive");
-          break;
-        case 53:
-          yy.parseDirective("}%%", "close_directive", "state");
-          break;
-      }
-    },
-    table: [{ 3: 1, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 1: [3] }, { 3: 8, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 3: 9, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, { 3: 10, 4: $V0, 5: $V1, 6: 4, 7: $V2, 45: 6, 60: $V3 }, o([1, 4, 5, 16, 17, 19, 22, 24, 25, 26, 27, 28, 29, 33, 35, 37, 38, 42, 50, 51, 52, 53, 56, 60], $V4, { 8: 11 }), { 46: 12, 61: [1, 13] }, { 61: [2, 50] }, { 1: [2, 1] }, { 1: [2, 2] }, { 1: [2, 3] }, { 1: [2, 4], 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, { 47: 43, 48: [1, 44], 63: $Vr }, o([48, 63], [2, 51]), o($Vs, [2, 6]), { 6: 30, 10: 46, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 8]), o($Vs, [2, 9]), o($Vs, [2, 10]), o($Vs, [2, 11]), o($Vs, [2, 12], { 14: [1, 47], 15: [1, 48] }), o($Vs, [2, 16]), { 18: [1, 49] }, o($Vs, [2, 18], { 20: [1, 50] }), { 23: [1, 51] }, o($Vs, [2, 22]), o($Vs, [2, 23]), o($Vs, [2, 24]), o($Vs, [2, 25]), { 30: 52, 31: [1, 53], 58: [1, 54], 59: [1, 55] }, o($Vs, [2, 28]), o($Vs, [2, 29]), { 34: [1, 56] }, { 36: [1, 57] }, o($Vs, [2, 32]), { 39: [1, 58], 41: [1, 59] }, { 43: [1, 60] }, o($Vt, [2, 44], { 57: [1, 61] }), o($Vt, [2, 45], { 57: [1, 62] }), o($Vs, [2, 38]), o($Vs, [2, 39]), o($Vs, [2, 40]), o($Vs, [2, 41]), o($Vu, [2, 36]), { 49: 63, 62: [1, 64] }, o($Vu, [2, 53]), o($Vs, [2, 7]), o($Vs, [2, 13]), { 13: 65, 24: $Vb, 56: $Vq }, o($Vs, [2, 17]), o($Vv, $V4, { 8: 66 }), { 24: [1, 67] }, { 24: [1, 68] }, { 23: [1, 69] }, { 24: [2, 48] }, { 24: [2, 49] }, o($Vs, [2, 30]), o($Vs, [2, 31]), { 40: [1, 70] }, { 40: [1, 71] }, { 44: [1, 72] }, { 24: [1, 73] }, { 24: [1, 74] }, { 47: 75, 63: $Vr }, { 63: [2, 52] }, o($Vs, [2, 14], { 14: [1, 76] }), { 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 21: [1, 77], 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 20], { 20: [1, 78] }), { 31: [1, 79] }, { 24: [1, 80] }, o($Vs, [2, 33]), o($Vs, [2, 34]), o($Vs, [2, 35]), o($Vt, [2, 46]), o($Vt, [2, 47]), o($Vu, [2, 37]), o($Vs, [2, 15]), o($Vs, [2, 19]), o($Vv, $V4, { 8: 81 }), o($Vs, [2, 26]), o($Vs, [2, 27]), { 4: $V5, 5: $V6, 6: 30, 9: 14, 10: 16, 11: 18, 12: 19, 13: 20, 16: $V7, 17: $V8, 19: $V9, 21: [1, 82], 22: $Va, 24: $Vb, 25: $Vc, 26: $Vd, 27: $Ve, 28: $Vf, 29: $Vg, 32: 31, 33: $Vh, 35: $Vi, 37: $Vj, 38: $Vk, 42: $Vl, 45: 6, 50: $Vm, 51: $Vn, 52: $Vo, 53: $Vp, 56: $Vq, 60: $V3 }, o($Vs, [2, 21])],
-    defaultActions: { 7: [2, 50], 8: [2, 1], 9: [2, 2], 10: [2, 3], 54: [2, 48], 55: [2, 49], 64: [2, 52] },
-    parseError: function parseError(str2, hash) {
-      if (hash.recoverable) {
-        this.trace(str2);
-      } else {
-        var error = new Error(str2);
-        error.hash = hash;
-        throw error;
-      }
-    },
-    parse: function parse2(input) {
-      var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;
-      var args = lstack.slice.call(arguments, 1);
-      var lexer2 = Object.create(this.lexer);
-      var sharedState = { yy: {} };
-      for (var k in this.yy) {
-        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
-          sharedState.yy[k] = this.yy[k];
-        }
-      }
-      lexer2.setInput(input, sharedState.yy);
-      sharedState.yy.lexer = lexer2;
-      sharedState.yy.parser = this;
-      if (typeof lexer2.yylloc == "undefined") {
-        lexer2.yylloc = {};
-      }
-      var yyloc = lexer2.yylloc;
-      lstack.push(yyloc);
-      var ranges = lexer2.options && lexer2.options.ranges;
-      if (typeof sharedState.yy.parseError === "function") {
-        this.parseError = sharedState.yy.parseError;
-      } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-      }
-      function lex2() {
-        var token;
-        token = tstack.pop() || lexer2.lex() || EOF;
-        if (typeof token !== "number") {
-          if (token instanceof Array) {
-            tstack = token;
-            token = tstack.pop();
-          }
-          token = self.symbols_[token] || token;
-        }
-        return token;
-      }
-      var symbol, state, action, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-          action = this.defaultActions[state];
-        } else {
-          if (symbol === null || typeof symbol == "undefined") {
-            symbol = lex2();
-          }
-          action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-          var errStr = "";
-          expected = [];
-          for (p in table[state]) {
-            if (this.terminals_[p] && p > TERROR) {
-              expected.push("'" + this.terminals_[p] + "'");
-            }
-          }
-          if (lexer2.showPosition) {
-            errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-          } else {
-            errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
-          }
-          this.parseError(errStr, {
-            text: lexer2.match,
-            token: this.terminals_[symbol] || symbol,
-            line: lexer2.yylineno,
-            loc: yyloc,
-            expected
-          });
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-          throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-          case 1:
-            stack.push(symbol);
-            vstack.push(lexer2.yytext);
-            lstack.push(lexer2.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            {
-              yyleng = lexer2.yyleng;
-              yytext = lexer2.yytext;
-              yylineno = lexer2.yylineno;
-              yyloc = lexer2.yylloc;
-            }
-            break;
-          case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-              first_line: lstack[lstack.length - (len || 1)].first_line,
-              last_line: lstack[lstack.length - 1].last_line,
-              first_column: lstack[lstack.length - (len || 1)].first_column,
-              last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-              yyval._$.range = [
-                lstack[lstack.length - (len || 1)].range[0],
-                lstack[lstack.length - 1].range[1]
-              ];
-            }
-            r = this.performAction.apply(yyval, [
-              yytext,
-              yyleng,
-              yylineno,
-              sharedState.yy,
-              action[1],
-              vstack,
-              lstack
-            ].concat(args));
-            if (typeof r !== "undefined") {
-              return r;
-            }
-            if (len) {
-              stack = stack.slice(0, -1 * len * 2);
-              vstack = vstack.slice(0, -1 * len);
-              lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-          case 3:
-            return true;
-        }
-      }
-      return true;
-    }
-  };
-  var lexer = function() {
-    var lexer2 = {
-      EOF: 1,
-      parseError: function parseError(str2, hash) {
-        if (this.yy.parser) {
-          this.yy.parser.parseError(str2, hash);
-        } else {
-          throw new Error(str2);
-        }
-      },
-      // resets the lexer, sets new input
-      setInput: function(input, yy) {
-        this.yy = yy || this.yy || {};
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = "";
-        this.conditionStack = ["INITIAL"];
-        this.yylloc = {
-          first_line: 1,
-          first_column: 0,
-          last_line: 1,
-          last_column: 0
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [0, 0];
-        }
-        this.offset = 0;
-        return this;
-      },
-      // consumes and returns one char from the input
-      input: function() {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno++;
-          this.yylloc.last_line++;
-        } else {
-          this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-          this.yylloc.range[1]++;
-        }
-        this._input = this._input.slice(1);
-        return ch;
-      },
-      // unshifts one char (or a string) into the input
-      unput: function(ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len);
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-        if (lines.length - 1) {
-          this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-        this.yylloc = {
-          first_line: this.yylloc.first_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.first_column,
-          last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-      },
-      // When called from action, caches matched text and appends it on next action
-      more: function() {
-        this._more = true;
-        return this;
-      },
-      // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-      reject: function() {
-        if (this.options.backtrack_lexer) {
-          this._backtrack = true;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-        return this;
-      },
-      // retain first n characters of the match
-      less: function(n) {
-        this.unput(this.match.slice(n));
-      },
-      // displays already matched input, i.e. for error messages
-      pastInput: function() {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
-      },
-      // displays upcoming input, i.e. for error messages
-      upcomingInput: function() {
-        var next = this.match;
-        if (next.length < 20) {
-          next += this._input.substr(0, 20 - next.length);
-        }
-        return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
-      },
-      // displays the character position where the lexing error occurred, i.e. for error messages
-      showPosition: function() {
-        var pre = this.pastInput();
-        var c2 = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c2 + "^";
-      },
-      // test the lexed token: return FALSE when not a match, otherwise return token
-      test_match: function(match, indexed_rule) {
-        var token, lines, backup;
-        if (this.options.backtrack_lexer) {
-          backup = {
-            yylineno: this.yylineno,
-            yylloc: {
-              first_line: this.yylloc.first_line,
-              last_line: this.last_line,
-              first_column: this.yylloc.first_column,
-              last_column: this.yylloc.last_column
-            },
-            yytext: this.yytext,
-            match: this.match,
-            matches: this.matches,
-            matched: this.matched,
-            yyleng: this.yyleng,
-            offset: this.offset,
-            _more: this._more,
-            _input: this._input,
-            yy: this.yy,
-            conditionStack: this.conditionStack.slice(0),
-            done: this.done
-          };
-          if (this.options.ranges) {
-            backup.yylloc.range = this.yylloc.range.slice(0);
-          }
-        }
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno += lines.length;
-        }
-        this.yylloc = {
-          first_line: this.yylloc.last_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.last_column,
-          last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-          this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-          this.done = false;
-        }
-        if (token) {
-          return token;
-        } else if (this._backtrack) {
-          for (var k in backup) {
-            this[k] = backup[k];
-          }
-          return false;
-        }
-        return false;
-      },
-      // return next match in input
-      next: function() {
-        if (this.done) {
-          return this.EOF;
-        }
-        if (!this._input) {
-          this.done = true;
-        }
-        var token, match, tempMatch, index;
-        if (!this._more) {
-          this.yytext = "";
-          this.match = "";
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-          tempMatch = this._input.match(this.rules[rules[i]]);
-          if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-            match = tempMatch;
-            index = i;
-            if (this.options.backtrack_lexer) {
-              token = this.test_match(tempMatch, rules[i]);
-              if (token !== false) {
-                return token;
-              } else if (this._backtrack) {
-                match = false;
-                continue;
-              } else {
-                return false;
-              }
-            } else if (!this.options.flex) {
-              break;
-            }
-          }
-        }
-        if (match) {
-          token = this.test_match(match, rules[index]);
-          if (token !== false) {
-            return token;
-          }
-          return false;
-        }
-        if (this._input === "") {
-          return this.EOF;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-      },
-      // return next match that has a token
-      lex: function lex2() {
-        var r = this.next();
-        if (r) {
-          return r;
-        } else {
-          return this.lex();
-        }
-      },
-      // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-      begin: function begin(condition) {
-        this.conditionStack.push(condition);
-      },
-      // pop the previously active lexer condition state off the condition stack
-      popState: function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-          return this.conditionStack.pop();
-        } else {
-          return this.conditionStack[0];
-        }
-      },
-      // produce the lexer rule set which is active for the currently active lexer condition state
-      _currentRules: function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-          return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-          return this.conditions["INITIAL"].rules;
-        }
-      },
-      // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-      topState: function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-          return this.conditionStack[n];
-        } else {
-          return "INITIAL";
-        }
-      },
-      // alias for begin(condition)
-      pushState: function pushState(condition) {
-        this.begin(condition);
-      },
-      // return the number of states currently on the stack
-      stateStackSize: function stateStackSize() {
-        return this.conditionStack.length;
-      },
-      options: { "case-insensitive": true },
-      performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
-        switch ($avoiding_name_collisions) {
-          case 0:
-            return 41;
-          case 1:
-            return 50;
-          case 2:
-            return 51;
-          case 3:
-            return 52;
-          case 4:
-            return 53;
-          case 5:
-            this.begin("open_directive");
-            return 60;
-          case 6:
-            this.begin("type_directive");
-            return 61;
-          case 7:
-            this.popState();
-            this.begin("arg_directive");
-            return 48;
-          case 8:
-            this.popState();
-            this.popState();
-            return 63;
-          case 9:
-            return 62;
-          case 10:
-            break;
-          case 11:
-            break;
-          case 12:
-            return 5;
-          case 13:
-            break;
-          case 14:
-            break;
-          case 15:
-            break;
-          case 16:
-            break;
-          case 17:
-            this.pushState("SCALE");
-            return 17;
-          case 18:
-            return 18;
-          case 19:
-            this.popState();
-            break;
-          case 20:
-            this.begin("acc_title");
-            return 33;
-          case 21:
-            this.popState();
-            return "acc_title_value";
-          case 22:
-            this.begin("acc_descr");
-            return 35;
-          case 23:
-            this.popState();
-            return "acc_descr_value";
-          case 24:
-            this.begin("acc_descr_multiline");
-            break;
-          case 25:
-            this.popState();
-            break;
-          case 26:
-            return "acc_descr_multiline_value";
-          case 27:
-            this.pushState("CLASSDEF");
-            return 38;
-          case 28:
-            this.popState();
-            this.pushState("CLASSDEFID");
-            return "DEFAULT_CLASSDEF_ID";
-          case 29:
-            this.popState();
-            this.pushState("CLASSDEFID");
-            return 39;
-          case 30:
-            this.popState();
-            return 40;
-          case 31:
-            this.pushState("CLASS");
-            return 42;
-          case 32:
-            this.popState();
-            this.pushState("CLASS_STYLE");
-            return 43;
-          case 33:
-            this.popState();
-            return 44;
-          case 34:
-            this.pushState("SCALE");
-            return 17;
-          case 35:
-            return 18;
-          case 36:
-            this.popState();
-            break;
-          case 37:
-            this.pushState("STATE");
-            break;
-          case 38:
-            this.popState();
-            yy_.yytext = yy_.yytext.slice(0, -8).trim();
-            return 25;
-          case 39:
-            this.popState();
-            yy_.yytext = yy_.yytext.slice(0, -8).trim();
-            return 26;
-          case 40:
-            this.popState();
-            yy_.yytext = yy_.yytext.slice(0, -10).trim();
-            return 27;
-          case 41:
-            this.popState();
-            yy_.yytext = yy_.yytext.slice(0, -8).trim();
-            return 25;
-          case 42:
-            this.popState();
-            yy_.yytext = yy_.yytext.slice(0, -8).trim();
-            return 26;
-          case 43:
-            this.popState();
-            yy_.yytext = yy_.yytext.slice(0, -10).trim();
-            return 27;
-          case 44:
-            return 50;
-          case 45:
-            return 51;
-          case 46:
-            return 52;
-          case 47:
-            return 53;
-          case 48:
-            this.pushState("STATE_STRING");
-            break;
-          case 49:
-            this.pushState("STATE_ID");
-            return "AS";
-          case 50:
-            this.popState();
-            return "ID";
-          case 51:
-            this.popState();
-            break;
-          case 52:
-            return "STATE_DESCR";
-          case 53:
-            return 19;
-          case 54:
-            this.popState();
-            break;
-          case 55:
-            this.popState();
-            this.pushState("struct");
-            return 20;
-          case 56:
-            break;
-          case 57:
-            this.popState();
-            return 21;
-          case 58:
-            break;
-          case 59:
-            this.begin("NOTE");
-            return 29;
-          case 60:
-            this.popState();
-            this.pushState("NOTE_ID");
-            return 58;
-          case 61:
-            this.popState();
-            this.pushState("NOTE_ID");
-            return 59;
-          case 62:
-            this.popState();
-            this.pushState("FLOATING_NOTE");
-            break;
-          case 63:
-            this.popState();
-            this.pushState("FLOATING_NOTE_ID");
-            return "AS";
-          case 64:
-            break;
-          case 65:
-            return "NOTE_TEXT";
-          case 66:
-            this.popState();
-            return "ID";
-          case 67:
-            this.popState();
-            this.pushState("NOTE_TEXT");
-            return 24;
-          case 68:
-            this.popState();
-            yy_.yytext = yy_.yytext.substr(2).trim();
-            return 31;
-          case 69:
-            this.popState();
-            yy_.yytext = yy_.yytext.slice(0, -8).trim();
-            return 31;
-          case 70:
-            return 7;
-          case 71:
-            return 7;
-          case 72:
-            return 16;
-          case 73:
-            return 56;
-          case 74:
-            return 24;
-          case 75:
-            yy_.yytext = yy_.yytext.trim();
-            return 14;
-          case 76:
-            return 15;
-          case 77:
-            return 28;
-          case 78:
-            return 57;
-          case 79:
-            return 5;
-          case 80:
-            return "INVALID";
-        }
-      },
-      rules: [/^(?:default\b)/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:[\s]+)/i, /^(?:((?!\n)\s)+)/i, /^(?:#[^\n]*)/i, /^(?:%[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:classDef\s+)/i, /^(?:DEFAULT\s+)/i, /^(?:\w+\s+)/i, /^(?:[^\n]*)/i, /^(?:class\s+)/i, /^(?:(\w+)+((,\s*\w+)*))/i, /^(?:[^\n]*)/i, /^(?:scale\s+)/i, /^(?:\d+)/i, /^(?:\s+width\b)/i, /^(?:state\s+)/i, /^(?:.*<<fork>>)/i, /^(?:.*<<join>>)/i, /^(?:.*<<choice>>)/i, /^(?:.*\[\[fork\]\])/i, /^(?:.*\[\[join\]\])/i, /^(?:.*\[\[choice\]\])/i, /^(?:.*direction\s+TB[^\n]*)/i, /^(?:.*direction\s+BT[^\n]*)/i, /^(?:.*direction\s+RL[^\n]*)/i, /^(?:.*direction\s+LR[^\n]*)/i, /^(?:["])/i, /^(?:\s*as\s+)/i, /^(?:[^\n\{]*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n\s\{]+)/i, /^(?:\n)/i, /^(?:\{)/i, /^(?:%%(?!\{)[^\n]*)/i, /^(?:\})/i, /^(?:[\n])/i, /^(?:note\s+)/i, /^(?:left of\b)/i, /^(?:right of\b)/i, /^(?:")/i, /^(?:\s*as\s*)/i, /^(?:["])/i, /^(?:[^"]*)/i, /^(?:[^\n]*)/i, /^(?:\s*[^:\n\s\-]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:[\s\S]*?end note\b)/i, /^(?:stateDiagram\s+)/i, /^(?:stateDiagram-v2\s+)/i, /^(?:hide empty description\b)/i, /^(?:\[\*\])/i, /^(?:[^:\n\s\-\{]+)/i, /^(?:\s*:[^:\n;]+)/i, /^(?:-->)/i, /^(?:--)/i, /^(?::::)/i, /^(?:$)/i, /^(?:.)/i],
-      conditions: { "LINE": { "rules": [14, 15], "inclusive": false }, "close_directive": { "rules": [14, 15], "inclusive": false }, "arg_directive": { "rules": [8, 9, 14, 15], "inclusive": false }, "type_directive": { "rules": [7, 8, 14, 15], "inclusive": false }, "open_directive": { "rules": [6, 14, 15], "inclusive": false }, "struct": { "rules": [14, 15, 27, 31, 37, 44, 45, 46, 47, 56, 57, 58, 59, 73, 74, 75, 76, 77], "inclusive": false }, "FLOATING_NOTE_ID": { "rules": [66], "inclusive": false }, "FLOATING_NOTE": { "rules": [63, 64, 65], "inclusive": false }, "NOTE_TEXT": { "rules": [68, 69], "inclusive": false }, "NOTE_ID": { "rules": [67], "inclusive": false }, "NOTE": { "rules": [60, 61, 62], "inclusive": false }, "CLASS_STYLE": { "rules": [33], "inclusive": false }, "CLASS": { "rules": [32], "inclusive": false }, "CLASSDEFID": { "rules": [30], "inclusive": false }, "CLASSDEF": { "rules": [28, 29], "inclusive": false }, "acc_descr_multiline": { "rules": [25, 26], "inclusive": false }, "acc_descr": { "rules": [23], "inclusive": false }, "acc_title": { "rules": [21], "inclusive": false }, "SCALE": { "rules": [18, 19, 35, 36], "inclusive": false }, "ALIAS": { "rules": [], "inclusive": false }, "STATE_ID": { "rules": [50], "inclusive": false }, "STATE_STRING": { "rules": [51, 52], "inclusive": false }, "FORK_STATE": { "rules": [], "inclusive": false }, "STATE": { "rules": [14, 15, 38, 39, 40, 41, 42, 43, 48, 49, 53, 54, 55], "inclusive": false }, "ID": { "rules": [14, 15], "inclusive": false }, "INITIAL": { "rules": [0, 1, 2, 3, 4, 5, 10, 11, 12, 13, 15, 16, 17, 20, 22, 24, 27, 31, 34, 37, 55, 59, 70, 71, 72, 73, 74, 75, 76, 78, 79, 80], "inclusive": true } }
-    };
-    return lexer2;
-  }();
-  parser2.lexer = lexer;
-  function Parser() {
-    this.yy = {};
-  }
-  Parser.prototype = parser2;
-  parser2.Parser = Parser;
-  return new Parser();
-}();
-parser$1.parser = parser$1;
-const stateParser = parser$1;
-const stateDetector = (txt, config2) => {
-  var _a;
-  if (((_a = config2 == null ? void 0 : config2.state) == null ? void 0 : _a.defaultRenderer) === "dagre-wrapper") {
-    return false;
-  }
-  return txt.match(/^\s*stateDiagram/) !== null;
-};
-const stateDetectorV2 = (text, config2) => {
-  var _a;
-  if (text.match(/^\s*stateDiagram-v2/) !== null) {
-    return true;
-  }
-  if (text.match(/^\s*stateDiagram/) && ((_a = config2 == null ? void 0 : config2.state) == null ? void 0 : _a.defaultRenderer) === "dagre-wrapper") {
-    return true;
-  }
-  return false;
-};
-const DEFAULT_DIAGRAM_DIRECTION = "LR";
-const DEFAULT_NESTED_DOC_DIR = "TB";
-const STMT_STATE = "state";
-const STMT_RELATION = "relation";
-const STMT_CLASSDEF = "classDef";
-const STMT_APPLYCLASS = "applyClass";
-const DEFAULT_STATE_TYPE = "default";
-const DIVIDER_TYPE = "divider";
-const START_NODE = "[*]";
-const START_TYPE = "start";
-const END_NODE = START_NODE;
-const END_TYPE = "end";
-const COLOR_KEYWORD = "color";
-const FILL_KEYWORD = "fill";
-const BG_FILL = "bgFill";
-const STYLECLASS_SEP = ",";
-function newClassesList() {
-  return {};
-}
-let direction = DEFAULT_DIAGRAM_DIRECTION;
-let rootDoc = [];
-let classes = newClassesList();
-const newDoc = () => {
-  return {
-    relations: [],
-    states: {},
-    documents: {}
-  };
-};
-let documents = {
-  root: newDoc()
-};
-let currentDocument = documents.root;
-let startEndCount = 0;
-let dividerCnt = 0;
-const lineType = {
-  LINE: 0,
-  DOTTED_LINE: 1
-};
-const relationType = {
-  AGGREGATION: 0,
-  EXTENSION: 1,
-  COMPOSITION: 2,
-  DEPENDENCY: 3
-};
-const clone = (o) => JSON.parse(JSON.stringify(o));
-const parseDirective$1 = function(statement, context, type2) {
-  mermaidAPI.parseDirective(this, statement, context, type2);
-};
-const setRootDoc = (o) => {
-  log$1.info("Setting root doc", o);
-  rootDoc = o;
-};
-const getRootDoc = () => rootDoc;
-const docTranslator = (parent, node, first) => {
-  if (node.stmt === STMT_RELATION) {
-    docTranslator(parent, node.state1, true);
-    docTranslator(parent, node.state2, false);
-  } else {
-    if (node.stmt === STMT_STATE) {
-      if (node.id === "[*]") {
-        node.id = first ? parent.id + "_start" : parent.id + "_end";
-        node.start = first;
-      } else {
-        node.id = node.id.trim();
-      }
-    }
-    if (node.doc) {
-      const doc = [];
-      let currentDoc = [];
-      let i;
-      for (i = 0; i < node.doc.length; i++) {
-        if (node.doc[i].type === DIVIDER_TYPE) {
-          const newNode = clone(node.doc[i]);
-          newNode.doc = clone(currentDoc);
-          doc.push(newNode);
-          currentDoc = [];
-        } else {
-          currentDoc.push(node.doc[i]);
-        }
-      }
-      if (doc.length > 0 && currentDoc.length > 0) {
-        const newNode = {
-          stmt: STMT_STATE,
-          id: generateId$1(),
-          type: "divider",
-          doc: clone(currentDoc)
-        };
-        doc.push(clone(newNode));
-        node.doc = doc;
-      }
-      node.doc.forEach((docNode) => docTranslator(node, docNode, true));
-    }
-  }
-};
-const getRootDocV2 = () => {
-  docTranslator({ id: "root" }, { id: "root", doc: rootDoc }, true);
-  return { id: "root", doc: rootDoc };
-};
-const extract = (_doc) => {
-  let doc;
-  if (_doc.doc) {
-    doc = _doc.doc;
-  } else {
-    doc = _doc;
-  }
-  log$1.info(doc);
-  clear$1(true);
-  log$1.info("Extract", doc);
-  doc.forEach((item) => {
-    switch (item.stmt) {
-      case STMT_STATE:
-        addState(
-          item.id.trim(),
-          item.type,
-          item.doc,
-          item.description,
-          item.note,
-          item.classes,
-          item.styles,
-          item.textStyles
-        );
-        break;
-      case STMT_RELATION:
-        addRelation(item.state1, item.state2, item.description);
-        break;
-      case STMT_CLASSDEF:
-        addStyleClass(item.id.trim(), item.classes);
-        break;
-      case STMT_APPLYCLASS:
-        setCssClass(item.id.trim(), item.styleClass);
-        break;
-    }
-  });
-};
-const addState = function(id2, type2 = DEFAULT_STATE_TYPE, doc = null, descr = null, note2 = null, classes2 = null, styles = null, textStyles = null) {
-  const trimmedId = id2 == null ? void 0 : id2.trim();
-  if (currentDocument.states[trimmedId] === void 0) {
-    log$1.info("Adding state ", trimmedId, descr);
-    currentDocument.states[trimmedId] = {
-      id: trimmedId,
-      descriptions: [],
-      type: type2,
-      doc,
-      note: note2,
-      classes: [],
-      styles: [],
-      textStyles: []
-    };
-  } else {
-    if (!currentDocument.states[trimmedId].doc) {
-      currentDocument.states[trimmedId].doc = doc;
-    }
-    if (!currentDocument.states[trimmedId].type) {
-      currentDocument.states[trimmedId].type = type2;
-    }
-  }
-  if (descr) {
-    log$1.info("Setting state description", trimmedId, descr);
-    if (typeof descr === "string") {
-      addDescription(trimmedId, descr.trim());
-    }
-    if (typeof descr === "object") {
-      descr.forEach((des) => addDescription(trimmedId, des.trim()));
-    }
-  }
-  if (note2) {
-    currentDocument.states[trimmedId].note = note2;
-    currentDocument.states[trimmedId].note.text = common$1.sanitizeText(
-      currentDocument.states[trimmedId].note.text,
-      getConfig$1()
-    );
-  }
-  if (classes2) {
-    log$1.info("Setting state classes", trimmedId, classes2);
-    const classesList = typeof classes2 === "string" ? [classes2] : classes2;
-    classesList.forEach((klass) => setCssClass(trimmedId, klass.trim()));
-  }
-  if (styles) {
-    log$1.info("Setting state styles", trimmedId, styles);
-    const stylesList = typeof styles === "string" ? [styles] : styles;
-    stylesList.forEach((style) => setStyle(trimmedId, style.trim()));
-  }
-  if (textStyles) {
-    log$1.info("Setting state styles", trimmedId, styles);
-    const textStylesList = typeof textStyles === "string" ? [textStyles] : textStyles;
-    textStylesList.forEach((textStyle) => setTextStyle(trimmedId, textStyle.trim()));
-  }
-};
-const clear$1 = function(saveCommon) {
-  documents = {
-    root: newDoc()
-  };
-  currentDocument = documents.root;
-  startEndCount = 0;
-  classes = newClassesList();
-  if (!saveCommon) {
-    clear$g();
-  }
-};
-const getState = function(id2) {
-  return currentDocument.states[id2];
-};
-const getStates = function() {
-  return currentDocument.states;
-};
-const logDocuments = function() {
-  log$1.info("Documents = ", documents);
-};
-const getRelations = function() {
-  return currentDocument.relations;
-};
-function startIdIfNeeded(id2 = "") {
-  let fixedId = id2;
-  if (id2 === START_NODE) {
-    startEndCount++;
-    fixedId = `${START_TYPE}${startEndCount}`;
-  }
-  return fixedId;
-}
-function startTypeIfNeeded(id2 = "", type2 = DEFAULT_STATE_TYPE) {
-  return id2 === START_NODE ? START_TYPE : type2;
-}
-function endIdIfNeeded(id2 = "") {
-  let fixedId = id2;
-  if (id2 === END_NODE) {
-    startEndCount++;
-    fixedId = `${END_TYPE}${startEndCount}`;
-  }
-  return fixedId;
-}
-function endTypeIfNeeded(id2 = "", type2 = DEFAULT_STATE_TYPE) {
-  return id2 === END_NODE ? END_TYPE : type2;
-}
-function addRelationObjs(item1, item2, relationTitle) {
-  let id1 = startIdIfNeeded(item1.id.trim());
-  let type1 = startTypeIfNeeded(item1.id.trim(), item1.type);
-  let id2 = startIdIfNeeded(item2.id.trim());
-  let type2 = startTypeIfNeeded(item2.id.trim(), item2.type);
-  addState(
-    id1,
-    type1,
-    item1.doc,
-    item1.description,
-    item1.note,
-    item1.classes,
-    item1.styles,
-    item1.textStyles
-  );
-  addState(
-    id2,
-    type2,
-    item2.doc,
-    item2.description,
-    item2.note,
-    item2.classes,
-    item2.styles,
-    item2.textStyles
-  );
-  currentDocument.relations.push({
-    id1,
-    id2,
-    relationTitle: common$1.sanitizeText(relationTitle, getConfig$1())
-  });
-}
-const addRelation = function(item1, item2, title2) {
-  if (typeof item1 === "object") {
-    addRelationObjs(item1, item2, title2);
-  } else {
-    const id1 = startIdIfNeeded(item1.trim());
-    const type1 = startTypeIfNeeded(item1);
-    const id2 = endIdIfNeeded(item2.trim());
-    const type2 = endTypeIfNeeded(item2);
-    addState(id1, type1);
-    addState(id2, type2);
-    currentDocument.relations.push({
-      id1,
-      id2,
-      title: common$1.sanitizeText(title2, getConfig$1())
-    });
-  }
-};
-const addDescription = function(id2, descr) {
-  const theState = currentDocument.states[id2];
-  const _descr = descr.startsWith(":") ? descr.replace(":", "").trim() : descr;
-  theState.descriptions.push(common$1.sanitizeText(_descr, getConfig$1()));
-};
-const cleanupLabel = function(label) {
-  if (label.substring(0, 1) === ":") {
-    return label.substr(2).trim();
-  } else {
-    return label.trim();
-  }
-};
-const getDividerId = () => {
-  dividerCnt++;
-  return "divider-id-" + dividerCnt;
-};
-const addStyleClass = function(id2, styleAttributes = "") {
-  if (classes[id2] === void 0) {
-    classes[id2] = { id: id2, styles: [], textStyles: [] };
-  }
-  const foundClass = classes[id2];
-  if (styleAttributes !== void 0 && styleAttributes !== null) {
-    styleAttributes.split(STYLECLASS_SEP).forEach((attrib) => {
-      const fixedAttrib = attrib.replace(/([^;]*);/, "$1").trim();
-      if (attrib.match(COLOR_KEYWORD)) {
-        const newStyle1 = fixedAttrib.replace(FILL_KEYWORD, BG_FILL);
-        const newStyle2 = newStyle1.replace(COLOR_KEYWORD, FILL_KEYWORD);
-        foundClass.textStyles.push(newStyle2);
-      }
-      foundClass.styles.push(fixedAttrib);
-    });
-  }
-};
-const getClasses$1 = function() {
-  return classes;
-};
-const setCssClass = function(itemIds, cssClassName) {
-  itemIds.split(",").forEach(function(id2) {
-    let foundState = getState(id2);
-    if (foundState === void 0) {
-      const trimmedId = id2.trim();
-      addState(trimmedId);
-      foundState = getState(trimmedId);
-    }
-    foundState.classes.push(cssClassName);
-  });
-};
-const setStyle = function(itemId, styleText) {
-  const item = getState(itemId);
-  if (item !== void 0) {
-    item.textStyles.push(styleText);
-  }
-};
-const setTextStyle = function(itemId, cssClassName) {
-  const item = getState(itemId);
-  if (item !== void 0) {
-    item.textStyles.push(cssClassName);
-  }
-};
-const getDirection = () => direction;
-const setDirection = (dir) => {
-  direction = dir;
-};
-const trimColon = (str2) => str2 && str2[0] === ":" ? str2.substr(1).trim() : str2.trim();
-const stateDb = {
-  parseDirective: parseDirective$1,
-  getConfig: () => getConfig$1().state,
-  addState,
-  clear: clear$1,
-  getState,
-  getStates,
-  getRelations,
-  getClasses: getClasses$1,
-  getDirection,
-  addRelation,
-  getDividerId,
-  setDirection,
-  cleanupLabel,
-  lineType,
-  relationType,
-  logDocuments,
-  getRootDoc,
-  setRootDoc,
-  getRootDocV2,
-  extract,
-  trimColon,
-  getAccTitle,
-  setAccTitle,
-  getAccDescription,
-  setAccDescription,
-  addStyleClass,
-  setCssClass,
-  addDescription,
-  setDiagramTitle,
-  getDiagramTitle
-};
-const idCache = {};
-const set = (key, val) => {
-  idCache[key] = val;
-};
-const get = (k) => idCache[k];
-const keys = () => Object.keys(idCache);
-const size = () => keys().length;
-const idCache$1 = {
-  get,
-  set,
-  keys,
-  size
-};
-const drawStartState = (g) => g.append("circle").attr("class", "start-state").attr("r", getConfig$1().state.sizeUnit).attr("cx", getConfig$1().state.padding + getConfig$1().state.sizeUnit).attr("cy", getConfig$1().state.padding + getConfig$1().state.sizeUnit);
-const drawDivider = (g) => g.append("line").style("stroke", "grey").style("stroke-dasharray", "3").attr("x1", getConfig$1().state.textHeight).attr("class", "divider").attr("x2", getConfig$1().state.textHeight * 2).attr("y1", 0).attr("y2", 0);
-const drawSimpleState = (g, stateDef) => {
-  const state = g.append("text").attr("x", 2 * getConfig$1().state.padding).attr("y", getConfig$1().state.textHeight + 2 * getConfig$1().state.padding).attr("font-size", getConfig$1().state.fontSize).attr("class", "state-title").text(stateDef.id);
-  const classBox = state.node().getBBox();
-  g.insert("rect", ":first-child").attr("x", getConfig$1().state.padding).attr("y", getConfig$1().state.padding).attr("width", classBox.width + 2 * getConfig$1().state.padding).attr("height", classBox.height + 2 * getConfig$1().state.padding).attr("rx", getConfig$1().state.radius);
-  return state;
-};
-const drawDescrState = (g, stateDef) => {
-  const addTspan2 = function(textEl, txt, isFirst2) {
-    const tSpan = textEl.append("tspan").attr("x", 2 * getConfig$1().state.padding).text(txt);
-    if (!isFirst2) {
-      tSpan.attr("dy", getConfig$1().state.textHeight);
-    }
-  };
-  const title2 = g.append("text").attr("x", 2 * getConfig$1().state.padding).attr("y", getConfig$1().state.textHeight + 1.3 * getConfig$1().state.padding).attr("font-size", getConfig$1().state.fontSize).attr("class", "state-title").text(stateDef.descriptions[0]);
-  const titleBox = title2.node().getBBox();
-  const titleHeight = titleBox.height;
-  const description2 = g.append("text").attr("x", getConfig$1().state.padding).attr(
-    "y",
-    titleHeight + getConfig$1().state.padding * 0.4 + getConfig$1().state.dividerMargin + getConfig$1().state.textHeight
-  ).attr("class", "state-description");
-  let isFirst = true;
-  let isSecond = true;
-  stateDef.descriptions.forEach(function(descr) {
-    if (!isFirst) {
-      addTspan2(description2, descr, isSecond);
-      isSecond = false;
-    }
-    isFirst = false;
-  });
-  const descrLine = g.append("line").attr("x1", getConfig$1().state.padding).attr("y1", getConfig$1().state.padding + titleHeight + getConfig$1().state.dividerMargin / 2).attr("y2", getConfig$1().state.padding + titleHeight + getConfig$1().state.dividerMargin / 2).attr("class", "descr-divider");
-  const descrBox = description2.node().getBBox();
-  const width2 = Math.max(descrBox.width, titleBox.width);
-  descrLine.attr("x2", width2 + 3 * getConfig$1().state.padding);
-  g.insert("rect", ":first-child").attr("x", getConfig$1().state.padding).attr("y", getConfig$1().state.padding).attr("width", width2 + 2 * getConfig$1().state.padding).attr("height", descrBox.height + titleHeight + 2 * getConfig$1().state.padding).attr("rx", getConfig$1().state.radius);
-  return g;
-};
-const addTitleAndBox = (g, stateDef, altBkg) => {
-  const pad = getConfig$1().state.padding;
-  const dblPad = 2 * getConfig$1().state.padding;
-  const orgBox = g.node().getBBox();
-  const orgWidth = orgBox.width;
-  const orgX = orgBox.x;
-  const title2 = g.append("text").attr("x", 0).attr("y", getConfig$1().state.titleShift).attr("font-size", getConfig$1().state.fontSize).attr("class", "state-title").text(stateDef.id);
-  const titleBox = title2.node().getBBox();
-  const titleWidth = titleBox.width + dblPad;
-  let width2 = Math.max(titleWidth, orgWidth);
-  if (width2 === orgWidth) {
-    width2 = width2 + dblPad;
-  }
-  let startX;
-  const graphBox = g.node().getBBox();
-  if (stateDef.doc)
-    ;
-  startX = orgX - pad;
-  if (titleWidth > orgWidth) {
-    startX = (orgWidth - width2) / 2 + pad;
-  }
-  if (Math.abs(orgX - graphBox.x) < pad && titleWidth > orgWidth) {
-    startX = orgX - (titleWidth - orgWidth) / 2;
-  }
-  const lineY = 1 - getConfig$1().state.textHeight;
-  g.insert("rect", ":first-child").attr("x", startX).attr("y", lineY).attr("class", altBkg ? "alt-composit" : "composit").attr("width", width2).attr(
-    "height",
-    graphBox.height + getConfig$1().state.textHeight + getConfig$1().state.titleShift + 1
-  ).attr("rx", "0");
-  title2.attr("x", startX + pad);
-  if (titleWidth <= orgWidth) {
-    title2.attr("x", orgX + (width2 - dblPad) / 2 - titleWidth / 2 + pad);
-  }
-  g.insert("rect", ":first-child").attr("x", startX).attr(
-    "y",
-    getConfig$1().state.titleShift - getConfig$1().state.textHeight - getConfig$1().state.padding
-  ).attr("width", width2).attr("height", getConfig$1().state.textHeight * 3).attr("rx", getConfig$1().state.radius);
-  g.insert("rect", ":first-child").attr("x", startX).attr(
-    "y",
-    getConfig$1().state.titleShift - getConfig$1().state.textHeight - getConfig$1().state.padding
-  ).attr("width", width2).attr("height", graphBox.height + 3 + 2 * getConfig$1().state.textHeight).attr("rx", getConfig$1().state.radius);
-  return g;
-};
-const drawEndState = (g) => {
-  g.append("circle").attr("class", "end-state-outer").attr("r", getConfig$1().state.sizeUnit + getConfig$1().state.miniPadding).attr(
-    "cx",
-    getConfig$1().state.padding + getConfig$1().state.sizeUnit + getConfig$1().state.miniPadding
-  ).attr(
-    "cy",
-    getConfig$1().state.padding + getConfig$1().state.sizeUnit + getConfig$1().state.miniPadding
-  );
-  return g.append("circle").attr("class", "end-state-inner").attr("r", getConfig$1().state.sizeUnit).attr("cx", getConfig$1().state.padding + getConfig$1().state.sizeUnit + 2).attr("cy", getConfig$1().state.padding + getConfig$1().state.sizeUnit + 2);
-};
-const drawForkJoinState = (g, stateDef) => {
-  let width2 = getConfig$1().state.forkWidth;
-  let height2 = getConfig$1().state.forkHeight;
-  if (stateDef.parentId) {
-    let tmp = width2;
-    width2 = height2;
-    height2 = tmp;
-  }
-  return g.append("rect").style("stroke", "black").style("fill", "black").attr("width", width2).attr("height", height2).attr("x", getConfig$1().state.padding).attr("y", getConfig$1().state.padding);
-};
-const _drawLongText = (_text, x, y, g) => {
-  let textHeight = 0;
-  const textElem = g.append("text");
-  textElem.style("text-anchor", "start");
-  textElem.attr("class", "noteText");
-  let text = _text.replace(/\r\n/g, "<br/>");
-  text = text.replace(/\n/g, "<br/>");
-  const lines = text.split(common$1.lineBreakRegex);
-  let tHeight = 1.25 * getConfig$1().state.noteMargin;
-  for (const line2 of lines) {
-    const txt = line2.trim();
-    if (txt.length > 0) {
-      const span = textElem.append("tspan");
-      span.text(txt);
-      if (tHeight === 0) {
-        const textBounds = span.node().getBBox();
-        tHeight += textBounds.height;
-      }
-      textHeight += tHeight;
-      span.attr("x", x + getConfig$1().state.noteMargin);
-      span.attr("y", y + textHeight + 1.25 * getConfig$1().state.noteMargin);
-    }
-  }
-  return { textWidth: textElem.node().getBBox().width, textHeight };
-};
-const drawNote = (text, g) => {
-  g.attr("class", "state-note");
-  const note2 = g.append("rect").attr("x", 0).attr("y", getConfig$1().state.padding);
-  const rectElem = g.append("g");
-  const { textWidth, textHeight } = _drawLongText(text, 0, 0, rectElem);
-  note2.attr("height", textHeight + 2 * getConfig$1().state.noteMargin);
-  note2.attr("width", textWidth + getConfig$1().state.noteMargin * 2);
-  return note2;
-};
-const drawState = function(elem, stateDef) {
-  const id2 = stateDef.id;
-  const stateInfo = {
-    id: id2,
-    label: stateDef.id,
-    width: 0,
-    height: 0
-  };
-  const g = elem.append("g").attr("id", id2).attr("class", "stateGroup");
-  if (stateDef.type === "start") {
-    drawStartState(g);
-  }
-  if (stateDef.type === "end") {
-    drawEndState(g);
-  }
-  if (stateDef.type === "fork" || stateDef.type === "join") {
-    drawForkJoinState(g, stateDef);
-  }
-  if (stateDef.type === "note") {
-    drawNote(stateDef.note.text, g);
-  }
-  if (stateDef.type === "divider") {
-    drawDivider(g);
-  }
-  if (stateDef.type === "default" && stateDef.descriptions.length === 0) {
-    drawSimpleState(g, stateDef);
-  }
-  if (stateDef.type === "default" && stateDef.descriptions.length > 0) {
-    drawDescrState(g, stateDef);
-  }
-  const stateBox = g.node().getBBox();
-  stateInfo.width = stateBox.width + 2 * getConfig$1().state.padding;
-  stateInfo.height = stateBox.height + 2 * getConfig$1().state.padding;
-  idCache$1.set(id2, stateInfo);
-  return stateInfo;
-};
-let edgeCount = 0;
-const drawEdge = function(elem, path, relation) {
-  const getRelationType = function(type2) {
-    switch (type2) {
-      case stateDb.relationType.AGGREGATION:
-        return "aggregation";
-      case stateDb.relationType.EXTENSION:
-        return "extension";
-      case stateDb.relationType.COMPOSITION:
-        return "composition";
-      case stateDb.relationType.DEPENDENCY:
-        return "dependency";
-    }
-  };
-  path.points = path.points.filter((p) => !Number.isNaN(p.y));
-  const lineData = path.points;
-  const lineFunction = (0,src/* line */.jvg)().x(function(d) {
-    return d.x;
-  }).y(function(d) {
-    return d.y;
-  }).curve(src/* curveBasis */.$0Z);
-  const svgPath = elem.append("path").attr("d", lineFunction(lineData)).attr("id", "edge" + edgeCount).attr("class", "transition");
-  let url = "";
-  if (getConfig$1().state.arrowMarkerAbsolute) {
-    url = window.location.protocol + "//" + window.location.host + window.location.pathname + window.location.search;
-    url = url.replace(/\(/g, "\\(");
-    url = url.replace(/\)/g, "\\)");
-  }
-  svgPath.attr(
-    "marker-end",
-    "url(" + url + "#" + getRelationType(stateDb.relationType.DEPENDENCY) + "End)"
-  );
-  if (relation.title !== void 0) {
-    const label = elem.append("g").attr("class", "stateLabel");
-    const { x, y } = mermaid_ae477ddf_utils.calcLabelPosition(path.points);
-    const rows = common$1.getRows(relation.title);
-    let titleHeight = 0;
-    const titleRows = [];
-    let maxWidth = 0;
-    let minX = 0;
-    for (let i = 0; i <= rows.length; i++) {
-      const title2 = label.append("text").attr("text-anchor", "middle").text(rows[i]).attr("x", x).attr("y", y + titleHeight);
-      const boundstmp = title2.node().getBBox();
-      maxWidth = Math.max(maxWidth, boundstmp.width);
-      minX = Math.min(minX, boundstmp.x);
-      log$1.info(boundstmp.x, x, y + titleHeight);
-      if (titleHeight === 0) {
-        const titleBox = title2.node().getBBox();
-        titleHeight = titleBox.height;
-        log$1.info("Title height", titleHeight, y);
-      }
-      titleRows.push(title2);
-    }
-    let boxHeight = titleHeight * rows.length;
-    if (rows.length > 1) {
-      const heightAdj = (rows.length - 1) * titleHeight * 0.5;
-      titleRows.forEach((title2, i) => title2.attr("y", y + i * titleHeight - heightAdj));
-      boxHeight = titleHeight * rows.length;
-    }
-    const bounds2 = label.node().getBBox();
-    label.insert("rect", ":first-child").attr("class", "box").attr("x", x - maxWidth / 2 - getConfig$1().state.padding / 2).attr("y", y - boxHeight / 2 - getConfig$1().state.padding / 2 - 3.5).attr("width", maxWidth + getConfig$1().state.padding).attr("height", boxHeight + getConfig$1().state.padding);
-    log$1.info(bounds2);
-  }
-  edgeCount++;
-};
-let conf$2;
-const transformationLog = {};
-const setConf$3 = function() {
-};
-const insertMarkers = function(elem) {
-  elem.append("defs").append("marker").attr("id", "dependencyEnd").attr("refX", 19).attr("refY", 7).attr("markerWidth", 20).attr("markerHeight", 28).attr("orient", "auto").append("path").attr("d", "M 19,7 L9,13 L14,7 L9,1 Z");
-};
-const draw$3 = function(text, id2, _version, diagObj) {
-  conf$2 = getConfig$1().state;
-  const securityLevel = getConfig$1().securityLevel;
-  let sandboxElement;
-  if (securityLevel === "sandbox") {
-    sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-  }
-  const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-  const doc = securityLevel === "sandbox" ? sandboxElement.nodes()[0].contentDocument : document;
-  log$1.debug("Rendering diagram " + text);
-  const diagram = root.select(`[id='${id2}']`);
-  insertMarkers(diagram);
-  const graph = new graphlib/* Graph */.k({
-    multigraph: true,
-    compound: true,
-    // acyclicer: 'greedy',
-    rankdir: "RL"
-    // ranksep: '20'
-  });
-  graph.setDefaultEdgeLabel(function() {
-    return {};
-  });
-  const rootDoc2 = diagObj.db.getRootDoc();
-  renderDoc(rootDoc2, diagram, void 0, false, root, doc, diagObj);
-  const padding2 = conf$2.padding;
-  const bounds2 = diagram.node().getBBox();
-  const width2 = bounds2.width + padding2 * 2;
-  const height2 = bounds2.height + padding2 * 2;
-  const svgWidth = width2 * 1.75;
-  configureSvgSize(diagram, height2, svgWidth, conf$2.useMaxWidth);
-  diagram.attr(
-    "viewBox",
-    `${bounds2.x - conf$2.padding}  ${bounds2.y - conf$2.padding} ` + width2 + " " + height2
-  );
-};
-const getLabelWidth = (text) => {
-  return text ? text.length * conf$2.fontSizeFactor : 1;
-};
-const renderDoc = (doc, diagram, parentId, altBkg, root, domDocument, diagObj) => {
-  const graph = new graphlib/* Graph */.k({
-    compound: true,
-    multigraph: true
-  });
-  let i;
-  let edgeFreeDoc = true;
-  for (i = 0; i < doc.length; i++) {
-    if (doc[i].stmt === "relation") {
-      edgeFreeDoc = false;
-      break;
-    }
-  }
-  if (parentId) {
-    graph.setGraph({
-      rankdir: "LR",
-      multigraph: true,
-      compound: true,
-      // acyclicer: 'greedy',
-      ranker: "tight-tree",
-      ranksep: edgeFreeDoc ? 1 : conf$2.edgeLengthFactor,
-      nodeSep: edgeFreeDoc ? 1 : 50,
-      isMultiGraph: true
-      // ranksep: 5,
-      // nodesep: 1
-    });
-  } else {
-    graph.setGraph({
-      rankdir: "TB",
-      multigraph: true,
-      compound: true,
-      // isCompound: true,
-      // acyclicer: 'greedy',
-      // ranker: 'longest-path'
-      ranksep: edgeFreeDoc ? 1 : conf$2.edgeLengthFactor,
-      nodeSep: edgeFreeDoc ? 1 : 50,
-      ranker: "tight-tree",
-      // ranker: 'network-simplex'
-      isMultiGraph: true
-    });
-  }
-  graph.setDefaultEdgeLabel(function() {
-    return {};
-  });
-  diagObj.db.extract(doc);
-  const states = diagObj.db.getStates();
-  const relations2 = diagObj.db.getRelations();
-  const keys2 = Object.keys(states);
-  for (const key of keys2) {
-    const stateDef = states[key];
-    if (parentId) {
-      stateDef.parentId = parentId;
-    }
-    let node;
-    if (stateDef.doc) {
-      let sub = diagram.append("g").attr("id", stateDef.id).attr("class", "stateGroup");
-      node = renderDoc(stateDef.doc, sub, stateDef.id, !altBkg, root, domDocument, diagObj);
-      {
-        sub = addTitleAndBox(sub, stateDef, altBkg);
-        let boxBounds = sub.node().getBBox();
-        node.width = boxBounds.width;
-        node.height = boxBounds.height + conf$2.padding / 2;
-        transformationLog[stateDef.id] = { y: conf$2.compositTitleSize };
-      }
-    } else {
-      node = drawState(diagram, stateDef);
-    }
-    if (stateDef.note) {
-      const noteDef = {
-        descriptions: [],
-        id: stateDef.id + "-note",
-        note: stateDef.note,
-        type: "note"
-      };
-      const note2 = drawState(diagram, noteDef);
-      if (stateDef.note.position === "left of") {
-        graph.setNode(node.id + "-note", note2);
-        graph.setNode(node.id, node);
-      } else {
-        graph.setNode(node.id, node);
-        graph.setNode(node.id + "-note", note2);
-      }
-      graph.setParent(node.id, node.id + "-group");
-      graph.setParent(node.id + "-note", node.id + "-group");
-    } else {
-      graph.setNode(node.id, node);
-    }
-  }
-  log$1.debug("Count=", graph.nodeCount(), graph);
-  let cnt2 = 0;
-  relations2.forEach(function(relation) {
-    cnt2++;
-    log$1.debug("Setting edge", relation);
-    graph.setEdge(
-      relation.id1,
-      relation.id2,
-      {
-        relation,
-        width: getLabelWidth(relation.title),
-        height: conf$2.labelHeight * common$1.getRows(relation.title).length,
-        labelpos: "c"
-      },
-      "id" + cnt2
-    );
-  });
-  (0,dagre/* layout */.bK)(graph);
-  log$1.debug("Graph after layout", graph.nodes());
-  const svgElem = diagram.node();
-  graph.nodes().forEach(function(v) {
-    if (v !== void 0 && graph.node(v) !== void 0) {
-      log$1.warn("Node " + v + ": " + JSON.stringify(graph.node(v)));
-      root.select("#" + svgElem.id + " #" + v).attr(
-        "transform",
-        "translate(" + (graph.node(v).x - graph.node(v).width / 2) + "," + (graph.node(v).y + (transformationLog[v] ? transformationLog[v].y : 0) - graph.node(v).height / 2) + " )"
-      );
-      root.select("#" + svgElem.id + " #" + v).attr("data-x-shift", graph.node(v).x - graph.node(v).width / 2);
-      const dividers = domDocument.querySelectorAll("#" + svgElem.id + " #" + v + " .divider");
-      dividers.forEach((divider2) => {
-        const parent = divider2.parentElement;
-        let pWidth = 0;
-        let pShift = 0;
-        if (parent) {
-          if (parent.parentElement) {
-            pWidth = parent.parentElement.getBBox().width;
-          }
-          pShift = parseInt(parent.getAttribute("data-x-shift"), 10);
-          if (Number.isNaN(pShift)) {
-            pShift = 0;
-          }
-        }
-        divider2.setAttribute("x1", 0 - pShift + 8);
-        divider2.setAttribute("x2", pWidth - pShift - 8);
-      });
-    } else {
-      log$1.debug("No Node " + v + ": " + JSON.stringify(graph.node(v)));
-    }
-  });
-  let stateBox = svgElem.getBBox();
-  graph.edges().forEach(function(e) {
-    if (e !== void 0 && graph.edge(e) !== void 0) {
-      log$1.debug("Edge " + e.v + " -> " + e.w + ": " + JSON.stringify(graph.edge(e)));
-      drawEdge(diagram, graph.edge(e), graph.edge(e).relation);
-    }
-  });
-  stateBox = svgElem.getBBox();
-  const stateInfo = {
-    id: parentId ? parentId : "root",
-    label: parentId ? parentId : "root",
-    width: 0,
-    height: 0
-  };
-  stateInfo.width = stateBox.width + 2 * conf$2.padding;
-  stateInfo.height = stateBox.height + 2 * conf$2.padding;
-  log$1.debug("Doc rendered", stateInfo, graph);
-  return stateInfo;
-};
-const stateRenderer = {
-  setConf: setConf$3,
-  draw: draw$3
-};
-const SHAPE_STATE = "rect";
-const SHAPE_STATE_WITH_DESC = "rectWithTitle";
-const SHAPE_START = "start";
-const SHAPE_END = "end";
-const SHAPE_DIVIDER = "divider";
-const SHAPE_GROUP = "roundedWithTitle";
-const SHAPE_NOTE = "note";
-const SHAPE_NOTEGROUP = "noteGroup";
-const CSS_DIAGRAM = "statediagram";
-const CSS_STATE = "state";
-const CSS_DIAGRAM_STATE = `${CSS_DIAGRAM}-${CSS_STATE}`;
-const CSS_EDGE = "transition";
-const CSS_NOTE = "note";
-const CSS_NOTE_EDGE = "note-edge";
-const CSS_EDGE_NOTE_EDGE = `${CSS_EDGE} ${CSS_NOTE_EDGE}`;
-const CSS_DIAGRAM_NOTE = `${CSS_DIAGRAM}-${CSS_NOTE}`;
-const CSS_CLUSTER = "cluster";
-const CSS_DIAGRAM_CLUSTER = `${CSS_DIAGRAM}-${CSS_CLUSTER}`;
-const CSS_CLUSTER_ALT = "cluster-alt";
-const CSS_DIAGRAM_CLUSTER_ALT = `${CSS_DIAGRAM}-${CSS_CLUSTER_ALT}`;
-const PARENT = "parent";
-const NOTE = "note";
-const DOMID_STATE = "state";
-const DOMID_TYPE_SPACER = "----";
-const NOTE_ID = `${DOMID_TYPE_SPACER}${NOTE}`;
-const PARENT_ID = `${DOMID_TYPE_SPACER}${PARENT}`;
-const G_EDGE_STYLE = "fill:none";
-const G_EDGE_ARROWHEADSTYLE = "fill: #333";
-const G_EDGE_LABELPOS = "c";
-const G_EDGE_LABELTYPE = "text";
-const G_EDGE_THICKNESS = "normal";
-let nodeDb = {};
-let graphItemCount = 0;
-const setConf$2 = function(cnf) {
-  const keys2 = Object.keys(cnf);
-  for (const key of keys2) {
-    cnf[key];
-  }
-};
-const getClasses = function(text, diagramObj) {
-  log$1.trace("Extracting classes");
-  diagramObj.db.clear();
-  try {
-    diagramObj.parser.parse(text);
-    diagramObj.db.extract(diagramObj.db.getRootDocV2());
-    return diagramObj.db.getClasses();
-  } catch (e) {
-    return e;
-  }
-};
-function getClassesFromDbInfo(dbInfoItem) {
-  if (dbInfoItem === void 0 || dbInfoItem === null) {
-    return "";
-  } else {
-    if (dbInfoItem.classes) {
-      return dbInfoItem.classes.join(" ");
-    } else {
-      return "";
-    }
-  }
-}
-function stateDomId(itemId = "", counter = 0, type2 = "", typeSpacer = DOMID_TYPE_SPACER) {
-  const typeStr = type2 !== null && type2.length > 0 ? `${typeSpacer}${type2}` : "";
-  return `${DOMID_STATE}-${itemId}${typeStr}-${counter}`;
-}
-const setupNode = (g, parent, parsedItem, diagramStates, diagramDb, altFlag) => {
-  const itemId = parsedItem.id;
-  const classStr = getClassesFromDbInfo(diagramStates[itemId]);
-  if (itemId !== "root") {
-    let shape = SHAPE_STATE;
-    if (parsedItem.start === true) {
-      shape = SHAPE_START;
-    }
-    if (parsedItem.start === false) {
-      shape = SHAPE_END;
-    }
-    if (parsedItem.type !== DEFAULT_STATE_TYPE) {
-      shape = parsedItem.type;
-    }
-    if (!nodeDb[itemId]) {
-      nodeDb[itemId] = {
-        id: itemId,
-        shape,
-        description: common$1.sanitizeText(itemId, getConfig$1()),
-        classes: `${classStr} ${CSS_DIAGRAM_STATE}`
-      };
-    }
-    const newNode = nodeDb[itemId];
-    if (parsedItem.description) {
-      if (Array.isArray(newNode.description)) {
-        newNode.shape = SHAPE_STATE_WITH_DESC;
-        newNode.description.push(parsedItem.description);
-      } else {
-        if (newNode.description.length > 0) {
-          newNode.shape = SHAPE_STATE_WITH_DESC;
-          if (newNode.description === itemId) {
-            newNode.description = [parsedItem.description];
-          } else {
-            newNode.description = [newNode.description, parsedItem.description];
-          }
-        } else {
-          newNode.shape = SHAPE_STATE;
-          newNode.description = parsedItem.description;
-        }
-      }
-      newNode.description = common$1.sanitizeTextOrArray(newNode.description, getConfig$1());
-    }
-    if (newNode.description.length === 1 && newNode.shape === SHAPE_STATE_WITH_DESC) {
-      newNode.shape = SHAPE_STATE;
-    }
-    if (!newNode.type && parsedItem.doc) {
-      log$1.info("Setting cluster for ", itemId, getDir(parsedItem));
-      newNode.type = "group";
-      newNode.dir = getDir(parsedItem);
-      newNode.shape = parsedItem.type === DIVIDER_TYPE ? SHAPE_DIVIDER : SHAPE_GROUP;
-      newNode.classes = newNode.classes + " " + CSS_DIAGRAM_CLUSTER + " " + (altFlag ? CSS_DIAGRAM_CLUSTER_ALT : "");
-    }
-    const nodeData = {
-      labelStyle: "",
-      shape: newNode.shape,
-      labelText: newNode.description,
-      // typeof newNode.description === 'object'
-      //   ? newNode.description[0]
-      //   : newNode.description,
-      classes: newNode.classes,
-      style: "",
-      //styles.style,
-      id: itemId,
-      dir: newNode.dir,
-      domId: stateDomId(itemId, graphItemCount),
-      type: newNode.type,
-      padding: 15
-      //getConfig().flowchart.padding
-    };
-    if (parsedItem.note) {
-      const noteData = {
-        labelStyle: "",
-        shape: SHAPE_NOTE,
-        labelText: parsedItem.note.text,
-        classes: CSS_DIAGRAM_NOTE,
-        style: "",
-        // styles.style,
-        id: itemId + NOTE_ID + "-" + graphItemCount,
-        domId: stateDomId(itemId, graphItemCount, NOTE),
-        type: newNode.type,
-        padding: 15
-        //getConfig().flowchart.padding
-      };
-      const groupData = {
-        labelStyle: "",
-        shape: SHAPE_NOTEGROUP,
-        labelText: parsedItem.note.text,
-        classes: newNode.classes,
-        style: "",
-        // styles.style,
-        id: itemId + PARENT_ID,
-        domId: stateDomId(itemId, graphItemCount, PARENT),
-        type: "group",
-        padding: 0
-        //getConfig().flowchart.padding
-      };
-      graphItemCount++;
-      const parentNodeId = itemId + PARENT_ID;
-      g.setNode(parentNodeId, groupData);
-      g.setNode(noteData.id, noteData);
-      g.setNode(itemId, nodeData);
-      g.setParent(itemId, parentNodeId);
-      g.setParent(noteData.id, parentNodeId);
-      let from = itemId;
-      let to = noteData.id;
-      if (parsedItem.note.position === "left of") {
-        from = noteData.id;
-        to = itemId;
-      }
-      g.setEdge(from, to, {
-        arrowhead: "none",
-        arrowType: "",
-        style: G_EDGE_STYLE,
-        labelStyle: "",
-        classes: CSS_EDGE_NOTE_EDGE,
-        arrowheadStyle: G_EDGE_ARROWHEADSTYLE,
-        labelpos: G_EDGE_LABELPOS,
-        labelType: G_EDGE_LABELTYPE,
-        thickness: G_EDGE_THICKNESS
-      });
-    } else {
-      g.setNode(itemId, nodeData);
-    }
-  }
-  if (parent && parent.id !== "root") {
-    log$1.trace("Setting node ", itemId, " to be child of its parent ", parent.id);
-    g.setParent(itemId, parent.id);
-  }
-  if (parsedItem.doc) {
-    log$1.trace("Adding nodes children ");
-    setupDoc(g, parsedItem, parsedItem.doc, diagramStates, diagramDb, !altFlag);
-  }
-};
-const setupDoc = (g, parentParsedItem, doc, diagramStates, diagramDb, altFlag) => {
-  log$1.trace("items", doc);
-  doc.forEach((item) => {
-    switch (item.stmt) {
-      case STMT_STATE:
-        setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag);
-        break;
-      case DEFAULT_STATE_TYPE:
-        setupNode(g, parentParsedItem, item, diagramStates, diagramDb, altFlag);
-        break;
-      case STMT_RELATION:
-        {
-          setupNode(g, parentParsedItem, item.state1, diagramStates, diagramDb, altFlag);
-          setupNode(g, parentParsedItem, item.state2, diagramStates, diagramDb, altFlag);
-          const edgeData = {
-            id: "edge" + graphItemCount,
-            arrowhead: "normal",
-            arrowTypeEnd: "arrow_barb",
-            style: G_EDGE_STYLE,
-            labelStyle: "",
-            label: common$1.sanitizeText(item.description, getConfig$1()),
-            arrowheadStyle: G_EDGE_ARROWHEADSTYLE,
-            labelpos: G_EDGE_LABELPOS,
-            labelType: G_EDGE_LABELTYPE,
-            thickness: G_EDGE_THICKNESS,
-            classes: CSS_EDGE
-          };
-          g.setEdge(item.state1.id, item.state2.id, edgeData, graphItemCount);
-          graphItemCount++;
-        }
-        break;
-    }
-  });
-};
-const getDir = (parsedItem, defaultDir = DEFAULT_NESTED_DOC_DIR) => {
-  let dir = defaultDir;
-  if (parsedItem.doc) {
-    for (let i = 0; i < parsedItem.doc.length; i++) {
-      const parsedItemDoc = parsedItem.doc[i];
-      if (parsedItemDoc.stmt === "dir") {
-        dir = parsedItemDoc.value;
-      }
-    }
-  }
-  return dir;
-};
-const draw$2 = function(text, id2, _version, diag) {
-  log$1.info("Drawing state diagram (v2)", id2);
-  nodeDb = {};
-  let dir = diag.db.getDirection();
-  if (dir === void 0) {
-    dir = DEFAULT_DIAGRAM_DIRECTION;
-  }
-  const { securityLevel, state: conf2 } = getConfig$1();
-  const nodeSpacing = conf2.nodeSpacing || 50;
-  const rankSpacing = conf2.rankSpacing || 50;
-  log$1.info(diag.db.getRootDocV2());
-  diag.db.extract(diag.db.getRootDocV2());
-  log$1.info(diag.db.getRootDocV2());
-  const diagramStates = diag.db.getStates();
-  const g = new graphlib/* Graph */.k({
-    multigraph: true,
-    compound: true
-  }).setGraph({
-    rankdir: getDir(diag.db.getRootDocV2()),
-    nodesep: nodeSpacing,
-    ranksep: rankSpacing,
-    marginx: 8,
-    marginy: 8
-  }).setDefaultEdgeLabel(function() {
-    return {};
-  });
-  setupNode(g, void 0, diag.db.getRootDocV2(), diagramStates, diag.db, true);
-  let sandboxElement;
-  if (securityLevel === "sandbox") {
-    sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-  }
-  const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-  const svg = root.select(`[id="${id2}"]`);
-  const element = root.select("#" + id2 + " g");
-  render$1(element, g, ["barb"], CSS_DIAGRAM, id2);
-  const padding2 = 8;
-  mermaid_ae477ddf_utils.insertTitle(svg, "statediagramTitleText", conf2.titleTopMargin, diag.db.getDiagramTitle());
-  const bounds2 = svg.node().getBBox();
-  const width2 = bounds2.width + padding2 * 2;
-  const height2 = bounds2.height + padding2 * 2;
-  svg.attr("class", CSS_DIAGRAM);
-  const svgBounds = svg.node().getBBox();
-  configureSvgSize(svg, height2, width2, conf2.useMaxWidth);
-  const vBox = `${svgBounds.x - padding2} ${svgBounds.y - padding2} ${width2} ${height2}`;
-  log$1.debug(`viewBox ${vBox}`);
-  svg.attr("viewBox", vBox);
-  const labels = document.querySelectorAll('[id="' + id2 + '"] .edgeLabel .label');
-  for (const label of labels) {
-    const dim = label.getBBox();
-    const rect2 = document.createElementNS("http://www.w3.org/2000/svg", SHAPE_STATE);
-    rect2.setAttribute("rx", 0);
-    rect2.setAttribute("ry", 0);
-    rect2.setAttribute("width", dim.width);
-    rect2.setAttribute("height", dim.height);
-    label.insertBefore(rect2, label.firstChild);
-  }
-};
-const stateRendererV2 = {
-  setConf: setConf$2,
-  getClasses,
-  draw: draw$2
-};
-var parser = function() {
-  var o = function(k, v, o2, l) {
-    for (o2 = o2 || {}, l = k.length; l--; o2[k[l]] = v)
-      ;
-    return o2;
-  }, $V0 = [1, 2], $V1 = [1, 5], $V2 = [6, 9, 11, 17, 18, 20, 22, 23, 24, 26], $V3 = [1, 15], $V4 = [1, 16], $V5 = [1, 17], $V6 = [1, 18], $V7 = [1, 19], $V8 = [1, 20], $V9 = [1, 24], $Va = [4, 6, 9, 11, 17, 18, 20, 22, 23, 24, 26];
-  var parser2 = {
-    trace: function trace() {
-    },
-    yy: {},
-    symbols_: { "error": 2, "start": 3, "journey": 4, "document": 5, "EOF": 6, "directive": 7, "line": 8, "SPACE": 9, "statement": 10, "NEWLINE": 11, "openDirective": 12, "typeDirective": 13, "closeDirective": 14, ":": 15, "argDirective": 16, "title": 17, "acc_title": 18, "acc_title_value": 19, "acc_descr": 20, "acc_descr_value": 21, "acc_descr_multiline_value": 22, "section": 23, "taskName": 24, "taskData": 25, "open_directive": 26, "type_directive": 27, "arg_directive": 28, "close_directive": 29, "$accept": 0, "$end": 1 },
-    terminals_: { 2: "error", 4: "journey", 6: "EOF", 9: "SPACE", 11: "NEWLINE", 15: ":", 17: "title", 18: "acc_title", 19: "acc_title_value", 20: "acc_descr", 21: "acc_descr_value", 22: "acc_descr_multiline_value", 23: "section", 24: "taskName", 25: "taskData", 26: "open_directive", 27: "type_directive", 28: "arg_directive", 29: "close_directive" },
-    productions_: [0, [3, 3], [3, 2], [5, 0], [5, 2], [8, 2], [8, 1], [8, 1], [8, 1], [7, 4], [7, 6], [10, 1], [10, 2], [10, 2], [10, 1], [10, 1], [10, 2], [10, 1], [12, 1], [13, 1], [16, 1], [14, 1]],
-    performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$) {
-      var $0 = $$.length - 1;
-      switch (yystate) {
-        case 1:
-          return $$[$0 - 1];
-        case 3:
-          this.$ = [];
-          break;
-        case 4:
-          $$[$0 - 1].push($$[$0]);
-          this.$ = $$[$0 - 1];
-          break;
-        case 5:
-        case 6:
-          this.$ = $$[$0];
-          break;
-        case 7:
-        case 8:
-          this.$ = [];
-          break;
-        case 11:
-          yy.setDiagramTitle($$[$0].substr(6));
-          this.$ = $$[$0].substr(6);
-          break;
-        case 12:
-          this.$ = $$[$0].trim();
-          yy.setAccTitle(this.$);
-          break;
-        case 13:
-        case 14:
-          this.$ = $$[$0].trim();
-          yy.setAccDescription(this.$);
-          break;
-        case 15:
-          yy.addSection($$[$0].substr(8));
-          this.$ = $$[$0].substr(8);
-          break;
-        case 16:
-          yy.addTask($$[$0 - 1], $$[$0]);
-          this.$ = "task";
-          break;
-        case 18:
-          yy.parseDirective("%%{", "open_directive");
-          break;
-        case 19:
-          yy.parseDirective($$[$0], "type_directive");
-          break;
-        case 20:
-          $$[$0] = $$[$0].trim().replace(/'/g, '"');
-          yy.parseDirective($$[$0], "arg_directive");
-          break;
-        case 21:
-          yy.parseDirective("}%%", "close_directive", "journey");
-          break;
-      }
-    },
-    table: [{ 3: 1, 4: $V0, 7: 3, 12: 4, 26: $V1 }, { 1: [3] }, o($V2, [2, 3], { 5: 6 }), { 3: 7, 4: $V0, 7: 3, 12: 4, 26: $V1 }, { 13: 8, 27: [1, 9] }, { 27: [2, 18] }, { 6: [1, 10], 7: 21, 8: 11, 9: [1, 12], 10: 13, 11: [1, 14], 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: $V8, 26: $V1 }, { 1: [2, 2] }, { 14: 22, 15: [1, 23], 29: $V9 }, o([15, 29], [2, 19]), o($V2, [2, 8], { 1: [2, 1] }), o($V2, [2, 4]), { 7: 21, 10: 25, 12: 4, 17: $V3, 18: $V4, 20: $V5, 22: $V6, 23: $V7, 24: $V8, 26: $V1 }, o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 11]), { 19: [1, 26] }, { 21: [1, 27] }, o($V2, [2, 14]), o($V2, [2, 15]), { 25: [1, 28] }, o($V2, [2, 17]), { 11: [1, 29] }, { 16: 30, 28: [1, 31] }, { 11: [2, 21] }, o($V2, [2, 5]), o($V2, [2, 12]), o($V2, [2, 13]), o($V2, [2, 16]), o($Va, [2, 9]), { 14: 32, 29: $V9 }, { 29: [2, 20] }, { 11: [1, 33] }, o($Va, [2, 10])],
-    defaultActions: { 5: [2, 18], 7: [2, 2], 24: [2, 21], 31: [2, 20] },
-    parseError: function parseError(str2, hash) {
-      if (hash.recoverable) {
-        this.trace(str2);
-      } else {
-        var error = new Error(str2);
-        error.hash = hash;
-        throw error;
-      }
-    },
-    parse: function parse2(input) {
-      var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = "", yylineno = 0, yyleng = 0, TERROR = 2, EOF = 1;
-      var args = lstack.slice.call(arguments, 1);
-      var lexer2 = Object.create(this.lexer);
-      var sharedState = { yy: {} };
-      for (var k in this.yy) {
-        if (Object.prototype.hasOwnProperty.call(this.yy, k)) {
-          sharedState.yy[k] = this.yy[k];
-        }
-      }
-      lexer2.setInput(input, sharedState.yy);
-      sharedState.yy.lexer = lexer2;
-      sharedState.yy.parser = this;
-      if (typeof lexer2.yylloc == "undefined") {
-        lexer2.yylloc = {};
-      }
-      var yyloc = lexer2.yylloc;
-      lstack.push(yyloc);
-      var ranges = lexer2.options && lexer2.options.ranges;
-      if (typeof sharedState.yy.parseError === "function") {
-        this.parseError = sharedState.yy.parseError;
-      } else {
-        this.parseError = Object.getPrototypeOf(this).parseError;
-      }
-      function lex2() {
-        var token;
-        token = tstack.pop() || lexer2.lex() || EOF;
-        if (typeof token !== "number") {
-          if (token instanceof Array) {
-            tstack = token;
-            token = tstack.pop();
-          }
-          token = self.symbols_[token] || token;
-        }
-        return token;
-      }
-      var symbol, state, action, r, yyval = {}, p, len, newState, expected;
-      while (true) {
-        state = stack[stack.length - 1];
-        if (this.defaultActions[state]) {
-          action = this.defaultActions[state];
-        } else {
-          if (symbol === null || typeof symbol == "undefined") {
-            symbol = lex2();
-          }
-          action = table[state] && table[state][symbol];
-        }
-        if (typeof action === "undefined" || !action.length || !action[0]) {
-          var errStr = "";
-          expected = [];
-          for (p in table[state]) {
-            if (this.terminals_[p] && p > TERROR) {
-              expected.push("'" + this.terminals_[p] + "'");
-            }
-          }
-          if (lexer2.showPosition) {
-            errStr = "Parse error on line " + (yylineno + 1) + ":\n" + lexer2.showPosition() + "\nExpecting " + expected.join(", ") + ", got '" + (this.terminals_[symbol] || symbol) + "'";
-          } else {
-            errStr = "Parse error on line " + (yylineno + 1) + ": Unexpected " + (symbol == EOF ? "end of input" : "'" + (this.terminals_[symbol] || symbol) + "'");
-          }
-          this.parseError(errStr, {
-            text: lexer2.match,
-            token: this.terminals_[symbol] || symbol,
-            line: lexer2.yylineno,
-            loc: yyloc,
-            expected
-          });
-        }
-        if (action[0] instanceof Array && action.length > 1) {
-          throw new Error("Parse Error: multiple actions possible at state: " + state + ", token: " + symbol);
-        }
-        switch (action[0]) {
-          case 1:
-            stack.push(symbol);
-            vstack.push(lexer2.yytext);
-            lstack.push(lexer2.yylloc);
-            stack.push(action[1]);
-            symbol = null;
-            {
-              yyleng = lexer2.yyleng;
-              yytext = lexer2.yytext;
-              yylineno = lexer2.yylineno;
-              yyloc = lexer2.yylloc;
-            }
-            break;
-          case 2:
-            len = this.productions_[action[1]][1];
-            yyval.$ = vstack[vstack.length - len];
-            yyval._$ = {
-              first_line: lstack[lstack.length - (len || 1)].first_line,
-              last_line: lstack[lstack.length - 1].last_line,
-              first_column: lstack[lstack.length - (len || 1)].first_column,
-              last_column: lstack[lstack.length - 1].last_column
-            };
-            if (ranges) {
-              yyval._$.range = [
-                lstack[lstack.length - (len || 1)].range[0],
-                lstack[lstack.length - 1].range[1]
-              ];
-            }
-            r = this.performAction.apply(yyval, [
-              yytext,
-              yyleng,
-              yylineno,
-              sharedState.yy,
-              action[1],
-              vstack,
-              lstack
-            ].concat(args));
-            if (typeof r !== "undefined") {
-              return r;
-            }
-            if (len) {
-              stack = stack.slice(0, -1 * len * 2);
-              vstack = vstack.slice(0, -1 * len);
-              lstack = lstack.slice(0, -1 * len);
-            }
-            stack.push(this.productions_[action[1]][0]);
-            vstack.push(yyval.$);
-            lstack.push(yyval._$);
-            newState = table[stack[stack.length - 2]][stack[stack.length - 1]];
-            stack.push(newState);
-            break;
-          case 3:
-            return true;
-        }
-      }
-      return true;
-    }
-  };
-  var lexer = function() {
-    var lexer2 = {
-      EOF: 1,
-      parseError: function parseError(str2, hash) {
-        if (this.yy.parser) {
-          this.yy.parser.parseError(str2, hash);
-        } else {
-          throw new Error(str2);
-        }
-      },
-      // resets the lexer, sets new input
-      setInput: function(input, yy) {
-        this.yy = yy || this.yy || {};
-        this._input = input;
-        this._more = this._backtrack = this.done = false;
-        this.yylineno = this.yyleng = 0;
-        this.yytext = this.matched = this.match = "";
-        this.conditionStack = ["INITIAL"];
-        this.yylloc = {
-          first_line: 1,
-          first_column: 0,
-          last_line: 1,
-          last_column: 0
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [0, 0];
-        }
-        this.offset = 0;
-        return this;
-      },
-      // consumes and returns one char from the input
-      input: function() {
-        var ch = this._input[0];
-        this.yytext += ch;
-        this.yyleng++;
-        this.offset++;
-        this.match += ch;
-        this.matched += ch;
-        var lines = ch.match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno++;
-          this.yylloc.last_line++;
-        } else {
-          this.yylloc.last_column++;
-        }
-        if (this.options.ranges) {
-          this.yylloc.range[1]++;
-        }
-        this._input = this._input.slice(1);
-        return ch;
-      },
-      // unshifts one char (or a string) into the input
-      unput: function(ch) {
-        var len = ch.length;
-        var lines = ch.split(/(?:\r\n?|\n)/g);
-        this._input = ch + this._input;
-        this.yytext = this.yytext.substr(0, this.yytext.length - len);
-        this.offset -= len;
-        var oldLines = this.match.split(/(?:\r\n?|\n)/g);
-        this.match = this.match.substr(0, this.match.length - 1);
-        this.matched = this.matched.substr(0, this.matched.length - 1);
-        if (lines.length - 1) {
-          this.yylineno -= lines.length - 1;
-        }
-        var r = this.yylloc.range;
-        this.yylloc = {
-          first_line: this.yylloc.first_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.first_column,
-          last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len
-        };
-        if (this.options.ranges) {
-          this.yylloc.range = [r[0], r[0] + this.yyleng - len];
-        }
-        this.yyleng = this.yytext.length;
-        return this;
-      },
-      // When called from action, caches matched text and appends it on next action
-      more: function() {
-        this._more = true;
-        return this;
-      },
-      // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.
-      reject: function() {
-        if (this.options.backtrack_lexer) {
-          this._backtrack = true;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-        return this;
-      },
-      // retain first n characters of the match
-      less: function(n) {
-        this.unput(this.match.slice(n));
-      },
-      // displays already matched input, i.e. for error messages
-      pastInput: function() {
-        var past = this.matched.substr(0, this.matched.length - this.match.length);
-        return (past.length > 20 ? "..." : "") + past.substr(-20).replace(/\n/g, "");
-      },
-      // displays upcoming input, i.e. for error messages
-      upcomingInput: function() {
-        var next = this.match;
-        if (next.length < 20) {
-          next += this._input.substr(0, 20 - next.length);
-        }
-        return (next.substr(0, 20) + (next.length > 20 ? "..." : "")).replace(/\n/g, "");
-      },
-      // displays the character position where the lexing error occurred, i.e. for error messages
-      showPosition: function() {
-        var pre = this.pastInput();
-        var c2 = new Array(pre.length + 1).join("-");
-        return pre + this.upcomingInput() + "\n" + c2 + "^";
-      },
-      // test the lexed token: return FALSE when not a match, otherwise return token
-      test_match: function(match, indexed_rule) {
-        var token, lines, backup;
-        if (this.options.backtrack_lexer) {
-          backup = {
-            yylineno: this.yylineno,
-            yylloc: {
-              first_line: this.yylloc.first_line,
-              last_line: this.last_line,
-              first_column: this.yylloc.first_column,
-              last_column: this.yylloc.last_column
-            },
-            yytext: this.yytext,
-            match: this.match,
-            matches: this.matches,
-            matched: this.matched,
-            yyleng: this.yyleng,
-            offset: this.offset,
-            _more: this._more,
-            _input: this._input,
-            yy: this.yy,
-            conditionStack: this.conditionStack.slice(0),
-            done: this.done
-          };
-          if (this.options.ranges) {
-            backup.yylloc.range = this.yylloc.range.slice(0);
-          }
-        }
-        lines = match[0].match(/(?:\r\n?|\n).*/g);
-        if (lines) {
-          this.yylineno += lines.length;
-        }
-        this.yylloc = {
-          first_line: this.yylloc.last_line,
-          last_line: this.yylineno + 1,
-          first_column: this.yylloc.last_column,
-          last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\r?\n?/)[0].length : this.yylloc.last_column + match[0].length
-        };
-        this.yytext += match[0];
-        this.match += match[0];
-        this.matches = match;
-        this.yyleng = this.yytext.length;
-        if (this.options.ranges) {
-          this.yylloc.range = [this.offset, this.offset += this.yyleng];
-        }
-        this._more = false;
-        this._backtrack = false;
-        this._input = this._input.slice(match[0].length);
-        this.matched += match[0];
-        token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);
-        if (this.done && this._input) {
-          this.done = false;
-        }
-        if (token) {
-          return token;
-        } else if (this._backtrack) {
-          for (var k in backup) {
-            this[k] = backup[k];
-          }
-          return false;
-        }
-        return false;
-      },
-      // return next match in input
-      next: function() {
-        if (this.done) {
-          return this.EOF;
-        }
-        if (!this._input) {
-          this.done = true;
-        }
-        var token, match, tempMatch, index;
-        if (!this._more) {
-          this.yytext = "";
-          this.match = "";
-        }
-        var rules = this._currentRules();
-        for (var i = 0; i < rules.length; i++) {
-          tempMatch = this._input.match(this.rules[rules[i]]);
-          if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {
-            match = tempMatch;
-            index = i;
-            if (this.options.backtrack_lexer) {
-              token = this.test_match(tempMatch, rules[i]);
-              if (token !== false) {
-                return token;
-              } else if (this._backtrack) {
-                match = false;
-                continue;
-              } else {
-                return false;
-              }
-            } else if (!this.options.flex) {
-              break;
-            }
-          }
-        }
-        if (match) {
-          token = this.test_match(match, rules[index]);
-          if (token !== false) {
-            return token;
-          }
-          return false;
-        }
-        if (this._input === "") {
-          return this.EOF;
-        } else {
-          return this.parseError("Lexical error on line " + (this.yylineno + 1) + ". Unrecognized text.\n" + this.showPosition(), {
-            text: "",
-            token: null,
-            line: this.yylineno
-          });
-        }
-      },
-      // return next match that has a token
-      lex: function lex2() {
-        var r = this.next();
-        if (r) {
-          return r;
-        } else {
-          return this.lex();
-        }
-      },
-      // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)
-      begin: function begin(condition) {
-        this.conditionStack.push(condition);
-      },
-      // pop the previously active lexer condition state off the condition stack
-      popState: function popState() {
-        var n = this.conditionStack.length - 1;
-        if (n > 0) {
-          return this.conditionStack.pop();
-        } else {
-          return this.conditionStack[0];
-        }
-      },
-      // produce the lexer rule set which is active for the currently active lexer condition state
-      _currentRules: function _currentRules() {
-        if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {
-          return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;
-        } else {
-          return this.conditions["INITIAL"].rules;
-        }
-      },
-      // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available
-      topState: function topState(n) {
-        n = this.conditionStack.length - 1 - Math.abs(n || 0);
-        if (n >= 0) {
-          return this.conditionStack[n];
-        } else {
-          return "INITIAL";
-        }
-      },
-      // alias for begin(condition)
-      pushState: function pushState(condition) {
-        this.begin(condition);
-      },
-      // return the number of states currently on the stack
-      stateStackSize: function stateStackSize() {
-        return this.conditionStack.length;
-      },
-      options: { "case-insensitive": true },
-      performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {
-        switch ($avoiding_name_collisions) {
-          case 0:
-            this.begin("open_directive");
-            return 26;
-          case 1:
-            this.begin("type_directive");
-            return 27;
-          case 2:
-            this.popState();
-            this.begin("arg_directive");
-            return 15;
-          case 3:
-            this.popState();
-            this.popState();
-            return 29;
-          case 4:
-            return 28;
-          case 5:
-            break;
-          case 6:
-            break;
-          case 7:
-            return 11;
-          case 8:
-            break;
-          case 9:
-            break;
-          case 10:
-            return 4;
-          case 11:
-            return 17;
-          case 12:
-            this.begin("acc_title");
-            return 18;
-          case 13:
-            this.popState();
-            return "acc_title_value";
-          case 14:
-            this.begin("acc_descr");
-            return 20;
-          case 15:
-            this.popState();
-            return "acc_descr_value";
-          case 16:
-            this.begin("acc_descr_multiline");
-            break;
-          case 17:
-            this.popState();
-            break;
-          case 18:
-            return "acc_descr_multiline_value";
-          case 19:
-            return 23;
-          case 20:
-            return 24;
-          case 21:
-            return 25;
-          case 22:
-            return 15;
-          case 23:
-            return 6;
-          case 24:
-            return "INVALID";
-        }
-      },
-      rules: [/^(?:%%\{)/i, /^(?:((?:(?!\}%%)[^:.])*))/i, /^(?::)/i, /^(?:\}%%)/i, /^(?:((?:(?!\}%%).|\n)*))/i, /^(?:%(?!\{)[^\n]*)/i, /^(?:[^\}]%%[^\n]*)/i, /^(?:[\n]+)/i, /^(?:\s+)/i, /^(?:#[^\n]*)/i, /^(?:journey\b)/i, /^(?:title\s[^#\n;]+)/i, /^(?:accTitle\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*:\s*)/i, /^(?:(?!\n||)*[^\n]*)/i, /^(?:accDescr\s*\{\s*)/i, /^(?:[\}])/i, /^(?:[^\}]*)/i, /^(?:section\s[^#:\n;]+)/i, /^(?:[^#:\n;]+)/i, /^(?::[^#\n;]+)/i, /^(?::)/i, /^(?:$)/i, /^(?:.)/i],
-      conditions: { "open_directive": { "rules": [1], "inclusive": false }, "type_directive": { "rules": [2, 3], "inclusive": false }, "arg_directive": { "rules": [3, 4], "inclusive": false }, "acc_descr_multiline": { "rules": [17, 18], "inclusive": false }, "acc_descr": { "rules": [15], "inclusive": false }, "acc_title": { "rules": [13], "inclusive": false }, "INITIAL": { "rules": [0, 5, 6, 7, 8, 9, 10, 11, 12, 14, 16, 19, 20, 21, 22, 23, 24], "inclusive": true } }
-    };
-    return lexer2;
-  }();
-  parser2.lexer = lexer;
-  function Parser() {
-    this.yy = {};
-  }
-  Parser.prototype = parser2;
-  parser2.Parser = Parser;
-  return new Parser();
-}();
-parser.parser = parser;
-const journeyParser = parser;
-const journeyDetector = (txt) => {
-  return txt.match(/^\s*journey/) !== null;
-};
-let currentSection = "";
-const sections = [];
-const tasks = [];
-const rawTasks = [];
-const parseDirective = function(statement, context, type2) {
-  mermaidAPI.parseDirective(this, statement, context, type2);
-};
-const clear = function() {
-  sections.length = 0;
-  tasks.length = 0;
-  currentSection = "";
-  rawTasks.length = 0;
-  clear$g();
-};
-const addSection = function(txt) {
-  currentSection = txt;
-  sections.push(txt);
-};
-const getSections = function() {
-  return sections;
-};
-const getTasks = function() {
-  let allItemsProcessed = compileTasks();
-  const maxDepth = 100;
-  let iterationCount = 0;
-  while (!allItemsProcessed && iterationCount < maxDepth) {
-    allItemsProcessed = compileTasks();
-    iterationCount++;
-  }
-  tasks.push(...rawTasks);
-  return tasks;
-};
-const updateActors = function() {
-  const tempActors = [];
-  tasks.forEach((task) => {
-    if (task.people) {
-      tempActors.push(...task.people);
-    }
-  });
-  const unique = new Set(tempActors);
-  return [...unique].sort();
-};
-const addTask = function(descr, taskData) {
-  const pieces = taskData.substr(1).split(":");
-  let score = 0;
-  let peeps = [];
-  if (pieces.length === 1) {
-    score = Number(pieces[0]);
-    peeps = [];
-  } else {
-    score = Number(pieces[0]);
-    peeps = pieces[1].split(",");
-  }
-  const peopleList = peeps.map((s) => s.trim());
-  const rawTask = {
-    section: currentSection,
-    type: currentSection,
-    people: peopleList,
-    task: descr,
-    score
-  };
-  rawTasks.push(rawTask);
-};
-const addTaskOrg = function(descr) {
-  const newTask = {
-    section: currentSection,
-    type: currentSection,
-    description: descr,
-    task: descr,
-    classes: []
-  };
-  tasks.push(newTask);
-};
-const compileTasks = function() {
-  const compileTask = function(pos) {
-    return rawTasks[pos].processed;
-  };
-  let allProcessed = true;
-  for (const [i, rawTask] of rawTasks.entries()) {
-    compileTask(i);
-    allProcessed = allProcessed && rawTask.processed;
-  }
-  return allProcessed;
-};
-const getActors = function() {
-  return updateActors();
-};
-const journeyDb = {
-  parseDirective,
-  getConfig: () => getConfig$1().journey,
-  clear,
-  setDiagramTitle,
-  getDiagramTitle,
-  setAccTitle,
-  getAccTitle,
-  setAccDescription,
-  getAccDescription,
-  addSection,
-  getSections,
-  getTasks,
-  addTask,
-  addTaskOrg,
-  getActors
-};
-const drawRect = function(elem, rectData) {
-  const rectElem = elem.append("rect");
-  rectElem.attr("x", rectData.x);
-  rectElem.attr("y", rectData.y);
-  rectElem.attr("fill", rectData.fill);
-  rectElem.attr("stroke", rectData.stroke);
-  rectElem.attr("width", rectData.width);
-  rectElem.attr("height", rectData.height);
-  rectElem.attr("rx", rectData.rx);
-  rectElem.attr("ry", rectData.ry);
-  if (rectData.class !== void 0) {
-    rectElem.attr("class", rectData.class);
-  }
-  return rectElem;
-};
-const drawFace = function(element, faceData) {
-  const radius = 15;
-  const circleElement = element.append("circle").attr("cx", faceData.cx).attr("cy", faceData.cy).attr("class", "face").attr("r", radius).attr("stroke-width", 2).attr("overflow", "visible");
-  const face = element.append("g");
-  face.append("circle").attr("cx", faceData.cx - radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666");
-  face.append("circle").attr("cx", faceData.cx + radius / 3).attr("cy", faceData.cy - radius / 3).attr("r", 1.5).attr("stroke-width", 2).attr("fill", "#666").attr("stroke", "#666");
-  function smile(face2) {
-    const arc$1 = (0,src/* arc */.Nb1)().startAngle(Math.PI / 2).endAngle(3 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2);
-    face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 2) + ")");
-  }
-  function sad(face2) {
-    const arc$1 = (0,src/* arc */.Nb1)().startAngle(3 * Math.PI / 2).endAngle(5 * (Math.PI / 2)).innerRadius(radius / 2).outerRadius(radius / 2.2);
-    face2.append("path").attr("class", "mouth").attr("d", arc$1).attr("transform", "translate(" + faceData.cx + "," + (faceData.cy + 7) + ")");
-  }
-  function ambivalent(face2) {
-    face2.append("line").attr("class", "mouth").attr("stroke", 2).attr("x1", faceData.cx - 5).attr("y1", faceData.cy + 7).attr("x2", faceData.cx + 5).attr("y2", faceData.cy + 7).attr("class", "mouth").attr("stroke-width", "1px").attr("stroke", "#666");
-  }
-  if (faceData.score > 3) {
-    smile(face);
-  } else if (faceData.score < 3) {
-    sad(face);
-  } else {
-    ambivalent(face);
-  }
-  return circleElement;
-};
-const drawCircle = function(element, circleData) {
-  const circleElement = element.append("circle");
-  circleElement.attr("cx", circleData.cx);
-  circleElement.attr("cy", circleData.cy);
-  circleElement.attr("class", "actor-" + circleData.pos);
-  circleElement.attr("fill", circleData.fill);
-  circleElement.attr("stroke", circleData.stroke);
-  circleElement.attr("r", circleData.r);
-  if (circleElement.class !== void 0) {
-    circleElement.attr("class", circleElement.class);
-  }
-  if (circleData.title !== void 0) {
-    circleElement.append("title").text(circleData.title);
-  }
-  return circleElement;
-};
-const drawText = function(elem, textData) {
-  const nText = textData.text.replace(/<br\s*\/?>/gi, " ");
-  const textElem = elem.append("text");
-  textElem.attr("x", textData.x);
-  textElem.attr("y", textData.y);
-  textElem.attr("class", "legend");
-  textElem.style("text-anchor", textData.anchor);
-  if (textData.class !== void 0) {
-    textElem.attr("class", textData.class);
-  }
-  const span = textElem.append("tspan");
-  span.attr("x", textData.x + textData.textMargin * 2);
-  span.text(nText);
-  return textElem;
-};
-const drawLabel = function(elem, txtObject) {
-  function genPoints(x, y, width2, height2, cut) {
-    return x + "," + y + " " + (x + width2) + "," + y + " " + (x + width2) + "," + (y + height2 - cut) + " " + (x + width2 - cut * 1.2) + "," + (y + height2) + " " + x + "," + (y + height2);
-  }
-  const polygon = elem.append("polygon");
-  polygon.attr("points", genPoints(txtObject.x, txtObject.y, 50, 20, 7));
-  polygon.attr("class", "labelBox");
-  txtObject.y = txtObject.y + txtObject.labelMargin;
-  txtObject.x = txtObject.x + 0.5 * txtObject.labelMargin;
-  drawText(elem, txtObject);
-};
-const drawSection = function(elem, section, conf2) {
-  const g = elem.append("g");
-  const rect2 = getNoteRect();
-  rect2.x = section.x;
-  rect2.y = section.y;
-  rect2.fill = section.fill;
-  rect2.width = conf2.width;
-  rect2.height = conf2.height;
-  rect2.class = "journey-section section-type-" + section.num;
-  rect2.rx = 3;
-  rect2.ry = 3;
-  drawRect(g, rect2);
-  _drawTextCandidateFunc(conf2)(
-    section.text,
-    g,
-    rect2.x,
-    rect2.y,
-    rect2.width,
-    rect2.height,
-    { class: "journey-section section-type-" + section.num },
-    conf2,
-    section.colour
-  );
-};
-let taskCount = -1;
-const drawTask = function(elem, task, conf2) {
-  const center = task.x + conf2.width / 2;
-  const g = elem.append("g");
-  taskCount++;
-  const maxHeight = 300 + 5 * 30;
-  g.append("line").attr("id", "task" + taskCount).attr("x1", center).attr("y1", task.y).attr("x2", center).attr("y2", maxHeight).attr("class", "task-line").attr("stroke-width", "1px").attr("stroke-dasharray", "4 2").attr("stroke", "#666");
-  drawFace(g, {
-    cx: center,
-    cy: 300 + (5 - task.score) * 30,
-    score: task.score
-  });
-  const rect2 = getNoteRect();
-  rect2.x = task.x;
-  rect2.y = task.y;
-  rect2.fill = task.fill;
-  rect2.width = conf2.width;
-  rect2.height = conf2.height;
-  rect2.class = "task task-type-" + task.num;
-  rect2.rx = 3;
-  rect2.ry = 3;
-  drawRect(g, rect2);
-  let xPos = task.x + 14;
-  task.people.forEach((person) => {
-    const colour = task.actors[person].color;
-    const circle2 = {
-      cx: xPos,
-      cy: task.y,
-      r: 7,
-      fill: colour,
-      stroke: "#000",
-      title: person,
-      pos: task.actors[person].position
-    };
-    drawCircle(g, circle2);
-    xPos += 10;
-  });
-  _drawTextCandidateFunc(conf2)(
-    task.task,
-    g,
-    rect2.x,
-    rect2.y,
-    rect2.width,
-    rect2.height,
-    { class: "task" },
-    conf2,
-    task.colour
-  );
-};
-const drawBackgroundRect = function(elem, bounds2) {
-  const rectElem = drawRect(elem, {
-    x: bounds2.startx,
-    y: bounds2.starty,
-    width: bounds2.stopx - bounds2.startx,
-    height: bounds2.stopy - bounds2.starty,
-    fill: bounds2.fill,
-    class: "rect"
-  });
-  rectElem.lower();
-};
-const getTextObj = function() {
-  return {
-    x: 0,
-    y: 0,
-    fill: void 0,
-    "text-anchor": "start",
-    width: 100,
-    height: 100,
-    textMargin: 0,
-    rx: 0,
-    ry: 0
-  };
-};
-const getNoteRect = function() {
-  return {
-    x: 0,
-    y: 0,
-    width: 100,
-    anchor: "start",
-    height: 100,
-    rx: 0,
-    ry: 0
-  };
-};
-const _drawTextCandidateFunc = function() {
-  function byText(content, g, x, y, width2, height2, textAttrs, colour) {
-    const text = g.append("text").attr("x", x + width2 / 2).attr("y", y + height2 / 2 + 5).style("font-color", colour).style("text-anchor", "middle").text(content);
-    _setTextAttrs(text, textAttrs);
-  }
-  function byTspan(content, g, x, y, width2, height2, textAttrs, conf2, colour) {
-    const { taskFontSize, taskFontFamily } = conf2;
-    const lines = content.split(/<br\s*\/?>/gi);
-    for (let i = 0; i < lines.length; i++) {
-      const dy = i * taskFontSize - taskFontSize * (lines.length - 1) / 2;
-      const text = g.append("text").attr("x", x + width2 / 2).attr("y", y).attr("fill", colour).style("text-anchor", "middle").style("font-size", taskFontSize).style("font-family", taskFontFamily);
-      text.append("tspan").attr("x", x + width2 / 2).attr("dy", dy).text(lines[i]);
-      text.attr("y", y + height2 / 2).attr("dominant-baseline", "central").attr("alignment-baseline", "central");
-      _setTextAttrs(text, textAttrs);
-    }
-  }
-  function byFo(content, g, x, y, width2, height2, textAttrs, conf2) {
-    const body = g.append("switch");
-    const f = body.append("foreignObject").attr("x", x).attr("y", y).attr("width", width2).attr("height", height2).attr("position", "fixed");
-    const text = f.append("xhtml:div").style("display", "table").style("height", "100%").style("width", "100%");
-    text.append("div").attr("class", "label").style("display", "table-cell").style("text-align", "center").style("vertical-align", "middle").text(content);
-    byTspan(content, body, x, y, width2, height2, textAttrs, conf2);
-    _setTextAttrs(text, textAttrs);
-  }
-  function _setTextAttrs(toText, fromTextAttrsDict) {
-    for (const key in fromTextAttrsDict) {
-      if (key in fromTextAttrsDict) {
-        toText.attr(key, fromTextAttrsDict[key]);
-      }
-    }
-  }
-  return function(conf2) {
-    return conf2.textPlacement === "fo" ? byFo : conf2.textPlacement === "old" ? byText : byTspan;
-  };
-}();
-const initGraphics = function(graphics) {
-  graphics.append("defs").append("marker").attr("id", "arrowhead").attr("refX", 5).attr("refY", 2).attr("markerWidth", 6).attr("markerHeight", 4).attr("orient", "auto").append("path").attr("d", "M 0,0 V 4 L6,2 Z");
-};
-const svgDraw = {
-  drawRect,
-  drawCircle,
-  drawSection,
-  drawText,
-  drawLabel,
-  drawTask,
-  drawBackgroundRect,
-  getTextObj,
-  getNoteRect,
-  initGraphics
-};
-const setConf$1 = function(cnf) {
-  const keys2 = Object.keys(cnf);
-  keys2.forEach(function(key) {
-    conf$1[key] = cnf[key];
-  });
-};
-const actors = {};
-function drawActorLegend(diagram) {
-  const conf2 = getConfig$1().journey;
-  let yPos = 60;
-  Object.keys(actors).forEach((person) => {
-    const colour = actors[person].color;
-    const circleData = {
-      cx: 20,
-      cy: yPos,
-      r: 7,
-      fill: colour,
-      stroke: "#000",
-      pos: actors[person].position
-    };
-    svgDraw.drawCircle(diagram, circleData);
-    const labelData = {
-      x: 40,
-      y: yPos + 7,
-      fill: "#666",
-      text: person,
-      textMargin: conf2.boxTextMargin | 5
-    };
-    svgDraw.drawText(diagram, labelData);
-    yPos += 20;
-  });
-}
-const conf$1 = getConfig$1().journey;
-const LEFT_MARGIN = conf$1.leftMargin;
-const draw$1 = function(text, id2, version2, diagObj) {
-  const conf2 = getConfig$1().journey;
-  diagObj.db.clear();
-  diagObj.parser.parse(text + "\n");
-  const securityLevel = getConfig$1().securityLevel;
-  let sandboxElement;
-  if (securityLevel === "sandbox") {
-    sandboxElement = (0,src/* select */.Ys)("#i" + id2);
-  }
-  const root = securityLevel === "sandbox" ? (0,src/* select */.Ys)(sandboxElement.nodes()[0].contentDocument.body) : (0,src/* select */.Ys)("body");
-  bounds.init();
-  const diagram = root.select("#" + id2);
-  svgDraw.initGraphics(diagram);
-  const tasks2 = diagObj.db.getTasks();
-  const title2 = diagObj.db.getDiagramTitle();
-  const actorNames = diagObj.db.getActors();
-  for (const member in actors) {
-    delete actors[member];
-  }
-  let actorPos = 0;
-  actorNames.forEach((actorName) => {
-    actors[actorName] = {
-      color: conf2.actorColours[actorPos % conf2.actorColours.length],
-      position: actorPos
-    };
-    actorPos++;
-  });
-  drawActorLegend(diagram);
-  bounds.insert(0, 0, LEFT_MARGIN, Object.keys(actors).length * 50);
-  drawTasks(diagram, tasks2, 0);
-  const box = bounds.getBounds();
-  if (title2) {
-    diagram.append("text").text(title2).attr("x", LEFT_MARGIN).attr("font-size", "4ex").attr("font-weight", "bold").attr("y", 25);
-  }
-  const height2 = box.stopy - box.starty + 2 * conf2.diagramMarginY;
-  const width2 = LEFT_MARGIN + box.stopx + 2 * conf2.diagramMarginX;
-  configureSvgSize(diagram, height2, width2, conf2.useMaxWidth);
-  diagram.append("line").attr("x1", LEFT_MARGIN).attr("y1", conf2.height * 4).attr("x2", width2 - LEFT_MARGIN - 4).attr("y2", conf2.height * 4).attr("stroke-width", 4).attr("stroke", "black").attr("marker-end", "url(#arrowhead)");
-  const extraVertForTitle = title2 ? 70 : 0;
-  diagram.attr("viewBox", `${box.startx} -25 ${width2} ${height2 + extraVertForTitle}`);
-  diagram.attr("preserveAspectRatio", "xMinYMin meet");
-  diagram.attr("height", height2 + extraVertForTitle + 25);
-};
-const bounds = {
-  data: {
-    startx: void 0,
-    stopx: void 0,
-    starty: void 0,
-    stopy: void 0
-  },
-  verticalPos: 0,
-  sequenceItems: [],
-  init: function() {
-    this.sequenceItems = [];
-    this.data = {
-      startx: void 0,
-      stopx: void 0,
-      starty: void 0,
-      stopy: void 0
-    };
-    this.verticalPos = 0;
-  },
-  updateVal: function(obj, key, val, fun) {
-    if (obj[key] === void 0) {
-      obj[key] = val;
-    } else {
-      obj[key] = fun(val, obj[key]);
-    }
-  },
-  updateBounds: function(startx, starty, stopx, stopy) {
-    const conf2 = getConfig$1().journey;
-    const _self = this;
-    let cnt2 = 0;
-    function updateFn(type2) {
-      return function updateItemBounds(item) {
-        cnt2++;
-        const n = _self.sequenceItems.length - cnt2 + 1;
-        _self.updateVal(item, "starty", starty - n * conf2.boxMargin, Math.min);
-        _self.updateVal(item, "stopy", stopy + n * conf2.boxMargin, Math.max);
-        _self.updateVal(bounds.data, "startx", startx - n * conf2.boxMargin, Math.min);
-        _self.updateVal(bounds.data, "stopx", stopx + n * conf2.boxMargin, Math.max);
-        if (!(type2 === "activation")) {
-          _self.updateVal(item, "startx", startx - n * conf2.boxMargin, Math.min);
-          _self.updateVal(item, "stopx", stopx + n * conf2.boxMargin, Math.max);
-          _self.updateVal(bounds.data, "starty", starty - n * conf2.boxMargin, Math.min);
-          _self.updateVal(bounds.data, "stopy", stopy + n * conf2.boxMargin, Math.max);
-        }
-      };
-    }
-    this.sequenceItems.forEach(updateFn());
-  },
-  insert: function(startx, starty, stopx, stopy) {
-    const _startx = Math.min(startx, stopx);
-    const _stopx = Math.max(startx, stopx);
-    const _starty = Math.min(starty, stopy);
-    const _stopy = Math.max(starty, stopy);
-    this.updateVal(bounds.data, "startx", _startx, Math.min);
-    this.updateVal(bounds.data, "starty", _starty, Math.min);
-    this.updateVal(bounds.data, "stopx", _stopx, Math.max);
-    this.updateVal(bounds.data, "stopy", _stopy, Math.max);
-    this.updateBounds(_startx, _starty, _stopx, _stopy);
-  },
-  bumpVerticalPos: function(bump) {
-    this.verticalPos = this.verticalPos + bump;
-    this.data.stopy = this.verticalPos;
-  },
-  getVerticalPos: function() {
-    return this.verticalPos;
-  },
-  getBounds: function() {
-    return this.data;
-  }
-};
-const fills = conf$1.sectionFills;
-const textColours = conf$1.sectionColours;
-const drawTasks = function(diagram, tasks2, verticalPos) {
-  const conf2 = getConfig$1().journey;
-  let lastSection = "";
-  const sectionVHeight = conf2.height * 2 + conf2.diagramMarginY;
-  const taskPos = verticalPos + sectionVHeight;
-  let sectionNumber = 0;
-  let fill = "#CCC";
-  let colour = "black";
-  let num = 0;
-  for (const [i, task] of tasks2.entries()) {
-    if (lastSection !== task.section) {
-      fill = fills[sectionNumber % fills.length];
-      num = sectionNumber % fills.length;
-      colour = textColours[sectionNumber % textColours.length];
-      const section = {
-        x: i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN,
-        y: 50,
-        text: task.section,
-        fill,
-        num,
-        colour
-      };
-      svgDraw.drawSection(diagram, section, conf2);
-      lastSection = task.section;
-      sectionNumber++;
-    }
-    const taskActors = task.people.reduce((acc, actorName) => {
-      if (actors[actorName]) {
-        acc[actorName] = actors[actorName];
-      }
-      return acc;
-    }, {});
-    task.x = i * conf2.taskMargin + i * conf2.width + LEFT_MARGIN;
-    task.y = taskPos;
-    task.width = conf2.diagramMarginX;
-    task.height = conf2.diagramMarginY;
-    task.colour = colour;
-    task.fill = fill;
-    task.num = num;
-    task.actors = taskActors;
-    svgDraw.drawTask(diagram, task, conf2);
-    bounds.insert(task.x, task.y, task.x + task.width + conf2.taskMargin, 300 + 5 * 30);
-  }
-};
-const journeyRenderer = {
-  setConf: setConf$1,
-  draw: draw$1
-};
-let conf = {};
-const setConf = function(cnf) {
-  conf = { ...conf, ...cnf };
-};
-const draw = (_text, id2, mermaidVersion) => {
-  try {
-    log$1.debug("Renering svg for syntax error\n");
-    const svg = (0,src/* select */.Ys)("#" + id2);
-    const g = svg.append("g");
-    g.append("path").attr("class", "error-icon").attr(
-      "d",
-      "m411.313,123.313c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32-9.375,9.375-20.688-20.688c-12.484-12.5-32.766-12.5-45.25,0l-16,16c-1.261,1.261-2.304,2.648-3.31,4.051-21.739-8.561-45.324-13.426-70.065-13.426-105.867,0-192,86.133-192,192s86.133,192 192,192 192-86.133 192-192c0-24.741-4.864-48.327-13.426-70.065 1.402-1.007 2.79-2.049 4.051-3.31l16-16c12.5-12.492 12.5-32.758 0-45.25l-20.688-20.688 9.375-9.375 32.001-31.999zm-219.313,100.687c-52.938,0-96,43.063-96,96 0,8.836-7.164,16-16,16s-16-7.164-16-16c0-70.578 57.422-128 128-128 8.836,0 16,7.164 16,16s-7.164,16-16,16z"
-    );
-    g.append("path").attr("class", "error-icon").attr(
-      "d",
-      "m459.02,148.98c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l16,16c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16.001-16z"
-    );
-    g.append("path").attr("class", "error-icon").attr(
-      "d",
-      "m340.395,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688 6.25-6.25 6.25-16.375 0-22.625l-16-16c-6.25-6.25-16.375-6.25-22.625,0s-6.25,16.375 0,22.625l15.999,16z"
-    );
-    g.append("path").attr("class", "error-icon").attr(
-      "d",
-      "m400,64c8.844,0 16-7.164 16-16v-32c0-8.836-7.156-16-16-16-8.844,0-16,7.164-16,16v32c0,8.836 7.156,16 16,16z"
-    );
-    g.append("path").attr("class", "error-icon").attr(
-      "d",
-      "m496,96.586h-32c-8.844,0-16,7.164-16,16 0,8.836 7.156,16 16,16h32c8.844,0 16-7.164 16-16 0-8.836-7.156-16-16-16z"
-    );
-    g.append("path").attr("class", "error-icon").attr(
-      "d",
-      "m436.98,75.605c3.125,3.125 7.219,4.688 11.313,4.688 4.094,0 8.188-1.563 11.313-4.688l32-32c6.25-6.25 6.25-16.375 0-22.625s-16.375-6.25-22.625,0l-32,32c-6.251,6.25-6.251,16.375-0.001,22.625z"
-    );
-    g.append("text").attr("class", "error-text").attr("x", 1440).attr("y", 250).attr("font-size", "150px").style("text-anchor", "middle").text("Syntax error in graph");
-    g.append("text").attr("class", "error-text").attr("x", 1250).attr("y", 400).attr("font-size", "100px").style("text-anchor", "middle").text("mermaid version " + mermaidVersion);
-    svg.attr("height", 100);
-    svg.attr("width", 500);
-    svg.attr("viewBox", "768 0 912 512");
-  } catch (e) {
-    log$1.error("Error while rendering info diagram");
-    log$1.error(getErrorMessage(e));
-  }
-};
-const errorRenderer = {
-  setConf,
-  draw
-};
-const id$2 = "flowchart-elk";
-const detector$2 = (txt, config2) => {
-  var _a;
-  if (
-    // If diagram explicitly states flowchart-elk
-    txt.match(/^\s*flowchart-elk/) || // If a flowchart/graph diagram has their default renderer set to elk
-    txt.match(/^\s*flowchart|graph/) && ((_a = config2 == null ? void 0 : config2.flowchart) == null ? void 0 : _a.defaultRenderer) === "elk"
-  ) {
-    return true;
-  }
-  return false;
-};
-const loader$2 = async () => {
-  const { diagram } = await __webpack_require__.e(/* import() */ 487).then(__webpack_require__.bind(__webpack_require__, 19487));
-  return { id: id$2, diagram };
-};
-const plugin$2 = {
-  id: id$2,
-  detector: detector$2,
-  loader: loader$2
-};
-const flowchartElk = plugin$2;
-const id$1 = "timeline";
-const detector$1 = (txt) => {
-  return txt.match(/^\s*timeline/) !== null;
-};
-const loader$1 = async () => {
-  const { diagram } = await __webpack_require__.e(/* import() */ 316).then(__webpack_require__.bind(__webpack_require__, 96316));
-  return { id: id$1, diagram };
-};
-const plugin$1 = {
-  id: id$1,
-  detector: detector$1,
-  loader: loader$1
-};
-const timelineDetector = plugin$1;
-const id = "mindmap";
-const detector = (txt) => {
-  return txt.match(/^\s*mindmap/) !== null;
-};
-const loader = async () => {
-  const { diagram } = await __webpack_require__.e(/* import() */ 724).then(__webpack_require__.bind(__webpack_require__, 47724));
-  return { id, diagram };
-};
-const mermaid_ae477ddf_plugin = {
-  id,
-  detector,
-  loader
-};
-const mindmapDetector = mermaid_ae477ddf_plugin;
-let hasLoadedDiagrams = false;
-const addDiagrams = () => {
-  if (hasLoadedDiagrams) {
-    return;
-  }
-  hasLoadedDiagrams = true;
-  registerLazyLoadedDiagrams(flowchartElk, timelineDetector, mindmapDetector);
-  registerDiagram(
-    "error",
-    // Special diagram with error messages but setup as a regular diagram
-    {
-      db: {
-        clear: () => {
-        }
-      },
-      styles: errorStyles,
-      renderer: errorRenderer,
-      parser: {
-        parser: { yy: {} },
-        parse: () => {
-        }
-      },
-      init: () => {
-      }
-    },
-    (text) => text.toLowerCase().trim() === "error"
-  );
-  registerDiagram(
-    "---",
-    // --- diagram type may appear if YAML front-matter is not parsed correctly
-    {
-      db: {
-        clear: () => {
-        }
-      },
-      styles: errorStyles,
-      // should never be used
-      renderer: errorRenderer,
-      // should never be used
-      parser: {
-        parser: { yy: {} },
-        parse: () => {
-          throw new Error(
-            "Diagrams beginning with --- are not valid. If you were trying to use a YAML front-matter, please ensure that you've correctly opened and closed the YAML front-matter with unindented `---` blocks"
-          );
-        }
-      },
-      init: () => null
-      // no op
-    },
-    (text) => {
-      return text.toLowerCase().trimStart().startsWith("---");
-    }
-  );
-  registerDiagram(
-    "c4",
-    {
-      parser: c4Parser,
-      db: c4Db,
-      renderer: c4Renderer,
-      styles: c4Styles,
-      init: (cnf) => {
-        c4Renderer.setConf(cnf.c4);
-      }
-    },
-    c4Detector
-  );
-  registerDiagram(
-    "class",
-    {
-      parser: classParser,
-      db: classDb,
-      renderer: classRenderer,
-      styles: classStyles,
-      init: (cnf) => {
-        if (!cnf.class) {
-          cnf.class = {};
-        }
-        cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
-        classDb.clear();
-      }
-    },
-    classDetector
-  );
-  registerDiagram(
-    "classDiagram",
-    {
-      parser: classParser,
-      db: classDb,
-      renderer: classRendererV2,
-      styles: classStyles,
-      init: (cnf) => {
-        if (!cnf.class) {
-          cnf.class = {};
-        }
-        cnf.class.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
-        classDb.clear();
-      }
-    },
-    classDetectorV2
-  );
-  registerDiagram(
-    "er",
-    {
-      parser: erParser,
-      db: erDb,
-      renderer: erRenderer,
-      styles: erStyles
-    },
-    erDetector
-  );
-  registerDiagram(
-    "gantt",
-    {
-      parser: ganttParser,
-      db: ganttDb,
-      renderer: ganttRenderer,
-      styles: ganttStyles
-    },
-    ganttDetector
-  );
-  registerDiagram(
-    "info",
-    {
-      parser: infoParser,
-      db: infoDb,
-      renderer: infoRenderer,
-      styles: infoStyles
-    },
-    infoDetector
-  );
-  registerDiagram(
-    "pie",
-    {
-      parser: pieParser,
-      db: pieDb,
-      renderer: pieRenderer,
-      styles: pieStyles
-    },
-    pieDetector
-  );
-  registerDiagram(
-    "requirement",
-    {
-      parser: requirementParser,
-      db: requirementDb,
-      renderer: requirementRenderer,
-      styles: requirementStyles
-    },
-    requirementDetector
-  );
-  registerDiagram(
-    "sequence",
-    {
-      parser: sequenceParser,
-      db: sequenceDb,
-      renderer: sequenceRenderer,
-      styles: sequenceStyles,
-      init: (cnf) => {
-        if (!cnf.sequence) {
-          cnf.sequence = {};
-        }
-        cnf.sequence.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
-        if ("sequenceDiagram" in cnf) {
-          throw new Error(
-            "`mermaid config.sequenceDiagram` has been renamed to `config.sequence`. Please update your mermaid config."
-          );
-        }
-        sequenceDb.setWrap(cnf.wrap);
-        sequenceRenderer.setConf(cnf.sequence);
-      }
-    },
-    sequenceDetector
-  );
-  registerDiagram(
-    "state",
-    {
-      parser: stateParser,
-      db: stateDb,
-      renderer: stateRenderer,
-      styles: stateStyles,
-      init: (cnf) => {
-        if (!cnf.state) {
-          cnf.state = {};
-        }
-        cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
-        stateDb.clear();
-      }
-    },
-    stateDetector
-  );
-  registerDiagram(
-    "stateDiagram",
-    {
-      parser: stateParser,
-      db: stateDb,
-      renderer: stateRendererV2,
-      styles: stateStyles,
-      init: (cnf) => {
-        if (!cnf.state) {
-          cnf.state = {};
-        }
-        cnf.state.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
-        stateDb.clear();
-      }
-    },
-    stateDetectorV2
-  );
-  registerDiagram(
-    "journey",
-    {
-      parser: journeyParser,
-      db: journeyDb,
-      renderer: journeyRenderer,
-      styles: journeyStyles,
-      init: (cnf) => {
-        journeyRenderer.setConf(cnf.journey);
-        journeyDb.clear();
-      }
-    },
-    journeyDetector
-  );
-  registerDiagram(
-    "flowchart",
-    {
-      parser: parser$8,
-      db: flowDb,
-      renderer: flowRendererV2,
-      styles: flowStyles,
-      init: (cnf) => {
-        if (!cnf.flowchart) {
-          cnf.flowchart = {};
-        }
-        cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
-        flowRenderer.setConf(cnf.flowchart);
-        flowDb.clear();
-        flowDb.setGen("gen-1");
-      }
-    },
-    flowDetector
-  );
-  registerDiagram(
-    "flowchart-v2",
-    {
-      parser: parser$8,
-      db: flowDb,
-      renderer: flowRendererV2,
-      styles: flowStyles,
-      init: (cnf) => {
-        if (!cnf.flowchart) {
-          cnf.flowchart = {};
-        }
-        cnf.flowchart.arrowMarkerAbsolute = cnf.arrowMarkerAbsolute;
-        setConfig({ flowchart: { arrowMarkerAbsolute: cnf.arrowMarkerAbsolute } });
-        flowRendererV2.setConf(cnf.flowchart);
-        flowDb.clear();
-        flowDb.setGen("gen-2");
-      }
-    },
-    flowDetectorV2
-  );
-  registerDiagram(
-    "gitGraph",
-    { parser: gitGraphParser, db: gitGraphDb, renderer: gitGraphRenderer, styles: gitGraphStyles },
-    gitGraphDetector
-  );
-};
-class Diagram {
-  constructor(txt, parseError) {
-    var _a, _b;
-    this.txt = txt;
-    this.type = "graph";
-    this.detectTypeFailed = false;
-    const cnf = getConfig$1();
-    this.txt = txt;
-    try {
-      this.type = detectType(txt, cnf);
-    } catch (e) {
-      this.handleError(e, parseError);
-      this.type = "error";
-      this.detectTypeFailed = true;
-    }
-    const diagram = getDiagram(this.type);
-    log$1.debug("Type " + this.type);
-    this.db = diagram.db;
-    (_b = (_a = this.db).clear) == null ? void 0 : _b.call(_a);
-    this.renderer = diagram.renderer;
-    this.parser = diagram.parser;
-    const originalParse = this.parser.parse.bind(this.parser);
-    this.parser.parse = (text) => originalParse(extractFrontMatter(text, this.db));
-    this.parser.parser.yy = this.db;
-    if (diagram.init) {
-      diagram.init(cnf);
-      log$1.info("Initialized diagram " + this.type, cnf);
-    }
-    this.txt += "\n";
-    this.parse(this.txt, parseError);
-  }
-  parse(text, parseError) {
-    var _a, _b;
-    if (this.detectTypeFailed) {
-      return false;
-    }
-    try {
-      text = text + "\n";
-      (_b = (_a = this.db).clear) == null ? void 0 : _b.call(_a);
-      this.parser.parse(text);
-      return true;
-    } catch (error) {
-      this.handleError(error, parseError);
-    }
-    return false;
-  }
-  handleError(error, parseError) {
-    if (parseError === void 0) {
-      throw error;
-    }
-    if (isDetailedError(error)) {
-      parseError(error.str, error.hash);
-      return;
-    }
-    parseError(error);
-  }
-  getParser() {
-    return this.parser;
-  }
-  getType() {
-    return this.type;
-  }
-}
-const getDiagramFromText = (txt, parseError) => {
-  const type2 = detectType(txt, getConfig$1());
-  try {
-    getDiagram(type2);
-  } catch (error) {
-    const loader2 = getDiagramLoader(type2);
-    if (!loader2) {
-      throw new Error(`Diagram ${type2} not found.`);
-    }
-    return loader2().then(({ diagram }) => {
-      registerDiagram(type2, diagram, void 0);
-      return new Diagram(txt, parseError);
-    });
-  }
-  return new Diagram(txt, parseError);
-};
-const Diagram$1 = Diagram;
-const SVG_ROLE = "graphics-document document";
-function setA11yDiagramInfo(svg, diagramType) {
-  svg.attr("role", SVG_ROLE);
-  if (!(0,isEmpty/* default */.Z)(diagramType)) {
-    svg.attr("aria-roledescription", diagramType);
-  }
-}
-function addSVGa11yTitleDescription(svg, a11yTitle, a11yDesc, baseId) {
-  if (svg.insert === void 0) {
-    return;
-  }
-  if (a11yTitle || a11yDesc) {
-    if (a11yDesc) {
-      const descId = "chart-desc-" + baseId;
-      svg.attr("aria-describedby", descId);
-      svg.insert("desc", ":first-child").attr("id", descId).text(a11yDesc);
-    }
-    if (a11yTitle) {
-      const titleId = "chart-title-" + baseId;
-      svg.attr("aria-labelledby", titleId);
-      svg.insert("title", ":first-child").attr("id", titleId).text(a11yTitle);
-    }
-  } else {
-    return;
-  }
-}
-const CLASSDEF_DIAGRAMS = ["graph", "flowchart", "flowchart-v2", "stateDiagram", "stateDiagram-v2"];
-const MAX_TEXTLENGTH_EXCEEDED_MSG = "graph TB;a[Maximum text size in diagram exceeded];style a fill:#faa";
-const SECURITY_LVL_SANDBOX = "sandbox";
-const SECURITY_LVL_LOOSE = "loose";
-const XMLNS_SVG_STD = "http://www.w3.org/2000/svg";
-const XMLNS_XLINK_STD = "http://www.w3.org/1999/xlink";
-const XMLNS_XHTML_STD = "http://www.w3.org/1999/xhtml";
-const IFRAME_WIDTH = "100%";
-const IFRAME_HEIGHT = "100%";
-const IFRAME_STYLES = "border:0;margin:0;";
-const IFRAME_BODY_STYLE = "margin:0";
-const IFRAME_SANDBOX_OPTS = "allow-top-navigation-by-user-activation allow-popups";
-const IFRAME_NOT_SUPPORTED_MSG = 'The "iframe" tag is not supported by your browser.';
-const DOMPURIFY_TAGS = ["foreignobject"];
-const DOMPURIFY_ATTR = ["dominant-baseline"];
-function parse$1(text, parseError) {
-  addDiagrams();
-  const diagram = new Diagram$1(text, parseError);
-  return diagram.parse(text, parseError);
-}
-async function parseAsync$1(text, parseError) {
-  addDiagrams();
-  const diagram = await getDiagramFromText(text, parseError);
-  return diagram.parse(text, parseError);
-}
-const encodeEntities = function(text) {
-  let txt = text;
-  txt = txt.replace(/style.*:\S*#.*;/g, function(s) {
-    return s.substring(0, s.length - 1);
-  });
-  txt = txt.replace(/classDef.*:\S*#.*;/g, function(s) {
-    return s.substring(0, s.length - 1);
-  });
-  txt = txt.replace(/#\w+;/g, function(s) {
-    const innerTxt = s.substring(1, s.length - 1);
-    const isInt = /^\+?\d+$/.test(innerTxt);
-    if (isInt) {
-      return "fl°°" + innerTxt + "¶ß";
-    } else {
-      return "fl°" + innerTxt + "¶ß";
-    }
-  });
-  return txt;
-};
-const decodeEntities = function(text) {
-  let txt = text;
-  txt = txt.replace(/fl°°/g, "&#");
-  txt = txt.replace(/fl°/g, "&");
-  txt = txt.replace(/¶ß/g, ";");
-  return txt;
-};
-const cssImportantStyles = (cssClass, element, cssClasses = []) => {
-  return `
-.${cssClass} ${element} { ${cssClasses.join(" !important; ")} !important; }`;
-};
-const createCssStyles = (config2, graphType, classDefs = {}) => {
-  var _a;
-  let cssStyles = "";
-  if (config2.themeCSS !== void 0) {
-    cssStyles += `
-${config2.themeCSS}`;
-  }
-  if (config2.fontFamily !== void 0) {
-    cssStyles += `
-:root { --mermaid-font-family: ${config2.fontFamily}}`;
-  }
-  if (config2.altFontFamily !== void 0) {
-    cssStyles += `
-:root { --mermaid-alt-font-family: ${config2.altFontFamily}}`;
-  }
-  if (!(0,isEmpty/* default */.Z)(classDefs) && CLASSDEF_DIAGRAMS.includes(graphType)) {
-    const htmlLabels = config2.htmlLabels || ((_a = config2.flowchart) == null ? void 0 : _a.htmlLabels);
-    const cssHtmlElements = ["> *", "span"];
-    const cssShapeElements = ["rect", "polygon", "ellipse", "circle", "path"];
-    const cssElements = htmlLabels ? cssHtmlElements : cssShapeElements;
-    for (const classId in classDefs) {
-      const styleClassDef = classDefs[classId];
-      if (!(0,isEmpty/* default */.Z)(styleClassDef.styles)) {
-        cssElements.forEach((cssElement) => {
-          cssStyles += cssImportantStyles(styleClassDef.id, cssElement, styleClassDef.styles);
-        });
-      }
-      if (!(0,isEmpty/* default */.Z)(styleClassDef.textStyles)) {
-        cssStyles += cssImportantStyles(styleClassDef.id, "tspan", styleClassDef.textStyles);
-      }
-    }
-  }
-  return cssStyles;
-};
-const createUserStyles = (config2, graphType, classDefs, svgId) => {
-  const userCSSstyles = createCssStyles(config2, graphType, classDefs);
-  const allStyles = getStyles$2(graphType, userCSSstyles, config2.themeVariables);
-  return (0,Serializer/* serialize */.q)((0,Parser/* compile */.MY)(`${svgId}{${allStyles}}`), Serializer/* stringify */.P);
-};
-const cleanUpSvgCode = (svgCode = "", inSandboxMode, useArrowMarkerUrls) => {
-  let cleanedUpSvg = svgCode;
-  if (!useArrowMarkerUrls && !inSandboxMode) {
-    cleanedUpSvg = cleanedUpSvg.replace(/marker-end="url\(.*?#/g, 'marker-end="url(#');
-  }
-  cleanedUpSvg = decodeEntities(cleanedUpSvg);
-  cleanedUpSvg = cleanedUpSvg.replace(/<br>/g, "<br/>");
-  return cleanedUpSvg;
-};
-const putIntoIFrame = (svgCode = "", svgElement) => {
-  const height2 = svgElement ? svgElement.viewBox.baseVal.height + "px" : IFRAME_HEIGHT;
-  const base64encodedSrc = btoa('<body style="' + IFRAME_BODY_STYLE + '">' + svgCode + "</body>");
-  return `<iframe style="width:${IFRAME_WIDTH};height:${height2};${IFRAME_STYLES}" src="data:text/html;base64,${base64encodedSrc}" sandbox="${IFRAME_SANDBOX_OPTS}">
-  ${IFRAME_NOT_SUPPORTED_MSG}
-</iframe>`;
-};
-const appendDivSvgG = (parentRoot, id2, enclosingDivId, divStyle, svgXlink) => {
-  const enclosingDiv = parentRoot.append("div");
-  enclosingDiv.attr("id", enclosingDivId);
-  if (divStyle) {
-    enclosingDiv.attr("style", divStyle);
-  }
-  const svgNode = enclosingDiv.append("svg").attr("id", id2).attr("width", "100%").attr("xmlns", XMLNS_SVG_STD);
-  if (svgXlink) {
-    svgNode.attr("xmlns:xlink", svgXlink);
-  }
-  svgNode.append("g");
-  return parentRoot;
-};
-function sandboxedIframe(parentNode, iFrameId) {
-  return parentNode.append("iframe").attr("id", iFrameId).attr("style", "width: 100%; height: 100%;").attr("sandbox", "");
-}
-const removeExistingElements = (doc, id2, divId, iFrameId) => {
-  var _a, _b, _c;
-  (_a = doc.getElementById(id2)) == null ? void 0 : _a.remove();
-  (_b = doc.getElementById(divId)) == null ? void 0 : _b.remove();
-  (_c = doc.getElementById(iFrameId)) == null ? void 0 : _c.remove();
-};
-const render = function(id2, text, cb, svgContainingElement) {
-  var _a, _b, _c, _d;
-  addDiagrams();
-  mermaid_ae477ddf_reset();
-  const graphInit = mermaid_ae477ddf_utils.detectInit(text);
-  if (graphInit) {
-    directiveSanitizer(graphInit);
-    addDirective(graphInit);
-  }
-  const config2 = getConfig$1();
-  log$1.debug(config2);
-  if (text.length > ((config2 == null ? void 0 : config2.maxTextSize) ?? 5e4)) {
-    text = MAX_TEXTLENGTH_EXCEEDED_MSG;
-  }
-  text = text.replace(/\r\n?/g, "\n");
-  const idSelector = "#" + id2;
-  const iFrameID = "i" + id2;
-  const iFrameID_selector = "#" + iFrameID;
-  const enclosingDivID = "d" + id2;
-  const enclosingDivID_selector = "#" + enclosingDivID;
-  let root = (0,src/* select */.Ys)("body");
-  const isSandboxed = config2.securityLevel === SECURITY_LVL_SANDBOX;
-  const isLooseSecurityLevel = config2.securityLevel === SECURITY_LVL_LOOSE;
-  const fontFamily = config2.fontFamily;
-  if (svgContainingElement !== void 0) {
-    if (svgContainingElement) {
-      svgContainingElement.innerHTML = "";
-    }
-    if (isSandboxed) {
-      const iframe = sandboxedIframe((0,src/* select */.Ys)(svgContainingElement), iFrameID);
-      root = (0,src/* select */.Ys)(iframe.nodes()[0].contentDocument.body);
-      root.node().style.margin = 0;
-    } else {
-      root = (0,src/* select */.Ys)(svgContainingElement);
-    }
-    appendDivSvgG(root, id2, enclosingDivID, `font-family: ${fontFamily}`, XMLNS_XLINK_STD);
-  } else {
-    removeExistingElements(document, id2, enclosingDivID, iFrameID);
-    if (isSandboxed) {
-      const iframe = sandboxedIframe((0,src/* select */.Ys)("body"), iFrameID);
-      root = (0,src/* select */.Ys)(iframe.nodes()[0].contentDocument.body);
-      root.node().style.margin = 0;
-    } else {
-      root = (0,src/* select */.Ys)("body");
-    }
-    appendDivSvgG(root, id2, enclosingDivID);
-  }
-  text = encodeEntities(text);
-  let diag;
-  let parseEncounteredException;
-  try {
-    diag = getDiagramFromText(text);
-    if ("then" in diag) {
-      throw new Error("Diagram is a promise. Use renderAsync.");
-    }
-  } catch (error) {
-    diag = new Diagram$1("error");
-    parseEncounteredException = error;
-  }
-  const element = root.select(enclosingDivID_selector).node();
-  const graphType = diag.type;
-  const svg = element.firstChild;
-  const firstChild = svg.firstChild;
-  const diagramClassDefs = CLASSDEF_DIAGRAMS.includes(graphType) ? diag.renderer.getClasses(text, diag) : {};
-  const rules = createUserStyles(
-    config2,
-    graphType,
-    // @ts-ignore convert renderer to TS.
-    diagramClassDefs,
-    idSelector
-  );
-  const style1 = document.createElement("style");
-  style1.innerHTML = rules;
-  svg.insertBefore(style1, firstChild);
-  try {
-    diag.renderer.draw(text, id2, version$1, diag);
-  } catch (e) {
-    errorRenderer.draw(text, id2, version$1);
-    throw e;
-  }
-  const svgNode = root.select(`${enclosingDivID_selector} svg`);
-  const a11yTitle = (_b = (_a = diag.db).getAccTitle) == null ? void 0 : _b.call(_a);
-  const a11yDescr = (_d = (_c = diag.db).getAccDescription) == null ? void 0 : _d.call(_c);
-  addA11yInfo(graphType, svgNode, a11yTitle, a11yDescr);
-  root.select(`[id="${id2}"]`).selectAll("foreignobject > *").attr("xmlns", XMLNS_XHTML_STD);
-  let svgCode = root.select(enclosingDivID_selector).node().innerHTML;
-  log$1.debug("config.arrowMarkerAbsolute", config2.arrowMarkerAbsolute);
-  svgCode = cleanUpSvgCode(svgCode, isSandboxed, evaluate(config2.arrowMarkerAbsolute));
-  if (isSandboxed) {
-    const svgEl = root.select(enclosingDivID_selector + " svg").node();
-    svgCode = putIntoIFrame(svgCode, svgEl);
-  } else if (!isLooseSecurityLevel) {
-    svgCode = purify_es/* default.sanitize */.Z.sanitize(svgCode, {
-      ADD_TAGS: DOMPURIFY_TAGS,
-      ADD_ATTR: DOMPURIFY_ATTR
-    });
-  }
-  if (cb !== void 0) {
-    switch (graphType) {
-      case "flowchart":
-      case "flowchart-v2":
-        cb(svgCode, flowDb.bindFunctions);
-        break;
-      case "gantt":
-        cb(svgCode, ganttDb.bindFunctions);
-        break;
-      case "class":
-      case "classDiagram":
-        cb(svgCode, classDb.bindFunctions);
-        break;
-      default:
-        cb(svgCode);
-    }
-  } else {
-    log$1.debug("CB = undefined!");
-  }
-  attachFunctions();
-  const tmpElementSelector = isSandboxed ? iFrameID_selector : enclosingDivID_selector;
-  const node = (0,src/* select */.Ys)(tmpElementSelector).node();
-  if (node && "remove" in node) {
-    node.remove();
-  }
-  if (parseEncounteredException) {
-    throw parseEncounteredException;
-  }
-  return svgCode;
-};
-const renderAsync$1 = async function(id2, text, cb, svgContainingElement) {
-  var _a, _b, _c, _d;
-  addDiagrams();
-  mermaid_ae477ddf_reset();
-  const graphInit = mermaid_ae477ddf_utils.detectInit(text);
-  if (graphInit) {
-    directiveSanitizer(graphInit);
-    addDirective(graphInit);
-  }
-  const config2 = getConfig$1();
-  log$1.debug(config2);
-  if (text.length > ((config2 == null ? void 0 : config2.maxTextSize) ?? 5e4)) {
-    text = MAX_TEXTLENGTH_EXCEEDED_MSG;
-  }
-  text = text.replace(/\r\n?/g, "\n");
-  const idSelector = "#" + id2;
-  const iFrameID = "i" + id2;
-  const iFrameID_selector = "#" + iFrameID;
-  const enclosingDivID = "d" + id2;
-  const enclosingDivID_selector = "#" + enclosingDivID;
-  let root = (0,src/* select */.Ys)("body");
-  const isSandboxed = config2.securityLevel === SECURITY_LVL_SANDBOX;
-  const isLooseSecurityLevel = config2.securityLevel === SECURITY_LVL_LOOSE;
-  const fontFamily = config2.fontFamily;
-  if (svgContainingElement !== void 0) {
-    if (svgContainingElement) {
-      svgContainingElement.innerHTML = "";
-    }
-    if (isSandboxed) {
-      const iframe = sandboxedIframe((0,src/* select */.Ys)(svgContainingElement), iFrameID);
-      root = (0,src/* select */.Ys)(iframe.nodes()[0].contentDocument.body);
-      root.node().style.margin = 0;
-    } else {
-      root = (0,src/* select */.Ys)(svgContainingElement);
-    }
-    appendDivSvgG(root, id2, enclosingDivID, `font-family: ${fontFamily}`, XMLNS_XLINK_STD);
-  } else {
-    removeExistingElements(document, id2, enclosingDivID, iFrameID);
-    if (isSandboxed) {
-      const iframe = sandboxedIframe((0,src/* select */.Ys)("body"), iFrameID);
-      root = (0,src/* select */.Ys)(iframe.nodes()[0].contentDocument.body);
-      root.node().style.margin = 0;
-    } else {
-      root = (0,src/* select */.Ys)("body");
-    }
-    appendDivSvgG(root, id2, enclosingDivID);
-  }
-  text = encodeEntities(text);
-  let diag;
-  let parseEncounteredException;
-  try {
-    diag = await getDiagramFromText(text);
-  } catch (error) {
-    diag = new Diagram$1("error");
-    parseEncounteredException = error;
-  }
-  const element = root.select(enclosingDivID_selector).node();
-  const graphType = diag.type;
-  const svg = element.firstChild;
-  const firstChild = svg.firstChild;
-  const diagramClassDefs = CLASSDEF_DIAGRAMS.includes(graphType) ? diag.renderer.getClasses(text, diag) : {};
-  const rules = createUserStyles(
-    config2,
-    graphType,
-    // @ts-ignore convert renderer to TS.
-    diagramClassDefs,
-    idSelector
-  );
-  const style1 = document.createElement("style");
-  style1.innerHTML = rules;
-  svg.insertBefore(style1, firstChild);
-  try {
-    await diag.renderer.draw(text, id2, version$1, diag);
-  } catch (e) {
-    errorRenderer.draw(text, id2, version$1);
-    throw e;
-  }
-  const svgNode = root.select(`${enclosingDivID_selector} svg`);
-  const a11yTitle = (_b = (_a = diag.db).getAccTitle) == null ? void 0 : _b.call(_a);
-  const a11yDescr = (_d = (_c = diag.db).getAccDescription) == null ? void 0 : _d.call(_c);
-  addA11yInfo(graphType, svgNode, a11yTitle, a11yDescr);
-  root.select(`[id="${id2}"]`).selectAll("foreignobject > *").attr("xmlns", XMLNS_XHTML_STD);
-  let svgCode = root.select(enclosingDivID_selector).node().innerHTML;
-  log$1.debug("config.arrowMarkerAbsolute", config2.arrowMarkerAbsolute);
-  svgCode = cleanUpSvgCode(svgCode, isSandboxed, evaluate(config2.arrowMarkerAbsolute));
-  if (isSandboxed) {
-    const svgEl = root.select(enclosingDivID_selector + " svg").node();
-    svgCode = putIntoIFrame(svgCode, svgEl);
-  } else if (!isLooseSecurityLevel) {
-    svgCode = purify_es/* default.sanitize */.Z.sanitize(svgCode, {
-      ADD_TAGS: DOMPURIFY_TAGS,
-      ADD_ATTR: DOMPURIFY_ATTR
-    });
-  }
-  if (cb !== void 0) {
-    switch (graphType) {
-      case "flowchart":
-      case "flowchart-v2":
-        cb(svgCode, flowDb.bindFunctions);
-        break;
-      case "gantt":
-        cb(svgCode, ganttDb.bindFunctions);
-        break;
-      case "class":
-      case "classDiagram":
-        cb(svgCode, classDb.bindFunctions);
-        break;
-      default:
-        cb(svgCode);
-    }
-  } else {
-    log$1.debug("CB = undefined!");
-  }
-  attachFunctions();
-  const tmpElementSelector = isSandboxed ? iFrameID_selector : enclosingDivID_selector;
-  const node = (0,src/* select */.Ys)(tmpElementSelector).node();
-  if (node && "remove" in node) {
-    node.remove();
-  }
-  if (parseEncounteredException) {
-    throw parseEncounteredException;
-  }
-  return svgCode;
-};
-function initialize$1(options2 = {}) {
-  var _a;
-  if ((options2 == null ? void 0 : options2.fontFamily) && !((_a = options2.themeVariables) == null ? void 0 : _a.fontFamily)) {
-    options2.themeVariables = { fontFamily: options2.fontFamily };
-  }
-  saveConfigFromInitialize(options2);
-  if ((options2 == null ? void 0 : options2.theme) && options2.theme in theme) {
-    options2.themeVariables = theme[options2.theme].getThemeVariables(
-      options2.themeVariables
-    );
-  } else if (options2) {
-    options2.themeVariables = theme.default.getThemeVariables(options2.themeVariables);
-  }
-  const config2 = typeof options2 === "object" ? setSiteConfig(options2) : getSiteConfig();
-  setLogLevel$1(config2.logLevel);
-  addDiagrams();
-}
-function addA11yInfo(graphType, svgNode, a11yTitle, a11yDescr) {
-  setA11yDiagramInfo(svgNode, graphType);
-  addSVGa11yTitleDescription(svgNode, a11yTitle, a11yDescr, svgNode.attr("id"));
-}
-const mermaidAPI = Object.freeze({
-  render,
-  renderAsync: renderAsync$1,
-  parse: parse$1,
-  parseAsync: parseAsync$1,
-  parseDirective: parseDirective$c,
-  initialize: initialize$1,
-  getConfig: getConfig$1,
-  setConfig,
-  getSiteConfig,
-  updateSiteConfig,
-  reset: () => {
-    mermaid_ae477ddf_reset();
-  },
-  globalReset: () => {
-    mermaid_ae477ddf_reset(defaultConfig);
-  },
-  defaultConfig
-});
-setLogLevel$1(getConfig$1().logLevel);
-mermaid_ae477ddf_reset(getConfig$1());
-const init = async function(config2, nodes, callback) {
-  try {
-    await initThrowsErrorsAsync(config2, nodes, callback);
-  } catch (e) {
-    log$1.warn("Syntax Error rendering");
-    if (isDetailedError(e)) {
-      log$1.warn(e.str);
-    }
-    if (mermaid.parseError) {
-      mermaid.parseError(e);
-    }
-  }
-};
-const handleError = (error, errors, parseError) => {
-  log$1.warn(error);
-  if (isDetailedError(error)) {
-    if (parseError) {
-      parseError(error.str, error.hash);
-    }
-    errors.push({ ...error, message: error.str, error });
-  } else {
-    if (parseError) {
-      parseError(error);
-    }
-    if (error instanceof Error) {
-      errors.push({
-        str: error.message,
-        message: error.message,
-        hash: error.name,
-        error
-      });
-    }
-  }
-};
-const initThrowsErrors = function(config2, nodes, callback) {
-  const conf2 = mermaidAPI.getConfig();
-  if (config2) {
-    mermaid.sequenceConfig = config2;
-  }
-  log$1.debug(`${!callback ? "No " : ""}Callback function found`);
-  let nodesToProcess;
-  if (nodes === void 0) {
-    nodesToProcess = document.querySelectorAll(".mermaid");
-  } else if (typeof nodes === "string") {
-    nodesToProcess = document.querySelectorAll(nodes);
-  } else if (nodes instanceof HTMLElement) {
-    nodesToProcess = [nodes];
-  } else if (nodes instanceof NodeList) {
-    nodesToProcess = nodes;
-  } else {
-    throw new Error("Invalid argument nodes for mermaid.init");
-  }
-  log$1.debug(`Found ${nodesToProcess.length} diagrams`);
-  if ((config2 == null ? void 0 : config2.startOnLoad) !== void 0) {
-    log$1.debug("Start On Load: " + (config2 == null ? void 0 : config2.startOnLoad));
-    mermaidAPI.updateSiteConfig({ startOnLoad: config2 == null ? void 0 : config2.startOnLoad });
-  }
-  const idGenerator = new mermaid_ae477ddf_utils.initIdGenerator(conf2.deterministicIds, conf2.deterministicIDSeed);
-  let txt;
-  const errors = [];
-  for (const element of Array.from(nodesToProcess)) {
-    log$1.info("Rendering diagram: " + element.id);
-    /*! Check if previously processed */
-    if (element.getAttribute("data-processed")) {
-      continue;
-    }
-    element.setAttribute("data-processed", "true");
-    const id2 = `mermaid-${idGenerator.next()}`;
-    txt = element.innerHTML;
-    txt = esm(mermaid_ae477ddf_utils.entityDecode(txt)).trim().replace(/<br\s*\/?>/gi, "<br/>");
-    const init2 = mermaid_ae477ddf_utils.detectInit(txt);
-    if (init2) {
-      log$1.debug("Detected early reinit: ", init2);
-    }
-    try {
-      mermaidAPI.render(
-        id2,
-        txt,
-        (svgCode, bindFunctions2) => {
-          element.innerHTML = svgCode;
-          if (callback !== void 0) {
-            callback(id2);
-          }
-          if (bindFunctions2) {
-            bindFunctions2(element);
-          }
-        },
-        element
-      );
-    } catch (error) {
-      handleError(error, errors, mermaid.parseError);
-    }
-  }
-  if (errors.length > 0) {
-    throw errors[0];
-  }
-};
-const loadExternalDiagrams = async (...diagrams2) => {
-  log$1.debug(`Loading ${diagrams2.length} external diagrams`);
-  const results = await Promise.allSettled(
-    diagrams2.map(async ({ id: id2, detector: detector2, loader: loader2 }) => {
-      const { diagram } = await loader2();
-      registerDiagram(id2, diagram, detector2);
-    })
-  );
-  const failed = results.filter((result) => result.status === "rejected");
-  if (failed.length > 0) {
-    log$1.error(`Failed to load ${failed.length} external diagrams`);
-    for (const res of failed) {
-      log$1.error(res);
-    }
-    throw new Error(`Failed to load ${failed.length} external diagrams`);
-  }
-};
-const initThrowsErrorsAsync = async function(config2, nodes, callback) {
-  const conf2 = mermaidAPI.getConfig();
-  if (config2) {
-    mermaid.sequenceConfig = config2;
-  }
-  log$1.debug(`${!callback ? "No " : ""}Callback function found`);
-  let nodesToProcess;
-  if (nodes === void 0) {
-    nodesToProcess = document.querySelectorAll(".mermaid");
-  } else if (typeof nodes === "string") {
-    nodesToProcess = document.querySelectorAll(nodes);
-  } else if (nodes instanceof HTMLElement) {
-    nodesToProcess = [nodes];
-  } else if (nodes instanceof NodeList) {
-    nodesToProcess = nodes;
-  } else {
-    throw new Error("Invalid argument nodes for mermaid.init");
-  }
-  log$1.debug(`Found ${nodesToProcess.length} diagrams`);
-  if ((config2 == null ? void 0 : config2.startOnLoad) !== void 0) {
-    log$1.debug("Start On Load: " + (config2 == null ? void 0 : config2.startOnLoad));
-    mermaidAPI.updateSiteConfig({ startOnLoad: config2 == null ? void 0 : config2.startOnLoad });
-  }
-  const idGenerator = new mermaid_ae477ddf_utils.initIdGenerator(conf2.deterministicIds, conf2.deterministicIDSeed);
-  let txt;
-  const errors = [];
-  for (const element of Array.from(nodesToProcess)) {
-    log$1.info("Rendering diagram: " + element.id);
-    /*! Check if previously processed */
-    if (element.getAttribute("data-processed")) {
-      continue;
-    }
-    element.setAttribute("data-processed", "true");
-    const id2 = `mermaid-${idGenerator.next()}`;
-    txt = element.innerHTML;
-    txt = esm(mermaid_ae477ddf_utils.entityDecode(txt)).trim().replace(/<br\s*\/?>/gi, "<br/>");
-    const init2 = mermaid_ae477ddf_utils.detectInit(txt);
-    if (init2) {
-      log$1.debug("Detected early reinit: ", init2);
-    }
-    try {
-      await mermaidAPI.renderAsync(
-        id2,
-        txt,
-        (svgCode, bindFunctions2) => {
-          element.innerHTML = svgCode;
-          if (callback !== void 0) {
-            callback(id2);
-          }
-          if (bindFunctions2) {
-            bindFunctions2(element);
-          }
-        },
-        element
-      );
-    } catch (error) {
-      handleError(error, errors, mermaid.parseError);
-    }
-  }
-  if (errors.length > 0) {
-    throw errors[0];
-  }
-};
-const initialize = function(config2) {
-  mermaidAPI.initialize(config2);
-};
-const registerExternalDiagrams = async (diagrams2, {
-  lazyLoad = true
-} = {}) => {
-  if (lazyLoad) {
-    registerLazyLoadedDiagrams(...diagrams2);
-  } else {
-    await loadExternalDiagrams(...diagrams2);
-  }
-};
-const contentLoaded = function() {
-  if (mermaid.startOnLoad) {
-    const { startOnLoad } = mermaidAPI.getConfig();
-    if (startOnLoad) {
-      mermaid.init().catch((err) => log$1.error("Mermaid failed to initialize", err));
-    }
-  }
-};
-if (typeof document !== "undefined") {
-  /*!
-   * Wait for document loaded before starting the execution
-   */
-  window.addEventListener("load", contentLoaded, false);
-}
-const setParseErrorHandler = function(newParseErrorHandler) {
-  mermaid.parseError = newParseErrorHandler;
-};
-const mermaid_ae477ddf_parse = (txt) => {
-  return mermaidAPI.parse(txt, mermaid.parseError);
-};
-const executionQueue = [];
-let executionQueueRunning = false;
-const executeQueue = async () => {
-  if (executionQueueRunning) {
-    return;
-  }
-  executionQueueRunning = true;
-  while (executionQueue.length > 0) {
-    const f = executionQueue.shift();
-    if (f) {
-      try {
-        await f();
-      } catch (e) {
-        log$1.error("Error executing queue", e);
-      }
-    }
-  }
-  executionQueueRunning = false;
-};
-const parseAsync = (txt) => {
-  return new Promise((resolve, reject) => {
-    const performCall = () => new Promise((res, rej) => {
-      mermaidAPI.parseAsync(txt, mermaid.parseError).then(
-        (r) => {
-          res(r);
-          resolve(r);
-        },
-        (e) => {
-          log$1.error("Error parsing", e);
-          rej(e);
-          reject(e);
-        }
-      );
-    });
-    executionQueue.push(performCall);
-    executeQueue().catch(reject);
-  });
-};
-const renderAsync = (id2, text, cb, container) => {
-  return new Promise((resolve, reject) => {
-    const performCall = () => new Promise((res, rej) => {
-      mermaidAPI.renderAsync(id2, text, cb, container).then(
-        (r) => {
-          res(r);
-          resolve(r);
-        },
-        (e) => {
-          log$1.error("Error parsing", e);
-          rej(e);
-          reject(e);
-        }
-      );
-    });
-    executionQueue.push(performCall);
-    executeQueue().catch(reject);
-  });
-};
-const mermaid = {
-  startOnLoad: true,
-  diagrams: {},
-  mermaidAPI,
-  parse: mermaid_ae477ddf_parse,
-  parseAsync,
-  render: mermaidAPI.render,
-  renderAsync,
-  init,
-  initThrowsErrors,
-  initThrowsErrorsAsync,
-  registerExternalDiagrams,
-  initialize,
-  parseError: void 0,
-  contentLoaded,
-  setParseErrorHandler
-};
-
-//# sourceMappingURL=mermaid-ae477ddf.js.map
-
-
-/***/ }),
-
-/***/ 77995:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 15907:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 70054:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 89342:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 58857:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 16427:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 44423:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 80333:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 96477:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 21918:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 46383:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 43012:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 74917:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 14249:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 31443:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 56954:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 13376:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 81659:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 44308:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 38131:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 23081:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 54562:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 70892:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 21519:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 66004:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 2388:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 92850:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 10539:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 26606:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 65689:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 4751:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 46667:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 66093:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 62185:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 84475:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 56200:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 70737:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 53206:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 44823:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 27377:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 7382:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 32949:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 93527:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 35949:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 91344:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 38275:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 6615:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 54979:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-// extracted by mini-css-extract-plugin
-
-
-/***/ }),
-
-/***/ 40431:
-/***/ (function(__unused_webpack_module, exports) {
-
-(function (global, factory) {
-   true ? factory(exports) :
-  0;
-}(this, (function (exports) { 'use strict';
-
-/**
- * @author Takahiro / https://github.com/takahirox
- *
- * Simple CharsetEncoder.
- */
-
-function CharsetEncoder() {
-}
-
-/*
- * Converts from Shift_JIS Uint8Array data to Unicode strings.
- */
-CharsetEncoder.prototype.s2u = function(uint8Array) {
-  var t = this.s2uTable;
-  var str = '';
-  var p = 0;
-
-  while(p < uint8Array.length) {
-    var key = uint8Array[p++];
-
-    if(! ((key >= 0x00 && key <= 0x7e) ||
-          (key >= 0xa1 && key <= 0xdf)) &&
-       p < uint8Array.length) {
-      key = (key << 8) | uint8Array[p++];
-    }
-
-    if(t[key] === undefined) {
-      console.error('unknown char code ' + key + '.');
-      return str;
-    }
-
-    str += String.fromCharCode(t[key]);
-  }
-
-  return str;
-};
-
-CharsetEncoder.prototype.s2uTable = {
-0:0,
-1:1,
-2:2,
-3:3,
-4:4,
-5:5,
-6:6,
-7:7,
-8:8,
-9:9,
-10:10,
-11:11,
-12:12,
-13:13,
-14:14,
-15:15,
-16:16,
-17:17,
-18:18,
-19:19,
-20:20,
-21:21,
-22:22,
-23:23,
-24:24,
-25:25,
-26:26,
-27:27,
-28:28,
-29:29,
-30:30,
-31:31,
-32:32,
-33:33,
-34:34,
-35:35,
-36:36,
-37:37,
-38:38,
-39:39,
-40:40,
-41:41,
-42:42,
-43:43,
-44:44,
-45:45,
-46:46,
-47:47,
-48:48,
-49:49,
-50:50,
-51:51,
-52:52,
-53:53,
-54:54,
-55:55,
-56:56,
-57:57,
-58:58,
-59:59,
-60:60,
-61:61,
-62:62,
-63:63,
-64:64,
-65:65,
-66:66,
-67:67,
-68:68,
-69:69,
-70:70,
-71:71,
-72:72,
-73:73,
-74:74,
-75:75,
-76:76,
-77:77,
-78:78,
-79:79,
-80:80,
-81:81,
-82:82,
-83:83,
-84:84,
-85:85,
-86:86,
-87:87,
-88:88,
-89:89,
-90:90,
-91:91,
-92:92,
-93:93,
-94:94,
-95:95,
-96:96,
-97:97,
-98:98,
-99:99,
-100:100,
-101:101,
-102:102,
-103:103,
-104:104,
-105:105,
-106:106,
-107:107,
-108:108,
-109:109,
-110:110,
-111:111,
-112:112,
-113:113,
-114:114,
-115:115,
-116:116,
-117:117,
-118:118,
-119:119,
-120:120,
-121:121,
-122:122,
-123:123,
-124:124,
-125:125,
-126:126,
-161:65377,
-162:65378,
-163:65379,
-164:65380,
-165:65381,
-166:65382,
-167:65383,
-168:65384,
-169:65385,
-170:65386,
-171:65387,
-172:65388,
-173:65389,
-174:65390,
-175:65391,
-176:65392,
-177:65393,
-178:65394,
-179:65395,
-180:65396,
-181:65397,
-182:65398,
-183:65399,
-184:65400,
-185:65401,
-186:65402,
-187:65403,
-188:65404,
-189:65405,
-190:65406,
-191:65407,
-192:65408,
-193:65409,
-194:65410,
-195:65411,
-196:65412,
-197:65413,
-198:65414,
-199:65415,
-200:65416,
-201:65417,
-202:65418,
-203:65419,
-204:65420,
-205:65421,
-206:65422,
-207:65423,
-208:65424,
-209:65425,
-210:65426,
-211:65427,
-212:65428,
-213:65429,
-214:65430,
-215:65431,
-216:65432,
-217:65433,
-218:65434,
-219:65435,
-220:65436,
-221:65437,
-222:65438,
-223:65439,
-33088:12288,
-33089:12289,
-33090:12290,
-33091:65292,
-33092:65294,
-33093:12539,
-33094:65306,
-33095:65307,
-33096:65311,
-33097:65281,
-33098:12443,
-33099:12444,
-33100:180,
-33101:65344,
-33102:168,
-33103:65342,
-33104:65507,
-33105:65343,
-33106:12541,
-33107:12542,
-33108:12445,
-33109:12446,
-33110:12291,
-33111:20189,
-33112:12293,
-33113:12294,
-33114:12295,
-33115:12540,
-33116:8213,
-33117:8208,
-33118:65295,
-33119:65340,
-33120:65374,
-33121:8741,
-33122:65372,
-33123:8230,
-33124:8229,
-33125:8216,
-33126:8217,
-33127:8220,
-33128:8221,
-33129:65288,
-33130:65289,
-33131:12308,
-33132:12309,
-33133:65339,
-33134:65341,
-33135:65371,
-33136:65373,
-33137:12296,
-33138:12297,
-33139:12298,
-33140:12299,
-33141:12300,
-33142:12301,
-33143:12302,
-33144:12303,
-33145:12304,
-33146:12305,
-33147:65291,
-33148:65293,
-33149:177,
-33150:215,
-33152:247,
-33153:65309,
-33154:8800,
-33155:65308,
-33156:65310,
-33157:8806,
-33158:8807,
-33159:8734,
-33160:8756,
-33161:9794,
-33162:9792,
-33163:176,
-33164:8242,
-33165:8243,
-33166:8451,
-33167:65509,
-33168:65284,
-33169:65504,
-33170:65505,
-33171:65285,
-33172:65283,
-33173:65286,
-33174:65290,
-33175:65312,
-33176:167,
-33177:9734,
-33178:9733,
-33179:9675,
-33180:9679,
-33181:9678,
-33182:9671,
-33183:9670,
-33184:9633,
-33185:9632,
-33186:9651,
-33187:9650,
-33188:9661,
-33189:9660,
-33190:8251,
-33191:12306,
-33192:8594,
-33193:8592,
-33194:8593,
-33195:8595,
-33196:12307,
-33208:8712,
-33209:8715,
-33210:8838,
-33211:8839,
-33212:8834,
-33213:8835,
-33214:8746,
-33215:8745,
-33224:8743,
-33225:8744,
-33226:65506,
-33227:8658,
-33228:8660,
-33229:8704,
-33230:8707,
-33242:8736,
-33243:8869,
-33244:8978,
-33245:8706,
-33246:8711,
-33247:8801,
-33248:8786,
-33249:8810,
-33250:8811,
-33251:8730,
-33252:8765,
-33253:8733,
-33254:8757,
-33255:8747,
-33256:8748,
-33264:8491,
-33265:8240,
-33266:9839,
-33267:9837,
-33268:9834,
-33269:8224,
-33270:8225,
-33271:182,
-33276:9711,
-33359:65296,
-33360:65297,
-33361:65298,
-33362:65299,
-33363:65300,
-33364:65301,
-33365:65302,
-33366:65303,
-33367:65304,
-33368:65305,
-33376:65313,
-33377:65314,
-33378:65315,
-33379:65316,
-33380:65317,
-33381:65318,
-33382:65319,
-33383:65320,
-33384:65321,
-33385:65322,
-33386:65323,
-33387:65324,
-33388:65325,
-33389:65326,
-33390:65327,
-33391:65328,
-33392:65329,
-33393:65330,
-33394:65331,
-33395:65332,
-33396:65333,
-33397:65334,
-33398:65335,
-33399:65336,
-33400:65337,
-33401:65338,
-33409:65345,
-33410:65346,
-33411:65347,
-33412:65348,
-33413:65349,
-33414:65350,
-33415:65351,
-33416:65352,
-33417:65353,
-33418:65354,
-33419:65355,
-33420:65356,
-33421:65357,
-33422:65358,
-33423:65359,
-33424:65360,
-33425:65361,
-33426:65362,
-33427:65363,
-33428:65364,
-33429:65365,
-33430:65366,
-33431:65367,
-33432:65368,
-33433:65369,
-33434:65370,
-33439:12353,
-33440:12354,
-33441:12355,
-33442:12356,
-33443:12357,
-33444:12358,
-33445:12359,
-33446:12360,
-33447:12361,
-33448:12362,
-33449:12363,
-33450:12364,
-33451:12365,
-33452:12366,
-33453:12367,
-33454:12368,
-33455:12369,
-33456:12370,
-33457:12371,
-33458:12372,
-33459:12373,
-33460:12374,
-33461:12375,
-33462:12376,
-33463:12377,
-33464:12378,
-33465:12379,
-33466:12380,
-33467:12381,
-33468:12382,
-33469:12383,
-33470:12384,
-33471:12385,
-33472:12386,
-33473:12387,
-33474:12388,
-33475:12389,
-33476:12390,
-33477:12391,
-33478:12392,
-33479:12393,
-33480:12394,
-33481:12395,
-33482:12396,
-33483:12397,
-33484:12398,
-33485:12399,
-33486:12400,
-33487:12401,
-33488:12402,
-33489:12403,
-33490:12404,
-33491:12405,
-33492:12406,
-33493:12407,
-33494:12408,
-33495:12409,
-33496:12410,
-33497:12411,
-33498:12412,
-33499:12413,
-33500:12414,
-33501:12415,
-33502:12416,
-33503:12417,
-33504:12418,
-33505:12419,
-33506:12420,
-33507:12421,
-33508:12422,
-33509:12423,
-33510:12424,
-33511:12425,
-33512:12426,
-33513:12427,
-33514:12428,
-33515:12429,
-33516:12430,
-33517:12431,
-33518:12432,
-33519:12433,
-33520:12434,
-33521:12435,
-33600:12449,
-33601:12450,
-33602:12451,
-33603:12452,
-33604:12453,
-33605:12454,
-33606:12455,
-33607:12456,
-33608:12457,
-33609:12458,
-33610:12459,
-33611:12460,
-33612:12461,
-33613:12462,
-33614:12463,
-33615:12464,
-33616:12465,
-33617:12466,
-33618:12467,
-33619:12468,
-33620:12469,
-33621:12470,
-33622:12471,
-33623:12472,
-33624:12473,
-33625:12474,
-33626:12475,
-33627:12476,
-33628:12477,
-33629:12478,
-33630:12479,
-33631:12480,
-33632:12481,
-33633:12482,
-33634:12483,
-33635:12484,
-33636:12485,
-33637:12486,
-33638:12487,
-33639:12488,
-33640:12489,
-33641:12490,
-33642:12491,
-33643:12492,
-33644:12493,
-33645:12494,
-33646:12495,
-33647:12496,
-33648:12497,
-33649:12498,
-33650:12499,
-33651:12500,
-33652:12501,
-33653:12502,
-33654:12503,
-33655:12504,
-33656:12505,
-33657:12506,
-33658:12507,
-33659:12508,
-33660:12509,
-33661:12510,
-33662:12511,
-33664:12512,
-33665:12513,
-33666:12514,
-33667:12515,
-33668:12516,
-33669:12517,
-33670:12518,
-33671:12519,
-33672:12520,
-33673:12521,
-33674:12522,
-33675:12523,
-33676:12524,
-33677:12525,
-33678:12526,
-33679:12527,
-33680:12528,
-33681:12529,
-33682:12530,
-33683:12531,
-33684:12532,
-33685:12533,
-33686:12534,
-33695:913,
-33696:914,
-33697:915,
-33698:916,
-33699:917,
-33700:918,
-33701:919,
-33702:920,
-33703:921,
-33704:922,
-33705:923,
-33706:924,
-33707:925,
-33708:926,
-33709:927,
-33710:928,
-33711:929,
-33712:931,
-33713:932,
-33714:933,
-33715:934,
-33716:935,
-33717:936,
-33718:937,
-33727:945,
-33728:946,
-33729:947,
-33730:948,
-33731:949,
-33732:950,
-33733:951,
-33734:952,
-33735:953,
-33736:954,
-33737:955,
-33738:956,
-33739:957,
-33740:958,
-33741:959,
-33742:960,
-33743:961,
-33744:963,
-33745:964,
-33746:965,
-33747:966,
-33748:967,
-33749:968,
-33750:969,
-33856:1040,
-33857:1041,
-33858:1042,
-33859:1043,
-33860:1044,
-33861:1045,
-33862:1025,
-33863:1046,
-33864:1047,
-33865:1048,
-33866:1049,
-33867:1050,
-33868:1051,
-33869:1052,
-33870:1053,
-33871:1054,
-33872:1055,
-33873:1056,
-33874:1057,
-33875:1058,
-33876:1059,
-33877:1060,
-33878:1061,
-33879:1062,
-33880:1063,
-33881:1064,
-33882:1065,
-33883:1066,
-33884:1067,
-33885:1068,
-33886:1069,
-33887:1070,
-33888:1071,
-33904:1072,
-33905:1073,
-33906:1074,
-33907:1075,
-33908:1076,
-33909:1077,
-33910:1105,
-33911:1078,
-33912:1079,
-33913:1080,
-33914:1081,
-33915:1082,
-33916:1083,
-33917:1084,
-33918:1085,
-33920:1086,
-33921:1087,
-33922:1088,
-33923:1089,
-33924:1090,
-33925:1091,
-33926:1092,
-33927:1093,
-33928:1094,
-33929:1095,
-33930:1096,
-33931:1097,
-33932:1098,
-33933:1099,
-33934:1100,
-33935:1101,
-33936:1102,
-33937:1103,
-33951:9472,
-33952:9474,
-33953:9484,
-33954:9488,
-33955:9496,
-33956:9492,
-33957:9500,
-33958:9516,
-33959:9508,
-33960:9524,
-33961:9532,
-33962:9473,
-33963:9475,
-33964:9487,
-33965:9491,
-33966:9499,
-33967:9495,
-33968:9507,
-33969:9523,
-33970:9515,
-33971:9531,
-33972:9547,
-33973:9504,
-33974:9519,
-33975:9512,
-33976:9527,
-33977:9535,
-33978:9501,
-33979:9520,
-33980:9509,
-33981:9528,
-33982:9538,
-34624:9312,
-34625:9313,
-34626:9314,
-34627:9315,
-34628:9316,
-34629:9317,
-34630:9318,
-34631:9319,
-34632:9320,
-34633:9321,
-34634:9322,
-34635:9323,
-34636:9324,
-34637:9325,
-34638:9326,
-34639:9327,
-34640:9328,
-34641:9329,
-34642:9330,
-34643:9331,
-34644:8544,
-34645:8545,
-34646:8546,
-34647:8547,
-34648:8548,
-34649:8549,
-34650:8550,
-34651:8551,
-34652:8552,
-34653:8553,
-34655:13129,
-34656:13076,
-34657:13090,
-34658:13133,
-34659:13080,
-34660:13095,
-34661:13059,
-34662:13110,
-34663:13137,
-34664:13143,
-34665:13069,
-34666:13094,
-34667:13091,
-34668:13099,
-34669:13130,
-34670:13115,
-34671:13212,
-34672:13213,
-34673:13214,
-34674:13198,
-34675:13199,
-34676:13252,
-34677:13217,
-34686:13179,
-34688:12317,
-34689:12319,
-34690:8470,
-34691:13261,
-34692:8481,
-34693:12964,
-34694:12965,
-34695:12966,
-34696:12967,
-34697:12968,
-34698:12849,
-34699:12850,
-34700:12857,
-34701:13182,
-34702:13181,
-34703:13180,
-34704:8786,
-34705:8801,
-34706:8747,
-34707:8750,
-34708:8721,
-34709:8730,
-34710:8869,
-34711:8736,
-34712:8735,
-34713:8895,
-34714:8757,
-34715:8745,
-34716:8746,
-34975:20124,
-34976:21782,
-34977:23043,
-34978:38463,
-34979:21696,
-34980:24859,
-34981:25384,
-34982:23030,
-34983:36898,
-34984:33909,
-34985:33564,
-34986:31312,
-34987:24746,
-34988:25569,
-34989:28197,
-34990:26093,
-34991:33894,
-34992:33446,
-34993:39925,
-34994:26771,
-34995:22311,
-34996:26017,
-34997:25201,
-34998:23451,
-34999:22992,
-35000:34427,
-35001:39156,
-35002:32098,
-35003:32190,
-35004:39822,
-35005:25110,
-35006:31903,
-35007:34999,
-35008:23433,
-35009:24245,
-35010:25353,
-35011:26263,
-35012:26696,
-35013:38343,
-35014:38797,
-35015:26447,
-35016:20197,
-35017:20234,
-35018:20301,
-35019:20381,
-35020:20553,
-35021:22258,
-35022:22839,
-35023:22996,
-35024:23041,
-35025:23561,
-35026:24799,
-35027:24847,
-35028:24944,
-35029:26131,
-35030:26885,
-35031:28858,
-35032:30031,
-35033:30064,
-35034:31227,
-35035:32173,
-35036:32239,
-35037:32963,
-35038:33806,
-35039:34915,
-35040:35586,
-35041:36949,
-35042:36986,
-35043:21307,
-35044:20117,
-35045:20133,
-35046:22495,
-35047:32946,
-35048:37057,
-35049:30959,
-35050:19968,
-35051:22769,
-35052:28322,
-35053:36920,
-35054:31282,
-35055:33576,
-35056:33419,
-35057:39983,
-35058:20801,
-35059:21360,
-35060:21693,
-35061:21729,
-35062:22240,
-35063:23035,
-35064:24341,
-35065:39154,
-35066:28139,
-35067:32996,
-35068:34093,
-35136:38498,
-35137:38512,
-35138:38560,
-35139:38907,
-35140:21515,
-35141:21491,
-35142:23431,
-35143:28879,
-35144:32701,
-35145:36802,
-35146:38632,
-35147:21359,
-35148:40284,
-35149:31418,
-35150:19985,
-35151:30867,
-35152:33276,
-35153:28198,
-35154:22040,
-35155:21764,
-35156:27421,
-35157:34074,
-35158:39995,
-35159:23013,
-35160:21417,
-35161:28006,
-35162:29916,
-35163:38287,
-35164:22082,
-35165:20113,
-35166:36939,
-35167:38642,
-35168:33615,
-35169:39180,
-35170:21473,
-35171:21942,
-35172:23344,
-35173:24433,
-35174:26144,
-35175:26355,
-35176:26628,
-35177:27704,
-35178:27891,
-35179:27945,
-35180:29787,
-35181:30408,
-35182:31310,
-35183:38964,
-35184:33521,
-35185:34907,
-35186:35424,
-35187:37613,
-35188:28082,
-35189:30123,
-35190:30410,
-35191:39365,
-35192:24742,
-35193:35585,
-35194:36234,
-35195:38322,
-35196:27022,
-35197:21421,
-35198:20870,
-35200:22290,
-35201:22576,
-35202:22852,
-35203:23476,
-35204:24310,
-35205:24616,
-35206:25513,
-35207:25588,
-35208:27839,
-35209:28436,
-35210:28814,
-35211:28948,
-35212:29017,
-35213:29141,
-35214:29503,
-35215:32257,
-35216:33398,
-35217:33489,
-35218:34199,
-35219:36960,
-35220:37467,
-35221:40219,
-35222:22633,
-35223:26044,
-35224:27738,
-35225:29989,
-35226:20985,
-35227:22830,
-35228:22885,
-35229:24448,
-35230:24540,
-35231:25276,
-35232:26106,
-35233:27178,
-35234:27431,
-35235:27572,
-35236:29579,
-35237:32705,
-35238:35158,
-35239:40236,
-35240:40206,
-35241:40644,
-35242:23713,
-35243:27798,
-35244:33659,
-35245:20740,
-35246:23627,
-35247:25014,
-35248:33222,
-35249:26742,
-35250:29281,
-35251:20057,
-35252:20474,
-35253:21368,
-35254:24681,
-35255:28201,
-35256:31311,
-35257:38899,
-35258:19979,
-35259:21270,
-35260:20206,
-35261:20309,
-35262:20285,
-35263:20385,
-35264:20339,
-35265:21152,
-35266:21487,
-35267:22025,
-35268:22799,
-35269:23233,
-35270:23478,
-35271:23521,
-35272:31185,
-35273:26247,
-35274:26524,
-35275:26550,
-35276:27468,
-35277:27827,
-35278:28779,
-35279:29634,
-35280:31117,
-35281:31166,
-35282:31292,
-35283:31623,
-35284:33457,
-35285:33499,
-35286:33540,
-35287:33655,
-35288:33775,
-35289:33747,
-35290:34662,
-35291:35506,
-35292:22057,
-35293:36008,
-35294:36838,
-35295:36942,
-35296:38686,
-35297:34442,
-35298:20420,
-35299:23784,
-35300:25105,
-35301:29273,
-35302:30011,
-35303:33253,
-35304:33469,
-35305:34558,
-35306:36032,
-35307:38597,
-35308:39187,
-35309:39381,
-35310:20171,
-35311:20250,
-35312:35299,
-35313:22238,
-35314:22602,
-35315:22730,
-35316:24315,
-35317:24555,
-35318:24618,
-35319:24724,
-35320:24674,
-35321:25040,
-35322:25106,
-35323:25296,
-35324:25913,
-35392:39745,
-35393:26214,
-35394:26800,
-35395:28023,
-35396:28784,
-35397:30028,
-35398:30342,
-35399:32117,
-35400:33445,
-35401:34809,
-35402:38283,
-35403:38542,
-35404:35997,
-35405:20977,
-35406:21182,
-35407:22806,
-35408:21683,
-35409:23475,
-35410:23830,
-35411:24936,
-35412:27010,
-35413:28079,
-35414:30861,
-35415:33995,
-35416:34903,
-35417:35442,
-35418:37799,
-35419:39608,
-35420:28012,
-35421:39336,
-35422:34521,
-35423:22435,
-35424:26623,
-35425:34510,
-35426:37390,
-35427:21123,
-35428:22151,
-35429:21508,
-35430:24275,
-35431:25313,
-35432:25785,
-35433:26684,
-35434:26680,
-35435:27579,
-35436:29554,
-35437:30906,
-35438:31339,
-35439:35226,
-35440:35282,
-35441:36203,
-35442:36611,
-35443:37101,
-35444:38307,
-35445:38548,
-35446:38761,
-35447:23398,
-35448:23731,
-35449:27005,
-35450:38989,
-35451:38990,
-35452:25499,
-35453:31520,
-35454:27179,
-35456:27263,
-35457:26806,
-35458:39949,
-35459:28511,
-35460:21106,
-35461:21917,
-35462:24688,
-35463:25324,
-35464:27963,
-35465:28167,
-35466:28369,
-35467:33883,
-35468:35088,
-35469:36676,
-35470:19988,
-35471:39993,
-35472:21494,
-35473:26907,
-35474:27194,
-35475:38788,
-35476:26666,
-35477:20828,
-35478:31427,
-35479:33970,
-35480:37340,
-35481:37772,
-35482:22107,
-35483:40232,
-35484:26658,
-35485:33541,
-35486:33841,
-35487:31909,
-35488:21000,
-35489:33477,
-35490:29926,
-35491:20094,
-35492:20355,
-35493:20896,
-35494:23506,
-35495:21002,
-35496:21208,
-35497:21223,
-35498:24059,
-35499:21914,
-35500:22570,
-35501:23014,
-35502:23436,
-35503:23448,
-35504:23515,
-35505:24178,
-35506:24185,
-35507:24739,
-35508:24863,
-35509:24931,
-35510:25022,
-35511:25563,
-35512:25954,
-35513:26577,
-35514:26707,
-35515:26874,
-35516:27454,
-35517:27475,
-35518:27735,
-35519:28450,
-35520:28567,
-35521:28485,
-35522:29872,
-35523:29976,
-35524:30435,
-35525:30475,
-35526:31487,
-35527:31649,
-35528:31777,
-35529:32233,
-35530:32566,
-35531:32752,
-35532:32925,
-35533:33382,
-35534:33694,
-35535:35251,
-35536:35532,
-35537:36011,
-35538:36996,
-35539:37969,
-35540:38291,
-35541:38289,
-35542:38306,
-35543:38501,
-35544:38867,
-35545:39208,
-35546:33304,
-35547:20024,
-35548:21547,
-35549:23736,
-35550:24012,
-35551:29609,
-35552:30284,
-35553:30524,
-35554:23721,
-35555:32747,
-35556:36107,
-35557:38593,
-35558:38929,
-35559:38996,
-35560:39000,
-35561:20225,
-35562:20238,
-35563:21361,
-35564:21916,
-35565:22120,
-35566:22522,
-35567:22855,
-35568:23305,
-35569:23492,
-35570:23696,
-35571:24076,
-35572:24190,
-35573:24524,
-35574:25582,
-35575:26426,
-35576:26071,
-35577:26082,
-35578:26399,
-35579:26827,
-35580:26820,
-35648:27231,
-35649:24112,
-35650:27589,
-35651:27671,
-35652:27773,
-35653:30079,
-35654:31048,
-35655:23395,
-35656:31232,
-35657:32000,
-35658:24509,
-35659:35215,
-35660:35352,
-35661:36020,
-35662:36215,
-35663:36556,
-35664:36637,
-35665:39138,
-35666:39438,
-35667:39740,
-35668:20096,
-35669:20605,
-35670:20736,
-35671:22931,
-35672:23452,
-35673:25135,
-35674:25216,
-35675:25836,
-35676:27450,
-35677:29344,
-35678:30097,
-35679:31047,
-35680:32681,
-35681:34811,
-35682:35516,
-35683:35696,
-35684:25516,
-35685:33738,
-35686:38816,
-35687:21513,
-35688:21507,
-35689:21931,
-35690:26708,
-35691:27224,
-35692:35440,
-35693:30759,
-35694:26485,
-35695:40653,
-35696:21364,
-35697:23458,
-35698:33050,
-35699:34384,
-35700:36870,
-35701:19992,
-35702:20037,
-35703:20167,
-35704:20241,
-35705:21450,
-35706:21560,
-35707:23470,
-35708:24339,
-35709:24613,
-35710:25937,
-35712:26429,
-35713:27714,
-35714:27762,
-35715:27875,
-35716:28792,
-35717:29699,
-35718:31350,
-35719:31406,
-35720:31496,
-35721:32026,
-35722:31998,
-35723:32102,
-35724:26087,
-35725:29275,
-35726:21435,
-35727:23621,
-35728:24040,
-35729:25298,
-35730:25312,
-35731:25369,
-35732:28192,
-35733:34394,
-35734:35377,
-35735:36317,
-35736:37624,
-35737:28417,
-35738:31142,
-35739:39770,
-35740:20136,
-35741:20139,
-35742:20140,
-35743:20379,
-35744:20384,
-35745:20689,
-35746:20807,
-35747:31478,
-35748:20849,
-35749:20982,
-35750:21332,
-35751:21281,
-35752:21375,
-35753:21483,
-35754:21932,
-35755:22659,
-35756:23777,
-35757:24375,
-35758:24394,
-35759:24623,
-35760:24656,
-35761:24685,
-35762:25375,
-35763:25945,
-35764:27211,
-35765:27841,
-35766:29378,
-35767:29421,
-35768:30703,
-35769:33016,
-35770:33029,
-35771:33288,
-35772:34126,
-35773:37111,
-35774:37857,
-35775:38911,
-35776:39255,
-35777:39514,
-35778:20208,
-35779:20957,
-35780:23597,
-35781:26241,
-35782:26989,
-35783:23616,
-35784:26354,
-35785:26997,
-35786:29577,
-35787:26704,
-35788:31873,
-35789:20677,
-35790:21220,
-35791:22343,
-35792:24062,
-35793:37670,
-35794:26020,
-35795:27427,
-35796:27453,
-35797:29748,
-35798:31105,
-35799:31165,
-35800:31563,
-35801:32202,
-35802:33465,
-35803:33740,
-35804:34943,
-35805:35167,
-35806:35641,
-35807:36817,
-35808:37329,
-35809:21535,
-35810:37504,
-35811:20061,
-35812:20534,
-35813:21477,
-35814:21306,
-35815:29399,
-35816:29590,
-35817:30697,
-35818:33510,
-35819:36527,
-35820:39366,
-35821:39368,
-35822:39378,
-35823:20855,
-35824:24858,
-35825:34398,
-35826:21936,
-35827:31354,
-35828:20598,
-35829:23507,
-35830:36935,
-35831:38533,
-35832:20018,
-35833:27355,
-35834:37351,
-35835:23633,
-35836:23624,
-35904:25496,
-35905:31391,
-35906:27795,
-35907:38772,
-35908:36705,
-35909:31402,
-35910:29066,
-35911:38536,
-35912:31874,
-35913:26647,
-35914:32368,
-35915:26705,
-35916:37740,
-35917:21234,
-35918:21531,
-35919:34219,
-35920:35347,
-35921:32676,
-35922:36557,
-35923:37089,
-35924:21350,
-35925:34952,
-35926:31041,
-35927:20418,
-35928:20670,
-35929:21009,
-35930:20804,
-35931:21843,
-35932:22317,
-35933:29674,
-35934:22411,
-35935:22865,
-35936:24418,
-35937:24452,
-35938:24693,
-35939:24950,
-35940:24935,
-35941:25001,
-35942:25522,
-35943:25658,
-35944:25964,
-35945:26223,
-35946:26690,
-35947:28179,
-35948:30054,
-35949:31293,
-35950:31995,
-35951:32076,
-35952:32153,
-35953:32331,
-35954:32619,
-35955:33550,
-35956:33610,
-35957:34509,
-35958:35336,
-35959:35427,
-35960:35686,
-35961:36605,
-35962:38938,
-35963:40335,
-35964:33464,
-35965:36814,
-35966:39912,
-35968:21127,
-35969:25119,
-35970:25731,
-35971:28608,
-35972:38553,
-35973:26689,
-35974:20625,
-35975:27424,
-35976:27770,
-35977:28500,
-35978:31348,
-35979:32080,
-35980:34880,
-35981:35363,
-35982:26376,
-35983:20214,
-35984:20537,
-35985:20518,
-35986:20581,
-35987:20860,
-35988:21048,
-35989:21091,
-35990:21927,
-35991:22287,
-35992:22533,
-35993:23244,
-35994:24314,
-35995:25010,
-35996:25080,
-35997:25331,
-35998:25458,
-35999:26908,
-36000:27177,
-36001:29309,
-36002:29356,
-36003:29486,
-36004:30740,
-36005:30831,
-36006:32121,
-36007:30476,
-36008:32937,
-36009:35211,
-36010:35609,
-36011:36066,
-36012:36562,
-36013:36963,
-36014:37749,
-36015:38522,
-36016:38997,
-36017:39443,
-36018:40568,
-36019:20803,
-36020:21407,
-36021:21427,
-36022:24187,
-36023:24358,
-36024:28187,
-36025:28304,
-36026:29572,
-36027:29694,
-36028:32067,
-36029:33335,
-36030:35328,
-36031:35578,
-36032:38480,
-36033:20046,
-36034:20491,
-36035:21476,
-36036:21628,
-36037:22266,
-36038:22993,
-36039:23396,
-36040:24049,
-36041:24235,
-36042:24359,
-36043:25144,
-36044:25925,
-36045:26543,
-36046:28246,
-36047:29392,
-36048:31946,
-36049:34996,
-36050:32929,
-36051:32993,
-36052:33776,
-36053:34382,
-36054:35463,
-36055:36328,
-36056:37431,
-36057:38599,
-36058:39015,
-36059:40723,
-36060:20116,
-36061:20114,
-36062:20237,
-36063:21320,
-36064:21577,
-36065:21566,
-36066:23087,
-36067:24460,
-36068:24481,
-36069:24735,
-36070:26791,
-36071:27278,
-36072:29786,
-36073:30849,
-36074:35486,
-36075:35492,
-36076:35703,
-36077:37264,
-36078:20062,
-36079:39881,
-36080:20132,
-36081:20348,
-36082:20399,
-36083:20505,
-36084:20502,
-36085:20809,
-36086:20844,
-36087:21151,
-36088:21177,
-36089:21246,
-36090:21402,
-36091:21475,
-36092:21521,
-36160:21518,
-36161:21897,
-36162:22353,
-36163:22434,
-36164:22909,
-36165:23380,
-36166:23389,
-36167:23439,
-36168:24037,
-36169:24039,
-36170:24055,
-36171:24184,
-36172:24195,
-36173:24218,
-36174:24247,
-36175:24344,
-36176:24658,
-36177:24908,
-36178:25239,
-36179:25304,
-36180:25511,
-36181:25915,
-36182:26114,
-36183:26179,
-36184:26356,
-36185:26477,
-36186:26657,
-36187:26775,
-36188:27083,
-36189:27743,
-36190:27946,
-36191:28009,
-36192:28207,
-36193:28317,
-36194:30002,
-36195:30343,
-36196:30828,
-36197:31295,
-36198:31968,
-36199:32005,
-36200:32024,
-36201:32094,
-36202:32177,
-36203:32789,
-36204:32771,
-36205:32943,
-36206:32945,
-36207:33108,
-36208:33167,
-36209:33322,
-36210:33618,
-36211:34892,
-36212:34913,
-36213:35611,
-36214:36002,
-36215:36092,
-36216:37066,
-36217:37237,
-36218:37489,
-36219:30783,
-36220:37628,
-36221:38308,
-36222:38477,
-36224:38917,
-36225:39321,
-36226:39640,
-36227:40251,
-36228:21083,
-36229:21163,
-36230:21495,
-36231:21512,
-36232:22741,
-36233:25335,
-36234:28640,
-36235:35946,
-36236:36703,
-36237:40633,
-36238:20811,
-36239:21051,
-36240:21578,
-36241:22269,
-36242:31296,
-36243:37239,
-36244:40288,
-36245:40658,
-36246:29508,
-36247:28425,
-36248:33136,
-36249:29969,
-36250:24573,
-36251:24794,
-36252:39592,
-36253:29403,
-36254:36796,
-36255:27492,
-36256:38915,
-36257:20170,
-36258:22256,
-36259:22372,
-36260:22718,
-36261:23130,
-36262:24680,
-36263:25031,
-36264:26127,
-36265:26118,
-36266:26681,
-36267:26801,
-36268:28151,
-36269:30165,
-36270:32058,
-36271:33390,
-36272:39746,
-36273:20123,
-36274:20304,
-36275:21449,
-36276:21766,
-36277:23919,
-36278:24038,
-36279:24046,
-36280:26619,
-36281:27801,
-36282:29811,
-36283:30722,
-36284:35408,
-36285:37782,
-36286:35039,
-36287:22352,
-36288:24231,
-36289:25387,
-36290:20661,
-36291:20652,
-36292:20877,
-36293:26368,
-36294:21705,
-36295:22622,
-36296:22971,
-36297:23472,
-36298:24425,
-36299:25165,
-36300:25505,
-36301:26685,
-36302:27507,
-36303:28168,
-36304:28797,
-36305:37319,
-36306:29312,
-36307:30741,
-36308:30758,
-36309:31085,
-36310:25998,
-36311:32048,
-36312:33756,
-36313:35009,
-36314:36617,
-36315:38555,
-36316:21092,
-36317:22312,
-36318:26448,
-36319:32618,
-36320:36001,
-36321:20916,
-36322:22338,
-36323:38442,
-36324:22586,
-36325:27018,
-36326:32948,
-36327:21682,
-36328:23822,
-36329:22524,
-36330:30869,
-36331:40442,
-36332:20316,
-36333:21066,
-36334:21643,
-36335:25662,
-36336:26152,
-36337:26388,
-36338:26613,
-36339:31364,
-36340:31574,
-36341:32034,
-36342:37679,
-36343:26716,
-36344:39853,
-36345:31545,
-36346:21273,
-36347:20874,
-36348:21047,
-36416:23519,
-36417:25334,
-36418:25774,
-36419:25830,
-36420:26413,
-36421:27578,
-36422:34217,
-36423:38609,
-36424:30352,
-36425:39894,
-36426:25420,
-36427:37638,
-36428:39851,
-36429:30399,
-36430:26194,
-36431:19977,
-36432:20632,
-36433:21442,
-36434:23665,
-36435:24808,
-36436:25746,
-36437:25955,
-36438:26719,
-36439:29158,
-36440:29642,
-36441:29987,
-36442:31639,
-36443:32386,
-36444:34453,
-36445:35715,
-36446:36059,
-36447:37240,
-36448:39184,
-36449:26028,
-36450:26283,
-36451:27531,
-36452:20181,
-36453:20180,
-36454:20282,
-36455:20351,
-36456:21050,
-36457:21496,
-36458:21490,
-36459:21987,
-36460:22235,
-36461:22763,
-36462:22987,
-36463:22985,
-36464:23039,
-36465:23376,
-36466:23629,
-36467:24066,
-36468:24107,
-36469:24535,
-36470:24605,
-36471:25351,
-36472:25903,
-36473:23388,
-36474:26031,
-36475:26045,
-36476:26088,
-36477:26525,
-36478:27490,
-36480:27515,
-36481:27663,
-36482:29509,
-36483:31049,
-36484:31169,
-36485:31992,
-36486:32025,
-36487:32043,
-36488:32930,
-36489:33026,
-36490:33267,
-36491:35222,
-36492:35422,
-36493:35433,
-36494:35430,
-36495:35468,
-36496:35566,
-36497:36039,
-36498:36060,
-36499:38604,
-36500:39164,
-36501:27503,
-36502:20107,
-36503:20284,
-36504:20365,
-36505:20816,
-36506:23383,
-36507:23546,
-36508:24904,
-36509:25345,
-36510:26178,
-36511:27425,
-36512:28363,
-36513:27835,
-36514:29246,
-36515:29885,
-36516:30164,
-36517:30913,
-36518:31034,
-36519:32780,
-36520:32819,
-36521:33258,
-36522:33940,
-36523:36766,
-36524:27728,
-36525:40575,
-36526:24335,
-36527:35672,
-36528:40235,
-36529:31482,
-36530:36600,
-36531:23437,
-36532:38635,
-36533:19971,
-36534:21489,
-36535:22519,
-36536:22833,
-36537:23241,
-36538:23460,
-36539:24713,
-36540:28287,
-36541:28422,
-36542:30142,
-36543:36074,
-36544:23455,
-36545:34048,
-36546:31712,
-36547:20594,
-36548:26612,
-36549:33437,
-36550:23649,
-36551:34122,
-36552:32286,
-36553:33294,
-36554:20889,
-36555:23556,
-36556:25448,
-36557:36198,
-36558:26012,
-36559:29038,
-36560:31038,
-36561:32023,
-36562:32773,
-36563:35613,
-36564:36554,
-36565:36974,
-36566:34503,
-36567:37034,
-36568:20511,
-36569:21242,
-36570:23610,
-36571:26451,
-36572:28796,
-36573:29237,
-36574:37196,
-36575:37320,
-36576:37675,
-36577:33509,
-36578:23490,
-36579:24369,
-36580:24825,
-36581:20027,
-36582:21462,
-36583:23432,
-36584:25163,
-36585:26417,
-36586:27530,
-36587:29417,
-36588:29664,
-36589:31278,
-36590:33131,
-36591:36259,
-36592:37202,
-36593:39318,
-36594:20754,
-36595:21463,
-36596:21610,
-36597:23551,
-36598:25480,
-36599:27193,
-36600:32172,
-36601:38656,
-36602:22234,
-36603:21454,
-36604:21608,
-36672:23447,
-36673:23601,
-36674:24030,
-36675:20462,
-36676:24833,
-36677:25342,
-36678:27954,
-36679:31168,
-36680:31179,
-36681:32066,
-36682:32333,
-36683:32722,
-36684:33261,
-36685:33311,
-36686:33936,
-36687:34886,
-36688:35186,
-36689:35728,
-36690:36468,
-36691:36655,
-36692:36913,
-36693:37195,
-36694:37228,
-36695:38598,
-36696:37276,
-36697:20160,
-36698:20303,
-36699:20805,
-36700:21313,
-36701:24467,
-36702:25102,
-36703:26580,
-36704:27713,
-36705:28171,
-36706:29539,
-36707:32294,
-36708:37325,
-36709:37507,
-36710:21460,
-36711:22809,
-36712:23487,
-36713:28113,
-36714:31069,
-36715:32302,
-36716:31899,
-36717:22654,
-36718:29087,
-36719:20986,
-36720:34899,
-36721:36848,
-36722:20426,
-36723:23803,
-36724:26149,
-36725:30636,
-36726:31459,
-36727:33308,
-36728:39423,
-36729:20934,
-36730:24490,
-36731:26092,
-36732:26991,
-36733:27529,
-36734:28147,
-36736:28310,
-36737:28516,
-36738:30462,
-36739:32020,
-36740:24033,
-36741:36981,
-36742:37255,
-36743:38918,
-36744:20966,
-36745:21021,
-36746:25152,
-36747:26257,
-36748:26329,
-36749:28186,
-36750:24246,
-36751:32210,
-36752:32626,
-36753:26360,
-36754:34223,
-36755:34295,
-36756:35576,
-36757:21161,
-36758:21465,
-36759:22899,
-36760:24207,
-36761:24464,
-36762:24661,
-36763:37604,
-36764:38500,
-36765:20663,
-36766:20767,
-36767:21213,
-36768:21280,
-36769:21319,
-36770:21484,
-36771:21736,
-36772:21830,
-36773:21809,
-36774:22039,
-36775:22888,
-36776:22974,
-36777:23100,
-36778:23477,
-36779:23558,
-36780:23567,
-36781:23569,
-36782:23578,
-36783:24196,
-36784:24202,
-36785:24288,
-36786:24432,
-36787:25215,
-36788:25220,
-36789:25307,
-36790:25484,
-36791:25463,
-36792:26119,
-36793:26124,
-36794:26157,
-36795:26230,
-36796:26494,
-36797:26786,
-36798:27167,
-36799:27189,
-36800:27836,
-36801:28040,
-36802:28169,
-36803:28248,
-36804:28988,
-36805:28966,
-36806:29031,
-36807:30151,
-36808:30465,
-36809:30813,
-36810:30977,
-36811:31077,
-36812:31216,
-36813:31456,
-36814:31505,
-36815:31911,
-36816:32057,
-36817:32918,
-36818:33750,
-36819:33931,
-36820:34121,
-36821:34909,
-36822:35059,
-36823:35359,
-36824:35388,
-36825:35412,
-36826:35443,
-36827:35937,
-36828:36062,
-36829:37284,
-36830:37478,
-36831:37758,
-36832:37912,
-36833:38556,
-36834:38808,
-36835:19978,
-36836:19976,
-36837:19998,
-36838:20055,
-36839:20887,
-36840:21104,
-36841:22478,
-36842:22580,
-36843:22732,
-36844:23330,
-36845:24120,
-36846:24773,
-36847:25854,
-36848:26465,
-36849:26454,
-36850:27972,
-36851:29366,
-36852:30067,
-36853:31331,
-36854:33976,
-36855:35698,
-36856:37304,
-36857:37664,
-36858:22065,
-36859:22516,
-36860:39166,
-36928:25325,
-36929:26893,
-36930:27542,
-36931:29165,
-36932:32340,
-36933:32887,
-36934:33394,
-36935:35302,
-36936:39135,
-36937:34645,
-36938:36785,
-36939:23611,
-36940:20280,
-36941:20449,
-36942:20405,
-36943:21767,
-36944:23072,
-36945:23517,
-36946:23529,
-36947:24515,
-36948:24910,
-36949:25391,
-36950:26032,
-36951:26187,
-36952:26862,
-36953:27035,
-36954:28024,
-36955:28145,
-36956:30003,
-36957:30137,
-36958:30495,
-36959:31070,
-36960:31206,
-36961:32051,
-36962:33251,
-36963:33455,
-36964:34218,
-36965:35242,
-36966:35386,
-36967:36523,
-36968:36763,
-36969:36914,
-36970:37341,
-36971:38663,
-36972:20154,
-36973:20161,
-36974:20995,
-36975:22645,
-36976:22764,
-36977:23563,
-36978:29978,
-36979:23613,
-36980:33102,
-36981:35338,
-36982:36805,
-36983:38499,
-36984:38765,
-36985:31525,
-36986:35535,
-36987:38920,
-36988:37218,
-36989:22259,
-36990:21416,
-36992:36887,
-36993:21561,
-36994:22402,
-36995:24101,
-36996:25512,
-36997:27700,
-36998:28810,
-36999:30561,
-37000:31883,
-37001:32736,
-37002:34928,
-37003:36930,
-37004:37204,
-37005:37648,
-37006:37656,
-37007:38543,
-37008:29790,
-37009:39620,
-37010:23815,
-37011:23913,
-37012:25968,
-37013:26530,
-37014:36264,
-37015:38619,
-37016:25454,
-37017:26441,
-37018:26905,
-37019:33733,
-37020:38935,
-37021:38592,
-37022:35070,
-37023:28548,
-37024:25722,
-37025:23544,
-37026:19990,
-37027:28716,
-37028:30045,
-37029:26159,
-37030:20932,
-37031:21046,
-37032:21218,
-37033:22995,
-37034:24449,
-37035:24615,
-37036:25104,
-37037:25919,
-37038:25972,
-37039:26143,
-37040:26228,
-37041:26866,
-37042:26646,
-37043:27491,
-37044:28165,
-37045:29298,
-37046:29983,
-37047:30427,
-37048:31934,
-37049:32854,
-37050:22768,
-37051:35069,
-37052:35199,
-37053:35488,
-37054:35475,
-37055:35531,
-37056:36893,
-37057:37266,
-37058:38738,
-37059:38745,
-37060:25993,
-37061:31246,
-37062:33030,
-37063:38587,
-37064:24109,
-37065:24796,
-37066:25114,
-37067:26021,
-37068:26132,
-37069:26512,
-37070:30707,
-37071:31309,
-37072:31821,
-37073:32318,
-37074:33034,
-37075:36012,
-37076:36196,
-37077:36321,
-37078:36447,
-37079:30889,
-37080:20999,
-37081:25305,
-37082:25509,
-37083:25666,
-37084:25240,
-37085:35373,
-37086:31363,
-37087:31680,
-37088:35500,
-37089:38634,
-37090:32118,
-37091:33292,
-37092:34633,
-37093:20185,
-37094:20808,
-37095:21315,
-37096:21344,
-37097:23459,
-37098:23554,
-37099:23574,
-37100:24029,
-37101:25126,
-37102:25159,
-37103:25776,
-37104:26643,
-37105:26676,
-37106:27849,
-37107:27973,
-37108:27927,
-37109:26579,
-37110:28508,
-37111:29006,
-37112:29053,
-37113:26059,
-37114:31359,
-37115:31661,
-37116:32218,
-37184:32330,
-37185:32680,
-37186:33146,
-37187:33307,
-37188:33337,
-37189:34214,
-37190:35438,
-37191:36046,
-37192:36341,
-37193:36984,
-37194:36983,
-37195:37549,
-37196:37521,
-37197:38275,
-37198:39854,
-37199:21069,
-37200:21892,
-37201:28472,
-37202:28982,
-37203:20840,
-37204:31109,
-37205:32341,
-37206:33203,
-37207:31950,
-37208:22092,
-37209:22609,
-37210:23720,
-37211:25514,
-37212:26366,
-37213:26365,
-37214:26970,
-37215:29401,
-37216:30095,
-37217:30094,
-37218:30990,
-37219:31062,
-37220:31199,
-37221:31895,
-37222:32032,
-37223:32068,
-37224:34311,
-37225:35380,
-37226:38459,
-37227:36961,
-37228:40736,
-37229:20711,
-37230:21109,
-37231:21452,
-37232:21474,
-37233:20489,
-37234:21930,
-37235:22766,
-37236:22863,
-37237:29245,
-37238:23435,
-37239:23652,
-37240:21277,
-37241:24803,
-37242:24819,
-37243:25436,
-37244:25475,
-37245:25407,
-37246:25531,
-37248:25805,
-37249:26089,
-37250:26361,
-37251:24035,
-37252:27085,
-37253:27133,
-37254:28437,
-37255:29157,
-37256:20105,
-37257:30185,
-37258:30456,
-37259:31379,
-37260:31967,
-37261:32207,
-37262:32156,
-37263:32865,
-37264:33609,
-37265:33624,
-37266:33900,
-37267:33980,
-37268:34299,
-37269:35013,
-37270:36208,
-37271:36865,
-37272:36973,
-37273:37783,
-37274:38684,
-37275:39442,
-37276:20687,
-37277:22679,
-37278:24974,
-37279:33235,
-37280:34101,
-37281:36104,
-37282:36896,
-37283:20419,
-37284:20596,
-37285:21063,
-37286:21363,
-37287:24687,
-37288:25417,
-37289:26463,
-37290:28204,
-37291:36275,
-37292:36895,
-37293:20439,
-37294:23646,
-37295:36042,
-37296:26063,
-37297:32154,
-37298:21330,
-37299:34966,
-37300:20854,
-37301:25539,
-37302:23384,
-37303:23403,
-37304:23562,
-37305:25613,
-37306:26449,
-37307:36956,
-37308:20182,
-37309:22810,
-37310:22826,
-37311:27760,
-37312:35409,
-37313:21822,
-37314:22549,
-37315:22949,
-37316:24816,
-37317:25171,
-37318:26561,
-37319:33333,
-37320:26965,
-37321:38464,
-37322:39364,
-37323:39464,
-37324:20307,
-37325:22534,
-37326:23550,
-37327:32784,
-37328:23729,
-37329:24111,
-37330:24453,
-37331:24608,
-37332:24907,
-37333:25140,
-37334:26367,
-37335:27888,
-37336:28382,
-37337:32974,
-37338:33151,
-37339:33492,
-37340:34955,
-37341:36024,
-37342:36864,
-37343:36910,
-37344:38538,
-37345:40667,
-37346:39899,
-37347:20195,
-37348:21488,
-37349:22823,
-37350:31532,
-37351:37261,
-37352:38988,
-37353:40441,
-37354:28381,
-37355:28711,
-37356:21331,
-37357:21828,
-37358:23429,
-37359:25176,
-37360:25246,
-37361:25299,
-37362:27810,
-37363:28655,
-37364:29730,
-37365:35351,
-37366:37944,
-37367:28609,
-37368:35582,
-37369:33592,
-37370:20967,
-37371:34552,
-37372:21482,
-37440:21481,
-37441:20294,
-37442:36948,
-37443:36784,
-37444:22890,
-37445:33073,
-37446:24061,
-37447:31466,
-37448:36799,
-37449:26842,
-37450:35895,
-37451:29432,
-37452:40008,
-37453:27197,
-37454:35504,
-37455:20025,
-37456:21336,
-37457:22022,
-37458:22374,
-37459:25285,
-37460:25506,
-37461:26086,
-37462:27470,
-37463:28129,
-37464:28251,
-37465:28845,
-37466:30701,
-37467:31471,
-37468:31658,
-37469:32187,
-37470:32829,
-37471:32966,
-37472:34507,
-37473:35477,
-37474:37723,
-37475:22243,
-37476:22727,
-37477:24382,
-37478:26029,
-37479:26262,
-37480:27264,
-37481:27573,
-37482:30007,
-37483:35527,
-37484:20516,
-37485:30693,
-37486:22320,
-37487:24347,
-37488:24677,
-37489:26234,
-37490:27744,
-37491:30196,
-37492:31258,
-37493:32622,
-37494:33268,
-37495:34584,
-37496:36933,
-37497:39347,
-37498:31689,
-37499:30044,
-37500:31481,
-37501:31569,
-37502:33988,
-37504:36880,
-37505:31209,
-37506:31378,
-37507:33590,
-37508:23265,
-37509:30528,
-37510:20013,
-37511:20210,
-37512:23449,
-37513:24544,
-37514:25277,
-37515:26172,
-37516:26609,
-37517:27880,
-37518:34411,
-37519:34935,
-37520:35387,
-37521:37198,
-37522:37619,
-37523:39376,
-37524:27159,
-37525:28710,
-37526:29482,
-37527:33511,
-37528:33879,
-37529:36015,
-37530:19969,
-37531:20806,
-37532:20939,
-37533:21899,
-37534:23541,
-37535:24086,
-37536:24115,
-37537:24193,
-37538:24340,
-37539:24373,
-37540:24427,
-37541:24500,
-37542:25074,
-37543:25361,
-37544:26274,
-37545:26397,
-37546:28526,
-37547:29266,
-37548:30010,
-37549:30522,
-37550:32884,
-37551:33081,
-37552:33144,
-37553:34678,
-37554:35519,
-37555:35548,
-37556:36229,
-37557:36339,
-37558:37530,
-37559:38263,
-37560:38914,
-37561:40165,
-37562:21189,
-37563:25431,
-37564:30452,
-37565:26389,
-37566:27784,
-37567:29645,
-37568:36035,
-37569:37806,
-37570:38515,
-37571:27941,
-37572:22684,
-37573:26894,
-37574:27084,
-37575:36861,
-37576:37786,
-37577:30171,
-37578:36890,
-37579:22618,
-37580:26626,
-37581:25524,
-37582:27131,
-37583:20291,
-37584:28460,
-37585:26584,
-37586:36795,
-37587:34086,
-37588:32180,
-37589:37716,
-37590:26943,
-37591:28528,
-37592:22378,
-37593:22775,
-37594:23340,
-37595:32044,
-37596:29226,
-37597:21514,
-37598:37347,
-37599:40372,
-37600:20141,
-37601:20302,
-37602:20572,
-37603:20597,
-37604:21059,
-37605:35998,
-37606:21576,
-37607:22564,
-37608:23450,
-37609:24093,
-37610:24213,
-37611:24237,
-37612:24311,
-37613:24351,
-37614:24716,
-37615:25269,
-37616:25402,
-37617:25552,
-37618:26799,
-37619:27712,
-37620:30855,
-37621:31118,
-37622:31243,
-37623:32224,
-37624:33351,
-37625:35330,
-37626:35558,
-37627:36420,
-37628:36883,
-37696:37048,
-37697:37165,
-37698:37336,
-37699:40718,
-37700:27877,
-37701:25688,
-37702:25826,
-37703:25973,
-37704:28404,
-37705:30340,
-37706:31515,
-37707:36969,
-37708:37841,
-37709:28346,
-37710:21746,
-37711:24505,
-37712:25764,
-37713:36685,
-37714:36845,
-37715:37444,
-37716:20856,
-37717:22635,
-37718:22825,
-37719:23637,
-37720:24215,
-37721:28155,
-37722:32399,
-37723:29980,
-37724:36028,
-37725:36578,
-37726:39003,
-37727:28857,
-37728:20253,
-37729:27583,
-37730:28593,
-37731:30000,
-37732:38651,
-37733:20814,
-37734:21520,
-37735:22581,
-37736:22615,
-37737:22956,
-37738:23648,
-37739:24466,
-37740:26007,
-37741:26460,
-37742:28193,
-37743:30331,
-37744:33759,
-37745:36077,
-37746:36884,
-37747:37117,
-37748:37709,
-37749:30757,
-37750:30778,
-37751:21162,
-37752:24230,
-37753:22303,
-37754:22900,
-37755:24594,
-37756:20498,
-37757:20826,
-37758:20908,
-37760:20941,
-37761:20992,
-37762:21776,
-37763:22612,
-37764:22616,
-37765:22871,
-37766:23445,
-37767:23798,
-37768:23947,
-37769:24764,
-37770:25237,
-37771:25645,
-37772:26481,
-37773:26691,
-37774:26812,
-37775:26847,
-37776:30423,
-37777:28120,
-37778:28271,
-37779:28059,
-37780:28783,
-37781:29128,
-37782:24403,
-37783:30168,
-37784:31095,
-37785:31561,
-37786:31572,
-37787:31570,
-37788:31958,
-37789:32113,
-37790:21040,
-37791:33891,
-37792:34153,
-37793:34276,
-37794:35342,
-37795:35588,
-37796:35910,
-37797:36367,
-37798:36867,
-37799:36879,
-37800:37913,
-37801:38518,
-37802:38957,
-37803:39472,
-37804:38360,
-37805:20685,
-37806:21205,
-37807:21516,
-37808:22530,
-37809:23566,
-37810:24999,
-37811:25758,
-37812:27934,
-37813:30643,
-37814:31461,
-37815:33012,
-37816:33796,
-37817:36947,
-37818:37509,
-37819:23776,
-37820:40199,
-37821:21311,
-37822:24471,
-37823:24499,
-37824:28060,
-37825:29305,
-37826:30563,
-37827:31167,
-37828:31716,
-37829:27602,
-37830:29420,
-37831:35501,
-37832:26627,
-37833:27233,
-37834:20984,
-37835:31361,
-37836:26932,
-37837:23626,
-37838:40182,
-37839:33515,
-37840:23493,
-37841:37193,
-37842:28702,
-37843:22136,
-37844:23663,
-37845:24775,
-37846:25958,
-37847:27788,
-37848:35930,
-37849:36929,
-37850:38931,
-37851:21585,
-37852:26311,
-37853:37389,
-37854:22856,
-37855:37027,
-37856:20869,
-37857:20045,
-37858:20970,
-37859:34201,
-37860:35598,
-37861:28760,
-37862:25466,
-37863:37707,
-37864:26978,
-37865:39348,
-37866:32260,
-37867:30071,
-37868:21335,
-37869:26976,
-37870:36575,
-37871:38627,
-37872:27741,
-37873:20108,
-37874:23612,
-37875:24336,
-37876:36841,
-37877:21250,
-37878:36049,
-37879:32905,
-37880:34425,
-37881:24319,
-37882:26085,
-37883:20083,
-37884:20837,
-37952:22914,
-37953:23615,
-37954:38894,
-37955:20219,
-37956:22922,
-37957:24525,
-37958:35469,
-37959:28641,
-37960:31152,
-37961:31074,
-37962:23527,
-37963:33905,
-37964:29483,
-37965:29105,
-37966:24180,
-37967:24565,
-37968:25467,
-37969:25754,
-37970:29123,
-37971:31896,
-37972:20035,
-37973:24316,
-37974:20043,
-37975:22492,
-37976:22178,
-37977:24745,
-37978:28611,
-37979:32013,
-37980:33021,
-37981:33075,
-37982:33215,
-37983:36786,
-37984:35223,
-37985:34468,
-37986:24052,
-37987:25226,
-37988:25773,
-37989:35207,
-37990:26487,
-37991:27874,
-37992:27966,
-37993:29750,
-37994:30772,
-37995:23110,
-37996:32629,
-37997:33453,
-37998:39340,
-37999:20467,
-38000:24259,
-38001:25309,
-38002:25490,
-38003:25943,
-38004:26479,
-38005:30403,
-38006:29260,
-38007:32972,
-38008:32954,
-38009:36649,
-38010:37197,
-38011:20493,
-38012:22521,
-38013:23186,
-38014:26757,
-38016:26995,
-38017:29028,
-38018:29437,
-38019:36023,
-38020:22770,
-38021:36064,
-38022:38506,
-38023:36889,
-38024:34687,
-38025:31204,
-38026:30695,
-38027:33833,
-38028:20271,
-38029:21093,
-38030:21338,
-38031:25293,
-38032:26575,
-38033:27850,
-38034:30333,
-38035:31636,
-38036:31893,
-38037:33334,
-38038:34180,
-38039:36843,
-38040:26333,
-38041:28448,
-38042:29190,
-38043:32283,
-38044:33707,
-38045:39361,
-38046:40614,
-38047:20989,
-38048:31665,
-38049:30834,
-38050:31672,
-38051:32903,
-38052:31560,
-38053:27368,
-38054:24161,
-38055:32908,
-38056:30033,
-38057:30048,
-38058:20843,
-38059:37474,
-38060:28300,
-38061:30330,
-38062:37271,
-38063:39658,
-38064:20240,
-38065:32624,
-38066:25244,
-38067:31567,
-38068:38309,
-38069:40169,
-38070:22138,
-38071:22617,
-38072:34532,
-38073:38588,
-38074:20276,
-38075:21028,
-38076:21322,
-38077:21453,
-38078:21467,
-38079:24070,
-38080:25644,
-38081:26001,
-38082:26495,
-38083:27710,
-38084:27726,
-38085:29256,
-38086:29359,
-38087:29677,
-38088:30036,
-38089:32321,
-38090:33324,
-38091:34281,
-38092:36009,
-38093:31684,
-38094:37318,
-38095:29033,
-38096:38930,
-38097:39151,
-38098:25405,
-38099:26217,
-38100:30058,
-38101:30436,
-38102:30928,
-38103:34115,
-38104:34542,
-38105:21290,
-38106:21329,
-38107:21542,
-38108:22915,
-38109:24199,
-38110:24444,
-38111:24754,
-38112:25161,
-38113:25209,
-38114:25259,
-38115:26000,
-38116:27604,
-38117:27852,
-38118:30130,
-38119:30382,
-38120:30865,
-38121:31192,
-38122:32203,
-38123:32631,
-38124:32933,
-38125:34987,
-38126:35513,
-38127:36027,
-38128:36991,
-38129:38750,
-38130:39131,
-38131:27147,
-38132:31800,
-38133:20633,
-38134:23614,
-38135:24494,
-38136:26503,
-38137:27608,
-38138:29749,
-38139:30473,
-38140:32654,
-38208:40763,
-38209:26570,
-38210:31255,
-38211:21305,
-38212:30091,
-38213:39661,
-38214:24422,
-38215:33181,
-38216:33777,
-38217:32920,
-38218:24380,
-38219:24517,
-38220:30050,
-38221:31558,
-38222:36924,
-38223:26727,
-38224:23019,
-38225:23195,
-38226:32016,
-38227:30334,
-38228:35628,
-38229:20469,
-38230:24426,
-38231:27161,
-38232:27703,
-38233:28418,
-38234:29922,
-38235:31080,
-38236:34920,
-38237:35413,
-38238:35961,
-38239:24287,
-38240:25551,
-38241:30149,
-38242:31186,
-38243:33495,
-38244:37672,
-38245:37618,
-38246:33948,
-38247:34541,
-38248:39981,
-38249:21697,
-38250:24428,
-38251:25996,
-38252:27996,
-38253:28693,
-38254:36007,
-38255:36051,
-38256:38971,
-38257:25935,
-38258:29942,
-38259:19981,
-38260:20184,
-38261:22496,
-38262:22827,
-38263:23142,
-38264:23500,
-38265:20904,
-38266:24067,
-38267:24220,
-38268:24598,
-38269:25206,
-38270:25975,
-38272:26023,
-38273:26222,
-38274:28014,
-38275:29238,
-38276:31526,
-38277:33104,
-38278:33178,
-38279:33433,
-38280:35676,
-38281:36000,
-38282:36070,
-38283:36212,
-38284:38428,
-38285:38468,
-38286:20398,
-38287:25771,
-38288:27494,
-38289:33310,
-38290:33889,
-38291:34154,
-38292:37096,
-38293:23553,
-38294:26963,
-38295:39080,
-38296:33914,
-38297:34135,
-38298:20239,
-38299:21103,
-38300:24489,
-38301:24133,
-38302:26381,
-38303:31119,
-38304:33145,
-38305:35079,
-38306:35206,
-38307:28149,
-38308:24343,
-38309:25173,
-38310:27832,
-38311:20175,
-38312:29289,
-38313:39826,
-38314:20998,
-38315:21563,
-38316:22132,
-38317:22707,
-38318:24996,
-38319:25198,
-38320:28954,
-38321:22894,
-38322:31881,
-38323:31966,
-38324:32027,
-38325:38640,
-38326:25991,
-38327:32862,
-38328:19993,
-38329:20341,
-38330:20853,
-38331:22592,
-38332:24163,
-38333:24179,
-38334:24330,
-38335:26564,
-38336:20006,
-38337:34109,
-38338:38281,
-38339:38491,
-38340:31859,
-38341:38913,
-38342:20731,
-38343:22721,
-38344:30294,
-38345:30887,
-38346:21029,
-38347:30629,
-38348:34065,
-38349:31622,
-38350:20559,
-38351:22793,
-38352:29255,
-38353:31687,
-38354:32232,
-38355:36794,
-38356:36820,
-38357:36941,
-38358:20415,
-38359:21193,
-38360:23081,
-38361:24321,
-38362:38829,
-38363:20445,
-38364:33303,
-38365:37610,
-38366:22275,
-38367:25429,
-38368:27497,
-38369:29995,
-38370:35036,
-38371:36628,
-38372:31298,
-38373:21215,
-38374:22675,
-38375:24917,
-38376:25098,
-38377:26286,
-38378:27597,
-38379:31807,
-38380:33769,
-38381:20515,
-38382:20472,
-38383:21253,
-38384:21574,
-38385:22577,
-38386:22857,
-38387:23453,
-38388:23792,
-38389:23791,
-38390:23849,
-38391:24214,
-38392:25265,
-38393:25447,
-38394:25918,
-38395:26041,
-38396:26379,
-38464:27861,
-38465:27873,
-38466:28921,
-38467:30770,
-38468:32299,
-38469:32990,
-38470:33459,
-38471:33804,
-38472:34028,
-38473:34562,
-38474:35090,
-38475:35370,
-38476:35914,
-38477:37030,
-38478:37586,
-38479:39165,
-38480:40179,
-38481:40300,
-38482:20047,
-38483:20129,
-38484:20621,
-38485:21078,
-38486:22346,
-38487:22952,
-38488:24125,
-38489:24536,
-38490:24537,
-38491:25151,
-38492:26292,
-38493:26395,
-38494:26576,
-38495:26834,
-38496:20882,
-38497:32033,
-38498:32938,
-38499:33192,
-38500:35584,
-38501:35980,
-38502:36031,
-38503:37502,
-38504:38450,
-38505:21536,
-38506:38956,
-38507:21271,
-38508:20693,
-38509:21340,
-38510:22696,
-38511:25778,
-38512:26420,
-38513:29287,
-38514:30566,
-38515:31302,
-38516:37350,
-38517:21187,
-38518:27809,
-38519:27526,
-38520:22528,
-38521:24140,
-38522:22868,
-38523:26412,
-38524:32763,
-38525:20961,
-38526:30406,
-38528:25705,
-38529:30952,
-38530:39764,
-38531:40635,
-38532:22475,
-38533:22969,
-38534:26151,
-38535:26522,
-38536:27598,
-38537:21737,
-38538:27097,
-38539:24149,
-38540:33180,
-38541:26517,
-38542:39850,
-38543:26622,
-38544:40018,
-38545:26717,
-38546:20134,
-38547:20451,
-38548:21448,
-38549:25273,
-38550:26411,
-38551:27819,
-38552:36804,
-38553:20397,
-38554:32365,
-38555:40639,
-38556:19975,
-38557:24930,
-38558:28288,
-38559:28459,
-38560:34067,
-38561:21619,
-38562:26410,
-38563:39749,
-38564:24051,
-38565:31637,
-38566:23724,
-38567:23494,
-38568:34588,
-38569:28234,
-38570:34001,
-38571:31252,
-38572:33032,
-38573:22937,
-38574:31885,
-38575:27665,
-38576:30496,
-38577:21209,
-38578:22818,
-38579:28961,
-38580:29279,
-38581:30683,
-38582:38695,
-38583:40289,
-38584:26891,
-38585:23167,
-38586:23064,
-38587:20901,
-38588:21517,
-38589:21629,
-38590:26126,
-38591:30431,
-38592:36855,
-38593:37528,
-38594:40180,
-38595:23018,
-38596:29277,
-38597:28357,
-38598:20813,
-38599:26825,
-38600:32191,
-38601:32236,
-38602:38754,
-38603:40634,
-38604:25720,
-38605:27169,
-38606:33538,
-38607:22916,
-38608:23391,
-38609:27611,
-38610:29467,
-38611:30450,
-38612:32178,
-38613:32791,
-38614:33945,
-38615:20786,
-38616:26408,
-38617:40665,
-38618:30446,
-38619:26466,
-38620:21247,
-38621:39173,
-38622:23588,
-38623:25147,
-38624:31870,
-38625:36016,
-38626:21839,
-38627:24758,
-38628:32011,
-38629:38272,
-38630:21249,
-38631:20063,
-38632:20918,
-38633:22812,
-38634:29242,
-38635:32822,
-38636:37326,
-38637:24357,
-38638:30690,
-38639:21380,
-38640:24441,
-38641:32004,
-38642:34220,
-38643:35379,
-38644:36493,
-38645:38742,
-38646:26611,
-38647:34222,
-38648:37971,
-38649:24841,
-38650:24840,
-38651:27833,
-38652:30290,
-38720:35565,
-38721:36664,
-38722:21807,
-38723:20305,
-38724:20778,
-38725:21191,
-38726:21451,
-38727:23461,
-38728:24189,
-38729:24736,
-38730:24962,
-38731:25558,
-38732:26377,
-38733:26586,
-38734:28263,
-38735:28044,
-38736:29494,
-38737:29495,
-38738:30001,
-38739:31056,
-38740:35029,
-38741:35480,
-38742:36938,
-38743:37009,
-38744:37109,
-38745:38596,
-38746:34701,
-38747:22805,
-38748:20104,
-38749:20313,
-38750:19982,
-38751:35465,
-38752:36671,
-38753:38928,
-38754:20653,
-38755:24188,
-38756:22934,
-38757:23481,
-38758:24248,
-38759:25562,
-38760:25594,
-38761:25793,
-38762:26332,
-38763:26954,
-38764:27096,
-38765:27915,
-38766:28342,
-38767:29076,
-38768:29992,
-38769:31407,
-38770:32650,
-38771:32768,
-38772:33865,
-38773:33993,
-38774:35201,
-38775:35617,
-38776:36362,
-38777:36965,
-38778:38525,
-38779:39178,
-38780:24958,
-38781:25233,
-38782:27442,
-38784:27779,
-38785:28020,
-38786:32716,
-38787:32764,
-38788:28096,
-38789:32645,
-38790:34746,
-38791:35064,
-38792:26469,
-38793:33713,
-38794:38972,
-38795:38647,
-38796:27931,
-38797:32097,
-38798:33853,
-38799:37226,
-38800:20081,
-38801:21365,
-38802:23888,
-38803:27396,
-38804:28651,
-38805:34253,
-38806:34349,
-38807:35239,
-38808:21033,
-38809:21519,
-38810:23653,
-38811:26446,
-38812:26792,
-38813:29702,
-38814:29827,
-38815:30178,
-38816:35023,
-38817:35041,
-38818:37324,
-38819:38626,
-38820:38520,
-38821:24459,
-38822:29575,
-38823:31435,
-38824:33870,
-38825:25504,
-38826:30053,
-38827:21129,
-38828:27969,
-38829:28316,
-38830:29705,
-38831:30041,
-38832:30827,
-38833:31890,
-38834:38534,
-38835:31452,
-38836:40845,
-38837:20406,
-38838:24942,
-38839:26053,
-38840:34396,
-38841:20102,
-38842:20142,
-38843:20698,
-38844:20001,
-38845:20940,
-38846:23534,
-38847:26009,
-38848:26753,
-38849:28092,
-38850:29471,
-38851:30274,
-38852:30637,
-38853:31260,
-38854:31975,
-38855:33391,
-38856:35538,
-38857:36988,
-38858:37327,
-38859:38517,
-38860:38936,
-38861:21147,
-38862:32209,
-38863:20523,
-38864:21400,
-38865:26519,
-38866:28107,
-38867:29136,
-38868:29747,
-38869:33256,
-38870:36650,
-38871:38563,
-38872:40023,
-38873:40607,
-38874:29792,
-38875:22593,
-38876:28057,
-38877:32047,
-38878:39006,
-38879:20196,
-38880:20278,
-38881:20363,
-38882:20919,
-38883:21169,
-38884:23994,
-38885:24604,
-38886:29618,
-38887:31036,
-38888:33491,
-38889:37428,
-38890:38583,
-38891:38646,
-38892:38666,
-38893:40599,
-38894:40802,
-38895:26278,
-38896:27508,
-38897:21015,
-38898:21155,
-38899:28872,
-38900:35010,
-38901:24265,
-38902:24651,
-38903:24976,
-38904:28451,
-38905:29001,
-38906:31806,
-38907:32244,
-38908:32879,
-38976:34030,
-38977:36899,
-38978:37676,
-38979:21570,
-38980:39791,
-38981:27347,
-38982:28809,
-38983:36034,
-38984:36335,
-38985:38706,
-38986:21172,
-38987:23105,
-38988:24266,
-38989:24324,
-38990:26391,
-38991:27004,
-38992:27028,
-38993:28010,
-38994:28431,
-38995:29282,
-38996:29436,
-38997:31725,
-38998:32769,
-38999:32894,
-39000:34635,
-39001:37070,
-39002:20845,
-39003:40595,
-39004:31108,
-39005:32907,
-39006:37682,
-39007:35542,
-39008:20525,
-39009:21644,
-39010:35441,
-39011:27498,
-39012:36036,
-39013:33031,
-39014:24785,
-39015:26528,
-39016:40434,
-39017:20121,
-39018:20120,
-39019:39952,
-39020:35435,
-39021:34241,
-39022:34152,
-39023:26880,
-39024:28286,
-39025:30871,
-39026:33109,
-39071:24332,
-39072:19984,
-39073:19989,
-39074:20010,
-39075:20017,
-39076:20022,
-39077:20028,
-39078:20031,
-39079:20034,
-39080:20054,
-39081:20056,
-39082:20098,
-39083:20101,
-39084:35947,
-39085:20106,
-39086:33298,
-39087:24333,
-39088:20110,
-39089:20126,
-39090:20127,
-39091:20128,
-39092:20130,
-39093:20144,
-39094:20147,
-39095:20150,
-39096:20174,
-39097:20173,
-39098:20164,
-39099:20166,
-39100:20162,
-39101:20183,
-39102:20190,
-39103:20205,
-39104:20191,
-39105:20215,
-39106:20233,
-39107:20314,
-39108:20272,
-39109:20315,
-39110:20317,
-39111:20311,
-39112:20295,
-39113:20342,
-39114:20360,
-39115:20367,
-39116:20376,
-39117:20347,
-39118:20329,
-39119:20336,
-39120:20369,
-39121:20335,
-39122:20358,
-39123:20374,
-39124:20760,
-39125:20436,
-39126:20447,
-39127:20430,
-39128:20440,
-39129:20443,
-39130:20433,
-39131:20442,
-39132:20432,
-39133:20452,
-39134:20453,
-39135:20506,
-39136:20520,
-39137:20500,
-39138:20522,
-39139:20517,
-39140:20485,
-39141:20252,
-39142:20470,
-39143:20513,
-39144:20521,
-39145:20524,
-39146:20478,
-39147:20463,
-39148:20497,
-39149:20486,
-39150:20547,
-39151:20551,
-39152:26371,
-39153:20565,
-39154:20560,
-39155:20552,
-39156:20570,
-39157:20566,
-39158:20588,
-39159:20600,
-39160:20608,
-39161:20634,
-39162:20613,
-39163:20660,
-39164:20658,
-39232:20681,
-39233:20682,
-39234:20659,
-39235:20674,
-39236:20694,
-39237:20702,
-39238:20709,
-39239:20717,
-39240:20707,
-39241:20718,
-39242:20729,
-39243:20725,
-39244:20745,
-39245:20737,
-39246:20738,
-39247:20758,
-39248:20757,
-39249:20756,
-39250:20762,
-39251:20769,
-39252:20794,
-39253:20791,
-39254:20796,
-39255:20795,
-39256:20799,
-39257:20800,
-39258:20818,
-39259:20812,
-39260:20820,
-39261:20834,
-39262:31480,
-39263:20841,
-39264:20842,
-39265:20846,
-39266:20864,
-39267:20866,
-39268:22232,
-39269:20876,
-39270:20873,
-39271:20879,
-39272:20881,
-39273:20883,
-39274:20885,
-39275:20886,
-39276:20900,
-39277:20902,
-39278:20898,
-39279:20905,
-39280:20906,
-39281:20907,
-39282:20915,
-39283:20913,
-39284:20914,
-39285:20912,
-39286:20917,
-39287:20925,
-39288:20933,
-39289:20937,
-39290:20955,
-39291:20960,
-39292:34389,
-39293:20969,
-39294:20973,
-39296:20976,
-39297:20981,
-39298:20990,
-39299:20996,
-39300:21003,
-39301:21012,
-39302:21006,
-39303:21031,
-39304:21034,
-39305:21038,
-39306:21043,
-39307:21049,
-39308:21071,
-39309:21060,
-39310:21067,
-39311:21068,
-39312:21086,
-39313:21076,
-39314:21098,
-39315:21108,
-39316:21097,
-39317:21107,
-39318:21119,
-39319:21117,
-39320:21133,
-39321:21140,
-39322:21138,
-39323:21105,
-39324:21128,
-39325:21137,
-39326:36776,
-39327:36775,
-39328:21164,
-39329:21165,
-39330:21180,
-39331:21173,
-39332:21185,
-39333:21197,
-39334:21207,
-39335:21214,
-39336:21219,
-39337:21222,
-39338:39149,
-39339:21216,
-39340:21235,
-39341:21237,
-39342:21240,
-39343:21241,
-39344:21254,
-39345:21256,
-39346:30008,
-39347:21261,
-39348:21264,
-39349:21263,
-39350:21269,
-39351:21274,
-39352:21283,
-39353:21295,
-39354:21297,
-39355:21299,
-39356:21304,
-39357:21312,
-39358:21318,
-39359:21317,
-39360:19991,
-39361:21321,
-39362:21325,
-39363:20950,
-39364:21342,
-39365:21353,
-39366:21358,
-39367:22808,
-39368:21371,
-39369:21367,
-39370:21378,
-39371:21398,
-39372:21408,
-39373:21414,
-39374:21413,
-39375:21422,
-39376:21424,
-39377:21430,
-39378:21443,
-39379:31762,
-39380:38617,
-39381:21471,
-39382:26364,
-39383:29166,
-39384:21486,
-39385:21480,
-39386:21485,
-39387:21498,
-39388:21505,
-39389:21565,
-39390:21568,
-39391:21548,
-39392:21549,
-39393:21564,
-39394:21550,
-39395:21558,
-39396:21545,
-39397:21533,
-39398:21582,
-39399:21647,
-39400:21621,
-39401:21646,
-39402:21599,
-39403:21617,
-39404:21623,
-39405:21616,
-39406:21650,
-39407:21627,
-39408:21632,
-39409:21622,
-39410:21636,
-39411:21648,
-39412:21638,
-39413:21703,
-39414:21666,
-39415:21688,
-39416:21669,
-39417:21676,
-39418:21700,
-39419:21704,
-39420:21672,
-39488:21675,
-39489:21698,
-39490:21668,
-39491:21694,
-39492:21692,
-39493:21720,
-39494:21733,
-39495:21734,
-39496:21775,
-39497:21780,
-39498:21757,
-39499:21742,
-39500:21741,
-39501:21754,
-39502:21730,
-39503:21817,
-39504:21824,
-39505:21859,
-39506:21836,
-39507:21806,
-39508:21852,
-39509:21829,
-39510:21846,
-39511:21847,
-39512:21816,
-39513:21811,
-39514:21853,
-39515:21913,
-39516:21888,
-39517:21679,
-39518:21898,
-39519:21919,
-39520:21883,
-39521:21886,
-39522:21912,
-39523:21918,
-39524:21934,
-39525:21884,
-39526:21891,
-39527:21929,
-39528:21895,
-39529:21928,
-39530:21978,
-39531:21957,
-39532:21983,
-39533:21956,
-39534:21980,
-39535:21988,
-39536:21972,
-39537:22036,
-39538:22007,
-39539:22038,
-39540:22014,
-39541:22013,
-39542:22043,
-39543:22009,
-39544:22094,
-39545:22096,
-39546:29151,
-39547:22068,
-39548:22070,
-39549:22066,
-39550:22072,
-39552:22123,
-39553:22116,
-39554:22063,
-39555:22124,
-39556:22122,
-39557:22150,
-39558:22144,
-39559:22154,
-39560:22176,
-39561:22164,
-39562:22159,
-39563:22181,
-39564:22190,
-39565:22198,
-39566:22196,
-39567:22210,
-39568:22204,
-39569:22209,
-39570:22211,
-39571:22208,
-39572:22216,
-39573:22222,
-39574:22225,
-39575:22227,
-39576:22231,
-39577:22254,
-39578:22265,
-39579:22272,
-39580:22271,
-39581:22276,
-39582:22281,
-39583:22280,
-39584:22283,
-39585:22285,
-39586:22291,
-39587:22296,
-39588:22294,
-39589:21959,
-39590:22300,
-39591:22310,
-39592:22327,
-39593:22328,
-39594:22350,
-39595:22331,
-39596:22336,
-39597:22351,
-39598:22377,
-39599:22464,
-39600:22408,
-39601:22369,
-39602:22399,
-39603:22409,
-39604:22419,
-39605:22432,
-39606:22451,
-39607:22436,
-39608:22442,
-39609:22448,
-39610:22467,
-39611:22470,
-39612:22484,
-39613:22482,
-39614:22483,
-39615:22538,
-39616:22486,
-39617:22499,
-39618:22539,
-39619:22553,
-39620:22557,
-39621:22642,
-39622:22561,
-39623:22626,
-39624:22603,
-39625:22640,
-39626:27584,
-39627:22610,
-39628:22589,
-39629:22649,
-39630:22661,
-39631:22713,
-39632:22687,
-39633:22699,
-39634:22714,
-39635:22750,
-39636:22715,
-39637:22712,
-39638:22702,
-39639:22725,
-39640:22739,
-39641:22737,
-39642:22743,
-39643:22745,
-39644:22744,
-39645:22757,
-39646:22748,
-39647:22756,
-39648:22751,
-39649:22767,
-39650:22778,
-39651:22777,
-39652:22779,
-39653:22780,
-39654:22781,
-39655:22786,
-39656:22794,
-39657:22800,
-39658:22811,
-39659:26790,
-39660:22821,
-39661:22828,
-39662:22829,
-39663:22834,
-39664:22840,
-39665:22846,
-39666:31442,
-39667:22869,
-39668:22864,
-39669:22862,
-39670:22874,
-39671:22872,
-39672:22882,
-39673:22880,
-39674:22887,
-39675:22892,
-39676:22889,
-39744:22904,
-39745:22913,
-39746:22941,
-39747:20318,
-39748:20395,
-39749:22947,
-39750:22962,
-39751:22982,
-39752:23016,
-39753:23004,
-39754:22925,
-39755:23001,
-39756:23002,
-39757:23077,
-39758:23071,
-39759:23057,
-39760:23068,
-39761:23049,
-39762:23066,
-39763:23104,
-39764:23148,
-39765:23113,
-39766:23093,
-39767:23094,
-39768:23138,
-39769:23146,
-39770:23194,
-39771:23228,
-39772:23230,
-39773:23243,
-39774:23234,
-39775:23229,
-39776:23267,
-39777:23255,
-39778:23270,
-39779:23273,
-39780:23254,
-39781:23290,
-39782:23291,
-39783:23308,
-39784:23307,
-39785:23318,
-39786:23346,
-39787:23248,
-39788:23338,
-39789:23350,
-39790:23358,
-39791:23363,
-39792:23365,
-39793:23360,
-39794:23377,
-39795:23381,
-39796:23386,
-39797:23387,
-39798:23397,
-39799:23401,
-39800:23408,
-39801:23411,
-39802:23413,
-39803:23416,
-39804:25992,
-39805:23418,
-39806:23424,
-39808:23427,
-39809:23462,
-39810:23480,
-39811:23491,
-39812:23495,
-39813:23497,
-39814:23508,
-39815:23504,
-39816:23524,
-39817:23526,
-39818:23522,
-39819:23518,
-39820:23525,
-39821:23531,
-39822:23536,
-39823:23542,
-39824:23539,
-39825:23557,
-39826:23559,
-39827:23560,
-39828:23565,
-39829:23571,
-39830:23584,
-39831:23586,
-39832:23592,
-39833:23608,
-39834:23609,
-39835:23617,
-39836:23622,
-39837:23630,
-39838:23635,
-39839:23632,
-39840:23631,
-39841:23409,
-39842:23660,
-39843:23662,
-39844:20066,
-39845:23670,
-39846:23673,
-39847:23692,
-39848:23697,
-39849:23700,
-39850:22939,
-39851:23723,
-39852:23739,
-39853:23734,
-39854:23740,
-39855:23735,
-39856:23749,
-39857:23742,
-39858:23751,
-39859:23769,
-39860:23785,
-39861:23805,
-39862:23802,
-39863:23789,
-39864:23948,
-39865:23786,
-39866:23819,
-39867:23829,
-39868:23831,
-39869:23900,
-39870:23839,
-39871:23835,
-39872:23825,
-39873:23828,
-39874:23842,
-39875:23834,
-39876:23833,
-39877:23832,
-39878:23884,
-39879:23890,
-39880:23886,
-39881:23883,
-39882:23916,
-39883:23923,
-39884:23926,
-39885:23943,
-39886:23940,
-39887:23938,
-39888:23970,
-39889:23965,
-39890:23980,
-39891:23982,
-39892:23997,
-39893:23952,
-39894:23991,
-39895:23996,
-39896:24009,
-39897:24013,
-39898:24019,
-39899:24018,
-39900:24022,
-39901:24027,
-39902:24043,
-39903:24050,
-39904:24053,
-39905:24075,
-39906:24090,
-39907:24089,
-39908:24081,
-39909:24091,
-39910:24118,
-39911:24119,
-39912:24132,
-39913:24131,
-39914:24128,
-39915:24142,
-39916:24151,
-39917:24148,
-39918:24159,
-39919:24162,
-39920:24164,
-39921:24135,
-39922:24181,
-39923:24182,
-39924:24186,
-39925:40636,
-39926:24191,
-39927:24224,
-39928:24257,
-39929:24258,
-39930:24264,
-39931:24272,
-39932:24271,
-40000:24278,
-40001:24291,
-40002:24285,
-40003:24282,
-40004:24283,
-40005:24290,
-40006:24289,
-40007:24296,
-40008:24297,
-40009:24300,
-40010:24305,
-40011:24307,
-40012:24304,
-40013:24308,
-40014:24312,
-40015:24318,
-40016:24323,
-40017:24329,
-40018:24413,
-40019:24412,
-40020:24331,
-40021:24337,
-40022:24342,
-40023:24361,
-40024:24365,
-40025:24376,
-40026:24385,
-40027:24392,
-40028:24396,
-40029:24398,
-40030:24367,
-40031:24401,
-40032:24406,
-40033:24407,
-40034:24409,
-40035:24417,
-40036:24429,
-40037:24435,
-40038:24439,
-40039:24451,
-40040:24450,
-40041:24447,
-40042:24458,
-40043:24456,
-40044:24465,
-40045:24455,
-40046:24478,
-40047:24473,
-40048:24472,
-40049:24480,
-40050:24488,
-40051:24493,
-40052:24508,
-40053:24534,
-40054:24571,
-40055:24548,
-40056:24568,
-40057:24561,
-40058:24541,
-40059:24755,
-40060:24575,
-40061:24609,
-40062:24672,
-40064:24601,
-40065:24592,
-40066:24617,
-40067:24590,
-40068:24625,
-40069:24603,
-40070:24597,
-40071:24619,
-40072:24614,
-40073:24591,
-40074:24634,
-40075:24666,
-40076:24641,
-40077:24682,
-40078:24695,
-40079:24671,
-40080:24650,
-40081:24646,
-40082:24653,
-40083:24675,
-40084:24643,
-40085:24676,
-40086:24642,
-40087:24684,
-40088:24683,
-40089:24665,
-40090:24705,
-40091:24717,
-40092:24807,
-40093:24707,
-40094:24730,
-40095:24708,
-40096:24731,
-40097:24726,
-40098:24727,
-40099:24722,
-40100:24743,
-40101:24715,
-40102:24801,
-40103:24760,
-40104:24800,
-40105:24787,
-40106:24756,
-40107:24560,
-40108:24765,
-40109:24774,
-40110:24757,
-40111:24792,
-40112:24909,
-40113:24853,
-40114:24838,
-40115:24822,
-40116:24823,
-40117:24832,
-40118:24820,
-40119:24826,
-40120:24835,
-40121:24865,
-40122:24827,
-40123:24817,
-40124:24845,
-40125:24846,
-40126:24903,
-40127:24894,
-40128:24872,
-40129:24871,
-40130:24906,
-40131:24895,
-40132:24892,
-40133:24876,
-40134:24884,
-40135:24893,
-40136:24898,
-40137:24900,
-40138:24947,
-40139:24951,
-40140:24920,
-40141:24921,
-40142:24922,
-40143:24939,
-40144:24948,
-40145:24943,
-40146:24933,
-40147:24945,
-40148:24927,
-40149:24925,
-40150:24915,
-40151:24949,
-40152:24985,
-40153:24982,
-40154:24967,
-40155:25004,
-40156:24980,
-40157:24986,
-40158:24970,
-40159:24977,
-40160:25003,
-40161:25006,
-40162:25036,
-40163:25034,
-40164:25033,
-40165:25079,
-40166:25032,
-40167:25027,
-40168:25030,
-40169:25018,
-40170:25035,
-40171:32633,
-40172:25037,
-40173:25062,
-40174:25059,
-40175:25078,
-40176:25082,
-40177:25076,
-40178:25087,
-40179:25085,
-40180:25084,
-40181:25086,
-40182:25088,
-40183:25096,
-40184:25097,
-40185:25101,
-40186:25100,
-40187:25108,
-40188:25115,
-40256:25118,
-40257:25121,
-40258:25130,
-40259:25134,
-40260:25136,
-40261:25138,
-40262:25139,
-40263:25153,
-40264:25166,
-40265:25182,
-40266:25187,
-40267:25179,
-40268:25184,
-40269:25192,
-40270:25212,
-40271:25218,
-40272:25225,
-40273:25214,
-40274:25234,
-40275:25235,
-40276:25238,
-40277:25300,
-40278:25219,
-40279:25236,
-40280:25303,
-40281:25297,
-40282:25275,
-40283:25295,
-40284:25343,
-40285:25286,
-40286:25812,
-40287:25288,
-40288:25308,
-40289:25292,
-40290:25290,
-40291:25282,
-40292:25287,
-40293:25243,
-40294:25289,
-40295:25356,
-40296:25326,
-40297:25329,
-40298:25383,
-40299:25346,
-40300:25352,
-40301:25327,
-40302:25333,
-40303:25424,
-40304:25406,
-40305:25421,
-40306:25628,
-40307:25423,
-40308:25494,
-40309:25486,
-40310:25472,
-40311:25515,
-40312:25462,
-40313:25507,
-40314:25487,
-40315:25481,
-40316:25503,
-40317:25525,
-40318:25451,
-40320:25449,
-40321:25534,
-40322:25577,
-40323:25536,
-40324:25542,
-40325:25571,
-40326:25545,
-40327:25554,
-40328:25590,
-40329:25540,
-40330:25622,
-40331:25652,
-40332:25606,
-40333:25619,
-40334:25638,
-40335:25654,
-40336:25885,
-40337:25623,
-40338:25640,
-40339:25615,
-40340:25703,
-40341:25711,
-40342:25718,
-40343:25678,
-40344:25898,
-40345:25749,
-40346:25747,
-40347:25765,
-40348:25769,
-40349:25736,
-40350:25788,
-40351:25818,
-40352:25810,
-40353:25797,
-40354:25799,
-40355:25787,
-40356:25816,
-40357:25794,
-40358:25841,
-40359:25831,
-40360:33289,
-40361:25824,
-40362:25825,
-40363:25260,
-40364:25827,
-40365:25839,
-40366:25900,
-40367:25846,
-40368:25844,
-40369:25842,
-40370:25850,
-40371:25856,
-40372:25853,
-40373:25880,
-40374:25884,
-40375:25861,
-40376:25892,
-40377:25891,
-40378:25899,
-40379:25908,
-40380:25909,
-40381:25911,
-40382:25910,
-40383:25912,
-40384:30027,
-40385:25928,
-40386:25942,
-40387:25941,
-40388:25933,
-40389:25944,
-40390:25950,
-40391:25949,
-40392:25970,
-40393:25976,
-40394:25986,
-40395:25987,
-40396:35722,
-40397:26011,
-40398:26015,
-40399:26027,
-40400:26039,
-40401:26051,
-40402:26054,
-40403:26049,
-40404:26052,
-40405:26060,
-40406:26066,
-40407:26075,
-40408:26073,
-40409:26080,
-40410:26081,
-40411:26097,
-40412:26482,
-40413:26122,
-40414:26115,
-40415:26107,
-40416:26483,
-40417:26165,
-40418:26166,
-40419:26164,
-40420:26140,
-40421:26191,
-40422:26180,
-40423:26185,
-40424:26177,
-40425:26206,
-40426:26205,
-40427:26212,
-40428:26215,
-40429:26216,
-40430:26207,
-40431:26210,
-40432:26224,
-40433:26243,
-40434:26248,
-40435:26254,
-40436:26249,
-40437:26244,
-40438:26264,
-40439:26269,
-40440:26305,
-40441:26297,
-40442:26313,
-40443:26302,
-40444:26300,
-40512:26308,
-40513:26296,
-40514:26326,
-40515:26330,
-40516:26336,
-40517:26175,
-40518:26342,
-40519:26345,
-40520:26352,
-40521:26357,
-40522:26359,
-40523:26383,
-40524:26390,
-40525:26398,
-40526:26406,
-40527:26407,
-40528:38712,
-40529:26414,
-40530:26431,
-40531:26422,
-40532:26433,
-40533:26424,
-40534:26423,
-40535:26438,
-40536:26462,
-40537:26464,
-40538:26457,
-40539:26467,
-40540:26468,
-40541:26505,
-40542:26480,
-40543:26537,
-40544:26492,
-40545:26474,
-40546:26508,
-40547:26507,
-40548:26534,
-40549:26529,
-40550:26501,
-40551:26551,
-40552:26607,
-40553:26548,
-40554:26604,
-40555:26547,
-40556:26601,
-40557:26552,
-40558:26596,
-40559:26590,
-40560:26589,
-40561:26594,
-40562:26606,
-40563:26553,
-40564:26574,
-40565:26566,
-40566:26599,
-40567:27292,
-40568:26654,
-40569:26694,
-40570:26665,
-40571:26688,
-40572:26701,
-40573:26674,
-40574:26702,
-40576:26803,
-40577:26667,
-40578:26713,
-40579:26723,
-40580:26743,
-40581:26751,
-40582:26783,
-40583:26767,
-40584:26797,
-40585:26772,
-40586:26781,
-40587:26779,
-40588:26755,
-40589:27310,
-40590:26809,
-40591:26740,
-40592:26805,
-40593:26784,
-40594:26810,
-40595:26895,
-40596:26765,
-40597:26750,
-40598:26881,
-40599:26826,
-40600:26888,
-40601:26840,
-40602:26914,
-40603:26918,
-40604:26849,
-40605:26892,
-40606:26829,
-40607:26836,
-40608:26855,
-40609:26837,
-40610:26934,
-40611:26898,
-40612:26884,
-40613:26839,
-40614:26851,
-40615:26917,
-40616:26873,
-40617:26848,
-40618:26863,
-40619:26920,
-40620:26922,
-40621:26906,
-40622:26915,
-40623:26913,
-40624:26822,
-40625:27001,
-40626:26999,
-40627:26972,
-40628:27000,
-40629:26987,
-40630:26964,
-40631:27006,
-40632:26990,
-40633:26937,
-40634:26996,
-40635:26941,
-40636:26969,
-40637:26928,
-40638:26977,
-40639:26974,
-40640:26973,
-40641:27009,
-40642:26986,
-40643:27058,
-40644:27054,
-40645:27088,
-40646:27071,
-40647:27073,
-40648:27091,
-40649:27070,
-40650:27086,
-40651:23528,
-40652:27082,
-40653:27101,
-40654:27067,
-40655:27075,
-40656:27047,
-40657:27182,
-40658:27025,
-40659:27040,
-40660:27036,
-40661:27029,
-40662:27060,
-40663:27102,
-40664:27112,
-40665:27138,
-40666:27163,
-40667:27135,
-40668:27402,
-40669:27129,
-40670:27122,
-40671:27111,
-40672:27141,
-40673:27057,
-40674:27166,
-40675:27117,
-40676:27156,
-40677:27115,
-40678:27146,
-40679:27154,
-40680:27329,
-40681:27171,
-40682:27155,
-40683:27204,
-40684:27148,
-40685:27250,
-40686:27190,
-40687:27256,
-40688:27207,
-40689:27234,
-40690:27225,
-40691:27238,
-40692:27208,
-40693:27192,
-40694:27170,
-40695:27280,
-40696:27277,
-40697:27296,
-40698:27268,
-40699:27298,
-40700:27299,
-40768:27287,
-40769:34327,
-40770:27323,
-40771:27331,
-40772:27330,
-40773:27320,
-40774:27315,
-40775:27308,
-40776:27358,
-40777:27345,
-40778:27359,
-40779:27306,
-40780:27354,
-40781:27370,
-40782:27387,
-40783:27397,
-40784:34326,
-40785:27386,
-40786:27410,
-40787:27414,
-40788:39729,
-40789:27423,
-40790:27448,
-40791:27447,
-40792:30428,
-40793:27449,
-40794:39150,
-40795:27463,
-40796:27459,
-40797:27465,
-40798:27472,
-40799:27481,
-40800:27476,
-40801:27483,
-40802:27487,
-40803:27489,
-40804:27512,
-40805:27513,
-40806:27519,
-40807:27520,
-40808:27524,
-40809:27523,
-40810:27533,
-40811:27544,
-40812:27541,
-40813:27550,
-40814:27556,
-40815:27562,
-40816:27563,
-40817:27567,
-40818:27570,
-40819:27569,
-40820:27571,
-40821:27575,
-40822:27580,
-40823:27590,
-40824:27595,
-40825:27603,
-40826:27615,
-40827:27628,
-40828:27627,
-40829:27635,
-40830:27631,
-40832:40638,
-40833:27656,
-40834:27667,
-40835:27668,
-40836:27675,
-40837:27684,
-40838:27683,
-40839:27742,
-40840:27733,
-40841:27746,
-40842:27754,
-40843:27778,
-40844:27789,
-40845:27802,
-40846:27777,
-40847:27803,
-40848:27774,
-40849:27752,
-40850:27763,
-40851:27794,
-40852:27792,
-40853:27844,
-40854:27889,
-40855:27859,
-40856:27837,
-40857:27863,
-40858:27845,
-40859:27869,
-40860:27822,
-40861:27825,
-40862:27838,
-40863:27834,
-40864:27867,
-40865:27887,
-40866:27865,
-40867:27882,
-40868:27935,
-40869:34893,
-40870:27958,
-40871:27947,
-40872:27965,
-40873:27960,
-40874:27929,
-40875:27957,
-40876:27955,
-40877:27922,
-40878:27916,
-40879:28003,
-40880:28051,
-40881:28004,
-40882:27994,
-40883:28025,
-40884:27993,
-40885:28046,
-40886:28053,
-40887:28644,
-40888:28037,
-40889:28153,
-40890:28181,
-40891:28170,
-40892:28085,
-40893:28103,
-40894:28134,
-40895:28088,
-40896:28102,
-40897:28140,
-40898:28126,
-40899:28108,
-40900:28136,
-40901:28114,
-40902:28101,
-40903:28154,
-40904:28121,
-40905:28132,
-40906:28117,
-40907:28138,
-40908:28142,
-40909:28205,
-40910:28270,
-40911:28206,
-40912:28185,
-40913:28274,
-40914:28255,
-40915:28222,
-40916:28195,
-40917:28267,
-40918:28203,
-40919:28278,
-40920:28237,
-40921:28191,
-40922:28227,
-40923:28218,
-40924:28238,
-40925:28196,
-40926:28415,
-40927:28189,
-40928:28216,
-40929:28290,
-40930:28330,
-40931:28312,
-40932:28361,
-40933:28343,
-40934:28371,
-40935:28349,
-40936:28335,
-40937:28356,
-40938:28338,
-40939:28372,
-40940:28373,
-40941:28303,
-40942:28325,
-40943:28354,
-40944:28319,
-40945:28481,
-40946:28433,
-40947:28748,
-40948:28396,
-40949:28408,
-40950:28414,
-40951:28479,
-40952:28402,
-40953:28465,
-40954:28399,
-40955:28466,
-40956:28364,
-57408:28478,
-57409:28435,
-57410:28407,
-57411:28550,
-57412:28538,
-57413:28536,
-57414:28545,
-57415:28544,
-57416:28527,
-57417:28507,
-57418:28659,
-57419:28525,
-57420:28546,
-57421:28540,
-57422:28504,
-57423:28558,
-57424:28561,
-57425:28610,
-57426:28518,
-57427:28595,
-57428:28579,
-57429:28577,
-57430:28580,
-57431:28601,
-57432:28614,
-57433:28586,
-57434:28639,
-57435:28629,
-57436:28652,
-57437:28628,
-57438:28632,
-57439:28657,
-57440:28654,
-57441:28635,
-57442:28681,
-57443:28683,
-57444:28666,
-57445:28689,
-57446:28673,
-57447:28687,
-57448:28670,
-57449:28699,
-57450:28698,
-57451:28532,
-57452:28701,
-57453:28696,
-57454:28703,
-57455:28720,
-57456:28734,
-57457:28722,
-57458:28753,
-57459:28771,
-57460:28825,
-57461:28818,
-57462:28847,
-57463:28913,
-57464:28844,
-57465:28856,
-57466:28851,
-57467:28846,
-57468:28895,
-57469:28875,
-57470:28893,
-57472:28889,
-57473:28937,
-57474:28925,
-57475:28956,
-57476:28953,
-57477:29029,
-57478:29013,
-57479:29064,
-57480:29030,
-57481:29026,
-57482:29004,
-57483:29014,
-57484:29036,
-57485:29071,
-57486:29179,
-57487:29060,
-57488:29077,
-57489:29096,
-57490:29100,
-57491:29143,
-57492:29113,
-57493:29118,
-57494:29138,
-57495:29129,
-57496:29140,
-57497:29134,
-57498:29152,
-57499:29164,
-57500:29159,
-57501:29173,
-57502:29180,
-57503:29177,
-57504:29183,
-57505:29197,
-57506:29200,
-57507:29211,
-57508:29224,
-57509:29229,
-57510:29228,
-57511:29232,
-57512:29234,
-57513:29243,
-57514:29244,
-57515:29247,
-57516:29248,
-57517:29254,
-57518:29259,
-57519:29272,
-57520:29300,
-57521:29310,
-57522:29314,
-57523:29313,
-57524:29319,
-57525:29330,
-57526:29334,
-57527:29346,
-57528:29351,
-57529:29369,
-57530:29362,
-57531:29379,
-57532:29382,
-57533:29380,
-57534:29390,
-57535:29394,
-57536:29410,
-57537:29408,
-57538:29409,
-57539:29433,
-57540:29431,
-57541:20495,
-57542:29463,
-57543:29450,
-57544:29468,
-57545:29462,
-57546:29469,
-57547:29492,
-57548:29487,
-57549:29481,
-57550:29477,
-57551:29502,
-57552:29518,
-57553:29519,
-57554:40664,
-57555:29527,
-57556:29546,
-57557:29544,
-57558:29552,
-57559:29560,
-57560:29557,
-57561:29563,
-57562:29562,
-57563:29640,
-57564:29619,
-57565:29646,
-57566:29627,
-57567:29632,
-57568:29669,
-57569:29678,
-57570:29662,
-57571:29858,
-57572:29701,
-57573:29807,
-57574:29733,
-57575:29688,
-57576:29746,
-57577:29754,
-57578:29781,
-57579:29759,
-57580:29791,
-57581:29785,
-57582:29761,
-57583:29788,
-57584:29801,
-57585:29808,
-57586:29795,
-57587:29802,
-57588:29814,
-57589:29822,
-57590:29835,
-57591:29854,
-57592:29863,
-57593:29898,
-57594:29903,
-57595:29908,
-57596:29681,
-57664:29920,
-57665:29923,
-57666:29927,
-57667:29929,
-57668:29934,
-57669:29938,
-57670:29936,
-57671:29937,
-57672:29944,
-57673:29943,
-57674:29956,
-57675:29955,
-57676:29957,
-57677:29964,
-57678:29966,
-57679:29965,
-57680:29973,
-57681:29971,
-57682:29982,
-57683:29990,
-57684:29996,
-57685:30012,
-57686:30020,
-57687:30029,
-57688:30026,
-57689:30025,
-57690:30043,
-57691:30022,
-57692:30042,
-57693:30057,
-57694:30052,
-57695:30055,
-57696:30059,
-57697:30061,
-57698:30072,
-57699:30070,
-57700:30086,
-57701:30087,
-57702:30068,
-57703:30090,
-57704:30089,
-57705:30082,
-57706:30100,
-57707:30106,
-57708:30109,
-57709:30117,
-57710:30115,
-57711:30146,
-57712:30131,
-57713:30147,
-57714:30133,
-57715:30141,
-57716:30136,
-57717:30140,
-57718:30129,
-57719:30157,
-57720:30154,
-57721:30162,
-57722:30169,
-57723:30179,
-57724:30174,
-57725:30206,
-57726:30207,
-57728:30204,
-57729:30209,
-57730:30192,
-57731:30202,
-57732:30194,
-57733:30195,
-57734:30219,
-57735:30221,
-57736:30217,
-57737:30239,
-57738:30247,
-57739:30240,
-57740:30241,
-57741:30242,
-57742:30244,
-57743:30260,
-57744:30256,
-57745:30267,
-57746:30279,
-57747:30280,
-57748:30278,
-57749:30300,
-57750:30296,
-57751:30305,
-57752:30306,
-57753:30312,
-57754:30313,
-57755:30314,
-57756:30311,
-57757:30316,
-57758:30320,
-57759:30322,
-57760:30326,
-57761:30328,
-57762:30332,
-57763:30336,
-57764:30339,
-57765:30344,
-57766:30347,
-57767:30350,
-57768:30358,
-57769:30355,
-57770:30361,
-57771:30362,
-57772:30384,
-57773:30388,
-57774:30392,
-57775:30393,
-57776:30394,
-57777:30402,
-57778:30413,
-57779:30422,
-57780:30418,
-57781:30430,
-57782:30433,
-57783:30437,
-57784:30439,
-57785:30442,
-57786:34351,
-57787:30459,
-57788:30472,
-57789:30471,
-57790:30468,
-57791:30505,
-57792:30500,
-57793:30494,
-57794:30501,
-57795:30502,
-57796:30491,
-57797:30519,
-57798:30520,
-57799:30535,
-57800:30554,
-57801:30568,
-57802:30571,
-57803:30555,
-57804:30565,
-57805:30591,
-57806:30590,
-57807:30585,
-57808:30606,
-57809:30603,
-57810:30609,
-57811:30624,
-57812:30622,
-57813:30640,
-57814:30646,
-57815:30649,
-57816:30655,
-57817:30652,
-57818:30653,
-57819:30651,
-57820:30663,
-57821:30669,
-57822:30679,
-57823:30682,
-57824:30684,
-57825:30691,
-57826:30702,
-57827:30716,
-57828:30732,
-57829:30738,
-57830:31014,
-57831:30752,
-57832:31018,
-57833:30789,
-57834:30862,
-57835:30836,
-57836:30854,
-57837:30844,
-57838:30874,
-57839:30860,
-57840:30883,
-57841:30901,
-57842:30890,
-57843:30895,
-57844:30929,
-57845:30918,
-57846:30923,
-57847:30932,
-57848:30910,
-57849:30908,
-57850:30917,
-57851:30922,
-57852:30956,
-57920:30951,
-57921:30938,
-57922:30973,
-57923:30964,
-57924:30983,
-57925:30994,
-57926:30993,
-57927:31001,
-57928:31020,
-57929:31019,
-57930:31040,
-57931:31072,
-57932:31063,
-57933:31071,
-57934:31066,
-57935:31061,
-57936:31059,
-57937:31098,
-57938:31103,
-57939:31114,
-57940:31133,
-57941:31143,
-57942:40779,
-57943:31146,
-57944:31150,
-57945:31155,
-57946:31161,
-57947:31162,
-57948:31177,
-57949:31189,
-57950:31207,
-57951:31212,
-57952:31201,
-57953:31203,
-57954:31240,
-57955:31245,
-57956:31256,
-57957:31257,
-57958:31264,
-57959:31263,
-57960:31104,
-57961:31281,
-57962:31291,
-57963:31294,
-57964:31287,
-57965:31299,
-57966:31319,
-57967:31305,
-57968:31329,
-57969:31330,
-57970:31337,
-57971:40861,
-57972:31344,
-57973:31353,
-57974:31357,
-57975:31368,
-57976:31383,
-57977:31381,
-57978:31384,
-57979:31382,
-57980:31401,
-57981:31432,
-57982:31408,
-57984:31414,
-57985:31429,
-57986:31428,
-57987:31423,
-57988:36995,
-57989:31431,
-57990:31434,
-57991:31437,
-57992:31439,
-57993:31445,
-57994:31443,
-57995:31449,
-57996:31450,
-57997:31453,
-57998:31457,
-57999:31458,
-58000:31462,
-58001:31469,
-58002:31472,
-58003:31490,
-58004:31503,
-58005:31498,
-58006:31494,
-58007:31539,
-58008:31512,
-58009:31513,
-58010:31518,
-58011:31541,
-58012:31528,
-58013:31542,
-58014:31568,
-58015:31610,
-58016:31492,
-58017:31565,
-58018:31499,
-58019:31564,
-58020:31557,
-58021:31605,
-58022:31589,
-58023:31604,
-58024:31591,
-58025:31600,
-58026:31601,
-58027:31596,
-58028:31598,
-58029:31645,
-58030:31640,
-58031:31647,
-58032:31629,
-58033:31644,
-58034:31642,
-58035:31627,
-58036:31634,
-58037:31631,
-58038:31581,
-58039:31641,
-58040:31691,
-58041:31681,
-58042:31692,
-58043:31695,
-58044:31668,
-58045:31686,
-58046:31709,
-58047:31721,
-58048:31761,
-58049:31764,
-58050:31718,
-58051:31717,
-58052:31840,
-58053:31744,
-58054:31751,
-58055:31763,
-58056:31731,
-58057:31735,
-58058:31767,
-58059:31757,
-58060:31734,
-58061:31779,
-58062:31783,
-58063:31786,
-58064:31775,
-58065:31799,
-58066:31787,
-58067:31805,
-58068:31820,
-58069:31811,
-58070:31828,
-58071:31823,
-58072:31808,
-58073:31824,
-58074:31832,
-58075:31839,
-58076:31844,
-58077:31830,
-58078:31845,
-58079:31852,
-58080:31861,
-58081:31875,
-58082:31888,
-58083:31908,
-58084:31917,
-58085:31906,
-58086:31915,
-58087:31905,
-58088:31912,
-58089:31923,
-58090:31922,
-58091:31921,
-58092:31918,
-58093:31929,
-58094:31933,
-58095:31936,
-58096:31941,
-58097:31938,
-58098:31960,
-58099:31954,
-58100:31964,
-58101:31970,
-58102:39739,
-58103:31983,
-58104:31986,
-58105:31988,
-58106:31990,
-58107:31994,
-58108:32006,
-58176:32002,
-58177:32028,
-58178:32021,
-58179:32010,
-58180:32069,
-58181:32075,
-58182:32046,
-58183:32050,
-58184:32063,
-58185:32053,
-58186:32070,
-58187:32115,
-58188:32086,
-58189:32078,
-58190:32114,
-58191:32104,
-58192:32110,
-58193:32079,
-58194:32099,
-58195:32147,
-58196:32137,
-58197:32091,
-58198:32143,
-58199:32125,
-58200:32155,
-58201:32186,
-58202:32174,
-58203:32163,
-58204:32181,
-58205:32199,
-58206:32189,
-58207:32171,
-58208:32317,
-58209:32162,
-58210:32175,
-58211:32220,
-58212:32184,
-58213:32159,
-58214:32176,
-58215:32216,
-58216:32221,
-58217:32228,
-58218:32222,
-58219:32251,
-58220:32242,
-58221:32225,
-58222:32261,
-58223:32266,
-58224:32291,
-58225:32289,
-58226:32274,
-58227:32305,
-58228:32287,
-58229:32265,
-58230:32267,
-58231:32290,
-58232:32326,
-58233:32358,
-58234:32315,
-58235:32309,
-58236:32313,
-58237:32323,
-58238:32311,
-58240:32306,
-58241:32314,
-58242:32359,
-58243:32349,
-58244:32342,
-58245:32350,
-58246:32345,
-58247:32346,
-58248:32377,
-58249:32362,
-58250:32361,
-58251:32380,
-58252:32379,
-58253:32387,
-58254:32213,
-58255:32381,
-58256:36782,
-58257:32383,
-58258:32392,
-58259:32393,
-58260:32396,
-58261:32402,
-58262:32400,
-58263:32403,
-58264:32404,
-58265:32406,
-58266:32398,
-58267:32411,
-58268:32412,
-58269:32568,
-58270:32570,
-58271:32581,
-58272:32588,
-58273:32589,
-58274:32590,
-58275:32592,
-58276:32593,
-58277:32597,
-58278:32596,
-58279:32600,
-58280:32607,
-58281:32608,
-58282:32616,
-58283:32617,
-58284:32615,
-58285:32632,
-58286:32642,
-58287:32646,
-58288:32643,
-58289:32648,
-58290:32647,
-58291:32652,
-58292:32660,
-58293:32670,
-58294:32669,
-58295:32666,
-58296:32675,
-58297:32687,
-58298:32690,
-58299:32697,
-58300:32686,
-58301:32694,
-58302:32696,
-58303:35697,
-58304:32709,
-58305:32710,
-58306:32714,
-58307:32725,
-58308:32724,
-58309:32737,
-58310:32742,
-58311:32745,
-58312:32755,
-58313:32761,
-58314:39132,
-58315:32774,
-58316:32772,
-58317:32779,
-58318:32786,
-58319:32792,
-58320:32793,
-58321:32796,
-58322:32801,
-58323:32808,
-58324:32831,
-58325:32827,
-58326:32842,
-58327:32838,
-58328:32850,
-58329:32856,
-58330:32858,
-58331:32863,
-58332:32866,
-58333:32872,
-58334:32883,
-58335:32882,
-58336:32880,
-58337:32886,
-58338:32889,
-58339:32893,
-58340:32895,
-58341:32900,
-58342:32902,
-58343:32901,
-58344:32923,
-58345:32915,
-58346:32922,
-58347:32941,
-58348:20880,
-58349:32940,
-58350:32987,
-58351:32997,
-58352:32985,
-58353:32989,
-58354:32964,
-58355:32986,
-58356:32982,
-58357:33033,
-58358:33007,
-58359:33009,
-58360:33051,
-58361:33065,
-58362:33059,
-58363:33071,
-58364:33099,
-58432:38539,
-58433:33094,
-58434:33086,
-58435:33107,
-58436:33105,
-58437:33020,
-58438:33137,
-58439:33134,
-58440:33125,
-58441:33126,
-58442:33140,
-58443:33155,
-58444:33160,
-58445:33162,
-58446:33152,
-58447:33154,
-58448:33184,
-58449:33173,
-58450:33188,
-58451:33187,
-58452:33119,
-58453:33171,
-58454:33193,
-58455:33200,
-58456:33205,
-58457:33214,
-58458:33208,
-58459:33213,
-58460:33216,
-58461:33218,
-58462:33210,
-58463:33225,
-58464:33229,
-58465:33233,
-58466:33241,
-58467:33240,
-58468:33224,
-58469:33242,
-58470:33247,
-58471:33248,
-58472:33255,
-58473:33274,
-58474:33275,
-58475:33278,
-58476:33281,
-58477:33282,
-58478:33285,
-58479:33287,
-58480:33290,
-58481:33293,
-58482:33296,
-58483:33302,
-58484:33321,
-58485:33323,
-58486:33336,
-58487:33331,
-58488:33344,
-58489:33369,
-58490:33368,
-58491:33373,
-58492:33370,
-58493:33375,
-58494:33380,
-58496:33378,
-58497:33384,
-58498:33386,
-58499:33387,
-58500:33326,
-58501:33393,
-58502:33399,
-58503:33400,
-58504:33406,
-58505:33421,
-58506:33426,
-58507:33451,
-58508:33439,
-58509:33467,
-58510:33452,
-58511:33505,
-58512:33507,
-58513:33503,
-58514:33490,
-58515:33524,
-58516:33523,
-58517:33530,
-58518:33683,
-58519:33539,
-58520:33531,
-58521:33529,
-58522:33502,
-58523:33542,
-58524:33500,
-58525:33545,
-58526:33497,
-58527:33589,
-58528:33588,
-58529:33558,
-58530:33586,
-58531:33585,
-58532:33600,
-58533:33593,
-58534:33616,
-58535:33605,
-58536:33583,
-58537:33579,
-58538:33559,
-58539:33560,
-58540:33669,
-58541:33690,
-58542:33706,
-58543:33695,
-58544:33698,
-58545:33686,
-58546:33571,
-58547:33678,
-58548:33671,
-58549:33674,
-58550:33660,
-58551:33717,
-58552:33651,
-58553:33653,
-58554:33696,
-58555:33673,
-58556:33704,
-58557:33780,
-58558:33811,
-58559:33771,
-58560:33742,
-58561:33789,
-58562:33795,
-58563:33752,
-58564:33803,
-58565:33729,
-58566:33783,
-58567:33799,
-58568:33760,
-58569:33778,
-58570:33805,
-58571:33826,
-58572:33824,
-58573:33725,
-58574:33848,
-58575:34054,
-58576:33787,
-58577:33901,
-58578:33834,
-58579:33852,
-58580:34138,
-58581:33924,
-58582:33911,
-58583:33899,
-58584:33965,
-58585:33902,
-58586:33922,
-58587:33897,
-58588:33862,
-58589:33836,
-58590:33903,
-58591:33913,
-58592:33845,
-58593:33994,
-58594:33890,
-58595:33977,
-58596:33983,
-58597:33951,
-58598:34009,
-58599:33997,
-58600:33979,
-58601:34010,
-58602:34000,
-58603:33985,
-58604:33990,
-58605:34006,
-58606:33953,
-58607:34081,
-58608:34047,
-58609:34036,
-58610:34071,
-58611:34072,
-58612:34092,
-58613:34079,
-58614:34069,
-58615:34068,
-58616:34044,
-58617:34112,
-58618:34147,
-58619:34136,
-58620:34120,
-58688:34113,
-58689:34306,
-58690:34123,
-58691:34133,
-58692:34176,
-58693:34212,
-58694:34184,
-58695:34193,
-58696:34186,
-58697:34216,
-58698:34157,
-58699:34196,
-58700:34203,
-58701:34282,
-58702:34183,
-58703:34204,
-58704:34167,
-58705:34174,
-58706:34192,
-58707:34249,
-58708:34234,
-58709:34255,
-58710:34233,
-58711:34256,
-58712:34261,
-58713:34269,
-58714:34277,
-58715:34268,
-58716:34297,
-58717:34314,
-58718:34323,
-58719:34315,
-58720:34302,
-58721:34298,
-58722:34310,
-58723:34338,
-58724:34330,
-58725:34352,
-58726:34367,
-58727:34381,
-58728:20053,
-58729:34388,
-58730:34399,
-58731:34407,
-58732:34417,
-58733:34451,
-58734:34467,
-58735:34473,
-58736:34474,
-58737:34443,
-58738:34444,
-58739:34486,
-58740:34479,
-58741:34500,
-58742:34502,
-58743:34480,
-58744:34505,
-58745:34851,
-58746:34475,
-58747:34516,
-58748:34526,
-58749:34537,
-58750:34540,
-58752:34527,
-58753:34523,
-58754:34543,
-58755:34578,
-58756:34566,
-58757:34568,
-58758:34560,
-58759:34563,
-58760:34555,
-58761:34577,
-58762:34569,
-58763:34573,
-58764:34553,
-58765:34570,
-58766:34612,
-58767:34623,
-58768:34615,
-58769:34619,
-58770:34597,
-58771:34601,
-58772:34586,
-58773:34656,
-58774:34655,
-58775:34680,
-58776:34636,
-58777:34638,
-58778:34676,
-58779:34647,
-58780:34664,
-58781:34670,
-58782:34649,
-58783:34643,
-58784:34659,
-58785:34666,
-58786:34821,
-58787:34722,
-58788:34719,
-58789:34690,
-58790:34735,
-58791:34763,
-58792:34749,
-58793:34752,
-58794:34768,
-58795:38614,
-58796:34731,
-58797:34756,
-58798:34739,
-58799:34759,
-58800:34758,
-58801:34747,
-58802:34799,
-58803:34802,
-58804:34784,
-58805:34831,
-58806:34829,
-58807:34814,
-58808:34806,
-58809:34807,
-58810:34830,
-58811:34770,
-58812:34833,
-58813:34838,
-58814:34837,
-58815:34850,
-58816:34849,
-58817:34865,
-58818:34870,
-58819:34873,
-58820:34855,
-58821:34875,
-58822:34884,
-58823:34882,
-58824:34898,
-58825:34905,
-58826:34910,
-58827:34914,
-58828:34923,
-58829:34945,
-58830:34942,
-58831:34974,
-58832:34933,
-58833:34941,
-58834:34997,
-58835:34930,
-58836:34946,
-58837:34967,
-58838:34962,
-58839:34990,
-58840:34969,
-58841:34978,
-58842:34957,
-58843:34980,
-58844:34992,
-58845:35007,
-58846:34993,
-58847:35011,
-58848:35012,
-58849:35028,
-58850:35032,
-58851:35033,
-58852:35037,
-58853:35065,
-58854:35074,
-58855:35068,
-58856:35060,
-58857:35048,
-58858:35058,
-58859:35076,
-58860:35084,
-58861:35082,
-58862:35091,
-58863:35139,
-58864:35102,
-58865:35109,
-58866:35114,
-58867:35115,
-58868:35137,
-58869:35140,
-58870:35131,
-58871:35126,
-58872:35128,
-58873:35148,
-58874:35101,
-58875:35168,
-58876:35166,
-58944:35174,
-58945:35172,
-58946:35181,
-58947:35178,
-58948:35183,
-58949:35188,
-58950:35191,
-58951:35198,
-58952:35203,
-58953:35208,
-58954:35210,
-58955:35219,
-58956:35224,
-58957:35233,
-58958:35241,
-58959:35238,
-58960:35244,
-58961:35247,
-58962:35250,
-58963:35258,
-58964:35261,
-58965:35263,
-58966:35264,
-58967:35290,
-58968:35292,
-58969:35293,
-58970:35303,
-58971:35316,
-58972:35320,
-58973:35331,
-58974:35350,
-58975:35344,
-58976:35340,
-58977:35355,
-58978:35357,
-58979:35365,
-58980:35382,
-58981:35393,
-58982:35419,
-58983:35410,
-58984:35398,
-58985:35400,
-58986:35452,
-58987:35437,
-58988:35436,
-58989:35426,
-58990:35461,
-58991:35458,
-58992:35460,
-58993:35496,
-58994:35489,
-58995:35473,
-58996:35493,
-58997:35494,
-58998:35482,
-58999:35491,
-59000:35524,
-59001:35533,
-59002:35522,
-59003:35546,
-59004:35563,
-59005:35571,
-59006:35559,
-59008:35556,
-59009:35569,
-59010:35604,
-59011:35552,
-59012:35554,
-59013:35575,
-59014:35550,
-59015:35547,
-59016:35596,
-59017:35591,
-59018:35610,
-59019:35553,
-59020:35606,
-59021:35600,
-59022:35607,
-59023:35616,
-59024:35635,
-59025:38827,
-59026:35622,
-59027:35627,
-59028:35646,
-59029:35624,
-59030:35649,
-59031:35660,
-59032:35663,
-59033:35662,
-59034:35657,
-59035:35670,
-59036:35675,
-59037:35674,
-59038:35691,
-59039:35679,
-59040:35692,
-59041:35695,
-59042:35700,
-59043:35709,
-59044:35712,
-59045:35724,
-59046:35726,
-59047:35730,
-59048:35731,
-59049:35734,
-59050:35737,
-59051:35738,
-59052:35898,
-59053:35905,
-59054:35903,
-59055:35912,
-59056:35916,
-59057:35918,
-59058:35920,
-59059:35925,
-59060:35938,
-59061:35948,
-59062:35960,
-59063:35962,
-59064:35970,
-59065:35977,
-59066:35973,
-59067:35978,
-59068:35981,
-59069:35982,
-59070:35988,
-59071:35964,
-59072:35992,
-59073:25117,
-59074:36013,
-59075:36010,
-59076:36029,
-59077:36018,
-59078:36019,
-59079:36014,
-59080:36022,
-59081:36040,
-59082:36033,
-59083:36068,
-59084:36067,
-59085:36058,
-59086:36093,
-59087:36090,
-59088:36091,
-59089:36100,
-59090:36101,
-59091:36106,
-59092:36103,
-59093:36111,
-59094:36109,
-59095:36112,
-59096:40782,
-59097:36115,
-59098:36045,
-59099:36116,
-59100:36118,
-59101:36199,
-59102:36205,
-59103:36209,
-59104:36211,
-59105:36225,
-59106:36249,
-59107:36290,
-59108:36286,
-59109:36282,
-59110:36303,
-59111:36314,
-59112:36310,
-59113:36300,
-59114:36315,
-59115:36299,
-59116:36330,
-59117:36331,
-59118:36319,
-59119:36323,
-59120:36348,
-59121:36360,
-59122:36361,
-59123:36351,
-59124:36381,
-59125:36382,
-59126:36368,
-59127:36383,
-59128:36418,
-59129:36405,
-59130:36400,
-59131:36404,
-59132:36426,
-59200:36423,
-59201:36425,
-59202:36428,
-59203:36432,
-59204:36424,
-59205:36441,
-59206:36452,
-59207:36448,
-59208:36394,
-59209:36451,
-59210:36437,
-59211:36470,
-59212:36466,
-59213:36476,
-59214:36481,
-59215:36487,
-59216:36485,
-59217:36484,
-59218:36491,
-59219:36490,
-59220:36499,
-59221:36497,
-59222:36500,
-59223:36505,
-59224:36522,
-59225:36513,
-59226:36524,
-59227:36528,
-59228:36550,
-59229:36529,
-59230:36542,
-59231:36549,
-59232:36552,
-59233:36555,
-59234:36571,
-59235:36579,
-59236:36604,
-59237:36603,
-59238:36587,
-59239:36606,
-59240:36618,
-59241:36613,
-59242:36629,
-59243:36626,
-59244:36633,
-59245:36627,
-59246:36636,
-59247:36639,
-59248:36635,
-59249:36620,
-59250:36646,
-59251:36659,
-59252:36667,
-59253:36665,
-59254:36677,
-59255:36674,
-59256:36670,
-59257:36684,
-59258:36681,
-59259:36678,
-59260:36686,
-59261:36695,
-59262:36700,
-59264:36706,
-59265:36707,
-59266:36708,
-59267:36764,
-59268:36767,
-59269:36771,
-59270:36781,
-59271:36783,
-59272:36791,
-59273:36826,
-59274:36837,
-59275:36834,
-59276:36842,
-59277:36847,
-59278:36999,
-59279:36852,
-59280:36869,
-59281:36857,
-59282:36858,
-59283:36881,
-59284:36885,
-59285:36897,
-59286:36877,
-59287:36894,
-59288:36886,
-59289:36875,
-59290:36903,
-59291:36918,
-59292:36917,
-59293:36921,
-59294:36856,
-59295:36943,
-59296:36944,
-59297:36945,
-59298:36946,
-59299:36878,
-59300:36937,
-59301:36926,
-59302:36950,
-59303:36952,
-59304:36958,
-59305:36968,
-59306:36975,
-59307:36982,
-59308:38568,
-59309:36978,
-59310:36994,
-59311:36989,
-59312:36993,
-59313:36992,
-59314:37002,
-59315:37001,
-59316:37007,
-59317:37032,
-59318:37039,
-59319:37041,
-59320:37045,
-59321:37090,
-59322:37092,
-59323:25160,
-59324:37083,
-59325:37122,
-59326:37138,
-59327:37145,
-59328:37170,
-59329:37168,
-59330:37194,
-59331:37206,
-59332:37208,
-59333:37219,
-59334:37221,
-59335:37225,
-59336:37235,
-59337:37234,
-59338:37259,
-59339:37257,
-59340:37250,
-59341:37282,
-59342:37291,
-59343:37295,
-59344:37290,
-59345:37301,
-59346:37300,
-59347:37306,
-59348:37312,
-59349:37313,
-59350:37321,
-59351:37323,
-59352:37328,
-59353:37334,
-59354:37343,
-59355:37345,
-59356:37339,
-59357:37372,
-59358:37365,
-59359:37366,
-59360:37406,
-59361:37375,
-59362:37396,
-59363:37420,
-59364:37397,
-59365:37393,
-59366:37470,
-59367:37463,
-59368:37445,
-59369:37449,
-59370:37476,
-59371:37448,
-59372:37525,
-59373:37439,
-59374:37451,
-59375:37456,
-59376:37532,
-59377:37526,
-59378:37523,
-59379:37531,
-59380:37466,
-59381:37583,
-59382:37561,
-59383:37559,
-59384:37609,
-59385:37647,
-59386:37626,
-59387:37700,
-59388:37678,
-59456:37657,
-59457:37666,
-59458:37658,
-59459:37667,
-59460:37690,
-59461:37685,
-59462:37691,
-59463:37724,
-59464:37728,
-59465:37756,
-59466:37742,
-59467:37718,
-59468:37808,
-59469:37804,
-59470:37805,
-59471:37780,
-59472:37817,
-59473:37846,
-59474:37847,
-59475:37864,
-59476:37861,
-59477:37848,
-59478:37827,
-59479:37853,
-59480:37840,
-59481:37832,
-59482:37860,
-59483:37914,
-59484:37908,
-59485:37907,
-59486:37891,
-59487:37895,
-59488:37904,
-59489:37942,
-59490:37931,
-59491:37941,
-59492:37921,
-59493:37946,
-59494:37953,
-59495:37970,
-59496:37956,
-59497:37979,
-59498:37984,
-59499:37986,
-59500:37982,
-59501:37994,
-59502:37417,
-59503:38000,
-59504:38005,
-59505:38007,
-59506:38013,
-59507:37978,
-59508:38012,
-59509:38014,
-59510:38017,
-59511:38015,
-59512:38274,
-59513:38279,
-59514:38282,
-59515:38292,
-59516:38294,
-59517:38296,
-59518:38297,
-59520:38304,
-59521:38312,
-59522:38311,
-59523:38317,
-59524:38332,
-59525:38331,
-59526:38329,
-59527:38334,
-59528:38346,
-59529:28662,
-59530:38339,
-59531:38349,
-59532:38348,
-59533:38357,
-59534:38356,
-59535:38358,
-59536:38364,
-59537:38369,
-59538:38373,
-59539:38370,
-59540:38433,
-59541:38440,
-59542:38446,
-59543:38447,
-59544:38466,
-59545:38476,
-59546:38479,
-59547:38475,
-59548:38519,
-59549:38492,
-59550:38494,
-59551:38493,
-59552:38495,
-59553:38502,
-59554:38514,
-59555:38508,
-59556:38541,
-59557:38552,
-59558:38549,
-59559:38551,
-59560:38570,
-59561:38567,
-59562:38577,
-59563:38578,
-59564:38576,
-59565:38580,
-59566:38582,
-59567:38584,
-59568:38585,
-59569:38606,
-59570:38603,
-59571:38601,
-59572:38605,
-59573:35149,
-59574:38620,
-59575:38669,
-59576:38613,
-59577:38649,
-59578:38660,
-59579:38662,
-59580:38664,
-59581:38675,
-59582:38670,
-59583:38673,
-59584:38671,
-59585:38678,
-59586:38681,
-59587:38692,
-59588:38698,
-59589:38704,
-59590:38713,
-59591:38717,
-59592:38718,
-59593:38724,
-59594:38726,
-59595:38728,
-59596:38722,
-59597:38729,
-59598:38748,
-59599:38752,
-59600:38756,
-59601:38758,
-59602:38760,
-59603:21202,
-59604:38763,
-59605:38769,
-59606:38777,
-59607:38789,
-59608:38780,
-59609:38785,
-59610:38778,
-59611:38790,
-59612:38795,
-59613:38799,
-59614:38800,
-59615:38812,
-59616:38824,
-59617:38822,
-59618:38819,
-59619:38835,
-59620:38836,
-59621:38851,
-59622:38854,
-59623:38856,
-59624:38859,
-59625:38876,
-59626:38893,
-59627:40783,
-59628:38898,
-59629:31455,
-59630:38902,
-59631:38901,
-59632:38927,
-59633:38924,
-59634:38968,
-59635:38948,
-59636:38945,
-59637:38967,
-59638:38973,
-59639:38982,
-59640:38991,
-59641:38987,
-59642:39019,
-59643:39023,
-59644:39024,
-59712:39025,
-59713:39028,
-59714:39027,
-59715:39082,
-59716:39087,
-59717:39089,
-59718:39094,
-59719:39108,
-59720:39107,
-59721:39110,
-59722:39145,
-59723:39147,
-59724:39171,
-59725:39177,
-59726:39186,
-59727:39188,
-59728:39192,
-59729:39201,
-59730:39197,
-59731:39198,
-59732:39204,
-59733:39200,
-59734:39212,
-59735:39214,
-59736:39229,
-59737:39230,
-59738:39234,
-59739:39241,
-59740:39237,
-59741:39248,
-59742:39243,
-59743:39249,
-59744:39250,
-59745:39244,
-59746:39253,
-59747:39319,
-59748:39320,
-59749:39333,
-59750:39341,
-59751:39342,
-59752:39356,
-59753:39391,
-59754:39387,
-59755:39389,
-59756:39384,
-59757:39377,
-59758:39405,
-59759:39406,
-59760:39409,
-59761:39410,
-59762:39419,
-59763:39416,
-59764:39425,
-59765:39439,
-59766:39429,
-59767:39394,
-59768:39449,
-59769:39467,
-59770:39479,
-59771:39493,
-59772:39490,
-59773:39488,
-59774:39491,
-59776:39486,
-59777:39509,
-59778:39501,
-59779:39515,
-59780:39511,
-59781:39519,
-59782:39522,
-59783:39525,
-59784:39524,
-59785:39529,
-59786:39531,
-59787:39530,
-59788:39597,
-59789:39600,
-59790:39612,
-59791:39616,
-59792:39631,
-59793:39633,
-59794:39635,
-59795:39636,
-59796:39646,
-59797:39647,
-59798:39650,
-59799:39651,
-59800:39654,
-59801:39663,
-59802:39659,
-59803:39662,
-59804:39668,
-59805:39665,
-59806:39671,
-59807:39675,
-59808:39686,
-59809:39704,
-59810:39706,
-59811:39711,
-59812:39714,
-59813:39715,
-59814:39717,
-59815:39719,
-59816:39720,
-59817:39721,
-59818:39722,
-59819:39726,
-59820:39727,
-59821:39730,
-59822:39748,
-59823:39747,
-59824:39759,
-59825:39757,
-59826:39758,
-59827:39761,
-59828:39768,
-59829:39796,
-59830:39827,
-59831:39811,
-59832:39825,
-59833:39830,
-59834:39831,
-59835:39839,
-59836:39840,
-59837:39848,
-59838:39860,
-59839:39872,
-59840:39882,
-59841:39865,
-59842:39878,
-59843:39887,
-59844:39889,
-59845:39890,
-59846:39907,
-59847:39906,
-59848:39908,
-59849:39892,
-59850:39905,
-59851:39994,
-59852:39922,
-59853:39921,
-59854:39920,
-59855:39957,
-59856:39956,
-59857:39945,
-59858:39955,
-59859:39948,
-59860:39942,
-59861:39944,
-59862:39954,
-59863:39946,
-59864:39940,
-59865:39982,
-59866:39963,
-59867:39973,
-59868:39972,
-59869:39969,
-59870:39984,
-59871:40007,
-59872:39986,
-59873:40006,
-59874:39998,
-59875:40026,
-59876:40032,
-59877:40039,
-59878:40054,
-59879:40056,
-59880:40167,
-59881:40172,
-59882:40176,
-59883:40201,
-59884:40200,
-59885:40171,
-59886:40195,
-59887:40198,
-59888:40234,
-59889:40230,
-59890:40367,
-59891:40227,
-59892:40223,
-59893:40260,
-59894:40213,
-59895:40210,
-59896:40257,
-59897:40255,
-59898:40254,
-59899:40262,
-59900:40264,
-59968:40285,
-59969:40286,
-59970:40292,
-59971:40273,
-59972:40272,
-59973:40281,
-59974:40306,
-59975:40329,
-59976:40327,
-59977:40363,
-59978:40303,
-59979:40314,
-59980:40346,
-59981:40356,
-59982:40361,
-59983:40370,
-59984:40388,
-59985:40385,
-59986:40379,
-59987:40376,
-59988:40378,
-59989:40390,
-59990:40399,
-59991:40386,
-59992:40409,
-59993:40403,
-59994:40440,
-59995:40422,
-59996:40429,
-59997:40431,
-59998:40445,
-59999:40474,
-60000:40475,
-60001:40478,
-60002:40565,
-60003:40569,
-60004:40573,
-60005:40577,
-60006:40584,
-60007:40587,
-60008:40588,
-60009:40594,
-60010:40597,
-60011:40593,
-60012:40605,
-60013:40613,
-60014:40617,
-60015:40632,
-60016:40618,
-60017:40621,
-60018:38753,
-60019:40652,
-60020:40654,
-60021:40655,
-60022:40656,
-60023:40660,
-60024:40668,
-60025:40670,
-60026:40669,
-60027:40672,
-60028:40677,
-60029:40680,
-60030:40687,
-60032:40692,
-60033:40694,
-60034:40695,
-60035:40697,
-60036:40699,
-60037:40700,
-60038:40701,
-60039:40711,
-60040:40712,
-60041:30391,
-60042:40725,
-60043:40737,
-60044:40748,
-60045:40766,
-60046:40778,
-60047:40786,
-60048:40788,
-60049:40803,
-60050:40799,
-60051:40800,
-60052:40801,
-60053:40806,
-60054:40807,
-60055:40812,
-60056:40810,
-60057:40823,
-60058:40818,
-60059:40822,
-60060:40853,
-60061:40860,
-60062:40864,
-60063:22575,
-60064:27079,
-60065:36953,
-60066:29796,
-60067:20956,
-60068:29081,
-60736:32394,
-60737:35100,
-60738:37704,
-60739:37512,
-60740:34012,
-60741:20425,
-60742:28859,
-60743:26161,
-60744:26824,
-60745:37625,
-60746:26363,
-60747:24389,
-60748:20008,
-60749:20193,
-60750:20220,
-60751:20224,
-60752:20227,
-60753:20281,
-60754:20310,
-60755:20370,
-60756:20362,
-60757:20378,
-60758:20372,
-60759:20429,
-60760:20544,
-60761:20514,
-60762:20479,
-60763:20510,
-60764:20550,
-60765:20592,
-60766:20546,
-60767:20628,
-60768:20724,
-60769:20696,
-60770:20810,
-60771:20836,
-60772:20893,
-60773:20926,
-60774:20972,
-60775:21013,
-60776:21148,
-60777:21158,
-60778:21184,
-60779:21211,
-60780:21248,
-60781:21255,
-60782:21284,
-60783:21362,
-60784:21395,
-60785:21426,
-60786:21469,
-60787:64014,
-60788:21660,
-60789:21642,
-60790:21673,
-60791:21759,
-60792:21894,
-60793:22361,
-60794:22373,
-60795:22444,
-60796:22472,
-60797:22471,
-60798:64015,
-60800:64016,
-60801:22686,
-60802:22706,
-60803:22795,
-60804:22867,
-60805:22875,
-60806:22877,
-60807:22883,
-60808:22948,
-60809:22970,
-60810:23382,
-60811:23488,
-60812:29999,
-60813:23512,
-60814:23532,
-60815:23582,
-60816:23718,
-60817:23738,
-60818:23797,
-60819:23847,
-60820:23891,
-60821:64017,
-60822:23874,
-60823:23917,
-60824:23992,
-60825:23993,
-60826:24016,
-60827:24353,
-60828:24372,
-60829:24423,
-60830:24503,
-60831:24542,
-60832:24669,
-60833:24709,
-60834:24714,
-60835:24798,
-60836:24789,
-60837:24864,
-60838:24818,
-60839:24849,
-60840:24887,
-60841:24880,
-60842:24984,
-60843:25107,
-60844:25254,
-60845:25589,
-60846:25696,
-60847:25757,
-60848:25806,
-60849:25934,
-60850:26112,
-60851:26133,
-60852:26171,
-60853:26121,
-60854:26158,
-60855:26142,
-60856:26148,
-60857:26213,
-60858:26199,
-60859:26201,
-60860:64018,
-60861:26227,
-60862:26265,
-60863:26272,
-60864:26290,
-60865:26303,
-60866:26362,
-60867:26382,
-60868:63785,
-60869:26470,
-60870:26555,
-60871:26706,
-60872:26560,
-60873:26625,
-60874:26692,
-60875:26831,
-60876:64019,
-60877:26984,
-60878:64020,
-60879:27032,
-60880:27106,
-60881:27184,
-60882:27243,
-60883:27206,
-60884:27251,
-60885:27262,
-60886:27362,
-60887:27364,
-60888:27606,
-60889:27711,
-60890:27740,
-60891:27782,
-60892:27759,
-60893:27866,
-60894:27908,
-60895:28039,
-60896:28015,
-60897:28054,
-60898:28076,
-60899:28111,
-60900:28152,
-60901:28146,
-60902:28156,
-60903:28217,
-60904:28252,
-60905:28199,
-60906:28220,
-60907:28351,
-60908:28552,
-60909:28597,
-60910:28661,
-60911:28677,
-60912:28679,
-60913:28712,
-60914:28805,
-60915:28843,
-60916:28943,
-60917:28932,
-60918:29020,
-60919:28998,
-60920:28999,
-60921:64021,
-60922:29121,
-60923:29182,
-60924:29361,
-60992:29374,
-60993:29476,
-60994:64022,
-60995:29559,
-60996:29629,
-60997:29641,
-60998:29654,
-60999:29667,
-61000:29650,
-61001:29703,
-61002:29685,
-61003:29734,
-61004:29738,
-61005:29737,
-61006:29742,
-61007:29794,
-61008:29833,
-61009:29855,
-61010:29953,
-61011:30063,
-61012:30338,
-61013:30364,
-61014:30366,
-61015:30363,
-61016:30374,
-61017:64023,
-61018:30534,
-61019:21167,
-61020:30753,
-61021:30798,
-61022:30820,
-61023:30842,
-61024:31024,
-61025:64024,
-61026:64025,
-61027:64026,
-61028:31124,
-61029:64027,
-61030:31131,
-61031:31441,
-61032:31463,
-61033:64028,
-61034:31467,
-61035:31646,
-61036:64029,
-61037:32072,
-61038:32092,
-61039:32183,
-61040:32160,
-61041:32214,
-61042:32338,
-61043:32583,
-61044:32673,
-61045:64030,
-61046:33537,
-61047:33634,
-61048:33663,
-61049:33735,
-61050:33782,
-61051:33864,
-61052:33972,
-61053:34131,
-61054:34137,
-61056:34155,
-61057:64031,
-61058:34224,
-61059:64032,
-61060:64033,
-61061:34823,
-61062:35061,
-61063:35346,
-61064:35383,
-61065:35449,
-61066:35495,
-61067:35518,
-61068:35551,
-61069:64034,
-61070:35574,
-61071:35667,
-61072:35711,
-61073:36080,
-61074:36084,
-61075:36114,
-61076:36214,
-61077:64035,
-61078:36559,
-61079:64036,
-61080:64037,
-61081:36967,
-61082:37086,
-61083:64038,
-61084:37141,
-61085:37159,
-61086:37338,
-61087:37335,
-61088:37342,
-61089:37357,
-61090:37358,
-61091:37348,
-61092:37349,
-61093:37382,
-61094:37392,
-61095:37386,
-61096:37434,
-61097:37440,
-61098:37436,
-61099:37454,
-61100:37465,
-61101:37457,
-61102:37433,
-61103:37479,
-61104:37543,
-61105:37495,
-61106:37496,
-61107:37607,
-61108:37591,
-61109:37593,
-61110:37584,
-61111:64039,
-61112:37589,
-61113:37600,
-61114:37587,
-61115:37669,
-61116:37665,
-61117:37627,
-61118:64040,
-61119:37662,
-61120:37631,
-61121:37661,
-61122:37634,
-61123:37744,
-61124:37719,
-61125:37796,
-61126:37830,
-61127:37854,
-61128:37880,
-61129:37937,
-61130:37957,
-61131:37960,
-61132:38290,
-61133:63964,
-61134:64041,
-61135:38557,
-61136:38575,
-61137:38707,
-61138:38715,
-61139:38723,
-61140:38733,
-61141:38735,
-61142:38737,
-61143:38741,
-61144:38999,
-61145:39013,
-61146:64042,
-61147:64043,
-61148:39207,
-61149:64044,
-61150:39326,
-61151:39502,
-61152:39641,
-61153:39644,
-61154:39797,
-61155:39794,
-61156:39823,
-61157:39857,
-61158:39867,
-61159:39936,
-61160:40304,
-61161:40299,
-61162:64045,
-61163:40473,
-61164:40657,
-61167:8560,
-61168:8561,
-61169:8562,
-61170:8563,
-61171:8564,
-61172:8565,
-61173:8566,
-61174:8567,
-61175:8568,
-61176:8569,
-61177:65506,
-61178:65508,
-61179:65287,
-61180:65282,
-61504:57344,
-61505:57345,
-61506:57346,
-61507:57347,
-61508:57348,
-61509:57349,
-61510:57350,
-61511:57351,
-61512:57352,
-61513:57353,
-61514:57354,
-61515:57355,
-61516:57356,
-61517:57357,
-61518:57358,
-61519:57359,
-61520:57360,
-61521:57361,
-61522:57362,
-61523:57363,
-61524:57364,
-61525:57365,
-61526:57366,
-61527:57367,
-61528:57368,
-61529:57369,
-61530:57370,
-61531:57371,
-61532:57372,
-61533:57373,
-61534:57374,
-61535:57375,
-61536:57376,
-61537:57377,
-61538:57378,
-61539:57379,
-61540:57380,
-61541:57381,
-61542:57382,
-61543:57383,
-61544:57384,
-61545:57385,
-61546:57386,
-61547:57387,
-61548:57388,
-61549:57389,
-61550:57390,
-61551:57391,
-61552:57392,
-61553:57393,
-61554:57394,
-61555:57395,
-61556:57396,
-61557:57397,
-61558:57398,
-61559:57399,
-61560:57400,
-61561:57401,
-61562:57402,
-61563:57403,
-61564:57404,
-61565:57405,
-61566:57406,
-61568:57407,
-61569:57408,
-61570:57409,
-61571:57410,
-61572:57411,
-61573:57412,
-61574:57413,
-61575:57414,
-61576:57415,
-61577:57416,
-61578:57417,
-61579:57418,
-61580:57419,
-61581:57420,
-61582:57421,
-61583:57422,
-61584:57423,
-61585:57424,
-61586:57425,
-61587:57426,
-61588:57427,
-61589:57428,
-61590:57429,
-61591:57430,
-61592:57431,
-61593:57432,
-61594:57433,
-61595:57434,
-61596:57435,
-61597:57436,
-61598:57437,
-61599:57438,
-61600:57439,
-61601:57440,
-61602:57441,
-61603:57442,
-61604:57443,
-61605:57444,
-61606:57445,
-61607:57446,
-61608:57447,
-61609:57448,
-61610:57449,
-61611:57450,
-61612:57451,
-61613:57452,
-61614:57453,
-61615:57454,
-61616:57455,
-61617:57456,
-61618:57457,
-61619:57458,
-61620:57459,
-61621:57460,
-61622:57461,
-61623:57462,
-61624:57463,
-61625:57464,
-61626:57465,
-61627:57466,
-61628:57467,
-61629:57468,
-61630:57469,
-61631:57470,
-61632:57471,
-61633:57472,
-61634:57473,
-61635:57474,
-61636:57475,
-61637:57476,
-61638:57477,
-61639:57478,
-61640:57479,
-61641:57480,
-61642:57481,
-61643:57482,
-61644:57483,
-61645:57484,
-61646:57485,
-61647:57486,
-61648:57487,
-61649:57488,
-61650:57489,
-61651:57490,
-61652:57491,
-61653:57492,
-61654:57493,
-61655:57494,
-61656:57495,
-61657:57496,
-61658:57497,
-61659:57498,
-61660:57499,
-61661:57500,
-61662:57501,
-61663:57502,
-61664:57503,
-61665:57504,
-61666:57505,
-61667:57506,
-61668:57507,
-61669:57508,
-61670:57509,
-61671:57510,
-61672:57511,
-61673:57512,
-61674:57513,
-61675:57514,
-61676:57515,
-61677:57516,
-61678:57517,
-61679:57518,
-61680:57519,
-61681:57520,
-61682:57521,
-61683:57522,
-61684:57523,
-61685:57524,
-61686:57525,
-61687:57526,
-61688:57527,
-61689:57528,
-61690:57529,
-61691:57530,
-61692:57531,
-61760:57532,
-61761:57533,
-61762:57534,
-61763:57535,
-61764:57536,
-61765:57537,
-61766:57538,
-61767:57539,
-61768:57540,
-61769:57541,
-61770:57542,
-61771:57543,
-61772:57544,
-61773:57545,
-61774:57546,
-61775:57547,
-61776:57548,
-61777:57549,
-61778:57550,
-61779:57551,
-61780:57552,
-61781:57553,
-61782:57554,
-61783:57555,
-61784:57556,
-61785:57557,
-61786:57558,
-61787:57559,
-61788:57560,
-61789:57561,
-61790:57562,
-61791:57563,
-61792:57564,
-61793:57565,
-61794:57566,
-61795:57567,
-61796:57568,
-61797:57569,
-61798:57570,
-61799:57571,
-61800:57572,
-61801:57573,
-61802:57574,
-61803:57575,
-61804:57576,
-61805:57577,
-61806:57578,
-61807:57579,
-61808:57580,
-61809:57581,
-61810:57582,
-61811:57583,
-61812:57584,
-61813:57585,
-61814:57586,
-61815:57587,
-61816:57588,
-61817:57589,
-61818:57590,
-61819:57591,
-61820:57592,
-61821:57593,
-61822:57594,
-61824:57595,
-61825:57596,
-61826:57597,
-61827:57598,
-61828:57599,
-61829:57600,
-61830:57601,
-61831:57602,
-61832:57603,
-61833:57604,
-61834:57605,
-61835:57606,
-61836:57607,
-61837:57608,
-61838:57609,
-61839:57610,
-61840:57611,
-61841:57612,
-61842:57613,
-61843:57614,
-61844:57615,
-61845:57616,
-61846:57617,
-61847:57618,
-61848:57619,
-61849:57620,
-61850:57621,
-61851:57622,
-61852:57623,
-61853:57624,
-61854:57625,
-61855:57626,
-61856:57627,
-61857:57628,
-61858:57629,
-61859:57630,
-61860:57631,
-61861:57632,
-61862:57633,
-61863:57634,
-61864:57635,
-61865:57636,
-61866:57637,
-61867:57638,
-61868:57639,
-61869:57640,
-61870:57641,
-61871:57642,
-61872:57643,
-61873:57644,
-61874:57645,
-61875:57646,
-61876:57647,
-61877:57648,
-61878:57649,
-61879:57650,
-61880:57651,
-61881:57652,
-61882:57653,
-61883:57654,
-61884:57655,
-61885:57656,
-61886:57657,
-61887:57658,
-61888:57659,
-61889:57660,
-61890:57661,
-61891:57662,
-61892:57663,
-61893:57664,
-61894:57665,
-61895:57666,
-61896:57667,
-61897:57668,
-61898:57669,
-61899:57670,
-61900:57671,
-61901:57672,
-61902:57673,
-61903:57674,
-61904:57675,
-61905:57676,
-61906:57677,
-61907:57678,
-61908:57679,
-61909:57680,
-61910:57681,
-61911:57682,
-61912:57683,
-61913:57684,
-61914:57685,
-61915:57686,
-61916:57687,
-61917:57688,
-61918:57689,
-61919:57690,
-61920:57691,
-61921:57692,
-61922:57693,
-61923:57694,
-61924:57695,
-61925:57696,
-61926:57697,
-61927:57698,
-61928:57699,
-61929:57700,
-61930:57701,
-61931:57702,
-61932:57703,
-61933:57704,
-61934:57705,
-61935:57706,
-61936:57707,
-61937:57708,
-61938:57709,
-61939:57710,
-61940:57711,
-61941:57712,
-61942:57713,
-61943:57714,
-61944:57715,
-61945:57716,
-61946:57717,
-61947:57718,
-61948:57719,
-62016:57720,
-62017:57721,
-62018:57722,
-62019:57723,
-62020:57724,
-62021:57725,
-62022:57726,
-62023:57727,
-62024:57728,
-62025:57729,
-62026:57730,
-62027:57731,
-62028:57732,
-62029:57733,
-62030:57734,
-62031:57735,
-62032:57736,
-62033:57737,
-62034:57738,
-62035:57739,
-62036:57740,
-62037:57741,
-62038:57742,
-62039:57743,
-62040:57744,
-62041:57745,
-62042:57746,
-62043:57747,
-62044:57748,
-62045:57749,
-62046:57750,
-62047:57751,
-62048:57752,
-62049:57753,
-62050:57754,
-62051:57755,
-62052:57756,
-62053:57757,
-62054:57758,
-62055:57759,
-62056:57760,
-62057:57761,
-62058:57762,
-62059:57763,
-62060:57764,
-62061:57765,
-62062:57766,
-62063:57767,
-62064:57768,
-62065:57769,
-62066:57770,
-62067:57771,
-62068:57772,
-62069:57773,
-62070:57774,
-62071:57775,
-62072:57776,
-62073:57777,
-62074:57778,
-62075:57779,
-62076:57780,
-62077:57781,
-62078:57782,
-62080:57783,
-62081:57784,
-62082:57785,
-62083:57786,
-62084:57787,
-62085:57788,
-62086:57789,
-62087:57790,
-62088:57791,
-62089:57792,
-62090:57793,
-62091:57794,
-62092:57795,
-62093:57796,
-62094:57797,
-62095:57798,
-62096:57799,
-62097:57800,
-62098:57801,
-62099:57802,
-62100:57803,
-62101:57804,
-62102:57805,
-62103:57806,
-62104:57807,
-62105:57808,
-62106:57809,
-62107:57810,
-62108:57811,
-62109:57812,
-62110:57813,
-62111:57814,
-62112:57815,
-62113:57816,
-62114:57817,
-62115:57818,
-62116:57819,
-62117:57820,
-62118:57821,
-62119:57822,
-62120:57823,
-62121:57824,
-62122:57825,
-62123:57826,
-62124:57827,
-62125:57828,
-62126:57829,
-62127:57830,
-62128:57831,
-62129:57832,
-62130:57833,
-62131:57834,
-62132:57835,
-62133:57836,
-62134:57837,
-62135:57838,
-62136:57839,
-62137:57840,
-62138:57841,
-62139:57842,
-62140:57843,
-62141:57844,
-62142:57845,
-62143:57846,
-62144:57847,
-62145:57848,
-62146:57849,
-62147:57850,
-62148:57851,
-62149:57852,
-62150:57853,
-62151:57854,
-62152:57855,
-62153:57856,
-62154:57857,
-62155:57858,
-62156:57859,
-62157:57860,
-62158:57861,
-62159:57862,
-62160:57863,
-62161:57864,
-62162:57865,
-62163:57866,
-62164:57867,
-62165:57868,
-62166:57869,
-62167:57870,
-62168:57871,
-62169:57872,
-62170:57873,
-62171:57874,
-62172:57875,
-62173:57876,
-62174:57877,
-62175:57878,
-62176:57879,
-62177:57880,
-62178:57881,
-62179:57882,
-62180:57883,
-62181:57884,
-62182:57885,
-62183:57886,
-62184:57887,
-62185:57888,
-62186:57889,
-62187:57890,
-62188:57891,
-62189:57892,
-62190:57893,
-62191:57894,
-62192:57895,
-62193:57896,
-62194:57897,
-62195:57898,
-62196:57899,
-62197:57900,
-62198:57901,
-62199:57902,
-62200:57903,
-62201:57904,
-62202:57905,
-62203:57906,
-62204:57907,
-62272:57908,
-62273:57909,
-62274:57910,
-62275:57911,
-62276:57912,
-62277:57913,
-62278:57914,
-62279:57915,
-62280:57916,
-62281:57917,
-62282:57918,
-62283:57919,
-62284:57920,
-62285:57921,
-62286:57922,
-62287:57923,
-62288:57924,
-62289:57925,
-62290:57926,
-62291:57927,
-62292:57928,
-62293:57929,
-62294:57930,
-62295:57931,
-62296:57932,
-62297:57933,
-62298:57934,
-62299:57935,
-62300:57936,
-62301:57937,
-62302:57938,
-62303:57939,
-62304:57940,
-62305:57941,
-62306:57942,
-62307:57943,
-62308:57944,
-62309:57945,
-62310:57946,
-62311:57947,
-62312:57948,
-62313:57949,
-62314:57950,
-62315:57951,
-62316:57952,
-62317:57953,
-62318:57954,
-62319:57955,
-62320:57956,
-62321:57957,
-62322:57958,
-62323:57959,
-62324:57960,
-62325:57961,
-62326:57962,
-62327:57963,
-62328:57964,
-62329:57965,
-62330:57966,
-62331:57967,
-62332:57968,
-62333:57969,
-62334:57970,
-62336:57971,
-62337:57972,
-62338:57973,
-62339:57974,
-62340:57975,
-62341:57976,
-62342:57977,
-62343:57978,
-62344:57979,
-62345:57980,
-62346:57981,
-62347:57982,
-62348:57983,
-62349:57984,
-62350:57985,
-62351:57986,
-62352:57987,
-62353:57988,
-62354:57989,
-62355:57990,
-62356:57991,
-62357:57992,
-62358:57993,
-62359:57994,
-62360:57995,
-62361:57996,
-62362:57997,
-62363:57998,
-62364:57999,
-62365:58000,
-62366:58001,
-62367:58002,
-62368:58003,
-62369:58004,
-62370:58005,
-62371:58006,
-62372:58007,
-62373:58008,
-62374:58009,
-62375:58010,
-62376:58011,
-62377:58012,
-62378:58013,
-62379:58014,
-62380:58015,
-62381:58016,
-62382:58017,
-62383:58018,
-62384:58019,
-62385:58020,
-62386:58021,
-62387:58022,
-62388:58023,
-62389:58024,
-62390:58025,
-62391:58026,
-62392:58027,
-62393:58028,
-62394:58029,
-62395:58030,
-62396:58031,
-62397:58032,
-62398:58033,
-62399:58034,
-62400:58035,
-62401:58036,
-62402:58037,
-62403:58038,
-62404:58039,
-62405:58040,
-62406:58041,
-62407:58042,
-62408:58043,
-62409:58044,
-62410:58045,
-62411:58046,
-62412:58047,
-62413:58048,
-62414:58049,
-62415:58050,
-62416:58051,
-62417:58052,
-62418:58053,
-62419:58054,
-62420:58055,
-62421:58056,
-62422:58057,
-62423:58058,
-62424:58059,
-62425:58060,
-62426:58061,
-62427:58062,
-62428:58063,
-62429:58064,
-62430:58065,
-62431:58066,
-62432:58067,
-62433:58068,
-62434:58069,
-62435:58070,
-62436:58071,
-62437:58072,
-62438:58073,
-62439:58074,
-62440:58075,
-62441:58076,
-62442:58077,
-62443:58078,
-62444:58079,
-62445:58080,
-62446:58081,
-62447:58082,
-62448:58083,
-62449:58084,
-62450:58085,
-62451:58086,
-62452:58087,
-62453:58088,
-62454:58089,
-62455:58090,
-62456:58091,
-62457:58092,
-62458:58093,
-62459:58094,
-62460:58095,
-62528:58096,
-62529:58097,
-62530:58098,
-62531:58099,
-62532:58100,
-62533:58101,
-62534:58102,
-62535:58103,
-62536:58104,
-62537:58105,
-62538:58106,
-62539:58107,
-62540:58108,
-62541:58109,
-62542:58110,
-62543:58111,
-62544:58112,
-62545:58113,
-62546:58114,
-62547:58115,
-62548:58116,
-62549:58117,
-62550:58118,
-62551:58119,
-62552:58120,
-62553:58121,
-62554:58122,
-62555:58123,
-62556:58124,
-62557:58125,
-62558:58126,
-62559:58127,
-62560:58128,
-62561:58129,
-62562:58130,
-62563:58131,
-62564:58132,
-62565:58133,
-62566:58134,
-62567:58135,
-62568:58136,
-62569:58137,
-62570:58138,
-62571:58139,
-62572:58140,
-62573:58141,
-62574:58142,
-62575:58143,
-62576:58144,
-62577:58145,
-62578:58146,
-62579:58147,
-62580:58148,
-62581:58149,
-62582:58150,
-62583:58151,
-62584:58152,
-62585:58153,
-62586:58154,
-62587:58155,
-62588:58156,
-62589:58157,
-62590:58158,
-62592:58159,
-62593:58160,
-62594:58161,
-62595:58162,
-62596:58163,
-62597:58164,
-62598:58165,
-62599:58166,
-62600:58167,
-62601:58168,
-62602:58169,
-62603:58170,
-62604:58171,
-62605:58172,
-62606:58173,
-62607:58174,
-62608:58175,
-62609:58176,
-62610:58177,
-62611:58178,
-62612:58179,
-62613:58180,
-62614:58181,
-62615:58182,
-62616:58183,
-62617:58184,
-62618:58185,
-62619:58186,
-62620:58187,
-62621:58188,
-62622:58189,
-62623:58190,
-62624:58191,
-62625:58192,
-62626:58193,
-62627:58194,
-62628:58195,
-62629:58196,
-62630:58197,
-62631:58198,
-62632:58199,
-62633:58200,
-62634:58201,
-62635:58202,
-62636:58203,
-62637:58204,
-62638:58205,
-62639:58206,
-62640:58207,
-62641:58208,
-62642:58209,
-62643:58210,
-62644:58211,
-62645:58212,
-62646:58213,
-62647:58214,
-62648:58215,
-62649:58216,
-62650:58217,
-62651:58218,
-62652:58219,
-62653:58220,
-62654:58221,
-62655:58222,
-62656:58223,
-62657:58224,
-62658:58225,
-62659:58226,
-62660:58227,
-62661:58228,
-62662:58229,
-62663:58230,
-62664:58231,
-62665:58232,
-62666:58233,
-62667:58234,
-62668:58235,
-62669:58236,
-62670:58237,
-62671:58238,
-62672:58239,
-62673:58240,
-62674:58241,
-62675:58242,
-62676:58243,
-62677:58244,
-62678:58245,
-62679:58246,
-62680:58247,
-62681:58248,
-62682:58249,
-62683:58250,
-62684:58251,
-62685:58252,
-62686:58253,
-62687:58254,
-62688:58255,
-62689:58256,
-62690:58257,
-62691:58258,
-62692:58259,
-62693:58260,
-62694:58261,
-62695:58262,
-62696:58263,
-62697:58264,
-62698:58265,
-62699:58266,
-62700:58267,
-62701:58268,
-62702:58269,
-62703:58270,
-62704:58271,
-62705:58272,
-62706:58273,
-62707:58274,
-62708:58275,
-62709:58276,
-62710:58277,
-62711:58278,
-62712:58279,
-62713:58280,
-62714:58281,
-62715:58282,
-62716:58283,
-62784:58284,
-62785:58285,
-62786:58286,
-62787:58287,
-62788:58288,
-62789:58289,
-62790:58290,
-62791:58291,
-62792:58292,
-62793:58293,
-62794:58294,
-62795:58295,
-62796:58296,
-62797:58297,
-62798:58298,
-62799:58299,
-62800:58300,
-62801:58301,
-62802:58302,
-62803:58303,
-62804:58304,
-62805:58305,
-62806:58306,
-62807:58307,
-62808:58308,
-62809:58309,
-62810:58310,
-62811:58311,
-62812:58312,
-62813:58313,
-62814:58314,
-62815:58315,
-62816:58316,
-62817:58317,
-62818:58318,
-62819:58319,
-62820:58320,
-62821:58321,
-62822:58322,
-62823:58323,
-62824:58324,
-62825:58325,
-62826:58326,
-62827:58327,
-62828:58328,
-62829:58329,
-62830:58330,
-62831:58331,
-62832:58332,
-62833:58333,
-62834:58334,
-62835:58335,
-62836:58336,
-62837:58337,
-62838:58338,
-62839:58339,
-62840:58340,
-62841:58341,
-62842:58342,
-62843:58343,
-62844:58344,
-62845:58345,
-62846:58346,
-62848:58347,
-62849:58348,
-62850:58349,
-62851:58350,
-62852:58351,
-62853:58352,
-62854:58353,
-62855:58354,
-62856:58355,
-62857:58356,
-62858:58357,
-62859:58358,
-62860:58359,
-62861:58360,
-62862:58361,
-62863:58362,
-62864:58363,
-62865:58364,
-62866:58365,
-62867:58366,
-62868:58367,
-62869:58368,
-62870:58369,
-62871:58370,
-62872:58371,
-62873:58372,
-62874:58373,
-62875:58374,
-62876:58375,
-62877:58376,
-62878:58377,
-62879:58378,
-62880:58379,
-62881:58380,
-62882:58381,
-62883:58382,
-62884:58383,
-62885:58384,
-62886:58385,
-62887:58386,
-62888:58387,
-62889:58388,
-62890:58389,
-62891:58390,
-62892:58391,
-62893:58392,
-62894:58393,
-62895:58394,
-62896:58395,
-62897:58396,
-62898:58397,
-62899:58398,
-62900:58399,
-62901:58400,
-62902:58401,
-62903:58402,
-62904:58403,
-62905:58404,
-62906:58405,
-62907:58406,
-62908:58407,
-62909:58408,
-62910:58409,
-62911:58410,
-62912:58411,
-62913:58412,
-62914:58413,
-62915:58414,
-62916:58415,
-62917:58416,
-62918:58417,
-62919:58418,
-62920:58419,
-62921:58420,
-62922:58421,
-62923:58422,
-62924:58423,
-62925:58424,
-62926:58425,
-62927:58426,
-62928:58427,
-62929:58428,
-62930:58429,
-62931:58430,
-62932:58431,
-62933:58432,
-62934:58433,
-62935:58434,
-62936:58435,
-62937:58436,
-62938:58437,
-62939:58438,
-62940:58439,
-62941:58440,
-62942:58441,
-62943:58442,
-62944:58443,
-62945:58444,
-62946:58445,
-62947:58446,
-62948:58447,
-62949:58448,
-62950:58449,
-62951:58450,
-62952:58451,
-62953:58452,
-62954:58453,
-62955:58454,
-62956:58455,
-62957:58456,
-62958:58457,
-62959:58458,
-62960:58459,
-62961:58460,
-62962:58461,
-62963:58462,
-62964:58463,
-62965:58464,
-62966:58465,
-62967:58466,
-62968:58467,
-62969:58468,
-62970:58469,
-62971:58470,
-62972:58471,
-63040:58472,
-63041:58473,
-63042:58474,
-63043:58475,
-63044:58476,
-63045:58477,
-63046:58478,
-63047:58479,
-63048:58480,
-63049:58481,
-63050:58482,
-63051:58483,
-63052:58484,
-63053:58485,
-63054:58486,
-63055:58487,
-63056:58488,
-63057:58489,
-63058:58490,
-63059:58491,
-63060:58492,
-63061:58493,
-63062:58494,
-63063:58495,
-63064:58496,
-63065:58497,
-63066:58498,
-63067:58499,
-63068:58500,
-63069:58501,
-63070:58502,
-63071:58503,
-63072:58504,
-63073:58505,
-63074:58506,
-63075:58507,
-63076:58508,
-63077:58509,
-63078:58510,
-63079:58511,
-63080:58512,
-63081:58513,
-63082:58514,
-63083:58515,
-63084:58516,
-63085:58517,
-63086:58518,
-63087:58519,
-63088:58520,
-63089:58521,
-63090:58522,
-63091:58523,
-63092:58524,
-63093:58525,
-63094:58526,
-63095:58527,
-63096:58528,
-63097:58529,
-63098:58530,
-63099:58531,
-63100:58532,
-63101:58533,
-63102:58534,
-63104:58535,
-63105:58536,
-63106:58537,
-63107:58538,
-63108:58539,
-63109:58540,
-63110:58541,
-63111:58542,
-63112:58543,
-63113:58544,
-63114:58545,
-63115:58546,
-63116:58547,
-63117:58548,
-63118:58549,
-63119:58550,
-63120:58551,
-63121:58552,
-63122:58553,
-63123:58554,
-63124:58555,
-63125:58556,
-63126:58557,
-63127:58558,
-63128:58559,
-63129:58560,
-63130:58561,
-63131:58562,
-63132:58563,
-63133:58564,
-63134:58565,
-63135:58566,
-63136:58567,
-63137:58568,
-63138:58569,
-63139:58570,
-63140:58571,
-63141:58572,
-63142:58573,
-63143:58574,
-63144:58575,
-63145:58576,
-63146:58577,
-63147:58578,
-63148:58579,
-63149:58580,
-63150:58581,
-63151:58582,
-63152:58583,
-63153:58584,
-63154:58585,
-63155:58586,
-63156:58587,
-63157:58588,
-63158:58589,
-63159:58590,
-63160:58591,
-63161:58592,
-63162:58593,
-63163:58594,
-63164:58595,
-63165:58596,
-63166:58597,
-63167:58598,
-63168:58599,
-63169:58600,
-63170:58601,
-63171:58602,
-63172:58603,
-63173:58604,
-63174:58605,
-63175:58606,
-63176:58607,
-63177:58608,
-63178:58609,
-63179:58610,
-63180:58611,
-63181:58612,
-63182:58613,
-63183:58614,
-63184:58615,
-63185:58616,
-63186:58617,
-63187:58618,
-63188:58619,
-63189:58620,
-63190:58621,
-63191:58622,
-63192:58623,
-63193:58624,
-63194:58625,
-63195:58626,
-63196:58627,
-63197:58628,
-63198:58629,
-63199:58630,
-63200:58631,
-63201:58632,
-63202:58633,
-63203:58634,
-63204:58635,
-63205:58636,
-63206:58637,
-63207:58638,
-63208:58639,
-63209:58640,
-63210:58641,
-63211:58642,
-63212:58643,
-63213:58644,
-63214:58645,
-63215:58646,
-63216:58647,
-63217:58648,
-63218:58649,
-63219:58650,
-63220:58651,
-63221:58652,
-63222:58653,
-63223:58654,
-63224:58655,
-63225:58656,
-63226:58657,
-63227:58658,
-63228:58659,
-63296:58660,
-63297:58661,
-63298:58662,
-63299:58663,
-63300:58664,
-63301:58665,
-63302:58666,
-63303:58667,
-63304:58668,
-63305:58669,
-63306:58670,
-63307:58671,
-63308:58672,
-63309:58673,
-63310:58674,
-63311:58675,
-63312:58676,
-63313:58677,
-63314:58678,
-63315:58679,
-63316:58680,
-63317:58681,
-63318:58682,
-63319:58683,
-63320:58684,
-63321:58685,
-63322:58686,
-63323:58687,
-63324:58688,
-63325:58689,
-63326:58690,
-63327:58691,
-63328:58692,
-63329:58693,
-63330:58694,
-63331:58695,
-63332:58696,
-63333:58697,
-63334:58698,
-63335:58699,
-63336:58700,
-63337:58701,
-63338:58702,
-63339:58703,
-63340:58704,
-63341:58705,
-63342:58706,
-63343:58707,
-63344:58708,
-63345:58709,
-63346:58710,
-63347:58711,
-63348:58712,
-63349:58713,
-63350:58714,
-63351:58715,
-63352:58716,
-63353:58717,
-63354:58718,
-63355:58719,
-63356:58720,
-63357:58721,
-63358:58722,
-63360:58723,
-63361:58724,
-63362:58725,
-63363:58726,
-63364:58727,
-63365:58728,
-63366:58729,
-63367:58730,
-63368:58731,
-63369:58732,
-63370:58733,
-63371:58734,
-63372:58735,
-63373:58736,
-63374:58737,
-63375:58738,
-63376:58739,
-63377:58740,
-63378:58741,
-63379:58742,
-63380:58743,
-63381:58744,
-63382:58745,
-63383:58746,
-63384:58747,
-63385:58748,
-63386:58749,
-63387:58750,
-63388:58751,
-63389:58752,
-63390:58753,
-63391:58754,
-63392:58755,
-63393:58756,
-63394:58757,
-63395:58758,
-63396:58759,
-63397:58760,
-63398:58761,
-63399:58762,
-63400:58763,
-63401:58764,
-63402:58765,
-63403:58766,
-63404:58767,
-63405:58768,
-63406:58769,
-63407:58770,
-63408:58771,
-63409:58772,
-63410:58773,
-63411:58774,
-63412:58775,
-63413:58776,
-63414:58777,
-63415:58778,
-63416:58779,
-63417:58780,
-63418:58781,
-63419:58782,
-63420:58783,
-63421:58784,
-63422:58785,
-63423:58786,
-63424:58787,
-63425:58788,
-63426:58789,
-63427:58790,
-63428:58791,
-63429:58792,
-63430:58793,
-63431:58794,
-63432:58795,
-63433:58796,
-63434:58797,
-63435:58798,
-63436:58799,
-63437:58800,
-63438:58801,
-63439:58802,
-63440:58803,
-63441:58804,
-63442:58805,
-63443:58806,
-63444:58807,
-63445:58808,
-63446:58809,
-63447:58810,
-63448:58811,
-63449:58812,
-63450:58813,
-63451:58814,
-63452:58815,
-63453:58816,
-63454:58817,
-63455:58818,
-63456:58819,
-63457:58820,
-63458:58821,
-63459:58822,
-63460:58823,
-63461:58824,
-63462:58825,
-63463:58826,
-63464:58827,
-63465:58828,
-63466:58829,
-63467:58830,
-63468:58831,
-63469:58832,
-63470:58833,
-63471:58834,
-63472:58835,
-63473:58836,
-63474:58837,
-63475:58838,
-63476:58839,
-63477:58840,
-63478:58841,
-63479:58842,
-63480:58843,
-63481:58844,
-63482:58845,
-63483:58846,
-63484:58847,
-63552:58848,
-63553:58849,
-63554:58850,
-63555:58851,
-63556:58852,
-63557:58853,
-63558:58854,
-63559:58855,
-63560:58856,
-63561:58857,
-63562:58858,
-63563:58859,
-63564:58860,
-63565:58861,
-63566:58862,
-63567:58863,
-63568:58864,
-63569:58865,
-63570:58866,
-63571:58867,
-63572:58868,
-63573:58869,
-63574:58870,
-63575:58871,
-63576:58872,
-63577:58873,
-63578:58874,
-63579:58875,
-63580:58876,
-63581:58877,
-63582:58878,
-63583:58879,
-63584:58880,
-63585:58881,
-63586:58882,
-63587:58883,
-63588:58884,
-63589:58885,
-63590:58886,
-63591:58887,
-63592:58888,
-63593:58889,
-63594:58890,
-63595:58891,
-63596:58892,
-63597:58893,
-63598:58894,
-63599:58895,
-63600:58896,
-63601:58897,
-63602:58898,
-63603:58899,
-63604:58900,
-63605:58901,
-63606:58902,
-63607:58903,
-63608:58904,
-63609:58905,
-63610:58906,
-63611:58907,
-63612:58908,
-63613:58909,
-63614:58910,
-63616:58911,
-63617:58912,
-63618:58913,
-63619:58914,
-63620:58915,
-63621:58916,
-63622:58917,
-63623:58918,
-63624:58919,
-63625:58920,
-63626:58921,
-63627:58922,
-63628:58923,
-63629:58924,
-63630:58925,
-63631:58926,
-63632:58927,
-63633:58928,
-63634:58929,
-63635:58930,
-63636:58931,
-63637:58932,
-63638:58933,
-63639:58934,
-63640:58935,
-63641:58936,
-63642:58937,
-63643:58938,
-63644:58939,
-63645:58940,
-63646:58941,
-63647:58942,
-63648:58943,
-63649:58944,
-63650:58945,
-63651:58946,
-63652:58947,
-63653:58948,
-63654:58949,
-63655:58950,
-63656:58951,
-63657:58952,
-63658:58953,
-63659:58954,
-63660:58955,
-63661:58956,
-63662:58957,
-63663:58958,
-63664:58959,
-63665:58960,
-63666:58961,
-63667:58962,
-63668:58963,
-63669:58964,
-63670:58965,
-63671:58966,
-63672:58967,
-63673:58968,
-63674:58969,
-63675:58970,
-63676:58971,
-63677:58972,
-63678:58973,
-63679:58974,
-63680:58975,
-63681:58976,
-63682:58977,
-63683:58978,
-63684:58979,
-63685:58980,
-63686:58981,
-63687:58982,
-63688:58983,
-63689:58984,
-63690:58985,
-63691:58986,
-63692:58987,
-63693:58988,
-63694:58989,
-63695:58990,
-63696:58991,
-63697:58992,
-63698:58993,
-63699:58994,
-63700:58995,
-63701:58996,
-63702:58997,
-63703:58998,
-63704:58999,
-63705:59000,
-63706:59001,
-63707:59002,
-63708:59003,
-63709:59004,
-63710:59005,
-63711:59006,
-63712:59007,
-63713:59008,
-63714:59009,
-63715:59010,
-63716:59011,
-63717:59012,
-63718:59013,
-63719:59014,
-63720:59015,
-63721:59016,
-63722:59017,
-63723:59018,
-63724:59019,
-63725:59020,
-63726:59021,
-63727:59022,
-63728:59023,
-63729:59024,
-63730:59025,
-63731:59026,
-63732:59027,
-63733:59028,
-63734:59029,
-63735:59030,
-63736:59031,
-63737:59032,
-63738:59033,
-63739:59034,
-63740:59035,
-64064:8560,
-64065:8561,
-64066:8562,
-64067:8563,
-64068:8564,
-64069:8565,
-64070:8566,
-64071:8567,
-64072:8568,
-64073:8569,
-64074:8544,
-64075:8545,
-64076:8546,
-64077:8547,
-64078:8548,
-64079:8549,
-64080:8550,
-64081:8551,
-64082:8552,
-64083:8553,
-64084:65506,
-64085:65508,
-64086:65287,
-64087:65282,
-64088:12849,
-64089:8470,
-64090:8481,
-64091:8757,
-64092:32394,
-64093:35100,
-64094:37704,
-64095:37512,
-64096:34012,
-64097:20425,
-64098:28859,
-64099:26161,
-64100:26824,
-64101:37625,
-64102:26363,
-64103:24389,
-64104:20008,
-64105:20193,
-64106:20220,
-64107:20224,
-64108:20227,
-64109:20281,
-64110:20310,
-64111:20370,
-64112:20362,
-64113:20378,
-64114:20372,
-64115:20429,
-64116:20544,
-64117:20514,
-64118:20479,
-64119:20510,
-64120:20550,
-64121:20592,
-64122:20546,
-64123:20628,
-64124:20724,
-64125:20696,
-64126:20810,
-64128:20836,
-64129:20893,
-64130:20926,
-64131:20972,
-64132:21013,
-64133:21148,
-64134:21158,
-64135:21184,
-64136:21211,
-64137:21248,
-64138:21255,
-64139:21284,
-64140:21362,
-64141:21395,
-64142:21426,
-64143:21469,
-64144:64014,
-64145:21660,
-64146:21642,
-64147:21673,
-64148:21759,
-64149:21894,
-64150:22361,
-64151:22373,
-64152:22444,
-64153:22472,
-64154:22471,
-64155:64015,
-64156:64016,
-64157:22686,
-64158:22706,
-64159:22795,
-64160:22867,
-64161:22875,
-64162:22877,
-64163:22883,
-64164:22948,
-64165:22970,
-64166:23382,
-64167:23488,
-64168:29999,
-64169:23512,
-64170:23532,
-64171:23582,
-64172:23718,
-64173:23738,
-64174:23797,
-64175:23847,
-64176:23891,
-64177:64017,
-64178:23874,
-64179:23917,
-64180:23992,
-64181:23993,
-64182:24016,
-64183:24353,
-64184:24372,
-64185:24423,
-64186:24503,
-64187:24542,
-64188:24669,
-64189:24709,
-64190:24714,
-64191:24798,
-64192:24789,
-64193:24864,
-64194:24818,
-64195:24849,
-64196:24887,
-64197:24880,
-64198:24984,
-64199:25107,
-64200:25254,
-64201:25589,
-64202:25696,
-64203:25757,
-64204:25806,
-64205:25934,
-64206:26112,
-64207:26133,
-64208:26171,
-64209:26121,
-64210:26158,
-64211:26142,
-64212:26148,
-64213:26213,
-64214:26199,
-64215:26201,
-64216:64018,
-64217:26227,
-64218:26265,
-64219:26272,
-64220:26290,
-64221:26303,
-64222:26362,
-64223:26382,
-64224:63785,
-64225:26470,
-64226:26555,
-64227:26706,
-64228:26560,
-64229:26625,
-64230:26692,
-64231:26831,
-64232:64019,
-64233:26984,
-64234:64020,
-64235:27032,
-64236:27106,
-64237:27184,
-64238:27243,
-64239:27206,
-64240:27251,
-64241:27262,
-64242:27362,
-64243:27364,
-64244:27606,
-64245:27711,
-64246:27740,
-64247:27782,
-64248:27759,
-64249:27866,
-64250:27908,
-64251:28039,
-64252:28015,
-64320:28054,
-64321:28076,
-64322:28111,
-64323:28152,
-64324:28146,
-64325:28156,
-64326:28217,
-64327:28252,
-64328:28199,
-64329:28220,
-64330:28351,
-64331:28552,
-64332:28597,
-64333:28661,
-64334:28677,
-64335:28679,
-64336:28712,
-64337:28805,
-64338:28843,
-64339:28943,
-64340:28932,
-64341:29020,
-64342:28998,
-64343:28999,
-64344:64021,
-64345:29121,
-64346:29182,
-64347:29361,
-64348:29374,
-64349:29476,
-64350:64022,
-64351:29559,
-64352:29629,
-64353:29641,
-64354:29654,
-64355:29667,
-64356:29650,
-64357:29703,
-64358:29685,
-64359:29734,
-64360:29738,
-64361:29737,
-64362:29742,
-64363:29794,
-64364:29833,
-64365:29855,
-64366:29953,
-64367:30063,
-64368:30338,
-64369:30364,
-64370:30366,
-64371:30363,
-64372:30374,
-64373:64023,
-64374:30534,
-64375:21167,
-64376:30753,
-64377:30798,
-64378:30820,
-64379:30842,
-64380:31024,
-64381:64024,
-64382:64025,
-64384:64026,
-64385:31124,
-64386:64027,
-64387:31131,
-64388:31441,
-64389:31463,
-64390:64028,
-64391:31467,
-64392:31646,
-64393:64029,
-64394:32072,
-64395:32092,
-64396:32183,
-64397:32160,
-64398:32214,
-64399:32338,
-64400:32583,
-64401:32673,
-64402:64030,
-64403:33537,
-64404:33634,
-64405:33663,
-64406:33735,
-64407:33782,
-64408:33864,
-64409:33972,
-64410:34131,
-64411:34137,
-64412:34155,
-64413:64031,
-64414:34224,
-64415:64032,
-64416:64033,
-64417:34823,
-64418:35061,
-64419:35346,
-64420:35383,
-64421:35449,
-64422:35495,
-64423:35518,
-64424:35551,
-64425:64034,
-64426:35574,
-64427:35667,
-64428:35711,
-64429:36080,
-64430:36084,
-64431:36114,
-64432:36214,
-64433:64035,
-64434:36559,
-64435:64036,
-64436:64037,
-64437:36967,
-64438:37086,
-64439:64038,
-64440:37141,
-64441:37159,
-64442:37338,
-64443:37335,
-64444:37342,
-64445:37357,
-64446:37358,
-64447:37348,
-64448:37349,
-64449:37382,
-64450:37392,
-64451:37386,
-64452:37434,
-64453:37440,
-64454:37436,
-64455:37454,
-64456:37465,
-64457:37457,
-64458:37433,
-64459:37479,
-64460:37543,
-64461:37495,
-64462:37496,
-64463:37607,
-64464:37591,
-64465:37593,
-64466:37584,
-64467:64039,
-64468:37589,
-64469:37600,
-64470:37587,
-64471:37669,
-64472:37665,
-64473:37627,
-64474:64040,
-64475:37662,
-64476:37631,
-64477:37661,
-64478:37634,
-64479:37744,
-64480:37719,
-64481:37796,
-64482:37830,
-64483:37854,
-64484:37880,
-64485:37937,
-64486:37957,
-64487:37960,
-64488:38290,
-64489:63964,
-64490:64041,
-64491:38557,
-64492:38575,
-64493:38707,
-64494:38715,
-64495:38723,
-64496:38733,
-64497:38735,
-64498:38737,
-64499:38741,
-64500:38999,
-64501:39013,
-64502:64042,
-64503:64043,
-64504:39207,
-64505:64044,
-64506:39326,
-64507:39502,
-64508:39641,
-64576:39644,
-64577:39797,
-64578:39794,
-64579:39823,
-64580:39857,
-64581:39867,
-64582:39936,
-64583:40304,
-64584:40299,
-64585:64045,
-64586:40473,
-64587:40657
-};
-
-/**
- * @author takahiro / https://github.com/takahirox
- */
-
-function DataViewEx ( buffer, littleEndian ) {
-
-	this.dv = new DataView( buffer );
-	this.offset = 0;
-	this.littleEndian = ( littleEndian !== undefined ) ? littleEndian : true;
-	this.encoder = new CharsetEncoder();
-
-}
-
-DataViewEx.prototype = {
-
-	constructor: DataViewEx,
-
-	getInt8: function () {
-
-		var value = this.dv.getInt8( this.offset );
-		this.offset += 1;
-		return value;
-
-	},
-
-	getInt8Array: function ( size ) {
-
-		var a = [];
-
-		for ( var i = 0; i < size; i++ ) {
-
-			a.push( this.getInt8() );
-
-		}
-
-		return a;
-
-	},
-
-	getUint8: function () {
-
-		var value = this.dv.getUint8( this.offset );
-		this.offset += 1;
-		return value;
-
-	},
-
-	getUint8Array: function ( size ) {
-
-		var a = [];
-
-		for ( var i = 0; i < size; i++ ) {
-
-			a.push( this.getUint8() );
-
-		}
-
-		return a;
-
-	},
-
-
-	getInt16: function () {
-
-		var value = this.dv.getInt16( this.offset, this.littleEndian );
-		this.offset += 2;
-		return value;
-
-	},
-
-	getInt16Array: function ( size ) {
-
-		var a = [];
-
-		for ( var i = 0; i < size; i++ ) {
-
-			a.push( this.getInt16() );
-
-		}
-
-		return a;
-
-	},
-
-	getUint16: function () {
-
-		var value = this.dv.getUint16( this.offset, this.littleEndian );
-		this.offset += 2;
-		return value;
-
-	},
-
-	getUint16Array: function ( size ) {
-
-		var a = [];
-
-		for ( var i = 0; i < size; i++ ) {
-
-			a.push( this.getUint16() );
-
-		}
-
-		return a;
-
-	},
-
-	getInt32: function () {
-
-		var value = this.dv.getInt32( this.offset, this.littleEndian );
-		this.offset += 4;
-		return value;
-
-	},
-
-	getInt32Array: function ( size ) {
-
-		var a = [];
-
-		for ( var i = 0; i < size; i++ ) {
-
-			a.push( this.getInt32() );
-
-		}
-
-		return a;
-
-	},
-
-	getUint32: function () {
-
-		var value = this.dv.getUint32( this.offset, this.littleEndian );
-		this.offset += 4;
-		return value;
-
-	},
-
-	getUint32Array: function ( size ) {
-
-		var a = [];
-
-		for ( var i = 0; i < size; i++ ) {
-
-			a.push( this.getUint32() );
-
-		}
-
-		return a;
-
-	},
-
-	getFloat32: function () {
-
-		var value = this.dv.getFloat32( this.offset, this.littleEndian );
-		this.offset += 4;
-		return value;
-
-	},
-
-	getFloat32Array: function( size ) {
-
-		var a = [];
-
-		for ( var i = 0; i < size; i++ ) {
-
-			a.push( this.getFloat32() );
-
-		}
-
-		return a;
-
-	},
-
-	getFloat64: function () {
-
-		var value = this.dv.getFloat64( this.offset, this.littleEndian );
-		this.offset += 8;
-		return value;
-
-	},
-
-	getFloat64Array: function( size ) {
-
-		var a = [];
-
-		for ( var i = 0; i < size; i++ ) {
-
-			a.push( this.getFloat64() );
-
-		}
-
-		return a;
-
-	},
-
-	getIndex: function ( type, isUnsigned ) {
-
-		switch ( type ) {
-
-			case 1:
-				return ( isUnsigned === true ) ? this.getUint8() : this.getInt8();
-
-			case 2:
-				return ( isUnsigned === true ) ? this.getUint16() : this.getInt16();
-
-			case 4:
-				return this.getInt32(); // No Uint32
-
-			default:
-				throw 'unknown number type ' + type + ' exception.';
-
-		}
-
-	},
-
-	getIndexArray: function ( type, size, isUnsigned ) {
-
-		var a = [];
-
-		for ( var i = 0; i < size; i++ ) {
-
-			a.push( this.getIndex( type, isUnsigned ) );
-
-		}
-
-		return a;
-
-	},
-
-	getChars: function ( size ) {
-
-		var str = '';
-
-		while ( size > 0 ) {
-
-			var value = this.getUint8();
-			size--;
-
-			if ( value === 0 ) {
-
-				break;
-
-			}
-
-			str += String.fromCharCode( value );
-
-		}
-
-		while ( size > 0 ) {
-
-			this.getUint8();
-			size--;
-
-		}
-
-		return str;
-
-	},
-
-	getSjisStringsAsUnicode: function ( size ) {
-
-		var a = [];
-
-		while ( size > 0 ) {
-
-			var value = this.getUint8();
-			size--;
-
-			if ( value === 0 ) {
-
-				break;
-
-			}
-
-			a.push( value );
-
-		}
-
-		while ( size > 0 ) {
-
-			this.getUint8();
-			size--;
-
-		}
-
-		return this.encoder.s2u( new Uint8Array( a ) );
-
-	},
-
-	getUnicodeStrings: function ( size ) {
-
-		var str = '';
-
-		while ( size > 0 ) {
-
-			var value = this.getUint16();
-			size -= 2;
-
-			if ( value === 0 ) {
-
-				break;
-
-			}
-
-			str += String.fromCharCode( value );
-
-		}
-
-		while ( size > 0 ) {
-
-			this.getUint8();
-			size--;
-
-		}
-
-		return str;
-
-	},
-
-	getTextBuffer: function () {
-
-		var size = this.getUint32();
-		return this.getUnicodeStrings( size );
-
-	}
-
-};
-
-/**
- * @author takahiro / https://github.com/takahirox
- */
-
-function DataCreationHelper () {
-}
-
-DataCreationHelper.prototype = {
-
-	constructor: DataCreationHelper,
-
-	leftToRightVector3: function ( v ) {
-
-		v[ 2 ] = -v[ 2 ];
-
-	},
-
-	leftToRightQuaternion: function ( q ) {
-
-		q[ 0 ] = -q[ 0 ];
-		q[ 1 ] = -q[ 1 ];
-
-	},
-
-	leftToRightEuler: function ( r ) {
-
-		r[ 0 ] = -r[ 0 ];
-		r[ 1 ] = -r[ 1 ];
-
-	},
-
-	leftToRightIndexOrder: function ( p ) {
-
-		var tmp = p[ 2 ];
-		p[ 2 ] = p[ 0 ];
-		p[ 0 ] = tmp;
-
-	},
-
-	leftToRightVector3Range: function ( v1, v2 ) {
-
-		var tmp = -v2[ 2 ];
-		v2[ 2 ] = -v1[ 2 ];
-		v1[ 2 ] = tmp;
-
-	},
-
-	leftToRightEulerRange: function ( r1, r2 ) {
-
-		var tmp1 = -r2[ 0 ];
-		var tmp2 = -r2[ 1 ];
-		r2[ 0 ] = -r1[ 0 ];
-		r2[ 1 ] = -r1[ 1 ];
-		r1[ 0 ] = tmp1;
-		r1[ 1 ] = tmp2;
-
-	}
-
-};
-
-/**
- * @author takahiro / https://github.com/takahirox
- */
-
-function Parser() {
-}
-
-Parser.prototype.parsePmd = function ( buffer, leftToRight ) {
-
-	var pmd = {};
-	var dv = new DataViewEx( buffer );
-
-	pmd.metadata = {};
-	pmd.metadata.format = 'pmd';
-	pmd.metadata.coordinateSystem = 'left';
-
-	var parseHeader = function () {
-
-		var metadata = pmd.metadata;
-		metadata.magic = dv.getChars( 3 );
-
-		if ( metadata.magic !== 'Pmd' ) {
-
-			throw 'PMD file magic is not Pmd, but ' + metadata.magic;
-
-		}
-
-		metadata.version = dv.getFloat32();
-		metadata.modelName = dv.getSjisStringsAsUnicode( 20 );
-		metadata.comment = dv.getSjisStringsAsUnicode( 256 );
-
-	};
-
-	var parseVertices = function () {
-
-		var parseVertex = function () {
-
-			var p = {};
-			p.position = dv.getFloat32Array( 3 );
-			p.normal = dv.getFloat32Array( 3 );
-			p.uv = dv.getFloat32Array( 2 );
-			p.skinIndices = dv.getUint16Array( 2 );
-			p.skinWeights = [ dv.getUint8() / 100 ];
-			p.skinWeights.push( 1.0 - p.skinWeights[ 0 ] );
-			p.edgeFlag = dv.getUint8();
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-		metadata.vertexCount = dv.getUint32();
-
-		pmd.vertices = [];
-
-		for ( var i = 0; i < metadata.vertexCount; i++ ) {
-
-			pmd.vertices.push( parseVertex() );
-
-		}
-
-	};
-
-	var parseFaces = function () {
-
-		var parseFace = function () {
-
-			var p = {};
-			p.indices = dv.getUint16Array( 3 );
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-		metadata.faceCount = dv.getUint32() / 3;
-
-		pmd.faces = [];
-
-		for ( var i = 0; i < metadata.faceCount; i++ ) {
-
-			pmd.faces.push( parseFace() );
-
-		}
-
-	};
-
-	var parseMaterials = function () {
-
-		var parseMaterial = function () {
-
-			var p = {};
-			p.diffuse = dv.getFloat32Array( 4 );
-			p.shininess = dv.getFloat32();
-			p.specular = dv.getFloat32Array( 3 );
-			p.ambient = dv.getFloat32Array( 3 );
-			p.toonIndex = dv.getInt8();
-			p.edgeFlag = dv.getUint8();
-			p.faceCount = dv.getUint32() / 3;
-			p.fileName = dv.getSjisStringsAsUnicode( 20 );
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-		metadata.materialCount = dv.getUint32();
-
-		pmd.materials = [];
-
-		for ( var i = 0; i < metadata.materialCount; i++ ) {
-
-			pmd.materials.push( parseMaterial() );
-
-		}
-
-	};
-
-	var parseBones = function () {
-
-		var parseBone = function () {
-
-			var p = {};
-			p.name = dv.getSjisStringsAsUnicode( 20 );
-			p.parentIndex = dv.getInt16();
-			p.tailIndex = dv.getInt16();
-			p.type = dv.getUint8();
-			p.ikIndex = dv.getInt16();
-			p.position = dv.getFloat32Array( 3 );
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-		metadata.boneCount = dv.getUint16();
-
-		pmd.bones = [];
-
-		for ( var i = 0; i < metadata.boneCount; i++ ) {
-
-			pmd.bones.push( parseBone() );
-
-		}
-
-	};
-
-	var parseIks = function () {
-
-		var parseIk = function () {
-
-			var p = {};
-			p.target = dv.getUint16();
-			p.effector = dv.getUint16();
-			p.linkCount = dv.getUint8();
-			p.iteration = dv.getUint16();
-			p.maxAngle = dv.getFloat32();
-
-			p.links = [];
-			for ( var i = 0; i < p.linkCount; i++ ) {
-
-				var link = {};
-				link.index = dv.getUint16();
-				p.links.push( link );
-
-			}
-
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-		metadata.ikCount = dv.getUint16();
-
-		pmd.iks = [];
-
-		for ( var i = 0; i < metadata.ikCount; i++ ) {
-
-			pmd.iks.push( parseIk() );
-
-		}
-
-	};
-
-	var parseMorphs = function () {
-
-		var parseMorph = function () {
-
-			var p = {};
-			p.name = dv.getSjisStringsAsUnicode( 20 );
-			p.elementCount = dv.getUint32();
-			p.type = dv.getUint8();
-
-			p.elements = [];
-			for ( var i = 0; i < p.elementCount; i++ ) {
-
-				p.elements.push( {
-					index: dv.getUint32(),
-					position: dv.getFloat32Array( 3 )
-				} ) ;
-
-			}
-
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-		metadata.morphCount = dv.getUint16();
-
-		pmd.morphs = [];
-
-		for ( var i = 0; i < metadata.morphCount; i++ ) {
-
-			pmd.morphs.push( parseMorph() );
-
-		}
-
-
-	};
-
-	var parseMorphFrames = function () {
-
-		var parseMorphFrame = function () {
-
-			var p = {};
-			p.index = dv.getUint16();
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-		metadata.morphFrameCount = dv.getUint8();
-
-		pmd.morphFrames = [];
-
-		for ( var i = 0; i < metadata.morphFrameCount; i++ ) {
-
-			pmd.morphFrames.push( parseMorphFrame() );
-
-		}
-
-	};
-
-	var parseBoneFrameNames = function () {
-
-		var parseBoneFrameName = function () {
-
-			var p = {};
-			p.name = dv.getSjisStringsAsUnicode( 50 );
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-		metadata.boneFrameNameCount = dv.getUint8();
-
-		pmd.boneFrameNames = [];
-
-		for ( var i = 0; i < metadata.boneFrameNameCount; i++ ) {
-
-			pmd.boneFrameNames.push( parseBoneFrameName() );
-
-		}
-
-	};
-
-	var parseBoneFrames = function () {
-
-		var parseBoneFrame = function () {
-
-			var p = {};
-			p.boneIndex = dv.getInt16();
-			p.frameIndex = dv.getUint8();
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-		metadata.boneFrameCount = dv.getUint32();
-
-		pmd.boneFrames = [];
-
-		for ( var i = 0; i < metadata.boneFrameCount; i++ ) {
-
-			pmd.boneFrames.push( parseBoneFrame() );
-
-		}
-
-	};
-
-	var parseEnglishHeader = function () {
-
-		var metadata = pmd.metadata;
-		metadata.englishCompatibility = dv.getUint8();
-
-		if ( metadata.englishCompatibility > 0 ) {
-
-			metadata.englishModelName = dv.getSjisStringsAsUnicode( 20 );
-			metadata.englishComment = dv.getSjisStringsAsUnicode( 256 );
-
-		}
-
-	};
-
-	var parseEnglishBoneNames = function () {
-
-		var parseEnglishBoneName = function () {
-
-			var p = {};
-			p.name = dv.getSjisStringsAsUnicode( 20 );
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-
-		if ( metadata.englishCompatibility === 0 ) {
-
-			return;
-
-		}
-
-		pmd.englishBoneNames = [];
-
-		for ( var i = 0; i < metadata.boneCount; i++ ) {
-
-			pmd.englishBoneNames.push( parseEnglishBoneName() );
-
-		}
-
-	};
-
-	var parseEnglishMorphNames = function () {
-
-		var parseEnglishMorphName = function () {
-
-			var p = {};
-			p.name = dv.getSjisStringsAsUnicode( 20 );
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-
-		if ( metadata.englishCompatibility === 0 ) {
-
-			return;
-
-		}
-
-		pmd.englishMorphNames = [];
-
-		for ( var i = 0; i < metadata.morphCount - 1; i++ ) {
-
-			pmd.englishMorphNames.push( parseEnglishMorphName() );
-
-		}
-
-	};
-
-	var parseEnglishBoneFrameNames = function () {
-
-		var parseEnglishBoneFrameName = function () {
-
-			var p = {};
-			p.name = dv.getSjisStringsAsUnicode( 50 );
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-
-		if ( metadata.englishCompatibility === 0 ) {
-
-			return;
-
-		}
-
-		pmd.englishBoneFrameNames = [];
-
-		for ( var i = 0; i < metadata.boneFrameNameCount; i++ ) {
-
-			pmd.englishBoneFrameNames.push( parseEnglishBoneFrameName() );
-
-		}
-
-	};
-
-	var parseToonTextures = function () {
-
-		var parseToonTexture = function () {
-
-			var p = {};
-			p.fileName = dv.getSjisStringsAsUnicode( 100 );
-			return p;
-
-		};
-
-		pmd.toonTextures = [];
-
-		for ( var i = 0; i < 10; i++ ) {
-
-			pmd.toonTextures.push( parseToonTexture() );
-
-		}
-
-	};
-
-	var parseRigidBodies = function () {
-
-		var parseRigidBody = function () {
-
-			var p = {};
-			p.name = dv.getSjisStringsAsUnicode( 20 );
-			p.boneIndex = dv.getInt16();
-			p.groupIndex = dv.getUint8();
-			p.groupTarget = dv.getUint16();
-			p.shapeType = dv.getUint8();
-			p.width = dv.getFloat32();
-			p.height = dv.getFloat32();
-			p.depth = dv.getFloat32();
-			p.position = dv.getFloat32Array( 3 );
-			p.rotation = dv.getFloat32Array( 3 );
-			p.weight = dv.getFloat32();
-			p.positionDamping = dv.getFloat32();
-			p.rotationDamping = dv.getFloat32();
-			p.restitution = dv.getFloat32();
-			p.friction = dv.getFloat32();
-			p.type = dv.getUint8();
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-		metadata.rigidBodyCount = dv.getUint32();
-
-		pmd.rigidBodies = [];
-
-		for ( var i = 0; i < metadata.rigidBodyCount; i++ ) {
-
-			pmd.rigidBodies.push( parseRigidBody() );
-
-		}
-
-	};
-
-	var parseConstraints = function () {
-
-		var parseConstraint = function () {
-
-			var p = {};
-			p.name = dv.getSjisStringsAsUnicode( 20 );
-			p.rigidBodyIndex1 = dv.getUint32();
-			p.rigidBodyIndex2 = dv.getUint32();
-			p.position = dv.getFloat32Array( 3 );
-			p.rotation = dv.getFloat32Array( 3 );
-			p.translationLimitation1 = dv.getFloat32Array( 3 );
-			p.translationLimitation2 = dv.getFloat32Array( 3 );
-			p.rotationLimitation1 = dv.getFloat32Array( 3 );
-			p.rotationLimitation2 = dv.getFloat32Array( 3 );
-			p.springPosition = dv.getFloat32Array( 3 );
-			p.springRotation = dv.getFloat32Array( 3 );
-			return p;
-
-		};
-
-		var metadata = pmd.metadata;
-		metadata.constraintCount = dv.getUint32();
-
-		pmd.constraints = [];
-
-		for ( var i = 0; i < metadata.constraintCount; i++ ) {
-
-			pmd.constraints.push( parseConstraint() );
-
-		}
-
-	};
-
-	parseHeader();
-	parseVertices();
-	parseFaces();
-	parseMaterials();
-	parseBones();
-	parseIks();
-	parseMorphs();
-	parseMorphFrames();
-	parseBoneFrameNames();
-	parseBoneFrames();
-	parseEnglishHeader();
-	parseEnglishBoneNames();
-	parseEnglishMorphNames();
-	parseEnglishBoneFrameNames();
-	parseToonTextures();
-	parseRigidBodies();
-	parseConstraints();
-
-	if ( leftToRight === true ) this.leftToRightModel( pmd );
-
-	// console.log( pmd ); // for console debug
-
-	return pmd;
-
-};
-
-Parser.prototype.parsePmx = function ( buffer, leftToRight ) {
-
-	var pmx = {};
-	var dv = new DataViewEx( buffer );
-
-	pmx.metadata = {};
-	pmx.metadata.format = 'pmx';
-	pmx.metadata.coordinateSystem = 'left';
-
-	var parseHeader = function () {
-
-		var metadata = pmx.metadata;
-		metadata.magic = dv.getChars( 4 );
-
-		// Note: don't remove the last blank space.
-		if ( metadata.magic !== 'PMX ' ) {
-
-			throw 'PMX file magic is not PMX , but ' + metadata.magic;
-
-		}
-
-		metadata.version = dv.getFloat32();
-
-		if ( metadata.version !== 2.0 && metadata.version !== 2.1 ) {
-
-			throw 'PMX version ' + metadata.version + ' is not supported.';
-
-		}
-
-		metadata.headerSize = dv.getUint8();
-		metadata.encoding = dv.getUint8();
-		metadata.additionalUvNum = dv.getUint8();
-		metadata.vertexIndexSize = dv.getUint8();
-		metadata.textureIndexSize = dv.getUint8();
-		metadata.materialIndexSize = dv.getUint8();
-		metadata.boneIndexSize = dv.getUint8();
-		metadata.morphIndexSize = dv.getUint8();
-		metadata.rigidBodyIndexSize = dv.getUint8();
-		metadata.modelName = dv.getTextBuffer();
-		metadata.englishModelName = dv.getTextBuffer();
-		metadata.comment = dv.getTextBuffer();
-		metadata.englishComment = dv.getTextBuffer();
-
-	};
-
-	var parseVertices = function () {
-
-		var parseVertex = function () {
-
-			var p = {};
-			p.position = dv.getFloat32Array( 3 );
-			p.normal = dv.getFloat32Array( 3 );
-			p.uv = dv.getFloat32Array( 2 );
-
-			p.auvs = [];
-
-			for ( var i = 0; i < pmx.metadata.additionalUvNum; i++ ) {
-
-				p.auvs.push( dv.getFloat32Array( 4 ) );
-
-			}
-
-			p.type = dv.getUint8();
-
-			var indexSize = metadata.boneIndexSize;
-
-			if ( p.type === 0 ) {  // BDEF1
-
-				p.skinIndices = dv.getIndexArray( indexSize, 1 );
-				p.skinWeights = [ 1.0 ];
-
-			} else if ( p.type === 1 ) {  // BDEF2
-
-				p.skinIndices = dv.getIndexArray( indexSize, 2 );
-				p.skinWeights = dv.getFloat32Array( 1 );
-				p.skinWeights.push( 1.0 - p.skinWeights[ 0 ] );
-
-			} else if ( p.type === 2 ) {  // BDEF4
-
-				p.skinIndices = dv.getIndexArray( indexSize, 4 );
-				p.skinWeights = dv.getFloat32Array( 4 );
-
-			} else if ( p.type === 3 ) {  // SDEF
-
-				p.skinIndices = dv.getIndexArray( indexSize, 2 );
-				p.skinWeights = dv.getFloat32Array( 1 );
-				p.skinWeights.push( 1.0 - p.skinWeights[ 0 ] );
-
-				p.skinC = dv.getFloat32Array( 3 );
-				p.skinR0 = dv.getFloat32Array( 3 );
-				p.skinR1 = dv.getFloat32Array( 3 );
-
-				// SDEF is not supported yet and is handled as BDEF2 so far.
-				// TODO: SDEF support
-				p.type = 1;
-
-			} else {
-
-				throw 'unsupport bone type ' + p.type + ' exception.';
-
-			}
-
-			p.edgeRatio = dv.getFloat32();
-			return p;
-
-		};
-
-		var metadata = pmx.metadata;
-		metadata.vertexCount = dv.getUint32();
-
-		pmx.vertices = [];
-
-		for ( var i = 0; i < metadata.vertexCount; i++ ) {
-
-			pmx.vertices.push( parseVertex() );
-
-		}
-
-	};
-
-	var parseFaces = function () {
-
-		var parseFace = function () {
-
-			var p = {};
-			p.indices = dv.getIndexArray( metadata.vertexIndexSize, 3, true );
-			return p;
-
-		};
-
-		var metadata = pmx.metadata;
-		metadata.faceCount = dv.getUint32() / 3;
-
-		pmx.faces = [];
-
-		for ( var i = 0; i < metadata.faceCount; i++ ) {
-
-			pmx.faces.push( parseFace() );
-
-		}
-
-	};
-
-	var parseTextures = function () {
-
-		var parseTexture = function () {
-
-			return dv.getTextBuffer();
-
-		};
-
-		var metadata = pmx.metadata;
-		metadata.textureCount = dv.getUint32();
-
-		pmx.textures = [];
-
-		for ( var i = 0; i < metadata.textureCount; i++ ) {
-
-			pmx.textures.push( parseTexture() );
-
-		}
-
-	};
-
-	var parseMaterials = function () {
-
-		var parseMaterial = function () {
-
-			var p = {};
-			p.name = dv.getTextBuffer();
-			p.englishName = dv.getTextBuffer();
-			p.diffuse = dv.getFloat32Array( 4 );
-			p.specular = dv.getFloat32Array( 3 );
-			p.shininess = dv.getFloat32();
-			p.ambient = dv.getFloat32Array( 3 );
-			p.flag = dv.getUint8();
-			p.edgeColor = dv.getFloat32Array( 4 );
-			p.edgeSize = dv.getFloat32();
-			p.textureIndex = dv.getIndex( pmx.metadata.textureIndexSize );
-			p.envTextureIndex = dv.getIndex( pmx.metadata.textureIndexSize );
-			p.envFlag = dv.getUint8();
-			p.toonFlag = dv.getUint8();
-
-			if ( p.toonFlag === 0 ) {
-
-				p.toonIndex = dv.getIndex( pmx.metadata.textureIndexSize );
-
-			} else if ( p.toonFlag === 1 ) {
-
-				p.toonIndex = dv.getInt8();
-
-			} else {
-
-				throw 'unknown toon flag ' + p.toonFlag + ' exception.';
-
-			}
-
-			p.comment = dv.getTextBuffer();
-			p.faceCount = dv.getUint32() / 3;
-			return p;
-
-		};
-
-		var metadata = pmx.metadata;
-		metadata.materialCount = dv.getUint32();
-
-		pmx.materials = [];
-
-		for ( var i = 0; i < metadata.materialCount; i++ ) {
-
-			pmx.materials.push( parseMaterial() );
-
-		}
-
-	};
-
-	var parseBones = function () {
-
-		var parseBone = function () {
-
-			var p = {};
-			p.name = dv.getTextBuffer();
-			p.englishName = dv.getTextBuffer();
-			p.position = dv.getFloat32Array( 3 );
-			p.parentIndex = dv.getIndex( pmx.metadata.boneIndexSize );
-			p.transformationClass = dv.getUint32();
-			p.flag = dv.getUint16();
-
-			if ( p.flag & 0x1 ) {
-
-				p.connectIndex = dv.getIndex( pmx.metadata.boneIndexSize );
-
-			} else {
-
-				p.offsetPosition = dv.getFloat32Array( 3 );
-
-			}
-
-			if ( p.flag & 0x100 || p.flag & 0x200 ) {
-
-				// Note: I don't think Grant is an appropriate name
-				//       but I found that some English translated MMD tools use this term
-				//       so I've named it Grant so far.
-				//       I'd rename to more appropriate name from Grant later.
-				var grant = {};
-
-				grant.isLocal = ( p.flag & 0x80 ) !== 0 ? true : false;
-				grant.affectRotation = ( p.flag & 0x100 ) !== 0 ? true : false;
-				grant.affectPosition = ( p.flag & 0x200 ) !== 0 ? true : false;
-				grant.parentIndex = dv.getIndex( pmx.metadata.boneIndexSize );
-				grant.ratio = dv.getFloat32();
-
-				p.grant = grant;
-
-			}
-
-			if ( p.flag & 0x400 ) {
-
-				p.fixAxis = dv.getFloat32Array( 3 );
-
-			}
-
-			if ( p.flag & 0x800 ) {
-
-				p.localXVector = dv.getFloat32Array( 3 );
-				p.localZVector = dv.getFloat32Array( 3 );
-
-			}
-
-			if ( p.flag & 0x2000 ) {
-
-				p.key = dv.getUint32();
-
-			}
-
-			if ( p.flag & 0x20 ) {
-
-				var ik = {};
-
-				ik.effector = dv.getIndex( pmx.metadata.boneIndexSize );
-				ik.target = null;
-				ik.iteration = dv.getUint32();
-				ik.maxAngle = dv.getFloat32();
-				ik.linkCount = dv.getUint32();
-				ik.links = [];
-
-				for ( var i = 0; i < ik.linkCount; i++ ) {
-
-					var link = {};
-					link.index = dv.getIndex( pmx.metadata.boneIndexSize );
-					link.angleLimitation = dv.getUint8();
-
-					if ( link.angleLimitation === 1 ) {
-
-						link.lowerLimitationAngle = dv.getFloat32Array( 3 );
-						link.upperLimitationAngle = dv.getFloat32Array( 3 );
-
-					}
-
-					ik.links.push( link );
-
-				}
-
-				p.ik = ik;
-			}
-
-			return p;
-
-		};
-
-		var metadata = pmx.metadata;
-		metadata.boneCount = dv.getUint32();
-
-		pmx.bones = [];
-
-		for ( var i = 0; i < metadata.boneCount; i++ ) {
-
-			pmx.bones.push( parseBone() );
-
-		}
-
-	};
-
-	var parseMorphs = function () {
-
-		var parseMorph = function () {
-
-			var p = {};
-			p.name = dv.getTextBuffer();
-			p.englishName = dv.getTextBuffer();
-			p.panel = dv.getUint8();
-			p.type = dv.getUint8();
-			p.elementCount = dv.getUint32();
-			p.elements = [];
-
-			for ( var i = 0; i < p.elementCount; i++ ) {
-
-				if ( p.type === 0 ) {  // group morph
-
-					var m = {};
-					m.index = dv.getIndex( pmx.metadata.morphIndexSize );
-					m.ratio = dv.getFloat32();
-					p.elements.push( m );
-
-				} else if ( p.type === 1 ) {  // vertex morph
-
-					var m = {};
-					m.index = dv.getIndex( pmx.metadata.vertexIndexSize, true );
-					m.position = dv.getFloat32Array( 3 );
-					p.elements.push( m );
-
-				} else if ( p.type === 2 ) {  // bone morph
-
-					var m = {};
-					m.index = dv.getIndex( pmx.metadata.boneIndexSize );
-					m.position = dv.getFloat32Array( 3 );
-					m.rotation = dv.getFloat32Array( 4 );
-					p.elements.push( m );
-
-				} else if ( p.type === 3 ) {  // uv morph
-
-					var m = {};
-					m.index = dv.getIndex( pmx.metadata.vertexIndexSize, true );
-					m.uv = dv.getFloat32Array( 4 );
-					p.elements.push( m );
-
-				} else if ( p.type === 4 ) {  // additional uv1
-
-					// TODO: implement
-
-				} else if ( p.type === 5 ) {  // additional uv2
-
-					// TODO: implement
-
-				} else if ( p.type === 6 ) {  // additional uv3
-
-					// TODO: implement
-
-				} else if ( p.type === 7 ) {  // additional uv4
-
-					// TODO: implement
-
-				} else if ( p.type === 8 ) {  // material morph
-
-					var m = {};
-					m.index = dv.getIndex( pmx.metadata.materialIndexSize );
-					m.type = dv.getUint8();
-					m.diffuse = dv.getFloat32Array( 4 );
-					m.specular = dv.getFloat32Array( 3 );
-					m.shininess = dv.getFloat32();
-					m.ambient = dv.getFloat32Array( 3 );
-					m.edgeColor = dv.getFloat32Array( 4 );
-					m.edgeSize = dv.getFloat32();
-					m.textureColor = dv.getFloat32Array( 4 );
-					m.sphereTextureColor = dv.getFloat32Array( 4 );
-					m.toonColor = dv.getFloat32Array( 4 );
-					p.elements.push( m );
-
-				}
-
-			}
-
-			return p;
-
-		};
-
-		var metadata = pmx.metadata;
-		metadata.morphCount = dv.getUint32();
-
-		pmx.morphs = [];
-
-		for ( var i = 0; i < metadata.morphCount; i++ ) {
-
-			pmx.morphs.push( parseMorph() );
-
-		}
-
-	};
-
-	var parseFrames = function () {
-
-		var parseFrame = function () {
-
-			var p = {};
-			p.name = dv.getTextBuffer();
-			p.englishName = dv.getTextBuffer();
-			p.type = dv.getUint8();
-			p.elementCount = dv.getUint32();
-			p.elements = [];
-
-			for ( var i = 0; i < p.elementCount; i++ ) {
-
-				var e = {};
-				e.target = dv.getUint8();
-				e.index = ( e.target === 0 ) ? dv.getIndex( pmx.metadata.boneIndexSize ) : dv.getIndex( pmx.metadata.morphIndexSize );
-				p.elements.push( e );
-
-			}
-
-			return p;
-
-		};
-
-		var metadata = pmx.metadata;
-		metadata.frameCount = dv.getUint32();
-
-		pmx.frames = [];
-
-		for ( var i = 0; i < metadata.frameCount; i++ ) {
-
-			pmx.frames.push( parseFrame() );
-
-		}
-
-	};
-
-	var parseRigidBodies = function () {
-
-		var parseRigidBody = function () {
-
-			var p = {};
-			p.name = dv.getTextBuffer();
-			p.englishName = dv.getTextBuffer();
-			p.boneIndex = dv.getIndex( pmx.metadata.boneIndexSize );
-			p.groupIndex = dv.getUint8();
-			p.groupTarget = dv.getUint16();
-			p.shapeType = dv.getUint8();
-			p.width = dv.getFloat32();
-			p.height = dv.getFloat32();
-			p.depth = dv.getFloat32();
-			p.position = dv.getFloat32Array( 3 );
-			p.rotation = dv.getFloat32Array( 3 );
-			p.weight = dv.getFloat32();
-			p.positionDamping = dv.getFloat32();
-			p.rotationDamping = dv.getFloat32();
-			p.restitution = dv.getFloat32();
-			p.friction = dv.getFloat32();
-			p.type = dv.getUint8();
-			return p;
-
-		};
-
-		var metadata = pmx.metadata;
-		metadata.rigidBodyCount = dv.getUint32();
-
-		pmx.rigidBodies = [];
-
-		for ( var i = 0; i < metadata.rigidBodyCount; i++ ) {
-
-			pmx.rigidBodies.push( parseRigidBody() );
-
-		}
-
-	};
-
-	var parseConstraints = function () {
-
-		var parseConstraint = function () {
-
-			var p = {};
-			p.name = dv.getTextBuffer();
-			p.englishName = dv.getTextBuffer();
-			p.type = dv.getUint8();
-			p.rigidBodyIndex1 = dv.getIndex( pmx.metadata.rigidBodyIndexSize );
-			p.rigidBodyIndex2 = dv.getIndex( pmx.metadata.rigidBodyIndexSize );
-			p.position = dv.getFloat32Array( 3 );
-			p.rotation = dv.getFloat32Array( 3 );
-			p.translationLimitation1 = dv.getFloat32Array( 3 );
-			p.translationLimitation2 = dv.getFloat32Array( 3 );
-			p.rotationLimitation1 = dv.getFloat32Array( 3 );
-			p.rotationLimitation2 = dv.getFloat32Array( 3 );
-			p.springPosition = dv.getFloat32Array( 3 );
-			p.springRotation = dv.getFloat32Array( 3 );
-			return p;
-
-		};
-
-		var metadata = pmx.metadata;
-		metadata.constraintCount = dv.getUint32();
-
-		pmx.constraints = [];
-
-		for ( var i = 0; i < metadata.constraintCount; i++ ) {
-
-			pmx.constraints.push( parseConstraint() );
-
-		}
-
-	};
-
-	parseHeader();
-	parseVertices();
-	parseFaces();
-	parseTextures();
-	parseMaterials();
-	parseBones();
-	parseMorphs();
-	parseFrames();
-	parseRigidBodies();
-	parseConstraints();
-
-	if ( leftToRight === true ) this.leftToRightModel( pmx );
-
-	// console.log( pmx ); // for console debug
-
-	return pmx;
-
-};
-
-Parser.prototype.parseVmd = function ( buffer, leftToRight ) {
-
-	var vmd = {};
-	var dv = new DataViewEx( buffer );
-
-	vmd.metadata = {};
-	vmd.metadata.coordinateSystem = 'left';
-
-	var parseHeader = function () {
-
-		var metadata = vmd.metadata;
-		metadata.magic = dv.getChars( 30 );
-
-		if ( metadata.magic !== 'Vocaloid Motion Data 0002' ) {
-
-			throw 'VMD file magic is not Vocaloid Motion Data 0002, but ' + metadata.magic;
-
-		}
-
-		metadata.name = dv.getSjisStringsAsUnicode( 20 );
-
-	};
-
-	var parseMotions = function () {
-
-		var parseMotion = function () {
-
-			var p = {};
-			p.boneName = dv.getSjisStringsAsUnicode( 15 );
-			p.frameNum = dv.getUint32();
-			p.position = dv.getFloat32Array( 3 );
-			p.rotation = dv.getFloat32Array( 4 );
-			p.interpolation = dv.getUint8Array( 64 );
-			return p;
-
-		};
-
-		var metadata = vmd.metadata;
-		metadata.motionCount = dv.getUint32();
-
-		vmd.motions = [];
-		for ( var i = 0; i < metadata.motionCount; i++ ) {
-
-			vmd.motions.push( parseMotion() );
-
-		}
-
-	};
-
-	var parseMorphs = function () {
-
-		var parseMorph = function () {
-
-			var p = {};
-			p.morphName = dv.getSjisStringsAsUnicode( 15 );
-			p.frameNum = dv.getUint32();
-			p.weight = dv.getFloat32();
-			return p;
-
-		};
-
-		var metadata = vmd.metadata;
-		metadata.morphCount = dv.getUint32();
-
-		vmd.morphs = [];
-		for ( var i = 0; i < metadata.morphCount; i++ ) {
-
-			vmd.morphs.push( parseMorph() );
-
-		}
-
-	};
-
-	var parseCameras = function () {
-
-		var parseCamera = function () {
-
-			var p = {};
-			p.frameNum = dv.getUint32();
-			p.distance = dv.getFloat32();
-			p.position = dv.getFloat32Array( 3 );
-			p.rotation = dv.getFloat32Array( 3 );
-			p.interpolation = dv.getUint8Array( 24 );
-			p.fov = dv.getUint32();
-			p.perspective = dv.getUint8();
-			return p;
-
-		};
-
-		var metadata = vmd.metadata;
-		metadata.cameraCount = dv.getUint32();
-
-		vmd.cameras = [];
-		for ( var i = 0; i < metadata.cameraCount; i++ ) {
-
-			vmd.cameras.push( parseCamera() );
-
-		}
-
-	};
-
-	parseHeader();
-	parseMotions();
-	parseMorphs();
-	parseCameras();
-
-	if ( leftToRight === true ) this.leftToRightVmd( vmd );
-
-	// console.log( vmd ); // for console debug
-
-	return vmd;
-
-};
-
-Parser.prototype.parseVpd = function ( text, leftToRight ) {
-
-	var vpd = {};
-
-	vpd.metadata = {};
-	vpd.metadata.coordinateSystem = 'left';
-
-	vpd.bones = [];
-
-	var commentPatternG = /\/\/\w*(\r|\n|\r\n)/g;
-	var newlinePattern = /\r|\n|\r\n/;
-
-	var lines = text.replace( commentPatternG, '' ).split( newlinePattern );
-
-	function throwError () {
-
-		throw 'the file seems not vpd file.';
-
-	}
-
-	function checkMagic () {
-
-		if ( lines[ 0 ] !== 'Vocaloid Pose Data file' ) {
-
-			throwError();
-
-		}
-
-	}
-
-	function parseHeader () {
-
-		if ( lines.length < 4 ) {
-
-			throwError();
-
-		}
-
-		vpd.metadata.parentFile = lines[ 2 ];
-		vpd.metadata.boneCount = parseInt( lines[ 3 ] );
-
-	}
-
-	function parseBones () {
-
-		var boneHeaderPattern = /^\s*(Bone[0-9]+)\s*\{\s*(.*)$/;
-		var boneVectorPattern = /^\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*;/;
-		var boneQuaternionPattern = /^\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*;/;
-		var boneFooterPattern = /^\s*}/;
-
-		var bones = vpd.bones;
-		var n = null;
-		var v = null;
-		var q = null;
-
-		for ( var i = 4; i < lines.length; i++ ) {
-
-			var line = lines[ i ];
-
-			var result;
-
-			result = line.match( boneHeaderPattern );
-
-			if ( result !== null ) {
-
-				if ( n !== null ) {
-
-					throwError();
-
-				}
-
-				n = result[ 2 ];
-
-			}
-
-			result = line.match( boneVectorPattern );
-
-			if ( result !== null ) {
-
-				if ( v !== null ) {
-
-					throwError();
-
-				}
-
-				v = [
-
-					parseFloat( result[ 1 ] ),
-					parseFloat( result[ 2 ] ),
-					parseFloat( result[ 3 ] )
-
-				];
-
-			}
-
-			result = line.match( boneQuaternionPattern );
-
-			if ( result !== null ) {
-
-				if ( q !== null ) {
-
-					throwError();
-
-				}
-
-				q = [
-
-					parseFloat( result[ 1 ] ),
-					parseFloat( result[ 2 ] ),
-					parseFloat( result[ 3 ] ),
-					parseFloat( result[ 4 ] )
-
-				];
-
-
-			}
-
-			result = line.match( boneFooterPattern );
-
-			if ( result !== null ) {
-
-				if ( n === null || v === null || q === null ) {
-
-					throwError();
-
-				}
-
-				bones.push( {
-
-					name: n,
-					translation: v,
-					quaternion: q
-
-				} );
-
-				n = null;
-				v = null;
-				q = null;
-
-			}
-
-		}
-
-		if ( n !== null || v !== null || q !== null ) {
-
-			throwError();
-
-		}
-
-	}
-
-	checkMagic();
-	parseHeader();
-	parseBones();
-
-	if ( leftToRight === true ) this.leftToRightVpd( vpd );
-
-	// console.log( vpd );  // for console debug
-
-	return vpd;
-
-};
-
-Parser.prototype.mergeVmds = function ( vmds ) {
-
-	var v = {};
-	v.metadata = {};
-	v.metadata.name = vmds[ 0 ].metadata.name;
-	v.metadata.coordinateSystem = vmds[ 0 ].metadata.coordinateSystem;
-	v.metadata.motionCount = 0;
-	v.metadata.morphCount = 0;
-	v.metadata.cameraCount = 0;
-	v.motions = [];
-	v.morphs = [];
-	v.cameras = [];
-
-	for ( var i = 0; i < vmds.length; i++ ) {
-
-		var v2 = vmds[ i ];
-
-		v.metadata.motionCount += v2.metadata.motionCount;
-		v.metadata.morphCount += v2.metadata.morphCount;
-		v.metadata.cameraCount += v2.metadata.cameraCount;
-
-		for ( var j = 0; j < v2.metadata.motionCount; j++ ) {
-
-			v.motions.push( v2.motions[ j ] );
-
-		}
-
-		for ( var j = 0; j < v2.metadata.morphCount; j++ ) {
-
-			v.morphs.push( v2.morphs[ j ] );
-
-		}
-
-		for ( var j = 0; j < v2.metadata.cameraCount; j++ ) {
-
-			v.cameras.push( v2.cameras[ j ] );
-
-		}
-
-	}
-
-	return v;
-
-};
-
-Parser.prototype.leftToRightModel = function ( model ) {
-
-	if ( model.metadata.coordinateSystem === 'right' ) {
-
-		return;
-
-	}
-
-	model.metadata.coordinateSystem = 'right';
-
-	var helper = new DataCreationHelper();
-
-	for ( var i = 0; i < model.metadata.vertexCount; i++ ) {
-
-		helper.leftToRightVector3( model.vertices[ i ].position );
-		helper.leftToRightVector3( model.vertices[ i ].normal );
-
-	}
-
-	for ( var i = 0; i < model.metadata.faceCount; i++ ) {
-
-		helper.leftToRightIndexOrder( model.faces[ i ].indices );
-
-	}
-
-	for ( var i = 0; i < model.metadata.boneCount; i++ ) {
-
-		helper.leftToRightVector3( model.bones[ i ].position );
-
-	}
-
-	// TODO: support other morph for PMX
-	for ( var i = 0; i < model.metadata.morphCount; i++ ) {
-
-		var m = model.morphs[ i ];
-
-		if ( model.metadata.format === 'pmx' && m.type !== 1 ) {
-
-			// TODO: implement
-			continue;
-
-		}
-
-		for ( var j = 0; j < m.elements.length; j++ ) {
-
-			helper.leftToRightVector3( m.elements[ j ].position );
-
-		}
-
-	}
-
-	for ( var i = 0; i < model.metadata.rigidBodyCount; i++ ) {
-
-		helper.leftToRightVector3( model.rigidBodies[ i ].position );
-		helper.leftToRightEuler( model.rigidBodies[ i ].rotation );
-
-	}
-
-	for ( var i = 0; i < model.metadata.constraintCount; i++ ) {
-
-		helper.leftToRightVector3( model.constraints[ i ].position );
-		helper.leftToRightEuler( model.constraints[ i ].rotation );
-		helper.leftToRightVector3Range( model.constraints[ i ].translationLimitation1, model.constraints[ i ].translationLimitation2 );
-		helper.leftToRightEulerRange( model.constraints[ i ].rotationLimitation1, model.constraints[ i ].rotationLimitation2 );
-
-	}
-
-};
-
-Parser.prototype.leftToRightVmd = function ( vmd ) {
-
-	if ( vmd.metadata.coordinateSystem === 'right' ) {
-
-		return;
-
-	}
-
-	vmd.metadata.coordinateSystem = 'right';
-
-	var helper = new DataCreationHelper();
-
-	for ( var i = 0; i < vmd.metadata.motionCount; i++ ) {
-
-		helper.leftToRightVector3( vmd.motions[ i ].position );
-		helper.leftToRightQuaternion( vmd.motions[ i ].rotation );
-
-	}
-
-	for ( var i = 0; i < vmd.metadata.cameraCount; i++ ) {
-
-		helper.leftToRightVector3( vmd.cameras[ i ].position );
-		helper.leftToRightEuler( vmd.cameras[ i ].rotation );
-
-	}
-
-};
-
-Parser.prototype.leftToRightVpd = function ( vpd ) {
-
-	if ( vpd.metadata.coordinateSystem === 'right' ) {
-
-		return;
-
-	}
-
-	vpd.metadata.coordinateSystem = 'right';
-
-	var helper = new DataCreationHelper();
-
-	for ( var i = 0; i < vpd.bones.length; i++ ) {
-
-		helper.leftToRightVector3( vpd.bones[ i ].translation );
-		helper.leftToRightQuaternion( vpd.bones[ i ].quaternion );
-
-	}
-
-};
-
-var MMDParser = {
-  CharsetEncoder: CharsetEncoder,
-  Parser: Parser
-};
-
-exports.MMDParser = MMDParser;
-exports.CharsetEncoder = CharsetEncoder;
-exports.Parser = Parser;
-
-Object.defineProperty(exports, '__esModule', { value: true });
-
-})));
-
-
-/***/ }),
-
-/***/ 97142:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-
-exports.I = function (renderer) {
-    // CSSOM support only browser environment.
-    if (!renderer.client) return;
-
-    if (false) {}
-
-    // Style sheet for media queries.
-    document.head.appendChild(renderer.msh = document.createElement('style'));
-
-    renderer.createRule = function (selector, prelude) {
-        var rawCss = selector + '{}';
-        if (prelude) rawCss = prelude + '{' + rawCss + '}';
-        var sheet = prelude ? renderer.msh.sheet : renderer.sh.sheet;
-        var index = sheet.insertRule(rawCss, sheet.cssRules.length);
-        var rule = (sheet.cssRules || sheet.rules)[index];
-
-        // Keep track of `index` where rule was inserted in the sheet. This is
-        // needed for rule deletion.
-        rule.index = index;
-
-        if (prelude) {
-            // If rule has media query (it has prelude), move style (CSSStyleDeclaration)
-            // object to the "top" to normalize it with a rule without the media
-            // query, so that both rules have `.style` property available.
-            var selectorRule = (rule.cssRules || rule.rules)[0];
-            rule.style = selectorRule.style;
-            rule.styleMap = selectorRule.styleMap;
-        }
-
-        return rule;
-    };
-};
-
-
-/***/ }),
-
-/***/ 52099:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-
-var removeRule = (__webpack_require__(39662)/* .removeRule */ .D);
-
-exports.I = function (renderer) {
-    // VCSSOM support only browser environment.
-    if (!renderer.client) return;
-
-    if (false) {}
-
-    var kebab = renderer.kebab;
-
-    function VRule (selector, prelude) {
-        this.rule = renderer.createRule(selector, prelude);
-        this.decl = {};
-    }
-    VRule.prototype.diff = function (newDecl) {
-        var oldDecl = this.decl;
-        var style = this.rule.style;
-        var property;
-        for (property in oldDecl)
-            if (newDecl[property] === undefined)
-                style.removeProperty(property);
-        for (property in newDecl)
-            if (newDecl[property] !== oldDecl[property])
-                style.setProperty(kebab(property), newDecl[property]);
-        this.decl = newDecl;
-    };
-    VRule.prototype.del = function () {
-        removeRule(this.rule);
-    };
-
-    function VSheet () {
-        /**
-         * {
-         *   '<at-rule-prelude>': {
-         *     '<selector>': {
-         *       color: 'red
-         *     }
-         *   }
-         * }
-         */
-        this.tree = {};
-    }
-    VSheet.prototype.diff = function (newTree) {
-        var oldTree = this.tree;
-
-        // Remove media queries not present in new tree.
-        for (var prelude in oldTree) {
-            if (newTree[prelude] === undefined) {
-                var rules = oldTree[prelude];
-                for (var selector in rules)
-                    rules[selector].del();
-            }
-        }
-
-        for (var prelude in newTree) {
-            if (oldTree[prelude] === undefined) {
-                // Whole media query is new.
-                for (var selector in newTree[prelude]) {
-                    var rule = new VRule(selector, prelude);
-                    rule.diff(newTree[prelude][selector]);
-                    newTree[prelude][selector] = rule;
-                }
-            } else {
-                // Old tree already has rules with this media query.
-                var oldRules = oldTree[prelude];
-                var newRules = newTree[prelude];
-
-                // Remove rules not present in new tree.
-                for (var selector in oldRules)
-                    if (!newRules[selector])
-                        oldRules[selector].del();
-
-                // Apply new rules.
-                for (var selector in newRules) {
-                    var rule = oldRules[selector];
-                    if (rule) {
-                        rule.diff(newRules[selector]);
-                        newRules[selector] = rule;
-                    } else {
-                        rule = new VRule(selector, prelude);
-                        rule.diff(newRules[selector]);
-                        newRules[selector] = rule;
-                    }
-                }
-            }
-        }
-
-        this.tree = newTree;
-    };
-
-    renderer.VRule = VRule;
-    renderer.VSheet = VSheet;
-};
-
-
-/***/ }),
-
-/***/ 87749:
-/***/ ((__unused_webpack_module, exports) => {
-
-function cssToTree (tree, css, selector, prelude) {
-    var declarations = {};
-    var hasDeclarations = false;
-    var key, value;
-
-    for (key in css) {
-        value = css[key];
-        if (typeof value !== 'object') {
-            hasDeclarations = true;
-            declarations[key] = value;
-        }
-    }
-
-    if (hasDeclarations) {
-        if (!tree[prelude]) tree[prelude] = {};
-        tree[prelude][selector] = declarations;
-    }
-
-    for (key in css) {
-        value = css[key];
-        if (typeof value === 'object') {
-            if (key[0] === '@') {
-                cssToTree(tree, value, selector, key);
-            } else {
-                var hasCurrentSymbol = key.indexOf('&') > -1;
-                var selectorParts = selector.split(',');
-                if (hasCurrentSymbol) {
-                    for (var i = 0; i < selectorParts.length; i++) {
-                        selectorParts[i] = key.replace(/&/g, selectorParts[i]);
-                    }
-                } else {
-                    for (var i = 0; i < selectorParts.length; i++) {
-                        selectorParts[i] = selectorParts[i] + ' ' + key;
-                    }
-                }
-                cssToTree(tree, value, selectorParts.join(','), prelude);
-            }
-        }
-    }
-};
-
-exports.z = cssToTree;
-
-
-/***/ }),
-
-/***/ 39662:
-/***/ ((__unused_webpack_module, exports) => {
-
-function removeRule (rule) {
-    var maxIndex = rule.index;
-    var sh = rule.parentStyleSheet;
-    var rules = sh.cssRules || sh.rules;
-    maxIndex = Math.max(maxIndex, rules.length - 1);
-    while (maxIndex >= 0) {
-        if (rules[maxIndex] === rule) {
-            sh.deleteRule(maxIndex);
-            break;
-        }
-        maxIndex--;
-    }
-}
-
-exports.D = removeRule;
-
-
-/***/ }),
-
-/***/ 40818:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-
-var KEBAB_REGEX = /[A-Z]/g;
-
-var hash = function (str) {
-    var h = 5381, i = str.length;
-
-    while (i) h = (h * 33) ^ str.charCodeAt(--i);
-
-    return '_' + (h >>> 0).toString(36);
-};
-
-exports.U = function (config) {
-    config = config || {};
-    var assign = config.assign || Object.assign;
-    var client = typeof window === 'object';
-
-    // Check if we are really in browser environment.
-    if (false) {}
-
-    var renderer = assign({
-        raw: '',
-        pfx: '_',
-        client: client,
-        assign: assign,
-        stringify: JSON.stringify,
-        kebab: function (prop) {
-            return prop.replace(KEBAB_REGEX, '-$&').toLowerCase();
-        },
-        decl: function (key, value) {
-            key = renderer.kebab(key);
-            return key + ':' + value + ';';
-        },
-        hash: function (obj) {
-            return hash(renderer.stringify(obj));
-        },
-        selector: function (parent, selector) {
-            return parent + (selector[0] === ':' ? ''  : ' ') + selector;
-        },
-        putRaw: function (rawCssRule) {
-            renderer.raw += rawCssRule;
-        }
-    }, config);
-
-    if (renderer.client) {
-        if (!renderer.sh)
-            document.head.appendChild(renderer.sh = document.createElement('style'));
-
-        if (false) {}
-
-        renderer.putRaw = function (rawCssRule) {
-            // .insertRule() is faster than .appendChild(), that's why we use it in PROD.
-            // But CSS injected using .insertRule() is not displayed in Chrome Devtools,
-            // that's why we use .appendChild in DEV.
-            if (true) {
-                var sheet = renderer.sh.sheet;
-
-                // Unknown pseudo-selectors will throw, this try/catch swallows all errors.
-                try {
-                    sheet.insertRule(rawCssRule, sheet.cssRules.length);
-                // eslint-disable-next-line no-empty
-                } catch (error) {}
-            } else {}
-        };
-    }
-
-    renderer.put = function (selector, decls, atrule) {
-        var str = '';
-        var prop, value;
-        var postponed = [];
-
-        for (prop in decls) {
-            value = decls[prop];
-
-            if ((value instanceof Object) && !(value instanceof Array)) {
-                postponed.push(prop);
-            } else {
-                if (false) {} else {
-                    str += renderer.decl(prop, value, selector, atrule);
-                }
-            }
-        }
-
-        if (str) {
-            if (false) {} else {
-                str = selector + '{' + str + '}';
-            }
-            renderer.putRaw(atrule ? atrule + '{' + str + '}' : str);
-        }
-
-        for (var i = 0; i < postponed.length; i++) {
-            prop = postponed[i];
-
-            if (prop[0] === '@' && prop !== '@font-face') {
-                renderer.putAt(selector, decls[prop], prop);
-            } else {
-                renderer.put(renderer.selector(selector, prop), decls[prop], atrule);
-            }
-        }
-    };
-
-    renderer.putAt = renderer.put;
-
-    return renderer;
-};
-
-
-/***/ }),
-
-/***/ 74865:
-/***/ (function(module, exports, __webpack_require__) {
-
-var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
- * @license MIT */
-
-;(function(root, factory) {
-
-  if (true) {
-    !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
-		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
-		(__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) :
-		__WEBPACK_AMD_DEFINE_FACTORY__),
-		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__));
-  } else {}
-
-})(this, function() {
-  var NProgress = {};
-
-  NProgress.version = '0.2.0';
-
-  var Settings = NProgress.settings = {
-    minimum: 0.08,
-    easing: 'ease',
-    positionUsing: '',
-    speed: 200,
-    trickle: true,
-    trickleRate: 0.02,
-    trickleSpeed: 800,
-    showSpinner: true,
-    barSelector: '[role="bar"]',
-    spinnerSelector: '[role="spinner"]',
-    parent: 'body',
-    template: '<div class="bar" role="bar"><div class="peg"></div></div><div class="spinner" role="spinner"><div class="spinner-icon"></div></div>'
-  };
-
-  /**
-   * Updates configuration.
-   *
-   *     NProgress.configure({
-   *       minimum: 0.1
-   *     });
-   */
-  NProgress.configure = function(options) {
-    var key, value;
-    for (key in options) {
-      value = options[key];
-      if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;
-    }
-
-    return this;
-  };
-
-  /**
-   * Last number.
-   */
-
-  NProgress.status = null;
-
-  /**
-   * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.
-   *
-   *     NProgress.set(0.4);
-   *     NProgress.set(1.0);
-   */
-
-  NProgress.set = function(n) {
-    var started = NProgress.isStarted();
-
-    n = clamp(n, Settings.minimum, 1);
-    NProgress.status = (n === 1 ? null : n);
-
-    var progress = NProgress.render(!started),
-        bar      = progress.querySelector(Settings.barSelector),
-        speed    = Settings.speed,
-        ease     = Settings.easing;
-
-    progress.offsetWidth; /* Repaint */
-
-    queue(function(next) {
-      // Set positionUsing if it hasn't already been set
-      if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();
-
-      // Add transition
-      css(bar, barPositionCSS(n, speed, ease));
-
-      if (n === 1) {
-        // Fade out
-        css(progress, { 
-          transition: 'none', 
-          opacity: 1 
-        });
-        progress.offsetWidth; /* Repaint */
-
-        setTimeout(function() {
-          css(progress, { 
-            transition: 'all ' + speed + 'ms linear', 
-            opacity: 0 
-          });
-          setTimeout(function() {
-            NProgress.remove();
-            next();
-          }, speed);
-        }, speed);
-      } else {
-        setTimeout(next, speed);
-      }
-    });
-
-    return this;
-  };
-
-  NProgress.isStarted = function() {
-    return typeof NProgress.status === 'number';
-  };
-
-  /**
-   * Shows the progress bar.
-   * This is the same as setting the status to 0%, except that it doesn't go backwards.
-   *
-   *     NProgress.start();
-   *
-   */
-  NProgress.start = function() {
-    if (!NProgress.status) NProgress.set(0);
-
-    var work = function() {
-      setTimeout(function() {
-        if (!NProgress.status) return;
-        NProgress.trickle();
-        work();
-      }, Settings.trickleSpeed);
-    };
-
-    if (Settings.trickle) work();
-
-    return this;
-  };
-
-  /**
-   * Hides the progress bar.
-   * This is the *sort of* the same as setting the status to 100%, with the
-   * difference being `done()` makes some placebo effect of some realistic motion.
-   *
-   *     NProgress.done();
-   *
-   * If `true` is passed, it will show the progress bar even if its hidden.
-   *
-   *     NProgress.done(true);
-   */
-
-  NProgress.done = function(force) {
-    if (!force && !NProgress.status) return this;
-
-    return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);
-  };
-
-  /**
-   * Increments by a random amount.
-   */
-
-  NProgress.inc = function(amount) {
-    var n = NProgress.status;
-
-    if (!n) {
-      return NProgress.start();
-    } else {
-      if (typeof amount !== 'number') {
-        amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95);
-      }
-
-      n = clamp(n + amount, 0, 0.994);
-      return NProgress.set(n);
-    }
-  };
-
-  NProgress.trickle = function() {
-    return NProgress.inc(Math.random() * Settings.trickleRate);
-  };
-
-  /**
-   * Waits for all supplied jQuery promises and
-   * increases the progress as the promises resolve.
-   *
-   * @param $promise jQUery Promise
-   */
-  (function() {
-    var initial = 0, current = 0;
-
-    NProgress.promise = function($promise) {
-      if (!$promise || $promise.state() === "resolved") {
-        return this;
-      }
-
-      if (current === 0) {
-        NProgress.start();
-      }
-
-      initial++;
-      current++;
-
-      $promise.always(function() {
-        current--;
-        if (current === 0) {
-            initial = 0;
-            NProgress.done();
-        } else {
-            NProgress.set((initial - current) / initial);
-        }
-      });
-
-      return this;
-    };
-
-  })();
-
-  /**
-   * (Internal) renders the progress bar markup based on the `template`
-   * setting.
-   */
-
-  NProgress.render = function(fromStart) {
-    if (NProgress.isRendered()) return document.getElementById('nprogress');
-
-    addClass(document.documentElement, 'nprogress-busy');
-    
-    var progress = document.createElement('div');
-    progress.id = 'nprogress';
-    progress.innerHTML = Settings.template;
-
-    var bar      = progress.querySelector(Settings.barSelector),
-        perc     = fromStart ? '-100' : toBarPerc(NProgress.status || 0),
-        parent   = document.querySelector(Settings.parent),
-        spinner;
-    
-    css(bar, {
-      transition: 'all 0 linear',
-      transform: 'translate3d(' + perc + '%,0,0)'
-    });
-
-    if (!Settings.showSpinner) {
-      spinner = progress.querySelector(Settings.spinnerSelector);
-      spinner && removeElement(spinner);
-    }
-
-    if (parent != document.body) {
-      addClass(parent, 'nprogress-custom-parent');
-    }
-
-    parent.appendChild(progress);
-    return progress;
-  };
-
-  /**
-   * Removes the element. Opposite of render().
-   */
-
-  NProgress.remove = function() {
-    removeClass(document.documentElement, 'nprogress-busy');
-    removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent');
-    var progress = document.getElementById('nprogress');
-    progress && removeElement(progress);
-  };
-
-  /**
-   * Checks if the progress bar is rendered.
-   */
-
-  NProgress.isRendered = function() {
-    return !!document.getElementById('nprogress');
-  };
-
-  /**
-   * Determine which positioning CSS rule to use.
-   */
-
-  NProgress.getPositioningCSS = function() {
-    // Sniff on document.body.style
-    var bodyStyle = document.body.style;
-
-    // Sniff prefixes
-    var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :
-                       ('MozTransform' in bodyStyle) ? 'Moz' :
-                       ('msTransform' in bodyStyle) ? 'ms' :
-                       ('OTransform' in bodyStyle) ? 'O' : '';
-
-    if (vendorPrefix + 'Perspective' in bodyStyle) {
-      // Modern browsers with 3D support, e.g. Webkit, IE10
-      return 'translate3d';
-    } else if (vendorPrefix + 'Transform' in bodyStyle) {
-      // Browsers without 3D support, e.g. IE9
-      return 'translate';
-    } else {
-      // Browsers without translate() support, e.g. IE7-8
-      return 'margin';
-    }
-  };
-
-  /**
-   * Helpers
-   */
-
-  function clamp(n, min, max) {
-    if (n < min) return min;
-    if (n > max) return max;
-    return n;
-  }
-
-  /**
-   * (Internal) converts a percentage (`0..1`) to a bar translateX
-   * percentage (`-100%..0%`).
-   */
-
-  function toBarPerc(n) {
-    return (-1 + n) * 100;
-  }
-
-
-  /**
-   * (Internal) returns the correct CSS for changing the bar's
-   * position given an n percentage, and speed and ease from Settings
-   */
-
-  function barPositionCSS(n, speed, ease) {
-    var barCSS;
-
-    if (Settings.positionUsing === 'translate3d') {
-      barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };
-    } else if (Settings.positionUsing === 'translate') {
-      barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };
-    } else {
-      barCSS = { 'margin-left': toBarPerc(n)+'%' };
-    }
-
-    barCSS.transition = 'all '+speed+'ms '+ease;
-
-    return barCSS;
-  }
-
-  /**
-   * (Internal) Queues a function to be executed.
-   */
-
-  var queue = (function() {
-    var pending = [];
-    
-    function next() {
-      var fn = pending.shift();
-      if (fn) {
-        fn(next);
-      }
-    }
-
-    return function(fn) {
-      pending.push(fn);
-      if (pending.length == 1) next();
-    };
-  })();
-
-  /**
-   * (Internal) Applies css properties to an element, similar to the jQuery 
-   * css method.
-   *
-   * While this helper does assist with vendor prefixed property names, it 
-   * does not perform any manipulation of values prior to setting styles.
-   */
-
-  var css = (function() {
-    var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],
-        cssProps    = {};
-
-    function camelCase(string) {
-      return string.replace(/^-ms-/, 'ms-').replace(/-([\da-z])/gi, function(match, letter) {
-        return letter.toUpperCase();
-      });
-    }
-
-    function getVendorProp(name) {
-      var style = document.body.style;
-      if (name in style) return name;
-
-      var i = cssPrefixes.length,
-          capName = name.charAt(0).toUpperCase() + name.slice(1),
-          vendorName;
-      while (i--) {
-        vendorName = cssPrefixes[i] + capName;
-        if (vendorName in style) return vendorName;
-      }
-
-      return name;
-    }
-
-    function getStyleProp(name) {
-      name = camelCase(name);
-      return cssProps[name] || (cssProps[name] = getVendorProp(name));
-    }
-
-    function applyCss(element, prop, value) {
-      prop = getStyleProp(prop);
-      element.style[prop] = value;
-    }
-
-    return function(element, properties) {
-      var args = arguments,
-          prop, 
-          value;
-
-      if (args.length == 2) {
-        for (prop in properties) {
-          value = properties[prop];
-          if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);
-        }
-      } else {
-        applyCss(element, args[1], args[2]);
-      }
-    }
-  })();
-
-  /**
-   * (Internal) Determines if an element or space separated list of class names contains a class name.
-   */
-
-  function hasClass(element, name) {
-    var list = typeof element == 'string' ? element : classList(element);
-    return list.indexOf(' ' + name + ' ') >= 0;
-  }
-
-  /**
-   * (Internal) Adds a class to an element.
-   */
-
-  function addClass(element, name) {
-    var oldList = classList(element),
-        newList = oldList + name;
-
-    if (hasClass(oldList, name)) return; 
-
-    // Trim the opening space.
-    element.className = newList.substring(1);
-  }
-
-  /**
-   * (Internal) Removes a class from an element.
-   */
-
-  function removeClass(element, name) {
-    var oldList = classList(element),
-        newList;
-
-    if (!hasClass(element, name)) return;
-
-    // Replace the class name.
-    newList = oldList.replace(' ' + name + ' ', ' ');
-
-    // Trim the opening and closing spaces.
-    element.className = newList.substring(1, newList.length - 1);
-  }
-
-  /**
-   * (Internal) Gets a space separated list of the class names on the element. 
-   * The list is wrapped with a single space on each end to facilitate finding 
-   * matches within the list.
-   */
-
-  function classList(element) {
-    return (' ' + (element.className || '') + ' ').replace(/\s+/gi, ' ');
-  }
-
-  /**
-   * (Internal) Removes an element from the DOM.
-   */
-
-  function removeElement(element) {
-    element && element.parentNode && element.parentNode.removeChild(element);
-  }
-
-  return NProgress;
-});
-
-
-
-/***/ }),
-
-/***/ 27418:
-/***/ ((module) => {
-
-"use strict";
-/*
-object-assign
-(c) Sindre Sorhus
-@license MIT
-*/
-
-
-/* eslint-disable no-unused-vars */
-var getOwnPropertySymbols = Object.getOwnPropertySymbols;
-var hasOwnProperty = Object.prototype.hasOwnProperty;
-var propIsEnumerable = Object.prototype.propertyIsEnumerable;
-
-function toObject(val) {
-	if (val === null || val === undefined) {
-		throw new TypeError('Object.assign cannot be called with null or undefined');
-	}
-
-	return Object(val);
-}
-
-function shouldUseNative() {
-	try {
-		if (!Object.assign) {
-			return false;
-		}
-
-		// Detect buggy property enumeration order in older V8 versions.
-
-		// https://bugs.chromium.org/p/v8/issues/detail?id=4118
-		var test1 = new String('abc');  // eslint-disable-line no-new-wrappers
-		test1[5] = 'de';
-		if (Object.getOwnPropertyNames(test1)[0] === '5') {
-			return false;
-		}
-
-		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
-		var test2 = {};
-		for (var i = 0; i < 10; i++) {
-			test2['_' + String.fromCharCode(i)] = i;
-		}
-		var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
-			return test2[n];
-		});
-		if (order2.join('') !== '0123456789') {
-			return false;
-		}
-
-		// https://bugs.chromium.org/p/v8/issues/detail?id=3056
-		var test3 = {};
-		'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
-			test3[letter] = letter;
-		});
-		if (Object.keys(Object.assign({}, test3)).join('') !==
-				'abcdefghijklmnopqrst') {
-			return false;
-		}
-
-		return true;
-	} catch (err) {
-		// We don't expect any of the above to throw, but better to be safe.
-		return false;
-	}
-}
-
-module.exports = shouldUseNative() ? Object.assign : function (target, source) {
-	var from;
-	var to = toObject(target);
-	var symbols;
-
-	for (var s = 1; s < arguments.length; s++) {
-		from = Object(arguments[s]);
-
-		for (var key in from) {
-			if (hasOwnProperty.call(from, key)) {
-				to[key] = from[key];
-			}
-		}
-
-		if (getOwnPropertySymbols) {
-			symbols = getOwnPropertySymbols(from);
-			for (var i = 0; i < symbols.length; i++) {
-				if (propIsEnumerable.call(from, symbols[i])) {
-					to[symbols[i]] = from[symbols[i]];
-				}
-			}
-		}
-	}
-
-	return to;
-};
-
-
-/***/ }),
-
-/***/ 87594:
-/***/ ((module, exports) => {
-
-/**
- * @param {string} string    The string to parse
- * @returns {Array<number>}  Returns an energetic array.
- */
-function parsePart(string) {
-  let res = [];
-  let m;
-
-  for (let str of string.split(",").map((str) => str.trim())) {
-    // just a number
-    if (/^-?\d+$/.test(str)) {
-      res.push(parseInt(str, 10));
-    } else if (
-      (m = str.match(/^(-?\d+)(-|\.\.\.?|\u2025|\u2026|\u22EF)(-?\d+)$/))
-    ) {
-      // 1-5 or 1..5 (equivalent) or 1...5 (doesn't include 5)
-      let [_, lhs, sep, rhs] = m;
-
-      if (lhs && rhs) {
-        lhs = parseInt(lhs);
-        rhs = parseInt(rhs);
-        const incr = lhs < rhs ? 1 : -1;
-
-        // Make it inclusive by moving the right 'stop-point' away by one.
-        if (sep === "-" || sep === ".." || sep === "\u2025") rhs += incr;
-
-        for (let i = lhs; i !== rhs; i += incr) res.push(i);
-      }
-    }
-  }
-
-  return res;
-}
-
-exports["default"] = parsePart;
-module.exports = parsePart;
-
-
-/***/ }),
-
-/***/ 23746:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Prism": () => (/* reexport */ prism/* default */.Z),
-  "default": () => (/* binding */ dist),
-  "defaultProps": () => (/* binding */ defaultProps)
-});
-
-// EXTERNAL MODULE: ./node_modules/prism-react-renderer/prism/index.js
-var prism = __webpack_require__(87410);
-;// CONCATENATED MODULE: ./node_modules/prism-react-renderer/themes/duotoneDark/index.js
-// Duotone Dark
-// Author: Simurai, adapted from DuoTone themes for Atom (http://simurai.com/projects/2016/01/01/duotone-themes)
-// Conversion: Bram de Haan (http://atelierbram.github.io/Base2Tone-prism/output/prism/prism-base2tone-evening-dark.css)
-// Generated with Base16 Builder (https://github.com/base16-builder/base16-builder)
-var theme = {
-  plain: {
-    backgroundColor: "#2a2734",
-    color: "#9a86fd"
-  },
-  styles: [{
-    types: ["comment", "prolog", "doctype", "cdata", "punctuation"],
-    style: {
-      color: "#6c6783"
-    }
-  }, {
-    types: ["namespace"],
-    style: {
-      opacity: 0.7
-    }
-  }, {
-    types: ["tag", "operator", "number"],
-    style: {
-      color: "#e09142"
-    }
-  }, {
-    types: ["property", "function"],
-    style: {
-      color: "#9a86fd"
-    }
-  }, {
-    types: ["tag-id", "selector", "atrule-id"],
-    style: {
-      color: "#eeebff"
-    }
-  }, {
-    types: ["attr-name"],
-    style: {
-      color: "#c4b9fe"
-    }
-  }, {
-    types: ["boolean", "string", "entity", "url", "attr-value", "keyword", "control", "directive", "unit", "statement", "regex", "atrule", "placeholder", "variable"],
-    style: {
-      color: "#ffcc99"
-    }
-  }, {
-    types: ["deleted"],
-    style: {
-      textDecorationLine: "line-through"
-    }
-  }, {
-    types: ["inserted"],
-    style: {
-      textDecorationLine: "underline"
-    }
-  }, {
-    types: ["italic"],
-    style: {
-      fontStyle: "italic"
-    }
-  }, {
-    types: ["important", "bold"],
-    style: {
-      fontWeight: "bold"
-    }
-  }, {
-    types: ["important"],
-    style: {
-      color: "#c4b9fe"
-    }
-  }]
-};
-
-/* harmony default export */ const duotoneDark = (theme);
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-;// CONCATENATED MODULE: ./node_modules/prism-react-renderer/dist/index.js
-
-
-
-
-
-var defaultProps = {
-  // $FlowFixMe
-  Prism: prism/* default */.Z,
-  theme: duotoneDark
-};
-
-function _defineProperty(obj, key, value) {
-  if (key in obj) {
-    Object.defineProperty(obj, key, {
-      value: value,
-      enumerable: true,
-      configurable: true,
-      writable: true
-    });
-  } else {
-    obj[key] = value;
-  }
-
-  return obj;
-}
-
-function _extends() {
-  _extends = Object.assign || function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-
-    return target;
-  };
-
-  return _extends.apply(this, arguments);
-}
-
-var newlineRe = /\r\n|\r|\n/; // Empty lines need to contain a single empty token, denoted with { empty: true }
-
-var normalizeEmptyLines = function (line) {
-  if (line.length === 0) {
-    line.push({
-      types: ["plain"],
-      content: "\n",
-      empty: true
-    });
-  } else if (line.length === 1 && line[0].content === "") {
-    line[0].content = "\n";
-    line[0].empty = true;
-  }
-};
-
-var appendTypes = function (types, add) {
-  var typesSize = types.length;
-
-  if (typesSize > 0 && types[typesSize - 1] === add) {
-    return types;
-  }
-
-  return types.concat(add);
-}; // Takes an array of Prism's tokens and groups them by line, turning plain
-// strings into tokens as well. Tokens can become recursive in some cases,
-// which means that their types are concatenated. Plain-string tokens however
-// are always of type "plain".
-// This is not recursive to avoid exceeding the call-stack limit, since it's unclear
-// how nested Prism's tokens can become
-
-
-var normalizeTokens = function (tokens) {
-  var typeArrStack = [[]];
-  var tokenArrStack = [tokens];
-  var tokenArrIndexStack = [0];
-  var tokenArrSizeStack = [tokens.length];
-  var i = 0;
-  var stackIndex = 0;
-  var currentLine = [];
-  var acc = [currentLine];
-
-  while (stackIndex > -1) {
-    while ((i = tokenArrIndexStack[stackIndex]++) < tokenArrSizeStack[stackIndex]) {
-      var content = void 0;
-      var types = typeArrStack[stackIndex];
-      var tokenArr = tokenArrStack[stackIndex];
-      var token = tokenArr[i]; // Determine content and append type to types if necessary
-
-      if (typeof token === "string") {
-        types = stackIndex > 0 ? types : ["plain"];
-        content = token;
-      } else {
-        types = appendTypes(types, token.type);
-
-        if (token.alias) {
-          types = appendTypes(types, token.alias);
-        }
-
-        content = token.content;
-      } // If token.content is an array, increase the stack depth and repeat this while-loop
-
-
-      if (typeof content !== "string") {
-        stackIndex++;
-        typeArrStack.push(types);
-        tokenArrStack.push(content);
-        tokenArrIndexStack.push(0);
-        tokenArrSizeStack.push(content.length);
-        continue;
-      } // Split by newlines
-
-
-      var splitByNewlines = content.split(newlineRe);
-      var newlineCount = splitByNewlines.length;
-      currentLine.push({
-        types: types,
-        content: splitByNewlines[0]
-      }); // Create a new line for each string on a new line
-
-      for (var i$1 = 1; i$1 < newlineCount; i$1++) {
-        normalizeEmptyLines(currentLine);
-        acc.push(currentLine = []);
-        currentLine.push({
-          types: types,
-          content: splitByNewlines[i$1]
-        });
-      }
-    } // Decreate the stack depth
-
-
-    stackIndex--;
-    typeArrStack.pop();
-    tokenArrStack.pop();
-    tokenArrIndexStack.pop();
-    tokenArrSizeStack.pop();
-  }
-
-  normalizeEmptyLines(currentLine);
-  return acc;
-};
-
-var themeToDict = function (theme, language) {
-  var plain = theme.plain; // $FlowFixMe
-
-  var base = Object.create(null);
-  var themeDict = theme.styles.reduce(function (acc, themeEntry) {
-    var languages = themeEntry.languages;
-    var style = themeEntry.style;
-
-    if (languages && !languages.includes(language)) {
-      return acc;
-    }
-
-    themeEntry.types.forEach(function (type) {
-      // $FlowFixMe
-      var accStyle = _extends({}, acc[type], style);
-
-      acc[type] = accStyle;
-    });
-    return acc;
-  }, base); // $FlowFixMe
-
-  themeDict.root = plain; // $FlowFixMe
-
-  themeDict.plain = _extends({}, plain, {
-    backgroundColor: null
-  });
-  return themeDict;
-};
-
-function objectWithoutProperties(obj, exclude) {
-  var target = {};
-
-  for (var k in obj) if (Object.prototype.hasOwnProperty.call(obj, k) && exclude.indexOf(k) === -1) target[k] = obj[k];
-
-  return target;
-}
-
-var Highlight = /*@__PURE__*/function (Component) {
-  function Highlight() {
-    var this$1 = this;
-    var args = [],
-        len = arguments.length;
-
-    while (len--) args[len] = arguments[len];
-
-    Component.apply(this, args);
-
-    _defineProperty(this, "getThemeDict", function (props) {
-      if (this$1.themeDict !== undefined && props.theme === this$1.prevTheme && props.language === this$1.prevLanguage) {
-        return this$1.themeDict;
-      }
-
-      this$1.prevTheme = props.theme;
-      this$1.prevLanguage = props.language;
-      var themeDict = props.theme ? themeToDict(props.theme, props.language) : undefined;
-      return this$1.themeDict = themeDict;
-    });
-
-    _defineProperty(this, "getLineProps", function (ref) {
-      var key = ref.key;
-      var className = ref.className;
-      var style = ref.style;
-      var rest$1 = objectWithoutProperties(ref, ["key", "className", "style", "line"]);
-      var rest = rest$1;
-
-      var output = _extends({}, rest, {
-        className: "token-line",
-        style: undefined,
-        key: undefined
-      });
-
-      var themeDict = this$1.getThemeDict(this$1.props);
-
-      if (themeDict !== undefined) {
-        output.style = themeDict.plain;
-      }
-
-      if (style !== undefined) {
-        output.style = output.style !== undefined ? _extends({}, output.style, style) : style;
-      }
-
-      if (key !== undefined) {
-        output.key = key;
-      }
-
-      if (className) {
-        output.className += " " + className;
-      }
-
-      return output;
-    });
-
-    _defineProperty(this, "getStyleForToken", function (ref) {
-      var types = ref.types;
-      var empty = ref.empty;
-      var typesSize = types.length;
-      var themeDict = this$1.getThemeDict(this$1.props);
-
-      if (themeDict === undefined) {
-        return undefined;
-      } else if (typesSize === 1 && types[0] === "plain") {
-        return empty ? {
-          display: "inline-block"
-        } : undefined;
-      } else if (typesSize === 1 && !empty) {
-        return themeDict[types[0]];
-      }
-
-      var baseStyle = empty ? {
-        display: "inline-block"
-      } : {}; // $FlowFixMe
-
-      var typeStyles = types.map(function (type) {
-        return themeDict[type];
-      });
-      return Object.assign.apply(Object, [baseStyle].concat(typeStyles));
-    });
-
-    _defineProperty(this, "getTokenProps", function (ref) {
-      var key = ref.key;
-      var className = ref.className;
-      var style = ref.style;
-      var token = ref.token;
-      var rest$1 = objectWithoutProperties(ref, ["key", "className", "style", "token"]);
-      var rest = rest$1;
-
-      var output = _extends({}, rest, {
-        className: "token " + token.types.join(" "),
-        children: token.content,
-        style: this$1.getStyleForToken(token),
-        key: undefined
-      });
-
-      if (style !== undefined) {
-        output.style = output.style !== undefined ? _extends({}, output.style, style) : style;
-      }
-
-      if (key !== undefined) {
-        output.key = key;
-      }
-
-      if (className) {
-        output.className += " " + className;
-      }
-
-      return output;
-    });
-
-    _defineProperty(this, "tokenize", function (Prism, code, grammar, language) {
-      var env = {
-        code: code,
-        grammar: grammar,
-        language: language,
-        tokens: []
-      };
-      Prism.hooks.run("before-tokenize", env);
-      var tokens = env.tokens = Prism.tokenize(env.code, env.grammar, env.language);
-      Prism.hooks.run("after-tokenize", env);
-      return tokens;
-    });
-  }
-
-  if (Component) Highlight.__proto__ = Component;
-  Highlight.prototype = Object.create(Component && Component.prototype);
-  Highlight.prototype.constructor = Highlight;
-
-  Highlight.prototype.render = function render() {
-    var ref = this.props;
-    var Prism = ref.Prism;
-    var language = ref.language;
-    var code = ref.code;
-    var children = ref.children;
-    var themeDict = this.getThemeDict(this.props);
-    var grammar = Prism.languages[language];
-    var mixedTokens = grammar !== undefined ? this.tokenize(Prism, code, grammar, language) : [code];
-    var tokens = normalizeTokens(mixedTokens);
-    return children({
-      tokens: tokens,
-      className: "prism-code language-" + language,
-      style: themeDict !== undefined ? themeDict.root : {},
-      getLineProps: this.getLineProps,
-      getTokenProps: this.getTokenProps
-    });
-  };
-
-  return Highlight;
-}(react.Component);
-
-/* harmony default export */ const dist = (Highlight);
-
-
-
-/***/ }),
-
-/***/ 87410:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * Prism: Lightweight, robust, elegant syntax highlighting
- *
- * @license MIT <https://opensource.org/licenses/MIT>
- * @author Lea Verou <https://lea.verou.me>
- * @namespace
- * @public
- */
-/**
- * prism-react-renderer:
- * This file has been modified to remove:
- * - globals and window dependency
- * - worker support
- * - highlightAll and other element dependent methods
- * - _.hooks helpers
- * - UMD/node-specific hacks
- * It has also been run through prettier
- */
-
- var Prism = (function () {
-
-	// Private helper vars
-	var lang = /(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i;
-	var uniqueId = 0;
-
-	// The grammar object for plaintext
-	var plainTextGrammar = {};
-
-
-	var _ = {
-		/**
-		 * A namespace for utility methods.
-		 *
-		 * All function in this namespace that are not explicitly marked as _public_ are for __internal use only__ and may
-		 * change or disappear at any time.
-		 *
-		 * @namespace
-		 * @memberof Prism
-		 */
-		util: {
-			encode: function encode(tokens) {
-				if (tokens instanceof Token) {
-					return new Token(tokens.type, encode(tokens.content), tokens.alias);
-				} else if (Array.isArray(tokens)) {
-					return tokens.map(encode);
-				} else {
-					return tokens.replace(/&/g, '&').replace(/</g, '<').replace(/\u00a0/g, ' ');
-				}
-			},
-
-			/**
-			 * Returns the name of the type of the given value.
-			 *
-			 * @param {any} o
-			 * @returns {string}
-			 * @example
-			 * type(null)      === 'Null'
-			 * type(undefined) === 'Undefined'
-			 * type(123)       === 'Number'
-			 * type('foo')     === 'String'
-			 * type(true)      === 'Boolean'
-			 * type([1, 2])    === 'Array'
-			 * type({})        === 'Object'
-			 * type(String)    === 'Function'
-			 * type(/abc+/)    === 'RegExp'
-			 */
-			type: function (o) {
-				return Object.prototype.toString.call(o).slice(8, -1);
-			},
-
-			/**
-			 * Returns a unique number for the given object. Later calls will still return the same number.
-			 *
-			 * @param {Object} obj
-			 * @returns {number}
-			 */
-			objId: function (obj) {
-				if (!obj['__id']) {
-					Object.defineProperty(obj, '__id', { value: ++uniqueId });
-				}
-				return obj['__id'];
-			},
-
-			/**
-			 * Creates a deep clone of the given object.
-			 *
-			 * The main intended use of this function is to clone language definitions.
-			 *
-			 * @param {T} o
-			 * @param {Record<number, any>} [visited]
-			 * @returns {T}
-			 * @template T
-			 */
-			clone: function deepClone(o, visited) {
-				visited = visited || {};
-
-				var clone; var id;
-				switch (_.util.type(o)) {
-					case 'Object':
-						id = _.util.objId(o);
-						if (visited[id]) {
-							return visited[id];
-						}
-						clone = /** @type {Record<string, any>} */ ({});
-						visited[id] = clone;
-
-						for (var key in o) {
-							if (o.hasOwnProperty(key)) {
-								clone[key] = deepClone(o[key], visited);
-							}
-						}
-
-						return /** @type {any} */ (clone);
-
-					case 'Array':
-						id = _.util.objId(o);
-						if (visited[id]) {
-							return visited[id];
-						}
-						clone = [];
-						visited[id] = clone;
-
-						(/** @type {Array} */(/** @type {any} */(o))).forEach(function (v, i) {
-							clone[i] = deepClone(v, visited);
-						});
-
-						return /** @type {any} */ (clone);
-
-					default:
-						return o;
-				}
-			},
-
-			/**
-			 * Returns the Prism language of the given element set by a `language-xxxx` or `lang-xxxx` class.
-			 *
-			 * If no language is set for the element or the element is `null` or `undefined`, `none` will be returned.
-			 *
-			 * @param {Element} element
-			 * @returns {string}
-			 */
-			getLanguage: function (element) {
-				while (element) {
-					var m = lang.exec(element.className);
-					if (m) {
-						return m[1].toLowerCase();
-					}
-					element = element.parentElement;
-				}
-				return 'none';
-			},
-
-			/**
-			 * Sets the Prism `language-xxxx` class of the given element.
-			 *
-			 * @param {Element} element
-			 * @param {string} language
-			 * @returns {void}
-			 */
-			setLanguage: function (element, language) {
-				// remove all `language-xxxx` classes
-				// (this might leave behind a leading space)
-				element.className = element.className.replace(RegExp(lang, 'gi'), '');
-
-				// add the new `language-xxxx` class
-				// (using `classList` will automatically clean up spaces for us)
-				element.classList.add('language-' + language);
-			},
-
-			/**
-			 * Returns whether a given class is active for `element`.
-			 *
-			 * The class can be activated if `element` or one of its ancestors has the given class and it can be deactivated
-			 * if `element` or one of its ancestors has the negated version of the given class. The _negated version_ of the
-			 * given class is just the given class with a `no-` prefix.
-			 *
-			 * Whether the class is active is determined by the closest ancestor of `element` (where `element` itself is
-			 * closest ancestor) that has the given class or the negated version of it. If neither `element` nor any of its
-			 * ancestors have the given class or the negated version of it, then the default activation will be returned.
-			 *
-			 * In the paradoxical situation where the closest ancestor contains __both__ the given class and the negated
-			 * version of it, the class is considered active.
-			 *
-			 * @param {Element} element
-			 * @param {string} className
-			 * @param {boolean} [defaultActivation=false]
-			 * @returns {boolean}
-			 */
-			isActive: function (element, className, defaultActivation) {
-				var no = 'no-' + className;
-
-				while (element) {
-					var classList = element.classList;
-					if (classList.contains(className)) {
-						return true;
-					}
-					if (classList.contains(no)) {
-						return false;
-					}
-					element = element.parentElement;
-				}
-				return !!defaultActivation;
-			}
-		},
-
-		/**
-		 * This namespace contains all currently loaded languages and the some helper functions to create and modify languages.
-		 *
-		 * @namespace
-		 * @memberof Prism
-		 * @public
-		 */
-		languages: {
-			/**
-			 * The grammar for plain, unformatted text.
-			 */
-			plain: plainTextGrammar,
-			plaintext: plainTextGrammar,
-			text: plainTextGrammar,
-			txt: plainTextGrammar,
-
-			/**
-			 * Creates a deep copy of the language with the given id and appends the given tokens.
-			 *
-			 * If a token in `redef` also appears in the copied language, then the existing token in the copied language
-			 * will be overwritten at its original position.
-			 *
-			 * ## Best practices
-			 *
-			 * Since the position of overwriting tokens (token in `redef` that overwrite tokens in the copied language)
-			 * doesn't matter, they can technically be in any order. However, this can be confusing to others that trying to
-			 * understand the language definition because, normally, the order of tokens matters in Prism grammars.
-			 *
-			 * Therefore, it is encouraged to order overwriting tokens according to the positions of the overwritten tokens.
-			 * Furthermore, all non-overwriting tokens should be placed after the overwriting ones.
-			 *
-			 * @param {string} id The id of the language to extend. This has to be a key in `Prism.languages`.
-			 * @param {Grammar} redef The new tokens to append.
-			 * @returns {Grammar} The new language created.
-			 * @public
-			 * @example
-			 * Prism.languages['css-with-colors'] = Prism.languages.extend('css', {
-			 *     // Prism.languages.css already has a 'comment' token, so this token will overwrite CSS' 'comment' token
-			 *     // at its original position
-			 *     'comment': { ... },
-			 *     // CSS doesn't have a 'color' token, so this token will be appended
-			 *     'color': /\b(?:red|green|blue)\b/
-			 * });
-			 */
-			extend: function (id, redef) {
-				var lang = _.util.clone(_.languages[id]);
-
-				for (var key in redef) {
-					lang[key] = redef[key];
-				}
-
-				return lang;
-			},
-
-			/**
-			 * Inserts tokens _before_ another token in a language definition or any other grammar.
-			 *
-			 * ## Usage
-			 *
-			 * This helper method makes it easy to modify existing languages. For example, the CSS language definition
-			 * not only defines CSS highlighting for CSS documents, but also needs to define highlighting for CSS embedded
-			 * in HTML through `<style>` elements. To do this, it needs to modify `Prism.languages.markup` and add the
-			 * appropriate tokens. However, `Prism.languages.markup` is a regular JavaScript object literal, so if you do
-			 * this:
-			 *
-			 * ```js
-			 * Prism.languages.markup.style = {
-			 *     // token
-			 * };
-			 * ```
-			 *
-			 * then the `style` token will be added (and processed) at the end. `insertBefore` allows you to insert tokens
-			 * before existing tokens. For the CSS example above, you would use it like this:
-			 *
-			 * ```js
-			 * Prism.languages.insertBefore('markup', 'cdata', {
-			 *     'style': {
-			 *         // token
-			 *     }
-			 * });
-			 * ```
-			 *
-			 * ## Special cases
-			 *
-			 * If the grammars of `inside` and `insert` have tokens with the same name, the tokens in `inside`'s grammar
-			 * will be ignored.
-			 *
-			 * This behavior can be used to insert tokens after `before`:
-			 *
-			 * ```js
-			 * Prism.languages.insertBefore('markup', 'comment', {
-			 *     'comment': Prism.languages.markup.comment,
-			 *     // tokens after 'comment'
-			 * });
-			 * ```
-			 *
-			 * ## Limitations
-			 *
-			 * The main problem `insertBefore` has to solve is iteration order. Since ES2015, the iteration order for object
-			 * properties is guaranteed to be the insertion order (except for integer keys) but some browsers behave
-			 * differently when keys are deleted and re-inserted. So `insertBefore` can't be implemented by temporarily
-			 * deleting properties which is necessary to insert at arbitrary positions.
-			 *
-			 * To solve this problem, `insertBefore` doesn't actually insert the given tokens into the target object.
-			 * Instead, it will create a new object and replace all references to the target object with the new one. This
-			 * can be done without temporarily deleting properties, so the iteration order is well-defined.
-			 *
-			 * However, only references that can be reached from `Prism.languages` or `insert` will be replaced. I.e. if
-			 * you hold the target object in a variable, then the value of the variable will not change.
-			 *
-			 * ```js
-			 * var oldMarkup = Prism.languages.markup;
-			 * var newMarkup = Prism.languages.insertBefore('markup', 'comment', { ... });
-			 *
-			 * assert(oldMarkup !== Prism.languages.markup);
-			 * assert(newMarkup === Prism.languages.markup);
-			 * ```
-			 *
-			 * @param {string} inside The property of `root` (e.g. a language id in `Prism.languages`) that contains the
-			 * object to be modified.
-			 * @param {string} before The key to insert before.
-			 * @param {Grammar} insert An object containing the key-value pairs to be inserted.
-			 * @param {Object<string, any>} [root] The object containing `inside`, i.e. the object that contains the
-			 * object to be modified.
-			 *
-			 * Defaults to `Prism.languages`.
-			 * @returns {Grammar} The new grammar object.
-			 * @public
-			 */
-			insertBefore: function (inside, before, insert, root) {
-				root = root || /** @type {any} */ (_.languages);
-				var grammar = root[inside];
-				/** @type {Grammar} */
-				var ret = {};
-
-				for (var token in grammar) {
-					if (grammar.hasOwnProperty(token)) {
-
-						if (token == before) {
-							for (var newToken in insert) {
-								if (insert.hasOwnProperty(newToken)) {
-									ret[newToken] = insert[newToken];
-								}
-							}
-						}
-
-						// Do not insert token which also occur in insert. See #1525
-						if (!insert.hasOwnProperty(token)) {
-							ret[token] = grammar[token];
-						}
-					}
-				}
-
-				var old = root[inside];
-				root[inside] = ret;
-
-				// Update references in other language definitions
-				_.languages.DFS(_.languages, function (key, value) {
-					if (value === old && key != inside) {
-						this[key] = ret;
-					}
-				});
-
-				return ret;
-			},
-
-			// Traverse a language definition with Depth First Search
-			DFS: function DFS(o, callback, type, visited) {
-				visited = visited || {};
-
-				var objId = _.util.objId;
-
-				for (var i in o) {
-					if (o.hasOwnProperty(i)) {
-						callback.call(o, i, o[i], type || i);
-
-						var property = o[i];
-						var propertyType = _.util.type(property);
-
-						if (propertyType === 'Object' && !visited[objId(property)]) {
-							visited[objId(property)] = true;
-							DFS(property, callback, null, visited);
-						} else if (propertyType === 'Array' && !visited[objId(property)]) {
-							visited[objId(property)] = true;
-							DFS(property, callback, i, visited);
-						}
-					}
-				}
-			}
-		},
-
-		plugins: {},
-
-
-		/**
-		 * Low-level function, only use if you know what you’re doing. It accepts a string of text as input
-		 * and the language definitions to use, and returns a string with the HTML produced.
-		 *
-		 * The following hooks will be run:
-		 * 1. `before-tokenize`
-		 * 2. `after-tokenize`
-		 * 3. `wrap`: On each {@link Token}.
-		 *
-		 * @param {string} text A string with the code to be highlighted.
-		 * @param {Grammar} grammar An object containing the tokens to use.
-		 *
-		 * Usually a language definition like `Prism.languages.markup`.
-		 * @param {string} language The name of the language definition passed to `grammar`.
-		 * @returns {string} The highlighted HTML.
-		 * @memberof Prism
-		 * @public
-		 * @example
-		 * Prism.highlight('var foo = true;', Prism.languages.javascript, 'javascript');
-		 */
-		highlight: function (text, grammar, language) {
-			var env = {
-				code: text,
-				grammar: grammar,
-				language: language
-			};
-			_.hooks.run('before-tokenize', env);
-			env.tokens = _.tokenize(env.code, env.grammar);
-			_.hooks.run('after-tokenize', env);
-			return Token.stringify(_.util.encode(env.tokens), env.language);
-		},
-
-		/**
-		 * This is the heart of Prism, and the most low-level function you can use. It accepts a string of text as input
-		 * and the language definitions to use, and returns an array with the tokenized code.
-		 *
-		 * When the language definition includes nested tokens, the function is called recursively on each of these tokens.
-		 *
-		 * This method could be useful in other contexts as well, as a very crude parser.
-		 *
-		 * @param {string} text A string with the code to be highlighted.
-		 * @param {Grammar} grammar An object containing the tokens to use.
-		 *
-		 * Usually a language definition like `Prism.languages.markup`.
-		 * @returns {TokenStream} An array of strings and tokens, a token stream.
-		 * @memberof Prism
-		 * @public
-		 * @example
-		 * let code = `var foo = 0;`;
-		 * let tokens = Prism.tokenize(code, Prism.languages.javascript);
-		 * tokens.forEach(token => {
-		 *     if (token instanceof Prism.Token && token.type === 'number') {
-		 *         console.log(`Found numeric literal: ${token.content}`);
-		 *     }
-		 * });
-		 */
-		tokenize: function (text, grammar) {
-			var rest = grammar.rest;
-			if (rest) {
-				for (var token in rest) {
-					grammar[token] = rest[token];
-				}
-
-				delete grammar.rest;
-			}
-
-			var tokenList = new LinkedList();
-			addAfter(tokenList, tokenList.head, text);
-
-			matchGrammar(text, tokenList, grammar, tokenList.head, 0);
-
-			return toArray(tokenList);
-		},
-
-		/**
-		 * @namespace
-		 * @memberof Prism
-		 * @public
-		 */
-		hooks: {
-			all: {},
-
-			/**
-			 * Adds the given callback to the list of callbacks for the given hook.
-			 *
-			 * The callback will be invoked when the hook it is registered for is run.
-			 * Hooks are usually directly run by a highlight function but you can also run hooks yourself.
-			 *
-			 * One callback function can be registered to multiple hooks and the same hook multiple times.
-			 *
-			 * @param {string} name The name of the hook.
-			 * @param {HookCallback} callback The callback function which is given environment variables.
-			 * @public
-			 */
-			add: function (name, callback) {
-				var hooks = _.hooks.all;
-
-				hooks[name] = hooks[name] || [];
-
-				hooks[name].push(callback);
-			},
-
-			/**
-			 * Runs a hook invoking all registered callbacks with the given environment variables.
-			 *
-			 * Callbacks will be invoked synchronously and in the order in which they were registered.
-			 *
-			 * @param {string} name The name of the hook.
-			 * @param {Object<string, any>} env The environment variables of the hook passed to all callbacks registered.
-			 * @public
-			 */
-			run: function (name, env) {
-				var callbacks = _.hooks.all[name];
-
-				if (!callbacks || !callbacks.length) {
-					return;
-				}
-
-				for (var i = 0, callback; (callback = callbacks[i++]);) {
-					callback(env);
-				}
-			}
-		},
-
-		Token: Token
-	};
-
-
-	// Typescript note:
-	// The following can be used to import the Token type in JSDoc:
-	//
-	//   @typedef {InstanceType<import("./prism-core")["Token"]>} Token
-
-	/**
-	 * Creates a new token.
-	 *
-	 * @param {string} type See {@link Token#type type}
-	 * @param {string | TokenStream} content See {@link Token#content content}
-	 * @param {string|string[]} [alias] The alias(es) of the token.
-	 * @param {string} [matchedStr=""] A copy of the full string this token was created from.
-	 * @class
-	 * @global
-	 * @public
-	 */
-	function Token(type, content, alias, matchedStr) {
-		/**
-		 * The type of the token.
-		 *
-		 * This is usually the key of a pattern in a {@link Grammar}.
-		 *
-		 * @type {string}
-		 * @see GrammarToken
-		 * @public
-		 */
-		this.type = type;
-		/**
-		 * The strings or tokens contained by this token.
-		 *
-		 * This will be a token stream if the pattern matched also defined an `inside` grammar.
-		 *
-		 * @type {string | TokenStream}
-		 * @public
-		 */
-		this.content = content;
-		/**
-		 * The alias(es) of the token.
-		 *
-		 * @type {string|string[]}
-		 * @see GrammarToken
-		 * @public
-		 */
-		this.alias = alias;
-		// Copy of the full string this token was created from
-		this.length = (matchedStr || '').length | 0;
-	}
-
-	/**
-	 * A token stream is an array of strings and {@link Token Token} objects.
-	 *
-	 * Token streams have to fulfill a few properties that are assumed by most functions (mostly internal ones) that process
-	 * them.
-	 *
-	 * 1. No adjacent strings.
-	 * 2. No empty strings.
-	 *
-	 *    The only exception here is the token stream that only contains the empty string and nothing else.
-	 *
-	 * @typedef {Array<string | Token>} TokenStream
-	 * @global
-	 * @public
-	 */
-
-	/**
-	 * Converts the given token or token stream to an HTML representation.
-	 *
-	 * The following hooks will be run:
-	 * 1. `wrap`: On each {@link Token}.
-	 *
-	 * @param {string | Token | TokenStream} o The token or token stream to be converted.
-	 * @param {string} language The name of current language.
-	 * @returns {string} The HTML representation of the token or token stream.
-	 * @memberof Token
-	 * @static
-	 */
-	Token.stringify = function stringify(o, language) {
-		if (typeof o == 'string') {
-			return o;
-		}
-		if (Array.isArray(o)) {
-			var s = '';
-			o.forEach(function (e) {
-				s += stringify(e, language);
-			});
-			return s;
-		}
-
-		var env = {
-			type: o.type,
-			content: stringify(o.content, language),
-			tag: 'span',
-			classes: ['token', o.type],
-			attributes: {},
-			language: language
-		};
-
-		var aliases = o.alias;
-		if (aliases) {
-			if (Array.isArray(aliases)) {
-				Array.prototype.push.apply(env.classes, aliases);
-			} else {
-				env.classes.push(aliases);
-			}
-		}
-
-		_.hooks.run('wrap', env);
-
-		var attributes = '';
-		for (var name in env.attributes) {
-			attributes += ' ' + name + '="' + (env.attributes[name] || '').replace(/"/g, '"') + '"';
-		}
-
-		return '<' + env.tag + ' class="' + env.classes.join(' ') + '"' + attributes + '>' + env.content + '</' + env.tag + '>';
-	};
-
-	/**
-	 * @param {RegExp} pattern
-	 * @param {number} pos
-	 * @param {string} text
-	 * @param {boolean} lookbehind
-	 * @returns {RegExpExecArray | null}
-	 */
-	function matchPattern(pattern, pos, text, lookbehind) {
-		pattern.lastIndex = pos;
-		var match = pattern.exec(text);
-		if (match && lookbehind && match[1]) {
-			// change the match to remove the text matched by the Prism lookbehind group
-			var lookbehindLength = match[1].length;
-			match.index += lookbehindLength;
-			match[0] = match[0].slice(lookbehindLength);
-		}
-		return match;
-	}
-
-	/**
-	 * @param {string} text
-	 * @param {LinkedList<string | Token>} tokenList
-	 * @param {any} grammar
-	 * @param {LinkedListNode<string | Token>} startNode
-	 * @param {number} startPos
-	 * @param {RematchOptions} [rematch]
-	 * @returns {void}
-	 * @private
-	 *
-	 * @typedef RematchOptions
-	 * @property {string} cause
-	 * @property {number} reach
-	 */
-	function matchGrammar(text, tokenList, grammar, startNode, startPos, rematch) {
-		for (var token in grammar) {
-			if (!grammar.hasOwnProperty(token) || !grammar[token]) {
-				continue;
-			}
-
-			var patterns = grammar[token];
-			patterns = Array.isArray(patterns) ? patterns : [patterns];
-
-			for (var j = 0; j < patterns.length; ++j) {
-				if (rematch && rematch.cause == token + ',' + j) {
-					return;
-				}
-
-				var patternObj = patterns[j];
-				var inside = patternObj.inside;
-				var lookbehind = !!patternObj.lookbehind;
-				var greedy = !!patternObj.greedy;
-				var alias = patternObj.alias;
-
-				if (greedy && !patternObj.pattern.global) {
-					// Without the global flag, lastIndex won't work
-					var flags = patternObj.pattern.toString().match(/[imsuy]*$/)[0];
-					patternObj.pattern = RegExp(patternObj.pattern.source, flags + 'g');
-				}
-
-				/** @type {RegExp} */
-				var pattern = patternObj.pattern || patternObj;
-
-				for ( // iterate the token list and keep track of the current token/string position
-					var currentNode = startNode.next, pos = startPos;
-					currentNode !== tokenList.tail;
-					pos += currentNode.value.length, currentNode = currentNode.next
-				) {
-
-					if (rematch && pos >= rematch.reach) {
-						break;
-					}
-
-					var str = currentNode.value;
-
-					if (tokenList.length > text.length) {
-						// Something went terribly wrong, ABORT, ABORT!
-						return;
-					}
-
-					if (str instanceof Token) {
-						continue;
-					}
-
-					var removeCount = 1; // this is the to parameter of removeBetween
-					var match;
-
-					if (greedy) {
-						match = matchPattern(pattern, pos, text, lookbehind);
-						if (!match || match.index >= text.length) {
-							break;
-						}
-
-						var from = match.index;
-						var to = match.index + match[0].length;
-						var p = pos;
-
-						// find the node that contains the match
-						p += currentNode.value.length;
-						while (from >= p) {
-							currentNode = currentNode.next;
-							p += currentNode.value.length;
-						}
-						// adjust pos (and p)
-						p -= currentNode.value.length;
-						pos = p;
-
-						// the current node is a Token, then the match starts inside another Token, which is invalid
-						if (currentNode.value instanceof Token) {
-							continue;
-						}
-
-						// find the last node which is affected by this match
-						for (
-							var k = currentNode;
-							k !== tokenList.tail && (p < to || typeof k.value === 'string');
-							k = k.next
-						) {
-							removeCount++;
-							p += k.value.length;
-						}
-						removeCount--;
-
-						// replace with the new match
-						str = text.slice(pos, p);
-						match.index -= pos;
-					} else {
-						match = matchPattern(pattern, 0, str, lookbehind);
-						if (!match) {
-							continue;
-						}
-					}
-
-					// eslint-disable-next-line no-redeclare
-					var from = match.index;
-					var matchStr = match[0];
-					var before = str.slice(0, from);
-					var after = str.slice(from + matchStr.length);
-
-					var reach = pos + str.length;
-					if (rematch && reach > rematch.reach) {
-						rematch.reach = reach;
-					}
-
-					var removeFrom = currentNode.prev;
-
-					if (before) {
-						removeFrom = addAfter(tokenList, removeFrom, before);
-						pos += before.length;
-					}
-
-					removeRange(tokenList, removeFrom, removeCount);
-
-					var wrapped = new Token(token, inside ? _.tokenize(matchStr, inside) : matchStr, alias, matchStr);
-					currentNode = addAfter(tokenList, removeFrom, wrapped);
-
-					if (after) {
-						addAfter(tokenList, currentNode, after);
-					}
-
-					if (removeCount > 1) {
-						// at least one Token object was removed, so we have to do some rematching
-						// this can only happen if the current pattern is greedy
-
-						/** @type {RematchOptions} */
-						var nestedRematch = {
-							cause: token + ',' + j,
-							reach: reach
-						};
-						matchGrammar(text, tokenList, grammar, currentNode.prev, pos, nestedRematch);
-
-						// the reach might have been extended because of the rematching
-						if (rematch && nestedRematch.reach > rematch.reach) {
-							rematch.reach = nestedRematch.reach;
-						}
-					}
-				}
-			}
-		}
-	}
-
-	/**
-	 * @typedef LinkedListNode
-	 * @property {T} value
-	 * @property {LinkedListNode<T> | null} prev The previous node.
-	 * @property {LinkedListNode<T> | null} next The next node.
-	 * @template T
-	 * @private
-	 */
-
-	/**
-	 * @template T
-	 * @private
-	 */
-	function LinkedList() {
-		/** @type {LinkedListNode<T>} */
-		var head = { value: null, prev: null, next: null };
-		/** @type {LinkedListNode<T>} */
-		var tail = { value: null, prev: head, next: null };
-		head.next = tail;
-
-		/** @type {LinkedListNode<T>} */
-		this.head = head;
-		/** @type {LinkedListNode<T>} */
-		this.tail = tail;
-		this.length = 0;
-	}
-
-	/**
-	 * Adds a new node with the given value to the list.
-	 *
-	 * @param {LinkedList<T>} list
-	 * @param {LinkedListNode<T>} node
-	 * @param {T} value
-	 * @returns {LinkedListNode<T>} The added node.
-	 * @template T
-	 */
-	function addAfter(list, node, value) {
-		// assumes that node != list.tail && values.length >= 0
-		var next = node.next;
-
-		var newNode = { value: value, prev: node, next: next };
-		node.next = newNode;
-		next.prev = newNode;
-		list.length++;
-
-		return newNode;
-	}
-	/**
-	 * Removes `count` nodes after the given node. The given node will not be removed.
-	 *
-	 * @param {LinkedList<T>} list
-	 * @param {LinkedListNode<T>} node
-	 * @param {number} count
-	 * @template T
-	 */
-	function removeRange(list, node, count) {
-		var next = node.next;
-		for (var i = 0; i < count && next !== list.tail; i++) {
-			next = next.next;
-		}
-		node.next = next;
-		next.prev = node;
-		list.length -= i;
-	}
-	/**
-	 * @param {LinkedList<T>} list
-	 * @returns {T[]}
-	 * @template T
-	 */
-	function toArray(list) {
-		var array = [];
-		var node = list.head.next;
-		while (node !== list.tail) {
-			array.push(node.value);
-			node = node.next;
-		}
-		return array;
-	}
-
-	return _;
-
-}());
-
-var prism = Prism;
-Prism.default = Prism;
-
-/* This content is auto-generated to include some prismjs language components: */
-
-/* "prismjs/components/prism-markup" */
-
-prism.languages.markup = {
-  'comment': {
-    pattern: /<!--(?:(?!<!--)[\s\S])*?-->/,
-    greedy: true
-  },
-  'prolog': {
-    pattern: /<\?[\s\S]+?\?>/,
-    greedy: true
-  },
-  'doctype': {
-    // https://www.w3.org/TR/xml/#NT-doctypedecl
-    pattern: /<!DOCTYPE(?:[^>"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|<!--(?:[^-]|-(?!->))*-->)*\]\s*)?>/i,
-    greedy: true,
-    inside: {
-      'internal-subset': {
-        pattern: /(^[^\[]*\[)[\s\S]+(?=\]>$)/,
-        lookbehind: true,
-        greedy: true,
-        inside: null // see below
-
-      },
-      'string': {
-        pattern: /"[^"]*"|'[^']*'/,
-        greedy: true
-      },
-      'punctuation': /^<!|>$|[[\]]/,
-      'doctype-tag': /^DOCTYPE/i,
-      'name': /[^\s<>'"]+/
-    }
-  },
-  'cdata': {
-    pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
-    greedy: true
-  },
-  'tag': {
-    pattern: /<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,
-    greedy: true,
-    inside: {
-      'tag': {
-        pattern: /^<\/?[^\s>\/]+/,
-        inside: {
-          'punctuation': /^<\/?/,
-          'namespace': /^[^\s>\/:]+:/
-        }
-      },
-      'special-attr': [],
-      'attr-value': {
-        pattern: /=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,
-        inside: {
-          'punctuation': [{
-            pattern: /^=/,
-            alias: 'attr-equals'
-          }, /"|'/]
-        }
-      },
-      'punctuation': /\/?>/,
-      'attr-name': {
-        pattern: /[^\s>\/]+/,
-        inside: {
-          'namespace': /^[^\s>\/:]+:/
-        }
-      }
-    }
-  },
-  'entity': [{
-    pattern: /&[\da-z]{1,8};/i,
-    alias: 'named-entity'
-  }, /&#x?[\da-f]{1,8};/i]
-};
-prism.languages.markup['tag'].inside['attr-value'].inside['entity'] = prism.languages.markup['entity'];
-prism.languages.markup['doctype'].inside['internal-subset'].inside = prism.languages.markup; // Plugin to make entity title show the real entity, idea by Roman Komarov
-
-prism.hooks.add('wrap', function (env) {
-  if (env.type === 'entity') {
-    env.attributes['title'] = env.content.replace(/&/, '&');
-  }
-});
-Object.defineProperty(prism.languages.markup.tag, 'addInlined', {
-  /**
-   * Adds an inlined language to markup.
-   *
-   * An example of an inlined language is CSS with `<style>` tags.
-   *
-   * @param {string} tagName The name of the tag that contains the inlined language. This name will be treated as
-   * case insensitive.
-   * @param {string} lang The language key.
-   * @example
-   * addInlined('style', 'css');
-   */
-  value: function addInlined(tagName, lang) {
-    var includedCdataInside = {};
-    includedCdataInside['language-' + lang] = {
-      pattern: /(^<!\[CDATA\[)[\s\S]+?(?=\]\]>$)/i,
-      lookbehind: true,
-      inside: prism.languages[lang]
-    };
-    includedCdataInside['cdata'] = /^<!\[CDATA\[|\]\]>$/i;
-    var inside = {
-      'included-cdata': {
-        pattern: /<!\[CDATA\[[\s\S]*?\]\]>/i,
-        inside: includedCdataInside
-      }
-    };
-    inside['language-' + lang] = {
-      pattern: /[\s\S]+/,
-      inside: prism.languages[lang]
-    };
-    var def = {};
-    def[tagName] = {
-      pattern: RegExp(/(<__[^>]*>)(?:<!\[CDATA\[(?:[^\]]|\](?!\]>))*\]\]>|(?!<!\[CDATA\[)[\s\S])*?(?=<\/__>)/.source.replace(/__/g, function () {
-        return tagName;
-      }), 'i'),
-      lookbehind: true,
-      greedy: true,
-      inside: inside
-    };
-    prism.languages.insertBefore('markup', 'cdata', def);
-  }
-});
-Object.defineProperty(prism.languages.markup.tag, 'addAttribute', {
-  /**
-   * Adds an pattern to highlight languages embedded in HTML attributes.
-   *
-   * An example of an inlined language is CSS with `style` attributes.
-   *
-   * @param {string} attrName The name of the tag that contains the inlined language. This name will be treated as
-   * case insensitive.
-   * @param {string} lang The language key.
-   * @example
-   * addAttribute('style', 'css');
-   */
-  value: function (attrName, lang) {
-    prism.languages.markup.tag.inside['special-attr'].push({
-      pattern: RegExp(/(^|["'\s])/.source + '(?:' + attrName + ')' + /\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source, 'i'),
-      lookbehind: true,
-      inside: {
-        'attr-name': /^[^\s=]+/,
-        'attr-value': {
-          pattern: /=[\s\S]+/,
-          inside: {
-            'value': {
-              pattern: /(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,
-              lookbehind: true,
-              alias: [lang, 'language-' + lang],
-              inside: prism.languages[lang]
-            },
-            'punctuation': [{
-              pattern: /^=/,
-              alias: 'attr-equals'
-            }, /"|'/]
-          }
-        }
-      }
-    });
-  }
-});
-prism.languages.html = prism.languages.markup;
-prism.languages.mathml = prism.languages.markup;
-prism.languages.svg = prism.languages.markup;
-prism.languages.xml = prism.languages.extend('markup', {});
-prism.languages.ssml = prism.languages.xml;
-prism.languages.atom = prism.languages.xml;
-prism.languages.rss = prism.languages.xml;
-/* "prismjs/components/prism-bash" */
-
-(function (Prism) {
-  // $ set | grep '^[A-Z][^[:space:]]*=' | cut -d= -f1 | tr '\n' '|'
-  // + LC_ALL, RANDOM, REPLY, SECONDS.
-  // + make sure PS1..4 are here as they are not always set,
-  // - some useless things.
-  var envVars = '\\b(?:BASH|BASHOPTS|BASH_ALIASES|BASH_ARGC|BASH_ARGV|BASH_CMDS|BASH_COMPLETION_COMPAT_DIR|BASH_LINENO|BASH_REMATCH|BASH_SOURCE|BASH_VERSINFO|BASH_VERSION|COLORTERM|COLUMNS|COMP_WORDBREAKS|DBUS_SESSION_BUS_ADDRESS|DEFAULTS_PATH|DESKTOP_SESSION|DIRSTACK|DISPLAY|EUID|GDMSESSION|GDM_LANG|GNOME_KEYRING_CONTROL|GNOME_KEYRING_PID|GPG_AGENT_INFO|GROUPS|HISTCONTROL|HISTFILE|HISTFILESIZE|HISTSIZE|HOME|HOSTNAME|HOSTTYPE|IFS|INSTANCE|JOB|LANG|LANGUAGE|LC_ADDRESS|LC_ALL|LC_IDENTIFICATION|LC_MEASUREMENT|LC_MONETARY|LC_NAME|LC_NUMERIC|LC_PAPER|LC_TELEPHONE|LC_TIME|LESSCLOSE|LESSOPEN|LINES|LOGNAME|LS_COLORS|MACHTYPE|MAILCHECK|MANDATORY_PATH|NO_AT_BRIDGE|OLDPWD|OPTERR|OPTIND|ORBIT_SOCKETDIR|OSTYPE|PAPERSIZE|PATH|PIPESTATUS|PPID|PS1|PS2|PS3|PS4|PWD|RANDOM|REPLY|SECONDS|SELINUX_INIT|SESSION|SESSIONTYPE|SESSION_MANAGER|SHELL|SHELLOPTS|SHLVL|SSH_AUTH_SOCK|TERM|UID|UPSTART_EVENTS|UPSTART_INSTANCE|UPSTART_JOB|UPSTART_SESSION|USER|WINDOWID|XAUTHORITY|XDG_CONFIG_DIRS|XDG_CURRENT_DESKTOP|XDG_DATA_DIRS|XDG_GREETER_DATA_DIR|XDG_MENU_PREFIX|XDG_RUNTIME_DIR|XDG_SEAT|XDG_SEAT_PATH|XDG_SESSION_DESKTOP|XDG_SESSION_ID|XDG_SESSION_PATH|XDG_SESSION_TYPE|XDG_VTNR|XMODIFIERS)\\b';
-  var commandAfterHeredoc = {
-    pattern: /(^(["']?)\w+\2)[ \t]+\S.*/,
-    lookbehind: true,
-    alias: 'punctuation',
-    // this looks reasonably well in all themes
-    inside: null // see below
-
-  };
-  var insideString = {
-    'bash': commandAfterHeredoc,
-    'environment': {
-      pattern: RegExp('\\$' + envVars),
-      alias: 'constant'
-    },
-    'variable': [// [0]: Arithmetic Environment
-    {
-      pattern: /\$?\(\([\s\S]+?\)\)/,
-      greedy: true,
-      inside: {
-        // If there is a $ sign at the beginning highlight $(( and )) as variable
-        'variable': [{
-          pattern: /(^\$\(\([\s\S]+)\)\)/,
-          lookbehind: true
-        }, /^\$\(\(/],
-        'number': /\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee]-?\d+)?/,
-        // Operators according to https://www.gnu.org/software/bash/manual/bashref.html#Shell-Arithmetic
-        'operator': /--|\+\+|\*\*=?|<<=?|>>=?|&&|\|\||[=!+\-*/%<>^&|]=?|[?~:]/,
-        // If there is no $ sign at the beginning highlight (( and )) as punctuation
-        'punctuation': /\(\(?|\)\)?|,|;/
-      }
-    }, // [1]: Command Substitution
-    {
-      pattern: /\$\((?:\([^)]+\)|[^()])+\)|`[^`]+`/,
-      greedy: true,
-      inside: {
-        'variable': /^\$\(|^`|\)$|`$/
-      }
-    }, // [2]: Brace expansion
-    {
-      pattern: /\$\{[^}]+\}/,
-      greedy: true,
-      inside: {
-        'operator': /:[-=?+]?|[!\/]|##?|%%?|\^\^?|,,?/,
-        'punctuation': /[\[\]]/,
-        'environment': {
-          pattern: RegExp('(\\{)' + envVars),
-          lookbehind: true,
-          alias: 'constant'
-        }
-      }
-    }, /\$(?:\w+|[#?*!@$])/],
-    // Escape sequences from echo and printf's manuals, and escaped quotes.
-    'entity': /\\(?:[abceEfnrtv\\"]|O?[0-7]{1,3}|U[0-9a-fA-F]{8}|u[0-9a-fA-F]{4}|x[0-9a-fA-F]{1,2})/
-  };
-  Prism.languages.bash = {
-    'shebang': {
-      pattern: /^#!\s*\/.*/,
-      alias: 'important'
-    },
-    'comment': {
-      pattern: /(^|[^"{\\$])#.*/,
-      lookbehind: true
-    },
-    'function-name': [// a) function foo {
-    // b) foo() {
-    // c) function foo() {
-    // but not “foo {”
-    {
-      // a) and c)
-      pattern: /(\bfunction\s+)[\w-]+(?=(?:\s*\(?:\s*\))?\s*\{)/,
-      lookbehind: true,
-      alias: 'function'
-    }, {
-      // b)
-      pattern: /\b[\w-]+(?=\s*\(\s*\)\s*\{)/,
-      alias: 'function'
-    }],
-    // Highlight variable names as variables in for and select beginnings.
-    'for-or-select': {
-      pattern: /(\b(?:for|select)\s+)\w+(?=\s+in\s)/,
-      alias: 'variable',
-      lookbehind: true
-    },
-    // Highlight variable names as variables in the left-hand part
-    // of assignments (“=” and “+=”).
-    'assign-left': {
-      pattern: /(^|[\s;|&]|[<>]\()\w+(?=\+?=)/,
-      inside: {
-        'environment': {
-          pattern: RegExp('(^|[\\s;|&]|[<>]\\()' + envVars),
-          lookbehind: true,
-          alias: 'constant'
-        }
-      },
-      alias: 'variable',
-      lookbehind: true
-    },
-    'string': [// Support for Here-documents https://en.wikipedia.org/wiki/Here_document
-    {
-      pattern: /((?:^|[^<])<<-?\s*)(\w+)\s[\s\S]*?(?:\r?\n|\r)\2/,
-      lookbehind: true,
-      greedy: true,
-      inside: insideString
-    }, // Here-document with quotes around the tag
-    // → No expansion (so no “inside”).
-    {
-      pattern: /((?:^|[^<])<<-?\s*)(["'])(\w+)\2\s[\s\S]*?(?:\r?\n|\r)\3/,
-      lookbehind: true,
-      greedy: true,
-      inside: {
-        'bash': commandAfterHeredoc
-      }
-    }, // “Normal” string
-    {
-      // https://www.gnu.org/software/bash/manual/html_node/Double-Quotes.html
-      pattern: /(^|[^\\](?:\\\\)*)"(?:\\[\s\S]|\$\([^)]+\)|\$(?!\()|`[^`]+`|[^"\\`$])*"/,
-      lookbehind: true,
-      greedy: true,
-      inside: insideString
-    }, {
-      // https://www.gnu.org/software/bash/manual/html_node/Single-Quotes.html
-      pattern: /(^|[^$\\])'[^']*'/,
-      lookbehind: true,
-      greedy: true
-    }, {
-      // https://www.gnu.org/software/bash/manual/html_node/ANSI_002dC-Quoting.html
-      pattern: /\$'(?:[^'\\]|\\[\s\S])*'/,
-      greedy: true,
-      inside: {
-        'entity': insideString.entity
-      }
-    }],
-    'environment': {
-      pattern: RegExp('\\$?' + envVars),
-      alias: 'constant'
-    },
-    'variable': insideString.variable,
-    'function': {
-      pattern: /(^|[\s;|&]|[<>]\()(?:add|apropos|apt|apt-cache|apt-get|aptitude|aspell|automysqlbackup|awk|basename|bash|bc|bconsole|bg|bzip2|cal|cat|cfdisk|chgrp|chkconfig|chmod|chown|chroot|cksum|clear|cmp|column|comm|composer|cp|cron|crontab|csplit|curl|cut|date|dc|dd|ddrescue|debootstrap|df|diff|diff3|dig|dir|dircolors|dirname|dirs|dmesg|docker|docker-compose|du|egrep|eject|env|ethtool|expand|expect|expr|fdformat|fdisk|fg|fgrep|file|find|fmt|fold|format|free|fsck|ftp|fuser|gawk|git|gparted|grep|groupadd|groupdel|groupmod|groups|grub-mkconfig|gzip|halt|head|hg|history|host|hostname|htop|iconv|id|ifconfig|ifdown|ifup|import|install|ip|jobs|join|kill|killall|less|link|ln|locate|logname|logrotate|look|lpc|lpr|lprint|lprintd|lprintq|lprm|ls|lsof|lynx|make|man|mc|mdadm|mkconfig|mkdir|mke2fs|mkfifo|mkfs|mkisofs|mknod|mkswap|mmv|more|most|mount|mtools|mtr|mutt|mv|nano|nc|netstat|nice|nl|node|nohup|notify-send|npm|nslookup|op|open|parted|passwd|paste|pathchk|ping|pkill|pnpm|podman|podman-compose|popd|pr|printcap|printenv|ps|pushd|pv|quota|quotacheck|quotactl|ram|rar|rcp|reboot|remsync|rename|renice|rev|rm|rmdir|rpm|rsync|scp|screen|sdiff|sed|sendmail|seq|service|sftp|sh|shellcheck|shuf|shutdown|sleep|slocate|sort|split|ssh|stat|strace|su|sudo|sum|suspend|swapon|sync|tac|tail|tar|tee|time|timeout|top|touch|tr|traceroute|tsort|tty|umount|uname|unexpand|uniq|units|unrar|unshar|unzip|update-grub|uptime|useradd|userdel|usermod|users|uudecode|uuencode|v|vcpkg|vdir|vi|vim|virsh|vmstat|wait|watch|wc|wget|whereis|which|who|whoami|write|xargs|xdg-open|yarn|yes|zenity|zip|zsh|zypper)(?=$|[)\s;|&])/,
-      lookbehind: true
-    },
-    'keyword': {
-      pattern: /(^|[\s;|&]|[<>]\()(?:case|do|done|elif|else|esac|fi|for|function|if|in|select|then|until|while)(?=$|[)\s;|&])/,
-      lookbehind: true
-    },
-    // https://www.gnu.org/software/bash/manual/html_node/Shell-Builtin-Commands.html
-    'builtin': {
-      pattern: /(^|[\s;|&]|[<>]\()(?:\.|:|alias|bind|break|builtin|caller|cd|command|continue|declare|echo|enable|eval|exec|exit|export|getopts|hash|help|let|local|logout|mapfile|printf|pwd|read|readarray|readonly|return|set|shift|shopt|source|test|times|trap|type|typeset|ulimit|umask|unalias|unset)(?=$|[)\s;|&])/,
-      lookbehind: true,
-      // Alias added to make those easier to distinguish from strings.
-      alias: 'class-name'
-    },
-    'boolean': {
-      pattern: /(^|[\s;|&]|[<>]\()(?:false|true)(?=$|[)\s;|&])/,
-      lookbehind: true
-    },
-    'file-descriptor': {
-      pattern: /\B&\d\b/,
-      alias: 'important'
-    },
-    'operator': {
-      // Lots of redirections here, but not just that.
-      pattern: /\d?<>|>\||\+=|=[=~]?|!=?|<<[<-]?|[&\d]?>>|\d[<>]&?|[<>][&=]?|&[>&]?|\|[&|]?/,
-      inside: {
-        'file-descriptor': {
-          pattern: /^\d/,
-          alias: 'important'
-        }
-      }
-    },
-    'punctuation': /\$?\(\(?|\)\)?|\.\.|[{}[\];\\]/,
-    'number': {
-      pattern: /(^|\s)(?:[1-9]\d*|0)(?:[.,]\d+)?\b/,
-      lookbehind: true
-    }
-  };
-  commandAfterHeredoc.inside = Prism.languages.bash;
-  /* Patterns in command substitution. */
-
-  var toBeCopied = ['comment', 'function-name', 'for-or-select', 'assign-left', 'string', 'environment', 'function', 'keyword', 'builtin', 'boolean', 'file-descriptor', 'operator', 'punctuation', 'number'];
-  var inside = insideString.variable[1].inside;
-
-  for (var i = 0; i < toBeCopied.length; i++) {
-    inside[toBeCopied[i]] = Prism.languages.bash[toBeCopied[i]];
-  }
-
-  Prism.languages.shell = Prism.languages.bash;
-})(prism);
-/* "prismjs/components/prism-clike" */
-
-
-prism.languages.clike = {
-  'comment': [{
-    pattern: /(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,
-    lookbehind: true,
-    greedy: true
-  }, {
-    pattern: /(^|[^\\:])\/\/.*/,
-    lookbehind: true,
-    greedy: true
-  }],
-  'string': {
-    pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
-    greedy: true
-  },
-  'class-name': {
-    pattern: /(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,
-    lookbehind: true,
-    inside: {
-      'punctuation': /[.\\]/
-    }
-  },
-  'keyword': /\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,
-  'boolean': /\b(?:false|true)\b/,
-  'function': /\b\w+(?=\()/,
-  'number': /\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,
-  'operator': /[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,
-  'punctuation': /[{}[\];(),.:]/
-};
-/* "prismjs/components/prism-c" */
-
-prism.languages.c = prism.languages.extend('clike', {
-  'comment': {
-    pattern: /\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,
-    greedy: true
-  },
-  'string': {
-    // https://en.cppreference.com/w/c/language/string_literal
-    pattern: /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,
-    greedy: true
-  },
-  'class-name': {
-    pattern: /(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,
-    lookbehind: true
-  },
-  'keyword': /\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,
-  'function': /\b[a-z_]\w*(?=\s*\()/i,
-  'number': /(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,
-  'operator': />>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/
-});
-prism.languages.insertBefore('c', 'string', {
-  'char': {
-    // https://en.cppreference.com/w/c/language/character_constant
-    pattern: /'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,
-    greedy: true
-  }
-});
-prism.languages.insertBefore('c', 'string', {
-  'macro': {
-    // allow for multiline macro definitions
-    // spaces after the # character compile fine with gcc
-    pattern: /(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,
-    lookbehind: true,
-    greedy: true,
-    alias: 'property',
-    inside: {
-      'string': [{
-        // highlight the path of the include statement as a string
-        pattern: /^(#\s*include\s*)<[^>]+>/,
-        lookbehind: true
-      }, prism.languages.c['string']],
-      'char': prism.languages.c['char'],
-      'comment': prism.languages.c['comment'],
-      'macro-name': [{
-        pattern: /(^#\s*define\s+)\w+\b(?!\()/i,
-        lookbehind: true
-      }, {
-        pattern: /(^#\s*define\s+)\w+\b(?=\()/i,
-        lookbehind: true,
-        alias: 'function'
-      }],
-      // highlight macro directives as keywords
-      'directive': {
-        pattern: /^(#\s*)[a-z]+/,
-        lookbehind: true,
-        alias: 'keyword'
-      },
-      'directive-hash': /^#/,
-      'punctuation': /##|\\(?=[\r\n])/,
-      'expression': {
-        pattern: /\S[\s\S]*/,
-        inside: prism.languages.c
-      }
-    }
-  }
-});
-prism.languages.insertBefore('c', 'function', {
-  // highlight predefined macros as constants
-  'constant': /\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/
-});
-delete prism.languages.c['boolean'];
-/* "prismjs/components/prism-cpp" */
-
-(function (Prism) {
-  var keyword = /\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/;
-  var modName = /\b(?!<keyword>)\w+(?:\s*\.\s*\w+)*\b/.source.replace(/<keyword>/g, function () {
-    return keyword.source;
-  });
-  Prism.languages.cpp = Prism.languages.extend('c', {
-    'class-name': [{
-      pattern: RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!<keyword>)\w+/.source.replace(/<keyword>/g, function () {
-        return keyword.source;
-      })),
-      lookbehind: true
-    }, // This is intended to capture the class name of method implementations like:
-    //   void foo::bar() const {}
-    // However! The `foo` in the above example could also be a namespace, so we only capture the class name if
-    // it starts with an uppercase letter. This approximation should give decent results.
-    /\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/, // This will capture the class name before destructors like:
-    //   Foo::~Foo() {}
-    /\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i, // This also intends to capture the class name of method implementations but here the class has template
-    // parameters, so it can't be a namespace (until C++ adds generic namespaces).
-    /\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],
-    'keyword': keyword,
-    'number': {
-      pattern: /(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,
-      greedy: true
-    },
-    'operator': />>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,
-    'boolean': /\b(?:false|true)\b/
-  });
-  Prism.languages.insertBefore('cpp', 'string', {
-    'module': {
-      // https://en.cppreference.com/w/cpp/language/modules
-      pattern: RegExp(/(\b(?:import|module)\s+)/.source + '(?:' + // header-name
-      /"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source + '|' + // module name or partition or both
-      /<mod-name>(?:\s*:\s*<mod-name>)?|:\s*<mod-name>/.source.replace(/<mod-name>/g, function () {
-        return modName;
-      }) + ')'),
-      lookbehind: true,
-      greedy: true,
-      inside: {
-        'string': /^[<"][\s\S]+/,
-        'operator': /:/,
-        'punctuation': /\./
-      }
-    },
-    'raw-string': {
-      pattern: /R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,
-      alias: 'string',
-      greedy: true
-    }
-  });
-  Prism.languages.insertBefore('cpp', 'keyword', {
-    'generic-function': {
-      pattern: /\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,
-      inside: {
-        'function': /^\w+/,
-        'generic': {
-          pattern: /<[\s\S]+/,
-          alias: 'class-name',
-          inside: Prism.languages.cpp
-        }
-      }
-    }
-  });
-  Prism.languages.insertBefore('cpp', 'operator', {
-    'double-colon': {
-      pattern: /::/,
-      alias: 'punctuation'
-    }
-  });
-  Prism.languages.insertBefore('cpp', 'class-name', {
-    // the base clause is an optional list of parent classes
-    // https://en.cppreference.com/w/cpp/language/class
-    'base-clause': {
-      pattern: /(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,
-      lookbehind: true,
-      greedy: true,
-      inside: Prism.languages.extend('cpp', {})
-    }
-  });
-  Prism.languages.insertBefore('inside', 'double-colon', {
-    // All untokenized words that are not namespaces should be class names
-    'class-name': /\b[a-z_]\w*\b(?!\s*::)/i
-  }, Prism.languages.cpp['base-clause']);
-})(prism);
-/* "prismjs/components/prism-css" */
-
-
-(function (Prism) {
-  var string = /(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;
-  Prism.languages.css = {
-    'comment': /\/\*[\s\S]*?\*\//,
-    'atrule': {
-      pattern: /@[\w-](?:[^;{\s]|\s+(?![\s{]))*(?:;|(?=\s*\{))/,
-      inside: {
-        'rule': /^@[\w-]+/,
-        'selector-function-argument': {
-          pattern: /(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,
-          lookbehind: true,
-          alias: 'selector'
-        },
-        'keyword': {
-          pattern: /(^|[^\w-])(?:and|not|only|or)(?![\w-])/,
-          lookbehind: true
-        } // See rest below
-
-      }
-    },
-    'url': {
-      // https://drafts.csswg.org/css-values-3/#urls
-      pattern: RegExp('\\burl\\((?:' + string.source + '|' + /(?:[^\\\r\n()"']|\\[\s\S])*/.source + ')\\)', 'i'),
-      greedy: true,
-      inside: {
-        'function': /^url/i,
-        'punctuation': /^\(|\)$/,
-        'string': {
-          pattern: RegExp('^' + string.source + '$'),
-          alias: 'url'
-        }
-      }
-    },
-    'selector': {
-      pattern: RegExp('(^|[{}\\s])[^{}\\s](?:[^{};"\'\\s]|\\s+(?![\\s{])|' + string.source + ')*(?=\\s*\\{)'),
-      lookbehind: true
-    },
-    'string': {
-      pattern: string,
-      greedy: true
-    },
-    'property': {
-      pattern: /(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,
-      lookbehind: true
-    },
-    'important': /!important\b/i,
-    'function': {
-      pattern: /(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,
-      lookbehind: true
-    },
-    'punctuation': /[(){};:,]/
-  };
-  Prism.languages.css['atrule'].inside.rest = Prism.languages.css;
-  var markup = Prism.languages.markup;
-
-  if (markup) {
-    markup.tag.addInlined('style', 'css');
-    markup.tag.addAttribute('style', 'css');
-  }
-})(prism);
-/* "prismjs/components/prism-css-extras" */
-
-
-(function (Prism) {
-  var string = /("|')(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/;
-  var selectorInside;
-  Prism.languages.css.selector = {
-    pattern: Prism.languages.css.selector.pattern,
-    lookbehind: true,
-    inside: selectorInside = {
-      'pseudo-element': /:(?:after|before|first-letter|first-line|selection)|::[-\w]+/,
-      'pseudo-class': /:[-\w]+/,
-      'class': /\.[-\w]+/,
-      'id': /#[-\w]+/,
-      'attribute': {
-        pattern: RegExp('\\[(?:[^[\\]"\']|' + string.source + ')*\\]'),
-        greedy: true,
-        inside: {
-          'punctuation': /^\[|\]$/,
-          'case-sensitivity': {
-            pattern: /(\s)[si]$/i,
-            lookbehind: true,
-            alias: 'keyword'
-          },
-          'namespace': {
-            pattern: /^(\s*)(?:(?!\s)[-*\w\xA0-\uFFFF])*\|(?!=)/,
-            lookbehind: true,
-            inside: {
-              'punctuation': /\|$/
-            }
-          },
-          'attr-name': {
-            pattern: /^(\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+/,
-            lookbehind: true
-          },
-          'attr-value': [string, {
-            pattern: /(=\s*)(?:(?!\s)[-\w\xA0-\uFFFF])+(?=\s*$)/,
-            lookbehind: true
-          }],
-          'operator': /[|~*^$]?=/
-        }
-      },
-      'n-th': [{
-        pattern: /(\(\s*)[+-]?\d*[\dn](?:\s*[+-]\s*\d+)?(?=\s*\))/,
-        lookbehind: true,
-        inside: {
-          'number': /[\dn]+/,
-          'operator': /[+-]/
-        }
-      }, {
-        pattern: /(\(\s*)(?:even|odd)(?=\s*\))/i,
-        lookbehind: true
-      }],
-      'combinator': />|\+|~|\|\|/,
-      // the `tag` token has been existed and removed.
-      // because we can't find a perfect tokenize to match it.
-      // if you want to add it, please read https://github.com/PrismJS/prism/pull/2373 first.
-      'punctuation': /[(),]/
-    }
-  };
-  Prism.languages.css['atrule'].inside['selector-function-argument'].inside = selectorInside;
-  Prism.languages.insertBefore('css', 'property', {
-    'variable': {
-      pattern: /(^|[^-\w\xA0-\uFFFF])--(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*/i,
-      lookbehind: true
-    }
-  });
-  var unit = {
-    pattern: /(\b\d+)(?:%|[a-z]+(?![\w-]))/,
-    lookbehind: true
-  }; // 123 -123 .123 -.123 12.3 -12.3
-
-  var number = {
-    pattern: /(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,
-    lookbehind: true
-  };
-  Prism.languages.insertBefore('css', 'function', {
-    'operator': {
-      pattern: /(\s)[+\-*\/](?=\s)/,
-      lookbehind: true
-    },
-    // CAREFUL!
-    // Previewers and Inline color use hexcode and color.
-    'hexcode': {
-      pattern: /\B#[\da-f]{3,8}\b/i,
-      alias: 'color'
-    },
-    'color': [{
-      pattern: /(^|[^\w-])(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)(?![\w-])/i,
-      lookbehind: true
-    }, {
-      pattern: /\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,
-      inside: {
-        'unit': unit,
-        'number': number,
-        'function': /[\w-]+(?=\()/,
-        'punctuation': /[(),]/
-      }
-    }],
-    // it's important that there is no boundary assertion after the hex digits
-    'entity': /\\[\da-f]{1,8}/i,
-    'unit': unit,
-    'number': number
-  });
-})(prism);
-/* "prismjs/components/prism-javascript" */
-
-
-prism.languages.javascript = prism.languages.extend('clike', {
-  'class-name': [prism.languages.clike['class-name'], {
-    pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,
-    lookbehind: true
-  }],
-  'keyword': [{
-    pattern: /((?:^|\})\s*)catch\b/,
-    lookbehind: true
-  }, {
-    pattern: /(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,
-    lookbehind: true
-  }],
-  // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444)
-  'function': /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,
-  'number': {
-    pattern: RegExp(/(^|[^\w$])/.source + '(?:' + ( // constant
-    /NaN|Infinity/.source + '|' + // binary integer
-    /0[bB][01]+(?:_[01]+)*n?/.source + '|' + // octal integer
-    /0[oO][0-7]+(?:_[0-7]+)*n?/.source + '|' + // hexadecimal integer
-    /0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source + '|' + // decimal bigint
-    /\d+(?:_\d+)*n/.source + '|' + // decimal number (integer or float) but no bigint
-    /(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source) + ')' + /(?![\w$])/.source),
-    lookbehind: true
-  },
-  'operator': /--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/
-});
-prism.languages.javascript['class-name'][0].pattern = /(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/;
-prism.languages.insertBefore('javascript', 'keyword', {
-  'regex': {
-    // eslint-disable-next-line regexp/no-dupe-characters-character-class
-    pattern: /((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)\/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/,
-    lookbehind: true,
-    greedy: true,
-    inside: {
-      'regex-source': {
-        pattern: /^(\/)[\s\S]+(?=\/[a-z]*$)/,
-        lookbehind: true,
-        alias: 'language-regex',
-        inside: prism.languages.regex
-      },
-      'regex-delimiter': /^\/|\/$/,
-      'regex-flags': /^[a-z]+$/
-    }
-  },
-  // This must be declared before keyword because we use "function" inside the look-forward
-  'function-variable': {
-    pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,
-    alias: 'function'
-  },
-  'parameter': [{
-    pattern: /(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,
-    lookbehind: true,
-    inside: prism.languages.javascript
-  }, {
-    pattern: /(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,
-    lookbehind: true,
-    inside: prism.languages.javascript
-  }, {
-    pattern: /(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,
-    lookbehind: true,
-    inside: prism.languages.javascript
-  }, {
-    pattern: /((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,
-    lookbehind: true,
-    inside: prism.languages.javascript
-  }],
-  'constant': /\b[A-Z](?:[A-Z_]|\dx?)*\b/
-});
-prism.languages.insertBefore('javascript', 'string', {
-  'hashbang': {
-    pattern: /^#!.*/,
-    greedy: true,
-    alias: 'comment'
-  },
-  'template-string': {
-    pattern: /`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,
-    greedy: true,
-    inside: {
-      'template-punctuation': {
-        pattern: /^`|`$/,
-        alias: 'string'
-      },
-      'interpolation': {
-        pattern: /((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,
-        lookbehind: true,
-        inside: {
-          'interpolation-punctuation': {
-            pattern: /^\$\{|\}$/,
-            alias: 'punctuation'
-          },
-          rest: prism.languages.javascript
-        }
-      },
-      'string': /[\s\S]+/
-    }
-  },
-  'string-property': {
-    pattern: /((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,
-    lookbehind: true,
-    greedy: true,
-    alias: 'property'
-  }
-});
-prism.languages.insertBefore('javascript', 'operator', {
-  'literal-property': {
-    pattern: /((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,
-    lookbehind: true,
-    alias: 'property'
-  }
-});
-
-if (prism.languages.markup) {
-  prism.languages.markup.tag.addInlined('script', 'javascript'); // add attribute support for all DOM events.
-  // https://developer.mozilla.org/en-US/docs/Web/Events#Standard_events
-
-  prism.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source, 'javascript');
-}
-
-prism.languages.js = prism.languages.javascript;
-/* "prismjs/components/prism-coffeescript" */
-
-(function (Prism) {
-  // Ignore comments starting with { to privilege string interpolation highlighting
-  var comment = /#(?!\{).+/;
-  var interpolation = {
-    pattern: /#\{[^}]+\}/,
-    alias: 'variable'
-  };
-  Prism.languages.coffeescript = Prism.languages.extend('javascript', {
-    'comment': comment,
-    'string': [// Strings are multiline
-    {
-      pattern: /'(?:\\[\s\S]|[^\\'])*'/,
-      greedy: true
-    }, {
-      // Strings are multiline
-      pattern: /"(?:\\[\s\S]|[^\\"])*"/,
-      greedy: true,
-      inside: {
-        'interpolation': interpolation
-      }
-    }],
-    'keyword': /\b(?:and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,
-    'class-member': {
-      pattern: /@(?!\d)\w+/,
-      alias: 'variable'
-    }
-  });
-  Prism.languages.insertBefore('coffeescript', 'comment', {
-    'multiline-comment': {
-      pattern: /###[\s\S]+?###/,
-      alias: 'comment'
-    },
-    // Block regexp can contain comments and interpolation
-    'block-regex': {
-      pattern: /\/{3}[\s\S]*?\/{3}/,
-      alias: 'regex',
-      inside: {
-        'comment': comment,
-        'interpolation': interpolation
-      }
-    }
-  });
-  Prism.languages.insertBefore('coffeescript', 'string', {
-    'inline-javascript': {
-      pattern: /`(?:\\[\s\S]|[^\\`])*`/,
-      inside: {
-        'delimiter': {
-          pattern: /^`|`$/,
-          alias: 'punctuation'
-        },
-        'script': {
-          pattern: /[\s\S]+/,
-          alias: 'language-javascript',
-          inside: Prism.languages.javascript
-        }
-      }
-    },
-    // Block strings
-    'multiline-string': [{
-      pattern: /'''[\s\S]*?'''/,
-      greedy: true,
-      alias: 'string'
-    }, {
-      pattern: /"""[\s\S]*?"""/,
-      greedy: true,
-      alias: 'string',
-      inside: {
-        interpolation: interpolation
-      }
-    }]
-  });
-  Prism.languages.insertBefore('coffeescript', 'keyword', {
-    // Object property
-    'property': /(?!\d)\w+(?=\s*:(?!:))/
-  });
-  delete Prism.languages.coffeescript['template-string'];
-  Prism.languages.coffee = Prism.languages.coffeescript;
-})(prism);
-/* "prismjs/components/prism-yaml" */
-
-
-(function (Prism) {
-  // https://yaml.org/spec/1.2/spec.html#c-ns-anchor-property
-  // https://yaml.org/spec/1.2/spec.html#c-ns-alias-node
-  var anchorOrAlias = /[*&][^\s[\]{},]+/; // https://yaml.org/spec/1.2/spec.html#c-ns-tag-property
-
-  var tag = /!(?:<[\w\-%#;/?:@&=+$,.!~*'()[\]]+>|(?:[a-zA-Z\d-]*!)?[\w\-%#;/?:@&=+$.~*'()]+)?/; // https://yaml.org/spec/1.2/spec.html#c-ns-properties(n,c)
-
-  var properties = '(?:' + tag.source + '(?:[ \t]+' + anchorOrAlias.source + ')?|' + anchorOrAlias.source + '(?:[ \t]+' + tag.source + ')?)'; // https://yaml.org/spec/1.2/spec.html#ns-plain(n,c)
-  // This is a simplified version that doesn't support "#" and multiline keys
-  // All these long scarry character classes are simplified versions of YAML's characters
-
-  var plainKey = /(?:[^\s\x00-\x08\x0e-\x1f!"#%&'*,\-:>?@[\]`{|}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]|[?:-]<PLAIN>)(?:[ \t]*(?:(?![#:])<PLAIN>|:<PLAIN>))*/.source.replace(/<PLAIN>/g, function () {
-    return /[^\s\x00-\x08\x0e-\x1f,[\]{}\x7f-\x84\x86-\x9f\ud800-\udfff\ufffe\uffff]/.source;
-  });
-  var string = /"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'/.source;
-  /**
-   *
-   * @param {string} value
-   * @param {string} [flags]
-   * @returns {RegExp}
-   */
-
-  function createValuePattern(value, flags) {
-    flags = (flags || '').replace(/m/g, '') + 'm'; // add m flag
-
-    var pattern = /([:\-,[{]\s*(?:\s<<prop>>[ \t]+)?)(?:<<value>>)(?=[ \t]*(?:$|,|\]|\}|(?:[\r\n]\s*)?#))/.source.replace(/<<prop>>/g, function () {
-      return properties;
-    }).replace(/<<value>>/g, function () {
-      return value;
-    });
-    return RegExp(pattern, flags);
-  }
-
-  Prism.languages.yaml = {
-    'scalar': {
-      pattern: RegExp(/([\-:]\s*(?:\s<<prop>>[ \t]+)?[|>])[ \t]*(?:((?:\r?\n|\r)[ \t]+)\S[^\r\n]*(?:\2[^\r\n]+)*)/.source.replace(/<<prop>>/g, function () {
-        return properties;
-      })),
-      lookbehind: true,
-      alias: 'string'
-    },
-    'comment': /#.*/,
-    'key': {
-      pattern: RegExp(/((?:^|[:\-,[{\r\n?])[ \t]*(?:<<prop>>[ \t]+)?)<<key>>(?=\s*:\s)/.source.replace(/<<prop>>/g, function () {
-        return properties;
-      }).replace(/<<key>>/g, function () {
-        return '(?:' + plainKey + '|' + string + ')';
-      })),
-      lookbehind: true,
-      greedy: true,
-      alias: 'atrule'
-    },
-    'directive': {
-      pattern: /(^[ \t]*)%.+/m,
-      lookbehind: true,
-      alias: 'important'
-    },
-    'datetime': {
-      pattern: createValuePattern(/\d{4}-\d\d?-\d\d?(?:[tT]|[ \t]+)\d\d?:\d{2}:\d{2}(?:\.\d*)?(?:[ \t]*(?:Z|[-+]\d\d?(?::\d{2})?))?|\d{4}-\d{2}-\d{2}|\d\d?:\d{2}(?::\d{2}(?:\.\d*)?)?/.source),
-      lookbehind: true,
-      alias: 'number'
-    },
-    'boolean': {
-      pattern: createValuePattern(/false|true/.source, 'i'),
-      lookbehind: true,
-      alias: 'important'
-    },
-    'null': {
-      pattern: createValuePattern(/null|~/.source, 'i'),
-      lookbehind: true,
-      alias: 'important'
-    },
-    'string': {
-      pattern: createValuePattern(string),
-      lookbehind: true,
-      greedy: true
-    },
-    'number': {
-      pattern: createValuePattern(/[+-]?(?:0x[\da-f]+|0o[0-7]+|(?:\d+(?:\.\d*)?|\.\d+)(?:e[+-]?\d+)?|\.inf|\.nan)/.source, 'i'),
-      lookbehind: true
-    },
-    'tag': tag,
-    'important': anchorOrAlias,
-    'punctuation': /---|[:[\]{}\-,|>?]|\.\.\./
-  };
-  Prism.languages.yml = Prism.languages.yaml;
-})(prism);
-/* "prismjs/components/prism-markdown" */
-
-
-(function (Prism) {
-  // Allow only one line break
-  var inner = /(?:\\.|[^\\\n\r]|(?:\n|\r\n?)(?![\r\n]))/.source;
-  /**
-   * This function is intended for the creation of the bold or italic pattern.
-   *
-   * This also adds a lookbehind group to the given pattern to ensure that the pattern is not backslash-escaped.
-   *
-   * _Note:_ Keep in mind that this adds a capturing group.
-   *
-   * @param {string} pattern
-   * @returns {RegExp}
-   */
-
-  function createInline(pattern) {
-    pattern = pattern.replace(/<inner>/g, function () {
-      return inner;
-    });
-    return RegExp(/((?:^|[^\\])(?:\\{2})*)/.source + '(?:' + pattern + ')');
-  }
-
-  var tableCell = /(?:\\.|``(?:[^`\r\n]|`(?!`))+``|`[^`\r\n]+`|[^\\|\r\n`])+/.source;
-  var tableRow = /\|?__(?:\|__)+\|?(?:(?:\n|\r\n?)|(?![\s\S]))/.source.replace(/__/g, function () {
-    return tableCell;
-  });
-  var tableLine = /\|?[ \t]*:?-{3,}:?[ \t]*(?:\|[ \t]*:?-{3,}:?[ \t]*)+\|?(?:\n|\r\n?)/.source;
-  Prism.languages.markdown = Prism.languages.extend('markup', {});
-  Prism.languages.insertBefore('markdown', 'prolog', {
-    'front-matter-block': {
-      pattern: /(^(?:\s*[\r\n])?)---(?!.)[\s\S]*?[\r\n]---(?!.)/,
-      lookbehind: true,
-      greedy: true,
-      inside: {
-        'punctuation': /^---|---$/,
-        'front-matter': {
-          pattern: /\S+(?:\s+\S+)*/,
-          alias: ['yaml', 'language-yaml'],
-          inside: Prism.languages.yaml
-        }
-      }
-    },
-    'blockquote': {
-      // > ...
-      pattern: /^>(?:[\t ]*>)*/m,
-      alias: 'punctuation'
-    },
-    'table': {
-      pattern: RegExp('^' + tableRow + tableLine + '(?:' + tableRow + ')*', 'm'),
-      inside: {
-        'table-data-rows': {
-          pattern: RegExp('^(' + tableRow + tableLine + ')(?:' + tableRow + ')*$'),
-          lookbehind: true,
-          inside: {
-            'table-data': {
-              pattern: RegExp(tableCell),
-              inside: Prism.languages.markdown
-            },
-            'punctuation': /\|/
-          }
-        },
-        'table-line': {
-          pattern: RegExp('^(' + tableRow + ')' + tableLine + '$'),
-          lookbehind: true,
-          inside: {
-            'punctuation': /\||:?-{3,}:?/
-          }
-        },
-        'table-header-row': {
-          pattern: RegExp('^' + tableRow + '$'),
-          inside: {
-            'table-header': {
-              pattern: RegExp(tableCell),
-              alias: 'important',
-              inside: Prism.languages.markdown
-            },
-            'punctuation': /\|/
-          }
-        }
-      }
-    },
-    'code': [{
-      // Prefixed by 4 spaces or 1 tab and preceded by an empty line
-      pattern: /((?:^|\n)[ \t]*\n|(?:^|\r\n?)[ \t]*\r\n?)(?: {4}|\t).+(?:(?:\n|\r\n?)(?: {4}|\t).+)*/,
-      lookbehind: true,
-      alias: 'keyword'
-    }, {
-      // ```optional language
-      // code block
-      // ```
-      pattern: /^```[\s\S]*?^```$/m,
-      greedy: true,
-      inside: {
-        'code-block': {
-          pattern: /^(```.*(?:\n|\r\n?))[\s\S]+?(?=(?:\n|\r\n?)^```$)/m,
-          lookbehind: true
-        },
-        'code-language': {
-          pattern: /^(```).+/,
-          lookbehind: true
-        },
-        'punctuation': /```/
-      }
-    }],
-    'title': [{
-      // title 1
-      // =======
-      // title 2
-      // -------
-      pattern: /\S.*(?:\n|\r\n?)(?:==+|--+)(?=[ \t]*$)/m,
-      alias: 'important',
-      inside: {
-        punctuation: /==+$|--+$/
-      }
-    }, {
-      // # title 1
-      // ###### title 6
-      pattern: /(^\s*)#.+/m,
-      lookbehind: true,
-      alias: 'important',
-      inside: {
-        punctuation: /^#+|#+$/
-      }
-    }],
-    'hr': {
-      // ***
-      // ---
-      // * * *
-      // -----------
-      pattern: /(^\s*)([*-])(?:[\t ]*\2){2,}(?=\s*$)/m,
-      lookbehind: true,
-      alias: 'punctuation'
-    },
-    'list': {
-      // * item
-      // + item
-      // - item
-      // 1. item
-      pattern: /(^\s*)(?:[*+-]|\d+\.)(?=[\t ].)/m,
-      lookbehind: true,
-      alias: 'punctuation'
-    },
-    'url-reference': {
-      // [id]: http://example.com "Optional title"
-      // [id]: http://example.com 'Optional title'
-      // [id]: http://example.com (Optional title)
-      // [id]: <http://example.com> "Optional title"
-      pattern: /!?\[[^\]]+\]:[\t ]+(?:\S+|<(?:\\.|[^>\\])+>)(?:[\t ]+(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\)))?/,
-      inside: {
-        'variable': {
-          pattern: /^(!?\[)[^\]]+/,
-          lookbehind: true
-        },
-        'string': /(?:"(?:\\.|[^"\\])*"|'(?:\\.|[^'\\])*'|\((?:\\.|[^)\\])*\))$/,
-        'punctuation': /^[\[\]!:]|[<>]/
-      },
-      alias: 'url'
-    },
-    'bold': {
-      // **strong**
-      // __strong__
-      // allow one nested instance of italic text using the same delimiter
-      pattern: createInline(/\b__(?:(?!_)<inner>|_(?:(?!_)<inner>)+_)+__\b|\*\*(?:(?!\*)<inner>|\*(?:(?!\*)<inner>)+\*)+\*\*/.source),
-      lookbehind: true,
-      greedy: true,
-      inside: {
-        'content': {
-          pattern: /(^..)[\s\S]+(?=..$)/,
-          lookbehind: true,
-          inside: {} // see below
-
-        },
-        'punctuation': /\*\*|__/
-      }
-    },
-    'italic': {
-      // *em*
-      // _em_
-      // allow one nested instance of bold text using the same delimiter
-      pattern: createInline(/\b_(?:(?!_)<inner>|__(?:(?!_)<inner>)+__)+_\b|\*(?:(?!\*)<inner>|\*\*(?:(?!\*)<inner>)+\*\*)+\*/.source),
-      lookbehind: true,
-      greedy: true,
-      inside: {
-        'content': {
-          pattern: /(^.)[\s\S]+(?=.$)/,
-          lookbehind: true,
-          inside: {} // see below
-
-        },
-        'punctuation': /[*_]/
-      }
-    },
-    'strike': {
-      // ~~strike through~~
-      // ~strike~
-      // eslint-disable-next-line regexp/strict
-      pattern: createInline(/(~~?)(?:(?!~)<inner>)+\2/.source),
-      lookbehind: true,
-      greedy: true,
-      inside: {
-        'content': {
-          pattern: /(^~~?)[\s\S]+(?=\1$)/,
-          lookbehind: true,
-          inside: {} // see below
-
-        },
-        'punctuation': /~~?/
-      }
-    },
-    'code-snippet': {
-      // `code`
-      // ``code``
-      pattern: /(^|[^\\`])(?:``[^`\r\n]+(?:`[^`\r\n]+)*``(?!`)|`[^`\r\n]+`(?!`))/,
-      lookbehind: true,
-      greedy: true,
-      alias: ['code', 'keyword']
-    },
-    'url': {
-      // [example](http://example.com "Optional title")
-      // [example][id]
-      // [example] [id]
-      pattern: createInline(/!?\[(?:(?!\])<inner>)+\](?:\([^\s)]+(?:[\t ]+"(?:\\.|[^"\\])*")?\)|[ \t]?\[(?:(?!\])<inner>)+\])/.source),
-      lookbehind: true,
-      greedy: true,
-      inside: {
-        'operator': /^!/,
-        'content': {
-          pattern: /(^\[)[^\]]+(?=\])/,
-          lookbehind: true,
-          inside: {} // see below
-
-        },
-        'variable': {
-          pattern: /(^\][ \t]?\[)[^\]]+(?=\]$)/,
-          lookbehind: true
-        },
-        'url': {
-          pattern: /(^\]\()[^\s)]+/,
-          lookbehind: true
-        },
-        'string': {
-          pattern: /(^[ \t]+)"(?:\\.|[^"\\])*"(?=\)$)/,
-          lookbehind: true
-        }
-      }
-    }
-  });
-  ['url', 'bold', 'italic', 'strike'].forEach(function (token) {
-    ['url', 'bold', 'italic', 'strike', 'code-snippet'].forEach(function (inside) {
-      if (token !== inside) {
-        Prism.languages.markdown[token].inside.content.inside[inside] = Prism.languages.markdown[inside];
-      }
-    });
-  });
-  Prism.hooks.add('after-tokenize', function (env) {
-    if (env.language !== 'markdown' && env.language !== 'md') {
-      return;
-    }
-
-    function walkTokens(tokens) {
-      if (!tokens || typeof tokens === 'string') {
-        return;
-      }
-
-      for (var i = 0, l = tokens.length; i < l; i++) {
-        var token = tokens[i];
-
-        if (token.type !== 'code') {
-          walkTokens(token.content);
-          continue;
-        }
-        /*
-         * Add the correct `language-xxxx` class to this code block. Keep in mind that the `code-language` token
-         * is optional. But the grammar is defined so that there is only one case we have to handle:
-         *
-         * token.content = [
-         *     <span class="punctuation">```</span>,
-         *     <span class="code-language">xxxx</span>,
-         *     '\n', // exactly one new lines (\r or \n or \r\n)
-         *     <span class="code-block">...</span>,
-         *     '\n', // exactly one new lines again
-         *     <span class="punctuation">```</span>
-         * ];
-         */
-
-
-        var codeLang = token.content[1];
-        var codeBlock = token.content[3];
-
-        if (codeLang && codeBlock && codeLang.type === 'code-language' && codeBlock.type === 'code-block' && typeof codeLang.content === 'string') {
-          // this might be a language that Prism does not support
-          // do some replacements to support C++, C#, and F#
-          var lang = codeLang.content.replace(/\b#/g, 'sharp').replace(/\b\+\+/g, 'pp'); // only use the first word
-
-          lang = (/[a-z][\w-]*/i.exec(lang) || [''])[0].toLowerCase();
-          var alias = 'language-' + lang; // add alias
-
-          if (!codeBlock.alias) {
-            codeBlock.alias = [alias];
-          } else if (typeof codeBlock.alias === 'string') {
-            codeBlock.alias = [codeBlock.alias, alias];
-          } else {
-            codeBlock.alias.push(alias);
-          }
-        }
-      }
-    }
-
-    walkTokens(env.tokens);
-  });
-  Prism.hooks.add('wrap', function (env) {
-    if (env.type !== 'code-block') {
-      return;
-    }
-
-    var codeLang = '';
-
-    for (var i = 0, l = env.classes.length; i < l; i++) {
-      var cls = env.classes[i];
-      var match = /language-(.+)/.exec(cls);
-
-      if (match) {
-        codeLang = match[1];
-        break;
-      }
-    }
-
-    var grammar = Prism.languages[codeLang];
-
-    if (!grammar) {
-      if (codeLang && codeLang !== 'none' && Prism.plugins.autoloader) {
-        var id = 'md-' + new Date().valueOf() + '-' + Math.floor(Math.random() * 1e16);
-        env.attributes['id'] = id;
-        Prism.plugins.autoloader.loadLanguages(codeLang, function () {
-          var ele = document.getElementById(id);
-
-          if (ele) {
-            ele.innerHTML = Prism.highlight(ele.textContent, Prism.languages[codeLang], codeLang);
-          }
-        });
-      }
-    } else {
-      env.content = Prism.highlight(textContent(env.content), grammar, codeLang);
-    }
-  });
-  var tagPattern = RegExp(Prism.languages.markup.tag.pattern.source, 'gi');
-  /**
-   * A list of known entity names.
-   *
-   * This will always be incomplete to save space. The current list is the one used by lowdash's unescape function.
-   *
-   * @see {@link https://github.com/lodash/lodash/blob/2da024c3b4f9947a48517639de7560457cd4ec6c/unescape.js#L2}
-   */
-
-  var KNOWN_ENTITY_NAMES = {
-    'amp': '&',
-    'lt': '<',
-    'gt': '>',
-    'quot': '"'
-  }; // IE 11 doesn't support `String.fromCodePoint`
-
-  var fromCodePoint = String.fromCodePoint || String.fromCharCode;
-  /**
-   * Returns the text content of a given HTML source code string.
-   *
-   * @param {string} html
-   * @returns {string}
-   */
-
-  function textContent(html) {
-    // remove all tags
-    var text = html.replace(tagPattern, ''); // decode known entities
-
-    text = text.replace(/&(\w{1,8}|#x?[\da-f]{1,8});/gi, function (m, code) {
-      code = code.toLowerCase();
-
-      if (code[0] === '#') {
-        var value;
-
-        if (code[1] === 'x') {
-          value = parseInt(code.slice(2), 16);
-        } else {
-          value = Number(code.slice(1));
-        }
-
-        return fromCodePoint(value);
-      } else {
-        var known = KNOWN_ENTITY_NAMES[code];
-
-        if (known) {
-          return known;
-        } // unable to decode
-
-
-        return m;
-      }
-    });
-    return text;
-  }
-
-  Prism.languages.md = Prism.languages.markdown;
-})(prism);
-/* "prismjs/components/prism-graphql" */
-
-
-prism.languages.graphql = {
-  'comment': /#.*/,
-  'description': {
-    pattern: /(?:"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*")(?=\s*[a-z_])/i,
-    greedy: true,
-    alias: 'string',
-    inside: {
-      'language-markdown': {
-        pattern: /(^"(?:"")?)(?!\1)[\s\S]+(?=\1$)/,
-        lookbehind: true,
-        inside: prism.languages.markdown
-      }
-    }
-  },
-  'string': {
-    pattern: /"""(?:[^"]|(?!""")")*"""|"(?:\\.|[^\\"\r\n])*"/,
-    greedy: true
-  },
-  'number': /(?:\B-|\b)\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,
-  'boolean': /\b(?:false|true)\b/,
-  'variable': /\$[a-z_]\w*/i,
-  'directive': {
-    pattern: /@[a-z_]\w*/i,
-    alias: 'function'
-  },
-  'attr-name': {
-    pattern: /\b[a-z_]\w*(?=\s*(?:\((?:[^()"]|"(?:\\.|[^\\"\r\n])*")*\))?:)/i,
-    greedy: true
-  },
-  'atom-input': {
-    pattern: /\b[A-Z]\w*Input\b/,
-    alias: 'class-name'
-  },
-  'scalar': /\b(?:Boolean|Float|ID|Int|String)\b/,
-  'constant': /\b[A-Z][A-Z_\d]*\b/,
-  'class-name': {
-    pattern: /(\b(?:enum|implements|interface|on|scalar|type|union)\s+|&\s*|:\s*|\[)[A-Z_]\w*/,
-    lookbehind: true
-  },
-  'fragment': {
-    pattern: /(\bfragment\s+|\.{3}\s*(?!on\b))[a-zA-Z_]\w*/,
-    lookbehind: true,
-    alias: 'function'
-  },
-  'definition-mutation': {
-    pattern: /(\bmutation\s+)[a-zA-Z_]\w*/,
-    lookbehind: true,
-    alias: 'function'
-  },
-  'definition-query': {
-    pattern: /(\bquery\s+)[a-zA-Z_]\w*/,
-    lookbehind: true,
-    alias: 'function'
-  },
-  'keyword': /\b(?:directive|enum|extend|fragment|implements|input|interface|mutation|on|query|repeatable|scalar|schema|subscription|type|union)\b/,
-  'operator': /[!=|&]|\.{3}/,
-  'property-query': /\w+(?=\s*\()/,
-  'object': /\w+(?=\s*\{)/,
-  'punctuation': /[!(){}\[\]:=,]/,
-  'property': /\w+/
-};
-prism.hooks.add('after-tokenize', function afterTokenizeGraphql(env) {
-  if (env.language !== 'graphql') {
-    return;
-  }
-  /**
-   * get the graphql token stream that we want to customize
-   *
-   * @typedef {InstanceType<import("./prism-core")["Token"]>} Token
-   * @type {Token[]}
-   */
-
-
-  var validTokens = env.tokens.filter(function (token) {
-    return typeof token !== 'string' && token.type !== 'comment' && token.type !== 'scalar';
-  });
-  var currentIndex = 0;
-  /**
-   * Returns whether the token relative to the current index has the given type.
-   *
-   * @param {number} offset
-   * @returns {Token | undefined}
-   */
-
-  function getToken(offset) {
-    return validTokens[currentIndex + offset];
-  }
-  /**
-   * Returns whether the token relative to the current index has the given type.
-   *
-   * @param {readonly string[]} types
-   * @param {number} [offset=0]
-   * @returns {boolean}
-   */
-
-
-  function isTokenType(types, offset) {
-    offset = offset || 0;
-
-    for (var i = 0; i < types.length; i++) {
-      var token = getToken(i + offset);
-
-      if (!token || token.type !== types[i]) {
-        return false;
-      }
-    }
-
-    return true;
-  }
-  /**
-   * Returns the index of the closing bracket to an opening bracket.
-   *
-   * It is assumed that `token[currentIndex - 1]` is an opening bracket.
-   *
-   * If no closing bracket could be found, `-1` will be returned.
-   *
-   * @param {RegExp} open
-   * @param {RegExp} close
-   * @returns {number}
-   */
-
-
-  function findClosingBracket(open, close) {
-    var stackHeight = 1;
-
-    for (var i = currentIndex; i < validTokens.length; i++) {
-      var token = validTokens[i];
-      var content = token.content;
-
-      if (token.type === 'punctuation' && typeof content === 'string') {
-        if (open.test(content)) {
-          stackHeight++;
-        } else if (close.test(content)) {
-          stackHeight--;
-
-          if (stackHeight === 0) {
-            return i;
-          }
-        }
-      }
-    }
-
-    return -1;
-  }
-  /**
-   * Adds an alias to the given token.
-   *
-   * @param {Token} token
-   * @param {string} alias
-   * @returns {void}
-   */
-
-
-  function addAlias(token, alias) {
-    var aliases = token.alias;
-
-    if (!aliases) {
-      token.alias = aliases = [];
-    } else if (!Array.isArray(aliases)) {
-      token.alias = aliases = [aliases];
-    }
-
-    aliases.push(alias);
-  }
-
-  for (; currentIndex < validTokens.length;) {
-    var startToken = validTokens[currentIndex++]; // add special aliases for mutation tokens
-
-    if (startToken.type === 'keyword' && startToken.content === 'mutation') {
-      // any array of the names of all input variables (if any)
-      var inputVariables = [];
-
-      if (isTokenType(['definition-mutation', 'punctuation']) && getToken(1).content === '(') {
-        // definition
-        currentIndex += 2; // skip 'definition-mutation' and 'punctuation'
-
-        var definitionEnd = findClosingBracket(/^\($/, /^\)$/);
-
-        if (definitionEnd === -1) {
-          continue;
-        } // find all input variables
-
-
-        for (; currentIndex < definitionEnd; currentIndex++) {
-          var t = getToken(0);
-
-          if (t.type === 'variable') {
-            addAlias(t, 'variable-input');
-            inputVariables.push(t.content);
-          }
-        }
-
-        currentIndex = definitionEnd + 1;
-      }
-
-      if (isTokenType(['punctuation', 'property-query']) && getToken(0).content === '{') {
-        currentIndex++; // skip opening bracket
-
-        addAlias(getToken(0), 'property-mutation');
-
-        if (inputVariables.length > 0) {
-          var mutationEnd = findClosingBracket(/^\{$/, /^\}$/);
-
-          if (mutationEnd === -1) {
-            continue;
-          } // give references to input variables a special alias
-
-
-          for (var i = currentIndex; i < mutationEnd; i++) {
-            var varToken = validTokens[i];
-
-            if (varToken.type === 'variable' && inputVariables.indexOf(varToken.content) >= 0) {
-              addAlias(varToken, 'variable-input');
-            }
-          }
-        }
-      }
-    }
-  }
-});
-/* "prismjs/components/prism-sql" */
-
-prism.languages.sql = {
-  'comment': {
-    pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,
-    lookbehind: true
-  },
-  'variable': [{
-    pattern: /@(["'`])(?:\\[\s\S]|(?!\1)[^\\])+\1/,
-    greedy: true
-  }, /@[\w.$]+/],
-  'string': {
-    pattern: /(^|[^@\\])("|')(?:\\[\s\S]|(?!\2)[^\\]|\2\2)*\2/,
-    greedy: true,
-    lookbehind: true
-  },
-  'identifier': {
-    pattern: /(^|[^@\\])`(?:\\[\s\S]|[^`\\]|``)*`/,
-    greedy: true,
-    lookbehind: true,
-    inside: {
-      'punctuation': /^`|`$/
-    }
-  },
-  'function': /\b(?:AVG|COUNT|FIRST|FORMAT|LAST|LCASE|LEN|MAX|MID|MIN|MOD|NOW|ROUND|SUM|UCASE)(?=\s*\()/i,
-  // Should we highlight user defined functions too?
-  'keyword': /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR(?:ACTER|SET)?|CHECK(?:POINT)?|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMNS?|COMMENT|COMMIT(?:TED)?|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS(?:TABLE)?|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|CYCLE|DATA(?:BASES?)?|DATE(?:TIME)?|DAY|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITERS?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE|ELSE(?:IF)?|ENABLE|ENCLOSED|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPED?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|HOUR|IDENTITY(?:COL|_INSERT)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTERVAL|INTO|INVOKER|ISOLATION|ITERATE|JOIN|KEYS?|KILL|LANGUAGE|LAST|LEAVE|LEFT|LEVEL|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|LOOP|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MINUTE|MODE|MODIFIES|MODIFY|MONTH|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL|NATURAL|NCHAR|NEXT|NO|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREPARE|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READS?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEAT(?:ABLE)?|REPLACE|REPLICATION|REQUIRE|RESIGNAL|RESTORE|RESTRICT|RETURN(?:ING|S)?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SECOND|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|SQL|START(?:ING)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED|TEXT(?:SIZE)?|THEN|TIME(?:STAMP)?|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNLOCK|UNPIVOT|UNSIGNED|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?|YEAR)\b/i,
-  'boolean': /\b(?:FALSE|NULL|TRUE)\b/i,
-  'number': /\b0x[\da-f]+\b|\b\d+(?:\.\d*)?|\B\.\d+\b/i,
-  'operator': /[-+*\/=%^~]|&&?|\|\|?|!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|DIV|ILIKE|IN|IS|LIKE|NOT|OR|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,
-  'punctuation': /[;[\]()`,.]/
-};
-/* "prismjs/components/prism-js-templates" */
-
-(function (Prism) {
-  var templateString = Prism.languages.javascript['template-string']; // see the pattern in prism-javascript.js
-
-  var templateLiteralPattern = templateString.pattern.source;
-  var interpolationObject = templateString.inside['interpolation'];
-  var interpolationPunctuationObject = interpolationObject.inside['interpolation-punctuation'];
-  var interpolationPattern = interpolationObject.pattern.source;
-  /**
-   * Creates a new pattern to match a template string with a special tag.
-   *
-   * This will return `undefined` if there is no grammar with the given language id.
-   *
-   * @param {string} language The language id of the embedded language. E.g. `markdown`.
-   * @param {string} tag The regex pattern to match the tag.
-   * @returns {object | undefined}
-   * @example
-   * createTemplate('css', /\bcss/.source);
-   */
-
-  function createTemplate(language, tag) {
-    if (!Prism.languages[language]) {
-      return undefined;
-    }
-
-    return {
-      pattern: RegExp('((?:' + tag + ')\\s*)' + templateLiteralPattern),
-      lookbehind: true,
-      greedy: true,
-      inside: {
-        'template-punctuation': {
-          pattern: /^`|`$/,
-          alias: 'string'
-        },
-        'embedded-code': {
-          pattern: /[\s\S]+/,
-          alias: language
-        }
-      }
-    };
-  }
-
-  Prism.languages.javascript['template-string'] = [// styled-jsx:
-  //   css`a { color: #25F; }`
-  // styled-components:
-  //   styled.h1`color: red;`
-  createTemplate('css', /\b(?:styled(?:\([^)]*\))?(?:\s*\.\s*\w+(?:\([^)]*\))*)*|css(?:\s*\.\s*(?:global|resolve))?|createGlobalStyle|keyframes)/.source), // html`<p></p>`
-  // div.innerHTML = `<p></p>`
-  createTemplate('html', /\bhtml|\.\s*(?:inner|outer)HTML\s*\+?=/.source), // svg`<path fill="#fff" d="M55.37 ..."/>`
-  createTemplate('svg', /\bsvg/.source), // md`# h1`, markdown`## h2`
-  createTemplate('markdown', /\b(?:markdown|md)/.source), // gql`...`, graphql`...`, graphql.experimental`...`
-  createTemplate('graphql', /\b(?:gql|graphql(?:\s*\.\s*experimental)?)/.source), // sql`...`
-  createTemplate('sql', /\bsql/.source), // vanilla template string
-  templateString].filter(Boolean);
-  /**
-   * Returns a specific placeholder literal for the given language.
-   *
-   * @param {number} counter
-   * @param {string} language
-   * @returns {string}
-   */
-
-  function getPlaceholder(counter, language) {
-    return '___' + language.toUpperCase() + '_' + counter + '___';
-  }
-  /**
-   * Returns the tokens of `Prism.tokenize` but also runs the `before-tokenize` and `after-tokenize` hooks.
-   *
-   * @param {string} code
-   * @param {any} grammar
-   * @param {string} language
-   * @returns {(string|Token)[]}
-   */
-
-
-  function tokenizeWithHooks(code, grammar, language) {
-    var env = {
-      code: code,
-      grammar: grammar,
-      language: language
-    };
-    Prism.hooks.run('before-tokenize', env);
-    env.tokens = Prism.tokenize(env.code, env.grammar);
-    Prism.hooks.run('after-tokenize', env);
-    return env.tokens;
-  }
-  /**
-   * Returns the token of the given JavaScript interpolation expression.
-   *
-   * @param {string} expression The code of the expression. E.g. `"${42}"`
-   * @returns {Token}
-   */
-
-
-  function tokenizeInterpolationExpression(expression) {
-    var tempGrammar = {};
-    tempGrammar['interpolation-punctuation'] = interpolationPunctuationObject;
-    /** @type {Array} */
-
-    var tokens = Prism.tokenize(expression, tempGrammar);
-
-    if (tokens.length === 3) {
-      /**
-       * The token array will look like this
-       * [
-       *     ["interpolation-punctuation", "${"]
-       *     "..." // JavaScript expression of the interpolation
-       *     ["interpolation-punctuation", "}"]
-       * ]
-       */
-      var args = [1, 1];
-      args.push.apply(args, tokenizeWithHooks(tokens[1], Prism.languages.javascript, 'javascript'));
-      tokens.splice.apply(tokens, args);
-    }
-
-    return new Prism.Token('interpolation', tokens, interpolationObject.alias, expression);
-  }
-  /**
-   * Tokenizes the given code with support for JavaScript interpolation expressions mixed in.
-   *
-   * This function has 3 phases:
-   *
-   * 1. Replace all JavaScript interpolation expression with a placeholder.
-   *    The placeholder will have the syntax of a identify of the target language.
-   * 2. Tokenize the code with placeholders.
-   * 3. Tokenize the interpolation expressions and re-insert them into the tokenize code.
-   *    The insertion only works if a placeholder hasn't been "ripped apart" meaning that the placeholder has been
-   *    tokenized as two tokens by the grammar of the embedded language.
-   *
-   * @param {string} code
-   * @param {object} grammar
-   * @param {string} language
-   * @returns {Token}
-   */
-
-
-  function tokenizeEmbedded(code, grammar, language) {
-    // 1. First filter out all interpolations
-    // because they might be escaped, we need a lookbehind, so we use Prism
-
-    /** @type {(Token|string)[]} */
-    var _tokens = Prism.tokenize(code, {
-      'interpolation': {
-        pattern: RegExp(interpolationPattern),
-        lookbehind: true
-      }
-    }); // replace all interpolations with a placeholder which is not in the code already
-
-
-    var placeholderCounter = 0;
-    /** @type {Object<string, string>} */
-
-    var placeholderMap = {};
-
-    var embeddedCode = _tokens.map(function (token) {
-      if (typeof token === 'string') {
-        return token;
-      } else {
-        var interpolationExpression = token.content;
-        var placeholder;
-
-        while (code.indexOf(placeholder = getPlaceholder(placeholderCounter++, language)) !== -1) {
-          /* noop */
-        }
-
-        placeholderMap[placeholder] = interpolationExpression;
-        return placeholder;
-      }
-    }).join(''); // 2. Tokenize the embedded code
-
-
-    var embeddedTokens = tokenizeWithHooks(embeddedCode, grammar, language); // 3. Re-insert the interpolation
-
-    var placeholders = Object.keys(placeholderMap);
-    placeholderCounter = 0;
-    /**
-     *
-     * @param {(Token|string)[]} tokens
-     * @returns {void}
-     */
-
-    function walkTokens(tokens) {
-      for (var i = 0; i < tokens.length; i++) {
-        if (placeholderCounter >= placeholders.length) {
-          return;
-        }
-
-        var token = tokens[i];
-
-        if (typeof token === 'string' || typeof token.content === 'string') {
-          var placeholder = placeholders[placeholderCounter];
-          var s = typeof token === 'string' ? token :
-          /** @type {string} */
-          token.content;
-          var index = s.indexOf(placeholder);
-
-          if (index !== -1) {
-            ++placeholderCounter;
-            var before = s.substring(0, index);
-            var middle = tokenizeInterpolationExpression(placeholderMap[placeholder]);
-            var after = s.substring(index + placeholder.length);
-            var replacement = [];
-
-            if (before) {
-              replacement.push(before);
-            }
-
-            replacement.push(middle);
-
-            if (after) {
-              var afterTokens = [after];
-              walkTokens(afterTokens);
-              replacement.push.apply(replacement, afterTokens);
-            }
-
-            if (typeof token === 'string') {
-              tokens.splice.apply(tokens, [i, 1].concat(replacement));
-              i += replacement.length - 1;
-            } else {
-              token.content = replacement;
-            }
-          }
-        } else {
-          var content = token.content;
-
-          if (Array.isArray(content)) {
-            walkTokens(content);
-          } else {
-            walkTokens([content]);
-          }
-        }
-      }
-    }
-
-    walkTokens(embeddedTokens);
-    return new Prism.Token(language, embeddedTokens, 'language-' + language, code);
-  }
-  /**
-   * The languages for which JS templating will handle tagged template literals.
-   *
-   * JS templating isn't active for only JavaScript but also related languages like TypeScript, JSX, and TSX.
-   */
-
-
-  var supportedLanguages = {
-    'javascript': true,
-    'js': true,
-    'typescript': true,
-    'ts': true,
-    'jsx': true,
-    'tsx': true
-  };
-  Prism.hooks.add('after-tokenize', function (env) {
-    if (!(env.language in supportedLanguages)) {
-      return;
-    }
-    /**
-     * Finds and tokenizes all template strings with an embedded languages.
-     *
-     * @param {(Token | string)[]} tokens
-     * @returns {void}
-     */
-
-
-    function findTemplateStrings(tokens) {
-      for (var i = 0, l = tokens.length; i < l; i++) {
-        var token = tokens[i];
-
-        if (typeof token === 'string') {
-          continue;
-        }
-
-        var content = token.content;
-
-        if (!Array.isArray(content)) {
-          if (typeof content !== 'string') {
-            findTemplateStrings([content]);
-          }
-
-          continue;
-        }
-
-        if (token.type === 'template-string') {
-          /**
-           * A JavaScript template-string token will look like this:
-           *
-           * ["template-string", [
-           *     ["template-punctuation", "`"],
-           *     (
-           *         An array of "string" and "interpolation" tokens. This is the simple string case.
-           *         or
-           *         ["embedded-code", "..."] This is the token containing the embedded code.
-           *                                  It also has an alias which is the language of the embedded code.
-           *     ),
-           *     ["template-punctuation", "`"]
-           * ]]
-           */
-          var embedded = content[1];
-
-          if (content.length === 3 && typeof embedded !== 'string' && embedded.type === 'embedded-code') {
-            // get string content
-            var code = stringContent(embedded);
-            var alias = embedded.alias;
-            var language = Array.isArray(alias) ? alias[0] : alias;
-            var grammar = Prism.languages[language];
-
-            if (!grammar) {
-              // the embedded language isn't registered.
-              continue;
-            }
-
-            content[1] = tokenizeEmbedded(code, grammar, language);
-          }
-        } else {
-          findTemplateStrings(content);
-        }
-      }
-    }
-
-    findTemplateStrings(env.tokens);
-  });
-  /**
-   * Returns the string content of a token or token stream.
-   *
-   * @param {string | Token | (string | Token)[]} value
-   * @returns {string}
-   */
-
-  function stringContent(value) {
-    if (typeof value === 'string') {
-      return value;
-    } else if (Array.isArray(value)) {
-      return value.map(stringContent).join('');
-    } else {
-      return stringContent(value.content);
-    }
-  }
-})(prism);
-/* "prismjs/components/prism-typescript" */
-
-
-(function (Prism) {
-  Prism.languages.typescript = Prism.languages.extend('javascript', {
-    'class-name': {
-      pattern: /(\b(?:class|extends|implements|instanceof|interface|new|type)\s+)(?!keyof\b)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?:\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>)?/,
-      lookbehind: true,
-      greedy: true,
-      inside: null // see below
-
-    },
-    'builtin': /\b(?:Array|Function|Promise|any|boolean|console|never|number|string|symbol|unknown)\b/
-  }); // The keywords TypeScript adds to JavaScript
-
-  Prism.languages.typescript.keyword.push(/\b(?:abstract|declare|is|keyof|readonly|require)\b/, // keywords that have to be followed by an identifier
-  /\b(?:asserts|infer|interface|module|namespace|type)\b(?=\s*(?:[{_$a-zA-Z\xA0-\uFFFF]|$))/, // This is for `import type *, {}`
-  /\btype\b(?=\s*(?:[\{*]|$))/); // doesn't work with TS because TS is too complex
-
-  delete Prism.languages.typescript['parameter'];
-  delete Prism.languages.typescript['literal-property']; // a version of typescript specifically for highlighting types
-
-  var typeInside = Prism.languages.extend('typescript', {});
-  delete typeInside['class-name'];
-  Prism.languages.typescript['class-name'].inside = typeInside;
-  Prism.languages.insertBefore('typescript', 'function', {
-    'decorator': {
-      pattern: /@[$\w\xA0-\uFFFF]+/,
-      inside: {
-        'at': {
-          pattern: /^@/,
-          alias: 'operator'
-        },
-        'function': /^[\s\S]+/
-      }
-    },
-    'generic-function': {
-      // e.g. foo<T extends "bar" | "baz">( ...
-      pattern: /#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>(?=\s*\()/,
-      greedy: true,
-      inside: {
-        'function': /^#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/,
-        'generic': {
-          pattern: /<[\s\S]+/,
-          // everything after the first <
-          alias: 'class-name',
-          inside: typeInside
-        }
-      }
-    }
-  });
-  Prism.languages.ts = Prism.languages.typescript;
-})(prism);
-/* "prismjs/components/prism-js-extras" */
-
-
-(function (Prism) {
-  Prism.languages.insertBefore('javascript', 'function-variable', {
-    'method-variable': {
-      pattern: RegExp('(\\.\\s*)' + Prism.languages.javascript['function-variable'].pattern.source),
-      lookbehind: true,
-      alias: ['function-variable', 'method', 'function', 'property-access']
-    }
-  });
-  Prism.languages.insertBefore('javascript', 'function', {
-    'method': {
-      pattern: RegExp('(\\.\\s*)' + Prism.languages.javascript['function'].source),
-      lookbehind: true,
-      alias: ['function', 'property-access']
-    }
-  });
-  Prism.languages.insertBefore('javascript', 'constant', {
-    'known-class-name': [{
-      // standard built-ins
-      // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects
-      pattern: /\b(?:(?:Float(?:32|64)|(?:Int|Uint)(?:8|16|32)|Uint8Clamped)?Array|ArrayBuffer|BigInt|Boolean|DataView|Date|Error|Function|Intl|JSON|(?:Weak)?(?:Map|Set)|Math|Number|Object|Promise|Proxy|Reflect|RegExp|String|Symbol|WebAssembly)\b/,
-      alias: 'class-name'
-    }, {
-      // errors
-      pattern: /\b(?:[A-Z]\w*)Error\b/,
-      alias: 'class-name'
-    }]
-  });
-  /**
-   * Replaces the `<ID>` placeholder in the given pattern with a pattern for general JS identifiers.
-   *
-   * @param {string} source
-   * @param {string} [flags]
-   * @returns {RegExp}
-   */
-
-  function withId(source, flags) {
-    return RegExp(source.replace(/<ID>/g, function () {
-      return /(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*/.source;
-    }), flags);
-  }
-
-  Prism.languages.insertBefore('javascript', 'keyword', {
-    'imports': {
-      // https://tc39.es/ecma262/#sec-imports
-      pattern: withId(/(\bimport\b\s*)(?:<ID>(?:\s*,\s*(?:\*\s*as\s+<ID>|\{[^{}]*\}))?|\*\s*as\s+<ID>|\{[^{}]*\})(?=\s*\bfrom\b)/.source),
-      lookbehind: true,
-      inside: Prism.languages.javascript
-    },
-    'exports': {
-      // https://tc39.es/ecma262/#sec-exports
-      pattern: withId(/(\bexport\b\s*)(?:\*(?:\s*as\s+<ID>)?(?=\s*\bfrom\b)|\{[^{}]*\})/.source),
-      lookbehind: true,
-      inside: Prism.languages.javascript
-    }
-  });
-  Prism.languages.javascript['keyword'].unshift({
-    pattern: /\b(?:as|default|export|from|import)\b/,
-    alias: 'module'
-  }, {
-    pattern: /\b(?:await|break|catch|continue|do|else|finally|for|if|return|switch|throw|try|while|yield)\b/,
-    alias: 'control-flow'
-  }, {
-    pattern: /\bnull\b/,
-    alias: ['null', 'nil']
-  }, {
-    pattern: /\bundefined\b/,
-    alias: 'nil'
-  });
-  Prism.languages.insertBefore('javascript', 'operator', {
-    'spread': {
-      pattern: /\.{3}/,
-      alias: 'operator'
-    },
-    'arrow': {
-      pattern: /=>/,
-      alias: 'operator'
-    }
-  });
-  Prism.languages.insertBefore('javascript', 'punctuation', {
-    'property-access': {
-      pattern: withId(/(\.\s*)#?<ID>/.source),
-      lookbehind: true
-    },
-    'maybe-class-name': {
-      pattern: /(^|[^$\w\xA0-\uFFFF])[A-Z][$\w\xA0-\uFFFF]+/,
-      lookbehind: true
-    },
-    'dom': {
-      // this contains only a few commonly used DOM variables
-      pattern: /\b(?:document|(?:local|session)Storage|location|navigator|performance|window)\b/,
-      alias: 'variable'
-    },
-    'console': {
-      pattern: /\bconsole(?=\s*\.)/,
-      alias: 'class-name'
-    }
-  }); // add 'maybe-class-name' to tokens which might be a class name
-
-  var maybeClassNameTokens = ['function', 'function-variable', 'method', 'method-variable', 'property-access'];
-
-  for (var i = 0; i < maybeClassNameTokens.length; i++) {
-    var token = maybeClassNameTokens[i];
-    var value = Prism.languages.javascript[token]; // convert regex to object
-
-    if (Prism.util.type(value) === 'RegExp') {
-      value = Prism.languages.javascript[token] = {
-        pattern: value
-      };
-    } // keep in mind that we don't support arrays
-
-
-    var inside = value.inside || {};
-    value.inside = inside;
-    inside['maybe-class-name'] = /^[A-Z][\s\S]*/;
-  }
-})(prism);
-/* "prismjs/components/prism-jsx" */
-
-
-(function (Prism) {
-  var javascript = Prism.util.clone(Prism.languages.javascript);
-  var space = /(?:\s|\/\/.*(?!.)|\/\*(?:[^*]|\*(?!\/))\*\/)/.source;
-  var braces = /(?:\{(?:\{(?:\{[^{}]*\}|[^{}])*\}|[^{}])*\})/.source;
-  var spread = /(?:\{<S>*\.{3}(?:[^{}]|<BRACES>)*\})/.source;
-  /**
-   * @param {string} source
-   * @param {string} [flags]
-   */
-
-  function re(source, flags) {
-    source = source.replace(/<S>/g, function () {
-      return space;
-    }).replace(/<BRACES>/g, function () {
-      return braces;
-    }).replace(/<SPREAD>/g, function () {
-      return spread;
-    });
-    return RegExp(source, flags);
-  }
-
-  spread = re(spread).source;
-  Prism.languages.jsx = Prism.languages.extend('markup', javascript);
-  Prism.languages.jsx.tag.pattern = re(/<\/?(?:[\w.:-]+(?:<S>+(?:[\w.:$-]+(?:=(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s{'"/>=]+|<BRACES>))?|<SPREAD>))*<S>*\/?)?>/.source);
-  Prism.languages.jsx.tag.inside['tag'].pattern = /^<\/?[^\s>\/]*/;
-  Prism.languages.jsx.tag.inside['attr-value'].pattern = /=(?!\{)(?:"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*'|[^\s'">]+)/;
-  Prism.languages.jsx.tag.inside['tag'].inside['class-name'] = /^[A-Z]\w*(?:\.[A-Z]\w*)*$/;
-  Prism.languages.jsx.tag.inside['comment'] = javascript['comment'];
-  Prism.languages.insertBefore('inside', 'attr-name', {
-    'spread': {
-      pattern: re(/<SPREAD>/.source),
-      inside: Prism.languages.jsx
-    }
-  }, Prism.languages.jsx.tag);
-  Prism.languages.insertBefore('inside', 'special-attr', {
-    'script': {
-      // Allow for two levels of nesting
-      pattern: re(/=<BRACES>/.source),
-      alias: 'language-javascript',
-      inside: {
-        'script-punctuation': {
-          pattern: /^=(?=\{)/,
-          alias: 'punctuation'
-        },
-        rest: Prism.languages.jsx
-      }
-    }
-  }, Prism.languages.jsx.tag); // The following will handle plain text inside tags
-
-  var stringifyToken = function (token) {
-    if (!token) {
-      return '';
-    }
-
-    if (typeof token === 'string') {
-      return token;
-    }
-
-    if (typeof token.content === 'string') {
-      return token.content;
-    }
-
-    return token.content.map(stringifyToken).join('');
-  };
-
-  var walkTokens = function (tokens) {
-    var openedTags = [];
-
-    for (var i = 0; i < tokens.length; i++) {
-      var token = tokens[i];
-      var notTagNorBrace = false;
-
-      if (typeof token !== 'string') {
-        if (token.type === 'tag' && token.content[0] && token.content[0].type === 'tag') {
-          // We found a tag, now find its kind
-          if (token.content[0].content[0].content === '</') {
-            // Closing tag
-            if (openedTags.length > 0 && openedTags[openedTags.length - 1].tagName === stringifyToken(token.content[0].content[1])) {
-              // Pop matching opening tag
-              openedTags.pop();
-            }
-          } else {
-            if (token.content[token.content.length - 1].content === '/>') ; else {
-              // Opening tag
-              openedTags.push({
-                tagName: stringifyToken(token.content[0].content[1]),
-                openedBraces: 0
-              });
-            }
-          }
-        } else if (openedTags.length > 0 && token.type === 'punctuation' && token.content === '{') {
-          // Here we might have entered a JSX context inside a tag
-          openedTags[openedTags.length - 1].openedBraces++;
-        } else if (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces > 0 && token.type === 'punctuation' && token.content === '}') {
-          // Here we might have left a JSX context inside a tag
-          openedTags[openedTags.length - 1].openedBraces--;
-        } else {
-          notTagNorBrace = true;
-        }
-      }
-
-      if (notTagNorBrace || typeof token === 'string') {
-        if (openedTags.length > 0 && openedTags[openedTags.length - 1].openedBraces === 0) {
-          // Here we are inside a tag, and not inside a JSX context.
-          // That's plain text: drop any tokens matched.
-          var plainText = stringifyToken(token); // And merge text with adjacent text
-
-          if (i < tokens.length - 1 && (typeof tokens[i + 1] === 'string' || tokens[i + 1].type === 'plain-text')) {
-            plainText += stringifyToken(tokens[i + 1]);
-            tokens.splice(i + 1, 1);
-          }
-
-          if (i > 0 && (typeof tokens[i - 1] === 'string' || tokens[i - 1].type === 'plain-text')) {
-            plainText = stringifyToken(tokens[i - 1]) + plainText;
-            tokens.splice(i - 1, 1);
-            i--;
-          }
-
-          tokens[i] = new Prism.Token('plain-text', plainText, null, plainText);
-        }
-      }
-
-      if (token.content && typeof token.content !== 'string') {
-        walkTokens(token.content);
-      }
-    }
-  };
-
-  Prism.hooks.add('after-tokenize', function (env) {
-    if (env.language !== 'jsx' && env.language !== 'tsx') {
-      return;
-    }
-
-    walkTokens(env.tokens);
-  });
-})(prism);
-/* "prismjs/components/prism-diff" */
-
-
-(function (Prism) {
-  Prism.languages.diff = {
-    'coord': [// Match all kinds of coord lines (prefixed by "+++", "---" or "***").
-    /^(?:\*{3}|-{3}|\+{3}).*$/m, // Match "@@ ... @@" coord lines in unified diff.
-    /^@@.*@@$/m, // Match coord lines in normal diff (starts with a number).
-    /^\d.*$/m] // deleted, inserted, unchanged, diff
-
-  };
-  /**
-   * A map from the name of a block to its line prefix.
-   *
-   * @type {Object<string, string>}
-   */
-
-  var PREFIXES = {
-    'deleted-sign': '-',
-    'deleted-arrow': '<',
-    'inserted-sign': '+',
-    'inserted-arrow': '>',
-    'unchanged': ' ',
-    'diff': '!'
-  }; // add a token for each prefix
-
-  Object.keys(PREFIXES).forEach(function (name) {
-    var prefix = PREFIXES[name];
-    var alias = [];
-
-    if (!/^\w+$/.test(name)) {
-      // "deleted-sign" -> "deleted"
-      alias.push(/\w+/.exec(name)[0]);
-    }
-
-    if (name === 'diff') {
-      alias.push('bold');
-    }
-
-    Prism.languages.diff[name] = {
-      pattern: RegExp('^(?:[' + prefix + '].*(?:\r\n?|\n|(?![\\s\\S])))+', 'm'),
-      alias: alias,
-      inside: {
-        'line': {
-          pattern: /(.)(?=[\s\S]).*(?:\r\n?|\n)?/,
-          lookbehind: true
-        },
-        'prefix': {
-          pattern: /[\s\S]/,
-          alias: /\w+/.exec(name)[0]
-        }
-      }
-    };
-  }); // make prefixes available to Diff plugin
-
-  Object.defineProperty(Prism.languages.diff, 'PREFIXES', {
-    value: PREFIXES
-  });
-})(prism);
-/* "prismjs/components/prism-git" */
-
-
-prism.languages.git = {
-  /*
-   * A simple one line comment like in a git status command
-   * For instance:
-   * $ git status
-   * # On branch infinite-scroll
-   * # Your branch and 'origin/sharedBranches/frontendTeam/infinite-scroll' have diverged,
-   * # and have 1 and 2 different commits each, respectively.
-   * nothing to commit (working directory clean)
-   */
-  'comment': /^#.*/m,
-
-  /*
-   * Regexp to match the changed lines in a git diff output. Check the example below.
-   */
-  'deleted': /^[-–].*/m,
-  'inserted': /^\+.*/m,
-
-  /*
-   * a string (double and simple quote)
-   */
-  'string': /("|')(?:\\.|(?!\1)[^\\\r\n])*\1/,
-
-  /*
-   * a git command. It starts with a random prompt finishing by a $, then "git" then some other parameters
-   * For instance:
-   * $ git add file.txt
-   */
-  'command': {
-    pattern: /^.*\$ git .*$/m,
-    inside: {
-      /*
-       * A git command can contain a parameter starting by a single or a double dash followed by a string
-       * For instance:
-       * $ git diff --cached
-       * $ git log -p
-       */
-      'parameter': /\s--?\w+/
-    }
-  },
-
-  /*
-   * Coordinates displayed in a git diff command
-   * For instance:
-   * $ git diff
-   * diff --git file.txt file.txt
-   * index 6214953..1d54a52 100644
-   * --- file.txt
-   * +++ file.txt
-   * @@ -1 +1,2 @@
-   * -Here's my tetx file
-   * +Here's my text file
-   * +And this is the second line
-   */
-  'coord': /^@@.*@@$/m,
-
-  /*
-   * Match a "commit [SHA1]" line in a git log output.
-   * For instance:
-   * $ git log
-   * commit a11a14ef7e26f2ca62d4b35eac455ce636d0dc09
-   * Author: lgiraudel
-   * Date:   Mon Feb 17 11:18:34 2014 +0100
-   *
-   *     Add of a new line
-   */
-  'commit-sha1': /^commit \w{40}$/m
-};
-/* "prismjs/components/prism-go" */
-
-prism.languages.go = prism.languages.extend('clike', {
-  'string': {
-    pattern: /(^|[^\\])"(?:\\.|[^"\\\r\n])*"|`[^`]*`/,
-    lookbehind: true,
-    greedy: true
-  },
-  'keyword': /\b(?:break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(?:to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,
-  'boolean': /\b(?:_|false|iota|nil|true)\b/,
-  'number': [// binary and octal integers
-  /\b0(?:b[01_]+|o[0-7_]+)i?\b/i, // hexadecimal integers and floats
-  /\b0x(?:[a-f\d_]+(?:\.[a-f\d_]*)?|\.[a-f\d_]+)(?:p[+-]?\d+(?:_\d+)*)?i?(?!\w)/i, // decimal integers and floats
-  /(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?[\d_]+)?i?(?!\w)/i],
-  'operator': /[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,
-  'builtin': /\b(?:append|bool|byte|cap|close|complex|complex(?:64|128)|copy|delete|error|float(?:32|64)|u?int(?:8|16|32|64)?|imag|len|make|new|panic|print(?:ln)?|real|recover|rune|string|uintptr)\b/
-});
-prism.languages.insertBefore('go', 'string', {
-  'char': {
-    pattern: /'(?:\\.|[^'\\\r\n]){0,10}'/,
-    greedy: true
-  }
-});
-delete prism.languages.go['class-name'];
-/* "prismjs/components/prism-markup-templating" */
-
-(function (Prism) {
-  /**
-   * Returns the placeholder for the given language id and index.
-   *
-   * @param {string} language
-   * @param {string|number} index
-   * @returns {string}
-   */
-  function getPlaceholder(language, index) {
-    return '___' + language.toUpperCase() + index + '___';
-  }
-
-  Object.defineProperties(Prism.languages['markup-templating'] = {}, {
-    buildPlaceholders: {
-      /**
-       * Tokenize all inline templating expressions matching `placeholderPattern`.
-       *
-       * If `replaceFilter` is provided, only matches of `placeholderPattern` for which `replaceFilter` returns
-       * `true` will be replaced.
-       *
-       * @param {object} env The environment of the `before-tokenize` hook.
-       * @param {string} language The language id.
-       * @param {RegExp} placeholderPattern The matches of this pattern will be replaced by placeholders.
-       * @param {(match: string) => boolean} [replaceFilter]
-       */
-      value: function (env, language, placeholderPattern, replaceFilter) {
-        if (env.language !== language) {
-          return;
-        }
-
-        var tokenStack = env.tokenStack = [];
-        env.code = env.code.replace(placeholderPattern, function (match) {
-          if (typeof replaceFilter === 'function' && !replaceFilter(match)) {
-            return match;
-          }
-
-          var i = tokenStack.length;
-          var placeholder; // Check for existing strings
-
-          while (env.code.indexOf(placeholder = getPlaceholder(language, i)) !== -1) {
-            ++i;
-          } // Create a sparse array
-
-
-          tokenStack[i] = match;
-          return placeholder;
-        }); // Switch the grammar to markup
-
-        env.grammar = Prism.languages.markup;
-      }
-    },
-    tokenizePlaceholders: {
-      /**
-       * Replace placeholders with proper tokens after tokenizing.
-       *
-       * @param {object} env The environment of the `after-tokenize` hook.
-       * @param {string} language The language id.
-       */
-      value: function (env, language) {
-        if (env.language !== language || !env.tokenStack) {
-          return;
-        } // Switch the grammar back
-
-
-        env.grammar = Prism.languages[language];
-        var j = 0;
-        var keys = Object.keys(env.tokenStack);
-
-        function walkTokens(tokens) {
-          for (var i = 0; i < tokens.length; i++) {
-            // all placeholders are replaced already
-            if (j >= keys.length) {
-              break;
-            }
-
-            var token = tokens[i];
-
-            if (typeof token === 'string' || token.content && typeof token.content === 'string') {
-              var k = keys[j];
-              var t = env.tokenStack[k];
-              var s = typeof token === 'string' ? token : token.content;
-              var placeholder = getPlaceholder(language, k);
-              var index = s.indexOf(placeholder);
-
-              if (index > -1) {
-                ++j;
-                var before = s.substring(0, index);
-                var middle = new Prism.Token(language, Prism.tokenize(t, env.grammar), 'language-' + language, t);
-                var after = s.substring(index + placeholder.length);
-                var replacement = [];
-
-                if (before) {
-                  replacement.push.apply(replacement, walkTokens([before]));
-                }
-
-                replacement.push(middle);
-
-                if (after) {
-                  replacement.push.apply(replacement, walkTokens([after]));
-                }
-
-                if (typeof token === 'string') {
-                  tokens.splice.apply(tokens, [i, 1].concat(replacement));
-                } else {
-                  token.content = replacement;
-                }
-              }
-            } else if (token.content
-            /* && typeof token.content !== 'string' */
-            ) {
-                walkTokens(token.content);
-              }
-          }
-
-          return tokens;
-        }
-
-        walkTokens(env.tokens);
-      }
-    }
-  });
-})(prism);
-/* "prismjs/components/prism-handlebars" */
-
-
-(function (Prism) {
-  Prism.languages.handlebars = {
-    'comment': /\{\{![\s\S]*?\}\}/,
-    'delimiter': {
-      pattern: /^\{\{\{?|\}\}\}?$/,
-      alias: 'punctuation'
-    },
-    'string': /(["'])(?:\\.|(?!\1)[^\\\r\n])*\1/,
-    'number': /\b0x[\dA-Fa-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:[Ee][+-]?\d+)?/,
-    'boolean': /\b(?:false|true)\b/,
-    'block': {
-      pattern: /^(\s*(?:~\s*)?)[#\/]\S+?(?=\s*(?:~\s*)?$|\s)/,
-      lookbehind: true,
-      alias: 'keyword'
-    },
-    'brackets': {
-      pattern: /\[[^\]]+\]/,
-      inside: {
-        punctuation: /\[|\]/,
-        variable: /[\s\S]+/
-      }
-    },
-    'punctuation': /[!"#%&':()*+,.\/;<=>@\[\\\]^`{|}~]/,
-    'variable': /[^!"#%&'()*+,\/;<=>@\[\\\]^`{|}~\s]+/
-  };
-  Prism.hooks.add('before-tokenize', function (env) {
-    var handlebarsPattern = /\{\{\{[\s\S]+?\}\}\}|\{\{[\s\S]+?\}\}/g;
-    Prism.languages['markup-templating'].buildPlaceholders(env, 'handlebars', handlebarsPattern);
-  });
-  Prism.hooks.add('after-tokenize', function (env) {
-    Prism.languages['markup-templating'].tokenizePlaceholders(env, 'handlebars');
-  });
-  Prism.languages.hbs = Prism.languages.handlebars;
-})(prism);
-/* "prismjs/components/prism-json" */
-// https://www.json.org/json-en.html
-
-
-prism.languages.json = {
-  'property': {
-    pattern: /(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?=\s*:)/,
-    lookbehind: true,
-    greedy: true
-  },
-  'string': {
-    pattern: /(^|[^\\])"(?:\\.|[^\\"\r\n])*"(?!\s*:)/,
-    lookbehind: true,
-    greedy: true
-  },
-  'comment': {
-    pattern: /\/\/.*|\/\*[\s\S]*?(?:\*\/|$)/,
-    greedy: true
-  },
-  'number': /-?\b\d+(?:\.\d+)?(?:e[+-]?\d+)?\b/i,
-  'punctuation': /[{}[\],]/,
-  'operator': /:/,
-  'boolean': /\b(?:false|true)\b/,
-  'null': {
-    pattern: /\bnull\b/,
-    alias: 'keyword'
-  }
-};
-prism.languages.webmanifest = prism.languages.json;
-/* "prismjs/components/prism-less" */
-
-/* FIXME :
- :extend() is not handled specifically : its highlighting is buggy.
- Mixin usage must be inside a ruleset to be highlighted.
- At-rules (e.g. import) containing interpolations are buggy.
- Detached rulesets are highlighted as at-rules.
- A comment before a mixin usage prevents the latter to be properly highlighted.
- */
-
-prism.languages.less = prism.languages.extend('css', {
-  'comment': [/\/\*[\s\S]*?\*\//, {
-    pattern: /(^|[^\\])\/\/.*/,
-    lookbehind: true
-  }],
-  'atrule': {
-    pattern: /@[\w-](?:\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};\s]|\s+(?!\s))*?(?=\s*\{)/,
-    inside: {
-      'punctuation': /[:()]/
-    }
-  },
-  // selectors and mixins are considered the same
-  'selector': {
-    pattern: /(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\((?:[^(){}]|\([^(){}]*\))*\)|[^(){};@\s]|\s+(?!\s))*?(?=\s*\{)/,
-    inside: {
-      // mixin parameters
-      'variable': /@+[\w-]+/
-    }
-  },
-  'property': /(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/,
-  'operator': /[+\-*\/]/
-});
-prism.languages.insertBefore('less', 'property', {
-  'variable': [// Variable declaration (the colon must be consumed!)
-  {
-    pattern: /@[\w-]+\s*:/,
-    inside: {
-      'punctuation': /:/
-    }
-  }, // Variable usage
-  /@@?[\w-]+/],
-  'mixin-usage': {
-    pattern: /([{;]\s*)[.#](?!\d)[\w-].*?(?=[(;])/,
-    lookbehind: true,
-    alias: 'function'
-  }
-});
-/* "prismjs/components/prism-makefile" */
-
-prism.languages.makefile = {
-  'comment': {
-    pattern: /(^|[^\\])#(?:\\(?:\r\n|[\s\S])|[^\\\r\n])*/,
-    lookbehind: true
-  },
-  'string': {
-    pattern: /(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
-    greedy: true
-  },
-  'builtin-target': {
-    pattern: /\.[A-Z][^:#=\s]+(?=\s*:(?!=))/,
-    alias: 'builtin'
-  },
-  'target': {
-    pattern: /^(?:[^:=\s]|[ \t]+(?![\s:]))+(?=\s*:(?!=))/m,
-    alias: 'symbol',
-    inside: {
-      'variable': /\$+(?:(?!\$)[^(){}:#=\s]+|(?=[({]))/
-    }
-  },
-  'variable': /\$+(?:(?!\$)[^(){}:#=\s]+|\([@*%<^+?][DF]\)|(?=[({]))/,
-  // Directives
-  'keyword': /-include\b|\b(?:define|else|endef|endif|export|ifn?def|ifn?eq|include|override|private|sinclude|undefine|unexport|vpath)\b/,
-  'function': {
-    pattern: /(\()(?:abspath|addsuffix|and|basename|call|dir|error|eval|file|filter(?:-out)?|findstring|firstword|flavor|foreach|guile|if|info|join|lastword|load|notdir|or|origin|patsubst|realpath|shell|sort|strip|subst|suffix|value|warning|wildcard|word(?:list|s)?)(?=[ \t])/,
-    lookbehind: true
-  },
-  'operator': /(?:::|[?:+!])?=|[|@]/,
-  'punctuation': /[:;(){}]/
-};
-/* "prismjs/components/prism-objectivec" */
-
-prism.languages.objectivec = prism.languages.extend('c', {
-  'string': {
-    pattern: /@?"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,
-    greedy: true
-  },
-  'keyword': /\b(?:asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|in|inline|int|long|register|return|self|short|signed|sizeof|static|struct|super|switch|typedef|typeof|union|unsigned|void|volatile|while)\b|(?:@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,
-  'operator': /-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/
-});
-delete prism.languages.objectivec['class-name'];
-prism.languages.objc = prism.languages.objectivec;
-/* "prismjs/components/prism-ocaml" */
-// https://ocaml.org/manual/lex.html
-
-prism.languages.ocaml = {
-  'comment': {
-    pattern: /\(\*[\s\S]*?\*\)/,
-    greedy: true
-  },
-  'char': {
-    pattern: /'(?:[^\\\r\n']|\\(?:.|[ox]?[0-9a-f]{1,3}))'/i,
-    greedy: true
-  },
-  'string': [{
-    pattern: /"(?:\\(?:[\s\S]|\r\n)|[^\\\r\n"])*"/,
-    greedy: true
-  }, {
-    pattern: /\{([a-z_]*)\|[\s\S]*?\|\1\}/,
-    greedy: true
-  }],
-  'number': [// binary and octal
-  /\b(?:0b[01][01_]*|0o[0-7][0-7_]*)\b/i, // hexadecimal
-  /\b0x[a-f0-9][a-f0-9_]*(?:\.[a-f0-9_]*)?(?:p[+-]?\d[\d_]*)?(?!\w)/i, // decimal
-  /\b\d[\d_]*(?:\.[\d_]*)?(?:e[+-]?\d[\d_]*)?(?!\w)/i],
-  'directive': {
-    pattern: /\B#\w+/,
-    alias: 'property'
-  },
-  'label': {
-    pattern: /\B~\w+/,
-    alias: 'property'
-  },
-  'type-variable': {
-    pattern: /\B'\w+/,
-    alias: 'function'
-  },
-  'variant': {
-    pattern: /`\w+/,
-    alias: 'symbol'
-  },
-  // For the list of keywords and operators,
-  // see: http://caml.inria.fr/pub/docs/manual-ocaml/lex.html#sec84
-  'keyword': /\b(?:as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|match|method|module|mutable|new|nonrec|object|of|open|private|rec|sig|struct|then|to|try|type|val|value|virtual|when|where|while|with)\b/,
-  'boolean': /\b(?:false|true)\b/,
-  'operator-like-punctuation': {
-    pattern: /\[[<>|]|[>|]\]|\{<|>\}/,
-    alias: 'punctuation'
-  },
-  // Custom operators are allowed
-  'operator': /\.[.~]|:[=>]|[=<>@^|&+\-*\/$%!?~][!$%&*+\-.\/:<=>?@^|~]*|\b(?:and|asr|land|lor|lsl|lsr|lxor|mod|or)\b/,
-  'punctuation': /;;|::|[(){}\[\].,:;#]|\b_\b/
-};
-/* "prismjs/components/prism-python" */
-
-prism.languages.python = {
-  'comment': {
-    pattern: /(^|[^\\])#.*/,
-    lookbehind: true,
-    greedy: true
-  },
-  'string-interpolation': {
-    pattern: /(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,
-    greedy: true,
-    inside: {
-      'interpolation': {
-        // "{" <expression> <optional "!s", "!r", or "!a"> <optional ":" format specifier> "}"
-        pattern: /((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,
-        lookbehind: true,
-        inside: {
-          'format-spec': {
-            pattern: /(:)[^:(){}]+(?=\}$)/,
-            lookbehind: true
-          },
-          'conversion-option': {
-            pattern: /![sra](?=[:}]$)/,
-            alias: 'punctuation'
-          },
-          rest: null
-        }
-      },
-      'string': /[\s\S]+/
-    }
-  },
-  'triple-quoted-string': {
-    pattern: /(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,
-    greedy: true,
-    alias: 'string'
-  },
-  'string': {
-    pattern: /(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,
-    greedy: true
-  },
-  'function': {
-    pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,
-    lookbehind: true
-  },
-  'class-name': {
-    pattern: /(\bclass\s+)\w+/i,
-    lookbehind: true
-  },
-  'decorator': {
-    pattern: /(^[\t ]*)@\w+(?:\.\w+)*/m,
-    lookbehind: true,
-    alias: ['annotation', 'punctuation'],
-    inside: {
-      'punctuation': /\./
-    }
-  },
-  'keyword': /\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,
-  'builtin': /\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,
-  'boolean': /\b(?:False|None|True)\b/,
-  'number': /\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,
-  'operator': /[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,
-  'punctuation': /[{}[\];(),.:]/
-};
-prism.languages.python['string-interpolation'].inside['interpolation'].inside.rest = prism.languages.python;
-prism.languages.py = prism.languages.python;
-/* "prismjs/components/prism-reason" */
-
-prism.languages.reason = prism.languages.extend('clike', {
-  'string': {
-    pattern: /"(?:\\(?:\r\n|[\s\S])|[^\\\r\n"])*"/,
-    greedy: true
-  },
-  // 'class-name' must be matched *after* 'constructor' defined below
-  'class-name': /\b[A-Z]\w*/,
-  'keyword': /\b(?:and|as|assert|begin|class|constraint|do|done|downto|else|end|exception|external|for|fun|function|functor|if|in|include|inherit|initializer|lazy|let|method|module|mutable|new|nonrec|object|of|open|or|private|rec|sig|struct|switch|then|to|try|type|val|virtual|when|while|with)\b/,
-  'operator': /\.{3}|:[:=]|\|>|->|=(?:==?|>)?|<=?|>=?|[|^?'#!~`]|[+\-*\/]\.?|\b(?:asr|land|lor|lsl|lsr|lxor|mod)\b/
-});
-prism.languages.insertBefore('reason', 'class-name', {
-  'char': {
-    pattern: /'(?:\\x[\da-f]{2}|\\o[0-3][0-7][0-7]|\\\d{3}|\\.|[^'\\\r\n])'/,
-    greedy: true
-  },
-  // Negative look-ahead prevents from matching things like String.capitalize
-  'constructor': /\b[A-Z]\w*\b(?!\s*\.)/,
-  'label': {
-    pattern: /\b[a-z]\w*(?=::)/,
-    alias: 'symbol'
-  }
-}); // We can't match functions property, so let's not even try.
-
-delete prism.languages.reason.function;
-/* "prismjs/components/prism-sass" */
-
-(function (Prism) {
-  Prism.languages.sass = Prism.languages.extend('css', {
-    // Sass comments don't need to be closed, only indented
-    'comment': {
-      pattern: /^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t].+)*/m,
-      lookbehind: true,
-      greedy: true
-    }
-  });
-  Prism.languages.insertBefore('sass', 'atrule', {
-    // We want to consume the whole line
-    'atrule-line': {
-      // Includes support for = and + shortcuts
-      pattern: /^(?:[ \t]*)[@+=].+/m,
-      greedy: true,
-      inside: {
-        'atrule': /(?:@[\w-]+|[+=])/
-      }
-    }
-  });
-  delete Prism.languages.sass.atrule;
-  var variable = /\$[-\w]+|#\{\$[-\w]+\}/;
-  var operator = [/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|not|or)\b/, {
-    pattern: /(\s)-(?=\s)/,
-    lookbehind: true
-  }];
-  Prism.languages.insertBefore('sass', 'property', {
-    // We want to consume the whole line
-    'variable-line': {
-      pattern: /^[ \t]*\$.+/m,
-      greedy: true,
-      inside: {
-        'punctuation': /:/,
-        'variable': variable,
-        'operator': operator
-      }
-    },
-    // We want to consume the whole line
-    'property-line': {
-      pattern: /^[ \t]*(?:[^:\s]+ *:.*|:[^:\s].*)/m,
-      greedy: true,
-      inside: {
-        'property': [/[^:\s]+(?=\s*:)/, {
-          pattern: /(:)[^:\s]+/,
-          lookbehind: true
-        }],
-        'punctuation': /:/,
-        'variable': variable,
-        'operator': operator,
-        'important': Prism.languages.sass.important
-      }
-    }
-  });
-  delete Prism.languages.sass.property;
-  delete Prism.languages.sass.important; // Now that whole lines for other patterns are consumed,
-  // what's left should be selectors
-
-  Prism.languages.insertBefore('sass', 'punctuation', {
-    'selector': {
-      pattern: /^([ \t]*)\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,[^,\r\n]+|[^,\r\n]*)(?:,[^,\r\n]+)*)*/m,
-      lookbehind: true,
-      greedy: true
-    }
-  });
-})(prism);
-/* "prismjs/components/prism-scss" */
-
-
-prism.languages.scss = prism.languages.extend('css', {
-  'comment': {
-    pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,
-    lookbehind: true
-  },
-  'atrule': {
-    pattern: /@[\w-](?:\([^()]+\)|[^()\s]|\s+(?!\s))*?(?=\s+[{;])/,
-    inside: {
-      'rule': /@[\w-]+/ // See rest below
-
-    }
-  },
-  // url, compassified
-  'url': /(?:[-a-z]+-)?url(?=\()/i,
-  // CSS selector regex is not appropriate for Sass
-  // since there can be lot more things (var, @ directive, nesting..)
-  // a selector must start at the end of a property or after a brace (end of other rules or nesting)
-  // it can contain some characters that aren't used for defining rules or end of selector, & (parent selector), or interpolated variable
-  // the end of a selector is found when there is no rules in it ( {} or {\s}) or if there is a property (because an interpolated var
-  // can "pass" as a selector- e.g: proper#{$erty})
-  // this one was hard to do, so please be careful if you edit this one :)
-  'selector': {
-    // Initial look-ahead is used to prevent matching of blank selectors
-    pattern: /(?=\S)[^@;{}()]?(?:[^@;{}()\s]|\s+(?!\s)|#\{\$[-\w]+\})+(?=\s*\{(?:\}|\s|[^}][^:{}]*[:{][^}]))/,
-    inside: {
-      'parent': {
-        pattern: /&/,
-        alias: 'important'
-      },
-      'placeholder': /%[-\w]+/,
-      'variable': /\$[-\w]+|#\{\$[-\w]+\}/
-    }
-  },
-  'property': {
-    pattern: /(?:[-\w]|\$[-\w]|#\{\$[-\w]+\})+(?=\s*:)/,
-    inside: {
-      'variable': /\$[-\w]+|#\{\$[-\w]+\}/
-    }
-  }
-});
-prism.languages.insertBefore('scss', 'atrule', {
-  'keyword': [/@(?:content|debug|each|else(?: if)?|extend|for|forward|function|if|import|include|mixin|return|use|warn|while)\b/i, {
-    pattern: /( )(?:from|through)(?= )/,
-    lookbehind: true
-  }]
-});
-prism.languages.insertBefore('scss', 'important', {
-  // var and interpolated vars
-  'variable': /\$[-\w]+|#\{\$[-\w]+\}/
-});
-prism.languages.insertBefore('scss', 'function', {
-  'module-modifier': {
-    pattern: /\b(?:as|hide|show|with)\b/i,
-    alias: 'keyword'
-  },
-  'placeholder': {
-    pattern: /%[-\w]+/,
-    alias: 'selector'
-  },
-  'statement': {
-    pattern: /\B!(?:default|optional)\b/i,
-    alias: 'keyword'
-  },
-  'boolean': /\b(?:false|true)\b/,
-  'null': {
-    pattern: /\bnull\b/,
-    alias: 'keyword'
-  },
-  'operator': {
-    pattern: /(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|not|or)(?=\s)/,
-    lookbehind: true
-  }
-});
-prism.languages.scss['atrule'].inside.rest = prism.languages.scss;
-/* "prismjs/components/prism-stylus" */
-
-(function (Prism) {
-  var unit = {
-    pattern: /(\b\d+)(?:%|[a-z]+)/,
-    lookbehind: true
-  }; // 123 -123 .123 -.123 12.3 -12.3
-
-  var number = {
-    pattern: /(^|[^\w.-])-?(?:\d+(?:\.\d+)?|\.\d+)/,
-    lookbehind: true
-  };
-  var inside = {
-    'comment': {
-      pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,
-      lookbehind: true
-    },
-    'url': {
-      pattern: /\burl\((["']?).*?\1\)/i,
-      greedy: true
-    },
-    'string': {
-      pattern: /("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*\1/,
-      greedy: true
-    },
-    'interpolation': null,
-    // See below
-    'func': null,
-    // See below
-    'important': /\B!(?:important|optional)\b/i,
-    'keyword': {
-      pattern: /(^|\s+)(?:(?:else|for|if|return|unless)(?=\s|$)|@[\w-]+)/,
-      lookbehind: true
-    },
-    'hexcode': /#[\da-f]{3,6}/i,
-    'color': [/\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGr[ae]y|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGr[ae]y|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGr[ae]y|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gr[ae]y|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGr[ae]y|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGr[ae]y|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGr[ae]y|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Transparent|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i, {
-      pattern: /\b(?:hsl|rgb)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:hsl|rgb)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B/i,
-      inside: {
-        'unit': unit,
-        'number': number,
-        'function': /[\w-]+(?=\()/,
-        'punctuation': /[(),]/
-      }
-    }],
-    'entity': /\\[\da-f]{1,8}/i,
-    'unit': unit,
-    'boolean': /\b(?:false|true)\b/,
-    'operator': [// We want non-word chars around "-" because it is
-    // accepted in property names.
-    /~|[+!\/%<>?=]=?|[-:]=|\*[*=]?|\.{2,3}|&&|\|\||\B-\B|\b(?:and|in|is(?: a| defined| not|nt)?|not|or)\b/],
-    'number': number,
-    'punctuation': /[{}()\[\];:,]/
-  };
-  inside['interpolation'] = {
-    pattern: /\{[^\r\n}:]+\}/,
-    alias: 'variable',
-    inside: {
-      'delimiter': {
-        pattern: /^\{|\}$/,
-        alias: 'punctuation'
-      },
-      rest: inside
-    }
-  };
-  inside['func'] = {
-    pattern: /[\w-]+\([^)]*\).*/,
-    inside: {
-      'function': /^[^(]+/,
-      rest: inside
-    }
-  };
-  Prism.languages.stylus = {
-    'atrule-declaration': {
-      pattern: /(^[ \t]*)@.+/m,
-      lookbehind: true,
-      inside: {
-        'atrule': /^@[\w-]+/,
-        rest: inside
-      }
-    },
-    'variable-declaration': {
-      pattern: /(^[ \t]*)[\w$-]+\s*.?=[ \t]*(?:\{[^{}]*\}|\S.*|$)/m,
-      lookbehind: true,
-      inside: {
-        'variable': /^\S+/,
-        rest: inside
-      }
-    },
-    'statement': {
-      pattern: /(^[ \t]*)(?:else|for|if|return|unless)[ \t].+/m,
-      lookbehind: true,
-      inside: {
-        'keyword': /^\S+/,
-        rest: inside
-      }
-    },
-    // A property/value pair cannot end with a comma or a brace
-    // It cannot have indented content unless it ended with a semicolon
-    'property-declaration': {
-      pattern: /((?:^|\{)([ \t]*))(?:[\w-]|\{[^}\r\n]+\})+(?:\s*:\s*|[ \t]+)(?!\s)[^{\r\n]*(?:;|[^{\r\n,]$(?!(?:\r?\n|\r)(?:\{|\2[ \t])))/m,
-      lookbehind: true,
-      inside: {
-        'property': {
-          pattern: /^[^\s:]+/,
-          inside: {
-            'interpolation': inside.interpolation
-          }
-        },
-        rest: inside
-      }
-    },
-    // A selector can contain parentheses only as part of a pseudo-element
-    // It can span multiple lines.
-    // It must end with a comma or an accolade or have indented content.
-    'selector': {
-      pattern: /(^[ \t]*)(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)(?:(?:\r?\n|\r)(?:\1(?:(?=\S)(?:[^{}\r\n:()]|::?[\w-]+(?:\([^)\r\n]*\)|(?![\w-]))|\{[^}\r\n]+\})+)))*(?:,$|\{|(?=(?:\r?\n|\r)(?:\{|\1[ \t])))/m,
-      lookbehind: true,
-      inside: {
-        'interpolation': inside.interpolation,
-        'comment': inside.comment,
-        'punctuation': /[{},]/
-      }
-    },
-    'func': inside.func,
-    'string': inside.string,
-    'comment': {
-      pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,
-      lookbehind: true,
-      greedy: true
-    },
-    'interpolation': inside.interpolation,
-    'punctuation': /[{}()\[\];:.]/
-  };
-})(prism);
-/* "prismjs/components/prism-tsx" */
-
-
-(function (Prism) {
-  var typescript = Prism.util.clone(Prism.languages.typescript);
-  Prism.languages.tsx = Prism.languages.extend('jsx', typescript); // doesn't work with TS because TS is too complex
-
-  delete Prism.languages.tsx['parameter'];
-  delete Prism.languages.tsx['literal-property']; // This will prevent collisions between TSX tags and TS generic types.
-  // Idea by https://github.com/karlhorky
-  // Discussion: https://github.com/PrismJS/prism/issues/2594#issuecomment-710666928
-
-  var tag = Prism.languages.tsx.tag;
-  tag.pattern = RegExp(/(^|[^\w$]|(?=<\/))/.source + '(?:' + tag.pattern.source + ')', tag.pattern.flags);
-  tag.lookbehind = true;
-})(prism);
-/* "prismjs/components/prism-wasm" */
-
-
-prism.languages.wasm = {
-  'comment': [/\(;[\s\S]*?;\)/, {
-    pattern: /;;.*/,
-    greedy: true
-  }],
-  'string': {
-    pattern: /"(?:\\[\s\S]|[^"\\])*"/,
-    greedy: true
-  },
-  'keyword': [{
-    pattern: /\b(?:align|offset)=/,
-    inside: {
-      'operator': /=/
-    }
-  }, {
-    pattern: /\b(?:(?:f32|f64|i32|i64)(?:\.(?:abs|add|and|ceil|clz|const|convert_[su]\/i(?:32|64)|copysign|ctz|demote\/f64|div(?:_[su])?|eqz?|extend_[su]\/i32|floor|ge(?:_[su])?|gt(?:_[su])?|le(?:_[su])?|load(?:(?:8|16|32)_[su])?|lt(?:_[su])?|max|min|mul|neg?|nearest|or|popcnt|promote\/f32|reinterpret\/[fi](?:32|64)|rem_[su]|rot[lr]|shl|shr_[su]|sqrt|store(?:8|16|32)?|sub|trunc(?:_[su]\/f(?:32|64))?|wrap\/i64|xor))?|memory\.(?:grow|size))\b/,
-    inside: {
-      'punctuation': /\./
-    }
-  }, /\b(?:anyfunc|block|br(?:_if|_table)?|call(?:_indirect)?|data|drop|elem|else|end|export|func|get_(?:global|local)|global|if|import|local|loop|memory|module|mut|nop|offset|param|result|return|select|set_(?:global|local)|start|table|tee_local|then|type|unreachable)\b/],
-  'variable': /\$[\w!#$%&'*+\-./:<=>?@\\^`|~]+/,
-  'number': /[+-]?\b(?:\d(?:_?\d)*(?:\.\d(?:_?\d)*)?(?:[eE][+-]?\d(?:_?\d)*)?|0x[\da-fA-F](?:_?[\da-fA-F])*(?:\.[\da-fA-F](?:_?[\da-fA-D])*)?(?:[pP][+-]?\d(?:_?\d)*)?)\b|\binf\b|\bnan(?::0x[\da-fA-F](?:_?[\da-fA-D])*)?\b/,
-  'punctuation': /[()]/
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (prism);
-
-
-/***/ }),
-
-/***/ 29901:
-/***/ ((module) => {
-
-var components = {"core":{"meta":{"path":"components/prism-core.js","option":"mandatory"},"core":"Core"},"themes":{"meta":{"path":"themes/{id}.css","link":"index.html?theme={id}","exclusive":true},"prism":{"title":"Default","option":"default"},"prism-dark":"Dark","prism-funky":"Funky","prism-okaidia":{"title":"Okaidia","owner":"ocodia"},"prism-twilight":{"title":"Twilight","owner":"remybach"},"prism-coy":{"title":"Coy","owner":"tshedor"},"prism-solarizedlight":{"title":"Solarized Light","owner":"hectormatos2011 "},"prism-tomorrow":{"title":"Tomorrow Night","owner":"Rosey"}},"languages":{"meta":{"path":"components/prism-{id}","noCSS":true,"examplesPath":"examples/prism-{id}","addCheckAll":true},"markup":{"title":"Markup","alias":["html","xml","svg","mathml","ssml","atom","rss"],"aliasTitles":{"html":"HTML","xml":"XML","svg":"SVG","mathml":"MathML","ssml":"SSML","atom":"Atom","rss":"RSS"},"option":"default"},"css":{"title":"CSS","option":"default","modify":"markup"},"clike":{"title":"C-like","option":"default"},"javascript":{"title":"JavaScript","require":"clike","modify":"markup","optional":"regex","alias":"js","option":"default"},"abap":{"title":"ABAP","owner":"dellagustin"},"abnf":{"title":"ABNF","owner":"RunDevelopment"},"actionscript":{"title":"ActionScript","require":"javascript","modify":"markup","owner":"Golmote"},"ada":{"title":"Ada","owner":"Lucretia"},"agda":{"title":"Agda","owner":"xy-ren"},"al":{"title":"AL","owner":"RunDevelopment"},"antlr4":{"title":"ANTLR4","alias":"g4","owner":"RunDevelopment"},"apacheconf":{"title":"Apache Configuration","owner":"GuiTeK"},"apex":{"title":"Apex","require":["clike","sql"],"owner":"RunDevelopment"},"apl":{"title":"APL","owner":"ngn"},"applescript":{"title":"AppleScript","owner":"Golmote"},"aql":{"title":"AQL","owner":"RunDevelopment"},"arduino":{"title":"Arduino","require":"cpp","alias":"ino","owner":"dkern"},"arff":{"title":"ARFF","owner":"Golmote"},"armasm":{"title":"ARM Assembly","alias":"arm-asm","owner":"RunDevelopment"},"arturo":{"title":"Arturo","alias":"art","optional":["bash","css","javascript","markup","markdown","sql"],"owner":"drkameleon"},"asciidoc":{"alias":"adoc","title":"AsciiDoc","owner":"Golmote"},"aspnet":{"title":"ASP.NET (C#)","require":["markup","csharp"],"owner":"nauzilus"},"asm6502":{"title":"6502 Assembly","owner":"kzurawel"},"asmatmel":{"title":"Atmel AVR Assembly","owner":"cerkit"},"autohotkey":{"title":"AutoHotkey","owner":"aviaryan"},"autoit":{"title":"AutoIt","owner":"Golmote"},"avisynth":{"title":"AviSynth","alias":"avs","owner":"Zinfidel"},"avro-idl":{"title":"Avro IDL","alias":"avdl","owner":"RunDevelopment"},"awk":{"title":"AWK","alias":"gawk","aliasTitles":{"gawk":"GAWK"},"owner":"RunDevelopment"},"bash":{"title":"Bash","alias":["sh","shell"],"aliasTitles":{"sh":"Shell","shell":"Shell"},"owner":"zeitgeist87"},"basic":{"title":"BASIC","owner":"Golmote"},"batch":{"title":"Batch","owner":"Golmote"},"bbcode":{"title":"BBcode","alias":"shortcode","aliasTitles":{"shortcode":"Shortcode"},"owner":"RunDevelopment"},"bbj":{"title":"BBj","owner":"hyyan"},"bicep":{"title":"Bicep","owner":"johnnyreilly"},"birb":{"title":"Birb","require":"clike","owner":"Calamity210"},"bison":{"title":"Bison","require":"c","owner":"Golmote"},"bnf":{"title":"BNF","alias":"rbnf","aliasTitles":{"rbnf":"RBNF"},"owner":"RunDevelopment"},"bqn":{"title":"BQN","owner":"yewscion"},"brainfuck":{"title":"Brainfuck","owner":"Golmote"},"brightscript":{"title":"BrightScript","owner":"RunDevelopment"},"bro":{"title":"Bro","owner":"wayward710"},"bsl":{"title":"BSL (1C:Enterprise)","alias":"oscript","aliasTitles":{"oscript":"OneScript"},"owner":"Diversus23"},"c":{"title":"C","require":"clike","owner":"zeitgeist87"},"csharp":{"title":"C#","require":"clike","alias":["cs","dotnet"],"owner":"mvalipour"},"cpp":{"title":"C++","require":"c","owner":"zeitgeist87"},"cfscript":{"title":"CFScript","require":"clike","alias":"cfc","owner":"mjclemente"},"chaiscript":{"title":"ChaiScript","require":["clike","cpp"],"owner":"RunDevelopment"},"cil":{"title":"CIL","owner":"sbrl"},"cilkc":{"title":"Cilk/C","require":"c","alias":"cilk-c","owner":"OpenCilk"},"cilkcpp":{"title":"Cilk/C++","require":"cpp","alias":["cilk-cpp","cilk"],"owner":"OpenCilk"},"clojure":{"title":"Clojure","owner":"troglotit"},"cmake":{"title":"CMake","owner":"mjrogozinski"},"cobol":{"title":"COBOL","owner":"RunDevelopment"},"coffeescript":{"title":"CoffeeScript","require":"javascript","alias":"coffee","owner":"R-osey"},"concurnas":{"title":"Concurnas","alias":"conc","owner":"jasontatton"},"csp":{"title":"Content-Security-Policy","owner":"ScottHelme"},"cooklang":{"title":"Cooklang","owner":"ahue"},"coq":{"title":"Coq","owner":"RunDevelopment"},"crystal":{"title":"Crystal","require":"ruby","owner":"MakeNowJust"},"css-extras":{"title":"CSS Extras","require":"css","modify":"css","owner":"milesj"},"csv":{"title":"CSV","owner":"RunDevelopment"},"cue":{"title":"CUE","owner":"RunDevelopment"},"cypher":{"title":"Cypher","owner":"RunDevelopment"},"d":{"title":"D","require":"clike","owner":"Golmote"},"dart":{"title":"Dart","require":"clike","owner":"Golmote"},"dataweave":{"title":"DataWeave","owner":"machaval"},"dax":{"title":"DAX","owner":"peterbud"},"dhall":{"title":"Dhall","owner":"RunDevelopment"},"diff":{"title":"Diff","owner":"uranusjr"},"django":{"title":"Django/Jinja2","require":"markup-templating","alias":"jinja2","owner":"romanvm"},"dns-zone-file":{"title":"DNS zone file","owner":"RunDevelopment","alias":"dns-zone"},"docker":{"title":"Docker","alias":"dockerfile","owner":"JustinBeckwith"},"dot":{"title":"DOT (Graphviz)","alias":"gv","optional":"markup","owner":"RunDevelopment"},"ebnf":{"title":"EBNF","owner":"RunDevelopment"},"editorconfig":{"title":"EditorConfig","owner":"osipxd"},"eiffel":{"title":"Eiffel","owner":"Conaclos"},"ejs":{"title":"EJS","require":["javascript","markup-templating"],"owner":"RunDevelopment","alias":"eta","aliasTitles":{"eta":"Eta"}},"elixir":{"title":"Elixir","owner":"Golmote"},"elm":{"title":"Elm","owner":"zwilias"},"etlua":{"title":"Embedded Lua templating","require":["lua","markup-templating"],"owner":"RunDevelopment"},"erb":{"title":"ERB","require":["ruby","markup-templating"],"owner":"Golmote"},"erlang":{"title":"Erlang","owner":"Golmote"},"excel-formula":{"title":"Excel Formula","alias":["xlsx","xls"],"owner":"RunDevelopment"},"fsharp":{"title":"F#","require":"clike","owner":"simonreynolds7"},"factor":{"title":"Factor","owner":"catb0t"},"false":{"title":"False","owner":"edukisto"},"firestore-security-rules":{"title":"Firestore security rules","require":"clike","owner":"RunDevelopment"},"flow":{"title":"Flow","require":"javascript","owner":"Golmote"},"fortran":{"title":"Fortran","owner":"Golmote"},"ftl":{"title":"FreeMarker Template Language","require":"markup-templating","owner":"RunDevelopment"},"gml":{"title":"GameMaker Language","alias":"gamemakerlanguage","require":"clike","owner":"LiarOnce"},"gap":{"title":"GAP (CAS)","owner":"RunDevelopment"},"gcode":{"title":"G-code","owner":"RunDevelopment"},"gdscript":{"title":"GDScript","owner":"RunDevelopment"},"gedcom":{"title":"GEDCOM","owner":"Golmote"},"gettext":{"title":"gettext","alias":"po","owner":"RunDevelopment"},"gherkin":{"title":"Gherkin","owner":"hason"},"git":{"title":"Git","owner":"lgiraudel"},"glsl":{"title":"GLSL","require":"c","owner":"Golmote"},"gn":{"title":"GN","alias":"gni","owner":"RunDevelopment"},"linker-script":{"title":"GNU Linker Script","alias":"ld","owner":"RunDevelopment"},"go":{"title":"Go","require":"clike","owner":"arnehormann"},"go-module":{"title":"Go module","alias":"go-mod","owner":"RunDevelopment"},"gradle":{"title":"Gradle","require":"clike","owner":"zeabdelkhalek-badido18"},"graphql":{"title":"GraphQL","optional":"markdown","owner":"Golmote"},"groovy":{"title":"Groovy","require":"clike","owner":"robfletcher"},"haml":{"title":"Haml","require":"ruby","optional":["css","css-extras","coffeescript","erb","javascript","less","markdown","scss","textile"],"owner":"Golmote"},"handlebars":{"title":"Handlebars","require":"markup-templating","alias":["hbs","mustache"],"aliasTitles":{"mustache":"Mustache"},"owner":"Golmote"},"haskell":{"title":"Haskell","alias":"hs","owner":"bholst"},"haxe":{"title":"Haxe","require":"clike","optional":"regex","owner":"Golmote"},"hcl":{"title":"HCL","owner":"outsideris"},"hlsl":{"title":"HLSL","require":"c","owner":"RunDevelopment"},"hoon":{"title":"Hoon","owner":"matildepark"},"http":{"title":"HTTP","optional":["csp","css","hpkp","hsts","javascript","json","markup","uri"],"owner":"danielgtaylor"},"hpkp":{"title":"HTTP Public-Key-Pins","owner":"ScottHelme"},"hsts":{"title":"HTTP Strict-Transport-Security","owner":"ScottHelme"},"ichigojam":{"title":"IchigoJam","owner":"BlueCocoa"},"icon":{"title":"Icon","owner":"Golmote"},"icu-message-format":{"title":"ICU Message Format","owner":"RunDevelopment"},"idris":{"title":"Idris","alias":"idr","owner":"KeenS","require":"haskell"},"ignore":{"title":".ignore","owner":"osipxd","alias":["gitignore","hgignore","npmignore"],"aliasTitles":{"gitignore":".gitignore","hgignore":".hgignore","npmignore":".npmignore"}},"inform7":{"title":"Inform 7","owner":"Golmote"},"ini":{"title":"Ini","owner":"aviaryan"},"io":{"title":"Io","owner":"AlesTsurko"},"j":{"title":"J","owner":"Golmote"},"java":{"title":"Java","require":"clike","owner":"sherblot"},"javadoc":{"title":"JavaDoc","require":["markup","java","javadoclike"],"modify":"java","optional":"scala","owner":"RunDevelopment"},"javadoclike":{"title":"JavaDoc-like","modify":["java","javascript","php"],"owner":"RunDevelopment"},"javastacktrace":{"title":"Java stack trace","owner":"RunDevelopment"},"jexl":{"title":"Jexl","owner":"czosel"},"jolie":{"title":"Jolie","require":"clike","owner":"thesave"},"jq":{"title":"JQ","owner":"RunDevelopment"},"jsdoc":{"title":"JSDoc","require":["javascript","javadoclike","typescript"],"modify":"javascript","optional":["actionscript","coffeescript"],"owner":"RunDevelopment"},"js-extras":{"title":"JS Extras","require":"javascript","modify":"javascript","optional":["actionscript","coffeescript","flow","n4js","typescript"],"owner":"RunDevelopment"},"json":{"title":"JSON","alias":"webmanifest","aliasTitles":{"webmanifest":"Web App Manifest"},"owner":"CupOfTea696"},"json5":{"title":"JSON5","require":"json","owner":"RunDevelopment"},"jsonp":{"title":"JSONP","require":"json","owner":"RunDevelopment"},"jsstacktrace":{"title":"JS stack trace","owner":"sbrl"},"js-templates":{"title":"JS Templates","require":"javascript","modify":"javascript","optional":["css","css-extras","graphql","markdown","markup","sql"],"owner":"RunDevelopment"},"julia":{"title":"Julia","owner":"cdagnino"},"keepalived":{"title":"Keepalived Configure","owner":"dev-itsheng"},"keyman":{"title":"Keyman","owner":"mcdurdin"},"kotlin":{"title":"Kotlin","alias":["kt","kts"],"aliasTitles":{"kts":"Kotlin Script"},"require":"clike","owner":"Golmote"},"kumir":{"title":"KuMir (КуМир)","alias":"kum","owner":"edukisto"},"kusto":{"title":"Kusto","owner":"RunDevelopment"},"latex":{"title":"LaTeX","alias":["tex","context"],"aliasTitles":{"tex":"TeX","context":"ConTeXt"},"owner":"japborst"},"latte":{"title":"Latte","require":["clike","markup-templating","php"],"owner":"nette"},"less":{"title":"Less","require":"css","optional":"css-extras","owner":"Golmote"},"lilypond":{"title":"LilyPond","require":"scheme","alias":"ly","owner":"RunDevelopment"},"liquid":{"title":"Liquid","require":"markup-templating","owner":"cinhtau"},"lisp":{"title":"Lisp","alias":["emacs","elisp","emacs-lisp"],"owner":"JuanCaicedo"},"livescript":{"title":"LiveScript","owner":"Golmote"},"llvm":{"title":"LLVM IR","owner":"porglezomp"},"log":{"title":"Log file","optional":"javastacktrace","owner":"RunDevelopment"},"lolcode":{"title":"LOLCODE","owner":"Golmote"},"lua":{"title":"Lua","owner":"Golmote"},"magma":{"title":"Magma (CAS)","owner":"RunDevelopment"},"makefile":{"title":"Makefile","owner":"Golmote"},"markdown":{"title":"Markdown","require":"markup","optional":"yaml","alias":"md","owner":"Golmote"},"markup-templating":{"title":"Markup templating","require":"markup","owner":"Golmote"},"mata":{"title":"Mata","owner":"RunDevelopment"},"matlab":{"title":"MATLAB","owner":"Golmote"},"maxscript":{"title":"MAXScript","owner":"RunDevelopment"},"mel":{"title":"MEL","owner":"Golmote"},"mermaid":{"title":"Mermaid","owner":"RunDevelopment"},"metafont":{"title":"METAFONT","owner":"LaeriExNihilo"},"mizar":{"title":"Mizar","owner":"Golmote"},"mongodb":{"title":"MongoDB","owner":"airs0urce","require":"javascript"},"monkey":{"title":"Monkey","owner":"Golmote"},"moonscript":{"title":"MoonScript","alias":"moon","owner":"RunDevelopment"},"n1ql":{"title":"N1QL","owner":"TMWilds"},"n4js":{"title":"N4JS","require":"javascript","optional":"jsdoc","alias":"n4jsd","owner":"bsmith-n4"},"nand2tetris-hdl":{"title":"Nand To Tetris HDL","owner":"stephanmax"},"naniscript":{"title":"Naninovel Script","owner":"Elringus","alias":"nani"},"nasm":{"title":"NASM","owner":"rbmj"},"neon":{"title":"NEON","owner":"nette"},"nevod":{"title":"Nevod","owner":"nezaboodka"},"nginx":{"title":"nginx","owner":"volado"},"nim":{"title":"Nim","owner":"Golmote"},"nix":{"title":"Nix","owner":"Golmote"},"nsis":{"title":"NSIS","owner":"idleberg"},"objectivec":{"title":"Objective-C","require":"c","alias":"objc","owner":"uranusjr"},"ocaml":{"title":"OCaml","owner":"Golmote"},"odin":{"title":"Odin","owner":"edukisto"},"opencl":{"title":"OpenCL","require":"c","modify":["c","cpp"],"owner":"Milania1"},"openqasm":{"title":"OpenQasm","alias":"qasm","owner":"RunDevelopment"},"oz":{"title":"Oz","owner":"Golmote"},"parigp":{"title":"PARI/GP","owner":"Golmote"},"parser":{"title":"Parser","require":"markup","owner":"Golmote"},"pascal":{"title":"Pascal","alias":"objectpascal","aliasTitles":{"objectpascal":"Object Pascal"},"owner":"Golmote"},"pascaligo":{"title":"Pascaligo","owner":"DefinitelyNotAGoat"},"psl":{"title":"PATROL Scripting Language","owner":"bertysentry"},"pcaxis":{"title":"PC-Axis","alias":"px","owner":"RunDevelopment"},"peoplecode":{"title":"PeopleCode","alias":"pcode","owner":"RunDevelopment"},"perl":{"title":"Perl","owner":"Golmote"},"php":{"title":"PHP","require":"markup-templating","owner":"milesj"},"phpdoc":{"title":"PHPDoc","require":["php","javadoclike"],"modify":"php","owner":"RunDevelopment"},"php-extras":{"title":"PHP Extras","require":"php","modify":"php","owner":"milesj"},"plant-uml":{"title":"PlantUML","alias":"plantuml","owner":"RunDevelopment"},"plsql":{"title":"PL/SQL","require":"sql","owner":"Golmote"},"powerquery":{"title":"PowerQuery","alias":["pq","mscript"],"owner":"peterbud"},"powershell":{"title":"PowerShell","owner":"nauzilus"},"processing":{"title":"Processing","require":"clike","owner":"Golmote"},"prolog":{"title":"Prolog","owner":"Golmote"},"promql":{"title":"PromQL","owner":"arendjr"},"properties":{"title":".properties","owner":"Golmote"},"protobuf":{"title":"Protocol Buffers","require":"clike","owner":"just-boris"},"pug":{"title":"Pug","require":["markup","javascript"],"optional":["coffeescript","ejs","handlebars","less","livescript","markdown","scss","stylus","twig"],"owner":"Golmote"},"puppet":{"title":"Puppet","owner":"Golmote"},"pure":{"title":"Pure","optional":["c","cpp","fortran"],"owner":"Golmote"},"purebasic":{"title":"PureBasic","require":"clike","alias":"pbfasm","owner":"HeX0R101"},"purescript":{"title":"PureScript","require":"haskell","alias":"purs","owner":"sriharshachilakapati"},"python":{"title":"Python","alias":"py","owner":"multipetros"},"qsharp":{"title":"Q#","require":"clike","alias":"qs","owner":"fedonman"},"q":{"title":"Q (kdb+ database)","owner":"Golmote"},"qml":{"title":"QML","require":"javascript","owner":"RunDevelopment"},"qore":{"title":"Qore","require":"clike","owner":"temnroegg"},"r":{"title":"R","owner":"Golmote"},"racket":{"title":"Racket","require":"scheme","alias":"rkt","owner":"RunDevelopment"},"cshtml":{"title":"Razor C#","alias":"razor","require":["markup","csharp"],"optional":["css","css-extras","javascript","js-extras"],"owner":"RunDevelopment"},"jsx":{"title":"React JSX","require":["markup","javascript"],"optional":["jsdoc","js-extras","js-templates"],"owner":"vkbansal"},"tsx":{"title":"React TSX","require":["jsx","typescript"]},"reason":{"title":"Reason","require":"clike","owner":"Golmote"},"regex":{"title":"Regex","owner":"RunDevelopment"},"rego":{"title":"Rego","owner":"JordanSh"},"renpy":{"title":"Ren'py","alias":"rpy","owner":"HyuchiaDiego"},"rescript":{"title":"ReScript","alias":"res","owner":"vmarcosp"},"rest":{"title":"reST (reStructuredText)","owner":"Golmote"},"rip":{"title":"Rip","owner":"ravinggenius"},"roboconf":{"title":"Roboconf","owner":"Golmote"},"robotframework":{"title":"Robot Framework","alias":"robot","owner":"RunDevelopment"},"ruby":{"title":"Ruby","require":"clike","alias":"rb","owner":"samflores"},"rust":{"title":"Rust","owner":"Golmote"},"sas":{"title":"SAS","optional":["groovy","lua","sql"],"owner":"Golmote"},"sass":{"title":"Sass (Sass)","require":"css","optional":"css-extras","owner":"Golmote"},"scss":{"title":"Sass (SCSS)","require":"css","optional":"css-extras","owner":"MoOx"},"scala":{"title":"Scala","require":"java","owner":"jozic"},"scheme":{"title":"Scheme","owner":"bacchus123"},"shell-session":{"title":"Shell session","require":"bash","alias":["sh-session","shellsession"],"owner":"RunDevelopment"},"smali":{"title":"Smali","owner":"RunDevelopment"},"smalltalk":{"title":"Smalltalk","owner":"Golmote"},"smarty":{"title":"Smarty","require":"markup-templating","optional":"php","owner":"Golmote"},"sml":{"title":"SML","alias":"smlnj","aliasTitles":{"smlnj":"SML/NJ"},"owner":"RunDevelopment"},"solidity":{"title":"Solidity (Ethereum)","alias":"sol","require":"clike","owner":"glachaud"},"solution-file":{"title":"Solution file","alias":"sln","owner":"RunDevelopment"},"soy":{"title":"Soy (Closure Template)","require":"markup-templating","owner":"Golmote"},"sparql":{"title":"SPARQL","require":"turtle","owner":"Triply-Dev","alias":"rq"},"splunk-spl":{"title":"Splunk SPL","owner":"RunDevelopment"},"sqf":{"title":"SQF: Status Quo Function (Arma 3)","require":"clike","owner":"RunDevelopment"},"sql":{"title":"SQL","owner":"multipetros"},"squirrel":{"title":"Squirrel","require":"clike","owner":"RunDevelopment"},"stan":{"title":"Stan","owner":"RunDevelopment"},"stata":{"title":"Stata Ado","require":["mata","java","python"],"owner":"RunDevelopment"},"iecst":{"title":"Structured Text (IEC 61131-3)","owner":"serhioromano"},"stylus":{"title":"Stylus","owner":"vkbansal"},"supercollider":{"title":"SuperCollider","alias":"sclang","owner":"RunDevelopment"},"swift":{"title":"Swift","owner":"chrischares"},"systemd":{"title":"Systemd configuration file","owner":"RunDevelopment"},"t4-templating":{"title":"T4 templating","owner":"RunDevelopment"},"t4-cs":{"title":"T4 Text Templates (C#)","require":["t4-templating","csharp"],"alias":"t4","owner":"RunDevelopment"},"t4-vb":{"title":"T4 Text Templates (VB)","require":["t4-templating","vbnet"],"owner":"RunDevelopment"},"tap":{"title":"TAP","owner":"isaacs","require":"yaml"},"tcl":{"title":"Tcl","owner":"PeterChaplin"},"tt2":{"title":"Template Toolkit 2","require":["clike","markup-templating"],"owner":"gflohr"},"textile":{"title":"Textile","require":"markup","optional":"css","owner":"Golmote"},"toml":{"title":"TOML","owner":"RunDevelopment"},"tremor":{"title":"Tremor","alias":["trickle","troy"],"owner":"darach","aliasTitles":{"trickle":"trickle","troy":"troy"}},"turtle":{"title":"Turtle","alias":"trig","aliasTitles":{"trig":"TriG"},"owner":"jakubklimek"},"twig":{"title":"Twig","require":"markup-templating","owner":"brandonkelly"},"typescript":{"title":"TypeScript","require":"javascript","optional":"js-templates","alias":"ts","owner":"vkbansal"},"typoscript":{"title":"TypoScript","alias":"tsconfig","aliasTitles":{"tsconfig":"TSConfig"},"owner":"dkern"},"unrealscript":{"title":"UnrealScript","alias":["uscript","uc"],"owner":"RunDevelopment"},"uorazor":{"title":"UO Razor Script","owner":"jaseowns"},"uri":{"title":"URI","alias":"url","aliasTitles":{"url":"URL"},"owner":"RunDevelopment"},"v":{"title":"V","require":"clike","owner":"taggon"},"vala":{"title":"Vala","require":"clike","optional":"regex","owner":"TemplarVolk"},"vbnet":{"title":"VB.Net","require":"basic","owner":"Bigsby"},"velocity":{"title":"Velocity","require":"markup","owner":"Golmote"},"verilog":{"title":"Verilog","owner":"a-rey"},"vhdl":{"title":"VHDL","owner":"a-rey"},"vim":{"title":"vim","owner":"westonganger"},"visual-basic":{"title":"Visual Basic","alias":["vb","vba"],"aliasTitles":{"vba":"VBA"},"owner":"Golmote"},"warpscript":{"title":"WarpScript","owner":"RunDevelopment"},"wasm":{"title":"WebAssembly","owner":"Golmote"},"web-idl":{"title":"Web IDL","alias":"webidl","owner":"RunDevelopment"},"wgsl":{"title":"WGSL","owner":"Dr4gonthree"},"wiki":{"title":"Wiki markup","require":"markup","owner":"Golmote"},"wolfram":{"title":"Wolfram language","alias":["mathematica","nb","wl"],"aliasTitles":{"mathematica":"Mathematica","nb":"Mathematica Notebook"},"owner":"msollami"},"wren":{"title":"Wren","owner":"clsource"},"xeora":{"title":"Xeora","require":"markup","alias":"xeoracube","aliasTitles":{"xeoracube":"XeoraCube"},"owner":"freakmaxi"},"xml-doc":{"title":"XML doc (.net)","require":"markup","modify":["csharp","fsharp","vbnet"],"owner":"RunDevelopment"},"xojo":{"title":"Xojo (REALbasic)","owner":"Golmote"},"xquery":{"title":"XQuery","require":"markup","owner":"Golmote"},"yaml":{"title":"YAML","alias":"yml","owner":"hason"},"yang":{"title":"YANG","owner":"RunDevelopment"},"zig":{"title":"Zig","owner":"RunDevelopment"}},"plugins":{"meta":{"path":"plugins/{id}/prism-{id}","link":"plugins/{id}/"},"line-highlight":{"title":"Line Highlight","description":"Highlights specific lines and/or line ranges."},"line-numbers":{"title":"Line Numbers","description":"Line number at the beginning of code lines.","owner":"kuba-kubula"},"show-invisibles":{"title":"Show Invisibles","description":"Show hidden characters such as tabs and line breaks.","optional":["autolinker","data-uri-highlight"]},"autolinker":{"title":"Autolinker","description":"Converts URLs and emails in code to clickable links. Parses Markdown links in comments."},"wpd":{"title":"WebPlatform Docs","description":"Makes tokens link to <a href=\"https://webplatform.github.io/docs/\">WebPlatform.org documentation</a>. The links open in a new tab."},"custom-class":{"title":"Custom Class","description":"This plugin allows you to prefix Prism's default classes (<code>.comment</code> can become <code>.namespace--comment</code>) or replace them with your defined ones (like <code>.editor__comment</code>). You can even add new classes.","owner":"dvkndn","noCSS":true},"file-highlight":{"title":"File Highlight","description":"Fetch external files and highlight them with Prism. Used on the Prism website itself.","noCSS":true},"show-language":{"title":"Show Language","description":"Display the highlighted language in code blocks (inline code does not show the label).","owner":"nauzilus","noCSS":true,"require":"toolbar"},"jsonp-highlight":{"title":"JSONP Highlight","description":"Fetch content with JSONP and highlight some interesting content (e.g. GitHub/Gists or Bitbucket API).","noCSS":true,"owner":"nauzilus"},"highlight-keywords":{"title":"Highlight Keywords","description":"Adds special CSS classes for each keyword for fine-grained highlighting.","owner":"vkbansal","noCSS":true},"remove-initial-line-feed":{"title":"Remove initial line feed","description":"Removes the initial line feed in code blocks.","owner":"Golmote","noCSS":true},"inline-color":{"title":"Inline color","description":"Adds a small inline preview for colors in style sheets.","require":"css-extras","owner":"RunDevelopment"},"previewers":{"title":"Previewers","description":"Previewers for angles, colors, gradients, easing and time.","require":"css-extras","owner":"Golmote"},"autoloader":{"title":"Autoloader","description":"Automatically loads the needed languages to highlight the code blocks.","owner":"Golmote","noCSS":true},"keep-markup":{"title":"Keep Markup","description":"Prevents custom markup from being dropped out during highlighting.","owner":"Golmote","optional":"normalize-whitespace","noCSS":true},"command-line":{"title":"Command Line","description":"Display a command line with a prompt and, optionally, the output/response from the commands.","owner":"chriswells0"},"unescaped-markup":{"title":"Unescaped Markup","description":"Write markup without having to escape anything."},"normalize-whitespace":{"title":"Normalize Whitespace","description":"Supports multiple operations to normalize whitespace in code blocks.","owner":"zeitgeist87","optional":"unescaped-markup","noCSS":true},"data-uri-highlight":{"title":"Data-URI Highlight","description":"Highlights data-URI contents.","owner":"Golmote","noCSS":true},"toolbar":{"title":"Toolbar","description":"Attach a toolbar for plugins to easily register buttons on the top of a code block.","owner":"mAAdhaTTah"},"copy-to-clipboard":{"title":"Copy to Clipboard Button","description":"Add a button that copies the code block to the clipboard when clicked.","owner":"mAAdhaTTah","require":"toolbar","noCSS":true},"download-button":{"title":"Download Button","description":"A button in the toolbar of a code block adding a convenient way to download a code file.","owner":"Golmote","require":"toolbar","noCSS":true},"match-braces":{"title":"Match braces","description":"Highlights matching braces.","owner":"RunDevelopment"},"diff-highlight":{"title":"Diff Highlight","description":"Highlights the code inside diff blocks.","owner":"RunDevelopment","require":"diff"},"filter-highlight-all":{"title":"Filter highlightAll","description":"Filters the elements the <code>highlightAll</code> and <code>highlightAllUnder</code> methods actually highlight.","owner":"RunDevelopment","noCSS":true},"treeview":{"title":"Treeview","description":"A language with special styles to highlight file system tree structures.","owner":"Golmote"}}};
-if ( true && module.exports) { module.exports = components; }
-
-/***/ }),
-
-/***/ 2885:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-const components = __webpack_require__(29901);
-const getLoader = __webpack_require__(39642);
-
-
-/**
- * The set of all languages which have been loaded using the below function.
- *
- * @type {Set<string>}
- */
-const loadedLanguages = new Set();
-
-/**
- * Loads the given languages and adds them to the current Prism instance.
- *
- * If no languages are provided, __all__ Prism languages will be loaded.
- *
- * @param {string|string[]} [languages]
- * @returns {void}
- */
-function loadLanguages(languages) {
-	if (languages === undefined) {
-		languages = Object.keys(components.languages).filter(l => l != 'meta');
-	} else if (!Array.isArray(languages)) {
-		languages = [languages];
-	}
-
-	// the user might have loaded languages via some other way or used `prism.js` which already includes some
-	// we don't need to validate the ids because `getLoader` will ignore invalid ones
-	const loaded = [...loadedLanguages, ...Object.keys(Prism.languages)];
-
-	getLoader(components, languages, loaded).load(lang => {
-		if (!(lang in components.languages)) {
-			if (!loadLanguages.silent) {
-				console.warn('Language does not exist: ' + lang);
-			}
-			return;
-		}
-
-		const pathToLanguage = './prism-' + lang;
-
-		// remove from require cache and from Prism
-		delete __webpack_require__.c[/*require.resolve*/(__webpack_require__(16500).resolve(pathToLanguage))];
-		delete Prism.languages[lang];
-
-		__webpack_require__(16500)(pathToLanguage);
-
-		loadedLanguages.add(lang);
-	});
-}
-
-/**
- * Set this to `true` to prevent all warning messages `loadLanguages` logs.
- */
-loadLanguages.silent = false;
-
-module.exports = loadLanguages;
-
-
-/***/ }),
-
-/***/ 6726:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var map = {
-	"./": 2885
-};
-
-
-function webpackContext(req) {
-	var id = webpackContextResolve(req);
-	return __webpack_require__(id);
-}
-function webpackContextResolve(req) {
-	if(!__webpack_require__.o(map, req)) {
-		var e = new Error("Cannot find module '" + req + "'");
-		e.code = 'MODULE_NOT_FOUND';
-		throw e;
-	}
-	return map[req];
-}
-webpackContext.keys = function webpackContextKeys() {
-	return Object.keys(map);
-};
-webpackContext.resolve = webpackContextResolve;
-module.exports = webpackContext;
-webpackContext.id = 6726;
-
-/***/ }),
-
-/***/ 16500:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var map = {
-	"./": 2885
-};
-
-
-function webpackContext(req) {
-	var id = webpackContextResolve(req);
-	return __webpack_require__(id);
-}
-function webpackContextResolve(req) {
-	if(!__webpack_require__.o(map, req)) {
-		var e = new Error("Cannot find module '" + req + "'");
-		e.code = 'MODULE_NOT_FOUND';
-		throw e;
-	}
-	return map[req];
-}
-webpackContext.keys = function webpackContextKeys() {
-	return Object.keys(map);
-};
-webpackContext.resolve = webpackContextResolve;
-module.exports = webpackContext;
-webpackContext.id = 16500;
-
-/***/ }),
-
-/***/ 39642:
-/***/ ((module) => {
-
-"use strict";
-
-
-/**
- * @typedef {Object<string, ComponentCategory>} Components
- * @typedef {Object<string, ComponentEntry | string>} ComponentCategory
- *
- * @typedef ComponentEntry
- * @property {string} [title] The title of the component.
- * @property {string} [owner] The GitHub user name of the owner.
- * @property {boolean} [noCSS=false] Whether the component doesn't have style sheets which should also be loaded.
- * @property {string | string[]} [alias] An optional list of aliases for the id of the component.
- * @property {Object<string, string>} [aliasTitles] An optional map from an alias to its title.
- *
- * Aliases which are not in this map will the get title of the component.
- * @property {string | string[]} [optional]
- * @property {string | string[]} [require]
- * @property {string | string[]} [modify]
- */
-
-var getLoader = (function () {
-
-	/**
-	 * A function which does absolutely nothing.
-	 *
-	 * @type {any}
-	 */
-	var noop = function () { };
-
-	/**
-	 * Invokes the given callback for all elements of the given value.
-	 *
-	 * If the given value is an array, the callback will be invokes for all elements. If the given value is `null` or
-	 * `undefined`, the callback will not be invoked. In all other cases, the callback will be invoked with the given
-	 * value as parameter.
-	 *
-	 * @param {null | undefined | T | T[]} value
-	 * @param {(value: T, index: number) => void} callbackFn
-	 * @returns {void}
-	 * @template T
-	 */
-	function forEach(value, callbackFn) {
-		if (Array.isArray(value)) {
-			value.forEach(callbackFn);
-		} else if (value != null) {
-			callbackFn(value, 0);
-		}
-	}
-
-	/**
-	 * Returns a new set for the given string array.
-	 *
-	 * @param {string[]} array
-	 * @returns {StringSet}
-	 *
-	 * @typedef {Object<string, true>} StringSet
-	 */
-	function toSet(array) {
-		/** @type {StringSet} */
-		var set = {};
-		for (var i = 0, l = array.length; i < l; i++) {
-			set[array[i]] = true;
-		}
-		return set;
-	}
-
-	/**
-	 * Creates a map of every components id to its entry.
-	 *
-	 * @param {Components} components
-	 * @returns {EntryMap}
-	 *
-	 * @typedef {{ readonly [id: string]: Readonly<ComponentEntry> | undefined }} EntryMap
-	 */
-	function createEntryMap(components) {
-		/** @type {Object<string, Readonly<ComponentEntry>>} */
-		var map = {};
-
-		for (var categoryName in components) {
-			var category = components[categoryName];
-			for (var id in category) {
-				if (id != 'meta') {
-					/** @type {ComponentEntry | string} */
-					var entry = category[id];
-					map[id] = typeof entry == 'string' ? { title: entry } : entry;
-				}
-			}
-		}
-
-		return map;
-	}
-
-	/**
-	 * Creates a full dependencies map which includes all types of dependencies and their transitive dependencies.
-	 *
-	 * @param {EntryMap} entryMap
-	 * @returns {DependencyResolver}
-	 *
-	 * @typedef {(id: string) => StringSet} DependencyResolver
-	 */
-	function createDependencyResolver(entryMap) {
-		/** @type {Object<string, StringSet>} */
-		var map = {};
-		var _stackArray = [];
-
-		/**
-		 * Adds the dependencies of the given component to the dependency map.
-		 *
-		 * @param {string} id
-		 * @param {string[]} stack
-		 */
-		function addToMap(id, stack) {
-			if (id in map) {
-				return;
-			}
-
-			stack.push(id);
-
-			// check for circular dependencies
-			var firstIndex = stack.indexOf(id);
-			if (firstIndex < stack.length - 1) {
-				throw new Error('Circular dependency: ' + stack.slice(firstIndex).join(' -> '));
-			}
-
-			/** @type {StringSet} */
-			var dependencies = {};
-
-			var entry = entryMap[id];
-			if (entry) {
-				/**
-				 * This will add the direct dependency and all of its transitive dependencies to the set of
-				 * dependencies of `entry`.
-				 *
-				 * @param {string} depId
-				 * @returns {void}
-				 */
-				function handleDirectDependency(depId) {
-					if (!(depId in entryMap)) {
-						throw new Error(id + ' depends on an unknown component ' + depId);
-					}
-					if (depId in dependencies) {
-						// if the given dependency is already in the set of deps, then so are its transitive deps
-						return;
-					}
-
-					addToMap(depId, stack);
-					dependencies[depId] = true;
-					for (var transitiveDepId in map[depId]) {
-						dependencies[transitiveDepId] = true;
-					}
-				}
-
-				forEach(entry.require, handleDirectDependency);
-				forEach(entry.optional, handleDirectDependency);
-				forEach(entry.modify, handleDirectDependency);
-			}
-
-			map[id] = dependencies;
-
-			stack.pop();
-		}
-
-		return function (id) {
-			var deps = map[id];
-			if (!deps) {
-				addToMap(id, _stackArray);
-				deps = map[id];
-			}
-			return deps;
-		};
-	}
-
-	/**
-	 * Returns a function which resolves the aliases of its given id of alias.
-	 *
-	 * @param {EntryMap} entryMap
-	 * @returns {(idOrAlias: string) => string}
-	 */
-	function createAliasResolver(entryMap) {
-		/** @type {Object<string, string> | undefined} */
-		var map;
-
-		return function (idOrAlias) {
-			if (idOrAlias in entryMap) {
-				return idOrAlias;
-			} else {
-				// only create the alias map if necessary
-				if (!map) {
-					map = {};
-
-					for (var id in entryMap) {
-						var entry = entryMap[id];
-						forEach(entry && entry.alias, function (alias) {
-							if (alias in map) {
-								throw new Error(alias + ' cannot be alias for both ' + id + ' and ' + map[alias]);
-							}
-							if (alias in entryMap) {
-								throw new Error(alias + ' cannot be alias of ' + id + ' because it is a component.');
-							}
-							map[alias] = id;
-						});
-					}
-				}
-				return map[idOrAlias] || idOrAlias;
-			}
-		};
-	}
-
-	/**
-	 * @typedef LoadChainer
-	 * @property {(before: T, after: () => T) => T} series
-	 * @property {(values: T[]) => T} parallel
-	 * @template T
-	 */
-
-	/**
-	 * Creates an implicit DAG from the given components and dependencies and call the given `loadComponent` for each
-	 * component in topological order.
-	 *
-	 * @param {DependencyResolver} dependencyResolver
-	 * @param {StringSet} ids
-	 * @param {(id: string) => T} loadComponent
-	 * @param {LoadChainer<T>} [chainer]
-	 * @returns {T}
-	 * @template T
-	 */
-	function loadComponentsInOrder(dependencyResolver, ids, loadComponent, chainer) {
-		var series = chainer ? chainer.series : undefined;
-		var parallel = chainer ? chainer.parallel : noop;
-
-		/** @type {Object<string, T>} */
-		var cache = {};
-
-		/**
-		 * A set of ids of nodes which are not depended upon by any other node in the graph.
-		 *
-		 * @type {StringSet}
-		 */
-		var ends = {};
-
-		/**
-		 * Loads the given component and its dependencies or returns the cached value.
-		 *
-		 * @param {string} id
-		 * @returns {T}
-		 */
-		function handleId(id) {
-			if (id in cache) {
-				return cache[id];
-			}
-
-			// assume that it's an end
-			// if it isn't, it will be removed later
-			ends[id] = true;
-
-			// all dependencies of the component in the given ids
-			var dependsOn = [];
-			for (var depId in dependencyResolver(id)) {
-				if (depId in ids) {
-					dependsOn.push(depId);
-				}
-			}
-
-			/**
-			 * The value to be returned.
-			 *
-			 * @type {T}
-			 */
-			var value;
-
-			if (dependsOn.length === 0) {
-				value = loadComponent(id);
-			} else {
-				var depsValue = parallel(dependsOn.map(function (depId) {
-					var value = handleId(depId);
-					// none of the dependencies can be ends
-					delete ends[depId];
-					return value;
-				}));
-				if (series) {
-					// the chainer will be responsibly for calling the function calling loadComponent
-					value = series(depsValue, function () { return loadComponent(id); });
-				} else {
-					// we don't have a chainer, so we call loadComponent ourselves
-					loadComponent(id);
-				}
-			}
-
-			// cache and return
-			return cache[id] = value;
-		}
-
-		for (var id in ids) {
-			handleId(id);
-		}
-
-		/** @type {T[]} */
-		var endValues = [];
-		for (var endId in ends) {
-			endValues.push(cache[endId]);
-		}
-		return parallel(endValues);
-	}
-
-	/**
-	 * Returns whether the given object has any keys.
-	 *
-	 * @param {object} obj
-	 */
-	function hasKeys(obj) {
-		for (var key in obj) {
-			return true;
-		}
-		return false;
-	}
-
-	/**
-	 * Returns an object which provides methods to get the ids of the components which have to be loaded (`getIds`) and
-	 * a way to efficiently load them in synchronously and asynchronous contexts (`load`).
-	 *
-	 * The set of ids to be loaded is a superset of `load`. If some of these ids are in `loaded`, the corresponding
-	 * components will have to reloaded.
-	 *
-	 * The ids in `load` and `loaded` may be in any order and can contain duplicates.
-	 *
-	 * @param {Components} components
-	 * @param {string[]} load
-	 * @param {string[]} [loaded=[]] A list of already loaded components.
-	 *
-	 * If a component is in this list, then all of its requirements will also be assumed to be in the list.
-	 * @returns {Loader}
-	 *
-	 * @typedef Loader
-	 * @property {() => string[]} getIds A function to get all ids of the components to load.
-	 *
-	 * The returned ids will be duplicate-free, alias-free and in load order.
-	 * @property {LoadFunction} load A functional interface to load components.
-	 *
-	 * @typedef {<T> (loadComponent: (id: string) => T, chainer?: LoadChainer<T>) => T} LoadFunction
-	 * A functional interface to load components.
-	 *
-	 * The `loadComponent` function will be called for every component in the order in which they have to be loaded.
-	 *
-	 * The `chainer` is useful for asynchronous loading and its `series` and `parallel` functions can be thought of as
-	 * `Promise#then` and `Promise.all`.
-	 *
-	 * @example
-	 * load(id => { loadComponent(id); }); // returns undefined
-	 *
-	 * await load(
-	 *     id => loadComponentAsync(id), // returns a Promise for each id
-	 *     {
-	 *         series: async (before, after) => {
-	 *             await before;
-	 *             await after();
-	 *         },
-	 *         parallel: async (values) => {
-	 *             await Promise.all(values);
-	 *         }
-	 *     }
-	 * );
-	 */
-	function getLoader(components, load, loaded) {
-		var entryMap = createEntryMap(components);
-		var resolveAlias = createAliasResolver(entryMap);
-
-		load = load.map(resolveAlias);
-		loaded = (loaded || []).map(resolveAlias);
-
-		var loadSet = toSet(load);
-		var loadedSet = toSet(loaded);
-
-		// add requirements
-
-		load.forEach(addRequirements);
-		function addRequirements(id) {
-			var entry = entryMap[id];
-			forEach(entry && entry.require, function (reqId) {
-				if (!(reqId in loadedSet)) {
-					loadSet[reqId] = true;
-					addRequirements(reqId);
-				}
-			});
-		}
-
-		// add components to reload
-
-		// A component x in `loaded` has to be reloaded if
-		//  1) a component in `load` modifies x.
-		//  2) x depends on a component in `load`.
-		// The above two condition have to be applied until nothing changes anymore.
-
-		var dependencyResolver = createDependencyResolver(entryMap);
-
-		/** @type {StringSet} */
-		var loadAdditions = loadSet;
-		/** @type {StringSet} */
-		var newIds;
-		while (hasKeys(loadAdditions)) {
-			newIds = {};
-
-			// condition 1)
-			for (var loadId in loadAdditions) {
-				var entry = entryMap[loadId];
-				forEach(entry && entry.modify, function (modId) {
-					if (modId in loadedSet) {
-						newIds[modId] = true;
-					}
-				});
-			}
-
-			// condition 2)
-			for (var loadedId in loadedSet) {
-				if (!(loadedId in loadSet)) {
-					for (var depId in dependencyResolver(loadedId)) {
-						if (depId in loadSet) {
-							newIds[loadedId] = true;
-							break;
-						}
-					}
-				}
-			}
-
-			loadAdditions = newIds;
-			for (var newId in loadAdditions) {
-				loadSet[newId] = true;
-			}
-		}
-
-		/** @type {Loader} */
-		var loader = {
-			getIds: function () {
-				var ids = [];
-				loader.load(function (id) {
-					ids.push(id);
-				});
-				return ids;
-			},
-			load: function (loadComponent, chainer) {
-				return loadComponentsInOrder(dependencyResolver, loadSet, loadComponent, chainer);
-			}
-		};
-
-		return loader;
-	}
-
-	return getLoader;
-
-}());
-
-if (true) {
-	module.exports = getLoader;
-}
-
-
-/***/ }),
-
-/***/ 92703:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-
-
-var ReactPropTypesSecret = __webpack_require__(50414);
-
-function emptyFunction() {}
-function emptyFunctionWithReset() {}
-emptyFunctionWithReset.resetWarningCache = emptyFunction;
-
-module.exports = function() {
-  function shim(props, propName, componentName, location, propFullName, secret) {
-    if (secret === ReactPropTypesSecret) {
-      // It is still safe when called from React.
-      return;
-    }
-    var err = new Error(
-      'Calling PropTypes validators directly is not supported by the `prop-types` package. ' +
-      'Use PropTypes.checkPropTypes() to call them. ' +
-      'Read more at http://fb.me/use-check-prop-types'
-    );
-    err.name = 'Invariant Violation';
-    throw err;
-  };
-  shim.isRequired = shim;
-  function getShim() {
-    return shim;
-  };
-  // Important!
-  // Keep this list in sync with production version in `./factoryWithTypeCheckers.js`.
-  var ReactPropTypes = {
-    array: shim,
-    bigint: shim,
-    bool: shim,
-    func: shim,
-    number: shim,
-    object: shim,
-    string: shim,
-    symbol: shim,
-
-    any: shim,
-    arrayOf: getShim,
-    element: shim,
-    elementType: shim,
-    instanceOf: getShim,
-    node: shim,
-    objectOf: getShim,
-    oneOf: getShim,
-    oneOfType: getShim,
-    shape: getShim,
-    exact: getShim,
-
-    checkPropTypes: emptyFunctionWithReset,
-    resetWarningCache: emptyFunction
-  };
-
-  ReactPropTypes.PropTypes = ReactPropTypes;
-
-  return ReactPropTypes;
-};
-
-
-/***/ }),
-
-/***/ 45697:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-if (false) { var throwOnDirectAccess, ReactIs; } else {
-  // By explicitly using `prop-types` you are opting into new production behavior.
-  // http://fb.me/prop-types-in-prod
-  module.exports = __webpack_require__(92703)();
-}
-
-
-/***/ }),
-
-/***/ 50414:
-/***/ ((module) => {
-
-"use strict";
-/**
- * Copyright (c) 2013-present, Facebook, Inc.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-
-
-var ReactPropTypesSecret = 'SECRET_DO_NOT_PASS_THIS_OR_YOU_WILL_BE_FIRED';
-
-module.exports = ReactPropTypesSecret;
-
-
-/***/ }),
-
-/***/ 94798:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-/** @license React v17.0.2
- * react-dom-server.node.production.min.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-var l=__webpack_require__(27418),n=__webpack_require__(67294),aa=__webpack_require__(12781);function p(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;c<arguments.length;c++)b+="&args[]="+encodeURIComponent(arguments[c]);return"Minified React error #"+a+"; visit "+b+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}
-var q=60106,r=60107,u=60108,z=60114,B=60109,ba=60110,ca=60112,D=60113,da=60120,ea=60115,fa=60116,ha=60121,ia=60117,ja=60119,ka=60129,la=60131;
-if("function"===typeof Symbol&&Symbol.for){var E=Symbol.for;q=E("react.portal");r=E("react.fragment");u=E("react.strict_mode");z=E("react.profiler");B=E("react.provider");ba=E("react.context");ca=E("react.forward_ref");D=E("react.suspense");da=E("react.suspense_list");ea=E("react.memo");fa=E("react.lazy");ha=E("react.block");ia=E("react.fundamental");ja=E("react.scope");ka=E("react.debug_trace_mode");la=E("react.legacy_hidden")}
-function F(a){if(null==a)return null;if("function"===typeof a)return a.displayName||a.name||null;if("string"===typeof a)return a;switch(a){case r:return"Fragment";case q:return"Portal";case z:return"Profiler";case u:return"StrictMode";case D:return"Suspense";case da:return"SuspenseList"}if("object"===typeof a)switch(a.$$typeof){case ba:return(a.displayName||"Context")+".Consumer";case B:return(a._context.displayName||"Context")+".Provider";case ca:var b=a.render;b=b.displayName||b.name||"";return a.displayName||
-(""!==b?"ForwardRef("+b+")":"ForwardRef");case ea:return F(a.type);case ha:return F(a._render);case fa:b=a._payload;a=a._init;try{return F(a(b))}catch(c){}}return null}var ma=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,na={};function I(a,b){for(var c=a._threadCount|0;c<=b;c++)a[c]=a._currentValue2,a._threadCount=c+1}function oa(a,b,c,d){if(d&&(d=a.contextType,"object"===typeof d&&null!==d))return I(d,c),d[c];if(a=a.contextTypes){c={};for(var f in a)c[f]=b[f];b=c}else b=na;return b}
-for(var J=new Uint16Array(16),K=0;15>K;K++)J[K]=K+1;J[15]=0;var pa=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,qa=Object.prototype.hasOwnProperty,ra={},sa={};
-function ta(a){if(qa.call(sa,a))return!0;if(qa.call(ra,a))return!1;if(pa.test(a))return sa[a]=!0;ra[a]=!0;return!1}function ua(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case "function":case "symbol":return!0;case "boolean":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return"data-"!==a&&"aria-"!==a;default:return!1}}
-function va(a,b,c,d){if(null===b||"undefined"===typeof b||ua(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function M(a,b,c,d,f,h,t){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=f;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=h;this.removeEmptyString=t}var N={};
-"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){N[a]=new M(a,0,!1,a,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var b=a[0];N[b]=new M(b,1,!1,a[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(a){N[a]=new M(a,2,!1,a.toLowerCase(),null,!1,!1)});
-["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(a){N[a]=new M(a,2,!1,a,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){N[a]=new M(a,3,!1,a.toLowerCase(),null,!1,!1)});
-["checked","multiple","muted","selected"].forEach(function(a){N[a]=new M(a,3,!0,a,null,!1,!1)});["capture","download"].forEach(function(a){N[a]=new M(a,4,!1,a,null,!1,!1)});["cols","rows","size","span"].forEach(function(a){N[a]=new M(a,6,!1,a,null,!1,!1)});["rowSpan","start"].forEach(function(a){N[a]=new M(a,5,!1,a.toLowerCase(),null,!1,!1)});var wa=/[\-:]([a-z])/g;function xa(a){return a[1].toUpperCase()}
-"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var b=a.replace(wa,
-xa);N[b]=new M(b,1,!1,a,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var b=a.replace(wa,xa);N[b]=new M(b,1,!1,a,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(a){var b=a.replace(wa,xa);N[b]=new M(b,1,!1,a,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(a){N[a]=new M(a,1,!1,a.toLowerCase(),null,!1,!1)});
-N.xlinkHref=new M("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(a){N[a]=new M(a,1,!1,a.toLowerCase(),null,!0,!0)});var ya=/["'&<>]/;
-function O(a){if("boolean"===typeof a||"number"===typeof a)return""+a;a=""+a;var b=ya.exec(a);if(b){var c="",d,f=0;for(d=b.index;d<a.length;d++){switch(a.charCodeAt(d)){case 34:b=""";break;case 38:b="&";break;case 39:b="'";break;case 60:b="<";break;case 62:b=">";break;default:continue}f!==d&&(c+=a.substring(f,d));f=d+1;c+=b}a=f!==d?c+a.substring(f,d):c}return a}
-function za(a,b){var c=N.hasOwnProperty(a)?N[a]:null;var d;if(d="style"!==a)d=null!==c?0===c.type:!(2<a.length)||"o"!==a[0]&&"O"!==a[0]||"n"!==a[1]&&"N"!==a[1]?!1:!0;if(d||va(a,b,c,!1))return"";if(null!==c){a=c.attributeName;d=c.type;if(3===d||4===d&&!0===b)return a+'=""';c.sanitizeURL&&(b=""+b);return a+'="'+(O(b)+'"')}return ta(a)?a+'="'+(O(b)+'"'):""}function Aa(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}
-var Ba="function"===typeof Object.is?Object.is:Aa,P=null,Q=null,R=null,S=!1,T=!1,U=null,V=0;function W(){if(null===P)throw Error(p(321));return P}function Ca(){if(0<V)throw Error(p(312));return{memoizedState:null,queue:null,next:null}}function Da(){null===R?null===Q?(S=!1,Q=R=Ca()):(S=!0,R=Q):null===R.next?(S=!1,R=R.next=Ca()):(S=!0,R=R.next);return R}function Ea(a,b,c,d){for(;T;)T=!1,V+=1,R=null,c=a(b,d);Fa();return c}function Fa(){P=null;T=!1;Q=null;V=0;R=U=null}
-function Ga(a,b){return"function"===typeof b?b(a):b}function Ha(a,b,c){P=W();R=Da();if(S){var d=R.queue;b=d.dispatch;if(null!==U&&(c=U.get(d),void 0!==c)){U.delete(d);d=R.memoizedState;do d=a(d,c.action),c=c.next;while(null!==c);R.memoizedState=d;return[d,b]}return[R.memoizedState,b]}a=a===Ga?"function"===typeof b?b():b:void 0!==c?c(b):b;R.memoizedState=a;a=R.queue={last:null,dispatch:null};a=a.dispatch=Ia.bind(null,P,a);return[R.memoizedState,a]}
-function Ja(a,b){P=W();R=Da();b=void 0===b?null:b;if(null!==R){var c=R.memoizedState;if(null!==c&&null!==b){var d=c[1];a:if(null===d)d=!1;else{for(var f=0;f<d.length&&f<b.length;f++)if(!Ba(b[f],d[f])){d=!1;break a}d=!0}if(d)return c[0]}}a=a();R.memoizedState=[a,b];return a}function Ia(a,b,c){if(!(25>V))throw Error(p(301));if(a===P)if(T=!0,a={action:c,next:null},null===U&&(U=new Map),c=U.get(b),void 0===c)U.set(b,a);else{for(b=c;null!==b.next;)b=b.next;b.next=a}}function Ka(){}
-var X=null,La={readContext:function(a){var b=X.threadID;I(a,b);return a[b]},useContext:function(a){W();var b=X.threadID;I(a,b);return a[b]},useMemo:Ja,useReducer:Ha,useRef:function(a){P=W();R=Da();var b=R.memoizedState;return null===b?(a={current:a},R.memoizedState=a):b},useState:function(a){return Ha(Ga,a)},useLayoutEffect:function(){},useCallback:function(a,b){return Ja(function(){return a},b)},useImperativeHandle:Ka,useEffect:Ka,useDebugValue:Ka,useDeferredValue:function(a){W();return a},useTransition:function(){W();
-return[function(a){a()},!1]},useOpaqueIdentifier:function(){return(X.identifierPrefix||"")+"R:"+(X.uniqueID++).toString(36)},useMutableSource:function(a,b){W();return b(a._source)}},Ma={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};function Na(a){switch(a){case "svg":return"http://www.w3.org/2000/svg";case "math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}
-var Oa={area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},Pa=l({menuitem:!0},Oa),Y={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,
-gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},Qa=["Webkit","ms","Moz","O"];Object.keys(Y).forEach(function(a){Qa.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);Y[b]=Y[a]})});
-var Ra=/([A-Z])/g,Sa=/^ms-/,Z=n.Children.toArray,Ta=ma.ReactCurrentDispatcher,Ua={listing:!0,pre:!0,textarea:!0},Va=/^[a-zA-Z][a-zA-Z:_\.\-\d]*$/,Wa={},Xa={};function Ya(a){if(void 0===a||null===a)return a;var b="";n.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}var Za=Object.prototype.hasOwnProperty,$a={children:null,dangerouslySetInnerHTML:null,suppressContentEditableWarning:null,suppressHydrationWarning:null};function ab(a,b){if(void 0===a)throw Error(p(152,F(b)||"Component"));}
-function bb(a,b,c){function d(d,h){var e=h.prototype&&h.prototype.isReactComponent,f=oa(h,b,c,e),t=[],g=!1,m={isMounted:function(){return!1},enqueueForceUpdate:function(){if(null===t)return null},enqueueReplaceState:function(a,b){g=!0;t=[b]},enqueueSetState:function(a,b){if(null===t)return null;t.push(b)}};if(e){if(e=new h(d.props,f,m),"function"===typeof h.getDerivedStateFromProps){var k=h.getDerivedStateFromProps.call(null,d.props,e.state);null!=k&&(e.state=l({},e.state,k))}}else if(P={},e=h(d.props,
-f,m),e=Ea(h,d.props,e,f),null==e||null==e.render){a=e;ab(a,h);return}e.props=d.props;e.context=f;e.updater=m;m=e.state;void 0===m&&(e.state=m=null);if("function"===typeof e.UNSAFE_componentWillMount||"function"===typeof e.componentWillMount)if("function"===typeof e.componentWillMount&&"function"!==typeof h.getDerivedStateFromProps&&e.componentWillMount(),"function"===typeof e.UNSAFE_componentWillMount&&"function"!==typeof h.getDerivedStateFromProps&&e.UNSAFE_componentWillMount(),t.length){m=t;var v=
-g;t=null;g=!1;if(v&&1===m.length)e.state=m[0];else{k=v?m[0]:e.state;var H=!0;for(v=v?1:0;v<m.length;v++){var x=m[v];x="function"===typeof x?x.call(e,k,d.props,f):x;null!=x&&(H?(H=!1,k=l({},k,x)):l(k,x))}e.state=k}}else t=null;a=e.render();ab(a,h);if("function"===typeof e.getChildContext&&(d=h.childContextTypes,"object"===typeof d)){var y=e.getChildContext();for(var A in y)if(!(A in d))throw Error(p(108,F(h)||"Unknown",A));}y&&(b=l({},b,y))}for(;n.isValidElement(a);){var f=a,h=f.type;if("function"!==
-typeof h)break;d(f,h)}return{child:a,context:b}}
-var cb=function(){function a(a,b,f){n.isValidElement(a)?a.type!==r?a=[a]:(a=a.props.children,a=n.isValidElement(a)?[a]:Z(a)):a=Z(a);a={type:null,domNamespace:Ma.html,children:a,childIndex:0,context:na,footer:""};var c=J[0];if(0===c){var d=J;c=d.length;var g=2*c;if(!(65536>=g))throw Error(p(304));var e=new Uint16Array(g);e.set(d);J=e;J[0]=c+1;for(d=c;d<g-1;d++)J[d]=d+1;J[g-1]=0}else J[0]=J[c];this.threadID=c;this.stack=[a];this.exhausted=!1;this.currentSelectValue=null;this.previousWasTextNode=!1;
-this.makeStaticMarkup=b;this.suspenseDepth=0;this.contextIndex=-1;this.contextStack=[];this.contextValueStack=[];this.uniqueID=0;this.identifierPrefix=f&&f.identifierPrefix||""}var b=a.prototype;b.destroy=function(){if(!this.exhausted){this.exhausted=!0;this.clearProviders();var a=this.threadID;J[a]=J[0];J[0]=a}};b.pushProvider=function(a){var b=++this.contextIndex,c=a.type._context,h=this.threadID;I(c,h);var t=c[h];this.contextStack[b]=c;this.contextValueStack[b]=t;c[h]=a.props.value};b.popProvider=
-function(){var a=this.contextIndex,b=this.contextStack[a],f=this.contextValueStack[a];this.contextStack[a]=null;this.contextValueStack[a]=null;this.contextIndex--;b[this.threadID]=f};b.clearProviders=function(){for(var a=this.contextIndex;0<=a;a--)this.contextStack[a][this.threadID]=this.contextValueStack[a]};b.read=function(a){if(this.exhausted)return null;var b=X;X=this;var c=Ta.current;Ta.current=La;try{for(var h=[""],t=!1;h[0].length<a;){if(0===this.stack.length){this.exhausted=!0;var g=this.threadID;
-J[g]=J[0];J[0]=g;break}var e=this.stack[this.stack.length-1];if(t||e.childIndex>=e.children.length){var L=e.footer;""!==L&&(this.previousWasTextNode=!1);this.stack.pop();if("select"===e.type)this.currentSelectValue=null;else if(null!=e.type&&null!=e.type.type&&e.type.type.$$typeof===B)this.popProvider(e.type);else if(e.type===D){this.suspenseDepth--;var G=h.pop();if(t){t=!1;var C=e.fallbackFrame;if(!C)throw Error(p(303));this.stack.push(C);h[this.suspenseDepth]+="\x3c!--$!--\x3e";continue}else h[this.suspenseDepth]+=
-G}h[this.suspenseDepth]+=L}else{var m=e.children[e.childIndex++],k="";try{k+=this.render(m,e.context,e.domNamespace)}catch(v){if(null!=v&&"function"===typeof v.then)throw Error(p(294));throw v;}finally{}h.length<=this.suspenseDepth&&h.push("");h[this.suspenseDepth]+=k}}return h[0]}finally{Ta.current=c,X=b,Fa()}};b.render=function(a,b,f){if("string"===typeof a||"number"===typeof a){f=""+a;if(""===f)return"";if(this.makeStaticMarkup)return O(f);if(this.previousWasTextNode)return"\x3c!-- --\x3e"+O(f);
-this.previousWasTextNode=!0;return O(f)}b=bb(a,b,this.threadID);a=b.child;b=b.context;if(null===a||!1===a)return"";if(!n.isValidElement(a)){if(null!=a&&null!=a.$$typeof){f=a.$$typeof;if(f===q)throw Error(p(257));throw Error(p(258,f.toString()));}a=Z(a);this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:""});return""}var c=a.type;if("string"===typeof c)return this.renderDOM(a,b,f);switch(c){case la:case ka:case u:case z:case da:case r:return a=Z(a.props.children),this.stack.push({type:null,
-domNamespace:f,children:a,childIndex:0,context:b,footer:""}),"";case D:throw Error(p(294));case ja:throw Error(p(343));}if("object"===typeof c&&null!==c)switch(c.$$typeof){case ca:P={};var d=c.render(a.props,a.ref);d=Ea(c.render,a.props,d,a.ref);d=Z(d);this.stack.push({type:null,domNamespace:f,children:d,childIndex:0,context:b,footer:""});return"";case ea:return a=[n.createElement(c.type,l({ref:a.ref},a.props))],this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,context:b,footer:""}),
-"";case B:return c=Z(a.props.children),f={type:a,domNamespace:f,children:c,childIndex:0,context:b,footer:""},this.pushProvider(a),this.stack.push(f),"";case ba:c=a.type;d=a.props;var g=this.threadID;I(c,g);c=Z(d.children(c[g]));this.stack.push({type:a,domNamespace:f,children:c,childIndex:0,context:b,footer:""});return"";case ia:throw Error(p(338));case fa:return c=a.type,d=c._init,c=d(c._payload),a=[n.createElement(c,l({ref:a.ref},a.props))],this.stack.push({type:null,domNamespace:f,children:a,childIndex:0,
-context:b,footer:""}),""}throw Error(p(130,null==c?c:typeof c,""));};b.renderDOM=function(a,b,f){var c=a.type.toLowerCase();f===Ma.html&&Na(c);if(!Wa.hasOwnProperty(c)){if(!Va.test(c))throw Error(p(65,c));Wa[c]=!0}var d=a.props;if("input"===c)d=l({type:void 0},d,{defaultChecked:void 0,defaultValue:void 0,value:null!=d.value?d.value:d.defaultValue,checked:null!=d.checked?d.checked:d.defaultChecked});else if("textarea"===c){var g=d.value;if(null==g){g=d.defaultValue;var e=d.children;if(null!=e){if(null!=
-g)throw Error(p(92));if(Array.isArray(e)){if(!(1>=e.length))throw Error(p(93));e=e[0]}g=""+e}null==g&&(g="")}d=l({},d,{value:void 0,children:""+g})}else if("select"===c)this.currentSelectValue=null!=d.value?d.value:d.defaultValue,d=l({},d,{value:void 0});else if("option"===c){e=this.currentSelectValue;var L=Ya(d.children);if(null!=e){var G=null!=d.value?d.value+"":L;g=!1;if(Array.isArray(e))for(var C=0;C<e.length;C++){if(""+e[C]===G){g=!0;break}}else g=""+e===G;d=l({selected:void 0,children:void 0},
-d,{selected:g,children:L})}}if(g=d){if(Pa[c]&&(null!=g.children||null!=g.dangerouslySetInnerHTML))throw Error(p(137,c));if(null!=g.dangerouslySetInnerHTML){if(null!=g.children)throw Error(p(60));if(!("object"===typeof g.dangerouslySetInnerHTML&&"__html"in g.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=g.style&&"object"!==typeof g.style)throw Error(p(62));}g=d;e=this.makeStaticMarkup;L=1===this.stack.length;G="<"+a.type;b:if(-1===c.indexOf("-"))C="string"===typeof g.is;else switch(c){case "annotation-xml":case "color-profile":case "font-face":case "font-face-src":case "font-face-uri":case "font-face-format":case "font-face-name":case "missing-glyph":C=
-!1;break b;default:C=!0}for(w in g)if(Za.call(g,w)){var m=g[w];if(null!=m){if("style"===w){var k=void 0,v="",H="";for(k in m)if(m.hasOwnProperty(k)){var x=0===k.indexOf("--"),y=m[k];if(null!=y){if(x)var A=k;else if(A=k,Xa.hasOwnProperty(A))A=Xa[A];else{var eb=A.replace(Ra,"-$1").toLowerCase().replace(Sa,"-ms-");A=Xa[A]=eb}v+=H+A+":";H=k;x=null==y||"boolean"===typeof y||""===y?"":x||"number"!==typeof y||0===y||Y.hasOwnProperty(H)&&Y[H]?(""+y).trim():y+"px";v+=x;H=";"}}m=v||null}k=null;C?$a.hasOwnProperty(w)||
-(k=w,k=ta(k)&&null!=m?k+'="'+(O(m)+'"'):""):k=za(w,m);k&&(G+=" "+k)}}e||L&&(G+=' data-reactroot=""');var w=G;g="";Oa.hasOwnProperty(c)?w+="/>":(w+=">",g="</"+a.type+">");a:{e=d.dangerouslySetInnerHTML;if(null!=e){if(null!=e.__html){e=e.__html;break a}}else if(e=d.children,"string"===typeof e||"number"===typeof e){e=O(e);break a}e=null}null!=e?(d=[],Ua.hasOwnProperty(c)&&"\n"===e.charAt(0)&&(w+="\n"),w+=e):d=Z(d.children);a=a.type;f=null==f||"http://www.w3.org/1999/xhtml"===f?Na(a):"http://www.w3.org/2000/svg"===
-f&&"foreignObject"===a?"http://www.w3.org/1999/xhtml":f;this.stack.push({domNamespace:f,type:c,children:d,childIndex:0,context:b,footer:g});this.previousWasTextNode=!1;return w};return a}();function db(a,b){a.prototype=Object.create(b.prototype);a.prototype.constructor=a;a.__proto__=b}
-var fb=function(a){function b(b,c,h){var d=a.call(this,{})||this;d.partialRenderer=new cb(b,c,h);return d}db(b,a);var c=b.prototype;c._destroy=function(a,b){this.partialRenderer.destroy();b(a)};c._read=function(a){try{this.push(this.partialRenderer.read(a))}catch(f){this.destroy(f)}};return b}(aa.Readable);exports.renderToNodeStream=function(a,b){return new fb(a,!1,b)};exports.renderToStaticMarkup=function(a,b){a=new cb(a,!0,b);try{return a.read(Infinity)}finally{a.destroy()}};
-exports.renderToStaticNodeStream=function(a,b){return new fb(a,!0,b)};exports.renderToString=function(a,b){a=new cb(a,!1,b);try{return a.read(Infinity)}finally{a.destroy()}};exports.version="17.0.2";
-
-
-/***/ }),
-
-/***/ 64448:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-/** @license React v17.0.2
- * react-dom.production.min.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-/*
- Modernizr 3.0.0pre (Custom Build) | MIT
-*/
-var aa=__webpack_require__(67294),m=__webpack_require__(27418),r=__webpack_require__(63840);function y(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;c<arguments.length;c++)b+="&args[]="+encodeURIComponent(arguments[c]);return"Minified React error #"+a+"; visit "+b+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}if(!aa)throw Error(y(227));var ba=new Set,ca={};function da(a,b){ea(a,b);ea(a+"Capture",b)}
-function ea(a,b){ca[a]=b;for(a=0;a<b.length;a++)ba.add(b[a])}
-var fa=!("undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement),ha=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,ia=Object.prototype.hasOwnProperty,
-ja={},ka={};function la(a){if(ia.call(ka,a))return!0;if(ia.call(ja,a))return!1;if(ha.test(a))return ka[a]=!0;ja[a]=!0;return!1}function ma(a,b,c,d){if(null!==c&&0===c.type)return!1;switch(typeof b){case "function":case "symbol":return!0;case "boolean":if(d)return!1;if(null!==c)return!c.acceptsBooleans;a=a.toLowerCase().slice(0,5);return"data-"!==a&&"aria-"!==a;default:return!1}}
-function na(a,b,c,d){if(null===b||"undefined"===typeof b||ma(a,b,c,d))return!0;if(d)return!1;if(null!==c)switch(c.type){case 3:return!b;case 4:return!1===b;case 5:return isNaN(b);case 6:return isNaN(b)||1>b}return!1}function B(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var D={};
-"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(a){D[a]=new B(a,0,!1,a,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(a){var b=a[0];D[b]=new B(b,1,!1,a[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(a){D[a]=new B(a,2,!1,a.toLowerCase(),null,!1,!1)});
-["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(a){D[a]=new B(a,2,!1,a,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(a){D[a]=new B(a,3,!1,a.toLowerCase(),null,!1,!1)});
-["checked","multiple","muted","selected"].forEach(function(a){D[a]=new B(a,3,!0,a,null,!1,!1)});["capture","download"].forEach(function(a){D[a]=new B(a,4,!1,a,null,!1,!1)});["cols","rows","size","span"].forEach(function(a){D[a]=new B(a,6,!1,a,null,!1,!1)});["rowSpan","start"].forEach(function(a){D[a]=new B(a,5,!1,a.toLowerCase(),null,!1,!1)});var oa=/[\-:]([a-z])/g;function pa(a){return a[1].toUpperCase()}
-"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(a){var b=a.replace(oa,
-pa);D[b]=new B(b,1,!1,a,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(a){var b=a.replace(oa,pa);D[b]=new B(b,1,!1,a,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!1,!1)});
-D.xlinkHref=new B("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(a){D[a]=new B(a,1,!1,a.toLowerCase(),null,!0,!0)});
-function qa(a,b,c,d){var e=D.hasOwnProperty(b)?D[b]:null;var f=null!==e?0===e.type:d?!1:!(2<b.length)||"o"!==b[0]&&"O"!==b[0]||"n"!==b[1]&&"N"!==b[1]?!1:!0;f||(na(b,c,e,d)&&(c=null),d||null===e?la(b)&&(null===c?a.removeAttribute(b):a.setAttribute(b,""+c)):e.mustUseProperty?a[e.propertyName]=null===c?3===e.type?!1:"":c:(b=e.attributeName,d=e.attributeNamespace,null===c?a.removeAttribute(b):(e=e.type,c=3===e||4===e&&!0===c?"":""+c,d?a.setAttributeNS(d,b,c):a.setAttribute(b,c))))}
-var ra=aa.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,sa=60103,ta=60106,ua=60107,wa=60108,xa=60114,ya=60109,za=60110,Aa=60112,Ba=60113,Ca=60120,Da=60115,Ea=60116,Fa=60121,Ga=60128,Ha=60129,Ia=60130,Ja=60131;
-if("function"===typeof Symbol&&Symbol.for){var E=Symbol.for;sa=E("react.element");ta=E("react.portal");ua=E("react.fragment");wa=E("react.strict_mode");xa=E("react.profiler");ya=E("react.provider");za=E("react.context");Aa=E("react.forward_ref");Ba=E("react.suspense");Ca=E("react.suspense_list");Da=E("react.memo");Ea=E("react.lazy");Fa=E("react.block");E("react.scope");Ga=E("react.opaque.id");Ha=E("react.debug_trace_mode");Ia=E("react.offscreen");Ja=E("react.legacy_hidden")}
-var Ka="function"===typeof Symbol&&Symbol.iterator;function La(a){if(null===a||"object"!==typeof a)return null;a=Ka&&a[Ka]||a["@@iterator"];return"function"===typeof a?a:null}var Ma;function Na(a){if(void 0===Ma)try{throw Error();}catch(c){var b=c.stack.trim().match(/\n( *(at )?)/);Ma=b&&b[1]||""}return"\n"+Ma+a}var Oa=!1;
-function Pa(a,b){if(!a||Oa)return"";Oa=!0;var c=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b)if(b=function(){throw Error();},Object.defineProperty(b.prototype,"props",{set:function(){throw Error();}}),"object"===typeof Reflect&&Reflect.construct){try{Reflect.construct(b,[])}catch(k){var d=k}Reflect.construct(a,[],b)}else{try{b.call()}catch(k){d=k}a.call(b.prototype)}else{try{throw Error();}catch(k){d=k}a()}}catch(k){if(k&&d&&"string"===typeof k.stack){for(var e=k.stack.split("\n"),
-f=d.stack.split("\n"),g=e.length-1,h=f.length-1;1<=g&&0<=h&&e[g]!==f[h];)h--;for(;1<=g&&0<=h;g--,h--)if(e[g]!==f[h]){if(1!==g||1!==h){do if(g--,h--,0>h||e[g]!==f[h])return"\n"+e[g].replace(" at new "," at ");while(1<=g&&0<=h)}break}}}finally{Oa=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:"")?Na(a):""}
-function Qa(a){switch(a.tag){case 5:return Na(a.type);case 16:return Na("Lazy");case 13:return Na("Suspense");case 19:return Na("SuspenseList");case 0:case 2:case 15:return a=Pa(a.type,!1),a;case 11:return a=Pa(a.type.render,!1),a;case 22:return a=Pa(a.type._render,!1),a;case 1:return a=Pa(a.type,!0),a;default:return""}}
-function Ra(a){if(null==a)return null;if("function"===typeof a)return a.displayName||a.name||null;if("string"===typeof a)return a;switch(a){case ua:return"Fragment";case ta:return"Portal";case xa:return"Profiler";case wa:return"StrictMode";case Ba:return"Suspense";case Ca:return"SuspenseList"}if("object"===typeof a)switch(a.$$typeof){case za:return(a.displayName||"Context")+".Consumer";case ya:return(a._context.displayName||"Context")+".Provider";case Aa:var b=a.render;b=b.displayName||b.name||"";
-return a.displayName||(""!==b?"ForwardRef("+b+")":"ForwardRef");case Da:return Ra(a.type);case Fa:return Ra(a._render);case Ea:b=a._payload;a=a._init;try{return Ra(a(b))}catch(c){}}return null}function Sa(a){switch(typeof a){case "boolean":case "number":case "object":case "string":case "undefined":return a;default:return""}}function Ta(a){var b=a.type;return(a=a.nodeName)&&"input"===a.toLowerCase()&&("checkbox"===b||"radio"===b)}
-function Ua(a){var b=Ta(a)?"checked":"value",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=""+a[b];if(!a.hasOwnProperty(b)&&"undefined"!==typeof c&&"function"===typeof c.get&&"function"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=""+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=""+a},stopTracking:function(){a._valueTracker=
-null;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d="";a&&(d=Ta(a)?a.checked?"true":"false":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||("undefined"!==typeof document?document:void 0);if("undefined"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}
-function Ya(a,b){var c=b.checked;return m({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?"":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:"checkbox"===b.type||"radio"===b.type?null!=b.checked:null!=b.value}}function $a(a,b){b=b.checked;null!=b&&qa(a,"checked",b,!1)}
-function ab(a,b){$a(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if("number"===d){if(0===c&&""===a.value||a.value!=c)a.value=""+c}else a.value!==""+c&&(a.value=""+c);else if("submit"===d||"reset"===d){a.removeAttribute("value");return}b.hasOwnProperty("value")?bb(a,b.type,c):b.hasOwnProperty("defaultValue")&&bb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}
-function cb(a,b,c){if(b.hasOwnProperty("value")||b.hasOwnProperty("defaultValue")){var d=b.type;if(!("submit"!==d&&"reset"!==d||void 0!==b.value&&null!==b.value))return;b=""+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;""!==c&&(a.name="");a.defaultChecked=!!a._wrapperState.initialChecked;""!==c&&(a.name=c)}
-function bb(a,b,c){if("number"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=""+a._wrapperState.initialValue:a.defaultValue!==""+c&&(a.defaultValue=""+c)}function db(a){var b="";aa.Children.forEach(a,function(a){null!=a&&(b+=a)});return b}function eb(a,b){a=m({children:void 0},b);if(b=db(b.children))a.children=b;return a}
-function fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e<c.length;e++)b["$"+c[e]]=!0;for(c=0;c<a.length;c++)e=b.hasOwnProperty("$"+a[c].value),a[c].selected!==e&&(a[c].selected=e),e&&d&&(a[c].defaultSelected=!0)}else{c=""+Sa(c);b=null;for(e=0;e<a.length;e++){if(a[e].value===c){a[e].selected=!0;d&&(a[e].defaultSelected=!0);return}null!==b||a[e].disabled||(b=a[e])}null!==b&&(b.selected=!0)}}
-function gb(a,b){if(null!=b.dangerouslySetInnerHTML)throw Error(y(91));return m({},b,{value:void 0,defaultValue:void 0,children:""+a._wrapperState.initialValue})}function hb(a,b){var c=b.value;if(null==c){c=b.children;b=b.defaultValue;if(null!=c){if(null!=b)throw Error(y(92));if(Array.isArray(c)){if(!(1>=c.length))throw Error(y(93));c=c[0]}b=c}null==b&&(b="");c=b}a._wrapperState={initialValue:Sa(c)}}
-function ib(a,b){var c=Sa(b.value),d=Sa(b.defaultValue);null!=c&&(c=""+c,c!==a.value&&(a.value=c),null==b.defaultValue&&a.defaultValue!==c&&(a.defaultValue=c));null!=d&&(a.defaultValue=""+d)}function jb(a){var b=a.textContent;b===a._wrapperState.initialValue&&""!==b&&null!==b&&(a.value=b)}var kb={html:"http://www.w3.org/1999/xhtml",mathml:"http://www.w3.org/1998/Math/MathML",svg:"http://www.w3.org/2000/svg"};
-function lb(a){switch(a){case "svg":return"http://www.w3.org/2000/svg";case "math":return"http://www.w3.org/1998/Math/MathML";default:return"http://www.w3.org/1999/xhtml"}}function mb(a,b){return null==a||"http://www.w3.org/1999/xhtml"===a?lb(b):"http://www.w3.org/2000/svg"===a&&"foreignObject"===b?"http://www.w3.org/1999/xhtml":a}
-var nb,ob=function(a){return"undefined"!==typeof MSApp&&MSApp.execUnsafeLocalFunction?function(b,c,d,e){MSApp.execUnsafeLocalFunction(function(){return a(b,c,d,e)})}:a}(function(a,b){if(a.namespaceURI!==kb.svg||"innerHTML"in a)a.innerHTML=b;else{nb=nb||document.createElement("div");nb.innerHTML="<svg>"+b.valueOf().toString()+"</svg>";for(b=nb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});
-function pb(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}
-var qb={animationIterationCount:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,
-floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},rb=["Webkit","ms","Moz","O"];Object.keys(qb).forEach(function(a){rb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);qb[b]=qb[a]})});function sb(a,b,c){return null==b||"boolean"===typeof b||""===b?"":c||"number"!==typeof b||0===b||qb.hasOwnProperty(a)&&qb[a]?(""+b).trim():b+"px"}
-function tb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf("--"),e=sb(c,b[c],d);"float"===c&&(c="cssFloat");d?a.setProperty(c,e):a[c]=e}}var ub=m({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});
-function vb(a,b){if(b){if(ub[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(y(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(y(60));if(!("object"===typeof b.dangerouslySetInnerHTML&&"__html"in b.dangerouslySetInnerHTML))throw Error(y(61));}if(null!=b.style&&"object"!==typeof b.style)throw Error(y(62));}}
-function wb(a,b){if(-1===a.indexOf("-"))return"string"===typeof b.is;switch(a){case "annotation-xml":case "color-profile":case "font-face":case "font-face-src":case "font-face-uri":case "font-face-format":case "font-face-name":case "missing-glyph":return!1;default:return!0}}function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;
-function Bb(a){if(a=Cb(a)){if("function"!==typeof yb)throw Error(y(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a<b.length;a++)Bb(b[a])}}function Gb(a,b){return a(b)}function Hb(a,b,c,d,e){return a(b,c,d,e)}function Ib(){}var Jb=Gb,Kb=!1,Lb=!1;function Mb(){if(null!==zb||null!==Ab)Ib(),Fb()}
-function Nb(a,b,c){if(Lb)return a(b,c);Lb=!0;try{return Jb(a,b,c)}finally{Lb=!1,Mb()}}
-function Ob(a,b){var c=a.stateNode;if(null===c)return null;var d=Db(c);if(null===d)return null;c=d[b];a:switch(b){case "onClick":case "onClickCapture":case "onDoubleClick":case "onDoubleClickCapture":case "onMouseDown":case "onMouseDownCapture":case "onMouseMove":case "onMouseMoveCapture":case "onMouseUp":case "onMouseUpCapture":case "onMouseEnter":(d=!d.disabled)||(a=a.type,d=!("button"===a||"input"===a||"select"===a||"textarea"===a));a=!d;break a;default:a=!1}if(a)return null;if(c&&"function"!==
-typeof c)throw Error(y(231,b,typeof c));return c}var Pb=!1;if(fa)try{var Qb={};Object.defineProperty(Qb,"passive",{get:function(){Pb=!0}});window.addEventListener("test",Qb,Qb);window.removeEventListener("test",Qb,Qb)}catch(a){Pb=!1}function Rb(a,b,c,d,e,f,g,h,k){var l=Array.prototype.slice.call(arguments,3);try{b.apply(c,l)}catch(n){this.onError(n)}}var Sb=!1,Tb=null,Ub=!1,Vb=null,Wb={onError:function(a){Sb=!0;Tb=a}};function Xb(a,b,c,d,e,f,g,h,k){Sb=!1;Tb=null;Rb.apply(Wb,arguments)}
-function Yb(a,b,c,d,e,f,g,h,k){Xb.apply(this,arguments);if(Sb){if(Sb){var l=Tb;Sb=!1;Tb=null}else throw Error(y(198));Ub||(Ub=!0,Vb=l)}}function Zb(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.flags&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function $b(a){if(13===a.tag){var b=a.memoizedState;null===b&&(a=a.alternate,null!==a&&(b=a.memoizedState));if(null!==b)return b.dehydrated}return null}function ac(a){if(Zb(a)!==a)throw Error(y(188));}
-function bc(a){var b=a.alternate;if(!b){b=Zb(a);if(null===b)throw Error(y(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return ac(e),a;if(f===d)return ac(e),b;f=f.sibling}throw Error(y(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===
-c){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(y(189));}}if(c.alternate!==d)throw Error(y(190));}if(3!==c.tag)throw Error(y(188));return c.stateNode.current===c?a:b}function cc(a){a=bc(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}
-function dc(a,b){for(var c=a.alternate;null!==b;){if(b===a||b===c)return!0;b=b.return}return!1}var ec,fc,gc,hc,ic=!1,jc=[],kc=null,lc=null,mc=null,nc=new Map,oc=new Map,pc=[],qc="mousedown mouseup touchcancel touchend touchstart auxclick dblclick pointercancel pointerdown pointerup dragend dragstart drop compositionend compositionstart keydown keypress keyup input textInput copy cut paste click change contextmenu reset submit".split(" ");
-function rc(a,b,c,d,e){return{blockedOn:a,domEventName:b,eventSystemFlags:c|16,nativeEvent:e,targetContainers:[d]}}function sc(a,b){switch(a){case "focusin":case "focusout":kc=null;break;case "dragenter":case "dragleave":lc=null;break;case "mouseover":case "mouseout":mc=null;break;case "pointerover":case "pointerout":nc.delete(b.pointerId);break;case "gotpointercapture":case "lostpointercapture":oc.delete(b.pointerId)}}
-function tc(a,b,c,d,e,f){if(null===a||a.nativeEvent!==f)return a=rc(b,c,d,e,f),null!==b&&(b=Cb(b),null!==b&&fc(b)),a;a.eventSystemFlags|=d;b=a.targetContainers;null!==e&&-1===b.indexOf(e)&&b.push(e);return a}
-function uc(a,b,c,d,e){switch(b){case "focusin":return kc=tc(kc,a,b,c,d,e),!0;case "dragenter":return lc=tc(lc,a,b,c,d,e),!0;case "mouseover":return mc=tc(mc,a,b,c,d,e),!0;case "pointerover":var f=e.pointerId;nc.set(f,tc(nc.get(f)||null,a,b,c,d,e));return!0;case "gotpointercapture":return f=e.pointerId,oc.set(f,tc(oc.get(f)||null,a,b,c,d,e)),!0}return!1}
-function vc(a){var b=wc(a.target);if(null!==b){var c=Zb(b);if(null!==c)if(b=c.tag,13===b){if(b=$b(c),null!==b){a.blockedOn=b;hc(a.lanePriority,function(){r.unstable_runWithPriority(a.priority,function(){gc(c)})});return}}else if(3===b&&c.stateNode.hydrate){a.blockedOn=3===c.tag?c.stateNode.containerInfo:null;return}}a.blockedOn=null}
-function xc(a){if(null!==a.blockedOn)return!1;for(var b=a.targetContainers;0<b.length;){var c=yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null!==c)return b=Cb(c),null!==b&&fc(b),a.blockedOn=c,!1;b.shift()}return!0}function zc(a,b,c){xc(a)&&c.delete(b)}
-function Ac(){for(ic=!1;0<jc.length;){var a=jc[0];if(null!==a.blockedOn){a=Cb(a.blockedOn);null!==a&&ec(a);break}for(var b=a.targetContainers;0<b.length;){var c=yc(a.domEventName,a.eventSystemFlags,b[0],a.nativeEvent);if(null!==c){a.blockedOn=c;break}b.shift()}null===a.blockedOn&&jc.shift()}null!==kc&&xc(kc)&&(kc=null);null!==lc&&xc(lc)&&(lc=null);null!==mc&&xc(mc)&&(mc=null);nc.forEach(zc);oc.forEach(zc)}
-function Bc(a,b){a.blockedOn===b&&(a.blockedOn=null,ic||(ic=!0,r.unstable_scheduleCallback(r.unstable_NormalPriority,Ac)))}
-function Cc(a){function b(b){return Bc(b,a)}if(0<jc.length){Bc(jc[0],a);for(var c=1;c<jc.length;c++){var d=jc[c];d.blockedOn===a&&(d.blockedOn=null)}}null!==kc&&Bc(kc,a);null!==lc&&Bc(lc,a);null!==mc&&Bc(mc,a);nc.forEach(b);oc.forEach(b);for(c=0;c<pc.length;c++)d=pc[c],d.blockedOn===a&&(d.blockedOn=null);for(;0<pc.length&&(c=pc[0],null===c.blockedOn);)vc(c),null===c.blockedOn&&pc.shift()}
-function Dc(a,b){var c={};c[a.toLowerCase()]=b.toLowerCase();c["Webkit"+a]="webkit"+b;c["Moz"+a]="moz"+b;return c}var Ec={animationend:Dc("Animation","AnimationEnd"),animationiteration:Dc("Animation","AnimationIteration"),animationstart:Dc("Animation","AnimationStart"),transitionend:Dc("Transition","TransitionEnd")},Fc={},Gc={};
-fa&&(Gc=document.createElement("div").style,"AnimationEvent"in window||(delete Ec.animationend.animation,delete Ec.animationiteration.animation,delete Ec.animationstart.animation),"TransitionEvent"in window||delete Ec.transitionend.transition);function Hc(a){if(Fc[a])return Fc[a];if(!Ec[a])return a;var b=Ec[a],c;for(c in b)if(b.hasOwnProperty(c)&&c in Gc)return Fc[a]=b[c];return a}
-var Ic=Hc("animationend"),Jc=Hc("animationiteration"),Kc=Hc("animationstart"),Lc=Hc("transitionend"),Mc=new Map,Nc=new Map,Oc=["abort","abort",Ic,"animationEnd",Jc,"animationIteration",Kc,"animationStart","canplay","canPlay","canplaythrough","canPlayThrough","durationchange","durationChange","emptied","emptied","encrypted","encrypted","ended","ended","error","error","gotpointercapture","gotPointerCapture","load","load","loadeddata","loadedData","loadedmetadata","loadedMetadata","loadstart","loadStart",
-"lostpointercapture","lostPointerCapture","playing","playing","progress","progress","seeking","seeking","stalled","stalled","suspend","suspend","timeupdate","timeUpdate",Lc,"transitionEnd","waiting","waiting"];function Pc(a,b){for(var c=0;c<a.length;c+=2){var d=a[c],e=a[c+1];e="on"+(e[0].toUpperCase()+e.slice(1));Nc.set(d,b);Mc.set(d,e);da(e,[d])}}var Qc=r.unstable_now;Qc();var F=8;
-function Rc(a){if(0!==(1&a))return F=15,1;if(0!==(2&a))return F=14,2;if(0!==(4&a))return F=13,4;var b=24&a;if(0!==b)return F=12,b;if(0!==(a&32))return F=11,32;b=192&a;if(0!==b)return F=10,b;if(0!==(a&256))return F=9,256;b=3584&a;if(0!==b)return F=8,b;if(0!==(a&4096))return F=7,4096;b=4186112&a;if(0!==b)return F=6,b;b=62914560&a;if(0!==b)return F=5,b;if(a&67108864)return F=4,67108864;if(0!==(a&134217728))return F=3,134217728;b=805306368&a;if(0!==b)return F=2,b;if(0!==(1073741824&a))return F=1,1073741824;
-F=8;return a}function Sc(a){switch(a){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}function Tc(a){switch(a){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(y(358,a));}}
-function Uc(a,b){var c=a.pendingLanes;if(0===c)return F=0;var d=0,e=0,f=a.expiredLanes,g=a.suspendedLanes,h=a.pingedLanes;if(0!==f)d=f,e=F=15;else if(f=c&134217727,0!==f){var k=f&~g;0!==k?(d=Rc(k),e=F):(h&=f,0!==h&&(d=Rc(h),e=F))}else f=c&~g,0!==f?(d=Rc(f),e=F):0!==h&&(d=Rc(h),e=F);if(0===d)return 0;d=31-Vc(d);d=c&((0>d?0:1<<d)<<1)-1;if(0!==b&&b!==d&&0===(b&g)){Rc(b);if(e<=F)return b;F=e}b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0<b;)c=31-Vc(b),e=1<<c,d|=a[c],b&=~e;return d}
-function Wc(a){a=a.pendingLanes&-1073741825;return 0!==a?a:a&1073741824?1073741824:0}function Xc(a,b){switch(a){case 15:return 1;case 14:return 2;case 12:return a=Yc(24&~b),0===a?Xc(10,b):a;case 10:return a=Yc(192&~b),0===a?Xc(8,b):a;case 8:return a=Yc(3584&~b),0===a&&(a=Yc(4186112&~b),0===a&&(a=512)),a;case 2:return b=Yc(805306368&~b),0===b&&(b=268435456),b}throw Error(y(358,a));}function Yc(a){return a&-a}function Zc(a){for(var b=[],c=0;31>c;c++)b.push(a);return b}
-function $c(a,b,c){a.pendingLanes|=b;var d=b-1;a.suspendedLanes&=d;a.pingedLanes&=d;a=a.eventTimes;b=31-Vc(b);a[b]=c}var Vc=Math.clz32?Math.clz32:ad,bd=Math.log,cd=Math.LN2;function ad(a){return 0===a?32:31-(bd(a)/cd|0)|0}var dd=r.unstable_UserBlockingPriority,ed=r.unstable_runWithPriority,fd=!0;function gd(a,b,c,d){Kb||Ib();var e=hd,f=Kb;Kb=!0;try{Hb(e,a,b,c,d)}finally{(Kb=f)||Mb()}}function id(a,b,c,d){ed(dd,hd.bind(null,a,b,c,d))}
-function hd(a,b,c,d){if(fd){var e;if((e=0===(b&4))&&0<jc.length&&-1<qc.indexOf(a))a=rc(null,a,b,c,d),jc.push(a);else{var f=yc(a,b,c,d);if(null===f)e&&sc(a,d);else{if(e){if(-1<qc.indexOf(a)){a=rc(f,a,b,c,d);jc.push(a);return}if(uc(f,a,b,c,d))return;sc(a,d)}jd(a,b,d,null,c)}}}}
-function yc(a,b,c,d){var e=xb(d);e=wc(e);if(null!==e){var f=Zb(e);if(null===f)e=null;else{var g=f.tag;if(13===g){e=$b(f);if(null!==e)return e;e=null}else if(3===g){if(f.stateNode.hydrate)return 3===f.tag?f.stateNode.containerInfo:null;e=null}else f!==e&&(e=null)}}jd(a,b,d,e,c);return null}var kd=null,ld=null,md=null;
-function nd(){if(md)return md;var a,b=ld,c=b.length,d,e="value"in kd?kd.value:kd.textContent,f=e.length;for(a=0;a<c&&b[a]===e[a];a++);var g=c-a;for(d=1;d<=g&&b[c-d]===e[f-d];d++);return md=e.slice(a,1<d?1-d:void 0)}function od(a){var b=a.keyCode;"charCode"in a?(a=a.charCode,0===a&&13===b&&(a=13)):a=b;10===a&&(a=13);return 32<=a||13===a?a:0}function pd(){return!0}function qd(){return!1}
-function rd(a){function b(b,d,e,f,g){this._reactName=b;this._targetInst=e;this.type=d;this.nativeEvent=f;this.target=g;this.currentTarget=null;for(var c in a)a.hasOwnProperty(c)&&(b=a[c],this[c]=b?b(f):f[c]);this.isDefaultPrevented=(null!=f.defaultPrevented?f.defaultPrevented:!1===f.returnValue)?pd:qd;this.isPropagationStopped=qd;return this}m(b.prototype,{preventDefault:function(){this.defaultPrevented=!0;var a=this.nativeEvent;a&&(a.preventDefault?a.preventDefault():"unknown"!==typeof a.returnValue&&
-(a.returnValue=!1),this.isDefaultPrevented=pd)},stopPropagation:function(){var a=this.nativeEvent;a&&(a.stopPropagation?a.stopPropagation():"unknown"!==typeof a.cancelBubble&&(a.cancelBubble=!0),this.isPropagationStopped=pd)},persist:function(){},isPersistent:pd});return b}
-var sd={eventPhase:0,bubbles:0,cancelable:0,timeStamp:function(a){return a.timeStamp||Date.now()},defaultPrevented:0,isTrusted:0},td=rd(sd),ud=m({},sd,{view:0,detail:0}),vd=rd(ud),wd,xd,yd,Ad=m({},ud,{screenX:0,screenY:0,clientX:0,clientY:0,pageX:0,pageY:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,getModifierState:zd,button:0,buttons:0,relatedTarget:function(a){return void 0===a.relatedTarget?a.fromElement===a.srcElement?a.toElement:a.fromElement:a.relatedTarget},movementX:function(a){if("movementX"in
-a)return a.movementX;a!==yd&&(yd&&"mousemove"===a.type?(wd=a.screenX-yd.screenX,xd=a.screenY-yd.screenY):xd=wd=0,yd=a);return wd},movementY:function(a){return"movementY"in a?a.movementY:xd}}),Bd=rd(Ad),Cd=m({},Ad,{dataTransfer:0}),Dd=rd(Cd),Ed=m({},ud,{relatedTarget:0}),Fd=rd(Ed),Gd=m({},sd,{animationName:0,elapsedTime:0,pseudoElement:0}),Hd=rd(Gd),Id=m({},sd,{clipboardData:function(a){return"clipboardData"in a?a.clipboardData:window.clipboardData}}),Jd=rd(Id),Kd=m({},sd,{data:0}),Ld=rd(Kd),Md={Esc:"Escape",
-Spacebar:" ",Left:"ArrowLeft",Up:"ArrowUp",Right:"ArrowRight",Down:"ArrowDown",Del:"Delete",Win:"OS",Menu:"ContextMenu",Apps:"ContextMenu",Scroll:"ScrollLock",MozPrintableKey:"Unidentified"},Nd={8:"Backspace",9:"Tab",12:"Clear",13:"Enter",16:"Shift",17:"Control",18:"Alt",19:"Pause",20:"CapsLock",27:"Escape",32:" ",33:"PageUp",34:"PageDown",35:"End",36:"Home",37:"ArrowLeft",38:"ArrowUp",39:"ArrowRight",40:"ArrowDown",45:"Insert",46:"Delete",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",
-119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"NumLock",145:"ScrollLock",224:"Meta"},Od={Alt:"altKey",Control:"ctrlKey",Meta:"metaKey",Shift:"shiftKey"};function Pd(a){var b=this.nativeEvent;return b.getModifierState?b.getModifierState(a):(a=Od[a])?!!b[a]:!1}function zd(){return Pd}
-var Qd=m({},ud,{key:function(a){if(a.key){var b=Md[a.key]||a.key;if("Unidentified"!==b)return b}return"keypress"===a.type?(a=od(a),13===a?"Enter":String.fromCharCode(a)):"keydown"===a.type||"keyup"===a.type?Nd[a.keyCode]||"Unidentified":""},code:0,location:0,ctrlKey:0,shiftKey:0,altKey:0,metaKey:0,repeat:0,locale:0,getModifierState:zd,charCode:function(a){return"keypress"===a.type?od(a):0},keyCode:function(a){return"keydown"===a.type||"keyup"===a.type?a.keyCode:0},which:function(a){return"keypress"===
-a.type?od(a):"keydown"===a.type||"keyup"===a.type?a.keyCode:0}}),Rd=rd(Qd),Sd=m({},Ad,{pointerId:0,width:0,height:0,pressure:0,tangentialPressure:0,tiltX:0,tiltY:0,twist:0,pointerType:0,isPrimary:0}),Td=rd(Sd),Ud=m({},ud,{touches:0,targetTouches:0,changedTouches:0,altKey:0,metaKey:0,ctrlKey:0,shiftKey:0,getModifierState:zd}),Vd=rd(Ud),Wd=m({},sd,{propertyName:0,elapsedTime:0,pseudoElement:0}),Xd=rd(Wd),Yd=m({},Ad,{deltaX:function(a){return"deltaX"in a?a.deltaX:"wheelDeltaX"in a?-a.wheelDeltaX:0},
-deltaY:function(a){return"deltaY"in a?a.deltaY:"wheelDeltaY"in a?-a.wheelDeltaY:"wheelDelta"in a?-a.wheelDelta:0},deltaZ:0,deltaMode:0}),Zd=rd(Yd),$d=[9,13,27,32],ae=fa&&"CompositionEvent"in window,be=null;fa&&"documentMode"in document&&(be=document.documentMode);var ce=fa&&"TextEvent"in window&&!be,de=fa&&(!ae||be&&8<be&&11>=be),ee=String.fromCharCode(32),fe=!1;
-function ge(a,b){switch(a){case "keyup":return-1!==$d.indexOf(b.keyCode);case "keydown":return 229!==b.keyCode;case "keypress":case "mousedown":case "focusout":return!0;default:return!1}}function he(a){a=a.detail;return"object"===typeof a&&"data"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case "compositionend":return he(b);case "keypress":if(32!==b.which)return null;fe=!0;return ee;case "textInput":return a=b.data,a===ee&&fe?null:a;default:return null}}
-function ke(a,b){if(ie)return"compositionend"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case "paste":return null;case "keypress":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1<b.char.length)return b.char;if(b.which)return String.fromCharCode(b.which)}return null;case "compositionend":return de&&"ko"!==b.locale?null:b.data;default:return null}}
-var le={color:!0,date:!0,datetime:!0,"datetime-local":!0,email:!0,month:!0,number:!0,password:!0,range:!0,search:!0,tel:!0,text:!0,time:!0,url:!0,week:!0};function me(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return"input"===b?!!le[a.type]:"textarea"===b?!0:!1}function ne(a,b,c,d){Eb(d);b=oe(b,"onChange");0<b.length&&(c=new td("onChange","change",null,c,d),a.push({event:c,listeners:b}))}var pe=null,qe=null;function re(a){se(a,0)}function te(a){var b=ue(a);if(Wa(b))return a}
-function ve(a,b){if("change"===a)return b}var we=!1;if(fa){var xe;if(fa){var ye="oninput"in document;if(!ye){var ze=document.createElement("div");ze.setAttribute("oninput","return;");ye="function"===typeof ze.oninput}xe=ye}else xe=!1;we=xe&&(!document.documentMode||9<document.documentMode)}function Ae(){pe&&(pe.detachEvent("onpropertychange",Be),qe=pe=null)}function Be(a){if("value"===a.propertyName&&te(qe)){var b=[];ne(b,qe,a,xb(a));a=re;if(Kb)a(b);else{Kb=!0;try{Gb(a,b)}finally{Kb=!1,Mb()}}}}
-function Ce(a,b,c){"focusin"===a?(Ae(),pe=b,qe=c,pe.attachEvent("onpropertychange",Be)):"focusout"===a&&Ae()}function De(a){if("selectionchange"===a||"keyup"===a||"keydown"===a)return te(qe)}function Ee(a,b){if("click"===a)return te(b)}function Fe(a,b){if("input"===a||"change"===a)return te(b)}function Ge(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var He="function"===typeof Object.is?Object.is:Ge,Ie=Object.prototype.hasOwnProperty;
-function Je(a,b){if(He(a,b))return!0;if("object"!==typeof a||null===a||"object"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!Ie.call(b,c[d])||!He(a[c[d]],b[c[d]]))return!1;return!0}function Ke(a){for(;a&&a.firstChild;)a=a.firstChild;return a}
-function Le(a,b){var c=Ke(a);a=0;for(var d;c;){if(3===c.nodeType){d=a+c.textContent.length;if(a<=b&&d>=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Ke(c)}}function Me(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Me(a,b.parentNode):"contains"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}
-function Ne(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c="string"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Oe(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&("input"===b&&("text"===a.type||"search"===a.type||"tel"===a.type||"url"===a.type||"password"===a.type)||"textarea"===b||"true"===a.contentEditable)}
-var Pe=fa&&"documentMode"in document&&11>=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;
-function Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,"selectionStart"in d&&Oe(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Je(Se,d)||(Se=d,d=oe(Re,"onSelect"),0<d.length&&(b=new td("onSelect","select",null,b,c),a.push({event:b,listeners:d}),b.target=Qe)))}
-Pc("cancel cancel click click close close contextmenu contextMenu copy copy cut cut auxclick auxClick dblclick doubleClick dragend dragEnd dragstart dragStart drop drop focusin focus focusout blur input input invalid invalid keydown keyDown keypress keyPress keyup keyUp mousedown mouseDown mouseup mouseUp paste paste pause pause play play pointercancel pointerCancel pointerdown pointerDown pointerup pointerUp ratechange rateChange reset reset seeked seeked submit submit touchcancel touchCancel touchend touchEnd touchstart touchStart volumechange volumeChange".split(" "),
-0);Pc("drag drag dragenter dragEnter dragexit dragExit dragleave dragLeave dragover dragOver mousemove mouseMove mouseout mouseOut mouseover mouseOver pointermove pointerMove pointerout pointerOut pointerover pointerOver scroll scroll toggle toggle touchmove touchMove wheel wheel".split(" "),1);Pc(Oc,2);for(var Ve="change selectionchange textInput compositionstart compositionend compositionupdate".split(" "),We=0;We<Ve.length;We++)Nc.set(Ve[We],0);ea("onMouseEnter",["mouseout","mouseover"]);
-ea("onMouseLeave",["mouseout","mouseover"]);ea("onPointerEnter",["pointerout","pointerover"]);ea("onPointerLeave",["pointerout","pointerover"]);da("onChange","change click focusin focusout input keydown keyup selectionchange".split(" "));da("onSelect","focusout contextmenu dragend focusin keydown keyup mousedown mouseup selectionchange".split(" "));da("onBeforeInput",["compositionend","keypress","textInput","paste"]);da("onCompositionEnd","compositionend focusout keydown keypress keyup mousedown".split(" "));
-da("onCompositionStart","compositionstart focusout keydown keypress keyup mousedown".split(" "));da("onCompositionUpdate","compositionupdate focusout keydown keypress keyup mousedown".split(" "));var Xe="abort canplay canplaythrough durationchange emptied encrypted ended error loadeddata loadedmetadata loadstart pause play playing progress ratechange seeked seeking stalled suspend timeupdate volumechange waiting".split(" "),Ye=new Set("cancel close invalid load scroll toggle".split(" ").concat(Xe));
-function Ze(a,b,c){var d=a.type||"unknown-event";a.currentTarget=c;Yb(d,b,void 0,a);a.currentTarget=null}
-function se(a,b){b=0!==(b&4);for(var c=0;c<a.length;c++){var d=a[c],e=d.event;d=d.listeners;a:{var f=void 0;if(b)for(var g=d.length-1;0<=g;g--){var h=d[g],k=h.instance,l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;Ze(e,h,l);f=k}else for(g=0;g<d.length;g++){h=d[g];k=h.instance;l=h.currentTarget;h=h.listener;if(k!==f&&e.isPropagationStopped())break a;Ze(e,h,l);f=k}}}if(Ub)throw a=Vb,Ub=!1,Vb=null,a;}
-function G(a,b){var c=$e(b),d=a+"__bubble";c.has(d)||(af(b,a,2,!1),c.add(d))}var bf="_reactListening"+Math.random().toString(36).slice(2);function cf(a){a[bf]||(a[bf]=!0,ba.forEach(function(b){Ye.has(b)||df(b,!1,a,null);df(b,!0,a,null)}))}
-function df(a,b,c,d){var e=4<arguments.length&&void 0!==arguments[4]?arguments[4]:0,f=c;"selectionchange"===a&&9!==c.nodeType&&(f=c.ownerDocument);if(null!==d&&!b&&Ye.has(a)){if("scroll"!==a)return;e|=2;f=d}var g=$e(f),h=a+"__"+(b?"capture":"bubble");g.has(h)||(b&&(e|=4),af(f,a,e,b),g.add(h))}
-function af(a,b,c,d){var e=Nc.get(b);switch(void 0===e?2:e){case 0:e=gd;break;case 1:e=id;break;default:e=hd}c=e.bind(null,b,c,a);e=void 0;!Pb||"touchstart"!==b&&"touchmove"!==b&&"wheel"!==b||(e=!0);d?void 0!==e?a.addEventListener(b,c,{capture:!0,passive:e}):a.addEventListener(b,c,!0):void 0!==e?a.addEventListener(b,c,{passive:e}):a.addEventListener(b,c,!1)}
-function jd(a,b,c,d,e){var f=d;if(0===(b&1)&&0===(b&2)&&null!==d)a:for(;;){if(null===d)return;var g=d.tag;if(3===g||4===g){var h=d.stateNode.containerInfo;if(h===e||8===h.nodeType&&h.parentNode===e)break;if(4===g)for(g=d.return;null!==g;){var k=g.tag;if(3===k||4===k)if(k=g.stateNode.containerInfo,k===e||8===k.nodeType&&k.parentNode===e)return;g=g.return}for(;null!==h;){g=wc(h);if(null===g)return;k=g.tag;if(5===k||6===k){d=f=g;continue a}h=h.parentNode}}d=d.return}Nb(function(){var d=f,e=xb(c),g=[];
-a:{var h=Mc.get(a);if(void 0!==h){var k=td,x=a;switch(a){case "keypress":if(0===od(c))break a;case "keydown":case "keyup":k=Rd;break;case "focusin":x="focus";k=Fd;break;case "focusout":x="blur";k=Fd;break;case "beforeblur":case "afterblur":k=Fd;break;case "click":if(2===c.button)break a;case "auxclick":case "dblclick":case "mousedown":case "mousemove":case "mouseup":case "mouseout":case "mouseover":case "contextmenu":k=Bd;break;case "drag":case "dragend":case "dragenter":case "dragexit":case "dragleave":case "dragover":case "dragstart":case "drop":k=
-Dd;break;case "touchcancel":case "touchend":case "touchmove":case "touchstart":k=Vd;break;case Ic:case Jc:case Kc:k=Hd;break;case Lc:k=Xd;break;case "scroll":k=vd;break;case "wheel":k=Zd;break;case "copy":case "cut":case "paste":k=Jd;break;case "gotpointercapture":case "lostpointercapture":case "pointercancel":case "pointerdown":case "pointermove":case "pointerout":case "pointerover":case "pointerup":k=Td}var w=0!==(b&4),z=!w&&"scroll"===a,u=w?null!==h?h+"Capture":null:h;w=[];for(var t=d,q;null!==
-t;){q=t;var v=q.stateNode;5===q.tag&&null!==v&&(q=v,null!==u&&(v=Ob(t,u),null!=v&&w.push(ef(t,v,q))));if(z)break;t=t.return}0<w.length&&(h=new k(h,x,null,c,e),g.push({event:h,listeners:w}))}}if(0===(b&7)){a:{h="mouseover"===a||"pointerover"===a;k="mouseout"===a||"pointerout"===a;if(h&&0===(b&16)&&(x=c.relatedTarget||c.fromElement)&&(wc(x)||x[ff]))break a;if(k||h){h=e.window===e?e:(h=e.ownerDocument)?h.defaultView||h.parentWindow:window;if(k){if(x=c.relatedTarget||c.toElement,k=d,x=x?wc(x):null,null!==
-x&&(z=Zb(x),x!==z||5!==x.tag&&6!==x.tag))x=null}else k=null,x=d;if(k!==x){w=Bd;v="onMouseLeave";u="onMouseEnter";t="mouse";if("pointerout"===a||"pointerover"===a)w=Td,v="onPointerLeave",u="onPointerEnter",t="pointer";z=null==k?h:ue(k);q=null==x?h:ue(x);h=new w(v,t+"leave",k,c,e);h.target=z;h.relatedTarget=q;v=null;wc(e)===d&&(w=new w(u,t+"enter",x,c,e),w.target=q,w.relatedTarget=z,v=w);z=v;if(k&&x)b:{w=k;u=x;t=0;for(q=w;q;q=gf(q))t++;q=0;for(v=u;v;v=gf(v))q++;for(;0<t-q;)w=gf(w),t--;for(;0<q-t;)u=
-gf(u),q--;for(;t--;){if(w===u||null!==u&&w===u.alternate)break b;w=gf(w);u=gf(u)}w=null}else w=null;null!==k&&hf(g,h,k,w,!1);null!==x&&null!==z&&hf(g,z,x,w,!0)}}}a:{h=d?ue(d):window;k=h.nodeName&&h.nodeName.toLowerCase();if("select"===k||"input"===k&&"file"===h.type)var J=ve;else if(me(h))if(we)J=Fe;else{J=De;var K=Ce}else(k=h.nodeName)&&"input"===k.toLowerCase()&&("checkbox"===h.type||"radio"===h.type)&&(J=Ee);if(J&&(J=J(a,d))){ne(g,J,c,e);break a}K&&K(a,h,d);"focusout"===a&&(K=h._wrapperState)&&
-K.controlled&&"number"===h.type&&bb(h,"number",h.value)}K=d?ue(d):window;switch(a){case "focusin":if(me(K)||"true"===K.contentEditable)Qe=K,Re=d,Se=null;break;case "focusout":Se=Re=Qe=null;break;case "mousedown":Te=!0;break;case "contextmenu":case "mouseup":case "dragend":Te=!1;Ue(g,c,e);break;case "selectionchange":if(Pe)break;case "keydown":case "keyup":Ue(g,c,e)}var Q;if(ae)b:{switch(a){case "compositionstart":var L="onCompositionStart";break b;case "compositionend":L="onCompositionEnd";break b;
-case "compositionupdate":L="onCompositionUpdate";break b}L=void 0}else ie?ge(a,c)&&(L="onCompositionEnd"):"keydown"===a&&229===c.keyCode&&(L="onCompositionStart");L&&(de&&"ko"!==c.locale&&(ie||"onCompositionStart"!==L?"onCompositionEnd"===L&&ie&&(Q=nd()):(kd=e,ld="value"in kd?kd.value:kd.textContent,ie=!0)),K=oe(d,L),0<K.length&&(L=new Ld(L,a,null,c,e),g.push({event:L,listeners:K}),Q?L.data=Q:(Q=he(c),null!==Q&&(L.data=Q))));if(Q=ce?je(a,c):ke(a,c))d=oe(d,"onBeforeInput"),0<d.length&&(e=new Ld("onBeforeInput",
-"beforeinput",null,c,e),g.push({event:e,listeners:d}),e.data=Q)}se(g,b)})}function ef(a,b,c){return{instance:a,listener:b,currentTarget:c}}function oe(a,b){for(var c=b+"Capture",d=[];null!==a;){var e=a,f=e.stateNode;5===e.tag&&null!==f&&(e=f,f=Ob(a,c),null!=f&&d.unshift(ef(a,f,e)),f=Ob(a,b),null!=f&&d.push(ef(a,f,e)));a=a.return}return d}function gf(a){if(null===a)return null;do a=a.return;while(a&&5!==a.tag);return a?a:null}
-function hf(a,b,c,d,e){for(var f=b._reactName,g=[];null!==c&&c!==d;){var h=c,k=h.alternate,l=h.stateNode;if(null!==k&&k===d)break;5===h.tag&&null!==l&&(h=l,e?(k=Ob(c,f),null!=k&&g.unshift(ef(c,k,h))):e||(k=Ob(c,f),null!=k&&g.push(ef(c,k,h))));c=c.return}0!==g.length&&a.push({event:b,listeners:g})}function jf(){}var kf=null,lf=null;function mf(a,b){switch(a){case "button":case "input":case "select":case "textarea":return!!b.autoFocus}return!1}
-function nf(a,b){return"textarea"===a||"option"===a||"noscript"===a||"string"===typeof b.children||"number"===typeof b.children||"object"===typeof b.dangerouslySetInnerHTML&&null!==b.dangerouslySetInnerHTML&&null!=b.dangerouslySetInnerHTML.__html}var of="function"===typeof setTimeout?setTimeout:void 0,pf="function"===typeof clearTimeout?clearTimeout:void 0;function qf(a){1===a.nodeType?a.textContent="":9===a.nodeType&&(a=a.body,null!=a&&(a.textContent=""))}
-function rf(a){for(;null!=a;a=a.nextSibling){var b=a.nodeType;if(1===b||3===b)break}return a}function sf(a){a=a.previousSibling;for(var b=0;a;){if(8===a.nodeType){var c=a.data;if("$"===c||"$!"===c||"$?"===c){if(0===b)return a;b--}else"/$"===c&&b++}a=a.previousSibling}return null}var tf=0;function uf(a){return{$$typeof:Ga,toString:a,valueOf:a}}var vf=Math.random().toString(36).slice(2),wf="__reactFiber$"+vf,xf="__reactProps$"+vf,ff="__reactContainer$"+vf,yf="__reactEvents$"+vf;
-function wc(a){var b=a[wf];if(b)return b;for(var c=a.parentNode;c;){if(b=c[ff]||c[wf]){c=b.alternate;if(null!==b.child||null!==c&&null!==c.child)for(a=sf(a);null!==a;){if(c=a[wf])return c;a=sf(a)}return b}a=c;c=a.parentNode}return null}function Cb(a){a=a[wf]||a[ff];return!a||5!==a.tag&&6!==a.tag&&13!==a.tag&&3!==a.tag?null:a}function ue(a){if(5===a.tag||6===a.tag)return a.stateNode;throw Error(y(33));}function Db(a){return a[xf]||null}
-function $e(a){var b=a[yf];void 0===b&&(b=a[yf]=new Set);return b}var zf=[],Af=-1;function Bf(a){return{current:a}}function H(a){0>Af||(a.current=zf[Af],zf[Af]=null,Af--)}function I(a,b){Af++;zf[Af]=a.current;a.current=b}var Cf={},M=Bf(Cf),N=Bf(!1),Df=Cf;
-function Ef(a,b){var c=a.type.contextTypes;if(!c)return Cf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function Ff(a){a=a.childContextTypes;return null!==a&&void 0!==a}function Gf(){H(N);H(M)}function Hf(a,b,c){if(M.current!==Cf)throw Error(y(168));I(M,b);I(N,c)}
-function If(a,b,c){var d=a.stateNode;a=b.childContextTypes;if("function"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(y(108,Ra(b)||"Unknown",e));return m({},c,d)}function Jf(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Cf;Df=M.current;I(M,a);I(N,N.current);return!0}function Kf(a,b,c){var d=a.stateNode;if(!d)throw Error(y(169));c?(a=If(a,b,Df),d.__reactInternalMemoizedMergedChildContext=a,H(N),H(M),I(M,a)):H(N);I(N,c)}
-var Lf=null,Mf=null,Nf=r.unstable_runWithPriority,Of=r.unstable_scheduleCallback,Pf=r.unstable_cancelCallback,Qf=r.unstable_shouldYield,Rf=r.unstable_requestPaint,Sf=r.unstable_now,Tf=r.unstable_getCurrentPriorityLevel,Uf=r.unstable_ImmediatePriority,Vf=r.unstable_UserBlockingPriority,Wf=r.unstable_NormalPriority,Xf=r.unstable_LowPriority,Yf=r.unstable_IdlePriority,Zf={},$f=void 0!==Rf?Rf:function(){},ag=null,bg=null,cg=!1,dg=Sf(),O=1E4>dg?Sf:function(){return Sf()-dg};
-function eg(){switch(Tf()){case Uf:return 99;case Vf:return 98;case Wf:return 97;case Xf:return 96;case Yf:return 95;default:throw Error(y(332));}}function fg(a){switch(a){case 99:return Uf;case 98:return Vf;case 97:return Wf;case 96:return Xf;case 95:return Yf;default:throw Error(y(332));}}function gg(a,b){a=fg(a);return Nf(a,b)}function hg(a,b,c){a=fg(a);return Of(a,b,c)}function ig(){if(null!==bg){var a=bg;bg=null;Pf(a)}jg()}
-function jg(){if(!cg&&null!==ag){cg=!0;var a=0;try{var b=ag;gg(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});ag=null}catch(c){throw null!==ag&&(ag=ag.slice(a+1)),Of(Uf,ig),c;}finally{cg=!1}}}var kg=ra.ReactCurrentBatchConfig;function lg(a,b){if(a&&a.defaultProps){b=m({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}var mg=Bf(null),ng=null,og=null,pg=null;function qg(){pg=og=ng=null}
-function rg(a){var b=mg.current;H(mg);a.type._context._currentValue=b}function sg(a,b){for(;null!==a;){var c=a.alternate;if((a.childLanes&b)===b)if(null===c||(c.childLanes&b)===b)break;else c.childLanes|=b;else a.childLanes|=b,null!==c&&(c.childLanes|=b);a=a.return}}function tg(a,b){ng=a;pg=og=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(ug=!0),a.firstContext=null)}
-function vg(a,b){if(pg!==a&&!1!==b&&0!==b){if("number"!==typeof b||1073741823===b)pg=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===og){if(null===ng)throw Error(y(308));og=b;ng.dependencies={lanes:0,firstContext:b,responders:null}}else og=og.next=b}return a._currentValue}var wg=!1;function xg(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}
-function yg(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function zg(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}function Ag(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}
-function Bg(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=
-b;c.lastBaseUpdate=b}
-function Cg(a,b,c,d){var e=a.updateQueue;wg=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var n=a.alternate;if(null!==n){n=n.updateQueue;var A=n.lastBaseUpdate;A!==g&&(null===A?n.firstBaseUpdate=l:A.next=l,n.lastBaseUpdate=k)}}if(null!==f){A=e.baseState;g=0;n=l=k=null;do{h=f.lane;var p=f.eventTime;if((d&h)===h){null!==n&&(n=n.next={eventTime:p,lane:0,tag:f.tag,payload:f.payload,callback:f.callback,
-next:null});a:{var C=a,x=f;h=b;p=c;switch(x.tag){case 1:C=x.payload;if("function"===typeof C){A=C.call(p,A,h);break a}A=C;break a;case 3:C.flags=C.flags&-4097|64;case 0:C=x.payload;h="function"===typeof C?C.call(p,A,h):C;if(null===h||void 0===h)break a;A=m({},A,h);break a;case 2:wg=!0}}null!==f.callback&&(a.flags|=32,h=e.effects,null===h?e.effects=[f]:h.push(f))}else p={eventTime:p,lane:h,tag:f.tag,payload:f.payload,callback:f.callback,next:null},null===n?(l=n=p,k=A):n=n.next=p,g|=h;f=f.next;if(null===
-f)if(h=e.shared.pending,null===h)break;else f=h.next,h.next=null,e.lastBaseUpdate=h,e.shared.pending=null}while(1);null===n&&(k=A);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=n;Dg|=g;a.lanes=g;a.memoizedState=A}}function Eg(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=c;if("function"!==typeof e)throw Error(y(191,e));e.call(d)}}}var Fg=(new aa.Component).refs;
-function Gg(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:m({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}
-var Kg={isMounted:function(a){return(a=a._reactInternals)?Zb(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternals;var d=Hg(),e=Ig(a),f=zg(d,e);f.payload=b;void 0!==c&&null!==c&&(f.callback=c);Ag(a,f);Jg(a,e,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternals;var d=Hg(),e=Ig(a),f=zg(d,e);f.tag=1;f.payload=b;void 0!==c&&null!==c&&(f.callback=c);Ag(a,f);Jg(a,e,d)},enqueueForceUpdate:function(a,b){a=a._reactInternals;var c=Hg(),d=Ig(a),e=zg(c,d);e.tag=2;void 0!==b&&null!==b&&(e.callback=
-b);Ag(a,e);Jg(a,d,c)}};function Lg(a,b,c,d,e,f,g){a=a.stateNode;return"function"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!Je(c,d)||!Je(e,f):!0}
-function Mg(a,b,c){var d=!1,e=Cf;var f=b.contextType;"object"===typeof f&&null!==f?f=vg(f):(e=Ff(b)?Df:M.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Ef(a,e):Cf);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=Kg;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}
-function Ng(a,b,c,d){a=b.state;"function"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);"function"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&Kg.enqueueReplaceState(b,b.state,null)}
-function Og(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=Fg;xg(a);var f=b.contextType;"object"===typeof f&&null!==f?e.context=vg(f):(f=Ff(b)?Df:M.current,e.context=Ef(a,f));Cg(a,c,e,d);e.state=a.memoizedState;f=b.getDerivedStateFromProps;"function"===typeof f&&(Gg(a,b,f,c),e.state=a.memoizedState);"function"===typeof b.getDerivedStateFromProps||"function"===typeof e.getSnapshotBeforeUpdate||"function"!==typeof e.UNSAFE_componentWillMount&&"function"!==typeof e.componentWillMount||
-(b=e.state,"function"===typeof e.componentWillMount&&e.componentWillMount(),"function"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&Kg.enqueueReplaceState(e,e.state,null),Cg(a,c,e,d),e.state=a.memoizedState);"function"===typeof e.componentDidMount&&(a.flags|=4)}var Pg=Array.isArray;
-function Qg(a,b,c){a=c.ref;if(null!==a&&"function"!==typeof a&&"object"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(y(309));var d=c.stateNode}if(!d)throw Error(y(147,a));var e=""+a;if(null!==b&&null!==b.ref&&"function"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===Fg&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if("string"!==typeof a)throw Error(y(284));if(!c._owner)throw Error(y(290,a));}return a}
-function Rg(a,b){if("textarea"!==a.type)throw Error(y(31,"[object Object]"===Object.prototype.toString.call(b)?"object with keys {"+Object.keys(b).join(", ")+"}":b));}
-function Sg(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.flags=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Tg(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.flags=2,
-c):d;b.flags=2;return c}function g(b){a&&null===b.alternate&&(b.flags=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Ug(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props),d.ref=Qg(a,b,c),d.return=a,d;d=Vg(c.type,c.key,c.props,null,a.mode,d);d.ref=Qg(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=
-Wg(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function n(a,b,c,d,f){if(null===b||7!==b.tag)return b=Xg(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function A(a,b,c){if("string"===typeof b||"number"===typeof b)return b=Ug(""+b,a.mode,c),b.return=a,b;if("object"===typeof b&&null!==b){switch(b.$$typeof){case sa:return c=Vg(b.type,b.key,b.props,null,a.mode,c),c.ref=Qg(a,null,b),c.return=a,c;case ta:return b=Wg(b,a.mode,c),b.return=a,b}if(Pg(b)||La(b))return b=Xg(b,
-a.mode,c,null),b.return=a,b;Rg(a,b)}return null}function p(a,b,c,d){var e=null!==b?b.key:null;if("string"===typeof c||"number"===typeof c)return null!==e?null:h(a,b,""+c,d);if("object"===typeof c&&null!==c){switch(c.$$typeof){case sa:return c.key===e?c.type===ua?n(a,b,c.props.children,d,e):k(a,b,c,d):null;case ta:return c.key===e?l(a,b,c,d):null}if(Pg(c)||La(c))return null!==e?null:n(a,b,c,d,null);Rg(a,c)}return null}function C(a,b,c,d,e){if("string"===typeof d||"number"===typeof d)return a=a.get(c)||
-null,h(b,a,""+d,e);if("object"===typeof d&&null!==d){switch(d.$$typeof){case sa:return a=a.get(null===d.key?c:d.key)||null,d.type===ua?n(b,a,d.props.children,e,d.key):k(b,a,d,e);case ta:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e)}if(Pg(d)||La(d))return a=a.get(c)||null,n(b,a,d,e,null);Rg(b,d)}return null}function x(e,g,h,k){for(var l=null,t=null,u=g,z=g=0,q=null;null!==u&&z<h.length;z++){u.index>z?(q=u,u=null):q=u.sibling;var n=p(e,u,h[z],k);if(null===n){null===u&&(u=q);break}a&&u&&null===
-n.alternate&&b(e,u);g=f(n,g,z);null===t?l=n:t.sibling=n;t=n;u=q}if(z===h.length)return c(e,u),l;if(null===u){for(;z<h.length;z++)u=A(e,h[z],k),null!==u&&(g=f(u,g,z),null===t?l=u:t.sibling=u,t=u);return l}for(u=d(e,u);z<h.length;z++)q=C(u,e,z,h[z],k),null!==q&&(a&&null!==q.alternate&&u.delete(null===q.key?z:q.key),g=f(q,g,z),null===t?l=q:t.sibling=q,t=q);a&&u.forEach(function(a){return b(e,a)});return l}function w(e,g,h,k){var l=La(h);if("function"!==typeof l)throw Error(y(150));h=l.call(h);if(null==
-h)throw Error(y(151));for(var t=l=null,u=g,z=g=0,q=null,n=h.next();null!==u&&!n.done;z++,n=h.next()){u.index>z?(q=u,u=null):q=u.sibling;var w=p(e,u,n.value,k);if(null===w){null===u&&(u=q);break}a&&u&&null===w.alternate&&b(e,u);g=f(w,g,z);null===t?l=w:t.sibling=w;t=w;u=q}if(n.done)return c(e,u),l;if(null===u){for(;!n.done;z++,n=h.next())n=A(e,n.value,k),null!==n&&(g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);return l}for(u=d(e,u);!n.done;z++,n=h.next())n=C(u,e,z,n.value,k),null!==n&&(a&&null!==n.alternate&&
-u.delete(null===n.key?z:n.key),g=f(n,g,z),null===t?l=n:t.sibling=n,t=n);a&&u.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k="object"===typeof f&&null!==f&&f.type===ua&&null===f.key;k&&(f=f.props.children);var l="object"===typeof f&&null!==f;if(l)switch(f.$$typeof){case sa:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===ua){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,k.sibling);
-d=e(k,f.props);d.ref=Qg(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===ua?(d=Xg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Vg(f.type,f.key,f.props,null,a.mode,h),h.ref=Qg(a,d,f),h.return=a,a=h)}return g(a);case ta:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=
-Wg(f,a.mode,h);d.return=a;a=d}return g(a)}if("string"===typeof f||"number"===typeof f)return f=""+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Ug(f,a.mode,h),d.return=a,a=d),g(a);if(Pg(f))return x(a,d,f,h);if(La(f))return w(a,d,f,h);l&&Rg(a,f);if("undefined"===typeof f&&!k)switch(a.tag){case 1:case 22:case 0:case 11:case 15:throw Error(y(152,Ra(a.type)||"Component"));}return c(a,d)}}var Yg=Sg(!0),Zg=Sg(!1),$g={},ah=Bf($g),bh=Bf($g),ch=Bf($g);
-function dh(a){if(a===$g)throw Error(y(174));return a}function eh(a,b){I(ch,b);I(bh,a);I(ah,$g);a=b.nodeType;switch(a){case 9:case 11:b=(b=b.documentElement)?b.namespaceURI:mb(null,"");break;default:a=8===a?b.parentNode:b,b=a.namespaceURI||null,a=a.tagName,b=mb(b,a)}H(ah);I(ah,b)}function fh(){H(ah);H(bh);H(ch)}function gh(a){dh(ch.current);var b=dh(ah.current);var c=mb(b,a.type);b!==c&&(I(bh,a),I(ah,c))}function hh(a){bh.current===a&&(H(ah),H(bh))}var P=Bf(0);
-function ih(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||"$?"===c.data||"$!"===c.data))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var jh=null,kh=null,lh=!1;
-function mh(a,b){var c=nh(5,null,null,0);c.elementType="DELETED";c.type="DELETED";c.stateNode=b;c.return=a;c.flags=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function oh(a,b){switch(a.tag){case 5:var c=a.type;b=1!==b.nodeType||c.toLowerCase()!==b.nodeName.toLowerCase()?null:b;return null!==b?(a.stateNode=b,!0):!1;case 6:return b=""===a.pendingProps||3!==b.nodeType?null:b,null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}
-function ph(a){if(lh){var b=kh;if(b){var c=b;if(!oh(a,b)){b=rf(c.nextSibling);if(!b||!oh(a,b)){a.flags=a.flags&-1025|2;lh=!1;jh=a;return}mh(jh,c)}jh=a;kh=rf(b.firstChild)}else a.flags=a.flags&-1025|2,lh=!1,jh=a}}function qh(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;jh=a}
-function rh(a){if(a!==jh)return!1;if(!lh)return qh(a),lh=!0,!1;var b=a.type;if(5!==a.tag||"head"!==b&&"body"!==b&&!nf(b,a.memoizedProps))for(b=kh;b;)mh(a,b),b=rf(b.nextSibling);qh(a);if(13===a.tag){a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(y(317));a:{a=a.nextSibling;for(b=0;a;){if(8===a.nodeType){var c=a.data;if("/$"===c){if(0===b){kh=rf(a.nextSibling);break a}b--}else"$"!==c&&"$!"!==c&&"$?"!==c||b++}a=a.nextSibling}kh=null}}else kh=jh?rf(a.stateNode.nextSibling):null;return!0}
-function sh(){kh=jh=null;lh=!1}var th=[];function uh(){for(var a=0;a<th.length;a++)th[a]._workInProgressVersionPrimary=null;th.length=0}var vh=ra.ReactCurrentDispatcher,wh=ra.ReactCurrentBatchConfig,xh=0,R=null,S=null,T=null,yh=!1,zh=!1;function Ah(){throw Error(y(321));}function Bh(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!He(a[c],b[c]))return!1;return!0}
-function Ch(a,b,c,d,e,f){xh=f;R=b;b.memoizedState=null;b.updateQueue=null;b.lanes=0;vh.current=null===a||null===a.memoizedState?Dh:Eh;a=c(d,e);if(zh){f=0;do{zh=!1;if(!(25>f))throw Error(y(301));f+=1;T=S=null;b.updateQueue=null;vh.current=Fh;a=c(d,e)}while(zh)}vh.current=Gh;b=null!==S&&null!==S.next;xh=0;T=S=R=null;yh=!1;if(b)throw Error(y(300));return a}function Hh(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===T?R.memoizedState=T=a:T=T.next=a;return T}
-function Ih(){if(null===S){var a=R.alternate;a=null!==a?a.memoizedState:null}else a=S.next;var b=null===T?R.memoizedState:T.next;if(null!==b)T=b,S=a;else{if(null===a)throw Error(y(310));S=a;a={memoizedState:S.memoizedState,baseState:S.baseState,baseQueue:S.baseQueue,queue:S.queue,next:null};null===T?R.memoizedState=T=a:T=T.next=a}return T}function Jh(a,b){return"function"===typeof b?b(a):b}
-function Kh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=S,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.lane;if((xh&l)===l)null!==h&&(h=h.next={lane:0,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),d=k.eagerReducer===a?k.eagerState:a(d,k.action);else{var n={lane:l,action:k.action,eagerReducer:k.eagerReducer,
-eagerState:k.eagerState,next:null};null===h?(g=h=n,f=d):h=h.next=n;R.lanes|=l;Dg|=l}k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;He(d,b.memoizedState)||(ug=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}
-function Lh(a){var b=Ih(),c=b.queue;if(null===c)throw Error(y(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);He(f,b.memoizedState)||(ug=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}
-function Mh(a,b,c){var d=b._getVersion;d=d(b._source);var e=b._workInProgressVersionPrimary;if(null!==e)a=e===d;else if(a=a.mutableReadLanes,a=(xh&a)===a)b._workInProgressVersionPrimary=d,th.push(b);if(a)return c(b._source);th.push(b);throw Error(y(350));}
-function Nh(a,b,c,d){var e=U;if(null===e)throw Error(y(349));var f=b._getVersion,g=f(b._source),h=vh.current,k=h.useState(function(){return Mh(e,b,c)}),l=k[1],n=k[0];k=T;var A=a.memoizedState,p=A.refs,C=p.getSnapshot,x=A.source;A=A.subscribe;var w=R;a.memoizedState={refs:p,source:b,subscribe:d};h.useEffect(function(){p.getSnapshot=c;p.setSnapshot=l;var a=f(b._source);if(!He(g,a)){a=c(b._source);He(n,a)||(l(a),a=Ig(w),e.mutableReadLanes|=a&e.pendingLanes);a=e.mutableReadLanes;e.entangledLanes|=a;for(var d=
-e.entanglements,h=a;0<h;){var k=31-Vc(h),v=1<<k;d[k]|=a;h&=~v}}},[c,b,d]);h.useEffect(function(){return d(b._source,function(){var a=p.getSnapshot,c=p.setSnapshot;try{c(a(b._source));var d=Ig(w);e.mutableReadLanes|=d&e.pendingLanes}catch(q){c(function(){throw q;})}})},[b,d]);He(C,c)&&He(x,b)&&He(A,d)||(a={pending:null,dispatch:null,lastRenderedReducer:Jh,lastRenderedState:n},a.dispatch=l=Oh.bind(null,R,a),k.queue=a,k.baseQueue=null,n=Mh(e,b,c),k.memoizedState=k.baseState=n);return n}
-function Ph(a,b,c){var d=Ih();return Nh(d,a,b,c)}function Qh(a){var b=Hh();"function"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:Jh,lastRenderedState:a};a=a.dispatch=Oh.bind(null,R,a);return[b.memoizedState,a]}
-function Rh(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=R.updateQueue;null===b?(b={lastEffect:null},R.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}function Sh(a){var b=Hh();a={current:a};return b.memoizedState=a}function Th(){return Ih().memoizedState}function Uh(a,b,c,d){var e=Hh();R.flags|=a;e.memoizedState=Rh(1|b,c,void 0,void 0===d?null:d)}
-function Vh(a,b,c,d){var e=Ih();d=void 0===d?null:d;var f=void 0;if(null!==S){var g=S.memoizedState;f=g.destroy;if(null!==d&&Bh(d,g.deps)){Rh(b,c,f,d);return}}R.flags|=a;e.memoizedState=Rh(1|b,c,f,d)}function Wh(a,b){return Uh(516,4,a,b)}function Xh(a,b){return Vh(516,4,a,b)}function Yh(a,b){return Vh(4,2,a,b)}function Zh(a,b){if("function"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}
-function $h(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Vh(4,2,Zh.bind(null,b,a),c)}function ai(){}function bi(a,b){var c=Ih();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Bh(b,d[1]))return d[0];c.memoizedState=[a,b];return a}function ci(a,b){var c=Ih();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&Bh(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}
-function di(a,b){var c=eg();gg(98>c?98:c,function(){a(!0)});gg(97<c?97:c,function(){var c=wh.transition;wh.transition=1;try{a(!1),b()}finally{wh.transition=c}})}
-function Oh(a,b,c){var d=Hg(),e=Ig(a),f={lane:e,action:c,eagerReducer:null,eagerState:null,next:null},g=b.pending;null===g?f.next=f:(f.next=g.next,g.next=f);b.pending=f;g=a.alternate;if(a===R||null!==g&&g===R)zh=yh=!0;else{if(0===a.lanes&&(null===g||0===g.lanes)&&(g=b.lastRenderedReducer,null!==g))try{var h=b.lastRenderedState,k=g(h,c);f.eagerReducer=g;f.eagerState=k;if(He(k,h))return}catch(l){}finally{}Jg(a,e,d)}}
-var Gh={readContext:vg,useCallback:Ah,useContext:Ah,useEffect:Ah,useImperativeHandle:Ah,useLayoutEffect:Ah,useMemo:Ah,useReducer:Ah,useRef:Ah,useState:Ah,useDebugValue:Ah,useDeferredValue:Ah,useTransition:Ah,useMutableSource:Ah,useOpaqueIdentifier:Ah,unstable_isNewReconciler:!1},Dh={readContext:vg,useCallback:function(a,b){Hh().memoizedState=[a,void 0===b?null:b];return a},useContext:vg,useEffect:Wh,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Uh(4,2,Zh.bind(null,
-b,a),c)},useLayoutEffect:function(a,b){return Uh(4,2,a,b)},useMemo:function(a,b){var c=Hh();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Hh();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={pending:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=Oh.bind(null,R,a);return[d.memoizedState,a]},useRef:Sh,useState:Qh,useDebugValue:ai,useDeferredValue:function(a){var b=Qh(a),c=b[0],d=b[1];Wh(function(){var b=wh.transition;
-wh.transition=1;try{d(a)}finally{wh.transition=b}},[a]);return c},useTransition:function(){var a=Qh(!1),b=a[0];a=di.bind(null,a[1]);Sh(a);return[a,b]},useMutableSource:function(a,b,c){var d=Hh();d.memoizedState={refs:{getSnapshot:b,setSnapshot:null},source:a,subscribe:c};return Nh(d,a,b,c)},useOpaqueIdentifier:function(){if(lh){var a=!1,b=uf(function(){a||(a=!0,c("r:"+(tf++).toString(36)));throw Error(y(355));}),c=Qh(b)[1];0===(R.mode&2)&&(R.flags|=516,Rh(5,function(){c("r:"+(tf++).toString(36))},
-void 0,null));return b}b="r:"+(tf++).toString(36);Qh(b);return b},unstable_isNewReconciler:!1},Eh={readContext:vg,useCallback:bi,useContext:vg,useEffect:Xh,useImperativeHandle:$h,useLayoutEffect:Yh,useMemo:ci,useReducer:Kh,useRef:Th,useState:function(){return Kh(Jh)},useDebugValue:ai,useDeferredValue:function(a){var b=Kh(Jh),c=b[0],d=b[1];Xh(function(){var b=wh.transition;wh.transition=1;try{d(a)}finally{wh.transition=b}},[a]);return c},useTransition:function(){var a=Kh(Jh)[0];return[Th().current,
-a]},useMutableSource:Ph,useOpaqueIdentifier:function(){return Kh(Jh)[0]},unstable_isNewReconciler:!1},Fh={readContext:vg,useCallback:bi,useContext:vg,useEffect:Xh,useImperativeHandle:$h,useLayoutEffect:Yh,useMemo:ci,useReducer:Lh,useRef:Th,useState:function(){return Lh(Jh)},useDebugValue:ai,useDeferredValue:function(a){var b=Lh(Jh),c=b[0],d=b[1];Xh(function(){var b=wh.transition;wh.transition=1;try{d(a)}finally{wh.transition=b}},[a]);return c},useTransition:function(){var a=Lh(Jh)[0];return[Th().current,
-a]},useMutableSource:Ph,useOpaqueIdentifier:function(){return Lh(Jh)[0]},unstable_isNewReconciler:!1},ei=ra.ReactCurrentOwner,ug=!1;function fi(a,b,c,d){b.child=null===a?Zg(b,null,c,d):Yg(b,a.child,c,d)}function gi(a,b,c,d,e){c=c.render;var f=b.ref;tg(b,e);d=Ch(a,b,c,d,f,e);if(null!==a&&!ug)return b.updateQueue=a.updateQueue,b.flags&=-517,a.lanes&=~e,hi(a,b,e);b.flags|=1;fi(a,b,d,e);return b.child}
-function ii(a,b,c,d,e,f){if(null===a){var g=c.type;if("function"===typeof g&&!ji(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,ki(a,b,g,d,e,f);a=Vg(c.type,null,d,b,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(0===(e&f)&&(e=g.memoizedProps,c=c.compare,c=null!==c?c:Je,c(e,d)&&a.ref===b.ref))return hi(a,b,f);b.flags|=1;a=Tg(g,d);a.ref=b.ref;a.return=b;return b.child=a}
-function ki(a,b,c,d,e,f){if(null!==a&&Je(a.memoizedProps,d)&&a.ref===b.ref)if(ug=!1,0!==(f&e))0!==(a.flags&16384)&&(ug=!0);else return b.lanes=a.lanes,hi(a,b,f);return li(a,b,c,d,f)}
-function mi(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if("hidden"===d.mode||"unstable-defer-without-hiding"===d.mode)if(0===(b.mode&4))b.memoizedState={baseLanes:0},ni(b,c);else if(0!==(c&1073741824))b.memoizedState={baseLanes:0},ni(b,null!==f?f.baseLanes:c);else return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a},ni(b,a),null;else null!==f?(d=f.baseLanes|c,b.memoizedState=null):d=c,ni(b,d);fi(a,b,e,c);return b.child}
-function oi(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=128}function li(a,b,c,d,e){var f=Ff(c)?Df:M.current;f=Ef(b,f);tg(b,e);c=Ch(a,b,c,d,f,e);if(null!==a&&!ug)return b.updateQueue=a.updateQueue,b.flags&=-517,a.lanes&=~e,hi(a,b,e);b.flags|=1;fi(a,b,c,e);return b.child}
-function pi(a,b,c,d,e){if(Ff(c)){var f=!0;Jf(b)}else f=!1;tg(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),Mg(b,c,d),Og(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;"object"===typeof l&&null!==l?l=vg(l):(l=Ff(c)?Df:M.current,l=Ef(b,l));var n=c.getDerivedStateFromProps,A="function"===typeof n||"function"===typeof g.getSnapshotBeforeUpdate;A||"function"!==typeof g.UNSAFE_componentWillReceiveProps&&
-"function"!==typeof g.componentWillReceiveProps||(h!==d||k!==l)&&Ng(b,g,d,l);wg=!1;var p=b.memoizedState;g.state=p;Cg(b,d,g,e);k=b.memoizedState;h!==d||p!==k||N.current||wg?("function"===typeof n&&(Gg(b,c,n,d),k=b.memoizedState),(h=wg||Lg(b,c,h,d,p,k,l))?(A||"function"!==typeof g.UNSAFE_componentWillMount&&"function"!==typeof g.componentWillMount||("function"===typeof g.componentWillMount&&g.componentWillMount(),"function"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),"function"===
-typeof g.componentDidMount&&(b.flags|=4)):("function"===typeof g.componentDidMount&&(b.flags|=4),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):("function"===typeof g.componentDidMount&&(b.flags|=4),d=!1)}else{g=b.stateNode;yg(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:lg(b.type,h);g.props=l;A=b.pendingProps;p=g.context;k=c.contextType;"object"===typeof k&&null!==k?k=vg(k):(k=Ff(c)?Df:M.current,k=Ef(b,k));var C=c.getDerivedStateFromProps;(n="function"===typeof C||
-"function"===typeof g.getSnapshotBeforeUpdate)||"function"!==typeof g.UNSAFE_componentWillReceiveProps&&"function"!==typeof g.componentWillReceiveProps||(h!==A||p!==k)&&Ng(b,g,d,k);wg=!1;p=b.memoizedState;g.state=p;Cg(b,d,g,e);var x=b.memoizedState;h!==A||p!==x||N.current||wg?("function"===typeof C&&(Gg(b,c,C,d),x=b.memoizedState),(l=wg||Lg(b,c,l,d,p,x,k))?(n||"function"!==typeof g.UNSAFE_componentWillUpdate&&"function"!==typeof g.componentWillUpdate||("function"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,
-x,k),"function"===typeof g.UNSAFE_componentWillUpdate&&g.UNSAFE_componentWillUpdate(d,x,k)),"function"===typeof g.componentDidUpdate&&(b.flags|=4),"function"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=256)):("function"!==typeof g.componentDidUpdate||h===a.memoizedProps&&p===a.memoizedState||(b.flags|=4),"function"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&p===a.memoizedState||(b.flags|=256),b.memoizedProps=d,b.memoizedState=x),g.props=d,g.state=x,g.context=k,d=l):("function"!==typeof g.componentDidUpdate||
-h===a.memoizedProps&&p===a.memoizedState||(b.flags|=4),"function"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&p===a.memoizedState||(b.flags|=256),d=!1)}return qi(a,b,c,d,f,e)}
-function qi(a,b,c,d,e,f){oi(a,b);var g=0!==(b.flags&64);if(!d&&!g)return e&&Kf(b,c,!1),hi(a,b,f);d=b.stateNode;ei.current=b;var h=g&&"function"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=Yg(b,a.child,null,f),b.child=Yg(b,null,h,f)):fi(a,b,h,f);b.memoizedState=d.state;e&&Kf(b,c,!0);return b.child}function ri(a){var b=a.stateNode;b.pendingContext?Hf(a,b.pendingContext,b.pendingContext!==b.context):b.context&&Hf(a,b.context,!1);eh(a,b.containerInfo)}
-var si={dehydrated:null,retryLane:0};
-function ti(a,b,c){var d=b.pendingProps,e=P.current,f=!1,g;(g=0!==(b.flags&64))||(g=null!==a&&null===a.memoizedState?!1:0!==(e&2));g?(f=!0,b.flags&=-65):null!==a&&null===a.memoizedState||void 0===d.fallback||!0===d.unstable_avoidThisFallback||(e|=1);I(P,e&1);if(null===a){void 0!==d.fallback&&ph(b);a=d.children;e=d.fallback;if(f)return a=ui(b,a,e,c),b.child.memoizedState={baseLanes:c},b.memoizedState=si,a;if("number"===typeof d.unstable_expectedLoadTime)return a=ui(b,a,e,c),b.child.memoizedState={baseLanes:c},
-b.memoizedState=si,b.lanes=33554432,a;c=vi({mode:"visible",children:a},b.mode,c,null);c.return=b;return b.child=c}if(null!==a.memoizedState){if(f)return d=wi(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?{baseLanes:c}:{baseLanes:e.baseLanes|c},f.childLanes=a.childLanes&~c,b.memoizedState=si,d;c=xi(a,b,d.children,c);b.memoizedState=null;return c}if(f)return d=wi(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?{baseLanes:c}:
-{baseLanes:e.baseLanes|c},f.childLanes=a.childLanes&~c,b.memoizedState=si,d;c=xi(a,b,d.children,c);b.memoizedState=null;return c}function ui(a,b,c,d){var e=a.mode,f=a.child;b={mode:"hidden",children:b};0===(e&2)&&null!==f?(f.childLanes=0,f.pendingProps=b):f=vi(b,e,0,null);c=Xg(c,e,d,null);f.return=a;c.return=a;f.sibling=c;a.child=f;return c}
-function xi(a,b,c,d){var e=a.child;a=e.sibling;c=Tg(e,{mode:"visible",children:c});0===(b.mode&2)&&(c.lanes=d);c.return=b;c.sibling=null;null!==a&&(a.nextEffect=null,a.flags=8,b.firstEffect=b.lastEffect=a);return b.child=c}
-function wi(a,b,c,d,e){var f=b.mode,g=a.child;a=g.sibling;var h={mode:"hidden",children:c};0===(f&2)&&b.child!==g?(c=b.child,c.childLanes=0,c.pendingProps=h,g=c.lastEffect,null!==g?(b.firstEffect=c.firstEffect,b.lastEffect=g,g.nextEffect=null):b.firstEffect=b.lastEffect=null):c=Tg(g,h);null!==a?d=Tg(a,d):(d=Xg(d,f,e,null),d.flags|=2);d.return=b;c.return=b;c.sibling=d;b.child=c;return d}function yi(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);sg(a.return,b)}
-function zi(a,b,c,d,e,f){var g=a.memoizedState;null===g?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e,lastEffect:f}:(g.isBackwards=b,g.rendering=null,g.renderingStartTime=0,g.last=d,g.tail=c,g.tailMode=e,g.lastEffect=f)}
-function Ai(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;fi(a,b,d.children,c);d=P.current;if(0!==(d&2))d=d&1|2,b.flags|=64;else{if(null!==a&&0!==(a.flags&64))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&yi(a,c);else if(19===a.tag)yi(a,c);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}I(P,d);if(0===(b.mode&2))b.memoizedState=
-null;else switch(e){case "forwards":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===ih(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);zi(b,!1,e,c,f,b.lastEffect);break;case "backwards":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===ih(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}zi(b,!0,c,null,f,b.lastEffect);break;case "together":zi(b,!1,null,null,void 0,b.lastEffect);break;default:b.memoizedState=null}return b.child}
-function hi(a,b,c){null!==a&&(b.dependencies=a.dependencies);Dg|=b.lanes;if(0!==(c&b.childLanes)){if(null!==a&&b.child!==a.child)throw Error(y(153));if(null!==b.child){a=b.child;c=Tg(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Tg(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}return null}var Bi,Ci,Di,Ei;
-Bi=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)a.appendChild(c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}};Ci=function(){};
-Di=function(a,b,c,d){var e=a.memoizedProps;if(e!==d){a=b.stateNode;dh(ah.current);var f=null;switch(c){case "input":e=Ya(a,e);d=Ya(a,d);f=[];break;case "option":e=eb(a,e);d=eb(a,d);f=[];break;case "select":e=m({},e,{value:void 0});d=m({},d,{value:void 0});f=[];break;case "textarea":e=gb(a,e);d=gb(a,d);f=[];break;default:"function"!==typeof e.onClick&&"function"===typeof d.onClick&&(a.onclick=jf)}vb(c,d);var g;c=null;for(l in e)if(!d.hasOwnProperty(l)&&e.hasOwnProperty(l)&&null!=e[l])if("style"===
-l){var h=e[l];for(g in h)h.hasOwnProperty(g)&&(c||(c={}),c[g]="")}else"dangerouslySetInnerHTML"!==l&&"children"!==l&&"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&"autoFocus"!==l&&(ca.hasOwnProperty(l)?f||(f=[]):(f=f||[]).push(l,null));for(l in d){var k=d[l];h=null!=e?e[l]:void 0;if(d.hasOwnProperty(l)&&k!==h&&(null!=k||null!=h))if("style"===l)if(h){for(g in h)!h.hasOwnProperty(g)||k&&k.hasOwnProperty(g)||(c||(c={}),c[g]="");for(g in k)k.hasOwnProperty(g)&&h[g]!==k[g]&&(c||
-(c={}),c[g]=k[g])}else c||(f||(f=[]),f.push(l,c)),c=k;else"dangerouslySetInnerHTML"===l?(k=k?k.__html:void 0,h=h?h.__html:void 0,null!=k&&h!==k&&(f=f||[]).push(l,k)):"children"===l?"string"!==typeof k&&"number"!==typeof k||(f=f||[]).push(l,""+k):"suppressContentEditableWarning"!==l&&"suppressHydrationWarning"!==l&&(ca.hasOwnProperty(l)?(null!=k&&"onScroll"===l&&G("scroll",a),f||h===k||(f=[])):"object"===typeof k&&null!==k&&k.$$typeof===Ga?k.toString():(f=f||[]).push(l,k))}c&&(f=f||[]).push("style",
-c);var l=f;if(b.updateQueue=l)b.flags|=4}};Ei=function(a,b,c,d){c!==d&&(b.flags|=4)};function Fi(a,b){if(!lh)switch(a.tailMode){case "hidden":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case "collapsed":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}
-function Gi(a,b,c){var d=b.pendingProps;switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return Ff(b.type)&&Gf(),null;case 3:fh();H(N);H(M);uh();d=b.stateNode;d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)rh(b)?b.flags|=4:d.hydrate||(b.flags|=256);Ci(b);return null;case 5:hh(b);var e=dh(ch.current);c=b.type;if(null!==a&&null!=b.stateNode)Di(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=128);else{if(!d){if(null===
-b.stateNode)throw Error(y(166));return null}a=dh(ah.current);if(rh(b)){d=b.stateNode;c=b.type;var f=b.memoizedProps;d[wf]=b;d[xf]=f;switch(c){case "dialog":G("cancel",d);G("close",d);break;case "iframe":case "object":case "embed":G("load",d);break;case "video":case "audio":for(a=0;a<Xe.length;a++)G(Xe[a],d);break;case "source":G("error",d);break;case "img":case "image":case "link":G("error",d);G("load",d);break;case "details":G("toggle",d);break;case "input":Za(d,f);G("invalid",d);break;case "select":d._wrapperState=
-{wasMultiple:!!f.multiple};G("invalid",d);break;case "textarea":hb(d,f),G("invalid",d)}vb(c,f);a=null;for(var g in f)f.hasOwnProperty(g)&&(e=f[g],"children"===g?"string"===typeof e?d.textContent!==e&&(a=["children",e]):"number"===typeof e&&d.textContent!==""+e&&(a=["children",""+e]):ca.hasOwnProperty(g)&&null!=e&&"onScroll"===g&&G("scroll",d));switch(c){case "input":Va(d);cb(d,f,!0);break;case "textarea":Va(d);jb(d);break;case "select":case "option":break;default:"function"===typeof f.onClick&&(d.onclick=
-jf)}d=a;b.updateQueue=d;null!==d&&(b.flags|=4)}else{g=9===e.nodeType?e:e.ownerDocument;a===kb.html&&(a=lb(c));a===kb.html?"script"===c?(a=g.createElement("div"),a.innerHTML="<script>\x3c/script>",a=a.removeChild(a.firstChild)):"string"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),"select"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[wf]=b;a[xf]=d;Bi(a,b,!1,!1);b.stateNode=a;g=wb(c,d);switch(c){case "dialog":G("cancel",a);G("close",a);
-e=d;break;case "iframe":case "object":case "embed":G("load",a);e=d;break;case "video":case "audio":for(e=0;e<Xe.length;e++)G(Xe[e],a);e=d;break;case "source":G("error",a);e=d;break;case "img":case "image":case "link":G("error",a);G("load",a);e=d;break;case "details":G("toggle",a);e=d;break;case "input":Za(a,d);e=Ya(a,d);G("invalid",a);break;case "option":e=eb(a,d);break;case "select":a._wrapperState={wasMultiple:!!d.multiple};e=m({},d,{value:void 0});G("invalid",a);break;case "textarea":hb(a,d);e=
-gb(a,d);G("invalid",a);break;default:e=d}vb(c,e);var h=e;for(f in h)if(h.hasOwnProperty(f)){var k=h[f];"style"===f?tb(a,k):"dangerouslySetInnerHTML"===f?(k=k?k.__html:void 0,null!=k&&ob(a,k)):"children"===f?"string"===typeof k?("textarea"!==c||""!==k)&&pb(a,k):"number"===typeof k&&pb(a,""+k):"suppressContentEditableWarning"!==f&&"suppressHydrationWarning"!==f&&"autoFocus"!==f&&(ca.hasOwnProperty(f)?null!=k&&"onScroll"===f&&G("scroll",a):null!=k&&qa(a,f,k,g))}switch(c){case "input":Va(a);cb(a,d,!1);
-break;case "textarea":Va(a);jb(a);break;case "option":null!=d.value&&a.setAttribute("value",""+Sa(d.value));break;case "select":a.multiple=!!d.multiple;f=d.value;null!=f?fb(a,!!d.multiple,f,!1):null!=d.defaultValue&&fb(a,!!d.multiple,d.defaultValue,!0);break;default:"function"===typeof e.onClick&&(a.onclick=jf)}mf(c,d)&&(b.flags|=4)}null!==b.ref&&(b.flags|=128)}return null;case 6:if(a&&null!=b.stateNode)Ei(a,b,a.memoizedProps,d);else{if("string"!==typeof d&&null===b.stateNode)throw Error(y(166));
-c=dh(ch.current);dh(ah.current);rh(b)?(d=b.stateNode,c=b.memoizedProps,d[wf]=b,d.nodeValue!==c&&(b.flags|=4)):(d=(9===c.nodeType?c:c.ownerDocument).createTextNode(d),d[wf]=b,b.stateNode=d)}return null;case 13:H(P);d=b.memoizedState;if(0!==(b.flags&64))return b.lanes=c,b;d=null!==d;c=!1;null===a?void 0!==b.memoizedProps.fallback&&rh(b):c=null!==a.memoizedState;if(d&&!c&&0!==(b.mode&2))if(null===a&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(P.current&1))0===V&&(V=3);else{if(0===V||3===V)V=
-4;null===U||0===(Dg&134217727)&&0===(Hi&134217727)||Ii(U,W)}if(d||c)b.flags|=4;return null;case 4:return fh(),Ci(b),null===a&&cf(b.stateNode.containerInfo),null;case 10:return rg(b),null;case 17:return Ff(b.type)&&Gf(),null;case 19:H(P);d=b.memoizedState;if(null===d)return null;f=0!==(b.flags&64);g=d.rendering;if(null===g)if(f)Fi(d,!1);else{if(0!==V||null!==a&&0!==(a.flags&64))for(a=b.child;null!==a;){g=ih(a);if(null!==g){b.flags|=64;Fi(d,!1);f=g.updateQueue;null!==f&&(b.updateQueue=f,b.flags|=4);
-null===d.lastEffect&&(b.firstEffect=null);b.lastEffect=d.lastEffect;d=c;for(c=b.child;null!==c;)f=c,a=d,f.flags&=2,f.nextEffect=null,f.firstEffect=null,f.lastEffect=null,g=f.alternate,null===g?(f.childLanes=0,f.lanes=a,f.child=null,f.memoizedProps=null,f.memoizedState=null,f.updateQueue=null,f.dependencies=null,f.stateNode=null):(f.childLanes=g.childLanes,f.lanes=g.lanes,f.child=g.child,f.memoizedProps=g.memoizedProps,f.memoizedState=g.memoizedState,f.updateQueue=g.updateQueue,f.type=g.type,a=g.dependencies,
-f.dependencies=null===a?null:{lanes:a.lanes,firstContext:a.firstContext}),c=c.sibling;I(P,P.current&1|2);return b.child}a=a.sibling}null!==d.tail&&O()>Ji&&(b.flags|=64,f=!0,Fi(d,!1),b.lanes=33554432)}else{if(!f)if(a=ih(g),null!==a){if(b.flags|=64,f=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Fi(d,!0),null===d.tail&&"hidden"===d.tailMode&&!g.alternate&&!lh)return b=b.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*O()-d.renderingStartTime>Ji&&1073741824!==c&&(b.flags|=
-64,f=!0,Fi(d,!1),b.lanes=33554432);d.isBackwards?(g.sibling=b.child,b.child=g):(c=d.last,null!==c?c.sibling=g:b.child=g,d.last=g)}return null!==d.tail?(c=d.tail,d.rendering=c,d.tail=c.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=O(),c.sibling=null,b=P.current,I(P,f?b&1|2:b&1),c):null;case 23:case 24:return Ki(),null!==a&&null!==a.memoizedState!==(null!==b.memoizedState)&&"unstable-defer-without-hiding"!==d.mode&&(b.flags|=4),null}throw Error(y(156,b.tag));}
-function Li(a){switch(a.tag){case 1:Ff(a.type)&&Gf();var b=a.flags;return b&4096?(a.flags=b&-4097|64,a):null;case 3:fh();H(N);H(M);uh();b=a.flags;if(0!==(b&64))throw Error(y(285));a.flags=b&-4097|64;return a;case 5:return hh(a),null;case 13:return H(P),b=a.flags,b&4096?(a.flags=b&-4097|64,a):null;case 19:return H(P),null;case 4:return fh(),null;case 10:return rg(a),null;case 23:case 24:return Ki(),null;default:return null}}
-function Mi(a,b){try{var c="",d=b;do c+=Qa(d),d=d.return;while(d);var e=c}catch(f){e="\nError generating stack: "+f.message+"\n"+f.stack}return{value:a,source:b,stack:e}}function Ni(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Oi="function"===typeof WeakMap?WeakMap:Map;function Pi(a,b,c){c=zg(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Qi||(Qi=!0,Ri=d);Ni(a,b)};return c}
-function Si(a,b,c){c=zg(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if("function"===typeof d){var e=b.value;c.payload=function(){Ni(a,b);return d(e)}}var f=a.stateNode;null!==f&&"function"===typeof f.componentDidCatch&&(c.callback=function(){"function"!==typeof d&&(null===Ti?Ti=new Set([this]):Ti.add(this),Ni(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:""})});return c}var Ui="function"===typeof WeakSet?WeakSet:Set;
-function Vi(a){var b=a.ref;if(null!==b)if("function"===typeof b)try{b(null)}catch(c){Wi(a,c)}else b.current=null}function Xi(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.flags&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:lg(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:b.flags&256&&qf(b.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(y(163));}
-function Yi(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{if(3===(a.tag&3)){var d=a.create;a.destroy=d()}a=a.next}while(a!==b)}b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{var e=a;d=e.next;e=e.tag;0!==(e&4)&&0!==(e&1)&&(Zi(c,a),$i(c,a));a=d}while(a!==b)}return;case 1:a=c.stateNode;c.flags&4&&(null===b?a.componentDidMount():(d=c.elementType===c.type?b.memoizedProps:lg(c.type,b.memoizedProps),a.componentDidUpdate(d,
-b.memoizedState,a.__reactInternalSnapshotBeforeUpdate)));b=c.updateQueue;null!==b&&Eg(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=c.child.stateNode;break;case 1:a=c.child.stateNode}Eg(c,b,a)}return;case 5:a=c.stateNode;null===b&&c.flags&4&&mf(c.type,c.memoizedProps)&&a.focus();return;case 6:return;case 4:return;case 12:return;case 13:null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&Cc(c))));
-return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(y(163));}
-function aj(a,b){for(var c=a;;){if(5===c.tag){var d=c.stateNode;if(b)d=d.style,"function"===typeof d.setProperty?d.setProperty("display","none","important"):d.display="none";else{d=c.stateNode;var e=c.memoizedProps.style;e=void 0!==e&&null!==e&&e.hasOwnProperty("display")?e.display:null;d.style.display=sb("display",e)}}else if(6===c.tag)c.stateNode.nodeValue=b?"":c.memoizedProps;else if((23!==c.tag&&24!==c.tag||null===c.memoizedState||c===a)&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===
-a)break;for(;null===c.sibling;){if(null===c.return||c.return===a)return;c=c.return}c.sibling.return=c.return;c=c.sibling}}
-function bj(a,b){if(Mf&&"function"===typeof Mf.onCommitFiberUnmount)try{Mf.onCommitFiberUnmount(Lf,b)}catch(f){}switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var c=a=a.next;do{var d=c,e=d.destroy;d=d.tag;if(void 0!==e)if(0!==(d&4))Zi(b,c);else{d=b;try{e()}catch(f){Wi(d,f)}}c=c.next}while(c!==a)}break;case 1:Vi(b);a=b.stateNode;if("function"===typeof a.componentWillUnmount)try{a.props=b.memoizedProps,a.state=b.memoizedState,a.componentWillUnmount()}catch(f){Wi(b,
-f)}break;case 5:Vi(b);break;case 4:cj(a,b)}}function dj(a){a.alternate=null;a.child=null;a.dependencies=null;a.firstEffect=null;a.lastEffect=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.return=null;a.updateQueue=null}function ej(a){return 5===a.tag||3===a.tag||4===a.tag}
-function fj(a){a:{for(var b=a.return;null!==b;){if(ej(b))break a;b=b.return}throw Error(y(160));}var c=b;b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(y(161));}c.flags&16&&(pb(b,""),c.flags&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||ej(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.flags&2)continue b;if(null===
-c.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.flags&2)){c=c.stateNode;break a}}d?gj(a,c,b):hj(a,c,b)}
-function gj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=jf));else if(4!==d&&(a=a.child,null!==a))for(gj(a,b,c),a=a.sibling;null!==a;)gj(a,b,c),a=a.sibling}
-function hj(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(hj(a,b,c),a=a.sibling;null!==a;)hj(a,b,c),a=a.sibling}
-function cj(a,b){for(var c=b,d=!1,e,f;;){if(!d){d=c.return;a:for(;;){if(null===d)throw Error(y(160));e=d.stateNode;switch(d.tag){case 5:f=!1;break a;case 3:e=e.containerInfo;f=!0;break a;case 4:e=e.containerInfo;f=!0;break a}d=d.return}d=!0}if(5===c.tag||6===c.tag){a:for(var g=a,h=c,k=h;;)if(bj(g,k),null!==k.child&&4!==k.tag)k.child.return=k,k=k.child;else{if(k===h)break a;for(;null===k.sibling;){if(null===k.return||k.return===h)break a;k=k.return}k.sibling.return=k.return;k=k.sibling}f?(g=e,h=c.stateNode,
-8===g.nodeType?g.parentNode.removeChild(h):g.removeChild(h)):e.removeChild(c.stateNode)}else if(4===c.tag){if(null!==c.child){e=c.stateNode.containerInfo;f=!0;c.child.return=c;c=c.child;continue}}else if(bj(a,c),null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return;4===c.tag&&(d=!1)}c.sibling.return=c.return;c=c.sibling}}
-function ij(a,b){switch(b.tag){case 0:case 11:case 14:case 15:case 22:var c=b.updateQueue;c=null!==c?c.lastEffect:null;if(null!==c){var d=c=c.next;do 3===(d.tag&3)&&(a=d.destroy,d.destroy=void 0,void 0!==a&&a()),d=d.next;while(d!==c)}return;case 1:return;case 5:c=b.stateNode;if(null!=c){d=b.memoizedProps;var e=null!==a?a.memoizedProps:d;a=b.type;var f=b.updateQueue;b.updateQueue=null;if(null!==f){c[xf]=d;"input"===a&&"radio"===d.type&&null!=d.name&&$a(c,d);wb(a,e);b=wb(a,d);for(e=0;e<f.length;e+=
-2){var g=f[e],h=f[e+1];"style"===g?tb(c,h):"dangerouslySetInnerHTML"===g?ob(c,h):"children"===g?pb(c,h):qa(c,g,h,b)}switch(a){case "input":ab(c,d);break;case "textarea":ib(c,d);break;case "select":a=c._wrapperState.wasMultiple,c._wrapperState.wasMultiple=!!d.multiple,f=d.value,null!=f?fb(c,!!d.multiple,f,!1):a!==!!d.multiple&&(null!=d.defaultValue?fb(c,!!d.multiple,d.defaultValue,!0):fb(c,!!d.multiple,d.multiple?[]:"",!1))}}}return;case 6:if(null===b.stateNode)throw Error(y(162));b.stateNode.nodeValue=
-b.memoizedProps;return;case 3:c=b.stateNode;c.hydrate&&(c.hydrate=!1,Cc(c.containerInfo));return;case 12:return;case 13:null!==b.memoizedState&&(jj=O(),aj(b.child,!0));kj(b);return;case 19:kj(b);return;case 17:return;case 23:case 24:aj(b,null!==b.memoizedState);return}throw Error(y(163));}function kj(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Ui);b.forEach(function(b){var d=lj.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}
-function mj(a,b){return null!==a&&(a=a.memoizedState,null===a||null!==a.dehydrated)?(b=b.memoizedState,null!==b&&null===b.dehydrated):!1}var nj=Math.ceil,oj=ra.ReactCurrentDispatcher,pj=ra.ReactCurrentOwner,X=0,U=null,Y=null,W=0,qj=0,rj=Bf(0),V=0,sj=null,tj=0,Dg=0,Hi=0,uj=0,vj=null,jj=0,Ji=Infinity;function wj(){Ji=O()+500}var Z=null,Qi=!1,Ri=null,Ti=null,xj=!1,yj=null,zj=90,Aj=[],Bj=[],Cj=null,Dj=0,Ej=null,Fj=-1,Gj=0,Hj=0,Ij=null,Jj=!1;function Hg(){return 0!==(X&48)?O():-1!==Fj?Fj:Fj=O()}
-function Ig(a){a=a.mode;if(0===(a&2))return 1;if(0===(a&4))return 99===eg()?1:2;0===Gj&&(Gj=tj);if(0!==kg.transition){0!==Hj&&(Hj=null!==vj?vj.pendingLanes:0);a=Gj;var b=4186112&~Hj;b&=-b;0===b&&(a=4186112&~a,b=a&-a,0===b&&(b=8192));return b}a=eg();0!==(X&4)&&98===a?a=Xc(12,Gj):(a=Sc(a),a=Xc(a,Gj));return a}
-function Jg(a,b,c){if(50<Dj)throw Dj=0,Ej=null,Error(y(185));a=Kj(a,b);if(null===a)return null;$c(a,b,c);a===U&&(Hi|=b,4===V&&Ii(a,W));var d=eg();1===b?0!==(X&8)&&0===(X&48)?Lj(a):(Mj(a,c),0===X&&(wj(),ig())):(0===(X&4)||98!==d&&99!==d||(null===Cj?Cj=new Set([a]):Cj.add(a)),Mj(a,c));vj=a}function Kj(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}
-function Mj(a,b){for(var c=a.callbackNode,d=a.suspendedLanes,e=a.pingedLanes,f=a.expirationTimes,g=a.pendingLanes;0<g;){var h=31-Vc(g),k=1<<h,l=f[h];if(-1===l){if(0===(k&d)||0!==(k&e)){l=b;Rc(k);var n=F;f[h]=10<=n?l+250:6<=n?l+5E3:-1}}else l<=b&&(a.expiredLanes|=k);g&=~k}d=Uc(a,a===U?W:0);b=F;if(0===d)null!==c&&(c!==Zf&&Pf(c),a.callbackNode=null,a.callbackPriority=0);else{if(null!==c){if(a.callbackPriority===b)return;c!==Zf&&Pf(c)}15===b?(c=Lj.bind(null,a),null===ag?(ag=[c],bg=Of(Uf,jg)):ag.push(c),
-c=Zf):14===b?c=hg(99,Lj.bind(null,a)):(c=Tc(b),c=hg(c,Nj.bind(null,a)));a.callbackPriority=b;a.callbackNode=c}}
-function Nj(a){Fj=-1;Hj=Gj=0;if(0!==(X&48))throw Error(y(327));var b=a.callbackNode;if(Oj()&&a.callbackNode!==b)return null;var c=Uc(a,a===U?W:0);if(0===c)return null;var d=c;var e=X;X|=16;var f=Pj();if(U!==a||W!==d)wj(),Qj(a,d);do try{Rj();break}catch(h){Sj(a,h)}while(1);qg();oj.current=f;X=e;null!==Y?d=0:(U=null,W=0,d=V);if(0!==(tj&Hi))Qj(a,0);else if(0!==d){2===d&&(X|=64,a.hydrate&&(a.hydrate=!1,qf(a.containerInfo)),c=Wc(a),0!==c&&(d=Tj(a,c)));if(1===d)throw b=sj,Qj(a,0),Ii(a,c),Mj(a,O()),b;a.finishedWork=
-a.current.alternate;a.finishedLanes=c;switch(d){case 0:case 1:throw Error(y(345));case 2:Uj(a);break;case 3:Ii(a,c);if((c&62914560)===c&&(d=jj+500-O(),10<d)){if(0!==Uc(a,0))break;e=a.suspendedLanes;if((e&c)!==c){Hg();a.pingedLanes|=a.suspendedLanes&e;break}a.timeoutHandle=of(Uj.bind(null,a),d);break}Uj(a);break;case 4:Ii(a,c);if((c&4186112)===c)break;d=a.eventTimes;for(e=-1;0<c;){var g=31-Vc(c);f=1<<g;g=d[g];g>e&&(e=g);c&=~f}c=e;c=O()-c;c=(120>c?120:480>c?480:1080>c?1080:1920>c?1920:3E3>c?3E3:4320>
-c?4320:1960*nj(c/1960))-c;if(10<c){a.timeoutHandle=of(Uj.bind(null,a),c);break}Uj(a);break;case 5:Uj(a);break;default:throw Error(y(329));}}Mj(a,O());return a.callbackNode===b?Nj.bind(null,a):null}function Ii(a,b){b&=~uj;b&=~Hi;a.suspendedLanes|=b;a.pingedLanes&=~b;for(a=a.expirationTimes;0<b;){var c=31-Vc(b),d=1<<c;a[c]=-1;b&=~d}}
-function Lj(a){if(0!==(X&48))throw Error(y(327));Oj();if(a===U&&0!==(a.expiredLanes&W)){var b=W;var c=Tj(a,b);0!==(tj&Hi)&&(b=Uc(a,b),c=Tj(a,b))}else b=Uc(a,0),c=Tj(a,b);0!==a.tag&&2===c&&(X|=64,a.hydrate&&(a.hydrate=!1,qf(a.containerInfo)),b=Wc(a),0!==b&&(c=Tj(a,b)));if(1===c)throw c=sj,Qj(a,0),Ii(a,b),Mj(a,O()),c;a.finishedWork=a.current.alternate;a.finishedLanes=b;Uj(a);Mj(a,O());return null}
-function Vj(){if(null!==Cj){var a=Cj;Cj=null;a.forEach(function(a){a.expiredLanes|=24&a.pendingLanes;Mj(a,O())})}ig()}function Wj(a,b){var c=X;X|=1;try{return a(b)}finally{X=c,0===X&&(wj(),ig())}}function Xj(a,b){var c=X;X&=-2;X|=8;try{return a(b)}finally{X=c,0===X&&(wj(),ig())}}function ni(a,b){I(rj,qj);qj|=b;tj|=b}function Ki(){qj=rj.current;H(rj)}
-function Qj(a,b){a.finishedWork=null;a.finishedLanes=0;var c=a.timeoutHandle;-1!==c&&(a.timeoutHandle=-1,pf(c));if(null!==Y)for(c=Y.return;null!==c;){var d=c;switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&Gf();break;case 3:fh();H(N);H(M);uh();break;case 5:hh(d);break;case 4:fh();break;case 13:H(P);break;case 19:H(P);break;case 10:rg(d);break;case 23:case 24:Ki()}c=c.return}U=a;Y=Tg(a.current,null);W=qj=tj=b;V=0;sj=null;uj=Hi=Dg=0}
-function Sj(a,b){do{var c=Y;try{qg();vh.current=Gh;if(yh){for(var d=R.memoizedState;null!==d;){var e=d.queue;null!==e&&(e.pending=null);d=d.next}yh=!1}xh=0;T=S=R=null;zh=!1;pj.current=null;if(null===c||null===c.return){V=1;sj=b;Y=null;break}a:{var f=a,g=c.return,h=c,k=b;b=W;h.flags|=2048;h.firstEffect=h.lastEffect=null;if(null!==k&&"object"===typeof k&&"function"===typeof k.then){var l=k;if(0===(h.mode&2)){var n=h.alternate;n?(h.updateQueue=n.updateQueue,h.memoizedState=n.memoizedState,h.lanes=n.lanes):
-(h.updateQueue=null,h.memoizedState=null)}var A=0!==(P.current&1),p=g;do{var C;if(C=13===p.tag){var x=p.memoizedState;if(null!==x)C=null!==x.dehydrated?!0:!1;else{var w=p.memoizedProps;C=void 0===w.fallback?!1:!0!==w.unstable_avoidThisFallback?!0:A?!1:!0}}if(C){var z=p.updateQueue;if(null===z){var u=new Set;u.add(l);p.updateQueue=u}else z.add(l);if(0===(p.mode&2)){p.flags|=64;h.flags|=16384;h.flags&=-2981;if(1===h.tag)if(null===h.alternate)h.tag=17;else{var t=zg(-1,1);t.tag=2;Ag(h,t)}h.lanes|=1;break a}k=
-void 0;h=b;var q=f.pingCache;null===q?(q=f.pingCache=new Oi,k=new Set,q.set(l,k)):(k=q.get(l),void 0===k&&(k=new Set,q.set(l,k)));if(!k.has(h)){k.add(h);var v=Yj.bind(null,f,l,h);l.then(v,v)}p.flags|=4096;p.lanes=b;break a}p=p.return}while(null!==p);k=Error((Ra(h.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==V&&(V=2);k=Mi(k,h);p=
-g;do{switch(p.tag){case 3:f=k;p.flags|=4096;b&=-b;p.lanes|=b;var J=Pi(p,f,b);Bg(p,J);break a;case 1:f=k;var K=p.type,Q=p.stateNode;if(0===(p.flags&64)&&("function"===typeof K.getDerivedStateFromError||null!==Q&&"function"===typeof Q.componentDidCatch&&(null===Ti||!Ti.has(Q)))){p.flags|=4096;b&=-b;p.lanes|=b;var L=Si(p,f,b);Bg(p,L);break a}}p=p.return}while(null!==p)}Zj(c)}catch(va){b=va;Y===c&&null!==c&&(Y=c=c.return);continue}break}while(1)}
-function Pj(){var a=oj.current;oj.current=Gh;return null===a?Gh:a}function Tj(a,b){var c=X;X|=16;var d=Pj();U===a&&W===b||Qj(a,b);do try{ak();break}catch(e){Sj(a,e)}while(1);qg();X=c;oj.current=d;if(null!==Y)throw Error(y(261));U=null;W=0;return V}function ak(){for(;null!==Y;)bk(Y)}function Rj(){for(;null!==Y&&!Qf();)bk(Y)}function bk(a){var b=ck(a.alternate,a,qj);a.memoizedProps=a.pendingProps;null===b?Zj(a):Y=b;pj.current=null}
-function Zj(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&2048)){c=Gi(c,b,qj);if(null!==c){Y=c;return}c=b;if(24!==c.tag&&23!==c.tag||null===c.memoizedState||0!==(qj&1073741824)||0===(c.mode&4)){for(var d=0,e=c.child;null!==e;)d|=e.lanes|e.childLanes,e=e.sibling;c.childLanes=d}null!==a&&0===(a.flags&2048)&&(null===a.firstEffect&&(a.firstEffect=b.firstEffect),null!==b.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=b.firstEffect),a.lastEffect=b.lastEffect),1<b.flags&&(null!==
-a.lastEffect?a.lastEffect.nextEffect=b:a.firstEffect=b,a.lastEffect=b))}else{c=Li(b);if(null!==c){c.flags&=2047;Y=c;return}null!==a&&(a.firstEffect=a.lastEffect=null,a.flags|=2048)}b=b.sibling;if(null!==b){Y=b;return}Y=b=a}while(null!==b);0===V&&(V=5)}function Uj(a){var b=eg();gg(99,dk.bind(null,a,b));return null}
-function dk(a,b){do Oj();while(null!==yj);if(0!==(X&48))throw Error(y(327));var c=a.finishedWork;if(null===c)return null;a.finishedWork=null;a.finishedLanes=0;if(c===a.current)throw Error(y(177));a.callbackNode=null;var d=c.lanes|c.childLanes,e=d,f=a.pendingLanes&~e;a.pendingLanes=e;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=e;a.mutableReadLanes&=e;a.entangledLanes&=e;e=a.entanglements;for(var g=a.eventTimes,h=a.expirationTimes;0<f;){var k=31-Vc(f),l=1<<k;e[k]=0;g[k]=-1;h[k]=-1;f&=~l}null!==
-Cj&&0===(d&24)&&Cj.has(a)&&Cj.delete(a);a===U&&(Y=U=null,W=0);1<c.flags?null!==c.lastEffect?(c.lastEffect.nextEffect=c,d=c.firstEffect):d=c:d=c.firstEffect;if(null!==d){e=X;X|=32;pj.current=null;kf=fd;g=Ne();if(Oe(g)){if("selectionStart"in g)h={start:g.selectionStart,end:g.selectionEnd};else a:if(h=(h=g.ownerDocument)&&h.defaultView||window,(l=h.getSelection&&h.getSelection())&&0!==l.rangeCount){h=l.anchorNode;f=l.anchorOffset;k=l.focusNode;l=l.focusOffset;try{h.nodeType,k.nodeType}catch(va){h=null;
-break a}var n=0,A=-1,p=-1,C=0,x=0,w=g,z=null;b:for(;;){for(var u;;){w!==h||0!==f&&3!==w.nodeType||(A=n+f);w!==k||0!==l&&3!==w.nodeType||(p=n+l);3===w.nodeType&&(n+=w.nodeValue.length);if(null===(u=w.firstChild))break;z=w;w=u}for(;;){if(w===g)break b;z===h&&++C===f&&(A=n);z===k&&++x===l&&(p=n);if(null!==(u=w.nextSibling))break;w=z;z=w.parentNode}w=u}h=-1===A||-1===p?null:{start:A,end:p}}else h=null;h=h||{start:0,end:0}}else h=null;lf={focusedElem:g,selectionRange:h};fd=!1;Ij=null;Jj=!1;Z=d;do try{ek()}catch(va){if(null===
-Z)throw Error(y(330));Wi(Z,va);Z=Z.nextEffect}while(null!==Z);Ij=null;Z=d;do try{for(g=a;null!==Z;){var t=Z.flags;t&16&&pb(Z.stateNode,"");if(t&128){var q=Z.alternate;if(null!==q){var v=q.ref;null!==v&&("function"===typeof v?v(null):v.current=null)}}switch(t&1038){case 2:fj(Z);Z.flags&=-3;break;case 6:fj(Z);Z.flags&=-3;ij(Z.alternate,Z);break;case 1024:Z.flags&=-1025;break;case 1028:Z.flags&=-1025;ij(Z.alternate,Z);break;case 4:ij(Z.alternate,Z);break;case 8:h=Z;cj(g,h);var J=h.alternate;dj(h);null!==
-J&&dj(J)}Z=Z.nextEffect}}catch(va){if(null===Z)throw Error(y(330));Wi(Z,va);Z=Z.nextEffect}while(null!==Z);v=lf;q=Ne();t=v.focusedElem;g=v.selectionRange;if(q!==t&&t&&t.ownerDocument&&Me(t.ownerDocument.documentElement,t)){null!==g&&Oe(t)&&(q=g.start,v=g.end,void 0===v&&(v=q),"selectionStart"in t?(t.selectionStart=q,t.selectionEnd=Math.min(v,t.value.length)):(v=(q=t.ownerDocument||document)&&q.defaultView||window,v.getSelection&&(v=v.getSelection(),h=t.textContent.length,J=Math.min(g.start,h),g=void 0===
-g.end?J:Math.min(g.end,h),!v.extend&&J>g&&(h=g,g=J,J=h),h=Le(t,J),f=Le(t,g),h&&f&&(1!==v.rangeCount||v.anchorNode!==h.node||v.anchorOffset!==h.offset||v.focusNode!==f.node||v.focusOffset!==f.offset)&&(q=q.createRange(),q.setStart(h.node,h.offset),v.removeAllRanges(),J>g?(v.addRange(q),v.extend(f.node,f.offset)):(q.setEnd(f.node,f.offset),v.addRange(q))))));q=[];for(v=t;v=v.parentNode;)1===v.nodeType&&q.push({element:v,left:v.scrollLeft,top:v.scrollTop});"function"===typeof t.focus&&t.focus();for(t=
-0;t<q.length;t++)v=q[t],v.element.scrollLeft=v.left,v.element.scrollTop=v.top}fd=!!kf;lf=kf=null;a.current=c;Z=d;do try{for(t=a;null!==Z;){var K=Z.flags;K&36&&Yi(t,Z.alternate,Z);if(K&128){q=void 0;var Q=Z.ref;if(null!==Q){var L=Z.stateNode;switch(Z.tag){case 5:q=L;break;default:q=L}"function"===typeof Q?Q(q):Q.current=q}}Z=Z.nextEffect}}catch(va){if(null===Z)throw Error(y(330));Wi(Z,va);Z=Z.nextEffect}while(null!==Z);Z=null;$f();X=e}else a.current=c;if(xj)xj=!1,yj=a,zj=b;else for(Z=d;null!==Z;)b=
-Z.nextEffect,Z.nextEffect=null,Z.flags&8&&(K=Z,K.sibling=null,K.stateNode=null),Z=b;d=a.pendingLanes;0===d&&(Ti=null);1===d?a===Ej?Dj++:(Dj=0,Ej=a):Dj=0;c=c.stateNode;if(Mf&&"function"===typeof Mf.onCommitFiberRoot)try{Mf.onCommitFiberRoot(Lf,c,void 0,64===(c.current.flags&64))}catch(va){}Mj(a,O());if(Qi)throw Qi=!1,a=Ri,Ri=null,a;if(0!==(X&8))return null;ig();return null}
-function ek(){for(;null!==Z;){var a=Z.alternate;Jj||null===Ij||(0!==(Z.flags&8)?dc(Z,Ij)&&(Jj=!0):13===Z.tag&&mj(a,Z)&&dc(Z,Ij)&&(Jj=!0));var b=Z.flags;0!==(b&256)&&Xi(a,Z);0===(b&512)||xj||(xj=!0,hg(97,function(){Oj();return null}));Z=Z.nextEffect}}function Oj(){if(90!==zj){var a=97<zj?97:zj;zj=90;return gg(a,fk)}return!1}function $i(a,b){Aj.push(b,a);xj||(xj=!0,hg(97,function(){Oj();return null}))}function Zi(a,b){Bj.push(b,a);xj||(xj=!0,hg(97,function(){Oj();return null}))}
-function fk(){if(null===yj)return!1;var a=yj;yj=null;if(0!==(X&48))throw Error(y(331));var b=X;X|=32;var c=Bj;Bj=[];for(var d=0;d<c.length;d+=2){var e=c[d],f=c[d+1],g=e.destroy;e.destroy=void 0;if("function"===typeof g)try{g()}catch(k){if(null===f)throw Error(y(330));Wi(f,k)}}c=Aj;Aj=[];for(d=0;d<c.length;d+=2){e=c[d];f=c[d+1];try{var h=e.create;e.destroy=h()}catch(k){if(null===f)throw Error(y(330));Wi(f,k)}}for(h=a.current.firstEffect;null!==h;)a=h.nextEffect,h.nextEffect=null,h.flags&8&&(h.sibling=
-null,h.stateNode=null),h=a;X=b;ig();return!0}function gk(a,b,c){b=Mi(c,b);b=Pi(a,b,1);Ag(a,b);b=Hg();a=Kj(a,1);null!==a&&($c(a,1,b),Mj(a,b))}
-function Wi(a,b){if(3===a.tag)gk(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){gk(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if("function"===typeof c.type.getDerivedStateFromError||"function"===typeof d.componentDidCatch&&(null===Ti||!Ti.has(d))){a=Mi(b,a);var e=Si(c,a,1);Ag(c,e);e=Hg();c=Kj(c,1);if(null!==c)$c(c,1,e),Mj(c,e);else if("function"===typeof d.componentDidCatch&&(null===Ti||!Ti.has(d)))try{d.componentDidCatch(b,a)}catch(f){}break}}c=c.return}}
-function Yj(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);b=Hg();a.pingedLanes|=a.suspendedLanes&c;U===a&&(W&c)===c&&(4===V||3===V&&(W&62914560)===W&&500>O()-jj?Qj(a,0):uj|=c);Mj(a,b)}function lj(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=a.mode,0===(b&2)?b=1:0===(b&4)?b=99===eg()?1:2:(0===Gj&&(Gj=tj),b=Yc(62914560&~Gj),0===b&&(b=4194304)));c=Hg();a=Kj(a,b);null!==a&&($c(a,b,c),Mj(a,c))}var ck;
-ck=function(a,b,c){var d=b.lanes;if(null!==a)if(a.memoizedProps!==b.pendingProps||N.current)ug=!0;else if(0!==(c&d))ug=0!==(a.flags&16384)?!0:!1;else{ug=!1;switch(b.tag){case 3:ri(b);sh();break;case 5:gh(b);break;case 1:Ff(b.type)&&Jf(b);break;case 4:eh(b,b.stateNode.containerInfo);break;case 10:d=b.memoizedProps.value;var e=b.type._context;I(mg,e._currentValue);e._currentValue=d;break;case 13:if(null!==b.memoizedState){if(0!==(c&b.child.childLanes))return ti(a,b,c);I(P,P.current&1);b=hi(a,b,c);return null!==
-b?b.sibling:null}I(P,P.current&1);break;case 19:d=0!==(c&b.childLanes);if(0!==(a.flags&64)){if(d)return Ai(a,b,c);b.flags|=64}e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);I(P,P.current);if(d)break;else return null;case 23:case 24:return b.lanes=0,mi(a,b,c)}return hi(a,b,c)}else ug=!1;b.lanes=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=Ef(b,M.current);tg(b,c);e=Ch(null,b,d,a,e,c);b.flags|=1;if("object"===
-typeof e&&null!==e&&"function"===typeof e.render&&void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(Ff(d)){var f=!0;Jf(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;xg(b);var g=d.getDerivedStateFromProps;"function"===typeof g&&Gg(b,d,g,a);e.updater=Kg;b.stateNode=e;e._reactInternals=b;Og(b,d,a,c);b=qi(null,b,d,!0,f,c)}else b.tag=0,fi(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);
-a=b.pendingProps;f=e._init;e=f(e._payload);b.type=e;f=b.tag=hk(e);a=lg(e,a);switch(f){case 0:b=li(null,b,e,a,c);break a;case 1:b=pi(null,b,e,a,c);break a;case 11:b=gi(null,b,e,a,c);break a;case 14:b=ii(null,b,e,lg(e.type,a),d,c);break a}throw Error(y(306,e,""));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),li(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),pi(a,b,d,e,c);case 3:ri(b);d=b.updateQueue;if(null===a||null===d)throw Error(y(282));
-d=b.pendingProps;e=b.memoizedState;e=null!==e?e.element:null;yg(a,b);Cg(b,d,null,c);d=b.memoizedState.element;if(d===e)sh(),b=hi(a,b,c);else{e=b.stateNode;if(f=e.hydrate)kh=rf(b.stateNode.containerInfo.firstChild),jh=b,f=lh=!0;if(f){a=e.mutableSourceEagerHydrationData;if(null!=a)for(e=0;e<a.length;e+=2)f=a[e],f._workInProgressVersionPrimary=a[e+1],th.push(f);c=Zg(b,null,d,c);for(b.child=c;c;)c.flags=c.flags&-3|1024,c=c.sibling}else fi(a,b,d,c),sh();b=b.child}return b;case 5:return gh(b),null===a&&
-ph(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,nf(d,e)?g=null:null!==f&&nf(d,f)&&(b.flags|=16),oi(a,b),fi(a,b,g,c),b.child;case 6:return null===a&&ph(b),null;case 13:return ti(a,b,c);case 4:return eh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Yg(b,null,d,c):fi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),gi(a,b,d,e,c);case 7:return fi(a,b,b.pendingProps,c),b.child;case 8:return fi(a,b,b.pendingProps.children,
-c),b.child;case 12:return fi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;var h=b.type._context;I(mg,h._currentValue);h._currentValue=f;if(null!==g)if(h=g.value,f=He(h,f)?0:("function"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0,0===f){if(g.children===e.children&&!N.current){b=hi(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==k){g=h.child;for(var l=
-k.firstContext;null!==l;){if(l.context===d&&0!==(l.observedBits&f)){1===h.tag&&(l=zg(-1,c&-c),l.tag=2,Ag(h,l));h.lanes|=c;l=h.alternate;null!==l&&(l.lanes|=c);sg(h.return,c);k.lanes|=c;break}l=l.next}}else g=10===h.tag?h.type===b.type?null:h.child:h.child;if(null!==g)g.return=h;else for(g=h;null!==g;){if(g===b){g=null;break}h=g.sibling;if(null!==h){h.return=g.return;g=h;break}g=g.return}h=g}fi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,f=b.pendingProps,d=f.children,tg(b,c),e=vg(e,
-f.unstable_observedBits),d=d(e),b.flags|=1,fi(a,b,d,c),b.child;case 14:return e=b.type,f=lg(e,b.pendingProps),f=lg(e.type,f),ii(a,b,e,f,d,c);case 15:return ki(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:lg(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),b.tag=1,Ff(d)?(a=!0,Jf(b)):a=!1,tg(b,c),Mg(b,d,e),Og(b,d,e,c),qi(null,b,d,!0,a,c);case 19:return Ai(a,b,c);case 23:return mi(a,b,c);case 24:return mi(a,b,c)}throw Error(y(156,b.tag));
-};function ik(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.flags=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childLanes=this.lanes=0;this.alternate=null}function nh(a,b,c,d){return new ik(a,b,c,d)}function ji(a){a=a.prototype;return!(!a||!a.isReactComponent)}
-function hk(a){if("function"===typeof a)return ji(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Aa)return 11;if(a===Da)return 14}return 2}
-function Tg(a,b){var c=a.alternate;null===c?(c=nh(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};
-c.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}
-function Vg(a,b,c,d,e,f){var g=2;d=a;if("function"===typeof a)ji(a)&&(g=1);else if("string"===typeof a)g=5;else a:switch(a){case ua:return Xg(c.children,e,f,b);case Ha:g=8;e|=16;break;case wa:g=8;e|=1;break;case xa:return a=nh(12,c,b,e|8),a.elementType=xa,a.type=xa,a.lanes=f,a;case Ba:return a=nh(13,c,b,e),a.type=Ba,a.elementType=Ba,a.lanes=f,a;case Ca:return a=nh(19,c,b,e),a.elementType=Ca,a.lanes=f,a;case Ia:return vi(c,e,f,b);case Ja:return a=nh(24,c,b,e),a.elementType=Ja,a.lanes=f,a;default:if("object"===
-typeof a&&null!==a)switch(a.$$typeof){case ya:g=10;break a;case za:g=9;break a;case Aa:g=11;break a;case Da:g=14;break a;case Ea:g=16;d=null;break a;case Fa:g=22;break a}throw Error(y(130,null==a?a:typeof a,""));}b=nh(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Xg(a,b,c,d){a=nh(7,a,d,b);a.lanes=c;return a}function vi(a,b,c,d){a=nh(23,a,d,b);a.elementType=Ia;a.lanes=c;return a}function Ug(a,b,c){a=nh(6,a,null,b);a.lanes=c;return a}
-function Wg(a,b,c){b=nh(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}
-function jk(a,b,c){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=null;this.callbackPriority=0;this.eventTimes=Zc(0);this.expirationTimes=Zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=Zc(0);this.mutableSourceEagerHydrationData=null}
-function kk(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:ta,key:null==d?null:""+d,children:a,containerInfo:b,implementation:c}}
-function lk(a,b,c,d){var e=b.current,f=Hg(),g=Ig(e);a:if(c){c=c._reactInternals;b:{if(Zb(c)!==c||1!==c.tag)throw Error(y(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(Ff(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(y(171));}if(1===c.tag){var k=c.type;if(Ff(k)){c=If(c,k,h);break a}}c=h}else c=Cf;null===b.context?b.context=c:b.pendingContext=c;b=zg(f,g);b.payload={element:a};d=void 0===d?null:d;null!==
-d&&(b.callback=d);Ag(e,b);Jg(e,g,f);return g}function mk(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return a.child.stateNode;default:return a.child.stateNode}}function nk(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c<b?c:b}}function ok(a,b){nk(a,b);(a=a.alternate)&&nk(a,b)}function pk(){return null}
-function qk(a,b,c){var d=null!=c&&null!=c.hydrationOptions&&c.hydrationOptions.mutableSources||null;c=new jk(a,b,null!=c&&!0===c.hydrate);b=nh(3,null,null,2===b?7:1===b?3:0);c.current=b;b.stateNode=c;xg(b);a[ff]=c.current;cf(8===a.nodeType?a.parentNode:a);if(d)for(a=0;a<d.length;a++){b=d[a];var e=b._getVersion;e=e(b._source);null==c.mutableSourceEagerHydrationData?c.mutableSourceEagerHydrationData=[b,e]:c.mutableSourceEagerHydrationData.push(b,e)}this._internalRoot=c}
-qk.prototype.render=function(a){lk(a,this._internalRoot,null,null)};qk.prototype.unmount=function(){var a=this._internalRoot,b=a.containerInfo;lk(null,a,null,function(){b[ff]=null})};function rk(a){return!(!a||1!==a.nodeType&&9!==a.nodeType&&11!==a.nodeType&&(8!==a.nodeType||" react-mount-point-unstable "!==a.nodeValue))}
-function sk(a,b){b||(b=a?9===a.nodeType?a.documentElement:a.firstChild:null,b=!(!b||1!==b.nodeType||!b.hasAttribute("data-reactroot")));if(!b)for(var c;c=a.lastChild;)a.removeChild(c);return new qk(a,0,b?{hydrate:!0}:void 0)}
-function tk(a,b,c,d,e){var f=c._reactRootContainer;if(f){var g=f._internalRoot;if("function"===typeof e){var h=e;e=function(){var a=mk(g);h.call(a)}}lk(b,g,a,e)}else{f=c._reactRootContainer=sk(c,d);g=f._internalRoot;if("function"===typeof e){var k=e;e=function(){var a=mk(g);k.call(a)}}Xj(function(){lk(b,g,a,e)})}return mk(g)}ec=function(a){if(13===a.tag){var b=Hg();Jg(a,4,b);ok(a,4)}};fc=function(a){if(13===a.tag){var b=Hg();Jg(a,67108864,b);ok(a,67108864)}};
-gc=function(a){if(13===a.tag){var b=Hg(),c=Ig(a);Jg(a,c,b);ok(a,c)}};hc=function(a,b){return b()};
-yb=function(a,b,c){switch(b){case "input":ab(a,c);b=c.name;if("radio"===c.type&&null!=b){for(c=a;c.parentNode;)c=c.parentNode;c=c.querySelectorAll("input[name="+JSON.stringify(""+b)+'][type="radio"]');for(b=0;b<c.length;b++){var d=c[b];if(d!==a&&d.form===a.form){var e=Db(d);if(!e)throw Error(y(90));Wa(d);ab(d,e)}}}break;case "textarea":ib(a,c);break;case "select":b=c.value,null!=b&&fb(a,!!c.multiple,b,!1)}};Gb=Wj;
-Hb=function(a,b,c,d,e){var f=X;X|=4;try{return gg(98,a.bind(null,b,c,d,e))}finally{X=f,0===X&&(wj(),ig())}};Ib=function(){0===(X&49)&&(Vj(),Oj())};Jb=function(a,b){var c=X;X|=2;try{return a(b)}finally{X=c,0===X&&(wj(),ig())}};function uk(a,b){var c=2<arguments.length&&void 0!==arguments[2]?arguments[2]:null;if(!rk(b))throw Error(y(200));return kk(a,b,null,c)}var vk={Events:[Cb,ue,Db,Eb,Fb,Oj,{current:!1}]},wk={findFiberByHostInstance:wc,bundleType:0,version:"17.0.2",rendererPackageName:"react-dom"};
-var xk={bundleType:wk.bundleType,version:wk.version,rendererPackageName:wk.rendererPackageName,rendererConfig:wk.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ra.ReactCurrentDispatcher,findHostInstanceByFiber:function(a){a=cc(a);return null===a?null:a.stateNode},findFiberByHostInstance:wk.findFiberByHostInstance||
-pk,findHostInstancesForRefresh:null,scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"!==typeof __REACT_DEVTOOLS_GLOBAL_HOOK__){var yk=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!yk.isDisabled&&yk.supportsFiber)try{Lf=yk.inject(xk),Mf=yk}catch(a){}}exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=vk;exports.createPortal=uk;
-exports.findDOMNode=function(a){if(null==a)return null;if(1===a.nodeType)return a;var b=a._reactInternals;if(void 0===b){if("function"===typeof a.render)throw Error(y(188));throw Error(y(268,Object.keys(a)));}a=cc(b);a=null===a?null:a.stateNode;return a};exports.flushSync=function(a,b){var c=X;if(0!==(c&48))return a(b);X|=1;try{if(a)return gg(99,a.bind(null,b))}finally{X=c,ig()}};exports.hydrate=function(a,b,c){if(!rk(b))throw Error(y(200));return tk(null,a,b,!0,c)};
-exports.render=function(a,b,c){if(!rk(b))throw Error(y(200));return tk(null,a,b,!1,c)};exports.unmountComponentAtNode=function(a){if(!rk(a))throw Error(y(40));return a._reactRootContainer?(Xj(function(){tk(null,null,a,!1,function(){a._reactRootContainer=null;a[ff]=null})}),!0):!1};exports.unstable_batchedUpdates=Wj;exports.unstable_createPortal=function(a,b){return uk(a,b,2<arguments.length&&void 0!==arguments[2]?arguments[2]:null)};
-exports.unstable_renderSubtreeIntoContainer=function(a,b,c,d){if(!rk(c))throw Error(y(200));if(null==a||void 0===a._reactInternals)throw Error(y(38));return tk(a,b,c,!1,d)};exports.version="17.0.2";
-
-
-/***/ }),
-
-/***/ 73935:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-function checkDCE() {
-  /* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */
-  if (
-    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ === 'undefined' ||
-    typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE !== 'function'
-  ) {
-    return;
-  }
-  if (false) {}
-  try {
-    // Verify that the code above has been dead code eliminated (DCE'd).
-    __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(checkDCE);
-  } catch (err) {
-    // DevTools shouldn't crash React, no matter what.
-    // We should still report in case we break this code.
-    console.error(err);
-  }
-}
-
-if (true) {
-  // DCE check should happen before ReactDOM bundle executes so that
-  // DevTools can report bad minification during injection.
-  checkDCE();
-  module.exports = __webpack_require__(64448);
-} else {}
-
-
-/***/ }),
-
-/***/ 21152:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-module.exports = __webpack_require__(9680);
-
-
-/***/ }),
-
-/***/ 9680:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-if (true) {
-  module.exports = __webpack_require__(94798);
-} else {}
-
-
-/***/ }),
-
-/***/ 69590:
-/***/ ((module) => {
-
-/* global Map:readonly, Set:readonly, ArrayBuffer:readonly */
-
-var hasElementType = typeof Element !== 'undefined';
-var hasMap = typeof Map === 'function';
-var hasSet = typeof Set === 'function';
-var hasArrayBuffer = typeof ArrayBuffer === 'function' && !!ArrayBuffer.isView;
-
-// Note: We **don't** need `envHasBigInt64Array` in fde es6/index.js
-
-function equal(a, b) {
-  // START: fast-deep-equal es6/index.js 3.1.1
-  if (a === b) return true;
-
-  if (a && b && typeof a == 'object' && typeof b == 'object') {
-    if (a.constructor !== b.constructor) return false;
-
-    var length, i, keys;
-    if (Array.isArray(a)) {
-      length = a.length;
-      if (length != b.length) return false;
-      for (i = length; i-- !== 0;)
-        if (!equal(a[i], b[i])) return false;
-      return true;
-    }
-
-    // START: Modifications:
-    // 1. Extra `has<Type> &&` helpers in initial condition allow es6 code
-    //    to co-exist with es5.
-    // 2. Replace `for of` with es5 compliant iteration using `for`.
-    //    Basically, take:
-    //
-    //    ```js
-    //    for (i of a.entries())
-    //      if (!b.has(i[0])) return false;
-    //    ```
-    //
-    //    ... and convert to:
-    //
-    //    ```js
-    //    it = a.entries();
-    //    while (!(i = it.next()).done)
-    //      if (!b.has(i.value[0])) return false;
-    //    ```
-    //
-    //    **Note**: `i` access switches to `i.value`.
-    var it;
-    if (hasMap && (a instanceof Map) && (b instanceof Map)) {
-      if (a.size !== b.size) return false;
-      it = a.entries();
-      while (!(i = it.next()).done)
-        if (!b.has(i.value[0])) return false;
-      it = a.entries();
-      while (!(i = it.next()).done)
-        if (!equal(i.value[1], b.get(i.value[0]))) return false;
-      return true;
-    }
-
-    if (hasSet && (a instanceof Set) && (b instanceof Set)) {
-      if (a.size !== b.size) return false;
-      it = a.entries();
-      while (!(i = it.next()).done)
-        if (!b.has(i.value[0])) return false;
-      return true;
-    }
-    // END: Modifications
-
-    if (hasArrayBuffer && ArrayBuffer.isView(a) && ArrayBuffer.isView(b)) {
-      length = a.length;
-      if (length != b.length) return false;
-      for (i = length; i-- !== 0;)
-        if (a[i] !== b[i]) return false;
-      return true;
-    }
-
-    if (a.constructor === RegExp) return a.source === b.source && a.flags === b.flags;
-    if (a.valueOf !== Object.prototype.valueOf) return a.valueOf() === b.valueOf();
-    if (a.toString !== Object.prototype.toString) return a.toString() === b.toString();
-
-    keys = Object.keys(a);
-    length = keys.length;
-    if (length !== Object.keys(b).length) return false;
-
-    for (i = length; i-- !== 0;)
-      if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
-    // END: fast-deep-equal
-
-    // START: react-fast-compare
-    // custom handling for DOM elements
-    if (hasElementType && a instanceof Element) return false;
-
-    // custom handling for React/Preact
-    for (i = length; i-- !== 0;) {
-      if ((keys[i] === '_owner' || keys[i] === '__v' || keys[i] === '__o') && a.$$typeof) {
-        // React-specific: avoid traversing React elements' _owner
-        // Preact-specific: avoid traversing Preact elements' __v and __o
-        //    __v = $_original / $_vnode
-        //    __o = $_owner
-        // These properties contain circular references and are not needed when
-        // comparing the actual elements (and not their owners)
-        // .$$typeof and ._store on just reasonable markers of elements
-
-        continue;
-      }
-
-      // all other properties should be traversed as usual
-      if (!equal(a[keys[i]], b[keys[i]])) return false;
-    }
-    // END: react-fast-compare
-
-    // START: fast-deep-equal
-    return true;
-  }
-
-  return a !== a && b !== b;
-}
-// end fast-deep-equal
-
-module.exports = function isEqual(a, b) {
-  try {
-    return equal(a, b);
-  } catch (error) {
-    if (((error.message || '').match(/stack|recursion/i))) {
-      // warn on circular references, don't crash
-      // browsers give this different errors name and messages:
-      // chrome/safari: "RangeError", "Maximum call stack size exceeded"
-      // firefox: "InternalError", too much recursion"
-      // edge: "Error", "Out of stack space"
-      console.warn('react-fast-compare cannot handle circular refs');
-      return false;
-    }
-    // some other error. we should definitely know about these
-    throw error;
-  }
-};
-
-
-/***/ }),
-
-/***/ 70405:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "B6": () => (/* binding */ q),
-/* harmony export */   "ql": () => (/* binding */ W)
-/* harmony export */ });
-/* unused harmony export HelmetData */
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(45697);
-/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_4__);
-/* harmony import */ var react_fast_compare__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(69590);
-/* harmony import */ var react_fast_compare__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react_fast_compare__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var invariant__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(46128);
-/* harmony import */ var invariant__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(invariant__WEBPACK_IMPORTED_MODULE_2__);
-/* harmony import */ var shallowequal__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(96774);
-/* harmony import */ var shallowequal__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(shallowequal__WEBPACK_IMPORTED_MODULE_3__);
-function a(){return a=Object.assign||function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)Object.prototype.hasOwnProperty.call(r,n)&&(t[n]=r[n])}return t},a.apply(this,arguments)}function s(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,c(t,e)}function c(t,e){return c=Object.setPrototypeOf||function(t,e){return t.__proto__=e,t},c(t,e)}function u(t,e){if(null==t)return{};var r,n,i={},o=Object.keys(t);for(n=0;n<o.length;n++)e.indexOf(r=o[n])>=0||(i[r]=t[r]);return i}var l={BASE:"base",BODY:"body",HEAD:"head",HTML:"html",LINK:"link",META:"meta",NOSCRIPT:"noscript",SCRIPT:"script",STYLE:"style",TITLE:"title",FRAGMENT:"Symbol(react.fragment)"},p={rel:["amphtml","canonical","alternate"]},f={type:["application/ld+json"]},d={charset:"",name:["robots","description"],property:["og:type","og:title","og:url","og:image","og:image:alt","og:description","twitter:url","twitter:title","twitter:description","twitter:image","twitter:image:alt","twitter:card","twitter:site"]},h=Object.keys(l).map(function(t){return l[t]}),m={accesskey:"accessKey",charset:"charSet",class:"className",contenteditable:"contentEditable",contextmenu:"contextMenu","http-equiv":"httpEquiv",itemprop:"itemProp",tabindex:"tabIndex"},y=Object.keys(m).reduce(function(t,e){return t[m[e]]=e,t},{}),T=function(t,e){for(var r=t.length-1;r>=0;r-=1){var n=t[r];if(Object.prototype.hasOwnProperty.call(n,e))return n[e]}return null},g=function(t){var e=T(t,l.TITLE),r=T(t,"titleTemplate");if(Array.isArray(e)&&(e=e.join("")),r&&e)return r.replace(/%s/g,function(){return e});var n=T(t,"defaultTitle");return e||n||void 0},b=function(t){return T(t,"onChangeClientState")||function(){}},v=function(t,e){return e.filter(function(e){return void 0!==e[t]}).map(function(e){return e[t]}).reduce(function(t,e){return a({},t,e)},{})},A=function(t,e){return e.filter(function(t){return void 0!==t[l.BASE]}).map(function(t){return t[l.BASE]}).reverse().reduce(function(e,r){if(!e.length)for(var n=Object.keys(r),i=0;i<n.length;i+=1){var o=n[i].toLowerCase();if(-1!==t.indexOf(o)&&r[o])return e.concat(r)}return e},[])},C=function(t,e,r){var n={};return r.filter(function(e){return!!Array.isArray(e[t])||(void 0!==e[t]&&console&&"function"==typeof console.warn&&console.warn("Helmet: "+t+' should be of type "Array". Instead found type "'+typeof e[t]+'"'),!1)}).map(function(e){return e[t]}).reverse().reduce(function(t,r){var i={};r.filter(function(t){for(var r,o=Object.keys(t),a=0;a<o.length;a+=1){var s=o[a],c=s.toLowerCase();-1===e.indexOf(c)||"rel"===r&&"canonical"===t[r].toLowerCase()||"rel"===c&&"stylesheet"===t[c].toLowerCase()||(r=c),-1===e.indexOf(s)||"innerHTML"!==s&&"cssText"!==s&&"itemprop"!==s||(r=s)}if(!r||!t[r])return!1;var u=t[r].toLowerCase();return n[r]||(n[r]={}),i[r]||(i[r]={}),!n[r][u]&&(i[r][u]=!0,!0)}).reverse().forEach(function(e){return t.push(e)});for(var o=Object.keys(i),s=0;s<o.length;s+=1){var c=o[s],u=a({},n[c],i[c]);n[c]=u}return t},[]).reverse()},O=function(t,e){if(Array.isArray(t)&&t.length)for(var r=0;r<t.length;r+=1)if(t[r][e])return!0;return!1},S=function(t){return Array.isArray(t)?t.join(""):t},E=function(t,e){return Array.isArray(t)?t.reduce(function(t,r){return function(t,e){for(var r=Object.keys(t),n=0;n<r.length;n+=1)if(e[r[n]]&&e[r[n]].includes(t[r[n]]))return!0;return!1}(r,e)?t.priority.push(r):t.default.push(r),t},{priority:[],default:[]}):{default:t}},I=function(t,e){var r;return a({},t,((r={})[e]=void 0,r))},P=[l.NOSCRIPT,l.SCRIPT,l.STYLE],w=function(t,e){return void 0===e&&(e=!0),!1===e?String(t):String(t).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},x=function(t){return Object.keys(t).reduce(function(e,r){var n=void 0!==t[r]?r+'="'+t[r]+'"':""+r;return e?e+" "+n:n},"")},L=function(t,e){return void 0===e&&(e={}),Object.keys(t).reduce(function(e,r){return e[m[r]||r]=t[r],e},e)},j=function(e,r){return r.map(function(r,n){var i,o=((i={key:n})["data-rh"]=!0,i);return Object.keys(r).forEach(function(t){var e=m[t]||t;"innerHTML"===e||"cssText"===e?o.dangerouslySetInnerHTML={__html:r.innerHTML||r.cssText}:o[e]=r[t]}),react__WEBPACK_IMPORTED_MODULE_0__.createElement(e,o)})},M=function(e,r,n){switch(e){case l.TITLE:return{toComponent:function(){return n=r.titleAttributes,(i={key:e=r.title})["data-rh"]=!0,o=L(n,i),[react__WEBPACK_IMPORTED_MODULE_0__.createElement(l.TITLE,o,e)];var e,n,i,o},toString:function(){return function(t,e,r,n){var i=x(r),o=S(e);return i?"<"+t+' data-rh="true" '+i+">"+w(o,n)+"</"+t+">":"<"+t+' data-rh="true">'+w(o,n)+"</"+t+">"}(e,r.title,r.titleAttributes,n)}};case"bodyAttributes":case"htmlAttributes":return{toComponent:function(){return L(r)},toString:function(){return x(r)}};default:return{toComponent:function(){return j(e,r)},toString:function(){return function(t,e,r){return e.reduce(function(e,n){var i=Object.keys(n).filter(function(t){return!("innerHTML"===t||"cssText"===t)}).reduce(function(t,e){var i=void 0===n[e]?e:e+'="'+w(n[e],r)+'"';return t?t+" "+i:i},""),o=n.innerHTML||n.cssText||"",a=-1===P.indexOf(t);return e+"<"+t+' data-rh="true" '+i+(a?"/>":">"+o+"</"+t+">")},"")}(e,r,n)}}}},k=function(t){var e=t.baseTag,r=t.bodyAttributes,n=t.encode,i=t.htmlAttributes,o=t.noscriptTags,a=t.styleTags,s=t.title,c=void 0===s?"":s,u=t.titleAttributes,h=t.linkTags,m=t.metaTags,y=t.scriptTags,T={toComponent:function(){},toString:function(){return""}};if(t.prioritizeSeoTags){var g=function(t){var e=t.linkTags,r=t.scriptTags,n=t.encode,i=E(t.metaTags,d),o=E(e,p),a=E(r,f);return{priorityMethods:{toComponent:function(){return[].concat(j(l.META,i.priority),j(l.LINK,o.priority),j(l.SCRIPT,a.priority))},toString:function(){return M(l.META,i.priority,n)+" "+M(l.LINK,o.priority,n)+" "+M(l.SCRIPT,a.priority,n)}},metaTags:i.default,linkTags:o.default,scriptTags:a.default}}(t);T=g.priorityMethods,h=g.linkTags,m=g.metaTags,y=g.scriptTags}return{priority:T,base:M(l.BASE,e,n),bodyAttributes:M("bodyAttributes",r,n),htmlAttributes:M("htmlAttributes",i,n),link:M(l.LINK,h,n),meta:M(l.META,m,n),noscript:M(l.NOSCRIPT,o,n),script:M(l.SCRIPT,y,n),style:M(l.STYLE,a,n),title:M(l.TITLE,{title:c,titleAttributes:u},n)}},H=[],N=function(t,e){var r=this;void 0===e&&(e="undefined"!=typeof document),this.instances=[],this.value={setHelmet:function(t){r.context.helmet=t},helmetInstances:{get:function(){return r.canUseDOM?H:r.instances},add:function(t){(r.canUseDOM?H:r.instances).push(t)},remove:function(t){var e=(r.canUseDOM?H:r.instances).indexOf(t);(r.canUseDOM?H:r.instances).splice(e,1)}}},this.context=t,this.canUseDOM=e,e||(t.helmet=k({baseTag:[],bodyAttributes:{},encodeSpecialCharacters:!0,htmlAttributes:{},linkTags:[],metaTags:[],noscriptTags:[],scriptTags:[],styleTags:[],title:"",titleAttributes:{}}))},R=react__WEBPACK_IMPORTED_MODULE_0__.createContext({}),D=prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({setHelmet:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),helmetInstances:prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({get:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),add:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),remove:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().func)})}),U="undefined"!=typeof document,q=/*#__PURE__*/function(e){function r(t){var n;return(n=e.call(this,t)||this).helmetData=new N(n.props.context,r.canUseDOM),n}return s(r,e),r.prototype.render=function(){/*#__PURE__*/return react__WEBPACK_IMPORTED_MODULE_0__.createElement(R.Provider,{value:this.helmetData.value},this.props.children)},r}(react__WEBPACK_IMPORTED_MODULE_0__.Component);q.canUseDOM=U,q.propTypes={context:prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape({helmet:prop_types__WEBPACK_IMPORTED_MODULE_4___default().shape()}),children:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().node.isRequired)},q.defaultProps={context:{}},q.displayName="HelmetProvider";var Y=function(t,e){var r,n=document.head||document.querySelector(l.HEAD),i=n.querySelectorAll(t+"[data-rh]"),o=[].slice.call(i),a=[];return e&&e.length&&e.forEach(function(e){var n=document.createElement(t);for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&("innerHTML"===i?n.innerHTML=e.innerHTML:"cssText"===i?n.styleSheet?n.styleSheet.cssText=e.cssText:n.appendChild(document.createTextNode(e.cssText)):n.setAttribute(i,void 0===e[i]?"":e[i]));n.setAttribute("data-rh","true"),o.some(function(t,e){return r=e,n.isEqualNode(t)})?o.splice(r,1):a.push(n)}),o.forEach(function(t){return t.parentNode.removeChild(t)}),a.forEach(function(t){return n.appendChild(t)}),{oldTags:o,newTags:a}},B=function(t,e){var r=document.getElementsByTagName(t)[0];if(r){for(var n=r.getAttribute("data-rh"),i=n?n.split(","):[],o=[].concat(i),a=Object.keys(e),s=0;s<a.length;s+=1){var c=a[s],u=e[c]||"";r.getAttribute(c)!==u&&r.setAttribute(c,u),-1===i.indexOf(c)&&i.push(c);var l=o.indexOf(c);-1!==l&&o.splice(l,1)}for(var p=o.length-1;p>=0;p-=1)r.removeAttribute(o[p]);i.length===o.length?r.removeAttribute("data-rh"):r.getAttribute("data-rh")!==a.join(",")&&r.setAttribute("data-rh",a.join(","))}},K=function(t,e){var r=t.baseTag,n=t.htmlAttributes,i=t.linkTags,o=t.metaTags,a=t.noscriptTags,s=t.onChangeClientState,c=t.scriptTags,u=t.styleTags,p=t.title,f=t.titleAttributes;B(l.BODY,t.bodyAttributes),B(l.HTML,n),function(t,e){void 0!==t&&document.title!==t&&(document.title=S(t)),B(l.TITLE,e)}(p,f);var d={baseTag:Y(l.BASE,r),linkTags:Y(l.LINK,i),metaTags:Y(l.META,o),noscriptTags:Y(l.NOSCRIPT,a),scriptTags:Y(l.SCRIPT,c),styleTags:Y(l.STYLE,u)},h={},m={};Object.keys(d).forEach(function(t){var e=d[t],r=e.newTags,n=e.oldTags;r.length&&(h[t]=r),n.length&&(m[t]=d[t].oldTags)}),e&&e(),s(t,h,m)},_=null,z=/*#__PURE__*/function(t){function e(){for(var e,r=arguments.length,n=new Array(r),i=0;i<r;i++)n[i]=arguments[i];return(e=t.call.apply(t,[this].concat(n))||this).rendered=!1,e}s(e,t);var r=e.prototype;return r.shouldComponentUpdate=function(t){return!shallowequal__WEBPACK_IMPORTED_MODULE_3___default()(t,this.props)},r.componentDidUpdate=function(){this.emitChange()},r.componentWillUnmount=function(){this.props.context.helmetInstances.remove(this),this.emitChange()},r.emitChange=function(){var t,e,r=this.props.context,n=r.setHelmet,i=null,o=(t=r.helmetInstances.get().map(function(t){var e=a({},t.props);return delete e.context,e}),{baseTag:A(["href"],t),bodyAttributes:v("bodyAttributes",t),defer:T(t,"defer"),encode:T(t,"encodeSpecialCharacters"),htmlAttributes:v("htmlAttributes",t),linkTags:C(l.LINK,["rel","href"],t),metaTags:C(l.META,["name","charset","http-equiv","property","itemprop"],t),noscriptTags:C(l.NOSCRIPT,["innerHTML"],t),onChangeClientState:b(t),scriptTags:C(l.SCRIPT,["src","innerHTML"],t),styleTags:C(l.STYLE,["cssText"],t),title:g(t),titleAttributes:v("titleAttributes",t),prioritizeSeoTags:O(t,"prioritizeSeoTags")});q.canUseDOM?(e=o,_&&cancelAnimationFrame(_),e.defer?_=requestAnimationFrame(function(){K(e,function(){_=null})}):(K(e),_=null)):k&&(i=k(o)),n(i)},r.init=function(){this.rendered||(this.rendered=!0,this.props.context.helmetInstances.add(this),this.emitChange())},r.render=function(){return this.init(),null},e}(react__WEBPACK_IMPORTED_MODULE_0__.Component);z.propTypes={context:D.isRequired},z.displayName="HelmetDispatcher";var F=["children"],G=["children"],W=/*#__PURE__*/function(e){function r(){return e.apply(this,arguments)||this}s(r,e);var o=r.prototype;return o.shouldComponentUpdate=function(t){return!react_fast_compare__WEBPACK_IMPORTED_MODULE_1___default()(I(this.props,"helmetData"),I(t,"helmetData"))},o.mapNestedChildrenToProps=function(t,e){if(!e)return null;switch(t.type){case l.SCRIPT:case l.NOSCRIPT:return{innerHTML:e};case l.STYLE:return{cssText:e};default:throw new Error("<"+t.type+" /> elements are self-closing and can not contain children. Refer to our API for more information.")}},o.flattenArrayTypeChildren=function(t){var e,r=t.child,n=t.arrayTypeChildren;return a({},n,((e={})[r.type]=[].concat(n[r.type]||[],[a({},t.newChildProps,this.mapNestedChildrenToProps(r,t.nestedChildren))]),e))},o.mapObjectTypeChildren=function(t){var e,r,n=t.child,i=t.newProps,o=t.newChildProps,s=t.nestedChildren;switch(n.type){case l.TITLE:return a({},i,((e={})[n.type]=s,e.titleAttributes=a({},o),e));case l.BODY:return a({},i,{bodyAttributes:a({},o)});case l.HTML:return a({},i,{htmlAttributes:a({},o)});default:return a({},i,((r={})[n.type]=a({},o),r))}},o.mapArrayTypeChildrenToProps=function(t,e){var r=a({},e);return Object.keys(t).forEach(function(e){var n;r=a({},r,((n={})[e]=t[e],n))}),r},o.warnOnInvalidChildren=function(t,e){return invariant__WEBPACK_IMPORTED_MODULE_2___default()(h.some(function(e){return t.type===e}),"function"==typeof t.type?"You may be attempting to nest <Helmet> components within each other, which is not allowed. Refer to our API for more information.":"Only elements types "+h.join(", ")+" are allowed. Helmet does not support rendering <"+t.type+"> elements. Refer to our API for more information."),invariant__WEBPACK_IMPORTED_MODULE_2___default()(!e||"string"==typeof e||Array.isArray(e)&&!e.some(function(t){return"string"!=typeof t}),"Helmet expects a string as a child of <"+t.type+">. Did you forget to wrap your children in braces? ( <"+t.type+">{``}</"+t.type+"> ) Refer to our API for more information."),!0},o.mapChildrenToProps=function(e,r){var n=this,i={};return react__WEBPACK_IMPORTED_MODULE_0__.Children.forEach(e,function(t){if(t&&t.props){var e=t.props,o=e.children,a=u(e,F),s=Object.keys(a).reduce(function(t,e){return t[y[e]||e]=a[e],t},{}),c=t.type;switch("symbol"==typeof c?c=c.toString():n.warnOnInvalidChildren(t,o),c){case l.FRAGMENT:r=n.mapChildrenToProps(o,r);break;case l.LINK:case l.META:case l.NOSCRIPT:case l.SCRIPT:case l.STYLE:i=n.flattenArrayTypeChildren({child:t,arrayTypeChildren:i,newChildProps:s,nestedChildren:o});break;default:r=n.mapObjectTypeChildren({child:t,newProps:r,newChildProps:s,nestedChildren:o})}}}),this.mapArrayTypeChildrenToProps(i,r)},o.render=function(){var e=this.props,r=e.children,n=u(e,G),i=a({},n),o=n.helmetData;return r&&(i=this.mapChildrenToProps(r,i)),!o||o instanceof N||(o=new N(o.context,o.instances)),o?/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(z,a({},i,{context:o.value,helmetData:void 0})):/*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(R.Consumer,null,function(e){/*#__PURE__*/return react__WEBPACK_IMPORTED_MODULE_0__.createElement(z,a({},i,{context:e}))})},r}(react__WEBPACK_IMPORTED_MODULE_0__.Component);W.propTypes={base:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().object),bodyAttributes:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().object),children:prop_types__WEBPACK_IMPORTED_MODULE_4___default().oneOfType([prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)),(prop_types__WEBPACK_IMPORTED_MODULE_4___default().node)]),defaultTitle:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().string),defer:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().bool),encodeSpecialCharacters:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().bool),htmlAttributes:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().object),link:prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().object)),meta:prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().object)),noscript:prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().object)),onChangeClientState:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().func),script:prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().object)),style:prop_types__WEBPACK_IMPORTED_MODULE_4___default().arrayOf((prop_types__WEBPACK_IMPORTED_MODULE_4___default().object)),title:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().string),titleAttributes:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().object),titleTemplate:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().string),prioritizeSeoTags:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().bool),helmetData:(prop_types__WEBPACK_IMPORTED_MODULE_4___default().object)},W.defaultProps={defer:!0,encodeSpecialCharacters:!0,prioritizeSeoTags:!1},W.displayName="Helmet";
-//# sourceMappingURL=index.module.js.map
-
-
-/***/ }),
-
-/***/ 69921:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-/** @license React v16.13.1
- * react-is.production.min.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-
-var b="function"===typeof Symbol&&Symbol.for,c=b?Symbol.for("react.element"):60103,d=b?Symbol.for("react.portal"):60106,e=b?Symbol.for("react.fragment"):60107,f=b?Symbol.for("react.strict_mode"):60108,g=b?Symbol.for("react.profiler"):60114,h=b?Symbol.for("react.provider"):60109,k=b?Symbol.for("react.context"):60110,l=b?Symbol.for("react.async_mode"):60111,m=b?Symbol.for("react.concurrent_mode"):60111,n=b?Symbol.for("react.forward_ref"):60112,p=b?Symbol.for("react.suspense"):60113,q=b?
-Symbol.for("react.suspense_list"):60120,r=b?Symbol.for("react.memo"):60115,t=b?Symbol.for("react.lazy"):60116,v=b?Symbol.for("react.block"):60121,w=b?Symbol.for("react.fundamental"):60117,x=b?Symbol.for("react.responder"):60118,y=b?Symbol.for("react.scope"):60119;
-function z(a){if("object"===typeof a&&null!==a){var u=a.$$typeof;switch(u){case c:switch(a=a.type,a){case l:case m:case e:case g:case f:case p:return a;default:switch(a=a&&a.$$typeof,a){case k:case n:case t:case r:case h:return a;default:return u}}case d:return u}}}function A(a){return z(a)===m}exports.AsyncMode=l;exports.ConcurrentMode=m;exports.ContextConsumer=k;exports.ContextProvider=h;exports.Element=c;exports.ForwardRef=n;exports.Fragment=e;exports.Lazy=t;exports.Memo=r;exports.Portal=d;
-exports.Profiler=g;exports.StrictMode=f;exports.Suspense=p;exports.isAsyncMode=function(a){return A(a)||z(a)===l};exports.isConcurrentMode=A;exports.isContextConsumer=function(a){return z(a)===k};exports.isContextProvider=function(a){return z(a)===h};exports.isElement=function(a){return"object"===typeof a&&null!==a&&a.$$typeof===c};exports.isForwardRef=function(a){return z(a)===n};exports.isFragment=function(a){return z(a)===e};exports.isLazy=function(a){return z(a)===t};
-exports.isMemo=function(a){return z(a)===r};exports.isPortal=function(a){return z(a)===d};exports.isProfiler=function(a){return z(a)===g};exports.isStrictMode=function(a){return z(a)===f};exports.isSuspense=function(a){return z(a)===p};
-exports.isValidElementType=function(a){return"string"===typeof a||"function"===typeof a||a===e||a===m||a===g||a===f||a===p||a===q||"object"===typeof a&&null!==a&&(a.$$typeof===t||a.$$typeof===r||a.$$typeof===h||a.$$typeof===k||a.$$typeof===n||a.$$typeof===w||a.$$typeof===x||a.$$typeof===y||a.$$typeof===v)};exports.typeOf=z;
-
-
-/***/ }),
-
-/***/ 59864:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-if (true) {
-  module.exports = __webpack_require__(69921);
-} else {}
-
-
-/***/ }),
-
-/***/ 20252:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-
-var _interopRequireDefault = __webpack_require__(64836);
-
-exports.__esModule = true;
-exports["default"] = exports.defaultOptions = void 0;
-
-var _extends2 = _interopRequireDefault(__webpack_require__(10434));
-
-var _createClass2 = _interopRequireDefault(__webpack_require__(89728));
-
-var _fs = _interopRequireDefault(__webpack_require__(57147));
-
-var _path = _interopRequireDefault(__webpack_require__(71017));
-
-var _url = _interopRequireDefault(__webpack_require__(57310));
-
-var _utils = __webpack_require__(67700);
-
-var PLUGIN_NAME = 'ReactLoadableSSRAddon';
-
-var WEBPACK_VERSION = (__webpack_require__(37589)/* .version */ .i8);
-
-var WEBPACK_5 = WEBPACK_VERSION.startsWith('5.');
-var defaultOptions = {
-  filename: 'assets-manifest.json',
-  integrity: false,
-  integrityAlgorithms: ['sha256', 'sha384', 'sha512'],
-  integrityPropertyName: 'integrity'
-};
-exports.defaultOptions = defaultOptions;
-
-var ReactLoadableSSRAddon = function () {
-  function ReactLoadableSSRAddon(options) {
-    if (options === void 0) {
-      options = defaultOptions;
-    }
-
-    this.options = (0, _extends2["default"])({}, defaultOptions, options);
-    this.compiler = null;
-    this.stats = null;
-    this.entrypoints = new Set();
-    this.assetsByName = new Map();
-    this.manifest = {};
-  }
-
-  var _proto = ReactLoadableSSRAddon.prototype;
-
-  _proto.getAssets = function getAssets(assetsChunk) {
-    for (var i = 0; i < assetsChunk.length; i += 1) {
-      var chunk = assetsChunk[i];
-      var id = chunk.id,
-          files = chunk.files,
-          _chunk$siblings = chunk.siblings,
-          siblings = _chunk$siblings === void 0 ? [] : _chunk$siblings,
-          hash = chunk.hash;
-      var keys = this.getChunkOrigin(chunk);
-
-      for (var j = 0; j < keys.length; j += 1) {
-        this.assetsByName.set(keys[j], {
-          id: id,
-          files: files,
-          hash: hash,
-          siblings: siblings
-        });
-      }
-    }
-
-    return this.assetsByName;
-  };
-
-  _proto.getEntrypoints = function getEntrypoints(entrypoints) {
-    var entry = Object.keys(entrypoints);
-
-    for (var i = 0; i < entry.length; i += 1) {
-      this.entrypoints.add(entry[i]);
-    }
-
-    return this.entrypoints;
-  };
-
-  _proto.getChunkOrigin = function getChunkOrigin(_ref) {
-    var id = _ref.id,
-        names = _ref.names,
-        modules = _ref.modules;
-    var origins = new Set();
-
-    if (!WEBPACK_5) {
-      for (var i = 0; i < modules.length; i += 1) {
-        var reasons = modules[i].reasons;
-
-        for (var j = 0; j < reasons.length; j += 1) {
-          var reason = reasons[j];
-          var type = reason.dependency ? reason.dependency.type : null;
-          var userRequest = reason.dependency ? reason.dependency.userRequest : null;
-
-          if (type === 'import()') {
-            origins.add(userRequest);
-          }
-        }
-      }
-    }
-
-    if (origins.size === 0) {
-      return [names[0] || id];
-    }
-
-    if (this.entrypoints.has(names[0])) {
-      origins.add(names[0]);
-    }
-
-    return Array.from(origins);
-  };
-
-  _proto.apply = function apply(compiler) {
-    this.compiler = compiler;
-    compiler.hooks.emit.tapAsync(PLUGIN_NAME, this.handleEmit.bind(this));
-  };
-
-  _proto.getMinimalStatsChunks = function getMinimalStatsChunks(compilationChunks, chunkGraph) {
-    var _this = this;
-
-    var compareId = function compareId(a, b) {
-      if (typeof a !== typeof b) {
-        return typeof a < typeof b ? -1 : 1;
-      }
-
-      if (a < b) return -1;
-      if (a > b) return 1;
-      return 0;
-    };
-
-    return this.ensureArray(compilationChunks).reduce(function (chunks, chunk) {
-      var siblings = new Set();
-
-      if (chunk.groupsIterable) {
-        var chunkGroups = Array.from(chunk.groupsIterable);
-
-        for (var i = 0; i < chunkGroups.length; i += 1) {
-          var group = Array.from(chunkGroups[i].chunks);
-
-          for (var j = 0; j < group.length; j += 1) {
-            var sibling = group[j];
-            if (sibling !== chunk) siblings.add(sibling.id);
-          }
-        }
-      }
-
-      chunk.ids.forEach(function (id) {
-        chunks.push({
-          id: id,
-          names: chunk.name ? [chunk.name] : [],
-          files: _this.ensureArray(chunk.files).slice(),
-          hash: chunk.renderedHash,
-          siblings: Array.from(siblings).sort(compareId),
-          modules: WEBPACK_5 ? chunkGraph.getChunkModules(chunk) : chunk.getModules()
-        });
-      });
-      return chunks;
-    }, []);
-  };
-
-  _proto.handleEmit = function handleEmit(compilation, callback) {
-    this.stats = compilation.getStats().toJson({
-      all: false,
-      entrypoints: true
-    }, true);
-    this.options.publicPath = (compilation.outputOptions ? compilation.outputOptions.publicPath : compilation.options.output.publicPath) || '';
-    this.getEntrypoints(this.stats.entrypoints);
-    this.getAssets(this.getMinimalStatsChunks(compilation.chunks, compilation.chunkGraph));
-    this.processAssets(compilation.assets);
-    this.writeAssetsFile();
-    callback();
-  };
-
-  _proto.processAssets = function processAssets(originAssets) {
-    var _this2 = this;
-
-    var assets = {};
-    var origins = {};
-    var entrypoints = this.entrypoints;
-    this.assetsByName.forEach(function (value, key) {
-      var files = value.files,
-          id = value.id,
-          siblings = value.siblings,
-          hash = value.hash;
-
-      if (!origins[key]) {
-        origins[key] = [];
-      }
-
-      siblings.push(id);
-
-      for (var i = 0; i < siblings.length; i += 1) {
-        var sibling = siblings[i];
-
-        if (!origins[key].includes(sibling)) {
-          origins[key].push(sibling);
-        }
-      }
-
-      for (var _i = 0; _i < files.length; _i += 1) {
-        var file = files[_i];
-        var currentAsset = originAssets[file] || {};
-        var ext = (0, _utils.getFileExtension)(file).replace(/^\.+/, '').toLowerCase();
-
-        if (!assets[id]) {
-          assets[id] = {};
-        }
-
-        if (!assets[id][ext]) {
-          assets[id][ext] = [];
-        }
-
-        if (!(0, _utils.hasEntry)(assets[id][ext], 'file', file)) {
-          var shouldComputeIntegrity = Object.keys(currentAsset) && _this2.options.integrity && !currentAsset[_this2.options.integrityPropertyName];
-
-          if (shouldComputeIntegrity) {
-            currentAsset[_this2.options.integrityPropertyName] = (0, _utils.computeIntegrity)(_this2.options.integrityAlgorithms, currentAsset.source());
-          }
-
-          assets[id][ext].push({
-            file: file,
-            hash: hash,
-            publicPath: _url["default"].resolve(_this2.options.publicPath || '', file),
-            integrity: currentAsset[_this2.options.integrityPropertyName]
-          });
-        }
-      }
-    });
-    this.manifest = {
-      entrypoints: Array.from(entrypoints),
-      origins: origins,
-      assets: assets
-    };
-  };
-
-  _proto.writeAssetsFile = function writeAssetsFile() {
-    var filePath = this.manifestOutputPath;
-
-    var fileDir = _path["default"].dirname(filePath);
-
-    var json = JSON.stringify(this.manifest, null, 2);
-
-    try {
-      if (!_fs["default"].existsSync(fileDir)) {
-        _fs["default"].mkdirSync(fileDir);
-      }
-    } catch (err) {
-      if (err.code !== 'EEXIST') {
-        throw err;
-      }
-    }
-
-    _fs["default"].writeFileSync(filePath, json);
-  };
-
-  _proto.ensureArray = function ensureArray(source) {
-    if (WEBPACK_5) {
-      return Array.from(source);
-    }
-
-    return source;
-  };
-
-  (0, _createClass2["default"])(ReactLoadableSSRAddon, [{
-    key: "isRequestFromDevServer",
-    get: function get() {
-      if (process.argv.some(function (arg) {
-        return arg.includes('webpack-dev-server');
-      })) {
-        return true;
-      }
-
-      var _this$compiler = this.compiler,
-          outputFileSystem = _this$compiler.outputFileSystem,
-          name = _this$compiler.outputFileSystem.constructor.name;
-      return outputFileSystem && name === 'MemoryFileSystem';
-    }
-  }, {
-    key: "manifestOutputPath",
-    get: function get() {
-      var filename = this.options.filename;
-
-      if (_path["default"].isAbsolute(filename)) {
-        return filename;
-      }
-
-      var _this$compiler2 = this.compiler,
-          outputPath = _this$compiler2.outputPath,
-          devServer = _this$compiler2.options.devServer;
-
-      if (this.isRequestFromDevServer && devServer) {
-        var devOutputPath = devServer.outputPath || outputPath || '/';
-
-        if (devOutputPath === '/') {
-          console.warn('Please use an absolute path in options.output when using webpack-dev-server.');
-          devOutputPath = this.compiler.context || process.cwd();
-        }
-
-        return _path["default"].resolve(devOutputPath, filename);
-      }
-
-      return _path["default"].resolve(outputPath, filename);
-    }
-  }]);
-  return ReactLoadableSSRAddon;
-}();
-
-var _default = ReactLoadableSSRAddon;
-exports["default"] = _default;
-
-/***/ }),
-
-/***/ 54274:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _utils = __webpack_require__(67700);
-
-function getBundles(manifest, chunks) {
-  if (!manifest || !chunks) {
-    return {};
-  }
-
-  var assetsKey = chunks.reduce(function (key, chunk) {
-    if (manifest.origins[chunk]) {
-      key = (0, _utils.unique)([].concat(key, manifest.origins[chunk]));
-    }
-
-    return key;
-  }, []);
-  return assetsKey.reduce(function (bundle, asset) {
-    Object.keys(manifest.assets[asset] || {}).forEach(function (key) {
-      var content = manifest.assets[asset][key];
-
-      if (!bundle[key]) {
-        bundle[key] = [];
-      }
-
-      bundle[key] = (0, _utils.unique)([].concat(bundle[key], content));
-    });
-    return bundle;
-  }, {});
-}
-
-var _default = getBundles;
-exports["default"] = _default;
-
-/***/ }),
-
-/***/ 80563:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var _interopRequireDefault = __webpack_require__(64836);
-
-var _ReactLoadableSSRAddon = _interopRequireDefault(__webpack_require__(20252));
-
-var _getBundles = _interopRequireDefault(__webpack_require__(54274));
-
-module.exports = _ReactLoadableSSRAddon["default"];
-module.exports.getBundles = _getBundles["default"];
-
-/***/ }),
-
-/***/ 23208:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-
-var _interopRequireDefault = __webpack_require__(64836);
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-var _crypto = _interopRequireDefault(__webpack_require__(6113));
-
-function computeIntegrity(algorithms, source) {
-  return Array.isArray(algorithms) ? algorithms.map(function (algorithm) {
-    var hash = _crypto["default"].createHash(algorithm).update(source, 'utf8').digest('base64');
-
-    return algorithm + "-" + hash;
-  }).join(' ') : '';
-}
-
-var _default = computeIntegrity;
-exports["default"] = _default;
-
-/***/ }),
-
-/***/ 20773:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-
-exports.__esModule = true;
-exports["default"] = void 0;
-
-function getFileExtension(filename) {
-  if (!filename || typeof filename !== 'string') {
-    return '';
-  }
-
-  var fileExtRegex = /\.\w{2,4}\.(?:map|gz)$|\.\w+$/i;
-  var name = filename.split(/[?#]/)[0];
-  var ext = name.match(fileExtRegex);
-  return ext && ext.length ? ext[0] : '';
-}
-
-var _default = getFileExtension;
-exports["default"] = _default;
-
-/***/ }),
-
-/***/ 54626:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-
-exports.__esModule = true;
-exports["default"] = hasEntry;
-
-function hasEntry(target, targetKey, searchFor) {
-  if (!target) {
-    return false;
-  }
-
-  for (var i = 0; i < target.length; i += 1) {
-    var file = target[i][targetKey];
-
-    if (file === searchFor) {
-      return true;
-    }
-  }
-
-  return false;
-}
-
-/***/ }),
-
-/***/ 67700:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-
-var _interopRequireDefault = __webpack_require__(64836);
-
-exports.__esModule = true;
-exports.hasEntry = exports.unique = exports.getFileExtension = exports.computeIntegrity = void 0;
-
-var _computeIntegrity = _interopRequireDefault(__webpack_require__(23208));
-
-exports.computeIntegrity = _computeIntegrity["default"];
-
-var _getFileExtension = _interopRequireDefault(__webpack_require__(20773));
-
-exports.getFileExtension = _getFileExtension["default"];
-
-var _unique = _interopRequireDefault(__webpack_require__(69121));
-
-exports.unique = _unique["default"];
-
-var _hasEntry = _interopRequireDefault(__webpack_require__(54626));
-
-exports.hasEntry = _hasEntry["default"];
-
-/***/ }),
-
-/***/ 69121:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-
-exports.__esModule = true;
-exports["default"] = unique;
-
-function unique(array) {
-  return array.filter(function (elem, pos, arr) {
-    return arr.indexOf(elem) === pos;
-  });
-}
-
-/***/ }),
-
-/***/ 68356:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; subClass.__proto__ = superClass; }
-
-function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
-
-function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
-
-function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
-
-var React = __webpack_require__(67294);
-
-var PropTypes = __webpack_require__(45697);
-
-var ALL_INITIALIZERS = [];
-var READY_INITIALIZERS = [];
-
-function isWebpackReady(getModuleIds) {
-  if (false) {}
-
-  return getModuleIds().every(function (moduleId) {
-    return typeof moduleId !== "undefined" && typeof __webpack_require__.m[moduleId] !== "undefined";
-  });
-}
-
-function load(loader) {
-  var promise = loader();
-  var state = {
-    loading: true,
-    loaded: null,
-    error: null
-  };
-  state.promise = promise.then(function (loaded) {
-    state.loading = false;
-    state.loaded = loaded;
-    return loaded;
-  }).catch(function (err) {
-    state.loading = false;
-    state.error = err;
-    throw err;
-  });
-  return state;
-}
-
-function loadMap(obj) {
-  var state = {
-    loading: false,
-    loaded: {},
-    error: null
-  };
-  var promises = [];
-
-  try {
-    Object.keys(obj).forEach(function (key) {
-      var result = load(obj[key]);
-
-      if (!result.loading) {
-        state.loaded[key] = result.loaded;
-        state.error = result.error;
-      } else {
-        state.loading = true;
-      }
-
-      promises.push(result.promise);
-      result.promise.then(function (res) {
-        state.loaded[key] = res;
-      }).catch(function (err) {
-        state.error = err;
-      });
-    });
-  } catch (err) {
-    state.error = err;
-  }
-
-  state.promise = Promise.all(promises).then(function (res) {
-    state.loading = false;
-    return res;
-  }).catch(function (err) {
-    state.loading = false;
-    throw err;
-  });
-  return state;
-}
-
-function resolve(obj) {
-  return obj && obj.__esModule ? obj.default : obj;
-}
-
-function render(loaded, props) {
-  return React.createElement(resolve(loaded), props);
-}
-
-function createLoadableComponent(loadFn, options) {
-  var _class, _temp;
-
-  if (!options.loading) {
-    throw new Error("react-loadable requires a `loading` component");
-  }
-
-  var opts = _extends({
-    loader: null,
-    loading: null,
-    delay: 200,
-    timeout: null,
-    render: render,
-    webpack: null,
-    modules: null
-  }, options);
-
-  var res = null;
-
-  function init() {
-    if (!res) {
-      res = loadFn(opts.loader);
-    }
-
-    return res.promise;
-  }
-
-  ALL_INITIALIZERS.push(init);
-
-  if (typeof opts.webpack === "function") {
-    READY_INITIALIZERS.push(function () {
-      if (isWebpackReady(opts.webpack)) {
-        return init();
-      }
-    });
-  }
-
-  return _temp = _class =
-  /*#__PURE__*/
-  function (_React$Component) {
-    _inheritsLoose(LoadableComponent, _React$Component);
-
-    function LoadableComponent(props) {
-      var _this;
-
-      _this = _React$Component.call(this, props) || this;
-
-      _defineProperty(_assertThisInitialized(_assertThisInitialized(_this)), "retry", function () {
-        _this.setState({
-          error: null,
-          loading: true,
-          timedOut: false
-        });
-
-        res = loadFn(opts.loader);
-
-        _this._loadModule();
-      });
-
-      init();
-      _this.state = {
-        error: res.error,
-        pastDelay: false,
-        timedOut: false,
-        loading: res.loading,
-        loaded: res.loaded
-      };
-      return _this;
-    }
-
-    LoadableComponent.preload = function preload() {
-      return init();
-    };
-
-    var _proto = LoadableComponent.prototype;
-
-    _proto.UNSAFE_componentWillMount = function UNSAFE_componentWillMount() {
-      this._loadModule();
-    };
-
-    _proto.componentDidMount = function componentDidMount() {
-      this._mounted = true;
-    };
-
-    _proto._loadModule = function _loadModule() {
-      var _this2 = this;
-
-      if (this.context.loadable && Array.isArray(opts.modules)) {
-        opts.modules.forEach(function (moduleName) {
-          _this2.context.loadable.report(moduleName);
-        });
-      }
-
-      if (!res.loading) {
-        return;
-      }
-
-      var setStateWithMountCheck = function setStateWithMountCheck(newState) {
-        if (!_this2._mounted) {
-          return;
-        }
-
-        _this2.setState(newState);
-      };
-
-      if (typeof opts.delay === 'number') {
-        if (opts.delay === 0) {
-          this.setState({
-            pastDelay: true
-          });
-        } else {
-          this._delay = setTimeout(function () {
-            setStateWithMountCheck({
-              pastDelay: true
-            });
-          }, opts.delay);
-        }
-      }
-
-      if (typeof opts.timeout === "number") {
-        this._timeout = setTimeout(function () {
-          setStateWithMountCheck({
-            timedOut: true
-          });
-        }, opts.timeout);
-      }
-
-      var update = function update() {
-        setStateWithMountCheck({
-          error: res.error,
-          loaded: res.loaded,
-          loading: res.loading
-        });
-
-        _this2._clearTimeouts();
-      };
-
-      res.promise.then(function () {
-        update();
-        return null;
-      }).catch(function (err) {
-        update();
-        return null;
-      });
-    };
-
-    _proto.componentWillUnmount = function componentWillUnmount() {
-      this._mounted = false;
-
-      this._clearTimeouts();
-    };
-
-    _proto._clearTimeouts = function _clearTimeouts() {
-      clearTimeout(this._delay);
-      clearTimeout(this._timeout);
-    };
-
-    _proto.render = function render() {
-      if (this.state.loading || this.state.error) {
-        return React.createElement(opts.loading, {
-          isLoading: this.state.loading,
-          pastDelay: this.state.pastDelay,
-          timedOut: this.state.timedOut,
-          error: this.state.error,
-          retry: this.retry
-        });
-      } else if (this.state.loaded) {
-        return opts.render(this.state.loaded, this.props);
-      } else {
-        return null;
-      }
-    };
-
-    return LoadableComponent;
-  }(React.Component), _defineProperty(_class, "contextTypes", {
-    loadable: PropTypes.shape({
-      report: PropTypes.func.isRequired
-    })
-  }), _temp;
-}
-
-function Loadable(opts) {
-  return createLoadableComponent(load, opts);
-}
-
-function LoadableMap(opts) {
-  if (typeof opts.render !== "function") {
-    throw new Error("LoadableMap requires a `render(loaded, props)` function");
-  }
-
-  return createLoadableComponent(loadMap, opts);
-}
-
-Loadable.Map = LoadableMap;
-
-var Capture =
-/*#__PURE__*/
-function (_React$Component2) {
-  _inheritsLoose(Capture, _React$Component2);
-
-  function Capture() {
-    return _React$Component2.apply(this, arguments) || this;
-  }
-
-  var _proto2 = Capture.prototype;
-
-  _proto2.getChildContext = function getChildContext() {
-    return {
-      loadable: {
-        report: this.props.report
-      }
-    };
-  };
-
-  _proto2.render = function render() {
-    return React.Children.only(this.props.children);
-  };
-
-  return Capture;
-}(React.Component);
-
-_defineProperty(Capture, "propTypes", {
-  report: PropTypes.func.isRequired
-});
-
-_defineProperty(Capture, "childContextTypes", {
-  loadable: PropTypes.shape({
-    report: PropTypes.func.isRequired
-  }).isRequired
-});
-
-Loadable.Capture = Capture;
-
-function flushInitializers(initializers) {
-  var promises = [];
-
-  while (initializers.length) {
-    var init = initializers.pop();
-    promises.push(init());
-  }
-
-  return Promise.all(promises).then(function () {
-    if (initializers.length) {
-      return flushInitializers(initializers);
-    }
-  });
-}
-
-Loadable.preloadAll = function () {
-  return new Promise(function (resolve, reject) {
-    flushInitializers(ALL_INITIALIZERS).then(resolve, reject);
-  });
-};
-
-Loadable.preloadReady = function () {
-  return new Promise(function (resolve, reject) {
-    // We always will resolve, errors should be handled within loading UIs.
-    flushInitializers(READY_INITIALIZERS).then(resolve, resolve);
-  });
-};
-
-module.exports = Loadable;
-
-/***/ }),
-
-/***/ 33199:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "default": () => (/* binding */ esm),
-  "hasTranslate3DSupport": () => (/* reexport */ hasTranslate3DSupport),
-  "isTouch": () => (/* reexport */ isTouch),
-  "make2dTransformValue": () => (/* reexport */ make2dTransformValue),
-  "make3dTransformValue": () => (/* reexport */ make3dTransformValue)
-});
-
-;// CONCATENATED MODULE: ./node_modules/react-quick-pinch-zoom/node_modules/tslib/tslib.es6.mjs
-/******************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise, SuppressedError, Symbol */
-
-var extendStatics = function(d, b) {
-  extendStatics = Object.setPrototypeOf ||
-      ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-      function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
-  return extendStatics(d, b);
-};
-
-function __extends(d, b) {
-  if (typeof b !== "function" && b !== null)
-      throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-  extendStatics(d, b);
-  function __() { this.constructor = d; }
-  d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
-  __assign = Object.assign || function __assign(t) {
-      for (var s, i = 1, n = arguments.length; i < n; i++) {
-          s = arguments[i];
-          for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-      }
-      return t;
-  }
-  return __assign.apply(this, arguments);
-}
-
-function __rest(s, e) {
-  var t = {};
-  for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
-      t[p] = s[p];
-  if (s != null && typeof Object.getOwnPropertySymbols === "function")
-      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]];
-      }
-  return t;
-}
-
-function __decorate(decorators, target, key, desc) {
-  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
-  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
-  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;
-  return c > 3 && r && Object.defineProperty(target, key, r), r;
-}
-
-function __param(paramIndex, decorator) {
-  return function (target, key) { decorator(target, key, paramIndex); }
-}
-
-function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
-  function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
-  var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
-  var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
-  var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
-  var _, done = false;
-  for (var i = decorators.length - 1; i >= 0; i--) {
-      var context = {};
-      for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
-      for (var p in contextIn.access) context.access[p] = contextIn.access[p];
-      context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
-      var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
-      if (kind === "accessor") {
-          if (result === void 0) continue;
-          if (result === null || typeof result !== "object") throw new TypeError("Object expected");
-          if (_ = accept(result.get)) descriptor.get = _;
-          if (_ = accept(result.set)) descriptor.set = _;
-          if (_ = accept(result.init)) initializers.unshift(_);
-      }
-      else if (_ = accept(result)) {
-          if (kind === "field") initializers.unshift(_);
-          else descriptor[key] = _;
-      }
-  }
-  if (target) Object.defineProperty(target, contextIn.name, descriptor);
-  done = true;
-};
-
-function __runInitializers(thisArg, initializers, value) {
-  var useValue = arguments.length > 2;
-  for (var i = 0; i < initializers.length; i++) {
-      value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
-  }
-  return useValue ? value : void 0;
-};
-
-function __propKey(x) {
-  return typeof x === "symbol" ? x : "".concat(x);
-};
-
-function __setFunctionName(f, name, prefix) {
-  if (typeof name === "symbol") name = name.description ? "[".concat(name.description, "]") : "";
-  return Object.defineProperty(f, "name", { configurable: true, value: prefix ? "".concat(prefix, " ", name) : name });
-};
-
-function __metadata(metadataKey, metadataValue) {
-  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
-}
-
-function __awaiter(thisArg, _arguments, P, generator) {
-  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
-  return new (P || (P = Promise))(function (resolve, reject) {
-      function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
-      function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
-      function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
-      step((generator = generator.apply(thisArg, _arguments || [])).next());
-  });
-}
-
-function __generator(thisArg, body) {
-  var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
-  return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
-  function verb(n) { return function (v) { return step([n, v]); }; }
-  function step(op) {
-      if (f) throw new TypeError("Generator is already executing.");
-      while (g && (g = 0, op[0] && (_ = 0)), _) try {
-          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;
-          if (y = 0, t) op = [op[0] & 2, t.value];
-          switch (op[0]) {
-              case 0: case 1: t = op; break;
-              case 4: _.label++; return { value: op[1], done: false };
-              case 5: _.label++; y = op[1]; op = [0]; continue;
-              case 7: op = _.ops.pop(); _.trys.pop(); continue;
-              default:
-                  if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
-                  if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
-                  if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
-                  if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
-                  if (t[2]) _.ops.pop();
-                  _.trys.pop(); continue;
-          }
-          op = body.call(thisArg, _);
-      } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
-      if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
-  }
-}
-
-var __createBinding = Object.create ? (function(o, m, k, k2) {
-  if (k2 === undefined) k2 = k;
-  var desc = Object.getOwnPropertyDescriptor(m, k);
-  if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
-      desc = { enumerable: true, get: function() { return m[k]; } };
-  }
-  Object.defineProperty(o, k2, desc);
-}) : (function(o, m, k, k2) {
-  if (k2 === undefined) k2 = k;
-  o[k2] = m[k];
-});
-
-function __exportStar(m, o) {
-  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
-}
-
-function __values(o) {
-  var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
-  if (m) return m.call(o);
-  if (o && typeof o.length === "number") return {
-      next: function () {
-          if (o && i >= o.length) o = void 0;
-          return { value: o && o[i++], done: !o };
-      }
-  };
-  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-}
-
-function __read(o, n) {
-  var m = typeof Symbol === "function" && o[Symbol.iterator];
-  if (!m) return o;
-  var i = m.call(o), r, ar = [], e;
-  try {
-      while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-  }
-  catch (error) { e = { error: error }; }
-  finally {
-      try {
-          if (r && !r.done && (m = i["return"])) m.call(i);
-      }
-      finally { if (e) throw e.error; }
-  }
-  return ar;
-}
-
-/** @deprecated */
-function __spread() {
-  for (var ar = [], i = 0; i < arguments.length; i++)
-      ar = ar.concat(__read(arguments[i]));
-  return ar;
-}
-
-/** @deprecated */
-function __spreadArrays() {
-  for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
-  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];
-  return r;
-}
-
-function __spreadArray(to, from, pack) {
-  if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
-      if (ar || !(i in from)) {
-          if (!ar) ar = Array.prototype.slice.call(from, 0, i);
-          ar[i] = from[i];
-      }
-  }
-  return to.concat(ar || Array.prototype.slice.call(from));
-}
-
-function __await(v) {
-  return this instanceof __await ? (this.v = v, this) : new __await(v);
-}
-
-function __asyncGenerator(thisArg, _arguments, generator) {
-  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
-  var g = generator.apply(thisArg, _arguments || []), i, q = [];
-  return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
-  function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
-  function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
-  function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
-  function fulfill(value) { resume("next", value); }
-  function reject(value) { resume("throw", value); }
-  function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
-}
-
-function __asyncDelegator(o) {
-  var i, p;
-  return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
-  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; }
-}
-
-function __asyncValues(o) {
-  if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
-  var m = o[Symbol.asyncIterator], i;
-  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);
-  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); }); }; }
-  function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
-}
-
-function __makeTemplateObject(cooked, raw) {
-  if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
-  return cooked;
-};
-
-var __setModuleDefault = Object.create ? (function(o, v) {
-  Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-  o["default"] = v;
-};
-
-function __importStar(mod) {
-  if (mod && mod.__esModule) return mod;
-  var result = {};
-  if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-  __setModuleDefault(result, mod);
-  return result;
-}
-
-function __importDefault(mod) {
-  return (mod && mod.__esModule) ? mod : { default: mod };
-}
-
-function __classPrivateFieldGet(receiver, state, kind, f) {
-  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
-  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");
-  return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
-}
-
-function __classPrivateFieldSet(receiver, state, value, kind, f) {
-  if (kind === "m") throw new TypeError("Private method is not writable");
-  if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
-  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");
-  return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
-}
-
-function __classPrivateFieldIn(state, receiver) {
-  if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
-  return typeof state === "function" ? receiver === state : state.has(receiver);
-}
-
-function __addDisposableResource(env, value, async) {
-  if (value !== null && value !== void 0) {
-    if (typeof value !== "object") throw new TypeError("Object expected.");
-    var dispose;
-    if (async) {
-        if (!Symbol.asyncDispose) throw new TypeError("Symbol.asyncDispose is not defined.");
-        dispose = value[Symbol.asyncDispose];
-    }
-    if (dispose === void 0) {
-        if (!Symbol.dispose) throw new TypeError("Symbol.dispose is not defined.");
-        dispose = value[Symbol.dispose];
-    }
-    if (typeof dispose !== "function") throw new TypeError("Object not disposable.");
-    env.stack.push({ value: value, dispose: dispose, async: async });
-  }
-  else if (async) {
-    env.stack.push({ async: true });
-  }
-  return value;
-}
-
-var _SuppressedError = typeof SuppressedError === "function" ? SuppressedError : function (error, suppressed, message) {
-  var e = new Error(message);
-  return e.name = "SuppressedError", e.error = error, e.suppressed = suppressed, e;
-};
-
-function __disposeResources(env) {
-  function fail(e) {
-    env.error = env.hasError ? new _SuppressedError(e, env.error, "An error was suppressed during disposal.") : e;
-    env.hasError = true;
-  }
-  function next() {
-    while (env.stack.length) {
-      var rec = env.stack.pop();
-      try {
-        var result = rec.dispose && rec.dispose.call(rec.value);
-        if (rec.async) return Promise.resolve(result).then(next, function(e) { fail(e); return next(); });
-      }
-      catch (e) {
-          fail(e);
-      }
-    }
-    if (env.hasError) throw env.error;
-  }
-  return next();
-}
-
-/* harmony default export */ const tslib_es6 = ({
-  __extends,
-  __assign,
-  __rest,
-  __decorate,
-  __param,
-  __metadata,
-  __awaiter,
-  __generator,
-  __createBinding,
-  __exportStar,
-  __values,
-  __read,
-  __spread,
-  __spreadArrays,
-  __spreadArray,
-  __await,
-  __asyncGenerator,
-  __asyncDelegator,
-  __asyncValues,
-  __makeTemplateObject,
-  __importStar,
-  __importDefault,
-  __classPrivateFieldGet,
-  __classPrivateFieldSet,
-  __classPrivateFieldIn,
-  __addDisposableResource,
-  __disposeResources,
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-;// CONCATENATED MODULE: ./node_modules/react-quick-pinch-zoom/esm/PinchZoom/styles.css.js
-var styleRoot = 'kvfysmfp';
-var styleChild = 'ufhsfnkm';
-var styles = '.'
-  .concat(styleRoot, '{overflow:hidden;touch-action:none}.')
-  .concat(styleChild, '{transform-origin: 0 0}');
-
-;// CONCATENATED MODULE: ./node_modules/react-quick-pinch-zoom/esm/utils.js
-var isSsr = typeof window === 'undefined';
-var isTouch = function () {
-    return !isSsr && ('ontouchstart' in window || navigator.maxTouchPoints > 0);
-};
-var make2dTransformValue = function (_a) {
-    var x = _a.x, y = _a.y, scale = _a.scale;
-    return "scale(".concat(scale, ") translate(").concat(x, "px, ").concat(y, "px)");
-};
-var make3dTransformValue = function (_a) {
-    var x = _a.x, y = _a.y, scale = _a.scale;
-    return "scale3d(".concat(scale, ",").concat(scale, ", 1) translate3d(").concat(x, "px, ").concat(y, "px, 0)");
-};
-var hasTranslate3DSupport = function () {
-    var css = !isSsr && window.CSS;
-    return css && css.supports && css.supports('transform', 'translate3d(0,0,0)');
-};
-
-;// CONCATENATED MODULE: ./node_modules/react-quick-pinch-zoom/esm/PinchZoom/getOffsetBounds.js
-var min = Math.min,
-  max = Math.max;
-function getOffsetBounds(_a) {
-  var containerDimension = _a.containerDimension,
-    childDimension = _a.childDimension,
-    padding = _a.padding,
-    centerContained = _a.centerContained;
-  var diff = childDimension - containerDimension;
-  if (diff + 2 * padding <= 0 && centerContained) {
-    return [diff / 2, diff / 2];
-  } else {
-    return [min(diff + padding, 0) - padding, max(0, diff + padding)];
-  }
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-quick-pinch-zoom/esm/PinchZoom/component.js
-
-
-
-
-
-var classnames = function (base, other) {
-  return other ? ''.concat(base, ' ').concat(other) : base;
-};
-var abs = Math.abs,
-  component_min = Math.min,
-  sqrt = Math.sqrt;
-var component_isSsr = typeof window === 'undefined';
-var isMac = component_isSsr ? false : /(Mac)/i.test(navigator.platform);
-var isDragInteraction = function (i) {
-  return i === 'drag';
-};
-var isZoomInteraction = function (i) {
-  return i === 'zoom';
-};
-var isZoomGesture = function (wheelEvent) {
-  return isMac && wheelEvent.ctrlKey;
-};
-var cancelEvent = function (event) {
-  event.stopPropagation();
-  event.preventDefault();
-};
-var getDistance = function (a, b) {
-  var x = a.x - b.x;
-  var y = a.y - b.y;
-  return sqrt(x * x + y * y);
-};
-var calculateScale = function (startTouches, endTouches) {
-  var startDistance = getDistance(startTouches[0], startTouches[1]);
-  var endDistance = getDistance(endTouches[0], endTouches[1]);
-  return endDistance / startDistance;
-};
-var isCloseTo = function (value, expected) {
-  return value > expected - 0.01 && value < expected + 0.01;
-};
-var swing = function (p) {
-  return -Math.cos(p * Math.PI) / 2 + 0.5;
-};
-var getPointByPageCoordinates = function (touch) {
-  return {
-    x: touch.pageX,
-    y: touch.pageY,
-  };
-};
-var getPageCoordinatesByTouches = function (touches) {
-  return Array.from(touches).map(getPointByPageCoordinates);
-};
-var sum = function (a, b) {
-  return a + b;
-};
-var getVectorAvg = function (vectors) {
-  return {
-    x:
-      vectors
-        .map(function (_a) {
-          var x = _a.x;
-          return x;
-        })
-        .reduce(sum, 0) / vectors.length,
-    y:
-      vectors
-        .map(function (_a) {
-          var y = _a.y;
-          return y;
-        })
-        .reduce(sum, 0) / vectors.length,
-  };
-};
-var clamp = function (min, max, value) {
-  return value < min ? min : value > max ? max : value;
-};
-var shouldInterceptWheel = function (event) {
-  return !(event.ctrlKey || event.metaKey);
-};
-var getElementSize = function (element) {
-  if (element) {
-    var offsetWidth = element.offsetWidth,
-      offsetHeight = element.offsetHeight;
-    // Any DOMElement
-    if (offsetWidth && offsetHeight) {
-      return { width: offsetWidth, height: offsetHeight };
-    }
-    // Svg support
-    var style = getComputedStyle(element);
-    var width = parseFloat(style.width);
-    var height = parseFloat(style.height);
-    if (height && width) {
-      return { width: width, height: height };
-    }
-  }
-  return { width: 0, height: 0 };
-};
-var calculateVelocity = function (startPoint, endPoint) {
-  return {
-    x: endPoint.x - startPoint.x,
-    y: endPoint.y - startPoint.y,
-  };
-};
-var comparePoints = function (p1, p2) {
-  return p1.x === p2.x && p1.y === p2.y;
-};
-var noup = function () {};
-var zeroPoint = { x: 0, y: 0 };
-var PinchZoom = /** @class */ (function (_super) {
-  __extends(PinchZoom, _super);
-  function PinchZoom() {
-    var _this = (_super !== null && _super.apply(this, arguments)) || this;
-    _this._prevDragMovePoint = null;
-    _this._containerObserver = null;
-    _this._fingers = 0;
-    _this._firstMove = true;
-    _this._initialOffset = __assign({}, zeroPoint);
-    _this._interaction = null;
-    _this._isDoubleTap = false;
-    _this._isOffsetsSet = false;
-    _this._lastDragPosition = null;
-    _this._lastScale = 1;
-    _this._lastTouchStart = 0;
-    _this._lastZoomCenter = null;
-    _this._listenMouseMove = false;
-    _this._nthZoom = 0;
-    _this._offset = __assign({}, zeroPoint);
-    _this._startOffset = __assign({}, zeroPoint);
-    _this._startTouches = null;
-    _this._updatePlaned = false;
-    _this._wheelTimeOut = null;
-    _this._zoomFactor = 1;
-    _this._initialZoomFactor = 1;
-    _this._draggingPoint = __assign({}, zeroPoint);
-    // It help reduce behavior difference between touch and mouse events
-    _this._ignoreNextClick = false;
-    // @ts-ignore
-    _this._containerRef = react.createRef();
-    _this._handleClick = function (clickEvent) {
-      if (_this._ignoreNextClick) {
-        _this._ignoreNextClick = false;
-        clickEvent.stopPropagation();
-      }
-    };
-    _this._onResize = function () {
-      var _a;
-      if (
-        (_a = _this._containerRef) === null || _a === void 0
-          ? void 0
-          : _a.current
-      ) {
-        _this._updateInitialZoomFactor();
-        _this._setupOffsets();
-        _this._update();
-      }
-    };
-    _this._handlerOnTouchEnd = _this._handlerIfEnable(function (touchEndEvent) {
-      _this._fingers = touchEndEvent.touches.length;
-      if (
-        _this.props.shouldCancelHandledTouchEndEvents &&
-        (isZoomInteraction(_this._interaction) ||
-          (isDragInteraction(_this._interaction) &&
-            (_this._startOffset.x !== _this._offset.x ||
-              _this._startOffset.y !== _this._offset.y)))
-      ) {
-        cancelEvent(touchEndEvent);
-      }
-      if (isDragInteraction(_this._interaction) && !_this._enoughToDrag()) {
-        _this._handleClick(touchEndEvent);
-      }
-      _this._updateInteraction(touchEndEvent);
-    });
-    _this._handlerOnTouchStart = _this._handlerIfEnable(function (
-      touchStartEvent,
-    ) {
-      _this._firstMove = true;
-      _this._fingers = touchStartEvent.touches.length;
-      _this._detectDoubleTap(touchStartEvent);
-    });
-    _this._handlerOnTouchMove = _this._handlerIfEnable(function (
-      touchMoveEvent,
-    ) {
-      if (_this._isDoubleTap) {
-        return;
-      }
-      _this._collectInertia(touchMoveEvent);
-      if (_this._firstMove) {
-        _this._updateInteraction(touchMoveEvent);
-        if (_this._interaction) {
-          cancelEvent(touchMoveEvent);
-        }
-        _this._startOffset = __assign({}, _this._offset);
-        _this._startTouches = getPageCoordinatesByTouches(
-          touchMoveEvent.touches,
-        );
-      } else {
-        if (isZoomInteraction(_this._interaction)) {
-          if (
-            _this._startTouches &&
-            _this._startTouches.length === 2 &&
-            touchMoveEvent.touches.length === 2
-          ) {
-            _this._handleZoom(
-              touchMoveEvent,
-              calculateScale(
-                _this._startTouches,
-                getPageCoordinatesByTouches(touchMoveEvent.touches),
-              ),
-            );
-          }
-        } else if (isDragInteraction(_this._interaction)) {
-          _this._handleDrag(touchMoveEvent);
-        }
-        if (_this._interaction) {
-          cancelEvent(touchMoveEvent);
-          _this._update();
-        }
-      }
-      _this._firstMove = false;
-    });
-    _this._handlerWheel = function (wheelEvent) {
-      if (_this.props.shouldInterceptWheel(wheelEvent)) {
-        return;
-      }
-      cancelEvent(wheelEvent);
-      var pageX = wheelEvent.pageX,
-        pageY = wheelEvent.pageY,
-        deltaY = wheelEvent.deltaY,
-        deltaMode = wheelEvent.deltaMode;
-      var scaleDelta = 1;
-      if (isZoomGesture(wheelEvent) || deltaMode === 1) {
-        scaleDelta = 15;
-      }
-      var likeTouchEvent = {
-        touches: [
-          // @ts-ignore
-          { pageX: pageX, pageY: pageY },
-        ],
-      };
-      var center = _this._getOffsetByFirstTouch(likeTouchEvent);
-      var dScale = deltaY * scaleDelta;
-      _this._stopAnimation();
-      _this._scaleTo(
-        _this._zoomFactor - dScale / _this.props.wheelScaleFactor,
-        center,
-      );
-      _this._update();
-      clearTimeout(
-        // @ts-ignore
-        _this._wheelTimeOut,
-      );
-      _this._wheelTimeOut = setTimeout(function () {
-        return _this._sanitize();
-      }, 100);
-    };
-    // @ts-ignore
-    _this._handlers = _this.props.isTouch()
-      ? [
-          ['touchstart', _this._handlerOnTouchStart],
-          ['touchend', _this._handlerOnTouchEnd],
-          ['touchmove', _this._handlerOnTouchMove],
-        ]
-      : [
-          [
-            'mousemove',
-            _this.simulate(_this._handlerOnTouchMove),
-            _this.props._document,
-          ],
-          [
-            'mouseup',
-            _this.simulate(_this._handlerOnTouchEnd),
-            _this.props._document,
-          ],
-          ['mousedown', _this.simulate(_this._handlerOnTouchStart)],
-          ['click', _this._handleClick],
-          ['wheel', _this._handlerWheel],
-        ];
-    return _this;
-  }
-  PinchZoom.prototype._handleDragStart = function (event) {
-    this._ignoreNextClick = true;
-    this.props.onDragStart();
-    this._stopAnimation();
-    this._resetInertia();
-    this._lastDragPosition = null;
-    this._hasInteraction = true;
-    this._draggingPoint = this._offset;
-    this._handleDrag(event);
-  };
-  PinchZoom.prototype._handleDrag = function (event) {
-    var touch = this._getOffsetByFirstTouch(event);
-    if (this._enoughToDrag()) {
-      this._drag(touch, this._lastDragPosition);
-    } else {
-      this._virtualDrag(touch, this._lastDragPosition);
-    }
-    this._offset = this._sanitizeOffset(this._offset);
-    this._lastDragPosition = touch;
-  };
-  PinchZoom.prototype._resetInertia = function () {
-    this._velocity = null;
-    this._prevDragMovePoint = null;
-  };
-  PinchZoom.prototype._realizeInertia = function () {
-    var _this = this;
-    var _a = this.props,
-      inertiaFriction = _a.inertiaFriction,
-      inertia = _a.inertia;
-    if (!inertia || !this._velocity) {
-      return;
-    }
-    var _b = this._velocity,
-      x = _b.x,
-      y = _b.y;
-    if (x || y) {
-      this._stopAnimation();
-      this._resetInertia();
-      var renderFrame = function () {
-        x *= inertiaFriction;
-        y *= inertiaFriction;
-        if (!x && !y) {
-          return _this._stopAnimation();
-        }
-        var prevOffset = __assign({}, _this._offset);
-        _this._addOffset({ x: x, y: y });
-        _this._offset = _this._sanitizeOffset(_this._offset);
-        if (comparePoints(prevOffset, _this._offset)) {
-          return _this._stopAnimation();
-        }
-        _this._update({ isAnimation: true });
-      };
-      this._animate(renderFrame, { duration: 9999 });
-    }
-  };
-  PinchZoom.prototype._collectInertia = function (_a) {
-    var touches = _a.touches;
-    if (!this.props.inertia) {
-      return;
-    }
-    var currentCoordinates = getPageCoordinatesByTouches(touches)[0];
-    var prevPoint = this._prevDragMovePoint;
-    if (prevPoint) {
-      this._velocity = calculateVelocity(currentCoordinates, prevPoint);
-    }
-    this._prevDragMovePoint = currentCoordinates;
-  };
-  PinchZoom.prototype._handleDragEnd = function () {
-    this.props.onDragEnd();
-    this._end();
-    this._realizeInertia();
-  };
-  PinchZoom.prototype._handleZoomStart = function () {
-    this.props.onZoomStart();
-    this._stopAnimation();
-    this._lastScale = 1;
-    this._nthZoom = 0;
-    this._lastZoomCenter = null;
-    this._hasInteraction = true;
-  };
-  PinchZoom.prototype._handleZoom = function (event, newScale) {
-    var touchCenter = getVectorAvg(this._getOffsetTouches(event));
-    var scale = newScale / this._lastScale;
-    this._lastScale = newScale;
-    // The first touch events are thrown away since they are not precise
-    this._nthZoom += 1;
-    if (this._nthZoom > 3) {
-      this._scale(scale, touchCenter);
-      this._drag(touchCenter, this._lastZoomCenter);
-      if (this.props.enforceBoundsDuringZoom) {
-        this._offset = this._sanitizeOffset(this._offset);
-      }
-    }
-    this._lastZoomCenter = touchCenter;
-  };
-  PinchZoom.prototype._handleZoomEnd = function () {
-    this.props.onZoomEnd();
-    this._end();
-  };
-  PinchZoom.prototype._handleDoubleTap = function (event) {
-    var _this = this;
-    if (this._hasInteraction || this.props.tapZoomFactor === 0) {
-      return;
-    }
-    var needZoomOut =
-      (this.props.doubleTapZoomOutOnMaxScale &&
-        this._zoomFactor === this.props.maxZoom) ||
-      (this.props.doubleTapToggleZoom && this._zoomFactor > 1);
-    this.props.onDoubleTap();
-    this._ignoreNextClick = true;
-    var zoomFactor = this._zoomFactor + this.props.tapZoomFactor;
-    var startZoomFactor = this._zoomFactor;
-    var updateProgress = function (progress) {
-      _this._scaleTo(
-        startZoomFactor + progress * (zoomFactor - startZoomFactor),
-        center,
-      );
-    };
-    var center = this._getOffsetByFirstTouch(event);
-    this._isDoubleTap = true;
-    if (startZoomFactor > zoomFactor) {
-      center = this._getCurrentZoomCenter();
-    }
-    needZoomOut ? this._zoomOutAnimation() : this._animate(updateProgress);
-  };
-  PinchZoom.prototype._computeInitialOffset = function () {
-    var rect = this._getContainerRect();
-    var _a = this._getChildSize(),
-      width = _a.width,
-      height = _a.height;
-    var x = -abs(width * this._getInitialZoomFactor() - rect.width) / 2;
-    var y = -abs(height * this._getInitialZoomFactor() - rect.height) / 2;
-    this._initialOffset = { x: x, y: y };
-  };
-  PinchZoom.prototype._resetOffset = function () {
-    this._offset = __assign({}, this._initialOffset);
-  };
-  PinchZoom.prototype._setupOffsets = function () {
-    if (this.props.setOffsetsOnce && this._isOffsetsSet) {
-      return;
-    }
-    this._isOffsetsSet = true;
-    this._computeInitialOffset();
-    this._resetOffset();
-  };
-  PinchZoom.prototype._sanitizeOffset = function (offset) {
-    var rect = this._getContainerRect();
-    var _a = this._getChildSize(),
-      width = _a.width,
-      height = _a.height;
-    var elWidth = width * this._getInitialZoomFactor() * this._zoomFactor;
-    var elHeight = height * this._getInitialZoomFactor() * this._zoomFactor;
-    var _b = getOffsetBounds({
-        containerDimension: rect.width,
-        childDimension: elWidth,
-        padding: this.props.horizontalPadding,
-        centerContained: this.props.centerContained,
-      }),
-      minOffsetX = _b[0],
-      maxOffsetX = _b[1];
-    var _c = getOffsetBounds({
-        containerDimension: rect.height,
-        childDimension: elHeight,
-        padding: this.props.verticalPadding,
-        centerContained: this.props.centerContained,
-      }),
-      minOffsetY = _c[0],
-      maxOffsetY = _c[1];
-    return {
-      x: clamp(minOffsetX, maxOffsetX, offset.x),
-      y: clamp(minOffsetY, maxOffsetY, offset.y),
-    };
-  };
-  PinchZoom.prototype.alignCenter = function (options) {
-    var _this = this;
-    var _a = __assign({ duration: 250, animated: true }, options),
-      x = _a.x,
-      y = _a.y,
-      scale = _a.scale,
-      animated = _a.animated,
-      duration = _a.duration;
-    var startZoomFactor = this._zoomFactor;
-    var startOffset = __assign({}, this._offset);
-    var rect = this._getContainerRect();
-    var containerCenter = { x: rect.width / 2, y: rect.height / 2 };
-    this._zoomFactor = 1;
-    this._offset = { x: -(containerCenter.x - x), y: -(containerCenter.y - y) };
-    this._scaleTo(scale, containerCenter);
-    this._stopAnimation();
-    if (!animated) {
-      return this._update();
-    }
-    var diffZoomFactor = this._zoomFactor - startZoomFactor;
-    var diffOffset = {
-      x: this._offset.x - startOffset.x,
-      y: this._offset.y - startOffset.y,
-    };
-    this._zoomFactor = startZoomFactor;
-    this._offset = __assign({}, startOffset);
-    var updateFrame = function (progress) {
-      var x = startOffset.x + diffOffset.x * progress;
-      var y = startOffset.y + diffOffset.y * progress;
-      _this._zoomFactor = startZoomFactor + diffZoomFactor * progress;
-      _this._offset = _this._sanitizeOffset({ x: x, y: y });
-      _this._update();
-    };
-    this._animate(updateFrame, {
-      callback: function () {
-        return _this._sanitize();
-      },
-      duration: duration,
-    });
-  };
-  PinchZoom.prototype.scaleTo = function (options) {
-    var _this = this;
-    var _a = __assign({ duration: 250, animated: true }, options),
-      x = _a.x,
-      y = _a.y,
-      scale = _a.scale,
-      animated = _a.animated,
-      duration = _a.duration;
-    var startZoomFactor = this._zoomFactor;
-    var startOffset = __assign({}, this._offset);
-    this._zoomFactor = 1;
-    this._offset = { x: 0, y: 0 };
-    this._scaleTo(scale, { x: x, y: y });
-    this._stopAnimation();
-    if (!animated) {
-      return this._update();
-    }
-    var diffZoomFactor = this._zoomFactor - startZoomFactor;
-    var diffOffset = {
-      x: this._offset.x - startOffset.x,
-      y: this._offset.y - startOffset.y,
-    };
-    this._zoomFactor = startZoomFactor;
-    this._offset = __assign({}, startOffset);
-    var updateFrame = function (progress) {
-      var x = startOffset.x + diffOffset.x * progress;
-      var y = startOffset.y + diffOffset.y * progress;
-      _this._zoomFactor = startZoomFactor + diffZoomFactor * progress;
-      _this._offset = { x: x, y: y };
-      _this._update();
-    };
-    this._animate(updateFrame, {
-      callback: function () {
-        return _this._sanitize();
-      },
-      duration: duration,
-    });
-  };
-  PinchZoom.prototype._scaleTo = function (zoomFactor, center) {
-    this._scale(zoomFactor / this._zoomFactor, center);
-    this._offset = this._sanitizeOffset(this._offset);
-  };
-  PinchZoom.prototype._scale = function (scale, center) {
-    scale = this._scaleZoomFactor(scale);
-    this._addOffset({
-      x: (scale - 1) * (center.x + this._offset.x),
-      y: (scale - 1) * (center.y + this._offset.y),
-    });
-    this.props.onZoomUpdate();
-  };
-  PinchZoom.prototype._scaleZoomFactor = function (scale) {
-    var originalZoomFactor = this._zoomFactor;
-    this._zoomFactor *= scale;
-    this._zoomFactor = clamp(
-      this.props.minZoom,
-      this.props.maxZoom,
-      this._zoomFactor,
-    );
-    return this._zoomFactor / originalZoomFactor;
-  };
-  PinchZoom.prototype._canDrag = function () {
-    return this.props.draggableUnZoomed || !isCloseTo(this._zoomFactor, 1);
-  };
-  PinchZoom.prototype._drag = function (center, lastCenter) {
-    if (lastCenter) {
-      var y = -(center.y - lastCenter.y);
-      var x = -(center.x - lastCenter.x);
-      if (!this.props.lockDragAxis) {
-        this._addOffset({
-          x: x,
-          y: y,
-        });
-      } else {
-        // lock scroll to position that was changed the most
-        if (abs(x) > abs(y)) {
-          this._addOffset({
-            x: x,
-            y: 0,
-          });
-        } else {
-          this._addOffset({
-            y: y,
-            x: 0,
-          });
-        }
-      }
-      this.props.onDragUpdate();
-    }
-  };
-  PinchZoom.prototype._virtualDrag = function (center, lastCenter) {
-    if (lastCenter) {
-      var y = -(center.y - lastCenter.y);
-      var x = -(center.x - lastCenter.x);
-      this._draggingPoint = {
-        x: x + this._draggingPoint.x,
-        y: y + this._draggingPoint.y,
-      };
-    }
-  };
-  PinchZoom.prototype._addOffset = function (offset) {
-    var _a = this._offset,
-      x = _a.x,
-      y = _a.y;
-    this._offset = {
-      x: x + offset.x,
-      y: y + offset.y,
-    };
-  };
-  PinchZoom.prototype._sanitize = function () {
-    if (this._zoomFactor < this.props.zoomOutFactor) {
-      this._resetInertia();
-      this._zoomOutAnimation();
-    } else if (this._isInsaneOffset()) {
-      this._sanitizeOffsetAnimation();
-    }
-  };
-  PinchZoom.prototype._isInsaneOffset = function () {
-    var offset = this._offset;
-    var sanitizedOffset = this._sanitizeOffset(offset);
-    return sanitizedOffset.x !== offset.x || sanitizedOffset.y !== offset.y;
-  };
-  PinchZoom.prototype._sanitizeOffsetAnimation = function () {
-    var _this = this;
-    var targetOffset = this._sanitizeOffset(this._offset);
-    var startOffset = __assign({}, this._offset);
-    var updateProgress = function (progress) {
-      var x = startOffset.x + progress * (targetOffset.x - startOffset.x);
-      var y = startOffset.y + progress * (targetOffset.y - startOffset.y);
-      _this._offset = { x: x, y: y };
-      _this._update();
-    };
-    this._animate(updateProgress);
-  };
-  PinchZoom.prototype._zoomOutAnimation = function () {
-    var _this = this;
-    if (this._zoomFactor === 1) {
-      return;
-    }
-    var startZoomFactor = this._zoomFactor;
-    var zoomFactor = 1;
-    var center = this._getCurrentZoomCenter();
-    var updateProgress = function (progress) {
-      var scaleFactor =
-        startZoomFactor + progress * (zoomFactor - startZoomFactor);
-      _this._scaleTo(scaleFactor, center);
-    };
-    this._animate(updateProgress);
-  };
-  PinchZoom.prototype._getInitialZoomFactor = function () {
-    return this._initialZoomFactor;
-  };
-  PinchZoom.prototype._getCurrentZoomCenter = function () {
-    var _a = this._offset,
-      x = _a.x,
-      y = _a.y;
-    var offsetLeft = x - this._initialOffset.x;
-    var offsetTop = y - this._initialOffset.y;
-    return {
-      x: -1 * x - offsetLeft / (1 / this._zoomFactor - 1),
-      y: -1 * y - offsetTop / (1 / this._zoomFactor - 1),
-    };
-  };
-  PinchZoom.prototype._getOffsetByFirstTouch = function (event) {
-    return this._getOffsetTouches(event)[0];
-  };
-  PinchZoom.prototype._getOffsetTouches = function (event) {
-    var _document = this.props._document;
-    var _html = _document.documentElement;
-    var _body = _document.body;
-    var _a = this._getContainerRect(),
-      top = _a.top,
-      left = _a.left;
-    var scrollTop = _html.scrollTop || _body.scrollTop;
-    var scrollLeft = _html.scrollLeft || _body.scrollLeft;
-    var posTop = top + scrollTop;
-    var posLeft = left + scrollLeft;
-    return getPageCoordinatesByTouches(event.touches).map(function (_a) {
-      var x = _a.x,
-        y = _a.y;
-      return {
-        x: x - posLeft,
-        y: y - posTop,
-      };
-    });
-  };
-  PinchZoom.prototype._animate = function (frameFn, options) {
-    var _this = this;
-    var startTime = new Date().getTime();
-    var _a = __assign(
-        {
-          timeFn: swing,
-          callback: function () {},
-          duration: this.props.animationDuration,
-        },
-        options,
-      ),
-      timeFn = _a.timeFn,
-      callback = _a.callback,
-      duration = _a.duration;
-    var renderFrame = function () {
-      if (!_this._inAnimation) {
-        return;
-      }
-      var frameTime = new Date().getTime() - startTime;
-      var progress = frameTime / duration;
-      if (frameTime >= duration) {
-        frameFn(1);
-        _this._stopAnimation();
-        callback();
-        _this._update();
-      } else {
-        progress = timeFn(progress);
-        frameFn(progress);
-        _this._update({ isAnimation: true });
-        requestAnimationFrame(renderFrame);
-      }
-    };
-    this._inAnimation = true;
-    requestAnimationFrame(renderFrame);
-  };
-  PinchZoom.prototype._stopAnimation = function () {
-    this._inAnimation = false;
-  };
-  PinchZoom.prototype._end = function () {
-    this._hasInteraction = false;
-    this._sanitize();
-    this._update();
-  };
-  PinchZoom.prototype._getContainerRect = function () {
-    var div = this._containerRef.current;
-    return div.getBoundingClientRect();
-  };
-  PinchZoom.prototype._getChildSize = function () {
-    var div = this._containerRef.current;
-    return getElementSize(
-      div === null || div === void 0 ? void 0 : div.firstElementChild,
-    );
-  };
-  PinchZoom.prototype._updateInitialZoomFactor = function () {
-    var rect = this._getContainerRect();
-    var size = this._getChildSize();
-    var xZoomFactor = rect.width / size.width;
-    var yZoomFactor = rect.height / size.height;
-    this._initialZoomFactor = component_min(xZoomFactor, yZoomFactor);
-  };
-  PinchZoom.prototype._bindEvents = function () {
-    var _this = this;
-    var div = this._containerRef.current;
-    if (window.ResizeObserver) {
-      this._containerObserver = new ResizeObserver(this._onResize);
-      this._containerObserver.observe(div);
-    } else {
-      window.addEventListener('resize', this._onResize);
-    }
-    this._handlers.forEach(function (_a) {
-      var eventName = _a[0],
-        fn = _a[1],
-        target = _a[2];
-      (target || div).addEventListener(eventName, fn, true);
-    });
-    Array.from(div.querySelectorAll('img')).forEach(function (img) {
-      return img.addEventListener('load', _this._onResize);
-    });
-  };
-  PinchZoom.prototype._unSubscribe = function () {
-    var _this = this;
-    var div = this._containerRef.current;
-    if (this._containerObserver) {
-      this._containerObserver.disconnect();
-      this._containerObserver = null;
-    }
-    window.removeEventListener('resize', this._onResize);
-    this._handlers.forEach(function (_a) {
-      var eventName = _a[0],
-        fn = _a[1],
-        target = _a[2];
-      (target || div).removeEventListener(eventName, fn, true);
-    });
-    Array.from(div.querySelectorAll('img')).forEach(function (img) {
-      return img.removeEventListener('load', _this._onResize);
-    });
-  };
-  PinchZoom.prototype._update = function (options) {
-    var _this = this;
-    if (this._updatePlaned) {
-      return;
-    }
-    var updateFrame = function () {
-      var scale = _this._getInitialZoomFactor() * _this._zoomFactor;
-      var x = -_this._offset.x / scale;
-      var y = -_this._offset.y / scale;
-      _this.props.onUpdate({ scale: scale, x: x, y: y });
-    };
-    if (options === null || options === void 0 ? void 0 : options.isAnimation) {
-      return updateFrame();
-    }
-    this._updatePlaned = true;
-    requestAnimationFrame(function () {
-      _this._updatePlaned = false;
-      updateFrame();
-    });
-  };
-  PinchZoom.prototype._handlerIfEnable = function (fn) {
-    var _this = this;
-    return function () {
-      var args = [];
-      for (var _i = 0; _i < arguments.length; _i++) {
-        args[_i] = arguments[_i];
-      }
-      if (_this.props.enabled) {
-        fn.apply(void 0, args);
-      }
-    };
-  };
-  PinchZoom.prototype._setInteraction = function (newInteraction, event) {
-    var interaction = this._interaction;
-    if (interaction !== newInteraction) {
-      if (interaction && !newInteraction) {
-        if (isZoomInteraction(interaction)) {
-          this._handleZoomEnd();
-        } else if (isDragInteraction(interaction)) {
-          this._handleDragEnd();
-        }
-      }
-      if (isZoomInteraction(newInteraction)) {
-        this._handleZoomStart();
-      } else if (isDragInteraction(newInteraction)) {
-        this._handleDragStart(event);
-      }
-    }
-    this._interaction = newInteraction;
-  };
-  PinchZoom.prototype._distanceBetweenNumbers = function (a, b) {
-    return a > b ? a - b : b - a;
-  };
-  PinchZoom.prototype._enoughToDrag = function () {
-    if (
-      this._distanceBetweenNumbers(this._startOffset.x, this._draggingPoint.x) >
-        5 ||
-      this._distanceBetweenNumbers(this._startOffset.y, this._draggingPoint.y) >
-        5
-    )
-      return true;
-    return false;
-  };
-  PinchZoom.prototype._updateInteraction = function (event) {
-    var fingers = this._fingers;
-    if (fingers === 2) {
-      return this._setInteraction('zoom', event);
-    }
-    if (fingers === 1 && this._canDrag()) {
-      return this._setInteraction('drag', event);
-    }
-    this._setInteraction(null, event);
-  };
-  PinchZoom.prototype._detectDoubleTap = function (event) {
-    var time = new Date().getTime();
-    if (this._fingers > 1) {
-      this._lastTouchStart = 0;
-    }
-    if (time - this._lastTouchStart < 300) {
-      cancelEvent(event);
-      this._handleDoubleTap(event);
-      if (isZoomInteraction(this._interaction)) {
-        this._handleZoomEnd();
-      } else if (isDragInteraction(this._interaction)) {
-        this._handleDragEnd();
-      }
-    } else {
-      this._isDoubleTap = false;
-    }
-    if (this._fingers === 1) {
-      this._lastTouchStart = time;
-    }
-  };
-  PinchZoom.prototype.simulate = function (fn) {
-    var _this = this;
-    return function (mouseEvent) {
-      var pageX = mouseEvent.pageX,
-        pageY = mouseEvent.pageY,
-        type = mouseEvent.type;
-      var isEnd = type === 'mouseup';
-      var isStart = type === 'mousedown';
-      if (isStart) {
-        mouseEvent.preventDefault();
-        _this._listenMouseMove = true;
-      }
-      if (_this._listenMouseMove) {
-        // @ts-ignore
-        mouseEvent.touches = isEnd ? [] : [{ pageX: pageX, pageY: pageY }];
-        fn(
-          // @ts-ignore
-          mouseEvent,
-        );
-      }
-      if (isEnd) {
-        _this._listenMouseMove = false;
-      }
-    };
-  };
-  PinchZoom.prototype.componentDidMount = function () {
-    this._bindEvents();
-    this._update();
-  };
-  PinchZoom.prototype.componentWillUnmount = function () {
-    this._stopAnimation();
-    this._unSubscribe();
-  };
-  PinchZoom.prototype.render = function () {
-    var _a = this.props,
-      children = _a.children,
-      containerProps = _a.containerProps;
-    var child = react.Children.only(children);
-    var props = containerProps || {};
-    return react.createElement(
-      react.Fragment,
-      null,
-      react.createElement('style', null, styles),
-      react.createElement(
-        'div',
-        __assign({}, props, {
-          ref: this._containerRef,
-          className: classnames(styleRoot, props.className),
-        }),
-        react.cloneElement(child, {
-          className: classnames(styleChild, child.props.className),
-        }),
-      ),
-    );
-  };
-  PinchZoom.defaultProps = {
-    animationDuration: 250,
-    draggableUnZoomed: true,
-    enforceBoundsDuringZoom: false,
-    centerContained: false,
-    enabled: true,
-    inertia: true,
-    inertiaFriction: 0.96,
-    horizontalPadding: 0,
-    isTouch: isTouch,
-    lockDragAxis: false,
-    maxZoom: 5,
-    minZoom: 0.5,
-    onDoubleTap: noup,
-    onDragEnd: noup,
-    onDragStart: noup,
-    onDragUpdate: noup,
-    onZoomEnd: noup,
-    onZoomStart: noup,
-    onZoomUpdate: noup,
-    setOffsetsOnce: false,
-    shouldInterceptWheel: shouldInterceptWheel,
-    shouldCancelHandledTouchEndEvents: false,
-    tapZoomFactor: 1,
-    verticalPadding: 0,
-    wheelScaleFactor: 1500,
-    zoomOutFactor: 1.3,
-    doubleTapZoomOutOnMaxScale: false,
-    doubleTapToggleZoom: false,
-    // @ts-expect-error
-    _document: component_isSsr ? null : window.document,
-  };
-  return PinchZoom;
-})(react.Component);
-if (false) { var _a, any, component_element, object, number, func, bool; }
-/* harmony default export */ const component = (PinchZoom);
-
-;// CONCATENATED MODULE: ./node_modules/react-quick-pinch-zoom/esm/index.js
-
-/* harmony default export */ const esm = (component);
-
-
-
-/***/ }),
-
-/***/ 67287:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-/* module decorator */ module = __webpack_require__.nmd(module);
-/** @license React v0.26.2
- * react-reconciler.production.min.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-module.exports = function $$$reconciler($$$hostConfig) {
-    var exports = {};
-'use strict';var aa=__webpack_require__(27418),ba=__webpack_require__(67294),m=__webpack_require__(63840);function q(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;c<arguments.length;c++)b+="&args[]="+encodeURIComponent(arguments[c]);return"Minified React error #"+a+"; visit "+b+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}
-var ca=ba.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED,da=60103,ea=60106,fa=60107,ha=60108,ia=60114,ja=60109,ka=60110,la=60112,ma=60113,na=60120,oa=60115,pa=60116,qa=60121,ra=60129,sa=60130,ta=60131;
-if("function"===typeof Symbol&&Symbol.for){var r=Symbol.for;da=r("react.element");ea=r("react.portal");fa=r("react.fragment");ha=r("react.strict_mode");ia=r("react.profiler");ja=r("react.provider");ka=r("react.context");la=r("react.forward_ref");ma=r("react.suspense");na=r("react.suspense_list");oa=r("react.memo");pa=r("react.lazy");qa=r("react.block");r("react.scope");ra=r("react.debug_trace_mode");sa=r("react.offscreen");ta=r("react.legacy_hidden")}var ua="function"===typeof Symbol&&Symbol.iterator;
-function va(a){if(null===a||"object"!==typeof a)return null;a=ua&&a[ua]||a["@@iterator"];return"function"===typeof a?a:null}
-function wa(a){if(null==a)return null;if("function"===typeof a)return a.displayName||a.name||null;if("string"===typeof a)return a;switch(a){case fa:return"Fragment";case ea:return"Portal";case ia:return"Profiler";case ha:return"StrictMode";case ma:return"Suspense";case na:return"SuspenseList"}if("object"===typeof a)switch(a.$$typeof){case ka:return(a.displayName||"Context")+".Consumer";case ja:return(a._context.displayName||"Context")+".Provider";case la:var b=a.render;b=b.displayName||b.name||"";
-return a.displayName||(""!==b?"ForwardRef("+b+")":"ForwardRef");case oa:return wa(a.type);case qa:return wa(a._render);case pa:b=a._payload;a=a._init;try{return wa(a(b))}catch(c){}}return null}function xa(a){var b=a,c=a;if(a.alternate)for(;b.return;)b=b.return;else{a=b;do b=a,0!==(b.flags&1026)&&(c=b.return),a=b.return;while(a)}return 3===b.tag?c:null}function ya(a){if(xa(a)!==a)throw Error(q(188));}
-function za(a){var b=a.alternate;if(!b){b=xa(a);if(null===b)throw Error(q(188));return b!==a?null:a}for(var c=a,d=b;;){var e=c.return;if(null===e)break;var f=e.alternate;if(null===f){d=e.return;if(null!==d){c=d;continue}break}if(e.child===f.child){for(f=e.child;f;){if(f===c)return ya(e),a;if(f===d)return ya(e),b;f=f.sibling}throw Error(q(188));}if(c.return!==d.return)c=e,d=f;else{for(var g=!1,h=e.child;h;){if(h===c){g=!0;c=e;d=f;break}if(h===d){g=!0;d=e;c=f;break}h=h.sibling}if(!g){for(h=f.child;h;){if(h===
-c){g=!0;c=f;d=e;break}if(h===d){g=!0;d=f;c=e;break}h=h.sibling}if(!g)throw Error(q(189));}}if(c.alternate!==d)throw Error(q(190));}if(3!==c.tag)throw Error(q(188));return c.stateNode.current===c?a:b}function Aa(a){a=za(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}
-function Ba(a){a=za(a);if(!a)return null;for(var b=a;;){if(5===b.tag||6===b.tag)return b;if(b.child&&4!==b.tag)b.child.return=b,b=b.child;else{if(b===a)break;for(;!b.sibling;){if(!b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}}return null}function Ca(a,b){for(var c=a.alternate;null!==b;){if(b===a||b===c)return!0;b=b.return}return!1}
-var Da=$$$hostConfig.getPublicInstance,Ea=$$$hostConfig.getRootHostContext,Fa=$$$hostConfig.getChildHostContext,Ga=$$$hostConfig.prepareForCommit,Ha=$$$hostConfig.resetAfterCommit,Ia=$$$hostConfig.createInstance,Ja=$$$hostConfig.appendInitialChild,Ka=$$$hostConfig.finalizeInitialChildren,La=$$$hostConfig.prepareUpdate,Ma=$$$hostConfig.shouldSetTextContent,Na=$$$hostConfig.createTextInstance,Pa=$$$hostConfig.scheduleTimeout,Qa=$$$hostConfig.cancelTimeout,Ra=$$$hostConfig.noTimeout,Sa=$$$hostConfig.isPrimaryRenderer,
-Ta=$$$hostConfig.supportsMutation,Ua=$$$hostConfig.supportsPersistence,Va=$$$hostConfig.supportsHydration,Wa=$$$hostConfig.getInstanceFromNode,Xa=$$$hostConfig.makeOpaqueHydratingObject,Ya=$$$hostConfig.makeClientId,Za=$$$hostConfig.beforeActiveInstanceBlur,$a=$$$hostConfig.afterActiveInstanceBlur,ab=$$$hostConfig.preparePortalMount,bb=$$$hostConfig.supportsTestSelectors,cb=$$$hostConfig.findFiberRoot,db=$$$hostConfig.getBoundingRect,eb=$$$hostConfig.getTextContent,fb=$$$hostConfig.isHiddenSubtree,
-gb=$$$hostConfig.matchAccessibilityRole,hb=$$$hostConfig.setFocusIfFocusable,ib=$$$hostConfig.setupIntersectionObserver,jb=$$$hostConfig.appendChild,kb=$$$hostConfig.appendChildToContainer,lb=$$$hostConfig.commitTextUpdate,mb=$$$hostConfig.commitMount,nb=$$$hostConfig.commitUpdate,ob=$$$hostConfig.insertBefore,pb=$$$hostConfig.insertInContainerBefore,qb=$$$hostConfig.removeChild,rb=$$$hostConfig.removeChildFromContainer,sb=$$$hostConfig.resetTextContent,tb=$$$hostConfig.hideInstance,ub=$$$hostConfig.hideTextInstance,
-vb=$$$hostConfig.unhideInstance,wb=$$$hostConfig.unhideTextInstance,xb=$$$hostConfig.clearContainer,yb=$$$hostConfig.cloneInstance,zb=$$$hostConfig.createContainerChildSet,Ab=$$$hostConfig.appendChildToContainerChildSet,Bb=$$$hostConfig.finalizeContainerChildren,Cb=$$$hostConfig.replaceContainerChildren,Db=$$$hostConfig.cloneHiddenInstance,Eb=$$$hostConfig.cloneHiddenTextInstance,Fb=$$$hostConfig.canHydrateInstance,Gb=$$$hostConfig.canHydrateTextInstance,Hb=$$$hostConfig.isSuspenseInstancePending,
-Ib=$$$hostConfig.isSuspenseInstanceFallback,Jb=$$$hostConfig.getNextHydratableSibling,Kb=$$$hostConfig.getFirstHydratableChild,Lb=$$$hostConfig.hydrateInstance,Mb=$$$hostConfig.hydrateTextInstance,Nb=$$$hostConfig.getNextHydratableInstanceAfterSuspenseInstance,Ob=$$$hostConfig.commitHydratedContainer,Pb=$$$hostConfig.commitHydratedSuspenseInstance,Qb;function Rb(a){if(void 0===Qb)try{throw Error();}catch(c){var b=c.stack.trim().match(/\n( *(at )?)/);Qb=b&&b[1]||""}return"\n"+Qb+a}var Sb=!1;
-function Tb(a,b){if(!a||Sb)return"";Sb=!0;var c=Error.prepareStackTrace;Error.prepareStackTrace=void 0;try{if(b)if(b=function(){throw Error();},Object.defineProperty(b.prototype,"props",{set:function(){throw Error();}}),"object"===typeof Reflect&&Reflect.construct){try{Reflect.construct(b,[])}catch(k){var d=k}Reflect.construct(a,[],b)}else{try{b.call()}catch(k){d=k}a.call(b.prototype)}else{try{throw Error();}catch(k){d=k}a()}}catch(k){if(k&&d&&"string"===typeof k.stack){for(var e=k.stack.split("\n"),
-f=d.stack.split("\n"),g=e.length-1,h=f.length-1;1<=g&&0<=h&&e[g]!==f[h];)h--;for(;1<=g&&0<=h;g--,h--)if(e[g]!==f[h]){if(1!==g||1!==h){do if(g--,h--,0>h||e[g]!==f[h])return"\n"+e[g].replace(" at new "," at ");while(1<=g&&0<=h)}break}}}finally{Sb=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:"")?Rb(a):""}var Ub=[],Vb=-1;function Wb(a){return{current:a}}function z(a){0>Vb||(a.current=Ub[Vb],Ub[Vb]=null,Vb--)}function A(a,b){Vb++;Ub[Vb]=a.current;a.current=b}
-var Xb={},B=Wb(Xb),D=Wb(!1),Yb=Xb;function Zb(a,b){var c=a.type.contextTypes;if(!c)return Xb;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}function E(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $b(){z(D);z(B)}
-function ac(a,b,c){if(B.current!==Xb)throw Error(q(168));A(B,b);A(D,c)}function bc(a,b,c){var d=a.stateNode;a=b.childContextTypes;if("function"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in a))throw Error(q(108,wa(b)||"Unknown",e));return aa({},c,d)}function cc(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Xb;Yb=B.current;A(B,a);A(D,D.current);return!0}
-function dc(a,b,c){var d=a.stateNode;if(!d)throw Error(q(169));c?(a=bc(a,b,Yb),d.__reactInternalMemoizedMergedChildContext=a,z(D),z(B),A(B,a)):z(D);A(D,c)}var ec=null,fc=null,gc=m.unstable_now;gc();var hc=0,F=8;
-function ic(a){if(0!==(1&a))return F=15,1;if(0!==(2&a))return F=14,2;if(0!==(4&a))return F=13,4;var b=24&a;if(0!==b)return F=12,b;if(0!==(a&32))return F=11,32;b=192&a;if(0!==b)return F=10,b;if(0!==(a&256))return F=9,256;b=3584&a;if(0!==b)return F=8,b;if(0!==(a&4096))return F=7,4096;b=4186112&a;if(0!==b)return F=6,b;b=62914560&a;if(0!==b)return F=5,b;if(a&67108864)return F=4,67108864;if(0!==(a&134217728))return F=3,134217728;b=805306368&a;if(0!==b)return F=2,b;if(0!==(1073741824&a))return F=1,1073741824;
-F=8;return a}function jc(a){switch(a){case 99:return 15;case 98:return 10;case 97:case 96:return 8;case 95:return 2;default:return 0}}function kc(a){switch(a){case 15:case 14:return 99;case 13:case 12:case 11:case 10:return 98;case 9:case 8:case 7:case 6:case 4:case 5:return 97;case 3:case 2:case 1:return 95;case 0:return 90;default:throw Error(q(358,a));}}
-function lc(a,b){var c=a.pendingLanes;if(0===c)return F=0;var d=0,e=0,f=a.expiredLanes,g=a.suspendedLanes,h=a.pingedLanes;if(0!==f)d=f,e=F=15;else if(f=c&134217727,0!==f){var k=f&~g;0!==k?(d=ic(k),e=F):(h&=f,0!==h&&(d=ic(h),e=F))}else f=c&~g,0!==f?(d=ic(f),e=F):0!==h&&(d=ic(h),e=F);if(0===d)return 0;d=31-mc(d);d=c&((0>d?0:1<<d)<<1)-1;if(0!==b&&b!==d&&0===(b&g)){ic(b);if(e<=F)return b;F=e}b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0<b;)c=31-mc(b),e=1<<c,d|=a[c],b&=~e;return d}
-function nc(a){a=a.pendingLanes&-1073741825;return 0!==a?a:a&1073741824?1073741824:0}function oc(a,b){switch(a){case 15:return 1;case 14:return 2;case 12:return a=pc(24&~b),0===a?oc(10,b):a;case 10:return a=pc(192&~b),0===a?oc(8,b):a;case 8:return a=pc(3584&~b),0===a&&(a=pc(4186112&~b),0===a&&(a=512)),a;case 2:return b=pc(805306368&~b),0===b&&(b=268435456),b}throw Error(q(358,a));}function pc(a){return a&-a}function qc(a){for(var b=[],c=0;31>c;c++)b.push(a);return b}
-function rc(a,b,c){a.pendingLanes|=b;var d=b-1;a.suspendedLanes&=d;a.pingedLanes&=d;a=a.eventTimes;b=31-mc(b);a[b]=c}var mc=Math.clz32?Math.clz32:sc,tc=Math.log,uc=Math.LN2;function sc(a){return 0===a?32:31-(tc(a)/uc|0)|0}
-var vc=m.unstable_runWithPriority,wc=m.unstable_scheduleCallback,xc=m.unstable_cancelCallback,yc=m.unstable_shouldYield,zc=m.unstable_requestPaint,Ac=m.unstable_now,Bc=m.unstable_getCurrentPriorityLevel,Cc=m.unstable_ImmediatePriority,Dc=m.unstable_UserBlockingPriority,Ec=m.unstable_NormalPriority,Fc=m.unstable_LowPriority,Gc=m.unstable_IdlePriority,Hc={},Ic=void 0!==zc?zc:function(){},Jc=null,Kc=null,Lc=!1,Mc=Ac(),G=1E4>Mc?Ac:function(){return Ac()-Mc};
-function Nc(){switch(Bc()){case Cc:return 99;case Dc:return 98;case Ec:return 97;case Fc:return 96;case Gc:return 95;default:throw Error(q(332));}}function Oc(a){switch(a){case 99:return Cc;case 98:return Dc;case 97:return Ec;case 96:return Fc;case 95:return Gc;default:throw Error(q(332));}}function Pc(a,b){a=Oc(a);return vc(a,b)}function Qc(a,b,c){a=Oc(a);return wc(a,b,c)}function H(){if(null!==Kc){var a=Kc;Kc=null;xc(a)}Rc()}
-function Rc(){if(!Lc&&null!==Jc){Lc=!0;var a=0;try{var b=Jc;Pc(99,function(){for(;a<b.length;a++){var c=b[a];do c=c(!0);while(null!==c)}});Jc=null}catch(c){throw null!==Jc&&(Jc=Jc.slice(a+1)),wc(Cc,H),c;}finally{Lc=!1}}}var Sc=ca.ReactCurrentBatchConfig;function Tc(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var I="function"===typeof Object.is?Object.is:Tc,Uc=Object.prototype.hasOwnProperty;
-function Vc(a,b){if(I(a,b))return!0;if("object"!==typeof a||null===a||"object"!==typeof b||null===b)return!1;var c=Object.keys(a),d=Object.keys(b);if(c.length!==d.length)return!1;for(d=0;d<c.length;d++)if(!Uc.call(b,c[d])||!I(a[c[d]],b[c[d]]))return!1;return!0}
-function Wc(a){switch(a.tag){case 5:return Rb(a.type);case 16:return Rb("Lazy");case 13:return Rb("Suspense");case 19:return Rb("SuspenseList");case 0:case 2:case 15:return a=Tb(a.type,!1),a;case 11:return a=Tb(a.type.render,!1),a;case 22:return a=Tb(a.type._render,!1),a;case 1:return a=Tb(a.type,!0),a;default:return""}}function Xc(a,b){if(a&&a.defaultProps){b=aa({},b);a=a.defaultProps;for(var c in a)void 0===b[c]&&(b[c]=a[c]);return b}return b}var Yc=Wb(null),Zc=null,$c=null,ad=null;
-function bd(){ad=$c=Zc=null}function cd(a,b){a=a.type._context;Sa?(A(Yc,a._currentValue),a._currentValue=b):(A(Yc,a._currentValue2),a._currentValue2=b)}function dd(a){var b=Yc.current;z(Yc);a=a.type._context;Sa?a._currentValue=b:a._currentValue2=b}function ed(a,b){for(;null!==a;){var c=a.alternate;if((a.childLanes&b)===b)if(null===c||(c.childLanes&b)===b)break;else c.childLanes|=b;else a.childLanes|=b,null!==c&&(c.childLanes|=b);a=a.return}}
-function fd(a,b){Zc=a;ad=$c=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(gd=!0),a.firstContext=null)}function J(a,b){if(ad!==a&&!1!==b&&0!==b){if("number"!==typeof b||1073741823===b)ad=a,b=1073741823;b={context:a,observedBits:b,next:null};if(null===$c){if(null===Zc)throw Error(q(308));$c=b;Zc.dependencies={lanes:0,firstContext:b,responders:null}}else $c=$c.next=b}return Sa?a._currentValue:a._currentValue2}var hd=!1;
-function id(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null},effects:null}}function jd(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function kd(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}
-function md(a,b){a=a.updateQueue;if(null!==a){a=a.shared;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}}
-function nd(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=
-b;c.lastBaseUpdate=b}
-function od(a,b,c,d){var e=a.updateQueue;hd=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var n=a.alternate;if(null!==n){n=n.updateQueue;var t=n.lastBaseUpdate;t!==g&&(null===t?n.firstBaseUpdate=l:t.next=l,n.lastBaseUpdate=k)}}if(null!==f){t=e.baseState;g=0;n=l=k=null;do{h=f.lane;var p=f.eventTime;if((d&h)===h){null!==n&&(n=n.next={eventTime:p,lane:0,tag:f.tag,payload:f.payload,callback:f.callback,
-next:null});a:{var y=a,x=f;h=b;p=c;switch(x.tag){case 1:y=x.payload;if("function"===typeof y){t=y.call(p,t,h);break a}t=y;break a;case 3:y.flags=y.flags&-4097|64;case 0:y=x.payload;h="function"===typeof y?y.call(p,t,h):y;if(null===h||void 0===h)break a;t=aa({},t,h);break a;case 2:hd=!0}}null!==f.callback&&(a.flags|=32,h=e.effects,null===h?e.effects=[f]:h.push(f))}else p={eventTime:p,lane:h,tag:f.tag,payload:f.payload,callback:f.callback,next:null},null===n?(l=n=p,k=t):n=n.next=p,g|=h;f=f.next;if(null===
-f)if(h=e.shared.pending,null===h)break;else f=h.next,h.next=null,e.lastBaseUpdate=h,e.shared.pending=null}while(1);null===n&&(k=t);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=n;pd|=g;a.lanes=g;a.memoizedState=t}}function qd(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;b<a.length;b++){var d=a[b],e=d.callback;if(null!==e){d.callback=null;d=c;if("function"!==typeof e)throw Error(q(191,e));e.call(d)}}}var rd=(new ba.Component).refs;
-function sd(a,b,c,d){b=a.memoizedState;c=c(d,b);c=null===c||void 0===c?b:aa({},b,c);a.memoizedState=c;0===a.lanes&&(a.updateQueue.baseState=c)}
-var vd={isMounted:function(a){return(a=a._reactInternals)?xa(a)===a:!1},enqueueSetState:function(a,b,c){a=a._reactInternals;var d=K(),e=td(a),f=kd(d,e);f.payload=b;void 0!==c&&null!==c&&(f.callback=c);md(a,f);ud(a,e,d)},enqueueReplaceState:function(a,b,c){a=a._reactInternals;var d=K(),e=td(a),f=kd(d,e);f.tag=1;f.payload=b;void 0!==c&&null!==c&&(f.callback=c);md(a,f);ud(a,e,d)},enqueueForceUpdate:function(a,b){a=a._reactInternals;var c=K(),d=td(a),e=kd(c,d);e.tag=2;void 0!==b&&null!==b&&(e.callback=
-b);md(a,e);ud(a,d,c)}};function wd(a,b,c,d,e,f,g){a=a.stateNode;return"function"===typeof a.shouldComponentUpdate?a.shouldComponentUpdate(d,f,g):b.prototype&&b.prototype.isPureReactComponent?!Vc(c,d)||!Vc(e,f):!0}
-function xd(a,b,c){var d=!1,e=Xb;var f=b.contextType;"object"===typeof f&&null!==f?f=J(f):(e=E(b)?Yb:B.current,d=b.contextTypes,f=(d=null!==d&&void 0!==d)?Zb(a,e):Xb);b=new b(c,f);a.memoizedState=null!==b.state&&void 0!==b.state?b.state:null;b.updater=vd;a.stateNode=b;b._reactInternals=a;d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=e,a.__reactInternalMemoizedMaskedChildContext=f);return b}
-function yd(a,b,c,d){a=b.state;"function"===typeof b.componentWillReceiveProps&&b.componentWillReceiveProps(c,d);"function"===typeof b.UNSAFE_componentWillReceiveProps&&b.UNSAFE_componentWillReceiveProps(c,d);b.state!==a&&vd.enqueueReplaceState(b,b.state,null)}
-function zd(a,b,c,d){var e=a.stateNode;e.props=c;e.state=a.memoizedState;e.refs=rd;id(a);var f=b.contextType;"object"===typeof f&&null!==f?e.context=J(f):(f=E(b)?Yb:B.current,e.context=Zb(a,f));od(a,c,e,d);e.state=a.memoizedState;f=b.getDerivedStateFromProps;"function"===typeof f&&(sd(a,b,f,c),e.state=a.memoizedState);"function"===typeof b.getDerivedStateFromProps||"function"===typeof e.getSnapshotBeforeUpdate||"function"!==typeof e.UNSAFE_componentWillMount&&"function"!==typeof e.componentWillMount||
-(b=e.state,"function"===typeof e.componentWillMount&&e.componentWillMount(),"function"===typeof e.UNSAFE_componentWillMount&&e.UNSAFE_componentWillMount(),b!==e.state&&vd.enqueueReplaceState(e,e.state,null),od(a,c,e,d),e.state=a.memoizedState);"function"===typeof e.componentDidMount&&(a.flags|=4)}var Ad=Array.isArray;
-function Bd(a,b,c){a=c.ref;if(null!==a&&"function"!==typeof a&&"object"!==typeof a){if(c._owner){c=c._owner;if(c){if(1!==c.tag)throw Error(q(309));var d=c.stateNode}if(!d)throw Error(q(147,a));var e=""+a;if(null!==b&&null!==b.ref&&"function"===typeof b.ref&&b.ref._stringRef===e)return b.ref;b=function(a){var b=d.refs;b===rd&&(b=d.refs={});null===a?delete b[e]:b[e]=a};b._stringRef=e;return b}if("string"!==typeof a)throw Error(q(284));if(!c._owner)throw Error(q(290,a));}return a}
-function Cd(a,b){if("textarea"!==a.type)throw Error(q(31,"[object Object]"===Object.prototype.toString.call(b)?"object with keys {"+Object.keys(b).join(", ")+"}":b));}
-function Dd(a){function b(b,c){if(a){var d=b.lastEffect;null!==d?(d.nextEffect=c,b.lastEffect=c):b.firstEffect=b.lastEffect=c;c.nextEffect=null;c.flags=8}}function c(c,d){if(!a)return null;for(;null!==d;)b(c,d),d=d.sibling;return null}function d(a,b){for(a=new Map;null!==b;)null!==b.key?a.set(b.key,b):a.set(b.index,b),b=b.sibling;return a}function e(a,b){a=Ed(a,b);a.index=0;a.sibling=null;return a}function f(b,c,d){b.index=d;if(!a)return c;d=b.alternate;if(null!==d)return d=d.index,d<c?(b.flags=2,
-c):d;b.flags=2;return c}function g(b){a&&null===b.alternate&&(b.flags=2);return b}function h(a,b,c,d){if(null===b||6!==b.tag)return b=Fd(c,a.mode,d),b.return=a,b;b=e(b,c);b.return=a;return b}function k(a,b,c,d){if(null!==b&&b.elementType===c.type)return d=e(b,c.props),d.ref=Bd(a,b,c),d.return=a,d;d=Gd(c.type,c.key,c.props,null,a.mode,d);d.ref=Bd(a,b,c);d.return=a;return d}function l(a,b,c,d){if(null===b||4!==b.tag||b.stateNode.containerInfo!==c.containerInfo||b.stateNode.implementation!==c.implementation)return b=
-Hd(c,a.mode,d),b.return=a,b;b=e(b,c.children||[]);b.return=a;return b}function n(a,b,c,d,f){if(null===b||7!==b.tag)return b=Id(c,a.mode,d,f),b.return=a,b;b=e(b,c);b.return=a;return b}function t(a,b,c){if("string"===typeof b||"number"===typeof b)return b=Fd(""+b,a.mode,c),b.return=a,b;if("object"===typeof b&&null!==b){switch(b.$$typeof){case da:return c=Gd(b.type,b.key,b.props,null,a.mode,c),c.ref=Bd(a,null,b),c.return=a,c;case ea:return b=Hd(b,a.mode,c),b.return=a,b}if(Ad(b)||va(b))return b=Id(b,
-a.mode,c,null),b.return=a,b;Cd(a,b)}return null}function p(a,b,c,d){var e=null!==b?b.key:null;if("string"===typeof c||"number"===typeof c)return null!==e?null:h(a,b,""+c,d);if("object"===typeof c&&null!==c){switch(c.$$typeof){case da:return c.key===e?c.type===fa?n(a,b,c.props.children,d,e):k(a,b,c,d):null;case ea:return c.key===e?l(a,b,c,d):null}if(Ad(c)||va(c))return null!==e?null:n(a,b,c,d,null);Cd(a,c)}return null}function y(a,b,c,d,e){if("string"===typeof d||"number"===typeof d)return a=a.get(c)||
-null,h(b,a,""+d,e);if("object"===typeof d&&null!==d){switch(d.$$typeof){case da:return a=a.get(null===d.key?c:d.key)||null,d.type===fa?n(b,a,d.props.children,e,d.key):k(b,a,d,e);case ea:return a=a.get(null===d.key?c:d.key)||null,l(b,a,d,e)}if(Ad(d)||va(d))return a=a.get(c)||null,n(b,a,d,e,null);Cd(b,d)}return null}function x(e,g,h,k){for(var l=null,v=null,u=g,C=g=0,n=null;null!==u&&C<h.length;C++){u.index>C?(n=u,u=null):n=u.sibling;var w=p(e,u,h[C],k);if(null===w){null===u&&(u=n);break}a&&u&&null===
-w.alternate&&b(e,u);g=f(w,g,C);null===v?l=w:v.sibling=w;v=w;u=n}if(C===h.length)return c(e,u),l;if(null===u){for(;C<h.length;C++)u=t(e,h[C],k),null!==u&&(g=f(u,g,C),null===v?l=u:v.sibling=u,v=u);return l}for(u=d(e,u);C<h.length;C++)n=y(u,e,C,h[C],k),null!==n&&(a&&null!==n.alternate&&u.delete(null===n.key?C:n.key),g=f(n,g,C),null===v?l=n:v.sibling=n,v=n);a&&u.forEach(function(a){return b(e,a)});return l}function Y(e,g,h,k){var l=va(h);if("function"!==typeof l)throw Error(q(150));h=l.call(h);if(null==
-h)throw Error(q(151));for(var u=l=null,v=g,n=g=0,C=null,w=h.next();null!==v&&!w.done;n++,w=h.next()){v.index>n?(C=v,v=null):C=v.sibling;var x=p(e,v,w.value,k);if(null===x){null===v&&(v=C);break}a&&v&&null===x.alternate&&b(e,v);g=f(x,g,n);null===u?l=x:u.sibling=x;u=x;v=C}if(w.done)return c(e,v),l;if(null===v){for(;!w.done;n++,w=h.next())w=t(e,w.value,k),null!==w&&(g=f(w,g,n),null===u?l=w:u.sibling=w,u=w);return l}for(v=d(e,v);!w.done;n++,w=h.next())w=y(v,e,n,w.value,k),null!==w&&(a&&null!==w.alternate&&
-v.delete(null===w.key?n:w.key),g=f(w,g,n),null===u?l=w:u.sibling=w,u=w);a&&v.forEach(function(a){return b(e,a)});return l}return function(a,d,f,h){var k="object"===typeof f&&null!==f&&f.type===fa&&null===f.key;k&&(f=f.props.children);var l="object"===typeof f&&null!==f;if(l)switch(f.$$typeof){case da:a:{l=f.key;for(k=d;null!==k;){if(k.key===l){switch(k.tag){case 7:if(f.type===fa){c(a,k.sibling);d=e(k,f.props.children);d.return=a;a=d;break a}break;default:if(k.elementType===f.type){c(a,k.sibling);
-d=e(k,f.props);d.ref=Bd(a,k,f);d.return=a;a=d;break a}}c(a,k);break}else b(a,k);k=k.sibling}f.type===fa?(d=Id(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Gd(f.type,f.key,f.props,null,a.mode,h),h.ref=Bd(a,d,f),h.return=a,a=h)}return g(a);case ea:a:{for(k=f.key;null!==d;){if(d.key===k)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=
-Hd(f,a.mode,h);d.return=a;a=d}return g(a)}if("string"===typeof f||"number"===typeof f)return f=""+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):(c(a,d),d=Fd(f,a.mode,h),d.return=a,a=d),g(a);if(Ad(f))return x(a,d,f,h);if(va(f))return Y(a,d,f,h);l&&Cd(a,f);if("undefined"===typeof f&&!k)switch(a.tag){case 1:case 22:case 0:case 11:case 15:throw Error(q(152,wa(a.type)||"Component"));}return c(a,d)}}var Jd=Dd(!0),Kd=Dd(!1),Ld={},L=Wb(Ld),Md=Wb(Ld),Nd=Wb(Ld);
-function Od(a){if(a===Ld)throw Error(q(174));return a}function Pd(a,b){A(Nd,b);A(Md,a);A(L,Ld);a=Ea(b);z(L);A(L,a)}function Qd(){z(L);z(Md);z(Nd)}function Rd(a){var b=Od(Nd.current),c=Od(L.current);b=Fa(c,a.type,b);c!==b&&(A(Md,a),A(L,b))}function Sd(a){Md.current===a&&(z(L),z(Md))}var M=Wb(0);
-function Td(a){for(var b=a;null!==b;){if(13===b.tag){var c=b.memoizedState;if(null!==c&&(c=c.dehydrated,null===c||Hb(c)||Ib(c)))return b}else if(19===b.tag&&void 0!==b.memoizedProps.revealOrder){if(0!==(b.flags&64))return b}else if(null!==b.child){b.child.return=b;b=b.child;continue}if(b===a)break;for(;null===b.sibling;){if(null===b.return||b.return===a)return null;b=b.return}b.sibling.return=b.return;b=b.sibling}return null}var Ud=null,Vd=null,Wd=!1;
-function Xd(a,b){var c=Yd(5,null,null,0);c.elementType="DELETED";c.type="DELETED";c.stateNode=b;c.return=a;c.flags=8;null!==a.lastEffect?(a.lastEffect.nextEffect=c,a.lastEffect=c):a.firstEffect=a.lastEffect=c}function Zd(a,b){switch(a.tag){case 5:return b=Fb(b,a.type,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;case 6:return b=Gb(b,a.pendingProps),null!==b?(a.stateNode=b,!0):!1;case 13:return!1;default:return!1}}
-function $d(a){if(Wd){var b=Vd;if(b){var c=b;if(!Zd(a,b)){b=Jb(c);if(!b||!Zd(a,b)){a.flags=a.flags&-1025|2;Wd=!1;Ud=a;return}Xd(Ud,c)}Ud=a;Vd=Kb(b)}else a.flags=a.flags&-1025|2,Wd=!1,Ud=a}}function ae(a){for(a=a.return;null!==a&&5!==a.tag&&3!==a.tag&&13!==a.tag;)a=a.return;Ud=a}
-function be(a){if(!Va||a!==Ud)return!1;if(!Wd)return ae(a),Wd=!0,!1;var b=a.type;if(5!==a.tag||"head"!==b&&"body"!==b&&!Ma(b,a.memoizedProps))for(b=Vd;b;)Xd(a,b),b=Jb(b);ae(a);if(13===a.tag){if(!Va)throw Error(q(316));a=a.memoizedState;a=null!==a?a.dehydrated:null;if(!a)throw Error(q(317));Vd=Nb(a)}else Vd=Ud?Jb(a.stateNode):null;return!0}function ce(){Va&&(Vd=Ud=null,Wd=!1)}var de=[];
-function ee(){for(var a=0;a<de.length;a++){var b=de[a];Sa?b._workInProgressVersionPrimary=null:b._workInProgressVersionSecondary=null}de.length=0}var fe=ca.ReactCurrentDispatcher,ge=ca.ReactCurrentBatchConfig,he=0,N=null,O=null,P=null,ie=!1,je=!1;function Q(){throw Error(q(321));}function ke(a,b){if(null===b)return!1;for(var c=0;c<b.length&&c<a.length;c++)if(!I(a[c],b[c]))return!1;return!0}
-function le(a,b,c,d,e,f){he=f;N=b;b.memoizedState=null;b.updateQueue=null;b.lanes=0;fe.current=null===a||null===a.memoizedState?me:ne;a=c(d,e);if(je){f=0;do{je=!1;if(!(25>f))throw Error(q(301));f+=1;P=O=null;b.updateQueue=null;fe.current=oe;a=c(d,e)}while(je)}fe.current=pe;b=null!==O&&null!==O.next;he=0;P=O=N=null;ie=!1;if(b)throw Error(q(300));return a}function qe(){var a={memoizedState:null,baseState:null,baseQueue:null,queue:null,next:null};null===P?N.memoizedState=P=a:P=P.next=a;return P}
-function re(){if(null===O){var a=N.alternate;a=null!==a?a.memoizedState:null}else a=O.next;var b=null===P?N.memoizedState:P.next;if(null!==b)P=b,O=a;else{if(null===a)throw Error(q(310));O=a;a={memoizedState:O.memoizedState,baseState:O.baseState,baseQueue:O.baseQueue,queue:O.queue,next:null};null===P?N.memoizedState=P=a:P=P.next=a}return P}function se(a,b){return"function"===typeof b?b(a):b}
-function te(a){var b=re(),c=b.queue;if(null===c)throw Error(q(311));c.lastRenderedReducer=a;var d=O,e=d.baseQueue,f=c.pending;if(null!==f){if(null!==e){var g=e.next;e.next=f.next;f.next=g}d.baseQueue=e=f;c.pending=null}if(null!==e){e=e.next;d=d.baseState;var h=g=f=null,k=e;do{var l=k.lane;if((he&l)===l)null!==h&&(h=h.next={lane:0,action:k.action,eagerReducer:k.eagerReducer,eagerState:k.eagerState,next:null}),d=k.eagerReducer===a?k.eagerState:a(d,k.action);else{var n={lane:l,action:k.action,eagerReducer:k.eagerReducer,
-eagerState:k.eagerState,next:null};null===h?(g=h=n,f=d):h=h.next=n;N.lanes|=l;pd|=l}k=k.next}while(null!==k&&k!==e);null===h?f=d:h.next=g;I(d,b.memoizedState)||(gd=!0);b.memoizedState=d;b.baseState=f;b.baseQueue=h;c.lastRenderedState=d}return[b.memoizedState,c.dispatch]}
-function ue(a){var b=re(),c=b.queue;if(null===c)throw Error(q(311));c.lastRenderedReducer=a;var d=c.dispatch,e=c.pending,f=b.memoizedState;if(null!==e){c.pending=null;var g=e=e.next;do f=a(f,g.action),g=g.next;while(g!==e);I(f,b.memoizedState)||(gd=!0);b.memoizedState=f;null===b.baseQueue&&(b.baseState=f);c.lastRenderedState=f}return[f,d]}
-function ve(a,b,c){var d=b._getVersion;d=d(b._source);var e=Sa?b._workInProgressVersionPrimary:b._workInProgressVersionSecondary;if(null!==e)a=e===d;else if(a=a.mutableReadLanes,a=(he&a)===a)Sa?b._workInProgressVersionPrimary=d:b._workInProgressVersionSecondary=d,de.push(b);if(a)return c(b._source);de.push(b);throw Error(q(350));}
-function we(a,b,c,d){var e=R;if(null===e)throw Error(q(349));var f=b._getVersion,g=f(b._source),h=fe.current,k=h.useState(function(){return ve(e,b,c)}),l=k[1],n=k[0];k=P;var t=a.memoizedState,p=t.refs,y=p.getSnapshot,x=t.source;t=t.subscribe;var Y=N;a.memoizedState={refs:p,source:b,subscribe:d};h.useEffect(function(){p.getSnapshot=c;p.setSnapshot=l;var a=f(b._source);if(!I(g,a)){a=c(b._source);I(n,a)||(l(a),a=td(Y),e.mutableReadLanes|=a&e.pendingLanes);a=e.mutableReadLanes;e.entangledLanes|=a;for(var d=
-e.entanglements,h=a;0<h;){var k=31-mc(h),t=1<<k;d[k]|=a;h&=~t}}},[c,b,d]);h.useEffect(function(){return d(b._source,function(){var a=p.getSnapshot,c=p.setSnapshot;try{c(a(b._source));var d=td(Y);e.mutableReadLanes|=d&e.pendingLanes}catch(Oa){c(function(){throw Oa;})}})},[b,d]);I(y,c)&&I(x,b)&&I(t,d)||(a={pending:null,dispatch:null,lastRenderedReducer:se,lastRenderedState:n},a.dispatch=l=xe.bind(null,N,a),k.queue=a,k.baseQueue=null,n=ve(e,b,c),k.memoizedState=k.baseState=n);return n}
-function ye(a,b,c){var d=re();return we(d,a,b,c)}function ze(a){var b=qe();"function"===typeof a&&(a=a());b.memoizedState=b.baseState=a;a=b.queue={pending:null,dispatch:null,lastRenderedReducer:se,lastRenderedState:a};a=a.dispatch=xe.bind(null,N,a);return[b.memoizedState,a]}
-function Ae(a,b,c,d){a={tag:a,create:b,destroy:c,deps:d,next:null};b=N.updateQueue;null===b?(b={lastEffect:null},N.updateQueue=b,b.lastEffect=a.next=a):(c=b.lastEffect,null===c?b.lastEffect=a.next=a:(d=c.next,c.next=a,a.next=d,b.lastEffect=a));return a}function Be(a){var b=qe();a={current:a};return b.memoizedState=a}function Ce(){return re().memoizedState}function De(a,b,c,d){var e=qe();N.flags|=a;e.memoizedState=Ae(1|b,c,void 0,void 0===d?null:d)}
-function Ee(a,b,c,d){var e=re();d=void 0===d?null:d;var f=void 0;if(null!==O){var g=O.memoizedState;f=g.destroy;if(null!==d&&ke(d,g.deps)){Ae(b,c,f,d);return}}N.flags|=a;e.memoizedState=Ae(1|b,c,f,d)}function Fe(a,b){return De(516,4,a,b)}function Ge(a,b){return Ee(516,4,a,b)}function He(a,b){return Ee(4,2,a,b)}function Ie(a,b){if("function"===typeof b)return a=a(),b(a),function(){b(null)};if(null!==b&&void 0!==b)return a=a(),b.current=a,function(){b.current=null}}
-function Je(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return Ee(4,2,Ie.bind(null,b,a),c)}function Ke(){}function Le(a,b){var c=re();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&ke(b,d[1]))return d[0];c.memoizedState=[a,b];return a}function Me(a,b){var c=re();b=void 0===b?null:b;var d=c.memoizedState;if(null!==d&&null!==b&&ke(b,d[1]))return d[0];a=a();c.memoizedState=[a,b];return a}
-function Ne(a,b){var c=Nc();Pc(98>c?98:c,function(){a(!0)});Pc(97<c?97:c,function(){var c=ge.transition;ge.transition=1;try{a(!1),b()}finally{ge.transition=c}})}
-function xe(a,b,c){var d=K(),e=td(a),f={lane:e,action:c,eagerReducer:null,eagerState:null,next:null},g=b.pending;null===g?f.next=f:(f.next=g.next,g.next=f);b.pending=f;g=a.alternate;if(a===N||null!==g&&g===N)je=ie=!0;else{if(0===a.lanes&&(null===g||0===g.lanes)&&(g=b.lastRenderedReducer,null!==g))try{var h=b.lastRenderedState,k=g(h,c);f.eagerReducer=g;f.eagerState=k;if(I(k,h))return}catch(l){}finally{}ud(a,e,d)}}
-var pe={readContext:J,useCallback:Q,useContext:Q,useEffect:Q,useImperativeHandle:Q,useLayoutEffect:Q,useMemo:Q,useReducer:Q,useRef:Q,useState:Q,useDebugValue:Q,useDeferredValue:Q,useTransition:Q,useMutableSource:Q,useOpaqueIdentifier:Q,unstable_isNewReconciler:!1},me={readContext:J,useCallback:function(a,b){qe().memoizedState=[a,void 0===b?null:b];return a},useContext:J,useEffect:Fe,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return De(4,2,Ie.bind(null,b,a),c)},useLayoutEffect:function(a,
-b){return De(4,2,a,b)},useMemo:function(a,b){var c=qe();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=qe();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a=d.queue={pending:null,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};a=a.dispatch=xe.bind(null,N,a);return[d.memoizedState,a]},useRef:Be,useState:ze,useDebugValue:Ke,useDeferredValue:function(a){var b=ze(a),c=b[0],d=b[1];Fe(function(){var b=ge.transition;ge.transition=1;try{d(a)}finally{ge.transition=
-b}},[a]);return c},useTransition:function(){var a=ze(!1),b=a[0];a=Ne.bind(null,a[1]);Be(a);return[a,b]},useMutableSource:function(a,b,c){var d=qe();d.memoizedState={refs:{getSnapshot:b,setSnapshot:null},source:a,subscribe:c};return we(d,a,b,c)},useOpaqueIdentifier:function(){if(Wd){var a=!1,b=Xa(function(){a||(a=!0,c(Ya()));throw Error(q(355));}),c=ze(b)[1];0===(N.mode&2)&&(N.flags|=516,Ae(5,function(){c(Ya())},void 0,null));return b}b=Ya();ze(b);return b},unstable_isNewReconciler:!1},ne={readContext:J,
-useCallback:Le,useContext:J,useEffect:Ge,useImperativeHandle:Je,useLayoutEffect:He,useMemo:Me,useReducer:te,useRef:Ce,useState:function(){return te(se)},useDebugValue:Ke,useDeferredValue:function(a){var b=te(se),c=b[0],d=b[1];Ge(function(){var b=ge.transition;ge.transition=1;try{d(a)}finally{ge.transition=b}},[a]);return c},useTransition:function(){var a=te(se)[0];return[Ce().current,a]},useMutableSource:ye,useOpaqueIdentifier:function(){return te(se)[0]},unstable_isNewReconciler:!1},oe={readContext:J,
-useCallback:Le,useContext:J,useEffect:Ge,useImperativeHandle:Je,useLayoutEffect:He,useMemo:Me,useReducer:ue,useRef:Ce,useState:function(){return ue(se)},useDebugValue:Ke,useDeferredValue:function(a){var b=ue(se),c=b[0],d=b[1];Ge(function(){var b=ge.transition;ge.transition=1;try{d(a)}finally{ge.transition=b}},[a]);return c},useTransition:function(){var a=ue(se)[0];return[Ce().current,a]},useMutableSource:ye,useOpaqueIdentifier:function(){return ue(se)[0]},unstable_isNewReconciler:!1},Oe=ca.ReactCurrentOwner,
-gd=!1;function S(a,b,c,d){b.child=null===a?Kd(b,null,c,d):Jd(b,a.child,c,d)}function Pe(a,b,c,d,e){c=c.render;var f=b.ref;fd(b,e);d=le(a,b,c,d,f,e);if(null!==a&&!gd)return b.updateQueue=a.updateQueue,b.flags&=-517,a.lanes&=~e,Re(a,b,e);b.flags|=1;S(a,b,d,e);return b.child}
-function Se(a,b,c,d,e,f){if(null===a){var g=c.type;if("function"===typeof g&&!Te(g)&&void 0===g.defaultProps&&null===c.compare&&void 0===c.defaultProps)return b.tag=15,b.type=g,Ue(a,b,g,d,e,f);a=Gd(c.type,null,d,b,b.mode,f);a.ref=b.ref;a.return=b;return b.child=a}g=a.child;if(0===(e&f)&&(e=g.memoizedProps,c=c.compare,c=null!==c?c:Vc,c(e,d)&&a.ref===b.ref))return Re(a,b,f);b.flags|=1;a=Ed(g,d);a.ref=b.ref;a.return=b;return b.child=a}
-function Ue(a,b,c,d,e,f){if(null!==a&&Vc(a.memoizedProps,d)&&a.ref===b.ref)if(gd=!1,0!==(f&e))0!==(a.flags&16384)&&(gd=!0);else return b.lanes=a.lanes,Re(a,b,f);return Ve(a,b,c,d,f)}
-function We(a,b,c){var d=b.pendingProps,e=d.children,f=null!==a?a.memoizedState:null;if("hidden"===d.mode||"unstable-defer-without-hiding"===d.mode)if(0===(b.mode&4))b.memoizedState={baseLanes:0},Xe(b,c);else if(0!==(c&1073741824))b.memoizedState={baseLanes:0},Xe(b,null!==f?f.baseLanes:c);else return a=null!==f?f.baseLanes|c:c,b.lanes=b.childLanes=1073741824,b.memoizedState={baseLanes:a},Xe(b,a),null;else null!==f?(d=f.baseLanes|c,b.memoizedState=null):d=c,Xe(b,d);S(a,b,e,c);return b.child}
-function Ye(a,b){var c=b.ref;if(null===a&&null!==c||null!==a&&a.ref!==c)b.flags|=128}function Ve(a,b,c,d,e){var f=E(c)?Yb:B.current;f=Zb(b,f);fd(b,e);c=le(a,b,c,d,f,e);if(null!==a&&!gd)return b.updateQueue=a.updateQueue,b.flags&=-517,a.lanes&=~e,Re(a,b,e);b.flags|=1;S(a,b,c,e);return b.child}
-function Ze(a,b,c,d,e){if(E(c)){var f=!0;cc(b)}else f=!1;fd(b,e);if(null===b.stateNode)null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),xd(b,c,d),zd(b,c,d,e),d=!0;else if(null===a){var g=b.stateNode,h=b.memoizedProps;g.props=h;var k=g.context,l=c.contextType;"object"===typeof l&&null!==l?l=J(l):(l=E(c)?Yb:B.current,l=Zb(b,l));var n=c.getDerivedStateFromProps,t="function"===typeof n||"function"===typeof g.getSnapshotBeforeUpdate;t||"function"!==typeof g.UNSAFE_componentWillReceiveProps&&"function"!==
-typeof g.componentWillReceiveProps||(h!==d||k!==l)&&yd(b,g,d,l);hd=!1;var p=b.memoizedState;g.state=p;od(b,d,g,e);k=b.memoizedState;h!==d||p!==k||D.current||hd?("function"===typeof n&&(sd(b,c,n,d),k=b.memoizedState),(h=hd||wd(b,c,h,d,p,k,l))?(t||"function"!==typeof g.UNSAFE_componentWillMount&&"function"!==typeof g.componentWillMount||("function"===typeof g.componentWillMount&&g.componentWillMount(),"function"===typeof g.UNSAFE_componentWillMount&&g.UNSAFE_componentWillMount()),"function"===typeof g.componentDidMount&&
-(b.flags|=4)):("function"===typeof g.componentDidMount&&(b.flags|=4),b.memoizedProps=d,b.memoizedState=k),g.props=d,g.state=k,g.context=l,d=h):("function"===typeof g.componentDidMount&&(b.flags|=4),d=!1)}else{g=b.stateNode;jd(a,b);h=b.memoizedProps;l=b.type===b.elementType?h:Xc(b.type,h);g.props=l;t=b.pendingProps;p=g.context;k=c.contextType;"object"===typeof k&&null!==k?k=J(k):(k=E(c)?Yb:B.current,k=Zb(b,k));var y=c.getDerivedStateFromProps;(n="function"===typeof y||"function"===typeof g.getSnapshotBeforeUpdate)||
-"function"!==typeof g.UNSAFE_componentWillReceiveProps&&"function"!==typeof g.componentWillReceiveProps||(h!==t||p!==k)&&yd(b,g,d,k);hd=!1;p=b.memoizedState;g.state=p;od(b,d,g,e);var x=b.memoizedState;h!==t||p!==x||D.current||hd?("function"===typeof y&&(sd(b,c,y,d),x=b.memoizedState),(l=hd||wd(b,c,l,d,p,x,k))?(n||"function"!==typeof g.UNSAFE_componentWillUpdate&&"function"!==typeof g.componentWillUpdate||("function"===typeof g.componentWillUpdate&&g.componentWillUpdate(d,x,k),"function"===typeof g.UNSAFE_componentWillUpdate&&
-g.UNSAFE_componentWillUpdate(d,x,k)),"function"===typeof g.componentDidUpdate&&(b.flags|=4),"function"===typeof g.getSnapshotBeforeUpdate&&(b.flags|=256)):("function"!==typeof g.componentDidUpdate||h===a.memoizedProps&&p===a.memoizedState||(b.flags|=4),"function"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&p===a.memoizedState||(b.flags|=256),b.memoizedProps=d,b.memoizedState=x),g.props=d,g.state=x,g.context=k,d=l):("function"!==typeof g.componentDidUpdate||h===a.memoizedProps&&p===a.memoizedState||
-(b.flags|=4),"function"!==typeof g.getSnapshotBeforeUpdate||h===a.memoizedProps&&p===a.memoizedState||(b.flags|=256),d=!1)}return $e(a,b,c,d,f,e)}function $e(a,b,c,d,e,f){Ye(a,b);var g=0!==(b.flags&64);if(!d&&!g)return e&&dc(b,c,!1),Re(a,b,f);d=b.stateNode;Oe.current=b;var h=g&&"function"!==typeof c.getDerivedStateFromError?null:d.render();b.flags|=1;null!==a&&g?(b.child=Jd(b,a.child,null,f),b.child=Jd(b,null,h,f)):S(a,b,h,f);b.memoizedState=d.state;e&&dc(b,c,!0);return b.child}
-function af(a){var b=a.stateNode;b.pendingContext?ac(a,b.pendingContext,b.pendingContext!==b.context):b.context&&ac(a,b.context,!1);Pd(a,b.containerInfo)}var bf={dehydrated:null,retryLane:0};
-function cf(a,b,c){var d=b.pendingProps,e=M.current,f=!1,g;(g=0!==(b.flags&64))||(g=null!==a&&null===a.memoizedState?!1:0!==(e&2));g?(f=!0,b.flags&=-65):null!==a&&null===a.memoizedState||void 0===d.fallback||!0===d.unstable_avoidThisFallback||(e|=1);A(M,e&1);if(null===a){void 0!==d.fallback&&$d(b);a=d.children;e=d.fallback;if(f)return a=df(b,a,e,c),b.child.memoizedState={baseLanes:c},b.memoizedState=bf,a;if("number"===typeof d.unstable_expectedLoadTime)return a=df(b,a,e,c),b.child.memoizedState={baseLanes:c},
-b.memoizedState=bf,b.lanes=33554432,a;c=ef({mode:"visible",children:a},b.mode,c,null);c.return=b;return b.child=c}if(null!==a.memoizedState){if(f)return d=ff(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?{baseLanes:c}:{baseLanes:e.baseLanes|c},f.childLanes=a.childLanes&~c,b.memoizedState=bf,d;c=gf(a,b,d.children,c);b.memoizedState=null;return c}if(f)return d=ff(a,b,d.children,d.fallback,c),f=b.child,e=a.child.memoizedState,f.memoizedState=null===e?{baseLanes:c}:
-{baseLanes:e.baseLanes|c},f.childLanes=a.childLanes&~c,b.memoizedState=bf,d;c=gf(a,b,d.children,c);b.memoizedState=null;return c}function df(a,b,c,d){var e=a.mode,f=a.child;b={mode:"hidden",children:b};0===(e&2)&&null!==f?(f.childLanes=0,f.pendingProps=b):f=ef(b,e,0,null);c=Id(c,e,d,null);f.return=a;c.return=a;f.sibling=c;a.child=f;return c}
-function gf(a,b,c,d){var e=a.child;a=e.sibling;c=Ed(e,{mode:"visible",children:c});0===(b.mode&2)&&(c.lanes=d);c.return=b;c.sibling=null;null!==a&&(a.nextEffect=null,a.flags=8,b.firstEffect=b.lastEffect=a);return b.child=c}
-function ff(a,b,c,d,e){var f=b.mode,g=a.child;a=g.sibling;var h={mode:"hidden",children:c};0===(f&2)&&b.child!==g?(c=b.child,c.childLanes=0,c.pendingProps=h,g=c.lastEffect,null!==g?(b.firstEffect=c.firstEffect,b.lastEffect=g,g.nextEffect=null):b.firstEffect=b.lastEffect=null):c=Ed(g,h);null!==a?d=Ed(a,d):(d=Id(d,f,e,null),d.flags|=2);d.return=b;c.return=b;c.sibling=d;b.child=c;return d}function hf(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);ed(a.return,b)}
-function jf(a,b,c,d,e,f){var g=a.memoizedState;null===g?a.memoizedState={isBackwards:b,rendering:null,renderingStartTime:0,last:d,tail:c,tailMode:e,lastEffect:f}:(g.isBackwards=b,g.rendering=null,g.renderingStartTime=0,g.last=d,g.tail=c,g.tailMode=e,g.lastEffect=f)}
-function kf(a,b,c){var d=b.pendingProps,e=d.revealOrder,f=d.tail;S(a,b,d.children,c);d=M.current;if(0!==(d&2))d=d&1|2,b.flags|=64;else{if(null!==a&&0!==(a.flags&64))a:for(a=b.child;null!==a;){if(13===a.tag)null!==a.memoizedState&&hf(a,c);else if(19===a.tag)hf(a,c);else if(null!==a.child){a.child.return=a;a=a.child;continue}if(a===b)break a;for(;null===a.sibling;){if(null===a.return||a.return===b)break a;a=a.return}a.sibling.return=a.return;a=a.sibling}d&=1}A(M,d);if(0===(b.mode&2))b.memoizedState=
-null;else switch(e){case "forwards":c=b.child;for(e=null;null!==c;)a=c.alternate,null!==a&&null===Td(a)&&(e=c),c=c.sibling;c=e;null===c?(e=b.child,b.child=null):(e=c.sibling,c.sibling=null);jf(b,!1,e,c,f,b.lastEffect);break;case "backwards":c=null;e=b.child;for(b.child=null;null!==e;){a=e.alternate;if(null!==a&&null===Td(a)){b.child=e;break}a=e.sibling;e.sibling=c;c=e;e=a}jf(b,!0,c,null,f,b.lastEffect);break;case "together":jf(b,!1,null,null,void 0,b.lastEffect);break;default:b.memoizedState=null}return b.child}
-function Re(a,b,c){null!==a&&(b.dependencies=a.dependencies);pd|=b.lanes;if(0!==(c&b.childLanes)){if(null!==a&&b.child!==a.child)throw Error(q(153));if(null!==b.child){a=b.child;c=Ed(a,a.pendingProps);b.child=c;for(c.return=b;null!==a.sibling;)a=a.sibling,c=c.sibling=Ed(a,a.pendingProps),c.return=b;c.sibling=null}return b.child}return null}function lf(a){a.flags|=4}var mf,nf,of,pf;
-if(Ta)mf=function(a,b){for(var c=b.child;null!==c;){if(5===c.tag||6===c.tag)Ja(a,c.stateNode);else if(4!==c.tag&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}},nf=function(){},of=function(a,b,c,d,e){a=a.memoizedProps;if(a!==d){var f=b.stateNode,g=Od(L.current);c=La(f,c,a,d,e,g);(b.updateQueue=c)&&lf(b)}},pf=function(a,b,c,d){c!==d&&lf(b)};else if(Ua){mf=function(a,
-b,c,d){for(var e=b.child;null!==e;){if(5===e.tag){var f=e.stateNode;c&&d&&(f=Db(f,e.type,e.memoizedProps,e));Ja(a,f)}else if(6===e.tag)f=e.stateNode,c&&d&&(f=Eb(f,e.memoizedProps,e)),Ja(a,f);else if(4!==e.tag){if(13===e.tag&&0!==(e.flags&4)&&(f=null!==e.memoizedState)){var g=e.child;if(null!==g&&(null!==g.child&&(g.child.return=g,mf(a,g,!0,f)),f=g.sibling,null!==f)){f.return=e;e=f;continue}}if(null!==e.child){e.child.return=e;e=e.child;continue}}if(e===b)break;for(;null===e.sibling;){if(null===e.return||
-e.return===b)return;e=e.return}e.sibling.return=e.return;e=e.sibling}};var qf=function(a,b,c,d){for(var e=b.child;null!==e;){if(5===e.tag){var f=e.stateNode;c&&d&&(f=Db(f,e.type,e.memoizedProps,e));Ab(a,f)}else if(6===e.tag)f=e.stateNode,c&&d&&(f=Eb(f,e.memoizedProps,e)),Ab(a,f);else if(4!==e.tag){if(13===e.tag&&0!==(e.flags&4)&&(f=null!==e.memoizedState)){var g=e.child;if(null!==g&&(null!==g.child&&(g.child.return=g,qf(a,g,!0,f)),f=g.sibling,null!==f)){f.return=e;e=f;continue}}if(null!==e.child){e.child.return=
-e;e=e.child;continue}}if(e===b)break;for(;null===e.sibling;){if(null===e.return||e.return===b)return;e=e.return}e.sibling.return=e.return;e=e.sibling}};nf=function(a){var b=a.stateNode;if(null!==a.firstEffect){var c=b.containerInfo,d=zb(c);qf(d,a,!1,!1);b.pendingChildren=d;lf(a);Bb(c,d)}};of=function(a,b,c,d,e){var f=a.stateNode,g=a.memoizedProps;if((a=null===b.firstEffect)&&g===d)b.stateNode=f;else{var h=b.stateNode,k=Od(L.current),l=null;g!==d&&(l=La(h,c,g,d,e,k));a&&null===l?b.stateNode=f:(f=yb(f,
-l,c,g,d,b,a,h),Ka(f,c,d,e,k)&&lf(b),b.stateNode=f,a?lf(b):mf(f,b,!1,!1))}};pf=function(a,b,c,d){c!==d?(a=Od(Nd.current),c=Od(L.current),b.stateNode=Na(d,a,c,b),lf(b)):b.stateNode=a.stateNode}}else nf=function(){},of=function(){},pf=function(){};
-function rf(a,b){if(!Wd)switch(a.tailMode){case "hidden":b=a.tail;for(var c=null;null!==b;)null!==b.alternate&&(c=b),b=b.sibling;null===c?a.tail=null:c.sibling=null;break;case "collapsed":c=a.tail;for(var d=null;null!==c;)null!==c.alternate&&(d=c),c=c.sibling;null===d?b||null===a.tail?a.tail=null:a.tail.sibling=null:d.sibling=null}}
-function sf(a,b,c){var d=b.pendingProps;switch(b.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return null;case 1:return E(b.type)&&$b(),null;case 3:Qd();z(D);z(B);ee();d=b.stateNode;d.pendingContext&&(d.context=d.pendingContext,d.pendingContext=null);if(null===a||null===a.child)be(b)?lf(b):d.hydrate||(b.flags|=256);nf(b);return null;case 5:Sd(b);var e=Od(Nd.current);c=b.type;if(null!==a&&null!=b.stateNode)of(a,b,c,d,e),a.ref!==b.ref&&(b.flags|=128);else{if(!d){if(null===
-b.stateNode)throw Error(q(166));return null}a=Od(L.current);if(be(b)){if(!Va)throw Error(q(175));a=Lb(b.stateNode,b.type,b.memoizedProps,e,a,b);b.updateQueue=a;null!==a&&lf(b)}else{var f=Ia(c,d,e,a,b);mf(f,b,!1,!1);b.stateNode=f;Ka(f,c,d,e,a)&&lf(b)}null!==b.ref&&(b.flags|=128)}return null;case 6:if(a&&null!=b.stateNode)pf(a,b,a.memoizedProps,d);else{if("string"!==typeof d&&null===b.stateNode)throw Error(q(166));a=Od(Nd.current);e=Od(L.current);if(be(b)){if(!Va)throw Error(q(176));Mb(b.stateNode,
-b.memoizedProps,b)&&lf(b)}else b.stateNode=Na(d,a,e,b)}return null;case 13:z(M);d=b.memoizedState;if(0!==(b.flags&64))return b.lanes=c,b;d=null!==d;e=!1;null===a?void 0!==b.memoizedProps.fallback&&be(b):e=null!==a.memoizedState;if(d&&!e&&0!==(b.mode&2))if(null===a&&!0!==b.memoizedProps.unstable_avoidThisFallback||0!==(M.current&1))0===T&&(T=3);else{if(0===T||3===T)T=4;null===R||0===(pd&134217727)&&0===(tf&134217727)||uf(R,U)}Ua&&d&&(b.flags|=4);Ta&&(d||e)&&(b.flags|=4);return null;case 4:return Qd(),
-nf(b),null===a&&ab(b.stateNode.containerInfo),null;case 10:return dd(b),null;case 17:return E(b.type)&&$b(),null;case 19:z(M);d=b.memoizedState;if(null===d)return null;e=0!==(b.flags&64);f=d.rendering;if(null===f)if(e)rf(d,!1);else{if(0!==T||null!==a&&0!==(a.flags&64))for(a=b.child;null!==a;){f=Td(a);if(null!==f){b.flags|=64;rf(d,!1);a=f.updateQueue;null!==a&&(b.updateQueue=a,b.flags|=4);null===d.lastEffect&&(b.firstEffect=null);b.lastEffect=d.lastEffect;a=c;for(d=b.child;null!==d;)e=d,c=a,e.flags&=
-2,e.nextEffect=null,e.firstEffect=null,e.lastEffect=null,f=e.alternate,null===f?(e.childLanes=0,e.lanes=c,e.child=null,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=f.childLanes,e.lanes=f.lanes,e.child=f.child,e.memoizedProps=f.memoizedProps,e.memoizedState=f.memoizedState,e.updateQueue=f.updateQueue,e.type=f.type,c=f.dependencies,e.dependencies=null===c?null:{lanes:c.lanes,firstContext:c.firstContext}),d=d.sibling;A(M,M.current&1|
-2);return b.child}a=a.sibling}null!==d.tail&&G()>vf&&(b.flags|=64,e=!0,rf(d,!1),b.lanes=33554432)}else{if(!e)if(a=Td(f),null!==a){if(b.flags|=64,e=!0,a=a.updateQueue,null!==a&&(b.updateQueue=a,b.flags|=4),rf(d,!0),null===d.tail&&"hidden"===d.tailMode&&!f.alternate&&!Wd)return b=b.lastEffect=d.lastEffect,null!==b&&(b.nextEffect=null),null}else 2*G()-d.renderingStartTime>vf&&1073741824!==c&&(b.flags|=64,e=!0,rf(d,!1),b.lanes=33554432);d.isBackwards?(f.sibling=b.child,b.child=f):(a=d.last,null!==a?a.sibling=
-f:b.child=f,d.last=f)}return null!==d.tail?(a=d.tail,d.rendering=a,d.tail=a.sibling,d.lastEffect=b.lastEffect,d.renderingStartTime=G(),a.sibling=null,b=M.current,A(M,e?b&1|2:b&1),a):null;case 23:case 24:return wf(),null!==a&&null!==a.memoizedState!==(null!==b.memoizedState)&&"unstable-defer-without-hiding"!==d.mode&&(b.flags|=4),null}throw Error(q(156,b.tag));}
-function xf(a){switch(a.tag){case 1:E(a.type)&&$b();var b=a.flags;return b&4096?(a.flags=b&-4097|64,a):null;case 3:Qd();z(D);z(B);ee();b=a.flags;if(0!==(b&64))throw Error(q(285));a.flags=b&-4097|64;return a;case 5:return Sd(a),null;case 13:return z(M),b=a.flags,b&4096?(a.flags=b&-4097|64,a):null;case 19:return z(M),null;case 4:return Qd(),null;case 10:return dd(a),null;case 23:case 24:return wf(),null;default:return null}}
-function yf(a,b){try{var c="",d=b;do c+=Wc(d),d=d.return;while(d);var e=c}catch(f){e="\nError generating stack: "+f.message+"\n"+f.stack}return{value:a,source:b,stack:e}}function zf(a,b){try{console.error(b.value)}catch(c){setTimeout(function(){throw c;})}}var Af="function"===typeof WeakMap?WeakMap:Map;function Bf(a,b,c){c=kd(-1,c);c.tag=3;c.payload={element:null};var d=b.value;c.callback=function(){Cf||(Cf=!0,Df=d);zf(a,b)};return c}
-function Ef(a,b,c){c=kd(-1,c);c.tag=3;var d=a.type.getDerivedStateFromError;if("function"===typeof d){var e=b.value;c.payload=function(){zf(a,b);return d(e)}}var f=a.stateNode;null!==f&&"function"===typeof f.componentDidCatch&&(c.callback=function(){"function"!==typeof d&&(null===Ff?Ff=new Set([this]):Ff.add(this),zf(a,b));var c=b.stack;this.componentDidCatch(b.value,{componentStack:null!==c?c:""})});return c}var Gf="function"===typeof WeakSet?WeakSet:Set;
-function Hf(a){var b=a.ref;if(null!==b)if("function"===typeof b)try{b(null)}catch(c){If(a,c)}else b.current=null}
-function Jf(a,b){switch(b.tag){case 0:case 11:case 15:case 22:return;case 1:if(b.flags&256&&null!==a){var c=a.memoizedProps,d=a.memoizedState;a=b.stateNode;b=a.getSnapshotBeforeUpdate(b.elementType===b.type?c:Xc(b.type,c),d);a.__reactInternalSnapshotBeforeUpdate=b}return;case 3:Ta&&b.flags&256&&xb(b.stateNode.containerInfo);return;case 5:case 6:case 4:case 17:return}throw Error(q(163));}
-function Kf(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.destroy;c.destroy=void 0;void 0!==d&&d()}c=c.next}while(c!==b)}}
-function Lf(a,b,c){switch(c.tag){case 0:case 11:case 15:case 22:b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{if(3===(a.tag&3)){var d=a.create;a.destroy=d()}a=a.next}while(a!==b)}b=c.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){a=b=b.next;do{var e=a;d=e.next;e=e.tag;0!==(e&4)&&0!==(e&1)&&(Mf(c,a),Nf(c,a));a=d}while(a!==b)}return;case 1:a=c.stateNode;c.flags&4&&(null===b?a.componentDidMount():(d=c.elementType===c.type?b.memoizedProps:Xc(c.type,b.memoizedProps),a.componentDidUpdate(d,
-b.memoizedState,a.__reactInternalSnapshotBeforeUpdate)));b=c.updateQueue;null!==b&&qd(c,b,a);return;case 3:b=c.updateQueue;if(null!==b){a=null;if(null!==c.child)switch(c.child.tag){case 5:a=Da(c.child.stateNode);break;case 1:a=c.child.stateNode}qd(c,b,a)}return;case 5:a=c.stateNode;null===b&&c.flags&4&&mb(a,c.type,c.memoizedProps,c);return;case 6:return;case 4:return;case 12:return;case 13:Va&&null===c.memoizedState&&(c=c.alternate,null!==c&&(c=c.memoizedState,null!==c&&(c=c.dehydrated,null!==c&&
-Pb(c))));return;case 19:case 17:case 20:case 21:case 23:case 24:return}throw Error(q(163));}
-function Of(a,b){if(Ta)for(var c=a;;){if(5===c.tag){var d=c.stateNode;b?tb(d):vb(c.stateNode,c.memoizedProps)}else if(6===c.tag)d=c.stateNode,b?ub(d):wb(d,c.memoizedProps);else if((23!==c.tag&&24!==c.tag||null===c.memoizedState||c===a)&&null!==c.child){c.child.return=c;c=c.child;continue}if(c===a)break;for(;null===c.sibling;){if(null===c.return||c.return===a)return;c=c.return}c.sibling.return=c.return;c=c.sibling}}
-function Pf(a,b){if(fc&&"function"===typeof fc.onCommitFiberUnmount)try{fc.onCommitFiberUnmount(ec,b)}catch(f){}switch(b.tag){case 0:case 11:case 14:case 15:case 22:a=b.updateQueue;if(null!==a&&(a=a.lastEffect,null!==a)){var c=a=a.next;do{var d=c,e=d.destroy;d=d.tag;if(void 0!==e)if(0!==(d&4))Mf(b,c);else{d=b;try{e()}catch(f){If(d,f)}}c=c.next}while(c!==a)}break;case 1:Hf(b);a=b.stateNode;if("function"===typeof a.componentWillUnmount)try{a.props=b.memoizedProps,a.state=b.memoizedState,a.componentWillUnmount()}catch(f){If(b,
-f)}break;case 5:Hf(b);break;case 4:Ta?Qf(a,b):Ua&&Ua&&(b=b.stateNode.containerInfo,a=zb(b),Cb(b,a))}}function Rf(a,b){for(var c=b;;)if(Pf(a,c),null===c.child||Ta&&4===c.tag){if(c===b)break;for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return}c.sibling.return=c.return;c=c.sibling}else c.child.return=c,c=c.child}
-function Sf(a){a.alternate=null;a.child=null;a.dependencies=null;a.firstEffect=null;a.lastEffect=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.return=null;a.updateQueue=null}function Tf(a){return 5===a.tag||3===a.tag||4===a.tag}
-function Uf(a){if(Ta){a:{for(var b=a.return;null!==b;){if(Tf(b))break a;b=b.return}throw Error(q(160));}var c=b;b=c.stateNode;switch(c.tag){case 5:var d=!1;break;case 3:b=b.containerInfo;d=!0;break;case 4:b=b.containerInfo;d=!0;break;default:throw Error(q(161));}c.flags&16&&(sb(b),c.flags&=-17);a:b:for(c=a;;){for(;null===c.sibling;){if(null===c.return||Tf(c.return)){c=null;break a}c=c.return}c.sibling.return=c.return;for(c=c.sibling;5!==c.tag&&6!==c.tag&&18!==c.tag;){if(c.flags&2)continue b;if(null===
-c.child||4===c.tag)continue b;else c.child.return=c,c=c.child}if(!(c.flags&2)){c=c.stateNode;break a}}d?Vf(a,c,b):Wf(a,c,b)}}function Vf(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?pb(c,a,b):kb(c,a);else if(4!==d&&(a=a.child,null!==a))for(Vf(a,b,c),a=a.sibling;null!==a;)Vf(a,b,c),a=a.sibling}
-function Wf(a,b,c){var d=a.tag,e=5===d||6===d;if(e)a=e?a.stateNode:a.stateNode.instance,b?ob(c,a,b):jb(c,a);else if(4!==d&&(a=a.child,null!==a))for(Wf(a,b,c),a=a.sibling;null!==a;)Wf(a,b,c),a=a.sibling}
-function Qf(a,b){for(var c=b,d=!1,e,f;;){if(!d){d=c.return;a:for(;;){if(null===d)throw Error(q(160));e=d.stateNode;switch(d.tag){case 5:f=!1;break a;case 3:e=e.containerInfo;f=!0;break a;case 4:e=e.containerInfo;f=!0;break a}d=d.return}d=!0}if(5===c.tag||6===c.tag)Rf(a,c),f?rb(e,c.stateNode):qb(e,c.stateNode);else if(4===c.tag){if(null!==c.child){e=c.stateNode.containerInfo;f=!0;c.child.return=c;c=c.child;continue}}else if(Pf(a,c),null!==c.child){c.child.return=c;c=c.child;continue}if(c===b)break;
-for(;null===c.sibling;){if(null===c.return||c.return===b)return;c=c.return;4===c.tag&&(d=!1)}c.sibling.return=c.return;c=c.sibling}}
-function Xf(a,b){if(Ta){switch(b.tag){case 0:case 11:case 14:case 15:case 22:Kf(3,b);return;case 1:return;case 5:var c=b.stateNode;if(null!=c){var d=b.memoizedProps;a=null!==a?a.memoizedProps:d;var e=b.type,f=b.updateQueue;b.updateQueue=null;null!==f&&nb(c,f,e,a,d,b)}return;case 6:if(null===b.stateNode)throw Error(q(162));c=b.memoizedProps;lb(b.stateNode,null!==a?a.memoizedProps:c,c);return;case 3:Va&&(b=b.stateNode,b.hydrate&&(b.hydrate=!1,Ob(b.containerInfo)));return;case 12:return;case 13:Yf(b);
-Zf(b);return;case 19:Zf(b);return;case 17:return;case 23:case 24:Of(b,null!==b.memoizedState);return}throw Error(q(163));}switch(b.tag){case 0:case 11:case 14:case 15:case 22:Kf(3,b);return;case 12:return;case 13:Yf(b);Zf(b);return;case 19:Zf(b);return;case 3:Va&&(c=b.stateNode,c.hydrate&&(c.hydrate=!1,Ob(c.containerInfo)));break;case 23:case 24:return}a:if(Ua){switch(b.tag){case 1:case 5:case 6:case 20:break a;case 3:case 4:b=b.stateNode;Cb(b.containerInfo,b.pendingChildren);break a}throw Error(q(163));
-}}function Yf(a){null!==a.memoizedState&&($f=G(),Ta&&Of(a.child,!0))}function Zf(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Gf);b.forEach(function(b){var d=ag.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}function bg(a,b){return null!==a&&(a=a.memoizedState,null===a||null!==a.dehydrated)?(b=b.memoizedState,null!==b&&null===b.dehydrated):!1}var cg=0,dg=1,eg=2,fg=3,gg=4;
-if("function"===typeof Symbol&&Symbol.for){var hg=Symbol.for;cg=hg("selector.component");dg=hg("selector.has_pseudo_class");eg=hg("selector.role");fg=hg("selector.test_id");gg=hg("selector.text")}function ig(a){var b=Wa(a);if(null!=b){if("string"!==typeof b.memoizedProps["data-testname"])throw Error(q(364));return b}a=cb(a);if(null===a)throw Error(q(362));return a.stateNode.current}
-function jg(a,b){switch(b.$$typeof){case cg:if(a.type===b.value)return!0;break;case dg:a:{b=b.value;a=[a,0];for(var c=0;c<a.length;){var d=a[c++],e=a[c++],f=b[e];if(5!==d.tag||!fb(d)){for(;null!=f&&jg(d,f);)e++,f=b[e];if(e===b.length){b=!0;break a}else for(d=d.child;null!==d;)a.push(d,e),d=d.sibling}}b=!1}return b;case eg:if(5===a.tag&&gb(a.stateNode,b.value))return!0;break;case gg:if(5===a.tag||6===a.tag)if(a=eb(a),null!==a&&0<=a.indexOf(b.value))return!0;break;case fg:if(5===a.tag&&(a=a.memoizedProps["data-testname"],
-"string"===typeof a&&a.toLowerCase()===b.value.toLowerCase()))return!0;break;default:throw Error(q(365,b));}return!1}function kg(a){switch(a.$$typeof){case cg:return"<"+(wa(a.value)||"Unknown")+">";case dg:return":has("+(kg(a)||"")+")";case eg:return'[role="'+a.value+'"]';case gg:return'"'+a.value+'"';case fg:return'[data-testname="'+a.value+'"]';default:throw Error(q(365,a));}}
-function lg(a,b){var c=[];a=[a,0];for(var d=0;d<a.length;){var e=a[d++],f=a[d++],g=b[f];if(5!==e.tag||!fb(e)){for(;null!=g&&jg(e,g);)f++,g=b[f];if(f===b.length)c.push(e);else for(e=e.child;null!==e;)a.push(e,f),e=e.sibling}}return c}function mg(a,b){if(!bb)throw Error(q(363));a=ig(a);a=lg(a,b);b=[];a=Array.from(a);for(var c=0;c<a.length;){var d=a[c++];if(5===d.tag)fb(d)||b.push(d.stateNode);else for(d=d.child;null!==d;)a.push(d),d=d.sibling}return b}var ng=null;
-function og(a){if(null===ng)try{var b=("require"+Math.random()).slice(0,7);ng=(module&&module[b]).call(module,"timers").setImmediate}catch(c){ng=function(a){var b=new MessageChannel;b.port1.onmessage=a;b.port2.postMessage(void 0)}}return ng(a)}var pg=Math.ceil,qg=ca.ReactCurrentDispatcher,rg=ca.ReactCurrentOwner,sg=ca.IsSomeRendererActing,V=0,R=null,W=null,U=0,tg=0,ug=Wb(0),T=0,vg=null,wg=0,pd=0,tf=0,xg=0,yg=null,$f=0,vf=Infinity;function zg(){vf=G()+500}
-var X=null,Cf=!1,Df=null,Ff=null,Ag=!1,Bg=null,Cg=90,Dg=[],Eg=[],Fg=null,Gg=0,Hg=null,Ig=-1,Jg=0,Kg=0,Lg=null,Mg=!1;function K(){return 0!==(V&48)?G():-1!==Ig?Ig:Ig=G()}function td(a){a=a.mode;if(0===(a&2))return 1;if(0===(a&4))return 99===Nc()?1:2;0===Jg&&(Jg=wg);if(0!==Sc.transition){0!==Kg&&(Kg=null!==yg?yg.pendingLanes:0);a=Jg;var b=4186112&~Kg;b&=-b;0===b&&(a=4186112&~a,b=a&-a,0===b&&(b=8192));return b}a=Nc();0!==(V&4)&&98===a?a=oc(12,Jg):(a=jc(a),a=oc(a,Jg));return a}
-function ud(a,b,c){if(50<Gg)throw Gg=0,Hg=null,Error(q(185));a=Ng(a,b);if(null===a)return null;rc(a,b,c);a===R&&(tf|=b,4===T&&uf(a,U));var d=Nc();1===b?0!==(V&8)&&0===(V&48)?Og(a):(Z(a,c),0===V&&(zg(),H())):(0===(V&4)||98!==d&&99!==d||(null===Fg?Fg=new Set([a]):Fg.add(a)),Z(a,c));yg=a}function Ng(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}
-function Z(a,b){for(var c=a.callbackNode,d=a.suspendedLanes,e=a.pingedLanes,f=a.expirationTimes,g=a.pendingLanes;0<g;){var h=31-mc(g),k=1<<h,l=f[h];if(-1===l){if(0===(k&d)||0!==(k&e)){l=b;ic(k);var n=F;f[h]=10<=n?l+250:6<=n?l+5E3:-1}}else l<=b&&(a.expiredLanes|=k);g&=~k}d=lc(a,a===R?U:0);b=F;if(0===d)null!==c&&(c!==Hc&&xc(c),a.callbackNode=null,a.callbackPriority=0);else{if(null!==c){if(a.callbackPriority===b)return;c!==Hc&&xc(c)}15===b?(c=Og.bind(null,a),null===Jc?(Jc=[c],Kc=wc(Cc,Rc)):Jc.push(c),
-c=Hc):14===b?c=Qc(99,Og.bind(null,a)):(c=kc(b),c=Qc(c,Pg.bind(null,a)));a.callbackPriority=b;a.callbackNode=c}}
-function Pg(a){Ig=-1;Kg=Jg=0;if(0!==(V&48))throw Error(q(327));var b=a.callbackNode;if(Qg()&&a.callbackNode!==b)return null;var c=lc(a,a===R?U:0);if(0===c)return null;var d=c;var e=V;V|=16;var f=Rg();if(R!==a||U!==d)zg(),Sg(a,d);do try{Tg();break}catch(h){Ug(a,h)}while(1);bd();qg.current=f;V=e;null!==W?d=0:(R=null,U=0,d=T);if(0!==(wg&tf))Sg(a,0);else if(0!==d){2===d&&(V|=64,a.hydrate&&(a.hydrate=!1,xb(a.containerInfo)),c=nc(a),0!==c&&(d=Vg(a,c)));if(1===d)throw b=vg,Sg(a,0),uf(a,c),Z(a,G()),b;a.finishedWork=
-a.current.alternate;a.finishedLanes=c;switch(d){case 0:case 1:throw Error(q(345));case 2:Zg(a);break;case 3:uf(a,c);if((c&62914560)===c&&(d=$f+500-G(),10<d)){if(0!==lc(a,0))break;e=a.suspendedLanes;if((e&c)!==c){K();a.pingedLanes|=a.suspendedLanes&e;break}a.timeoutHandle=Pa(Zg.bind(null,a),d);break}Zg(a);break;case 4:uf(a,c);if((c&4186112)===c)break;d=a.eventTimes;for(e=-1;0<c;){var g=31-mc(c);f=1<<g;g=d[g];g>e&&(e=g);c&=~f}c=e;c=G()-c;c=(120>c?120:480>c?480:1080>c?1080:1920>c?1920:3E3>c?3E3:4320>
-c?4320:1960*pg(c/1960))-c;if(10<c){a.timeoutHandle=Pa(Zg.bind(null,a),c);break}Zg(a);break;case 5:Zg(a);break;default:throw Error(q(329));}}Z(a,G());return a.callbackNode===b?Pg.bind(null,a):null}function uf(a,b){b&=~xg;b&=~tf;a.suspendedLanes|=b;a.pingedLanes&=~b;for(a=a.expirationTimes;0<b;){var c=31-mc(b),d=1<<c;a[c]=-1;b&=~d}}
-function Og(a){if(0!==(V&48))throw Error(q(327));Qg();if(a===R&&0!==(a.expiredLanes&U)){var b=U;var c=Vg(a,b);0!==(wg&tf)&&(b=lc(a,b),c=Vg(a,b))}else b=lc(a,0),c=Vg(a,b);0!==a.tag&&2===c&&(V|=64,a.hydrate&&(a.hydrate=!1,xb(a.containerInfo)),b=nc(a),0!==b&&(c=Vg(a,b)));if(1===c)throw c=vg,Sg(a,0),uf(a,b),Z(a,G()),c;a.finishedWork=a.current.alternate;a.finishedLanes=b;Zg(a);Z(a,G());return null}
-function $g(){if(null!==Fg){var a=Fg;Fg=null;a.forEach(function(a){a.expiredLanes|=24&a.pendingLanes;Z(a,G())})}H()}function ah(a,b){var c=V;V|=1;try{return a(b)}finally{V=c,0===V&&(zg(),H())}}function bh(a,b){var c=V;if(0!==(c&48))return a(b);V|=1;try{if(a)return Pc(99,a.bind(null,b))}finally{V=c,H()}}function Xe(a,b){A(ug,tg);tg|=b;wg|=b}function wf(){tg=ug.current;z(ug)}
-function Sg(a,b){a.finishedWork=null;a.finishedLanes=0;var c=a.timeoutHandle;c!==Ra&&(a.timeoutHandle=Ra,Qa(c));if(null!==W)for(c=W.return;null!==c;){var d=c;switch(d.tag){case 1:d=d.type.childContextTypes;null!==d&&void 0!==d&&$b();break;case 3:Qd();z(D);z(B);ee();break;case 5:Sd(d);break;case 4:Qd();break;case 13:z(M);break;case 19:z(M);break;case 10:dd(d);break;case 23:case 24:wf()}c=c.return}R=a;W=Ed(a.current,null);U=tg=wg=b;T=0;vg=null;xg=tf=pd=0}
-function Ug(a,b){do{var c=W;try{bd();fe.current=pe;if(ie){for(var d=N.memoizedState;null!==d;){var e=d.queue;null!==e&&(e.pending=null);d=d.next}ie=!1}he=0;P=O=N=null;je=!1;rg.current=null;if(null===c||null===c.return){T=1;vg=b;W=null;break}a:{var f=a,g=c.return,h=c,k=b;b=U;h.flags|=2048;h.firstEffect=h.lastEffect=null;if(null!==k&&"object"===typeof k&&"function"===typeof k.then){var l=k;if(0===(h.mode&2)){var n=h.alternate;n?(h.updateQueue=n.updateQueue,h.memoizedState=n.memoizedState,h.lanes=n.lanes):
-(h.updateQueue=null,h.memoizedState=null)}var t=0!==(M.current&1),p=g;do{var y;if(y=13===p.tag){var x=p.memoizedState;if(null!==x)y=null!==x.dehydrated?!0:!1;else{var Y=p.memoizedProps;y=void 0===Y.fallback?!1:!0!==Y.unstable_avoidThisFallback?!0:t?!1:!0}}if(y){var u=p.updateQueue;if(null===u){var v=new Set;v.add(l);p.updateQueue=v}else u.add(l);if(0===(p.mode&2)){p.flags|=64;h.flags|=16384;h.flags&=-2981;if(1===h.tag)if(null===h.alternate)h.tag=17;else{var C=kd(-1,1);C.tag=2;md(h,C)}h.lanes|=1;break a}k=
-void 0;h=b;var Oa=f.pingCache;null===Oa?(Oa=f.pingCache=new Af,k=new Set,Oa.set(l,k)):(k=Oa.get(l),void 0===k&&(k=new Set,Oa.set(l,k)));if(!k.has(h)){k.add(h);var Qe=ch.bind(null,f,l,h);l.then(Qe,Qe)}p.flags|=4096;p.lanes=b;break a}p=p.return}while(null!==p);k=Error((wa(h.type)||"A React component")+" suspended while rendering, but no fallback UI was specified.\n\nAdd a <Suspense fallback=...> component higher in the tree to provide a loading indicator or placeholder to display.")}5!==T&&(T=2);k=
-yf(k,h);p=g;do{switch(p.tag){case 3:f=k;p.flags|=4096;b&=-b;p.lanes|=b;var Wg=Bf(p,f,b);nd(p,Wg);break a;case 1:f=k;var Xg=p.type,ld=p.stateNode;if(0===(p.flags&64)&&("function"===typeof Xg.getDerivedStateFromError||null!==ld&&"function"===typeof ld.componentDidCatch&&(null===Ff||!Ff.has(ld)))){p.flags|=4096;b&=-b;p.lanes|=b;var Yg=Ef(p,f,b);nd(p,Yg);break a}}p=p.return}while(null!==p)}dh(c)}catch(w){b=w;W===c&&null!==c&&(W=c=c.return);continue}break}while(1)}
-function Rg(){var a=qg.current;qg.current=pe;return null===a?pe:a}function Vg(a,b){var c=V;V|=16;var d=Rg();R===a&&U===b||Sg(a,b);do try{eh();break}catch(e){Ug(a,e)}while(1);bd();V=c;qg.current=d;if(null!==W)throw Error(q(261));R=null;U=0;return T}function eh(){for(;null!==W;)fh(W)}function Tg(){for(;null!==W&&!yc();)fh(W)}function fh(a){var b=gh(a.alternate,a,tg);a.memoizedProps=a.pendingProps;null===b?dh(a):W=b;rg.current=null}
-function dh(a){var b=a;do{var c=b.alternate;a=b.return;if(0===(b.flags&2048)){c=sf(c,b,tg);if(null!==c){W=c;return}c=b;if(24!==c.tag&&23!==c.tag||null===c.memoizedState||0!==(tg&1073741824)||0===(c.mode&4)){for(var d=0,e=c.child;null!==e;)d|=e.lanes|e.childLanes,e=e.sibling;c.childLanes=d}null!==a&&0===(a.flags&2048)&&(null===a.firstEffect&&(a.firstEffect=b.firstEffect),null!==b.lastEffect&&(null!==a.lastEffect&&(a.lastEffect.nextEffect=b.firstEffect),a.lastEffect=b.lastEffect),1<b.flags&&(null!==
-a.lastEffect?a.lastEffect.nextEffect=b:a.firstEffect=b,a.lastEffect=b))}else{c=xf(b);if(null!==c){c.flags&=2047;W=c;return}null!==a&&(a.firstEffect=a.lastEffect=null,a.flags|=2048)}b=b.sibling;if(null!==b){W=b;return}W=b=a}while(null!==b);0===T&&(T=5)}function Zg(a){var b=Nc();Pc(99,hh.bind(null,a,b));return null}
-function hh(a,b){do Qg();while(null!==Bg);if(0!==(V&48))throw Error(q(327));var c=a.finishedWork;if(null===c)return null;a.finishedWork=null;a.finishedLanes=0;if(c===a.current)throw Error(q(177));a.callbackNode=null;var d=c.lanes|c.childLanes,e=d,f=a.pendingLanes&~e;a.pendingLanes=e;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=e;a.mutableReadLanes&=e;a.entangledLanes&=e;e=a.entanglements;for(var g=a.eventTimes,h=a.expirationTimes;0<f;){var k=31-mc(f),l=1<<k;e[k]=0;g[k]=-1;h[k]=-1;f&=~l}null!==
-Fg&&0===(d&24)&&Fg.has(a)&&Fg.delete(a);a===R&&(W=R=null,U=0);1<c.flags?null!==c.lastEffect?(c.lastEffect.nextEffect=c,d=c.firstEffect):d=c:d=c.firstEffect;if(null!==d){e=V;V|=32;rg.current=null;Lg=Ga(a.containerInfo);Mg=!1;X=d;do try{ih()}catch(v){if(null===X)throw Error(q(330));If(X,v);X=X.nextEffect}while(null!==X);Lg=null;X=d;do try{for(g=a;null!==X;){var n=X.flags;n&16&&Ta&&sb(X.stateNode);if(n&128){var t=X.alternate;if(null!==t){var p=t.ref;null!==p&&("function"===typeof p?p(null):p.current=
-null)}}switch(n&1038){case 2:Uf(X);X.flags&=-3;break;case 6:Uf(X);X.flags&=-3;Xf(X.alternate,X);break;case 1024:X.flags&=-1025;break;case 1028:X.flags&=-1025;Xf(X.alternate,X);break;case 4:Xf(X.alternate,X);break;case 8:h=g;f=X;Ta?Qf(h,f):Rf(h,f);var y=f.alternate;Sf(f);null!==y&&Sf(y)}X=X.nextEffect}}catch(v){if(null===X)throw Error(q(330));If(X,v);X=X.nextEffect}while(null!==X);Mg&&$a();Ha(a.containerInfo);a.current=c;X=d;do try{for(n=a;null!==X;){var x=X.flags;x&36&&Lf(n,X.alternate,X);if(x&128){t=
-void 0;var Y=X.ref;if(null!==Y){var u=X.stateNode;switch(X.tag){case 5:t=Da(u);break;default:t=u}"function"===typeof Y?Y(t):Y.current=t}}X=X.nextEffect}}catch(v){if(null===X)throw Error(q(330));If(X,v);X=X.nextEffect}while(null!==X);X=null;Ic();V=e}else a.current=c;if(Ag)Ag=!1,Bg=a,Cg=b;else for(X=d;null!==X;)b=X.nextEffect,X.nextEffect=null,X.flags&8&&(x=X,x.sibling=null,x.stateNode=null),X=b;d=a.pendingLanes;0===d&&(Ff=null);1===d?a===Hg?Gg++:(Gg=0,Hg=a):Gg=0;c=c.stateNode;if(fc&&"function"===typeof fc.onCommitFiberRoot)try{fc.onCommitFiberRoot(ec,
-c,void 0,64===(c.current.flags&64))}catch(v){}Z(a,G());if(Cf)throw Cf=!1,a=Df,Df=null,a;if(0!==(V&8))return null;H();return null}function ih(){for(;null!==X;){var a=X.alternate;Mg||null===Lg||(0!==(X.flags&8)?Ca(X,Lg)&&(Mg=!0,Za()):13===X.tag&&bg(a,X)&&Ca(X,Lg)&&(Mg=!0,Za()));var b=X.flags;0!==(b&256)&&Jf(a,X);0===(b&512)||Ag||(Ag=!0,Qc(97,function(){Qg();return null}));X=X.nextEffect}}function Qg(){if(90!==Cg){var a=97<Cg?97:Cg;Cg=90;return Pc(a,jh)}return!1}
-function Nf(a,b){Dg.push(b,a);Ag||(Ag=!0,Qc(97,function(){Qg();return null}))}function Mf(a,b){Eg.push(b,a);Ag||(Ag=!0,Qc(97,function(){Qg();return null}))}
-function jh(){if(null===Bg)return!1;var a=Bg;Bg=null;if(0!==(V&48))throw Error(q(331));var b=V;V|=32;var c=Eg;Eg=[];for(var d=0;d<c.length;d+=2){var e=c[d],f=c[d+1],g=e.destroy;e.destroy=void 0;if("function"===typeof g)try{g()}catch(k){if(null===f)throw Error(q(330));If(f,k)}}c=Dg;Dg=[];for(d=0;d<c.length;d+=2){e=c[d];f=c[d+1];try{var h=e.create;e.destroy=h()}catch(k){if(null===f)throw Error(q(330));If(f,k)}}for(h=a.current.firstEffect;null!==h;)a=h.nextEffect,h.nextEffect=null,h.flags&8&&(h.sibling=
-null,h.stateNode=null),h=a;V=b;H();return!0}function kh(a,b,c){b=yf(c,b);b=Bf(a,b,1);md(a,b);b=K();a=Ng(a,1);null!==a&&(rc(a,1,b),Z(a,b))}
-function If(a,b){if(3===a.tag)kh(a,a,b);else for(var c=a.return;null!==c;){if(3===c.tag){kh(c,a,b);break}else if(1===c.tag){var d=c.stateNode;if("function"===typeof c.type.getDerivedStateFromError||"function"===typeof d.componentDidCatch&&(null===Ff||!Ff.has(d))){a=yf(b,a);var e=Ef(c,a,1);md(c,e);e=K();c=Ng(c,1);if(null!==c)rc(c,1,e),Z(c,e);else if("function"===typeof d.componentDidCatch&&(null===Ff||!Ff.has(d)))try{d.componentDidCatch(b,a)}catch(f){}break}}c=c.return}}
-function ch(a,b,c){var d=a.pingCache;null!==d&&d.delete(b);b=K();a.pingedLanes|=a.suspendedLanes&c;R===a&&(U&c)===c&&(4===T||3===T&&(U&62914560)===U&&500>G()-$f?Sg(a,0):xg|=c);Z(a,b)}function ag(a,b){var c=a.stateNode;null!==c&&c.delete(b);b=0;0===b&&(b=a.mode,0===(b&2)?b=1:0===(b&4)?b=99===Nc()?1:2:(0===Jg&&(Jg=wg),b=pc(62914560&~Jg),0===b&&(b=4194304)));c=K();a=Ng(a,b);null!==a&&(rc(a,b,c),Z(a,c))}var gh;
-gh=function(a,b,c){var d=b.lanes;if(null!==a)if(a.memoizedProps!==b.pendingProps||D.current)gd=!0;else if(0!==(c&d))gd=0!==(a.flags&16384)?!0:!1;else{gd=!1;switch(b.tag){case 3:af(b);ce();break;case 5:Rd(b);break;case 1:E(b.type)&&cc(b);break;case 4:Pd(b,b.stateNode.containerInfo);break;case 10:cd(b,b.memoizedProps.value);break;case 13:if(null!==b.memoizedState){if(0!==(c&b.child.childLanes))return cf(a,b,c);A(M,M.current&1);b=Re(a,b,c);return null!==b?b.sibling:null}A(M,M.current&1);break;case 19:d=
-0!==(c&b.childLanes);if(0!==(a.flags&64)){if(d)return kf(a,b,c);b.flags|=64}var e=b.memoizedState;null!==e&&(e.rendering=null,e.tail=null,e.lastEffect=null);A(M,M.current);if(d)break;else return null;case 23:case 24:return b.lanes=0,We(a,b,c)}return Re(a,b,c)}else gd=!1;b.lanes=0;switch(b.tag){case 2:d=b.type;null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;e=Zb(b,B.current);fd(b,c);e=le(null,b,d,a,e,c);b.flags|=1;if("object"===typeof e&&null!==e&&"function"===typeof e.render&&
-void 0===e.$$typeof){b.tag=1;b.memoizedState=null;b.updateQueue=null;if(E(d)){var f=!0;cc(b)}else f=!1;b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null;id(b);var g=d.getDerivedStateFromProps;"function"===typeof g&&sd(b,d,g,a);e.updater=vd;b.stateNode=e;e._reactInternals=b;zd(b,d,a,c);b=$e(null,b,d,!0,f,c)}else b.tag=0,S(null,b,e,c),b=b.child;return b;case 16:e=b.elementType;a:{null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2);a=b.pendingProps;f=e._init;e=f(e._payload);b.type=e;
-f=b.tag=lh(e);a=Xc(e,a);switch(f){case 0:b=Ve(null,b,e,a,c);break a;case 1:b=Ze(null,b,e,a,c);break a;case 11:b=Pe(null,b,e,a,c);break a;case 14:b=Se(null,b,e,Xc(e.type,a),d,c);break a}throw Error(q(306,e,""));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Xc(d,e),Ve(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Xc(d,e),Ze(a,b,d,e,c);case 3:af(b);d=b.updateQueue;if(null===a||null===d)throw Error(q(282));d=b.pendingProps;e=b.memoizedState;e=null!==
-e?e.element:null;jd(a,b);od(b,d,null,c);d=b.memoizedState.element;if(d===e)ce(),b=Re(a,b,c);else{e=b.stateNode;if(f=e.hydrate)Va?(Vd=Kb(b.stateNode.containerInfo),Ud=b,f=Wd=!0):f=!1;if(f){if(Va&&(a=e.mutableSourceEagerHydrationData,null!=a))for(e=0;e<a.length;e+=2)f=a[e],g=a[e+1],Sa?f._workInProgressVersionPrimary=g:f._workInProgressVersionSecondary=g,de.push(f);c=Kd(b,null,d,c);for(b.child=c;c;)c.flags=c.flags&-3|1024,c=c.sibling}else S(a,b,d,c),ce();b=b.child}return b;case 5:return Rd(b),null===
-a&&$d(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ma(d,e)?g=null:null!==f&&Ma(d,f)&&(b.flags|=16),Ye(a,b),S(a,b,g,c),b.child;case 6:return null===a&&$d(b),null;case 13:return cf(a,b,c);case 4:return Pd(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Jd(b,null,d,c):S(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Xc(d,e),Pe(a,b,d,e,c);case 7:return S(a,b,b.pendingProps,c),b.child;case 8:return S(a,b,b.pendingProps.children,
-c),b.child;case 12:return S(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;g=b.memoizedProps;f=e.value;cd(b,f);if(null!==g){var h=g.value;f=I(h,f)?0:("function"===typeof d._calculateChangedBits?d._calculateChangedBits(h,f):1073741823)|0;if(0===f){if(g.children===e.children&&!D.current){b=Re(a,b,c);break a}}else for(h=b.child,null!==h&&(h.return=b);null!==h;){var k=h.dependencies;if(null!==k){g=h.child;for(var l=k.firstContext;null!==l;){if(l.context===d&&0!==
-(l.observedBits&f)){1===h.tag&&(l=kd(-1,c&-c),l.tag=2,md(h,l));h.lanes|=c;l=h.alternate;null!==l&&(l.lanes|=c);ed(h.return,c);k.lanes|=c;break}l=l.next}}else g=10===h.tag?h.type===b.type?null:h.child:h.child;if(null!==g)g.return=h;else for(g=h;null!==g;){if(g===b){g=null;break}h=g.sibling;if(null!==h){h.return=g.return;g=h;break}g=g.return}h=g}}S(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,f=b.pendingProps,d=f.children,fd(b,c),e=J(e,f.unstable_observedBits),d=d(e),b.flags|=1,S(a,b,
-d,c),b.child;case 14:return e=b.type,f=Xc(e,b.pendingProps),f=Xc(e.type,f),Se(a,b,e,f,d,c);case 15:return Ue(a,b,b.type,b.pendingProps,d,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Xc(d,e),null!==a&&(a.alternate=null,b.alternate=null,b.flags|=2),b.tag=1,E(d)?(a=!0,cc(b)):a=!1,fd(b,c),xd(b,d,e),zd(b,d,e,c),$e(null,b,d,!0,a,c);case 19:return kf(a,b,c);case 23:return We(a,b,c);case 24:return We(a,b,c)}throw Error(q(156,b.tag));};
-var mh={current:!1},nh=m.unstable_flushAllWithoutAsserting,oh="function"===typeof nh;function ph(){if(void 0!==nh)return nh();for(var a=!1;Qg();)a=!0;return a}function qh(a){try{ph(),og(function(){ph()?qh(a):a()})}catch(b){a(b)}}var rh=0,sh=!1;
-function th(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.flags=0;this.lastEffect=this.firstEffect=this.nextEffect=null;this.childLanes=this.lanes=0;this.alternate=null}function Yd(a,b,c,d){return new th(a,b,c,d)}function Te(a){a=a.prototype;return!(!a||!a.isReactComponent)}
-function lh(a){if("function"===typeof a)return Te(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===la)return 11;if(a===oa)return 14}return 2}
-function Ed(a,b){var c=a.alternate;null===c?(c=Yd(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.nextEffect=null,c.firstEffect=null,c.lastEffect=null);c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};
-c.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}
-function Gd(a,b,c,d,e,f){var g=2;d=a;if("function"===typeof a)Te(a)&&(g=1);else if("string"===typeof a)g=5;else a:switch(a){case fa:return Id(c.children,e,f,b);case ra:g=8;e|=16;break;case ha:g=8;e|=1;break;case ia:return a=Yd(12,c,b,e|8),a.elementType=ia,a.type=ia,a.lanes=f,a;case ma:return a=Yd(13,c,b,e),a.type=ma,a.elementType=ma,a.lanes=f,a;case na:return a=Yd(19,c,b,e),a.elementType=na,a.lanes=f,a;case sa:return ef(c,e,f,b);case ta:return a=Yd(24,c,b,e),a.elementType=ta,a.lanes=f,a;default:if("object"===
-typeof a&&null!==a)switch(a.$$typeof){case ja:g=10;break a;case ka:g=9;break a;case la:g=11;break a;case oa:g=14;break a;case pa:g=16;d=null;break a;case qa:g=22;break a}throw Error(q(130,null==a?a:typeof a,""));}b=Yd(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Id(a,b,c,d){a=Yd(7,a,d,b);a.lanes=c;return a}function ef(a,b,c,d){a=Yd(23,a,d,b);a.elementType=sa;a.lanes=c;return a}function Fd(a,b,c){a=Yd(6,a,null,b);a.lanes=c;return a}
-function Hd(a,b,c){b=Yd(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}
-function uh(a,b,c){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=Ra;this.pendingContext=this.context=null;this.hydrate=c;this.callbackNode=null;this.callbackPriority=0;this.eventTimes=qc(0);this.expirationTimes=qc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=qc(0);Va&&(this.mutableSourceEagerHydrationData=null)}
-function vh(a){var b=a._reactInternals;if(void 0===b){if("function"===typeof a.render)throw Error(q(188));throw Error(q(268,Object.keys(a)));}a=Aa(b);return null===a?null:a.stateNode}function wh(a,b){a=a.memoizedState;if(null!==a&&null!==a.dehydrated){var c=a.retryLane;a.retryLane=0!==c&&c<b?c:b}}function xh(a,b){wh(a,b);(a=a.alternate)&&wh(a,b)}function yh(a){a=Aa(a);return null===a?null:a.stateNode}function zh(){return null}exports.IsThisRendererActing=mh;
-exports.act=function(a){function b(){rh--;sg.current=c;mh.current=d}!1===sh&&(sh=!0,console.error("act(...) is not supported in production builds of React, and might not behave as expected."));rh++;var c=sg.current,d=mh.current;sg.current=!0;mh.current=!0;try{var e=ah(a)}catch(f){throw b(),f;}if(null!==e&&"object"===typeof e&&"function"===typeof e.then)return{then:function(a,d){e.then(function(){1<rh||!0===oh&&!0===c?(b(),a()):qh(function(c){b();c?d(c):a()})},function(a){b();d(a)})}};try{1!==rh||
-!1!==oh&&!1!==c||ph(),b()}catch(f){throw b(),f;}return{then:function(a){a()}}};exports.attemptContinuousHydration=function(a){if(13===a.tag){var b=K();ud(a,67108864,b);xh(a,67108864)}};exports.attemptHydrationAtCurrentPriority=function(a){if(13===a.tag){var b=K(),c=td(a);ud(a,c,b);xh(a,c)}};
-exports.attemptSynchronousHydration=function(a){switch(a.tag){case 3:var b=a.stateNode;if(b.hydrate){var c=ic(b.pendingLanes);b.expiredLanes|=c&b.pendingLanes;Z(b,G());0===(V&48)&&(zg(),H())}break;case 13:var d=K();bh(function(){return ud(a,1,d)});xh(a,4)}};exports.attemptUserBlockingHydration=function(a){if(13===a.tag){var b=K();ud(a,4,b);xh(a,4)}};exports.batchedEventUpdates=function(a,b){var c=V;V|=2;try{return a(b)}finally{V=c,0===V&&(zg(),H())}};exports.batchedUpdates=ah;
-exports.createComponentSelector=function(a){return{$$typeof:cg,value:a}};exports.createContainer=function(a,b,c){a=new uh(a,b,c);b=Yd(3,null,null,2===b?7:1===b?3:0);a.current=b;b.stateNode=a;id(b);return a};exports.createHasPsuedoClassSelector=function(a){return{$$typeof:dg,value:a}};exports.createPortal=function(a,b,c){var d=3<arguments.length&&void 0!==arguments[3]?arguments[3]:null;return{$$typeof:ea,key:null==d?null:""+d,children:a,containerInfo:b,implementation:c}};
-exports.createRoleSelector=function(a){return{$$typeof:eg,value:a}};exports.createTestNameSelector=function(a){return{$$typeof:fg,value:a}};exports.createTextSelector=function(a){return{$$typeof:gg,value:a}};exports.deferredUpdates=function(a){return Pc(97,a)};exports.discreteUpdates=function(a,b,c,d,e){var f=V;V|=4;try{return Pc(98,a.bind(null,b,c,d,e))}finally{V=f,0===V&&(zg(),H())}};exports.findAllNodes=mg;
-exports.findBoundingRects=function(a,b){if(!bb)throw Error(q(363));b=mg(a,b);a=[];for(var c=0;c<b.length;c++)a.push(db(b[c]));for(b=a.length-1;0<b;b--){c=a[b];for(var d=c.x,e=d+c.width,f=c.y,g=f+c.height,h=b-1;0<=h;h--)if(b!==h){var k=a[h],l=k.x,n=l+k.width,t=k.y,p=t+k.height;if(d>=l&&f>=t&&e<=n&&g<=p){a.splice(b,1);break}else if(!(d!==l||c.width!==k.width||p<f||t>g)){t>f&&(k.height+=t-f,k.y=f);p<g&&(k.height=g-t);a.splice(b,1);break}else if(!(f!==t||c.height!==k.height||n<d||l>e)){l>d&&(k.width+=
-l-d,k.x=d);n<e&&(k.width=e-l);a.splice(b,1);break}}}return a};exports.findHostInstance=vh;exports.findHostInstanceWithNoPortals=function(a){a=Ba(a);return null===a?null:20===a.tag?a.stateNode.instance:a.stateNode};exports.findHostInstanceWithWarning=function(a){return vh(a)};exports.flushControlled=function(a){var b=V;V|=1;try{Pc(99,a)}finally{V=b,0===V&&(zg(),H())}};exports.flushDiscreteUpdates=function(){0===(V&49)&&($g(),Qg())};exports.flushPassiveEffects=Qg;exports.flushSync=bh;
-exports.focusWithin=function(a,b){if(!bb)throw Error(q(363));a=ig(a);b=lg(a,b);b=Array.from(b);for(a=0;a<b.length;){var c=b[a++];if(!fb(c)){if(5===c.tag&&hb(c.stateNode))return!0;for(c=c.child;null!==c;)b.push(c),c=c.sibling}}return!1};exports.getCurrentUpdateLanePriority=function(){return hc};
-exports.getFindAllNodesFailureDescription=function(a,b){if(!bb)throw Error(q(363));var c=0,d=[];a=[ig(a),0];for(var e=0;e<a.length;){var f=a[e++],g=a[e++],h=b[g];if(5!==f.tag||!fb(f))if(jg(f,h)&&(d.push(kg(h)),g++,g>c&&(c=g)),g<b.length)for(f=f.child;null!==f;)a.push(f,g),f=f.sibling}if(c<b.length){for(a=[];c<b.length;c++)a.push(kg(b[c]));return"findAllNodes was able to match part of the selector:\n  "+(d.join(" > ")+"\n\nNo matching component was found for:\n  ")+a.join(" > ")}return null};
-exports.getPublicRootInstance=function(a){a=a.current;if(!a.child)return null;switch(a.child.tag){case 5:return Da(a.child.stateNode);default:return a.child.stateNode}};
-exports.injectIntoDevTools=function(a){a={bundleType:a.bundleType,version:a.version,rendererPackageName:a.rendererPackageName,rendererConfig:a.rendererConfig,overrideHookState:null,overrideHookStateDeletePath:null,overrideHookStateRenamePath:null,overrideProps:null,overridePropsDeletePath:null,overridePropsRenamePath:null,setSuspenseHandler:null,scheduleUpdate:null,currentDispatcherRef:ca.ReactCurrentDispatcher,findHostInstanceByFiber:yh,findFiberByHostInstance:a.findFiberByHostInstance||zh,findHostInstancesForRefresh:null,
-scheduleRefresh:null,scheduleRoot:null,setRefreshHandler:null,getCurrentFiber:null};if("undefined"===typeof __REACT_DEVTOOLS_GLOBAL_HOOK__)a=!1;else{var b=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(!b.isDisabled&&b.supportsFiber)try{ec=b.inject(a),fc=b}catch(c){}a=!0}return a};exports.observeVisibleRects=function(a,b,c,d){if(!bb)throw Error(q(363));a=mg(a,b);var e=ib(a,c,d).disconnect;return{disconnect:function(){e()}}};
-exports.registerMutableSourceForHydration=function(a,b){var c=b._getVersion;c=c(b._source);null==a.mutableSourceEagerHydrationData?a.mutableSourceEagerHydrationData=[b,c]:a.mutableSourceEagerHydrationData.push(b,c)};exports.runWithPriority=function(a,b){var c=hc;try{return hc=a,b()}finally{hc=c}};exports.shouldSuspend=function(){return!1};exports.unbatchedUpdates=function(a,b){var c=V;V&=-2;V|=8;try{return a(b)}finally{V=c,0===V&&(zg(),H())}};
-exports.updateContainer=function(a,b,c,d){var e=b.current,f=K(),g=td(e);a:if(c){c=c._reactInternals;b:{if(xa(c)!==c||1!==c.tag)throw Error(q(170));var h=c;do{switch(h.tag){case 3:h=h.stateNode.context;break b;case 1:if(E(h.type)){h=h.stateNode.__reactInternalMemoizedMergedChildContext;break b}}h=h.return}while(null!==h);throw Error(q(171));}if(1===c.tag){var k=c.type;if(E(k)){c=bc(c,k,h);break a}}c=h}else c=Xb;null===b.context?b.context=c:b.pendingContext=c;b=kd(f,g);b.payload={element:a};d=void 0===
-d?null:d;null!==d&&(b.callback=d);md(e,b);ud(e,g,f);return g};
-
-    return exports;
-};
-
-
-/***/ }),
-
-/***/ 76525:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-if (true) {
-  module.exports = __webpack_require__(67287);
-} else {}
-
-
-/***/ }),
-
-/***/ 18790:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "H": () => (/* binding */ renderRoutes),
-/* harmony export */   "f": () => (/* binding */ matchRoutes)
-/* harmony export */ });
-/* harmony import */ var react_router__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(16550);
-/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(87462);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-
-
-
-
-function matchRoutes(routes, pathname,
-/*not public API*/
-branch) {
-  if (branch === void 0) {
-    branch = [];
-  }
-
-  routes.some(function (route) {
-    var match = route.path ? (0,react_router__WEBPACK_IMPORTED_MODULE_1__/* .matchPath */ .LX)(pathname, route) : branch.length ? branch[branch.length - 1].match // use parent match
-    : react_router__WEBPACK_IMPORTED_MODULE_1__/* .Router.computeRootMatch */ .F0.computeRootMatch(pathname); // use default "root" match
-
-    if (match) {
-      branch.push({
-        route: route,
-        match: match
-      });
-
-      if (route.routes) {
-        matchRoutes(route.routes, pathname, branch);
-      }
-    }
-
-    return match;
-  });
-  return branch;
-}
-
-function renderRoutes(routes, extraProps, switchProps) {
-  if (extraProps === void 0) {
-    extraProps = {};
-  }
-
-  if (switchProps === void 0) {
-    switchProps = {};
-  }
-
-  return routes ? react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_1__/* .Switch */ .rs, switchProps, routes.map(function (route, i) {
-    return react__WEBPACK_IMPORTED_MODULE_0__.createElement(react_router__WEBPACK_IMPORTED_MODULE_1__/* .Route */ .AW, {
-      key: route.key || i,
-      path: route.path,
-      exact: route.exact,
-      strict: route.strict,
-      render: function render(props) {
-        return route.render ? route.render((0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({}, props, {}, extraProps, {
-          route: route
-        })) : react__WEBPACK_IMPORTED_MODULE_0__.createElement(route.component, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)({}, props, extraProps, {
-          route: route
-        }));
-      }
-    });
-  })) : null;
-}
-
-
-//# sourceMappingURL=react-router-config.js.map
-
-
-/***/ }),
-
-/***/ 16550:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "AW": () => (/* binding */ Route),
-/* harmony export */   "F0": () => (/* binding */ Router),
-/* harmony export */   "LX": () => (/* binding */ matchPath),
-/* harmony export */   "TH": () => (/* binding */ useLocation),
-/* harmony export */   "gx": () => (/* binding */ StaticRouter),
-/* harmony export */   "k6": () => (/* binding */ useHistory),
-/* harmony export */   "l_": () => (/* binding */ Redirect),
-/* harmony export */   "rs": () => (/* binding */ Switch),
-/* harmony export */   "s6": () => (/* binding */ context)
-/* harmony export */ });
-/* unused harmony exports MemoryRouter, Prompt, __HistoryContext, generatePath, useParams, useRouteMatch, withRouter */
-/* harmony import */ var _babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(75068);
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(45697);
-/* harmony import */ var prop_types__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(prop_types__WEBPACK_IMPORTED_MODULE_5__);
-/* harmony import */ var history__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(42358);
-/* harmony import */ var tiny_invariant__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(38776);
-/* harmony import */ var _babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(87462);
-/* harmony import */ var path_to_regexp__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(39658);
-/* harmony import */ var path_to_regexp__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(path_to_regexp__WEBPACK_IMPORTED_MODULE_1__);
-/* harmony import */ var react_is__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(59864);
-/* harmony import */ var _babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(63366);
-/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(8679);
-/* harmony import */ var hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(hoist_non_react_statics__WEBPACK_IMPORTED_MODULE_3__);
-
-
-
-
-
-
-
-
-
-
-
-
-var MAX_SIGNED_31_BIT_INT = 1073741823;
-var commonjsGlobal = typeof globalThis !== "undefined" // 'global proper'
-? // eslint-disable-next-line no-undef
-globalThis : typeof window !== "undefined" ? window // Browser
-: typeof global !== "undefined" ? global // node.js
-: {};
-
-function getUniqueId() {
-  var key = "__global_unique_id__";
-  return commonjsGlobal[key] = (commonjsGlobal[key] || 0) + 1;
-} // Inlined Object.is polyfill.
-// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
-
-
-function objectIs(x, y) {
-  if (x === y) {
-    return x !== 0 || 1 / x === 1 / y;
-  } else {
-    // eslint-disable-next-line no-self-compare
-    return x !== x && y !== y;
-  }
-}
-
-function createEventEmitter(value) {
-  var handlers = [];
-  return {
-    on: function on(handler) {
-      handlers.push(handler);
-    },
-    off: function off(handler) {
-      handlers = handlers.filter(function (h) {
-        return h !== handler;
-      });
-    },
-    get: function get() {
-      return value;
-    },
-    set: function set(newValue, changedBits) {
-      value = newValue;
-      handlers.forEach(function (handler) {
-        return handler(value, changedBits);
-      });
-    }
-  };
-}
-
-function onlyChild(children) {
-  return Array.isArray(children) ? children[0] : children;
-}
-
-function createReactContext(defaultValue, calculateChangedBits) {
-  var _Provider$childContex, _Consumer$contextType;
-
-  var contextProp = "__create-react-context-" + getUniqueId() + "__";
-
-  var Provider = /*#__PURE__*/function (_React$Component) {
-    (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(Provider, _React$Component);
-
-    function Provider() {
-      var _this;
-
-      for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
-        args[_key] = arguments[_key];
-      }
-
-      _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
-      _this.emitter = createEventEmitter(_this.props.value);
-      return _this;
-    }
-
-    var _proto = Provider.prototype;
-
-    _proto.getChildContext = function getChildContext() {
-      var _ref;
-
-      return _ref = {}, _ref[contextProp] = this.emitter, _ref;
-    };
-
-    _proto.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
-      if (this.props.value !== nextProps.value) {
-        var oldValue = this.props.value;
-        var newValue = nextProps.value;
-        var changedBits;
-
-        if (objectIs(oldValue, newValue)) {
-          changedBits = 0; // No change
-        } else {
-          changedBits = typeof calculateChangedBits === "function" ? calculateChangedBits(oldValue, newValue) : MAX_SIGNED_31_BIT_INT;
-
-          if (false) {}
-
-          changedBits |= 0;
-
-          if (changedBits !== 0) {
-            this.emitter.set(nextProps.value, changedBits);
-          }
-        }
-      }
-    };
-
-    _proto.render = function render() {
-      return this.props.children;
-    };
-
-    return Provider;
-  }(react__WEBPACK_IMPORTED_MODULE_0__.Component);
-
-  Provider.childContextTypes = (_Provider$childContex = {}, _Provider$childContex[contextProp] = (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object.isRequired), _Provider$childContex);
-
-  var Consumer = /*#__PURE__*/function (_React$Component2) {
-    (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(Consumer, _React$Component2);
-
-    function Consumer() {
-      var _this2;
-
-      for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
-        args[_key2] = arguments[_key2];
-      }
-
-      _this2 = _React$Component2.call.apply(_React$Component2, [this].concat(args)) || this;
-      _this2.observedBits = void 0;
-      _this2.state = {
-        value: _this2.getValue()
-      };
-
-      _this2.onUpdate = function (newValue, changedBits) {
-        var observedBits = _this2.observedBits | 0;
-
-        if ((observedBits & changedBits) !== 0) {
-          _this2.setState({
-            value: _this2.getValue()
-          });
-        }
-      };
-
-      return _this2;
-    }
-
-    var _proto2 = Consumer.prototype;
-
-    _proto2.componentWillReceiveProps = function componentWillReceiveProps(nextProps) {
-      var observedBits = nextProps.observedBits;
-      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default
-      : observedBits;
-    };
-
-    _proto2.componentDidMount = function componentDidMount() {
-      if (this.context[contextProp]) {
-        this.context[contextProp].on(this.onUpdate);
-      }
-
-      var observedBits = this.props.observedBits;
-      this.observedBits = observedBits === undefined || observedBits === null ? MAX_SIGNED_31_BIT_INT // Subscribe to all changes by default
-      : observedBits;
-    };
-
-    _proto2.componentWillUnmount = function componentWillUnmount() {
-      if (this.context[contextProp]) {
-        this.context[contextProp].off(this.onUpdate);
-      }
-    };
-
-    _proto2.getValue = function getValue() {
-      if (this.context[contextProp]) {
-        return this.context[contextProp].get();
-      } else {
-        return defaultValue;
-      }
-    };
-
-    _proto2.render = function render() {
-      return onlyChild(this.props.children)(this.state.value);
-    };
-
-    return Consumer;
-  }(react__WEBPACK_IMPORTED_MODULE_0__.Component);
-
-  Consumer.contextTypes = (_Consumer$contextType = {}, _Consumer$contextType[contextProp] = (prop_types__WEBPACK_IMPORTED_MODULE_5___default().object), _Consumer$contextType);
-  return {
-    Provider: Provider,
-    Consumer: Consumer
-  };
-}
-
-// MIT License
-var createContext = react__WEBPACK_IMPORTED_MODULE_0__.createContext || createReactContext;
-
-// TODO: Replace with React.createContext once we can assume React 16+
-
-var createNamedContext = function createNamedContext(name) {
-  var context = createContext();
-  context.displayName = name;
-  return context;
-};
-
-var historyContext = /*#__PURE__*/createNamedContext("Router-History");
-
-var context = /*#__PURE__*/createNamedContext("Router");
-
-/**
- * The public API for putting history on context.
- */
-
-var Router = /*#__PURE__*/function (_React$Component) {
-  (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(Router, _React$Component);
-
-  Router.computeRootMatch = function computeRootMatch(pathname) {
-    return {
-      path: "/",
-      url: "/",
-      params: {},
-      isExact: pathname === "/"
-    };
-  };
-
-  function Router(props) {
-    var _this;
-
-    _this = _React$Component.call(this, props) || this;
-    _this.state = {
-      location: props.history.location
-    }; // This is a bit of a hack. We have to start listening for location
-    // changes here in the constructor in case there are any <Redirect>s
-    // on the initial render. If there are, they will replace/push when
-    // they mount and since cDM fires in children before parents, we may
-    // get a new location before the <Router> is mounted.
-
-    _this._isMounted = false;
-    _this._pendingLocation = null;
-
-    if (!props.staticContext) {
-      _this.unlisten = props.history.listen(function (location) {
-        _this._pendingLocation = location;
-      });
-    }
-
-    return _this;
-  }
-
-  var _proto = Router.prototype;
-
-  _proto.componentDidMount = function componentDidMount() {
-    var _this2 = this;
-
-    this._isMounted = true;
-
-    if (this.unlisten) {
-      // Any pre-mount location changes have been captured at
-      // this point, so unregister the listener.
-      this.unlisten();
-    }
-
-    if (!this.props.staticContext) {
-      this.unlisten = this.props.history.listen(function (location) {
-        if (_this2._isMounted) {
-          _this2.setState({
-            location: location
-          });
-        }
-      });
-    }
-
-    if (this._pendingLocation) {
-      this.setState({
-        location: this._pendingLocation
-      });
-    }
-  };
-
-  _proto.componentWillUnmount = function componentWillUnmount() {
-    if (this.unlisten) {
-      this.unlisten();
-      this._isMounted = false;
-      this._pendingLocation = null;
-    }
-  };
-
-  _proto.render = function render() {
-    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(context.Provider, {
-      value: {
-        history: this.props.history,
-        location: this.state.location,
-        match: Router.computeRootMatch(this.state.location.pathname),
-        staticContext: this.props.staticContext
-      }
-    }, /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(historyContext.Provider, {
-      children: this.props.children || null,
-      value: this.props.history
-    }));
-  };
-
-  return Router;
-}(react__WEBPACK_IMPORTED_MODULE_0__.Component);
-
-if (false) {}
-
-/**
- * The public API for a <Router> that stores location in memory.
- */
-
-var MemoryRouter = /*#__PURE__*/function (_React$Component) {
-  (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(MemoryRouter, _React$Component);
-
-  function MemoryRouter() {
-    var _this;
-
-    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-
-    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
-    _this.history = (0,history__WEBPACK_IMPORTED_MODULE_6__/* .createMemoryHistory */ .PP)(_this.props);
-    return _this;
-  }
-
-  var _proto = MemoryRouter.prototype;
-
-  _proto.render = function render() {
-    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Router, {
-      history: this.history,
-      children: this.props.children
-    });
-  };
-
-  return MemoryRouter;
-}(react__WEBPACK_IMPORTED_MODULE_0__.Component);
-
-if (false) {}
-
-var Lifecycle = /*#__PURE__*/function (_React$Component) {
-  (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(Lifecycle, _React$Component);
-
-  function Lifecycle() {
-    return _React$Component.apply(this, arguments) || this;
-  }
-
-  var _proto = Lifecycle.prototype;
-
-  _proto.componentDidMount = function componentDidMount() {
-    if (this.props.onMount) this.props.onMount.call(this, this);
-  };
-
-  _proto.componentDidUpdate = function componentDidUpdate(prevProps) {
-    if (this.props.onUpdate) this.props.onUpdate.call(this, this, prevProps);
-  };
-
-  _proto.componentWillUnmount = function componentWillUnmount() {
-    if (this.props.onUnmount) this.props.onUnmount.call(this, this);
-  };
-
-  _proto.render = function render() {
-    return null;
-  };
-
-  return Lifecycle;
-}(react__WEBPACK_IMPORTED_MODULE_0__.Component);
-
-/**
- * The public API for prompting the user before navigating away from a screen.
- */
-
-function Prompt(_ref) {
-  var message = _ref.message,
-      _ref$when = _ref.when,
-      when = _ref$when === void 0 ? true : _ref$when;
-  return /*#__PURE__*/React.createElement(context.Consumer, null, function (context) {
-    !context ?  false ? 0 : invariant(false) : void 0;
-    if (!when || context.staticContext) return null;
-    var method = context.history.block;
-    return /*#__PURE__*/React.createElement(Lifecycle, {
-      onMount: function onMount(self) {
-        self.release = method(message);
-      },
-      onUpdate: function onUpdate(self, prevProps) {
-        if (prevProps.message !== message) {
-          self.release();
-          self.release = method(message);
-        }
-      },
-      onUnmount: function onUnmount(self) {
-        self.release();
-      },
-      message: message
-    });
-  });
-}
-
-if (false) { var messageType; }
-
-var cache = {};
-var cacheLimit = 10000;
-var cacheCount = 0;
-
-function compilePath(path) {
-  if (cache[path]) return cache[path];
-  var generator = path_to_regexp__WEBPACK_IMPORTED_MODULE_1___default().compile(path);
-
-  if (cacheCount < cacheLimit) {
-    cache[path] = generator;
-    cacheCount++;
-  }
-
-  return generator;
-}
-/**
- * Public API for generating a URL pathname from a path and parameters.
- */
-
-
-function generatePath(path, params) {
-  if (path === void 0) {
-    path = "/";
-  }
-
-  if (params === void 0) {
-    params = {};
-  }
-
-  return path === "/" ? path : compilePath(path)(params, {
-    pretty: true
-  });
-}
-
-/**
- * The public API for navigating programmatically with a component.
- */
-
-function Redirect(_ref) {
-  var computedMatch = _ref.computedMatch,
-      to = _ref.to,
-      _ref$push = _ref.push,
-      push = _ref$push === void 0 ? false : _ref$push;
-  return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(context.Consumer, null, function (context) {
-    !context ?  false ? 0 : (0,tiny_invariant__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z)(false) : void 0;
-    var history = context.history,
-        staticContext = context.staticContext;
-    var method = push ? history.push : history.replace;
-    var location = (0,history__WEBPACK_IMPORTED_MODULE_6__/* .createLocation */ .ob)(computedMatch ? typeof to === "string" ? generatePath(to, computedMatch.params) : (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)({}, to, {
-      pathname: generatePath(to.pathname, computedMatch.params)
-    }) : to); // When rendering in a static context,
-    // set the new location immediately.
-
-    if (staticContext) {
-      method(location);
-      return null;
-    }
-
-    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Lifecycle, {
-      onMount: function onMount() {
-        method(location);
-      },
-      onUpdate: function onUpdate(self, prevProps) {
-        var prevLocation = (0,history__WEBPACK_IMPORTED_MODULE_6__/* .createLocation */ .ob)(prevProps.to);
-
-        if (!(0,history__WEBPACK_IMPORTED_MODULE_6__/* .locationsAreEqual */ .Hp)(prevLocation, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)({}, location, {
-          key: prevLocation.key
-        }))) {
-          method(location);
-        }
-      },
-      to: to
-    });
-  });
-}
-
-if (false) {}
-
-var cache$1 = {};
-var cacheLimit$1 = 10000;
-var cacheCount$1 = 0;
-
-function compilePath$1(path, options) {
-  var cacheKey = "" + options.end + options.strict + options.sensitive;
-  var pathCache = cache$1[cacheKey] || (cache$1[cacheKey] = {});
-  if (pathCache[path]) return pathCache[path];
-  var keys = [];
-  var regexp = path_to_regexp__WEBPACK_IMPORTED_MODULE_1___default()(path, keys, options);
-  var result = {
-    regexp: regexp,
-    keys: keys
-  };
-
-  if (cacheCount$1 < cacheLimit$1) {
-    pathCache[path] = result;
-    cacheCount$1++;
-  }
-
-  return result;
-}
-/**
- * Public API for matching a URL pathname to a path.
- */
-
-
-function matchPath(pathname, options) {
-  if (options === void 0) {
-    options = {};
-  }
-
-  if (typeof options === "string" || Array.isArray(options)) {
-    options = {
-      path: options
-    };
-  }
-
-  var _options = options,
-      path = _options.path,
-      _options$exact = _options.exact,
-      exact = _options$exact === void 0 ? false : _options$exact,
-      _options$strict = _options.strict,
-      strict = _options$strict === void 0 ? false : _options$strict,
-      _options$sensitive = _options.sensitive,
-      sensitive = _options$sensitive === void 0 ? false : _options$sensitive;
-  var paths = [].concat(path);
-  return paths.reduce(function (matched, path) {
-    if (!path && path !== "") return null;
-    if (matched) return matched;
-
-    var _compilePath = compilePath$1(path, {
-      end: exact,
-      strict: strict,
-      sensitive: sensitive
-    }),
-        regexp = _compilePath.regexp,
-        keys = _compilePath.keys;
-
-    var match = regexp.exec(pathname);
-    if (!match) return null;
-    var url = match[0],
-        values = match.slice(1);
-    var isExact = pathname === url;
-    if (exact && !isExact) return null;
-    return {
-      path: path,
-      // the path used to match
-      url: path === "/" && url === "" ? "/" : url,
-      // the matched portion of the URL
-      isExact: isExact,
-      // whether or not we matched exactly
-      params: keys.reduce(function (memo, key, index) {
-        memo[key.name] = values[index];
-        return memo;
-      }, {})
-    };
-  }, null);
-}
-
-function isEmptyChildren(children) {
-  return react__WEBPACK_IMPORTED_MODULE_0__.Children.count(children) === 0;
-}
-
-function evalChildrenDev(children, props, path) {
-  var value = children(props);
-   false ? 0 : void 0;
-  return value || null;
-}
-/**
- * The public API for matching a single path and rendering.
- */
-
-
-var Route = /*#__PURE__*/function (_React$Component) {
-  (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(Route, _React$Component);
-
-  function Route() {
-    return _React$Component.apply(this, arguments) || this;
-  }
-
-  var _proto = Route.prototype;
-
-  _proto.render = function render() {
-    var _this = this;
-
-    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(context.Consumer, null, function (context$1) {
-      !context$1 ?  false ? 0 : (0,tiny_invariant__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z)(false) : void 0;
-      var location = _this.props.location || context$1.location;
-      var match = _this.props.computedMatch ? _this.props.computedMatch // <Switch> already computed the match for us
-      : _this.props.path ? matchPath(location.pathname, _this.props) : context$1.match;
-
-      var props = (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)({}, context$1, {
-        location: location,
-        match: match
-      });
-
-      var _this$props = _this.props,
-          children = _this$props.children,
-          component = _this$props.component,
-          render = _this$props.render; // Preact uses an empty array as children by
-      // default, so use null if that's the case.
-
-      if (Array.isArray(children) && isEmptyChildren(children)) {
-        children = null;
-      }
-
-      return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(context.Provider, {
-        value: props
-      }, props.match ? children ? typeof children === "function" ?  false ? 0 : children(props) : children : component ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(component, props) : render ? render(props) : null : typeof children === "function" ?  false ? 0 : children(props) : null);
-    });
-  };
-
-  return Route;
-}(react__WEBPACK_IMPORTED_MODULE_0__.Component);
-
-if (false) {}
-
-function addLeadingSlash(path) {
-  return path.charAt(0) === "/" ? path : "/" + path;
-}
-
-function addBasename(basename, location) {
-  if (!basename) return location;
-  return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)({}, location, {
-    pathname: addLeadingSlash(basename) + location.pathname
-  });
-}
-
-function stripBasename(basename, location) {
-  if (!basename) return location;
-  var base = addLeadingSlash(basename);
-  if (location.pathname.indexOf(base) !== 0) return location;
-  return (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)({}, location, {
-    pathname: location.pathname.substr(base.length)
-  });
-}
-
-function createURL(location) {
-  return typeof location === "string" ? location : (0,history__WEBPACK_IMPORTED_MODULE_6__/* .createPath */ .Ep)(location);
-}
-
-function staticHandler(methodName) {
-  return function () {
-      false ? 0 : (0,tiny_invariant__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z)(false) ;
-  };
-}
-
-function noop() {}
-/**
- * The public top-level API for a "static" <Router>, so-called because it
- * can't actually change the current location. Instead, it just records
- * location changes in a context object. Useful mainly in testing and
- * server-rendering scenarios.
- */
-
-
-var StaticRouter = /*#__PURE__*/function (_React$Component) {
-  (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(StaticRouter, _React$Component);
-
-  function StaticRouter() {
-    var _this;
-
-    for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
-      args[_key] = arguments[_key];
-    }
-
-    _this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
-
-    _this.handlePush = function (location) {
-      return _this.navigateTo(location, "PUSH");
-    };
-
-    _this.handleReplace = function (location) {
-      return _this.navigateTo(location, "REPLACE");
-    };
-
-    _this.handleListen = function () {
-      return noop;
-    };
-
-    _this.handleBlock = function () {
-      return noop;
-    };
-
-    return _this;
-  }
-
-  var _proto = StaticRouter.prototype;
-
-  _proto.navigateTo = function navigateTo(location, action) {
-    var _this$props = this.props,
-        _this$props$basename = _this$props.basename,
-        basename = _this$props$basename === void 0 ? "" : _this$props$basename,
-        _this$props$context = _this$props.context,
-        context = _this$props$context === void 0 ? {} : _this$props$context;
-    context.action = action;
-    context.location = addBasename(basename, (0,history__WEBPACK_IMPORTED_MODULE_6__/* .createLocation */ .ob)(location));
-    context.url = createURL(context.location);
-  };
-
-  _proto.render = function render() {
-    var _this$props2 = this.props,
-        _this$props2$basename = _this$props2.basename,
-        basename = _this$props2$basename === void 0 ? "" : _this$props2$basename,
-        _this$props2$context = _this$props2.context,
-        context = _this$props2$context === void 0 ? {} : _this$props2$context,
-        _this$props2$location = _this$props2.location,
-        location = _this$props2$location === void 0 ? "/" : _this$props2$location,
-        rest = (0,_babel_runtime_helpers_esm_objectWithoutPropertiesLoose__WEBPACK_IMPORTED_MODULE_9__/* ["default"] */ .Z)(_this$props2, ["basename", "context", "location"]);
-
-    var history = {
-      createHref: function createHref(path) {
-        return addLeadingSlash(basename + createURL(path));
-      },
-      action: "POP",
-      location: stripBasename(basename, (0,history__WEBPACK_IMPORTED_MODULE_6__/* .createLocation */ .ob)(location)),
-      push: this.handlePush,
-      replace: this.handleReplace,
-      go: staticHandler("go"),
-      goBack: staticHandler("goBack"),
-      goForward: staticHandler("goForward"),
-      listen: this.handleListen,
-      block: this.handleBlock
-    };
-    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(Router, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)({}, rest, {
-      history: history,
-      staticContext: context
-    }));
-  };
-
-  return StaticRouter;
-}(react__WEBPACK_IMPORTED_MODULE_0__.Component);
-
-if (false) {}
-
-/**
- * The public API for rendering the first <Route> that matches.
- */
-
-var Switch = /*#__PURE__*/function (_React$Component) {
-  (0,_babel_runtime_helpers_esm_inheritsLoose__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(Switch, _React$Component);
-
-  function Switch() {
-    return _React$Component.apply(this, arguments) || this;
-  }
-
-  var _proto = Switch.prototype;
-
-  _proto.render = function render() {
-    var _this = this;
-
-    return /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.createElement(context.Consumer, null, function (context) {
-      !context ?  false ? 0 : (0,tiny_invariant__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z)(false) : void 0;
-      var location = _this.props.location || context.location;
-      var element, match; // We use React.Children.forEach instead of React.Children.toArray().find()
-      // here because toArray adds keys to all child elements and we do not want
-      // to trigger an unmount/remount for two <Route>s that render the same
-      // component at different URLs.
-
-      react__WEBPACK_IMPORTED_MODULE_0__.Children.forEach(_this.props.children, function (child) {
-        if (match == null && /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.isValidElement(child)) {
-          element = child;
-          var path = child.props.path || child.props.from;
-          match = path ? matchPath(location.pathname, (0,_babel_runtime_helpers_esm_extends__WEBPACK_IMPORTED_MODULE_8__/* ["default"] */ .Z)({}, child.props, {
-            path: path
-          })) : context.match;
-        }
-      });
-      return match ? /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0__.cloneElement(element, {
-        location: location,
-        computedMatch: match
-      }) : null;
-    });
-  };
-
-  return Switch;
-}(react__WEBPACK_IMPORTED_MODULE_0__.Component);
-
-if (false) {}
-
-/**
- * A public higher-order component to access the imperative API
- */
-
-function withRouter(Component) {
-  var displayName = "withRouter(" + (Component.displayName || Component.name) + ")";
-
-  var C = function C(props) {
-    var wrappedComponentRef = props.wrappedComponentRef,
-        remainingProps = _objectWithoutPropertiesLoose(props, ["wrappedComponentRef"]);
-
-    return /*#__PURE__*/React.createElement(context.Consumer, null, function (context) {
-      !context ?  false ? 0 : invariant(false) : void 0;
-      return /*#__PURE__*/React.createElement(Component, _extends({}, remainingProps, context, {
-        ref: wrappedComponentRef
-      }));
-    });
-  };
-
-  C.displayName = displayName;
-  C.WrappedComponent = Component;
-
-  if (false) {}
-
-  return hoistStatics(C, Component);
-}
-
-var useContext = react__WEBPACK_IMPORTED_MODULE_0__.useContext;
-function useHistory() {
-  if (false) {}
-
-  return useContext(historyContext);
-}
-function useLocation() {
-  if (false) {}
-
-  return useContext(context).location;
-}
-function useParams() {
-  if (false) {}
-
-  var match = useContext(context).match;
-  return match ? match.params : {};
-}
-function useRouteMatch(path) {
-  if (false) {}
-
-  var location = useLocation();
-  var match = useContext(context).match;
-  return path ? matchPath(location.pathname, path) : match;
-}
-
-if (false) { var secondaryBuildName, initialBuildName, buildNames, key, global$1; }
-
-
-//# sourceMappingURL=react-router.js.map
-
-
-/***/ }),
-
-/***/ 76585:
-/***/ ((module) => {
-
-module.exports = Array.isArray || function (arr) {
-  return Object.prototype.toString.call(arr) == '[object Array]';
-};
-
-
-/***/ }),
-
-/***/ 39658:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-var isarray = __webpack_require__(76585)
-
-/**
- * Expose `pathToRegexp`.
- */
-module.exports = pathToRegexp
-module.exports.parse = parse
-module.exports.compile = compile
-module.exports.tokensToFunction = tokensToFunction
-module.exports.tokensToRegExp = tokensToRegExp
-
-/**
- * The main path matching regexp utility.
- *
- * @type {RegExp}
- */
-var PATH_REGEXP = new RegExp([
-  // Match escaped characters that would otherwise appear in future matches.
-  // This allows the user to escape special characters that won't transform.
-  '(\\\\.)',
-  // Match Express-style parameters and un-named parameters with a prefix
-  // and optional suffixes. Matches appear as:
-  //
-  // "/:test(\\d+)?" => ["/", "test", "\d+", undefined, "?", undefined]
-  // "/route(\\d+)"  => [undefined, undefined, undefined, "\d+", undefined, undefined]
-  // "/*"            => ["/", undefined, undefined, undefined, undefined, "*"]
-  '([\\/.])?(?:(?:\\:(\\w+)(?:\\(((?:\\\\.|[^\\\\()])+)\\))?|\\(((?:\\\\.|[^\\\\()])+)\\))([+*?])?|(\\*))'
-].join('|'), 'g')
-
-/**
- * Parse a string for the raw tokens.
- *
- * @param  {string}  str
- * @param  {Object=} options
- * @return {!Array}
- */
-function parse (str, options) {
-  var tokens = []
-  var key = 0
-  var index = 0
-  var path = ''
-  var defaultDelimiter = options && options.delimiter || '/'
-  var res
-
-  while ((res = PATH_REGEXP.exec(str)) != null) {
-    var m = res[0]
-    var escaped = res[1]
-    var offset = res.index
-    path += str.slice(index, offset)
-    index = offset + m.length
-
-    // Ignore already escaped sequences.
-    if (escaped) {
-      path += escaped[1]
-      continue
-    }
-
-    var next = str[index]
-    var prefix = res[2]
-    var name = res[3]
-    var capture = res[4]
-    var group = res[5]
-    var modifier = res[6]
-    var asterisk = res[7]
-
-    // Push the current path onto the tokens.
-    if (path) {
-      tokens.push(path)
-      path = ''
-    }
-
-    var partial = prefix != null && next != null && next !== prefix
-    var repeat = modifier === '+' || modifier === '*'
-    var optional = modifier === '?' || modifier === '*'
-    var delimiter = res[2] || defaultDelimiter
-    var pattern = capture || group
-
-    tokens.push({
-      name: name || key++,
-      prefix: prefix || '',
-      delimiter: delimiter,
-      optional: optional,
-      repeat: repeat,
-      partial: partial,
-      asterisk: !!asterisk,
-      pattern: pattern ? escapeGroup(pattern) : (asterisk ? '.*' : '[^' + escapeString(delimiter) + ']+?')
-    })
-  }
-
-  // Match any characters still remaining.
-  if (index < str.length) {
-    path += str.substr(index)
-  }
-
-  // If the path exists, push it onto the end.
-  if (path) {
-    tokens.push(path)
-  }
-
-  return tokens
-}
-
-/**
- * Compile a string to a template function for the path.
- *
- * @param  {string}             str
- * @param  {Object=}            options
- * @return {!function(Object=, Object=)}
- */
-function compile (str, options) {
-  return tokensToFunction(parse(str, options), options)
-}
-
-/**
- * Prettier encoding of URI path segments.
- *
- * @param  {string}
- * @return {string}
- */
-function encodeURIComponentPretty (str) {
-  return encodeURI(str).replace(/[\/?#]/g, function (c) {
-    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
-  })
-}
-
-/**
- * Encode the asterisk parameter. Similar to `pretty`, but allows slashes.
- *
- * @param  {string}
- * @return {string}
- */
-function encodeAsterisk (str) {
-  return encodeURI(str).replace(/[?#]/g, function (c) {
-    return '%' + c.charCodeAt(0).toString(16).toUpperCase()
-  })
-}
-
-/**
- * Expose a method for transforming tokens into the path function.
- */
-function tokensToFunction (tokens, options) {
-  // Compile all the tokens into regexps.
-  var matches = new Array(tokens.length)
-
-  // Compile all the patterns before compilation.
-  for (var i = 0; i < tokens.length; i++) {
-    if (typeof tokens[i] === 'object') {
-      matches[i] = new RegExp('^(?:' + tokens[i].pattern + ')$', flags(options))
-    }
-  }
-
-  return function (obj, opts) {
-    var path = ''
-    var data = obj || {}
-    var options = opts || {}
-    var encode = options.pretty ? encodeURIComponentPretty : encodeURIComponent
-
-    for (var i = 0; i < tokens.length; i++) {
-      var token = tokens[i]
-
-      if (typeof token === 'string') {
-        path += token
-
-        continue
-      }
-
-      var value = data[token.name]
-      var segment
-
-      if (value == null) {
-        if (token.optional) {
-          // Prepend partial segment prefixes.
-          if (token.partial) {
-            path += token.prefix
-          }
-
-          continue
-        } else {
-          throw new TypeError('Expected "' + token.name + '" to be defined')
-        }
-      }
-
-      if (isarray(value)) {
-        if (!token.repeat) {
-          throw new TypeError('Expected "' + token.name + '" to not repeat, but received `' + JSON.stringify(value) + '`')
-        }
-
-        if (value.length === 0) {
-          if (token.optional) {
-            continue
-          } else {
-            throw new TypeError('Expected "' + token.name + '" to not be empty')
-          }
-        }
-
-        for (var j = 0; j < value.length; j++) {
-          segment = encode(value[j])
-
-          if (!matches[i].test(segment)) {
-            throw new TypeError('Expected all "' + token.name + '" to match "' + token.pattern + '", but received `' + JSON.stringify(segment) + '`')
-          }
-
-          path += (j === 0 ? token.prefix : token.delimiter) + segment
-        }
-
-        continue
-      }
-
-      segment = token.asterisk ? encodeAsterisk(value) : encode(value)
-
-      if (!matches[i].test(segment)) {
-        throw new TypeError('Expected "' + token.name + '" to match "' + token.pattern + '", but received "' + segment + '"')
-      }
-
-      path += token.prefix + segment
-    }
-
-    return path
-  }
-}
-
-/**
- * Escape a regular expression string.
- *
- * @param  {string} str
- * @return {string}
- */
-function escapeString (str) {
-  return str.replace(/([.+*?=^!:${}()[\]|\/\\])/g, '\\$1')
-}
-
-/**
- * Escape the capturing group by escaping special characters and meaning.
- *
- * @param  {string} group
- * @return {string}
- */
-function escapeGroup (group) {
-  return group.replace(/([=!:$\/()])/g, '\\$1')
-}
-
-/**
- * Attach the keys as a property of the regexp.
- *
- * @param  {!RegExp} re
- * @param  {Array}   keys
- * @return {!RegExp}
- */
-function attachKeys (re, keys) {
-  re.keys = keys
-  return re
-}
-
-/**
- * Get the flags for a regexp from the options.
- *
- * @param  {Object} options
- * @return {string}
- */
-function flags (options) {
-  return options && options.sensitive ? '' : 'i'
-}
-
-/**
- * Pull out keys from a regexp.
- *
- * @param  {!RegExp} path
- * @param  {!Array}  keys
- * @return {!RegExp}
- */
-function regexpToRegexp (path, keys) {
-  // Use a negative lookahead to match only capturing groups.
-  var groups = path.source.match(/\((?!\?)/g)
-
-  if (groups) {
-    for (var i = 0; i < groups.length; i++) {
-      keys.push({
-        name: i,
-        prefix: null,
-        delimiter: null,
-        optional: false,
-        repeat: false,
-        partial: false,
-        asterisk: false,
-        pattern: null
-      })
-    }
-  }
-
-  return attachKeys(path, keys)
-}
-
-/**
- * Transform an array into a regexp.
- *
- * @param  {!Array}  path
- * @param  {Array}   keys
- * @param  {!Object} options
- * @return {!RegExp}
- */
-function arrayToRegexp (path, keys, options) {
-  var parts = []
-
-  for (var i = 0; i < path.length; i++) {
-    parts.push(pathToRegexp(path[i], keys, options).source)
-  }
-
-  var regexp = new RegExp('(?:' + parts.join('|') + ')', flags(options))
-
-  return attachKeys(regexp, keys)
-}
-
-/**
- * Create a path regexp from string input.
- *
- * @param  {string}  path
- * @param  {!Array}  keys
- * @param  {!Object} options
- * @return {!RegExp}
- */
-function stringToRegexp (path, keys, options) {
-  return tokensToRegExp(parse(path, options), keys, options)
-}
-
-/**
- * Expose a function for taking tokens and returning a RegExp.
- *
- * @param  {!Array}          tokens
- * @param  {(Array|Object)=} keys
- * @param  {Object=}         options
- * @return {!RegExp}
- */
-function tokensToRegExp (tokens, keys, options) {
-  if (!isarray(keys)) {
-    options = /** @type {!Object} */ (keys || options)
-    keys = []
-  }
-
-  options = options || {}
-
-  var strict = options.strict
-  var end = options.end !== false
-  var route = ''
-
-  // Iterate over the tokens and create our regexp string.
-  for (var i = 0; i < tokens.length; i++) {
-    var token = tokens[i]
-
-    if (typeof token === 'string') {
-      route += escapeString(token)
-    } else {
-      var prefix = escapeString(token.prefix)
-      var capture = '(?:' + token.pattern + ')'
-
-      keys.push(token)
-
-      if (token.repeat) {
-        capture += '(?:' + prefix + capture + ')*'
-      }
-
-      if (token.optional) {
-        if (!token.partial) {
-          capture = '(?:' + prefix + '(' + capture + '))?'
-        } else {
-          capture = prefix + '(' + capture + ')?'
-        }
-      } else {
-        capture = prefix + '(' + capture + ')'
-      }
-
-      route += capture
-    }
-  }
-
-  var delimiter = escapeString(options.delimiter || '/')
-  var endsWithDelimiter = route.slice(-delimiter.length) === delimiter
-
-  // In non-strict mode we allow a slash at the end of match. If the path to
-  // match already ends with a slash, we remove it for consistency. The slash
-  // is valid at the end of a path match, not in the middle. This is important
-  // in non-ending mode, where "/test/" shouldn't match "/test//route".
-  if (!strict) {
-    route = (endsWithDelimiter ? route.slice(0, -delimiter.length) : route) + '(?:' + delimiter + '(?=$))?'
-  }
-
-  if (end) {
-    route += '$'
-  } else {
-    // In non-ending mode, we need the capturing groups to match as much as
-    // possible by using a positive lookahead to the end or next path segment.
-    route += strict && endsWithDelimiter ? '' : '(?=' + delimiter + '|$)'
-  }
-
-  return attachKeys(new RegExp('^' + route, flags(options)), keys)
-}
-
-/**
- * Normalize the given path string, returning a regular expression.
- *
- * An empty array can be passed in for the keys, which will hold the
- * placeholder key descriptions. For example, using `/user/:id`, `keys` will
- * contain `[{ name: 'id', delimiter: '/', optional: false, repeat: false }]`.
- *
- * @param  {(string|RegExp|Array)} path
- * @param  {(Array|Object)=}       keys
- * @param  {Object=}               options
- * @return {!RegExp}
- */
-function pathToRegexp (path, keys, options) {
-  if (!isarray(keys)) {
-    options = /** @type {!Object} */ (keys || options)
-    keys = []
-  }
-
-  options = options || {}
-
-  if (path instanceof RegExp) {
-    return regexpToRegexp(path, /** @type {!Array} */ (keys))
-  }
-
-  if (isarray(path)) {
-    return arrayToRegexp(/** @type {!Array} */ (path), /** @type {!Array} */ (keys), options)
-  }
-
-  return stringToRegexp(/** @type {string} */ (path), /** @type {!Array} */ (keys), options)
-}
-
-
-/***/ }),
-
-/***/ 86718:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-var tslib_1 = __webpack_require__(70655);
-var wrapInStatefulComponent_1 = tslib_1.__importDefault(__webpack_require__(45503));
-var addClassDecoratorSupport = function (Comp) {
-    var isSFC = !Comp.prototype;
-    return !isSFC ? Comp : wrapInStatefulComponent_1.default(Comp);
-};
-exports["default"] = addClassDecoratorSupport;
-//# sourceMappingURL=addClassDecoratorSupport.js.map
-
-/***/ }),
-
-/***/ 93302:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.divWrapper = void 0;
-var tslib_1 = __webpack_require__(70655);
-var React = tslib_1.__importStar(__webpack_require__(67294));
-var addClassDecoratorSupport_1 = tslib_1.__importDefault(__webpack_require__(86718));
-var h = React.createElement;
-var noWrap = function (Comp, propName, props, state) {
-    var _a;
-    return h(Comp, propName ? tslib_1.__assign((_a = {}, _a[propName] = state, _a), props) : tslib_1.__assign(tslib_1.__assign({}, state), props));
-};
-exports.divWrapper = function (Comp, propName, props, state) {
-    return h('div', null, noWrap(Comp, propName, props, state));
-};
-var createEnhancer = function (Facc, prop, wrapper) {
-    if (wrapper === void 0) { wrapper = noWrap; }
-    var enhancer = function (Comp, propName, faccProps) {
-        if (propName === void 0) { propName = prop; }
-        if (faccProps === void 0) { faccProps = null; }
-        var isClassDecoratorMethodCall = typeof Comp === 'string';
-        if (isClassDecoratorMethodCall) {
-            return function (Klass) { return enhancer(Klass, Comp || prop, propName); };
-        }
-        var Enhanced = function (props) {
-            return h(Facc, faccProps, function (state) { return wrapper(Comp, propName, props, state); });
-        };
-        if (false) {}
-        return isClassDecoratorMethodCall ? addClassDecoratorSupport_1.default(Enhanced) : Enhanced;
-    };
-    return enhancer;
-};
-exports["default"] = createEnhancer;
-//# sourceMappingURL=createEnhancer.js.map
-
-/***/ }),
-
-/***/ 3:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-var tslib_1 = __webpack_require__(70655);
-var render_1 = tslib_1.__importDefault(__webpack_require__(95364));
-var defaultMapPropsToArgs = function (props) { return [props]; };
-var hookToRenderProp = function (hook, mapPropsToArgs) {
-    if (mapPropsToArgs === void 0) { mapPropsToArgs = defaultMapPropsToArgs; }
-    return function (props) { return render_1.default(props, hook.apply(void 0, mapPropsToArgs(props))); };
-};
-exports["default"] = hookToRenderProp;
-//# sourceMappingURL=hookToRenderProp.js.map
-
-/***/ }),
-
-/***/ 96260:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-var __webpack_unused_export__;
-
-__webpack_unused_export__ = ({ value: true });
-__webpack_unused_export__ = __webpack_unused_export__ = __webpack_unused_export__ = void 0;
-var tslib_1 = __webpack_require__(70655);
-var render_1 = tslib_1.__importDefault(__webpack_require__(95364));
-__webpack_unused_export__ = render_1.default;
-var createEnhancer_1 = tslib_1.__importDefault(__webpack_require__(93302));
-__webpack_unused_export__ = createEnhancer_1.default;
-var hookToRenderProp_1 = tslib_1.__importDefault(__webpack_require__(3));
-__webpack_unused_export__ = hookToRenderProp_1.default;
-//# sourceMappingURL=index.js.map
-
-/***/ }),
-
-/***/ 95364:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-var tslib_1 = __webpack_require__(70655);
-var react_1 = __webpack_require__(67294);
-var isReact16Plus = parseInt(react_1.version.substr(0, react_1.version.indexOf('.'))) > 15;
-var isFn = function (fn) { return typeof fn === 'function'; };
-var render = function (props, data) {
-    var more = [];
-    for (var _i = 2; _i < arguments.length; _i++) {
-        more[_i - 2] = arguments[_i];
-    }
-    if (false) { var children_1, render_1; }
-    var render = props.render, _a = props.children, children = _a === void 0 ? render : _a, component = props.component, _b = props.comp, comp = _b === void 0 ? component : _b;
-    if (isFn(children))
-        return children.apply(void 0, tslib_1.__spreadArrays([data], more));
-    if (comp) {
-        return react_1.createElement(comp, data);
-    }
-    if (children instanceof Array)
-        return isReact16Plus ? children : react_1.createElement.apply(void 0, tslib_1.__spreadArrays(['div', null], children));
-    if (children && (children instanceof Object)) {
-        if (false) {}
-        else {
-            if (typeof children.type === 'string')
-                return children;
-            return react_1.cloneElement(children, Object.assign({}, children.props, data));
-        }
-    }
-    return children || null;
-};
-exports["default"] = render;
-//# sourceMappingURL=render.js.map
-
-/***/ }),
-
-/***/ 45503:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-var tslib_1 = __webpack_require__(70655);
-var React = tslib_1.__importStar(__webpack_require__(67294));
-var wrapInStatefulComponent = function (Comp) {
-    var Decorated = (function (_super) {
-        tslib_1.__extends(class_1, _super);
-        function class_1() {
-            return _super !== null && _super.apply(this, arguments) || this;
-        }
-        class_1.prototype.render = function () {
-            return Comp(this.props, this.context);
-        };
-        return class_1;
-    }(React.Component));
-    if (false) {}
-    return Decorated;
-};
-exports["default"] = wrapInStatefulComponent;
-//# sourceMappingURL=wrapInStatefulComponent.js.map
-
-/***/ }),
-
-/***/ 89164:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "createBreakpoint": () => (/* reexport */ factory_createBreakpoint),
-  "createGlobalState": () => (/* reexport */ createGlobalState),
-  "createMemo": () => (/* reexport */ factory_createMemo),
-  "createReducer": () => (/* reexport */ factory_createReducer),
-  "createReducerContext": () => (/* reexport */ factory_createReducerContext),
-  "createStateContext": () => (/* reexport */ factory_createStateContext),
-  "ensuredForwardRef": () => (/* reexport */ ensuredForwardRef),
-  "useAsync": () => (/* reexport */ useAsync),
-  "useAsyncFn": () => (/* reexport */ useAsyncFn),
-  "useAsyncRetry": () => (/* reexport */ esm_useAsyncRetry),
-  "useAudio": () => (/* reexport */ esm_useAudio),
-  "useBattery": () => (/* reexport */ esm_useBattery),
-  "useBeforeUnload": () => (/* reexport */ esm_useBeforeUnload),
-  "useBoolean": () => (/* reexport */ useBoolean),
-  "useClickAway": () => (/* reexport */ esm_useClickAway),
-  "useCookie": () => (/* reexport */ esm_useCookie),
-  "useCopyToClipboard": () => (/* reexport */ esm_useCopyToClipboard),
-  "useCounter": () => (/* reexport */ useCounter),
-  "useCss": () => (/* reexport */ esm_useCss),
-  "useCustomCompareEffect": () => (/* reexport */ esm_useCustomCompareEffect),
-  "useDebounce": () => (/* reexport */ useDebounce),
-  "useDeepCompareEffect": () => (/* reexport */ esm_useDeepCompareEffect),
-  "useDefault": () => (/* reexport */ esm_useDefault),
-  "useDrop": () => (/* reexport */ esm_useDrop),
-  "useDropArea": () => (/* reexport */ esm_useDropArea),
-  "useEffectOnce": () => (/* reexport */ esm_useEffectOnce),
-  "useEnsuredForwardedRef": () => (/* reexport */ useEnsuredForwardedRef),
-  "useError": () => (/* reexport */ esm_useError),
-  "useEvent": () => (/* reexport */ esm_useEvent),
-  "useFavicon": () => (/* reexport */ esm_useFavicon),
-  "useFirstMountState": () => (/* reexport */ useFirstMountState),
-  "useFullscreen": () => (/* reexport */ esm_useFullscreen),
-  "useGeolocation": () => (/* reexport */ esm_useGeolocation),
-  "useGetSet": () => (/* reexport */ useGetSet),
-  "useGetSetState": () => (/* reexport */ esm_useGetSetState),
-  "useHarmonicIntervalFn": () => (/* reexport */ esm_useHarmonicIntervalFn),
-  "useHash": () => (/* reexport */ useHash),
-  "useHover": () => (/* reexport */ esm_useHover),
-  "useHoverDirty": () => (/* reexport */ esm_useHoverDirty),
-  "useIdle": () => (/* reexport */ esm_useIdle),
-  "useIntersection": () => (/* reexport */ esm_useIntersection),
-  "useInterval": () => (/* reexport */ esm_useInterval),
-  "useIsomorphicLayoutEffect": () => (/* reexport */ esm_useIsomorphicLayoutEffect),
-  "useKey": () => (/* reexport */ esm_useKey),
-  "useKeyPress": () => (/* reexport */ esm_useKeyPress),
-  "useKeyPressEvent": () => (/* reexport */ esm_useKeyPressEvent),
-  "useLatest": () => (/* reexport */ esm_useLatest),
-  "useLifecycles": () => (/* reexport */ esm_useLifecycles),
-  "useList": () => (/* reexport */ esm_useList),
-  "useLocalStorage": () => (/* reexport */ esm_useLocalStorage),
-  "useLocation": () => (/* reexport */ useLocation),
-  "useLockBodyScroll": () => (/* reexport */ useLockBodyScroll),
-  "useLogger": () => (/* reexport */ esm_useLogger),
-  "useLongPress": () => (/* reexport */ esm_useLongPress),
-  "useMap": () => (/* reexport */ esm_useMap),
-  "useMeasure": () => (/* reexport */ esm_useMeasure),
-  "useMedia": () => (/* reexport */ esm_useMedia),
-  "useMediaDevices": () => (/* reexport */ esm_useMediaDevices),
-  "useMediatedState": () => (/* reexport */ useMediatedState),
-  "useMethods": () => (/* reexport */ esm_useMethods),
-  "useMotion": () => (/* reexport */ esm_useMotion),
-  "useMount": () => (/* reexport */ esm_useMount),
-  "useMountedState": () => (/* reexport */ useMountedState),
-  "useMouse": () => (/* reexport */ esm_useMouse),
-  "useMouseHovered": () => (/* reexport */ esm_useMouseHovered),
-  "useMouseWheel": () => (/* reexport */ useMouseWheel),
-  "useMultiStateValidator": () => (/* reexport */ useMultiStateValidator),
-  "useNetworkState": () => (/* reexport */ useNetworkState),
-  "useNumber": () => (/* reexport */ useNumber),
-  "useObservable": () => (/* reexport */ esm_useObservable),
-  "useOrientation": () => (/* reexport */ esm_useOrientation),
-  "usePageLeave": () => (/* reexport */ esm_usePageLeave),
-  "usePermission": () => (/* reexport */ esm_usePermission),
-  "usePinchZoom": () => (/* reexport */ esm_usePinchZoom),
-  "usePrevious": () => (/* reexport */ usePrevious),
-  "usePreviousDistinct": () => (/* reexport */ usePreviousDistinct),
-  "usePromise": () => (/* reexport */ esm_usePromise),
-  "useQueue": () => (/* reexport */ esm_useQueue),
-  "useRaf": () => (/* reexport */ esm_useRaf),
-  "useRafLoop": () => (/* reexport */ useRafLoop),
-  "useRafState": () => (/* reexport */ esm_useRafState),
-  "useRendersCount": () => (/* reexport */ useRendersCount),
-  "useScratch": () => (/* reexport */ esm_useScratch),
-  "useScroll": () => (/* reexport */ esm_useScroll),
-  "useScrollbarWidth": () => (/* reexport */ useScrollbarWidth),
-  "useScrolling": () => (/* reexport */ esm_useScrolling),
-  "useSearchParam": () => (/* reexport */ esm_useSearchParam),
-  "useSessionStorage": () => (/* reexport */ esm_useSessionStorage),
-  "useSet": () => (/* reexport */ esm_useSet),
-  "useSetState": () => (/* reexport */ esm_useSetState),
-  "useShallowCompareEffect": () => (/* reexport */ esm_useShallowCompareEffect),
-  "useSize": () => (/* reexport */ esm_useSize),
-  "useSlider": () => (/* reexport */ esm_useSlider),
-  "useSpeech": () => (/* reexport */ esm_useSpeech),
-  "useStartTyping": () => (/* reexport */ esm_useStartTyping),
-  "useStateList": () => (/* reexport */ useStateList),
-  "useStateValidator": () => (/* reexport */ useStateValidator),
-  "useStateWithHistory": () => (/* reexport */ useStateWithHistory),
-  "useThrottle": () => (/* reexport */ esm_useThrottle),
-  "useThrottleFn": () => (/* reexport */ esm_useThrottleFn),
-  "useTimeout": () => (/* reexport */ useTimeout),
-  "useTimeoutFn": () => (/* reexport */ useTimeoutFn),
-  "useTitle": () => (/* reexport */ esm_useTitle),
-  "useToggle": () => (/* reexport */ esm_useToggle),
-  "useTween": () => (/* reexport */ esm_useTween),
-  "useUnmount": () => (/* reexport */ esm_useUnmount),
-  "useUnmountPromise": () => (/* reexport */ esm_useUnmountPromise),
-  "useUpdate": () => (/* reexport */ useUpdate),
-  "useUpdateEffect": () => (/* reexport */ esm_useUpdateEffect),
-  "useUpsert": () => (/* reexport */ useUpsert),
-  "useVibrate": () => (/* reexport */ esm_useVibrate),
-  "useVideo": () => (/* reexport */ esm_useVideo),
-  "useWindowScroll": () => (/* reexport */ esm_useWindowScroll),
-  "useWindowSize": () => (/* reexport */ esm_useWindowSize)
-});
-
-// EXTERNAL MODULE: ./node_modules/react/index.js
-var react = __webpack_require__(67294);
-var react_namespaceObject = /*#__PURE__*/__webpack_require__.t(react, 2);
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/factory/createMemo.js
-
-var createMemo = function (fn) {
-    return function () {
-        var args = [];
-        for (var _i = 0; _i < arguments.length; _i++) {
-            args[_i] = arguments[_i];
-        }
-        return (0,react.useMemo)(function () { return fn.apply(void 0, args); }, args);
-    };
-};
-/* harmony default export */ const factory_createMemo = (createMemo);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/factory/createReducerContext.js
-
-var createReducerContext = function (reducer, defaultInitialState) {
-    var context = (0,react.createContext)(undefined);
-    var providerFactory = function (props, children) { return (0,react.createElement)(context.Provider, props, children); };
-    var ReducerProvider = function (_a) {
-        var children = _a.children, initialState = _a.initialState;
-        var state = (0,react.useReducer)(reducer, initialState !== undefined ? initialState : defaultInitialState);
-        return providerFactory({ value: state }, children);
-    };
-    var useReducerContext = function () {
-        var state = (0,react.useContext)(context);
-        if (state == null) {
-            throw new Error("useReducerContext must be used inside a ReducerProvider.");
-        }
-        return state;
-    };
-    return [useReducerContext, ReducerProvider, context];
-};
-/* harmony default export */ const factory_createReducerContext = (createReducerContext);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useFirstMountState.js
-
-function useFirstMountState() {
-    var isFirst = (0,react.useRef)(true);
-    if (isFirst.current) {
-        isFirst.current = false;
-        return true;
-    }
-    return isFirst.current;
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useUpdateEffect.js
-
-
-var useUpdateEffect = function (effect, deps) {
-    var isFirstMount = useFirstMountState();
-    (0,react.useEffect)(function () {
-        if (!isFirstMount) {
-            return effect();
-        }
-    }, deps);
-};
-/* harmony default export */ const esm_useUpdateEffect = (useUpdateEffect);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/factory/createReducer.js
-
-
-function composeMiddleware(chain) {
-    return function (context, dispatch) {
-        return chain.reduceRight(function (res, middleware) {
-            return middleware(context)(res);
-        }, dispatch);
-    };
-}
-var createReducer = function () {
-    var middlewares = [];
-    for (var _i = 0; _i < arguments.length; _i++) {
-        middlewares[_i] = arguments[_i];
-    }
-    var composedMiddleware = composeMiddleware(middlewares);
-    return function (reducer, initialState, initializer) {
-        if (initializer === void 0) { initializer = function (value) { return value; }; }
-        var ref = (0,react.useRef)(initializer(initialState));
-        var _a = (0,react.useState)(ref.current), setState = _a[1];
-        var dispatch = (0,react.useCallback)(function (action) {
-            ref.current = reducer(ref.current, action);
-            setState(ref.current);
-            return action;
-        }, [reducer]);
-        var dispatchRef = (0,react.useRef)(composedMiddleware({
-            getState: function () { return ref.current; },
-            dispatch: function () {
-                var args = [];
-                for (var _i = 0; _i < arguments.length; _i++) {
-                    args[_i] = arguments[_i];
-                }
-                return dispatchRef.current.apply(dispatchRef, args);
-            },
-        }, dispatch));
-        esm_useUpdateEffect(function () {
-            dispatchRef.current = composedMiddleware({
-                getState: function () { return ref.current; },
-                dispatch: function () {
-                    var args = [];
-                    for (var _i = 0; _i < arguments.length; _i++) {
-                        args[_i] = arguments[_i];
-                    }
-                    return dispatchRef.current.apply(dispatchRef, args);
-                },
-            }, dispatch);
-        }, [dispatch]);
-        return [ref.current, dispatchRef.current];
-    };
-};
-/* harmony default export */ const factory_createReducer = (createReducer);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/factory/createStateContext.js
-
-var createStateContext = function (defaultInitialValue) {
-    var context = (0,react.createContext)(undefined);
-    var providerFactory = function (props, children) { return (0,react.createElement)(context.Provider, props, children); };
-    var StateProvider = function (_a) {
-        var children = _a.children, initialValue = _a.initialValue;
-        var state = (0,react.useState)(initialValue !== undefined ? initialValue : defaultInitialValue);
-        return providerFactory({ value: state }, children);
-    };
-    var useStateContext = function () {
-        var state = (0,react.useContext)(context);
-        if (state == null) {
-            throw new Error("useStateContext must be used inside a StateProvider.");
-        }
-        return state;
-    };
-    return [useStateContext, StateProvider, context];
-};
-/* harmony default export */ const factory_createStateContext = (createStateContext);
-
-// EXTERNAL MODULE: ./node_modules/tslib/tslib.es6.js
-var tslib_es6 = __webpack_require__(70655);
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useMountedState.js
-
-function useMountedState() {
-    var mountedRef = (0,react.useRef)(false);
-    var get = (0,react.useCallback)(function () { return mountedRef.current; }, []);
-    (0,react.useEffect)(function () {
-        mountedRef.current = true;
-        return function () {
-            mountedRef.current = false;
-        };
-    }, []);
-    return get;
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useAsyncFn.js
-
-
-
-function useAsyncFn(fn, deps, initialState) {
-    if (deps === void 0) { deps = []; }
-    if (initialState === void 0) { initialState = { loading: false }; }
-    var lastCallId = (0,react.useRef)(0);
-    var isMounted = useMountedState();
-    var _a = (0,react.useState)(initialState), state = _a[0], set = _a[1];
-    var callback = (0,react.useCallback)(function () {
-        var args = [];
-        for (var _i = 0; _i < arguments.length; _i++) {
-            args[_i] = arguments[_i];
-        }
-        var callId = ++lastCallId.current;
-        if (!state.loading) {
-            set(function (prevState) { return ((0,tslib_es6.__assign)((0,tslib_es6.__assign)({}, prevState), { loading: true })); });
-        }
-        return fn.apply(void 0, args).then(function (value) {
-            isMounted() && callId === lastCallId.current && set({ value: value, loading: false });
-            return value;
-        }, function (error) {
-            isMounted() && callId === lastCallId.current && set({ error: error, loading: false });
-            return error;
-        });
-    }, deps);
-    return [state, callback];
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useAsync.js
-
-
-function useAsync(fn, deps) {
-    if (deps === void 0) { deps = []; }
-    var _a = useAsyncFn(fn, deps, {
-        loading: true,
-    }), state = _a[0], callback = _a[1];
-    (0,react.useEffect)(function () {
-        callback();
-    }, [callback]);
-    return state;
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useAsyncRetry.js
-
-
-
-var useAsyncRetry = function (fn, deps) {
-    if (deps === void 0) { deps = []; }
-    var _a = (0,react.useState)(0), attempt = _a[0], setAttempt = _a[1];
-    var state = useAsync(fn, (0,tslib_es6.__spreadArrays)(deps, [attempt]));
-    var stateLoading = state.loading;
-    var retry = (0,react.useCallback)(function () {
-        if (stateLoading) {
-            if (false) {}
-            return;
-        }
-        setAttempt(function (currentAttempt) { return currentAttempt + 1; });
-    }, (0,tslib_es6.__spreadArrays)(deps, [stateLoading]));
-    return (0,tslib_es6.__assign)((0,tslib_es6.__assign)({}, state), { retry: retry });
-};
-/* harmony default export */ const esm_useAsyncRetry = (useAsyncRetry);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useSetState.js
-
-var useSetState = function (initialState) {
-    if (initialState === void 0) { initialState = {}; }
-    var _a = (0,react.useState)(initialState), state = _a[0], set = _a[1];
-    var setState = (0,react.useCallback)(function (patch) {
-        set(function (prevState) {
-            return Object.assign({}, prevState, patch instanceof Function ? patch(prevState) : patch);
-        });
-    }, []);
-    return [state, setState];
-};
-/* harmony default export */ const esm_useSetState = (useSetState);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/misc/parseTimeRanges.js
-function parseTimeRanges(ranges) {
-    var result = [];
-    for (var i = 0; i < ranges.length; i++) {
-        result.push({
-            start: ranges.start(i),
-            end: ranges.end(i),
-        });
-    }
-    return result;
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/factory/createHTMLMediaHook.js
-
-
-
-
-
-function createHTMLMediaHook(tag) {
-    return function (elOrProps) {
-        var element;
-        var props;
-        if (react.isValidElement(elOrProps)) {
-            element = elOrProps;
-            props = element.props;
-        }
-        else {
-            props = elOrProps;
-        }
-        var _a = esm_useSetState({
-            buffered: [],
-            time: 0,
-            duration: 0,
-            paused: true,
-            muted: false,
-            volume: 1,
-            playing: false,
-        }), state = _a[0], setState = _a[1];
-        var ref = (0,react.useRef)(null);
-        var wrapEvent = function (userEvent, proxyEvent) {
-            return function (event) {
-                try {
-                    proxyEvent && proxyEvent(event);
-                }
-                finally {
-                    userEvent && userEvent(event);
-                }
-            };
-        };
-        var onPlay = function () { return setState({ paused: false }); };
-        var onPlaying = function () { return setState({ playing: true }); };
-        var onWaiting = function () { return setState({ playing: false }); };
-        var onPause = function () { return setState({ paused: true, playing: false }); };
-        var onVolumeChange = function () {
-            var el = ref.current;
-            if (!el) {
-                return;
-            }
-            setState({
-                muted: el.muted,
-                volume: el.volume,
-            });
-        };
-        var onDurationChange = function () {
-            var el = ref.current;
-            if (!el) {
-                return;
-            }
-            var duration = el.duration, buffered = el.buffered;
-            setState({
-                duration: duration,
-                buffered: parseTimeRanges(buffered),
-            });
-        };
-        var onTimeUpdate = function () {
-            var el = ref.current;
-            if (!el) {
-                return;
-            }
-            setState({ time: el.currentTime });
-        };
-        var onProgress = function () {
-            var el = ref.current;
-            if (!el) {
-                return;
-            }
-            setState({ buffered: parseTimeRanges(el.buffered) });
-        };
-        if (element) {
-            element = react.cloneElement(element, (0,tslib_es6.__assign)((0,tslib_es6.__assign)({ controls: false }, props), { ref: ref, onPlay: wrapEvent(props.onPlay, onPlay), onPlaying: wrapEvent(props.onPlaying, onPlaying), onWaiting: wrapEvent(props.onWaiting, onWaiting), onPause: wrapEvent(props.onPause, onPause), onVolumeChange: wrapEvent(props.onVolumeChange, onVolumeChange), onDurationChange: wrapEvent(props.onDurationChange, onDurationChange), onTimeUpdate: wrapEvent(props.onTimeUpdate, onTimeUpdate), onProgress: wrapEvent(props.onProgress, onProgress) }));
-        }
-        else {
-            element = react.createElement(tag, (0,tslib_es6.__assign)((0,tslib_es6.__assign)({ controls: false }, props), { ref: ref, onPlay: wrapEvent(props.onPlay, onPlay), onPlaying: wrapEvent(props.onPlaying, onPlaying), onWaiting: wrapEvent(props.onWaiting, onWaiting), onPause: wrapEvent(props.onPause, onPause), onVolumeChange: wrapEvent(props.onVolumeChange, onVolumeChange), onDurationChange: wrapEvent(props.onDurationChange, onDurationChange), onTimeUpdate: wrapEvent(props.onTimeUpdate, onTimeUpdate), onProgress: wrapEvent(props.onProgress, onProgress) })); // TODO: fix this typing.
-        }
-        // Some browsers return `Promise` on `.play()` and may throw errors
-        // if one tries to execute another `.play()` or `.pause()` while that
-        // promise is resolving. So we prevent that with this lock.
-        // See: https://bugs.chromium.org/p/chromium/issues/detail?id=593273
-        var lockPlay = false;
-        var controls = {
-            play: function () {
-                var el = ref.current;
-                if (!el) {
-                    return undefined;
-                }
-                if (!lockPlay) {
-                    var promise = el.play();
-                    var isPromise = typeof promise === 'object';
-                    if (isPromise) {
-                        lockPlay = true;
-                        var resetLock = function () {
-                            lockPlay = false;
-                        };
-                        promise.then(resetLock, resetLock);
-                    }
-                    return promise;
-                }
-                return undefined;
-            },
-            pause: function () {
-                var el = ref.current;
-                if (el && !lockPlay) {
-                    return el.pause();
-                }
-            },
-            seek: function (time) {
-                var el = ref.current;
-                if (!el || state.duration === undefined) {
-                    return;
-                }
-                time = Math.min(state.duration, Math.max(0, time));
-                el.currentTime = time;
-            },
-            volume: function (volume) {
-                var el = ref.current;
-                if (!el) {
-                    return;
-                }
-                volume = Math.min(1, Math.max(0, volume));
-                el.volume = volume;
-                setState({ volume: volume });
-            },
-            mute: function () {
-                var el = ref.current;
-                if (!el) {
-                    return;
-                }
-                el.muted = true;
-            },
-            unmute: function () {
-                var el = ref.current;
-                if (!el) {
-                    return;
-                }
-                el.muted = false;
-            },
-        };
-        (0,react.useEffect)(function () {
-            var el = ref.current;
-            if (!el) {
-                if (false) {}
-                return;
-            }
-            setState({
-                volume: el.volume,
-                muted: el.muted,
-                paused: el.paused,
-            });
-            // Start media, if autoPlay requested.
-            if (props.autoPlay && el.paused) {
-                controls.play();
-            }
-        }, [props.src]);
-        return [element, state, controls, ref];
-    };
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useAudio.js
-
-var useAudio = createHTMLMediaHook('audio');
-/* harmony default export */ const esm_useAudio = (useAudio);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/misc/util.js
-var noop = function () { };
-function on(obj) {
-    var args = [];
-    for (var _i = 1; _i < arguments.length; _i++) {
-        args[_i - 1] = arguments[_i];
-    }
-    if (obj && obj.addEventListener) {
-        obj.addEventListener.apply(obj, args);
-    }
-}
-function off(obj) {
-    var args = [];
-    for (var _i = 1; _i < arguments.length; _i++) {
-        args[_i - 1] = arguments[_i];
-    }
-    if (obj && obj.removeEventListener) {
-        obj.removeEventListener.apply(obj, args);
-    }
-}
-var isBrowser = typeof window !== 'undefined';
-var isNavigator = typeof navigator !== 'undefined';
-
-// EXTERNAL MODULE: ./node_modules/fast-deep-equal/react.js
-var fast_deep_equal_react = __webpack_require__(38252);
-var fast_deep_equal_react_default = /*#__PURE__*/__webpack_require__.n(fast_deep_equal_react);
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/misc/isDeepEqual.js
-
-/* harmony default export */ const isDeepEqual = ((fast_deep_equal_react_default()));
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useBattery.js
-
-
-
-var nav = isNavigator ? navigator : undefined;
-var isBatteryApiSupported = nav && typeof nav.getBattery === 'function';
-function useBatteryMock() {
-    return { isSupported: false };
-}
-function useBattery() {
-    var _a = (0,react.useState)({ isSupported: true, fetched: false }), state = _a[0], setState = _a[1];
-    (0,react.useEffect)(function () {
-        var isMounted = true;
-        var battery = null;
-        var handleChange = function () {
-            if (!isMounted || !battery) {
-                return;
-            }
-            var newState = {
-                isSupported: true,
-                fetched: true,
-                level: battery.level,
-                charging: battery.charging,
-                dischargingTime: battery.dischargingTime,
-                chargingTime: battery.chargingTime,
-            };
-            !isDeepEqual(state, newState) && setState(newState);
-        };
-        nav.getBattery().then(function (bat) {
-            if (!isMounted) {
-                return;
-            }
-            battery = bat;
-            on(battery, 'chargingchange', handleChange);
-            on(battery, 'chargingtimechange', handleChange);
-            on(battery, 'dischargingtimechange', handleChange);
-            on(battery, 'levelchange', handleChange);
-            handleChange();
-        });
-        return function () {
-            isMounted = false;
-            if (battery) {
-                off(battery, 'chargingchange', handleChange);
-                off(battery, 'chargingtimechange', handleChange);
-                off(battery, 'dischargingtimechange', handleChange);
-                off(battery, 'levelchange', handleChange);
-            }
-        };
-    }, []);
-    return state;
-}
-/* harmony default export */ const esm_useBattery = (isBatteryApiSupported ? useBattery : useBatteryMock);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useBeforeUnload.js
-
-
-var useBeforeUnload = function (enabled, message) {
-    if (enabled === void 0) { enabled = true; }
-    var handler = (0,react.useCallback)(function (event) {
-        var finalEnabled = typeof enabled === 'function' ? enabled() : true;
-        if (!finalEnabled) {
-            return;
-        }
-        event.preventDefault();
-        if (message) {
-            event.returnValue = message;
-        }
-        return message;
-    }, [enabled, message]);
-    (0,react.useEffect)(function () {
-        if (!enabled) {
-            return;
-        }
-        on(window, 'beforeunload', handler);
-        return function () { return off(window, 'beforeunload', handler); };
-    }, [enabled, handler]);
-};
-/* harmony default export */ const esm_useBeforeUnload = (useBeforeUnload);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useToggle.js
-
-var toggleReducer = function (state, nextValue) {
-    return typeof nextValue === 'boolean' ? nextValue : !state;
-};
-var useToggle = function (initialValue) {
-    return (0,react.useReducer)(toggleReducer, initialValue);
-};
-/* harmony default export */ const esm_useToggle = (useToggle);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useBoolean.js
-
-/* harmony default export */ const useBoolean = (esm_useToggle);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useClickAway.js
-
-
-var defaultEvents = ['mousedown', 'touchstart'];
-var useClickAway = function (ref, onClickAway, events) {
-    if (events === void 0) { events = defaultEvents; }
-    var savedCallback = (0,react.useRef)(onClickAway);
-    (0,react.useEffect)(function () {
-        savedCallback.current = onClickAway;
-    }, [onClickAway]);
-    (0,react.useEffect)(function () {
-        var handler = function (event) {
-            var el = ref.current;
-            el && !el.contains(event.target) && savedCallback.current(event);
-        };
-        for (var _i = 0, events_1 = events; _i < events_1.length; _i++) {
-            var eventName = events_1[_i];
-            on(document, eventName, handler);
-        }
-        return function () {
-            for (var _i = 0, events_2 = events; _i < events_2.length; _i++) {
-                var eventName = events_2[_i];
-                off(document, eventName, handler);
-            }
-        };
-    }, [events, ref]);
-};
-/* harmony default export */ const esm_useClickAway = (useClickAway);
-
-// EXTERNAL MODULE: ./node_modules/js-cookie/src/js.cookie.js
-var js_cookie = __webpack_require__(36808);
-var js_cookie_default = /*#__PURE__*/__webpack_require__.n(js_cookie);
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useCookie.js
-
-
-var useCookie = function (cookieName) {
-    var _a = (0,react.useState)(function () { return js_cookie_default().get(cookieName) || null; }), value = _a[0], setValue = _a[1];
-    var updateCookie = (0,react.useCallback)(function (newValue, options) {
-        js_cookie_default().set(cookieName, newValue, options);
-        setValue(newValue);
-    }, [cookieName]);
-    var deleteCookie = (0,react.useCallback)(function () {
-        js_cookie_default().remove(cookieName);
-        setValue(null);
-    }, [cookieName]);
-    return [value, updateCookie, deleteCookie];
-};
-/* harmony default export */ const esm_useCookie = (useCookie);
-
-// EXTERNAL MODULE: ./node_modules/copy-to-clipboard/index.js
-var copy_to_clipboard = __webpack_require__(20640);
-var copy_to_clipboard_default = /*#__PURE__*/__webpack_require__.n(copy_to_clipboard);
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useCopyToClipboard.js
-
-
-
-
-var useCopyToClipboard = function () {
-    var isMounted = useMountedState();
-    var _a = esm_useSetState({
-        value: undefined,
-        error: undefined,
-        noUserInteraction: true,
-    }), state = _a[0], setState = _a[1];
-    var copyToClipboard = (0,react.useCallback)(function (value) {
-        if (!isMounted()) {
-            return;
-        }
-        var noUserInteraction;
-        var normalizedValue;
-        try {
-            // only strings and numbers casted to strings can be copied to clipboard
-            if (typeof value !== 'string' && typeof value !== 'number') {
-                var error = new Error("Cannot copy typeof " + typeof value + " to clipboard, must be a string");
-                if (false)
-                    {}
-                setState({
-                    value: value,
-                    error: error,
-                    noUserInteraction: true,
-                });
-                return;
-            }
-            // empty strings are also considered invalid
-            else if (value === '') {
-                var error = new Error("Cannot copy empty string to clipboard.");
-                if (false)
-                    {}
-                setState({
-                    value: value,
-                    error: error,
-                    noUserInteraction: true,
-                });
-                return;
-            }
-            normalizedValue = value.toString();
-            noUserInteraction = copy_to_clipboard_default()(normalizedValue);
-            setState({
-                value: normalizedValue,
-                error: undefined,
-                noUserInteraction: noUserInteraction,
-            });
-        }
-        catch (error) {
-            setState({
-                value: normalizedValue,
-                error: error,
-                noUserInteraction: noUserInteraction,
-            });
-        }
-    }, []);
-    return [state, copyToClipboard];
-};
-/* harmony default export */ const esm_useCopyToClipboard = (useCopyToClipboard);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useUpdate.js
-
-var updateReducer = function (num) { return (num + 1) % 1000000; };
-function useUpdate() {
-    var _a = (0,react.useReducer)(updateReducer, 0), update = _a[1];
-    return update;
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/misc/hookState.js
-function resolveHookState(nextState, currentState) {
-    if (typeof nextState === 'function') {
-        return nextState.length ? nextState(currentState) : nextState();
-    }
-    return nextState;
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useGetSet.js
-
-
-
-function useGetSet(initialState) {
-    var state = (0,react.useRef)(resolveHookState(initialState));
-    var update = useUpdate();
-    return (0,react.useMemo)(function () { return [
-        function () { return state.current; },
-        function (newState) {
-            state.current = resolveHookState(newState, state.current);
-            update();
-        },
-    ]; }, []);
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useCounter.js
-
-
-
-function useCounter(initialValue, max, min) {
-    if (initialValue === void 0) { initialValue = 0; }
-    if (max === void 0) { max = null; }
-    if (min === void 0) { min = null; }
-    var init = resolveHookState(initialValue);
-    typeof init !== 'number' &&
-        console.error('initialValue has to be a number, got ' + typeof initialValue);
-    if (typeof min === 'number') {
-        init = Math.max(init, min);
-    }
-    else if (min !== null) {
-        console.error('min has to be a number, got ' + typeof min);
-    }
-    if (typeof max === 'number') {
-        init = Math.min(init, max);
-    }
-    else if (max !== null) {
-        console.error('max has to be a number, got ' + typeof max);
-    }
-    var _a = useGetSet(init), get = _a[0], setInternal = _a[1];
-    return [
-        get(),
-        (0,react.useMemo)(function () {
-            var set = function (newState) {
-                var prevState = get();
-                var rState = resolveHookState(newState, prevState);
-                if (prevState !== rState) {
-                    if (typeof min === 'number') {
-                        rState = Math.max(rState, min);
-                    }
-                    if (typeof max === 'number') {
-                        rState = Math.min(rState, max);
-                    }
-                    prevState !== rState && setInternal(rState);
-                }
-            };
-            return {
-                get: get,
-                set: set,
-                inc: function (delta) {
-                    if (delta === void 0) { delta = 1; }
-                    var rDelta = resolveHookState(delta, get());
-                    if (typeof rDelta !== 'number') {
-                        console.error('delta has to be a number or function returning a number, got ' + typeof rDelta);
-                    }
-                    set(function (num) { return num + rDelta; });
-                },
-                dec: function (delta) {
-                    if (delta === void 0) { delta = 1; }
-                    var rDelta = resolveHookState(delta, get());
-                    if (typeof rDelta !== 'number') {
-                        console.error('delta has to be a number or function returning a number, got ' + typeof rDelta);
-                    }
-                    set(function (num) { return num - rDelta; });
-                },
-                reset: function (value) {
-                    if (value === void 0) { value = init; }
-                    var rValue = resolveHookState(value, get());
-                    if (typeof rValue !== 'number') {
-                        console.error('value has to be a number or function returning a number, got ' + typeof rValue);
-                    }
-                    // eslint-disable-next-line react-hooks/exhaustive-deps
-                    init = rValue;
-                    set(rValue);
-                },
-            };
-        }, [init, min, max]),
-    ];
-}
-
-// EXTERNAL MODULE: ./node_modules/nano-css/index.js
-var nano_css = __webpack_require__(40818);
-// EXTERNAL MODULE: ./node_modules/nano-css/addon/cssom.js
-var cssom = __webpack_require__(97142);
-// EXTERNAL MODULE: ./node_modules/nano-css/addon/vcssom.js
-var vcssom = __webpack_require__(52099);
-// EXTERNAL MODULE: ./node_modules/nano-css/addon/vcssom/cssToTree.js
-var cssToTree = __webpack_require__(87749);
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useIsomorphicLayoutEffect.js
-
-
-var useIsomorphicLayoutEffect = isBrowser ? react.useLayoutEffect : react.useEffect;
-/* harmony default export */ const esm_useIsomorphicLayoutEffect = (useIsomorphicLayoutEffect);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useCss.js
-
-
-
-
-
-
-var nano = (0,nano_css/* create */.U)();
-(0,cssom/* addon */.I)(nano);
-(0,vcssom/* addon */.I)(nano);
-var counter = 0;
-var useCss = function (css) {
-    var className = (0,react.useMemo)(function () { return 'react-use-css-' + (counter++).toString(36); }, []);
-    var sheet = (0,react.useMemo)(function () { return new nano.VSheet(); }, []);
-    esm_useIsomorphicLayoutEffect(function () {
-        var tree = {};
-        (0,cssToTree/* cssToTree */.z)(tree, css, '.' + className, '');
-        sheet.diff(tree);
-        return function () {
-            sheet.diff({});
-        };
-    });
-    return className;
-};
-/* harmony default export */ const esm_useCss = (useCss);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useCustomCompareEffect.js
-
-var isPrimitive = function (val) { return val !== Object(val); };
-var useCustomCompareEffect = function (effect, deps, depsEqual) {
-    if (false) {}
-    var ref = (0,react.useRef)(undefined);
-    if (!ref.current || !depsEqual(deps, ref.current)) {
-        ref.current = deps;
-    }
-    (0,react.useEffect)(effect, ref.current);
-};
-/* harmony default export */ const esm_useCustomCompareEffect = (useCustomCompareEffect);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useTimeoutFn.js
-
-function useTimeoutFn(fn, ms) {
-    if (ms === void 0) { ms = 0; }
-    var ready = (0,react.useRef)(false);
-    var timeout = (0,react.useRef)();
-    var callback = (0,react.useRef)(fn);
-    var isReady = (0,react.useCallback)(function () { return ready.current; }, []);
-    var set = (0,react.useCallback)(function () {
-        ready.current = false;
-        timeout.current && clearTimeout(timeout.current);
-        timeout.current = setTimeout(function () {
-            ready.current = true;
-            callback.current();
-        }, ms);
-    }, [ms]);
-    var clear = (0,react.useCallback)(function () {
-        ready.current = null;
-        timeout.current && clearTimeout(timeout.current);
-    }, []);
-    // update ref when function changes
-    (0,react.useEffect)(function () {
-        callback.current = fn;
-    }, [fn]);
-    // set on mount, clear on unmount
-    (0,react.useEffect)(function () {
-        set();
-        return clear;
-    }, [ms]);
-    return [isReady, clear, set];
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useDebounce.js
-
-
-function useDebounce(fn, ms, deps) {
-    if (ms === void 0) { ms = 0; }
-    if (deps === void 0) { deps = []; }
-    var _a = useTimeoutFn(fn, ms), isReady = _a[0], cancel = _a[1], reset = _a[2];
-    (0,react.useEffect)(reset, deps);
-    return [isReady, cancel];
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useDeepCompareEffect.js
-
-
-var useDeepCompareEffect_isPrimitive = function (val) { return val !== Object(val); };
-var useDeepCompareEffect = function (effect, deps) {
-    if (false) {}
-    esm_useCustomCompareEffect(effect, deps, isDeepEqual);
-};
-/* harmony default export */ const esm_useDeepCompareEffect = (useDeepCompareEffect);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useDefault.js
-
-var useDefault = function (defaultValue, initialValue) {
-    var _a = (0,react.useState)(initialValue), value = _a[0], setValue = _a[1];
-    if (value === undefined || value === null) {
-        return [defaultValue, setValue];
-    }
-    return [value, setValue];
-};
-/* harmony default export */ const esm_useDefault = (useDefault);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useDrop.js
-
-
-
-var createProcess = function (options) { return function (dataTransfer, event) {
-    var uri = dataTransfer.getData('text/uri-list');
-    if (uri) {
-        (options.onUri || noop)(uri, event);
-        return;
-    }
-    if (dataTransfer.files && dataTransfer.files.length) {
-        (options.onFiles || noop)(Array.from(dataTransfer.files), event);
-        return;
-    }
-    if (event.clipboardData) {
-        var text = event.clipboardData.getData('text');
-        (options.onText || noop)(text, event);
-        return;
-    }
-}; };
-var useDrop = function (options, args) {
-    if (options === void 0) { options = {}; }
-    if (args === void 0) { args = []; }
-    var onFiles = options.onFiles, onText = options.onText, onUri = options.onUri;
-    var _a = (0,react.useState)(false), over = _a[0], setOverRaw = _a[1];
-    var setOver = (0,react.useCallback)(setOverRaw, []);
-    var process = (0,react.useMemo)(function () { return createProcess(options); }, [onFiles, onText, onUri]);
-    (0,react.useEffect)(function () {
-        var onDragOver = function (event) {
-            event.preventDefault();
-            setOver(true);
-        };
-        var onDragEnter = function (event) {
-            event.preventDefault();
-            setOver(true);
-        };
-        var onDragLeave = function () {
-            setOver(false);
-        };
-        var onDragExit = function () {
-            setOver(false);
-        };
-        var onDrop = function (event) {
-            event.preventDefault();
-            setOver(false);
-            process(event.dataTransfer, event);
-        };
-        var onPaste = function (event) {
-            process(event.clipboardData, event);
-        };
-        on(document, 'dragover', onDragOver);
-        on(document, 'dragenter', onDragEnter);
-        on(document, 'dragleave', onDragLeave);
-        on(document, 'dragexit', onDragExit);
-        on(document, 'drop', onDrop);
-        if (onText) {
-            on(document, 'paste', onPaste);
-        }
-        return function () {
-            off(document, 'dragover', onDragOver);
-            off(document, 'dragenter', onDragEnter);
-            off(document, 'dragleave', onDragLeave);
-            off(document, 'dragexit', onDragExit);
-            off(document, 'drop', onDrop);
-            off(document, 'paste', onPaste);
-        };
-    }, (0,tslib_es6.__spreadArrays)([process], args));
-    return { over: over };
-};
-/* harmony default export */ const esm_useDrop = (useDrop);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useDropArea.js
-
-
-
-/*
-const defaultState: DropAreaState = {
-  over: false,
-};
-*/
-var useDropArea_createProcess = function (options, mounted) { return function (dataTransfer, event) {
-    var uri = dataTransfer.getData('text/uri-list');
-    if (uri) {
-        (options.onUri || noop)(uri, event);
-        return;
-    }
-    if (dataTransfer.files && dataTransfer.files.length) {
-        (options.onFiles || noop)(Array.from(dataTransfer.files), event);
-        return;
-    }
-    if (dataTransfer.items && dataTransfer.items.length) {
-        dataTransfer.items[0].getAsString(function (text) {
-            if (mounted) {
-                (options.onText || noop)(text, event);
-            }
-        });
-    }
-}; };
-var createBond = function (process, setOver) { return ({
-    onDragOver: function (event) {
-        event.preventDefault();
-    },
-    onDragEnter: function (event) {
-        event.preventDefault();
-        setOver(true);
-    },
-    onDragLeave: function () {
-        setOver(false);
-    },
-    onDrop: function (event) {
-        event.preventDefault();
-        event.persist();
-        setOver(false);
-        process(event.dataTransfer, event);
-    },
-    onPaste: function (event) {
-        event.persist();
-        process(event.clipboardData, event);
-    },
-}); };
-var useDropArea = function (options) {
-    if (options === void 0) { options = {}; }
-    var onFiles = options.onFiles, onText = options.onText, onUri = options.onUri;
-    var isMounted = useMountedState();
-    var _a = (0,react.useState)(false), over = _a[0], setOver = _a[1];
-    var process = (0,react.useMemo)(function () { return useDropArea_createProcess(options, isMounted()); }, [onFiles, onText, onUri]);
-    var bond = (0,react.useMemo)(function () { return createBond(process, setOver); }, [process, setOver]);
-    return [bond, { over: over }];
-};
-/* harmony default export */ const esm_useDropArea = (useDropArea);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useEffectOnce.js
-
-var useEffectOnce = function (effect) {
-    (0,react.useEffect)(effect, []);
-};
-/* harmony default export */ const esm_useEffectOnce = (useEffectOnce);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useEnsuredForwardedRef.js
-
-function useEnsuredForwardedRef(forwardedRef) {
-    var ensuredRef = (0,react.useRef)(forwardedRef && forwardedRef.current);
-    (0,react.useEffect)(function () {
-        if (!forwardedRef) {
-            return;
-        }
-        forwardedRef.current = ensuredRef.current;
-    }, [forwardedRef]);
-    return ensuredRef;
-}
-function ensuredForwardRef(Component) {
-    return (0,react.forwardRef)(function (props, ref) {
-        var ensuredRef = useEnsuredForwardedRef(ref);
-        return Component(props, ensuredRef);
-    });
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useEvent.js
-
-
-var defaultTarget = isBrowser ? window : null;
-var isListenerType1 = function (target) {
-    return !!target.addEventListener;
-};
-var isListenerType2 = function (target) {
-    return !!target.on;
-};
-var useEvent = function (name, handler, target, options) {
-    if (target === void 0) { target = defaultTarget; }
-    (0,react.useEffect)(function () {
-        if (!handler) {
-            return;
-        }
-        if (!target) {
-            return;
-        }
-        if (isListenerType1(target)) {
-            on(target, name, handler, options);
-        }
-        else if (isListenerType2(target)) {
-            target.on(name, handler, options);
-        }
-        return function () {
-            if (isListenerType1(target)) {
-                off(target, name, handler, options);
-            }
-            else if (isListenerType2(target)) {
-                target.off(name, handler, options);
-            }
-        };
-    }, [name, handler, target, JSON.stringify(options)]);
-};
-/* harmony default export */ const esm_useEvent = (useEvent);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useError.js
-
-var useError = function () {
-    var _a = (0,react.useState)(null), error = _a[0], setError = _a[1];
-    (0,react.useEffect)(function () {
-        if (error) {
-            throw error;
-        }
-    }, [error]);
-    var dispatchError = (0,react.useCallback)(function (err) {
-        setError(err);
-    }, []);
-    return dispatchError;
-};
-/* harmony default export */ const esm_useError = (useError);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useFavicon.js
-
-var useFavicon = function (href) {
-    (0,react.useEffect)(function () {
-        var link = document.querySelector("link[rel*='icon']") || document.createElement('link');
-        link.type = 'image/x-icon';
-        link.rel = 'shortcut icon';
-        link.href = href;
-        document.getElementsByTagName('head')[0].appendChild(link);
-    }, [href]);
-};
-/* harmony default export */ const esm_useFavicon = (useFavicon);
-
-// EXTERNAL MODULE: ./node_modules/screenfull/dist/screenfull.js
-var screenfull = __webpack_require__(10577);
-var screenfull_default = /*#__PURE__*/__webpack_require__.n(screenfull);
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useFullscreen.js
-
-
-
-
-var useFullscreen = function (ref, enabled, options) {
-    if (options === void 0) { options = {}; }
-    var video = options.video, _a = options.onClose, onClose = _a === void 0 ? noop : _a;
-    var _b = (0,react.useState)(enabled), isFullscreen = _b[0], setIsFullscreen = _b[1];
-    esm_useIsomorphicLayoutEffect(function () {
-        if (!enabled) {
-            return;
-        }
-        if (!ref.current) {
-            return;
-        }
-        var onWebkitEndFullscreen = function () {
-            if (video === null || video === void 0 ? void 0 : video.current) {
-                off(video.current, 'webkitendfullscreen', onWebkitEndFullscreen);
-            }
-            onClose();
-        };
-        var onChange = function () {
-            if ((screenfull_default()).isEnabled) {
-                var isScreenfullFullscreen = (screenfull_default()).isFullscreen;
-                setIsFullscreen(isScreenfullFullscreen);
-                if (!isScreenfullFullscreen) {
-                    onClose();
-                }
-            }
-        };
-        if ((screenfull_default()).isEnabled) {
-            try {
-                screenfull_default().request(ref.current);
-                setIsFullscreen(true);
-            }
-            catch (error) {
-                onClose(error);
-                setIsFullscreen(false);
-            }
-            screenfull_default().on('change', onChange);
-        }
-        else if (video && video.current && video.current.webkitEnterFullscreen) {
-            video.current.webkitEnterFullscreen();
-            on(video.current, 'webkitendfullscreen', onWebkitEndFullscreen);
-            setIsFullscreen(true);
-        }
-        else {
-            onClose();
-            setIsFullscreen(false);
-        }
-        return function () {
-            setIsFullscreen(false);
-            if ((screenfull_default()).isEnabled) {
-                try {
-                    screenfull_default().off('change', onChange);
-                    screenfull_default().exit();
-                }
-                catch (_a) { }
-            }
-            else if (video && video.current && video.current.webkitExitFullscreen) {
-                off(video.current, 'webkitendfullscreen', onWebkitEndFullscreen);
-                video.current.webkitExitFullscreen();
-            }
-        };
-    }, [enabled, video, ref]);
-    return isFullscreen;
-};
-/* harmony default export */ const esm_useFullscreen = (useFullscreen);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useGeolocation.js
-
-
-var useGeolocation = function (options) {
-    var _a = (0,react.useState)({
-        loading: true,
-        accuracy: null,
-        altitude: null,
-        altitudeAccuracy: null,
-        heading: null,
-        latitude: null,
-        longitude: null,
-        speed: null,
-        timestamp: Date.now(),
-    }), state = _a[0], setState = _a[1];
-    var mounted = true;
-    var watchId;
-    var onEvent = function (event) {
-        if (mounted) {
-            setState({
-                loading: false,
-                accuracy: event.coords.accuracy,
-                altitude: event.coords.altitude,
-                altitudeAccuracy: event.coords.altitudeAccuracy,
-                heading: event.coords.heading,
-                latitude: event.coords.latitude,
-                longitude: event.coords.longitude,
-                speed: event.coords.speed,
-                timestamp: event.timestamp,
-            });
-        }
-    };
-    var onEventError = function (error) {
-        return mounted && setState(function (oldState) { return ((0,tslib_es6.__assign)((0,tslib_es6.__assign)({}, oldState), { loading: false, error: error })); });
-    };
-    (0,react.useEffect)(function () {
-        navigator.geolocation.getCurrentPosition(onEvent, onEventError, options);
-        watchId = navigator.geolocation.watchPosition(onEvent, onEventError, options);
-        return function () {
-            mounted = false;
-            navigator.geolocation.clearWatch(watchId);
-        };
-    }, []);
-    return state;
-};
-/* harmony default export */ const esm_useGeolocation = (useGeolocation);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useGetSetState.js
-
-
-
-var useGetSetState = function (initialState) {
-    if (initialState === void 0) { initialState = {}; }
-    if (false) {}
-    var update = useUpdate();
-    var state = (0,react.useRef)((0,tslib_es6.__assign)({}, initialState));
-    var get = (0,react.useCallback)(function () { return state.current; }, []);
-    var set = (0,react.useCallback)(function (patch) {
-        if (!patch) {
-            return;
-        }
-        if (false) {}
-        Object.assign(state.current, patch);
-        update();
-    }, []);
-    return [get, set];
-};
-/* harmony default export */ const esm_useGetSetState = (useGetSetState);
-
-;// CONCATENATED MODULE: ./node_modules/set-harmonic-interval/lib/index.esm.js
-var index_esm_counter = 0;
-var buckets = {};
-var setHarmonicInterval = function (fn, ms) {
-    var _a;
-    var id = index_esm_counter++;
-    if (buckets[ms]) {
-        buckets[ms].listeners[id] = fn;
-    }
-    else {
-        var timer = setInterval(function () {
-            var listeners = buckets[ms].listeners;
-            var didThrow = false;
-            var lastError;
-            for (var _i = 0, _a = Object.values(listeners); _i < _a.length; _i++) {
-                var listener = _a[_i];
-                try {
-                    listener();
-                }
-                catch (error) {
-                    didThrow = true;
-                    lastError = error;
-                }
-            }
-            if (didThrow)
-                throw lastError;
-        }, ms);
-        buckets[ms] = {
-            ms: ms,
-            timer: timer,
-            listeners: (_a = {},
-                _a[id] = fn,
-                _a),
-        };
-    }
-    return {
-        bucket: buckets[ms],
-        id: id,
-    };
-};
-var clearHarmonicInterval = function (_a) {
-    var bucket = _a.bucket, id = _a.id;
-    delete bucket.listeners[id];
-    var hasListeners = false;
-    for (var listener in bucket.listeners) {
-        hasListeners = true;
-        break;
-    }
-    if (!hasListeners) {
-        clearInterval(bucket.timer);
-        delete buckets[bucket.ms];
-    }
-};
-
-
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useHarmonicIntervalFn.js
-
-
-var useHarmonicIntervalFn = function (fn, delay) {
-    if (delay === void 0) { delay = 0; }
-    var latestCallback = (0,react.useRef)(function () { });
-    (0,react.useEffect)(function () {
-        latestCallback.current = fn;
-    });
-    (0,react.useEffect)(function () {
-        if (delay !== null) {
-            var interval_1 = setHarmonicInterval(function () { return latestCallback.current(); }, delay);
-            return function () { return clearHarmonicInterval(interval_1); };
-        }
-        return undefined;
-    }, [delay]);
-};
-/* harmony default export */ const esm_useHarmonicIntervalFn = (useHarmonicIntervalFn);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useHover.js
-
-
-var useState = react.useState;
-var useHover = function (element) {
-    var _a = useState(false), state = _a[0], setState = _a[1];
-    var onMouseEnter = function (originalOnMouseEnter) { return function (event) {
-        (originalOnMouseEnter || noop)(event);
-        setState(true);
-    }; };
-    var onMouseLeave = function (originalOnMouseLeave) { return function (event) {
-        (originalOnMouseLeave || noop)(event);
-        setState(false);
-    }; };
-    if (typeof element === 'function') {
-        element = element(state);
-    }
-    var el = react.cloneElement(element, {
-        onMouseEnter: onMouseEnter(element.props.onMouseEnter),
-        onMouseLeave: onMouseLeave(element.props.onMouseLeave),
-    });
-    return [el, state];
-};
-/* harmony default export */ const esm_useHover = (useHover);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useHoverDirty.js
-
-
-// kudos: https://usehooks.com/
-var useHoverDirty = function (ref, enabled) {
-    if (enabled === void 0) { enabled = true; }
-    if (false) {}
-    var _a = (0,react.useState)(false), value = _a[0], setValue = _a[1];
-    (0,react.useEffect)(function () {
-        var onMouseOver = function () { return setValue(true); };
-        var onMouseOut = function () { return setValue(false); };
-        if (enabled && ref && ref.current) {
-            on(ref.current, 'mouseover', onMouseOver);
-            on(ref.current, 'mouseout', onMouseOut);
-        }
-        // fixes react-hooks/exhaustive-deps warning about stale ref elements
-        var current = ref.current;
-        return function () {
-            if (enabled && current) {
-                off(current, 'mouseover', onMouseOver);
-                off(current, 'mouseout', onMouseOut);
-            }
-        };
-    }, [enabled, ref]);
-    return value;
-};
-/* harmony default export */ const esm_useHoverDirty = (useHoverDirty);
-
-;// CONCATENATED MODULE: ./node_modules/throttle-debounce/esm/index.js
-/* eslint-disable no-undefined,no-param-reassign,no-shadow */
-
-/**
- * Throttle execution of a function. Especially useful for rate limiting
- * execution of handlers on events like resize and scroll.
- *
- * @param  {number}    delay -          A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.
- * @param  {boolean}   [noTrailing] -   Optional, defaults to false. If noTrailing is true, callback will only execute every `delay` milliseconds while the
- *                                    throttled-function is being called. If noTrailing is false or unspecified, callback will be executed one final time
- *                                    after the last throttled-function call. (After the throttled-function has not been called for `delay` milliseconds,
- *                                    the internal counter is reset).
- * @param  {Function}  callback -       A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,
- *                                    to `callback` when the throttled-function is executed.
- * @param  {boolean}   [debounceMode] - If `debounceMode` is true (at begin), schedule `clear` to execute after `delay` ms. If `debounceMode` is false (at end),
- *                                    schedule `callback` to execute after `delay` ms.
- *
- * @returns {Function}  A new, throttled, function.
- */
-function throttle (delay, noTrailing, callback, debounceMode) {
-  /*
-   * After wrapper has stopped being called, this timeout ensures that
-   * `callback` is executed at the proper times in `throttle` and `end`
-   * debounce modes.
-   */
-  var timeoutID;
-  var cancelled = false; // Keep track of the last time `callback` was executed.
-
-  var lastExec = 0; // Function to clear existing timeout
-
-  function clearExistingTimeout() {
-    if (timeoutID) {
-      clearTimeout(timeoutID);
-    }
-  } // Function to cancel next exec
-
-
-  function cancel() {
-    clearExistingTimeout();
-    cancelled = true;
-  } // `noTrailing` defaults to falsy.
-
-
-  if (typeof noTrailing !== 'boolean') {
-    debounceMode = callback;
-    callback = noTrailing;
-    noTrailing = undefined;
-  }
-  /*
-   * The `wrapper` function encapsulates all of the throttling / debouncing
-   * functionality and when executed will limit the rate at which `callback`
-   * is executed.
-   */
-
-
-  function wrapper() {
-    for (var _len = arguments.length, arguments_ = new Array(_len), _key = 0; _key < _len; _key++) {
-      arguments_[_key] = arguments[_key];
-    }
-
-    var self = this;
-    var elapsed = Date.now() - lastExec;
-
-    if (cancelled) {
-      return;
-    } // Execute `callback` and update the `lastExec` timestamp.
-
-
-    function exec() {
-      lastExec = Date.now();
-      callback.apply(self, arguments_);
-    }
-    /*
-     * If `debounceMode` is true (at begin) this is used to clear the flag
-     * to allow future `callback` executions.
-     */
-
-
-    function clear() {
-      timeoutID = undefined;
-    }
-
-    if (debounceMode && !timeoutID) {
-      /*
-       * Since `wrapper` is being called for the first time and
-       * `debounceMode` is true (at begin), execute `callback`.
-       */
-      exec();
-    }
-
-    clearExistingTimeout();
-
-    if (debounceMode === undefined && elapsed > delay) {
-      /*
-       * In throttle mode, if `delay` time has been exceeded, execute
-       * `callback`.
-       */
-      exec();
-    } else if (noTrailing !== true) {
-      /*
-       * In trailing throttle mode, since `delay` time has not been
-       * exceeded, schedule `callback` to execute `delay` ms after most
-       * recent execution.
-       *
-       * If `debounceMode` is true (at begin), schedule `clear` to execute
-       * after `delay` ms.
-       *
-       * If `debounceMode` is false (at end), schedule `callback` to
-       * execute after `delay` ms.
-       */
-      timeoutID = setTimeout(debounceMode ? clear : exec, debounceMode === undefined ? delay - elapsed : delay);
-    }
-  }
-
-  wrapper.cancel = cancel; // Return the wrapper function.
-
-  return wrapper;
-}
-
-/* eslint-disable no-undefined */
-/**
- * Debounce execution of a function. Debouncing, unlike throttling,
- * guarantees that a function is only executed a single time, either at the
- * very beginning of a series of calls, or at the very end.
- *
- * @param  {number}   delay -         A zero-or-greater delay in milliseconds. For event callbacks, values around 100 or 250 (or even higher) are most useful.
- * @param  {boolean}  [atBegin] -     Optional, defaults to false. If atBegin is false or unspecified, callback will only be executed `delay` milliseconds
- *                                  after the last debounced-function call. If atBegin is true, callback will be executed only at the first debounced-function call.
- *                                  (After the throttled-function has not been called for `delay` milliseconds, the internal counter is reset).
- * @param  {Function} callback -      A function to be executed after delay milliseconds. The `this` context and all arguments are passed through, as-is,
- *                                  to `callback` when the debounced-function is executed.
- *
- * @returns {Function} A new, debounced function.
- */
-
-function debounce (delay, atBegin, callback) {
-  return callback === undefined ? throttle(delay, atBegin, false) : throttle(delay, callback, atBegin !== false);
-}
-
-
-//# sourceMappingURL=index.js.map
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useIdle.js
-
-
-
-var useIdle_defaultEvents = ['mousemove', 'mousedown', 'resize', 'keydown', 'touchstart', 'wheel'];
-var oneMinute = 60e3;
-var useIdle = function (ms, initialState, events) {
-    if (ms === void 0) { ms = oneMinute; }
-    if (initialState === void 0) { initialState = false; }
-    if (events === void 0) { events = useIdle_defaultEvents; }
-    var _a = (0,react.useState)(initialState), state = _a[0], setState = _a[1];
-    (0,react.useEffect)(function () {
-        var mounted = true;
-        var timeout;
-        var localState = state;
-        var set = function (newState) {
-            if (mounted) {
-                localState = newState;
-                setState(newState);
-            }
-        };
-        var onEvent = throttle(50, function () {
-            if (localState) {
-                set(false);
-            }
-            clearTimeout(timeout);
-            timeout = setTimeout(function () { return set(true); }, ms);
-        });
-        var onVisibility = function () {
-            if (!document.hidden) {
-                onEvent();
-            }
-        };
-        for (var i = 0; i < events.length; i++) {
-            on(window, events[i], onEvent);
-        }
-        on(document, 'visibilitychange', onVisibility);
-        timeout = setTimeout(function () { return set(true); }, ms);
-        return function () {
-            mounted = false;
-            for (var i = 0; i < events.length; i++) {
-                off(window, events[i], onEvent);
-            }
-            off(document, 'visibilitychange', onVisibility);
-        };
-    }, [ms, events]);
-    return state;
-};
-/* harmony default export */ const esm_useIdle = (useIdle);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useIntersection.js
-
-var useIntersection = function (ref, options) {
-    var _a = (0,react.useState)(null), intersectionObserverEntry = _a[0], setIntersectionObserverEntry = _a[1];
-    (0,react.useEffect)(function () {
-        if (ref.current && typeof IntersectionObserver === 'function') {
-            var handler = function (entries) {
-                setIntersectionObserverEntry(entries[0]);
-            };
-            var observer_1 = new IntersectionObserver(handler, options);
-            observer_1.observe(ref.current);
-            return function () {
-                setIntersectionObserverEntry(null);
-                observer_1.disconnect();
-            };
-        }
-        return function () { };
-    }, [ref.current, options.threshold, options.root, options.rootMargin]);
-    return intersectionObserverEntry;
-};
-/* harmony default export */ const esm_useIntersection = (useIntersection);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useInterval.js
-
-var useInterval = function (callback, delay) {
-    var savedCallback = (0,react.useRef)(function () { });
-    (0,react.useEffect)(function () {
-        savedCallback.current = callback;
-    });
-    (0,react.useEffect)(function () {
-        if (delay !== null) {
-            var interval_1 = setInterval(function () { return savedCallback.current(); }, delay || 0);
-            return function () { return clearInterval(interval_1); };
-        }
-        return undefined;
-    }, [delay]);
-};
-/* harmony default export */ const esm_useInterval = (useInterval);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useKey.js
-
-
-
-var createKeyPredicate = function (keyFilter) {
-    return typeof keyFilter === 'function'
-        ? keyFilter
-        : typeof keyFilter === 'string'
-            ? function (event) { return event.key === keyFilter; }
-            : keyFilter
-                ? function () { return true; }
-                : function () { return false; };
-};
-var useKey = function (key, fn, opts, deps) {
-    if (fn === void 0) { fn = noop; }
-    if (opts === void 0) { opts = {}; }
-    if (deps === void 0) { deps = [key]; }
-    var _a = opts.event, event = _a === void 0 ? 'keydown' : _a, target = opts.target, options = opts.options;
-    var useMemoHandler = (0,react.useMemo)(function () {
-        var predicate = createKeyPredicate(key);
-        var handler = function (handlerEvent) {
-            if (predicate(handlerEvent)) {
-                return fn(handlerEvent);
-            }
-        };
-        return handler;
-    }, deps);
-    esm_useEvent(event, useMemoHandler, target, options);
-};
-/* harmony default export */ const esm_useKey = (useKey);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/factory/createBreakpoint.js
-
-
-var createBreakpoint = function (breakpoints) {
-    if (breakpoints === void 0) { breakpoints = { laptopL: 1440, laptop: 1024, tablet: 768 }; }
-    return function () {
-        var _a = (0,react.useState)(isBrowser ? window.innerWidth : 0), screen = _a[0], setScreen = _a[1];
-        (0,react.useEffect)(function () {
-            var setSideScreen = function () {
-                setScreen(window.innerWidth);
-            };
-            setSideScreen();
-            on(window, 'resize', setSideScreen);
-            return function () {
-                off(window, 'resize', setSideScreen);
-            };
-        });
-        var sortedBreakpoints = (0,react.useMemo)(function () { return Object.entries(breakpoints).sort(function (a, b) { return (a[1] >= b[1] ? 1 : -1); }); }, [breakpoints]);
-        var result = sortedBreakpoints.reduce(function (acc, _a) {
-            var name = _a[0], width = _a[1];
-            if (screen >= width) {
-                return name;
-            }
-            else {
-                return acc;
-            }
-        }, sortedBreakpoints[0][0]);
-        return result;
-    };
-};
-/* harmony default export */ const factory_createBreakpoint = (createBreakpoint);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useKeyPress.js
-
-
-var useKeyPress = function (keyFilter) {
-    var _a = (0,react.useState)([false, null]), state = _a[0], set = _a[1];
-    esm_useKey(keyFilter, function (event) { return set([true, event]); }, { event: 'keydown' }, [state]);
-    esm_useKey(keyFilter, function (event) { return set([false, event]); }, { event: 'keyup' }, [state]);
-    return state;
-};
-/* harmony default export */ const esm_useKeyPress = (useKeyPress);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useKeyPressEvent.js
-
-
-var useKeyPressEvent = function (key, keydown, keyup, useKeyPress) {
-    if (useKeyPress === void 0) { useKeyPress = esm_useKeyPress; }
-    var _a = useKeyPress(key), pressed = _a[0], event = _a[1];
-    esm_useUpdateEffect(function () {
-        if (!pressed && keyup) {
-            keyup(event);
-        }
-        else if (pressed && keydown) {
-            keydown(event);
-        }
-    }, [pressed]);
-};
-/* harmony default export */ const esm_useKeyPressEvent = (useKeyPressEvent);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useLatest.js
-
-var useLatest = function (value) {
-    var ref = (0,react.useRef)(value);
-    ref.current = value;
-    return ref;
-};
-/* harmony default export */ const esm_useLatest = (useLatest);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useLifecycles.js
-
-var useLifecycles = function (mount, unmount) {
-    (0,react.useEffect)(function () {
-        if (mount) {
-            mount();
-        }
-        return function () {
-            if (unmount) {
-                unmount();
-            }
-        };
-    }, []);
-};
-/* harmony default export */ const esm_useLifecycles = (useLifecycles);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useList.js
-
-
-
-function useList(initialList) {
-    if (initialList === void 0) { initialList = []; }
-    var list = (0,react.useRef)(resolveHookState(initialList));
-    var update = useUpdate();
-    var actions = (0,react.useMemo)(function () {
-        var a = {
-            set: function (newList) {
-                list.current = resolveHookState(newList, list.current);
-                update();
-            },
-            push: function () {
-                var items = [];
-                for (var _i = 0; _i < arguments.length; _i++) {
-                    items[_i] = arguments[_i];
-                }
-                items.length && actions.set(function (curr) { return curr.concat(items); });
-            },
-            updateAt: function (index, item) {
-                actions.set(function (curr) {
-                    var arr = curr.slice();
-                    arr[index] = item;
-                    return arr;
-                });
-            },
-            insertAt: function (index, item) {
-                actions.set(function (curr) {
-                    var arr = curr.slice();
-                    index > arr.length ? (arr[index] = item) : arr.splice(index, 0, item);
-                    return arr;
-                });
-            },
-            update: function (predicate, newItem) {
-                actions.set(function (curr) { return curr.map(function (item) { return (predicate(item, newItem) ? newItem : item); }); });
-            },
-            updateFirst: function (predicate, newItem) {
-                var index = list.current.findIndex(function (item) { return predicate(item, newItem); });
-                index >= 0 && actions.updateAt(index, newItem);
-            },
-            upsert: function (predicate, newItem) {
-                var index = list.current.findIndex(function (item) { return predicate(item, newItem); });
-                index >= 0 ? actions.updateAt(index, newItem) : actions.push(newItem);
-            },
-            sort: function (compareFn) {
-                actions.set(function (curr) { return curr.slice().sort(compareFn); });
-            },
-            filter: function (callbackFn, thisArg) {
-                actions.set(function (curr) { return curr.slice().filter(callbackFn, thisArg); });
-            },
-            removeAt: function (index) {
-                actions.set(function (curr) {
-                    var arr = curr.slice();
-                    arr.splice(index, 1);
-                    return arr;
-                });
-            },
-            clear: function () {
-                actions.set([]);
-            },
-            reset: function () {
-                actions.set(resolveHookState(initialList).slice());
-            },
-        };
-        /**
-         * @deprecated Use removeAt method instead
-         */
-        a.remove = a.removeAt;
-        return a;
-    }, []);
-    return [list.current, actions];
-}
-/* harmony default export */ const esm_useList = (useList);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useLocalStorage.js
-
-
-var useLocalStorage = function (key, initialValue, options) {
-    if (!isBrowser) {
-        return [initialValue, noop, noop];
-    }
-    if (!key) {
-        throw new Error('useLocalStorage key may not be falsy');
-    }
-    var deserializer = options
-        ? options.raw
-            ? function (value) { return value; }
-            : options.deserializer
-        : JSON.parse;
-    // eslint-disable-next-line react-hooks/rules-of-hooks
-    var initializer = (0,react.useRef)(function (key) {
-        try {
-            var serializer = options ? (options.raw ? String : options.serializer) : JSON.stringify;
-            var localStorageValue = localStorage.getItem(key);
-            if (localStorageValue !== null) {
-                return deserializer(localStorageValue);
-            }
-            else {
-                initialValue && localStorage.setItem(key, serializer(initialValue));
-                return initialValue;
-            }
-        }
-        catch (_a) {
-            // If user is in private mode or has storage restriction
-            // localStorage can throw. JSON.parse and JSON.stringify
-            // can throw, too.
-            return initialValue;
-        }
-    });
-    // eslint-disable-next-line react-hooks/rules-of-hooks
-    var _a = (0,react.useState)(function () { return initializer.current(key); }), state = _a[0], setState = _a[1];
-    // eslint-disable-next-line react-hooks/rules-of-hooks
-    (0,react.useLayoutEffect)(function () { return setState(initializer.current(key)); }, [key]);
-    // eslint-disable-next-line react-hooks/rules-of-hooks
-    var set = (0,react.useCallback)(function (valOrFunc) {
-        try {
-            var newState = typeof valOrFunc === 'function' ? valOrFunc(state) : valOrFunc;
-            if (typeof newState === 'undefined')
-                return;
-            var value = void 0;
-            if (options)
-                if (options.raw)
-                    if (typeof newState === 'string')
-                        value = newState;
-                    else
-                        value = JSON.stringify(newState);
-                else if (options.serializer)
-                    value = options.serializer(newState);
-                else
-                    value = JSON.stringify(newState);
-            else
-                value = JSON.stringify(newState);
-            localStorage.setItem(key, value);
-            setState(deserializer(value));
-        }
-        catch (_a) {
-            // If user is in private mode or has storage restriction
-            // localStorage can throw. Also JSON.stringify can throw.
-        }
-    }, [key, setState]);
-    // eslint-disable-next-line react-hooks/rules-of-hooks
-    var remove = (0,react.useCallback)(function () {
-        try {
-            localStorage.removeItem(key);
-            setState(undefined);
-        }
-        catch (_a) {
-            // If user is in private mode or has storage restriction
-            // localStorage can throw.
-        }
-    }, [key, setState]);
-    return [state, set, remove];
-};
-/* harmony default export */ const esm_useLocalStorage = (useLocalStorage);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useLocation.js
-
-
-var patchHistoryMethod = function (method) {
-    var history = window.history;
-    var original = history[method];
-    history[method] = function (state) {
-        var result = original.apply(this, arguments);
-        var event = new Event(method.toLowerCase());
-        event.state = state;
-        window.dispatchEvent(event);
-        return result;
-    };
-};
-if (isBrowser) {
-    patchHistoryMethod('pushState');
-    patchHistoryMethod('replaceState');
-}
-var useLocationServer = function () { return ({
-    trigger: 'load',
-    length: 1,
-}); };
-var buildState = function (trigger) {
-    var _a = window.history, state = _a.state, length = _a.length;
-    var _b = window.location, hash = _b.hash, host = _b.host, hostname = _b.hostname, href = _b.href, origin = _b.origin, pathname = _b.pathname, port = _b.port, protocol = _b.protocol, search = _b.search;
-    return {
-        trigger: trigger,
-        state: state,
-        length: length,
-        hash: hash,
-        host: host,
-        hostname: hostname,
-        href: href,
-        origin: origin,
-        pathname: pathname,
-        port: port,
-        protocol: protocol,
-        search: search,
-    };
-};
-var useLocationBrowser = function () {
-    var _a = (0,react.useState)(buildState('load')), state = _a[0], setState = _a[1];
-    (0,react.useEffect)(function () {
-        var onPopstate = function () { return setState(buildState('popstate')); };
-        var onPushstate = function () { return setState(buildState('pushstate')); };
-        var onReplacestate = function () { return setState(buildState('replacestate')); };
-        on(window, 'popstate', onPopstate);
-        on(window, 'pushstate', onPushstate);
-        on(window, 'replacestate', onReplacestate);
-        return function () {
-            off(window, 'popstate', onPopstate);
-            off(window, 'pushstate', onPushstate);
-            off(window, 'replacestate', onReplacestate);
-        };
-    }, []);
-    return state;
-};
-var hasEventConstructor = typeof Event === 'function';
-/* harmony default export */ const useLocation = (isBrowser && hasEventConstructor ? useLocationBrowser : useLocationServer);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useLockBodyScroll.js
-
-
-function getClosestBody(el) {
-    if (!el) {
-        return null;
-    }
-    else if (el.tagName === 'BODY') {
-        return el;
-    }
-    else if (el.tagName === 'IFRAME') {
-        var document_1 = el.contentDocument;
-        return document_1 ? document_1.body : null;
-    }
-    else if (!el.offsetParent) {
-        return null;
-    }
-    return getClosestBody(el.offsetParent);
-}
-function preventDefault(rawEvent) {
-    var e = rawEvent || window.event;
-    // Do not prevent if the event has more than one touch (usually meaning this is a multi touch gesture like pinch to zoom).
-    if (e.touches.length > 1)
-        return true;
-    if (e.preventDefault)
-        e.preventDefault();
-    return false;
-}
-var isIosDevice = isBrowser &&
-    window.navigator &&
-    window.navigator.platform &&
-    /iP(ad|hone|od)/.test(window.navigator.platform);
-var bodies = new Map();
-var doc = typeof document === 'object' ? document : undefined;
-var documentListenerAdded = false;
-/* harmony default export */ const useLockBodyScroll = (!doc
-    ? function useLockBodyMock(_locked, _elementRef) {
-        if (_locked === void 0) { _locked = true; }
-    }
-    : function useLockBody(locked, elementRef) {
-        if (locked === void 0) { locked = true; }
-        var bodyRef = (0,react.useRef)(doc.body);
-        elementRef = elementRef || bodyRef;
-        var lock = function (body) {
-            var bodyInfo = bodies.get(body);
-            if (!bodyInfo) {
-                bodies.set(body, { counter: 1, initialOverflow: body.style.overflow });
-                if (isIosDevice) {
-                    if (!documentListenerAdded) {
-                        on(document, 'touchmove', preventDefault, { passive: false });
-                        documentListenerAdded = true;
-                    }
-                }
-                else {
-                    body.style.overflow = 'hidden';
-                }
-            }
-            else {
-                bodies.set(body, {
-                    counter: bodyInfo.counter + 1,
-                    initialOverflow: bodyInfo.initialOverflow,
-                });
-            }
-        };
-        var unlock = function (body) {
-            var bodyInfo = bodies.get(body);
-            if (bodyInfo) {
-                if (bodyInfo.counter === 1) {
-                    bodies.delete(body);
-                    if (isIosDevice) {
-                        body.ontouchmove = null;
-                        if (documentListenerAdded) {
-                            off(document, 'touchmove', preventDefault);
-                            documentListenerAdded = false;
-                        }
-                    }
-                    else {
-                        body.style.overflow = bodyInfo.initialOverflow;
-                    }
-                }
-                else {
-                    bodies.set(body, {
-                        counter: bodyInfo.counter - 1,
-                        initialOverflow: bodyInfo.initialOverflow,
-                    });
-                }
-            }
-        };
-        (0,react.useEffect)(function () {
-            var body = getClosestBody(elementRef.current);
-            if (!body) {
-                return;
-            }
-            if (locked) {
-                lock(body);
-            }
-            else {
-                unlock(body);
-            }
-        }, [locked, elementRef.current]);
-        // clean up, on un-mount
-        (0,react.useEffect)(function () {
-            var body = getClosestBody(elementRef.current);
-            if (!body) {
-                return;
-            }
-            return function () {
-                unlock(body);
-            };
-        }, []);
-    });
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useLogger.js
-
-
-
-var useLogger = function (componentName) {
-    var rest = [];
-    for (var _i = 1; _i < arguments.length; _i++) {
-        rest[_i - 1] = arguments[_i];
-    }
-    esm_useEffectOnce(function () {
-        console.log.apply(console, (0,tslib_es6.__spreadArrays)([componentName + " mounted"], rest));
-        return function () { return console.log(componentName + " unmounted"); };
-    });
-    esm_useUpdateEffect(function () {
-        console.log.apply(console, (0,tslib_es6.__spreadArrays)([componentName + " updated"], rest));
-    });
-};
-/* harmony default export */ const esm_useLogger = (useLogger);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useLongPress.js
-
-
-var isTouchEvent = function (ev) {
-    return 'touches' in ev;
-};
-var useLongPress_preventDefault = function (ev) {
-    if (!isTouchEvent(ev))
-        return;
-    if (ev.touches.length < 2 && ev.preventDefault) {
-        ev.preventDefault();
-    }
-};
-var useLongPress = function (callback, _a) {
-    var _b = _a === void 0 ? {} : _a, _c = _b.isPreventDefault, isPreventDefault = _c === void 0 ? true : _c, _d = _b.delay, delay = _d === void 0 ? 300 : _d;
-    var timeout = (0,react.useRef)();
-    var target = (0,react.useRef)();
-    var start = (0,react.useCallback)(function (event) {
-        // prevent ghost click on mobile devices
-        if (isPreventDefault && event.target) {
-            on(event.target, 'touchend', useLongPress_preventDefault, { passive: false });
-            target.current = event.target;
-        }
-        timeout.current = setTimeout(function () { return callback(event); }, delay);
-    }, [callback, delay, isPreventDefault]);
-    var clear = (0,react.useCallback)(function () {
-        // clearTimeout and removeEventListener
-        timeout.current && clearTimeout(timeout.current);
-        if (isPreventDefault && target.current) {
-            off(target.current, 'touchend', useLongPress_preventDefault);
-        }
-    }, [isPreventDefault]);
-    return {
-        onMouseDown: function (e) { return start(e); },
-        onTouchStart: function (e) { return start(e); },
-        onMouseUp: clear,
-        onMouseLeave: clear,
-        onTouchEnd: clear,
-    };
-};
-/* harmony default export */ const esm_useLongPress = (useLongPress);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useMap.js
-
-
-var useMap = function (initialMap) {
-    if (initialMap === void 0) { initialMap = {}; }
-    var _a = (0,react.useState)(initialMap), map = _a[0], set = _a[1];
-    var stableActions = (0,react.useMemo)(function () { return ({
-        set: function (key, entry) {
-            set(function (prevMap) {
-                var _a;
-                return ((0,tslib_es6.__assign)((0,tslib_es6.__assign)({}, prevMap), (_a = {}, _a[key] = entry, _a)));
-            });
-        },
-        setAll: function (newMap) {
-            set(newMap);
-        },
-        remove: function (key) {
-            set(function (prevMap) {
-                var _a = prevMap, _b = key, omit = _a[_b], rest = (0,tslib_es6.__rest)(_a, [typeof _b === "symbol" ? _b : _b + ""]);
-                return rest;
-            });
-        },
-        reset: function () { return set(initialMap); },
-    }); }, [set]);
-    var utils = (0,tslib_es6.__assign)({ get: (0,react.useCallback)(function (key) { return map[key]; }, [map]) }, stableActions);
-    return [map, utils];
-};
-/* harmony default export */ const esm_useMap = (useMap);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useMedia.js
-
-
-var getInitialState = function (query, defaultState) {
-    // Prevent a React hydration mismatch when a default value is provided by not defaulting to window.matchMedia(query).matches.
-    if (defaultState !== undefined) {
-        return defaultState;
-    }
-    if (isBrowser) {
-        return window.matchMedia(query).matches;
-    }
-    // A default value has not been provided, and you are rendering on the server, warn of a possible hydration mismatch when defaulting to false.
-    if (false) {}
-    return false;
-};
-var useMedia = function (query, defaultState) {
-    var _a = (0,react.useState)(getInitialState(query, defaultState)), state = _a[0], setState = _a[1];
-    (0,react.useEffect)(function () {
-        var mounted = true;
-        var mql = window.matchMedia(query);
-        var onChange = function () {
-            if (!mounted) {
-                return;
-            }
-            setState(!!mql.matches);
-        };
-        mql.addListener(onChange);
-        setState(mql.matches);
-        return function () {
-            mounted = false;
-            mql.removeListener(onChange);
-        };
-    }, [query]);
-    return state;
-};
-/* harmony default export */ const esm_useMedia = (useMedia);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useMediaDevices.js
-
-
-var useMediaDevices = function () {
-    var _a = (0,react.useState)({}), state = _a[0], setState = _a[1];
-    (0,react.useEffect)(function () {
-        var mounted = true;
-        var onChange = function () {
-            navigator.mediaDevices
-                .enumerateDevices()
-                .then(function (devices) {
-                if (mounted) {
-                    setState({
-                        devices: devices.map(function (_a) {
-                            var deviceId = _a.deviceId, groupId = _a.groupId, kind = _a.kind, label = _a.label;
-                            return ({
-                                deviceId: deviceId,
-                                groupId: groupId,
-                                kind: kind,
-                                label: label,
-                            });
-                        }),
-                    });
-                }
-            })
-                .catch(noop);
-        };
-        on(navigator.mediaDevices, 'devicechange', onChange);
-        onChange();
-        return function () {
-            mounted = false;
-            off(navigator.mediaDevices, 'devicechange', onChange);
-        };
-    }, []);
-    return state;
-};
-var useMediaDevicesMock = function () { return ({}); };
-/* harmony default export */ const esm_useMediaDevices = (isNavigator && !!navigator.mediaDevices ? useMediaDevices : useMediaDevicesMock);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useMediatedState.js
-
-function useMediatedState(mediator, initialState) {
-    var mediatorFn = (0,react.useRef)(mediator);
-    var _a = (0,react.useState)(initialState), state = _a[0], setMediatedState = _a[1];
-    var setState = (0,react.useCallback)(function (newState) {
-        if (mediatorFn.current.length === 2) {
-            mediatorFn.current(newState, setMediatedState);
-        }
-        else {
-            setMediatedState(mediatorFn.current(newState));
-        }
-    }, [state]);
-    return [state, setState];
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useMethods.js
-
-var useMethods = function (createMethods, initialState) {
-    var reducer = (0,react.useMemo)(function () { return function (reducerState, action) {
-        var _a;
-        return (_a = createMethods(reducerState))[action.type].apply(_a, action.payload);
-    }; }, [createMethods]);
-    var _a = (0,react.useReducer)(reducer, initialState), state = _a[0], dispatch = _a[1];
-    var wrappedMethods = (0,react.useMemo)(function () {
-        var actionTypes = Object.keys(createMethods(initialState));
-        return actionTypes.reduce(function (acc, type) {
-            acc[type] = function () {
-                var payload = [];
-                for (var _i = 0; _i < arguments.length; _i++) {
-                    payload[_i] = arguments[_i];
-                }
-                return dispatch({ type: type, payload: payload });
-            };
-            return acc;
-        }, {});
-    }, [createMethods, initialState]);
-    return [state, wrappedMethods];
-};
-/* harmony default export */ const esm_useMethods = (useMethods);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useMotion.js
-
-
-var defaultState = {
-    acceleration: {
-        x: null,
-        y: null,
-        z: null,
-    },
-    accelerationIncludingGravity: {
-        x: null,
-        y: null,
-        z: null,
-    },
-    rotationRate: {
-        alpha: null,
-        beta: null,
-        gamma: null,
-    },
-    interval: 16,
-};
-var useMotion = function (initialState) {
-    if (initialState === void 0) { initialState = defaultState; }
-    var _a = (0,react.useState)(initialState), state = _a[0], setState = _a[1];
-    (0,react.useEffect)(function () {
-        var handler = function (event) {
-            var acceleration = event.acceleration, accelerationIncludingGravity = event.accelerationIncludingGravity, rotationRate = event.rotationRate, interval = event.interval;
-            setState({
-                acceleration: {
-                    x: acceleration.x,
-                    y: acceleration.y,
-                    z: acceleration.z,
-                },
-                accelerationIncludingGravity: {
-                    x: accelerationIncludingGravity.x,
-                    y: accelerationIncludingGravity.y,
-                    z: accelerationIncludingGravity.z,
-                },
-                rotationRate: {
-                    alpha: rotationRate.alpha,
-                    beta: rotationRate.beta,
-                    gamma: rotationRate.gamma,
-                },
-                interval: interval,
-            });
-        };
-        on(window, 'devicemotion', handler);
-        return function () {
-            off(window, 'devicemotion', handler);
-        };
-    }, []);
-    return state;
-};
-/* harmony default export */ const esm_useMotion = (useMotion);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useMount.js
-
-var useMount = function (fn) {
-    esm_useEffectOnce(function () {
-        fn();
-    });
-};
-/* harmony default export */ const esm_useMount = (useMount);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useUnmount.js
-
-
-var useUnmount = function (fn) {
-    var fnRef = (0,react.useRef)(fn);
-    // update the ref each render so if it change the newest callback will be invoked
-    fnRef.current = fn;
-    esm_useEffectOnce(function () { return function () { return fnRef.current(); }; });
-};
-/* harmony default export */ const esm_useUnmount = (useUnmount);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useRafState.js
-
-
-var useRafState = function (initialState) {
-    var frame = (0,react.useRef)(0);
-    var _a = (0,react.useState)(initialState), state = _a[0], setState = _a[1];
-    var setRafState = (0,react.useCallback)(function (value) {
-        cancelAnimationFrame(frame.current);
-        frame.current = requestAnimationFrame(function () {
-            setState(value);
-        });
-    }, []);
-    esm_useUnmount(function () {
-        cancelAnimationFrame(frame.current);
-    });
-    return [state, setRafState];
-};
-/* harmony default export */ const esm_useRafState = (useRafState);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useMouse.js
-
-
-
-var useMouse = function (ref) {
-    if (false) {}
-    var _a = esm_useRafState({
-        docX: 0,
-        docY: 0,
-        posX: 0,
-        posY: 0,
-        elX: 0,
-        elY: 0,
-        elH: 0,
-        elW: 0,
-    }), state = _a[0], setState = _a[1];
-    (0,react.useEffect)(function () {
-        var moveHandler = function (event) {
-            if (ref && ref.current) {
-                var _a = ref.current.getBoundingClientRect(), left = _a.left, top_1 = _a.top, elW = _a.width, elH = _a.height;
-                var posX = left + window.pageXOffset;
-                var posY = top_1 + window.pageYOffset;
-                var elX = event.pageX - posX;
-                var elY = event.pageY - posY;
-                setState({
-                    docX: event.pageX,
-                    docY: event.pageY,
-                    posX: posX,
-                    posY: posY,
-                    elX: elX,
-                    elY: elY,
-                    elH: elH,
-                    elW: elW,
-                });
-            }
-        };
-        on(document, 'mousemove', moveHandler);
-        return function () {
-            off(document, 'mousemove', moveHandler);
-        };
-    }, [ref]);
-    return state;
-};
-/* harmony default export */ const esm_useMouse = (useMouse);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useMouseHovered.js
-
-
-var nullRef = { current: null };
-var useMouseHovered = function (ref, options) {
-    if (options === void 0) { options = {}; }
-    var whenHovered = !!options.whenHovered;
-    var bound = !!options.bound;
-    var isHovered = esm_useHoverDirty(ref, whenHovered);
-    var state = esm_useMouse(whenHovered && !isHovered ? nullRef : ref);
-    if (bound) {
-        state.elX = Math.max(0, Math.min(state.elX, state.elW));
-        state.elY = Math.max(0, Math.min(state.elY, state.elH));
-    }
-    return state;
-};
-/* harmony default export */ const esm_useMouseHovered = (useMouseHovered);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useMouseWheel.js
-
-
-/* harmony default export */ const useMouseWheel = (function () {
-    var _a = (0,react.useState)(0), mouseWheelScrolled = _a[0], setMouseWheelScrolled = _a[1];
-    (0,react.useEffect)(function () {
-        var updateScroll = function (e) {
-            setMouseWheelScrolled(e.deltaY + mouseWheelScrolled);
-        };
-        on(window, 'wheel', updateScroll, false);
-        return function () { return off(window, 'wheel', updateScroll); };
-    });
-    return mouseWheelScrolled;
-});
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useNetworkState.js
-
-
-var useNetworkState_nav = isNavigator ? navigator : undefined;
-var conn = useNetworkState_nav && (useNetworkState_nav.connection || useNetworkState_nav.mozConnection || useNetworkState_nav.webkitConnection);
-function getConnectionState(previousState) {
-    var online = useNetworkState_nav === null || useNetworkState_nav === void 0 ? void 0 : useNetworkState_nav.onLine;
-    var previousOnline = previousState === null || previousState === void 0 ? void 0 : previousState.online;
-    return {
-        online: online,
-        previous: previousOnline,
-        since: online !== previousOnline ? new Date() : previousState === null || previousState === void 0 ? void 0 : previousState.since,
-        downlink: conn === null || conn === void 0 ? void 0 : conn.downlink,
-        downlinkMax: conn === null || conn === void 0 ? void 0 : conn.downlinkMax,
-        effectiveType: conn === null || conn === void 0 ? void 0 : conn.effectiveType,
-        rtt: conn === null || conn === void 0 ? void 0 : conn.rtt,
-        saveData: conn === null || conn === void 0 ? void 0 : conn.saveData,
-        type: conn === null || conn === void 0 ? void 0 : conn.type,
-    };
-}
-function useNetworkState(initialState) {
-    var _a = (0,react.useState)(initialState !== null && initialState !== void 0 ? initialState : getConnectionState), state = _a[0], setState = _a[1];
-    (0,react.useEffect)(function () {
-        var handleStateChange = function () {
-            setState(getConnectionState);
-        };
-        on(window, 'online', handleStateChange, { passive: true });
-        on(window, 'offline', handleStateChange, { passive: true });
-        if (conn) {
-            on(conn, 'change', handleStateChange, { passive: true });
-        }
-        return function () {
-            off(window, 'online', handleStateChange);
-            off(window, 'offline', handleStateChange);
-            if (conn) {
-                off(conn, 'change', handleStateChange);
-            }
-        };
-    }, []);
-    return state;
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useNumber.js
-
-/* harmony default export */ const useNumber = (useCounter);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useObservable.js
-
-
-function useObservable(observable$, initialValue) {
-    var _a = (0,react.useState)(initialValue), value = _a[0], update = _a[1];
-    esm_useIsomorphicLayoutEffect(function () {
-        var s = observable$.subscribe(update);
-        return function () { return s.unsubscribe(); };
-    }, [observable$]);
-    return value;
-}
-/* harmony default export */ const esm_useObservable = (useObservable);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useOrientation.js
-
-
-var useOrientation_defaultState = {
-    angle: 0,
-    type: 'landscape-primary',
-};
-var useOrientation = function (initialState) {
-    if (initialState === void 0) { initialState = useOrientation_defaultState; }
-    var _a = (0,react.useState)(initialState), state = _a[0], setState = _a[1];
-    (0,react.useEffect)(function () {
-        var screen = window.screen;
-        var mounted = true;
-        var onChange = function () {
-            if (mounted) {
-                var orientation_1 = screen.orientation;
-                if (orientation_1) {
-                    var angle = orientation_1.angle, type = orientation_1.type;
-                    setState({ angle: angle, type: type });
-                }
-                else if (window.orientation !== undefined) {
-                    setState({
-                        angle: typeof window.orientation === 'number' ? window.orientation : 0,
-                        type: '',
-                    });
-                }
-                else {
-                    setState(initialState);
-                }
-            }
-        };
-        on(window, 'orientationchange', onChange);
-        onChange();
-        return function () {
-            mounted = false;
-            off(window, 'orientationchange', onChange);
-        };
-    }, []);
-    return state;
-};
-/* harmony default export */ const esm_useOrientation = (useOrientation);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/usePageLeave.js
-
-
-var usePageLeave = function (onPageLeave, args) {
-    if (args === void 0) { args = []; }
-    (0,react.useEffect)(function () {
-        if (!onPageLeave) {
-            return;
-        }
-        var handler = function (event) {
-            event = event ? event : window.event;
-            var from = event.relatedTarget || event.toElement;
-            if (!from || from.nodeName === 'HTML') {
-                onPageLeave();
-            }
-        };
-        on(document, 'mouseout', handler);
-        return function () {
-            off(document, 'mouseout', handler);
-        };
-    }, args);
-};
-/* harmony default export */ const esm_usePageLeave = (usePageLeave);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/usePermission.js
-
-
-// const usePermission = <T extends PermissionDescriptor>(permissionDesc: T): IState => {
-var usePermission = function (permissionDesc) {
-    var _a = (0,react.useState)(''), state = _a[0], setState = _a[1];
-    (0,react.useEffect)(function () {
-        var mounted = true;
-        var permissionStatus = null;
-        var onChange = function () {
-            if (!mounted) {
-                return;
-            }
-            setState(function () { var _a; return (_a = permissionStatus === null || permissionStatus === void 0 ? void 0 : permissionStatus.state) !== null && _a !== void 0 ? _a : ''; });
-        };
-        navigator.permissions
-            .query(permissionDesc)
-            .then(function (status) {
-            permissionStatus = status;
-            on(permissionStatus, 'change', onChange);
-            onChange();
-        })
-            .catch(noop);
-        return function () {
-            permissionStatus && off(permissionStatus, 'change', onChange);
-            mounted = false;
-            permissionStatus = null;
-        };
-    }, [permissionDesc]);
-    return state;
-};
-/* harmony default export */ const esm_usePermission = (usePermission);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/usePrevious.js
-
-function usePrevious(state) {
-    var ref = (0,react.useRef)();
-    (0,react.useEffect)(function () {
-        ref.current = state;
-    });
-    return ref.current;
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/usePreviousDistinct.js
-
-
-var strictEquals = function (prev, next) { return prev === next; };
-function usePreviousDistinct(value, compare) {
-    if (compare === void 0) { compare = strictEquals; }
-    var prevRef = (0,react.useRef)();
-    var curRef = (0,react.useRef)(value);
-    var isFirstMount = useFirstMountState();
-    if (!isFirstMount && !compare(curRef.current, value)) {
-        prevRef.current = curRef.current;
-        curRef.current = value;
-    }
-    return prevRef.current;
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/usePromise.js
-
-
-var usePromise = function () {
-    var isMounted = useMountedState();
-    return (0,react.useCallback)(function (promise) {
-        return new Promise(function (resolve, reject) {
-            var onValue = function (value) {
-                isMounted() && resolve(value);
-            };
-            var onError = function (error) {
-                isMounted() && reject(error);
-            };
-            promise.then(onValue, onError);
-        });
-    }, []);
-};
-/* harmony default export */ const esm_usePromise = (usePromise);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useQueue.js
-
-
-var useQueue = function (initialValue) {
-    if (initialValue === void 0) { initialValue = []; }
-    var _a = (0,react.useState)(initialValue), state = _a[0], set = _a[1];
-    return {
-        add: function (value) {
-            set(function (queue) { return (0,tslib_es6.__spreadArrays)(queue, [value]); });
-        },
-        remove: function () {
-            var result;
-            set(function (_a) {
-                var first = _a[0], rest = _a.slice(1);
-                result = first;
-                return rest;
-            });
-            return result;
-        },
-        get first() {
-            return state[0];
-        },
-        get last() {
-            return state[state.length - 1];
-        },
-        get size() {
-            return state.length;
-        },
-    };
-};
-/* harmony default export */ const esm_useQueue = (useQueue);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useRaf.js
-
-
-var useRaf = function (ms, delay) {
-    if (ms === void 0) { ms = 1e12; }
-    if (delay === void 0) { delay = 0; }
-    var _a = (0,react.useState)(0), elapsed = _a[0], set = _a[1];
-    esm_useIsomorphicLayoutEffect(function () {
-        var raf;
-        var timerStop;
-        var start;
-        var onFrame = function () {
-            var time = Math.min(1, (Date.now() - start) / ms);
-            set(time);
-            loop();
-        };
-        var loop = function () {
-            raf = requestAnimationFrame(onFrame);
-        };
-        var onStart = function () {
-            timerStop = setTimeout(function () {
-                cancelAnimationFrame(raf);
-                set(1);
-            }, ms);
-            start = Date.now();
-            loop();
-        };
-        var timerDelay = setTimeout(onStart, delay);
-        return function () {
-            clearTimeout(timerStop);
-            clearTimeout(timerDelay);
-            cancelAnimationFrame(raf);
-        };
-    }, [ms, delay]);
-    return elapsed;
-};
-/* harmony default export */ const esm_useRaf = (useRaf);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useRafLoop.js
-
-function useRafLoop(callback, initiallyActive) {
-    if (initiallyActive === void 0) { initiallyActive = true; }
-    var raf = (0,react.useRef)(null);
-    var rafActivity = (0,react.useRef)(false);
-    var rafCallback = (0,react.useRef)(callback);
-    rafCallback.current = callback;
-    var step = (0,react.useCallback)(function (time) {
-        if (rafActivity.current) {
-            rafCallback.current(time);
-            raf.current = requestAnimationFrame(step);
-        }
-    }, []);
-    var result = (0,react.useMemo)(function () {
-        return [
-            function () {
-                // stop
-                if (rafActivity.current) {
-                    rafActivity.current = false;
-                    raf.current && cancelAnimationFrame(raf.current);
-                }
-            },
-            function () {
-                // start
-                if (!rafActivity.current) {
-                    rafActivity.current = true;
-                    raf.current = requestAnimationFrame(step);
-                }
-            },
-            function () { return rafActivity.current; },
-        ];
-    }, []);
-    (0,react.useEffect)(function () {
-        if (initiallyActive) {
-            result[1]();
-        }
-        return result[0];
-        // eslint-disable-next-line react-hooks/exhaustive-deps
-    }, []);
-    return result;
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useSearchParam.js
-
-
-var getValue = function (search, param) { return new URLSearchParams(search).get(param); };
-var useSearchParam = function (param) {
-    var location = window.location;
-    var _a = (0,react.useState)(function () { return getValue(location.search, param); }), value = _a[0], setValue = _a[1];
-    (0,react.useEffect)(function () {
-        var onChange = function () {
-            setValue(getValue(location.search, param));
-        };
-        on(window, 'popstate', onChange);
-        on(window, 'pushstate', onChange);
-        on(window, 'replacestate', onChange);
-        return function () {
-            off(window, 'popstate', onChange);
-            off(window, 'pushstate', onChange);
-            off(window, 'replacestate', onChange);
-        };
-    }, []);
-    return value;
-};
-var useSearchParamServer = function () { return null; };
-/* harmony default export */ const esm_useSearchParam = (isBrowser ? useSearchParam : useSearchParamServer);
-
-// EXTERNAL MODULE: ./node_modules/react-universal-interface/lib/index.js
-var lib = __webpack_require__(96260);
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useScratch.js
-
-
-
-
-
-var useScratch = function (params) {
-    if (params === void 0) { params = {}; }
-    var disabled = params.disabled;
-    var paramsRef = esm_useLatest(params);
-    var _a = (0,react.useState)({ isScratching: false }), state = _a[0], setState = _a[1];
-    var refState = (0,react.useRef)(state);
-    var refScratching = (0,react.useRef)(false);
-    var refAnimationFrame = (0,react.useRef)(null);
-    var _b = (0,react.useState)(null), el = _b[0], setEl = _b[1];
-    (0,react.useEffect)(function () {
-        if (disabled)
-            return;
-        if (!el)
-            return;
-        var onMoveEvent = function (docX, docY) {
-            cancelAnimationFrame(refAnimationFrame.current);
-            refAnimationFrame.current = requestAnimationFrame(function () {
-                var _a = el.getBoundingClientRect(), left = _a.left, top = _a.top;
-                var elX = left + window.scrollX;
-                var elY = top + window.scrollY;
-                var x = docX - elX;
-                var y = docY - elY;
-                setState(function (oldState) {
-                    var newState = (0,tslib_es6.__assign)((0,tslib_es6.__assign)({}, oldState), { dx: x - (oldState.x || 0), dy: y - (oldState.y || 0), end: Date.now(), isScratching: true });
-                    refState.current = newState;
-                    (paramsRef.current.onScratch || noop)(newState);
-                    return newState;
-                });
-            });
-        };
-        var onMouseMove = function (event) {
-            onMoveEvent(event.pageX, event.pageY);
-        };
-        var onTouchMove = function (event) {
-            onMoveEvent(event.changedTouches[0].pageX, event.changedTouches[0].pageY);
-        };
-        var onMouseUp;
-        var onTouchEnd;
-        var stopScratching = function () {
-            if (!refScratching.current)
-                return;
-            refScratching.current = false;
-            refState.current = (0,tslib_es6.__assign)((0,tslib_es6.__assign)({}, refState.current), { isScratching: false });
-            (paramsRef.current.onScratchEnd || noop)(refState.current);
-            setState({ isScratching: false });
-            off(window, 'mousemove', onMouseMove);
-            off(window, 'touchmove', onTouchMove);
-            off(window, 'mouseup', onMouseUp);
-            off(window, 'touchend', onTouchEnd);
-        };
-        onMouseUp = stopScratching;
-        onTouchEnd = stopScratching;
-        var startScratching = function (docX, docY) {
-            if (!refScratching.current)
-                return;
-            var _a = el.getBoundingClientRect(), left = _a.left, top = _a.top;
-            var elX = left + window.scrollX;
-            var elY = top + window.scrollY;
-            var x = docX - elX;
-            var y = docY - elY;
-            var time = Date.now();
-            var newState = {
-                isScratching: true,
-                start: time,
-                end: time,
-                docX: docX,
-                docY: docY,
-                x: x,
-                y: y,
-                dx: 0,
-                dy: 0,
-                elH: el.offsetHeight,
-                elW: el.offsetWidth,
-                elX: elX,
-                elY: elY,
-            };
-            refState.current = newState;
-            (paramsRef.current.onScratchStart || noop)(newState);
-            setState(newState);
-            on(window, 'mousemove', onMouseMove);
-            on(window, 'touchmove', onTouchMove);
-            on(window, 'mouseup', onMouseUp);
-            on(window, 'touchend', onTouchEnd);
-        };
-        var onMouseDown = function (event) {
-            refScratching.current = true;
-            startScratching(event.pageX, event.pageY);
-        };
-        var onTouchStart = function (event) {
-            refScratching.current = true;
-            startScratching(event.changedTouches[0].pageX, event.changedTouches[0].pageY);
-        };
-        on(el, 'mousedown', onMouseDown);
-        on(el, 'touchstart', onTouchStart);
-        return function () {
-            off(el, 'mousedown', onMouseDown);
-            off(el, 'touchstart', onTouchStart);
-            off(window, 'mousemove', onMouseMove);
-            off(window, 'touchmove', onTouchMove);
-            off(window, 'mouseup', onMouseUp);
-            off(window, 'touchend', onTouchEnd);
-            if (refAnimationFrame.current)
-                cancelAnimationFrame(refAnimationFrame.current);
-            refAnimationFrame.current = null;
-            refScratching.current = false;
-            refState.current = { isScratching: false };
-            setState(refState.current);
-        };
-    }, [el, disabled, paramsRef]);
-    return [setEl, state];
-};
-var ScratchSensor = function (props) {
-    var children = props.children, params = __rest(props, ["children"]);
-    var _a = useScratch(params), ref = _a[0], state = _a[1];
-    var element = render(props, state);
-    return cloneElement(element, __assign(__assign({}, element.props), { ref: function (el) {
-            if (element.props.ref) {
-                if (typeof element.props.ref === 'object')
-                    element.props.ref.current = el;
-                if (typeof element.props.ref === 'function')
-                    element.props.ref(el);
-            }
-            ref(el);
-        } }));
-};
-/* harmony default export */ const esm_useScratch = (useScratch);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useScroll.js
-
-
-
-var useScroll = function (ref) {
-    if (false) {}
-    var _a = esm_useRafState({
-        x: 0,
-        y: 0,
-    }), state = _a[0], setState = _a[1];
-    (0,react.useEffect)(function () {
-        var handler = function () {
-            if (ref.current) {
-                setState({
-                    x: ref.current.scrollLeft,
-                    y: ref.current.scrollTop,
-                });
-            }
-        };
-        if (ref.current) {
-            on(ref.current, 'scroll', handler, {
-                capture: false,
-                passive: true,
-            });
-        }
-        return function () {
-            if (ref.current) {
-                off(ref.current, 'scroll', handler);
-            }
-        };
-    }, [ref]);
-    return state;
-};
-/* harmony default export */ const esm_useScroll = (useScroll);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useScrolling.js
-
-
-var useScrolling = function (ref) {
-    var _a = (0,react.useState)(false), scrolling = _a[0], setScrolling = _a[1];
-    (0,react.useEffect)(function () {
-        if (ref.current) {
-            var scrollingTimeout_1;
-            var handleScrollEnd_1 = function () {
-                setScrolling(false);
-            };
-            var handleScroll_1 = function () {
-                setScrolling(true);
-                clearTimeout(scrollingTimeout_1);
-                scrollingTimeout_1 = setTimeout(function () { return handleScrollEnd_1(); }, 150);
-            };
-            on(ref.current, 'scroll', handleScroll_1, false);
-            return function () {
-                if (ref.current) {
-                    off(ref.current, 'scroll', handleScroll_1, false);
-                }
-            };
-        }
-        return function () { };
-    }, [ref]);
-    return scrolling;
-};
-/* harmony default export */ const esm_useScrolling = (useScrolling);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useSessionStorage.js
-
-
-var useSessionStorage = function (key, initialValue, raw) {
-    if (!isBrowser) {
-        return [initialValue, function () { }];
-    }
-    // eslint-disable-next-line react-hooks/rules-of-hooks
-    var _a = (0,react.useState)(function () {
-        try {
-            var sessionStorageValue = sessionStorage.getItem(key);
-            if (typeof sessionStorageValue !== 'string') {
-                sessionStorage.setItem(key, raw ? String(initialValue) : JSON.stringify(initialValue));
-                return initialValue;
-            }
-            else {
-                return raw ? sessionStorageValue : JSON.parse(sessionStorageValue || 'null');
-            }
-        }
-        catch (_a) {
-            // If user is in private mode or has storage restriction
-            // sessionStorage can throw. JSON.parse and JSON.stringify
-            // can throw, too.
-            return initialValue;
-        }
-    }), state = _a[0], setState = _a[1];
-    // eslint-disable-next-line react-hooks/rules-of-hooks
-    (0,react.useEffect)(function () {
-        try {
-            var serializedState = raw ? String(state) : JSON.stringify(state);
-            sessionStorage.setItem(key, serializedState);
-        }
-        catch (_a) {
-            // If user is in private mode or has storage restriction
-            // sessionStorage can throw. Also JSON.stringify can throw.
-        }
-    });
-    return [state, setState];
-};
-/* harmony default export */ const esm_useSessionStorage = (useSessionStorage);
-
-// EXTERNAL MODULE: ./node_modules/fast-shallow-equal/index.js
-var fast_shallow_equal = __webpack_require__(99376);
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useShallowCompareEffect.js
-
-
-var useShallowCompareEffect_isPrimitive = function (val) { return val !== Object(val); };
-var shallowEqualDepsList = function (prevDeps, nextDeps) {
-    return prevDeps.every(function (dep, index) { return (0,fast_shallow_equal/* equal */.D)(dep, nextDeps[index]); });
-};
-var useShallowCompareEffect = function (effect, deps) {
-    if (false) {}
-    esm_useCustomCompareEffect(effect, deps, shallowEqualDepsList);
-};
-/* harmony default export */ const esm_useShallowCompareEffect = (useShallowCompareEffect);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useSize.js
-
-
-
-var useSize_useState = react.useState, useEffect = react.useEffect, useRef = react.useRef;
-var DRAF = function (callback) { return setTimeout(callback, 35); };
-var useSize = function (element, _a) {
-    var _b = _a === void 0 ? {} : _a, _c = _b.width, width = _c === void 0 ? Infinity : _c, _d = _b.height, height = _d === void 0 ? Infinity : _d;
-    if (!isBrowser) {
-        return [
-            typeof element === 'function' ? element({ width: width, height: height }) : element,
-            { width: width, height: height },
-        ];
-    }
-    // eslint-disable-next-line react-hooks/rules-of-hooks
-    var _e = useSize_useState({ width: width, height: height }), state = _e[0], setState = _e[1];
-    if (typeof element === 'function') {
-        element = element(state);
-    }
-    var style = element.props.style || {};
-    // eslint-disable-next-line react-hooks/rules-of-hooks
-    var ref = useRef(null);
-    var window = null;
-    var setSize = function () {
-        var iframe = ref.current;
-        var size = iframe
-            ? {
-                width: iframe.offsetWidth,
-                height: iframe.offsetHeight,
-            }
-            : { width: width, height: height };
-        setState(size);
-    };
-    var onWindow = function (windowToListenOn) {
-        on(windowToListenOn, 'resize', setSize);
-        DRAF(setSize);
-    };
-    // eslint-disable-next-line react-hooks/rules-of-hooks
-    useEffect(function () {
-        var iframe = ref.current;
-        if (!iframe) {
-            // iframe will be undefined if component is already unmounted
-            return;
-        }
-        if (iframe.contentWindow) {
-            window = iframe.contentWindow;
-            onWindow(window);
-        }
-        else {
-            var onLoad_1 = function () {
-                on(iframe, 'load', onLoad_1);
-                window = iframe.contentWindow;
-                onWindow(window);
-            };
-            off(iframe, 'load', onLoad_1);
-        }
-        return function () {
-            if (window && window.removeEventListener) {
-                off(window, 'resize', setSize);
-            }
-        };
-    }, []);
-    style.position = 'relative';
-    var sized = react.cloneElement.apply(react_namespaceObject, (0,tslib_es6.__spreadArrays)([element, { style: style }], (0,tslib_es6.__spreadArrays)([
-        react.createElement('iframe', {
-            ref: ref,
-            style: {
-                background: 'transparent',
-                border: 'none',
-                height: '100%',
-                left: 0,
-                position: 'absolute',
-                top: 0,
-                width: '100%',
-                zIndex: -1,
-            },
-        })
-    ], react.Children.toArray(element.props.children))));
-    return [sized, state];
-};
-/* harmony default export */ const esm_useSize = (useSize);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useSlider.js
-
-
-
-
-var useSlider = function (ref, options) {
-    if (options === void 0) { options = {}; }
-    var isMounted = useMountedState();
-    var isSliding = (0,react.useRef)(false);
-    var valueRef = (0,react.useRef)(0);
-    var frame = (0,react.useRef)(0);
-    var _a = esm_useSetState({
-        isSliding: false,
-        value: 0,
-    }), state = _a[0], setState = _a[1];
-    valueRef.current = state.value;
-    (0,react.useEffect)(function () {
-        if (isBrowser) {
-            var styles = options.styles === undefined ? true : options.styles;
-            var reverse_1 = options.reverse === undefined ? false : options.reverse;
-            if (ref.current && styles) {
-                ref.current.style.userSelect = 'none';
-            }
-            var startScrubbing_1 = function () {
-                if (!isSliding.current && isMounted()) {
-                    (options.onScrubStart || noop)();
-                    isSliding.current = true;
-                    setState({ isSliding: true });
-                    bindEvents_1();
-                }
-            };
-            var stopScrubbing_1 = function () {
-                if (isSliding.current && isMounted()) {
-                    (options.onScrubStop || noop)(valueRef.current);
-                    isSliding.current = false;
-                    setState({ isSliding: false });
-                    unbindEvents_1();
-                }
-            };
-            var onMouseDown_1 = function (event) {
-                startScrubbing_1();
-                onMouseMove_1(event);
-            };
-            var onMouseMove_1 = options.vertical
-                ? function (event) { return onScrub_1(event.clientY); }
-                : function (event) { return onScrub_1(event.clientX); };
-            var onTouchStart_1 = function (event) {
-                startScrubbing_1();
-                onTouchMove_1(event);
-            };
-            var onTouchMove_1 = options.vertical
-                ? function (event) { return onScrub_1(event.changedTouches[0].clientY); }
-                : function (event) { return onScrub_1(event.changedTouches[0].clientX); };
-            var bindEvents_1 = function () {
-                on(document, 'mousemove', onMouseMove_1);
-                on(document, 'mouseup', stopScrubbing_1);
-                on(document, 'touchmove', onTouchMove_1);
-                on(document, 'touchend', stopScrubbing_1);
-            };
-            var unbindEvents_1 = function () {
-                off(document, 'mousemove', onMouseMove_1);
-                off(document, 'mouseup', stopScrubbing_1);
-                off(document, 'touchmove', onTouchMove_1);
-                off(document, 'touchend', stopScrubbing_1);
-            };
-            var onScrub_1 = function (clientXY) {
-                cancelAnimationFrame(frame.current);
-                frame.current = requestAnimationFrame(function () {
-                    if (isMounted() && ref.current) {
-                        var rect = ref.current.getBoundingClientRect();
-                        var pos = options.vertical ? rect.top : rect.left;
-                        var length_1 = options.vertical ? rect.height : rect.width;
-                        // Prevent returning 0 when element is hidden by CSS
-                        if (!length_1) {
-                            return;
-                        }
-                        var value = (clientXY - pos) / length_1;
-                        if (value > 1) {
-                            value = 1;
-                        }
-                        else if (value < 0) {
-                            value = 0;
-                        }
-                        if (reverse_1) {
-                            value = 1 - value;
-                        }
-                        setState({
-                            value: value,
-                        });
-                        (options.onScrub || noop)(value);
-                    }
-                });
-            };
-            on(ref.current, 'mousedown', onMouseDown_1);
-            on(ref.current, 'touchstart', onTouchStart_1);
-            return function () {
-                off(ref.current, 'mousedown', onMouseDown_1);
-                off(ref.current, 'touchstart', onTouchStart_1);
-            };
-        }
-        else {
-            return undefined;
-        }
-    }, [ref, options.vertical]);
-    return state;
-};
-/* harmony default export */ const esm_useSlider = (useSlider);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useSpeech.js
-
-
-var Status;
-(function (Status) {
-    Status[Status["init"] = 0] = "init";
-    Status[Status["play"] = 1] = "play";
-    Status[Status["pause"] = 2] = "pause";
-    Status[Status["end"] = 3] = "end";
-})(Status || (Status = {}));
-var useSpeech = function (text, options) {
-    var mounted = (0,react.useRef)(false);
-    var _a = (0,react.useState)(function () {
-        var _a = options.voice || {}, _b = _a.lang, lang = _b === void 0 ? 'default' : _b, _c = _a.name, name = _c === void 0 ? '' : _c;
-        return {
-            isPlaying: false,
-            status: Status[Status.init],
-            lang: options.lang || 'default',
-            voiceInfo: { lang: lang, name: name },
-            rate: options.rate || 1,
-            pitch: options.pitch || 1,
-            volume: options.volume || 1,
-        };
-    }), state = _a[0], setState = _a[1];
-    var handlePlay = (0,react.useCallback)(function () {
-        if (!mounted.current) {
-            return;
-        }
-        setState(function (preState) {
-            return (0,tslib_es6.__assign)((0,tslib_es6.__assign)({}, preState), { isPlaying: true, status: Status[Status.play] });
-        });
-    }, []);
-    var handlePause = (0,react.useCallback)(function () {
-        if (!mounted.current) {
-            return;
-        }
-        setState(function (preState) {
-            return (0,tslib_es6.__assign)((0,tslib_es6.__assign)({}, preState), { isPlaying: false, status: Status[Status.pause] });
-        });
-    }, []);
-    var handleEnd = (0,react.useCallback)(function () {
-        if (!mounted.current) {
-            return;
-        }
-        setState(function (preState) {
-            return (0,tslib_es6.__assign)((0,tslib_es6.__assign)({}, preState), { isPlaying: false, status: Status[Status.end] });
-        });
-    }, []);
-    (0,react.useEffect)(function () {
-        mounted.current = true;
-        var utterance = new SpeechSynthesisUtterance(text);
-        options.lang && (utterance.lang = options.lang);
-        options.voice && (utterance.voice = options.voice);
-        utterance.rate = options.rate || 1;
-        utterance.pitch = options.pitch || 1;
-        utterance.volume = options.volume || 1;
-        utterance.onstart = handlePlay;
-        utterance.onpause = handlePause;
-        utterance.onresume = handlePlay;
-        utterance.onend = handleEnd;
-        window.speechSynthesis.speak(utterance);
-        return function () {
-            mounted.current = false;
-        };
-    }, []);
-    return state;
-};
-/* harmony default export */ const esm_useSpeech = (useSpeech);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useStartTyping.js
-
-
-var isFocusedElementEditable = function () {
-    var activeElement = document.activeElement, body = document.body;
-    if (!activeElement) {
-        return false;
-    }
-    // If not element has focus, we assume it is not editable, too.
-    if (activeElement === body) {
-        return false;
-    }
-    // Assume <input> and <textarea> elements are editable.
-    switch (activeElement.tagName) {
-        case 'INPUT':
-        case 'TEXTAREA':
-            return true;
-    }
-    // Check if any other focused element id editable.
-    return activeElement.hasAttribute('contenteditable');
-};
-var isTypedCharGood = function (_a) {
-    var keyCode = _a.keyCode, metaKey = _a.metaKey, ctrlKey = _a.ctrlKey, altKey = _a.altKey;
-    if (metaKey || ctrlKey || altKey) {
-        return false;
-    }
-    // 0...9
-    if (keyCode >= 48 && keyCode <= 57) {
-        return true;
-    }
-    // a...z
-    if (keyCode >= 65 && keyCode <= 90) {
-        return true;
-    }
-    // All other keys.
-    return false;
-};
-var useStartTyping = function (onStartTyping) {
-    esm_useIsomorphicLayoutEffect(function () {
-        var keydown = function (event) {
-            !isFocusedElementEditable() && isTypedCharGood(event) && onStartTyping(event);
-        };
-        on(document, 'keydown', keydown);
-        return function () {
-            off(document, 'keydown', keydown);
-        };
-    }, []);
-};
-/* harmony default export */ const esm_useStartTyping = (useStartTyping);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useStateWithHistory.js
-
-
-
-function useStateWithHistory(initialState, capacity, initialHistory) {
-    if (capacity === void 0) { capacity = 10; }
-    if (capacity < 1) {
-        throw new Error("Capacity has to be greater than 1, got '" + capacity + "'");
-    }
-    var isFirstMount = useFirstMountState();
-    var _a = (0,react.useState)(initialState), state = _a[0], innerSetState = _a[1];
-    var history = (0,react.useRef)((initialHistory !== null && initialHistory !== void 0 ? initialHistory : []));
-    var historyPosition = (0,react.useRef)(0);
-    // do the states manipulation only on first mount, no sense to load re-renders with useless calculations
-    if (isFirstMount) {
-        if (history.current.length) {
-            // if last element of history !== initial - push initial to history
-            if (history.current[history.current.length - 1] !== initialState) {
-                history.current.push(initialState);
-            }
-            // if initial history bigger that capacity - crop the first elements out
-            if (history.current.length > capacity) {
-                history.current = history.current.slice(history.current.length - capacity);
-            }
-        }
-        else {
-            // initiate the history with initial state
-            history.current.push(initialState);
-        }
-        historyPosition.current = history.current.length && history.current.length - 1;
-    }
-    var setState = (0,react.useCallback)(function (newState) {
-        innerSetState(function (currentState) {
-            newState = resolveHookState(newState, currentState);
-            // is state has changed
-            if (newState !== currentState) {
-                // if current position is not the last - pop element to the right
-                if (historyPosition.current < history.current.length - 1) {
-                    history.current = history.current.slice(0, historyPosition.current + 1);
-                }
-                historyPosition.current = history.current.push(newState) - 1;
-                // if capacity is reached - shift first elements
-                if (history.current.length > capacity) {
-                    history.current = history.current.slice(history.current.length - capacity);
-                }
-            }
-            return newState;
-        });
-    }, [state, capacity]);
-    var historyState = (0,react.useMemo)(function () { return ({
-        history: history.current,
-        position: historyPosition.current,
-        capacity: capacity,
-        back: function (amount) {
-            if (amount === void 0) { amount = 1; }
-            // don't do anything if we already at the left border
-            if (!historyPosition.current) {
-                return;
-            }
-            innerSetState(function () {
-                historyPosition.current -= Math.min(amount, historyPosition.current);
-                return history.current[historyPosition.current];
-            });
-        },
-        forward: function (amount) {
-            if (amount === void 0) { amount = 1; }
-            // don't do anything if we already at the right border
-            if (historyPosition.current === history.current.length - 1) {
-                return;
-            }
-            innerSetState(function () {
-                historyPosition.current = Math.min(historyPosition.current + amount, history.current.length - 1);
-                return history.current[historyPosition.current];
-            });
-        },
-        go: function (position) {
-            if (position === historyPosition.current) {
-                return;
-            }
-            innerSetState(function () {
-                historyPosition.current =
-                    position < 0
-                        ? Math.max(history.current.length + position, 0)
-                        : Math.min(history.current.length - 1, position);
-                return history.current[historyPosition.current];
-            });
-        },
-    }); }, [state]);
-    return [state, setState, historyState];
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useStateList.js
-
-
-
-
-
-function useStateList(stateSet) {
-    if (stateSet === void 0) { stateSet = []; }
-    var isMounted = useMountedState();
-    var update = useUpdate();
-    var index = (0,react.useRef)(0);
-    // If new state list is shorter that before - switch to the last element
-    esm_useUpdateEffect(function () {
-        if (stateSet.length <= index.current) {
-            index.current = stateSet.length - 1;
-            update();
-        }
-    }, [stateSet.length]);
-    var actions = (0,react.useMemo)(function () { return ({
-        next: function () { return actions.setStateAt(index.current + 1); },
-        prev: function () { return actions.setStateAt(index.current - 1); },
-        setStateAt: function (newIndex) {
-            // do nothing on unmounted component
-            if (!isMounted())
-                return;
-            // do nothing on empty states list
-            if (!stateSet.length)
-                return;
-            // in case new index is equal current - do nothing
-            if (newIndex === index.current)
-                return;
-            // it gives the ability to travel through the left and right borders.
-            // 4ex: if list contains 5 elements, attempt to set index 9 will bring use to 5th element
-            // in case of negative index it will start counting from the right, so -17 will bring us to 4th element
-            index.current =
-                newIndex >= 0
-                    ? newIndex % stateSet.length
-                    : stateSet.length + (newIndex % stateSet.length);
-            update();
-        },
-        setState: function (state) {
-            // do nothing on unmounted component
-            if (!isMounted())
-                return;
-            var newIndex = stateSet.length ? stateSet.indexOf(state) : -1;
-            if (newIndex === -1) {
-                throw new Error("State '" + state + "' is not a valid state (does not exist in state list)");
-            }
-            index.current = newIndex;
-            update();
-        },
-    }); }, [stateSet]);
-    return (0,tslib_es6.__assign)({ state: stateSet[index.current], currentIndex: index.current }, actions);
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useThrottle.js
-
-
-var useThrottle = function (value, ms) {
-    if (ms === void 0) { ms = 200; }
-    var _a = (0,react.useState)(value), state = _a[0], setState = _a[1];
-    var timeout = (0,react.useRef)();
-    var nextValue = (0,react.useRef)(null);
-    var hasNextValue = (0,react.useRef)(0);
-    (0,react.useEffect)(function () {
-        if (!timeout.current) {
-            setState(value);
-            var timeoutCallback_1 = function () {
-                if (hasNextValue.current) {
-                    hasNextValue.current = false;
-                    setState(nextValue.current);
-                    timeout.current = setTimeout(timeoutCallback_1, ms);
-                }
-                else {
-                    timeout.current = undefined;
-                }
-            };
-            timeout.current = setTimeout(timeoutCallback_1, ms);
-        }
-        else {
-            nextValue.current = value;
-            hasNextValue.current = true;
-        }
-    }, [value]);
-    esm_useUnmount(function () {
-        timeout.current && clearTimeout(timeout.current);
-    });
-    return state;
-};
-/* harmony default export */ const esm_useThrottle = (useThrottle);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useThrottleFn.js
-
-
-var useThrottleFn = function (fn, ms, args) {
-    if (ms === void 0) { ms = 200; }
-    var _a = (0,react.useState)(null), state = _a[0], setState = _a[1];
-    var timeout = (0,react.useRef)();
-    var nextArgs = (0,react.useRef)();
-    (0,react.useEffect)(function () {
-        if (!timeout.current) {
-            setState(fn.apply(void 0, args));
-            var timeoutCallback_1 = function () {
-                if (nextArgs.current) {
-                    setState(fn.apply(void 0, nextArgs.current));
-                    nextArgs.current = undefined;
-                    timeout.current = setTimeout(timeoutCallback_1, ms);
-                }
-                else {
-                    timeout.current = undefined;
-                }
-            };
-            timeout.current = setTimeout(timeoutCallback_1, ms);
-        }
-        else {
-            nextArgs.current = args;
-        }
-    }, args);
-    esm_useUnmount(function () {
-        timeout.current && clearTimeout(timeout.current);
-    });
-    return state;
-};
-/* harmony default export */ const esm_useThrottleFn = (useThrottleFn);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useTimeout.js
-
-
-function useTimeout(ms) {
-    if (ms === void 0) { ms = 0; }
-    var update = useUpdate();
-    return useTimeoutFn(update, ms);
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useTitle.js
-
-var DEFAULT_USE_TITLE_OPTIONS = {
-    restoreOnUnmount: false,
-};
-function useTitle(title, options) {
-    if (options === void 0) { options = DEFAULT_USE_TITLE_OPTIONS; }
-    var prevTitleRef = (0,react.useRef)(document.title);
-    if (document.title !== title)
-        document.title = title;
-    (0,react.useEffect)(function () {
-        if (options && options.restoreOnUnmount) {
-            return function () {
-                document.title = prevTitleRef.current;
-            };
-        }
-        else {
-            return;
-        }
-    }, []);
-}
-/* harmony default export */ const esm_useTitle = (typeof document !== 'undefined' ? useTitle : function (_title) { });
-
-// EXTERNAL MODULE: ./node_modules/ts-easing/lib/index.js
-var ts_easing_lib = __webpack_require__(75534);
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useTween.js
-
-
-var useTween = function (easingName, ms, delay) {
-    if (easingName === void 0) { easingName = 'inCirc'; }
-    if (ms === void 0) { ms = 200; }
-    if (delay === void 0) { delay = 0; }
-    var fn = ts_easing_lib/* easing */.U[easingName];
-    var t = esm_useRaf(ms, delay);
-    if (false) {}
-    return fn(t);
-};
-/* harmony default export */ const esm_useTween = (useTween);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useUnmountPromise.js
-
-
-var useUnmountPromise = function () {
-    var refUnmounted = (0,react.useRef)(false);
-    esm_useEffectOnce(function () { return function () {
-        refUnmounted.current = true;
-    }; });
-    var wrapper = (0,react.useMemo)(function () {
-        var race = function (promise, onError) {
-            var newPromise = new Promise(function (resolve, reject) {
-                promise.then(function (result) {
-                    if (!refUnmounted.current)
-                        resolve(result);
-                }, function (error) {
-                    if (!refUnmounted.current)
-                        reject(error);
-                    else if (onError)
-                        onError(error);
-                    else
-                        console.error('useUnmountPromise', error);
-                });
-            });
-            return newPromise;
-        };
-        return race;
-    }, []);
-    return wrapper;
-};
-/* harmony default export */ const esm_useUnmountPromise = (useUnmountPromise);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useUpsert.js
-
-
-/**
- * @deprecated Use `useList` hook's upsert action instead
- */
-function useUpsert(predicate, initialList) {
-    if (initialList === void 0) { initialList = []; }
-    var _a = esm_useList(initialList), list = _a[0], listActions = _a[1];
-    return [
-        list,
-        (0,tslib_es6.__assign)((0,tslib_es6.__assign)({}, listActions), { upsert: function (newItem) {
-                listActions.upsert(predicate, newItem);
-            } }),
-    ];
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useVibrate.js
-
-
-var isVibrationApiSupported = isNavigator && 'vibrate' in navigator;
-function useVibrate(enabled, pattern, loop) {
-    if (enabled === void 0) { enabled = true; }
-    if (pattern === void 0) { pattern = [1000, 1000]; }
-    if (loop === void 0) { loop = true; }
-    (0,react.useEffect)(function () {
-        var interval;
-        if (enabled) {
-            navigator.vibrate(pattern);
-            if (loop) {
-                var duration = pattern instanceof Array ? pattern.reduce(function (a, b) { return a + b; }) : pattern;
-                interval = setInterval(function () {
-                    navigator.vibrate(pattern);
-                }, duration);
-            }
-        }
-        return function () {
-            if (enabled) {
-                navigator.vibrate(0);
-                if (loop) {
-                    clearInterval(interval);
-                }
-            }
-        };
-    }, [enabled]);
-}
-/* harmony default export */ const esm_useVibrate = (isVibrationApiSupported ? useVibrate : noop);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useVideo.js
-
-var useVideo = createHTMLMediaHook('video');
-/* harmony default export */ const esm_useVideo = (useVideo);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useStateValidator.js
-
-function useStateValidator(state, validator, initialState) {
-    if (initialState === void 0) { initialState = [undefined]; }
-    var validatorInner = (0,react.useRef)(validator);
-    var stateInner = (0,react.useRef)(state);
-    validatorInner.current = validator;
-    stateInner.current = state;
-    var _a = (0,react.useState)(initialState), validity = _a[0], setValidity = _a[1];
-    var validate = (0,react.useCallback)(function () {
-        if (validatorInner.current.length >= 2) {
-            validatorInner.current(stateInner.current, setValidity);
-        }
-        else {
-            setValidity(validatorInner.current(stateInner.current));
-        }
-    }, [setValidity]);
-    (0,react.useEffect)(function () {
-        validate();
-    }, [state]);
-    return [validity, validate];
-}
-
-;// CONCATENATED MODULE: ./node_modules/@xobotyi/scrollbar-width/dist/index.esm.js
-var e=function(t){if("undefined"==typeof document)return 0;if(document.body&&(!document.readyState||"loading"!==document.readyState)){if(!0!==t&&"number"==typeof e.__cache)return e.__cache;var o=document.createElement("div"),d=o.style;d.display="block",d.position="absolute",d.width="100px",d.height="100px",d.left="-999px",d.top="-999px",d.overflow="scroll",document.body.insertBefore(o,null);var n=o.clientWidth;if(0!==n)return e.__cache=100-n,document.body.removeChild(o),e.__cache;document.body.removeChild(o)}};
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useScrollbarWidth.js
-
-
-function useScrollbarWidth() {
-    var _a = (0,react.useState)(e()), sbw = _a[0], setSbw = _a[1];
-    // this needed to ensure the scrollbar width in case hook called before the DOM is ready
-    (0,react.useEffect)(function () {
-        if (typeof sbw !== 'undefined') {
-            return;
-        }
-        var raf = requestAnimationFrame(function () {
-            setSbw(e());
-        });
-        return function () { return cancelAnimationFrame(raf); };
-    }, []);
-    return sbw;
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useMultiStateValidator.js
-
-function useMultiStateValidator(states, validator, initialValidity) {
-    if (initialValidity === void 0) { initialValidity = [undefined]; }
-    if (typeof states !== 'object') {
-        throw new Error('states expected to be an object or array, got ' + typeof states);
-    }
-    var validatorInner = (0,react.useRef)(validator);
-    var statesInner = (0,react.useRef)(states);
-    validatorInner.current = validator;
-    statesInner.current = states;
-    var _a = (0,react.useState)(initialValidity), validity = _a[0], setValidity = _a[1];
-    var validate = (0,react.useCallback)(function () {
-        if (validatorInner.current.length >= 2) {
-            validatorInner.current(statesInner.current, setValidity);
-        }
-        else {
-            setValidity(validatorInner.current(statesInner.current));
-        }
-    }, [setValidity]);
-    (0,react.useEffect)(function () {
-        validate();
-    }, Object.values(states));
-    return [validity, validate];
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useWindowScroll.js
-
-
-
-var useWindowScroll = function () {
-    var _a = esm_useRafState(function () { return ({
-        x: isBrowser ? window.pageXOffset : 0,
-        y: isBrowser ? window.pageYOffset : 0,
-    }); }), state = _a[0], setState = _a[1];
-    (0,react.useEffect)(function () {
-        var handler = function () {
-            setState(function (state) {
-                var pageXOffset = window.pageXOffset, pageYOffset = window.pageYOffset;
-                //Check state for change, return same state if no change happened to prevent rerender
-                //(see useState/setState documentation). useState/setState is used internally in useRafState/setState.
-                return state.x !== pageXOffset || state.y !== pageYOffset
-                    ? {
-                        x: pageXOffset,
-                        y: pageYOffset,
-                    }
-                    : state;
-            });
-        };
-        //We have to update window scroll at mount, before subscription.
-        //Window scroll may be changed between render and effect handler.
-        handler();
-        on(window, 'scroll', handler, {
-            capture: false,
-            passive: true,
-        });
-        return function () {
-            off(window, 'scroll', handler);
-        };
-    }, []);
-    return state;
-};
-/* harmony default export */ const esm_useWindowScroll = (useWindowScroll);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useWindowSize.js
-
-
-
-var useWindowSize = function (initialWidth, initialHeight) {
-    if (initialWidth === void 0) { initialWidth = Infinity; }
-    if (initialHeight === void 0) { initialHeight = Infinity; }
-    var _a = esm_useRafState({
-        width: isBrowser ? window.innerWidth : initialWidth,
-        height: isBrowser ? window.innerHeight : initialHeight,
-    }), state = _a[0], setState = _a[1];
-    (0,react.useEffect)(function () {
-        if (isBrowser) {
-            var handler_1 = function () {
-                setState({
-                    width: window.innerWidth,
-                    height: window.innerHeight,
-                });
-            };
-            on(window, 'resize', handler_1);
-            return function () {
-                off(window, 'resize', handler_1);
-            };
-        }
-    }, []);
-    return state;
-};
-/* harmony default export */ const esm_useWindowSize = (useWindowSize);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useMeasure.js
-
-
-
-var useMeasure_defaultState = {
-    x: 0,
-    y: 0,
-    width: 0,
-    height: 0,
-    top: 0,
-    left: 0,
-    bottom: 0,
-    right: 0,
-};
-function useMeasure() {
-    var _a = (0,react.useState)(null), element = _a[0], ref = _a[1];
-    var _b = (0,react.useState)(useMeasure_defaultState), rect = _b[0], setRect = _b[1];
-    var observer = (0,react.useMemo)(function () {
-        return new window.ResizeObserver(function (entries) {
-            if (entries[0]) {
-                var _a = entries[0].contentRect, x = _a.x, y = _a.y, width = _a.width, height = _a.height, top_1 = _a.top, left = _a.left, bottom = _a.bottom, right = _a.right;
-                setRect({ x: x, y: y, width: width, height: height, top: top_1, left: left, bottom: bottom, right: right });
-            }
-        });
-    }, []);
-    esm_useIsomorphicLayoutEffect(function () {
-        if (!element)
-            return;
-        observer.observe(element);
-        return function () {
-            observer.disconnect();
-        };
-    }, [element]);
-    return [ref, rect];
-}
-/* harmony default export */ const esm_useMeasure = (isBrowser && typeof window.ResizeObserver !== 'undefined'
-    ? useMeasure
-    : (function () { return [noop, useMeasure_defaultState]; }));
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/usePinchZoom.js
-
-var ZoomState;
-(function (ZoomState) {
-    ZoomState["ZOOMING_IN"] = "ZOOMING_IN";
-    ZoomState["ZOOMING_OUT"] = "ZOOMING_OUT";
-})(ZoomState || (ZoomState = {}));
-var usePinchZoom = function (ref) {
-    var cacheRef = (0,react.useMemo)(function () { return ({
-        evCache: [],
-        prevDiff: -1,
-    }); }, [ref.current]);
-    var _a = (0,react.useState)(), zoomingState = _a[0], setZoomingState = _a[1];
-    var pointermove_handler = function (ev) {
-        // This function implements a 2-pointer horizontal pinch/zoom gesture.
-        //
-        // If the distance between the two pointers has increased (zoom in),
-        // the target element's background is changed to 'pink' and if the
-        // distance is decreasing (zoom out), the color is changed to 'lightblue'.
-        //
-        // This function sets the target element's border to 'dashed' to visually
-        // indicate the pointer's target received a move event.
-        // Find this event in the cache and update its record with this event
-        for (var i = 0; i < cacheRef.evCache.length; i++) {
-            if (ev.pointerId == cacheRef.evCache[i].pointerId) {
-                cacheRef.evCache[i] = ev;
-                break;
-            }
-        }
-        // If two pointers are down, check for pinch gestures
-        if (cacheRef.evCache.length == 2) {
-            // console.log(prevDiff)
-            // Calculate the distance between the two pointers
-            var curDiff = Math.abs(cacheRef.evCache[0].clientX - cacheRef.evCache[1].clientX);
-            if (cacheRef.prevDiff > 0) {
-                if (curDiff > cacheRef.prevDiff) {
-                    // The distance between the two pointers has increased
-                    setZoomingState([ZoomState.ZOOMING_IN, curDiff]);
-                }
-                if (curDiff < cacheRef.prevDiff) {
-                    // The distance between the two pointers has decreased
-                    setZoomingState([ZoomState.ZOOMING_OUT, curDiff]);
-                }
-            }
-            // Cache the distance for the next move event
-            cacheRef.prevDiff = curDiff;
-        }
-    };
-    var pointerdown_handler = function (ev) {
-        // The pointerdown event signals the start of a touch interaction.
-        // This event is cached to support 2-finger gestures
-        cacheRef.evCache.push(ev);
-        // console.log('pointerDown', ev);
-    };
-    var pointerup_handler = function (ev) {
-        // Remove this pointer from the cache and reset the target's
-        // background and border
-        remove_event(ev);
-        // If the number of pointers down is less than two then reset diff tracker
-        if (cacheRef.evCache.length < 2) {
-            cacheRef.prevDiff = -1;
-        }
-    };
-    var remove_event = function (ev) {
-        // Remove this event from the target's cache
-        for (var i = 0; i < cacheRef.evCache.length; i++) {
-            if (cacheRef.evCache[i].pointerId == ev.pointerId) {
-                cacheRef.evCache.splice(i, 1);
-                break;
-            }
-        }
-    };
-    (0,react.useEffect)(function () {
-        if (ref === null || ref === void 0 ? void 0 : ref.current) {
-            ref.current.onpointerdown = pointerdown_handler;
-            ref.current.onpointermove = pointermove_handler;
-            ref.current.onpointerup = pointerup_handler;
-            ref.current.onpointercancel = pointerup_handler;
-            ref.current.onpointerout = pointerup_handler;
-            ref.current.onpointerleave = pointerup_handler;
-        }
-    }, [ref === null || ref === void 0 ? void 0 : ref.current]);
-    return zoomingState
-        ? { zoomingState: zoomingState[0], pinchState: zoomingState[1] }
-        : { zoomingState: null, pinchState: 0 };
-};
-/* harmony default export */ const esm_usePinchZoom = (usePinchZoom);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useRendersCount.js
-
-function useRendersCount() {
-    return ++(0,react.useRef)(0).current;
-}
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useSet.js
-
-
-var useSet = function (initialSet) {
-    if (initialSet === void 0) { initialSet = new Set(); }
-    var _a = (0,react.useState)(initialSet), set = _a[0], setSet = _a[1];
-    var stableActions = (0,react.useMemo)(function () {
-        var add = function (item) { return setSet(function (prevSet) { return new Set((0,tslib_es6.__spreadArrays)(Array.from(prevSet), [item])); }); };
-        var remove = function (item) {
-            return setSet(function (prevSet) { return new Set(Array.from(prevSet).filter(function (i) { return i !== item; })); });
-        };
-        var toggle = function (item) {
-            return setSet(function (prevSet) {
-                return prevSet.has(item)
-                    ? new Set(Array.from(prevSet).filter(function (i) { return i !== item; }))
-                    : new Set((0,tslib_es6.__spreadArrays)(Array.from(prevSet), [item]));
-            });
-        };
-        return { add: add, remove: remove, toggle: toggle, reset: function () { return setSet(initialSet); } };
-    }, [setSet]);
-    var utils = (0,tslib_es6.__assign)({ has: (0,react.useCallback)(function (item) { return set.has(item); }, [set]) }, stableActions);
-    return [set, utils];
-};
-/* harmony default export */ const esm_useSet = (useSet);
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/factory/createGlobalState.js
-
-
-
-
-function createGlobalState(initialState) {
-    var store = {
-        state: initialState instanceof Function ? initialState() : initialState,
-        setState: function (nextState) {
-            store.state = resolveHookState(nextState, store.state);
-            store.setters.forEach(function (setter) { return setter(store.state); });
-        },
-        setters: [],
-    };
-    return function () {
-        var _a = (0,react.useState)(store.state), globalState = _a[0], stateSetter = _a[1];
-        esm_useEffectOnce(function () { return function () {
-            store.setters = store.setters.filter(function (setter) { return setter !== stateSetter; });
-        }; });
-        esm_useIsomorphicLayoutEffect(function () {
-            if (!store.setters.includes(stateSetter)) {
-                store.setters.push(stateSetter);
-            }
-        });
-        return [globalState, store.setState];
-    };
-}
-/* harmony default export */ const factory_createGlobalState = ((/* unused pure expression or super */ null && (createGlobalState)));
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/useHash.js
-
-
-
-/**
- * read and write url hash, response to url hash change
- */
-var useHash = function () {
-    var _a = (0,react.useState)(function () { return window.location.hash; }), hash = _a[0], setHash = _a[1];
-    var onHashChange = (0,react.useCallback)(function () {
-        setHash(window.location.hash);
-    }, []);
-    esm_useLifecycles(function () {
-        on(window, 'hashchange', onHashChange);
-    }, function () {
-        off(window, 'hashchange', onHashChange);
-    });
-    var _setHash = (0,react.useCallback)(function (newHash) {
-        if (newHash !== hash) {
-            window.location.hash = newHash;
-        }
-    }, [hash]);
-    return [hash, _setHash];
-};
-
-;// CONCATENATED MODULE: ./node_modules/react-use/esm/index.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// not exported because of peer dependency
-// export { default as useKeyboardJs } from './useKeyboardJs';
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// not exported because of peer dependency
-// export { default as useSpring } from './useSpring';
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/***/ }),
-
-/***/ 72408:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-/** @license React v17.0.2
- * react.production.min.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-var l=__webpack_require__(27418),n=60103,p=60106;exports.Fragment=60107;exports.StrictMode=60108;exports.Profiler=60114;var q=60109,r=60110,t=60112;exports.Suspense=60113;var u=60115,v=60116;
-if("function"===typeof Symbol&&Symbol.for){var w=Symbol.for;n=w("react.element");p=w("react.portal");exports.Fragment=w("react.fragment");exports.StrictMode=w("react.strict_mode");exports.Profiler=w("react.profiler");q=w("react.provider");r=w("react.context");t=w("react.forward_ref");exports.Suspense=w("react.suspense");u=w("react.memo");v=w("react.lazy")}var x="function"===typeof Symbol&&Symbol.iterator;
-function y(a){if(null===a||"object"!==typeof a)return null;a=x&&a[x]||a["@@iterator"];return"function"===typeof a?a:null}function z(a){for(var b="https://reactjs.org/docs/error-decoder.html?invariant="+a,c=1;c<arguments.length;c++)b+="&args[]="+encodeURIComponent(arguments[c]);return"Minified React error #"+a+"; visit "+b+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings."}
-var A={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},B={};function C(a,b,c){this.props=a;this.context=b;this.refs=B;this.updater=c||A}C.prototype.isReactComponent={};C.prototype.setState=function(a,b){if("object"!==typeof a&&"function"!==typeof a&&null!=a)throw Error(z(85));this.updater.enqueueSetState(this,a,b,"setState")};C.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,"forceUpdate")};
-function D(){}D.prototype=C.prototype;function E(a,b,c){this.props=a;this.context=b;this.refs=B;this.updater=c||A}var F=E.prototype=new D;F.constructor=E;l(F,C.prototype);F.isPureReactComponent=!0;var G={current:null},H=Object.prototype.hasOwnProperty,I={key:!0,ref:!0,__self:!0,__source:!0};
-function J(a,b,c){var e,d={},k=null,h=null;if(null!=b)for(e in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=""+b.key),b)H.call(b,e)&&!I.hasOwnProperty(e)&&(d[e]=b[e]);var g=arguments.length-2;if(1===g)d.children=c;else if(1<g){for(var f=Array(g),m=0;m<g;m++)f[m]=arguments[m+2];d.children=f}if(a&&a.defaultProps)for(e in g=a.defaultProps,g)void 0===d[e]&&(d[e]=g[e]);return{$$typeof:n,type:a,key:k,ref:h,props:d,_owner:G.current}}
-function K(a,b){return{$$typeof:n,type:a.type,key:b,ref:a.ref,props:a.props,_owner:a._owner}}function L(a){return"object"===typeof a&&null!==a&&a.$$typeof===n}function escape(a){var b={"=":"=0",":":"=2"};return"$"+a.replace(/[=:]/g,function(a){return b[a]})}var M=/\/+/g;function N(a,b){return"object"===typeof a&&null!==a&&null!=a.key?escape(""+a.key):b.toString(36)}
-function O(a,b,c,e,d){var k=typeof a;if("undefined"===k||"boolean"===k)a=null;var h=!1;if(null===a)h=!0;else switch(k){case "string":case "number":h=!0;break;case "object":switch(a.$$typeof){case n:case p:h=!0}}if(h)return h=a,d=d(h),a=""===e?"."+N(h,0):e,Array.isArray(d)?(c="",null!=a&&(c=a.replace(M,"$&/")+"/"),O(d,b,c,"",function(a){return a})):null!=d&&(L(d)&&(d=K(d,c+(!d.key||h&&h.key===d.key?"":(""+d.key).replace(M,"$&/")+"/")+a)),b.push(d)),1;h=0;e=""===e?".":e+":";if(Array.isArray(a))for(var g=
-0;g<a.length;g++){k=a[g];var f=e+N(k,g);h+=O(k,b,c,f,d)}else if(f=y(a),"function"===typeof f)for(a=f.call(a),g=0;!(k=a.next()).done;)k=k.value,f=e+N(k,g++),h+=O(k,b,c,f,d);else if("object"===k)throw b=""+a,Error(z(31,"[object Object]"===b?"object with keys {"+Object.keys(a).join(", ")+"}":b));return h}function P(a,b,c){if(null==a)return a;var e=[],d=0;O(a,e,"","",function(a){return b.call(c,a,d++)});return e}
-function Q(a){if(-1===a._status){var b=a._result;b=b();a._status=0;a._result=b;b.then(function(b){0===a._status&&(b=b.default,a._status=1,a._result=b)},function(b){0===a._status&&(a._status=2,a._result=b)})}if(1===a._status)return a._result;throw a._result;}var R={current:null};function S(){var a=R.current;if(null===a)throw Error(z(321));return a}var T={ReactCurrentDispatcher:R,ReactCurrentBatchConfig:{transition:0},ReactCurrentOwner:G,IsSomeRendererActing:{current:!1},assign:l};
-exports.Children={map:P,forEach:function(a,b,c){P(a,function(){b.apply(this,arguments)},c)},count:function(a){var b=0;P(a,function(){b++});return b},toArray:function(a){return P(a,function(a){return a})||[]},only:function(a){if(!L(a))throw Error(z(143));return a}};exports.Component=C;exports.PureComponent=E;exports.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED=T;
-exports.cloneElement=function(a,b,c){if(null===a||void 0===a)throw Error(z(267,a));var e=l({},a.props),d=a.key,k=a.ref,h=a._owner;if(null!=b){void 0!==b.ref&&(k=b.ref,h=G.current);void 0!==b.key&&(d=""+b.key);if(a.type&&a.type.defaultProps)var g=a.type.defaultProps;for(f in b)H.call(b,f)&&!I.hasOwnProperty(f)&&(e[f]=void 0===b[f]&&void 0!==g?g[f]:b[f])}var f=arguments.length-2;if(1===f)e.children=c;else if(1<f){g=Array(f);for(var m=0;m<f;m++)g[m]=arguments[m+2];e.children=g}return{$$typeof:n,type:a.type,
-key:d,ref:k,props:e,_owner:h}};exports.createContext=function(a,b){void 0===b&&(b=null);a={$$typeof:r,_calculateChangedBits:b,_currentValue:a,_currentValue2:a,_threadCount:0,Provider:null,Consumer:null};a.Provider={$$typeof:q,_context:a};return a.Consumer=a};exports.createElement=J;exports.createFactory=function(a){var b=J.bind(null,a);b.type=a;return b};exports.createRef=function(){return{current:null}};exports.forwardRef=function(a){return{$$typeof:t,render:a}};exports.isValidElement=L;
-exports.lazy=function(a){return{$$typeof:v,_payload:{_status:-1,_result:a},_init:Q}};exports.memo=function(a,b){return{$$typeof:u,type:a,compare:void 0===b?null:b}};exports.useCallback=function(a,b){return S().useCallback(a,b)};exports.useContext=function(a,b){return S().useContext(a,b)};exports.useDebugValue=function(){};exports.useEffect=function(a,b){return S().useEffect(a,b)};exports.useImperativeHandle=function(a,b,c){return S().useImperativeHandle(a,b,c)};
-exports.useLayoutEffect=function(a,b){return S().useLayoutEffect(a,b)};exports.useMemo=function(a,b){return S().useMemo(a,b)};exports.useReducer=function(a,b,c){return S().useReducer(a,b,c)};exports.useRef=function(a){return S().useRef(a)};exports.useState=function(a){return S().useState(a)};exports.version="17.0.2";
-
-
-/***/ }),
-
-/***/ 67294:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-if (true) {
-  module.exports = __webpack_require__(72408);
-} else {}
-
-
-/***/ }),
-
-/***/ 94556:
-/***/ (function(module, exports) {
-
-var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;;(function(root, factory) {
-    // istanbul ignore next
-    if (true) {
-        // istanbul ignore next
-        !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_FACTORY__ = (factory),
-		__WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ?
-		(__WEBPACK_AMD_DEFINE_FACTORY__.apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__)) : __WEBPACK_AMD_DEFINE_FACTORY__),
-		__WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__))
-    } else {}
-})(
-    typeof self !== "undefined"
-        ? // istanbul ignore next
-          self
-        : this,
-    function() {
-        // references
-        // https://hackernoon.com/the-madness-of-parsing-real-world-javascript-regexps-d9ee336df983
-        // https://www.ecma-international.org/ecma-262/8.0/index.html#prod-Pattern
-        function RegExpParser() {}
-
-        RegExpParser.prototype.saveState = function() {
-            return {
-                idx: this.idx,
-                input: this.input,
-                groupIdx: this.groupIdx
-            }
-        }
-
-        RegExpParser.prototype.restoreState = function(newState) {
-            this.idx = newState.idx
-            this.input = newState.input
-            this.groupIdx = newState.groupIdx
-        }
-
-        RegExpParser.prototype.pattern = function(input) {
-            // parser state
-            this.idx = 0
-            this.input = input
-            this.groupIdx = 0
-
-            this.consumeChar("/")
-            var value = this.disjunction()
-            this.consumeChar("/")
-
-            var flags = {
-                type: "Flags",
-                loc: { begin: this.idx, end: input.length },
-                global: false,
-                ignoreCase: false,
-                multiLine: false,
-                unicode: false,
-                sticky: false
-            }
-
-            while (this.isRegExpFlag()) {
-                switch (this.popChar()) {
-                    case "g":
-                        addFlag(flags, "global")
-                        break
-                    case "i":
-                        addFlag(flags, "ignoreCase")
-                        break
-                    case "m":
-                        addFlag(flags, "multiLine")
-                        break
-                    case "u":
-                        addFlag(flags, "unicode")
-                        break
-                    case "y":
-                        addFlag(flags, "sticky")
-                        break
-                }
-            }
-
-            if (this.idx !== this.input.length) {
-                throw Error(
-                    "Redundant input: " + this.input.substring(this.idx)
-                )
-            }
-            return {
-                type: "Pattern",
-                flags: flags,
-                value: value,
-                loc: this.loc(0)
-            }
-        }
-
-        RegExpParser.prototype.disjunction = function() {
-            var alts = []
-            var begin = this.idx
-
-            alts.push(this.alternative())
-
-            while (this.peekChar() === "|") {
-                this.consumeChar("|")
-                alts.push(this.alternative())
-            }
-
-            return { type: "Disjunction", value: alts, loc: this.loc(begin) }
-        }
-
-        RegExpParser.prototype.alternative = function() {
-            var terms = []
-            var begin = this.idx
-
-            while (this.isTerm()) {
-                terms.push(this.term())
-            }
-
-            return { type: "Alternative", value: terms, loc: this.loc(begin) }
-        }
-
-        RegExpParser.prototype.term = function() {
-            if (this.isAssertion()) {
-                return this.assertion()
-            } else {
-                return this.atom()
-            }
-        }
-
-        RegExpParser.prototype.assertion = function() {
-            var begin = this.idx
-            switch (this.popChar()) {
-                case "^":
-                    return {
-                        type: "StartAnchor",
-                        loc: this.loc(begin)
-                    }
-                case "$":
-                    return { type: "EndAnchor", loc: this.loc(begin) }
-                // '\b' or '\B'
-                case "\\":
-                    switch (this.popChar()) {
-                        case "b":
-                            return {
-                                type: "WordBoundary",
-                                loc: this.loc(begin)
-                            }
-                        case "B":
-                            return {
-                                type: "NonWordBoundary",
-                                loc: this.loc(begin)
-                            }
-                    }
-                    // istanbul ignore next
-                    throw Error("Invalid Assertion Escape")
-                // '(?=' or '(?!'
-                case "(":
-                    this.consumeChar("?")
-
-                    var type
-                    switch (this.popChar()) {
-                        case "=":
-                            type = "Lookahead"
-                            break
-                        case "!":
-                            type = "NegativeLookahead"
-                            break
-                    }
-                    ASSERT_EXISTS(type)
-
-                    var disjunction = this.disjunction()
-
-                    this.consumeChar(")")
-
-                    return {
-                        type: type,
-                        value: disjunction,
-                        loc: this.loc(begin)
-                    }
-            }
-            // istanbul ignore next
-            ASSERT_NEVER_REACH_HERE()
-        }
-
-        RegExpParser.prototype.quantifier = function(isBacktracking) {
-            var range
-            var begin = this.idx
-            switch (this.popChar()) {
-                case "*":
-                    range = {
-                        atLeast: 0,
-                        atMost: Infinity
-                    }
-                    break
-                case "+":
-                    range = {
-                        atLeast: 1,
-                        atMost: Infinity
-                    }
-                    break
-                case "?":
-                    range = {
-                        atLeast: 0,
-                        atMost: 1
-                    }
-                    break
-                case "{":
-                    var atLeast = this.integerIncludingZero()
-                    switch (this.popChar()) {
-                        case "}":
-                            range = {
-                                atLeast: atLeast,
-                                atMost: atLeast
-                            }
-                            break
-                        case ",":
-                            var atMost
-                            if (this.isDigit()) {
-                                atMost = this.integerIncludingZero()
-                                range = {
-                                    atLeast: atLeast,
-                                    atMost: atMost
-                                }
-                            } else {
-                                range = {
-                                    atLeast: atLeast,
-                                    atMost: Infinity
-                                }
-                            }
-                            this.consumeChar("}")
-                            break
-                    }
-                    // throwing exceptions from "ASSERT_EXISTS" during backtracking
-                    // causes severe performance degradations
-                    if (isBacktracking === true && range === undefined) {
-                        return undefined
-                    }
-                    ASSERT_EXISTS(range)
-                    break
-            }
-
-            // throwing exceptions from "ASSERT_EXISTS" during backtracking
-            // causes severe performance degradations
-            if (isBacktracking === true && range === undefined) {
-                return undefined
-            }
-
-            ASSERT_EXISTS(range)
-
-            if (this.peekChar(0) === "?") {
-                this.consumeChar("?")
-                range.greedy = false
-            } else {
-                range.greedy = true
-            }
-
-            range.type = "Quantifier"
-            range.loc = this.loc(begin)
-            return range
-        }
-
-        RegExpParser.prototype.atom = function() {
-            var atom
-            var begin = this.idx
-            switch (this.peekChar()) {
-                case ".":
-                    atom = this.dotAll()
-                    break
-                case "\\":
-                    atom = this.atomEscape()
-                    break
-                case "[":
-                    atom = this.characterClass()
-                    break
-                case "(":
-                    atom = this.group()
-                    break
-            }
-
-            if (atom === undefined && this.isPatternCharacter()) {
-                atom = this.patternCharacter()
-            }
-
-            ASSERT_EXISTS(atom)
-
-            atom.loc = this.loc(begin)
-
-            if (this.isQuantifier()) {
-                atom.quantifier = this.quantifier()
-            }
-
-            return atom
-        }
-
-        RegExpParser.prototype.dotAll = function() {
-            this.consumeChar(".")
-            return {
-                type: "Set",
-                complement: true,
-                value: [cc("\n"), cc("\r"), cc("\u2028"), cc("\u2029")]
-            }
-        }
-
-        RegExpParser.prototype.atomEscape = function() {
-            this.consumeChar("\\")
-
-            switch (this.peekChar()) {
-                case "1":
-                case "2":
-                case "3":
-                case "4":
-                case "5":
-                case "6":
-                case "7":
-                case "8":
-                case "9":
-                    return this.decimalEscapeAtom()
-                case "d":
-                case "D":
-                case "s":
-                case "S":
-                case "w":
-                case "W":
-                    return this.characterClassEscape()
-                case "f":
-                case "n":
-                case "r":
-                case "t":
-                case "v":
-                    return this.controlEscapeAtom()
-                case "c":
-                    return this.controlLetterEscapeAtom()
-                case "0":
-                    return this.nulCharacterAtom()
-                case "x":
-                    return this.hexEscapeSequenceAtom()
-                case "u":
-                    return this.regExpUnicodeEscapeSequenceAtom()
-                default:
-                    return this.identityEscapeAtom()
-            }
-        }
-
-        RegExpParser.prototype.decimalEscapeAtom = function() {
-            var value = this.positiveInteger()
-
-            return { type: "GroupBackReference", value: value }
-        }
-
-        RegExpParser.prototype.characterClassEscape = function() {
-            var set
-            var complement = false
-            switch (this.popChar()) {
-                case "d":
-                    set = digitsCharCodes
-                    break
-                case "D":
-                    set = digitsCharCodes
-                    complement = true
-                    break
-                case "s":
-                    set = whitespaceCodes
-                    break
-                case "S":
-                    set = whitespaceCodes
-                    complement = true
-                    break
-                case "w":
-                    set = wordCharCodes
-                    break
-                case "W":
-                    set = wordCharCodes
-                    complement = true
-                    break
-            }
-
-            ASSERT_EXISTS(set)
-
-            return { type: "Set", value: set, complement: complement }
-        }
-
-        RegExpParser.prototype.controlEscapeAtom = function() {
-            var escapeCode
-            switch (this.popChar()) {
-                case "f":
-                    escapeCode = cc("\f")
-                    break
-                case "n":
-                    escapeCode = cc("\n")
-                    break
-                case "r":
-                    escapeCode = cc("\r")
-                    break
-                case "t":
-                    escapeCode = cc("\t")
-                    break
-                case "v":
-                    escapeCode = cc("\v")
-                    break
-            }
-            ASSERT_EXISTS(escapeCode)
-
-            return { type: "Character", value: escapeCode }
-        }
-
-        RegExpParser.prototype.controlLetterEscapeAtom = function() {
-            this.consumeChar("c")
-            var letter = this.popChar()
-            if (/[a-zA-Z]/.test(letter) === false) {
-                throw Error("Invalid ")
-            }
-
-            var letterCode = letter.toUpperCase().charCodeAt(0) - 64
-            return { type: "Character", value: letterCode }
-        }
-
-        RegExpParser.prototype.nulCharacterAtom = function() {
-            // TODO implement '[lookahead ∉ DecimalDigit]'
-            // TODO: for the deprecated octal escape sequence
-            this.consumeChar("0")
-            return { type: "Character", value: cc("\0") }
-        }
-
-        RegExpParser.prototype.hexEscapeSequenceAtom = function() {
-            this.consumeChar("x")
-            return this.parseHexDigits(2)
-        }
-
-        RegExpParser.prototype.regExpUnicodeEscapeSequenceAtom = function() {
-            this.consumeChar("u")
-            return this.parseHexDigits(4)
-        }
-
-        RegExpParser.prototype.identityEscapeAtom = function() {
-            // TODO: implement "SourceCharacter but not UnicodeIDContinue"
-            // // http://unicode.org/reports/tr31/#Specific_Character_Adjustments
-            var escapedChar = this.popChar()
-            return { type: "Character", value: cc(escapedChar) }
-        }
-
-        RegExpParser.prototype.classPatternCharacterAtom = function() {
-            switch (this.peekChar()) {
-                // istanbul ignore next
-                case "\n":
-                // istanbul ignore next
-                case "\r":
-                // istanbul ignore next
-                case "\u2028":
-                // istanbul ignore next
-                case "\u2029":
-                // istanbul ignore next
-                case "\\":
-                // istanbul ignore next
-                case "]":
-                    throw Error("TBD")
-                default:
-                    var nextChar = this.popChar()
-                    return { type: "Character", value: cc(nextChar) }
-            }
-        }
-
-        RegExpParser.prototype.characterClass = function() {
-            var set = []
-            var complement = false
-            this.consumeChar("[")
-            if (this.peekChar(0) === "^") {
-                this.consumeChar("^")
-                complement = true
-            }
-
-            while (this.isClassAtom()) {
-                var from = this.classAtom()
-                var isFromSingleChar = from.type === "Character"
-                if (isFromSingleChar && this.isRangeDash()) {
-                    this.consumeChar("-")
-                    var to = this.classAtom()
-                    var isToSingleChar = to.type === "Character"
-
-                    // a range can only be used when both sides are single characters
-                    if (isToSingleChar) {
-                        if (to.value < from.value) {
-                            throw Error("Range out of order in character class")
-                        }
-                        set.push({ from: from.value, to: to.value })
-                    } else {
-                        // literal dash
-                        insertToSet(from.value, set)
-                        set.push(cc("-"))
-                        insertToSet(to.value, set)
-                    }
-                } else {
-                    insertToSet(from.value, set)
-                }
-            }
-
-            this.consumeChar("]")
-
-            return { type: "Set", complement: complement, value: set }
-        }
-
-        RegExpParser.prototype.classAtom = function() {
-            switch (this.peekChar()) {
-                // istanbul ignore next
-                case "]":
-                // istanbul ignore next
-                case "\n":
-                // istanbul ignore next
-                case "\r":
-                // istanbul ignore next
-                case "\u2028":
-                // istanbul ignore next
-                case "\u2029":
-                    throw Error("TBD")
-                case "\\":
-                    return this.classEscape()
-                default:
-                    return this.classPatternCharacterAtom()
-            }
-        }
-
-        RegExpParser.prototype.classEscape = function() {
-            this.consumeChar("\\")
-            switch (this.peekChar()) {
-                // Matches a backspace.
-                // (Not to be confused with \b word boundary outside characterClass)
-                case "b":
-                    this.consumeChar("b")
-                    return { type: "Character", value: cc("\u0008") }
-                case "d":
-                case "D":
-                case "s":
-                case "S":
-                case "w":
-                case "W":
-                    return this.characterClassEscape()
-                case "f":
-                case "n":
-                case "r":
-                case "t":
-                case "v":
-                    return this.controlEscapeAtom()
-                case "c":
-                    return this.controlLetterEscapeAtom()
-                case "0":
-                    return this.nulCharacterAtom()
-                case "x":
-                    return this.hexEscapeSequenceAtom()
-                case "u":
-                    return this.regExpUnicodeEscapeSequenceAtom()
-                default:
-                    return this.identityEscapeAtom()
-            }
-        }
-
-        RegExpParser.prototype.group = function() {
-            var capturing = true
-            this.consumeChar("(")
-            switch (this.peekChar(0)) {
-                case "?":
-                    this.consumeChar("?")
-                    this.consumeChar(":")
-                    capturing = false
-                    break
-                default:
-                    this.groupIdx++
-                    break
-            }
-            var value = this.disjunction()
-            this.consumeChar(")")
-
-            var groupAst = {
-                type: "Group",
-                capturing: capturing,
-                value: value
-            }
-
-            if (capturing) {
-                groupAst.idx = this.groupIdx
-            }
-
-            return groupAst
-        }
-
-        RegExpParser.prototype.positiveInteger = function() {
-            var number = this.popChar()
-
-            // istanbul ignore next - can't ever get here due to previous lookahead checks
-            // still implementing this error checking in case this ever changes.
-            if (decimalPatternNoZero.test(number) === false) {
-                throw Error("Expecting a positive integer")
-            }
-
-            while (decimalPattern.test(this.peekChar(0))) {
-                number += this.popChar()
-            }
-
-            return parseInt(number, 10)
-        }
-
-        RegExpParser.prototype.integerIncludingZero = function() {
-            var number = this.popChar()
-            if (decimalPattern.test(number) === false) {
-                throw Error("Expecting an integer")
-            }
-
-            while (decimalPattern.test(this.peekChar(0))) {
-                number += this.popChar()
-            }
-
-            return parseInt(number, 10)
-        }
-
-        RegExpParser.prototype.patternCharacter = function() {
-            var nextChar = this.popChar()
-            switch (nextChar) {
-                // istanbul ignore next
-                case "\n":
-                // istanbul ignore next
-                case "\r":
-                // istanbul ignore next
-                case "\u2028":
-                // istanbul ignore next
-                case "\u2029":
-                // istanbul ignore next
-                case "^":
-                // istanbul ignore next
-                case "$":
-                // istanbul ignore next
-                case "\\":
-                // istanbul ignore next
-                case ".":
-                // istanbul ignore next
-                case "*":
-                // istanbul ignore next
-                case "+":
-                // istanbul ignore next
-                case "?":
-                // istanbul ignore next
-                case "(":
-                // istanbul ignore next
-                case ")":
-                // istanbul ignore next
-                case "[":
-                // istanbul ignore next
-                case "|":
-                    // istanbul ignore next
-                    throw Error("TBD")
-                default:
-                    return { type: "Character", value: cc(nextChar) }
-            }
-        }
-        RegExpParser.prototype.isRegExpFlag = function() {
-            switch (this.peekChar(0)) {
-                case "g":
-                case "i":
-                case "m":
-                case "u":
-                case "y":
-                    return true
-                default:
-                    return false
-            }
-        }
-
-        RegExpParser.prototype.isRangeDash = function() {
-            return this.peekChar() === "-" && this.isClassAtom(1)
-        }
-
-        RegExpParser.prototype.isDigit = function() {
-            return decimalPattern.test(this.peekChar(0))
-        }
-
-        RegExpParser.prototype.isClassAtom = function(howMuch) {
-            if (howMuch === undefined) {
-                howMuch = 0
-            }
-
-            switch (this.peekChar(howMuch)) {
-                case "]":
-                case "\n":
-                case "\r":
-                case "\u2028":
-                case "\u2029":
-                    return false
-                default:
-                    return true
-            }
-        }
-
-        RegExpParser.prototype.isTerm = function() {
-            return this.isAtom() || this.isAssertion()
-        }
-
-        RegExpParser.prototype.isAtom = function() {
-            if (this.isPatternCharacter()) {
-                return true
-            }
-
-            switch (this.peekChar(0)) {
-                case ".":
-                case "\\": // atomEscape
-                case "[": // characterClass
-                // TODO: isAtom must be called before isAssertion - disambiguate
-                case "(": // group
-                    return true
-                default:
-                    return false
-            }
-        }
-
-        RegExpParser.prototype.isAssertion = function() {
-            switch (this.peekChar(0)) {
-                case "^":
-                case "$":
-                    return true
-                // '\b' or '\B'
-                case "\\":
-                    switch (this.peekChar(1)) {
-                        case "b":
-                        case "B":
-                            return true
-                        default:
-                            return false
-                    }
-                // '(?=' or '(?!'
-                case "(":
-                    return (
-                        this.peekChar(1) === "?" &&
-                        (this.peekChar(2) === "=" || this.peekChar(2) === "!")
-                    )
-                default:
-                    return false
-            }
-        }
-
-        RegExpParser.prototype.isQuantifier = function() {
-            var prevState = this.saveState()
-            try {
-                return this.quantifier(true) !== undefined
-            } catch (e) {
-                return false
-            } finally {
-                this.restoreState(prevState)
-            }
-        }
-
-        RegExpParser.prototype.isPatternCharacter = function() {
-            switch (this.peekChar()) {
-                case "^":
-                case "$":
-                case "\\":
-                case ".":
-                case "*":
-                case "+":
-                case "?":
-                case "(":
-                case ")":
-                case "[":
-                case "|":
-                case "/":
-                case "\n":
-                case "\r":
-                case "\u2028":
-                case "\u2029":
-                    return false
-                default:
-                    return true
-            }
-        }
-
-        RegExpParser.prototype.parseHexDigits = function(howMany) {
-            var hexString = ""
-            for (var i = 0; i < howMany; i++) {
-                var hexChar = this.popChar()
-                if (hexDigitPattern.test(hexChar) === false) {
-                    throw Error("Expecting a HexDecimal digits")
-                }
-                hexString += hexChar
-            }
-            var charCode = parseInt(hexString, 16)
-            return { type: "Character", value: charCode }
-        }
-
-        RegExpParser.prototype.peekChar = function(howMuch) {
-            if (howMuch === undefined) {
-                howMuch = 0
-            }
-            return this.input[this.idx + howMuch]
-        }
-
-        RegExpParser.prototype.popChar = function() {
-            var nextChar = this.peekChar(0)
-            this.consumeChar()
-            return nextChar
-        }
-
-        RegExpParser.prototype.consumeChar = function(char) {
-            if (char !== undefined && this.input[this.idx] !== char) {
-                throw Error(
-                    "Expected: '" +
-                        char +
-                        "' but found: '" +
-                        this.input[this.idx] +
-                        "' at offset: " +
-                        this.idx
-                )
-            }
-
-            if (this.idx >= this.input.length) {
-                throw Error("Unexpected end of input")
-            }
-            this.idx++
-        }
-
-        RegExpParser.prototype.loc = function(begin) {
-            return { begin: begin, end: this.idx }
-        }
-
-        // consts and utilities
-        var hexDigitPattern = /[0-9a-fA-F]/
-        var decimalPattern = /[0-9]/
-        var decimalPatternNoZero = /[1-9]/
-
-        function cc(char) {
-            return char.charCodeAt(0)
-        }
-
-        function insertToSet(item, set) {
-            if (item.length !== undefined) {
-                item.forEach(function(subItem) {
-                    set.push(subItem)
-                })
-            } else {
-                set.push(item)
-            }
-        }
-
-        function addFlag(flagObj, flagKey) {
-            if (flagObj[flagKey] === true) {
-                throw "duplicate flag " + flagKey
-            }
-
-            flagObj[flagKey] = true
-        }
-
-        function ASSERT_EXISTS(obj) {
-            // istanbul ignore next
-            if (obj === undefined) {
-                throw Error("Internal Error - Should never get here!")
-            }
-        }
-
-        // istanbul ignore next
-        function ASSERT_NEVER_REACH_HERE() {
-            throw Error("Internal Error - Should never get here!")
-        }
-
-        var i
-        var digitsCharCodes = []
-        for (i = cc("0"); i <= cc("9"); i++) {
-            digitsCharCodes.push(i)
-        }
-
-        var wordCharCodes = [cc("_")].concat(digitsCharCodes)
-        for (i = cc("a"); i <= cc("z"); i++) {
-            wordCharCodes.push(i)
-        }
-
-        for (i = cc("A"); i <= cc("Z"); i++) {
-            wordCharCodes.push(i)
-        }
-
-        // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp#character-classes
-        var whitespaceCodes = [
-            cc(" "),
-            cc("\f"),
-            cc("\n"),
-            cc("\r"),
-            cc("\t"),
-            cc("\v"),
-            cc("\t"),
-            cc("\u00a0"),
-            cc("\u1680"),
-            cc("\u2000"),
-            cc("\u2001"),
-            cc("\u2002"),
-            cc("\u2003"),
-            cc("\u2004"),
-            cc("\u2005"),
-            cc("\u2006"),
-            cc("\u2007"),
-            cc("\u2008"),
-            cc("\u2009"),
-            cc("\u200a"),
-            cc("\u2028"),
-            cc("\u2029"),
-            cc("\u202f"),
-            cc("\u205f"),
-            cc("\u3000"),
-            cc("\ufeff")
-        ]
-
-        function BaseRegExpVisitor() {}
-
-        BaseRegExpVisitor.prototype.visitChildren = function(node) {
-            for (var key in node) {
-                var child = node[key]
-                /* istanbul ignore else */
-                if (node.hasOwnProperty(key)) {
-                    if (child.type !== undefined) {
-                        this.visit(child)
-                    } else if (Array.isArray(child)) {
-                        child.forEach(function(subChild) {
-                            this.visit(subChild)
-                        }, this)
-                    }
-                }
-            }
-        }
-
-        BaseRegExpVisitor.prototype.visit = function(node) {
-            switch (node.type) {
-                case "Pattern":
-                    this.visitPattern(node)
-                    break
-                case "Flags":
-                    this.visitFlags(node)
-                    break
-                case "Disjunction":
-                    this.visitDisjunction(node)
-                    break
-                case "Alternative":
-                    this.visitAlternative(node)
-                    break
-                case "StartAnchor":
-                    this.visitStartAnchor(node)
-                    break
-                case "EndAnchor":
-                    this.visitEndAnchor(node)
-                    break
-                case "WordBoundary":
-                    this.visitWordBoundary(node)
-                    break
-                case "NonWordBoundary":
-                    this.visitNonWordBoundary(node)
-                    break
-                case "Lookahead":
-                    this.visitLookahead(node)
-                    break
-                case "NegativeLookahead":
-                    this.visitNegativeLookahead(node)
-                    break
-                case "Character":
-                    this.visitCharacter(node)
-                    break
-                case "Set":
-                    this.visitSet(node)
-                    break
-                case "Group":
-                    this.visitGroup(node)
-                    break
-                case "GroupBackReference":
-                    this.visitGroupBackReference(node)
-                    break
-                case "Quantifier":
-                    this.visitQuantifier(node)
-                    break
-            }
-
-            this.visitChildren(node)
-        }
-
-        BaseRegExpVisitor.prototype.visitPattern = function(node) {}
-
-        BaseRegExpVisitor.prototype.visitFlags = function(node) {}
-
-        BaseRegExpVisitor.prototype.visitDisjunction = function(node) {}
-
-        BaseRegExpVisitor.prototype.visitAlternative = function(node) {}
-
-        // Assertion
-        BaseRegExpVisitor.prototype.visitStartAnchor = function(node) {}
-
-        BaseRegExpVisitor.prototype.visitEndAnchor = function(node) {}
-
-        BaseRegExpVisitor.prototype.visitWordBoundary = function(node) {}
-
-        BaseRegExpVisitor.prototype.visitNonWordBoundary = function(node) {}
-
-        BaseRegExpVisitor.prototype.visitLookahead = function(node) {}
-
-        BaseRegExpVisitor.prototype.visitNegativeLookahead = function(node) {}
-
-        // atoms
-        BaseRegExpVisitor.prototype.visitCharacter = function(node) {}
-
-        BaseRegExpVisitor.prototype.visitSet = function(node) {}
-
-        BaseRegExpVisitor.prototype.visitGroup = function(node) {}
-
-        BaseRegExpVisitor.prototype.visitGroupBackReference = function(node) {}
-
-        BaseRegExpVisitor.prototype.visitQuantifier = function(node) {}
-
-        return {
-            RegExpParser: RegExpParser,
-            BaseRegExpVisitor: BaseRegExpVisitor,
-            VERSION: "0.5.0"
-        }
-    }
-)
-
-
-/***/ }),
-
-/***/ 18898:
-/***/ ((module) => {
-
-"use strict";
-
-
-module.exports =
-{
-	// Output
-	ABSOLUTE:      "absolute",
-	PATH_RELATIVE: "pathRelative",
-	ROOT_RELATIVE: "rootRelative",
-	SHORTEST:      "shortest"
-};
-
-
-/***/ }),
-
-/***/ 2545:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var constants = __webpack_require__(18898);
-
-
-
-function formatAuth(urlObj, options)
-{
-	if (urlObj.auth && !options.removeAuth && (urlObj.extra.relation.maximumHost || options.output===constants.ABSOLUTE))
-	{
-		return urlObj.auth + "@";
-	}
-	
-	return "";
-}
-
-
-
-function formatHash(urlObj, options)
-{
-	return urlObj.hash ? urlObj.hash : "";
-}
-
-
-
-function formatHost(urlObj, options)
-{
-	if (urlObj.host.full && (urlObj.extra.relation.maximumAuth || options.output===constants.ABSOLUTE))
-	{
-		return urlObj.host.full;
-	}
-	
-	return "";
-}
-
-
-
-function formatPath(urlObj, options)
-{
-	var str = "";
-	
-	var absolutePath = urlObj.path.absolute.string;
-	var relativePath = urlObj.path.relative.string;
-	var resource = showResource(urlObj, options);
-	
-	if (urlObj.extra.relation.maximumHost || options.output===constants.ABSOLUTE || options.output===constants.ROOT_RELATIVE)
-	{
-		str = absolutePath;
-	}
-	else if (relativePath.length<=absolutePath.length && options.output===constants.SHORTEST || options.output===constants.PATH_RELATIVE)
-	{
-		str = relativePath;
-		
-		if (str === "")
-		{
-			var query = showQuery(urlObj,options) && !!getQuery(urlObj,options);
-			
-			if (urlObj.extra.relation.maximumPath && !resource)
-			{
-				str = "./";
-			}
-			else if (urlObj.extra.relation.overridesQuery && !resource && !query)
-			{
-				str = "./";
-			}
-		}
-	}
-	else
-	{
-		str = absolutePath;
-	}
-	
-	if ( str==="/" && !resource && options.removeRootTrailingSlash && (!urlObj.extra.relation.minimumPort || options.output===constants.ABSOLUTE) )
-	{
-		str = "";
-	}
-	
-	return str;
-}
-
-
-
-function formatPort(urlObj, options)
-{
-	if (urlObj.port && !urlObj.extra.portIsDefault && urlObj.extra.relation.maximumHost)
-	{
-		return ":" + urlObj.port;
-	}
-	
-	return "";
-}
-
-
-
-function formatQuery(urlObj, options)
-{
-	return showQuery(urlObj,options) ? getQuery(urlObj, options) : "";
-}
-
-
-
-function formatResource(urlObj, options)
-{
-	return showResource(urlObj,options) ? urlObj.resource : "";
-}
-
-
-
-function formatScheme(urlObj, options)
-{
-	var str = "";
-	
-	if (urlObj.extra.relation.maximumHost || options.output===constants.ABSOLUTE)
-	{
-		if (!urlObj.extra.relation.minimumScheme || !options.schemeRelative || options.output===constants.ABSOLUTE)
-		{
-			str += urlObj.scheme + "://";
-		}
-		else
-		{
-			str += "//";
-		}
-	}
-	
-	return str;
-}
-
-
-
-function formatUrl(urlObj, options)
-{
-	var url = "";
-	
-	url += formatScheme(urlObj, options);
-	url += formatAuth(urlObj, options);
-	url += formatHost(urlObj, options);
-	url += formatPort(urlObj, options);
-	url += formatPath(urlObj, options);
-	url += formatResource(urlObj, options);
-	url += formatQuery(urlObj, options);
-	url += formatHash(urlObj, options);
-	
-	return url;
-}
-
-
-
-function getQuery(urlObj, options)
-{
-	var stripQuery = options.removeEmptyQueries && urlObj.extra.relation.minimumPort;
-	
-	return urlObj.query.string[ stripQuery ? "stripped" : "full" ];
-}
-
-
-
-function showQuery(urlObj, options)
-{
-	return !urlObj.extra.relation.minimumQuery || options.output===constants.ABSOLUTE || options.output===constants.ROOT_RELATIVE;
-}
-
-
-
-function showResource(urlObj, options)
-{
-	var removeIndex = options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex;
-	var removeMatchingResource = urlObj.extra.relation.minimumResource && options.output!==constants.ABSOLUTE && options.output!==constants.ROOT_RELATIVE;
-	
-	return !!urlObj.resource && !removeMatchingResource && !removeIndex;
-}
-
-
-
-module.exports = formatUrl;
-
-
-/***/ }),
-
-/***/ 87961:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var constants  = __webpack_require__(18898);
-var formatUrl  = __webpack_require__(2545);
-var getOptions = __webpack_require__(58509);
-var objUtils   = __webpack_require__(12900);
-var parseUrl   = __webpack_require__(81579);
-var relateUrl  = __webpack_require__(79550);
-
-
-
-function RelateUrl(from, options)
-{
-	this.options = getOptions(options,
-	{
-		defaultPorts: {ftp:21, http:80, https:443},
-		directoryIndexes: ["index.html"],
-		ignore_www: false,
-		output: RelateUrl.SHORTEST,
-		rejectedSchemes: ["data","javascript","mailto"],
-		removeAuth: false,
-		removeDirectoryIndexes: true,
-		removeEmptyQueries: false,
-		removeRootTrailingSlash: true,
-		schemeRelative: true,
-		site: undefined,
-		slashesDenoteHost: true
-	});
-	
-	this.from = parseUrl.from(from, this.options, null);
-}
-
-
-
-/*
-	Usage: instance=new RelateUrl(); instance.relate();
-*/
-RelateUrl.prototype.relate = function(from, to, options)
-{
-	// relate(to,options)
-	if ( objUtils.isPlainObject(to) )
-	{
-		options = to;
-		to = from;
-		from = null;
-	}
-	// relate(to)
-	else if (!to)
-	{
-		to = from;
-		from = null;
-	}
-	
-	options = getOptions(options, this.options);
-	from = from || options.site;
-	from = parseUrl.from(from, options, this.from);
-	
-	if (!from || !from.href)
-	{
-		throw new Error("from value not defined.");
-	}
-	else if (from.extra.hrefInfo.minimumPathOnly)
-	{
-		throw new Error("from value supplied is not absolute: "+from.href);
-	}
-	
-	to = parseUrl.to(to, options);
-	
-	if (to.valid===false) return to.href;
-	
-	to = relateUrl(from, to, options);
-	to = formatUrl(to, options);
-	
-	return to;
-}
-
-
-
-/*
-	Usage: RelateUrl.relate();
-*/
-RelateUrl.relate = function(from, to, options)
-{
-	return new RelateUrl().relate(from, to, options);
-}
-
-
-
-// Make constants accessible from API
-objUtils.shallowMerge(RelateUrl, constants);
-
-
-
-module.exports = RelateUrl;
-
-
-/***/ }),
-
-/***/ 58509:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var objUtils = __webpack_require__(12900);
-
-
-
-function getOptions(options, defaults)
-{
-	if ( objUtils.isPlainObject(options) )
-	{
-		var newOptions = {};
-		
-		for (var i in defaults)
-		{
-			if ( defaults.hasOwnProperty(i) )
-			{
-				if (options[i] !== undefined)
-				{
-					newOptions[i] = mergeOption(options[i], defaults[i]);
-				}
-				else
-				{
-					newOptions[i] = defaults[i];
-				}
-			}
-		}
-		
-		return newOptions;
-	}
-	else
-	{
-		return defaults;
-	}
-}
-
-
-
-function mergeOption(newValues, defaultValues)
-{
-	if (defaultValues instanceof Object && newValues instanceof Object)
-	{
-		if (defaultValues instanceof Array && newValues instanceof Array)
-		{
-			return defaultValues.concat(newValues);
-		}
-		else
-		{
-			return objUtils.shallowMerge(newValues, defaultValues);
-		}
-	}
-	
-	return newValues;
-}
-
-
-
-module.exports = getOptions;
-
-
-/***/ }),
-
-/***/ 44126:
-/***/ ((module) => {
-
-"use strict";
-
-
-function parseHost(urlObj, options)
-{
-	// TWEAK :: condition only for speed optimization
-	if (options.ignore_www)
-	{
-		var host = urlObj.host.full;
-		
-		if (host)
-		{
-			var stripped = host;
-			
-			if (host.indexOf("www.") === 0)
-			{
-				stripped = host.substr(4);
-			}
-			
-			urlObj.host.stripped = stripped;
-		}
-	}
-}
-
-
-
-module.exports = parseHost;
-
-
-/***/ }),
-
-/***/ 44963:
-/***/ ((module) => {
-
-"use strict";
-
-
-function hrefInfo(urlObj)
-{
-	var minimumPathOnly     = (!urlObj.scheme && !urlObj.auth && !urlObj.host.full && !urlObj.port);
-	var minimumResourceOnly = (minimumPathOnly && !urlObj.path.absolute.string);
-	var minimumQueryOnly    = (minimumResourceOnly && !urlObj.resource);
-	var minimumHashOnly     = (minimumQueryOnly && !urlObj.query.string.full.length);
-	var empty               = (minimumHashOnly && !urlObj.hash);
-	
-	urlObj.extra.hrefInfo.minimumPathOnly     = minimumPathOnly;
-	urlObj.extra.hrefInfo.minimumResourceOnly = minimumResourceOnly;
-	urlObj.extra.hrefInfo.minimumQueryOnly    = minimumQueryOnly;
-	urlObj.extra.hrefInfo.minimumHashOnly     = minimumHashOnly;
-	urlObj.extra.hrefInfo.empty = empty;
-}
-
-
-
-module.exports = hrefInfo;
-
-
-/***/ }),
-
-/***/ 81579:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var hrefInfo   = __webpack_require__(44963);
-var parseHost  = __webpack_require__(44126);
-var parsePath  = __webpack_require__(95875);
-var parsePort  = __webpack_require__(69891);
-var parseQuery = __webpack_require__(11320);
-var parseUrlString = __webpack_require__(64006);
-var pathUtils      = __webpack_require__(23670);
-
-
-
-function parseFromUrl(url, options, fallback)
-{
-	if (url)
-	{
-		var urlObj = parseUrl(url, options);
-		
-		// Because the following occurs in the relate stage for "to" URLs,
-		// such had to be mostly duplicated here
-		
-		var pathArray = pathUtils.resolveDotSegments(urlObj.path.absolute.array);
-		
-		urlObj.path.absolute.array  = pathArray;
-		urlObj.path.absolute.string = "/" + pathUtils.join(pathArray);
-		
-		return urlObj;
-	}
-	else
-	{
-		return fallback;
-	}
-}
-
-
-
-function parseUrl(url, options)
-{
-	var urlObj = parseUrlString(url, options);
-	
-	if (urlObj.valid===false) return urlObj;
-	
-	parseHost(urlObj, options);
-	parsePort(urlObj, options);
-	parsePath(urlObj, options);
-	parseQuery(urlObj, options);
-	hrefInfo(urlObj);
-	
-	return urlObj;
-}
-
-
-
-module.exports =
-{
-	from: parseFromUrl,
-	to:   parseUrl
-};
-
-
-/***/ }),
-
-/***/ 95875:
-/***/ ((module) => {
-
-"use strict";
-
-
-function isDirectoryIndex(resource, options)
-{
-	var verdict = false;
-	
-	options.directoryIndexes.every( function(index)
-	{
-		if (index === resource)
-		{
-			verdict = true;
-			return false;
-		}
-		
-		return true;
-	});
-	
-	return verdict;
-}
-
-
-
-function parsePath(urlObj, options)
-{
-	var path = urlObj.path.absolute.string;
-	
-	if (path)
-	{
-		var lastSlash = path.lastIndexOf("/");
-		
-		if (lastSlash > -1)
-		{
-			if (++lastSlash < path.length)
-			{
-				var resource = path.substr(lastSlash);
-				
-				if (resource!=="." && resource!=="..")
-				{
-					urlObj.resource = resource;
-					path = path.substr(0, lastSlash);
-				}
-				else
-				{
-					path += "/";
-				}
-			}
-			
-			urlObj.path.absolute.string = path;
-			urlObj.path.absolute.array = splitPath(path);
-		}
-		else if (path==="." || path==="..")
-		{
-			// "..?var", "..#anchor", etc ... not "..index.html"
-			path += "/";
-			
-			urlObj.path.absolute.string = path;
-			urlObj.path.absolute.array = splitPath(path);
-		}
-		else
-		{
-			// Resource-only
-			urlObj.resource = path;
-			urlObj.path.absolute.string = null;
-		}
-		
-		urlObj.extra.resourceIsIndex = isDirectoryIndex(urlObj.resource, options);
-	}
-	// Else: query/hash-only or empty
-}
-
-
-
-function splitPath(path)
-{
-	// TWEAK :: condition only for speed optimization
-	if (path !== "/")
-	{
-		var cleaned = [];
-		
-		path.split("/").forEach( function(dir)
-		{
-			// Cleanup -- splitting "/dir/" becomes ["","dir",""]
-			if (dir !== "")
-			{
-				cleaned.push(dir);
-			}
-		});
-		
-		return cleaned;
-	}
-	else
-	{
-		// Faster to skip the above block and just create an array
-		return [];
-	}
-}
-
-
-
-module.exports = parsePath;
-
-
-/***/ }),
-
-/***/ 69891:
-/***/ ((module) => {
-
-"use strict";
-
-
-function parsePort(urlObj, options)
-{
-	var defaultPort = -1;
-	
-	for (var i in options.defaultPorts)
-	{
-		if ( i===urlObj.scheme && options.defaultPorts.hasOwnProperty(i) )
-		{
-			defaultPort = options.defaultPorts[i];
-			break;
-		}
-	}
-	
-	if (defaultPort > -1)
-	{
-		// Force same type as urlObj.port
-		defaultPort = defaultPort.toString();
-		
-		if (urlObj.port === null)
-		{
-			urlObj.port = defaultPort;
-		}
-		
-		urlObj.extra.portIsDefault = (urlObj.port === defaultPort);
-	}
-}
-
-
-
-module.exports = parsePort;
-
-
-/***/ }),
-
-/***/ 11320:
-/***/ ((module) => {
-
-"use strict";
-
-var hasOwnProperty = Object.prototype.hasOwnProperty;
-
-
-
-function parseQuery(urlObj, options)
-{
-	urlObj.query.string.full = stringify(urlObj.query.object, false);
-	
-	// TWEAK :: condition only for speed optimization
-	if (options.removeEmptyQueries)
-	{
-		urlObj.query.string.stripped = stringify(urlObj.query.object, true);
-	}
-}
-
-
-
-function stringify(queryObj, removeEmptyQueries)
-{
-	var count = 0;
-	var str = "";
-	
-	for (var i in queryObj)
-	{
-		if ( i!=="" && hasOwnProperty.call(queryObj, i)===true )
-		{
-			var value = queryObj[i];
-			
-			if (value !== "" || !removeEmptyQueries)
-			{
-				str += (++count===1) ? "?" : "&";
-				
-				i = encodeURIComponent(i);
-				
-				if (value !== "")
-				{
-					str += i +"="+ encodeURIComponent(value).replace(/%20/g,"+");
-				}
-				else
-				{
-					str += i;
-				}
-			}
-		}
-	}
-	
-	return str;
-}
-
-
-
-module.exports = parseQuery;
-
-
-/***/ }),
-
-/***/ 64006:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var _parseUrl = (__webpack_require__(57310).parse);
-
-
-
-/*
-	Customize the URL object that Node generates
-	because:
-	
-	* necessary data for later
-	* urlObj.host is useless
-	* urlObj.hostname is too long
-	* urlObj.path is useless
-	* urlObj.pathname is too long
-	* urlObj.protocol is inaccurate; should be called "scheme"
-	* urlObj.search is mostly useless
-*/
-function clean(urlObj)
-{
-	var scheme = urlObj.protocol;
-	
-	if (scheme)
-	{
-		// Remove ":" suffix
-		if (scheme.indexOf(":") === scheme.length-1)
-		{
-			scheme = scheme.substr(0, scheme.length-1);
-		}
-	}
-	
-	urlObj.host =
-	{
-		// TODO :: unescape(encodeURIComponent(s)) ? ... http://ecmanaut.blogspot.ca/2006/07/encoding-decoding-utf8-in-javascript.html
-		full: urlObj.hostname,
-		stripped: null
-	};
-	
-	urlObj.path =
-	{
-		absolute:
-		{
-			array: null,
-			string: urlObj.pathname
-		},
-		relative:
-		{
-			array: null,
-			string: null
-		}
-	};
-	
-	urlObj.query =
-	{
-		object: urlObj.query,
-		string:
-		{
-			full: null,
-			stripped: null
-		}
-	};
-	
-	urlObj.extra =
-	{
-		hrefInfo:
-		{
-			minimumPathOnly: null,
-			minimumResourceOnly: null,
-			minimumQueryOnly: null,
-			minimumHashOnly: null,
-			empty: null,
-			
-			separatorOnlyQuery: urlObj.search==="?"
-		},
-		portIsDefault: null,
-		relation:
-		{
-			maximumScheme: null,
-			maximumAuth: null,
-			maximumHost: null,
-			maximumPort: null,
-			maximumPath: null,
-			maximumResource: null,
-			maximumQuery: null,
-			maximumHash: null,
-			
-			minimumScheme: null,
-			minimumAuth: null,
-			minimumHost: null,
-			minimumPort: null,
-			minimumPath: null,
-			minimumResource: null,
-			minimumQuery: null,
-			minimumHash: null,
-			
-			overridesQuery: null
-		},
-		resourceIsIndex: null,
-		slashes: urlObj.slashes
-	};
-	
-	urlObj.resource = null;
-	urlObj.scheme = scheme;
-	delete urlObj.hostname;
-	delete urlObj.pathname;
-	delete urlObj.protocol;
-	delete urlObj.search;
-	delete urlObj.slashes;
-	
-	return urlObj;
-}
-
-
-
-function validScheme(url, options)
-{
-	var valid = true;
-	
-	options.rejectedSchemes.every( function(rejectedScheme)
-	{
-		valid = !(url.indexOf(rejectedScheme+":") === 0);
-		
-		// Break loop
-		return valid;
-	});
-	
-	return valid;
-}
-
-
-
-function parseUrlString(url, options)
-{
-	if ( validScheme(url,options) )
-	{
-		return clean( _parseUrl(url, true, options.slashesDenoteHost) );
-	}
-	else
-	{
-		return {href:url, valid:false};
-	}
-}
-
-
-
-module.exports = parseUrlString;
-
-
-/***/ }),
-
-/***/ 38057:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var findRelation = __webpack_require__(40279);
-var objUtils     = __webpack_require__(12900);
-var pathUtils    = __webpack_require__(23670);
-
-
-
-function absolutize(urlObj, siteUrlObj, options)
-{
-	findRelation.upToPath(urlObj, siteUrlObj, options);
-	
-	// Fill in relative URLs
-	if (urlObj.extra.relation.minimumScheme) urlObj.scheme = siteUrlObj.scheme;
-	if (urlObj.extra.relation.minimumAuth)   urlObj.auth   = siteUrlObj.auth;
-	if (urlObj.extra.relation.minimumHost)   urlObj.host   = objUtils.clone(siteUrlObj.host);
-	if (urlObj.extra.relation.minimumPort)   copyPort(urlObj, siteUrlObj);
-	if (urlObj.extra.relation.minimumScheme) copyPath(urlObj, siteUrlObj);
-	
-	// Check remaining relativeness now that path has been copied and/or resolved
-	findRelation.pathOn(urlObj, siteUrlObj, options);
-	
-	// Fill in relative URLs
-	if (urlObj.extra.relation.minimumResource) copyResource(urlObj, siteUrlObj);
-	if (urlObj.extra.relation.minimumQuery)    urlObj.query = objUtils.clone(siteUrlObj.query);
-	if (urlObj.extra.relation.minimumHash)     urlObj.hash  = siteUrlObj.hash;
-}
-
-
-
-/*
-	Get an absolute path that's relative to site url.
-*/
-function copyPath(urlObj, siteUrlObj)
-{
-	if (urlObj.extra.relation.maximumHost || !urlObj.extra.hrefInfo.minimumResourceOnly)
-	{
-		var pathArray = urlObj.path.absolute.array;
-		var pathString = "/";
-		
-		// If not erroneous URL
-		if (pathArray)
-		{
-			// If is relative path
-			if (urlObj.extra.hrefInfo.minimumPathOnly && urlObj.path.absolute.string.indexOf("/")!==0)
-			{
-				// Append path to site path
-				pathArray = siteUrlObj.path.absolute.array.concat(pathArray);
-			}
-			
-			pathArray   = pathUtils.resolveDotSegments(pathArray);
-			pathString += pathUtils.join(pathArray);
-		}
-		else
-		{
-			pathArray = [];
-		}
-		
-		urlObj.path.absolute.array  = pathArray;
-		urlObj.path.absolute.string = pathString;
-	}
-	else
-	{
-		// Resource-, query- or hash-only or empty
-		urlObj.path = objUtils.clone(siteUrlObj.path);
-	}
-}
-
-
-
-function copyPort(urlObj, siteUrlObj)
-{
-	urlObj.port = siteUrlObj.port;
-	
-	urlObj.extra.portIsDefault = siteUrlObj.extra.portIsDefault;
-}
-
-
-
-function copyResource(urlObj, siteUrlObj)
-{
-	urlObj.resource = siteUrlObj.resource;
-	
-	urlObj.extra.resourceIsIndex = siteUrlObj.extra.resourceIsIndex;
-}
-
-
-
-module.exports = absolutize;
-
-
-/***/ }),
-
-/***/ 40279:
-/***/ ((module) => {
-
-"use strict";
-
-
-function findRelation_upToPath(urlObj, siteUrlObj, options)
-{
-	// Path- or root-relative URL
-	var pathOnly = urlObj.extra.hrefInfo.minimumPathOnly;
-	
-	// Matching scheme, scheme-relative or path-only
-	var minimumScheme = (urlObj.scheme===siteUrlObj.scheme || !urlObj.scheme);
-	
-	// Matching auth, ignoring auth or path-only
-	var minimumAuth = minimumScheme && (urlObj.auth===siteUrlObj.auth || options.removeAuth || pathOnly);
-	
-	// Matching host or path-only
-	var www = options.ignore_www ? "stripped" : "full";
-	var minimumHost = minimumAuth && (urlObj.host[www]===siteUrlObj.host[www] || pathOnly);
-	
-	// Matching port or path-only
-	var minimumPort = minimumHost && (urlObj.port===siteUrlObj.port || pathOnly);
-	
-	urlObj.extra.relation.minimumScheme = minimumScheme;
-	urlObj.extra.relation.minimumAuth   = minimumAuth;
-	urlObj.extra.relation.minimumHost   = minimumHost;
-	urlObj.extra.relation.minimumPort   = minimumPort;
-	
-	urlObj.extra.relation.maximumScheme = !minimumScheme || minimumScheme && !minimumAuth;
-	urlObj.extra.relation.maximumAuth   = !minimumScheme || minimumScheme && !minimumHost;
-	urlObj.extra.relation.maximumHost   = !minimumScheme || minimumScheme && !minimumPort;
-}
-
-
-
-function findRelation_pathOn(urlObj, siteUrlObj, options)
-{
-	var queryOnly = urlObj.extra.hrefInfo.minimumQueryOnly;
-	var hashOnly  = urlObj.extra.hrefInfo.minimumHashOnly;
-	var empty     = urlObj.extra.hrefInfo.empty;	// not required, but self-documenting
-	
-	// From upToPath()
-	var minimumPort   = urlObj.extra.relation.minimumPort;
-	var minimumScheme = urlObj.extra.relation.minimumScheme;
-	
-	// Matching port and path
-	var minimumPath = minimumPort && urlObj.path.absolute.string===siteUrlObj.path.absolute.string;
-	
-	// Matching resource or query/hash-only or empty
-	var matchingResource = (urlObj.resource===siteUrlObj.resource || !urlObj.resource && siteUrlObj.extra.resourceIsIndex) || (options.removeDirectoryIndexes && urlObj.extra.resourceIsIndex && !siteUrlObj.resource);
-	var minimumResource = minimumPath && (matchingResource || queryOnly || hashOnly || empty);
-	
-	// Matching query or hash-only/empty
-	var query = options.removeEmptyQueries ? "stripped" : "full";
-	var urlQuery = urlObj.query.string[query];
-	var siteUrlQuery = siteUrlObj.query.string[query];
-	var minimumQuery = (minimumResource && !!urlQuery && urlQuery===siteUrlQuery) || ((hashOnly || empty) && !urlObj.extra.hrefInfo.separatorOnlyQuery);
-	
-	var minimumHash = minimumQuery && urlObj.hash===siteUrlObj.hash;
-	
-	urlObj.extra.relation.minimumPath     = minimumPath;
-	urlObj.extra.relation.minimumResource = minimumResource;
-	urlObj.extra.relation.minimumQuery    = minimumQuery;
-	urlObj.extra.relation.minimumHash     = minimumHash;
-	
-	urlObj.extra.relation.maximumPort     = !minimumScheme || minimumScheme && !minimumPath;
-	urlObj.extra.relation.maximumPath     = !minimumScheme || minimumScheme && !minimumResource;
-	urlObj.extra.relation.maximumResource = !minimumScheme || minimumScheme && !minimumQuery;
-	urlObj.extra.relation.maximumQuery    = !minimumScheme || minimumScheme && !minimumHash;
-	urlObj.extra.relation.maximumHash     = !minimumScheme || minimumScheme && !minimumHash;	// there's nothing after hash, so it's the same as maximumQuery
-	
-	// Matching path and/or resource with existing but non-matching site query
-	urlObj.extra.relation.overridesQuery  = minimumPath && urlObj.extra.relation.maximumResource && !minimumQuery && !!siteUrlQuery;
-}
-
-
-
-module.exports =
-{
-	pathOn:   findRelation_pathOn,
-	upToPath: findRelation_upToPath
-};
-
-
-/***/ }),
-
-/***/ 79550:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var absolutize = __webpack_require__(38057);
-var relativize = __webpack_require__(40376);
-
-
-
-function relateUrl(siteUrlObj, urlObj, options)
-{
-	absolutize(urlObj, siteUrlObj, options);
-	relativize(urlObj, siteUrlObj, options);
-	
-	return urlObj;
-}
-
-
-
-module.exports = relateUrl;
-
-
-/***/ }),
-
-/***/ 40376:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-var pathUtils = __webpack_require__(23670);
-
-
-
-/*
-	Get a path relative to the site path.
-*/
-function relatePath(absolutePath, siteAbsolutePath)
-{
-	var relativePath = [];
-	
-	// At this point, it's related to the host/port
-	var related = true;
-	var parentIndex = -1;
-	
-	// Find parents
-	siteAbsolutePath.forEach( function(siteAbsoluteDir, i)
-	{
-		if (related)
-		{
-			if (absolutePath[i] !== siteAbsoluteDir)
-			{
-				related = false;
-			}
-			else
-			{
-				parentIndex = i;
-			}
-		}
-		
-		if (!related)
-		{
-			// Up one level
-			relativePath.push("..");
-		}
-	});
-	
-	// Form path
-	absolutePath.forEach( function(dir, i)
-	{
-		if (i > parentIndex)
-		{
-			relativePath.push(dir);
-		}
-	});
-	
-	return relativePath;
-}
-
-
-
-function relativize(urlObj, siteUrlObj, options)
-{
-	if (urlObj.extra.relation.minimumScheme)
-	{
-		var pathArray = relatePath(urlObj.path.absolute.array, siteUrlObj.path.absolute.array);
-		
-		urlObj.path.relative.array  = pathArray;
-		urlObj.path.relative.string = pathUtils.join(pathArray);
-	}
-}
-
-
-
-module.exports = relativize;
-
-
-/***/ }),
-
-/***/ 12900:
-/***/ ((module) => {
-
-"use strict";
-
-
-/*
-	Deep-clone an object.
-*/
-function clone(obj)
-{
-	if (obj instanceof Object)
-	{
-		var clonedObj = (obj instanceof Array) ? [] : {};
-		
-		for (var i in obj)
-		{
-			if ( obj.hasOwnProperty(i) )
-			{
-				clonedObj[i] = clone( obj[i] );
-			}
-		}
-		
-		return clonedObj;
-	}
-	
-	return obj;
-}
-
-
-
-/*
-	https://github.com/jonschlinkert/is-plain-object
-*/
-function isPlainObject(obj)
-{
-	return !!obj && typeof obj==="object" && obj.constructor===Object;
-}
-
-
-
-/*
-	Shallow-merge two objects.
-*/
-function shallowMerge(target, source)
-{
-	if (target instanceof Object && source instanceof Object)
-	{
-		for (var i in source)
-		{
-			if ( source.hasOwnProperty(i) )
-			{
-				target[i] = source[i];
-			}
-		}
-	}
-	
-	return target;
-}
-
-
-
-module.exports =
-{
-	clone: clone,
-	isPlainObject: isPlainObject,
-	shallowMerge: shallowMerge
-};
-
-
-/***/ }),
-
-/***/ 23670:
-/***/ ((module) => {
-
-"use strict";
-
-
-function joinPath(pathArray)
-{
-	if (pathArray.length > 0)
-	{
-		return pathArray.join("/") + "/";
-	}
-	else
-	{
-		return "";
-	}
-}
-
-
-
-function resolveDotSegments(pathArray)
-{
-	var pathAbsolute = [];
-	
-	pathArray.forEach( function(dir)
-	{
-		if (dir !== "..")
-		{
-			if (dir !== ".")
-			{
-				pathAbsolute.push(dir);
-			}
-		}
-		else
-		{
-			// Remove parent
-			if (pathAbsolute.length > 0)
-			{
-				pathAbsolute.splice(pathAbsolute.length-1, 1);
-			}
-		}
-	});
-	
-	return pathAbsolute;
-}
-
-
-
-module.exports =
-{
-	join: joinPath,
-	resolveDotSegments: resolveDotSegments
-};
-
-
-/***/ }),
-
-/***/ 60053:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-/** @license React v0.20.2
- * scheduler.production.min.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-var f,g,h,k;if("object"===typeof performance&&"function"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}
-if("undefined"===typeof window||"function"!==typeof MessageChannel){var t=null,u=null,w=function(){if(null!==t)try{var a=exports.unstable_now();t(!0,a);t=null}catch(b){throw setTimeout(w,0),b;}};f=function(a){null!==t?setTimeout(f,0,a):(t=a,setTimeout(w,0))};g=function(a,b){u=setTimeout(a,b)};h=function(){clearTimeout(u)};exports.unstable_shouldYield=function(){return!1};k=exports.unstable_forceFrameRate=function(){}}else{var x=window.setTimeout,y=window.clearTimeout;if("undefined"!==typeof console){var z=
-window.cancelAnimationFrame;"function"!==typeof window.requestAnimationFrame&&console.error("This browser doesn't support requestAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills");"function"!==typeof z&&console.error("This browser doesn't support cancelAnimationFrame. Make sure that you load a polyfill in older browsers. https://reactjs.org/link/react-polyfills")}var A=!1,B=null,C=-1,D=5,E=0;exports.unstable_shouldYield=function(){return exports.unstable_now()>=
-E};k=function(){};exports.unstable_forceFrameRate=function(a){0>a||125<a?console.error("forceFrameRate takes a positive int between 0 and 125, forcing frame rates higher than 125 fps is not supported"):D=0<a?Math.floor(1E3/a):5};var F=new MessageChannel,G=F.port2;F.port1.onmessage=function(){if(null!==B){var a=exports.unstable_now();E=a+D;try{B(!0,a)?G.postMessage(null):(A=!1,B=null)}catch(b){throw G.postMessage(null),b;}}else A=!1};f=function(a){B=a;A||(A=!0,G.postMessage(null))};g=function(a,b){C=
-x(function(){a(exports.unstable_now())},b)};h=function(){y(C);C=-1}}function H(a,b){var c=a.length;a.push(b);a:for(;;){var d=c-1>>>1,e=a[d];if(void 0!==e&&0<I(e,b))a[d]=b,a[c]=e,c=d;else break a}}function J(a){a=a[0];return void 0===a?null:a}
-function K(a){var b=a[0];if(void 0!==b){var c=a.pop();if(c!==b){a[0]=c;a:for(var d=0,e=a.length;d<e;){var m=2*(d+1)-1,n=a[m],v=m+1,r=a[v];if(void 0!==n&&0>I(n,c))void 0!==r&&0>I(r,n)?(a[d]=r,a[v]=c,d=v):(a[d]=n,a[m]=c,d=m);else if(void 0!==r&&0>I(r,c))a[d]=r,a[v]=c,d=v;else break a}}return b}return null}function I(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}var L=[],M=[],N=1,O=null,P=3,Q=!1,R=!1,S=!1;
-function T(a){for(var b=J(M);null!==b;){if(null===b.callback)K(M);else if(b.startTime<=a)K(M),b.sortIndex=b.expirationTime,H(L,b);else break;b=J(M)}}function U(a){S=!1;T(a);if(!R)if(null!==J(L))R=!0,f(V);else{var b=J(M);null!==b&&g(U,b.startTime-a)}}
-function V(a,b){R=!1;S&&(S=!1,h());Q=!0;var c=P;try{T(b);for(O=J(L);null!==O&&(!(O.expirationTime>b)||a&&!exports.unstable_shouldYield());){var d=O.callback;if("function"===typeof d){O.callback=null;P=O.priorityLevel;var e=d(O.expirationTime<=b);b=exports.unstable_now();"function"===typeof e?O.callback=e:O===J(L)&&K(L);T(b)}else K(L);O=J(L)}if(null!==O)var m=!0;else{var n=J(M);null!==n&&g(U,n.startTime-b);m=!1}return m}finally{O=null,P=c,Q=!1}}var W=k;exports.unstable_IdlePriority=5;
-exports.unstable_ImmediatePriority=1;exports.unstable_LowPriority=4;exports.unstable_NormalPriority=3;exports.unstable_Profiling=null;exports.unstable_UserBlockingPriority=2;exports.unstable_cancelCallback=function(a){a.callback=null};exports.unstable_continueExecution=function(){R||Q||(R=!0,f(V))};exports.unstable_getCurrentPriorityLevel=function(){return P};exports.unstable_getFirstCallbackNode=function(){return J(L)};
-exports.unstable_next=function(a){switch(P){case 1:case 2:case 3:var b=3;break;default:b=P}var c=P;P=b;try{return a()}finally{P=c}};exports.unstable_pauseExecution=function(){};exports.unstable_requestPaint=W;exports.unstable_runWithPriority=function(a,b){switch(a){case 1:case 2:case 3:case 4:case 5:break;default:a=3}var c=P;P=a;try{return b()}finally{P=c}};
-exports.unstable_scheduleCallback=function(a,b,c){var d=exports.unstable_now();"object"===typeof c&&null!==c?(c=c.delay,c="number"===typeof c&&0<c?d+c:d):c=d;switch(a){case 1:var e=-1;break;case 2:e=250;break;case 5:e=1073741823;break;case 4:e=1E4;break;default:e=5E3}e=c+e;a={id:N++,callback:b,priorityLevel:a,startTime:c,expirationTime:e,sortIndex:-1};c>d?(a.sortIndex=c,H(M,a),null===J(L)&&a===J(M)&&(S?h():S=!0,g(U,c-d))):(a.sortIndex=e,H(L,a),R||Q||(R=!0,f(V)));return a};
-exports.unstable_wrapCallback=function(a){var b=P;return function(){var c=P;P=b;try{return a.apply(this,arguments)}finally{P=c}}};
-
-
-/***/ }),
-
-/***/ 63840:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-if (true) {
-  module.exports = __webpack_require__(60053);
-} else {}
-
-
-/***/ }),
-
-/***/ 10577:
-/***/ ((module) => {
-
-/*!
-* screenfull
-* v5.2.0 - 2021-11-03
-* (c) Sindre Sorhus; MIT License
-*/
-(function () {
-	'use strict';
-
-	var document = typeof window !== 'undefined' && typeof window.document !== 'undefined' ? window.document : {};
-	var isCommonjs =  true && module.exports;
-
-	var fn = (function () {
-		var val;
-
-		var fnMap = [
-			[
-				'requestFullscreen',
-				'exitFullscreen',
-				'fullscreenElement',
-				'fullscreenEnabled',
-				'fullscreenchange',
-				'fullscreenerror'
-			],
-			// New WebKit
-			[
-				'webkitRequestFullscreen',
-				'webkitExitFullscreen',
-				'webkitFullscreenElement',
-				'webkitFullscreenEnabled',
-				'webkitfullscreenchange',
-				'webkitfullscreenerror'
-
-			],
-			// Old WebKit
-			[
-				'webkitRequestFullScreen',
-				'webkitCancelFullScreen',
-				'webkitCurrentFullScreenElement',
-				'webkitCancelFullScreen',
-				'webkitfullscreenchange',
-				'webkitfullscreenerror'
-
-			],
-			[
-				'mozRequestFullScreen',
-				'mozCancelFullScreen',
-				'mozFullScreenElement',
-				'mozFullScreenEnabled',
-				'mozfullscreenchange',
-				'mozfullscreenerror'
-			],
-			[
-				'msRequestFullscreen',
-				'msExitFullscreen',
-				'msFullscreenElement',
-				'msFullscreenEnabled',
-				'MSFullscreenChange',
-				'MSFullscreenError'
-			]
-		];
-
-		var i = 0;
-		var l = fnMap.length;
-		var ret = {};
-
-		for (; i < l; i++) {
-			val = fnMap[i];
-			if (val && val[1] in document) {
-				for (i = 0; i < val.length; i++) {
-					ret[fnMap[0][i]] = val[i];
-				}
-				return ret;
-			}
-		}
-
-		return false;
-	})();
-
-	var eventNameMap = {
-		change: fn.fullscreenchange,
-		error: fn.fullscreenerror
-	};
-
-	var screenfull = {
-		request: function (element, options) {
-			return new Promise(function (resolve, reject) {
-				var onFullScreenEntered = function () {
-					this.off('change', onFullScreenEntered);
-					resolve();
-				}.bind(this);
-
-				this.on('change', onFullScreenEntered);
-
-				element = element || document.documentElement;
-
-				var returnPromise = element[fn.requestFullscreen](options);
-
-				if (returnPromise instanceof Promise) {
-					returnPromise.then(onFullScreenEntered).catch(reject);
-				}
-			}.bind(this));
-		},
-		exit: function () {
-			return new Promise(function (resolve, reject) {
-				if (!this.isFullscreen) {
-					resolve();
-					return;
-				}
-
-				var onFullScreenExit = function () {
-					this.off('change', onFullScreenExit);
-					resolve();
-				}.bind(this);
-
-				this.on('change', onFullScreenExit);
-
-				var returnPromise = document[fn.exitFullscreen]();
-
-				if (returnPromise instanceof Promise) {
-					returnPromise.then(onFullScreenExit).catch(reject);
-				}
-			}.bind(this));
-		},
-		toggle: function (element, options) {
-			return this.isFullscreen ? this.exit() : this.request(element, options);
-		},
-		onchange: function (callback) {
-			this.on('change', callback);
-		},
-		onerror: function (callback) {
-			this.on('error', callback);
-		},
-		on: function (event, callback) {
-			var eventName = eventNameMap[event];
-			if (eventName) {
-				document.addEventListener(eventName, callback, false);
-			}
-		},
-		off: function (event, callback) {
-			var eventName = eventNameMap[event];
-			if (eventName) {
-				document.removeEventListener(eventName, callback, false);
-			}
-		},
-		raw: fn
-	};
-
-	if (!fn) {
-		if (isCommonjs) {
-			module.exports = {isEnabled: false};
-		} else {
-			window.screenfull = {isEnabled: false};
-		}
-
-		return;
-	}
-
-	Object.defineProperties(screenfull, {
-		isFullscreen: {
-			get: function () {
-				return Boolean(document[fn.fullscreenElement]);
-			}
-		},
-		element: {
-			enumerable: true,
-			get: function () {
-				return document[fn.fullscreenElement];
-			}
-		},
-		isEnabled: {
-			enumerable: true,
-			get: function () {
-				// Coerce to boolean in case of old WebKit
-				return Boolean(document[fn.fullscreenEnabled]);
-			}
-		}
-	});
-
-	if (isCommonjs) {
-		module.exports = screenfull;
-	} else {
-		window.screenfull = screenfull;
-	}
-})();
-
-
-/***/ }),
-
-/***/ 96774:
-/***/ ((module) => {
-
-//
-
-module.exports = function shallowEqual(objA, objB, compare, compareContext) {
-  var ret = compare ? compare.call(compareContext, objA, objB) : void 0;
-
-  if (ret !== void 0) {
-    return !!ret;
-  }
-
-  if (objA === objB) {
-    return true;
-  }
-
-  if (typeof objA !== "object" || !objA || typeof objB !== "object" || !objB) {
-    return false;
-  }
-
-  var keysA = Object.keys(objA);
-  var keysB = Object.keys(objB);
-
-  if (keysA.length !== keysB.length) {
-    return false;
-  }
-
-  var bHasOwnProperty = Object.prototype.hasOwnProperty.bind(objB);
-
-  // Test for A's keys different from B.
-  for (var idx = 0; idx < keysA.length; idx++) {
-    var key = keysA[idx];
-
-    if (!bHasOwnProperty(key)) {
-      return false;
-    }
-
-    var valueA = objA[key];
-    var valueB = objB[key];
-
-    ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0;
-
-    if (ret === false || (ret === void 0 && valueA !== valueB)) {
-      return false;
-    }
-  }
-
-  return true;
-};
-
-
-/***/ }),
-
-/***/ 78213:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var util = __webpack_require__(32728);
-var has = Object.prototype.hasOwnProperty;
-var hasNativeMap = typeof Map !== "undefined";
-
-/**
- * A data structure which is a combination of an array and a set. Adding a new
- * member is O(1), testing for membership is O(1), and finding the index of an
- * element is O(1). Removing elements from the set is not supported. Only
- * strings are supported for membership.
- */
-function ArraySet() {
-  this._array = [];
-  this._set = hasNativeMap ? new Map() : Object.create(null);
-}
-
-/**
- * Static method for creating ArraySet instances from an existing array.
- */
-ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
-  var set = new ArraySet();
-  for (var i = 0, len = aArray.length; i < len; i++) {
-    set.add(aArray[i], aAllowDuplicates);
-  }
-  return set;
-};
-
-/**
- * Return how many unique items are in this ArraySet. If duplicates have been
- * added, than those do not count towards the size.
- *
- * @returns Number
- */
-ArraySet.prototype.size = function ArraySet_size() {
-  return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
-};
-
-/**
- * Add the given string to this set.
- *
- * @param String aStr
- */
-ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
-  var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
-  var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
-  var idx = this._array.length;
-  if (!isDuplicate || aAllowDuplicates) {
-    this._array.push(aStr);
-  }
-  if (!isDuplicate) {
-    if (hasNativeMap) {
-      this._set.set(aStr, idx);
-    } else {
-      this._set[sStr] = idx;
-    }
-  }
-};
-
-/**
- * Is the given string a member of this set?
- *
- * @param String aStr
- */
-ArraySet.prototype.has = function ArraySet_has(aStr) {
-  if (hasNativeMap) {
-    return this._set.has(aStr);
-  } else {
-    var sStr = util.toSetString(aStr);
-    return has.call(this._set, sStr);
-  }
-};
-
-/**
- * What is the index of the given string in the array?
- *
- * @param String aStr
- */
-ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
-  if (hasNativeMap) {
-    var idx = this._set.get(aStr);
-    if (idx >= 0) {
-        return idx;
-    }
-  } else {
-    var sStr = util.toSetString(aStr);
-    if (has.call(this._set, sStr)) {
-      return this._set[sStr];
-    }
-  }
-
-  throw new Error('"' + aStr + '" is not in the set.');
-};
-
-/**
- * What is the element at the given index?
- *
- * @param Number aIdx
- */
-ArraySet.prototype.at = function ArraySet_at(aIdx) {
-  if (aIdx >= 0 && aIdx < this._array.length) {
-    return this._array[aIdx];
-  }
-  throw new Error('No element indexed by ' + aIdx);
-};
-
-/**
- * Returns the array representation of this set (which has the proper indices
- * indicated by indexOf). Note that this is a copy of the internal array used
- * for storing the members so that no one can mess with internal state.
- */
-ArraySet.prototype.toArray = function ArraySet_toArray() {
-  return this._array.slice();
-};
-
-exports.I = ArraySet;
-
-
-/***/ }),
-
-/***/ 16400:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- *
- * Based on the Base 64 VLQ implementation in Closure Compiler:
- * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
- *
- * Copyright 2011 The Closure Compiler Authors. All rights reserved.
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *  * Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- *  * Redistributions in binary form must reproduce the above
- *    copyright notice, this list of conditions and the following
- *    disclaimer in the documentation and/or other materials provided
- *    with the distribution.
- *  * Neither the name of Google Inc. nor the names of its
- *    contributors may be used to endorse or promote products derived
- *    from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-var base64 = __webpack_require__(67923);
-
-// A single base 64 digit can contain 6 bits of data. For the base 64 variable
-// length quantities we use in the source map spec, the first bit is the sign,
-// the next four bits are the actual value, and the 6th bit is the
-// continuation bit. The continuation bit tells us whether there are more
-// digits in this value following this digit.
-//
-//   Continuation
-//   |    Sign
-//   |    |
-//   V    V
-//   101011
-
-var VLQ_BASE_SHIFT = 5;
-
-// binary: 100000
-var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
-
-// binary: 011111
-var VLQ_BASE_MASK = VLQ_BASE - 1;
-
-// binary: 100000
-var VLQ_CONTINUATION_BIT = VLQ_BASE;
-
-/**
- * Converts from a two-complement value to a value where the sign bit is
- * placed in the least significant bit.  For example, as decimals:
- *   1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
- *   2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
- */
-function toVLQSigned(aValue) {
-  return aValue < 0
-    ? ((-aValue) << 1) + 1
-    : (aValue << 1) + 0;
-}
-
-/**
- * Converts to a two-complement value from a value where the sign bit is
- * placed in the least significant bit.  For example, as decimals:
- *   2 (10 binary) becomes 1, 3 (11 binary) becomes -1
- *   4 (100 binary) becomes 2, 5 (101 binary) becomes -2
- */
-function fromVLQSigned(aValue) {
-  var isNegative = (aValue & 1) === 1;
-  var shifted = aValue >> 1;
-  return isNegative
-    ? -shifted
-    : shifted;
-}
-
-/**
- * Returns the base 64 VLQ encoded value.
- */
-exports.encode = function base64VLQ_encode(aValue) {
-  var encoded = "";
-  var digit;
-
-  var vlq = toVLQSigned(aValue);
-
-  do {
-    digit = vlq & VLQ_BASE_MASK;
-    vlq >>>= VLQ_BASE_SHIFT;
-    if (vlq > 0) {
-      // There are still more digits in this value, so we must make sure the
-      // continuation bit is marked.
-      digit |= VLQ_CONTINUATION_BIT;
-    }
-    encoded += base64.encode(digit);
-  } while (vlq > 0);
-
-  return encoded;
-};
-
-/**
- * Decodes the next base 64 VLQ value from the given string and returns the
- * value and the rest of the string via the out parameter.
- */
-exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
-  var strLen = aStr.length;
-  var result = 0;
-  var shift = 0;
-  var continuation, digit;
-
-  do {
-    if (aIndex >= strLen) {
-      throw new Error("Expected more digits in base 64 VLQ value.");
-    }
-
-    digit = base64.decode(aStr.charCodeAt(aIndex++));
-    if (digit === -1) {
-      throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
-    }
-
-    continuation = !!(digit & VLQ_CONTINUATION_BIT);
-    digit &= VLQ_BASE_MASK;
-    result = result + (digit << shift);
-    shift += VLQ_BASE_SHIFT;
-  } while (continuation);
-
-  aOutParam.value = fromVLQSigned(result);
-  aOutParam.rest = aIndex;
-};
-
-
-/***/ }),
-
-/***/ 67923:
-/***/ ((__unused_webpack_module, exports) => {
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
-
-/**
- * Encode an integer in the range of 0 to 63 to a single base 64 digit.
- */
-exports.encode = function (number) {
-  if (0 <= number && number < intToCharMap.length) {
-    return intToCharMap[number];
-  }
-  throw new TypeError("Must be between 0 and 63: " + number);
-};
-
-/**
- * Decode a single base 64 character code digit to an integer. Returns -1 on
- * failure.
- */
-exports.decode = function (charCode) {
-  var bigA = 65;     // 'A'
-  var bigZ = 90;     // 'Z'
-
-  var littleA = 97;  // 'a'
-  var littleZ = 122; // 'z'
-
-  var zero = 48;     // '0'
-  var nine = 57;     // '9'
-
-  var plus = 43;     // '+'
-  var slash = 47;    // '/'
-
-  var littleOffset = 26;
-  var numberOffset = 52;
-
-  // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
-  if (bigA <= charCode && charCode <= bigZ) {
-    return (charCode - bigA);
-  }
-
-  // 26 - 51: abcdefghijklmnopqrstuvwxyz
-  if (littleA <= charCode && charCode <= littleZ) {
-    return (charCode - littleA + littleOffset);
-  }
-
-  // 52 - 61: 0123456789
-  if (zero <= charCode && charCode <= nine) {
-    return (charCode - zero + numberOffset);
-  }
-
-  // 62: +
-  if (charCode == plus) {
-    return 62;
-  }
-
-  // 63: /
-  if (charCode == slash) {
-    return 63;
-  }
-
-  // Invalid base64 digit.
-  return -1;
-};
-
-
-/***/ }),
-
-/***/ 9216:
-/***/ ((__unused_webpack_module, exports) => {
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-exports.GREATEST_LOWER_BOUND = 1;
-exports.LEAST_UPPER_BOUND = 2;
-
-/**
- * Recursive implementation of binary search.
- *
- * @param aLow Indices here and lower do not contain the needle.
- * @param aHigh Indices here and higher do not contain the needle.
- * @param aNeedle The element being searched for.
- * @param aHaystack The non-empty array being searched.
- * @param aCompare Function which takes two elements and returns -1, 0, or 1.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- *     closest element that is smaller than or greater than the one we are
- *     searching for, respectively, if the exact element cannot be found.
- */
-function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
-  // This function terminates when one of the following is true:
-  //
-  //   1. We find the exact element we are looking for.
-  //
-  //   2. We did not find the exact element, but we can return the index of
-  //      the next-closest element.
-  //
-  //   3. We did not find the exact element, and there is no next-closest
-  //      element than the one we are searching for, so we return -1.
-  var mid = Math.floor((aHigh - aLow) / 2) + aLow;
-  var cmp = aCompare(aNeedle, aHaystack[mid], true);
-  if (cmp === 0) {
-    // Found the element we are looking for.
-    return mid;
-  }
-  else if (cmp > 0) {
-    // Our needle is greater than aHaystack[mid].
-    if (aHigh - mid > 1) {
-      // The element is in the upper half.
-      return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
-    }
-
-    // The exact needle element was not found in this haystack. Determine if
-    // we are in termination case (3) or (2) and return the appropriate thing.
-    if (aBias == exports.LEAST_UPPER_BOUND) {
-      return aHigh < aHaystack.length ? aHigh : -1;
-    } else {
-      return mid;
-    }
-  }
-  else {
-    // Our needle is less than aHaystack[mid].
-    if (mid - aLow > 1) {
-      // The element is in the lower half.
-      return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
-    }
-
-    // we are in termination case (3) or (2) and return the appropriate thing.
-    if (aBias == exports.LEAST_UPPER_BOUND) {
-      return mid;
-    } else {
-      return aLow < 0 ? -1 : aLow;
-    }
-  }
-}
-
-/**
- * This is an implementation of binary search which will always try and return
- * the index of the closest element if there is no exact hit. This is because
- * mappings between original and generated line/col pairs are single points,
- * and there is an implicit region between each of them, so a miss just means
- * that you aren't on the very start of a region.
- *
- * @param aNeedle The element you are looking for.
- * @param aHaystack The array that is being searched.
- * @param aCompare A function which takes the needle and an element in the
- *     array and returns -1, 0, or 1 depending on whether the needle is less
- *     than, equal to, or greater than the element, respectively.
- * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
- *     'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
- *     closest element that is smaller than or greater than the one we are
- *     searching for, respectively, if the exact element cannot be found.
- *     Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
- */
-exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
-  if (aHaystack.length === 0) {
-    return -1;
-  }
-
-  var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
-                              aCompare, aBias || exports.GREATEST_LOWER_BOUND);
-  if (index < 0) {
-    return -1;
-  }
-
-  // We have found either the exact element, or the next-closest element than
-  // the one we are searching for. However, there may be more than one such
-  // element. Make sure we always return the smallest of these.
-  while (index - 1 >= 0) {
-    if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
-      break;
-    }
-    --index;
-  }
-
-  return index;
-};
-
-
-/***/ }),
-
-/***/ 21188:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2014 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var util = __webpack_require__(32728);
-
-/**
- * Determine whether mappingB is after mappingA with respect to generated
- * position.
- */
-function generatedPositionAfter(mappingA, mappingB) {
-  // Optimized for most common case
-  var lineA = mappingA.generatedLine;
-  var lineB = mappingB.generatedLine;
-  var columnA = mappingA.generatedColumn;
-  var columnB = mappingB.generatedColumn;
-  return lineB > lineA || lineB == lineA && columnB >= columnA ||
-         util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
-}
-
-/**
- * A data structure to provide a sorted view of accumulated mappings in a
- * performance conscious manner. It trades a neglibable overhead in general
- * case for a large speedup in case of mappings being added in order.
- */
-function MappingList() {
-  this._array = [];
-  this._sorted = true;
-  // Serves as infimum
-  this._last = {generatedLine: -1, generatedColumn: 0};
-}
-
-/**
- * Iterate through internal items. This method takes the same arguments that
- * `Array.prototype.forEach` takes.
- *
- * NOTE: The order of the mappings is NOT guaranteed.
- */
-MappingList.prototype.unsortedForEach =
-  function MappingList_forEach(aCallback, aThisArg) {
-    this._array.forEach(aCallback, aThisArg);
-  };
-
-/**
- * Add the given source mapping.
- *
- * @param Object aMapping
- */
-MappingList.prototype.add = function MappingList_add(aMapping) {
-  if (generatedPositionAfter(this._last, aMapping)) {
-    this._last = aMapping;
-    this._array.push(aMapping);
-  } else {
-    this._sorted = false;
-    this._array.push(aMapping);
-  }
-};
-
-/**
- * Returns the flat, sorted array of mappings. The mappings are sorted by
- * generated position.
- *
- * WARNING: This method returns internal data without copying, for
- * performance. The return value must NOT be mutated, and should be treated as
- * an immutable borrow. If you want to take ownership, you must make your own
- * copy.
- */
-MappingList.prototype.toArray = function MappingList_toArray() {
-  if (!this._sorted) {
-    this._array.sort(util.compareByGeneratedPositionsInflated);
-    this._sorted = true;
-  }
-  return this._array;
-};
-
-exports.H = MappingList;
-
-
-/***/ }),
-
-/***/ 22826:
-/***/ ((__unused_webpack_module, exports) => {
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-// It turns out that some (most?) JavaScript engines don't self-host
-// `Array.prototype.sort`. This makes sense because C++ will likely remain
-// faster than JS when doing raw CPU-intensive sorting. However, when using a
-// custom comparator function, calling back and forth between the VM's C++ and
-// JIT'd JS is rather slow *and* loses JIT type information, resulting in
-// worse generated code for the comparator function than would be optimal. In
-// fact, when sorting with a comparator, these costs outweigh the benefits of
-// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
-// a ~3500ms mean speed-up in `bench/bench.html`.
-
-/**
- * Swap the elements indexed by `x` and `y` in the array `ary`.
- *
- * @param {Array} ary
- *        The array.
- * @param {Number} x
- *        The index of the first item.
- * @param {Number} y
- *        The index of the second item.
- */
-function swap(ary, x, y) {
-  var temp = ary[x];
-  ary[x] = ary[y];
-  ary[y] = temp;
-}
-
-/**
- * Returns a random integer within the range `low .. high` inclusive.
- *
- * @param {Number} low
- *        The lower bound on the range.
- * @param {Number} high
- *        The upper bound on the range.
- */
-function randomIntInRange(low, high) {
-  return Math.round(low + (Math.random() * (high - low)));
-}
-
-/**
- * The Quick Sort algorithm.
- *
- * @param {Array} ary
- *        An array to sort.
- * @param {function} comparator
- *        Function to use to compare two items.
- * @param {Number} p
- *        Start index of the array
- * @param {Number} r
- *        End index of the array
- */
-function doQuickSort(ary, comparator, p, r) {
-  // If our lower bound is less than our upper bound, we (1) partition the
-  // array into two pieces and (2) recurse on each half. If it is not, this is
-  // the empty array and our base case.
-
-  if (p < r) {
-    // (1) Partitioning.
-    //
-    // The partitioning chooses a pivot between `p` and `r` and moves all
-    // elements that are less than or equal to the pivot to the before it, and
-    // all the elements that are greater than it after it. The effect is that
-    // once partition is done, the pivot is in the exact place it will be when
-    // the array is put in sorted order, and it will not need to be moved
-    // again. This runs in O(n) time.
-
-    // Always choose a random pivot so that an input array which is reverse
-    // sorted does not cause O(n^2) running time.
-    var pivotIndex = randomIntInRange(p, r);
-    var i = p - 1;
-
-    swap(ary, pivotIndex, r);
-    var pivot = ary[r];
-
-    // Immediately after `j` is incremented in this loop, the following hold
-    // true:
-    //
-    //   * Every element in `ary[p .. i]` is less than or equal to the pivot.
-    //
-    //   * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
-    for (var j = p; j < r; j++) {
-      if (comparator(ary[j], pivot) <= 0) {
-        i += 1;
-        swap(ary, i, j);
-      }
-    }
-
-    swap(ary, i + 1, j);
-    var q = i + 1;
-
-    // (2) Recurse on each half.
-
-    doQuickSort(ary, comparator, p, q - 1);
-    doQuickSort(ary, comparator, q + 1, r);
-  }
-}
-
-/**
- * Sort the given array in-place with the given comparator function.
- *
- * @param {Array} ary
- *        An array to sort.
- * @param {function} comparator
- *        Function to use to compare two items.
- */
-exports.U = function (ary, comparator) {
-  doQuickSort(ary, comparator, 0, ary.length - 1);
-};
-
-
-/***/ }),
-
-/***/ 76771:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-var __webpack_unused_export__;
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var util = __webpack_require__(32728);
-var binarySearch = __webpack_require__(9216);
-var ArraySet = (__webpack_require__(78213)/* .ArraySet */ .I);
-var base64VLQ = __webpack_require__(16400);
-var quickSort = (__webpack_require__(22826)/* .quickSort */ .U);
-
-function SourceMapConsumer(aSourceMap, aSourceMapURL) {
-  var sourceMap = aSourceMap;
-  if (typeof aSourceMap === 'string') {
-    sourceMap = util.parseSourceMapInput(aSourceMap);
-  }
-
-  return sourceMap.sections != null
-    ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
-    : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
-}
-
-SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
-  return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
-}
-
-/**
- * The version of the source mapping spec that we are consuming.
- */
-SourceMapConsumer.prototype._version = 3;
-
-// `__generatedMappings` and `__originalMappings` are arrays that hold the
-// parsed mapping coordinates from the source map's "mappings" attribute. They
-// are lazily instantiated, accessed via the `_generatedMappings` and
-// `_originalMappings` getters respectively, and we only parse the mappings
-// and create these arrays once queried for a source location. We jump through
-// these hoops because there can be many thousands of mappings, and parsing
-// them is expensive, so we only want to do it if we must.
-//
-// Each object in the arrays is of the form:
-//
-//     {
-//       generatedLine: The line number in the generated code,
-//       generatedColumn: The column number in the generated code,
-//       source: The path to the original source file that generated this
-//               chunk of code,
-//       originalLine: The line number in the original source that
-//                     corresponds to this chunk of generated code,
-//       originalColumn: The column number in the original source that
-//                       corresponds to this chunk of generated code,
-//       name: The name of the original symbol which generated this chunk of
-//             code.
-//     }
-//
-// All properties except for `generatedLine` and `generatedColumn` can be
-// `null`.
-//
-// `_generatedMappings` is ordered by the generated positions.
-//
-// `_originalMappings` is ordered by the original positions.
-
-SourceMapConsumer.prototype.__generatedMappings = null;
-Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
-  configurable: true,
-  enumerable: true,
-  get: function () {
-    if (!this.__generatedMappings) {
-      this._parseMappings(this._mappings, this.sourceRoot);
-    }
-
-    return this.__generatedMappings;
-  }
-});
-
-SourceMapConsumer.prototype.__originalMappings = null;
-Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
-  configurable: true,
-  enumerable: true,
-  get: function () {
-    if (!this.__originalMappings) {
-      this._parseMappings(this._mappings, this.sourceRoot);
-    }
-
-    return this.__originalMappings;
-  }
-});
-
-SourceMapConsumer.prototype._charIsMappingSeparator =
-  function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
-    var c = aStr.charAt(index);
-    return c === ";" || c === ",";
-  };
-
-/**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-SourceMapConsumer.prototype._parseMappings =
-  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
-    throw new Error("Subclasses must implement _parseMappings");
-  };
-
-SourceMapConsumer.GENERATED_ORDER = 1;
-SourceMapConsumer.ORIGINAL_ORDER = 2;
-
-SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
-SourceMapConsumer.LEAST_UPPER_BOUND = 2;
-
-/**
- * Iterate over each mapping between an original source/line/column and a
- * generated line/column in this source map.
- *
- * @param Function aCallback
- *        The function that is called with each mapping.
- * @param Object aContext
- *        Optional. If specified, this object will be the value of `this` every
- *        time that `aCallback` is called.
- * @param aOrder
- *        Either `SourceMapConsumer.GENERATED_ORDER` or
- *        `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
- *        iterate over the mappings sorted by the generated file's line/column
- *        order or the original's source/line/column order, respectively. Defaults to
- *        `SourceMapConsumer.GENERATED_ORDER`.
- */
-SourceMapConsumer.prototype.eachMapping =
-  function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
-    var context = aContext || null;
-    var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
-
-    var mappings;
-    switch (order) {
-    case SourceMapConsumer.GENERATED_ORDER:
-      mappings = this._generatedMappings;
-      break;
-    case SourceMapConsumer.ORIGINAL_ORDER:
-      mappings = this._originalMappings;
-      break;
-    default:
-      throw new Error("Unknown order of iteration.");
-    }
-
-    var sourceRoot = this.sourceRoot;
-    mappings.map(function (mapping) {
-      var source = mapping.source === null ? null : this._sources.at(mapping.source);
-      source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);
-      return {
-        source: source,
-        generatedLine: mapping.generatedLine,
-        generatedColumn: mapping.generatedColumn,
-        originalLine: mapping.originalLine,
-        originalColumn: mapping.originalColumn,
-        name: mapping.name === null ? null : this._names.at(mapping.name)
-      };
-    }, this).forEach(aCallback, context);
-  };
-
-/**
- * Returns all generated line and column information for the original source,
- * line, and column provided. If no column is provided, returns all mappings
- * corresponding to a either the line we are searching for or the next
- * closest line that has any mappings. Otherwise, returns all mappings
- * corresponding to the given line and either the column we are searching for
- * or the next closest column that has any offsets.
- *
- * The only argument is an object with the following properties:
- *
- *   - source: The filename of the original source.
- *   - line: The line number in the original source.  The line number is 1-based.
- *   - column: Optional. the column number in the original source.
- *    The column number is 0-based.
- *
- * and an array of objects is returned, each with the following properties:
- *
- *   - line: The line number in the generated source, or null.  The
- *    line number is 1-based.
- *   - column: The column number in the generated source, or null.
- *    The column number is 0-based.
- */
-SourceMapConsumer.prototype.allGeneratedPositionsFor =
-  function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
-    var line = util.getArg(aArgs, 'line');
-
-    // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
-    // returns the index of the closest mapping less than the needle. By
-    // setting needle.originalColumn to 0, we thus find the last mapping for
-    // the given line, provided such a mapping exists.
-    var needle = {
-      source: util.getArg(aArgs, 'source'),
-      originalLine: line,
-      originalColumn: util.getArg(aArgs, 'column', 0)
-    };
-
-    needle.source = this._findSourceIndex(needle.source);
-    if (needle.source < 0) {
-      return [];
-    }
-
-    var mappings = [];
-
-    var index = this._findMapping(needle,
-                                  this._originalMappings,
-                                  "originalLine",
-                                  "originalColumn",
-                                  util.compareByOriginalPositions,
-                                  binarySearch.LEAST_UPPER_BOUND);
-    if (index >= 0) {
-      var mapping = this._originalMappings[index];
-
-      if (aArgs.column === undefined) {
-        var originalLine = mapping.originalLine;
-
-        // Iterate until either we run out of mappings, or we run into
-        // a mapping for a different line than the one we found. Since
-        // mappings are sorted, this is guaranteed to find all mappings for
-        // the line we found.
-        while (mapping && mapping.originalLine === originalLine) {
-          mappings.push({
-            line: util.getArg(mapping, 'generatedLine', null),
-            column: util.getArg(mapping, 'generatedColumn', null),
-            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
-          });
-
-          mapping = this._originalMappings[++index];
-        }
-      } else {
-        var originalColumn = mapping.originalColumn;
-
-        // Iterate until either we run out of mappings, or we run into
-        // a mapping for a different line than the one we were searching for.
-        // Since mappings are sorted, this is guaranteed to find all mappings for
-        // the line we are searching for.
-        while (mapping &&
-               mapping.originalLine === line &&
-               mapping.originalColumn == originalColumn) {
-          mappings.push({
-            line: util.getArg(mapping, 'generatedLine', null),
-            column: util.getArg(mapping, 'generatedColumn', null),
-            lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
-          });
-
-          mapping = this._originalMappings[++index];
-        }
-      }
-    }
-
-    return mappings;
-  };
-
-exports.SourceMapConsumer = SourceMapConsumer;
-
-/**
- * A BasicSourceMapConsumer instance represents a parsed source map which we can
- * query for information about the original file positions by giving it a file
- * position in the generated source.
- *
- * The first parameter is the raw source map (either as a JSON string, or
- * already parsed to an object). According to the spec, source maps have the
- * following attributes:
- *
- *   - version: Which version of the source map spec this map is following.
- *   - sources: An array of URLs to the original source files.
- *   - names: An array of identifiers which can be referrenced by individual mappings.
- *   - sourceRoot: Optional. The URL root from which all sources are relative.
- *   - sourcesContent: Optional. An array of contents of the original source files.
- *   - mappings: A string of base64 VLQs which contain the actual mappings.
- *   - file: Optional. The generated file this source map is associated with.
- *
- * Here is an example source map, taken from the source map spec[0]:
- *
- *     {
- *       version : 3,
- *       file: "out.js",
- *       sourceRoot : "",
- *       sources: ["foo.js", "bar.js"],
- *       names: ["src", "maps", "are", "fun"],
- *       mappings: "AA,AB;;ABCDE;"
- *     }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found.  This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
- */
-function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
-  var sourceMap = aSourceMap;
-  if (typeof aSourceMap === 'string') {
-    sourceMap = util.parseSourceMapInput(aSourceMap);
-  }
-
-  var version = util.getArg(sourceMap, 'version');
-  var sources = util.getArg(sourceMap, 'sources');
-  // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
-  // requires the array) to play nice here.
-  var names = util.getArg(sourceMap, 'names', []);
-  var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
-  var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
-  var mappings = util.getArg(sourceMap, 'mappings');
-  var file = util.getArg(sourceMap, 'file', null);
-
-  // Once again, Sass deviates from the spec and supplies the version as a
-  // string rather than a number, so we use loose equality checking here.
-  if (version != this._version) {
-    throw new Error('Unsupported version: ' + version);
-  }
-
-  if (sourceRoot) {
-    sourceRoot = util.normalize(sourceRoot);
-  }
-
-  sources = sources
-    .map(String)
-    // Some source maps produce relative source paths like "./foo.js" instead of
-    // "foo.js".  Normalize these first so that future comparisons will succeed.
-    // See bugzil.la/1090768.
-    .map(util.normalize)
-    // Always ensure that absolute sources are internally stored relative to
-    // the source root, if the source root is absolute. Not doing this would
-    // be particularly problematic when the source root is a prefix of the
-    // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
-    .map(function (source) {
-      return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
-        ? util.relative(sourceRoot, source)
-        : source;
-    });
-
-  // Pass `true` below to allow duplicate names and sources. While source maps
-  // are intended to be compressed and deduplicated, the TypeScript compiler
-  // sometimes generates source maps with duplicates in them. See Github issue
-  // #72 and bugzil.la/889492.
-  this._names = ArraySet.fromArray(names.map(String), true);
-  this._sources = ArraySet.fromArray(sources, true);
-
-  this._absoluteSources = this._sources.toArray().map(function (s) {
-    return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
-  });
-
-  this.sourceRoot = sourceRoot;
-  this.sourcesContent = sourcesContent;
-  this._mappings = mappings;
-  this._sourceMapURL = aSourceMapURL;
-  this.file = file;
-}
-
-BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
-BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
-
-/**
- * Utility function to find the index of a source.  Returns -1 if not
- * found.
- */
-BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
-  var relativeSource = aSource;
-  if (this.sourceRoot != null) {
-    relativeSource = util.relative(this.sourceRoot, relativeSource);
-  }
-
-  if (this._sources.has(relativeSource)) {
-    return this._sources.indexOf(relativeSource);
-  }
-
-  // Maybe aSource is an absolute URL as returned by |sources|.  In
-  // this case we can't simply undo the transform.
-  var i;
-  for (i = 0; i < this._absoluteSources.length; ++i) {
-    if (this._absoluteSources[i] == aSource) {
-      return i;
-    }
-  }
-
-  return -1;
-};
-
-/**
- * Create a BasicSourceMapConsumer from a SourceMapGenerator.
- *
- * @param SourceMapGenerator aSourceMap
- *        The source map that will be consumed.
- * @param String aSourceMapURL
- *        The URL at which the source map can be found (optional)
- * @returns BasicSourceMapConsumer
- */
-BasicSourceMapConsumer.fromSourceMap =
-  function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
-    var smc = Object.create(BasicSourceMapConsumer.prototype);
-
-    var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
-    var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
-    smc.sourceRoot = aSourceMap._sourceRoot;
-    smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
-                                                            smc.sourceRoot);
-    smc.file = aSourceMap._file;
-    smc._sourceMapURL = aSourceMapURL;
-    smc._absoluteSources = smc._sources.toArray().map(function (s) {
-      return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
-    });
-
-    // Because we are modifying the entries (by converting string sources and
-    // names to indices into the sources and names ArraySets), we have to make
-    // a copy of the entry or else bad things happen. Shared mutable state
-    // strikes again! See github issue #191.
-
-    var generatedMappings = aSourceMap._mappings.toArray().slice();
-    var destGeneratedMappings = smc.__generatedMappings = [];
-    var destOriginalMappings = smc.__originalMappings = [];
-
-    for (var i = 0, length = generatedMappings.length; i < length; i++) {
-      var srcMapping = generatedMappings[i];
-      var destMapping = new Mapping;
-      destMapping.generatedLine = srcMapping.generatedLine;
-      destMapping.generatedColumn = srcMapping.generatedColumn;
-
-      if (srcMapping.source) {
-        destMapping.source = sources.indexOf(srcMapping.source);
-        destMapping.originalLine = srcMapping.originalLine;
-        destMapping.originalColumn = srcMapping.originalColumn;
-
-        if (srcMapping.name) {
-          destMapping.name = names.indexOf(srcMapping.name);
-        }
-
-        destOriginalMappings.push(destMapping);
-      }
-
-      destGeneratedMappings.push(destMapping);
-    }
-
-    quickSort(smc.__originalMappings, util.compareByOriginalPositions);
-
-    return smc;
-  };
-
-/**
- * The version of the source mapping spec that we are consuming.
- */
-BasicSourceMapConsumer.prototype._version = 3;
-
-/**
- * The list of original sources.
- */
-Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
-  get: function () {
-    return this._absoluteSources.slice();
-  }
-});
-
-/**
- * Provide the JIT with a nice shape / hidden class.
- */
-function Mapping() {
-  this.generatedLine = 0;
-  this.generatedColumn = 0;
-  this.source = null;
-  this.originalLine = null;
-  this.originalColumn = null;
-  this.name = null;
-}
-
-/**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-BasicSourceMapConsumer.prototype._parseMappings =
-  function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
-    var generatedLine = 1;
-    var previousGeneratedColumn = 0;
-    var previousOriginalLine = 0;
-    var previousOriginalColumn = 0;
-    var previousSource = 0;
-    var previousName = 0;
-    var length = aStr.length;
-    var index = 0;
-    var cachedSegments = {};
-    var temp = {};
-    var originalMappings = [];
-    var generatedMappings = [];
-    var mapping, str, segment, end, value;
-
-    while (index < length) {
-      if (aStr.charAt(index) === ';') {
-        generatedLine++;
-        index++;
-        previousGeneratedColumn = 0;
-      }
-      else if (aStr.charAt(index) === ',') {
-        index++;
-      }
-      else {
-        mapping = new Mapping();
-        mapping.generatedLine = generatedLine;
-
-        // Because each offset is encoded relative to the previous one,
-        // many segments often have the same encoding. We can exploit this
-        // fact by caching the parsed variable length fields of each segment,
-        // allowing us to avoid a second parse if we encounter the same
-        // segment again.
-        for (end = index; end < length; end++) {
-          if (this._charIsMappingSeparator(aStr, end)) {
-            break;
-          }
-        }
-        str = aStr.slice(index, end);
-
-        segment = cachedSegments[str];
-        if (segment) {
-          index += str.length;
-        } else {
-          segment = [];
-          while (index < end) {
-            base64VLQ.decode(aStr, index, temp);
-            value = temp.value;
-            index = temp.rest;
-            segment.push(value);
-          }
-
-          if (segment.length === 2) {
-            throw new Error('Found a source, but no line and column');
-          }
-
-          if (segment.length === 3) {
-            throw new Error('Found a source and line, but no column');
-          }
-
-          cachedSegments[str] = segment;
-        }
-
-        // Generated column.
-        mapping.generatedColumn = previousGeneratedColumn + segment[0];
-        previousGeneratedColumn = mapping.generatedColumn;
-
-        if (segment.length > 1) {
-          // Original source.
-          mapping.source = previousSource + segment[1];
-          previousSource += segment[1];
-
-          // Original line.
-          mapping.originalLine = previousOriginalLine + segment[2];
-          previousOriginalLine = mapping.originalLine;
-          // Lines are stored 0-based
-          mapping.originalLine += 1;
-
-          // Original column.
-          mapping.originalColumn = previousOriginalColumn + segment[3];
-          previousOriginalColumn = mapping.originalColumn;
-
-          if (segment.length > 4) {
-            // Original name.
-            mapping.name = previousName + segment[4];
-            previousName += segment[4];
-          }
-        }
-
-        generatedMappings.push(mapping);
-        if (typeof mapping.originalLine === 'number') {
-          originalMappings.push(mapping);
-        }
-      }
-    }
-
-    quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);
-    this.__generatedMappings = generatedMappings;
-
-    quickSort(originalMappings, util.compareByOriginalPositions);
-    this.__originalMappings = originalMappings;
-  };
-
-/**
- * Find the mapping that best matches the hypothetical "needle" mapping that
- * we are searching for in the given "haystack" of mappings.
- */
-BasicSourceMapConsumer.prototype._findMapping =
-  function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
-                                         aColumnName, aComparator, aBias) {
-    // To return the position we are searching for, we must first find the
-    // mapping for the given position and then return the opposite position it
-    // points to. Because the mappings are sorted, we can use binary search to
-    // find the best mapping.
-
-    if (aNeedle[aLineName] <= 0) {
-      throw new TypeError('Line must be greater than or equal to 1, got '
-                          + aNeedle[aLineName]);
-    }
-    if (aNeedle[aColumnName] < 0) {
-      throw new TypeError('Column must be greater than or equal to 0, got '
-                          + aNeedle[aColumnName]);
-    }
-
-    return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
-  };
-
-/**
- * Compute the last column for each generated mapping. The last column is
- * inclusive.
- */
-BasicSourceMapConsumer.prototype.computeColumnSpans =
-  function SourceMapConsumer_computeColumnSpans() {
-    for (var index = 0; index < this._generatedMappings.length; ++index) {
-      var mapping = this._generatedMappings[index];
-
-      // Mappings do not contain a field for the last generated columnt. We
-      // can come up with an optimistic estimate, however, by assuming that
-      // mappings are contiguous (i.e. given two consecutive mappings, the
-      // first mapping ends where the second one starts).
-      if (index + 1 < this._generatedMappings.length) {
-        var nextMapping = this._generatedMappings[index + 1];
-
-        if (mapping.generatedLine === nextMapping.generatedLine) {
-          mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
-          continue;
-        }
-      }
-
-      // The last mapping for each line spans the entire line.
-      mapping.lastGeneratedColumn = Infinity;
-    }
-  };
-
-/**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- *   - line: The line number in the generated source.  The line number
- *     is 1-based.
- *   - column: The column number in the generated source.  The column
- *     number is 0-based.
- *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- *     closest element that is smaller than or greater than the one we are
- *     searching for, respectively, if the exact element cannot be found.
- *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- *   - source: The original source file, or null.
- *   - line: The line number in the original source, or null.  The
- *     line number is 1-based.
- *   - column: The column number in the original source, or null.  The
- *     column number is 0-based.
- *   - name: The original identifier, or null.
- */
-BasicSourceMapConsumer.prototype.originalPositionFor =
-  function SourceMapConsumer_originalPositionFor(aArgs) {
-    var needle = {
-      generatedLine: util.getArg(aArgs, 'line'),
-      generatedColumn: util.getArg(aArgs, 'column')
-    };
-
-    var index = this._findMapping(
-      needle,
-      this._generatedMappings,
-      "generatedLine",
-      "generatedColumn",
-      util.compareByGeneratedPositionsDeflated,
-      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
-    );
-
-    if (index >= 0) {
-      var mapping = this._generatedMappings[index];
-
-      if (mapping.generatedLine === needle.generatedLine) {
-        var source = util.getArg(mapping, 'source', null);
-        if (source !== null) {
-          source = this._sources.at(source);
-          source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
-        }
-        var name = util.getArg(mapping, 'name', null);
-        if (name !== null) {
-          name = this._names.at(name);
-        }
-        return {
-          source: source,
-          line: util.getArg(mapping, 'originalLine', null),
-          column: util.getArg(mapping, 'originalColumn', null),
-          name: name
-        };
-      }
-    }
-
-    return {
-      source: null,
-      line: null,
-      column: null,
-      name: null
-    };
-  };
-
-/**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
-BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
-  function BasicSourceMapConsumer_hasContentsOfAllSources() {
-    if (!this.sourcesContent) {
-      return false;
-    }
-    return this.sourcesContent.length >= this._sources.size() &&
-      !this.sourcesContent.some(function (sc) { return sc == null; });
-  };
-
-/**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
-BasicSourceMapConsumer.prototype.sourceContentFor =
-  function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
-    if (!this.sourcesContent) {
-      return null;
-    }
-
-    var index = this._findSourceIndex(aSource);
-    if (index >= 0) {
-      return this.sourcesContent[index];
-    }
-
-    var relativeSource = aSource;
-    if (this.sourceRoot != null) {
-      relativeSource = util.relative(this.sourceRoot, relativeSource);
-    }
-
-    var url;
-    if (this.sourceRoot != null
-        && (url = util.urlParse(this.sourceRoot))) {
-      // XXX: file:// URIs and absolute paths lead to unexpected behavior for
-      // many users. We can help them out when they expect file:// URIs to
-      // behave like it would if they were running a local HTTP server. See
-      // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
-      var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
-      if (url.scheme == "file"
-          && this._sources.has(fileUriAbsPath)) {
-        return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
-      }
-
-      if ((!url.path || url.path == "/")
-          && this._sources.has("/" + relativeSource)) {
-        return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
-      }
-    }
-
-    // This function is used recursively from
-    // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
-    // don't want to throw if we can't find the source - we just want to
-    // return null, so we provide a flag to exit gracefully.
-    if (nullOnMissing) {
-      return null;
-    }
-    else {
-      throw new Error('"' + relativeSource + '" is not in the SourceMap.');
-    }
-  };
-
-/**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- *   - source: The filename of the original source.
- *   - line: The line number in the original source.  The line number
- *     is 1-based.
- *   - column: The column number in the original source.  The column
- *     number is 0-based.
- *   - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
- *     'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
- *     closest element that is smaller than or greater than the one we are
- *     searching for, respectively, if the exact element cannot be found.
- *     Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
- *
- * and an object is returned with the following properties:
- *
- *   - line: The line number in the generated source, or null.  The
- *     line number is 1-based.
- *   - column: The column number in the generated source, or null.
- *     The column number is 0-based.
- */
-BasicSourceMapConsumer.prototype.generatedPositionFor =
-  function SourceMapConsumer_generatedPositionFor(aArgs) {
-    var source = util.getArg(aArgs, 'source');
-    source = this._findSourceIndex(source);
-    if (source < 0) {
-      return {
-        line: null,
-        column: null,
-        lastColumn: null
-      };
-    }
-
-    var needle = {
-      source: source,
-      originalLine: util.getArg(aArgs, 'line'),
-      originalColumn: util.getArg(aArgs, 'column')
-    };
-
-    var index = this._findMapping(
-      needle,
-      this._originalMappings,
-      "originalLine",
-      "originalColumn",
-      util.compareByOriginalPositions,
-      util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
-    );
-
-    if (index >= 0) {
-      var mapping = this._originalMappings[index];
-
-      if (mapping.source === needle.source) {
-        return {
-          line: util.getArg(mapping, 'generatedLine', null),
-          column: util.getArg(mapping, 'generatedColumn', null),
-          lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
-        };
-      }
-    }
-
-    return {
-      line: null,
-      column: null,
-      lastColumn: null
-    };
-  };
-
-__webpack_unused_export__ = BasicSourceMapConsumer;
-
-/**
- * An IndexedSourceMapConsumer instance represents a parsed source map which
- * we can query for information. It differs from BasicSourceMapConsumer in
- * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
- * input.
- *
- * The first parameter is a raw source map (either as a JSON string, or already
- * parsed to an object). According to the spec for indexed source maps, they
- * have the following attributes:
- *
- *   - version: Which version of the source map spec this map is following.
- *   - file: Optional. The generated file this source map is associated with.
- *   - sections: A list of section definitions.
- *
- * Each value under the "sections" field has two fields:
- *   - offset: The offset into the original specified at which this section
- *       begins to apply, defined as an object with a "line" and "column"
- *       field.
- *   - map: A source map definition. This source map could also be indexed,
- *       but doesn't have to be.
- *
- * Instead of the "map" field, it's also possible to have a "url" field
- * specifying a URL to retrieve a source map from, but that's currently
- * unsupported.
- *
- * Here's an example source map, taken from the source map spec[0], but
- * modified to omit a section which uses the "url" field.
- *
- *  {
- *    version : 3,
- *    file: "app.js",
- *    sections: [{
- *      offset: {line:100, column:10},
- *      map: {
- *        version : 3,
- *        file: "section.js",
- *        sources: ["foo.js", "bar.js"],
- *        names: ["src", "maps", "are", "fun"],
- *        mappings: "AAAA,E;;ABCDE;"
- *      }
- *    }],
- *  }
- *
- * The second parameter, if given, is a string whose value is the URL
- * at which the source map was found.  This URL is used to compute the
- * sources array.
- *
- * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
- */
-function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
-  var sourceMap = aSourceMap;
-  if (typeof aSourceMap === 'string') {
-    sourceMap = util.parseSourceMapInput(aSourceMap);
-  }
-
-  var version = util.getArg(sourceMap, 'version');
-  var sections = util.getArg(sourceMap, 'sections');
-
-  if (version != this._version) {
-    throw new Error('Unsupported version: ' + version);
-  }
-
-  this._sources = new ArraySet();
-  this._names = new ArraySet();
-
-  var lastOffset = {
-    line: -1,
-    column: 0
-  };
-  this._sections = sections.map(function (s) {
-    if (s.url) {
-      // The url field will require support for asynchronicity.
-      // See https://github.com/mozilla/source-map/issues/16
-      throw new Error('Support for url field in sections not implemented.');
-    }
-    var offset = util.getArg(s, 'offset');
-    var offsetLine = util.getArg(offset, 'line');
-    var offsetColumn = util.getArg(offset, 'column');
-
-    if (offsetLine < lastOffset.line ||
-        (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
-      throw new Error('Section offsets must be ordered and non-overlapping.');
-    }
-    lastOffset = offset;
-
-    return {
-      generatedOffset: {
-        // The offset fields are 0-based, but we use 1-based indices when
-        // encoding/decoding from VLQ.
-        generatedLine: offsetLine + 1,
-        generatedColumn: offsetColumn + 1
-      },
-      consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
-    }
-  });
-}
-
-IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
-IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
-
-/**
- * The version of the source mapping spec that we are consuming.
- */
-IndexedSourceMapConsumer.prototype._version = 3;
-
-/**
- * The list of original sources.
- */
-Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
-  get: function () {
-    var sources = [];
-    for (var i = 0; i < this._sections.length; i++) {
-      for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
-        sources.push(this._sections[i].consumer.sources[j]);
-      }
-    }
-    return sources;
-  }
-});
-
-/**
- * Returns the original source, line, and column information for the generated
- * source's line and column positions provided. The only argument is an object
- * with the following properties:
- *
- *   - line: The line number in the generated source.  The line number
- *     is 1-based.
- *   - column: The column number in the generated source.  The column
- *     number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- *   - source: The original source file, or null.
- *   - line: The line number in the original source, or null.  The
- *     line number is 1-based.
- *   - column: The column number in the original source, or null.  The
- *     column number is 0-based.
- *   - name: The original identifier, or null.
- */
-IndexedSourceMapConsumer.prototype.originalPositionFor =
-  function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
-    var needle = {
-      generatedLine: util.getArg(aArgs, 'line'),
-      generatedColumn: util.getArg(aArgs, 'column')
-    };
-
-    // Find the section containing the generated position we're trying to map
-    // to an original position.
-    var sectionIndex = binarySearch.search(needle, this._sections,
-      function(needle, section) {
-        var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
-        if (cmp) {
-          return cmp;
-        }
-
-        return (needle.generatedColumn -
-                section.generatedOffset.generatedColumn);
-      });
-    var section = this._sections[sectionIndex];
-
-    if (!section) {
-      return {
-        source: null,
-        line: null,
-        column: null,
-        name: null
-      };
-    }
-
-    return section.consumer.originalPositionFor({
-      line: needle.generatedLine -
-        (section.generatedOffset.generatedLine - 1),
-      column: needle.generatedColumn -
-        (section.generatedOffset.generatedLine === needle.generatedLine
-         ? section.generatedOffset.generatedColumn - 1
-         : 0),
-      bias: aArgs.bias
-    });
-  };
-
-/**
- * Return true if we have the source content for every source in the source
- * map, false otherwise.
- */
-IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
-  function IndexedSourceMapConsumer_hasContentsOfAllSources() {
-    return this._sections.every(function (s) {
-      return s.consumer.hasContentsOfAllSources();
-    });
-  };
-
-/**
- * Returns the original source content. The only argument is the url of the
- * original source file. Returns null if no original source content is
- * available.
- */
-IndexedSourceMapConsumer.prototype.sourceContentFor =
-  function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
-    for (var i = 0; i < this._sections.length; i++) {
-      var section = this._sections[i];
-
-      var content = section.consumer.sourceContentFor(aSource, true);
-      if (content) {
-        return content;
-      }
-    }
-    if (nullOnMissing) {
-      return null;
-    }
-    else {
-      throw new Error('"' + aSource + '" is not in the SourceMap.');
-    }
-  };
-
-/**
- * Returns the generated line and column information for the original source,
- * line, and column positions provided. The only argument is an object with
- * the following properties:
- *
- *   - source: The filename of the original source.
- *   - line: The line number in the original source.  The line number
- *     is 1-based.
- *   - column: The column number in the original source.  The column
- *     number is 0-based.
- *
- * and an object is returned with the following properties:
- *
- *   - line: The line number in the generated source, or null.  The
- *     line number is 1-based. 
- *   - column: The column number in the generated source, or null.
- *     The column number is 0-based.
- */
-IndexedSourceMapConsumer.prototype.generatedPositionFor =
-  function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
-    for (var i = 0; i < this._sections.length; i++) {
-      var section = this._sections[i];
-
-      // Only consider this section if the requested source is in the list of
-      // sources of the consumer.
-      if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
-        continue;
-      }
-      var generatedPosition = section.consumer.generatedPositionFor(aArgs);
-      if (generatedPosition) {
-        var ret = {
-          line: generatedPosition.line +
-            (section.generatedOffset.generatedLine - 1),
-          column: generatedPosition.column +
-            (section.generatedOffset.generatedLine === generatedPosition.line
-             ? section.generatedOffset.generatedColumn - 1
-             : 0)
-        };
-        return ret;
-      }
-    }
-
-    return {
-      line: null,
-      column: null
-    };
-  };
-
-/**
- * Parse the mappings in a string in to a data structure which we can easily
- * query (the ordered arrays in the `this.__generatedMappings` and
- * `this.__originalMappings` properties).
- */
-IndexedSourceMapConsumer.prototype._parseMappings =
-  function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
-    this.__generatedMappings = [];
-    this.__originalMappings = [];
-    for (var i = 0; i < this._sections.length; i++) {
-      var section = this._sections[i];
-      var sectionMappings = section.consumer._generatedMappings;
-      for (var j = 0; j < sectionMappings.length; j++) {
-        var mapping = sectionMappings[j];
-
-        var source = section.consumer._sources.at(mapping.source);
-        source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
-        this._sources.add(source);
-        source = this._sources.indexOf(source);
-
-        var name = null;
-        if (mapping.name) {
-          name = section.consumer._names.at(mapping.name);
-          this._names.add(name);
-          name = this._names.indexOf(name);
-        }
-
-        // The mappings coming from the consumer for the section have
-        // generated positions relative to the start of the section, so we
-        // need to offset them to be relative to the start of the concatenated
-        // generated file.
-        var adjustedMapping = {
-          source: source,
-          generatedLine: mapping.generatedLine +
-            (section.generatedOffset.generatedLine - 1),
-          generatedColumn: mapping.generatedColumn +
-            (section.generatedOffset.generatedLine === mapping.generatedLine
-            ? section.generatedOffset.generatedColumn - 1
-            : 0),
-          originalLine: mapping.originalLine,
-          originalColumn: mapping.originalColumn,
-          name: name
-        };
-
-        this.__generatedMappings.push(adjustedMapping);
-        if (typeof adjustedMapping.originalLine === 'number') {
-          this.__originalMappings.push(adjustedMapping);
-        }
-      }
-    }
-
-    quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
-    quickSort(this.__originalMappings, util.compareByOriginalPositions);
-  };
-
-__webpack_unused_export__ = IndexedSourceMapConsumer;
-
-
-/***/ }),
-
-/***/ 34433:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var base64VLQ = __webpack_require__(16400);
-var util = __webpack_require__(32728);
-var ArraySet = (__webpack_require__(78213)/* .ArraySet */ .I);
-var MappingList = (__webpack_require__(21188)/* .MappingList */ .H);
-
-/**
- * An instance of the SourceMapGenerator represents a source map which is
- * being built incrementally. You may pass an object with the following
- * properties:
- *
- *   - file: The filename of the generated source.
- *   - sourceRoot: A root for all relative URLs in this source map.
- */
-function SourceMapGenerator(aArgs) {
-  if (!aArgs) {
-    aArgs = {};
-  }
-  this._file = util.getArg(aArgs, 'file', null);
-  this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
-  this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
-  this._sources = new ArraySet();
-  this._names = new ArraySet();
-  this._mappings = new MappingList();
-  this._sourcesContents = null;
-}
-
-SourceMapGenerator.prototype._version = 3;
-
-/**
- * Creates a new SourceMapGenerator based on a SourceMapConsumer
- *
- * @param aSourceMapConsumer The SourceMap.
- */
-SourceMapGenerator.fromSourceMap =
-  function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
-    var sourceRoot = aSourceMapConsumer.sourceRoot;
-    var generator = new SourceMapGenerator({
-      file: aSourceMapConsumer.file,
-      sourceRoot: sourceRoot
-    });
-    aSourceMapConsumer.eachMapping(function (mapping) {
-      var newMapping = {
-        generated: {
-          line: mapping.generatedLine,
-          column: mapping.generatedColumn
-        }
-      };
-
-      if (mapping.source != null) {
-        newMapping.source = mapping.source;
-        if (sourceRoot != null) {
-          newMapping.source = util.relative(sourceRoot, newMapping.source);
-        }
-
-        newMapping.original = {
-          line: mapping.originalLine,
-          column: mapping.originalColumn
-        };
-
-        if (mapping.name != null) {
-          newMapping.name = mapping.name;
-        }
-      }
-
-      generator.addMapping(newMapping);
-    });
-    aSourceMapConsumer.sources.forEach(function (sourceFile) {
-      var sourceRelative = sourceFile;
-      if (sourceRoot !== null) {
-        sourceRelative = util.relative(sourceRoot, sourceFile);
-      }
-
-      if (!generator._sources.has(sourceRelative)) {
-        generator._sources.add(sourceRelative);
-      }
-
-      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
-      if (content != null) {
-        generator.setSourceContent(sourceFile, content);
-      }
-    });
-    return generator;
-  };
-
-/**
- * Add a single mapping from original source line and column to the generated
- * source's line and column for this source map being created. The mapping
- * object should have the following properties:
- *
- *   - generated: An object with the generated line and column positions.
- *   - original: An object with the original line and column positions.
- *   - source: The original source file (relative to the sourceRoot).
- *   - name: An optional original token name for this mapping.
- */
-SourceMapGenerator.prototype.addMapping =
-  function SourceMapGenerator_addMapping(aArgs) {
-    var generated = util.getArg(aArgs, 'generated');
-    var original = util.getArg(aArgs, 'original', null);
-    var source = util.getArg(aArgs, 'source', null);
-    var name = util.getArg(aArgs, 'name', null);
-
-    if (!this._skipValidation) {
-      this._validateMapping(generated, original, source, name);
-    }
-
-    if (source != null) {
-      source = String(source);
-      if (!this._sources.has(source)) {
-        this._sources.add(source);
-      }
-    }
-
-    if (name != null) {
-      name = String(name);
-      if (!this._names.has(name)) {
-        this._names.add(name);
-      }
-    }
-
-    this._mappings.add({
-      generatedLine: generated.line,
-      generatedColumn: generated.column,
-      originalLine: original != null && original.line,
-      originalColumn: original != null && original.column,
-      source: source,
-      name: name
-    });
-  };
-
-/**
- * Set the source content for a source file.
- */
-SourceMapGenerator.prototype.setSourceContent =
-  function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
-    var source = aSourceFile;
-    if (this._sourceRoot != null) {
-      source = util.relative(this._sourceRoot, source);
-    }
-
-    if (aSourceContent != null) {
-      // Add the source content to the _sourcesContents map.
-      // Create a new _sourcesContents map if the property is null.
-      if (!this._sourcesContents) {
-        this._sourcesContents = Object.create(null);
-      }
-      this._sourcesContents[util.toSetString(source)] = aSourceContent;
-    } else if (this._sourcesContents) {
-      // Remove the source file from the _sourcesContents map.
-      // If the _sourcesContents map is empty, set the property to null.
-      delete this._sourcesContents[util.toSetString(source)];
-      if (Object.keys(this._sourcesContents).length === 0) {
-        this._sourcesContents = null;
-      }
-    }
-  };
-
-/**
- * Applies the mappings of a sub-source-map for a specific source file to the
- * source map being generated. Each mapping to the supplied source file is
- * rewritten using the supplied source map. Note: The resolution for the
- * resulting mappings is the minimium of this map and the supplied map.
- *
- * @param aSourceMapConsumer The source map to be applied.
- * @param aSourceFile Optional. The filename of the source file.
- *        If omitted, SourceMapConsumer's file property will be used.
- * @param aSourceMapPath Optional. The dirname of the path to the source map
- *        to be applied. If relative, it is relative to the SourceMapConsumer.
- *        This parameter is needed when the two source maps aren't in the same
- *        directory, and the source map to be applied contains relative source
- *        paths. If so, those relative source paths need to be rewritten
- *        relative to the SourceMapGenerator.
- */
-SourceMapGenerator.prototype.applySourceMap =
-  function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
-    var sourceFile = aSourceFile;
-    // If aSourceFile is omitted, we will use the file property of the SourceMap
-    if (aSourceFile == null) {
-      if (aSourceMapConsumer.file == null) {
-        throw new Error(
-          'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
-          'or the source map\'s "file" property. Both were omitted.'
-        );
-      }
-      sourceFile = aSourceMapConsumer.file;
-    }
-    var sourceRoot = this._sourceRoot;
-    // Make "sourceFile" relative if an absolute Url is passed.
-    if (sourceRoot != null) {
-      sourceFile = util.relative(sourceRoot, sourceFile);
-    }
-    // Applying the SourceMap can add and remove items from the sources and
-    // the names array.
-    var newSources = new ArraySet();
-    var newNames = new ArraySet();
-
-    // Find mappings for the "sourceFile"
-    this._mappings.unsortedForEach(function (mapping) {
-      if (mapping.source === sourceFile && mapping.originalLine != null) {
-        // Check if it can be mapped by the source map, then update the mapping.
-        var original = aSourceMapConsumer.originalPositionFor({
-          line: mapping.originalLine,
-          column: mapping.originalColumn
-        });
-        if (original.source != null) {
-          // Copy mapping
-          mapping.source = original.source;
-          if (aSourceMapPath != null) {
-            mapping.source = util.join(aSourceMapPath, mapping.source)
-          }
-          if (sourceRoot != null) {
-            mapping.source = util.relative(sourceRoot, mapping.source);
-          }
-          mapping.originalLine = original.line;
-          mapping.originalColumn = original.column;
-          if (original.name != null) {
-            mapping.name = original.name;
-          }
-        }
-      }
-
-      var source = mapping.source;
-      if (source != null && !newSources.has(source)) {
-        newSources.add(source);
-      }
-
-      var name = mapping.name;
-      if (name != null && !newNames.has(name)) {
-        newNames.add(name);
-      }
-
-    }, this);
-    this._sources = newSources;
-    this._names = newNames;
-
-    // Copy sourcesContents of applied map.
-    aSourceMapConsumer.sources.forEach(function (sourceFile) {
-      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
-      if (content != null) {
-        if (aSourceMapPath != null) {
-          sourceFile = util.join(aSourceMapPath, sourceFile);
-        }
-        if (sourceRoot != null) {
-          sourceFile = util.relative(sourceRoot, sourceFile);
-        }
-        this.setSourceContent(sourceFile, content);
-      }
-    }, this);
-  };
-
-/**
- * A mapping can have one of the three levels of data:
- *
- *   1. Just the generated position.
- *   2. The Generated position, original position, and original source.
- *   3. Generated and original position, original source, as well as a name
- *      token.
- *
- * To maintain consistency, we validate that any new mapping being added falls
- * in to one of these categories.
- */
-SourceMapGenerator.prototype._validateMapping =
-  function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
-                                              aName) {
-    // When aOriginal is truthy but has empty values for .line and .column,
-    // it is most likely a programmer error. In this case we throw a very
-    // specific error message to try to guide them the right way.
-    // For example: https://github.com/Polymer/polymer-bundler/pull/519
-    if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
-        throw new Error(
-            'original.line and original.column are not numbers -- you probably meant to omit ' +
-            'the original mapping entirely and only map the generated position. If so, pass ' +
-            'null for the original mapping instead of an object with empty or null values.'
-        );
-    }
-
-    if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
-        && aGenerated.line > 0 && aGenerated.column >= 0
-        && !aOriginal && !aSource && !aName) {
-      // Case 1.
-      return;
-    }
-    else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
-             && aOriginal && 'line' in aOriginal && 'column' in aOriginal
-             && aGenerated.line > 0 && aGenerated.column >= 0
-             && aOriginal.line > 0 && aOriginal.column >= 0
-             && aSource) {
-      // Cases 2 and 3.
-      return;
-    }
-    else {
-      throw new Error('Invalid mapping: ' + JSON.stringify({
-        generated: aGenerated,
-        source: aSource,
-        original: aOriginal,
-        name: aName
-      }));
-    }
-  };
-
-/**
- * Serialize the accumulated mappings in to the stream of base 64 VLQs
- * specified by the source map format.
- */
-SourceMapGenerator.prototype._serializeMappings =
-  function SourceMapGenerator_serializeMappings() {
-    var previousGeneratedColumn = 0;
-    var previousGeneratedLine = 1;
-    var previousOriginalColumn = 0;
-    var previousOriginalLine = 0;
-    var previousName = 0;
-    var previousSource = 0;
-    var result = '';
-    var next;
-    var mapping;
-    var nameIdx;
-    var sourceIdx;
-
-    var mappings = this._mappings.toArray();
-    for (var i = 0, len = mappings.length; i < len; i++) {
-      mapping = mappings[i];
-      next = ''
-
-      if (mapping.generatedLine !== previousGeneratedLine) {
-        previousGeneratedColumn = 0;
-        while (mapping.generatedLine !== previousGeneratedLine) {
-          next += ';';
-          previousGeneratedLine++;
-        }
-      }
-      else {
-        if (i > 0) {
-          if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
-            continue;
-          }
-          next += ',';
-        }
-      }
-
-      next += base64VLQ.encode(mapping.generatedColumn
-                                 - previousGeneratedColumn);
-      previousGeneratedColumn = mapping.generatedColumn;
-
-      if (mapping.source != null) {
-        sourceIdx = this._sources.indexOf(mapping.source);
-        next += base64VLQ.encode(sourceIdx - previousSource);
-        previousSource = sourceIdx;
-
-        // lines are stored 0-based in SourceMap spec version 3
-        next += base64VLQ.encode(mapping.originalLine - 1
-                                   - previousOriginalLine);
-        previousOriginalLine = mapping.originalLine - 1;
-
-        next += base64VLQ.encode(mapping.originalColumn
-                                   - previousOriginalColumn);
-        previousOriginalColumn = mapping.originalColumn;
-
-        if (mapping.name != null) {
-          nameIdx = this._names.indexOf(mapping.name);
-          next += base64VLQ.encode(nameIdx - previousName);
-          previousName = nameIdx;
-        }
-      }
-
-      result += next;
-    }
-
-    return result;
-  };
-
-SourceMapGenerator.prototype._generateSourcesContent =
-  function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
-    return aSources.map(function (source) {
-      if (!this._sourcesContents) {
-        return null;
-      }
-      if (aSourceRoot != null) {
-        source = util.relative(aSourceRoot, source);
-      }
-      var key = util.toSetString(source);
-      return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
-        ? this._sourcesContents[key]
-        : null;
-    }, this);
-  };
-
-/**
- * Externalize the source map.
- */
-SourceMapGenerator.prototype.toJSON =
-  function SourceMapGenerator_toJSON() {
-    var map = {
-      version: this._version,
-      sources: this._sources.toArray(),
-      names: this._names.toArray(),
-      mappings: this._serializeMappings()
-    };
-    if (this._file != null) {
-      map.file = this._file;
-    }
-    if (this._sourceRoot != null) {
-      map.sourceRoot = this._sourceRoot;
-    }
-    if (this._sourcesContents) {
-      map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
-    }
-
-    return map;
-  };
-
-/**
- * Render the source map being generated to a string.
- */
-SourceMapGenerator.prototype.toString =
-  function SourceMapGenerator_toString() {
-    return JSON.stringify(this.toJSON());
-  };
-
-exports.SourceMapGenerator = SourceMapGenerator;
-
-
-/***/ }),
-
-/***/ 17085:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-var __webpack_unused_export__;
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-var SourceMapGenerator = (__webpack_require__(34433).SourceMapGenerator);
-var util = __webpack_require__(32728);
-
-// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
-// operating systems these days (capturing the result).
-var REGEX_NEWLINE = /(\r?\n)/;
-
-// Newline character code for charCodeAt() comparisons
-var NEWLINE_CODE = 10;
-
-// Private symbol for identifying `SourceNode`s when multiple versions of
-// the source-map library are loaded. This MUST NOT CHANGE across
-// versions!
-var isSourceNode = "$$$isSourceNode$$$";
-
-/**
- * SourceNodes provide a way to abstract over interpolating/concatenating
- * snippets of generated JavaScript source code while maintaining the line and
- * column information associated with the original source code.
- *
- * @param aLine The original line number.
- * @param aColumn The original column number.
- * @param aSource The original source's filename.
- * @param aChunks Optional. An array of strings which are snippets of
- *        generated JS, or other SourceNodes.
- * @param aName The original identifier.
- */
-function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
-  this.children = [];
-  this.sourceContents = {};
-  this.line = aLine == null ? null : aLine;
-  this.column = aColumn == null ? null : aColumn;
-  this.source = aSource == null ? null : aSource;
-  this.name = aName == null ? null : aName;
-  this[isSourceNode] = true;
-  if (aChunks != null) this.add(aChunks);
-}
-
-/**
- * Creates a SourceNode from generated code and a SourceMapConsumer.
- *
- * @param aGeneratedCode The generated code
- * @param aSourceMapConsumer The SourceMap for the generated code
- * @param aRelativePath Optional. The path that relative sources in the
- *        SourceMapConsumer should be relative to.
- */
-SourceNode.fromStringWithSourceMap =
-  function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
-    // The SourceNode we want to fill with the generated code
-    // and the SourceMap
-    var node = new SourceNode();
-
-    // All even indices of this array are one line of the generated code,
-    // while all odd indices are the newlines between two adjacent lines
-    // (since `REGEX_NEWLINE` captures its match).
-    // Processed fragments are accessed by calling `shiftNextLine`.
-    var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
-    var remainingLinesIndex = 0;
-    var shiftNextLine = function() {
-      var lineContents = getNextLine();
-      // The last line of a file might not have a newline.
-      var newLine = getNextLine() || "";
-      return lineContents + newLine;
-
-      function getNextLine() {
-        return remainingLinesIndex < remainingLines.length ?
-            remainingLines[remainingLinesIndex++] : undefined;
-      }
-    };
-
-    // We need to remember the position of "remainingLines"
-    var lastGeneratedLine = 1, lastGeneratedColumn = 0;
-
-    // The generate SourceNodes we need a code range.
-    // To extract it current and last mapping is used.
-    // Here we store the last mapping.
-    var lastMapping = null;
-
-    aSourceMapConsumer.eachMapping(function (mapping) {
-      if (lastMapping !== null) {
-        // We add the code from "lastMapping" to "mapping":
-        // First check if there is a new line in between.
-        if (lastGeneratedLine < mapping.generatedLine) {
-          // Associate first line with "lastMapping"
-          addMappingWithCode(lastMapping, shiftNextLine());
-          lastGeneratedLine++;
-          lastGeneratedColumn = 0;
-          // The remaining code is added without mapping
-        } else {
-          // There is no new line in between.
-          // Associate the code between "lastGeneratedColumn" and
-          // "mapping.generatedColumn" with "lastMapping"
-          var nextLine = remainingLines[remainingLinesIndex] || '';
-          var code = nextLine.substr(0, mapping.generatedColumn -
-                                        lastGeneratedColumn);
-          remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
-                                              lastGeneratedColumn);
-          lastGeneratedColumn = mapping.generatedColumn;
-          addMappingWithCode(lastMapping, code);
-          // No more remaining code, continue
-          lastMapping = mapping;
-          return;
-        }
-      }
-      // We add the generated code until the first mapping
-      // to the SourceNode without any mapping.
-      // Each line is added as separate string.
-      while (lastGeneratedLine < mapping.generatedLine) {
-        node.add(shiftNextLine());
-        lastGeneratedLine++;
-      }
-      if (lastGeneratedColumn < mapping.generatedColumn) {
-        var nextLine = remainingLines[remainingLinesIndex] || '';
-        node.add(nextLine.substr(0, mapping.generatedColumn));
-        remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
-        lastGeneratedColumn = mapping.generatedColumn;
-      }
-      lastMapping = mapping;
-    }, this);
-    // We have processed all mappings.
-    if (remainingLinesIndex < remainingLines.length) {
-      if (lastMapping) {
-        // Associate the remaining code in the current line with "lastMapping"
-        addMappingWithCode(lastMapping, shiftNextLine());
-      }
-      // and add the remaining lines without any mapping
-      node.add(remainingLines.splice(remainingLinesIndex).join(""));
-    }
-
-    // Copy sourcesContent into SourceNode
-    aSourceMapConsumer.sources.forEach(function (sourceFile) {
-      var content = aSourceMapConsumer.sourceContentFor(sourceFile);
-      if (content != null) {
-        if (aRelativePath != null) {
-          sourceFile = util.join(aRelativePath, sourceFile);
-        }
-        node.setSourceContent(sourceFile, content);
-      }
-    });
-
-    return node;
-
-    function addMappingWithCode(mapping, code) {
-      if (mapping === null || mapping.source === undefined) {
-        node.add(code);
-      } else {
-        var source = aRelativePath
-          ? util.join(aRelativePath, mapping.source)
-          : mapping.source;
-        node.add(new SourceNode(mapping.originalLine,
-                                mapping.originalColumn,
-                                source,
-                                code,
-                                mapping.name));
-      }
-    }
-  };
-
-/**
- * Add a chunk of generated JS to this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- *        SourceNode, or an array where each member is one of those things.
- */
-SourceNode.prototype.add = function SourceNode_add(aChunk) {
-  if (Array.isArray(aChunk)) {
-    aChunk.forEach(function (chunk) {
-      this.add(chunk);
-    }, this);
-  }
-  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
-    if (aChunk) {
-      this.children.push(aChunk);
-    }
-  }
-  else {
-    throw new TypeError(
-      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
-    );
-  }
-  return this;
-};
-
-/**
- * Add a chunk of generated JS to the beginning of this source node.
- *
- * @param aChunk A string snippet of generated JS code, another instance of
- *        SourceNode, or an array where each member is one of those things.
- */
-SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
-  if (Array.isArray(aChunk)) {
-    for (var i = aChunk.length-1; i >= 0; i--) {
-      this.prepend(aChunk[i]);
-    }
-  }
-  else if (aChunk[isSourceNode] || typeof aChunk === "string") {
-    this.children.unshift(aChunk);
-  }
-  else {
-    throw new TypeError(
-      "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
-    );
-  }
-  return this;
-};
-
-/**
- * Walk over the tree of JS snippets in this node and its children. The
- * walking function is called once for each snippet of JS and is passed that
- * snippet and the its original associated source's line/column location.
- *
- * @param aFn The traversal function.
- */
-SourceNode.prototype.walk = function SourceNode_walk(aFn) {
-  var chunk;
-  for (var i = 0, len = this.children.length; i < len; i++) {
-    chunk = this.children[i];
-    if (chunk[isSourceNode]) {
-      chunk.walk(aFn);
-    }
-    else {
-      if (chunk !== '') {
-        aFn(chunk, { source: this.source,
-                     line: this.line,
-                     column: this.column,
-                     name: this.name });
-      }
-    }
-  }
-};
-
-/**
- * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
- * each of `this.children`.
- *
- * @param aSep The separator.
- */
-SourceNode.prototype.join = function SourceNode_join(aSep) {
-  var newChildren;
-  var i;
-  var len = this.children.length;
-  if (len > 0) {
-    newChildren = [];
-    for (i = 0; i < len-1; i++) {
-      newChildren.push(this.children[i]);
-      newChildren.push(aSep);
-    }
-    newChildren.push(this.children[i]);
-    this.children = newChildren;
-  }
-  return this;
-};
-
-/**
- * Call String.prototype.replace on the very right-most source snippet. Useful
- * for trimming whitespace from the end of a source node, etc.
- *
- * @param aPattern The pattern to replace.
- * @param aReplacement The thing to replace the pattern with.
- */
-SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
-  var lastChild = this.children[this.children.length - 1];
-  if (lastChild[isSourceNode]) {
-    lastChild.replaceRight(aPattern, aReplacement);
-  }
-  else if (typeof lastChild === 'string') {
-    this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
-  }
-  else {
-    this.children.push(''.replace(aPattern, aReplacement));
-  }
-  return this;
-};
-
-/**
- * Set the source content for a source file. This will be added to the SourceMapGenerator
- * in the sourcesContent field.
- *
- * @param aSourceFile The filename of the source file
- * @param aSourceContent The content of the source file
- */
-SourceNode.prototype.setSourceContent =
-  function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
-    this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
-  };
-
-/**
- * Walk over the tree of SourceNodes. The walking function is called for each
- * source file content and is passed the filename and source content.
- *
- * @param aFn The traversal function.
- */
-SourceNode.prototype.walkSourceContents =
-  function SourceNode_walkSourceContents(aFn) {
-    for (var i = 0, len = this.children.length; i < len; i++) {
-      if (this.children[i][isSourceNode]) {
-        this.children[i].walkSourceContents(aFn);
-      }
-    }
-
-    var sources = Object.keys(this.sourceContents);
-    for (var i = 0, len = sources.length; i < len; i++) {
-      aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
-    }
-  };
-
-/**
- * Return the string representation of this source node. Walks over the tree
- * and concatenates all the various snippets together to one string.
- */
-SourceNode.prototype.toString = function SourceNode_toString() {
-  var str = "";
-  this.walk(function (chunk) {
-    str += chunk;
-  });
-  return str;
-};
-
-/**
- * Returns the string representation of this source node along with a source
- * map.
- */
-SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
-  var generated = {
-    code: "",
-    line: 1,
-    column: 0
-  };
-  var map = new SourceMapGenerator(aArgs);
-  var sourceMappingActive = false;
-  var lastOriginalSource = null;
-  var lastOriginalLine = null;
-  var lastOriginalColumn = null;
-  var lastOriginalName = null;
-  this.walk(function (chunk, original) {
-    generated.code += chunk;
-    if (original.source !== null
-        && original.line !== null
-        && original.column !== null) {
-      if(lastOriginalSource !== original.source
-         || lastOriginalLine !== original.line
-         || lastOriginalColumn !== original.column
-         || lastOriginalName !== original.name) {
-        map.addMapping({
-          source: original.source,
-          original: {
-            line: original.line,
-            column: original.column
-          },
-          generated: {
-            line: generated.line,
-            column: generated.column
-          },
-          name: original.name
-        });
-      }
-      lastOriginalSource = original.source;
-      lastOriginalLine = original.line;
-      lastOriginalColumn = original.column;
-      lastOriginalName = original.name;
-      sourceMappingActive = true;
-    } else if (sourceMappingActive) {
-      map.addMapping({
-        generated: {
-          line: generated.line,
-          column: generated.column
-        }
-      });
-      lastOriginalSource = null;
-      sourceMappingActive = false;
-    }
-    for (var idx = 0, length = chunk.length; idx < length; idx++) {
-      if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
-        generated.line++;
-        generated.column = 0;
-        // Mappings end at eol
-        if (idx + 1 === length) {
-          lastOriginalSource = null;
-          sourceMappingActive = false;
-        } else if (sourceMappingActive) {
-          map.addMapping({
-            source: original.source,
-            original: {
-              line: original.line,
-              column: original.column
-            },
-            generated: {
-              line: generated.line,
-              column: generated.column
-            },
-            name: original.name
-          });
-        }
-      } else {
-        generated.column++;
-      }
-    }
-  });
-  this.walkSourceContents(function (sourceFile, sourceContent) {
-    map.setSourceContent(sourceFile, sourceContent);
-  });
-
-  return { code: generated.code, map: map };
-};
-
-__webpack_unused_export__ = SourceNode;
-
-
-/***/ }),
-
-/***/ 32728:
-/***/ ((__unused_webpack_module, exports) => {
-
-/* -*- Mode: js; js-indent-level: 2; -*- */
-/*
- * Copyright 2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-
-/**
- * This is a helper function for getting values from parameter/options
- * objects.
- *
- * @param args The object we are extracting values from
- * @param name The name of the property we are getting.
- * @param defaultValue An optional value to return if the property is missing
- * from the object. If this is not specified and the property is missing, an
- * error will be thrown.
- */
-function getArg(aArgs, aName, aDefaultValue) {
-  if (aName in aArgs) {
-    return aArgs[aName];
-  } else if (arguments.length === 3) {
-    return aDefaultValue;
-  } else {
-    throw new Error('"' + aName + '" is a required argument.');
-  }
-}
-exports.getArg = getArg;
-
-var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
-var dataUrlRegexp = /^data:.+\,.+$/;
-
-function urlParse(aUrl) {
-  var match = aUrl.match(urlRegexp);
-  if (!match) {
-    return null;
-  }
-  return {
-    scheme: match[1],
-    auth: match[2],
-    host: match[3],
-    port: match[4],
-    path: match[5]
-  };
-}
-exports.urlParse = urlParse;
-
-function urlGenerate(aParsedUrl) {
-  var url = '';
-  if (aParsedUrl.scheme) {
-    url += aParsedUrl.scheme + ':';
-  }
-  url += '//';
-  if (aParsedUrl.auth) {
-    url += aParsedUrl.auth + '@';
-  }
-  if (aParsedUrl.host) {
-    url += aParsedUrl.host;
-  }
-  if (aParsedUrl.port) {
-    url += ":" + aParsedUrl.port
-  }
-  if (aParsedUrl.path) {
-    url += aParsedUrl.path;
-  }
-  return url;
-}
-exports.urlGenerate = urlGenerate;
-
-/**
- * Normalizes a path, or the path portion of a URL:
- *
- * - Replaces consecutive slashes with one slash.
- * - Removes unnecessary '.' parts.
- * - Removes unnecessary '<dir>/..' parts.
- *
- * Based on code in the Node.js 'path' core module.
- *
- * @param aPath The path or url to normalize.
- */
-function normalize(aPath) {
-  var path = aPath;
-  var url = urlParse(aPath);
-  if (url) {
-    if (!url.path) {
-      return aPath;
-    }
-    path = url.path;
-  }
-  var isAbsolute = exports.isAbsolute(path);
-
-  var parts = path.split(/\/+/);
-  for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
-    part = parts[i];
-    if (part === '.') {
-      parts.splice(i, 1);
-    } else if (part === '..') {
-      up++;
-    } else if (up > 0) {
-      if (part === '') {
-        // The first part is blank if the path is absolute. Trying to go
-        // above the root is a no-op. Therefore we can remove all '..' parts
-        // directly after the root.
-        parts.splice(i + 1, up);
-        up = 0;
-      } else {
-        parts.splice(i, 2);
-        up--;
-      }
-    }
-  }
-  path = parts.join('/');
-
-  if (path === '') {
-    path = isAbsolute ? '/' : '.';
-  }
-
-  if (url) {
-    url.path = path;
-    return urlGenerate(url);
-  }
-  return path;
-}
-exports.normalize = normalize;
-
-/**
- * Joins two paths/URLs.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be joined with the root.
- *
- * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
- *   scheme-relative URL: Then the scheme of aRoot, if any, is prepended
- *   first.
- * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
- *   is updated with the result and aRoot is returned. Otherwise the result
- *   is returned.
- *   - If aPath is absolute, the result is aPath.
- *   - Otherwise the two paths are joined with a slash.
- * - Joining for example 'http://' and 'www.example.com' is also supported.
- */
-function join(aRoot, aPath) {
-  if (aRoot === "") {
-    aRoot = ".";
-  }
-  if (aPath === "") {
-    aPath = ".";
-  }
-  var aPathUrl = urlParse(aPath);
-  var aRootUrl = urlParse(aRoot);
-  if (aRootUrl) {
-    aRoot = aRootUrl.path || '/';
-  }
-
-  // `join(foo, '//www.example.org')`
-  if (aPathUrl && !aPathUrl.scheme) {
-    if (aRootUrl) {
-      aPathUrl.scheme = aRootUrl.scheme;
-    }
-    return urlGenerate(aPathUrl);
-  }
-
-  if (aPathUrl || aPath.match(dataUrlRegexp)) {
-    return aPath;
-  }
-
-  // `join('http://', 'www.example.com')`
-  if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
-    aRootUrl.host = aPath;
-    return urlGenerate(aRootUrl);
-  }
-
-  var joined = aPath.charAt(0) === '/'
-    ? aPath
-    : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
-
-  if (aRootUrl) {
-    aRootUrl.path = joined;
-    return urlGenerate(aRootUrl);
-  }
-  return joined;
-}
-exports.join = join;
-
-exports.isAbsolute = function (aPath) {
-  return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
-};
-
-/**
- * Make a path relative to a URL or another path.
- *
- * @param aRoot The root path or URL.
- * @param aPath The path or URL to be made relative to aRoot.
- */
-function relative(aRoot, aPath) {
-  if (aRoot === "") {
-    aRoot = ".";
-  }
-
-  aRoot = aRoot.replace(/\/$/, '');
-
-  // It is possible for the path to be above the root. In this case, simply
-  // checking whether the root is a prefix of the path won't work. Instead, we
-  // need to remove components from the root one by one, until either we find
-  // a prefix that fits, or we run out of components to remove.
-  var level = 0;
-  while (aPath.indexOf(aRoot + '/') !== 0) {
-    var index = aRoot.lastIndexOf("/");
-    if (index < 0) {
-      return aPath;
-    }
-
-    // If the only part of the root that is left is the scheme (i.e. http://,
-    // file:///, etc.), one or more slashes (/), or simply nothing at all, we
-    // have exhausted all components, so the path is not relative to the root.
-    aRoot = aRoot.slice(0, index);
-    if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
-      return aPath;
-    }
-
-    ++level;
-  }
-
-  // Make sure we add a "../" for each component we removed from the root.
-  return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
-}
-exports.relative = relative;
-
-var supportsNullProto = (function () {
-  var obj = Object.create(null);
-  return !('__proto__' in obj);
-}());
-
-function identity (s) {
-  return s;
-}
-
-/**
- * Because behavior goes wacky when you set `__proto__` on objects, we
- * have to prefix all the strings in our set with an arbitrary character.
- *
- * See https://github.com/mozilla/source-map/pull/31 and
- * https://github.com/mozilla/source-map/issues/30
- *
- * @param String aStr
- */
-function toSetString(aStr) {
-  if (isProtoString(aStr)) {
-    return '$' + aStr;
-  }
-
-  return aStr;
-}
-exports.toSetString = supportsNullProto ? identity : toSetString;
-
-function fromSetString(aStr) {
-  if (isProtoString(aStr)) {
-    return aStr.slice(1);
-  }
-
-  return aStr;
-}
-exports.fromSetString = supportsNullProto ? identity : fromSetString;
-
-function isProtoString(s) {
-  if (!s) {
-    return false;
-  }
-
-  var length = s.length;
-
-  if (length < 9 /* "__proto__".length */) {
-    return false;
-  }
-
-  if (s.charCodeAt(length - 1) !== 95  /* '_' */ ||
-      s.charCodeAt(length - 2) !== 95  /* '_' */ ||
-      s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
-      s.charCodeAt(length - 4) !== 116 /* 't' */ ||
-      s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
-      s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
-      s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
-      s.charCodeAt(length - 8) !== 95  /* '_' */ ||
-      s.charCodeAt(length - 9) !== 95  /* '_' */) {
-    return false;
-  }
-
-  for (var i = length - 10; i >= 0; i--) {
-    if (s.charCodeAt(i) !== 36 /* '$' */) {
-      return false;
-    }
-  }
-
-  return true;
-}
-
-/**
- * Comparator between two mappings where the original positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same original source/line/column, but different generated
- * line and column the same. Useful when searching for a mapping with a
- * stubbed out mapping.
- */
-function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
-  var cmp = strcmp(mappingA.source, mappingB.source);
-  if (cmp !== 0) {
-    return cmp;
-  }
-
-  cmp = mappingA.originalLine - mappingB.originalLine;
-  if (cmp !== 0) {
-    return cmp;
-  }
-
-  cmp = mappingA.originalColumn - mappingB.originalColumn;
-  if (cmp !== 0 || onlyCompareOriginal) {
-    return cmp;
-  }
-
-  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
-  if (cmp !== 0) {
-    return cmp;
-  }
-
-  cmp = mappingA.generatedLine - mappingB.generatedLine;
-  if (cmp !== 0) {
-    return cmp;
-  }
-
-  return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByOriginalPositions = compareByOriginalPositions;
-
-/**
- * Comparator between two mappings with deflated source and name indices where
- * the generated positions are compared.
- *
- * Optionally pass in `true` as `onlyCompareGenerated` to consider two
- * mappings with the same generated line and column, but different
- * source/name/original line and column the same. Useful when searching for a
- * mapping with a stubbed out mapping.
- */
-function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
-  var cmp = mappingA.generatedLine - mappingB.generatedLine;
-  if (cmp !== 0) {
-    return cmp;
-  }
-
-  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
-  if (cmp !== 0 || onlyCompareGenerated) {
-    return cmp;
-  }
-
-  cmp = strcmp(mappingA.source, mappingB.source);
-  if (cmp !== 0) {
-    return cmp;
-  }
-
-  cmp = mappingA.originalLine - mappingB.originalLine;
-  if (cmp !== 0) {
-    return cmp;
-  }
-
-  cmp = mappingA.originalColumn - mappingB.originalColumn;
-  if (cmp !== 0) {
-    return cmp;
-  }
-
-  return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
-
-function strcmp(aStr1, aStr2) {
-  if (aStr1 === aStr2) {
-    return 0;
-  }
-
-  if (aStr1 === null) {
-    return 1; // aStr2 !== null
-  }
-
-  if (aStr2 === null) {
-    return -1; // aStr1 !== null
-  }
-
-  if (aStr1 > aStr2) {
-    return 1;
-  }
-
-  return -1;
-}
-
-/**
- * Comparator between two mappings with inflated source and name strings where
- * the generated positions are compared.
- */
-function compareByGeneratedPositionsInflated(mappingA, mappingB) {
-  var cmp = mappingA.generatedLine - mappingB.generatedLine;
-  if (cmp !== 0) {
-    return cmp;
-  }
-
-  cmp = mappingA.generatedColumn - mappingB.generatedColumn;
-  if (cmp !== 0) {
-    return cmp;
-  }
-
-  cmp = strcmp(mappingA.source, mappingB.source);
-  if (cmp !== 0) {
-    return cmp;
-  }
-
-  cmp = mappingA.originalLine - mappingB.originalLine;
-  if (cmp !== 0) {
-    return cmp;
-  }
-
-  cmp = mappingA.originalColumn - mappingB.originalColumn;
-  if (cmp !== 0) {
-    return cmp;
-  }
-
-  return strcmp(mappingA.name, mappingB.name);
-}
-exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
-
-/**
- * Strip any JSON XSSI avoidance prefix from the string (as documented
- * in the source maps specification), and then parse the string as
- * JSON.
- */
-function parseSourceMapInput(str) {
-  return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
-}
-exports.parseSourceMapInput = parseSourceMapInput;
-
-/**
- * Compute the URL of a source given the the source root, the source's
- * URL, and the source map's URL.
- */
-function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
-  sourceURL = sourceURL || '';
-
-  if (sourceRoot) {
-    // This follows what Chrome does.
-    if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
-      sourceRoot += '/';
-    }
-    // The spec says:
-    //   Line 4: An optional source root, useful for relocating source
-    //   files on a server or removing repeated values in the
-    //   “sources” entry.  This value is prepended to the individual
-    //   entries in the “source” field.
-    sourceURL = sourceRoot + sourceURL;
-  }
-
-  // Historically, SourceMapConsumer did not take the sourceMapURL as
-  // a parameter.  This mode is still somewhat supported, which is why
-  // this code block is conditional.  However, it's preferable to pass
-  // the source map URL to SourceMapConsumer, so that this function
-  // can implement the source URL resolution algorithm as outlined in
-  // the spec.  This block is basically the equivalent of:
-  //    new URL(sourceURL, sourceMapURL).toString()
-  // ... except it avoids using URL, which wasn't available in the
-  // older releases of node still supported by this library.
-  //
-  // The spec says:
-  //   If the sources are not absolute URLs after prepending of the
-  //   “sourceRoot”, the sources are resolved relative to the
-  //   SourceMap (like resolving script src in a html document).
-  if (sourceMapURL) {
-    var parsed = urlParse(sourceMapURL);
-    if (!parsed) {
-      throw new Error("sourceMapURL could not be parsed");
-    }
-    if (parsed.path) {
-      // Strip the last path component, but keep the "/".
-      var index = parsed.path.lastIndexOf('/');
-      if (index >= 0) {
-        parsed.path = parsed.path.substring(0, index + 1);
-      }
-    }
-    sourceURL = join(urlGenerate(parsed), sourceURL);
-  }
-
-  return normalize(sourceURL);
-}
-exports.computeSourceURL = computeSourceURL;
-
-
-/***/ }),
-
-/***/ 49125:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-/*
- * Copyright 2009-2011 Mozilla Foundation and contributors
- * Licensed under the New BSD license. See LICENSE.txt or:
- * http://opensource.org/licenses/BSD-3-Clause
- */
-exports.SourceMapGenerator = __webpack_require__(34433).SourceMapGenerator;
-exports.SourceMapConsumer = __webpack_require__(76771).SourceMapConsumer;
-/* unused reexport */ __webpack_require__(17085);
-
-
-/***/ }),
-
-/***/ 73466:
-/***/ (function(module) {
-
-// stats.js - http://github.com/mrdoob/stats.js
-(function(f,e){ true?module.exports=e():0})(this,function(){var f=function(){function e(a){c.appendChild(a.dom);return a}function u(a){for(var d=0;d<c.children.length;d++)c.children[d].style.display=d===a?"block":"none";l=a}var l=0,c=document.createElement("div");c.style.cssText="position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000";c.addEventListener("click",function(a){a.preventDefault();
-u(++l%c.children.length)},!1);var k=(performance||Date).now(),g=k,a=0,r=e(new f.Panel("FPS","#0ff","#002")),h=e(new f.Panel("MS","#0f0","#020"));if(self.performance&&self.performance.memory)var t=e(new f.Panel("MB","#f08","#201"));u(0);return{REVISION:16,dom:c,addPanel:e,showPanel:u,begin:function(){k=(performance||Date).now()},end:function(){a++;var c=(performance||Date).now();h.update(c-k,200);if(c>g+1E3&&(r.update(1E3*a/(c-g),100),g=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/
-1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){k=this.end()},domElement:c,setMode:u}};f.Panel=function(e,f,l){var c=Infinity,k=0,g=Math.round,a=g(window.devicePixelRatio||1),r=80*a,h=48*a,t=3*a,v=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement("canvas");q.width=r;q.height=h;q.style.cssText="width:80px;height:48px";var b=q.getContext("2d");b.font="bold "+9*a+"px Helvetica,Arial,sans-serif";b.textBaseline="top";b.fillStyle=l;b.fillRect(0,0,r,h);b.fillStyle=f;b.fillText(e,t,v);
-b.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(h,w){c=Math.min(c,h);k=Math.max(k,h);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=f;b.fillText(g(h)+" "+e+" ("+g(c)+"-"+g(k)+")",t,v);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,g((1-h/w)*p))}}};return f});
-
-
-/***/ }),
-
-/***/ 92130:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-const os = __webpack_require__(22037);
-const tty = __webpack_require__(76224);
-const hasFlag = __webpack_require__(86560);
-
-const {env} = process;
-
-let forceColor;
-if (hasFlag('no-color') ||
-	hasFlag('no-colors') ||
-	hasFlag('color=false') ||
-	hasFlag('color=never')) {
-	forceColor = 0;
-} else if (hasFlag('color') ||
-	hasFlag('colors') ||
-	hasFlag('color=true') ||
-	hasFlag('color=always')) {
-	forceColor = 1;
-}
-
-if ('FORCE_COLOR' in env) {
-	if (env.FORCE_COLOR === 'true') {
-		forceColor = 1;
-	} else if (env.FORCE_COLOR === 'false') {
-		forceColor = 0;
-	} else {
-		forceColor = env.FORCE_COLOR.length === 0 ? 1 : Math.min(parseInt(env.FORCE_COLOR, 10), 3);
-	}
-}
-
-function translateLevel(level) {
-	if (level === 0) {
-		return false;
-	}
-
-	return {
-		level,
-		hasBasic: true,
-		has256: level >= 2,
-		has16m: level >= 3
-	};
-}
-
-function supportsColor(haveStream, streamIsTTY) {
-	if (forceColor === 0) {
-		return 0;
-	}
-
-	if (hasFlag('color=16m') ||
-		hasFlag('color=full') ||
-		hasFlag('color=truecolor')) {
-		return 3;
-	}
-
-	if (hasFlag('color=256')) {
-		return 2;
-	}
-
-	if (haveStream && !streamIsTTY && forceColor === undefined) {
-		return 0;
-	}
-
-	const min = forceColor || 0;
-
-	if (env.TERM === 'dumb') {
-		return min;
-	}
-
-	if (process.platform === 'win32') {
-		// Windows 10 build 10586 is the first Windows release that supports 256 colors.
-		// Windows 10 build 14931 is the first release that supports 16m/TrueColor.
-		const osRelease = os.release().split('.');
-		if (
-			Number(osRelease[0]) >= 10 &&
-			Number(osRelease[2]) >= 10586
-		) {
-			return Number(osRelease[2]) >= 14931 ? 3 : 2;
-		}
-
-		return 1;
-	}
-
-	if ('CI' in env) {
-		if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
-			return 1;
-		}
-
-		return min;
-	}
-
-	if ('TEAMCITY_VERSION' in env) {
-		return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
-	}
-
-	if (env.COLORTERM === 'truecolor') {
-		return 3;
-	}
-
-	if ('TERM_PROGRAM' in env) {
-		const version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
-
-		switch (env.TERM_PROGRAM) {
-			case 'iTerm.app':
-				return version >= 3 ? 3 : 2;
-			case 'Apple_Terminal':
-				return 2;
-			// No default
-		}
-	}
-
-	if (/-256(color)?$/i.test(env.TERM)) {
-		return 2;
-	}
-
-	if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
-		return 1;
-	}
-
-	if ('COLORTERM' in env) {
-		return 1;
-	}
-
-	return min;
-}
-
-function getSupportLevel(stream) {
-	const level = supportsColor(stream, stream && stream.isTTY);
-	return translateLevel(level);
-}
-
-module.exports = {
-	supportsColor: getSupportLevel,
-	stdout: translateLevel(supportsColor(true, tty.isatty(1))),
-	stderr: translateLevel(supportsColor(true, tty.isatty(2)))
-};
-
-
-/***/ }),
-
-/***/ 59239:
-/***/ (function(__unused_webpack_module, exports) {
-
-(function (global, factory) {
-   true ? factory(exports) :
-  0;
-})(this, (function (exports) { 'use strict';
-
-  // This file was generated. Do not modify manually!
-  var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 154, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 161, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 19306, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 262, 6, 10, 9, 357, 0, 62, 13, 1495, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
-
-  // This file was generated. Do not modify manually!
-  var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 85, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 190, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1070, 4050, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 46, 2, 18, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 482, 44, 11, 6, 17, 0, 322, 29, 19, 43, 1269, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4152, 8, 221, 3, 5761, 15, 7472, 3104, 541, 1507, 4938];
-
-  // This file was generated. Do not modify manually!
-  var nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f";
-
-  // This file was generated. Do not modify manually!
-  var nonASCIIidentifierStartChars = "\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u037f\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u052f\u0531-\u0556\u0559\u0560-\u0588\u05d0-\u05ea\u05ef-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u09fc\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0af9\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c39\u0c3d\u0c58-\u0c5a\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f5\u13f8-\u13fd\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f8\u1700-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2118-\u211d\u2124\u2126\u2128\u212a-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309b-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\ua9e0-\ua9e4\ua9e6-\ua9ef\ua9fa-\ua9fe\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa7e-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uab30-\uab5a\uab5c-\uab69\uab70-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc";
-
-  // These are a run-length and offset encoded representation of the
-
-  // Reserved word lists for various dialects of the language
-
-  var reservedWords = {
-    3: "abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile",
-    5: "class enum extends super const export import",
-    6: "enum",
-    strict: "implements interface let package private protected public static yield",
-    strictBind: "eval arguments"
-  };
-
-  // And the keywords
-
-  var ecma5AndLessKeywords = "break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this";
-
-  var keywords$1 = {
-    5: ecma5AndLessKeywords,
-    "5module": ecma5AndLessKeywords + " export import",
-    6: ecma5AndLessKeywords + " const class extends export import super"
-  };
-
-  var keywordRelationalOperator = /^in(stanceof)?$/;
-
-  // ## Character categories
-
-  var nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
-  var nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
-
-  // This has a complexity linear to the value of the code. The
-  // assumption is that looking up astral identifier characters is
-  // rare.
-  function isInAstralSet(code, set) {
-    var pos = 0x10000;
-    for (var i = 0; i < set.length; i += 2) {
-      pos += set[i];
-      if (pos > code) { return false }
-      pos += set[i + 1];
-      if (pos >= code) { return true }
-    }
-  }
-
-  // Test whether a given character code starts an identifier.
-
-  function isIdentifierStart(code, astral) {
-    if (code < 65) { return code === 36 }
-    if (code < 91) { return true }
-    if (code < 97) { return code === 95 }
-    if (code < 123) { return true }
-    if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }
-    if (astral === false) { return false }
-    return isInAstralSet(code, astralIdentifierStartCodes)
-  }
-
-  // Test whether a given character is part of an identifier.
-
-  function isIdentifierChar(code, astral) {
-    if (code < 48) { return code === 36 }
-    if (code < 58) { return true }
-    if (code < 65) { return false }
-    if (code < 91) { return true }
-    if (code < 97) { return code === 95 }
-    if (code < 123) { return true }
-    if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }
-    if (astral === false) { return false }
-    return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)
-  }
-
-  // ## Token types
-
-  // The assignment of fine-grained, information-carrying type objects
-  // allows the tokenizer to store the information it has about a
-  // token in a way that is very cheap for the parser to look up.
-
-  // All token type variables start with an underscore, to make them
-  // easy to recognize.
-
-  // The `beforeExpr` property is used to disambiguate between regular
-  // expressions and divisions. It is set on all token types that can
-  // be followed by an expression (thus, a slash after them would be a
-  // regular expression).
-  //
-  // The `startsExpr` property is used to check if the token ends a
-  // `yield` expression. It is set on all token types that either can
-  // directly start an expression (like a quotation mark) or can
-  // continue an expression (like the body of a string).
-  //
-  // `isLoop` marks a keyword as starting a loop, which is important
-  // to know when parsing a label, in order to allow or disallow
-  // continue jumps to that label.
-
-  var TokenType = function TokenType(label, conf) {
-    if ( conf === void 0 ) conf = {};
-
-    this.label = label;
-    this.keyword = conf.keyword;
-    this.beforeExpr = !!conf.beforeExpr;
-    this.startsExpr = !!conf.startsExpr;
-    this.isLoop = !!conf.isLoop;
-    this.isAssign = !!conf.isAssign;
-    this.prefix = !!conf.prefix;
-    this.postfix = !!conf.postfix;
-    this.binop = conf.binop || null;
-    this.updateContext = null;
-  };
-
-  function binop(name, prec) {
-    return new TokenType(name, {beforeExpr: true, binop: prec})
-  }
-  var beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};
-
-  // Map keyword names to token types.
-
-  var keywords = {};
-
-  // Succinct definitions of keyword token types
-  function kw(name, options) {
-    if ( options === void 0 ) options = {};
-
-    options.keyword = name;
-    return keywords[name] = new TokenType(name, options)
-  }
-
-  var types$1 = {
-    num: new TokenType("num", startsExpr),
-    regexp: new TokenType("regexp", startsExpr),
-    string: new TokenType("string", startsExpr),
-    name: new TokenType("name", startsExpr),
-    privateId: new TokenType("privateId", startsExpr),
-    eof: new TokenType("eof"),
-
-    // Punctuation token types.
-    bracketL: new TokenType("[", {beforeExpr: true, startsExpr: true}),
-    bracketR: new TokenType("]"),
-    braceL: new TokenType("{", {beforeExpr: true, startsExpr: true}),
-    braceR: new TokenType("}"),
-    parenL: new TokenType("(", {beforeExpr: true, startsExpr: true}),
-    parenR: new TokenType(")"),
-    comma: new TokenType(",", beforeExpr),
-    semi: new TokenType(";", beforeExpr),
-    colon: new TokenType(":", beforeExpr),
-    dot: new TokenType("."),
-    question: new TokenType("?", beforeExpr),
-    questionDot: new TokenType("?."),
-    arrow: new TokenType("=>", beforeExpr),
-    template: new TokenType("template"),
-    invalidTemplate: new TokenType("invalidTemplate"),
-    ellipsis: new TokenType("...", beforeExpr),
-    backQuote: new TokenType("`", startsExpr),
-    dollarBraceL: new TokenType("${", {beforeExpr: true, startsExpr: true}),
-
-    // Operators. These carry several kinds of properties to help the
-    // parser use them properly (the presence of these properties is
-    // what categorizes them as operators).
-    //
-    // `binop`, when present, specifies that this operator is a binary
-    // operator, and will refer to its precedence.
-    //
-    // `prefix` and `postfix` mark the operator as a prefix or postfix
-    // unary operator.
-    //
-    // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as
-    // binary operators with a very low precedence, that should result
-    // in AssignmentExpression nodes.
-
-    eq: new TokenType("=", {beforeExpr: true, isAssign: true}),
-    assign: new TokenType("_=", {beforeExpr: true, isAssign: true}),
-    incDec: new TokenType("++/--", {prefix: true, postfix: true, startsExpr: true}),
-    prefix: new TokenType("!/~", {beforeExpr: true, prefix: true, startsExpr: true}),
-    logicalOR: binop("||", 1),
-    logicalAND: binop("&&", 2),
-    bitwiseOR: binop("|", 3),
-    bitwiseXOR: binop("^", 4),
-    bitwiseAND: binop("&", 5),
-    equality: binop("==/!=/===/!==", 6),
-    relational: binop("</>/<=/>=", 7),
-    bitShift: binop("<</>>/>>>", 8),
-    plusMin: new TokenType("+/-", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),
-    modulo: binop("%", 10),
-    star: binop("*", 10),
-    slash: binop("/", 10),
-    starstar: new TokenType("**", {beforeExpr: true}),
-    coalesce: binop("??", 1),
-
-    // Keyword token types.
-    _break: kw("break"),
-    _case: kw("case", beforeExpr),
-    _catch: kw("catch"),
-    _continue: kw("continue"),
-    _debugger: kw("debugger"),
-    _default: kw("default", beforeExpr),
-    _do: kw("do", {isLoop: true, beforeExpr: true}),
-    _else: kw("else", beforeExpr),
-    _finally: kw("finally"),
-    _for: kw("for", {isLoop: true}),
-    _function: kw("function", startsExpr),
-    _if: kw("if"),
-    _return: kw("return", beforeExpr),
-    _switch: kw("switch"),
-    _throw: kw("throw", beforeExpr),
-    _try: kw("try"),
-    _var: kw("var"),
-    _const: kw("const"),
-    _while: kw("while", {isLoop: true}),
-    _with: kw("with"),
-    _new: kw("new", {beforeExpr: true, startsExpr: true}),
-    _this: kw("this", startsExpr),
-    _super: kw("super", startsExpr),
-    _class: kw("class", startsExpr),
-    _extends: kw("extends", beforeExpr),
-    _export: kw("export"),
-    _import: kw("import", startsExpr),
-    _null: kw("null", startsExpr),
-    _true: kw("true", startsExpr),
-    _false: kw("false", startsExpr),
-    _in: kw("in", {beforeExpr: true, binop: 7}),
-    _instanceof: kw("instanceof", {beforeExpr: true, binop: 7}),
-    _typeof: kw("typeof", {beforeExpr: true, prefix: true, startsExpr: true}),
-    _void: kw("void", {beforeExpr: true, prefix: true, startsExpr: true}),
-    _delete: kw("delete", {beforeExpr: true, prefix: true, startsExpr: true})
-  };
-
-  // Matches a whole line break (where CRLF is considered a single
-  // line break). Used to count lines.
-
-  var lineBreak = /\r\n?|\n|\u2028|\u2029/;
-  var lineBreakG = new RegExp(lineBreak.source, "g");
-
-  function isNewLine(code) {
-    return code === 10 || code === 13 || code === 0x2028 || code === 0x2029
-  }
-
-  function nextLineBreak(code, from, end) {
-    if ( end === void 0 ) end = code.length;
-
-    for (var i = from; i < end; i++) {
-      var next = code.charCodeAt(i);
-      if (isNewLine(next))
-        { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }
-    }
-    return -1
-  }
-
-  var nonASCIIwhitespace = /[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/;
-
-  var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;
-
-  var ref = Object.prototype;
-  var hasOwnProperty = ref.hasOwnProperty;
-  var toString = ref.toString;
-
-  var hasOwn = Object.hasOwn || (function (obj, propName) { return (
-    hasOwnProperty.call(obj, propName)
-  ); });
-
-  var isArray = Array.isArray || (function (obj) { return (
-    toString.call(obj) === "[object Array]"
-  ); });
-
-  function wordsRegexp(words) {
-    return new RegExp("^(?:" + words.replace(/ /g, "|") + ")$")
-  }
-
-  function codePointToString(code) {
-    // UTF-16 Decoding
-    if (code <= 0xFFFF) { return String.fromCharCode(code) }
-    code -= 0x10000;
-    return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)
-  }
-
-  var loneSurrogate = /(?:[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])/;
-
-  // These are used when `options.locations` is on, for the
-  // `startLoc` and `endLoc` properties.
-
-  var Position = function Position(line, col) {
-    this.line = line;
-    this.column = col;
-  };
-
-  Position.prototype.offset = function offset (n) {
-    return new Position(this.line, this.column + n)
-  };
-
-  var SourceLocation = function SourceLocation(p, start, end) {
-    this.start = start;
-    this.end = end;
-    if (p.sourceFile !== null) { this.source = p.sourceFile; }
-  };
-
-  // The `getLineInfo` function is mostly useful when the
-  // `locations` option is off (for performance reasons) and you
-  // want to find the line/column position for a given character
-  // offset. `input` should be the code string that the offset refers
-  // into.
-
-  function getLineInfo(input, offset) {
-    for (var line = 1, cur = 0;;) {
-      var nextBreak = nextLineBreak(input, cur, offset);
-      if (nextBreak < 0) { return new Position(line, offset - cur) }
-      ++line;
-      cur = nextBreak;
-    }
-  }
-
-  // A second argument must be given to configure the parser process.
-  // These options are recognized (only `ecmaVersion` is required):
-
-  var defaultOptions = {
-    // `ecmaVersion` indicates the ECMAScript version to parse. Must be
-    // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10
-    // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `"latest"`
-    // (the latest version the library supports). This influences
-    // support for strict mode, the set of reserved words, and support
-    // for new syntax features.
-    ecmaVersion: null,
-    // `sourceType` indicates the mode the code should be parsed in.
-    // Can be either `"script"` or `"module"`. This influences global
-    // strict mode and parsing of `import` and `export` declarations.
-    sourceType: "script",
-    // `onInsertedSemicolon` can be a callback that will be called
-    // when a semicolon is automatically inserted. It will be passed
-    // the position of the comma as an offset, and if `locations` is
-    // enabled, it is given the location as a `{line, column}` object
-    // as second argument.
-    onInsertedSemicolon: null,
-    // `onTrailingComma` is similar to `onInsertedSemicolon`, but for
-    // trailing commas.
-    onTrailingComma: null,
-    // By default, reserved words are only enforced if ecmaVersion >= 5.
-    // Set `allowReserved` to a boolean value to explicitly turn this on
-    // an off. When this option has the value "never", reserved words
-    // and keywords can also not be used as property names.
-    allowReserved: null,
-    // When enabled, a return at the top level is not considered an
-    // error.
-    allowReturnOutsideFunction: false,
-    // When enabled, import/export statements are not constrained to
-    // appearing at the top of the program, and an import.meta expression
-    // in a script isn't considered an error.
-    allowImportExportEverywhere: false,
-    // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.
-    // When enabled, await identifiers are allowed to appear at the top-level scope,
-    // but they are still not allowed in non-async functions.
-    allowAwaitOutsideFunction: null,
-    // When enabled, super identifiers are not constrained to
-    // appearing in methods and do not raise an error when they appear elsewhere.
-    allowSuperOutsideMethod: null,
-    // When enabled, hashbang directive in the beginning of file is
-    // allowed and treated as a line comment. Enabled by default when
-    // `ecmaVersion` >= 2023.
-    allowHashBang: false,
-    // When `locations` is on, `loc` properties holding objects with
-    // `start` and `end` properties in `{line, column}` form (with
-    // line being 1-based and column 0-based) will be attached to the
-    // nodes.
-    locations: false,
-    // A function can be passed as `onToken` option, which will
-    // cause Acorn to call that function with object in the same
-    // format as tokens returned from `tokenizer().getToken()`. Note
-    // that you are not allowed to call the parser from the
-    // callback—that will corrupt its internal state.
-    onToken: null,
-    // A function can be passed as `onComment` option, which will
-    // cause Acorn to call that function with `(block, text, start,
-    // end)` parameters whenever a comment is skipped. `block` is a
-    // boolean indicating whether this is a block (`/* */`) comment,
-    // `text` is the content of the comment, and `start` and `end` are
-    // character offsets that denote the start and end of the comment.
-    // When the `locations` option is on, two more parameters are
-    // passed, the full `{line, column}` locations of the start and
-    // end of the comments. Note that you are not allowed to call the
-    // parser from the callback—that will corrupt its internal state.
-    onComment: null,
-    // Nodes have their start and end characters offsets recorded in
-    // `start` and `end` properties (directly on the node, rather than
-    // the `loc` object, which holds line/column data. To also add a
-    // [semi-standardized][range] `range` property holding a `[start,
-    // end]` array with the same numbers, set the `ranges` option to
-    // `true`.
-    //
-    // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678
-    ranges: false,
-    // It is possible to parse multiple files into a single AST by
-    // passing the tree produced by parsing the first file as
-    // `program` option in subsequent parses. This will add the
-    // toplevel forms of the parsed file to the `Program` (top) node
-    // of an existing parse tree.
-    program: null,
-    // When `locations` is on, you can pass this to record the source
-    // file in every node's `loc` object.
-    sourceFile: null,
-    // This value, if given, is stored in every node, whether
-    // `locations` is on or off.
-    directSourceFile: null,
-    // When enabled, parenthesized expressions are represented by
-    // (non-standard) ParenthesizedExpression nodes
-    preserveParens: false
-  };
-
-  // Interpret and default an options object
-
-  var warnedAboutEcmaVersion = false;
-
-  function getOptions(opts) {
-    var options = {};
-
-    for (var opt in defaultOptions)
-      { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }
-
-    if (options.ecmaVersion === "latest") {
-      options.ecmaVersion = 1e8;
-    } else if (options.ecmaVersion == null) {
-      if (!warnedAboutEcmaVersion && typeof console === "object" && console.warn) {
-        warnedAboutEcmaVersion = true;
-        console.warn("Since Acorn 8.0.0, options.ecmaVersion is required.\nDefaulting to 2020, but this will stop working in the future.");
-      }
-      options.ecmaVersion = 11;
-    } else if (options.ecmaVersion >= 2015) {
-      options.ecmaVersion -= 2009;
-    }
-
-    if (options.allowReserved == null)
-      { options.allowReserved = options.ecmaVersion < 5; }
-
-    if (opts.allowHashBang == null)
-      { options.allowHashBang = options.ecmaVersion >= 14; }
-
-    if (isArray(options.onToken)) {
-      var tokens = options.onToken;
-      options.onToken = function (token) { return tokens.push(token); };
-    }
-    if (isArray(options.onComment))
-      { options.onComment = pushComment(options, options.onComment); }
-
-    return options
-  }
-
-  function pushComment(options, array) {
-    return function(block, text, start, end, startLoc, endLoc) {
-      var comment = {
-        type: block ? "Block" : "Line",
-        value: text,
-        start: start,
-        end: end
-      };
-      if (options.locations)
-        { comment.loc = new SourceLocation(this, startLoc, endLoc); }
-      if (options.ranges)
-        { comment.range = [start, end]; }
-      array.push(comment);
-    }
-  }
-
-  // Each scope gets a bitset that may contain these flags
-  var
-      SCOPE_TOP = 1,
-      SCOPE_FUNCTION = 2,
-      SCOPE_ASYNC = 4,
-      SCOPE_GENERATOR = 8,
-      SCOPE_ARROW = 16,
-      SCOPE_SIMPLE_CATCH = 32,
-      SCOPE_SUPER = 64,
-      SCOPE_DIRECT_SUPER = 128,
-      SCOPE_CLASS_STATIC_BLOCK = 256,
-      SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;
-
-  function functionFlags(async, generator) {
-    return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)
-  }
-
-  // Used in checkLVal* and declareName to determine the type of a binding
-  var
-      BIND_NONE = 0, // Not a binding
-      BIND_VAR = 1, // Var-style binding
-      BIND_LEXICAL = 2, // Let- or const-style binding
-      BIND_FUNCTION = 3, // Function declaration
-      BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding
-      BIND_OUTSIDE = 5; // Special case for function names as bound inside the function
-
-  var Parser = function Parser(options, input, startPos) {
-    this.options = options = getOptions(options);
-    this.sourceFile = options.sourceFile;
-    this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === "module" ? "5module" : 5]);
-    var reserved = "";
-    if (options.allowReserved !== true) {
-      reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];
-      if (options.sourceType === "module") { reserved += " await"; }
-    }
-    this.reservedWords = wordsRegexp(reserved);
-    var reservedStrict = (reserved ? reserved + " " : "") + reservedWords.strict;
-    this.reservedWordsStrict = wordsRegexp(reservedStrict);
-    this.reservedWordsStrictBind = wordsRegexp(reservedStrict + " " + reservedWords.strictBind);
-    this.input = String(input);
-
-    // Used to signal to callers of `readWord1` whether the word
-    // contained any escape sequences. This is needed because words with
-    // escape sequences must not be interpreted as keywords.
-    this.containsEsc = false;
-
-    // Set up token state
-
-    // The current position of the tokenizer in the input.
-    if (startPos) {
-      this.pos = startPos;
-      this.lineStart = this.input.lastIndexOf("\n", startPos - 1) + 1;
-      this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;
-    } else {
-      this.pos = this.lineStart = 0;
-      this.curLine = 1;
-    }
-
-    // Properties of the current token:
-    // Its type
-    this.type = types$1.eof;
-    // For tokens that include more information than their type, the value
-    this.value = null;
-    // Its start and end offset
-    this.start = this.end = this.pos;
-    // And, if locations are used, the {line, column} object
-    // corresponding to those offsets
-    this.startLoc = this.endLoc = this.curPosition();
-
-    // Position information for the previous token
-    this.lastTokEndLoc = this.lastTokStartLoc = null;
-    this.lastTokStart = this.lastTokEnd = this.pos;
-
-    // The context stack is used to superficially track syntactic
-    // context to predict whether a regular expression is allowed in a
-    // given position.
-    this.context = this.initialContext();
-    this.exprAllowed = true;
-
-    // Figure out if it's a module code.
-    this.inModule = options.sourceType === "module";
-    this.strict = this.inModule || this.strictDirective(this.pos);
-
-    // Used to signify the start of a potential arrow function
-    this.potentialArrowAt = -1;
-    this.potentialArrowInForAwait = false;
-
-    // Positions to delayed-check that yield/await does not exist in default parameters.
-    this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;
-    // Labels in scope.
-    this.labels = [];
-    // Thus-far undefined exports.
-    this.undefinedExports = Object.create(null);
-
-    // If enabled, skip leading hashbang line.
-    if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === "#!")
-      { this.skipLineComment(2); }
-
-    // Scope tracking for duplicate variable names (see scope.js)
-    this.scopeStack = [];
-    this.enterScope(SCOPE_TOP);
-
-    // For RegExp validation
-    this.regexpState = null;
-
-    // The stack of private names.
-    // Each element has two properties: 'declared' and 'used'.
-    // When it exited from the outermost class definition, all used private names must be declared.
-    this.privateNameStack = [];
-  };
-
-  var prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };
-
-  Parser.prototype.parse = function parse () {
-    var node = this.options.program || this.startNode();
-    this.nextToken();
-    return this.parseTopLevel(node)
-  };
-
-  prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };
-
-  prototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };
-
-  prototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };
-
-  prototypeAccessors.canAwait.get = function () {
-    for (var i = this.scopeStack.length - 1; i >= 0; i--) {
-      var scope = this.scopeStack[i];
-      if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }
-      if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }
-    }
-    return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction
-  };
-
-  prototypeAccessors.allowSuper.get = function () {
-    var ref = this.currentThisScope();
-      var flags = ref.flags;
-      var inClassFieldInit = ref.inClassFieldInit;
-    return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod
-  };
-
-  prototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };
-
-  prototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };
-
-  prototypeAccessors.allowNewDotTarget.get = function () {
-    var ref = this.currentThisScope();
-      var flags = ref.flags;
-      var inClassFieldInit = ref.inClassFieldInit;
-    return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit
-  };
-
-  prototypeAccessors.inClassStaticBlock.get = function () {
-    return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0
-  };
-
-  Parser.extend = function extend () {
-      var plugins = [], len = arguments.length;
-      while ( len-- ) plugins[ len ] = arguments[ len ];
-
-    var cls = this;
-    for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }
-    return cls
-  };
-
-  Parser.parse = function parse (input, options) {
-    return new this(options, input).parse()
-  };
-
-  Parser.parseExpressionAt = function parseExpressionAt (input, pos, options) {
-    var parser = new this(options, input, pos);
-    parser.nextToken();
-    return parser.parseExpression()
-  };
-
-  Parser.tokenizer = function tokenizer (input, options) {
-    return new this(options, input)
-  };
-
-  Object.defineProperties( Parser.prototype, prototypeAccessors );
-
-  var pp$9 = Parser.prototype;
-
-  // ## Parser utilities
-
-  var literal = /^(?:'((?:\\.|[^'\\])*?)'|"((?:\\.|[^"\\])*?)")/;
-  pp$9.strictDirective = function(start) {
-    if (this.options.ecmaVersion < 5) { return false }
-    for (;;) {
-      // Try to find string literal.
-      skipWhiteSpace.lastIndex = start;
-      start += skipWhiteSpace.exec(this.input)[0].length;
-      var match = literal.exec(this.input.slice(start));
-      if (!match) { return false }
-      if ((match[1] || match[2]) === "use strict") {
-        skipWhiteSpace.lastIndex = start + match[0].length;
-        var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;
-        var next = this.input.charAt(end);
-        return next === ";" || next === "}" ||
-          (lineBreak.test(spaceAfter[0]) &&
-           !(/[(`.[+\-/*%<>=,?^&]/.test(next) || next === "!" && this.input.charAt(end + 1) === "="))
-      }
-      start += match[0].length;
-
-      // Skip semicolon, if any.
-      skipWhiteSpace.lastIndex = start;
-      start += skipWhiteSpace.exec(this.input)[0].length;
-      if (this.input[start] === ";")
-        { start++; }
-    }
-  };
-
-  // Predicate that tests whether the next token is of the given
-  // type, and if yes, consumes it as a side effect.
-
-  pp$9.eat = function(type) {
-    if (this.type === type) {
-      this.next();
-      return true
-    } else {
-      return false
-    }
-  };
-
-  // Tests whether parsed token is a contextual keyword.
-
-  pp$9.isContextual = function(name) {
-    return this.type === types$1.name && this.value === name && !this.containsEsc
-  };
-
-  // Consumes contextual keyword if possible.
-
-  pp$9.eatContextual = function(name) {
-    if (!this.isContextual(name)) { return false }
-    this.next();
-    return true
-  };
-
-  // Asserts that following token is given contextual keyword.
-
-  pp$9.expectContextual = function(name) {
-    if (!this.eatContextual(name)) { this.unexpected(); }
-  };
-
-  // Test whether a semicolon can be inserted at the current position.
-
-  pp$9.canInsertSemicolon = function() {
-    return this.type === types$1.eof ||
-      this.type === types$1.braceR ||
-      lineBreak.test(this.input.slice(this.lastTokEnd, this.start))
-  };
-
-  pp$9.insertSemicolon = function() {
-    if (this.canInsertSemicolon()) {
-      if (this.options.onInsertedSemicolon)
-        { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }
-      return true
-    }
-  };
-
-  // Consume a semicolon, or, failing that, see if we are allowed to
-  // pretend that there is a semicolon at this position.
-
-  pp$9.semicolon = function() {
-    if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }
-  };
-
-  pp$9.afterTrailingComma = function(tokType, notNext) {
-    if (this.type === tokType) {
-      if (this.options.onTrailingComma)
-        { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }
-      if (!notNext)
-        { this.next(); }
-      return true
-    }
-  };
-
-  // Expect a token of a given type. If found, consume it, otherwise,
-  // raise an unexpected token error.
-
-  pp$9.expect = function(type) {
-    this.eat(type) || this.unexpected();
-  };
-
-  // Raise an unexpected token error.
-
-  pp$9.unexpected = function(pos) {
-    this.raise(pos != null ? pos : this.start, "Unexpected token");
-  };
-
-  var DestructuringErrors = function DestructuringErrors() {
-    this.shorthandAssign =
-    this.trailingComma =
-    this.parenthesizedAssign =
-    this.parenthesizedBind =
-    this.doubleProto =
-      -1;
-  };
-
-  pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {
-    if (!refDestructuringErrors) { return }
-    if (refDestructuringErrors.trailingComma > -1)
-      { this.raiseRecoverable(refDestructuringErrors.trailingComma, "Comma is not permitted after the rest element"); }
-    var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;
-    if (parens > -1) { this.raiseRecoverable(parens, isAssign ? "Assigning to rvalue" : "Parenthesized pattern"); }
-  };
-
-  pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {
-    if (!refDestructuringErrors) { return false }
-    var shorthandAssign = refDestructuringErrors.shorthandAssign;
-    var doubleProto = refDestructuringErrors.doubleProto;
-    if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }
-    if (shorthandAssign >= 0)
-      { this.raise(shorthandAssign, "Shorthand property assignments are valid only in destructuring patterns"); }
-    if (doubleProto >= 0)
-      { this.raiseRecoverable(doubleProto, "Redefinition of __proto__ property"); }
-  };
-
-  pp$9.checkYieldAwaitInDefaultParams = function() {
-    if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))
-      { this.raise(this.yieldPos, "Yield expression cannot be a default value"); }
-    if (this.awaitPos)
-      { this.raise(this.awaitPos, "Await expression cannot be a default value"); }
-  };
-
-  pp$9.isSimpleAssignTarget = function(expr) {
-    if (expr.type === "ParenthesizedExpression")
-      { return this.isSimpleAssignTarget(expr.expression) }
-    return expr.type === "Identifier" || expr.type === "MemberExpression"
-  };
-
-  var pp$8 = Parser.prototype;
-
-  // ### Statement parsing
-
-  // Parse a program. Initializes the parser, reads any number of
-  // statements, and wraps them in a Program node.  Optionally takes a
-  // `program` argument.  If present, the statements will be appended
-  // to its body instead of creating a new node.
-
-  pp$8.parseTopLevel = function(node) {
-    var exports = Object.create(null);
-    if (!node.body) { node.body = []; }
-    while (this.type !== types$1.eof) {
-      var stmt = this.parseStatement(null, true, exports);
-      node.body.push(stmt);
-    }
-    if (this.inModule)
-      { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)
-        {
-          var name = list[i];
-
-          this.raiseRecoverable(this.undefinedExports[name].start, ("Export '" + name + "' is not defined"));
-        } }
-    this.adaptDirectivePrologue(node.body);
-    this.next();
-    node.sourceType = this.options.sourceType;
-    return this.finishNode(node, "Program")
-  };
-
-  var loopLabel = {kind: "loop"}, switchLabel = {kind: "switch"};
-
-  pp$8.isLet = function(context) {
-    if (this.options.ecmaVersion < 6 || !this.isContextual("let")) { return false }
-    skipWhiteSpace.lastIndex = this.pos;
-    var skip = skipWhiteSpace.exec(this.input);
-    var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);
-    // For ambiguous cases, determine if a LexicalDeclaration (or only a
-    // Statement) is allowed here. If context is not empty then only a Statement
-    // is allowed. However, `let [` is an explicit negative lookahead for
-    // ExpressionStatement, so special-case it first.
-    if (nextCh === 91 || nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '[', '/', astral
-    if (context) { return false }
-
-    if (nextCh === 123) { return true } // '{'
-    if (isIdentifierStart(nextCh, true)) {
-      var pos = next + 1;
-      while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }
-      if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }
-      var ident = this.input.slice(next, pos);
-      if (!keywordRelationalOperator.test(ident)) { return true }
-    }
-    return false
-  };
-
-  // check 'async [no LineTerminator here] function'
-  // - 'async /*foo*/ function' is OK.
-  // - 'async /*\n*/ function' is invalid.
-  pp$8.isAsyncFunction = function() {
-    if (this.options.ecmaVersion < 8 || !this.isContextual("async"))
-      { return false }
-
-    skipWhiteSpace.lastIndex = this.pos;
-    var skip = skipWhiteSpace.exec(this.input);
-    var next = this.pos + skip[0].length, after;
-    return !lineBreak.test(this.input.slice(this.pos, next)) &&
-      this.input.slice(next, next + 8) === "function" &&
-      (next + 8 === this.input.length ||
-       !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))
-  };
-
-  // Parse a single statement.
-  //
-  // If expecting a statement and finding a slash operator, parse a
-  // regular expression literal. This is to handle cases like
-  // `if (foo) /blah/.exec(foo)`, where looking at the previous token
-  // does not help.
-
-  pp$8.parseStatement = function(context, topLevel, exports) {
-    var starttype = this.type, node = this.startNode(), kind;
-
-    if (this.isLet(context)) {
-      starttype = types$1._var;
-      kind = "let";
-    }
-
-    // Most types of statements are recognized by the keyword they
-    // start with. Many are trivial to parse, some require a bit of
-    // complexity.
-
-    switch (starttype) {
-    case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)
-    case types$1._debugger: return this.parseDebuggerStatement(node)
-    case types$1._do: return this.parseDoStatement(node)
-    case types$1._for: return this.parseForStatement(node)
-    case types$1._function:
-      // Function as sole body of either an if statement or a labeled statement
-      // works, but not when it is part of a labeled statement that is the sole
-      // body of an if statement.
-      if ((context && (this.strict || context !== "if" && context !== "label")) && this.options.ecmaVersion >= 6) { this.unexpected(); }
-      return this.parseFunctionStatement(node, false, !context)
-    case types$1._class:
-      if (context) { this.unexpected(); }
-      return this.parseClass(node, true)
-    case types$1._if: return this.parseIfStatement(node)
-    case types$1._return: return this.parseReturnStatement(node)
-    case types$1._switch: return this.parseSwitchStatement(node)
-    case types$1._throw: return this.parseThrowStatement(node)
-    case types$1._try: return this.parseTryStatement(node)
-    case types$1._const: case types$1._var:
-      kind = kind || this.value;
-      if (context && kind !== "var") { this.unexpected(); }
-      return this.parseVarStatement(node, kind)
-    case types$1._while: return this.parseWhileStatement(node)
-    case types$1._with: return this.parseWithStatement(node)
-    case types$1.braceL: return this.parseBlock(true, node)
-    case types$1.semi: return this.parseEmptyStatement(node)
-    case types$1._export:
-    case types$1._import:
-      if (this.options.ecmaVersion > 10 && starttype === types$1._import) {
-        skipWhiteSpace.lastIndex = this.pos;
-        var skip = skipWhiteSpace.exec(this.input);
-        var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);
-        if (nextCh === 40 || nextCh === 46) // '(' or '.'
-          { return this.parseExpressionStatement(node, this.parseExpression()) }
-      }
-
-      if (!this.options.allowImportExportEverywhere) {
-        if (!topLevel)
-          { this.raise(this.start, "'import' and 'export' may only appear at the top level"); }
-        if (!this.inModule)
-          { this.raise(this.start, "'import' and 'export' may appear only with 'sourceType: module'"); }
-      }
-      return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)
-
-      // If the statement does not start with a statement keyword or a
-      // brace, it's an ExpressionStatement or LabeledStatement. We
-      // simply start parsing an expression, and afterwards, if the
-      // next token is a colon and the expression was a simple
-      // Identifier node, we switch to interpreting it as a label.
-    default:
-      if (this.isAsyncFunction()) {
-        if (context) { this.unexpected(); }
-        this.next();
-        return this.parseFunctionStatement(node, true, !context)
-      }
-
-      var maybeName = this.value, expr = this.parseExpression();
-      if (starttype === types$1.name && expr.type === "Identifier" && this.eat(types$1.colon))
-        { return this.parseLabeledStatement(node, maybeName, expr, context) }
-      else { return this.parseExpressionStatement(node, expr) }
-    }
-  };
-
-  pp$8.parseBreakContinueStatement = function(node, keyword) {
-    var isBreak = keyword === "break";
-    this.next();
-    if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }
-    else if (this.type !== types$1.name) { this.unexpected(); }
-    else {
-      node.label = this.parseIdent();
-      this.semicolon();
-    }
-
-    // Verify that there is an actual destination to break or
-    // continue to.
-    var i = 0;
-    for (; i < this.labels.length; ++i) {
-      var lab = this.labels[i];
-      if (node.label == null || lab.name === node.label.name) {
-        if (lab.kind != null && (isBreak || lab.kind === "loop")) { break }
-        if (node.label && isBreak) { break }
-      }
-    }
-    if (i === this.labels.length) { this.raise(node.start, "Unsyntactic " + keyword); }
-    return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement")
-  };
-
-  pp$8.parseDebuggerStatement = function(node) {
-    this.next();
-    this.semicolon();
-    return this.finishNode(node, "DebuggerStatement")
-  };
-
-  pp$8.parseDoStatement = function(node) {
-    this.next();
-    this.labels.push(loopLabel);
-    node.body = this.parseStatement("do");
-    this.labels.pop();
-    this.expect(types$1._while);
-    node.test = this.parseParenExpression();
-    if (this.options.ecmaVersion >= 6)
-      { this.eat(types$1.semi); }
-    else
-      { this.semicolon(); }
-    return this.finishNode(node, "DoWhileStatement")
-  };
-
-  // Disambiguating between a `for` and a `for`/`in` or `for`/`of`
-  // loop is non-trivial. Basically, we have to parse the init `var`
-  // statement or expression, disallowing the `in` operator (see
-  // the second parameter to `parseExpression`), and then check
-  // whether the next token is `in` or `of`. When there is no init
-  // part (semicolon immediately after the opening parenthesis), it
-  // is a regular `for` loop.
-
-  pp$8.parseForStatement = function(node) {
-    this.next();
-    var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual("await")) ? this.lastTokStart : -1;
-    this.labels.push(loopLabel);
-    this.enterScope(0);
-    this.expect(types$1.parenL);
-    if (this.type === types$1.semi) {
-      if (awaitAt > -1) { this.unexpected(awaitAt); }
-      return this.parseFor(node, null)
-    }
-    var isLet = this.isLet();
-    if (this.type === types$1._var || this.type === types$1._const || isLet) {
-      var init$1 = this.startNode(), kind = isLet ? "let" : this.value;
-      this.next();
-      this.parseVar(init$1, true, kind);
-      this.finishNode(init$1, "VariableDeclaration");
-      if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual("of"))) && init$1.declarations.length === 1) {
-        if (this.options.ecmaVersion >= 9) {
-          if (this.type === types$1._in) {
-            if (awaitAt > -1) { this.unexpected(awaitAt); }
-          } else { node.await = awaitAt > -1; }
-        }
-        return this.parseForIn(node, init$1)
-      }
-      if (awaitAt > -1) { this.unexpected(awaitAt); }
-      return this.parseFor(node, init$1)
-    }
-    var startsWithLet = this.isContextual("let"), isForOf = false;
-    var refDestructuringErrors = new DestructuringErrors;
-    var init = this.parseExpression(awaitAt > -1 ? "await" : true, refDestructuringErrors);
-    if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual("of"))) {
-      if (this.options.ecmaVersion >= 9) {
-        if (this.type === types$1._in) {
-          if (awaitAt > -1) { this.unexpected(awaitAt); }
-        } else { node.await = awaitAt > -1; }
-      }
-      if (startsWithLet && isForOf) { this.raise(init.start, "The left-hand side of a for-of loop may not start with 'let'."); }
-      this.toAssignable(init, false, refDestructuringErrors);
-      this.checkLValPattern(init);
-      return this.parseForIn(node, init)
-    } else {
-      this.checkExpressionErrors(refDestructuringErrors, true);
-    }
-    if (awaitAt > -1) { this.unexpected(awaitAt); }
-    return this.parseFor(node, init)
-  };
-
-  pp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {
-    this.next();
-    return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)
-  };
-
-  pp$8.parseIfStatement = function(node) {
-    this.next();
-    node.test = this.parseParenExpression();
-    // allow function declarations in branches, but only in non-strict mode
-    node.consequent = this.parseStatement("if");
-    node.alternate = this.eat(types$1._else) ? this.parseStatement("if") : null;
-    return this.finishNode(node, "IfStatement")
-  };
-
-  pp$8.parseReturnStatement = function(node) {
-    if (!this.inFunction && !this.options.allowReturnOutsideFunction)
-      { this.raise(this.start, "'return' outside of function"); }
-    this.next();
-
-    // In `return` (and `break`/`continue`), the keywords with
-    // optional arguments, we eagerly look for a semicolon or the
-    // possibility to insert one.
-
-    if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }
-    else { node.argument = this.parseExpression(); this.semicolon(); }
-    return this.finishNode(node, "ReturnStatement")
-  };
-
-  pp$8.parseSwitchStatement = function(node) {
-    this.next();
-    node.discriminant = this.parseParenExpression();
-    node.cases = [];
-    this.expect(types$1.braceL);
-    this.labels.push(switchLabel);
-    this.enterScope(0);
-
-    // Statements under must be grouped (by label) in SwitchCase
-    // nodes. `cur` is used to keep the node that we are currently
-    // adding statements to.
-
-    var cur;
-    for (var sawDefault = false; this.type !== types$1.braceR;) {
-      if (this.type === types$1._case || this.type === types$1._default) {
-        var isCase = this.type === types$1._case;
-        if (cur) { this.finishNode(cur, "SwitchCase"); }
-        node.cases.push(cur = this.startNode());
-        cur.consequent = [];
-        this.next();
-        if (isCase) {
-          cur.test = this.parseExpression();
-        } else {
-          if (sawDefault) { this.raiseRecoverable(this.lastTokStart, "Multiple default clauses"); }
-          sawDefault = true;
-          cur.test = null;
-        }
-        this.expect(types$1.colon);
-      } else {
-        if (!cur) { this.unexpected(); }
-        cur.consequent.push(this.parseStatement(null));
-      }
-    }
-    this.exitScope();
-    if (cur) { this.finishNode(cur, "SwitchCase"); }
-    this.next(); // Closing brace
-    this.labels.pop();
-    return this.finishNode(node, "SwitchStatement")
-  };
-
-  pp$8.parseThrowStatement = function(node) {
-    this.next();
-    if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))
-      { this.raise(this.lastTokEnd, "Illegal newline after throw"); }
-    node.argument = this.parseExpression();
-    this.semicolon();
-    return this.finishNode(node, "ThrowStatement")
-  };
-
-  // Reused empty array added for node fields that are always empty.
-
-  var empty$1 = [];
-
-  pp$8.parseTryStatement = function(node) {
-    this.next();
-    node.block = this.parseBlock();
-    node.handler = null;
-    if (this.type === types$1._catch) {
-      var clause = this.startNode();
-      this.next();
-      if (this.eat(types$1.parenL)) {
-        clause.param = this.parseBindingAtom();
-        var simple = clause.param.type === "Identifier";
-        this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);
-        this.checkLValPattern(clause.param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);
-        this.expect(types$1.parenR);
-      } else {
-        if (this.options.ecmaVersion < 10) { this.unexpected(); }
-        clause.param = null;
-        this.enterScope(0);
-      }
-      clause.body = this.parseBlock(false);
-      this.exitScope();
-      node.handler = this.finishNode(clause, "CatchClause");
-    }
-    node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;
-    if (!node.handler && !node.finalizer)
-      { this.raise(node.start, "Missing catch or finally clause"); }
-    return this.finishNode(node, "TryStatement")
-  };
-
-  pp$8.parseVarStatement = function(node, kind) {
-    this.next();
-    this.parseVar(node, false, kind);
-    this.semicolon();
-    return this.finishNode(node, "VariableDeclaration")
-  };
-
-  pp$8.parseWhileStatement = function(node) {
-    this.next();
-    node.test = this.parseParenExpression();
-    this.labels.push(loopLabel);
-    node.body = this.parseStatement("while");
-    this.labels.pop();
-    return this.finishNode(node, "WhileStatement")
-  };
-
-  pp$8.parseWithStatement = function(node) {
-    if (this.strict) { this.raise(this.start, "'with' in strict mode"); }
-    this.next();
-    node.object = this.parseParenExpression();
-    node.body = this.parseStatement("with");
-    return this.finishNode(node, "WithStatement")
-  };
-
-  pp$8.parseEmptyStatement = function(node) {
-    this.next();
-    return this.finishNode(node, "EmptyStatement")
-  };
-
-  pp$8.parseLabeledStatement = function(node, maybeName, expr, context) {
-    for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)
-      {
-      var label = list[i$1];
-
-      if (label.name === maybeName)
-        { this.raise(expr.start, "Label '" + maybeName + "' is already declared");
-    } }
-    var kind = this.type.isLoop ? "loop" : this.type === types$1._switch ? "switch" : null;
-    for (var i = this.labels.length - 1; i >= 0; i--) {
-      var label$1 = this.labels[i];
-      if (label$1.statementStart === node.start) {
-        // Update information about previous labels on this node
-        label$1.statementStart = this.start;
-        label$1.kind = kind;
-      } else { break }
-    }
-    this.labels.push({name: maybeName, kind: kind, statementStart: this.start});
-    node.body = this.parseStatement(context ? context.indexOf("label") === -1 ? context + "label" : context : "label");
-    this.labels.pop();
-    node.label = expr;
-    return this.finishNode(node, "LabeledStatement")
-  };
-
-  pp$8.parseExpressionStatement = function(node, expr) {
-    node.expression = expr;
-    this.semicolon();
-    return this.finishNode(node, "ExpressionStatement")
-  };
-
-  // Parse a semicolon-enclosed block of statements, handling `"use
-  // strict"` declarations when `allowStrict` is true (used for
-  // function bodies).
-
-  pp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {
-    if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;
-    if ( node === void 0 ) node = this.startNode();
-
-    node.body = [];
-    this.expect(types$1.braceL);
-    if (createNewLexicalScope) { this.enterScope(0); }
-    while (this.type !== types$1.braceR) {
-      var stmt = this.parseStatement(null);
-      node.body.push(stmt);
-    }
-    if (exitStrict) { this.strict = false; }
-    this.next();
-    if (createNewLexicalScope) { this.exitScope(); }
-    return this.finishNode(node, "BlockStatement")
-  };
-
-  // Parse a regular `for` loop. The disambiguation code in
-  // `parseStatement` will already have parsed the init statement or
-  // expression.
-
-  pp$8.parseFor = function(node, init) {
-    node.init = init;
-    this.expect(types$1.semi);
-    node.test = this.type === types$1.semi ? null : this.parseExpression();
-    this.expect(types$1.semi);
-    node.update = this.type === types$1.parenR ? null : this.parseExpression();
-    this.expect(types$1.parenR);
-    node.body = this.parseStatement("for");
-    this.exitScope();
-    this.labels.pop();
-    return this.finishNode(node, "ForStatement")
-  };
-
-  // Parse a `for`/`in` and `for`/`of` loop, which are almost
-  // same from parser's perspective.
-
-  pp$8.parseForIn = function(node, init) {
-    var isForIn = this.type === types$1._in;
-    this.next();
-
-    if (
-      init.type === "VariableDeclaration" &&
-      init.declarations[0].init != null &&
-      (
-        !isForIn ||
-        this.options.ecmaVersion < 8 ||
-        this.strict ||
-        init.kind !== "var" ||
-        init.declarations[0].id.type !== "Identifier"
-      )
-    ) {
-      this.raise(
-        init.start,
-        ((isForIn ? "for-in" : "for-of") + " loop variable declaration may not have an initializer")
-      );
-    }
-    node.left = init;
-    node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();
-    this.expect(types$1.parenR);
-    node.body = this.parseStatement("for");
-    this.exitScope();
-    this.labels.pop();
-    return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement")
-  };
-
-  // Parse a list of variable declarations.
-
-  pp$8.parseVar = function(node, isFor, kind) {
-    node.declarations = [];
-    node.kind = kind;
-    for (;;) {
-      var decl = this.startNode();
-      this.parseVarId(decl, kind);
-      if (this.eat(types$1.eq)) {
-        decl.init = this.parseMaybeAssign(isFor);
-      } else if (kind === "const" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual("of")))) {
-        this.unexpected();
-      } else if (decl.id.type !== "Identifier" && !(isFor && (this.type === types$1._in || this.isContextual("of")))) {
-        this.raise(this.lastTokEnd, "Complex binding patterns require an initialization value");
-      } else {
-        decl.init = null;
-      }
-      node.declarations.push(this.finishNode(decl, "VariableDeclarator"));
-      if (!this.eat(types$1.comma)) { break }
-    }
-    return node
-  };
-
-  pp$8.parseVarId = function(decl, kind) {
-    decl.id = this.parseBindingAtom();
-    this.checkLValPattern(decl.id, kind === "var" ? BIND_VAR : BIND_LEXICAL, false);
-  };
-
-  var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;
-
-  // Parse a function declaration or literal (depending on the
-  // `statement & FUNC_STATEMENT`).
-
-  // Remove `allowExpressionBody` for 7.0.0, as it is only called with false
-  pp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {
-    this.initFunction(node);
-    if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {
-      if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))
-        { this.unexpected(); }
-      node.generator = this.eat(types$1.star);
-    }
-    if (this.options.ecmaVersion >= 8)
-      { node.async = !!isAsync; }
-
-    if (statement & FUNC_STATEMENT) {
-      node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();
-      if (node.id && !(statement & FUNC_HANGING_STATEMENT))
-        // If it is a regular function declaration in sloppy mode, then it is
-        // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding
-        // mode depends on properties of the current scope (see
-        // treatFunctionsAsVar).
-        { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }
-    }
-
-    var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-    this.yieldPos = 0;
-    this.awaitPos = 0;
-    this.awaitIdentPos = 0;
-    this.enterScope(functionFlags(node.async, node.generator));
-
-    if (!(statement & FUNC_STATEMENT))
-      { node.id = this.type === types$1.name ? this.parseIdent() : null; }
-
-    this.parseFunctionParams(node);
-    this.parseFunctionBody(node, allowExpressionBody, false, forInit);
-
-    this.yieldPos = oldYieldPos;
-    this.awaitPos = oldAwaitPos;
-    this.awaitIdentPos = oldAwaitIdentPos;
-    return this.finishNode(node, (statement & FUNC_STATEMENT) ? "FunctionDeclaration" : "FunctionExpression")
-  };
-
-  pp$8.parseFunctionParams = function(node) {
-    this.expect(types$1.parenL);
-    node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);
-    this.checkYieldAwaitInDefaultParams();
-  };
-
-  // Parse a class declaration or literal (depending on the
-  // `isStatement` parameter).
-
-  pp$8.parseClass = function(node, isStatement) {
-    this.next();
-
-    // ecma-262 14.6 Class Definitions
-    // A class definition is always strict mode code.
-    var oldStrict = this.strict;
-    this.strict = true;
-
-    this.parseClassId(node, isStatement);
-    this.parseClassSuper(node);
-    var privateNameMap = this.enterClassBody();
-    var classBody = this.startNode();
-    var hadConstructor = false;
-    classBody.body = [];
-    this.expect(types$1.braceL);
-    while (this.type !== types$1.braceR) {
-      var element = this.parseClassElement(node.superClass !== null);
-      if (element) {
-        classBody.body.push(element);
-        if (element.type === "MethodDefinition" && element.kind === "constructor") {
-          if (hadConstructor) { this.raise(element.start, "Duplicate constructor in the same class"); }
-          hadConstructor = true;
-        } else if (element.key && element.key.type === "PrivateIdentifier" && isPrivateNameConflicted(privateNameMap, element)) {
-          this.raiseRecoverable(element.key.start, ("Identifier '#" + (element.key.name) + "' has already been declared"));
-        }
-      }
-    }
-    this.strict = oldStrict;
-    this.next();
-    node.body = this.finishNode(classBody, "ClassBody");
-    this.exitClassBody();
-    return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression")
-  };
-
-  pp$8.parseClassElement = function(constructorAllowsSuper) {
-    if (this.eat(types$1.semi)) { return null }
-
-    var ecmaVersion = this.options.ecmaVersion;
-    var node = this.startNode();
-    var keyName = "";
-    var isGenerator = false;
-    var isAsync = false;
-    var kind = "method";
-    var isStatic = false;
-
-    if (this.eatContextual("static")) {
-      // Parse static init block
-      if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {
-        this.parseClassStaticBlock(node);
-        return node
-      }
-      if (this.isClassElementNameStart() || this.type === types$1.star) {
-        isStatic = true;
-      } else {
-        keyName = "static";
-      }
-    }
-    node.static = isStatic;
-    if (!keyName && ecmaVersion >= 8 && this.eatContextual("async")) {
-      if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {
-        isAsync = true;
-      } else {
-        keyName = "async";
-      }
-    }
-    if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {
-      isGenerator = true;
-    }
-    if (!keyName && !isAsync && !isGenerator) {
-      var lastValue = this.value;
-      if (this.eatContextual("get") || this.eatContextual("set")) {
-        if (this.isClassElementNameStart()) {
-          kind = lastValue;
-        } else {
-          keyName = lastValue;
-        }
-      }
-    }
-
-    // Parse element name
-    if (keyName) {
-      // 'async', 'get', 'set', or 'static' were not a keyword contextually.
-      // The last token is any of those. Make it the element name.
-      node.computed = false;
-      node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);
-      node.key.name = keyName;
-      this.finishNode(node.key, "Identifier");
-    } else {
-      this.parseClassElementName(node);
-    }
-
-    // Parse element value
-    if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== "method" || isGenerator || isAsync) {
-      var isConstructor = !node.static && checkKeyName(node, "constructor");
-      var allowsDirectSuper = isConstructor && constructorAllowsSuper;
-      // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.
-      if (isConstructor && kind !== "method") { this.raise(node.key.start, "Constructor can't have get/set modifier"); }
-      node.kind = isConstructor ? "constructor" : kind;
-      this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);
-    } else {
-      this.parseClassField(node);
-    }
-
-    return node
-  };
-
-  pp$8.isClassElementNameStart = function() {
-    return (
-      this.type === types$1.name ||
-      this.type === types$1.privateId ||
-      this.type === types$1.num ||
-      this.type === types$1.string ||
-      this.type === types$1.bracketL ||
-      this.type.keyword
-    )
-  };
-
-  pp$8.parseClassElementName = function(element) {
-    if (this.type === types$1.privateId) {
-      if (this.value === "constructor") {
-        this.raise(this.start, "Classes can't have an element named '#constructor'");
-      }
-      element.computed = false;
-      element.key = this.parsePrivateIdent();
-    } else {
-      this.parsePropertyName(element);
-    }
-  };
-
-  pp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {
-    // Check key and flags
-    var key = method.key;
-    if (method.kind === "constructor") {
-      if (isGenerator) { this.raise(key.start, "Constructor can't be a generator"); }
-      if (isAsync) { this.raise(key.start, "Constructor can't be an async method"); }
-    } else if (method.static && checkKeyName(method, "prototype")) {
-      this.raise(key.start, "Classes may not have a static property named prototype");
-    }
-
-    // Parse value
-    var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);
-
-    // Check value
-    if (method.kind === "get" && value.params.length !== 0)
-      { this.raiseRecoverable(value.start, "getter should have no params"); }
-    if (method.kind === "set" && value.params.length !== 1)
-      { this.raiseRecoverable(value.start, "setter should have exactly one param"); }
-    if (method.kind === "set" && value.params[0].type === "RestElement")
-      { this.raiseRecoverable(value.params[0].start, "Setter cannot use rest params"); }
-
-    return this.finishNode(method, "MethodDefinition")
-  };
-
-  pp$8.parseClassField = function(field) {
-    if (checkKeyName(field, "constructor")) {
-      this.raise(field.key.start, "Classes can't have a field named 'constructor'");
-    } else if (field.static && checkKeyName(field, "prototype")) {
-      this.raise(field.key.start, "Classes can't have a static field named 'prototype'");
-    }
-
-    if (this.eat(types$1.eq)) {
-      // To raise SyntaxError if 'arguments' exists in the initializer.
-      var scope = this.currentThisScope();
-      var inClassFieldInit = scope.inClassFieldInit;
-      scope.inClassFieldInit = true;
-      field.value = this.parseMaybeAssign();
-      scope.inClassFieldInit = inClassFieldInit;
-    } else {
-      field.value = null;
-    }
-    this.semicolon();
-
-    return this.finishNode(field, "PropertyDefinition")
-  };
-
-  pp$8.parseClassStaticBlock = function(node) {
-    node.body = [];
-
-    var oldLabels = this.labels;
-    this.labels = [];
-    this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);
-    while (this.type !== types$1.braceR) {
-      var stmt = this.parseStatement(null);
-      node.body.push(stmt);
-    }
-    this.next();
-    this.exitScope();
-    this.labels = oldLabels;
-
-    return this.finishNode(node, "StaticBlock")
-  };
-
-  pp$8.parseClassId = function(node, isStatement) {
-    if (this.type === types$1.name) {
-      node.id = this.parseIdent();
-      if (isStatement)
-        { this.checkLValSimple(node.id, BIND_LEXICAL, false); }
-    } else {
-      if (isStatement === true)
-        { this.unexpected(); }
-      node.id = null;
-    }
-  };
-
-  pp$8.parseClassSuper = function(node) {
-    node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(false) : null;
-  };
-
-  pp$8.enterClassBody = function() {
-    var element = {declared: Object.create(null), used: []};
-    this.privateNameStack.push(element);
-    return element.declared
-  };
-
-  pp$8.exitClassBody = function() {
-    var ref = this.privateNameStack.pop();
-    var declared = ref.declared;
-    var used = ref.used;
-    var len = this.privateNameStack.length;
-    var parent = len === 0 ? null : this.privateNameStack[len - 1];
-    for (var i = 0; i < used.length; ++i) {
-      var id = used[i];
-      if (!hasOwn(declared, id.name)) {
-        if (parent) {
-          parent.used.push(id);
-        } else {
-          this.raiseRecoverable(id.start, ("Private field '#" + (id.name) + "' must be declared in an enclosing class"));
-        }
-      }
-    }
-  };
-
-  function isPrivateNameConflicted(privateNameMap, element) {
-    var name = element.key.name;
-    var curr = privateNameMap[name];
-
-    var next = "true";
-    if (element.type === "MethodDefinition" && (element.kind === "get" || element.kind === "set")) {
-      next = (element.static ? "s" : "i") + element.kind;
-    }
-
-    // `class { get #a(){}; static set #a(_){} }` is also conflict.
-    if (
-      curr === "iget" && next === "iset" ||
-      curr === "iset" && next === "iget" ||
-      curr === "sget" && next === "sset" ||
-      curr === "sset" && next === "sget"
-    ) {
-      privateNameMap[name] = "true";
-      return false
-    } else if (!curr) {
-      privateNameMap[name] = next;
-      return false
-    } else {
-      return true
-    }
-  }
-
-  function checkKeyName(node, name) {
-    var computed = node.computed;
-    var key = node.key;
-    return !computed && (
-      key.type === "Identifier" && key.name === name ||
-      key.type === "Literal" && key.value === name
-    )
-  }
-
-  // Parses module export declaration.
-
-  pp$8.parseExport = function(node, exports) {
-    this.next();
-    // export * from '...'
-    if (this.eat(types$1.star)) {
-      if (this.options.ecmaVersion >= 11) {
-        if (this.eatContextual("as")) {
-          node.exported = this.parseModuleExportName();
-          this.checkExport(exports, node.exported, this.lastTokStart);
-        } else {
-          node.exported = null;
-        }
-      }
-      this.expectContextual("from");
-      if (this.type !== types$1.string) { this.unexpected(); }
-      node.source = this.parseExprAtom();
-      this.semicolon();
-      return this.finishNode(node, "ExportAllDeclaration")
-    }
-    if (this.eat(types$1._default)) { // export default ...
-      this.checkExport(exports, "default", this.lastTokStart);
-      var isAsync;
-      if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {
-        var fNode = this.startNode();
-        this.next();
-        if (isAsync) { this.next(); }
-        node.declaration = this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync);
-      } else if (this.type === types$1._class) {
-        var cNode = this.startNode();
-        node.declaration = this.parseClass(cNode, "nullableID");
-      } else {
-        node.declaration = this.parseMaybeAssign();
-        this.semicolon();
-      }
-      return this.finishNode(node, "ExportDefaultDeclaration")
-    }
-    // export var|const|let|function|class ...
-    if (this.shouldParseExportStatement()) {
-      node.declaration = this.parseStatement(null);
-      if (node.declaration.type === "VariableDeclaration")
-        { this.checkVariableExport(exports, node.declaration.declarations); }
-      else
-        { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }
-      node.specifiers = [];
-      node.source = null;
-    } else { // export { x, y as z } [from '...']
-      node.declaration = null;
-      node.specifiers = this.parseExportSpecifiers(exports);
-      if (this.eatContextual("from")) {
-        if (this.type !== types$1.string) { this.unexpected(); }
-        node.source = this.parseExprAtom();
-      } else {
-        for (var i = 0, list = node.specifiers; i < list.length; i += 1) {
-          // check for keywords used as local names
-          var spec = list[i];
-
-          this.checkUnreserved(spec.local);
-          // check if export is defined
-          this.checkLocalExport(spec.local);
-
-          if (spec.local.type === "Literal") {
-            this.raise(spec.local.start, "A string literal cannot be used as an exported binding without `from`.");
-          }
-        }
-
-        node.source = null;
-      }
-      this.semicolon();
-    }
-    return this.finishNode(node, "ExportNamedDeclaration")
-  };
-
-  pp$8.checkExport = function(exports, name, pos) {
-    if (!exports) { return }
-    if (typeof name !== "string")
-      { name = name.type === "Identifier" ? name.name : name.value; }
-    if (hasOwn(exports, name))
-      { this.raiseRecoverable(pos, "Duplicate export '" + name + "'"); }
-    exports[name] = true;
-  };
-
-  pp$8.checkPatternExport = function(exports, pat) {
-    var type = pat.type;
-    if (type === "Identifier")
-      { this.checkExport(exports, pat, pat.start); }
-    else if (type === "ObjectPattern")
-      { for (var i = 0, list = pat.properties; i < list.length; i += 1)
-        {
-          var prop = list[i];
-
-          this.checkPatternExport(exports, prop);
-        } }
-    else if (type === "ArrayPattern")
-      { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {
-        var elt = list$1[i$1];
-
-          if (elt) { this.checkPatternExport(exports, elt); }
-      } }
-    else if (type === "Property")
-      { this.checkPatternExport(exports, pat.value); }
-    else if (type === "AssignmentPattern")
-      { this.checkPatternExport(exports, pat.left); }
-    else if (type === "RestElement")
-      { this.checkPatternExport(exports, pat.argument); }
-    else if (type === "ParenthesizedExpression")
-      { this.checkPatternExport(exports, pat.expression); }
-  };
-
-  pp$8.checkVariableExport = function(exports, decls) {
-    if (!exports) { return }
-    for (var i = 0, list = decls; i < list.length; i += 1)
-      {
-      var decl = list[i];
-
-      this.checkPatternExport(exports, decl.id);
-    }
-  };
-
-  pp$8.shouldParseExportStatement = function() {
-    return this.type.keyword === "var" ||
-      this.type.keyword === "const" ||
-      this.type.keyword === "class" ||
-      this.type.keyword === "function" ||
-      this.isLet() ||
-      this.isAsyncFunction()
-  };
-
-  // Parses a comma-separated list of module exports.
-
-  pp$8.parseExportSpecifiers = function(exports) {
-    var nodes = [], first = true;
-    // export { x, y as z } [from '...']
-    this.expect(types$1.braceL);
-    while (!this.eat(types$1.braceR)) {
-      if (!first) {
-        this.expect(types$1.comma);
-        if (this.afterTrailingComma(types$1.braceR)) { break }
-      } else { first = false; }
-
-      var node = this.startNode();
-      node.local = this.parseModuleExportName();
-      node.exported = this.eatContextual("as") ? this.parseModuleExportName() : node.local;
-      this.checkExport(
-        exports,
-        node.exported,
-        node.exported.start
-      );
-      nodes.push(this.finishNode(node, "ExportSpecifier"));
-    }
-    return nodes
-  };
-
-  // Parses import declaration.
-
-  pp$8.parseImport = function(node) {
-    this.next();
-    // import '...'
-    if (this.type === types$1.string) {
-      node.specifiers = empty$1;
-      node.source = this.parseExprAtom();
-    } else {
-      node.specifiers = this.parseImportSpecifiers();
-      this.expectContextual("from");
-      node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();
-    }
-    this.semicolon();
-    return this.finishNode(node, "ImportDeclaration")
-  };
-
-  // Parses a comma-separated list of module imports.
-
-  pp$8.parseImportSpecifiers = function() {
-    var nodes = [], first = true;
-    if (this.type === types$1.name) {
-      // import defaultObj, { x, y as z } from '...'
-      var node = this.startNode();
-      node.local = this.parseIdent();
-      this.checkLValSimple(node.local, BIND_LEXICAL);
-      nodes.push(this.finishNode(node, "ImportDefaultSpecifier"));
-      if (!this.eat(types$1.comma)) { return nodes }
-    }
-    if (this.type === types$1.star) {
-      var node$1 = this.startNode();
-      this.next();
-      this.expectContextual("as");
-      node$1.local = this.parseIdent();
-      this.checkLValSimple(node$1.local, BIND_LEXICAL);
-      nodes.push(this.finishNode(node$1, "ImportNamespaceSpecifier"));
-      return nodes
-    }
-    this.expect(types$1.braceL);
-    while (!this.eat(types$1.braceR)) {
-      if (!first) {
-        this.expect(types$1.comma);
-        if (this.afterTrailingComma(types$1.braceR)) { break }
-      } else { first = false; }
-
-      var node$2 = this.startNode();
-      node$2.imported = this.parseModuleExportName();
-      if (this.eatContextual("as")) {
-        node$2.local = this.parseIdent();
-      } else {
-        this.checkUnreserved(node$2.imported);
-        node$2.local = node$2.imported;
-      }
-      this.checkLValSimple(node$2.local, BIND_LEXICAL);
-      nodes.push(this.finishNode(node$2, "ImportSpecifier"));
-    }
-    return nodes
-  };
-
-  pp$8.parseModuleExportName = function() {
-    if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {
-      var stringLiteral = this.parseLiteral(this.value);
-      if (loneSurrogate.test(stringLiteral.value)) {
-        this.raise(stringLiteral.start, "An export name cannot include a lone surrogate.");
-      }
-      return stringLiteral
-    }
-    return this.parseIdent(true)
-  };
-
-  // Set `ExpressionStatement#directive` property for directive prologues.
-  pp$8.adaptDirectivePrologue = function(statements) {
-    for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {
-      statements[i].directive = statements[i].expression.raw.slice(1, -1);
-    }
-  };
-  pp$8.isDirectiveCandidate = function(statement) {
-    return (
-      this.options.ecmaVersion >= 5 &&
-      statement.type === "ExpressionStatement" &&
-      statement.expression.type === "Literal" &&
-      typeof statement.expression.value === "string" &&
-      // Reject parenthesized strings.
-      (this.input[statement.start] === "\"" || this.input[statement.start] === "'")
-    )
-  };
-
-  var pp$7 = Parser.prototype;
-
-  // Convert existing expression atom to assignable pattern
-  // if possible.
-
-  pp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {
-    if (this.options.ecmaVersion >= 6 && node) {
-      switch (node.type) {
-      case "Identifier":
-        if (this.inAsync && node.name === "await")
-          { this.raise(node.start, "Cannot use 'await' as identifier inside an async function"); }
-        break
-
-      case "ObjectPattern":
-      case "ArrayPattern":
-      case "AssignmentPattern":
-      case "RestElement":
-        break
-
-      case "ObjectExpression":
-        node.type = "ObjectPattern";
-        if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
-        for (var i = 0, list = node.properties; i < list.length; i += 1) {
-          var prop = list[i];
-
-        this.toAssignable(prop, isBinding);
-          // Early error:
-          //   AssignmentRestProperty[Yield, Await] :
-          //     `...` DestructuringAssignmentTarget[Yield, Await]
-          //
-          //   It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.
-          if (
-            prop.type === "RestElement" &&
-            (prop.argument.type === "ArrayPattern" || prop.argument.type === "ObjectPattern")
-          ) {
-            this.raise(prop.argument.start, "Unexpected token");
-          }
-        }
-        break
-
-      case "Property":
-        // AssignmentProperty has type === "Property"
-        if (node.kind !== "init") { this.raise(node.key.start, "Object pattern can't contain getter or setter"); }
-        this.toAssignable(node.value, isBinding);
-        break
-
-      case "ArrayExpression":
-        node.type = "ArrayPattern";
-        if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
-        this.toAssignableList(node.elements, isBinding);
-        break
-
-      case "SpreadElement":
-        node.type = "RestElement";
-        this.toAssignable(node.argument, isBinding);
-        if (node.argument.type === "AssignmentPattern")
-          { this.raise(node.argument.start, "Rest elements cannot have a default value"); }
-        break
-
-      case "AssignmentExpression":
-        if (node.operator !== "=") { this.raise(node.left.end, "Only '=' operator can be used for specifying default value."); }
-        node.type = "AssignmentPattern";
-        delete node.operator;
-        this.toAssignable(node.left, isBinding);
-        break
-
-      case "ParenthesizedExpression":
-        this.toAssignable(node.expression, isBinding, refDestructuringErrors);
-        break
-
-      case "ChainExpression":
-        this.raiseRecoverable(node.start, "Optional chaining cannot appear in left-hand side");
-        break
-
-      case "MemberExpression":
-        if (!isBinding) { break }
-
-      default:
-        this.raise(node.start, "Assigning to rvalue");
-      }
-    } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }
-    return node
-  };
-
-  // Convert list of expression atoms to binding list.
-
-  pp$7.toAssignableList = function(exprList, isBinding) {
-    var end = exprList.length;
-    for (var i = 0; i < end; i++) {
-      var elt = exprList[i];
-      if (elt) { this.toAssignable(elt, isBinding); }
-    }
-    if (end) {
-      var last = exprList[end - 1];
-      if (this.options.ecmaVersion === 6 && isBinding && last && last.type === "RestElement" && last.argument.type !== "Identifier")
-        { this.unexpected(last.argument.start); }
-    }
-    return exprList
-  };
-
-  // Parses spread element.
-
-  pp$7.parseSpread = function(refDestructuringErrors) {
-    var node = this.startNode();
-    this.next();
-    node.argument = this.parseMaybeAssign(false, refDestructuringErrors);
-    return this.finishNode(node, "SpreadElement")
-  };
-
-  pp$7.parseRestBinding = function() {
-    var node = this.startNode();
-    this.next();
-
-    // RestElement inside of a function parameter must be an identifier
-    if (this.options.ecmaVersion === 6 && this.type !== types$1.name)
-      { this.unexpected(); }
-
-    node.argument = this.parseBindingAtom();
-
-    return this.finishNode(node, "RestElement")
-  };
-
-  // Parses lvalue (assignable) atom.
-
-  pp$7.parseBindingAtom = function() {
-    if (this.options.ecmaVersion >= 6) {
-      switch (this.type) {
-      case types$1.bracketL:
-        var node = this.startNode();
-        this.next();
-        node.elements = this.parseBindingList(types$1.bracketR, true, true);
-        return this.finishNode(node, "ArrayPattern")
-
-      case types$1.braceL:
-        return this.parseObj(true)
-      }
-    }
-    return this.parseIdent()
-  };
-
-  pp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma) {
-    var elts = [], first = true;
-    while (!this.eat(close)) {
-      if (first) { first = false; }
-      else { this.expect(types$1.comma); }
-      if (allowEmpty && this.type === types$1.comma) {
-        elts.push(null);
-      } else if (allowTrailingComma && this.afterTrailingComma(close)) {
-        break
-      } else if (this.type === types$1.ellipsis) {
-        var rest = this.parseRestBinding();
-        this.parseBindingListItem(rest);
-        elts.push(rest);
-        if (this.type === types$1.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); }
-        this.expect(close);
-        break
-      } else {
-        var elem = this.parseMaybeDefault(this.start, this.startLoc);
-        this.parseBindingListItem(elem);
-        elts.push(elem);
-      }
-    }
-    return elts
-  };
-
-  pp$7.parseBindingListItem = function(param) {
-    return param
-  };
-
-  // Parses assignment pattern around given atom if possible.
-
-  pp$7.parseMaybeDefault = function(startPos, startLoc, left) {
-    left = left || this.parseBindingAtom();
-    if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }
-    var node = this.startNodeAt(startPos, startLoc);
-    node.left = left;
-    node.right = this.parseMaybeAssign();
-    return this.finishNode(node, "AssignmentPattern")
-  };
-
-  // The following three functions all verify that a node is an lvalue —
-  // something that can be bound, or assigned to. In order to do so, they perform
-  // a variety of checks:
-  //
-  // - Check that none of the bound/assigned-to identifiers are reserved words.
-  // - Record name declarations for bindings in the appropriate scope.
-  // - Check duplicate argument names, if checkClashes is set.
-  //
-  // If a complex binding pattern is encountered (e.g., object and array
-  // destructuring), the entire pattern is recursively checked.
-  //
-  // There are three versions of checkLVal*() appropriate for different
-  // circumstances:
-  //
-  // - checkLValSimple() shall be used if the syntactic construct supports
-  //   nothing other than identifiers and member expressions. Parenthesized
-  //   expressions are also correctly handled. This is generally appropriate for
-  //   constructs for which the spec says
-  //
-  //   > It is a Syntax Error if AssignmentTargetType of [the production] is not
-  //   > simple.
-  //
-  //   It is also appropriate for checking if an identifier is valid and not
-  //   defined elsewhere, like import declarations or function/class identifiers.
-  //
-  //   Examples where this is used include:
-  //     a += …;
-  //     import a from '…';
-  //   where a is the node to be checked.
-  //
-  // - checkLValPattern() shall be used if the syntactic construct supports
-  //   anything checkLValSimple() supports, as well as object and array
-  //   destructuring patterns. This is generally appropriate for constructs for
-  //   which the spec says
-  //
-  //   > It is a Syntax Error if [the production] is neither an ObjectLiteral nor
-  //   > an ArrayLiteral and AssignmentTargetType of [the production] is not
-  //   > simple.
-  //
-  //   Examples where this is used include:
-  //     (a = …);
-  //     const a = …;
-  //     try { … } catch (a) { … }
-  //   where a is the node to be checked.
-  //
-  // - checkLValInnerPattern() shall be used if the syntactic construct supports
-  //   anything checkLValPattern() supports, as well as default assignment
-  //   patterns, rest elements, and other constructs that may appear within an
-  //   object or array destructuring pattern.
-  //
-  //   As a special case, function parameters also use checkLValInnerPattern(),
-  //   as they also support defaults and rest constructs.
-  //
-  // These functions deliberately support both assignment and binding constructs,
-  // as the logic for both is exceedingly similar. If the node is the target of
-  // an assignment, then bindingType should be set to BIND_NONE. Otherwise, it
-  // should be set to the appropriate BIND_* constant, like BIND_VAR or
-  // BIND_LEXICAL.
-  //
-  // If the function is called with a non-BIND_NONE bindingType, then
-  // additionally a checkClashes object may be specified to allow checking for
-  // duplicate argument names. checkClashes is ignored if the provided construct
-  // is an assignment (i.e., bindingType is BIND_NONE).
-
-  pp$7.checkLValSimple = function(expr, bindingType, checkClashes) {
-    if ( bindingType === void 0 ) bindingType = BIND_NONE;
-
-    var isBind = bindingType !== BIND_NONE;
-
-    switch (expr.type) {
-    case "Identifier":
-      if (this.strict && this.reservedWordsStrictBind.test(expr.name))
-        { this.raiseRecoverable(expr.start, (isBind ? "Binding " : "Assigning to ") + expr.name + " in strict mode"); }
-      if (isBind) {
-        if (bindingType === BIND_LEXICAL && expr.name === "let")
-          { this.raiseRecoverable(expr.start, "let is disallowed as a lexically bound name"); }
-        if (checkClashes) {
-          if (hasOwn(checkClashes, expr.name))
-            { this.raiseRecoverable(expr.start, "Argument name clash"); }
-          checkClashes[expr.name] = true;
-        }
-        if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }
-      }
-      break
-
-    case "ChainExpression":
-      this.raiseRecoverable(expr.start, "Optional chaining cannot appear in left-hand side");
-      break
-
-    case "MemberExpression":
-      if (isBind) { this.raiseRecoverable(expr.start, "Binding member expression"); }
-      break
-
-    case "ParenthesizedExpression":
-      if (isBind) { this.raiseRecoverable(expr.start, "Binding parenthesized expression"); }
-      return this.checkLValSimple(expr.expression, bindingType, checkClashes)
-
-    default:
-      this.raise(expr.start, (isBind ? "Binding" : "Assigning to") + " rvalue");
-    }
-  };
-
-  pp$7.checkLValPattern = function(expr, bindingType, checkClashes) {
-    if ( bindingType === void 0 ) bindingType = BIND_NONE;
-
-    switch (expr.type) {
-    case "ObjectPattern":
-      for (var i = 0, list = expr.properties; i < list.length; i += 1) {
-        var prop = list[i];
-
-      this.checkLValInnerPattern(prop, bindingType, checkClashes);
-      }
-      break
-
-    case "ArrayPattern":
-      for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {
-        var elem = list$1[i$1];
-
-      if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }
-      }
-      break
-
-    default:
-      this.checkLValSimple(expr, bindingType, checkClashes);
-    }
-  };
-
-  pp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {
-    if ( bindingType === void 0 ) bindingType = BIND_NONE;
-
-    switch (expr.type) {
-    case "Property":
-      // AssignmentProperty has type === "Property"
-      this.checkLValInnerPattern(expr.value, bindingType, checkClashes);
-      break
-
-    case "AssignmentPattern":
-      this.checkLValPattern(expr.left, bindingType, checkClashes);
-      break
-
-    case "RestElement":
-      this.checkLValPattern(expr.argument, bindingType, checkClashes);
-      break
-
-    default:
-      this.checkLValPattern(expr, bindingType, checkClashes);
-    }
-  };
-
-  // The algorithm used to determine whether a regexp can appear at a
-
-  var TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {
-    this.token = token;
-    this.isExpr = !!isExpr;
-    this.preserveSpace = !!preserveSpace;
-    this.override = override;
-    this.generator = !!generator;
-  };
-
-  var types = {
-    b_stat: new TokContext("{", false),
-    b_expr: new TokContext("{", true),
-    b_tmpl: new TokContext("${", false),
-    p_stat: new TokContext("(", false),
-    p_expr: new TokContext("(", true),
-    q_tmpl: new TokContext("`", true, true, function (p) { return p.tryReadTemplateToken(); }),
-    f_stat: new TokContext("function", false),
-    f_expr: new TokContext("function", true),
-    f_expr_gen: new TokContext("function", true, false, null, true),
-    f_gen: new TokContext("function", false, false, null, true)
-  };
-
-  var pp$6 = Parser.prototype;
-
-  pp$6.initialContext = function() {
-    return [types.b_stat]
-  };
-
-  pp$6.curContext = function() {
-    return this.context[this.context.length - 1]
-  };
-
-  pp$6.braceIsBlock = function(prevType) {
-    var parent = this.curContext();
-    if (parent === types.f_expr || parent === types.f_stat)
-      { return true }
-    if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))
-      { return !parent.isExpr }
-
-    // The check for `tt.name && exprAllowed` detects whether we are
-    // after a `yield` or `of` construct. See the `updateContext` for
-    // `tt.name`.
-    if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)
-      { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }
-    if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)
-      { return true }
-    if (prevType === types$1.braceL)
-      { return parent === types.b_stat }
-    if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)
-      { return false }
-    return !this.exprAllowed
-  };
-
-  pp$6.inGeneratorContext = function() {
-    for (var i = this.context.length - 1; i >= 1; i--) {
-      var context = this.context[i];
-      if (context.token === "function")
-        { return context.generator }
-    }
-    return false
-  };
-
-  pp$6.updateContext = function(prevType) {
-    var update, type = this.type;
-    if (type.keyword && prevType === types$1.dot)
-      { this.exprAllowed = false; }
-    else if (update = type.updateContext)
-      { update.call(this, prevType); }
-    else
-      { this.exprAllowed = type.beforeExpr; }
-  };
-
-  // Used to handle egde cases when token context could not be inferred correctly during tokenization phase
-
-  pp$6.overrideContext = function(tokenCtx) {
-    if (this.curContext() !== tokenCtx) {
-      this.context[this.context.length - 1] = tokenCtx;
-    }
-  };
-
-  // Token-specific context update code
-
-  types$1.parenR.updateContext = types$1.braceR.updateContext = function() {
-    if (this.context.length === 1) {
-      this.exprAllowed = true;
-      return
-    }
-    var out = this.context.pop();
-    if (out === types.b_stat && this.curContext().token === "function") {
-      out = this.context.pop();
-    }
-    this.exprAllowed = !out.isExpr;
-  };
-
-  types$1.braceL.updateContext = function(prevType) {
-    this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);
-    this.exprAllowed = true;
-  };
-
-  types$1.dollarBraceL.updateContext = function() {
-    this.context.push(types.b_tmpl);
-    this.exprAllowed = true;
-  };
-
-  types$1.parenL.updateContext = function(prevType) {
-    var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;
-    this.context.push(statementParens ? types.p_stat : types.p_expr);
-    this.exprAllowed = true;
-  };
-
-  types$1.incDec.updateContext = function() {
-    // tokExprAllowed stays unchanged
-  };
-
-  types$1._function.updateContext = types$1._class.updateContext = function(prevType) {
-    if (prevType.beforeExpr && prevType !== types$1._else &&
-        !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&
-        !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&
-        !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))
-      { this.context.push(types.f_expr); }
-    else
-      { this.context.push(types.f_stat); }
-    this.exprAllowed = false;
-  };
-
-  types$1.backQuote.updateContext = function() {
-    if (this.curContext() === types.q_tmpl)
-      { this.context.pop(); }
-    else
-      { this.context.push(types.q_tmpl); }
-    this.exprAllowed = false;
-  };
-
-  types$1.star.updateContext = function(prevType) {
-    if (prevType === types$1._function) {
-      var index = this.context.length - 1;
-      if (this.context[index] === types.f_expr)
-        { this.context[index] = types.f_expr_gen; }
-      else
-        { this.context[index] = types.f_gen; }
-    }
-    this.exprAllowed = true;
-  };
-
-  types$1.name.updateContext = function(prevType) {
-    var allowed = false;
-    if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {
-      if (this.value === "of" && !this.exprAllowed ||
-          this.value === "yield" && this.inGeneratorContext())
-        { allowed = true; }
-    }
-    this.exprAllowed = allowed;
-  };
-
-  // A recursive descent parser operates by defining functions for all
-
-  var pp$5 = Parser.prototype;
-
-  // Check if property name clashes with already added.
-  // Object/class getters and setters are not allowed to clash —
-  // either with each other or with an init property — and in
-  // strict mode, init properties are also not allowed to be repeated.
-
-  pp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {
-    if (this.options.ecmaVersion >= 9 && prop.type === "SpreadElement")
-      { return }
-    if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))
-      { return }
-    var key = prop.key;
-    var name;
-    switch (key.type) {
-    case "Identifier": name = key.name; break
-    case "Literal": name = String(key.value); break
-    default: return
-    }
-    var kind = prop.kind;
-    if (this.options.ecmaVersion >= 6) {
-      if (name === "__proto__" && kind === "init") {
-        if (propHash.proto) {
-          if (refDestructuringErrors) {
-            if (refDestructuringErrors.doubleProto < 0) {
-              refDestructuringErrors.doubleProto = key.start;
-            }
-          } else {
-            this.raiseRecoverable(key.start, "Redefinition of __proto__ property");
-          }
-        }
-        propHash.proto = true;
-      }
-      return
-    }
-    name = "$" + name;
-    var other = propHash[name];
-    if (other) {
-      var redefinition;
-      if (kind === "init") {
-        redefinition = this.strict && other.init || other.get || other.set;
-      } else {
-        redefinition = other.init || other[kind];
-      }
-      if (redefinition)
-        { this.raiseRecoverable(key.start, "Redefinition of property"); }
-    } else {
-      other = propHash[name] = {
-        init: false,
-        get: false,
-        set: false
-      };
-    }
-    other[kind] = true;
-  };
-
-  // ### Expression parsing
-
-  // These nest, from the most general expression type at the top to
-  // 'atomic', nondivisible expression types at the bottom. Most of
-  // the functions will simply let the function(s) below them parse,
-  // and, *if* the syntactic construct they handle is present, wrap
-  // the AST node that the inner parser gave them in another node.
-
-  // Parse a full expression. The optional arguments are used to
-  // forbid the `in` operator (in for loops initalization expressions)
-  // and provide reference for storing '=' operator inside shorthand
-  // property assignment in contexts where both object expression
-  // and object pattern might appear (so it's possible to raise
-  // delayed syntax error at correct position).
-
-  pp$5.parseExpression = function(forInit, refDestructuringErrors) {
-    var startPos = this.start, startLoc = this.startLoc;
-    var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);
-    if (this.type === types$1.comma) {
-      var node = this.startNodeAt(startPos, startLoc);
-      node.expressions = [expr];
-      while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }
-      return this.finishNode(node, "SequenceExpression")
-    }
-    return expr
-  };
-
-  // Parse an assignment expression. This includes applications of
-  // operators like `+=`.
-
-  pp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {
-    if (this.isContextual("yield")) {
-      if (this.inGenerator) { return this.parseYield(forInit) }
-      // The tokenizer will assume an expression is allowed after
-      // `yield`, but this isn't that kind of yield
-      else { this.exprAllowed = false; }
-    }
-
-    var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;
-    if (refDestructuringErrors) {
-      oldParenAssign = refDestructuringErrors.parenthesizedAssign;
-      oldTrailingComma = refDestructuringErrors.trailingComma;
-      oldDoubleProto = refDestructuringErrors.doubleProto;
-      refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;
-    } else {
-      refDestructuringErrors = new DestructuringErrors;
-      ownDestructuringErrors = true;
-    }
-
-    var startPos = this.start, startLoc = this.startLoc;
-    if (this.type === types$1.parenL || this.type === types$1.name) {
-      this.potentialArrowAt = this.start;
-      this.potentialArrowInForAwait = forInit === "await";
-    }
-    var left = this.parseMaybeConditional(forInit, refDestructuringErrors);
-    if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }
-    if (this.type.isAssign) {
-      var node = this.startNodeAt(startPos, startLoc);
-      node.operator = this.value;
-      if (this.type === types$1.eq)
-        { left = this.toAssignable(left, false, refDestructuringErrors); }
-      if (!ownDestructuringErrors) {
-        refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;
-      }
-      if (refDestructuringErrors.shorthandAssign >= left.start)
-        { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly
-      if (this.type === types$1.eq)
-        { this.checkLValPattern(left); }
-      else
-        { this.checkLValSimple(left); }
-      node.left = left;
-      this.next();
-      node.right = this.parseMaybeAssign(forInit);
-      if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }
-      return this.finishNode(node, "AssignmentExpression")
-    } else {
-      if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }
-    }
-    if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }
-    if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }
-    return left
-  };
-
-  // Parse a ternary conditional (`?:`) operator.
-
-  pp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {
-    var startPos = this.start, startLoc = this.startLoc;
-    var expr = this.parseExprOps(forInit, refDestructuringErrors);
-    if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
-    if (this.eat(types$1.question)) {
-      var node = this.startNodeAt(startPos, startLoc);
-      node.test = expr;
-      node.consequent = this.parseMaybeAssign();
-      this.expect(types$1.colon);
-      node.alternate = this.parseMaybeAssign(forInit);
-      return this.finishNode(node, "ConditionalExpression")
-    }
-    return expr
-  };
-
-  // Start the precedence parser.
-
-  pp$5.parseExprOps = function(forInit, refDestructuringErrors) {
-    var startPos = this.start, startLoc = this.startLoc;
-    var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);
-    if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
-    return expr.start === startPos && expr.type === "ArrowFunctionExpression" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)
-  };
-
-  // Parse binary operators with the operator precedence parsing
-  // algorithm. `left` is the left-hand side of the operator.
-  // `minPrec` provides context that allows the function to stop and
-  // defer further parser to one of its callers when it encounters an
-  // operator that has a lower precedence than the set it is parsing.
-
-  pp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {
-    var prec = this.type.binop;
-    if (prec != null && (!forInit || this.type !== types$1._in)) {
-      if (prec > minPrec) {
-        var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;
-        var coalesce = this.type === types$1.coalesce;
-        if (coalesce) {
-          // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.
-          // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.
-          prec = types$1.logicalAND.binop;
-        }
-        var op = this.value;
-        this.next();
-        var startPos = this.start, startLoc = this.startLoc;
-        var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);
-        var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);
-        if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {
-          this.raiseRecoverable(this.start, "Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses");
-        }
-        return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)
-      }
-    }
-    return left
-  };
-
-  pp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {
-    if (right.type === "PrivateIdentifier") { this.raise(right.start, "Private identifier can only be left side of binary expression"); }
-    var node = this.startNodeAt(startPos, startLoc);
-    node.left = left;
-    node.operator = op;
-    node.right = right;
-    return this.finishNode(node, logical ? "LogicalExpression" : "BinaryExpression")
-  };
-
-  // Parse unary operators, both prefix and postfix.
-
-  pp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {
-    var startPos = this.start, startLoc = this.startLoc, expr;
-    if (this.isContextual("await") && this.canAwait) {
-      expr = this.parseAwait(forInit);
-      sawUnary = true;
-    } else if (this.type.prefix) {
-      var node = this.startNode(), update = this.type === types$1.incDec;
-      node.operator = this.value;
-      node.prefix = true;
-      this.next();
-      node.argument = this.parseMaybeUnary(null, true, update, forInit);
-      this.checkExpressionErrors(refDestructuringErrors, true);
-      if (update) { this.checkLValSimple(node.argument); }
-      else if (this.strict && node.operator === "delete" &&
-               node.argument.type === "Identifier")
-        { this.raiseRecoverable(node.start, "Deleting local variable in strict mode"); }
-      else if (node.operator === "delete" && isPrivateFieldAccess(node.argument))
-        { this.raiseRecoverable(node.start, "Private fields can not be deleted"); }
-      else { sawUnary = true; }
-      expr = this.finishNode(node, update ? "UpdateExpression" : "UnaryExpression");
-    } else if (!sawUnary && this.type === types$1.privateId) {
-      if (forInit || this.privateNameStack.length === 0) { this.unexpected(); }
-      expr = this.parsePrivateIdent();
-      // only could be private fields in 'in', such as #x in obj
-      if (this.type !== types$1._in) { this.unexpected(); }
-    } else {
-      expr = this.parseExprSubscripts(refDestructuringErrors, forInit);
-      if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }
-      while (this.type.postfix && !this.canInsertSemicolon()) {
-        var node$1 = this.startNodeAt(startPos, startLoc);
-        node$1.operator = this.value;
-        node$1.prefix = false;
-        node$1.argument = expr;
-        this.checkLValSimple(expr);
-        this.next();
-        expr = this.finishNode(node$1, "UpdateExpression");
-      }
-    }
-
-    if (!incDec && this.eat(types$1.starstar)) {
-      if (sawUnary)
-        { this.unexpected(this.lastTokStart); }
-      else
-        { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), "**", false) }
-    } else {
-      return expr
-    }
-  };
-
-  function isPrivateFieldAccess(node) {
-    return (
-      node.type === "MemberExpression" && node.property.type === "PrivateIdentifier" ||
-      node.type === "ChainExpression" && isPrivateFieldAccess(node.expression)
-    )
-  }
-
-  // Parse call, dot, and `[]`-subscript expressions.
-
-  pp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {
-    var startPos = this.start, startLoc = this.startLoc;
-    var expr = this.parseExprAtom(refDestructuringErrors, forInit);
-    if (expr.type === "ArrowFunctionExpression" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== ")")
-      { return expr }
-    var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);
-    if (refDestructuringErrors && result.type === "MemberExpression") {
-      if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }
-      if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }
-      if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }
-    }
-    return result
-  };
-
-  pp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {
-    var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === "Identifier" && base.name === "async" &&
-        this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&
-        this.potentialArrowAt === base.start;
-    var optionalChained = false;
-
-    while (true) {
-      var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);
-
-      if (element.optional) { optionalChained = true; }
-      if (element === base || element.type === "ArrowFunctionExpression") {
-        if (optionalChained) {
-          var chainNode = this.startNodeAt(startPos, startLoc);
-          chainNode.expression = element;
-          element = this.finishNode(chainNode, "ChainExpression");
-        }
-        return element
-      }
-
-      base = element;
-    }
-  };
-
-  pp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {
-    var optionalSupported = this.options.ecmaVersion >= 11;
-    var optional = optionalSupported && this.eat(types$1.questionDot);
-    if (noCalls && optional) { this.raise(this.lastTokStart, "Optional chaining cannot appear in the callee of new expressions"); }
-
-    var computed = this.eat(types$1.bracketL);
-    if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {
-      var node = this.startNodeAt(startPos, startLoc);
-      node.object = base;
-      if (computed) {
-        node.property = this.parseExpression();
-        this.expect(types$1.bracketR);
-      } else if (this.type === types$1.privateId && base.type !== "Super") {
-        node.property = this.parsePrivateIdent();
-      } else {
-        node.property = this.parseIdent(this.options.allowReserved !== "never");
-      }
-      node.computed = !!computed;
-      if (optionalSupported) {
-        node.optional = optional;
-      }
-      base = this.finishNode(node, "MemberExpression");
-    } else if (!noCalls && this.eat(types$1.parenL)) {
-      var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-      this.yieldPos = 0;
-      this.awaitPos = 0;
-      this.awaitIdentPos = 0;
-      var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);
-      if (maybeAsyncArrow && !optional && !this.canInsertSemicolon() && this.eat(types$1.arrow)) {
-        this.checkPatternErrors(refDestructuringErrors, false);
-        this.checkYieldAwaitInDefaultParams();
-        if (this.awaitIdentPos > 0)
-          { this.raise(this.awaitIdentPos, "Cannot use 'await' as identifier inside an async function"); }
-        this.yieldPos = oldYieldPos;
-        this.awaitPos = oldAwaitPos;
-        this.awaitIdentPos = oldAwaitIdentPos;
-        return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)
-      }
-      this.checkExpressionErrors(refDestructuringErrors, true);
-      this.yieldPos = oldYieldPos || this.yieldPos;
-      this.awaitPos = oldAwaitPos || this.awaitPos;
-      this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;
-      var node$1 = this.startNodeAt(startPos, startLoc);
-      node$1.callee = base;
-      node$1.arguments = exprList;
-      if (optionalSupported) {
-        node$1.optional = optional;
-      }
-      base = this.finishNode(node$1, "CallExpression");
-    } else if (this.type === types$1.backQuote) {
-      if (optional || optionalChained) {
-        this.raise(this.start, "Optional chaining cannot appear in the tag of tagged template expressions");
-      }
-      var node$2 = this.startNodeAt(startPos, startLoc);
-      node$2.tag = base;
-      node$2.quasi = this.parseTemplate({isTagged: true});
-      base = this.finishNode(node$2, "TaggedTemplateExpression");
-    }
-    return base
-  };
-
-  // Parse an atomic expression — either a single token that is an
-  // expression, an expression started by a keyword like `function` or
-  // `new`, or an expression wrapped in punctuation like `()`, `[]`,
-  // or `{}`.
-
-  pp$5.parseExprAtom = function(refDestructuringErrors, forInit) {
-    // If a division operator appears in an expression position, the
-    // tokenizer got confused, and we force it to read a regexp instead.
-    if (this.type === types$1.slash) { this.readRegexp(); }
-
-    var node, canBeArrow = this.potentialArrowAt === this.start;
-    switch (this.type) {
-    case types$1._super:
-      if (!this.allowSuper)
-        { this.raise(this.start, "'super' keyword outside a method"); }
-      node = this.startNode();
-      this.next();
-      if (this.type === types$1.parenL && !this.allowDirectSuper)
-        { this.raise(node.start, "super() call outside constructor of a subclass"); }
-      // The `super` keyword can appear at below:
-      // SuperProperty:
-      //     super [ Expression ]
-      //     super . IdentifierName
-      // SuperCall:
-      //     super ( Arguments )
-      if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)
-        { this.unexpected(); }
-      return this.finishNode(node, "Super")
-
-    case types$1._this:
-      node = this.startNode();
-      this.next();
-      return this.finishNode(node, "ThisExpression")
-
-    case types$1.name:
-      var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;
-      var id = this.parseIdent(false);
-      if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === "async" && !this.canInsertSemicolon() && this.eat(types$1._function)) {
-        this.overrideContext(types.f_expr);
-        return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)
-      }
-      if (canBeArrow && !this.canInsertSemicolon()) {
-        if (this.eat(types$1.arrow))
-          { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }
-        if (this.options.ecmaVersion >= 8 && id.name === "async" && this.type === types$1.name && !containsEsc &&
-            (!this.potentialArrowInForAwait || this.value !== "of" || this.containsEsc)) {
-          id = this.parseIdent(false);
-          if (this.canInsertSemicolon() || !this.eat(types$1.arrow))
-            { this.unexpected(); }
-          return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)
-        }
-      }
-      return id
-
-    case types$1.regexp:
-      var value = this.value;
-      node = this.parseLiteral(value.value);
-      node.regex = {pattern: value.pattern, flags: value.flags};
-      return node
-
-    case types$1.num: case types$1.string:
-      return this.parseLiteral(this.value)
-
-    case types$1._null: case types$1._true: case types$1._false:
-      node = this.startNode();
-      node.value = this.type === types$1._null ? null : this.type === types$1._true;
-      node.raw = this.type.keyword;
-      this.next();
-      return this.finishNode(node, "Literal")
-
-    case types$1.parenL:
-      var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);
-      if (refDestructuringErrors) {
-        if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))
-          { refDestructuringErrors.parenthesizedAssign = start; }
-        if (refDestructuringErrors.parenthesizedBind < 0)
-          { refDestructuringErrors.parenthesizedBind = start; }
-      }
-      return expr
-
-    case types$1.bracketL:
-      node = this.startNode();
-      this.next();
-      node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);
-      return this.finishNode(node, "ArrayExpression")
-
-    case types$1.braceL:
-      this.overrideContext(types.b_expr);
-      return this.parseObj(false, refDestructuringErrors)
-
-    case types$1._function:
-      node = this.startNode();
-      this.next();
-      return this.parseFunction(node, 0)
-
-    case types$1._class:
-      return this.parseClass(this.startNode(), false)
-
-    case types$1._new:
-      return this.parseNew()
-
-    case types$1.backQuote:
-      return this.parseTemplate()
-
-    case types$1._import:
-      if (this.options.ecmaVersion >= 11) {
-        return this.parseExprImport()
-      } else {
-        return this.unexpected()
-      }
-
-    default:
-      this.unexpected();
-    }
-  };
-
-  pp$5.parseExprImport = function() {
-    var node = this.startNode();
-
-    // Consume `import` as an identifier for `import.meta`.
-    // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.
-    if (this.containsEsc) { this.raiseRecoverable(this.start, "Escape sequence in keyword import"); }
-    var meta = this.parseIdent(true);
-
-    switch (this.type) {
-    case types$1.parenL:
-      return this.parseDynamicImport(node)
-    case types$1.dot:
-      node.meta = meta;
-      return this.parseImportMeta(node)
-    default:
-      this.unexpected();
-    }
-  };
-
-  pp$5.parseDynamicImport = function(node) {
-    this.next(); // skip `(`
-
-    // Parse node.source.
-    node.source = this.parseMaybeAssign();
-
-    // Verify ending.
-    if (!this.eat(types$1.parenR)) {
-      var errorPos = this.start;
-      if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {
-        this.raiseRecoverable(errorPos, "Trailing comma is not allowed in import()");
-      } else {
-        this.unexpected(errorPos);
-      }
-    }
-
-    return this.finishNode(node, "ImportExpression")
-  };
-
-  pp$5.parseImportMeta = function(node) {
-    this.next(); // skip `.`
-
-    var containsEsc = this.containsEsc;
-    node.property = this.parseIdent(true);
-
-    if (node.property.name !== "meta")
-      { this.raiseRecoverable(node.property.start, "The only valid meta property for import is 'import.meta'"); }
-    if (containsEsc)
-      { this.raiseRecoverable(node.start, "'import.meta' must not contain escaped characters"); }
-    if (this.options.sourceType !== "module" && !this.options.allowImportExportEverywhere)
-      { this.raiseRecoverable(node.start, "Cannot use 'import.meta' outside a module"); }
-
-    return this.finishNode(node, "MetaProperty")
-  };
-
-  pp$5.parseLiteral = function(value) {
-    var node = this.startNode();
-    node.value = value;
-    node.raw = this.input.slice(this.start, this.end);
-    if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, ""); }
-    this.next();
-    return this.finishNode(node, "Literal")
-  };
-
-  pp$5.parseParenExpression = function() {
-    this.expect(types$1.parenL);
-    var val = this.parseExpression();
-    this.expect(types$1.parenR);
-    return val
-  };
-
-  pp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {
-    var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;
-    if (this.options.ecmaVersion >= 6) {
-      this.next();
-
-      var innerStartPos = this.start, innerStartLoc = this.startLoc;
-      var exprList = [], first = true, lastIsComma = false;
-      var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;
-      this.yieldPos = 0;
-      this.awaitPos = 0;
-      // Do not save awaitIdentPos to allow checking awaits nested in parameters
-      while (this.type !== types$1.parenR) {
-        first ? first = false : this.expect(types$1.comma);
-        if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {
-          lastIsComma = true;
-          break
-        } else if (this.type === types$1.ellipsis) {
-          spreadStart = this.start;
-          exprList.push(this.parseParenItem(this.parseRestBinding()));
-          if (this.type === types$1.comma) { this.raise(this.start, "Comma is not permitted after the rest element"); }
-          break
-        } else {
-          exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));
-        }
-      }
-      var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;
-      this.expect(types$1.parenR);
-
-      if (canBeArrow && !this.canInsertSemicolon() && this.eat(types$1.arrow)) {
-        this.checkPatternErrors(refDestructuringErrors, false);
-        this.checkYieldAwaitInDefaultParams();
-        this.yieldPos = oldYieldPos;
-        this.awaitPos = oldAwaitPos;
-        return this.parseParenArrowList(startPos, startLoc, exprList, forInit)
-      }
-
-      if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }
-      if (spreadStart) { this.unexpected(spreadStart); }
-      this.checkExpressionErrors(refDestructuringErrors, true);
-      this.yieldPos = oldYieldPos || this.yieldPos;
-      this.awaitPos = oldAwaitPos || this.awaitPos;
-
-      if (exprList.length > 1) {
-        val = this.startNodeAt(innerStartPos, innerStartLoc);
-        val.expressions = exprList;
-        this.finishNodeAt(val, "SequenceExpression", innerEndPos, innerEndLoc);
-      } else {
-        val = exprList[0];
-      }
-    } else {
-      val = this.parseParenExpression();
-    }
-
-    if (this.options.preserveParens) {
-      var par = this.startNodeAt(startPos, startLoc);
-      par.expression = val;
-      return this.finishNode(par, "ParenthesizedExpression")
-    } else {
-      return val
-    }
-  };
-
-  pp$5.parseParenItem = function(item) {
-    return item
-  };
-
-  pp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {
-    return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)
-  };
-
-  // New's precedence is slightly tricky. It must allow its argument to
-  // be a `[]` or dot subscript expression, but not a call — at least,
-  // not without wrapping it in parentheses. Thus, it uses the noCalls
-  // argument to parseSubscripts to prevent it from consuming the
-  // argument list.
-
-  var empty = [];
-
-  pp$5.parseNew = function() {
-    if (this.containsEsc) { this.raiseRecoverable(this.start, "Escape sequence in keyword new"); }
-    var node = this.startNode();
-    var meta = this.parseIdent(true);
-    if (this.options.ecmaVersion >= 6 && this.eat(types$1.dot)) {
-      node.meta = meta;
-      var containsEsc = this.containsEsc;
-      node.property = this.parseIdent(true);
-      if (node.property.name !== "target")
-        { this.raiseRecoverable(node.property.start, "The only valid meta property for new is 'new.target'"); }
-      if (containsEsc)
-        { this.raiseRecoverable(node.start, "'new.target' must not contain escaped characters"); }
-      if (!this.allowNewDotTarget)
-        { this.raiseRecoverable(node.start, "'new.target' can only be used in functions and class static block"); }
-      return this.finishNode(node, "MetaProperty")
-    }
-    var startPos = this.start, startLoc = this.startLoc, isImport = this.type === types$1._import;
-    node.callee = this.parseSubscripts(this.parseExprAtom(), startPos, startLoc, true, false);
-    if (isImport && node.callee.type === "ImportExpression") {
-      this.raise(startPos, "Cannot use new with import()");
-    }
-    if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }
-    else { node.arguments = empty; }
-    return this.finishNode(node, "NewExpression")
-  };
-
-  // Parse template expression.
-
-  pp$5.parseTemplateElement = function(ref) {
-    var isTagged = ref.isTagged;
-
-    var elem = this.startNode();
-    if (this.type === types$1.invalidTemplate) {
-      if (!isTagged) {
-        this.raiseRecoverable(this.start, "Bad escape sequence in untagged template literal");
-      }
-      elem.value = {
-        raw: this.value,
-        cooked: null
-      };
-    } else {
-      elem.value = {
-        raw: this.input.slice(this.start, this.end).replace(/\r\n?/g, "\n"),
-        cooked: this.value
-      };
-    }
-    this.next();
-    elem.tail = this.type === types$1.backQuote;
-    return this.finishNode(elem, "TemplateElement")
-  };
-
-  pp$5.parseTemplate = function(ref) {
-    if ( ref === void 0 ) ref = {};
-    var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;
-
-    var node = this.startNode();
-    this.next();
-    node.expressions = [];
-    var curElt = this.parseTemplateElement({isTagged: isTagged});
-    node.quasis = [curElt];
-    while (!curElt.tail) {
-      if (this.type === types$1.eof) { this.raise(this.pos, "Unterminated template literal"); }
-      this.expect(types$1.dollarBraceL);
-      node.expressions.push(this.parseExpression());
-      this.expect(types$1.braceR);
-      node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));
-    }
-    this.next();
-    return this.finishNode(node, "TemplateLiteral")
-  };
-
-  pp$5.isAsyncProp = function(prop) {
-    return !prop.computed && prop.key.type === "Identifier" && prop.key.name === "async" &&
-      (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&
-      !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))
-  };
-
-  // Parse an object literal or binding pattern.
-
-  pp$5.parseObj = function(isPattern, refDestructuringErrors) {
-    var node = this.startNode(), first = true, propHash = {};
-    node.properties = [];
-    this.next();
-    while (!this.eat(types$1.braceR)) {
-      if (!first) {
-        this.expect(types$1.comma);
-        if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }
-      } else { first = false; }
-
-      var prop = this.parseProperty(isPattern, refDestructuringErrors);
-      if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }
-      node.properties.push(prop);
-    }
-    return this.finishNode(node, isPattern ? "ObjectPattern" : "ObjectExpression")
-  };
-
-  pp$5.parseProperty = function(isPattern, refDestructuringErrors) {
-    var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;
-    if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {
-      if (isPattern) {
-        prop.argument = this.parseIdent(false);
-        if (this.type === types$1.comma) {
-          this.raise(this.start, "Comma is not permitted after the rest element");
-        }
-        return this.finishNode(prop, "RestElement")
-      }
-      // Parse argument.
-      prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);
-      // To disallow trailing comma via `this.toAssignable()`.
-      if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {
-        refDestructuringErrors.trailingComma = this.start;
-      }
-      // Finish
-      return this.finishNode(prop, "SpreadElement")
-    }
-    if (this.options.ecmaVersion >= 6) {
-      prop.method = false;
-      prop.shorthand = false;
-      if (isPattern || refDestructuringErrors) {
-        startPos = this.start;
-        startLoc = this.startLoc;
-      }
-      if (!isPattern)
-        { isGenerator = this.eat(types$1.star); }
-    }
-    var containsEsc = this.containsEsc;
-    this.parsePropertyName(prop);
-    if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {
-      isAsync = true;
-      isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);
-      this.parsePropertyName(prop, refDestructuringErrors);
-    } else {
-      isAsync = false;
-    }
-    this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);
-    return this.finishNode(prop, "Property")
-  };
-
-  pp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {
-    if ((isGenerator || isAsync) && this.type === types$1.colon)
-      { this.unexpected(); }
-
-    if (this.eat(types$1.colon)) {
-      prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);
-      prop.kind = "init";
-    } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {
-      if (isPattern) { this.unexpected(); }
-      prop.kind = "init";
-      prop.method = true;
-      prop.value = this.parseMethod(isGenerator, isAsync);
-    } else if (!isPattern && !containsEsc &&
-               this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === "Identifier" &&
-               (prop.key.name === "get" || prop.key.name === "set") &&
-               (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {
-      if (isGenerator || isAsync) { this.unexpected(); }
-      prop.kind = prop.key.name;
-      this.parsePropertyName(prop);
-      prop.value = this.parseMethod(false);
-      var paramCount = prop.kind === "get" ? 0 : 1;
-      if (prop.value.params.length !== paramCount) {
-        var start = prop.value.start;
-        if (prop.kind === "get")
-          { this.raiseRecoverable(start, "getter should have no params"); }
-        else
-          { this.raiseRecoverable(start, "setter should have exactly one param"); }
-      } else {
-        if (prop.kind === "set" && prop.value.params[0].type === "RestElement")
-          { this.raiseRecoverable(prop.value.params[0].start, "Setter cannot use rest params"); }
-      }
-    } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === "Identifier") {
-      if (isGenerator || isAsync) { this.unexpected(); }
-      this.checkUnreserved(prop.key);
-      if (prop.key.name === "await" && !this.awaitIdentPos)
-        { this.awaitIdentPos = startPos; }
-      prop.kind = "init";
-      if (isPattern) {
-        prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));
-      } else if (this.type === types$1.eq && refDestructuringErrors) {
-        if (refDestructuringErrors.shorthandAssign < 0)
-          { refDestructuringErrors.shorthandAssign = this.start; }
-        prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));
-      } else {
-        prop.value = this.copyNode(prop.key);
-      }
-      prop.shorthand = true;
-    } else { this.unexpected(); }
-  };
-
-  pp$5.parsePropertyName = function(prop) {
-    if (this.options.ecmaVersion >= 6) {
-      if (this.eat(types$1.bracketL)) {
-        prop.computed = true;
-        prop.key = this.parseMaybeAssign();
-        this.expect(types$1.bracketR);
-        return prop.key
-      } else {
-        prop.computed = false;
-      }
-    }
-    return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== "never")
-  };
-
-  // Initialize empty function node.
-
-  pp$5.initFunction = function(node) {
-    node.id = null;
-    if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }
-    if (this.options.ecmaVersion >= 8) { node.async = false; }
-  };
-
-  // Parse object or class method.
-
-  pp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {
-    var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-
-    this.initFunction(node);
-    if (this.options.ecmaVersion >= 6)
-      { node.generator = isGenerator; }
-    if (this.options.ecmaVersion >= 8)
-      { node.async = !!isAsync; }
-
-    this.yieldPos = 0;
-    this.awaitPos = 0;
-    this.awaitIdentPos = 0;
-    this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));
-
-    this.expect(types$1.parenL);
-    node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);
-    this.checkYieldAwaitInDefaultParams();
-    this.parseFunctionBody(node, false, true, false);
-
-    this.yieldPos = oldYieldPos;
-    this.awaitPos = oldAwaitPos;
-    this.awaitIdentPos = oldAwaitIdentPos;
-    return this.finishNode(node, "FunctionExpression")
-  };
-
-  // Parse arrow function expression with given parameters.
-
-  pp$5.parseArrowExpression = function(node, params, isAsync, forInit) {
-    var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;
-
-    this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);
-    this.initFunction(node);
-    if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }
-
-    this.yieldPos = 0;
-    this.awaitPos = 0;
-    this.awaitIdentPos = 0;
-
-    node.params = this.toAssignableList(params, true);
-    this.parseFunctionBody(node, true, false, forInit);
-
-    this.yieldPos = oldYieldPos;
-    this.awaitPos = oldAwaitPos;
-    this.awaitIdentPos = oldAwaitIdentPos;
-    return this.finishNode(node, "ArrowFunctionExpression")
-  };
-
-  // Parse function body and check parameters.
-
-  pp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {
-    var isExpression = isArrowFunction && this.type !== types$1.braceL;
-    var oldStrict = this.strict, useStrict = false;
-
-    if (isExpression) {
-      node.body = this.parseMaybeAssign(forInit);
-      node.expression = true;
-      this.checkParams(node, false);
-    } else {
-      var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);
-      if (!oldStrict || nonSimple) {
-        useStrict = this.strictDirective(this.end);
-        // If this is a strict mode function, verify that argument names
-        // are not repeated, and it does not try to bind the words `eval`
-        // or `arguments`.
-        if (useStrict && nonSimple)
-          { this.raiseRecoverable(node.start, "Illegal 'use strict' directive in function with non-simple parameter list"); }
-      }
-      // Start a new scope with regard to labels and the `inFunction`
-      // flag (restore them to their old value afterwards).
-      var oldLabels = this.labels;
-      this.labels = [];
-      if (useStrict) { this.strict = true; }
-
-      // Add the params to varDeclaredNames to ensure that an error is thrown
-      // if a let/const declaration in the function clashes with one of the params.
-      this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));
-      // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'
-      if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }
-      node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);
-      node.expression = false;
-      this.adaptDirectivePrologue(node.body.body);
-      this.labels = oldLabels;
-    }
-    this.exitScope();
-  };
-
-  pp$5.isSimpleParamList = function(params) {
-    for (var i = 0, list = params; i < list.length; i += 1)
-      {
-      var param = list[i];
-
-      if (param.type !== "Identifier") { return false
-    } }
-    return true
-  };
-
-  // Checks function params for various disallowed patterns such as using "eval"
-  // or "arguments" and duplicate parameters.
-
-  pp$5.checkParams = function(node, allowDuplicates) {
-    var nameHash = Object.create(null);
-    for (var i = 0, list = node.params; i < list.length; i += 1)
-      {
-      var param = list[i];
-
-      this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);
-    }
-  };
-
-  // Parses a comma-separated list of expressions, and returns them as
-  // an array. `close` is the token type that ends the list, and
-  // `allowEmpty` can be turned on to allow subsequent commas with
-  // nothing in between them to be parsed as `null` (which is needed
-  // for array literals).
-
-  pp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {
-    var elts = [], first = true;
-    while (!this.eat(close)) {
-      if (!first) {
-        this.expect(types$1.comma);
-        if (allowTrailingComma && this.afterTrailingComma(close)) { break }
-      } else { first = false; }
-
-      var elt = (void 0);
-      if (allowEmpty && this.type === types$1.comma)
-        { elt = null; }
-      else if (this.type === types$1.ellipsis) {
-        elt = this.parseSpread(refDestructuringErrors);
-        if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)
-          { refDestructuringErrors.trailingComma = this.start; }
-      } else {
-        elt = this.parseMaybeAssign(false, refDestructuringErrors);
-      }
-      elts.push(elt);
-    }
-    return elts
-  };
-
-  pp$5.checkUnreserved = function(ref) {
-    var start = ref.start;
-    var end = ref.end;
-    var name = ref.name;
-
-    if (this.inGenerator && name === "yield")
-      { this.raiseRecoverable(start, "Cannot use 'yield' as identifier inside a generator"); }
-    if (this.inAsync && name === "await")
-      { this.raiseRecoverable(start, "Cannot use 'await' as identifier inside an async function"); }
-    if (this.currentThisScope().inClassFieldInit && name === "arguments")
-      { this.raiseRecoverable(start, "Cannot use 'arguments' in class field initializer"); }
-    if (this.inClassStaticBlock && (name === "arguments" || name === "await"))
-      { this.raise(start, ("Cannot use " + name + " in class static initialization block")); }
-    if (this.keywords.test(name))
-      { this.raise(start, ("Unexpected keyword '" + name + "'")); }
-    if (this.options.ecmaVersion < 6 &&
-      this.input.slice(start, end).indexOf("\\") !== -1) { return }
-    var re = this.strict ? this.reservedWordsStrict : this.reservedWords;
-    if (re.test(name)) {
-      if (!this.inAsync && name === "await")
-        { this.raiseRecoverable(start, "Cannot use keyword 'await' outside an async function"); }
-      this.raiseRecoverable(start, ("The keyword '" + name + "' is reserved"));
-    }
-  };
-
-  // Parse the next token as an identifier. If `liberal` is true (used
-  // when parsing properties), it will also convert keywords into
-  // identifiers.
-
-  pp$5.parseIdent = function(liberal, isBinding) {
-    var node = this.startNode();
-    if (this.type === types$1.name) {
-      node.name = this.value;
-    } else if (this.type.keyword) {
-      node.name = this.type.keyword;
-
-      // To fix https://github.com/acornjs/acorn/issues/575
-      // `class` and `function` keywords push new context into this.context.
-      // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.
-      // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword
-      if ((node.name === "class" || node.name === "function") &&
-          (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {
-        this.context.pop();
-      }
-    } else {
-      this.unexpected();
-    }
-    this.next(!!liberal);
-    this.finishNode(node, "Identifier");
-    if (!liberal) {
-      this.checkUnreserved(node);
-      if (node.name === "await" && !this.awaitIdentPos)
-        { this.awaitIdentPos = node.start; }
-    }
-    return node
-  };
-
-  pp$5.parsePrivateIdent = function() {
-    var node = this.startNode();
-    if (this.type === types$1.privateId) {
-      node.name = this.value;
-    } else {
-      this.unexpected();
-    }
-    this.next();
-    this.finishNode(node, "PrivateIdentifier");
-
-    // For validating existence
-    if (this.privateNameStack.length === 0) {
-      this.raise(node.start, ("Private field '#" + (node.name) + "' must be declared in an enclosing class"));
-    } else {
-      this.privateNameStack[this.privateNameStack.length - 1].used.push(node);
-    }
-
-    return node
-  };
-
-  // Parses yield expression inside generator.
-
-  pp$5.parseYield = function(forInit) {
-    if (!this.yieldPos) { this.yieldPos = this.start; }
-
-    var node = this.startNode();
-    this.next();
-    if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {
-      node.delegate = false;
-      node.argument = null;
-    } else {
-      node.delegate = this.eat(types$1.star);
-      node.argument = this.parseMaybeAssign(forInit);
-    }
-    return this.finishNode(node, "YieldExpression")
-  };
-
-  pp$5.parseAwait = function(forInit) {
-    if (!this.awaitPos) { this.awaitPos = this.start; }
-
-    var node = this.startNode();
-    this.next();
-    node.argument = this.parseMaybeUnary(null, true, false, forInit);
-    return this.finishNode(node, "AwaitExpression")
-  };
-
-  var pp$4 = Parser.prototype;
-
-  // This function is used to raise exceptions on parse errors. It
-  // takes an offset integer (into the current `input`) to indicate
-  // the location of the error, attaches the position to the end
-  // of the error message, and then raises a `SyntaxError` with that
-  // message.
-
-  pp$4.raise = function(pos, message) {
-    var loc = getLineInfo(this.input, pos);
-    message += " (" + loc.line + ":" + loc.column + ")";
-    var err = new SyntaxError(message);
-    err.pos = pos; err.loc = loc; err.raisedAt = this.pos;
-    throw err
-  };
-
-  pp$4.raiseRecoverable = pp$4.raise;
-
-  pp$4.curPosition = function() {
-    if (this.options.locations) {
-      return new Position(this.curLine, this.pos - this.lineStart)
-    }
-  };
-
-  var pp$3 = Parser.prototype;
-
-  var Scope = function Scope(flags) {
-    this.flags = flags;
-    // A list of var-declared names in the current lexical scope
-    this.var = [];
-    // A list of lexically-declared names in the current lexical scope
-    this.lexical = [];
-    // A list of lexically-declared FunctionDeclaration names in the current lexical scope
-    this.functions = [];
-    // A switch to disallow the identifier reference 'arguments'
-    this.inClassFieldInit = false;
-  };
-
-  // The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.
-
-  pp$3.enterScope = function(flags) {
-    this.scopeStack.push(new Scope(flags));
-  };
-
-  pp$3.exitScope = function() {
-    this.scopeStack.pop();
-  };
-
-  // The spec says:
-  // > At the top level of a function, or script, function declarations are
-  // > treated like var declarations rather than like lexical declarations.
-  pp$3.treatFunctionsAsVarInScope = function(scope) {
-    return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)
-  };
-
-  pp$3.declareName = function(name, bindingType, pos) {
-    var redeclared = false;
-    if (bindingType === BIND_LEXICAL) {
-      var scope = this.currentScope();
-      redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;
-      scope.lexical.push(name);
-      if (this.inModule && (scope.flags & SCOPE_TOP))
-        { delete this.undefinedExports[name]; }
-    } else if (bindingType === BIND_SIMPLE_CATCH) {
-      var scope$1 = this.currentScope();
-      scope$1.lexical.push(name);
-    } else if (bindingType === BIND_FUNCTION) {
-      var scope$2 = this.currentScope();
-      if (this.treatFunctionsAsVar)
-        { redeclared = scope$2.lexical.indexOf(name) > -1; }
-      else
-        { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }
-      scope$2.functions.push(name);
-    } else {
-      for (var i = this.scopeStack.length - 1; i >= 0; --i) {
-        var scope$3 = this.scopeStack[i];
-        if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||
-            !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {
-          redeclared = true;
-          break
-        }
-        scope$3.var.push(name);
-        if (this.inModule && (scope$3.flags & SCOPE_TOP))
-          { delete this.undefinedExports[name]; }
-        if (scope$3.flags & SCOPE_VAR) { break }
-      }
-    }
-    if (redeclared) { this.raiseRecoverable(pos, ("Identifier '" + name + "' has already been declared")); }
-  };
-
-  pp$3.checkLocalExport = function(id) {
-    // scope.functions must be empty as Module code is always strict.
-    if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&
-        this.scopeStack[0].var.indexOf(id.name) === -1) {
-      this.undefinedExports[id.name] = id;
-    }
-  };
-
-  pp$3.currentScope = function() {
-    return this.scopeStack[this.scopeStack.length - 1]
-  };
-
-  pp$3.currentVarScope = function() {
-    for (var i = this.scopeStack.length - 1;; i--) {
-      var scope = this.scopeStack[i];
-      if (scope.flags & SCOPE_VAR) { return scope }
-    }
-  };
-
-  // Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.
-  pp$3.currentThisScope = function() {
-    for (var i = this.scopeStack.length - 1;; i--) {
-      var scope = this.scopeStack[i];
-      if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }
-    }
-  };
-
-  var Node = function Node(parser, pos, loc) {
-    this.type = "";
-    this.start = pos;
-    this.end = 0;
-    if (parser.options.locations)
-      { this.loc = new SourceLocation(parser, loc); }
-    if (parser.options.directSourceFile)
-      { this.sourceFile = parser.options.directSourceFile; }
-    if (parser.options.ranges)
-      { this.range = [pos, 0]; }
-  };
-
-  // Start an AST node, attaching a start offset.
-
-  var pp$2 = Parser.prototype;
-
-  pp$2.startNode = function() {
-    return new Node(this, this.start, this.startLoc)
-  };
-
-  pp$2.startNodeAt = function(pos, loc) {
-    return new Node(this, pos, loc)
-  };
-
-  // Finish an AST node, adding `type` and `end` properties.
-
-  function finishNodeAt(node, type, pos, loc) {
-    node.type = type;
-    node.end = pos;
-    if (this.options.locations)
-      { node.loc.end = loc; }
-    if (this.options.ranges)
-      { node.range[1] = pos; }
-    return node
-  }
-
-  pp$2.finishNode = function(node, type) {
-    return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)
-  };
-
-  // Finish node at given position
-
-  pp$2.finishNodeAt = function(node, type, pos, loc) {
-    return finishNodeAt.call(this, node, type, pos, loc)
-  };
-
-  pp$2.copyNode = function(node) {
-    var newNode = new Node(this, node.start, this.startLoc);
-    for (var prop in node) { newNode[prop] = node[prop]; }
-    return newNode
-  };
-
-  // This file contains Unicode properties extracted from the ECMAScript
-  // specification. The lists are extracted like so:
-  // $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)
-
-  // #table-binary-unicode-properties
-  var ecma9BinaryProperties = "ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS";
-  var ecma10BinaryProperties = ecma9BinaryProperties + " Extended_Pictographic";
-  var ecma11BinaryProperties = ecma10BinaryProperties;
-  var ecma12BinaryProperties = ecma11BinaryProperties + " EBase EComp EMod EPres ExtPict";
-  var ecma13BinaryProperties = ecma12BinaryProperties;
-  var unicodeBinaryProperties = {
-    9: ecma9BinaryProperties,
-    10: ecma10BinaryProperties,
-    11: ecma11BinaryProperties,
-    12: ecma12BinaryProperties,
-    13: ecma13BinaryProperties
-  };
-
-  // #table-unicode-general-category-values
-  var unicodeGeneralCategoryValues = "Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu";
-
-  // #table-unicode-script-values
-  var ecma9ScriptValues = "Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb";
-  var ecma10ScriptValues = ecma9ScriptValues + " Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd";
-  var ecma11ScriptValues = ecma10ScriptValues + " Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho";
-  var ecma12ScriptValues = ecma11ScriptValues + " Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi";
-  var ecma13ScriptValues = ecma12ScriptValues + " Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith";
-  var unicodeScriptValues = {
-    9: ecma9ScriptValues,
-    10: ecma10ScriptValues,
-    11: ecma11ScriptValues,
-    12: ecma12ScriptValues,
-    13: ecma13ScriptValues
-  };
-
-  var data = {};
-  function buildUnicodeData(ecmaVersion) {
-    var d = data[ecmaVersion] = {
-      binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + " " + unicodeGeneralCategoryValues),
-      nonBinary: {
-        General_Category: wordsRegexp(unicodeGeneralCategoryValues),
-        Script: wordsRegexp(unicodeScriptValues[ecmaVersion])
-      }
-    };
-    d.nonBinary.Script_Extensions = d.nonBinary.Script;
-
-    d.nonBinary.gc = d.nonBinary.General_Category;
-    d.nonBinary.sc = d.nonBinary.Script;
-    d.nonBinary.scx = d.nonBinary.Script_Extensions;
-  }
-
-  for (var i = 0, list = [9, 10, 11, 12, 13]; i < list.length; i += 1) {
-    var ecmaVersion = list[i];
-
-    buildUnicodeData(ecmaVersion);
-  }
-
-  var pp$1 = Parser.prototype;
-
-  var RegExpValidationState = function RegExpValidationState(parser) {
-    this.parser = parser;
-    this.validFlags = "gim" + (parser.options.ecmaVersion >= 6 ? "uy" : "") + (parser.options.ecmaVersion >= 9 ? "s" : "") + (parser.options.ecmaVersion >= 13 ? "d" : "");
-    this.unicodeProperties = data[parser.options.ecmaVersion >= 13 ? 13 : parser.options.ecmaVersion];
-    this.source = "";
-    this.flags = "";
-    this.start = 0;
-    this.switchU = false;
-    this.switchN = false;
-    this.pos = 0;
-    this.lastIntValue = 0;
-    this.lastStringValue = "";
-    this.lastAssertionIsQuantifiable = false;
-    this.numCapturingParens = 0;
-    this.maxBackReference = 0;
-    this.groupNames = [];
-    this.backReferenceNames = [];
-  };
-
-  RegExpValidationState.prototype.reset = function reset (start, pattern, flags) {
-    var unicode = flags.indexOf("u") !== -1;
-    this.start = start | 0;
-    this.source = pattern + "";
-    this.flags = flags;
-    this.switchU = unicode && this.parser.options.ecmaVersion >= 6;
-    this.switchN = unicode && this.parser.options.ecmaVersion >= 9;
-  };
-
-  RegExpValidationState.prototype.raise = function raise (message) {
-    this.parser.raiseRecoverable(this.start, ("Invalid regular expression: /" + (this.source) + "/: " + message));
-  };
-
-  // If u flag is given, this returns the code point at the index (it combines a surrogate pair).
-  // Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).
-  RegExpValidationState.prototype.at = function at (i, forceU) {
-      if ( forceU === void 0 ) forceU = false;
-
-    var s = this.source;
-    var l = s.length;
-    if (i >= l) {
-      return -1
-    }
-    var c = s.charCodeAt(i);
-    if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {
-      return c
-    }
-    var next = s.charCodeAt(i + 1);
-    return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c
-  };
-
-  RegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {
-      if ( forceU === void 0 ) forceU = false;
-
-    var s = this.source;
-    var l = s.length;
-    if (i >= l) {
-      return l
-    }
-    var c = s.charCodeAt(i), next;
-    if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||
-        (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {
-      return i + 1
-    }
-    return i + 2
-  };
-
-  RegExpValidationState.prototype.current = function current (forceU) {
-      if ( forceU === void 0 ) forceU = false;
-
-    return this.at(this.pos, forceU)
-  };
-
-  RegExpValidationState.prototype.lookahead = function lookahead (forceU) {
-      if ( forceU === void 0 ) forceU = false;
-
-    return this.at(this.nextIndex(this.pos, forceU), forceU)
-  };
-
-  RegExpValidationState.prototype.advance = function advance (forceU) {
-      if ( forceU === void 0 ) forceU = false;
-
-    this.pos = this.nextIndex(this.pos, forceU);
-  };
-
-  RegExpValidationState.prototype.eat = function eat (ch, forceU) {
-      if ( forceU === void 0 ) forceU = false;
-
-    if (this.current(forceU) === ch) {
-      this.advance(forceU);
-      return true
-    }
-    return false
-  };
-
-  /**
-   * Validate the flags part of a given RegExpLiteral.
-   *
-   * @param {RegExpValidationState} state The state to validate RegExp.
-   * @returns {void}
-   */
-  pp$1.validateRegExpFlags = function(state) {
-    var validFlags = state.validFlags;
-    var flags = state.flags;
-
-    for (var i = 0; i < flags.length; i++) {
-      var flag = flags.charAt(i);
-      if (validFlags.indexOf(flag) === -1) {
-        this.raise(state.start, "Invalid regular expression flag");
-      }
-      if (flags.indexOf(flag, i + 1) > -1) {
-        this.raise(state.start, "Duplicate regular expression flag");
-      }
-    }
-  };
-
-  /**
-   * Validate the pattern part of a given RegExpLiteral.
-   *
-   * @param {RegExpValidationState} state The state to validate RegExp.
-   * @returns {void}
-   */
-  pp$1.validateRegExpPattern = function(state) {
-    this.regexp_pattern(state);
-
-    // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of
-    // parsing contains a |GroupName|, reparse with the goal symbol
-    // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*
-    // exception if _P_ did not conform to the grammar, if any elements of _P_
-    // were not matched by the parse, or if any Early Error conditions exist.
-    if (!state.switchN && this.options.ecmaVersion >= 9 && state.groupNames.length > 0) {
-      state.switchN = true;
-      this.regexp_pattern(state);
-    }
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern
-  pp$1.regexp_pattern = function(state) {
-    state.pos = 0;
-    state.lastIntValue = 0;
-    state.lastStringValue = "";
-    state.lastAssertionIsQuantifiable = false;
-    state.numCapturingParens = 0;
-    state.maxBackReference = 0;
-    state.groupNames.length = 0;
-    state.backReferenceNames.length = 0;
-
-    this.regexp_disjunction(state);
-
-    if (state.pos !== state.source.length) {
-      // Make the same messages as V8.
-      if (state.eat(0x29 /* ) */)) {
-        state.raise("Unmatched ')'");
-      }
-      if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {
-        state.raise("Lone quantifier brackets");
-      }
-    }
-    if (state.maxBackReference > state.numCapturingParens) {
-      state.raise("Invalid escape");
-    }
-    for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {
-      var name = list[i];
-
-      if (state.groupNames.indexOf(name) === -1) {
-        state.raise("Invalid named capture referenced");
-      }
-    }
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction
-  pp$1.regexp_disjunction = function(state) {
-    this.regexp_alternative(state);
-    while (state.eat(0x7C /* | */)) {
-      this.regexp_alternative(state);
-    }
-
-    // Make the same message as V8.
-    if (this.regexp_eatQuantifier(state, true)) {
-      state.raise("Nothing to repeat");
-    }
-    if (state.eat(0x7B /* { */)) {
-      state.raise("Lone quantifier brackets");
-    }
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative
-  pp$1.regexp_alternative = function(state) {
-    while (state.pos < state.source.length && this.regexp_eatTerm(state))
-      { }
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term
-  pp$1.regexp_eatTerm = function(state) {
-    if (this.regexp_eatAssertion(state)) {
-      // Handle `QuantifiableAssertion Quantifier` alternative.
-      // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion
-      // is a QuantifiableAssertion.
-      if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {
-        // Make the same message as V8.
-        if (state.switchU) {
-          state.raise("Invalid quantifier");
-        }
-      }
-      return true
-    }
-
-    if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {
-      this.regexp_eatQuantifier(state);
-      return true
-    }
-
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion
-  pp$1.regexp_eatAssertion = function(state) {
-    var start = state.pos;
-    state.lastAssertionIsQuantifiable = false;
-
-    // ^, $
-    if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {
-      return true
-    }
-
-    // \b \B
-    if (state.eat(0x5C /* \ */)) {
-      if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {
-        return true
-      }
-      state.pos = start;
-    }
-
-    // Lookahead / Lookbehind
-    if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {
-      var lookbehind = false;
-      if (this.options.ecmaVersion >= 9) {
-        lookbehind = state.eat(0x3C /* < */);
-      }
-      if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {
-        this.regexp_disjunction(state);
-        if (!state.eat(0x29 /* ) */)) {
-          state.raise("Unterminated group");
-        }
-        state.lastAssertionIsQuantifiable = !lookbehind;
-        return true
-      }
-    }
-
-    state.pos = start;
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier
-  pp$1.regexp_eatQuantifier = function(state, noError) {
-    if ( noError === void 0 ) noError = false;
-
-    if (this.regexp_eatQuantifierPrefix(state, noError)) {
-      state.eat(0x3F /* ? */);
-      return true
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix
-  pp$1.regexp_eatQuantifierPrefix = function(state, noError) {
-    return (
-      state.eat(0x2A /* * */) ||
-      state.eat(0x2B /* + */) ||
-      state.eat(0x3F /* ? */) ||
-      this.regexp_eatBracedQuantifier(state, noError)
-    )
-  };
-  pp$1.regexp_eatBracedQuantifier = function(state, noError) {
-    var start = state.pos;
-    if (state.eat(0x7B /* { */)) {
-      var min = 0, max = -1;
-      if (this.regexp_eatDecimalDigits(state)) {
-        min = state.lastIntValue;
-        if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {
-          max = state.lastIntValue;
-        }
-        if (state.eat(0x7D /* } */)) {
-          // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term
-          if (max !== -1 && max < min && !noError) {
-            state.raise("numbers out of order in {} quantifier");
-          }
-          return true
-        }
-      }
-      if (state.switchU && !noError) {
-        state.raise("Incomplete quantifier");
-      }
-      state.pos = start;
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom
-  pp$1.regexp_eatAtom = function(state) {
-    return (
-      this.regexp_eatPatternCharacters(state) ||
-      state.eat(0x2E /* . */) ||
-      this.regexp_eatReverseSolidusAtomEscape(state) ||
-      this.regexp_eatCharacterClass(state) ||
-      this.regexp_eatUncapturingGroup(state) ||
-      this.regexp_eatCapturingGroup(state)
-    )
-  };
-  pp$1.regexp_eatReverseSolidusAtomEscape = function(state) {
-    var start = state.pos;
-    if (state.eat(0x5C /* \ */)) {
-      if (this.regexp_eatAtomEscape(state)) {
-        return true
-      }
-      state.pos = start;
-    }
-    return false
-  };
-  pp$1.regexp_eatUncapturingGroup = function(state) {
-    var start = state.pos;
-    if (state.eat(0x28 /* ( */)) {
-      if (state.eat(0x3F /* ? */) && state.eat(0x3A /* : */)) {
-        this.regexp_disjunction(state);
-        if (state.eat(0x29 /* ) */)) {
-          return true
-        }
-        state.raise("Unterminated group");
-      }
-      state.pos = start;
-    }
-    return false
-  };
-  pp$1.regexp_eatCapturingGroup = function(state) {
-    if (state.eat(0x28 /* ( */)) {
-      if (this.options.ecmaVersion >= 9) {
-        this.regexp_groupSpecifier(state);
-      } else if (state.current() === 0x3F /* ? */) {
-        state.raise("Invalid group");
-      }
-      this.regexp_disjunction(state);
-      if (state.eat(0x29 /* ) */)) {
-        state.numCapturingParens += 1;
-        return true
-      }
-      state.raise("Unterminated group");
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom
-  pp$1.regexp_eatExtendedAtom = function(state) {
-    return (
-      state.eat(0x2E /* . */) ||
-      this.regexp_eatReverseSolidusAtomEscape(state) ||
-      this.regexp_eatCharacterClass(state) ||
-      this.regexp_eatUncapturingGroup(state) ||
-      this.regexp_eatCapturingGroup(state) ||
-      this.regexp_eatInvalidBracedQuantifier(state) ||
-      this.regexp_eatExtendedPatternCharacter(state)
-    )
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier
-  pp$1.regexp_eatInvalidBracedQuantifier = function(state) {
-    if (this.regexp_eatBracedQuantifier(state, true)) {
-      state.raise("Nothing to repeat");
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter
-  pp$1.regexp_eatSyntaxCharacter = function(state) {
-    var ch = state.current();
-    if (isSyntaxCharacter(ch)) {
-      state.lastIntValue = ch;
-      state.advance();
-      return true
-    }
-    return false
-  };
-  function isSyntaxCharacter(ch) {
-    return (
-      ch === 0x24 /* $ */ ||
-      ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||
-      ch === 0x2E /* . */ ||
-      ch === 0x3F /* ? */ ||
-      ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||
-      ch >= 0x7B /* { */ && ch <= 0x7D /* } */
-    )
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter
-  // But eat eager.
-  pp$1.regexp_eatPatternCharacters = function(state) {
-    var start = state.pos;
-    var ch = 0;
-    while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {
-      state.advance();
-    }
-    return state.pos !== start
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter
-  pp$1.regexp_eatExtendedPatternCharacter = function(state) {
-    var ch = state.current();
-    if (
-      ch !== -1 &&
-      ch !== 0x24 /* $ */ &&
-      !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&
-      ch !== 0x2E /* . */ &&
-      ch !== 0x3F /* ? */ &&
-      ch !== 0x5B /* [ */ &&
-      ch !== 0x5E /* ^ */ &&
-      ch !== 0x7C /* | */
-    ) {
-      state.advance();
-      return true
-    }
-    return false
-  };
-
-  // GroupSpecifier ::
-  //   [empty]
-  //   `?` GroupName
-  pp$1.regexp_groupSpecifier = function(state) {
-    if (state.eat(0x3F /* ? */)) {
-      if (this.regexp_eatGroupName(state)) {
-        if (state.groupNames.indexOf(state.lastStringValue) !== -1) {
-          state.raise("Duplicate capture group name");
-        }
-        state.groupNames.push(state.lastStringValue);
-        return
-      }
-      state.raise("Invalid group");
-    }
-  };
-
-  // GroupName ::
-  //   `<` RegExpIdentifierName `>`
-  // Note: this updates `state.lastStringValue` property with the eaten name.
-  pp$1.regexp_eatGroupName = function(state) {
-    state.lastStringValue = "";
-    if (state.eat(0x3C /* < */)) {
-      if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {
-        return true
-      }
-      state.raise("Invalid capture group name");
-    }
-    return false
-  };
-
-  // RegExpIdentifierName ::
-  //   RegExpIdentifierStart
-  //   RegExpIdentifierName RegExpIdentifierPart
-  // Note: this updates `state.lastStringValue` property with the eaten name.
-  pp$1.regexp_eatRegExpIdentifierName = function(state) {
-    state.lastStringValue = "";
-    if (this.regexp_eatRegExpIdentifierStart(state)) {
-      state.lastStringValue += codePointToString(state.lastIntValue);
-      while (this.regexp_eatRegExpIdentifierPart(state)) {
-        state.lastStringValue += codePointToString(state.lastIntValue);
-      }
-      return true
-    }
-    return false
-  };
-
-  // RegExpIdentifierStart ::
-  //   UnicodeIDStart
-  //   `$`
-  //   `_`
-  //   `\` RegExpUnicodeEscapeSequence[+U]
-  pp$1.regexp_eatRegExpIdentifierStart = function(state) {
-    var start = state.pos;
-    var forceU = this.options.ecmaVersion >= 11;
-    var ch = state.current(forceU);
-    state.advance(forceU);
-
-    if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {
-      ch = state.lastIntValue;
-    }
-    if (isRegExpIdentifierStart(ch)) {
-      state.lastIntValue = ch;
-      return true
-    }
-
-    state.pos = start;
-    return false
-  };
-  function isRegExpIdentifierStart(ch) {
-    return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */
-  }
-
-  // RegExpIdentifierPart ::
-  //   UnicodeIDContinue
-  //   `$`
-  //   `_`
-  //   `\` RegExpUnicodeEscapeSequence[+U]
-  //   <ZWNJ>
-  //   <ZWJ>
-  pp$1.regexp_eatRegExpIdentifierPart = function(state) {
-    var start = state.pos;
-    var forceU = this.options.ecmaVersion >= 11;
-    var ch = state.current(forceU);
-    state.advance(forceU);
-
-    if (ch === 0x5C /* \ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {
-      ch = state.lastIntValue;
-    }
-    if (isRegExpIdentifierPart(ch)) {
-      state.lastIntValue = ch;
-      return true
-    }
-
-    state.pos = start;
-    return false
-  };
-  function isRegExpIdentifierPart(ch) {
-    return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape
-  pp$1.regexp_eatAtomEscape = function(state) {
-    if (
-      this.regexp_eatBackReference(state) ||
-      this.regexp_eatCharacterClassEscape(state) ||
-      this.regexp_eatCharacterEscape(state) ||
-      (state.switchN && this.regexp_eatKGroupName(state))
-    ) {
-      return true
-    }
-    if (state.switchU) {
-      // Make the same message as V8.
-      if (state.current() === 0x63 /* c */) {
-        state.raise("Invalid unicode escape");
-      }
-      state.raise("Invalid escape");
-    }
-    return false
-  };
-  pp$1.regexp_eatBackReference = function(state) {
-    var start = state.pos;
-    if (this.regexp_eatDecimalEscape(state)) {
-      var n = state.lastIntValue;
-      if (state.switchU) {
-        // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape
-        if (n > state.maxBackReference) {
-          state.maxBackReference = n;
-        }
-        return true
-      }
-      if (n <= state.numCapturingParens) {
-        return true
-      }
-      state.pos = start;
-    }
-    return false
-  };
-  pp$1.regexp_eatKGroupName = function(state) {
-    if (state.eat(0x6B /* k */)) {
-      if (this.regexp_eatGroupName(state)) {
-        state.backReferenceNames.push(state.lastStringValue);
-        return true
-      }
-      state.raise("Invalid named reference");
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape
-  pp$1.regexp_eatCharacterEscape = function(state) {
-    return (
-      this.regexp_eatControlEscape(state) ||
-      this.regexp_eatCControlLetter(state) ||
-      this.regexp_eatZero(state) ||
-      this.regexp_eatHexEscapeSequence(state) ||
-      this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||
-      (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||
-      this.regexp_eatIdentityEscape(state)
-    )
-  };
-  pp$1.regexp_eatCControlLetter = function(state) {
-    var start = state.pos;
-    if (state.eat(0x63 /* c */)) {
-      if (this.regexp_eatControlLetter(state)) {
-        return true
-      }
-      state.pos = start;
-    }
-    return false
-  };
-  pp$1.regexp_eatZero = function(state) {
-    if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {
-      state.lastIntValue = 0;
-      state.advance();
-      return true
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape
-  pp$1.regexp_eatControlEscape = function(state) {
-    var ch = state.current();
-    if (ch === 0x74 /* t */) {
-      state.lastIntValue = 0x09; /* \t */
-      state.advance();
-      return true
-    }
-    if (ch === 0x6E /* n */) {
-      state.lastIntValue = 0x0A; /* \n */
-      state.advance();
-      return true
-    }
-    if (ch === 0x76 /* v */) {
-      state.lastIntValue = 0x0B; /* \v */
-      state.advance();
-      return true
-    }
-    if (ch === 0x66 /* f */) {
-      state.lastIntValue = 0x0C; /* \f */
-      state.advance();
-      return true
-    }
-    if (ch === 0x72 /* r */) {
-      state.lastIntValue = 0x0D; /* \r */
-      state.advance();
-      return true
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter
-  pp$1.regexp_eatControlLetter = function(state) {
-    var ch = state.current();
-    if (isControlLetter(ch)) {
-      state.lastIntValue = ch % 0x20;
-      state.advance();
-      return true
-    }
-    return false
-  };
-  function isControlLetter(ch) {
-    return (
-      (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||
-      (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)
-    )
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence
-  pp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {
-    if ( forceU === void 0 ) forceU = false;
-
-    var start = state.pos;
-    var switchU = forceU || state.switchU;
-
-    if (state.eat(0x75 /* u */)) {
-      if (this.regexp_eatFixedHexDigits(state, 4)) {
-        var lead = state.lastIntValue;
-        if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {
-          var leadSurrogateEnd = state.pos;
-          if (state.eat(0x5C /* \ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {
-            var trail = state.lastIntValue;
-            if (trail >= 0xDC00 && trail <= 0xDFFF) {
-              state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;
-              return true
-            }
-          }
-          state.pos = leadSurrogateEnd;
-          state.lastIntValue = lead;
-        }
-        return true
-      }
-      if (
-        switchU &&
-        state.eat(0x7B /* { */) &&
-        this.regexp_eatHexDigits(state) &&
-        state.eat(0x7D /* } */) &&
-        isValidUnicode(state.lastIntValue)
-      ) {
-        return true
-      }
-      if (switchU) {
-        state.raise("Invalid unicode escape");
-      }
-      state.pos = start;
-    }
-
-    return false
-  };
-  function isValidUnicode(ch) {
-    return ch >= 0 && ch <= 0x10FFFF
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape
-  pp$1.regexp_eatIdentityEscape = function(state) {
-    if (state.switchU) {
-      if (this.regexp_eatSyntaxCharacter(state)) {
-        return true
-      }
-      if (state.eat(0x2F /* / */)) {
-        state.lastIntValue = 0x2F; /* / */
-        return true
-      }
-      return false
-    }
-
-    var ch = state.current();
-    if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {
-      state.lastIntValue = ch;
-      state.advance();
-      return true
-    }
-
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape
-  pp$1.regexp_eatDecimalEscape = function(state) {
-    state.lastIntValue = 0;
-    var ch = state.current();
-    if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {
-      do {
-        state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);
-        state.advance();
-      } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)
-      return true
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape
-  pp$1.regexp_eatCharacterClassEscape = function(state) {
-    var ch = state.current();
-
-    if (isCharacterClassEscape(ch)) {
-      state.lastIntValue = -1;
-      state.advance();
-      return true
-    }
-
-    if (
-      state.switchU &&
-      this.options.ecmaVersion >= 9 &&
-      (ch === 0x50 /* P */ || ch === 0x70 /* p */)
-    ) {
-      state.lastIntValue = -1;
-      state.advance();
-      if (
-        state.eat(0x7B /* { */) &&
-        this.regexp_eatUnicodePropertyValueExpression(state) &&
-        state.eat(0x7D /* } */)
-      ) {
-        return true
-      }
-      state.raise("Invalid property name");
-    }
-
-    return false
-  };
-  function isCharacterClassEscape(ch) {
-    return (
-      ch === 0x64 /* d */ ||
-      ch === 0x44 /* D */ ||
-      ch === 0x73 /* s */ ||
-      ch === 0x53 /* S */ ||
-      ch === 0x77 /* w */ ||
-      ch === 0x57 /* W */
-    )
-  }
-
-  // UnicodePropertyValueExpression ::
-  //   UnicodePropertyName `=` UnicodePropertyValue
-  //   LoneUnicodePropertyNameOrValue
-  pp$1.regexp_eatUnicodePropertyValueExpression = function(state) {
-    var start = state.pos;
-
-    // UnicodePropertyName `=` UnicodePropertyValue
-    if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {
-      var name = state.lastStringValue;
-      if (this.regexp_eatUnicodePropertyValue(state)) {
-        var value = state.lastStringValue;
-        this.regexp_validateUnicodePropertyNameAndValue(state, name, value);
-        return true
-      }
-    }
-    state.pos = start;
-
-    // LoneUnicodePropertyNameOrValue
-    if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {
-      var nameOrValue = state.lastStringValue;
-      this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue);
-      return true
-    }
-    return false
-  };
-  pp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {
-    if (!hasOwn(state.unicodeProperties.nonBinary, name))
-      { state.raise("Invalid property name"); }
-    if (!state.unicodeProperties.nonBinary[name].test(value))
-      { state.raise("Invalid property value"); }
-  };
-  pp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {
-    if (!state.unicodeProperties.binary.test(nameOrValue))
-      { state.raise("Invalid property name"); }
-  };
-
-  // UnicodePropertyName ::
-  //   UnicodePropertyNameCharacters
-  pp$1.regexp_eatUnicodePropertyName = function(state) {
-    var ch = 0;
-    state.lastStringValue = "";
-    while (isUnicodePropertyNameCharacter(ch = state.current())) {
-      state.lastStringValue += codePointToString(ch);
-      state.advance();
-    }
-    return state.lastStringValue !== ""
-  };
-  function isUnicodePropertyNameCharacter(ch) {
-    return isControlLetter(ch) || ch === 0x5F /* _ */
-  }
-
-  // UnicodePropertyValue ::
-  //   UnicodePropertyValueCharacters
-  pp$1.regexp_eatUnicodePropertyValue = function(state) {
-    var ch = 0;
-    state.lastStringValue = "";
-    while (isUnicodePropertyValueCharacter(ch = state.current())) {
-      state.lastStringValue += codePointToString(ch);
-      state.advance();
-    }
-    return state.lastStringValue !== ""
-  };
-  function isUnicodePropertyValueCharacter(ch) {
-    return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)
-  }
-
-  // LoneUnicodePropertyNameOrValue ::
-  //   UnicodePropertyValueCharacters
-  pp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {
-    return this.regexp_eatUnicodePropertyValue(state)
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass
-  pp$1.regexp_eatCharacterClass = function(state) {
-    if (state.eat(0x5B /* [ */)) {
-      state.eat(0x5E /* ^ */);
-      this.regexp_classRanges(state);
-      if (state.eat(0x5D /* ] */)) {
-        return true
-      }
-      // Unreachable since it threw "unterminated regular expression" error before.
-      state.raise("Unterminated character class");
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash
-  pp$1.regexp_classRanges = function(state) {
-    while (this.regexp_eatClassAtom(state)) {
-      var left = state.lastIntValue;
-      if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {
-        var right = state.lastIntValue;
-        if (state.switchU && (left === -1 || right === -1)) {
-          state.raise("Invalid character class");
-        }
-        if (left !== -1 && right !== -1 && left > right) {
-          state.raise("Range out of order in character class");
-        }
-      }
-    }
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash
-  pp$1.regexp_eatClassAtom = function(state) {
-    var start = state.pos;
-
-    if (state.eat(0x5C /* \ */)) {
-      if (this.regexp_eatClassEscape(state)) {
-        return true
-      }
-      if (state.switchU) {
-        // Make the same message as V8.
-        var ch$1 = state.current();
-        if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {
-          state.raise("Invalid class escape");
-        }
-        state.raise("Invalid escape");
-      }
-      state.pos = start;
-    }
-
-    var ch = state.current();
-    if (ch !== 0x5D /* ] */) {
-      state.lastIntValue = ch;
-      state.advance();
-      return true
-    }
-
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape
-  pp$1.regexp_eatClassEscape = function(state) {
-    var start = state.pos;
-
-    if (state.eat(0x62 /* b */)) {
-      state.lastIntValue = 0x08; /* <BS> */
-      return true
-    }
-
-    if (state.switchU && state.eat(0x2D /* - */)) {
-      state.lastIntValue = 0x2D; /* - */
-      return true
-    }
-
-    if (!state.switchU && state.eat(0x63 /* c */)) {
-      if (this.regexp_eatClassControlLetter(state)) {
-        return true
-      }
-      state.pos = start;
-    }
-
-    return (
-      this.regexp_eatCharacterClassEscape(state) ||
-      this.regexp_eatCharacterEscape(state)
-    )
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter
-  pp$1.regexp_eatClassControlLetter = function(state) {
-    var ch = state.current();
-    if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {
-      state.lastIntValue = ch % 0x20;
-      state.advance();
-      return true
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence
-  pp$1.regexp_eatHexEscapeSequence = function(state) {
-    var start = state.pos;
-    if (state.eat(0x78 /* x */)) {
-      if (this.regexp_eatFixedHexDigits(state, 2)) {
-        return true
-      }
-      if (state.switchU) {
-        state.raise("Invalid escape");
-      }
-      state.pos = start;
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits
-  pp$1.regexp_eatDecimalDigits = function(state) {
-    var start = state.pos;
-    var ch = 0;
-    state.lastIntValue = 0;
-    while (isDecimalDigit(ch = state.current())) {
-      state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);
-      state.advance();
-    }
-    return state.pos !== start
-  };
-  function isDecimalDigit(ch) {
-    return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits
-  pp$1.regexp_eatHexDigits = function(state) {
-    var start = state.pos;
-    var ch = 0;
-    state.lastIntValue = 0;
-    while (isHexDigit(ch = state.current())) {
-      state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);
-      state.advance();
-    }
-    return state.pos !== start
-  };
-  function isHexDigit(ch) {
-    return (
-      (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||
-      (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||
-      (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)
-    )
-  }
-  function hexToInt(ch) {
-    if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {
-      return 10 + (ch - 0x41 /* A */)
-    }
-    if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {
-      return 10 + (ch - 0x61 /* a */)
-    }
-    return ch - 0x30 /* 0 */
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence
-  // Allows only 0-377(octal) i.e. 0-255(decimal).
-  pp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {
-    if (this.regexp_eatOctalDigit(state)) {
-      var n1 = state.lastIntValue;
-      if (this.regexp_eatOctalDigit(state)) {
-        var n2 = state.lastIntValue;
-        if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {
-          state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;
-        } else {
-          state.lastIntValue = n1 * 8 + n2;
-        }
-      } else {
-        state.lastIntValue = n1;
-      }
-      return true
-    }
-    return false
-  };
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit
-  pp$1.regexp_eatOctalDigit = function(state) {
-    var ch = state.current();
-    if (isOctalDigit(ch)) {
-      state.lastIntValue = ch - 0x30; /* 0 */
-      state.advance();
-      return true
-    }
-    state.lastIntValue = 0;
-    return false
-  };
-  function isOctalDigit(ch) {
-    return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */
-  }
-
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits
-  // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit
-  // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence
-  pp$1.regexp_eatFixedHexDigits = function(state, length) {
-    var start = state.pos;
-    state.lastIntValue = 0;
-    for (var i = 0; i < length; ++i) {
-      var ch = state.current();
-      if (!isHexDigit(ch)) {
-        state.pos = start;
-        return false
-      }
-      state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);
-      state.advance();
-    }
-    return true
-  };
-
-  // Object type used to represent tokens. Note that normally, tokens
-  // simply exist as properties on the parser object. This is only
-  // used for the onToken callback and the external tokenizer.
-
-  var Token = function Token(p) {
-    this.type = p.type;
-    this.value = p.value;
-    this.start = p.start;
-    this.end = p.end;
-    if (p.options.locations)
-      { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }
-    if (p.options.ranges)
-      { this.range = [p.start, p.end]; }
-  };
-
-  // ## Tokenizer
-
-  var pp = Parser.prototype;
-
-  // Move to the next token
-
-  pp.next = function(ignoreEscapeSequenceInKeyword) {
-    if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)
-      { this.raiseRecoverable(this.start, "Escape sequence in keyword " + this.type.keyword); }
-    if (this.options.onToken)
-      { this.options.onToken(new Token(this)); }
-
-    this.lastTokEnd = this.end;
-    this.lastTokStart = this.start;
-    this.lastTokEndLoc = this.endLoc;
-    this.lastTokStartLoc = this.startLoc;
-    this.nextToken();
-  };
-
-  pp.getToken = function() {
-    this.next();
-    return new Token(this)
-  };
-
-  // If we're in an ES6 environment, make parsers iterable
-  if (typeof Symbol !== "undefined")
-    { pp[Symbol.iterator] = function() {
-      var this$1$1 = this;
-
-      return {
-        next: function () {
-          var token = this$1$1.getToken();
-          return {
-            done: token.type === types$1.eof,
-            value: token
-          }
-        }
-      }
-    }; }
-
-  // Toggle strict mode. Re-reads the next number or string to please
-  // pedantic tests (`"use strict"; 010;` should fail).
-
-  // Read a single token, updating the parser object's token-related
-  // properties.
-
-  pp.nextToken = function() {
-    var curContext = this.curContext();
-    if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }
-
-    this.start = this.pos;
-    if (this.options.locations) { this.startLoc = this.curPosition(); }
-    if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }
-
-    if (curContext.override) { return curContext.override(this) }
-    else { this.readToken(this.fullCharCodeAtPos()); }
-  };
-
-  pp.readToken = function(code) {
-    // Identifier or keyword. '\uXXXX' sequences are allowed in
-    // identifiers, so '\' also dispatches to that.
-    if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\' */)
-      { return this.readWord() }
-
-    return this.getTokenFromCode(code)
-  };
-
-  pp.fullCharCodeAtPos = function() {
-    var code = this.input.charCodeAt(this.pos);
-    if (code <= 0xd7ff || code >= 0xdc00) { return code }
-    var next = this.input.charCodeAt(this.pos + 1);
-    return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00
-  };
-
-  pp.skipBlockComment = function() {
-    var startLoc = this.options.onComment && this.curPosition();
-    var start = this.pos, end = this.input.indexOf("*/", this.pos += 2);
-    if (end === -1) { this.raise(this.pos - 2, "Unterminated comment"); }
-    this.pos = end + 2;
-    if (this.options.locations) {
-      for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {
-        ++this.curLine;
-        pos = this.lineStart = nextBreak;
-      }
-    }
-    if (this.options.onComment)
-      { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,
-                             startLoc, this.curPosition()); }
-  };
-
-  pp.skipLineComment = function(startSkip) {
-    var start = this.pos;
-    var startLoc = this.options.onComment && this.curPosition();
-    var ch = this.input.charCodeAt(this.pos += startSkip);
-    while (this.pos < this.input.length && !isNewLine(ch)) {
-      ch = this.input.charCodeAt(++this.pos);
-    }
-    if (this.options.onComment)
-      { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,
-                             startLoc, this.curPosition()); }
-  };
-
-  // Called at the start of the parse and after every token. Skips
-  // whitespace and comments, and.
-
-  pp.skipSpace = function() {
-    loop: while (this.pos < this.input.length) {
-      var ch = this.input.charCodeAt(this.pos);
-      switch (ch) {
-      case 32: case 160: // ' '
-        ++this.pos;
-        break
-      case 13:
-        if (this.input.charCodeAt(this.pos + 1) === 10) {
-          ++this.pos;
-        }
-      case 10: case 8232: case 8233:
-        ++this.pos;
-        if (this.options.locations) {
-          ++this.curLine;
-          this.lineStart = this.pos;
-        }
-        break
-      case 47: // '/'
-        switch (this.input.charCodeAt(this.pos + 1)) {
-        case 42: // '*'
-          this.skipBlockComment();
-          break
-        case 47:
-          this.skipLineComment(2);
-          break
-        default:
-          break loop
-        }
-        break
-      default:
-        if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {
-          ++this.pos;
-        } else {
-          break loop
-        }
-      }
-    }
-  };
-
-  // Called at the end of every token. Sets `end`, `val`, and
-  // maintains `context` and `exprAllowed`, and skips the space after
-  // the token, so that the next one's `start` will point at the
-  // right position.
-
-  pp.finishToken = function(type, val) {
-    this.end = this.pos;
-    if (this.options.locations) { this.endLoc = this.curPosition(); }
-    var prevType = this.type;
-    this.type = type;
-    this.value = val;
-
-    this.updateContext(prevType);
-  };
-
-  // ### Token reading
-
-  // This is the function that is called to fetch the next token. It
-  // is somewhat obscure, because it works in character codes rather
-  // than characters, and because operator parsing has been inlined
-  // into it.
-  //
-  // All in the name of speed.
-  //
-  pp.readToken_dot = function() {
-    var next = this.input.charCodeAt(this.pos + 1);
-    if (next >= 48 && next <= 57) { return this.readNumber(true) }
-    var next2 = this.input.charCodeAt(this.pos + 2);
-    if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'
-      this.pos += 3;
-      return this.finishToken(types$1.ellipsis)
-    } else {
-      ++this.pos;
-      return this.finishToken(types$1.dot)
-    }
-  };
-
-  pp.readToken_slash = function() { // '/'
-    var next = this.input.charCodeAt(this.pos + 1);
-    if (this.exprAllowed) { ++this.pos; return this.readRegexp() }
-    if (next === 61) { return this.finishOp(types$1.assign, 2) }
-    return this.finishOp(types$1.slash, 1)
-  };
-
-  pp.readToken_mult_modulo_exp = function(code) { // '%*'
-    var next = this.input.charCodeAt(this.pos + 1);
-    var size = 1;
-    var tokentype = code === 42 ? types$1.star : types$1.modulo;
-
-    // exponentiation operator ** and **=
-    if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {
-      ++size;
-      tokentype = types$1.starstar;
-      next = this.input.charCodeAt(this.pos + 2);
-    }
-
-    if (next === 61) { return this.finishOp(types$1.assign, size + 1) }
-    return this.finishOp(tokentype, size)
-  };
-
-  pp.readToken_pipe_amp = function(code) { // '|&'
-    var next = this.input.charCodeAt(this.pos + 1);
-    if (next === code) {
-      if (this.options.ecmaVersion >= 12) {
-        var next2 = this.input.charCodeAt(this.pos + 2);
-        if (next2 === 61) { return this.finishOp(types$1.assign, 3) }
-      }
-      return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)
-    }
-    if (next === 61) { return this.finishOp(types$1.assign, 2) }
-    return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)
-  };
-
-  pp.readToken_caret = function() { // '^'
-    var next = this.input.charCodeAt(this.pos + 1);
-    if (next === 61) { return this.finishOp(types$1.assign, 2) }
-    return this.finishOp(types$1.bitwiseXOR, 1)
-  };
-
-  pp.readToken_plus_min = function(code) { // '+-'
-    var next = this.input.charCodeAt(this.pos + 1);
-    if (next === code) {
-      if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&
-          (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {
-        // A `-->` line comment
-        this.skipLineComment(3);
-        this.skipSpace();
-        return this.nextToken()
-      }
-      return this.finishOp(types$1.incDec, 2)
-    }
-    if (next === 61) { return this.finishOp(types$1.assign, 2) }
-    return this.finishOp(types$1.plusMin, 1)
-  };
-
-  pp.readToken_lt_gt = function(code) { // '<>'
-    var next = this.input.charCodeAt(this.pos + 1);
-    var size = 1;
-    if (next === code) {
-      size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;
-      if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }
-      return this.finishOp(types$1.bitShift, size)
-    }
-    if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&
-        this.input.charCodeAt(this.pos + 3) === 45) {
-      // `<!--`, an XML-style comment that should be interpreted as a line comment
-      this.skipLineComment(4);
-      this.skipSpace();
-      return this.nextToken()
-    }
-    if (next === 61) { size = 2; }
-    return this.finishOp(types$1.relational, size)
-  };
-
-  pp.readToken_eq_excl = function(code) { // '=!'
-    var next = this.input.charCodeAt(this.pos + 1);
-    if (next === 61) { return this.finishOp(types$1.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }
-    if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'
-      this.pos += 2;
-      return this.finishToken(types$1.arrow)
-    }
-    return this.finishOp(code === 61 ? types$1.eq : types$1.prefix, 1)
-  };
-
-  pp.readToken_question = function() { // '?'
-    var ecmaVersion = this.options.ecmaVersion;
-    if (ecmaVersion >= 11) {
-      var next = this.input.charCodeAt(this.pos + 1);
-      if (next === 46) {
-        var next2 = this.input.charCodeAt(this.pos + 2);
-        if (next2 < 48 || next2 > 57) { return this.finishOp(types$1.questionDot, 2) }
-      }
-      if (next === 63) {
-        if (ecmaVersion >= 12) {
-          var next2$1 = this.input.charCodeAt(this.pos + 2);
-          if (next2$1 === 61) { return this.finishOp(types$1.assign, 3) }
-        }
-        return this.finishOp(types$1.coalesce, 2)
-      }
-    }
-    return this.finishOp(types$1.question, 1)
-  };
-
-  pp.readToken_numberSign = function() { // '#'
-    var ecmaVersion = this.options.ecmaVersion;
-    var code = 35; // '#'
-    if (ecmaVersion >= 13) {
-      ++this.pos;
-      code = this.fullCharCodeAtPos();
-      if (isIdentifierStart(code, true) || code === 92 /* '\' */) {
-        return this.finishToken(types$1.privateId, this.readWord1())
-      }
-    }
-
-    this.raise(this.pos, "Unexpected character '" + codePointToString(code) + "'");
-  };
-
-  pp.getTokenFromCode = function(code) {
-    switch (code) {
-    // The interpretation of a dot depends on whether it is followed
-    // by a digit or another two dots.
-    case 46: // '.'
-      return this.readToken_dot()
-
-    // Punctuation tokens.
-    case 40: ++this.pos; return this.finishToken(types$1.parenL)
-    case 41: ++this.pos; return this.finishToken(types$1.parenR)
-    case 59: ++this.pos; return this.finishToken(types$1.semi)
-    case 44: ++this.pos; return this.finishToken(types$1.comma)
-    case 91: ++this.pos; return this.finishToken(types$1.bracketL)
-    case 93: ++this.pos; return this.finishToken(types$1.bracketR)
-    case 123: ++this.pos; return this.finishToken(types$1.braceL)
-    case 125: ++this.pos; return this.finishToken(types$1.braceR)
-    case 58: ++this.pos; return this.finishToken(types$1.colon)
-
-    case 96: // '`'
-      if (this.options.ecmaVersion < 6) { break }
-      ++this.pos;
-      return this.finishToken(types$1.backQuote)
-
-    case 48: // '0'
-      var next = this.input.charCodeAt(this.pos + 1);
-      if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number
-      if (this.options.ecmaVersion >= 6) {
-        if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number
-        if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number
-      }
-
-    // Anything else beginning with a digit is an integer, octal
-    // number, or float.
-    case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9
-      return this.readNumber(false)
-
-    // Quotes produce strings.
-    case 34: case 39: // '"', "'"
-      return this.readString(code)
-
-    // Operators are parsed inline in tiny state machines. '=' (61) is
-    // often referred to. `finishOp` simply skips the amount of
-    // characters it is given as second argument, and returns a token
-    // of the type given by its first argument.
-    case 47: // '/'
-      return this.readToken_slash()
-
-    case 37: case 42: // '%*'
-      return this.readToken_mult_modulo_exp(code)
-
-    case 124: case 38: // '|&'
-      return this.readToken_pipe_amp(code)
-
-    case 94: // '^'
-      return this.readToken_caret()
-
-    case 43: case 45: // '+-'
-      return this.readToken_plus_min(code)
-
-    case 60: case 62: // '<>'
-      return this.readToken_lt_gt(code)
-
-    case 61: case 33: // '=!'
-      return this.readToken_eq_excl(code)
-
-    case 63: // '?'
-      return this.readToken_question()
-
-    case 126: // '~'
-      return this.finishOp(types$1.prefix, 1)
-
-    case 35: // '#'
-      return this.readToken_numberSign()
-    }
-
-    this.raise(this.pos, "Unexpected character '" + codePointToString(code) + "'");
-  };
-
-  pp.finishOp = function(type, size) {
-    var str = this.input.slice(this.pos, this.pos + size);
-    this.pos += size;
-    return this.finishToken(type, str)
-  };
-
-  pp.readRegexp = function() {
-    var escaped, inClass, start = this.pos;
-    for (;;) {
-      if (this.pos >= this.input.length) { this.raise(start, "Unterminated regular expression"); }
-      var ch = this.input.charAt(this.pos);
-      if (lineBreak.test(ch)) { this.raise(start, "Unterminated regular expression"); }
-      if (!escaped) {
-        if (ch === "[") { inClass = true; }
-        else if (ch === "]" && inClass) { inClass = false; }
-        else if (ch === "/" && !inClass) { break }
-        escaped = ch === "\\";
-      } else { escaped = false; }
-      ++this.pos;
-    }
-    var pattern = this.input.slice(start, this.pos);
-    ++this.pos;
-    var flagsStart = this.pos;
-    var flags = this.readWord1();
-    if (this.containsEsc) { this.unexpected(flagsStart); }
-
-    // Validate pattern
-    var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));
-    state.reset(start, pattern, flags);
-    this.validateRegExpFlags(state);
-    this.validateRegExpPattern(state);
-
-    // Create Literal#value property value.
-    var value = null;
-    try {
-      value = new RegExp(pattern, flags);
-    } catch (e) {
-      // ESTree requires null if it failed to instantiate RegExp object.
-      // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral
-    }
-
-    return this.finishToken(types$1.regexp, {pattern: pattern, flags: flags, value: value})
-  };
-
-  // Read an integer in the given radix. Return null if zero digits
-  // were read, the integer value otherwise. When `len` is given, this
-  // will return `null` unless the integer has exactly `len` digits.
-
-  pp.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {
-    // `len` is used for character escape sequences. In that case, disallow separators.
-    var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;
-
-    // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)
-    // and isn't fraction part nor exponent part. In that case, if the first digit
-    // is zero then disallow separators.
-    var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;
-
-    var start = this.pos, total = 0, lastCode = 0;
-    for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {
-      var code = this.input.charCodeAt(this.pos), val = (void 0);
-
-      if (allowSeparators && code === 95) {
-        if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, "Numeric separator is not allowed in legacy octal numeric literals"); }
-        if (lastCode === 95) { this.raiseRecoverable(this.pos, "Numeric separator must be exactly one underscore"); }
-        if (i === 0) { this.raiseRecoverable(this.pos, "Numeric separator is not allowed at the first of digits"); }
-        lastCode = code;
-        continue
-      }
-
-      if (code >= 97) { val = code - 97 + 10; } // a
-      else if (code >= 65) { val = code - 65 + 10; } // A
-      else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9
-      else { val = Infinity; }
-      if (val >= radix) { break }
-      lastCode = code;
-      total = total * radix + val;
-    }
-
-    if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, "Numeric separator is not allowed at the last of digits"); }
-    if (this.pos === start || len != null && this.pos - start !== len) { return null }
-
-    return total
-  };
-
-  function stringToNumber(str, isLegacyOctalNumericLiteral) {
-    if (isLegacyOctalNumericLiteral) {
-      return parseInt(str, 8)
-    }
-
-    // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.
-    return parseFloat(str.replace(/_/g, ""))
-  }
-
-  function stringToBigInt(str) {
-    if (typeof BigInt !== "function") {
-      return null
-    }
-
-    // `BigInt(value)` throws syntax error if the string contains numeric separators.
-    return BigInt(str.replace(/_/g, ""))
-  }
-
-  pp.readRadixNumber = function(radix) {
-    var start = this.pos;
-    this.pos += 2; // 0x
-    var val = this.readInt(radix);
-    if (val == null) { this.raise(this.start + 2, "Expected number in radix " + radix); }
-    if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {
-      val = stringToBigInt(this.input.slice(start, this.pos));
-      ++this.pos;
-    } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
-    return this.finishToken(types$1.num, val)
-  };
-
-  // Read an integer, octal integer, or floating-point number.
-
-  pp.readNumber = function(startsWithDot) {
-    var start = this.pos;
-    if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, "Invalid number"); }
-    var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;
-    if (octal && this.strict) { this.raise(start, "Invalid number"); }
-    var next = this.input.charCodeAt(this.pos);
-    if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {
-      var val$1 = stringToBigInt(this.input.slice(start, this.pos));
-      ++this.pos;
-      if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
-      return this.finishToken(types$1.num, val$1)
-    }
-    if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }
-    if (next === 46 && !octal) { // '.'
-      ++this.pos;
-      this.readInt(10);
-      next = this.input.charCodeAt(this.pos);
-    }
-    if ((next === 69 || next === 101) && !octal) { // 'eE'
-      next = this.input.charCodeAt(++this.pos);
-      if (next === 43 || next === 45) { ++this.pos; } // '+-'
-      if (this.readInt(10) === null) { this.raise(start, "Invalid number"); }
-    }
-    if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, "Identifier directly after number"); }
-
-    var val = stringToNumber(this.input.slice(start, this.pos), octal);
-    return this.finishToken(types$1.num, val)
-  };
-
-  // Read a string value, interpreting backslash-escapes.
-
-  pp.readCodePoint = function() {
-    var ch = this.input.charCodeAt(this.pos), code;
-
-    if (ch === 123) { // '{'
-      if (this.options.ecmaVersion < 6) { this.unexpected(); }
-      var codePos = ++this.pos;
-      code = this.readHexChar(this.input.indexOf("}", this.pos) - this.pos);
-      ++this.pos;
-      if (code > 0x10FFFF) { this.invalidStringToken(codePos, "Code point out of bounds"); }
-    } else {
-      code = this.readHexChar(4);
-    }
-    return code
-  };
-
-  pp.readString = function(quote) {
-    var out = "", chunkStart = ++this.pos;
-    for (;;) {
-      if (this.pos >= this.input.length) { this.raise(this.start, "Unterminated string constant"); }
-      var ch = this.input.charCodeAt(this.pos);
-      if (ch === quote) { break }
-      if (ch === 92) { // '\'
-        out += this.input.slice(chunkStart, this.pos);
-        out += this.readEscapedChar(false);
-        chunkStart = this.pos;
-      } else if (ch === 0x2028 || ch === 0x2029) {
-        if (this.options.ecmaVersion < 10) { this.raise(this.start, "Unterminated string constant"); }
-        ++this.pos;
-        if (this.options.locations) {
-          this.curLine++;
-          this.lineStart = this.pos;
-        }
-      } else {
-        if (isNewLine(ch)) { this.raise(this.start, "Unterminated string constant"); }
-        ++this.pos;
-      }
-    }
-    out += this.input.slice(chunkStart, this.pos++);
-    return this.finishToken(types$1.string, out)
-  };
-
-  // Reads template string tokens.
-
-  var INVALID_TEMPLATE_ESCAPE_ERROR = {};
-
-  pp.tryReadTemplateToken = function() {
-    this.inTemplateElement = true;
-    try {
-      this.readTmplToken();
-    } catch (err) {
-      if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {
-        this.readInvalidTemplateToken();
-      } else {
-        throw err
-      }
-    }
-
-    this.inTemplateElement = false;
-  };
-
-  pp.invalidStringToken = function(position, message) {
-    if (this.inTemplateElement && this.options.ecmaVersion >= 9) {
-      throw INVALID_TEMPLATE_ESCAPE_ERROR
-    } else {
-      this.raise(position, message);
-    }
-  };
-
-  pp.readTmplToken = function() {
-    var out = "", chunkStart = this.pos;
-    for (;;) {
-      if (this.pos >= this.input.length) { this.raise(this.start, "Unterminated template"); }
-      var ch = this.input.charCodeAt(this.pos);
-      if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'
-        if (this.pos === this.start && (this.type === types$1.template || this.type === types$1.invalidTemplate)) {
-          if (ch === 36) {
-            this.pos += 2;
-            return this.finishToken(types$1.dollarBraceL)
-          } else {
-            ++this.pos;
-            return this.finishToken(types$1.backQuote)
-          }
-        }
-        out += this.input.slice(chunkStart, this.pos);
-        return this.finishToken(types$1.template, out)
-      }
-      if (ch === 92) { // '\'
-        out += this.input.slice(chunkStart, this.pos);
-        out += this.readEscapedChar(true);
-        chunkStart = this.pos;
-      } else if (isNewLine(ch)) {
-        out += this.input.slice(chunkStart, this.pos);
-        ++this.pos;
-        switch (ch) {
-        case 13:
-          if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }
-        case 10:
-          out += "\n";
-          break
-        default:
-          out += String.fromCharCode(ch);
-          break
-        }
-        if (this.options.locations) {
-          ++this.curLine;
-          this.lineStart = this.pos;
-        }
-        chunkStart = this.pos;
-      } else {
-        ++this.pos;
-      }
-    }
-  };
-
-  // Reads a template token to search for the end, without validating any escape sequences
-  pp.readInvalidTemplateToken = function() {
-    for (; this.pos < this.input.length; this.pos++) {
-      switch (this.input[this.pos]) {
-      case "\\":
-        ++this.pos;
-        break
-
-      case "$":
-        if (this.input[this.pos + 1] !== "{") {
-          break
-        }
-
-      // falls through
-      case "`":
-        return this.finishToken(types$1.invalidTemplate, this.input.slice(this.start, this.pos))
-
-      // no default
-      }
-    }
-    this.raise(this.start, "Unterminated template");
-  };
-
-  // Used to read escaped characters
-
-  pp.readEscapedChar = function(inTemplate) {
-    var ch = this.input.charCodeAt(++this.pos);
-    ++this.pos;
-    switch (ch) {
-    case 110: return "\n" // 'n' -> '\n'
-    case 114: return "\r" // 'r' -> '\r'
-    case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'
-    case 117: return codePointToString(this.readCodePoint()) // 'u'
-    case 116: return "\t" // 't' -> '\t'
-    case 98: return "\b" // 'b' -> '\b'
-    case 118: return "\u000b" // 'v' -> '\u000b'
-    case 102: return "\f" // 'f' -> '\f'
-    case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\r\n'
-    case 10: // ' \n'
-      if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }
-      return ""
-    case 56:
-    case 57:
-      if (this.strict) {
-        this.invalidStringToken(
-          this.pos - 1,
-          "Invalid escape sequence"
-        );
-      }
-      if (inTemplate) {
-        var codePos = this.pos - 1;
-
-        this.invalidStringToken(
-          codePos,
-          "Invalid escape sequence in template string"
-        );
-
-        return null
-      }
-    default:
-      if (ch >= 48 && ch <= 55) {
-        var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];
-        var octal = parseInt(octalStr, 8);
-        if (octal > 255) {
-          octalStr = octalStr.slice(0, -1);
-          octal = parseInt(octalStr, 8);
-        }
-        this.pos += octalStr.length - 1;
-        ch = this.input.charCodeAt(this.pos);
-        if ((octalStr !== "0" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {
-          this.invalidStringToken(
-            this.pos - 1 - octalStr.length,
-            inTemplate
-              ? "Octal literal in template string"
-              : "Octal literal in strict mode"
-          );
-        }
-        return String.fromCharCode(octal)
-      }
-      if (isNewLine(ch)) {
-        // Unicode new line characters after \ get removed from output in both
-        // template literals and strings
-        return ""
-      }
-      return String.fromCharCode(ch)
-    }
-  };
-
-  // Used to read character escape sequences ('\x', '\u', '\U').
-
-  pp.readHexChar = function(len) {
-    var codePos = this.pos;
-    var n = this.readInt(16, len);
-    if (n === null) { this.invalidStringToken(codePos, "Bad character escape sequence"); }
-    return n
-  };
-
-  // Read an identifier, and return it as a string. Sets `this.containsEsc`
-  // to whether the word contained a '\u' escape.
-  //
-  // Incrementally adds only escaped chars, adding other chunks as-is
-  // as a micro-optimization.
-
-  pp.readWord1 = function() {
-    this.containsEsc = false;
-    var word = "", first = true, chunkStart = this.pos;
-    var astral = this.options.ecmaVersion >= 6;
-    while (this.pos < this.input.length) {
-      var ch = this.fullCharCodeAtPos();
-      if (isIdentifierChar(ch, astral)) {
-        this.pos += ch <= 0xffff ? 1 : 2;
-      } else if (ch === 92) { // "\"
-        this.containsEsc = true;
-        word += this.input.slice(chunkStart, this.pos);
-        var escStart = this.pos;
-        if (this.input.charCodeAt(++this.pos) !== 117) // "u"
-          { this.invalidStringToken(this.pos, "Expecting Unicode escape sequence \\uXXXX"); }
-        ++this.pos;
-        var esc = this.readCodePoint();
-        if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))
-          { this.invalidStringToken(escStart, "Invalid Unicode escape"); }
-        word += codePointToString(esc);
-        chunkStart = this.pos;
-      } else {
-        break
-      }
-      first = false;
-    }
-    return word + this.input.slice(chunkStart, this.pos)
-  };
-
-  // Read an identifier or keyword token. Will check for reserved
-  // words when necessary.
-
-  pp.readWord = function() {
-    var word = this.readWord1();
-    var type = types$1.name;
-    if (this.keywords.test(word)) {
-      type = keywords[word];
-    }
-    return this.finishToken(type, word)
-  };
-
-  // Acorn is a tiny, fast JavaScript parser written in JavaScript.
-
-  var version = "8.8.0";
-
-  Parser.acorn = {
-    Parser: Parser,
-    version: version,
-    defaultOptions: defaultOptions,
-    Position: Position,
-    SourceLocation: SourceLocation,
-    getLineInfo: getLineInfo,
-    Node: Node,
-    TokenType: TokenType,
-    tokTypes: types$1,
-    keywordTypes: keywords,
-    TokContext: TokContext,
-    tokContexts: types,
-    isIdentifierChar: isIdentifierChar,
-    isIdentifierStart: isIdentifierStart,
-    Token: Token,
-    isNewLine: isNewLine,
-    lineBreak: lineBreak,
-    lineBreakG: lineBreakG,
-    nonASCIIwhitespace: nonASCIIwhitespace
-  };
-
-  // The main exported interface (under `self.acorn` when in the
-  // browser) is a `parse` function that takes a code string and
-  // returns an abstract syntax tree as specified by [Mozilla parser
-  // API][api].
-  //
-  // [api]: https://developer.mozilla.org/en-US/docs/SpiderMonkey/Parser_API
-
-  function parse(input, options) {
-    return Parser.parse(input, options)
-  }
-
-  // This function tries to parse a single expression at a given
-  // offset in a string. Useful for parsing mixed-language formats
-  // that embed JavaScript expressions.
-
-  function parseExpressionAt(input, pos, options) {
-    return Parser.parseExpressionAt(input, pos, options)
-  }
-
-  // Acorn is organized as a tokenizer and a recursive-descent parser.
-  // The `tokenizer` export provides an interface to the tokenizer.
-
-  function tokenizer(input, options) {
-    return Parser.tokenizer(input, options)
-  }
-
-  exports.Node = Node;
-  exports.Parser = Parser;
-  exports.Position = Position;
-  exports.SourceLocation = SourceLocation;
-  exports.TokContext = TokContext;
-  exports.Token = Token;
-  exports.TokenType = TokenType;
-  exports.defaultOptions = defaultOptions;
-  exports.getLineInfo = getLineInfo;
-  exports.isIdentifierChar = isIdentifierChar;
-  exports.isIdentifierStart = isIdentifierStart;
-  exports.isNewLine = isNewLine;
-  exports.keywordTypes = keywords;
-  exports.lineBreak = lineBreak;
-  exports.lineBreakG = lineBreakG;
-  exports.nonASCIIwhitespace = nonASCIIwhitespace;
-  exports.parse = parse;
-  exports.parseExpressionAt = parseExpressionAt;
-  exports.tokContexts = types;
-  exports.tokTypes = types$1;
-  exports.tokenizer = tokenizer;
-  exports.version = version;
-
-  Object.defineProperty(exports, '__esModule', { value: true });
-
-}));
-
-
-/***/ }),
-
-/***/ 81111:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "J": () => (/* binding */ Data3DTexture)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-
-class Data3DTexture extends three__WEBPACK_IMPORTED_MODULE_0__.Texture {
-  constructor(data = null, width = 1, height = 1, depth = 1) {
-    super(null);
-    this.isData3DTexture = true;
-    this.image = { data, width, height, depth };
-    this.magFilter = three__WEBPACK_IMPORTED_MODULE_0__.NearestFilter;
-    this.minFilter = three__WEBPACK_IMPORTED_MODULE_0__.NearestFilter;
-    this.wrapR = three__WEBPACK_IMPORTED_MODULE_0__.ClampToEdgeWrapping;
-    this.generateMipmaps = false;
-    this.flipY = false;
-    this.unpackAlignment = 1;
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 1687:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "A": () => (/* binding */ ArcballControls)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-const STATE = {
-  IDLE: Symbol(),
-  ROTATE: Symbol(),
-  PAN: Symbol(),
-  SCALE: Symbol(),
-  FOV: Symbol(),
-  FOCUS: Symbol(),
-  ZROTATE: Symbol(),
-  TOUCH_MULTI: Symbol(),
-  ANIMATION_FOCUS: Symbol(),
-  ANIMATION_ROTATE: Symbol()
-};
-const INPUT = {
-  NONE: Symbol(),
-  ONE_FINGER: Symbol(),
-  ONE_FINGER_SWITCHED: Symbol(),
-  TWO_FINGER: Symbol(),
-  MULT_FINGER: Symbol(),
-  CURSOR: Symbol()
-};
-const _center = {
-  x: 0,
-  y: 0
-};
-const _transformation = {
-  camera: /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4(),
-  gizmos: /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4()
-};
-const _changeEvent = { type: "change" };
-const _startEvent = { type: "start" };
-const _endEvent = { type: "end" };
-class ArcballControls extends three__WEBPACK_IMPORTED_MODULE_0__.EventDispatcher {
-  constructor(camera, domElement = null, scene = null) {
-    super();
-    __publicField(this, "camera");
-    __publicField(this, "domElement");
-    __publicField(this, "scene");
-    __publicField(this, "mouseActions");
-    __publicField(this, "_mouseOp");
-    __publicField(this, "_v2_1");
-    __publicField(this, "_v3_1");
-    __publicField(this, "_v3_2");
-    __publicField(this, "_m4_1");
-    __publicField(this, "_m4_2");
-    __publicField(this, "_quat");
-    __publicField(this, "_translationMatrix");
-    __publicField(this, "_rotationMatrix");
-    __publicField(this, "_scaleMatrix");
-    __publicField(this, "_rotationAxis");
-    __publicField(this, "_cameraMatrixState");
-    __publicField(this, "_cameraProjectionState");
-    __publicField(this, "_fovState");
-    __publicField(this, "_upState");
-    __publicField(this, "_zoomState");
-    __publicField(this, "_nearPos");
-    __publicField(this, "_farPos");
-    __publicField(this, "_gizmoMatrixState");
-    __publicField(this, "_up0");
-    __publicField(this, "_zoom0");
-    __publicField(this, "_fov0");
-    __publicField(this, "_initialNear");
-    __publicField(this, "_nearPos0");
-    __publicField(this, "_initialFar");
-    __publicField(this, "_farPos0");
-    __publicField(this, "_cameraMatrixState0");
-    __publicField(this, "_gizmoMatrixState0");
-    __publicField(this, "_button");
-    __publicField(this, "_touchStart");
-    __publicField(this, "_touchCurrent");
-    __publicField(this, "_input");
-    __publicField(this, "_switchSensibility");
-    __publicField(this, "_startFingerDistance");
-    __publicField(this, "_currentFingerDistance");
-    __publicField(this, "_startFingerRotation");
-    __publicField(this, "_currentFingerRotation");
-    __publicField(this, "_devPxRatio");
-    __publicField(this, "_downValid");
-    __publicField(this, "_nclicks");
-    __publicField(this, "_downEvents");
-    __publicField(this, "_clickStart");
-    __publicField(this, "_maxDownTime");
-    __publicField(this, "_maxInterval");
-    __publicField(this, "_posThreshold");
-    __publicField(this, "_movementThreshold");
-    __publicField(this, "_currentCursorPosition");
-    __publicField(this, "_startCursorPosition");
-    __publicField(this, "_grid");
-    __publicField(this, "_gridPosition");
-    __publicField(this, "_gizmos");
-    __publicField(this, "_curvePts");
-    __publicField(this, "_timeStart");
-    __publicField(this, "_animationId");
-    __publicField(this, "focusAnimationTime");
-    __publicField(this, "_timePrev");
-    __publicField(this, "_timeCurrent");
-    __publicField(this, "_anglePrev");
-    __publicField(this, "_angleCurrent");
-    __publicField(this, "_cursorPosPrev");
-    __publicField(this, "_cursorPosCurr");
-    __publicField(this, "_wPrev");
-    __publicField(this, "_wCurr");
-    __publicField(this, "adjustNearFar");
-    __publicField(this, "scaleFactor");
-    __publicField(this, "dampingFactor");
-    __publicField(this, "wMax");
-    __publicField(this, "enableAnimations");
-    __publicField(this, "enableGrid");
-    __publicField(this, "cursorZoom");
-    __publicField(this, "minFov");
-    __publicField(this, "maxFov");
-    __publicField(this, "enabled");
-    __publicField(this, "enablePan");
-    __publicField(this, "enableRotate");
-    __publicField(this, "enableZoom");
-    __publicField(this, "minDistance");
-    __publicField(this, "maxDistance");
-    __publicField(this, "minZoom");
-    __publicField(this, "maxZoom");
-    __publicField(this, "target");
-    __publicField(this, "_currentTarget");
-    __publicField(this, "_tbRadius");
-    __publicField(this, "_state");
-    //listeners
-    __publicField(this, "onWindowResize", () => {
-      const scale = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3;
-      if (this.camera) {
-        const tbRadius = this.calculateTbRadius(this.camera);
-        if (tbRadius !== void 0) {
-          this._tbRadius = tbRadius;
-        }
-      }
-      const newRadius = this._tbRadius / scale;
-      const curve = new three__WEBPACK_IMPORTED_MODULE_0__.EllipseCurve(0, 0, newRadius, newRadius);
-      const points = curve.getPoints(this._curvePts);
-      const curveGeometry = new three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry().setFromPoints(points);
-      for (const gizmo in this._gizmos.children) {
-        const child = this._gizmos.children[gizmo];
-        child.geometry = curveGeometry;
-      }
-      this.dispatchEvent(_changeEvent);
-    });
-    __publicField(this, "onContextMenu", (event) => {
-      if (!this.enabled) {
-        return;
-      }
-      for (let i = 0; i < this.mouseActions.length; i++) {
-        if (this.mouseActions[i].mouse == 2) {
-          event.preventDefault();
-          break;
-        }
-      }
-    });
-    __publicField(this, "onPointerCancel", () => {
-      this._touchStart.splice(0, this._touchStart.length);
-      this._touchCurrent.splice(0, this._touchCurrent.length);
-      this._input = INPUT.NONE;
-    });
-    __publicField(this, "onPointerDown", (event) => {
-      if (event.button == 0 && event.isPrimary) {
-        this._downValid = true;
-        this._downEvents.push(event);
-      } else {
-        this._downValid = false;
-      }
-      if (event.pointerType == "touch" && this._input != INPUT.CURSOR) {
-        this._touchStart.push(event);
-        this._touchCurrent.push(event);
-        switch (this._input) {
-          case INPUT.NONE:
-            this._input = INPUT.ONE_FINGER;
-            this.onSinglePanStart(event, "ROTATE");
-            window.addEventListener("pointermove", this.onPointerMove);
-            window.addEventListener("pointerup", this.onPointerUp);
-            break;
-          case INPUT.ONE_FINGER:
-          case INPUT.ONE_FINGER_SWITCHED:
-            this._input = INPUT.TWO_FINGER;
-            this.onRotateStart();
-            this.onPinchStart();
-            this.onDoublePanStart();
-            break;
-          case INPUT.TWO_FINGER:
-            this._input = INPUT.MULT_FINGER;
-            this.onTriplePanStart();
-            break;
-        }
-      } else if (event.pointerType != "touch" && this._input == INPUT.NONE) {
-        let modifier = null;
-        if (event.ctrlKey || event.metaKey) {
-          modifier = "CTRL";
-        } else if (event.shiftKey) {
-          modifier = "SHIFT";
-        }
-        this._mouseOp = this.getOpFromAction(event.button, modifier);
-        if (this._mouseOp) {
-          window.addEventListener("pointermove", this.onPointerMove);
-          window.addEventListener("pointerup", this.onPointerUp);
-          this._input = INPUT.CURSOR;
-          this._button = event.button;
-          this.onSinglePanStart(event, this._mouseOp);
-        }
-      }
-    });
-    __publicField(this, "onPointerMove", (event) => {
-      if (event.pointerType == "touch" && this._input != INPUT.CURSOR) {
-        switch (this._input) {
-          case INPUT.ONE_FINGER:
-            this.updateTouchEvent(event);
-            this.onSinglePanMove(event, STATE.ROTATE);
-            break;
-          case INPUT.ONE_FINGER_SWITCHED:
-            const movement = this.calculatePointersDistance(this._touchCurrent[0], event) * this._devPxRatio;
-            if (movement >= this._switchSensibility) {
-              this._input = INPUT.ONE_FINGER;
-              this.updateTouchEvent(event);
-              this.onSinglePanStart(event, "ROTATE");
-              break;
-            }
-            break;
-          case INPUT.TWO_FINGER:
-            this.updateTouchEvent(event);
-            this.onRotateMove();
-            this.onPinchMove();
-            this.onDoublePanMove();
-            break;
-          case INPUT.MULT_FINGER:
-            this.updateTouchEvent(event);
-            this.onTriplePanMove();
-            break;
-        }
-      } else if (event.pointerType != "touch" && this._input == INPUT.CURSOR) {
-        let modifier = null;
-        if (event.ctrlKey || event.metaKey) {
-          modifier = "CTRL";
-        } else if (event.shiftKey) {
-          modifier = "SHIFT";
-        }
-        const mouseOpState = this.getOpStateFromAction(this._button, modifier);
-        if (mouseOpState) {
-          this.onSinglePanMove(event, mouseOpState);
-        }
-      }
-      if (this._downValid) {
-        const movement = this.calculatePointersDistance(this._downEvents[this._downEvents.length - 1], event) * this._devPxRatio;
-        if (movement > this._movementThreshold) {
-          this._downValid = false;
-        }
-      }
-    });
-    __publicField(this, "onPointerUp", (event) => {
-      if (event.pointerType == "touch" && this._input != INPUT.CURSOR) {
-        const nTouch = this._touchCurrent.length;
-        for (let i = 0; i < nTouch; i++) {
-          if (this._touchCurrent[i].pointerId == event.pointerId) {
-            this._touchCurrent.splice(i, 1);
-            this._touchStart.splice(i, 1);
-            break;
-          }
-        }
-        switch (this._input) {
-          case INPUT.ONE_FINGER:
-          case INPUT.ONE_FINGER_SWITCHED:
-            window.removeEventListener("pointermove", this.onPointerMove);
-            window.removeEventListener("pointerup", this.onPointerUp);
-            this._input = INPUT.NONE;
-            this.onSinglePanEnd();
-            break;
-          case INPUT.TWO_FINGER:
-            this.onDoublePanEnd();
-            this.onPinchEnd();
-            this.onRotateEnd();
-            this._input = INPUT.ONE_FINGER_SWITCHED;
-            break;
-          case INPUT.MULT_FINGER:
-            if (this._touchCurrent.length == 0) {
-              window.removeEventListener("pointermove", this.onPointerMove);
-              window.removeEventListener("pointerup", this.onPointerUp);
-              this._input = INPUT.NONE;
-              this.onTriplePanEnd();
-            }
-            break;
-        }
-      } else if (event.pointerType != "touch" && this._input == INPUT.CURSOR) {
-        window.removeEventListener("pointermove", this.onPointerMove);
-        window.removeEventListener("pointerup", this.onPointerUp);
-        this._input = INPUT.NONE;
-        this.onSinglePanEnd();
-        this._button = -1;
-      }
-      if (event.isPrimary) {
-        if (this._downValid) {
-          const downTime = event.timeStamp - this._downEvents[this._downEvents.length - 1].timeStamp;
-          if (downTime <= this._maxDownTime) {
-            if (this._nclicks == 0) {
-              this._nclicks = 1;
-              this._clickStart = performance.now();
-            } else {
-              const clickInterval = event.timeStamp - this._clickStart;
-              const movement = this.calculatePointersDistance(this._downEvents[1], this._downEvents[0]) * this._devPxRatio;
-              if (clickInterval <= this._maxInterval && movement <= this._posThreshold) {
-                this._nclicks = 0;
-                this._downEvents.splice(0, this._downEvents.length);
-                this.onDoubleTap(event);
-              } else {
-                this._nclicks = 1;
-                this._downEvents.shift();
-                this._clickStart = performance.now();
-              }
-            }
-          } else {
-            this._downValid = false;
-            this._nclicks = 0;
-            this._downEvents.splice(0, this._downEvents.length);
-          }
-        } else {
-          this._nclicks = 0;
-          this._downEvents.splice(0, this._downEvents.length);
-        }
-      }
-    });
-    __publicField(this, "onWheel", (event) => {
-      var _a, _b;
-      if (this.enabled && this.enableZoom && this.domElement) {
-        let modifier = null;
-        if (event.ctrlKey || event.metaKey) {
-          modifier = "CTRL";
-        } else if (event.shiftKey) {
-          modifier = "SHIFT";
-        }
-        const mouseOp = this.getOpFromAction("WHEEL", modifier);
-        if (mouseOp) {
-          event.preventDefault();
-          this.dispatchEvent(_startEvent);
-          const notchDeltaY = 125;
-          let sgn = event.deltaY / notchDeltaY;
-          let size = 1;
-          if (sgn > 0) {
-            size = 1 / this.scaleFactor;
-          } else if (sgn < 0) {
-            size = this.scaleFactor;
-          }
-          switch (mouseOp) {
-            case "ZOOM":
-              this.updateTbState(STATE.SCALE, true);
-              if (sgn > 0) {
-                size = 1 / Math.pow(this.scaleFactor, sgn);
-              } else if (sgn < 0) {
-                size = Math.pow(this.scaleFactor, -sgn);
-              }
-              if (this.cursorZoom && this.enablePan) {
-                let scalePoint;
-                if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera) {
-                  scalePoint = (_a = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position);
-                }
-                if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-                  scalePoint = (_b = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement)) == null ? void 0 : _b.applyQuaternion(this.camera.quaternion).add(this._gizmos.position);
-                }
-                if (scalePoint !== void 0)
-                  this.applyTransformMatrix(this.applyScale(size, scalePoint));
-              } else {
-                this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));
-              }
-              if (this._grid) {
-                this.disposeGrid();
-                this.drawGrid();
-              }
-              this.updateTbState(STATE.IDLE, false);
-              this.dispatchEvent(_changeEvent);
-              this.dispatchEvent(_endEvent);
-              break;
-            case "FOV":
-              if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-                this.updateTbState(STATE.FOV, true);
-                if (event.deltaX != 0) {
-                  sgn = event.deltaX / notchDeltaY;
-                  size = 1;
-                  if (sgn > 0) {
-                    size = 1 / Math.pow(this.scaleFactor, sgn);
-                  } else if (sgn < 0) {
-                    size = Math.pow(this.scaleFactor, -sgn);
-                  }
-                }
-                this._v3_1.setFromMatrixPosition(this._cameraMatrixState);
-                const x = this._v3_1.distanceTo(this._gizmos.position);
-                let xNew = x / size;
-                xNew = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.clamp(xNew, this.minDistance, this.maxDistance);
-                const y = x * Math.tan(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.DEG2RAD * this.camera.fov * 0.5);
-                let newFov = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2);
-                if (newFov > this.maxFov) {
-                  newFov = this.maxFov;
-                } else if (newFov < this.minFov) {
-                  newFov = this.minFov;
-                }
-                const newDistance = y / Math.tan(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.DEG2RAD * (newFov / 2));
-                size = x / newDistance;
-                this.setFov(newFov);
-                this.applyTransformMatrix(this.applyScale(size, this._gizmos.position, false));
-              }
-              if (this._grid) {
-                this.disposeGrid();
-                this.drawGrid();
-              }
-              this.updateTbState(STATE.IDLE, false);
-              this.dispatchEvent(_changeEvent);
-              this.dispatchEvent(_endEvent);
-              break;
-          }
-        }
-      }
-    });
-    __publicField(this, "onSinglePanStart", (event, operation) => {
-      if (this.enabled && this.domElement) {
-        this.dispatchEvent(_startEvent);
-        this.setCenter(event.clientX, event.clientY);
-        switch (operation) {
-          case "PAN":
-            if (!this.enablePan)
-              return;
-            if (this._animationId != -1) {
-              cancelAnimationFrame(this._animationId);
-              this._animationId = -1;
-              this._timeStart = -1;
-              this.activateGizmos(false);
-              this.dispatchEvent(_changeEvent);
-            }
-            if (this.camera) {
-              this.updateTbState(STATE.PAN, true);
-              const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);
-              if (rayDir !== void 0) {
-                this._startCursorPosition.copy(rayDir);
-              }
-              if (this.enableGrid) {
-                this.drawGrid();
-                this.dispatchEvent(_changeEvent);
-              }
-            }
-            break;
-          case "ROTATE":
-            if (!this.enableRotate)
-              return;
-            if (this._animationId != -1) {
-              cancelAnimationFrame(this._animationId);
-              this._animationId = -1;
-              this._timeStart = -1;
-            }
-            if (this.camera) {
-              this.updateTbState(STATE.ROTATE, true);
-              const rayDir = this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius);
-              if (rayDir !== void 0) {
-                this._startCursorPosition.copy(rayDir);
-              }
-              this.activateGizmos(true);
-              if (this.enableAnimations) {
-                this._timePrev = this._timeCurrent = performance.now();
-                this._angleCurrent = this._anglePrev = 0;
-                this._cursorPosPrev.copy(this._startCursorPosition);
-                this._cursorPosCurr.copy(this._cursorPosPrev);
-                this._wCurr = 0;
-                this._wPrev = this._wCurr;
-              }
-            }
-            this.dispatchEvent(_changeEvent);
-            break;
-          case "FOV":
-            if (!this.enableZoom)
-              return;
-            if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-              if (this._animationId != -1) {
-                cancelAnimationFrame(this._animationId);
-                this._animationId = -1;
-                this._timeStart = -1;
-                this.activateGizmos(false);
-                this.dispatchEvent(_changeEvent);
-              }
-              this.updateTbState(STATE.FOV, true);
-              this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);
-              this._currentCursorPosition.copy(this._startCursorPosition);
-            }
-            break;
-          case "ZOOM":
-            if (!this.enableZoom)
-              return;
-            if (this._animationId != -1) {
-              cancelAnimationFrame(this._animationId);
-              this._animationId = -1;
-              this._timeStart = -1;
-              this.activateGizmos(false);
-              this.dispatchEvent(_changeEvent);
-            }
-            this.updateTbState(STATE.SCALE, true);
-            this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);
-            this._currentCursorPosition.copy(this._startCursorPosition);
-            break;
-        }
-      }
-    });
-    __publicField(this, "onSinglePanMove", (event, opState) => {
-      if (this.enabled && this.domElement) {
-        const restart = opState != this._state;
-        this.setCenter(event.clientX, event.clientY);
-        switch (opState) {
-          case STATE.PAN:
-            if (this.enablePan && this.camera) {
-              if (restart) {
-                this.dispatchEvent(_endEvent);
-                this.dispatchEvent(_startEvent);
-                this.updateTbState(opState, true);
-                const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);
-                if (rayDir !== void 0) {
-                  this._startCursorPosition.copy(rayDir);
-                }
-                if (this.enableGrid) {
-                  this.drawGrid();
-                }
-                this.activateGizmos(false);
-              } else {
-                const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);
-                if (rayDir !== void 0) {
-                  this._currentCursorPosition.copy(rayDir);
-                }
-                this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition));
-              }
-            }
-            break;
-          case STATE.ROTATE:
-            if (this.enableRotate && this.camera) {
-              if (restart) {
-                this.dispatchEvent(_endEvent);
-                this.dispatchEvent(_startEvent);
-                this.updateTbState(opState, true);
-                const rayDir = this.unprojectOnTbSurface(
-                  this.camera,
-                  _center.x,
-                  _center.y,
-                  this.domElement,
-                  this._tbRadius
-                );
-                if (rayDir !== void 0) {
-                  this._startCursorPosition.copy(rayDir);
-                }
-                if (this.enableGrid) {
-                  this.disposeGrid();
-                }
-                this.activateGizmos(true);
-              } else {
-                const rayDir = this.unprojectOnTbSurface(
-                  this.camera,
-                  _center.x,
-                  _center.y,
-                  this.domElement,
-                  this._tbRadius
-                );
-                if (rayDir !== void 0) {
-                  this._currentCursorPosition.copy(rayDir);
-                }
-                const distance = this._startCursorPosition.distanceTo(this._currentCursorPosition);
-                const angle = this._startCursorPosition.angleTo(this._currentCursorPosition);
-                const amount = Math.max(distance / this._tbRadius, angle);
-                this.applyTransformMatrix(
-                  this.rotate(this.calculateRotationAxis(this._startCursorPosition, this._currentCursorPosition), amount)
-                );
-                if (this.enableAnimations) {
-                  this._timePrev = this._timeCurrent;
-                  this._timeCurrent = performance.now();
-                  this._anglePrev = this._angleCurrent;
-                  this._angleCurrent = amount;
-                  this._cursorPosPrev.copy(this._cursorPosCurr);
-                  this._cursorPosCurr.copy(this._currentCursorPosition);
-                  this._wPrev = this._wCurr;
-                  this._wCurr = this.calculateAngularSpeed(
-                    this._anglePrev,
-                    this._angleCurrent,
-                    this._timePrev,
-                    this._timeCurrent
-                  );
-                }
-              }
-            }
-            break;
-          case STATE.SCALE:
-            if (this.enableZoom) {
-              if (restart) {
-                this.dispatchEvent(_endEvent);
-                this.dispatchEvent(_startEvent);
-                this.updateTbState(opState, true);
-                this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);
-                this._currentCursorPosition.copy(this._startCursorPosition);
-                if (this.enableGrid) {
-                  this.disposeGrid();
-                }
-                this.activateGizmos(false);
-              } else {
-                const screenNotches = 8;
-                this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);
-                const movement = this._currentCursorPosition.y - this._startCursorPosition.y;
-                let size = 1;
-                if (movement < 0) {
-                  size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches);
-                } else if (movement > 0) {
-                  size = Math.pow(this.scaleFactor, movement * screenNotches);
-                }
-                this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));
-              }
-            }
-            break;
-          case STATE.FOV:
-            if (this.enableZoom && this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-              if (restart) {
-                this.dispatchEvent(_endEvent);
-                this.dispatchEvent(_startEvent);
-                this.updateTbState(opState, true);
-                this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);
-                this._currentCursorPosition.copy(this._startCursorPosition);
-                if (this.enableGrid) {
-                  this.disposeGrid();
-                }
-                this.activateGizmos(false);
-              } else {
-                const screenNotches = 8;
-                this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);
-                const movement = this._currentCursorPosition.y - this._startCursorPosition.y;
-                let size = 1;
-                if (movement < 0) {
-                  size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches);
-                } else if (movement > 0) {
-                  size = Math.pow(this.scaleFactor, movement * screenNotches);
-                }
-                this._v3_1.setFromMatrixPosition(this._cameraMatrixState);
-                const x = this._v3_1.distanceTo(this._gizmos.position);
-                let xNew = x / size;
-                xNew = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.clamp(xNew, this.minDistance, this.maxDistance);
-                const y = x * Math.tan(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.DEG2RAD * this._fovState * 0.5);
-                let newFov = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2);
-                newFov = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.clamp(newFov, this.minFov, this.maxFov);
-                const newDistance = y / Math.tan(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.DEG2RAD * (newFov / 2));
-                size = x / newDistance;
-                this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);
-                this.setFov(newFov);
-                this.applyTransformMatrix(this.applyScale(size, this._v3_2, false));
-                const direction = this._gizmos.position.clone().sub(this.camera.position).normalize().multiplyScalar(newDistance / x);
-                this._m4_1.makeTranslation(direction.x, direction.y, direction.z);
-              }
-            }
-            break;
-        }
-        this.dispatchEvent(_changeEvent);
-      }
-    });
-    __publicField(this, "onSinglePanEnd", () => {
-      if (this._state == STATE.ROTATE) {
-        if (!this.enableRotate) {
-          return;
-        }
-        if (this.enableAnimations) {
-          const deltaTime = performance.now() - this._timeCurrent;
-          if (deltaTime < 120) {
-            const w = Math.abs((this._wPrev + this._wCurr) / 2);
-            const self = this;
-            this._animationId = window.requestAnimationFrame(function(t) {
-              self.updateTbState(STATE.ANIMATION_ROTATE, true);
-              const rotationAxis = self.calculateRotationAxis(self._cursorPosPrev, self._cursorPosCurr);
-              self.onRotationAnim(t, rotationAxis, Math.min(w, self.wMax));
-            });
-          } else {
-            this.updateTbState(STATE.IDLE, false);
-            this.activateGizmos(false);
-            this.dispatchEvent(_changeEvent);
-          }
-        } else {
-          this.updateTbState(STATE.IDLE, false);
-          this.activateGizmos(false);
-          this.dispatchEvent(_changeEvent);
-        }
-      } else if (this._state == STATE.PAN || this._state == STATE.IDLE) {
-        this.updateTbState(STATE.IDLE, false);
-        if (this.enableGrid) {
-          this.disposeGrid();
-        }
-        this.activateGizmos(false);
-        this.dispatchEvent(_changeEvent);
-      }
-      this.dispatchEvent(_endEvent);
-    });
-    __publicField(this, "onDoubleTap", (event) => {
-      if (this.enabled && this.enablePan && this.scene && this.camera && this.domElement) {
-        this.dispatchEvent(_startEvent);
-        this.setCenter(event.clientX, event.clientY);
-        const hitP = this.unprojectOnObj(this.getCursorNDC(_center.x, _center.y, this.domElement), this.camera);
-        if (hitP && this.enableAnimations) {
-          const self = this;
-          if (this._animationId != -1) {
-            window.cancelAnimationFrame(this._animationId);
-          }
-          this._timeStart = -1;
-          this._animationId = window.requestAnimationFrame(function(t) {
-            self.updateTbState(STATE.ANIMATION_FOCUS, true);
-            self.onFocusAnim(t, hitP, self._cameraMatrixState, self._gizmoMatrixState);
-          });
-        } else if (hitP && !this.enableAnimations) {
-          this.updateTbState(STATE.FOCUS, true);
-          this.focus(hitP, this.scaleFactor);
-          this.updateTbState(STATE.IDLE, false);
-          this.dispatchEvent(_changeEvent);
-        }
-      }
-      this.dispatchEvent(_endEvent);
-    });
-    __publicField(this, "onDoublePanStart", () => {
-      if (this.enabled && this.enablePan && this.camera && this.domElement) {
-        this.dispatchEvent(_startEvent);
-        this.updateTbState(STATE.PAN, true);
-        this.setCenter(
-          (this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2,
-          (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2
-        );
-        const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true);
-        if (rayDir !== void 0) {
-          this._startCursorPosition.copy(rayDir);
-        }
-        this._currentCursorPosition.copy(this._startCursorPosition);
-        this.activateGizmos(false);
-      }
-    });
-    __publicField(this, "onDoublePanMove", () => {
-      if (this.enabled && this.enablePan && this.camera && this.domElement) {
-        this.setCenter(
-          (this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2,
-          (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2
-        );
-        if (this._state != STATE.PAN) {
-          this.updateTbState(STATE.PAN, true);
-          this._startCursorPosition.copy(this._currentCursorPosition);
-        }
-        const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true);
-        if (rayDir !== void 0)
-          this._currentCursorPosition.copy(rayDir);
-        this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition, true));
-        this.dispatchEvent(_changeEvent);
-      }
-    });
-    __publicField(this, "onDoublePanEnd", () => {
-      this.updateTbState(STATE.IDLE, false);
-      this.dispatchEvent(_endEvent);
-    });
-    __publicField(this, "onRotateStart", () => {
-      var _a;
-      if (this.enabled && this.enableRotate) {
-        this.dispatchEvent(_startEvent);
-        this.updateTbState(STATE.ZROTATE, true);
-        this._startFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]);
-        this._currentFingerRotation = this._startFingerRotation;
-        (_a = this.camera) == null ? void 0 : _a.getWorldDirection(this._rotationAxis);
-        if (!this.enablePan && !this.enableZoom) {
-          this.activateGizmos(true);
-        }
-      }
-    });
-    __publicField(this, "onRotateMove", () => {
-      var _a;
-      if (this.enabled && this.enableRotate && this.camera && this.domElement) {
-        this.setCenter(
-          (this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2,
-          (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2
-        );
-        let rotationPoint;
-        if (this._state != STATE.ZROTATE) {
-          this.updateTbState(STATE.ZROTATE, true);
-          this._startFingerRotation = this._currentFingerRotation;
-        }
-        this._currentFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]);
-        if (!this.enablePan) {
-          rotationPoint = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3().setFromMatrixPosition(this._gizmoMatrixState);
-        } else if (this.camera) {
-          this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);
-          rotationPoint = (_a = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._v3_2);
-        }
-        const amount = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.DEG2RAD * (this._startFingerRotation - this._currentFingerRotation);
-        if (rotationPoint !== void 0) {
-          this.applyTransformMatrix(this.zRotate(rotationPoint, amount));
-        }
-        this.dispatchEvent(_changeEvent);
-      }
-    });
-    __publicField(this, "onRotateEnd", () => {
-      this.updateTbState(STATE.IDLE, false);
-      this.activateGizmos(false);
-      this.dispatchEvent(_endEvent);
-    });
-    __publicField(this, "onPinchStart", () => {
-      if (this.enabled && this.enableZoom) {
-        this.dispatchEvent(_startEvent);
-        this.updateTbState(STATE.SCALE, true);
-        this._startFingerDistance = this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]);
-        this._currentFingerDistance = this._startFingerDistance;
-        this.activateGizmos(false);
-      }
-    });
-    __publicField(this, "onPinchMove", () => {
-      var _a, _b;
-      if (this.enabled && this.enableZoom && this.domElement) {
-        this.setCenter(
-          (this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2,
-          (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2
-        );
-        const minDistance = 12;
-        if (this._state != STATE.SCALE) {
-          this._startFingerDistance = this._currentFingerDistance;
-          this.updateTbState(STATE.SCALE, true);
-        }
-        this._currentFingerDistance = Math.max(
-          this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]),
-          minDistance * this._devPxRatio
-        );
-        const amount = this._currentFingerDistance / this._startFingerDistance;
-        let scalePoint;
-        if (!this.enablePan) {
-          scalePoint = this._gizmos.position;
-        } else {
-          if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera) {
-            scalePoint = (_a = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position);
-          } else if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-            scalePoint = (_b = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) == null ? void 0 : _b.applyQuaternion(this.camera.quaternion).add(this._gizmos.position);
-          }
-        }
-        if (scalePoint !== void 0) {
-          this.applyTransformMatrix(this.applyScale(amount, scalePoint));
-        }
-        this.dispatchEvent(_changeEvent);
-      }
-    });
-    __publicField(this, "onPinchEnd", () => {
-      this.updateTbState(STATE.IDLE, false);
-      this.dispatchEvent(_endEvent);
-    });
-    __publicField(this, "onTriplePanStart", () => {
-      if (this.enabled && this.enableZoom && this.domElement) {
-        this.dispatchEvent(_startEvent);
-        this.updateTbState(STATE.SCALE, true);
-        let clientX = 0;
-        let clientY = 0;
-        const nFingers = this._touchCurrent.length;
-        for (let i = 0; i < nFingers; i++) {
-          clientX += this._touchCurrent[i].clientX;
-          clientY += this._touchCurrent[i].clientY;
-        }
-        this.setCenter(clientX / nFingers, clientY / nFingers);
-        this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);
-        this._currentCursorPosition.copy(this._startCursorPosition);
-      }
-    });
-    __publicField(this, "onTriplePanMove", () => {
-      if (this.enabled && this.enableZoom && this.camera && this.domElement) {
-        let clientX = 0;
-        let clientY = 0;
-        const nFingers = this._touchCurrent.length;
-        for (let i = 0; i < nFingers; i++) {
-          clientX += this._touchCurrent[i].clientX;
-          clientY += this._touchCurrent[i].clientY;
-        }
-        this.setCenter(clientX / nFingers, clientY / nFingers);
-        const screenNotches = 8;
-        this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);
-        const movement = this._currentCursorPosition.y - this._startCursorPosition.y;
-        let size = 1;
-        if (movement < 0) {
-          size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches);
-        } else if (movement > 0) {
-          size = Math.pow(this.scaleFactor, movement * screenNotches);
-        }
-        this._v3_1.setFromMatrixPosition(this._cameraMatrixState);
-        const x = this._v3_1.distanceTo(this._gizmos.position);
-        let xNew = x / size;
-        xNew = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.clamp(xNew, this.minDistance, this.maxDistance);
-        const y = x * Math.tan(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.DEG2RAD * this._fovState * 0.5);
-        let newFov = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2);
-        newFov = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.clamp(newFov, this.minFov, this.maxFov);
-        const newDistance = y / Math.tan(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.DEG2RAD * (newFov / 2));
-        size = x / newDistance;
-        this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);
-        this.setFov(newFov);
-        this.applyTransformMatrix(this.applyScale(size, this._v3_2, false));
-        const direction = this._gizmos.position.clone().sub(this.camera.position).normalize().multiplyScalar(newDistance / x);
-        this._m4_1.makeTranslation(direction.x, direction.y, direction.z);
-        this.dispatchEvent(_changeEvent);
-      }
-    });
-    __publicField(this, "onTriplePanEnd", () => {
-      this.updateTbState(STATE.IDLE, false);
-      this.dispatchEvent(_endEvent);
-    });
-    /**
-     * Set _center's x/y coordinates
-     * @param {Number} clientX
-     * @param {Number} clientY
-     */
-    __publicField(this, "setCenter", (clientX, clientY) => {
-      _center.x = clientX;
-      _center.y = clientY;
-    });
-    /**
-     * Set default mouse actions
-     */
-    __publicField(this, "initializeMouseActions", () => {
-      this.setMouseAction("PAN", 0, "CTRL");
-      this.setMouseAction("PAN", 2);
-      this.setMouseAction("ROTATE", 0);
-      this.setMouseAction("ZOOM", "WHEEL");
-      this.setMouseAction("ZOOM", 1);
-      this.setMouseAction("FOV", "WHEEL", "SHIFT");
-      this.setMouseAction("FOV", 1, "SHIFT");
-    });
-    /**
-     * Set a new mouse action by specifying the operation to be performed and a mouse/key combination. In case of conflict, replaces the existing one
-     * @param {String} operation The operation to be performed ('PAN', 'ROTATE', 'ZOOM', 'FOV)
-     * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches
-     * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed
-     * @returns {Boolean} True if the mouse action has been successfully added, false otherwise
-     */
-    __publicField(this, "setMouseAction", (operation, mouse, key = null) => {
-      const operationInput = ["PAN", "ROTATE", "ZOOM", "FOV"];
-      const mouseInput = [0, 1, 2, "WHEEL"];
-      const keyInput = ["CTRL", "SHIFT", null];
-      let state;
-      if (!operationInput.includes(operation) || !mouseInput.includes(mouse) || !keyInput.includes(key)) {
-        return false;
-      }
-      if (mouse == "WHEEL") {
-        if (operation != "ZOOM" && operation != "FOV") {
-          return false;
-        }
-      }
-      switch (operation) {
-        case "PAN":
-          state = STATE.PAN;
-          break;
-        case "ROTATE":
-          state = STATE.ROTATE;
-          break;
-        case "ZOOM":
-          state = STATE.SCALE;
-          break;
-        case "FOV":
-          state = STATE.FOV;
-          break;
-      }
-      const action = {
-        operation,
-        mouse,
-        key,
-        state
-      };
-      for (let i = 0; i < this.mouseActions.length; i++) {
-        if (this.mouseActions[i].mouse == action.mouse && this.mouseActions[i].key == action.key) {
-          this.mouseActions.splice(i, 1, action);
-          return true;
-        }
-      }
-      this.mouseActions.push(action);
-      return true;
-    });
-    /**
-     * Return the operation associated to a mouse/keyboard combination
-     * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches
-     * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed
-     * @returns The operation if it has been found, null otherwise
-     */
-    __publicField(this, "getOpFromAction", (mouse, key) => {
-      let action;
-      for (let i = 0; i < this.mouseActions.length; i++) {
-        action = this.mouseActions[i];
-        if (action.mouse == mouse && action.key == key) {
-          return action.operation;
-        }
-      }
-      if (key) {
-        for (let i = 0; i < this.mouseActions.length; i++) {
-          action = this.mouseActions[i];
-          if (action.mouse == mouse && action.key == null) {
-            return action.operation;
-          }
-        }
-      }
-      return null;
-    });
-    /**
-     * Get the operation associated to mouse and key combination and returns the corresponding FSA state
-     * @param {Number} mouse Mouse button
-     * @param {String} key Keyboard modifier
-     * @returns The FSA state obtained from the operation associated to mouse/keyboard combination
-     */
-    __publicField(this, "getOpStateFromAction", (mouse, key) => {
-      let action;
-      for (let i = 0; i < this.mouseActions.length; i++) {
-        action = this.mouseActions[i];
-        if (action.mouse == mouse && action.key == key) {
-          return action.state;
-        }
-      }
-      if (key) {
-        for (let i = 0; i < this.mouseActions.length; i++) {
-          action = this.mouseActions[i];
-          if (action.mouse == mouse && action.key == null) {
-            return action.state;
-          }
-        }
-      }
-      return null;
-    });
-    /**
-     * Calculate the angle between two pointers
-     * @param {PointerEvent} p1
-     * @param {PointerEvent} p2
-     * @returns {Number} The angle between two pointers in degrees
-     */
-    __publicField(this, "getAngle", (p1, p2) => {
-      return Math.atan2(p2.clientY - p1.clientY, p2.clientX - p1.clientX) * 180 / Math.PI;
-    });
-    /**
-     * Update a PointerEvent inside current pointerevents array
-     * @param {PointerEvent} event
-     */
-    __publicField(this, "updateTouchEvent", (event) => {
-      for (let i = 0; i < this._touchCurrent.length; i++) {
-        if (this._touchCurrent[i].pointerId == event.pointerId) {
-          this._touchCurrent.splice(i, 1, event);
-          break;
-        }
-      }
-    });
-    /**
-     * Calculate the angular speed
-     * @param {Number} p0 Position at t0
-     * @param {Number} p1 Position at t1
-     * @param {Number} t0 Initial time in milliseconds
-     * @param {Number} t1 Ending time in milliseconds
-     */
-    __publicField(this, "calculateAngularSpeed", (p0, p1, t0, t1) => {
-      const s = p1 - p0;
-      const t = (t1 - t0) / 1e3;
-      if (t == 0) {
-        return 0;
-      }
-      return s / t;
-    });
-    /**
-     * Calculate the distance between two pointers
-     * @param {PointerEvent} p0 The first pointer
-     * @param {PointerEvent} p1 The second pointer
-     * @returns {number} The distance between the two pointers
-     */
-    __publicField(this, "calculatePointersDistance", (p0, p1) => {
-      return Math.sqrt(Math.pow(p1.clientX - p0.clientX, 2) + Math.pow(p1.clientY - p0.clientY, 2));
-    });
-    /**
-     * Calculate the rotation axis as the vector perpendicular between two vectors
-     * @param {Vector3} vec1 The first vector
-     * @param {Vector3} vec2 The second vector
-     * @returns {Vector3} The normalized rotation axis
-     */
-    __publicField(this, "calculateRotationAxis", (vec1, vec2) => {
-      this._rotationMatrix.extractRotation(this._cameraMatrixState);
-      this._quat.setFromRotationMatrix(this._rotationMatrix);
-      this._rotationAxis.crossVectors(vec1, vec2).applyQuaternion(this._quat);
-      return this._rotationAxis.normalize().clone();
-    });
-    /**
-     * Calculate the trackball radius so that gizmo's diamater will be 2/3 of the minimum side of the camera frustum
-     * @param {Camera} camera
-     * @returns {Number} The trackball radius
-     */
-    __publicField(this, "calculateTbRadius", (camera) => {
-      const factor = 0.67;
-      const distance = camera.position.distanceTo(this._gizmos.position);
-      if (camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-        const halfFovV = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.DEG2RAD * camera.fov * 0.5;
-        const halfFovH = Math.atan(camera.aspect * Math.tan(halfFovV));
-        return Math.tan(Math.min(halfFovV, halfFovH)) * distance * factor;
-      } else if (camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera) {
-        return Math.min(camera.top, camera.right) * factor;
-      }
-    });
-    /**
-     * Focus operation consist of positioning the point of interest in front of the camera and a slightly zoom in
-     * @param {Vector3} point The point of interest
-     * @param {Number} size Scale factor
-     * @param {Number} amount Amount of operation to be completed (used for focus animations, default is complete full operation)
-     */
-    __publicField(this, "focus", (point, size, amount = 1) => {
-      if (this.camera) {
-        const focusPoint = point.clone();
-        focusPoint.sub(this._gizmos.position).multiplyScalar(amount);
-        this._translationMatrix.makeTranslation(focusPoint.x, focusPoint.y, focusPoint.z);
-        const gizmoStateTemp = this._gizmoMatrixState.clone();
-        this._gizmoMatrixState.premultiply(this._translationMatrix);
-        this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
-        const cameraStateTemp = this._cameraMatrixState.clone();
-        this._cameraMatrixState.premultiply(this._translationMatrix);
-        this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);
-        if (this.enableZoom) {
-          this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));
-        }
-        this._gizmoMatrixState.copy(gizmoStateTemp);
-        this._cameraMatrixState.copy(cameraStateTemp);
-      }
-    });
-    /**
-     * Draw a grid and add it to the scene
-     */
-    __publicField(this, "drawGrid", () => {
-      if (this.scene) {
-        const color = 8947848;
-        const multiplier = 3;
-        let size, divisions, maxLength, tick;
-        if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera) {
-          const width = this.camera.right - this.camera.left;
-          const height = this.camera.bottom - this.camera.top;
-          maxLength = Math.max(width, height);
-          tick = maxLength / 20;
-          size = maxLength / this.camera.zoom * multiplier;
-          divisions = size / tick * this.camera.zoom;
-        } else if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-          const distance = this.camera.position.distanceTo(this._gizmos.position);
-          const halfFovV = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.DEG2RAD * this.camera.fov * 0.5;
-          const halfFovH = Math.atan(this.camera.aspect * Math.tan(halfFovV));
-          maxLength = Math.tan(Math.max(halfFovV, halfFovH)) * distance * 2;
-          tick = maxLength / 20;
-          size = maxLength * multiplier;
-          divisions = size / tick;
-        }
-        if (this._grid == null && this.camera) {
-          this._grid = new three__WEBPACK_IMPORTED_MODULE_0__.GridHelper(size, divisions, color, color);
-          this._grid.position.copy(this._gizmos.position);
-          this._gridPosition.copy(this._grid.position);
-          this._grid.quaternion.copy(this.camera.quaternion);
-          this._grid.rotateX(Math.PI * 0.5);
-          this.scene.add(this._grid);
-        }
-      }
-    });
-    __publicField(this, "connect", (domElement) => {
-      if (domElement === document) {
-        console.error(
-          'THREE.ArcballControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.'
-        );
-      }
-      this.domElement = domElement;
-      this.domElement.style.touchAction = "none";
-      this.domElement.addEventListener("contextmenu", this.onContextMenu);
-      this.domElement.addEventListener("pointerdown", this.onPointerDown);
-      this.domElement.addEventListener("pointercancel", this.onPointerCancel);
-      this.domElement.addEventListener("wheel", this.onWheel);
-    });
-    /**
-     * Remove all listeners, stop animations and clean scene
-     */
-    __publicField(this, "dispose", () => {
-      var _a, _b, _c, _d, _e;
-      if (this._animationId != -1) {
-        window.cancelAnimationFrame(this._animationId);
-      }
-      (_a = this.domElement) == null ? void 0 : _a.removeEventListener("pointerdown", this.onPointerDown);
-      (_b = this.domElement) == null ? void 0 : _b.removeEventListener("pointercancel", this.onPointerCancel);
-      (_c = this.domElement) == null ? void 0 : _c.removeEventListener("wheel", this.onWheel);
-      (_d = this.domElement) == null ? void 0 : _d.removeEventListener("contextmenu", this.onContextMenu);
-      window.removeEventListener("pointermove", this.onPointerMove);
-      window.removeEventListener("pointerup", this.onPointerUp);
-      window.removeEventListener("resize", this.onWindowResize);
-      (_e = this.scene) == null ? void 0 : _e.remove(this._gizmos);
-      this.disposeGrid();
-    });
-    /**
-     * remove the grid from the scene
-     */
-    __publicField(this, "disposeGrid", () => {
-      if (this._grid && this.scene) {
-        this.scene.remove(this._grid);
-        this._grid = null;
-      }
-    });
-    /**
-     * Compute the easing out cubic function for ease out effect in animation
-     * @param {Number} t The absolute progress of the animation in the bound of 0 (beginning of the) and 1 (ending of animation)
-     * @returns {Number} Result of easing out cubic at time t
-     */
-    __publicField(this, "easeOutCubic", (t) => {
-      return 1 - Math.pow(1 - t, 3);
-    });
-    /**
-     * Make rotation gizmos more or less visible
-     * @param {Boolean} isActive If true, make gizmos more visible
-     */
-    __publicField(this, "activateGizmos", (isActive) => {
-      for (const gizmo of this._gizmos.children) {
-        ;
-        gizmo.material.setValues({ opacity: isActive ? 1 : 0.6 });
-      }
-    });
-    /**
-     * Calculate the cursor position in NDC
-     * @param {number} x Cursor horizontal coordinate within the canvas
-     * @param {number} y Cursor vertical coordinate within the canvas
-     * @param {HTMLElement} canvas The canvas where the renderer draws its output
-     * @returns {Vector2} Cursor normalized position inside the canvas
-     */
-    __publicField(this, "getCursorNDC", (cursorX, cursorY, canvas) => {
-      const canvasRect = canvas.getBoundingClientRect();
-      this._v2_1.setX((cursorX - canvasRect.left) / canvasRect.width * 2 - 1);
-      this._v2_1.setY((canvasRect.bottom - cursorY) / canvasRect.height * 2 - 1);
-      return this._v2_1.clone();
-    });
-    /**
-     * Calculate the cursor position inside the canvas x/y coordinates with the origin being in the center of the canvas
-     * @param {Number} x Cursor horizontal coordinate within the canvas
-     * @param {Number} y Cursor vertical coordinate within the canvas
-     * @param {HTMLElement} canvas The canvas where the renderer draws its output
-     * @returns {Vector2} Cursor position inside the canvas
-     */
-    __publicField(this, "getCursorPosition", (cursorX, cursorY, canvas) => {
-      this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas));
-      if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera) {
-        this._v2_1.x *= (this.camera.right - this.camera.left) * 0.5;
-        this._v2_1.y *= (this.camera.top - this.camera.bottom) * 0.5;
-      }
-      return this._v2_1.clone();
-    });
-    /**
-     * Set the camera to be controlled
-     * @param {Camera} camera The virtual camera to be controlled
-     */
-    __publicField(this, "setCamera", (camera) => {
-      if (camera) {
-        camera.lookAt(this.target);
-        camera.updateMatrix();
-        if (camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-          this._fov0 = camera.fov;
-          this._fovState = camera.fov;
-        }
-        this._cameraMatrixState0.copy(camera.matrix);
-        this._cameraMatrixState.copy(this._cameraMatrixState0);
-        this._cameraProjectionState.copy(camera.projectionMatrix);
-        this._zoom0 = camera.zoom;
-        this._zoomState = this._zoom0;
-        this._initialNear = camera.near;
-        this._nearPos0 = camera.position.distanceTo(this.target) - camera.near;
-        this._nearPos = this._initialNear;
-        this._initialFar = camera.far;
-        this._farPos0 = camera.position.distanceTo(this.target) - camera.far;
-        this._farPos = this._initialFar;
-        this._up0.copy(camera.up);
-        this._upState.copy(camera.up);
-        this.camera = camera;
-        this.camera.updateProjectionMatrix();
-        const tbRadius = this.calculateTbRadius(camera);
-        if (tbRadius !== void 0) {
-          this._tbRadius = tbRadius;
-        }
-        this.makeGizmos(this.target, this._tbRadius);
-      }
-    });
-    /**
-     * Creates the rotation gizmos matching trackball center and radius
-     * @param {Vector3} tbCenter The trackball center
-     * @param {number} tbRadius The trackball radius
-     */
-    __publicField(this, "makeGizmos", (tbCenter, tbRadius) => {
-      const curve = new three__WEBPACK_IMPORTED_MODULE_0__.EllipseCurve(0, 0, tbRadius, tbRadius);
-      const points = curve.getPoints(this._curvePts);
-      const curveGeometry = new three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry().setFromPoints(points);
-      const curveMaterialX = new three__WEBPACK_IMPORTED_MODULE_0__.LineBasicMaterial({ color: 16744576, fog: false, transparent: true, opacity: 0.6 });
-      const curveMaterialY = new three__WEBPACK_IMPORTED_MODULE_0__.LineBasicMaterial({ color: 8454016, fog: false, transparent: true, opacity: 0.6 });
-      const curveMaterialZ = new three__WEBPACK_IMPORTED_MODULE_0__.LineBasicMaterial({ color: 8421631, fog: false, transparent: true, opacity: 0.6 });
-      const gizmoX = new three__WEBPACK_IMPORTED_MODULE_0__.Line(curveGeometry, curveMaterialX);
-      const gizmoY = new three__WEBPACK_IMPORTED_MODULE_0__.Line(curveGeometry, curveMaterialY);
-      const gizmoZ = new three__WEBPACK_IMPORTED_MODULE_0__.Line(curveGeometry, curveMaterialZ);
-      const rotation = Math.PI * 0.5;
-      gizmoX.rotation.x = rotation;
-      gizmoY.rotation.y = rotation;
-      this._gizmoMatrixState0.identity().setPosition(tbCenter);
-      this._gizmoMatrixState.copy(this._gizmoMatrixState0);
-      if (this.camera && this.camera.zoom != 1) {
-        const size = 1 / this.camera.zoom;
-        this._scaleMatrix.makeScale(size, size, size);
-        this._translationMatrix.makeTranslation(-tbCenter.x, -tbCenter.y, -tbCenter.z);
-        this._gizmoMatrixState.premultiply(this._translationMatrix).premultiply(this._scaleMatrix);
-        this._translationMatrix.makeTranslation(tbCenter.x, tbCenter.y, tbCenter.z);
-        this._gizmoMatrixState.premultiply(this._translationMatrix);
-      }
-      this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
-      this._gizmos.clear();
-      this._gizmos.add(gizmoX);
-      this._gizmos.add(gizmoY);
-      this._gizmos.add(gizmoZ);
-    });
-    /**
-     * Perform animation for focus operation
-     * @param {Number} time Instant in which this function is called as performance.now()
-     * @param {Vector3} point Point of interest for focus operation
-     * @param {Matrix4} cameraMatrix Camera matrix
-     * @param {Matrix4} gizmoMatrix Gizmos matrix
-     */
-    __publicField(this, "onFocusAnim", (time, point, cameraMatrix, gizmoMatrix) => {
-      if (this._timeStart == -1) {
-        this._timeStart = time;
-      }
-      if (this._state == STATE.ANIMATION_FOCUS) {
-        const deltaTime = time - this._timeStart;
-        const animTime = deltaTime / this.focusAnimationTime;
-        this._gizmoMatrixState.copy(gizmoMatrix);
-        if (animTime >= 1) {
-          this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
-          this.focus(point, this.scaleFactor);
-          this._timeStart = -1;
-          this.updateTbState(STATE.IDLE, false);
-          this.activateGizmos(false);
-          this.dispatchEvent(_changeEvent);
-        } else {
-          const amount = this.easeOutCubic(animTime);
-          const size = 1 - amount + this.scaleFactor * amount;
-          this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
-          this.focus(point, size, amount);
-          this.dispatchEvent(_changeEvent);
-          const self = this;
-          this._animationId = window.requestAnimationFrame(function(t) {
-            self.onFocusAnim(t, point, cameraMatrix, gizmoMatrix.clone());
-          });
-        }
-      } else {
-        this._animationId = -1;
-        this._timeStart = -1;
-      }
-    });
-    /**
-     * Perform animation for rotation operation
-     * @param {Number} time Instant in which this function is called as performance.now()
-     * @param {Vector3} rotationAxis Rotation axis
-     * @param {number} w0 Initial angular velocity
-     */
-    __publicField(this, "onRotationAnim", (time, rotationAxis, w0) => {
-      if (this._timeStart == -1) {
-        this._anglePrev = 0;
-        this._angleCurrent = 0;
-        this._timeStart = time;
-      }
-      if (this._state == STATE.ANIMATION_ROTATE) {
-        const deltaTime = (time - this._timeStart) / 1e3;
-        const w = w0 + -this.dampingFactor * deltaTime;
-        if (w > 0) {
-          this._angleCurrent = 0.5 * -this.dampingFactor * Math.pow(deltaTime, 2) + w0 * deltaTime + 0;
-          this.applyTransformMatrix(this.rotate(rotationAxis, this._angleCurrent));
-          this.dispatchEvent(_changeEvent);
-          const self = this;
-          this._animationId = window.requestAnimationFrame(function(t) {
-            self.onRotationAnim(t, rotationAxis, w0);
-          });
-        } else {
-          this._animationId = -1;
-          this._timeStart = -1;
-          this.updateTbState(STATE.IDLE, false);
-          this.activateGizmos(false);
-          this.dispatchEvent(_changeEvent);
-        }
-      } else {
-        this._animationId = -1;
-        this._timeStart = -1;
-        if (this._state != STATE.ROTATE) {
-          this.activateGizmos(false);
-          this.dispatchEvent(_changeEvent);
-        }
-      }
-    });
-    /**
-     * Perform pan operation moving camera between two points
-     * @param {Vector3} p0 Initial point
-     * @param {Vector3} p1 Ending point
-     * @param {Boolean} adjust If movement should be adjusted considering camera distance (Perspective only)
-     */
-    __publicField(this, "pan", (p0, p1, adjust = false) => {
-      if (this.camera) {
-        const movement = p0.clone().sub(p1);
-        if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera) {
-          movement.multiplyScalar(1 / this.camera.zoom);
-        }
-        if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera && adjust) {
-          this._v3_1.setFromMatrixPosition(this._cameraMatrixState0);
-          this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0);
-          const distanceFactor = this._v3_1.distanceTo(this._v3_2) / this.camera.position.distanceTo(this._gizmos.position);
-          movement.multiplyScalar(1 / distanceFactor);
-        }
-        this._v3_1.set(movement.x, movement.y, 0).applyQuaternion(this.camera.quaternion);
-        this._m4_1.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z);
-        this.setTransformationMatrices(this._m4_1, this._m4_1);
-      }
-      return _transformation;
-    });
-    /**
-     * Reset trackball
-     */
-    __publicField(this, "reset", () => {
-      if (this.camera) {
-        this.camera.zoom = this._zoom0;
-        if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-          this.camera.fov = this._fov0;
-        }
-        this.camera.near = this._nearPos;
-        this.camera.far = this._farPos;
-        this._cameraMatrixState.copy(this._cameraMatrixState0);
-        this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);
-        this.camera.up.copy(this._up0);
-        this.camera.updateMatrix();
-        this.camera.updateProjectionMatrix();
-        this._gizmoMatrixState.copy(this._gizmoMatrixState0);
-        this._gizmoMatrixState0.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
-        this._gizmos.updateMatrix();
-        const tbRadius = this.calculateTbRadius(this.camera);
-        if (tbRadius !== void 0) {
-          this._tbRadius = tbRadius;
-        }
-        this.makeGizmos(this._gizmos.position, this._tbRadius);
-        this.camera.lookAt(this._gizmos.position);
-        this.updateTbState(STATE.IDLE, false);
-        this.dispatchEvent(_changeEvent);
-      }
-    });
-    /**
-     * Rotate the camera around an axis passing by trackball's center
-     * @param {Vector3} axis Rotation axis
-     * @param {number} angle Angle in radians
-     * @returns {Object} Object with 'camera' field containing transformation matrix resulting from the operation to be applied to the camera
-     */
-    __publicField(this, "rotate", (axis, angle) => {
-      const point = this._gizmos.position;
-      this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z);
-      this._rotationMatrix.makeRotationAxis(axis, -angle);
-      this._m4_1.makeTranslation(point.x, point.y, point.z);
-      this._m4_1.multiply(this._rotationMatrix);
-      this._m4_1.multiply(this._translationMatrix);
-      this.setTransformationMatrices(this._m4_1);
-      return _transformation;
-    });
-    __publicField(this, "copyState", () => {
-      if (this.camera) {
-        const state = JSON.stringify(
-          this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera ? {
-            arcballState: {
-              cameraFar: this.camera.far,
-              cameraMatrix: this.camera.matrix,
-              cameraNear: this.camera.near,
-              cameraUp: this.camera.up,
-              cameraZoom: this.camera.zoom,
-              gizmoMatrix: this._gizmos.matrix
-            }
-          } : {
-            arcballState: {
-              cameraFar: this.camera.far,
-              cameraFov: this.camera.fov,
-              cameraMatrix: this.camera.matrix,
-              cameraNear: this.camera.near,
-              cameraUp: this.camera.up,
-              cameraZoom: this.camera.zoom,
-              gizmoMatrix: this._gizmos.matrix
-            }
-          }
-        );
-        navigator.clipboard.writeText(state);
-      }
-    });
-    __publicField(this, "pasteState", () => {
-      const self = this;
-      navigator.clipboard.readText().then(function resolved(value) {
-        self.setStateFromJSON(value);
-      });
-    });
-    /**
-     * Save the current state of the control. This can later be recovered with .reset
-     */
-    __publicField(this, "saveState", () => {
-      if (!this.camera)
-        return;
-      this._cameraMatrixState0.copy(this.camera.matrix);
-      this._gizmoMatrixState0.copy(this._gizmos.matrix);
-      this._nearPos = this.camera.near;
-      this._farPos = this.camera.far;
-      this._zoom0 = this.camera.zoom;
-      this._up0.copy(this.camera.up);
-      if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-        this._fov0 = this.camera.fov;
-      }
-    });
-    /**
-     * Perform uniform scale operation around a given point
-     * @param {Number} size Scale factor
-     * @param {Vector3} point Point around which scale
-     * @param {Boolean} scaleGizmos If gizmos should be scaled (Perspective only)
-     * @returns {Object} Object with 'camera' and 'gizmo' fields containing transformation matrices resulting from the operation to be applied to the camera and gizmos
-     */
-    __publicField(this, "applyScale", (size, point, scaleGizmos = true) => {
-      if (!this.camera)
-        return;
-      const scalePoint = point.clone();
-      let sizeInverse = 1 / size;
-      if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera) {
-        this.camera.zoom = this._zoomState;
-        this.camera.zoom *= size;
-        if (this.camera.zoom > this.maxZoom) {
-          this.camera.zoom = this.maxZoom;
-          sizeInverse = this._zoomState / this.maxZoom;
-        } else if (this.camera.zoom < this.minZoom) {
-          this.camera.zoom = this.minZoom;
-          sizeInverse = this._zoomState / this.minZoom;
-        }
-        this.camera.updateProjectionMatrix();
-        this._v3_1.setFromMatrixPosition(this._gizmoMatrixState);
-        this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse);
-        this._translationMatrix.makeTranslation(-this._v3_1.x, -this._v3_1.y, -this._v3_1.z);
-        this._m4_2.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z).multiply(this._scaleMatrix);
-        this._m4_2.multiply(this._translationMatrix);
-        scalePoint.sub(this._v3_1);
-        const amount = scalePoint.clone().multiplyScalar(sizeInverse);
-        scalePoint.sub(amount);
-        this._m4_1.makeTranslation(scalePoint.x, scalePoint.y, scalePoint.z);
-        this._m4_2.premultiply(this._m4_1);
-        this.setTransformationMatrices(this._m4_1, this._m4_2);
-        return _transformation;
-      }
-      if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-        this._v3_1.setFromMatrixPosition(this._cameraMatrixState);
-        this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);
-        let distance = this._v3_1.distanceTo(scalePoint);
-        let amount = distance - distance * sizeInverse;
-        const newDistance = distance - amount;
-        if (newDistance < this.minDistance) {
-          sizeInverse = this.minDistance / distance;
-          amount = distance - distance * sizeInverse;
-        } else if (newDistance > this.maxDistance) {
-          sizeInverse = this.maxDistance / distance;
-          amount = distance - distance * sizeInverse;
-        }
-        let direction = scalePoint.clone().sub(this._v3_1).normalize().multiplyScalar(amount);
-        this._m4_1.makeTranslation(direction.x, direction.y, direction.z);
-        if (scaleGizmos) {
-          const pos = this._v3_2;
-          distance = pos.distanceTo(scalePoint);
-          amount = distance - distance * sizeInverse;
-          direction = scalePoint.clone().sub(this._v3_2).normalize().multiplyScalar(amount);
-          this._translationMatrix.makeTranslation(pos.x, pos.y, pos.z);
-          this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse);
-          this._m4_2.makeTranslation(direction.x, direction.y, direction.z).multiply(this._translationMatrix);
-          this._m4_2.multiply(this._scaleMatrix);
-          this._translationMatrix.makeTranslation(-pos.x, -pos.y, -pos.z);
-          this._m4_2.multiply(this._translationMatrix);
-          this.setTransformationMatrices(this._m4_1, this._m4_2);
-        } else {
-          this.setTransformationMatrices(this._m4_1);
-        }
-        return _transformation;
-      }
-    });
-    /**
-     * Set camera fov
-     * @param {Number} value fov to be setted
-     */
-    __publicField(this, "setFov", (value) => {
-      if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-        this.camera.fov = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.clamp(value, this.minFov, this.maxFov);
-        this.camera.updateProjectionMatrix();
-      }
-    });
-    /**
-     * Set the trackball's center point
-     * @param {Number} x X coordinate
-     * @param {Number} y Y coordinate
-     * @param {Number} z Z coordinate
-     */
-    __publicField(this, "setTarget", (x, y, z) => {
-      if (this.camera) {
-        this.target.set(x, y, z);
-        this._gizmos.position.set(x, y, z);
-        const tbRadius = this.calculateTbRadius(this.camera);
-        if (tbRadius !== void 0) {
-          this._tbRadius = tbRadius;
-        }
-        this.makeGizmos(this.target, this._tbRadius);
-        this.camera.lookAt(this.target);
-      }
-    });
-    /**
-     * Rotate camera around its direction axis passing by a given point by a given angle
-     * @param {Vector3} point The point where the rotation axis is passing trough
-     * @param {Number} angle Angle in radians
-     * @returns The computed transormation matix
-     */
-    __publicField(this, "zRotate", (point, angle) => {
-      this._rotationMatrix.makeRotationAxis(this._rotationAxis, angle);
-      this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z);
-      this._m4_1.makeTranslation(point.x, point.y, point.z);
-      this._m4_1.multiply(this._rotationMatrix);
-      this._m4_1.multiply(this._translationMatrix);
-      this._v3_1.setFromMatrixPosition(this._gizmoMatrixState).sub(point);
-      this._v3_2.copy(this._v3_1).applyAxisAngle(this._rotationAxis, angle);
-      this._v3_2.sub(this._v3_1);
-      this._m4_2.makeTranslation(this._v3_2.x, this._v3_2.y, this._v3_2.z);
-      this.setTransformationMatrices(this._m4_1, this._m4_2);
-      return _transformation;
-    });
-    /**
-     * Unproject the cursor on the 3D object surface
-     * @param {Vector2} cursor Cursor coordinates in NDC
-     * @param {Camera} camera Virtual camera
-     * @returns {Vector3} The point of intersection with the model, if exist, null otherwise
-     */
-    __publicField(this, "unprojectOnObj", (cursor, camera) => {
-      if (!this.scene)
-        return null;
-      const raycaster = new three__WEBPACK_IMPORTED_MODULE_0__.Raycaster();
-      raycaster.near = camera.near;
-      raycaster.far = camera.far;
-      raycaster.setFromCamera(cursor, camera);
-      const intersect = raycaster.intersectObjects(this.scene.children, true);
-      for (let i = 0; i < intersect.length; i++) {
-        if (intersect[i].object.uuid != this._gizmos.uuid && intersect[i].face) {
-          return intersect[i].point.clone();
-        }
-      }
-      return null;
-    });
-    /**
-     * Unproject the cursor on the trackball surface
-     * @param {Camera} camera The virtual camera
-     * @param {Number} cursorX Cursor horizontal coordinate on screen
-     * @param {Number} cursorY Cursor vertical coordinate on screen
-     * @param {HTMLElement} canvas The canvas where the renderer draws its output
-     * @param {number} tbRadius The trackball radius
-     * @returns {Vector3} The unprojected point on the trackball surface
-     */
-    __publicField(this, "unprojectOnTbSurface", (camera, cursorX, cursorY, canvas, tbRadius) => {
-      if (camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera) {
-        this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas));
-        this._v3_1.set(this._v2_1.x, this._v2_1.y, 0);
-        const x2 = Math.pow(this._v2_1.x, 2);
-        const y2 = Math.pow(this._v2_1.y, 2);
-        const r2 = Math.pow(this._tbRadius, 2);
-        if (x2 + y2 <= r2 * 0.5) {
-          this._v3_1.setZ(Math.sqrt(r2 - (x2 + y2)));
-        } else {
-          this._v3_1.setZ(r2 * 0.5 / Math.sqrt(x2 + y2));
-        }
-        return this._v3_1;
-      }
-      if (camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-        this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas));
-        this._v3_1.set(this._v2_1.x, this._v2_1.y, -1);
-        this._v3_1.applyMatrix4(camera.projectionMatrixInverse);
-        const rayDir = this._v3_1.clone().normalize();
-        const cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position);
-        const radius2 = Math.pow(tbRadius, 2);
-        const h = this._v3_1.z;
-        const l = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2));
-        if (l == 0) {
-          rayDir.set(this._v3_1.x, this._v3_1.y, tbRadius);
-          return rayDir;
-        }
-        const m = h / l;
-        const q = cameraGizmoDistance;
-        let a = Math.pow(m, 2) + 1;
-        let b = 2 * m * q;
-        let c = Math.pow(q, 2) - radius2;
-        let delta = Math.pow(b, 2) - 4 * a * c;
-        if (delta >= 0) {
-          this._v2_1.setX((-b - Math.sqrt(delta)) / (2 * a));
-          this._v2_1.setY(m * this._v2_1.x + q);
-          const angle = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.RAD2DEG * this._v2_1.angle();
-          if (angle >= 45) {
-            const rayLength2 = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2));
-            rayDir.multiplyScalar(rayLength2);
-            rayDir.z += cameraGizmoDistance;
-            return rayDir;
-          }
-        }
-        a = m;
-        b = q;
-        c = -radius2 * 0.5;
-        delta = Math.pow(b, 2) - 4 * a * c;
-        this._v2_1.setX((-b - Math.sqrt(delta)) / (2 * a));
-        this._v2_1.setY(m * this._v2_1.x + q);
-        const rayLength = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2));
-        rayDir.multiplyScalar(rayLength);
-        rayDir.z += cameraGizmoDistance;
-        return rayDir;
-      }
-    });
-    /**
-     * Unproject the cursor on the plane passing through the center of the trackball orthogonal to the camera
-     * @param {Camera} camera The virtual camera
-     * @param {Number} cursorX Cursor horizontal coordinate on screen
-     * @param {Number} cursorY Cursor vertical coordinate on screen
-     * @param {HTMLElement} canvas The canvas where the renderer draws its output
-     * @param {Boolean} initialDistance If initial distance between camera and gizmos should be used for calculations instead of current (Perspective only)
-     * @returns {Vector3} The unprojected point on the trackball plane
-     */
-    __publicField(this, "unprojectOnTbPlane", (camera, cursorX, cursorY, canvas, initialDistance = false) => {
-      if (camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera) {
-        this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas));
-        this._v3_1.set(this._v2_1.x, this._v2_1.y, 0);
-        return this._v3_1.clone();
-      }
-      if (camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-        this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas));
-        this._v3_1.set(this._v2_1.x, this._v2_1.y, -1);
-        this._v3_1.applyMatrix4(camera.projectionMatrixInverse);
-        const rayDir = this._v3_1.clone().normalize();
-        const h = this._v3_1.z;
-        const l = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2));
-        let cameraGizmoDistance;
-        if (initialDistance) {
-          cameraGizmoDistance = this._v3_1.setFromMatrixPosition(this._cameraMatrixState0).distanceTo(this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0));
-        } else {
-          cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position);
-        }
-        if (l == 0) {
-          rayDir.set(0, 0, 0);
-          return rayDir;
-        }
-        const m = h / l;
-        const q = cameraGizmoDistance;
-        const x = -q / m;
-        const rayLength = Math.sqrt(Math.pow(q, 2) + Math.pow(x, 2));
-        rayDir.multiplyScalar(rayLength);
-        rayDir.z = 0;
-        return rayDir;
-      }
-    });
-    /**
-     * Update camera and gizmos state
-     */
-    __publicField(this, "updateMatrixState", () => {
-      if (!this.camera)
-        return;
-      this._cameraMatrixState.copy(this.camera.matrix);
-      this._gizmoMatrixState.copy(this._gizmos.matrix);
-      if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera) {
-        this._cameraProjectionState.copy(this.camera.projectionMatrix);
-        this.camera.updateProjectionMatrix();
-        this._zoomState = this.camera.zoom;
-      }
-      if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-        this._fovState = this.camera.fov;
-      }
-    });
-    /**
-     * Update the trackball FSA
-     * @param {STATE} newState New state of the FSA
-     * @param {Boolean} updateMatrices If matriices state should be updated
-     */
-    __publicField(this, "updateTbState", (newState, updateMatrices) => {
-      this._state = newState;
-      if (updateMatrices) {
-        this.updateMatrixState();
-      }
-    });
-    __publicField(this, "update", () => {
-      const EPS = 1e-6;
-      if (!this.target.equals(this._currentTarget) && this.camera) {
-        this._gizmos.position.set(this.target.x, this.target.y, this.target.z);
-        const tbRadius = this.calculateTbRadius(this.camera);
-        if (tbRadius !== void 0) {
-          this._tbRadius = tbRadius;
-        }
-        this.makeGizmos(this.target, this._tbRadius);
-        this._currentTarget.copy(this.target);
-      }
-      if (!this.camera)
-        return;
-      if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera) {
-        if (this.camera.zoom > this.maxZoom || this.camera.zoom < this.minZoom) {
-          const newZoom = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.clamp(this.camera.zoom, this.minZoom, this.maxZoom);
-          this.applyTransformMatrix(this.applyScale(newZoom / this.camera.zoom, this._gizmos.position, true));
-        }
-      }
-      if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-        const distance = this.camera.position.distanceTo(this._gizmos.position);
-        if (distance > this.maxDistance + EPS || distance < this.minDistance - EPS) {
-          const newDistance = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.clamp(distance, this.minDistance, this.maxDistance);
-          this.applyTransformMatrix(this.applyScale(newDistance / distance, this._gizmos.position));
-          this.updateMatrixState();
-        }
-        if (this.camera.fov < this.minFov || this.camera.fov > this.maxFov) {
-          this.camera.fov = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.clamp(this.camera.fov, this.minFov, this.maxFov);
-          this.camera.updateProjectionMatrix();
-        }
-        const oldRadius = this._tbRadius;
-        const tbRadius = this.calculateTbRadius(this.camera);
-        if (tbRadius !== void 0) {
-          this._tbRadius = tbRadius;
-        }
-        if (oldRadius < this._tbRadius - EPS || oldRadius > this._tbRadius + EPS) {
-          const scale = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3;
-          const newRadius = this._tbRadius / scale;
-          const curve = new three__WEBPACK_IMPORTED_MODULE_0__.EllipseCurve(0, 0, newRadius, newRadius);
-          const points = curve.getPoints(this._curvePts);
-          const curveGeometry = new three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry().setFromPoints(points);
-          for (const gizmo in this._gizmos.children) {
-            const child = this._gizmos.children[gizmo];
-            child.geometry = curveGeometry;
-          }
-        }
-      }
-      this.camera.lookAt(this._gizmos.position);
-    });
-    __publicField(this, "setStateFromJSON", (json) => {
-      const state = JSON.parse(json);
-      if (state.arcballState && this.camera) {
-        this._cameraMatrixState.fromArray(state.arcballState.cameraMatrix.elements);
-        this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);
-        this.camera.up.copy(state.arcballState.cameraUp);
-        this.camera.near = state.arcballState.cameraNear;
-        this.camera.far = state.arcballState.cameraFar;
-        this.camera.zoom = state.arcballState.cameraZoom;
-        if (this.camera instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera) {
-          this.camera.fov = state.arcballState.cameraFov;
-        }
-        this._gizmoMatrixState.fromArray(state.arcballState.gizmoMatrix.elements);
-        this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
-        this.camera.updateMatrix();
-        this.camera.updateProjectionMatrix();
-        this._gizmos.updateMatrix();
-        const tbRadius = this.calculateTbRadius(this.camera);
-        if (tbRadius !== void 0) {
-          this._tbRadius = tbRadius;
-        }
-        const gizmoTmp = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4().copy(this._gizmoMatrixState0);
-        this.makeGizmos(this._gizmos.position, this._tbRadius);
-        this._gizmoMatrixState0.copy(gizmoTmp);
-        this.camera.lookAt(this._gizmos.position);
-        this.updateTbState(STATE.IDLE, false);
-        this.dispatchEvent(_changeEvent);
-      }
-    });
-    this.camera = null;
-    this.domElement = domElement;
-    this.scene = scene;
-    this.mouseActions = [];
-    this._mouseOp = null;
-    this._v2_1 = new three__WEBPACK_IMPORTED_MODULE_0__.Vector2();
-    this._v3_1 = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    this._v3_2 = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    this._m4_1 = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-    this._m4_2 = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-    this._quat = new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion();
-    this._translationMatrix = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-    this._rotationMatrix = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-    this._scaleMatrix = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-    this._rotationAxis = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    this._cameraMatrixState = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-    this._cameraProjectionState = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-    this._fovState = 1;
-    this._upState = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    this._zoomState = 1;
-    this._nearPos = 0;
-    this._farPos = 0;
-    this._gizmoMatrixState = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-    this._up0 = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    this._zoom0 = 1;
-    this._fov0 = 0;
-    this._initialNear = 0;
-    this._nearPos0 = 0;
-    this._initialFar = 0;
-    this._farPos0 = 0;
-    this._cameraMatrixState0 = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-    this._gizmoMatrixState0 = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-    this._button = -1;
-    this._touchStart = [];
-    this._touchCurrent = [];
-    this._input = INPUT.NONE;
-    this._switchSensibility = 32;
-    this._startFingerDistance = 0;
-    this._currentFingerDistance = 0;
-    this._startFingerRotation = 0;
-    this._currentFingerRotation = 0;
-    this._devPxRatio = 0;
-    this._downValid = true;
-    this._nclicks = 0;
-    this._downEvents = [];
-    this._clickStart = 0;
-    this._maxDownTime = 250;
-    this._maxInterval = 300;
-    this._posThreshold = 24;
-    this._movementThreshold = 24;
-    this._currentCursorPosition = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    this._startCursorPosition = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    this._grid = null;
-    this._gridPosition = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    this._gizmos = new three__WEBPACK_IMPORTED_MODULE_0__.Group();
-    this._curvePts = 128;
-    this._timeStart = -1;
-    this._animationId = -1;
-    this.focusAnimationTime = 500;
-    this._timePrev = 0;
-    this._timeCurrent = 0;
-    this._anglePrev = 0;
-    this._angleCurrent = 0;
-    this._cursorPosPrev = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    this._cursorPosCurr = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    this._wPrev = 0;
-    this._wCurr = 0;
-    this.adjustNearFar = false;
-    this.scaleFactor = 1.1;
-    this.dampingFactor = 25;
-    this.wMax = 20;
-    this.enableAnimations = true;
-    this.enableGrid = false;
-    this.cursorZoom = false;
-    this.minFov = 5;
-    this.maxFov = 90;
-    this.enabled = true;
-    this.enablePan = true;
-    this.enableRotate = true;
-    this.enableZoom = true;
-    this.minDistance = 0;
-    this.maxDistance = Infinity;
-    this.minZoom = 0;
-    this.maxZoom = Infinity;
-    this.target = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 0, 0);
-    this._currentTarget = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 0, 0);
-    this._tbRadius = 1;
-    this._state = STATE.IDLE;
-    this.setCamera(camera);
-    if (this.scene) {
-      this.scene.add(this._gizmos);
-    }
-    this._devPxRatio = window.devicePixelRatio;
-    this.initializeMouseActions();
-    if (this.domElement)
-      this.connect(this.domElement);
-    window.addEventListener("resize", this.onWindowResize);
-  }
-  /**
-   * Apply a transformation matrix, to the camera and gizmos
-   * @param {Object} transformation Object containing matrices to apply to camera and gizmos
-   */
-  applyTransformMatrix(transformation) {
-    if ((transformation == null ? void 0 : transformation.camera) && this.camera) {
-      this._m4_1.copy(this._cameraMatrixState).premultiply(transformation.camera);
-      this._m4_1.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);
-      this.camera.updateMatrix();
-      if (this._state == STATE.ROTATE || this._state == STATE.ZROTATE || this._state == STATE.ANIMATION_ROTATE) {
-        this.camera.up.copy(this._upState).applyQuaternion(this.camera.quaternion);
-      }
-    }
-    if (transformation == null ? void 0 : transformation.gizmos) {
-      this._m4_1.copy(this._gizmoMatrixState).premultiply(transformation.gizmos);
-      this._m4_1.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);
-      this._gizmos.updateMatrix();
-    }
-    if ((this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS) && this.camera) {
-      const tbRadius = this.calculateTbRadius(this.camera);
-      if (tbRadius !== void 0) {
-        this._tbRadius = tbRadius;
-      }
-      if (this.adjustNearFar) {
-        const cameraDistance = this.camera.position.distanceTo(this._gizmos.position);
-        const bb = new three__WEBPACK_IMPORTED_MODULE_0__.Box3();
-        bb.setFromObject(this._gizmos);
-        const sphere = new three__WEBPACK_IMPORTED_MODULE_0__.Sphere();
-        bb.getBoundingSphere(sphere);
-        const adjustedNearPosition = Math.max(this._nearPos0, sphere.radius + sphere.center.length());
-        const regularNearPosition = cameraDistance - this._initialNear;
-        const minNearPos = Math.min(adjustedNearPosition, regularNearPosition);
-        this.camera.near = cameraDistance - minNearPos;
-        const adjustedFarPosition = Math.min(this._farPos0, -sphere.radius + sphere.center.length());
-        const regularFarPosition = cameraDistance - this._initialFar;
-        const minFarPos = Math.min(adjustedFarPosition, regularFarPosition);
-        this.camera.far = cameraDistance - minFarPos;
-        this.camera.updateProjectionMatrix();
-      } else {
-        let update = false;
-        if (this.camera.near != this._initialNear) {
-          this.camera.near = this._initialNear;
-          update = true;
-        }
-        if (this.camera.far != this._initialFar) {
-          this.camera.far = this._initialFar;
-          update = true;
-        }
-        if (update) {
-          this.camera.updateProjectionMatrix();
-        }
-      }
-    }
-  }
-  /**
-   * Set gizmos visibility
-   * @param {Boolean} value Value of gizmos visibility
-   */
-  setGizmosVisible(value) {
-    this._gizmos.visible = value;
-    this.dispatchEvent(_changeEvent);
-  }
-  /**
-   * Set values in transformation object
-   * @param {Matrix4} camera Transformation to be applied to the camera
-   * @param {Matrix4} gizmos Transformation to be applied to gizmos
-   */
-  setTransformationMatrices(camera = null, gizmos = null) {
-    if (camera) {
-      if (_transformation.camera) {
-        _transformation.camera.copy(camera);
-      } else {
-        _transformation.camera = camera.clone();
-      }
-    } else {
-      _transformation.camera = null;
-    }
-    if (gizmos) {
-      if (_transformation.gizmos) {
-        _transformation.gizmos.copy(gizmos);
-      } else {
-        _transformation.gizmos = gizmos.clone();
-      }
-    } else {
-      _transformation.gizmos = null;
-    }
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 41743:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "W": () => (/* binding */ DeviceOrientationControls)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-class DeviceOrientationControls extends three__WEBPACK_IMPORTED_MODULE_0__.EventDispatcher {
-  // radians
-  constructor(object) {
-    super();
-    __publicField(this, "object");
-    __publicField(this, "changeEvent", { type: "change" });
-    __publicField(this, "EPS", 1e-6);
-    __publicField(this, "enabled", true);
-    __publicField(this, "deviceOrientation", { alpha: 0, beta: 0, gamma: 0 });
-    __publicField(this, "screenOrientation", 0);
-    __publicField(this, "alphaOffset", 0);
-    __publicField(this, "onDeviceOrientationChangeEvent", (event) => {
-      this.deviceOrientation = event;
-    });
-    __publicField(this, "onScreenOrientationChangeEvent", () => {
-      this.screenOrientation = window.orientation || 0;
-    });
-    // The angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''
-    __publicField(this, "zee", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 0, 1));
-    __publicField(this, "euler", new three__WEBPACK_IMPORTED_MODULE_0__.Euler());
-    __publicField(this, "q0", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "q1", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion(-Math.sqrt(0.5), 0, 0, Math.sqrt(0.5)));
-    // - PI/2 around the x-axis
-    __publicField(this, "setObjectQuaternion", (quaternion, alpha, beta, gamma, orient) => {
-      this.euler.set(beta, alpha, -gamma, "YXZ");
-      quaternion.setFromEuler(this.euler);
-      quaternion.multiply(this.q1);
-      quaternion.multiply(this.q0.setFromAxisAngle(this.zee, -orient));
-    });
-    __publicField(this, "connect", () => {
-      this.onScreenOrientationChangeEvent();
-      if (window.DeviceOrientationEvent !== void 0 && // @ts-ignore
-      typeof window.DeviceOrientationEvent.requestPermission === "function") {
-        window.DeviceOrientationEvent.requestPermission().then((response) => {
-          if (response == "granted") {
-            window.addEventListener("orientationchange", this.onScreenOrientationChangeEvent);
-            window.addEventListener("deviceorientation", this.onDeviceOrientationChangeEvent);
-          }
-        }).catch((error) => {
-          console.error("THREE.DeviceOrientationControls: Unable to use DeviceOrientation API:", error);
-        });
-      } else {
-        window.addEventListener("orientationchange", this.onScreenOrientationChangeEvent);
-        window.addEventListener("deviceorientation", this.onDeviceOrientationChangeEvent);
-      }
-      this.enabled = true;
-    });
-    __publicField(this, "disconnect", () => {
-      window.removeEventListener("orientationchange", this.onScreenOrientationChangeEvent);
-      window.removeEventListener("deviceorientation", this.onDeviceOrientationChangeEvent);
-      this.enabled = false;
-    });
-    __publicField(this, "lastQuaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "update", () => {
-      if (this.enabled === false)
-        return;
-      const device = this.deviceOrientation;
-      if (device) {
-        const alpha = device.alpha ? three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad(device.alpha) + this.alphaOffset : 0;
-        const beta = device.beta ? three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad(device.beta) : 0;
-        const gamma = device.gamma ? three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad(device.gamma) : 0;
-        const orient = this.screenOrientation ? three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad(this.screenOrientation) : 0;
-        this.setObjectQuaternion(this.object.quaternion, alpha, beta, gamma, orient);
-        if (8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS) {
-          this.lastQuaternion.copy(this.object.quaternion);
-          this.dispatchEvent(this.changeEvent);
-        }
-      }
-    });
-    __publicField(this, "dispose", () => this.disconnect());
-    this.object = object;
-    this.object.rotation.reorder("YXZ");
-    this.connect();
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 55259:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "o": () => (/* binding */ FirstPersonControls)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-const targetPosition = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-class FirstPersonControls extends three__WEBPACK_IMPORTED_MODULE_0__.EventDispatcher {
-  constructor(object, domElement) {
-    super();
-    __publicField(this, "object");
-    __publicField(this, "domElement");
-    __publicField(this, "enabled", true);
-    __publicField(this, "movementSpeed", 1);
-    __publicField(this, "lookSpeed", 5e-3);
-    __publicField(this, "lookVertical", true);
-    __publicField(this, "autoForward", false);
-    __publicField(this, "activeLook", true);
-    __publicField(this, "heightSpeed", false);
-    __publicField(this, "heightCoef", 1);
-    __publicField(this, "heightMin", 0);
-    __publicField(this, "heightMax", 1);
-    __publicField(this, "constrainVertical", false);
-    __publicField(this, "verticalMin", 0);
-    __publicField(this, "verticalMax", Math.PI);
-    __publicField(this, "mouseDragOn", false);
-    // internals
-    __publicField(this, "autoSpeedFactor", 0);
-    __publicField(this, "mouseX", 0);
-    __publicField(this, "mouseY", 0);
-    __publicField(this, "moveForward", false);
-    __publicField(this, "moveBackward", false);
-    __publicField(this, "moveLeft", false);
-    __publicField(this, "moveRight", false);
-    __publicField(this, "moveUp", false);
-    __publicField(this, "moveDown", false);
-    __publicField(this, "viewHalfX", 0);
-    __publicField(this, "viewHalfY", 0);
-    __publicField(this, "lat", 0);
-    __publicField(this, "lon", 0);
-    __publicField(this, "lookDirection", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "spherical", new three__WEBPACK_IMPORTED_MODULE_0__.Spherical());
-    __publicField(this, "target", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "connect", (domElement) => {
-      domElement.setAttribute("tabindex", "-1");
-      domElement.style.touchAction = "none";
-      domElement.addEventListener("contextmenu", this.contextmenu);
-      domElement.addEventListener("mousemove", this.onMouseMove);
-      domElement.addEventListener("mousedown", this.onMouseDown);
-      domElement.addEventListener("mouseup", this.onMouseUp);
-      this.domElement = domElement;
-      window.addEventListener("keydown", this.onKeyDown);
-      window.addEventListener("keyup", this.onKeyUp);
-      this.handleResize();
-    });
-    __publicField(this, "dispose", () => {
-      var _a, _b, _c, _d;
-      (_a = this.domElement) == null ? void 0 : _a.removeEventListener("contextmenu", this.contextmenu);
-      (_b = this.domElement) == null ? void 0 : _b.removeEventListener("mousedown", this.onMouseDown);
-      (_c = this.domElement) == null ? void 0 : _c.removeEventListener("mousemove", this.onMouseMove);
-      (_d = this.domElement) == null ? void 0 : _d.removeEventListener("mouseup", this.onMouseUp);
-      window.removeEventListener("keydown", this.onKeyDown);
-      window.removeEventListener("keyup", this.onKeyUp);
-    });
-    __publicField(this, "handleResize", () => {
-      if (this.domElement) {
-        this.viewHalfX = this.domElement.offsetWidth / 2;
-        this.viewHalfY = this.domElement.offsetHeight / 2;
-      }
-    });
-    __publicField(this, "onMouseDown", (event) => {
-      var _a;
-      (_a = this.domElement) == null ? void 0 : _a.focus();
-      if (this.activeLook) {
-        switch (event.button) {
-          case 0:
-            this.moveForward = true;
-            break;
-          case 2:
-            this.moveBackward = true;
-            break;
-        }
-      }
-      this.mouseDragOn = true;
-    });
-    __publicField(this, "onMouseUp", (event) => {
-      if (this.activeLook) {
-        switch (event.button) {
-          case 0:
-            this.moveForward = false;
-            break;
-          case 2:
-            this.moveBackward = false;
-            break;
-        }
-      }
-      this.mouseDragOn = false;
-    });
-    __publicField(this, "onMouseMove", (event) => {
-      if (this.domElement) {
-        this.mouseX = event.pageX - this.domElement.offsetLeft - this.viewHalfX;
-        this.mouseY = event.pageY - this.domElement.offsetTop - this.viewHalfY;
-      }
-    });
-    __publicField(this, "onKeyDown", (event) => {
-      switch (event.code) {
-        case "ArrowUp":
-        case "KeyW":
-          this.moveForward = true;
-          break;
-        case "ArrowLeft":
-        case "KeyA":
-          this.moveLeft = true;
-          break;
-        case "ArrowDown":
-        case "KeyS":
-          this.moveBackward = true;
-          break;
-        case "ArrowRight":
-        case "KeyD":
-          this.moveRight = true;
-          break;
-        case "KeyR":
-          this.moveUp = true;
-          break;
-        case "KeyF":
-          this.moveDown = true;
-          break;
-      }
-    });
-    __publicField(this, "onKeyUp", (event) => {
-      switch (event.code) {
-        case "ArrowUp":
-        case "KeyW":
-          this.moveForward = false;
-          break;
-        case "ArrowLeft":
-        case "KeyA":
-          this.moveLeft = false;
-          break;
-        case "ArrowDown":
-        case "KeyS":
-          this.moveBackward = false;
-          break;
-        case "ArrowRight":
-        case "KeyD":
-          this.moveRight = false;
-          break;
-        case "KeyR":
-          this.moveUp = false;
-          break;
-        case "KeyF":
-          this.moveDown = false;
-          break;
-      }
-    });
-    __publicField(this, "lookAt", (x, y, z) => {
-      if (x instanceof three__WEBPACK_IMPORTED_MODULE_0__.Vector3) {
-        this.target.copy(x);
-      } else if (y && z) {
-        this.target.set(x, y, z);
-      }
-      this.object.lookAt(this.target);
-      this.setOrientation();
-      return this;
-    });
-    __publicField(this, "update", (delta) => {
-      if (!this.enabled)
-        return;
-      if (this.heightSpeed) {
-        const y = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.clamp(this.object.position.y, this.heightMin, this.heightMax);
-        const heightDelta = y - this.heightMin;
-        this.autoSpeedFactor = delta * (heightDelta * this.heightCoef);
-      } else {
-        this.autoSpeedFactor = 0;
-      }
-      const actualMoveSpeed = delta * this.movementSpeed;
-      if (this.moveForward || this.autoForward && !this.moveBackward) {
-        this.object.translateZ(-(actualMoveSpeed + this.autoSpeedFactor));
-      }
-      if (this.moveBackward)
-        this.object.translateZ(actualMoveSpeed);
-      if (this.moveLeft)
-        this.object.translateX(-actualMoveSpeed);
-      if (this.moveRight)
-        this.object.translateX(actualMoveSpeed);
-      if (this.moveUp)
-        this.object.translateY(actualMoveSpeed);
-      if (this.moveDown)
-        this.object.translateY(-actualMoveSpeed);
-      let actualLookSpeed = delta * this.lookSpeed;
-      if (!this.activeLook) {
-        actualLookSpeed = 0;
-      }
-      let verticalLookRatio = 1;
-      if (this.constrainVertical) {
-        verticalLookRatio = Math.PI / (this.verticalMax - this.verticalMin);
-      }
-      this.lon -= this.mouseX * actualLookSpeed;
-      if (this.lookVertical)
-        this.lat -= this.mouseY * actualLookSpeed * verticalLookRatio;
-      this.lat = Math.max(-85, Math.min(85, this.lat));
-      let phi = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad(90 - this.lat);
-      const theta = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad(this.lon);
-      if (this.constrainVertical) {
-        phi = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.mapLinear(phi, 0, Math.PI, this.verticalMin, this.verticalMax);
-      }
-      const position = this.object.position;
-      targetPosition.setFromSphericalCoords(1, phi, theta).add(position);
-      this.object.lookAt(targetPosition);
-    });
-    __publicField(this, "contextmenu", (event) => event.preventDefault());
-    __publicField(this, "setOrientation", () => {
-      this.lookDirection.set(0, 0, -1).applyQuaternion(this.object.quaternion);
-      this.spherical.setFromVector3(this.lookDirection);
-      this.lat = 90 - three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.radToDeg(this.spherical.phi);
-      this.lon = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.radToDeg(this.spherical.theta);
-    });
-    this.object = object;
-    this.domElement = domElement;
-    this.setOrientation();
-    if (domElement)
-      this.connect(domElement);
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 32044:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "m": () => (/* binding */ FlyControls)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-function contextmenu(event) {
-  event.preventDefault();
-}
-class FlyControls extends three__WEBPACK_IMPORTED_MODULE_0__.EventDispatcher {
-  constructor(object, domElement) {
-    super();
-    __publicField(this, "object");
-    __publicField(this, "domElement", null);
-    __publicField(this, "movementSpeed", 1);
-    __publicField(this, "rollSpeed", 5e-3);
-    __publicField(this, "dragToLook", false);
-    __publicField(this, "autoForward", false);
-    __publicField(this, "changeEvent", { type: "change" });
-    __publicField(this, "EPS", 1e-6);
-    __publicField(this, "tmpQuaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "mouseStatus", 0);
-    __publicField(this, "movementSpeedMultiplier", 1);
-    __publicField(this, "moveState", {
-      up: 0,
-      down: 0,
-      left: 0,
-      right: 0,
-      forward: 0,
-      back: 0,
-      pitchUp: 0,
-      pitchDown: 0,
-      yawLeft: 0,
-      yawRight: 0,
-      rollLeft: 0,
-      rollRight: 0
-    });
-    __publicField(this, "moveVector", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 0, 0));
-    __publicField(this, "rotationVector", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 0, 0));
-    __publicField(this, "keydown", (event) => {
-      if (event.altKey) {
-        return;
-      }
-      switch (event.code) {
-        case "ShiftLeft":
-        case "ShiftRight":
-          this.movementSpeedMultiplier = 0.1;
-          break;
-        case "KeyW":
-          this.moveState.forward = 1;
-          break;
-        case "KeyS":
-          this.moveState.back = 1;
-          break;
-        case "KeyA":
-          this.moveState.left = 1;
-          break;
-        case "KeyD":
-          this.moveState.right = 1;
-          break;
-        case "KeyR":
-          this.moveState.up = 1;
-          break;
-        case "KeyF":
-          this.moveState.down = 1;
-          break;
-        case "ArrowUp":
-          this.moveState.pitchUp = 1;
-          break;
-        case "ArrowDown":
-          this.moveState.pitchDown = 1;
-          break;
-        case "ArrowLeft":
-          this.moveState.yawLeft = 1;
-          break;
-        case "ArrowRight":
-          this.moveState.yawRight = 1;
-          break;
-        case "KeyQ":
-          this.moveState.rollLeft = 1;
-          break;
-        case "KeyE":
-          this.moveState.rollRight = 1;
-          break;
-      }
-      this.updateMovementVector();
-      this.updateRotationVector();
-    });
-    __publicField(this, "keyup", (event) => {
-      switch (event.code) {
-        case "ShiftLeft":
-        case "ShiftRight":
-          this.movementSpeedMultiplier = 1;
-          break;
-        case "KeyW":
-          this.moveState.forward = 0;
-          break;
-        case "KeyS":
-          this.moveState.back = 0;
-          break;
-        case "KeyA":
-          this.moveState.left = 0;
-          break;
-        case "KeyD":
-          this.moveState.right = 0;
-          break;
-        case "KeyR":
-          this.moveState.up = 0;
-          break;
-        case "KeyF":
-          this.moveState.down = 0;
-          break;
-        case "ArrowUp":
-          this.moveState.pitchUp = 0;
-          break;
-        case "ArrowDown":
-          this.moveState.pitchDown = 0;
-          break;
-        case "ArrowLeft":
-          this.moveState.yawLeft = 0;
-          break;
-        case "ArrowRight":
-          this.moveState.yawRight = 0;
-          break;
-        case "KeyQ":
-          this.moveState.rollLeft = 0;
-          break;
-        case "KeyE":
-          this.moveState.rollRight = 0;
-          break;
-      }
-      this.updateMovementVector();
-      this.updateRotationVector();
-    });
-    __publicField(this, "pointerdown", (event) => {
-      if (this.dragToLook) {
-        this.mouseStatus++;
-      } else {
-        switch (event.button) {
-          case 0:
-            this.moveState.forward = 1;
-            break;
-          case 2:
-            this.moveState.back = 1;
-            break;
-        }
-        this.updateMovementVector();
-      }
-    });
-    __publicField(this, "pointermove", (event) => {
-      if (!this.dragToLook || this.mouseStatus > 0) {
-        const container = this.getContainerDimensions();
-        const halfWidth = container.size[0] / 2;
-        const halfHeight = container.size[1] / 2;
-        this.moveState.yawLeft = -(event.pageX - container.offset[0] - halfWidth) / halfWidth;
-        this.moveState.pitchDown = (event.pageY - container.offset[1] - halfHeight) / halfHeight;
-        this.updateRotationVector();
-      }
-    });
-    __publicField(this, "pointerup", (event) => {
-      if (this.dragToLook) {
-        this.mouseStatus--;
-        this.moveState.yawLeft = this.moveState.pitchDown = 0;
-      } else {
-        switch (event.button) {
-          case 0:
-            this.moveState.forward = 0;
-            break;
-          case 2:
-            this.moveState.back = 0;
-            break;
-        }
-        this.updateMovementVector();
-      }
-      this.updateRotationVector();
-    });
-    __publicField(this, "lastQuaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "lastPosition", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "update", (delta) => {
-      const moveMult = delta * this.movementSpeed;
-      const rotMult = delta * this.rollSpeed;
-      this.object.translateX(this.moveVector.x * moveMult);
-      this.object.translateY(this.moveVector.y * moveMult);
-      this.object.translateZ(this.moveVector.z * moveMult);
-      this.tmpQuaternion.set(this.rotationVector.x * rotMult, this.rotationVector.y * rotMult, this.rotationVector.z * rotMult, 1).normalize();
-      this.object.quaternion.multiply(this.tmpQuaternion);
-      if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS || 8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS) {
-        this.dispatchEvent(this.changeEvent);
-        this.lastQuaternion.copy(this.object.quaternion);
-        this.lastPosition.copy(this.object.position);
-      }
-    });
-    __publicField(this, "updateMovementVector", () => {
-      const forward = this.moveState.forward || this.autoForward && !this.moveState.back ? 1 : 0;
-      this.moveVector.x = -this.moveState.left + this.moveState.right;
-      this.moveVector.y = -this.moveState.down + this.moveState.up;
-      this.moveVector.z = -forward + this.moveState.back;
-    });
-    __publicField(this, "updateRotationVector", () => {
-      this.rotationVector.x = -this.moveState.pitchDown + this.moveState.pitchUp;
-      this.rotationVector.y = -this.moveState.yawRight + this.moveState.yawLeft;
-      this.rotationVector.z = -this.moveState.rollRight + this.moveState.rollLeft;
-    });
-    __publicField(this, "getContainerDimensions", () => {
-      if (this.domElement != document && !(this.domElement instanceof Document)) {
-        return {
-          size: [this.domElement.offsetWidth, this.domElement.offsetHeight],
-          offset: [this.domElement.offsetLeft, this.domElement.offsetTop]
-        };
-      } else {
-        return {
-          size: [window.innerWidth, window.innerHeight],
-          offset: [0, 0]
-        };
-      }
-    });
-    // https://github.com/mrdoob/three.js/issues/20575
-    __publicField(this, "connect", (domElement) => {
-      this.domElement = domElement;
-      if (domElement && !(domElement instanceof Document)) {
-        domElement.setAttribute("tabindex", -1);
-      }
-      this.domElement.addEventListener("contextmenu", contextmenu);
-      this.domElement.addEventListener("pointermove", this.pointermove);
-      this.domElement.addEventListener("pointerdown", this.pointerdown);
-      this.domElement.addEventListener("pointerup", this.pointerup);
-      window.addEventListener("keydown", this.keydown);
-      window.addEventListener("keyup", this.keyup);
-    });
-    __publicField(this, "dispose", () => {
-      this.domElement.removeEventListener("contextmenu", contextmenu);
-      this.domElement.removeEventListener("pointermove", this.pointermove);
-      this.domElement.removeEventListener("pointerdown", this.pointerdown);
-      this.domElement.removeEventListener("pointerup", this.pointerup);
-      window.removeEventListener("keydown", this.keydown);
-      window.removeEventListener("keyup", this.keyup);
-    });
-    this.object = object;
-    if (domElement !== void 0)
-      this.connect(domElement);
-    this.updateMovementVector();
-    this.updateRotationVector();
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 22227:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "o": () => (/* binding */ MapControls),
-/* harmony export */   "z": () => (/* binding */ OrbitControls)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-const moduloWrapAround = (offset, capacity) => (offset % capacity + capacity) % capacity;
-class OrbitControls extends three__WEBPACK_IMPORTED_MODULE_0__.EventDispatcher {
-  constructor(object, domElement) {
-    super();
-    __publicField(this, "object");
-    __publicField(this, "domElement");
-    // Set to false to disable this control
-    __publicField(this, "enabled", true);
-    // "target" sets the location of focus, where the object orbits around
-    __publicField(this, "target", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    // How far you can dolly in and out ( PerspectiveCamera only )
-    __publicField(this, "minDistance", 0);
-    __publicField(this, "maxDistance", Infinity);
-    // How far you can zoom in and out ( OrthographicCamera only )
-    __publicField(this, "minZoom", 0);
-    __publicField(this, "maxZoom", Infinity);
-    // How far you can orbit vertically, upper and lower limits.
-    // Range is 0 to Math.PI radians.
-    __publicField(this, "minPolarAngle", 0);
-    // radians
-    __publicField(this, "maxPolarAngle", Math.PI);
-    // radians
-    // How far you can orbit horizontally, upper and lower limits.
-    // If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )
-    __publicField(this, "minAzimuthAngle", -Infinity);
-    // radians
-    __publicField(this, "maxAzimuthAngle", Infinity);
-    // radians
-    // Set to true to enable damping (inertia)
-    // If damping is enabled, you must call controls.update() in your animation loop
-    __publicField(this, "enableDamping", false);
-    __publicField(this, "dampingFactor", 0.05);
-    // This option actually enables dollying in and out; left as "zoom" for backwards compatibility.
-    // Set to false to disable zooming
-    __publicField(this, "enableZoom", true);
-    __publicField(this, "zoomSpeed", 1);
-    // Set to false to disable rotating
-    __publicField(this, "enableRotate", true);
-    __publicField(this, "rotateSpeed", 1);
-    // Set to false to disable panning
-    __publicField(this, "enablePan", true);
-    __publicField(this, "panSpeed", 1);
-    __publicField(this, "screenSpacePanning", true);
-    // if false, pan orthogonal to world-space direction camera.up
-    __publicField(this, "keyPanSpeed", 7);
-    // pixels moved per arrow key push
-    // Set to true to automatically rotate around the target
-    // If auto-rotate is enabled, you must call controls.update() in your animation loop
-    __publicField(this, "autoRotate", false);
-    __publicField(this, "autoRotateSpeed", 2);
-    // 30 seconds per orbit when fps is 60
-    __publicField(this, "reverseOrbit", false);
-    // true if you want to reverse the orbit to mouse drag from left to right = orbits left
-    // The four arrow keys
-    __publicField(this, "keys", { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" });
-    // Mouse buttons
-    __publicField(this, "mouseButtons", {
-      LEFT: three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.ROTATE,
-      MIDDLE: three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.DOLLY,
-      RIGHT: three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.PAN
-    });
-    // Touch fingers
-    __publicField(this, "touches", { ONE: three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.ROTATE, TWO: three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.DOLLY_PAN });
-    __publicField(this, "target0");
-    __publicField(this, "position0");
-    __publicField(this, "zoom0");
-    // the target DOM element for key events
-    __publicField(this, "_domElementKeyEvents", null);
-    __publicField(this, "getPolarAngle");
-    __publicField(this, "getAzimuthalAngle");
-    __publicField(this, "setPolarAngle");
-    __publicField(this, "setAzimuthalAngle");
-    __publicField(this, "getDistance");
-    __publicField(this, "listenToKeyEvents");
-    __publicField(this, "saveState");
-    __publicField(this, "reset");
-    __publicField(this, "update");
-    __publicField(this, "connect");
-    __publicField(this, "dispose");
-    this.object = object;
-    this.domElement = domElement;
-    this.target0 = this.target.clone();
-    this.position0 = this.object.position.clone();
-    this.zoom0 = this.object.zoom;
-    this.getPolarAngle = () => spherical.phi;
-    this.getAzimuthalAngle = () => spherical.theta;
-    this.setPolarAngle = (value) => {
-      let phi = moduloWrapAround(value, 2 * Math.PI);
-      let currentPhi = spherical.phi;
-      if (currentPhi < 0)
-        currentPhi += 2 * Math.PI;
-      if (phi < 0)
-        phi += 2 * Math.PI;
-      let phiDist = Math.abs(phi - currentPhi);
-      if (2 * Math.PI - phiDist < phiDist) {
-        if (phi < currentPhi) {
-          phi += 2 * Math.PI;
-        } else {
-          currentPhi += 2 * Math.PI;
-        }
-      }
-      sphericalDelta.phi = phi - currentPhi;
-      scope.update();
-    };
-    this.setAzimuthalAngle = (value) => {
-      let theta = moduloWrapAround(value, 2 * Math.PI);
-      let currentTheta = spherical.theta;
-      if (currentTheta < 0)
-        currentTheta += 2 * Math.PI;
-      if (theta < 0)
-        theta += 2 * Math.PI;
-      let thetaDist = Math.abs(theta - currentTheta);
-      if (2 * Math.PI - thetaDist < thetaDist) {
-        if (theta < currentTheta) {
-          theta += 2 * Math.PI;
-        } else {
-          currentTheta += 2 * Math.PI;
-        }
-      }
-      sphericalDelta.theta = theta - currentTheta;
-      scope.update();
-    };
-    this.getDistance = () => scope.object.position.distanceTo(scope.target);
-    this.listenToKeyEvents = (domElement2) => {
-      domElement2.addEventListener("keydown", onKeyDown);
-      this._domElementKeyEvents = domElement2;
-    };
-    this.saveState = () => {
-      scope.target0.copy(scope.target);
-      scope.position0.copy(scope.object.position);
-      scope.zoom0 = scope.object.zoom;
-    };
-    this.reset = () => {
-      scope.target.copy(scope.target0);
-      scope.object.position.copy(scope.position0);
-      scope.object.zoom = scope.zoom0;
-      scope.object.updateProjectionMatrix();
-      scope.dispatchEvent(changeEvent);
-      scope.update();
-      state = STATE.NONE;
-    };
-    this.update = (() => {
-      const offset = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-      const quat = new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion().setFromUnitVectors(object.up, new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 1, 0));
-      const quatInverse = quat.clone().invert();
-      const lastPosition = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-      const lastQuaternion = new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion();
-      const twoPI = 2 * Math.PI;
-      return function update() {
-        const position = scope.object.position;
-        offset.copy(position).sub(scope.target);
-        offset.applyQuaternion(quat);
-        spherical.setFromVector3(offset);
-        if (scope.autoRotate && state === STATE.NONE) {
-          rotateLeft(getAutoRotationAngle());
-        }
-        if (scope.enableDamping) {
-          spherical.theta += sphericalDelta.theta * scope.dampingFactor;
-          spherical.phi += sphericalDelta.phi * scope.dampingFactor;
-        } else {
-          spherical.theta += sphericalDelta.theta;
-          spherical.phi += sphericalDelta.phi;
-        }
-        let min = scope.minAzimuthAngle;
-        let max = scope.maxAzimuthAngle;
-        if (isFinite(min) && isFinite(max)) {
-          if (min < -Math.PI)
-            min += twoPI;
-          else if (min > Math.PI)
-            min -= twoPI;
-          if (max < -Math.PI)
-            max += twoPI;
-          else if (max > Math.PI)
-            max -= twoPI;
-          if (min <= max) {
-            spherical.theta = Math.max(min, Math.min(max, spherical.theta));
-          } else {
-            spherical.theta = spherical.theta > (min + max) / 2 ? Math.max(min, spherical.theta) : Math.min(max, spherical.theta);
-          }
-        }
-        spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));
-        spherical.makeSafe();
-        spherical.radius *= scale;
-        spherical.radius = Math.max(scope.minDistance, Math.min(scope.maxDistance, spherical.radius));
-        if (scope.enableDamping === true) {
-          scope.target.addScaledVector(panOffset, scope.dampingFactor);
-        } else {
-          scope.target.add(panOffset);
-        }
-        offset.setFromSpherical(spherical);
-        offset.applyQuaternion(quatInverse);
-        position.copy(scope.target).add(offset);
-        scope.object.lookAt(scope.target);
-        if (scope.enableDamping === true) {
-          sphericalDelta.theta *= 1 - scope.dampingFactor;
-          sphericalDelta.phi *= 1 - scope.dampingFactor;
-          panOffset.multiplyScalar(1 - scope.dampingFactor);
-        } else {
-          sphericalDelta.set(0, 0, 0);
-          panOffset.set(0, 0, 0);
-        }
-        scale = 1;
-        if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {
-          scope.dispatchEvent(changeEvent);
-          lastPosition.copy(scope.object.position);
-          lastQuaternion.copy(scope.object.quaternion);
-          zoomChanged = false;
-          return true;
-        }
-        return false;
-      };
-    })();
-    this.connect = (domElement2) => {
-      if (domElement2 === document) {
-        console.error(
-          'THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.'
-        );
-      }
-      scope.domElement = domElement2;
-      scope.domElement.style.touchAction = "none";
-      scope.domElement.addEventListener("contextmenu", onContextMenu);
-      scope.domElement.addEventListener("pointerdown", onPointerDown);
-      scope.domElement.addEventListener("pointercancel", onPointerCancel);
-      scope.domElement.addEventListener("wheel", onMouseWheel);
-    };
-    this.dispose = () => {
-      var _a, _b, _c, _d, _e, _f;
-      (_a = scope.domElement) == null ? void 0 : _a.removeEventListener("contextmenu", onContextMenu);
-      (_b = scope.domElement) == null ? void 0 : _b.removeEventListener("pointerdown", onPointerDown);
-      (_c = scope.domElement) == null ? void 0 : _c.removeEventListener("pointercancel", onPointerCancel);
-      (_d = scope.domElement) == null ? void 0 : _d.removeEventListener("wheel", onMouseWheel);
-      (_e = scope.domElement) == null ? void 0 : _e.ownerDocument.removeEventListener("pointermove", onPointerMove);
-      (_f = scope.domElement) == null ? void 0 : _f.ownerDocument.removeEventListener("pointerup", onPointerUp);
-      if (scope._domElementKeyEvents !== null) {
-        scope._domElementKeyEvents.removeEventListener("keydown", onKeyDown);
-      }
-    };
-    const scope = this;
-    const changeEvent = { type: "change" };
-    const startEvent = { type: "start" };
-    const endEvent = { type: "end" };
-    const STATE = {
-      NONE: -1,
-      ROTATE: 0,
-      DOLLY: 1,
-      PAN: 2,
-      TOUCH_ROTATE: 3,
-      TOUCH_PAN: 4,
-      TOUCH_DOLLY_PAN: 5,
-      TOUCH_DOLLY_ROTATE: 6
-    };
-    let state = STATE.NONE;
-    const EPS = 1e-6;
-    const spherical = new three__WEBPACK_IMPORTED_MODULE_0__.Spherical();
-    const sphericalDelta = new three__WEBPACK_IMPORTED_MODULE_0__.Spherical();
-    let scale = 1;
-    const panOffset = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    let zoomChanged = false;
-    const rotateStart = new three__WEBPACK_IMPORTED_MODULE_0__.Vector2();
-    const rotateEnd = new three__WEBPACK_IMPORTED_MODULE_0__.Vector2();
-    const rotateDelta = new three__WEBPACK_IMPORTED_MODULE_0__.Vector2();
-    const panStart = new three__WEBPACK_IMPORTED_MODULE_0__.Vector2();
-    const panEnd = new three__WEBPACK_IMPORTED_MODULE_0__.Vector2();
-    const panDelta = new three__WEBPACK_IMPORTED_MODULE_0__.Vector2();
-    const dollyStart = new three__WEBPACK_IMPORTED_MODULE_0__.Vector2();
-    const dollyEnd = new three__WEBPACK_IMPORTED_MODULE_0__.Vector2();
-    const dollyDelta = new three__WEBPACK_IMPORTED_MODULE_0__.Vector2();
-    const pointers = [];
-    const pointerPositions = {};
-    function getAutoRotationAngle() {
-      return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;
-    }
-    function getZoomScale() {
-      return Math.pow(0.95, scope.zoomSpeed);
-    }
-    function rotateLeft(angle) {
-      if (scope.reverseOrbit) {
-        sphericalDelta.theta += angle;
-      } else {
-        sphericalDelta.theta -= angle;
-      }
-    }
-    function rotateUp(angle) {
-      if (scope.reverseOrbit) {
-        sphericalDelta.phi += angle;
-      } else {
-        sphericalDelta.phi -= angle;
-      }
-    }
-    const panLeft = (() => {
-      const v = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-      return function panLeft2(distance, objectMatrix) {
-        v.setFromMatrixColumn(objectMatrix, 0);
-        v.multiplyScalar(-distance);
-        panOffset.add(v);
-      };
-    })();
-    const panUp = (() => {
-      const v = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-      return function panUp2(distance, objectMatrix) {
-        if (scope.screenSpacePanning === true) {
-          v.setFromMatrixColumn(objectMatrix, 1);
-        } else {
-          v.setFromMatrixColumn(objectMatrix, 0);
-          v.crossVectors(scope.object.up, v);
-        }
-        v.multiplyScalar(distance);
-        panOffset.add(v);
-      };
-    })();
-    const pan = (() => {
-      const offset = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-      return function pan2(deltaX, deltaY) {
-        const element = scope.domElement;
-        if (element && scope.object instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera && scope.object.isPerspectiveCamera) {
-          const position = scope.object.position;
-          offset.copy(position).sub(scope.target);
-          let targetDistance = offset.length();
-          targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180);
-          panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);
-          panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);
-        } else if (element && scope.object instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera && scope.object.isOrthographicCamera) {
-          panLeft(
-            deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth,
-            scope.object.matrix
-          );
-          panUp(
-            deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight,
-            scope.object.matrix
-          );
-        } else {
-          console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.");
-          scope.enablePan = false;
-        }
-      };
-    })();
-    function dollyOut(dollyScale) {
-      if (scope.object instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera && scope.object.isPerspectiveCamera) {
-        scale /= dollyScale;
-      } else if (scope.object instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera && scope.object.isOrthographicCamera) {
-        scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom * dollyScale));
-        scope.object.updateProjectionMatrix();
-        zoomChanged = true;
-      } else {
-        console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");
-        scope.enableZoom = false;
-      }
-    }
-    function dollyIn(dollyScale) {
-      if (scope.object instanceof three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera && scope.object.isPerspectiveCamera) {
-        scale *= dollyScale;
-      } else if (scope.object instanceof three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera && scope.object.isOrthographicCamera) {
-        scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / dollyScale));
-        scope.object.updateProjectionMatrix();
-        zoomChanged = true;
-      } else {
-        console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.");
-        scope.enableZoom = false;
-      }
-    }
-    function handleMouseDownRotate(event) {
-      rotateStart.set(event.clientX, event.clientY);
-    }
-    function handleMouseDownDolly(event) {
-      dollyStart.set(event.clientX, event.clientY);
-    }
-    function handleMouseDownPan(event) {
-      panStart.set(event.clientX, event.clientY);
-    }
-    function handleMouseMoveRotate(event) {
-      rotateEnd.set(event.clientX, event.clientY);
-      rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);
-      const element = scope.domElement;
-      if (element) {
-        rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight);
-        rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);
-      }
-      rotateStart.copy(rotateEnd);
-      scope.update();
-    }
-    function handleMouseMoveDolly(event) {
-      dollyEnd.set(event.clientX, event.clientY);
-      dollyDelta.subVectors(dollyEnd, dollyStart);
-      if (dollyDelta.y > 0) {
-        dollyOut(getZoomScale());
-      } else if (dollyDelta.y < 0) {
-        dollyIn(getZoomScale());
-      }
-      dollyStart.copy(dollyEnd);
-      scope.update();
-    }
-    function handleMouseMovePan(event) {
-      panEnd.set(event.clientX, event.clientY);
-      panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);
-      pan(panDelta.x, panDelta.y);
-      panStart.copy(panEnd);
-      scope.update();
-    }
-    function handleMouseWheel(event) {
-      if (event.deltaY < 0) {
-        dollyIn(getZoomScale());
-      } else if (event.deltaY > 0) {
-        dollyOut(getZoomScale());
-      }
-      scope.update();
-    }
-    function handleKeyDown(event) {
-      let needsUpdate = false;
-      switch (event.code) {
-        case scope.keys.UP:
-          pan(0, scope.keyPanSpeed);
-          needsUpdate = true;
-          break;
-        case scope.keys.BOTTOM:
-          pan(0, -scope.keyPanSpeed);
-          needsUpdate = true;
-          break;
-        case scope.keys.LEFT:
-          pan(scope.keyPanSpeed, 0);
-          needsUpdate = true;
-          break;
-        case scope.keys.RIGHT:
-          pan(-scope.keyPanSpeed, 0);
-          needsUpdate = true;
-          break;
-      }
-      if (needsUpdate) {
-        event.preventDefault();
-        scope.update();
-      }
-    }
-    function handleTouchStartRotate() {
-      if (pointers.length == 1) {
-        rotateStart.set(pointers[0].pageX, pointers[0].pageY);
-      } else {
-        const x = 0.5 * (pointers[0].pageX + pointers[1].pageX);
-        const y = 0.5 * (pointers[0].pageY + pointers[1].pageY);
-        rotateStart.set(x, y);
-      }
-    }
-    function handleTouchStartPan() {
-      if (pointers.length == 1) {
-        panStart.set(pointers[0].pageX, pointers[0].pageY);
-      } else {
-        const x = 0.5 * (pointers[0].pageX + pointers[1].pageX);
-        const y = 0.5 * (pointers[0].pageY + pointers[1].pageY);
-        panStart.set(x, y);
-      }
-    }
-    function handleTouchStartDolly() {
-      const dx = pointers[0].pageX - pointers[1].pageX;
-      const dy = pointers[0].pageY - pointers[1].pageY;
-      const distance = Math.sqrt(dx * dx + dy * dy);
-      dollyStart.set(0, distance);
-    }
-    function handleTouchStartDollyPan() {
-      if (scope.enableZoom)
-        handleTouchStartDolly();
-      if (scope.enablePan)
-        handleTouchStartPan();
-    }
-    function handleTouchStartDollyRotate() {
-      if (scope.enableZoom)
-        handleTouchStartDolly();
-      if (scope.enableRotate)
-        handleTouchStartRotate();
-    }
-    function handleTouchMoveRotate(event) {
-      if (pointers.length == 1) {
-        rotateEnd.set(event.pageX, event.pageY);
-      } else {
-        const position = getSecondPointerPosition(event);
-        const x = 0.5 * (event.pageX + position.x);
-        const y = 0.5 * (event.pageY + position.y);
-        rotateEnd.set(x, y);
-      }
-      rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);
-      const element = scope.domElement;
-      if (element) {
-        rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight);
-        rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);
-      }
-      rotateStart.copy(rotateEnd);
-    }
-    function handleTouchMovePan(event) {
-      if (pointers.length == 1) {
-        panEnd.set(event.pageX, event.pageY);
-      } else {
-        const position = getSecondPointerPosition(event);
-        const x = 0.5 * (event.pageX + position.x);
-        const y = 0.5 * (event.pageY + position.y);
-        panEnd.set(x, y);
-      }
-      panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);
-      pan(panDelta.x, panDelta.y);
-      panStart.copy(panEnd);
-    }
-    function handleTouchMoveDolly(event) {
-      const position = getSecondPointerPosition(event);
-      const dx = event.pageX - position.x;
-      const dy = event.pageY - position.y;
-      const distance = Math.sqrt(dx * dx + dy * dy);
-      dollyEnd.set(0, distance);
-      dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed));
-      dollyOut(dollyDelta.y);
-      dollyStart.copy(dollyEnd);
-    }
-    function handleTouchMoveDollyPan(event) {
-      if (scope.enableZoom)
-        handleTouchMoveDolly(event);
-      if (scope.enablePan)
-        handleTouchMovePan(event);
-    }
-    function handleTouchMoveDollyRotate(event) {
-      if (scope.enableZoom)
-        handleTouchMoveDolly(event);
-      if (scope.enableRotate)
-        handleTouchMoveRotate(event);
-    }
-    function onPointerDown(event) {
-      var _a, _b;
-      if (scope.enabled === false)
-        return;
-      if (pointers.length === 0) {
-        (_a = scope.domElement) == null ? void 0 : _a.ownerDocument.addEventListener("pointermove", onPointerMove);
-        (_b = scope.domElement) == null ? void 0 : _b.ownerDocument.addEventListener("pointerup", onPointerUp);
-      }
-      addPointer(event);
-      if (event.pointerType === "touch") {
-        onTouchStart(event);
-      } else {
-        onMouseDown(event);
-      }
-    }
-    function onPointerMove(event) {
-      if (scope.enabled === false)
-        return;
-      if (event.pointerType === "touch") {
-        onTouchMove(event);
-      } else {
-        onMouseMove(event);
-      }
-    }
-    function onPointerUp(event) {
-      var _a, _b, _c;
-      removePointer(event);
-      if (pointers.length === 0) {
-        (_a = scope.domElement) == null ? void 0 : _a.releasePointerCapture(event.pointerId);
-        (_b = scope.domElement) == null ? void 0 : _b.ownerDocument.removeEventListener("pointermove", onPointerMove);
-        (_c = scope.domElement) == null ? void 0 : _c.ownerDocument.removeEventListener("pointerup", onPointerUp);
-      }
-      scope.dispatchEvent(endEvent);
-      state = STATE.NONE;
-    }
-    function onPointerCancel(event) {
-      removePointer(event);
-    }
-    function onMouseDown(event) {
-      let mouseAction;
-      switch (event.button) {
-        case 0:
-          mouseAction = scope.mouseButtons.LEFT;
-          break;
-        case 1:
-          mouseAction = scope.mouseButtons.MIDDLE;
-          break;
-        case 2:
-          mouseAction = scope.mouseButtons.RIGHT;
-          break;
-        default:
-          mouseAction = -1;
-      }
-      switch (mouseAction) {
-        case three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.DOLLY:
-          if (scope.enableZoom === false)
-            return;
-          handleMouseDownDolly(event);
-          state = STATE.DOLLY;
-          break;
-        case three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.ROTATE:
-          if (event.ctrlKey || event.metaKey || event.shiftKey) {
-            if (scope.enablePan === false)
-              return;
-            handleMouseDownPan(event);
-            state = STATE.PAN;
-          } else {
-            if (scope.enableRotate === false)
-              return;
-            handleMouseDownRotate(event);
-            state = STATE.ROTATE;
-          }
-          break;
-        case three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.PAN:
-          if (event.ctrlKey || event.metaKey || event.shiftKey) {
-            if (scope.enableRotate === false)
-              return;
-            handleMouseDownRotate(event);
-            state = STATE.ROTATE;
-          } else {
-            if (scope.enablePan === false)
-              return;
-            handleMouseDownPan(event);
-            state = STATE.PAN;
-          }
-          break;
-        default:
-          state = STATE.NONE;
-      }
-      if (state !== STATE.NONE) {
-        scope.dispatchEvent(startEvent);
-      }
-    }
-    function onMouseMove(event) {
-      if (scope.enabled === false)
-        return;
-      switch (state) {
-        case STATE.ROTATE:
-          if (scope.enableRotate === false)
-            return;
-          handleMouseMoveRotate(event);
-          break;
-        case STATE.DOLLY:
-          if (scope.enableZoom === false)
-            return;
-          handleMouseMoveDolly(event);
-          break;
-        case STATE.PAN:
-          if (scope.enablePan === false)
-            return;
-          handleMouseMovePan(event);
-          break;
-      }
-    }
-    function onMouseWheel(event) {
-      if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE && state !== STATE.ROTATE) {
-        return;
-      }
-      event.preventDefault();
-      scope.dispatchEvent(startEvent);
-      handleMouseWheel(event);
-      scope.dispatchEvent(endEvent);
-    }
-    function onKeyDown(event) {
-      if (scope.enabled === false || scope.enablePan === false)
-        return;
-      handleKeyDown(event);
-    }
-    function onTouchStart(event) {
-      trackPointer(event);
-      switch (pointers.length) {
-        case 1:
-          switch (scope.touches.ONE) {
-            case three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.ROTATE:
-              if (scope.enableRotate === false)
-                return;
-              handleTouchStartRotate();
-              state = STATE.TOUCH_ROTATE;
-              break;
-            case three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.PAN:
-              if (scope.enablePan === false)
-                return;
-              handleTouchStartPan();
-              state = STATE.TOUCH_PAN;
-              break;
-            default:
-              state = STATE.NONE;
-          }
-          break;
-        case 2:
-          switch (scope.touches.TWO) {
-            case three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.DOLLY_PAN:
-              if (scope.enableZoom === false && scope.enablePan === false)
-                return;
-              handleTouchStartDollyPan();
-              state = STATE.TOUCH_DOLLY_PAN;
-              break;
-            case three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.DOLLY_ROTATE:
-              if (scope.enableZoom === false && scope.enableRotate === false)
-                return;
-              handleTouchStartDollyRotate();
-              state = STATE.TOUCH_DOLLY_ROTATE;
-              break;
-            default:
-              state = STATE.NONE;
-          }
-          break;
-        default:
-          state = STATE.NONE;
-      }
-      if (state !== STATE.NONE) {
-        scope.dispatchEvent(startEvent);
-      }
-    }
-    function onTouchMove(event) {
-      trackPointer(event);
-      switch (state) {
-        case STATE.TOUCH_ROTATE:
-          if (scope.enableRotate === false)
-            return;
-          handleTouchMoveRotate(event);
-          scope.update();
-          break;
-        case STATE.TOUCH_PAN:
-          if (scope.enablePan === false)
-            return;
-          handleTouchMovePan(event);
-          scope.update();
-          break;
-        case STATE.TOUCH_DOLLY_PAN:
-          if (scope.enableZoom === false && scope.enablePan === false)
-            return;
-          handleTouchMoveDollyPan(event);
-          scope.update();
-          break;
-        case STATE.TOUCH_DOLLY_ROTATE:
-          if (scope.enableZoom === false && scope.enableRotate === false)
-            return;
-          handleTouchMoveDollyRotate(event);
-          scope.update();
-          break;
-        default:
-          state = STATE.NONE;
-      }
-    }
-    function onContextMenu(event) {
-      if (scope.enabled === false)
-        return;
-      event.preventDefault();
-    }
-    function addPointer(event) {
-      pointers.push(event);
-    }
-    function removePointer(event) {
-      delete pointerPositions[event.pointerId];
-      for (let i = 0; i < pointers.length; i++) {
-        if (pointers[i].pointerId == event.pointerId) {
-          pointers.splice(i, 1);
-          return;
-        }
-      }
-    }
-    function trackPointer(event) {
-      let position = pointerPositions[event.pointerId];
-      if (position === void 0) {
-        position = new three__WEBPACK_IMPORTED_MODULE_0__.Vector2();
-        pointerPositions[event.pointerId] = position;
-      }
-      position.set(event.pageX, event.pageY);
-    }
-    function getSecondPointerPosition(event) {
-      const pointer = event.pointerId === pointers[0].pointerId ? pointers[1] : pointers[0];
-      return pointerPositions[pointer.pointerId];
-    }
-    if (domElement !== void 0)
-      this.connect(domElement);
-    this.update();
-  }
-}
-class MapControls extends OrbitControls {
-  constructor(object, domElement) {
-    super(object, domElement);
-    this.screenSpacePanning = false;
-    this.mouseButtons.LEFT = three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.PAN;
-    this.mouseButtons.RIGHT = three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.ROTATE;
-    this.touches.ONE = three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.PAN;
-    this.touches.TWO = three__WEBPACK_IMPORTED_MODULE_0__.TOUCH.DOLLY_ROTATE;
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 2679:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "q": () => (/* binding */ PointerLockControls)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-const _euler = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Euler(0, 0, 0, "YXZ");
-const _vector = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const _changeEvent = { type: "change" };
-const _lockEvent = { type: "lock" };
-const _unlockEvent = { type: "unlock" };
-const _PI_2 = Math.PI / 2;
-class PointerLockControls extends three__WEBPACK_IMPORTED_MODULE_0__.EventDispatcher {
-  constructor(camera, domElement) {
-    super();
-    __publicField(this, "camera");
-    __publicField(this, "domElement");
-    __publicField(this, "isLocked");
-    __publicField(this, "minPolarAngle");
-    __publicField(this, "maxPolarAngle");
-    __publicField(this, "pointerSpeed");
-    __publicField(this, "onMouseMove", (event) => {
-      if (!this.domElement || this.isLocked === false)
-        return;
-      const movementX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;
-      const movementY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;
-      _euler.setFromQuaternion(this.camera.quaternion);
-      _euler.y -= movementX * 2e-3 * this.pointerSpeed;
-      _euler.x -= movementY * 2e-3 * this.pointerSpeed;
-      _euler.x = Math.max(_PI_2 - this.maxPolarAngle, Math.min(_PI_2 - this.minPolarAngle, _euler.x));
-      this.camera.quaternion.setFromEuler(_euler);
-      this.dispatchEvent(_changeEvent);
-    });
-    __publicField(this, "onPointerlockChange", () => {
-      if (!this.domElement)
-        return;
-      if (this.domElement.ownerDocument.pointerLockElement === this.domElement) {
-        this.dispatchEvent(_lockEvent);
-        this.isLocked = true;
-      } else {
-        this.dispatchEvent(_unlockEvent);
-        this.isLocked = false;
-      }
-    });
-    __publicField(this, "onPointerlockError", () => {
-      console.error("THREE.PointerLockControls: Unable to use Pointer Lock API");
-    });
-    __publicField(this, "connect", (domElement) => {
-      this.domElement = domElement || this.domElement;
-      if (!this.domElement)
-        return;
-      this.domElement.ownerDocument.addEventListener("mousemove", this.onMouseMove);
-      this.domElement.ownerDocument.addEventListener("pointerlockchange", this.onPointerlockChange);
-      this.domElement.ownerDocument.addEventListener("pointerlockerror", this.onPointerlockError);
-    });
-    __publicField(this, "disconnect", () => {
-      if (!this.domElement)
-        return;
-      this.domElement.ownerDocument.removeEventListener("mousemove", this.onMouseMove);
-      this.domElement.ownerDocument.removeEventListener("pointerlockchange", this.onPointerlockChange);
-      this.domElement.ownerDocument.removeEventListener("pointerlockerror", this.onPointerlockError);
-    });
-    __publicField(this, "dispose", () => {
-      this.disconnect();
-    });
-    __publicField(this, "getObject", () => {
-      return this.camera;
-    });
-    __publicField(this, "direction", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 0, -1));
-    __publicField(this, "getDirection", (v) => {
-      return v.copy(this.direction).applyQuaternion(this.camera.quaternion);
-    });
-    __publicField(this, "moveForward", (distance) => {
-      _vector.setFromMatrixColumn(this.camera.matrix, 0);
-      _vector.crossVectors(this.camera.up, _vector);
-      this.camera.position.addScaledVector(_vector, distance);
-    });
-    __publicField(this, "moveRight", (distance) => {
-      _vector.setFromMatrixColumn(this.camera.matrix, 0);
-      this.camera.position.addScaledVector(_vector, distance);
-    });
-    __publicField(this, "lock", () => {
-      if (this.domElement)
-        this.domElement.requestPointerLock();
-    });
-    __publicField(this, "unlock", () => {
-      if (this.domElement)
-        this.domElement.ownerDocument.exitPointerLock();
-    });
-    this.camera = camera;
-    this.domElement = domElement;
-    this.isLocked = false;
-    this.minPolarAngle = 0;
-    this.maxPolarAngle = Math.PI;
-    this.pointerSpeed = 1;
-    if (domElement)
-      this.connect(domElement);
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 7703:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "$": () => (/* binding */ TrackballControls)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-class TrackballControls extends three__WEBPACK_IMPORTED_MODULE_0__.EventDispatcher {
-  constructor(object, domElement) {
-    super();
-    __publicField(this, "enabled", true);
-    __publicField(this, "screen", { left: 0, top: 0, width: 0, height: 0 });
-    __publicField(this, "rotateSpeed", 1);
-    __publicField(this, "zoomSpeed", 1.2);
-    __publicField(this, "panSpeed", 0.3);
-    __publicField(this, "noRotate", false);
-    __publicField(this, "noZoom", false);
-    __publicField(this, "noPan", false);
-    __publicField(this, "staticMoving", false);
-    __publicField(this, "dynamicDampingFactor", 0.2);
-    __publicField(this, "minDistance", 0);
-    __publicField(this, "maxDistance", Infinity);
-    __publicField(this, "keys", [
-      "KeyA",
-      "KeyS",
-      "KeyD"
-      /*D*/
-    ]);
-    __publicField(this, "mouseButtons", {
-      LEFT: three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.ROTATE,
-      MIDDLE: three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.DOLLY,
-      RIGHT: three__WEBPACK_IMPORTED_MODULE_0__.MOUSE.PAN
-    });
-    __publicField(this, "object");
-    __publicField(this, "domElement");
-    __publicField(this, "cursorZoom", false);
-    __publicField(this, "target", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "mousePosition", new three__WEBPACK_IMPORTED_MODULE_0__.Vector2());
-    // internals
-    __publicField(this, "STATE", {
-      NONE: -1,
-      ROTATE: 0,
-      ZOOM: 1,
-      PAN: 2,
-      TOUCH_ROTATE: 3,
-      TOUCH_ZOOM_PAN: 4
-    });
-    __publicField(this, "EPS", 1e-6);
-    __publicField(this, "lastZoom", 1);
-    __publicField(this, "lastPosition", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "cursorVector", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "targetVector", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "_state", this.STATE.NONE);
-    __publicField(this, "_keyState", this.STATE.NONE);
-    __publicField(this, "_eye", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "_movePrev", new three__WEBPACK_IMPORTED_MODULE_0__.Vector2());
-    __publicField(this, "_moveCurr", new three__WEBPACK_IMPORTED_MODULE_0__.Vector2());
-    __publicField(this, "_lastAxis", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "_lastAngle", 0);
-    __publicField(this, "_zoomStart", new three__WEBPACK_IMPORTED_MODULE_0__.Vector2());
-    __publicField(this, "_zoomEnd", new three__WEBPACK_IMPORTED_MODULE_0__.Vector2());
-    __publicField(this, "_touchZoomDistanceStart", 0);
-    __publicField(this, "_touchZoomDistanceEnd", 0);
-    __publicField(this, "_panStart", new three__WEBPACK_IMPORTED_MODULE_0__.Vector2());
-    __publicField(this, "_panEnd", new three__WEBPACK_IMPORTED_MODULE_0__.Vector2());
-    __publicField(this, "target0");
-    __publicField(this, "position0");
-    __publicField(this, "up0");
-    __publicField(this, "zoom0");
-    // events
-    __publicField(this, "changeEvent", { type: "change" });
-    __publicField(this, "startEvent", { type: "start" });
-    __publicField(this, "endEvent", { type: "end" });
-    __publicField(this, "onScreenVector", new three__WEBPACK_IMPORTED_MODULE_0__.Vector2());
-    __publicField(this, "getMouseOnScreen", (pageX, pageY) => {
-      this.onScreenVector.set(
-        (pageX - this.screen.left) / this.screen.width,
-        (pageY - this.screen.top) / this.screen.height
-      );
-      return this.onScreenVector;
-    });
-    __publicField(this, "onCircleVector", new three__WEBPACK_IMPORTED_MODULE_0__.Vector2());
-    __publicField(this, "getMouseOnCircle", (pageX, pageY) => {
-      this.onCircleVector.set(
-        (pageX - this.screen.width * 0.5 - this.screen.left) / (this.screen.width * 0.5),
-        (this.screen.height + 2 * (this.screen.top - pageY)) / this.screen.width
-        // screen.width intentional
-      );
-      return this.onCircleVector;
-    });
-    __publicField(this, "axis", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "quaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "eyeDirection", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "objectUpDirection", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "objectSidewaysDirection", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "moveDirection", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "angle", 0);
-    __publicField(this, "rotateCamera", () => {
-      this.moveDirection.set(this._moveCurr.x - this._movePrev.x, this._moveCurr.y - this._movePrev.y, 0);
-      this.angle = this.moveDirection.length();
-      if (this.angle) {
-        this._eye.copy(this.object.position).sub(this.target);
-        this.eyeDirection.copy(this._eye).normalize();
-        this.objectUpDirection.copy(this.object.up).normalize();
-        this.objectSidewaysDirection.crossVectors(this.objectUpDirection, this.eyeDirection).normalize();
-        this.objectUpDirection.setLength(this._moveCurr.y - this._movePrev.y);
-        this.objectSidewaysDirection.setLength(this._moveCurr.x - this._movePrev.x);
-        this.moveDirection.copy(this.objectUpDirection.add(this.objectSidewaysDirection));
-        this.axis.crossVectors(this.moveDirection, this._eye).normalize();
-        this.angle *= this.rotateSpeed;
-        this.quaternion.setFromAxisAngle(this.axis, this.angle);
-        this._eye.applyQuaternion(this.quaternion);
-        this.object.up.applyQuaternion(this.quaternion);
-        this._lastAxis.copy(this.axis);
-        this._lastAngle = this.angle;
-      } else if (!this.staticMoving && this._lastAngle) {
-        this._lastAngle *= Math.sqrt(1 - this.dynamicDampingFactor);
-        this._eye.copy(this.object.position).sub(this.target);
-        this.quaternion.setFromAxisAngle(this._lastAxis, this._lastAngle);
-        this._eye.applyQuaternion(this.quaternion);
-        this.object.up.applyQuaternion(this.quaternion);
-      }
-      this._movePrev.copy(this._moveCurr);
-    });
-    __publicField(this, "zoomCamera", () => {
-      let factor;
-      if (this._state === this.STATE.TOUCH_ZOOM_PAN) {
-        factor = this._touchZoomDistanceStart / this._touchZoomDistanceEnd;
-        this._touchZoomDistanceStart = this._touchZoomDistanceEnd;
-        if (this.object.isPerspectiveCamera) {
-          this._eye.multiplyScalar(factor);
-        } else if (this.object.isOrthographicCamera) {
-          this.object.zoom /= factor;
-          this.object.updateProjectionMatrix();
-        } else {
-          console.warn("THREE.TrackballControls: Unsupported camera type");
-        }
-      } else {
-        factor = 1 + (this._zoomEnd.y - this._zoomStart.y) * this.zoomSpeed;
-        if (Math.abs(factor - 1) > this.EPS && factor > 0) {
-          if (this.object.isPerspectiveCamera) {
-            if (factor > 1 && this._eye.length() >= this.maxDistance - this.EPS) {
-              factor = 1;
-            }
-            this._eye.multiplyScalar(factor);
-          } else if (this.object.isOrthographicCamera) {
-            if (factor > 1 && this.object.zoom < this.maxDistance * this.maxDistance) {
-              factor = 1;
-            }
-            this.object.zoom /= factor;
-          } else {
-            console.warn("THREE.TrackballControls: Unsupported camera type");
-          }
-        }
-        if (this.staticMoving) {
-          this._zoomStart.copy(this._zoomEnd);
-        } else {
-          this._zoomStart.y += (this._zoomEnd.y - this._zoomStart.y) * this.dynamicDampingFactor;
-        }
-        if (this.cursorZoom) {
-          this.targetVector.copy(this.target).project(this.object);
-          let worldPos = this.cursorVector.set(this.mousePosition.x, this.mousePosition.y, this.targetVector.z).unproject(this.object);
-          this.target.lerpVectors(worldPos, this.target, factor);
-        }
-        if (this.object.isOrthographicCamera) {
-          this.object.updateProjectionMatrix();
-        }
-      }
-    });
-    __publicField(this, "mouseChange", new three__WEBPACK_IMPORTED_MODULE_0__.Vector2());
-    __publicField(this, "objectUp", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "pan", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "panCamera", () => {
-      if (!this.domElement)
-        return;
-      this.mouseChange.copy(this._panEnd).sub(this._panStart);
-      if (this.mouseChange.lengthSq() > this.EPS) {
-        if (this.object.isOrthographicCamera) {
-          const orthoObject = this.object;
-          const scale_x = (orthoObject.right - orthoObject.left) / this.object.zoom;
-          const scale_y = (orthoObject.top - orthoObject.bottom) / this.object.zoom;
-          this.mouseChange.x *= scale_x;
-          this.mouseChange.y *= scale_y;
-        } else {
-          this.mouseChange.multiplyScalar(this._eye.length() * this.panSpeed);
-        }
-        this.pan.copy(this._eye).cross(this.object.up).setLength(this.mouseChange.x);
-        this.pan.add(this.objectUp.copy(this.object.up).setLength(this.mouseChange.y));
-        this.object.position.add(this.pan);
-        this.target.add(this.pan);
-        if (this.staticMoving) {
-          this._panStart.copy(this._panEnd);
-        } else {
-          this._panStart.add(
-            this.mouseChange.subVectors(this._panEnd, this._panStart).multiplyScalar(this.dynamicDampingFactor)
-          );
-        }
-      }
-    });
-    __publicField(this, "checkDistances", () => {
-      if (!this.noZoom || !this.noPan) {
-        if (this._eye.lengthSq() > this.maxDistance * this.maxDistance) {
-          this.object.position.addVectors(this.target, this._eye.setLength(this.maxDistance));
-          this._zoomStart.copy(this._zoomEnd);
-        }
-        if (this._eye.lengthSq() < this.minDistance * this.minDistance) {
-          this.object.position.addVectors(this.target, this._eye.setLength(this.minDistance));
-          this._zoomStart.copy(this._zoomEnd);
-        }
-      }
-    });
-    __publicField(this, "handleResize", () => {
-      if (!this.domElement)
-        return;
-      const box = this.domElement.getBoundingClientRect();
-      const d = this.domElement.ownerDocument.documentElement;
-      this.screen.left = box.left + window.pageXOffset - d.clientLeft;
-      this.screen.top = box.top + window.pageYOffset - d.clientTop;
-      this.screen.width = box.width;
-      this.screen.height = box.height;
-    });
-    __publicField(this, "update", () => {
-      this._eye.subVectors(this.object.position, this.target);
-      if (!this.noRotate) {
-        this.rotateCamera();
-      }
-      if (!this.noZoom) {
-        this.zoomCamera();
-      }
-      if (!this.noPan) {
-        this.panCamera();
-      }
-      this.object.position.addVectors(this.target, this._eye);
-      if (this.object.isPerspectiveCamera) {
-        this.checkDistances();
-        this.object.lookAt(this.target);
-        if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS) {
-          this.dispatchEvent(this.changeEvent);
-          this.lastPosition.copy(this.object.position);
-        }
-      } else if (this.object.isOrthographicCamera) {
-        this.object.lookAt(this.target);
-        if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS || this.lastZoom !== this.object.zoom) {
-          this.dispatchEvent(this.changeEvent);
-          this.lastPosition.copy(this.object.position);
-          this.lastZoom = this.object.zoom;
-        }
-      } else {
-        console.warn("THREE.TrackballControls: Unsupported camera type");
-      }
-    });
-    __publicField(this, "reset", () => {
-      this._state = this.STATE.NONE;
-      this._keyState = this.STATE.NONE;
-      this.target.copy(this.target0);
-      this.object.position.copy(this.position0);
-      this.object.up.copy(this.up0);
-      this.object.zoom = this.zoom0;
-      this.object.updateProjectionMatrix();
-      this._eye.subVectors(this.object.position, this.target);
-      this.object.lookAt(this.target);
-      this.dispatchEvent(this.changeEvent);
-      this.lastPosition.copy(this.object.position);
-      this.lastZoom = this.object.zoom;
-    });
-    __publicField(this, "keydown", (event) => {
-      if (this.enabled === false)
-        return;
-      window.removeEventListener("keydown", this.keydown);
-      if (this._keyState !== this.STATE.NONE) {
-        return;
-      } else if (event.code === this.keys[this.STATE.ROTATE] && !this.noRotate) {
-        this._keyState = this.STATE.ROTATE;
-      } else if (event.code === this.keys[this.STATE.ZOOM] && !this.noZoom) {
-        this._keyState = this.STATE.ZOOM;
-      } else if (event.code === this.keys[this.STATE.PAN] && !this.noPan) {
-        this._keyState = this.STATE.PAN;
-      }
-    });
-    __publicField(this, "onPointerDown", (event) => {
-      if (this.enabled === false)
-        return;
-      switch (event.pointerType) {
-        case "mouse":
-        case "pen":
-          this.onMouseDown(event);
-          break;
-      }
-    });
-    __publicField(this, "onPointerMove", (event) => {
-      if (this.enabled === false)
-        return;
-      switch (event.pointerType) {
-        case "mouse":
-        case "pen":
-          this.onMouseMove(event);
-          break;
-      }
-    });
-    __publicField(this, "onPointerUp", (event) => {
-      if (this.enabled === false)
-        return;
-      switch (event.pointerType) {
-        case "mouse":
-        case "pen":
-          this.onMouseUp();
-          break;
-      }
-    });
-    __publicField(this, "keyup", () => {
-      if (this.enabled === false)
-        return;
-      this._keyState = this.STATE.NONE;
-      window.addEventListener("keydown", this.keydown);
-    });
-    __publicField(this, "onMouseDown", (event) => {
-      if (!this.domElement)
-        return;
-      if (this._state === this.STATE.NONE) {
-        switch (event.button) {
-          case this.mouseButtons.LEFT:
-            this._state = this.STATE.ROTATE;
-            break;
-          case this.mouseButtons.MIDDLE:
-            this._state = this.STATE.ZOOM;
-            break;
-          case this.mouseButtons.RIGHT:
-            this._state = this.STATE.PAN;
-            break;
-          default:
-            this._state = this.STATE.NONE;
-        }
-      }
-      const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state;
-      if (state === this.STATE.ROTATE && !this.noRotate) {
-        this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY));
-        this._movePrev.copy(this._moveCurr);
-      } else if (state === this.STATE.ZOOM && !this.noZoom) {
-        this._zoomStart.copy(this.getMouseOnScreen(event.pageX, event.pageY));
-        this._zoomEnd.copy(this._zoomStart);
-      } else if (state === this.STATE.PAN && !this.noPan) {
-        this._panStart.copy(this.getMouseOnScreen(event.pageX, event.pageY));
-        this._panEnd.copy(this._panStart);
-      }
-      this.domElement.ownerDocument.addEventListener("pointermove", this.onPointerMove);
-      this.domElement.ownerDocument.addEventListener("pointerup", this.onPointerUp);
-      this.dispatchEvent(this.startEvent);
-    });
-    __publicField(this, "onMouseMove", (event) => {
-      if (this.enabled === false)
-        return;
-      const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state;
-      if (state === this.STATE.ROTATE && !this.noRotate) {
-        this._movePrev.copy(this._moveCurr);
-        this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY));
-      } else if (state === this.STATE.ZOOM && !this.noZoom) {
-        this._zoomEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY));
-      } else if (state === this.STATE.PAN && !this.noPan) {
-        this._panEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY));
-      }
-    });
-    __publicField(this, "onMouseUp", () => {
-      if (!this.domElement)
-        return;
-      if (this.enabled === false)
-        return;
-      this._state = this.STATE.NONE;
-      this.domElement.ownerDocument.removeEventListener("pointermove", this.onPointerMove);
-      this.domElement.ownerDocument.removeEventListener("pointerup", this.onPointerUp);
-      this.dispatchEvent(this.endEvent);
-    });
-    __publicField(this, "mousewheel", (event) => {
-      if (this.enabled === false)
-        return;
-      if (this.noZoom === true)
-        return;
-      event.preventDefault();
-      switch (event.deltaMode) {
-        case 2:
-          this._zoomStart.y -= event.deltaY * 0.025;
-          break;
-        case 1:
-          this._zoomStart.y -= event.deltaY * 0.01;
-          break;
-        default:
-          this._zoomStart.y -= event.deltaY * 25e-5;
-          break;
-      }
-      this.mousePosition.x = event.offsetX / this.screen.width * 2 - 1;
-      this.mousePosition.y = -(event.offsetY / this.screen.height) * 2 + 1;
-      this.dispatchEvent(this.startEvent);
-      this.dispatchEvent(this.endEvent);
-    });
-    __publicField(this, "touchstart", (event) => {
-      if (this.enabled === false)
-        return;
-      event.preventDefault();
-      switch (event.touches.length) {
-        case 1:
-          this._state = this.STATE.TOUCH_ROTATE;
-          this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));
-          this._movePrev.copy(this._moveCurr);
-          break;
-        default:
-          this._state = this.STATE.TOUCH_ZOOM_PAN;
-          const dx = event.touches[0].pageX - event.touches[1].pageX;
-          const dy = event.touches[0].pageY - event.touches[1].pageY;
-          this._touchZoomDistanceEnd = this._touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy);
-          const x = (event.touches[0].pageX + event.touches[1].pageX) / 2;
-          const y = (event.touches[0].pageY + event.touches[1].pageY) / 2;
-          this._panStart.copy(this.getMouseOnScreen(x, y));
-          this._panEnd.copy(this._panStart);
-          break;
-      }
-      this.dispatchEvent(this.startEvent);
-    });
-    __publicField(this, "touchmove", (event) => {
-      if (this.enabled === false)
-        return;
-      event.preventDefault();
-      switch (event.touches.length) {
-        case 1:
-          this._movePrev.copy(this._moveCurr);
-          this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));
-          break;
-        default:
-          const dx = event.touches[0].pageX - event.touches[1].pageX;
-          const dy = event.touches[0].pageY - event.touches[1].pageY;
-          this._touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy);
-          const x = (event.touches[0].pageX + event.touches[1].pageX) / 2;
-          const y = (event.touches[0].pageY + event.touches[1].pageY) / 2;
-          this._panEnd.copy(this.getMouseOnScreen(x, y));
-          break;
-      }
-    });
-    __publicField(this, "touchend", (event) => {
-      if (this.enabled === false)
-        return;
-      switch (event.touches.length) {
-        case 0:
-          this._state = this.STATE.NONE;
-          break;
-        case 1:
-          this._state = this.STATE.TOUCH_ROTATE;
-          this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));
-          this._movePrev.copy(this._moveCurr);
-          break;
-      }
-      this.dispatchEvent(this.endEvent);
-    });
-    __publicField(this, "contextmenu", (event) => {
-      if (this.enabled === false)
-        return;
-      event.preventDefault();
-    });
-    // https://github.com/mrdoob/three.js/issues/20575
-    __publicField(this, "connect", (domElement) => {
-      if (domElement === document) {
-        console.error(
-          'THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.'
-        );
-      }
-      this.domElement = domElement;
-      this.domElement.addEventListener("contextmenu", this.contextmenu);
-      this.domElement.addEventListener("pointerdown", this.onPointerDown);
-      this.domElement.addEventListener("wheel", this.mousewheel);
-      this.domElement.addEventListener("touchstart", this.touchstart);
-      this.domElement.addEventListener("touchend", this.touchend);
-      this.domElement.addEventListener("touchmove", this.touchmove);
-      this.domElement.ownerDocument.addEventListener("pointermove", this.onPointerMove);
-      this.domElement.ownerDocument.addEventListener("pointerup", this.onPointerUp);
-      window.addEventListener("keydown", this.keydown);
-      window.addEventListener("keyup", this.keyup);
-      this.handleResize();
-    });
-    __publicField(this, "dispose", () => {
-      if (!this.domElement)
-        return;
-      this.domElement.removeEventListener("contextmenu", this.contextmenu);
-      this.domElement.removeEventListener("pointerdown", this.onPointerDown);
-      this.domElement.removeEventListener("wheel", this.mousewheel);
-      this.domElement.removeEventListener("touchstart", this.touchstart);
-      this.domElement.removeEventListener("touchend", this.touchend);
-      this.domElement.removeEventListener("touchmove", this.touchmove);
-      this.domElement.ownerDocument.removeEventListener("pointermove", this.onPointerMove);
-      this.domElement.ownerDocument.removeEventListener("pointerup", this.onPointerUp);
-      window.removeEventListener("keydown", this.keydown);
-      window.removeEventListener("keyup", this.keyup);
-    });
-    this.object = object;
-    this.target0 = this.target.clone();
-    this.position0 = this.object.position.clone();
-    this.up0 = this.object.up.clone();
-    this.zoom0 = this.object.zoom;
-    if (domElement !== void 0)
-      this.connect(domElement);
-    this.update();
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 35041:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "EC": () => (/* binding */ TransformControlsPlane),
-/* harmony export */   "JW": () => (/* binding */ TransformControlsGizmo),
-/* harmony export */   "Ys": () => (/* binding */ TransformControls)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-class TransformControls extends three__WEBPACK_IMPORTED_MODULE_0__.Object3D {
-  constructor(camera, domElement) {
-    super();
-    __publicField(this, "isTransformControls", true);
-    __publicField(this, "visible", false);
-    __publicField(this, "domElement");
-    __publicField(this, "raycaster", new three__WEBPACK_IMPORTED_MODULE_0__.Raycaster());
-    __publicField(this, "gizmo");
-    __publicField(this, "plane");
-    __publicField(this, "tempVector", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "tempVector2", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "tempQuaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "unit", {
-      X: new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(1, 0, 0),
-      Y: new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 1, 0),
-      Z: new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 0, 1)
-    });
-    __publicField(this, "pointStart", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "pointEnd", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "offset", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "rotationAxis", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "startNorm", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "endNorm", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "rotationAngle", 0);
-    __publicField(this, "cameraPosition", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "cameraQuaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "cameraScale", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "parentPosition", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "parentQuaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "parentQuaternionInv", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "parentScale", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "worldPositionStart", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "worldQuaternionStart", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "worldScaleStart", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "worldPosition", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "worldQuaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "worldQuaternionInv", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "worldScale", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "eye", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "positionStart", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "quaternionStart", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "scaleStart", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "camera");
-    __publicField(this, "object");
-    __publicField(this, "enabled", true);
-    __publicField(this, "axis", null);
-    __publicField(this, "mode", "translate");
-    __publicField(this, "translationSnap", null);
-    __publicField(this, "rotationSnap", null);
-    __publicField(this, "scaleSnap", null);
-    __publicField(this, "space", "world");
-    __publicField(this, "size", 1);
-    __publicField(this, "dragging", false);
-    __publicField(this, "showX", true);
-    __publicField(this, "showY", true);
-    __publicField(this, "showZ", true);
-    // events
-    __publicField(this, "changeEvent", { type: "change" });
-    __publicField(this, "mouseDownEvent", { type: "mouseDown", mode: this.mode });
-    __publicField(this, "mouseUpEvent", { type: "mouseUp", mode: this.mode });
-    __publicField(this, "objectChangeEvent", { type: "objectChange" });
-    __publicField(this, "intersectObjectWithRay", (object, raycaster, includeInvisible) => {
-      const allIntersections = raycaster.intersectObject(object, true);
-      for (let i = 0; i < allIntersections.length; i++) {
-        if (allIntersections[i].object.visible || includeInvisible) {
-          return allIntersections[i];
-        }
-      }
-      return false;
-    });
-    // Set current object
-    __publicField(this, "attach", (object) => {
-      this.object = object;
-      this.visible = true;
-      return this;
-    });
-    // Detatch from object
-    __publicField(this, "detach", () => {
-      this.object = void 0;
-      this.visible = false;
-      this.axis = null;
-      return this;
-    });
-    // Reset
-    __publicField(this, "reset", () => {
-      if (!this.enabled)
-        return this;
-      if (this.dragging) {
-        if (this.object !== void 0) {
-          this.object.position.copy(this.positionStart);
-          this.object.quaternion.copy(this.quaternionStart);
-          this.object.scale.copy(this.scaleStart);
-          this.dispatchEvent(this.changeEvent);
-          this.dispatchEvent(this.objectChangeEvent);
-          this.pointStart.copy(this.pointEnd);
-        }
-      }
-      return this;
-    });
-    __publicField(this, "updateMatrixWorld", () => {
-      if (this.object !== void 0) {
-        this.object.updateMatrixWorld();
-        if (this.object.parent === null) {
-          console.error("TransformControls: The attached 3D object must be a part of the scene graph.");
-        } else {
-          this.object.parent.matrixWorld.decompose(this.parentPosition, this.parentQuaternion, this.parentScale);
-        }
-        this.object.matrixWorld.decompose(this.worldPosition, this.worldQuaternion, this.worldScale);
-        this.parentQuaternionInv.copy(this.parentQuaternion).invert();
-        this.worldQuaternionInv.copy(this.worldQuaternion).invert();
-      }
-      this.camera.updateMatrixWorld();
-      this.camera.matrixWorld.decompose(this.cameraPosition, this.cameraQuaternion, this.cameraScale);
-      this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize();
-      super.updateMatrixWorld();
-    });
-    __publicField(this, "pointerHover", (pointer) => {
-      if (this.object === void 0 || this.dragging === true)
-        return;
-      this.raycaster.setFromCamera(pointer, this.camera);
-      const intersect = this.intersectObjectWithRay(this.gizmo.picker[this.mode], this.raycaster);
-      if (intersect) {
-        this.axis = intersect.object.name;
-      } else {
-        this.axis = null;
-      }
-    });
-    __publicField(this, "pointerDown", (pointer) => {
-      if (this.object === void 0 || this.dragging === true || pointer.button !== 0)
-        return;
-      if (this.axis !== null) {
-        this.raycaster.setFromCamera(pointer, this.camera);
-        const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true);
-        if (planeIntersect) {
-          let space = this.space;
-          if (this.mode === "scale") {
-            space = "local";
-          } else if (this.axis === "E" || this.axis === "XYZE" || this.axis === "XYZ") {
-            space = "world";
-          }
-          if (space === "local" && this.mode === "rotate") {
-            const snap = this.rotationSnap;
-            if (this.axis === "X" && snap)
-              this.object.rotation.x = Math.round(this.object.rotation.x / snap) * snap;
-            if (this.axis === "Y" && snap)
-              this.object.rotation.y = Math.round(this.object.rotation.y / snap) * snap;
-            if (this.axis === "Z" && snap)
-              this.object.rotation.z = Math.round(this.object.rotation.z / snap) * snap;
-          }
-          this.object.updateMatrixWorld();
-          if (this.object.parent) {
-            this.object.parent.updateMatrixWorld();
-          }
-          this.positionStart.copy(this.object.position);
-          this.quaternionStart.copy(this.object.quaternion);
-          this.scaleStart.copy(this.object.scale);
-          this.object.matrixWorld.decompose(this.worldPositionStart, this.worldQuaternionStart, this.worldScaleStart);
-          this.pointStart.copy(planeIntersect.point).sub(this.worldPositionStart);
-        }
-        this.dragging = true;
-        this.mouseDownEvent.mode = this.mode;
-        this.dispatchEvent(this.mouseDownEvent);
-      }
-    });
-    __publicField(this, "pointerMove", (pointer) => {
-      const axis = this.axis;
-      const mode = this.mode;
-      const object = this.object;
-      let space = this.space;
-      if (mode === "scale") {
-        space = "local";
-      } else if (axis === "E" || axis === "XYZE" || axis === "XYZ") {
-        space = "world";
-      }
-      if (object === void 0 || axis === null || this.dragging === false || pointer.button !== -1)
-        return;
-      this.raycaster.setFromCamera(pointer, this.camera);
-      const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true);
-      if (!planeIntersect)
-        return;
-      this.pointEnd.copy(planeIntersect.point).sub(this.worldPositionStart);
-      if (mode === "translate") {
-        this.offset.copy(this.pointEnd).sub(this.pointStart);
-        if (space === "local" && axis !== "XYZ") {
-          this.offset.applyQuaternion(this.worldQuaternionInv);
-        }
-        if (axis.indexOf("X") === -1)
-          this.offset.x = 0;
-        if (axis.indexOf("Y") === -1)
-          this.offset.y = 0;
-        if (axis.indexOf("Z") === -1)
-          this.offset.z = 0;
-        if (space === "local" && axis !== "XYZ") {
-          this.offset.applyQuaternion(this.quaternionStart).divide(this.parentScale);
-        } else {
-          this.offset.applyQuaternion(this.parentQuaternionInv).divide(this.parentScale);
-        }
-        object.position.copy(this.offset).add(this.positionStart);
-        if (this.translationSnap) {
-          if (space === "local") {
-            object.position.applyQuaternion(this.tempQuaternion.copy(this.quaternionStart).invert());
-            if (axis.search("X") !== -1) {
-              object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap;
-            }
-            if (axis.search("Y") !== -1) {
-              object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap;
-            }
-            if (axis.search("Z") !== -1) {
-              object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap;
-            }
-            object.position.applyQuaternion(this.quaternionStart);
-          }
-          if (space === "world") {
-            if (object.parent) {
-              object.position.add(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld));
-            }
-            if (axis.search("X") !== -1) {
-              object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap;
-            }
-            if (axis.search("Y") !== -1) {
-              object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap;
-            }
-            if (axis.search("Z") !== -1) {
-              object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap;
-            }
-            if (object.parent) {
-              object.position.sub(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld));
-            }
-          }
-        }
-      } else if (mode === "scale") {
-        if (axis.search("XYZ") !== -1) {
-          let d = this.pointEnd.length() / this.pointStart.length();
-          if (this.pointEnd.dot(this.pointStart) < 0)
-            d *= -1;
-          this.tempVector2.set(d, d, d);
-        } else {
-          this.tempVector.copy(this.pointStart);
-          this.tempVector2.copy(this.pointEnd);
-          this.tempVector.applyQuaternion(this.worldQuaternionInv);
-          this.tempVector2.applyQuaternion(this.worldQuaternionInv);
-          this.tempVector2.divide(this.tempVector);
-          if (axis.search("X") === -1) {
-            this.tempVector2.x = 1;
-          }
-          if (axis.search("Y") === -1) {
-            this.tempVector2.y = 1;
-          }
-          if (axis.search("Z") === -1) {
-            this.tempVector2.z = 1;
-          }
-        }
-        object.scale.copy(this.scaleStart).multiply(this.tempVector2);
-        if (this.scaleSnap && this.object) {
-          if (axis.search("X") !== -1) {
-            this.object.scale.x = Math.round(object.scale.x / this.scaleSnap) * this.scaleSnap || this.scaleSnap;
-          }
-          if (axis.search("Y") !== -1) {
-            object.scale.y = Math.round(object.scale.y / this.scaleSnap) * this.scaleSnap || this.scaleSnap;
-          }
-          if (axis.search("Z") !== -1) {
-            object.scale.z = Math.round(object.scale.z / this.scaleSnap) * this.scaleSnap || this.scaleSnap;
-          }
-        }
-      } else if (mode === "rotate") {
-        this.offset.copy(this.pointEnd).sub(this.pointStart);
-        const ROTATION_SPEED = 20 / this.worldPosition.distanceTo(this.tempVector.setFromMatrixPosition(this.camera.matrixWorld));
-        if (axis === "E") {
-          this.rotationAxis.copy(this.eye);
-          this.rotationAngle = this.pointEnd.angleTo(this.pointStart);
-          this.startNorm.copy(this.pointStart).normalize();
-          this.endNorm.copy(this.pointEnd).normalize();
-          this.rotationAngle *= this.endNorm.cross(this.startNorm).dot(this.eye) < 0 ? 1 : -1;
-        } else if (axis === "XYZE") {
-          this.rotationAxis.copy(this.offset).cross(this.eye).normalize();
-          this.rotationAngle = this.offset.dot(this.tempVector.copy(this.rotationAxis).cross(this.eye)) * ROTATION_SPEED;
-        } else if (axis === "X" || axis === "Y" || axis === "Z") {
-          this.rotationAxis.copy(this.unit[axis]);
-          this.tempVector.copy(this.unit[axis]);
-          if (space === "local") {
-            this.tempVector.applyQuaternion(this.worldQuaternion);
-          }
-          this.rotationAngle = this.offset.dot(this.tempVector.cross(this.eye).normalize()) * ROTATION_SPEED;
-        }
-        if (this.rotationSnap) {
-          this.rotationAngle = Math.round(this.rotationAngle / this.rotationSnap) * this.rotationSnap;
-        }
-        if (space === "local" && axis !== "E" && axis !== "XYZE") {
-          object.quaternion.copy(this.quaternionStart);
-          object.quaternion.multiply(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle)).normalize();
-        } else {
-          this.rotationAxis.applyQuaternion(this.parentQuaternionInv);
-          object.quaternion.copy(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle));
-          object.quaternion.multiply(this.quaternionStart).normalize();
-        }
-      }
-      this.dispatchEvent(this.changeEvent);
-      this.dispatchEvent(this.objectChangeEvent);
-    });
-    __publicField(this, "pointerUp", (pointer) => {
-      if (pointer.button !== 0)
-        return;
-      if (this.dragging && this.axis !== null) {
-        this.mouseUpEvent.mode = this.mode;
-        this.dispatchEvent(this.mouseUpEvent);
-      }
-      this.dragging = false;
-      this.axis = null;
-    });
-    __publicField(this, "getPointer", (event) => {
-      var _a, _b;
-      if (this.domElement && ((_a = this.domElement.ownerDocument) == null ? void 0 : _a.pointerLockElement)) {
-        return {
-          x: 0,
-          y: 0,
-          button: event.button
-        };
-      } else {
-        const pointer = event.changedTouches ? event.changedTouches[0] : event;
-        const rect = (_b = this.domElement) == null ? void 0 : _b.getBoundingClientRect();
-        return {
-          x: (pointer.clientX - rect.left) / rect.width * 2 - 1,
-          y: -(pointer.clientY - rect.top) / rect.height * 2 + 1,
-          button: event.button
-        };
-      }
-    });
-    __publicField(this, "onPointerHover", (event) => {
-      if (!this.enabled)
-        return;
-      switch (event.pointerType) {
-        case "mouse":
-        case "pen":
-          this.pointerHover(this.getPointer(event));
-          break;
-      }
-    });
-    __publicField(this, "onPointerDown", (event) => {
-      if (!this.enabled || !this.domElement)
-        return;
-      this.domElement.style.touchAction = "none";
-      this.domElement.ownerDocument.addEventListener("pointermove", this.onPointerMove);
-      this.pointerHover(this.getPointer(event));
-      this.pointerDown(this.getPointer(event));
-    });
-    __publicField(this, "onPointerMove", (event) => {
-      if (!this.enabled)
-        return;
-      this.pointerMove(this.getPointer(event));
-    });
-    __publicField(this, "onPointerUp", (event) => {
-      if (!this.enabled || !this.domElement)
-        return;
-      this.domElement.style.touchAction = "";
-      this.domElement.ownerDocument.removeEventListener("pointermove", this.onPointerMove);
-      this.pointerUp(this.getPointer(event));
-    });
-    __publicField(this, "getMode", () => this.mode);
-    __publicField(this, "setMode", (mode) => {
-      this.mode = mode;
-    });
-    __publicField(this, "setTranslationSnap", (translationSnap) => {
-      this.translationSnap = translationSnap;
-    });
-    __publicField(this, "setRotationSnap", (rotationSnap) => {
-      this.rotationSnap = rotationSnap;
-    });
-    __publicField(this, "setScaleSnap", (scaleSnap) => {
-      this.scaleSnap = scaleSnap;
-    });
-    __publicField(this, "setSize", (size) => {
-      this.size = size;
-    });
-    __publicField(this, "setSpace", (space) => {
-      this.space = space;
-    });
-    __publicField(this, "update", () => {
-      console.warn(
-        "THREE.TransformControls: update function has no more functionality and therefore has been deprecated."
-      );
-    });
-    __publicField(this, "connect", (domElement) => {
-      if (domElement === document) {
-        console.error(
-          'THREE.OrbitControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.'
-        );
-      }
-      this.domElement = domElement;
-      this.domElement.addEventListener("pointerdown", this.onPointerDown);
-      this.domElement.addEventListener("pointermove", this.onPointerHover);
-      this.domElement.ownerDocument.addEventListener("pointerup", this.onPointerUp);
-    });
-    __publicField(this, "dispose", () => {
-      var _a, _b, _c, _d, _e, _f;
-      (_a = this.domElement) == null ? void 0 : _a.removeEventListener("pointerdown", this.onPointerDown);
-      (_b = this.domElement) == null ? void 0 : _b.removeEventListener("pointermove", this.onPointerHover);
-      (_d = (_c = this.domElement) == null ? void 0 : _c.ownerDocument) == null ? void 0 : _d.removeEventListener("pointermove", this.onPointerMove);
-      (_f = (_e = this.domElement) == null ? void 0 : _e.ownerDocument) == null ? void 0 : _f.removeEventListener("pointerup", this.onPointerUp);
-      this.traverse((child) => {
-        const mesh = child;
-        if (mesh.geometry) {
-          mesh.geometry.dispose();
-        }
-        if (mesh.material) {
-          mesh.material.dispose();
-        }
-      });
-    });
-    this.domElement = domElement;
-    this.camera = camera;
-    this.gizmo = new TransformControlsGizmo();
-    this.add(this.gizmo);
-    this.plane = new TransformControlsPlane();
-    this.add(this.plane);
-    const defineProperty = (propName, defaultValue) => {
-      let propValue = defaultValue;
-      Object.defineProperty(this, propName, {
-        get: function() {
-          return propValue !== void 0 ? propValue : defaultValue;
-        },
-        set: function(value) {
-          if (propValue !== value) {
-            propValue = value;
-            this.plane[propName] = value;
-            this.gizmo[propName] = value;
-            this.dispatchEvent({ type: propName + "-changed", value });
-            this.dispatchEvent(this.changeEvent);
-          }
-        }
-      });
-      this[propName] = defaultValue;
-      this.plane[propName] = defaultValue;
-      this.gizmo[propName] = defaultValue;
-    };
-    defineProperty("camera", this.camera);
-    defineProperty("object", this.object);
-    defineProperty("enabled", this.enabled);
-    defineProperty("axis", this.axis);
-    defineProperty("mode", this.mode);
-    defineProperty("translationSnap", this.translationSnap);
-    defineProperty("rotationSnap", this.rotationSnap);
-    defineProperty("scaleSnap", this.scaleSnap);
-    defineProperty("space", this.space);
-    defineProperty("size", this.size);
-    defineProperty("dragging", this.dragging);
-    defineProperty("showX", this.showX);
-    defineProperty("showY", this.showY);
-    defineProperty("showZ", this.showZ);
-    defineProperty("worldPosition", this.worldPosition);
-    defineProperty("worldPositionStart", this.worldPositionStart);
-    defineProperty("worldQuaternion", this.worldQuaternion);
-    defineProperty("worldQuaternionStart", this.worldQuaternionStart);
-    defineProperty("cameraPosition", this.cameraPosition);
-    defineProperty("cameraQuaternion", this.cameraQuaternion);
-    defineProperty("pointStart", this.pointStart);
-    defineProperty("pointEnd", this.pointEnd);
-    defineProperty("rotationAxis", this.rotationAxis);
-    defineProperty("rotationAngle", this.rotationAngle);
-    defineProperty("eye", this.eye);
-    if (domElement !== void 0)
-      this.connect(domElement);
-  }
-}
-class TransformControlsGizmo extends three__WEBPACK_IMPORTED_MODULE_0__.Object3D {
-  constructor() {
-    super();
-    __publicField(this, "isTransformControlsGizmo", true);
-    __publicField(this, "type", "TransformControlsGizmo");
-    __publicField(this, "tempVector", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 0, 0));
-    __publicField(this, "tempEuler", new three__WEBPACK_IMPORTED_MODULE_0__.Euler());
-    __publicField(this, "alignVector", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 1, 0));
-    __publicField(this, "zeroVector", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 0, 0));
-    __publicField(this, "lookAtMatrix", new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4());
-    __publicField(this, "tempQuaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "tempQuaternion2", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "identityQuaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "unitX", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(1, 0, 0));
-    __publicField(this, "unitY", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 1, 0));
-    __publicField(this, "unitZ", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 0, 1));
-    __publicField(this, "gizmo");
-    __publicField(this, "picker");
-    __publicField(this, "helper");
-    // these are set from parent class TransformControls
-    __publicField(this, "rotationAxis", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "cameraPosition", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "worldPositionStart", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "worldQuaternionStart", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "worldPosition", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "worldQuaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "eye", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "camera", null);
-    __publicField(this, "enabled", true);
-    __publicField(this, "axis", null);
-    __publicField(this, "mode", "translate");
-    __publicField(this, "space", "world");
-    __publicField(this, "size", 1);
-    __publicField(this, "dragging", false);
-    __publicField(this, "showX", true);
-    __publicField(this, "showY", true);
-    __publicField(this, "showZ", true);
-    // updateMatrixWorld will update transformations and appearance of individual handles
-    __publicField(this, "updateMatrixWorld", () => {
-      let space = this.space;
-      if (this.mode === "scale") {
-        space = "local";
-      }
-      const quaternion = space === "local" ? this.worldQuaternion : this.identityQuaternion;
-      this.gizmo["translate"].visible = this.mode === "translate";
-      this.gizmo["rotate"].visible = this.mode === "rotate";
-      this.gizmo["scale"].visible = this.mode === "scale";
-      this.helper["translate"].visible = this.mode === "translate";
-      this.helper["rotate"].visible = this.mode === "rotate";
-      this.helper["scale"].visible = this.mode === "scale";
-      let handles = [];
-      handles = handles.concat(this.picker[this.mode].children);
-      handles = handles.concat(this.gizmo[this.mode].children);
-      handles = handles.concat(this.helper[this.mode].children);
-      for (let i = 0; i < handles.length; i++) {
-        const handle = handles[i];
-        handle.visible = true;
-        handle.rotation.set(0, 0, 0);
-        handle.position.copy(this.worldPosition);
-        let factor;
-        if (this.camera.isOrthographicCamera) {
-          factor = (this.camera.top - this.camera.bottom) / this.camera.zoom;
-        } else {
-          factor = this.worldPosition.distanceTo(this.cameraPosition) * Math.min(1.9 * Math.tan(Math.PI * this.camera.fov / 360) / this.camera.zoom, 7);
-        }
-        handle.scale.set(1, 1, 1).multiplyScalar(factor * this.size / 7);
-        if (handle.tag === "helper") {
-          handle.visible = false;
-          if (handle.name === "AXIS") {
-            handle.position.copy(this.worldPositionStart);
-            handle.visible = !!this.axis;
-            if (this.axis === "X") {
-              this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, 0));
-              handle.quaternion.copy(quaternion).multiply(this.tempQuaternion);
-              if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {
-                handle.visible = false;
-              }
-            }
-            if (this.axis === "Y") {
-              this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, Math.PI / 2));
-              handle.quaternion.copy(quaternion).multiply(this.tempQuaternion);
-              if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {
-                handle.visible = false;
-              }
-            }
-            if (this.axis === "Z") {
-              this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0));
-              handle.quaternion.copy(quaternion).multiply(this.tempQuaternion);
-              if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {
-                handle.visible = false;
-              }
-            }
-            if (this.axis === "XYZE") {
-              this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0));
-              this.alignVector.copy(this.rotationAxis);
-              handle.quaternion.setFromRotationMatrix(
-                this.lookAtMatrix.lookAt(this.zeroVector, this.alignVector, this.unitY)
-              );
-              handle.quaternion.multiply(this.tempQuaternion);
-              handle.visible = this.dragging;
-            }
-            if (this.axis === "E") {
-              handle.visible = false;
-            }
-          } else if (handle.name === "START") {
-            handle.position.copy(this.worldPositionStart);
-            handle.visible = this.dragging;
-          } else if (handle.name === "END") {
-            handle.position.copy(this.worldPosition);
-            handle.visible = this.dragging;
-          } else if (handle.name === "DELTA") {
-            handle.position.copy(this.worldPositionStart);
-            handle.quaternion.copy(this.worldQuaternionStart);
-            this.tempVector.set(1e-10, 1e-10, 1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1);
-            this.tempVector.applyQuaternion(this.worldQuaternionStart.clone().invert());
-            handle.scale.copy(this.tempVector);
-            handle.visible = this.dragging;
-          } else {
-            handle.quaternion.copy(quaternion);
-            if (this.dragging) {
-              handle.position.copy(this.worldPositionStart);
-            } else {
-              handle.position.copy(this.worldPosition);
-            }
-            if (this.axis) {
-              handle.visible = this.axis.search(handle.name) !== -1;
-            }
-          }
-          continue;
-        }
-        handle.quaternion.copy(quaternion);
-        if (this.mode === "translate" || this.mode === "scale") {
-          const AXIS_HIDE_TRESHOLD = 0.99;
-          const PLANE_HIDE_TRESHOLD = 0.2;
-          const AXIS_FLIP_TRESHOLD = 0;
-          if (handle.name === "X" || handle.name === "XYZX") {
-            if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) {
-              handle.scale.set(1e-10, 1e-10, 1e-10);
-              handle.visible = false;
-            }
-          }
-          if (handle.name === "Y" || handle.name === "XYZY") {
-            if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) {
-              handle.scale.set(1e-10, 1e-10, 1e-10);
-              handle.visible = false;
-            }
-          }
-          if (handle.name === "Z" || handle.name === "XYZZ") {
-            if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) {
-              handle.scale.set(1e-10, 1e-10, 1e-10);
-              handle.visible = false;
-            }
-          }
-          if (handle.name === "XY") {
-            if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) {
-              handle.scale.set(1e-10, 1e-10, 1e-10);
-              handle.visible = false;
-            }
-          }
-          if (handle.name === "YZ") {
-            if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) {
-              handle.scale.set(1e-10, 1e-10, 1e-10);
-              handle.visible = false;
-            }
-          }
-          if (handle.name === "XZ") {
-            if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) {
-              handle.scale.set(1e-10, 1e-10, 1e-10);
-              handle.visible = false;
-            }
-          }
-          if (handle.name.search("X") !== -1) {
-            if (this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {
-              if (handle.tag === "fwd") {
-                handle.visible = false;
-              } else {
-                handle.scale.x *= -1;
-              }
-            } else if (handle.tag === "bwd") {
-              handle.visible = false;
-            }
-          }
-          if (handle.name.search("Y") !== -1) {
-            if (this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {
-              if (handle.tag === "fwd") {
-                handle.visible = false;
-              } else {
-                handle.scale.y *= -1;
-              }
-            } else if (handle.tag === "bwd") {
-              handle.visible = false;
-            }
-          }
-          if (handle.name.search("Z") !== -1) {
-            if (this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {
-              if (handle.tag === "fwd") {
-                handle.visible = false;
-              } else {
-                handle.scale.z *= -1;
-              }
-            } else if (handle.tag === "bwd") {
-              handle.visible = false;
-            }
-          }
-        } else if (this.mode === "rotate") {
-          this.tempQuaternion2.copy(quaternion);
-          this.alignVector.copy(this.eye).applyQuaternion(this.tempQuaternion.copy(quaternion).invert());
-          if (handle.name.search("E") !== -1) {
-            handle.quaternion.setFromRotationMatrix(this.lookAtMatrix.lookAt(this.eye, this.zeroVector, this.unitY));
-          }
-          if (handle.name === "X") {
-            this.tempQuaternion.setFromAxisAngle(this.unitX, Math.atan2(-this.alignVector.y, this.alignVector.z));
-            this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion);
-            handle.quaternion.copy(this.tempQuaternion);
-          }
-          if (handle.name === "Y") {
-            this.tempQuaternion.setFromAxisAngle(this.unitY, Math.atan2(this.alignVector.x, this.alignVector.z));
-            this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion);
-            handle.quaternion.copy(this.tempQuaternion);
-          }
-          if (handle.name === "Z") {
-            this.tempQuaternion.setFromAxisAngle(this.unitZ, Math.atan2(this.alignVector.y, this.alignVector.x));
-            this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion);
-            handle.quaternion.copy(this.tempQuaternion);
-          }
-        }
-        handle.visible = handle.visible && (handle.name.indexOf("X") === -1 || this.showX);
-        handle.visible = handle.visible && (handle.name.indexOf("Y") === -1 || this.showY);
-        handle.visible = handle.visible && (handle.name.indexOf("Z") === -1 || this.showZ);
-        handle.visible = handle.visible && (handle.name.indexOf("E") === -1 || this.showX && this.showY && this.showZ);
-        handle.material.tempOpacity = handle.material.tempOpacity || handle.material.opacity;
-        handle.material.tempColor = handle.material.tempColor || handle.material.color.clone();
-        handle.material.color.copy(handle.material.tempColor);
-        handle.material.opacity = handle.material.tempOpacity;
-        if (!this.enabled) {
-          handle.material.opacity *= 0.5;
-          handle.material.color.lerp(new three__WEBPACK_IMPORTED_MODULE_0__.Color(1, 1, 1), 0.5);
-        } else if (this.axis) {
-          if (handle.name === this.axis) {
-            handle.material.opacity = 1;
-            handle.material.color.lerp(new three__WEBPACK_IMPORTED_MODULE_0__.Color(1, 1, 1), 0.5);
-          } else if (this.axis.split("").some(function(a) {
-            return handle.name === a;
-          })) {
-            handle.material.opacity = 1;
-            handle.material.color.lerp(new three__WEBPACK_IMPORTED_MODULE_0__.Color(1, 1, 1), 0.5);
-          } else {
-            handle.material.opacity *= 0.25;
-            handle.material.color.lerp(new three__WEBPACK_IMPORTED_MODULE_0__.Color(1, 1, 1), 0.5);
-          }
-        }
-      }
-      super.updateMatrixWorld();
-    });
-    const gizmoMaterial = new three__WEBPACK_IMPORTED_MODULE_0__.MeshBasicMaterial({
-      depthTest: false,
-      depthWrite: false,
-      transparent: true,
-      side: three__WEBPACK_IMPORTED_MODULE_0__.DoubleSide,
-      fog: false,
-      toneMapped: false
-    });
-    const gizmoLineMaterial = new three__WEBPACK_IMPORTED_MODULE_0__.LineBasicMaterial({
-      depthTest: false,
-      depthWrite: false,
-      transparent: true,
-      linewidth: 1,
-      fog: false,
-      toneMapped: false
-    });
-    const matInvisible = gizmoMaterial.clone();
-    matInvisible.opacity = 0.15;
-    const matHelper = gizmoMaterial.clone();
-    matHelper.opacity = 0.33;
-    const matRed = gizmoMaterial.clone();
-    matRed.color.set(16711680);
-    const matGreen = gizmoMaterial.clone();
-    matGreen.color.set(65280);
-    const matBlue = gizmoMaterial.clone();
-    matBlue.color.set(255);
-    const matWhiteTransparent = gizmoMaterial.clone();
-    matWhiteTransparent.opacity = 0.25;
-    const matYellowTransparent = matWhiteTransparent.clone();
-    matYellowTransparent.color.set(16776960);
-    const matCyanTransparent = matWhiteTransparent.clone();
-    matCyanTransparent.color.set(65535);
-    const matMagentaTransparent = matWhiteTransparent.clone();
-    matMagentaTransparent.color.set(16711935);
-    const matYellow = gizmoMaterial.clone();
-    matYellow.color.set(16776960);
-    const matLineRed = gizmoLineMaterial.clone();
-    matLineRed.color.set(16711680);
-    const matLineGreen = gizmoLineMaterial.clone();
-    matLineGreen.color.set(65280);
-    const matLineBlue = gizmoLineMaterial.clone();
-    matLineBlue.color.set(255);
-    const matLineCyan = gizmoLineMaterial.clone();
-    matLineCyan.color.set(65535);
-    const matLineMagenta = gizmoLineMaterial.clone();
-    matLineMagenta.color.set(16711935);
-    const matLineYellow = gizmoLineMaterial.clone();
-    matLineYellow.color.set(16776960);
-    const matLineGray = gizmoLineMaterial.clone();
-    matLineGray.color.set(7895160);
-    const matLineYellowTransparent = matLineYellow.clone();
-    matLineYellowTransparent.opacity = 0.25;
-    const arrowGeometry = new three__WEBPACK_IMPORTED_MODULE_0__.CylinderGeometry(0, 0.05, 0.2, 12, 1, false);
-    const scaleHandleGeometry = new three__WEBPACK_IMPORTED_MODULE_0__.BoxGeometry(0.125, 0.125, 0.125);
-    const lineGeometry = new three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry();
-    lineGeometry.setAttribute("position", new three__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute([0, 0, 0, 1, 0, 0], 3));
-    const CircleGeometry = (radius, arc) => {
-      const geometry = new three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry();
-      const vertices = [];
-      for (let i = 0; i <= 64 * arc; ++i) {
-        vertices.push(0, Math.cos(i / 32 * Math.PI) * radius, Math.sin(i / 32 * Math.PI) * radius);
-      }
-      geometry.setAttribute("position", new three__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute(vertices, 3));
-      return geometry;
-    };
-    const TranslateHelperGeometry = () => {
-      const geometry = new three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry();
-      geometry.setAttribute("position", new three__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute([0, 0, 0, 1, 1, 1], 3));
-      return geometry;
-    };
-    const gizmoTranslate = {
-      X: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(arrowGeometry, matRed), [1, 0, 0], [0, 0, -Math.PI / 2], null, "fwd"],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(arrowGeometry, matRed), [1, 0, 0], [0, 0, Math.PI / 2], null, "bwd"],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineRed)]
-      ],
-      Y: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(arrowGeometry, matGreen), [0, 1, 0], null, null, "fwd"],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(arrowGeometry, matGreen), [0, 1, 0], [Math.PI, 0, 0], null, "bwd"],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineGreen), null, [0, 0, Math.PI / 2]]
-      ],
-      Z: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(arrowGeometry, matBlue), [0, 0, 1], [Math.PI / 2, 0, 0], null, "fwd"],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(arrowGeometry, matBlue), [0, 0, 1], [-Math.PI / 2, 0, 0], null, "bwd"],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineBlue), null, [0, -Math.PI / 2, 0]]
-      ],
-      XYZ: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.OctahedronGeometry(0.1, 0), matWhiteTransparent.clone()), [0, 0, 0], [0, 0, 0]]],
-      XY: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.PlaneGeometry(0.295, 0.295), matYellowTransparent.clone()), [0.15, 0.15, 0]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineYellow), [0.18, 0.3, 0], null, [0.125, 1, 1]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineYellow), [0.3, 0.18, 0], [0, 0, Math.PI / 2], [0.125, 1, 1]]
-      ],
-      YZ: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.PlaneGeometry(0.295, 0.295), matCyanTransparent.clone()), [0, 0.15, 0.15], [0, Math.PI / 2, 0]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineCyan), [0, 0.18, 0.3], [0, 0, Math.PI / 2], [0.125, 1, 1]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineCyan), [0, 0.3, 0.18], [0, -Math.PI / 2, 0], [0.125, 1, 1]]
-      ],
-      XZ: [
-        [
-          new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.PlaneGeometry(0.295, 0.295), matMagentaTransparent.clone()),
-          [0.15, 0, 0.15],
-          [-Math.PI / 2, 0, 0]
-        ],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineMagenta), [0.18, 0, 0.3], null, [0.125, 1, 1]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineMagenta), [0.3, 0, 0.18], [0, -Math.PI / 2, 0], [0.125, 1, 1]]
-      ]
-    };
-    const pickerTranslate = {
-      X: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0.6, 0, 0], [0, 0, -Math.PI / 2]]],
-      Y: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0, 0.6, 0]]],
-      Z: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0, 0, 0.6], [Math.PI / 2, 0, 0]]],
-      XYZ: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.OctahedronGeometry(0.2, 0), matInvisible)]],
-      XY: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.PlaneGeometry(0.4, 0.4), matInvisible), [0.2, 0.2, 0]]],
-      YZ: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.PlaneGeometry(0.4, 0.4), matInvisible), [0, 0.2, 0.2], [0, Math.PI / 2, 0]]],
-      XZ: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.PlaneGeometry(0.4, 0.4), matInvisible), [0.2, 0, 0.2], [-Math.PI / 2, 0, 0]]]
-    };
-    const helperTranslate = {
-      START: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.OctahedronGeometry(0.01, 2), matHelper), null, null, null, "helper"]],
-      END: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.OctahedronGeometry(0.01, 2), matHelper), null, null, null, "helper"]],
-      DELTA: [[new three__WEBPACK_IMPORTED_MODULE_0__.Line(TranslateHelperGeometry(), matHelper), null, null, null, "helper"]],
-      X: [[new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"]],
-      Y: [[new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], "helper"]],
-      Z: [[new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], "helper"]]
-    };
-    const gizmoRotate = {
-      X: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(CircleGeometry(1, 0.5), matLineRed)],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.OctahedronGeometry(0.04, 0), matRed), [0, 0, 0.99], null, [1, 3, 1]]
-      ],
-      Y: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(CircleGeometry(1, 0.5), matLineGreen), null, [0, 0, -Math.PI / 2]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.OctahedronGeometry(0.04, 0), matGreen), [0, 0, 0.99], null, [3, 1, 1]]
-      ],
-      Z: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(CircleGeometry(1, 0.5), matLineBlue), null, [0, Math.PI / 2, 0]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.OctahedronGeometry(0.04, 0), matBlue), [0.99, 0, 0], null, [1, 3, 1]]
-      ],
-      E: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(CircleGeometry(1.25, 1), matLineYellowTransparent), null, [0, Math.PI / 2, 0]],
-        [
-          new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),
-          [1.17, 0, 0],
-          [0, 0, -Math.PI / 2],
-          [1, 1, 1e-3]
-        ],
-        [
-          new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),
-          [-1.17, 0, 0],
-          [0, 0, Math.PI / 2],
-          [1, 1, 1e-3]
-        ],
-        [
-          new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),
-          [0, -1.17, 0],
-          [Math.PI, 0, 0],
-          [1, 1, 1e-3]
-        ],
-        [
-          new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),
-          [0, 1.17, 0],
-          [0, 0, 0],
-          [1, 1, 1e-3]
-        ]
-      ],
-      XYZE: [[new three__WEBPACK_IMPORTED_MODULE_0__.Line(CircleGeometry(1, 1), matLineGray), null, [0, Math.PI / 2, 0]]]
-    };
-    const helperRotate = {
-      AXIS: [[new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"]]
-    };
-    const pickerRotate = {
-      X: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, -Math.PI / 2, -Math.PI / 2]]],
-      Y: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [Math.PI / 2, 0, 0]]],
-      Z: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, 0, -Math.PI / 2]]],
-      E: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.TorusGeometry(1.25, 0.1, 2, 24), matInvisible)]],
-      XYZE: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.SphereGeometry(0.7, 10, 8), matInvisible)]]
-    };
-    const gizmoScale = {
-      X: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(scaleHandleGeometry, matRed), [0.8, 0, 0], [0, 0, -Math.PI / 2]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineRed), null, null, [0.8, 1, 1]]
-      ],
-      Y: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(scaleHandleGeometry, matGreen), [0, 0.8, 0]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineGreen), null, [0, 0, Math.PI / 2], [0.8, 1, 1]]
-      ],
-      Z: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(scaleHandleGeometry, matBlue), [0, 0, 0.8], [Math.PI / 2, 0, 0]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineBlue), null, [0, -Math.PI / 2, 0], [0.8, 1, 1]]
-      ],
-      XY: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(scaleHandleGeometry, matYellowTransparent), [0.85, 0.85, 0], null, [2, 2, 0.2]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineYellow), [0.855, 0.98, 0], null, [0.125, 1, 1]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineYellow), [0.98, 0.855, 0], [0, 0, Math.PI / 2], [0.125, 1, 1]]
-      ],
-      YZ: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(scaleHandleGeometry, matCyanTransparent), [0, 0.85, 0.85], null, [0.2, 2, 2]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineCyan), [0, 0.855, 0.98], [0, 0, Math.PI / 2], [0.125, 1, 1]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineCyan), [0, 0.98, 0.855], [0, -Math.PI / 2, 0], [0.125, 1, 1]]
-      ],
-      XZ: [
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(scaleHandleGeometry, matMagentaTransparent), [0.85, 0, 0.85], null, [2, 0.2, 2]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineMagenta), [0.855, 0, 0.98], null, [0.125, 1, 1]],
-        [new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matLineMagenta), [0.98, 0, 0.855], [0, -Math.PI / 2, 0], [0.125, 1, 1]]
-      ],
-      XYZX: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [1.1, 0, 0]]],
-      XYZY: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [0, 1.1, 0]]],
-      XYZZ: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [0, 0, 1.1]]]
-    };
-    const pickerScale = {
-      X: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0.5, 0, 0], [0, 0, -Math.PI / 2]]],
-      Y: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0, 0.5, 0]]],
-      Z: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0, 0, 0.5], [Math.PI / 2, 0, 0]]],
-      XY: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(scaleHandleGeometry, matInvisible), [0.85, 0.85, 0], null, [3, 3, 0.2]]],
-      YZ: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(scaleHandleGeometry, matInvisible), [0, 0.85, 0.85], null, [0.2, 3, 3]]],
-      XZ: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(scaleHandleGeometry, matInvisible), [0.85, 0, 0.85], null, [3, 0.2, 3]]],
-      XYZX: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.BoxGeometry(0.2, 0.2, 0.2), matInvisible), [1.1, 0, 0]]],
-      XYZY: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 1.1, 0]]],
-      XYZZ: [[new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(new three__WEBPACK_IMPORTED_MODULE_0__.BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 0, 1.1]]]
-    };
-    const helperScale = {
-      X: [[new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], "helper"]],
-      Y: [[new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], "helper"]],
-      Z: [[new three__WEBPACK_IMPORTED_MODULE_0__.Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], "helper"]]
-    };
-    const setupGizmo = (gizmoMap) => {
-      const gizmo = new three__WEBPACK_IMPORTED_MODULE_0__.Object3D();
-      for (let name in gizmoMap) {
-        for (let i = gizmoMap[name].length; i--; ) {
-          const object = gizmoMap[name][i][0].clone();
-          const position = gizmoMap[name][i][1];
-          const rotation = gizmoMap[name][i][2];
-          const scale = gizmoMap[name][i][3];
-          const tag = gizmoMap[name][i][4];
-          object.name = name;
-          object.tag = tag;
-          if (position) {
-            object.position.set(position[0], position[1], position[2]);
-          }
-          if (rotation) {
-            object.rotation.set(rotation[0], rotation[1], rotation[2]);
-          }
-          if (scale) {
-            object.scale.set(scale[0], scale[1], scale[2]);
-          }
-          object.updateMatrix();
-          const tempGeometry = object.geometry.clone();
-          tempGeometry.applyMatrix4(object.matrix);
-          object.geometry = tempGeometry;
-          object.renderOrder = Infinity;
-          object.position.set(0, 0, 0);
-          object.rotation.set(0, 0, 0);
-          object.scale.set(1, 1, 1);
-          gizmo.add(object);
-        }
-      }
-      return gizmo;
-    };
-    this.gizmo = {};
-    this.picker = {};
-    this.helper = {};
-    this.add(this.gizmo["translate"] = setupGizmo(gizmoTranslate));
-    this.add(this.gizmo["rotate"] = setupGizmo(gizmoRotate));
-    this.add(this.gizmo["scale"] = setupGizmo(gizmoScale));
-    this.add(this.picker["translate"] = setupGizmo(pickerTranslate));
-    this.add(this.picker["rotate"] = setupGizmo(pickerRotate));
-    this.add(this.picker["scale"] = setupGizmo(pickerScale));
-    this.add(this.helper["translate"] = setupGizmo(helperTranslate));
-    this.add(this.helper["rotate"] = setupGizmo(helperRotate));
-    this.add(this.helper["scale"] = setupGizmo(helperScale));
-    this.picker["translate"].visible = false;
-    this.picker["rotate"].visible = false;
-    this.picker["scale"].visible = false;
-  }
-}
-class TransformControlsPlane extends three__WEBPACK_IMPORTED_MODULE_0__.Mesh {
-  constructor() {
-    super(
-      new three__WEBPACK_IMPORTED_MODULE_0__.PlaneGeometry(1e5, 1e5, 2, 2),
-      new three__WEBPACK_IMPORTED_MODULE_0__.MeshBasicMaterial({
-        visible: false,
-        wireframe: true,
-        side: three__WEBPACK_IMPORTED_MODULE_0__.DoubleSide,
-        transparent: true,
-        opacity: 0.1,
-        toneMapped: false
-      })
-    );
-    __publicField(this, "isTransformControlsPlane", true);
-    __publicField(this, "type", "TransformControlsPlane");
-    __publicField(this, "unitX", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(1, 0, 0));
-    __publicField(this, "unitY", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 1, 0));
-    __publicField(this, "unitZ", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 0, 1));
-    __publicField(this, "tempVector", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "dirVector", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "alignVector", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "tempMatrix", new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4());
-    __publicField(this, "identityQuaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    // these are set from parent class TransformControls
-    __publicField(this, "cameraQuaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "worldPosition", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "worldQuaternion", new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion());
-    __publicField(this, "eye", new three__WEBPACK_IMPORTED_MODULE_0__.Vector3());
-    __publicField(this, "axis", null);
-    __publicField(this, "mode", "translate");
-    __publicField(this, "space", "world");
-    __publicField(this, "updateMatrixWorld", () => {
-      let space = this.space;
-      this.position.copy(this.worldPosition);
-      if (this.mode === "scale")
-        space = "local";
-      this.unitX.set(1, 0, 0).applyQuaternion(space === "local" ? this.worldQuaternion : this.identityQuaternion);
-      this.unitY.set(0, 1, 0).applyQuaternion(space === "local" ? this.worldQuaternion : this.identityQuaternion);
-      this.unitZ.set(0, 0, 1).applyQuaternion(space === "local" ? this.worldQuaternion : this.identityQuaternion);
-      this.alignVector.copy(this.unitY);
-      switch (this.mode) {
-        case "translate":
-        case "scale":
-          switch (this.axis) {
-            case "X":
-              this.alignVector.copy(this.eye).cross(this.unitX);
-              this.dirVector.copy(this.unitX).cross(this.alignVector);
-              break;
-            case "Y":
-              this.alignVector.copy(this.eye).cross(this.unitY);
-              this.dirVector.copy(this.unitY).cross(this.alignVector);
-              break;
-            case "Z":
-              this.alignVector.copy(this.eye).cross(this.unitZ);
-              this.dirVector.copy(this.unitZ).cross(this.alignVector);
-              break;
-            case "XY":
-              this.dirVector.copy(this.unitZ);
-              break;
-            case "YZ":
-              this.dirVector.copy(this.unitX);
-              break;
-            case "XZ":
-              this.alignVector.copy(this.unitZ);
-              this.dirVector.copy(this.unitY);
-              break;
-            case "XYZ":
-            case "E":
-              this.dirVector.set(0, 0, 0);
-              break;
-          }
-          break;
-        case "rotate":
-        default:
-          this.dirVector.set(0, 0, 0);
-      }
-      if (this.dirVector.length() === 0) {
-        this.quaternion.copy(this.cameraQuaternion);
-      } else {
-        this.tempMatrix.lookAt(this.tempVector.set(0, 0, 0), this.dirVector, this.alignVector);
-        this.quaternion.setFromRotationMatrix(this.tempMatrix);
-      }
-      super.updateMatrixWorld();
-    });
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 33785:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "e": () => (/* binding */ NURBSCurve)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-/* harmony import */ var _NURBSUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(71246);
-
-
-class NURBSCurve extends three__WEBPACK_IMPORTED_MODULE_0__.Curve {
-  constructor(degree, knots, controlPoints, startKnot, endKnot) {
-    super();
-    this.degree = degree;
-    this.knots = knots;
-    this.controlPoints = [];
-    this.startKnot = startKnot || 0;
-    this.endKnot = endKnot || this.knots.length - 1;
-    for (let i = 0; i < controlPoints.length; ++i) {
-      const point = controlPoints[i];
-      this.controlPoints[i] = new three__WEBPACK_IMPORTED_MODULE_0__.Vector4(point.x, point.y, point.z, point.w);
-    }
-  }
-  getPoint(t, optionalTarget) {
-    const point = optionalTarget || new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    const u = this.knots[this.startKnot] + t * (this.knots[this.endKnot] - this.knots[this.startKnot]);
-    const hpoint = (0,_NURBSUtils_js__WEBPACK_IMPORTED_MODULE_1__/* .calcBSplinePoint */ .bF)(this.degree, this.knots, this.controlPoints, u);
-    if (hpoint.w != 1) {
-      hpoint.divideScalar(hpoint.w);
-    }
-    return point.set(hpoint.x, hpoint.y, hpoint.z);
-  }
-  getTangent(t, optionalTarget) {
-    const tangent = optionalTarget || new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    const u = this.knots[0] + t * (this.knots[this.knots.length - 1] - this.knots[0]);
-    const ders = (0,_NURBSUtils_js__WEBPACK_IMPORTED_MODULE_1__/* .calcNURBSDerivatives */ .MI)(this.degree, this.knots, this.controlPoints, u, 1);
-    tangent.copy(ders[1]).normalize();
-    return tangent;
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 71246:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "EP": () => (/* binding */ calcBasisFunctions),
-/* harmony export */   "HB": () => (/* binding */ calcBasisFunctionDerivatives),
-/* harmony export */   "MI": () => (/* binding */ calcNURBSDerivatives),
-/* harmony export */   "Yb": () => (/* binding */ calcRationalCurveDerivatives),
-/* harmony export */   "bF": () => (/* binding */ calcBSplinePoint),
-/* harmony export */   "eR": () => (/* binding */ calcBSplineDerivatives),
-/* harmony export */   "nl": () => (/* binding */ calcSurfacePoint),
-/* harmony export */   "sj": () => (/* binding */ findSpan),
-/* harmony export */   "wD": () => (/* binding */ calcKoverI)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-
-function findSpan(p, u, U) {
-  const n = U.length - p - 1;
-  if (u >= U[n]) {
-    return n - 1;
-  }
-  if (u <= U[p]) {
-    return p;
-  }
-  let low = p;
-  let high = n;
-  let mid = Math.floor((low + high) / 2);
-  while (u < U[mid] || u >= U[mid + 1]) {
-    if (u < U[mid]) {
-      high = mid;
-    } else {
-      low = mid;
-    }
-    mid = Math.floor((low + high) / 2);
-  }
-  return mid;
-}
-function calcBasisFunctions(span, u, p, U) {
-  const N = [];
-  const left = [];
-  const right = [];
-  N[0] = 1;
-  for (let j = 1; j <= p; ++j) {
-    left[j] = u - U[span + 1 - j];
-    right[j] = U[span + j] - u;
-    let saved = 0;
-    for (let r = 0; r < j; ++r) {
-      const rv = right[r + 1];
-      const lv = left[j - r];
-      const temp = N[r] / (rv + lv);
-      N[r] = saved + rv * temp;
-      saved = lv * temp;
-    }
-    N[j] = saved;
-  }
-  return N;
-}
-function calcBSplinePoint(p, U, P, u) {
-  const span = findSpan(p, u, U);
-  const N = calcBasisFunctions(span, u, p, U);
-  const C = new three__WEBPACK_IMPORTED_MODULE_0__.Vector4(0, 0, 0, 0);
-  for (let j = 0; j <= p; ++j) {
-    const point = P[span - p + j];
-    const Nj = N[j];
-    const wNj = point.w * Nj;
-    C.x += point.x * wNj;
-    C.y += point.y * wNj;
-    C.z += point.z * wNj;
-    C.w += point.w * Nj;
-  }
-  return C;
-}
-function calcBasisFunctionDerivatives(span, u, p, n, U) {
-  const zeroArr = [];
-  for (let i = 0; i <= p; ++i)
-    zeroArr[i] = 0;
-  const ders = [];
-  for (let i = 0; i <= n; ++i)
-    ders[i] = zeroArr.slice(0);
-  const ndu = [];
-  for (let i = 0; i <= p; ++i)
-    ndu[i] = zeroArr.slice(0);
-  ndu[0][0] = 1;
-  const left = zeroArr.slice(0);
-  const right = zeroArr.slice(0);
-  for (let j = 1; j <= p; ++j) {
-    left[j] = u - U[span + 1 - j];
-    right[j] = U[span + j] - u;
-    let saved = 0;
-    for (let r2 = 0; r2 < j; ++r2) {
-      const rv = right[r2 + 1];
-      const lv = left[j - r2];
-      ndu[j][r2] = rv + lv;
-      const temp = ndu[r2][j - 1] / ndu[j][r2];
-      ndu[r2][j] = saved + rv * temp;
-      saved = lv * temp;
-    }
-    ndu[j][j] = saved;
-  }
-  for (let j = 0; j <= p; ++j) {
-    ders[0][j] = ndu[j][p];
-  }
-  for (let r2 = 0; r2 <= p; ++r2) {
-    let s1 = 0;
-    let s2 = 1;
-    const a = [];
-    for (let i = 0; i <= p; ++i) {
-      a[i] = zeroArr.slice(0);
-    }
-    a[0][0] = 1;
-    for (let k = 1; k <= n; ++k) {
-      let d = 0;
-      const rk = r2 - k;
-      const pk = p - k;
-      if (r2 >= k) {
-        a[s2][0] = a[s1][0] / ndu[pk + 1][rk];
-        d = a[s2][0] * ndu[rk][pk];
-      }
-      const j1 = rk >= -1 ? 1 : -rk;
-      const j2 = r2 - 1 <= pk ? k - 1 : p - r2;
-      for (let j3 = j1; j3 <= j2; ++j3) {
-        a[s2][j3] = (a[s1][j3] - a[s1][j3 - 1]) / ndu[pk + 1][rk + j3];
-        d += a[s2][j3] * ndu[rk + j3][pk];
-      }
-      if (r2 <= pk) {
-        a[s2][k] = -a[s1][k - 1] / ndu[pk + 1][r2];
-        d += a[s2][k] * ndu[r2][pk];
-      }
-      ders[k][r2] = d;
-      const j = s1;
-      s1 = s2;
-      s2 = j;
-    }
-  }
-  let r = p;
-  for (let k = 1; k <= n; ++k) {
-    for (let j = 0; j <= p; ++j) {
-      ders[k][j] *= r;
-    }
-    r *= p - k;
-  }
-  return ders;
-}
-function calcBSplineDerivatives(p, U, P, u, nd) {
-  const du = nd < p ? nd : p;
-  const CK = [];
-  const span = findSpan(p, u, U);
-  const nders = calcBasisFunctionDerivatives(span, u, p, du, U);
-  const Pw = [];
-  for (let i = 0; i < P.length; ++i) {
-    const point = P[i].clone();
-    const w = point.w;
-    point.x *= w;
-    point.y *= w;
-    point.z *= w;
-    Pw[i] = point;
-  }
-  for (let k = 0; k <= du; ++k) {
-    const point = Pw[span - p].clone().multiplyScalar(nders[k][0]);
-    for (let j = 1; j <= p; ++j) {
-      point.add(Pw[span - p + j].clone().multiplyScalar(nders[k][j]));
-    }
-    CK[k] = point;
-  }
-  for (let k = du + 1; k <= nd + 1; ++k) {
-    CK[k] = new three__WEBPACK_IMPORTED_MODULE_0__.Vector4(0, 0, 0);
-  }
-  return CK;
-}
-function calcKoverI(k, i) {
-  let nom = 1;
-  for (let j = 2; j <= k; ++j) {
-    nom *= j;
-  }
-  let denom = 1;
-  for (let j = 2; j <= i; ++j) {
-    denom *= j;
-  }
-  for (let j = 2; j <= k - i; ++j) {
-    denom *= j;
-  }
-  return nom / denom;
-}
-function calcRationalCurveDerivatives(Pders) {
-  const nd = Pders.length;
-  const Aders = [];
-  const wders = [];
-  for (let i = 0; i < nd; ++i) {
-    const point = Pders[i];
-    Aders[i] = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(point.x, point.y, point.z);
-    wders[i] = point.w;
-  }
-  const CK = [];
-  for (let k = 0; k < nd; ++k) {
-    const v = Aders[k].clone();
-    for (let i = 1; i <= k; ++i) {
-      v.sub(CK[k - i].clone().multiplyScalar(calcKoverI(k, i) * wders[i]));
-    }
-    CK[k] = v.divideScalar(wders[0]);
-  }
-  return CK;
-}
-function calcNURBSDerivatives(p, U, P, u, nd) {
-  const Pders = calcBSplineDerivatives(p, U, P, u, nd);
-  return calcRationalCurveDerivatives(Pders);
-}
-function calcSurfacePoint(p, q, U, V, P, u, v, target) {
-  const uspan = findSpan(p, u, U);
-  const vspan = findSpan(q, v, V);
-  const Nu = calcBasisFunctions(uspan, u, p, U);
-  const Nv = calcBasisFunctions(vspan, v, q, V);
-  const temp = [];
-  for (let l = 0; l <= q; ++l) {
-    temp[l] = new three__WEBPACK_IMPORTED_MODULE_0__.Vector4(0, 0, 0, 0);
-    for (let k = 0; k <= p; ++k) {
-      const point = P[uspan - p + k][vspan - q + l].clone();
-      const w = point.w;
-      point.x *= w;
-      point.y *= w;
-      point.z *= w;
-      temp[l].add(point.multiplyScalar(Nu[k]));
-    }
-  }
-  const Sw = new three__WEBPACK_IMPORTED_MODULE_0__.Vector4(0, 0, 0, 0);
-  for (let l = 0; l <= q; ++l) {
-    Sw.add(temp[l].multiplyScalar(Nv[l]));
-  }
-  Sw.divideScalar(Sw.w);
-  target.set(Sw.x, Sw.y, Sw.z);
-}
-
-
-
-/***/ }),
-
-/***/ 84849:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "ACESFilmicToneMappingShader": () => (/* reexport */ ACESFilmicToneMappingShader),
-  "AMFLoader": () => (/* reexport */ AMFLoader),
-  "ARButton": () => (/* reexport */ ARButton),
-  "AdaptiveToneMappingPass": () => (/* reexport */ AdaptiveToneMappingPass),
-  "AfterimagePass": () => (/* reexport */ AfterimagePass),
-  "AfterimageShader": () => (/* reexport */ AfterimageShader),
-  "AmmoPhysics": () => (/* reexport */ AmmoPhysics),
-  "AnaglyphEffect": () => (/* reexport */ AnaglyphEffect),
-  "AnimationClipCreator": () => (/* reexport */ AnimationClipCreator),
-  "ArcballControls": () => (/* reexport */ ArcballControls/* ArcballControls */.A),
-  "AsciiEffect": () => (/* reexport */ AsciiEffect),
-  "AssimpLoader": () => (/* reexport */ AssimpLoader),
-  "BVHLoader": () => (/* reexport */ BVHLoader),
-  "BasicShader": () => (/* reexport */ BasicShader),
-  "BasisTextureLoader": () => (/* reexport */ BasisTextureLoader),
-  "BleachBypassShader": () => (/* reexport */ BleachBypassShader),
-  "BlendShader": () => (/* reexport */ BlendShader),
-  "BloomPass": () => (/* reexport */ BloomPass),
-  "BlurShaderUtils": () => (/* reexport */ BlurShaderUtils),
-  "BokehDepthShader": () => (/* reexport */ BokehDepthShader),
-  "BokehPass": () => (/* reexport */ BokehPass),
-  "BokehShader": () => (/* reexport */ BokehShader),
-  "BokehShader2": () => (/* reexport */ BokehShader2),
-  "BoxLineGeometry": () => (/* reexport */ BoxLineGeometry),
-  "BrightnessContrastShader": () => (/* reexport */ BrightnessContrastShader),
-  "CCDIKHelper": () => (/* reexport */ CCDIKHelper),
-  "CCDIKSolver": () => (/* reexport */ CCDIKSolver),
-  "CSM": () => (/* reexport */ CSM),
-  "CSMFrustum": () => (/* reexport */ CSMFrustum),
-  "CSMHelper": () => (/* reexport */ CSMHelper),
-  "CSMShader": () => (/* reexport */ CSMShader),
-  "CSS2DObject": () => (/* reexport */ CSS2DObject),
-  "CSS2DRenderer": () => (/* reexport */ CSS2DRenderer),
-  "CSS3DObject": () => (/* reexport */ CSS3DObject),
-  "CSS3DRenderer": () => (/* reexport */ CSS3DRenderer),
-  "CSS3DSprite": () => (/* reexport */ CSS3DSprite),
-  "CameraControls": () => (/* reexport */ CameraControls),
-  "Capsule": () => (/* reexport */ Capsule),
-  "CinematicCamera": () => (/* reexport */ CinematicCamera),
-  "CinquefoilKnot": () => (/* reexport */ CinquefoilKnot),
-  "ClearMaskPass": () => (/* reexport */ MaskPass/* ClearMaskPass */.M),
-  "ClearPass": () => (/* reexport */ ClearPass),
-  "ColladaExporter": () => (/* reexport */ ColladaExporter),
-  "ColladaLoader": () => (/* reexport */ ColladaLoader),
-  "ColorConverter": () => (/* reexport */ ColorConverter),
-  "ColorCorrectionShader": () => (/* reexport */ ColorCorrectionShader),
-  "ColorMapKeywords": () => (/* reexport */ ColorMapKeywords),
-  "ColorifyShader": () => (/* reexport */ ColorifyShader),
-  "ConvexGeometry": () => (/* reexport */ ConvexGeometry),
-  "ConvexHull": () => (/* reexport */ ConvexHull),
-  "ConvexObjectBreaker": () => (/* reexport */ ConvexObjectBreaker),
-  "ConvolutionShader": () => (/* reexport */ ConvolutionShader),
-  "CopyShader": () => (/* reexport */ CopyShader/* CopyShader */.C),
-  "CubeTexturePass": () => (/* reexport */ CubeTexturePass),
-  "DDSLoader": () => (/* reexport */ DDSLoader),
-  "DOFMipMapShader": () => (/* reexport */ DOFMipMapShader),
-  "DRACOExporter": () => (/* reexport */ DRACOExporter),
-  "DRACOLoader": () => (/* reexport */ DRACOLoader/* DRACOLoader */._),
-  "DecalGeometry": () => (/* reexport */ DecalGeometry),
-  "DecalVertex": () => (/* reexport */ DecalVertex),
-  "DecoratedTorusKnot4a": () => (/* reexport */ DecoratedTorusKnot4a),
-  "DecoratedTorusKnot4b": () => (/* reexport */ DecoratedTorusKnot4b),
-  "DecoratedTorusKnot5a": () => (/* reexport */ DecoratedTorusKnot5a),
-  "DecoratedTorusKnot5c": () => (/* reexport */ DecoratedTorusKnot5c),
-  "DepthLimitedBlurShader": () => (/* reexport */ DepthLimitedBlurShader),
-  "DeviceOrientationControls": () => (/* reexport */ DeviceOrientationControls/* DeviceOrientationControls */.W),
-  "DigitalGlitch": () => (/* reexport */ DigitalGlitch),
-  "DotScreenPass": () => (/* reexport */ DotScreenPass),
-  "DotScreenShader": () => (/* reexport */ DotScreenShader),
-  "DragControls": () => (/* reexport */ DragControls),
-  "EXRLoader": () => (/* reexport */ EXRLoader),
-  "EdgeSplitModifier": () => (/* reexport */ EdgeSplitModifier),
-  "EffectComposer": () => (/* reexport */ EffectComposer/* EffectComposer */.x),
-  "FBXLoader": () => (/* reexport */ FBXLoader/* FBXLoader */.y),
-  "FXAAShader": () => (/* reexport */ FXAAShader),
-  "Face": () => (/* reexport */ Face),
-  "Face3": () => (/* reexport */ Face3),
-  "FigureEightPolynomialKnot": () => (/* reexport */ FigureEightPolynomialKnot),
-  "FilmPass": () => (/* reexport */ FilmPass),
-  "FilmShader": () => (/* reexport */ FilmShader),
-  "FirstPersonControls": () => (/* reexport */ FirstPersonControls/* FirstPersonControls */.o),
-  "FlakesTexture": () => (/* reexport */ FlakesTexture),
-  "Flow": () => (/* reexport */ CurveModifier/* Flow */.Zw),
-  "FlyControls": () => (/* reexport */ FlyControls/* FlyControls */.m),
-  "FocusShader": () => (/* reexport */ FocusShader),
-  "Font": () => (/* reexport */ Font),
-  "FontLoader": () => (/* reexport */ FontLoader),
-  "FreiChenShader": () => (/* reexport */ FreiChenShader),
-  "FresnelShader": () => (/* reexport */ FresnelShader),
-  "FullScreenQuad": () => (/* reexport */ Pass/* FullScreenQuad */.T),
-  "GCodeLoader": () => (/* reexport */ GCodeLoader),
-  "GLTFExporter": () => (/* reexport */ GLTFExporter),
-  "GLTFLoader": () => (/* reexport */ GLTFLoader/* GLTFLoader */.E),
-  "GPUComputationRenderer": () => (/* reexport */ GPUComputationRenderer),
-  "GammaCorrectionShader": () => (/* reexport */ GammaCorrectionShader/* GammaCorrectionShader */.Y),
-  "Geometry": () => (/* reexport */ Geometry),
-  "GeometryCompressionUtils": () => (/* reexport */ GeometryCompressionUtils),
-  "GeometryUtils": () => (/* reexport */ GeometryUtils),
-  "GlitchPass": () => (/* reexport */ GlitchPass),
-  "GodRaysCombineShader": () => (/* reexport */ GodRaysCombineShader),
-  "GodRaysDepthMaskShader": () => (/* reexport */ GodRaysDepthMaskShader),
-  "GodRaysFakeSunShader": () => (/* reexport */ GodRaysFakeSunShader),
-  "GodRaysGenerateShader": () => (/* reexport */ GodRaysGenerateShader),
-  "GrannyKnot": () => (/* reexport */ GrannyKnot),
-  "GroundProjectedEnv": () => (/* reexport */ GroundProjectedEnv),
-  "Gyroscope": () => (/* reexport */ Gyroscope),
-  "HDRCubeTextureLoader": () => (/* reexport */ HDRCubeTextureLoader),
-  "HTMLMesh": () => (/* reexport */ HTMLMesh),
-  "HalfEdge": () => (/* reexport */ HalfEdge),
-  "HalftonePass": () => (/* reexport */ HalftonePass),
-  "HalftoneShader": () => (/* reexport */ HalftoneShader),
-  "HeartCurve": () => (/* reexport */ HeartCurve),
-  "HelixCurve": () => (/* reexport */ HelixCurve),
-  "HorizontalBlurShader": () => (/* reexport */ HorizontalBlurShader/* HorizontalBlurShader */.P),
-  "HorizontalTiltShiftShader": () => (/* reexport */ HorizontalTiltShiftShader),
-  "HueSaturationShader": () => (/* reexport */ HueSaturationShader),
-  "ImprovedNoise": () => (/* reexport */ ImprovedNoise),
-  "InstancedFlow": () => (/* reexport */ CurveModifier/* InstancedFlow */.iJ),
-  "InteractiveGroup": () => (/* reexport */ InteractiveGroup),
-  "KMZLoader": () => (/* reexport */ KMZLoader),
-  "KTX2Loader": () => (/* reexport */ KTX2Loader/* KTX2Loader */.a),
-  "KTXLoader": () => (/* reexport */ KTXLoader),
-  "KaleidoShader": () => (/* reexport */ KaleidoShader),
-  "KnotCurve": () => (/* reexport */ KnotCurve),
-  "LDrawLoader": () => (/* reexport */ LDrawLoader),
-  "LUT3dlLoader": () => (/* reexport */ LUT3dlLoader),
-  "LUTCubeLoader": () => (/* reexport */ LUTCubeLoader),
-  "LUTPass": () => (/* reexport */ LUTPass),
-  "LWOLoader": () => (/* reexport */ LWOLoader),
-  "Lensflare": () => (/* reexport */ Lensflare),
-  "LensflareElement": () => (/* reexport */ LensflareElement),
-  "LightProbeGenerator": () => (/* reexport */ LightProbeGenerator),
-  "LightProbeHelper": () => (/* reexport */ LightProbeHelper),
-  "LightningStorm": () => (/* reexport */ LightningStorm),
-  "LightningStrike": () => (/* reexport */ LightningStrike),
-  "Line2": () => (/* reexport */ Line2/* Line2 */.w),
-  "LineGeometry": () => (/* reexport */ LineGeometry/* LineGeometry */.L),
-  "LineMaterial": () => (/* reexport */ LineMaterial/* LineMaterial */.Y),
-  "LineSegments2": () => (/* reexport */ LineSegments2/* LineSegments2 */.w),
-  "LineSegmentsGeometry": () => (/* reexport */ LineSegmentsGeometry/* LineSegmentsGeometry */.z),
-  "LottieLoader": () => (/* reexport */ LottieLoader),
-  "LuminosityHighPassShader": () => (/* reexport */ LuminosityHighPassShader),
-  "LuminosityShader": () => (/* reexport */ LuminosityShader),
-  "Lut": () => (/* reexport */ Lut),
-  "MD2Character": () => (/* reexport */ MD2Character),
-  "MD2CharacterComplex": () => (/* reexport */ MD2CharacterComplex),
-  "MD2Loader": () => (/* reexport */ MD2Loader),
-  "MDDLoader": () => (/* reexport */ MDDLoader),
-  "MMDAnimationHelper": () => (/* reexport */ MMDAnimationHelper),
-  "MMDExporter": () => (/* reexport */ MMDExporter),
-  "MMDLoader": () => (/* reexport */ MMDLoader),
-  "MMDPhysics": () => (/* reexport */ MMDPhysics),
-  "MTLLoader": () => (/* reexport */ MTLLoader),
-  "MapControls": () => (/* reexport */ OrbitControls/* MapControls */.o),
-  "MapControlsExp": () => (/* reexport */ MapControlsExp),
-  "MarchingCubes": () => (/* reexport */ MarchingCubes),
-  "MaskPass": () => (/* reexport */ MaskPass/* MaskPass */.F),
-  "MeshSurfaceSampler": () => (/* reexport */ MeshSurfaceSampler/* MeshSurfaceSampler */.a),
-  "MeshoptDecoder": () => (/* reexport */ MeshoptDecoder/* MeshoptDecoder */.z),
-  "MirrorShader": () => (/* reexport */ MirrorShader),
-  "MorphAnimMesh": () => (/* reexport */ MorphAnimMesh),
-  "MorphBlendMesh": () => (/* reexport */ MorphBlendMesh),
-  "MotionController": () => (/* reexport */ MotionController),
-  "MotionControllerConstants": () => (/* reexport */ MotionControllerConstants),
-  "NRRDLoader": () => (/* reexport */ NRRDLoader),
-  "NURBSCurve": () => (/* reexport */ NURBSCurve/* NURBSCurve */.e),
-  "NURBSSurface": () => (/* reexport */ NURBSSurface),
-  "NormalMapShader": () => (/* reexport */ NormalMapShader),
-  "OBB": () => (/* reexport */ OBB),
-  "OBJExporter": () => (/* reexport */ OBJExporter),
-  "OBJLoader": () => (/* reexport */ OBJLoader),
-  "Octree": () => (/* reexport */ Octree),
-  "OculusHandModel": () => (/* reexport */ OculusHandModel),
-  "OculusHandPointerModel": () => (/* reexport */ OculusHandPointerModel),
-  "OrbitControls": () => (/* reexport */ OrbitControls/* OrbitControls */.z),
-  "OrbitControlsExp": () => (/* reexport */ OrbitControlsExp),
-  "OutlineEffect": () => (/* reexport */ OutlineEffect),
-  "OutlinePass": () => (/* reexport */ OutlinePass),
-  "PCDLoader": () => (/* reexport */ PCDLoader),
-  "PDBLoader": () => (/* reexport */ PDBLoader),
-  "PLYExporter": () => (/* reexport */ PLYExporter),
-  "PLYLoader": () => (/* reexport */ PLYLoader),
-  "PRWMLoader": () => (/* reexport */ PRWMLoader),
-  "PVRLoader": () => (/* reexport */ PVRLoader),
-  "PackedPhongMaterial": () => (/* reexport */ PackedPhongMaterial),
-  "ParallaxBarrierEffect": () => (/* reexport */ ParallaxBarrierEffect),
-  "ParallaxShader": () => (/* reexport */ ParallaxShader),
-  "ParametricGeometries": () => (/* reexport */ ParametricGeometries),
-  "ParametricGeometry": () => (/* reexport */ ParametricGeometry),
-  "Pass": () => (/* reexport */ Pass/* Pass */.w),
-  "PeppersGhostEffect": () => (/* reexport */ PeppersGhostEffect),
-  "PixelShader": () => (/* reexport */ PixelShader),
-  "PointerLockControls": () => (/* reexport */ PointerLockControls/* PointerLockControls */.q),
-  "PositionalAudioHelper": () => (/* reexport */ PositionalAudioHelper),
-  "ProgressiveLightMap": () => (/* reexport */ ProgressiveLightMap),
-  "Projector": () => (/* reexport */ Projector),
-  "RGBELoader": () => (/* reexport */ RGBELoader/* RGBELoader */.x),
-  "RGBMLoader": () => (/* reexport */ RGBMLoader),
-  "RGBShiftShader": () => (/* reexport */ RGBShiftShader),
-  "RectAreaLightHelper": () => (/* reexport */ RectAreaLightHelper),
-  "RectAreaLightUniformsLib": () => (/* reexport */ RectAreaLightUniformsLib),
-  "Reflector": () => (/* reexport */ Reflector),
-  "ReflectorForSSRPass": () => (/* reexport */ ReflectorForSSRPass),
-  "ReflectorRTT": () => (/* reexport */ ReflectorRTT),
-  "Refractor": () => (/* reexport */ Refractor),
-  "RenderPass": () => (/* reexport */ RenderPass/* RenderPass */.C),
-  "RenderPixelatedPass": () => (/* reexport */ RenderPixelatedPass),
-  "RenderableFace": () => (/* reexport */ RenderableFace),
-  "RenderableLine": () => (/* reexport */ RenderableLine),
-  "RenderableObject": () => (/* reexport */ RenderableObject),
-  "RenderableSprite": () => (/* reexport */ RenderableSprite),
-  "RenderableVertex": () => (/* reexport */ RenderableVertex),
-  "Rhino3dmLoader": () => (/* reexport */ Rhino3dmLoader),
-  "RollerCoasterGeometry": () => (/* reexport */ RollerCoasterGeometry),
-  "RollerCoasterLiftersGeometry": () => (/* reexport */ RollerCoasterLiftersGeometry),
-  "RollerCoasterShadowGeometry": () => (/* reexport */ RollerCoasterShadowGeometry),
-  "RoomEnvironment": () => (/* reexport */ RoomEnvironment),
-  "RoughnessMipmapper": () => (/* reexport */ RoughnessMipmapper),
-  "RoundedBoxGeometry": () => (/* reexport */ RoundedBoxGeometry),
-  "SAOPass": () => (/* reexport */ SAOPass),
-  "SAOShader": () => (/* reexport */ SAOShader),
-  "SMAABlendShader": () => (/* reexport */ SMAABlendShader),
-  "SMAAEdgesShader": () => (/* reexport */ SMAAEdgesShader),
-  "SMAAPass": () => (/* reexport */ SMAAPass),
-  "SMAAWeightsShader": () => (/* reexport */ SMAAWeightsShader),
-  "SSAARenderPass": () => (/* reexport */ SSAARenderPass),
-  "SSAOBlurShader": () => (/* reexport */ SSAOBlurShader),
-  "SSAODepthShader": () => (/* reexport */ SSAODepthShader),
-  "SSAOPass": () => (/* reexport */ SSAOPass),
-  "SSAOShader": () => (/* reexport */ SSAOShader),
-  "SSRBlurShader": () => (/* reexport */ SSRBlurShader),
-  "SSRDepthShader": () => (/* reexport */ SSRDepthShader),
-  "SSRPass": () => (/* reexport */ SSRPass),
-  "SSRShader": () => (/* reexport */ SSRShader),
-  "STATE": () => (/* reexport */ STATE),
-  "STLExporter": () => (/* reexport */ STLExporter),
-  "STLLoader": () => (/* reexport */ STLLoader),
-  "SVGLoader": () => (/* reexport */ SVGLoader),
-  "SVGObject": () => (/* reexport */ SVGObject),
-  "SVGRenderer": () => (/* reexport */ SVGRenderer),
-  "SavePass": () => (/* reexport */ SavePass),
-  "SceneUtils": () => (/* reexport */ SceneUtils),
-  "SelectionBox": () => (/* reexport */ SelectionBox/* SelectionBox */.M),
-  "SelectionHelper": () => (/* reexport */ SelectionHelper),
-  "SepiaShader": () => (/* reexport */ SepiaShader),
-  "ShaderPass": () => (/* reexport */ ShaderPass/* ShaderPass */.T),
-  "ShadowMapViewer": () => (/* reexport */ ShadowMapViewer),
-  "ShadowMesh": () => (/* reexport */ ShadowMesh),
-  "SimplexNoise": () => (/* reexport */ SimplexNoise/* SimplexNoise */.L),
-  "SimplifyModifier": () => (/* reexport */ SimplifyModifier),
-  "SkeletonUtils": () => (/* reexport */ SkeletonUtils),
-  "Sky": () => (/* reexport */ Sky/* Sky */.q),
-  "SkyGeometry": () => (/* reexport */ SkyGeometry),
-  "SobelOperatorShader": () => (/* reexport */ SobelOperatorShader),
-  "StereoEffect": () => (/* reexport */ StereoEffect),
-  "SubsurfaceScatteringShader": () => (/* reexport */ SubsurfaceScatteringShader),
-  "TAARenderPass": () => (/* reexport */ TAARenderPass),
-  "TDSLoader": () => (/* reexport */ TDSLoader),
-  "TGALoader": () => (/* reexport */ TGALoader),
-  "TTFLoader": () => (/* reexport */ TTFLoader),
-  "TeapotGeometry": () => (/* reexport */ TeapotGeometry),
-  "TechnicolorShader": () => (/* reexport */ TechnicolorShader),
-  "TessellateModifier": () => (/* reexport */ TessellateModifier),
-  "TextBufferGeometry": () => (/* reexport */ TextGeometry),
-  "TextGeometry": () => (/* reexport */ TextGeometry),
-  "TexturePass": () => (/* reexport */ TexturePass),
-  "ThreeMFLoader": () => (/* reexport */ ThreeMFLoader),
-  "TiltLoader": () => (/* reexport */ TiltLoader),
-  "Timer": () => (/* reexport */ Timer),
-  "ToneMapShader": () => (/* reexport */ ToneMapShader),
-  "ToonShader1": () => (/* reexport */ ToonShader1),
-  "ToonShader2": () => (/* reexport */ ToonShader2),
-  "ToonShaderDotted": () => (/* reexport */ ToonShaderDotted),
-  "ToonShaderHatching": () => (/* reexport */ ToonShaderHatching),
-  "TorusKnot": () => (/* reexport */ TorusKnot),
-  "TrackballControls": () => (/* reexport */ TrackballControls/* TrackballControls */.$),
-  "TrackballControlsExp": () => (/* reexport */ TrackballControlsExp),
-  "TransformControls": () => (/* reexport */ TransformControls/* TransformControls */.Ys),
-  "TransformControlsGizmo": () => (/* reexport */ TransformControls/* TransformControlsGizmo */.JW),
-  "TransformControlsPlane": () => (/* reexport */ TransformControls/* TransformControlsPlane */.EC),
-  "TreesGeometry": () => (/* reexport */ TreesGeometry),
-  "TrefoilKnot": () => (/* reexport */ TrefoilKnot),
-  "TrefoilPolynomialKnot": () => (/* reexport */ TrefoilPolynomialKnot),
-  "TriangleBlurShader": () => (/* reexport */ TriangleBlurShader),
-  "TubePainter": () => (/* reexport */ TubePainter),
-  "USDZExporter": () => (/* reexport */ USDZExporter),
-  "UVsDebug": () => (/* reexport */ UVsDebug),
-  "UnpackDepthRGBAShader": () => (/* reexport */ UnpackDepthRGBAShader),
-  "UnrealBloomPass": () => (/* reexport */ UnrealBloomPass),
-  "VOXData3DTexture": () => (/* reexport */ VOXData3DTexture),
-  "VOXLoader": () => (/* reexport */ VOXLoader),
-  "VOXMesh": () => (/* reexport */ VOXMesh),
-  "VRButton": () => (/* reexport */ VRButton),
-  "VRMLLoader": () => (/* reexport */ VRMLLoader),
-  "VRMLoader": () => (/* reexport */ VRMLoader),
-  "VTKLoader": () => (/* reexport */ VTKLoader),
-  "VertexList": () => (/* reexport */ VertexList),
-  "VertexNode": () => (/* reexport */ VertexNode),
-  "VertexNormalsHelper": () => (/* reexport */ VertexNormalsHelper),
-  "VertexTangentsHelper": () => (/* reexport */ VertexTangentsHelper),
-  "VerticalBlurShader": () => (/* reexport */ VerticalBlurShader/* VerticalBlurShader */.Z),
-  "VerticalTiltShiftShader": () => (/* reexport */ VerticalTiltShiftShader),
-  "VignetteShader": () => (/* reexport */ VignetteShader),
-  "VivianiCurve": () => (/* reexport */ VivianiCurve),
-  "Volume": () => (/* reexport */ Volume),
-  "VolumeRenderShader1": () => (/* reexport */ VolumeRenderShader1),
-  "VolumeSlice": () => (/* reexport */ VolumeSlice),
-  "Water": () => (/* reexport */ Water),
-  "Water2": () => (/* reexport */ Water2),
-  "WaterPass": () => (/* reexport */ WaterPass),
-  "WaterRefractionShader": () => (/* reexport */ WaterRefractionShader),
-  "Wireframe": () => (/* reexport */ Wireframe),
-  "WireframeGeometry2": () => (/* reexport */ WireframeGeometry2),
-  "XLoader": () => (/* reexport */ XLoader),
-  "XRControllerModelFactory": () => (/* reexport */ XRControllerModelFactory),
-  "XREstimatedLight": () => (/* reexport */ XREstimatedLight),
-  "XRHandMeshModel": () => (/* reexport */ XRHandMeshModel),
-  "XRHandModelFactory": () => (/* reexport */ XRHandModelFactory),
-  "XRHandPrimitiveModel": () => (/* reexport */ XRHandPrimitiveModel),
-  "XYZLoader": () => (/* reexport */ XYZLoader),
-  "calcBSplineDerivatives": () => (/* reexport */ NURBSUtils/* calcBSplineDerivatives */.eR),
-  "calcBSplinePoint": () => (/* reexport */ NURBSUtils/* calcBSplinePoint */.bF),
-  "calcBasisFunctionDerivatives": () => (/* reexport */ NURBSUtils/* calcBasisFunctionDerivatives */.HB),
-  "calcBasisFunctions": () => (/* reexport */ NURBSUtils/* calcBasisFunctions */.EP),
-  "calcKoverI": () => (/* reexport */ NURBSUtils/* calcKoverI */.wD),
-  "calcNURBSDerivatives": () => (/* reexport */ NURBSUtils/* calcNURBSDerivatives */.MI),
-  "calcRationalCurveDerivatives": () => (/* reexport */ NURBSUtils/* calcRationalCurveDerivatives */.Yb),
-  "calcSurfacePoint": () => (/* reexport */ NURBSUtils/* calcSurfacePoint */.nl),
-  "computeMorphedAttributes": () => (/* reexport */ BufferGeometryUtils.computeMorphedAttributes),
-  "createText": () => (/* reexport */ createText),
-  "edgeTable": () => (/* reexport */ edgeTable),
-  "estimateBytesUsed": () => (/* reexport */ BufferGeometryUtils.estimateBytesUsed),
-  "fetchProfile": () => (/* reexport */ fetchProfile),
-  "fetchProfilesList": () => (/* reexport */ fetchProfilesList),
-  "findSpan": () => (/* reexport */ NURBSUtils/* findSpan */.sj),
-  "getErrorMessage": () => (/* reexport */ getErrorMessage),
-  "getUniforms": () => (/* reexport */ CurveModifier/* getUniforms */.az),
-  "getWebGL2ErrorMessage": () => (/* reexport */ getWebGL2ErrorMessage),
-  "getWebGLErrorMessage": () => (/* reexport */ getWebGLErrorMessage),
-  "initSplineTexture": () => (/* reexport */ CurveModifier/* initSplineTexture */.z_),
-  "interleaveAttributes": () => (/* reexport */ BufferGeometryUtils.interleaveAttributes),
-  "isWebGL2Available": () => (/* reexport */ isWebGL2Available),
-  "isWebGLAvailable": () => (/* reexport */ isWebGLAvailable),
-  "mergeBufferAttributes": () => (/* reexport */ BufferGeometryUtils.mergeBufferAttributes),
-  "mergeBufferGeometries": () => (/* reexport */ BufferGeometryUtils.mergeBufferGeometries),
-  "mergeVertices": () => (/* reexport */ BufferGeometryUtils.mergeVertices),
-  "modifyShader": () => (/* reexport */ CurveModifier/* modifyShader */.i_),
-  "toCreasedNormals": () => (/* reexport */ BufferGeometryUtils.toCreasedNormals),
-  "toTrianglesDrawMode": () => (/* reexport */ BufferGeometryUtils.toTrianglesDrawMode),
-  "triTable": () => (/* reexport */ triTable),
-  "updateSplineTexture": () => (/* reexport */ CurveModifier/* updateSplineTexture */.TU)
-});
-
-// EXTERNAL MODULE: ./node_modules/three/build/three.module.js
-var three_module = __webpack_require__(99477);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/MD2Loader.js
-
-const _normalData = [
-  [-0.525731, 0, 0.850651],
-  [-0.442863, 0.238856, 0.864188],
-  [-0.295242, 0, 0.955423],
-  [-0.309017, 0.5, 0.809017],
-  [-0.16246, 0.262866, 0.951056],
-  [0, 0, 1],
-  [0, 0.850651, 0.525731],
-  [-0.147621, 0.716567, 0.681718],
-  [0.147621, 0.716567, 0.681718],
-  [0, 0.525731, 0.850651],
-  [0.309017, 0.5, 0.809017],
-  [0.525731, 0, 0.850651],
-  [0.295242, 0, 0.955423],
-  [0.442863, 0.238856, 0.864188],
-  [0.16246, 0.262866, 0.951056],
-  [-0.681718, 0.147621, 0.716567],
-  [-0.809017, 0.309017, 0.5],
-  [-0.587785, 0.425325, 0.688191],
-  [-0.850651, 0.525731, 0],
-  [-0.864188, 0.442863, 0.238856],
-  [-0.716567, 0.681718, 0.147621],
-  [-0.688191, 0.587785, 0.425325],
-  [-0.5, 0.809017, 0.309017],
-  [-0.238856, 0.864188, 0.442863],
-  [-0.425325, 0.688191, 0.587785],
-  [-0.716567, 0.681718, -0.147621],
-  [-0.5, 0.809017, -0.309017],
-  [-0.525731, 0.850651, 0],
-  [0, 0.850651, -0.525731],
-  [-0.238856, 0.864188, -0.442863],
-  [0, 0.955423, -0.295242],
-  [-0.262866, 0.951056, -0.16246],
-  [0, 1, 0],
-  [0, 0.955423, 0.295242],
-  [-0.262866, 0.951056, 0.16246],
-  [0.238856, 0.864188, 0.442863],
-  [0.262866, 0.951056, 0.16246],
-  [0.5, 0.809017, 0.309017],
-  [0.238856, 0.864188, -0.442863],
-  [0.262866, 0.951056, -0.16246],
-  [0.5, 0.809017, -0.309017],
-  [0.850651, 0.525731, 0],
-  [0.716567, 0.681718, 0.147621],
-  [0.716567, 0.681718, -0.147621],
-  [0.525731, 0.850651, 0],
-  [0.425325, 0.688191, 0.587785],
-  [0.864188, 0.442863, 0.238856],
-  [0.688191, 0.587785, 0.425325],
-  [0.809017, 0.309017, 0.5],
-  [0.681718, 0.147621, 0.716567],
-  [0.587785, 0.425325, 0.688191],
-  [0.955423, 0.295242, 0],
-  [1, 0, 0],
-  [0.951056, 0.16246, 0.262866],
-  [0.850651, -0.525731, 0],
-  [0.955423, -0.295242, 0],
-  [0.864188, -0.442863, 0.238856],
-  [0.951056, -0.16246, 0.262866],
-  [0.809017, -0.309017, 0.5],
-  [0.681718, -0.147621, 0.716567],
-  [0.850651, 0, 0.525731],
-  [0.864188, 0.442863, -0.238856],
-  [0.809017, 0.309017, -0.5],
-  [0.951056, 0.16246, -0.262866],
-  [0.525731, 0, -0.850651],
-  [0.681718, 0.147621, -0.716567],
-  [0.681718, -0.147621, -0.716567],
-  [0.850651, 0, -0.525731],
-  [0.809017, -0.309017, -0.5],
-  [0.864188, -0.442863, -0.238856],
-  [0.951056, -0.16246, -0.262866],
-  [0.147621, 0.716567, -0.681718],
-  [0.309017, 0.5, -0.809017],
-  [0.425325, 0.688191, -0.587785],
-  [0.442863, 0.238856, -0.864188],
-  [0.587785, 0.425325, -0.688191],
-  [0.688191, 0.587785, -0.425325],
-  [-0.147621, 0.716567, -0.681718],
-  [-0.309017, 0.5, -0.809017],
-  [0, 0.525731, -0.850651],
-  [-0.525731, 0, -0.850651],
-  [-0.442863, 0.238856, -0.864188],
-  [-0.295242, 0, -0.955423],
-  [-0.16246, 0.262866, -0.951056],
-  [0, 0, -1],
-  [0.295242, 0, -0.955423],
-  [0.16246, 0.262866, -0.951056],
-  [-0.442863, -0.238856, -0.864188],
-  [-0.309017, -0.5, -0.809017],
-  [-0.16246, -0.262866, -0.951056],
-  [0, -0.850651, -0.525731],
-  [-0.147621, -0.716567, -0.681718],
-  [0.147621, -0.716567, -0.681718],
-  [0, -0.525731, -0.850651],
-  [0.309017, -0.5, -0.809017],
-  [0.442863, -0.238856, -0.864188],
-  [0.16246, -0.262866, -0.951056],
-  [0.238856, -0.864188, -0.442863],
-  [0.5, -0.809017, -0.309017],
-  [0.425325, -0.688191, -0.587785],
-  [0.716567, -0.681718, -0.147621],
-  [0.688191, -0.587785, -0.425325],
-  [0.587785, -0.425325, -0.688191],
-  [0, -0.955423, -0.295242],
-  [0, -1, 0],
-  [0.262866, -0.951056, -0.16246],
-  [0, -0.850651, 0.525731],
-  [0, -0.955423, 0.295242],
-  [0.238856, -0.864188, 0.442863],
-  [0.262866, -0.951056, 0.16246],
-  [0.5, -0.809017, 0.309017],
-  [0.716567, -0.681718, 0.147621],
-  [0.525731, -0.850651, 0],
-  [-0.238856, -0.864188, -0.442863],
-  [-0.5, -0.809017, -0.309017],
-  [-0.262866, -0.951056, -0.16246],
-  [-0.850651, -0.525731, 0],
-  [-0.716567, -0.681718, -0.147621],
-  [-0.716567, -0.681718, 0.147621],
-  [-0.525731, -0.850651, 0],
-  [-0.5, -0.809017, 0.309017],
-  [-0.238856, -0.864188, 0.442863],
-  [-0.262866, -0.951056, 0.16246],
-  [-0.864188, -0.442863, 0.238856],
-  [-0.809017, -0.309017, 0.5],
-  [-0.688191, -0.587785, 0.425325],
-  [-0.681718, -0.147621, 0.716567],
-  [-0.442863, -0.238856, 0.864188],
-  [-0.587785, -0.425325, 0.688191],
-  [-0.309017, -0.5, 0.809017],
-  [-0.147621, -0.716567, 0.681718],
-  [-0.425325, -0.688191, 0.587785],
-  [-0.16246, -0.262866, 0.951056],
-  [0.442863, -0.238856, 0.864188],
-  [0.16246, -0.262866, 0.951056],
-  [0.309017, -0.5, 0.809017],
-  [0.147621, -0.716567, 0.681718],
-  [0, -0.525731, 0.850651],
-  [0.425325, -0.688191, 0.587785],
-  [0.587785, -0.425325, 0.688191],
-  [0.688191, -0.587785, 0.425325],
-  [-0.955423, 0.295242, 0],
-  [-0.951056, 0.16246, 0.262866],
-  [-1, 0, 0],
-  [-0.850651, 0, 0.525731],
-  [-0.955423, -0.295242, 0],
-  [-0.951056, -0.16246, 0.262866],
-  [-0.864188, 0.442863, -0.238856],
-  [-0.951056, 0.16246, -0.262866],
-  [-0.809017, 0.309017, -0.5],
-  [-0.864188, -0.442863, -0.238856],
-  [-0.951056, -0.16246, -0.262866],
-  [-0.809017, -0.309017, -0.5],
-  [-0.681718, 0.147621, -0.716567],
-  [-0.681718, -0.147621, -0.716567],
-  [-0.850651, 0, -0.525731],
-  [-0.688191, 0.587785, -0.425325],
-  [-0.587785, 0.425325, -0.688191],
-  [-0.425325, 0.688191, -0.587785],
-  [-0.425325, -0.688191, -0.587785],
-  [-0.587785, -0.425325, -0.688191],
-  [-0.688191, -0.587785, -0.425325]
-];
-class MD2Loader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(buffer) {
-        try {
-          onLoad(scope.parse(buffer));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(buffer) {
-    const data = new DataView(buffer);
-    const header = {};
-    const headerNames = [
-      "ident",
-      "version",
-      "skinwidth",
-      "skinheight",
-      "framesize",
-      "num_skins",
-      "num_vertices",
-      "num_st",
-      "num_tris",
-      "num_glcmds",
-      "num_frames",
-      "offset_skins",
-      "offset_st",
-      "offset_tris",
-      "offset_frames",
-      "offset_glcmds",
-      "offset_end"
-    ];
-    for (let i = 0; i < headerNames.length; i++) {
-      header[headerNames[i]] = data.getInt32(i * 4, true);
-    }
-    if (header.ident !== 844121161 || header.version !== 8) {
-      console.error("Not a valid MD2 file");
-      return;
-    }
-    if (header.offset_end !== data.byteLength) {
-      console.error("Corrupted MD2 file");
-      return;
-    }
-    const geometry = new three_module.BufferGeometry();
-    const uvsTemp = [];
-    let offset = header.offset_st;
-    for (let i = 0, l = header.num_st; i < l; i++) {
-      const u = data.getInt16(offset + 0, true);
-      const v = data.getInt16(offset + 2, true);
-      uvsTemp.push(u / header.skinwidth, 1 - v / header.skinheight);
-      offset += 4;
-    }
-    offset = header.offset_tris;
-    const vertexIndices = [];
-    const uvIndices = [];
-    for (let i = 0, l = header.num_tris; i < l; i++) {
-      vertexIndices.push(
-        data.getUint16(offset + 0, true),
-        data.getUint16(offset + 2, true),
-        data.getUint16(offset + 4, true)
-      );
-      uvIndices.push(
-        data.getUint16(offset + 6, true),
-        data.getUint16(offset + 8, true),
-        data.getUint16(offset + 10, true)
-      );
-      offset += 12;
-    }
-    const translation = new three_module.Vector3();
-    const scale = new three_module.Vector3();
-    const string = [];
-    const frames = [];
-    offset = header.offset_frames;
-    for (let i = 0, l = header.num_frames; i < l; i++) {
-      scale.set(data.getFloat32(offset + 0, true), data.getFloat32(offset + 4, true), data.getFloat32(offset + 8, true));
-      translation.set(
-        data.getFloat32(offset + 12, true),
-        data.getFloat32(offset + 16, true),
-        data.getFloat32(offset + 20, true)
-      );
-      offset += 24;
-      for (let j = 0; j < 16; j++) {
-        const character = data.getUint8(offset + j, true);
-        if (character === 0)
-          break;
-        string[j] = character;
-      }
-      const frame = {
-        name: String.fromCharCode.apply(null, string),
-        vertices: [],
-        normals: []
-      };
-      offset += 16;
-      for (let j = 0; j < header.num_vertices; j++) {
-        let x = data.getUint8(offset++, true);
-        let y = data.getUint8(offset++, true);
-        let z = data.getUint8(offset++, true);
-        const n = _normalData[data.getUint8(offset++, true)];
-        x = x * scale.x + translation.x;
-        y = y * scale.y + translation.y;
-        z = z * scale.z + translation.z;
-        frame.vertices.push(x, z, y);
-        frame.normals.push(n[0], n[2], n[1]);
-      }
-      frames.push(frame);
-    }
-    const positions = [];
-    const normals = [];
-    const uvs = [];
-    const verticesTemp = frames[0].vertices;
-    const normalsTemp = frames[0].normals;
-    for (let i = 0, l = vertexIndices.length; i < l; i++) {
-      const vertexIndex = vertexIndices[i];
-      let stride = vertexIndex * 3;
-      const x = verticesTemp[stride];
-      const y = verticesTemp[stride + 1];
-      const z = verticesTemp[stride + 2];
-      positions.push(x, y, z);
-      const nx = normalsTemp[stride];
-      const ny = normalsTemp[stride + 1];
-      const nz = normalsTemp[stride + 2];
-      normals.push(nx, ny, nz);
-      const uvIndex = uvIndices[i];
-      stride = uvIndex * 2;
-      const u = uvsTemp[stride];
-      const v = uvsTemp[stride + 1];
-      uvs.push(u, v);
-    }
-    geometry.setAttribute("position", new three_module.Float32BufferAttribute(positions, 3));
-    geometry.setAttribute("normal", new three_module.Float32BufferAttribute(normals, 3));
-    geometry.setAttribute("uv", new three_module.Float32BufferAttribute(uvs, 2));
-    const morphPositions = [];
-    const morphNormals = [];
-    for (let i = 0, l = frames.length; i < l; i++) {
-      const frame = frames[i];
-      const attributeName = frame.name;
-      if (frame.vertices.length > 0) {
-        const positions2 = [];
-        for (let j = 0, jl = vertexIndices.length; j < jl; j++) {
-          const vertexIndex = vertexIndices[j];
-          const stride = vertexIndex * 3;
-          const x = frame.vertices[stride];
-          const y = frame.vertices[stride + 1];
-          const z = frame.vertices[stride + 2];
-          positions2.push(x, y, z);
-        }
-        const positionAttribute = new three_module.Float32BufferAttribute(positions2, 3);
-        positionAttribute.name = attributeName;
-        morphPositions.push(positionAttribute);
-      }
-      if (frame.normals.length > 0) {
-        const normals2 = [];
-        for (let j = 0, jl = vertexIndices.length; j < jl; j++) {
-          const vertexIndex = vertexIndices[j];
-          const stride = vertexIndex * 3;
-          const nx = frame.normals[stride];
-          const ny = frame.normals[stride + 1];
-          const nz = frame.normals[stride + 2];
-          normals2.push(nx, ny, nz);
-        }
-        const normalAttribute = new three_module.Float32BufferAttribute(normals2, 3);
-        normalAttribute.name = attributeName;
-        morphNormals.push(normalAttribute);
-      }
-    }
-    geometry.morphAttributes.position = morphPositions;
-    geometry.morphAttributes.normal = morphNormals;
-    geometry.morphTargetsRelative = false;
-    geometry.animations = three_module.AnimationClip.CreateClipsFromMorphTargetSequences(frames, 10);
-    return geometry;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/MorphBlendMesh.js
-
-class MorphBlendMesh extends three_module.Mesh {
-  constructor(geometry, material) {
-    super(geometry, material);
-    this.animationsMap = {};
-    this.animationsList = [];
-    const numFrames = Object.keys(this.morphTargetDictionary).length;
-    const name = "__default";
-    const startFrame = 0;
-    const endFrame = numFrames - 1;
-    const fps = numFrames / 1;
-    this.createAnimation(name, startFrame, endFrame, fps);
-    this.setAnimationWeight(name, 1);
-  }
-  createAnimation(name, start, end, fps) {
-    const animation = {
-      start,
-      end,
-      length: end - start + 1,
-      fps,
-      duration: (end - start) / fps,
-      lastFrame: 0,
-      currentFrame: 0,
-      active: false,
-      time: 0,
-      direction: 1,
-      weight: 1,
-      directionBackwards: false,
-      mirroredLoop: false
-    };
-    this.animationsMap[name] = animation;
-    this.animationsList.push(animation);
-  }
-  autoCreateAnimations(fps) {
-    const pattern = /([a-z]+)_?(\d+)/i;
-    let firstAnimation;
-    const frameRanges = {};
-    let i = 0;
-    for (const key in this.morphTargetDictionary) {
-      const chunks = key.match(pattern);
-      if (chunks && chunks.length > 1) {
-        const name = chunks[1];
-        if (!frameRanges[name])
-          frameRanges[name] = { start: Infinity, end: -Infinity };
-        const range = frameRanges[name];
-        if (i < range.start)
-          range.start = i;
-        if (i > range.end)
-          range.end = i;
-        if (!firstAnimation)
-          firstAnimation = name;
-      }
-      i++;
-    }
-    for (const name in frameRanges) {
-      const range = frameRanges[name];
-      this.createAnimation(name, range.start, range.end, fps);
-    }
-    this.firstAnimation = firstAnimation;
-  }
-  setAnimationDirectionForward(name) {
-    const animation = this.animationsMap[name];
-    if (animation) {
-      animation.direction = 1;
-      animation.directionBackwards = false;
-    }
-  }
-  setAnimationDirectionBackward(name) {
-    const animation = this.animationsMap[name];
-    if (animation) {
-      animation.direction = -1;
-      animation.directionBackwards = true;
-    }
-  }
-  setAnimationFPS(name, fps) {
-    const animation = this.animationsMap[name];
-    if (animation) {
-      animation.fps = fps;
-      animation.duration = (animation.end - animation.start) / animation.fps;
-    }
-  }
-  setAnimationDuration(name, duration) {
-    const animation = this.animationsMap[name];
-    if (animation) {
-      animation.duration = duration;
-      animation.fps = (animation.end - animation.start) / animation.duration;
-    }
-  }
-  setAnimationWeight(name, weight) {
-    const animation = this.animationsMap[name];
-    if (animation) {
-      animation.weight = weight;
-    }
-  }
-  setAnimationTime(name, time) {
-    const animation = this.animationsMap[name];
-    if (animation) {
-      animation.time = time;
-    }
-  }
-  getAnimationTime(name) {
-    let time = 0;
-    const animation = this.animationsMap[name];
-    if (animation) {
-      time = animation.time;
-    }
-    return time;
-  }
-  getAnimationDuration(name) {
-    let duration = -1;
-    const animation = this.animationsMap[name];
-    if (animation) {
-      duration = animation.duration;
-    }
-    return duration;
-  }
-  playAnimation(name) {
-    const animation = this.animationsMap[name];
-    if (animation) {
-      animation.time = 0;
-      animation.active = true;
-    } else {
-      console.warn("THREE.MorphBlendMesh: animation[" + name + "] undefined in .playAnimation()");
-    }
-  }
-  stopAnimation(name) {
-    const animation = this.animationsMap[name];
-    if (animation) {
-      animation.active = false;
-    }
-  }
-  update(delta) {
-    for (let i = 0, il = this.animationsList.length; i < il; i++) {
-      const animation = this.animationsList[i];
-      if (!animation.active)
-        continue;
-      const frameTime = animation.duration / animation.length;
-      animation.time += animation.direction * delta;
-      if (animation.mirroredLoop) {
-        if (animation.time > animation.duration || animation.time < 0) {
-          animation.direction *= -1;
-          if (animation.time > animation.duration) {
-            animation.time = animation.duration;
-            animation.directionBackwards = true;
-          }
-          if (animation.time < 0) {
-            animation.time = 0;
-            animation.directionBackwards = false;
-          }
-        }
-      } else {
-        animation.time = animation.time % animation.duration;
-        if (animation.time < 0)
-          animation.time += animation.duration;
-      }
-      const keyframe = animation.start + three_module.MathUtils.clamp(Math.floor(animation.time / frameTime), 0, animation.length - 1);
-      const weight = animation.weight;
-      if (keyframe !== animation.currentFrame) {
-        this.morphTargetInfluences[animation.lastFrame] = 0;
-        this.morphTargetInfluences[animation.currentFrame] = 1 * weight;
-        this.morphTargetInfluences[keyframe] = 0;
-        animation.lastFrame = animation.currentFrame;
-        animation.currentFrame = keyframe;
-      }
-      let mix = animation.time % frameTime / frameTime;
-      if (animation.directionBackwards)
-        mix = 1 - mix;
-      if (animation.currentFrame !== animation.lastFrame) {
-        this.morphTargetInfluences[animation.currentFrame] = mix * weight;
-        this.morphTargetInfluences[animation.lastFrame] = (1 - mix) * weight;
-      } else {
-        this.morphTargetInfluences[animation.currentFrame] = weight;
-      }
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/MD2CharacterComplex.js
-
-
-
-class MD2CharacterComplex {
-  constructor() {
-    this.scale = 1;
-    this.animationFPS = 6;
-    this.transitionFrames = 15;
-    this.maxSpeed = 275;
-    this.maxReverseSpeed = -275;
-    this.frontAcceleration = 600;
-    this.backAcceleration = 600;
-    this.frontDecceleration = 600;
-    this.angularSpeed = 2.5;
-    this.root = new three_module.Object3D();
-    this.meshBody = null;
-    this.meshWeapon = null;
-    this.controls = null;
-    this.skinsBody = [];
-    this.skinsWeapon = [];
-    this.weapons = [];
-    this.currentSkin = void 0;
-    this.onLoadComplete = function() {
-    };
-    this.meshes = [];
-    this.animations = {};
-    this.loadCounter = 0;
-    this.speed = 0;
-    this.bodyOrientation = 0;
-    this.walkSpeed = this.maxSpeed;
-    this.crouchSpeed = this.maxSpeed * 0.5;
-    this.activeAnimation = null;
-    this.oldAnimation = null;
-  }
-  enableShadows(enable) {
-    for (let i = 0; i < this.meshes.length; i++) {
-      this.meshes[i].castShadow = enable;
-      this.meshes[i].receiveShadow = enable;
-    }
-  }
-  setVisible(enable) {
-    for (let i = 0; i < this.meshes.length; i++) {
-      this.meshes[i].visible = enable;
-      this.meshes[i].visible = enable;
-    }
-  }
-  shareParts(original) {
-    this.animations = original.animations;
-    this.walkSpeed = original.walkSpeed;
-    this.crouchSpeed = original.crouchSpeed;
-    this.skinsBody = original.skinsBody;
-    this.skinsWeapon = original.skinsWeapon;
-    const mesh = this._createPart(original.meshBody.geometry, this.skinsBody[0]);
-    mesh.scale.set(this.scale, this.scale, this.scale);
-    this.root.position.y = original.root.position.y;
-    this.root.add(mesh);
-    this.meshBody = mesh;
-    this.meshes.push(mesh);
-    for (let i = 0; i < original.weapons.length; i++) {
-      const meshWeapon = this._createPart(original.weapons[i].geometry, this.skinsWeapon[i]);
-      meshWeapon.scale.set(this.scale, this.scale, this.scale);
-      meshWeapon.visible = false;
-      meshWeapon.name = original.weapons[i].name;
-      this.root.add(meshWeapon);
-      this.weapons[i] = meshWeapon;
-      this.meshWeapon = meshWeapon;
-      this.meshes.push(meshWeapon);
-    }
-  }
-  loadParts(config) {
-    const scope = this;
-    function loadTextures(baseUrl, textureUrls) {
-      const textureLoader = new three_module.TextureLoader();
-      const textures = [];
-      for (let i = 0; i < textureUrls.length; i++) {
-        textures[i] = textureLoader.load(baseUrl + textureUrls[i], checkLoadingComplete);
-        textures[i].mapping = three_module.UVMapping;
-        textures[i].name = textureUrls[i];
-        if ("colorSpace" in textures[i])
-          textures[i].colorSpace = "srgb";
-        else
-          textures[i].encoding = 3001;
-      }
-      return textures;
-    }
-    function checkLoadingComplete() {
-      scope.loadCounter -= 1;
-      if (scope.loadCounter === 0)
-        scope.onLoadComplete();
-    }
-    this.animations = config.animations;
-    this.walkSpeed = config.walkSpeed;
-    this.crouchSpeed = config.crouchSpeed;
-    this.loadCounter = config.weapons.length * 2 + config.skins.length + 1;
-    const weaponsTextures = [];
-    for (let i = 0; i < config.weapons.length; i++)
-      weaponsTextures[i] = config.weapons[i][1];
-    this.skinsBody = loadTextures(config.baseUrl + "skins/", config.skins);
-    this.skinsWeapon = loadTextures(config.baseUrl + "skins/", weaponsTextures);
-    const loader = new MD2Loader();
-    loader.load(config.baseUrl + config.body, function(geo) {
-      const boundingBox = new three_module.Box3();
-      boundingBox.setFromBufferAttribute(geo.attributes.position);
-      scope.root.position.y = -scope.scale * boundingBox.min.y;
-      const mesh = scope._createPart(geo, scope.skinsBody[0]);
-      mesh.scale.set(scope.scale, scope.scale, scope.scale);
-      scope.root.add(mesh);
-      scope.meshBody = mesh;
-      scope.meshes.push(mesh);
-      checkLoadingComplete();
-    });
-    const generateCallback = function(index, name) {
-      return function(geo) {
-        const mesh = scope._createPart(geo, scope.skinsWeapon[index]);
-        mesh.scale.set(scope.scale, scope.scale, scope.scale);
-        mesh.visible = false;
-        mesh.name = name;
-        scope.root.add(mesh);
-        scope.weapons[index] = mesh;
-        scope.meshWeapon = mesh;
-        scope.meshes.push(mesh);
-        checkLoadingComplete();
-      };
-    };
-    for (let i = 0; i < config.weapons.length; i++) {
-      loader.load(config.baseUrl + config.weapons[i][0], generateCallback(i, config.weapons[i][0]));
-    }
-  }
-  setPlaybackRate(rate) {
-    if (this.meshBody)
-      this.meshBody.duration = this.meshBody.baseDuration / rate;
-    if (this.meshWeapon)
-      this.meshWeapon.duration = this.meshWeapon.baseDuration / rate;
-  }
-  setWireframe(wireframeEnabled) {
-    if (wireframeEnabled) {
-      if (this.meshBody)
-        this.meshBody.material = this.meshBody.materialWireframe;
-      if (this.meshWeapon)
-        this.meshWeapon.material = this.meshWeapon.materialWireframe;
-    } else {
-      if (this.meshBody)
-        this.meshBody.material = this.meshBody.materialTexture;
-      if (this.meshWeapon)
-        this.meshWeapon.material = this.meshWeapon.materialTexture;
-    }
-  }
-  setSkin(index) {
-    if (this.meshBody && this.meshBody.material.wireframe === false) {
-      this.meshBody.material.map = this.skinsBody[index];
-      this.currentSkin = index;
-    }
-  }
-  setWeapon(index) {
-    for (let i = 0; i < this.weapons.length; i++)
-      this.weapons[i].visible = false;
-    const activeWeapon = this.weapons[index];
-    if (activeWeapon) {
-      activeWeapon.visible = true;
-      this.meshWeapon = activeWeapon;
-      if (this.activeAnimation) {
-        activeWeapon.playAnimation(this.activeAnimation);
-        this.meshWeapon.setAnimationTime(this.activeAnimation, this.meshBody.getAnimationTime(this.activeAnimation));
-      }
-    }
-  }
-  setAnimation(animationName) {
-    if (animationName === this.activeAnimation || !animationName)
-      return;
-    if (this.meshBody) {
-      this.meshBody.setAnimationWeight(animationName, 0);
-      this.meshBody.playAnimation(animationName);
-      this.oldAnimation = this.activeAnimation;
-      this.activeAnimation = animationName;
-      this.blendCounter = this.transitionFrames;
-    }
-    if (this.meshWeapon) {
-      this.meshWeapon.setAnimationWeight(animationName, 0);
-      this.meshWeapon.playAnimation(animationName);
-    }
-  }
-  update(delta) {
-    if (this.controls)
-      this.updateMovementModel(delta);
-    if (this.animations) {
-      this.updateBehaviors();
-      this.updateAnimations(delta);
-    }
-  }
-  updateAnimations(delta) {
-    let mix = 1;
-    if (this.blendCounter > 0) {
-      mix = (this.transitionFrames - this.blendCounter) / this.transitionFrames;
-      this.blendCounter -= 1;
-    }
-    if (this.meshBody) {
-      this.meshBody.update(delta);
-      this.meshBody.setAnimationWeight(this.activeAnimation, mix);
-      this.meshBody.setAnimationWeight(this.oldAnimation, 1 - mix);
-    }
-    if (this.meshWeapon) {
-      this.meshWeapon.update(delta);
-      this.meshWeapon.setAnimationWeight(this.activeAnimation, mix);
-      this.meshWeapon.setAnimationWeight(this.oldAnimation, 1 - mix);
-    }
-  }
-  updateBehaviors() {
-    const controls = this.controls;
-    const animations = this.animations;
-    let moveAnimation, idleAnimation;
-    if (controls.crouch) {
-      moveAnimation = animations["crouchMove"];
-      idleAnimation = animations["crouchIdle"];
-    } else {
-      moveAnimation = animations["move"];
-      idleAnimation = animations["idle"];
-    }
-    if (controls.jump) {
-      moveAnimation = animations["jump"];
-      idleAnimation = animations["jump"];
-    }
-    if (controls.attack) {
-      if (controls.crouch) {
-        moveAnimation = animations["crouchAttack"];
-        idleAnimation = animations["crouchAttack"];
-      } else {
-        moveAnimation = animations["attack"];
-        idleAnimation = animations["attack"];
-      }
-    }
-    if (controls.moveForward || controls.moveBackward || controls.moveLeft || controls.moveRight) {
-      if (this.activeAnimation !== moveAnimation) {
-        this.setAnimation(moveAnimation);
-      }
-    }
-    if (Math.abs(this.speed) < 0.2 * this.maxSpeed && !(controls.moveLeft || controls.moveRight || controls.moveForward || controls.moveBackward)) {
-      if (this.activeAnimation !== idleAnimation) {
-        this.setAnimation(idleAnimation);
-      }
-    }
-    if (controls.moveForward) {
-      if (this.meshBody) {
-        this.meshBody.setAnimationDirectionForward(this.activeAnimation);
-        this.meshBody.setAnimationDirectionForward(this.oldAnimation);
-      }
-      if (this.meshWeapon) {
-        this.meshWeapon.setAnimationDirectionForward(this.activeAnimation);
-        this.meshWeapon.setAnimationDirectionForward(this.oldAnimation);
-      }
-    }
-    if (controls.moveBackward) {
-      if (this.meshBody) {
-        this.meshBody.setAnimationDirectionBackward(this.activeAnimation);
-        this.meshBody.setAnimationDirectionBackward(this.oldAnimation);
-      }
-      if (this.meshWeapon) {
-        this.meshWeapon.setAnimationDirectionBackward(this.activeAnimation);
-        this.meshWeapon.setAnimationDirectionBackward(this.oldAnimation);
-      }
-    }
-  }
-  updateMovementModel(delta) {
-    function exponentialEaseOut(k) {
-      return k === 1 ? 1 : -Math.pow(2, -10 * k) + 1;
-    }
-    const controls = this.controls;
-    if (controls.crouch)
-      this.maxSpeed = this.crouchSpeed;
-    else
-      this.maxSpeed = this.walkSpeed;
-    this.maxReverseSpeed = -this.maxSpeed;
-    if (controls.moveForward)
-      this.speed = three_module.MathUtils.clamp(this.speed + delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed);
-    if (controls.moveBackward)
-      this.speed = three_module.MathUtils.clamp(this.speed - delta * this.backAcceleration, this.maxReverseSpeed, this.maxSpeed);
-    const dir = 1;
-    if (controls.moveLeft) {
-      this.bodyOrientation += delta * this.angularSpeed;
-      this.speed = three_module.MathUtils.clamp(
-        this.speed + dir * delta * this.frontAcceleration,
-        this.maxReverseSpeed,
-        this.maxSpeed
-      );
-    }
-    if (controls.moveRight) {
-      this.bodyOrientation -= delta * this.angularSpeed;
-      this.speed = three_module.MathUtils.clamp(
-        this.speed + dir * delta * this.frontAcceleration,
-        this.maxReverseSpeed,
-        this.maxSpeed
-      );
-    }
-    if (!(controls.moveForward || controls.moveBackward)) {
-      if (this.speed > 0) {
-        const k = exponentialEaseOut(this.speed / this.maxSpeed);
-        this.speed = three_module.MathUtils.clamp(this.speed - k * delta * this.frontDecceleration, 0, this.maxSpeed);
-      } else {
-        const k = exponentialEaseOut(this.speed / this.maxReverseSpeed);
-        this.speed = three_module.MathUtils.clamp(this.speed + k * delta * this.backAcceleration, this.maxReverseSpeed, 0);
-      }
-    }
-    const forwardDelta = this.speed * delta;
-    this.root.position.x += Math.sin(this.bodyOrientation) * forwardDelta;
-    this.root.position.z += Math.cos(this.bodyOrientation) * forwardDelta;
-    this.root.rotation.y = this.bodyOrientation;
-  }
-  // internal
-  _createPart(geometry, skinMap) {
-    const materialWireframe = new three_module.MeshLambertMaterial({
-      color: 16755200,
-      wireframe: true,
-      morphTargets: true,
-      morphNormals: true
-    });
-    const materialTexture = new three_module.MeshLambertMaterial({
-      color: 16777215,
-      wireframe: false,
-      map: skinMap,
-      morphTargets: true,
-      morphNormals: true
-    });
-    const mesh = new MorphBlendMesh(geometry, materialTexture);
-    mesh.rotation.y = -Math.PI / 2;
-    mesh.materialTexture = materialTexture;
-    mesh.materialWireframe = materialWireframe;
-    mesh.autoCreateAnimations(this.animationFPS);
-    return mesh;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/math/ConvexHull.js
-
-const Visible = 0;
-const Deleted = 1;
-const _v1 = /* @__PURE__ */ new three_module.Vector3();
-const _line3 = /* @__PURE__ */ new three_module.Line3();
-const _plane = /* @__PURE__ */ new three_module.Plane();
-const _closestPoint = /* @__PURE__ */ new three_module.Vector3();
-const _triangle = /* @__PURE__ */ new three_module.Triangle();
-class ConvexHull {
-  constructor() {
-    this.tolerance = -1;
-    this.faces = [];
-    this.newFaces = [];
-    this.assigned = new VertexList();
-    this.unassigned = new VertexList();
-    this.vertices = [];
-  }
-  setFromPoints(points) {
-    if (points.length >= 4) {
-      this.makeEmpty();
-      for (let i = 0, l = points.length; i < l; i++) {
-        this.vertices.push(new VertexNode(points[i]));
-      }
-      this.compute();
-    }
-    return this;
-  }
-  setFromObject(object) {
-    const points = [];
-    object.updateMatrixWorld(true);
-    object.traverse(function(node) {
-      const geometry = node.geometry;
-      if (geometry !== void 0) {
-        const attribute = geometry.attributes.position;
-        if (attribute !== void 0) {
-          for (let i = 0, l = attribute.count; i < l; i++) {
-            const point = new three_module.Vector3();
-            point.fromBufferAttribute(attribute, i).applyMatrix4(node.matrixWorld);
-            points.push(point);
-          }
-        }
-      }
-    });
-    return this.setFromPoints(points);
-  }
-  containsPoint(point) {
-    const faces = this.faces;
-    for (let i = 0, l = faces.length; i < l; i++) {
-      const face = faces[i];
-      if (face.distanceToPoint(point) > this.tolerance)
-        return false;
-    }
-    return true;
-  }
-  intersectRay(ray, target) {
-    const faces = this.faces;
-    let tNear = -Infinity;
-    let tFar = Infinity;
-    for (let i = 0, l = faces.length; i < l; i++) {
-      const face = faces[i];
-      const vN = face.distanceToPoint(ray.origin);
-      const vD = face.normal.dot(ray.direction);
-      if (vN > 0 && vD >= 0)
-        return null;
-      const t = vD !== 0 ? -vN / vD : 0;
-      if (t <= 0)
-        continue;
-      if (vD > 0) {
-        tFar = Math.min(t, tFar);
-      } else {
-        tNear = Math.max(t, tNear);
-      }
-      if (tNear > tFar) {
-        return null;
-      }
-    }
-    if (tNear !== -Infinity) {
-      ray.at(tNear, target);
-    } else {
-      ray.at(tFar, target);
-    }
-    return target;
-  }
-  intersectsRay(ray) {
-    return this.intersectRay(ray, _v1) !== null;
-  }
-  makeEmpty() {
-    this.faces = [];
-    this.vertices = [];
-    return this;
-  }
-  // Adds a vertex to the 'assigned' list of vertices and assigns it to the given face
-  addVertexToFace(vertex, face) {
-    vertex.face = face;
-    if (face.outside === null) {
-      this.assigned.append(vertex);
-    } else {
-      this.assigned.insertBefore(face.outside, vertex);
-    }
-    face.outside = vertex;
-    return this;
-  }
-  // Removes a vertex from the 'assigned' list of vertices and from the given face
-  removeVertexFromFace(vertex, face) {
-    if (vertex === face.outside) {
-      if (vertex.next !== null && vertex.next.face === face) {
-        face.outside = vertex.next;
-      } else {
-        face.outside = null;
-      }
-    }
-    this.assigned.remove(vertex);
-    return this;
-  }
-  // Removes all the visible vertices that a given face is able to see which are stored in the 'assigned' vertex list
-  removeAllVerticesFromFace(face) {
-    if (face.outside !== null) {
-      const start = face.outside;
-      let end = face.outside;
-      while (end.next !== null && end.next.face === face) {
-        end = end.next;
-      }
-      this.assigned.removeSubList(start, end);
-      start.prev = end.next = null;
-      face.outside = null;
-      return start;
-    }
-  }
-  // Removes all the visible vertices that 'face' is able to see
-  deleteFaceVertices(face, absorbingFace) {
-    const faceVertices = this.removeAllVerticesFromFace(face);
-    if (faceVertices !== void 0) {
-      if (absorbingFace === void 0) {
-        this.unassigned.appendChain(faceVertices);
-      } else {
-        let vertex = faceVertices;
-        do {
-          const nextVertex = vertex.next;
-          const distance = absorbingFace.distanceToPoint(vertex.point);
-          if (distance > this.tolerance) {
-            this.addVertexToFace(vertex, absorbingFace);
-          } else {
-            this.unassigned.append(vertex);
-          }
-          vertex = nextVertex;
-        } while (vertex !== null);
-      }
-    }
-    return this;
-  }
-  // Reassigns as many vertices as possible from the unassigned list to the new faces
-  resolveUnassignedPoints(newFaces) {
-    if (this.unassigned.isEmpty() === false) {
-      let vertex = this.unassigned.first();
-      do {
-        const nextVertex = vertex.next;
-        let maxDistance = this.tolerance;
-        let maxFace = null;
-        for (let i = 0; i < newFaces.length; i++) {
-          const face = newFaces[i];
-          if (face.mark === Visible) {
-            const distance = face.distanceToPoint(vertex.point);
-            if (distance > maxDistance) {
-              maxDistance = distance;
-              maxFace = face;
-            }
-            if (maxDistance > 1e3 * this.tolerance)
-              break;
-          }
-        }
-        if (maxFace !== null) {
-          this.addVertexToFace(vertex, maxFace);
-        }
-        vertex = nextVertex;
-      } while (vertex !== null);
-    }
-    return this;
-  }
-  // Computes the extremes of a simplex which will be the initial hull
-  computeExtremes() {
-    const min = new three_module.Vector3();
-    const max = new three_module.Vector3();
-    const minVertices = [];
-    const maxVertices = [];
-    for (let i = 0; i < 3; i++) {
-      minVertices[i] = maxVertices[i] = this.vertices[0];
-    }
-    min.copy(this.vertices[0].point);
-    max.copy(this.vertices[0].point);
-    for (let i = 0, l = this.vertices.length; i < l; i++) {
-      const vertex = this.vertices[i];
-      const point = vertex.point;
-      for (let j = 0; j < 3; j++) {
-        if (point.getComponent(j) < min.getComponent(j)) {
-          min.setComponent(j, point.getComponent(j));
-          minVertices[j] = vertex;
-        }
-      }
-      for (let j = 0; j < 3; j++) {
-        if (point.getComponent(j) > max.getComponent(j)) {
-          max.setComponent(j, point.getComponent(j));
-          maxVertices[j] = vertex;
-        }
-      }
-    }
-    this.tolerance = 3 * Number.EPSILON * (Math.max(Math.abs(min.x), Math.abs(max.x)) + Math.max(Math.abs(min.y), Math.abs(max.y)) + Math.max(Math.abs(min.z), Math.abs(max.z)));
-    return { min: minVertices, max: maxVertices };
-  }
-  // Computes the initial simplex assigning to its faces all the points
-  // that are candidates to form part of the hull
-  computeInitialHull() {
-    const vertices = this.vertices;
-    const extremes = this.computeExtremes();
-    const min = extremes.min;
-    const max = extremes.max;
-    let maxDistance = 0;
-    let index = 0;
-    for (let i = 0; i < 3; i++) {
-      const distance = max[i].point.getComponent(i) - min[i].point.getComponent(i);
-      if (distance > maxDistance) {
-        maxDistance = distance;
-        index = i;
-      }
-    }
-    const v0 = min[index];
-    const v1 = max[index];
-    let v2;
-    let v3;
-    maxDistance = 0;
-    _line3.set(v0.point, v1.point);
-    for (let i = 0, l = this.vertices.length; i < l; i++) {
-      const vertex = vertices[i];
-      if (vertex !== v0 && vertex !== v1) {
-        _line3.closestPointToPoint(vertex.point, true, _closestPoint);
-        const distance = _closestPoint.distanceToSquared(vertex.point);
-        if (distance > maxDistance) {
-          maxDistance = distance;
-          v2 = vertex;
-        }
-      }
-    }
-    maxDistance = -1;
-    _plane.setFromCoplanarPoints(v0.point, v1.point, v2.point);
-    for (let i = 0, l = this.vertices.length; i < l; i++) {
-      const vertex = vertices[i];
-      if (vertex !== v0 && vertex !== v1 && vertex !== v2) {
-        const distance = Math.abs(_plane.distanceToPoint(vertex.point));
-        if (distance > maxDistance) {
-          maxDistance = distance;
-          v3 = vertex;
-        }
-      }
-    }
-    const faces = [];
-    if (_plane.distanceToPoint(v3.point) < 0) {
-      faces.push(Face.create(v0, v1, v2), Face.create(v3, v1, v0), Face.create(v3, v2, v1), Face.create(v3, v0, v2));
-      for (let i = 0; i < 3; i++) {
-        const j = (i + 1) % 3;
-        faces[i + 1].getEdge(2).setTwin(faces[0].getEdge(j));
-        faces[i + 1].getEdge(1).setTwin(faces[j + 1].getEdge(0));
-      }
-    } else {
-      faces.push(Face.create(v0, v2, v1), Face.create(v3, v0, v1), Face.create(v3, v1, v2), Face.create(v3, v2, v0));
-      for (let i = 0; i < 3; i++) {
-        const j = (i + 1) % 3;
-        faces[i + 1].getEdge(2).setTwin(faces[0].getEdge((3 - i) % 3));
-        faces[i + 1].getEdge(0).setTwin(faces[j + 1].getEdge(1));
-      }
-    }
-    for (let i = 0; i < 4; i++) {
-      this.faces.push(faces[i]);
-    }
-    for (let i = 0, l = vertices.length; i < l; i++) {
-      const vertex = vertices[i];
-      if (vertex !== v0 && vertex !== v1 && vertex !== v2 && vertex !== v3) {
-        maxDistance = this.tolerance;
-        let maxFace = null;
-        for (let j = 0; j < 4; j++) {
-          const distance = this.faces[j].distanceToPoint(vertex.point);
-          if (distance > maxDistance) {
-            maxDistance = distance;
-            maxFace = this.faces[j];
-          }
-        }
-        if (maxFace !== null) {
-          this.addVertexToFace(vertex, maxFace);
-        }
-      }
-    }
-    return this;
-  }
-  // Removes inactive faces
-  reindexFaces() {
-    const activeFaces = [];
-    for (let i = 0; i < this.faces.length; i++) {
-      const face = this.faces[i];
-      if (face.mark === Visible) {
-        activeFaces.push(face);
-      }
-    }
-    this.faces = activeFaces;
-    return this;
-  }
-  // Finds the next vertex to create faces with the current hull
-  nextVertexToAdd() {
-    if (this.assigned.isEmpty() === false) {
-      let eyeVertex, maxDistance = 0;
-      const eyeFace = this.assigned.first().face;
-      let vertex = eyeFace.outside;
-      do {
-        const distance = eyeFace.distanceToPoint(vertex.point);
-        if (distance > maxDistance) {
-          maxDistance = distance;
-          eyeVertex = vertex;
-        }
-        vertex = vertex.next;
-      } while (vertex !== null && vertex.face === eyeFace);
-      return eyeVertex;
-    }
-  }
-  // Computes a chain of half edges in CCW order called the 'horizon'.
-  // For an edge to be part of the horizon it must join a face that can see
-  // 'eyePoint' and a face that cannot see 'eyePoint'.
-  computeHorizon(eyePoint, crossEdge, face, horizon) {
-    this.deleteFaceVertices(face);
-    face.mark = Deleted;
-    let edge;
-    if (crossEdge === null) {
-      edge = crossEdge = face.getEdge(0);
-    } else {
-      edge = crossEdge.next;
-    }
-    do {
-      const twinEdge = edge.twin;
-      const oppositeFace = twinEdge.face;
-      if (oppositeFace.mark === Visible) {
-        if (oppositeFace.distanceToPoint(eyePoint) > this.tolerance) {
-          this.computeHorizon(eyePoint, twinEdge, oppositeFace, horizon);
-        } else {
-          horizon.push(edge);
-        }
-      }
-      edge = edge.next;
-    } while (edge !== crossEdge);
-    return this;
-  }
-  // Creates a face with the vertices 'eyeVertex.point', 'horizonEdge.tail' and 'horizonEdge.head' in CCW order
-  addAdjoiningFace(eyeVertex, horizonEdge) {
-    const face = Face.create(eyeVertex, horizonEdge.tail(), horizonEdge.head());
-    this.faces.push(face);
-    face.getEdge(-1).setTwin(horizonEdge.twin);
-    return face.getEdge(0);
-  }
-  //  Adds 'horizon.length' faces to the hull, each face will be linked with the
-  //  horizon opposite face and the face on the left/right
-  addNewFaces(eyeVertex, horizon) {
-    this.newFaces = [];
-    let firstSideEdge = null;
-    let previousSideEdge = null;
-    for (let i = 0; i < horizon.length; i++) {
-      const horizonEdge = horizon[i];
-      const sideEdge = this.addAdjoiningFace(eyeVertex, horizonEdge);
-      if (firstSideEdge === null) {
-        firstSideEdge = sideEdge;
-      } else {
-        sideEdge.next.setTwin(previousSideEdge);
-      }
-      this.newFaces.push(sideEdge.face);
-      previousSideEdge = sideEdge;
-    }
-    firstSideEdge.next.setTwin(previousSideEdge);
-    return this;
-  }
-  // Adds a vertex to the hull
-  addVertexToHull(eyeVertex) {
-    const horizon = [];
-    this.unassigned.clear();
-    this.removeVertexFromFace(eyeVertex, eyeVertex.face);
-    this.computeHorizon(eyeVertex.point, null, eyeVertex.face, horizon);
-    this.addNewFaces(eyeVertex, horizon);
-    this.resolveUnassignedPoints(this.newFaces);
-    return this;
-  }
-  cleanup() {
-    this.assigned.clear();
-    this.unassigned.clear();
-    this.newFaces = [];
-    return this;
-  }
-  compute() {
-    let vertex;
-    this.computeInitialHull();
-    while ((vertex = this.nextVertexToAdd()) !== void 0) {
-      this.addVertexToHull(vertex);
-    }
-    this.reindexFaces();
-    this.cleanup();
-    return this;
-  }
-}
-class Face {
-  constructor() {
-    this.normal = new three_module.Vector3();
-    this.midpoint = new three_module.Vector3();
-    this.area = 0;
-    this.constant = 0;
-    this.outside = null;
-    this.mark = Visible;
-    this.edge = null;
-  }
-  static create(a, b, c) {
-    const face = new Face();
-    const e0 = new HalfEdge(a, face);
-    const e1 = new HalfEdge(b, face);
-    const e2 = new HalfEdge(c, face);
-    e0.next = e2.prev = e1;
-    e1.next = e0.prev = e2;
-    e2.next = e1.prev = e0;
-    face.edge = e0;
-    return face.compute();
-  }
-  getEdge(i) {
-    let edge = this.edge;
-    while (i > 0) {
-      edge = edge.next;
-      i--;
-    }
-    while (i < 0) {
-      edge = edge.prev;
-      i++;
-    }
-    return edge;
-  }
-  compute() {
-    const a = this.edge.tail();
-    const b = this.edge.head();
-    const c = this.edge.next.head();
-    _triangle.set(a.point, b.point, c.point);
-    _triangle.getNormal(this.normal);
-    _triangle.getMidpoint(this.midpoint);
-    this.area = _triangle.getArea();
-    this.constant = this.normal.dot(this.midpoint);
-    return this;
-  }
-  distanceToPoint(point) {
-    return this.normal.dot(point) - this.constant;
-  }
-}
-class HalfEdge {
-  constructor(vertex, face) {
-    this.vertex = vertex;
-    this.prev = null;
-    this.next = null;
-    this.twin = null;
-    this.face = face;
-  }
-  head() {
-    return this.vertex;
-  }
-  tail() {
-    return this.prev ? this.prev.vertex : null;
-  }
-  length() {
-    const head = this.head();
-    const tail = this.tail();
-    if (tail !== null) {
-      return tail.point.distanceTo(head.point);
-    }
-    return -1;
-  }
-  lengthSquared() {
-    const head = this.head();
-    const tail = this.tail();
-    if (tail !== null) {
-      return tail.point.distanceToSquared(head.point);
-    }
-    return -1;
-  }
-  setTwin(edge) {
-    this.twin = edge;
-    edge.twin = this;
-    return this;
-  }
-}
-class VertexNode {
-  constructor(point) {
-    this.point = point;
-    this.prev = null;
-    this.next = null;
-    this.face = null;
-  }
-}
-class VertexList {
-  constructor() {
-    this.head = null;
-    this.tail = null;
-  }
-  first() {
-    return this.head;
-  }
-  last() {
-    return this.tail;
-  }
-  clear() {
-    this.head = this.tail = null;
-    return this;
-  }
-  // Inserts a vertex before the target vertex
-  insertBefore(target, vertex) {
-    vertex.prev = target.prev;
-    vertex.next = target;
-    if (vertex.prev === null) {
-      this.head = vertex;
-    } else {
-      vertex.prev.next = vertex;
-    }
-    target.prev = vertex;
-    return this;
-  }
-  // Inserts a vertex after the target vertex
-  insertAfter(target, vertex) {
-    vertex.prev = target;
-    vertex.next = target.next;
-    if (vertex.next === null) {
-      this.tail = vertex;
-    } else {
-      vertex.next.prev = vertex;
-    }
-    target.next = vertex;
-    return this;
-  }
-  // Appends a vertex to the end of the linked list
-  append(vertex) {
-    if (this.head === null) {
-      this.head = vertex;
-    } else {
-      this.tail.next = vertex;
-    }
-    vertex.prev = this.tail;
-    vertex.next = null;
-    this.tail = vertex;
-    return this;
-  }
-  // Appends a chain of vertices where 'vertex' is the head.
-  appendChain(vertex) {
-    if (this.head === null) {
-      this.head = vertex;
-    } else {
-      this.tail.next = vertex;
-    }
-    vertex.prev = this.tail;
-    while (vertex.next !== null) {
-      vertex = vertex.next;
-    }
-    this.tail = vertex;
-    return this;
-  }
-  // Removes a vertex from the linked list
-  remove(vertex) {
-    if (vertex.prev === null) {
-      this.head = vertex.next;
-    } else {
-      vertex.prev.next = vertex.next;
-    }
-    if (vertex.next === null) {
-      this.tail = vertex.prev;
-    } else {
-      vertex.next.prev = vertex.prev;
-    }
-    return this;
-  }
-  // Removes a list of vertices whose 'head' is 'a' and whose 'tail' is b
-  removeSubList(a, b) {
-    if (a.prev === null) {
-      this.head = b.next;
-    } else {
-      a.prev.next = b.next;
-    }
-    if (b.next === null) {
-      this.tail = a.prev;
-    } else {
-      b.next.prev = a.prev;
-    }
-    return this;
-  }
-  isEmpty() {
-    return this.head === null;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/geometries/ConvexGeometry.js
-
-
-class ConvexGeometry extends three_module.BufferGeometry {
-  constructor(points = []) {
-    super();
-    const vertices = [];
-    const normals = [];
-    const convexHull = new ConvexHull().setFromPoints(points);
-    const faces = convexHull.faces;
-    for (let i = 0; i < faces.length; i++) {
-      const face = faces[i];
-      let edge = face.edge;
-      do {
-        const point = edge.head().point;
-        vertices.push(point.x, point.y, point.z);
-        normals.push(face.normal.x, face.normal.y, face.normal.z);
-        edge = edge.next;
-      } while (edge !== face.edge);
-    }
-    this.setAttribute("position", new three_module.Float32BufferAttribute(vertices, 3));
-    this.setAttribute("normal", new three_module.Float32BufferAttribute(normals, 3));
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/ConvexObjectBreaker.js
-
-
-const ConvexObjectBreaker_v1 = /* @__PURE__ */ new three_module.Vector3();
-class ConvexObjectBreaker {
-  constructor(minSizeForBreak = 1.4, smallDelta = 1e-4) {
-    this.minSizeForBreak = minSizeForBreak;
-    this.smallDelta = smallDelta;
-    this.tempLine1 = new three_module.Line3();
-    this.tempPlane1 = new three_module.Plane();
-    this.tempPlane2 = new three_module.Plane();
-    this.tempPlane_Cut = new three_module.Plane();
-    this.tempCM1 = new three_module.Vector3();
-    this.tempCM2 = new three_module.Vector3();
-    this.tempVector3 = new three_module.Vector3();
-    this.tempVector3_2 = new three_module.Vector3();
-    this.tempVector3_3 = new three_module.Vector3();
-    this.tempVector3_P0 = new three_module.Vector3();
-    this.tempVector3_P1 = new three_module.Vector3();
-    this.tempVector3_P2 = new three_module.Vector3();
-    this.tempVector3_N0 = new three_module.Vector3();
-    this.tempVector3_N1 = new three_module.Vector3();
-    this.tempVector3_AB = new three_module.Vector3();
-    this.tempVector3_CB = new three_module.Vector3();
-    this.tempResultObjects = { object1: null, object2: null };
-    this.segments = [];
-    const n = 30 * 30;
-    for (let i = 0; i < n; i++)
-      this.segments[i] = false;
-  }
-  prepareBreakableObject(object, mass, velocity, angularVelocity, breakable) {
-    const userData = object.userData;
-    userData.mass = mass;
-    userData.velocity = velocity.clone();
-    userData.angularVelocity = angularVelocity.clone();
-    userData.breakable = breakable;
-  }
-  /*
-   * @param {int} maxRadialIterations Iterations for radial cuts.
-   * @param {int} maxRandomIterations Max random iterations for not-radial cuts
-   *
-   * Returns the array of pieces
-   */
-  subdivideByImpact(object, pointOfImpact, normal, maxRadialIterations, maxRandomIterations) {
-    const debris = [];
-    const tempPlane1 = this.tempPlane1;
-    const tempPlane2 = this.tempPlane2;
-    this.tempVector3.addVectors(pointOfImpact, normal);
-    tempPlane1.setFromCoplanarPoints(pointOfImpact, object.position, this.tempVector3);
-    const maxTotalIterations = maxRandomIterations + maxRadialIterations;
-    const scope = this;
-    function subdivideRadial(subObject, startAngle, endAngle, numIterations) {
-      if (Math.random() < numIterations * 0.05 || numIterations > maxTotalIterations) {
-        debris.push(subObject);
-        return;
-      }
-      let angle = Math.PI;
-      if (numIterations === 0) {
-        tempPlane2.normal.copy(tempPlane1.normal);
-        tempPlane2.constant = tempPlane1.constant;
-      } else {
-        if (numIterations <= maxRadialIterations) {
-          angle = (endAngle - startAngle) * (0.2 + 0.6 * Math.random()) + startAngle;
-          scope.tempVector3_2.copy(object.position).sub(pointOfImpact).applyAxisAngle(normal, angle).add(pointOfImpact);
-          tempPlane2.setFromCoplanarPoints(pointOfImpact, scope.tempVector3, scope.tempVector3_2);
-        } else {
-          angle = (0.5 * (numIterations & 1) + 0.2 * (2 - Math.random())) * Math.PI;
-          scope.tempVector3_2.copy(pointOfImpact).sub(subObject.position).applyAxisAngle(normal, angle).add(subObject.position);
-          scope.tempVector3_3.copy(normal).add(subObject.position);
-          tempPlane2.setFromCoplanarPoints(subObject.position, scope.tempVector3_3, scope.tempVector3_2);
-        }
-      }
-      scope.cutByPlane(subObject, tempPlane2, scope.tempResultObjects);
-      const obj1 = scope.tempResultObjects.object1;
-      const obj2 = scope.tempResultObjects.object2;
-      if (obj1) {
-        subdivideRadial(obj1, startAngle, angle, numIterations + 1);
-      }
-      if (obj2) {
-        subdivideRadial(obj2, angle, endAngle, numIterations + 1);
-      }
-    }
-    subdivideRadial(object, 0, 2 * Math.PI, 0);
-    return debris;
-  }
-  cutByPlane(object, plane, output) {
-    const geometry = object.geometry;
-    const coords = geometry.attributes.position.array;
-    const normals = geometry.attributes.normal.array;
-    const numPoints = coords.length / 3;
-    let numFaces = numPoints / 3;
-    let indices = geometry.getIndex();
-    if (indices) {
-      indices = indices.array;
-      numFaces = indices.length / 3;
-    }
-    function getVertexIndex(faceIdx, vert) {
-      const idx = faceIdx * 3 + vert;
-      return indices ? indices[idx] : idx;
-    }
-    const points1 = [];
-    const points2 = [];
-    const delta = this.smallDelta;
-    const numPointPairs = numPoints * numPoints;
-    for (let i = 0; i < numPointPairs; i++)
-      this.segments[i] = false;
-    const p0 = this.tempVector3_P0;
-    const p1 = this.tempVector3_P1;
-    const n0 = this.tempVector3_N0;
-    const n1 = this.tempVector3_N1;
-    for (let i = 0; i < numFaces - 1; i++) {
-      const a1 = getVertexIndex(i, 0);
-      const b1 = getVertexIndex(i, 1);
-      const c1 = getVertexIndex(i, 2);
-      n0.set(normals[a1], normals[a1] + 1, normals[a1] + 2);
-      for (let j = i + 1; j < numFaces; j++) {
-        const a2 = getVertexIndex(j, 0);
-        const b2 = getVertexIndex(j, 1);
-        const c2 = getVertexIndex(j, 2);
-        n1.set(normals[a2], normals[a2] + 1, normals[a2] + 2);
-        const coplanar = 1 - n0.dot(n1) < delta;
-        if (coplanar) {
-          if (a1 === a2 || a1 === b2 || a1 === c2) {
-            if (b1 === a2 || b1 === b2 || b1 === c2) {
-              this.segments[a1 * numPoints + b1] = true;
-              this.segments[b1 * numPoints + a1] = true;
-            } else {
-              this.segments[c1 * numPoints + a1] = true;
-              this.segments[a1 * numPoints + c1] = true;
-            }
-          } else if (b1 === a2 || b1 === b2 || b1 === c2) {
-            this.segments[c1 * numPoints + b1] = true;
-            this.segments[b1 * numPoints + c1] = true;
-          }
-        }
-      }
-    }
-    const localPlane = this.tempPlane_Cut;
-    object.updateMatrix();
-    ConvexObjectBreaker.transformPlaneToLocalSpace(plane, object.matrix, localPlane);
-    for (let i = 0; i < numFaces; i++) {
-      const va = getVertexIndex(i, 0);
-      const vb = getVertexIndex(i, 1);
-      const vc = getVertexIndex(i, 2);
-      for (let segment = 0; segment < 3; segment++) {
-        const i0 = segment === 0 ? va : segment === 1 ? vb : vc;
-        const i1 = segment === 0 ? vb : segment === 1 ? vc : va;
-        const segmentState = this.segments[i0 * numPoints + i1];
-        if (segmentState)
-          continue;
-        this.segments[i0 * numPoints + i1] = true;
-        this.segments[i1 * numPoints + i0] = true;
-        p0.set(coords[3 * i0], coords[3 * i0 + 1], coords[3 * i0 + 2]);
-        p1.set(coords[3 * i1], coords[3 * i1 + 1], coords[3 * i1 + 2]);
-        let mark0 = 0;
-        let d = localPlane.distanceToPoint(p0);
-        if (d > delta) {
-          mark0 = 2;
-          points2.push(p0.clone());
-        } else if (d < -delta) {
-          mark0 = 1;
-          points1.push(p0.clone());
-        } else {
-          mark0 = 3;
-          points1.push(p0.clone());
-          points2.push(p0.clone());
-        }
-        let mark1 = 0;
-        d = localPlane.distanceToPoint(p1);
-        if (d > delta) {
-          mark1 = 2;
-          points2.push(p1.clone());
-        } else if (d < -delta) {
-          mark1 = 1;
-          points1.push(p1.clone());
-        } else {
-          mark1 = 3;
-          points1.push(p1.clone());
-          points2.push(p1.clone());
-        }
-        if (mark0 === 1 && mark1 === 2 || mark0 === 2 && mark1 === 1) {
-          this.tempLine1.start.copy(p0);
-          this.tempLine1.end.copy(p1);
-          let intersection = new three_module.Vector3();
-          intersection = localPlane.intersectLine(this.tempLine1, intersection);
-          if (intersection === null) {
-            console.error("Internal error: segment does not intersect plane.");
-            output.segmentedObject1 = null;
-            output.segmentedObject2 = null;
-            return 0;
-          }
-          points1.push(intersection);
-          points2.push(intersection.clone());
-        }
-      }
-    }
-    const newMass = object.userData.mass * 0.5;
-    this.tempCM1.set(0, 0, 0);
-    let radius1 = 0;
-    const numPoints1 = points1.length;
-    if (numPoints1 > 0) {
-      for (let i = 0; i < numPoints1; i++)
-        this.tempCM1.add(points1[i]);
-      this.tempCM1.divideScalar(numPoints1);
-      for (let i = 0; i < numPoints1; i++) {
-        const p = points1[i];
-        p.sub(this.tempCM1);
-        radius1 = Math.max(radius1, p.x, p.y, p.z);
-      }
-      this.tempCM1.add(object.position);
-    }
-    this.tempCM2.set(0, 0, 0);
-    let radius2 = 0;
-    const numPoints2 = points2.length;
-    if (numPoints2 > 0) {
-      for (let i = 0; i < numPoints2; i++)
-        this.tempCM2.add(points2[i]);
-      this.tempCM2.divideScalar(numPoints2);
-      for (let i = 0; i < numPoints2; i++) {
-        const p = points2[i];
-        p.sub(this.tempCM2);
-        radius2 = Math.max(radius2, p.x, p.y, p.z);
-      }
-      this.tempCM2.add(object.position);
-    }
-    let object1 = null;
-    let object2 = null;
-    let numObjects = 0;
-    if (numPoints1 > 4) {
-      object1 = new three_module.Mesh(new ConvexGeometry(points1), object.material);
-      object1.position.copy(this.tempCM1);
-      object1.quaternion.copy(object.quaternion);
-      this.prepareBreakableObject(
-        object1,
-        newMass,
-        object.userData.velocity,
-        object.userData.angularVelocity,
-        2 * radius1 > this.minSizeForBreak
-      );
-      numObjects++;
-    }
-    if (numPoints2 > 4) {
-      object2 = new three_module.Mesh(new ConvexGeometry(points2), object.material);
-      object2.position.copy(this.tempCM2);
-      object2.quaternion.copy(object.quaternion);
-      this.prepareBreakableObject(
-        object2,
-        newMass,
-        object.userData.velocity,
-        object.userData.angularVelocity,
-        2 * radius2 > this.minSizeForBreak
-      );
-      numObjects++;
-    }
-    output.object1 = object1;
-    output.object2 = object2;
-    return numObjects;
-  }
-  static transformFreeVector(v, m) {
-    const x = v.x, y = v.y, z = v.z;
-    const e = m.elements;
-    v.x = e[0] * x + e[4] * y + e[8] * z;
-    v.y = e[1] * x + e[5] * y + e[9] * z;
-    v.z = e[2] * x + e[6] * y + e[10] * z;
-    return v;
-  }
-  static transformFreeVectorInverse(v, m) {
-    const x = v.x, y = v.y, z = v.z;
-    const e = m.elements;
-    v.x = e[0] * x + e[1] * y + e[2] * z;
-    v.y = e[4] * x + e[5] * y + e[6] * z;
-    v.z = e[8] * x + e[9] * y + e[10] * z;
-    return v;
-  }
-  static transformTiedVectorInverse(v, m) {
-    const x = v.x, y = v.y, z = v.z;
-    const e = m.elements;
-    v.x = e[0] * x + e[1] * y + e[2] * z - e[12];
-    v.y = e[4] * x + e[5] * y + e[6] * z - e[13];
-    v.z = e[8] * x + e[9] * y + e[10] * z - e[14];
-    return v;
-  }
-  static transformPlaneToLocalSpace(plane, m, resultPlane) {
-    resultPlane.normal.copy(plane.normal);
-    resultPlane.constant = plane.constant;
-    const referencePoint = ConvexObjectBreaker.transformTiedVectorInverse(plane.coplanarPoint(ConvexObjectBreaker_v1), m);
-    ConvexObjectBreaker.transformFreeVectorInverse(resultPlane.normal, m);
-    resultPlane.constant = -referencePoint.dot(resultPlane.normal);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/GPUComputationRenderer.js
-
-class GPUComputationRenderer {
-  constructor(sizeX, sizeY, renderer) {
-    this.variables = [];
-    this.currentTextureIndex = 0;
-    let dataType = three_module.FloatType;
-    const scene = new three_module.Scene();
-    const camera = new three_module.Camera();
-    camera.position.z = 1;
-    const passThruUniforms = {
-      passThruTexture: { value: null }
-    };
-    const passThruShader = createShaderMaterial(getPassThroughFragmentShader(), passThruUniforms);
-    const mesh = new three_module.Mesh(new three_module.PlaneGeometry(2, 2), passThruShader);
-    scene.add(mesh);
-    this.setDataType = function(type) {
-      dataType = type;
-      return this;
-    };
-    this.addVariable = function(variableName, computeFragmentShader, initialValueTexture) {
-      const material = this.createShaderMaterial(computeFragmentShader);
-      const variable = {
-        name: variableName,
-        initialValueTexture,
-        material,
-        dependencies: null,
-        renderTargets: [],
-        wrapS: null,
-        wrapT: null,
-        minFilter: three_module.NearestFilter,
-        magFilter: three_module.NearestFilter
-      };
-      this.variables.push(variable);
-      return variable;
-    };
-    this.setVariableDependencies = function(variable, dependencies) {
-      variable.dependencies = dependencies;
-    };
-    this.init = function() {
-      if (renderer.capabilities.isWebGL2 === false && renderer.extensions.has("OES_texture_float") === false) {
-        return "No OES_texture_float support for float textures.";
-      }
-      if (renderer.capabilities.maxVertexTextures === 0) {
-        return "No support for vertex shader textures.";
-      }
-      for (let i = 0; i < this.variables.length; i++) {
-        const variable = this.variables[i];
-        variable.renderTargets[0] = this.createRenderTarget(
-          sizeX,
-          sizeY,
-          variable.wrapS,
-          variable.wrapT,
-          variable.minFilter,
-          variable.magFilter
-        );
-        variable.renderTargets[1] = this.createRenderTarget(
-          sizeX,
-          sizeY,
-          variable.wrapS,
-          variable.wrapT,
-          variable.minFilter,
-          variable.magFilter
-        );
-        this.renderTexture(variable.initialValueTexture, variable.renderTargets[0]);
-        this.renderTexture(variable.initialValueTexture, variable.renderTargets[1]);
-        const material = variable.material;
-        const uniforms = material.uniforms;
-        if (variable.dependencies !== null) {
-          for (let d = 0; d < variable.dependencies.length; d++) {
-            const depVar = variable.dependencies[d];
-            if (depVar.name !== variable.name) {
-              let found = false;
-              for (let j = 0; j < this.variables.length; j++) {
-                if (depVar.name === this.variables[j].name) {
-                  found = true;
-                  break;
-                }
-              }
-              if (!found) {
-                return "Variable dependency not found. Variable=" + variable.name + ", dependency=" + depVar.name;
-              }
-            }
-            uniforms[depVar.name] = { value: null };
-            material.fragmentShader = "\nuniform sampler2D " + depVar.name + ";\n" + material.fragmentShader;
-          }
-        }
-      }
-      this.currentTextureIndex = 0;
-      return null;
-    };
-    this.compute = function() {
-      const currentTextureIndex = this.currentTextureIndex;
-      const nextTextureIndex = this.currentTextureIndex === 0 ? 1 : 0;
-      for (let i = 0, il = this.variables.length; i < il; i++) {
-        const variable = this.variables[i];
-        if (variable.dependencies !== null) {
-          const uniforms = variable.material.uniforms;
-          for (let d = 0, dl = variable.dependencies.length; d < dl; d++) {
-            const depVar = variable.dependencies[d];
-            uniforms[depVar.name].value = depVar.renderTargets[currentTextureIndex].texture;
-          }
-        }
-        this.doRenderTarget(variable.material, variable.renderTargets[nextTextureIndex]);
-      }
-      this.currentTextureIndex = nextTextureIndex;
-    };
-    this.getCurrentRenderTarget = function(variable) {
-      return variable.renderTargets[this.currentTextureIndex];
-    };
-    this.getAlternateRenderTarget = function(variable) {
-      return variable.renderTargets[this.currentTextureIndex === 0 ? 1 : 0];
-    };
-    this.dispose = function() {
-      mesh.geometry.dispose();
-      mesh.material.dispose();
-      const variables = this.variables;
-      for (let i = 0; i < variables.length; i++) {
-        const variable = variables[i];
-        if (variable.initialValueTexture)
-          variable.initialValueTexture.dispose();
-        const renderTargets = variable.renderTargets;
-        for (let j = 0; j < renderTargets.length; j++) {
-          const renderTarget = renderTargets[j];
-          renderTarget.dispose();
-        }
-      }
-    };
-    function addResolutionDefine(materialShader) {
-      materialShader.defines.resolution = "vec2( " + sizeX.toFixed(1) + ", " + sizeY.toFixed(1) + " )";
-    }
-    this.addResolutionDefine = addResolutionDefine;
-    function createShaderMaterial(computeFragmentShader, uniforms) {
-      uniforms = uniforms || {};
-      const material = new three_module.ShaderMaterial({
-        uniforms,
-        vertexShader: getPassThroughVertexShader(),
-        fragmentShader: computeFragmentShader
-      });
-      addResolutionDefine(material);
-      return material;
-    }
-    this.createShaderMaterial = createShaderMaterial;
-    this.createRenderTarget = function(sizeXTexture, sizeYTexture, wrapS, wrapT, minFilter, magFilter) {
-      sizeXTexture = sizeXTexture || sizeX;
-      sizeYTexture = sizeYTexture || sizeY;
-      wrapS = wrapS || three_module.ClampToEdgeWrapping;
-      wrapT = wrapT || three_module.ClampToEdgeWrapping;
-      minFilter = minFilter || three_module.NearestFilter;
-      magFilter = magFilter || three_module.NearestFilter;
-      const renderTarget = new three_module.WebGLRenderTarget(sizeXTexture, sizeYTexture, {
-        wrapS,
-        wrapT,
-        minFilter,
-        magFilter,
-        format: three_module.RGBAFormat,
-        type: dataType,
-        depthBuffer: false
-      });
-      return renderTarget;
-    };
-    this.createTexture = function() {
-      const data = new Float32Array(sizeX * sizeY * 4);
-      const texture = new three_module.DataTexture(data, sizeX, sizeY, three_module.RGBAFormat, three_module.FloatType);
-      texture.needsUpdate = true;
-      return texture;
-    };
-    this.renderTexture = function(input, output) {
-      passThruUniforms.passThruTexture.value = input;
-      this.doRenderTarget(passThruShader, output);
-      passThruUniforms.passThruTexture.value = null;
-    };
-    this.doRenderTarget = function(material, output) {
-      const currentRenderTarget = renderer.getRenderTarget();
-      const currentXrEnabled = renderer.xr.enabled;
-      const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
-      const currentOutputColorSpace = renderer.outputColorSpace;
-      const currentToneMapping = renderer.toneMapping;
-      renderer.xr.enabled = false;
-      renderer.shadowMap.autoUpdate = false;
-      if ("outputColorSpace" in renderer)
-        renderer.outputColorSpace = "srgb-linear";
-      else
-        renderer.encoding = 3e3;
-      renderer.toneMapping = three_module.NoToneMapping;
-      mesh.material = material;
-      renderer.setRenderTarget(output);
-      renderer.render(scene, camera);
-      mesh.material = passThruShader;
-      renderer.xr.enabled = currentXrEnabled;
-      renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
-      renderer.outputColorSpace = currentOutputColorSpace;
-      renderer.toneMapping = currentToneMapping;
-      renderer.setRenderTarget(currentRenderTarget);
-    };
-    function getPassThroughVertexShader() {
-      return "void main()	{\n\n	gl_Position = vec4( position, 1.0 );\n\n}\n";
-    }
-    function getPassThroughFragmentShader() {
-      return "uniform sampler2D passThruTexture;\n\nvoid main() {\n\n	vec2 uv = gl_FragCoord.xy / resolution.xy;\n\n	gl_FragColor = texture2D( passThruTexture, uv );\n\n}\n";
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/Gyroscope.js
-
-const _translationObject = /* @__PURE__ */ new three_module.Vector3();
-const _quaternionObject = /* @__PURE__ */ new three_module.Quaternion();
-const _scaleObject = /* @__PURE__ */ new three_module.Vector3();
-const _translationWorld = /* @__PURE__ */ new three_module.Vector3();
-const _quaternionWorld = /* @__PURE__ */ new three_module.Quaternion();
-const _scaleWorld = /* @__PURE__ */ new three_module.Vector3();
-class Gyroscope extends three_module.Object3D {
-  constructor() {
-    super();
-  }
-  updateMatrixWorld(force) {
-    this.matrixAutoUpdate && this.updateMatrix();
-    if (this.matrixWorldNeedsUpdate || force) {
-      if (this.parent !== null) {
-        this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix);
-        this.matrixWorld.decompose(_translationWorld, _quaternionWorld, _scaleWorld);
-        this.matrix.decompose(_translationObject, _quaternionObject, _scaleObject);
-        this.matrixWorld.compose(_translationWorld, _quaternionObject, _scaleWorld);
-      } else {
-        this.matrixWorld.copy(this.matrix);
-      }
-      this.matrixWorldNeedsUpdate = false;
-      force = true;
-    }
-    for (let i = 0, l = this.children.length; i < l; i++) {
-      this.children[i].updateMatrixWorld(force);
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/MorphAnimMesh.js
-
-class MorphAnimMesh extends three_module.Mesh {
-  constructor(geometry, material) {
-    super(geometry, material);
-    this.type = "MorphAnimMesh";
-    this.mixer = new three_module.AnimationMixer(this);
-    this.activeAction = null;
-  }
-  setDirectionForward() {
-    this.mixer.timeScale = 1;
-  }
-  setDirectionBackward() {
-    this.mixer.timeScale = -1;
-  }
-  playAnimation(label, fps) {
-    if (this.activeAction) {
-      this.activeAction.stop();
-      this.activeAction = null;
-    }
-    const clip = three_module.AnimationClip.findByName(this, label);
-    if (clip) {
-      const action = this.mixer.clipAction(clip);
-      action.timeScale = clip.tracks.length * fps / clip.duration;
-      this.activeAction = action.play();
-    } else {
-      throw new Error("THREE.MorphAnimMesh: animations[" + label + "] undefined in .playAnimation()");
-    }
-  }
-  updateAnimation(delta) {
-    this.mixer.update(delta);
-  }
-  copy(source, recursive) {
-    super.copy(source, recursive);
-    this.mixer = new three_module.AnimationMixer(this);
-    return this;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/RollerCoaster.js
-
-class RollerCoasterGeometry extends three_module.BufferGeometry {
-  constructor(curve, divisions) {
-    super();
-    const vertices = [];
-    const normals = [];
-    const colors = [];
-    const color1 = [1, 1, 1];
-    const color2 = [1, 1, 0];
-    const up = new three_module.Vector3(0, 1, 0);
-    const forward = new three_module.Vector3();
-    const right = new three_module.Vector3();
-    const quaternion = new three_module.Quaternion();
-    const prevQuaternion = new three_module.Quaternion();
-    prevQuaternion.setFromAxisAngle(up, Math.PI / 2);
-    const point = new three_module.Vector3();
-    const prevPoint = new three_module.Vector3();
-    prevPoint.copy(curve.getPointAt(0));
-    const step = [
-      new three_module.Vector3(-0.225, 0, 0),
-      new three_module.Vector3(0, -0.05, 0),
-      new three_module.Vector3(0, -0.175, 0),
-      new three_module.Vector3(0, -0.05, 0),
-      new three_module.Vector3(0.225, 0, 0),
-      new three_module.Vector3(0, -0.175, 0)
-    ];
-    const PI2 = Math.PI * 2;
-    let sides = 5;
-    const tube1 = [];
-    for (let i = 0; i < sides; i++) {
-      const angle = i / sides * PI2;
-      tube1.push(new three_module.Vector3(Math.sin(angle) * 0.06, Math.cos(angle) * 0.06, 0));
-    }
-    sides = 6;
-    const tube2 = [];
-    for (let i = 0; i < sides; i++) {
-      const angle = i / sides * PI2;
-      tube2.push(new three_module.Vector3(Math.sin(angle) * 0.025, Math.cos(angle) * 0.025, 0));
-    }
-    const vector = new three_module.Vector3();
-    const normal = new three_module.Vector3();
-    function drawShape(shape, color) {
-      normal.set(0, 0, -1).applyQuaternion(quaternion);
-      for (let j = 0; j < shape.length; j++) {
-        vector.copy(shape[j]);
-        vector.applyQuaternion(quaternion);
-        vector.add(point);
-        vertices.push(vector.x, vector.y, vector.z);
-        normals.push(normal.x, normal.y, normal.z);
-        colors.push(color[0], color[1], color[2]);
-      }
-      normal.set(0, 0, 1).applyQuaternion(quaternion);
-      for (let j = shape.length - 1; j >= 0; j--) {
-        vector.copy(shape[j]);
-        vector.applyQuaternion(quaternion);
-        vector.add(point);
-        vertices.push(vector.x, vector.y, vector.z);
-        normals.push(normal.x, normal.y, normal.z);
-        colors.push(color[0], color[1], color[2]);
-      }
-    }
-    const vector1 = new three_module.Vector3();
-    const vector2 = new three_module.Vector3();
-    const vector3 = new three_module.Vector3();
-    const vector4 = new three_module.Vector3();
-    const normal1 = new three_module.Vector3();
-    const normal2 = new three_module.Vector3();
-    const normal3 = new three_module.Vector3();
-    const normal4 = new three_module.Vector3();
-    function extrudeShape(shape, offset2, color) {
-      for (let j = 0, jl = shape.length; j < jl; j++) {
-        const point1 = shape[j];
-        const point2 = shape[(j + 1) % jl];
-        vector1.copy(point1).add(offset2);
-        vector1.applyQuaternion(quaternion);
-        vector1.add(point);
-        vector2.copy(point2).add(offset2);
-        vector2.applyQuaternion(quaternion);
-        vector2.add(point);
-        vector3.copy(point2).add(offset2);
-        vector3.applyQuaternion(prevQuaternion);
-        vector3.add(prevPoint);
-        vector4.copy(point1).add(offset2);
-        vector4.applyQuaternion(prevQuaternion);
-        vector4.add(prevPoint);
-        vertices.push(vector1.x, vector1.y, vector1.z);
-        vertices.push(vector2.x, vector2.y, vector2.z);
-        vertices.push(vector4.x, vector4.y, vector4.z);
-        vertices.push(vector2.x, vector2.y, vector2.z);
-        vertices.push(vector3.x, vector3.y, vector3.z);
-        vertices.push(vector4.x, vector4.y, vector4.z);
-        normal1.copy(point1);
-        normal1.applyQuaternion(quaternion);
-        normal1.normalize();
-        normal2.copy(point2);
-        normal2.applyQuaternion(quaternion);
-        normal2.normalize();
-        normal3.copy(point2);
-        normal3.applyQuaternion(prevQuaternion);
-        normal3.normalize();
-        normal4.copy(point1);
-        normal4.applyQuaternion(prevQuaternion);
-        normal4.normalize();
-        normals.push(normal1.x, normal1.y, normal1.z);
-        normals.push(normal2.x, normal2.y, normal2.z);
-        normals.push(normal4.x, normal4.y, normal4.z);
-        normals.push(normal2.x, normal2.y, normal2.z);
-        normals.push(normal3.x, normal3.y, normal3.z);
-        normals.push(normal4.x, normal4.y, normal4.z);
-        colors.push(color[0], color[1], color[2]);
-        colors.push(color[0], color[1], color[2]);
-        colors.push(color[0], color[1], color[2]);
-        colors.push(color[0], color[1], color[2]);
-        colors.push(color[0], color[1], color[2]);
-        colors.push(color[0], color[1], color[2]);
-      }
-    }
-    const offset = new three_module.Vector3();
-    for (let i = 1; i <= divisions; i++) {
-      point.copy(curve.getPointAt(i / divisions));
-      up.set(0, 1, 0);
-      forward.subVectors(point, prevPoint).normalize();
-      right.crossVectors(up, forward).normalize();
-      up.crossVectors(forward, right);
-      const angle = Math.atan2(forward.x, forward.z);
-      quaternion.setFromAxisAngle(up, angle);
-      if (i % 2 === 0) {
-        drawShape(step, color2);
-      }
-      extrudeShape(tube1, offset.set(0, -0.125, 0), color2);
-      extrudeShape(tube2, offset.set(0.2, 0, 0), color1);
-      extrudeShape(tube2, offset.set(-0.2, 0, 0), color1);
-      prevPoint.copy(point);
-      prevQuaternion.copy(quaternion);
-    }
-    this.setAttribute("position", new three_module.BufferAttribute(new Float32Array(vertices), 3));
-    this.setAttribute("normal", new three_module.BufferAttribute(new Float32Array(normals), 3));
-    this.setAttribute("color", new three_module.BufferAttribute(new Float32Array(colors), 3));
-  }
-}
-class RollerCoasterLiftersGeometry extends three_module.BufferGeometry {
-  constructor(curve, divisions) {
-    super();
-    const vertices = [];
-    const normals = [];
-    const quaternion = new three_module.Quaternion();
-    const up = new three_module.Vector3(0, 1, 0);
-    const point = new three_module.Vector3();
-    const tangent = new three_module.Vector3();
-    const tube1 = [new three_module.Vector3(0, 0.05, -0.05), new three_module.Vector3(0, 0.05, 0.05), new three_module.Vector3(0, -0.05, 0)];
-    const tube2 = [new three_module.Vector3(-0.05, 0, 0.05), new three_module.Vector3(-0.05, 0, -0.05), new three_module.Vector3(0.05, 0, 0)];
-    const tube3 = [new three_module.Vector3(0.05, 0, -0.05), new three_module.Vector3(0.05, 0, 0.05), new three_module.Vector3(-0.05, 0, 0)];
-    const vector1 = new three_module.Vector3();
-    const vector2 = new three_module.Vector3();
-    const vector3 = new three_module.Vector3();
-    const vector4 = new three_module.Vector3();
-    const normal1 = new three_module.Vector3();
-    const normal2 = new three_module.Vector3();
-    const normal3 = new three_module.Vector3();
-    const normal4 = new three_module.Vector3();
-    function extrudeShape(shape, fromPoint2, toPoint2) {
-      for (let j = 0, jl = shape.length; j < jl; j++) {
-        const point1 = shape[j];
-        const point2 = shape[(j + 1) % jl];
-        vector1.copy(point1);
-        vector1.applyQuaternion(quaternion);
-        vector1.add(fromPoint2);
-        vector2.copy(point2);
-        vector2.applyQuaternion(quaternion);
-        vector2.add(fromPoint2);
-        vector3.copy(point2);
-        vector3.applyQuaternion(quaternion);
-        vector3.add(toPoint2);
-        vector4.copy(point1);
-        vector4.applyQuaternion(quaternion);
-        vector4.add(toPoint2);
-        vertices.push(vector1.x, vector1.y, vector1.z);
-        vertices.push(vector2.x, vector2.y, vector2.z);
-        vertices.push(vector4.x, vector4.y, vector4.z);
-        vertices.push(vector2.x, vector2.y, vector2.z);
-        vertices.push(vector3.x, vector3.y, vector3.z);
-        vertices.push(vector4.x, vector4.y, vector4.z);
-        normal1.copy(point1);
-        normal1.applyQuaternion(quaternion);
-        normal1.normalize();
-        normal2.copy(point2);
-        normal2.applyQuaternion(quaternion);
-        normal2.normalize();
-        normal3.copy(point2);
-        normal3.applyQuaternion(quaternion);
-        normal3.normalize();
-        normal4.copy(point1);
-        normal4.applyQuaternion(quaternion);
-        normal4.normalize();
-        normals.push(normal1.x, normal1.y, normal1.z);
-        normals.push(normal2.x, normal2.y, normal2.z);
-        normals.push(normal4.x, normal4.y, normal4.z);
-        normals.push(normal2.x, normal2.y, normal2.z);
-        normals.push(normal3.x, normal3.y, normal3.z);
-        normals.push(normal4.x, normal4.y, normal4.z);
-      }
-    }
-    const fromPoint = new three_module.Vector3();
-    const toPoint = new three_module.Vector3();
-    for (let i = 1; i <= divisions; i++) {
-      point.copy(curve.getPointAt(i / divisions));
-      tangent.copy(curve.getTangentAt(i / divisions));
-      const angle = Math.atan2(tangent.x, tangent.z);
-      quaternion.setFromAxisAngle(up, angle);
-      if (point.y > 10) {
-        fromPoint.set(-0.75, -0.35, 0);
-        fromPoint.applyQuaternion(quaternion);
-        fromPoint.add(point);
-        toPoint.set(0.75, -0.35, 0);
-        toPoint.applyQuaternion(quaternion);
-        toPoint.add(point);
-        extrudeShape(tube1, fromPoint, toPoint);
-        fromPoint.set(-0.7, -0.3, 0);
-        fromPoint.applyQuaternion(quaternion);
-        fromPoint.add(point);
-        toPoint.set(-0.7, -point.y, 0);
-        toPoint.applyQuaternion(quaternion);
-        toPoint.add(point);
-        extrudeShape(tube2, fromPoint, toPoint);
-        fromPoint.set(0.7, -0.3, 0);
-        fromPoint.applyQuaternion(quaternion);
-        fromPoint.add(point);
-        toPoint.set(0.7, -point.y, 0);
-        toPoint.applyQuaternion(quaternion);
-        toPoint.add(point);
-        extrudeShape(tube3, fromPoint, toPoint);
-      } else {
-        fromPoint.set(0, -0.2, 0);
-        fromPoint.applyQuaternion(quaternion);
-        fromPoint.add(point);
-        toPoint.set(0, -point.y, 0);
-        toPoint.applyQuaternion(quaternion);
-        toPoint.add(point);
-        extrudeShape(tube3, fromPoint, toPoint);
-      }
-    }
-    this.setAttribute("position", new three_module.BufferAttribute(new Float32Array(vertices), 3));
-    this.setAttribute("normal", new three_module.BufferAttribute(new Float32Array(normals), 3));
-  }
-}
-class RollerCoasterShadowGeometry extends three_module.BufferGeometry {
-  constructor(curve, divisions) {
-    super();
-    const vertices = [];
-    const up = new three_module.Vector3(0, 1, 0);
-    const forward = new three_module.Vector3();
-    const quaternion = new three_module.Quaternion();
-    const prevQuaternion = new three_module.Quaternion();
-    prevQuaternion.setFromAxisAngle(up, Math.PI / 2);
-    const point = new three_module.Vector3();
-    const prevPoint = new three_module.Vector3();
-    prevPoint.copy(curve.getPointAt(0));
-    prevPoint.y = 0;
-    const vector1 = new three_module.Vector3();
-    const vector2 = new three_module.Vector3();
-    const vector3 = new three_module.Vector3();
-    const vector4 = new three_module.Vector3();
-    for (let i = 1; i <= divisions; i++) {
-      point.copy(curve.getPointAt(i / divisions));
-      point.y = 0;
-      forward.subVectors(point, prevPoint);
-      const angle = Math.atan2(forward.x, forward.z);
-      quaternion.setFromAxisAngle(up, angle);
-      vector1.set(-0.3, 0, 0);
-      vector1.applyQuaternion(quaternion);
-      vector1.add(point);
-      vector2.set(0.3, 0, 0);
-      vector2.applyQuaternion(quaternion);
-      vector2.add(point);
-      vector3.set(0.3, 0, 0);
-      vector3.applyQuaternion(prevQuaternion);
-      vector3.add(prevPoint);
-      vector4.set(-0.3, 0, 0);
-      vector4.applyQuaternion(prevQuaternion);
-      vector4.add(prevPoint);
-      vertices.push(vector1.x, vector1.y, vector1.z);
-      vertices.push(vector2.x, vector2.y, vector2.z);
-      vertices.push(vector4.x, vector4.y, vector4.z);
-      vertices.push(vector2.x, vector2.y, vector2.z);
-      vertices.push(vector3.x, vector3.y, vector3.z);
-      vertices.push(vector4.x, vector4.y, vector4.z);
-      prevPoint.copy(point);
-      prevQuaternion.copy(quaternion);
-    }
-    this.setAttribute("position", new three_module.BufferAttribute(new Float32Array(vertices), 3));
-  }
-}
-class SkyGeometry extends three_module.BufferGeometry {
-  constructor() {
-    super();
-    const vertices = [];
-    for (let i = 0; i < 100; i++) {
-      const x = Math.random() * 800 - 400;
-      const y = Math.random() * 50 + 50;
-      const z = Math.random() * 800 - 400;
-      const size = Math.random() * 40 + 20;
-      vertices.push(x - size, y, z - size);
-      vertices.push(x + size, y, z - size);
-      vertices.push(x - size, y, z + size);
-      vertices.push(x + size, y, z - size);
-      vertices.push(x + size, y, z + size);
-      vertices.push(x - size, y, z + size);
-    }
-    this.setAttribute("position", new three_module.BufferAttribute(new Float32Array(vertices), 3));
-  }
-}
-class TreesGeometry extends three_module.BufferGeometry {
-  constructor(landscape) {
-    super();
-    const vertices = [];
-    const colors = [];
-    const raycaster = new three_module.Raycaster();
-    raycaster.ray.direction.set(0, -1, 0);
-    const _color = new three_module.Color();
-    for (let i = 0; i < 2e3; i++) {
-      const x = Math.random() * 500 - 250;
-      const z = Math.random() * 500 - 250;
-      raycaster.ray.origin.set(x, 50, z);
-      const intersections = raycaster.intersectObject(landscape);
-      if (intersections.length === 0)
-        continue;
-      const y = intersections[0].point.y;
-      const height = Math.random() * 5 + 0.5;
-      let angle = Math.random() * Math.PI * 2;
-      vertices.push(x + Math.sin(angle), y, z + Math.cos(angle));
-      vertices.push(x, y + height, z);
-      vertices.push(x + Math.sin(angle + Math.PI), y, z + Math.cos(angle + Math.PI));
-      angle += Math.PI / 2;
-      vertices.push(x + Math.sin(angle), y, z + Math.cos(angle));
-      vertices.push(x, y + height, z);
-      vertices.push(x + Math.sin(angle + Math.PI), y, z + Math.cos(angle + Math.PI));
-      const random = Math.random() * 0.1;
-      for (let j = 0; j < 6; j++) {
-        _color.setRGB(0.2 + random, 0.4 + random, 0, "srgb");
-        colors.push(_color.r, _color.g, _color.b);
-      }
-    }
-    this.setAttribute("position", new three_module.BufferAttribute(new Float32Array(vertices), 3));
-    this.setAttribute("color", new three_module.BufferAttribute(new Float32Array(colors), 3));
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/Timer.js
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-class Timer {
-  constructor() {
-    __publicField(this, "_previousTime");
-    __publicField(this, "_currentTime");
-    __publicField(this, "_delta");
-    __publicField(this, "_elapsed");
-    __publicField(this, "_timescale");
-    __publicField(this, "_useFixedDelta");
-    __publicField(this, "_fixedDelta");
-    __publicField(this, "_usePageVisibilityAPI");
-    __publicField(this, "_pageVisibilityHandler");
-    this._previousTime = 0;
-    this._currentTime = 0;
-    this._delta = 0;
-    this._elapsed = 0;
-    this._timescale = 1;
-    this._useFixedDelta = false;
-    this._fixedDelta = 16.67;
-    this._usePageVisibilityAPI = typeof document !== "undefined" && document.hidden !== void 0;
-  }
-  // https://github.com/mrdoob/three.js/issues/20575
-  // use Page Visibility API to avoid large time delta values
-  connect() {
-    if (this._usePageVisibilityAPI) {
-      this._pageVisibilityHandler = handleVisibilityChange.bind(this);
-      document.addEventListener("visibilitychange", this._pageVisibilityHandler, false);
-    }
-    return this;
-  }
-  dispose() {
-    if (this._usePageVisibilityAPI && this._pageVisibilityHandler) {
-      document.removeEventListener("visibilitychange", this._pageVisibilityHandler);
-    }
-    return this;
-  }
-  disableFixedDelta() {
-    this._useFixedDelta = false;
-    return this;
-  }
-  enableFixedDelta() {
-    this._useFixedDelta = true;
-    return this;
-  }
-  getDelta() {
-    return this._delta / 1e3;
-  }
-  getElapsedTime() {
-    return this._elapsed / 1e3;
-  }
-  getFixedDelta() {
-    return this._fixedDelta / 1e3;
-  }
-  getTimescale() {
-    return this._timescale;
-  }
-  reset() {
-    this._currentTime = this._now();
-    return this;
-  }
-  setFixedDelta(fixedDelta) {
-    this._fixedDelta = fixedDelta * 1e3;
-    return this;
-  }
-  setTimescale(timescale) {
-    this._timescale = timescale;
-    return this;
-  }
-  update() {
-    if (this._useFixedDelta === true) {
-      this._delta = this._fixedDelta;
-    } else {
-      this._previousTime = this._currentTime;
-      this._currentTime = this._now();
-      this._delta = this._currentTime - this._previousTime;
-    }
-    this._delta *= this._timescale;
-    this._elapsed += this._delta;
-    return this;
-  }
-  // For THREE.Clock backward compatibility
-  get elapsedTime() {
-    return this.getElapsedTime();
-  }
-  // private
-  _now() {
-    return (typeof performance === "undefined" ? Date : performance).now();
-  }
-}
-function handleVisibilityChange() {
-  if (document.hidden === false)
-    this.reset();
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/WebGL.js
-let webGLAvailable, webGL2Available;
-function isWebGLAvailable() {
-  var _a;
-  if (webGLAvailable !== void 0)
-    return webGLAvailable;
-  try {
-    let gl;
-    const canvas = document.createElement("canvas");
-    webGLAvailable = !!(window.WebGLRenderingContext && (gl = canvas.getContext("webgl")));
-    if (gl)
-      (_a = gl.getExtension("WEBGL_lose_context")) == null ? void 0 : _a.loseContext();
-    return webGLAvailable;
-  } catch (e) {
-    return webGLAvailable = false;
-  }
-}
-function isWebGL2Available() {
-  var _a;
-  if (webGL2Available !== void 0)
-    return webGL2Available;
-  try {
-    let gl;
-    const canvas = document.createElement("canvas");
-    webGL2Available = !!(window.WebGL2RenderingContext && (gl = canvas.getContext("webgl2")));
-    if (gl)
-      (_a = gl.getExtension("WEBGL_lose_context")) == null ? void 0 : _a.loseContext();
-    return webGL2Available;
-  } catch (e) {
-    return webGL2Available = false;
-  }
-}
-function getWebGLErrorMessage() {
-  return getErrorMessage(1);
-}
-function getWebGL2ErrorMessage() {
-  return getErrorMessage(2);
-}
-function getErrorMessage(version) {
-  const names = {
-    1: "WebGL",
-    2: "WebGL 2"
-  };
-  const contexts = {
-    1: window.WebGLRenderingContext,
-    2: window.WebGL2RenderingContext
-  };
-  const element = document.createElement("div");
-  element.id = "webglmessage";
-  element.style.fontFamily = "monospace";
-  element.style.fontSize = "13px";
-  element.style.fontWeight = "normal";
-  element.style.textAlign = "center";
-  element.style.background = "#fff";
-  element.style.color = "#000";
-  element.style.padding = "1.5em";
-  element.style.width = "400px";
-  element.style.margin = "5em auto 0";
-  let message = 'Your $0 does not seem to support <a href="http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation" style="color:#000">$1</a>';
-  if (contexts[version]) {
-    message = message.replace("$0", "graphics card");
-  } else {
-    message = message.replace("$0", "browser");
-  }
-  message = message.replace("$1", names[version]);
-  element.innerHTML = message;
-  return element;
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/MD2Character.js
-
-
-class MD2Character {
-  constructor() {
-    this.scale = 1;
-    this.animationFPS = 6;
-    this.root = new three_module.Object3D();
-    this.meshBody = null;
-    this.meshWeapon = null;
-    this.skinsBody = [];
-    this.skinsWeapon = [];
-    this.weapons = [];
-    this.activeAnimation = null;
-    this.mixer = null;
-    this.onLoadComplete = function() {
-    };
-    this.loadCounter = 0;
-  }
-  loadParts(config) {
-    const scope = this;
-    function createPart(geometry, skinMap) {
-      const materialWireframe = new three_module.MeshLambertMaterial({
-        color: 16755200,
-        wireframe: true,
-        morphTargets: true,
-        morphNormals: true
-      });
-      const materialTexture = new three_module.MeshLambertMaterial({
-        color: 16777215,
-        wireframe: false,
-        map: skinMap,
-        morphTargets: true,
-        morphNormals: true
-      });
-      const mesh = new three_module.Mesh(geometry, materialTexture);
-      mesh.rotation.y = -Math.PI / 2;
-      mesh.castShadow = true;
-      mesh.receiveShadow = true;
-      mesh.materialTexture = materialTexture;
-      mesh.materialWireframe = materialWireframe;
-      return mesh;
-    }
-    function loadTextures(baseUrl, textureUrls) {
-      const textureLoader = new three_module.TextureLoader();
-      const textures = [];
-      for (let i = 0; i < textureUrls.length; i++) {
-        textures[i] = textureLoader.load(baseUrl + textureUrls[i], checkLoadingComplete);
-        textures[i].mapping = three_module.UVMapping;
-        textures[i].name = textureUrls[i];
-        if ("colorSpace" in textures[i])
-          textures[i].colorSpace = "srgb";
-        else
-          textures[i].encoding = 3001;
-      }
-      return textures;
-    }
-    function checkLoadingComplete() {
-      scope.loadCounter -= 1;
-      if (scope.loadCounter === 0)
-        scope.onLoadComplete();
-    }
-    this.loadCounter = config.weapons.length * 2 + config.skins.length + 1;
-    const weaponsTextures = [];
-    for (let i = 0; i < config.weapons.length; i++)
-      weaponsTextures[i] = config.weapons[i][1];
-    this.skinsBody = loadTextures(config.baseUrl + "skins/", config.skins);
-    this.skinsWeapon = loadTextures(config.baseUrl + "skins/", weaponsTextures);
-    const loader = new MD2Loader();
-    loader.load(config.baseUrl + config.body, function(geo) {
-      const boundingBox = new three_module.Box3();
-      boundingBox.setFromBufferAttribute(geo.attributes.position);
-      scope.root.position.y = -scope.scale * boundingBox.min.y;
-      const mesh = createPart(geo, scope.skinsBody[0]);
-      mesh.scale.set(scope.scale, scope.scale, scope.scale);
-      scope.root.add(mesh);
-      scope.meshBody = mesh;
-      scope.meshBody.clipOffset = 0;
-      scope.activeAnimationClipName = mesh.geometry.animations[0].name;
-      scope.mixer = new three_module.AnimationMixer(mesh);
-      checkLoadingComplete();
-    });
-    const generateCallback = function(index, name) {
-      return function(geo) {
-        const mesh = createPart(geo, scope.skinsWeapon[index]);
-        mesh.scale.set(scope.scale, scope.scale, scope.scale);
-        mesh.visible = false;
-        mesh.name = name;
-        scope.root.add(mesh);
-        scope.weapons[index] = mesh;
-        scope.meshWeapon = mesh;
-        checkLoadingComplete();
-      };
-    };
-    for (let i = 0; i < config.weapons.length; i++) {
-      loader.load(config.baseUrl + config.weapons[i][0], generateCallback(i, config.weapons[i][0]));
-    }
-  }
-  setPlaybackRate(rate) {
-    if (rate !== 0) {
-      this.mixer.timeScale = 1 / rate;
-    } else {
-      this.mixer.timeScale = 0;
-    }
-  }
-  setWireframe(wireframeEnabled) {
-    if (wireframeEnabled) {
-      if (this.meshBody)
-        this.meshBody.material = this.meshBody.materialWireframe;
-      if (this.meshWeapon)
-        this.meshWeapon.material = this.meshWeapon.materialWireframe;
-    } else {
-      if (this.meshBody)
-        this.meshBody.material = this.meshBody.materialTexture;
-      if (this.meshWeapon)
-        this.meshWeapon.material = this.meshWeapon.materialTexture;
-    }
-  }
-  setSkin(index) {
-    if (this.meshBody && this.meshBody.material.wireframe === false) {
-      this.meshBody.material.map = this.skinsBody[index];
-    }
-  }
-  setWeapon(index) {
-    for (let i = 0; i < this.weapons.length; i++)
-      this.weapons[i].visible = false;
-    const activeWeapon = this.weapons[index];
-    if (activeWeapon) {
-      activeWeapon.visible = true;
-      this.meshWeapon = activeWeapon;
-      this.syncWeaponAnimation();
-    }
-  }
-  setAnimation(clipName) {
-    if (this.meshBody) {
-      if (this.meshBody.activeAction) {
-        this.meshBody.activeAction.stop();
-        this.meshBody.activeAction = null;
-      }
-      const action = this.mixer.clipAction(clipName, this.meshBody);
-      if (action) {
-        this.meshBody.activeAction = action.play();
-      }
-    }
-    this.activeClipName = clipName;
-    this.syncWeaponAnimation();
-  }
-  syncWeaponAnimation() {
-    const clipName = this.activeClipName;
-    if (this.meshWeapon) {
-      if (this.meshWeapon.activeAction) {
-        this.meshWeapon.activeAction.stop();
-        this.meshWeapon.activeAction = null;
-      }
-      const action = this.mixer.clipAction(clipName, this.meshWeapon);
-      if (action) {
-        this.meshWeapon.activeAction = action.syncWith(this.meshBody.activeAction).play();
-      }
-    }
-  }
-  update(delta) {
-    if (this.mixer)
-      this.mixer.update(delta);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/VolumeSlice.js
-
-class VolumeSlice {
-  constructor(volume, index, axis) {
-    const slice = this;
-    this.volume = volume;
-    index = index || 0;
-    Object.defineProperty(this, "index", {
-      get: function() {
-        return index;
-      },
-      set: function(value) {
-        index = value;
-        slice.geometryNeedsUpdate = true;
-        return index;
-      }
-    });
-    this.axis = axis || "z";
-    this.canvas = document.createElement("canvas");
-    this.canvasBuffer = document.createElement("canvas");
-    this.updateGeometry();
-    const canvasMap = new three_module.Texture(this.canvas);
-    canvasMap.minFilter = three_module.LinearFilter;
-    canvasMap.wrapS = canvasMap.wrapT = three_module.ClampToEdgeWrapping;
-    if ("colorSpace" in canvasMap)
-      canvasMap.colorSpace = "srgb";
-    else
-      canvasMap.encoding = 3001;
-    const material = new three_module.MeshBasicMaterial({ map: canvasMap, side: three_module.DoubleSide, transparent: true });
-    this.mesh = new three_module.Mesh(this.geometry, material);
-    this.mesh.matrixAutoUpdate = false;
-    this.geometryNeedsUpdate = true;
-    this.repaint();
-  }
-  /**
-   * @member {Function} repaint Refresh the texture and the geometry if geometryNeedsUpdate is set to true
-   * @memberof VolumeSlice
-   */
-  repaint() {
-    if (this.geometryNeedsUpdate) {
-      this.updateGeometry();
-    }
-    const iLength = this.iLength, jLength = this.jLength, sliceAccess = this.sliceAccess, volume = this.volume, canvas = this.canvasBuffer, ctx = this.ctxBuffer;
-    const imgData = ctx.getImageData(0, 0, iLength, jLength);
-    const data = imgData.data;
-    const volumeData = volume.data;
-    const upperThreshold = volume.upperThreshold;
-    const lowerThreshold = volume.lowerThreshold;
-    const windowLow = volume.windowLow;
-    const windowHigh = volume.windowHigh;
-    let pixelCount = 0;
-    if (volume.dataType === "label") {
-      for (let j = 0; j < jLength; j++) {
-        for (let i = 0; i < iLength; i++) {
-          let label = volumeData[sliceAccess(i, j)];
-          label = label >= this.colorMap.length ? label % this.colorMap.length + 1 : label;
-          const color = this.colorMap[label];
-          data[4 * pixelCount] = color >> 24 & 255;
-          data[4 * pixelCount + 1] = color >> 16 & 255;
-          data[4 * pixelCount + 2] = color >> 8 & 255;
-          data[4 * pixelCount + 3] = color & 255;
-          pixelCount++;
-        }
-      }
-    } else {
-      for (let j = 0; j < jLength; j++) {
-        for (let i = 0; i < iLength; i++) {
-          let value = volumeData[sliceAccess(i, j)];
-          let alpha = 255;
-          alpha = upperThreshold >= value ? lowerThreshold <= value ? alpha : 0 : 0;
-          value = Math.floor(255 * (value - windowLow) / (windowHigh - windowLow));
-          value = value > 255 ? 255 : value < 0 ? 0 : value | 0;
-          data[4 * pixelCount] = value;
-          data[4 * pixelCount + 1] = value;
-          data[4 * pixelCount + 2] = value;
-          data[4 * pixelCount + 3] = alpha;
-          pixelCount++;
-        }
-      }
-    }
-    ctx.putImageData(imgData, 0, 0);
-    this.ctx.drawImage(canvas, 0, 0, iLength, jLength, 0, 0, this.canvas.width, this.canvas.height);
-    this.mesh.material.map.needsUpdate = true;
-  }
-  /**
-   * @member {Function} Refresh the geometry according to axis and index
-   * @see Volume.extractPerpendicularPlane
-   * @memberof VolumeSlice
-   */
-  updateGeometry() {
-    const extracted = this.volume.extractPerpendicularPlane(this.axis, this.index);
-    this.sliceAccess = extracted.sliceAccess;
-    this.jLength = extracted.jLength;
-    this.iLength = extracted.iLength;
-    this.matrix = extracted.matrix;
-    this.canvas.width = extracted.planeWidth;
-    this.canvas.height = extracted.planeHeight;
-    this.canvasBuffer.width = this.iLength;
-    this.canvasBuffer.height = this.jLength;
-    this.ctx = this.canvas.getContext("2d");
-    this.ctxBuffer = this.canvasBuffer.getContext("2d");
-    if (this.geometry)
-      this.geometry.dispose();
-    this.geometry = new three_module.PlaneGeometry(extracted.planeWidth, extracted.planeHeight);
-    if (this.mesh) {
-      this.mesh.geometry = this.geometry;
-      this.mesh.matrix.identity();
-      this.mesh.applyMatrix4(this.matrix);
-    }
-    this.geometryNeedsUpdate = false;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/TubePainter.js
-
-function TubePainter() {
-  const BUFFER_SIZE = 1e6 * 3;
-  const positions = new three_module.BufferAttribute(new Float32Array(BUFFER_SIZE), 3);
-  positions.usage = three_module.DynamicDrawUsage;
-  const normals = new three_module.BufferAttribute(new Float32Array(BUFFER_SIZE), 3);
-  normals.usage = three_module.DynamicDrawUsage;
-  const colors = new three_module.BufferAttribute(new Float32Array(BUFFER_SIZE), 3);
-  colors.usage = three_module.DynamicDrawUsage;
-  const geometry = new three_module.BufferGeometry();
-  geometry.setAttribute("position", positions);
-  geometry.setAttribute("normal", normals);
-  geometry.setAttribute("color", colors);
-  geometry.drawRange.count = 0;
-  const material = new three_module.MeshStandardMaterial({
-    vertexColors: true
-  });
-  const mesh = new three_module.Mesh(geometry, material);
-  mesh.frustumCulled = false;
-  function getPoints(size2) {
-    const PI2 = Math.PI * 2;
-    const sides = 10;
-    const array = [];
-    const radius = 0.01 * size2;
-    for (let i = 0; i < sides; i++) {
-      const angle = i / sides * PI2;
-      array.push(new three_module.Vector3(Math.sin(angle) * radius, Math.cos(angle) * radius, 0));
-    }
-    return array;
-  }
-  const vector1 = new three_module.Vector3();
-  const vector2 = new three_module.Vector3();
-  const vector3 = new three_module.Vector3();
-  const vector4 = new three_module.Vector3();
-  const color = new three_module.Color(16777215);
-  let size = 1;
-  function stroke(position1, position2, matrix12, matrix22) {
-    if (position1.distanceToSquared(position2) === 0)
-      return;
-    let count2 = geometry.drawRange.count;
-    const points = getPoints(size);
-    for (let i = 0, il = points.length; i < il; i++) {
-      const vertex1 = points[i];
-      const vertex2 = points[(i + 1) % il];
-      vector1.copy(vertex1).applyMatrix4(matrix22).add(position2);
-      vector2.copy(vertex2).applyMatrix4(matrix22).add(position2);
-      vector3.copy(vertex2).applyMatrix4(matrix12).add(position1);
-      vector4.copy(vertex1).applyMatrix4(matrix12).add(position1);
-      vector1.toArray(positions.array, (count2 + 0) * 3);
-      vector2.toArray(positions.array, (count2 + 1) * 3);
-      vector4.toArray(positions.array, (count2 + 2) * 3);
-      vector2.toArray(positions.array, (count2 + 3) * 3);
-      vector3.toArray(positions.array, (count2 + 4) * 3);
-      vector4.toArray(positions.array, (count2 + 5) * 3);
-      vector1.copy(vertex1).applyMatrix4(matrix22).normalize();
-      vector2.copy(vertex2).applyMatrix4(matrix22).normalize();
-      vector3.copy(vertex2).applyMatrix4(matrix12).normalize();
-      vector4.copy(vertex1).applyMatrix4(matrix12).normalize();
-      vector1.toArray(normals.array, (count2 + 0) * 3);
-      vector2.toArray(normals.array, (count2 + 1) * 3);
-      vector4.toArray(normals.array, (count2 + 2) * 3);
-      vector2.toArray(normals.array, (count2 + 3) * 3);
-      vector3.toArray(normals.array, (count2 + 4) * 3);
-      vector4.toArray(normals.array, (count2 + 5) * 3);
-      color.toArray(colors.array, (count2 + 0) * 3);
-      color.toArray(colors.array, (count2 + 1) * 3);
-      color.toArray(colors.array, (count2 + 2) * 3);
-      color.toArray(colors.array, (count2 + 3) * 3);
-      color.toArray(colors.array, (count2 + 4) * 3);
-      color.toArray(colors.array, (count2 + 5) * 3);
-      count2 += 6;
-    }
-    geometry.drawRange.count = count2;
-  }
-  const up = new three_module.Vector3(0, 1, 0);
-  const point1 = new three_module.Vector3();
-  const point2 = new three_module.Vector3();
-  const matrix1 = new three_module.Matrix4();
-  const matrix2 = new three_module.Matrix4();
-  function moveTo(position) {
-    point1.copy(position);
-    matrix1.lookAt(point2, point1, up);
-    point2.copy(position);
-    matrix2.copy(matrix1);
-  }
-  function lineTo(position) {
-    point1.copy(position);
-    matrix1.lookAt(point2, point1, up);
-    stroke(point1, point2, matrix1, matrix2);
-    point2.copy(point1);
-    matrix2.copy(matrix1);
-  }
-  function setSize(value) {
-    size = value;
-  }
-  let count = 0;
-  function update() {
-    const start = count;
-    const end = geometry.drawRange.count;
-    if (start === end)
-      return;
-    positions.updateRange.offset = start * 3;
-    positions.updateRange.count = (end - start) * 3;
-    positions.needsUpdate = true;
-    normals.updateRange.offset = start * 3;
-    normals.updateRange.count = (end - start) * 3;
-    normals.needsUpdate = true;
-    colors.updateRange.offset = start * 3;
-    colors.updateRange.count = (end - start) * 3;
-    colors.needsUpdate = true;
-    count = geometry.drawRange.count;
-  }
-  return {
-    mesh,
-    moveTo,
-    lineTo,
-    setSize,
-    update
-  };
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/Volume.js
-
-
-class Volume {
-  constructor(xLength, yLength, zLength, type, arrayBuffer) {
-    if (xLength !== void 0) {
-      this.xLength = Number(xLength) || 1;
-      this.yLength = Number(yLength) || 1;
-      this.zLength = Number(zLength) || 1;
-      this.axisOrder = ["x", "y", "z"];
-      switch (type) {
-        case "Uint8":
-        case "uint8":
-        case "uchar":
-        case "unsigned char":
-        case "uint8_t":
-          this.data = new Uint8Array(arrayBuffer);
-          break;
-        case "Int8":
-        case "int8":
-        case "signed char":
-        case "int8_t":
-          this.data = new Int8Array(arrayBuffer);
-          break;
-        case "Int16":
-        case "int16":
-        case "short":
-        case "short int":
-        case "signed short":
-        case "signed short int":
-        case "int16_t":
-          this.data = new Int16Array(arrayBuffer);
-          break;
-        case "Uint16":
-        case "uint16":
-        case "ushort":
-        case "unsigned short":
-        case "unsigned short int":
-        case "uint16_t":
-          this.data = new Uint16Array(arrayBuffer);
-          break;
-        case "Int32":
-        case "int32":
-        case "int":
-        case "signed int":
-        case "int32_t":
-          this.data = new Int32Array(arrayBuffer);
-          break;
-        case "Uint32":
-        case "uint32":
-        case "uint":
-        case "unsigned int":
-        case "uint32_t":
-          this.data = new Uint32Array(arrayBuffer);
-          break;
-        case "longlong":
-        case "long long":
-        case "long long int":
-        case "signed long long":
-        case "signed long long int":
-        case "int64":
-        case "int64_t":
-        case "ulonglong":
-        case "unsigned long long":
-        case "unsigned long long int":
-        case "uint64":
-        case "uint64_t":
-          throw new Error("Error in Volume constructor : this type is not supported in JavaScript");
-          break;
-        case "Float32":
-        case "float32":
-        case "float":
-          this.data = new Float32Array(arrayBuffer);
-          break;
-        case "Float64":
-        case "float64":
-        case "double":
-          this.data = new Float64Array(arrayBuffer);
-          break;
-        default:
-          this.data = new Uint8Array(arrayBuffer);
-      }
-      if (this.data.length !== this.xLength * this.yLength * this.zLength) {
-        throw new Error("Error in Volume constructor, lengths are not matching arrayBuffer size");
-      }
-    }
-    this.spacing = [1, 1, 1];
-    this.offset = [0, 0, 0];
-    this.matrix = new three_module.Matrix3();
-    this.matrix.identity();
-    let lowerThreshold = -Infinity;
-    Object.defineProperty(this, "lowerThreshold", {
-      get: function() {
-        return lowerThreshold;
-      },
-      set: function(value) {
-        lowerThreshold = value;
-        this.sliceList.forEach(function(slice) {
-          slice.geometryNeedsUpdate = true;
-        });
-      }
-    });
-    let upperThreshold = Infinity;
-    Object.defineProperty(this, "upperThreshold", {
-      get: function() {
-        return upperThreshold;
-      },
-      set: function(value) {
-        upperThreshold = value;
-        this.sliceList.forEach(function(slice) {
-          slice.geometryNeedsUpdate = true;
-        });
-      }
-    });
-    this.sliceList = [];
-    this.segmentation = false;
-  }
-  /**
-   * @member {Function} getData Shortcut for data[access(i,j,k)]
-   * @memberof Volume
-   * @param {number} i    First coordinate
-   * @param {number} j    Second coordinate
-   * @param {number} k    Third coordinate
-   * @returns {number}  value in the data array
-   */
-  getData(i, j, k) {
-    return this.data[k * this.xLength * this.yLength + j * this.xLength + i];
-  }
-  /**
-   * @member {Function} access compute the index in the data array corresponding to the given coordinates in IJK system
-   * @memberof Volume
-   * @param {number} i    First coordinate
-   * @param {number} j    Second coordinate
-   * @param {number} k    Third coordinate
-   * @returns {number}  index
-   */
-  access(i, j, k) {
-    return k * this.xLength * this.yLength + j * this.xLength + i;
-  }
-  /**
-   * @member {Function} reverseAccess Retrieve the IJK coordinates of the voxel corresponding of the given index in the data
-   * @memberof Volume
-   * @param {number} index index of the voxel
-   * @returns {Array}  [x,y,z]
-   */
-  reverseAccess(index) {
-    const z = Math.floor(index / (this.yLength * this.xLength));
-    const y = Math.floor((index - z * this.yLength * this.xLength) / this.xLength);
-    const x = index - z * this.yLength * this.xLength - y * this.xLength;
-    return [x, y, z];
-  }
-  /**
-   * @member {Function} map Apply a function to all the voxels, be careful, the value will be replaced
-   * @memberof Volume
-   * @param {Function} functionToMap A function to apply to every voxel, will be called with the following parameters :
-   *                                 value of the voxel
-   *                                 index of the voxel
-   *                                 the data (TypedArray)
-   * @param {Object}   context    You can specify a context in which call the function, default if this Volume
-   * @returns {Volume}   this
-   */
-  map(functionToMap, context) {
-    const length = this.data.length;
-    context = context || this;
-    for (let i = 0; i < length; i++) {
-      this.data[i] = functionToMap.call(context, this.data[i], i, this.data);
-    }
-    return this;
-  }
-  /**
-   * @member {Function} extractPerpendicularPlane Compute the orientation of the slice and returns all the information relative to the geometry such as sliceAccess, the plane matrix (orientation and position in RAS coordinate) and the dimensions of the plane in both coordinate system.
-   * @memberof Volume
-   * @param {string}            axis  the normal axis to the slice 'x' 'y' or 'z'
-   * @param {number}            index the index of the slice
-   * @returns {Object} an object containing all the usefull information on the geometry of the slice
-   */
-  extractPerpendicularPlane(axis, RASIndex) {
-    let firstSpacing, secondSpacing, positionOffset, IJKIndex;
-    const axisInIJK = new three_module.Vector3(), firstDirection = new three_module.Vector3(), secondDirection = new three_module.Vector3(), planeMatrix = new three_module.Matrix4().identity(), volume = this;
-    const dimensions = new three_module.Vector3(this.xLength, this.yLength, this.zLength);
-    switch (axis) {
-      case "x":
-        axisInIJK.set(1, 0, 0);
-        firstDirection.set(0, 0, -1);
-        secondDirection.set(0, -1, 0);
-        firstSpacing = this.spacing[this.axisOrder.indexOf("z")];
-        secondSpacing = this.spacing[this.axisOrder.indexOf("y")];
-        IJKIndex = new three_module.Vector3(RASIndex, 0, 0);
-        planeMatrix.multiply(new three_module.Matrix4().makeRotationY(Math.PI / 2));
-        positionOffset = (volume.RASDimensions[0] - 1) / 2;
-        planeMatrix.setPosition(new three_module.Vector3(RASIndex - positionOffset, 0, 0));
-        break;
-      case "y":
-        axisInIJK.set(0, 1, 0);
-        firstDirection.set(1, 0, 0);
-        secondDirection.set(0, 0, 1);
-        firstSpacing = this.spacing[this.axisOrder.indexOf("x")];
-        secondSpacing = this.spacing[this.axisOrder.indexOf("z")];
-        IJKIndex = new three_module.Vector3(0, RASIndex, 0);
-        planeMatrix.multiply(new three_module.Matrix4().makeRotationX(-Math.PI / 2));
-        positionOffset = (volume.RASDimensions[1] - 1) / 2;
-        planeMatrix.setPosition(new three_module.Vector3(0, RASIndex - positionOffset, 0));
-        break;
-      case "z":
-      default:
-        axisInIJK.set(0, 0, 1);
-        firstDirection.set(1, 0, 0);
-        secondDirection.set(0, -1, 0);
-        firstSpacing = this.spacing[this.axisOrder.indexOf("x")];
-        secondSpacing = this.spacing[this.axisOrder.indexOf("y")];
-        IJKIndex = new three_module.Vector3(0, 0, RASIndex);
-        positionOffset = (volume.RASDimensions[2] - 1) / 2;
-        planeMatrix.setPosition(new three_module.Vector3(0, 0, RASIndex - positionOffset));
-        break;
-    }
-    let iLength, jLength;
-    if (!this.segmentation) {
-      firstDirection.applyMatrix4(volume.inverseMatrix).normalize();
-      secondDirection.applyMatrix4(volume.inverseMatrix).normalize();
-      axisInIJK.applyMatrix4(volume.inverseMatrix).normalize();
-    }
-    firstDirection.arglet = "i";
-    secondDirection.arglet = "j";
-    iLength = Math.floor(Math.abs(firstDirection.dot(dimensions)));
-    jLength = Math.floor(Math.abs(secondDirection.dot(dimensions)));
-    const planeWidth = Math.abs(iLength * firstSpacing);
-    const planeHeight = Math.abs(jLength * secondSpacing);
-    IJKIndex = Math.abs(Math.round(IJKIndex.applyMatrix4(volume.inverseMatrix).dot(axisInIJK)));
-    const base = [new three_module.Vector3(1, 0, 0), new three_module.Vector3(0, 1, 0), new three_module.Vector3(0, 0, 1)];
-    const iDirection = [firstDirection, secondDirection, axisInIJK].find(function(x) {
-      return Math.abs(x.dot(base[0])) > 0.9;
-    });
-    const jDirection = [firstDirection, secondDirection, axisInIJK].find(function(x) {
-      return Math.abs(x.dot(base[1])) > 0.9;
-    });
-    const kDirection = [firstDirection, secondDirection, axisInIJK].find(function(x) {
-      return Math.abs(x.dot(base[2])) > 0.9;
-    });
-    function sliceAccess(i, j) {
-      const si = iDirection === axisInIJK ? IJKIndex : iDirection.arglet === "i" ? i : j;
-      const sj = jDirection === axisInIJK ? IJKIndex : jDirection.arglet === "i" ? i : j;
-      const sk = kDirection === axisInIJK ? IJKIndex : kDirection.arglet === "i" ? i : j;
-      const accessI = iDirection.dot(base[0]) > 0 ? si : volume.xLength - 1 - si;
-      const accessJ = jDirection.dot(base[1]) > 0 ? sj : volume.yLength - 1 - sj;
-      const accessK = kDirection.dot(base[2]) > 0 ? sk : volume.zLength - 1 - sk;
-      return volume.access(accessI, accessJ, accessK);
-    }
-    return {
-      iLength,
-      jLength,
-      sliceAccess,
-      matrix: planeMatrix,
-      planeWidth,
-      planeHeight
-    };
-  }
-  /**
-   * @member {Function} extractSlice Returns a slice corresponding to the given axis and index
-   *                        The coordinate are given in the Right Anterior Superior coordinate format
-   * @memberof Volume
-   * @param {string}            axis  the normal axis to the slice 'x' 'y' or 'z'
-   * @param {number}            index the index of the slice
-   * @returns {VolumeSlice} the extracted slice
-   */
-  extractSlice(axis, index) {
-    const slice = new VolumeSlice(this, index, axis);
-    this.sliceList.push(slice);
-    return slice;
-  }
-  /**
-   * @member {Function} repaintAllSlices Call repaint on all the slices extracted from this volume
-   * @see VolumeSlice.repaint
-   * @memberof Volume
-   * @returns {Volume} this
-   */
-  repaintAllSlices() {
-    this.sliceList.forEach(function(slice) {
-      slice.repaint();
-    });
-    return this;
-  }
-  /**
-   * @member {Function} computeMinMax Compute the minimum and the maximum of the data in the volume
-   * @memberof Volume
-   * @returns {Array} [min,max]
-   */
-  computeMinMax() {
-    let min = Infinity;
-    let max = -Infinity;
-    const datasize = this.data.length;
-    let i = 0;
-    for (i = 0; i < datasize; i++) {
-      if (!isNaN(this.data[i])) {
-        const value = this.data[i];
-        min = Math.min(min, value);
-        max = Math.max(max, value);
-      }
-    }
-    this.min = min;
-    this.max = max;
-    return [min, max];
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/potpack/index.mjs
-
-function potpack(boxes) {
-
-    // calculate total box area and maximum box width
-    let area = 0;
-    let maxWidth = 0;
-
-    for (const box of boxes) {
-        area += box.w * box.h;
-        maxWidth = Math.max(maxWidth, box.w);
-    }
-
-    // sort the boxes for insertion by height, descending
-    boxes.sort((a, b) => b.h - a.h);
-
-    // aim for a squarish resulting container,
-    // slightly adjusted for sub-100% space utilization
-    const startWidth = Math.max(Math.ceil(Math.sqrt(area / 0.95)), maxWidth);
-
-    // start with a single empty space, unbounded at the bottom
-    const spaces = [{x: 0, y: 0, w: startWidth, h: Infinity}];
-
-    let width = 0;
-    let height = 0;
-
-    for (const box of boxes) {
-        // look through spaces backwards so that we check smaller spaces first
-        for (let i = spaces.length - 1; i >= 0; i--) {
-            const space = spaces[i];
-
-            // look for empty spaces that can accommodate the current box
-            if (box.w > space.w || box.h > space.h) continue;
-
-            // found the space; add the box to its top-left corner
-            // |-------|-------|
-            // |  box  |       |
-            // |_______|       |
-            // |         space |
-            // |_______________|
-            box.x = space.x;
-            box.y = space.y;
-
-            height = Math.max(height, box.y + box.h);
-            width = Math.max(width, box.x + box.w);
-
-            if (box.w === space.w && box.h === space.h) {
-                // space matches the box exactly; remove it
-                const last = spaces.pop();
-                if (i < spaces.length) spaces[i] = last;
-
-            } else if (box.h === space.h) {
-                // space matches the box height; update it accordingly
-                // |-------|---------------|
-                // |  box  | updated space |
-                // |_______|_______________|
-                space.x += box.w;
-                space.w -= box.w;
-
-            } else if (box.w === space.w) {
-                // space matches the box width; update it accordingly
-                // |---------------|
-                // |      box      |
-                // |_______________|
-                // | updated space |
-                // |_______________|
-                space.y += box.h;
-                space.h -= box.h;
-
-            } else {
-                // otherwise the box splits the space into two spaces
-                // |-------|-----------|
-                // |  box  | new space |
-                // |_______|___________|
-                // | updated space     |
-                // |___________________|
-                spaces.push({
-                    x: space.x + box.w,
-                    y: space.y,
-                    w: space.w - box.w,
-                    h: box.h
-                });
-                space.y += box.h;
-                space.h -= box.h;
-            }
-            break;
-        }
-    }
-
-    return {
-        w: width, // container width
-        h: height, // container height
-        fill: (area / (width * height)) || 0 // space utilization
-    };
-}
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/misc/ProgressiveLightmap.js
-
-
-class ProgressiveLightMap {
-  constructor(renderer, res = 1024) {
-    this.renderer = renderer;
-    this.res = res;
-    this.lightMapContainers = [];
-    this.compiled = false;
-    this.scene = new three_module.Scene();
-    this.scene.background = null;
-    this.tinyTarget = new three_module.WebGLRenderTarget(1, 1);
-    this.buffer1Active = false;
-    this.firstUpdate = true;
-    this.warned = false;
-    const format = /(Android|iPad|iPhone|iPod)/g.test(navigator.userAgent) ? alfFloatType : three_module.FloatType;
-    this.progressiveLightMap1 = new three_module.WebGLRenderTarget(this.res, this.res, { type: format });
-    this.progressiveLightMap2 = new three_module.WebGLRenderTarget(this.res, this.res, { type: format });
-    this.uvMat = new three_module.MeshPhongMaterial();
-    this.uvMat.uniforms = {};
-    this.uvMat.onBeforeCompile = (shader) => {
-      shader.vertexShader = "#define USE_LIGHTMAP\n" + shader.vertexShader.slice(0, -1) + "	gl_Position = vec4((uv2 - 0.5) * 2.0, 1.0, 1.0); }";
-      const bodyStart = shader.fragmentShader.indexOf("void main() {");
-      shader.fragmentShader = "varying vec2 vUv2;\n" + shader.fragmentShader.slice(0, bodyStart) + "	uniform sampler2D previousShadowMap;\n	uniform float averagingWindow;\n" + shader.fragmentShader.slice(bodyStart - 1, -1) + `
-vec3 texelOld = texture2D(previousShadowMap, vUv2).rgb;
-				gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow);
-			}`;
-      shader.uniforms.previousShadowMap = { value: this.progressiveLightMap1.texture };
-      shader.uniforms.averagingWindow = { value: 100 };
-      this.uvMat.uniforms = shader.uniforms;
-      this.uvMat.userData.shader = shader;
-      this.compiled = true;
-    };
-  }
-  /**
-   * Sets these objects' materials' lightmaps and modifies their uv2's.
-   * @param {Object3D} objects An array of objects and lights to set up your lightmap.
-   */
-  addObjectsToLightMap(objects) {
-    this.uv_boxes = [];
-    const padding = 3 / this.res;
-    for (let ob = 0; ob < objects.length; ob++) {
-      const object = objects[ob];
-      if (object.isLight) {
-        this.scene.attach(object);
-        continue;
-      }
-      if (!object.geometry.hasAttribute("uv")) {
-        console.warn("All lightmap objects need UVs!");
-        continue;
-      }
-      if (this.blurringPlane == null) {
-        this._initializeBlurPlane(this.res, this.progressiveLightMap1);
-      }
-      object.material.lightMap = this.progressiveLightMap2.texture;
-      object.material.dithering = true;
-      object.castShadow = true;
-      object.receiveShadow = true;
-      object.renderOrder = 1e3 + ob;
-      this.uv_boxes.push({ w: 1 + padding * 2, h: 1 + padding * 2, index: ob });
-      this.lightMapContainers.push({ basicMat: object.material, object });
-      this.compiled = false;
-    }
-    const dimensions = potpack(this.uv_boxes);
-    this.uv_boxes.forEach((box) => {
-      const uv2 = objects[box.index].geometry.getAttribute("uv").clone();
-      for (let i = 0; i < uv2.array.length; i += uv2.itemSize) {
-        uv2.array[i] = (uv2.array[i] + box.x + padding) / dimensions.w;
-        uv2.array[i + 1] = (uv2.array[i + 1] + box.y + padding) / dimensions.h;
-      }
-      objects[box.index].geometry.setAttribute("uv2", uv2);
-      objects[box.index].geometry.getAttribute("uv2").needsUpdate = true;
-    });
-  }
-  /**
-   * This function renders each mesh one at a time into their respective surface maps
-   * @param {Camera} camera Standard Rendering Camera
-   * @param {number} blendWindow When >1, samples will accumulate over time.
-   * @param {boolean} blurEdges  Whether to fix UV Edges via blurring
-   */
-  update(camera, blendWindow = 100, blurEdges = true) {
-    if (this.blurringPlane == null) {
-      return;
-    }
-    const oldTarget = this.renderer.getRenderTarget();
-    this.blurringPlane.visible = blurEdges;
-    for (let l = 0; l < this.lightMapContainers.length; l++) {
-      this.lightMapContainers[l].object.oldScene = this.lightMapContainers[l].object.parent;
-      this.scene.attach(this.lightMapContainers[l].object);
-    }
-    if (this.firstUpdate) {
-      this.renderer.setRenderTarget(this.tinyTarget);
-      this.renderer.render(this.scene, camera);
-      this.firstUpdate = false;
-    }
-    for (let l = 0; l < this.lightMapContainers.length; l++) {
-      this.uvMat.uniforms.averagingWindow = { value: blendWindow };
-      this.lightMapContainers[l].object.material = this.uvMat;
-      this.lightMapContainers[l].object.oldFrustumCulled = this.lightMapContainers[l].object.frustumCulled;
-      this.lightMapContainers[l].object.frustumCulled = false;
-    }
-    const activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2;
-    const inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1;
-    this.renderer.setRenderTarget(activeMap);
-    this.uvMat.uniforms.previousShadowMap = { value: inactiveMap.texture };
-    this.blurringPlane.material.uniforms.previousShadowMap = { value: inactiveMap.texture };
-    this.buffer1Active = !this.buffer1Active;
-    this.renderer.render(this.scene, camera);
-    for (let l = 0; l < this.lightMapContainers.length; l++) {
-      this.lightMapContainers[l].object.frustumCulled = this.lightMapContainers[l].object.oldFrustumCulled;
-      this.lightMapContainers[l].object.material = this.lightMapContainers[l].basicMat;
-      this.lightMapContainers[l].object.oldScene.attach(this.lightMapContainers[l].object);
-    }
-    this.renderer.setRenderTarget(oldTarget);
-  }
-  /** DEBUG
-   * Draw the lightmap in the main scene.  Call this after adding the objects to it.
-   * @param {boolean} visible Whether the debug plane should be visible
-   * @param {Vector3} position Where the debug plane should be drawn
-   */
-  showDebugLightmap(visible, position = void 0) {
-    if (this.lightMapContainers.length == 0) {
-      if (!this.warned) {
-        console.warn("Call this after adding the objects!");
-        this.warned = true;
-      }
-      return;
-    }
-    if (this.labelMesh == null) {
-      this.labelMaterial = new three_module.MeshBasicMaterial({
-        map: this.progressiveLightMap1.texture,
-        side: three_module.DoubleSide
-      });
-      this.labelPlane = new three_module.PlaneGeometry(100, 100);
-      this.labelMesh = new three_module.Mesh(this.labelPlane, this.labelMaterial);
-      this.labelMesh.position.y = 250;
-      this.lightMapContainers[0].object.parent.add(this.labelMesh);
-    }
-    if (position != void 0) {
-      this.labelMesh.position.copy(position);
-    }
-    this.labelMesh.visible = visible;
-  }
-  /**
-   * INTERNAL Creates the Blurring Plane
-   * @param {number} res The square resolution of this object's lightMap.
-   * @param {WebGLRenderTexture} lightMap The lightmap to initialize the plane with.
-   */
-  _initializeBlurPlane(res, lightMap = null) {
-    const blurMaterial = new three_module.MeshBasicMaterial();
-    blurMaterial.uniforms = {
-      previousShadowMap: { value: null },
-      pixelOffset: { value: 1 / res },
-      polygonOffset: true,
-      polygonOffsetFactor: -1,
-      polygonOffsetUnits: 3
-    };
-    blurMaterial.onBeforeCompile = (shader) => {
-      shader.vertexShader = "#define USE_UV\n" + shader.vertexShader.slice(0, -1) + "	gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }";
-      const bodyStart = shader.fragmentShader.indexOf("void main() {");
-      shader.fragmentShader = "#define USE_UV\n" + shader.fragmentShader.slice(0, bodyStart) + "	uniform sampler2D previousShadowMap;\n	uniform float pixelOffset;\n" + shader.fragmentShader.slice(bodyStart - 1, -1) + `	gl_FragColor.rgb = (
-			  texture2D(previousShadowMap, vUv + vec2( pixelOffset,  0.0        )).rgb +
-			  texture2D(previousShadowMap, vUv + vec2( 0.0        ,  pixelOffset)).rgb +
-			  texture2D(previousShadowMap, vUv + vec2( 0.0        , -pixelOffset)).rgb +
-			  texture2D(previousShadowMap, vUv + vec2(-pixelOffset,  0.0        )).rgb +
-			  texture2D(previousShadowMap, vUv + vec2( pixelOffset,  pixelOffset)).rgb +
-			  texture2D(previousShadowMap, vUv + vec2(-pixelOffset,  pixelOffset)).rgb +
-			  texture2D(previousShadowMap, vUv + vec2( pixelOffset, -pixelOffset)).rgb +
-			  texture2D(previousShadowMap, vUv + vec2(-pixelOffset, -pixelOffset)).rgb)/8.0;
-		}`;
-      shader.uniforms.previousShadowMap = { value: lightMap.texture };
-      shader.uniforms.pixelOffset = { value: 0.5 / res };
-      blurMaterial.uniforms = shader.uniforms;
-      blurMaterial.userData.shader = shader;
-      this.compiled = true;
-    };
-    this.blurringPlane = new three_module.Mesh(new three_module.PlaneGeometry(1, 1), blurMaterial);
-    this.blurringPlane.name = "Blurring Plane";
-    this.blurringPlane.frustumCulled = false;
-    this.blurringPlane.renderOrder = 0;
-    this.blurringPlane.material.depthWrite = false;
-    this.scene.add(this.blurringPlane);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/renderers/CSS2DRenderer.js
-
-class CSS2DObject extends three_module.Object3D {
-  constructor(element = document.createElement("div")) {
-    super();
-    this.isCSS2DObject = true;
-    this.element = element;
-    this.element.style.position = "absolute";
-    this.element.style.userSelect = "none";
-    this.element.setAttribute("draggable", false);
-    this.center = new three_module.Vector2(0.5, 0.5);
-    this.addEventListener("removed", function() {
-      this.traverse(function(object) {
-        if (object.element instanceof Element && object.element.parentNode !== null) {
-          object.element.parentNode.removeChild(object.element);
-        }
-      });
-    });
-  }
-  copy(source, recursive) {
-    super.copy(source, recursive);
-    this.element = source.element.cloneNode(true);
-    this.center = source.center;
-    return this;
-  }
-}
-const _vector = /* @__PURE__ */ new three_module.Vector3();
-const _viewMatrix = /* @__PURE__ */ new three_module.Matrix4();
-const _viewProjectionMatrix = /* @__PURE__ */ new three_module.Matrix4();
-const _a = /* @__PURE__ */ new three_module.Vector3();
-const _b = /* @__PURE__ */ new three_module.Vector3();
-class CSS2DRenderer {
-  constructor(parameters = {}) {
-    const _this = this;
-    let _width, _height;
-    let _widthHalf, _heightHalf;
-    const cache = {
-      objects: /* @__PURE__ */ new WeakMap()
-    };
-    const domElement = parameters.element !== void 0 ? parameters.element : document.createElement("div");
-    domElement.style.overflow = "hidden";
-    this.domElement = domElement;
-    this.getSize = function() {
-      return {
-        width: _width,
-        height: _height
-      };
-    };
-    this.render = function(scene, camera) {
-      if (scene.matrixWorldAutoUpdate === true)
-        scene.updateMatrixWorld();
-      if (camera.parent === null && camera.matrixWorldAutoUpdate === true)
-        camera.updateMatrixWorld();
-      _viewMatrix.copy(camera.matrixWorldInverse);
-      _viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, _viewMatrix);
-      renderObject(scene, scene, camera);
-      zOrder(scene);
-    };
-    this.setSize = function(width, height) {
-      _width = width;
-      _height = height;
-      _widthHalf = _width / 2;
-      _heightHalf = _height / 2;
-      domElement.style.width = width + "px";
-      domElement.style.height = height + "px";
-    };
-    function renderObject(object, scene, camera) {
-      if (object.isCSS2DObject) {
-        _vector.setFromMatrixPosition(object.matrixWorld);
-        _vector.applyMatrix4(_viewProjectionMatrix);
-        const visible = object.visible === true && _vector.z >= -1 && _vector.z <= 1 && object.layers.test(camera.layers) === true;
-        object.element.style.display = visible === true ? "" : "none";
-        if (visible === true) {
-          object.onBeforeRender(_this, scene, camera);
-          const element = object.element;
-          element.style.transform = "translate(" + -100 * object.center.x + "%," + -100 * object.center.y + "%)translate(" + (_vector.x * _widthHalf + _widthHalf) + "px," + (-_vector.y * _heightHalf + _heightHalf) + "px)";
-          if (element.parentNode !== domElement) {
-            domElement.appendChild(element);
-          }
-          object.onAfterRender(_this, scene, camera);
-        }
-        const objectData = {
-          distanceToCameraSquared: getDistanceToSquared(camera, object)
-        };
-        cache.objects.set(object, objectData);
-      }
-      for (let i = 0, l = object.children.length; i < l; i++) {
-        renderObject(object.children[i], scene, camera);
-      }
-    }
-    function getDistanceToSquared(object1, object2) {
-      _a.setFromMatrixPosition(object1.matrixWorld);
-      _b.setFromMatrixPosition(object2.matrixWorld);
-      return _a.distanceToSquared(_b);
-    }
-    function filterAndFlatten(scene) {
-      const result = [];
-      scene.traverse(function(object) {
-        if (object.isCSS2DObject)
-          result.push(object);
-      });
-      return result;
-    }
-    function zOrder(scene) {
-      const sorted = filterAndFlatten(scene).sort(function(a, b) {
-        if (a.renderOrder !== b.renderOrder) {
-          return b.renderOrder - a.renderOrder;
-        }
-        const distanceA = cache.objects.get(a).distanceToCameraSquared;
-        const distanceB = cache.objects.get(b).distanceToCameraSquared;
-        return distanceA - distanceB;
-      });
-      const zMax = sorted.length;
-      for (let i = 0, l = sorted.length; i < l; i++) {
-        sorted[i].element.style.zIndex = zMax - i;
-      }
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/renderers/CSS3DRenderer.js
-
-const _position = /* @__PURE__ */ new three_module.Vector3();
-const _quaternion = /* @__PURE__ */ new three_module.Quaternion();
-const _scale = /* @__PURE__ */ new three_module.Vector3();
-class CSS3DObject extends three_module.Object3D {
-  constructor(element = document.createElement("div")) {
-    super();
-    this.isCSS3DObject = true;
-    this.element = element;
-    this.element.style.position = "absolute";
-    this.element.style.pointerEvents = "auto";
-    this.element.style.userSelect = "none";
-    this.element.setAttribute("draggable", false);
-    this.addEventListener("removed", function() {
-      this.traverse(function(object) {
-        if (object.element instanceof Element && object.element.parentNode !== null) {
-          object.element.parentNode.removeChild(object.element);
-        }
-      });
-    });
-  }
-  copy(source, recursive) {
-    super.copy(source, recursive);
-    this.element = source.element.cloneNode(true);
-    return this;
-  }
-}
-class CSS3DSprite extends CSS3DObject {
-  constructor(element) {
-    super(element);
-    this.isCSS3DSprite = true;
-    this.rotation2D = 0;
-  }
-  copy(source, recursive) {
-    super.copy(source, recursive);
-    this.rotation2D = source.rotation2D;
-    return this;
-  }
-}
-const _matrix = /* @__PURE__ */ new three_module.Matrix4();
-const _matrix2 = /* @__PURE__ */ new three_module.Matrix4();
-class CSS3DRenderer {
-  constructor(parameters = {}) {
-    const _this = this;
-    let _width, _height;
-    let _widthHalf, _heightHalf;
-    const cache = {
-      camera: { fov: 0, style: "" },
-      objects: /* @__PURE__ */ new WeakMap()
-    };
-    const domElement = parameters.element !== void 0 ? parameters.element : document.createElement("div");
-    domElement.style.overflow = "hidden";
-    this.domElement = domElement;
-    const viewElement = document.createElement("div");
-    viewElement.style.transformOrigin = "0 0";
-    viewElement.style.pointerEvents = "none";
-    domElement.appendChild(viewElement);
-    const cameraElement = document.createElement("div");
-    cameraElement.style.transformStyle = "preserve-3d";
-    viewElement.appendChild(cameraElement);
-    this.getSize = function() {
-      return {
-        width: _width,
-        height: _height
-      };
-    };
-    this.render = function(scene, camera) {
-      const fov = camera.projectionMatrix.elements[5] * _heightHalf;
-      if (cache.camera.fov !== fov) {
-        viewElement.style.perspective = camera.isPerspectiveCamera ? fov + "px" : "";
-        cache.camera.fov = fov;
-      }
-      if (camera.view && camera.view.enabled) {
-        viewElement.style.transform = `translate( ${-camera.view.offsetX * (_width / camera.view.width)}px, ${-camera.view.offsetY * (_height / camera.view.height)}px )`;
-        viewElement.style.transform += `scale( ${camera.view.fullWidth / camera.view.width}, ${camera.view.fullHeight / camera.view.height} )`;
-      } else {
-        viewElement.style.transform = "";
-      }
-      if (scene.matrixWorldAutoUpdate === true)
-        scene.updateMatrixWorld();
-      if (camera.parent === null && camera.matrixWorldAutoUpdate === true)
-        camera.updateMatrixWorld();
-      let tx, ty;
-      if (camera.isOrthographicCamera) {
-        tx = -(camera.right + camera.left) / 2;
-        ty = (camera.top + camera.bottom) / 2;
-      }
-      const scaleByViewOffset = camera.view && camera.view.enabled ? camera.view.height / camera.view.fullHeight : 1;
-      const cameraCSSMatrix = camera.isOrthographicCamera ? `scale( ${scaleByViewOffset} )scale(` + fov + ")translate(" + epsilon(tx) + "px," + epsilon(ty) + "px)" + getCameraCSSMatrix(camera.matrixWorldInverse) : `scale( ${scaleByViewOffset} )translateZ(` + fov + "px)" + getCameraCSSMatrix(camera.matrixWorldInverse);
-      const style = cameraCSSMatrix + "translate(" + _widthHalf + "px," + _heightHalf + "px)";
-      if (cache.camera.style !== style) {
-        cameraElement.style.transform = style;
-        cache.camera.style = style;
-      }
-      renderObject(scene, scene, camera, cameraCSSMatrix);
-    };
-    this.setSize = function(width, height) {
-      _width = width;
-      _height = height;
-      _widthHalf = _width / 2;
-      _heightHalf = _height / 2;
-      domElement.style.width = width + "px";
-      domElement.style.height = height + "px";
-      viewElement.style.width = width + "px";
-      viewElement.style.height = height + "px";
-      cameraElement.style.width = width + "px";
-      cameraElement.style.height = height + "px";
-    };
-    function epsilon(value) {
-      return Math.abs(value) < 1e-10 ? 0 : value;
-    }
-    function getCameraCSSMatrix(matrix) {
-      const elements = matrix.elements;
-      return "matrix3d(" + epsilon(elements[0]) + "," + epsilon(-elements[1]) + "," + epsilon(elements[2]) + "," + epsilon(elements[3]) + "," + epsilon(elements[4]) + "," + epsilon(-elements[5]) + "," + epsilon(elements[6]) + "," + epsilon(elements[7]) + "," + epsilon(elements[8]) + "," + epsilon(-elements[9]) + "," + epsilon(elements[10]) + "," + epsilon(elements[11]) + "," + epsilon(elements[12]) + "," + epsilon(-elements[13]) + "," + epsilon(elements[14]) + "," + epsilon(elements[15]) + ")";
-    }
-    function getObjectCSSMatrix(matrix) {
-      const elements = matrix.elements;
-      const matrix3d = "matrix3d(" + epsilon(elements[0]) + "," + epsilon(elements[1]) + "," + epsilon(elements[2]) + "," + epsilon(elements[3]) + "," + epsilon(-elements[4]) + "," + epsilon(-elements[5]) + "," + epsilon(-elements[6]) + "," + epsilon(-elements[7]) + "," + epsilon(elements[8]) + "," + epsilon(elements[9]) + "," + epsilon(elements[10]) + "," + epsilon(elements[11]) + "," + epsilon(elements[12]) + "," + epsilon(elements[13]) + "," + epsilon(elements[14]) + "," + epsilon(elements[15]) + ")";
-      return "translate(-50%,-50%)" + matrix3d;
-    }
-    function renderObject(object, scene, camera, cameraCSSMatrix) {
-      if (object.isCSS3DObject) {
-        const visible = object.visible === true && object.layers.test(camera.layers) === true;
-        object.element.style.display = visible === true ? "" : "none";
-        if (visible === true) {
-          object.onBeforeRender(_this, scene, camera);
-          let style;
-          if (object.isCSS3DSprite) {
-            _matrix.copy(camera.matrixWorldInverse);
-            _matrix.transpose();
-            if (object.rotation2D !== 0)
-              _matrix.multiply(_matrix2.makeRotationZ(object.rotation2D));
-            object.matrixWorld.decompose(_position, _quaternion, _scale);
-            _matrix.setPosition(_position);
-            _matrix.scale(_scale);
-            _matrix.elements[3] = 0;
-            _matrix.elements[7] = 0;
-            _matrix.elements[11] = 0;
-            _matrix.elements[15] = 1;
-            style = getObjectCSSMatrix(_matrix);
-          } else {
-            style = getObjectCSSMatrix(object.matrixWorld);
-          }
-          const element = object.element;
-          const cachedObject = cache.objects.get(object);
-          if (cachedObject === void 0 || cachedObject.style !== style) {
-            element.style.transform = style;
-            const objectData = { style };
-            cache.objects.set(object, objectData);
-          }
-          if (element.parentNode !== cameraElement) {
-            cameraElement.appendChild(element);
-          }
-          object.onAfterRender(_this, scene, camera);
-        }
-      }
-      for (let i = 0, l = object.children.length; i < l; i++) {
-        renderObject(object.children[i], scene, camera, cameraCSSMatrix);
-      }
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/renderers/Projector.js
-
-class RenderableObject {
-  constructor() {
-    this.id = 0;
-    this.object = null;
-    this.z = 0;
-    this.renderOrder = 0;
-  }
-}
-class RenderableFace {
-  constructor() {
-    this.id = 0;
-    this.v1 = new RenderableVertex();
-    this.v2 = new RenderableVertex();
-    this.v3 = new RenderableVertex();
-    this.normalModel = new three_module.Vector3();
-    this.vertexNormalsModel = [new three_module.Vector3(), new three_module.Vector3(), new three_module.Vector3()];
-    this.vertexNormalsLength = 0;
-    this.color = new three_module.Color();
-    this.material = null;
-    this.uvs = [new three_module.Vector2(), new three_module.Vector2(), new three_module.Vector2()];
-    this.z = 0;
-    this.renderOrder = 0;
-  }
-}
-class RenderableVertex {
-  constructor() {
-    this.position = new three_module.Vector3();
-    this.positionWorld = new three_module.Vector3();
-    this.positionScreen = new three_module.Vector4();
-    this.visible = true;
-  }
-  copy(vertex) {
-    this.positionWorld.copy(vertex.positionWorld);
-    this.positionScreen.copy(vertex.positionScreen);
-  }
-}
-class RenderableLine {
-  constructor() {
-    this.id = 0;
-    this.v1 = new RenderableVertex();
-    this.v2 = new RenderableVertex();
-    this.vertexColors = [new three_module.Color(), new three_module.Color()];
-    this.material = null;
-    this.z = 0;
-    this.renderOrder = 0;
-  }
-}
-class RenderableSprite {
-  constructor() {
-    this.id = 0;
-    this.object = null;
-    this.x = 0;
-    this.y = 0;
-    this.z = 0;
-    this.rotation = 0;
-    this.scale = new three_module.Vector2();
-    this.material = null;
-    this.renderOrder = 0;
-  }
-}
-class Projector {
-  constructor() {
-    let _object, _objectCount, _objectPoolLength = 0, _vertex, _vertexCount, _vertexPoolLength = 0, _face, _faceCount, _facePoolLength = 0, _line, _lineCount, _linePoolLength = 0, _sprite, _spriteCount, _spritePoolLength = 0, _modelMatrix;
-    const _renderData = { objects: [], lights: [], elements: [] }, _vector3 = new three_module.Vector3(), _vector4 = new three_module.Vector4(), _clipBox = new three_module.Box3(new three_module.Vector3(-1, -1, -1), new three_module.Vector3(1, 1, 1)), _boundingBox = new three_module.Box3(), _points3 = new Array(3), _viewMatrix = new three_module.Matrix4(), _viewProjectionMatrix = new three_module.Matrix4(), _modelViewProjectionMatrix = new three_module.Matrix4(), _frustum = new three_module.Frustum(), _objectPool = [], _vertexPool = [], _facePool = [], _linePool = [], _spritePool = [];
-    function RenderList() {
-      const normals = [];
-      const colors = [];
-      const uvs = [];
-      let object = null;
-      const normalMatrix = new three_module.Matrix3();
-      function setObject(value) {
-        object = value;
-        normalMatrix.getNormalMatrix(object.matrixWorld);
-        normals.length = 0;
-        colors.length = 0;
-        uvs.length = 0;
-      }
-      function projectVertex(vertex) {
-        const position = vertex.position;
-        const positionWorld = vertex.positionWorld;
-        const positionScreen = vertex.positionScreen;
-        positionWorld.copy(position).applyMatrix4(_modelMatrix);
-        positionScreen.copy(positionWorld).applyMatrix4(_viewProjectionMatrix);
-        const invW = 1 / positionScreen.w;
-        positionScreen.x *= invW;
-        positionScreen.y *= invW;
-        positionScreen.z *= invW;
-        vertex.visible = positionScreen.x >= -1 && positionScreen.x <= 1 && positionScreen.y >= -1 && positionScreen.y <= 1 && positionScreen.z >= -1 && positionScreen.z <= 1;
-      }
-      function pushVertex(x, y, z) {
-        _vertex = getNextVertexInPool();
-        _vertex.position.set(x, y, z);
-        projectVertex(_vertex);
-      }
-      function pushNormal(x, y, z) {
-        normals.push(x, y, z);
-      }
-      function pushColor(r, g, b) {
-        colors.push(r, g, b);
-      }
-      function pushUv(x, y) {
-        uvs.push(x, y);
-      }
-      function checkTriangleVisibility(v1, v2, v3) {
-        if (v1.visible === true || v2.visible === true || v3.visible === true)
-          return true;
-        _points3[0] = v1.positionScreen;
-        _points3[1] = v2.positionScreen;
-        _points3[2] = v3.positionScreen;
-        return _clipBox.intersectsBox(_boundingBox.setFromPoints(_points3));
-      }
-      function checkBackfaceCulling(v1, v2, v3) {
-        return (v3.positionScreen.x - v1.positionScreen.x) * (v2.positionScreen.y - v1.positionScreen.y) - (v3.positionScreen.y - v1.positionScreen.y) * (v2.positionScreen.x - v1.positionScreen.x) < 0;
-      }
-      function pushLine(a, b) {
-        const v1 = _vertexPool[a];
-        const v2 = _vertexPool[b];
-        v1.positionScreen.copy(v1.position).applyMatrix4(_modelViewProjectionMatrix);
-        v2.positionScreen.copy(v2.position).applyMatrix4(_modelViewProjectionMatrix);
-        if (clipLine(v1.positionScreen, v2.positionScreen) === true) {
-          v1.positionScreen.multiplyScalar(1 / v1.positionScreen.w);
-          v2.positionScreen.multiplyScalar(1 / v2.positionScreen.w);
-          _line = getNextLineInPool();
-          _line.id = object.id;
-          _line.v1.copy(v1);
-          _line.v2.copy(v2);
-          _line.z = Math.max(v1.positionScreen.z, v2.positionScreen.z);
-          _line.renderOrder = object.renderOrder;
-          _line.material = object.material;
-          if (object.material.vertexColors) {
-            _line.vertexColors[0].fromArray(colors, a * 3);
-            _line.vertexColors[1].fromArray(colors, b * 3);
-          }
-          _renderData.elements.push(_line);
-        }
-      }
-      function pushTriangle(a, b, c, material) {
-        const v1 = _vertexPool[a];
-        const v2 = _vertexPool[b];
-        const v3 = _vertexPool[c];
-        if (checkTriangleVisibility(v1, v2, v3) === false)
-          return;
-        if (material.side === three_module.DoubleSide || checkBackfaceCulling(v1, v2, v3) === true) {
-          _face = getNextFaceInPool();
-          _face.id = object.id;
-          _face.v1.copy(v1);
-          _face.v2.copy(v2);
-          _face.v3.copy(v3);
-          _face.z = (v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z) / 3;
-          _face.renderOrder = object.renderOrder;
-          _vector3.subVectors(v3.position, v2.position);
-          _vector4.subVectors(v1.position, v2.position);
-          _vector3.cross(_vector4);
-          _face.normalModel.copy(_vector3);
-          _face.normalModel.applyMatrix3(normalMatrix).normalize();
-          for (let i = 0; i < 3; i++) {
-            const normal = _face.vertexNormalsModel[i];
-            normal.fromArray(normals, arguments[i] * 3);
-            normal.applyMatrix3(normalMatrix).normalize();
-            const uv = _face.uvs[i];
-            uv.fromArray(uvs, arguments[i] * 2);
-          }
-          _face.vertexNormalsLength = 3;
-          _face.material = material;
-          if (material.vertexColors) {
-            _face.color.fromArray(colors, a * 3);
-          }
-          _renderData.elements.push(_face);
-        }
-      }
-      return {
-        setObject,
-        projectVertex,
-        checkTriangleVisibility,
-        checkBackfaceCulling,
-        pushVertex,
-        pushNormal,
-        pushColor,
-        pushUv,
-        pushLine,
-        pushTriangle
-      };
-    }
-    const renderList = new RenderList();
-    function projectObject(object) {
-      if (object.visible === false)
-        return;
-      if (object.isLight) {
-        _renderData.lights.push(object);
-      } else if (object.isMesh || object.isLine || object.isPoints) {
-        if (object.material.visible === false)
-          return;
-        if (object.frustumCulled === true && _frustum.intersectsObject(object) === false)
-          return;
-        addObject(object);
-      } else if (object.isSprite) {
-        if (object.material.visible === false)
-          return;
-        if (object.frustumCulled === true && _frustum.intersectsSprite(object) === false)
-          return;
-        addObject(object);
-      }
-      const children = object.children;
-      for (let i = 0, l = children.length; i < l; i++) {
-        projectObject(children[i]);
-      }
-    }
-    function addObject(object) {
-      _object = getNextObjectInPool();
-      _object.id = object.id;
-      _object.object = object;
-      _vector3.setFromMatrixPosition(object.matrixWorld);
-      _vector3.applyMatrix4(_viewProjectionMatrix);
-      _object.z = _vector3.z;
-      _object.renderOrder = object.renderOrder;
-      _renderData.objects.push(_object);
-    }
-    this.projectScene = function(scene, camera, sortObjects, sortElements) {
-      _faceCount = 0;
-      _lineCount = 0;
-      _spriteCount = 0;
-      _renderData.elements.length = 0;
-      if (scene.matrixWorldAutoUpdate === true)
-        scene.updateMatrixWorld();
-      if (camera.parent === null && camera.matrixWorldAutoUpdate === true)
-        camera.updateMatrixWorld();
-      _viewMatrix.copy(camera.matrixWorldInverse);
-      _viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, _viewMatrix);
-      _frustum.setFromProjectionMatrix(_viewProjectionMatrix);
-      _objectCount = 0;
-      _renderData.objects.length = 0;
-      _renderData.lights.length = 0;
-      projectObject(scene);
-      if (sortObjects === true) {
-        _renderData.objects.sort(painterSort);
-      }
-      const objects = _renderData.objects;
-      for (let o = 0, ol = objects.length; o < ol; o++) {
-        const object = objects[o].object;
-        const geometry = object.geometry;
-        renderList.setObject(object);
-        _modelMatrix = object.matrixWorld;
-        _vertexCount = 0;
-        if (object.isMesh) {
-          let material = object.material;
-          const isMultiMaterial = Array.isArray(material);
-          const attributes = geometry.attributes;
-          const groups = geometry.groups;
-          if (attributes.position === void 0)
-            continue;
-          const positions = attributes.position.array;
-          for (let i = 0, l = positions.length; i < l; i += 3) {
-            let x = positions[i];
-            let y = positions[i + 1];
-            let z = positions[i + 2];
-            const morphTargets = geometry.morphAttributes.position;
-            if (morphTargets !== void 0) {
-              const morphTargetsRelative = geometry.morphTargetsRelative;
-              const morphInfluences = object.morphTargetInfluences;
-              for (let t = 0, tl = morphTargets.length; t < tl; t++) {
-                const influence = morphInfluences[t];
-                if (influence === 0)
-                  continue;
-                const target = morphTargets[t];
-                if (morphTargetsRelative) {
-                  x += target.getX(i / 3) * influence;
-                  y += target.getY(i / 3) * influence;
-                  z += target.getZ(i / 3) * influence;
-                } else {
-                  x += (target.getX(i / 3) - positions[i]) * influence;
-                  y += (target.getY(i / 3) - positions[i + 1]) * influence;
-                  z += (target.getZ(i / 3) - positions[i + 2]) * influence;
-                }
-              }
-            }
-            renderList.pushVertex(x, y, z);
-          }
-          if (attributes.normal !== void 0) {
-            const normals = attributes.normal.array;
-            for (let i = 0, l = normals.length; i < l; i += 3) {
-              renderList.pushNormal(normals[i], normals[i + 1], normals[i + 2]);
-            }
-          }
-          if (attributes.color !== void 0) {
-            const colors = attributes.color.array;
-            for (let i = 0, l = colors.length; i < l; i += 3) {
-              renderList.pushColor(colors[i], colors[i + 1], colors[i + 2]);
-            }
-          }
-          if (attributes.uv !== void 0) {
-            const uvs = attributes.uv.array;
-            for (let i = 0, l = uvs.length; i < l; i += 2) {
-              renderList.pushUv(uvs[i], uvs[i + 1]);
-            }
-          }
-          if (geometry.index !== null) {
-            const indices = geometry.index.array;
-            if (groups.length > 0) {
-              for (let g = 0; g < groups.length; g++) {
-                const group = groups[g];
-                material = isMultiMaterial === true ? object.material[group.materialIndex] : object.material;
-                if (material === void 0)
-                  continue;
-                for (let i = group.start, l = group.start + group.count; i < l; i += 3) {
-                  renderList.pushTriangle(indices[i], indices[i + 1], indices[i + 2], material);
-                }
-              }
-            } else {
-              for (let i = 0, l = indices.length; i < l; i += 3) {
-                renderList.pushTriangle(indices[i], indices[i + 1], indices[i + 2], material);
-              }
-            }
-          } else {
-            if (groups.length > 0) {
-              for (let g = 0; g < groups.length; g++) {
-                const group = groups[g];
-                material = isMultiMaterial === true ? object.material[group.materialIndex] : object.material;
-                if (material === void 0)
-                  continue;
-                for (let i = group.start, l = group.start + group.count; i < l; i += 3) {
-                  renderList.pushTriangle(i, i + 1, i + 2, material);
-                }
-              }
-            } else {
-              for (let i = 0, l = positions.length / 3; i < l; i += 3) {
-                renderList.pushTriangle(i, i + 1, i + 2, material);
-              }
-            }
-          }
-        } else if (object.isLine) {
-          _modelViewProjectionMatrix.multiplyMatrices(_viewProjectionMatrix, _modelMatrix);
-          const attributes = geometry.attributes;
-          if (attributes.position !== void 0) {
-            const positions = attributes.position.array;
-            for (let i = 0, l = positions.length; i < l; i += 3) {
-              renderList.pushVertex(positions[i], positions[i + 1], positions[i + 2]);
-            }
-            if (attributes.color !== void 0) {
-              const colors = attributes.color.array;
-              for (let i = 0, l = colors.length; i < l; i += 3) {
-                renderList.pushColor(colors[i], colors[i + 1], colors[i + 2]);
-              }
-            }
-            if (geometry.index !== null) {
-              const indices = geometry.index.array;
-              for (let i = 0, l = indices.length; i < l; i += 2) {
-                renderList.pushLine(indices[i], indices[i + 1]);
-              }
-            } else {
-              const step = object.isLineSegments ? 2 : 1;
-              for (let i = 0, l = positions.length / 3 - 1; i < l; i += step) {
-                renderList.pushLine(i, i + 1);
-              }
-            }
-          }
-        } else if (object.isPoints) {
-          _modelViewProjectionMatrix.multiplyMatrices(_viewProjectionMatrix, _modelMatrix);
-          const attributes = geometry.attributes;
-          if (attributes.position !== void 0) {
-            const positions = attributes.position.array;
-            for (let i = 0, l = positions.length; i < l; i += 3) {
-              _vector4.set(positions[i], positions[i + 1], positions[i + 2], 1);
-              _vector4.applyMatrix4(_modelViewProjectionMatrix);
-              pushPoint(_vector4, object, camera);
-            }
-          }
-        } else if (object.isSprite) {
-          object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, object.matrixWorld);
-          _vector4.set(_modelMatrix.elements[12], _modelMatrix.elements[13], _modelMatrix.elements[14], 1);
-          _vector4.applyMatrix4(_viewProjectionMatrix);
-          pushPoint(_vector4, object, camera);
-        }
-      }
-      if (sortElements === true) {
-        _renderData.elements.sort(painterSort);
-      }
-      return _renderData;
-    };
-    function pushPoint(_vector42, object, camera) {
-      const invW = 1 / _vector42.w;
-      _vector42.z *= invW;
-      if (_vector42.z >= -1 && _vector42.z <= 1) {
-        _sprite = getNextSpriteInPool();
-        _sprite.id = object.id;
-        _sprite.x = _vector42.x * invW;
-        _sprite.y = _vector42.y * invW;
-        _sprite.z = _vector42.z;
-        _sprite.renderOrder = object.renderOrder;
-        _sprite.object = object;
-        _sprite.rotation = object.rotation;
-        _sprite.scale.x = object.scale.x * Math.abs(
-          _sprite.x - (_vector42.x + camera.projectionMatrix.elements[0]) / (_vector42.w + camera.projectionMatrix.elements[12])
-        );
-        _sprite.scale.y = object.scale.y * Math.abs(
-          _sprite.y - (_vector42.y + camera.projectionMatrix.elements[5]) / (_vector42.w + camera.projectionMatrix.elements[13])
-        );
-        _sprite.material = object.material;
-        _renderData.elements.push(_sprite);
-      }
-    }
-    function getNextObjectInPool() {
-      if (_objectCount === _objectPoolLength) {
-        const object = new RenderableObject();
-        _objectPool.push(object);
-        _objectPoolLength++;
-        _objectCount++;
-        return object;
-      }
-      return _objectPool[_objectCount++];
-    }
-    function getNextVertexInPool() {
-      if (_vertexCount === _vertexPoolLength) {
-        const vertex = new RenderableVertex();
-        _vertexPool.push(vertex);
-        _vertexPoolLength++;
-        _vertexCount++;
-        return vertex;
-      }
-      return _vertexPool[_vertexCount++];
-    }
-    function getNextFaceInPool() {
-      if (_faceCount === _facePoolLength) {
-        const face = new RenderableFace();
-        _facePool.push(face);
-        _facePoolLength++;
-        _faceCount++;
-        return face;
-      }
-      return _facePool[_faceCount++];
-    }
-    function getNextLineInPool() {
-      if (_lineCount === _linePoolLength) {
-        const line = new RenderableLine();
-        _linePool.push(line);
-        _linePoolLength++;
-        _lineCount++;
-        return line;
-      }
-      return _linePool[_lineCount++];
-    }
-    function getNextSpriteInPool() {
-      if (_spriteCount === _spritePoolLength) {
-        const sprite = new RenderableSprite();
-        _spritePool.push(sprite);
-        _spritePoolLength++;
-        _spriteCount++;
-        return sprite;
-      }
-      return _spritePool[_spriteCount++];
-    }
-    function painterSort(a, b) {
-      if (a.renderOrder !== b.renderOrder) {
-        return a.renderOrder - b.renderOrder;
-      } else if (a.z !== b.z) {
-        return b.z - a.z;
-      } else if (a.id !== b.id) {
-        return a.id - b.id;
-      } else {
-        return 0;
-      }
-    }
-    function clipLine(s1, s2) {
-      let alpha1 = 0, alpha2 = 1;
-      const bc1near = s1.z + s1.w, bc2near = s2.z + s2.w, bc1far = -s1.z + s1.w, bc2far = -s2.z + s2.w;
-      if (bc1near >= 0 && bc2near >= 0 && bc1far >= 0 && bc2far >= 0) {
-        return true;
-      } else if (bc1near < 0 && bc2near < 0 || bc1far < 0 && bc2far < 0) {
-        return false;
-      } else {
-        if (bc1near < 0) {
-          alpha1 = Math.max(alpha1, bc1near / (bc1near - bc2near));
-        } else if (bc2near < 0) {
-          alpha2 = Math.min(alpha2, bc1near / (bc1near - bc2near));
-        }
-        if (bc1far < 0) {
-          alpha1 = Math.max(alpha1, bc1far / (bc1far - bc2far));
-        } else if (bc2far < 0) {
-          alpha2 = Math.min(alpha2, bc1far / (bc1far - bc2far));
-        }
-        if (alpha2 < alpha1) {
-          return false;
-        } else {
-          s1.lerp(s2, alpha1);
-          s2.lerp(s1, 1 - alpha2);
-          return true;
-        }
-      }
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/renderers/SVGRenderer.js
-
-
-class SVGObject extends three_module.Object3D {
-  constructor(node) {
-    super();
-    this.isSVGObject = true;
-    this.node = node;
-  }
-}
-class SVGRenderer {
-  constructor() {
-    let _renderData, _elements, _lights, _svgWidth, _svgHeight, _svgWidthHalf, _svgHeightHalf, _v1, _v2, _v3, _svgNode, _pathCount = 0, _precision = null, _quality = 1, _currentPath, _currentStyle;
-    const _this = this, _clipBox = new three_module.Box2(), _elemBox = new three_module.Box2(), _color = new three_module.Color(), _diffuseColor = new three_module.Color(), _ambientLight = new three_module.Color(), _directionalLights = new three_module.Color(), _pointLights = new three_module.Color(), _clearColor = new three_module.Color(), _vector3 = new three_module.Vector3(), _centroid = new three_module.Vector3(), _normal = new three_module.Vector3(), _normalViewMatrix = new three_module.Matrix3(), _viewMatrix = new three_module.Matrix4(), _viewProjectionMatrix = new three_module.Matrix4(), _svgPathPool = [], _projector = new Projector(), _svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
-    this.domElement = _svg;
-    this.autoClear = true;
-    this.sortObjects = true;
-    this.sortElements = true;
-    this.overdraw = 0.5;
-    this.info = {
-      render: {
-        vertices: 0,
-        faces: 0
-      }
-    };
-    this.setQuality = function(quality) {
-      switch (quality) {
-        case "high":
-          _quality = 1;
-          break;
-        case "low":
-          _quality = 0;
-          break;
-      }
-    };
-    this.setClearColor = function(color) {
-      _clearColor.set(color);
-    };
-    this.setPixelRatio = function() {
-    };
-    this.setSize = function(width, height) {
-      _svgWidth = width;
-      _svgHeight = height;
-      _svgWidthHalf = _svgWidth / 2;
-      _svgHeightHalf = _svgHeight / 2;
-      _svg.setAttribute("viewBox", -_svgWidthHalf + " " + -_svgHeightHalf + " " + _svgWidth + " " + _svgHeight);
-      _svg.setAttribute("width", _svgWidth);
-      _svg.setAttribute("height", _svgHeight);
-      _clipBox.min.set(-_svgWidthHalf, -_svgHeightHalf);
-      _clipBox.max.set(_svgWidthHalf, _svgHeightHalf);
-    };
-    this.getSize = function() {
-      return {
-        width: _svgWidth,
-        height: _svgHeight
-      };
-    };
-    this.setPrecision = function(precision) {
-      _precision = precision;
-    };
-    function removeChildNodes() {
-      _pathCount = 0;
-      while (_svg.childNodes.length > 0) {
-        _svg.removeChild(_svg.childNodes[0]);
-      }
-    }
-    function convert(c) {
-      return _precision !== null ? c.toFixed(_precision) : c;
-    }
-    this.clear = function() {
-      removeChildNodes();
-      _svg.style.backgroundColor = _clearColor.getStyle();
-    };
-    this.render = function(scene, camera) {
-      if (camera instanceof three_module.Camera === false) {
-        console.error("THREE.SVGRenderer.render: camera is not an instance of Camera.");
-        return;
-      }
-      const background = scene.background;
-      if (background && background.isColor) {
-        removeChildNodes();
-        _svg.style.backgroundColor = background.getStyle();
-      } else if (this.autoClear === true) {
-        this.clear();
-      }
-      _this.info.render.vertices = 0;
-      _this.info.render.faces = 0;
-      _viewMatrix.copy(camera.matrixWorldInverse);
-      _viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, _viewMatrix);
-      _renderData = _projector.projectScene(scene, camera, this.sortObjects, this.sortElements);
-      _elements = _renderData.elements;
-      _lights = _renderData.lights;
-      _normalViewMatrix.getNormalMatrix(camera.matrixWorldInverse);
-      calculateLights(_lights);
-      _currentPath = "";
-      _currentStyle = "";
-      for (let e = 0, el = _elements.length; e < el; e++) {
-        const element = _elements[e];
-        const material = element.material;
-        if (material === void 0 || material.opacity === 0)
-          continue;
-        _elemBox.makeEmpty();
-        if (element instanceof RenderableSprite) {
-          _v1 = element;
-          _v1.x *= _svgWidthHalf;
-          _v1.y *= -_svgHeightHalf;
-          renderSprite(_v1, element, material);
-        } else if (element instanceof RenderableLine) {
-          _v1 = element.v1;
-          _v2 = element.v2;
-          _v1.positionScreen.x *= _svgWidthHalf;
-          _v1.positionScreen.y *= -_svgHeightHalf;
-          _v2.positionScreen.x *= _svgWidthHalf;
-          _v2.positionScreen.y *= -_svgHeightHalf;
-          _elemBox.setFromPoints([_v1.positionScreen, _v2.positionScreen]);
-          if (_clipBox.intersectsBox(_elemBox) === true) {
-            renderLine(_v1, _v2, material);
-          }
-        } else if (element instanceof RenderableFace) {
-          _v1 = element.v1;
-          _v2 = element.v2;
-          _v3 = element.v3;
-          if (_v1.positionScreen.z < -1 || _v1.positionScreen.z > 1)
-            continue;
-          if (_v2.positionScreen.z < -1 || _v2.positionScreen.z > 1)
-            continue;
-          if (_v3.positionScreen.z < -1 || _v3.positionScreen.z > 1)
-            continue;
-          _v1.positionScreen.x *= _svgWidthHalf;
-          _v1.positionScreen.y *= -_svgHeightHalf;
-          _v2.positionScreen.x *= _svgWidthHalf;
-          _v2.positionScreen.y *= -_svgHeightHalf;
-          _v3.positionScreen.x *= _svgWidthHalf;
-          _v3.positionScreen.y *= -_svgHeightHalf;
-          if (this.overdraw > 0) {
-            expand(_v1.positionScreen, _v2.positionScreen, this.overdraw);
-            expand(_v2.positionScreen, _v3.positionScreen, this.overdraw);
-            expand(_v3.positionScreen, _v1.positionScreen, this.overdraw);
-          }
-          _elemBox.setFromPoints([_v1.positionScreen, _v2.positionScreen, _v3.positionScreen]);
-          if (_clipBox.intersectsBox(_elemBox) === true) {
-            renderFace3(_v1, _v2, _v3, element, material);
-          }
-        }
-      }
-      flushPath();
-      scene.traverseVisible(function(object) {
-        if (object.isSVGObject) {
-          _vector3.setFromMatrixPosition(object.matrixWorld);
-          _vector3.applyMatrix4(_viewProjectionMatrix);
-          if (_vector3.z < -1 || _vector3.z > 1)
-            return;
-          const x = _vector3.x * _svgWidthHalf;
-          const y = -_vector3.y * _svgHeightHalf;
-          const node = object.node;
-          node.setAttribute("transform", "translate(" + x + "," + y + ")");
-          _svg.appendChild(node);
-        }
-      });
-    };
-    function calculateLights(lights) {
-      _ambientLight.setRGB(0, 0, 0);
-      _directionalLights.setRGB(0, 0, 0);
-      _pointLights.setRGB(0, 0, 0);
-      for (let l = 0, ll = lights.length; l < ll; l++) {
-        const light = lights[l];
-        const lightColor = light.color;
-        if (light.isAmbientLight) {
-          _ambientLight.r += lightColor.r;
-          _ambientLight.g += lightColor.g;
-          _ambientLight.b += lightColor.b;
-        } else if (light.isDirectionalLight) {
-          _directionalLights.r += lightColor.r;
-          _directionalLights.g += lightColor.g;
-          _directionalLights.b += lightColor.b;
-        } else if (light.isPointLight) {
-          _pointLights.r += lightColor.r;
-          _pointLights.g += lightColor.g;
-          _pointLights.b += lightColor.b;
-        }
-      }
-    }
-    function calculateLight(lights, position, normal, color) {
-      for (let l = 0, ll = lights.length; l < ll; l++) {
-        const light = lights[l];
-        const lightColor = light.color;
-        if (light.isDirectionalLight) {
-          const lightPosition = _vector3.setFromMatrixPosition(light.matrixWorld).normalize();
-          let amount = normal.dot(lightPosition);
-          if (amount <= 0)
-            continue;
-          amount *= light.intensity;
-          color.r += lightColor.r * amount;
-          color.g += lightColor.g * amount;
-          color.b += lightColor.b * amount;
-        } else if (light.isPointLight) {
-          const lightPosition = _vector3.setFromMatrixPosition(light.matrixWorld);
-          let amount = normal.dot(_vector3.subVectors(lightPosition, position).normalize());
-          if (amount <= 0)
-            continue;
-          amount *= light.distance == 0 ? 1 : 1 - Math.min(position.distanceTo(lightPosition) / light.distance, 1);
-          if (amount == 0)
-            continue;
-          amount *= light.intensity;
-          color.r += lightColor.r * amount;
-          color.g += lightColor.g * amount;
-          color.b += lightColor.b * amount;
-        }
-      }
-    }
-    function renderSprite(v1, element, material) {
-      let scaleX = element.scale.x * _svgWidthHalf;
-      let scaleY = element.scale.y * _svgHeightHalf;
-      if (material.isPointsMaterial) {
-        scaleX *= material.size;
-        scaleY *= material.size;
-      }
-      const path = "M" + convert(v1.x - scaleX * 0.5) + "," + convert(v1.y - scaleY * 0.5) + "h" + convert(scaleX) + "v" + convert(scaleY) + "h" + convert(-scaleX) + "z";
-      let style = "";
-      if (material.isSpriteMaterial || material.isPointsMaterial) {
-        style = "fill:" + material.color.getStyle() + ";fill-opacity:" + material.opacity;
-      }
-      addPath(style, path);
-    }
-    function renderLine(v1, v2, material) {
-      const path = "M" + convert(v1.positionScreen.x) + "," + convert(v1.positionScreen.y) + "L" + convert(v2.positionScreen.x) + "," + convert(v2.positionScreen.y);
-      if (material.isLineBasicMaterial) {
-        let style = "fill:none;stroke:" + material.color.getStyle() + ";stroke-opacity:" + material.opacity + ";stroke-width:" + material.linewidth + ";stroke-linecap:" + material.linecap;
-        if (material.isLineDashedMaterial) {
-          style = style + ";stroke-dasharray:" + material.dashSize + "," + material.gapSize;
-        }
-        addPath(style, path);
-      }
-    }
-    function renderFace3(v1, v2, v3, element, material) {
-      _this.info.render.vertices += 3;
-      _this.info.render.faces++;
-      const path = "M" + convert(v1.positionScreen.x) + "," + convert(v1.positionScreen.y) + "L" + convert(v2.positionScreen.x) + "," + convert(v2.positionScreen.y) + "L" + convert(v3.positionScreen.x) + "," + convert(v3.positionScreen.y) + "z";
-      let style = "";
-      if (material.isMeshBasicMaterial) {
-        _color.copy(material.color);
-        if (material.vertexColors) {
-          _color.multiply(element.color);
-        }
-      } else if (material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial) {
-        _diffuseColor.copy(material.color);
-        if (material.vertexColors) {
-          _diffuseColor.multiply(element.color);
-        }
-        _color.copy(_ambientLight);
-        _centroid.copy(v1.positionWorld).add(v2.positionWorld).add(v3.positionWorld).divideScalar(3);
-        calculateLight(_lights, _centroid, element.normalModel, _color);
-        _color.multiply(_diffuseColor).add(material.emissive);
-      } else if (material.isMeshNormalMaterial) {
-        _normal.copy(element.normalModel).applyMatrix3(_normalViewMatrix).normalize();
-        _color.setRGB(_normal.x, _normal.y, _normal.z).multiplyScalar(0.5).addScalar(0.5);
-      }
-      if (material.wireframe) {
-        style = "fill:none;stroke:" + _color.getStyle() + ";stroke-opacity:" + material.opacity + ";stroke-width:" + material.wireframeLinewidth + ";stroke-linecap:" + material.wireframeLinecap + ";stroke-linejoin:" + material.wireframeLinejoin;
-      } else {
-        style = "fill:" + _color.getStyle() + ";fill-opacity:" + material.opacity;
-      }
-      addPath(style, path);
-    }
-    function expand(v1, v2, pixels) {
-      let x = v2.x - v1.x, y = v2.y - v1.y;
-      const det = x * x + y * y;
-      if (det === 0)
-        return;
-      const idet = pixels / Math.sqrt(det);
-      x *= idet;
-      y *= idet;
-      v2.x += x;
-      v2.y += y;
-      v1.x -= x;
-      v1.y -= y;
-    }
-    function addPath(style, path) {
-      if (_currentStyle === style) {
-        _currentPath += path;
-      } else {
-        flushPath();
-        _currentStyle = style;
-        _currentPath = path;
-      }
-    }
-    function flushPath() {
-      if (_currentPath) {
-        _svgNode = getPathNode(_pathCount++);
-        _svgNode.setAttribute("d", _currentPath);
-        _svgNode.setAttribute("style", _currentStyle);
-        _svg.appendChild(_svgNode);
-      }
-      _currentPath = "";
-      _currentStyle = "";
-    }
-    function getPathNode(id) {
-      if (_svgPathPool[id] == null) {
-        _svgPathPool[id] = document.createElementNS("http://www.w3.org/2000/svg", "path");
-        if (_quality == 0) {
-          _svgPathPool[id].setAttribute("shape-rendering", "crispEdges");
-        }
-        return _svgPathPool[id];
-      }
-      return _svgPathPool[id];
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/textures/FlakesTexture.js
-class FlakesTexture {
-  constructor(width = 512, height = 512) {
-    const canvas = document.createElement("canvas");
-    canvas.width = width;
-    canvas.height = height;
-    const context = canvas.getContext("2d");
-    context.fillStyle = "rgb(127,127,255)";
-    context.fillRect(0, 0, width, height);
-    for (let i = 0; i < 4e3; i++) {
-      const x = Math.random() * width;
-      const y = Math.random() * height;
-      const r = Math.random() * 3 + 3;
-      let nx = Math.random() * 2 - 1;
-      let ny = Math.random() * 2 - 1;
-      let nz = 1.5;
-      const l = Math.sqrt(nx * nx + ny * ny + nz * nz);
-      nx /= l;
-      ny /= l;
-      nz /= l;
-      context.fillStyle = "rgb(" + (nx * 127 + 127) + "," + (ny * 127 + 127) + "," + nz * 255 + ")";
-      context.beginPath();
-      context.arc(x, y, r, 0, Math.PI * 2);
-      context.fill();
-    }
-    return canvas;
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/modifiers/CurveModifier.js
-var CurveModifier = __webpack_require__(53615);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/utils/BufferGeometryUtils.js + 1 modules
-var BufferGeometryUtils = __webpack_require__(84975);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/modifiers/SimplifyModifier.js
-var SimplifyModifier_defProp = Object.defineProperty;
-var SimplifyModifier_defNormalProp = (obj, key, value) => key in obj ? SimplifyModifier_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var SimplifyModifier_publicField = (obj, key, value) => {
-  SimplifyModifier_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-const cb = /* @__PURE__ */ new three_module.Vector3();
-const ab = /* @__PURE__ */ new three_module.Vector3();
-function pushIfUnique(array, object) {
-  if (array.indexOf(object) === -1)
-    array.push(object);
-}
-function removeFromArray(array, object) {
-  const k = array.indexOf(object);
-  if (k > -1)
-    array.splice(k, 1);
-}
-class Vertex {
-  constructor(v, id) {
-    SimplifyModifier_publicField(this, "position");
-    SimplifyModifier_publicField(this, "id");
-    SimplifyModifier_publicField(this, "faces");
-    SimplifyModifier_publicField(this, "neighbors");
-    SimplifyModifier_publicField(this, "collapseCost");
-    SimplifyModifier_publicField(this, "collapseNeighbor");
-    SimplifyModifier_publicField(this, "minCost", 0);
-    SimplifyModifier_publicField(this, "totalCost", 0);
-    SimplifyModifier_publicField(this, "costCount", 0);
-    this.position = v;
-    this.id = id;
-    this.faces = [];
-    this.neighbors = [];
-    this.collapseCost = 0;
-    this.collapseNeighbor = null;
-  }
-  addUniqueNeighbor(vertex) {
-    pushIfUnique(this.neighbors, vertex);
-  }
-  removeIfNonNeighbor(n) {
-    const neighbors = this.neighbors;
-    const faces = this.faces;
-    const offset = neighbors.indexOf(n);
-    if (offset === -1)
-      return;
-    for (let i = 0; i < faces.length; i++) {
-      if (faces[i].hasVertex(n))
-        return;
-    }
-    neighbors.splice(offset, 1);
-  }
-}
-class Triangle {
-  constructor(v1, v2, v3, a, b, c) {
-    SimplifyModifier_publicField(this, "a");
-    SimplifyModifier_publicField(this, "b");
-    SimplifyModifier_publicField(this, "c");
-    SimplifyModifier_publicField(this, "v1");
-    SimplifyModifier_publicField(this, "v2");
-    SimplifyModifier_publicField(this, "v3");
-    SimplifyModifier_publicField(this, "normal", new three_module.Vector3());
-    this.a = a;
-    this.b = b;
-    this.c = c;
-    this.v1 = v1;
-    this.v2 = v2;
-    this.v3 = v3;
-    this.computeNormal();
-    v1.faces.push(this);
-    v1.addUniqueNeighbor(v2);
-    v1.addUniqueNeighbor(v3);
-    v2.faces.push(this);
-    v2.addUniqueNeighbor(v1);
-    v2.addUniqueNeighbor(v3);
-    v3.faces.push(this);
-    v3.addUniqueNeighbor(v1);
-    v3.addUniqueNeighbor(v2);
-  }
-  computeNormal() {
-    const vA = this.v1.position;
-    const vB = this.v2.position;
-    const vC = this.v3.position;
-    cb.subVectors(vC, vB);
-    ab.subVectors(vA, vB);
-    cb.cross(ab).normalize();
-    this.normal.copy(cb);
-  }
-  hasVertex(v) {
-    return v === this.v1 || v === this.v2 || v === this.v3;
-  }
-  replaceVertex(oldv, newv) {
-    if (oldv === this.v1)
-      this.v1 = newv;
-    else if (oldv === this.v2)
-      this.v2 = newv;
-    else if (oldv === this.v3)
-      this.v3 = newv;
-    removeFromArray(oldv.faces, this);
-    newv.faces.push(this);
-    oldv.removeIfNonNeighbor(this.v1);
-    this.v1.removeIfNonNeighbor(oldv);
-    oldv.removeIfNonNeighbor(this.v2);
-    this.v2.removeIfNonNeighbor(oldv);
-    oldv.removeIfNonNeighbor(this.v3);
-    this.v3.removeIfNonNeighbor(oldv);
-    this.v1.addUniqueNeighbor(this.v2);
-    this.v1.addUniqueNeighbor(this.v3);
-    this.v2.addUniqueNeighbor(this.v1);
-    this.v2.addUniqueNeighbor(this.v3);
-    this.v3.addUniqueNeighbor(this.v1);
-    this.v3.addUniqueNeighbor(this.v2);
-    this.computeNormal();
-  }
-}
-class SimplifyModifier {
-  constructor() {
-    SimplifyModifier_publicField(this, "computeEdgeCollapseCost", (u, v) => {
-      const edgelength = v.position.distanceTo(u.position);
-      let curvature = 0;
-      const sideFaces = [];
-      let i, il = u.faces.length, face, sideFace;
-      for (i = 0; i < il; i++) {
-        face = u.faces[i];
-        if (face.hasVertex(v)) {
-          sideFaces.push(face);
-        }
-      }
-      for (i = 0; i < il; i++) {
-        let minCurvature = 1;
-        face = u.faces[i];
-        for (let j = 0; j < sideFaces.length; j++) {
-          sideFace = sideFaces[j];
-          const dotProd = face.normal.dot(sideFace.normal);
-          minCurvature = Math.min(minCurvature, (1.001 - dotProd) / 2);
-        }
-        curvature = Math.max(curvature, minCurvature);
-      }
-      const borders = 0;
-      if (sideFaces.length < 2) {
-        curvature = 1;
-      }
-      const amt = edgelength * curvature + borders;
-      return amt;
-    });
-    SimplifyModifier_publicField(this, "computeEdgeCostAtVertex", (v) => {
-      if (v.neighbors.length === 0) {
-        v.collapseNeighbor = null;
-        v.collapseCost = -0.01;
-        return;
-      }
-      v.collapseCost = 1e5;
-      v.collapseNeighbor = null;
-      for (let i = 0; i < v.neighbors.length; i++) {
-        const collapseCost = this.computeEdgeCollapseCost(v, v.neighbors[i]);
-        if (!v.collapseNeighbor) {
-          v.collapseNeighbor = v.neighbors[i];
-          v.collapseCost = collapseCost;
-          v.minCost = collapseCost;
-          v.totalCost = 0;
-          v.costCount = 0;
-        }
-        v.costCount++;
-        v.totalCost += collapseCost;
-        if (collapseCost < v.minCost) {
-          v.collapseNeighbor = v.neighbors[i];
-          v.minCost = collapseCost;
-        }
-      }
-      v.collapseCost = v.totalCost / v.costCount;
-    });
-    SimplifyModifier_publicField(this, "removeFace", (f, faces) => {
-      removeFromArray(faces, f);
-      if (f.v1)
-        removeFromArray(f.v1.faces, f);
-      if (f.v2)
-        removeFromArray(f.v2.faces, f);
-      if (f.v3)
-        removeFromArray(f.v3.faces, f);
-      const vs = [f.v1, f.v2, f.v3];
-      let v1, v2;
-      for (let i = 0; i < 3; i++) {
-        v1 = vs[i];
-        v2 = vs[(i + 1) % 3];
-        if (!v1 || !v2)
-          continue;
-        v1.removeIfNonNeighbor(v2);
-        v2.removeIfNonNeighbor(v1);
-      }
-    });
-    SimplifyModifier_publicField(this, "collapse", (vertices, faces, u, v) => {
-      if (!v) {
-        this.removeVertex(u, vertices);
-        return;
-      }
-      let i;
-      const tmpVertices = [];
-      for (i = 0; i < u.neighbors.length; i++) {
-        tmpVertices.push(u.neighbors[i]);
-      }
-      for (i = u.faces.length - 1; i >= 0; i--) {
-        if (u.faces[i].hasVertex(v)) {
-          this.removeFace(u.faces[i], faces);
-        }
-      }
-      for (i = u.faces.length - 1; i >= 0; i--) {
-        u.faces[i].replaceVertex(u, v);
-      }
-      this.removeVertex(u, vertices);
-      for (i = 0; i < tmpVertices.length; i++) {
-        this.computeEdgeCostAtVertex(tmpVertices[i]);
-      }
-    });
-    SimplifyModifier_publicField(this, "minimumCostEdge", (vertices) => {
-      let least = vertices[0];
-      for (let i = 0; i < vertices.length; i++) {
-        if (vertices[i].collapseCost < least.collapseCost) {
-          least = vertices[i];
-        }
-      }
-      return least;
-    });
-    SimplifyModifier_publicField(this, "modify", (geometry, count) => {
-      geometry = geometry.clone();
-      const attributes = geometry.attributes;
-      for (let name in attributes) {
-        if (name !== "position")
-          geometry.deleteAttribute(name);
-      }
-      geometry = (0,BufferGeometryUtils.mergeVertices)(geometry);
-      const vertices = [];
-      const faces = [];
-      const positionAttribute = geometry.getAttribute("position");
-      for (let i = 0; i < positionAttribute.count; i++) {
-        const v = new three_module.Vector3().fromBufferAttribute(positionAttribute, i);
-        const vertex = new Vertex(v, i);
-        vertices.push(vertex);
-      }
-      const geomIndex = geometry.getIndex();
-      if (geomIndex !== null) {
-        for (let i = 0; i < geomIndex.count; i += 3) {
-          const a = geomIndex.getX(i);
-          const b = geomIndex.getX(i + 1);
-          const c = geomIndex.getX(i + 2);
-          const triangle = new Triangle(vertices[a], vertices[b], vertices[c], a, b, c);
-          faces.push(triangle);
-        }
-      } else {
-        for (let i = 0; i < positionAttribute.count; i += 3) {
-          const a = i;
-          const b = i + 1;
-          const c = i + 2;
-          const triangle = new Triangle(vertices[a], vertices[b], vertices[c], a, b, c);
-          faces.push(triangle);
-        }
-      }
-      for (let i = 0, il = vertices.length; i < il; i++) {
-        this.computeEdgeCostAtVertex(vertices[i]);
-      }
-      let nextVertex;
-      let z = count;
-      while (z--) {
-        nextVertex = this.minimumCostEdge(vertices);
-        if (!nextVertex) {
-          console.log("THREE.SimplifyModifier: No next vertex");
-          break;
-        } else {
-          this.collapse(vertices, faces, nextVertex, nextVertex.collapseNeighbor);
-        }
-      }
-      const simplifiedGeometry = new three_module.BufferGeometry();
-      const position = [];
-      let index = [];
-      for (let i = 0; i < vertices.length; i++) {
-        const vertex = vertices[i].position;
-        position.push(vertex.x, vertex.y, vertex.z);
-      }
-      for (let i = 0; i < faces.length; i++) {
-        const face = faces[i];
-        const a = vertices.indexOf(face.v1);
-        const b = vertices.indexOf(face.v2);
-        const c = vertices.indexOf(face.v3);
-        index.push(a, b, c);
-      }
-      simplifiedGeometry.setAttribute("position", new three_module.Float32BufferAttribute(position, 3));
-      simplifiedGeometry.setIndex(index);
-      return simplifiedGeometry;
-    });
-  }
-  removeVertex(v, vertices) {
-    console.assert(v.faces.length === 0);
-    while (v.neighbors.length) {
-      const n = v.neighbors.pop();
-      removeFromArray(n.neighbors, v);
-    }
-    removeFromArray(vertices, v);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/modifiers/EdgeSplitModifier.js
-var EdgeSplitModifier_defProp = Object.defineProperty;
-var EdgeSplitModifier_defNormalProp = (obj, key, value) => key in obj ? EdgeSplitModifier_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var EdgeSplitModifier_publicField = (obj, key, value) => {
-  EdgeSplitModifier_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-class EdgeSplitModifier {
-  constructor() {
-    EdgeSplitModifier_publicField(this, "A", new three_module.Vector3());
-    EdgeSplitModifier_publicField(this, "B", new three_module.Vector3());
-    EdgeSplitModifier_publicField(this, "C", new three_module.Vector3());
-    EdgeSplitModifier_publicField(this, "positions", []);
-    EdgeSplitModifier_publicField(this, "normals", new Float32Array());
-    EdgeSplitModifier_publicField(this, "indexes", []);
-    EdgeSplitModifier_publicField(this, "pointToIndexMap", []);
-    EdgeSplitModifier_publicField(this, "splitIndexes", []);
-    EdgeSplitModifier_publicField(this, "oldNormals", []);
-    EdgeSplitModifier_publicField(this, "computeNormals", () => {
-      this.normals = new Float32Array(this.indexes.length * 3);
-      for (let i = 0; i < this.indexes.length; i += 3) {
-        let index = this.indexes[i];
-        this.A.set(this.positions[3 * index], this.positions[3 * index + 1], this.positions[3 * index + 2]);
-        index = this.indexes[i + 1];
-        this.B.set(this.positions[3 * index], this.positions[3 * index + 1], this.positions[3 * index + 2]);
-        index = this.indexes[i + 2];
-        this.C.set(this.positions[3 * index], this.positions[3 * index + 1], this.positions[3 * index + 2]);
-        this.C.sub(this.B);
-        this.A.sub(this.B);
-        const normal = this.C.cross(this.A).normalize();
-        for (let j = 0; j < 3; j++) {
-          this.normals[3 * (i + j)] = normal.x;
-          this.normals[3 * (i + j) + 1] = normal.y;
-          this.normals[3 * (i + j) + 2] = normal.z;
-        }
-      }
-    });
-    EdgeSplitModifier_publicField(this, "mapPositionsToIndexes", () => {
-      this.pointToIndexMap = Array(this.positions.length / 3);
-      for (let i = 0; i < this.indexes.length; i++) {
-        const index = this.indexes[i];
-        if (this.pointToIndexMap[index] == null) {
-          this.pointToIndexMap[index] = [];
-        }
-        this.pointToIndexMap[index].push(i);
-      }
-    });
-    EdgeSplitModifier_publicField(this, "edgeSplitToGroups", (indexes, cutOff, firstIndex) => {
-      this.A.set(
-        this.normals[3 * firstIndex],
-        this.normals[3 * firstIndex + 1],
-        this.normals[3 * firstIndex + 2]
-      ).normalize();
-      const result = {
-        splitGroup: [],
-        currentGroup: [firstIndex]
-      };
-      for (let j of indexes) {
-        if (j !== firstIndex) {
-          this.B.set(this.normals[3 * j], this.normals[3 * j + 1], this.normals[3 * j + 2]).normalize();
-          if (this.B.dot(this.A) < cutOff) {
-            result.splitGroup.push(j);
-          } else {
-            result.currentGroup.push(j);
-          }
-        }
-      }
-      return result;
-    });
-    EdgeSplitModifier_publicField(this, "edgeSplit", (indexes, cutOff, original = null) => {
-      if (indexes.length === 0)
-        return;
-      const groupResults = [];
-      for (let index of indexes) {
-        groupResults.push(this.edgeSplitToGroups(indexes, cutOff, index));
-      }
-      let result = groupResults[0];
-      for (let groupResult of groupResults) {
-        if (groupResult.currentGroup.length > result.currentGroup.length) {
-          result = groupResult;
-        }
-      }
-      if (original != null) {
-        this.splitIndexes.push({
-          original,
-          indexes: result.currentGroup
-        });
-      }
-      if (result.splitGroup.length) {
-        this.edgeSplit(result.splitGroup, cutOff, original || result.currentGroup[0]);
-      }
-    });
-    EdgeSplitModifier_publicField(this, "modify", (geometry, cutOffAngle, tryKeepNormals = true) => {
-      let hadNormals = false;
-      if (geometry.attributes.normal) {
-        hadNormals = true;
-        geometry = geometry.clone();
-        if (tryKeepNormals === true && geometry.index !== null) {
-          this.oldNormals = geometry.attributes.normal.array;
-        }
-        geometry.deleteAttribute("normal");
-      }
-      if (geometry.index == null) {
-        if (BufferGeometryUtils === void 0) {
-          throw "THREE.EdgeSplitModifier relies on BufferGeometryUtils";
-        }
-        geometry = (0,BufferGeometryUtils.mergeVertices)(geometry);
-      }
-      this.indexes = geometry.index.array;
-      this.positions = geometry.getAttribute("position").array;
-      this.computeNormals();
-      this.mapPositionsToIndexes();
-      this.splitIndexes = [];
-      for (let vertexIndexes of this.pointToIndexMap) {
-        this.edgeSplit(vertexIndexes, Math.cos(cutOffAngle) - 1e-3);
-      }
-      const newAttributes = {};
-      for (let name of Object.keys(geometry.attributes)) {
-        const oldAttribute = geometry.attributes[name];
-        const newArray = new oldAttribute.array.constructor(
-          (this.indexes.length + this.splitIndexes.length) * oldAttribute.itemSize
-        );
-        newArray.set(oldAttribute.array);
-        newAttributes[name] = new three_module.BufferAttribute(newArray, oldAttribute.itemSize, oldAttribute.normalized);
-      }
-      const newIndexes = new Uint32Array(this.indexes.length);
-      newIndexes.set(this.indexes);
-      for (let i = 0; i < this.splitIndexes.length; i++) {
-        const split = this.splitIndexes[i];
-        const index = this.indexes[split.original];
-        for (let attribute of Object.values(newAttributes)) {
-          for (let j = 0; j < attribute.itemSize; j++) {
-            attribute.array[(this.indexes.length + i) * attribute.itemSize + j] = attribute.array[index * attribute.itemSize + j];
-          }
-        }
-        for (let j of split.indexes) {
-          newIndexes[j] = this.indexes.length + i;
-        }
-      }
-      geometry = new three_module.BufferGeometry();
-      geometry.setIndex(new three_module.BufferAttribute(newIndexes, 1));
-      for (let name of Object.keys(newAttributes)) {
-        geometry.setAttribute(name, newAttributes[name]);
-      }
-      if (hadNormals) {
-        geometry.computeVertexNormals();
-        if (this.oldNormals !== null) {
-          const changedNormals = new Array(this.oldNormals.length / 3).fill(false);
-          for (let splitData of this.splitIndexes)
-            changedNormals[splitData.original] = true;
-          for (let i = 0; i < changedNormals.length; i++) {
-            if (changedNormals[i] === false) {
-              for (let j = 0; j < 3; j++) {
-                geometry.attributes.normal.array[3 * i + j] = this.oldNormals[3 * i + j];
-              }
-            }
-          }
-        }
-      }
-      return geometry;
-    });
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/modifiers/TessellateModifier.js
-var TessellateModifier_defProp = Object.defineProperty;
-var TessellateModifier_defNormalProp = (obj, key, value) => key in obj ? TessellateModifier_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var TessellateModifier_publicField = (obj, key, value) => {
-  TessellateModifier_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-class TessellateModifier {
-  constructor(maxEdgeLength = 0.1, maxIterations = 6) {
-    TessellateModifier_publicField(this, "maxEdgeLength");
-    TessellateModifier_publicField(this, "maxIterations");
-    TessellateModifier_publicField(this, "modify", (geometry) => {
-      if (geometry.index !== null) {
-        geometry = geometry.toNonIndexed();
-      }
-      const maxIterations = this.maxIterations;
-      const maxEdgeLengthSquared = this.maxEdgeLength * this.maxEdgeLength;
-      const va = new three_module.Vector3();
-      const vb = new three_module.Vector3();
-      const vc = new three_module.Vector3();
-      const vm = new three_module.Vector3();
-      const vs = [va, vb, vc, vm];
-      const na = new three_module.Vector3();
-      const nb = new three_module.Vector3();
-      const nc = new three_module.Vector3();
-      const nm = new three_module.Vector3();
-      const ns = [na, nb, nc, nm];
-      const ca = new three_module.Color();
-      const cb = new three_module.Color();
-      const cc = new three_module.Color();
-      const cm = new three_module.Color();
-      const cs = [ca, cb, cc, cm];
-      const ua = new three_module.Vector2();
-      const ub = new three_module.Vector2();
-      const uc = new three_module.Vector2();
-      const um = new three_module.Vector2();
-      const us = [ua, ub, uc, um];
-      const u2a = new three_module.Vector2();
-      const u2b = new three_module.Vector2();
-      const u2c = new three_module.Vector2();
-      const u2m = new three_module.Vector2();
-      const u2s = [u2a, u2b, u2c, u2m];
-      const attributes = geometry.attributes;
-      const hasNormals = attributes.normal !== void 0;
-      const hasColors = attributes.color !== void 0;
-      const hasUVs = attributes.uv !== void 0;
-      const hasUV2s = attributes.uv2 !== void 0;
-      let positions = attributes.position.array;
-      let normals = hasNormals ? attributes.normal.array : null;
-      let colors = hasColors ? attributes.color.array : null;
-      let uvs = hasUVs ? attributes.uv.array : null;
-      let uv2s = hasUV2s ? attributes.uv2.array : null;
-      let positions2 = positions;
-      let normals2 = normals;
-      let colors2 = colors;
-      let uvs2 = uvs;
-      let uv2s2 = uv2s;
-      let iteration = 0;
-      let tessellating = true;
-      function addTriangle(a, b, c) {
-        const v1 = vs[a];
-        const v2 = vs[b];
-        const v3 = vs[c];
-        positions2.push(v1.x, v1.y, v1.z);
-        positions2.push(v2.x, v2.y, v2.z);
-        positions2.push(v3.x, v3.y, v3.z);
-        if (hasNormals) {
-          const n1 = ns[a];
-          const n2 = ns[b];
-          const n3 = ns[c];
-          normals2.push(n1.x, n1.y, n1.z);
-          normals2.push(n2.x, n2.y, n2.z);
-          normals2.push(n3.x, n3.y, n3.z);
-        }
-        if (hasColors) {
-          const c1 = cs[a];
-          const c2 = cs[b];
-          const c3 = cs[c];
-          colors2.push(c1.r, c1.g, c1.b);
-          colors2.push(c2.r, c2.g, c2.b);
-          colors2.push(c3.r, c3.g, c3.b);
-        }
-        if (hasUVs) {
-          const u1 = us[a];
-          const u2 = us[b];
-          const u3 = us[c];
-          uvs2.push(u1.x, u1.y);
-          uvs2.push(u2.x, u2.y);
-          uvs2.push(u3.x, u3.y);
-        }
-        if (hasUV2s) {
-          const u21 = u2s[a];
-          const u22 = u2s[b];
-          const u23 = u2s[c];
-          uv2s2.push(u21.x, u21.y);
-          uv2s2.push(u22.x, u22.y);
-          uv2s2.push(u23.x, u23.y);
-        }
-      }
-      while (tessellating && iteration < maxIterations) {
-        iteration++;
-        tessellating = false;
-        positions = positions2;
-        positions2 = [];
-        if (hasNormals) {
-          normals = normals2;
-          normals2 = [];
-        }
-        if (hasColors) {
-          colors = colors2;
-          colors2 = [];
-        }
-        if (hasUVs) {
-          uvs = uvs2;
-          uvs2 = [];
-        }
-        if (hasUV2s) {
-          uv2s = uv2s2;
-          uv2s2 = [];
-        }
-        for (let i = 0, i2 = 0, il = positions.length; i < il; i += 9, i2 += 6) {
-          va.fromArray(positions, i + 0);
-          vb.fromArray(positions, i + 3);
-          vc.fromArray(positions, i + 6);
-          if (hasNormals && normals) {
-            na.fromArray(normals, i + 0);
-            nb.fromArray(normals, i + 3);
-            nc.fromArray(normals, i + 6);
-          }
-          if (hasColors && colors) {
-            ca.fromArray(colors, i + 0);
-            cb.fromArray(colors, i + 3);
-            cc.fromArray(colors, i + 6);
-          }
-          if (hasUVs && uvs) {
-            ua.fromArray(uvs, i2 + 0);
-            ub.fromArray(uvs, i2 + 2);
-            uc.fromArray(uvs, i2 + 4);
-          }
-          if (hasUV2s && uv2s) {
-            u2a.fromArray(uv2s, i2 + 0);
-            u2b.fromArray(uv2s, i2 + 2);
-            u2c.fromArray(uv2s, i2 + 4);
-          }
-          const dab = va.distanceToSquared(vb);
-          const dbc = vb.distanceToSquared(vc);
-          const dac = va.distanceToSquared(vc);
-          if (dab > maxEdgeLengthSquared || dbc > maxEdgeLengthSquared || dac > maxEdgeLengthSquared) {
-            tessellating = true;
-            if (dab >= dbc && dab >= dac) {
-              vm.lerpVectors(va, vb, 0.5);
-              if (hasNormals)
-                nm.lerpVectors(na, nb, 0.5);
-              if (hasColors)
-                cm.lerpColors(ca, cb, 0.5);
-              if (hasUVs)
-                um.lerpVectors(ua, ub, 0.5);
-              if (hasUV2s)
-                u2m.lerpVectors(u2a, u2b, 0.5);
-              addTriangle(0, 3, 2);
-              addTriangle(3, 1, 2);
-            } else if (dbc >= dab && dbc >= dac) {
-              vm.lerpVectors(vb, vc, 0.5);
-              if (hasNormals)
-                nm.lerpVectors(nb, nc, 0.5);
-              if (hasColors)
-                cm.lerpColors(cb, cc, 0.5);
-              if (hasUVs)
-                um.lerpVectors(ub, uc, 0.5);
-              if (hasUV2s)
-                u2m.lerpVectors(u2b, u2c, 0.5);
-              addTriangle(0, 1, 3);
-              addTriangle(3, 2, 0);
-            } else {
-              vm.lerpVectors(va, vc, 0.5);
-              if (hasNormals)
-                nm.lerpVectors(na, nc, 0.5);
-              if (hasColors)
-                cm.lerpColors(ca, cc, 0.5);
-              if (hasUVs)
-                um.lerpVectors(ua, uc, 0.5);
-              if (hasUV2s)
-                u2m.lerpVectors(u2a, u2c, 0.5);
-              addTriangle(0, 1, 3);
-              addTriangle(3, 1, 2);
-            }
-          } else {
-            addTriangle(0, 1, 2);
-          }
-        }
-      }
-      const geometry2 = new three_module.BufferGeometry();
-      geometry2.setAttribute("position", new three_module.Float32BufferAttribute(positions2, 3));
-      if (hasNormals) {
-        geometry2.setAttribute("normal", new three_module.Float32BufferAttribute(normals2, 3));
-      }
-      if (hasColors) {
-        geometry2.setAttribute("color", new three_module.Float32BufferAttribute(colors2, 3));
-      }
-      if (hasUVs) {
-        geometry2.setAttribute("uv", new three_module.Float32BufferAttribute(uvs2, 2));
-      }
-      if (hasUV2s) {
-        geometry2.setAttribute("uv2", new three_module.Float32BufferAttribute(uv2s2, 2));
-      }
-      return geometry2;
-    });
-    this.maxEdgeLength = maxEdgeLength;
-    this.maxIterations = maxIterations;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/exporters/GLTFExporter.js
-
-let _renderer;
-let fullscreenQuadGeometry;
-let fullscreenQuadMaterial;
-let fullscreenQuad;
-function decompress(texture, maxTextureSize = Infinity, renderer = null) {
-  if (!fullscreenQuadGeometry)
-    fullscreenQuadGeometry = new three_module.PlaneGeometry(2, 2, 1, 1);
-  if (!fullscreenQuadMaterial)
-    fullscreenQuadMaterial = new three_module.ShaderMaterial({
-      uniforms: { blitTexture: new three_module.Uniform(texture) },
-      vertexShader: (
-        /* glsl */
-        `
-        varying vec2 vUv;
-        void main(){
-            vUv = uv;
-            gl_Position = vec4(position.xy * 1.0,0.,.999999);
-        }
-      `
-      ),
-      fragmentShader: (
-        /* glsl */
-        `
-          uniform sampler2D blitTexture; 
-          varying vec2 vUv;
-
-          void main(){ 
-              gl_FragColor = vec4(vUv.xy, 0, 1);
-              
-              #ifdef IS_SRGB
-              gl_FragColor = LinearTosRGB( texture2D( blitTexture, vUv) );
-              #else
-              gl_FragColor = texture2D( blitTexture, vUv);
-              #endif
-          }
-      `
-      )
-    });
-  fullscreenQuadMaterial.uniforms.blitTexture.value = texture;
-  fullscreenQuadMaterial.defines.IS_SRGB = "colorSpace" in texture ? texture.colorSpace === "srgb" : texture.encoding === 3001;
-  fullscreenQuadMaterial.needsUpdate = true;
-  if (!fullscreenQuad) {
-    fullscreenQuad = new three_module.Mesh(fullscreenQuadGeometry, fullscreenQuadMaterial);
-    fullscreenQuad.frustrumCulled = false;
-  }
-  const _camera = new three_module.PerspectiveCamera();
-  const _scene = new three_module.Scene();
-  _scene.add(fullscreenQuad);
-  if (!renderer) {
-    renderer = _renderer = new three_module.WebGLRenderer({ antialias: false });
-  }
-  renderer.setSize(Math.min(texture.image.width, maxTextureSize), Math.min(texture.image.height, maxTextureSize));
-  renderer.clear();
-  renderer.render(_scene, _camera);
-  const readableTexture = new three_module.Texture(renderer.domElement);
-  readableTexture.minFilter = texture.minFilter;
-  readableTexture.magFilter = texture.magFilter;
-  readableTexture.wrapS = texture.wrapS;
-  readableTexture.wrapT = texture.wrapT;
-  readableTexture.name = texture.name;
-  if (_renderer) {
-    _renderer.dispose();
-    _renderer = null;
-  }
-  return readableTexture;
-}
-const KHR_mesh_quantization_ExtraAttrTypes = {
-  POSITION: [
-    "byte",
-    "byte normalized",
-    "unsigned byte",
-    "unsigned byte normalized",
-    "short",
-    "short normalized",
-    "unsigned short",
-    "unsigned short normalized"
-  ],
-  NORMAL: ["byte normalized", "short normalized"],
-  TANGENT: ["byte normalized", "short normalized"],
-  TEXCOORD: ["byte", "byte normalized", "unsigned byte", "short", "short normalized", "unsigned short"]
-};
-class GLTFExporter {
-  constructor() {
-    this.pluginCallbacks = [];
-    this.register(function(writer) {
-      return new GLTFLightExtension(writer);
-    });
-    this.register(function(writer) {
-      return new GLTFMaterialsUnlitExtension(writer);
-    });
-    this.register(function(writer) {
-      return new GLTFMaterialsTransmissionExtension(writer);
-    });
-    this.register(function(writer) {
-      return new GLTFMaterialsVolumeExtension(writer);
-    });
-    this.register(function(writer) {
-      return new GLTFMaterialsIorExtension(writer);
-    });
-    this.register(function(writer) {
-      return new GLTFMaterialsSpecularExtension(writer);
-    });
-    this.register(function(writer) {
-      return new GLTFMaterialsClearcoatExtension(writer);
-    });
-    this.register(function(writer) {
-      return new GLTFMaterialsIridescenceExtension(writer);
-    });
-    this.register(function(writer) {
-      return new GLTFMaterialsSheenExtension(writer);
-    });
-    this.register(function(writer) {
-      return new GLTFMaterialsAnisotropyExtension(writer);
-    });
-    this.register(function(writer) {
-      return new GLTFMaterialsEmissiveStrengthExtension(writer);
-    });
-  }
-  register(callback) {
-    if (this.pluginCallbacks.indexOf(callback) === -1) {
-      this.pluginCallbacks.push(callback);
-    }
-    return this;
-  }
-  unregister(callback) {
-    if (this.pluginCallbacks.indexOf(callback) !== -1) {
-      this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1);
-    }
-    return this;
-  }
-  /**
-   * Parse scenes and generate GLTF output
-   * @param  {Scene or [THREE.Scenes]} input   Scene or Array of THREE.Scenes
-   * @param  {Function} onDone  Callback on completed
-   * @param  {Function} onError  Callback on errors
-   * @param  {Object} options options
-   */
-  parse(input, onDone, onError, options) {
-    const writer = new GLTFWriter();
-    const plugins = [];
-    for (let i = 0, il = this.pluginCallbacks.length; i < il; i++) {
-      plugins.push(this.pluginCallbacks[i](writer));
-    }
-    writer.setPlugins(plugins);
-    writer.write(input, onDone, options).catch(onError);
-  }
-  parseAsync(input, options) {
-    const scope = this;
-    return new Promise(function(resolve, reject) {
-      scope.parse(input, resolve, reject, options);
-    });
-  }
-}
-const WEBGL_CONSTANTS = {
-  POINTS: 0,
-  LINES: 1,
-  LINE_LOOP: 2,
-  LINE_STRIP: 3,
-  TRIANGLES: 4,
-  TRIANGLE_STRIP: 5,
-  TRIANGLE_FAN: 6,
-  BYTE: 5120,
-  UNSIGNED_BYTE: 5121,
-  SHORT: 5122,
-  UNSIGNED_SHORT: 5123,
-  INT: 5124,
-  UNSIGNED_INT: 5125,
-  FLOAT: 5126,
-  ARRAY_BUFFER: 34962,
-  ELEMENT_ARRAY_BUFFER: 34963,
-  NEAREST: 9728,
-  LINEAR: 9729,
-  NEAREST_MIPMAP_NEAREST: 9984,
-  LINEAR_MIPMAP_NEAREST: 9985,
-  NEAREST_MIPMAP_LINEAR: 9986,
-  LINEAR_MIPMAP_LINEAR: 9987,
-  CLAMP_TO_EDGE: 33071,
-  MIRRORED_REPEAT: 33648,
-  REPEAT: 10497
-};
-const KHR_MESH_QUANTIZATION = "KHR_mesh_quantization";
-const THREE_TO_WEBGL = {};
-THREE_TO_WEBGL[three_module.NearestFilter] = WEBGL_CONSTANTS.NEAREST;
-THREE_TO_WEBGL[three_module.NearestMipmapNearestFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;
-THREE_TO_WEBGL[three_module.NearestMipmapLinearFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;
-THREE_TO_WEBGL[three_module.LinearFilter] = WEBGL_CONSTANTS.LINEAR;
-THREE_TO_WEBGL[three_module.LinearMipmapNearestFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;
-THREE_TO_WEBGL[three_module.LinearMipmapLinearFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;
-THREE_TO_WEBGL[three_module.ClampToEdgeWrapping] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;
-THREE_TO_WEBGL[three_module.RepeatWrapping] = WEBGL_CONSTANTS.REPEAT;
-THREE_TO_WEBGL[three_module.MirroredRepeatWrapping] = WEBGL_CONSTANTS.MIRRORED_REPEAT;
-const PATH_PROPERTIES = {
-  scale: "scale",
-  position: "translation",
-  quaternion: "rotation",
-  morphTargetInfluences: "weights"
-};
-const DEFAULT_SPECULAR_COLOR = new three_module.Color();
-const GLB_HEADER_BYTES = 12;
-const GLB_HEADER_MAGIC = 1179937895;
-const GLB_VERSION = 2;
-const GLB_CHUNK_PREFIX_BYTES = 8;
-const GLB_CHUNK_TYPE_JSON = 1313821514;
-const GLB_CHUNK_TYPE_BIN = 5130562;
-function equalArray(array1, array2) {
-  return array1.length === array2.length && array1.every(function(element, index) {
-    return element === array2[index];
-  });
-}
-function stringToArrayBuffer(text) {
-  return new TextEncoder().encode(text).buffer;
-}
-function isIdentityMatrix(matrix) {
-  return equalArray(matrix.elements, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);
-}
-function getMinMax(attribute, start, count) {
-  const output = {
-    min: new Array(attribute.itemSize).fill(Number.POSITIVE_INFINITY),
-    max: new Array(attribute.itemSize).fill(Number.NEGATIVE_INFINITY)
-  };
-  for (let i = start; i < start + count; i++) {
-    for (let a = 0; a < attribute.itemSize; a++) {
-      let value;
-      if (attribute.itemSize > 4) {
-        value = attribute.array[i * attribute.itemSize + a];
-      } else {
-        if (a === 0)
-          value = attribute.getX(i);
-        else if (a === 1)
-          value = attribute.getY(i);
-        else if (a === 2)
-          value = attribute.getZ(i);
-        else if (a === 3)
-          value = attribute.getW(i);
-        if (attribute.normalized === true) {
-          value = three_module.MathUtils.normalize(value, attribute.array);
-        }
-      }
-      output.min[a] = Math.min(output.min[a], value);
-      output.max[a] = Math.max(output.max[a], value);
-    }
-  }
-  return output;
-}
-function getPaddedBufferSize(bufferSize) {
-  return Math.ceil(bufferSize / 4) * 4;
-}
-function getPaddedArrayBuffer(arrayBuffer, paddingByte = 0) {
-  const paddedLength = getPaddedBufferSize(arrayBuffer.byteLength);
-  if (paddedLength !== arrayBuffer.byteLength) {
-    const array = new Uint8Array(paddedLength);
-    array.set(new Uint8Array(arrayBuffer));
-    if (paddingByte !== 0) {
-      for (let i = arrayBuffer.byteLength; i < paddedLength; i++) {
-        array[i] = paddingByte;
-      }
-    }
-    return array.buffer;
-  }
-  return arrayBuffer;
-}
-function getCanvas() {
-  if (typeof document === "undefined" && typeof OffscreenCanvas !== "undefined") {
-    return new OffscreenCanvas(1, 1);
-  }
-  return document.createElement("canvas");
-}
-function getToBlobPromise(canvas, mimeType) {
-  if (canvas.toBlob !== void 0) {
-    return new Promise((resolve) => canvas.toBlob(resolve, mimeType));
-  }
-  let quality;
-  if (mimeType === "image/jpeg") {
-    quality = 0.92;
-  } else if (mimeType === "image/webp") {
-    quality = 0.8;
-  }
-  return canvas.convertToBlob({
-    type: mimeType,
-    quality
-  });
-}
-class GLTFWriter {
-  constructor() {
-    this.plugins = [];
-    this.options = {};
-    this.pending = [];
-    this.buffers = [];
-    this.byteOffset = 0;
-    this.buffers = [];
-    this.nodeMap = /* @__PURE__ */ new Map();
-    this.skins = [];
-    this.extensionsUsed = {};
-    this.extensionsRequired = {};
-    this.uids = /* @__PURE__ */ new Map();
-    this.uid = 0;
-    this.json = {
-      asset: {
-        version: "2.0",
-        generator: "THREE.GLTFExporter"
-      }
-    };
-    this.cache = {
-      meshes: /* @__PURE__ */ new Map(),
-      attributes: /* @__PURE__ */ new Map(),
-      attributesNormalized: /* @__PURE__ */ new Map(),
-      materials: /* @__PURE__ */ new Map(),
-      textures: /* @__PURE__ */ new Map(),
-      images: /* @__PURE__ */ new Map()
-    };
-  }
-  setPlugins(plugins) {
-    this.plugins = plugins;
-  }
-  /**
-   * Parse scenes and generate GLTF output
-   * @param  {Scene or [THREE.Scenes]} input   Scene or Array of THREE.Scenes
-   * @param  {Function} onDone  Callback on completed
-   * @param  {Object} options options
-   */
-  async write(input, onDone, options = {}) {
-    this.options = Object.assign(
-      {
-        // default options
-        binary: false,
-        trs: false,
-        onlyVisible: true,
-        maxTextureSize: Infinity,
-        animations: [],
-        includeCustomExtensions: false
-      },
-      options
-    );
-    if (this.options.animations.length > 0) {
-      this.options.trs = true;
-    }
-    this.processInput(input);
-    await Promise.all(this.pending);
-    const writer = this;
-    const buffers = writer.buffers;
-    const json = writer.json;
-    options = writer.options;
-    const extensionsUsed = writer.extensionsUsed;
-    const extensionsRequired = writer.extensionsRequired;
-    const blob = new Blob(buffers, { type: "application/octet-stream" });
-    const extensionsUsedList = Object.keys(extensionsUsed);
-    const extensionsRequiredList = Object.keys(extensionsRequired);
-    if (extensionsUsedList.length > 0)
-      json.extensionsUsed = extensionsUsedList;
-    if (extensionsRequiredList.length > 0)
-      json.extensionsRequired = extensionsRequiredList;
-    if (json.buffers && json.buffers.length > 0)
-      json.buffers[0].byteLength = blob.size;
-    if (options.binary === true) {
-      const reader = new FileReader();
-      reader.readAsArrayBuffer(blob);
-      reader.onloadend = function() {
-        const binaryChunk = getPaddedArrayBuffer(reader.result);
-        const binaryChunkPrefix = new DataView(new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES));
-        binaryChunkPrefix.setUint32(0, binaryChunk.byteLength, true);
-        binaryChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_BIN, true);
-        const jsonChunk = getPaddedArrayBuffer(stringToArrayBuffer(JSON.stringify(json)), 32);
-        const jsonChunkPrefix = new DataView(new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES));
-        jsonChunkPrefix.setUint32(0, jsonChunk.byteLength, true);
-        jsonChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_JSON, true);
-        const header = new ArrayBuffer(GLB_HEADER_BYTES);
-        const headerView = new DataView(header);
-        headerView.setUint32(0, GLB_HEADER_MAGIC, true);
-        headerView.setUint32(4, GLB_VERSION, true);
-        const totalByteLength = GLB_HEADER_BYTES + jsonChunkPrefix.byteLength + jsonChunk.byteLength + binaryChunkPrefix.byteLength + binaryChunk.byteLength;
-        headerView.setUint32(8, totalByteLength, true);
-        const glbBlob = new Blob([header, jsonChunkPrefix, jsonChunk, binaryChunkPrefix, binaryChunk], {
-          type: "application/octet-stream"
-        });
-        const glbReader = new FileReader();
-        glbReader.readAsArrayBuffer(glbBlob);
-        glbReader.onloadend = function() {
-          onDone(glbReader.result);
-        };
-      };
-    } else {
-      if (json.buffers && json.buffers.length > 0) {
-        const reader = new FileReader();
-        reader.readAsDataURL(blob);
-        reader.onloadend = function() {
-          const base64data = reader.result;
-          json.buffers[0].uri = base64data;
-          onDone(json);
-        };
-      } else {
-        onDone(json);
-      }
-    }
-  }
-  /**
-   * Serializes a userData.
-   *
-   * @param {THREE.Object3D|THREE.Material} object
-   * @param {Object} objectDef
-   */
-  serializeUserData(object, objectDef) {
-    if (Object.keys(object.userData).length === 0)
-      return;
-    const options = this.options;
-    const extensionsUsed = this.extensionsUsed;
-    try {
-      const json = JSON.parse(JSON.stringify(object.userData));
-      if (options.includeCustomExtensions && json.gltfExtensions) {
-        if (objectDef.extensions === void 0)
-          objectDef.extensions = {};
-        for (const extensionName in json.gltfExtensions) {
-          objectDef.extensions[extensionName] = json.gltfExtensions[extensionName];
-          extensionsUsed[extensionName] = true;
-        }
-        delete json.gltfExtensions;
-      }
-      if (Object.keys(json).length > 0)
-        objectDef.extras = json;
-    } catch (error) {
-      console.warn(
-        "THREE.GLTFExporter: userData of '" + object.name + "' won't be serialized because of JSON.stringify error - " + error.message
-      );
-    }
-  }
-  /**
-   * Returns ids for buffer attributes.
-   * @param  {Object} object
-   * @return {Integer}
-   */
-  getUID(attribute, isRelativeCopy = false) {
-    if (this.uids.has(attribute) === false) {
-      const uids2 = /* @__PURE__ */ new Map();
-      uids2.set(true, this.uid++);
-      uids2.set(false, this.uid++);
-      this.uids.set(attribute, uids2);
-    }
-    const uids = this.uids.get(attribute);
-    return uids.get(isRelativeCopy);
-  }
-  /**
-   * Checks if normal attribute values are normalized.
-   *
-   * @param {BufferAttribute} normal
-   * @returns {Boolean}
-   */
-  isNormalizedNormalAttribute(normal) {
-    const cache = this.cache;
-    if (cache.attributesNormalized.has(normal))
-      return false;
-    const v = new three_module.Vector3();
-    for (let i = 0, il = normal.count; i < il; i++) {
-      if (Math.abs(v.fromBufferAttribute(normal, i).length() - 1) > 5e-4)
-        return false;
-    }
-    return true;
-  }
-  /**
-   * Creates normalized normal buffer attribute.
-   *
-   * @param {BufferAttribute} normal
-   * @returns {BufferAttribute}
-   *
-   */
-  createNormalizedNormalAttribute(normal) {
-    const cache = this.cache;
-    if (cache.attributesNormalized.has(normal))
-      return cache.attributesNormalized.get(normal);
-    const attribute = normal.clone();
-    const v = new three_module.Vector3();
-    for (let i = 0, il = attribute.count; i < il; i++) {
-      v.fromBufferAttribute(attribute, i);
-      if (v.x === 0 && v.y === 0 && v.z === 0) {
-        v.setX(1);
-      } else {
-        v.normalize();
-      }
-      attribute.setXYZ(i, v.x, v.y, v.z);
-    }
-    cache.attributesNormalized.set(normal, attribute);
-    return attribute;
-  }
-  /**
-   * Applies a texture transform, if present, to the map definition. Requires
-   * the KHR_texture_transform extension.
-   *
-   * @param {Object} mapDef
-   * @param {THREE.Texture} texture
-   */
-  applyTextureTransform(mapDef, texture) {
-    let didTransform = false;
-    const transformDef = {};
-    if (texture.offset.x !== 0 || texture.offset.y !== 0) {
-      transformDef.offset = texture.offset.toArray();
-      didTransform = true;
-    }
-    if (texture.rotation !== 0) {
-      transformDef.rotation = texture.rotation;
-      didTransform = true;
-    }
-    if (texture.repeat.x !== 1 || texture.repeat.y !== 1) {
-      transformDef.scale = texture.repeat.toArray();
-      didTransform = true;
-    }
-    if (didTransform) {
-      mapDef.extensions = mapDef.extensions || {};
-      mapDef.extensions["KHR_texture_transform"] = transformDef;
-      this.extensionsUsed["KHR_texture_transform"] = true;
-    }
-  }
-  buildMetalRoughTexture(metalnessMap, roughnessMap) {
-    if (metalnessMap === roughnessMap)
-      return metalnessMap;
-    function getEncodingConversion(map) {
-      if ("colorSpace" in map ? map.colorSpace === "srgb" : map.encoding === 3001) {
-        return function SRGBToLinear(c) {
-          return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);
-        };
-      }
-      return function LinearToLinear(c) {
-        return c;
-      };
-    }
-    console.warn("THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.");
-    if (metalnessMap instanceof three_module.CompressedTexture) {
-      metalnessMap = decompress(metalnessMap);
-    }
-    if (roughnessMap instanceof three_module.CompressedTexture) {
-      roughnessMap = decompress(roughnessMap);
-    }
-    const metalness = metalnessMap ? metalnessMap.image : null;
-    const roughness = roughnessMap ? roughnessMap.image : null;
-    const width = Math.max(metalness ? metalness.width : 0, roughness ? roughness.width : 0);
-    const height = Math.max(metalness ? metalness.height : 0, roughness ? roughness.height : 0);
-    const canvas = getCanvas();
-    canvas.width = width;
-    canvas.height = height;
-    const context = canvas.getContext("2d");
-    context.fillStyle = "#00ffff";
-    context.fillRect(0, 0, width, height);
-    const composite = context.getImageData(0, 0, width, height);
-    if (metalness) {
-      context.drawImage(metalness, 0, 0, width, height);
-      const convert = getEncodingConversion(metalnessMap);
-      const data = context.getImageData(0, 0, width, height).data;
-      for (let i = 2; i < data.length; i += 4) {
-        composite.data[i] = convert(data[i] / 256) * 256;
-      }
-    }
-    if (roughness) {
-      context.drawImage(roughness, 0, 0, width, height);
-      const convert = getEncodingConversion(roughnessMap);
-      const data = context.getImageData(0, 0, width, height).data;
-      for (let i = 1; i < data.length; i += 4) {
-        composite.data[i] = convert(data[i] / 256) * 256;
-      }
-    }
-    context.putImageData(composite, 0, 0);
-    const reference = metalnessMap || roughnessMap;
-    const texture = reference.clone();
-    texture.source = new three_module.Source(canvas);
-    if ("colorSpace" in texture)
-      texture.colorSpace = "";
-    else
-      texture.encoding = 3e3;
-    texture.channel = (metalnessMap || roughnessMap).channel;
-    if (metalnessMap && roughnessMap && metalnessMap.channel !== roughnessMap.channel) {
-      console.warn("THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match.");
-    }
-    return texture;
-  }
-  /**
-   * Process a buffer to append to the default one.
-   * @param  {ArrayBuffer} buffer
-   * @return {Integer}
-   */
-  processBuffer(buffer) {
-    const json = this.json;
-    const buffers = this.buffers;
-    if (!json.buffers)
-      json.buffers = [{ byteLength: 0 }];
-    buffers.push(buffer);
-    return 0;
-  }
-  /**
-   * Process and generate a BufferView
-   * @param  {BufferAttribute} attribute
-   * @param  {number} componentType
-   * @param  {number} start
-   * @param  {number} count
-   * @param  {number} target (Optional) Target usage of the BufferView
-   * @return {Object}
-   */
-  processBufferView(attribute, componentType, start, count, target) {
-    const json = this.json;
-    if (!json.bufferViews)
-      json.bufferViews = [];
-    let componentSize;
-    switch (componentType) {
-      case WEBGL_CONSTANTS.BYTE:
-      case WEBGL_CONSTANTS.UNSIGNED_BYTE:
-        componentSize = 1;
-        break;
-      case WEBGL_CONSTANTS.SHORT:
-      case WEBGL_CONSTANTS.UNSIGNED_SHORT:
-        componentSize = 2;
-        break;
-      default:
-        componentSize = 4;
-    }
-    const byteLength = getPaddedBufferSize(count * attribute.itemSize * componentSize);
-    const dataView = new DataView(new ArrayBuffer(byteLength));
-    let offset = 0;
-    for (let i = start; i < start + count; i++) {
-      for (let a = 0; a < attribute.itemSize; a++) {
-        let value;
-        if (attribute.itemSize > 4) {
-          value = attribute.array[i * attribute.itemSize + a];
-        } else {
-          if (a === 0)
-            value = attribute.getX(i);
-          else if (a === 1)
-            value = attribute.getY(i);
-          else if (a === 2)
-            value = attribute.getZ(i);
-          else if (a === 3)
-            value = attribute.getW(i);
-          if (attribute.normalized === true) {
-            value = three_module.MathUtils.normalize(value, attribute.array);
-          }
-        }
-        if (componentType === WEBGL_CONSTANTS.FLOAT) {
-          dataView.setFloat32(offset, value, true);
-        } else if (componentType === WEBGL_CONSTANTS.INT) {
-          dataView.setInt32(offset, value, true);
-        } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_INT) {
-          dataView.setUint32(offset, value, true);
-        } else if (componentType === WEBGL_CONSTANTS.SHORT) {
-          dataView.setInt16(offset, value, true);
-        } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT) {
-          dataView.setUint16(offset, value, true);
-        } else if (componentType === WEBGL_CONSTANTS.BYTE) {
-          dataView.setInt8(offset, value);
-        } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE) {
-          dataView.setUint8(offset, value);
-        }
-        offset += componentSize;
-      }
-    }
-    const bufferViewDef = {
-      buffer: this.processBuffer(dataView.buffer),
-      byteOffset: this.byteOffset,
-      byteLength
-    };
-    if (target !== void 0)
-      bufferViewDef.target = target;
-    if (target === WEBGL_CONSTANTS.ARRAY_BUFFER) {
-      bufferViewDef.byteStride = attribute.itemSize * componentSize;
-    }
-    this.byteOffset += byteLength;
-    json.bufferViews.push(bufferViewDef);
-    const output = {
-      id: json.bufferViews.length - 1,
-      byteLength: 0
-    };
-    return output;
-  }
-  /**
-   * Process and generate a BufferView from an image Blob.
-   * @param {Blob} blob
-   * @return {Promise<Integer>}
-   */
-  processBufferViewImage(blob) {
-    const writer = this;
-    const json = writer.json;
-    if (!json.bufferViews)
-      json.bufferViews = [];
-    return new Promise(function(resolve) {
-      const reader = new FileReader();
-      reader.readAsArrayBuffer(blob);
-      reader.onloadend = function() {
-        const buffer = getPaddedArrayBuffer(reader.result);
-        const bufferViewDef = {
-          buffer: writer.processBuffer(buffer),
-          byteOffset: writer.byteOffset,
-          byteLength: buffer.byteLength
-        };
-        writer.byteOffset += buffer.byteLength;
-        resolve(json.bufferViews.push(bufferViewDef) - 1);
-      };
-    });
-  }
-  /**
-   * Process attribute to generate an accessor
-   * @param  {BufferAttribute} attribute Attribute to process
-   * @param  {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range
-   * @param  {Integer} start (Optional)
-   * @param  {Integer} count (Optional)
-   * @return {Integer|null} Index of the processed accessor on the "accessors" array
-   */
-  processAccessor(attribute, geometry, start, count) {
-    const json = this.json;
-    const types = {
-      1: "SCALAR",
-      2: "VEC2",
-      3: "VEC3",
-      4: "VEC4",
-      9: "MAT3",
-      16: "MAT4"
-    };
-    let componentType;
-    if (attribute.array.constructor === Float32Array) {
-      componentType = WEBGL_CONSTANTS.FLOAT;
-    } else if (attribute.array.constructor === Int32Array) {
-      componentType = WEBGL_CONSTANTS.INT;
-    } else if (attribute.array.constructor === Uint32Array) {
-      componentType = WEBGL_CONSTANTS.UNSIGNED_INT;
-    } else if (attribute.array.constructor === Int16Array) {
-      componentType = WEBGL_CONSTANTS.SHORT;
-    } else if (attribute.array.constructor === Uint16Array) {
-      componentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;
-    } else if (attribute.array.constructor === Int8Array) {
-      componentType = WEBGL_CONSTANTS.BYTE;
-    } else if (attribute.array.constructor === Uint8Array) {
-      componentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;
-    } else {
-      throw new Error(
-        "THREE.GLTFExporter: Unsupported bufferAttribute component type: " + attribute.array.constructor.name
-      );
-    }
-    if (start === void 0)
-      start = 0;
-    if (count === void 0)
-      count = attribute.count;
-    if (count === 0)
-      return null;
-    const minMax = getMinMax(attribute, start, count);
-    let bufferViewTarget;
-    if (geometry !== void 0) {
-      bufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;
-    }
-    const bufferView = this.processBufferView(attribute, componentType, start, count, bufferViewTarget);
-    const accessorDef = {
-      bufferView: bufferView.id,
-      byteOffset: bufferView.byteOffset,
-      componentType,
-      count,
-      max: minMax.max,
-      min: minMax.min,
-      type: types[attribute.itemSize]
-    };
-    if (attribute.normalized === true)
-      accessorDef.normalized = true;
-    if (!json.accessors)
-      json.accessors = [];
-    return json.accessors.push(accessorDef) - 1;
-  }
-  /**
-   * Process image
-   * @param  {Image} image to process
-   * @param  {Integer} format of the image (RGBAFormat)
-   * @param  {Boolean} flipY before writing out the image
-   * @param  {String} mimeType export format
-   * @return {Integer}     Index of the processed texture in the "images" array
-   */
-  processImage(image, format, flipY, mimeType = "image/png") {
-    if (image !== null) {
-      const writer = this;
-      const cache = writer.cache;
-      const json = writer.json;
-      const options = writer.options;
-      const pending = writer.pending;
-      if (!cache.images.has(image))
-        cache.images.set(image, {});
-      const cachedImages = cache.images.get(image);
-      const key = mimeType + ":flipY/" + flipY.toString();
-      if (cachedImages[key] !== void 0)
-        return cachedImages[key];
-      if (!json.images)
-        json.images = [];
-      const imageDef = { mimeType };
-      const canvas = getCanvas();
-      canvas.width = Math.min(image.width, options.maxTextureSize);
-      canvas.height = Math.min(image.height, options.maxTextureSize);
-      const ctx = canvas.getContext("2d");
-      if (flipY === true) {
-        ctx.translate(0, canvas.height);
-        ctx.scale(1, -1);
-      }
-      if (image.data !== void 0) {
-        if (format !== three_module.RGBAFormat) {
-          console.error("GLTFExporter: Only RGBAFormat is supported.", format);
-        }
-        if (image.width > options.maxTextureSize || image.height > options.maxTextureSize) {
-          console.warn("GLTFExporter: Image size is bigger than maxTextureSize", image);
-        }
-        const data = new Uint8ClampedArray(image.height * image.width * 4);
-        for (let i = 0; i < data.length; i += 4) {
-          data[i + 0] = image.data[i + 0];
-          data[i + 1] = image.data[i + 1];
-          data[i + 2] = image.data[i + 2];
-          data[i + 3] = image.data[i + 3];
-        }
-        ctx.putImageData(new ImageData(data, image.width, image.height), 0, 0);
-      } else {
-        ctx.drawImage(image, 0, 0, canvas.width, canvas.height);
-      }
-      if (options.binary === true) {
-        pending.push(
-          getToBlobPromise(canvas, mimeType).then((blob) => writer.processBufferViewImage(blob)).then((bufferViewIndex) => {
-            imageDef.bufferView = bufferViewIndex;
-          })
-        );
-      } else {
-        if (canvas.toDataURL !== void 0) {
-          imageDef.uri = canvas.toDataURL(mimeType);
-        } else {
-          pending.push(
-            getToBlobPromise(canvas, mimeType).then((blob) => new FileReader().readAsDataURL(blob)).then((dataURL) => {
-              imageDef.uri = dataURL;
-            })
-          );
-        }
-      }
-      const index = json.images.push(imageDef) - 1;
-      cachedImages[key] = index;
-      return index;
-    } else {
-      throw new Error("THREE.GLTFExporter: No valid image data found. Unable to process texture.");
-    }
-  }
-  /**
-   * Process sampler
-   * @param  {Texture} map Texture to process
-   * @return {Integer}     Index of the processed texture in the "samplers" array
-   */
-  processSampler(map) {
-    const json = this.json;
-    if (!json.samplers)
-      json.samplers = [];
-    const samplerDef = {
-      magFilter: THREE_TO_WEBGL[map.magFilter],
-      minFilter: THREE_TO_WEBGL[map.minFilter],
-      wrapS: THREE_TO_WEBGL[map.wrapS],
-      wrapT: THREE_TO_WEBGL[map.wrapT]
-    };
-    return json.samplers.push(samplerDef) - 1;
-  }
-  /**
-   * Process texture
-   * @param  {Texture} map Map to process
-   * @return {Integer} Index of the processed texture in the "textures" array
-   */
-  processTexture(map) {
-    const writer = this;
-    const options = writer.options;
-    const cache = this.cache;
-    const json = this.json;
-    if (cache.textures.has(map))
-      return cache.textures.get(map);
-    if (!json.textures)
-      json.textures = [];
-    if (map instanceof three_module.CompressedTexture) {
-      map = decompress(map, options.maxTextureSize);
-    }
-    let mimeType = map.userData.mimeType;
-    if (mimeType === "image/webp")
-      mimeType = "image/png";
-    const textureDef = {
-      sampler: this.processSampler(map),
-      source: this.processImage(map.image, map.format, map.flipY, mimeType)
-    };
-    if (map.name)
-      textureDef.name = map.name;
-    this._invokeAll(function(ext) {
-      ext.writeTexture && ext.writeTexture(map, textureDef);
-    });
-    const index = json.textures.push(textureDef) - 1;
-    cache.textures.set(map, index);
-    return index;
-  }
-  /**
-   * Process material
-   * @param  {THREE.Material} material Material to process
-   * @return {Integer|null} Index of the processed material in the "materials" array
-   */
-  processMaterial(material) {
-    const cache = this.cache;
-    const json = this.json;
-    if (cache.materials.has(material))
-      return cache.materials.get(material);
-    if (material.isShaderMaterial) {
-      console.warn("GLTFExporter: THREE.ShaderMaterial not supported.");
-      return null;
-    }
-    if (!json.materials)
-      json.materials = [];
-    const materialDef = { pbrMetallicRoughness: {} };
-    if (material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true) {
-      console.warn("GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.");
-    }
-    const color = material.color.toArray().concat([material.opacity]);
-    if (!equalArray(color, [1, 1, 1, 1])) {
-      materialDef.pbrMetallicRoughness.baseColorFactor = color;
-    }
-    if (material.isMeshStandardMaterial) {
-      materialDef.pbrMetallicRoughness.metallicFactor = material.metalness;
-      materialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;
-    } else {
-      materialDef.pbrMetallicRoughness.metallicFactor = 0.5;
-      materialDef.pbrMetallicRoughness.roughnessFactor = 0.5;
-    }
-    if (material.metalnessMap || material.roughnessMap) {
-      const metalRoughTexture = this.buildMetalRoughTexture(material.metalnessMap, material.roughnessMap);
-      const metalRoughMapDef = {
-        index: this.processTexture(metalRoughTexture),
-        channel: metalRoughTexture.channel
-      };
-      this.applyTextureTransform(metalRoughMapDef, metalRoughTexture);
-      materialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;
-    }
-    if (material.map) {
-      const baseColorMapDef = {
-        index: this.processTexture(material.map),
-        texCoord: material.map.channel
-      };
-      this.applyTextureTransform(baseColorMapDef, material.map);
-      materialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;
-    }
-    if (material.emissive) {
-      const emissive = material.emissive;
-      const maxEmissiveComponent = Math.max(emissive.r, emissive.g, emissive.b);
-      if (maxEmissiveComponent > 0) {
-        materialDef.emissiveFactor = material.emissive.toArray();
-      }
-      if (material.emissiveMap) {
-        const emissiveMapDef = {
-          index: this.processTexture(material.emissiveMap),
-          texCoord: material.emissiveMap.channel
-        };
-        this.applyTextureTransform(emissiveMapDef, material.emissiveMap);
-        materialDef.emissiveTexture = emissiveMapDef;
-      }
-    }
-    if (material.normalMap) {
-      const normalMapDef = {
-        index: this.processTexture(material.normalMap),
-        texCoord: material.normalMap.channel
-      };
-      if (material.normalScale && material.normalScale.x !== 1) {
-        normalMapDef.scale = material.normalScale.x;
-      }
-      this.applyTextureTransform(normalMapDef, material.normalMap);
-      materialDef.normalTexture = normalMapDef;
-    }
-    if (material.aoMap) {
-      const occlusionMapDef = {
-        index: this.processTexture(material.aoMap),
-        texCoord: material.aoMap.channel
-      };
-      if (material.aoMapIntensity !== 1) {
-        occlusionMapDef.strength = material.aoMapIntensity;
-      }
-      this.applyTextureTransform(occlusionMapDef, material.aoMap);
-      materialDef.occlusionTexture = occlusionMapDef;
-    }
-    if (material.transparent) {
-      materialDef.alphaMode = "BLEND";
-    } else {
-      if (material.alphaTest > 0) {
-        materialDef.alphaMode = "MASK";
-        materialDef.alphaCutoff = material.alphaTest;
-      }
-    }
-    if (material.side === three_module.DoubleSide)
-      materialDef.doubleSided = true;
-    if (material.name !== "")
-      materialDef.name = material.name;
-    this.serializeUserData(material, materialDef);
-    this._invokeAll(function(ext) {
-      ext.writeMaterial && ext.writeMaterial(material, materialDef);
-    });
-    const index = json.materials.push(materialDef) - 1;
-    cache.materials.set(material, index);
-    return index;
-  }
-  /**
-   * Process mesh
-   * @param  {THREE.Mesh} mesh Mesh to process
-   * @return {Integer|null} Index of the processed mesh in the "meshes" array
-   */
-  processMesh(mesh) {
-    const cache = this.cache;
-    const json = this.json;
-    const meshCacheKeyParts = [mesh.geometry.uuid];
-    if (Array.isArray(mesh.material)) {
-      for (let i = 0, l = mesh.material.length; i < l; i++) {
-        meshCacheKeyParts.push(mesh.material[i].uuid);
-      }
-    } else {
-      meshCacheKeyParts.push(mesh.material.uuid);
-    }
-    const meshCacheKey = meshCacheKeyParts.join(":");
-    if (cache.meshes.has(meshCacheKey))
-      return cache.meshes.get(meshCacheKey);
-    const geometry = mesh.geometry;
-    let mode;
-    if (mesh.isLineSegments) {
-      mode = WEBGL_CONSTANTS.LINES;
-    } else if (mesh.isLineLoop) {
-      mode = WEBGL_CONSTANTS.LINE_LOOP;
-    } else if (mesh.isLine) {
-      mode = WEBGL_CONSTANTS.LINE_STRIP;
-    } else if (mesh.isPoints) {
-      mode = WEBGL_CONSTANTS.POINTS;
-    } else {
-      mode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;
-    }
-    const meshDef = {};
-    const attributes = {};
-    const primitives = [];
-    const targets = [];
-    const nameConversion = {
-      uv: "TEXCOORD_0",
-      [three_module.REVISION.replace(/\D+/g, "") >= 152 ? "uv1" : "uv2"]: "TEXCOORD_1",
-      color: "COLOR_0",
-      skinWeight: "WEIGHTS_0",
-      skinIndex: "JOINTS_0"
-    };
-    const originalNormal = geometry.getAttribute("normal");
-    if (originalNormal !== void 0 && !this.isNormalizedNormalAttribute(originalNormal)) {
-      console.warn("THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.");
-      geometry.setAttribute("normal", this.createNormalizedNormalAttribute(originalNormal));
-    }
-    let modifiedAttribute = null;
-    for (let attributeName in geometry.attributes) {
-      if (attributeName.slice(0, 5) === "morph")
-        continue;
-      const attribute = geometry.attributes[attributeName];
-      attributeName = nameConversion[attributeName] || attributeName.toUpperCase();
-      const validVertexAttributes = /^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/;
-      if (!validVertexAttributes.test(attributeName))
-        attributeName = "_" + attributeName;
-      if (cache.attributes.has(this.getUID(attribute))) {
-        attributes[attributeName] = cache.attributes.get(this.getUID(attribute));
-        continue;
-      }
-      modifiedAttribute = null;
-      const array = attribute.array;
-      if (attributeName === "JOINTS_0" && !(array instanceof Uint16Array) && !(array instanceof Uint8Array)) {
-        console.warn('GLTFExporter: Attribute "skinIndex" converted to type UNSIGNED_SHORT.');
-        modifiedAttribute = new three_module.BufferAttribute(new Uint16Array(array), attribute.itemSize, attribute.normalized);
-      }
-      const accessor = this.processAccessor(modifiedAttribute || attribute, geometry);
-      if (accessor !== null) {
-        if (!attributeName.startsWith("_")) {
-          this.detectMeshQuantization(attributeName, attribute);
-        }
-        attributes[attributeName] = accessor;
-        cache.attributes.set(this.getUID(attribute), accessor);
-      }
-    }
-    if (originalNormal !== void 0)
-      geometry.setAttribute("normal", originalNormal);
-    if (Object.keys(attributes).length === 0)
-      return null;
-    if (mesh.morphTargetInfluences !== void 0 && mesh.morphTargetInfluences.length > 0) {
-      const weights = [];
-      const targetNames = [];
-      const reverseDictionary = {};
-      if (mesh.morphTargetDictionary !== void 0) {
-        for (const key in mesh.morphTargetDictionary) {
-          reverseDictionary[mesh.morphTargetDictionary[key]] = key;
-        }
-      }
-      for (let i = 0; i < mesh.morphTargetInfluences.length; ++i) {
-        const target = {};
-        let warned = false;
-        for (const attributeName in geometry.morphAttributes) {
-          if (attributeName !== "position" && attributeName !== "normal") {
-            if (!warned) {
-              console.warn("GLTFExporter: Only POSITION and NORMAL morph are supported.");
-              warned = true;
-            }
-            continue;
-          }
-          const attribute = geometry.morphAttributes[attributeName][i];
-          const gltfAttributeName = attributeName.toUpperCase();
-          const baseAttribute = geometry.attributes[attributeName];
-          if (cache.attributes.has(this.getUID(attribute, true))) {
-            target[gltfAttributeName] = cache.attributes.get(this.getUID(attribute, true));
-            continue;
-          }
-          const relativeAttribute = attribute.clone();
-          if (!geometry.morphTargetsRelative) {
-            for (let j = 0, jl = attribute.count; j < jl; j++) {
-              for (let a = 0; a < attribute.itemSize; a++) {
-                if (a === 0)
-                  relativeAttribute.setX(j, attribute.getX(j) - baseAttribute.getX(j));
-                if (a === 1)
-                  relativeAttribute.setY(j, attribute.getY(j) - baseAttribute.getY(j));
-                if (a === 2)
-                  relativeAttribute.setZ(j, attribute.getZ(j) - baseAttribute.getZ(j));
-                if (a === 3)
-                  relativeAttribute.setW(j, attribute.getW(j) - baseAttribute.getW(j));
-              }
-            }
-          }
-          target[gltfAttributeName] = this.processAccessor(relativeAttribute, geometry);
-          cache.attributes.set(this.getUID(baseAttribute, true), target[gltfAttributeName]);
-        }
-        targets.push(target);
-        weights.push(mesh.morphTargetInfluences[i]);
-        if (mesh.morphTargetDictionary !== void 0)
-          targetNames.push(reverseDictionary[i]);
-      }
-      meshDef.weights = weights;
-      if (targetNames.length > 0) {
-        meshDef.extras = {};
-        meshDef.extras.targetNames = targetNames;
-      }
-    }
-    const isMultiMaterial = Array.isArray(mesh.material);
-    if (isMultiMaterial && geometry.groups.length === 0)
-      return null;
-    const materials = isMultiMaterial ? mesh.material : [mesh.material];
-    const groups = isMultiMaterial ? geometry.groups : [{ materialIndex: 0, start: void 0, count: void 0 }];
-    for (let i = 0, il = groups.length; i < il; i++) {
-      const primitive = {
-        mode,
-        attributes
-      };
-      this.serializeUserData(geometry, primitive);
-      if (targets.length > 0)
-        primitive.targets = targets;
-      if (geometry.index !== null) {
-        let cacheKey = this.getUID(geometry.index);
-        if (groups[i].start !== void 0 || groups[i].count !== void 0) {
-          cacheKey += ":" + groups[i].start + ":" + groups[i].count;
-        }
-        if (cache.attributes.has(cacheKey)) {
-          primitive.indices = cache.attributes.get(cacheKey);
-        } else {
-          primitive.indices = this.processAccessor(geometry.index, geometry, groups[i].start, groups[i].count);
-          cache.attributes.set(cacheKey, primitive.indices);
-        }
-        if (primitive.indices === null)
-          delete primitive.indices;
-      }
-      const material = this.processMaterial(materials[groups[i].materialIndex]);
-      if (material !== null)
-        primitive.material = material;
-      primitives.push(primitive);
-    }
-    meshDef.primitives = primitives;
-    if (!json.meshes)
-      json.meshes = [];
-    this._invokeAll(function(ext) {
-      ext.writeMesh && ext.writeMesh(mesh, meshDef);
-    });
-    const index = json.meshes.push(meshDef) - 1;
-    cache.meshes.set(meshCacheKey, index);
-    return index;
-  }
-  /**
-   * If a vertex attribute with a
-   * [non-standard data type](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview)
-   * is used, it is checked whether it is a valid data type according to the
-   * [KHR_mesh_quantization](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md)
-   * extension.
-   * In this case the extension is automatically added to the list of used extensions.
-   *
-   * @param {string} attributeName
-   * @param {THREE.BufferAttribute} attribute
-   */
-  detectMeshQuantization(attributeName, attribute) {
-    if (this.extensionsUsed[KHR_MESH_QUANTIZATION])
-      return;
-    let attrType = void 0;
-    switch (attribute.array.constructor) {
-      case Int8Array:
-        attrType = "byte";
-        break;
-      case Uint8Array:
-        attrType = "unsigned byte";
-        break;
-      case Int16Array:
-        attrType = "short";
-        break;
-      case Uint16Array:
-        attrType = "unsigned short";
-        break;
-      default:
-        return;
-    }
-    if (attribute.normalized)
-      attrType += " normalized";
-    const attrNamePrefix = attributeName.split("_", 1)[0];
-    if (KHR_mesh_quantization_ExtraAttrTypes[attrNamePrefix] && KHR_mesh_quantization_ExtraAttrTypes[attrNamePrefix].includes(attrType)) {
-      this.extensionsUsed[KHR_MESH_QUANTIZATION] = true;
-      this.extensionsRequired[KHR_MESH_QUANTIZATION] = true;
-    }
-  }
-  /**
-   * Process camera
-   * @param  {THREE.Camera} camera Camera to process
-   * @return {Integer}      Index of the processed mesh in the "camera" array
-   */
-  processCamera(camera) {
-    const json = this.json;
-    if (!json.cameras)
-      json.cameras = [];
-    const isOrtho = camera.isOrthographicCamera;
-    const cameraDef = {
-      type: isOrtho ? "orthographic" : "perspective"
-    };
-    if (isOrtho) {
-      cameraDef.orthographic = {
-        xmag: camera.right * 2,
-        ymag: camera.top * 2,
-        zfar: camera.far <= 0 ? 1e-3 : camera.far,
-        znear: camera.near < 0 ? 0 : camera.near
-      };
-    } else {
-      cameraDef.perspective = {
-        aspectRatio: camera.aspect,
-        yfov: three_module.MathUtils.degToRad(camera.fov),
-        zfar: camera.far <= 0 ? 1e-3 : camera.far,
-        znear: camera.near < 0 ? 0 : camera.near
-      };
-    }
-    if (camera.name !== "")
-      cameraDef.name = camera.type;
-    return json.cameras.push(cameraDef) - 1;
-  }
-  /**
-   * Creates glTF animation entry from AnimationClip object.
-   *
-   * Status:
-   * - Only properties listed in PATH_PROPERTIES may be animated.
-   *
-   * @param {THREE.AnimationClip} clip
-   * @param {THREE.Object3D} root
-   * @return {number|null}
-   */
-  processAnimation(clip, root) {
-    const json = this.json;
-    const nodeMap = this.nodeMap;
-    if (!json.animations)
-      json.animations = [];
-    clip = GLTFExporter.Utils.mergeMorphTargetTracks(clip.clone(), root);
-    const tracks = clip.tracks;
-    const channels = [];
-    const samplers = [];
-    for (let i = 0; i < tracks.length; ++i) {
-      const track = tracks[i];
-      const trackBinding = three_module.PropertyBinding.parseTrackName(track.name);
-      let trackNode = three_module.PropertyBinding.findNode(root, trackBinding.nodeName);
-      const trackProperty = PATH_PROPERTIES[trackBinding.propertyName];
-      if (trackBinding.objectName === "bones") {
-        if (trackNode.isSkinnedMesh === true) {
-          trackNode = trackNode.skeleton.getBoneByName(trackBinding.objectIndex);
-        } else {
-          trackNode = void 0;
-        }
-      }
-      if (!trackNode || !trackProperty) {
-        console.warn('THREE.GLTFExporter: Could not export animation track "%s".', track.name);
-        return null;
-      }
-      const inputItemSize = 1;
-      let outputItemSize = track.values.length / track.times.length;
-      if (trackProperty === PATH_PROPERTIES.morphTargetInfluences) {
-        outputItemSize /= trackNode.morphTargetInfluences.length;
-      }
-      let interpolation;
-      if (track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true) {
-        interpolation = "CUBICSPLINE";
-        outputItemSize /= 3;
-      } else if (track.getInterpolation() === three_module.InterpolateDiscrete) {
-        interpolation = "STEP";
-      } else {
-        interpolation = "LINEAR";
-      }
-      samplers.push({
-        input: this.processAccessor(new three_module.BufferAttribute(track.times, inputItemSize)),
-        output: this.processAccessor(new three_module.BufferAttribute(track.values, outputItemSize)),
-        interpolation
-      });
-      channels.push({
-        sampler: samplers.length - 1,
-        target: {
-          node: nodeMap.get(trackNode),
-          path: trackProperty
-        }
-      });
-    }
-    json.animations.push({
-      name: clip.name || "clip_" + json.animations.length,
-      samplers,
-      channels
-    });
-    return json.animations.length - 1;
-  }
-  /**
-   * @param {THREE.Object3D} object
-   * @return {number|null}
-   */
-  processSkin(object) {
-    const json = this.json;
-    const nodeMap = this.nodeMap;
-    const node = json.nodes[nodeMap.get(object)];
-    const skeleton = object.skeleton;
-    if (skeleton === void 0)
-      return null;
-    const rootJoint = object.skeleton.bones[0];
-    if (rootJoint === void 0)
-      return null;
-    const joints = [];
-    const inverseBindMatrices = new Float32Array(skeleton.bones.length * 16);
-    const temporaryBoneInverse = new three_module.Matrix4();
-    for (let i = 0; i < skeleton.bones.length; ++i) {
-      joints.push(nodeMap.get(skeleton.bones[i]));
-      temporaryBoneInverse.copy(skeleton.boneInverses[i]);
-      temporaryBoneInverse.multiply(object.bindMatrix).toArray(inverseBindMatrices, i * 16);
-    }
-    if (json.skins === void 0)
-      json.skins = [];
-    json.skins.push({
-      inverseBindMatrices: this.processAccessor(new three_module.BufferAttribute(inverseBindMatrices, 16)),
-      joints,
-      skeleton: nodeMap.get(rootJoint)
-    });
-    const skinIndex = node.skin = json.skins.length - 1;
-    return skinIndex;
-  }
-  /**
-   * Process Object3D node
-   * @param  {THREE.Object3D} node Object3D to processNode
-   * @return {Integer} Index of the node in the nodes list
-   */
-  processNode(object) {
-    const json = this.json;
-    const options = this.options;
-    const nodeMap = this.nodeMap;
-    if (!json.nodes)
-      json.nodes = [];
-    const nodeDef = {};
-    if (options.trs) {
-      const rotation = object.quaternion.toArray();
-      const position = object.position.toArray();
-      const scale = object.scale.toArray();
-      if (!equalArray(rotation, [0, 0, 0, 1])) {
-        nodeDef.rotation = rotation;
-      }
-      if (!equalArray(position, [0, 0, 0])) {
-        nodeDef.translation = position;
-      }
-      if (!equalArray(scale, [1, 1, 1])) {
-        nodeDef.scale = scale;
-      }
-    } else {
-      if (object.matrixAutoUpdate) {
-        object.updateMatrix();
-      }
-      if (isIdentityMatrix(object.matrix) === false) {
-        nodeDef.matrix = object.matrix.elements;
-      }
-    }
-    if (object.name !== "")
-      nodeDef.name = String(object.name);
-    this.serializeUserData(object, nodeDef);
-    if (object.isMesh || object.isLine || object.isPoints) {
-      const meshIndex = this.processMesh(object);
-      if (meshIndex !== null)
-        nodeDef.mesh = meshIndex;
-    } else if (object.isCamera) {
-      nodeDef.camera = this.processCamera(object);
-    }
-    if (object.isSkinnedMesh)
-      this.skins.push(object);
-    if (object.children.length > 0) {
-      const children = [];
-      for (let i = 0, l = object.children.length; i < l; i++) {
-        const child = object.children[i];
-        if (child.visible || options.onlyVisible === false) {
-          const nodeIndex2 = this.processNode(child);
-          if (nodeIndex2 !== null)
-            children.push(nodeIndex2);
-        }
-      }
-      if (children.length > 0)
-        nodeDef.children = children;
-    }
-    this._invokeAll(function(ext) {
-      ext.writeNode && ext.writeNode(object, nodeDef);
-    });
-    const nodeIndex = json.nodes.push(nodeDef) - 1;
-    nodeMap.set(object, nodeIndex);
-    return nodeIndex;
-  }
-  /**
-   * Process Scene
-   * @param  {Scene} node Scene to process
-   */
-  processScene(scene) {
-    const json = this.json;
-    const options = this.options;
-    if (!json.scenes) {
-      json.scenes = [];
-      json.scene = 0;
-    }
-    const sceneDef = {};
-    if (scene.name !== "")
-      sceneDef.name = scene.name;
-    json.scenes.push(sceneDef);
-    const nodes = [];
-    for (let i = 0, l = scene.children.length; i < l; i++) {
-      const child = scene.children[i];
-      if (child.visible || options.onlyVisible === false) {
-        const nodeIndex = this.processNode(child);
-        if (nodeIndex !== null)
-          nodes.push(nodeIndex);
-      }
-    }
-    if (nodes.length > 0)
-      sceneDef.nodes = nodes;
-    this.serializeUserData(scene, sceneDef);
-  }
-  /**
-   * Creates a Scene to hold a list of objects and parse it
-   * @param  {Array} objects List of objects to process
-   */
-  processObjects(objects) {
-    const scene = new three_module.Scene();
-    scene.name = "AuxScene";
-    for (let i = 0; i < objects.length; i++) {
-      scene.children.push(objects[i]);
-    }
-    this.processScene(scene);
-  }
-  /**
-   * @param {THREE.Object3D|Array<THREE.Object3D>} input
-   */
-  processInput(input) {
-    const options = this.options;
-    input = input instanceof Array ? input : [input];
-    this._invokeAll(function(ext) {
-      ext.beforeParse && ext.beforeParse(input);
-    });
-    const objectsWithoutScene = [];
-    for (let i = 0; i < input.length; i++) {
-      if (input[i] instanceof three_module.Scene) {
-        this.processScene(input[i]);
-      } else {
-        objectsWithoutScene.push(input[i]);
-      }
-    }
-    if (objectsWithoutScene.length > 0)
-      this.processObjects(objectsWithoutScene);
-    for (let i = 0; i < this.skins.length; ++i) {
-      this.processSkin(this.skins[i]);
-    }
-    for (let i = 0; i < options.animations.length; ++i) {
-      this.processAnimation(options.animations[i], input[0]);
-    }
-    this._invokeAll(function(ext) {
-      ext.afterParse && ext.afterParse(input);
-    });
-  }
-  _invokeAll(func) {
-    for (let i = 0, il = this.plugins.length; i < il; i++) {
-      func(this.plugins[i]);
-    }
-  }
-}
-class GLTFLightExtension {
-  constructor(writer) {
-    this.writer = writer;
-    this.name = "KHR_lights_punctual";
-  }
-  writeNode(light, nodeDef) {
-    if (!light.isLight)
-      return;
-    if (!light.isDirectionalLight && !light.isPointLight && !light.isSpotLight) {
-      console.warn("THREE.GLTFExporter: Only directional, point, and spot lights are supported.", light);
-      return;
-    }
-    const writer = this.writer;
-    const json = writer.json;
-    const extensionsUsed = writer.extensionsUsed;
-    const lightDef = {};
-    if (light.name)
-      lightDef.name = light.name;
-    lightDef.color = light.color.toArray();
-    lightDef.intensity = light.intensity;
-    if (light.isDirectionalLight) {
-      lightDef.type = "directional";
-    } else if (light.isPointLight) {
-      lightDef.type = "point";
-      if (light.distance > 0)
-        lightDef.range = light.distance;
-    } else if (light.isSpotLight) {
-      lightDef.type = "spot";
-      if (light.distance > 0)
-        lightDef.range = light.distance;
-      lightDef.spot = {};
-      lightDef.spot.innerConeAngle = (light.penumbra - 1) * light.angle * -1;
-      lightDef.spot.outerConeAngle = light.angle;
-    }
-    if (light.decay !== void 0 && light.decay !== 2) {
-      console.warn(
-        "THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2."
-      );
-    }
-    if (light.target && (light.target.parent !== light || light.target.position.x !== 0 || light.target.position.y !== 0 || light.target.position.z !== -1)) {
-      console.warn(
-        "THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1."
-      );
-    }
-    if (!extensionsUsed[this.name]) {
-      json.extensions = json.extensions || {};
-      json.extensions[this.name] = { lights: [] };
-      extensionsUsed[this.name] = true;
-    }
-    const lights = json.extensions[this.name].lights;
-    lights.push(lightDef);
-    nodeDef.extensions = nodeDef.extensions || {};
-    nodeDef.extensions[this.name] = { light: lights.length - 1 };
-  }
-}
-class GLTFMaterialsUnlitExtension {
-  constructor(writer) {
-    this.writer = writer;
-    this.name = "KHR_materials_unlit";
-  }
-  writeMaterial(material, materialDef) {
-    if (!material.isMeshBasicMaterial)
-      return;
-    const writer = this.writer;
-    const extensionsUsed = writer.extensionsUsed;
-    materialDef.extensions = materialDef.extensions || {};
-    materialDef.extensions[this.name] = {};
-    extensionsUsed[this.name] = true;
-    materialDef.pbrMetallicRoughness.metallicFactor = 0;
-    materialDef.pbrMetallicRoughness.roughnessFactor = 0.9;
-  }
-}
-class GLTFMaterialsClearcoatExtension {
-  constructor(writer) {
-    this.writer = writer;
-    this.name = "KHR_materials_clearcoat";
-  }
-  writeMaterial(material, materialDef) {
-    if (!material.isMeshPhysicalMaterial || material.clearcoat === 0)
-      return;
-    const writer = this.writer;
-    const extensionsUsed = writer.extensionsUsed;
-    const extensionDef = {};
-    extensionDef.clearcoatFactor = material.clearcoat;
-    if (material.clearcoatMap) {
-      const clearcoatMapDef = {
-        index: writer.processTexture(material.clearcoatMap),
-        texCoord: material.clearcoatMap.channel
-      };
-      writer.applyTextureTransform(clearcoatMapDef, material.clearcoatMap);
-      extensionDef.clearcoatTexture = clearcoatMapDef;
-    }
-    extensionDef.clearcoatRoughnessFactor = material.clearcoatRoughness;
-    if (material.clearcoatRoughnessMap) {
-      const clearcoatRoughnessMapDef = {
-        index: writer.processTexture(material.clearcoatRoughnessMap),
-        texCoord: material.clearcoatRoughnessMap.channel
-      };
-      writer.applyTextureTransform(clearcoatRoughnessMapDef, material.clearcoatRoughnessMap);
-      extensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef;
-    }
-    if (material.clearcoatNormalMap) {
-      const clearcoatNormalMapDef = {
-        index: writer.processTexture(material.clearcoatNormalMap),
-        texCoord: material.clearcoatNormalMap.channel
-      };
-      writer.applyTextureTransform(clearcoatNormalMapDef, material.clearcoatNormalMap);
-      extensionDef.clearcoatNormalTexture = clearcoatNormalMapDef;
-    }
-    materialDef.extensions = materialDef.extensions || {};
-    materialDef.extensions[this.name] = extensionDef;
-    extensionsUsed[this.name] = true;
-  }
-}
-class GLTFMaterialsIridescenceExtension {
-  constructor(writer) {
-    this.writer = writer;
-    this.name = "KHR_materials_iridescence";
-  }
-  writeMaterial(material, materialDef) {
-    if (!material.isMeshPhysicalMaterial || material.iridescence === 0)
-      return;
-    const writer = this.writer;
-    const extensionsUsed = writer.extensionsUsed;
-    const extensionDef = {};
-    extensionDef.iridescenceFactor = material.iridescence;
-    if (material.iridescenceMap) {
-      const iridescenceMapDef = {
-        index: writer.processTexture(material.iridescenceMap),
-        texCoord: material.iridescenceMap.channel
-      };
-      writer.applyTextureTransform(iridescenceMapDef, material.iridescenceMap);
-      extensionDef.iridescenceTexture = iridescenceMapDef;
-    }
-    extensionDef.iridescenceIor = material.iridescenceIOR;
-    extensionDef.iridescenceThicknessMinimum = material.iridescenceThicknessRange[0];
-    extensionDef.iridescenceThicknessMaximum = material.iridescenceThicknessRange[1];
-    if (material.iridescenceThicknessMap) {
-      const iridescenceThicknessMapDef = {
-        index: writer.processTexture(material.iridescenceThicknessMap),
-        texCoord: material.iridescenceThicknessMap.channel
-      };
-      writer.applyTextureTransform(iridescenceThicknessMapDef, material.iridescenceThicknessMap);
-      extensionDef.iridescenceThicknessTexture = iridescenceThicknessMapDef;
-    }
-    materialDef.extensions = materialDef.extensions || {};
-    materialDef.extensions[this.name] = extensionDef;
-    extensionsUsed[this.name] = true;
-  }
-}
-class GLTFMaterialsTransmissionExtension {
-  constructor(writer) {
-    this.writer = writer;
-    this.name = "KHR_materials_transmission";
-  }
-  writeMaterial(material, materialDef) {
-    if (!material.isMeshPhysicalMaterial || material.transmission === 0)
-      return;
-    const writer = this.writer;
-    const extensionsUsed = writer.extensionsUsed;
-    const extensionDef = {};
-    extensionDef.transmissionFactor = material.transmission;
-    if (material.transmissionMap) {
-      const transmissionMapDef = {
-        index: writer.processTexture(material.transmissionMap),
-        texCoord: material.transmissionMap.channel
-      };
-      writer.applyTextureTransform(transmissionMapDef, material.transmissionMap);
-      extensionDef.transmissionTexture = transmissionMapDef;
-    }
-    materialDef.extensions = materialDef.extensions || {};
-    materialDef.extensions[this.name] = extensionDef;
-    extensionsUsed[this.name] = true;
-  }
-}
-class GLTFMaterialsVolumeExtension {
-  constructor(writer) {
-    this.writer = writer;
-    this.name = "KHR_materials_volume";
-  }
-  writeMaterial(material, materialDef) {
-    if (!material.isMeshPhysicalMaterial || material.transmission === 0)
-      return;
-    const writer = this.writer;
-    const extensionsUsed = writer.extensionsUsed;
-    const extensionDef = {};
-    extensionDef.thicknessFactor = material.thickness;
-    if (material.thicknessMap) {
-      const thicknessMapDef = {
-        index: writer.processTexture(material.thicknessMap),
-        texCoord: material.thicknessMap.channel
-      };
-      writer.applyTextureTransform(thicknessMapDef, material.thicknessMap);
-      extensionDef.thicknessTexture = thicknessMapDef;
-    }
-    extensionDef.attenuationDistance = material.attenuationDistance;
-    extensionDef.attenuationColor = material.attenuationColor.toArray();
-    materialDef.extensions = materialDef.extensions || {};
-    materialDef.extensions[this.name] = extensionDef;
-    extensionsUsed[this.name] = true;
-  }
-}
-class GLTFMaterialsIorExtension {
-  constructor(writer) {
-    this.writer = writer;
-    this.name = "KHR_materials_ior";
-  }
-  writeMaterial(material, materialDef) {
-    if (!material.isMeshPhysicalMaterial || material.ior === 1.5)
-      return;
-    const writer = this.writer;
-    const extensionsUsed = writer.extensionsUsed;
-    const extensionDef = {};
-    extensionDef.ior = material.ior;
-    materialDef.extensions = materialDef.extensions || {};
-    materialDef.extensions[this.name] = extensionDef;
-    extensionsUsed[this.name] = true;
-  }
-}
-class GLTFMaterialsSpecularExtension {
-  constructor(writer) {
-    this.writer = writer;
-    this.name = "KHR_materials_specular";
-  }
-  writeMaterial(material, materialDef) {
-    if (!material.isMeshPhysicalMaterial || material.specularIntensity === 1 && material.specularColor.equals(DEFAULT_SPECULAR_COLOR) && !material.specularIntensityMap && !material.specularColorTexture)
-      return;
-    const writer = this.writer;
-    const extensionsUsed = writer.extensionsUsed;
-    const extensionDef = {};
-    if (material.specularIntensityMap) {
-      const specularIntensityMapDef = {
-        index: writer.processTexture(material.specularIntensityMap),
-        texCoord: material.specularIntensityMap.channel
-      };
-      writer.applyTextureTransform(specularIntensityMapDef, material.specularIntensityMap);
-      extensionDef.specularTexture = specularIntensityMapDef;
-    }
-    if (material.specularColorMap) {
-      const specularColorMapDef = {
-        index: writer.processTexture(material.specularColorMap),
-        texCoord: material.specularColorMap.channel
-      };
-      writer.applyTextureTransform(specularColorMapDef, material.specularColorMap);
-      extensionDef.specularColorTexture = specularColorMapDef;
-    }
-    extensionDef.specularFactor = material.specularIntensity;
-    extensionDef.specularColorFactor = material.specularColor.toArray();
-    materialDef.extensions = materialDef.extensions || {};
-    materialDef.extensions[this.name] = extensionDef;
-    extensionsUsed[this.name] = true;
-  }
-}
-class GLTFMaterialsSheenExtension {
-  constructor(writer) {
-    this.writer = writer;
-    this.name = "KHR_materials_sheen";
-  }
-  writeMaterial(material, materialDef) {
-    if (!material.isMeshPhysicalMaterial || material.sheen == 0)
-      return;
-    const writer = this.writer;
-    const extensionsUsed = writer.extensionsUsed;
-    const extensionDef = {};
-    if (material.sheenRoughnessMap) {
-      const sheenRoughnessMapDef = {
-        index: writer.processTexture(material.sheenRoughnessMap),
-        texCoord: material.sheenRoughnessMap.channel
-      };
-      writer.applyTextureTransform(sheenRoughnessMapDef, material.sheenRoughnessMap);
-      extensionDef.sheenRoughnessTexture = sheenRoughnessMapDef;
-    }
-    if (material.sheenColorMap) {
-      const sheenColorMapDef = {
-        index: writer.processTexture(material.sheenColorMap),
-        texCoord: material.sheenColorMap.channel
-      };
-      writer.applyTextureTransform(sheenColorMapDef, material.sheenColorMap);
-      extensionDef.sheenColorTexture = sheenColorMapDef;
-    }
-    extensionDef.sheenRoughnessFactor = material.sheenRoughness;
-    extensionDef.sheenColorFactor = material.sheenColor.toArray();
-    materialDef.extensions = materialDef.extensions || {};
-    materialDef.extensions[this.name] = extensionDef;
-    extensionsUsed[this.name] = true;
-  }
-}
-class GLTFMaterialsAnisotropyExtension {
-  constructor(writer) {
-    this.writer = writer;
-    this.name = "KHR_materials_anisotropy";
-  }
-  writeMaterial(material, materialDef) {
-    if (!material.isMeshPhysicalMaterial || material.anisotropy == 0)
-      return;
-    const writer = this.writer;
-    const extensionsUsed = writer.extensionsUsed;
-    const extensionDef = {};
-    if (material.anisotropyMap) {
-      const anisotropyMapDef = { index: writer.processTexture(material.anisotropyMap) };
-      writer.applyTextureTransform(anisotropyMapDef, material.anisotropyMap);
-      extensionDef.anisotropyTexture = anisotropyMapDef;
-    }
-    extensionDef.anisotropyStrength = material.anisotropy;
-    extensionDef.anisotropyRotation = material.anisotropyRotation;
-    materialDef.extensions = materialDef.extensions || {};
-    materialDef.extensions[this.name] = extensionDef;
-    extensionsUsed[this.name] = true;
-  }
-}
-class GLTFMaterialsEmissiveStrengthExtension {
-  constructor(writer) {
-    this.writer = writer;
-    this.name = "KHR_materials_emissive_strength";
-  }
-  writeMaterial(material, materialDef) {
-    if (!material.isMeshStandardMaterial || material.emissiveIntensity === 1)
-      return;
-    const writer = this.writer;
-    const extensionsUsed = writer.extensionsUsed;
-    const extensionDef = {};
-    extensionDef.emissiveStrength = material.emissiveIntensity;
-    materialDef.extensions = materialDef.extensions || {};
-    materialDef.extensions[this.name] = extensionDef;
-    extensionsUsed[this.name] = true;
-  }
-}
-GLTFExporter.Utils = {
-  insertKeyframe: function(track, time) {
-    const tolerance = 1e-3;
-    const valueSize = track.getValueSize();
-    const times = new track.TimeBufferType(track.times.length + 1);
-    const values = new track.ValueBufferType(track.values.length + valueSize);
-    const interpolant = track.createInterpolant(new track.ValueBufferType(valueSize));
-    let index;
-    if (track.times.length === 0) {
-      times[0] = time;
-      for (let i = 0; i < valueSize; i++) {
-        values[i] = 0;
-      }
-      index = 0;
-    } else if (time < track.times[0]) {
-      if (Math.abs(track.times[0] - time) < tolerance)
-        return 0;
-      times[0] = time;
-      times.set(track.times, 1);
-      values.set(interpolant.evaluate(time), 0);
-      values.set(track.values, valueSize);
-      index = 0;
-    } else if (time > track.times[track.times.length - 1]) {
-      if (Math.abs(track.times[track.times.length - 1] - time) < tolerance) {
-        return track.times.length - 1;
-      }
-      times[times.length - 1] = time;
-      times.set(track.times, 0);
-      values.set(track.values, 0);
-      values.set(interpolant.evaluate(time), track.values.length);
-      index = times.length - 1;
-    } else {
-      for (let i = 0; i < track.times.length; i++) {
-        if (Math.abs(track.times[i] - time) < tolerance)
-          return i;
-        if (track.times[i] < time && track.times[i + 1] > time) {
-          times.set(track.times.slice(0, i + 1), 0);
-          times[i + 1] = time;
-          times.set(track.times.slice(i + 1), i + 2);
-          values.set(track.values.slice(0, (i + 1) * valueSize), 0);
-          values.set(interpolant.evaluate(time), (i + 1) * valueSize);
-          values.set(track.values.slice((i + 1) * valueSize), (i + 2) * valueSize);
-          index = i + 1;
-          break;
-        }
-      }
-    }
-    track.times = times;
-    track.values = values;
-    return index;
-  },
-  mergeMorphTargetTracks: function(clip, root) {
-    const tracks = [];
-    const mergedTracks = {};
-    const sourceTracks = clip.tracks;
-    for (let i = 0; i < sourceTracks.length; ++i) {
-      let sourceTrack = sourceTracks[i];
-      const sourceTrackBinding = three_module.PropertyBinding.parseTrackName(sourceTrack.name);
-      const sourceTrackNode = three_module.PropertyBinding.findNode(root, sourceTrackBinding.nodeName);
-      if (sourceTrackBinding.propertyName !== "morphTargetInfluences" || sourceTrackBinding.propertyIndex === void 0) {
-        tracks.push(sourceTrack);
-        continue;
-      }
-      if (sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete && sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear) {
-        if (sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) {
-          throw new Error("THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.");
-        }
-        console.warn("THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.");
-        sourceTrack = sourceTrack.clone();
-        sourceTrack.setInterpolation(three_module.InterpolateLinear);
-      }
-      const targetCount = sourceTrackNode.morphTargetInfluences.length;
-      const targetIndex = sourceTrackNode.morphTargetDictionary[sourceTrackBinding.propertyIndex];
-      if (targetIndex === void 0) {
-        throw new Error("THREE.GLTFExporter: Morph target name not found: " + sourceTrackBinding.propertyIndex);
-      }
-      let mergedTrack;
-      if (mergedTracks[sourceTrackNode.uuid] === void 0) {
-        mergedTrack = sourceTrack.clone();
-        const values = new mergedTrack.ValueBufferType(targetCount * mergedTrack.times.length);
-        for (let j = 0; j < mergedTrack.times.length; j++) {
-          values[j * targetCount + targetIndex] = mergedTrack.values[j];
-        }
-        mergedTrack.name = (sourceTrackBinding.nodeName || "") + ".morphTargetInfluences";
-        mergedTrack.values = values;
-        mergedTracks[sourceTrackNode.uuid] = mergedTrack;
-        tracks.push(mergedTrack);
-        continue;
-      }
-      const sourceInterpolant = sourceTrack.createInterpolant(new sourceTrack.ValueBufferType(1));
-      mergedTrack = mergedTracks[sourceTrackNode.uuid];
-      for (let j = 0; j < mergedTrack.times.length; j++) {
-        mergedTrack.values[j * targetCount + targetIndex] = sourceInterpolant.evaluate(mergedTrack.times[j]);
-      }
-      for (let j = 0; j < sourceTrack.times.length; j++) {
-        const keyframeIndex = this.insertKeyframe(mergedTrack, sourceTrack.times[j]);
-        mergedTrack.values[keyframeIndex * targetCount + targetIndex] = sourceTrack.values[j];
-      }
-    }
-    clip.tracks = tracks;
-    return clip;
-  }
-};
-
-
-// EXTERNAL MODULE: ./node_modules/fflate/esm/index.mjs + 1 modules
-var esm = __webpack_require__(92672);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/exporters/USDZExporter.js
-var USDZExporter_defProp = Object.defineProperty;
-var USDZExporter_defNormalProp = (obj, key, value) => key in obj ? USDZExporter_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var USDZExporter_publicField = (obj, key, value) => {
-  USDZExporter_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-class USDZExporter {
-  constructor() {
-    USDZExporter_publicField(this, "PRECISION", 7);
-    USDZExporter_publicField(this, "materials");
-    USDZExporter_publicField(this, "textures");
-    USDZExporter_publicField(this, "files");
-    this.materials = {};
-    this.textures = {};
-    this.files = {};
-  }
-  async parse(scene) {
-    const modelFileName = "model.usda";
-    this.files[modelFileName] = null;
-    let output = this.buildHeader();
-    scene.traverseVisible((object) => {
-      if (object instanceof three_module.Mesh && object.isMesh && object.material.isMeshStandardMaterial) {
-        const geometry = object.geometry;
-        const material = object.material;
-        const geometryFileName = "geometries/Geometry_" + geometry.id + ".usd";
-        if (!(geometryFileName in this.files)) {
-          const meshObject = this.buildMeshObject(geometry);
-          this.files[geometryFileName] = this.buildUSDFileAsString(meshObject);
-        }
-        if (!(material.uuid in this.materials)) {
-          this.materials[material.uuid] = material;
-        }
-        output += this.buildXform(object, geometry, material);
-      }
-    });
-    output += this.buildMaterials(this.materials);
-    this.files[modelFileName] = (0,esm/* strToU8 */.TD)(output);
-    output = null;
-    for (const id in this.textures) {
-      const texture = this.textures[id];
-      const color = id.split("_")[1];
-      const isRGBA = texture.format === 1023;
-      const canvas = this.imageToCanvas(texture.image, color);
-      const blob = await new Promise(
-        (resolve) => canvas == null ? void 0 : canvas.toBlob(resolve, isRGBA ? "image/png" : "image/jpeg", 1)
-      );
-      if (blob) {
-        this.files[`textures/Texture_${id}.${isRGBA ? "png" : "jpg"}`] = new Uint8Array(await blob.arrayBuffer());
-      }
-    }
-    let offset = 0;
-    for (const filename in this.files) {
-      const file = this.files[filename];
-      const headerSize = 34 + filename.length;
-      offset += headerSize;
-      const offsetMod64 = offset & 63;
-      if (offsetMod64 !== 4 && file !== null && file instanceof Uint8Array) {
-        const padLength = 64 - offsetMod64;
-        const padding = new Uint8Array(padLength);
-        this.files[filename] = [file, { extra: { 12345: padding } }];
-      }
-      if (file && typeof file.length === "number") {
-        offset = file.length;
-      }
-    }
-    return (0,esm/* zipSync */.Xo)(this.files, { level: 0 });
-  }
-  imageToCanvas(image, color) {
-    if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof OffscreenCanvas !== "undefined" && image instanceof OffscreenCanvas || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) {
-      const scale = 1024 / Math.max(image.width, image.height);
-      const canvas = document.createElement("canvas");
-      canvas.width = image.width * Math.min(1, scale);
-      canvas.height = image.height * Math.min(1, scale);
-      const context = canvas.getContext("2d");
-      context == null ? void 0 : context.drawImage(image, 0, 0, canvas.width, canvas.height);
-      if (color !== void 0) {
-        const hex = parseInt(color, 16);
-        const r = (hex >> 16 & 255) / 255;
-        const g = (hex >> 8 & 255) / 255;
-        const b = (hex & 255) / 255;
-        const imagedata = context == null ? void 0 : context.getImageData(0, 0, canvas.width, canvas.height);
-        if (imagedata) {
-          const data = imagedata == null ? void 0 : imagedata.data;
-          for (let i = 0; i < data.length; i += 4) {
-            data[i + 0] = data[i + 0] * r;
-            data[i + 1] = data[i + 1] * g;
-            data[i + 2] = data[i + 2] * b;
-          }
-          context == null ? void 0 : context.putImageData(imagedata, 0, 0);
-        }
-      }
-      return canvas;
-    }
-  }
-  buildHeader() {
-    return `#usda 1.0
-(
-    customLayerData = {
-        string creator = "Three.js USDZExporter"
-    }
-    metersPerUnit = 1
-    upAxis = "Y"
-)
-`;
-  }
-  buildUSDFileAsString(dataToInsert) {
-    let output = this.buildHeader();
-    output += dataToInsert;
-    return (0,esm/* strToU8 */.TD)(output);
-  }
-  // Xform
-  buildXform(object, geometry, material) {
-    const name = "Object_" + object.id;
-    const transform = this.buildMatrix(object.matrixWorld);
-    if (object.matrixWorld.determinant() < 0) {
-      console.warn("THREE.USDZExporter: USDZ does not support negative scales", object);
-    }
-    return `def Xform "${name}" (
-    prepend references = @./geometries/Geometry_${geometry.id}.usd@</Geometry>
-)
-{
-    matrix4d xformOp:transform = ${transform}
-    uniform token[] xformOpOrder = ["xformOp:transform"]
-    rel material:binding = </Materials/Material_${material.id}>
-}
-`;
-  }
-  buildMatrix(matrix) {
-    const array = matrix.elements;
-    return `( ${this.buildMatrixRow(array, 0)}, ${this.buildMatrixRow(array, 4)}, ${this.buildMatrixRow(
-      array,
-      8
-    )}, ${this.buildMatrixRow(array, 12)} )`;
-  }
-  buildMatrixRow(array, offset) {
-    return `(${array[offset + 0]}, ${array[offset + 1]}, ${array[offset + 2]}, ${array[offset + 3]})`;
-  }
-  // Mesh
-  buildMeshObject(geometry) {
-    const mesh = this.buildMesh(geometry);
-    return `
-def "Geometry"
-{
-  ${mesh}
-}
-`;
-  }
-  buildMesh(geometry) {
-    const name = "Geometry";
-    const attributes = geometry.attributes;
-    const count = attributes.position.count;
-    return `
-    def Mesh "${name}"
-    {
-        int[] faceVertexCounts = [${this.buildMeshVertexCount(geometry)}]
-        int[] faceVertexIndices = [${this.buildMeshVertexIndices(geometry)}]
-        normal3f[] normals = [${this.buildVector3Array(attributes.normal, count)}] (
-            interpolation = "vertex"
-        )
-        point3f[] points = [${this.buildVector3Array(attributes.position, count)}]
-        float2[] primvars:st = [${this.buildVector2Array(attributes.uv, count)}] (
-            interpolation = "vertex"
-        )
-        uniform token subdivisionScheme = "none"
-    }
-`;
-  }
-  buildMeshVertexCount(geometry) {
-    const count = geometry.index !== null ? geometry.index.array.length : geometry.attributes.position.count;
-    return Array(count / 3).fill(3).join(", ");
-  }
-  buildMeshVertexIndices(geometry) {
-    if (geometry.index !== null) {
-      return geometry.index.array.join(", ");
-    }
-    const array = [];
-    const length = geometry.attributes.position.count;
-    for (let i = 0; i < length; i++) {
-      array.push(i);
-    }
-    return array.join(", ");
-  }
-  buildVector3Array(attribute, count) {
-    if (attribute === void 0) {
-      console.warn("USDZExporter: Normals missing.");
-      return Array(count).fill("(0, 0, 0)").join(", ");
-    }
-    const array = [];
-    const data = attribute.array;
-    for (let i = 0; i < data.length; i += 3) {
-      array.push(
-        `(${data[i + 0].toPrecision(this.PRECISION)}, ${data[i + 1].toPrecision(this.PRECISION)}, ${data[i + 2].toPrecision(this.PRECISION)})`
-      );
-    }
-    return array.join(", ");
-  }
-  buildVector2Array(attribute, count) {
-    if (attribute === void 0) {
-      console.warn("USDZExporter: UVs missing.");
-      return Array(count).fill("(0, 0)").join(", ");
-    }
-    const array = [];
-    const data = attribute.array;
-    for (let i = 0; i < data.length; i += 2) {
-      array.push(`(${data[i + 0].toPrecision(this.PRECISION)}, ${1 - data[i + 1].toPrecision(this.PRECISION)})`);
-    }
-    return array.join(", ");
-  }
-  // Materials
-  buildMaterials(materials) {
-    const array = [];
-    for (const uuid in materials) {
-      const material = materials[uuid];
-      array.push(this.buildMaterial(material));
-    }
-    return `def "Materials"
-{
-${array.join("")}
-}
-`;
-  }
-  buildMaterial(material) {
-    const pad = "            ";
-    const inputs = [];
-    const samplers = [];
-    if (material.map !== null) {
-      inputs.push(
-        `${pad}color3f inputs:diffuseColor.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:rgb>`
-      );
-      samplers.push(this.buildTexture(material, material.map, "diffuse", material.color));
-    } else {
-      inputs.push(`${pad}color3f inputs:diffuseColor = ${this.buildColor(material.color)}`);
-    }
-    if (material.emissiveMap !== null) {
-      inputs.push(
-        `${pad}color3f inputs:emissiveColor.connect = </Materials/Material_${material.id}/Texture_${material.emissiveMap.id}_emissive.outputs:rgb>`
-      );
-      samplers.push(this.buildTexture(material, material.emissiveMap, "emissive"));
-    } else if (material.emissive.getHex() > 0) {
-      inputs.push(`${pad}color3f inputs:emissiveColor = ${this.buildColor(material.emissive)}`);
-    }
-    if (material.normalMap !== null) {
-      inputs.push(
-        `${pad}normal3f inputs:normal.connect = </Materials/Material_${material.id}/Texture_${material.normalMap.id}_normal.outputs:rgb>`
-      );
-      samplers.push(this.buildTexture(material, material.normalMap, "normal"));
-    }
-    if (material.aoMap !== null) {
-      inputs.push(
-        `${pad}float inputs:occlusion.connect = </Materials/Material_${material.id}/Texture_${material.aoMap.id}_occlusion.outputs:r>`
-      );
-      samplers.push(this.buildTexture(material, material.aoMap, "occlusion"));
-    }
-    if (material.roughnessMap !== null && material.roughness === 1) {
-      inputs.push(
-        `${pad}float inputs:roughness.connect = </Materials/Material_${material.id}/Texture_${material.roughnessMap.id}_roughness.outputs:g>`
-      );
-      samplers.push(this.buildTexture(material, material.roughnessMap, "roughness"));
-    } else {
-      inputs.push(`${pad}float inputs:roughness = ${material.roughness}`);
-    }
-    if (material.metalnessMap !== null && material.metalness === 1) {
-      inputs.push(
-        `${pad}float inputs:metallic.connect = </Materials/Material_${material.id}/Texture_${material.metalnessMap.id}_metallic.outputs:b>`
-      );
-      samplers.push(this.buildTexture(material, material.metalnessMap, "metallic"));
-    } else {
-      inputs.push(`${pad}float inputs:metallic = ${material.metalness}`);
-    }
-    inputs.push(`${pad}float inputs:opacity = ${material.opacity}`);
-    if (material instanceof three_module.MeshPhysicalMaterial) {
-      inputs.push(`${pad}float inputs:clearcoat = ${material.clearcoat}`);
-      inputs.push(`${pad}float inputs:clearcoatRoughness = ${material.clearcoatRoughness}`);
-      inputs.push(`${pad}float inputs:ior = ${material.ior}`);
-    }
-    return `
-    def Material "Material_${material.id}"
-    {
-        def Shader "PreviewSurface"
-        {
-            uniform token info:id = "UsdPreviewSurface"
-${inputs.join("\n")}
-            int inputs:useSpecularWorkflow = 0
-            token outputs:surface
-        }
-        token outputs:surface.connect = </Materials/Material_${material.id}/PreviewSurface.outputs:surface>
-        token inputs:frame:stPrimvarName = "st"
-        def Shader "uvReader_st"
-        {
-            uniform token info:id = "UsdPrimvarReader_float2"
-            token inputs:varname.connect = </Materials/Material_${material.id}.inputs:frame:stPrimvarName>
-            float2 inputs:fallback = (0.0, 0.0)
-            float2 outputs:result
-        }
-${samplers.join("\n")}
-    }
-`;
-  }
-  buildTexture(material, texture, mapType, color) {
-    const id = texture.id + (color ? "_" + color.getHexString() : "");
-    const isRGBA = texture.format === 1023;
-    this.textures[id] = texture;
-    return `
-      def Shader "Transform2d_${mapType}" (
-          sdrMetadata = {
-              string role = "math"
-          }
-      )
-      {
-          uniform token info:id = "UsdTransform2d"
-          float2 inputs:in.connect = </Materials/Material_${material.id}/uvReader_st.outputs:result>
-          float2 inputs:scale = ${this.buildVector2(texture.repeat)}
-          float2 inputs:translation = ${this.buildVector2(texture.offset)}
-          float2 outputs:result
-      }
-      def Shader "Texture_${texture.id}_${mapType}"
-      {
-          uniform token info:id = "UsdUVTexture"
-          asset inputs:file = @textures/Texture_${id}.${isRGBA ? "png" : "jpg"}@
-          float2 inputs:st.connect = </Materials/Material_${material.id}/Transform2d_${mapType}.outputs:result>
-          token inputs:wrapS = "repeat"
-          token inputs:wrapT = "repeat"
-          float outputs:r
-          float outputs:g
-          float outputs:b
-          float3 outputs:rgb
-      }`;
-  }
-  buildColor(color) {
-    return `(${color.r}, ${color.g}, ${color.b})`;
-  }
-  buildVector2(vector) {
-    return `(${vector.x}, ${vector.y})`;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/exporters/PLYExporter.js
-
-class PLYExporter {
-  parse(object, onDone, options) {
-    if (onDone && typeof onDone === "object") {
-      console.warn(
-        'THREE.PLYExporter: The options parameter is now the third argument to the "parse" function. See the documentation for the new API.'
-      );
-      options = onDone;
-      onDone = void 0;
-    }
-    const defaultOptions = {
-      binary: false,
-      excludeAttributes: [],
-      // normal, uv, color, index
-      littleEndian: false
-    };
-    options = Object.assign(defaultOptions, options);
-    const excludeAttributes = options.excludeAttributes;
-    let includeNormals = false;
-    let includeColors = false;
-    let includeUVs = false;
-    let vertexCount = 0;
-    let faceCount = 0;
-    object.traverse(function(child) {
-      if (child instanceof three_module.Mesh && child.isMesh) {
-        const mesh = child;
-        const geometry = mesh.geometry;
-        if (!geometry.isBufferGeometry) {
-          throw new Error("THREE.PLYExporter: Geometry is not of type THREE.BufferGeometry.");
-        }
-        const vertices = geometry.getAttribute("position");
-        const normals = geometry.getAttribute("normal");
-        const uvs = geometry.getAttribute("uv");
-        const colors = geometry.getAttribute("color");
-        const indices = geometry.getIndex();
-        if (vertices === void 0) {
-          return;
-        }
-        vertexCount += vertices.count;
-        faceCount += indices ? indices.count / 3 : vertices.count / 3;
-        if (normals !== void 0)
-          includeNormals = true;
-        if (uvs !== void 0)
-          includeUVs = true;
-        if (colors !== void 0)
-          includeColors = true;
-      }
-    });
-    const includeIndices = (excludeAttributes == null ? void 0 : excludeAttributes.indexOf("index")) === -1;
-    includeNormals = includeNormals && (excludeAttributes == null ? void 0 : excludeAttributes.indexOf("normal")) === -1;
-    includeColors = includeColors && (excludeAttributes == null ? void 0 : excludeAttributes.indexOf("color")) === -1;
-    includeUVs = includeUVs && (excludeAttributes == null ? void 0 : excludeAttributes.indexOf("uv")) === -1;
-    if (includeIndices && faceCount !== Math.floor(faceCount)) {
-      console.error(
-        "PLYExporter: Failed to generate a valid PLY file with triangle indices because the number of indices is not divisible by 3."
-      );
-      return null;
-    }
-    const indexByteCount = 4;
-    let header = `ply
-format ${options.binary ? options.littleEndian ? "binary_little_endian" : "binary_big_endian" : "ascii"} 1.0
-element vertex ${vertexCount}
-property float x
-property float y
-property float z
-`;
-    if (includeNormals) {
-      header += "property float nx\nproperty float ny\nproperty float nz\n";
-    }
-    if (includeUVs) {
-      header += "property float s\nproperty float t\n";
-    }
-    if (includeColors) {
-      header += "property uchar red\nproperty uchar green\nproperty uchar blue\n";
-    }
-    if (includeIndices) {
-      header += `${`element face ${faceCount}
-`}property list uchar int vertex_index
-`;
-    }
-    header += "end_header\n";
-    const vertex = new three_module.Vector3();
-    const normalMatrixWorld = new three_module.Matrix3();
-    let result = null;
-    if (options.binary) {
-      const headerBin = new TextEncoder().encode(header);
-      const vertexListLength = vertexCount * (4 * 3 + (includeNormals ? 4 * 3 : 0) + (includeColors ? 3 : 0) + (includeUVs ? 4 * 2 : 0));
-      const faceListLength = includeIndices ? faceCount * (indexByteCount * 3 + 1) : 0;
-      const output = new DataView(new ArrayBuffer(headerBin.length + vertexListLength + faceListLength));
-      new Uint8Array(output.buffer).set(headerBin, 0);
-      let vOffset = headerBin.length;
-      let fOffset = headerBin.length + vertexListLength;
-      let writtenVertices = 0;
-      this.traverseMeshes(object, function(mesh, geometry) {
-        const vertices = geometry.getAttribute("position");
-        const normals = geometry.getAttribute("normal");
-        const uvs = geometry.getAttribute("uv");
-        const colors = geometry.getAttribute("color");
-        const indices = geometry.getIndex();
-        normalMatrixWorld.getNormalMatrix(mesh.matrixWorld);
-        for (let i = 0, l = vertices.count; i < l; i++) {
-          vertex.x = vertices.getX(i);
-          vertex.y = vertices.getY(i);
-          vertex.z = vertices.getZ(i);
-          vertex.applyMatrix4(mesh.matrixWorld);
-          output.setFloat32(vOffset, vertex.x, options.littleEndian);
-          vOffset += 4;
-          output.setFloat32(vOffset, vertex.y, options.littleEndian);
-          vOffset += 4;
-          output.setFloat32(vOffset, vertex.z, options.littleEndian);
-          vOffset += 4;
-          if (includeNormals) {
-            if (normals != null) {
-              vertex.x = normals.getX(i);
-              vertex.y = normals.getY(i);
-              vertex.z = normals.getZ(i);
-              vertex.applyMatrix3(normalMatrixWorld).normalize();
-              output.setFloat32(vOffset, vertex.x, options.littleEndian);
-              vOffset += 4;
-              output.setFloat32(vOffset, vertex.y, options.littleEndian);
-              vOffset += 4;
-              output.setFloat32(vOffset, vertex.z, options.littleEndian);
-              vOffset += 4;
-            } else {
-              output.setFloat32(vOffset, 0, options.littleEndian);
-              vOffset += 4;
-              output.setFloat32(vOffset, 0, options.littleEndian);
-              vOffset += 4;
-              output.setFloat32(vOffset, 0, options.littleEndian);
-              vOffset += 4;
-            }
-          }
-          if (includeUVs) {
-            if (uvs != null) {
-              output.setFloat32(vOffset, uvs.getX(i), options.littleEndian);
-              vOffset += 4;
-              output.setFloat32(vOffset, uvs.getY(i), options.littleEndian);
-              vOffset += 4;
-            } else if (!includeUVs) {
-              output.setFloat32(vOffset, 0, options.littleEndian);
-              vOffset += 4;
-              output.setFloat32(vOffset, 0, options.littleEndian);
-              vOffset += 4;
-            }
-          }
-          if (includeColors) {
-            if (colors != null) {
-              output.setUint8(vOffset, Math.floor(colors.getX(i) * 255));
-              vOffset += 1;
-              output.setUint8(vOffset, Math.floor(colors.getY(i) * 255));
-              vOffset += 1;
-              output.setUint8(vOffset, Math.floor(colors.getZ(i) * 255));
-              vOffset += 1;
-            } else {
-              output.setUint8(vOffset, 255);
-              vOffset += 1;
-              output.setUint8(vOffset, 255);
-              vOffset += 1;
-              output.setUint8(vOffset, 255);
-              vOffset += 1;
-            }
-          }
-        }
-        if (includeIndices) {
-          if (indices !== null) {
-            for (let i = 0, l = indices.count; i < l; i += 3) {
-              output.setUint8(fOffset, 3);
-              fOffset += 1;
-              output.setUint32(fOffset, indices.getX(i + 0) + writtenVertices, options.littleEndian);
-              fOffset += indexByteCount;
-              output.setUint32(fOffset, indices.getX(i + 1) + writtenVertices, options.littleEndian);
-              fOffset += indexByteCount;
-              output.setUint32(fOffset, indices.getX(i + 2) + writtenVertices, options.littleEndian);
-              fOffset += indexByteCount;
-            }
-          } else {
-            for (let i = 0, l = vertices.count; i < l; i += 3) {
-              output.setUint8(fOffset, 3);
-              fOffset += 1;
-              output.setUint32(fOffset, writtenVertices + i, options.littleEndian);
-              fOffset += indexByteCount;
-              output.setUint32(fOffset, writtenVertices + i + 1, options.littleEndian);
-              fOffset += indexByteCount;
-              output.setUint32(fOffset, writtenVertices + i + 2, options.littleEndian);
-              fOffset += indexByteCount;
-            }
-          }
-        }
-        writtenVertices += vertices.count;
-      });
-      result = output.buffer;
-    } else {
-      let writtenVertices = 0;
-      let vertexList = "";
-      let faceList = "";
-      this.traverseMeshes(object, function(mesh, geometry) {
-        const vertices = geometry.getAttribute("position");
-        const normals = geometry.getAttribute("normal");
-        const uvs = geometry.getAttribute("uv");
-        const colors = geometry.getAttribute("color");
-        const indices = geometry.getIndex();
-        normalMatrixWorld.getNormalMatrix(mesh.matrixWorld);
-        for (let i = 0, l = vertices.count; i < l; i++) {
-          vertex.x = vertices.getX(i);
-          vertex.y = vertices.getY(i);
-          vertex.z = vertices.getZ(i);
-          vertex.applyMatrix4(mesh.matrixWorld);
-          let line = vertex.x + " " + vertex.y + " " + vertex.z;
-          if (includeNormals) {
-            if (normals != null) {
-              vertex.x = normals.getX(i);
-              vertex.y = normals.getY(i);
-              vertex.z = normals.getZ(i);
-              vertex.applyMatrix3(normalMatrixWorld).normalize();
-              line += " " + vertex.x + " " + vertex.y + " " + vertex.z;
-            } else {
-              line += " 0 0 0";
-            }
-          }
-          if (includeUVs) {
-            if (uvs != null) {
-              line += " " + uvs.getX(i) + " " + uvs.getY(i);
-            } else if (includeUVs) {
-              line += " 0 0";
-            }
-          }
-          if (includeColors) {
-            if (colors != null) {
-              line += " " + Math.floor(colors.getX(i) * 255) + " " + Math.floor(colors.getY(i) * 255) + " " + Math.floor(colors.getZ(i) * 255);
-            } else {
-              line += " 255 255 255";
-            }
-          }
-          vertexList += line + "\n";
-        }
-        if (includeIndices) {
-          if (indices !== null) {
-            for (let i = 0, l = indices.count; i < l; i += 3) {
-              faceList += `3 ${indices.getX(i + 0) + writtenVertices}`;
-              faceList += ` ${indices.getX(i + 1) + writtenVertices}`;
-              faceList += ` ${indices.getX(i + 2) + writtenVertices}
-`;
-            }
-          } else {
-            for (let i = 0, l = vertices.count; i < l; i += 3) {
-              faceList += `3 ${writtenVertices + i} ${writtenVertices + i + 1} ${writtenVertices + i + 2}
-`;
-            }
-          }
-          faceCount += indices ? indices.count / 3 : vertices.count / 3;
-        }
-        writtenVertices += vertices.count;
-      });
-      result = `${header}${vertexList}${includeIndices ? `${faceList}
-` : "\n"}`;
-    }
-    if (typeof onDone === "function") {
-      requestAnimationFrame(() => onDone && onDone(typeof result === "string" ? result : ""));
-    }
-    return result;
-  }
-  // Iterate over the valid meshes in the object
-  traverseMeshes(object, cb) {
-    object.traverse(function(child) {
-      if (child instanceof three_module.Mesh && child.isMesh) {
-        const mesh = child;
-        const geometry = mesh.geometry;
-        if (!geometry.isBufferGeometry) {
-          throw new Error("THREE.PLYExporter: Geometry is not of type THREE.BufferGeometry.");
-        }
-        if (geometry.hasAttribute("position")) {
-          cb(mesh, geometry);
-        }
-      }
-    });
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/exporters/DRACOExporter.js
-var DRACOExporter_defProp = Object.defineProperty;
-var DRACOExporter_defNormalProp = (obj, key, value) => key in obj ? DRACOExporter_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var DRACOExporter_publicField = (obj, key, value) => {
-  DRACOExporter_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-const _DRACOExporter = class {
-  parse(object, options = {
-    decodeSpeed: 5,
-    encodeSpeed: 5,
-    encoderMethod: _DRACOExporter.MESH_EDGEBREAKER_ENCODING,
-    quantization: [16, 8, 8, 8, 8],
-    exportUvs: true,
-    exportNormals: true,
-    exportColor: false
-  }) {
-    if (object instanceof three_module.BufferGeometry && object.isBufferGeometry) {
-      throw new Error("DRACOExporter: The first parameter of parse() is now an instance of Mesh or Points.");
-    }
-    if (DracoEncoderModule === void 0) {
-      throw new Error("THREE.DRACOExporter: required the draco_encoder to work.");
-    }
-    const geometry = object.geometry;
-    const dracoEncoder = DracoEncoderModule();
-    const encoder = new dracoEncoder.Encoder();
-    let builder;
-    let dracoObject;
-    if (!geometry.isBufferGeometry) {
-      throw new Error("THREE.DRACOExporter.parse(geometry, options): geometry is not a THREE.BufferGeometry instance.");
-    }
-    if (object instanceof three_module.Mesh && object.isMesh) {
-      builder = new dracoEncoder.MeshBuilder();
-      dracoObject = new dracoEncoder.Mesh();
-      const vertices = geometry.getAttribute("position");
-      builder.AddFloatAttributeToMesh(
-        dracoObject,
-        dracoEncoder.POSITION,
-        vertices.count,
-        vertices.itemSize,
-        vertices.array
-      );
-      const faces = geometry.getIndex();
-      if (faces !== null) {
-        builder.AddFacesToMesh(dracoObject, faces.count / 3, faces.array);
-      } else {
-        const faces2 = new (vertices.count > 65535 ? Uint32Array : Uint16Array)(vertices.count);
-        for (let i = 0; i < faces2.length; i++) {
-          faces2[i] = i;
-        }
-        builder.AddFacesToMesh(dracoObject, vertices.count, faces2);
-      }
-      if (options.exportNormals) {
-        const normals = geometry.getAttribute("normal");
-        if (normals !== void 0) {
-          builder.AddFloatAttributeToMesh(
-            dracoObject,
-            dracoEncoder.NORMAL,
-            normals.count,
-            normals.itemSize,
-            normals.array
-          );
-        }
-      }
-      if (options.exportUvs) {
-        const uvs = geometry.getAttribute("uv");
-        if (uvs !== void 0) {
-          builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.TEX_COORD, uvs.count, uvs.itemSize, uvs.array);
-        }
-      }
-      if (options.exportColor) {
-        const colors = geometry.getAttribute("color");
-        if (colors !== void 0) {
-          builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, colors.array);
-        }
-      }
-    } else if (object instanceof three_module.Points && object.isPoints) {
-      builder = new dracoEncoder.PointCloudBuilder();
-      dracoObject = new dracoEncoder.PointCloud();
-      const vertices = geometry.getAttribute("position");
-      builder.AddFloatAttribute(dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array);
-      if (options.exportColor) {
-        const colors = geometry.getAttribute("color");
-        if (colors !== void 0) {
-          builder.AddFloatAttribute(dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, colors.array);
-        }
-      }
-    } else {
-      throw new Error("DRACOExporter: Unsupported object type.");
-    }
-    const encodedData = new dracoEncoder.DracoInt8Array();
-    const encodeSpeed = options.encodeSpeed !== void 0 ? options.encodeSpeed : 5;
-    const decodeSpeed = options.decodeSpeed !== void 0 ? options.decodeSpeed : 5;
-    encoder.SetSpeedOptions(encodeSpeed, decodeSpeed);
-    if (options.encoderMethod !== void 0) {
-      encoder.SetEncodingMethod(options.encoderMethod);
-    }
-    if (options.quantization !== void 0) {
-      for (let i = 0; i < 5; i++) {
-        if (options.quantization[i] !== void 0) {
-          encoder.SetAttributeQuantization(i, options.quantization[i]);
-        }
-      }
-    }
-    let length;
-    if (object instanceof three_module.Mesh && object.isMesh) {
-      length = encoder.EncodeMeshToDracoBuffer(dracoObject, encodedData);
-    } else {
-      length = encoder.EncodePointCloudToDracoBuffer(dracoObject, true, encodedData);
-    }
-    dracoEncoder.destroy(dracoObject);
-    if (length === 0) {
-      throw new Error("THREE.DRACOExporter: Draco encoding failed.");
-    }
-    const outputData = new Int8Array(new ArrayBuffer(length));
-    for (let i = 0; i < length; i++) {
-      outputData[i] = encodedData.GetValue(i);
-    }
-    dracoEncoder.destroy(encodedData);
-    dracoEncoder.destroy(encoder);
-    dracoEncoder.destroy(builder);
-    return outputData;
-  }
-};
-let DRACOExporter = _DRACOExporter;
-// Encoder methods
-DRACOExporter_publicField(DRACOExporter, "MESH_EDGEBREAKER_ENCODING", 1);
-DRACOExporter_publicField(DRACOExporter, "MESH_SEQUENTIAL_ENCODING", 0);
-// Geometry type
-DRACOExporter_publicField(DRACOExporter, "POINT_CLOUD", 0);
-DRACOExporter_publicField(DRACOExporter, "TRIANGULAR_MESH", 1);
-// Attribute type
-DRACOExporter_publicField(DRACOExporter, "INVALID", -1);
-DRACOExporter_publicField(DRACOExporter, "POSITION", 0);
-DRACOExporter_publicField(DRACOExporter, "NORMAL", 1);
-DRACOExporter_publicField(DRACOExporter, "COLOR", 2);
-DRACOExporter_publicField(DRACOExporter, "TEX_COORD", 3);
-DRACOExporter_publicField(DRACOExporter, "GENERIC", 4);
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/exporters/ColladaExporter.js
-var ColladaExporter_defProp = Object.defineProperty;
-var ColladaExporter_defNormalProp = (obj, key, value) => key in obj ? ColladaExporter_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var ColladaExporter_publicField = (obj, key, value) => {
-  ColladaExporter_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-class ColladaExporter {
-  constructor() {
-    ColladaExporter_publicField(this, "options");
-    ColladaExporter_publicField(this, "geometryInfo");
-    ColladaExporter_publicField(this, "materialMap");
-    ColladaExporter_publicField(this, "imageMap");
-    ColladaExporter_publicField(this, "textures");
-    ColladaExporter_publicField(this, "libraryImages");
-    ColladaExporter_publicField(this, "libraryGeometries");
-    ColladaExporter_publicField(this, "libraryEffects");
-    ColladaExporter_publicField(this, "libraryMaterials");
-    ColladaExporter_publicField(this, "canvas");
-    ColladaExporter_publicField(this, "ctx");
-    ColladaExporter_publicField(this, "transMat");
-    ColladaExporter_publicField(this, "getFuncs", ["getX", "getY", "getZ", "getW"]);
-    this.options = {
-      version: "1.4.1",
-      author: null,
-      textureDirectory: "",
-      upAxis: "Y_UP",
-      unitName: null,
-      unitMeter: null
-    };
-    this.geometryInfo = /* @__PURE__ */ new WeakMap();
-    this.materialMap = /* @__PURE__ */ new WeakMap();
-    this.imageMap = /* @__PURE__ */ new WeakMap();
-    this.textures = [];
-    this.libraryImages = [];
-    this.libraryGeometries = [];
-    this.libraryEffects = [];
-    this.libraryMaterials = [];
-    this.canvas = null;
-    this.ctx = null;
-    this.transMat = null;
-  }
-  parse(object, onDone, options = {}) {
-    this.options = { ...this.options, ...options };
-    if (this.options.upAxis.match(/^[XYZ]_UP$/) === null) {
-      console.error("ColladaExporter: Invalid upAxis: valid values are X_UP, Y_UP or Z_UP.");
-      return null;
-    }
-    if (this.options.unitName !== null && this.options.unitMeter === null) {
-      console.error("ColladaExporter: unitMeter needs to be specified if unitName is specified.");
-      return null;
-    }
-    if (this.options.unitMeter !== null && this.options.unitName === null) {
-      console.error("ColladaExporter: unitName needs to be specified if unitMeter is specified.");
-      return null;
-    }
-    if (this.options.textureDirectory !== "") {
-      this.options.textureDirectory = `${this.options.textureDirectory}/`.replace(/\\/g, "/").replace(/\/+/g, "/");
-    }
-    if (this.options.version !== "1.4.1" && this.options.version !== "1.5.0") {
-      console.warn(`ColladaExporter : Version ${this.options.version} not supported for export. Only 1.4.1 and 1.5.0.`);
-      return null;
-    }
-    const libraryVisualScenes = this.processObject(object);
-    const specLink = this.options.version === "1.4.1" ? "http://www.collada.org/2005/11/COLLADASchema" : "https://www.khronos.org/collada/";
-    let dae = `<?xml version="1.0" encoding="UTF-8" standalone="no" ?>${`<COLLADA xmlns="${specLink}" version="${this.options.version}">`}<asset><contributor><authoring_tool>three.js Collada Exporter</authoring_tool>${this.options.author !== null ? `<author>${this.options.author}</author>` : ""}</contributor>${`<created>${(/* @__PURE__ */ new Date()).toISOString()}</created>`}${`<modified>${(/* @__PURE__ */ new Date()).toISOString()}</modified>`}<up_axis>Y_UP</up_axis></asset>`;
-    dae += `<library_images>${this.libraryImages.join("")}</library_images>`;
-    dae += `<library_effects>${this.libraryEffects.join("")}</library_effects>`;
-    dae += `<library_materials>${this.libraryMaterials.join("")}</library_materials>`;
-    dae += `<library_geometries>${this.libraryGeometries.join("")}</library_geometries>`;
-    dae += `<library_visual_scenes><visual_scene id="Scene" name="scene">${libraryVisualScenes}</visual_scene></library_visual_scenes>`;
-    dae += '<scene><instance_visual_scene url="#Scene"/></scene>';
-    dae += "</COLLADA>";
-    const res = {
-      data: this.format(dae),
-      textures: this.textures
-    };
-    if (typeof onDone === "function") {
-      requestAnimationFrame(() => onDone(res));
-    }
-    return res;
-  }
-  // Convert the urdf xml into a well-formatted, indented format
-  format(urdf) {
-    var _a, _b;
-    const IS_END_TAG = /^<\//;
-    const IS_SELF_CLOSING = /(\?>$)|(\/>$)/;
-    const HAS_TEXT = /<[^>]+>[^<]*<\/[^<]+>/;
-    const pad = (ch, num) => num > 0 ? ch + pad(ch, num - 1) : "";
-    let tagnum = 0;
-    return (_b = (_a = urdf.match(/(<[^>]+>[^<]+<\/[^<]+>)|(<[^>]+>)/g)) == null ? void 0 : _a.map((tag) => {
-      if (!HAS_TEXT.test(tag) && !IS_SELF_CLOSING.test(tag) && IS_END_TAG.test(tag)) {
-        tagnum--;
-      }
-      const res = `${pad("  ", tagnum)}${tag}`;
-      if (!HAS_TEXT.test(tag) && !IS_SELF_CLOSING.test(tag) && !IS_END_TAG.test(tag)) {
-        tagnum++;
-      }
-      return res;
-    }).join("\n")) != null ? _b : "";
-  }
-  // Convert an image into a png format for saving
-  base64ToBuffer(str) {
-    const b = atob(str);
-    const buf = new Uint8Array(b.length);
-    for (let i = 0, l = buf.length; i < l; i++) {
-      buf[i] = b.charCodeAt(i);
-    }
-    return buf;
-  }
-  imageToData(image, ext) {
-    var _a;
-    this.canvas = this.canvas || document.createElement("canvas");
-    this.ctx = this.ctx || this.canvas.getContext("2d");
-    this.canvas.width = image.width instanceof SVGAnimatedLength ? 0 : image.width;
-    this.canvas.height = image.height instanceof SVGAnimatedLength ? 0 : image.height;
-    (_a = this.ctx) == null ? void 0 : _a.drawImage(image, 0, 0);
-    const base64data = this.canvas.toDataURL(`image/${ext}`, 1).replace(/^data:image\/(png|jpg);base64,/, "");
-    return this.base64ToBuffer(base64data);
-  }
-  // gets the attribute array. Generate a new array if the attribute is interleaved
-  attrBufferToArray(attr) {
-    if (attr instanceof three_module.InterleavedBufferAttribute && attr.isInterleavedBufferAttribute) {
-      const TypedArrayConstructor = attr.array.constructor;
-      const arr = new TypedArrayConstructor(attr.count * attr.itemSize);
-      const size = attr.itemSize;
-      for (let i = 0, l = attr.count; i < l; i++) {
-        for (let j = 0; j < size; j++) {
-          arr[i * size + j] = attr[this.getFuncs[j]](i);
-        }
-      }
-      return arr;
-    } else {
-      return attr.array;
-    }
-  }
-  // Returns an array of the same type starting at the `st` index,
-  // and `ct` length
-  subArray(arr, st, ct) {
-    if (Array.isArray(arr)) {
-      return arr.slice(st, st + ct);
-    } else {
-      const TypedArrayConstructor = arr.constructor;
-      return new TypedArrayConstructor(arr.buffer, st * arr.BYTES_PER_ELEMENT, ct);
-    }
-  }
-  // Returns the string for a geometry's attribute
-  getAttribute(attr, name, params, type) {
-    const array = this.attrBufferToArray(attr);
-    const res = Array.isArray(array) ? `${`<source id="${name}"><float_array id="${name}-array" count="${array.length}">` + array.join(" ")}</float_array><technique_common>${`<accessor source="#${name}-array" count="${Math.floor(
-      array.length / attr.itemSize
-    )}" stride="${attr.itemSize}">`}${params.map((n) => `<param name="${n}" type="${type}" />`).join("")}</accessor></technique_common></source>` : "";
-    return res;
-  }
-  // Returns the string for a node's transform information
-  getTransform(o) {
-    o.updateMatrix();
-    this.transMat = this.transMat || new three_module.Matrix4();
-    this.transMat.copy(o.matrix);
-    this.transMat.transpose();
-    return `<matrix>${this.transMat.toArray().join(" ")}</matrix>`;
-  }
-  // Process the given piece of geometry into the geometry library
-  // Returns the mesh id
-  processGeometry(g) {
-    let info = this.geometryInfo.get(g);
-    if (!info) {
-      const bufferGeometry = g;
-      if (!bufferGeometry.isBufferGeometry) {
-        throw new Error("THREE.ColladaExporter: Geometry is not of type THREE.BufferGeometry.");
-      }
-      const meshid = `Mesh${this.libraryGeometries.length + 1}`;
-      const indexCount = bufferGeometry.index ? bufferGeometry.index.count * bufferGeometry.index.itemSize : bufferGeometry.attributes.position.count;
-      const groups = bufferGeometry.groups != null && bufferGeometry.groups.length !== 0 ? bufferGeometry.groups : [{ start: 0, count: indexCount, materialIndex: 0 }];
-      const gname = g.name ? ` name="${g.name}"` : "";
-      let gnode = `<geometry id="${meshid}"${gname}><mesh>`;
-      const posName = `${meshid}-position`;
-      const vertName = `${meshid}-vertices`;
-      gnode += this.getAttribute(bufferGeometry.attributes.position, posName, ["X", "Y", "Z"], "float");
-      gnode += `<vertices id="${vertName}"><input semantic="POSITION" source="#${posName}" /></vertices>`;
-      let triangleInputs = `<input semantic="VERTEX" source="#${vertName}" offset="0" />`;
-      if ("normal" in bufferGeometry.attributes) {
-        const normName = `${meshid}-normal`;
-        gnode += this.getAttribute(bufferGeometry.attributes.normal, normName, ["X", "Y", "Z"], "float");
-        triangleInputs += `<input semantic="NORMAL" source="#${normName}" offset="0" />`;
-      }
-      if ("uv" in bufferGeometry.attributes) {
-        const uvName = `${meshid}-texcoord`;
-        gnode += this.getAttribute(bufferGeometry.attributes.uv, uvName, ["S", "T"], "float");
-        triangleInputs += `<input semantic="TEXCOORD" source="#${uvName}" offset="0" set="0" />`;
-      }
-      if ("uv2" in bufferGeometry.attributes) {
-        const uvName = `${meshid}-texcoord2`;
-        gnode += this.getAttribute(bufferGeometry.attributes.uv2, uvName, ["S", "T"], "float");
-        triangleInputs += `<input semantic="TEXCOORD" source="#${uvName}" offset="0" set="1" />`;
-      }
-      if ("color" in bufferGeometry.attributes) {
-        const colName = `${meshid}-color`;
-        gnode += this.getAttribute(bufferGeometry.attributes.color, colName, ["X", "Y", "Z"], "uint8");
-        triangleInputs += `<input semantic="COLOR" source="#${colName}" offset="0" />`;
-      }
-      let indexArray = null;
-      if (bufferGeometry.index) {
-        indexArray = this.attrBufferToArray(bufferGeometry.index);
-      } else {
-        indexArray = new Array(indexCount);
-        for (let i = 0, l = indexArray.length; i < l && Array.isArray(indexArray); i++)
-          indexArray[i] = i;
-      }
-      for (let i = 0, l = groups.length; i < l; i++) {
-        const group = groups[i];
-        const subarr = this.subArray(indexArray, group.start, group.count);
-        const polycount = subarr.length / 3;
-        gnode += `<triangles material="MESH_MATERIAL_${group.materialIndex}" count="${polycount}">`;
-        gnode += triangleInputs;
-        gnode += `<p>${subarr.join(" ")}</p>`;
-        gnode += "</triangles>";
-      }
-      gnode += "</mesh></geometry>";
-      this.libraryGeometries.push(gnode);
-      info = { meshid, bufferGeometry };
-      this.geometryInfo.set(g, info);
-    }
-    return info;
-  }
-  // Process the given texture into the image library
-  // Returns the image library
-  processTexture(tex) {
-    let texid = this.imageMap.get(tex);
-    if (texid == null) {
-      texid = `image-${this.libraryImages.length + 1}`;
-      const ext = "png";
-      const name = tex.name || texid;
-      let imageNode = `<image id="${texid}" name="${name}">`;
-      if (this.options.version === "1.5.0") {
-        imageNode += `<init_from><ref>${this.options.textureDirectory}${name}.${ext}</ref></init_from>`;
-      } else {
-        imageNode += `<init_from>${this.options.textureDirectory}${name}.${ext}</init_from>`;
-      }
-      imageNode += "</image>";
-      this.libraryImages.push(imageNode);
-      this.imageMap.set(tex, texid);
-      this.textures.push({
-        directory: this.options.textureDirectory,
-        name,
-        ext,
-        data: this.imageToData(tex.image, ext),
-        original: tex
-      });
-    }
-    return texid;
-  }
-  // Process the given material into the material and effect libraries
-  // Returns the material id
-  processMaterial(m) {
-    let matid = this.materialMap.get(m);
-    if (matid == null) {
-      matid = `Mat${this.libraryEffects.length + 1}`;
-      let type = "phong";
-      if (m instanceof three_module.MeshLambertMaterial) {
-        type = "lambert";
-      } else if (m instanceof three_module.MeshBasicMaterial) {
-        type = "constant";
-        if (m.map !== null) {
-          console.warn("ColladaExporter: Texture maps not supported with MeshBasicMaterial.");
-        }
-      }
-      if (m instanceof three_module.MeshPhongMaterial) {
-        const emissive = m.emissive ? m.emissive : new three_module.Color(0, 0, 0);
-        const diffuse = m.color ? m.color : new three_module.Color(0, 0, 0);
-        const specular = m.specular ? m.specular : new three_module.Color(1, 1, 1);
-        const shininess = m.shininess || 0;
-        const reflectivity = m.reflectivity || 0;
-        let transparencyNode = "";
-        if (m.transparent) {
-          transparencyNode += `<transparent>${m.map ? '<texture texture="diffuse-sampler"></texture>' : "<float>1</float>"}</transparent>`;
-          if (m.opacity < 1) {
-            transparencyNode += `<transparency><float>${m.opacity}</float></transparency>`;
-          }
-        }
-        const techniqueNode = `${`<technique sid="common"><${type}>`}<emission>${m.emissiveMap ? '<texture texture="emissive-sampler" texcoord="TEXCOORD" />' : `<color sid="emission">${emissive.r} ${emissive.g} ${emissive.b} 1</color>`}</emission>${type !== "constant" ? `<diffuse>${m.map ? '<texture texture="diffuse-sampler" texcoord="TEXCOORD" />' : `<color sid="diffuse">${diffuse.r} ${diffuse.g} ${diffuse.b} 1</color>`}</diffuse>` : ""}${type !== "constant" ? `<bump>${m.normalMap ? '<texture texture="bump-sampler" texcoord="TEXCOORD" />' : ""}</bump>` : ""}${type === "phong" ? `${`<specular><color sid="specular">${specular.r} ${specular.g} ${specular.b} 1</color></specular>`}<shininess>${m.specularMap ? '<texture texture="specular-sampler" texcoord="TEXCOORD" />' : `<float sid="shininess">${shininess}</float>`}</shininess>` : ""}${`<reflective><color>${diffuse.r} ${diffuse.g} ${diffuse.b} 1</color></reflective>`}${`<reflectivity><float>${reflectivity}</float></reflectivity>`}${transparencyNode}${`</${type}></technique>`}`;
-        const effectnode = `${`<effect id="${matid}-effect">`}<profile_COMMON>${m.map ? `<newparam sid="diffuse-surface"><surface type="2D">${`<init_from>${this.processTexture(
-          m.map
-        )}</init_from>`}</surface></newparam><newparam sid="diffuse-sampler"><sampler2D><source>diffuse-surface</source></sampler2D></newparam>` : ""}${m.specularMap ? `<newparam sid="specular-surface"><surface type="2D">${`<init_from>${this.processTexture(
-          m.specularMap
-        )}</init_from>`}</surface></newparam><newparam sid="specular-sampler"><sampler2D><source>specular-surface</source></sampler2D></newparam>` : ""}${m.emissiveMap ? `<newparam sid="emissive-surface"><surface type="2D">${`<init_from>${this.processTexture(
-          m.emissiveMap
-        )}</init_from>`}</surface></newparam><newparam sid="emissive-sampler"><sampler2D><source>emissive-surface</source></sampler2D></newparam>` : ""}${m.normalMap ? `<newparam sid="bump-surface"><surface type="2D">${`<init_from>${this.processTexture(
-          m.normalMap
-        )}</init_from>`}</surface></newparam><newparam sid="bump-sampler"><sampler2D><source>bump-surface</source></sampler2D></newparam>` : ""}${techniqueNode}${m.side === three_module.DoubleSide ? '<extra><technique profile="THREEJS"><double_sided sid="double_sided" type="int">1</double_sided></technique></extra>' : ""}</profile_COMMON></effect>`;
-        const materialName = m.name ? ` name="${m.name}"` : "";
-        const materialNode = `<material id="${matid}"${materialName}><instance_effect url="#${matid}-effect" /></material>`;
-        this.libraryMaterials.push(materialNode);
-        this.libraryEffects.push(effectnode);
-        this.materialMap.set(m, matid);
-      }
-    }
-    return matid;
-  }
-  // Recursively process the object into a scene
-  processObject(o) {
-    let node = `<node name="${o.name}">`;
-    node += this.getTransform(o);
-    const a = new three_module.Mesh();
-    a.geometry;
-    if (o instanceof three_module.Mesh && o.isMesh && o.geometry !== null) {
-      const geomInfo = this.processGeometry(o.geometry);
-      const meshid = geomInfo.meshid;
-      const geometry = geomInfo.bufferGeometry;
-      let matids = null;
-      let matidsArray;
-      const mat = o.material || new three_module.MeshBasicMaterial();
-      const materials = Array.isArray(mat) ? mat : [mat];
-      if (geometry.groups.length > materials.length) {
-        matidsArray = new Array(geometry.groups.length);
-      } else {
-        matidsArray = new Array(materials.length);
-      }
-      matids = matidsArray.fill(null).map((_, i) => this.processMaterial(materials[i % materials.length]));
-      node += `${`<instance_geometry url="#${meshid}">` + (matids != null ? `<bind_material><technique_common>${matids.map(
-        (id, i) => `${`<instance_material symbol="MESH_MATERIAL_${i}" target="#${id}" >`}<bind_vertex_input semantic="TEXCOORD" input_semantic="TEXCOORD" input_set="0" /></instance_material>`
-      ).join("")}</technique_common></bind_material>` : "")}</instance_geometry>`;
-    }
-    o.children.forEach((c) => node += this.processObject(c));
-    node += "</node>";
-    return node;
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/mmd-parser/build/mmdparser.js
-var mmdparser = __webpack_require__(40431);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/exporters/MMDExporter.js
-var MMDExporter_defProp = Object.defineProperty;
-var MMDExporter_defNormalProp = (obj, key, value) => key in obj ? MMDExporter_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var MMDExporter_publicField = (obj, key, value) => {
-  MMDExporter_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-class MMDExporter {
-  constructor() {
-    // Unicode to Shift_JIS table
-    MMDExporter_publicField(this, "u2sTable");
-  }
-  /* TODO: implement
-  // mesh -> pmd
-  this.parsePmd = function ( object ) {
-  };
-  */
-  /* TODO: implement
-  // mesh -> pmx
-  this.parsePmx = function ( object ) {
-  };
-  */
-  /* TODO: implement
-  // animation + skeleton -> vmd
-  this.parseVmd = function ( object ) {
-  };
-  */
-  /*
-   * skeleton -> vpd
-   * Returns Shift_JIS encoded Uint8Array. Otherwise return strings.
-   */
-  parseVpd(skin, outputShiftJis, useOriginalBones) {
-    if (skin.isSkinnedMesh !== true) {
-      console.warn("THREE.MMDExporter: parseVpd() requires SkinnedMesh instance.");
-      return null;
-    }
-    function toStringsFromNumber(num) {
-      if (Math.abs(num) < 1e-6)
-        num = 0;
-      let a = num.toString();
-      if (a.indexOf(".") === -1) {
-        a += ".";
-      }
-      a += "000000";
-      const index = a.indexOf(".");
-      const d = a.slice(0, index);
-      const p = a.slice(index + 1, index + 7);
-      return d + "." + p;
-    }
-    function toStringsFromArray(array2) {
-      const a = [];
-      for (let i = 0, il = array2.length; i < il; i++) {
-        a.push(toStringsFromNumber(array2[i]));
-      }
-      return a.join(",");
-    }
-    skin.updateMatrixWorld(true);
-    const bones = skin.skeleton.bones;
-    const bones2 = this.getBindBones(skin);
-    const position = new three_module.Vector3();
-    const quaternion = new three_module.Quaternion();
-    const quaternion2 = new three_module.Quaternion();
-    const matrix = new three_module.Matrix4();
-    const array = [];
-    array.push("Vocaloid Pose Data file");
-    array.push("");
-    array.push((skin.name !== "" ? skin.name.replace(/\s/g, "_") : "skin") + ".osm;");
-    array.push(bones.length + ";");
-    array.push("");
-    for (let i = 0, il = bones.length; i < il; i++) {
-      const bone = bones[i];
-      const bone2 = bones2[i];
-      if (useOriginalBones === true && bone.userData.ik !== void 0 && bone.userData.ik.originalMatrix !== void 0) {
-        matrix.fromArray(bone.userData.ik.originalMatrix);
-      } else {
-        matrix.copy(bone.matrix);
-      }
-      position.setFromMatrixPosition(matrix);
-      quaternion.setFromRotationMatrix(matrix);
-      const pArray = position.sub(bone2.position).toArray();
-      const qArray = quaternion2.copy(bone2.quaternion).conjugate().multiply(quaternion).toArray();
-      pArray[2] = -pArray[2];
-      qArray[0] = -qArray[0];
-      qArray[1] = -qArray[1];
-      array.push("Bone" + i + "{" + bone.name);
-      array.push("  " + toStringsFromArray(pArray) + ";");
-      array.push("  " + toStringsFromArray(qArray) + ";");
-      array.push("}");
-      array.push("");
-    }
-    array.push("");
-    const lines = array.join("\n");
-    return outputShiftJis === true ? this.unicodeToShiftjis(lines) : lines;
-  }
-  unicodeToShiftjis(str) {
-    if (this.u2sTable === void 0) {
-      const encoder = new mmdparser.CharsetEncoder();
-      const table = encoder.s2uTable;
-      this.u2sTable = {};
-      const keys = Object.keys(table);
-      for (let i = 0, il = keys.length; i < il; i++) {
-        let key = keys[i];
-        const value = table[key];
-        this.u2sTable[value] = parseInt(key);
-      }
-    }
-    const array = [];
-    for (let i = 0, il = str.length; i < il; i++) {
-      const code = str.charCodeAt(i);
-      const value = this.u2sTable[code];
-      if (value === void 0) {
-        throw "cannot convert charcode 0x" + code.toString(16);
-      } else if (value > 255) {
-        array.push(value >> 8 & 255);
-        array.push(value & 255);
-      } else {
-        array.push(value & 255);
-      }
-    }
-    return new Uint8Array(array);
-  }
-  getBindBones(skin) {
-    const poseSkin = skin.clone();
-    poseSkin.pose();
-    return poseSkin.skeleton.bones;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/exporters/STLExporter.js
-var STLExporter_defProp = Object.defineProperty;
-var STLExporter_defNormalProp = (obj, key, value) => key in obj ? STLExporter_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var STLExporter_publicField = (obj, key, value) => {
-  STLExporter_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-class STLExporter {
-  constructor() {
-    STLExporter_publicField(this, "binary");
-    STLExporter_publicField(this, "output");
-    STLExporter_publicField(this, "offset");
-    STLExporter_publicField(this, "objects");
-    STLExporter_publicField(this, "triangles");
-    STLExporter_publicField(this, "vA");
-    STLExporter_publicField(this, "vB");
-    STLExporter_publicField(this, "vC");
-    STLExporter_publicField(this, "cb");
-    STLExporter_publicField(this, "ab");
-    STLExporter_publicField(this, "normal");
-    this.binary = false;
-    this.output = "";
-    this.offset = 80;
-    this.objects = [];
-    this.triangles = 0;
-    this.vA = new three_module.Vector3();
-    this.vB = new three_module.Vector3();
-    this.vC = new three_module.Vector3();
-    this.cb = new three_module.Vector3();
-    this.ab = new three_module.Vector3();
-    this.normal = new three_module.Vector3();
-  }
-  parse(scene, options) {
-    this.binary = options.binary !== void 0 ? options.binary : false;
-    scene.traverse((object) => {
-      if (object instanceof three_module.Mesh && object.isMesh) {
-        const geometry = object.geometry;
-        if (!geometry.isBufferGeometry) {
-          throw new Error("THREE.STLExporter: Geometry is not of type THREE.BufferGeometry.");
-        }
-        const index = geometry.index;
-        const positionAttribute = geometry.getAttribute("position");
-        this.triangles += index !== null ? index.count / 3 : positionAttribute.count / 3;
-        this.objects.push({
-          object3d: object,
-          geometry
-        });
-      }
-    });
-    if (this.binary) {
-      const bufferLength = this.triangles * 2 + this.triangles * 3 * 4 * 4 + 80 + 4;
-      const arrayBuffer = new ArrayBuffer(bufferLength);
-      this.output = new DataView(arrayBuffer);
-      this.output.setUint32(this.offset, this.triangles, true);
-      this.offset += 4;
-    } else {
-      this.output = "";
-      this.output += "solid exported\n";
-    }
-    for (let i = 0, il = this.objects.length; i < il; i++) {
-      const object = this.objects[i].object3d;
-      const geometry = this.objects[i].geometry;
-      const index = geometry.index;
-      const positionAttribute = geometry.getAttribute("position");
-      if (object instanceof three_module.SkinnedMesh) {
-        if (index !== null) {
-          for (let j = 0; j < index.count; j += 3) {
-            const a = index.getX(j + 0);
-            const b = index.getX(j + 1);
-            const c = index.getX(j + 2);
-            this.writeFace(a, b, c, positionAttribute, object);
-          }
-        } else {
-          for (let j = 0; j < positionAttribute.count; j += 3) {
-            const a = j + 0;
-            const b = j + 1;
-            const c = j + 2;
-            this.writeFace(a, b, c, positionAttribute, object);
-          }
-        }
-      }
-    }
-    if (!this.binary) {
-      this.output += "endsolid exported\n";
-    }
-    return this.output;
-  }
-  writeFace(a, b, c, positionAttribute, object) {
-    this.vA.fromBufferAttribute(positionAttribute, a);
-    this.vB.fromBufferAttribute(positionAttribute, b);
-    this.vC.fromBufferAttribute(positionAttribute, c);
-    if (object.isSkinnedMesh) {
-      object.boneTransform(a, this.vA);
-      object.boneTransform(b, this.vB);
-      object.boneTransform(c, this.vC);
-    }
-    this.vA.applyMatrix4(object.matrixWorld);
-    this.vB.applyMatrix4(object.matrixWorld);
-    this.vC.applyMatrix4(object.matrixWorld);
-    this.writeNormal(this.vA, this.vB, this.vC);
-    this.writeVertex(this.vA);
-    this.writeVertex(this.vB);
-    this.writeVertex(this.vC);
-    if (this.binary && this.output instanceof DataView) {
-      this.output.setUint16(this.offset, 0, true);
-      this.offset += 2;
-    } else {
-      this.output += "		endloop\n";
-      this.output += "	endfacet\n";
-    }
-  }
-  writeNormal(vA, vB, vC) {
-    this.cb.subVectors(vC, vB);
-    this.ab.subVectors(vA, vB);
-    this.cb.cross(this.ab).normalize();
-    this.normal.copy(this.cb).normalize();
-    if (this.binary && this.output instanceof DataView) {
-      this.output.setFloat32(this.offset, this.normal.x, true);
-      this.offset += 4;
-      this.output.setFloat32(this.offset, this.normal.y, true);
-      this.offset += 4;
-      this.output.setFloat32(this.offset, this.normal.z, true);
-      this.offset += 4;
-    } else {
-      this.output += `	facet normal ${this.normal.x} ${this.normal.y} ${this.normal.z}
-`;
-      this.output += "		outer loop\n";
-    }
-  }
-  writeVertex(vertex) {
-    if (this.binary && this.output instanceof DataView) {
-      this.output.setFloat32(this.offset, vertex.x, true);
-      this.offset += 4;
-      this.output.setFloat32(this.offset, vertex.y, true);
-      this.offset += 4;
-      this.output.setFloat32(this.offset, vertex.z, true);
-      this.offset += 4;
-    } else {
-      this.output += `			vertex vertex.x vertex.y vertex.z
-`;
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/exporters/OBJExporter.js
-var OBJExporter_defProp = Object.defineProperty;
-var OBJExporter_defNormalProp = (obj, key, value) => key in obj ? OBJExporter_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var OBJExporter_publicField = (obj, key, value) => {
-  OBJExporter_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-class OBJExporter {
-  constructor() {
-    OBJExporter_publicField(this, "output");
-    OBJExporter_publicField(this, "indexVertex");
-    OBJExporter_publicField(this, "indexVertexUvs");
-    OBJExporter_publicField(this, "indexNormals");
-    OBJExporter_publicField(this, "vertex");
-    OBJExporter_publicField(this, "color");
-    OBJExporter_publicField(this, "normal");
-    OBJExporter_publicField(this, "uv");
-    OBJExporter_publicField(this, "face");
-    this.output = "";
-    this.indexVertex = 0;
-    this.indexVertexUvs = 0;
-    this.indexNormals = 0;
-    this.vertex = new three_module.Vector3();
-    this.color = new three_module.Color();
-    this.normal = new three_module.Vector3();
-    this.uv = new three_module.Vector2();
-    this.face = [];
-  }
-  parse(object) {
-    object.traverse((child) => {
-      if (child instanceof three_module.Mesh && child.isMesh) {
-        this.parseMesh(child);
-      }
-      if (child instanceof three_module.Line && child.isLine) {
-        this.parseLine(child);
-      }
-      if (child instanceof three_module.Points && child.isPoints) {
-        this.parsePoints(child);
-      }
-    });
-    return this.output;
-  }
-  parseMesh(mesh) {
-    let nbVertex = 0;
-    let nbNormals = 0;
-    let nbVertexUvs = 0;
-    const geometry = mesh.geometry;
-    const normalMatrixWorld = new three_module.Matrix3();
-    if (!geometry.isBufferGeometry) {
-      throw new Error("THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry.");
-    }
-    const vertices = geometry.getAttribute("position");
-    const normals = geometry.getAttribute("normal");
-    const uvs = geometry.getAttribute("uv");
-    const indices = geometry.getIndex();
-    this.output += `o ${mesh.name}
-`;
-    if (mesh.material && !Array.isArray(mesh.material) && mesh.material.name) {
-      this.output += `usemtl ${mesh.material.name}
-`;
-    }
-    if (vertices !== void 0) {
-      for (let i = 0, l = vertices.count; i < l; i++, nbVertex++) {
-        this.vertex.x = vertices.getX(i);
-        this.vertex.y = vertices.getY(i);
-        this.vertex.z = vertices.getZ(i);
-        this.vertex.applyMatrix4(mesh.matrixWorld);
-        this.output += `v ${this.vertex.x} ${this.vertex.y} ${this.vertex.z}
-`;
-      }
-    }
-    if (uvs !== void 0) {
-      for (let i = 0, l = uvs.count; i < l; i++, nbVertexUvs++) {
-        this.uv.x = uvs.getX(i);
-        this.uv.y = uvs.getY(i);
-        this.output += `vt ${this.uv.x} ${this.uv.y}
-`;
-      }
-    }
-    if (normals !== void 0) {
-      normalMatrixWorld.getNormalMatrix(mesh.matrixWorld);
-      for (let i = 0, l = normals.count; i < l; i++, nbNormals++) {
-        this.normal.x = normals.getX(i);
-        this.normal.y = normals.getY(i);
-        this.normal.z = normals.getZ(i);
-        this.normal.applyMatrix3(normalMatrixWorld).normalize();
-        this.output += `vn ${this.normal.x} ${this.normal.y} ${this.normal.z}
-`;
-      }
-    }
-    if (indices !== null) {
-      for (let i = 0, l = indices.count; i < l; i += 3) {
-        for (let m = 0; m < 3; m++) {
-          const j = indices.getX(i + m) + 1;
-          this.face[m] = this.indexVertex + j + (normals || uvs ? `/${uvs ? this.indexVertexUvs + j : ""}${normals ? `/${this.indexNormals + j}` : ""}` : "");
-        }
-        this.output += `f ${this.face.join(" ")}
-`;
-      }
-    } else {
-      for (let i = 0, l = vertices.count; i < l; i += 3) {
-        for (let m = 0; m < 3; m++) {
-          const j = i + m + 1;
-          this.face[m] = this.indexVertex + j + (normals || uvs ? `/${uvs ? this.indexVertexUvs + j : ""}${normals ? `/${this.indexNormals + j}` : ""}` : "");
-        }
-        this.output += `f ${this.face.join(" ")}
-`;
-      }
-    }
-    this.indexVertex += nbVertex;
-    this.indexVertexUvs += nbVertexUvs;
-    this.indexNormals += nbNormals;
-  }
-  parseLine(line) {
-    let nbVertex = 0;
-    const geometry = line.geometry;
-    const type = line.type;
-    if (geometry.isBufferGeometry) {
-      throw new Error("THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry.");
-    }
-    const vertices = geometry.getAttribute("position");
-    this.output += `o ${line.name}
-`;
-    if (vertices !== void 0) {
-      for (let i = 0, l = vertices.count; i < l; i++, nbVertex++) {
-        this.vertex.x = vertices.getX(i);
-        this.vertex.y = vertices.getY(i);
-        this.vertex.z = vertices.getZ(i);
-        this.vertex.applyMatrix4(line.matrixWorld);
-        this.output += `v ${this.vertex.x} ${this.vertex.y} ${this.vertex.z}
-`;
-      }
-    }
-    if (type === "Line") {
-      this.output += "l ";
-      for (let j = 1, l = vertices.count; j <= l; j++) {
-        this.output += `${this.indexVertex + j} `;
-      }
-      this.output += "\n";
-    }
-    if (type === "LineSegments") {
-      for (let j = 1, k = j + 1, l = vertices.count; j < l; j += 2, k = j + 1) {
-        this.output += `l ${this.indexVertex + j} ${this.indexVertex + k}
-`;
-      }
-    }
-    this.indexVertex += nbVertex;
-  }
-  parsePoints(points) {
-    let nbVertex = 0;
-    const geometry = points.geometry;
-    if (!geometry.isBufferGeometry) {
-      throw new Error("THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry.");
-    }
-    const vertices = geometry.getAttribute("position");
-    const colors = geometry.getAttribute("color");
-    this.output += `o ${points.name}
-`;
-    if (vertices !== void 0) {
-      for (let i = 0, l = vertices.count; i < l; i++, nbVertex++) {
-        this.vertex.fromBufferAttribute(vertices, i);
-        this.vertex.applyMatrix4(points.matrixWorld);
-        this.output += `v ${this.vertex.x} ${this.vertex.y} ${this.vertex.z}`;
-        if (colors !== void 0 && colors instanceof three_module.BufferAttribute) {
-          this.color.fromBufferAttribute(colors, i);
-          this.output += ` ${this.color.r} ${this.color.g} ${this.color.b}`;
-        }
-        this.output += "\n";
-      }
-    }
-    this.output += "p ";
-    for (let j = 1, l = vertices.count; j <= l; j++) {
-      this.output += `${this.indexVertex + j} `;
-    }
-    this.output += "\n";
-    this.indexVertex += nbVertex;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/environments/RoomEnvironment.js
-
-function RoomEnvironment() {
-  const scene = new three_module.Scene();
-  const geometry = new three_module.BoxGeometry();
-  geometry.deleteAttribute("uv");
-  const roomMaterial = new three_module.MeshStandardMaterial({ side: three_module.BackSide });
-  const boxMaterial = new three_module.MeshStandardMaterial();
-  const mainLight = new three_module.PointLight(16777215, 5, 28, 2);
-  mainLight.position.set(0.418, 16.199, 0.3);
-  scene.add(mainLight);
-  const room = new three_module.Mesh(geometry, roomMaterial);
-  room.position.set(-0.757, 13.219, 0.717);
-  room.scale.set(31.713, 28.305, 28.591);
-  scene.add(room);
-  const box1 = new three_module.Mesh(geometry, boxMaterial);
-  box1.position.set(-10.906, 2.009, 1.846);
-  box1.rotation.set(0, -0.195, 0);
-  box1.scale.set(2.328, 7.905, 4.651);
-  scene.add(box1);
-  const box2 = new three_module.Mesh(geometry, boxMaterial);
-  box2.position.set(-5.607, -0.754, -0.758);
-  box2.rotation.set(0, 0.994, 0);
-  box2.scale.set(1.97, 1.534, 3.955);
-  scene.add(box2);
-  const box3 = new three_module.Mesh(geometry, boxMaterial);
-  box3.position.set(6.167, 0.857, 7.803);
-  box3.rotation.set(0, 0.561, 0);
-  box3.scale.set(3.927, 6.285, 3.687);
-  scene.add(box3);
-  const box4 = new three_module.Mesh(geometry, boxMaterial);
-  box4.position.set(-2.017, 0.018, 6.124);
-  box4.rotation.set(0, 0.333, 0);
-  box4.scale.set(2.002, 4.566, 2.064);
-  scene.add(box4);
-  const box5 = new three_module.Mesh(geometry, boxMaterial);
-  box5.position.set(2.291, -0.756, -2.621);
-  box5.rotation.set(0, -0.286, 0);
-  box5.scale.set(1.546, 1.552, 1.496);
-  scene.add(box5);
-  const box6 = new three_module.Mesh(geometry, boxMaterial);
-  box6.position.set(-2.193, -0.369, -5.547);
-  box6.rotation.set(0, 0.516, 0);
-  box6.scale.set(3.875, 3.487, 2.986);
-  scene.add(box6);
-  const light1 = new three_module.Mesh(geometry, createAreaLightMaterial(50));
-  light1.position.set(-16.116, 14.37, 8.208);
-  light1.scale.set(0.1, 2.428, 2.739);
-  scene.add(light1);
-  const light2 = new three_module.Mesh(geometry, createAreaLightMaterial(50));
-  light2.position.set(-16.109, 18.021, -8.207);
-  light2.scale.set(0.1, 2.425, 2.751);
-  scene.add(light2);
-  const light3 = new three_module.Mesh(geometry, createAreaLightMaterial(17));
-  light3.position.set(14.904, 12.198, -1.832);
-  light3.scale.set(0.15, 4.265, 6.331);
-  scene.add(light3);
-  const light4 = new three_module.Mesh(geometry, createAreaLightMaterial(43));
-  light4.position.set(-0.462, 8.89, 14.52);
-  light4.scale.set(4.38, 5.441, 0.088);
-  scene.add(light4);
-  const light5 = new three_module.Mesh(geometry, createAreaLightMaterial(20));
-  light5.position.set(3.235, 11.486, -12.541);
-  light5.scale.set(2.5, 2, 0.1);
-  scene.add(light5);
-  const light6 = new three_module.Mesh(geometry, createAreaLightMaterial(100));
-  light6.position.set(0, 20, 0);
-  light6.scale.set(1, 0.1, 1);
-  scene.add(light6);
-  function createAreaLightMaterial(intensity) {
-    const material = new three_module.MeshBasicMaterial();
-    material.color.setScalar(intensity);
-    return material;
-  }
-  return scene;
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/animation/AnimationClipCreator.js
-
-class AnimationClipCreator {
-  static CreateRotationAnimation(period, axis = "x") {
-    const times = [0, period], values = [0, 360];
-    const trackName = ".rotation[" + axis + "]";
-    const track = new three_module.NumberKeyframeTrack(trackName, times, values);
-    return new three_module.AnimationClip(null, period, [track]);
-  }
-  static CreateScaleAxisAnimation(period, axis = "x") {
-    const times = [0, period], values = [0, 1];
-    const trackName = ".scale[" + axis + "]";
-    const track = new three_module.NumberKeyframeTrack(trackName, times, values);
-    return new three_module.AnimationClip(null, period, [track]);
-  }
-  static CreateShakeAnimation(duration, shakeScale) {
-    const times = [], values = [], tmp = new three_module.Vector3();
-    for (let i = 0; i < duration * 10; i++) {
-      times.push(i / 10);
-      tmp.set(Math.random() * 2 - 1, Math.random() * 2 - 1, Math.random() * 2 - 1).multiply(shakeScale).toArray(values, values.length);
-    }
-    const trackName = ".position";
-    const track = new three_module.VectorKeyframeTrack(trackName, times, values);
-    return new three_module.AnimationClip(null, duration, [track]);
-  }
-  static CreatePulsationAnimation(duration, pulseScale) {
-    const times = [], values = [], tmp = new three_module.Vector3();
-    for (let i = 0; i < duration * 10; i++) {
-      times.push(i / 10);
-      const scaleFactor = Math.random() * pulseScale;
-      tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values, values.length);
-    }
-    const trackName = ".scale";
-    const track = new three_module.VectorKeyframeTrack(trackName, times, values);
-    return new three_module.AnimationClip(null, duration, [track]);
-  }
-  static CreateVisibilityAnimation(duration) {
-    const times = [0, duration / 2, duration], values = [true, false, true];
-    const trackName = ".visible";
-    const track = new three_module.BooleanKeyframeTrack(trackName, times, values);
-    return new three_module.AnimationClip(null, duration, [track]);
-  }
-  static CreateMaterialColorAnimation(duration, colors) {
-    const times = [], values = [], timeStep = duration / colors.length;
-    for (let i = 0; i < colors.length; i++) {
-      times.push(i * timeStep);
-      const color = colors[i];
-      values.push(color.r, color.g, color.b);
-    }
-    const trackName = ".material.color";
-    const track = new three_module.ColorKeyframeTrack(trackName, times, values);
-    return new three_module.AnimationClip(null, duration, [track]);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/animation/CCDIKSolver.js
-
-const _q = /* @__PURE__ */ new three_module.Quaternion();
-const _targetPos = /* @__PURE__ */ new three_module.Vector3();
-const _targetVec = /* @__PURE__ */ new three_module.Vector3();
-const _effectorPos = /* @__PURE__ */ new three_module.Vector3();
-const _effectorVec = /* @__PURE__ */ new three_module.Vector3();
-const _linkPos = /* @__PURE__ */ new three_module.Vector3();
-const _invLinkQ = /* @__PURE__ */ new three_module.Quaternion();
-const _linkScale = /* @__PURE__ */ new three_module.Vector3();
-const _axis = /* @__PURE__ */ new three_module.Vector3();
-const CCDIKSolver_vector = /* @__PURE__ */ new three_module.Vector3();
-const CCDIKSolver_matrix = /* @__PURE__ */ new three_module.Matrix4();
-class CCDIKSolver {
-  /**
-   * @param {THREE.SkinnedMesh} mesh
-   * @param {Array<Object>} iks
-   */
-  constructor(mesh, iks = []) {
-    this.mesh = mesh;
-    this.iks = iks;
-    this._valid();
-  }
-  /**
-   * Update all IK bones.
-   *
-   * @return {CCDIKSolver}
-   */
-  update() {
-    const iks = this.iks;
-    for (let i = 0, il = iks.length; i < il; i++) {
-      this.updateOne(iks[i]);
-    }
-    return this;
-  }
-  /**
-   * Update one IK bone
-   *
-   * @param {Object} ik parameter
-   * @return {CCDIKSolver}
-   */
-  updateOne(ik) {
-    const bones = this.mesh.skeleton.bones;
-    const math = Math;
-    const effector = bones[ik.effector];
-    const target = bones[ik.target];
-    _targetPos.setFromMatrixPosition(target.matrixWorld);
-    const links = ik.links;
-    const iteration = ik.iteration !== void 0 ? ik.iteration : 1;
-    for (let i = 0; i < iteration; i++) {
-      let rotated = false;
-      for (let j = 0, jl = links.length; j < jl; j++) {
-        const link = bones[links[j].index];
-        if (links[j].enabled === false)
-          break;
-        const limitation = links[j].limitation;
-        const rotationMin = links[j].rotationMin;
-        const rotationMax = links[j].rotationMax;
-        link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale);
-        _invLinkQ.invert();
-        _effectorPos.setFromMatrixPosition(effector.matrixWorld);
-        _effectorVec.subVectors(_effectorPos, _linkPos);
-        _effectorVec.applyQuaternion(_invLinkQ);
-        _effectorVec.normalize();
-        _targetVec.subVectors(_targetPos, _linkPos);
-        _targetVec.applyQuaternion(_invLinkQ);
-        _targetVec.normalize();
-        let angle = _targetVec.dot(_effectorVec);
-        if (angle > 1) {
-          angle = 1;
-        } else if (angle < -1) {
-          angle = -1;
-        }
-        angle = math.acos(angle);
-        if (angle < 1e-5)
-          continue;
-        if (ik.minAngle !== void 0 && angle < ik.minAngle) {
-          angle = ik.minAngle;
-        }
-        if (ik.maxAngle !== void 0 && angle > ik.maxAngle) {
-          angle = ik.maxAngle;
-        }
-        _axis.crossVectors(_effectorVec, _targetVec);
-        _axis.normalize();
-        _q.setFromAxisAngle(_axis, angle);
-        link.quaternion.multiply(_q);
-        if (limitation !== void 0) {
-          let c = link.quaternion.w;
-          if (c > 1)
-            c = 1;
-          const c2 = math.sqrt(1 - c * c);
-          link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c);
-        }
-        if (rotationMin !== void 0) {
-          link.rotation.setFromVector3(CCDIKSolver_vector.setFromEuler(link.rotation).max(rotationMin));
-        }
-        if (rotationMax !== void 0) {
-          link.rotation.setFromVector3(CCDIKSolver_vector.setFromEuler(link.rotation).min(rotationMax));
-        }
-        link.updateMatrixWorld(true);
-        rotated = true;
-      }
-      if (!rotated)
-        break;
-    }
-    return this;
-  }
-  /**
-   * Creates Helper
-   *
-   * @return {CCDIKHelper}
-   */
-  createHelper() {
-    return new CCDIKHelper(this.mesh, this.iks);
-  }
-  // private methods
-  _valid() {
-    const iks = this.iks;
-    const bones = this.mesh.skeleton.bones;
-    for (let i = 0, il = iks.length; i < il; i++) {
-      const ik = iks[i];
-      const effector = bones[ik.effector];
-      const links = ik.links;
-      let link0, link1;
-      link0 = effector;
-      for (let j = 0, jl = links.length; j < jl; j++) {
-        link1 = bones[links[j].index];
-        if (link0.parent !== link1) {
-          console.warn("THREE.CCDIKSolver: bone " + link0.name + " is not the child of bone " + link1.name);
-        }
-        link0 = link1;
-      }
-    }
-  }
-}
-function getPosition(bone, matrixWorldInv) {
-  return CCDIKSolver_vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv);
-}
-function setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {
-  const v = getPosition(bone, matrixWorldInv);
-  array[index * 3 + 0] = v.x;
-  array[index * 3 + 1] = v.y;
-  array[index * 3 + 2] = v.z;
-}
-class CCDIKHelper extends three_module.Object3D {
-  constructor(mesh, iks = [], sphereSize = 0.25) {
-    super();
-    this.root = mesh;
-    this.iks = iks;
-    this.matrix.copy(mesh.matrixWorld);
-    this.matrixAutoUpdate = false;
-    this.sphereGeometry = new three_module.SphereGeometry(sphereSize, 16, 8);
-    this.targetSphereMaterial = new three_module.MeshBasicMaterial({
-      color: new three_module.Color(16746632),
-      depthTest: false,
-      depthWrite: false,
-      transparent: true
-    });
-    this.effectorSphereMaterial = new three_module.MeshBasicMaterial({
-      color: new three_module.Color(8978312),
-      depthTest: false,
-      depthWrite: false,
-      transparent: true
-    });
-    this.linkSphereMaterial = new three_module.MeshBasicMaterial({
-      color: new three_module.Color(8947967),
-      depthTest: false,
-      depthWrite: false,
-      transparent: true
-    });
-    this.lineMaterial = new three_module.LineBasicMaterial({
-      color: new three_module.Color(16711680),
-      depthTest: false,
-      depthWrite: false,
-      transparent: true
-    });
-    this._init();
-  }
-  /**
-   * Updates IK bones visualization.
-   */
-  updateMatrixWorld(force) {
-    const mesh = this.root;
-    if (this.visible) {
-      let offset = 0;
-      const iks = this.iks;
-      const bones = mesh.skeleton.bones;
-      CCDIKSolver_matrix.copy(mesh.matrixWorld).invert();
-      for (let i = 0, il = iks.length; i < il; i++) {
-        const ik = iks[i];
-        const targetBone = bones[ik.target];
-        const effectorBone = bones[ik.effector];
-        const targetMesh = this.children[offset++];
-        const effectorMesh = this.children[offset++];
-        targetMesh.position.copy(getPosition(targetBone, CCDIKSolver_matrix));
-        effectorMesh.position.copy(getPosition(effectorBone, CCDIKSolver_matrix));
-        for (let j = 0, jl = ik.links.length; j < jl; j++) {
-          const link = ik.links[j];
-          const linkBone = bones[link.index];
-          const linkMesh = this.children[offset++];
-          linkMesh.position.copy(getPosition(linkBone, CCDIKSolver_matrix));
-        }
-        const line = this.children[offset++];
-        const array = line.geometry.attributes.position.array;
-        setPositionOfBoneToAttributeArray(array, 0, targetBone, CCDIKSolver_matrix);
-        setPositionOfBoneToAttributeArray(array, 1, effectorBone, CCDIKSolver_matrix);
-        for (let j = 0, jl = ik.links.length; j < jl; j++) {
-          const link = ik.links[j];
-          const linkBone = bones[link.index];
-          setPositionOfBoneToAttributeArray(array, j + 2, linkBone, CCDIKSolver_matrix);
-        }
-        line.geometry.attributes.position.needsUpdate = true;
-      }
-    }
-    this.matrix.copy(mesh.matrixWorld);
-    super.updateMatrixWorld(force);
-  }
-  /**
-   * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.
-   */
-  dispose() {
-    this.sphereGeometry.dispose();
-    this.targetSphereMaterial.dispose();
-    this.effectorSphereMaterial.dispose();
-    this.linkSphereMaterial.dispose();
-    this.lineMaterial.dispose();
-    const children = this.children;
-    for (let i = 0; i < children.length; i++) {
-      const child = children[i];
-      if (child.isLine)
-        child.geometry.dispose();
-    }
-  }
-  // private method
-  _init() {
-    const scope = this;
-    const iks = this.iks;
-    function createLineGeometry(ik) {
-      const geometry = new three_module.BufferGeometry();
-      const vertices = new Float32Array((2 + ik.links.length) * 3);
-      geometry.setAttribute("position", new three_module.BufferAttribute(vertices, 3));
-      return geometry;
-    }
-    function createTargetMesh() {
-      return new three_module.Mesh(scope.sphereGeometry, scope.targetSphereMaterial);
-    }
-    function createEffectorMesh() {
-      return new three_module.Mesh(scope.sphereGeometry, scope.effectorSphereMaterial);
-    }
-    function createLinkMesh() {
-      return new three_module.Mesh(scope.sphereGeometry, scope.linkSphereMaterial);
-    }
-    function createLine(ik) {
-      return new three_module.Line(createLineGeometry(ik), scope.lineMaterial);
-    }
-    for (let i = 0, il = iks.length; i < il; i++) {
-      const ik = iks[i];
-      this.add(createTargetMesh());
-      this.add(createEffectorMesh());
-      for (let j = 0, jl = ik.links.length; j < jl; j++) {
-        this.add(createLinkMesh());
-      }
-      this.add(createLine(ik));
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/animation/MMDPhysics.js
-
-class MMDPhysics {
-  /**
-   * @param {THREE.SkinnedMesh} mesh
-   * @param {Array<Object>} rigidBodyParams
-   * @param {Array<Object>} (optional) constraintParams
-   * @param {Object} params - (optional)
-   * @param {Number} params.unitStep - Default is 1 / 65.
-   * @param {Integer} params.maxStepNum - Default is 3.
-   * @param {Vector3} params.gravity - Default is ( 0, - 9.8 * 10, 0 )
-   */
-  constructor(mesh, rigidBodyParams, constraintParams = [], params = {}) {
-    if (typeof Ammo === "undefined") {
-      throw new Error("THREE.MMDPhysics: Import ammo.js https://github.com/kripken/ammo.js");
-    }
-    this.manager = new ResourceManager();
-    this.mesh = mesh;
-    this.unitStep = params.unitStep !== void 0 ? params.unitStep : 1 / 65;
-    this.maxStepNum = params.maxStepNum !== void 0 ? params.maxStepNum : 3;
-    this.gravity = new three_module.Vector3(0, -9.8 * 10, 0);
-    if (params.gravity !== void 0)
-      this.gravity.copy(params.gravity);
-    this.world = params.world !== void 0 ? params.world : null;
-    this.bodies = [];
-    this.constraints = [];
-    this._init(mesh, rigidBodyParams, constraintParams);
-  }
-  /**
-   * Advances Physics calculation and updates bones.
-   *
-   * @param {Number} delta - time in second
-   * @return {MMDPhysics}
-   */
-  update(delta) {
-    const manager = this.manager;
-    const mesh = this.mesh;
-    let isNonDefaultScale = false;
-    const position = manager.allocThreeVector3();
-    const quaternion = manager.allocThreeQuaternion();
-    const scale = manager.allocThreeVector3();
-    mesh.matrixWorld.decompose(position, quaternion, scale);
-    if (scale.x !== 1 || scale.y !== 1 || scale.z !== 1) {
-      isNonDefaultScale = true;
-    }
-    let parent;
-    if (isNonDefaultScale) {
-      parent = mesh.parent;
-      if (parent !== null)
-        mesh.parent = null;
-      scale.copy(this.mesh.scale);
-      mesh.scale.set(1, 1, 1);
-      mesh.updateMatrixWorld(true);
-    }
-    this._updateRigidBodies();
-    this._stepSimulation(delta);
-    this._updateBones();
-    if (isNonDefaultScale) {
-      if (parent !== null)
-        mesh.parent = parent;
-      mesh.scale.copy(scale);
-    }
-    manager.freeThreeVector3(scale);
-    manager.freeThreeQuaternion(quaternion);
-    manager.freeThreeVector3(position);
-    return this;
-  }
-  /**
-   * Resets rigid bodies transorm to current bone's.
-   *
-   * @return {MMDPhysics}
-   */
-  reset() {
-    for (let i = 0, il = this.bodies.length; i < il; i++) {
-      this.bodies[i].reset();
-    }
-    return this;
-  }
-  /**
-   * Warm ups Rigid bodies. Calculates cycles steps.
-   *
-   * @param {Integer} cycles
-   * @return {MMDPhysics}
-   */
-  warmup(cycles) {
-    for (let i = 0; i < cycles; i++) {
-      this.update(1 / 60);
-    }
-    return this;
-  }
-  /**
-   * Sets gravity.
-   *
-   * @param {Vector3} gravity
-   * @return {MMDPhysicsHelper}
-   */
-  setGravity(gravity) {
-    this.world.setGravity(new Ammo.btVector3(gravity.x, gravity.y, gravity.z));
-    this.gravity.copy(gravity);
-    return this;
-  }
-  /**
-   * Creates MMDPhysicsHelper
-   *
-   * @return {MMDPhysicsHelper}
-   */
-  createHelper() {
-    return new MMDPhysicsHelper(this.mesh, this);
-  }
-  // private methods
-  _init(mesh, rigidBodyParams, constraintParams) {
-    const manager = this.manager;
-    const parent = mesh.parent;
-    if (parent !== null)
-      mesh.parent = null;
-    const currentPosition = manager.allocThreeVector3();
-    const currentQuaternion = manager.allocThreeQuaternion();
-    const currentScale = manager.allocThreeVector3();
-    currentPosition.copy(mesh.position);
-    currentQuaternion.copy(mesh.quaternion);
-    currentScale.copy(mesh.scale);
-    mesh.position.set(0, 0, 0);
-    mesh.quaternion.set(0, 0, 0, 1);
-    mesh.scale.set(1, 1, 1);
-    mesh.updateMatrixWorld(true);
-    if (this.world === null) {
-      this.world = this._createWorld();
-      this.setGravity(this.gravity);
-    }
-    this._initRigidBodies(rigidBodyParams);
-    this._initConstraints(constraintParams);
-    if (parent !== null)
-      mesh.parent = parent;
-    mesh.position.copy(currentPosition);
-    mesh.quaternion.copy(currentQuaternion);
-    mesh.scale.copy(currentScale);
-    mesh.updateMatrixWorld(true);
-    this.reset();
-    manager.freeThreeVector3(currentPosition);
-    manager.freeThreeQuaternion(currentQuaternion);
-    manager.freeThreeVector3(currentScale);
-  }
-  _createWorld() {
-    const config = new Ammo.btDefaultCollisionConfiguration();
-    const dispatcher = new Ammo.btCollisionDispatcher(config);
-    const cache = new Ammo.btDbvtBroadphase();
-    const solver = new Ammo.btSequentialImpulseConstraintSolver();
-    const world = new Ammo.btDiscreteDynamicsWorld(dispatcher, cache, solver, config);
-    return world;
-  }
-  _initRigidBodies(rigidBodies) {
-    for (let i = 0, il = rigidBodies.length; i < il; i++) {
-      this.bodies.push(new RigidBody(this.mesh, this.world, rigidBodies[i], this.manager));
-    }
-  }
-  _initConstraints(constraints) {
-    for (let i = 0, il = constraints.length; i < il; i++) {
-      const params = constraints[i];
-      const bodyA = this.bodies[params.rigidBodyIndex1];
-      const bodyB = this.bodies[params.rigidBodyIndex2];
-      this.constraints.push(new Constraint(this.mesh, this.world, bodyA, bodyB, params, this.manager));
-    }
-  }
-  _stepSimulation(delta) {
-    const unitStep = this.unitStep;
-    let stepTime = delta;
-    let maxStepNum = (delta / unitStep | 0) + 1;
-    if (stepTime < unitStep) {
-      stepTime = unitStep;
-      maxStepNum = 1;
-    }
-    if (maxStepNum > this.maxStepNum) {
-      maxStepNum = this.maxStepNum;
-    }
-    this.world.stepSimulation(stepTime, maxStepNum, unitStep);
-  }
-  _updateRigidBodies() {
-    for (let i = 0, il = this.bodies.length; i < il; i++) {
-      this.bodies[i].updateFromBone();
-    }
-  }
-  _updateBones() {
-    for (let i = 0, il = this.bodies.length; i < il; i++) {
-      this.bodies[i].updateBone();
-    }
-  }
-}
-class ResourceManager {
-  constructor() {
-    this.threeVector3s = [];
-    this.threeMatrix4s = [];
-    this.threeQuaternions = [];
-    this.threeEulers = [];
-    this.transforms = [];
-    this.quaternions = [];
-    this.vector3s = [];
-  }
-  allocThreeVector3() {
-    return this.threeVector3s.length > 0 ? this.threeVector3s.pop() : new three_module.Vector3();
-  }
-  freeThreeVector3(v) {
-    this.threeVector3s.push(v);
-  }
-  allocThreeMatrix4() {
-    return this.threeMatrix4s.length > 0 ? this.threeMatrix4s.pop() : new three_module.Matrix4();
-  }
-  freeThreeMatrix4(m) {
-    this.threeMatrix4s.push(m);
-  }
-  allocThreeQuaternion() {
-    return this.threeQuaternions.length > 0 ? this.threeQuaternions.pop() : new three_module.Quaternion();
-  }
-  freeThreeQuaternion(q) {
-    this.threeQuaternions.push(q);
-  }
-  allocThreeEuler() {
-    return this.threeEulers.length > 0 ? this.threeEulers.pop() : new three_module.Euler();
-  }
-  freeThreeEuler(e) {
-    this.threeEulers.push(e);
-  }
-  allocTransform() {
-    return this.transforms.length > 0 ? this.transforms.pop() : new Ammo.btTransform();
-  }
-  freeTransform(t) {
-    this.transforms.push(t);
-  }
-  allocQuaternion() {
-    return this.quaternions.length > 0 ? this.quaternions.pop() : new Ammo.btQuaternion();
-  }
-  freeQuaternion(q) {
-    this.quaternions.push(q);
-  }
-  allocVector3() {
-    return this.vector3s.length > 0 ? this.vector3s.pop() : new Ammo.btVector3();
-  }
-  freeVector3(v) {
-    this.vector3s.push(v);
-  }
-  setIdentity(t) {
-    t.setIdentity();
-  }
-  getBasis(t) {
-    var q = this.allocQuaternion();
-    t.getBasis().getRotation(q);
-    return q;
-  }
-  getBasisAsMatrix3(t) {
-    var q = this.getBasis(t);
-    var m = this.quaternionToMatrix3(q);
-    this.freeQuaternion(q);
-    return m;
-  }
-  getOrigin(t) {
-    return t.getOrigin();
-  }
-  setOrigin(t, v) {
-    t.getOrigin().setValue(v.x(), v.y(), v.z());
-  }
-  copyOrigin(t1, t2) {
-    var o = t2.getOrigin();
-    this.setOrigin(t1, o);
-  }
-  setBasis(t, q) {
-    t.setRotation(q);
-  }
-  setBasisFromMatrix3(t, m) {
-    var q = this.matrix3ToQuaternion(m);
-    this.setBasis(t, q);
-    this.freeQuaternion(q);
-  }
-  setOriginFromArray3(t, a) {
-    t.getOrigin().setValue(a[0], a[1], a[2]);
-  }
-  setOriginFromThreeVector3(t, v) {
-    t.getOrigin().setValue(v.x, v.y, v.z);
-  }
-  setBasisFromArray3(t, a) {
-    var thQ = this.allocThreeQuaternion();
-    var thE = this.allocThreeEuler();
-    thE.set(a[0], a[1], a[2]);
-    this.setBasisFromThreeQuaternion(t, thQ.setFromEuler(thE));
-    this.freeThreeEuler(thE);
-    this.freeThreeQuaternion(thQ);
-  }
-  setBasisFromThreeQuaternion(t, a) {
-    var q = this.allocQuaternion();
-    q.setX(a.x);
-    q.setY(a.y);
-    q.setZ(a.z);
-    q.setW(a.w);
-    this.setBasis(t, q);
-    this.freeQuaternion(q);
-  }
-  multiplyTransforms(t1, t2) {
-    var t = this.allocTransform();
-    this.setIdentity(t);
-    var m1 = this.getBasisAsMatrix3(t1);
-    var m2 = this.getBasisAsMatrix3(t2);
-    var o1 = this.getOrigin(t1);
-    var o2 = this.getOrigin(t2);
-    var v1 = this.multiplyMatrix3ByVector3(m1, o2);
-    var v2 = this.addVector3(v1, o1);
-    this.setOrigin(t, v2);
-    var m3 = this.multiplyMatrices3(m1, m2);
-    this.setBasisFromMatrix3(t, m3);
-    this.freeVector3(v1);
-    this.freeVector3(v2);
-    return t;
-  }
-  inverseTransform(t) {
-    var t2 = this.allocTransform();
-    var m1 = this.getBasisAsMatrix3(t);
-    var o = this.getOrigin(t);
-    var m2 = this.transposeMatrix3(m1);
-    var v1 = this.negativeVector3(o);
-    var v2 = this.multiplyMatrix3ByVector3(m2, v1);
-    this.setOrigin(t2, v2);
-    this.setBasisFromMatrix3(t2, m2);
-    this.freeVector3(v1);
-    this.freeVector3(v2);
-    return t2;
-  }
-  multiplyMatrices3(m1, m2) {
-    var m3 = [];
-    var v10 = this.rowOfMatrix3(m1, 0);
-    var v11 = this.rowOfMatrix3(m1, 1);
-    var v12 = this.rowOfMatrix3(m1, 2);
-    var v20 = this.columnOfMatrix3(m2, 0);
-    var v21 = this.columnOfMatrix3(m2, 1);
-    var v22 = this.columnOfMatrix3(m2, 2);
-    m3[0] = this.dotVectors3(v10, v20);
-    m3[1] = this.dotVectors3(v10, v21);
-    m3[2] = this.dotVectors3(v10, v22);
-    m3[3] = this.dotVectors3(v11, v20);
-    m3[4] = this.dotVectors3(v11, v21);
-    m3[5] = this.dotVectors3(v11, v22);
-    m3[6] = this.dotVectors3(v12, v20);
-    m3[7] = this.dotVectors3(v12, v21);
-    m3[8] = this.dotVectors3(v12, v22);
-    this.freeVector3(v10);
-    this.freeVector3(v11);
-    this.freeVector3(v12);
-    this.freeVector3(v20);
-    this.freeVector3(v21);
-    this.freeVector3(v22);
-    return m3;
-  }
-  addVector3(v1, v2) {
-    var v = this.allocVector3();
-    v.setValue(v1.x() + v2.x(), v1.y() + v2.y(), v1.z() + v2.z());
-    return v;
-  }
-  dotVectors3(v1, v2) {
-    return v1.x() * v2.x() + v1.y() * v2.y() + v1.z() * v2.z();
-  }
-  rowOfMatrix3(m, i) {
-    var v = this.allocVector3();
-    v.setValue(m[i * 3 + 0], m[i * 3 + 1], m[i * 3 + 2]);
-    return v;
-  }
-  columnOfMatrix3(m, i) {
-    var v = this.allocVector3();
-    v.setValue(m[i + 0], m[i + 3], m[i + 6]);
-    return v;
-  }
-  negativeVector3(v) {
-    var v2 = this.allocVector3();
-    v2.setValue(-v.x(), -v.y(), -v.z());
-    return v2;
-  }
-  multiplyMatrix3ByVector3(m, v) {
-    var v4 = this.allocVector3();
-    var v0 = this.rowOfMatrix3(m, 0);
-    var v1 = this.rowOfMatrix3(m, 1);
-    var v2 = this.rowOfMatrix3(m, 2);
-    var x = this.dotVectors3(v0, v);
-    var y = this.dotVectors3(v1, v);
-    var z = this.dotVectors3(v2, v);
-    v4.setValue(x, y, z);
-    this.freeVector3(v0);
-    this.freeVector3(v1);
-    this.freeVector3(v2);
-    return v4;
-  }
-  transposeMatrix3(m) {
-    var m2 = [];
-    m2[0] = m[0];
-    m2[1] = m[3];
-    m2[2] = m[6];
-    m2[3] = m[1];
-    m2[4] = m[4];
-    m2[5] = m[7];
-    m2[6] = m[2];
-    m2[7] = m[5];
-    m2[8] = m[8];
-    return m2;
-  }
-  quaternionToMatrix3(q) {
-    var m = [];
-    var x = q.x();
-    var y = q.y();
-    var z = q.z();
-    var w = q.w();
-    var xx = x * x;
-    var yy = y * y;
-    var zz = z * z;
-    var xy = x * y;
-    var yz = y * z;
-    var zx = z * x;
-    var xw = x * w;
-    var yw = y * w;
-    var zw = z * w;
-    m[0] = 1 - 2 * (yy + zz);
-    m[1] = 2 * (xy - zw);
-    m[2] = 2 * (zx + yw);
-    m[3] = 2 * (xy + zw);
-    m[4] = 1 - 2 * (zz + xx);
-    m[5] = 2 * (yz - xw);
-    m[6] = 2 * (zx - yw);
-    m[7] = 2 * (yz + xw);
-    m[8] = 1 - 2 * (xx + yy);
-    return m;
-  }
-  matrix3ToQuaternion(m) {
-    var t = m[0] + m[4] + m[8];
-    var s, x, y, z, w;
-    if (t > 0) {
-      s = Math.sqrt(t + 1) * 2;
-      w = 0.25 * s;
-      x = (m[7] - m[5]) / s;
-      y = (m[2] - m[6]) / s;
-      z = (m[3] - m[1]) / s;
-    } else if (m[0] > m[4] && m[0] > m[8]) {
-      s = Math.sqrt(1 + m[0] - m[4] - m[8]) * 2;
-      w = (m[7] - m[5]) / s;
-      x = 0.25 * s;
-      y = (m[1] + m[3]) / s;
-      z = (m[2] + m[6]) / s;
-    } else if (m[4] > m[8]) {
-      s = Math.sqrt(1 + m[4] - m[0] - m[8]) * 2;
-      w = (m[2] - m[6]) / s;
-      x = (m[1] + m[3]) / s;
-      y = 0.25 * s;
-      z = (m[5] + m[7]) / s;
-    } else {
-      s = Math.sqrt(1 + m[8] - m[0] - m[4]) * 2;
-      w = (m[3] - m[1]) / s;
-      x = (m[2] + m[6]) / s;
-      y = (m[5] + m[7]) / s;
-      z = 0.25 * s;
-    }
-    var q = this.allocQuaternion();
-    q.setX(x);
-    q.setY(y);
-    q.setZ(z);
-    q.setW(w);
-    return q;
-  }
-}
-class RigidBody {
-  constructor(mesh, world, params, manager) {
-    this.mesh = mesh;
-    this.world = world;
-    this.params = params;
-    this.manager = manager;
-    this.body = null;
-    this.bone = null;
-    this.boneOffsetForm = null;
-    this.boneOffsetFormInverse = null;
-    this._init();
-  }
-  /**
-   * Resets rigid body transform to the current bone's.
-   *
-   * @return {RigidBody}
-   */
-  reset() {
-    this._setTransformFromBone();
-    return this;
-  }
-  /**
-   * Updates rigid body's transform from the current bone.
-   *
-   * @return {RidigBody}
-   */
-  updateFromBone() {
-    if (this.params.boneIndex !== -1 && this.params.type === 0) {
-      this._setTransformFromBone();
-    }
-    return this;
-  }
-  /**
-   * Updates bone from the current ridid body's transform.
-   *
-   * @return {RidigBody}
-   */
-  updateBone() {
-    if (this.params.type === 0 || this.params.boneIndex === -1) {
-      return this;
-    }
-    this._updateBoneRotation();
-    if (this.params.type === 1) {
-      this._updateBonePosition();
-    }
-    this.bone.updateMatrixWorld(true);
-    if (this.params.type === 2) {
-      this._setPositionFromBone();
-    }
-    return this;
-  }
-  // private methods
-  _init() {
-    function generateShape(p) {
-      switch (p.shapeType) {
-        case 0:
-          return new Ammo.btSphereShape(p.width);
-        case 1:
-          return new Ammo.btBoxShape(new Ammo.btVector3(p.width, p.height, p.depth));
-        case 2:
-          return new Ammo.btCapsuleShape(p.width, p.height);
-        default:
-          throw new Error("unknown shape type " + p.shapeType);
-      }
-    }
-    const manager = this.manager;
-    const params = this.params;
-    const bones = this.mesh.skeleton.bones;
-    const bone = params.boneIndex === -1 ? new three_module.Bone() : bones[params.boneIndex];
-    const shape = generateShape(params);
-    const weight = params.type === 0 ? 0 : params.weight;
-    const localInertia = manager.allocVector3();
-    localInertia.setValue(0, 0, 0);
-    if (weight !== 0) {
-      shape.calculateLocalInertia(weight, localInertia);
-    }
-    const boneOffsetForm = manager.allocTransform();
-    manager.setIdentity(boneOffsetForm);
-    manager.setOriginFromArray3(boneOffsetForm, params.position);
-    manager.setBasisFromArray3(boneOffsetForm, params.rotation);
-    const vector = manager.allocThreeVector3();
-    const boneForm = manager.allocTransform();
-    manager.setIdentity(boneForm);
-    manager.setOriginFromThreeVector3(boneForm, bone.getWorldPosition(vector));
-    const form = manager.multiplyTransforms(boneForm, boneOffsetForm);
-    const state = new Ammo.btDefaultMotionState(form);
-    const info = new Ammo.btRigidBodyConstructionInfo(weight, state, shape, localInertia);
-    info.set_m_friction(params.friction);
-    info.set_m_restitution(params.restitution);
-    const body = new Ammo.btRigidBody(info);
-    if (params.type === 0) {
-      body.setCollisionFlags(body.getCollisionFlags() | 2);
-      body.setActivationState(4);
-    }
-    body.setDamping(params.positionDamping, params.rotationDamping);
-    body.setSleepingThresholds(0, 0);
-    this.world.addRigidBody(body, 1 << params.groupIndex, params.groupTarget);
-    this.body = body;
-    this.bone = bone;
-    this.boneOffsetForm = boneOffsetForm;
-    this.boneOffsetFormInverse = manager.inverseTransform(boneOffsetForm);
-    manager.freeVector3(localInertia);
-    manager.freeTransform(form);
-    manager.freeTransform(boneForm);
-    manager.freeThreeVector3(vector);
-  }
-  _getBoneTransform() {
-    const manager = this.manager;
-    const p = manager.allocThreeVector3();
-    const q = manager.allocThreeQuaternion();
-    const s = manager.allocThreeVector3();
-    this.bone.matrixWorld.decompose(p, q, s);
-    const tr = manager.allocTransform();
-    manager.setOriginFromThreeVector3(tr, p);
-    manager.setBasisFromThreeQuaternion(tr, q);
-    const form = manager.multiplyTransforms(tr, this.boneOffsetForm);
-    manager.freeTransform(tr);
-    manager.freeThreeVector3(s);
-    manager.freeThreeQuaternion(q);
-    manager.freeThreeVector3(p);
-    return form;
-  }
-  _getWorldTransformForBone() {
-    const manager = this.manager;
-    const tr = this.body.getCenterOfMassTransform();
-    return manager.multiplyTransforms(tr, this.boneOffsetFormInverse);
-  }
-  _setTransformFromBone() {
-    const manager = this.manager;
-    const form = this._getBoneTransform();
-    this.body.setCenterOfMassTransform(form);
-    this.body.getMotionState().setWorldTransform(form);
-    manager.freeTransform(form);
-  }
-  _setPositionFromBone() {
-    const manager = this.manager;
-    const form = this._getBoneTransform();
-    const tr = manager.allocTransform();
-    this.body.getMotionState().getWorldTransform(tr);
-    manager.copyOrigin(tr, form);
-    this.body.setCenterOfMassTransform(tr);
-    this.body.getMotionState().setWorldTransform(tr);
-    manager.freeTransform(tr);
-    manager.freeTransform(form);
-  }
-  _updateBoneRotation() {
-    const manager = this.manager;
-    const tr = this._getWorldTransformForBone();
-    const q = manager.getBasis(tr);
-    const thQ = manager.allocThreeQuaternion();
-    const thQ2 = manager.allocThreeQuaternion();
-    const thQ3 = manager.allocThreeQuaternion();
-    thQ.set(q.x(), q.y(), q.z(), q.w());
-    thQ2.setFromRotationMatrix(this.bone.matrixWorld);
-    thQ2.conjugate();
-    thQ2.multiply(thQ);
-    thQ3.setFromRotationMatrix(this.bone.matrix);
-    this.bone.quaternion.copy(thQ2.multiply(thQ3).normalize());
-    manager.freeThreeQuaternion(thQ);
-    manager.freeThreeQuaternion(thQ2);
-    manager.freeThreeQuaternion(thQ3);
-    manager.freeQuaternion(q);
-    manager.freeTransform(tr);
-  }
-  _updateBonePosition() {
-    const manager = this.manager;
-    const tr = this._getWorldTransformForBone();
-    const thV = manager.allocThreeVector3();
-    const o = manager.getOrigin(tr);
-    thV.set(o.x(), o.y(), o.z());
-    if (this.bone.parent) {
-      this.bone.parent.worldToLocal(thV);
-    }
-    this.bone.position.copy(thV);
-    manager.freeThreeVector3(thV);
-    manager.freeTransform(tr);
-  }
-}
-class Constraint {
-  /**
-   * @param {THREE.SkinnedMesh} mesh
-   * @param {Ammo.btDiscreteDynamicsWorld} world
-   * @param {RigidBody} bodyA
-   * @param {RigidBody} bodyB
-   * @param {Object} params
-   * @param {ResourceManager} manager
-   */
-  constructor(mesh, world, bodyA, bodyB, params, manager) {
-    this.mesh = mesh;
-    this.world = world;
-    this.bodyA = bodyA;
-    this.bodyB = bodyB;
-    this.params = params;
-    this.manager = manager;
-    this.constraint = null;
-    this._init();
-  }
-  // private method
-  _init() {
-    const manager = this.manager;
-    const params = this.params;
-    const bodyA = this.bodyA;
-    const bodyB = this.bodyB;
-    const form = manager.allocTransform();
-    manager.setIdentity(form);
-    manager.setOriginFromArray3(form, params.position);
-    manager.setBasisFromArray3(form, params.rotation);
-    const formA = manager.allocTransform();
-    const formB = manager.allocTransform();
-    bodyA.body.getMotionState().getWorldTransform(formA);
-    bodyB.body.getMotionState().getWorldTransform(formB);
-    const formInverseA = manager.inverseTransform(formA);
-    const formInverseB = manager.inverseTransform(formB);
-    const formA2 = manager.multiplyTransforms(formInverseA, form);
-    const formB2 = manager.multiplyTransforms(formInverseB, form);
-    const constraint = new Ammo.btGeneric6DofSpringConstraint(bodyA.body, bodyB.body, formA2, formB2, true);
-    const lll = manager.allocVector3();
-    const lul = manager.allocVector3();
-    const all = manager.allocVector3();
-    const aul = manager.allocVector3();
-    lll.setValue(params.translationLimitation1[0], params.translationLimitation1[1], params.translationLimitation1[2]);
-    lul.setValue(params.translationLimitation2[0], params.translationLimitation2[1], params.translationLimitation2[2]);
-    all.setValue(params.rotationLimitation1[0], params.rotationLimitation1[1], params.rotationLimitation1[2]);
-    aul.setValue(params.rotationLimitation2[0], params.rotationLimitation2[1], params.rotationLimitation2[2]);
-    constraint.setLinearLowerLimit(lll);
-    constraint.setLinearUpperLimit(lul);
-    constraint.setAngularLowerLimit(all);
-    constraint.setAngularUpperLimit(aul);
-    for (let i = 0; i < 3; i++) {
-      if (params.springPosition[i] !== 0) {
-        constraint.enableSpring(i, true);
-        constraint.setStiffness(i, params.springPosition[i]);
-      }
-    }
-    for (let i = 0; i < 3; i++) {
-      if (params.springRotation[i] !== 0) {
-        constraint.enableSpring(i + 3, true);
-        constraint.setStiffness(i + 3, params.springRotation[i]);
-      }
-    }
-    if (constraint.setParam !== void 0) {
-      for (let i = 0; i < 6; i++) {
-        constraint.setParam(2, 0.475, i);
-      }
-    }
-    this.world.addConstraint(constraint, true);
-    this.constraint = constraint;
-    manager.freeTransform(form);
-    manager.freeTransform(formA);
-    manager.freeTransform(formB);
-    manager.freeTransform(formInverseA);
-    manager.freeTransform(formInverseB);
-    manager.freeTransform(formA2);
-    manager.freeTransform(formB2);
-    manager.freeVector3(lll);
-    manager.freeVector3(lul);
-    manager.freeVector3(all);
-    manager.freeVector3(aul);
-  }
-}
-const MMDPhysics_position = /* @__PURE__ */ new three_module.Vector3();
-const MMDPhysics_quaternion = /* @__PURE__ */ new three_module.Quaternion();
-const MMDPhysics_scale = /* @__PURE__ */ new three_module.Vector3();
-const _matrixWorldInv = /* @__PURE__ */ new three_module.Matrix4();
-class MMDPhysicsHelper extends three_module.Object3D {
-  /**
-   * Visualize Rigid bodies
-   *
-   * @param {THREE.SkinnedMesh} mesh
-   * @param {Physics} physics
-   */
-  constructor(mesh, physics) {
-    super();
-    this.root = mesh;
-    this.physics = physics;
-    this.matrix.copy(mesh.matrixWorld);
-    this.matrixAutoUpdate = false;
-    this.materials = [];
-    this.materials.push(
-      new three_module.MeshBasicMaterial({
-        color: new three_module.Color(16746632),
-        wireframe: true,
-        depthTest: false,
-        depthWrite: false,
-        opacity: 0.25,
-        transparent: true
-      })
-    );
-    this.materials.push(
-      new three_module.MeshBasicMaterial({
-        color: new three_module.Color(8978312),
-        wireframe: true,
-        depthTest: false,
-        depthWrite: false,
-        opacity: 0.25,
-        transparent: true
-      })
-    );
-    this.materials.push(
-      new three_module.MeshBasicMaterial({
-        color: new three_module.Color(8947967),
-        wireframe: true,
-        depthTest: false,
-        depthWrite: false,
-        opacity: 0.25,
-        transparent: true
-      })
-    );
-    this._init();
-  }
-  /**
-   * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.
-   */
-  dispose() {
-    const materials = this.materials;
-    const children = this.children;
-    for (let i = 0; i < materials.length; i++) {
-      materials[i].dispose();
-    }
-    for (let i = 0; i < children.length; i++) {
-      const child = children[i];
-      if (child.isMesh)
-        child.geometry.dispose();
-    }
-  }
-  /**
-   * Updates Rigid Bodies visualization.
-   */
-  updateMatrixWorld(force) {
-    var mesh = this.root;
-    if (this.visible) {
-      var bodies = this.physics.bodies;
-      _matrixWorldInv.copy(mesh.matrixWorld).decompose(MMDPhysics_position, MMDPhysics_quaternion, MMDPhysics_scale).compose(MMDPhysics_position, MMDPhysics_quaternion, MMDPhysics_scale.set(1, 1, 1)).invert();
-      for (var i = 0, il = bodies.length; i < il; i++) {
-        var body = bodies[i].body;
-        var child = this.children[i];
-        var tr = body.getCenterOfMassTransform();
-        var origin = tr.getOrigin();
-        var rotation = tr.getRotation();
-        child.position.set(origin.x(), origin.y(), origin.z()).applyMatrix4(_matrixWorldInv);
-        child.quaternion.setFromRotationMatrix(_matrixWorldInv).multiply(MMDPhysics_quaternion.set(rotation.x(), rotation.y(), rotation.z(), rotation.w()));
-      }
-    }
-    this.matrix.copy(mesh.matrixWorld).decompose(MMDPhysics_position, MMDPhysics_quaternion, MMDPhysics_scale).compose(MMDPhysics_position, MMDPhysics_quaternion, MMDPhysics_scale.set(1, 1, 1));
-    super.updateMatrixWorld(force);
-  }
-  // private method
-  _init() {
-    var bodies = this.physics.bodies;
-    function createGeometry(param2) {
-      switch (param2.shapeType) {
-        case 0:
-          return new three_module.SphereGeometry(param2.width, 16, 8);
-        case 1:
-          return new three_module.BoxGeometry(param2.width * 2, param2.height * 2, param2.depth * 2, 8, 8, 8);
-        case 2:
-          return new three_module.CapsuleGeometry(param2.width, param2.height, 8, 16);
-        default:
-          return null;
-      }
-    }
-    for (var i = 0, il = bodies.length; i < il; i++) {
-      var param = bodies[i].params;
-      this.add(new three_module.Mesh(createGeometry(param), this.materials[param.type]));
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/animation/MMDAnimationHelper.js
-
-
-
-class MMDAnimationHelper {
-  /**
-   * @param {Object} params - (optional)
-   * @param {boolean} params.sync - Whether animation durations of added objects are synched. Default is true.
-   * @param {Number} params.afterglow - Default is 0.0.
-   * @param {boolean} params.resetPhysicsOnLoop - Default is true.
-   */
-  constructor(params = {}) {
-    this.meshes = [];
-    this.camera = null;
-    this.cameraTarget = new three_module.Object3D();
-    this.cameraTarget.name = "target";
-    this.audio = null;
-    this.audioManager = null;
-    this.objects = /* @__PURE__ */ new WeakMap();
-    this.configuration = {
-      sync: params.sync !== void 0 ? params.sync : true,
-      afterglow: params.afterglow !== void 0 ? params.afterglow : 0,
-      resetPhysicsOnLoop: params.resetPhysicsOnLoop !== void 0 ? params.resetPhysicsOnLoop : true,
-      pmxAnimation: params.pmxAnimation !== void 0 ? params.pmxAnimation : false
-    };
-    this.enabled = {
-      animation: true,
-      ik: true,
-      grant: true,
-      physics: true,
-      cameraAnimation: true
-    };
-    this.onBeforePhysics = function() {
-    };
-    this.sharedPhysics = false;
-    this.masterPhysics = null;
-  }
-  /**
-   * Adds an Three.js Object to helper and setups animation.
-   * The anmation durations of added objects are synched
-   * if this.configuration.sync is true.
-   *
-   * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object
-   * @param {Object} params - (optional)
-   * @param {THREE.AnimationClip|Array<THREE.AnimationClip>} params.animation - Only for THREE.SkinnedMesh and THREE.Camera. Default is undefined.
-   * @param {boolean} params.physics - Only for THREE.SkinnedMesh. Default is true.
-   * @param {Integer} params.warmup - Only for THREE.SkinnedMesh and physics is true. Default is 60.
-   * @param {Number} params.unitStep - Only for THREE.SkinnedMesh and physics is true. Default is 1 / 65.
-   * @param {Integer} params.maxStepNum - Only for THREE.SkinnedMesh and physics is true. Default is 3.
-   * @param {Vector3} params.gravity - Only for THREE.SkinnedMesh and physics is true. Default ( 0, - 9.8 * 10, 0 ).
-   * @param {Number} params.delayTime - Only for THREE.Audio. Default is 0.0.
-   * @return {MMDAnimationHelper}
-   */
-  add(object, params = {}) {
-    if (object.isSkinnedMesh) {
-      this._addMesh(object, params);
-    } else if (object.isCamera) {
-      this._setupCamera(object, params);
-    } else if (object.type === "Audio") {
-      this._setupAudio(object, params);
-    } else {
-      throw new Error(
-        "THREE.MMDAnimationHelper.add: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."
-      );
-    }
-    if (this.configuration.sync)
-      this._syncDuration();
-    return this;
-  }
-  /**
-   * Removes an Three.js Object from helper.
-   *
-   * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object
-   * @return {MMDAnimationHelper}
-   */
-  remove(object) {
-    if (object.isSkinnedMesh) {
-      this._removeMesh(object);
-    } else if (object.isCamera) {
-      this._clearCamera(object);
-    } else if (object.type === "Audio") {
-      this._clearAudio(object);
-    } else {
-      throw new Error(
-        "THREE.MMDAnimationHelper.remove: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."
-      );
-    }
-    if (this.configuration.sync)
-      this._syncDuration();
-    return this;
-  }
-  /**
-   * Updates the animation.
-   *
-   * @param {Number} delta
-   * @return {MMDAnimationHelper}
-   */
-  update(delta) {
-    if (this.audioManager !== null)
-      this.audioManager.control(delta);
-    for (let i = 0; i < this.meshes.length; i++) {
-      this._animateMesh(this.meshes[i], delta);
-    }
-    if (this.sharedPhysics)
-      this._updateSharedPhysics(delta);
-    if (this.camera !== null)
-      this._animateCamera(this.camera, delta);
-    return this;
-  }
-  /**
-   * Changes the pose of SkinnedMesh as VPD specifies.
-   *
-   * @param {THREE.SkinnedMesh} mesh
-   * @param {Object} vpd - VPD content parsed MMDParser
-   * @param {Object} params - (optional)
-   * @param {boolean} params.resetPose - Default is true.
-   * @param {boolean} params.ik - Default is true.
-   * @param {boolean} params.grant - Default is true.
-   * @return {MMDAnimationHelper}
-   */
-  pose(mesh, vpd, params = {}) {
-    if (params.resetPose !== false)
-      mesh.pose();
-    const bones = mesh.skeleton.bones;
-    const boneParams = vpd.bones;
-    const boneNameDictionary = {};
-    for (let i = 0, il = bones.length; i < il; i++) {
-      boneNameDictionary[bones[i].name] = i;
-    }
-    const vector = new three_module.Vector3();
-    const quaternion = new three_module.Quaternion();
-    for (let i = 0, il = boneParams.length; i < il; i++) {
-      const boneParam = boneParams[i];
-      const boneIndex = boneNameDictionary[boneParam.name];
-      if (boneIndex === void 0)
-        continue;
-      const bone = bones[boneIndex];
-      bone.position.add(vector.fromArray(boneParam.translation));
-      bone.quaternion.multiply(quaternion.fromArray(boneParam.quaternion));
-    }
-    mesh.updateMatrixWorld(true);
-    if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === "pmx") {
-      const sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice());
-      const ikSolver = params.ik !== false ? this._createCCDIKSolver(mesh) : null;
-      const grantSolver = params.grant !== false ? this.createGrantSolver(mesh) : null;
-      this._animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver);
-    } else {
-      if (params.ik !== false) {
-        this._createCCDIKSolver(mesh).update();
-      }
-      if (params.grant !== false) {
-        this.createGrantSolver(mesh).update();
-      }
-    }
-    return this;
-  }
-  /**
-   * Enabes/Disables an animation feature.
-   *
-   * @param {string} key
-   * @param {boolean} enabled
-   * @return {MMDAnimationHelper}
-   */
-  enable(key, enabled) {
-    if (this.enabled[key] === void 0) {
-      throw new Error("THREE.MMDAnimationHelper.enable: unknown key " + key);
-    }
-    this.enabled[key] = enabled;
-    if (key === "physics") {
-      for (let i = 0, il = this.meshes.length; i < il; i++) {
-        this._optimizeIK(this.meshes[i], enabled);
-      }
-    }
-    return this;
-  }
-  /**
-   * Creates an GrantSolver instance.
-   *
-   * @param {THREE.SkinnedMesh} mesh
-   * @return {GrantSolver}
-   */
-  createGrantSolver(mesh) {
-    return new GrantSolver(mesh, mesh.geometry.userData.MMD.grants);
-  }
-  // private methods
-  _addMesh(mesh, params) {
-    if (this.meshes.indexOf(mesh) >= 0) {
-      throw new Error("THREE.MMDAnimationHelper._addMesh: SkinnedMesh '" + mesh.name + "' has already been added.");
-    }
-    this.meshes.push(mesh);
-    this.objects.set(mesh, { looped: false });
-    this._setupMeshAnimation(mesh, params.animation);
-    if (params.physics !== false) {
-      this._setupMeshPhysics(mesh, params);
-    }
-    return this;
-  }
-  _setupCamera(camera, params) {
-    if (this.camera === camera) {
-      throw new Error("THREE.MMDAnimationHelper._setupCamera: Camera '" + camera.name + "' has already been set.");
-    }
-    if (this.camera)
-      this.clearCamera(this.camera);
-    this.camera = camera;
-    camera.add(this.cameraTarget);
-    this.objects.set(camera, {});
-    if (params.animation !== void 0) {
-      this._setupCameraAnimation(camera, params.animation);
-    }
-    return this;
-  }
-  _setupAudio(audio, params) {
-    if (this.audio === audio) {
-      throw new Error("THREE.MMDAnimationHelper._setupAudio: Audio '" + audio.name + "' has already been set.");
-    }
-    if (this.audio)
-      this.clearAudio(this.audio);
-    this.audio = audio;
-    this.audioManager = new AudioManager(audio, params);
-    this.objects.set(this.audioManager, {
-      duration: this.audioManager.duration
-    });
-    return this;
-  }
-  _removeMesh(mesh) {
-    let found = false;
-    let writeIndex = 0;
-    for (let i = 0, il = this.meshes.length; i < il; i++) {
-      if (this.meshes[i] === mesh) {
-        this.objects.delete(mesh);
-        found = true;
-        continue;
-      }
-      this.meshes[writeIndex++] = this.meshes[i];
-    }
-    if (!found) {
-      throw new Error(
-        "THREE.MMDAnimationHelper._removeMesh: SkinnedMesh '" + mesh.name + "' has not been added yet."
-      );
-    }
-    this.meshes.length = writeIndex;
-    return this;
-  }
-  _clearCamera(camera) {
-    if (camera !== this.camera) {
-      throw new Error("THREE.MMDAnimationHelper._clearCamera: Camera '" + camera.name + "' has not been set yet.");
-    }
-    this.camera.remove(this.cameraTarget);
-    this.objects.delete(this.camera);
-    this.camera = null;
-    return this;
-  }
-  _clearAudio(audio) {
-    if (audio !== this.audio) {
-      throw new Error("THREE.MMDAnimationHelper._clearAudio: Audio '" + audio.name + "' has not been set yet.");
-    }
-    this.objects.delete(this.audioManager);
-    this.audio = null;
-    this.audioManager = null;
-    return this;
-  }
-  _setupMeshAnimation(mesh, animation) {
-    const objects = this.objects.get(mesh);
-    if (animation !== void 0) {
-      const animations = Array.isArray(animation) ? animation : [animation];
-      objects.mixer = new three_module.AnimationMixer(mesh);
-      for (let i = 0, il = animations.length; i < il; i++) {
-        objects.mixer.clipAction(animations[i]).play();
-      }
-      objects.mixer.addEventListener("loop", function(event) {
-        const tracks = event.action._clip.tracks;
-        if (tracks.length > 0 && tracks[0].name.slice(0, 6) !== ".bones")
-          return;
-        objects.looped = true;
-      });
-    }
-    objects.ikSolver = this._createCCDIKSolver(mesh);
-    objects.grantSolver = this.createGrantSolver(mesh);
-    return this;
-  }
-  _setupCameraAnimation(camera, animation) {
-    const animations = Array.isArray(animation) ? animation : [animation];
-    const objects = this.objects.get(camera);
-    objects.mixer = new three_module.AnimationMixer(camera);
-    for (let i = 0, il = animations.length; i < il; i++) {
-      objects.mixer.clipAction(animations[i]).play();
-    }
-  }
-  _setupMeshPhysics(mesh, params) {
-    const objects = this.objects.get(mesh);
-    if (params.world === void 0 && this.sharedPhysics) {
-      const masterPhysics = this._getMasterPhysics();
-      if (masterPhysics !== null)
-        world = masterPhysics.world;
-    }
-    objects.physics = this._createMMDPhysics(mesh, params);
-    if (objects.mixer && params.animationWarmup !== false) {
-      this._animateMesh(mesh, 0);
-      objects.physics.reset();
-    }
-    objects.physics.warmup(params.warmup !== void 0 ? params.warmup : 60);
-    this._optimizeIK(mesh, true);
-  }
-  _animateMesh(mesh, delta) {
-    const objects = this.objects.get(mesh);
-    const mixer = objects.mixer;
-    const ikSolver = objects.ikSolver;
-    const grantSolver = objects.grantSolver;
-    const physics = objects.physics;
-    const looped = objects.looped;
-    if (mixer && this.enabled.animation) {
-      this._restoreBones(mesh);
-      mixer.update(delta);
-      this._saveBones(mesh);
-      if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === "pmx") {
-        if (!objects.sortedBonesData)
-          objects.sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice());
-        this._animatePMXMesh(
-          mesh,
-          objects.sortedBonesData,
-          ikSolver && this.enabled.ik ? ikSolver : null,
-          grantSolver && this.enabled.grant ? grantSolver : null
-        );
-      } else {
-        if (ikSolver && this.enabled.ik) {
-          mesh.updateMatrixWorld(true);
-          ikSolver.update();
-        }
-        if (grantSolver && this.enabled.grant) {
-          grantSolver.update();
-        }
-      }
-    }
-    if (looped === true && this.enabled.physics) {
-      if (physics && this.configuration.resetPhysicsOnLoop)
-        physics.reset();
-      objects.looped = false;
-    }
-    if (physics && this.enabled.physics && !this.sharedPhysics) {
-      this.onBeforePhysics(mesh);
-      physics.update(delta);
-    }
-  }
-  // Sort bones in order by 1. transformationClass and 2. bone index.
-  // In PMX animation system, bone transformations should be processed
-  // in this order.
-  _sortBoneDataArray(boneDataArray) {
-    return boneDataArray.sort(function(a, b) {
-      if (a.transformationClass !== b.transformationClass) {
-        return a.transformationClass - b.transformationClass;
-      } else {
-        return a.index - b.index;
-      }
-    });
-  }
-  // PMX Animation system is a bit too complex and doesn't great match to
-  // Three.js Animation system. This method attempts to simulate it as much as
-  // possible but doesn't perfectly simulate.
-  // This method is more costly than the regular one so
-  // you are recommended to set constructor parameter "pmxAnimation: true"
-  // only if your PMX model animation doesn't work well.
-  // If you need better method you would be required to write your own.
-  _animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver) {
-    _quaternionIndex = 0;
-    _grantResultMap.clear();
-    for (let i = 0, il = sortedBonesData.length; i < il; i++) {
-      updateOne(mesh, sortedBonesData[i].index, ikSolver, grantSolver);
-    }
-    mesh.updateMatrixWorld(true);
-    return this;
-  }
-  _animateCamera(camera, delta) {
-    const mixer = this.objects.get(camera).mixer;
-    if (mixer && this.enabled.cameraAnimation) {
-      mixer.update(delta);
-      camera.updateProjectionMatrix();
-      camera.up.set(0, 1, 0);
-      camera.up.applyQuaternion(camera.quaternion);
-      camera.lookAt(this.cameraTarget.position);
-    }
-  }
-  _optimizeIK(mesh, physicsEnabled) {
-    const iks = mesh.geometry.userData.MMD.iks;
-    const bones = mesh.geometry.userData.MMD.bones;
-    for (let i = 0, il = iks.length; i < il; i++) {
-      const ik = iks[i];
-      const links = ik.links;
-      for (let j = 0, jl = links.length; j < jl; j++) {
-        const link = links[j];
-        if (physicsEnabled === true) {
-          link.enabled = bones[link.index].rigidBodyType > 0 ? false : true;
-        } else {
-          link.enabled = true;
-        }
-      }
-    }
-  }
-  _createCCDIKSolver(mesh) {
-    if (CCDIKSolver === void 0) {
-      throw new Error("THREE.MMDAnimationHelper: Import CCDIKSolver.");
-    }
-    return new CCDIKSolver(mesh, mesh.geometry.userData.MMD.iks);
-  }
-  _createMMDPhysics(mesh, params) {
-    if (MMDPhysics === void 0) {
-      throw new Error("THREE.MMDPhysics: Import MMDPhysics.");
-    }
-    return new MMDPhysics(mesh, mesh.geometry.userData.MMD.rigidBodies, mesh.geometry.userData.MMD.constraints, params);
-  }
-  /*
-   * Detects the longest duration and then sets it to them to sync.
-   * TODO: Not to access private properties ( ._actions and ._clip )
-   */
-  _syncDuration() {
-    let max = 0;
-    const objects = this.objects;
-    const meshes = this.meshes;
-    const camera = this.camera;
-    const audioManager = this.audioManager;
-    for (let i = 0, il = meshes.length; i < il; i++) {
-      const mixer = this.objects.get(meshes[i]).mixer;
-      if (mixer === void 0)
-        continue;
-      for (let j = 0; j < mixer._actions.length; j++) {
-        const clip = mixer._actions[j]._clip;
-        if (!objects.has(clip)) {
-          objects.set(clip, {
-            duration: clip.duration
-          });
-        }
-        max = Math.max(max, objects.get(clip).duration);
-      }
-    }
-    if (camera !== null) {
-      const mixer = this.objects.get(camera).mixer;
-      if (mixer !== void 0) {
-        for (let i = 0, il = mixer._actions.length; i < il; i++) {
-          const clip = mixer._actions[i]._clip;
-          if (!objects.has(clip)) {
-            objects.set(clip, {
-              duration: clip.duration
-            });
-          }
-          max = Math.max(max, objects.get(clip).duration);
-        }
-      }
-    }
-    if (audioManager !== null) {
-      max = Math.max(max, objects.get(audioManager).duration);
-    }
-    max += this.configuration.afterglow;
-    for (let i = 0, il = this.meshes.length; i < il; i++) {
-      const mixer = this.objects.get(this.meshes[i]).mixer;
-      if (mixer === void 0)
-        continue;
-      for (let j = 0, jl = mixer._actions.length; j < jl; j++) {
-        mixer._actions[j]._clip.duration = max;
-      }
-    }
-    if (camera !== null) {
-      const mixer = this.objects.get(camera).mixer;
-      if (mixer !== void 0) {
-        for (let i = 0, il = mixer._actions.length; i < il; i++) {
-          mixer._actions[i]._clip.duration = max;
-        }
-      }
-    }
-    if (audioManager !== null) {
-      audioManager.duration = max;
-    }
-  }
-  // workaround
-  _updatePropertyMixersBuffer(mesh) {
-    const mixer = this.objects.get(mesh).mixer;
-    const propertyMixers = mixer._bindings;
-    const accuIndex = mixer._accuIndex;
-    for (let i = 0, il = propertyMixers.length; i < il; i++) {
-      const propertyMixer = propertyMixers[i];
-      const buffer = propertyMixer.buffer;
-      const stride = propertyMixer.valueSize;
-      const offset = (accuIndex + 1) * stride;
-      propertyMixer.binding.getValue(buffer, offset);
-    }
-  }
-  /*
-   * Avoiding these two issues by restore/save bones before/after mixer animation.
-   *
-   * 1. PropertyMixer used by AnimationMixer holds cache value in .buffer.
-   *    Calculating IK, Grant, and Physics after mixer animation can break
-   *    the cache coherency.
-   *
-   * 2. Applying Grant two or more times without reset the posing breaks model.
-   */
-  _saveBones(mesh) {
-    const objects = this.objects.get(mesh);
-    const bones = mesh.skeleton.bones;
-    let backupBones = objects.backupBones;
-    if (backupBones === void 0) {
-      backupBones = new Float32Array(bones.length * 7);
-      objects.backupBones = backupBones;
-    }
-    for (let i = 0, il = bones.length; i < il; i++) {
-      const bone = bones[i];
-      bone.position.toArray(backupBones, i * 7);
-      bone.quaternion.toArray(backupBones, i * 7 + 3);
-    }
-  }
-  _restoreBones(mesh) {
-    const objects = this.objects.get(mesh);
-    const backupBones = objects.backupBones;
-    if (backupBones === void 0)
-      return;
-    const bones = mesh.skeleton.bones;
-    for (let i = 0, il = bones.length; i < il; i++) {
-      const bone = bones[i];
-      bone.position.fromArray(backupBones, i * 7);
-      bone.quaternion.fromArray(backupBones, i * 7 + 3);
-    }
-  }
-  // experimental
-  _getMasterPhysics() {
-    if (this.masterPhysics !== null)
-      return this.masterPhysics;
-    for (let i = 0, il = this.meshes.length; i < il; i++) {
-      const physics = this.meshes[i].physics;
-      if (physics !== void 0 && physics !== null) {
-        this.masterPhysics = physics;
-        return this.masterPhysics;
-      }
-    }
-    return null;
-  }
-  _updateSharedPhysics(delta) {
-    if (this.meshes.length === 0 || !this.enabled.physics || !this.sharedPhysics)
-      return;
-    const physics = this._getMasterPhysics();
-    if (physics === null)
-      return;
-    for (let i = 0, il = this.meshes.length; i < il; i++) {
-      const p = this.meshes[i].physics;
-      if (p !== null && p !== void 0) {
-        p.updateRigidBodies();
-      }
-    }
-    physics.stepSimulation(delta);
-    for (let i = 0, il = this.meshes.length; i < il; i++) {
-      const p = this.meshes[i].physics;
-      if (p !== null && p !== void 0) {
-        p.updateBones();
-      }
-    }
-  }
-}
-const _quaternions = [];
-let _quaternionIndex = 0;
-function getQuaternion() {
-  if (_quaternionIndex >= _quaternions.length) {
-    _quaternions.push(new three_module.Quaternion());
-  }
-  return _quaternions[_quaternionIndex++];
-}
-const _grantResultMap = /* @__PURE__ */ new Map();
-function updateOne(mesh, boneIndex, ikSolver, grantSolver) {
-  const bones = mesh.skeleton.bones;
-  const bonesData = mesh.geometry.userData.MMD.bones;
-  const boneData = bonesData[boneIndex];
-  const bone = bones[boneIndex];
-  if (_grantResultMap.has(boneIndex))
-    return;
-  const quaternion = getQuaternion();
-  _grantResultMap.set(boneIndex, quaternion.copy(bone.quaternion));
-  if (grantSolver && boneData.grant && !boneData.grant.isLocal && boneData.grant.affectRotation) {
-    const parentIndex = boneData.grant.parentIndex;
-    const ratio = boneData.grant.ratio;
-    if (!_grantResultMap.has(parentIndex)) {
-      updateOne(mesh, parentIndex, ikSolver, grantSolver);
-    }
-    grantSolver.addGrantRotation(bone, _grantResultMap.get(parentIndex), ratio);
-  }
-  if (ikSolver && boneData.ik) {
-    mesh.updateMatrixWorld(true);
-    ikSolver.updateOne(boneData.ik);
-    const links = boneData.ik.links;
-    for (let i = 0, il = links.length; i < il; i++) {
-      const link = links[i];
-      if (link.enabled === false)
-        continue;
-      const linkIndex = link.index;
-      if (_grantResultMap.has(linkIndex)) {
-        _grantResultMap.set(linkIndex, _grantResultMap.get(linkIndex).copy(bones[linkIndex].quaternion));
-      }
-    }
-  }
-  quaternion.copy(bone.quaternion);
-}
-class AudioManager {
-  /**
-   * @param {THREE.Audio} audio
-   * @param {Object} params - (optional)
-   * @param {Nuumber} params.delayTime
-   */
-  constructor(audio, params = {}) {
-    this.audio = audio;
-    this.elapsedTime = 0;
-    this.currentTime = 0;
-    this.delayTime = params.delayTime !== void 0 ? params.delayTime : 0;
-    this.audioDuration = this.audio.buffer.duration;
-    this.duration = this.audioDuration + this.delayTime;
-  }
-  /**
-   * @param {Number} delta
-   * @return {AudioManager}
-   */
-  control(delta) {
-    this.elapsed += delta;
-    this.currentTime += delta;
-    if (this._shouldStopAudio())
-      this.audio.stop();
-    if (this._shouldStartAudio())
-      this.audio.play();
-    return this;
-  }
-  // private methods
-  _shouldStartAudio() {
-    if (this.audio.isPlaying)
-      return false;
-    while (this.currentTime >= this.duration) {
-      this.currentTime -= this.duration;
-    }
-    if (this.currentTime < this.delayTime)
-      return false;
-    if (this.currentTime - this.delayTime > this.audioDuration)
-      return false;
-    return true;
-  }
-  _shouldStopAudio() {
-    return this.audio.isPlaying && this.currentTime >= this.duration;
-  }
-}
-const MMDAnimationHelper_q = /* @__PURE__ */ new three_module.Quaternion();
-class GrantSolver {
-  constructor(mesh, grants = []) {
-    this.mesh = mesh;
-    this.grants = grants;
-  }
-  /**
-   * Solve all the grant bones
-   * @return {GrantSolver}
-   */
-  update() {
-    const grants = this.grants;
-    for (let i = 0, il = grants.length; i < il; i++) {
-      this.updateOne(grants[i]);
-    }
-    return this;
-  }
-  /**
-   * Solve a grant bone
-   * @param {Object} grant - grant parameter
-   * @return {GrantSolver}
-   */
-  updateOne(grant) {
-    const bones = this.mesh.skeleton.bones;
-    const bone = bones[grant.index];
-    const parentBone = bones[grant.parentIndex];
-    if (grant.isLocal) {
-      if (grant.affectPosition) {
-      }
-      if (grant.affectRotation) {
-      }
-    } else {
-      if (grant.affectPosition) {
-      }
-      if (grant.affectRotation) {
-        this.addGrantRotation(bone, parentBone.quaternion, grant.ratio);
-      }
-    }
-    return this;
-  }
-  addGrantRotation(bone, q, ratio) {
-    MMDAnimationHelper_q.set(0, 0, 0, 1);
-    MMDAnimationHelper_q.slerp(q, ratio);
-    bone.quaternion.multiply(MMDAnimationHelper_q);
-    return this;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/objects/Reflector.js
-var Reflector_defProp = Object.defineProperty;
-var Reflector_defNormalProp = (obj, key, value) => key in obj ? Reflector_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var Reflector_publicField = (obj, key, value) => {
-  Reflector_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-const _Reflector = class extends three_module.Mesh {
-  constructor(geometry, options = {}) {
-    super(geometry);
-    this.isReflector = true;
-    this.type = "Reflector";
-    this.camera = new three_module.PerspectiveCamera();
-    const scope = this;
-    const color = options.color !== void 0 ? new three_module.Color(options.color) : new three_module.Color(8355711);
-    const textureWidth = options.textureWidth || 512;
-    const textureHeight = options.textureHeight || 512;
-    const clipBias = options.clipBias || 0;
-    const shader = options.shader || _Reflector.ReflectorShader;
-    const multisample = options.multisample !== void 0 ? options.multisample : 4;
-    const reflectorPlane = new three_module.Plane();
-    const normal = new three_module.Vector3();
-    const reflectorWorldPosition = new three_module.Vector3();
-    const cameraWorldPosition = new three_module.Vector3();
-    const rotationMatrix = new three_module.Matrix4();
-    const lookAtPosition = new three_module.Vector3(0, 0, -1);
-    const clipPlane = new three_module.Vector4();
-    const view = new three_module.Vector3();
-    const target = new three_module.Vector3();
-    const q = new three_module.Vector4();
-    const textureMatrix = new three_module.Matrix4();
-    const virtualCamera = this.camera;
-    const renderTarget = new three_module.WebGLRenderTarget(textureWidth, textureHeight, {
-      samples: multisample,
-      type: three_module.HalfFloatType
-    });
-    const material = new three_module.ShaderMaterial({
-      uniforms: three_module.UniformsUtils.clone(shader.uniforms),
-      fragmentShader: shader.fragmentShader,
-      vertexShader: shader.vertexShader
-    });
-    material.uniforms["tDiffuse"].value = renderTarget.texture;
-    material.uniforms["color"].value = color;
-    material.uniforms["textureMatrix"].value = textureMatrix;
-    this.material = material;
-    this.onBeforeRender = function(renderer, scene, camera) {
-      reflectorWorldPosition.setFromMatrixPosition(scope.matrixWorld);
-      cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
-      rotationMatrix.extractRotation(scope.matrixWorld);
-      normal.set(0, 0, 1);
-      normal.applyMatrix4(rotationMatrix);
-      view.subVectors(reflectorWorldPosition, cameraWorldPosition);
-      if (view.dot(normal) > 0)
-        return;
-      view.reflect(normal).negate();
-      view.add(reflectorWorldPosition);
-      rotationMatrix.extractRotation(camera.matrixWorld);
-      lookAtPosition.set(0, 0, -1);
-      lookAtPosition.applyMatrix4(rotationMatrix);
-      lookAtPosition.add(cameraWorldPosition);
-      target.subVectors(reflectorWorldPosition, lookAtPosition);
-      target.reflect(normal).negate();
-      target.add(reflectorWorldPosition);
-      virtualCamera.position.copy(view);
-      virtualCamera.up.set(0, 1, 0);
-      virtualCamera.up.applyMatrix4(rotationMatrix);
-      virtualCamera.up.reflect(normal);
-      virtualCamera.lookAt(target);
-      virtualCamera.far = camera.far;
-      virtualCamera.updateMatrixWorld();
-      virtualCamera.projectionMatrix.copy(camera.projectionMatrix);
-      textureMatrix.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1);
-      textureMatrix.multiply(virtualCamera.projectionMatrix);
-      textureMatrix.multiply(virtualCamera.matrixWorldInverse);
-      textureMatrix.multiply(scope.matrixWorld);
-      reflectorPlane.setFromNormalAndCoplanarPoint(normal, reflectorWorldPosition);
-      reflectorPlane.applyMatrix4(virtualCamera.matrixWorldInverse);
-      clipPlane.set(reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant);
-      const projectionMatrix = virtualCamera.projectionMatrix;
-      q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];
-      q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];
-      q.z = -1;
-      q.w = (1 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];
-      clipPlane.multiplyScalar(2 / clipPlane.dot(q));
-      projectionMatrix.elements[2] = clipPlane.x;
-      projectionMatrix.elements[6] = clipPlane.y;
-      projectionMatrix.elements[10] = clipPlane.z + 1 - clipBias;
-      projectionMatrix.elements[14] = clipPlane.w;
-      scope.visible = false;
-      const currentRenderTarget = renderer.getRenderTarget();
-      const currentXrEnabled = renderer.xr.enabled;
-      const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
-      const currentToneMapping = renderer.toneMapping;
-      let isSRGB = false;
-      if ("outputColorSpace" in renderer)
-        isSRGB = renderer.outputColorSpace === "srgb";
-      else
-        isSRGB = renderer.outputEncoding === 3001;
-      renderer.xr.enabled = false;
-      renderer.shadowMap.autoUpdate = false;
-      if ("outputColorSpace" in renderer)
-        renderer.outputColorSpace = "linear-srgb";
-      else
-        renderer.outputEncoding = 3e3;
-      renderer.toneMapping = three_module.NoToneMapping;
-      renderer.setRenderTarget(renderTarget);
-      renderer.state.buffers.depth.setMask(true);
-      if (renderer.autoClear === false)
-        renderer.clear();
-      renderer.render(scene, virtualCamera);
-      renderer.xr.enabled = currentXrEnabled;
-      renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
-      renderer.toneMapping = currentToneMapping;
-      if ("outputColorSpace" in renderer)
-        renderer.outputColorSpace = isSRGB ? "srgb" : "srgb-linear";
-      else
-        renderer.outputEncoding = isSRGB ? 3001 : 3e3;
-      renderer.setRenderTarget(currentRenderTarget);
-      const viewport = camera.viewport;
-      if (viewport !== void 0) {
-        renderer.state.viewport(viewport);
-      }
-      scope.visible = true;
-    };
-    this.getRenderTarget = function() {
-      return renderTarget;
-    };
-    this.dispose = function() {
-      renderTarget.dispose();
-      scope.material.dispose();
-    };
-  }
-};
-let Reflector = _Reflector;
-Reflector_publicField(Reflector, "ReflectorShader", {
-  uniforms: {
-    color: {
-      value: null
-    },
-    tDiffuse: {
-      value: null
-    },
-    textureMatrix: {
-      value: null
-    }
-  },
-  vertexShader: (
-    /* glsl */
-    `
-		uniform mat4 textureMatrix;
-		varying vec4 vUv;
-
-		#include <common>
-		#include <logdepthbuf_pars_vertex>
-
-		void main() {
-
-			vUv = textureMatrix * vec4( position, 1.0 );
-
-			gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-
-			#include <logdepthbuf_vertex>
-
-		}`
-  ),
-  fragmentShader: (
-    /* glsl */
-    `
-		uniform vec3 color;
-		uniform sampler2D tDiffuse;
-		varying vec4 vUv;
-
-		#include <logdepthbuf_pars_fragment>
-
-		float blendOverlay( float base, float blend ) {
-
-			return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );
-
-		}
-
-		vec3 blendOverlay( vec3 base, vec3 blend ) {
-
-			return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );
-
-		}
-
-		void main() {
-
-			#include <logdepthbuf_fragment>
-
-			vec4 base = texture2DProj( tDiffuse, vUv );
-			gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );
-
-			#include <tonemapping_fragment>
-			#include <encodings_fragment>
-
-		}`
-  )
-});
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/objects/Refractor.js
-var Refractor_defProp = Object.defineProperty;
-var Refractor_defNormalProp = (obj, key, value) => key in obj ? Refractor_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var Refractor_publicField = (obj, key, value) => {
-  Refractor_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-const _Refractor = class extends three_module.Mesh {
-  constructor(geometry, options = {}) {
-    super(geometry);
-    this.isRefractor = true;
-    this.type = "Refractor";
-    this.camera = new three_module.PerspectiveCamera();
-    const scope = this;
-    const color = options.color !== void 0 ? new three_module.Color(options.color) : new three_module.Color(8355711);
-    const textureWidth = options.textureWidth || 512;
-    const textureHeight = options.textureHeight || 512;
-    const clipBias = options.clipBias || 0;
-    const shader = options.shader || _Refractor.RefractorShader;
-    const multisample = options.multisample !== void 0 ? options.multisample : 4;
-    const virtualCamera = this.camera;
-    virtualCamera.matrixAutoUpdate = false;
-    virtualCamera.userData.refractor = true;
-    const refractorPlane = new three_module.Plane();
-    const textureMatrix = new three_module.Matrix4();
-    const renderTarget = new three_module.WebGLRenderTarget(textureWidth, textureHeight, {
-      samples: multisample,
-      type: three_module.HalfFloatType
-    });
-    this.material = new three_module.ShaderMaterial({
-      uniforms: three_module.UniformsUtils.clone(shader.uniforms),
-      vertexShader: shader.vertexShader,
-      fragmentShader: shader.fragmentShader,
-      transparent: true
-      // ensures, refractors are drawn from farthest to closest
-    });
-    this.material.uniforms["color"].value = color;
-    this.material.uniforms["tDiffuse"].value = renderTarget.texture;
-    this.material.uniforms["textureMatrix"].value = textureMatrix;
-    const visible = function() {
-      const refractorWorldPosition = new three_module.Vector3();
-      const cameraWorldPosition = new three_module.Vector3();
-      const rotationMatrix = new three_module.Matrix4();
-      const view = new three_module.Vector3();
-      const normal = new three_module.Vector3();
-      return function visible2(camera) {
-        refractorWorldPosition.setFromMatrixPosition(scope.matrixWorld);
-        cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
-        view.subVectors(refractorWorldPosition, cameraWorldPosition);
-        rotationMatrix.extractRotation(scope.matrixWorld);
-        normal.set(0, 0, 1);
-        normal.applyMatrix4(rotationMatrix);
-        return view.dot(normal) < 0;
-      };
-    }();
-    const updateRefractorPlane = function() {
-      const normal = new three_module.Vector3();
-      const position = new three_module.Vector3();
-      const quaternion = new three_module.Quaternion();
-      const scale = new three_module.Vector3();
-      return function updateRefractorPlane2() {
-        scope.matrixWorld.decompose(position, quaternion, scale);
-        normal.set(0, 0, 1).applyQuaternion(quaternion).normalize();
-        normal.negate();
-        refractorPlane.setFromNormalAndCoplanarPoint(normal, position);
-      };
-    }();
-    const updateVirtualCamera = function() {
-      const clipPlane = new three_module.Plane();
-      const clipVector = new three_module.Vector4();
-      const q = new three_module.Vector4();
-      return function updateVirtualCamera2(camera) {
-        virtualCamera.matrixWorld.copy(camera.matrixWorld);
-        virtualCamera.matrixWorldInverse.copy(virtualCamera.matrixWorld).invert();
-        virtualCamera.projectionMatrix.copy(camera.projectionMatrix);
-        virtualCamera.far = camera.far;
-        clipPlane.copy(refractorPlane);
-        clipPlane.applyMatrix4(virtualCamera.matrixWorldInverse);
-        clipVector.set(clipPlane.normal.x, clipPlane.normal.y, clipPlane.normal.z, clipPlane.constant);
-        const projectionMatrix = virtualCamera.projectionMatrix;
-        q.x = (Math.sign(clipVector.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];
-        q.y = (Math.sign(clipVector.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];
-        q.z = -1;
-        q.w = (1 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];
-        clipVector.multiplyScalar(2 / clipVector.dot(q));
-        projectionMatrix.elements[2] = clipVector.x;
-        projectionMatrix.elements[6] = clipVector.y;
-        projectionMatrix.elements[10] = clipVector.z + 1 - clipBias;
-        projectionMatrix.elements[14] = clipVector.w;
-      };
-    }();
-    function updateTextureMatrix(camera) {
-      textureMatrix.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1);
-      textureMatrix.multiply(camera.projectionMatrix);
-      textureMatrix.multiply(camera.matrixWorldInverse);
-      textureMatrix.multiply(scope.matrixWorld);
-    }
-    function render(renderer, scene, camera) {
-      scope.visible = false;
-      const currentRenderTarget = renderer.getRenderTarget();
-      const currentXrEnabled = renderer.xr.enabled;
-      const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
-      const currentToneMapping = renderer.toneMapping;
-      let isSRGB = false;
-      if ("outputColorSpace" in renderer)
-        isSRGB = renderer.outputColorSpace === "srgb";
-      else
-        isSRGB = renderer.outputEncoding === 3001;
-      renderer.xr.enabled = false;
-      renderer.shadowMap.autoUpdate = false;
-      if ("outputColorSpace" in renderer)
-        renderer.outputColorSpace = "linear-srgb";
-      else
-        renderer.outputEncoding = 3e3;
-      renderer.toneMapping = three_module.NoToneMapping;
-      renderer.setRenderTarget(renderTarget);
-      if (renderer.autoClear === false)
-        renderer.clear();
-      renderer.render(scene, virtualCamera);
-      renderer.xr.enabled = currentXrEnabled;
-      renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
-      renderer.toneMapping = currentToneMapping;
-      renderer.setRenderTarget(currentRenderTarget);
-      if ("outputColorSpace" in renderer)
-        renderer.outputColorSpace = isSRGB ? "srgb" : "srgb-linear";
-      else
-        renderer.outputEncoding = isSRGB ? 3001 : 3e3;
-      const viewport = camera.viewport;
-      if (viewport !== void 0) {
-        renderer.state.viewport(viewport);
-      }
-      scope.visible = true;
-    }
-    this.onBeforeRender = function(renderer, scene, camera) {
-      if (camera.userData.refractor === true)
-        return;
-      if (!visible(camera) === true)
-        return;
-      updateRefractorPlane();
-      updateTextureMatrix(camera);
-      updateVirtualCamera(camera);
-      render(renderer, scene, camera);
-    };
-    this.getRenderTarget = function() {
-      return renderTarget;
-    };
-    this.dispose = function() {
-      renderTarget.dispose();
-      scope.material.dispose();
-    };
-  }
-};
-let Refractor = _Refractor;
-Refractor_publicField(Refractor, "RefractorShader", {
-  uniforms: {
-    color: {
-      value: null
-    },
-    tDiffuse: {
-      value: null
-    },
-    textureMatrix: {
-      value: null
-    }
-  },
-  vertexShader: (
-    /* glsl */
-    `
-
-		uniform mat4 textureMatrix;
-
-		varying vec4 vUv;
-
-		void main() {
-
-			vUv = textureMatrix * vec4( position, 1.0 );
-			gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-
-		}`
-  ),
-  fragmentShader: (
-    /* glsl */
-    `
-
-		uniform vec3 color;
-		uniform sampler2D tDiffuse;
-
-		varying vec4 vUv;
-
-		float blendOverlay( float base, float blend ) {
-
-			return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );
-
-		}
-
-		vec3 blendOverlay( vec3 base, vec3 blend ) {
-
-			return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );
-
-		}
-
-		void main() {
-
-			vec4 base = texture2DProj( tDiffuse, vUv );
-			gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );
-
-			#include <tonemapping_fragment>
-			#include <encodings_fragment>
-
-		}`
-  )
-});
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/objects/ShadowMesh.js
-
-const _shadowMatrix = /* @__PURE__ */ new three_module.Matrix4();
-class ShadowMesh extends three_module.Mesh {
-  constructor(mesh) {
-    const shadowMaterial = new three_module.MeshBasicMaterial({
-      color: 0,
-      transparent: true,
-      opacity: 0.6,
-      depthWrite: false,
-      stencilWrite: true,
-      stencilFunc: three_module.EqualStencilFunc,
-      stencilRef: 0,
-      stencilZPass: three_module.IncrementStencilOp
-    });
-    super(mesh.geometry, shadowMaterial);
-    this.isShadowMesh = true;
-    this.meshMatrix = mesh.matrixWorld;
-    this.frustumCulled = false;
-    this.matrixAutoUpdate = false;
-  }
-  update(plane, lightPosition4D) {
-    const dot = plane.normal.x * lightPosition4D.x + plane.normal.y * lightPosition4D.y + plane.normal.z * lightPosition4D.z + -plane.constant * lightPosition4D.w;
-    const sme = _shadowMatrix.elements;
-    sme[0] = dot - lightPosition4D.x * plane.normal.x;
-    sme[4] = -lightPosition4D.x * plane.normal.y;
-    sme[8] = -lightPosition4D.x * plane.normal.z;
-    sme[12] = -lightPosition4D.x * -plane.constant;
-    sme[1] = -lightPosition4D.y * plane.normal.x;
-    sme[5] = dot - lightPosition4D.y * plane.normal.y;
-    sme[9] = -lightPosition4D.y * plane.normal.z;
-    sme[13] = -lightPosition4D.y * -plane.constant;
-    sme[2] = -lightPosition4D.z * plane.normal.x;
-    sme[6] = -lightPosition4D.z * plane.normal.y;
-    sme[10] = dot - lightPosition4D.z * plane.normal.z;
-    sme[14] = -lightPosition4D.z * -plane.constant;
-    sme[3] = -lightPosition4D.w * plane.normal.x;
-    sme[7] = -lightPosition4D.w * plane.normal.y;
-    sme[11] = -lightPosition4D.w * plane.normal.z;
-    sme[15] = dot - lightPosition4D.w * -plane.constant;
-    this.matrix.multiplyMatrices(_shadowMatrix, this.meshMatrix);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/objects/Lensflare.js
-var Lensflare_defProp = Object.defineProperty;
-var Lensflare_defNormalProp = (obj, key, value) => key in obj ? Lensflare_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var Lensflare_publicField = (obj, key, value) => {
-  Lensflare_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-const geometry = /* @__PURE__ */ new three_module.BufferGeometry();
-const float32Array = /* @__PURE__ */ new Float32Array([-1, -1, 0, 0, 0, 1, -1, 0, 1, 0, 1, 1, 0, 1, 1, -1, 1, 0, 0, 1]);
-const interleavedBuffer = /* @__PURE__ */ new three_module.InterleavedBuffer(float32Array, 5);
-/* @__PURE__ */ geometry.setIndex([0, 1, 2, 0, 2, 3]);
-/* @__PURE__ */ geometry.setAttribute(
-  "position",
-  /* @__PURE__ */ new three_module.InterleavedBufferAttribute(interleavedBuffer, 3, 0, false)
-);
-/* @__PURE__ */ geometry.setAttribute(
-  "uv",
-  /* @__PURE__ */ new three_module.InterleavedBufferAttribute(interleavedBuffer, 2, 3, false)
-);
-const _Lensflare = class extends three_module.Mesh {
-  constructor() {
-    super(_Lensflare.Geometry, new three_module.MeshBasicMaterial({ opacity: 0, transparent: true }));
-    this.isLensflare = true;
-    this.type = "Lensflare";
-    this.frustumCulled = false;
-    this.renderOrder = Infinity;
-    const positionScreen = new three_module.Vector3();
-    const positionView = new three_module.Vector3();
-    const tempMap = new three_module.DataTexture(new Uint8Array(16 * 16 * 3), 16, 16, three_module.RGBAFormat);
-    tempMap.minFilter = three_module.NearestFilter;
-    tempMap.magFilter = three_module.NearestFilter;
-    tempMap.wrapS = three_module.ClampToEdgeWrapping;
-    tempMap.wrapT = three_module.ClampToEdgeWrapping;
-    const occlusionMap = new three_module.DataTexture(new Uint8Array(16 * 16 * 3), 16, 16, three_module.RGBAFormat);
-    occlusionMap.minFilter = three_module.NearestFilter;
-    occlusionMap.magFilter = three_module.NearestFilter;
-    occlusionMap.wrapS = three_module.ClampToEdgeWrapping;
-    occlusionMap.wrapT = three_module.ClampToEdgeWrapping;
-    const geometry2 = _Lensflare.Geometry;
-    const material1a = new three_module.RawShaderMaterial({
-      uniforms: {
-        scale: { value: null },
-        screenPosition: { value: null }
-      },
-      vertexShader: (
-        /* glsl */
-        `
-
-				precision highp float;
-
-				uniform vec3 screenPosition;
-				uniform vec2 scale;
-
-				attribute vec3 position;
-
-				void main() {
-
-					gl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );
-
-				}`
-      ),
-      fragmentShader: (
-        /* glsl */
-        `
-
-				precision highp float;
-
-				void main() {
-
-					gl_FragColor = vec4( 1.0, 0.0, 1.0, 1.0 );
-
-				}`
-      ),
-      depthTest: true,
-      depthWrite: false,
-      transparent: false
-    });
-    const material1b = new three_module.RawShaderMaterial({
-      uniforms: {
-        map: { value: tempMap },
-        scale: { value: null },
-        screenPosition: { value: null }
-      },
-      vertexShader: (
-        /* glsl */
-        `
-
-				precision highp float;
-
-				uniform vec3 screenPosition;
-				uniform vec2 scale;
-
-				attribute vec3 position;
-				attribute vec2 uv;
-
-				varying vec2 vUV;
-
-				void main() {
-
-					vUV = uv;
-
-					gl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );
-
-				}`
-      ),
-      fragmentShader: (
-        /* glsl */
-        `
-
-				precision highp float;
-
-				uniform sampler2D map;
-
-				varying vec2 vUV;
-
-				void main() {
-
-					gl_FragColor = texture2D( map, vUV );
-
-				}`
-      ),
-      depthTest: false,
-      depthWrite: false,
-      transparent: false
-    });
-    const mesh1 = new three_module.Mesh(geometry2, material1a);
-    const elements = [];
-    const shader = LensflareElement.Shader;
-    const material2 = new three_module.RawShaderMaterial({
-      uniforms: {
-        map: { value: null },
-        occlusionMap: { value: occlusionMap },
-        color: { value: new three_module.Color(16777215) },
-        scale: { value: new three_module.Vector2() },
-        screenPosition: { value: new three_module.Vector3() }
-      },
-      vertexShader: shader.vertexShader,
-      fragmentShader: shader.fragmentShader,
-      blending: three_module.AdditiveBlending,
-      transparent: true,
-      depthWrite: false
-    });
-    const mesh2 = new three_module.Mesh(geometry2, material2);
-    this.addElement = function(element) {
-      elements.push(element);
-    };
-    const scale = new three_module.Vector2();
-    const screenPositionPixels = new three_module.Vector2();
-    const validArea = new three_module.Box2();
-    const viewport = new three_module.Vector4();
-    this.onBeforeRender = function(renderer, scene, camera) {
-      renderer.getCurrentViewport(viewport);
-      const invAspect = viewport.w / viewport.z;
-      const halfViewportWidth = viewport.z / 2;
-      const halfViewportHeight = viewport.w / 2;
-      let size = 16 / viewport.w;
-      scale.set(size * invAspect, size);
-      validArea.min.set(viewport.x, viewport.y);
-      validArea.max.set(viewport.x + (viewport.z - 16), viewport.y + (viewport.w - 16));
-      positionView.setFromMatrixPosition(this.matrixWorld);
-      positionView.applyMatrix4(camera.matrixWorldInverse);
-      if (positionView.z > 0)
-        return;
-      positionScreen.copy(positionView).applyMatrix4(camera.projectionMatrix);
-      screenPositionPixels.x = viewport.x + positionScreen.x * halfViewportWidth + halfViewportWidth - 8;
-      screenPositionPixels.y = viewport.y + positionScreen.y * halfViewportHeight + halfViewportHeight - 8;
-      if (validArea.containsPoint(screenPositionPixels)) {
-        renderer.copyFramebufferToTexture(screenPositionPixels, tempMap);
-        let uniforms = material1a.uniforms;
-        uniforms["scale"].value = scale;
-        uniforms["screenPosition"].value = positionScreen;
-        renderer.renderBufferDirect(camera, null, geometry2, material1a, mesh1, null);
-        renderer.copyFramebufferToTexture(screenPositionPixels, occlusionMap);
-        uniforms = material1b.uniforms;
-        uniforms["scale"].value = scale;
-        uniforms["screenPosition"].value = positionScreen;
-        renderer.renderBufferDirect(camera, null, geometry2, material1b, mesh1, null);
-        const vecX = -positionScreen.x * 2;
-        const vecY = -positionScreen.y * 2;
-        for (let i = 0, l = elements.length; i < l; i++) {
-          const element = elements[i];
-          const uniforms2 = material2.uniforms;
-          uniforms2["color"].value.copy(element.color);
-          uniforms2["map"].value = element.texture;
-          uniforms2["screenPosition"].value.x = positionScreen.x + vecX * element.distance;
-          uniforms2["screenPosition"].value.y = positionScreen.y + vecY * element.distance;
-          size = element.size / viewport.w;
-          const invAspect2 = viewport.w / viewport.z;
-          uniforms2["scale"].value.set(size * invAspect2, size);
-          material2.uniformsNeedUpdate = true;
-          renderer.renderBufferDirect(camera, null, geometry2, material2, mesh2, null);
-        }
-      }
-    };
-    this.dispose = function() {
-      material1a.dispose();
-      material1b.dispose();
-      material2.dispose();
-      tempMap.dispose();
-      occlusionMap.dispose();
-      for (let i = 0, l = elements.length; i < l; i++) {
-        elements[i].texture.dispose();
-      }
-    };
-  }
-};
-let Lensflare = _Lensflare;
-Lensflare_publicField(Lensflare, "Geometry", geometry);
-class LensflareElement {
-  constructor(texture, size = 1, distance = 0, color = new three_module.Color(16777215)) {
-    this.texture = texture;
-    this.size = size;
-    this.distance = distance;
-    this.color = color;
-  }
-}
-Lensflare_publicField(LensflareElement, "Shader", {
-  uniforms: {
-    map: { value: null },
-    occlusionMap: { value: null },
-    color: { value: null },
-    scale: { value: null },
-    screenPosition: { value: null }
-  },
-  vertexShader: (
-    /* glsl */
-    `
-
-		precision highp float;
-
-		uniform vec3 screenPosition;
-		uniform vec2 scale;
-
-		uniform sampler2D occlusionMap;
-
-		attribute vec3 position;
-		attribute vec2 uv;
-
-		varying vec2 vUV;
-		varying float vVisibility;
-
-		void main() {
-
-			vUV = uv;
-
-			vec2 pos = position.xy;
-
-			vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );
-			visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );
-			visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );
-			visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );
-			visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );
-			visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );
-			visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );
-			visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );
-			visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );
-
-			vVisibility =        visibility.r / 9.0;
-			vVisibility *= 1.0 - visibility.g / 9.0;
-			vVisibility *=       visibility.b / 9.0;
-
-			gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );
-
-		}`
-  ),
-  fragmentShader: (
-    /* glsl */
-    `
-
-		precision highp float;
-
-		uniform sampler2D map;
-		uniform vec3 color;
-
-		varying vec2 vUV;
-		varying float vVisibility;
-
-		void main() {
-
-			vec4 texture = texture2D( map, vUV );
-			texture.a *= vVisibility;
-			gl_FragColor = texture;
-			gl_FragColor.rgb *= color;
-
-		}`
-  )
-});
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/objects/Water.js
-
-class Water extends three_module.Mesh {
-  constructor(geometry, options = {}) {
-    super(geometry);
-    this.isWater = true;
-    const scope = this;
-    const textureWidth = options.textureWidth !== void 0 ? options.textureWidth : 512;
-    const textureHeight = options.textureHeight !== void 0 ? options.textureHeight : 512;
-    const clipBias = options.clipBias !== void 0 ? options.clipBias : 0;
-    const alpha = options.alpha !== void 0 ? options.alpha : 1;
-    const time = options.time !== void 0 ? options.time : 0;
-    const normalSampler = options.waterNormals !== void 0 ? options.waterNormals : null;
-    const sunDirection = options.sunDirection !== void 0 ? options.sunDirection : new three_module.Vector3(0.70707, 0.70707, 0);
-    const sunColor = new three_module.Color(options.sunColor !== void 0 ? options.sunColor : 16777215);
-    const waterColor = new three_module.Color(options.waterColor !== void 0 ? options.waterColor : 8355711);
-    const eye = options.eye !== void 0 ? options.eye : new three_module.Vector3(0, 0, 0);
-    const distortionScale = options.distortionScale !== void 0 ? options.distortionScale : 20;
-    const side = options.side !== void 0 ? options.side : three_module.FrontSide;
-    const fog = options.fog !== void 0 ? options.fog : false;
-    const mirrorPlane = new three_module.Plane();
-    const normal = new three_module.Vector3();
-    const mirrorWorldPosition = new three_module.Vector3();
-    const cameraWorldPosition = new three_module.Vector3();
-    const rotationMatrix = new three_module.Matrix4();
-    const lookAtPosition = new three_module.Vector3(0, 0, -1);
-    const clipPlane = new three_module.Vector4();
-    const view = new three_module.Vector3();
-    const target = new three_module.Vector3();
-    const q = new three_module.Vector4();
-    const textureMatrix = new three_module.Matrix4();
-    const mirrorCamera = new three_module.PerspectiveCamera();
-    const renderTarget = new three_module.WebGLRenderTarget(textureWidth, textureHeight);
-    const mirrorShader = {
-      uniforms: three_module.UniformsUtils.merge([
-        three_module.UniformsLib.fog,
-        three_module.UniformsLib.lights,
-        {
-          normalSampler: { value: null },
-          mirrorSampler: { value: null },
-          alpha: { value: 1 },
-          time: { value: 0 },
-          size: { value: 1 },
-          distortionScale: { value: 20 },
-          textureMatrix: { value: new three_module.Matrix4() },
-          sunColor: { value: new three_module.Color(8355711) },
-          sunDirection: { value: new three_module.Vector3(0.70707, 0.70707, 0) },
-          eye: { value: new three_module.Vector3() },
-          waterColor: { value: new three_module.Color(5592405) }
-        }
-      ]),
-      vertexShader: (
-        /* glsl */
-        `
-				uniform mat4 textureMatrix;
-				uniform float time;
-
-				varying vec4 mirrorCoord;
-				varying vec4 worldPosition;
-
-				#include <common>
-				#include <fog_pars_vertex>
-				#include <shadowmap_pars_vertex>
-				#include <logdepthbuf_pars_vertex>
-
-				void main() {
-					mirrorCoord = modelMatrix * vec4( position, 1.0 );
-					worldPosition = mirrorCoord.xyzw;
-					mirrorCoord = textureMatrix * mirrorCoord;
-					vec4 mvPosition =  modelViewMatrix * vec4( position, 1.0 );
-					gl_Position = projectionMatrix * mvPosition;
-
-				#include <beginnormal_vertex>
-				#include <defaultnormal_vertex>
-				#include <logdepthbuf_vertex>
-				#include <fog_vertex>
-				#include <shadowmap_vertex>
-			}`
-      ),
-      fragmentShader: (
-        /* glsl */
-        `
-				uniform sampler2D mirrorSampler;
-				uniform float alpha;
-				uniform float time;
-				uniform float size;
-				uniform float distortionScale;
-				uniform sampler2D normalSampler;
-				uniform vec3 sunColor;
-				uniform vec3 sunDirection;
-				uniform vec3 eye;
-				uniform vec3 waterColor;
-
-				varying vec4 mirrorCoord;
-				varying vec4 worldPosition;
-
-				vec4 getNoise( vec2 uv ) {
-					vec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);
-					vec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );
-					vec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );
-					vec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );
-					vec4 noise = texture2D( normalSampler, uv0 ) +
-						texture2D( normalSampler, uv1 ) +
-						texture2D( normalSampler, uv2 ) +
-						texture2D( normalSampler, uv3 );
-					return noise * 0.5 - 1.0;
-				}
-
-				void sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) {
-					vec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) );
-					float direction = max( 0.0, dot( eyeDirection, reflection ) );
-					specularColor += pow( direction, shiny ) * sunColor * spec;
-					diffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse;
-				}
-
-				#include <common>
-				#include <packing>
-				#include <bsdfs>
-				#include <fog_pars_fragment>
-				#include <logdepthbuf_pars_fragment>
-				#include <lights_pars_begin>
-				#include <shadowmap_pars_fragment>
-				#include <shadowmask_pars_fragment>
-
-				void main() {
-
-					#include <logdepthbuf_fragment>
-					vec4 noise = getNoise( worldPosition.xz * size );
-					vec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) );
-
-					vec3 diffuseLight = vec3(0.0);
-					vec3 specularLight = vec3(0.0);
-
-					vec3 worldToEye = eye-worldPosition.xyz;
-					vec3 eyeDirection = normalize( worldToEye );
-					sunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight );
-
-					float distance = length(worldToEye);
-
-					vec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale;
-					vec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );
-
-					float theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );
-					float rf0 = 0.3;
-					float reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );
-					vec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;
-					vec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);
-					vec3 outgoingLight = albedo;
-					gl_FragColor = vec4( outgoingLight, alpha );
-
-					#include <tonemapping_fragment>
-					#include <encodings_fragment>
-					#include <fog_fragment>	
-				}`
-      )
-    };
-    const material = new three_module.ShaderMaterial({
-      fragmentShader: mirrorShader.fragmentShader,
-      vertexShader: mirrorShader.vertexShader,
-      uniforms: three_module.UniformsUtils.clone(mirrorShader.uniforms),
-      lights: true,
-      side,
-      fog
-    });
-    material.uniforms["mirrorSampler"].value = renderTarget.texture;
-    material.uniforms["textureMatrix"].value = textureMatrix;
-    material.uniforms["alpha"].value = alpha;
-    material.uniforms["time"].value = time;
-    material.uniforms["normalSampler"].value = normalSampler;
-    material.uniforms["sunColor"].value = sunColor;
-    material.uniforms["waterColor"].value = waterColor;
-    material.uniforms["sunDirection"].value = sunDirection;
-    material.uniforms["distortionScale"].value = distortionScale;
-    material.uniforms["eye"].value = eye;
-    scope.material = material;
-    scope.onBeforeRender = function(renderer, scene, camera) {
-      mirrorWorldPosition.setFromMatrixPosition(scope.matrixWorld);
-      cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
-      rotationMatrix.extractRotation(scope.matrixWorld);
-      normal.set(0, 0, 1);
-      normal.applyMatrix4(rotationMatrix);
-      view.subVectors(mirrorWorldPosition, cameraWorldPosition);
-      if (view.dot(normal) > 0)
-        return;
-      view.reflect(normal).negate();
-      view.add(mirrorWorldPosition);
-      rotationMatrix.extractRotation(camera.matrixWorld);
-      lookAtPosition.set(0, 0, -1);
-      lookAtPosition.applyMatrix4(rotationMatrix);
-      lookAtPosition.add(cameraWorldPosition);
-      target.subVectors(mirrorWorldPosition, lookAtPosition);
-      target.reflect(normal).negate();
-      target.add(mirrorWorldPosition);
-      mirrorCamera.position.copy(view);
-      mirrorCamera.up.set(0, 1, 0);
-      mirrorCamera.up.applyMatrix4(rotationMatrix);
-      mirrorCamera.up.reflect(normal);
-      mirrorCamera.lookAt(target);
-      mirrorCamera.far = camera.far;
-      mirrorCamera.updateMatrixWorld();
-      mirrorCamera.projectionMatrix.copy(camera.projectionMatrix);
-      textureMatrix.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1);
-      textureMatrix.multiply(mirrorCamera.projectionMatrix);
-      textureMatrix.multiply(mirrorCamera.matrixWorldInverse);
-      mirrorPlane.setFromNormalAndCoplanarPoint(normal, mirrorWorldPosition);
-      mirrorPlane.applyMatrix4(mirrorCamera.matrixWorldInverse);
-      clipPlane.set(mirrorPlane.normal.x, mirrorPlane.normal.y, mirrorPlane.normal.z, mirrorPlane.constant);
-      const projectionMatrix = mirrorCamera.projectionMatrix;
-      q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];
-      q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];
-      q.z = -1;
-      q.w = (1 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];
-      clipPlane.multiplyScalar(2 / clipPlane.dot(q));
-      projectionMatrix.elements[2] = clipPlane.x;
-      projectionMatrix.elements[6] = clipPlane.y;
-      projectionMatrix.elements[10] = clipPlane.z + 1 - clipBias;
-      projectionMatrix.elements[14] = clipPlane.w;
-      eye.setFromMatrixPosition(camera.matrixWorld);
-      const currentRenderTarget = renderer.getRenderTarget();
-      const currentXrEnabled = renderer.xr.enabled;
-      const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
-      scope.visible = false;
-      renderer.xr.enabled = false;
-      renderer.shadowMap.autoUpdate = false;
-      renderer.setRenderTarget(renderTarget);
-      renderer.state.buffers.depth.setMask(true);
-      if (renderer.autoClear === false)
-        renderer.clear();
-      renderer.render(scene, mirrorCamera);
-      scope.visible = true;
-      renderer.xr.enabled = currentXrEnabled;
-      renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
-      renderer.setRenderTarget(currentRenderTarget);
-      const viewport = camera.viewport;
-      if (viewport !== void 0) {
-        renderer.state.viewport(viewport);
-      }
-    };
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/objects/MarchingCubes.js
-
-class MarchingCubes extends three_module.Mesh {
-  constructor(resolution, material, enableUvs = false, enableColors = false, maxPolyCount = 1e4) {
-    const geometry = new three_module.BufferGeometry();
-    super(geometry, material);
-    this.isMarchingCubes = true;
-    const scope = this;
-    const vlist = new Float32Array(12 * 3);
-    const nlist = new Float32Array(12 * 3);
-    const clist = new Float32Array(12 * 3);
-    this.enableUvs = enableUvs;
-    this.enableColors = enableColors;
-    this.init = function(resolution2) {
-      this.resolution = resolution2;
-      this.isolation = 80;
-      this.size = resolution2;
-      this.size2 = this.size * this.size;
-      this.size3 = this.size2 * this.size;
-      this.halfsize = this.size / 2;
-      this.delta = 2 / this.size;
-      this.yd = this.size;
-      this.zd = this.size2;
-      this.field = new Float32Array(this.size3);
-      this.normal_cache = new Float32Array(this.size3 * 3);
-      this.palette = new Float32Array(this.size3 * 3);
-      this.count = 0;
-      const maxVertexCount = maxPolyCount * 3;
-      this.positionArray = new Float32Array(maxVertexCount * 3);
-      const positionAttribute = new three_module.BufferAttribute(this.positionArray, 3);
-      positionAttribute.setUsage(three_module.DynamicDrawUsage);
-      geometry.setAttribute("position", positionAttribute);
-      this.normalArray = new Float32Array(maxVertexCount * 3);
-      const normalAttribute = new three_module.BufferAttribute(this.normalArray, 3);
-      normalAttribute.setUsage(three_module.DynamicDrawUsage);
-      geometry.setAttribute("normal", normalAttribute);
-      if (this.enableUvs) {
-        this.uvArray = new Float32Array(maxVertexCount * 2);
-        const uvAttribute = new three_module.BufferAttribute(this.uvArray, 2);
-        uvAttribute.setUsage(three_module.DynamicDrawUsage);
-        geometry.setAttribute("uv", uvAttribute);
-      }
-      if (this.enableColors) {
-        this.colorArray = new Float32Array(maxVertexCount * 3);
-        const colorAttribute = new three_module.BufferAttribute(this.colorArray, 3);
-        colorAttribute.setUsage(three_module.DynamicDrawUsage);
-        geometry.setAttribute("color", colorAttribute);
-      }
-      geometry.boundingSphere = new three_module.Sphere(new three_module.Vector3(), 1);
-    };
-    function lerp(a, b, t) {
-      return a + (b - a) * t;
-    }
-    function VIntX(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) {
-      const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache;
-      vlist[offset + 0] = x + mu * scope.delta;
-      vlist[offset + 1] = y;
-      vlist[offset + 2] = z;
-      nlist[offset + 0] = lerp(nc[q + 0], nc[q + 3], mu);
-      nlist[offset + 1] = lerp(nc[q + 1], nc[q + 4], mu);
-      nlist[offset + 2] = lerp(nc[q + 2], nc[q + 5], mu);
-      clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu);
-      clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu);
-      clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu);
-    }
-    function VIntY(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) {
-      const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache;
-      vlist[offset + 0] = x;
-      vlist[offset + 1] = y + mu * scope.delta;
-      vlist[offset + 2] = z;
-      const q2 = q + scope.yd * 3;
-      nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu);
-      nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu);
-      nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu);
-      clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu);
-      clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu);
-      clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu);
-    }
-    function VIntZ(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) {
-      const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache;
-      vlist[offset + 0] = x;
-      vlist[offset + 1] = y;
-      vlist[offset + 2] = z + mu * scope.delta;
-      const q2 = q + scope.zd * 3;
-      nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu);
-      nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu);
-      nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu);
-      clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu);
-      clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu);
-      clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu);
-    }
-    function compNorm(q) {
-      const q3 = q * 3;
-      if (scope.normal_cache[q3] === 0) {
-        scope.normal_cache[q3 + 0] = scope.field[q - 1] - scope.field[q + 1];
-        scope.normal_cache[q3 + 1] = scope.field[q - scope.yd] - scope.field[q + scope.yd];
-        scope.normal_cache[q3 + 2] = scope.field[q - scope.zd] - scope.field[q + scope.zd];
-      }
-    }
-    function polygonize(fx, fy, fz, q, isol) {
-      const q1 = q + 1, qy = q + scope.yd, qz = q + scope.zd, q1y = q1 + scope.yd, q1z = q1 + scope.zd, qyz = q + scope.yd + scope.zd, q1yz = q1 + scope.yd + scope.zd;
-      let cubeindex = 0;
-      const field0 = scope.field[q], field1 = scope.field[q1], field2 = scope.field[qy], field3 = scope.field[q1y], field4 = scope.field[qz], field5 = scope.field[q1z], field6 = scope.field[qyz], field7 = scope.field[q1yz];
-      if (field0 < isol)
-        cubeindex |= 1;
-      if (field1 < isol)
-        cubeindex |= 2;
-      if (field2 < isol)
-        cubeindex |= 8;
-      if (field3 < isol)
-        cubeindex |= 4;
-      if (field4 < isol)
-        cubeindex |= 16;
-      if (field5 < isol)
-        cubeindex |= 32;
-      if (field6 < isol)
-        cubeindex |= 128;
-      if (field7 < isol)
-        cubeindex |= 64;
-      const bits = edgeTable[cubeindex];
-      if (bits === 0)
-        return 0;
-      const d = scope.delta, fx2 = fx + d, fy2 = fy + d, fz2 = fz + d;
-      if (bits & 1) {
-        compNorm(q);
-        compNorm(q1);
-        VIntX(q * 3, 0, isol, fx, fy, fz, field0, field1, q, q1);
-      }
-      if (bits & 2) {
-        compNorm(q1);
-        compNorm(q1y);
-        VIntY(q1 * 3, 3, isol, fx2, fy, fz, field1, field3, q1, q1y);
-      }
-      if (bits & 4) {
-        compNorm(qy);
-        compNorm(q1y);
-        VIntX(qy * 3, 6, isol, fx, fy2, fz, field2, field3, qy, q1y);
-      }
-      if (bits & 8) {
-        compNorm(q);
-        compNorm(qy);
-        VIntY(q * 3, 9, isol, fx, fy, fz, field0, field2, q, qy);
-      }
-      if (bits & 16) {
-        compNorm(qz);
-        compNorm(q1z);
-        VIntX(qz * 3, 12, isol, fx, fy, fz2, field4, field5, qz, q1z);
-      }
-      if (bits & 32) {
-        compNorm(q1z);
-        compNorm(q1yz);
-        VIntY(q1z * 3, 15, isol, fx2, fy, fz2, field5, field7, q1z, q1yz);
-      }
-      if (bits & 64) {
-        compNorm(qyz);
-        compNorm(q1yz);
-        VIntX(qyz * 3, 18, isol, fx, fy2, fz2, field6, field7, qyz, q1yz);
-      }
-      if (bits & 128) {
-        compNorm(qz);
-        compNorm(qyz);
-        VIntY(qz * 3, 21, isol, fx, fy, fz2, field4, field6, qz, qyz);
-      }
-      if (bits & 256) {
-        compNorm(q);
-        compNorm(qz);
-        VIntZ(q * 3, 24, isol, fx, fy, fz, field0, field4, q, qz);
-      }
-      if (bits & 512) {
-        compNorm(q1);
-        compNorm(q1z);
-        VIntZ(q1 * 3, 27, isol, fx2, fy, fz, field1, field5, q1, q1z);
-      }
-      if (bits & 1024) {
-        compNorm(q1y);
-        compNorm(q1yz);
-        VIntZ(q1y * 3, 30, isol, fx2, fy2, fz, field3, field7, q1y, q1yz);
-      }
-      if (bits & 2048) {
-        compNorm(qy);
-        compNorm(qyz);
-        VIntZ(qy * 3, 33, isol, fx, fy2, fz, field2, field6, qy, qyz);
-      }
-      cubeindex <<= 4;
-      let o1, o2, o3, numtris = 0, i = 0;
-      while (triTable[cubeindex + i] != -1) {
-        o1 = cubeindex + i;
-        o2 = o1 + 1;
-        o3 = o1 + 2;
-        posnormtriv(vlist, nlist, clist, 3 * triTable[o1], 3 * triTable[o2], 3 * triTable[o3]);
-        i += 3;
-        numtris++;
-      }
-      return numtris;
-    }
-    function posnormtriv(pos, norm, colors, o1, o2, o3) {
-      const c = scope.count * 3;
-      scope.positionArray[c + 0] = pos[o1];
-      scope.positionArray[c + 1] = pos[o1 + 1];
-      scope.positionArray[c + 2] = pos[o1 + 2];
-      scope.positionArray[c + 3] = pos[o2];
-      scope.positionArray[c + 4] = pos[o2 + 1];
-      scope.positionArray[c + 5] = pos[o2 + 2];
-      scope.positionArray[c + 6] = pos[o3];
-      scope.positionArray[c + 7] = pos[o3 + 1];
-      scope.positionArray[c + 8] = pos[o3 + 2];
-      if (scope.material.flatShading === true) {
-        const nx = (norm[o1 + 0] + norm[o2 + 0] + norm[o3 + 0]) / 3;
-        const ny = (norm[o1 + 1] + norm[o2 + 1] + norm[o3 + 1]) / 3;
-        const nz = (norm[o1 + 2] + norm[o2 + 2] + norm[o3 + 2]) / 3;
-        scope.normalArray[c + 0] = nx;
-        scope.normalArray[c + 1] = ny;
-        scope.normalArray[c + 2] = nz;
-        scope.normalArray[c + 3] = nx;
-        scope.normalArray[c + 4] = ny;
-        scope.normalArray[c + 5] = nz;
-        scope.normalArray[c + 6] = nx;
-        scope.normalArray[c + 7] = ny;
-        scope.normalArray[c + 8] = nz;
-      } else {
-        scope.normalArray[c + 0] = norm[o1 + 0];
-        scope.normalArray[c + 1] = norm[o1 + 1];
-        scope.normalArray[c + 2] = norm[o1 + 2];
-        scope.normalArray[c + 3] = norm[o2 + 0];
-        scope.normalArray[c + 4] = norm[o2 + 1];
-        scope.normalArray[c + 5] = norm[o2 + 2];
-        scope.normalArray[c + 6] = norm[o3 + 0];
-        scope.normalArray[c + 7] = norm[o3 + 1];
-        scope.normalArray[c + 8] = norm[o3 + 2];
-      }
-      if (scope.enableUvs) {
-        const d = scope.count * 2;
-        scope.uvArray[d + 0] = pos[o1 + 0];
-        scope.uvArray[d + 1] = pos[o1 + 2];
-        scope.uvArray[d + 2] = pos[o2 + 0];
-        scope.uvArray[d + 3] = pos[o2 + 2];
-        scope.uvArray[d + 4] = pos[o3 + 0];
-        scope.uvArray[d + 5] = pos[o3 + 2];
-      }
-      if (scope.enableColors) {
-        scope.colorArray[c + 0] = colors[o1 + 0];
-        scope.colorArray[c + 1] = colors[o1 + 1];
-        scope.colorArray[c + 2] = colors[o1 + 2];
-        scope.colorArray[c + 3] = colors[o2 + 0];
-        scope.colorArray[c + 4] = colors[o2 + 1];
-        scope.colorArray[c + 5] = colors[o2 + 2];
-        scope.colorArray[c + 6] = colors[o3 + 0];
-        scope.colorArray[c + 7] = colors[o3 + 1];
-        scope.colorArray[c + 8] = colors[o3 + 2];
-      }
-      scope.count += 3;
-    }
-    this.addBall = function(ballx, bally, ballz, strength, subtract, colors) {
-      const sign = Math.sign(strength);
-      strength = Math.abs(strength);
-      const userDefineColor = !(colors === void 0 || colors === null);
-      let ballColor = new three_module.Color(ballx, bally, ballz);
-      if (userDefineColor) {
-        try {
-          ballColor = colors instanceof three_module.Color ? colors : Array.isArray(colors) ? new three_module.Color(
-            Math.min(Math.abs(colors[0]), 1),
-            Math.min(Math.abs(colors[1]), 1),
-            Math.min(Math.abs(colors[2]), 1)
-          ) : new three_module.Color(colors);
-        } catch (err) {
-          ballColor = new three_module.Color(ballx, bally, ballz);
-        }
-      }
-      const radius = this.size * Math.sqrt(strength / subtract), zs = ballz * this.size, ys = bally * this.size, xs = ballx * this.size;
-      let min_z = Math.floor(zs - radius);
-      if (min_z < 1)
-        min_z = 1;
-      let max_z = Math.floor(zs + radius);
-      if (max_z > this.size - 1)
-        max_z = this.size - 1;
-      let min_y = Math.floor(ys - radius);
-      if (min_y < 1)
-        min_y = 1;
-      let max_y = Math.floor(ys + radius);
-      if (max_y > this.size - 1)
-        max_y = this.size - 1;
-      let min_x = Math.floor(xs - radius);
-      if (min_x < 1)
-        min_x = 1;
-      let max_x = Math.floor(xs + radius);
-      if (max_x > this.size - 1)
-        max_x = this.size - 1;
-      let x, y, z, y_offset, z_offset, fx, fy, fz, fz2, fy2, val;
-      for (z = min_z; z < max_z; z++) {
-        z_offset = this.size2 * z;
-        fz = z / this.size - ballz;
-        fz2 = fz * fz;
-        for (y = min_y; y < max_y; y++) {
-          y_offset = z_offset + this.size * y;
-          fy = y / this.size - bally;
-          fy2 = fy * fy;
-          for (x = min_x; x < max_x; x++) {
-            fx = x / this.size - ballx;
-            val = strength / (1e-6 + fx * fx + fy2 + fz2) - subtract;
-            if (val > 0) {
-              this.field[y_offset + x] += val * sign;
-              const ratio = Math.sqrt((x - xs) * (x - xs) + (y - ys) * (y - ys) + (z - zs) * (z - zs)) / radius;
-              const contrib = 1 - ratio * ratio * ratio * (ratio * (ratio * 6 - 15) + 10);
-              this.palette[(y_offset + x) * 3 + 0] += ballColor.r * contrib;
-              this.palette[(y_offset + x) * 3 + 1] += ballColor.g * contrib;
-              this.palette[(y_offset + x) * 3 + 2] += ballColor.b * contrib;
-            }
-          }
-        }
-      }
-    };
-    this.addPlaneX = function(strength, subtract) {
-      const size = this.size, yd = this.yd, zd = this.zd, field = this.field;
-      let x, y, z, xx, val, xdiv, cxy, dist = size * Math.sqrt(strength / subtract);
-      if (dist > size)
-        dist = size;
-      for (x = 0; x < dist; x++) {
-        xdiv = x / size;
-        xx = xdiv * xdiv;
-        val = strength / (1e-4 + xx) - subtract;
-        if (val > 0) {
-          for (y = 0; y < size; y++) {
-            cxy = x + y * yd;
-            for (z = 0; z < size; z++) {
-              field[zd * z + cxy] += val;
-            }
-          }
-        }
-      }
-    };
-    this.addPlaneY = function(strength, subtract) {
-      const size = this.size, yd = this.yd, zd = this.zd, field = this.field;
-      let x, y, z, yy, val, ydiv, cy, cxy, dist = size * Math.sqrt(strength / subtract);
-      if (dist > size)
-        dist = size;
-      for (y = 0; y < dist; y++) {
-        ydiv = y / size;
-        yy = ydiv * ydiv;
-        val = strength / (1e-4 + yy) - subtract;
-        if (val > 0) {
-          cy = y * yd;
-          for (x = 0; x < size; x++) {
-            cxy = cy + x;
-            for (z = 0; z < size; z++)
-              field[zd * z + cxy] += val;
-          }
-        }
-      }
-    };
-    this.addPlaneZ = function(strength, subtract) {
-      const size = this.size, yd = this.yd, zd = this.zd, field = this.field;
-      let x, y, z, zz, val, zdiv, cz, cyz, dist = size * Math.sqrt(strength / subtract);
-      if (dist > size)
-        dist = size;
-      for (z = 0; z < dist; z++) {
-        zdiv = z / size;
-        zz = zdiv * zdiv;
-        val = strength / (1e-4 + zz) - subtract;
-        if (val > 0) {
-          cz = zd * z;
-          for (y = 0; y < size; y++) {
-            cyz = cz + y * yd;
-            for (x = 0; x < size; x++)
-              field[cyz + x] += val;
-          }
-        }
-      }
-    };
-    this.setCell = function(x, y, z, value) {
-      const index = this.size2 * z + this.size * y + x;
-      this.field[index] = value;
-    };
-    this.getCell = function(x, y, z) {
-      const index = this.size2 * z + this.size * y + x;
-      return this.field[index];
-    };
-    this.blur = function(intensity = 1) {
-      const field = this.field;
-      const fieldCopy = field.slice();
-      const size = this.size;
-      const size2 = this.size2;
-      for (let x = 0; x < size; x++) {
-        for (let y = 0; y < size; y++) {
-          for (let z = 0; z < size; z++) {
-            const index = size2 * z + size * y + x;
-            let val = fieldCopy[index];
-            let count = 1;
-            for (let x2 = -1; x2 <= 1; x2 += 2) {
-              const x3 = x2 + x;
-              if (x3 < 0 || x3 >= size)
-                continue;
-              for (let y2 = -1; y2 <= 1; y2 += 2) {
-                const y3 = y2 + y;
-                if (y3 < 0 || y3 >= size)
-                  continue;
-                for (let z2 = -1; z2 <= 1; z2 += 2) {
-                  const z3 = z2 + z;
-                  if (z3 < 0 || z3 >= size)
-                    continue;
-                  const index2 = size2 * z3 + size * y3 + x3;
-                  const val2 = fieldCopy[index2];
-                  count++;
-                  val += intensity * (val2 - val) / count;
-                }
-              }
-            }
-            field[index] = val;
-          }
-        }
-      }
-    };
-    this.reset = function() {
-      for (let i = 0; i < this.size3; i++) {
-        this.normal_cache[i * 3] = 0;
-        this.field[i] = 0;
-        this.palette[i * 3] = this.palette[i * 3 + 1] = this.palette[i * 3 + 2] = 0;
-      }
-    };
-    this.update = function() {
-      this.count = 0;
-      const smin2 = this.size - 2;
-      for (let z = 1; z < smin2; z++) {
-        const z_offset = this.size2 * z;
-        const fz = (z - this.halfsize) / this.halfsize;
-        for (let y = 1; y < smin2; y++) {
-          const y_offset = z_offset + this.size * y;
-          const fy = (y - this.halfsize) / this.halfsize;
-          for (let x = 1; x < smin2; x++) {
-            const fx = (x - this.halfsize) / this.halfsize;
-            const q = y_offset + x;
-            polygonize(fx, fy, fz, q, this.isolation);
-          }
-        }
-      }
-      this.geometry.setDrawRange(0, this.count);
-      geometry.getAttribute("position").needsUpdate = true;
-      geometry.getAttribute("normal").needsUpdate = true;
-      if (this.enableUvs)
-        geometry.getAttribute("uv").needsUpdate = true;
-      if (this.enableColors)
-        geometry.getAttribute("color").needsUpdate = true;
-      if (this.count / 3 > maxPolyCount)
-        console.warn(
-          "THREE.MarchingCubes: Geometry buffers too small for rendering. Please create an instance with a higher poly count."
-        );
-    };
-    this.init(resolution);
-  }
-}
-const edgeTable = new Int32Array([
-  0,
-  265,
-  515,
-  778,
-  1030,
-  1295,
-  1541,
-  1804,
-  2060,
-  2309,
-  2575,
-  2822,
-  3082,
-  3331,
-  3593,
-  3840,
-  400,
-  153,
-  915,
-  666,
-  1430,
-  1183,
-  1941,
-  1692,
-  2460,
-  2197,
-  2975,
-  2710,
-  3482,
-  3219,
-  3993,
-  3728,
-  560,
-  825,
-  51,
-  314,
-  1590,
-  1855,
-  1077,
-  1340,
-  2620,
-  2869,
-  2111,
-  2358,
-  3642,
-  3891,
-  3129,
-  3376,
-  928,
-  681,
-  419,
-  170,
-  1958,
-  1711,
-  1445,
-  1196,
-  2988,
-  2725,
-  2479,
-  2214,
-  4010,
-  3747,
-  3497,
-  3232,
-  1120,
-  1385,
-  1635,
-  1898,
-  102,
-  367,
-  613,
-  876,
-  3180,
-  3429,
-  3695,
-  3942,
-  2154,
-  2403,
-  2665,
-  2912,
-  1520,
-  1273,
-  2035,
-  1786,
-  502,
-  255,
-  1013,
-  764,
-  3580,
-  3317,
-  4095,
-  3830,
-  2554,
-  2291,
-  3065,
-  2800,
-  1616,
-  1881,
-  1107,
-  1370,
-  598,
-  863,
-  85,
-  348,
-  3676,
-  3925,
-  3167,
-  3414,
-  2650,
-  2899,
-  2137,
-  2384,
-  1984,
-  1737,
-  1475,
-  1226,
-  966,
-  719,
-  453,
-  204,
-  4044,
-  3781,
-  3535,
-  3270,
-  3018,
-  2755,
-  2505,
-  2240,
-  2240,
-  2505,
-  2755,
-  3018,
-  3270,
-  3535,
-  3781,
-  4044,
-  204,
-  453,
-  719,
-  966,
-  1226,
-  1475,
-  1737,
-  1984,
-  2384,
-  2137,
-  2899,
-  2650,
-  3414,
-  3167,
-  3925,
-  3676,
-  348,
-  85,
-  863,
-  598,
-  1370,
-  1107,
-  1881,
-  1616,
-  2800,
-  3065,
-  2291,
-  2554,
-  3830,
-  4095,
-  3317,
-  3580,
-  764,
-  1013,
-  255,
-  502,
-  1786,
-  2035,
-  1273,
-  1520,
-  2912,
-  2665,
-  2403,
-  2154,
-  3942,
-  3695,
-  3429,
-  3180,
-  876,
-  613,
-  367,
-  102,
-  1898,
-  1635,
-  1385,
-  1120,
-  3232,
-  3497,
-  3747,
-  4010,
-  2214,
-  2479,
-  2725,
-  2988,
-  1196,
-  1445,
-  1711,
-  1958,
-  170,
-  419,
-  681,
-  928,
-  3376,
-  3129,
-  3891,
-  3642,
-  2358,
-  2111,
-  2869,
-  2620,
-  1340,
-  1077,
-  1855,
-  1590,
-  314,
-  51,
-  825,
-  560,
-  3728,
-  3993,
-  3219,
-  3482,
-  2710,
-  2975,
-  2197,
-  2460,
-  1692,
-  1941,
-  1183,
-  1430,
-  666,
-  915,
-  153,
-  400,
-  3840,
-  3593,
-  3331,
-  3082,
-  2822,
-  2575,
-  2309,
-  2060,
-  1804,
-  1541,
-  1295,
-  1030,
-  778,
-  515,
-  265,
-  0
-]);
-const triTable = new Int32Array([
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  8,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  1,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  8,
-  3,
-  9,
-  8,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  2,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  8,
-  3,
-  1,
-  2,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  2,
-  10,
-  0,
-  2,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  8,
-  3,
-  2,
-  10,
-  8,
-  10,
-  9,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  11,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  11,
-  2,
-  8,
-  11,
-  0,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  9,
-  0,
-  2,
-  3,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  11,
-  2,
-  1,
-  9,
-  11,
-  9,
-  8,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  10,
-  1,
-  11,
-  10,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  10,
-  1,
-  0,
-  8,
-  10,
-  8,
-  11,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  9,
-  0,
-  3,
-  11,
-  9,
-  11,
-  10,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  8,
-  10,
-  10,
-  8,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  7,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  3,
-  0,
-  7,
-  3,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  1,
-  9,
-  8,
-  4,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  1,
-  9,
-  4,
-  7,
-  1,
-  7,
-  3,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  2,
-  10,
-  8,
-  4,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  4,
-  7,
-  3,
-  0,
-  4,
-  1,
-  2,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  2,
-  10,
-  9,
-  0,
-  2,
-  8,
-  4,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  10,
-  9,
-  2,
-  9,
-  7,
-  2,
-  7,
-  3,
-  7,
-  9,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  4,
-  7,
-  3,
-  11,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  11,
-  4,
-  7,
-  11,
-  2,
-  4,
-  2,
-  0,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  0,
-  1,
-  8,
-  4,
-  7,
-  2,
-  3,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  7,
-  11,
-  9,
-  4,
-  11,
-  9,
-  11,
-  2,
-  9,
-  2,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  10,
-  1,
-  3,
-  11,
-  10,
-  7,
-  8,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  11,
-  10,
-  1,
-  4,
-  11,
-  1,
-  0,
-  4,
-  7,
-  11,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  7,
-  8,
-  9,
-  0,
-  11,
-  9,
-  11,
-  10,
-  11,
-  0,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  7,
-  11,
-  4,
-  11,
-  9,
-  9,
-  11,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  5,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  5,
-  4,
-  0,
-  8,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  5,
-  4,
-  1,
-  5,
-  0,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  5,
-  4,
-  8,
-  3,
-  5,
-  3,
-  1,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  2,
-  10,
-  9,
-  5,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  0,
-  8,
-  1,
-  2,
-  10,
-  4,
-  9,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  2,
-  10,
-  5,
-  4,
-  2,
-  4,
-  0,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  10,
-  5,
-  3,
-  2,
-  5,
-  3,
-  5,
-  4,
-  3,
-  4,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  5,
-  4,
-  2,
-  3,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  11,
-  2,
-  0,
-  8,
-  11,
-  4,
-  9,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  5,
-  4,
-  0,
-  1,
-  5,
-  2,
-  3,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  1,
-  5,
-  2,
-  5,
-  8,
-  2,
-  8,
-  11,
-  4,
-  8,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  3,
-  11,
-  10,
-  1,
-  3,
-  9,
-  5,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  9,
-  5,
-  0,
-  8,
-  1,
-  8,
-  10,
-  1,
-  8,
-  11,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  4,
-  0,
-  5,
-  0,
-  11,
-  5,
-  11,
-  10,
-  11,
-  0,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  4,
-  8,
-  5,
-  8,
-  10,
-  10,
-  8,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  7,
-  8,
-  5,
-  7,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  3,
-  0,
-  9,
-  5,
-  3,
-  5,
-  7,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  7,
-  8,
-  0,
-  1,
-  7,
-  1,
-  5,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  5,
-  3,
-  3,
-  5,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  7,
-  8,
-  9,
-  5,
-  7,
-  10,
-  1,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  1,
-  2,
-  9,
-  5,
-  0,
-  5,
-  3,
-  0,
-  5,
-  7,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  0,
-  2,
-  8,
-  2,
-  5,
-  8,
-  5,
-  7,
-  10,
-  5,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  10,
-  5,
-  2,
-  5,
-  3,
-  3,
-  5,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  7,
-  9,
-  5,
-  7,
-  8,
-  9,
-  3,
-  11,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  5,
-  7,
-  9,
-  7,
-  2,
-  9,
-  2,
-  0,
-  2,
-  7,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  3,
-  11,
-  0,
-  1,
-  8,
-  1,
-  7,
-  8,
-  1,
-  5,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  11,
-  2,
-  1,
-  11,
-  1,
-  7,
-  7,
-  1,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  5,
-  8,
-  8,
-  5,
-  7,
-  10,
-  1,
-  3,
-  10,
-  3,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  7,
-  0,
-  5,
-  0,
-  9,
-  7,
-  11,
-  0,
-  1,
-  0,
-  10,
-  11,
-  10,
-  0,
-  -1,
-  11,
-  10,
-  0,
-  11,
-  0,
-  3,
-  10,
-  5,
-  0,
-  8,
-  0,
-  7,
-  5,
-  7,
-  0,
-  -1,
-  11,
-  10,
-  5,
-  7,
-  11,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  6,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  8,
-  3,
-  5,
-  10,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  0,
-  1,
-  5,
-  10,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  8,
-  3,
-  1,
-  9,
-  8,
-  5,
-  10,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  6,
-  5,
-  2,
-  6,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  6,
-  5,
-  1,
-  2,
-  6,
-  3,
-  0,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  6,
-  5,
-  9,
-  0,
-  6,
-  0,
-  2,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  9,
-  8,
-  5,
-  8,
-  2,
-  5,
-  2,
-  6,
-  3,
-  2,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  3,
-  11,
-  10,
-  6,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  11,
-  0,
-  8,
-  11,
-  2,
-  0,
-  10,
-  6,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  1,
-  9,
-  2,
-  3,
-  11,
-  5,
-  10,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  10,
-  6,
-  1,
-  9,
-  2,
-  9,
-  11,
-  2,
-  9,
-  8,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  6,
-  3,
-  11,
-  6,
-  5,
-  3,
-  5,
-  1,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  8,
-  11,
-  0,
-  11,
-  5,
-  0,
-  5,
-  1,
-  5,
-  11,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  11,
-  6,
-  0,
-  3,
-  6,
-  0,
-  6,
-  5,
-  0,
-  5,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  6,
-  5,
-  9,
-  6,
-  9,
-  11,
-  11,
-  9,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  10,
-  6,
-  4,
-  7,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  3,
-  0,
-  4,
-  7,
-  3,
-  6,
-  5,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  9,
-  0,
-  5,
-  10,
-  6,
-  8,
-  4,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  6,
-  5,
-  1,
-  9,
-  7,
-  1,
-  7,
-  3,
-  7,
-  9,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  6,
-  1,
-  2,
-  6,
-  5,
-  1,
-  4,
-  7,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  2,
-  5,
-  5,
-  2,
-  6,
-  3,
-  0,
-  4,
-  3,
-  4,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  4,
-  7,
-  9,
-  0,
-  5,
-  0,
-  6,
-  5,
-  0,
-  2,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  7,
-  3,
-  9,
-  7,
-  9,
-  4,
-  3,
-  2,
-  9,
-  5,
-  9,
-  6,
-  2,
-  6,
-  9,
-  -1,
-  3,
-  11,
-  2,
-  7,
-  8,
-  4,
-  10,
-  6,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  10,
-  6,
-  4,
-  7,
-  2,
-  4,
-  2,
-  0,
-  2,
-  7,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  1,
-  9,
-  4,
-  7,
-  8,
-  2,
-  3,
-  11,
-  5,
-  10,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  2,
-  1,
-  9,
-  11,
-  2,
-  9,
-  4,
-  11,
-  7,
-  11,
-  4,
-  5,
-  10,
-  6,
-  -1,
-  8,
-  4,
-  7,
-  3,
-  11,
-  5,
-  3,
-  5,
-  1,
-  5,
-  11,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  1,
-  11,
-  5,
-  11,
-  6,
-  1,
-  0,
-  11,
-  7,
-  11,
-  4,
-  0,
-  4,
-  11,
-  -1,
-  0,
-  5,
-  9,
-  0,
-  6,
-  5,
-  0,
-  3,
-  6,
-  11,
-  6,
-  3,
-  8,
-  4,
-  7,
-  -1,
-  6,
-  5,
-  9,
-  6,
-  9,
-  11,
-  4,
-  7,
-  9,
-  7,
-  11,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  4,
-  9,
-  6,
-  4,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  10,
-  6,
-  4,
-  9,
-  10,
-  0,
-  8,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  0,
-  1,
-  10,
-  6,
-  0,
-  6,
-  4,
-  0,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  3,
-  1,
-  8,
-  1,
-  6,
-  8,
-  6,
-  4,
-  6,
-  1,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  4,
-  9,
-  1,
-  2,
-  4,
-  2,
-  6,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  0,
-  8,
-  1,
-  2,
-  9,
-  2,
-  4,
-  9,
-  2,
-  6,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  2,
-  4,
-  4,
-  2,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  3,
-  2,
-  8,
-  2,
-  4,
-  4,
-  2,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  4,
-  9,
-  10,
-  6,
-  4,
-  11,
-  2,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  8,
-  2,
-  2,
-  8,
-  11,
-  4,
-  9,
-  10,
-  4,
-  10,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  11,
-  2,
-  0,
-  1,
-  6,
-  0,
-  6,
-  4,
-  6,
-  1,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  6,
-  4,
-  1,
-  6,
-  1,
-  10,
-  4,
-  8,
-  1,
-  2,
-  1,
-  11,
-  8,
-  11,
-  1,
-  -1,
-  9,
-  6,
-  4,
-  9,
-  3,
-  6,
-  9,
-  1,
-  3,
-  11,
-  6,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  11,
-  1,
-  8,
-  1,
-  0,
-  11,
-  6,
-  1,
-  9,
-  1,
-  4,
-  6,
-  4,
-  1,
-  -1,
-  3,
-  11,
-  6,
-  3,
-  6,
-  0,
-  0,
-  6,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  6,
-  4,
-  8,
-  11,
-  6,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  7,
-  10,
-  6,
-  7,
-  8,
-  10,
-  8,
-  9,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  7,
-  3,
-  0,
-  10,
-  7,
-  0,
-  9,
-  10,
-  6,
-  7,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  6,
-  7,
-  1,
-  10,
-  7,
-  1,
-  7,
-  8,
-  1,
-  8,
-  0,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  6,
-  7,
-  10,
-  7,
-  1,
-  1,
-  7,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  2,
-  6,
-  1,
-  6,
-  8,
-  1,
-  8,
-  9,
-  8,
-  6,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  6,
-  9,
-  2,
-  9,
-  1,
-  6,
-  7,
-  9,
-  0,
-  9,
-  3,
-  7,
-  3,
-  9,
-  -1,
-  7,
-  8,
-  0,
-  7,
-  0,
-  6,
-  6,
-  0,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  7,
-  3,
-  2,
-  6,
-  7,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  3,
-  11,
-  10,
-  6,
-  8,
-  10,
-  8,
-  9,
-  8,
-  6,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  0,
-  7,
-  2,
-  7,
-  11,
-  0,
-  9,
-  7,
-  6,
-  7,
-  10,
-  9,
-  10,
-  7,
-  -1,
-  1,
-  8,
-  0,
-  1,
-  7,
-  8,
-  1,
-  10,
-  7,
-  6,
-  7,
-  10,
-  2,
-  3,
-  11,
-  -1,
-  11,
-  2,
-  1,
-  11,
-  1,
-  7,
-  10,
-  6,
-  1,
-  6,
-  7,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  9,
-  6,
-  8,
-  6,
-  7,
-  9,
-  1,
-  6,
-  11,
-  6,
-  3,
-  1,
-  3,
-  6,
-  -1,
-  0,
-  9,
-  1,
-  11,
-  6,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  7,
-  8,
-  0,
-  7,
-  0,
-  6,
-  3,
-  11,
-  0,
-  11,
-  6,
-  0,
-  -1,
-  -1,
-  -1,
-  -1,
-  7,
-  11,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  7,
-  6,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  0,
-  8,
-  11,
-  7,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  1,
-  9,
-  11,
-  7,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  1,
-  9,
-  8,
-  3,
-  1,
-  11,
-  7,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  1,
-  2,
-  6,
-  11,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  2,
-  10,
-  3,
-  0,
-  8,
-  6,
-  11,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  9,
-  0,
-  2,
-  10,
-  9,
-  6,
-  11,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  6,
-  11,
-  7,
-  2,
-  10,
-  3,
-  10,
-  8,
-  3,
-  10,
-  9,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  7,
-  2,
-  3,
-  6,
-  2,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  7,
-  0,
-  8,
-  7,
-  6,
-  0,
-  6,
-  2,
-  0,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  7,
-  6,
-  2,
-  3,
-  7,
-  0,
-  1,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  6,
-  2,
-  1,
-  8,
-  6,
-  1,
-  9,
-  8,
-  8,
-  7,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  7,
-  6,
-  10,
-  1,
-  7,
-  1,
-  3,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  7,
-  6,
-  1,
-  7,
-  10,
-  1,
-  8,
-  7,
-  1,
-  0,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  3,
-  7,
-  0,
-  7,
-  10,
-  0,
-  10,
-  9,
-  6,
-  10,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  7,
-  6,
-  10,
-  7,
-  10,
-  8,
-  8,
-  10,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  6,
-  8,
-  4,
-  11,
-  8,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  6,
-  11,
-  3,
-  0,
-  6,
-  0,
-  4,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  6,
-  11,
-  8,
-  4,
-  6,
-  9,
-  0,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  4,
-  6,
-  9,
-  6,
-  3,
-  9,
-  3,
-  1,
-  11,
-  3,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  6,
-  8,
-  4,
-  6,
-  11,
-  8,
-  2,
-  10,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  2,
-  10,
-  3,
-  0,
-  11,
-  0,
-  6,
-  11,
-  0,
-  4,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  11,
-  8,
-  4,
-  6,
-  11,
-  0,
-  2,
-  9,
-  2,
-  10,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  9,
-  3,
-  10,
-  3,
-  2,
-  9,
-  4,
-  3,
-  11,
-  3,
-  6,
-  4,
-  6,
-  3,
-  -1,
-  8,
-  2,
-  3,
-  8,
-  4,
-  2,
-  4,
-  6,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  4,
-  2,
-  4,
-  6,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  9,
-  0,
-  2,
-  3,
-  4,
-  2,
-  4,
-  6,
-  4,
-  3,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  9,
-  4,
-  1,
-  4,
-  2,
-  2,
-  4,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  1,
-  3,
-  8,
-  6,
-  1,
-  8,
-  4,
-  6,
-  6,
-  10,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  1,
-  0,
-  10,
-  0,
-  6,
-  6,
-  0,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  6,
-  3,
-  4,
-  3,
-  8,
-  6,
-  10,
-  3,
-  0,
-  3,
-  9,
-  10,
-  9,
-  3,
-  -1,
-  10,
-  9,
-  4,
-  6,
-  10,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  9,
-  5,
-  7,
-  6,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  8,
-  3,
-  4,
-  9,
-  5,
-  11,
-  7,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  0,
-  1,
-  5,
-  4,
-  0,
-  7,
-  6,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  11,
-  7,
-  6,
-  8,
-  3,
-  4,
-  3,
-  5,
-  4,
-  3,
-  1,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  5,
-  4,
-  10,
-  1,
-  2,
-  7,
-  6,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  6,
-  11,
-  7,
-  1,
-  2,
-  10,
-  0,
-  8,
-  3,
-  4,
-  9,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  7,
-  6,
-  11,
-  5,
-  4,
-  10,
-  4,
-  2,
-  10,
-  4,
-  0,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  4,
-  8,
-  3,
-  5,
-  4,
-  3,
-  2,
-  5,
-  10,
-  5,
-  2,
-  11,
-  7,
-  6,
-  -1,
-  7,
-  2,
-  3,
-  7,
-  6,
-  2,
-  5,
-  4,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  5,
-  4,
-  0,
-  8,
-  6,
-  0,
-  6,
-  2,
-  6,
-  8,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  6,
-  2,
-  3,
-  7,
-  6,
-  1,
-  5,
-  0,
-  5,
-  4,
-  0,
-  -1,
-  -1,
-  -1,
-  -1,
-  6,
-  2,
-  8,
-  6,
-  8,
-  7,
-  2,
-  1,
-  8,
-  4,
-  8,
-  5,
-  1,
-  5,
-  8,
-  -1,
-  9,
-  5,
-  4,
-  10,
-  1,
-  6,
-  1,
-  7,
-  6,
-  1,
-  3,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  6,
-  10,
-  1,
-  7,
-  6,
-  1,
-  0,
-  7,
-  8,
-  7,
-  0,
-  9,
-  5,
-  4,
-  -1,
-  4,
-  0,
-  10,
-  4,
-  10,
-  5,
-  0,
-  3,
-  10,
-  6,
-  10,
-  7,
-  3,
-  7,
-  10,
-  -1,
-  7,
-  6,
-  10,
-  7,
-  10,
-  8,
-  5,
-  4,
-  10,
-  4,
-  8,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  6,
-  9,
-  5,
-  6,
-  11,
-  9,
-  11,
-  8,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  6,
-  11,
-  0,
-  6,
-  3,
-  0,
-  5,
-  6,
-  0,
-  9,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  11,
-  8,
-  0,
-  5,
-  11,
-  0,
-  1,
-  5,
-  5,
-  6,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  6,
-  11,
-  3,
-  6,
-  3,
-  5,
-  5,
-  3,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  2,
-  10,
-  9,
-  5,
-  11,
-  9,
-  11,
-  8,
-  11,
-  5,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  11,
-  3,
-  0,
-  6,
-  11,
-  0,
-  9,
-  6,
-  5,
-  6,
-  9,
-  1,
-  2,
-  10,
-  -1,
-  11,
-  8,
-  5,
-  11,
-  5,
-  6,
-  8,
-  0,
-  5,
-  10,
-  5,
-  2,
-  0,
-  2,
-  5,
-  -1,
-  6,
-  11,
-  3,
-  6,
-  3,
-  5,
-  2,
-  10,
-  3,
-  10,
-  5,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  8,
-  9,
-  5,
-  2,
-  8,
-  5,
-  6,
-  2,
-  3,
-  8,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  5,
-  6,
-  9,
-  6,
-  0,
-  0,
-  6,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  5,
-  8,
-  1,
-  8,
-  0,
-  5,
-  6,
-  8,
-  3,
-  8,
-  2,
-  6,
-  2,
-  8,
-  -1,
-  1,
-  5,
-  6,
-  2,
-  1,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  3,
-  6,
-  1,
-  6,
-  10,
-  3,
-  8,
-  6,
-  5,
-  6,
-  9,
-  8,
-  9,
-  6,
-  -1,
-  10,
-  1,
-  0,
-  10,
-  0,
-  6,
-  9,
-  5,
-  0,
-  5,
-  6,
-  0,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  3,
-  8,
-  5,
-  6,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  5,
-  6,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  11,
-  5,
-  10,
-  7,
-  5,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  11,
-  5,
-  10,
-  11,
-  7,
-  5,
-  8,
-  3,
-  0,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  11,
-  7,
-  5,
-  10,
-  11,
-  1,
-  9,
-  0,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  7,
-  5,
-  10,
-  11,
-  7,
-  9,
-  8,
-  1,
-  8,
-  3,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  11,
-  1,
-  2,
-  11,
-  7,
-  1,
-  7,
-  5,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  8,
-  3,
-  1,
-  2,
-  7,
-  1,
-  7,
-  5,
-  7,
-  2,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  7,
-  5,
-  9,
-  2,
-  7,
-  9,
-  0,
-  2,
-  2,
-  11,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  7,
-  5,
-  2,
-  7,
-  2,
-  11,
-  5,
-  9,
-  2,
-  3,
-  2,
-  8,
-  9,
-  8,
-  2,
-  -1,
-  2,
-  5,
-  10,
-  2,
-  3,
-  5,
-  3,
-  7,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  2,
-  0,
-  8,
-  5,
-  2,
-  8,
-  7,
-  5,
-  10,
-  2,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  0,
-  1,
-  5,
-  10,
-  3,
-  5,
-  3,
-  7,
-  3,
-  10,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  8,
-  2,
-  9,
-  2,
-  1,
-  8,
-  7,
-  2,
-  10,
-  2,
-  5,
-  7,
-  5,
-  2,
-  -1,
-  1,
-  3,
-  5,
-  3,
-  7,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  8,
-  7,
-  0,
-  7,
-  1,
-  1,
-  7,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  0,
-  3,
-  9,
-  3,
-  5,
-  5,
-  3,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  8,
-  7,
-  5,
-  9,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  8,
-  4,
-  5,
-  10,
-  8,
-  10,
-  11,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  0,
-  4,
-  5,
-  11,
-  0,
-  5,
-  10,
-  11,
-  11,
-  3,
-  0,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  1,
-  9,
-  8,
-  4,
-  10,
-  8,
-  10,
-  11,
-  10,
-  4,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  10,
-  11,
-  4,
-  10,
-  4,
-  5,
-  11,
-  3,
-  4,
-  9,
-  4,
-  1,
-  3,
-  1,
-  4,
-  -1,
-  2,
-  5,
-  1,
-  2,
-  8,
-  5,
-  2,
-  11,
-  8,
-  4,
-  5,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  4,
-  11,
-  0,
-  11,
-  3,
-  4,
-  5,
-  11,
-  2,
-  11,
-  1,
-  5,
-  1,
-  11,
-  -1,
-  0,
-  2,
-  5,
-  0,
-  5,
-  9,
-  2,
-  11,
-  5,
-  4,
-  5,
-  8,
-  11,
-  8,
-  5,
-  -1,
-  9,
-  4,
-  5,
-  2,
-  11,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  5,
-  10,
-  3,
-  5,
-  2,
-  3,
-  4,
-  5,
-  3,
-  8,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  5,
-  10,
-  2,
-  5,
-  2,
-  4,
-  4,
-  2,
-  0,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  10,
-  2,
-  3,
-  5,
-  10,
-  3,
-  8,
-  5,
-  4,
-  5,
-  8,
-  0,
-  1,
-  9,
-  -1,
-  5,
-  10,
-  2,
-  5,
-  2,
-  4,
-  1,
-  9,
-  2,
-  9,
-  4,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  4,
-  5,
-  8,
-  5,
-  3,
-  3,
-  5,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  4,
-  5,
-  1,
-  0,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  8,
-  4,
-  5,
-  8,
-  5,
-  3,
-  9,
-  0,
-  5,
-  0,
-  3,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  4,
-  5,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  11,
-  7,
-  4,
-  9,
-  11,
-  9,
-  10,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  8,
-  3,
-  4,
-  9,
-  7,
-  9,
-  11,
-  7,
-  9,
-  10,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  10,
-  11,
-  1,
-  11,
-  4,
-  1,
-  4,
-  0,
-  7,
-  4,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  1,
-  4,
-  3,
-  4,
-  8,
-  1,
-  10,
-  4,
-  7,
-  4,
-  11,
-  10,
-  11,
-  4,
-  -1,
-  4,
-  11,
-  7,
-  9,
-  11,
-  4,
-  9,
-  2,
-  11,
-  9,
-  1,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  7,
-  4,
-  9,
-  11,
-  7,
-  9,
-  1,
-  11,
-  2,
-  11,
-  1,
-  0,
-  8,
-  3,
-  -1,
-  11,
-  7,
-  4,
-  11,
-  4,
-  2,
-  2,
-  4,
-  0,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  11,
-  7,
-  4,
-  11,
-  4,
-  2,
-  8,
-  3,
-  4,
-  3,
-  2,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  9,
-  10,
-  2,
-  7,
-  9,
-  2,
-  3,
-  7,
-  7,
-  4,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  10,
-  7,
-  9,
-  7,
-  4,
-  10,
-  2,
-  7,
-  8,
-  7,
-  0,
-  2,
-  0,
-  7,
-  -1,
-  3,
-  7,
-  10,
-  3,
-  10,
-  2,
-  7,
-  4,
-  10,
-  1,
-  10,
-  0,
-  4,
-  0,
-  10,
-  -1,
-  1,
-  10,
-  2,
-  8,
-  7,
-  4,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  9,
-  1,
-  4,
-  1,
-  7,
-  7,
-  1,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  9,
-  1,
-  4,
-  1,
-  7,
-  0,
-  8,
-  1,
-  8,
-  7,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  0,
-  3,
-  7,
-  4,
-  3,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  4,
-  8,
-  7,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  10,
-  8,
-  10,
-  11,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  0,
-  9,
-  3,
-  9,
-  11,
-  11,
-  9,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  1,
-  10,
-  0,
-  10,
-  8,
-  8,
-  10,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  1,
-  10,
-  11,
-  3,
-  10,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  2,
-  11,
-  1,
-  11,
-  9,
-  9,
-  11,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  0,
-  9,
-  3,
-  9,
-  11,
-  1,
-  2,
-  9,
-  2,
-  11,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  2,
-  11,
-  8,
-  0,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  3,
-  2,
-  11,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  3,
-  8,
-  2,
-  8,
-  10,
-  10,
-  8,
-  9,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  9,
-  10,
-  2,
-  0,
-  9,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  2,
-  3,
-  8,
-  2,
-  8,
-  10,
-  0,
-  1,
-  8,
-  1,
-  10,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  10,
-  2,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  1,
-  3,
-  8,
-  9,
-  1,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  9,
-  1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  0,
-  3,
-  8,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1,
-  -1
-]);
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/math/SimplexNoise.js
-var SimplexNoise = __webpack_require__(13945);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/geometries/LightningStrike.js
-var LightningStrike_defProp = Object.defineProperty;
-var LightningStrike_defNormalProp = (obj, key, value) => key in obj ? LightningStrike_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var LightningStrike_publicField = (obj, key, value) => {
-  LightningStrike_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-const _LightningStrike = class extends three_module.BufferGeometry {
-  constructor(rayParameters = {}) {
-    super();
-    this.isLightningStrike = true;
-    this.type = "LightningStrike";
-    this.init(_LightningStrike.copyParameters(rayParameters, rayParameters));
-    this.createMesh();
-  }
-  static createRandomGenerator() {
-    const numSeeds = 2053;
-    const seeds = [];
-    for (let i = 0; i < numSeeds; i++) {
-      seeds.push(Math.random());
-    }
-    const generator = {
-      currentSeed: 0,
-      random: function() {
-        const value = seeds[generator.currentSeed];
-        generator.currentSeed = (generator.currentSeed + 1) % numSeeds;
-        return value;
-      },
-      getSeed: function() {
-        return generator.currentSeed / numSeeds;
-      },
-      setSeed: function(seed) {
-        generator.currentSeed = Math.floor(seed * numSeeds) % numSeeds;
-      }
-    };
-    return generator;
-  }
-  static copyParameters(dest = {}, source = {}) {
-    const vecCopy = function(v) {
-      if (source === dest) {
-        return v;
-      } else {
-        return v.clone();
-      }
-    };
-    dest.sourceOffset = source.sourceOffset !== void 0 ? vecCopy(source.sourceOffset) : new three_module.Vector3(0, 100, 0), dest.destOffset = source.destOffset !== void 0 ? vecCopy(source.destOffset) : new three_module.Vector3(0, 0, 0), dest.timeScale = source.timeScale !== void 0 ? source.timeScale : 1, dest.roughness = source.roughness !== void 0 ? source.roughness : 0.9, dest.straightness = source.straightness !== void 0 ? source.straightness : 0.7, dest.up0 = source.up0 !== void 0 ? vecCopy(source.up0) : new three_module.Vector3(0, 0, 1);
-    dest.up1 = source.up1 !== void 0 ? vecCopy(source.up1) : new three_module.Vector3(0, 0, 1), dest.radius0 = source.radius0 !== void 0 ? source.radius0 : 1, dest.radius1 = source.radius1 !== void 0 ? source.radius1 : 1, dest.radius0Factor = source.radius0Factor !== void 0 ? source.radius0Factor : 0.5, dest.radius1Factor = source.radius1Factor !== void 0 ? source.radius1Factor : 0.2, dest.minRadius = source.minRadius !== void 0 ? source.minRadius : 0.2, // These parameters should not be changed after lightning creation. They can be changed but the ray will change its form abruptly:
-    dest.isEternal = source.isEternal !== void 0 ? source.isEternal : source.birthTime === void 0 || source.deathTime === void 0, dest.birthTime = source.birthTime, dest.deathTime = source.deathTime, dest.propagationTimeFactor = source.propagationTimeFactor !== void 0 ? source.propagationTimeFactor : 0.1, dest.vanishingTimeFactor = source.vanishingTimeFactor !== void 0 ? source.vanishingTimeFactor : 0.9, dest.subrayPeriod = source.subrayPeriod !== void 0 ? source.subrayPeriod : 4, dest.subrayDutyCycle = source.subrayDutyCycle !== void 0 ? source.subrayDutyCycle : 0.6;
-    dest.maxIterations = source.maxIterations !== void 0 ? source.maxIterations : 9;
-    dest.isStatic = source.isStatic !== void 0 ? source.isStatic : false;
-    dest.ramification = source.ramification !== void 0 ? source.ramification : 5;
-    dest.maxSubrayRecursion = source.maxSubrayRecursion !== void 0 ? source.maxSubrayRecursion : 3;
-    dest.recursionProbability = source.recursionProbability !== void 0 ? source.recursionProbability : 0.6;
-    dest.generateUVs = source.generateUVs !== void 0 ? source.generateUVs : false;
-    dest.randomGenerator = source.randomGenerator, dest.noiseSeed = source.noiseSeed, dest.onDecideSubrayCreation = source.onDecideSubrayCreation, dest.onSubrayCreation = source.onSubrayCreation;
-    return dest;
-  }
-  update(time) {
-    if (this.isStatic)
-      return;
-    if (this.rayParameters.isEternal || this.rayParameters.birthTime <= time && time <= this.rayParameters.deathTime) {
-      this.updateMesh(time);
-      if (time < this.subrays[0].endPropagationTime) {
-        this.state = _LightningStrike.RAY_PROPAGATING;
-      } else if (time > this.subrays[0].beginVanishingTime) {
-        this.state = _LightningStrike.RAY_VANISHING;
-      } else {
-        this.state = _LightningStrike.RAY_STEADY;
-      }
-      this.visible = true;
-    } else {
-      this.visible = false;
-      if (time < this.rayParameters.birthTime) {
-        this.state = _LightningStrike.RAY_UNBORN;
-      } else {
-        this.state = _LightningStrike.RAY_EXTINGUISHED;
-      }
-    }
-  }
-  init(rayParameters) {
-    this.rayParameters = rayParameters;
-    this.maxIterations = rayParameters.maxIterations !== void 0 ? Math.floor(rayParameters.maxIterations) : 9;
-    rayParameters.maxIterations = this.maxIterations;
-    this.isStatic = rayParameters.isStatic !== void 0 ? rayParameters.isStatic : false;
-    rayParameters.isStatic = this.isStatic;
-    this.ramification = rayParameters.ramification !== void 0 ? Math.floor(rayParameters.ramification) : 5;
-    rayParameters.ramification = this.ramification;
-    this.maxSubrayRecursion = rayParameters.maxSubrayRecursion !== void 0 ? Math.floor(rayParameters.maxSubrayRecursion) : 3;
-    rayParameters.maxSubrayRecursion = this.maxSubrayRecursion;
-    this.recursionProbability = rayParameters.recursionProbability !== void 0 ? rayParameters.recursionProbability : 0.6;
-    rayParameters.recursionProbability = this.recursionProbability;
-    this.generateUVs = rayParameters.generateUVs !== void 0 ? rayParameters.generateUVs : false;
-    rayParameters.generateUVs = this.generateUVs;
-    if (rayParameters.randomGenerator !== void 0) {
-      this.randomGenerator = rayParameters.randomGenerator;
-      this.seedGenerator = rayParameters.randomGenerator;
-      if (rayParameters.noiseSeed !== void 0) {
-        this.seedGenerator.setSeed(rayParameters.noiseSeed);
-      }
-    } else {
-      this.randomGenerator = _LightningStrike.createRandomGenerator();
-      this.seedGenerator = Math;
-    }
-    if (rayParameters.onDecideSubrayCreation !== void 0) {
-      this.onDecideSubrayCreation = rayParameters.onDecideSubrayCreation;
-    } else {
-      this.createDefaultSubrayCreationCallbacks();
-      if (rayParameters.onSubrayCreation !== void 0) {
-        this.onSubrayCreation = rayParameters.onSubrayCreation;
-      }
-    }
-    this.state = _LightningStrike.RAY_INITIALIZED;
-    this.maxSubrays = Math.ceil(1 + Math.pow(this.ramification, Math.max(0, this.maxSubrayRecursion - 1)));
-    rayParameters.maxSubrays = this.maxSubrays;
-    this.maxRaySegments = 2 * (1 << this.maxIterations);
-    this.subrays = [];
-    for (let i = 0; i < this.maxSubrays; i++) {
-      this.subrays.push(this.createSubray());
-    }
-    this.raySegments = [];
-    for (let i = 0; i < this.maxRaySegments; i++) {
-      this.raySegments.push(this.createSegment());
-    }
-    this.time = 0;
-    this.timeFraction = 0;
-    this.currentSegmentCallback = null;
-    this.currentCreateTriangleVertices = this.generateUVs ? this.createTriangleVerticesWithUVs : this.createTriangleVerticesWithoutUVs;
-    this.numSubrays = 0;
-    this.currentSubray = null;
-    this.currentSegmentIndex = 0;
-    this.isInitialSegment = false;
-    this.subrayProbability = 0;
-    this.currentVertex = 0;
-    this.currentIndex = 0;
-    this.currentCoordinate = 0;
-    this.currentUVCoordinate = 0;
-    this.vertices = null;
-    this.uvs = null;
-    this.indices = null;
-    this.positionAttribute = null;
-    this.uvsAttribute = null;
-    this.simplexX = new SimplexNoise/* SimplexNoise */.L(this.seedGenerator);
-    this.simplexY = new SimplexNoise/* SimplexNoise */.L(this.seedGenerator);
-    this.simplexZ = new SimplexNoise/* SimplexNoise */.L(this.seedGenerator);
-    this.forwards = new three_module.Vector3();
-    this.forwardsFill = new three_module.Vector3();
-    this.side = new three_module.Vector3();
-    this.down = new three_module.Vector3();
-    this.middlePos = new three_module.Vector3();
-    this.middleLinPos = new three_module.Vector3();
-    this.newPos = new three_module.Vector3();
-    this.vPos = new three_module.Vector3();
-    this.cross1 = new three_module.Vector3();
-  }
-  createMesh() {
-    const maxDrawableSegmentsPerSubRay = 1 << this.maxIterations;
-    const maxVerts = 3 * (maxDrawableSegmentsPerSubRay + 1) * this.maxSubrays;
-    const maxIndices = 18 * maxDrawableSegmentsPerSubRay * this.maxSubrays;
-    this.vertices = new Float32Array(maxVerts * 3);
-    this.indices = new Uint32Array(maxIndices);
-    if (this.generateUVs) {
-      this.uvs = new Float32Array(maxVerts * 2);
-    }
-    this.fillMesh(0);
-    this.setIndex(new three_module.Uint32BufferAttribute(this.indices, 1));
-    this.positionAttribute = new three_module.Float32BufferAttribute(this.vertices, 3);
-    this.setAttribute("position", this.positionAttribute);
-    if (this.generateUVs) {
-      this.uvsAttribute = new three_module.Float32BufferAttribute(new Float32Array(this.uvs), 2);
-      this.setAttribute("uv", this.uvsAttribute);
-    }
-    if (!this.isStatic) {
-      this.index.usage = three_module.DynamicDrawUsage;
-      this.positionAttribute.usage = three_module.DynamicDrawUsage;
-      if (this.generateUVs) {
-        this.uvsAttribute.usage = three_module.DynamicDrawUsage;
-      }
-    }
-    this.vertices = this.positionAttribute.array;
-    this.indices = this.index.array;
-    if (this.generateUVs) {
-      this.uvs = this.uvsAttribute.array;
-    }
-  }
-  updateMesh(time) {
-    this.fillMesh(time);
-    this.drawRange.count = this.currentIndex;
-    this.index.needsUpdate = true;
-    this.positionAttribute.needsUpdate = true;
-    if (this.generateUVs) {
-      this.uvsAttribute.needsUpdate = true;
-    }
-  }
-  fillMesh(time) {
-    const scope = this;
-    this.currentVertex = 0;
-    this.currentIndex = 0;
-    this.currentCoordinate = 0;
-    this.currentUVCoordinate = 0;
-    this.fractalRay(time, function fillVertices(segment) {
-      const subray = scope.currentSubray;
-      if (time < subray.birthTime) {
-        return;
-      } else if (this.rayParameters.isEternal && scope.currentSubray.recursion == 0) {
-        scope.createPrism(segment);
-        scope.onDecideSubrayCreation(segment, scope);
-      } else if (time < subray.endPropagationTime) {
-        if (scope.timeFraction >= segment.fraction0 * subray.propagationTimeFactor) {
-          scope.createPrism(segment);
-          scope.onDecideSubrayCreation(segment, scope);
-        }
-      } else if (time < subray.beginVanishingTime) {
-        scope.createPrism(segment);
-        scope.onDecideSubrayCreation(segment, scope);
-      } else {
-        if (scope.timeFraction <= subray.vanishingTimeFactor + segment.fraction1 * (1 - subray.vanishingTimeFactor)) {
-          scope.createPrism(segment);
-        }
-        scope.onDecideSubrayCreation(segment, scope);
-      }
-    });
-  }
-  addNewSubray() {
-    return this.subrays[this.numSubrays++];
-  }
-  initSubray(subray, rayParameters) {
-    subray.pos0.copy(rayParameters.sourceOffset);
-    subray.pos1.copy(rayParameters.destOffset);
-    subray.up0.copy(rayParameters.up0);
-    subray.up1.copy(rayParameters.up1);
-    subray.radius0 = rayParameters.radius0;
-    subray.radius1 = rayParameters.radius1;
-    subray.birthTime = rayParameters.birthTime;
-    subray.deathTime = rayParameters.deathTime;
-    subray.timeScale = rayParameters.timeScale;
-    subray.roughness = rayParameters.roughness;
-    subray.straightness = rayParameters.straightness;
-    subray.propagationTimeFactor = rayParameters.propagationTimeFactor;
-    subray.vanishingTimeFactor = rayParameters.vanishingTimeFactor;
-    subray.maxIterations = this.maxIterations;
-    subray.seed = rayParameters.noiseSeed !== void 0 ? rayParameters.noiseSeed : 0;
-    subray.recursion = 0;
-  }
-  fractalRay(time, segmentCallback) {
-    this.time = time;
-    this.currentSegmentCallback = segmentCallback;
-    this.numSubrays = 0;
-    this.initSubray(this.addNewSubray(), this.rayParameters);
-    for (let subrayIndex = 0; subrayIndex < this.numSubrays; subrayIndex++) {
-      const subray = this.subrays[subrayIndex];
-      this.currentSubray = subray;
-      this.randomGenerator.setSeed(subray.seed);
-      subray.endPropagationTime = three_module.MathUtils.lerp(subray.birthTime, subray.deathTime, subray.propagationTimeFactor);
-      subray.beginVanishingTime = three_module.MathUtils.lerp(subray.deathTime, subray.birthTime, 1 - subray.vanishingTimeFactor);
-      const random1 = this.randomGenerator.random;
-      subray.linPos0.set(random1(), random1(), random1()).multiplyScalar(1e3);
-      subray.linPos1.set(random1(), random1(), random1()).multiplyScalar(1e3);
-      this.timeFraction = (time - subray.birthTime) / (subray.deathTime - subray.birthTime);
-      this.currentSegmentIndex = 0;
-      this.isInitialSegment = true;
-      const segment = this.getNewSegment();
-      segment.iteration = 0;
-      segment.pos0.copy(subray.pos0);
-      segment.pos1.copy(subray.pos1);
-      segment.linPos0.copy(subray.linPos0);
-      segment.linPos1.copy(subray.linPos1);
-      segment.up0.copy(subray.up0);
-      segment.up1.copy(subray.up1);
-      segment.radius0 = subray.radius0;
-      segment.radius1 = subray.radius1;
-      segment.fraction0 = 0;
-      segment.fraction1 = 1;
-      segment.positionVariationFactor = 1 - subray.straightness;
-      this.subrayProbability = this.ramification * Math.pow(this.recursionProbability, subray.recursion) / (1 << subray.maxIterations);
-      this.fractalRayRecursive(segment);
-    }
-    this.currentSegmentCallback = null;
-    this.currentSubray = null;
-  }
-  fractalRayRecursive(segment) {
-    if (segment.iteration >= this.currentSubray.maxIterations) {
-      this.currentSegmentCallback(segment);
-      return;
-    }
-    this.forwards.subVectors(segment.pos1, segment.pos0);
-    let lForwards = this.forwards.length();
-    if (lForwards < 1e-6) {
-      this.forwards.set(0, 0, 0.01);
-      lForwards = this.forwards.length();
-    }
-    const middleRadius = (segment.radius0 + segment.radius1) * 0.5;
-    const middleFraction = (segment.fraction0 + segment.fraction1) * 0.5;
-    const timeDimension = this.time * this.currentSubray.timeScale * Math.pow(2, segment.iteration);
-    this.middlePos.lerpVectors(segment.pos0, segment.pos1, 0.5);
-    this.middleLinPos.lerpVectors(segment.linPos0, segment.linPos1, 0.5);
-    const p = this.middleLinPos;
-    this.newPos.set(
-      this.simplexX.noise4d(p.x, p.y, p.z, timeDimension),
-      this.simplexY.noise4d(p.x, p.y, p.z, timeDimension),
-      this.simplexZ.noise4d(p.x, p.y, p.z, timeDimension)
-    );
-    this.newPos.multiplyScalar(segment.positionVariationFactor * lForwards);
-    this.newPos.add(this.middlePos);
-    const newSegment1 = this.getNewSegment();
-    newSegment1.pos0.copy(segment.pos0);
-    newSegment1.pos1.copy(this.newPos);
-    newSegment1.linPos0.copy(segment.linPos0);
-    newSegment1.linPos1.copy(this.middleLinPos);
-    newSegment1.up0.copy(segment.up0);
-    newSegment1.up1.copy(segment.up1);
-    newSegment1.radius0 = segment.radius0;
-    newSegment1.radius1 = middleRadius;
-    newSegment1.fraction0 = segment.fraction0;
-    newSegment1.fraction1 = middleFraction;
-    newSegment1.positionVariationFactor = segment.positionVariationFactor * this.currentSubray.roughness;
-    newSegment1.iteration = segment.iteration + 1;
-    const newSegment2 = this.getNewSegment();
-    newSegment2.pos0.copy(this.newPos);
-    newSegment2.pos1.copy(segment.pos1);
-    newSegment2.linPos0.copy(this.middleLinPos);
-    newSegment2.linPos1.copy(segment.linPos1);
-    this.cross1.crossVectors(segment.up0, this.forwards.normalize());
-    newSegment2.up0.crossVectors(this.forwards, this.cross1).normalize();
-    newSegment2.up1.copy(segment.up1);
-    newSegment2.radius0 = middleRadius;
-    newSegment2.radius1 = segment.radius1;
-    newSegment2.fraction0 = middleFraction;
-    newSegment2.fraction1 = segment.fraction1;
-    newSegment2.positionVariationFactor = segment.positionVariationFactor * this.currentSubray.roughness;
-    newSegment2.iteration = segment.iteration + 1;
-    this.fractalRayRecursive(newSegment1);
-    this.fractalRayRecursive(newSegment2);
-  }
-  createPrism(segment) {
-    this.forwardsFill.subVectors(segment.pos1, segment.pos0).normalize();
-    if (this.isInitialSegment) {
-      this.currentCreateTriangleVertices(segment.pos0, segment.up0, this.forwardsFill, segment.radius0, 0);
-      this.isInitialSegment = false;
-    }
-    this.currentCreateTriangleVertices(segment.pos1, segment.up0, this.forwardsFill, segment.radius1, segment.fraction1);
-    this.createPrismFaces();
-  }
-  createTriangleVerticesWithoutUVs(pos, up, forwards, radius) {
-    this.side.crossVectors(up, forwards).multiplyScalar(radius * _LightningStrike.COS30DEG);
-    this.down.copy(up).multiplyScalar(-radius * _LightningStrike.SIN30DEG);
-    const p = this.vPos;
-    const v = this.vertices;
-    p.copy(pos).sub(this.side).add(this.down);
-    v[this.currentCoordinate++] = p.x;
-    v[this.currentCoordinate++] = p.y;
-    v[this.currentCoordinate++] = p.z;
-    p.copy(pos).add(this.side).add(this.down);
-    v[this.currentCoordinate++] = p.x;
-    v[this.currentCoordinate++] = p.y;
-    v[this.currentCoordinate++] = p.z;
-    p.copy(up).multiplyScalar(radius).add(pos);
-    v[this.currentCoordinate++] = p.x;
-    v[this.currentCoordinate++] = p.y;
-    v[this.currentCoordinate++] = p.z;
-    this.currentVertex += 3;
-  }
-  createTriangleVerticesWithUVs(pos, up, forwards, radius, u) {
-    this.side.crossVectors(up, forwards).multiplyScalar(radius * _LightningStrike.COS30DEG);
-    this.down.copy(up).multiplyScalar(-radius * _LightningStrike.SIN30DEG);
-    const p = this.vPos;
-    const v = this.vertices;
-    const uv = this.uvs;
-    p.copy(pos).sub(this.side).add(this.down);
-    v[this.currentCoordinate++] = p.x;
-    v[this.currentCoordinate++] = p.y;
-    v[this.currentCoordinate++] = p.z;
-    uv[this.currentUVCoordinate++] = u;
-    uv[this.currentUVCoordinate++] = 0;
-    p.copy(pos).add(this.side).add(this.down);
-    v[this.currentCoordinate++] = p.x;
-    v[this.currentCoordinate++] = p.y;
-    v[this.currentCoordinate++] = p.z;
-    uv[this.currentUVCoordinate++] = u;
-    uv[this.currentUVCoordinate++] = 0.5;
-    p.copy(up).multiplyScalar(radius).add(pos);
-    v[this.currentCoordinate++] = p.x;
-    v[this.currentCoordinate++] = p.y;
-    v[this.currentCoordinate++] = p.z;
-    uv[this.currentUVCoordinate++] = u;
-    uv[this.currentUVCoordinate++] = 1;
-    this.currentVertex += 3;
-  }
-  createPrismFaces(vertex) {
-    const indices = this.indices;
-    vertex = this.currentVertex - 6;
-    indices[this.currentIndex++] = vertex + 1;
-    indices[this.currentIndex++] = vertex + 2;
-    indices[this.currentIndex++] = vertex + 5;
-    indices[this.currentIndex++] = vertex + 1;
-    indices[this.currentIndex++] = vertex + 5;
-    indices[this.currentIndex++] = vertex + 4;
-    indices[this.currentIndex++] = vertex + 0;
-    indices[this.currentIndex++] = vertex + 1;
-    indices[this.currentIndex++] = vertex + 4;
-    indices[this.currentIndex++] = vertex + 0;
-    indices[this.currentIndex++] = vertex + 4;
-    indices[this.currentIndex++] = vertex + 3;
-    indices[this.currentIndex++] = vertex + 2;
-    indices[this.currentIndex++] = vertex + 0;
-    indices[this.currentIndex++] = vertex + 3;
-    indices[this.currentIndex++] = vertex + 2;
-    indices[this.currentIndex++] = vertex + 3;
-    indices[this.currentIndex++] = vertex + 5;
-  }
-  createDefaultSubrayCreationCallbacks() {
-    const random1 = this.randomGenerator.random;
-    this.onDecideSubrayCreation = function(segment, lightningStrike) {
-      const subray = lightningStrike.currentSubray;
-      const period = lightningStrike.rayParameters.subrayPeriod;
-      const dutyCycle = lightningStrike.rayParameters.subrayDutyCycle;
-      const phase0 = lightningStrike.rayParameters.isEternal && subray.recursion == 0 ? -random1() * period : three_module.MathUtils.lerp(subray.birthTime, subray.endPropagationTime, segment.fraction0) - random1() * period;
-      const phase = lightningStrike.time - phase0;
-      const currentCycle = Math.floor(phase / period);
-      const childSubraySeed = random1() * (currentCycle + 1);
-      const isActive = phase % period <= dutyCycle * period;
-      let probability = 0;
-      if (isActive) {
-        probability = lightningStrike.subrayProbability;
-      }
-      if (subray.recursion < lightningStrike.maxSubrayRecursion && lightningStrike.numSubrays < lightningStrike.maxSubrays && random1() < probability) {
-        const childSubray = lightningStrike.addNewSubray();
-        const parentSeed = lightningStrike.randomGenerator.getSeed();
-        childSubray.seed = childSubraySeed;
-        lightningStrike.randomGenerator.setSeed(childSubraySeed);
-        childSubray.recursion = subray.recursion + 1;
-        childSubray.maxIterations = Math.max(1, subray.maxIterations - 1);
-        childSubray.linPos0.set(random1(), random1(), random1()).multiplyScalar(1e3);
-        childSubray.linPos1.set(random1(), random1(), random1()).multiplyScalar(1e3);
-        childSubray.up0.copy(subray.up0);
-        childSubray.up1.copy(subray.up1);
-        childSubray.radius0 = segment.radius0 * lightningStrike.rayParameters.radius0Factor;
-        childSubray.radius1 = Math.min(
-          lightningStrike.rayParameters.minRadius,
-          segment.radius1 * lightningStrike.rayParameters.radius1Factor
-        );
-        childSubray.birthTime = phase0 + currentCycle * period;
-        childSubray.deathTime = childSubray.birthTime + period * dutyCycle;
-        if (!lightningStrike.rayParameters.isEternal && subray.recursion == 0) {
-          childSubray.birthTime = Math.max(childSubray.birthTime, subray.birthTime);
-          childSubray.deathTime = Math.min(childSubray.deathTime, subray.deathTime);
-        }
-        childSubray.timeScale = subray.timeScale * 2;
-        childSubray.roughness = subray.roughness;
-        childSubray.straightness = subray.straightness;
-        childSubray.propagationTimeFactor = subray.propagationTimeFactor;
-        childSubray.vanishingTimeFactor = subray.vanishingTimeFactor;
-        lightningStrike.onSubrayCreation(segment, subray, childSubray, lightningStrike);
-        lightningStrike.randomGenerator.setSeed(parentSeed);
-      }
-    };
-    const vec1Pos = new three_module.Vector3();
-    const vec2Forward = new three_module.Vector3();
-    const vec3Side = new three_module.Vector3();
-    const vec4Up = new three_module.Vector3();
-    this.onSubrayCreation = function(segment, parentSubray, childSubray, lightningStrike) {
-      lightningStrike.subrayCylinderPosition(segment, parentSubray, childSubray, 0.5, 0.6, 0.2);
-    };
-    this.subrayConePosition = function(segment, parentSubray, childSubray, heightFactor, sideWidthFactor, minSideWidthFactor) {
-      childSubray.pos0.copy(segment.pos0);
-      vec1Pos.subVectors(parentSubray.pos1, parentSubray.pos0);
-      vec2Forward.copy(vec1Pos).normalize();
-      vec1Pos.multiplyScalar(segment.fraction0 + (1 - segment.fraction0) * (random1() * heightFactor));
-      const length = vec1Pos.length();
-      vec3Side.crossVectors(parentSubray.up0, vec2Forward);
-      const angle = 2 * Math.PI * random1();
-      vec3Side.multiplyScalar(Math.cos(angle));
-      vec4Up.copy(parentSubray.up0).multiplyScalar(Math.sin(angle));
-      childSubray.pos1.copy(vec3Side).add(vec4Up).multiplyScalar(length * sideWidthFactor * (minSideWidthFactor + random1() * (1 - minSideWidthFactor))).add(vec1Pos).add(parentSubray.pos0);
-    };
-    this.subrayCylinderPosition = function(segment, parentSubray, childSubray, heightFactor, sideWidthFactor, minSideWidthFactor) {
-      childSubray.pos0.copy(segment.pos0);
-      vec1Pos.subVectors(parentSubray.pos1, parentSubray.pos0);
-      vec2Forward.copy(vec1Pos).normalize();
-      vec1Pos.multiplyScalar(segment.fraction0 + (1 - segment.fraction0) * ((2 * random1() - 1) * heightFactor));
-      const length = vec1Pos.length();
-      vec3Side.crossVectors(parentSubray.up0, vec2Forward);
-      const angle = 2 * Math.PI * random1();
-      vec3Side.multiplyScalar(Math.cos(angle));
-      vec4Up.copy(parentSubray.up0).multiplyScalar(Math.sin(angle));
-      childSubray.pos1.copy(vec3Side).add(vec4Up).multiplyScalar(length * sideWidthFactor * (minSideWidthFactor + random1() * (1 - minSideWidthFactor))).add(vec1Pos).add(parentSubray.pos0);
-    };
-  }
-  createSubray() {
-    return {
-      seed: 0,
-      maxIterations: 0,
-      recursion: 0,
-      pos0: new three_module.Vector3(),
-      pos1: new three_module.Vector3(),
-      linPos0: new three_module.Vector3(),
-      linPos1: new three_module.Vector3(),
-      up0: new three_module.Vector3(),
-      up1: new three_module.Vector3(),
-      radius0: 0,
-      radius1: 0,
-      birthTime: 0,
-      deathTime: 0,
-      timeScale: 0,
-      roughness: 0,
-      straightness: 0,
-      propagationTimeFactor: 0,
-      vanishingTimeFactor: 0,
-      endPropagationTime: 0,
-      beginVanishingTime: 0
-    };
-  }
-  createSegment() {
-    return {
-      iteration: 0,
-      pos0: new three_module.Vector3(),
-      pos1: new three_module.Vector3(),
-      linPos0: new three_module.Vector3(),
-      linPos1: new three_module.Vector3(),
-      up0: new three_module.Vector3(),
-      up1: new three_module.Vector3(),
-      radius0: 0,
-      radius1: 0,
-      fraction0: 0,
-      fraction1: 0,
-      positionVariationFactor: 0
-    };
-  }
-  getNewSegment() {
-    return this.raySegments[this.currentSegmentIndex++];
-  }
-  copy(source) {
-    super.copy(source);
-    this.init(_LightningStrike.copyParameters({}, source.rayParameters));
-    return this;
-  }
-  clone() {
-    return new this.constructor(_LightningStrike.copyParameters({}, this.rayParameters));
-  }
-};
-let LightningStrike = _LightningStrike;
-// Ray states
-LightningStrike_publicField(LightningStrike, "RAY_INITIALIZED", 0);
-LightningStrike_publicField(LightningStrike, "RAY_UNBORN", 1);
-LightningStrike_publicField(LightningStrike, "RAY_PROPAGATING", 2);
-LightningStrike_publicField(LightningStrike, "RAY_STEADY", 3);
-LightningStrike_publicField(LightningStrike, "RAY_VANISHING", 4);
-LightningStrike_publicField(LightningStrike, "RAY_EXTINGUISHED", 5);
-LightningStrike_publicField(LightningStrike, "COS30DEG", Math.cos(30 * Math.PI / 180));
-LightningStrike_publicField(LightningStrike, "SIN30DEG", Math.sin(30 * Math.PI / 180));
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/objects/LightningStorm.js
-
-
-class LightningStorm extends three_module.Object3D {
-  constructor(stormParams = {}) {
-    super();
-    this.isLightningStorm = true;
-    this.stormParams = stormParams;
-    stormParams.size = stormParams.size !== void 0 ? stormParams.size : 1e3;
-    stormParams.minHeight = stormParams.minHeight !== void 0 ? stormParams.minHeight : 80;
-    stormParams.maxHeight = stormParams.maxHeight !== void 0 ? stormParams.maxHeight : 100;
-    stormParams.maxSlope = stormParams.maxSlope !== void 0 ? stormParams.maxSlope : 1.1;
-    stormParams.maxLightnings = stormParams.maxLightnings !== void 0 ? stormParams.maxLightnings : 3;
-    stormParams.lightningMinPeriod = stormParams.lightningMinPeriod !== void 0 ? stormParams.lightningMinPeriod : 3;
-    stormParams.lightningMaxPeriod = stormParams.lightningMaxPeriod !== void 0 ? stormParams.lightningMaxPeriod : 7;
-    stormParams.lightningMinDuration = stormParams.lightningMinDuration !== void 0 ? stormParams.lightningMinDuration : 1;
-    stormParams.lightningMaxDuration = stormParams.lightningMaxDuration !== void 0 ? stormParams.lightningMaxDuration : 2.5;
-    this.lightningParameters = LightningStrike.copyParameters(
-      stormParams.lightningParameters,
-      stormParams.lightningParameters
-    );
-    this.lightningParameters.isEternal = false;
-    this.lightningMaterial = stormParams.lightningMaterial !== void 0 ? stormParams.lightningMaterial : new three_module.MeshBasicMaterial({ color: 11599871 });
-    if (stormParams.onRayPosition !== void 0) {
-      this.onRayPosition = stormParams.onRayPosition;
-    } else {
-      this.onRayPosition = function(source, dest) {
-        dest.set((Math.random() - 0.5) * stormParams.size, 0, (Math.random() - 0.5) * stormParams.size);
-        const height = three_module.MathUtils.lerp(stormParams.minHeight, stormParams.maxHeight, Math.random());
-        source.set(stormParams.maxSlope * (2 * Math.random() - 1), 1, stormParams.maxSlope * (2 * Math.random() - 1)).multiplyScalar(height).add(dest);
-      };
-    }
-    this.onLightningDown = stormParams.onLightningDown;
-    this.inited = false;
-    this.nextLightningTime = 0;
-    this.lightningsMeshes = [];
-    this.deadLightningsMeshes = [];
-    for (let i = 0; i < this.stormParams.maxLightnings; i++) {
-      const lightning = new LightningStrike(LightningStrike.copyParameters({}, this.lightningParameters));
-      const mesh = new three_module.Mesh(lightning, this.lightningMaterial);
-      this.deadLightningsMeshes.push(mesh);
-    }
-  }
-  update(time) {
-    if (!this.inited) {
-      this.nextLightningTime = this.getNextLightningTime(time) * Math.random();
-      this.inited = true;
-    }
-    if (time >= this.nextLightningTime) {
-      const lightningMesh = this.deadLightningsMeshes.pop();
-      if (lightningMesh) {
-        const lightningParams1 = LightningStrike.copyParameters(
-          lightningMesh.geometry.rayParameters,
-          this.lightningParameters
-        );
-        lightningParams1.birthTime = time;
-        lightningParams1.deathTime = time + three_module.MathUtils.lerp(this.stormParams.lightningMinDuration, this.stormParams.lightningMaxDuration, Math.random());
-        this.onRayPosition(lightningParams1.sourceOffset, lightningParams1.destOffset);
-        lightningParams1.noiseSeed = Math.random();
-        this.add(lightningMesh);
-        this.lightningsMeshes.push(lightningMesh);
-      }
-      this.nextLightningTime = this.getNextLightningTime(time);
-    }
-    let i = 0, il = this.lightningsMeshes.length;
-    while (i < il) {
-      const mesh = this.lightningsMeshes[i];
-      const lightning = mesh.geometry;
-      const prevState = lightning.state;
-      lightning.update(time);
-      if (prevState === LightningStrike.RAY_PROPAGATING && lightning.state > prevState) {
-        if (this.onLightningDown) {
-          this.onLightningDown(lightning);
-        }
-      }
-      if (lightning.state === LightningStrike.RAY_EXTINGUISHED) {
-        this.lightningsMeshes.splice(this.lightningsMeshes.indexOf(mesh), 1);
-        this.deadLightningsMeshes.push(mesh);
-        this.remove(mesh);
-        il--;
-      } else {
-        i++;
-      }
-    }
-  }
-  getNextLightningTime(currentTime) {
-    return currentTime + three_module.MathUtils.lerp(this.stormParams.lightningMinPeriod, this.stormParams.lightningMaxPeriod, Math.random()) / (this.stormParams.maxLightnings + 1);
-  }
-  copy(source, recursive) {
-    super.copy(source, recursive);
-    this.stormParams.size = source.stormParams.size;
-    this.stormParams.minHeight = source.stormParams.minHeight;
-    this.stormParams.maxHeight = source.stormParams.maxHeight;
-    this.stormParams.maxSlope = source.stormParams.maxSlope;
-    this.stormParams.maxLightnings = source.stormParams.maxLightnings;
-    this.stormParams.lightningMinPeriod = source.stormParams.lightningMinPeriod;
-    this.stormParams.lightningMaxPeriod = source.stormParams.lightningMaxPeriod;
-    this.stormParams.lightningMinDuration = source.stormParams.lightningMinDuration;
-    this.stormParams.lightningMaxDuration = source.stormParams.lightningMaxDuration;
-    this.lightningParameters = LightningStrike.copyParameters({}, source.lightningParameters);
-    this.lightningMaterial = source.stormParams.lightningMaterial;
-    this.onLightningDown = source.onLightningDown;
-    return this;
-  }
-  clone() {
-    return new this.constructor(this.stormParams).copy(this);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/objects/ReflectorRTT.js
-
-class ReflectorRTT extends Reflector {
-  constructor(geometry, options) {
-    super(geometry, options);
-    this.geometry.setDrawRange(0, 0);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/objects/ReflectorForSSRPass.js
-var ReflectorForSSRPass_defProp = Object.defineProperty;
-var ReflectorForSSRPass_defNormalProp = (obj, key, value) => key in obj ? ReflectorForSSRPass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var ReflectorForSSRPass_publicField = (obj, key, value) => {
-  ReflectorForSSRPass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-const _ReflectorForSSRPass = class extends three_module.Mesh {
-  constructor(geometry, options = {}) {
-    super(geometry);
-    this.isReflectorForSSRPass = true;
-    this.type = "ReflectorForSSRPass";
-    const scope = this;
-    const color = options.color !== void 0 ? new three_module.Color(options.color) : new three_module.Color(8355711);
-    const textureWidth = options.textureWidth || 512;
-    const textureHeight = options.textureHeight || 512;
-    const clipBias = options.clipBias || 0;
-    const shader = options.shader || _ReflectorForSSRPass.ReflectorShader;
-    const useDepthTexture = options.useDepthTexture === true;
-    const yAxis = new three_module.Vector3(0, 1, 0);
-    const vecTemp0 = new three_module.Vector3();
-    const vecTemp1 = new three_module.Vector3();
-    scope.needsUpdate = false;
-    scope.maxDistance = _ReflectorForSSRPass.ReflectorShader.uniforms.maxDistance.value;
-    scope.opacity = _ReflectorForSSRPass.ReflectorShader.uniforms.opacity.value;
-    scope.color = color;
-    scope.resolution = options.resolution || new three_module.Vector2(window.innerWidth, window.innerHeight);
-    scope._distanceAttenuation = _ReflectorForSSRPass.ReflectorShader.defines.DISTANCE_ATTENUATION;
-    Object.defineProperty(scope, "distanceAttenuation", {
-      get() {
-        return scope._distanceAttenuation;
-      },
-      set(val) {
-        if (scope._distanceAttenuation === val)
-          return;
-        scope._distanceAttenuation = val;
-        scope.material.defines.DISTANCE_ATTENUATION = val;
-        scope.material.needsUpdate = true;
-      }
-    });
-    scope._fresnel = _ReflectorForSSRPass.ReflectorShader.defines.FRESNEL;
-    Object.defineProperty(scope, "fresnel", {
-      get() {
-        return scope._fresnel;
-      },
-      set(val) {
-        if (scope._fresnel === val)
-          return;
-        scope._fresnel = val;
-        scope.material.defines.FRESNEL = val;
-        scope.material.needsUpdate = true;
-      }
-    });
-    const normal = new three_module.Vector3();
-    const reflectorWorldPosition = new three_module.Vector3();
-    const cameraWorldPosition = new three_module.Vector3();
-    const rotationMatrix = new three_module.Matrix4();
-    const lookAtPosition = new three_module.Vector3(0, 0, -1);
-    const view = new three_module.Vector3();
-    const target = new three_module.Vector3();
-    const textureMatrix = new three_module.Matrix4();
-    const virtualCamera = new three_module.PerspectiveCamera();
-    let depthTexture;
-    if (useDepthTexture) {
-      depthTexture = new three_module.DepthTexture();
-      depthTexture.type = three_module.UnsignedShortType;
-      depthTexture.minFilter = three_module.NearestFilter;
-      depthTexture.magFilter = three_module.NearestFilter;
-    }
-    const parameters = {
-      depthTexture: useDepthTexture ? depthTexture : null,
-      type: three_module.HalfFloatType
-    };
-    const renderTarget = new three_module.WebGLRenderTarget(textureWidth, textureHeight, parameters);
-    const material = new three_module.ShaderMaterial({
-      transparent: useDepthTexture,
-      defines: Object.assign({}, _ReflectorForSSRPass.ReflectorShader.defines, {
-        useDepthTexture
-      }),
-      uniforms: three_module.UniformsUtils.clone(shader.uniforms),
-      fragmentShader: shader.fragmentShader,
-      vertexShader: shader.vertexShader
-    });
-    material.uniforms["tDiffuse"].value = renderTarget.texture;
-    material.uniforms["color"].value = scope.color;
-    material.uniforms["textureMatrix"].value = textureMatrix;
-    if (useDepthTexture) {
-      material.uniforms["tDepth"].value = renderTarget.depthTexture;
-    }
-    this.material = material;
-    const globalPlane = new three_module.Plane(new three_module.Vector3(0, 1, 0), clipBias);
-    const globalPlanes = [globalPlane];
-    this.doRender = function(renderer, scene, camera) {
-      material.uniforms["maxDistance"].value = scope.maxDistance;
-      material.uniforms["color"].value = scope.color;
-      material.uniforms["opacity"].value = scope.opacity;
-      vecTemp0.copy(camera.position).normalize();
-      vecTemp1.copy(vecTemp0).reflect(yAxis);
-      material.uniforms["fresnelCoe"].value = (vecTemp0.dot(vecTemp1) + 1) / 2;
-      reflectorWorldPosition.setFromMatrixPosition(scope.matrixWorld);
-      cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);
-      rotationMatrix.extractRotation(scope.matrixWorld);
-      normal.set(0, 0, 1);
-      normal.applyMatrix4(rotationMatrix);
-      view.subVectors(reflectorWorldPosition, cameraWorldPosition);
-      if (view.dot(normal) > 0)
-        return;
-      view.reflect(normal).negate();
-      view.add(reflectorWorldPosition);
-      rotationMatrix.extractRotation(camera.matrixWorld);
-      lookAtPosition.set(0, 0, -1);
-      lookAtPosition.applyMatrix4(rotationMatrix);
-      lookAtPosition.add(cameraWorldPosition);
-      target.subVectors(reflectorWorldPosition, lookAtPosition);
-      target.reflect(normal).negate();
-      target.add(reflectorWorldPosition);
-      virtualCamera.position.copy(view);
-      virtualCamera.up.set(0, 1, 0);
-      virtualCamera.up.applyMatrix4(rotationMatrix);
-      virtualCamera.up.reflect(normal);
-      virtualCamera.lookAt(target);
-      virtualCamera.far = camera.far;
-      virtualCamera.updateMatrixWorld();
-      virtualCamera.projectionMatrix.copy(camera.projectionMatrix);
-      material.uniforms["virtualCameraNear"].value = camera.near;
-      material.uniforms["virtualCameraFar"].value = camera.far;
-      material.uniforms["virtualCameraMatrixWorld"].value = virtualCamera.matrixWorld;
-      material.uniforms["virtualCameraProjectionMatrix"].value = camera.projectionMatrix;
-      material.uniforms["virtualCameraProjectionMatrixInverse"].value = camera.projectionMatrixInverse;
-      material.uniforms["resolution"].value = scope.resolution;
-      textureMatrix.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1);
-      textureMatrix.multiply(virtualCamera.projectionMatrix);
-      textureMatrix.multiply(virtualCamera.matrixWorldInverse);
-      textureMatrix.multiply(scope.matrixWorld);
-      const currentRenderTarget = renderer.getRenderTarget();
-      const currentXrEnabled = renderer.xr.enabled;
-      const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;
-      const currentClippingPlanes = renderer.clippingPlanes;
-      renderer.xr.enabled = false;
-      renderer.shadowMap.autoUpdate = false;
-      renderer.clippingPlanes = globalPlanes;
-      renderer.setRenderTarget(renderTarget);
-      renderer.state.buffers.depth.setMask(true);
-      if (renderer.autoClear === false)
-        renderer.clear();
-      renderer.render(scene, virtualCamera);
-      renderer.xr.enabled = currentXrEnabled;
-      renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;
-      renderer.clippingPlanes = currentClippingPlanes;
-      renderer.setRenderTarget(currentRenderTarget);
-      const viewport = camera.viewport;
-      if (viewport !== void 0) {
-        renderer.state.viewport(viewport);
-      }
-    };
-    this.getRenderTarget = function() {
-      return renderTarget;
-    };
-  }
-};
-let ReflectorForSSRPass = _ReflectorForSSRPass;
-ReflectorForSSRPass_publicField(ReflectorForSSRPass, "ReflectorShader", {
-  defines: {
-    DISTANCE_ATTENUATION: true,
-    FRESNEL: true
-  },
-  uniforms: {
-    color: { value: null },
-    tDiffuse: { value: null },
-    tDepth: { value: null },
-    textureMatrix: { value: /* @__PURE__ */ new three_module.Matrix4() },
-    maxDistance: { value: 180 },
-    opacity: { value: 0.5 },
-    fresnelCoe: { value: null },
-    virtualCameraNear: { value: null },
-    virtualCameraFar: { value: null },
-    virtualCameraProjectionMatrix: { value: /* @__PURE__ */ new three_module.Matrix4() },
-    virtualCameraMatrixWorld: { value: /* @__PURE__ */ new three_module.Matrix4() },
-    virtualCameraProjectionMatrixInverse: { value: /* @__PURE__ */ new three_module.Matrix4() },
-    resolution: { value: /* @__PURE__ */ new three_module.Vector2() }
-  },
-  vertexShader: (
-    /* glsl */
-    `
-		uniform mat4 textureMatrix;
-		varying vec4 vUv;
-
-		void main() {
-
-			vUv = textureMatrix * vec4( position, 1.0 );
-
-			gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-
-		}`
-  ),
-  fragmentShader: (
-    /* glsl */
-    `
-		uniform vec3 color;
-		uniform sampler2D tDiffuse;
-		uniform sampler2D tDepth;
-		uniform float maxDistance;
-		uniform float opacity;
-		uniform float fresnelCoe;
-		uniform float virtualCameraNear;
-		uniform float virtualCameraFar;
-		uniform mat4 virtualCameraProjectionMatrix;
-		uniform mat4 virtualCameraProjectionMatrixInverse;
-		uniform mat4 virtualCameraMatrixWorld;
-		uniform vec2 resolution;
-		varying vec4 vUv;
-		#include <packing>
-		float blendOverlay( float base, float blend ) {
-			return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );
-		}
-		vec3 blendOverlay( vec3 base, vec3 blend ) {
-			return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );
-		}
-		float getDepth( const in vec2 uv ) {
-			return texture2D( tDepth, uv ).x;
-		}
-		float getViewZ( const in float depth ) {
-			return perspectiveDepthToViewZ( depth, virtualCameraNear, virtualCameraFar );
-		}
-		vec3 getViewPosition( const in vec2 uv, const in float depth/*clip space*/, const in float clipW ) {
-			vec4 clipPosition = vec4( ( vec3( uv, depth ) - 0.5 ) * 2.0, 1.0 );//ndc
-			clipPosition *= clipW; //clip
-			return ( virtualCameraProjectionMatrixInverse * clipPosition ).xyz;//view
-		}
-		void main() {
-			vec4 base = texture2DProj( tDiffuse, vUv );
-			#ifdef useDepthTexture
-				vec2 uv=(gl_FragCoord.xy-.5)/resolution.xy;
-				uv.x=1.-uv.x;
-				float depth = texture2DProj( tDepth, vUv ).r;
-				float viewZ = getViewZ( depth );
-				float clipW = virtualCameraProjectionMatrix[2][3] * viewZ+virtualCameraProjectionMatrix[3][3];
-				vec3 viewPosition=getViewPosition( uv, depth, clipW );
-				vec3 worldPosition=(virtualCameraMatrixWorld*vec4(viewPosition,1)).xyz;
-				if(worldPosition.y>maxDistance) discard;
-				float op=opacity;
-				#ifdef DISTANCE_ATTENUATION
-					float ratio=1.-(worldPosition.y/maxDistance);
-					float attenuation=ratio*ratio;
-					op=opacity*attenuation;
-				#endif
-				#ifdef FRESNEL
-					op*=fresnelCoe;
-				#endif
-				gl_FragColor = vec4( blendOverlay( base.rgb, color ), op );
-			#else
-				gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );
-			#endif
-		}
-	`
-  )
-});
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/objects/Sky.js
-var Sky = __webpack_require__(48756);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/objects/Water2.js
-var Water2_defProp = Object.defineProperty;
-var Water2_defNormalProp = (obj, key, value) => key in obj ? Water2_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var Water2_publicField = (obj, key, value) => {
-  Water2_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-const _Water2 = class extends three_module.Mesh {
-  constructor(geometry, options = {}) {
-    super(geometry);
-    this.isWater = true;
-    this.type = "Water";
-    const scope = this;
-    const color = options.color !== void 0 ? new three_module.Color(options.color) : new three_module.Color(16777215);
-    const textureWidth = options.textureWidth || 512;
-    const textureHeight = options.textureHeight || 512;
-    const clipBias = options.clipBias || 0;
-    const flowDirection = options.flowDirection || new three_module.Vector2(1, 0);
-    const flowSpeed = options.flowSpeed || 0.03;
-    const reflectivity = options.reflectivity || 0.02;
-    const scale = options.scale || 1;
-    const shader = options.shader || _Water2.WaterShader;
-    const encoding = options.encoding !== void 0 ? options.encoding : 3e3;
-    const flowMap = options.flowMap || void 0;
-    const normalMap0 = options.normalMap0;
-    const normalMap1 = options.normalMap1;
-    const cycle = 0.15;
-    const halfCycle = cycle * 0.5;
-    const textureMatrix = new three_module.Matrix4();
-    const clock = new three_module.Clock();
-    if (Reflector === void 0) {
-      console.error("THREE.Water: Required component Reflector not found.");
-      return;
-    }
-    if (Refractor === void 0) {
-      console.error("THREE.Water: Required component Refractor not found.");
-      return;
-    }
-    const reflector = new Reflector(geometry, {
-      textureWidth,
-      textureHeight,
-      clipBias,
-      encoding
-    });
-    const refractor = new Refractor(geometry, {
-      textureWidth,
-      textureHeight,
-      clipBias,
-      encoding
-    });
-    reflector.matrixAutoUpdate = false;
-    refractor.matrixAutoUpdate = false;
-    this.material = new three_module.ShaderMaterial({
-      uniforms: three_module.UniformsUtils.merge([three_module.UniformsLib.fog, shader.uniforms]),
-      vertexShader: shader.vertexShader,
-      fragmentShader: shader.fragmentShader,
-      transparent: true,
-      fog: true
-    });
-    if (flowMap !== void 0) {
-      this.material.defines.USE_FLOWMAP = "";
-      this.material.uniforms["tFlowMap"] = {
-        type: "t",
-        value: flowMap
-      };
-    } else {
-      this.material.uniforms["flowDirection"] = {
-        type: "v2",
-        value: flowDirection
-      };
-    }
-    normalMap0.wrapS = normalMap0.wrapT = three_module.RepeatWrapping;
-    normalMap1.wrapS = normalMap1.wrapT = three_module.RepeatWrapping;
-    this.material.uniforms["tReflectionMap"].value = reflector.getRenderTarget().texture;
-    this.material.uniforms["tRefractionMap"].value = refractor.getRenderTarget().texture;
-    this.material.uniforms["tNormalMap0"].value = normalMap0;
-    this.material.uniforms["tNormalMap1"].value = normalMap1;
-    this.material.uniforms["color"].value = color;
-    this.material.uniforms["reflectivity"].value = reflectivity;
-    this.material.uniforms["textureMatrix"].value = textureMatrix;
-    this.material.uniforms["config"].value.x = 0;
-    this.material.uniforms["config"].value.y = halfCycle;
-    this.material.uniforms["config"].value.z = halfCycle;
-    this.material.uniforms["config"].value.w = scale;
-    function updateTextureMatrix(camera) {
-      textureMatrix.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1);
-      textureMatrix.multiply(camera.projectionMatrix);
-      textureMatrix.multiply(camera.matrixWorldInverse);
-      textureMatrix.multiply(scope.matrixWorld);
-    }
-    function updateFlow() {
-      const delta = clock.getDelta();
-      const config = scope.material.uniforms["config"];
-      config.value.x += flowSpeed * delta;
-      config.value.y = config.value.x + halfCycle;
-      if (config.value.x >= cycle) {
-        config.value.x = 0;
-        config.value.y = halfCycle;
-      } else if (config.value.y >= cycle) {
-        config.value.y = config.value.y - cycle;
-      }
-    }
-    this.onBeforeRender = function(renderer, scene, camera) {
-      updateTextureMatrix(camera);
-      updateFlow();
-      scope.visible = false;
-      reflector.matrixWorld.copy(scope.matrixWorld);
-      refractor.matrixWorld.copy(scope.matrixWorld);
-      reflector.onBeforeRender(renderer, scene, camera);
-      refractor.onBeforeRender(renderer, scene, camera);
-      scope.visible = true;
-    };
-  }
-};
-let Water2 = _Water2;
-Water2_publicField(Water2, "WaterShader", {
-  uniforms: {
-    color: {
-      value: null
-    },
-    reflectivity: {
-      value: 0
-    },
-    tReflectionMap: {
-      value: null
-    },
-    tRefractionMap: {
-      value: null
-    },
-    tNormalMap0: {
-      value: null
-    },
-    tNormalMap1: {
-      value: null
-    },
-    textureMatrix: {
-      value: null
-    },
-    config: {
-      value: /* @__PURE__ */ new three_module.Vector4()
-    }
-  },
-  vertexShader: (
-    /* glsl */
-    `
-
-		#include <common>
-		#include <fog_pars_vertex>
-		#include <logdepthbuf_pars_vertex>
-
-		uniform mat4 textureMatrix;
-
-		varying vec4 vCoord;
-		varying vec2 vUv;
-		varying vec3 vToEye;
-
-		void main() {
-
-			vUv = uv;
-			vCoord = textureMatrix * vec4( position, 1.0 );
-
-			vec4 worldPosition = modelMatrix * vec4( position, 1.0 );
-			vToEye = cameraPosition - worldPosition.xyz;
-
-			vec4 mvPosition =  viewMatrix * worldPosition; // used in fog_vertex
-			gl_Position = projectionMatrix * mvPosition;
-
-			#include <logdepthbuf_vertex>
-			#include <fog_vertex>
-
-		}`
-  ),
-  fragmentShader: (
-    /* glsl */
-    `
-
-		#include <common>
-		#include <fog_pars_fragment>
-		#include <logdepthbuf_pars_fragment>
-
-		uniform sampler2D tReflectionMap;
-		uniform sampler2D tRefractionMap;
-		uniform sampler2D tNormalMap0;
-		uniform sampler2D tNormalMap1;
-
-		#ifdef USE_FLOWMAP
-			uniform sampler2D tFlowMap;
-		#else
-			uniform vec2 flowDirection;
-		#endif
-
-		uniform vec3 color;
-		uniform float reflectivity;
-		uniform vec4 config;
-
-		varying vec4 vCoord;
-		varying vec2 vUv;
-		varying vec3 vToEye;
-
-		void main() {
-
-			#include <logdepthbuf_fragment>
-
-			float flowMapOffset0 = config.x;
-			float flowMapOffset1 = config.y;
-			float halfCycle = config.z;
-			float scale = config.w;
-
-			vec3 toEye = normalize( vToEye );
-
-			// determine flow direction
-			vec2 flow;
-			#ifdef USE_FLOWMAP
-				flow = texture2D( tFlowMap, vUv ).rg * 2.0 - 1.0;
-			#else
-				flow = flowDirection;
-			#endif
-			flow.x *= - 1.0;
-
-			// sample normal maps (distort uvs with flowdata)
-			vec4 normalColor0 = texture2D( tNormalMap0, ( vUv * scale ) + flow * flowMapOffset0 );
-			vec4 normalColor1 = texture2D( tNormalMap1, ( vUv * scale ) + flow * flowMapOffset1 );
-
-			// linear interpolate to get the final normal color
-			float flowLerp = abs( halfCycle - flowMapOffset0 ) / halfCycle;
-			vec4 normalColor = mix( normalColor0, normalColor1, flowLerp );
-
-			// calculate normal vector
-			vec3 normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b,  normalColor.g * 2.0 - 1.0 ) );
-
-			// calculate the fresnel term to blend reflection and refraction maps
-			float theta = max( dot( toEye, normal ), 0.0 );
-			float reflectance = reflectivity + ( 1.0 - reflectivity ) * pow( ( 1.0 - theta ), 5.0 );
-
-			// calculate final uv coords
-			vec3 coord = vCoord.xyz / vCoord.w;
-			vec2 uv = coord.xy + coord.z * normal.xz * 0.05;
-
-			vec4 reflectColor = texture2D( tReflectionMap, vec2( 1.0 - uv.x, uv.y ) );
-			vec4 refractColor = texture2D( tRefractionMap, uv );
-
-			// multiply water color with the mix of both textures
-			gl_FragColor = vec4( color, 1.0 ) * mix( refractColor, reflectColor, reflectance );
-
-			#include <tonemapping_fragment>
-			#include <encodings_fragment>
-			#include <fog_fragment>
-
-		}`
-  )
-});
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/objects/GroundProjectedEnv.js
-
-const isCubeTexture = (def) => def && def.isCubeTexture;
-class GroundProjectedEnv extends three_module.Mesh {
-  constructor(texture, options) {
-    var _a, _b;
-    const isCubeMap = isCubeTexture(texture);
-    const w = (_b = isCubeMap ? (_a = texture.image[0]) == null ? void 0 : _a.width : texture.image.width) != null ? _b : 1024;
-    const cubeSize = w / 4;
-    const _lodMax = Math.floor(Math.log2(cubeSize));
-    const _cubeSize = Math.pow(2, _lodMax);
-    const width = 3 * Math.max(_cubeSize, 16 * 7);
-    const height = 4 * _cubeSize;
-    const defines = [
-      isCubeMap ? "#define ENVMAP_TYPE_CUBE" : "",
-      `#define CUBEUV_TEXEL_WIDTH ${1 / width}`,
-      `#define CUBEUV_TEXEL_HEIGHT ${1 / height}`,
-      `#define CUBEUV_MAX_MIP ${_lodMax}.0`
-    ];
-    const vertexShader = (
-      /* glsl */
-      `
-        varying vec3 vWorldPosition;
-        void main() 
-        {
-            vec4 worldPosition = ( modelMatrix * vec4( position, 1.0 ) );
-            vWorldPosition = worldPosition.xyz;
-            
-            gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-        }
-        `
-    );
-    const fragmentShader = defines.join("\n") + /* glsl */
-    `
-        #define ENVMAP_TYPE_CUBE_UV
-        varying vec3 vWorldPosition;
-        uniform float radius;
-        uniform float height;
-        uniform float angle;
-        #ifdef ENVMAP_TYPE_CUBE
-            uniform samplerCube map;
-        #else
-            uniform sampler2D map;
-        #endif
-        // From: https://www.shadertoy.com/view/4tsBD7
-        float diskIntersectWithBackFaceCulling( vec3 ro, vec3 rd, vec3 c, vec3 n, float r ) 
-        {
-            float d = dot ( rd, n );
-            
-            if( d > 0.0 ) { return 1e6; }
-            
-            vec3  o = ro - c;
-            float t = - dot( n, o ) / d;
-            vec3  q = o + rd * t;
-            
-            return ( dot( q, q ) < r * r ) ? t : 1e6;
-        }
-        // From: https://www.iquilezles.org/www/articles/intersectors/intersectors.htm
-        float sphereIntersect( vec3 ro, vec3 rd, vec3 ce, float ra ) 
-        {
-            vec3 oc = ro - ce;
-            float b = dot( oc, rd );
-            float c = dot( oc, oc ) - ra * ra;
-            float h = b * b - c;
-            
-            if( h < 0.0 ) { return -1.0; }
-            
-            h = sqrt( h );
-            
-            return - b + h;
-        }
-        vec3 project() 
-        {
-            vec3 p = normalize( vWorldPosition );
-            vec3 camPos = cameraPosition;
-            camPos.y -= height;
-            float intersection = sphereIntersect( camPos, p, vec3( 0.0 ), radius );
-            if( intersection > 0.0 ) {
-                
-                vec3 h = vec3( 0.0, - height, 0.0 );
-                float intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );
-                p = ( camPos + min( intersection, intersection2 ) * p ) / radius;
-            } else {
-                p = vec3( 0.0, 1.0, 0.0 );
-            }
-            return p;
-        }
-        #include <common>
-        #include <cube_uv_reflection_fragment>
-        void main() 
-        {
-            vec3 projectedWorldPosition = project();
-            
-            #ifdef ENVMAP_TYPE_CUBE
-                vec3 outcolor = textureCube( map, projectedWorldPosition ).rgb;
-            #else
-                vec3 direction = normalize( projectedWorldPosition );
-                vec2 uv = equirectUv( direction );
-                vec3 outcolor = texture2D( map, uv ).rgb;
-            #endif
-            gl_FragColor = vec4( outcolor, 1.0 );
-            #include <tonemapping_fragment>
-            #include <encodings_fragment>
-        }
-        `;
-    const uniforms = {
-      map: { value: texture },
-      height: { value: (options == null ? void 0 : options.height) || 15 },
-      radius: { value: (options == null ? void 0 : options.radius) || 100 }
-    };
-    const geometry = new three_module.IcosahedronGeometry(1, 16);
-    const material = new three_module.ShaderMaterial({
-      uniforms,
-      fragmentShader,
-      vertexShader,
-      side: three_module.DoubleSide
-    });
-    super(geometry, material);
-  }
-  set radius(radius) {
-    this.material.uniforms.radius.value = radius;
-  }
-  get radius() {
-    return this.material.uniforms.radius.value;
-  }
-  set height(height) {
-    this.material.uniforms.height.value = height;
-  }
-  get height() {
-    return this.material.uniforms.height.value;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/utils/SceneUtils.js
-
-const SceneUtils = {
-  createMeshesFromInstancedMesh: function(instancedMesh) {
-    const group = new three_module.Group();
-    const count = instancedMesh.count;
-    const geometry = instancedMesh.geometry;
-    const material = instancedMesh.material;
-    for (let i = 0; i < count; i++) {
-      const mesh = new three_module.Mesh(geometry, material);
-      instancedMesh.getMatrixAt(i, mesh.matrix);
-      mesh.matrix.decompose(mesh.position, mesh.quaternion, mesh.scale);
-      group.add(mesh);
-    }
-    group.copy(instancedMesh);
-    group.updateMatrixWorld();
-    return group;
-  },
-  createMultiMaterialObject: function(geometry, materials) {
-    const group = new three_module.Group();
-    for (let i = 0, l = materials.length; i < l; i++) {
-      group.add(new three_module.Mesh(geometry, materials[i]));
-    }
-    return group;
-  },
-  detach: function(child, parent, scene) {
-    console.warn("THREE.SceneUtils: detach() has been deprecated. Use scene.attach( child ) instead.");
-    scene.attach(child);
-  },
-  attach: function(child, scene, parent) {
-    console.warn("THREE.SceneUtils: attach() has been deprecated. Use parent.attach( child ) instead.");
-    parent.attach(child);
-  }
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/utils/UVsDebug.js
-
-function UVsDebug(geometry, size = 1024) {
-  const abc = "abc";
-  const a = new three_module.Vector2();
-  const b = new three_module.Vector2();
-  const uvs = [new three_module.Vector2(), new three_module.Vector2(), new three_module.Vector2()];
-  const face = [];
-  const canvas = document.createElement("canvas");
-  const width = size;
-  const height = size;
-  canvas.width = width;
-  canvas.height = height;
-  const ctx = canvas.getContext("2d");
-  ctx.lineWidth = 1;
-  ctx.strokeStyle = "rgb( 63, 63, 63 )";
-  ctx.textAlign = "center";
-  ctx.fillStyle = "rgb( 255, 255, 255 )";
-  ctx.fillRect(0, 0, width, height);
-  const index = geometry.index;
-  const uvAttribute = geometry.attributes.uv;
-  if (index) {
-    for (let i = 0, il = index.count; i < il; i += 3) {
-      face[0] = index.getX(i);
-      face[1] = index.getX(i + 1);
-      face[2] = index.getX(i + 2);
-      uvs[0].fromBufferAttribute(uvAttribute, face[0]);
-      uvs[1].fromBufferAttribute(uvAttribute, face[1]);
-      uvs[2].fromBufferAttribute(uvAttribute, face[2]);
-      processFace(face, uvs, i / 3);
-    }
-  } else {
-    for (let i = 0, il = uvAttribute.count; i < il; i += 3) {
-      face[0] = i;
-      face[1] = i + 1;
-      face[2] = i + 2;
-      uvs[0].fromBufferAttribute(uvAttribute, face[0]);
-      uvs[1].fromBufferAttribute(uvAttribute, face[1]);
-      uvs[2].fromBufferAttribute(uvAttribute, face[2]);
-      processFace(face, uvs, i / 3);
-    }
-  }
-  return canvas;
-  function processFace(face2, uvs2, index2) {
-    ctx.beginPath();
-    a.set(0, 0);
-    for (let j = 0, jl = uvs2.length; j < jl; j++) {
-      const uv = uvs2[j];
-      a.x += uv.x;
-      a.y += uv.y;
-      if (j === 0) {
-        ctx.moveTo(uv.x * (width - 2) + 0.5, (1 - uv.y) * (height - 2) + 0.5);
-      } else {
-        ctx.lineTo(uv.x * (width - 2) + 0.5, (1 - uv.y) * (height - 2) + 0.5);
-      }
-    }
-    ctx.closePath();
-    ctx.stroke();
-    a.divideScalar(uvs2.length);
-    ctx.font = "18px Arial";
-    ctx.fillStyle = "rgb( 63, 63, 63 )";
-    ctx.fillText(index2, a.x * width, (1 - a.y) * height);
-    if (a.x > 0.95) {
-      ctx.fillText(index2, a.x % 1 * width, (1 - a.y) * height);
-    }
-    ctx.font = "12px Arial";
-    ctx.fillStyle = "rgb( 191, 191, 191 )";
-    for (let j = 0, jl = uvs2.length; j < jl; j++) {
-      const uv = uvs2[j];
-      b.addVectors(a, uv).divideScalar(2);
-      const vnum = face2[j];
-      ctx.fillText(abc[j] + vnum, b.x * width, (1 - b.y) * height);
-      if (b.x > 0.95) {
-        ctx.fillText(abc[j] + vnum, b.x % 1 * width, (1 - b.y) * height);
-      }
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/utils/GeometryUtils.js
-
-const hilbert2D = (center = new three_module.Vector3(0, 0, 0), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3) => {
-  const half = size / 2;
-  const vec_s = [
-    new three_module.Vector3(center.x - half, center.y, center.z - half),
-    new three_module.Vector3(center.x - half, center.y, center.z + half),
-    new three_module.Vector3(center.x + half, center.y, center.z + half),
-    new three_module.Vector3(center.x + half, center.y, center.z - half)
-  ];
-  const vec = [vec_s[v0], vec_s[v1], vec_s[v2], vec_s[v3]];
-  if (0 <= --iterations) {
-    const tmp = [];
-    Array.prototype.push.apply(tmp, hilbert2D(vec[0], half, iterations, v0, v3, v2, v1));
-    Array.prototype.push.apply(tmp, hilbert2D(vec[1], half, iterations, v0, v1, v2, v3));
-    Array.prototype.push.apply(tmp, hilbert2D(vec[2], half, iterations, v0, v1, v2, v3));
-    Array.prototype.push.apply(tmp, hilbert2D(vec[3], half, iterations, v2, v1, v0, v3));
-    return tmp;
-  }
-  return vec;
-};
-const hilbert3D = (center = new three_module.Vector3(0, 0, 0), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3, v4 = 4, v5 = 5, v6 = 6, v7 = 7) => {
-  const half = size / 2;
-  const vec_s = [
-    new three_module.Vector3(center.x - half, center.y + half, center.z - half),
-    new three_module.Vector3(center.x - half, center.y + half, center.z + half),
-    new three_module.Vector3(center.x - half, center.y - half, center.z + half),
-    new three_module.Vector3(center.x - half, center.y - half, center.z - half),
-    new three_module.Vector3(center.x + half, center.y - half, center.z - half),
-    new three_module.Vector3(center.x + half, center.y - half, center.z + half),
-    new three_module.Vector3(center.x + half, center.y + half, center.z + half),
-    new three_module.Vector3(center.x + half, center.y + half, center.z - half)
-  ];
-  const vec = [vec_s[v0], vec_s[v1], vec_s[v2], vec_s[v3], vec_s[v4], vec_s[v5], vec_s[v6], vec_s[v7]];
-  if (--iterations >= 0) {
-    const tmp = [];
-    Array.prototype.push.apply(tmp, hilbert3D(vec[0], half, iterations, v0, v3, v4, v7, v6, v5, v2, v1));
-    Array.prototype.push.apply(tmp, hilbert3D(vec[1], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3));
-    Array.prototype.push.apply(tmp, hilbert3D(vec[2], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3));
-    Array.prototype.push.apply(tmp, hilbert3D(vec[3], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5));
-    Array.prototype.push.apply(tmp, hilbert3D(vec[4], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5));
-    Array.prototype.push.apply(tmp, hilbert3D(vec[5], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7));
-    Array.prototype.push.apply(tmp, hilbert3D(vec[6], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7));
-    Array.prototype.push.apply(tmp, hilbert3D(vec[7], half, iterations, v6, v5, v2, v1, v0, v3, v4, v7));
-    return tmp;
-  }
-  return vec;
-};
-const gosper = (size = 1) => {
-  function fractalize(config) {
-    let output = "";
-    let input = config.axiom;
-    for (let i = 0, il = config.steps; 0 <= il ? i < il : i > il; 0 <= il ? i++ : i--) {
-      output = "";
-      for (let j = 0, jl = input.length; j < jl; j++) {
-        const char = input[j];
-        if (char in config.rules) {
-          output += config.rules[char];
-        } else {
-          output += char;
-        }
-      }
-      input = output;
-    }
-    return output;
-  }
-  function toPoints(config) {
-    let currX = 0;
-    let currY = 0;
-    let angle = 0;
-    const path = [0, 0, 0];
-    const fractal = config.fractal;
-    for (let i = 0, l = fractal.length; i < l; i++) {
-      const char = fractal[i];
-      if (char === "+") {
-        angle += config.angle;
-      } else if (char === "-") {
-        angle -= config.angle;
-      } else if (char === "F") {
-        currX += config.size * Math.cos(angle);
-        currY += -config.size * Math.sin(angle);
-        path.push(currX, currY, 0);
-      }
-    }
-    return path;
-  }
-  const gosper2 = fractalize({
-    axiom: "A",
-    steps: 4,
-    rules: {
-      A: "A+BF++BF-FA--FAFA-BF+",
-      B: "-FA+BFBF++BF+FA--FA-B"
-    }
-  });
-  const points = toPoints({
-    fractal: gosper2,
-    size,
-    angle: Math.PI / 3
-    // 60 degrees
-  });
-  return points;
-};
-const GeometryUtils = {
-  hilbert3D,
-  gosper,
-  hilbert2D
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/utils/RoughnessMipmapper.js
-var RoughnessMipmapper_defProp = Object.defineProperty;
-var RoughnessMipmapper_defNormalProp = (obj, key, value) => key in obj ? RoughnessMipmapper_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var RoughnessMipmapper_publicField = (obj, key, value) => {
-  RoughnessMipmapper_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-var _mipmapMaterial = /* @__PURE__ */ _getMipmapMaterial();
-var _mesh = /* @__PURE__ */ new three_module.Mesh(/* @__PURE__ */ new three_module.PlaneGeometry(2, 2), _mipmapMaterial);
-var _flatCamera = /* @__PURE__ */ new three_module.OrthographicCamera(0, 1, 0, 1, 0, 1);
-var _tempTarget = null;
-class RoughnessMipmapper {
-  constructor(renderer) {
-    RoughnessMipmapper_publicField(this, "generateMipmaps", function(material) {
-      if ("roughnessMap" in material === false)
-        return;
-      var { roughnessMap, normalMap } = material;
-      if (roughnessMap === null || normalMap === null || !roughnessMap.generateMipmaps || material.userData.roughnessUpdated) {
-        return;
-      }
-      material.userData.roughnessUpdated = true;
-      var width = Math.max(roughnessMap.image.width, normalMap.image.width);
-      var height = Math.max(roughnessMap.image.height, normalMap.image.height);
-      if (!three_module.MathUtils.isPowerOfTwo(width) || !three_module.MathUtils.isPowerOfTwo(height))
-        return;
-      var oldTarget = this._renderer.getRenderTarget();
-      var autoClear = this._renderer.autoClear;
-      this._renderer.autoClear = false;
-      if (_tempTarget === null || _tempTarget.width !== width || _tempTarget.height !== height) {
-        if (_tempTarget !== null)
-          _tempTarget.dispose();
-        _tempTarget = new three_module.WebGLRenderTarget(width, height, {
-          depthBuffer: false
-        });
-        _tempTarget.scissorTest = true;
-      }
-      if (width !== roughnessMap.image.width || height !== roughnessMap.image.height) {
-        var params = {
-          wrapS: roughnessMap.wrapS,
-          wrapT: roughnessMap.wrapT,
-          magFilter: roughnessMap.magFilter,
-          minFilter: roughnessMap.minFilter,
-          depthBuffer: false
-        };
-        var newRoughnessTarget = new three_module.WebGLRenderTarget(width, height, params);
-        newRoughnessTarget.texture.generateMipmaps = true;
-        this._renderer.setRenderTarget(newRoughnessTarget);
-        material.roughnessMap = newRoughnessTarget.texture;
-        if (material.metalnessMap == roughnessMap)
-          material.metalnessMap = material.roughnessMap;
-        if (material.aoMap == roughnessMap)
-          material.aoMap = material.roughnessMap;
-      }
-      _mipmapMaterial.uniforms.roughnessMap.value = roughnessMap;
-      _mipmapMaterial.uniforms.normalMap.value = normalMap;
-      var position = new three_module.Vector2(0, 0);
-      var texelSize = _mipmapMaterial.uniforms.texelSize.value;
-      for (let mip = 0; width >= 1 && height >= 1; ++mip, width /= 2, height /= 2) {
-        texelSize.set(1 / width, 1 / height);
-        if (mip == 0)
-          texelSize.set(0, 0);
-        _tempTarget.viewport.set(position.x, position.y, width, height);
-        _tempTarget.scissor.set(position.x, position.y, width, height);
-        this._renderer.setRenderTarget(_tempTarget);
-        this._renderer.render(_mesh, _flatCamera);
-        this._renderer.copyFramebufferToTexture(position, material.roughnessMap, mip);
-        _mipmapMaterial.uniforms.roughnessMap.value = material.roughnessMap;
-      }
-      if (roughnessMap !== material.roughnessMap)
-        roughnessMap.dispose();
-      this._renderer.setRenderTarget(oldTarget);
-      this._renderer.autoClear = autoClear;
-    });
-    RoughnessMipmapper_publicField(this, "dispose", function() {
-      _mipmapMaterial.dispose();
-      _mesh.geometry.dispose();
-      if (_tempTarget != null)
-        _tempTarget.dispose();
-    });
-    this._renderer = renderer;
-    this._renderer.compile(_mesh, _flatCamera);
-  }
-}
-function _getMipmapMaterial() {
-  var shaderMaterial = new three_module.RawShaderMaterial({
-    uniforms: {
-      roughnessMap: { value: null },
-      normalMap: { value: null },
-      texelSize: { value: new three_module.Vector2(1, 1) }
-    },
-    vertexShader: (
-      /* glsl */
-      `
-			precision mediump float;
-			precision mediump int;
-
-			attribute vec3 position;
-			attribute vec2 uv;
-
-			varying vec2 vUv;
-
-			void main() {
-
-				vUv = uv;
-
-				gl_Position = vec4( position, 1.0 );
-
-			}
-		`
-    ),
-    fragmentShader: (
-      /* glsl */
-      `
-			precision mediump float;
-			precision mediump int;
-
-			varying vec2 vUv;
-
-			uniform sampler2D roughnessMap;
-			uniform sampler2D normalMap;
-			uniform vec2 texelSize;
-
-			#define ENVMAP_TYPE_CUBE_UV
-
-			vec4 envMapTexelToLinear( vec4 a ) { return a; }
-
-			#include <cube_uv_reflection_fragment>
-
-			float roughnessToVariance( float roughness ) {
-
-				float variance = 0.0;
-
-				if ( roughness >= r1 ) {
-
-					variance = ( r0 - roughness ) * ( v1 - v0 ) / ( r0 - r1 ) + v0;
-
-				} else if ( roughness >= r4 ) {
-
-					variance = ( r1 - roughness ) * ( v4 - v1 ) / ( r1 - r4 ) + v1;
-
-				} else if ( roughness >= r5 ) {
-
-					variance = ( r4 - roughness ) * ( v5 - v4 ) / ( r4 - r5 ) + v4;
-
-				} else {
-
-					float roughness2 = roughness * roughness;
-
-					variance = 1.79 * roughness2 * roughness2;
-
-				}
-
-				return variance;
-
-			}
-
-			float varianceToRoughness( float variance ) {
-
-				float roughness = 0.0;
-
-				if ( variance >= v1 ) {
-
-					roughness = ( v0 - variance ) * ( r1 - r0 ) / ( v0 - v1 ) + r0;
-
-				} else if ( variance >= v4 ) {
-
-					roughness = ( v1 - variance ) * ( r4 - r1 ) / ( v1 - v4 ) + r1;
-
-				} else if ( variance >= v5 ) {
-
-					roughness = ( v4 - variance ) * ( r5 - r4 ) / ( v4 - v5 ) + r4;
-
-				} else {
-
-					roughness = pow( 0.559 * variance, 0.25 ); // 0.559 = 1.0 / 1.79
-
-				}
-
-				return roughness;
-
-			}
-
-			void main() {
-
-				gl_FragColor = texture2D( roughnessMap, vUv, - 1.0 );
-
-				if ( texelSize.x == 0.0 ) return;
-
-				float roughness = gl_FragColor.g;
-
-				float variance = roughnessToVariance( roughness );
-
-				vec3 avgNormal;
-
-				for ( float x = - 1.0; x < 2.0; x += 2.0 ) {
-
-					for ( float y = - 1.0; y < 2.0; y += 2.0 ) {
-
-						vec2 uv = vUv + vec2( x, y ) * 0.25 * texelSize;
-
-						avgNormal += normalize( texture2D( normalMap, uv, - 1.0 ).xyz - 0.5 );
-
-					}
-
-				}
-
-				variance += 1.0 - 0.25 * length( avgNormal );
-
-				gl_FragColor.g = varianceToRoughness( variance );
-
-			}
-		`
-    ),
-    blending: three_module.NoBlending,
-    depthTest: false,
-    depthWrite: false
-  });
-  shaderMaterial.type = "RoughnessMipmapper";
-  return shaderMaterial;
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/utils/SkeletonUtils.js
-
-function retarget(target, source, options = {}) {
-  const pos = new three_module.Vector3(), quat = new three_module.Quaternion(), scale = new three_module.Vector3(), bindBoneMatrix = new three_module.Matrix4(), relativeMatrix = new three_module.Matrix4(), globalMatrix = new three_module.Matrix4();
-  options.preserveMatrix = options.preserveMatrix !== void 0 ? options.preserveMatrix : true;
-  options.preservePosition = options.preservePosition !== void 0 ? options.preservePosition : true;
-  options.preserveHipPosition = options.preserveHipPosition !== void 0 ? options.preserveHipPosition : false;
-  options.useTargetMatrix = options.useTargetMatrix !== void 0 ? options.useTargetMatrix : false;
-  options.hip = options.hip !== void 0 ? options.hip : "hip";
-  options.names = options.names || {};
-  const sourceBones = source.isObject3D ? source.skeleton.bones : getBones(source), bones = target.isObject3D ? target.skeleton.bones : getBones(target);
-  let bindBones, bone, name, boneTo, bonesPosition;
-  if (target.isObject3D) {
-    target.skeleton.pose();
-  } else {
-    options.useTargetMatrix = true;
-    options.preserveMatrix = false;
-  }
-  if (options.preservePosition) {
-    bonesPosition = [];
-    for (let i = 0; i < bones.length; i++) {
-      bonesPosition.push(bones[i].position.clone());
-    }
-  }
-  if (options.preserveMatrix) {
-    target.updateMatrixWorld();
-    target.matrixWorld.identity();
-    for (let i = 0; i < target.children.length; ++i) {
-      target.children[i].updateMatrixWorld(true);
-    }
-  }
-  if (options.offsets) {
-    bindBones = [];
-    for (let i = 0; i < bones.length; ++i) {
-      bone = bones[i];
-      name = options.names[bone.name] || bone.name;
-      if (options.offsets[name]) {
-        bone.matrix.multiply(options.offsets[name]);
-        bone.matrix.decompose(bone.position, bone.quaternion, bone.scale);
-        bone.updateMatrixWorld();
-      }
-      bindBones.push(bone.matrixWorld.clone());
-    }
-  }
-  for (let i = 0; i < bones.length; ++i) {
-    bone = bones[i];
-    name = options.names[bone.name] || bone.name;
-    boneTo = getBoneByName(name, sourceBones);
-    globalMatrix.copy(bone.matrixWorld);
-    if (boneTo) {
-      boneTo.updateMatrixWorld();
-      if (options.useTargetMatrix) {
-        relativeMatrix.copy(boneTo.matrixWorld);
-      } else {
-        relativeMatrix.copy(target.matrixWorld).invert();
-        relativeMatrix.multiply(boneTo.matrixWorld);
-      }
-      scale.setFromMatrixScale(relativeMatrix);
-      relativeMatrix.scale(scale.set(1 / scale.x, 1 / scale.y, 1 / scale.z));
-      globalMatrix.makeRotationFromQuaternion(quat.setFromRotationMatrix(relativeMatrix));
-      if (target.isObject3D) {
-        const boneIndex = bones.indexOf(bone), wBindMatrix = bindBones ? bindBones[boneIndex] : bindBoneMatrix.copy(target.skeleton.boneInverses[boneIndex]).invert();
-        globalMatrix.multiply(wBindMatrix);
-      }
-      globalMatrix.copyPosition(relativeMatrix);
-    }
-    if (bone.parent && bone.parent.isBone) {
-      bone.matrix.copy(bone.parent.matrixWorld).invert();
-      bone.matrix.multiply(globalMatrix);
-    } else {
-      bone.matrix.copy(globalMatrix);
-    }
-    if (options.preserveHipPosition && name === options.hip) {
-      bone.matrix.setPosition(pos.set(0, bone.position.y, 0));
-    }
-    bone.matrix.decompose(bone.position, bone.quaternion, bone.scale);
-    bone.updateMatrixWorld();
-  }
-  if (options.preservePosition) {
-    for (let i = 0; i < bones.length; ++i) {
-      bone = bones[i];
-      name = options.names[bone.name] || bone.name;
-      if (name !== options.hip) {
-        bone.position.copy(bonesPosition[i]);
-      }
-    }
-  }
-  if (options.preserveMatrix) {
-    target.updateMatrixWorld(true);
-  }
-}
-function retargetClip(target, source, clip, options = {}) {
-  options.useFirstFramePosition = options.useFirstFramePosition !== void 0 ? options.useFirstFramePosition : false;
-  options.fps = options.fps !== void 0 ? options.fps : 30;
-  options.names = options.names || [];
-  if (!source.isObject3D) {
-    source = getHelperFromSkeleton(source);
-  }
-  const numFrames = Math.round(clip.duration * (options.fps / 1e3) * 1e3), delta = 1 / options.fps, convertedTracks = [], mixer = new three_module.AnimationMixer(source), bones = getBones(target.skeleton), boneDatas = [];
-  let positionOffset, bone, boneTo, boneData, name;
-  mixer.clipAction(clip).play();
-  mixer.update(0);
-  source.updateMatrixWorld();
-  for (let i = 0; i < numFrames; ++i) {
-    const time = i * delta;
-    retarget(target, source, options);
-    for (let j = 0; j < bones.length; ++j) {
-      name = options.names[bones[j].name] || bones[j].name;
-      boneTo = getBoneByName(name, source.skeleton);
-      if (boneTo) {
-        bone = bones[j];
-        boneData = boneDatas[j] = boneDatas[j] || { bone };
-        if (options.hip === name) {
-          if (!boneData.pos) {
-            boneData.pos = {
-              times: new Float32Array(numFrames),
-              values: new Float32Array(numFrames * 3)
-            };
-          }
-          if (options.useFirstFramePosition) {
-            if (i === 0) {
-              positionOffset = bone.position.clone();
-            }
-            bone.position.sub(positionOffset);
-          }
-          boneData.pos.times[i] = time;
-          bone.position.toArray(boneData.pos.values, i * 3);
-        }
-        if (!boneData.quat) {
-          boneData.quat = {
-            times: new Float32Array(numFrames),
-            values: new Float32Array(numFrames * 4)
-          };
-        }
-        boneData.quat.times[i] = time;
-        bone.quaternion.toArray(boneData.quat.values, i * 4);
-      }
-    }
-    mixer.update(delta);
-    source.updateMatrixWorld();
-  }
-  for (let i = 0; i < boneDatas.length; ++i) {
-    boneData = boneDatas[i];
-    if (boneData) {
-      if (boneData.pos) {
-        convertedTracks.push(
-          new three_module.VectorKeyframeTrack(
-            ".bones[" + boneData.bone.name + "].position",
-            boneData.pos.times,
-            boneData.pos.values
-          )
-        );
-      }
-      convertedTracks.push(
-        new three_module.QuaternionKeyframeTrack(
-          ".bones[" + boneData.bone.name + "].quaternion",
-          boneData.quat.times,
-          boneData.quat.values
-        )
-      );
-    }
-  }
-  mixer.uncacheAction(clip);
-  return new three_module.AnimationClip(clip.name, -1, convertedTracks);
-}
-function clone(source) {
-  const sourceLookup = /* @__PURE__ */ new Map();
-  const cloneLookup = /* @__PURE__ */ new Map();
-  const clone2 = source.clone();
-  parallelTraverse(source, clone2, function(sourceNode, clonedNode) {
-    sourceLookup.set(clonedNode, sourceNode);
-    cloneLookup.set(sourceNode, clonedNode);
-  });
-  clone2.traverse(function(node) {
-    if (!node.isSkinnedMesh)
-      return;
-    const clonedMesh = node;
-    const sourceMesh = sourceLookup.get(node);
-    const sourceBones = sourceMesh.skeleton.bones;
-    clonedMesh.skeleton = sourceMesh.skeleton.clone();
-    clonedMesh.bindMatrix.copy(sourceMesh.bindMatrix);
-    clonedMesh.skeleton.bones = sourceBones.map(function(bone) {
-      return cloneLookup.get(bone);
-    });
-    clonedMesh.bind(clonedMesh.skeleton, clonedMesh.bindMatrix);
-  });
-  return clone2;
-}
-function getBoneByName(name, skeleton) {
-  for (let i = 0, bones = getBones(skeleton); i < bones.length; i++) {
-    if (name === bones[i].name)
-      return bones[i];
-  }
-}
-function getBones(skeleton) {
-  return Array.isArray(skeleton) ? skeleton : skeleton.bones;
-}
-function getHelperFromSkeleton(skeleton) {
-  const source = new three_module.SkeletonHelper(skeleton.bones[0]);
-  source.skeleton = skeleton;
-  return source;
-}
-function parallelTraverse(a, b, callback) {
-  callback(a, b);
-  for (let i = 0; i < a.children.length; i++) {
-    parallelTraverse(a.children[i], b.children[i], callback);
-  }
-}
-const SkeletonUtils = { retarget, retargetClip, clone };
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/UnpackDepthRGBAShader.js
-const UnpackDepthRGBAShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    opacity: { value: 1 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform float opacity;",
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "#include <packing>",
-    "void main() {",
-    "	float depth = 1.0 - unpackRGBAToDepth( texture2D( tDiffuse, vUv ) );",
-    "	gl_FragColor = vec4( vec3( depth ), opacity );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/utils/ShadowMapViewer.js
-
-
-class ShadowMapViewer {
-  constructor(light) {
-    const scope = this;
-    const doRenderLabel = light.name !== void 0 && light.name !== "";
-    let userAutoClearSetting;
-    const frame = {
-      x: 10,
-      y: 10,
-      width: 256,
-      height: 256
-    };
-    const camera = new three_module.OrthographicCamera(
-      window.innerWidth / -2,
-      window.innerWidth / 2,
-      window.innerHeight / 2,
-      window.innerHeight / -2,
-      1,
-      10
-    );
-    camera.position.set(0, 0, 2);
-    const scene = new three_module.Scene();
-    const shader = UnpackDepthRGBAShader;
-    const uniforms = three_module.UniformsUtils.clone(shader.uniforms);
-    const material = new three_module.ShaderMaterial({
-      uniforms,
-      vertexShader: shader.vertexShader,
-      fragmentShader: shader.fragmentShader
-    });
-    const plane = new three_module.PlaneGeometry(frame.width, frame.height);
-    const mesh = new three_module.Mesh(plane, material);
-    scene.add(mesh);
-    let labelCanvas, labelMesh;
-    if (doRenderLabel) {
-      labelCanvas = document.createElement("canvas");
-      const context = labelCanvas.getContext("2d");
-      context.font = "Bold 20px Arial";
-      const labelWidth = context.measureText(light.name).width;
-      labelCanvas.width = labelWidth;
-      labelCanvas.height = 25;
-      context.font = "Bold 20px Arial";
-      context.fillStyle = "rgba( 255, 0, 0, 1 )";
-      context.fillText(light.name, 0, 20);
-      const labelTexture = new three_module.Texture(labelCanvas);
-      labelTexture.magFilter = three_module.LinearFilter;
-      labelTexture.minFilter = three_module.LinearFilter;
-      labelTexture.needsUpdate = true;
-      const labelMaterial = new three_module.MeshBasicMaterial({ map: labelTexture, side: three_module.DoubleSide });
-      labelMaterial.transparent = true;
-      const labelPlane = new three_module.PlaneGeometry(labelCanvas.width, labelCanvas.height);
-      labelMesh = new three_module.Mesh(labelPlane, labelMaterial);
-      scene.add(labelMesh);
-    }
-    function resetPosition() {
-      scope.position.set(scope.position.x, scope.position.y);
-    }
-    this.enabled = true;
-    this.size = {
-      width: frame.width,
-      height: frame.height,
-      set: function(width, height) {
-        this.width = width;
-        this.height = height;
-        mesh.scale.set(this.width / frame.width, this.height / frame.height, 1);
-        resetPosition();
-      }
-    };
-    this.position = {
-      x: frame.x,
-      y: frame.y,
-      set: function(x, y) {
-        this.x = x;
-        this.y = y;
-        const width = scope.size.width;
-        const height = scope.size.height;
-        mesh.position.set(-window.innerWidth / 2 + width / 2 + this.x, window.innerHeight / 2 - height / 2 - this.y, 0);
-        if (doRenderLabel)
-          labelMesh.position.set(mesh.position.x, mesh.position.y - scope.size.height / 2 + labelCanvas.height / 2, 0);
-      }
-    };
-    this.render = function(renderer) {
-      if (this.enabled) {
-        uniforms.tDiffuse.value = light.shadow.map.texture;
-        userAutoClearSetting = renderer.autoClear;
-        renderer.autoClear = false;
-        renderer.clearDepth();
-        renderer.render(scene, camera);
-        renderer.autoClear = userAutoClearSetting;
-      }
-    };
-    this.updateForWindowResize = function() {
-      if (this.enabled) {
-        camera.left = window.innerWidth / -2;
-        camera.right = window.innerWidth / 2;
-        camera.top = window.innerHeight / 2;
-        camera.bottom = window.innerHeight / -2;
-        camera.updateProjectionMatrix();
-        this.update();
-      }
-    };
-    this.update = function() {
-      this.position.set(this.position.x, this.position.y);
-      this.size.set(this.size.width, this.size.height);
-    };
-    this.update();
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/utils/GeometryCompressionUtils.js
-
-var GeometryCompressionUtils = {
-  /**
-   * Make the input mesh.geometry's normal attribute encoded and compressed by 3 different methods.
-   * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the normal data.
-   *
-   * @param {THREE.Mesh} mesh
-   * @param {String} encodeMethod		"DEFAULT" || "OCT1Byte" || "OCT2Byte" || "ANGLES"
-   *
-   */
-  compressNormals: function(mesh, encodeMethod) {
-    if (!mesh.geometry) {
-      console.error("Mesh must contain geometry. ");
-    }
-    const normal = mesh.geometry.attributes.normal;
-    if (!normal) {
-      console.error("Geometry must contain normal attribute. ");
-    }
-    if (normal.isPacked)
-      return;
-    if (normal.itemSize != 3) {
-      console.error("normal.itemSize is not 3, which cannot be encoded. ");
-    }
-    const array = normal.array;
-    const count = normal.count;
-    let result;
-    if (encodeMethod == "DEFAULT") {
-      result = new Uint8Array(count * 3);
-      for (let idx = 0; idx < array.length; idx += 3) {
-        const encoded = this.EncodingFuncs.defaultEncode(array[idx], array[idx + 1], array[idx + 2], 1);
-        result[idx + 0] = encoded[0];
-        result[idx + 1] = encoded[1];
-        result[idx + 2] = encoded[2];
-      }
-      mesh.geometry.setAttribute("normal", new three_module.BufferAttribute(result, 3, true));
-      mesh.geometry.attributes.normal.bytes = result.length * 1;
-    } else if (encodeMethod == "OCT1Byte") {
-      result = new Int8Array(count * 2);
-      for (let idx = 0; idx < array.length; idx += 3) {
-        const encoded = this.EncodingFuncs.octEncodeBest(array[idx], array[idx + 1], array[idx + 2], 1);
-        result[idx / 3 * 2 + 0] = encoded[0];
-        result[idx / 3 * 2 + 1] = encoded[1];
-      }
-      mesh.geometry.setAttribute("normal", new three_module.BufferAttribute(result, 2, true));
-      mesh.geometry.attributes.normal.bytes = result.length * 1;
-    } else if (encodeMethod == "OCT2Byte") {
-      result = new Int16Array(count * 2);
-      for (let idx = 0; idx < array.length; idx += 3) {
-        const encoded = this.EncodingFuncs.octEncodeBest(array[idx], array[idx + 1], array[idx + 2], 2);
-        result[idx / 3 * 2 + 0] = encoded[0];
-        result[idx / 3 * 2 + 1] = encoded[1];
-      }
-      mesh.geometry.setAttribute("normal", new three_module.BufferAttribute(result, 2, true));
-      mesh.geometry.attributes.normal.bytes = result.length * 2;
-    } else if (encodeMethod == "ANGLES") {
-      result = new Uint16Array(count * 2);
-      for (let idx = 0; idx < array.length; idx += 3) {
-        const encoded = this.EncodingFuncs.anglesEncode(array[idx], array[idx + 1], array[idx + 2]);
-        result[idx / 3 * 2 + 0] = encoded[0];
-        result[idx / 3 * 2 + 1] = encoded[1];
-      }
-      mesh.geometry.setAttribute("normal", new three_module.BufferAttribute(result, 2, true));
-      mesh.geometry.attributes.normal.bytes = result.length * 2;
-    } else {
-      console.error("Unrecognized encoding method, should be `DEFAULT` or `ANGLES` or `OCT`. ");
-    }
-    mesh.geometry.attributes.normal.needsUpdate = true;
-    mesh.geometry.attributes.normal.isPacked = true;
-    mesh.geometry.attributes.normal.packingMethod = encodeMethod;
-    if (!(mesh.material instanceof PackedPhongMaterial)) {
-      mesh.material = new PackedPhongMaterial().copy(mesh.material);
-    }
-    if (encodeMethod == "ANGLES") {
-      mesh.material.defines.USE_PACKED_NORMAL = 0;
-    }
-    if (encodeMethod == "OCT1Byte") {
-      mesh.material.defines.USE_PACKED_NORMAL = 1;
-    }
-    if (encodeMethod == "OCT2Byte") {
-      mesh.material.defines.USE_PACKED_NORMAL = 1;
-    }
-    if (encodeMethod == "DEFAULT") {
-      mesh.material.defines.USE_PACKED_NORMAL = 2;
-    }
-  },
-  /**
-   * Make the input mesh.geometry's position attribute encoded and compressed.
-   * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the position data.
-   *
-   * @param {THREE.Mesh} mesh
-   *
-   */
-  compressPositions: function(mesh) {
-    if (!mesh.geometry) {
-      console.error("Mesh must contain geometry. ");
-    }
-    const position = mesh.geometry.attributes.position;
-    if (!position) {
-      console.error("Geometry must contain position attribute. ");
-    }
-    if (position.isPacked)
-      return;
-    if (position.itemSize != 3) {
-      console.error("position.itemSize is not 3, which cannot be packed. ");
-    }
-    const array = position.array;
-    const encodingBytes = 2;
-    const result = this.EncodingFuncs.quantizedEncode(array, encodingBytes);
-    const quantized = result.quantized;
-    const decodeMat = result.decodeMat;
-    if (mesh.geometry.boundingBox == null)
-      mesh.geometry.computeBoundingBox();
-    if (mesh.geometry.boundingSphere == null)
-      mesh.geometry.computeBoundingSphere();
-    mesh.geometry.setAttribute("position", new three_module.BufferAttribute(quantized, 3));
-    mesh.geometry.attributes.position.isPacked = true;
-    mesh.geometry.attributes.position.needsUpdate = true;
-    mesh.geometry.attributes.position.bytes = quantized.length * encodingBytes;
-    if (!(mesh.material instanceof PackedPhongMaterial)) {
-      mesh.material = new PackedPhongMaterial().copy(mesh.material);
-    }
-    mesh.material.defines.USE_PACKED_POSITION = 0;
-    mesh.material.uniforms.quantizeMatPos.value = decodeMat;
-    mesh.material.uniforms.quantizeMatPos.needsUpdate = true;
-  },
-  /**
-   * Make the input mesh.geometry's uv attribute encoded and compressed.
-   * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the uv data.
-   *
-   * @param {THREE.Mesh} mesh
-   *
-   */
-  compressUvs: function(mesh) {
-    if (!mesh.geometry) {
-      console.error("Mesh must contain geometry property. ");
-    }
-    const uvs = mesh.geometry.attributes.uv;
-    if (!uvs) {
-      console.error("Geometry must contain uv attribute. ");
-    }
-    if (uvs.isPacked)
-      return;
-    const range = { min: Infinity, max: -Infinity };
-    const array = uvs.array;
-    for (let i = 0; i < array.length; i++) {
-      range.min = Math.min(range.min, array[i]);
-      range.max = Math.max(range.max, array[i]);
-    }
-    let result;
-    if (range.min >= -1 && range.max <= 1) {
-      result = new Uint16Array(array.length);
-      for (let i = 0; i < array.length; i += 2) {
-        const encoded = this.EncodingFuncs.defaultEncode(array[i], array[i + 1], 0, 2);
-        result[i] = encoded[0];
-        result[i + 1] = encoded[1];
-      }
-      mesh.geometry.setAttribute("uv", new three_module.BufferAttribute(result, 2, true));
-      mesh.geometry.attributes.uv.isPacked = true;
-      mesh.geometry.attributes.uv.needsUpdate = true;
-      mesh.geometry.attributes.uv.bytes = result.length * 2;
-      if (!(mesh.material instanceof PackedPhongMaterial)) {
-        mesh.material = new PackedPhongMaterial().copy(mesh.material);
-      }
-      mesh.material.defines.USE_PACKED_UV = 0;
-    } else {
-      result = this.EncodingFuncs.quantizedEncodeUV(array, 2);
-      mesh.geometry.setAttribute("uv", new three_module.BufferAttribute(result.quantized, 2));
-      mesh.geometry.attributes.uv.isPacked = true;
-      mesh.geometry.attributes.uv.needsUpdate = true;
-      mesh.geometry.attributes.uv.bytes = result.quantized.length * 2;
-      if (!(mesh.material instanceof PackedPhongMaterial)) {
-        mesh.material = new PackedPhongMaterial().copy(mesh.material);
-      }
-      mesh.material.defines.USE_PACKED_UV = 1;
-      mesh.material.uniforms.quantizeMatUV.value = result.decodeMat;
-      mesh.material.uniforms.quantizeMatUV.needsUpdate = true;
-    }
-  },
-  EncodingFuncs: {
-    defaultEncode: function(x, y, z, bytes) {
-      if (bytes == 1) {
-        const tmpx = Math.round((x + 1) * 0.5 * 255);
-        const tmpy = Math.round((y + 1) * 0.5 * 255);
-        const tmpz = Math.round((z + 1) * 0.5 * 255);
-        return new Uint8Array([tmpx, tmpy, tmpz]);
-      } else if (bytes == 2) {
-        const tmpx = Math.round((x + 1) * 0.5 * 65535);
-        const tmpy = Math.round((y + 1) * 0.5 * 65535);
-        const tmpz = Math.round((z + 1) * 0.5 * 65535);
-        return new Uint16Array([tmpx, tmpy, tmpz]);
-      } else {
-        console.error("number of bytes must be 1 or 2");
-      }
-    },
-    defaultDecode: function(array, bytes) {
-      if (bytes == 1) {
-        return [array[0] / 255 * 2 - 1, array[1] / 255 * 2 - 1, array[2] / 255 * 2 - 1];
-      } else if (bytes == 2) {
-        return [array[0] / 65535 * 2 - 1, array[1] / 65535 * 2 - 1, array[2] / 65535 * 2 - 1];
-      } else {
-        console.error("number of bytes must be 1 or 2");
-      }
-    },
-    // for `Angles` encoding
-    anglesEncode: function(x, y, z) {
-      const normal0 = parseInt(0.5 * (1 + Math.atan2(y, x) / Math.PI) * 65535);
-      const normal1 = parseInt(0.5 * (1 + z) * 65535);
-      return new Uint16Array([normal0, normal1]);
-    },
-    // for `Octahedron` encoding
-    octEncodeBest: function(x, y, z, bytes) {
-      var oct, dec, best, currentCos, bestCos;
-      best = oct = octEncodeVec3(x, y, z, "floor", "floor");
-      dec = octDecodeVec2(oct);
-      bestCos = dot(x, y, z, dec);
-      oct = octEncodeVec3(x, y, z, "ceil", "floor");
-      dec = octDecodeVec2(oct);
-      currentCos = dot(x, y, z, dec);
-      if (currentCos > bestCos) {
-        best = oct;
-        bestCos = currentCos;
-      }
-      oct = octEncodeVec3(x, y, z, "floor", "ceil");
-      dec = octDecodeVec2(oct);
-      currentCos = dot(x, y, z, dec);
-      if (currentCos > bestCos) {
-        best = oct;
-        bestCos = currentCos;
-      }
-      oct = octEncodeVec3(x, y, z, "ceil", "ceil");
-      dec = octDecodeVec2(oct);
-      currentCos = dot(x, y, z, dec);
-      if (currentCos > bestCos) {
-        best = oct;
-      }
-      return best;
-      function octEncodeVec3(x0, y0, z0, xfunc, yfunc) {
-        var x2 = x0 / (Math.abs(x0) + Math.abs(y0) + Math.abs(z0));
-        var y2 = y0 / (Math.abs(x0) + Math.abs(y0) + Math.abs(z0));
-        if (z < 0) {
-          var tempx = (1 - Math.abs(y2)) * (x2 >= 0 ? 1 : -1);
-          var tempy = (1 - Math.abs(x2)) * (y2 >= 0 ? 1 : -1);
-          x2 = tempx;
-          y2 = tempy;
-          var diff = 1 - Math.abs(x2) - Math.abs(y2);
-          if (diff > 0) {
-            diff += 1e-3;
-            x2 += x2 > 0 ? diff / 2 : -diff / 2;
-            y2 += y2 > 0 ? diff / 2 : -diff / 2;
-          }
-        }
-        if (bytes == 1) {
-          return new Int8Array([Math[xfunc](x2 * 127.5 + (x2 < 0 ? 1 : 0)), Math[yfunc](y2 * 127.5 + (y2 < 0 ? 1 : 0))]);
-        }
-        if (bytes == 2) {
-          return new Int16Array([
-            Math[xfunc](x2 * 32767.5 + (x2 < 0 ? 1 : 0)),
-            Math[yfunc](y2 * 32767.5 + (y2 < 0 ? 1 : 0))
-          ]);
-        }
-      }
-      function octDecodeVec2(oct2) {
-        var x2 = oct2[0];
-        var y2 = oct2[1];
-        if (bytes == 1) {
-          x2 /= x2 < 0 ? 127 : 128;
-          y2 /= y2 < 0 ? 127 : 128;
-        } else if (bytes == 2) {
-          x2 /= x2 < 0 ? 32767 : 32768;
-          y2 /= y2 < 0 ? 32767 : 32768;
-        }
-        var z2 = 1 - Math.abs(x2) - Math.abs(y2);
-        if (z2 < 0) {
-          var tmpx = x2;
-          x2 = (1 - Math.abs(y2)) * (x2 >= 0 ? 1 : -1);
-          y2 = (1 - Math.abs(tmpx)) * (y2 >= 0 ? 1 : -1);
-        }
-        var length = Math.sqrt(x2 * x2 + y2 * y2 + z2 * z2);
-        return [x2 / length, y2 / length, z2 / length];
-      }
-      function dot(x2, y2, z2, vec3) {
-        return x2 * vec3[0] + y2 * vec3[1] + z2 * vec3[2];
-      }
-    },
-    quantizedEncode: function(array, bytes) {
-      let quantized, segments;
-      if (bytes == 1) {
-        quantized = new Uint8Array(array.length);
-        segments = 255;
-      } else if (bytes == 2) {
-        quantized = new Uint16Array(array.length);
-        segments = 65535;
-      } else {
-        console.error("number of bytes error! ");
-      }
-      const decodeMat = new three_module.Matrix4();
-      const min = new Float32Array(3);
-      const max = new Float32Array(3);
-      min[0] = min[1] = min[2] = Number.MAX_VALUE;
-      max[0] = max[1] = max[2] = -Number.MAX_VALUE;
-      for (let i = 0; i < array.length; i += 3) {
-        min[0] = Math.min(min[0], array[i + 0]);
-        min[1] = Math.min(min[1], array[i + 1]);
-        min[2] = Math.min(min[2], array[i + 2]);
-        max[0] = Math.max(max[0], array[i + 0]);
-        max[1] = Math.max(max[1], array[i + 1]);
-        max[2] = Math.max(max[2], array[i + 2]);
-      }
-      decodeMat.scale(
-        new three_module.Vector3((max[0] - min[0]) / segments, (max[1] - min[1]) / segments, (max[2] - min[2]) / segments)
-      );
-      decodeMat.elements[12] = min[0];
-      decodeMat.elements[13] = min[1];
-      decodeMat.elements[14] = min[2];
-      decodeMat.transpose();
-      const multiplier = new Float32Array([
-        max[0] !== min[0] ? segments / (max[0] - min[0]) : 0,
-        max[1] !== min[1] ? segments / (max[1] - min[1]) : 0,
-        max[2] !== min[2] ? segments / (max[2] - min[2]) : 0
-      ]);
-      for (let i = 0; i < array.length; i += 3) {
-        quantized[i + 0] = Math.floor((array[i + 0] - min[0]) * multiplier[0]);
-        quantized[i + 1] = Math.floor((array[i + 1] - min[1]) * multiplier[1]);
-        quantized[i + 2] = Math.floor((array[i + 2] - min[2]) * multiplier[2]);
-      }
-      return {
-        quantized,
-        decodeMat
-      };
-    },
-    quantizedEncodeUV: function(array, bytes) {
-      let quantized, segments;
-      if (bytes == 1) {
-        quantized = new Uint8Array(array.length);
-        segments = 255;
-      } else if (bytes == 2) {
-        quantized = new Uint16Array(array.length);
-        segments = 65535;
-      } else {
-        console.error("number of bytes error! ");
-      }
-      const decodeMat = new three_module.Matrix3();
-      const min = new Float32Array(2);
-      const max = new Float32Array(2);
-      min[0] = min[1] = Number.MAX_VALUE;
-      max[0] = max[1] = -Number.MAX_VALUE;
-      for (let i = 0; i < array.length; i += 2) {
-        min[0] = Math.min(min[0], array[i + 0]);
-        min[1] = Math.min(min[1], array[i + 1]);
-        max[0] = Math.max(max[0], array[i + 0]);
-        max[1] = Math.max(max[1], array[i + 1]);
-      }
-      decodeMat.scale((max[0] - min[0]) / segments, (max[1] - min[1]) / segments);
-      decodeMat.elements[6] = min[0];
-      decodeMat.elements[7] = min[1];
-      decodeMat.transpose();
-      const multiplier = new Float32Array([
-        max[0] !== min[0] ? segments / (max[0] - min[0]) : 0,
-        max[1] !== min[1] ? segments / (max[1] - min[1]) : 0
-      ]);
-      for (let i = 0; i < array.length; i += 2) {
-        quantized[i + 0] = Math.floor((array[i + 0] - min[0]) * multiplier[0]);
-        quantized[i + 1] = Math.floor((array[i + 1] - min[1]) * multiplier[1]);
-      }
-      return {
-        quantized,
-        decodeMat
-      };
-    }
-  }
-};
-class PackedPhongMaterial extends three_module.MeshPhongMaterial {
-  constructor(parameters) {
-    super();
-    this.defines = {};
-    this.type = "PackedPhongMaterial";
-    this.uniforms = three_module.UniformsUtils.merge([
-      three_module.ShaderLib.phong.uniforms,
-      {
-        quantizeMatPos: { value: null },
-        quantizeMatUV: { value: null }
-      }
-    ]);
-    this.vertexShader = [
-      "#define PHONG",
-      "varying vec3 vViewPosition;",
-      "#ifndef FLAT_SHADED",
-      "varying vec3 vNormal;",
-      "#endif",
-      three_module.ShaderChunk.common,
-      three_module.ShaderChunk.uv_pars_vertex,
-      three_module.ShaderChunk.uv2_pars_vertex,
-      three_module.ShaderChunk.displacementmap_pars_vertex,
-      three_module.ShaderChunk.envmap_pars_vertex,
-      three_module.ShaderChunk.color_pars_vertex,
-      three_module.ShaderChunk.fog_pars_vertex,
-      three_module.ShaderChunk.morphtarget_pars_vertex,
-      three_module.ShaderChunk.skinning_pars_vertex,
-      three_module.ShaderChunk.shadowmap_pars_vertex,
-      three_module.ShaderChunk.logdepthbuf_pars_vertex,
-      three_module.ShaderChunk.clipping_planes_pars_vertex,
-      `#ifdef USE_PACKED_NORMAL
-					#if USE_PACKED_NORMAL == 0
-						vec3 decodeNormal(vec3 packedNormal)
-						{
-							float x = packedNormal.x * 2.0 - 1.0;
-							float y = packedNormal.y * 2.0 - 1.0;
-							vec2 scth = vec2(sin(x * PI), cos(x * PI));
-							vec2 scphi = vec2(sqrt(1.0 - y * y), y);
-							return normalize( vec3(scth.y * scphi.x, scth.x * scphi.x, scphi.y) );
-						}
-					#endif
-
-					#if USE_PACKED_NORMAL == 1
-						vec3 decodeNormal(vec3 packedNormal)
-						{
-							vec3 v = vec3(packedNormal.xy, 1.0 - abs(packedNormal.x) - abs(packedNormal.y));
-							if (v.z < 0.0)
-							{
-								v.xy = (1.0 - abs(v.yx)) * vec2((v.x >= 0.0) ? +1.0 : -1.0, (v.y >= 0.0) ? +1.0 : -1.0);
-							}
-							return normalize(v);
-						}
-					#endif
-
-					#if USE_PACKED_NORMAL == 2
-						vec3 decodeNormal(vec3 packedNormal)
-						{
-							vec3 v = (packedNormal * 2.0) - 1.0;
-							return normalize(v);
-						}
-					#endif
-				#endif`,
-      `#ifdef USE_PACKED_POSITION
-					#if USE_PACKED_POSITION == 0
-						uniform mat4 quantizeMatPos;
-					#endif
-				#endif`,
-      `#ifdef USE_PACKED_UV
-					#if USE_PACKED_UV == 1
-						uniform mat3 quantizeMatUV;
-					#endif
-				#endif`,
-      `#ifdef USE_PACKED_UV
-					#if USE_PACKED_UV == 0
-						vec2 decodeUV(vec2 packedUV)
-						{
-							vec2 uv = (packedUV * 2.0) - 1.0;
-							return uv;
-						}
-					#endif
-
-					#if USE_PACKED_UV == 1
-						vec2 decodeUV(vec2 packedUV)
-						{
-							vec2 uv = ( vec3(packedUV, 1.0) * quantizeMatUV ).xy;
-							return uv;
-						}
-					#endif
-				#endif`,
-      "void main() {",
-      three_module.ShaderChunk.uv_vertex,
-      `#ifdef USE_UV
-					#ifdef USE_PACKED_UV
-						vUv = decodeUV(vUv);
-					#endif
-				#endif`,
-      three_module.ShaderChunk.uv2_vertex,
-      three_module.ShaderChunk.color_vertex,
-      three_module.ShaderChunk.beginnormal_vertex,
-      `#ifdef USE_PACKED_NORMAL
-					objectNormal = decodeNormal(objectNormal);
-				#endif
-
-				#ifdef USE_TANGENT
-					vec3 objectTangent = vec3( tangent.xyz );
-				#endif
-				`,
-      three_module.ShaderChunk.morphnormal_vertex,
-      three_module.ShaderChunk.skinbase_vertex,
-      three_module.ShaderChunk.skinnormal_vertex,
-      three_module.ShaderChunk.defaultnormal_vertex,
-      "#ifndef FLAT_SHADED",
-      "	vNormal = normalize( transformedNormal );",
-      "#endif",
-      three_module.ShaderChunk.begin_vertex,
-      `#ifdef USE_PACKED_POSITION
-					#if USE_PACKED_POSITION == 0
-						transformed = ( vec4(transformed, 1.0) * quantizeMatPos ).xyz;
-					#endif
-				#endif`,
-      three_module.ShaderChunk.morphtarget_vertex,
-      three_module.ShaderChunk.skinning_vertex,
-      three_module.ShaderChunk.displacementmap_vertex,
-      three_module.ShaderChunk.project_vertex,
-      three_module.ShaderChunk.logdepthbuf_vertex,
-      three_module.ShaderChunk.clipping_planes_vertex,
-      "vViewPosition = - mvPosition.xyz;",
-      three_module.ShaderChunk.worldpos_vertex,
-      three_module.ShaderChunk.envmap_vertex,
-      three_module.ShaderChunk.shadowmap_vertex,
-      three_module.ShaderChunk.fog_vertex,
-      "}"
-    ].join("\n");
-    this.fragmentShader = [
-      "#define PHONG",
-      "uniform vec3 diffuse;",
-      "uniform vec3 emissive;",
-      "uniform vec3 specular;",
-      "uniform float shininess;",
-      "uniform float opacity;",
-      three_module.ShaderChunk.common,
-      three_module.ShaderChunk.packing,
-      three_module.ShaderChunk.dithering_pars_fragment,
-      three_module.ShaderChunk.color_pars_fragment,
-      three_module.ShaderChunk.uv_pars_fragment,
-      three_module.ShaderChunk.uv2_pars_fragment,
-      three_module.ShaderChunk.map_pars_fragment,
-      three_module.ShaderChunk.alphamap_pars_fragment,
-      three_module.ShaderChunk.aomap_pars_fragment,
-      three_module.ShaderChunk.lightmap_pars_fragment,
-      three_module.ShaderChunk.emissivemap_pars_fragment,
-      three_module.ShaderChunk.envmap_common_pars_fragment,
-      three_module.ShaderChunk.envmap_pars_fragment,
-      three_module.ShaderChunk.cube_uv_reflection_fragment,
-      three_module.ShaderChunk.fog_pars_fragment,
-      three_module.ShaderChunk.bsdfs,
-      three_module.ShaderChunk.lights_pars_begin,
-      three_module.ShaderChunk.lights_phong_pars_fragment,
-      three_module.ShaderChunk.shadowmap_pars_fragment,
-      three_module.ShaderChunk.bumpmap_pars_fragment,
-      three_module.ShaderChunk.normalmap_pars_fragment,
-      three_module.ShaderChunk.specularmap_pars_fragment,
-      three_module.ShaderChunk.logdepthbuf_pars_fragment,
-      three_module.ShaderChunk.clipping_planes_pars_fragment,
-      "void main() {",
-      three_module.ShaderChunk.clipping_planes_fragment,
-      "vec4 diffuseColor = vec4( diffuse, opacity );",
-      "ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );",
-      "vec3 totalEmissiveRadiance = emissive;",
-      three_module.ShaderChunk.logdepthbuf_fragment,
-      three_module.ShaderChunk.map_fragment,
-      three_module.ShaderChunk.color_fragment,
-      three_module.ShaderChunk.alphamap_fragment,
-      three_module.ShaderChunk.alphatest_fragment,
-      three_module.ShaderChunk.specularmap_fragment,
-      three_module.ShaderChunk.normal_fragment_begin,
-      three_module.ShaderChunk.normal_fragment_maps,
-      three_module.ShaderChunk.emissivemap_fragment,
-      // accumulation
-      three_module.ShaderChunk.lights_phong_fragment,
-      three_module.ShaderChunk.lights_fragment_begin,
-      three_module.ShaderChunk.lights_fragment_maps,
-      three_module.ShaderChunk.lights_fragment_end,
-      // modulation
-      three_module.ShaderChunk.aomap_fragment,
-      "vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;",
-      three_module.ShaderChunk.envmap_fragment,
-      "gl_FragColor = vec4( outgoingLight, diffuseColor.a );",
-      three_module.ShaderChunk.tonemapping_fragment,
-      three_module.ShaderChunk.encodings_fragment,
-      three_module.ShaderChunk.fog_fragment,
-      three_module.ShaderChunk.premultiplied_alpha_fragment,
-      three_module.ShaderChunk.dithering_fragment,
-      "}"
-    ].join("\n");
-    this.setValues(parameters);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/BokehShader2.js
-
-const BokehShader2 = {
-  uniforms: {
-    textureWidth: { value: 1 },
-    textureHeight: { value: 1 },
-    focalDepth: { value: 1 },
-    focalLength: { value: 24 },
-    fstop: { value: 0.9 },
-    tColor: { value: null },
-    tDepth: { value: null },
-    maxblur: { value: 1 },
-    showFocus: { value: 0 },
-    manualdof: { value: 0 },
-    vignetting: { value: 0 },
-    depthblur: { value: 0 },
-    threshold: { value: 0.5 },
-    gain: { value: 2 },
-    bias: { value: 0.5 },
-    fringe: { value: 0.7 },
-    znear: { value: 0.1 },
-    zfar: { value: 100 },
-    noise: { value: 1 },
-    dithering: { value: 1e-4 },
-    pentagon: { value: 0 },
-    shaderFocus: { value: 1 },
-    focusCoords: { value: /* @__PURE__ */ new three_module.Vector2() }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "#include <common>",
-    "varying vec2 vUv;",
-    "uniform sampler2D tColor;",
-    "uniform sampler2D tDepth;",
-    "uniform float textureWidth;",
-    "uniform float textureHeight;",
-    "uniform float focalDepth;  //focal distance value in meters, but you may use autofocus option below",
-    "uniform float focalLength; //focal length in mm",
-    "uniform float fstop; //f-stop value",
-    "uniform bool showFocus; //show debug focus point and focal range (red = focal point, green = focal range)",
-    "/*",
-    "make sure that these two values are the same for your camera, otherwise distances will be wrong.",
-    "*/",
-    "uniform float znear; // camera clipping start",
-    "uniform float zfar; // camera clipping end",
-    "//------------------------------------------",
-    "//user variables",
-    "const int samples = SAMPLES; //samples on the first ring",
-    "const int rings = RINGS; //ring count",
-    "const int maxringsamples = rings * samples;",
-    "uniform bool manualdof; // manual dof calculation",
-    "float ndofstart = 1.0; // near dof blur start",
-    "float ndofdist = 2.0; // near dof blur falloff distance",
-    "float fdofstart = 1.0; // far dof blur start",
-    "float fdofdist = 3.0; // far dof blur falloff distance",
-    "float CoC = 0.03; //circle of confusion size in mm (35mm film = 0.03mm)",
-    "uniform bool vignetting; // use optical lens vignetting",
-    "float vignout = 1.3; // vignetting outer border",
-    "float vignin = 0.0; // vignetting inner border",
-    "float vignfade = 22.0; // f-stops till vignete fades",
-    "uniform bool shaderFocus;",
-    "// disable if you use external focalDepth value",
-    "uniform vec2 focusCoords;",
-    "// autofocus point on screen (0.0,0.0 - left lower corner, 1.0,1.0 - upper right)",
-    "// if center of screen use vec2(0.5, 0.5);",
-    "uniform float maxblur;",
-    "//clamp value of max blur (0.0 = no blur, 1.0 default)",
-    "uniform float threshold; // highlight threshold;",
-    "uniform float gain; // highlight gain;",
-    "uniform float bias; // bokeh edge bias",
-    "uniform float fringe; // bokeh chromatic aberration / fringing",
-    "uniform bool noise; //use noise instead of pattern for sample dithering",
-    "uniform float dithering;",
-    "uniform bool depthblur; // blur the depth buffer",
-    "float dbsize = 1.25; // depth blur size",
-    "/*",
-    "next part is experimental",
-    "not looking good with small sample and ring count",
-    "looks okay starting from samples = 4, rings = 4",
-    "*/",
-    "uniform bool pentagon; //use pentagon as bokeh shape?",
-    "float feather = 0.4; //pentagon shape feather",
-    "//------------------------------------------",
-    "float penta(vec2 coords) {",
-    "	//pentagonal shape",
-    "	float scale = float(rings) - 1.3;",
-    "	vec4  HS0 = vec4( 1.0,         0.0,         0.0,  1.0);",
-    "	vec4  HS1 = vec4( 0.309016994, 0.951056516, 0.0,  1.0);",
-    "	vec4  HS2 = vec4(-0.809016994, 0.587785252, 0.0,  1.0);",
-    "	vec4  HS3 = vec4(-0.809016994,-0.587785252, 0.0,  1.0);",
-    "	vec4  HS4 = vec4( 0.309016994,-0.951056516, 0.0,  1.0);",
-    "	vec4  HS5 = vec4( 0.0        ,0.0         , 1.0,  1.0);",
-    "	vec4  one = vec4( 1.0 );",
-    "	vec4 P = vec4((coords),vec2(scale, scale));",
-    "	vec4 dist = vec4(0.0);",
-    "	float inorout = -4.0;",
-    "	dist.x = dot( P, HS0 );",
-    "	dist.y = dot( P, HS1 );",
-    "	dist.z = dot( P, HS2 );",
-    "	dist.w = dot( P, HS3 );",
-    "	dist = smoothstep( -feather, feather, dist );",
-    "	inorout += dot( dist, one );",
-    "	dist.x = dot( P, HS4 );",
-    "	dist.y = HS5.w - abs( P.z );",
-    "	dist = smoothstep( -feather, feather, dist );",
-    "	inorout += dist.x;",
-    "	return clamp( inorout, 0.0, 1.0 );",
-    "}",
-    "float bdepth(vec2 coords) {",
-    "	// Depth buffer blur",
-    "	float d = 0.0;",
-    "	float kernel[9];",
-    "	vec2 offset[9];",
-    "	vec2 wh = vec2(1.0/textureWidth,1.0/textureHeight) * dbsize;",
-    "	offset[0] = vec2(-wh.x,-wh.y);",
-    "	offset[1] = vec2( 0.0, -wh.y);",
-    "	offset[2] = vec2( wh.x -wh.y);",
-    "	offset[3] = vec2(-wh.x,  0.0);",
-    "	offset[4] = vec2( 0.0,   0.0);",
-    "	offset[5] = vec2( wh.x,  0.0);",
-    "	offset[6] = vec2(-wh.x, wh.y);",
-    "	offset[7] = vec2( 0.0,  wh.y);",
-    "	offset[8] = vec2( wh.x, wh.y);",
-    "	kernel[0] = 1.0/16.0;   kernel[1] = 2.0/16.0;   kernel[2] = 1.0/16.0;",
-    "	kernel[3] = 2.0/16.0;   kernel[4] = 4.0/16.0;   kernel[5] = 2.0/16.0;",
-    "	kernel[6] = 1.0/16.0;   kernel[7] = 2.0/16.0;   kernel[8] = 1.0/16.0;",
-    "	for( int i=0; i<9; i++ ) {",
-    "		float tmp = texture2D(tDepth, coords + offset[i]).r;",
-    "		d += tmp * kernel[i];",
-    "	}",
-    "	return d;",
-    "}",
-    "vec3 color(vec2 coords,float blur) {",
-    "	//processing the sample",
-    "	vec3 col = vec3(0.0);",
-    "	vec2 texel = vec2(1.0/textureWidth,1.0/textureHeight);",
-    "	col.r = texture2D(tColor,coords + vec2(0.0,1.0)*texel*fringe*blur).r;",
-    "	col.g = texture2D(tColor,coords + vec2(-0.866,-0.5)*texel*fringe*blur).g;",
-    "	col.b = texture2D(tColor,coords + vec2(0.866,-0.5)*texel*fringe*blur).b;",
-    "	vec3 lumcoeff = vec3(0.299,0.587,0.114);",
-    "	float lum = dot(col.rgb, lumcoeff);",
-    "	float thresh = max((lum-threshold)*gain, 0.0);",
-    "	return col+mix(vec3(0.0),col,thresh*blur);",
-    "}",
-    "vec3 debugFocus(vec3 col, float blur, float depth) {",
-    "	float edge = 0.002*depth; //distance based edge smoothing",
-    "	float m = clamp(smoothstep(0.0,edge,blur),0.0,1.0);",
-    "	float e = clamp(smoothstep(1.0-edge,1.0,blur),0.0,1.0);",
-    "	col = mix(col,vec3(1.0,0.5,0.0),(1.0-m)*0.6);",
-    "	col = mix(col,vec3(0.0,0.5,1.0),((1.0-e)-(1.0-m))*0.2);",
-    "	return col;",
-    "}",
-    "float linearize(float depth) {",
-    "	return -zfar * znear / (depth * (zfar - znear) - zfar);",
-    "}",
-    "float vignette() {",
-    "	float dist = distance(vUv.xy, vec2(0.5,0.5));",
-    "	dist = smoothstep(vignout+(fstop/vignfade), vignin+(fstop/vignfade), dist);",
-    "	return clamp(dist,0.0,1.0);",
-    "}",
-    "float gather(float i, float j, int ringsamples, inout vec3 col, float w, float h, float blur) {",
-    "	float rings2 = float(rings);",
-    "	float step = PI*2.0 / float(ringsamples);",
-    "	float pw = cos(j*step)*i;",
-    "	float ph = sin(j*step)*i;",
-    "	float p = 1.0;",
-    "	if (pentagon) {",
-    "		p = penta(vec2(pw,ph));",
-    "	}",
-    "	col += color(vUv.xy + vec2(pw*w,ph*h), blur) * mix(1.0, i/rings2, bias) * p;",
-    "	return 1.0 * mix(1.0, i /rings2, bias) * p;",
-    "}",
-    "void main() {",
-    "	//scene depth calculation",
-    "	float depth = linearize(texture2D(tDepth,vUv.xy).x);",
-    "	// Blur depth?",
-    "	if ( depthblur ) {",
-    "		depth = linearize(bdepth(vUv.xy));",
-    "	}",
-    "	//focal plane calculation",
-    "	float fDepth = focalDepth;",
-    "	if (shaderFocus) {",
-    "		fDepth = linearize(texture2D(tDepth,focusCoords).x);",
-    "	}",
-    "	// dof blur factor calculation",
-    "	float blur = 0.0;",
-    "	if (manualdof) {",
-    "		float a = depth-fDepth; // Focal plane",
-    "		float b = (a-fdofstart)/fdofdist; // Far DoF",
-    "		float c = (-a-ndofstart)/ndofdist; // Near Dof",
-    "		blur = (a>0.0) ? b : c;",
-    "	} else {",
-    "		float f = focalLength; // focal length in mm",
-    "		float d = fDepth*1000.0; // focal plane in mm",
-    "		float o = depth*1000.0; // depth in mm",
-    "		float a = (o*f)/(o-f);",
-    "		float b = (d*f)/(d-f);",
-    "		float c = (d-f)/(d*fstop*CoC);",
-    "		blur = abs(a-b)*c;",
-    "	}",
-    "	blur = clamp(blur,0.0,1.0);",
-    "	// calculation of pattern for dithering",
-    "	vec2 noise = vec2(rand(vUv.xy), rand( vUv.xy + vec2( 0.4, 0.6 ) ) )*dithering*blur;",
-    "	// getting blur x and y step factor",
-    "	float w = (1.0/textureWidth)*blur*maxblur+noise.x;",
-    "	float h = (1.0/textureHeight)*blur*maxblur+noise.y;",
-    "	// calculation of final color",
-    "	vec3 col = vec3(0.0);",
-    "	if(blur < 0.05) {",
-    "		//some optimization thingy",
-    "		col = texture2D(tColor, vUv.xy).rgb;",
-    "	} else {",
-    "		col = texture2D(tColor, vUv.xy).rgb;",
-    "		float s = 1.0;",
-    "		int ringsamples;",
-    "		for (int i = 1; i <= rings; i++) {",
-    "			/*unboxstart*/",
-    "			ringsamples = i * samples;",
-    "			for (int j = 0 ; j < maxringsamples ; j++) {",
-    "				if (j >= ringsamples) break;",
-    "				s += gather(float(i), float(j), ringsamples, col, w, h, blur);",
-    "			}",
-    "			/*unboxend*/",
-    "		}",
-    "		col /= s; //divide by sample count",
-    "	}",
-    "	if (showFocus) {",
-    "		col = debugFocus(col, blur, depth);",
-    "	}",
-    "	if (vignetting) {",
-    "		col *= vignette();",
-    "	}",
-    "	gl_FragColor.rgb = col;",
-    "	gl_FragColor.a = 1.0;",
-    "} "
-  ].join("\n")
-};
-const BokehDepthShader = {
-  uniforms: {
-    mNear: { value: 1 },
-    mFar: { value: 1e3 }
-  },
-  vertexShader: [
-    "varying float vViewZDepth;",
-    "void main() {",
-    "	#include <begin_vertex>",
-    "	#include <project_vertex>",
-    "	vViewZDepth = - mvPosition.z;",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform float mNear;",
-    "uniform float mFar;",
-    "varying float vViewZDepth;",
-    "void main() {",
-    "	float color = 1.0 - smoothstep( mNear, mFar, vViewZDepth );",
-    "	gl_FragColor = vec4( vec3( color ), 1.0 );",
-    "} "
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/cameras/CinematicCamera.js
-
-
-class CinematicCamera extends three_module.PerspectiveCamera {
-  constructor(fov, aspect, near, far) {
-    super(fov, aspect, near, far);
-    this.type = "CinematicCamera";
-    this.postprocessing = { enabled: true };
-    this.shaderSettings = {
-      rings: 3,
-      samples: 4
-    };
-    const depthShader = BokehDepthShader;
-    this.materialDepth = new three_module.ShaderMaterial({
-      uniforms: depthShader.uniforms,
-      vertexShader: depthShader.vertexShader,
-      fragmentShader: depthShader.fragmentShader
-    });
-    this.materialDepth.uniforms["mNear"].value = near;
-    this.materialDepth.uniforms["mFar"].value = far;
-    this.setLens();
-    this.initPostProcessing();
-  }
-  // providing fnumber and coc(Circle of Confusion) as extra arguments
-  setLens(focalLength, filmGauge, fNumber, coc) {
-    if (focalLength === void 0)
-      focalLength = 35;
-    if (filmGauge !== void 0)
-      this.filmGauge = filmGauge;
-    this.setFocalLength(focalLength);
-    if (fNumber === void 0)
-      fNumber = 8;
-    if (coc === void 0)
-      coc = 0.019;
-    this.fNumber = fNumber;
-    this.coc = coc;
-    this.aperture = focalLength / this.fNumber;
-    this.hyperFocal = focalLength * focalLength / (this.aperture * this.coc);
-  }
-  linearize(depth) {
-    const zfar = this.far;
-    const znear = this.near;
-    return -zfar * znear / (depth * (zfar - znear) - zfar);
-  }
-  smoothstep(near, far, depth) {
-    const x = this.saturate((depth - near) / (far - near));
-    return x * x * (3 - 2 * x);
-  }
-  saturate(x) {
-    return Math.max(0, Math.min(1, x));
-  }
-  // function for focusing at a distance from the camera
-  focusAt(focusDistance) {
-    if (focusDistance === void 0)
-      focusDistance = 20;
-    const focalLength = this.getFocalLength();
-    this.focus = focusDistance;
-    this.nearPoint = this.hyperFocal * this.focus / (this.hyperFocal + (this.focus - focalLength));
-    this.farPoint = this.hyperFocal * this.focus / (this.hyperFocal - (this.focus - focalLength));
-    this.depthOfField = this.farPoint - this.nearPoint;
-    if (this.depthOfField < 0)
-      this.depthOfField = 0;
-    this.sdistance = this.smoothstep(this.near, this.far, this.focus);
-    this.ldistance = this.linearize(1 - this.sdistance);
-    this.postprocessing.bokeh_uniforms["focalDepth"].value = this.ldistance;
-  }
-  initPostProcessing() {
-    if (this.postprocessing.enabled) {
-      this.postprocessing.scene = new three_module.Scene();
-      this.postprocessing.camera = new three_module.OrthographicCamera(
-        window.innerWidth / -2,
-        window.innerWidth / 2,
-        window.innerHeight / 2,
-        window.innerHeight / -2,
-        -1e4,
-        1e4
-      );
-      this.postprocessing.scene.add(this.postprocessing.camera);
-      this.postprocessing.rtTextureDepth = new three_module.WebGLRenderTarget(window.innerWidth, window.innerHeight);
-      this.postprocessing.rtTextureColor = new three_module.WebGLRenderTarget(window.innerWidth, window.innerHeight);
-      const bokeh_shader = BokehShader2;
-      this.postprocessing.bokeh_uniforms = three_module.UniformsUtils.clone(bokeh_shader.uniforms);
-      this.postprocessing.bokeh_uniforms["tColor"].value = this.postprocessing.rtTextureColor.texture;
-      this.postprocessing.bokeh_uniforms["tDepth"].value = this.postprocessing.rtTextureDepth.texture;
-      this.postprocessing.bokeh_uniforms["manualdof"].value = 0;
-      this.postprocessing.bokeh_uniforms["shaderFocus"].value = 0;
-      this.postprocessing.bokeh_uniforms["fstop"].value = 2.8;
-      this.postprocessing.bokeh_uniforms["showFocus"].value = 1;
-      this.postprocessing.bokeh_uniforms["focalDepth"].value = 0.1;
-      this.postprocessing.bokeh_uniforms["znear"].value = this.near;
-      this.postprocessing.bokeh_uniforms["zfar"].value = this.near;
-      this.postprocessing.bokeh_uniforms["textureWidth"].value = window.innerWidth;
-      this.postprocessing.bokeh_uniforms["textureHeight"].value = window.innerHeight;
-      this.postprocessing.materialBokeh = new three_module.ShaderMaterial({
-        uniforms: this.postprocessing.bokeh_uniforms,
-        vertexShader: bokeh_shader.vertexShader,
-        fragmentShader: bokeh_shader.fragmentShader,
-        defines: {
-          RINGS: this.shaderSettings.rings,
-          SAMPLES: this.shaderSettings.samples,
-          DEPTH_PACKING: 1
-        }
-      });
-      this.postprocessing.quad = new three_module.Mesh(
-        new three_module.PlaneGeometry(window.innerWidth, window.innerHeight),
-        this.postprocessing.materialBokeh
-      );
-      this.postprocessing.quad.position.z = -500;
-      this.postprocessing.scene.add(this.postprocessing.quad);
-    }
-  }
-  renderCinematic(scene, renderer) {
-    if (this.postprocessing.enabled) {
-      const currentRenderTarget = renderer.getRenderTarget();
-      renderer.clear();
-      scene.overrideMaterial = null;
-      renderer.setRenderTarget(this.postprocessing.rtTextureColor);
-      renderer.clear();
-      renderer.render(scene, this);
-      scene.overrideMaterial = this.materialDepth;
-      renderer.setRenderTarget(this.postprocessing.rtTextureDepth);
-      renderer.clear();
-      renderer.render(scene, this);
-      renderer.setRenderTarget(null);
-      renderer.render(this.postprocessing.scene, this.postprocessing.camera);
-      renderer.setRenderTarget(currentRenderTarget);
-    }
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/math/MeshSurfaceSampler.js
-var MeshSurfaceSampler = __webpack_require__(96272);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/math/OBB.js
-
-const a = {
-  c: null,
-  // center
-  u: [/* @__PURE__ */ new three_module.Vector3(), /* @__PURE__ */ new three_module.Vector3(), /* @__PURE__ */ new three_module.Vector3()],
-  // basis vectors
-  e: []
-  // half width
-};
-const b = {
-  c: null,
-  // center
-  u: [/* @__PURE__ */ new three_module.Vector3(), /* @__PURE__ */ new three_module.Vector3(), /* @__PURE__ */ new three_module.Vector3()],
-  // basis vectors
-  e: []
-  // half width
-};
-const R = [[], [], []];
-const AbsR = [[], [], []];
-const t = [];
-const xAxis = /* @__PURE__ */ new three_module.Vector3();
-const yAxis = /* @__PURE__ */ new three_module.Vector3();
-const zAxis = /* @__PURE__ */ new three_module.Vector3();
-const v1 = /* @__PURE__ */ new three_module.Vector3();
-const size = /* @__PURE__ */ new three_module.Vector3();
-const closestPoint = /* @__PURE__ */ new three_module.Vector3();
-const rotationMatrix = /* @__PURE__ */ new three_module.Matrix3();
-const aabb = /* @__PURE__ */ new three_module.Box3();
-const matrix = /* @__PURE__ */ new three_module.Matrix4();
-const inverse = /* @__PURE__ */ new three_module.Matrix4();
-const localRay = /* @__PURE__ */ new three_module.Ray();
-class OBB {
-  constructor(center = new three_module.Vector3(), halfSize = new three_module.Vector3(), rotation = new three_module.Matrix3()) {
-    this.center = center;
-    this.halfSize = halfSize;
-    this.rotation = rotation;
-  }
-  set(center, halfSize, rotation) {
-    this.center = center;
-    this.halfSize = halfSize;
-    this.rotation = rotation;
-    return this;
-  }
-  copy(obb2) {
-    this.center.copy(obb2.center);
-    this.halfSize.copy(obb2.halfSize);
-    this.rotation.copy(obb2.rotation);
-    return this;
-  }
-  clone() {
-    return new this.constructor().copy(this);
-  }
-  getSize(result) {
-    return result.copy(this.halfSize).multiplyScalar(2);
-  }
-  /**
-   * Reference: Closest Point on OBB to Point in Real-Time Collision Detection
-   * by Christer Ericson (chapter 5.1.4)
-   */
-  clampPoint(point, result) {
-    const halfSize = this.halfSize;
-    v1.subVectors(point, this.center);
-    this.rotation.extractBasis(xAxis, yAxis, zAxis);
-    result.copy(this.center);
-    const x = three_module.MathUtils.clamp(v1.dot(xAxis), -halfSize.x, halfSize.x);
-    result.add(xAxis.multiplyScalar(x));
-    const y = three_module.MathUtils.clamp(v1.dot(yAxis), -halfSize.y, halfSize.y);
-    result.add(yAxis.multiplyScalar(y));
-    const z = three_module.MathUtils.clamp(v1.dot(zAxis), -halfSize.z, halfSize.z);
-    result.add(zAxis.multiplyScalar(z));
-    return result;
-  }
-  containsPoint(point) {
-    v1.subVectors(point, this.center);
-    this.rotation.extractBasis(xAxis, yAxis, zAxis);
-    return Math.abs(v1.dot(xAxis)) <= this.halfSize.x && Math.abs(v1.dot(yAxis)) <= this.halfSize.y && Math.abs(v1.dot(zAxis)) <= this.halfSize.z;
-  }
-  intersectsBox3(box3) {
-    return this.intersectsOBB(obb.fromBox3(box3));
-  }
-  intersectsSphere(sphere) {
-    this.clampPoint(sphere.center, closestPoint);
-    return closestPoint.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius;
-  }
-  /**
-   * Reference: OBB-OBB Intersection in Real-Time Collision Detection
-   * by Christer Ericson (chapter 4.4.1)
-   *
-   */
-  intersectsOBB(obb2, epsilon = Number.EPSILON) {
-    a.c = this.center;
-    a.e[0] = this.halfSize.x;
-    a.e[1] = this.halfSize.y;
-    a.e[2] = this.halfSize.z;
-    this.rotation.extractBasis(a.u[0], a.u[1], a.u[2]);
-    b.c = obb2.center;
-    b.e[0] = obb2.halfSize.x;
-    b.e[1] = obb2.halfSize.y;
-    b.e[2] = obb2.halfSize.z;
-    obb2.rotation.extractBasis(b.u[0], b.u[1], b.u[2]);
-    for (let i = 0; i < 3; i++) {
-      for (let j = 0; j < 3; j++) {
-        R[i][j] = a.u[i].dot(b.u[j]);
-      }
-    }
-    v1.subVectors(b.c, a.c);
-    t[0] = v1.dot(a.u[0]);
-    t[1] = v1.dot(a.u[1]);
-    t[2] = v1.dot(a.u[2]);
-    for (let i = 0; i < 3; i++) {
-      for (let j = 0; j < 3; j++) {
-        AbsR[i][j] = Math.abs(R[i][j]) + epsilon;
-      }
-    }
-    let ra, rb;
-    for (let i = 0; i < 3; i++) {
-      ra = a.e[i];
-      rb = b.e[0] * AbsR[i][0] + b.e[1] * AbsR[i][1] + b.e[2] * AbsR[i][2];
-      if (Math.abs(t[i]) > ra + rb)
-        return false;
-    }
-    for (let i = 0; i < 3; i++) {
-      ra = a.e[0] * AbsR[0][i] + a.e[1] * AbsR[1][i] + a.e[2] * AbsR[2][i];
-      rb = b.e[i];
-      if (Math.abs(t[0] * R[0][i] + t[1] * R[1][i] + t[2] * R[2][i]) > ra + rb)
-        return false;
-    }
-    ra = a.e[1] * AbsR[2][0] + a.e[2] * AbsR[1][0];
-    rb = b.e[1] * AbsR[0][2] + b.e[2] * AbsR[0][1];
-    if (Math.abs(t[2] * R[1][0] - t[1] * R[2][0]) > ra + rb)
-      return false;
-    ra = a.e[1] * AbsR[2][1] + a.e[2] * AbsR[1][1];
-    rb = b.e[0] * AbsR[0][2] + b.e[2] * AbsR[0][0];
-    if (Math.abs(t[2] * R[1][1] - t[1] * R[2][1]) > ra + rb)
-      return false;
-    ra = a.e[1] * AbsR[2][2] + a.e[2] * AbsR[1][2];
-    rb = b.e[0] * AbsR[0][1] + b.e[1] * AbsR[0][0];
-    if (Math.abs(t[2] * R[1][2] - t[1] * R[2][2]) > ra + rb)
-      return false;
-    ra = a.e[0] * AbsR[2][0] + a.e[2] * AbsR[0][0];
-    rb = b.e[1] * AbsR[1][2] + b.e[2] * AbsR[1][1];
-    if (Math.abs(t[0] * R[2][0] - t[2] * R[0][0]) > ra + rb)
-      return false;
-    ra = a.e[0] * AbsR[2][1] + a.e[2] * AbsR[0][1];
-    rb = b.e[0] * AbsR[1][2] + b.e[2] * AbsR[1][0];
-    if (Math.abs(t[0] * R[2][1] - t[2] * R[0][1]) > ra + rb)
-      return false;
-    ra = a.e[0] * AbsR[2][2] + a.e[2] * AbsR[0][2];
-    rb = b.e[0] * AbsR[1][1] + b.e[1] * AbsR[1][0];
-    if (Math.abs(t[0] * R[2][2] - t[2] * R[0][2]) > ra + rb)
-      return false;
-    ra = a.e[0] * AbsR[1][0] + a.e[1] * AbsR[0][0];
-    rb = b.e[1] * AbsR[2][2] + b.e[2] * AbsR[2][1];
-    if (Math.abs(t[1] * R[0][0] - t[0] * R[1][0]) > ra + rb)
-      return false;
-    ra = a.e[0] * AbsR[1][1] + a.e[1] * AbsR[0][1];
-    rb = b.e[0] * AbsR[2][2] + b.e[2] * AbsR[2][0];
-    if (Math.abs(t[1] * R[0][1] - t[0] * R[1][1]) > ra + rb)
-      return false;
-    ra = a.e[0] * AbsR[1][2] + a.e[1] * AbsR[0][2];
-    rb = b.e[0] * AbsR[2][1] + b.e[1] * AbsR[2][0];
-    if (Math.abs(t[1] * R[0][2] - t[0] * R[1][2]) > ra + rb)
-      return false;
-    return true;
-  }
-  /**
-   * Reference: Testing Box Against Plane in Real-Time Collision Detection
-   * by Christer Ericson (chapter 5.2.3)
-   */
-  intersectsPlane(plane) {
-    this.rotation.extractBasis(xAxis, yAxis, zAxis);
-    const r = this.halfSize.x * Math.abs(plane.normal.dot(xAxis)) + this.halfSize.y * Math.abs(plane.normal.dot(yAxis)) + this.halfSize.z * Math.abs(plane.normal.dot(zAxis));
-    const d = plane.normal.dot(this.center) - plane.constant;
-    return Math.abs(d) <= r;
-  }
-  /**
-   * Performs a ray/OBB intersection test and stores the intersection point
-   * to the given 3D vector. If no intersection is detected, *null* is returned.
-   */
-  intersectRay(ray, result) {
-    this.getSize(size);
-    aabb.setFromCenterAndSize(v1.set(0, 0, 0), size);
-    matrix.setFromMatrix3(this.rotation);
-    matrix.setPosition(this.center);
-    inverse.copy(matrix).invert();
-    localRay.copy(ray).applyMatrix4(inverse);
-    if (localRay.intersectBox(aabb, result)) {
-      return result.applyMatrix4(matrix);
-    } else {
-      return null;
-    }
-  }
-  /**
-   * Performs a ray/OBB intersection test. Returns either true or false if
-   * there is a intersection or not.
-   */
-  intersectsRay(ray) {
-    return this.intersectRay(ray, v1) !== null;
-  }
-  fromBox3(box3) {
-    box3.getCenter(this.center);
-    box3.getSize(this.halfSize).multiplyScalar(0.5);
-    this.rotation.identity();
-    return this;
-  }
-  equals(obb2) {
-    return obb2.center.equals(this.center) && obb2.halfSize.equals(this.halfSize) && obb2.rotation.equals(this.rotation);
-  }
-  applyMatrix4(matrix2) {
-    const e = matrix2.elements;
-    let sx = v1.set(e[0], e[1], e[2]).length();
-    const sy = v1.set(e[4], e[5], e[6]).length();
-    const sz = v1.set(e[8], e[9], e[10]).length();
-    const det = matrix2.determinant();
-    if (det < 0)
-      sx = -sx;
-    rotationMatrix.setFromMatrix4(matrix2);
-    const invSX = 1 / sx;
-    const invSY = 1 / sy;
-    const invSZ = 1 / sz;
-    rotationMatrix.elements[0] *= invSX;
-    rotationMatrix.elements[1] *= invSX;
-    rotationMatrix.elements[2] *= invSX;
-    rotationMatrix.elements[3] *= invSY;
-    rotationMatrix.elements[4] *= invSY;
-    rotationMatrix.elements[5] *= invSY;
-    rotationMatrix.elements[6] *= invSZ;
-    rotationMatrix.elements[7] *= invSZ;
-    rotationMatrix.elements[8] *= invSZ;
-    this.rotation.multiply(rotationMatrix);
-    this.halfSize.x *= sx;
-    this.halfSize.y *= sy;
-    this.halfSize.z *= sz;
-    v1.setFromMatrixPosition(matrix2);
-    this.center.add(v1);
-    return this;
-  }
-}
-const obb = /* @__PURE__ */ new OBB();
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/math/Capsule.js
-
-const Capsule_v1 = /* @__PURE__ */ new three_module.Vector3();
-const _v2 = /* @__PURE__ */ new three_module.Vector3();
-const _v3 = /* @__PURE__ */ new three_module.Vector3();
-const EPS = 1e-10;
-class Capsule {
-  constructor(start = new three_module.Vector3(0, 0, 0), end = new three_module.Vector3(0, 1, 0), radius = 1) {
-    this.start = start;
-    this.end = end;
-    this.radius = radius;
-  }
-  clone() {
-    return new Capsule(this.start.clone(), this.end.clone(), this.radius);
-  }
-  set(start, end, radius) {
-    this.start.copy(start);
-    this.end.copy(end);
-    this.radius = radius;
-  }
-  copy(capsule) {
-    this.start.copy(capsule.start);
-    this.end.copy(capsule.end);
-    this.radius = capsule.radius;
-  }
-  getCenter(target) {
-    return target.copy(this.end).add(this.start).multiplyScalar(0.5);
-  }
-  translate(v) {
-    this.start.add(v);
-    this.end.add(v);
-  }
-  checkAABBAxis(p1x, p1y, p2x, p2y, minx, maxx, miny, maxy, radius) {
-    return (minx - p1x < radius || minx - p2x < radius) && (p1x - maxx < radius || p2x - maxx < radius) && (miny - p1y < radius || miny - p2y < radius) && (p1y - maxy < radius || p2y - maxy < radius);
-  }
-  intersectsBox(box) {
-    return this.checkAABBAxis(
-      this.start.x,
-      this.start.y,
-      this.end.x,
-      this.end.y,
-      box.min.x,
-      box.max.x,
-      box.min.y,
-      box.max.y,
-      this.radius
-    ) && this.checkAABBAxis(
-      this.start.x,
-      this.start.z,
-      this.end.x,
-      this.end.z,
-      box.min.x,
-      box.max.x,
-      box.min.z,
-      box.max.z,
-      this.radius
-    ) && this.checkAABBAxis(
-      this.start.y,
-      this.start.z,
-      this.end.y,
-      this.end.z,
-      box.min.y,
-      box.max.y,
-      box.min.z,
-      box.max.z,
-      this.radius
-    );
-  }
-  lineLineMinimumPoints(line1, line2) {
-    const r = Capsule_v1.copy(line1.end).sub(line1.start);
-    const s = _v2.copy(line2.end).sub(line2.start);
-    const w = _v3.copy(line2.start).sub(line1.start);
-    const a = r.dot(s), b = r.dot(r), c = s.dot(s), d = s.dot(w), e = r.dot(w);
-    let t1, t2;
-    const divisor = b * c - a * a;
-    if (Math.abs(divisor) < EPS) {
-      const d1 = -d / c;
-      const d2 = (a - d) / c;
-      if (Math.abs(d1 - 0.5) < Math.abs(d2 - 0.5)) {
-        t1 = 0;
-        t2 = d1;
-      } else {
-        t1 = 1;
-        t2 = d2;
-      }
-    } else {
-      t1 = (d * a + e * c) / divisor;
-      t2 = (t1 * a - d) / c;
-    }
-    t2 = Math.max(0, Math.min(1, t2));
-    t1 = Math.max(0, Math.min(1, t1));
-    const point1 = r.multiplyScalar(t1).add(line1.start);
-    const point2 = s.multiplyScalar(t2).add(line2.start);
-    return [point1, point2];
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/math/ColorConverter.js
-
-const _hsl = {};
-class ColorConverter {
-  static setHSV(color, h, s, v) {
-    h = three_module.MathUtils.euclideanModulo(h, 1);
-    s = three_module.MathUtils.clamp(s, 0, 1);
-    v = three_module.MathUtils.clamp(v, 0, 1);
-    return color.setHSL(h, s * v / ((h = (2 - s) * v) < 1 ? h : 2 - h), h * 0.5);
-  }
-  static getHSV(color, target) {
-    color.getHSL(_hsl);
-    _hsl.s *= _hsl.l < 0.5 ? _hsl.l : 1 - _hsl.l;
-    target.h = _hsl.h;
-    target.s = 2 * _hsl.s / (_hsl.l + _hsl.s);
-    target.v = _hsl.l + _hsl.s;
-    return target;
-  }
-  // where c, m, y, k is between 0 and 1
-  static setCMYK(color, c, m, y, k) {
-    const r = (1 - c) * (1 - k);
-    const g = (1 - m) * (1 - k);
-    const b = (1 - y) * (1 - k);
-    return color.setRGB(r, g, b);
-  }
-  static getCMYK(color, target) {
-    const r = color.r;
-    const g = color.g;
-    const b = color.b;
-    const k = 1 - Math.max(r, g, b);
-    const c = (1 - r - k) / (1 - k);
-    const m = (1 - g - k) / (1 - k);
-    const y = (1 - b - k) / (1 - k);
-    target.c = c;
-    target.m = m;
-    target.y = y;
-    target.k = k;
-    return target;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/math/ImprovedNoise.js
-function init() {
-  const _p2 = [
-    151,
-    160,
-    137,
-    91,
-    90,
-    15,
-    131,
-    13,
-    201,
-    95,
-    96,
-    53,
-    194,
-    233,
-    7,
-    225,
-    140,
-    36,
-    103,
-    30,
-    69,
-    142,
-    8,
-    99,
-    37,
-    240,
-    21,
-    10,
-    23,
-    190,
-    6,
-    148,
-    247,
-    120,
-    234,
-    75,
-    0,
-    26,
-    197,
-    62,
-    94,
-    252,
-    219,
-    203,
-    117,
-    35,
-    11,
-    32,
-    57,
-    177,
-    33,
-    88,
-    237,
-    149,
-    56,
-    87,
-    174,
-    20,
-    125,
-    136,
-    171,
-    168,
-    68,
-    175,
-    74,
-    165,
-    71,
-    134,
-    139,
-    48,
-    27,
-    166,
-    77,
-    146,
-    158,
-    231,
-    83,
-    111,
-    229,
-    122,
-    60,
-    211,
-    133,
-    230,
-    220,
-    105,
-    92,
-    41,
-    55,
-    46,
-    245,
-    40,
-    244,
-    102,
-    143,
-    54,
-    65,
-    25,
-    63,
-    161,
-    1,
-    216,
-    80,
-    73,
-    209,
-    76,
-    132,
-    187,
-    208,
-    89,
-    18,
-    169,
-    200,
-    196,
-    135,
-    130,
-    116,
-    188,
-    159,
-    86,
-    164,
-    100,
-    109,
-    198,
-    173,
-    186,
-    3,
-    64,
-    52,
-    217,
-    226,
-    250,
-    124,
-    123,
-    5,
-    202,
-    38,
-    147,
-    118,
-    126,
-    255,
-    82,
-    85,
-    212,
-    207,
-    206,
-    59,
-    227,
-    47,
-    16,
-    58,
-    17,
-    182,
-    189,
-    28,
-    42,
-    223,
-    183,
-    170,
-    213,
-    119,
-    248,
-    152,
-    2,
-    44,
-    154,
-    163,
-    70,
-    221,
-    153,
-    101,
-    155,
-    167,
-    43,
-    172,
-    9,
-    129,
-    22,
-    39,
-    253,
-    19,
-    98,
-    108,
-    110,
-    79,
-    113,
-    224,
-    232,
-    178,
-    185,
-    112,
-    104,
-    218,
-    246,
-    97,
-    228,
-    251,
-    34,
-    242,
-    193,
-    238,
-    210,
-    144,
-    12,
-    191,
-    179,
-    162,
-    241,
-    81,
-    51,
-    145,
-    235,
-    249,
-    14,
-    239,
-    107,
-    49,
-    192,
-    214,
-    31,
-    181,
-    199,
-    106,
-    157,
-    184,
-    84,
-    204,
-    176,
-    115,
-    121,
-    50,
-    45,
-    127,
-    4,
-    150,
-    254,
-    138,
-    236,
-    205,
-    93,
-    222,
-    114,
-    67,
-    29,
-    24,
-    72,
-    243,
-    141,
-    128,
-    195,
-    78,
-    66,
-    215,
-    61,
-    156,
-    180
-  ];
-  for (let i = 0; i < 256; i++) {
-    _p2[256 + i] = _p2[i];
-  }
-  return _p2;
-}
-const _p = /* @__PURE__ */ init();
-function fade(t) {
-  return t * t * t * (t * (t * 6 - 15) + 10);
-}
-function lerp(t, a, b) {
-  return a + t * (b - a);
-}
-function grad(hash, x, y, z) {
-  const h = hash & 15;
-  const u = h < 8 ? x : y, v = h < 4 ? y : h == 12 || h == 14 ? x : z;
-  return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v);
-}
-class ImprovedNoise {
-  noise(x, y, z) {
-    const floorX = Math.floor(x), floorY = Math.floor(y), floorZ = Math.floor(z);
-    const X = floorX & 255, Y = floorY & 255, Z = floorZ & 255;
-    x -= floorX;
-    y -= floorY;
-    z -= floorZ;
-    const xMinus1 = x - 1, yMinus1 = y - 1, zMinus1 = z - 1;
-    const u = fade(x), v = fade(y), w = fade(z);
-    const A = _p[X] + Y, AA = _p[A] + Z, AB = _p[A + 1] + Z, B = _p[X + 1] + Y, BA = _p[B] + Z, BB = _p[B + 1] + Z;
-    return lerp(
-      w,
-      lerp(
-        v,
-        lerp(u, grad(_p[AA], x, y, z), grad(_p[BA], xMinus1, y, z)),
-        lerp(u, grad(_p[AB], x, yMinus1, z), grad(_p[BB], xMinus1, yMinus1, z))
-      ),
-      lerp(
-        v,
-        lerp(u, grad(_p[AA + 1], x, y, zMinus1), grad(_p[BA + 1], xMinus1, y, zMinus1)),
-        lerp(u, grad(_p[AB + 1], x, yMinus1, zMinus1), grad(_p[BB + 1], xMinus1, yMinus1, zMinus1))
-      )
-    );
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/math/Octree.js
-
-
-const Octree_v1 = /* @__PURE__ */ new three_module.Vector3();
-const Octree_v2 = /* @__PURE__ */ new three_module.Vector3();
-const Octree_plane = /* @__PURE__ */ new three_module.Plane();
-const _line1 = /* @__PURE__ */ new three_module.Line3();
-const _line2 = /* @__PURE__ */ new three_module.Line3();
-const _sphere = /* @__PURE__ */ new three_module.Sphere();
-const _capsule = /* @__PURE__ */ new Capsule();
-class Octree {
-  constructor(box) {
-    this.triangles = [];
-    this.box = box;
-    this.subTrees = [];
-  }
-  addTriangle(triangle) {
-    if (!this.bounds)
-      this.bounds = new three_module.Box3();
-    this.bounds.min.x = Math.min(this.bounds.min.x, triangle.a.x, triangle.b.x, triangle.c.x);
-    this.bounds.min.y = Math.min(this.bounds.min.y, triangle.a.y, triangle.b.y, triangle.c.y);
-    this.bounds.min.z = Math.min(this.bounds.min.z, triangle.a.z, triangle.b.z, triangle.c.z);
-    this.bounds.max.x = Math.max(this.bounds.max.x, triangle.a.x, triangle.b.x, triangle.c.x);
-    this.bounds.max.y = Math.max(this.bounds.max.y, triangle.a.y, triangle.b.y, triangle.c.y);
-    this.bounds.max.z = Math.max(this.bounds.max.z, triangle.a.z, triangle.b.z, triangle.c.z);
-    this.triangles.push(triangle);
-    return this;
-  }
-  calcBox() {
-    this.box = this.bounds.clone();
-    this.box.min.x -= 0.01;
-    this.box.min.y -= 0.01;
-    this.box.min.z -= 0.01;
-    return this;
-  }
-  split(level) {
-    if (!this.box)
-      return;
-    const subTrees = [];
-    const halfsize = Octree_v2.copy(this.box.max).sub(this.box.min).multiplyScalar(0.5);
-    for (let x = 0; x < 2; x++) {
-      for (let y = 0; y < 2; y++) {
-        for (let z = 0; z < 2; z++) {
-          const box = new three_module.Box3();
-          const v = Octree_v1.set(x, y, z);
-          box.min.copy(this.box.min).add(v.multiply(halfsize));
-          box.max.copy(box.min).add(halfsize);
-          subTrees.push(new Octree(box));
-        }
-      }
-    }
-    let triangle;
-    while (triangle = this.triangles.pop()) {
-      for (let i = 0; i < subTrees.length; i++) {
-        if (subTrees[i].box.intersectsTriangle(triangle)) {
-          subTrees[i].triangles.push(triangle);
-        }
-      }
-    }
-    for (let i = 0; i < subTrees.length; i++) {
-      const len = subTrees[i].triangles.length;
-      if (len > 8 && level < 16) {
-        subTrees[i].split(level + 1);
-      }
-      if (len !== 0) {
-        this.subTrees.push(subTrees[i]);
-      }
-    }
-    return this;
-  }
-  build() {
-    this.calcBox();
-    this.split(0);
-    return this;
-  }
-  getRayTriangles(ray, triangles) {
-    for (let i = 0; i < this.subTrees.length; i++) {
-      const subTree = this.subTrees[i];
-      if (!ray.intersectsBox(subTree.box))
-        continue;
-      if (subTree.triangles.length > 0) {
-        for (let j = 0; j < subTree.triangles.length; j++) {
-          if (triangles.indexOf(subTree.triangles[j]) === -1)
-            triangles.push(subTree.triangles[j]);
-        }
-      } else {
-        subTree.getRayTriangles(ray, triangles);
-      }
-    }
-    return triangles;
-  }
-  triangleCapsuleIntersect(capsule, triangle) {
-    triangle.getPlane(Octree_plane);
-    const d1 = Octree_plane.distanceToPoint(capsule.start) - capsule.radius;
-    const d2 = Octree_plane.distanceToPoint(capsule.end) - capsule.radius;
-    if (d1 > 0 && d2 > 0 || d1 < -capsule.radius && d2 < -capsule.radius) {
-      return false;
-    }
-    const delta = Math.abs(d1 / (Math.abs(d1) + Math.abs(d2)));
-    const intersectPoint = Octree_v1.copy(capsule.start).lerp(capsule.end, delta);
-    if (triangle.containsPoint(intersectPoint)) {
-      return { normal: Octree_plane.normal.clone(), point: intersectPoint.clone(), depth: Math.abs(Math.min(d1, d2)) };
-    }
-    const r2 = capsule.radius * capsule.radius;
-    const line1 = _line1.set(capsule.start, capsule.end);
-    const lines = [
-      [triangle.a, triangle.b],
-      [triangle.b, triangle.c],
-      [triangle.c, triangle.a]
-    ];
-    for (let i = 0; i < lines.length; i++) {
-      const line2 = _line2.set(lines[i][0], lines[i][1]);
-      const [point1, point2] = capsule.lineLineMinimumPoints(line1, line2);
-      if (point1.distanceToSquared(point2) < r2) {
-        return {
-          normal: point1.clone().sub(point2).normalize(),
-          point: point2.clone(),
-          depth: capsule.radius - point1.distanceTo(point2)
-        };
-      }
-    }
-    return false;
-  }
-  triangleSphereIntersect(sphere, triangle) {
-    triangle.getPlane(Octree_plane);
-    if (!sphere.intersectsPlane(Octree_plane))
-      return false;
-    const depth = Math.abs(Octree_plane.distanceToSphere(sphere));
-    const r2 = sphere.radius * sphere.radius - depth * depth;
-    const plainPoint = Octree_plane.projectPoint(sphere.center, Octree_v1);
-    if (triangle.containsPoint(sphere.center)) {
-      return {
-        normal: Octree_plane.normal.clone(),
-        point: plainPoint.clone(),
-        depth: Math.abs(Octree_plane.distanceToSphere(sphere))
-      };
-    }
-    const lines = [
-      [triangle.a, triangle.b],
-      [triangle.b, triangle.c],
-      [triangle.c, triangle.a]
-    ];
-    for (let i = 0; i < lines.length; i++) {
-      _line1.set(lines[i][0], lines[i][1]);
-      _line1.closestPointToPoint(plainPoint, true, Octree_v2);
-      const d = Octree_v2.distanceToSquared(sphere.center);
-      if (d < r2) {
-        return {
-          normal: sphere.center.clone().sub(Octree_v2).normalize(),
-          point: Octree_v2.clone(),
-          depth: sphere.radius - Math.sqrt(d)
-        };
-      }
-    }
-    return false;
-  }
-  getSphereTriangles(sphere, triangles) {
-    for (let i = 0; i < this.subTrees.length; i++) {
-      const subTree = this.subTrees[i];
-      if (!sphere.intersectsBox(subTree.box))
-        continue;
-      if (subTree.triangles.length > 0) {
-        for (let j = 0; j < subTree.triangles.length; j++) {
-          if (triangles.indexOf(subTree.triangles[j]) === -1)
-            triangles.push(subTree.triangles[j]);
-        }
-      } else {
-        subTree.getSphereTriangles(sphere, triangles);
-      }
-    }
-  }
-  getCapsuleTriangles(capsule, triangles) {
-    for (let i = 0; i < this.subTrees.length; i++) {
-      const subTree = this.subTrees[i];
-      if (!capsule.intersectsBox(subTree.box))
-        continue;
-      if (subTree.triangles.length > 0) {
-        for (let j = 0; j < subTree.triangles.length; j++) {
-          if (triangles.indexOf(subTree.triangles[j]) === -1)
-            triangles.push(subTree.triangles[j]);
-        }
-      } else {
-        subTree.getCapsuleTriangles(capsule, triangles);
-      }
-    }
-  }
-  sphereIntersect(sphere) {
-    _sphere.copy(sphere);
-    const triangles = [];
-    let result, hit = false;
-    this.getSphereTriangles(sphere, triangles);
-    for (let i = 0; i < triangles.length; i++) {
-      if (result = this.triangleSphereIntersect(_sphere, triangles[i])) {
-        hit = true;
-        _sphere.center.add(result.normal.multiplyScalar(result.depth));
-      }
-    }
-    if (hit) {
-      const collisionVector = _sphere.center.clone().sub(sphere.center);
-      const depth = collisionVector.length();
-      return { normal: collisionVector.normalize(), depth };
-    }
-    return false;
-  }
-  capsuleIntersect(capsule) {
-    _capsule.copy(capsule);
-    const triangles = [];
-    let result, hit = false;
-    this.getCapsuleTriangles(_capsule, triangles);
-    for (let i = 0; i < triangles.length; i++) {
-      if (result = this.triangleCapsuleIntersect(_capsule, triangles[i])) {
-        hit = true;
-        _capsule.translate(result.normal.multiplyScalar(result.depth));
-      }
-    }
-    if (hit) {
-      const collisionVector = _capsule.getCenter(new three_module.Vector3()).sub(capsule.getCenter(Octree_v1));
-      const depth = collisionVector.length();
-      return { normal: collisionVector.normalize(), depth };
-    }
-    return false;
-  }
-  rayIntersect(ray) {
-    if (ray.direction.length() === 0)
-      return;
-    const triangles = [];
-    let triangle, position, distance = 1e100;
-    this.getRayTriangles(ray, triangles);
-    for (let i = 0; i < triangles.length; i++) {
-      const result = ray.intersectTriangle(triangles[i].a, triangles[i].b, triangles[i].c, true, Octree_v1);
-      if (result) {
-        const newdistance = result.sub(ray.origin).length();
-        if (distance > newdistance) {
-          position = result.clone().add(ray.origin);
-          distance = newdistance;
-          triangle = triangles[i];
-        }
-      }
-    }
-    return distance < 1e100 ? { distance, triangle, position } : false;
-  }
-  fromGraphNode(group) {
-    group.updateWorldMatrix(true, true);
-    group.traverse((obj) => {
-      if (obj.isMesh === true) {
-        let geometry, isTemp = false;
-        if (obj.geometry.index !== null) {
-          isTemp = true;
-          geometry = obj.geometry.toNonIndexed();
-        } else {
-          geometry = obj.geometry;
-        }
-        const positionAttribute = geometry.getAttribute("position");
-        for (let i = 0; i < positionAttribute.count; i += 3) {
-          const v1 = new three_module.Vector3().fromBufferAttribute(positionAttribute, i);
-          const v2 = new three_module.Vector3().fromBufferAttribute(positionAttribute, i + 1);
-          const v3 = new three_module.Vector3().fromBufferAttribute(positionAttribute, i + 2);
-          v1.applyMatrix4(obj.matrixWorld);
-          v2.applyMatrix4(obj.matrixWorld);
-          v3.applyMatrix4(obj.matrixWorld);
-          this.addTriangle(new three_module.Triangle(v1, v2, v3));
-        }
-        if (isTemp) {
-          geometry.dispose();
-        }
-      }
-    });
-    this.build();
-    return this;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/math/Lut.js
-
-class Lut {
-  constructor(colormap, count = 32) {
-    this.isLut = true;
-    this.lut = [];
-    this.map = [];
-    this.n = 0;
-    this.minV = 0;
-    this.maxV = 1;
-    this.setColorMap(colormap, count);
-  }
-  set(value) {
-    if (value.isLut === true) {
-      this.copy(value);
-    }
-    return this;
-  }
-  setMin(min) {
-    this.minV = min;
-    return this;
-  }
-  setMax(max) {
-    this.maxV = max;
-    return this;
-  }
-  setColorMap(colormap, count = 32) {
-    this.map = ColorMapKeywords[colormap] || ColorMapKeywords.rainbow;
-    this.n = count;
-    const step = 1 / this.n;
-    const minColor = new three_module.Color();
-    const maxColor = new three_module.Color();
-    this.lut.length = 0;
-    this.lut.push(new three_module.Color(this.map[0][1]));
-    for (let i = 1; i < count; i++) {
-      const alpha = i * step;
-      for (let j = 0; j < this.map.length - 1; j++) {
-        if (alpha > this.map[j][0] && alpha <= this.map[j + 1][0]) {
-          const min = this.map[j][0];
-          const max = this.map[j + 1][0];
-          minColor.setHex(this.map[j][1], "linear-srgb");
-          maxColor.setHex(this.map[j + 1][1], "linear-srgb");
-          const color = new three_module.Color().lerpColors(minColor, maxColor, (alpha - min) / (max - min));
-          this.lut.push(color);
-        }
-      }
-    }
-    this.lut.push(new three_module.Color(this.map[this.map.length - 1][1]));
-    return this;
-  }
-  copy(lut) {
-    this.lut = lut.lut;
-    this.map = lut.map;
-    this.n = lut.n;
-    this.minV = lut.minV;
-    this.maxV = lut.maxV;
-    return this;
-  }
-  getColor(alpha) {
-    alpha = three_module.MathUtils.clamp(alpha, this.minV, this.maxV);
-    alpha = (alpha - this.minV) / (this.maxV - this.minV);
-    const colorPosition = Math.round(alpha * this.n);
-    return this.lut[colorPosition];
-  }
-  addColorMap(name, arrayOfColors) {
-    ColorMapKeywords[name] = arrayOfColors;
-    return this;
-  }
-  createCanvas() {
-    const canvas = document.createElement("canvas");
-    canvas.width = 1;
-    canvas.height = this.n;
-    this.updateCanvas(canvas);
-    return canvas;
-  }
-  updateCanvas(canvas) {
-    const ctx = canvas.getContext("2d", { alpha: false });
-    const imageData = ctx.getImageData(0, 0, 1, this.n);
-    const data = imageData.data;
-    let k = 0;
-    const step = 1 / this.n;
-    const minColor = new three_module.Color();
-    const maxColor = new three_module.Color();
-    const finalColor = new three_module.Color();
-    for (let i = 1; i >= 0; i -= step) {
-      for (let j = this.map.length - 1; j >= 0; j--) {
-        if (i < this.map[j][0] && i >= this.map[j - 1][0]) {
-          const min = this.map[j - 1][0];
-          const max = this.map[j][0];
-          minColor.setHex(this.map[j - 1][1], "linear-srgb");
-          maxColor.setHex(this.map[j][1], "linear-srgb");
-          finalColor.lerpColors(minColor, maxColor, (i - min) / (max - min));
-          data[k * 4] = Math.round(finalColor.r * 255);
-          data[k * 4 + 1] = Math.round(finalColor.g * 255);
-          data[k * 4 + 2] = Math.round(finalColor.b * 255);
-          data[k * 4 + 3] = 255;
-          k += 1;
-        }
-      }
-    }
-    ctx.putImageData(imageData, 0, 0);
-    return canvas;
-  }
-}
-const ColorMapKeywords = {
-  rainbow: [
-    [0, 255],
-    [0.2, 65535],
-    [0.5, 65280],
-    [0.8, 16776960],
-    [1, 16711680]
-  ],
-  cooltowarm: [
-    [0, 3952322],
-    [0.2, 10206463],
-    [0.5, 14474460],
-    [0.8, 16163717],
-    [1, 11797542]
-  ],
-  blackbody: [
-    [0, 0],
-    [0.2, 7864320],
-    [0.5, 15086080],
-    [0.8, 16776960],
-    [1, 16777215]
-  ],
-  grayscale: [
-    [0, 0],
-    [0.2, 4210752],
-    [0.5, 8355712],
-    [0.8, 12566463],
-    [1, 16777215]
-  ]
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/controls/experimental/CameraControls.js
-var CameraControls_defProp = Object.defineProperty;
-var CameraControls_defNormalProp = (obj, key, value) => key in obj ? CameraControls_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var CameraControls_publicField = (obj, key, value) => {
-  CameraControls_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-var STATE = /* @__PURE__ */ ((STATE2) => {
-  STATE2[STATE2["NONE"] = -1] = "NONE";
-  STATE2[STATE2["ROTATE"] = 0] = "ROTATE";
-  STATE2[STATE2["DOLLY"] = 1] = "DOLLY";
-  STATE2[STATE2["PAN"] = 2] = "PAN";
-  STATE2[STATE2["TOUCH_ROTATE"] = 3] = "TOUCH_ROTATE";
-  STATE2[STATE2["TOUCH_PAN"] = 4] = "TOUCH_PAN";
-  STATE2[STATE2["TOUCH_DOLLY_PAN"] = 5] = "TOUCH_DOLLY_PAN";
-  STATE2[STATE2["TOUCH_DOLLY_ROTATE"] = 6] = "TOUCH_DOLLY_ROTATE";
-  return STATE2;
-})(STATE || {});
-class CameraControls extends three_module.EventDispatcher {
-  constructor(object, domElement) {
-    super();
-    CameraControls_publicField(this, "object");
-    CameraControls_publicField(this, "domElement");
-    /** Set to false to disable this control */
-    CameraControls_publicField(this, "enabled", true);
-    /** "target" sets the location of focus, where the object orbits around */
-    CameraControls_publicField(this, "target", new three_module.Vector3());
-    /** Set to true to enable trackball behavior */
-    CameraControls_publicField(this, "trackball", false);
-    /** How far you can dolly in ( PerspectiveCamera only ) */
-    CameraControls_publicField(this, "minDistance", 0);
-    /** How far you can dolly out ( PerspectiveCamera only ) */
-    CameraControls_publicField(this, "maxDistance", Infinity);
-    // How far you can zoom in and out ( OrthographicCamera only )
-    CameraControls_publicField(this, "minZoom", 0);
-    CameraControls_publicField(this, "maxZoom", Infinity);
-    // How far you can orbit vertically, upper and lower limits.
-    // Range is 0 to Math.PI radians.
-    CameraControls_publicField(this, "minPolarAngle", 0);
-    CameraControls_publicField(this, "maxPolarAngle", Math.PI);
-    // How far you can orbit horizontally, upper and lower limits.
-    // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].
-    CameraControls_publicField(this, "minAzimuthAngle", -Infinity);
-    // radians
-    CameraControls_publicField(this, "maxAzimuthAngle", Infinity);
-    // radians
-    // Set to true to enable damping (inertia)
-    // If damping is enabled, you must call controls.update() in your animation loop
-    CameraControls_publicField(this, "enableDamping", false);
-    CameraControls_publicField(this, "dampingFactor", 0.05);
-    /**
-     * This option enables dollying in and out; property named as "zoom" for backwards compatibility
-     * Set to false to disable zooming
-     */
-    CameraControls_publicField(this, "enableZoom", true);
-    CameraControls_publicField(this, "zoomSpeed", 1);
-    /** Set to false to disable rotating */
-    CameraControls_publicField(this, "enableRotate", true);
-    CameraControls_publicField(this, "rotateSpeed", 1);
-    /** Set to false to disable panning */
-    CameraControls_publicField(this, "enablePan", true);
-    CameraControls_publicField(this, "panSpeed", 1);
-    /** if true, pan in screen-space */
-    CameraControls_publicField(this, "screenSpacePanning", false);
-    /** pixels moved per arrow key push */
-    CameraControls_publicField(this, "keyPanSpeed", 7);
-    /**
-     * Set to true to automatically rotate around the target
-     * If auto-rotate is enabled, you must call controls.update() in your animation loop
-     * auto-rotate is not supported for trackball behavior
-     */
-    CameraControls_publicField(this, "autoRotate", false);
-    CameraControls_publicField(this, "autoRotateSpeed", 2);
-    // 30 seconds per round when fps is 60
-    /** Set to false to disable use of the keys */
-    CameraControls_publicField(this, "enableKeys", true);
-    /** The four arrow keys */
-    CameraControls_publicField(this, "keys", { LEFT: "ArrowLeft", UP: "ArrowUp", RIGHT: "ArrowRight", BOTTOM: "ArrowDown" });
-    CameraControls_publicField(this, "mouseButtons");
-    /** Touch fingers */
-    CameraControls_publicField(this, "touches", { ONE: three_module.TOUCH.ROTATE, TWO: three_module.TOUCH.DOLLY_PAN });
-    // for reset
-    CameraControls_publicField(this, "target0");
-    CameraControls_publicField(this, "position0");
-    CameraControls_publicField(this, "quaternion0");
-    CameraControls_publicField(this, "zoom0");
-    // current position in spherical coordinates
-    CameraControls_publicField(this, "spherical", new three_module.Spherical());
-    CameraControls_publicField(this, "sphericalDelta", new three_module.Spherical());
-    CameraControls_publicField(this, "changeEvent", { type: "change" });
-    CameraControls_publicField(this, "startEvent", { type: "start" });
-    CameraControls_publicField(this, "endEvent", { type: "end" });
-    CameraControls_publicField(this, "state", -1);
-    CameraControls_publicField(this, "EPS", 1e-6);
-    CameraControls_publicField(this, "scale", 1);
-    CameraControls_publicField(this, "panOffset", new three_module.Vector3());
-    CameraControls_publicField(this, "zoomChanged", false);
-    CameraControls_publicField(this, "rotateStart", new three_module.Vector2());
-    CameraControls_publicField(this, "rotateEnd", new three_module.Vector2());
-    CameraControls_publicField(this, "rotateDelta", new three_module.Vector2());
-    CameraControls_publicField(this, "panStart", new three_module.Vector2());
-    CameraControls_publicField(this, "panEnd", new three_module.Vector2());
-    CameraControls_publicField(this, "panDelta", new three_module.Vector2());
-    CameraControls_publicField(this, "dollyStart", new three_module.Vector2());
-    CameraControls_publicField(this, "dollyEnd", new three_module.Vector2());
-    CameraControls_publicField(this, "dollyDelta", new three_module.Vector2());
-    CameraControls_publicField(this, "offset", new three_module.Vector3());
-    CameraControls_publicField(this, "lastPosition", new three_module.Vector3());
-    CameraControls_publicField(this, "lastQuaternion", new three_module.Quaternion());
-    CameraControls_publicField(this, "q", new three_module.Quaternion());
-    CameraControls_publicField(this, "v", new three_module.Vector3());
-    CameraControls_publicField(this, "vec", new three_module.Vector3());
-    CameraControls_publicField(this, "quat");
-    CameraControls_publicField(this, "quatInverse");
-    CameraControls_publicField(this, "getPolarAngle", () => this.spherical.phi);
-    CameraControls_publicField(this, "getAzimuthalAngle", () => this.spherical.theta);
-    CameraControls_publicField(this, "saveState", () => {
-      this.target0.copy(this.target);
-      this.position0.copy(this.object.position);
-      this.quaternion0.copy(this.object.quaternion);
-      this.zoom0 = this.object.zoom;
-    });
-    CameraControls_publicField(this, "reset", () => {
-      this.target.copy(this.target0);
-      this.object.position.copy(this.position0);
-      this.object.quaternion.copy(this.quaternion0);
-      this.object.zoom = this.zoom0;
-      this.object.updateProjectionMatrix();
-      this.dispatchEvent(this.changeEvent);
-      this.update();
-      this.state = -1;
-    });
-    CameraControls_publicField(this, "dispose", () => {
-      this.domElement.removeEventListener("contextmenu", this.onContextMenu, false);
-      this.domElement.removeEventListener("mousedown", this.onMouseDown, false);
-      this.domElement.removeEventListener("wheel", this.onMouseWheel, false);
-      this.domElement.removeEventListener("touchstart", this.onTouchStart, false);
-      this.domElement.removeEventListener("touchend", this.onTouchEnd, false);
-      this.domElement.removeEventListener("touchmove", this.onTouchMove, false);
-      document.removeEventListener("mousemove", this.onMouseMove, false);
-      document.removeEventListener("mouseup", this.onMouseUp, false);
-      this.domElement.removeEventListener("keydown", this.onKeyDown, false);
-    });
-    CameraControls_publicField(this, "update", () => {
-      const position = this.object.position;
-      this.offset.copy(position).sub(this.target);
-      if (this.trackball) {
-        if (this.sphericalDelta.theta) {
-          this.vec.set(0, 1, 0).applyQuaternion(this.object.quaternion);
-          const factor = this.enableDamping ? this.dampingFactor : 1;
-          this.q.setFromAxisAngle(this.vec, this.sphericalDelta.theta * factor);
-          this.object.quaternion.premultiply(this.q);
-          this.offset.applyQuaternion(this.q);
-        }
-        if (this.sphericalDelta.phi) {
-          this.vec.set(1, 0, 0).applyQuaternion(this.object.quaternion);
-          const factor = this.enableDamping ? this.dampingFactor : 1;
-          this.q.setFromAxisAngle(this.vec, this.sphericalDelta.phi * factor);
-          this.object.quaternion.premultiply(this.q);
-          this.offset.applyQuaternion(this.q);
-        }
-        this.offset.multiplyScalar(this.scale);
-        this.offset.clampLength(this.minDistance, this.maxDistance);
-      } else {
-        this.offset.applyQuaternion(this.quat);
-        if (this.autoRotate && this.state === -1) {
-          this.rotateLeft(this.getAutoRotationAngle());
-        }
-        this.spherical.setFromVector3(this.offset);
-        if (this.enableDamping) {
-          this.spherical.theta += this.sphericalDelta.theta * this.dampingFactor;
-          this.spherical.phi += this.sphericalDelta.phi * this.dampingFactor;
-        } else {
-          this.spherical.theta += this.sphericalDelta.theta;
-          this.spherical.phi += this.sphericalDelta.phi;
-        }
-        this.spherical.theta = Math.max(this.minAzimuthAngle, Math.min(this.maxAzimuthAngle, this.spherical.theta));
-        this.spherical.phi = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, this.spherical.phi));
-        this.spherical.makeSafe();
-        this.spherical.radius *= this.scale;
-        this.spherical.radius = Math.max(this.minDistance, Math.min(this.maxDistance, this.spherical.radius));
-        this.offset.setFromSpherical(this.spherical);
-        this.offset.applyQuaternion(this.quatInverse);
-      }
-      if (this.enableDamping === true) {
-        this.target.addScaledVector(this.panOffset, this.dampingFactor);
-      } else {
-        this.target.add(this.panOffset);
-      }
-      position.copy(this.target).add(this.offset);
-      if (this.trackball === false) {
-        this.object.lookAt(this.target);
-      }
-      if (this.enableDamping === true) {
-        this.sphericalDelta.theta *= 1 - this.dampingFactor;
-        this.sphericalDelta.phi *= 1 - this.dampingFactor;
-        this.panOffset.multiplyScalar(1 - this.dampingFactor);
-      } else {
-        this.sphericalDelta.set(0, 0, 0);
-        this.panOffset.set(0, 0, 0);
-      }
-      this.scale = 1;
-      if (this.zoomChanged || this.lastPosition.distanceToSquared(this.object.position) > this.EPS || 8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS) {
-        this.dispatchEvent(this.changeEvent);
-        this.lastPosition.copy(this.object.position);
-        this.lastQuaternion.copy(this.object.quaternion);
-        this.zoomChanged = false;
-        return true;
-      }
-      return false;
-    });
-    CameraControls_publicField(this, "getAutoRotationAngle", () => 2 * Math.PI / 60 / 60 * this.autoRotateSpeed);
-    CameraControls_publicField(this, "getZoomScale", () => Math.pow(0.95, this.zoomSpeed));
-    CameraControls_publicField(this, "rotateLeft", (angle) => {
-      this.sphericalDelta.theta -= angle;
-    });
-    CameraControls_publicField(this, "rotateUp", (angle) => {
-      this.sphericalDelta.phi -= angle;
-    });
-    CameraControls_publicField(this, "panLeft", (distance, objectMatrix) => {
-      this.v.setFromMatrixColumn(objectMatrix, 0);
-      this.v.multiplyScalar(-distance);
-      this.panOffset.add(this.v);
-    });
-    CameraControls_publicField(this, "panUp", (distance, objectMatrix) => {
-      if (this.screenSpacePanning === true) {
-        this.v.setFromMatrixColumn(objectMatrix, 1);
-      } else {
-        this.v.setFromMatrixColumn(objectMatrix, 0);
-        this.v.crossVectors(this.object.up, this.v);
-      }
-      this.v.multiplyScalar(distance);
-      this.panOffset.add(this.v);
-    });
-    // deltaX and deltaY are in pixels; right and down are positive
-    CameraControls_publicField(this, "pan", (deltaX, deltaY) => {
-      const element = this.domElement;
-      if (this.object instanceof three_module.PerspectiveCamera) {
-        const position = this.object.position;
-        this.offset.copy(position).sub(this.target);
-        let targetDistance = this.offset.length();
-        targetDistance *= Math.tan(this.object.fov / 2 * Math.PI / 180);
-        this.panLeft(2 * deltaX * targetDistance / element.clientHeight, this.object.matrix);
-        this.panUp(2 * deltaY * targetDistance / element.clientHeight, this.object.matrix);
-      } else if (this.object.isOrthographicCamera) {
-        this.panLeft(
-          deltaX * (this.object.right - this.object.left) / this.object.zoom / element.clientWidth,
-          this.object.matrix
-        );
-        this.panUp(
-          deltaY * (this.object.top - this.object.bottom) / this.object.zoom / element.clientHeight,
-          this.object.matrix
-        );
-      } else {
-        console.warn("WARNING: CameraControls.js encountered an unknown camera type - pan disabled.");
-        this.enablePan = false;
-      }
-    });
-    CameraControls_publicField(this, "dollyIn", (dollyScale) => {
-      if (this.object instanceof three_module.PerspectiveCamera) {
-        this.scale /= dollyScale;
-      } else if (this.object instanceof three_module.OrthographicCamera) {
-        this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom * dollyScale));
-        this.object.updateProjectionMatrix();
-        this.zoomChanged = true;
-      } else {
-        console.warn("WARNING: CameraControls.js encountered an unknown camera type - dolly/zoom disabled.");
-        this.enableZoom = false;
-      }
-    });
-    CameraControls_publicField(this, "dollyOut", (dollyScale) => {
-      if (this.object instanceof three_module.PerspectiveCamera) {
-        this.scale *= dollyScale;
-      } else if (this.object instanceof three_module.OrthographicCamera) {
-        this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / dollyScale));
-        this.object.updateProjectionMatrix();
-        this.zoomChanged = true;
-      } else {
-        console.warn("WARNING: CameraControls.js encountered an unknown camera type - dolly/zoom disabled.");
-        this.enableZoom = false;
-      }
-    });
-    // event callbacks - update the object state
-    CameraControls_publicField(this, "handleMouseDownRotate", (event) => {
-      this.rotateStart.set(event.clientX, event.clientY);
-    });
-    // TODO: confirm if worthwhile to return the Vector2 instead of void
-    CameraControls_publicField(this, "handleMouseDownDolly", (event) => {
-      this.dollyStart.set(event.clientX, event.clientY);
-    });
-    CameraControls_publicField(this, "handleMouseDownPan", (event) => {
-      this.panStart.set(event.clientX, event.clientY);
-    });
-    CameraControls_publicField(this, "handleMouseMoveRotate", (event) => {
-      this.rotateEnd.set(event.clientX, event.clientY);
-      this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart).multiplyScalar(this.rotateSpeed);
-      const element = this.domElement;
-      this.rotateLeft(2 * Math.PI * this.rotateDelta.x / element.clientHeight);
-      this.rotateUp(2 * Math.PI * this.rotateDelta.y / element.clientHeight);
-      this.rotateStart.copy(this.rotateEnd);
-      this.update();
-    });
-    CameraControls_publicField(this, "handleMouseMoveDolly", (event) => {
-      this.dollyEnd.set(event.clientX, event.clientY);
-      this.dollyDelta.subVectors(this.dollyEnd, this.dollyStart);
-      if (this.dollyDelta.y > 0) {
-        this.dollyIn(this.getZoomScale());
-      } else if (this.dollyDelta.y < 0) {
-        this.dollyOut(this.getZoomScale());
-      }
-      this.dollyStart.copy(this.dollyEnd);
-      this.update();
-    });
-    CameraControls_publicField(this, "handleMouseMovePan", (event) => {
-      this.panEnd.set(event.clientX, event.clientY);
-      this.panDelta.subVectors(this.panEnd, this.panStart).multiplyScalar(this.panSpeed);
-      this.pan(this.panDelta.x, this.panDelta.y);
-      this.panStart.copy(this.panEnd);
-      this.update();
-    });
-    CameraControls_publicField(this, "handleMouseWheel", (event) => {
-      if (event.deltaY < 0) {
-        this.dollyOut(this.getZoomScale());
-      } else if (event.deltaY > 0) {
-        this.dollyIn(this.getZoomScale());
-      }
-      this.update();
-    });
-    CameraControls_publicField(this, "handleKeyDown", (event) => {
-      let needsUpdate = false;
-      switch (event.code) {
-        case this.keys.UP:
-          this.pan(0, this.keyPanSpeed);
-          needsUpdate = true;
-          break;
-        case this.keys.BOTTOM:
-          this.pan(0, -this.keyPanSpeed);
-          needsUpdate = true;
-          break;
-        case this.keys.LEFT:
-          this.pan(this.keyPanSpeed, 0);
-          needsUpdate = true;
-          break;
-        case this.keys.RIGHT:
-          this.pan(-this.keyPanSpeed, 0);
-          needsUpdate = true;
-          break;
-      }
-      if (needsUpdate) {
-        event.preventDefault();
-        this.update();
-      }
-    });
-    CameraControls_publicField(this, "handleTouchStartRotate", (event) => {
-      if (event.touches.length == 1) {
-        this.rotateStart.set(event.touches[0].pageX, event.touches[0].pageY);
-      } else {
-        const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);
-        const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);
-        this.rotateStart.set(x, y);
-      }
-    });
-    CameraControls_publicField(this, "handleTouchStartPan", (event) => {
-      if (event.touches.length == 1) {
-        this.panStart.set(event.touches[0].pageX, event.touches[0].pageY);
-      } else {
-        const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);
-        const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);
-        this.panStart.set(x, y);
-      }
-    });
-    CameraControls_publicField(this, "handleTouchStartDolly", (event) => {
-      const dx = event.touches[0].pageX - event.touches[1].pageX;
-      const dy = event.touches[0].pageY - event.touches[1].pageY;
-      const distance = Math.sqrt(dx * dx + dy * dy);
-      this.dollyStart.set(0, distance);
-    });
-    CameraControls_publicField(this, "handleTouchStartDollyPan", (event) => {
-      if (this.enableZoom)
-        this.handleTouchStartDolly(event);
-      if (this.enablePan)
-        this.handleTouchStartPan(event);
-    });
-    CameraControls_publicField(this, "handleTouchStartDollyRotate", (event) => {
-      if (this.enableZoom)
-        this.handleTouchStartDolly(event);
-      if (this.enableRotate)
-        this.handleTouchStartRotate(event);
-    });
-    CameraControls_publicField(this, "handleTouchMoveRotate", (event) => {
-      if (event.touches.length == 1) {
-        this.rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY);
-      } else {
-        const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);
-        const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);
-        this.rotateEnd.set(x, y);
-      }
-      this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart).multiplyScalar(this.rotateSpeed);
-      const element = this.domElement;
-      this.rotateLeft(2 * Math.PI * this.rotateDelta.x / element.clientHeight);
-      this.rotateUp(2 * Math.PI * this.rotateDelta.y / element.clientHeight);
-      this.rotateStart.copy(this.rotateEnd);
-    });
-    CameraControls_publicField(this, "handleTouchMovePan", (event) => {
-      if (event.touches.length == 1) {
-        this.panEnd.set(event.touches[0].pageX, event.touches[0].pageY);
-      } else {
-        const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);
-        const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);
-        this.panEnd.set(x, y);
-      }
-      this.panDelta.subVectors(this.panEnd, this.panStart).multiplyScalar(this.panSpeed);
-      this.pan(this.panDelta.x, this.panDelta.y);
-      this.panStart.copy(this.panEnd);
-    });
-    CameraControls_publicField(this, "handleTouchMoveDolly", (event) => {
-      const dx = event.touches[0].pageX - event.touches[1].pageX;
-      const dy = event.touches[0].pageY - event.touches[1].pageY;
-      const distance = Math.sqrt(dx * dx + dy * dy);
-      this.dollyEnd.set(0, distance);
-      this.dollyDelta.set(0, Math.pow(this.dollyEnd.y / this.dollyStart.y, this.zoomSpeed));
-      this.dollyIn(this.dollyDelta.y);
-      this.dollyStart.copy(this.dollyEnd);
-    });
-    CameraControls_publicField(this, "handleTouchMoveDollyPan", (event) => {
-      if (this.enableZoom)
-        this.handleTouchMoveDolly(event);
-      if (this.enablePan)
-        this.handleTouchMovePan(event);
-    });
-    CameraControls_publicField(this, "handleTouchMoveDollyRotate", (event) => {
-      if (this.enableZoom)
-        this.handleTouchMoveDolly(event);
-      if (this.enableRotate)
-        this.handleTouchMoveRotate(event);
-    });
-    //
-    // event handlers - FSM: listen for events and reset state
-    //
-    CameraControls_publicField(this, "onMouseDown", (event) => {
-      if (this.enabled === false)
-        return;
-      event.preventDefault();
-      this.domElement.focus ? this.domElement.focus() : window.focus();
-      let mouseAction;
-      switch (event.button) {
-        case 0:
-          mouseAction = this.mouseButtons.LEFT;
-          break;
-        case 1:
-          mouseAction = this.mouseButtons.MIDDLE;
-          break;
-        case 2:
-          mouseAction = this.mouseButtons.RIGHT;
-          break;
-        default:
-          mouseAction = -1;
-      }
-      switch (mouseAction) {
-        case three_module.MOUSE.DOLLY:
-          if (this.enableZoom === false)
-            return;
-          this.handleMouseDownDolly(event);
-          this.state = 1;
-          break;
-        case three_module.MOUSE.ROTATE:
-          if (event.ctrlKey || event.metaKey || event.shiftKey) {
-            if (this.enablePan === false)
-              return;
-            this.handleMouseDownPan(event);
-            this.state = 2;
-          } else {
-            if (this.enableRotate === false)
-              return;
-            this.handleMouseDownRotate(event);
-            this.state = 0;
-          }
-          break;
-        case three_module.MOUSE.PAN:
-          if (event.ctrlKey || event.metaKey || event.shiftKey) {
-            if (this.enableRotate === false)
-              return;
-            this.handleMouseDownRotate(event);
-            this.state = 0;
-          } else {
-            if (this.enablePan === false)
-              return;
-            this.handleMouseDownPan(event);
-            this.state = 2;
-          }
-          break;
-        default:
-          this.state = -1;
-      }
-      if (this.state !== -1) {
-        document.addEventListener("mousemove", this.onMouseMove, false);
-        document.addEventListener("mouseup", this.onMouseUp, false);
-        this.dispatchEvent(this.startEvent);
-      }
-    });
-    CameraControls_publicField(this, "onMouseMove", (event) => {
-      if (this.enabled === false)
-        return;
-      event.preventDefault();
-      switch (this.state) {
-        case 0:
-          if (this.enableRotate === false)
-            return;
-          this.handleMouseMoveRotate(event);
-          break;
-        case 1:
-          if (this.enableZoom === false)
-            return;
-          this.handleMouseMoveDolly(event);
-          break;
-        case 2:
-          if (this.enablePan === false)
-            return;
-          this.handleMouseMovePan(event);
-          break;
-      }
-    });
-    CameraControls_publicField(this, "onMouseUp", () => {
-      if (this.enabled === false)
-        return;
-      document.removeEventListener("mousemove", this.onMouseMove, false);
-      document.removeEventListener("mouseup", this.onMouseUp, false);
-      this.dispatchEvent(this.endEvent);
-      this.state = -1;
-    });
-    CameraControls_publicField(this, "onMouseWheel", (event) => {
-      if (this.enabled === false || this.enableZoom === false || this.state !== -1 && this.state !== 0) {
-        return;
-      }
-      event.preventDefault();
-      this.dispatchEvent(this.startEvent);
-      this.handleMouseWheel(event);
-      this.dispatchEvent(this.endEvent);
-    });
-    CameraControls_publicField(this, "onKeyDown", (event) => {
-      if (this.enabled === false || this.enableKeys === false || this.enablePan === false)
-        return;
-      this.handleKeyDown(event);
-    });
-    CameraControls_publicField(this, "onTouchStart", (event) => {
-      if (this.enabled === false)
-        return;
-      event.preventDefault();
-      switch (event.touches.length) {
-        case 1:
-          switch (this.touches.ONE) {
-            case three_module.TOUCH.ROTATE:
-              if (this.enableRotate === false)
-                return;
-              this.handleTouchStartRotate(event);
-              this.state = 3;
-              break;
-            case three_module.TOUCH.PAN:
-              if (this.enablePan === false)
-                return;
-              this.handleTouchStartPan(event);
-              this.state = 4;
-              break;
-            default:
-              this.state = -1;
-          }
-          break;
-        case 2:
-          switch (this.touches.TWO) {
-            case three_module.TOUCH.DOLLY_PAN:
-              if (this.enableZoom === false && this.enablePan === false)
-                return;
-              this.handleTouchStartDollyPan(event);
-              this.state = 5;
-              break;
-            case three_module.TOUCH.DOLLY_ROTATE:
-              if (this.enableZoom === false && this.enableRotate === false)
-                return;
-              this.handleTouchStartDollyRotate(event);
-              this.state = 6;
-              break;
-            default:
-              this.state = -1;
-          }
-          break;
-        default:
-          this.state = -1;
-      }
-      if (this.state !== -1) {
-        this.dispatchEvent(this.startEvent);
-      }
-    });
-    CameraControls_publicField(this, "onTouchMove", (event) => {
-      if (this.enabled === false)
-        return;
-      event.preventDefault();
-      switch (this.state) {
-        case 3:
-          if (this.enableRotate === false)
-            return;
-          this.handleTouchMoveRotate(event);
-          this.update();
-          break;
-        case 4:
-          if (this.enablePan === false)
-            return;
-          this.handleTouchMovePan(event);
-          this.update();
-          break;
-        case 5:
-          if (this.enableZoom === false && this.enablePan === false)
-            return;
-          this.handleTouchMoveDollyPan(event);
-          this.update();
-          break;
-        case 6:
-          if (this.enableZoom === false && this.enableRotate === false)
-            return;
-          this.handleTouchMoveDollyRotate(event);
-          this.update();
-          break;
-        default:
-          this.state = -1;
-      }
-    });
-    CameraControls_publicField(this, "onTouchEnd", () => {
-      if (this.enabled === false)
-        return;
-      this.dispatchEvent(this.endEvent);
-      this.state = -1;
-    });
-    CameraControls_publicField(this, "onContextMenu", (event) => {
-      if (this.enabled === false)
-        return;
-      event.preventDefault();
-    });
-    if (domElement === void 0) {
-      console.warn('THREE.CameraControls: The second parameter "domElement" is now mandatory.');
-    }
-    if (domElement instanceof Document) {
-      console.error(
-        'THREE.CameraControls: "document" should not be used as the target "domElement". Please use "renderer.domElement" instead.'
-      );
-    }
-    this.object = object;
-    this.domElement = domElement;
-    this.mouseButtons = {
-      LEFT: three_module.MOUSE.ROTATE,
-      MIDDLE: three_module.MOUSE.DOLLY,
-      RIGHT: three_module.MOUSE.PAN
-    };
-    this.target0 = this.target.clone();
-    this.position0 = this.object.position.clone();
-    this.quaternion0 = this.object.quaternion.clone();
-    this.zoom0 = this.object.zoom;
-    this.quat = new three_module.Quaternion().setFromUnitVectors(this.object.up, new three_module.Vector3(0, 1, 0));
-    this.quatInverse = this.quat.clone().invert();
-    this.lastPosition = new three_module.Vector3();
-    this.lastQuaternion = new three_module.Quaternion();
-    this.domElement.addEventListener("contextmenu", this.onContextMenu, false);
-    this.domElement.addEventListener("mousedown", this.onMouseDown, false);
-    this.domElement.addEventListener("wheel", this.onMouseWheel, false);
-    this.domElement.addEventListener("touchstart", this.onTouchStart, false);
-    this.domElement.addEventListener("touchend", this.onTouchEnd, false);
-    this.domElement.addEventListener("touchmove", this.onTouchMove, false);
-    this.domElement.addEventListener("keydown", this.onKeyDown, false);
-    if (this.domElement.tabIndex === -1) {
-      this.domElement.tabIndex = 0;
-    }
-    this.object.lookAt(this.target);
-    this.update();
-    this.saveState();
-  }
-  handleMouseUp() {
-  }
-  handleTouchEnd() {
-  }
-}
-class OrbitControlsExp extends CameraControls {
-  constructor(object, domElement) {
-    super(object, domElement);
-    CameraControls_publicField(this, "mouseButtons");
-    CameraControls_publicField(this, "touches");
-    this.mouseButtons = {
-      LEFT: three_module.MOUSE.ROTATE,
-      RIGHT: three_module.MOUSE.PAN
-    };
-    this.touches = {
-      ONE: three_module.TOUCH.ROTATE,
-      TWO: three_module.TOUCH.DOLLY_PAN
-    };
-  }
-}
-class MapControlsExp extends CameraControls {
-  constructor(object, domElement) {
-    super(object, domElement);
-    CameraControls_publicField(this, "mouseButtons");
-    CameraControls_publicField(this, "touches");
-    this.mouseButtons = {
-      LEFT: three_module.MOUSE.PAN,
-      RIGHT: three_module.MOUSE.ROTATE
-    };
-    this.touches = {
-      ONE: three_module.TOUCH.PAN,
-      TWO: three_module.TOUCH.DOLLY_ROTATE
-    };
-  }
-}
-class TrackballControlsExp extends CameraControls {
-  constructor(object, domElement) {
-    super(object, domElement);
-    CameraControls_publicField(this, "trackball");
-    CameraControls_publicField(this, "screenSpacePanning");
-    CameraControls_publicField(this, "autoRotate");
-    CameraControls_publicField(this, "mouseButtons");
-    CameraControls_publicField(this, "touches");
-    this.trackball = true;
-    this.screenSpacePanning = true;
-    this.autoRotate = false;
-    this.mouseButtons = {
-      LEFT: three_module.MOUSE.ROTATE,
-      RIGHT: three_module.MOUSE.PAN
-    };
-    this.touches = {
-      ONE: three_module.TOUCH.ROTATE,
-      TWO: three_module.TOUCH.DOLLY_PAN
-    };
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/FirstPersonControls.js
-var FirstPersonControls = __webpack_require__(55259);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/TransformControls.js
-var TransformControls = __webpack_require__(35041);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/controls/DragControls.js
-var DragControls_defProp = Object.defineProperty;
-var DragControls_defNormalProp = (obj, key, value) => key in obj ? DragControls_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var DragControls_publicField = (obj, key, value) => {
-  DragControls_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-class DragControls extends three_module.EventDispatcher {
-  constructor(_objects, _camera, _domElement) {
-    super();
-    DragControls_publicField(this, "enabled", true);
-    DragControls_publicField(this, "transformGroup", false);
-    DragControls_publicField(this, "_objects");
-    DragControls_publicField(this, "_camera");
-    DragControls_publicField(this, "_domElement");
-    DragControls_publicField(this, "_plane", new three_module.Plane());
-    DragControls_publicField(this, "_raycaster", new three_module.Raycaster());
-    DragControls_publicField(this, "_mouse", new three_module.Vector2());
-    DragControls_publicField(this, "_offset", new three_module.Vector3());
-    DragControls_publicField(this, "_intersection", new three_module.Vector3());
-    DragControls_publicField(this, "_worldPosition", new three_module.Vector3());
-    DragControls_publicField(this, "_inverseMatrix", new three_module.Matrix4());
-    DragControls_publicField(this, "_intersections", []);
-    DragControls_publicField(this, "_selected", null);
-    DragControls_publicField(this, "_hovered", null);
-    DragControls_publicField(this, "activate", () => {
-      this._domElement.addEventListener("pointermove", this.onPointerMove);
-      this._domElement.addEventListener("pointerdown", this.onPointerDown);
-      this._domElement.addEventListener("pointerup", this.onPointerCancel);
-      this._domElement.addEventListener("pointerleave", this.onPointerCancel);
-      this._domElement.addEventListener("touchmove", this.onTouchMove);
-      this._domElement.addEventListener("touchstart", this.onTouchStart);
-      this._domElement.addEventListener("touchend", this.onTouchEnd);
-    });
-    DragControls_publicField(this, "deactivate", () => {
-      this._domElement.removeEventListener("pointermove", this.onPointerMove);
-      this._domElement.removeEventListener("pointerdown", this.onPointerDown);
-      this._domElement.removeEventListener("pointerup", this.onPointerCancel);
-      this._domElement.removeEventListener("pointerleave", this.onPointerCancel);
-      this._domElement.removeEventListener("touchmove", this.onTouchMove);
-      this._domElement.removeEventListener("touchstart", this.onTouchStart);
-      this._domElement.removeEventListener("touchend", this.onTouchEnd);
-      this._domElement.style.cursor = "";
-    });
-    // TODO: confirm if this can be removed?
-    DragControls_publicField(this, "dispose", () => this.deactivate());
-    DragControls_publicField(this, "getObjects", () => this._objects);
-    DragControls_publicField(this, "getRaycaster", () => this._raycaster);
-    DragControls_publicField(this, "onMouseMove", (event) => {
-      const rect = this._domElement.getBoundingClientRect();
-      this._mouse.x = (event.clientX - rect.left) / rect.width * 2 - 1;
-      this._mouse.y = -((event.clientY - rect.top) / rect.height) * 2 + 1;
-      this._raycaster.setFromCamera(this._mouse, this._camera);
-      if (this._selected && this.enabled) {
-        if (this._raycaster.ray.intersectPlane(this._plane, this._intersection)) {
-          this._selected.position.copy(this._intersection.sub(this._offset).applyMatrix4(this._inverseMatrix));
-        }
-        this.dispatchEvent({ type: "drag", object: this._selected });
-        return;
-      }
-      this._intersections.length = 0;
-      this._raycaster.setFromCamera(this._mouse, this._camera);
-      this._raycaster.intersectObjects(this._objects, true, this._intersections);
-      if (this._intersections.length > 0) {
-        const object = this._intersections[0].object;
-        this._plane.setFromNormalAndCoplanarPoint(
-          this._camera.getWorldDirection(this._plane.normal),
-          this._worldPosition.setFromMatrixPosition(object.matrixWorld)
-        );
-        if (this._hovered !== object) {
-          this.dispatchEvent({ type: "hoveron", object });
-          this._domElement.style.cursor = "pointer";
-          this._hovered = object;
-        }
-      } else {
-        if (this._hovered !== null) {
-          this.dispatchEvent({ type: "hoveroff", object: this._hovered });
-          this._domElement.style.cursor = "auto";
-          this._hovered = null;
-        }
-      }
-    });
-    DragControls_publicField(this, "onMouseDown", () => {
-      this._intersections.length = 0;
-      this._raycaster.setFromCamera(this._mouse, this._camera);
-      this._raycaster.intersectObjects(this._objects, true, this._intersections);
-      if (this._intersections.length > 0) {
-        this._selected = this.transformGroup === true ? this._objects[0] : this._intersections[0].object;
-        if (this._raycaster.ray.intersectPlane(this._plane, this._intersection) && this._selected.parent) {
-          this._inverseMatrix.copy(this._selected.parent.matrixWorld).invert();
-          this._offset.copy(this._intersection).sub(this._worldPosition.setFromMatrixPosition(this._selected.matrixWorld));
-        }
-        this._domElement.style.cursor = "move";
-        this.dispatchEvent({ type: "dragstart", object: this._selected });
-      }
-    });
-    DragControls_publicField(this, "onMouseCancel", () => {
-      if (this._selected) {
-        this.dispatchEvent({ type: "dragend", object: this._selected });
-        this._selected = null;
-      }
-      this._domElement.style.cursor = this._hovered ? "pointer" : "auto";
-    });
-    DragControls_publicField(this, "onPointerMove", (event) => {
-      switch (event.pointerType) {
-        case "mouse":
-        case "pen":
-          this.onMouseMove(event);
-          break;
-      }
-    });
-    DragControls_publicField(this, "onPointerDown", (event) => {
-      switch (event.pointerType) {
-        case "mouse":
-        case "pen":
-          this.onMouseDown();
-          break;
-      }
-    });
-    DragControls_publicField(this, "onPointerCancel", (event) => {
-      switch (event.pointerType) {
-        case "mouse":
-        case "pen":
-          this.onMouseCancel();
-          break;
-      }
-    });
-    DragControls_publicField(this, "onTouchMove", (event) => {
-      event.preventDefault();
-      const newEvent = event.changedTouches[0];
-      const rect = this._domElement.getBoundingClientRect();
-      this._mouse.x = (newEvent.clientX - rect.left) / rect.width * 2 - 1;
-      this._mouse.y = -((newEvent.clientY - rect.top) / rect.height) * 2 + 1;
-      this._raycaster.setFromCamera(this._mouse, this._camera);
-      if (this._selected && this.enabled) {
-        if (this._raycaster.ray.intersectPlane(this._plane, this._intersection)) {
-          this._selected.position.copy(this._intersection.sub(this._offset).applyMatrix4(this._inverseMatrix));
-        }
-        this.dispatchEvent({ type: "drag", object: this._selected });
-        return;
-      }
-    });
-    DragControls_publicField(this, "onTouchStart", (event) => {
-      event.preventDefault();
-      const newEvent = event.changedTouches[0];
-      const rect = this._domElement.getBoundingClientRect();
-      this._mouse.x = (newEvent.clientX - rect.left) / rect.width * 2 - 1;
-      this._mouse.y = -((newEvent.clientY - rect.top) / rect.height) * 2 + 1;
-      this._intersections.length = 0;
-      this._raycaster.setFromCamera(this._mouse, this._camera);
-      this._raycaster.intersectObjects(this._objects, true, this._intersections);
-      if (this._intersections.length > 0) {
-        this._selected = this.transformGroup === true ? this._objects[0] : this._intersections[0].object;
-        this._plane.setFromNormalAndCoplanarPoint(
-          this._camera.getWorldDirection(this._plane.normal),
-          this._worldPosition.setFromMatrixPosition(this._selected.matrixWorld)
-        );
-        if (this._raycaster.ray.intersectPlane(this._plane, this._intersection) && this._selected.parent) {
-          this._inverseMatrix.copy(this._selected.parent.matrixWorld).invert();
-          this._offset.copy(this._intersection).sub(this._worldPosition.setFromMatrixPosition(this._selected.matrixWorld));
-        }
-        this._domElement.style.cursor = "move";
-        this.dispatchEvent({ type: "dragstart", object: this._selected });
-      }
-    });
-    DragControls_publicField(this, "onTouchEnd", (event) => {
-      event.preventDefault();
-      if (this._selected) {
-        this.dispatchEvent({ type: "dragend", object: this._selected });
-        this._selected = null;
-      }
-      this._domElement.style.cursor = "auto";
-    });
-    this._objects = _objects;
-    this._camera = _camera;
-    this._domElement = _domElement;
-    this.activate();
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/PointerLockControls.js
-var PointerLockControls = __webpack_require__(2679);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/DeviceOrientationControls.js
-var DeviceOrientationControls = __webpack_require__(41743);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/TrackballControls.js
-var TrackballControls = __webpack_require__(7703);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/OrbitControls.js
-var OrbitControls = __webpack_require__(22227);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/ArcballControls.js
-var ArcballControls = __webpack_require__(1687);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/controls/FlyControls.js
-var FlyControls = __webpack_require__(32044);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/postprocessing/ShaderPass.js
-var ShaderPass = __webpack_require__(6073);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/LUTPass.js
-
-const LUTShader = {
-  defines: {
-    USE_3DTEXTURE: 1
-  },
-  uniforms: {
-    lut3d: { value: null },
-    lut: { value: null },
-    lutSize: { value: 0 },
-    tDiffuse: { value: null },
-    intensity: { value: 1 }
-  },
-  vertexShader: (
-    /* glsl */
-    `
-
-		varying vec2 vUv;
-
-		void main() {
-
-			vUv = uv;
-			gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-
-		}
-
-	`
-  ),
-  fragmentShader: (
-    /* glsl */
-    `
-
-		uniform float lutSize;
-		#if USE_3DTEXTURE
-		precision highp sampler3D;
-		uniform sampler3D lut3d;
-		#else
-		uniform sampler2D lut;
-
-		vec3 lutLookup( sampler2D tex, float size, vec3 rgb ) {
-
-			float sliceHeight = 1.0 / size;
-			float yPixelHeight = 1.0 / ( size * size );
-
-			// Get the slices on either side of the sample
-			float slice = rgb.b * size;
-			float interp = fract( slice );
-			float slice0 = slice - interp;
-			float centeredInterp = interp - 0.5;
-
-			float slice1 = slice0 + sign( centeredInterp );
-
-			// Pull y sample in by half a pixel in each direction to avoid color
-			// bleeding from adjacent slices.
-			float greenOffset = clamp( rgb.g * sliceHeight, yPixelHeight * 0.5, sliceHeight - yPixelHeight * 0.5 );
-
-			vec2 uv0 = vec2(
-				rgb.r,
-				slice0 * sliceHeight + greenOffset
-			);
-			vec2 uv1 = vec2(
-				rgb.r,
-				slice1 * sliceHeight + greenOffset
-			);
-
-			vec3 sample0 = texture2D( tex, uv0 ).rgb;
-			vec3 sample1 = texture2D( tex, uv1 ).rgb;
-
-			return mix( sample0, sample1, abs( centeredInterp ) );
-
-		}
-		#endif
-
-		varying vec2 vUv;
-		uniform float intensity;
-		uniform sampler2D tDiffuse;
-		void main() {
-
-			vec4 val = texture2D( tDiffuse, vUv );
-			vec4 lutVal;
-
-			// pull the sample in by half a pixel so the sample begins
-			// at the center of the edge pixels.
-			float pixelWidth = 1.0 / lutSize;
-			float halfPixelWidth = 0.5 / lutSize;
-			vec3 uvw = vec3( halfPixelWidth ) + val.rgb * ( 1.0 - pixelWidth );
-
-			#if USE_3DTEXTURE
-
-			lutVal = vec4( texture( lut3d, uvw ).rgb, val.a );
-
-			#else
-
-			lutVal = vec4( lutLookup( lut, lutSize, uvw ), val.a );
-
-			#endif
-
-			gl_FragColor = vec4( mix( val, lutVal, intensity ) );
-
-		}
-
-	`
-  )
-};
-class LUTPass extends ShaderPass/* ShaderPass */.T {
-  set lut(v) {
-    const material = this.material;
-    if (v !== this.lut) {
-      material.uniforms.lut3d.value = null;
-      material.uniforms.lut.value = null;
-      if (v) {
-        const is3dTextureDefine = v.isData3DTexture ? 1 : 0;
-        if (is3dTextureDefine !== material.defines.USE_3DTEXTURE) {
-          material.defines.USE_3DTEXTURE = is3dTextureDefine;
-          material.needsUpdate = true;
-        }
-        material.uniforms.lutSize.value = v.image.width;
-        if (v.isData3DTexture) {
-          material.uniforms.lut3d.value = v;
-        } else {
-          material.uniforms.lut.value = v;
-        }
-      }
-    }
-  }
-  get lut() {
-    return this.material.uniforms.lut.value || this.material.uniforms.lut3d.value;
-  }
-  set intensity(v) {
-    this.material.uniforms.intensity.value = v;
-  }
-  get intensity() {
-    return this.material.uniforms.intensity.value;
-  }
-  constructor(options = {}) {
-    super(LUTShader);
-    this.lut = options.lut || null;
-    this.intensity = "intensity" in options ? options.intensity : 1;
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/postprocessing/Pass.js
-var Pass = __webpack_require__(87628);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/ClearPass.js
-var ClearPass_defProp = Object.defineProperty;
-var ClearPass_defNormalProp = (obj, key, value) => key in obj ? ClearPass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var ClearPass_publicField = (obj, key, value) => {
-  ClearPass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-class ClearPass extends Pass/* Pass */.w {
-  constructor(clearColor, clearAlpha) {
-    super();
-    ClearPass_publicField(this, "clearColor");
-    ClearPass_publicField(this, "clearAlpha");
-    ClearPass_publicField(this, "_oldClearColor");
-    this.needsSwap = false;
-    this.clearColor = clearColor !== void 0 ? clearColor : 0;
-    this.clearAlpha = clearAlpha !== void 0 ? clearAlpha : 0;
-    this._oldClearColor = new three_module.Color();
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    let oldClearAlpha;
-    if (this.clearColor) {
-      renderer.getClearColor(this._oldClearColor);
-      oldClearAlpha = renderer.getClearAlpha();
-      renderer.setClearColor(this.clearColor, this.clearAlpha);
-    }
-    renderer.setRenderTarget(this.renderToScreen ? null : readBuffer);
-    renderer.clear();
-    if (this.clearColor) {
-      renderer.setClearColor(this._oldClearColor, oldClearAlpha);
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/DigitalGlitch.js
-const DigitalGlitch = {
-  uniforms: {
-    tDiffuse: { value: null },
-    //diffuse texture
-    tDisp: { value: null },
-    //displacement texture for digital glitch squares
-    byp: { value: 0 },
-    //apply the glitch ?
-    amount: { value: 0.08 },
-    angle: { value: 0.02 },
-    seed: { value: 0.02 },
-    seed_x: { value: 0.02 },
-    //-1,1
-    seed_y: { value: 0.02 },
-    //-1,1
-    distortion_x: { value: 0.5 },
-    distortion_y: { value: 0.6 },
-    col_s: { value: 0.05 }
-  },
-  vertexShader: `varying vec2 vUv;
-     void main() {
-     	 vUv = uv;
-     	 gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-     }`,
-  fragmentShader: `uniform int byp; //should we apply the glitch ?
-     uniform sampler2D tDiffuse;
-     uniform sampler2D tDisp;
-     uniform float amount;
-     uniform float angle;
-     uniform float seed;
-     uniform float seed_x;
-     uniform float seed_y;
-     uniform float distortion_x;
-     uniform float distortion_y;
-     uniform float col_s;
-
-     varying vec2 vUv;
-
-     float rand(vec2 co){
-     	 return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);
-     }
-
-     void main() {
-     	if(byp<1) {
-     		vec2 p = vUv;
-     		float xs = floor(gl_FragCoord.x / 0.5);
-     		float ys = floor(gl_FragCoord.y / 0.5);
-    //based on staffantans glitch shader for unity https://github.com/staffantan/unityglitch
-     		vec4 normal = texture2D (tDisp, p*seed*seed);
-     		if(p.y<distortion_x+col_s && p.y>distortion_x-col_s*seed) {
-     			if(seed_x>0.){
-     				p.y = 1. - (p.y + distortion_y);
-     			}
-     			else {
-     				p.y = distortion_y;
-     			}
-     		}
-     		if(p.x<distortion_y+col_s && p.x>distortion_y-col_s*seed) {
-     			if(seed_y>0.){
-     				p.x=distortion_x;
-     			}
-     			else {
-     				p.x = 1. - (p.x + distortion_x);
-     			}
-     		}
-     		p.x+=normal.x*seed_x*(seed/5.);
-     		p.y+=normal.y*seed_y*(seed/5.);
-    //base from RGB shift shader
-     		vec2 offset = amount * vec2( cos(angle), sin(angle));
-     		vec4 cr = texture2D(tDiffuse, p + offset);
-     		vec4 cga = texture2D(tDiffuse, p);
-     		vec4 cb = texture2D(tDiffuse, p - offset);
-     		gl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);
-    //add noise
-     		vec4 snow = 200.*amount*vec4(rand(vec2(xs * seed,ys * seed*50.))*0.2);
-     		gl_FragColor = gl_FragColor+ snow;
-     	}
-     	else {
-     		gl_FragColor=texture2D (tDiffuse, vUv);
-     	}
-    }`
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/GlitchPass.js
-var GlitchPass_defProp = Object.defineProperty;
-var GlitchPass_defNormalProp = (obj, key, value) => key in obj ? GlitchPass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var GlitchPass_publicField = (obj, key, value) => {
-  GlitchPass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-class GlitchPass extends Pass/* Pass */.w {
-  constructor(dt_size = 64) {
-    super();
-    GlitchPass_publicField(this, "material");
-    GlitchPass_publicField(this, "fsQuad");
-    GlitchPass_publicField(this, "goWild");
-    GlitchPass_publicField(this, "curF");
-    GlitchPass_publicField(this, "randX");
-    GlitchPass_publicField(this, "uniforms");
-    this.uniforms = three_module.UniformsUtils.clone(DigitalGlitch.uniforms);
-    this.uniforms["tDisp"].value = this.generateHeightmap(dt_size);
-    this.material = new three_module.ShaderMaterial({
-      uniforms: this.uniforms,
-      vertexShader: DigitalGlitch.vertexShader,
-      fragmentShader: DigitalGlitch.fragmentShader
-    });
-    this.fsQuad = new Pass/* FullScreenQuad */.T(this.material);
-    this.goWild = false;
-    this.curF = 0;
-    this.generateTrigger();
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    if (renderer.capabilities.isWebGL2 === false)
-      this.uniforms["tDisp"].value.format = three_module.LuminanceFormat;
-    this.uniforms["tDiffuse"].value = readBuffer.texture;
-    this.uniforms["seed"].value = Math.random();
-    this.uniforms["byp"].value = 0;
-    if (this.curF % this.randX == 0 || this.goWild == true) {
-      this.uniforms["amount"].value = Math.random() / 30;
-      this.uniforms["angle"].value = three_module.MathUtils.randFloat(-Math.PI, Math.PI);
-      this.uniforms["seed_x"].value = three_module.MathUtils.randFloat(-1, 1);
-      this.uniforms["seed_y"].value = three_module.MathUtils.randFloat(-1, 1);
-      this.uniforms["distortion_x"].value = three_module.MathUtils.randFloat(0, 1);
-      this.uniforms["distortion_y"].value = three_module.MathUtils.randFloat(0, 1);
-      this.curF = 0;
-      this.generateTrigger();
-    } else if (this.curF % this.randX < this.randX / 5) {
-      this.uniforms["amount"].value = Math.random() / 90;
-      this.uniforms["angle"].value = three_module.MathUtils.randFloat(-Math.PI, Math.PI);
-      this.uniforms["distortion_x"].value = three_module.MathUtils.randFloat(0, 1);
-      this.uniforms["distortion_y"].value = three_module.MathUtils.randFloat(0, 1);
-      this.uniforms["seed_x"].value = three_module.MathUtils.randFloat(-0.3, 0.3);
-      this.uniforms["seed_y"].value = three_module.MathUtils.randFloat(-0.3, 0.3);
-    } else if (this.goWild == false) {
-      this.uniforms["byp"].value = 1;
-    }
-    this.curF++;
-    if (this.renderToScreen) {
-      renderer.setRenderTarget(null);
-      this.fsQuad.render(renderer);
-    } else {
-      renderer.setRenderTarget(writeBuffer);
-      if (this.clear)
-        renderer.clear();
-      this.fsQuad.render(renderer);
-    }
-  }
-  generateTrigger() {
-    this.randX = three_module.MathUtils.randInt(120, 240);
-  }
-  generateHeightmap(dt_size) {
-    const data_arr = new Float32Array(dt_size * dt_size);
-    const length = dt_size * dt_size;
-    for (let i = 0; i < length; i++) {
-      const val = three_module.MathUtils.randFloat(0, 1);
-      data_arr[i] = val;
-    }
-    const texture = new three_module.DataTexture(data_arr, dt_size, dt_size, three_module.RedFormat, three_module.FloatType);
-    texture.needsUpdate = true;
-    return texture;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/HalftoneShader.js
-const HalftoneShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    shape: { value: 1 },
-    radius: { value: 4 },
-    rotateR: { value: Math.PI / 12 * 1 },
-    rotateG: { value: Math.PI / 12 * 2 },
-    rotateB: { value: Math.PI / 12 * 3 },
-    scatter: { value: 0 },
-    width: { value: 1 },
-    height: { value: 1 },
-    blending: { value: 1 },
-    blendingMode: { value: 1 },
-    greyscale: { value: false },
-    disable: { value: false }
-  },
-  vertexShader: [
-    "varying vec2 vUV;",
-    "void main() {",
-    "	vUV = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "#define SQRT2_MINUS_ONE 0.41421356",
-    "#define SQRT2_HALF_MINUS_ONE 0.20710678",
-    "#define PI2 6.28318531",
-    "#define SHAPE_DOT 1",
-    "#define SHAPE_ELLIPSE 2",
-    "#define SHAPE_LINE 3",
-    "#define SHAPE_SQUARE 4",
-    "#define BLENDING_LINEAR 1",
-    "#define BLENDING_MULTIPLY 2",
-    "#define BLENDING_ADD 3",
-    "#define BLENDING_LIGHTER 4",
-    "#define BLENDING_DARKER 5",
-    "uniform sampler2D tDiffuse;",
-    "uniform float radius;",
-    "uniform float rotateR;",
-    "uniform float rotateG;",
-    "uniform float rotateB;",
-    "uniform float scatter;",
-    "uniform float width;",
-    "uniform float height;",
-    "uniform int shape;",
-    "uniform bool disable;",
-    "uniform float blending;",
-    "uniform int blendingMode;",
-    "varying vec2 vUV;",
-    "uniform bool greyscale;",
-    "const int samples = 8;",
-    "float blend( float a, float b, float t ) {",
-    // linear blend
-    "	return a * ( 1.0 - t ) + b * t;",
-    "}",
-    "float hypot( float x, float y ) {",
-    // vector magnitude
-    "	return sqrt( x * x + y * y );",
-    "}",
-    "float rand( vec2 seed ){",
-    // get pseudo-random number
-    "return fract( sin( dot( seed.xy, vec2( 12.9898, 78.233 ) ) ) * 43758.5453 );",
-    "}",
-    "float distanceToDotRadius( float channel, vec2 coord, vec2 normal, vec2 p, float angle, float rad_max ) {",
-    // apply shape-specific transforms
-    "	float dist = hypot( coord.x - p.x, coord.y - p.y );",
-    "	float rad = channel;",
-    "	if ( shape == SHAPE_DOT ) {",
-    "		rad = pow( abs( rad ), 1.125 ) * rad_max;",
-    "	} else if ( shape == SHAPE_ELLIPSE ) {",
-    "		rad = pow( abs( rad ), 1.125 ) * rad_max;",
-    "		if ( dist != 0.0 ) {",
-    "			float dot_p = abs( ( p.x - coord.x ) / dist * normal.x + ( p.y - coord.y ) / dist * normal.y );",
-    "			dist = ( dist * ( 1.0 - SQRT2_HALF_MINUS_ONE ) ) + dot_p * dist * SQRT2_MINUS_ONE;",
-    "		}",
-    "	} else if ( shape == SHAPE_LINE ) {",
-    "		rad = pow( abs( rad ), 1.5) * rad_max;",
-    "		float dot_p = ( p.x - coord.x ) * normal.x + ( p.y - coord.y ) * normal.y;",
-    "		dist = hypot( normal.x * dot_p, normal.y * dot_p );",
-    "	} else if ( shape == SHAPE_SQUARE ) {",
-    "		float theta = atan( p.y - coord.y, p.x - coord.x ) - angle;",
-    "		float sin_t = abs( sin( theta ) );",
-    "		float cos_t = abs( cos( theta ) );",
-    "		rad = pow( abs( rad ), 1.4 );",
-    "		rad = rad_max * ( rad + ( ( sin_t > cos_t ) ? rad - sin_t * rad : rad - cos_t * rad ) );",
-    "	}",
-    "	return rad - dist;",
-    "}",
-    "struct Cell {",
-    // grid sample positions
-    "	vec2 normal;",
-    "	vec2 p1;",
-    "	vec2 p2;",
-    "	vec2 p3;",
-    "	vec2 p4;",
-    "	float samp2;",
-    "	float samp1;",
-    "	float samp3;",
-    "	float samp4;",
-    "};",
-    "vec4 getSample( vec2 point ) {",
-    // multi-sampled point
-    "	vec4 tex = texture2D( tDiffuse, vec2( point.x / width, point.y / height ) );",
-    "	float base = rand( vec2( floor( point.x ), floor( point.y ) ) ) * PI2;",
-    "	float step = PI2 / float( samples );",
-    "	float dist = radius * 0.66;",
-    "	for ( int i = 0; i < samples; ++i ) {",
-    "		float r = base + step * float( i );",
-    "		vec2 coord = point + vec2( cos( r ) * dist, sin( r ) * dist );",
-    "		tex += texture2D( tDiffuse, vec2( coord.x / width, coord.y / height ) );",
-    "	}",
-    "	tex /= float( samples ) + 1.0;",
-    "	return tex;",
-    "}",
-    "float getDotColour( Cell c, vec2 p, int channel, float angle, float aa ) {",
-    // get colour for given point
-    "	float dist_c_1, dist_c_2, dist_c_3, dist_c_4, res;",
-    "	if ( channel == 0 ) {",
-    "		c.samp1 = getSample( c.p1 ).r;",
-    "		c.samp2 = getSample( c.p2 ).r;",
-    "		c.samp3 = getSample( c.p3 ).r;",
-    "		c.samp4 = getSample( c.p4 ).r;",
-    "	} else if (channel == 1) {",
-    "		c.samp1 = getSample( c.p1 ).g;",
-    "		c.samp2 = getSample( c.p2 ).g;",
-    "		c.samp3 = getSample( c.p3 ).g;",
-    "		c.samp4 = getSample( c.p4 ).g;",
-    "	} else {",
-    "		c.samp1 = getSample( c.p1 ).b;",
-    "		c.samp3 = getSample( c.p3 ).b;",
-    "		c.samp2 = getSample( c.p2 ).b;",
-    "		c.samp4 = getSample( c.p4 ).b;",
-    "	}",
-    "	dist_c_1 = distanceToDotRadius( c.samp1, c.p1, c.normal, p, angle, radius );",
-    "	dist_c_2 = distanceToDotRadius( c.samp2, c.p2, c.normal, p, angle, radius );",
-    "	dist_c_3 = distanceToDotRadius( c.samp3, c.p3, c.normal, p, angle, radius );",
-    "	dist_c_4 = distanceToDotRadius( c.samp4, c.p4, c.normal, p, angle, radius );",
-    "	res = ( dist_c_1 > 0.0 ) ? clamp( dist_c_1 / aa, 0.0, 1.0 ) : 0.0;",
-    "	res += ( dist_c_2 > 0.0 ) ? clamp( dist_c_2 / aa, 0.0, 1.0 ) : 0.0;",
-    "	res += ( dist_c_3 > 0.0 ) ? clamp( dist_c_3 / aa, 0.0, 1.0 ) : 0.0;",
-    "	res += ( dist_c_4 > 0.0 ) ? clamp( dist_c_4 / aa, 0.0, 1.0 ) : 0.0;",
-    "	res = clamp( res, 0.0, 1.0 );",
-    "	return res;",
-    "}",
-    "Cell getReferenceCell( vec2 p, vec2 origin, float grid_angle, float step ) {",
-    // get containing cell
-    "	Cell c;",
-    // calc grid
-    "	vec2 n = vec2( cos( grid_angle ), sin( grid_angle ) );",
-    "	float threshold = step * 0.5;",
-    "	float dot_normal = n.x * ( p.x - origin.x ) + n.y * ( p.y - origin.y );",
-    "	float dot_line = -n.y * ( p.x - origin.x ) + n.x * ( p.y - origin.y );",
-    "	vec2 offset = vec2( n.x * dot_normal, n.y * dot_normal );",
-    "	float offset_normal = mod( hypot( offset.x, offset.y ), step );",
-    "	float normal_dir = ( dot_normal < 0.0 ) ? 1.0 : -1.0;",
-    "	float normal_scale = ( ( offset_normal < threshold ) ? -offset_normal : step - offset_normal ) * normal_dir;",
-    "	float offset_line = mod( hypot( ( p.x - offset.x ) - origin.x, ( p.y - offset.y ) - origin.y ), step );",
-    "	float line_dir = ( dot_line < 0.0 ) ? 1.0 : -1.0;",
-    "	float line_scale = ( ( offset_line < threshold ) ? -offset_line : step - offset_line ) * line_dir;",
-    // get closest corner
-    "	c.normal = n;",
-    "	c.p1.x = p.x - n.x * normal_scale + n.y * line_scale;",
-    "	c.p1.y = p.y - n.y * normal_scale - n.x * line_scale;",
-    // scatter
-    "	if ( scatter != 0.0 ) {",
-    "		float off_mag = scatter * threshold * 0.5;",
-    "		float off_angle = rand( vec2( floor( c.p1.x ), floor( c.p1.y ) ) ) * PI2;",
-    "		c.p1.x += cos( off_angle ) * off_mag;",
-    "		c.p1.y += sin( off_angle ) * off_mag;",
-    "	}",
-    // find corners
-    "	float normal_step = normal_dir * ( ( offset_normal < threshold ) ? step : -step );",
-    "	float line_step = line_dir * ( ( offset_line < threshold ) ? step : -step );",
-    "	c.p2.x = c.p1.x - n.x * normal_step;",
-    "	c.p2.y = c.p1.y - n.y * normal_step;",
-    "	c.p3.x = c.p1.x + n.y * line_step;",
-    "	c.p3.y = c.p1.y - n.x * line_step;",
-    "	c.p4.x = c.p1.x - n.x * normal_step + n.y * line_step;",
-    "	c.p4.y = c.p1.y - n.y * normal_step - n.x * line_step;",
-    "	return c;",
-    "}",
-    "float blendColour( float a, float b, float t ) {",
-    // blend colours
-    "	if ( blendingMode == BLENDING_LINEAR ) {",
-    "		return blend( a, b, 1.0 - t );",
-    "	} else if ( blendingMode == BLENDING_ADD ) {",
-    "		return blend( a, min( 1.0, a + b ), t );",
-    "	} else if ( blendingMode == BLENDING_MULTIPLY ) {",
-    "		return blend( a, max( 0.0, a * b ), t );",
-    "	} else if ( blendingMode == BLENDING_LIGHTER ) {",
-    "		return blend( a, max( a, b ), t );",
-    "	} else if ( blendingMode == BLENDING_DARKER ) {",
-    "		return blend( a, min( a, b ), t );",
-    "	} else {",
-    "		return blend( a, b, 1.0 - t );",
-    "	}",
-    "}",
-    "void main() {",
-    "	if ( ! disable ) {",
-    // setup
-    "		vec2 p = vec2( vUV.x * width, vUV.y * height );",
-    "		vec2 origin = vec2( 0, 0 );",
-    "		float aa = ( radius < 2.5 ) ? radius * 0.5 : 1.25;",
-    // get channel samples
-    "		Cell cell_r = getReferenceCell( p, origin, rotateR, radius );",
-    "		Cell cell_g = getReferenceCell( p, origin, rotateG, radius );",
-    "		Cell cell_b = getReferenceCell( p, origin, rotateB, radius );",
-    "		float r = getDotColour( cell_r, p, 0, rotateR, aa );",
-    "		float g = getDotColour( cell_g, p, 1, rotateG, aa );",
-    "		float b = getDotColour( cell_b, p, 2, rotateB, aa );",
-    // blend with original
-    "		vec4 colour = texture2D( tDiffuse, vUV );",
-    "		r = blendColour( r, colour.r, blending );",
-    "		g = blendColour( g, colour.g, blending );",
-    "		b = blendColour( b, colour.b, blending );",
-    "		if ( greyscale ) {",
-    "			r = g = b = (r + b + g) / 3.0;",
-    "		}",
-    "		gl_FragColor = vec4( r, g, b, 1.0 );",
-    "	} else {",
-    "		gl_FragColor = texture2D( tDiffuse, vUV );",
-    "	}",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/HalftonePass.js
-var HalftonePass_defProp = Object.defineProperty;
-var HalftonePass_defNormalProp = (obj, key, value) => key in obj ? HalftonePass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var HalftonePass_publicField = (obj, key, value) => {
-  HalftonePass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-class HalftonePass extends Pass/* Pass */.w {
-  constructor(width, height, params) {
-    super();
-    HalftonePass_publicField(this, "material");
-    HalftonePass_publicField(this, "fsQuad");
-    HalftonePass_publicField(this, "uniforms");
-    if (HalftoneShader === void 0) {
-      console.error("THREE.HalftonePass requires HalftoneShader");
-    }
-    this.uniforms = three_module.UniformsUtils.clone(HalftoneShader.uniforms);
-    this.material = new three_module.ShaderMaterial({
-      uniforms: this.uniforms,
-      fragmentShader: HalftoneShader.fragmentShader,
-      vertexShader: HalftoneShader.vertexShader
-    });
-    this.uniforms.width.value = width;
-    this.uniforms.height.value = height;
-    for (const key in params) {
-      if (params.hasOwnProperty(key) && this.uniforms.hasOwnProperty(key)) {
-        this.uniforms[key].value = params[key];
-      }
-    }
-    this.fsQuad = new Pass/* FullScreenQuad */.T(this.material);
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    this.material.uniforms["tDiffuse"].value = readBuffer.texture;
-    if (this.renderToScreen) {
-      renderer.setRenderTarget(null);
-      this.fsQuad.render(renderer);
-    } else {
-      renderer.setRenderTarget(writeBuffer);
-      if (this.clear)
-        renderer.clear();
-      this.fsQuad.render(renderer);
-    }
-  }
-  setSize(width, height) {
-    this.uniforms.width.value = width;
-    this.uniforms.height.value = height;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/SMAAShader.js
-
-const SMAAEdgesShader = {
-  defines: {
-    SMAA_THRESHOLD: "0.1"
-  },
-  uniforms: {
-    tDiffuse: { value: null },
-    resolution: { value: /* @__PURE__ */ new three_module.Vector2(1 / 1024, 1 / 512) }
-  },
-  vertexShader: [
-    "uniform vec2 resolution;",
-    "varying vec2 vUv;",
-    "varying vec4 vOffset[ 3 ];",
-    "void SMAAEdgeDetectionVS( vec2 texcoord ) {",
-    "	vOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -1.0, 0.0, 0.0,  1.0 );",
-    // WebGL port note: Changed sign in W component
-    "	vOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4(  1.0, 0.0, 0.0, -1.0 );",
-    // WebGL port note: Changed sign in W component
-    "	vOffset[ 2 ] = texcoord.xyxy + resolution.xyxy * vec4( -2.0, 0.0, 0.0,  2.0 );",
-    // WebGL port note: Changed sign in W component
-    "}",
-    "void main() {",
-    "	vUv = uv;",
-    "	SMAAEdgeDetectionVS( vUv );",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "varying vec4 vOffset[ 3 ];",
-    "vec4 SMAAColorEdgeDetectionPS( vec2 texcoord, vec4 offset[3], sampler2D colorTex ) {",
-    "	vec2 threshold = vec2( SMAA_THRESHOLD, SMAA_THRESHOLD );",
-    // Calculate color deltas:
-    "	vec4 delta;",
-    "	vec3 C = texture2D( colorTex, texcoord ).rgb;",
-    "	vec3 Cleft = texture2D( colorTex, offset[0].xy ).rgb;",
-    "	vec3 t = abs( C - Cleft );",
-    "	delta.x = max( max( t.r, t.g ), t.b );",
-    "	vec3 Ctop = texture2D( colorTex, offset[0].zw ).rgb;",
-    "	t = abs( C - Ctop );",
-    "	delta.y = max( max( t.r, t.g ), t.b );",
-    // We do the usual threshold:
-    "	vec2 edges = step( threshold, delta.xy );",
-    // Then discard if there is no edge:
-    "	if ( dot( edges, vec2( 1.0, 1.0 ) ) == 0.0 )",
-    "		discard;",
-    // Calculate right and bottom deltas:
-    "	vec3 Cright = texture2D( colorTex, offset[1].xy ).rgb;",
-    "	t = abs( C - Cright );",
-    "	delta.z = max( max( t.r, t.g ), t.b );",
-    "	vec3 Cbottom  = texture2D( colorTex, offset[1].zw ).rgb;",
-    "	t = abs( C - Cbottom );",
-    "	delta.w = max( max( t.r, t.g ), t.b );",
-    // Calculate the maximum delta in the direct neighborhood:
-    "	float maxDelta = max( max( max( delta.x, delta.y ), delta.z ), delta.w );",
-    // Calculate left-left and top-top deltas:
-    "	vec3 Cleftleft  = texture2D( colorTex, offset[2].xy ).rgb;",
-    "	t = abs( C - Cleftleft );",
-    "	delta.z = max( max( t.r, t.g ), t.b );",
-    "	vec3 Ctoptop = texture2D( colorTex, offset[2].zw ).rgb;",
-    "	t = abs( C - Ctoptop );",
-    "	delta.w = max( max( t.r, t.g ), t.b );",
-    // Calculate the final maximum delta:
-    "	maxDelta = max( max( maxDelta, delta.z ), delta.w );",
-    // Local contrast adaptation in action:
-    "	edges.xy *= step( 0.5 * maxDelta, delta.xy );",
-    "	return vec4( edges, 0.0, 0.0 );",
-    "}",
-    "void main() {",
-    "	gl_FragColor = SMAAColorEdgeDetectionPS( vUv, vOffset, tDiffuse );",
-    "}"
-  ].join("\n")
-};
-const SMAAWeightsShader = {
-  defines: {
-    SMAA_MAX_SEARCH_STEPS: "8",
-    SMAA_AREATEX_MAX_DISTANCE: "16",
-    SMAA_AREATEX_PIXEL_SIZE: "( 1.0 / vec2( 160.0, 560.0 ) )",
-    SMAA_AREATEX_SUBTEX_SIZE: "( 1.0 / 7.0 )"
-  },
-  uniforms: {
-    tDiffuse: { value: null },
-    tArea: { value: null },
-    tSearch: { value: null },
-    resolution: { value: /* @__PURE__ */ new three_module.Vector2(1 / 1024, 1 / 512) }
-  },
-  vertexShader: [
-    "uniform vec2 resolution;",
-    "varying vec2 vUv;",
-    "varying vec4 vOffset[ 3 ];",
-    "varying vec2 vPixcoord;",
-    "void SMAABlendingWeightCalculationVS( vec2 texcoord ) {",
-    "	vPixcoord = texcoord / resolution;",
-    // We will use these offsets for the searches later on (see @PSEUDO_GATHER4):
-    "	vOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -0.25, 0.125, 1.25, 0.125 );",
-    // WebGL port note: Changed sign in Y and W components
-    "	vOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( -0.125, 0.25, -0.125, -1.25 );",
-    // WebGL port note: Changed sign in Y and W components
-    // And these for the searches, they indicate the ends of the loops:
-    "	vOffset[ 2 ] = vec4( vOffset[ 0 ].xz, vOffset[ 1 ].yw ) + vec4( -2.0, 2.0, -2.0, 2.0 ) * resolution.xxyy * float( SMAA_MAX_SEARCH_STEPS );",
-    "}",
-    "void main() {",
-    "	vUv = uv;",
-    "	SMAABlendingWeightCalculationVS( vUv );",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "#define SMAASampleLevelZeroOffset( tex, coord, offset ) texture2D( tex, coord + float( offset ) * resolution, 0.0 )",
-    "uniform sampler2D tDiffuse;",
-    "uniform sampler2D tArea;",
-    "uniform sampler2D tSearch;",
-    "uniform vec2 resolution;",
-    "varying vec2 vUv;",
-    "varying vec4 vOffset[3];",
-    "varying vec2 vPixcoord;",
-    "#if __VERSION__ == 100",
-    "vec2 round( vec2 x ) {",
-    "	return sign( x ) * floor( abs( x ) + 0.5 );",
-    "}",
-    "#endif",
-    "float SMAASearchLength( sampler2D searchTex, vec2 e, float bias, float scale ) {",
-    // Not required if searchTex accesses are set to point:
-    // float2 SEARCH_TEX_PIXEL_SIZE = 1.0 / float2(66.0, 33.0);
-    // e = float2(bias, 0.0) + 0.5 * SEARCH_TEX_PIXEL_SIZE +
-    //     e * float2(scale, 1.0) * float2(64.0, 32.0) * SEARCH_TEX_PIXEL_SIZE;
-    "	e.r = bias + e.r * scale;",
-    "	return 255.0 * texture2D( searchTex, e, 0.0 ).r;",
-    "}",
-    "float SMAASearchXLeft( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {",
-    /**
-     * @PSEUDO_GATHER4
-     * This texcoord has been offset by (-0.25, -0.125) in the vertex shader to
-     * sample between edge, thus fetching four edges in a row.
-     * Sampling with different offsets in each direction allows to disambiguate
-     * which edges are active from the four fetched ones.
-     */
-    "	vec2 e = vec2( 0.0, 1.0 );",
-    "	for ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) {",
-    // WebGL port note: Changed while to for
-    "		e = texture2D( edgesTex, texcoord, 0.0 ).rg;",
-    "		texcoord -= vec2( 2.0, 0.0 ) * resolution;",
-    "		if ( ! ( texcoord.x > end && e.g > 0.8281 && e.r == 0.0 ) ) break;",
-    "	}",
-    // We correct the previous (-0.25, -0.125) offset we applied:
-    "	texcoord.x += 0.25 * resolution.x;",
-    // The searches are bias by 1, so adjust the coords accordingly:
-    "	texcoord.x += resolution.x;",
-    // Disambiguate the length added by the last step:
-    "	texcoord.x += 2.0 * resolution.x;",
-    // Undo last step
-    "	texcoord.x -= resolution.x * SMAASearchLength(searchTex, e, 0.0, 0.5);",
-    "	return texcoord.x;",
-    "}",
-    "float SMAASearchXRight( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {",
-    "	vec2 e = vec2( 0.0, 1.0 );",
-    "	for ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) {",
-    // WebGL port note: Changed while to for
-    "		e = texture2D( edgesTex, texcoord, 0.0 ).rg;",
-    "		texcoord += vec2( 2.0, 0.0 ) * resolution;",
-    "		if ( ! ( texcoord.x < end && e.g > 0.8281 && e.r == 0.0 ) ) break;",
-    "	}",
-    "	texcoord.x -= 0.25 * resolution.x;",
-    "	texcoord.x -= resolution.x;",
-    "	texcoord.x -= 2.0 * resolution.x;",
-    "	texcoord.x += resolution.x * SMAASearchLength( searchTex, e, 0.5, 0.5 );",
-    "	return texcoord.x;",
-    "}",
-    "float SMAASearchYUp( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {",
-    "	vec2 e = vec2( 1.0, 0.0 );",
-    "	for ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) {",
-    // WebGL port note: Changed while to for
-    "		e = texture2D( edgesTex, texcoord, 0.0 ).rg;",
-    "		texcoord += vec2( 0.0, 2.0 ) * resolution;",
-    // WebGL port note: Changed sign
-    "		if ( ! ( texcoord.y > end && e.r > 0.8281 && e.g == 0.0 ) ) break;",
-    "	}",
-    "	texcoord.y -= 0.25 * resolution.y;",
-    // WebGL port note: Changed sign
-    "	texcoord.y -= resolution.y;",
-    // WebGL port note: Changed sign
-    "	texcoord.y -= 2.0 * resolution.y;",
-    // WebGL port note: Changed sign
-    "	texcoord.y += resolution.y * SMAASearchLength( searchTex, e.gr, 0.0, 0.5 );",
-    // WebGL port note: Changed sign
-    "	return texcoord.y;",
-    "}",
-    "float SMAASearchYDown( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {",
-    "	vec2 e = vec2( 1.0, 0.0 );",
-    "	for ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) {",
-    // WebGL port note: Changed while to for
-    "		e = texture2D( edgesTex, texcoord, 0.0 ).rg;",
-    "		texcoord -= vec2( 0.0, 2.0 ) * resolution;",
-    // WebGL port note: Changed sign
-    "		if ( ! ( texcoord.y < end && e.r > 0.8281 && e.g == 0.0 ) ) break;",
-    "	}",
-    "	texcoord.y += 0.25 * resolution.y;",
-    // WebGL port note: Changed sign
-    "	texcoord.y += resolution.y;",
-    // WebGL port note: Changed sign
-    "	texcoord.y += 2.0 * resolution.y;",
-    // WebGL port note: Changed sign
-    "	texcoord.y -= resolution.y * SMAASearchLength( searchTex, e.gr, 0.5, 0.5 );",
-    // WebGL port note: Changed sign
-    "	return texcoord.y;",
-    "}",
-    "vec2 SMAAArea( sampler2D areaTex, vec2 dist, float e1, float e2, float offset ) {",
-    // Rounding prevents precision errors of bilinear filtering:
-    "	vec2 texcoord = float( SMAA_AREATEX_MAX_DISTANCE ) * round( 4.0 * vec2( e1, e2 ) ) + dist;",
-    // We do a scale and bias for mapping to texel space:
-    "	texcoord = SMAA_AREATEX_PIXEL_SIZE * texcoord + ( 0.5 * SMAA_AREATEX_PIXEL_SIZE );",
-    // Move to proper place, according to the subpixel offset:
-    "	texcoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset;",
-    "	return texture2D( areaTex, texcoord, 0.0 ).rg;",
-    "}",
-    "vec4 SMAABlendingWeightCalculationPS( vec2 texcoord, vec2 pixcoord, vec4 offset[ 3 ], sampler2D edgesTex, sampler2D areaTex, sampler2D searchTex, ivec4 subsampleIndices ) {",
-    "	vec4 weights = vec4( 0.0, 0.0, 0.0, 0.0 );",
-    "	vec2 e = texture2D( edgesTex, texcoord ).rg;",
-    "	if ( e.g > 0.0 ) {",
-    // Edge at north
-    "		vec2 d;",
-    // Find the distance to the left:
-    "		vec2 coords;",
-    "		coords.x = SMAASearchXLeft( edgesTex, searchTex, offset[ 0 ].xy, offset[ 2 ].x );",
-    "		coords.y = offset[ 1 ].y;",
-    // offset[1].y = texcoord.y - 0.25 * resolution.y (@CROSSING_OFFSET)
-    "		d.x = coords.x;",
-    // Now fetch the left crossing edges, two at a time using bilinear
-    // filtering. Sampling at -0.25 (see @CROSSING_OFFSET) enables to
-    // discern what value each edge has:
-    "		float e1 = texture2D( edgesTex, coords, 0.0 ).r;",
-    // Find the distance to the right:
-    "		coords.x = SMAASearchXRight( edgesTex, searchTex, offset[ 0 ].zw, offset[ 2 ].y );",
-    "		d.y = coords.x;",
-    // We want the distances to be in pixel units (doing this here allow to
-    // better interleave arithmetic and memory accesses):
-    "		d = d / resolution.x - pixcoord.x;",
-    // SMAAArea below needs a sqrt, as the areas texture is compressed
-    // quadratically:
-    "		vec2 sqrt_d = sqrt( abs( d ) );",
-    // Fetch the right crossing edges:
-    "		coords.y -= 1.0 * resolution.y;",
-    // WebGL port note: Added
-    "		float e2 = SMAASampleLevelZeroOffset( edgesTex, coords, ivec2( 1, 0 ) ).r;",
-    // Ok, we know how this pattern looks like, now it is time for getting
-    // the actual area:
-    "		weights.rg = SMAAArea( areaTex, sqrt_d, e1, e2, float( subsampleIndices.y ) );",
-    "	}",
-    "	if ( e.r > 0.0 ) {",
-    // Edge at west
-    "		vec2 d;",
-    // Find the distance to the top:
-    "		vec2 coords;",
-    "		coords.y = SMAASearchYUp( edgesTex, searchTex, offset[ 1 ].xy, offset[ 2 ].z );",
-    "		coords.x = offset[ 0 ].x;",
-    // offset[1].x = texcoord.x - 0.25 * resolution.x;
-    "		d.x = coords.y;",
-    // Fetch the top crossing edges:
-    "		float e1 = texture2D( edgesTex, coords, 0.0 ).g;",
-    // Find the distance to the bottom:
-    "		coords.y = SMAASearchYDown( edgesTex, searchTex, offset[ 1 ].zw, offset[ 2 ].w );",
-    "		d.y = coords.y;",
-    // We want the distances to be in pixel units:
-    "		d = d / resolution.y - pixcoord.y;",
-    // SMAAArea below needs a sqrt, as the areas texture is compressed
-    // quadratically:
-    "		vec2 sqrt_d = sqrt( abs( d ) );",
-    // Fetch the bottom crossing edges:
-    "		coords.y -= 1.0 * resolution.y;",
-    // WebGL port note: Added
-    "		float e2 = SMAASampleLevelZeroOffset( edgesTex, coords, ivec2( 0, 1 ) ).g;",
-    // Get the area for this direction:
-    "		weights.ba = SMAAArea( areaTex, sqrt_d, e1, e2, float( subsampleIndices.x ) );",
-    "	}",
-    "	return weights;",
-    "}",
-    "void main() {",
-    "	gl_FragColor = SMAABlendingWeightCalculationPS( vUv, vPixcoord, vOffset, tDiffuse, tArea, tSearch, ivec4( 0.0 ) );",
-    "}"
-  ].join("\n")
-};
-const SMAABlendShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    tColor: { value: null },
-    resolution: { value: /* @__PURE__ */ new three_module.Vector2(1 / 1024, 1 / 512) }
-  },
-  vertexShader: [
-    "uniform vec2 resolution;",
-    "varying vec2 vUv;",
-    "varying vec4 vOffset[ 2 ];",
-    "void SMAANeighborhoodBlendingVS( vec2 texcoord ) {",
-    "	vOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -1.0, 0.0, 0.0, 1.0 );",
-    // WebGL port note: Changed sign in W component
-    "	vOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( 1.0, 0.0, 0.0, -1.0 );",
-    // WebGL port note: Changed sign in W component
-    "}",
-    "void main() {",
-    "	vUv = uv;",
-    "	SMAANeighborhoodBlendingVS( vUv );",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform sampler2D tColor;",
-    "uniform vec2 resolution;",
-    "varying vec2 vUv;",
-    "varying vec4 vOffset[ 2 ];",
-    "vec4 SMAANeighborhoodBlendingPS( vec2 texcoord, vec4 offset[ 2 ], sampler2D colorTex, sampler2D blendTex ) {",
-    // Fetch the blending weights for current pixel:
-    "	vec4 a;",
-    "	a.xz = texture2D( blendTex, texcoord ).xz;",
-    "	a.y = texture2D( blendTex, offset[ 1 ].zw ).g;",
-    "	a.w = texture2D( blendTex, offset[ 1 ].xy ).a;",
-    // Is there any blending weight with a value greater than 0.0?
-    "	if ( dot(a, vec4( 1.0, 1.0, 1.0, 1.0 )) < 1e-5 ) {",
-    "		return texture2D( colorTex, texcoord, 0.0 );",
-    "	} else {",
-    // Up to 4 lines can be crossing a pixel (one through each edge). We
-    // favor blending by choosing the line with the maximum weight for each
-    // direction:
-    "		vec2 offset;",
-    "		offset.x = a.a > a.b ? a.a : -a.b;",
-    // left vs. right
-    "		offset.y = a.g > a.r ? -a.g : a.r;",
-    // top vs. bottom // WebGL port note: Changed signs
-    // Then we go in the direction that has the maximum weight:
-    "		if ( abs( offset.x ) > abs( offset.y )) {",
-    // horizontal vs. vertical
-    "			offset.y = 0.0;",
-    "		} else {",
-    "			offset.x = 0.0;",
-    "		}",
-    // Fetch the opposite color and lerp by hand:
-    "		vec4 C = texture2D( colorTex, texcoord, 0.0 );",
-    "		texcoord += sign( offset ) * resolution;",
-    "		vec4 Cop = texture2D( colorTex, texcoord, 0.0 );",
-    "		float s = abs( offset.x ) > abs( offset.y ) ? abs( offset.x ) : abs( offset.y );",
-    // WebGL port note: Added gamma correction
-    "		C.xyz = pow(C.xyz, vec3(2.2));",
-    "		Cop.xyz = pow(Cop.xyz, vec3(2.2));",
-    "		vec4 mixed = mix(C, Cop, s);",
-    "		mixed.xyz = pow(mixed.xyz, vec3(1.0 / 2.2));",
-    "		return mixed;",
-    "	}",
-    "}",
-    "void main() {",
-    "	gl_FragColor = SMAANeighborhoodBlendingPS( vUv, vOffset, tColor, tDiffuse );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/SMAAPass.js
-
-
-
-class SMAAPass extends Pass/* Pass */.w {
-  constructor(width, height) {
-    super();
-    this.edgesRT = new three_module.WebGLRenderTarget(width, height, {
-      depthBuffer: false
-    });
-    this.edgesRT.texture.name = "SMAAPass.edges";
-    this.weightsRT = new three_module.WebGLRenderTarget(width, height, {
-      depthBuffer: false
-    });
-    this.weightsRT.texture.name = "SMAAPass.weights";
-    const scope = this;
-    const areaTextureImage = new Image();
-    areaTextureImage.src = this.getAreaTexture();
-    areaTextureImage.onload = function() {
-      scope.areaTexture.needsUpdate = true;
-    };
-    this.areaTexture = new three_module.Texture();
-    this.areaTexture.name = "SMAAPass.area";
-    this.areaTexture.image = areaTextureImage;
-    this.areaTexture.minFilter = three_module.LinearFilter;
-    this.areaTexture.generateMipmaps = false;
-    this.areaTexture.flipY = false;
-    const searchTextureImage = new Image();
-    searchTextureImage.src = this.getSearchTexture();
-    searchTextureImage.onload = function() {
-      scope.searchTexture.needsUpdate = true;
-    };
-    this.searchTexture = new three_module.Texture();
-    this.searchTexture.name = "SMAAPass.search";
-    this.searchTexture.image = searchTextureImage;
-    this.searchTexture.magFilter = three_module.NearestFilter;
-    this.searchTexture.minFilter = three_module.NearestFilter;
-    this.searchTexture.generateMipmaps = false;
-    this.searchTexture.flipY = false;
-    if (SMAAEdgesShader === void 0) {
-      console.error("THREE.SMAAPass relies on SMAAShader");
-    }
-    this.uniformsEdges = three_module.UniformsUtils.clone(SMAAEdgesShader.uniforms);
-    this.uniformsEdges["resolution"].value.set(1 / width, 1 / height);
-    this.materialEdges = new three_module.ShaderMaterial({
-      defines: Object.assign({}, SMAAEdgesShader.defines),
-      uniforms: this.uniformsEdges,
-      vertexShader: SMAAEdgesShader.vertexShader,
-      fragmentShader: SMAAEdgesShader.fragmentShader
-    });
-    this.uniformsWeights = three_module.UniformsUtils.clone(SMAAWeightsShader.uniforms);
-    this.uniformsWeights["resolution"].value.set(1 / width, 1 / height);
-    this.uniformsWeights["tDiffuse"].value = this.edgesRT.texture;
-    this.uniformsWeights["tArea"].value = this.areaTexture;
-    this.uniformsWeights["tSearch"].value = this.searchTexture;
-    this.materialWeights = new three_module.ShaderMaterial({
-      defines: Object.assign({}, SMAAWeightsShader.defines),
-      uniforms: this.uniformsWeights,
-      vertexShader: SMAAWeightsShader.vertexShader,
-      fragmentShader: SMAAWeightsShader.fragmentShader
-    });
-    this.uniformsBlend = three_module.UniformsUtils.clone(SMAABlendShader.uniforms);
-    this.uniformsBlend["resolution"].value.set(1 / width, 1 / height);
-    this.uniformsBlend["tDiffuse"].value = this.weightsRT.texture;
-    this.materialBlend = new three_module.ShaderMaterial({
-      uniforms: this.uniformsBlend,
-      vertexShader: SMAABlendShader.vertexShader,
-      fragmentShader: SMAABlendShader.fragmentShader
-    });
-    this.needsSwap = false;
-    this.fsQuad = new Pass/* FullScreenQuad */.T(null);
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    this.uniformsEdges["tDiffuse"].value = readBuffer.texture;
-    this.fsQuad.material = this.materialEdges;
-    renderer.setRenderTarget(this.edgesRT);
-    if (this.clear)
-      renderer.clear();
-    this.fsQuad.render(renderer);
-    this.fsQuad.material = this.materialWeights;
-    renderer.setRenderTarget(this.weightsRT);
-    if (this.clear)
-      renderer.clear();
-    this.fsQuad.render(renderer);
-    this.uniformsBlend["tColor"].value = readBuffer.texture;
-    this.fsQuad.material = this.materialBlend;
-    if (this.renderToScreen) {
-      renderer.setRenderTarget(null);
-      this.fsQuad.render(renderer);
-    } else {
-      renderer.setRenderTarget(writeBuffer);
-      if (this.clear)
-        renderer.clear();
-      this.fsQuad.render(renderer);
-    }
-  }
-  setSize(width, height) {
-    this.edgesRT.setSize(width, height);
-    this.weightsRT.setSize(width, height);
-    this.materialEdges.uniforms["resolution"].value.set(1 / width, 1 / height);
-    this.materialWeights.uniforms["resolution"].value.set(1 / width, 1 / height);
-    this.materialBlend.uniforms["resolution"].value.set(1 / width, 1 / height);
-  }
-  getAreaTexture() {
-    return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAIwCAIAAACOVPcQAACBeklEQVR42u39W4xlWXrnh/3WWvuciIzMrKxrV8/0rWbY0+SQFKcb4owIkSIFCjY9AC1BT/LYBozRi+EX+cV+8IMsYAaCwRcBwjzMiw2jAWtgwC8WR5Q8mDFHZLNHTarZGrLJJllt1W2qKrsumZWZcTvn7L3W54e1vrXX3vuciLPPORFR1XE2EomorB0nVuz//r71re/y/1eMvb4Cb3N11xV/PP/2v4UBAwJG/7H8urx6/25/Gf8O5hypMQ0EEEQwAqLfoN/Z+97f/SW+/NvcgQk4sGBJK6H7N4PFVL+K+e0N11yNfkKvwUdwdlUAXPHHL38oa15f/i/46Ih6SuMSPmLAYAwyRKn7dfMGH97jaMFBYCJUgotIC2YAdu+LyW9vvubxAP8kAL8H/koAuOKP3+q6+xGnd5kdYCeECnGIJViwGJMAkQKfDvB3WZxjLKGh8VSCCzhwEWBpMc5/kBbjawT4HnwJfhr+pPBIu7uu+OOTo9vsmtQcniMBGkKFd4jDWMSCRUpLjJYNJkM+IRzQ+PQvIeAMTrBS2LEiaiR9b/5PuT6Ap/AcfAFO4Y3dA3DFH7/VS+M8k4baEAQfMI4QfbVDDGIRg7GKaIY52qAjTAgTvGBAPGIIghOCYAUrGFNgzA7Q3QhgCwfwAnwe5vDejgG44o/fbm1C5ZlYQvQDARPAIQGxCWBM+wWl37ZQESb4gImexGMDouhGLx1Cst0Saa4b4AqO4Hk4gxo+3DHAV/nx27p3JziPM2pVgoiia5MdEzCGULprIN7gEEeQ5IQxEBBBQnxhsDb5auGmAAYcHMA9eAAz8PBol8/xij9+C4Djlim4gJjWcwZBhCBgMIIYxGAVIkH3ZtcBuLdtRFMWsPGoY9rN+HoBji9VBYdwD2ZQg4cnO7OSq/z4rU5KKdwVbFAjNojCQzTlCLPFSxtamwh2jMUcEgg2Wm/6XgErIBhBckQtGN3CzbVacERgCnfgLswhnvqf7QyAq/z4rRZm1YglYE3affGITaZsdIe2FmMIpnOCap25I6jt2kCwCW0D1uAD9sZctNGXcQIHCkINDQgc78aCr+zjtw3BU/ijdpw3zhCwcaONwBvdeS2YZKkJNJsMPf2JKEvC28RXxxI0ASJyzQCjCEQrO4Q7sFArEzjZhaFc4cdv+/JFdKULM4px0DfUBI2hIsy06BqLhGTQEVdbfAIZXYMPesq6VoCHICzUyjwInO4Y411//LYLs6TDa9wvg2CC2rElgAnpTBziThxaL22MYhzfkghz6GAs2VHbbdM91VZu1MEEpupMMwKyVTb5ij9+u4VJG/5EgEMMmFF01cFai3isRbKbzb+YaU/MQbAm2XSMoUPAmvZzbuKYRIFApbtlrfFuUGd6vq2hXNnH78ZLh/iFhsQG3T4D1ib7k5CC6vY0DCbtrohgLEIClXiGtl10zc0CnEGIhhatLBva7NP58Tvw0qE8yWhARLQ8h4+AhQSP+I4F5xoU+VilGRJs6wnS7ruti/4KvAY/CfdgqjsMy4pf8fodQO8/gnuX3f/3xi3om1/h7THr+co3x93PP9+FBUfbNUjcjEmhcrkT+8K7ml7V10Jo05mpIEFy1NmCJWx9SIKKt+EjAL4Ez8EBVOB6havuT/rByPvHXK+9zUcfcbb254+9fydJknYnRr1oGfdaiAgpxu1Rx/Rek8KISftx3L+DfsLWAANn8Hvw0/AFeAGO9DFV3c6D+CcWbL8Dj9e7f+T1k8AZv/d7+PXWM/Z+VvdCrIvuAKO09RpEEQJM0Ci6+B4xhTWr4cZNOvhktabw0ta0rSJmqz3Yw5/AKXwenod7cAhTmBSPKf6JBdvH8IP17h95pXqw50/+BFnj88fev4NchyaK47OPhhtI8RFSvAfDSNh0Ck0p2gLxGkib5NJj/JWCr90EWQJvwBzO4AHcgztwAFN1evHPUVGwfXON+0debT1YeGON9Yy9/63X+OguiwmhIhQhD7l4sMqlG3D86Suc3qWZ4rWjI1X7u0Ytw6x3rIMeIOPDprfe2XzNgyj6PahhBjO4C3e6puDgXrdg+/5l948vF3bqwZetZ+z9Rx9zdIY5pInPK4Nk0t+l52xdK2B45Qd87nM8fsD5EfUhIcJcERw4RdqqH7Yde5V7m1vhNmtedkz6EDzUMF/2jJYWbC+4fzzA/Y+/8PPH3j9dcBAPIRP8JLXd5BpAu03aziOL3VVHZzz3CXWDPWd+SH2AnxIqQoTZpo9Ckc6HIrFbAbzNmlcg8Ag8NFDDAhbJvTBZXbC94P7t68EXfv6o+21gUtPETU7bbkLxvNKRFG2+KXzvtObonPP4rBvsgmaKj404DlshFole1Glfh02fE7bYR7dZ82oTewIBGn1Md6CG6YUF26X376oevOLzx95vhUmgblI6LBZwTCDY7vMq0op5WVXgsObOXJ+1x3qaBl9j1FeLxbhU9w1F+Wiba6s1X/TBz1LnUfuYDi4r2C69f1f14BWfP+p+W2GFKuC9phcELMYRRLur9DEZTUdEH+iEqWdaM7X4WOoPGI+ZYD2+wcQ+y+ioHUZ9dTDbArzxmi/bJI9BND0Ynd6lBdve/butBw8+f/T9D3ABa3AG8W3VPX4hBin+bj8dMMmSpp5pg7fJ6xrBFE2WQQEWnV8Qg3FbAWzYfM1rREEnmvkN2o1+acG2d/9u68GDzx91v3mAjb1zkpqT21OipPKO0b9TO5W0nTdOmAQm0TObts3aBKgwARtoPDiCT0gHgwnbArzxmtcLc08HgF1asN0C4Ms/fvD5I+7PhfqyXE/b7RbbrGyRQRT9ARZcwAUmgdoz0ehJ9Fn7QAhUjhDAQSw0bV3T3WbNa59jzmiP6GsWbGXDX2ytjy8+f9T97fiBPq9YeLdBmyuizZHaqXITnXiMUEEVcJ7K4j3BFPurtB4bixW8wTpweL8DC95szWMOqucFYGsWbGU7p3TxxxefP+r+oTVktxY0v5hbq3KiOKYnY8ddJVSBxuMMVffNbxwIOERShst73HZ78DZrHpmJmH3K6sGz0fe3UUj0eyRrSCGTTc+rjVNoGzNSv05srAxUBh8IhqChiQgVNIIBH3AVPnrsnXQZbLTm8ammv8eVXn/vWpaTem5IXRlt+U/LA21zhSb9cye6jcOfCnOwhIAYXAMVTUNV0QhVha9xjgA27ODJbLbmitt3tRN80lqG6N/khgot4ZVlOyO4WNg3OIMzhIZQpUEHieg2im6F91hB3I2tubql6BYNN9Hj5S7G0G2tahslBWKDnOiIvuAEDzakDQKDNFQT6gbn8E2y4BBubM230YIpBnDbMa+y3dx0n1S0BtuG62lCCXwcY0F72T1VRR3t2ONcsmDjbmzNt9RFs2LO2hQNyb022JisaI8rAWuw4HI3FuAIhZdOGIcdjLJvvObqlpqvWTJnnQbyi/1M9O8UxWhBs//H42I0q1Yb/XPGONzcmm+ri172mHKvZBpHkJaNJz6v9jxqiklDj3U4CA2ugpAaYMWqNXsdXbmJNd9egCnJEsphXNM+MnK3m0FCJ5S1kmJpa3DgPVbnQnPGWIDspW9ozbcO4K/9LkfaQO2KHuqlfFXSbdNzcEcwoqNEFE9zcIXu9/6n/ym/BC/C3aJLzEKPuYVlbFnfhZ8kcWxV3dbv4bKl28566wD+8C53aw49lTABp9PWbsB+knfc/Li3eVizf5vv/xmvnPKg5ihwKEwlrcHqucuVcVOxEv8aH37E3ZqpZypUulrHEtIWKUr+txHg+ojZDGlwnqmkGlzcVi1dLiNSJiHjfbRNOPwKpx9TVdTn3K05DBx4psIk4Ei8aCkJahRgffk4YnEXe07T4H2RR1u27E6wfQsBDofUgjFUFnwC2AiVtA+05J2zpiDK2Oa0c5fmAecN1iJzmpqFZxqYBCYhFTCsUNEmUnIcZ6aEA5rQVhEywG6w7HSW02XfOoBlQmjwulOFQAg66SvJblrTEX1YtJ3uG15T/BH1OfOQeuR8g/c0gdpT5fx2SKbs9EfHTKdM8A1GaJRHLVIwhcGyydZsbifAFVKl5EMKNU2Hryo+06BeTgqnxzYjThVySDikbtJPieco75lYfKAJOMEZBTjoITuWHXXZVhcUDIS2hpiXHV9Ku4u44bN5OYLDOkJo8w+xJSMbhBRHEdEs9JZUCkQrPMAvaHyLkxgkEHxiNkx/x2YB0mGsQ8EUWj/stW5YLhtS5SMu+/YBbNPDCkGTUybN8krRLBGPlZkVOA0j+a1+rkyQKWGaPHPLZOkJhioQYnVZ2hS3zVxMtgC46KuRwbJNd9nV2PHgb36F194ecf/Yeu2vAFe5nm/bRBFrnY4BauE8ERmZRFUn0k8hbftiVYSKMEme2dJCJSCGYAlNqh87bXOPdUkGy24P6d1ll21MBqqx48Fvv8ZHH8HZFY7j/uAq1xMJUFqCSUlJPmNbIiNsmwuMs/q9CMtsZsFO6SprzCS1Z7QL8xCQClEelpjTduDMsmWD8S1PT152BtvmIGvUeDA/yRn83u/x0/4qxoPHjx+PXY9pqX9bgMvh/Nz9kpP4pOe1/fYf3axUiMdHLlPpZCNjgtNFAhcHEDxTumNONhHrBduW+vOyY++70WWnPXj98eA4kOt/mj/5E05l9+O4o8ePx67HFqyC+qSSnyselqjZGaVK2TadbFLPWAQ4NBhHqDCCV7OTpo34AlSSylPtIdd2AJZlyzYQrDJ5lcWGNceD80CunPLGGzsfD+7wRb95NevJI5docQ3tgCyr5bGnyaPRlmwNsFELViOOx9loebGNq2moDOKpHLVP5al2cymWHbkfzGXL7kfRl44H9wZy33tvt+PB/Xnf93e+nh5ZlU18wCiRUa9m7kib9LYuOk+hudQNbxwm0AQqbfloimaB2lM5fChex+ylMwuTbfmXQtmWlenZljbdXTLuOxjI/fDDHY4Hjx8/Hrse0zXfPFxbUN1kKqSCCSk50m0Ajtx3ub9XHBKHXESb8iO6E+qGytF4nO0OG3SXzbJlhxBnKtKyl0NwybjvYCD30aMdjgePHz8eu56SVTBbgxJMliQ3Oauwg0QHxXE2Ez/EIReLdQj42Gzb4CLS0YJD9xUx7bsi0vJi5mUbW1QzL0h0PFk17rtiIPfJk52MB48fPx67npJJwyrBa2RCCQRTbGZSPCxTPOiND4G2pYyOQ4h4jINIJh5wFU1NFZt+IsZ59LSnDqBjZ2awbOku+yInunLcd8VA7rNnOxkPHj9+PGY9B0MWJJNozOJmlglvDMXDEozdhQWbgs/U6oBanGzLrdSNNnZFjOkmbi5bNt1lX7JLLhn3vXAg9/h4y/Hg8ePHI9dzQMEkWCgdRfYykYKnkP7D4rIujsujaKPBsB54vE2TS00ccvFY/Tth7JXeq1hz+qgVy04sAJawTsvOknHfCwdyT062HA8eP348Zj0vdoXF4pilKa2BROed+9fyw9rWRXeTFXESMOanvDZfJuJaSXouQdMdDJZtekZcLLvEeK04d8m474UDuaenW44Hjx8/Xns9YYqZpszGWB3AN/4VHw+k7WSFtJ3Qicuqb/NlVmgXWsxh570xg2UwxUw3WfO6B5nOuO8aA7lnZxuPB48fPx6znm1i4bsfcbaptF3zNT78eFPtwi1OaCNOqp1x3zUGcs/PN++AGD1+fMXrSVm2baTtPhPahbPhA71wIHd2bXzRa69nG+3CraTtPivahV/55tXWg8fyRY/9AdsY8VbSdp8V7cKrrgdfM//z6ILQFtJ2nxHtwmuoB4/kf74+gLeRtvvMaBdeSz34+vifx0YG20jbfTa0C6+tHrwe//NmOG0L8EbSdp8R7cLrrQe/996O+ai3ujQOskpTNULa7jOjXXj99eCd8lHvoFiwsbTdZ0a78PrrwTvlo966pLuRtB2fFe3Cm6oHP9kNH/W2FryxtN1nTLvwRurBO+Kj3pWXHidtx2dFu/Bm68Fb81HvykuPlrb7LGkX3mw9eGs+6h1Y8MbSdjegXcguQLjmevDpTQLMxtJ2N6NdyBZu9AbrwVvwUW+LbteULUpCdqm0HTelXbhNPe8G68Gb8lFvVfYfSNuxvrTdTWoXbozAzdaDZzfkorOj1oxVxlIMlpSIlpLrt8D4hrQL17z+c3h6hU/wv4Q/utps4+bm+6P/hIcf0JwQ5oQGPBL0eKPTYEXTW+eL/2DKn73J9BTXYANG57hz1cEMviVf/4tf5b/6C5pTQkMIWoAq7hTpOJjtAM4pxKu5vg5vXeUrtI09/Mo/5H+4z+Mp5xULh7cEm2QbRP2tFIKR7WM3fPf/jZ3SWCqLM2l4NxID5zB72HQXv3jj/8mLR5xXNA5v8EbFQEz7PpRfl1+MB/hlAN65qgDn3wTgH13hK7T59bmP+NIx1SHHU84nLOITt3iVz8mNO+lPrjGAnBFqmioNn1mTyk1ta47R6d4MrX7tjrnjYUpdUbv2rVr6YpVfsGG58AG8Ah9eyUN8CX4WfgV+G8LVWPDGb+Zd4cU584CtqSbMKxauxTg+dyn/LkVgA+IR8KHtejeFKRtTmLLpxN6mYVLjYxwXf5x2VofiZcp/lwKk4wGOpYDnoIZPdg/AAbwMfx0+ge9dgZvYjuqKe4HnGnykYo5TvJbG0Vj12JagRhwKa44H95ShkZa5RyLGGdfYvG7aw1TsF6iapPAS29mNS3NmsTQZCmgTzFwgL3upCTgtBTRwvGMAKrgLn4evwin8+afJRcff+8izUGUM63GOOuAs3tJkw7J4kyoNreqrpO6cYLQeFUd7TTpr5YOTLc9RUUogUOVJQ1GYJaFLAW0oTmKyYS46ZooP4S4EON3xQ5zC8/CX4CnM4c1PE8ApexpoYuzqlP3d4S3OJP8ZDK7cKWNaTlqmgDiiHwl1YsE41w1zT4iRTm3DBqxvOUsbMKKDa/EHxagtnta072ejc3DOIh5ojvh8l3tk1JF/AV6FU6jh3U8HwEazLgdCLYSQ+MYiAI2ltomkzttUb0gGHdSUUgsIYjTzLG3mObX4FBRaYtpDVNZrih9TgTeYOBxsEnN1gOCTM8Bsw/ieMc75w9kuAT6A+/AiHGvN/+Gn4KRkiuzpNNDYhDGFndWRpE6SVfm8U5bxnSgVV2jrg6JCKmneqey8VMFgq2+AM/i4L4RUbfSi27lNXZ7R7W9RTcq/q9fk4Xw3AMQd4I5ifAZz8FcVtm9SAom/dyN4lczJQW/kC42ZrHgcCoIf1oVMKkVItmMBi9cOeNHGLqOZk+QqQmrbc5YmYgxELUUN35z2iohstgfLIFmcMV7s4CFmI74L9+EFmGsi+tGnAOD4Yk9gIpo01Y4cA43BWGygMdr4YZekG3OBIUXXNukvJS8tqa06e+lSDCtnqqMFu6hWHXCF+WaYt64m9QBmNxi7Ioy7D+fa1yHw+FMAcPt7SysFLtoG4PXAk7JOA3aAxBRqUiAdU9Yp5lK3HLSRFtOim0sa8euEt08xvKjYjzeJ2GU7YawexrnKI9tmobInjFXCewpwriY9+RR4aaezFhMhGCppKwom0ChrgFlKzyPKkGlTW1YQrE9HJqu8hKGgMc6hVi5QRq0PZxNfrYNgE64utmRv6KKHRpxf6VDUaOvNP5jCEx5q185My/7RKz69UQu2im5k4/eownpxZxNLwiZ1AZTO2ZjWjkU9uaB2HFn6Q3u0JcsSx/qV9hTEApRzeBLDJQXxYmTnq7bdLa3+uqFrxLJ5w1TehnNHx5ECvCh2g2c3hHH5YsfdaSKddztfjQ6imKFGSyFwlLzxEGPp6r5IevVjk1AMx3wMqi1NxDVjLBiPs9tbsCkIY5we5/ML22zrCScFxnNtzsr9Wcc3CnD+pYO+4VXXiDE0oc/vQQ/fDK3oPESJMYXNmJa/DuloJZkcTpcYE8lIH8Dz8DJMiynNC86Mb2lNaaqP/+L7f2fcE/yP7/Lde8xfgSOdMxvOixZf/9p3+M4hT1+F+zApxg9XfUvYjc8qX2lfOOpK2gNRtB4flpFu9FTKCp2XJRgXnX6olp1zyYjTKJSkGmLE2NjUr1bxFM4AeAAHBUFIeSLqXR+NvH/M9fOnfHzOD2vCSyQJKzfgsCh+yi/Mmc35F2fUrw7miW33W9hBD1vpuUojFphIyvg7aTeoymDkIkeW3XLHmguMzbIAJejN6B5MDrhipE2y6SoFRO/AK/AcHHZHNIfiWrEe/C6cr3f/yOvrQKB+zMM55/GQdLDsR+ifr5Fiuu+/y+M78LzOE5dsNuXC3PYvYWd8NXvphLSkJIasrlD2/HOqQ+RjcRdjKTGWYhhVUm4yxlyiGPuMsZR7sMCHUBeTuNWA7if+ifXgc/hovftHXs/DV+Fvwe+f8shzMiMcweFgBly3//vwJfg5AN4450fn1Hd1Rm1aBLu22Dy3y3H2+OqMemkbGZ4jozcDjJf6596xOLpC0eMTHbKnxLxH27uZ/bMTGs2jOaMOY4m87CfQwF0dw53oa1k80JRuz/XgS+8fX3N9Af4qPIMfzKgCp4H5TDGe9GGeFPzSsZz80SlPTxXjgwJmC45njzgt2vbQ4b4OAdUK4/vWhO8d8v6EE8fMUsfakXbPpFJeLs2ubM/qdm/la3WP91uWhxXHjoWhyRUq2iJ/+5mA73zwIIo+LoZ/SgvIRjAd1IMvvn98PfgOvAJfhhm8scAKVWDuaRaK8aQ9f7vuPDH6Bj47ZXau7rqYJ66mTDwEDU6lLbCjCK0qTXyl5mnDoeNRxanj3FJbaksTk0faXxHxLrssgPkWB9LnA/MFleXcJozzjwsUvUG0X/QCve51qkMDXp9mtcyOy3rwBfdvVJK7D6/ACSzg3RoruIq5UDeESfEmVclDxnniU82vxMLtceD0hGZWzBNPMM/jSPne2OVatiTKUpY5vY7gc0LdUAWeWM5tH+O2I66AOWw9xT2BuyRVLGdoDHUsVRXOo/c+ZdRXvFfnxWyIV4upFLCl9eAL7h8Zv0QH8Ry8pA2cHzQpGesctVA37ZtklBTgHjyvdSeKY/RZw/kJMk0Y25cSNRWSigQtlULPTw+kzuJPeYEkXjQRpoGZobYsLF79pyd1dMRHInbgFTZqNLhDqiIsTNpoex2WLcy0/X6rHcdMMQvFSd5dWA++4P7xv89deACnmr36uGlL69bRCL6BSZsS6c0TU2TKK5gtWCzgAOOwQcurqk9j8whvziZSMLcq5hbuwBEsYjopUBkqw1yYBGpLA97SRElEmx5MCInBY5vgLk94iKqSWmhIGmkJ4Bi9m4L645J68LyY4wsFYBfUg5feP/6gWWm58IEmKQM89hq7KsZNaKtP5TxxrUZZVkNmMJtjbKrGxLNEbHPJxhqy7lAmbC32ZqeF6lTaknRWcYaFpfLUBh/rwaQycCCJmW15Kstv6jRHyJFry2C1ahkkIW0LO75s61+owxK1y3XqweX9m5YLM2DPFeOjn/iiqCKJ+yKXF8t5Yl/kNsqaSCryxPq5xWTFIaP8KSW0RYxqupaUf0RcTNSSdJZGcKYdYA6kdtrtmyBckfKXwqk0pHpUHlwWaffjNRBYFPUDWa8e3Lt/o0R0CdisKDM89cX0pvRHEfM8ca4t0s2Xx4kgo91MPQJ/0c9MQYq0co8MBh7bz1fio0UUHLR4aAIOvOmoYO6kwlEVODSSTliWtOtH6sPkrtctF9ZtJ9GIerBskvhdVS5cFNv9s1BU0AbdUgdK4FG+dRnjFmDTzniRMdZO1QhzMK355vigbdkpz9P6qjUGE5J2qAcXmwJ20cZUiAD0z+pGMx6xkzJkmEf40Hr4qZfVg2XzF9YOyoV5BjzVkUJngKf8lgNYwKECEHrCNDrWZzMlflS3yBhr/InyoUgBc/lKT4pxVrrC6g1YwcceK3BmNxZcAtz3j5EIpqguh9H6wc011YN75cKDLpFDxuwkrPQmUwW4KTbj9mZTwBwLq4aQMUZbHm1rylJ46dzR0dua2n3RYCWZsiHROeywyJGR7mXKlpryyCiouY56sFkBWEnkEB/raeh/Sw4162KeuAxMQpEkzy5alMY5wamMsWKKrtW2WpEWNnReZWONKWjrdsKZarpFjqCslq773PLmEhM448Pc3+FKr1+94vv/rfw4tEcu+lKTBe4kZSdijBrykwv9vbCMPcLQTygBjzVckSLPRVGslqdunwJ4oegtFOYb4SwxNgWLCmD7T9kVjTv5YDgpo0XBmN34Z/rEHp0sgyz7lngsrm4lvMm2Mr1zNOJYJ5cuxuQxwMGJq/TP5emlb8fsQBZviK4t8hFL+zbhtlpwaRSxQRWfeETjuauPsdGxsBVdO7nmP4xvzSoT29pRl7kGqz+k26B3Oy0YNV+SXbbQas1ctC/GarskRdFpKczVAF1ZXnLcpaMuzVe6lZ2g/1ndcvOVgRG3sdUAY1bKD6achijMPdMxV4muKVorSpiDHituH7rSTs7n/4y5DhRXo4FVBN4vO/zbAcxhENzGbHCzU/98Mcx5e7a31kWjw9FCe/zNeYyQjZsWb1uc7U33pN4Mji6hCLhivqfa9Ss6xLg031AgfesA/l99m9fgvnaF9JoE6bYKmkGNK3aPbHB96w3+DnxFm4hs0drLsk7U8kf/N/CvwQNtllna0rjq61sH8L80HAuvwH1tvBy2ChqWSCaYTaGN19sTvlfzFD6n+iKTbvtayfrfe9ueWh6GJFoxLdr7V72a5ZpvHcCPDzma0wTO4EgbLyedxstO81n57LYBOBzyfsOhUKsW1J1BB5vr/tz8RyqOFylQP9Tvst2JALsC5lsH8PyQ40DV4ANzYa4dedNiKNR1s+x2wwbR7q4/4cTxqEk4LWDebfisuo36JXLiWFjOtLrlNWh3K1rRS4xvHcDNlFnNmWBBAl5SWaL3oPOfnvbr5pdjVnEaeBJSYjuLEkyLLsWhKccadmOphZkOPgVdalj2QpSmfOsADhMWE2ZBu4+EEJI4wKTAuCoC4xwQbWXBltpxbjkXJtKxxabo9e7tyhlgb6gNlSbUpMh+l/FaqzVwewGu8BW1Zx7pTpQDJUjb8tsUTW6+GDXbMn3mLbXlXJiGdggxFAoUrtPS3wE4Nk02UZG2OOzlk7fRs7i95QCLo3E0jtrjnM7SR3uS1p4qtS2nJ5OwtQVHgOvArLBFijZUV9QtSl8dAY5d0E0hM0w3HS2DpIeB6m/A1+HfhJcGUq4sOxH+x3f5+VO+Ds9rYNI7zPXOYWPrtf8bYMx6fuOAX5jzNR0PdsuON+X1f7EERxMJJoU6GkTEWBvVolVlb5lh3tKCg6Wx1IbaMDdJ+9sUCc5KC46hKGCk3IVOS4TCqdBNfUs7Kd4iXf2RjnT/LLysJy3XDcHLh/vde3x8DoGvwgsa67vBk91G5Pe/HbOe7xwym0NXbtiuuDkGO2IJDh9oQvJ4cY4vdoqLDuoH9Zl2F/ofsekn8lkuhIlhQcffUtSjytFyp++p6NiE7Rqx/lodgKVoceEp/CP4FfjrquZaTtj2AvH5K/ywpn7M34K/SsoYDAdIN448I1/0/wveW289T1/lX5xBzc8N5IaHr0XMOQdHsIkDuJFifj20pBm5jzwUv9e2FhwRsvhAbalCIuIw3bhJihY3p6nTFFIZgiSYjfTf3aXuOjmeGn4bPoGvwl+CFzTRczBIuHBEeImHc37/lGfwZR0cXzVDOvaKfNHvwe+suZ771K/y/XcBlsoN996JpBhoE2toYxOznNEOS5TJc6Id5GEXLjrWo+LEWGNpPDU4WAwsIRROu+1vM+0oW37z/MBN9kqHnSArwPfgFJ7Cq/Ai3Ie7g7ncmI09v8sjzw9mzOAEXoIHxURueaAce5V80f/DOuuZwHM8vsMb5wBzOFWM7wymTXPAEvm4vcFpZ2ut0VZRjkiP2MlmLd6DIpbGSiHOjdnUHN90hRYmhTnmvhzp1iKDNj+b7t5hi79lWGwQ+HN9RsfFMy0FXbEwhfuczKgCbyxYwBmcFhhvo/7a44v+i3XWcwDP86PzpGQYdWh7csP5dBvZ1jNzdxC8pBGuxqSW5vw40nBpj5JhMwvOzN0RWqERHMr4Lv1kWX84xLR830G3j6yqZ1a8UstTlW+qJPOZ+sZ7xZPKTJLhiNOAFd6tk+jrTH31ncLOxid8+nzRb128HhUcru/y0Wn6iT254YPC6FtVSIMoW2sk727AhvTtrWKZTvgsmckfXYZWeNRXx/3YQ2OUxLDrbHtN11IwrgXT6c8dATDwLniYwxzO4RzuQqTKSC5gAofMZ1QBK3zQ4JWobFbcvJm87FK+6JXrKahLn54m3p+McXzzYtP8VF/QpJuh1OwieElEoI1pRxPS09FBrkq2tWCU59+HdhNtTIqKm8EBrw2RTOEDpG3IKo2Y7mFdLm3ZeVjYwVw11o/oznceMve4CgMfNym/utA/d/ILMR7gpXzRy9eDsgLcgbs8O2Va1L0zzIdwGGemTBuwROHeoMShkUc7P+ISY3KH5ZZeWqO8mFTxQYeXTNuzvvK5FGPdQfuu00DwYFY9dyhctEt+OJDdnucfpmyhzUJzfsJjr29l8S0bXBfwRS9ZT26tmMIdZucch5ZboMz3Nio3nIOsYHCGoDT4kUA9MiXEp9Xsui1S8th/kbWIrMBxDGLodWUQIWcvnXy+9M23xPiSMOiRPqM+YMXkUN3gXFrZJwXGzUaMpJfyRS9ZT0lPe8TpScuRlbMHeUmlaKDoNuy62iWNTWNFYjoxFzuJs8oR+RhRx7O4SVNSXpa0ZJQ0K1LAHDQ+D9IepkMXpcsq5EVCvClBUIzDhDoyKwDw1Lc59GbTeORivugw1IcuaEOaGWdNm+Ps5fQ7/tm0DjMegq3yM3vb5j12qUId5UZD2oxDSEWOZMSqFl/W+5oynWDa/aI04tJRQ2eTXusg86SQVu/nwSYwpW6wLjlqIzwLuxGIvoAvul0PS+ZNz0/akp/pniO/8JDnGyaCkzbhl6YcqmK/69prxPqtpx2+Km9al9sjL+rwMgHw4jE/C8/HQ3m1vBuL1fldbzd8mOueVJ92syqdEY4KJjSCde3mcRw2TA6szxedn+zwhZMps0XrqEsiUjnC1hw0TELC2Ek7uAAdzcheXv1BYLagspxpzSAoZZUsIzIq35MnFQ9DOrlNB30jq3L4pkhccKUAA8/ocvN1Rzx9QyOtERs4CVsJRK/DF71kPYrxYsGsm6RMh4cps5g1DOmM54Ly1ii0Hd3Y/BMk8VWFgBVmhqrkJCPBHAolwZaWzLR9Vb7bcWdX9NyUYE+uB2BKfuaeBUcjDljbYVY4DdtsVWvzRZdWnyUzDpjNl1Du3aloAjVJTNDpcIOVVhrHFF66lLfJL1zJr9PQ2nFJSBaKoDe+sAvLufZVHVzYh7W0h/c6AAZ+7Tvj6q9j68G/cTCS/3n1vLKHZwNi+P+pS0WkZNMBMUl+LDLuiE4omZy71r3UFMwNJV+VJ/GC5ixVUkBStsT4gGKh0Gm4Oy3qvq7Lbmq24nPdDuDR9deR11XzP4vFu3TYzfnIyiSVmgizUYGqkIXNdKTY9pgb9D2Ix5t0+NHkVzCdU03suWkkVZAoCONCn0T35gAeW38de43mf97sMOpSvj4aa1KYUm58USI7Wxxes03bAZdRzk6UtbzMaCQ6IxO0dy7X+XsjoD16hpsBeGz9dfzHj+R/Hp8nCxZRqkEDTaCKCSywjiaoMJ1TITE9eg7Jqnq8HL6gDwiZb0u0V0Rr/rmvqjxKuaLCX7ZWXTvAY+uvm3z8CP7nzVpngqrJpZKwWnCUjIviYVlirlGOzPLI3SMVyp/elvBUjjDkNhrtufFFErQ8pmdSlbK16toBHlt/HV8uHMX/vEGALkV3RJREiSlopxwdMXOZPLZ+ix+kAHpMKIk8UtE1ygtquttwxNhphrIZ1IBzjGF3IIGxGcBj6q8bHJBG8T9vdsoWrTFEuebEZuVxhhClH6P5Zo89OG9fwHNjtNQTpD0TG9PJLEYqvEY6Rlxy+ZZGfL0Aj62/bnQCXp//eeM4KzfQVJbgMQbUjlMFIm6TpcfWlZje7NBSV6IsEVmumWIbjiloUzQX9OzYdo8L1wjw2PrrpimONfmfNyzKklrgnEkSzT5QWYQW40YShyzqsRmMXbvVxKtGuYyMKaU1ugenLDm5Ily4iT14fP11Mx+xJv+zZ3MvnfdFqxU3a1W/FTB4m3Qfsyc1XUcdVhDeUDZXSFHHLQj/Y5jtC7ZqM0CXGwB4bP11i3LhOvzPGygYtiUBiwQV/4wFO0majijGsafHyRLu0yG6q35cL1rOpVxr2s5cM2jJYMCdc10Aj6q/blRpWJ//+dmm5psMl0KA2+AFRx9jMe2WbC4jQxnikd4DU8TwUjRVacgdlhmr3bpddzuJ9zXqr2xnxJfzP29RexdtjDVZqzkqa6PyvcojGrfkXiJ8SEtml/nYskicv0ivlxbqjemwUjMw5evdg8fUX9nOiC/lf94Q2i7MURk9nW1MSj5j8eAyV6y5CN2S6qbnw3vdA1Iwq+XOSCl663udN3IzLnrt+us25cI1+Z83SXQUldqQq0b5XOT17bGpLd6ssN1VMPf8c+jG8L3NeCnMdF+Ra3fRa9dft39/LuZ/3vwHoHrqGmQFafmiQw6eyzMxS05K4bL9uA+SKUQzCnSDkqOGokXyJvbgJ/BHI+qvY69//4rl20NsmK2ou2dTsyIALv/91/8n3P2Aao71WFGi8KKv1fRC5+J67Q/507/E/SOshqN5TsmYIjVt+kcjAx98iz/4SaojbIV1rexE7/C29HcYD/DX4a0rBOF5VTu7omsb11L/AWcVlcVZHSsqGuXLLp9ha8I//w3Mv+T4Ew7nTBsmgapoCrNFObIcN4pf/Ob/mrvHTGqqgAupL8qWjWPS9m/31jAe4DjA+4+uCoQoT/zOzlrNd3qd4SdphFxsUvYwGWbTWtISc3wNOWH+kHBMfc6kpmpwPgHWwqaSUG2ZWWheYOGQGaHB+eQ/kn6b3pOgLV+ODSn94wDvr8Bvb70/LLuiPPEr8OGVWfDmr45PZyccEmsVXZGe1pRNX9SU5+AVQkNTIVPCHF/jGmyDC9j4R9LfWcQvfiETmgMMUCMN1uNCakkweZsowdYobiMSlnKA93u7NzTXlSfe+SVbfnPQXmg9LpYAQxpwEtONyEyaueWM4FPjjyjG3uOaFmBTWDNgBXGEiQpsaWhnAqIijB07Dlsy3fUGeP989xbWkyf+FF2SNEtT1E0f4DYYVlxFlbaSMPIRMk/3iMU5pME2SIWJvjckciebkQuIRRyhUvkHg/iUljG5kzVog5hV7vIlCuBrmlhvgPfNHQM8lCf+FEGsYbMIBC0qC9a0uuy2wLXVbLBaP5kjHokCRxapkQyzI4QEcwgYHRZBp+XEFTqXFuNVzMtjXLJgX4gAid24Hjwc4N3dtVSe+NNiwTrzH4WVUOlDobUqr1FuAgYllc8pmzoVrELRHSIW8ViPxNy4xwjBpyR55I6J220qQTZYR4guvUICJiSpr9gFFle4RcF/OMB7BRiX8sSfhpNSO3lvEZCQfLUVTKT78Ek1LRLhWN+yLyTnp8qWUZ46b6vxdRGXfHVqx3eI75YaLa4iNNiK4NOW7wPW6lhbSOF9/M9qw8e/aoB3d156qTzxp8pXx5BKAsYSTOIIiPkp68GmTq7sZtvyzBQaRLNxIZ+paozHWoLFeExIhRBrWitHCAHrCF7/thhD8JhYz84wg93QRV88wLuLY8zF8sQ36qF1J455bOlgnELfshKVxYOXKVuKx0jaj22sczTQqPqtV/XDgpswmGTWWMSDw3ssyUunLLrVPGjYRsH5ggHeHSWiV8kT33ycFSfMgkoOK8apCye0J6VW6GOYvffgU9RWsukEi2kUV2nl4dOYUzRik9p7bcA4ggdJ53LxKcEe17B1R8eqAd7dOepV8sTXf5lhejoL85hUdhDdknPtKHFhljOT+bdq0hxbm35p2nc8+Ja1Iw+tJykgp0EWuAAZYwMVwac5KzYMslhvgHdHRrxKnvhTYcfKsxTxtTETkjHO7rr3zjoV25lAQHrqpV7bTiy2aXMmUhTBnKS91jhtR3GEoF0oLnWhWNnYgtcc4N0FxlcgT7yz3TgNIKkscx9jtV1ZKpWW+Ub1tc1eOv5ucdgpx+FJy9pgbLE7xDyXb/f+hLHVGeitHOi6A7ybo3sF8sS7w7cgdk0nJaOn3hLj3uyD0Zp5pazFIUXUpuTTU18d1EPkDoX8SkmWTnVIozEdbTcZjoqxhNHf1JrSS/AcvHjZ/SMHhL/7i5z+POsTUh/8BvNfYMTA8n+yU/MlTZxSJDRStqvEuLQKWwDctMTQogUDyQRoTQG5Kc6oQRE1yV1jCA7ri7jdZyK0sYTRjCR0Hnnd+y7nHxNgTULqw+8wj0mQKxpYvhjm9uSUxg+TTy7s2GtLUGcywhXSKZN275GsqlclX90J6bRI1aouxmgL7Q0Nen5ziM80SqMIo8cSOo+8XplT/5DHNWsSUr/6lLN/QQ3rDyzLruEW5enpf7KqZoShEduuSFOV7DLX7Ye+GmXb6/hnNNqKsVXuMDFpb9Y9eH3C6NGEzuOuI3gpMH/I6e+zDiH1fXi15t3vA1czsLws0TGEtmPEJdiiFPwlwKbgLHAFk4P6ZyPdymYYHGE0dutsChQBl2JcBFlrEkY/N5bQeXQ18gjunuMfMfsBlxJSx3niO485fwO4fGD5T/+3fPQqkneWVdwnw/3bMPkW9Wbqg+iC765Zk+xcT98ibKZc2EdgHcLoF8cSOo/Oc8fS+OyEULF4g4sJqXVcmfMfsc7A8v1/yfGXmL9I6Fn5pRwZhsPv0TxFNlAfZCvG+Oohi82UC5f/2IsJo0cTOm9YrDoKhFPEUr/LBYTUNht9zelHXDqwfPCIw4owp3mOcIQcLttWXFe3VZ/j5H3cIc0G6oPbCR+6Y2xF2EC5cGUm6wKC5tGEzhsWqw5hNidUiKX5gFWE1GXh4/Qplw4sVzOmx9QxU78g3EF6wnZlEN4FzJ1QPSLEZz1KfXC7vd8ssGdIbNUYpVx4UapyFUHzJoTOo1McSkeNn1M5MDQfs4qQuhhX5vQZFw8suwWTcyYTgioISk2YdmkhehG4PkE7w51inyAGGaU+uCXADabGzJR1fn3lwkty0asIo8cROm9Vy1g0yDxxtPvHDAmpu+PKnM8Ix1wwsGw91YJqhteaWgjYBmmQiebmSpwKKzE19hx7jkzSWOm66oPbzZ8Yj6kxVSpYjVAuvLzYMCRo3oTQecOOjjgi3NQ4l9K5/hOGhNTdcWVOTrlgYNkEXINbpCkBRyqhp+LdRB3g0OU6rMfW2HPCFFMV9nSp+uB2woepdbLBuJQyaw/ZFysXrlXwHxI0b0LovEkiOpXGA1Ijagf+KUNC6rKNa9bQnLFqYNkEnMc1uJrg2u64ELPBHpkgWbmwKpJoDhMwNbbGzAp7Yg31wS2T5rGtzit59PrKhesWG550CZpHEzpv2NGRaxlNjbMqpmEIzygJqQfjypycs2pg2cS2RY9r8HUqkqdEgKTWtWTKoRvOBPDYBltja2SO0RGjy9UHtxwRjA11ujbKF+ti5cIR9eCnxUg6owidtyoU5tK4NLji5Q3HCtiyF2IqLGYsHViOXTXOYxucDqG0HyttqYAKqYo3KTY1ekyDXRAm2AWh9JmsVh/ccg9WJ2E8YjG201sPq5ULxxX8n3XLXuMInbft2mk80rRGjCGctJ8/GFdmEQ9Ug4FlE1ll1Y7jtiraqm5Fe04VV8lvSVBL8hiPrfFVd8+7QH3Qbu2ipTVi8cvSGivc9cj8yvH11YMHdNSERtuOslM97feYFOPKzGcsI4zW0YGAbTAOaxCnxdfiYUmVWslxiIblCeAYr9VYR1gM7GmoPrilunSxxeT3DN/2eBQ9H11+nk1adn6VK71+5+Jfct4/el10/7KBZfNryUunWSCPxPECk1rdOv1WVSrQmpC+Tl46YD3ikQYcpunSQgzVB2VHFhxHVGKDgMEY5GLlQnP7FMDzw7IacAWnO6sBr12u+XanW2AO0wQ8pknnFhsL7KYIqhkEPmEXFkwaN5KQphbkUmG72wgw7WSm9RiL9QT925hkjiVIIhphFS9HKI6/8QAjlpXqg9W2C0apyaVDwKQwrwLY3j6ADR13ZyUNByQXHQu6RY09Hu6zMqXRaNZGS/KEJs0cJEe9VH1QdvBSJv9h09eiRmy0V2uJcqHcShcdvbSNg5fxkenkVprXM9rDVnX24/y9MVtncvbKY706anNl3ASll9a43UiacVquXGhvq4s2FP62NGKfQLIQYu9q1WmdMfmUrDGt8eDS0cXozH/fjmUH6Jruvm50hBDSaEU/2Ru2LEN/dl006TSc/g7tfJERxGMsgDUEr104pfWH9lQaN+M4KWQjwZbVc2rZVNHsyHal23wZtIs2JJqtIc/WLXXRFCpJkfE9jvWlfFbsNQ9pP5ZBS0zKh4R0aMFj1IjTcTnvi0Zz2rt7NdvQb2mgbju1plsH8MmbnEk7KbK0b+wC2iy3aX3szW8xeZvDwET6hWZYwqTXSSG+wMETKum0Dq/q+x62gt2ua2ppAo309TRk9TPazfV3qL9H8z7uhGqGqxNVg/FKx0HBl9OVUORn8Q8Jx9gFttGQUDr3tzcXX9xGgN0EpzN9mdZ3GATtPhL+CjxFDmkeEU6x56kqZRusLzALXVqkCN7zMEcqwjmywDQ6OhyUe0Xao1Qpyncrg6wKp9XfWDsaZplElvQ/b3sdweeghorwBDlHzgk1JmMc/wiERICVy2VJFdMjFuLQSp3S0W3+sngt2njwNgLssFGVQdJ0tu0KH4ky1LW4yrbkuaA6Iy9oz/qEMMXMMDWyIHhsAyFZc2peV9hc7kiKvfULxCl9iddfRK1f8kk9qvbdOoBtOg7ZkOZ5MsGrSHsokgLXUp9y88smniwWyuFSIRVmjplga3yD8Uij5QS1ZiM4U3Qw5QlSm2bXjFe6jzzBFtpg+/YBbLAWG7OPynNjlCw65fukGNdkJRf7yM1fOxVzbxOJVocFoYIaGwH22mIQkrvu1E2nGuebxIgW9U9TSiukPGU+Lt++c3DJPKhyhEEbXCQLUpae2exiKy6tMPe9mDRBFCEMTWrtwxN8qvuGnt6MoihKWS5NSyBhbH8StXoAz8PLOrRgLtOT/+4vcu+7vDLnqNvztOq7fmd8sMmY9Xzn1zj8Dq8+XVdu2Nv0IIySgEdQo3xVHps3Q5i3fLFsV4aiqzAiBhbgMDEd1uh8qZZ+lwhjkgokkOIv4xNJmyncdfUUzgB4oFMBtiu71Xumpz/P+cfUP+SlwFExwWW62r7b+LSPxqxn/gvMZ5z9C16t15UbNlq+jbGJtco7p8wbYlL4alSyfWdeuu0j7JA3JFNuVAwtst7F7FhWBbPFNKIUORndWtLraFLmMu7KFVDDOzqkeaiN33YAW/r76wR4XDN/yN1z7hejPau06EddkS/6XThfcz1fI/4K736fO48vlxt2PXJYFaeUkFS8U15XE3428xdtn2kc8GQlf1vkIaNRRnOMvLTWrZbElEHeLWi1o0dlKPAh1MVgbbVquPJ5+Cr8LU5/H/+I2QlHIU2ClXM9G8v7Rr7oc/hozfUUgsPnb3D+I+7WF8kNO92GY0SNvuxiE+2Bt8prVJTkzE64sfOstxuwfxUUoyk8VjcTlsqe2qITSFoSj6Epd4KsT6BZOWmtgE3hBfir8IzZDwgV4ZTZvD8VvPHERo8v+vL1DASHTz/i9OlKueHDjK5Rnx/JB1Vb1ioXdBra16dmt7dgik10yA/FwJSVY6XjA3oy4SqM2frqDPPSRMex9qs3XQtoWxMj7/Er8GWYsXgjaVz4OYumP2+9kbxvny/6kvWsEBw+fcb5bInc8APdhpOSs01tEqIkoiZjbAqKMruLbJYddHuHFRIyJcbdEdbl2sVLaySygunutBg96Y2/JjKRCdyHV+AEFtTvIpbKIXOamknYSiB6KV/0JetZITgcjjk5ZdaskBtWO86UF0ap6ozGXJk2WNiRUlCPFir66lzdm/SLSuK7EUdPz8f1z29Skq6F1fXg8+5UVR6bszncP4Tn4KUkkdJ8UFCY1zR1i8RmL/qQL3rlei4THG7OODlnKko4oI01kd3CaM08Ia18kC3GNoVaO9iDh+hWxSyTXFABXoau7Q6q9OxYg/OVEMw6jdbtSrJ9cBcewGmaZmg+bvkUnUUaGr+ZfnMH45Ivevl61hMcXsxYLFTu1hTm2zViCp7u0o5l+2PSUh9bDj6FgYypufBDhqK2+oXkiuHFHR3zfj+9PtA8oR0xnqX8qn+sx3bFODSbbF0X8EUvWQ8jBIcjo5bRmLOljDNtcqNtOe756h3l0VhKa9hDd2l1eqmsnh0MNMT/Cqnx6BInumhLT8luljzQ53RiJeA/0dxe5NK0o2fA1+GLXr6eNQWHNUOJssQaTRlGpLHKL9fD+IrQzTOMZS9fNQD4AnRNVxvTdjC+fJdcDDWQcyB00B0t9BDwTxXgaAfzDZ/DBXzRnfWMFRwuNqocOmX6OKNkY63h5n/fFcB28McVHqnXZVI27K0i4rDLNE9lDKV/rT+udVbD8dFFu2GGZ8mOt0kAXcoX3ZkIWVtw+MNf5NjR2FbivROHmhV1/pj2egv/fMGIOWTIWrV3Av8N9imV9IWml36H6cUjqEWNv9aNc+veb2sH46PRaHSuMBxvtW+twxctq0z+QsHhux8Q7rCY4Ct8lqsx7c6Sy0dl5T89rIeEuZKoVctIk1hNpfavER6yyH1Vvm3MbsUHy4ab4hWr/OZPcsRBphnaV65/ZcdYPNNwsjN/djlf9NqCw9U5ExCPcdhKxUgLSmfROpLp4WSUr8ojdwbncbvCf+a/YzRaEc6QOvXcGO256TXc5Lab9POvB+AWY7PigWYjzhifbovuunzRawsO24ZqQQAqguBtmpmPB7ysXJfyDDaV/aPGillgz1MdQg4u5MYaEtBNNHFjkRlSpd65lp4hd2AVPTfbV7FGpyIOfmNc/XVsPfg7vzaS/3nkvLL593ANLvMuRMGpQIhiF7kUEW9QDpAUbTWYBcbp4WpacHHY1aacqQyjGZS9HI3yCBT9kUZJhVOD+zUDvEH9ddR11fzPcTDQ5TlgB0KwqdXSavk9BC0pKp0WmcuowSw07VXmXC5guzSa4p0UvRw2lbDiYUx0ExJJRzWzi6Gm8cnEkfXXsdcG/M/jAJa0+bmCgdmQ9CYlNlSYZOKixmRsgiFxkrmW4l3KdFKv1DM8tk6WxPYJZhUUzcd8Kdtgrw/gkfXXDT7+avmfVak32qhtkg6NVdUS5wgkru1YzIkSduTW1FDwVWV3JQVJVuieTc0y4iDpFwc7/BvSalvKdQM8sv662cevz/+8sQVnjVAT0W2wLllw1JiMhJRxgDjCjLQsOzSFSgZqx7lAW1JW0e03yAD3asC+GD3NbQhbe+mN5GXH1F83KDOM4n/e5JIuH4NpdQARrFPBVptUNcjj4cVMcFSRTE2NpR1LEYbYMmfWpXgP9KejaPsLUhuvLCsVXznAG9dfx9SR1ud/3hZdCLHb1GMdPqRJgqDmm76mHbvOXDtiO2QPUcKo/TWkQ0i2JFXpBoo7vij1i1Lp3ADAo+qvG3V0rM//vFnnTE4hxd5Ka/Cor5YEdsLVJyKtDgVoHgtW11pWSjolPNMnrlrVj9Fv2Qn60twMwKPqr+N/wvr8z5tZcDsDrv06tkqyzESM85Ycv6XBWA2birlNCXrI6VbD2lx2L0vQO0QVTVVLH4SE67fgsfVXv8n7sz7/85Z7cMtbE6f088wSaR4kCkCm10s6pKbJhfqiUNGLq+0gLWC6eUAZFPnLjwqtKd8EwGvWX59t7iPW4X/eAN1svgRVSY990YZg06BD1ohLMtyFTI4pKTJsS9xREq9EOaPWiO2gpms7397x6nQJkbh+Fz2q/rqRROX6/M8bJrqlVW4l6JEptKeUFuMYUbtCQ7CIttpGc6MY93x1r1vgAnRXvY5cvwWPqb9uWQm+lP95QxdNMeWhOq1x0Db55C7GcUv2ZUuN6n8iKzsvOxibC//Yfs9Na8r2Rlz02vXXDT57FP/zJi66/EJSmsJKa8QxnoqW3VLQ+jZVUtJwJ8PNX1NQCwfNgdhhHD9on7PdRdrdGPF28rJr1F+3LBdeyv+8yYfLoMYet1vX4upNAjVvwOUWnlNXJXlkzk5Il6kqeoiL0C07qno+/CYBXq/+utlnsz7/Mzvy0tmI4zm4ag23PRN3t/CWryoUVJGm+5+K8RJ0V8Hc88/XHUX/HfiAq7t+BH+x6v8t438enWmdJwFA6ZINriLGKv/95f8lT9/FnyA1NMVEvQyaXuu+gz36f/DD73E4pwqpLcvm/o0Vle78n//+L/NPvoefp1pTJye6e4A/D082FERa5/opeH9zpvh13cNm19/4v/LDe5xMWTi8I0Ta0qKlK27AS/v3/r+/x/2GO9K2c7kVMonDpq7//jc5PKCxeNPpFVzaRr01wF8C4Pu76hXuX18H4LduTr79guuFD3n5BHfI+ZRFhY8w29TYhbbLi/bvBdqKE4fUgg1pBKnV3FEaCWOWyA+m3WpORZr/j+9TKJtW8yBTF2/ZEODI9/QavHkVdGFp/Pjn4Q+u5hXapsP5sOH+OXXA1LiKuqJxiMNbhTkbdJTCy4llEt6NnqRT4dhg1V3nbdrm6dYMecA1yTOL4PWTE9L5VzPFlLBCvlG58AhehnN4uHsAYinyJ+AZ/NkVvELbfOBUuOO5syBIEtiqHU1k9XeISX5bsimrkUUhnGDxourN8SgUsCZVtKyGbyGzHXdjOhsAvOAswSRyIBddRdEZWP6GZhNK/yjwew9ehBo+3jEADu7Ay2n8mDc+TS7awUHg0OMzR0LABhqLD4hJEh/BEGyBdGlSJoXYXtr+3HS4ijzVpgi0paWXtdruGTknXBz+11qT1Q2inxaTzQCO46P3lfLpyS4fou2PH/PupwZgCxNhGlj4IvUuWEsTkqMWm6i4xCSMc9N1RDQoCVcuGItJ/MRWefais+3synowi/dESgJjkilnWnBTGvRWmaw8oR15257t7CHmCf8HOn7cwI8+NQBXMBEmAa8PMRemrNCEhLGEhDQKcGZWS319BX9PFBEwGTbRBhLbDcaV3drFcDqk5kCTd2JF1Wp0HraqBx8U0wwBTnbpCadwBA/gTH/CDrcCs93LV8E0YlmmcyQRQnjBa8JESmGUfIjK/7fkaDJpmD2QptFNVJU1bbtIAjjWQizepOKptRjbzR9Kag6xZmMLLjHOtcLT3Tx9o/0EcTT1XN3E45u24AiwEypDJXihKjQxjLprEwcmRKclaDNZCVqr/V8mYWyFADbusiY5hvgFoU2vio49RgJLn5OsReRFN6tabeetiiy0V7KFHT3HyZLx491u95sn4K1QQSPKM9hNT0wMVvAWbzDSVdrKw4zRjZMyJIHkfq1VAVCDl/bUhNKlGq0zGr05+YAceXVPCttVk0oqjVwMPt+BBefx4yPtGVkUsqY3CHDPiCM5ngupUwCdbkpd8kbPrCWHhkmtIKLEetF2499eS1jZlIPGYnlcPXeM2KD9vLS0bW3ktYNqUllpKLn5ZrsxlIzxvDu5eHxzGLctkZLEY4PgSOg2IUVVcUONzUDBEpRaMoXNmUc0tFZrTZquiLyKxrSm3DvIW9Fil+AkhXu5PhEPx9mUNwqypDvZWdKlhIJQY7vn2OsnmBeOWnYZ0m1iwbbw1U60by5om47iHRV6fOgzjMf/DAZrlP40Z7syxpLK0lJ0gqaAK1c2KQKu7tabTXkLFz0sCftuwX++MyNeNn68k5Buq23YQhUh0SNTJa1ioQ0p4nUG2y0XilF1JqODqdImloPS4Bp111DEWT0jJjVv95uX9BBV7eB3bUWcu0acSVM23YZdd8R8UbQUxJ9wdu3oMuhdt929ME+mh6JXJ8di2RxbTi6TbrDquqV4aUKR2iwT6aZbyOwEXN3DUsWr8Hn4EhwNyHuXHh7/pdaUjtR7vnDh/d8c9xD/s5f501eQ1+CuDiCvGhk1AN/4Tf74RfxPwD3toLarR0zNtsnPzmS64KIRk861dMWCU8ArasG9T9H0ZBpsDGnjtAOM2+/LuIb2iIUGXNgl5ZmKD/Tw8TlaAuihaFP5yrw18v4x1898zIdP+DDAX1bM3GAMvPgRP/cJn3zCW013nrhHkrITyvYuwOUkcHuKlRSW5C6rzIdY4ppnF7J8aAJbQepgbJYBjCY9usGXDKQxq7RZfh9eg5d1UHMVATRaD/4BHK93/1iAgYZ/+jqPn8Dn4UExmWrpa3+ZOK6MvM3bjwfzxNWA2dhs8+51XHSPJiaAhGSpWevEs5xHLXcEGFXYiCONySH3fPWq93JIsBiSWvWyc3CAN+EcXoT7rCSANloPPoa31rt/5PUA/gp8Q/jDD3hyrjzlR8VkanfOvB1XPubt17vzxAfdSVbD1pzAnfgyF3ycadOTOTXhpEUoLC1HZyNGW3dtmjeXgr2r56JNmRwdNNWaQVBddd6rh4MhviEB9EFRD/7RGvePvCbwAL4Mx/D6M541hHO4D3e7g6PafdcZVw689z7NGTwo5om7A8sPhccT6qKcl9NJl9aM/9kX+e59Hh1yPqGuCCZxuITcsmNaJ5F7d0q6J3H48TO1/+M57085q2icdu2U+W36Ldllz9Agiv4YGljoEN908EzvDOrBF98/vtJwCC/BF2AG75xxEmjmMIcjxbjoaxqOK3/4hPOZzhMPBpYPG44CM0dTVm1LjLtUWWVz1Bcf8tEx0zs8O2A2YVHRxKYOiy/aOVoAaMu0i7ubu43njjmd4ibMHU1sIDHaQNKrZND/FZYdk54oCXetjq7E7IVl9eAL7t+oHnwXXtLx44czzoRFHBztYVwtH1d+NOMkupZ5MTM+gUmq90X+Bh9zjRlmaQ+m7YMqUL/veemcecAtOJ0yq1JnVlN27di2E0+Klp1tAJ4KRw1eMI7aJjsO3R8kPSI3fUFXnIOfdQe86sIIVtWDL7h//Ok6vj8vwDk08NEcI8zz7OhBy+WwalzZeZ4+0XniRfst9pAJqQHDGLzVQ2pheZnnv1OWhwO43/AgcvAEXEVVpa4db9sGvNK8wjaENHkfFQ4Ci5i7dqnQlPoLQrHXZDvO3BIXZbJOBrOaEbML6sFL798I4FhKihjHMsPjBUZYCMFr6nvaArxqXPn4lCa+cHfSa2cP27g3Z3ziYTRrcbQNGLQmGF3F3cBdzzzX7AILx0IB9rbwn9kx2G1FW3Inic+ZLIsVvKR8Zwfj0l1fkqo8LWY1M3IX14OX3r9RKTIO+d9XzAI8qRPGPn/4NC2n6o4rN8XJ82TOIvuVA8zLKUHRFgBCetlDZlqR1gLKjS39xoE7Bt8UvA6BxuEDjU3tFsEijgA+615tmZkXKqiEENrh41iLDDZNq4pKTWR3LZfnos81LOuNa15cD956vLMsJd1rqYp51gDUQqMYm2XsxnUhD2jg1DM7SeuJxxgrmpfISSXVIJIS5qJJSvJPEQ49DQTVIbYWJ9QWa/E2+c/oPK1drmC7WSfJRNKBO5Yjvcp7Gc3dmmI/Xh1kDTEuiSnWqQf37h+fTMhGnDf6dsS8SQfQWlqqwXXGlc/PEZ/SC5mtzIV0nAshlQdM/LvUtYutrEZ/Y+EAFtq1k28zQhOwLr1AIeANzhF8t9qzTdZf2qRKO6MWE9ohBYwibbOmrFtNmg3mcS+tB28xv2uKd/agYCvOP+GkSc+0lr7RXzyufL7QbkUpjLjEWFLqOIkAGu2B0tNlO9Eau2W1qcOUvVRgKzypKIQZ5KI3q0MLzqTNRYqiZOqmtqloIRlmkBHVpHmRYV6/HixbO6UC47KOFJnoMrVyr7wYz+SlW6GUaghYbY1I6kkxA2W1fSJokUdSh2LQ1GAimRGm0MT+uu57H5l7QgOWxERpO9moLRPgTtquWCfFlGlIjQaRly9odmzMOWY+IBO5tB4sW/0+VWGUh32qYk79EidWKrjWuiLpiVNGFWFRJVktyeXWmbgBBzVl8anPuXyNJlBJOlKLTgAbi/EYHVHxWiDaVR06GnHQNpJcWcK2jJtiCfG2sEHLzuI66sGrMK47nPIInPnu799935aOK2cvmvubrE38ZzZjrELCmXM2hM7UcpXD2oC3+ECVp7xtIuxptJ0jUr3sBmBS47TVxlvJ1Sqb/E0uLdvLj0lLr29ypdd/eMX3f6lrxGlKwKQxEGvw0qHbkbwrF3uHKwVENbIV2wZ13kNEF6zD+x24aLNMfDTCbDPnEikZFyTNttxWBXDaBuM8KtI2rmaMdUY7cXcUPstqTGvBGSrFWIpNMfbdea990bvAOC1YX0qbc6smDS1mPxSJoW4fwEXvjMmhlijDRq6qale6aJEuFGoppYDoBELQzLBuh/mZNx7jkinv0EtnUp50lO9hbNK57lZaMAWuWR5Yo9/kYwcYI0t4gWM47Umnl3YmpeBPqSyNp3K7s2DSAS/39KRuEN2bS4xvowV3dFRMx/VFcp2Yp8w2nTO9hCXtHG1kF1L4KlrJr2wKfyq77R7MKpFKzWlY9UkhYxyHWW6nBWPaudvEAl3CGcNpSXPZ6R9BbBtIl6cHL3gIBi+42CYXqCx1gfGWe7Ap0h3luyXdt1MKy4YUT9xSF01G16YEdWsouW9mgDHd3veyA97H+Ya47ZmEbqMY72oPztCGvK0onL44AvgC49saZKkWRz4veWljE1FHjbRJaWv6ZKKtl875h4CziFCZhG5rx7tefsl0aRT1bMHZjm8dwL/6u7wCRysaQblQoG5yAQN5zpatMNY/+yf8z+GLcH/Qn0iX2W2oEfXP4GvwQHuIL9AYGnaO3zqAX6946nkgqZNnUhx43DIdQtMFeOPrgy/y3Yd85HlJWwjLFkU3kFwq28xPnuPhMWeS+tDLV9Otllq7pQCf3uXJDN9wFDiUTgefHaiYbdfi3b3u8+iY6TnzhgehI1LTe8lcd7s1wJSzKbahCRxKKztTLXstGAiu3a6rPuQs5pk9TWAan5f0BZmGf7Ylxzzk/A7PAs4QPPPAHeFQ2hbFHszlgZuKZsJcUmbDC40sEU403cEjczstOEypa+YxevL4QBC8oRYqWdK6b7sK25tfE+oDZgtOQ2Jg8T41HGcBE6fTWHn4JtHcu9S7uYgU5KSCkl/mcnq+5/YBXOEr6lCUCwOTOM1taOI8mSxx1NsCXBEmLKbMAg5MkwbLmpBaFOPrNSlO2HnLiEqW3tHEwd8AeiQLmn+2gxjC3k6AxREqvKcJbTEzlpLiw4rNZK6oJdidbMMGX9FULKr0AkW+2qDEPBNNm5QAt2Ik2nftNWHetubosHLo2nG4vQA7GkcVCgVCgaDixHqo9UUn1A6OshapaNR/LPRYFV8siT1cCtJE0k/3WtaNSuUZYKPnsVIW0xXWnMUxq5+En4Kvw/MqQmVXnAXj9Z+9zM98zM/Agy7F/qqj2Nh67b8HjFnPP3iBn/tkpdzwEJX/whIcQUXOaikeliCRGUk7tiwF0rItwMEhjkZ309hikFoRAmLTpEXWuHS6y+am/KB/fM50aLEhGnSMwkpxzOov4H0AvgovwJ1iGzDLtJn/9BU+fAINfwUe6FHSLhu83viV/+/HrOePX+STT2B9uWGbrMHHLldRBlhS/CJQmcRxJFqZica01XixAZsYiH1uolZxLrR/SgxVIJjkpQP4PE9sE59LKLr7kltSBogS5tyszzH8Fvw8/AS8rNOg0xUS9fIaHwb+6et8Q/gyvKRjf5OusOzGx8evA/BP4IP11uN/grca5O0lcsPLJ5YjwI4QkJBOHa0WdMZYGxPbh2W2nR9v3WxEWqgp/G3+6VZbRLSAAZ3BhdhAaUL33VUSw9yjEsvbaQ9u4A/gGXwZXoEHOuU1GSj2chf+Mo+f8IcfcAxfIKVmyunRbYQVnoevwgfw3TXXcw++xNuP4fhyueEUNttEduRVaDttddoP0eSxLe2LENk6itYxlrxBNBYrNNKSQmeaLcm9c8UsaB5WyO6675yyQIAWSDpBVoA/gxmcwEvwoDv0m58UE7gHn+fJOa8/Ywan8EKRfjsopF83eCglX/Sfr7OeaRoQfvt1CGvIDccH5BCvw1sWIzRGC/66t0VTcLZQZtm6PlAasbOJ9iwWtUo7biktTSIPxnR24jxP1ZKaqq+2RcXM9OrBAm/AAs7hDJ5bNmGb+KIfwCs8a3jnjBrOFeMjHSCdbKr+2uOLfnOd9eiA8Hvvwwq54VbP2OqwkB48Ytc4YEOiH2vTXqodabfWEOzso4qxdbqD5L6tbtNPECqbhnA708DZH4QOJUXqScmUlks7Ot6FBuZw3n2mEbaUX7kDzxHOOQk8nKWMzAzu6ZZ8sOFw4RK+6PcuXo9tB4SbMz58ApfKDXf3szjNIIbGpD5TKTRxGkEMLjLl+K3wlWXBsCUxIDU+jbOiysESqAy1MGUJpXgwbTWzNOVEziIXZrJ+VIztl1PUBxTSo0dwn2bOmfDRPD3TRTGlfbCJvO9KvuhL1hMHhB9wPuPRLGHcdOWG2xc0U+5bQtAJT0nRTewXL1pgk2+rZAdeWmz3jxAqfNQQdzTlbF8uJ5ecEIWvTkevAHpwz7w78QujlD/Lr491bD8/1vhM2yrUQRrWXNQY4fGilfctMWYjL72UL/qS9eiA8EmN88nbNdour+PBbbAjOjIa4iBhfFg6rxeKdEGcL6p3EWR1Qq2Qkhs2DrnkRnmN9tG2EAqmgPw6hoL7Oza7B+3SCrR9tRftko+Lsf2F/mkTndN2LmzuMcKTuj/mX2+4Va3ki16+nnJY+S7MefpkidxwnV+4wkXH8TKnX0tsYzYp29DOOoSW1nf7nTh2akYiWmcJOuTidSaqESrTYpwjJJNVGQr+rLI7WsqerHW6Kp/oM2pKuV7T1QY9gjqlZp41/WfKpl56FV/0kvXQFRyeQ83xaTu5E8p5dNP3dUF34ihyI3GSpeCsywSh22ZJdWto9winhqifb7VRvgktxp13vyjrS0EjvrRfZ62uyqddSWaWYlwTPAtJZ2oZ3j/Sgi/mi+6vpzesfAcWNA0n8xVyw90GVFGuZjTXEQy+6GfLGLMLL523f5E0OmxVjDoOuRiH91RKU+vtoCtH7TgmvBLvtFXWLW15H9GTdVw8ow4IlRLeHECN9ym1e9K0I+Cbnhgv4Yu+aD2HaQJ80XDqOzSGAV4+4yCqBxrsJAX6ZTIoX36QnvzhhzzMfFW2dZVLOJfo0zbce5OvwXMFaZ81mOnlTVXpDZsQNuoYWveketKb5+6JOOsgX+NTm7H49fUTlx+WLuWL7qxnOFh4BxpmJx0p2gDzA/BUARuS6phR+pUsY7MMboAHx5xNsSVfVZcYSwqCKrqon7zM+8ecCkeS4nm3rINuaWvVNnMRI1IRpxTqx8PZUZ0Br/UEduo3B3hNvmgZfs9gQPj8vIOxd2kndir3awvJ6BLvoUuOfFWNYB0LR1OQJoUySKb9IlOBx74q1+ADC2G6rOdmFdJcD8BkfualA+BdjOOzP9uUhGUEX/TwhZsUduwRr8wNuXKurCixLBgpQI0mDbJr9dIqUuV+92ngkJZ7xduCk2yZKbfWrH1VBiTg9VdzsgRjW3CVXCvAwDd+c1z9dWw9+B+8MJL/eY15ZQ/HqvTwVdsZn5WQsgRRnMaWaecu3jFvMBEmgg+FJFZsnSl0zjB9OqPYaBD7qmoVyImFvzi41usesV0julaAR9dfR15Xzv9sEruRDyk1nb+QaLU67T885GTls6YgcY+UiMa25M/pwGrbCfzkvR3e0jjtuaFtnwuagHTSb5y7boBH119HXhvwP487jJLsLJ4XnUkHX5sLbS61dpiAXRoZSCrFJ+EjpeU3puVfitngYNo6PJrAigKktmwjyQdZpfq30mmtulaAx9Zfx15Xzv+cyeuiBFUs9zq8Kq+XB9a4PVvph3GV4E3y8HENJrN55H1X2p8VyqSKwVusJDKzXOZzplWdzBUFK9e+B4+uv468xvI/b5xtSAkBHQaPvtqWzllVvEOxPbuiE6+j2pvjcKsbvI7txnRErgfH7LdXqjq0IokKzga14GzQ23SSbCQvO6r+Or7SMIr/efOkkqSdMnj9mBx2DRsiY29Uj6+qK9ZrssCKaptR6HKURdwUYeUWA2kPzVKQO8ku2nU3Anhs/XWkBx3F/7wJtCTTTIKftthue1ty9xvNYLY/zo5KSbIuKbXpbEdSyeRyYdAIwKY2neyoc3+k1XUaufYga3T9daMUx/r8z1s10ITknIO0kuoMt+TB8jK0lpayqqjsJ2qtXAYwBU932zinimgmd6mTRDnQfr88q36NAI+tv24E8Pr8zxtasBqx0+xHH9HhlrwsxxNUfKOHQaZBITNf0uccj8GXiVmXAuPEAKSdN/4GLHhs/XWj92dN/uetNuBMnVR+XWDc25JLjo5Mg5IZIq226tmCsip2zZliL213YrTlL2hcFjpCduyim3M7/eB16q/blQsv5X/esDRbtJeabLIosWy3ycavwLhtxdWzbMmHiBTiVjJo6lCLjXZsi7p9PEPnsq6X6wd4bP11i0rD5fzPm/0A6brrIsllenZs0lCJlU4abakR59enZKrKe3BZihbTxlyZ2zl1+g0wvgmA166/bhwDrcn/7Ddz0eWZuJvfSESug6NzZsox3Z04FIxz0mUjMwVOOVTq1CQ0AhdbBGVdjG/CgsfUX7esJl3K/7ytWHRv683praW/8iDOCqWLLhpljDY1ZpzK75QiaZoOTpLKl60auHS/97oBXrv+umU9+FL+5+NtLFgjqVLCdbmj7pY5zPCPLOHNCwXGOcLquOhi8CmCWvbcuO73XmMUPab+ug3A6/A/78Bwe0bcS2+tgHn4J5pyS2WbOck0F51Vq3LcjhLvZ67p1ABbaL2H67bg78BfjKi/jr3+T/ABV3ilLmNXTI2SpvxWBtt6/Z//D0z/FXaGbSBgylzlsEGp+5//xrd4/ae4d8DUUjlslfIYS3t06HZpvfQtvv0N7AHWqtjP2pW08QD/FLy//da38vo8PNlKHf5y37Dxdfe/oj4kVIgFq3koLReSR76W/bx//n9k8jonZxzWTANVwEniDsg87sOSd/z7//PvMp3jQiptGVWFX2caezzAXwfgtzYUvbr0iozs32c3Uge7varH+CNE6cvEYmzbPZ9hMaYDdjK4V2iecf6EcEbdUDVUARda2KzO/JtCuDbNQB/iTeL0EG1JSO1jbXS+nLxtPMDPw1fh5+EPrgSEKE/8Gry5A73ui87AmxwdatyMEBCPNOCSKUeRZ2P6Myb5MRvgCHmA9ywsMifU+AYXcB6Xa5GibUC5TSyerxyh0j6QgLVpdyhfArRTTLqQjwe4HOD9s92D4Ap54odXAPBWLAwB02igG5Kkc+piN4lvODIFGAZgT+EO4Si1s7fjSR7vcQETUkRm9O+MXyo9OYhfe4xt9STQ2pcZRLayCV90b4D3jR0DYAfyxJ+eywg2IL7NTMXna7S/RpQ63JhWEM8U41ZyQGjwsVS0QBrEKLu8xwZsbi4wLcCT+OGidPIOCe1PiSc9Qt+go+vYqB7cG+B9d8cAD+WJPz0Am2gxXgU9IneOqDpAAXOsOltVuMzpdakJXrdPCzXiNVUpCeOos5cxnpQT39G+XVLhs1osQVvJKPZyNq8HDwd4d7pNDuWJPxVX7MSzqUDU6gfadKiNlUFTzLeFHHDlzO4kpa7aiKhBPGKwOqxsBAmYkOIpipyXcQSPlRTf+Tii0U3EJGaZsDER2qoB3h2hu0qe+NNwUooYU8y5mILbJe6OuX+2FTKy7bieTDAemaQyQ0CPthljSWO+xmFDIYiESjM5xKd6Ik5lvLq5GrQ3aCMLvmCA9wowLuWJb9xF59hVVP6O0CrBi3ZjZSNOvRy+I6klNVRJYRBaEzdN+imiUXQ8iVF8fsp+W4JXw7WISW7fDh7lptWkCwZ4d7QTXyBPfJMYK7SijjFppGnlIVJBJBYj7eUwtiP1IBXGI1XCsjNpbjENVpSAJ2hq2LTywEly3hUYazt31J8w2+aiLx3g3fohXixPfOMYm6zCGs9LVo9MoW3MCJE7R5u/WsOIjrqBoHUO0bJE9vxBpbhsd3+Nb4/vtPCZ4oZYCitNeYuC/8UDvDvy0qvkiW/cgqNqRyzqSZa/s0mqNGjtKOoTm14zZpUauiQgVfqtQiZjq7Q27JNaSK5ExRcrGCXO1FJYh6jR6CFqK7bZdQZ4t8g0rSlPfP1RdBtqaa9diqtzJkQ9duSryi2brQXbxDwbRUpFMBHjRj8+Nt7GDKgvph9okW7LX47gu0SpGnnFQ1S1lYldOsC7hYteR574ZuKs7Ei1lBsfdz7IZoxzzCVmmVqaSySzQbBVAWDek+N4jh9E/4VqZrJjPwiv9BC1XcvOWgO8275CVyBPvAtTVlDJfZkaZGU7NpqBogAj/xEHkeAuJihWYCxGN6e8+9JtSegFXF1TrhhLGP1fak3pebgPz192/8gB4d/6WT7+GdYnpH7hH/DJzzFiYPn/vjW0SgNpTNuPIZoAEZv8tlGw4+RLxy+ZjnKa5NdFoC7UaW0aduoYse6+bXg1DLg6UfRYwmhGEjqPvF75U558SANrElK/+MdpXvmqBpaXOa/MTZaa1DOcSiLaw9j0NNNst3c+63c7EKTpkvKHzu6bPbP0RkuHAVcbRY8ijP46MIbQeeT1mhA+5PV/inyDdQipf8LTvMXbwvoDy7IruDNVZKTfV4CTSRUYdybUCnGU7KUTDxLgCknqUm5aAW6/1p6eMsOYsphLzsHrE0Y/P5bQedx1F/4yPHnMB3/IOoTU9+BL8PhtjuFKBpZXnYNJxTuv+2XqolKR2UQgHhS5novuxVySJhBNRF3SoKK1XZbbXjVwWNyOjlqWJjrWJIy+P5bQedyldNScP+HZ61xKSK3jyrz+NiHG1hcOLL/+P+PDF2gOkekKGiNWKgJ+8Z/x8Iv4DdQHzcpZyF4v19I27w9/yPGDFQvmEpKtqv/TLiWMfn4sofMm9eAH8Ao0zzh7h4sJqYtxZd5/D7hkYPneDzl5idlzNHcIB0jVlQ+8ULzw/nc5/ojzl2juE0apD7LRnJxe04dMz2iOCFNtGFpTuXA5AhcTRo8mdN4kz30nVjEC4YTZQy4gpC7GlTlrePKhGsKKgeXpCYeO0MAd/GH7yKQUlXPLOasOH3FnSphjHuDvEu4gB8g66oNbtr6eMbFIA4fIBJkgayoXriw2XEDQPJrQeROAlY6aeYOcMf+IVYTU3XFlZufMHinGywaW3YLpObVBAsbjF4QJMsVUSayjk4voPsHJOQfPWDhCgDnmDl6XIRerD24HsGtw86RMHOLvVSHrKBdeVE26gKB5NKHzaIwLOmrqBWJYZDLhASG16c0Tn+CdRhWDgWXnqRZUTnPIHuMJTfLVpkoYy5CzylHVTGZMTwkGAo2HBlkQplrJX6U+uF1wZz2uwS1SQ12IqWaPuO4baZaEFBdukksJmkcTOm+YJSvoqPFzxFA/YUhIvWxcmSdPWTWwbAKVp6rxTtPFUZfKIwpzm4IoMfaYQLWgmlG5FME2gdBgm+J7J+rtS/XBbaVLsR7bpPQnpMFlo2doWaVceHk9+MkyguZNCJ1He+kuHTWyQAzNM5YSUg/GlTk9ZunAsg1qELVOhUSAK0LABIJHLKbqaEbHZLL1VA3VgqoiOKXYiS+HRyaEKgsfIqX64HYWbLRXy/qWoylIV9gudL1OWBNgBgTNmxA6b4txDT4gi3Ri7xFSLxtXpmmYnzAcWDZgY8d503LFogz5sbonDgkKcxGsWsE1OI+rcQtlgBBCSOKD1mtqYpIU8cTvBmAT0yZe+zUzeY92fYjTtGipXLhuR0ePoHk0ofNWBX+lo8Z7pAZDk8mEw5L7dVyZZoE/pTewbI6SNbiAL5xeygW4xPRuLCGbhcO4RIeTMFYHEJkYyEO9HmJfXMDEj/LaH781wHHZEtqSQ/69UnGpzH7LKIAZEDSPJnTesJTUa+rwTepI9dLJEawYV+ZkRn9g+QirD8vF8Mq0jFQ29js6kCS3E1+jZIhgPNanHdHFqFvPJLHqFwQqbIA4jhDxcNsOCCQLDomaL/dr5lyJaJU6FxPFjO3JOh3kVMcROo8u+C+jo05GjMF3P3/FuDLn5x2M04xXULPwaS6hBYki+MrMdZJSgPHlcB7nCR5bJ9Kr5ACUn9jk5kivdd8tk95SOGrtqu9lr2IhK65ZtEl7ZKrp7DrqwZfRUSN1el7+7NJxZbywOC8neNKTch5vsTEMNsoCCqHBCqIPRjIPkm0BjvFODGtto99rCl+d3wmHkW0FPdpZtC7MMcVtGFQjJLX5bdQ2+x9ypdc313uj8xlsrfuLgWXz1cRhZvJYX0iNVBRcVcmCXZs6aEf3RQF2WI/TcCbKmGU3IOoDJGDdDub0+hYckt6PlGu2BcxmhbTdj/klhccLGJMcqRjMJP1jW2ETqLSWJ/29MAoORluJ+6LPffBZbi5gqi5h6catQpmOT7/OFf5UorRpLzCqcMltBLhwd1are3kztrSzXO0LUbXRQcdLh/RdSZ+swRm819REDrtqzC4es6Gw4JCKlSnjYVpo0xeq33PrADbFLL3RuCmObVmPN+24kfa+AojDuM4umKe2QwCf6EN906HwjujaitDs5o0s1y+k3lgbT2W2i7FJdnwbLXhJUBq/9liTctSmFC/0OqUinb0QddTWamtjbHRFuWJJ6NpqZ8vO3fZJ37Db+2GkaPYLGHs7XTTdiFQJ68SkVJFVmY6McR5UycflNCsccHFaV9FNbR4NttLxw4pQ7wJd066Z0ohVbzihaxHVExd/ay04oxUKWt+AsdiQ9OUyZ2krzN19IZIwafSTFgIBnMV73ADj7V/K8u1MaY2sJp2HWm0f41tqwajEvdHWOJs510MaAqN4aoSiPCXtN2KSi46dUxHdaMquar82O1x5jqhDGvqmoE9LfxcY3zqA7/x3HA67r9ZG4O6Cuxu12/+TP+eLP+I+HErqDDCDVmBDO4larujNe7x8om2rMug0MX0rL1+IWwdwfR+p1TNTyNmVJ85ljWzbWuGv8/C7HD/izjkHNZNYlhZcUOKVzKFUxsxxN/kax+8zPWPSFKw80rJr9Tizyj3o1gEsdwgWGoxPezDdZ1TSENE1dLdNvuKL+I84nxKesZgxXVA1VA1OcL49dFlpFV5yJMhzyCmNQ+a4BqusPJ2bB+xo8V9u3x48VVIEPS/mc3DvAbXyoYr6VgDfh5do5hhHOCXMqBZUPhWYbWZECwVJljLgMUWOCB4MUuMaxGNUQDVI50TQ+S3kFgIcu2qKkNSHVoM0SHsgoZxP2d5HH8B9woOk4x5bPkKtAHucZsdykjxuIpbUrSILgrT8G7G5oCW+K0990o7E3T6AdW4TilH5kDjds+H64kS0mz24grtwlzDHBJqI8YJQExotPvoC4JBq0lEjjQkyBZ8oH2LnRsQ4Hu1QsgDTJbO8fQDnllitkxuVskoiKbRF9VwzMDvxHAdwB7mD9yCplhHFEyUWHx3WtwCbSMMTCUCcEmSGlg4gTXkHpZXWQ7kpznK3EmCHiXInqndkQjunG5kxTKEeGye7jWz9cyMR2mGiFQ15ENRBTbCp+Gh86vAyASdgmJq2MC6hoADQ3GosP0QHbnMHjyBQvQqfhy/BUbeHd5WY/G/9LK/8Ka8Jd7UFeNWEZvzPb458Dn8DGLOe3/wGL/4xP+HXlRt+M1PE2iLhR8t+lfgxsuh7AfO2AOf+owWhSZRYQbd622hbpKWKuU+XuvNzP0OseRDa+mObgDHJUSc/pKx31QdKffQ5OIJpt8GWjlgTwMc/w5MPCR/yl1XC2a2Yut54SvOtMev55Of45BOat9aWG27p2ZVORRvnEk1hqWMVUmqa7S2YtvlIpspuF1pt0syuZS2NV14mUidCSfzQzg+KqvIYCMljIx2YK2AO34fX4GWdu5xcIAb8MzTw+j/lyWM+Dw/gjs4GD6ehNgA48kX/AI7XXM/XAN4WHr+9ntywqoCakCqmKP0rmQrJJEErG2Upg1JObr01lKQy4jskWalKYfJ/EDLMpjNSHFEUAde2fltaDgmrNaWQ9+AAb8I5vKjz3L1n1LriB/BXkG/wwR9y/oRX4LlioHA4LzP2inzRx/DWmutRweFjeP3tNeSGlaE1Fde0OS11yOpmbIp2u/jF1n2RRZviJM0yBT3IZl2HWImKjQOxIyeU325b/qWyU9Moj1o07tS0G7qJDoGHg5m8yeCxMoEH8GU45tnrNM84D2l297DQ9t1YP7jki/7RmutRweEA77/HWXOh3HCxkRgldDQkAjNTMl2Iloc1qN5JfJeeTlyTRzxURTdn1Ixv2uKjs12AbdEWlBtmVdk2k7FFwj07PCZ9XAwW3dG+8xKzNFr4EnwBZpy9Qzhh3jDXebBpYcpuo4fQ44u+fD1dweEnHzI7v0xuuOALRUV8rXpFyfSTQYkhd7IHm07jpyhlkCmI0ALYqPTpUxXS+z4jgDj1Pflvmz5ecuItpIBxyTHpSTGWd9g1ApfD/bvwUhL4nT1EzqgX7cxfCcNmb3mPL/qi9SwTHJ49oj5ZLjccbTG3pRmlYi6JCG0mQrAt1+i2UXTZ2dv9IlQpN5naMYtviaXlTrFpoMsl3bOAFEa8sqPj2WCMrx3Yjx99qFwO59Aw/wgx+HlqNz8oZvA3exRDvuhL1jMQHPaOJ0+XyA3fp1OfM3qObEVdhxjvynxNMXQV4+GJyvOEFqeQBaIbbO7i63rpxCltdZShPFxkjM2FPVkn3TG+Rp9pO3l2RzFegGfxGDHIAh8SteR0C4HopXzRF61nheDw6TFN05Ebvq8M3VKKpGjjO6r7nhudTEGMtYM92HTDaR1FDMXJ1eThsbKfywyoWwrzRSXkc51flG3vIid62h29bIcFbTGhfV+faaB+ohj7dPN0C2e2lC96+XouFByen9AsunLDJZ9z7NExiUc0OuoYW6UZkIyx2YUR2z6/TiRjyKMx5GbbjLHvHuf7YmtKghf34LJfx63Yg8vrvN2zC7lY0x0tvKezo4HmGYDU+Gab6dFL+KI761lDcNifcjLrrr9LWZJctG1FfU1uwhoQE22ObjdfkSzY63CbU5hzs21WeTddH2BaL11Gi7lVdlxP1nkxqhnKhVY6knS3EPgVGg1JpN5cP/hivujOelhXcPj8HC/LyI6MkteVjlolBdMmF3a3DbsuAYhL44dxzthWSN065xxUd55Lmf0wRbOYOqH09/o9WbO2VtFdaMb4qBgtFJoT1SqoN8wPXMoXLb3p1PUEhxfnnLzGzBI0Ku7FxrKsNJj/8bn/H8fPIVOd3rfrklUB/DOeO+nkghgSPzrlPxluCMtOnDL4Yml6dK1r3vsgMxgtPOrMFUZbEUbTdIzii5beq72G4PD0DKnwjmBULUVFmy8t+k7fZ3pKc0Q4UC6jpVRqS9Umv8bxw35flZVOU1X7qkjnhZlsMbk24qQ6Hz7QcuL6sDC0iHHki96Uh2UdvmgZnjIvExy2TeJdMDZNSbdZyAHe/Yd1xsQhHiKzjh7GxQ4yqMPaywPkjMamvqrYpmO7Knad+ZQC5msCuAPWUoxrxVhrGv7a+KLXFhyONdTMrZ7ke23qiO40ZJUyzgYyX5XyL0mV7NiUzEs9mjtbMN0dERqwyAJpigad0B3/zRV7s4PIfXSu6YV/MK7+OrYe/JvfGMn/PHJe2fyUdtnFrKRNpXV0Y2559aWPt/G4BlvjTMtXlVIWCnNyA3YQBDmYIodFz41PvXPSa6rq9lWZawZ4dP115HXV/M/tnFkkrBOdzg6aP4pID+MZnTJ1SuuB6iZlyiox4HT2y3YBtkUKWooacBQUDTpjwaDt5poBHl1/HXltwP887lKKXxNUEyPqpGTyA699UqY/lt9yGdlUKra0fFWS+36iylVWrAyd7Uw0CZM0z7xKTOduznLIjG2Hx8cDPLb+OvK6Bv7n1DYci4CxUuRxrjBc0bb4vD3rN5Zz36ntLb83eVJIB8LiIzCmn6SMPjlX+yNlTjvIGjs+QzHPf60Aj62/jrzG8j9vYMFtm1VoRWCJdmw7z9N0t+c8cxZpPeK4aTRicS25QhrVtUp7U578chk4q04Wx4YoQSjFryUlpcQ1AbxZ/XVMknIU//OGl7Q6z9Zpxi0+3yFhSkjUDpnCIUhLWVX23KQ+L9vKvFKI0ZWFQgkDLvBoylrHNVmaw10zwCPrr5tlodfnf94EWnQ0lFRWy8pW9LbkLsyUVDc2NSTHGDtnD1uMtchjbCeb1mpxFP0YbcClhzdLu6lfO8Bj6q+bdT2sz/+8SZCV7VIxtt0DUn9L7r4cLYWDSXnseEpOGFuty0qbOVlS7NNzs5FOGJUqQpl2Q64/yBpZf90sxbE+//PGdZ02HSipCbmD6NItmQ4Lk5XUrGpDMkhbMm2ZVheNYV+VbUWTcv99+2NyX1VoafSuC+AN6q9bFIMv5X/eagNWXZxEa9JjlMwNWb00akGUkSoepp1/yRuuqHGbUn3UdBSTxBU6SEVklzWRUkPndVvw2PrrpjvxOvzPmwHc0hpmq82npi7GRro8dXp0KXnUQmhZbRL7NEVp1uuZmO45vuzKsHrktS3GLWXODVjw+vXXLYx4Hf7njRPd0i3aoAGX6W29GnaV5YdyDj9TFkakje7GHYzDoObfddHtOSpoi2SmzJHrB3hM/XUDDEbxP2/oosszcRlehWXUvzHv4TpBVktHqwenFo8uLVmy4DKLa5d3RtLrmrM3aMFr1183E4sewf+85VWeg1c5ag276NZrM9IJVNcmLEvDNaV62aq+14IAOGFsBt973Ra8Xv11YzXwNfmft7Jg2oS+XOyoC8/cwzi66Dhmgk38kUmP1CUiYWOX1bpD2zWXt2FCp7uq8703APAa9dfNdscR/M/bZLIyouVxqJfeWvG9Je+JVckHQ9+CI9NWxz+blX/KYYvO5n2tAP/vrlZ7+8/h9y+9qeB/Hnt967e5mevX10rALDWK//FaAT5MXdBXdP0C/BAes792c40H+AiAp1e1oH8HgH94g/Lttx1gp63op1eyoM/Bvw5/G/7xFbqJPcCXnmBiwDPb/YKO4FX4OjyCb289db2/Noqicw4i7N6TVtoz8tNwDH+8x/i6Ae7lmaQVENzJFb3Di/BFeAwz+Is9SjeQySpPqbLFlNmyz47z5a/AF+AYFvDmHqibSXTEzoT4Gc3OALaqAP4KPFUJ6n+1x+rGAM6Zd78bgJ0a8QN4GU614vxwD9e1Amy6CcskNrczLx1JIp6HE5UZD/DBHrFr2oNlgG4Odv226BodoryjGJ9q2T/AR3vQrsOCS0ctXZi3ruLlhpFDJYl4HmYtjQCP9rhdn4suySLKDt6wLcC52h8xPlcjju1fn+yhuw4LZsAGUuo2b4Fx2UwQu77uqRHXGtg92aN3tQCbFexc0uk93vhTXbct6y7MulLycoUljx8ngDMBg1tvJjAazpEmOtxlzclvj1vQf1Tx7QlPDpGpqgtdSKz/d9/hdy1vTfFHSmC9dGDZbLiezz7Ac801HirGZsWjydfZyPvHXL/Y8Mjzg8BxTZiuwKz4Eb8sBE9zznszmjvFwHKPIWUnwhqfVRcd4Ck0K6ate48m1oOfrX3/yOtvAsJ8zsPAM89sjnddmuLuDPjX9Bu/L7x7xpMzFk6nWtyQfPg278Gn4Aekz2ZgOmU9eJ37R14vwE/BL8G3aibCiWMWWDQ0ZtkPMnlcGeAu/Ag+8ZyecU5BPuy2ILD+sQqyZhAKmn7XZd+jIMTN9eBL7x95xVLSX4On8EcNlXDqmBlqS13jG4LpmGbkF/0CnOi3H8ETOIXzmnmtb0a16Tzxj1sUvQCBiXZGDtmB3KAefPH94xcUa/6vwRn80GOFyjEXFpba4A1e8KQfFF+259tx5XS4egYn8fQsLGrqGrHbztr+uByTahWuL1NUGbDpsnrwBfePPwHHIf9X4RnM4Z2ABWdxUBlqQ2PwhuDxoS0vvqB1JzS0P4h2nA/QgTrsJFn+Y3AOjs9JFC07CGWX1oNX3T/yHOzgDjwPn1PM3g9Jk9lZrMEpxnlPmBbjyo2+KFXRU52TJM/2ALcY57RUzjObbjqxVw++4P6RAOf58pcVsw9Daje3htriYrpDOonre3CudSe6bfkTEgHBHuDiyu5MCsc7BHhYDx7ePxLjqigXZsw+ijMHFhuwBmtoTPtOxOrTvYJDnC75dnUbhfwu/ZW9AgYd+peL68HD+0emKquiXHhWjJg/UrkJYzuiaL3E9aI/ytrCvAd4GcYZMCkSQxfUg3v3j8c4e90j5ZTPdvmJJGHnOCI2nHS8081X013pHuBlV1gB2MX1YNmWLHqqGN/TWmG0y6clJWthxNUl48q38Bi8vtMKyzzpFdSDhxZ5WBA5ZLt8Jv3895DduBlgbPYAj8C4B8hO68FDkoh5lydC4FiWvBOVqjYdqjiLv92t8yPDjrDaiHdUD15qkSURSGmXJwOMSxWAXYwr3zaAufJ66l+94vv3AO+vPcD7aw/w/toDvL/2AO+vPcD7aw/wHuD9tQd4f+0B3l97gPfXHuD9tQd4f+0B3l97gG8LwP8G/AL8O/A5OCq0Ys2KIdv/qOIXG/4mvFAMF16gZD+2Xvu/B8as5+8bfllWyg0zaNO5bfXj6vfhhwD86/Aq3NfRS9t9WPnhfnvCIw/CT8GLcFTMnpntdF/z9V+PWc/vWoIH+FL3Znv57PitcdGP4R/C34avw5fgRVUInCwbsn1yyA8C8zm/BH8NXoXnVE6wVPjdeCI38kX/3+Ct9dbz1pTmHFRu+Hm4O9Ch3clr99negxfwj+ER/DR8EV6B5+DuQOnTgUw5rnkY+FbNU3gNXh0o/JYTuWOvyBf9FvzX663HH/HejO8LwAl8Hl5YLTd8q7sqA3wbjuExfAFegQdwfyDoSkWY8swzEf6o4Qyewefg+cHNbqMQruSL/u/WWc+E5g7vnnEXgDmcDeSGb/F4cBcCgT+GGRzDU3hZYburAt9TEtHgbM6JoxJ+6NMzzTcf6c2bycv2+KK/f+l6LBzw5IwfqZJhA3M472pWT/ajKxnjv4AFnMEpnBTPND6s2J7qHbPAqcMK74T2mZ4VGB9uJA465It+/eL1WKhYOD7xHOkr1ajK7d0C4+ke4Hy9qXZwpgLr+Znm/uNFw8xQOSy8H9IzjUrd9+BIfenYaylf9FsXr8fBAadnPIEDna8IBcwlxnuA0/Wv6GAWPd7dDIKjMdSWueAsBj4M7TOd06qBbwDwKr7oleuxMOEcTuEZTHWvDYUO7aHqAe0Bbq+HEFRzOz7WVoTDQkVds7A4sIIxfCQdCefFRoIOF/NFL1mPab/nvOakSL/Q1aFtNpUb/nFOVX6gzyg/1nISyDfUhsokIzaBR9Kxm80s5mK+6P56il1jXic7nhQxsxSm3OwBHl4fFdLqi64nDQZvqE2at7cWAp/IVvrN6/BFL1mPhYrGMBfOi4PyjuSGf6wBBh7p/FZTghCNWGgMzlBbrNJoPJX2mW5mwZfyRffXo7OFi5pZcS4qZUrlViptrXtw+GQoyhDPS+ANjcGBNRiLCQDPZPMHuiZfdFpPSTcQwwKYdRNqpkjm7AFeeT0pJzALgo7g8YYGrMHS0iocy+YTm2vyRUvvpXCIpQ5pe666TJrcygnScUf/p0NDs/iAI/nqDHC8TmQT8x3NF91l76oDdQGwu61Z6E0ABv7uO1dbf/37Zlv+Zw/Pbh8f1s4Avur6657/+YYBvur6657/+YYBvur6657/+YYBvur6657/+aYBvuL6657/+VMA8FXWX/f8zzcN8BXXX/f8zzcNMFdbf93zP38KLPiK6697/uebtuArrr/u+Z9vGmCusP6653/+1FjwVdZf9/zPN7oHX339dc//fNMu+irrr3v+50+Bi+Zq6697/uebA/jz8Pudf9ht/fWv517J/XUzAP8C/BAeX9WCDrUpZ3/dEMBxgPcfbtTVvsYV5Yn32u03B3Ac4P3b8I+vxNBKeeL9dRMAlwO83959qGO78sT769oB7g3w/vGVYFzKE++v6wV4OMD7F7tckFkmT7y/rhHgpQO8b+4Y46XyxPvrugBeNcB7BRiX8sT767oAvmCA9woAHsoT76+rBJjLBnh3txOvkifeX1dswZcO8G6N7sXyxPvr6i340gHe3TnqVfLE++uKAb50gHcXLnrX8sR7gNdPRqwzwLu7Y/FO5Yn3AK9jXCMGeHdgxDuVJ75VAI8ljP7PAb3/RfjcZfePHBB+79dpfpH1CanN30d+mT1h9GqAxxJGM5LQeeQ1+Tb+EQJrElLb38VHQ94TRq900aMIo8cSOo+8Dp8QfsB8zpqE1NO3OI9Zrj1h9EV78PqE0WMJnUdeU6E+Jjyk/hbrEFIfeWbvId8H9oTRFwdZaxJGvziW0Hn0gqYB/wyZ0PwRlxJST+BOw9m77Amj14ii1yGM/txYQudN0qDzGe4EqfA/5GJCagsHcPaEPWH0esekSwmjRxM6b5JEcZ4ww50ilvAOFxBSx4yLW+A/YU8YvfY5+ALC6NGEzhtmyZoFZoarwBLeZxUhtY4rc3bKnjB6TKJjFUHzJoTOozF2YBpsjcyxDgzhQ1YRUse8+J4wenwmaylB82hC5w0zoRXUNXaRBmSMQUqiWSWkLsaVqc/ZE0aPTFUuJWgeTei8SfLZQeMxNaZSIzbII4aE1Nmr13P2hNHjc9E9guYNCZ032YlNwESMLcZiLQHkE4aE1BFg0yAR4z1h9AiAGRA0jyZ03tyIxWMajMPWBIsxYJCnlITU5ShiHYdZ94TR4wCmSxg9jtB5KyPGYzymAYexWEMwAPIsAdYdV6aObmNPGD0aYLoEzaMJnTc0Ygs+YDw0GAtqxBjkuP38bMRWCHn73xNGjz75P73WenCEJnhwyVe3AEe8TtKdJcYhBl97wuhNAObK66lvD/9J9NS75v17wuitAN5fe4D31x7g/bUHeH/tAd5fe4D3AO+vPcD7aw/w/toDvL/2AO+vPcD7aw/w/toDvAd4f/24ABzZ8o+KLsSLS+Pv/TqTb3P4hKlQrTGh+fbIBT0Axqznnb+L/V2mb3HkN5Mb/nEHeK7d4IcDld6lmDW/iH9E+AH1MdOw/Jlu2T1xNmY98sv4wHnD7D3uNHu54WUuOsBTbQuvBsPT/UfzNxGYzwkP8c+Yz3C+r/i6DcyRL/rZ+utRwWH5PmfvcvYEt9jLDS/bg0/B64DWKrQM8AL8FPwS9beQCe6EMKNZYJol37jBMy35otdaz0Bw2H/C2Smc7+WGB0HWDELBmOByA3r5QONo4V+DpzR/hFS4U8wMW1PXNB4TOqYz9urxRV++ntWCw/U59Ty9ebdWbrgfRS9AYKKN63ZokZVygr8GZ/gfIhZXIXPsAlNjPOLBby5c1eOLvmQ9lwkOy5x6QV1j5TYqpS05JtUgUHUp5toHGsVfn4NX4RnMCe+AxTpwmApTYxqMxwfCeJGjpXzRF61nbcHhUBPqWze9svwcHJ+S6NPscKrEjug78Dx8Lj3T8D4YxGIdxmJcwhi34fzZUr7olevZCw5vkOhoClq5zBPZAnygD/Tl9EzDh6kl3VhsHYcDEb+hCtJSvuiV69kLDm+WycrOTArHmB5/VYyP6jOVjwgGawk2zQOaTcc1L+aLXrKeveDwZqlKrw8U9Y1p66uK8dEzdYwBeUQAY7DbyYNezBfdWQ97weEtAKYQg2xJIkuveAT3dYeLGH+ShrWNwZgN0b2YL7qznr3g8JYAo5bQBziPjx7BPZ0d9RCQp4UZbnFdzBddor4XHN4KYMrB2qHFRIzzcLAHQZ5the5ovui94PCWAPefaYnxIdzRwdHCbuR4B+tbiy96Lzi8E4D7z7S0mEPd+eqO3cT53Z0Y8SV80XvB4Z0ADJi/f7X113f+7p7/+UYBvur6657/+YYBvur6657/+aYBvuL6657/+aYBvuL6657/+aYBvuL6657/+aYBvuL6657/+VMA8FXWX/f8z58OgK+y/rrnf75RgLna+uue//lTA/CV1V/3/M837aKvvv6653++UQvmauuve/7nTwfAV1N/3fM/fzr24Cuuv+75nz8FFnxl9dc9//MOr/8/glixwRuUfM4AAAAASUVORK5CYII=";
-  }
-  getSearchTexture() {
-    return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII=";
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/FilmShader.js
-const FilmShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    time: { value: 0 },
-    nIntensity: { value: 0.5 },
-    sIntensity: { value: 0.05 },
-    sCount: { value: 4096 },
-    grayscale: { value: 1 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "#include <common>",
-    // control parameter
-    "uniform float time;",
-    "uniform bool grayscale;",
-    // noise effect intensity value (0 = no effect, 1 = full effect)
-    "uniform float nIntensity;",
-    // scanlines effect intensity value (0 = no effect, 1 = full effect)
-    "uniform float sIntensity;",
-    // scanlines effect count value (0 = no effect, 4096 = full effect)
-    "uniform float sCount;",
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "void main() {",
-    // sample the source
-    "	vec4 cTextureScreen = texture2D( tDiffuse, vUv );",
-    // make some noise
-    "	float dx = rand( vUv + time );",
-    // add noise
-    "	vec3 cResult = cTextureScreen.rgb + cTextureScreen.rgb * clamp( 0.1 + dx, 0.0, 1.0 );",
-    // get us a sine and cosine
-    "	vec2 sc = vec2( sin( vUv.y * sCount ), cos( vUv.y * sCount ) );",
-    // add scanlines
-    "	cResult += cTextureScreen.rgb * vec3( sc.x, sc.y, sc.x ) * sIntensity;",
-    // interpolate between source and result by intensity
-    "	cResult = cTextureScreen.rgb + clamp( nIntensity, 0.0,1.0 ) * ( cResult - cTextureScreen.rgb );",
-    // convert to grayscale if desired
-    "	if( grayscale ) {",
-    "		cResult = vec3( cResult.r * 0.3 + cResult.g * 0.59 + cResult.b * 0.11 );",
-    "	}",
-    "	gl_FragColor =  vec4( cResult, cTextureScreen.a );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/FilmPass.js
-var FilmPass_defProp = Object.defineProperty;
-var FilmPass_defNormalProp = (obj, key, value) => key in obj ? FilmPass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var FilmPass_publicField = (obj, key, value) => {
-  FilmPass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-class FilmPass extends Pass/* Pass */.w {
-  constructor(noiseIntensity, scanlinesIntensity, scanlinesCount, grayscale) {
-    super();
-    FilmPass_publicField(this, "material");
-    FilmPass_publicField(this, "fsQuad");
-    FilmPass_publicField(this, "uniforms");
-    if (FilmShader === void 0)
-      console.error("THREE.FilmPass relies on FilmShader");
-    const shader = FilmShader;
-    this.uniforms = three_module.UniformsUtils.clone(shader.uniforms);
-    this.material = new three_module.ShaderMaterial({
-      uniforms: this.uniforms,
-      vertexShader: shader.vertexShader,
-      fragmentShader: shader.fragmentShader
-    });
-    if (grayscale !== void 0)
-      this.uniforms.grayscale.value = grayscale;
-    if (noiseIntensity !== void 0)
-      this.uniforms.nIntensity.value = noiseIntensity;
-    if (scanlinesIntensity !== void 0)
-      this.uniforms.sIntensity.value = scanlinesIntensity;
-    if (scanlinesCount !== void 0)
-      this.uniforms.sCount.value = scanlinesCount;
-    this.fsQuad = new Pass/* FullScreenQuad */.T(this.material);
-  }
-  render(renderer, writeBuffer, readBuffer, deltaTime) {
-    this.uniforms["tDiffuse"].value = readBuffer.texture;
-    this.uniforms["time"].value += deltaTime;
-    if (this.renderToScreen) {
-      renderer.setRenderTarget(null);
-      this.fsQuad.render(renderer);
-    } else {
-      renderer.setRenderTarget(writeBuffer);
-      if (this.clear)
-        renderer.clear();
-      this.fsQuad.render(renderer);
-    }
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/shaders/CopyShader.js
-var CopyShader = __webpack_require__(84360);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/OutlinePass.js
-var OutlinePass_defProp = Object.defineProperty;
-var OutlinePass_defNormalProp = (obj, key, value) => key in obj ? OutlinePass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var OutlinePass_publicField = (obj, key, value) => {
-  OutlinePass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-class OutlinePass extends Pass/* Pass */.w {
-  constructor(resolution, scene, camera, selectedObjects) {
-    super();
-    OutlinePass_publicField(this, "renderScene");
-    OutlinePass_publicField(this, "renderCamera");
-    OutlinePass_publicField(this, "selectedObjects");
-    OutlinePass_publicField(this, "visibleEdgeColor");
-    OutlinePass_publicField(this, "hiddenEdgeColor");
-    OutlinePass_publicField(this, "edgeGlow");
-    OutlinePass_publicField(this, "usePatternTexture");
-    OutlinePass_publicField(this, "edgeThickness");
-    OutlinePass_publicField(this, "edgeStrength");
-    OutlinePass_publicField(this, "downSampleRatio");
-    OutlinePass_publicField(this, "pulsePeriod");
-    OutlinePass_publicField(this, "resolution");
-    OutlinePass_publicField(this, "renderTargetMaskBuffer");
-    OutlinePass_publicField(this, "depthMaterial");
-    OutlinePass_publicField(this, "prepareMaskMaterial");
-    OutlinePass_publicField(this, "renderTargetDepthBuffer");
-    OutlinePass_publicField(this, "renderTargetMaskDownSampleBuffer");
-    OutlinePass_publicField(this, "renderTargetBlurBuffer1");
-    OutlinePass_publicField(this, "renderTargetBlurBuffer2");
-    OutlinePass_publicField(this, "edgeDetectionMaterial");
-    OutlinePass_publicField(this, "renderTargetEdgeBuffer1");
-    OutlinePass_publicField(this, "renderTargetEdgeBuffer2");
-    OutlinePass_publicField(this, "separableBlurMaterial1");
-    OutlinePass_publicField(this, "separableBlurMaterial2");
-    OutlinePass_publicField(this, "overlayMaterial");
-    OutlinePass_publicField(this, "materialCopy");
-    OutlinePass_publicField(this, "oldClearAlpha");
-    OutlinePass_publicField(this, "fsQuad");
-    OutlinePass_publicField(this, "tempPulseColor1");
-    OutlinePass_publicField(this, "tempPulseColor2");
-    OutlinePass_publicField(this, "textureMatrix");
-    OutlinePass_publicField(this, "patternTexture");
-    OutlinePass_publicField(this, "_visibilityCache");
-    OutlinePass_publicField(this, "_oldClearColor");
-    OutlinePass_publicField(this, "copyUniforms");
-    OutlinePass_publicField(this, "BlurDirectionX", new three_module.Vector2(1, 0));
-    OutlinePass_publicField(this, "BlurDirectionY", new three_module.Vector2(0, 1));
-    this.renderScene = scene;
-    this.renderCamera = camera;
-    this.selectedObjects = selectedObjects !== void 0 ? selectedObjects : [];
-    this.visibleEdgeColor = new three_module.Color(1, 1, 1);
-    this.hiddenEdgeColor = new three_module.Color(0.1, 0.04, 0.02);
-    this.edgeGlow = 0;
-    this.usePatternTexture = false;
-    this.edgeThickness = 1;
-    this.edgeStrength = 3;
-    this.downSampleRatio = 2;
-    this.pulsePeriod = 0;
-    this._visibilityCache = /* @__PURE__ */ new Map();
-    this.resolution = resolution !== void 0 ? new three_module.Vector2(resolution.x, resolution.y) : new three_module.Vector2(256, 256);
-    const resx = Math.round(this.resolution.x / this.downSampleRatio);
-    const resy = Math.round(this.resolution.y / this.downSampleRatio);
-    this.renderTargetMaskBuffer = new three_module.WebGLRenderTarget(this.resolution.x, this.resolution.y);
-    this.renderTargetMaskBuffer.texture.name = "OutlinePass.mask";
-    this.renderTargetMaskBuffer.texture.generateMipmaps = false;
-    this.depthMaterial = new three_module.MeshDepthMaterial();
-    this.depthMaterial.side = three_module.DoubleSide;
-    this.depthMaterial.depthPacking = three_module.RGBADepthPacking;
-    this.depthMaterial.blending = three_module.NoBlending;
-    this.prepareMaskMaterial = this.getPrepareMaskMaterial();
-    this.prepareMaskMaterial.side = three_module.DoubleSide;
-    this.prepareMaskMaterial.fragmentShader = replaceDepthToViewZ(
-      this.prepareMaskMaterial.fragmentShader,
-      this.renderCamera
-    );
-    this.renderTargetDepthBuffer = new three_module.WebGLRenderTarget(this.resolution.x, this.resolution.y);
-    this.renderTargetDepthBuffer.texture.name = "OutlinePass.depth";
-    this.renderTargetDepthBuffer.texture.generateMipmaps = false;
-    this.renderTargetMaskDownSampleBuffer = new three_module.WebGLRenderTarget(resx, resy);
-    this.renderTargetMaskDownSampleBuffer.texture.name = "OutlinePass.depthDownSample";
-    this.renderTargetMaskDownSampleBuffer.texture.generateMipmaps = false;
-    this.renderTargetBlurBuffer1 = new three_module.WebGLRenderTarget(resx, resy);
-    this.renderTargetBlurBuffer1.texture.name = "OutlinePass.blur1";
-    this.renderTargetBlurBuffer1.texture.generateMipmaps = false;
-    this.renderTargetBlurBuffer2 = new three_module.WebGLRenderTarget(Math.round(resx / 2), Math.round(resy / 2));
-    this.renderTargetBlurBuffer2.texture.name = "OutlinePass.blur2";
-    this.renderTargetBlurBuffer2.texture.generateMipmaps = false;
-    this.edgeDetectionMaterial = this.getEdgeDetectionMaterial();
-    this.renderTargetEdgeBuffer1 = new three_module.WebGLRenderTarget(resx, resy);
-    this.renderTargetEdgeBuffer1.texture.name = "OutlinePass.edge1";
-    this.renderTargetEdgeBuffer1.texture.generateMipmaps = false;
-    this.renderTargetEdgeBuffer2 = new three_module.WebGLRenderTarget(Math.round(resx / 2), Math.round(resy / 2));
-    this.renderTargetEdgeBuffer2.texture.name = "OutlinePass.edge2";
-    this.renderTargetEdgeBuffer2.texture.generateMipmaps = false;
-    const MAX_EDGE_THICKNESS = 4;
-    const MAX_EDGE_GLOW = 4;
-    this.separableBlurMaterial1 = this.getSeperableBlurMaterial(MAX_EDGE_THICKNESS);
-    this.separableBlurMaterial1.uniforms["texSize"].value.set(resx, resy);
-    this.separableBlurMaterial1.uniforms["kernelRadius"].value = 1;
-    this.separableBlurMaterial2 = this.getSeperableBlurMaterial(MAX_EDGE_GLOW);
-    this.separableBlurMaterial2.uniforms["texSize"].value.set(Math.round(resx / 2), Math.round(resy / 2));
-    this.separableBlurMaterial2.uniforms["kernelRadius"].value = MAX_EDGE_GLOW;
-    this.overlayMaterial = this.getOverlayMaterial();
-    if (CopyShader/* CopyShader */.C === void 0)
-      console.error("THREE.OutlinePass relies on CopyShader");
-    const copyShader = CopyShader/* CopyShader */.C;
-    this.copyUniforms = three_module.UniformsUtils.clone(copyShader.uniforms);
-    this.copyUniforms["opacity"].value = 1;
-    this.materialCopy = new three_module.ShaderMaterial({
-      uniforms: this.copyUniforms,
-      vertexShader: copyShader.vertexShader,
-      fragmentShader: copyShader.fragmentShader,
-      blending: three_module.NoBlending,
-      depthTest: false,
-      depthWrite: false,
-      transparent: true
-    });
-    this.enabled = true;
-    this.needsSwap = false;
-    this._oldClearColor = new three_module.Color();
-    this.oldClearAlpha = 1;
-    this.fsQuad = new Pass/* FullScreenQuad */.T(this.materialCopy);
-    this.tempPulseColor1 = new three_module.Color();
-    this.tempPulseColor2 = new three_module.Color();
-    this.textureMatrix = new three_module.Matrix4();
-    function replaceDepthToViewZ(string, camera2) {
-      const type = camera2.isPerspectiveCamera ? "perspective" : "orthographic";
-      return string.replace(/DEPTH_TO_VIEW_Z/g, type + "DepthToViewZ");
-    }
-  }
-  dispose() {
-    this.renderTargetMaskBuffer.dispose();
-    this.renderTargetDepthBuffer.dispose();
-    this.renderTargetMaskDownSampleBuffer.dispose();
-    this.renderTargetBlurBuffer1.dispose();
-    this.renderTargetBlurBuffer2.dispose();
-    this.renderTargetEdgeBuffer1.dispose();
-    this.renderTargetEdgeBuffer2.dispose();
-  }
-  setSize(width, height) {
-    this.renderTargetMaskBuffer.setSize(width, height);
-    this.renderTargetDepthBuffer.setSize(width, height);
-    let resx = Math.round(width / this.downSampleRatio);
-    let resy = Math.round(height / this.downSampleRatio);
-    this.renderTargetMaskDownSampleBuffer.setSize(resx, resy);
-    this.renderTargetBlurBuffer1.setSize(resx, resy);
-    this.renderTargetEdgeBuffer1.setSize(resx, resy);
-    this.separableBlurMaterial1.uniforms["texSize"].value.set(resx, resy);
-    resx = Math.round(resx / 2);
-    resy = Math.round(resy / 2);
-    this.renderTargetBlurBuffer2.setSize(resx, resy);
-    this.renderTargetEdgeBuffer2.setSize(resx, resy);
-    this.separableBlurMaterial2.uniforms["texSize"].value.set(resx, resy);
-  }
-  changeVisibilityOfSelectedObjects(bVisible) {
-    const cache = this._visibilityCache;
-    function gatherSelectedMeshesCallBack(object) {
-      if (object.isMesh) {
-        if (bVisible === true) {
-          object.visible = cache.get(object);
-        } else {
-          cache.set(object, object.visible);
-          object.visible = bVisible;
-        }
-      }
-    }
-    for (let i = 0; i < this.selectedObjects.length; i++) {
-      const selectedObject = this.selectedObjects[i];
-      selectedObject.traverse(gatherSelectedMeshesCallBack);
-    }
-  }
-  changeVisibilityOfNonSelectedObjects(bVisible) {
-    const cache = this._visibilityCache;
-    const selectedMeshes = [];
-    function gatherSelectedMeshesCallBack(object) {
-      if (object.isMesh)
-        selectedMeshes.push(object);
-    }
-    for (let i = 0; i < this.selectedObjects.length; i++) {
-      const selectedObject = this.selectedObjects[i];
-      selectedObject.traverse(gatherSelectedMeshesCallBack);
-    }
-    function VisibilityChangeCallBack(object) {
-      if (object.isMesh || object.isSprite) {
-        let bFound = false;
-        for (let i = 0; i < selectedMeshes.length; i++) {
-          const selectedObjectId = selectedMeshes[i].id;
-          if (selectedObjectId === object.id) {
-            bFound = true;
-            break;
-          }
-        }
-        if (bFound === false) {
-          const visibility = object.visible;
-          if (bVisible === false || cache.get(object) === true) {
-            object.visible = bVisible;
-          }
-          cache.set(object, visibility);
-        }
-      } else if (object.isPoints || object.isLine) {
-        if (bVisible === true) {
-          object.visible = cache.get(object);
-        } else {
-          cache.set(object, object.visible);
-          object.visible = bVisible;
-        }
-      }
-    }
-    this.renderScene.traverse(VisibilityChangeCallBack);
-  }
-  updateTextureMatrix() {
-    this.textureMatrix.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1);
-    this.textureMatrix.multiply(this.renderCamera.projectionMatrix);
-    this.textureMatrix.multiply(this.renderCamera.matrixWorldInverse);
-  }
-  render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) {
-    if (this.selectedObjects.length > 0) {
-      renderer.getClearColor(this._oldClearColor);
-      this.oldClearAlpha = renderer.getClearAlpha();
-      const oldAutoClear = renderer.autoClear;
-      renderer.autoClear = false;
-      if (maskActive)
-        renderer.state.buffers.stencil.setTest(false);
-      renderer.setClearColor(16777215, 1);
-      this.changeVisibilityOfSelectedObjects(false);
-      const currentBackground = this.renderScene.background;
-      this.renderScene.background = null;
-      this.renderScene.overrideMaterial = this.depthMaterial;
-      renderer.setRenderTarget(this.renderTargetDepthBuffer);
-      renderer.clear();
-      renderer.render(this.renderScene, this.renderCamera);
-      this.changeVisibilityOfSelectedObjects(true);
-      this._visibilityCache.clear();
-      this.updateTextureMatrix();
-      this.changeVisibilityOfNonSelectedObjects(false);
-      this.renderScene.overrideMaterial = this.prepareMaskMaterial;
-      this.prepareMaskMaterial.uniforms["cameraNearFar"].value.set(
-        this.renderCamera.near,
-        this.renderCamera.far
-      );
-      this.prepareMaskMaterial.uniforms["depthTexture"].value = this.renderTargetDepthBuffer.texture;
-      this.prepareMaskMaterial.uniforms["textureMatrix"].value = this.textureMatrix;
-      renderer.setRenderTarget(this.renderTargetMaskBuffer);
-      renderer.clear();
-      renderer.render(this.renderScene, this.renderCamera);
-      this.renderScene.overrideMaterial = null;
-      this.changeVisibilityOfNonSelectedObjects(true);
-      this._visibilityCache.clear();
-      this.renderScene.background = currentBackground;
-      this.fsQuad.material = this.materialCopy;
-      this.copyUniforms["tDiffuse"].value = this.renderTargetMaskBuffer.texture;
-      renderer.setRenderTarget(this.renderTargetMaskDownSampleBuffer);
-      renderer.clear();
-      this.fsQuad.render(renderer);
-      this.tempPulseColor1.copy(this.visibleEdgeColor);
-      this.tempPulseColor2.copy(this.hiddenEdgeColor);
-      if (this.pulsePeriod > 0) {
-        const scalar = (1 + 0.25) / 2 + Math.cos(performance.now() * 0.01 / this.pulsePeriod) * (1 - 0.25) / 2;
-        this.tempPulseColor1.multiplyScalar(scalar);
-        this.tempPulseColor2.multiplyScalar(scalar);
-      }
-      this.fsQuad.material = this.edgeDetectionMaterial;
-      this.edgeDetectionMaterial.uniforms["maskTexture"].value = this.renderTargetMaskDownSampleBuffer.texture;
-      this.edgeDetectionMaterial.uniforms["texSize"].value.set(
-        this.renderTargetMaskDownSampleBuffer.width,
-        this.renderTargetMaskDownSampleBuffer.height
-      );
-      this.edgeDetectionMaterial.uniforms["visibleEdgeColor"].value = this.tempPulseColor1;
-      this.edgeDetectionMaterial.uniforms["hiddenEdgeColor"].value = this.tempPulseColor2;
-      renderer.setRenderTarget(this.renderTargetEdgeBuffer1);
-      renderer.clear();
-      this.fsQuad.render(renderer);
-      this.fsQuad.material = this.separableBlurMaterial1;
-      this.separableBlurMaterial1.uniforms["colorTexture"].value = this.renderTargetEdgeBuffer1.texture;
-      this.separableBlurMaterial1.uniforms["direction"].value = this.BlurDirectionX;
-      this.separableBlurMaterial1.uniforms["kernelRadius"].value = this.edgeThickness;
-      renderer.setRenderTarget(this.renderTargetBlurBuffer1);
-      renderer.clear();
-      this.fsQuad.render(renderer);
-      this.separableBlurMaterial1.uniforms["colorTexture"].value = this.renderTargetBlurBuffer1.texture;
-      this.separableBlurMaterial1.uniforms["direction"].value = this.BlurDirectionY;
-      renderer.setRenderTarget(this.renderTargetEdgeBuffer1);
-      renderer.clear();
-      this.fsQuad.render(renderer);
-      this.fsQuad.material = this.separableBlurMaterial2;
-      this.separableBlurMaterial2.uniforms["colorTexture"].value = this.renderTargetEdgeBuffer1.texture;
-      this.separableBlurMaterial2.uniforms["direction"].value = this.BlurDirectionX;
-      renderer.setRenderTarget(this.renderTargetBlurBuffer2);
-      renderer.clear();
-      this.fsQuad.render(renderer);
-      this.separableBlurMaterial2.uniforms["colorTexture"].value = this.renderTargetBlurBuffer2.texture;
-      this.separableBlurMaterial2.uniforms["direction"].value = this.BlurDirectionY;
-      renderer.setRenderTarget(this.renderTargetEdgeBuffer2);
-      renderer.clear();
-      this.fsQuad.render(renderer);
-      this.fsQuad.material = this.overlayMaterial;
-      this.overlayMaterial.uniforms["maskTexture"].value = this.renderTargetMaskBuffer.texture;
-      this.overlayMaterial.uniforms["edgeTexture1"].value = this.renderTargetEdgeBuffer1.texture;
-      this.overlayMaterial.uniforms["edgeTexture2"].value = this.renderTargetEdgeBuffer2.texture;
-      this.overlayMaterial.uniforms["patternTexture"].value = this.patternTexture;
-      this.overlayMaterial.uniforms["edgeStrength"].value = this.edgeStrength;
-      this.overlayMaterial.uniforms["edgeGlow"].value = this.edgeGlow;
-      this.overlayMaterial.uniforms["usePatternTexture"].value = this.usePatternTexture;
-      if (maskActive)
-        renderer.state.buffers.stencil.setTest(true);
-      renderer.setRenderTarget(readBuffer);
-      this.fsQuad.render(renderer);
-      renderer.setClearColor(this._oldClearColor, this.oldClearAlpha);
-      renderer.autoClear = oldAutoClear;
-    }
-    if (this.renderToScreen) {
-      this.fsQuad.material = this.materialCopy;
-      this.copyUniforms["tDiffuse"].value = readBuffer.texture;
-      renderer.setRenderTarget(null);
-      this.fsQuad.render(renderer);
-    }
-  }
-  getPrepareMaskMaterial() {
-    return new three_module.ShaderMaterial({
-      uniforms: {
-        depthTexture: { value: null },
-        cameraNearFar: { value: new three_module.Vector2(0.5, 0.5) },
-        textureMatrix: { value: null }
-      },
-      vertexShader: `#include <morphtarget_pars_vertex>
-				#include <skinning_pars_vertex>
-				varying vec4 projTexCoord;
-				varying vec4 vPosition;
-				uniform mat4 textureMatrix;
-				void main() {
-					#include <skinbase_vertex>
-					#include <begin_vertex>
-					#include <morphtarget_vertex>
-					#include <skinning_vertex>
-					#include <project_vertex>
-					vPosition = mvPosition;
-					vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );
-					projTexCoord = textureMatrix * worldPosition;
-				}`,
-      fragmentShader: `#include <packing>
-				varying vec4 vPosition;
-				varying vec4 projTexCoord;
-				uniform sampler2D depthTexture;
-				uniform vec2 cameraNearFar;
-				void main() {
-					float depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));
-					float viewZ = - DEPTH_TO_VIEW_Z( depth, cameraNearFar.x, cameraNearFar.y );
-					float depthTest = (-vPosition.z > viewZ) ? 1.0 : 0.0;
-					gl_FragColor = vec4(0.0, depthTest, 1.0, 1.0);
-				}`
-    });
-  }
-  getEdgeDetectionMaterial() {
-    return new three_module.ShaderMaterial({
-      uniforms: {
-        maskTexture: { value: null },
-        texSize: { value: new three_module.Vector2(0.5, 0.5) },
-        visibleEdgeColor: { value: new three_module.Vector3(1, 1, 1) },
-        hiddenEdgeColor: { value: new three_module.Vector3(1, 1, 1) }
-      },
-      vertexShader: `varying vec2 vUv;
-				void main() {
-					vUv = uv;
-					gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-				}`,
-      fragmentShader: `varying vec2 vUv;
-				uniform sampler2D maskTexture;
-				uniform vec2 texSize;
-				uniform vec3 visibleEdgeColor;
-				uniform vec3 hiddenEdgeColor;
-				void main() {
-					vec2 invSize = 1.0 / texSize;
-					vec4 uvOffset = vec4(1.0, 0.0, 0.0, 1.0) * vec4(invSize, invSize);
-					vec4 c1 = texture2D( maskTexture, vUv + uvOffset.xy);
-					vec4 c2 = texture2D( maskTexture, vUv - uvOffset.xy);
-					vec4 c3 = texture2D( maskTexture, vUv + uvOffset.yw);
-					vec4 c4 = texture2D( maskTexture, vUv - uvOffset.yw);
-					float diff1 = (c1.r - c2.r)*0.5;
-					float diff2 = (c3.r - c4.r)*0.5;
-					float d = length( vec2(diff1, diff2) );
-					float a1 = min(c1.g, c2.g);
-					float a2 = min(c3.g, c4.g);
-					float visibilityFactor = min(a1, a2);
-					vec3 edgeColor = 1.0 - visibilityFactor > 0.001 ? visibleEdgeColor : hiddenEdgeColor;
-					gl_FragColor = vec4(edgeColor, 1.0) * vec4(d);
-				}`
-    });
-  }
-  getSeperableBlurMaterial(maxRadius) {
-    return new three_module.ShaderMaterial({
-      defines: {
-        MAX_RADIUS: maxRadius
-      },
-      uniforms: {
-        colorTexture: { value: null },
-        texSize: { value: new three_module.Vector2(0.5, 0.5) },
-        direction: { value: new three_module.Vector2(0.5, 0.5) },
-        kernelRadius: { value: 1 }
-      },
-      vertexShader: `varying vec2 vUv;
-				void main() {
-					vUv = uv;
-					gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-				}`,
-      fragmentShader: `#include <common>
-				varying vec2 vUv;
-				uniform sampler2D colorTexture;
-				uniform vec2 texSize;
-				uniform vec2 direction;
-				uniform float kernelRadius;
-				float gaussianPdf(in float x, in float sigma) {
-					return 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;
-				}
-				void main() {
-					vec2 invSize = 1.0 / texSize;
-					float weightSum = gaussianPdf(0.0, kernelRadius);
-					vec4 diffuseSum = texture2D( colorTexture, vUv) * weightSum;
-					vec2 delta = direction * invSize * kernelRadius/float(MAX_RADIUS);
-					vec2 uvOffset = delta;
-					for( int i = 1; i <= MAX_RADIUS; i ++ ) {
-						float w = gaussianPdf(uvOffset.x, kernelRadius);
-						vec4 sample1 = texture2D( colorTexture, vUv + uvOffset);
-						vec4 sample2 = texture2D( colorTexture, vUv - uvOffset);
-						diffuseSum += ((sample1 + sample2) * w);
-						weightSum += (2.0 * w);
-						uvOffset += delta;
-					}
-					gl_FragColor = diffuseSum/weightSum;
-				}`
-    });
-  }
-  getOverlayMaterial() {
-    return new three_module.ShaderMaterial({
-      uniforms: {
-        maskTexture: { value: null },
-        edgeTexture1: { value: null },
-        edgeTexture2: { value: null },
-        patternTexture: { value: null },
-        edgeStrength: { value: 1 },
-        edgeGlow: { value: 1 },
-        usePatternTexture: { value: 0 }
-      },
-      vertexShader: `varying vec2 vUv;
-				void main() {
-					vUv = uv;
-					gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-				}`,
-      fragmentShader: `varying vec2 vUv;
-				uniform sampler2D maskTexture;
-				uniform sampler2D edgeTexture1;
-				uniform sampler2D edgeTexture2;
-				uniform sampler2D patternTexture;
-				uniform float edgeStrength;
-				uniform float edgeGlow;
-				uniform bool usePatternTexture;
-				void main() {
-					vec4 edgeValue1 = texture2D(edgeTexture1, vUv);
-					vec4 edgeValue2 = texture2D(edgeTexture2, vUv);
-					vec4 maskColor = texture2D(maskTexture, vUv);
-					vec4 patternColor = texture2D(patternTexture, 6.0 * vUv);
-					float visibilityFactor = 1.0 - maskColor.g > 0.0 ? 1.0 : 0.5;
-					vec4 edgeValue = edgeValue1 + edgeValue2 * edgeGlow;
-					vec4 finalColor = edgeStrength * maskColor.r * edgeValue;
-					if(usePatternTexture)
-						finalColor += + visibilityFactor * (1.0 - maskColor.r) * (1.0 - patternColor.r);
-					gl_FragColor = finalColor;
-				}`,
-      blending: three_module.AdditiveBlending,
-      depthTest: false,
-      depthWrite: false,
-      transparent: true
-    });
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/SSAOShader.js
-
-const SSAOShader = {
-  defines: {
-    PERSPECTIVE_CAMERA: 1,
-    KERNEL_SIZE: 32
-  },
-  uniforms: {
-    tDiffuse: { value: null },
-    tNormal: { value: null },
-    tDepth: { value: null },
-    tNoise: { value: null },
-    kernel: { value: null },
-    cameraNear: { value: null },
-    cameraFar: { value: null },
-    resolution: { value: /* @__PURE__ */ new three_module.Vector2() },
-    cameraProjectionMatrix: { value: /* @__PURE__ */ new three_module.Matrix4() },
-    cameraInverseProjectionMatrix: { value: /* @__PURE__ */ new three_module.Matrix4() },
-    kernelRadius: { value: 8 },
-    minDistance: { value: 5e-3 },
-    maxDistance: { value: 0.05 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform sampler2D tNormal;",
-    "uniform sampler2D tDepth;",
-    "uniform sampler2D tNoise;",
-    "uniform vec3 kernel[ KERNEL_SIZE ];",
-    "uniform vec2 resolution;",
-    "uniform float cameraNear;",
-    "uniform float cameraFar;",
-    "uniform mat4 cameraProjectionMatrix;",
-    "uniform mat4 cameraInverseProjectionMatrix;",
-    "uniform float kernelRadius;",
-    "uniform float minDistance;",
-    // avoid artifacts caused by neighbour fragments with minimal depth difference
-    "uniform float maxDistance;",
-    // avoid the influence of fragments which are too far away
-    "varying vec2 vUv;",
-    "#include <packing>",
-    "float getDepth( const in vec2 screenPosition ) {",
-    "	return texture2D( tDepth, screenPosition ).x;",
-    "}",
-    "float getLinearDepth( const in vec2 screenPosition ) {",
-    "	#if PERSPECTIVE_CAMERA == 1",
-    "		float fragCoordZ = texture2D( tDepth, screenPosition ).x;",
-    "		float viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );",
-    "		return viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );",
-    "	#else",
-    "		return texture2D( tDepth, screenPosition ).x;",
-    "	#endif",
-    "}",
-    "float getViewZ( const in float depth ) {",
-    "	#if PERSPECTIVE_CAMERA == 1",
-    "		return perspectiveDepthToViewZ( depth, cameraNear, cameraFar );",
-    "	#else",
-    "		return orthographicDepthToViewZ( depth, cameraNear, cameraFar );",
-    "	#endif",
-    "}",
-    "vec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) {",
-    "	float clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3];",
-    "	vec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 );",
-    "	clipPosition *= clipW; // unprojection.",
-    "	return ( cameraInverseProjectionMatrix * clipPosition ).xyz;",
-    "}",
-    "vec3 getViewNormal( const in vec2 screenPosition ) {",
-    "	return unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz );",
-    "}",
-    "void main() {",
-    "	float depth = getDepth( vUv );",
-    "	float viewZ = getViewZ( depth );",
-    "	vec3 viewPosition = getViewPosition( vUv, depth, viewZ );",
-    "	vec3 viewNormal = getViewNormal( vUv );",
-    " vec2 noiseScale = vec2( resolution.x / 4.0, resolution.y / 4.0 );",
-    "	vec3 random = texture2D( tNoise, vUv * noiseScale ).xyz;",
-    // compute matrix used to reorient a kernel vector
-    "	vec3 tangent = normalize( random - viewNormal * dot( random, viewNormal ) );",
-    "	vec3 bitangent = cross( viewNormal, tangent );",
-    "	mat3 kernelMatrix = mat3( tangent, bitangent, viewNormal );",
-    " float occlusion = 0.0;",
-    " for ( int i = 0; i < KERNEL_SIZE; i ++ ) {",
-    "		vec3 sampleVector = kernelMatrix * kernel[ i ];",
-    // reorient sample vector in view space
-    "		vec3 samplePoint = viewPosition + ( sampleVector * kernelRadius );",
-    // calculate sample point
-    "		vec4 samplePointNDC = cameraProjectionMatrix * vec4( samplePoint, 1.0 );",
-    // project point and calculate NDC
-    "		samplePointNDC /= samplePointNDC.w;",
-    "		vec2 samplePointUv = samplePointNDC.xy * 0.5 + 0.5;",
-    // compute uv coordinates
-    "		float realDepth = getLinearDepth( samplePointUv );",
-    // get linear depth from depth texture
-    "		float sampleDepth = viewZToOrthographicDepth( samplePoint.z, cameraNear, cameraFar );",
-    // compute linear depth of the sample view Z value
-    "		float delta = sampleDepth - realDepth;",
-    "		if ( delta > minDistance && delta < maxDistance ) {",
-    // if fragment is before sample point, increase occlusion
-    "			occlusion += 1.0;",
-    "		}",
-    "	}",
-    "	occlusion = clamp( occlusion / float( KERNEL_SIZE ), 0.0, 1.0 );",
-    "	gl_FragColor = vec4( vec3( 1.0 - occlusion ), 1.0 );",
-    "}"
-  ].join("\n")
-};
-const SSAODepthShader = {
-  defines: {
-    PERSPECTIVE_CAMERA: 1
-  },
-  uniforms: {
-    tDepth: { value: null },
-    cameraNear: { value: null },
-    cameraFar: { value: null }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDepth;",
-    "uniform float cameraNear;",
-    "uniform float cameraFar;",
-    "varying vec2 vUv;",
-    "#include <packing>",
-    "float getLinearDepth( const in vec2 screenPosition ) {",
-    "	#if PERSPECTIVE_CAMERA == 1",
-    "		float fragCoordZ = texture2D( tDepth, screenPosition ).x;",
-    "		float viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );",
-    "		return viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );",
-    "	#else",
-    "		return texture2D( tDepth, screenPosition ).x;",
-    "	#endif",
-    "}",
-    "void main() {",
-    "	float depth = getLinearDepth( vUv );",
-    "	gl_FragColor = vec4( vec3( 1.0 - depth ), 1.0 );",
-    "}"
-  ].join("\n")
-};
-const SSAOBlurShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    resolution: { value: /* @__PURE__ */ new three_module.Vector2() }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform vec2 resolution;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec2 texelSize = ( 1.0 / resolution );",
-    "	float result = 0.0;",
-    "	for ( int i = - 2; i <= 2; i ++ ) {",
-    "		for ( int j = - 2; j <= 2; j ++ ) {",
-    "			vec2 offset = ( vec2( float( i ), float( j ) ) ) * texelSize;",
-    "			result += texture2D( tDiffuse, vUv + offset ).r;",
-    "		}",
-    "	}",
-    "	gl_FragColor = vec4( vec3( result / ( 5.0 * 5.0 ) ), 1.0 );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/SSAOPass.js
-var SSAOPass_defProp = Object.defineProperty;
-var SSAOPass_defNormalProp = (obj, key, value) => key in obj ? SSAOPass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var SSAOPass_publicField = (obj, key, value) => {
-  SSAOPass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-
-
-const _SSAOPass = class extends Pass/* Pass */.w {
-  constructor(scene, camera, width, height) {
-    super();
-    this.width = width !== void 0 ? width : 512;
-    this.height = height !== void 0 ? height : 512;
-    this.clear = true;
-    this.camera = camera;
-    this.scene = scene;
-    this.kernelRadius = 8;
-    this.kernelSize = 32;
-    this.kernel = [];
-    this.noiseTexture = null;
-    this.output = 0;
-    this.minDistance = 5e-3;
-    this.maxDistance = 0.1;
-    this._visibilityCache = /* @__PURE__ */ new Map();
-    this.generateSampleKernel();
-    this.generateRandomKernelRotations();
-    const depthTexture = new three_module.DepthTexture();
-    depthTexture.format = three_module.DepthStencilFormat;
-    depthTexture.type = three_module.UnsignedInt248Type;
-    this.beautyRenderTarget = new three_module.WebGLRenderTarget(this.width, this.height);
-    this.normalRenderTarget = new three_module.WebGLRenderTarget(this.width, this.height, {
-      minFilter: three_module.NearestFilter,
-      magFilter: three_module.NearestFilter,
-      depthTexture
-    });
-    this.ssaoRenderTarget = new three_module.WebGLRenderTarget(this.width, this.height);
-    this.blurRenderTarget = this.ssaoRenderTarget.clone();
-    if (SSAOShader === void 0) {
-      console.error("THREE.SSAOPass: The pass relies on SSAOShader.");
-    }
-    this.ssaoMaterial = new three_module.ShaderMaterial({
-      defines: Object.assign({}, SSAOShader.defines),
-      uniforms: three_module.UniformsUtils.clone(SSAOShader.uniforms),
-      vertexShader: SSAOShader.vertexShader,
-      fragmentShader: SSAOShader.fragmentShader,
-      blending: three_module.NoBlending
-    });
-    this.ssaoMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture;
-    this.ssaoMaterial.uniforms["tNormal"].value = this.normalRenderTarget.texture;
-    this.ssaoMaterial.uniforms["tDepth"].value = this.normalRenderTarget.depthTexture;
-    this.ssaoMaterial.uniforms["tNoise"].value = this.noiseTexture;
-    this.ssaoMaterial.uniforms["kernel"].value = this.kernel;
-    this.ssaoMaterial.uniforms["cameraNear"].value = this.camera.near;
-    this.ssaoMaterial.uniforms["cameraFar"].value = this.camera.far;
-    this.ssaoMaterial.uniforms["resolution"].value.set(this.width, this.height);
-    this.ssaoMaterial.uniforms["cameraProjectionMatrix"].value.copy(this.camera.projectionMatrix);
-    this.ssaoMaterial.uniforms["cameraInverseProjectionMatrix"].value.copy(this.camera.projectionMatrixInverse);
-    this.normalMaterial = new three_module.MeshNormalMaterial();
-    this.normalMaterial.blending = three_module.NoBlending;
-    this.blurMaterial = new three_module.ShaderMaterial({
-      defines: Object.assign({}, SSAOBlurShader.defines),
-      uniforms: three_module.UniformsUtils.clone(SSAOBlurShader.uniforms),
-      vertexShader: SSAOBlurShader.vertexShader,
-      fragmentShader: SSAOBlurShader.fragmentShader
-    });
-    this.blurMaterial.uniforms["tDiffuse"].value = this.ssaoRenderTarget.texture;
-    this.blurMaterial.uniforms["resolution"].value.set(this.width, this.height);
-    this.depthRenderMaterial = new three_module.ShaderMaterial({
-      defines: Object.assign({}, SSAODepthShader.defines),
-      uniforms: three_module.UniformsUtils.clone(SSAODepthShader.uniforms),
-      vertexShader: SSAODepthShader.vertexShader,
-      fragmentShader: SSAODepthShader.fragmentShader,
-      blending: three_module.NoBlending
-    });
-    this.depthRenderMaterial.uniforms["tDepth"].value = this.normalRenderTarget.depthTexture;
-    this.depthRenderMaterial.uniforms["cameraNear"].value = this.camera.near;
-    this.depthRenderMaterial.uniforms["cameraFar"].value = this.camera.far;
-    this.copyMaterial = new three_module.ShaderMaterial({
-      uniforms: three_module.UniformsUtils.clone(CopyShader/* CopyShader.uniforms */.C.uniforms),
-      vertexShader: CopyShader/* CopyShader.vertexShader */.C.vertexShader,
-      fragmentShader: CopyShader/* CopyShader.fragmentShader */.C.fragmentShader,
-      transparent: true,
-      depthTest: false,
-      depthWrite: false,
-      blendSrc: three_module.DstColorFactor,
-      blendDst: three_module.ZeroFactor,
-      blendEquation: three_module.AddEquation,
-      blendSrcAlpha: three_module.DstAlphaFactor,
-      blendDstAlpha: three_module.ZeroFactor,
-      blendEquationAlpha: three_module.AddEquation
-    });
-    this.fsQuad = new Pass/* FullScreenQuad */.T(null);
-    this.originalClearColor = new three_module.Color();
-  }
-  dispose() {
-    this.beautyRenderTarget.dispose();
-    this.normalRenderTarget.dispose();
-    this.ssaoRenderTarget.dispose();
-    this.blurRenderTarget.dispose();
-    this.normalMaterial.dispose();
-    this.blurMaterial.dispose();
-    this.copyMaterial.dispose();
-    this.depthRenderMaterial.dispose();
-    this.fsQuad.dispose();
-  }
-  render(renderer, writeBuffer) {
-    if (renderer.capabilities.isWebGL2 === false)
-      this.noiseTexture.format = three_module.LuminanceFormat;
-    renderer.setRenderTarget(this.beautyRenderTarget);
-    renderer.clear();
-    renderer.render(this.scene, this.camera);
-    this.overrideVisibility();
-    this.renderOverride(renderer, this.normalMaterial, this.normalRenderTarget, 7829503, 1);
-    this.restoreVisibility();
-    this.ssaoMaterial.uniforms["kernelRadius"].value = this.kernelRadius;
-    this.ssaoMaterial.uniforms["minDistance"].value = this.minDistance;
-    this.ssaoMaterial.uniforms["maxDistance"].value = this.maxDistance;
-    this.renderPass(renderer, this.ssaoMaterial, this.ssaoRenderTarget);
-    this.renderPass(renderer, this.blurMaterial, this.blurRenderTarget);
-    switch (this.output) {
-      case _SSAOPass.OUTPUT.SSAO:
-        this.copyMaterial.uniforms["tDiffuse"].value = this.ssaoRenderTarget.texture;
-        this.copyMaterial.blending = three_module.NoBlending;
-        this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);
-        break;
-      case _SSAOPass.OUTPUT.Blur:
-        this.copyMaterial.uniforms["tDiffuse"].value = this.blurRenderTarget.texture;
-        this.copyMaterial.blending = three_module.NoBlending;
-        this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);
-        break;
-      case _SSAOPass.OUTPUT.Beauty:
-        this.copyMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture;
-        this.copyMaterial.blending = three_module.NoBlending;
-        this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);
-        break;
-      case _SSAOPass.OUTPUT.Depth:
-        this.renderPass(renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer);
-        break;
-      case _SSAOPass.OUTPUT.Normal:
-        this.copyMaterial.uniforms["tDiffuse"].value = this.normalRenderTarget.texture;
-        this.copyMaterial.blending = three_module.NoBlending;
-        this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);
-        break;
-      case _SSAOPass.OUTPUT.Default:
-        this.copyMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture;
-        this.copyMaterial.blending = three_module.NoBlending;
-        this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);
-        this.copyMaterial.uniforms["tDiffuse"].value = this.blurRenderTarget.texture;
-        this.copyMaterial.blending = three_module.CustomBlending;
-        this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);
-        break;
-      default:
-        console.warn("THREE.SSAOPass: Unknown output type.");
-    }
-  }
-  renderPass(renderer, passMaterial, renderTarget, clearColor, clearAlpha) {
-    renderer.getClearColor(this.originalClearColor);
-    const originalClearAlpha = renderer.getClearAlpha();
-    const originalAutoClear = renderer.autoClear;
-    renderer.setRenderTarget(renderTarget);
-    renderer.autoClear = false;
-    if (clearColor !== void 0 && clearColor !== null) {
-      renderer.setClearColor(clearColor);
-      renderer.setClearAlpha(clearAlpha || 0);
-      renderer.clear();
-    }
-    this.fsQuad.material = passMaterial;
-    this.fsQuad.render(renderer);
-    renderer.autoClear = originalAutoClear;
-    renderer.setClearColor(this.originalClearColor);
-    renderer.setClearAlpha(originalClearAlpha);
-  }
-  renderOverride(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) {
-    renderer.getClearColor(this.originalClearColor);
-    const originalClearAlpha = renderer.getClearAlpha();
-    const originalAutoClear = renderer.autoClear;
-    renderer.setRenderTarget(renderTarget);
-    renderer.autoClear = false;
-    clearColor = overrideMaterial.clearColor || clearColor;
-    clearAlpha = overrideMaterial.clearAlpha || clearAlpha;
-    if (clearColor !== void 0 && clearColor !== null) {
-      renderer.setClearColor(clearColor);
-      renderer.setClearAlpha(clearAlpha || 0);
-      renderer.clear();
-    }
-    this.scene.overrideMaterial = overrideMaterial;
-    renderer.render(this.scene, this.camera);
-    this.scene.overrideMaterial = null;
-    renderer.autoClear = originalAutoClear;
-    renderer.setClearColor(this.originalClearColor);
-    renderer.setClearAlpha(originalClearAlpha);
-  }
-  setSize(width, height) {
-    this.width = width;
-    this.height = height;
-    this.beautyRenderTarget.setSize(width, height);
-    this.ssaoRenderTarget.setSize(width, height);
-    this.normalRenderTarget.setSize(width, height);
-    this.blurRenderTarget.setSize(width, height);
-    this.ssaoMaterial.uniforms["resolution"].value.set(width, height);
-    this.ssaoMaterial.uniforms["cameraProjectionMatrix"].value.copy(this.camera.projectionMatrix);
-    this.ssaoMaterial.uniforms["cameraInverseProjectionMatrix"].value.copy(this.camera.projectionMatrixInverse);
-    this.blurMaterial.uniforms["resolution"].value.set(width, height);
-  }
-  generateSampleKernel() {
-    const kernelSize = this.kernelSize;
-    const kernel = this.kernel;
-    for (let i = 0; i < kernelSize; i++) {
-      const sample = new three_module.Vector3();
-      sample.x = Math.random() * 2 - 1;
-      sample.y = Math.random() * 2 - 1;
-      sample.z = Math.random();
-      sample.normalize();
-      let scale = i / kernelSize;
-      scale = three_module.MathUtils.lerp(0.1, 1, scale * scale);
-      sample.multiplyScalar(scale);
-      kernel.push(sample);
-    }
-  }
-  generateRandomKernelRotations() {
-    const width = 4, height = 4;
-    if (SimplexNoise/* SimplexNoise */.L === void 0) {
-      console.error("THREE.SSAOPass: The pass relies on SimplexNoise.");
-    }
-    const simplex = new SimplexNoise/* SimplexNoise */.L();
-    const size = width * height;
-    const data = new Float32Array(size);
-    for (let i = 0; i < size; i++) {
-      const x = Math.random() * 2 - 1;
-      const y = Math.random() * 2 - 1;
-      const z = 0;
-      data[i] = simplex.noise3d(x, y, z);
-    }
-    this.noiseTexture = new three_module.DataTexture(data, width, height, three_module.RedFormat, three_module.FloatType);
-    this.noiseTexture.wrapS = three_module.RepeatWrapping;
-    this.noiseTexture.wrapT = three_module.RepeatWrapping;
-    this.noiseTexture.needsUpdate = true;
-  }
-  overrideVisibility() {
-    const scene = this.scene;
-    const cache = this._visibilityCache;
-    scene.traverse(function(object) {
-      cache.set(object, object.visible);
-      if (object.isPoints || object.isLine)
-        object.visible = false;
-    });
-  }
-  restoreVisibility() {
-    const scene = this.scene;
-    const cache = this._visibilityCache;
-    scene.traverse(function(object) {
-      const visible = cache.get(object);
-      object.visible = visible;
-    });
-    cache.clear();
-  }
-};
-let SSAOPass = _SSAOPass;
-SSAOPass_publicField(SSAOPass, "OUTPUT", {
-  Default: 0,
-  SSAO: 1,
-  Blur: 2,
-  Beauty: 3,
-  Depth: 4,
-  Normal: 5
-});
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/SavePass.js
-
-
-
-class SavePass extends Pass/* Pass */.w {
-  constructor(renderTarget) {
-    super();
-    if (CopyShader/* CopyShader */.C === void 0)
-      console.error("THREE.SavePass relies on CopyShader");
-    const shader = CopyShader/* CopyShader */.C;
-    this.textureID = "tDiffuse";
-    this.uniforms = three_module.UniformsUtils.clone(shader.uniforms);
-    this.material = new three_module.ShaderMaterial({
-      uniforms: this.uniforms,
-      vertexShader: shader.vertexShader,
-      fragmentShader: shader.fragmentShader
-    });
-    this.renderTarget = renderTarget;
-    if (this.renderTarget === void 0) {
-      this.renderTarget = new three_module.WebGLRenderTarget(window.innerWidth, window.innerHeight);
-      this.renderTarget.texture.name = "SavePass.rt";
-    }
-    this.needsSwap = false;
-    this.fsQuad = new Pass/* FullScreenQuad */.T(this.material);
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    if (this.uniforms[this.textureID]) {
-      this.uniforms[this.textureID].value = readBuffer.texture;
-    }
-    renderer.setRenderTarget(this.renderTarget);
-    if (this.clear)
-      renderer.clear();
-    this.fsQuad.render(renderer);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/BokehShader.js
-const BokehShader = {
-  defines: {
-    DEPTH_PACKING: 1,
-    PERSPECTIVE_CAMERA: 1
-  },
-  uniforms: {
-    tColor: { value: null },
-    tDepth: { value: null },
-    focus: { value: 1 },
-    aspect: { value: 1 },
-    aperture: { value: 0.025 },
-    maxblur: { value: 0.01 },
-    nearClip: { value: 1 },
-    farClip: { value: 1e3 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "#include <common>",
-    "varying vec2 vUv;",
-    "uniform sampler2D tColor;",
-    "uniform sampler2D tDepth;",
-    "uniform float maxblur;",
-    // max blur amount
-    "uniform float aperture;",
-    // aperture - bigger values for shallower depth of field
-    "uniform float nearClip;",
-    "uniform float farClip;",
-    "uniform float focus;",
-    "uniform float aspect;",
-    "#include <packing>",
-    "float getDepth( const in vec2 screenPosition ) {",
-    "	#if DEPTH_PACKING == 1",
-    "	return unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );",
-    "	#else",
-    "	return texture2D( tDepth, screenPosition ).x;",
-    "	#endif",
-    "}",
-    "float getViewZ( const in float depth ) {",
-    "	#if PERSPECTIVE_CAMERA == 1",
-    "	return perspectiveDepthToViewZ( depth, nearClip, farClip );",
-    "	#else",
-    "	return orthographicDepthToViewZ( depth, nearClip, farClip );",
-    "	#endif",
-    "}",
-    "void main() {",
-    "	vec2 aspectcorrect = vec2( 1.0, aspect );",
-    "	float viewZ = getViewZ( getDepth( vUv ) );",
-    "	float factor = ( focus + viewZ );",
-    // viewZ is <= 0, so this is a difference equation
-    "	vec2 dofblur = vec2 ( clamp( factor * aperture, -maxblur, maxblur ) );",
-    "	vec2 dofblur9 = dofblur * 0.9;",
-    "	vec2 dofblur7 = dofblur * 0.7;",
-    "	vec2 dofblur4 = dofblur * 0.4;",
-    "	vec4 col = vec4( 0.0 );",
-    "	col += texture2D( tColor, vUv.xy );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.0,   0.4  ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.15,  0.37 ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.29,  0.29 ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.37,  0.15 ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.40,  0.0  ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.37, -0.15 ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.29, -0.29 ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.0,  -0.4  ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.15,  0.37 ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.29,  0.29 ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.37,  0.15 ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.4,   0.0  ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.15, -0.37 ) * aspectcorrect ) * dofblur );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.15,  0.37 ) * aspectcorrect ) * dofblur9 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.37,  0.15 ) * aspectcorrect ) * dofblur9 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.37, -0.15 ) * aspectcorrect ) * dofblur9 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur9 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.15,  0.37 ) * aspectcorrect ) * dofblur9 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.37,  0.15 ) * aspectcorrect ) * dofblur9 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur9 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.15, -0.37 ) * aspectcorrect ) * dofblur9 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.29,  0.29 ) * aspectcorrect ) * dofblur7 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.40,  0.0  ) * aspectcorrect ) * dofblur7 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.29, -0.29 ) * aspectcorrect ) * dofblur7 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.0,  -0.4  ) * aspectcorrect ) * dofblur7 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.29,  0.29 ) * aspectcorrect ) * dofblur7 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.4,   0.0  ) * aspectcorrect ) * dofblur7 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur7 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.0,   0.4  ) * aspectcorrect ) * dofblur7 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.29,  0.29 ) * aspectcorrect ) * dofblur4 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.4,   0.0  ) * aspectcorrect ) * dofblur4 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.29, -0.29 ) * aspectcorrect ) * dofblur4 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.0,  -0.4  ) * aspectcorrect ) * dofblur4 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.29,  0.29 ) * aspectcorrect ) * dofblur4 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.4,   0.0  ) * aspectcorrect ) * dofblur4 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur4 );",
-    "	col += texture2D( tColor, vUv.xy + ( vec2(  0.0,   0.4  ) * aspectcorrect ) * dofblur4 );",
-    "	gl_FragColor = col / 41.0;",
-    "	gl_FragColor.a = 1.0;",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/BokehPass.js
-var BokehPass_defProp = Object.defineProperty;
-var BokehPass_defNormalProp = (obj, key, value) => key in obj ? BokehPass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var BokehPass_publicField = (obj, key, value) => {
-  BokehPass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-class BokehPass extends Pass/* Pass */.w {
-  constructor(scene, camera, params) {
-    super();
-    BokehPass_publicField(this, "scene");
-    BokehPass_publicField(this, "camera");
-    BokehPass_publicField(this, "renderTargetDepth");
-    BokehPass_publicField(this, "materialDepth");
-    BokehPass_publicField(this, "materialBokeh");
-    BokehPass_publicField(this, "fsQuad");
-    BokehPass_publicField(this, "_oldClearColor");
-    BokehPass_publicField(this, "uniforms");
-    this.scene = scene;
-    this.camera = camera;
-    const focus = params.focus !== void 0 ? params.focus : 1;
-    const aspect = params.aspect !== void 0 ? params.aspect : camera.aspect;
-    const aperture = params.aperture !== void 0 ? params.aperture : 0.025;
-    const maxblur = params.maxblur !== void 0 ? params.maxblur : 1;
-    const width = params.width || window.innerWidth || 1;
-    const height = params.height || window.innerHeight || 1;
-    this.renderTargetDepth = new three_module.WebGLRenderTarget(width, height, {
-      minFilter: three_module.NearestFilter,
-      magFilter: three_module.NearestFilter
-    });
-    this.renderTargetDepth.texture.name = "BokehPass.depth";
-    this.materialDepth = new three_module.MeshDepthMaterial();
-    this.materialDepth.depthPacking = three_module.RGBADepthPacking;
-    this.materialDepth.blending = three_module.NoBlending;
-    if (BokehShader === void 0) {
-      console.error("BokehPass relies on BokehShader");
-    }
-    const bokehShader = BokehShader;
-    const bokehUniforms = three_module.UniformsUtils.clone(bokehShader.uniforms);
-    bokehUniforms["tDepth"].value = this.renderTargetDepth.texture;
-    bokehUniforms["focus"].value = focus;
-    bokehUniforms["aspect"].value = aspect;
-    bokehUniforms["aperture"].value = aperture;
-    bokehUniforms["maxblur"].value = maxblur;
-    bokehUniforms["nearClip"].value = camera.near;
-    bokehUniforms["farClip"].value = camera.far;
-    this.materialBokeh = new three_module.ShaderMaterial({
-      defines: Object.assign({}, bokehShader.defines),
-      uniforms: bokehUniforms,
-      vertexShader: bokehShader.vertexShader,
-      fragmentShader: bokehShader.fragmentShader
-    });
-    this.uniforms = bokehUniforms;
-    this.needsSwap = false;
-    this.fsQuad = new Pass/* FullScreenQuad */.T(this.materialBokeh);
-    this._oldClearColor = new three_module.Color();
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    this.scene.overrideMaterial = this.materialDepth;
-    renderer.getClearColor(this._oldClearColor);
-    const oldClearAlpha = renderer.getClearAlpha();
-    const oldAutoClear = renderer.autoClear;
-    renderer.autoClear = false;
-    renderer.setClearColor(16777215);
-    renderer.setClearAlpha(1);
-    renderer.setRenderTarget(this.renderTargetDepth);
-    renderer.clear();
-    renderer.render(this.scene, this.camera);
-    this.uniforms["tColor"].value = readBuffer.texture;
-    this.uniforms["nearClip"].value = this.camera.near;
-    this.uniforms["farClip"].value = this.camera.far;
-    if (this.renderToScreen) {
-      renderer.setRenderTarget(null);
-      this.fsQuad.render(renderer);
-    } else {
-      renderer.setRenderTarget(writeBuffer);
-      renderer.clear();
-      this.fsQuad.render(renderer);
-    }
-    this.scene.overrideMaterial = null;
-    renderer.setClearColor(this._oldClearColor);
-    renderer.setClearAlpha(oldClearAlpha);
-    renderer.autoClear = oldAutoClear;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/TexturePass.js
-
-
-
-class TexturePass extends Pass/* Pass */.w {
-  constructor(map, opacity) {
-    super();
-    const shader = CopyShader/* CopyShader */.C;
-    this.map = map;
-    this.opacity = opacity !== void 0 ? opacity : 1;
-    this.uniforms = three_module.UniformsUtils.clone(shader.uniforms);
-    this.material = new three_module.ShaderMaterial({
-      uniforms: this.uniforms,
-      vertexShader: shader.vertexShader,
-      fragmentShader: shader.fragmentShader,
-      depthTest: false,
-      depthWrite: false
-    });
-    this.needsSwap = false;
-    this.fsQuad = new Pass/* FullScreenQuad */.T(null);
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    const oldAutoClear = renderer.autoClear;
-    renderer.autoClear = false;
-    this.fsQuad.material = this.material;
-    this.uniforms["opacity"].value = this.opacity;
-    this.uniforms["tDiffuse"].value = this.map;
-    this.material.transparent = this.opacity < 1;
-    renderer.setRenderTarget(this.renderToScreen ? null : readBuffer);
-    if (this.clear)
-      renderer.clear();
-    this.fsQuad.render(renderer);
-    renderer.autoClear = oldAutoClear;
-  }
-  dispose() {
-    this.material.dispose();
-    this.fsQuad.dispose();
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/LuminosityShader.js
-const LuminosityShader = {
-  uniforms: {
-    tDiffuse: { value: null }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "#include <common>",
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 texel = texture2D( tDiffuse, vUv );",
-    "	float l = linearToRelativeLuminance( texel.rgb );",
-    "	gl_FragColor = vec4( l, l, l, texel.w );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/ToneMapShader.js
-const ToneMapShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    averageLuminance: { value: 1 },
-    luminanceMap: { value: null },
-    maxLuminance: { value: 16 },
-    minLuminance: { value: 0.01 },
-    middleGrey: { value: 0.6 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "#include <common>",
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "uniform float middleGrey;",
-    "uniform float minLuminance;",
-    "uniform float maxLuminance;",
-    "#ifdef ADAPTED_LUMINANCE",
-    "	uniform sampler2D luminanceMap;",
-    "#else",
-    "	uniform float averageLuminance;",
-    "#endif",
-    "vec3 ToneMap( vec3 vColor ) {",
-    "	#ifdef ADAPTED_LUMINANCE",
-    // Get the calculated average luminance
-    "		float fLumAvg = texture2D(luminanceMap, vec2(0.5, 0.5)).r;",
-    "	#else",
-    "		float fLumAvg = averageLuminance;",
-    "	#endif",
-    // Calculate the luminance of the current pixel
-    "	float fLumPixel = linearToRelativeLuminance( vColor );",
-    // Apply the modified operator (Eq. 4)
-    "	float fLumScaled = (fLumPixel * middleGrey) / max( minLuminance, fLumAvg );",
-    "	float fLumCompressed = (fLumScaled * (1.0 + (fLumScaled / (maxLuminance * maxLuminance)))) / (1.0 + fLumScaled);",
-    "	return fLumCompressed * vColor;",
-    "}",
-    "void main() {",
-    "	vec4 texel = texture2D( tDiffuse, vUv );",
-    "	gl_FragColor = vec4( ToneMap( texel.xyz ), texel.w );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/AdaptiveToneMappingPass.js
-
-
-
-
-
-class AdaptiveToneMappingPass extends Pass/* Pass */.w {
-  constructor(adaptive, resolution) {
-    super();
-    this.resolution = resolution !== void 0 ? resolution : 256;
-    this.needsInit = true;
-    this.adaptive = adaptive !== void 0 ? !!adaptive : true;
-    this.luminanceRT = null;
-    this.previousLuminanceRT = null;
-    this.currentLuminanceRT = null;
-    const copyShader = CopyShader/* CopyShader */.C;
-    this.copyUniforms = three_module.UniformsUtils.clone(copyShader.uniforms);
-    this.materialCopy = new three_module.ShaderMaterial({
-      uniforms: this.copyUniforms,
-      vertexShader: copyShader.vertexShader,
-      fragmentShader: copyShader.fragmentShader,
-      blending: three_module.NoBlending,
-      depthTest: false
-    });
-    this.materialLuminance = new three_module.ShaderMaterial({
-      uniforms: three_module.UniformsUtils.clone(LuminosityShader.uniforms),
-      vertexShader: LuminosityShader.vertexShader,
-      fragmentShader: LuminosityShader.fragmentShader,
-      blending: three_module.NoBlending
-    });
-    this.adaptLuminanceShader = {
-      defines: {
-        MIP_LEVEL_1X1: (Math.log(this.resolution) / Math.log(2)).toFixed(1)
-      },
-      uniforms: {
-        lastLum: { value: null },
-        currentLum: { value: null },
-        minLuminance: { value: 0.01 },
-        delta: { value: 0.016 },
-        tau: { value: 1 }
-      },
-      vertexShader: `varying vec2 vUv;
-
-				void main() {
-
-					vUv = uv;
-					gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-
-				}`,
-      fragmentShader: `varying vec2 vUv;
-
-				uniform sampler2D lastLum;
-				uniform sampler2D currentLum;
-				uniform float minLuminance;
-				uniform float delta;
-				uniform float tau;
-
-				void main() {
-
-					vec4 lastLum = texture2D( lastLum, vUv, MIP_LEVEL_1X1 );
-					vec4 currentLum = texture2D( currentLum, vUv, MIP_LEVEL_1X1 );
-
-					float fLastLum = max( minLuminance, lastLum.r );
-					float fCurrentLum = max( minLuminance, currentLum.r );
-
-					//The adaption seems to work better in extreme lighting differences
-					//if the input luminance is squared.
-					fCurrentLum *= fCurrentLum;
-
-					// Adapt the luminance using Pattanaik's technique
-					float fAdaptedLum = fLastLum + (fCurrentLum - fLastLum) * (1.0 - exp(-delta * tau));
-					// "fAdaptedLum = sqrt(fAdaptedLum);
-					gl_FragColor.r = fAdaptedLum;
-				}`
-    };
-    this.materialAdaptiveLum = new three_module.ShaderMaterial({
-      uniforms: three_module.UniformsUtils.clone(this.adaptLuminanceShader.uniforms),
-      vertexShader: this.adaptLuminanceShader.vertexShader,
-      fragmentShader: this.adaptLuminanceShader.fragmentShader,
-      defines: Object.assign({}, this.adaptLuminanceShader.defines),
-      blending: three_module.NoBlending
-    });
-    this.materialToneMap = new three_module.ShaderMaterial({
-      uniforms: three_module.UniformsUtils.clone(ToneMapShader.uniforms),
-      vertexShader: ToneMapShader.vertexShader,
-      fragmentShader: ToneMapShader.fragmentShader,
-      blending: three_module.NoBlending
-    });
-    this.fsQuad = new Pass/* FullScreenQuad */.T(null);
-  }
-  render(renderer, writeBuffer, readBuffer, deltaTime) {
-    if (this.needsInit) {
-      this.reset(renderer);
-      this.luminanceRT.texture.type = readBuffer.texture.type;
-      this.previousLuminanceRT.texture.type = readBuffer.texture.type;
-      this.currentLuminanceRT.texture.type = readBuffer.texture.type;
-      this.needsInit = false;
-    }
-    if (this.adaptive) {
-      this.fsQuad.material = this.materialLuminance;
-      this.materialLuminance.uniforms.tDiffuse.value = readBuffer.texture;
-      renderer.setRenderTarget(this.currentLuminanceRT);
-      this.fsQuad.render(renderer);
-      this.fsQuad.material = this.materialAdaptiveLum;
-      this.materialAdaptiveLum.uniforms.delta.value = deltaTime;
-      this.materialAdaptiveLum.uniforms.lastLum.value = this.previousLuminanceRT.texture;
-      this.materialAdaptiveLum.uniforms.currentLum.value = this.currentLuminanceRT.texture;
-      renderer.setRenderTarget(this.luminanceRT);
-      this.fsQuad.render(renderer);
-      this.fsQuad.material = this.materialCopy;
-      this.copyUniforms.tDiffuse.value = this.luminanceRT.texture;
-      renderer.setRenderTarget(this.previousLuminanceRT);
-      this.fsQuad.render(renderer);
-    }
-    this.fsQuad.material = this.materialToneMap;
-    this.materialToneMap.uniforms.tDiffuse.value = readBuffer.texture;
-    if (this.renderToScreen) {
-      renderer.setRenderTarget(null);
-      this.fsQuad.render(renderer);
-    } else {
-      renderer.setRenderTarget(writeBuffer);
-      if (this.clear)
-        renderer.clear();
-      this.fsQuad.render(renderer);
-    }
-  }
-  reset() {
-    if (this.luminanceRT) {
-      this.luminanceRT.dispose();
-    }
-    if (this.currentLuminanceRT) {
-      this.currentLuminanceRT.dispose();
-    }
-    if (this.previousLuminanceRT) {
-      this.previousLuminanceRT.dispose();
-    }
-    this.luminanceRT = new three_module.WebGLRenderTarget(this.resolution, this.resolution);
-    this.luminanceRT.texture.name = "AdaptiveToneMappingPass.l";
-    this.luminanceRT.texture.generateMipmaps = false;
-    this.previousLuminanceRT = new three_module.WebGLRenderTarget(this.resolution, this.resolution);
-    this.previousLuminanceRT.texture.name = "AdaptiveToneMappingPass.pl";
-    this.previousLuminanceRT.texture.generateMipmaps = false;
-    const pars = { minFilter: three_module.LinearMipmapLinearFilter, generateMipmaps: true };
-    this.currentLuminanceRT = new three_module.WebGLRenderTarget(this.resolution, this.resolution, pars);
-    this.currentLuminanceRT.texture.name = "AdaptiveToneMappingPass.cl";
-    if (this.adaptive) {
-      this.materialToneMap.defines["ADAPTED_LUMINANCE"] = "";
-      this.materialToneMap.uniforms.luminanceMap.value = this.luminanceRT.texture;
-    }
-    this.fsQuad.material = new three_module.MeshBasicMaterial({ color: 7829367 });
-    this.materialLuminance.needsUpdate = true;
-    this.materialAdaptiveLum.needsUpdate = true;
-    this.materialToneMap.needsUpdate = true;
-  }
-  setAdaptive(adaptive) {
-    if (adaptive) {
-      this.adaptive = true;
-      this.materialToneMap.defines["ADAPTED_LUMINANCE"] = "";
-      this.materialToneMap.uniforms.luminanceMap.value = this.luminanceRT.texture;
-    } else {
-      this.adaptive = false;
-      delete this.materialToneMap.defines["ADAPTED_LUMINANCE"];
-      this.materialToneMap.uniforms.luminanceMap.value = null;
-    }
-    this.materialToneMap.needsUpdate = true;
-  }
-  setAdaptionRate(rate) {
-    if (rate) {
-      this.materialAdaptiveLum.uniforms.tau.value = Math.abs(rate);
-    }
-  }
-  setMinLuminance(minLum) {
-    if (minLum) {
-      this.materialToneMap.uniforms.minLuminance.value = minLum;
-      this.materialAdaptiveLum.uniforms.minLuminance.value = minLum;
-    }
-  }
-  setMaxLuminance(maxLum) {
-    if (maxLum) {
-      this.materialToneMap.uniforms.maxLuminance.value = maxLum;
-    }
-  }
-  setAverageLuminance(avgLum) {
-    if (avgLum) {
-      this.materialToneMap.uniforms.averageLuminance.value = avgLum;
-    }
-  }
-  setMiddleGrey(middleGrey) {
-    if (middleGrey) {
-      this.materialToneMap.uniforms.middleGrey.value = middleGrey;
-    }
-  }
-  dispose() {
-    if (this.luminanceRT) {
-      this.luminanceRT.dispose();
-    }
-    if (this.previousLuminanceRT) {
-      this.previousLuminanceRT.dispose();
-    }
-    if (this.currentLuminanceRT) {
-      this.currentLuminanceRT.dispose();
-    }
-    if (this.materialLuminance) {
-      this.materialLuminance.dispose();
-    }
-    if (this.materialAdaptiveLum) {
-      this.materialAdaptiveLum.dispose();
-    }
-    if (this.materialCopy) {
-      this.materialCopy.dispose();
-    }
-    if (this.materialToneMap) {
-      this.materialToneMap.dispose();
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/LuminosityHighPassShader.js
-
-const LuminosityHighPassShader = {
-  shaderID: "luminosityHighPass",
-  uniforms: {
-    tDiffuse: { value: null },
-    luminosityThreshold: { value: 1 },
-    smoothWidth: { value: 1 },
-    defaultColor: { value: /* @__PURE__ */ new three_module.Color(0) },
-    defaultOpacity: { value: 0 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform vec3 defaultColor;",
-    "uniform float defaultOpacity;",
-    "uniform float luminosityThreshold;",
-    "uniform float smoothWidth;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 texel = texture2D( tDiffuse, vUv );",
-    "	vec3 luma = vec3( 0.299, 0.587, 0.114 );",
-    "	float v = dot( texel.xyz, luma );",
-    "	vec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );",
-    "	float alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v );",
-    "	gl_FragColor = mix( outputColor, texel, alpha );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/UnrealBloomPass.js
-var UnrealBloomPass_defProp = Object.defineProperty;
-var UnrealBloomPass_defNormalProp = (obj, key, value) => key in obj ? UnrealBloomPass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var UnrealBloomPass_publicField = (obj, key, value) => {
-  UnrealBloomPass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-
-const _UnrealBloomPass = class extends Pass/* Pass */.w {
-  constructor(resolution, strength, radius, threshold) {
-    super();
-    this.strength = strength !== void 0 ? strength : 1;
-    this.radius = radius;
-    this.threshold = threshold;
-    this.resolution = resolution !== void 0 ? new three_module.Vector2(resolution.x, resolution.y) : new three_module.Vector2(256, 256);
-    this.clearColor = new three_module.Color(0, 0, 0);
-    this.renderTargetsHorizontal = [];
-    this.renderTargetsVertical = [];
-    this.nMips = 5;
-    let resx = Math.round(this.resolution.x / 2);
-    let resy = Math.round(this.resolution.y / 2);
-    this.renderTargetBright = new three_module.WebGLRenderTarget(resx, resy, { type: three_module.HalfFloatType });
-    this.renderTargetBright.texture.name = "UnrealBloomPass.bright";
-    this.renderTargetBright.texture.generateMipmaps = false;
-    for (let i = 0; i < this.nMips; i++) {
-      const renderTargetHorizonal = new three_module.WebGLRenderTarget(resx, resy, { type: three_module.HalfFloatType });
-      renderTargetHorizonal.texture.name = "UnrealBloomPass.h" + i;
-      renderTargetHorizonal.texture.generateMipmaps = false;
-      this.renderTargetsHorizontal.push(renderTargetHorizonal);
-      const renderTargetVertical = new three_module.WebGLRenderTarget(resx, resy, { type: three_module.HalfFloatType });
-      renderTargetVertical.texture.name = "UnrealBloomPass.v" + i;
-      renderTargetVertical.texture.generateMipmaps = false;
-      this.renderTargetsVertical.push(renderTargetVertical);
-      resx = Math.round(resx / 2);
-      resy = Math.round(resy / 2);
-    }
-    const highPassShader = LuminosityHighPassShader;
-    this.highPassUniforms = three_module.UniformsUtils.clone(highPassShader.uniforms);
-    this.highPassUniforms["luminosityThreshold"].value = threshold;
-    this.highPassUniforms["smoothWidth"].value = 0.01;
-    this.materialHighPassFilter = new three_module.ShaderMaterial({
-      uniforms: this.highPassUniforms,
-      vertexShader: highPassShader.vertexShader,
-      fragmentShader: highPassShader.fragmentShader,
-      defines: {}
-    });
-    this.separableBlurMaterials = [];
-    const kernelSizeArray = [3, 5, 7, 9, 11];
-    resx = Math.round(this.resolution.x / 2);
-    resy = Math.round(this.resolution.y / 2);
-    for (let i = 0; i < this.nMips; i++) {
-      this.separableBlurMaterials.push(this.getSeperableBlurMaterial(kernelSizeArray[i]));
-      this.separableBlurMaterials[i].uniforms["texSize"].value = new three_module.Vector2(resx, resy);
-      resx = Math.round(resx / 2);
-      resy = Math.round(resy / 2);
-    }
-    this.compositeMaterial = this.getCompositeMaterial(this.nMips);
-    this.compositeMaterial.uniforms["blurTexture1"].value = this.renderTargetsVertical[0].texture;
-    this.compositeMaterial.uniforms["blurTexture2"].value = this.renderTargetsVertical[1].texture;
-    this.compositeMaterial.uniforms["blurTexture3"].value = this.renderTargetsVertical[2].texture;
-    this.compositeMaterial.uniforms["blurTexture4"].value = this.renderTargetsVertical[3].texture;
-    this.compositeMaterial.uniforms["blurTexture5"].value = this.renderTargetsVertical[4].texture;
-    this.compositeMaterial.uniforms["bloomStrength"].value = strength;
-    this.compositeMaterial.uniforms["bloomRadius"].value = 0.1;
-    this.compositeMaterial.needsUpdate = true;
-    const bloomFactors = [1, 0.8, 0.6, 0.4, 0.2];
-    this.compositeMaterial.uniforms["bloomFactors"].value = bloomFactors;
-    this.bloomTintColors = [
-      new three_module.Vector3(1, 1, 1),
-      new three_module.Vector3(1, 1, 1),
-      new three_module.Vector3(1, 1, 1),
-      new three_module.Vector3(1, 1, 1),
-      new three_module.Vector3(1, 1, 1)
-    ];
-    this.compositeMaterial.uniforms["bloomTintColors"].value = this.bloomTintColors;
-    const copyShader = CopyShader/* CopyShader */.C;
-    this.copyUniforms = three_module.UniformsUtils.clone(copyShader.uniforms);
-    this.copyUniforms["opacity"].value = 1;
-    this.materialCopy = new three_module.ShaderMaterial({
-      uniforms: this.copyUniforms,
-      vertexShader: copyShader.vertexShader,
-      fragmentShader: copyShader.fragmentShader,
-      blending: three_module.AdditiveBlending,
-      depthTest: false,
-      depthWrite: false,
-      transparent: true
-    });
-    this.enabled = true;
-    this.needsSwap = false;
-    this._oldClearColor = new three_module.Color();
-    this.oldClearAlpha = 1;
-    this.basic = new three_module.MeshBasicMaterial();
-    this.fsQuad = new Pass/* FullScreenQuad */.T(null);
-  }
-  dispose() {
-    for (let i = 0; i < this.renderTargetsHorizontal.length; i++) {
-      this.renderTargetsHorizontal[i].dispose();
-    }
-    for (let i = 0; i < this.renderTargetsVertical.length; i++) {
-      this.renderTargetsVertical[i].dispose();
-    }
-    this.renderTargetBright.dispose();
-    for (let i = 0; i < this.separableBlurMaterials.length; i++) {
-      this.separableBlurMaterials[i].dispose();
-    }
-    this.compositeMaterial.dispose();
-    this.materialCopy.dispose();
-    this.basic.dispose();
-    this.fsQuad.dispose();
-  }
-  setSize(width, height) {
-    let resx = Math.round(width / 2);
-    let resy = Math.round(height / 2);
-    this.renderTargetBright.setSize(resx, resy);
-    for (let i = 0; i < this.nMips; i++) {
-      this.renderTargetsHorizontal[i].setSize(resx, resy);
-      this.renderTargetsVertical[i].setSize(resx, resy);
-      this.separableBlurMaterials[i].uniforms["texSize"].value = new three_module.Vector2(resx, resy);
-      resx = Math.round(resx / 2);
-      resy = Math.round(resy / 2);
-    }
-  }
-  render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) {
-    renderer.getClearColor(this._oldClearColor);
-    this.oldClearAlpha = renderer.getClearAlpha();
-    const oldAutoClear = renderer.autoClear;
-    renderer.autoClear = false;
-    renderer.setClearColor(this.clearColor, 0);
-    if (maskActive)
-      renderer.state.buffers.stencil.setTest(false);
-    if (this.renderToScreen) {
-      this.fsQuad.material = this.basic;
-      this.basic.map = readBuffer.texture;
-      renderer.setRenderTarget(null);
-      renderer.clear();
-      this.fsQuad.render(renderer);
-    }
-    this.highPassUniforms["tDiffuse"].value = readBuffer.texture;
-    this.highPassUniforms["luminosityThreshold"].value = this.threshold;
-    this.fsQuad.material = this.materialHighPassFilter;
-    renderer.setRenderTarget(this.renderTargetBright);
-    renderer.clear();
-    this.fsQuad.render(renderer);
-    let inputRenderTarget = this.renderTargetBright;
-    for (let i = 0; i < this.nMips; i++) {
-      this.fsQuad.material = this.separableBlurMaterials[i];
-      this.separableBlurMaterials[i].uniforms["colorTexture"].value = inputRenderTarget.texture;
-      this.separableBlurMaterials[i].uniforms["direction"].value = _UnrealBloomPass.BlurDirectionX;
-      renderer.setRenderTarget(this.renderTargetsHorizontal[i]);
-      renderer.clear();
-      this.fsQuad.render(renderer);
-      this.separableBlurMaterials[i].uniforms["colorTexture"].value = this.renderTargetsHorizontal[i].texture;
-      this.separableBlurMaterials[i].uniforms["direction"].value = _UnrealBloomPass.BlurDirectionY;
-      renderer.setRenderTarget(this.renderTargetsVertical[i]);
-      renderer.clear();
-      this.fsQuad.render(renderer);
-      inputRenderTarget = this.renderTargetsVertical[i];
-    }
-    this.fsQuad.material = this.compositeMaterial;
-    this.compositeMaterial.uniforms["bloomStrength"].value = this.strength;
-    this.compositeMaterial.uniforms["bloomRadius"].value = this.radius;
-    this.compositeMaterial.uniforms["bloomTintColors"].value = this.bloomTintColors;
-    renderer.setRenderTarget(this.renderTargetsHorizontal[0]);
-    renderer.clear();
-    this.fsQuad.render(renderer);
-    this.fsQuad.material = this.materialCopy;
-    this.copyUniforms["tDiffuse"].value = this.renderTargetsHorizontal[0].texture;
-    if (maskActive)
-      renderer.state.buffers.stencil.setTest(true);
-    if (this.renderToScreen) {
-      renderer.setRenderTarget(null);
-      this.fsQuad.render(renderer);
-    } else {
-      renderer.setRenderTarget(readBuffer);
-      this.fsQuad.render(renderer);
-    }
-    renderer.setClearColor(this._oldClearColor, this.oldClearAlpha);
-    renderer.autoClear = oldAutoClear;
-  }
-  getSeperableBlurMaterial(kernelRadius) {
-    return new three_module.ShaderMaterial({
-      defines: {
-        KERNEL_RADIUS: kernelRadius,
-        SIGMA: kernelRadius
-      },
-      uniforms: {
-        colorTexture: { value: null },
-        texSize: { value: new three_module.Vector2(0.5, 0.5) },
-        direction: { value: new three_module.Vector2(0.5, 0.5) }
-      },
-      vertexShader: `varying vec2 vUv;
-				void main() {
-					vUv = uv;
-					gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-				}`,
-      fragmentShader: `#include <common>
-				varying vec2 vUv;
-				uniform sampler2D colorTexture;
-				uniform vec2 texSize;
-				uniform vec2 direction;
-
-				float gaussianPdf(in float x, in float sigma) {
-					return 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;
-				}
-				void main() {
-					vec2 invSize = 1.0 / texSize;
-					float fSigma = float(SIGMA);
-					float weightSum = gaussianPdf(0.0, fSigma);
-					vec3 diffuseSum = texture2D( colorTexture, vUv).rgb * weightSum;
-					for( int i = 1; i < KERNEL_RADIUS; i ++ ) {
-						float x = float(i);
-						float w = gaussianPdf(x, fSigma);
-						vec2 uvOffset = direction * invSize * x;
-						vec3 sample1 = texture2D( colorTexture, vUv + uvOffset).rgb;
-						vec3 sample2 = texture2D( colorTexture, vUv - uvOffset).rgb;
-						diffuseSum += (sample1 + sample2) * w;
-						weightSum += 2.0 * w;
-					}
-					gl_FragColor = vec4(diffuseSum/weightSum, 1.0);
-				}`
-    });
-  }
-  getCompositeMaterial(nMips) {
-    return new three_module.ShaderMaterial({
-      defines: {
-        NUM_MIPS: nMips
-      },
-      uniforms: {
-        blurTexture1: { value: null },
-        blurTexture2: { value: null },
-        blurTexture3: { value: null },
-        blurTexture4: { value: null },
-        blurTexture5: { value: null },
-        bloomStrength: { value: 1 },
-        bloomFactors: { value: null },
-        bloomTintColors: { value: null },
-        bloomRadius: { value: 0 }
-      },
-      vertexShader: `varying vec2 vUv;
-				void main() {
-					vUv = uv;
-					gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-				}`,
-      fragmentShader: `varying vec2 vUv;
-				uniform sampler2D blurTexture1;
-				uniform sampler2D blurTexture2;
-				uniform sampler2D blurTexture3;
-				uniform sampler2D blurTexture4;
-				uniform sampler2D blurTexture5;
-				uniform float bloomStrength;
-				uniform float bloomRadius;
-				uniform float bloomFactors[NUM_MIPS];
-				uniform vec3 bloomTintColors[NUM_MIPS];
-
-				float lerpBloomFactor(const in float factor) {
-					float mirrorFactor = 1.2 - factor;
-					return mix(factor, mirrorFactor, bloomRadius);
-				}
-
-				void main() {
-					gl_FragColor = bloomStrength * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) +
-						lerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) +
-						lerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) +
-						lerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) +
-						lerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );
-				}`
-    });
-  }
-};
-let UnrealBloomPass = _UnrealBloomPass;
-UnrealBloomPass_publicField(UnrealBloomPass, "BlurDirectionX", /* @__PURE__ */ new three_module.Vector2(1, 0));
-UnrealBloomPass_publicField(UnrealBloomPass, "BlurDirectionY", /* @__PURE__ */ new three_module.Vector2(0, 1));
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/CubeTexturePass.js
-
-
-class CubeTexturePass extends Pass/* Pass */.w {
-  constructor(camera, tCube, opacity = 1) {
-    super();
-    this.camera = camera;
-    this.needsSwap = false;
-    this.cubeShader = three_module.ShaderLib.cube;
-    this.cubeMesh = new three_module.Mesh(
-      new three_module.BoxGeometry(10, 10, 10),
-      new three_module.ShaderMaterial({
-        uniforms: three_module.UniformsUtils.clone(this.cubeShader.uniforms),
-        vertexShader: this.cubeShader.vertexShader,
-        fragmentShader: this.cubeShader.fragmentShader,
-        depthTest: false,
-        depthWrite: false,
-        side: three_module.BackSide
-      })
-    );
-    Object.defineProperty(this.cubeMesh.material, "envMap", {
-      get: function() {
-        return this.uniforms.tCube.value;
-      }
-    });
-    this.tCube = tCube;
-    this.opacity = opacity;
-    this.cubeScene = new three_module.Scene();
-    this.cubeCamera = new three_module.PerspectiveCamera();
-    this.cubeScene.add(this.cubeMesh);
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    const oldAutoClear = renderer.autoClear;
-    renderer.autoClear = false;
-    this.cubeCamera.projectionMatrix.copy(this.camera.projectionMatrix);
-    this.cubeCamera.quaternion.setFromRotationMatrix(this.camera.matrixWorld);
-    this.cubeMesh.material.uniforms.tCube.value = this.tCube;
-    this.cubeMesh.material.uniforms.tFlip.value = this.tCube.isCubeTexture && this.tCube.isRenderTargetTexture === false ? -1 : 1;
-    this.cubeMesh.material.uniforms.opacity.value = this.opacity;
-    this.cubeMesh.material.transparent = this.opacity < 1;
-    renderer.setRenderTarget(this.renderToScreen ? null : readBuffer);
-    if (this.clear)
-      renderer.clear();
-    renderer.render(this.cubeScene, this.cubeCamera);
-    renderer.autoClear = oldAutoClear;
-  }
-  dispose() {
-    this.cubeMesh.geometry.dispose();
-    this.cubeMesh.material.dispose();
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/SAOShader.js
-
-const SAOShader = {
-  defines: {
-    NUM_SAMPLES: 7,
-    NUM_RINGS: 4,
-    NORMAL_TEXTURE: 0,
-    DIFFUSE_TEXTURE: 0,
-    DEPTH_PACKING: 1,
-    PERSPECTIVE_CAMERA: 1
-  },
-  uniforms: {
-    tDepth: { value: null },
-    tDiffuse: { value: null },
-    tNormal: { value: null },
-    size: { value: /* @__PURE__ */ new three_module.Vector2(512, 512) },
-    cameraNear: { value: 1 },
-    cameraFar: { value: 100 },
-    cameraProjectionMatrix: { value: /* @__PURE__ */ new three_module.Matrix4() },
-    cameraInverseProjectionMatrix: { value: /* @__PURE__ */ new three_module.Matrix4() },
-    scale: { value: 1 },
-    intensity: { value: 0.1 },
-    bias: { value: 0.5 },
-    minResolution: { value: 0 },
-    kernelRadius: { value: 100 },
-    randomSeed: { value: 0 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "#include <common>",
-    "varying vec2 vUv;",
-    "#if DIFFUSE_TEXTURE == 1",
-    "uniform sampler2D tDiffuse;",
-    "#endif",
-    "uniform sampler2D tDepth;",
-    "#if NORMAL_TEXTURE == 1",
-    "uniform sampler2D tNormal;",
-    "#endif",
-    "uniform float cameraNear;",
-    "uniform float cameraFar;",
-    "uniform mat4 cameraProjectionMatrix;",
-    "uniform mat4 cameraInverseProjectionMatrix;",
-    "uniform float scale;",
-    "uniform float intensity;",
-    "uniform float bias;",
-    "uniform float kernelRadius;",
-    "uniform float minResolution;",
-    "uniform vec2 size;",
-    "uniform float randomSeed;",
-    "// RGBA depth",
-    "#include <packing>",
-    "vec4 getDefaultColor( const in vec2 screenPosition ) {",
-    "	#if DIFFUSE_TEXTURE == 1",
-    "	return texture2D( tDiffuse, vUv );",
-    "	#else",
-    "	return vec4( 1.0 );",
-    "	#endif",
-    "}",
-    "float getDepth( const in vec2 screenPosition ) {",
-    "	#if DEPTH_PACKING == 1",
-    "	return unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );",
-    "	#else",
-    "	return texture2D( tDepth, screenPosition ).x;",
-    "	#endif",
-    "}",
-    "float getViewZ( const in float depth ) {",
-    "	#if PERSPECTIVE_CAMERA == 1",
-    "	return perspectiveDepthToViewZ( depth, cameraNear, cameraFar );",
-    "	#else",
-    "	return orthographicDepthToViewZ( depth, cameraNear, cameraFar );",
-    "	#endif",
-    "}",
-    "vec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) {",
-    "	float clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3];",
-    "	vec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 );",
-    "	clipPosition *= clipW; // unprojection.",
-    "	return ( cameraInverseProjectionMatrix * clipPosition ).xyz;",
-    "}",
-    "vec3 getViewNormal( const in vec3 viewPosition, const in vec2 screenPosition ) {",
-    "	#if NORMAL_TEXTURE == 1",
-    "	return unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz );",
-    "	#else",
-    "	return normalize( cross( dFdx( viewPosition ), dFdy( viewPosition ) ) );",
-    "	#endif",
-    "}",
-    "float scaleDividedByCameraFar;",
-    "float minResolutionMultipliedByCameraFar;",
-    "float getOcclusion( const in vec3 centerViewPosition, const in vec3 centerViewNormal, const in vec3 sampleViewPosition ) {",
-    "	vec3 viewDelta = sampleViewPosition - centerViewPosition;",
-    "	float viewDistance = length( viewDelta );",
-    "	float scaledScreenDistance = scaleDividedByCameraFar * viewDistance;",
-    "	return max(0.0, (dot(centerViewNormal, viewDelta) - minResolutionMultipliedByCameraFar) / scaledScreenDistance - bias) / (1.0 + pow2( scaledScreenDistance ) );",
-    "}",
-    "// moving costly divides into consts",
-    "const float ANGLE_STEP = PI2 * float( NUM_RINGS ) / float( NUM_SAMPLES );",
-    "const float INV_NUM_SAMPLES = 1.0 / float( NUM_SAMPLES );",
-    "float getAmbientOcclusion( const in vec3 centerViewPosition ) {",
-    "	// precompute some variables require in getOcclusion.",
-    "	scaleDividedByCameraFar = scale / cameraFar;",
-    "	minResolutionMultipliedByCameraFar = minResolution * cameraFar;",
-    "	vec3 centerViewNormal = getViewNormal( centerViewPosition, vUv );",
-    "	// jsfiddle that shows sample pattern: https://jsfiddle.net/a16ff1p7/",
-    "	float angle = rand( vUv + randomSeed ) * PI2;",
-    "	vec2 radius = vec2( kernelRadius * INV_NUM_SAMPLES ) / size;",
-    "	vec2 radiusStep = radius;",
-    "	float occlusionSum = 0.0;",
-    "	float weightSum = 0.0;",
-    "	for( int i = 0; i < NUM_SAMPLES; i ++ ) {",
-    "		vec2 sampleUv = vUv + vec2( cos( angle ), sin( angle ) ) * radius;",
-    "		radius += radiusStep;",
-    "		angle += ANGLE_STEP;",
-    "		float sampleDepth = getDepth( sampleUv );",
-    "		if( sampleDepth >= ( 1.0 - EPSILON ) ) {",
-    "			continue;",
-    "		}",
-    "		float sampleViewZ = getViewZ( sampleDepth );",
-    "		vec3 sampleViewPosition = getViewPosition( sampleUv, sampleDepth, sampleViewZ );",
-    "		occlusionSum += getOcclusion( centerViewPosition, centerViewNormal, sampleViewPosition );",
-    "		weightSum += 1.0;",
-    "	}",
-    "	if( weightSum == 0.0 ) discard;",
-    "	return occlusionSum * ( intensity / weightSum );",
-    "}",
-    "void main() {",
-    "	float centerDepth = getDepth( vUv );",
-    "	if( centerDepth >= ( 1.0 - EPSILON ) ) {",
-    "		discard;",
-    "	}",
-    "	float centerViewZ = getViewZ( centerDepth );",
-    "	vec3 viewPosition = getViewPosition( vUv, centerDepth, centerViewZ );",
-    "	float ambientOcclusion = getAmbientOcclusion( viewPosition );",
-    "	gl_FragColor = getDefaultColor( vUv );",
-    "	gl_FragColor.xyz *=  1.0 - ambientOcclusion;",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/DepthLimitedBlurShader.js
-
-const DepthLimitedBlurShader = {
-  defines: {
-    KERNEL_RADIUS: 4,
-    DEPTH_PACKING: 1,
-    PERSPECTIVE_CAMERA: 1
-  },
-  uniforms: {
-    tDiffuse: { value: null },
-    size: { value: /* @__PURE__ */ new three_module.Vector2(512, 512) },
-    sampleUvOffsets: { value: [/* @__PURE__ */ new three_module.Vector2(0, 0)] },
-    sampleWeights: { value: [1] },
-    tDepth: { value: null },
-    cameraNear: { value: 10 },
-    cameraFar: { value: 1e3 },
-    depthCutoff: { value: 10 }
-  },
-  vertexShader: [
-    "#include <common>",
-    "uniform vec2 size;",
-    "varying vec2 vUv;",
-    "varying vec2 vInvSize;",
-    "void main() {",
-    "	vUv = uv;",
-    "	vInvSize = 1.0 / size;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "#include <common>",
-    "#include <packing>",
-    "uniform sampler2D tDiffuse;",
-    "uniform sampler2D tDepth;",
-    "uniform float cameraNear;",
-    "uniform float cameraFar;",
-    "uniform float depthCutoff;",
-    "uniform vec2 sampleUvOffsets[ KERNEL_RADIUS + 1 ];",
-    "uniform float sampleWeights[ KERNEL_RADIUS + 1 ];",
-    "varying vec2 vUv;",
-    "varying vec2 vInvSize;",
-    "float getDepth( const in vec2 screenPosition ) {",
-    "	#if DEPTH_PACKING == 1",
-    "	return unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );",
-    "	#else",
-    "	return texture2D( tDepth, screenPosition ).x;",
-    "	#endif",
-    "}",
-    "float getViewZ( const in float depth ) {",
-    "	#if PERSPECTIVE_CAMERA == 1",
-    "	return perspectiveDepthToViewZ( depth, cameraNear, cameraFar );",
-    "	#else",
-    "	return orthographicDepthToViewZ( depth, cameraNear, cameraFar );",
-    "	#endif",
-    "}",
-    "void main() {",
-    "	float depth = getDepth( vUv );",
-    "	if( depth >= ( 1.0 - EPSILON ) ) {",
-    "		discard;",
-    "	}",
-    "	float centerViewZ = -getViewZ( depth );",
-    "	bool rBreak = false, lBreak = false;",
-    "	float weightSum = sampleWeights[0];",
-    "	vec4 diffuseSum = texture2D( tDiffuse, vUv ) * weightSum;",
-    "	for( int i = 1; i <= KERNEL_RADIUS; i ++ ) {",
-    "		float sampleWeight = sampleWeights[i];",
-    "		vec2 sampleUvOffset = sampleUvOffsets[i] * vInvSize;",
-    "		vec2 sampleUv = vUv + sampleUvOffset;",
-    "		float viewZ = -getViewZ( getDepth( sampleUv ) );",
-    "		if( abs( viewZ - centerViewZ ) > depthCutoff ) rBreak = true;",
-    "		if( ! rBreak ) {",
-    "			diffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;",
-    "			weightSum += sampleWeight;",
-    "		}",
-    "		sampleUv = vUv - sampleUvOffset;",
-    "		viewZ = -getViewZ( getDepth( sampleUv ) );",
-    "		if( abs( viewZ - centerViewZ ) > depthCutoff ) lBreak = true;",
-    "		if( ! lBreak ) {",
-    "			diffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;",
-    "			weightSum += sampleWeight;",
-    "		}",
-    "	}",
-    "	gl_FragColor = diffuseSum / weightSum;",
-    "}"
-  ].join("\n")
-};
-const BlurShaderUtils = {
-  createSampleWeights: (kernelRadius, stdDev) => {
-    const gaussian = (x, stdDev2) => {
-      return Math.exp(-(x * x) / (2 * (stdDev2 * stdDev2))) / (Math.sqrt(2 * Math.PI) * stdDev2);
-    };
-    const weights = [];
-    for (let i = 0; i <= kernelRadius; i++) {
-      weights.push(gaussian(i, stdDev));
-    }
-    return weights;
-  },
-  createSampleOffsets: (kernelRadius, uvIncrement) => {
-    const offsets = [];
-    for (let i = 0; i <= kernelRadius; i++) {
-      offsets.push(uvIncrement.clone().multiplyScalar(i));
-    }
-    return offsets;
-  },
-  configure: (shader, kernelRadius, stdDev, uvIncrement) => {
-    shader.defines["KERNEL_RADIUS"] = kernelRadius;
-    shader.uniforms["sampleUvOffsets"].value = BlurShaderUtils.createSampleOffsets(kernelRadius, uvIncrement);
-    shader.uniforms["sampleWeights"].value = BlurShaderUtils.createSampleWeights(kernelRadius, stdDev);
-    shader.needsUpdate = true;
-  }
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/SAOPass.js
-var SAOPass_defProp = Object.defineProperty;
-var SAOPass_defNormalProp = (obj, key, value) => key in obj ? SAOPass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var SAOPass_publicField = (obj, key, value) => {
-  SAOPass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-
-
-
-class SAOPass extends Pass/* Pass */.w {
-  constructor(scene, camera, useDepthTexture = false, useNormals = false, resolution = new three_module.Vector2(256, 256)) {
-    super();
-    this.scene = scene;
-    this.camera = camera;
-    this.clear = true;
-    this.needsSwap = false;
-    this.supportsDepthTextureExtension = useDepthTexture;
-    this.supportsNormalTexture = useNormals;
-    this.originalClearColor = new three_module.Color();
-    this._oldClearColor = new three_module.Color();
-    this.oldClearAlpha = 1;
-    this.params = {
-      output: 0,
-      saoBias: 0.5,
-      saoIntensity: 0.18,
-      saoScale: 1,
-      saoKernelRadius: 100,
-      saoMinResolution: 0,
-      saoBlur: true,
-      saoBlurRadius: 8,
-      saoBlurStdDev: 4,
-      saoBlurDepthCutoff: 0.01
-    };
-    this.resolution = new three_module.Vector2(resolution.x, resolution.y);
-    this.saoRenderTarget = new three_module.WebGLRenderTarget(this.resolution.x, this.resolution.y, { type: three_module.HalfFloatType });
-    this.blurIntermediateRenderTarget = this.saoRenderTarget.clone();
-    this.beautyRenderTarget = this.saoRenderTarget.clone();
-    this.normalRenderTarget = new three_module.WebGLRenderTarget(this.resolution.x, this.resolution.y, {
-      minFilter: three_module.NearestFilter,
-      magFilter: three_module.NearestFilter,
-      type: three_module.HalfFloatType
-    });
-    this.depthRenderTarget = this.normalRenderTarget.clone();
-    let depthTexture;
-    if (this.supportsDepthTextureExtension) {
-      depthTexture = new three_module.DepthTexture();
-      depthTexture.type = three_module.UnsignedShortType;
-      this.beautyRenderTarget.depthTexture = depthTexture;
-      this.beautyRenderTarget.depthBuffer = true;
-    }
-    this.depthMaterial = new three_module.MeshDepthMaterial();
-    this.depthMaterial.depthPacking = three_module.RGBADepthPacking;
-    this.depthMaterial.blending = three_module.NoBlending;
-    this.normalMaterial = new three_module.MeshNormalMaterial();
-    this.normalMaterial.blending = three_module.NoBlending;
-    this.saoMaterial = new three_module.ShaderMaterial({
-      defines: Object.assign({}, SAOShader.defines),
-      fragmentShader: SAOShader.fragmentShader,
-      vertexShader: SAOShader.vertexShader,
-      uniforms: three_module.UniformsUtils.clone(SAOShader.uniforms)
-    });
-    this.saoMaterial.extensions.derivatives = true;
-    this.saoMaterial.defines["DEPTH_PACKING"] = this.supportsDepthTextureExtension ? 0 : 1;
-    this.saoMaterial.defines["NORMAL_TEXTURE"] = this.supportsNormalTexture ? 1 : 0;
-    this.saoMaterial.defines["PERSPECTIVE_CAMERA"] = this.camera.isPerspectiveCamera ? 1 : 0;
-    this.saoMaterial.uniforms["tDepth"].value = this.supportsDepthTextureExtension ? depthTexture : this.depthRenderTarget.texture;
-    this.saoMaterial.uniforms["tNormal"].value = this.normalRenderTarget.texture;
-    this.saoMaterial.uniforms["size"].value.set(this.resolution.x, this.resolution.y);
-    this.saoMaterial.uniforms["cameraInverseProjectionMatrix"].value.copy(this.camera.projectionMatrixInverse);
-    this.saoMaterial.uniforms["cameraProjectionMatrix"].value = this.camera.projectionMatrix;
-    this.saoMaterial.blending = three_module.NoBlending;
-    this.vBlurMaterial = new three_module.ShaderMaterial({
-      uniforms: three_module.UniformsUtils.clone(DepthLimitedBlurShader.uniforms),
-      defines: Object.assign({}, DepthLimitedBlurShader.defines),
-      vertexShader: DepthLimitedBlurShader.vertexShader,
-      fragmentShader: DepthLimitedBlurShader.fragmentShader
-    });
-    this.vBlurMaterial.defines["DEPTH_PACKING"] = this.supportsDepthTextureExtension ? 0 : 1;
-    this.vBlurMaterial.defines["PERSPECTIVE_CAMERA"] = this.camera.isPerspectiveCamera ? 1 : 0;
-    this.vBlurMaterial.uniforms["tDiffuse"].value = this.saoRenderTarget.texture;
-    this.vBlurMaterial.uniforms["tDepth"].value = this.supportsDepthTextureExtension ? depthTexture : this.depthRenderTarget.texture;
-    this.vBlurMaterial.uniforms["size"].value.set(this.resolution.x, this.resolution.y);
-    this.vBlurMaterial.blending = three_module.NoBlending;
-    this.hBlurMaterial = new three_module.ShaderMaterial({
-      uniforms: three_module.UniformsUtils.clone(DepthLimitedBlurShader.uniforms),
-      defines: Object.assign({}, DepthLimitedBlurShader.defines),
-      vertexShader: DepthLimitedBlurShader.vertexShader,
-      fragmentShader: DepthLimitedBlurShader.fragmentShader
-    });
-    this.hBlurMaterial.defines["DEPTH_PACKING"] = this.supportsDepthTextureExtension ? 0 : 1;
-    this.hBlurMaterial.defines["PERSPECTIVE_CAMERA"] = this.camera.isPerspectiveCamera ? 1 : 0;
-    this.hBlurMaterial.uniforms["tDiffuse"].value = this.blurIntermediateRenderTarget.texture;
-    this.hBlurMaterial.uniforms["tDepth"].value = this.supportsDepthTextureExtension ? depthTexture : this.depthRenderTarget.texture;
-    this.hBlurMaterial.uniforms["size"].value.set(this.resolution.x, this.resolution.y);
-    this.hBlurMaterial.blending = three_module.NoBlending;
-    this.materialCopy = new three_module.ShaderMaterial({
-      uniforms: three_module.UniformsUtils.clone(CopyShader/* CopyShader.uniforms */.C.uniforms),
-      vertexShader: CopyShader/* CopyShader.vertexShader */.C.vertexShader,
-      fragmentShader: CopyShader/* CopyShader.fragmentShader */.C.fragmentShader,
-      blending: three_module.NoBlending
-    });
-    this.materialCopy.transparent = true;
-    this.materialCopy.depthTest = false;
-    this.materialCopy.depthWrite = false;
-    this.materialCopy.blending = three_module.CustomBlending;
-    this.materialCopy.blendSrc = three_module.DstColorFactor;
-    this.materialCopy.blendDst = three_module.ZeroFactor;
-    this.materialCopy.blendEquation = three_module.AddEquation;
-    this.materialCopy.blendSrcAlpha = three_module.DstAlphaFactor;
-    this.materialCopy.blendDstAlpha = three_module.ZeroFactor;
-    this.materialCopy.blendEquationAlpha = three_module.AddEquation;
-    this.depthCopy = new three_module.ShaderMaterial({
-      uniforms: three_module.UniformsUtils.clone(UnpackDepthRGBAShader.uniforms),
-      vertexShader: UnpackDepthRGBAShader.vertexShader,
-      fragmentShader: UnpackDepthRGBAShader.fragmentShader,
-      blending: three_module.NoBlending
-    });
-    this.fsQuad = new Pass/* FullScreenQuad */.T(null);
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    if (this.renderToScreen) {
-      this.materialCopy.blending = three_module.NoBlending;
-      this.materialCopy.uniforms["tDiffuse"].value = readBuffer.texture;
-      this.materialCopy.needsUpdate = true;
-      this.renderPass(renderer, this.materialCopy, null);
-    }
-    if (this.params.output === 1) {
-      return;
-    }
-    renderer.getClearColor(this._oldClearColor);
-    this.oldClearAlpha = renderer.getClearAlpha();
-    const oldAutoClear = renderer.autoClear;
-    renderer.autoClear = false;
-    renderer.setRenderTarget(this.depthRenderTarget);
-    renderer.clear();
-    this.saoMaterial.uniforms["bias"].value = this.params.saoBias;
-    this.saoMaterial.uniforms["intensity"].value = this.params.saoIntensity;
-    this.saoMaterial.uniforms["scale"].value = this.params.saoScale;
-    this.saoMaterial.uniforms["kernelRadius"].value = this.params.saoKernelRadius;
-    this.saoMaterial.uniforms["minResolution"].value = this.params.saoMinResolution;
-    this.saoMaterial.uniforms["cameraNear"].value = this.camera.near;
-    this.saoMaterial.uniforms["cameraFar"].value = this.camera.far;
-    const depthCutoff = this.params.saoBlurDepthCutoff * (this.camera.far - this.camera.near);
-    this.vBlurMaterial.uniforms["depthCutoff"].value = depthCutoff;
-    this.hBlurMaterial.uniforms["depthCutoff"].value = depthCutoff;
-    this.vBlurMaterial.uniforms["cameraNear"].value = this.camera.near;
-    this.vBlurMaterial.uniforms["cameraFar"].value = this.camera.far;
-    this.hBlurMaterial.uniforms["cameraNear"].value = this.camera.near;
-    this.hBlurMaterial.uniforms["cameraFar"].value = this.camera.far;
-    this.params.saoBlurRadius = Math.floor(this.params.saoBlurRadius);
-    if (this.prevStdDev !== this.params.saoBlurStdDev || this.prevNumSamples !== this.params.saoBlurRadius) {
-      BlurShaderUtils.configure(
-        this.vBlurMaterial,
-        this.params.saoBlurRadius,
-        this.params.saoBlurStdDev,
-        new three_module.Vector2(0, 1)
-      );
-      BlurShaderUtils.configure(
-        this.hBlurMaterial,
-        this.params.saoBlurRadius,
-        this.params.saoBlurStdDev,
-        new three_module.Vector2(1, 0)
-      );
-      this.prevStdDev = this.params.saoBlurStdDev;
-      this.prevNumSamples = this.params.saoBlurRadius;
-    }
-    renderer.setClearColor(0);
-    renderer.setRenderTarget(this.beautyRenderTarget);
-    renderer.clear();
-    renderer.render(this.scene, this.camera);
-    if (!this.supportsDepthTextureExtension) {
-      this.renderOverride(renderer, this.depthMaterial, this.depthRenderTarget, 0, 1);
-    }
-    if (this.supportsNormalTexture) {
-      this.renderOverride(renderer, this.normalMaterial, this.normalRenderTarget, 7829503, 1);
-    }
-    this.renderPass(renderer, this.saoMaterial, this.saoRenderTarget, 16777215, 1);
-    if (this.params.saoBlur) {
-      this.renderPass(renderer, this.vBlurMaterial, this.blurIntermediateRenderTarget, 16777215, 1);
-      this.renderPass(renderer, this.hBlurMaterial, this.saoRenderTarget, 16777215, 1);
-    }
-    let outputMaterial = this.materialCopy;
-    if (this.params.output === 3) {
-      if (this.supportsDepthTextureExtension) {
-        this.materialCopy.uniforms["tDiffuse"].value = this.beautyRenderTarget.depthTexture;
-        this.materialCopy.needsUpdate = true;
-      } else {
-        this.depthCopy.uniforms["tDiffuse"].value = this.depthRenderTarget.texture;
-        this.depthCopy.needsUpdate = true;
-        outputMaterial = this.depthCopy;
-      }
-    } else if (this.params.output === 4) {
-      this.materialCopy.uniforms["tDiffuse"].value = this.normalRenderTarget.texture;
-      this.materialCopy.needsUpdate = true;
-    } else {
-      this.materialCopy.uniforms["tDiffuse"].value = this.saoRenderTarget.texture;
-      this.materialCopy.needsUpdate = true;
-    }
-    if (this.params.output === 0) {
-      outputMaterial.blending = three_module.CustomBlending;
-    } else {
-      outputMaterial.blending = three_module.NoBlending;
-    }
-    this.renderPass(renderer, outputMaterial, this.renderToScreen ? null : readBuffer);
-    renderer.setClearColor(this._oldClearColor, this.oldClearAlpha);
-    renderer.autoClear = oldAutoClear;
-  }
-  renderPass(renderer, passMaterial, renderTarget, clearColor, clearAlpha) {
-    renderer.getClearColor(this.originalClearColor);
-    const originalClearAlpha = renderer.getClearAlpha();
-    const originalAutoClear = renderer.autoClear;
-    renderer.setRenderTarget(renderTarget);
-    renderer.autoClear = false;
-    if (clearColor !== void 0 && clearColor !== null) {
-      renderer.setClearColor(clearColor);
-      renderer.setClearAlpha(clearAlpha || 0);
-      renderer.clear();
-    }
-    this.fsQuad.material = passMaterial;
-    this.fsQuad.render(renderer);
-    renderer.autoClear = originalAutoClear;
-    renderer.setClearColor(this.originalClearColor);
-    renderer.setClearAlpha(originalClearAlpha);
-  }
-  renderOverride(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) {
-    renderer.getClearColor(this.originalClearColor);
-    const originalClearAlpha = renderer.getClearAlpha();
-    const originalAutoClear = renderer.autoClear;
-    renderer.setRenderTarget(renderTarget);
-    renderer.autoClear = false;
-    clearColor = overrideMaterial.clearColor || clearColor;
-    clearAlpha = overrideMaterial.clearAlpha || clearAlpha;
-    if (clearColor !== void 0 && clearColor !== null) {
-      renderer.setClearColor(clearColor);
-      renderer.setClearAlpha(clearAlpha || 0);
-      renderer.clear();
-    }
-    this.scene.overrideMaterial = overrideMaterial;
-    renderer.render(this.scene, this.camera);
-    this.scene.overrideMaterial = null;
-    renderer.autoClear = originalAutoClear;
-    renderer.setClearColor(this.originalClearColor);
-    renderer.setClearAlpha(originalClearAlpha);
-  }
-  setSize(width, height) {
-    this.beautyRenderTarget.setSize(width, height);
-    this.saoRenderTarget.setSize(width, height);
-    this.blurIntermediateRenderTarget.setSize(width, height);
-    this.normalRenderTarget.setSize(width, height);
-    this.depthRenderTarget.setSize(width, height);
-    this.saoMaterial.uniforms["size"].value.set(width, height);
-    this.saoMaterial.uniforms["cameraInverseProjectionMatrix"].value.copy(this.camera.projectionMatrixInverse);
-    this.saoMaterial.uniforms["cameraProjectionMatrix"].value = this.camera.projectionMatrix;
-    this.saoMaterial.needsUpdate = true;
-    this.vBlurMaterial.uniforms["size"].value.set(width, height);
-    this.vBlurMaterial.needsUpdate = true;
-    this.hBlurMaterial.uniforms["size"].value.set(width, height);
-    this.hBlurMaterial.needsUpdate = true;
-  }
-  dispose() {
-    this.saoRenderTarget.dispose();
-    this.blurIntermediateRenderTarget.dispose();
-    this.beautyRenderTarget.dispose();
-    this.normalRenderTarget.dispose();
-    this.depthRenderTarget.dispose();
-    this.depthMaterial.dispose();
-    this.normalMaterial.dispose();
-    this.saoMaterial.dispose();
-    this.vBlurMaterial.dispose();
-    this.hBlurMaterial.dispose();
-    this.materialCopy.dispose();
-    this.depthCopy.dispose();
-    this.fsQuad.dispose();
-  }
-}
-SAOPass_publicField(SAOPass, "OUTPUT", {
-  Beauty: 1,
-  Default: 0,
-  SAO: 2,
-  Depth: 3,
-  Normal: 4
-});
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/AfterimageShader.js
-const AfterimageShader = {
-  uniforms: {
-    damp: { value: 0.96 },
-    tOld: { value: null },
-    tNew: { value: null }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform float damp;",
-    "uniform sampler2D tOld;",
-    "uniform sampler2D tNew;",
-    "varying vec2 vUv;",
-    "vec4 when_gt( vec4 x, float y ) {",
-    "	return max( sign( x - y ), 0.0 );",
-    "}",
-    "void main() {",
-    "	vec4 texelOld = texture2D( tOld, vUv );",
-    "	vec4 texelNew = texture2D( tNew, vUv );",
-    "	texelOld *= damp * when_gt( texelOld, 0.1 );",
-    "	gl_FragColor = max(texelNew, texelOld);",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/AfterimagePass.js
-var AfterimagePass_defProp = Object.defineProperty;
-var AfterimagePass_defNormalProp = (obj, key, value) => key in obj ? AfterimagePass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var AfterimagePass_publicField = (obj, key, value) => {
-  AfterimagePass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-class AfterimagePass extends Pass/* Pass */.w {
-  constructor(damp = 0.96, shader = AfterimageShader) {
-    super();
-    AfterimagePass_publicField(this, "shader");
-    AfterimagePass_publicField(this, "uniforms");
-    AfterimagePass_publicField(this, "textureComp");
-    AfterimagePass_publicField(this, "textureOld");
-    AfterimagePass_publicField(this, "shaderMaterial");
-    AfterimagePass_publicField(this, "compFsQuad");
-    AfterimagePass_publicField(this, "copyFsQuad");
-    this.shader = shader;
-    this.uniforms = three_module.UniformsUtils.clone(shader.uniforms);
-    this.uniforms["damp"].value = damp;
-    this.textureComp = new three_module.WebGLRenderTarget(window.innerWidth, window.innerHeight, {
-      minFilter: three_module.LinearFilter,
-      magFilter: three_module.NearestFilter,
-      format: three_module.RGBAFormat
-    });
-    this.textureOld = new three_module.WebGLRenderTarget(window.innerWidth, window.innerHeight, {
-      minFilter: three_module.LinearFilter,
-      magFilter: three_module.NearestFilter,
-      format: three_module.RGBAFormat
-    });
-    this.shaderMaterial = new three_module.ShaderMaterial({
-      uniforms: this.uniforms,
-      vertexShader: this.shader.vertexShader,
-      fragmentShader: this.shader.fragmentShader
-    });
-    this.compFsQuad = new Pass/* FullScreenQuad */.T(this.shaderMaterial);
-    let material = new three_module.MeshBasicMaterial();
-    this.copyFsQuad = new Pass/* FullScreenQuad */.T(material);
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    this.uniforms["tOld"].value = this.textureOld.texture;
-    this.uniforms["tNew"].value = readBuffer.texture;
-    renderer.setRenderTarget(this.textureComp);
-    this.compFsQuad.render(renderer);
-    this.copyFsQuad.material.map = this.textureComp.texture;
-    if (this.renderToScreen) {
-      renderer.setRenderTarget(null);
-      this.copyFsQuad.render(renderer);
-    } else {
-      renderer.setRenderTarget(writeBuffer);
-      if (this.clear)
-        renderer.clear();
-      this.copyFsQuad.render(renderer);
-    }
-    let temp = this.textureOld;
-    this.textureOld = this.textureComp;
-    this.textureComp = temp;
-  }
-  setSize(width, height) {
-    this.textureComp.setSize(width, height);
-    this.textureOld.setSize(width, height);
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/postprocessing/MaskPass.js
-var MaskPass = __webpack_require__(14394);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/postprocessing/EffectComposer.js
-var EffectComposer = __webpack_require__(8064);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/DotScreenShader.js
-
-const DotScreenShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    tSize: { value: /* @__PURE__ */ new three_module.Vector2(256, 256) },
-    center: { value: /* @__PURE__ */ new three_module.Vector2(0.5, 0.5) },
-    angle: { value: 1.57 },
-    scale: { value: 1 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform vec2 center;",
-    "uniform float angle;",
-    "uniform float scale;",
-    "uniform vec2 tSize;",
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "float pattern() {",
-    "	float s = sin( angle ), c = cos( angle );",
-    "	vec2 tex = vUv * tSize - center;",
-    "	vec2 point = vec2( c * tex.x - s * tex.y, s * tex.x + c * tex.y ) * scale;",
-    "	return ( sin( point.x ) * sin( point.y ) ) * 4.0;",
-    "}",
-    "void main() {",
-    "	vec4 color = texture2D( tDiffuse, vUv );",
-    "	float average = ( color.r + color.g + color.b ) / 3.0;",
-    "	gl_FragColor = vec4( vec3( average * 10.0 - 5.0 + pattern() ), color.a );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/DotScreenPass.js
-var DotScreenPass_defProp = Object.defineProperty;
-var DotScreenPass_defNormalProp = (obj, key, value) => key in obj ? DotScreenPass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var DotScreenPass_publicField = (obj, key, value) => {
-  DotScreenPass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-class DotScreenPass extends Pass/* Pass */.w {
-  constructor(center, angle, scale) {
-    super();
-    DotScreenPass_publicField(this, "material");
-    DotScreenPass_publicField(this, "fsQuad");
-    DotScreenPass_publicField(this, "uniforms");
-    if (DotScreenShader === void 0)
-      console.error("THREE.DotScreenPass relies on THREE.DotScreenShader");
-    const shader = DotScreenShader;
-    this.uniforms = three_module.UniformsUtils.clone(shader.uniforms);
-    if (center !== void 0)
-      this.uniforms["center"].value.copy(center);
-    if (angle !== void 0)
-      this.uniforms["angle"].value = angle;
-    if (scale !== void 0)
-      this.uniforms["scale"].value = scale;
-    this.material = new three_module.ShaderMaterial({
-      uniforms: this.uniforms,
-      vertexShader: shader.vertexShader,
-      fragmentShader: shader.fragmentShader
-    });
-    this.fsQuad = new Pass/* FullScreenQuad */.T(this.material);
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    this.uniforms["tDiffuse"].value = readBuffer.texture;
-    this.uniforms["tSize"].value.set(readBuffer.width, readBuffer.height);
-    if (this.renderToScreen) {
-      renderer.setRenderTarget(null);
-      this.fsQuad.render(renderer);
-    } else {
-      renderer.setRenderTarget(writeBuffer);
-      if (this.clear)
-        renderer.clear();
-      this.fsQuad.render(renderer);
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/SSRShader.js
-
-const SSRShader = {
-  defines: {
-    MAX_STEP: 0,
-    isPerspectiveCamera: true,
-    isDistanceAttenuation: true,
-    isFresnel: true,
-    isInfiniteThick: false,
-    isSelective: false
-  },
-  uniforms: {
-    tDiffuse: { value: null },
-    tNormal: { value: null },
-    tMetalness: { value: null },
-    tDepth: { value: null },
-    cameraNear: { value: null },
-    cameraFar: { value: null },
-    resolution: { value: /* @__PURE__ */ new three_module.Vector2() },
-    cameraProjectionMatrix: { value: /* @__PURE__ */ new three_module.Matrix4() },
-    cameraInverseProjectionMatrix: { value: /* @__PURE__ */ new three_module.Matrix4() },
-    opacity: { value: 0.5 },
-    maxDistance: { value: 180 },
-    cameraRange: { value: 0 },
-    surfDist: { value: 7e-3 },
-    thickTolerance: { value: 0.03 }
-  },
-  vertexShader: (
-    /* glsl */
-    `
-
-    varying vec2 vUv;
-
-    void main() {
-
-			vUv = uv;
-
-			gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-
-    }
-
-  `
-  ),
-  fragmentShader: (
-    /* glsl */
-    `
-		// precision highp float;
-		precision highp sampler2D;
-		varying vec2 vUv;
-		uniform sampler2D tDepth;
-		uniform sampler2D tNormal;
-		uniform sampler2D tMetalness;
-		uniform sampler2D tDiffuse;
-		uniform float cameraRange;
-		uniform vec2 resolution;
-		uniform float opacity;
-		uniform float cameraNear;
-		uniform float cameraFar;
-		uniform float maxDistance;
-		uniform float surfDist;
-		uniform mat4 cameraProjectionMatrix;
-		uniform mat4 cameraInverseProjectionMatrix;
-		uniform float thickTolerance;
-		#include <packing>
-		float pointToLineDistance(vec3 x0, vec3 x1, vec3 x2) {
-			//x0: point, x1: linePointA, x2: linePointB
-			//https://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html
-			return length(cross(x0-x1,x0-x2))/length(x2-x1);
-		}
-		float pointPlaneDistance(vec3 point,vec3 planePoint,vec3 planeNormal){
-			// https://mathworld.wolfram.com/Point-PlaneDistance.html
-			//// https://en.wikipedia.org/wiki/Plane_(geometry)
-			//// http://paulbourke.net/geometry/pointlineplane/
-			float a=planeNormal.x,b=planeNormal.y,c=planeNormal.z;
-			float x0=point.x,y0=point.y,z0=point.z;
-			float x=planePoint.x,y=planePoint.y,z=planePoint.z;
-			float d=-(a*x+b*y+c*z);
-			float distance=(a*x0+b*y0+c*z0+d)/sqrt(a*a+b*b+c*c);
-			return distance;
-		}
-		float getDepth( const in vec2 uv ) {
-			return texture2D( tDepth, uv ).x;
-		}
-		float getViewZ( const in float depth ) {
-			#ifdef isPerspectiveCamera
-				return perspectiveDepthToViewZ( depth, cameraNear, cameraFar );
-			#else
-				return orthographicDepthToViewZ( depth, cameraNear, cameraFar );
-			#endif
-		}
-		vec3 getViewPosition( const in vec2 uv, const in float depth/*clip space*/, const in float clipW ) {
-			vec4 clipPosition = vec4( ( vec3( uv, depth ) - 0.5 ) * 2.0, 1.0 );//ndc
-			clipPosition *= clipW; //clip
-			return ( cameraInverseProjectionMatrix * clipPosition ).xyz;//view
-		}
-		vec3 getViewNormal( const in vec2 uv ) {
-			return unpackRGBToNormal( texture2D( tNormal, uv ).xyz );
-		}
-		vec2 viewPositionToXY(vec3 viewPosition){
-			vec2 xy;
-			vec4 clip=cameraProjectionMatrix*vec4(viewPosition,1);
-			xy=clip.xy;//clip
-			float clipW=clip.w;
-			xy/=clipW;//NDC
-			xy=(xy+1.)/2.;//uv
-			xy*=resolution;//screen
-			return xy;
-		}
-		void main(){
-			#ifdef isSelective
-				float metalness=texture2D(tMetalness,vUv).r;
-				if(metalness==0.) return;
-			#endif
-
-			float depth = getDepth( vUv );
-			float viewZ = getViewZ( depth );
-			if(-viewZ>=cameraFar) return;
-
-			float clipW = cameraProjectionMatrix[2][3] * viewZ+cameraProjectionMatrix[3][3];
-			vec3 viewPosition=getViewPosition( vUv, depth, clipW );
-
-			vec2 d0=gl_FragCoord.xy;
-			vec2 d1;
-
-			vec3 viewNormal=getViewNormal( vUv );
-
-			#ifdef isPerspectiveCamera
-				vec3 viewIncidenceDir=normalize(viewPosition);
-				vec3 viewReflectDir=reflect(viewIncidenceDir,viewNormal);
-			#else
-				vec3 viewIncidenceDir=vec3(0,0,-1);
-				vec3 viewReflectDir=reflect(viewIncidenceDir,viewNormal);
-			#endif
-
-			float maxReflectRayLen=maxDistance/dot(-viewIncidenceDir,viewNormal);
-			// dot(a,b)==length(a)*length(b)*cos(theta) // https://www.mathsisfun.com/algebra/vectors-dot-product.html
-			// if(a.isNormalized&&b.isNormalized) dot(a,b)==cos(theta)
-			// maxDistance/maxReflectRayLen=cos(theta)
-			// maxDistance/maxReflectRayLen==dot(a,b)
-			// maxReflectRayLen==maxDistance/dot(a,b)
-
-			vec3 d1viewPosition=viewPosition+viewReflectDir*maxReflectRayLen;
-			#ifdef isPerspectiveCamera
-				if(d1viewPosition.z>-cameraNear){
-					//https://tutorial.math.lamar.edu/Classes/CalcIII/EqnsOfLines.aspx
-					float t=(-cameraNear-viewPosition.z)/viewReflectDir.z;
-					d1viewPosition=viewPosition+viewReflectDir*t;
-				}
-			#endif
-			d1=viewPositionToXY(d1viewPosition);
-
-			float totalLen=length(d1-d0);
-			float xLen=d1.x-d0.x;
-			float yLen=d1.y-d0.y;
-			float totalStep=max(abs(xLen),abs(yLen));
-			float xSpan=xLen/totalStep;
-			float ySpan=yLen/totalStep;
-			for(float i=0.;i<MAX_STEP;i++){
-				if(i>=totalStep) break;
-				vec2 xy=vec2(d0.x+i*xSpan,d0.y+i*ySpan);
-				if(xy.x<0.||xy.x>resolution.x||xy.y<0.||xy.y>resolution.y) break;
-				float s=length(xy-d0)/totalLen;
-				vec2 uv=xy/resolution;
-
-				float d = getDepth(uv);
-				float vZ = getViewZ( d );
-				if(-vZ>=cameraFar) continue;
-				float cW = cameraProjectionMatrix[2][3] * vZ+cameraProjectionMatrix[3][3];
-				vec3 vP=getViewPosition( uv, d, cW );
-
-				#ifdef isPerspectiveCamera
-					// https://www.comp.nus.edu.sg/~lowkl/publications/lowk_persp_interp_techrep.pdf
-					float recipVPZ=1./viewPosition.z;
-					float viewReflectRayZ=1./(recipVPZ+s*(1./d1viewPosition.z-recipVPZ));
-					float sD=surfDist*cW;
-				#else
-					float viewReflectRayZ=viewPosition.z+s*(d1viewPosition.z-viewPosition.z);
-					float sD=surfDist;
-				#endif
-				if(viewReflectRayZ-sD>vZ) continue;
-
-				#ifdef isInfiniteThick
-					if(viewReflectRayZ+thickTolerance*clipW<vP.z) break;
-				#endif
-				float away=pointToLineDistance(vP,viewPosition,d1viewPosition);
-
-				float op=opacity;
-
-				if(away<sD){
-					vec3 vN=getViewNormal( uv );
-					if(dot(viewReflectDir,vN)>=0.) continue;
-					float distance=pointPlaneDistance(vP,viewPosition,viewNormal);
-					if(distance>maxDistance) break;
-					#ifdef isDistanceAttenuation
-						float ratio=1.-(distance/maxDistance);
-						float attenuation=ratio*ratio;
-						op=opacity*attenuation;
-					#endif
-					#ifdef isFresnel
-						float fresnel=(dot(viewIncidenceDir,viewReflectDir)+1.)/2.;
-						op*=fresnel;
-					#endif
-					vec4 reflectColor=texture2D(tDiffuse,uv);
-					gl_FragColor.xyz=reflectColor.xyz;
-					gl_FragColor.a=op;
-					break;
-				}
-			}
-		}
-	`
-  )
-};
-const SSRDepthShader = {
-  defines: {
-    PERSPECTIVE_CAMERA: 1
-  },
-  uniforms: {
-    tDepth: { value: null },
-    cameraNear: { value: null },
-    cameraFar: { value: null }
-  },
-  vertexShader: (
-    /* glsl */
-    `
-
-    varying vec2 vUv;
-
-    void main() {
-
-    	vUv = uv;
-    	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-
-    }
-
-  `
-  ),
-  fragmentShader: (
-    /* glsl */
-    `
-
-    uniform sampler2D tDepth;
-
-    uniform float cameraNear;
-    uniform float cameraFar;
-
-    varying vec2 vUv;
-
-    #include <packing>
-
-		float getLinearDepth( const in vec2 uv ) {
-
-			#if PERSPECTIVE_CAMERA == 1
-
-				float fragCoordZ = texture2D( tDepth, uv ).x;
-				float viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );
-				return viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );
-
-			#else
-
-				return texture2D( tDepth, uv ).x;
-
-			#endif
-
-		}
-
-    void main() {
-
-    	float depth = getLinearDepth( vUv );
-			float d = 1.0 - depth;
-			// d=(d-.999)*1000.;
-    	gl_FragColor = vec4( vec3( d ), 1.0 );
-
-    }
-
-  `
-  )
-};
-const SSRBlurShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    resolution: { value: /* @__PURE__ */ new three_module.Vector2() },
-    opacity: { value: 0.5 }
-  },
-  vertexShader: (
-    /* glsl */
-    `
-
-    varying vec2 vUv;
-
-    void main() {
-
-    	vUv = uv;
-    	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-
-    }
-
-  `
-  ),
-  fragmentShader: (
-    /* glsl */
-    `
-
-    uniform sampler2D tDiffuse;
-    uniform vec2 resolution;
-    varying vec2 vUv;
-    void main() {
-			//reverse engineering from PhotoShop blur filter, then change coefficient
-
-    	vec2 texelSize = ( 1.0 / resolution );
-
-			vec4 c=texture2D(tDiffuse,vUv);
-
-			vec2 offset;
-
-			offset=(vec2(-1,0))*texelSize;
-			vec4 cl=texture2D(tDiffuse,vUv+offset);
-
-			offset=(vec2(1,0))*texelSize;
-			vec4 cr=texture2D(tDiffuse,vUv+offset);
-
-			offset=(vec2(0,-1))*texelSize;
-			vec4 cb=texture2D(tDiffuse,vUv+offset);
-
-			offset=(vec2(0,1))*texelSize;
-			vec4 ct=texture2D(tDiffuse,vUv+offset);
-
-			// float coeCenter=.5;
-			// float coeSide=.125;
-			float coeCenter=.2;
-			float coeSide=.2;
-			float a=c.a*coeCenter+cl.a*coeSide+cr.a*coeSide+cb.a*coeSide+ct.a*coeSide;
-			vec3 rgb=(c.rgb*c.a*coeCenter+cl.rgb*cl.a*coeSide+cr.rgb*cr.a*coeSide+cb.rgb*cb.a*coeSide+ct.rgb*ct.a*coeSide)/a;
-			gl_FragColor=vec4(rgb,a);
-
-		}
-	`
-  )
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/SSRPass.js
-var SSRPass_defProp = Object.defineProperty;
-var SSRPass_defNormalProp = (obj, key, value) => key in obj ? SSRPass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var SSRPass_publicField = (obj, key, value) => {
-  SSRPass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-
-const _SSRPass = class extends Pass/* Pass */.w {
-  constructor({ renderer, scene, camera, width, height, selects, bouncing = false, groundReflector }) {
-    super();
-    this.width = width !== void 0 ? width : 512;
-    this.height = height !== void 0 ? height : 512;
-    this.clear = true;
-    this.renderer = renderer;
-    this.scene = scene;
-    this.camera = camera;
-    this.groundReflector = groundReflector;
-    this.opacity = SSRShader.uniforms.opacity.value;
-    this.output = 0;
-    this.maxDistance = SSRShader.uniforms.maxDistance.value;
-    this.thickness = SSRShader.uniforms.thickness.value;
-    this.tempColor = new three_module.Color();
-    this._selects = selects;
-    this.selective = Array.isArray(this._selects);
-    Object.defineProperty(this, "selects", {
-      get() {
-        return this._selects;
-      },
-      set(val) {
-        if (this._selects === val)
-          return;
-        this._selects = val;
-        if (Array.isArray(val)) {
-          this.selective = true;
-          this.ssrMaterial.defines.SELECTIVE = true;
-          this.ssrMaterial.needsUpdate = true;
-        } else {
-          this.selective = false;
-          this.ssrMaterial.defines.SELECTIVE = false;
-          this.ssrMaterial.needsUpdate = true;
-        }
-      }
-    });
-    this._bouncing = bouncing;
-    Object.defineProperty(this, "bouncing", {
-      get() {
-        return this._bouncing;
-      },
-      set(val) {
-        if (this._bouncing === val)
-          return;
-        this._bouncing = val;
-        if (val) {
-          this.ssrMaterial.uniforms["tDiffuse"].value = this.prevRenderTarget.texture;
-        } else {
-          this.ssrMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture;
-        }
-      }
-    });
-    this.blur = true;
-    this._distanceAttenuation = SSRShader.defines.DISTANCE_ATTENUATION;
-    Object.defineProperty(this, "distanceAttenuation", {
-      get() {
-        return this._distanceAttenuation;
-      },
-      set(val) {
-        if (this._distanceAttenuation === val)
-          return;
-        this._distanceAttenuation = val;
-        this.ssrMaterial.defines.DISTANCE_ATTENUATION = val;
-        this.ssrMaterial.needsUpdate = true;
-      }
-    });
-    this._fresnel = SSRShader.defines.FRESNEL;
-    Object.defineProperty(this, "fresnel", {
-      get() {
-        return this._fresnel;
-      },
-      set(val) {
-        if (this._fresnel === val)
-          return;
-        this._fresnel = val;
-        this.ssrMaterial.defines.FRESNEL = val;
-        this.ssrMaterial.needsUpdate = true;
-      }
-    });
-    this._infiniteThick = SSRShader.defines.INFINITE_THICK;
-    Object.defineProperty(this, "infiniteThick", {
-      get() {
-        return this._infiniteThick;
-      },
-      set(val) {
-        if (this._infiniteThick === val)
-          return;
-        this._infiniteThick = val;
-        this.ssrMaterial.defines.INFINITE_THICK = val;
-        this.ssrMaterial.needsUpdate = true;
-      }
-    });
-    const depthTexture = new three_module.DepthTexture();
-    depthTexture.type = three_module.UnsignedShortType;
-    depthTexture.minFilter = three_module.NearestFilter;
-    depthTexture.magFilter = three_module.NearestFilter;
-    this.beautyRenderTarget = new three_module.WebGLRenderTarget(this.width, this.height, {
-      minFilter: three_module.NearestFilter,
-      magFilter: three_module.NearestFilter,
-      type: three_module.HalfFloatType,
-      depthTexture,
-      depthBuffer: true
-    });
-    this.prevRenderTarget = new three_module.WebGLRenderTarget(this.width, this.height, {
-      minFilter: three_module.NearestFilter,
-      magFilter: three_module.NearestFilter
-    });
-    this.normalRenderTarget = new three_module.WebGLRenderTarget(this.width, this.height, {
-      minFilter: three_module.NearestFilter,
-      magFilter: three_module.NearestFilter,
-      type: three_module.HalfFloatType
-    });
-    this.metalnessRenderTarget = new three_module.WebGLRenderTarget(this.width, this.height, {
-      minFilter: three_module.NearestFilter,
-      magFilter: three_module.NearestFilter,
-      type: three_module.HalfFloatType
-    });
-    this.ssrRenderTarget = new three_module.WebGLRenderTarget(this.width, this.height, {
-      minFilter: three_module.NearestFilter,
-      magFilter: three_module.NearestFilter
-    });
-    this.blurRenderTarget = this.ssrRenderTarget.clone();
-    this.blurRenderTarget2 = this.ssrRenderTarget.clone();
-    this.ssrMaterial = new three_module.ShaderMaterial({
-      defines: Object.assign({}, SSRShader.defines, {
-        MAX_STEP: Math.sqrt(this.width * this.width + this.height * this.height)
-      }),
-      uniforms: three_module.UniformsUtils.clone(SSRShader.uniforms),
-      vertexShader: SSRShader.vertexShader,
-      fragmentShader: SSRShader.fragmentShader,
-      blending: three_module.NoBlending
-    });
-    this.ssrMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture;
-    this.ssrMaterial.uniforms["tNormal"].value = this.normalRenderTarget.texture;
-    this.ssrMaterial.defines.SELECTIVE = this.selective;
-    this.ssrMaterial.needsUpdate = true;
-    this.ssrMaterial.uniforms["tMetalness"].value = this.metalnessRenderTarget.texture;
-    this.ssrMaterial.uniforms["tDepth"].value = this.beautyRenderTarget.depthTexture;
-    this.ssrMaterial.uniforms["cameraNear"].value = this.camera.near;
-    this.ssrMaterial.uniforms["cameraFar"].value = this.camera.far;
-    this.ssrMaterial.uniforms["thickness"].value = this.thickness;
-    this.ssrMaterial.uniforms["resolution"].value.set(this.width, this.height);
-    this.ssrMaterial.uniforms["cameraProjectionMatrix"].value.copy(this.camera.projectionMatrix);
-    this.ssrMaterial.uniforms["cameraInverseProjectionMatrix"].value.copy(this.camera.projectionMatrixInverse);
-    this.normalMaterial = new three_module.MeshNormalMaterial();
-    this.normalMaterial.blending = three_module.NoBlending;
-    this.metalnessOnMaterial = new three_module.MeshBasicMaterial({
-      color: "white"
-    });
-    this.metalnessOffMaterial = new three_module.MeshBasicMaterial({
-      color: "black"
-    });
-    this.blurMaterial = new three_module.ShaderMaterial({
-      defines: Object.assign({}, SSRBlurShader.defines),
-      uniforms: three_module.UniformsUtils.clone(SSRBlurShader.uniforms),
-      vertexShader: SSRBlurShader.vertexShader,
-      fragmentShader: SSRBlurShader.fragmentShader
-    });
-    this.blurMaterial.uniforms["tDiffuse"].value = this.ssrRenderTarget.texture;
-    this.blurMaterial.uniforms["resolution"].value.set(this.width, this.height);
-    this.blurMaterial2 = new three_module.ShaderMaterial({
-      defines: Object.assign({}, SSRBlurShader.defines),
-      uniforms: three_module.UniformsUtils.clone(SSRBlurShader.uniforms),
-      vertexShader: SSRBlurShader.vertexShader,
-      fragmentShader: SSRBlurShader.fragmentShader
-    });
-    this.blurMaterial2.uniforms["tDiffuse"].value = this.blurRenderTarget.texture;
-    this.blurMaterial2.uniforms["resolution"].value.set(this.width, this.height);
-    this.depthRenderMaterial = new three_module.ShaderMaterial({
-      defines: Object.assign({}, SSRDepthShader.defines),
-      uniforms: three_module.UniformsUtils.clone(SSRDepthShader.uniforms),
-      vertexShader: SSRDepthShader.vertexShader,
-      fragmentShader: SSRDepthShader.fragmentShader,
-      blending: three_module.NoBlending
-    });
-    this.depthRenderMaterial.uniforms["tDepth"].value = this.beautyRenderTarget.depthTexture;
-    this.depthRenderMaterial.uniforms["cameraNear"].value = this.camera.near;
-    this.depthRenderMaterial.uniforms["cameraFar"].value = this.camera.far;
-    this.copyMaterial = new three_module.ShaderMaterial({
-      uniforms: three_module.UniformsUtils.clone(CopyShader/* CopyShader.uniforms */.C.uniforms),
-      vertexShader: CopyShader/* CopyShader.vertexShader */.C.vertexShader,
-      fragmentShader: CopyShader/* CopyShader.fragmentShader */.C.fragmentShader,
-      transparent: true,
-      depthTest: false,
-      depthWrite: false,
-      blendSrc: three_module.SrcAlphaFactor,
-      blendDst: three_module.OneMinusSrcAlphaFactor,
-      blendEquation: three_module.AddEquation,
-      blendSrcAlpha: three_module.SrcAlphaFactor,
-      blendDstAlpha: three_module.OneMinusSrcAlphaFactor,
-      blendEquationAlpha: three_module.AddEquation
-      // premultipliedAlpha:true,
-    });
-    this.fsQuad = new Pass/* FullScreenQuad */.T(null);
-    this.originalClearColor = new three_module.Color();
-  }
-  dispose() {
-    this.beautyRenderTarget.dispose();
-    this.prevRenderTarget.dispose();
-    this.normalRenderTarget.dispose();
-    this.metalnessRenderTarget.dispose();
-    this.ssrRenderTarget.dispose();
-    this.blurRenderTarget.dispose();
-    this.blurRenderTarget2.dispose();
-    this.normalMaterial.dispose();
-    this.metalnessOnMaterial.dispose();
-    this.metalnessOffMaterial.dispose();
-    this.blurMaterial.dispose();
-    this.blurMaterial2.dispose();
-    this.copyMaterial.dispose();
-    this.depthRenderMaterial.dispose();
-    this.fsQuad.dispose();
-  }
-  render(renderer, writeBuffer) {
-    renderer.setRenderTarget(this.beautyRenderTarget);
-    renderer.clear();
-    if (this.groundReflector) {
-      this.groundReflector.visible = false;
-      this.groundReflector.doRender(this.renderer, this.scene, this.camera);
-      this.groundReflector.visible = true;
-    }
-    renderer.render(this.scene, this.camera);
-    if (this.groundReflector)
-      this.groundReflector.visible = false;
-    this.renderOverride(renderer, this.normalMaterial, this.normalRenderTarget, 0, 0);
-    if (this.selective) {
-      this.renderMetalness(renderer, this.metalnessOnMaterial, this.metalnessRenderTarget, 0, 0);
-    }
-    this.ssrMaterial.uniforms["opacity"].value = this.opacity;
-    this.ssrMaterial.uniforms["maxDistance"].value = this.maxDistance;
-    this.ssrMaterial.uniforms["thickness"].value = this.thickness;
-    this.renderPass(renderer, this.ssrMaterial, this.ssrRenderTarget);
-    if (this.blur) {
-      this.renderPass(renderer, this.blurMaterial, this.blurRenderTarget);
-      this.renderPass(renderer, this.blurMaterial2, this.blurRenderTarget2);
-    }
-    switch (this.output) {
-      case _SSRPass.OUTPUT.Default:
-        if (this.bouncing) {
-          this.copyMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture;
-          this.copyMaterial.blending = three_module.NoBlending;
-          this.renderPass(renderer, this.copyMaterial, this.prevRenderTarget);
-          if (this.blur)
-            this.copyMaterial.uniforms["tDiffuse"].value = this.blurRenderTarget2.texture;
-          else
-            this.copyMaterial.uniforms["tDiffuse"].value = this.ssrRenderTarget.texture;
-          this.copyMaterial.blending = three_module.NormalBlending;
-          this.renderPass(renderer, this.copyMaterial, this.prevRenderTarget);
-          this.copyMaterial.uniforms["tDiffuse"].value = this.prevRenderTarget.texture;
-          this.copyMaterial.blending = three_module.NoBlending;
-          this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);
-        } else {
-          this.copyMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture;
-          this.copyMaterial.blending = three_module.NoBlending;
-          this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);
-          if (this.blur)
-            this.copyMaterial.uniforms["tDiffuse"].value = this.blurRenderTarget2.texture;
-          else
-            this.copyMaterial.uniforms["tDiffuse"].value = this.ssrRenderTarget.texture;
-          this.copyMaterial.blending = three_module.NormalBlending;
-          this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);
-        }
-        break;
-      case _SSRPass.OUTPUT.SSR:
-        if (this.blur)
-          this.copyMaterial.uniforms["tDiffuse"].value = this.blurRenderTarget2.texture;
-        else
-          this.copyMaterial.uniforms["tDiffuse"].value = this.ssrRenderTarget.texture;
-        this.copyMaterial.blending = three_module.NoBlending;
-        this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);
-        if (this.bouncing) {
-          if (this.blur)
-            this.copyMaterial.uniforms["tDiffuse"].value = this.blurRenderTarget2.texture;
-          else
-            this.copyMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture;
-          this.copyMaterial.blending = three_module.NoBlending;
-          this.renderPass(renderer, this.copyMaterial, this.prevRenderTarget);
-          this.copyMaterial.uniforms["tDiffuse"].value = this.ssrRenderTarget.texture;
-          this.copyMaterial.blending = three_module.NormalBlending;
-          this.renderPass(renderer, this.copyMaterial, this.prevRenderTarget);
-        }
-        break;
-      case _SSRPass.OUTPUT.Beauty:
-        this.copyMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture;
-        this.copyMaterial.blending = three_module.NoBlending;
-        this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);
-        break;
-      case _SSRPass.OUTPUT.Depth:
-        this.renderPass(renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer);
-        break;
-      case _SSRPass.OUTPUT.Normal:
-        this.copyMaterial.uniforms["tDiffuse"].value = this.normalRenderTarget.texture;
-        this.copyMaterial.blending = three_module.NoBlending;
-        this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);
-        break;
-      case _SSRPass.OUTPUT.Metalness:
-        this.copyMaterial.uniforms["tDiffuse"].value = this.metalnessRenderTarget.texture;
-        this.copyMaterial.blending = three_module.NoBlending;
-        this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);
-        break;
-      default:
-        console.warn("THREE.SSRPass: Unknown output type.");
-    }
-  }
-  renderPass(renderer, passMaterial, renderTarget, clearColor, clearAlpha) {
-    this.originalClearColor.copy(renderer.getClearColor(this.tempColor));
-    const originalClearAlpha = renderer.getClearAlpha(this.tempColor);
-    const originalAutoClear = renderer.autoClear;
-    renderer.setRenderTarget(renderTarget);
-    renderer.autoClear = false;
-    if (clearColor !== void 0 && clearColor !== null) {
-      renderer.setClearColor(clearColor);
-      renderer.setClearAlpha(clearAlpha || 0);
-      renderer.clear();
-    }
-    this.fsQuad.material = passMaterial;
-    this.fsQuad.render(renderer);
-    renderer.autoClear = originalAutoClear;
-    renderer.setClearColor(this.originalClearColor);
-    renderer.setClearAlpha(originalClearAlpha);
-  }
-  renderOverride(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) {
-    this.originalClearColor.copy(renderer.getClearColor(this.tempColor));
-    const originalClearAlpha = renderer.getClearAlpha(this.tempColor);
-    const originalAutoClear = renderer.autoClear;
-    renderer.setRenderTarget(renderTarget);
-    renderer.autoClear = false;
-    clearColor = overrideMaterial.clearColor || clearColor;
-    clearAlpha = overrideMaterial.clearAlpha || clearAlpha;
-    if (clearColor !== void 0 && clearColor !== null) {
-      renderer.setClearColor(clearColor);
-      renderer.setClearAlpha(clearAlpha || 0);
-      renderer.clear();
-    }
-    this.scene.overrideMaterial = overrideMaterial;
-    renderer.render(this.scene, this.camera);
-    this.scene.overrideMaterial = null;
-    renderer.autoClear = originalAutoClear;
-    renderer.setClearColor(this.originalClearColor);
-    renderer.setClearAlpha(originalClearAlpha);
-  }
-  renderMetalness(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) {
-    this.originalClearColor.copy(renderer.getClearColor(this.tempColor));
-    const originalClearAlpha = renderer.getClearAlpha(this.tempColor);
-    const originalAutoClear = renderer.autoClear;
-    renderer.setRenderTarget(renderTarget);
-    renderer.autoClear = false;
-    clearColor = overrideMaterial.clearColor || clearColor;
-    clearAlpha = overrideMaterial.clearAlpha || clearAlpha;
-    if (clearColor !== void 0 && clearColor !== null) {
-      renderer.setClearColor(clearColor);
-      renderer.setClearAlpha(clearAlpha || 0);
-      renderer.clear();
-    }
-    this.scene.traverseVisible((child) => {
-      child._SSRPassBackupMaterial = child.material;
-      if (this._selects.includes(child)) {
-        child.material = this.metalnessOnMaterial;
-      } else {
-        child.material = this.metalnessOffMaterial;
-      }
-    });
-    renderer.render(this.scene, this.camera);
-    this.scene.traverseVisible((child) => {
-      child.material = child._SSRPassBackupMaterial;
-    });
-    renderer.autoClear = originalAutoClear;
-    renderer.setClearColor(this.originalClearColor);
-    renderer.setClearAlpha(originalClearAlpha);
-  }
-  setSize(width, height) {
-    this.width = width;
-    this.height = height;
-    this.ssrMaterial.defines.MAX_STEP = Math.sqrt(width * width + height * height);
-    this.ssrMaterial.needsUpdate = true;
-    this.beautyRenderTarget.setSize(width, height);
-    this.prevRenderTarget.setSize(width, height);
-    this.ssrRenderTarget.setSize(width, height);
-    this.normalRenderTarget.setSize(width, height);
-    this.metalnessRenderTarget.setSize(width, height);
-    this.blurRenderTarget.setSize(width, height);
-    this.blurRenderTarget2.setSize(width, height);
-    this.ssrMaterial.uniforms["resolution"].value.set(width, height);
-    this.ssrMaterial.uniforms["cameraProjectionMatrix"].value.copy(this.camera.projectionMatrix);
-    this.ssrMaterial.uniforms["cameraInverseProjectionMatrix"].value.copy(this.camera.projectionMatrixInverse);
-    this.blurMaterial.uniforms["resolution"].value.set(width, height);
-    this.blurMaterial2.uniforms["resolution"].value.set(width, height);
-  }
-};
-let SSRPass = _SSRPass;
-SSRPass_publicField(SSRPass, "OUTPUT", {
-  Default: 0,
-  SSR: 1,
-  Beauty: 3,
-  Depth: 4,
-  Normal: 5,
-  Metalness: 7
-});
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/SSAARenderPass.js
-
-
-
-class SSAARenderPass extends Pass/* Pass */.w {
-  constructor(scene, camera, clearColor, clearAlpha) {
-    super();
-    this.scene = scene;
-    this.camera = camera;
-    this.sampleLevel = 4;
-    this.unbiased = true;
-    this.clearColor = clearColor !== void 0 ? clearColor : 0;
-    this.clearAlpha = clearAlpha !== void 0 ? clearAlpha : 0;
-    this._oldClearColor = new three_module.Color();
-    const copyShader = CopyShader/* CopyShader */.C;
-    this.copyUniforms = three_module.UniformsUtils.clone(copyShader.uniforms);
-    this.copyMaterial = new three_module.ShaderMaterial({
-      uniforms: this.copyUniforms,
-      vertexShader: copyShader.vertexShader,
-      fragmentShader: copyShader.fragmentShader,
-      transparent: true,
-      depthTest: false,
-      depthWrite: false,
-      // do not use AdditiveBlending because it mixes the alpha channel instead of adding
-      blending: three_module.CustomBlending,
-      blendEquation: three_module.AddEquation,
-      blendDst: three_module.OneFactor,
-      blendDstAlpha: three_module.OneFactor,
-      blendSrc: three_module.SrcAlphaFactor,
-      blendSrcAlpha: three_module.OneFactor
-    });
-    this.fsQuad = new Pass/* FullScreenQuad */.T(this.copyMaterial);
-  }
-  dispose() {
-    if (this.sampleRenderTarget) {
-      this.sampleRenderTarget.dispose();
-      this.sampleRenderTarget = null;
-    }
-    this.copyMaterial.dispose();
-    this.fsQuad.dispose();
-  }
-  setSize(width, height) {
-    if (this.sampleRenderTarget)
-      this.sampleRenderTarget.setSize(width, height);
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    if (!this.sampleRenderTarget) {
-      this.sampleRenderTarget = new three_module.WebGLRenderTarget(readBuffer.width, readBuffer.height, { type: three_module.HalfFloatType });
-      this.sampleRenderTarget.texture.name = "SSAARenderPass.sample";
-    }
-    const jitterOffsets = _JitterVectors[Math.max(0, Math.min(this.sampleLevel, 5))];
-    const autoClear = renderer.autoClear;
-    renderer.autoClear = false;
-    renderer.getClearColor(this._oldClearColor);
-    const oldClearAlpha = renderer.getClearAlpha();
-    const baseSampleWeight = 1 / jitterOffsets.length;
-    const roundingRange = 1 / 32;
-    this.copyUniforms["tDiffuse"].value = this.sampleRenderTarget.texture;
-    const viewOffset = {
-      fullWidth: readBuffer.width,
-      fullHeight: readBuffer.height,
-      offsetX: 0,
-      offsetY: 0,
-      width: readBuffer.width,
-      height: readBuffer.height
-    };
-    const originalViewOffset = Object.assign({}, this.camera.view);
-    if (originalViewOffset.enabled)
-      Object.assign(viewOffset, originalViewOffset);
-    for (let i = 0; i < jitterOffsets.length; i++) {
-      const jitterOffset = jitterOffsets[i];
-      if (this.camera.setViewOffset) {
-        this.camera.setViewOffset(
-          viewOffset.fullWidth,
-          viewOffset.fullHeight,
-          viewOffset.offsetX + jitterOffset[0] * 0.0625,
-          viewOffset.offsetY + jitterOffset[1] * 0.0625,
-          // 0.0625 = 1 / 16
-          viewOffset.width,
-          viewOffset.height
-        );
-      }
-      let sampleWeight = baseSampleWeight;
-      if (this.unbiased) {
-        const uniformCenteredDistribution = -0.5 + (i + 0.5) / jitterOffsets.length;
-        sampleWeight += roundingRange * uniformCenteredDistribution;
-      }
-      this.copyUniforms["opacity"].value = sampleWeight;
-      renderer.setClearColor(this.clearColor, this.clearAlpha);
-      renderer.setRenderTarget(this.sampleRenderTarget);
-      renderer.clear();
-      renderer.render(this.scene, this.camera);
-      renderer.setRenderTarget(this.renderToScreen ? null : writeBuffer);
-      if (i === 0) {
-        renderer.setClearColor(0, 0);
-        renderer.clear();
-      }
-      this.fsQuad.render(renderer);
-    }
-    if (this.camera.setViewOffset && originalViewOffset.enabled) {
-      this.camera.setViewOffset(
-        originalViewOffset.fullWidth,
-        originalViewOffset.fullHeight,
-        originalViewOffset.offsetX,
-        originalViewOffset.offsetY,
-        originalViewOffset.width,
-        originalViewOffset.height
-      );
-    } else if (this.camera.clearViewOffset) {
-      this.camera.clearViewOffset();
-    }
-    renderer.autoClear = autoClear;
-    renderer.setClearColor(this._oldClearColor, oldClearAlpha);
-  }
-}
-const _JitterVectors = [
-  [
-    [0, 0]
-  ],
-  [
-    [4, 4],
-    [-4, -4]
-  ],
-  [
-    [-2, -6],
-    [6, -2],
-    [-6, 2],
-    [2, 6]
-  ],
-  [
-    [1, -3],
-    [-1, 3],
-    [5, 1],
-    [-3, -5],
-    [-5, 5],
-    [-7, -1],
-    [3, 7],
-    [7, -7]
-  ],
-  [
-    [1, 1],
-    [-1, -3],
-    [-3, 2],
-    [4, -1],
-    [-5, -2],
-    [2, 5],
-    [5, 3],
-    [3, -5],
-    [-2, 6],
-    [0, -7],
-    [-4, -6],
-    [-6, 4],
-    [-8, 0],
-    [7, -4],
-    [6, 7],
-    [-7, -8]
-  ],
-  [
-    [-4, -7],
-    [-7, -5],
-    [-3, -5],
-    [-5, -4],
-    [-1, -4],
-    [-2, -2],
-    [-6, -1],
-    [-4, 0],
-    [-7, 1],
-    [-1, 2],
-    [-6, 3],
-    [-3, 3],
-    [-7, 6],
-    [-3, 6],
-    [-5, 7],
-    [-1, 7],
-    [5, -7],
-    [1, -6],
-    [6, -5],
-    [4, -4],
-    [2, -3],
-    [7, -2],
-    [1, -1],
-    [4, -1],
-    [2, 1],
-    [6, 2],
-    [0, 4],
-    [4, 4],
-    [2, 5],
-    [7, 5],
-    [5, 6],
-    [3, 7]
-  ]
-];
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/TAARenderPass.js
-
-
-class TAARenderPass extends SSAARenderPass {
-  constructor(scene, camera, clearColor, clearAlpha) {
-    super(scene, camera, clearColor, clearAlpha);
-    this.sampleLevel = 0;
-    this.accumulate = false;
-  }
-  render(renderer, writeBuffer, readBuffer, deltaTime) {
-    if (this.accumulate === false) {
-      super.render(renderer, writeBuffer, readBuffer, deltaTime);
-      this.accumulateIndex = -1;
-      return;
-    }
-    const jitterOffsets = TAARenderPass_JitterVectors[5];
-    if (this.sampleRenderTarget === void 0) {
-      this.sampleRenderTarget = new three_module.WebGLRenderTarget(readBuffer.width, readBuffer.height, { type: three_module.HalfFloatType });
-      this.sampleRenderTarget.texture.name = "TAARenderPass.sample";
-    }
-    if (this.holdRenderTarget === void 0) {
-      this.holdRenderTarget = new three_module.WebGLRenderTarget(readBuffer.width, readBuffer.height, { type: three_module.HalfFloatType });
-      this.holdRenderTarget.texture.name = "TAARenderPass.hold";
-    }
-    if (this.accumulateIndex === -1) {
-      super.render(renderer, this.holdRenderTarget, readBuffer, deltaTime);
-      this.accumulateIndex = 0;
-    }
-    const autoClear = renderer.autoClear;
-    renderer.autoClear = false;
-    const sampleWeight = 1 / jitterOffsets.length;
-    if (this.accumulateIndex >= 0 && this.accumulateIndex < jitterOffsets.length) {
-      this.copyUniforms["opacity"].value = sampleWeight;
-      this.copyUniforms["tDiffuse"].value = writeBuffer.texture;
-      const numSamplesPerFrame = Math.pow(2, this.sampleLevel);
-      for (let i = 0; i < numSamplesPerFrame; i++) {
-        const j = this.accumulateIndex;
-        const jitterOffset = jitterOffsets[j];
-        if (this.camera.setViewOffset) {
-          this.camera.setViewOffset(
-            readBuffer.width,
-            readBuffer.height,
-            jitterOffset[0] * 0.0625,
-            jitterOffset[1] * 0.0625,
-            // 0.0625 = 1 / 16
-            readBuffer.width,
-            readBuffer.height
-          );
-        }
-        renderer.setRenderTarget(writeBuffer);
-        renderer.clear();
-        renderer.render(this.scene, this.camera);
-        renderer.setRenderTarget(this.sampleRenderTarget);
-        if (this.accumulateIndex === 0)
-          renderer.clear();
-        this.fsQuad.render(renderer);
-        this.accumulateIndex++;
-        if (this.accumulateIndex >= jitterOffsets.length)
-          break;
-      }
-      if (this.camera.clearViewOffset)
-        this.camera.clearViewOffset();
-    }
-    const accumulationWeight = this.accumulateIndex * sampleWeight;
-    if (accumulationWeight > 0) {
-      this.copyUniforms["opacity"].value = 1;
-      this.copyUniforms["tDiffuse"].value = this.sampleRenderTarget.texture;
-      renderer.setRenderTarget(writeBuffer);
-      renderer.clear();
-      this.fsQuad.render(renderer);
-    }
-    if (accumulationWeight < 1) {
-      this.copyUniforms["opacity"].value = 1 - accumulationWeight;
-      this.copyUniforms["tDiffuse"].value = this.holdRenderTarget.texture;
-      renderer.setRenderTarget(writeBuffer);
-      if (accumulationWeight === 0)
-        renderer.clear();
-      this.fsQuad.render(renderer);
-    }
-    renderer.autoClear = autoClear;
-  }
-  dispose() {
-    super.dispose();
-    if (this.sampleRenderTarget !== void 0)
-      this.sampleRenderTarget.dispose();
-    if (this.holdRenderTarget !== void 0)
-      this.holdRenderTarget.dispose();
-  }
-}
-const TAARenderPass_JitterVectors = [
-  [
-    [0, 0]
-  ],
-  [
-    [4, 4],
-    [-4, -4]
-  ],
-  [
-    [-2, -6],
-    [6, -2],
-    [-6, 2],
-    [2, 6]
-  ],
-  [
-    [1, -3],
-    [-1, 3],
-    [5, 1],
-    [-3, -5],
-    [-5, 5],
-    [-7, -1],
-    [3, 7],
-    [7, -7]
-  ],
-  [
-    [1, 1],
-    [-1, -3],
-    [-3, 2],
-    [4, -1],
-    [-5, -2],
-    [2, 5],
-    [5, 3],
-    [3, -5],
-    [-2, 6],
-    [0, -7],
-    [-4, -6],
-    [-6, 4],
-    [-8, 0],
-    [7, -4],
-    [6, 7],
-    [-7, -8]
-  ],
-  [
-    [-4, -7],
-    [-7, -5],
-    [-3, -5],
-    [-5, -4],
-    [-1, -4],
-    [-2, -2],
-    [-6, -1],
-    [-4, 0],
-    [-7, 1],
-    [-1, 2],
-    [-6, 3],
-    [-3, 3],
-    [-7, 6],
-    [-3, 6],
-    [-5, 7],
-    [-1, 7],
-    [5, -7],
-    [1, -6],
-    [6, -5],
-    [4, -4],
-    [2, -3],
-    [7, -2],
-    [1, -1],
-    [4, -1],
-    [2, 1],
-    [6, 2],
-    [0, 4],
-    [4, 4],
-    [2, 5],
-    [7, 5],
-    [5, 6],
-    [3, 7]
-  ]
-];
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/postprocessing/RenderPass.js
-var RenderPass = __webpack_require__(48197);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/RenderPixelatedPass.js
-
-
-class RenderPixelatedPass extends Pass/* Pass */.w {
-  constructor(resolution, pixelSize, scene, camera, options = {}) {
-    var _a, _b;
-    super();
-    this.pixelSize = pixelSize;
-    this.resolution = new three_module.Vector2();
-    this.renderResolution = new three_module.Vector2();
-    this.setSize(resolution.x, resolution.y);
-    this.fsQuad = new Pass/* FullScreenQuad */.T(this.material());
-    this.scene = scene;
-    this.camera = camera;
-    this.normalEdgeStrength = (_a = options.normalEdgeStrength) != null ? _a : 0.3;
-    this.depthEdgeStrength = (_b = options.depthEdgeStrength) != null ? _b : 0.4;
-    this.rgbRenderTarget = pixelRenderTarget(this.renderResolution, three_module.RGBAFormat, true);
-    this.normalRenderTarget = pixelRenderTarget(this.renderResolution, three_module.RGBAFormat, false);
-    this.normalMaterial = new three_module.MeshNormalMaterial();
-  }
-  dispose() {
-    this.rgbRenderTarget.dispose();
-    this.normalRenderTarget.dispose();
-    this.fsQuad.dispose();
-  }
-  setSize(width, height) {
-    var _a, _b, _c;
-    this.resolution.set(width, height);
-    this.renderResolution.set(width / this.pixelSize | 0, height / this.pixelSize | 0);
-    const { x, y } = this.renderResolution;
-    (_a = this.rgbRenderTarget) == null ? void 0 : _a.setSize(x, y);
-    (_b = this.normalRenderTarget) == null ? void 0 : _b.setSize(x, y);
-    (_c = this.fsQuad) == null ? void 0 : _c.material.uniforms.resolution.value.set(x, y, 1 / x, 1 / y);
-  }
-  setPixelSize(pixelSize) {
-    this.pixelSize = pixelSize;
-    this.setSize(this.resolution.x, this.resolution.y);
-  }
-  render(renderer, writeBuffer) {
-    const uniforms = this.fsQuad.material.uniforms;
-    uniforms.normalEdgeStrength.value = this.normalEdgeStrength;
-    uniforms.depthEdgeStrength.value = this.depthEdgeStrength;
-    renderer.setRenderTarget(this.rgbRenderTarget);
-    renderer.render(this.scene, this.camera);
-    const overrideMaterial_old = this.scene.overrideMaterial;
-    renderer.setRenderTarget(this.normalRenderTarget);
-    this.scene.overrideMaterial = this.normalMaterial;
-    renderer.render(this.scene, this.camera);
-    this.scene.overrideMaterial = overrideMaterial_old;
-    uniforms.tDiffuse.value = this.rgbRenderTarget.texture;
-    uniforms.tDepth.value = this.rgbRenderTarget.depthTexture;
-    uniforms.tNormal.value = this.normalRenderTarget.texture;
-    if (this.renderToScreen) {
-      renderer.setRenderTarget(null);
-    } else {
-      renderer.setRenderTarget(writeBuffer);
-      if (this.clear)
-        renderer.clear();
-    }
-    this.fsQuad.render(renderer);
-  }
-  material() {
-    return new three_module.ShaderMaterial({
-      uniforms: {
-        tDiffuse: { value: null },
-        tDepth: { value: null },
-        tNormal: { value: null },
-        resolution: {
-          value: new three_module.Vector4(
-            this.renderResolution.x,
-            this.renderResolution.y,
-            1 / this.renderResolution.x,
-            1 / this.renderResolution.y
-          )
-        },
-        normalEdgeStrength: { value: 0 },
-        depthEdgeStrength: { value: 0 }
-      },
-      vertexShader: `
-				varying vec2 vUv;
-
-				void main() {
-
-					vUv = uv;
-					gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-
-				}
-				`,
-      fragmentShader: `
-				uniform sampler2D tDiffuse;
-				uniform sampler2D tDepth;
-				uniform sampler2D tNormal;
-				uniform vec4 resolution;
-				uniform float normalEdgeStrength;
-				uniform float depthEdgeStrength;
-				varying vec2 vUv;
-
-				float getDepth(int x, int y) {
-
-					return texture2D( tDepth, vUv + vec2(x, y) * resolution.zw ).r;
-
-				}
-
-				vec3 getNormal(int x, int y) {
-
-					return texture2D( tNormal, vUv + vec2(x, y) * resolution.zw ).rgb * 2.0 - 1.0;
-
-				}
-
-				float depthEdgeIndicator(float depth, vec3 normal) {
-
-					float diff = 0.0;
-					diff += clamp(getDepth(1, 0) - depth, 0.0, 1.0);
-					diff += clamp(getDepth(-1, 0) - depth, 0.0, 1.0);
-					diff += clamp(getDepth(0, 1) - depth, 0.0, 1.0);
-					diff += clamp(getDepth(0, -1) - depth, 0.0, 1.0);
-					return floor(smoothstep(0.01, 0.02, diff) * 2.) / 2.;
-
-				}
-
-				float neighborNormalEdgeIndicator(int x, int y, float depth, vec3 normal) {
-
-					float depthDiff = getDepth(x, y) - depth;
-					vec3 neighborNormal = getNormal(x, y);
-					
-					// Edge pixels should yield to faces who's normals are closer to the bias normal.
-					vec3 normalEdgeBias = vec3(1., 1., 1.); // This should probably be a parameter.
-					float normalDiff = dot(normal - neighborNormal, normalEdgeBias);
-					float normalIndicator = clamp(smoothstep(-.01, .01, normalDiff), 0.0, 1.0);
-					
-					// Only the shallower pixel should detect the normal edge.
-					float depthIndicator = clamp(sign(depthDiff * .25 + .0025), 0.0, 1.0);
-
-					return (1.0 - dot(normal, neighborNormal)) * depthIndicator * normalIndicator;
-
-				}
-
-				float normalEdgeIndicator(float depth, vec3 normal) {
-					
-					float indicator = 0.0;
-
-					indicator += neighborNormalEdgeIndicator(0, -1, depth, normal);
-					indicator += neighborNormalEdgeIndicator(0, 1, depth, normal);
-					indicator += neighborNormalEdgeIndicator(-1, 0, depth, normal);
-					indicator += neighborNormalEdgeIndicator(1, 0, depth, normal);
-
-					return step(0.1, indicator);
-
-				}
-
-				void main() {
-
-					vec4 texel = texture2D( tDiffuse, vUv );
-
-					float depth = 0.0;
-					vec3 normal = vec3(0.0);
-
-					if (depthEdgeStrength > 0.0 || normalEdgeStrength > 0.0) {
-
-						depth = getDepth(0, 0);
-						normal = getNormal(0, 0);
-
-					}
-
-					float dei = 0.0;
-					if (depthEdgeStrength > 0.0) 
-						dei = depthEdgeIndicator(depth, normal);
-
-					float nei = 0.0; 
-					if (normalEdgeStrength > 0.0) 
-						nei = normalEdgeIndicator(depth, normal);
-
-					float Strength = dei > 0.0 ? (1.0 - depthEdgeStrength * dei) : (1.0 + normalEdgeStrength * nei);
-
-					gl_FragColor = texel * Strength;
-
-				}
-				`
-    });
-  }
-}
-function pixelRenderTarget(resolution, pixelFormat, useDepthTexture) {
-  const renderTarget = new three_module.WebGLRenderTarget(
-    resolution.x,
-    resolution.y,
-    !useDepthTexture ? void 0 : {
-      depthTexture: new three_module.DepthTexture(resolution.x, resolution.y),
-      depthBuffer: true
-    }
-  );
-  renderTarget.texture.format = pixelFormat;
-  renderTarget.texture.minFilter = three_module.NearestFilter;
-  renderTarget.texture.magFilter = three_module.NearestFilter;
-  renderTarget.texture.generateMipmaps = false;
-  renderTarget.stencilBuffer = false;
-  return renderTarget;
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/ConvolutionShader.js
-
-const ConvolutionShader = {
-  defines: {
-    KERNEL_SIZE_FLOAT: "25.0",
-    KERNEL_SIZE_INT: "25"
-  },
-  uniforms: {
-    tDiffuse: { value: null },
-    uImageIncrement: { value: /* @__PURE__ */ new three_module.Vector2(1953125e-9, 0) },
-    cKernel: { value: [] }
-  },
-  vertexShader: [
-    "uniform vec2 uImageIncrement;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv - ( ( KERNEL_SIZE_FLOAT - 1.0 ) / 2.0 ) * uImageIncrement;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform float cKernel[ KERNEL_SIZE_INT ];",
-    "uniform sampler2D tDiffuse;",
-    "uniform vec2 uImageIncrement;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec2 imageCoord = vUv;",
-    "	vec4 sum = vec4( 0.0, 0.0, 0.0, 0.0 );",
-    "	for( int i = 0; i < KERNEL_SIZE_INT; i ++ ) {",
-    "		sum += texture2D( tDiffuse, imageCoord ) * cKernel[ i ];",
-    "		imageCoord += uImageIncrement;",
-    "	}",
-    "	gl_FragColor = sum;",
-    "}"
-  ].join("\n"),
-  buildKernel: function(sigma) {
-    function gauss(x, sigma2) {
-      return Math.exp(-(x * x) / (2 * sigma2 * sigma2));
-    }
-    const kMaxKernelSize = 25;
-    const kernelSize = Math.min(2 * Math.ceil(sigma * 3) + 1, kMaxKernelSize);
-    const halfWidth = (kernelSize - 1) * 0.5;
-    const values = new Array(kernelSize);
-    let sum = 0;
-    for (let i = 0; i < kernelSize; ++i) {
-      values[i] = gauss(i - halfWidth, sigma);
-      sum += values[i];
-    }
-    for (let i = 0; i < kernelSize; ++i)
-      values[i] /= sum;
-    return values;
-  }
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/BloomPass.js
-var BloomPass_defProp = Object.defineProperty;
-var BloomPass_defNormalProp = (obj, key, value) => key in obj ? BloomPass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var BloomPass_publicField = (obj, key, value) => {
-  BloomPass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-class BloomPass extends Pass/* Pass */.w {
-  constructor(strength = 1, kernelSize = 25, sigma = 4, resolution = 256) {
-    super();
-    BloomPass_publicField(this, "renderTargetX");
-    BloomPass_publicField(this, "renderTargetY");
-    BloomPass_publicField(this, "materialCombine");
-    BloomPass_publicField(this, "materialConvolution");
-    BloomPass_publicField(this, "fsQuad");
-    BloomPass_publicField(this, "combineUniforms");
-    BloomPass_publicField(this, "convolutionUniforms");
-    BloomPass_publicField(this, "blurX", new three_module.Vector2(1953125e-9, 0));
-    BloomPass_publicField(this, "blurY", new three_module.Vector2(0, 1953125e-9));
-    this.renderTargetX = new three_module.WebGLRenderTarget(resolution, resolution);
-    this.renderTargetX.texture.name = "BloomPass.x";
-    this.renderTargetY = new three_module.WebGLRenderTarget(resolution, resolution);
-    this.renderTargetY.texture.name = "BloomPass.y";
-    this.combineUniforms = three_module.UniformsUtils.clone(CombineShader.uniforms);
-    this.combineUniforms["strength"].value = strength;
-    this.materialCombine = new three_module.ShaderMaterial({
-      uniforms: this.combineUniforms,
-      vertexShader: CombineShader.vertexShader,
-      fragmentShader: CombineShader.fragmentShader,
-      blending: three_module.AdditiveBlending,
-      transparent: true
-    });
-    if (ConvolutionShader === void 0)
-      console.error("BloomPass relies on ConvolutionShader");
-    const convolutionShader = ConvolutionShader;
-    this.convolutionUniforms = three_module.UniformsUtils.clone(convolutionShader.uniforms);
-    this.convolutionUniforms["uImageIncrement"].value = this.blurX;
-    this.convolutionUniforms["cKernel"].value = ConvolutionShader.buildKernel(sigma);
-    this.materialConvolution = new three_module.ShaderMaterial({
-      uniforms: this.convolutionUniforms,
-      vertexShader: convolutionShader.vertexShader,
-      fragmentShader: convolutionShader.fragmentShader,
-      defines: {
-        KERNEL_SIZE_FLOAT: kernelSize.toFixed(1),
-        KERNEL_SIZE_INT: kernelSize.toFixed(0)
-      }
-    });
-    this.needsSwap = false;
-    this.fsQuad = new Pass/* FullScreenQuad */.T(this.materialConvolution);
-  }
-  render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) {
-    if (maskActive)
-      renderer.state.buffers.stencil.setTest(false);
-    this.fsQuad.material = this.materialConvolution;
-    this.convolutionUniforms["tDiffuse"].value = readBuffer.texture;
-    this.convolutionUniforms["uImageIncrement"].value = this.blurX;
-    renderer.setRenderTarget(this.renderTargetX);
-    renderer.clear();
-    this.fsQuad.render(renderer);
-    this.convolutionUniforms["tDiffuse"].value = this.renderTargetX.texture;
-    this.convolutionUniforms["uImageIncrement"].value = this.blurY;
-    renderer.setRenderTarget(this.renderTargetY);
-    renderer.clear();
-    this.fsQuad.render(renderer);
-    this.fsQuad.material = this.materialCombine;
-    this.combineUniforms["tDiffuse"].value = this.renderTargetY.texture;
-    if (maskActive)
-      renderer.state.buffers.stencil.setTest(true);
-    renderer.setRenderTarget(readBuffer);
-    if (this.clear)
-      renderer.clear();
-    this.fsQuad.render(renderer);
-  }
-}
-const CombineShader = {
-  uniforms: {
-    tDiffuse: {
-      value: null
-    },
-    strength: {
-      value: 1
-    }
-  },
-  vertexShader: (
-    /* glsl */
-    `
-  varying vec2 vUv;
-  void main() {
-    vUv = uv;
-    gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-  }`
-  ),
-  fragmentShader: (
-    /* glsl */
-    `
-  uniform float strength;
-  uniform sampler2D tDiffuse;
-  varying vec2 vUv;
-  void main() {
-    vec4 texel = texture2D( tDiffuse, vUv );
-    gl_FragColor = strength * texel;
-  }`
-  )
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/postprocessing/WaterPass.js
-var WaterPass_defProp = Object.defineProperty;
-var WaterPass_defNormalProp = (obj, key, value) => key in obj ? WaterPass_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var WaterPass_publicField = (obj, key, value) => {
-  WaterPass_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-class WaterPass extends Pass/* Pass */.w {
-  constructor() {
-    super();
-    WaterPass_publicField(this, "material");
-    WaterPass_publicField(this, "fsQuad");
-    WaterPass_publicField(this, "factor");
-    WaterPass_publicField(this, "time");
-    WaterPass_publicField(this, "uniforms");
-    this.uniforms = three_module.UniformsUtils.clone({
-      tex: { value: null },
-      time: { value: 0 },
-      factor: { value: 0 },
-      resolution: { value: new three_module.Vector2(64, 64) }
-    });
-    this.material = new three_module.ShaderMaterial({
-      uniforms: this.uniforms,
-      vertexShader: `
-      varying vec2 vUv;
-      void main(){  
-        vUv = uv; 
-        vec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0);
-        gl_Position = projectionMatrix * modelViewPosition;
-      }`,
-      fragmentShader: `
-      uniform float time;
-      uniform float factor;
-      uniform vec2 resolution;
-      uniform sampler2D tex;
-      varying vec2 vUv;
-      void main() {  
-        vec2 uv1 = vUv;
-        vec2 uv = gl_FragCoord.xy/resolution.xy;
-        float frequency = 6.0 * factor;
-        float amplitude = 0.015 * factor;
-        float x = uv1.y * frequency + time * .7; 
-        float y = uv1.x * frequency + time * .3;
-        uv1.x += cos(x+y) * amplitude * cos(y);
-        uv1.y += sin(x-y) * amplitude * cos(y);
-        vec4 rgba = texture2D(tex, uv1);
-        gl_FragColor = rgba;
-      }`
-    });
-    this.fsQuad = new Pass/* FullScreenQuad */.T(this.material);
-    this.factor = 0;
-    this.time = 0;
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    this.uniforms["tex"].value = readBuffer.texture;
-    this.uniforms["time"].value = this.time;
-    this.uniforms["factor"].value = this.factor;
-    if (this.renderToScreen) {
-      renderer.setRenderTarget(null);
-      this.fsQuad.render(renderer);
-    } else {
-      renderer.setRenderTarget(writeBuffer);
-      if (this.clear)
-        renderer.clear();
-      this.fsQuad.render(renderer);
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/webxr/ARButton.js
-class ARButton {
-  static createButton(renderer, sessionInit = {}) {
-    const button = document.createElement("button");
-    function showStartAR() {
-      if (sessionInit.domOverlay === void 0) {
-        const overlay = document.createElement("div");
-        overlay.style.display = "none";
-        document.body.appendChild(overlay);
-        const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
-        svg.setAttribute("width", "38px");
-        svg.setAttribute("height", "38px");
-        svg.style.position = "absolute";
-        svg.style.right = "20px";
-        svg.style.top = "20px";
-        svg.addEventListener("click", function() {
-          currentSession == null ? void 0 : currentSession.end();
-        });
-        overlay.appendChild(svg);
-        const path = document.createElementNS("http://www.w3.org/2000/svg", "path");
-        path.setAttribute("d", "M 12,12 L 28,28 M 28,12 12,28");
-        path.setAttribute("stroke", "#fff");
-        path.setAttribute("stroke-width", "2px");
-        svg.appendChild(path);
-        if (sessionInit.optionalFeatures === void 0) {
-          sessionInit.optionalFeatures = [];
-        }
-        sessionInit.optionalFeatures.push("dom-overlay");
-        sessionInit.domOverlay = { root: overlay };
-      }
-      let currentSession = null;
-      async function onSessionStarted(session) {
-        session.addEventListener("end", onSessionEnded);
-        renderer.xr.setReferenceSpaceType("local");
-        await renderer.xr.setSession(session);
-        button.textContent = "STOP AR";
-        sessionInit.domOverlay.root.style.display = "";
-        currentSession = session;
-      }
-      function onSessionEnded() {
-        currentSession.removeEventListener("end", onSessionEnded);
-        button.textContent = "START AR";
-        sessionInit.domOverlay.root.style.display = "none";
-        currentSession = null;
-      }
-      button.style.display = "";
-      button.style.cursor = "pointer";
-      button.style.left = "calc(50% - 50px)";
-      button.style.width = "100px";
-      button.textContent = "START AR";
-      button.onmouseenter = () => {
-        button.style.opacity = "1.0";
-      };
-      button.onmouseleave = () => {
-        button.style.opacity = "0.5";
-      };
-      button.onclick = () => {
-        if (currentSession === null) {
-          ;
-          navigator.xr.requestSession("immersive-ar", sessionInit).then(onSessionStarted);
-        } else {
-          currentSession.end();
-        }
-      };
-    }
-    function disableButton() {
-      button.style.display = "";
-      button.style.cursor = "auto";
-      button.style.left = "calc(50% - 75px)";
-      button.style.width = "150px";
-      button.onmouseenter = null;
-      button.onmouseleave = null;
-      button.onclick = null;
-    }
-    function showARNotSupported() {
-      disableButton();
-      button.textContent = "AR NOT SUPPORTED";
-    }
-    function stylizeElement(element) {
-      element.style.position = "absolute";
-      element.style.bottom = "20px";
-      element.style.padding = "12px 6px";
-      element.style.border = "1px solid #fff";
-      element.style.borderRadius = "4px";
-      element.style.background = "rgba(0,0,0,0.1)";
-      element.style.color = "#fff";
-      element.style.font = "normal 13px sans-serif";
-      element.style.textAlign = "center";
-      element.style.opacity = "0.5";
-      element.style.outline = "none";
-      element.style.zIndex = "999";
-    }
-    if ("xr" in navigator) {
-      button.id = "ARButton";
-      button.style.display = "none";
-      stylizeElement(button);
-      navigator.xr.isSessionSupported("immersive-ar").then(function(supported) {
-        supported ? showStartAR() : showARNotSupported();
-      }).catch(showARNotSupported);
-      return button;
-    } else {
-      const message = document.createElement("a");
-      if (window.isSecureContext === false) {
-        message.href = document.location.href.replace(/^http:/, "https:");
-        message.innerHTML = "WEBXR NEEDS HTTPS";
-      } else {
-        message.href = "https://immersiveweb.dev/";
-        message.innerHTML = "WEBXR NOT AVAILABLE";
-      }
-      message.style.left = "calc(50% - 90px)";
-      message.style.width = "180px";
-      message.style.textDecoration = "none";
-      stylizeElement(message);
-      return message;
-    }
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/loaders/GLTFLoader.js
-var GLTFLoader = __webpack_require__(17607);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/webxr/XRHandMeshModel.js
-var XRHandMeshModel_defProp = Object.defineProperty;
-var XRHandMeshModel_defNormalProp = (obj, key, value) => key in obj ? XRHandMeshModel_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var XRHandMeshModel_publicField = (obj, key, value) => {
-  XRHandMeshModel_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-const DEFAULT_HAND_PROFILE_PATH = "https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/";
-class XRHandMeshModel {
-  constructor(handModel, controller, path = DEFAULT_HAND_PROFILE_PATH, handedness, customModelPath) {
-    XRHandMeshModel_publicField(this, "controller");
-    XRHandMeshModel_publicField(this, "handModel");
-    XRHandMeshModel_publicField(this, "bones");
-    this.controller = controller;
-    this.handModel = handModel;
-    this.bones = [];
-    const loader = new GLTFLoader/* GLTFLoader */.E();
-    if (!customModelPath)
-      loader.setPath(path);
-    loader.load(customModelPath != null ? customModelPath : `${handedness}.glb`, (gltf) => {
-      const object = gltf.scene.children[0];
-      this.handModel.add(object);
-      const mesh = object.getObjectByProperty("type", "SkinnedMesh");
-      mesh.frustumCulled = false;
-      mesh.castShadow = true;
-      mesh.receiveShadow = true;
-      const joints = [
-        "wrist",
-        "thumb-metacarpal",
-        "thumb-phalanx-proximal",
-        "thumb-phalanx-distal",
-        "thumb-tip",
-        "index-finger-metacarpal",
-        "index-finger-phalanx-proximal",
-        "index-finger-phalanx-intermediate",
-        "index-finger-phalanx-distal",
-        "index-finger-tip",
-        "middle-finger-metacarpal",
-        "middle-finger-phalanx-proximal",
-        "middle-finger-phalanx-intermediate",
-        "middle-finger-phalanx-distal",
-        "middle-finger-tip",
-        "ring-finger-metacarpal",
-        "ring-finger-phalanx-proximal",
-        "ring-finger-phalanx-intermediate",
-        "ring-finger-phalanx-distal",
-        "ring-finger-tip",
-        "pinky-finger-metacarpal",
-        "pinky-finger-phalanx-proximal",
-        "pinky-finger-phalanx-intermediate",
-        "pinky-finger-phalanx-distal",
-        "pinky-finger-tip"
-      ];
-      joints.forEach((jointName) => {
-        const bone = object.getObjectByName(jointName);
-        if (bone !== void 0) {
-          bone.jointName = jointName;
-        } else {
-          console.warn(`Couldn't find ${jointName} in ${handedness} hand mesh`);
-        }
-        this.bones.push(bone);
-      });
-    });
-  }
-  updateMesh() {
-    const XRJoints = this.controller.joints;
-    for (let i = 0; i < this.bones.length; i++) {
-      const bone = this.bones[i];
-      if (bone) {
-        const XRJoint = XRJoints[bone.jointName];
-        if (XRJoint.visible) {
-          const position = XRJoint.position;
-          bone.position.copy(position);
-          bone.quaternion.copy(XRJoint.quaternion);
-        }
-      }
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/webxr/OculusHandModel.js
-var OculusHandModel_defProp = Object.defineProperty;
-var OculusHandModel_defNormalProp = (obj, key, value) => key in obj ? OculusHandModel_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var OculusHandModel_publicField = (obj, key, value) => {
-  OculusHandModel_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-const TOUCH_RADIUS = 0.01;
-const POINTING_JOINT = "index-finger-tip";
-class OculusHandModel extends three_module.Object3D {
-  constructor(controller, leftModelPath, rightModelPath) {
-    super();
-    OculusHandModel_publicField(this, "controller");
-    OculusHandModel_publicField(this, "motionController");
-    OculusHandModel_publicField(this, "envMap");
-    OculusHandModel_publicField(this, "mesh");
-    OculusHandModel_publicField(this, "xrInputSource");
-    this.controller = controller;
-    this.motionController = null;
-    this.envMap = null;
-    this.mesh = null;
-    this.xrInputSource = null;
-    controller.addEventListener("connected", (event) => {
-      const xrInputSource = event.data;
-      if (xrInputSource.hand && !this.motionController) {
-        this.xrInputSource = xrInputSource;
-        this.motionController = new XRHandMeshModel(
-          this,
-          controller,
-          void 0,
-          xrInputSource.handedness,
-          xrInputSource.handedness === "left" ? leftModelPath : rightModelPath
-        );
-      }
-    });
-    controller.addEventListener("disconnected", () => {
-      this.dispose();
-    });
-  }
-  updateMatrixWorld(force) {
-    super.updateMatrixWorld(force);
-    if (this.motionController) {
-      this.motionController.updateMesh();
-    }
-  }
-  getPointerPosition() {
-    const indexFingerTip = this.controller.joints[POINTING_JOINT];
-    if (indexFingerTip) {
-      return indexFingerTip.position;
-    } else {
-      return null;
-    }
-  }
-  intersectBoxObject(boxObject) {
-    const pointerPosition = this.getPointerPosition();
-    if (pointerPosition) {
-      const indexSphere = new three_module.Sphere(pointerPosition, TOUCH_RADIUS);
-      const box = new three_module.Box3().setFromObject(boxObject);
-      return indexSphere.intersectsBox(box);
-    } else {
-      return false;
-    }
-  }
-  checkButton(button) {
-    if (this.intersectBoxObject(button)) {
-      button.onPress();
-    } else {
-      button.onClear();
-    }
-    if (button.isPressed()) {
-      button.whilePressed();
-    }
-  }
-  dispose() {
-    this.clear();
-    this.motionController = null;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/webxr/OculusHandPointerModel.js
-
-const PINCH_MAX = 0.05;
-const PINCH_THRESHOLD = 0.02;
-const PINCH_MIN = 0.01;
-const POINTER_ADVANCE_MAX = 0.02;
-const POINTER_OPACITY_MAX = 1;
-const POINTER_OPACITY_MIN = 0.4;
-const POINTER_FRONT_RADIUS = 2e-3;
-const POINTER_REAR_RADIUS = 0.01;
-const POINTER_REAR_RADIUS_MIN = 3e-3;
-const POINTER_LENGTH = 0.035;
-const POINTER_SEGMENTS = 16;
-const POINTER_RINGS = 12;
-const POINTER_HEMISPHERE_ANGLE = 110;
-const YAXIS = /* @__PURE__ */ new three_module.Vector3(0, 1, 0);
-const ZAXIS = /* @__PURE__ */ new three_module.Vector3(0, 0, 1);
-const CURSOR_RADIUS = 0.02;
-const CURSOR_MAX_DISTANCE = 1.5;
-class OculusHandPointerModel extends three_module.Object3D {
-  constructor(hand, controller) {
-    super();
-    this.hand = hand;
-    this.controller = controller;
-    this.motionController = null;
-    this.envMap = null;
-    this.mesh = null;
-    this.pointerGeometry = null;
-    this.pointerMesh = null;
-    this.pointerObject = null;
-    this.pinched = false;
-    this.attached = false;
-    this.cursorObject = null;
-    this.raycaster = null;
-    hand.addEventListener("connected", (event) => {
-      const xrInputSource = event.data;
-      if (xrInputSource.hand) {
-        this.visible = true;
-        this.xrInputSource = xrInputSource;
-        this.createPointer();
-      }
-    });
-  }
-  _drawVerticesRing(vertices, baseVector, ringIndex) {
-    const segmentVector = baseVector.clone();
-    for (var i = 0; i < POINTER_SEGMENTS; i++) {
-      segmentVector.applyAxisAngle(ZAXIS, Math.PI * 2 / POINTER_SEGMENTS);
-      const vid = ringIndex * POINTER_SEGMENTS + i;
-      vertices[3 * vid] = segmentVector.x;
-      vertices[3 * vid + 1] = segmentVector.y;
-      vertices[3 * vid + 2] = segmentVector.z;
-    }
-  }
-  _updatePointerVertices(rearRadius) {
-    const vertices = this.pointerGeometry.attributes.position.array;
-    const frontFaceBase = new three_module.Vector3(POINTER_FRONT_RADIUS, 0, -1 * (POINTER_LENGTH - rearRadius));
-    this._drawVerticesRing(vertices, frontFaceBase, 0);
-    const rearBase = new three_module.Vector3(
-      Math.sin(Math.PI * POINTER_HEMISPHERE_ANGLE / 180) * rearRadius,
-      Math.cos(Math.PI * POINTER_HEMISPHERE_ANGLE / 180) * rearRadius,
-      0
-    );
-    for (var i = 0; i < POINTER_RINGS; i++) {
-      this._drawVerticesRing(vertices, rearBase, i + 1);
-      rearBase.applyAxisAngle(YAXIS, Math.PI * POINTER_HEMISPHERE_ANGLE / 180 / (POINTER_RINGS * -2));
-    }
-    const frontCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS);
-    const rearCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS) + 1;
-    const frontCenter = new three_module.Vector3(0, 0, -1 * (POINTER_LENGTH - rearRadius));
-    vertices[frontCenterIndex * 3] = frontCenter.x;
-    vertices[frontCenterIndex * 3 + 1] = frontCenter.y;
-    vertices[frontCenterIndex * 3 + 2] = frontCenter.z;
-    const rearCenter = new three_module.Vector3(0, 0, rearRadius);
-    vertices[rearCenterIndex * 3] = rearCenter.x;
-    vertices[rearCenterIndex * 3 + 1] = rearCenter.y;
-    vertices[rearCenterIndex * 3 + 2] = rearCenter.z;
-    this.pointerGeometry.setAttribute("position", new three_module.Float32BufferAttribute(vertices, 3));
-  }
-  createPointer() {
-    var i, j;
-    const vertices = new Array(((POINTER_RINGS + 1) * POINTER_SEGMENTS + 2) * 3).fill(0);
-    const indices = [];
-    this.pointerGeometry = new three_module.BufferGeometry();
-    this.pointerGeometry.setAttribute("position", new three_module.Float32BufferAttribute(vertices, 3));
-    this._updatePointerVertices(POINTER_REAR_RADIUS);
-    for (i = 0; i < POINTER_RINGS; i++) {
-      for (j = 0; j < POINTER_SEGMENTS - 1; j++) {
-        indices.push(i * POINTER_SEGMENTS + j, i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j);
-        indices.push(i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j);
-      }
-      indices.push((i + 1) * POINTER_SEGMENTS - 1, i * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1);
-      indices.push(i * POINTER_SEGMENTS, (i + 1) * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1);
-    }
-    const frontCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS);
-    const rearCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS) + 1;
-    for (i = 0; i < POINTER_SEGMENTS - 1; i++) {
-      indices.push(frontCenterIndex, i + 1, i);
-      indices.push(rearCenterIndex, i + POINTER_SEGMENTS * POINTER_RINGS, i + POINTER_SEGMENTS * POINTER_RINGS + 1);
-    }
-    indices.push(frontCenterIndex, 0, POINTER_SEGMENTS - 1);
-    indices.push(rearCenterIndex, POINTER_SEGMENTS * (POINTER_RINGS + 1) - 1, POINTER_SEGMENTS * POINTER_RINGS);
-    const material = new three_module.MeshBasicMaterial();
-    material.transparent = true;
-    material.opacity = POINTER_OPACITY_MIN;
-    this.pointerGeometry.setIndex(indices);
-    this.pointerMesh = new three_module.Mesh(this.pointerGeometry, material);
-    this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS);
-    this.pointerObject = new three_module.Object3D();
-    this.pointerObject.add(this.pointerMesh);
-    this.raycaster = new three_module.Raycaster();
-    const cursorGeometry = new three_module.SphereGeometry(CURSOR_RADIUS, 10, 10);
-    const cursorMaterial = new three_module.MeshBasicMaterial();
-    cursorMaterial.transparent = true;
-    cursorMaterial.opacity = POINTER_OPACITY_MIN;
-    this.cursorObject = new three_module.Mesh(cursorGeometry, cursorMaterial);
-    this.pointerObject.add(this.cursorObject);
-    this.add(this.pointerObject);
-  }
-  _updateRaycaster() {
-    if (this.raycaster) {
-      const pointerMatrix = this.pointerObject.matrixWorld;
-      const tempMatrix = new three_module.Matrix4();
-      tempMatrix.identity().extractRotation(pointerMatrix);
-      this.raycaster.ray.origin.setFromMatrixPosition(pointerMatrix);
-      this.raycaster.ray.direction.set(0, 0, -1).applyMatrix4(tempMatrix);
-    }
-  }
-  _updatePointer() {
-    this.pointerObject.visible = this.controller.visible;
-    const indexTip = this.hand.joints["index-finger-tip"];
-    const thumbTip = this.hand.joints["thumb-tip"];
-    const distance = indexTip.position.distanceTo(thumbTip.position);
-    const position = indexTip.position.clone().add(thumbTip.position).multiplyScalar(0.5);
-    this.pointerObject.position.copy(position);
-    this.pointerObject.quaternion.copy(this.controller.quaternion);
-    this.pinched = distance <= PINCH_THRESHOLD;
-    const pinchScale = (distance - PINCH_MIN) / (PINCH_MAX - PINCH_MIN);
-    const focusScale = (distance - PINCH_MIN) / (PINCH_THRESHOLD - PINCH_MIN);
-    if (pinchScale > 1) {
-      this._updatePointerVertices(POINTER_REAR_RADIUS);
-      this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS);
-      this.pointerMesh.material.opacity = POINTER_OPACITY_MIN;
-    } else if (pinchScale > 0) {
-      const rearRadius = (POINTER_REAR_RADIUS - POINTER_REAR_RADIUS_MIN) * pinchScale + POINTER_REAR_RADIUS_MIN;
-      this._updatePointerVertices(rearRadius);
-      if (focusScale < 1) {
-        this.pointerMesh.position.set(0, 0, -1 * rearRadius - (1 - focusScale) * POINTER_ADVANCE_MAX);
-        this.pointerMesh.material.opacity = POINTER_OPACITY_MIN + (1 - focusScale) * (POINTER_OPACITY_MAX - POINTER_OPACITY_MIN);
-      } else {
-        this.pointerMesh.position.set(0, 0, -1 * rearRadius);
-        this.pointerMesh.material.opacity = POINTER_OPACITY_MIN;
-      }
-    } else {
-      this._updatePointerVertices(POINTER_REAR_RADIUS_MIN);
-      this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS_MIN - POINTER_ADVANCE_MAX);
-      this.pointerMesh.material.opacity = POINTER_OPACITY_MAX;
-    }
-    this.cursorObject.material.opacity = this.pointerMesh.material.opacity;
-  }
-  updateMatrixWorld(force) {
-    super.updateMatrixWorld(force);
-    if (this.pointerGeometry) {
-      this._updatePointer();
-      this._updateRaycaster();
-    }
-  }
-  isPinched() {
-    return this.pinched;
-  }
-  setAttached(attached) {
-    this.attached = attached;
-  }
-  isAttached() {
-    return this.attached;
-  }
-  intersectObject(object, recursive = true) {
-    if (this.raycaster) {
-      return this.raycaster.intersectObject(object, recursive);
-    }
-  }
-  intersectObjects(objects, recursive = true) {
-    if (this.raycaster) {
-      return this.raycaster.intersectObjects(objects, recursive);
-    }
-  }
-  checkIntersections(objects, recursive = false) {
-    if (this.raycaster && !this.attached) {
-      const intersections = this.raycaster.intersectObjects(objects, recursive);
-      const direction = new three_module.Vector3(0, 0, -1);
-      if (intersections.length > 0) {
-        const intersection = intersections[0];
-        const distance = intersection.distance;
-        this.cursorObject.position.copy(direction.multiplyScalar(distance));
-      } else {
-        this.cursorObject.position.copy(direction.multiplyScalar(CURSOR_MAX_DISTANCE));
-      }
-    }
-  }
-  setCursor(distance) {
-    const direction = new three_module.Vector3(0, 0, -1);
-    if (this.raycaster && !this.attached) {
-      this.cursorObject.position.copy(direction.multiplyScalar(distance));
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/webxr/Text2D.js
-
-function createText(message, height) {
-  const canvas = document.createElement("canvas");
-  const context = canvas.getContext("2d");
-  let metrics = null;
-  const textHeight = 100;
-  context.font = "normal " + textHeight + "px Arial";
-  metrics = context.measureText(message);
-  const textWidth = metrics.width;
-  canvas.width = textWidth;
-  canvas.height = textHeight;
-  context.font = "normal " + textHeight + "px Arial";
-  context.textAlign = "center";
-  context.textBaseline = "middle";
-  context.fillStyle = "#ffffff";
-  context.fillText(message, textWidth / 2, textHeight / 2);
-  const texture = new three_module.Texture(canvas);
-  texture.needsUpdate = true;
-  const material = new three_module.MeshBasicMaterial({
-    color: 16777215,
-    side: three_module.DoubleSide,
-    map: texture,
-    transparent: true
-  });
-  const geometry = new three_module.PlaneGeometry(height * textWidth / textHeight, height);
-  const plane = new three_module.Mesh(geometry, material);
-  return plane;
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/webxr/VRButton.js
-var VRButton_defProp = Object.defineProperty;
-var VRButton_defNormalProp = (obj, key, value) => key in obj ? VRButton_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var VRButton_publicField = (obj, key, value) => {
-  VRButton_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-const _VRButton = class {
-  static createButton(renderer, sessionInit = {}) {
-    const button = document.createElement("button");
-    function showEnterVR() {
-      let currentSession = null;
-      async function onSessionStarted(session) {
-        session.addEventListener("end", onSessionEnded);
-        await renderer.xr.setSession(session);
-        button.textContent = "EXIT VR";
-        currentSession = session;
-      }
-      function onSessionEnded() {
-        currentSession.removeEventListener("end", onSessionEnded);
-        button.textContent = "ENTER VR";
-        currentSession = null;
-      }
-      button.style.display = "";
-      button.style.cursor = "pointer";
-      button.style.left = "calc(50% - 50px)";
-      button.style.width = "100px";
-      button.textContent = "ENTER VR";
-      button.onmouseenter = () => {
-        button.style.opacity = "1.0";
-      };
-      button.onmouseleave = () => {
-        button.style.opacity = "0.5";
-      };
-      button.onclick = () => {
-        var _a;
-        if (currentSession === null) {
-          const optionalFeatures = [sessionInit.optionalFeatures, "local-floor", "bounded-floor", "hand-tracking"].flat().filter(Boolean);
-          (_a = navigator.xr) == null ? void 0 : _a.requestSession("immersive-vr", { ...sessionInit, optionalFeatures }).then(onSessionStarted);
-        } else {
-          currentSession.end();
-        }
-      };
-    }
-    function disableButton() {
-      button.style.display = "";
-      button.style.cursor = "auto";
-      button.style.left = "calc(50% - 75px)";
-      button.style.width = "150px";
-      button.onmouseenter = null;
-      button.onmouseleave = null;
-      button.onclick = null;
-    }
-    function showWebXRNotFound() {
-      disableButton();
-      button.textContent = "VR NOT SUPPORTED";
-    }
-    function stylizeElement(element) {
-      element.style.position = "absolute";
-      element.style.bottom = "20px";
-      element.style.padding = "12px 6px";
-      element.style.border = "1px solid #fff";
-      element.style.borderRadius = "4px";
-      element.style.background = "rgba(0,0,0,0.1)";
-      element.style.color = "#fff";
-      element.style.font = "normal 13px sans-serif";
-      element.style.textAlign = "center";
-      element.style.opacity = "0.5";
-      element.style.outline = "none";
-      element.style.zIndex = "999";
-    }
-    if ("xr" in navigator) {
-      stylizeElement(button);
-      button.id = "VRButton";
-      button.style.display = "none";
-      navigator.xr.isSessionSupported("immersive-vr").then((supported) => {
-        supported ? showEnterVR() : showWebXRNotFound();
-        if (supported && _VRButton.xrSessionIsGranted) {
-          button.click();
-        }
-      });
-      return button;
-    } else {
-      const message = document.createElement("a");
-      if (window.isSecureContext === false) {
-        message.href = document.location.href.replace(/^http:/, "https:");
-        message.innerHTML = "WEBXR NEEDS HTTPS";
-      } else {
-        message.href = "https://immersiveweb.dev/";
-        message.innerHTML = "WEBXR NOT AVAILABLE";
-      }
-      message.style.left = "calc(50% - 90px)";
-      message.style.width = "180px";
-      message.style.textDecoration = "none";
-      stylizeElement(message);
-      return message;
-    }
-  }
-  static registerSessionGrantedListener() {
-    if ("xr" in navigator) {
-      ;
-      navigator.xr.addEventListener("sessiongranted", () => {
-        _VRButton.xrSessionIsGranted = true;
-      });
-    }
-  }
-};
-let VRButton = _VRButton;
-VRButton_publicField(VRButton, "xrSessionIsGranted", false);
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/libs/MotionControllers.js
-var MotionControllers_defProp = Object.defineProperty;
-var MotionControllers_defNormalProp = (obj, key, value) => key in obj ? MotionControllers_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var MotionControllers_publicField = (obj, key, value) => {
-  MotionControllers_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-const MotionControllerConstants = {
-  Handedness: {
-    NONE: "none",
-    LEFT: "left",
-    RIGHT: "right"
-  },
-  ComponentState: {
-    DEFAULT: "default",
-    TOUCHED: "touched",
-    PRESSED: "pressed"
-  },
-  ComponentProperty: {
-    BUTTON: "button",
-    X_AXIS: "xAxis",
-    Y_AXIS: "yAxis",
-    STATE: "state"
-  },
-  ComponentType: {
-    TRIGGER: "trigger",
-    SQUEEZE: "squeeze",
-    TOUCHPAD: "touchpad",
-    THUMBSTICK: "thumbstick",
-    BUTTON: "button"
-  },
-  ButtonTouchThreshold: 0.05,
-  AxisTouchThreshold: 0.1,
-  VisualResponseProperty: {
-    TRANSFORM: "transform",
-    VISIBILITY: "visibility"
-  }
-};
-async function fetchJsonFile(path) {
-  const response = await fetch(path);
-  if (!response.ok) {
-    throw new Error(response.statusText);
-  } else {
-    return response.json();
-  }
-}
-async function fetchProfilesList(basePath) {
-  if (!basePath) {
-    throw new Error("No basePath supplied");
-  }
-  const profileListFileName = "profilesList.json";
-  const profilesList = await fetchJsonFile(`${basePath}/${profileListFileName}`);
-  return profilesList;
-}
-async function fetchProfile(xrInputSource, basePath, defaultProfile = null, getAssetPath = true) {
-  if (!xrInputSource) {
-    throw new Error("No xrInputSource supplied");
-  }
-  if (!basePath) {
-    throw new Error("No basePath supplied");
-  }
-  const supportedProfilesList = await fetchProfilesList(basePath);
-  let match = void 0;
-  xrInputSource.profiles.some((profileId) => {
-    const supportedProfile = supportedProfilesList[profileId];
-    if (supportedProfile) {
-      match = {
-        profileId,
-        profilePath: `${basePath}/${supportedProfile.path}`,
-        deprecated: !!supportedProfile.deprecated
-      };
-    }
-    return !!match;
-  });
-  if (!match) {
-    if (!defaultProfile) {
-      throw new Error("No matching profile name found");
-    }
-    const supportedProfile = supportedProfilesList[defaultProfile];
-    if (!supportedProfile) {
-      throw new Error(`No matching profile name found and default profile "${defaultProfile}" missing.`);
-    }
-    match = {
-      profileId: defaultProfile,
-      profilePath: `${basePath}/${supportedProfile.path}`,
-      deprecated: !!supportedProfile.deprecated
-    };
-  }
-  const profile = await fetchJsonFile(match.profilePath);
-  let assetPath = void 0;
-  if (getAssetPath) {
-    let layout;
-    if (xrInputSource.handedness === "any") {
-      layout = profile.layouts[Object.keys(profile.layouts)[0]];
-    } else {
-      layout = profile.layouts[xrInputSource.handedness];
-    }
-    if (!layout) {
-      throw new Error(`No matching handedness, ${xrInputSource.handedness}, in profile ${match.profileId}`);
-    }
-    if (layout.assetPath) {
-      assetPath = match.profilePath.replace("profile.json", layout.assetPath);
-    }
-  }
-  return { profile, assetPath };
-}
-const defaultComponentValues = {
-  xAxis: 0,
-  yAxis: 0,
-  button: 0,
-  state: MotionControllerConstants.ComponentState.DEFAULT
-};
-function normalizeAxes(x = 0, y = 0) {
-  let xAxis = x;
-  let yAxis = y;
-  const hypotenuse = Math.sqrt(x * x + y * y);
-  if (hypotenuse > 1) {
-    const theta = Math.atan2(y, x);
-    xAxis = Math.cos(theta);
-    yAxis = Math.sin(theta);
-  }
-  const result = {
-    normalizedXAxis: xAxis * 0.5 + 0.5,
-    normalizedYAxis: yAxis * 0.5 + 0.5
-  };
-  return result;
-}
-class VisualResponse {
-  constructor(visualResponseDescription) {
-    MotionControllers_publicField(this, "value");
-    MotionControllers_publicField(this, "componentProperty");
-    MotionControllers_publicField(this, "states");
-    MotionControllers_publicField(this, "valueNodeName");
-    MotionControllers_publicField(this, "valueNodeProperty");
-    MotionControllers_publicField(this, "minNodeName");
-    MotionControllers_publicField(this, "maxNodeName");
-    MotionControllers_publicField(this, "valueNode");
-    MotionControllers_publicField(this, "minNode");
-    MotionControllers_publicField(this, "maxNode");
-    this.componentProperty = visualResponseDescription.componentProperty;
-    this.states = visualResponseDescription.states;
-    this.valueNodeName = visualResponseDescription.valueNodeName;
-    this.valueNodeProperty = visualResponseDescription.valueNodeProperty;
-    if (this.valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM) {
-      this.minNodeName = visualResponseDescription.minNodeName;
-      this.maxNodeName = visualResponseDescription.maxNodeName;
-    }
-    this.value = 0;
-    this.updateFromComponent(defaultComponentValues);
-  }
-  /**
-   * Computes the visual response's interpolation weight based on component state
-   * @param {Object} componentValues - The component from which to update
-   * @param {number | undefined} xAxis - The reported X axis value of the component
-   * @param {number | undefined} yAxis - The reported Y axis value of the component
-   * @param {number | undefined} button - The reported value of the component's button
-   * @param {string} state - The component's active state
-   */
-  updateFromComponent({
-    xAxis,
-    yAxis,
-    button,
-    state
-  }) {
-    const { normalizedXAxis, normalizedYAxis } = normalizeAxes(xAxis, yAxis);
-    switch (this.componentProperty) {
-      case MotionControllerConstants.ComponentProperty.X_AXIS:
-        this.value = this.states.includes(state) ? normalizedXAxis : 0.5;
-        break;
-      case MotionControllerConstants.ComponentProperty.Y_AXIS:
-        this.value = this.states.includes(state) ? normalizedYAxis : 0.5;
-        break;
-      case MotionControllerConstants.ComponentProperty.BUTTON:
-        this.value = this.states.includes(state) && button ? button : 0;
-        break;
-      case MotionControllerConstants.ComponentProperty.STATE:
-        if (this.valueNodeProperty === MotionControllerConstants.VisualResponseProperty.VISIBILITY) {
-          this.value = this.states.includes(state);
-        } else {
-          this.value = this.states.includes(state) ? 1 : 0;
-        }
-        break;
-      default:
-        throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`);
-    }
-  }
-}
-class Component {
-  /**
-   * @param {string} componentId - Id of the component
-   * @param {InputProfileComponent} componentDescription - Description of the component to be created
-   */
-  constructor(componentId, componentDescription) {
-    MotionControllers_publicField(this, "id");
-    MotionControllers_publicField(this, "values");
-    MotionControllers_publicField(this, "type");
-    MotionControllers_publicField(this, "gamepadIndices");
-    MotionControllers_publicField(this, "rootNodeName");
-    MotionControllers_publicField(this, "visualResponses");
-    MotionControllers_publicField(this, "touchPointNodeName");
-    MotionControllers_publicField(this, "touchPointNode");
-    if (!componentId || !componentDescription || !componentDescription.visualResponses || !componentDescription.gamepadIndices || Object.keys(componentDescription.gamepadIndices).length === 0) {
-      throw new Error("Invalid arguments supplied");
-    }
-    this.id = componentId;
-    this.type = componentDescription.type;
-    this.rootNodeName = componentDescription.rootNodeName;
-    this.touchPointNodeName = componentDescription.touchPointNodeName;
-    this.visualResponses = {};
-    Object.keys(componentDescription.visualResponses).forEach((responseName) => {
-      const visualResponse = new VisualResponse(componentDescription.visualResponses[responseName]);
-      this.visualResponses[responseName] = visualResponse;
-    });
-    this.gamepadIndices = Object.assign({}, componentDescription.gamepadIndices);
-    this.values = {
-      state: MotionControllerConstants.ComponentState.DEFAULT,
-      button: this.gamepadIndices.button !== void 0 ? 0 : void 0,
-      xAxis: this.gamepadIndices.xAxis !== void 0 ? 0 : void 0,
-      yAxis: this.gamepadIndices.yAxis !== void 0 ? 0 : void 0
-    };
-  }
-  get data() {
-    const data = { id: this.id, ...this.values };
-    return data;
-  }
-  /**
-   * @description Poll for updated data based on current gamepad state
-   * @param {Object} gamepad - The gamepad object from which the component data should be polled
-   */
-  updateFromGamepad(gamepad) {
-    this.values.state = MotionControllerConstants.ComponentState.DEFAULT;
-    if (this.gamepadIndices.button !== void 0 && gamepad.buttons.length > this.gamepadIndices.button) {
-      const gamepadButton = gamepad.buttons[this.gamepadIndices.button];
-      this.values.button = gamepadButton.value;
-      this.values.button = this.values.button < 0 ? 0 : this.values.button;
-      this.values.button = this.values.button > 1 ? 1 : this.values.button;
-      if (gamepadButton.pressed || this.values.button === 1) {
-        this.values.state = MotionControllerConstants.ComponentState.PRESSED;
-      } else if (gamepadButton.touched || this.values.button > MotionControllerConstants.ButtonTouchThreshold) {
-        this.values.state = MotionControllerConstants.ComponentState.TOUCHED;
-      }
-    }
-    if (this.gamepadIndices.xAxis !== void 0 && gamepad.axes.length > this.gamepadIndices.xAxis) {
-      this.values.xAxis = gamepad.axes[this.gamepadIndices.xAxis];
-      this.values.xAxis = this.values.xAxis < -1 ? -1 : this.values.xAxis;
-      this.values.xAxis = this.values.xAxis > 1 ? 1 : this.values.xAxis;
-      if (this.values.state === MotionControllerConstants.ComponentState.DEFAULT && Math.abs(this.values.xAxis) > MotionControllerConstants.AxisTouchThreshold) {
-        this.values.state = MotionControllerConstants.ComponentState.TOUCHED;
-      }
-    }
-    if (this.gamepadIndices.yAxis !== void 0 && gamepad.axes.length > this.gamepadIndices.yAxis) {
-      this.values.yAxis = gamepad.axes[this.gamepadIndices.yAxis];
-      this.values.yAxis = this.values.yAxis < -1 ? -1 : this.values.yAxis;
-      this.values.yAxis = this.values.yAxis > 1 ? 1 : this.values.yAxis;
-      if (this.values.state === MotionControllerConstants.ComponentState.DEFAULT && Math.abs(this.values.yAxis) > MotionControllerConstants.AxisTouchThreshold) {
-        this.values.state = MotionControllerConstants.ComponentState.TOUCHED;
-      }
-    }
-    Object.values(this.visualResponses).forEach((visualResponse) => {
-      visualResponse.updateFromComponent(this.values);
-    });
-  }
-}
-class MotionController {
-  /**
-   * @param {XRInputSource} xrInputSource - The XRInputSource to build the MotionController around
-   * @param {Profile} profile - The best matched profile description for the supplied xrInputSource
-   * @param {string} assetUrl
-   */
-  constructor(xrInputSource, profile, assetUrl) {
-    MotionControllers_publicField(this, "xrInputSource");
-    MotionControllers_publicField(this, "assetUrl");
-    MotionControllers_publicField(this, "layoutDescription");
-    MotionControllers_publicField(this, "id");
-    MotionControllers_publicField(this, "components");
-    if (!xrInputSource) {
-      throw new Error("No xrInputSource supplied");
-    }
-    if (!profile) {
-      throw new Error("No profile supplied");
-    }
-    if (!profile.layouts[xrInputSource.handedness]) {
-      throw new Error("No layout for " + xrInputSource.handedness + " handedness");
-    }
-    this.xrInputSource = xrInputSource;
-    this.assetUrl = assetUrl;
-    this.id = profile.profileId;
-    this.layoutDescription = profile.layouts[xrInputSource.handedness];
-    this.components = {};
-    Object.keys(this.layoutDescription.components).forEach((componentId) => {
-      const componentDescription = this.layoutDescription.components[componentId];
-      this.components[componentId] = new Component(componentId, componentDescription);
-    });
-    this.updateFromGamepad();
-  }
-  get gripSpace() {
-    return this.xrInputSource.gripSpace;
-  }
-  get targetRaySpace() {
-    return this.xrInputSource.targetRaySpace;
-  }
-  /**
-   * @description Returns a subset of component data for simplified debugging
-   */
-  get data() {
-    const data = [];
-    Object.values(this.components).forEach((component) => {
-      data.push(component.data);
-    });
-    return data;
-  }
-  /**
-   * @description Poll for updated data based on current gamepad state
-   */
-  updateFromGamepad() {
-    Object.values(this.components).forEach((component) => {
-      component.updateFromGamepad(this.xrInputSource.gamepad);
-    });
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/webxr/XRControllerModelFactory.js
-var XRControllerModelFactory_defProp = Object.defineProperty;
-var XRControllerModelFactory_defNormalProp = (obj, key, value) => key in obj ? XRControllerModelFactory_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var XRControllerModelFactory_publicField = (obj, key, value) => {
-  XRControllerModelFactory_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-const DEFAULT_PROFILES_PATH = "https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles";
-const DEFAULT_PROFILE = "generic-trigger";
-const applyEnvironmentMap = (envMap, obj) => {
-  obj.traverse((child) => {
-    if (child instanceof three_module.Mesh && "envMap" in child.material) {
-      child.material.envMap = envMap;
-      child.material.needsUpdate = true;
-    }
-  });
-};
-class XRControllerModel extends three_module.Object3D {
-  constructor() {
-    super();
-    XRControllerModelFactory_publicField(this, "envMap");
-    XRControllerModelFactory_publicField(this, "motionController");
-    this.motionController = null;
-    this.envMap = null;
-  }
-  setEnvironmentMap(envMap) {
-    if (this.envMap == envMap) {
-      return this;
-    }
-    this.envMap = envMap;
-    applyEnvironmentMap(this.envMap, this);
-    return this;
-  }
-  /**
-   * Polls data from the XRInputSource and updates the model's components to match
-   * the real world data
-   */
-  updateMatrixWorld(force) {
-    super.updateMatrixWorld(force);
-    if (!this.motionController)
-      return;
-    this.motionController.updateFromGamepad();
-    Object.values(this.motionController.components).forEach((component) => {
-      Object.values(component.visualResponses).forEach((visualResponse) => {
-        const { valueNode, minNode, maxNode, value, valueNodeProperty } = visualResponse;
-        if (!valueNode)
-          return;
-        if (valueNodeProperty === MotionControllerConstants.VisualResponseProperty.VISIBILITY && typeof value === "boolean") {
-          valueNode.visible = value;
-        } else if (valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM && minNode && maxNode && typeof value === "number") {
-          valueNode.quaternion.slerpQuaternions(minNode.quaternion, maxNode.quaternion, value);
-          valueNode.position.lerpVectors(minNode.position, maxNode.position, value);
-        }
-      });
-    });
-  }
-}
-function findNodes(motionController, scene) {
-  Object.values(motionController.components).forEach((component) => {
-    const { type, touchPointNodeName, visualResponses } = component;
-    if (type === MotionControllerConstants.ComponentType.TOUCHPAD && touchPointNodeName) {
-      component.touchPointNode = scene.getObjectByName(touchPointNodeName);
-      if (component.touchPointNode) {
-        const sphereGeometry = new three_module.SphereGeometry(1e-3);
-        const material = new three_module.MeshBasicMaterial({ color: 255 });
-        const sphere = new three_module.Mesh(sphereGeometry, material);
-        component.touchPointNode.add(sphere);
-      } else {
-        console.warn(`Could not find touch dot, ${component.touchPointNodeName}, in touchpad component ${component.id}`);
-      }
-    }
-    Object.values(visualResponses).forEach((visualResponse) => {
-      const { valueNodeName, minNodeName, maxNodeName, valueNodeProperty } = visualResponse;
-      if (valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM && minNodeName && maxNodeName) {
-        visualResponse.minNode = scene.getObjectByName(minNodeName);
-        visualResponse.maxNode = scene.getObjectByName(maxNodeName);
-        if (!visualResponse.minNode) {
-          console.warn(`Could not find ${minNodeName} in the model`);
-          return;
-        }
-        if (!visualResponse.maxNode) {
-          console.warn(`Could not find ${maxNodeName} in the model`);
-          return;
-        }
-      }
-      visualResponse.valueNode = scene.getObjectByName(valueNodeName);
-      if (!visualResponse.valueNode) {
-        console.warn(`Could not find ${valueNodeName} in the model`);
-      }
-    });
-  });
-}
-function addAssetSceneToControllerModel(controllerModel, scene) {
-  findNodes(controllerModel.motionController, scene);
-  if (controllerModel.envMap) {
-    applyEnvironmentMap(controllerModel.envMap, scene);
-  }
-  controllerModel.add(scene);
-}
-class XRControllerModelFactory {
-  constructor(gltfLoader = null) {
-    XRControllerModelFactory_publicField(this, "gltfLoader");
-    XRControllerModelFactory_publicField(this, "path");
-    XRControllerModelFactory_publicField(this, "_assetCache");
-    this.gltfLoader = gltfLoader;
-    this.path = DEFAULT_PROFILES_PATH;
-    this._assetCache = {};
-    if (!this.gltfLoader) {
-      this.gltfLoader = new GLTFLoader/* GLTFLoader */.E();
-    }
-  }
-  createControllerModel(controller) {
-    const controllerModel = new XRControllerModel();
-    let scene = null;
-    const onConnected = (event) => {
-      const xrInputSource = event.data;
-      if (xrInputSource.targetRayMode !== "tracked-pointer" || !xrInputSource.gamepad)
-        return;
-      fetchProfile(xrInputSource, this.path, DEFAULT_PROFILE).then(({ profile, assetPath }) => {
-        if (!assetPath) {
-          throw new Error("no asset path");
-        }
-        controllerModel.motionController = new MotionController(xrInputSource, profile, assetPath);
-        const assetUrl = controllerModel.motionController.assetUrl;
-        const cachedAsset = this._assetCache[assetUrl];
-        if (cachedAsset) {
-          scene = cachedAsset.scene.clone();
-          addAssetSceneToControllerModel(controllerModel, scene);
-        } else {
-          if (!this.gltfLoader) {
-            throw new Error("GLTFLoader not set.");
-          }
-          this.gltfLoader.setPath("");
-          this.gltfLoader.load(
-            controllerModel.motionController.assetUrl,
-            (asset) => {
-              if (!controllerModel.motionController) {
-                console.warn("motionController gone while gltf load, bailing...");
-                return;
-              }
-              this._assetCache[assetUrl] = asset;
-              scene = asset.scene.clone();
-              addAssetSceneToControllerModel(controllerModel, scene);
-            },
-            () => {
-            },
-            () => {
-              throw new Error(`Asset ${assetUrl} missing or malformed.`);
-            }
-          );
-        }
-      }).catch((err) => {
-        console.warn(err);
-      });
-    };
-    controller.addEventListener("connected", onConnected);
-    const onDisconnected = () => {
-      controller.removeEventListener("connected", onConnected);
-      controller.removeEventListener("disconnected", onDisconnected);
-      controllerModel.motionController = null;
-      if (scene) {
-        controllerModel.remove(scene);
-      }
-      scene = null;
-    };
-    controller.addEventListener("disconnected", onDisconnected);
-    return controllerModel;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/webxr/XREstimatedLight.js
-
-class SessionLightProbe {
-  constructor(xrLight, renderer, lightProbe, environmentEstimation, estimationStartCallback) {
-    this.xrLight = xrLight;
-    this.renderer = renderer;
-    this.lightProbe = lightProbe;
-    this.xrWebGLBinding = null;
-    this.estimationStartCallback = estimationStartCallback;
-    this.frameCallback = this.onXRFrame.bind(this);
-    const session = renderer.xr.getSession();
-    if (environmentEstimation && "XRWebGLBinding" in window) {
-      const cubeRenderTarget = new three_module.WebGLCubeRenderTarget(16);
-      xrLight.environment = cubeRenderTarget.texture;
-      const gl = renderer.getContext();
-      switch (session.preferredReflectionFormat) {
-        case "srgba8":
-          gl.getExtension("EXT_sRGB");
-          break;
-        case "rgba16f":
-          gl.getExtension("OES_texture_half_float");
-          break;
-      }
-      this.xrWebGLBinding = new XRWebGLBinding(session, gl);
-      this.lightProbe.addEventListener("reflectionchange", () => {
-        this.updateReflection();
-      });
-    }
-    session.requestAnimationFrame(this.frameCallback);
-  }
-  updateReflection() {
-    const textureProperties = this.renderer.properties.get(this.xrLight.environment);
-    if (textureProperties) {
-      const cubeMap = this.xrWebGLBinding.getReflectionCubeMap(this.lightProbe);
-      if (cubeMap) {
-        textureProperties.__webglTexture = cubeMap;
-        this.xrLight.environment.needsPMREMUpdate = true;
-      }
-    }
-  }
-  onXRFrame(time, xrFrame) {
-    if (!this.xrLight) {
-      return;
-    }
-    const session = xrFrame.session;
-    session.requestAnimationFrame(this.frameCallback);
-    const lightEstimate = xrFrame.getLightEstimate(this.lightProbe);
-    if (lightEstimate) {
-      this.xrLight.lightProbe.sh.fromArray(lightEstimate.sphericalHarmonicsCoefficients);
-      this.xrLight.lightProbe.intensity = 1;
-      const intensityScalar = Math.max(
-        1,
-        Math.max(
-          lightEstimate.primaryLightIntensity.x,
-          Math.max(lightEstimate.primaryLightIntensity.y, lightEstimate.primaryLightIntensity.z)
-        )
-      );
-      this.xrLight.directionalLight.color.setRGB(
-        lightEstimate.primaryLightIntensity.x / intensityScalar,
-        lightEstimate.primaryLightIntensity.y / intensityScalar,
-        lightEstimate.primaryLightIntensity.z / intensityScalar
-      );
-      this.xrLight.directionalLight.intensity = intensityScalar;
-      this.xrLight.directionalLight.position.copy(lightEstimate.primaryLightDirection);
-      if (this.estimationStartCallback) {
-        this.estimationStartCallback();
-        this.estimationStartCallback = null;
-      }
-    }
-  }
-  dispose() {
-    this.xrLight = null;
-    this.renderer = null;
-    this.lightProbe = null;
-    this.xrWebGLBinding = null;
-  }
-}
-class XREstimatedLight extends three_module.Group {
-  constructor(renderer, environmentEstimation = true) {
-    super();
-    this.lightProbe = new three_module.LightProbe();
-    this.lightProbe.intensity = 0;
-    this.add(this.lightProbe);
-    this.directionalLight = new three_module.DirectionalLight();
-    this.directionalLight.intensity = 0;
-    this.add(this.directionalLight);
-    this.environment = null;
-    let sessionLightProbe = null;
-    let estimationStarted = false;
-    renderer.xr.addEventListener("sessionstart", () => {
-      const session = renderer.xr.getSession();
-      if ("requestLightProbe" in session) {
-        session.requestLightProbe({
-          reflectionFormat: session.preferredReflectionFormat
-        }).then((probe) => {
-          sessionLightProbe = new SessionLightProbe(this, renderer, probe, environmentEstimation, () => {
-            estimationStarted = true;
-            this.dispatchEvent({ type: "estimationstart" });
-          });
-        });
-      }
-    });
-    renderer.xr.addEventListener("sessionend", () => {
-      if (sessionLightProbe) {
-        sessionLightProbe.dispose();
-        sessionLightProbe = null;
-      }
-      if (estimationStarted) {
-        this.dispatchEvent({ type: "estimationend" });
-      }
-    });
-    this.dispose = () => {
-      if (sessionLightProbe) {
-        sessionLightProbe.dispose();
-        sessionLightProbe = null;
-      }
-      this.remove(this.lightProbe);
-      this.lightProbe = null;
-      this.remove(this.directionalLight);
-      this.directionalLight = null;
-      this.environment = null;
-    };
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/webxr/XRHandPrimitiveModel.js
-
-const XRHandPrimitiveModel_matrix = /* @__PURE__ */ new three_module.Matrix4();
-const XRHandPrimitiveModel_vector = /* @__PURE__ */ new three_module.Vector3();
-class XRHandPrimitiveModel {
-  constructor(handModel, controller, path, handedness, options) {
-    this.controller = controller;
-    this.handModel = handModel;
-    this.envMap = null;
-    let geometry;
-    if (!options || !options.primitive || options.primitive === "sphere") {
-      geometry = new three_module.SphereGeometry(1, 10, 10);
-    } else if (options.primitive === "box") {
-      geometry = new three_module.BoxGeometry(1, 1, 1);
-    }
-    const material = new three_module.MeshStandardMaterial();
-    this.handMesh = new three_module.InstancedMesh(geometry, material, 30);
-    this.handMesh.instanceMatrix.setUsage(three_module.DynamicDrawUsage);
-    this.handMesh.castShadow = true;
-    this.handMesh.receiveShadow = true;
-    this.handModel.add(this.handMesh);
-    this.joints = [
-      "wrist",
-      "thumb-metacarpal",
-      "thumb-phalanx-proximal",
-      "thumb-phalanx-distal",
-      "thumb-tip",
-      "index-finger-metacarpal",
-      "index-finger-phalanx-proximal",
-      "index-finger-phalanx-intermediate",
-      "index-finger-phalanx-distal",
-      "index-finger-tip",
-      "middle-finger-metacarpal",
-      "middle-finger-phalanx-proximal",
-      "middle-finger-phalanx-intermediate",
-      "middle-finger-phalanx-distal",
-      "middle-finger-tip",
-      "ring-finger-metacarpal",
-      "ring-finger-phalanx-proximal",
-      "ring-finger-phalanx-intermediate",
-      "ring-finger-phalanx-distal",
-      "ring-finger-tip",
-      "pinky-finger-metacarpal",
-      "pinky-finger-phalanx-proximal",
-      "pinky-finger-phalanx-intermediate",
-      "pinky-finger-phalanx-distal",
-      "pinky-finger-tip"
-    ];
-  }
-  updateMesh() {
-    const defaultRadius = 8e-3;
-    const joints = this.controller.joints;
-    let count = 0;
-    for (let i = 0; i < this.joints.length; i++) {
-      const joint = joints[this.joints[i]];
-      if (joint.visible) {
-        XRHandPrimitiveModel_vector.setScalar(joint.jointRadius || defaultRadius);
-        XRHandPrimitiveModel_matrix.compose(joint.position, joint.quaternion, XRHandPrimitiveModel_vector);
-        this.handMesh.setMatrixAt(i, XRHandPrimitiveModel_matrix);
-        count++;
-      }
-    }
-    this.handMesh.count = count;
-    this.handMesh.instanceMatrix.needsUpdate = true;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/webxr/XRHandModelFactory.js
-
-
-
-class XRHandModel extends three_module.Object3D {
-  constructor(controller) {
-    super();
-    this.controller = controller;
-    this.motionController = null;
-    this.envMap = null;
-    this.mesh = null;
-  }
-  updateMatrixWorld(force) {
-    super.updateMatrixWorld(force);
-    if (this.motionController) {
-      this.motionController.updateMesh();
-    }
-  }
-}
-class XRHandModelFactory {
-  constructor() {
-    this.path = null;
-  }
-  setPath(path) {
-    this.path = path;
-    return this;
-  }
-  createHandModel(controller, profile) {
-    const handModel = new XRHandModel(controller);
-    controller.addEventListener("connected", (event) => {
-      const xrInputSource = event.data;
-      if (xrInputSource.hand && !handModel.motionController) {
-        handModel.xrInputSource = xrInputSource;
-        if (profile === void 0 || profile === "spheres") {
-          handModel.motionController = new XRHandPrimitiveModel(
-            handModel,
-            controller,
-            this.path,
-            xrInputSource.handedness,
-            { primitive: "sphere" }
-          );
-        } else if (profile === "boxes") {
-          handModel.motionController = new XRHandPrimitiveModel(
-            handModel,
-            controller,
-            this.path,
-            xrInputSource.handedness,
-            { primitive: "box" }
-          );
-        } else if (profile === "mesh") {
-          handModel.motionController = new XRHandMeshModel(handModel, controller, this.path, xrInputSource.handedness);
-        }
-      }
-    });
-    controller.addEventListener("disconnected", () => {
-    });
-    return handModel;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/geometries/ParametricGeometry.js
-
-class ParametricGeometry extends three_module.BufferGeometry {
-  constructor(func = (u, v, target) => target.set(u, v, Math.cos(u) * Math.sin(v)), slices = 8, stacks = 8) {
-    super();
-    this.type = "ParametricGeometry";
-    this.parameters = {
-      func,
-      slices,
-      stacks
-    };
-    const indices = [];
-    const vertices = [];
-    const normals = [];
-    const uvs = [];
-    const EPS = 1e-5;
-    const normal = new three_module.Vector3();
-    const p0 = new three_module.Vector3(), p1 = new three_module.Vector3();
-    const pu = new three_module.Vector3(), pv = new three_module.Vector3();
-    const sliceCount = slices + 1;
-    for (let i = 0; i <= stacks; i++) {
-      const v = i / stacks;
-      for (let j = 0; j <= slices; j++) {
-        const u = j / slices;
-        func(u, v, p0);
-        vertices.push(p0.x, p0.y, p0.z);
-        if (u - EPS >= 0) {
-          func(u - EPS, v, p1);
-          pu.subVectors(p0, p1);
-        } else {
-          func(u + EPS, v, p1);
-          pu.subVectors(p1, p0);
-        }
-        if (v - EPS >= 0) {
-          func(u, v - EPS, p1);
-          pv.subVectors(p0, p1);
-        } else {
-          func(u, v + EPS, p1);
-          pv.subVectors(p1, p0);
-        }
-        normal.crossVectors(pu, pv).normalize();
-        normals.push(normal.x, normal.y, normal.z);
-        uvs.push(u, v);
-      }
-    }
-    for (let i = 0; i < stacks; i++) {
-      for (let j = 0; j < slices; j++) {
-        const a = i * sliceCount + j;
-        const b = i * sliceCount + j + 1;
-        const c = (i + 1) * sliceCount + j + 1;
-        const d = (i + 1) * sliceCount + j;
-        indices.push(a, b, d);
-        indices.push(b, c, d);
-      }
-    }
-    this.setIndex(indices);
-    this.setAttribute("position", new three_module.Float32BufferAttribute(vertices, 3));
-    this.setAttribute("normal", new three_module.Float32BufferAttribute(normals, 3));
-    this.setAttribute("uv", new three_module.Float32BufferAttribute(uvs, 2));
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/geometries/ParametricGeometries.js
-
-
-class TubeGeometry extends ParametricGeometry {
-  constructor(path, segments = 64, radius = 1, segmentsRadius = 8, closed = false) {
-    const numpoints = segments + 1;
-    const frames = path.computeFrenetFrames(segments, closed), tangents = frames.tangents, normals = frames.normals, binormals = frames.binormals;
-    const position = new three_module.Vector3();
-    function ParametricTube(u, v, target) {
-      v *= 2 * Math.PI;
-      const i = Math.floor(u * (numpoints - 1));
-      path.getPointAt(u, position);
-      const normal = normals[i];
-      const binormal = binormals[i];
-      const cx = -radius * Math.cos(v);
-      const cy = radius * Math.sin(v);
-      position.x += cx * normal.x + cy * binormal.x;
-      position.y += cx * normal.y + cy * binormal.y;
-      position.z += cx * normal.z + cy * binormal.z;
-      target.copy(position);
-    }
-    super(ParametricTube, segments, segmentsRadius);
-    this.tangents = tangents;
-    this.normals = normals;
-    this.binormals = binormals;
-    this.path = path;
-    this.segments = segments;
-    this.radius = radius;
-    this.segmentsRadius = segmentsRadius;
-    this.closed = closed;
-  }
-}
-const ParametricGeometries = {
-  klein: function(v, u, target) {
-    u *= Math.PI;
-    v *= 2 * Math.PI;
-    u = u * 2;
-    let x, z;
-    if (u < Math.PI) {
-      x = 3 * Math.cos(u) * (1 + Math.sin(u)) + 2 * (1 - Math.cos(u) / 2) * Math.cos(u) * Math.cos(v);
-      z = -8 * Math.sin(u) - 2 * (1 - Math.cos(u) / 2) * Math.sin(u) * Math.cos(v);
-    } else {
-      x = 3 * Math.cos(u) * (1 + Math.sin(u)) + 2 * (1 - Math.cos(u) / 2) * Math.cos(v + Math.PI);
-      z = -8 * Math.sin(u);
-    }
-    const y = -2 * (1 - Math.cos(u) / 2) * Math.sin(v);
-    target.set(x, y, z);
-  },
-  plane: function(width, height) {
-    return function(u, v, target) {
-      const x = u * width;
-      const y = 0;
-      const z = v * height;
-      target.set(x, y, z);
-    };
-  },
-  mobius: function(u, t, target) {
-    u = u - 0.5;
-    const v = 2 * Math.PI * t;
-    const a = 2;
-    const x = Math.cos(v) * (a + u * Math.cos(v / 2));
-    const y = Math.sin(v) * (a + u * Math.cos(v / 2));
-    const z = u * Math.sin(v / 2);
-    target.set(x, y, z);
-  },
-  mobius3d: function(u, t, target) {
-    u *= Math.PI;
-    t *= 2 * Math.PI;
-    u = u * 2;
-    const phi = u / 2;
-    const major = 2.25, a = 0.125, b = 0.65;
-    let x = a * Math.cos(t) * Math.cos(phi) - b * Math.sin(t) * Math.sin(phi);
-    const z = a * Math.cos(t) * Math.sin(phi) + b * Math.sin(t) * Math.cos(phi);
-    const y = (major + x) * Math.sin(u);
-    x = (major + x) * Math.cos(u);
-    target.set(x, y, z);
-  },
-  TubeGeometry,
-  TorusKnotGeometry: class TorusKnotGeometry extends TubeGeometry {
-    constructor(radius = 200, tube = 40, segmentsT = 64, segmentsR = 8, p = 2, q = 3) {
-      class TorusKnotCurve extends three_module.Curve {
-        getPoint(t, optionalTarget = new three_module.Vector3()) {
-          const point = optionalTarget;
-          t *= Math.PI * 2;
-          const r = 0.5;
-          const x = (1 + r * Math.cos(q * t)) * Math.cos(p * t);
-          const y = (1 + r * Math.cos(q * t)) * Math.sin(p * t);
-          const z = r * Math.sin(q * t);
-          return point.set(x, y, z).multiplyScalar(radius);
-        }
-      }
-      const segments = segmentsT;
-      const radiusSegments = segmentsR;
-      const extrudePath = new TorusKnotCurve();
-      super(extrudePath, segments, tube, radiusSegments, true, false);
-      this.radius = radius;
-      this.tube = tube;
-      this.segmentsT = segmentsT;
-      this.segmentsR = segmentsR;
-      this.p = p;
-      this.q = q;
-    }
-  },
-  SphereGeometry: class SphereGeometry extends ParametricGeometry {
-    constructor(size, u, v) {
-      function sphere(u2, v2, target) {
-        u2 *= Math.PI;
-        v2 *= 2 * Math.PI;
-        const x = size * Math.sin(u2) * Math.cos(v2);
-        const y = size * Math.sin(u2) * Math.sin(v2);
-        const z = size * Math.cos(u2);
-        target.set(x, y, z);
-      }
-      super(sphere, u, v);
-    }
-  },
-  PlaneGeometry: class PlaneGeometry extends ParametricGeometry {
-    constructor(width, depth, segmentsWidth, segmentsDepth) {
-      function plane(u, v, target) {
-        const x = u * width;
-        const y = 0;
-        const z = v * depth;
-        target.set(x, y, z);
-      }
-      super(plane, segmentsWidth, segmentsDepth);
-    }
-  }
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/geometries/RoundedBoxGeometry.js
-
-const tempNormal = /* @__PURE__ */ new three_module.Vector3();
-function getUv(faceDirVector, normal, uvAxis, projectionAxis, radius, sideLength) {
-  const totArcLength = 2 * Math.PI * radius / 4;
-  const centerLength = Math.max(sideLength - 2 * radius, 0);
-  const halfArc = Math.PI / 4;
-  tempNormal.copy(normal);
-  tempNormal[projectionAxis] = 0;
-  tempNormal.normalize();
-  const arcUvRatio = 0.5 * totArcLength / (totArcLength + centerLength);
-  const arcAngleRatio = 1 - tempNormal.angleTo(faceDirVector) / halfArc;
-  if (Math.sign(tempNormal[uvAxis]) === 1) {
-    return arcAngleRatio * arcUvRatio;
-  } else {
-    const lenUv = centerLength / (totArcLength + centerLength);
-    return lenUv + arcUvRatio + arcUvRatio * (1 - arcAngleRatio);
-  }
-}
-class RoundedBoxGeometry extends three_module.BoxGeometry {
-  constructor(width = 1, height = 1, depth = 1, segments = 2, radius = 0.1) {
-    segments = segments * 2 + 1;
-    radius = Math.min(width / 2, height / 2, depth / 2, radius);
-    super(1, 1, 1, segments, segments, segments);
-    if (segments === 1)
-      return;
-    const geometry2 = this.toNonIndexed();
-    this.index = null;
-    this.attributes.position = geometry2.attributes.position;
-    this.attributes.normal = geometry2.attributes.normal;
-    this.attributes.uv = geometry2.attributes.uv;
-    const position = new three_module.Vector3();
-    const normal = new three_module.Vector3();
-    const box = new three_module.Vector3(width, height, depth).divideScalar(2).subScalar(radius);
-    const positions = this.attributes.position.array;
-    const normals = this.attributes.normal.array;
-    const uvs = this.attributes.uv.array;
-    const faceTris = positions.length / 6;
-    const faceDirVector = new three_module.Vector3();
-    const halfSegmentSize = 0.5 / segments;
-    for (let i = 0, j = 0; i < positions.length; i += 3, j += 2) {
-      position.fromArray(positions, i);
-      normal.copy(position);
-      normal.x -= Math.sign(normal.x) * halfSegmentSize;
-      normal.y -= Math.sign(normal.y) * halfSegmentSize;
-      normal.z -= Math.sign(normal.z) * halfSegmentSize;
-      normal.normalize();
-      positions[i + 0] = box.x * Math.sign(position.x) + normal.x * radius;
-      positions[i + 1] = box.y * Math.sign(position.y) + normal.y * radius;
-      positions[i + 2] = box.z * Math.sign(position.z) + normal.z * radius;
-      normals[i + 0] = normal.x;
-      normals[i + 1] = normal.y;
-      normals[i + 2] = normal.z;
-      const side = Math.floor(i / faceTris);
-      switch (side) {
-        case 0:
-          faceDirVector.set(1, 0, 0);
-          uvs[j + 0] = getUv(faceDirVector, normal, "z", "y", radius, depth);
-          uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "z", radius, height);
-          break;
-        case 1:
-          faceDirVector.set(-1, 0, 0);
-          uvs[j + 0] = 1 - getUv(faceDirVector, normal, "z", "y", radius, depth);
-          uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "z", radius, height);
-          break;
-        case 2:
-          faceDirVector.set(0, 1, 0);
-          uvs[j + 0] = 1 - getUv(faceDirVector, normal, "x", "z", radius, width);
-          uvs[j + 1] = getUv(faceDirVector, normal, "z", "x", radius, depth);
-          break;
-        case 3:
-          faceDirVector.set(0, -1, 0);
-          uvs[j + 0] = 1 - getUv(faceDirVector, normal, "x", "z", radius, width);
-          uvs[j + 1] = 1 - getUv(faceDirVector, normal, "z", "x", radius, depth);
-          break;
-        case 4:
-          faceDirVector.set(0, 0, 1);
-          uvs[j + 0] = 1 - getUv(faceDirVector, normal, "x", "y", radius, width);
-          uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "x", radius, height);
-          break;
-        case 5:
-          faceDirVector.set(0, 0, -1);
-          uvs[j + 0] = getUv(faceDirVector, normal, "x", "y", radius, width);
-          uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "x", radius, height);
-          break;
-      }
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/geometries/BoxLineGeometry.js
-
-class BoxLineGeometry extends three_module.BufferGeometry {
-  constructor(width, height, depth, widthSegments, heightSegments, depthSegments) {
-    super();
-    width = width || 1;
-    height = height || 1;
-    depth = depth || 1;
-    widthSegments = Math.floor(widthSegments) || 1;
-    heightSegments = Math.floor(heightSegments) || 1;
-    depthSegments = Math.floor(depthSegments) || 1;
-    const widthHalf = width / 2;
-    const heightHalf = height / 2;
-    const depthHalf = depth / 2;
-    const segmentWidth = width / widthSegments;
-    const segmentHeight = height / heightSegments;
-    const segmentDepth = depth / depthSegments;
-    const vertices = [];
-    let x = -widthHalf, y = -heightHalf, z = -depthHalf;
-    for (let i = 0; i <= widthSegments; i++) {
-      vertices.push(x, -heightHalf, -depthHalf, x, heightHalf, -depthHalf);
-      vertices.push(x, heightHalf, -depthHalf, x, heightHalf, depthHalf);
-      vertices.push(x, heightHalf, depthHalf, x, -heightHalf, depthHalf);
-      vertices.push(x, -heightHalf, depthHalf, x, -heightHalf, -depthHalf);
-      x += segmentWidth;
-    }
-    for (let i = 0; i <= heightSegments; i++) {
-      vertices.push(-widthHalf, y, -depthHalf, widthHalf, y, -depthHalf);
-      vertices.push(widthHalf, y, -depthHalf, widthHalf, y, depthHalf);
-      vertices.push(widthHalf, y, depthHalf, -widthHalf, y, depthHalf);
-      vertices.push(-widthHalf, y, depthHalf, -widthHalf, y, -depthHalf);
-      y += segmentHeight;
-    }
-    for (let i = 0; i <= depthSegments; i++) {
-      vertices.push(-widthHalf, -heightHalf, z, -widthHalf, heightHalf, z);
-      vertices.push(-widthHalf, heightHalf, z, widthHalf, heightHalf, z);
-      vertices.push(widthHalf, heightHalf, z, widthHalf, -heightHalf, z);
-      vertices.push(widthHalf, -heightHalf, z, -widthHalf, -heightHalf, z);
-      z += segmentDepth;
-    }
-    this.setAttribute("position", new three_module.Float32BufferAttribute(vertices, 3));
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/geometries/DecalGeometry.js
-
-class DecalGeometry extends three_module.BufferGeometry {
-  constructor(mesh, position, orientation, size) {
-    super();
-    const vertices = [];
-    const normals = [];
-    const uvs = [];
-    const plane = new three_module.Vector3();
-    const projectorMatrix = new three_module.Matrix4();
-    projectorMatrix.makeRotationFromEuler(orientation);
-    projectorMatrix.setPosition(position);
-    const projectorMatrixInverse = new three_module.Matrix4();
-    projectorMatrixInverse.copy(projectorMatrix).invert();
-    generate();
-    this.setAttribute("position", new three_module.Float32BufferAttribute(vertices, 3));
-    this.setAttribute("normal", new three_module.Float32BufferAttribute(normals, 3));
-    this.setAttribute("uv", new three_module.Float32BufferAttribute(uvs, 2));
-    function generate() {
-      let i;
-      let decalVertices = [];
-      const vertex = new three_module.Vector3();
-      const normal = new three_module.Vector3();
-      if (mesh.geometry.isGeometry === true) {
-        console.error("THREE.DecalGeometry no longer supports THREE.Geometry. Use BufferGeometry instead.");
-        return;
-      }
-      const geometry = mesh.geometry;
-      const positionAttribute = geometry.attributes.position;
-      const normalAttribute = geometry.attributes.normal;
-      if (geometry.index !== null) {
-        const index = geometry.index;
-        for (i = 0; i < index.count; i++) {
-          vertex.fromBufferAttribute(positionAttribute, index.getX(i));
-          normal.fromBufferAttribute(normalAttribute, index.getX(i));
-          pushDecalVertex(decalVertices, vertex, normal);
-        }
-      } else {
-        for (i = 0; i < positionAttribute.count; i++) {
-          vertex.fromBufferAttribute(positionAttribute, i);
-          normal.fromBufferAttribute(normalAttribute, i);
-          pushDecalVertex(decalVertices, vertex, normal);
-        }
-      }
-      decalVertices = clipGeometry(decalVertices, plane.set(1, 0, 0));
-      decalVertices = clipGeometry(decalVertices, plane.set(-1, 0, 0));
-      decalVertices = clipGeometry(decalVertices, plane.set(0, 1, 0));
-      decalVertices = clipGeometry(decalVertices, plane.set(0, -1, 0));
-      decalVertices = clipGeometry(decalVertices, plane.set(0, 0, 1));
-      decalVertices = clipGeometry(decalVertices, plane.set(0, 0, -1));
-      for (i = 0; i < decalVertices.length; i++) {
-        const decalVertex = decalVertices[i];
-        uvs.push(0.5 + decalVertex.position.x / size.x, 0.5 + decalVertex.position.y / size.y);
-        decalVertex.position.applyMatrix4(projectorMatrix);
-        vertices.push(decalVertex.position.x, decalVertex.position.y, decalVertex.position.z);
-        normals.push(decalVertex.normal.x, decalVertex.normal.y, decalVertex.normal.z);
-      }
-    }
-    function pushDecalVertex(decalVertices, vertex, normal) {
-      vertex.applyMatrix4(mesh.matrixWorld);
-      vertex.applyMatrix4(projectorMatrixInverse);
-      normal.transformDirection(mesh.matrixWorld);
-      decalVertices.push(new DecalVertex(vertex.clone(), normal.clone()));
-    }
-    function clipGeometry(inVertices, plane2) {
-      const outVertices = [];
-      const s = 0.5 * Math.abs(size.dot(plane2));
-      for (let i = 0; i < inVertices.length; i += 3) {
-        let v1Out, v2Out, v3Out, total = 0;
-        let nV1, nV2, nV3, nV4;
-        const d1 = inVertices[i + 0].position.dot(plane2) - s;
-        const d2 = inVertices[i + 1].position.dot(plane2) - s;
-        const d3 = inVertices[i + 2].position.dot(plane2) - s;
-        v1Out = d1 > 0;
-        v2Out = d2 > 0;
-        v3Out = d3 > 0;
-        total = (v1Out ? 1 : 0) + (v2Out ? 1 : 0) + (v3Out ? 1 : 0);
-        switch (total) {
-          case 0: {
-            outVertices.push(inVertices[i]);
-            outVertices.push(inVertices[i + 1]);
-            outVertices.push(inVertices[i + 2]);
-            break;
-          }
-          case 1: {
-            if (v1Out) {
-              nV1 = inVertices[i + 1];
-              nV2 = inVertices[i + 2];
-              nV3 = clip(inVertices[i], nV1, plane2, s);
-              nV4 = clip(inVertices[i], nV2, plane2, s);
-            }
-            if (v2Out) {
-              nV1 = inVertices[i];
-              nV2 = inVertices[i + 2];
-              nV3 = clip(inVertices[i + 1], nV1, plane2, s);
-              nV4 = clip(inVertices[i + 1], nV2, plane2, s);
-              outVertices.push(nV3);
-              outVertices.push(nV2.clone());
-              outVertices.push(nV1.clone());
-              outVertices.push(nV2.clone());
-              outVertices.push(nV3.clone());
-              outVertices.push(nV4);
-              break;
-            }
-            if (v3Out) {
-              nV1 = inVertices[i];
-              nV2 = inVertices[i + 1];
-              nV3 = clip(inVertices[i + 2], nV1, plane2, s);
-              nV4 = clip(inVertices[i + 2], nV2, plane2, s);
-            }
-            outVertices.push(nV1.clone());
-            outVertices.push(nV2.clone());
-            outVertices.push(nV3);
-            outVertices.push(nV4);
-            outVertices.push(nV3.clone());
-            outVertices.push(nV2.clone());
-            break;
-          }
-          case 2: {
-            if (!v1Out) {
-              nV1 = inVertices[i].clone();
-              nV2 = clip(nV1, inVertices[i + 1], plane2, s);
-              nV3 = clip(nV1, inVertices[i + 2], plane2, s);
-              outVertices.push(nV1);
-              outVertices.push(nV2);
-              outVertices.push(nV3);
-            }
-            if (!v2Out) {
-              nV1 = inVertices[i + 1].clone();
-              nV2 = clip(nV1, inVertices[i + 2], plane2, s);
-              nV3 = clip(nV1, inVertices[i], plane2, s);
-              outVertices.push(nV1);
-              outVertices.push(nV2);
-              outVertices.push(nV3);
-            }
-            if (!v3Out) {
-              nV1 = inVertices[i + 2].clone();
-              nV2 = clip(nV1, inVertices[i], plane2, s);
-              nV3 = clip(nV1, inVertices[i + 1], plane2, s);
-              outVertices.push(nV1);
-              outVertices.push(nV2);
-              outVertices.push(nV3);
-            }
-            break;
-          }
-          case 3: {
-            break;
-          }
-        }
-      }
-      return outVertices;
-    }
-    function clip(v0, v1, p, s) {
-      const d0 = v0.position.dot(p) - s;
-      const d1 = v1.position.dot(p) - s;
-      const s0 = d0 / (d0 - d1);
-      const v = new DecalVertex(
-        new three_module.Vector3(
-          v0.position.x + s0 * (v1.position.x - v0.position.x),
-          v0.position.y + s0 * (v1.position.y - v0.position.y),
-          v0.position.z + s0 * (v1.position.z - v0.position.z)
-        ),
-        new three_module.Vector3(
-          v0.normal.x + s0 * (v1.normal.x - v0.normal.x),
-          v0.normal.y + s0 * (v1.normal.y - v0.normal.y),
-          v0.normal.z + s0 * (v1.normal.z - v0.normal.z)
-        )
-      );
-      return v;
-    }
-  }
-}
-class DecalVertex {
-  constructor(position, normal) {
-    this.position = position;
-    this.normal = normal;
-  }
-  clone() {
-    return new this.constructor(this.position.clone(), this.normal.clone());
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/geometries/TeapotGeometry.js
-
-class TeapotGeometry extends three_module.BufferGeometry {
-  constructor(size, segments, bottom, lid, body, fitLid, blinn) {
-    const teapotPatches = [
-      /*rim*/
-      0,
-      1,
-      2,
-      3,
-      4,
-      5,
-      6,
-      7,
-      8,
-      9,
-      10,
-      11,
-      12,
-      13,
-      14,
-      15,
-      3,
-      16,
-      17,
-      18,
-      7,
-      19,
-      20,
-      21,
-      11,
-      22,
-      23,
-      24,
-      15,
-      25,
-      26,
-      27,
-      18,
-      28,
-      29,
-      30,
-      21,
-      31,
-      32,
-      33,
-      24,
-      34,
-      35,
-      36,
-      27,
-      37,
-      38,
-      39,
-      30,
-      40,
-      41,
-      0,
-      33,
-      42,
-      43,
-      4,
-      36,
-      44,
-      45,
-      8,
-      39,
-      46,
-      47,
-      12,
-      /*body*/
-      12,
-      13,
-      14,
-      15,
-      48,
-      49,
-      50,
-      51,
-      52,
-      53,
-      54,
-      55,
-      56,
-      57,
-      58,
-      59,
-      15,
-      25,
-      26,
-      27,
-      51,
-      60,
-      61,
-      62,
-      55,
-      63,
-      64,
-      65,
-      59,
-      66,
-      67,
-      68,
-      27,
-      37,
-      38,
-      39,
-      62,
-      69,
-      70,
-      71,
-      65,
-      72,
-      73,
-      74,
-      68,
-      75,
-      76,
-      77,
-      39,
-      46,
-      47,
-      12,
-      71,
-      78,
-      79,
-      48,
-      74,
-      80,
-      81,
-      52,
-      77,
-      82,
-      83,
-      56,
-      56,
-      57,
-      58,
-      59,
-      84,
-      85,
-      86,
-      87,
-      88,
-      89,
-      90,
-      91,
-      92,
-      93,
-      94,
-      95,
-      59,
-      66,
-      67,
-      68,
-      87,
-      96,
-      97,
-      98,
-      91,
-      99,
-      100,
-      101,
-      95,
-      102,
-      103,
-      104,
-      68,
-      75,
-      76,
-      77,
-      98,
-      105,
-      106,
-      107,
-      101,
-      108,
-      109,
-      110,
-      104,
-      111,
-      112,
-      113,
-      77,
-      82,
-      83,
-      56,
-      107,
-      114,
-      115,
-      84,
-      110,
-      116,
-      117,
-      88,
-      113,
-      118,
-      119,
-      92,
-      /*handle*/
-      120,
-      121,
-      122,
-      123,
-      124,
-      125,
-      126,
-      127,
-      128,
-      129,
-      130,
-      131,
-      132,
-      133,
-      134,
-      135,
-      123,
-      136,
-      137,
-      120,
-      127,
-      138,
-      139,
-      124,
-      131,
-      140,
-      141,
-      128,
-      135,
-      142,
-      143,
-      132,
-      132,
-      133,
-      134,
-      135,
-      144,
-      145,
-      146,
-      147,
-      148,
-      149,
-      150,
-      151,
-      68,
-      152,
-      153,
-      154,
-      135,
-      142,
-      143,
-      132,
-      147,
-      155,
-      156,
-      144,
-      151,
-      157,
-      158,
-      148,
-      154,
-      159,
-      160,
-      68,
-      /*spout*/
-      161,
-      162,
-      163,
-      164,
-      165,
-      166,
-      167,
-      168,
-      169,
-      170,
-      171,
-      172,
-      173,
-      174,
-      175,
-      176,
-      164,
-      177,
-      178,
-      161,
-      168,
-      179,
-      180,
-      165,
-      172,
-      181,
-      182,
-      169,
-      176,
-      183,
-      184,
-      173,
-      173,
-      174,
-      175,
-      176,
-      185,
-      186,
-      187,
-      188,
-      189,
-      190,
-      191,
-      192,
-      193,
-      194,
-      195,
-      196,
-      176,
-      183,
-      184,
-      173,
-      188,
-      197,
-      198,
-      185,
-      192,
-      199,
-      200,
-      189,
-      196,
-      201,
-      202,
-      193,
-      /*lid*/
-      203,
-      203,
-      203,
-      203,
-      204,
-      205,
-      206,
-      207,
-      208,
-      208,
-      208,
-      208,
-      209,
-      210,
-      211,
-      212,
-      203,
-      203,
-      203,
-      203,
-      207,
-      213,
-      214,
-      215,
-      208,
-      208,
-      208,
-      208,
-      212,
-      216,
-      217,
-      218,
-      203,
-      203,
-      203,
-      203,
-      215,
-      219,
-      220,
-      221,
-      208,
-      208,
-      208,
-      208,
-      218,
-      222,
-      223,
-      224,
-      203,
-      203,
-      203,
-      203,
-      221,
-      225,
-      226,
-      204,
-      208,
-      208,
-      208,
-      208,
-      224,
-      227,
-      228,
-      209,
-      209,
-      210,
-      211,
-      212,
-      229,
-      230,
-      231,
-      232,
-      233,
-      234,
-      235,
-      236,
-      237,
-      238,
-      239,
-      240,
-      212,
-      216,
-      217,
-      218,
-      232,
-      241,
-      242,
-      243,
-      236,
-      244,
-      245,
-      246,
-      240,
-      247,
-      248,
-      249,
-      218,
-      222,
-      223,
-      224,
-      243,
-      250,
-      251,
-      252,
-      246,
-      253,
-      254,
-      255,
-      249,
-      256,
-      257,
-      258,
-      224,
-      227,
-      228,
-      209,
-      252,
-      259,
-      260,
-      229,
-      255,
-      261,
-      262,
-      233,
-      258,
-      263,
-      264,
-      237,
-      /*bottom*/
-      265,
-      265,
-      265,
-      265,
-      266,
-      267,
-      268,
-      269,
-      270,
-      271,
-      272,
-      273,
-      92,
-      119,
-      118,
-      113,
-      265,
-      265,
-      265,
-      265,
-      269,
-      274,
-      275,
-      276,
-      273,
-      277,
-      278,
-      279,
-      113,
-      112,
-      111,
-      104,
-      265,
-      265,
-      265,
-      265,
-      276,
-      280,
-      281,
-      282,
-      279,
-      283,
-      284,
-      285,
-      104,
-      103,
-      102,
-      95,
-      265,
-      265,
-      265,
-      265,
-      282,
-      286,
-      287,
-      266,
-      285,
-      288,
-      289,
-      270,
-      95,
-      94,
-      93,
-      92
-    ];
-    const teapotVertices = [
-      1.4,
-      0,
-      2.4,
-      1.4,
-      -0.784,
-      2.4,
-      0.784,
-      -1.4,
-      2.4,
-      0,
-      -1.4,
-      2.4,
-      1.3375,
-      0,
-      2.53125,
-      1.3375,
-      -0.749,
-      2.53125,
-      0.749,
-      -1.3375,
-      2.53125,
-      0,
-      -1.3375,
-      2.53125,
-      1.4375,
-      0,
-      2.53125,
-      1.4375,
-      -0.805,
-      2.53125,
-      0.805,
-      -1.4375,
-      2.53125,
-      0,
-      -1.4375,
-      2.53125,
-      1.5,
-      0,
-      2.4,
-      1.5,
-      -0.84,
-      2.4,
-      0.84,
-      -1.5,
-      2.4,
-      0,
-      -1.5,
-      2.4,
-      -0.784,
-      -1.4,
-      2.4,
-      -1.4,
-      -0.784,
-      2.4,
-      -1.4,
-      0,
-      2.4,
-      -0.749,
-      -1.3375,
-      2.53125,
-      -1.3375,
-      -0.749,
-      2.53125,
-      -1.3375,
-      0,
-      2.53125,
-      -0.805,
-      -1.4375,
-      2.53125,
-      -1.4375,
-      -0.805,
-      2.53125,
-      -1.4375,
-      0,
-      2.53125,
-      -0.84,
-      -1.5,
-      2.4,
-      -1.5,
-      -0.84,
-      2.4,
-      -1.5,
-      0,
-      2.4,
-      -1.4,
-      0.784,
-      2.4,
-      -0.784,
-      1.4,
-      2.4,
-      0,
-      1.4,
-      2.4,
-      -1.3375,
-      0.749,
-      2.53125,
-      -0.749,
-      1.3375,
-      2.53125,
-      0,
-      1.3375,
-      2.53125,
-      -1.4375,
-      0.805,
-      2.53125,
-      -0.805,
-      1.4375,
-      2.53125,
-      0,
-      1.4375,
-      2.53125,
-      -1.5,
-      0.84,
-      2.4,
-      -0.84,
-      1.5,
-      2.4,
-      0,
-      1.5,
-      2.4,
-      0.784,
-      1.4,
-      2.4,
-      1.4,
-      0.784,
-      2.4,
-      0.749,
-      1.3375,
-      2.53125,
-      1.3375,
-      0.749,
-      2.53125,
-      0.805,
-      1.4375,
-      2.53125,
-      1.4375,
-      0.805,
-      2.53125,
-      0.84,
-      1.5,
-      2.4,
-      1.5,
-      0.84,
-      2.4,
-      1.75,
-      0,
-      1.875,
-      1.75,
-      -0.98,
-      1.875,
-      0.98,
-      -1.75,
-      1.875,
-      0,
-      -1.75,
-      1.875,
-      2,
-      0,
-      1.35,
-      2,
-      -1.12,
-      1.35,
-      1.12,
-      -2,
-      1.35,
-      0,
-      -2,
-      1.35,
-      2,
-      0,
-      0.9,
-      2,
-      -1.12,
-      0.9,
-      1.12,
-      -2,
-      0.9,
-      0,
-      -2,
-      0.9,
-      -0.98,
-      -1.75,
-      1.875,
-      -1.75,
-      -0.98,
-      1.875,
-      -1.75,
-      0,
-      1.875,
-      -1.12,
-      -2,
-      1.35,
-      -2,
-      -1.12,
-      1.35,
-      -2,
-      0,
-      1.35,
-      -1.12,
-      -2,
-      0.9,
-      -2,
-      -1.12,
-      0.9,
-      -2,
-      0,
-      0.9,
-      -1.75,
-      0.98,
-      1.875,
-      -0.98,
-      1.75,
-      1.875,
-      0,
-      1.75,
-      1.875,
-      -2,
-      1.12,
-      1.35,
-      -1.12,
-      2,
-      1.35,
-      0,
-      2,
-      1.35,
-      -2,
-      1.12,
-      0.9,
-      -1.12,
-      2,
-      0.9,
-      0,
-      2,
-      0.9,
-      0.98,
-      1.75,
-      1.875,
-      1.75,
-      0.98,
-      1.875,
-      1.12,
-      2,
-      1.35,
-      2,
-      1.12,
-      1.35,
-      1.12,
-      2,
-      0.9,
-      2,
-      1.12,
-      0.9,
-      2,
-      0,
-      0.45,
-      2,
-      -1.12,
-      0.45,
-      1.12,
-      -2,
-      0.45,
-      0,
-      -2,
-      0.45,
-      1.5,
-      0,
-      0.225,
-      1.5,
-      -0.84,
-      0.225,
-      0.84,
-      -1.5,
-      0.225,
-      0,
-      -1.5,
-      0.225,
-      1.5,
-      0,
-      0.15,
-      1.5,
-      -0.84,
-      0.15,
-      0.84,
-      -1.5,
-      0.15,
-      0,
-      -1.5,
-      0.15,
-      -1.12,
-      -2,
-      0.45,
-      -2,
-      -1.12,
-      0.45,
-      -2,
-      0,
-      0.45,
-      -0.84,
-      -1.5,
-      0.225,
-      -1.5,
-      -0.84,
-      0.225,
-      -1.5,
-      0,
-      0.225,
-      -0.84,
-      -1.5,
-      0.15,
-      -1.5,
-      -0.84,
-      0.15,
-      -1.5,
-      0,
-      0.15,
-      -2,
-      1.12,
-      0.45,
-      -1.12,
-      2,
-      0.45,
-      0,
-      2,
-      0.45,
-      -1.5,
-      0.84,
-      0.225,
-      -0.84,
-      1.5,
-      0.225,
-      0,
-      1.5,
-      0.225,
-      -1.5,
-      0.84,
-      0.15,
-      -0.84,
-      1.5,
-      0.15,
-      0,
-      1.5,
-      0.15,
-      1.12,
-      2,
-      0.45,
-      2,
-      1.12,
-      0.45,
-      0.84,
-      1.5,
-      0.225,
-      1.5,
-      0.84,
-      0.225,
-      0.84,
-      1.5,
-      0.15,
-      1.5,
-      0.84,
-      0.15,
-      -1.6,
-      0,
-      2.025,
-      -1.6,
-      -0.3,
-      2.025,
-      -1.5,
-      -0.3,
-      2.25,
-      -1.5,
-      0,
-      2.25,
-      -2.3,
-      0,
-      2.025,
-      -2.3,
-      -0.3,
-      2.025,
-      -2.5,
-      -0.3,
-      2.25,
-      -2.5,
-      0,
-      2.25,
-      -2.7,
-      0,
-      2.025,
-      -2.7,
-      -0.3,
-      2.025,
-      -3,
-      -0.3,
-      2.25,
-      -3,
-      0,
-      2.25,
-      -2.7,
-      0,
-      1.8,
-      -2.7,
-      -0.3,
-      1.8,
-      -3,
-      -0.3,
-      1.8,
-      -3,
-      0,
-      1.8,
-      -1.5,
-      0.3,
-      2.25,
-      -1.6,
-      0.3,
-      2.025,
-      -2.5,
-      0.3,
-      2.25,
-      -2.3,
-      0.3,
-      2.025,
-      -3,
-      0.3,
-      2.25,
-      -2.7,
-      0.3,
-      2.025,
-      -3,
-      0.3,
-      1.8,
-      -2.7,
-      0.3,
-      1.8,
-      -2.7,
-      0,
-      1.575,
-      -2.7,
-      -0.3,
-      1.575,
-      -3,
-      -0.3,
-      1.35,
-      -3,
-      0,
-      1.35,
-      -2.5,
-      0,
-      1.125,
-      -2.5,
-      -0.3,
-      1.125,
-      -2.65,
-      -0.3,
-      0.9375,
-      -2.65,
-      0,
-      0.9375,
-      -2,
-      -0.3,
-      0.9,
-      -1.9,
-      -0.3,
-      0.6,
-      -1.9,
-      0,
-      0.6,
-      -3,
-      0.3,
-      1.35,
-      -2.7,
-      0.3,
-      1.575,
-      -2.65,
-      0.3,
-      0.9375,
-      -2.5,
-      0.3,
-      1.125,
-      -1.9,
-      0.3,
-      0.6,
-      -2,
-      0.3,
-      0.9,
-      1.7,
-      0,
-      1.425,
-      1.7,
-      -0.66,
-      1.425,
-      1.7,
-      -0.66,
-      0.6,
-      1.7,
-      0,
-      0.6,
-      2.6,
-      0,
-      1.425,
-      2.6,
-      -0.66,
-      1.425,
-      3.1,
-      -0.66,
-      0.825,
-      3.1,
-      0,
-      0.825,
-      2.3,
-      0,
-      2.1,
-      2.3,
-      -0.25,
-      2.1,
-      2.4,
-      -0.25,
-      2.025,
-      2.4,
-      0,
-      2.025,
-      2.7,
-      0,
-      2.4,
-      2.7,
-      -0.25,
-      2.4,
-      3.3,
-      -0.25,
-      2.4,
-      3.3,
-      0,
-      2.4,
-      1.7,
-      0.66,
-      0.6,
-      1.7,
-      0.66,
-      1.425,
-      3.1,
-      0.66,
-      0.825,
-      2.6,
-      0.66,
-      1.425,
-      2.4,
-      0.25,
-      2.025,
-      2.3,
-      0.25,
-      2.1,
-      3.3,
-      0.25,
-      2.4,
-      2.7,
-      0.25,
-      2.4,
-      2.8,
-      0,
-      2.475,
-      2.8,
-      -0.25,
-      2.475,
-      3.525,
-      -0.25,
-      2.49375,
-      3.525,
-      0,
-      2.49375,
-      2.9,
-      0,
-      2.475,
-      2.9,
-      -0.15,
-      2.475,
-      3.45,
-      -0.15,
-      2.5125,
-      3.45,
-      0,
-      2.5125,
-      2.8,
-      0,
-      2.4,
-      2.8,
-      -0.15,
-      2.4,
-      3.2,
-      -0.15,
-      2.4,
-      3.2,
-      0,
-      2.4,
-      3.525,
-      0.25,
-      2.49375,
-      2.8,
-      0.25,
-      2.475,
-      3.45,
-      0.15,
-      2.5125,
-      2.9,
-      0.15,
-      2.475,
-      3.2,
-      0.15,
-      2.4,
-      2.8,
-      0.15,
-      2.4,
-      0,
-      0,
-      3.15,
-      0.8,
-      0,
-      3.15,
-      0.8,
-      -0.45,
-      3.15,
-      0.45,
-      -0.8,
-      3.15,
-      0,
-      -0.8,
-      3.15,
-      0,
-      0,
-      2.85,
-      0.2,
-      0,
-      2.7,
-      0.2,
-      -0.112,
-      2.7,
-      0.112,
-      -0.2,
-      2.7,
-      0,
-      -0.2,
-      2.7,
-      -0.45,
-      -0.8,
-      3.15,
-      -0.8,
-      -0.45,
-      3.15,
-      -0.8,
-      0,
-      3.15,
-      -0.112,
-      -0.2,
-      2.7,
-      -0.2,
-      -0.112,
-      2.7,
-      -0.2,
-      0,
-      2.7,
-      -0.8,
-      0.45,
-      3.15,
-      -0.45,
-      0.8,
-      3.15,
-      0,
-      0.8,
-      3.15,
-      -0.2,
-      0.112,
-      2.7,
-      -0.112,
-      0.2,
-      2.7,
-      0,
-      0.2,
-      2.7,
-      0.45,
-      0.8,
-      3.15,
-      0.8,
-      0.45,
-      3.15,
-      0.112,
-      0.2,
-      2.7,
-      0.2,
-      0.112,
-      2.7,
-      0.4,
-      0,
-      2.55,
-      0.4,
-      -0.224,
-      2.55,
-      0.224,
-      -0.4,
-      2.55,
-      0,
-      -0.4,
-      2.55,
-      1.3,
-      0,
-      2.55,
-      1.3,
-      -0.728,
-      2.55,
-      0.728,
-      -1.3,
-      2.55,
-      0,
-      -1.3,
-      2.55,
-      1.3,
-      0,
-      2.4,
-      1.3,
-      -0.728,
-      2.4,
-      0.728,
-      -1.3,
-      2.4,
-      0,
-      -1.3,
-      2.4,
-      -0.224,
-      -0.4,
-      2.55,
-      -0.4,
-      -0.224,
-      2.55,
-      -0.4,
-      0,
-      2.55,
-      -0.728,
-      -1.3,
-      2.55,
-      -1.3,
-      -0.728,
-      2.55,
-      -1.3,
-      0,
-      2.55,
-      -0.728,
-      -1.3,
-      2.4,
-      -1.3,
-      -0.728,
-      2.4,
-      -1.3,
-      0,
-      2.4,
-      -0.4,
-      0.224,
-      2.55,
-      -0.224,
-      0.4,
-      2.55,
-      0,
-      0.4,
-      2.55,
-      -1.3,
-      0.728,
-      2.55,
-      -0.728,
-      1.3,
-      2.55,
-      0,
-      1.3,
-      2.55,
-      -1.3,
-      0.728,
-      2.4,
-      -0.728,
-      1.3,
-      2.4,
-      0,
-      1.3,
-      2.4,
-      0.224,
-      0.4,
-      2.55,
-      0.4,
-      0.224,
-      2.55,
-      0.728,
-      1.3,
-      2.55,
-      1.3,
-      0.728,
-      2.55,
-      0.728,
-      1.3,
-      2.4,
-      1.3,
-      0.728,
-      2.4,
-      0,
-      0,
-      0,
-      1.425,
-      0,
-      0,
-      1.425,
-      0.798,
-      0,
-      0.798,
-      1.425,
-      0,
-      0,
-      1.425,
-      0,
-      1.5,
-      0,
-      0.075,
-      1.5,
-      0.84,
-      0.075,
-      0.84,
-      1.5,
-      0.075,
-      0,
-      1.5,
-      0.075,
-      -0.798,
-      1.425,
-      0,
-      -1.425,
-      0.798,
-      0,
-      -1.425,
-      0,
-      0,
-      -0.84,
-      1.5,
-      0.075,
-      -1.5,
-      0.84,
-      0.075,
-      -1.5,
-      0,
-      0.075,
-      -1.425,
-      -0.798,
-      0,
-      -0.798,
-      -1.425,
-      0,
-      0,
-      -1.425,
-      0,
-      -1.5,
-      -0.84,
-      0.075,
-      -0.84,
-      -1.5,
-      0.075,
-      0,
-      -1.5,
-      0.075,
-      0.798,
-      -1.425,
-      0,
-      1.425,
-      -0.798,
-      0,
-      0.84,
-      -1.5,
-      0.075,
-      1.5,
-      -0.84,
-      0.075
-    ];
-    super();
-    size = size || 50;
-    segments = segments !== void 0 ? Math.max(2, Math.floor(segments) || 10) : 10;
-    bottom = bottom === void 0 ? true : bottom;
-    lid = lid === void 0 ? true : lid;
-    body = body === void 0 ? true : body;
-    fitLid = fitLid === void 0 ? true : fitLid;
-    const blinnScale = 1.3;
-    blinn = blinn === void 0 ? true : blinn;
-    const maxHeight = 3.15 * (blinn ? 1 : blinnScale);
-    const maxHeight2 = maxHeight / 2;
-    const trueSize = size / maxHeight2;
-    let numTriangles = bottom ? (8 * segments - 4) * segments : 0;
-    numTriangles += lid ? (16 * segments - 4) * segments : 0;
-    numTriangles += body ? 40 * segments * segments : 0;
-    const indices = new Uint32Array(numTriangles * 3);
-    let numVertices = bottom ? 4 : 0;
-    numVertices += lid ? 8 : 0;
-    numVertices += body ? 20 : 0;
-    numVertices *= (segments + 1) * (segments + 1);
-    const vertices = new Float32Array(numVertices * 3);
-    const normals = new Float32Array(numVertices * 3);
-    const uvs = new Float32Array(numVertices * 2);
-    const ms = new three_module.Matrix4();
-    ms.set(-1, 3, -3, 1, 3, -6, 3, 0, -3, 3, 0, 0, 1, 0, 0, 0);
-    const g = [];
-    let i, r, c;
-    const sp = [];
-    const tp = [];
-    const dsp = [];
-    const dtp = [];
-    const mgm = [];
-    const vert = [];
-    const sdir = [];
-    const tdir = [];
-    const norm = new three_module.Vector3();
-    let tcoord;
-    let sstep, tstep;
-    let vertPerRow;
-    let s, t, sval, tval, p;
-    let dsval = 0;
-    let dtval = 0;
-    const normOut = new three_module.Vector3();
-    let v1, v2, v3, v4;
-    const gmx = new three_module.Matrix4();
-    const tmtx = new three_module.Matrix4();
-    const vsp = new three_module.Vector4();
-    const vtp = new three_module.Vector4();
-    const vdsp = new three_module.Vector4();
-    const vdtp = new three_module.Vector4();
-    const vsdir = new three_module.Vector3();
-    const vtdir = new three_module.Vector3();
-    const mst = ms.clone();
-    mst.transpose();
-    const notDegenerate = (vtx1, vtx2, vtx3) => !(vertices[vtx1 * 3] === vertices[vtx2 * 3] && vertices[vtx1 * 3 + 1] === vertices[vtx2 * 3 + 1] && vertices[vtx1 * 3 + 2] === vertices[vtx2 * 3 + 2] || vertices[vtx1 * 3] === vertices[vtx3 * 3] && vertices[vtx1 * 3 + 1] === vertices[vtx3 * 3 + 1] && vertices[vtx1 * 3 + 2] === vertices[vtx3 * 3 + 2] || vertices[vtx2 * 3] === vertices[vtx3 * 3] && vertices[vtx2 * 3 + 1] === vertices[vtx3 * 3 + 1] && vertices[vtx2 * 3 + 2] === vertices[vtx3 * 3 + 2]);
-    for (i = 0; i < 3; i++) {
-      mgm[i] = new three_module.Matrix4();
-    }
-    const minPatches = body ? 0 : 20;
-    const maxPatches = bottom ? 32 : 28;
-    vertPerRow = segments + 1;
-    let surfCount = 0;
-    let vertCount = 0;
-    let normCount = 0;
-    let uvCount = 0;
-    let indexCount = 0;
-    for (let surf = minPatches; surf < maxPatches; surf++) {
-      if (lid || surf < 20 || surf >= 28) {
-        for (i = 0; i < 3; i++) {
-          for (r = 0; r < 4; r++) {
-            for (c = 0; c < 4; c++) {
-              g[c * 4 + r] = teapotVertices[teapotPatches[surf * 16 + r * 4 + c] * 3 + i];
-              if (fitLid && surf >= 20 && surf < 28 && i !== 2) {
-                g[c * 4 + r] *= 1.077;
-              }
-              if (!blinn && i === 2) {
-                g[c * 4 + r] *= blinnScale;
-              }
-            }
-          }
-          gmx.set(g[0], g[1], g[2], g[3], g[4], g[5], g[6], g[7], g[8], g[9], g[10], g[11], g[12], g[13], g[14], g[15]);
-          tmtx.multiplyMatrices(gmx, ms);
-          mgm[i].multiplyMatrices(mst, tmtx);
-        }
-        for (sstep = 0; sstep <= segments; sstep++) {
-          s = sstep / segments;
-          for (tstep = 0; tstep <= segments; tstep++) {
-            t = tstep / segments;
-            for (p = 4, sval = tval = 1; p--; ) {
-              sp[p] = sval;
-              tp[p] = tval;
-              sval *= s;
-              tval *= t;
-              if (p === 3) {
-                dsp[p] = dtp[p] = 0;
-                dsval = dtval = 1;
-              } else {
-                dsp[p] = dsval * (3 - p);
-                dtp[p] = dtval * (3 - p);
-                dsval *= s;
-                dtval *= t;
-              }
-            }
-            vsp.fromArray(sp);
-            vtp.fromArray(tp);
-            vdsp.fromArray(dsp);
-            vdtp.fromArray(dtp);
-            for (i = 0; i < 3; i++) {
-              tcoord = vsp.clone();
-              tcoord.applyMatrix4(mgm[i]);
-              vert[i] = tcoord.dot(vtp);
-              tcoord = vdsp.clone();
-              tcoord.applyMatrix4(mgm[i]);
-              sdir[i] = tcoord.dot(vtp);
-              tcoord = vsp.clone();
-              tcoord.applyMatrix4(mgm[i]);
-              tdir[i] = tcoord.dot(vdtp);
-            }
-            vsdir.fromArray(sdir);
-            vtdir.fromArray(tdir);
-            norm.crossVectors(vtdir, vsdir);
-            norm.normalize();
-            if (vert[0] === 0 && vert[1] === 0) {
-              normOut.set(0, vert[2] > maxHeight2 ? 1 : -1, 0);
-            } else {
-              normOut.set(norm.x, norm.z, -norm.y);
-            }
-            vertices[vertCount++] = trueSize * vert[0];
-            vertices[vertCount++] = trueSize * (vert[2] - maxHeight2);
-            vertices[vertCount++] = -trueSize * vert[1];
-            normals[normCount++] = normOut.x;
-            normals[normCount++] = normOut.y;
-            normals[normCount++] = normOut.z;
-            uvs[uvCount++] = 1 - t;
-            uvs[uvCount++] = 1 - s;
-          }
-        }
-        for (sstep = 0; sstep < segments; sstep++) {
-          for (tstep = 0; tstep < segments; tstep++) {
-            v1 = surfCount * vertPerRow * vertPerRow + sstep * vertPerRow + tstep;
-            v2 = v1 + 1;
-            v3 = v2 + vertPerRow;
-            v4 = v1 + vertPerRow;
-            if (notDegenerate(v1, v2, v3)) {
-              indices[indexCount++] = v1;
-              indices[indexCount++] = v2;
-              indices[indexCount++] = v3;
-            }
-            if (notDegenerate(v1, v3, v4)) {
-              indices[indexCount++] = v1;
-              indices[indexCount++] = v3;
-              indices[indexCount++] = v4;
-            }
-          }
-        }
-        surfCount++;
-      }
-    }
-    this.setIndex(new three_module.BufferAttribute(indices, 1));
-    this.setAttribute("position", new three_module.BufferAttribute(vertices, 3));
-    this.setAttribute("normal", new three_module.BufferAttribute(normals, 3));
-    this.setAttribute("uv", new three_module.BufferAttribute(uvs, 2));
-    this.computeBoundingSphere();
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/geometries/TextGeometry.js
-
-class TextGeometry extends three_module.ExtrudeGeometry {
-  constructor(text, parameters = {}) {
-    const {
-      bevelEnabled = false,
-      bevelSize = 8,
-      bevelThickness = 10,
-      font,
-      height = 50,
-      size = 100,
-      lineHeight = 1,
-      letterSpacing = 0,
-      ...rest
-    } = parameters;
-    if (font === void 0) {
-      super();
-    } else {
-      const shapes = font.generateShapes(text, size, { lineHeight, letterSpacing });
-      super(shapes, { ...rest, bevelEnabled, bevelSize, bevelThickness, depth: height });
-    }
-    this.type = "TextGeometry";
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/csm/CSMFrustum.js
-
-const inverseProjectionMatrix = /* @__PURE__ */ new three_module.Matrix4();
-class CSMFrustum {
-  constructor(data) {
-    data = data || {};
-    this.vertices = {
-      near: [new three_module.Vector3(), new three_module.Vector3(), new three_module.Vector3(), new three_module.Vector3()],
-      far: [new three_module.Vector3(), new three_module.Vector3(), new three_module.Vector3(), new three_module.Vector3()]
-    };
-    if (data.projectionMatrix !== void 0) {
-      this.setFromProjectionMatrix(data.projectionMatrix, data.maxFar || 1e4);
-    }
-  }
-  setFromProjectionMatrix(projectionMatrix, maxFar) {
-    const isOrthographic = projectionMatrix.elements[2 * 4 + 3] === 0;
-    inverseProjectionMatrix.copy(projectionMatrix).invert();
-    this.vertices.near[0].set(1, 1, -1);
-    this.vertices.near[1].set(1, -1, -1);
-    this.vertices.near[2].set(-1, -1, -1);
-    this.vertices.near[3].set(-1, 1, -1);
-    this.vertices.near.forEach(function(v) {
-      v.applyMatrix4(inverseProjectionMatrix);
-    });
-    this.vertices.far[0].set(1, 1, 1);
-    this.vertices.far[1].set(1, -1, 1);
-    this.vertices.far[2].set(-1, -1, 1);
-    this.vertices.far[3].set(-1, 1, 1);
-    this.vertices.far.forEach(function(v) {
-      v.applyMatrix4(inverseProjectionMatrix);
-      const absZ = Math.abs(v.z);
-      if (isOrthographic) {
-        v.z *= Math.min(maxFar / absZ, 1);
-      } else {
-        v.multiplyScalar(Math.min(maxFar / absZ, 1));
-      }
-    });
-    return this.vertices;
-  }
-  split(breaks, target) {
-    while (breaks.length > target.length) {
-      target.push(new CSMFrustum());
-    }
-    target.length = breaks.length;
-    for (let i = 0; i < breaks.length; i++) {
-      const cascade = target[i];
-      if (i === 0) {
-        for (let j = 0; j < 4; j++) {
-          cascade.vertices.near[j].copy(this.vertices.near[j]);
-        }
-      } else {
-        for (let j = 0; j < 4; j++) {
-          cascade.vertices.near[j].lerpVectors(this.vertices.near[j], this.vertices.far[j], breaks[i - 1]);
-        }
-      }
-      if (i === breaks.length - 1) {
-        for (let j = 0; j < 4; j++) {
-          cascade.vertices.far[j].copy(this.vertices.far[j]);
-        }
-      } else {
-        for (let j = 0; j < 4; j++) {
-          cascade.vertices.far[j].lerpVectors(this.vertices.near[j], this.vertices.far[j], breaks[i]);
-        }
-      }
-    }
-  }
-  toSpace(cameraMatrix, target) {
-    for (let i = 0; i < 4; i++) {
-      target.vertices.near[i].copy(this.vertices.near[i]).applyMatrix4(cameraMatrix);
-      target.vertices.far[i].copy(this.vertices.far[i]).applyMatrix4(cameraMatrix);
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/csm/CSMShader.js
-
-const CSMShader = {
-  lights_fragment_begin: (
-    /* glsl */
-    `
-GeometricContext geometry;
-
-geometry.position = - vViewPosition;
-geometry.normal = normal;
-geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );
-
-#ifdef CLEARCOAT
-
-	geometry.clearcoatNormal = clearcoatNormal;
-
-#endif
-
-IncidentLight directLight;
-
-#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )
-
-	PointLight pointLight;
-	#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0
-	PointLightShadow pointLightShadow;
-	#endif
-
-	#pragma unroll_loop_start
-	for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {
-
-		pointLight = pointLights[ i ];
-
-		getPointLightInfo( pointLight, geometry, directLight );
-
-		#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )
-		pointLightShadow = pointLightShadows[ i ];
-		directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;
-		#endif
-
-		RE_Direct( directLight, geometry, material, reflectedLight );
-
-	}
-	#pragma unroll_loop_end
-
-#endif
-
-#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )
-
-	SpotLight spotLight;
-	#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0
-	SpotLightShadow spotLightShadow;
-	#endif
-
-	#pragma unroll_loop_start
-	for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {
-
-		spotLight = spotLights[ i ];
-
-		getSpotLightInfo( spotLight, geometry, directLight );
-
-		#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )
-		spotLightShadow = spotLightShadows[ i ];
-		directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;
-		#endif
-
-		RE_Direct( directLight, geometry, material, reflectedLight );
-
-	}
-	#pragma unroll_loop_end
-
-#endif
-
-#if ( NUM_DIR_LIGHTS > 0) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES )
-
-	DirectionalLight directionalLight;
-	float linearDepth = (vViewPosition.z) / (shadowFar - cameraNear);
-	#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0
-	DirectionalLightShadow directionalLightShadow;
-	#endif
-
-	#if defined( USE_SHADOWMAP ) && defined( CSM_FADE )
-	vec2 cascade;
-	float cascadeCenter;
-	float closestEdge;
-	float margin;
-	float csmx;
-	float csmy;
-
-	#pragma unroll_loop_start
-	for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {
-
-		directionalLight = directionalLights[ i ];
-		getDirectionalLightInfo( directionalLight, geometry, directLight );
-
-	  	#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )
-			// NOTE: Depth gets larger away from the camera.
-			// cascade.x is closer, cascade.y is further
-			cascade = CSM_cascades[ i ];
-			cascadeCenter = ( cascade.x + cascade.y ) / 2.0;
-			closestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y;
-			margin = 0.25 * pow( closestEdge, 2.0 );
-			csmx = cascade.x - margin / 2.0;
-			csmy = cascade.y + margin / 2.0;
-			if( linearDepth >= csmx && ( linearDepth < csmy || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 ) ) {
-
-				float dist = min( linearDepth - csmx, csmy - linearDepth );
-				float ratio = clamp( dist / margin, 0.0, 1.0 );
-
-				vec3 prevColor = directLight.color;
-				directionalLightShadow = directionalLightShadows[ i ];
-				directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
-
-				bool shouldFadeLastCascade = UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth > cascadeCenter;
-				directLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 );
-
-				ReflectedLight prevLight = reflectedLight;
-				RE_Direct( directLight, geometry, material, reflectedLight );
-
-				bool shouldBlend = UNROLLED_LOOP_INDEX != CSM_CASCADES - 1 || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth < cascadeCenter;
-				float blendRatio = shouldBlend ? ratio : 1.0;
-
-				reflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio );
-				reflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio );
-				reflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio );
-				reflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio );
-
-			}
-	  	#endif
-
-	}
-	#pragma unroll_loop_end
-	#else
-
-		#pragma unroll_loop_start
-		for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {
-
-			directionalLight = directionalLights[ i ];
-			getDirectionalLightInfo( directionalLight, geometry, directLight );
-
-			#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )
-
-			directionalLightShadow = directionalLightShadows[ i ];
-			if(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
-
-			if(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometry, material, reflectedLight );
-
-			#endif
-
-		}
-		#pragma unroll_loop_end
-
-	#endif
-
-	#if ( NUM_DIR_LIGHTS > NUM_DIR_LIGHT_SHADOWS)
-		// compute the lights not casting shadows (if any)
-
-		#pragma unroll_loop_start
-		for ( int i = NUM_DIR_LIGHT_SHADOWS; i < NUM_DIR_LIGHTS; i ++ ) {
-
-			directionalLight = directionalLights[ i ];
-
-			getDirectionalLightInfo( directionalLight, geometry, directLight );
-
-			RE_Direct( directLight, geometry, material, reflectedLight );
-
-		}
-		#pragma unroll_loop_end
-
-	#endif
-
-#endif
-
-
-#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES )
-
-	DirectionalLight directionalLight;
-	#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0
-	DirectionalLightShadow directionalLightShadow;
-	#endif
-
-	#pragma unroll_loop_start
-	for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {
-
-		directionalLight = directionalLights[ i ];
-
-		getDirectionalLightInfo( directionalLight, geometry, directLight );
-
-		#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )
-		directionalLightShadow = directionalLightShadows[ i ];
-		directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
-		#endif
-
-		RE_Direct( directLight, geometry, material, reflectedLight );
-
-	}
-	#pragma unroll_loop_end
-
-#endif
-
-#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )
-
-	RectAreaLight rectAreaLight;
-
-	#pragma unroll_loop_start
-	for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {
-
-		rectAreaLight = rectAreaLights[ i ];
-		RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );
-
-	}
-	#pragma unroll_loop_end
-
-#endif
-
-#if defined( RE_IndirectDiffuse )
-
-	vec3 iblIrradiance = vec3( 0.0 );
-
-	vec3 irradiance = getAmbientLightIrradiance( ambientLightColor );
-
-	irradiance += getLightProbeIrradiance( lightProbe, geometry.normal );
-
-	#if ( NUM_HEMI_LIGHTS > 0 )
-
-		#pragma unroll_loop_start
-		for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {
-
-			irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );
-
-		}
-		#pragma unroll_loop_end
-
-	#endif
-
-#endif
-
-#if defined( RE_IndirectSpecular )
-
-	vec3 radiance = vec3( 0.0 );
-	vec3 clearcoatRadiance = vec3( 0.0 );
-
-#endif
-`
-  ),
-  getlights_pars_begin() {
-    return (
-      /* glsl */
-      `
-			#if defined( USE_CSM ) && defined( CSM_CASCADES )
-			uniform vec2 CSM_cascades[CSM_CASCADES];
-			uniform float cameraNear;
-			uniform float shadowFar;
-			#endif
-
-			${three_module.ShaderChunk.lights_pars_begin}
-		`
-    );
-  }
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/csm/CSM.js
-
-
-
-const _cameraToLightMatrix = /* @__PURE__ */ new three_module.Matrix4();
-const _lightSpaceFrustum = /* @__PURE__ */ new CSMFrustum();
-const _center = /* @__PURE__ */ new three_module.Vector3();
-const _bbox = /* @__PURE__ */ new three_module.Box3();
-const _uniformArray = [];
-const _logArray = [];
-class CSM {
-  constructor(data) {
-    data = data || {};
-    this.camera = data.camera;
-    this.parent = data.parent;
-    this.cascades = data.cascades || 3;
-    this.maxFar = data.maxFar || 1e5;
-    this.mode = data.mode || "practical";
-    this.shadowMapSize = data.shadowMapSize || 2048;
-    this.shadowBias = data.shadowBias || 1e-6;
-    this.lightDirection = data.lightDirection || new three_module.Vector3(1, -1, 1).normalize();
-    this.lightIntensity = data.lightIntensity || 1;
-    this.lightNear = data.lightNear || 1;
-    this.lightFar = data.lightFar || 2e3;
-    this.lightMargin = data.lightMargin || 200;
-    this.customSplitsCallback = data.customSplitsCallback;
-    this.fade = false;
-    this.mainFrustum = new CSMFrustum();
-    this.frustums = [];
-    this.breaks = [];
-    this.lights = [];
-    this.shaders = /* @__PURE__ */ new Map();
-    this.createLights();
-    this.updateFrustums();
-    this.injectInclude();
-  }
-  createLights() {
-    for (let i = 0; i < this.cascades; i++) {
-      const light = new three_module.DirectionalLight(16777215, this.lightIntensity);
-      light.castShadow = true;
-      light.shadow.mapSize.width = this.shadowMapSize;
-      light.shadow.mapSize.height = this.shadowMapSize;
-      light.shadow.camera.near = this.lightNear;
-      light.shadow.camera.far = this.lightFar;
-      light.shadow.bias = this.shadowBias;
-      this.parent.add(light);
-      this.parent.add(light.target);
-      this.lights.push(light);
-    }
-  }
-  initCascades() {
-    const camera = this.camera;
-    camera.updateProjectionMatrix();
-    this.mainFrustum.setFromProjectionMatrix(camera.projectionMatrix, this.maxFar);
-    this.mainFrustum.split(this.breaks, this.frustums);
-  }
-  updateShadowBounds() {
-    const frustums = this.frustums;
-    for (let i = 0; i < frustums.length; i++) {
-      const light = this.lights[i];
-      const shadowCam = light.shadow.camera;
-      const frustum = this.frustums[i];
-      const nearVerts = frustum.vertices.near;
-      const farVerts = frustum.vertices.far;
-      const point1 = farVerts[0];
-      let point2;
-      if (point1.distanceTo(farVerts[2]) > point1.distanceTo(nearVerts[2])) {
-        point2 = farVerts[2];
-      } else {
-        point2 = nearVerts[2];
-      }
-      let squaredBBWidth = point1.distanceTo(point2);
-      if (this.fade) {
-        const camera = this.camera;
-        const far = Math.max(camera.far, this.maxFar);
-        const linearDepth = frustum.vertices.far[0].z / (far - camera.near);
-        const margin = 0.25 * Math.pow(linearDepth, 2) * (far - camera.near);
-        squaredBBWidth += margin;
-      }
-      shadowCam.left = -squaredBBWidth / 2;
-      shadowCam.right = squaredBBWidth / 2;
-      shadowCam.top = squaredBBWidth / 2;
-      shadowCam.bottom = -squaredBBWidth / 2;
-      shadowCam.updateProjectionMatrix();
-    }
-  }
-  getBreaks() {
-    const camera = this.camera;
-    const far = Math.min(camera.far, this.maxFar);
-    this.breaks.length = 0;
-    switch (this.mode) {
-      case "uniform":
-        uniformSplit(this.cascades, camera.near, far, this.breaks);
-        break;
-      case "logarithmic":
-        logarithmicSplit(this.cascades, camera.near, far, this.breaks);
-        break;
-      case "practical":
-        practicalSplit(this.cascades, camera.near, far, 0.5, this.breaks);
-        break;
-      case "custom":
-        if (this.customSplitsCallback === void 0)
-          console.error("CSM: Custom split scheme callback not defined.");
-        this.customSplitsCallback(this.cascades, camera.near, far, this.breaks);
-        break;
-    }
-    function uniformSplit(amount, near, far2, target) {
-      for (let i = 1; i < amount; i++) {
-        target.push((near + (far2 - near) * i / amount) / far2);
-      }
-      target.push(1);
-    }
-    function logarithmicSplit(amount, near, far2, target) {
-      for (let i = 1; i < amount; i++) {
-        target.push(near * (far2 / near) ** (i / amount) / far2);
-      }
-      target.push(1);
-    }
-    function practicalSplit(amount, near, far2, lambda, target) {
-      _uniformArray.length = 0;
-      _logArray.length = 0;
-      logarithmicSplit(amount, near, far2, _logArray);
-      uniformSplit(amount, near, far2, _uniformArray);
-      for (let i = 1; i < amount; i++) {
-        target.push(three_module.MathUtils.lerp(_uniformArray[i - 1], _logArray[i - 1], lambda));
-      }
-      target.push(1);
-    }
-  }
-  update() {
-    const camera = this.camera;
-    const frustums = this.frustums;
-    for (let i = 0; i < frustums.length; i++) {
-      const light = this.lights[i];
-      const shadowCam = light.shadow.camera;
-      const texelWidth = (shadowCam.right - shadowCam.left) / this.shadowMapSize;
-      const texelHeight = (shadowCam.top - shadowCam.bottom) / this.shadowMapSize;
-      light.shadow.camera.updateMatrixWorld(true);
-      _cameraToLightMatrix.multiplyMatrices(light.shadow.camera.matrixWorldInverse, camera.matrixWorld);
-      frustums[i].toSpace(_cameraToLightMatrix, _lightSpaceFrustum);
-      const nearVerts = _lightSpaceFrustum.vertices.near;
-      const farVerts = _lightSpaceFrustum.vertices.far;
-      _bbox.makeEmpty();
-      for (let j = 0; j < 4; j++) {
-        _bbox.expandByPoint(nearVerts[j]);
-        _bbox.expandByPoint(farVerts[j]);
-      }
-      _bbox.getCenter(_center);
-      _center.z = _bbox.max.z + this.lightMargin;
-      _center.x = Math.floor(_center.x / texelWidth) * texelWidth;
-      _center.y = Math.floor(_center.y / texelHeight) * texelHeight;
-      _center.applyMatrix4(light.shadow.camera.matrixWorld);
-      light.position.copy(_center);
-      light.target.position.copy(_center);
-      light.target.position.x += this.lightDirection.x;
-      light.target.position.y += this.lightDirection.y;
-      light.target.position.z += this.lightDirection.z;
-    }
-  }
-  injectInclude() {
-    three_module.ShaderChunk.lights_fragment_begin = CSMShader.lights_fragment_begin;
-    three_module.ShaderChunk.lights_pars_begin = CSMShader.lights_pars_begin;
-  }
-  setupMaterial(material) {
-    material.defines = material.defines || {};
-    material.defines.USE_CSM = 1;
-    material.defines.CSM_CASCADES = this.cascades;
-    if (this.fade) {
-      material.defines.CSM_FADE = "";
-    }
-    const breaksVec2 = [];
-    const scope = this;
-    const shaders = this.shaders;
-    material.onBeforeCompile = function(shader) {
-      const far = Math.min(scope.camera.far, scope.maxFar);
-      scope.getExtendedBreaks(breaksVec2);
-      shader.uniforms.CSM_cascades = { value: breaksVec2 };
-      shader.uniforms.cameraNear = { value: scope.camera.near };
-      shader.uniforms.shadowFar = { value: far };
-      shaders.set(material, shader);
-    };
-    shaders.set(material, null);
-  }
-  updateUniforms() {
-    const far = Math.min(this.camera.far, this.maxFar);
-    const shaders = this.shaders;
-    shaders.forEach(function(shader, material) {
-      if (shader !== null) {
-        const uniforms = shader.uniforms;
-        this.getExtendedBreaks(uniforms.CSM_cascades.value);
-        uniforms.cameraNear.value = this.camera.near;
-        uniforms.shadowFar.value = far;
-      }
-      if (!this.fade && "CSM_FADE" in material.defines) {
-        delete material.defines.CSM_FADE;
-        material.needsUpdate = true;
-      } else if (this.fade && !("CSM_FADE" in material.defines)) {
-        material.defines.CSM_FADE = "";
-        material.needsUpdate = true;
-      }
-    }, this);
-  }
-  getExtendedBreaks(target) {
-    while (target.length < this.breaks.length) {
-      target.push(new three_module.Vector2());
-    }
-    target.length = this.breaks.length;
-    for (let i = 0; i < this.cascades; i++) {
-      const amount = this.breaks[i];
-      const prev = this.breaks[i - 1] || 0;
-      target[i].x = prev;
-      target[i].y = amount;
-    }
-  }
-  updateFrustums() {
-    this.getBreaks();
-    this.initCascades();
-    this.updateShadowBounds();
-    this.updateUniforms();
-  }
-  remove() {
-    for (let i = 0; i < this.lights.length; i++) {
-      this.parent.remove(this.lights[i]);
-    }
-  }
-  dispose() {
-    const shaders = this.shaders;
-    shaders.forEach(function(shader, material) {
-      delete material.onBeforeCompile;
-      delete material.defines.USE_CSM;
-      delete material.defines.CSM_CASCADES;
-      delete material.defines.CSM_FADE;
-      if (shader !== null) {
-        delete shader.uniforms.CSM_cascades;
-        delete shader.uniforms.cameraNear;
-        delete shader.uniforms.shadowFar;
-      }
-      material.needsUpdate = true;
-    });
-    shaders.clear();
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/csm/CSMHelper.js
-
-class CSMHelper extends three_module.Group {
-  constructor(csm) {
-    super();
-    this.csm = csm;
-    this.displayFrustum = true;
-    this.displayPlanes = true;
-    this.displayShadowBounds = true;
-    const indices = new Uint16Array([0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7]);
-    const positions = new Float32Array(24);
-    const frustumGeometry = new three_module.BufferGeometry();
-    frustumGeometry.setIndex(new three_module.BufferAttribute(indices, 1));
-    frustumGeometry.setAttribute("position", new three_module.BufferAttribute(positions, 3, false));
-    const frustumLines = new three_module.LineSegments(frustumGeometry, new three_module.LineBasicMaterial());
-    this.add(frustumLines);
-    this.frustumLines = frustumLines;
-    this.cascadeLines = [];
-    this.cascadePlanes = [];
-    this.shadowLines = [];
-  }
-  updateVisibility() {
-    const displayFrustum = this.displayFrustum;
-    const displayPlanes = this.displayPlanes;
-    const displayShadowBounds = this.displayShadowBounds;
-    const frustumLines = this.frustumLines;
-    const cascadeLines = this.cascadeLines;
-    const cascadePlanes = this.cascadePlanes;
-    const shadowLines = this.shadowLines;
-    for (let i = 0, l = cascadeLines.length; i < l; i++) {
-      const cascadeLine = cascadeLines[i];
-      const cascadePlane = cascadePlanes[i];
-      const shadowLineGroup = shadowLines[i];
-      cascadeLine.visible = displayFrustum;
-      cascadePlane.visible = displayFrustum && displayPlanes;
-      shadowLineGroup.visible = displayShadowBounds;
-    }
-    frustumLines.visible = displayFrustum;
-  }
-  update() {
-    const csm = this.csm;
-    const camera = csm.camera;
-    const cascades = csm.cascades;
-    const mainFrustum = csm.mainFrustum;
-    const frustums = csm.frustums;
-    const lights = csm.lights;
-    const frustumLines = this.frustumLines;
-    const frustumLinePositions = frustumLines.geometry.getAttribute("position");
-    const cascadeLines = this.cascadeLines;
-    const cascadePlanes = this.cascadePlanes;
-    const shadowLines = this.shadowLines;
-    this.position.copy(camera.position);
-    this.quaternion.copy(camera.quaternion);
-    this.scale.copy(camera.scale);
-    this.updateMatrixWorld(true);
-    while (cascadeLines.length > cascades) {
-      this.remove(cascadeLines.pop());
-      this.remove(cascadePlanes.pop());
-      this.remove(shadowLines.pop());
-    }
-    while (cascadeLines.length < cascades) {
-      const cascadeLine = new three_module.Box3Helper(new three_module.Box3(), 16777215);
-      const planeMat = new three_module.MeshBasicMaterial({ transparent: true, opacity: 0.1, depthWrite: false, side: three_module.DoubleSide });
-      const cascadePlane = new three_module.Mesh(new three_module.PlaneGeometry(), planeMat);
-      const shadowLineGroup = new three_module.Group();
-      const shadowLine = new three_module.Box3Helper(new three_module.Box3(), 16776960);
-      shadowLineGroup.add(shadowLine);
-      this.add(cascadeLine);
-      this.add(cascadePlane);
-      this.add(shadowLineGroup);
-      cascadeLines.push(cascadeLine);
-      cascadePlanes.push(cascadePlane);
-      shadowLines.push(shadowLineGroup);
-    }
-    for (let i = 0; i < cascades; i++) {
-      const frustum = frustums[i];
-      const light = lights[i];
-      const shadowCam = light.shadow.camera;
-      const farVerts2 = frustum.vertices.far;
-      const cascadeLine = cascadeLines[i];
-      const cascadePlane = cascadePlanes[i];
-      const shadowLineGroup = shadowLines[i];
-      const shadowLine = shadowLineGroup.children[0];
-      cascadeLine.box.min.copy(farVerts2[2]);
-      cascadeLine.box.max.copy(farVerts2[0]);
-      cascadeLine.box.max.z += 1e-4;
-      cascadePlane.position.addVectors(farVerts2[0], farVerts2[2]);
-      cascadePlane.position.multiplyScalar(0.5);
-      cascadePlane.scale.subVectors(farVerts2[0], farVerts2[2]);
-      cascadePlane.scale.z = 1e-4;
-      this.remove(shadowLineGroup);
-      shadowLineGroup.position.copy(shadowCam.position);
-      shadowLineGroup.quaternion.copy(shadowCam.quaternion);
-      shadowLineGroup.scale.copy(shadowCam.scale);
-      shadowLineGroup.updateMatrixWorld(true);
-      this.attach(shadowLineGroup);
-      shadowLine.box.min.set(shadowCam.bottom, shadowCam.left, -shadowCam.far);
-      shadowLine.box.max.set(shadowCam.top, shadowCam.right, -shadowCam.near);
-    }
-    const nearVerts = mainFrustum.vertices.near;
-    const farVerts = mainFrustum.vertices.far;
-    frustumLinePositions.setXYZ(0, farVerts[0].x, farVerts[0].y, farVerts[0].z);
-    frustumLinePositions.setXYZ(1, farVerts[3].x, farVerts[3].y, farVerts[3].z);
-    frustumLinePositions.setXYZ(2, farVerts[2].x, farVerts[2].y, farVerts[2].z);
-    frustumLinePositions.setXYZ(3, farVerts[1].x, farVerts[1].y, farVerts[1].z);
-    frustumLinePositions.setXYZ(4, nearVerts[0].x, nearVerts[0].y, nearVerts[0].z);
-    frustumLinePositions.setXYZ(5, nearVerts[3].x, nearVerts[3].y, nearVerts[3].z);
-    frustumLinePositions.setXYZ(6, nearVerts[2].x, nearVerts[2].y, nearVerts[2].z);
-    frustumLinePositions.setXYZ(7, nearVerts[1].x, nearVerts[1].y, nearVerts[1].z);
-    frustumLinePositions.needsUpdate = true;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/ACESFilmicToneMappingShader.js
-const ACESFilmicToneMappingShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    exposure: { value: 1 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "#define saturate(a) clamp( a, 0.0, 1.0 )",
-    "uniform sampler2D tDiffuse;",
-    "uniform float exposure;",
-    "varying vec2 vUv;",
-    "vec3 RRTAndODTFit( vec3 v ) {",
-    "	vec3 a = v * ( v + 0.0245786 ) - 0.000090537;",
-    "	vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;",
-    "	return a / b;",
-    "}",
-    "vec3 ACESFilmicToneMapping( vec3 color ) {",
-    // sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT
-    "	const mat3 ACESInputMat = mat3(",
-    "		vec3( 0.59719, 0.07600, 0.02840 ),",
-    // transposed from source
-    "		vec3( 0.35458, 0.90834, 0.13383 ),",
-    "		vec3( 0.04823, 0.01566, 0.83777 )",
-    "	);",
-    // ODT_SAT => XYZ => D60_2_D65 => sRGB
-    "	const mat3 ACESOutputMat = mat3(",
-    "		vec3(  1.60475, -0.10208, -0.00327 ),",
-    // transposed from source
-    "		vec3( -0.53108,  1.10813, -0.07276 ),",
-    "		vec3( -0.07367, -0.00605,  1.07602 )",
-    "	);",
-    "	color = ACESInputMat * color;",
-    // Apply RRT and ODT
-    "	color = RRTAndODTFit( color );",
-    "	color = ACESOutputMat * color;",
-    // Clamp to [0, 1]
-    "	return saturate( color );",
-    "}",
-    "void main() {",
-    "	vec4 tex = texture2D( tDiffuse, vUv );",
-    "	tex.rgb *= exposure / 0.6;",
-    // pre-exposed, outside of the tone mapping function
-    "	gl_FragColor = vec4( ACESFilmicToneMapping( tex.rgb ), tex.a );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/BasicShader.js
-const BasicShader = {
-  uniforms: {},
-  vertexShader: [
-    "void main() {",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: ["void main() {", "	gl_FragColor = vec4( 1.0, 0.0, 0.0, 0.5 );", "}"].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/BleachBypassShader.js
-const BleachBypassShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    opacity: { value: 1 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform float opacity;",
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 base = texture2D( tDiffuse, vUv );",
-    "	vec3 lumCoeff = vec3( 0.25, 0.65, 0.1 );",
-    "	float lum = dot( lumCoeff, base.rgb );",
-    "	vec3 blend = vec3( lum );",
-    "	float L = min( 1.0, max( 0.0, 10.0 * ( lum - 0.45 ) ) );",
-    "	vec3 result1 = 2.0 * base.rgb * blend;",
-    "	vec3 result2 = 1.0 - 2.0 * ( 1.0 - blend ) * ( 1.0 - base.rgb );",
-    "	vec3 newColor = mix( result1, result2, L );",
-    "	float A2 = opacity * base.a;",
-    "	vec3 mixRGB = A2 * newColor.rgb;",
-    "	mixRGB += ( ( 1.0 - A2 ) * base.rgb );",
-    "	gl_FragColor = vec4( mixRGB, base.a );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/BlendShader.js
-const BlendShader = {
-  uniforms: {
-    tDiffuse1: { value: null },
-    tDiffuse2: { value: null },
-    mixRatio: { value: 0.5 },
-    opacity: { value: 1 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform float opacity;",
-    "uniform float mixRatio;",
-    "uniform sampler2D tDiffuse1;",
-    "uniform sampler2D tDiffuse2;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 texel1 = texture2D( tDiffuse1, vUv );",
-    "	vec4 texel2 = texture2D( tDiffuse2, vUv );",
-    "	gl_FragColor = opacity * mix( texel1, texel2, mixRatio );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/BrightnessContrastShader.js
-const BrightnessContrastShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    brightness: { value: 0 },
-    contrast: { value: 0 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform float brightness;",
-    "uniform float contrast;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	gl_FragColor = texture2D( tDiffuse, vUv );",
-    "	gl_FragColor.rgb += brightness;",
-    "	if (contrast > 0.0) {",
-    "		gl_FragColor.rgb = (gl_FragColor.rgb - 0.5) / (1.0 - contrast) + 0.5;",
-    "	} else {",
-    "		gl_FragColor.rgb = (gl_FragColor.rgb - 0.5) * (1.0 + contrast) + 0.5;",
-    "	}",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/ColorCorrectionShader.js
-
-const ColorCorrectionShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    powRGB: { value: /* @__PURE__ */ new three_module.Vector3(2, 2, 2) },
-    mulRGB: { value: /* @__PURE__ */ new three_module.Vector3(1, 1, 1) },
-    addRGB: { value: /* @__PURE__ */ new three_module.Vector3(0, 0, 0) }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform vec3 powRGB;",
-    "uniform vec3 mulRGB;",
-    "uniform vec3 addRGB;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	gl_FragColor = texture2D( tDiffuse, vUv );",
-    "	gl_FragColor.rgb = mulRGB * pow( ( gl_FragColor.rgb + addRGB ), powRGB );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/ColorifyShader.js
-
-const ColorifyShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    color: { value: /* @__PURE__ */ new three_module.Color(16777215) }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform vec3 color;",
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 texel = texture2D( tDiffuse, vUv );",
-    "	vec3 luma = vec3( 0.299, 0.587, 0.114 );",
-    "	float v = dot( texel.xyz, luma );",
-    "	gl_FragColor = vec4( v * color, texel.w );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/DOFMipMapShader.js
-const DOFMipMapShader = {
-  uniforms: {
-    tColor: { value: null },
-    tDepth: { value: null },
-    focus: { value: 1 },
-    maxblur: { value: 1 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform float focus;",
-    "uniform float maxblur;",
-    "uniform sampler2D tColor;",
-    "uniform sampler2D tDepth;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 depth = texture2D( tDepth, vUv );",
-    "	float factor = depth.x - focus;",
-    "	vec4 col = texture2D( tColor, vUv, 2.0 * maxblur * abs( focus - depth.x ) );",
-    "	gl_FragColor = col;",
-    "	gl_FragColor.a = 1.0;",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/FXAAShader.js
-
-const FXAAShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    resolution: { value: /* @__PURE__ */ new three_module.Vector2(1 / 1024, 1 / 512) }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "precision highp float;",
-    "",
-    "uniform sampler2D tDiffuse;",
-    "",
-    "uniform vec2 resolution;",
-    "",
-    "varying vec2 vUv;",
-    "",
-    "// FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)",
-    "",
-    "//----------------------------------------------------------------------------------",
-    "// File:        es3-keplerFXAAassetsshaders/FXAA_DefaultES.frag",
-    "// SDK Version: v3.00",
-    "// Email:       gameworks@nvidia.com",
-    "// Site:        http://developer.nvidia.com/",
-    "//",
-    "// Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.",
-    "//",
-    "// Redistribution and use in source and binary forms, with or without",
-    "// modification, are permitted provided that the following conditions",
-    "// are met:",
-    "//  * Redistributions of source code must retain the above copyright",
-    "//    notice, this list of conditions and the following disclaimer.",
-    "//  * Redistributions in binary form must reproduce the above copyright",
-    "//    notice, this list of conditions and the following disclaimer in the",
-    "//    documentation and/or other materials provided with the distribution.",
-    "//  * Neither the name of NVIDIA CORPORATION nor the names of its",
-    "//    contributors may be used to endorse or promote products derived",
-    "//    from this software without specific prior written permission.",
-    "//",
-    "// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS ``AS IS'' AND ANY",
-    "// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE",
-    "// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR",
-    "// PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR",
-    "// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,",
-    "// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,",
-    "// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR",
-    "// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY",
-    "// OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT",
-    "// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE",
-    "// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.",
-    "//",
-    "//----------------------------------------------------------------------------------",
-    "",
-    "#define FXAA_PC 1",
-    "#define FXAA_GLSL_100 1",
-    "#define FXAA_QUALITY_PRESET 12",
-    "",
-    "#define FXAA_GREEN_AS_LUMA 1",
-    "",
-    "/*--------------------------------------------------------------------------*/",
-    "#ifndef FXAA_PC_CONSOLE",
-    "    //",
-    "    // The console algorithm for PC is included",
-    "    // for developers targeting really low spec machines.",
-    "    // Likely better to just run FXAA_PC, and use a really low preset.",
-    "    //",
-    "    #define FXAA_PC_CONSOLE 0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#ifndef FXAA_GLSL_120",
-    "    #define FXAA_GLSL_120 0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#ifndef FXAA_GLSL_130",
-    "    #define FXAA_GLSL_130 0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#ifndef FXAA_HLSL_3",
-    "    #define FXAA_HLSL_3 0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#ifndef FXAA_HLSL_4",
-    "    #define FXAA_HLSL_4 0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#ifndef FXAA_HLSL_5",
-    "    #define FXAA_HLSL_5 0",
-    "#endif",
-    "/*==========================================================================*/",
-    "#ifndef FXAA_GREEN_AS_LUMA",
-    "    //",
-    "    // For those using non-linear color,",
-    "    // and either not able to get luma in alpha, or not wanting to,",
-    "    // this enables FXAA to run using green as a proxy for luma.",
-    "    // So with this enabled, no need to pack luma in alpha.",
-    "    //",
-    "    // This will turn off AA on anything which lacks some amount of green.",
-    "    // Pure red and blue or combination of only R and B, will get no AA.",
-    "    //",
-    "    // Might want to lower the settings for both,",
-    "    //    fxaaConsoleEdgeThresholdMin",
-    "    //    fxaaQualityEdgeThresholdMin",
-    "    // In order to insure AA does not get turned off on colors",
-    "    // which contain a minor amount of green.",
-    "    //",
-    "    // 1 = On.",
-    "    // 0 = Off.",
-    "    //",
-    "    #define FXAA_GREEN_AS_LUMA 0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#ifndef FXAA_EARLY_EXIT",
-    "    //",
-    "    // Controls algorithm's early exit path.",
-    "    // On PS3 turning this ON adds 2 cycles to the shader.",
-    "    // On 360 turning this OFF adds 10ths of a millisecond to the shader.",
-    "    // Turning this off on console will result in a more blurry image.",
-    "    // So this defaults to on.",
-    "    //",
-    "    // 1 = On.",
-    "    // 0 = Off.",
-    "    //",
-    "    #define FXAA_EARLY_EXIT 1",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#ifndef FXAA_DISCARD",
-    "    //",
-    "    // Only valid for PC OpenGL currently.",
-    "    // Probably will not work when FXAA_GREEN_AS_LUMA = 1.",
-    "    //",
-    "    // 1 = Use discard on pixels which don't need AA.",
-    "    //     For APIs which enable concurrent TEX+ROP from same surface.",
-    "    // 0 = Return unchanged color on pixels which don't need AA.",
-    "    //",
-    "    #define FXAA_DISCARD 0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#ifndef FXAA_FAST_PIXEL_OFFSET",
-    "    //",
-    "    // Used for GLSL 120 only.",
-    "    //",
-    "    // 1 = GL API supports fast pixel offsets",
-    "    // 0 = do not use fast pixel offsets",
-    "    //",
-    "    #ifdef GL_EXT_gpu_shader4",
-    "        #define FXAA_FAST_PIXEL_OFFSET 1",
-    "    #endif",
-    "    #ifdef GL_NV_gpu_shader5",
-    "        #define FXAA_FAST_PIXEL_OFFSET 1",
-    "    #endif",
-    "    #ifdef GL_ARB_gpu_shader5",
-    "        #define FXAA_FAST_PIXEL_OFFSET 1",
-    "    #endif",
-    "    #ifndef FXAA_FAST_PIXEL_OFFSET",
-    "        #define FXAA_FAST_PIXEL_OFFSET 0",
-    "    #endif",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#ifndef FXAA_GATHER4_ALPHA",
-    "    //",
-    "    // 1 = API supports gather4 on alpha channel.",
-    "    // 0 = API does not support gather4 on alpha channel.",
-    "    //",
-    "    #if (FXAA_HLSL_5 == 1)",
-    "        #define FXAA_GATHER4_ALPHA 1",
-    "    #endif",
-    "    #ifdef GL_ARB_gpu_shader5",
-    "        #define FXAA_GATHER4_ALPHA 1",
-    "    #endif",
-    "    #ifdef GL_NV_gpu_shader5",
-    "        #define FXAA_GATHER4_ALPHA 1",
-    "    #endif",
-    "    #ifndef FXAA_GATHER4_ALPHA",
-    "        #define FXAA_GATHER4_ALPHA 0",
-    "    #endif",
-    "#endif",
-    "",
-    "",
-    "/*============================================================================",
-    "                        FXAA QUALITY - TUNING KNOBS",
-    "------------------------------------------------------------------------------",
-    "NOTE the other tuning knobs are now in the shader function inputs!",
-    "============================================================================*/",
-    "#ifndef FXAA_QUALITY_PRESET",
-    "    //",
-    "    // Choose the quality preset.",
-    "    // This needs to be compiled into the shader as it effects code.",
-    "    // Best option to include multiple presets is to",
-    "    // in each shader define the preset, then include this file.",
-    "    //",
-    "    // OPTIONS",
-    "    // -----------------------------------------------------------------------",
-    "    // 10 to 15 - default medium dither (10=fastest, 15=highest quality)",
-    "    // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)",
-    "    // 39       - no dither, very expensive",
-    "    //",
-    "    // NOTES",
-    "    // -----------------------------------------------------------------------",
-    "    // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)",
-    "    // 13 = about same speed as FXAA 3.9 and better than 12",
-    "    // 23 = closest to FXAA 3.9 visually and performance wise",
-    "    //  _ = the lowest digit is directly related to performance",
-    "    // _  = the highest digit is directly related to style",
-    "    //",
-    "    #define FXAA_QUALITY_PRESET 12",
-    "#endif",
-    "",
-    "",
-    "/*============================================================================",
-    "",
-    "                           FXAA QUALITY - PRESETS",
-    "",
-    "============================================================================*/",
-    "",
-    "/*============================================================================",
-    "                     FXAA QUALITY - MEDIUM DITHER PRESETS",
-    "============================================================================*/",
-    "#if (FXAA_QUALITY_PRESET == 10)",
-    "    #define FXAA_QUALITY_PS 3",
-    "    #define FXAA_QUALITY_P0 1.5",
-    "    #define FXAA_QUALITY_P1 3.0",
-    "    #define FXAA_QUALITY_P2 12.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 11)",
-    "    #define FXAA_QUALITY_PS 4",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 3.0",
-    "    #define FXAA_QUALITY_P3 12.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 12)",
-    "    #define FXAA_QUALITY_PS 5",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 2.0",
-    "    #define FXAA_QUALITY_P3 4.0",
-    "    #define FXAA_QUALITY_P4 12.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 13)",
-    "    #define FXAA_QUALITY_PS 6",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 2.0",
-    "    #define FXAA_QUALITY_P3 2.0",
-    "    #define FXAA_QUALITY_P4 4.0",
-    "    #define FXAA_QUALITY_P5 12.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 14)",
-    "    #define FXAA_QUALITY_PS 7",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 2.0",
-    "    #define FXAA_QUALITY_P3 2.0",
-    "    #define FXAA_QUALITY_P4 2.0",
-    "    #define FXAA_QUALITY_P5 4.0",
-    "    #define FXAA_QUALITY_P6 12.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 15)",
-    "    #define FXAA_QUALITY_PS 8",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 2.0",
-    "    #define FXAA_QUALITY_P3 2.0",
-    "    #define FXAA_QUALITY_P4 2.0",
-    "    #define FXAA_QUALITY_P5 2.0",
-    "    #define FXAA_QUALITY_P6 4.0",
-    "    #define FXAA_QUALITY_P7 12.0",
-    "#endif",
-    "",
-    "/*============================================================================",
-    "                     FXAA QUALITY - LOW DITHER PRESETS",
-    "============================================================================*/",
-    "#if (FXAA_QUALITY_PRESET == 20)",
-    "    #define FXAA_QUALITY_PS 3",
-    "    #define FXAA_QUALITY_P0 1.5",
-    "    #define FXAA_QUALITY_P1 2.0",
-    "    #define FXAA_QUALITY_P2 8.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 21)",
-    "    #define FXAA_QUALITY_PS 4",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 2.0",
-    "    #define FXAA_QUALITY_P3 8.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 22)",
-    "    #define FXAA_QUALITY_PS 5",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 2.0",
-    "    #define FXAA_QUALITY_P3 2.0",
-    "    #define FXAA_QUALITY_P4 8.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 23)",
-    "    #define FXAA_QUALITY_PS 6",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 2.0",
-    "    #define FXAA_QUALITY_P3 2.0",
-    "    #define FXAA_QUALITY_P4 2.0",
-    "    #define FXAA_QUALITY_P5 8.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 24)",
-    "    #define FXAA_QUALITY_PS 7",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 2.0",
-    "    #define FXAA_QUALITY_P3 2.0",
-    "    #define FXAA_QUALITY_P4 2.0",
-    "    #define FXAA_QUALITY_P5 3.0",
-    "    #define FXAA_QUALITY_P6 8.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 25)",
-    "    #define FXAA_QUALITY_PS 8",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 2.0",
-    "    #define FXAA_QUALITY_P3 2.0",
-    "    #define FXAA_QUALITY_P4 2.0",
-    "    #define FXAA_QUALITY_P5 2.0",
-    "    #define FXAA_QUALITY_P6 4.0",
-    "    #define FXAA_QUALITY_P7 8.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 26)",
-    "    #define FXAA_QUALITY_PS 9",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 2.0",
-    "    #define FXAA_QUALITY_P3 2.0",
-    "    #define FXAA_QUALITY_P4 2.0",
-    "    #define FXAA_QUALITY_P5 2.0",
-    "    #define FXAA_QUALITY_P6 2.0",
-    "    #define FXAA_QUALITY_P7 4.0",
-    "    #define FXAA_QUALITY_P8 8.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 27)",
-    "    #define FXAA_QUALITY_PS 10",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 2.0",
-    "    #define FXAA_QUALITY_P3 2.0",
-    "    #define FXAA_QUALITY_P4 2.0",
-    "    #define FXAA_QUALITY_P5 2.0",
-    "    #define FXAA_QUALITY_P6 2.0",
-    "    #define FXAA_QUALITY_P7 2.0",
-    "    #define FXAA_QUALITY_P8 4.0",
-    "    #define FXAA_QUALITY_P9 8.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 28)",
-    "    #define FXAA_QUALITY_PS 11",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 2.0",
-    "    #define FXAA_QUALITY_P3 2.0",
-    "    #define FXAA_QUALITY_P4 2.0",
-    "    #define FXAA_QUALITY_P5 2.0",
-    "    #define FXAA_QUALITY_P6 2.0",
-    "    #define FXAA_QUALITY_P7 2.0",
-    "    #define FXAA_QUALITY_P8 2.0",
-    "    #define FXAA_QUALITY_P9 4.0",
-    "    #define FXAA_QUALITY_P10 8.0",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_QUALITY_PRESET == 29)",
-    "    #define FXAA_QUALITY_PS 12",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.5",
-    "    #define FXAA_QUALITY_P2 2.0",
-    "    #define FXAA_QUALITY_P3 2.0",
-    "    #define FXAA_QUALITY_P4 2.0",
-    "    #define FXAA_QUALITY_P5 2.0",
-    "    #define FXAA_QUALITY_P6 2.0",
-    "    #define FXAA_QUALITY_P7 2.0",
-    "    #define FXAA_QUALITY_P8 2.0",
-    "    #define FXAA_QUALITY_P9 2.0",
-    "    #define FXAA_QUALITY_P10 4.0",
-    "    #define FXAA_QUALITY_P11 8.0",
-    "#endif",
-    "",
-    "/*============================================================================",
-    "                     FXAA QUALITY - EXTREME QUALITY",
-    "============================================================================*/",
-    "#if (FXAA_QUALITY_PRESET == 39)",
-    "    #define FXAA_QUALITY_PS 12",
-    "    #define FXAA_QUALITY_P0 1.0",
-    "    #define FXAA_QUALITY_P1 1.0",
-    "    #define FXAA_QUALITY_P2 1.0",
-    "    #define FXAA_QUALITY_P3 1.0",
-    "    #define FXAA_QUALITY_P4 1.0",
-    "    #define FXAA_QUALITY_P5 1.5",
-    "    #define FXAA_QUALITY_P6 2.0",
-    "    #define FXAA_QUALITY_P7 2.0",
-    "    #define FXAA_QUALITY_P8 2.0",
-    "    #define FXAA_QUALITY_P9 2.0",
-    "    #define FXAA_QUALITY_P10 4.0",
-    "    #define FXAA_QUALITY_P11 8.0",
-    "#endif",
-    "",
-    "",
-    "",
-    "/*============================================================================",
-    "",
-    "                                API PORTING",
-    "",
-    "============================================================================*/",
-    "#if (FXAA_GLSL_100 == 1) || (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)",
-    "    #define FxaaBool bool",
-    "    #define FxaaDiscard discard",
-    "    #define FxaaFloat float",
-    "    #define FxaaFloat2 vec2",
-    "    #define FxaaFloat3 vec3",
-    "    #define FxaaFloat4 vec4",
-    "    #define FxaaHalf float",
-    "    #define FxaaHalf2 vec2",
-    "    #define FxaaHalf3 vec3",
-    "    #define FxaaHalf4 vec4",
-    "    #define FxaaInt2 ivec2",
-    "    #define FxaaSat(x) clamp(x, 0.0, 1.0)",
-    "    #define FxaaTex sampler2D",
-    "#else",
-    "    #define FxaaBool bool",
-    "    #define FxaaDiscard clip(-1)",
-    "    #define FxaaFloat float",
-    "    #define FxaaFloat2 float2",
-    "    #define FxaaFloat3 float3",
-    "    #define FxaaFloat4 float4",
-    "    #define FxaaHalf half",
-    "    #define FxaaHalf2 half2",
-    "    #define FxaaHalf3 half3",
-    "    #define FxaaHalf4 half4",
-    "    #define FxaaSat(x) saturate(x)",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_GLSL_100 == 1)",
-    "  #define FxaaTexTop(t, p) texture2D(t, p, 0.0)",
-    "  #define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), 0.0)",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_GLSL_120 == 1)",
-    "    // Requires,",
-    "    //  #version 120",
-    "    // And at least,",
-    "    //  #extension GL_EXT_gpu_shader4 : enable",
-    "    //  (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)",
-    "    #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)",
-    "    #if (FXAA_FAST_PIXEL_OFFSET == 1)",
-    "        #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)",
-    "    #else",
-    "        #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)",
-    "    #endif",
-    "    #if (FXAA_GATHER4_ALPHA == 1)",
-    "        // use #extension GL_ARB_gpu_shader5 : enable",
-    "        #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)",
-    "        #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)",
-    "        #define FxaaTexGreen4(t, p) textureGather(t, p, 1)",
-    "        #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)",
-    "    #endif",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_GLSL_130 == 1)",
-    '    // Requires "#version 130" or better',
-    "    #define FxaaTexTop(t, p) textureLod(t, p, 0.0)",
-    "    #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)",
-    "    #if (FXAA_GATHER4_ALPHA == 1)",
-    "        // use #extension GL_ARB_gpu_shader5 : enable",
-    "        #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)",
-    "        #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)",
-    "        #define FxaaTexGreen4(t, p) textureGather(t, p, 1)",
-    "        #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)",
-    "    #endif",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_HLSL_3 == 1)",
-    "    #define FxaaInt2 float2",
-    "    #define FxaaTex sampler2D",
-    "    #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))",
-    "    #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_HLSL_4 == 1)",
-    "    #define FxaaInt2 int2",
-    "    struct FxaaTex { SamplerState smpl; Texture2D tex; };",
-    "    #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)",
-    "    #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)",
-    "#endif",
-    "/*--------------------------------------------------------------------------*/",
-    "#if (FXAA_HLSL_5 == 1)",
-    "    #define FxaaInt2 int2",
-    "    struct FxaaTex { SamplerState smpl; Texture2D tex; };",
-    "    #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)",
-    "    #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)",
-    "    #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)",
-    "    #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)",
-    "    #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)",
-    "    #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)",
-    "#endif",
-    "",
-    "",
-    "/*============================================================================",
-    "                   GREEN AS LUMA OPTION SUPPORT FUNCTION",
-    "============================================================================*/",
-    "#if (FXAA_GREEN_AS_LUMA == 0)",
-    "    FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }",
-    "#else",
-    "    FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }",
-    "#endif",
-    "",
-    "",
-    "",
-    "",
-    "/*============================================================================",
-    "",
-    "                             FXAA3 QUALITY - PC",
-    "",
-    "============================================================================*/",
-    "#if (FXAA_PC == 1)",
-    "/*--------------------------------------------------------------------------*/",
-    "FxaaFloat4 FxaaPixelShader(",
-    "    //",
-    "    // Use noperspective interpolation here (turn off perspective interpolation).",
-    "    // {xy} = center of pixel",
-    "    FxaaFloat2 pos,",
-    "    //",
-    "    // Used only for FXAA Console, and not used on the 360 version.",
-    "    // Use noperspective interpolation here (turn off perspective interpolation).",
-    "    // {xy_} = upper left of pixel",
-    "    // {_zw} = lower right of pixel",
-    "    FxaaFloat4 fxaaConsolePosPos,",
-    "    //",
-    "    // Input color texture.",
-    "    // {rgb_} = color in linear or perceptual color space",
-    "    // if (FXAA_GREEN_AS_LUMA == 0)",
-    "    //     {__a} = luma in perceptual color space (not linear)",
-    "    FxaaTex tex,",
-    "    //",
-    "    // Only used on the optimized 360 version of FXAA Console.",
-    '    // For everything but 360, just use the same input here as for "tex".',
-    "    // For 360, same texture, just alias with a 2nd sampler.",
-    "    // This sampler needs to have an exponent bias of -1.",
-    "    FxaaTex fxaaConsole360TexExpBiasNegOne,",
-    "    //",
-    "    // Only used on the optimized 360 version of FXAA Console.",
-    '    // For everything but 360, just use the same input here as for "tex".',
-    "    // For 360, same texture, just alias with a 3nd sampler.",
-    "    // This sampler needs to have an exponent bias of -2.",
-    "    FxaaTex fxaaConsole360TexExpBiasNegTwo,",
-    "    //",
-    "    // Only used on FXAA Quality.",
-    "    // This must be from a constant/uniform.",
-    "    // {x_} = 1.0/screenWidthInPixels",
-    "    // {_y} = 1.0/screenHeightInPixels",
-    "    FxaaFloat2 fxaaQualityRcpFrame,",
-    "    //",
-    "    // Only used on FXAA Console.",
-    "    // This must be from a constant/uniform.",
-    "    // This effects sub-pixel AA quality and inversely sharpness.",
-    "    //   Where N ranges between,",
-    "    //     N = 0.50 (default)",
-    "    //     N = 0.33 (sharper)",
-    "    // {x__} = -N/screenWidthInPixels",
-    "    // {_y_} = -N/screenHeightInPixels",
-    "    // {_z_} =  N/screenWidthInPixels",
-    "    // {__w} =  N/screenHeightInPixels",
-    "    FxaaFloat4 fxaaConsoleRcpFrameOpt,",
-    "    //",
-    "    // Only used on FXAA Console.",
-    "    // Not used on 360, but used on PS3 and PC.",
-    "    // This must be from a constant/uniform.",
-    "    // {x__} = -2.0/screenWidthInPixels",
-    "    // {_y_} = -2.0/screenHeightInPixels",
-    "    // {_z_} =  2.0/screenWidthInPixels",
-    "    // {__w} =  2.0/screenHeightInPixels",
-    "    FxaaFloat4 fxaaConsoleRcpFrameOpt2,",
-    "    //",
-    "    // Only used on FXAA Console.",
-    "    // Only used on 360 in place of fxaaConsoleRcpFrameOpt2.",
-    "    // This must be from a constant/uniform.",
-    "    // {x__} =  8.0/screenWidthInPixels",
-    "    // {_y_} =  8.0/screenHeightInPixels",
-    "    // {_z_} = -4.0/screenWidthInPixels",
-    "    // {__w} = -4.0/screenHeightInPixels",
-    "    FxaaFloat4 fxaaConsole360RcpFrameOpt2,",
-    "    //",
-    "    // Only used on FXAA Quality.",
-    "    // This used to be the FXAA_QUALITY_SUBPIX define.",
-    "    // It is here now to allow easier tuning.",
-    "    // Choose the amount of sub-pixel aliasing removal.",
-    "    // This can effect sharpness.",
-    "    //   1.00 - upper limit (softer)",
-    "    //   0.75 - default amount of filtering",
-    "    //   0.50 - lower limit (sharper, less sub-pixel aliasing removal)",
-    "    //   0.25 - almost off",
-    "    //   0.00 - completely off",
-    "    FxaaFloat fxaaQualitySubpix,",
-    "    //",
-    "    // Only used on FXAA Quality.",
-    "    // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.",
-    "    // It is here now to allow easier tuning.",
-    "    // The minimum amount of local contrast required to apply algorithm.",
-    "    //   0.333 - too little (faster)",
-    "    //   0.250 - low quality",
-    "    //   0.166 - default",
-    "    //   0.125 - high quality",
-    "    //   0.063 - overkill (slower)",
-    "    FxaaFloat fxaaQualityEdgeThreshold,",
-    "    //",
-    "    // Only used on FXAA Quality.",
-    "    // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.",
-    "    // It is here now to allow easier tuning.",
-    "    // Trims the algorithm from processing darks.",
-    "    //   0.0833 - upper limit (default, the start of visible unfiltered edges)",
-    "    //   0.0625 - high quality (faster)",
-    "    //   0.0312 - visible limit (slower)",
-    "    // Special notes when using FXAA_GREEN_AS_LUMA,",
-    "    //   Likely want to set this to zero.",
-    "    //   As colors that are mostly not-green",
-    "    //   will appear very dark in the green channel!",
-    "    //   Tune by looking at mostly non-green content,",
-    "    //   then start at zero and increase until aliasing is a problem.",
-    "    FxaaFloat fxaaQualityEdgeThresholdMin,",
-    "    //",
-    "    // Only used on FXAA Console.",
-    "    // This used to be the FXAA_CONSOLE_EDGE_SHARPNESS define.",
-    "    // It is here now to allow easier tuning.",
-    "    // This does not effect PS3, as this needs to be compiled in.",
-    "    //   Use FXAA_CONSOLE_PS3_EDGE_SHARPNESS for PS3.",
-    "    //   Due to the PS3 being ALU bound,",
-    "    //   there are only three safe values here: 2 and 4 and 8.",
-    "    //   These options use the shaders ability to a free *|/ by 2|4|8.",
-    "    // For all other platforms can be a non-power of two.",
-    "    //   8.0 is sharper (default!!!)",
-    "    //   4.0 is softer",
-    "    //   2.0 is really soft (good only for vector graphics inputs)",
-    "    FxaaFloat fxaaConsoleEdgeSharpness,",
-    "    //",
-    "    // Only used on FXAA Console.",
-    "    // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD define.",
-    "    // It is here now to allow easier tuning.",
-    "    // This does not effect PS3, as this needs to be compiled in.",
-    "    //   Use FXAA_CONSOLE_PS3_EDGE_THRESHOLD for PS3.",
-    "    //   Due to the PS3 being ALU bound,",
-    "    //   there are only two safe values here: 1/4 and 1/8.",
-    "    //   These options use the shaders ability to a free *|/ by 2|4|8.",
-    "    // The console setting has a different mapping than the quality setting.",
-    "    // Other platforms can use other values.",
-    "    //   0.125 leaves less aliasing, but is softer (default!!!)",
-    "    //   0.25 leaves more aliasing, and is sharper",
-    "    FxaaFloat fxaaConsoleEdgeThreshold,",
-    "    //",
-    "    // Only used on FXAA Console.",
-    "    // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD_MIN define.",
-    "    // It is here now to allow easier tuning.",
-    "    // Trims the algorithm from processing darks.",
-    "    // The console setting has a different mapping than the quality setting.",
-    "    // This only applies when FXAA_EARLY_EXIT is 1.",
-    "    // This does not apply to PS3,",
-    "    // PS3 was simplified to avoid more shader instructions.",
-    "    //   0.06 - faster but more aliasing in darks",
-    "    //   0.05 - default",
-    "    //   0.04 - slower and less aliasing in darks",
-    "    // Special notes when using FXAA_GREEN_AS_LUMA,",
-    "    //   Likely want to set this to zero.",
-    "    //   As colors that are mostly not-green",
-    "    //   will appear very dark in the green channel!",
-    "    //   Tune by looking at mostly non-green content,",
-    "    //   then start at zero and increase until aliasing is a problem.",
-    "    FxaaFloat fxaaConsoleEdgeThresholdMin,",
-    "    //",
-    "    // Extra constants for 360 FXAA Console only.",
-    "    // Use zeros or anything else for other platforms.",
-    "    // These must be in physical constant registers and NOT immediates.",
-    "    // Immediates will result in compiler un-optimizing.",
-    "    // {xyzw} = float4(1.0, -1.0, 0.25, -0.25)",
-    "    FxaaFloat4 fxaaConsole360ConstDir",
-    ") {",
-    "/*--------------------------------------------------------------------------*/",
-    "    FxaaFloat2 posM;",
-    "    posM.x = pos.x;",
-    "    posM.y = pos.y;",
-    "    #if (FXAA_GATHER4_ALPHA == 1)",
-    "        #if (FXAA_DISCARD == 0)",
-    "            FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);",
-    "            #if (FXAA_GREEN_AS_LUMA == 0)",
-    "                #define lumaM rgbyM.w",
-    "            #else",
-    "                #define lumaM rgbyM.y",
-    "            #endif",
-    "        #endif",
-    "        #if (FXAA_GREEN_AS_LUMA == 0)",
-    "            FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);",
-    "            FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));",
-    "        #else",
-    "            FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);",
-    "            FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));",
-    "        #endif",
-    "        #if (FXAA_DISCARD == 1)",
-    "            #define lumaM luma4A.w",
-    "        #endif",
-    "        #define lumaE luma4A.z",
-    "        #define lumaS luma4A.x",
-    "        #define lumaSE luma4A.y",
-    "        #define lumaNW luma4B.w",
-    "        #define lumaN luma4B.z",
-    "        #define lumaW luma4B.x",
-    "    #else",
-    "        FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);",
-    "        #if (FXAA_GREEN_AS_LUMA == 0)",
-    "            #define lumaM rgbyM.w",
-    "        #else",
-    "            #define lumaM rgbyM.y",
-    "        #endif",
-    "        #if (FXAA_GLSL_100 == 1)",
-    "          FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0, 1.0), fxaaQualityRcpFrame.xy));",
-    "          FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 0.0), fxaaQualityRcpFrame.xy));",
-    "          FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0,-1.0), fxaaQualityRcpFrame.xy));",
-    "          FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 0.0), fxaaQualityRcpFrame.xy));",
-    "        #else",
-    "          FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));",
-    "          FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));",
-    "          FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));",
-    "          FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));",
-    "        #endif",
-    "    #endif",
-    "/*--------------------------------------------------------------------------*/",
-    "    FxaaFloat maxSM = max(lumaS, lumaM);",
-    "    FxaaFloat minSM = min(lumaS, lumaM);",
-    "    FxaaFloat maxESM = max(lumaE, maxSM);",
-    "    FxaaFloat minESM = min(lumaE, minSM);",
-    "    FxaaFloat maxWN = max(lumaN, lumaW);",
-    "    FxaaFloat minWN = min(lumaN, lumaW);",
-    "    FxaaFloat rangeMax = max(maxWN, maxESM);",
-    "    FxaaFloat rangeMin = min(minWN, minESM);",
-    "    FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;",
-    "    FxaaFloat range = rangeMax - rangeMin;",
-    "    FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);",
-    "    FxaaBool earlyExit = range < rangeMaxClamped;",
-    "/*--------------------------------------------------------------------------*/",
-    "    if(earlyExit)",
-    "        #if (FXAA_DISCARD == 1)",
-    "            FxaaDiscard;",
-    "        #else",
-    "            return rgbyM;",
-    "        #endif",
-    "/*--------------------------------------------------------------------------*/",
-    "    #if (FXAA_GATHER4_ALPHA == 0)",
-    "        #if (FXAA_GLSL_100 == 1)",
-    "          FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0,-1.0), fxaaQualityRcpFrame.xy));",
-    "          FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 1.0), fxaaQualityRcpFrame.xy));",
-    "          FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0,-1.0), fxaaQualityRcpFrame.xy));",
-    "          FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 1.0), fxaaQualityRcpFrame.xy));",
-    "        #else",
-    "          FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));",
-    "          FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));",
-    "          FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));",
-    "          FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));",
-    "        #endif",
-    "    #else",
-    "        FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));",
-    "        FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));",
-    "    #endif",
-    "/*--------------------------------------------------------------------------*/",
-    "    FxaaFloat lumaNS = lumaN + lumaS;",
-    "    FxaaFloat lumaWE = lumaW + lumaE;",
-    "    FxaaFloat subpixRcpRange = 1.0/range;",
-    "    FxaaFloat subpixNSWE = lumaNS + lumaWE;",
-    "    FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;",
-    "    FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;",
-    "/*--------------------------------------------------------------------------*/",
-    "    FxaaFloat lumaNESE = lumaNE + lumaSE;",
-    "    FxaaFloat lumaNWNE = lumaNW + lumaNE;",
-    "    FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;",
-    "    FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;",
-    "/*--------------------------------------------------------------------------*/",
-    "    FxaaFloat lumaNWSW = lumaNW + lumaSW;",
-    "    FxaaFloat lumaSWSE = lumaSW + lumaSE;",
-    "    FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);",
-    "    FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);",
-    "    FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;",
-    "    FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;",
-    "    FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;",
-    "    FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;",
-    "/*--------------------------------------------------------------------------*/",
-    "    FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;",
-    "    FxaaFloat lengthSign = fxaaQualityRcpFrame.x;",
-    "    FxaaBool horzSpan = edgeHorz >= edgeVert;",
-    "    FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;",
-    "/*--------------------------------------------------------------------------*/",
-    "    if(!horzSpan) lumaN = lumaW;",
-    "    if(!horzSpan) lumaS = lumaE;",
-    "    if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;",
-    "    FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;",
-    "/*--------------------------------------------------------------------------*/",
-    "    FxaaFloat gradientN = lumaN - lumaM;",
-    "    FxaaFloat gradientS = lumaS - lumaM;",
-    "    FxaaFloat lumaNN = lumaN + lumaM;",
-    "    FxaaFloat lumaSS = lumaS + lumaM;",
-    "    FxaaBool pairN = abs(gradientN) >= abs(gradientS);",
-    "    FxaaFloat gradient = max(abs(gradientN), abs(gradientS));",
-    "    if(pairN) lengthSign = -lengthSign;",
-    "    FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);",
-    "/*--------------------------------------------------------------------------*/",
-    "    FxaaFloat2 posB;",
-    "    posB.x = posM.x;",
-    "    posB.y = posM.y;",
-    "    FxaaFloat2 offNP;",
-    "    offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;",
-    "    offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;",
-    "    if(!horzSpan) posB.x += lengthSign * 0.5;",
-    "    if( horzSpan) posB.y += lengthSign * 0.5;",
-    "/*--------------------------------------------------------------------------*/",
-    "    FxaaFloat2 posN;",
-    "    posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;",
-    "    posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;",
-    "    FxaaFloat2 posP;",
-    "    posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;",
-    "    posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;",
-    "    FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;",
-    "    FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));",
-    "    FxaaFloat subpixE = subpixC * subpixC;",
-    "    FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));",
-    "/*--------------------------------------------------------------------------*/",
-    "    if(!pairN) lumaNN = lumaSS;",
-    "    FxaaFloat gradientScaled = gradient * 1.0/4.0;",
-    "    FxaaFloat lumaMM = lumaM - lumaNN * 0.5;",
-    "    FxaaFloat subpixF = subpixD * subpixE;",
-    "    FxaaBool lumaMLTZero = lumaMM < 0.0;",
-    "/*--------------------------------------------------------------------------*/",
-    "    lumaEndN -= lumaNN * 0.5;",
-    "    lumaEndP -= lumaNN * 0.5;",
-    "    FxaaBool doneN = abs(lumaEndN) >= gradientScaled;",
-    "    FxaaBool doneP = abs(lumaEndP) >= gradientScaled;",
-    "    if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;",
-    "    if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;",
-    "    FxaaBool doneNP = (!doneN) || (!doneP);",
-    "    if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;",
-    "    if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;",
-    "/*--------------------------------------------------------------------------*/",
-    "    if(doneNP) {",
-    "        if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));",
-    "        if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));",
-    "        if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;",
-    "        if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;",
-    "        doneN = abs(lumaEndN) >= gradientScaled;",
-    "        doneP = abs(lumaEndP) >= gradientScaled;",
-    "        if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;",
-    "        if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;",
-    "        doneNP = (!doneN) || (!doneP);",
-    "        if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;",
-    "        if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;",
-    "/*--------------------------------------------------------------------------*/",
-    "        #if (FXAA_QUALITY_PS > 3)",
-    "        if(doneNP) {",
-    "            if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));",
-    "            if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));",
-    "            if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;",
-    "            if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;",
-    "            doneN = abs(lumaEndN) >= gradientScaled;",
-    "            doneP = abs(lumaEndP) >= gradientScaled;",
-    "            if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;",
-    "            if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;",
-    "            doneNP = (!doneN) || (!doneP);",
-    "            if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;",
-    "            if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;",
-    "/*--------------------------------------------------------------------------*/",
-    "            #if (FXAA_QUALITY_PS > 4)",
-    "            if(doneNP) {",
-    "                if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));",
-    "                if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));",
-    "                if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;",
-    "                if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;",
-    "                doneN = abs(lumaEndN) >= gradientScaled;",
-    "                doneP = abs(lumaEndP) >= gradientScaled;",
-    "                if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;",
-    "                if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;",
-    "                doneNP = (!doneN) || (!doneP);",
-    "                if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;",
-    "                if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;",
-    "/*--------------------------------------------------------------------------*/",
-    "                #if (FXAA_QUALITY_PS > 5)",
-    "                if(doneNP) {",
-    "                    if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));",
-    "                    if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));",
-    "                    if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;",
-    "                    if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;",
-    "                    doneN = abs(lumaEndN) >= gradientScaled;",
-    "                    doneP = abs(lumaEndP) >= gradientScaled;",
-    "                    if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;",
-    "                    if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;",
-    "                    doneNP = (!doneN) || (!doneP);",
-    "                    if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;",
-    "                    if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;",
-    "/*--------------------------------------------------------------------------*/",
-    "                    #if (FXAA_QUALITY_PS > 6)",
-    "                    if(doneNP) {",
-    "                        if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));",
-    "                        if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));",
-    "                        if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;",
-    "                        if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;",
-    "                        doneN = abs(lumaEndN) >= gradientScaled;",
-    "                        doneP = abs(lumaEndP) >= gradientScaled;",
-    "                        if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;",
-    "                        if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;",
-    "                        doneNP = (!doneN) || (!doneP);",
-    "                        if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;",
-    "                        if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;",
-    "/*--------------------------------------------------------------------------*/",
-    "                        #if (FXAA_QUALITY_PS > 7)",
-    "                        if(doneNP) {",
-    "                            if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));",
-    "                            if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));",
-    "                            if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;",
-    "                            if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;",
-    "                            doneN = abs(lumaEndN) >= gradientScaled;",
-    "                            doneP = abs(lumaEndP) >= gradientScaled;",
-    "                            if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;",
-    "                            if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;",
-    "                            doneNP = (!doneN) || (!doneP);",
-    "                            if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;",
-    "                            if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;",
-    "/*--------------------------------------------------------------------------*/",
-    "    #if (FXAA_QUALITY_PS > 8)",
-    "    if(doneNP) {",
-    "        if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));",
-    "        if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));",
-    "        if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;",
-    "        if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;",
-    "        doneN = abs(lumaEndN) >= gradientScaled;",
-    "        doneP = abs(lumaEndP) >= gradientScaled;",
-    "        if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;",
-    "        if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;",
-    "        doneNP = (!doneN) || (!doneP);",
-    "        if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;",
-    "        if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;",
-    "/*--------------------------------------------------------------------------*/",
-    "        #if (FXAA_QUALITY_PS > 9)",
-    "        if(doneNP) {",
-    "            if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));",
-    "            if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));",
-    "            if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;",
-    "            if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;",
-    "            doneN = abs(lumaEndN) >= gradientScaled;",
-    "            doneP = abs(lumaEndP) >= gradientScaled;",
-    "            if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;",
-    "            if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;",
-    "            doneNP = (!doneN) || (!doneP);",
-    "            if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;",
-    "            if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;",
-    "/*--------------------------------------------------------------------------*/",
-    "            #if (FXAA_QUALITY_PS > 10)",
-    "            if(doneNP) {",
-    "                if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));",
-    "                if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));",
-    "                if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;",
-    "                if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;",
-    "                doneN = abs(lumaEndN) >= gradientScaled;",
-    "                doneP = abs(lumaEndP) >= gradientScaled;",
-    "                if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;",
-    "                if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;",
-    "                doneNP = (!doneN) || (!doneP);",
-    "                if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;",
-    "                if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;",
-    "/*--------------------------------------------------------------------------*/",
-    "                #if (FXAA_QUALITY_PS > 11)",
-    "                if(doneNP) {",
-    "                    if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));",
-    "                    if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));",
-    "                    if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;",
-    "                    if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;",
-    "                    doneN = abs(lumaEndN) >= gradientScaled;",
-    "                    doneP = abs(lumaEndP) >= gradientScaled;",
-    "                    if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;",
-    "                    if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;",
-    "                    doneNP = (!doneN) || (!doneP);",
-    "                    if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;",
-    "                    if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;",
-    "/*--------------------------------------------------------------------------*/",
-    "                    #if (FXAA_QUALITY_PS > 12)",
-    "                    if(doneNP) {",
-    "                        if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));",
-    "                        if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));",
-    "                        if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;",
-    "                        if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;",
-    "                        doneN = abs(lumaEndN) >= gradientScaled;",
-    "                        doneP = abs(lumaEndP) >= gradientScaled;",
-    "                        if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;",
-    "                        if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;",
-    "                        doneNP = (!doneN) || (!doneP);",
-    "                        if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;",
-    "                        if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;",
-    "/*--------------------------------------------------------------------------*/",
-    "                    }",
-    "                    #endif",
-    "/*--------------------------------------------------------------------------*/",
-    "                }",
-    "                #endif",
-    "/*--------------------------------------------------------------------------*/",
-    "            }",
-    "            #endif",
-    "/*--------------------------------------------------------------------------*/",
-    "        }",
-    "        #endif",
-    "/*--------------------------------------------------------------------------*/",
-    "    }",
-    "    #endif",
-    "/*--------------------------------------------------------------------------*/",
-    "                        }",
-    "                        #endif",
-    "/*--------------------------------------------------------------------------*/",
-    "                    }",
-    "                    #endif",
-    "/*--------------------------------------------------------------------------*/",
-    "                }",
-    "                #endif",
-    "/*--------------------------------------------------------------------------*/",
-    "            }",
-    "            #endif",
-    "/*--------------------------------------------------------------------------*/",
-    "        }",
-    "        #endif",
-    "/*--------------------------------------------------------------------------*/",
-    "    }",
-    "/*--------------------------------------------------------------------------*/",
-    "    FxaaFloat dstN = posM.x - posN.x;",
-    "    FxaaFloat dstP = posP.x - posM.x;",
-    "    if(!horzSpan) dstN = posM.y - posN.y;",
-    "    if(!horzSpan) dstP = posP.y - posM.y;",
-    "/*--------------------------------------------------------------------------*/",
-    "    FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;",
-    "    FxaaFloat spanLength = (dstP + dstN);",
-    "    FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;",
-    "    FxaaFloat spanLengthRcp = 1.0/spanLength;",
-    "/*--------------------------------------------------------------------------*/",
-    "    FxaaBool directionN = dstN < dstP;",
-    "    FxaaFloat dst = min(dstN, dstP);",
-    "    FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;",
-    "    FxaaFloat subpixG = subpixF * subpixF;",
-    "    FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;",
-    "    FxaaFloat subpixH = subpixG * fxaaQualitySubpix;",
-    "/*--------------------------------------------------------------------------*/",
-    "    FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;",
-    "    FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);",
-    "    if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;",
-    "    if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;",
-    "    #if (FXAA_DISCARD == 1)",
-    "        return FxaaTexTop(tex, posM);",
-    "    #else",
-    "        return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);",
-    "    #endif",
-    "}",
-    "/*==========================================================================*/",
-    "#endif",
-    "",
-    "void main() {",
-    "  gl_FragColor = FxaaPixelShader(",
-    "    vUv,",
-    "    vec4(0.0),",
-    "    tDiffuse,",
-    "    tDiffuse,",
-    "    tDiffuse,",
-    "    resolution,",
-    "    vec4(0.0),",
-    "    vec4(0.0),",
-    "    vec4(0.0),",
-    "    0.75,",
-    "    0.166,",
-    "    0.0833,",
-    "    0.0,",
-    "    0.0,",
-    "    0.0,",
-    "    vec4(0.0)",
-    "  );",
-    "",
-    "  // TODO avoid querying texture twice for same texel",
-    "  gl_FragColor.a = texture2D(tDiffuse, vUv).a;",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/FocusShader.js
-const FocusShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    screenWidth: { value: 1024 },
-    screenHeight: { value: 1024 },
-    sampleDistance: { value: 0.94 },
-    waveFactor: { value: 125e-5 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform float screenWidth;",
-    "uniform float screenHeight;",
-    "uniform float sampleDistance;",
-    "uniform float waveFactor;",
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 color, org, tmp, add;",
-    "	float sample_dist, f;",
-    "	vec2 vin;",
-    "	vec2 uv = vUv;",
-    "	add = color = org = texture2D( tDiffuse, uv );",
-    "	vin = ( uv - vec2( 0.5 ) ) * vec2( 1.4 );",
-    "	sample_dist = dot( vin, vin ) * 2.0;",
-    "	f = ( waveFactor * 100.0 + sample_dist ) * sampleDistance * 4.0;",
-    "	vec2 sampleSize = vec2(  1.0 / screenWidth, 1.0 / screenHeight ) * vec2( f );",
-    "	add += tmp = texture2D( tDiffuse, uv + vec2( 0.111964, 0.993712 ) * sampleSize );",
-    "	if( tmp.b < color.b ) color = tmp;",
-    "	add += tmp = texture2D( tDiffuse, uv + vec2( 0.846724, 0.532032 ) * sampleSize );",
-    "	if( tmp.b < color.b ) color = tmp;",
-    "	add += tmp = texture2D( tDiffuse, uv + vec2( 0.943883, -0.330279 ) * sampleSize );",
-    "	if( tmp.b < color.b ) color = tmp;",
-    "	add += tmp = texture2D( tDiffuse, uv + vec2( 0.330279, -0.943883 ) * sampleSize );",
-    "	if( tmp.b < color.b ) color = tmp;",
-    "	add += tmp = texture2D( tDiffuse, uv + vec2( -0.532032, -0.846724 ) * sampleSize );",
-    "	if( tmp.b < color.b ) color = tmp;",
-    "	add += tmp = texture2D( tDiffuse, uv + vec2( -0.993712, -0.111964 ) * sampleSize );",
-    "	if( tmp.b < color.b ) color = tmp;",
-    "	add += tmp = texture2D( tDiffuse, uv + vec2( -0.707107, 0.707107 ) * sampleSize );",
-    "	if( tmp.b < color.b ) color = tmp;",
-    "	color = color * vec4( 2.0 ) - ( add / vec4( 8.0 ) );",
-    "	color = color + ( add / vec4( 8.0 ) - color ) * ( vec4( 1.0 ) - vec4( sample_dist * 0.5 ) );",
-    "	gl_FragColor = vec4( color.rgb * color.rgb * vec3( 0.95 ) + color.rgb, 1.0 );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/FreiChenShader.js
-
-const FreiChenShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    aspect: { value: /* @__PURE__ */ new three_module.Vector2(512, 512) }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "uniform vec2 aspect;",
-    "vec2 texel = vec2(1.0 / aspect.x, 1.0 / aspect.y);",
-    "mat3 G[9];",
-    // hard coded matrix values!!!! as suggested in https://github.com/neilmendoza/ofxPostProcessing/blob/master/src/EdgePass.cpp#L45
-    "const mat3 g0 = mat3( 0.3535533845424652, 0, -0.3535533845424652, 0.5, 0, -0.5, 0.3535533845424652, 0, -0.3535533845424652 );",
-    "const mat3 g1 = mat3( 0.3535533845424652, 0.5, 0.3535533845424652, 0, 0, 0, -0.3535533845424652, -0.5, -0.3535533845424652 );",
-    "const mat3 g2 = mat3( 0, 0.3535533845424652, -0.5, -0.3535533845424652, 0, 0.3535533845424652, 0.5, -0.3535533845424652, 0 );",
-    "const mat3 g3 = mat3( 0.5, -0.3535533845424652, 0, -0.3535533845424652, 0, 0.3535533845424652, 0, 0.3535533845424652, -0.5 );",
-    "const mat3 g4 = mat3( 0, -0.5, 0, 0.5, 0, 0.5, 0, -0.5, 0 );",
-    "const mat3 g5 = mat3( -0.5, 0, 0.5, 0, 0, 0, 0.5, 0, -0.5 );",
-    "const mat3 g6 = mat3( 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.6666666865348816, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204 );",
-    "const mat3 g7 = mat3( -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, 0.6666666865348816, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408 );",
-    "const mat3 g8 = mat3( 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408 );",
-    "void main(void)",
-    "{",
-    "	G[0] = g0,",
-    "	G[1] = g1,",
-    "	G[2] = g2,",
-    "	G[3] = g3,",
-    "	G[4] = g4,",
-    "	G[5] = g5,",
-    "	G[6] = g6,",
-    "	G[7] = g7,",
-    "	G[8] = g8;",
-    "	mat3 I;",
-    "	float cnv[9];",
-    "	vec3 sample;",
-    /* fetch the 3x3 neighbourhood and use the RGB vector's length as intensity value */
-    "	for (float i=0.0; i<3.0; i++) {",
-    "		for (float j=0.0; j<3.0; j++) {",
-    "			sample = texture2D(tDiffuse, vUv + texel * vec2(i-1.0,j-1.0) ).rgb;",
-    "			I[int(i)][int(j)] = length(sample);",
-    "		}",
-    "	}",
-    /* calculate the convolution values for all the masks */
-    "	for (int i=0; i<9; i++) {",
-    "		float dp3 = dot(G[i][0], I[0]) + dot(G[i][1], I[1]) + dot(G[i][2], I[2]);",
-    "		cnv[i] = dp3 * dp3;",
-    "	}",
-    "	float M = (cnv[0] + cnv[1]) + (cnv[2] + cnv[3]);",
-    "	float S = (cnv[4] + cnv[5]) + (cnv[6] + cnv[7]) + (cnv[8] + M);",
-    "	gl_FragColor = vec4(vec3(sqrt(M/S)), 1.0);",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/FresnelShader.js
-const FresnelShader = {
-  uniforms: {
-    mRefractionRatio: { value: 1.02 },
-    mFresnelBias: { value: 0.1 },
-    mFresnelPower: { value: 2 },
-    mFresnelScale: { value: 1 },
-    tCube: { value: null }
-  },
-  vertexShader: [
-    "uniform float mRefractionRatio;",
-    "uniform float mFresnelBias;",
-    "uniform float mFresnelScale;",
-    "uniform float mFresnelPower;",
-    "varying vec3 vReflect;",
-    "varying vec3 vRefract[3];",
-    "varying float vReflectionFactor;",
-    "void main() {",
-    "	vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",
-    "	vec4 worldPosition = modelMatrix * vec4( position, 1.0 );",
-    "	vec3 worldNormal = normalize( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal );",
-    "	vec3 I = worldPosition.xyz - cameraPosition;",
-    "	vReflect = reflect( I, worldNormal );",
-    "	vRefract[0] = refract( normalize( I ), worldNormal, mRefractionRatio );",
-    "	vRefract[1] = refract( normalize( I ), worldNormal, mRefractionRatio * 0.99 );",
-    "	vRefract[2] = refract( normalize( I ), worldNormal, mRefractionRatio * 0.98 );",
-    "	vReflectionFactor = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( I ), worldNormal ), mFresnelPower );",
-    "	gl_Position = projectionMatrix * mvPosition;",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform samplerCube tCube;",
-    "varying vec3 vReflect;",
-    "varying vec3 vRefract[3];",
-    "varying float vReflectionFactor;",
-    "void main() {",
-    "	vec4 reflectedColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );",
-    "	vec4 refractedColor = vec4( 1.0 );",
-    "	refractedColor.r = textureCube( tCube, vec3( -vRefract[0].x, vRefract[0].yz ) ).r;",
-    "	refractedColor.g = textureCube( tCube, vec3( -vRefract[1].x, vRefract[1].yz ) ).g;",
-    "	refractedColor.b = textureCube( tCube, vec3( -vRefract[2].x, vRefract[2].yz ) ).b;",
-    "	gl_FragColor = mix( refractedColor, reflectedColor, clamp( vReflectionFactor, 0.0, 1.0 ) );",
-    "}"
-  ].join("\n")
-};
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/shaders/GammaCorrectionShader.js
-var GammaCorrectionShader = __webpack_require__(60809);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/GodRaysShader.js
-
-const GodRaysDepthMaskShader = {
-  uniforms: {
-    tInput: {
-      value: null
-    }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    " vUv = uv;",
-    " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "varying vec2 vUv;",
-    "uniform sampler2D tInput;",
-    "void main() {",
-    "	gl_FragColor = vec4( 1.0 ) - texture2D( tInput, vUv );",
-    "}"
-  ].join("\n")
-};
-const GodRaysGenerateShader = {
-  uniforms: {
-    tInput: {
-      value: null
-    },
-    fStepSize: {
-      value: 1
-    },
-    vSunPositionScreenSpace: {
-      value: /* @__PURE__ */ new three_module.Vector3()
-    }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    " vUv = uv;",
-    " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "#define TAPS_PER_PASS 6.0",
-    "varying vec2 vUv;",
-    "uniform sampler2D tInput;",
-    "uniform vec3 vSunPositionScreenSpace;",
-    "uniform float fStepSize;",
-    // filter step size
-    "void main() {",
-    // delta from current pixel to "sun" position
-    "	vec2 delta = vSunPositionScreenSpace.xy - vUv;",
-    "	float dist = length( delta );",
-    // Step vector (uv space)
-    "	vec2 stepv = fStepSize * delta / dist;",
-    // Number of iterations between pixel and sun
-    "	float iters = dist/fStepSize;",
-    "	vec2 uv = vUv.xy;",
-    "	float col = 0.0;",
-    // This breaks ANGLE in Chrome 22
-    //	- see http://code.google.com/p/chromium/issues/detail?id=153105
-    /*
-    		// Unrolling didnt do much on my hardware (ATI Mobility Radeon 3450),
-    		// so i've just left the loop
-    
-    		"for ( float i = 0.0; i < TAPS_PER_PASS; i += 1.0 ) {",
-    
-    		// Accumulate samples, making sure we dont walk past the light source.
-    
-    		// The check for uv.y < 1 would not be necessary with "border" UV wrap
-    		// mode, with a black border color. I don't think this is currently
-    		// exposed by three.js. As a result there might be artifacts when the
-    		// sun is to the left, right or bottom of screen as these cases are
-    		// not specifically handled.
-    
-    		"	col += ( i <= iters && uv.y < 1.0 ? texture2D( tInput, uv ).r : 0.0 );",
-    		"	uv += stepv;",
-    
-    		"}",
-    		*/
-    // Unrolling loop manually makes it work in ANGLE
-    "	float f = min( 1.0, max( vSunPositionScreenSpace.z / 1000.0, 0.0 ) );",
-    // used to fade out godrays
-    "	if ( 0.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;",
-    "	uv += stepv;",
-    "	if ( 1.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;",
-    "	uv += stepv;",
-    "	if ( 2.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;",
-    "	uv += stepv;",
-    "	if ( 3.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;",
-    "	uv += stepv;",
-    "	if ( 4.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;",
-    "	uv += stepv;",
-    "	if ( 5.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;",
-    "	uv += stepv;",
-    // Should technically be dividing by 'iters', but 'TAPS_PER_PASS' smooths out
-    // objectionable artifacts, in particular near the sun position. The side
-    // effect is that the result is darker than it should be around the sun, as
-    // TAPS_PER_PASS is greater than the number of samples actually accumulated.
-    // When the result is inverted (in the shader 'godrays_combine', this produces
-    // a slight bright spot at the position of the sun, even when it is occluded.
-    "	gl_FragColor = vec4( col/TAPS_PER_PASS );",
-    "	gl_FragColor.a = 1.0;",
-    "}"
-  ].join("\n")
-};
-const GodRaysCombineShader = {
-  uniforms: {
-    tColors: {
-      value: null
-    },
-    tGodRays: {
-      value: null
-    },
-    fGodRayIntensity: {
-      value: 0.69
-    }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "varying vec2 vUv;",
-    "uniform sampler2D tColors;",
-    "uniform sampler2D tGodRays;",
-    "uniform float fGodRayIntensity;",
-    "void main() {",
-    // Since THREE.MeshDepthMaterial renders foreground objects white and background
-    // objects black, the god-rays will be white streaks. Therefore value is inverted
-    // before being combined with tColors
-    "	gl_FragColor = texture2D( tColors, vUv ) + fGodRayIntensity * vec4( 1.0 - texture2D( tGodRays, vUv ).r );",
-    "	gl_FragColor.a = 1.0;",
-    "}"
-  ].join("\n")
-};
-const GodRaysFakeSunShader = {
-  uniforms: {
-    vSunPositionScreenSpace: {
-      value: /* @__PURE__ */ new three_module.Vector3()
-    },
-    fAspect: {
-      value: 1
-    },
-    sunColor: {
-      value: /* @__PURE__ */ new three_module.Color(16772608)
-    },
-    bgColor: {
-      value: /* @__PURE__ */ new three_module.Color(0)
-    }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "varying vec2 vUv;",
-    "uniform vec3 vSunPositionScreenSpace;",
-    "uniform float fAspect;",
-    "uniform vec3 sunColor;",
-    "uniform vec3 bgColor;",
-    "void main() {",
-    "	vec2 diff = vUv - vSunPositionScreenSpace.xy;",
-    // Correct for aspect ratio
-    "	diff.x *= fAspect;",
-    "	float prop = clamp( length( diff ) / 0.5, 0.0, 1.0 );",
-    "	prop = 0.35 * pow( 1.0 - prop, 3.0 );",
-    "	gl_FragColor.xyz = ( vSunPositionScreenSpace.z > 0.0 ) ? mix( sunColor, bgColor, 1.0 - prop ) : bgColor;",
-    "	gl_FragColor.w = 1.0;",
-    "}"
-  ].join("\n")
-};
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/shaders/HorizontalBlurShader.js
-var HorizontalBlurShader = __webpack_require__(78466);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/HorizontalTiltShiftShader.js
-const HorizontalTiltShiftShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    h: { value: 1 / 512 },
-    r: { value: 0.35 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform float h;",
-    "uniform float r;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 sum = vec4( 0.0 );",
-    "	float hh = h * abs( r - vUv.y );",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * hh, vUv.y ) ) * 0.051;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * hh, vUv.y ) ) * 0.0918;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * hh, vUv.y ) ) * 0.12245;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * hh, vUv.y ) ) * 0.1531;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * hh, vUv.y ) ) * 0.1531;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * hh, vUv.y ) ) * 0.12245;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * hh, vUv.y ) ) * 0.0918;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * hh, vUv.y ) ) * 0.051;",
-    "	gl_FragColor = sum;",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/HueSaturationShader.js
-const HueSaturationShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    hue: { value: 0 },
-    saturation: { value: 0 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform float hue;",
-    "uniform float saturation;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	gl_FragColor = texture2D( tDiffuse, vUv );",
-    // hue
-    "	float angle = hue * 3.14159265;",
-    "	float s = sin(angle), c = cos(angle);",
-    "	vec3 weights = (vec3(2.0 * c, -sqrt(3.0) * s - c, sqrt(3.0) * s - c) + 1.0) / 3.0;",
-    "	float len = length(gl_FragColor.rgb);",
-    "	gl_FragColor.rgb = vec3(",
-    "		dot(gl_FragColor.rgb, weights.xyz),",
-    "		dot(gl_FragColor.rgb, weights.zxy),",
-    "		dot(gl_FragColor.rgb, weights.yzx)",
-    "	);",
-    // saturation
-    "	float average = (gl_FragColor.r + gl_FragColor.g + gl_FragColor.b) / 3.0;",
-    "	if (saturation > 0.0) {",
-    "		gl_FragColor.rgb += (average - gl_FragColor.rgb) * (1.0 - 1.0 / (1.001 - saturation));",
-    "	} else {",
-    "		gl_FragColor.rgb += (average - gl_FragColor.rgb) * (-saturation);",
-    "	}",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/KaleidoShader.js
-const KaleidoShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    sides: { value: 6 },
-    angle: { value: 0 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform float sides;",
-    "uniform float angle;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec2 p = vUv - 0.5;",
-    "	float r = length(p);",
-    "	float a = atan(p.y, p.x) + angle;",
-    "	float tau = 2. * 3.1416 ;",
-    "	a = mod(a, tau/sides);",
-    "	a = abs(a - tau/sides/2.) ;",
-    "	p = r * vec2(cos(a), sin(a));",
-    "	vec4 color = texture2D(tDiffuse, p + 0.5);",
-    "	gl_FragColor = color;",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/MirrorShader.js
-const MirrorShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    side: { value: 1 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform int side;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec2 p = vUv;",
-    "	if (side == 0){",
-    "		if (p.x > 0.5) p.x = 1.0 - p.x;",
-    "	}else if (side == 1){",
-    "		if (p.x < 0.5) p.x = 1.0 - p.x;",
-    "	}else if (side == 2){",
-    "		if (p.y < 0.5) p.y = 1.0 - p.y;",
-    "	}else if (side == 3){",
-    "		if (p.y > 0.5) p.y = 1.0 - p.y;",
-    "	} ",
-    "	vec4 color = texture2D(tDiffuse, p);",
-    "	gl_FragColor = color;",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/NormalMapShader.js
-
-const NormalMapShader = {
-  uniforms: {
-    heightMap: { value: null },
-    resolution: { value: /* @__PURE__ */ new three_module.Vector2(512, 512) },
-    scale: { value: /* @__PURE__ */ new three_module.Vector2(1, 1) },
-    height: { value: 0.05 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform float height;",
-    "uniform vec2 resolution;",
-    "uniform sampler2D heightMap;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	float val = texture2D( heightMap, vUv ).x;",
-    "	float valU = texture2D( heightMap, vUv + vec2( 1.0 / resolution.x, 0.0 ) ).x;",
-    "	float valV = texture2D( heightMap, vUv + vec2( 0.0, 1.0 / resolution.y ) ).x;",
-    "	gl_FragColor = vec4( ( 0.5 * normalize( vec3( val - valU, val - valV, height  ) ) + 0.5 ), 1.0 );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/ParallaxShader.js
-const ParallaxShader = {
-  // Ordered from fastest to best quality.
-  modes: {
-    none: "NO_PARALLAX",
-    basic: "USE_BASIC_PARALLAX",
-    steep: "USE_STEEP_PARALLAX",
-    occlusion: "USE_OCLUSION_PARALLAX",
-    // a.k.a. POM
-    relief: "USE_RELIEF_PARALLAX"
-  },
-  uniforms: {
-    bumpMap: { value: null },
-    map: { value: null },
-    parallaxScale: { value: null },
-    parallaxMinLayers: { value: null },
-    parallaxMaxLayers: { value: null }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "varying vec3 vViewPosition;",
-    "varying vec3 vNormal;",
-    "void main() {",
-    "	vUv = uv;",
-    "	vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",
-    "	vViewPosition = -mvPosition.xyz;",
-    "	vNormal = normalize( normalMatrix * normal );",
-    "	gl_Position = projectionMatrix * mvPosition;",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D bumpMap;",
-    "uniform sampler2D map;",
-    "uniform float parallaxScale;",
-    "uniform float parallaxMinLayers;",
-    "uniform float parallaxMaxLayers;",
-    "varying vec2 vUv;",
-    "varying vec3 vViewPosition;",
-    "varying vec3 vNormal;",
-    "#ifdef USE_BASIC_PARALLAX",
-    "	vec2 parallaxMap( in vec3 V ) {",
-    "		float initialHeight = texture2D( bumpMap, vUv ).r;",
-    // No Offset Limitting: messy, floating output at grazing angles.
-    //"vec2 texCoordOffset = parallaxScale * V.xy / V.z * initialHeight;",
-    // Offset Limiting
-    "		vec2 texCoordOffset = parallaxScale * V.xy * initialHeight;",
-    "		return vUv - texCoordOffset;",
-    "	}",
-    "#else",
-    "	vec2 parallaxMap( in vec3 V ) {",
-    // Determine number of layers from angle between V and N
-    "		float numLayers = mix( parallaxMaxLayers, parallaxMinLayers, abs( dot( vec3( 0.0, 0.0, 1.0 ), V ) ) );",
-    "		float layerHeight = 1.0 / numLayers;",
-    "		float currentLayerHeight = 0.0;",
-    // Shift of texture coordinates for each iteration
-    "		vec2 dtex = parallaxScale * V.xy / V.z / numLayers;",
-    "		vec2 currentTextureCoords = vUv;",
-    "		float heightFromTexture = texture2D( bumpMap, currentTextureCoords ).r;",
-    // while ( heightFromTexture > currentLayerHeight )
-    // Infinite loops are not well supported. Do a "large" finite
-    // loop, but not too large, as it slows down some compilers.
-    "		for ( int i = 0; i < 30; i += 1 ) {",
-    "			if ( heightFromTexture <= currentLayerHeight ) {",
-    "				break;",
-    "			}",
-    "			currentLayerHeight += layerHeight;",
-    // Shift texture coordinates along vector V
-    "			currentTextureCoords -= dtex;",
-    "			heightFromTexture = texture2D( bumpMap, currentTextureCoords ).r;",
-    "		}",
-    "		#ifdef USE_STEEP_PARALLAX",
-    "			return currentTextureCoords;",
-    "		#elif defined( USE_RELIEF_PARALLAX )",
-    "			vec2 deltaTexCoord = dtex / 2.0;",
-    "			float deltaHeight = layerHeight / 2.0;",
-    // Return to the mid point of previous layer
-    "			currentTextureCoords += deltaTexCoord;",
-    "			currentLayerHeight -= deltaHeight;",
-    // Binary search to increase precision of Steep Parallax Mapping
-    "			const int numSearches = 5;",
-    "			for ( int i = 0; i < numSearches; i += 1 ) {",
-    "				deltaTexCoord /= 2.0;",
-    "				deltaHeight /= 2.0;",
-    "				heightFromTexture = texture2D( bumpMap, currentTextureCoords ).r;",
-    // Shift along or against vector V
-    "				if( heightFromTexture > currentLayerHeight ) {",
-    // Below the surface
-    "					currentTextureCoords -= deltaTexCoord;",
-    "					currentLayerHeight += deltaHeight;",
-    "				} else {",
-    // above the surface
-    "					currentTextureCoords += deltaTexCoord;",
-    "					currentLayerHeight -= deltaHeight;",
-    "				}",
-    "			}",
-    "			return currentTextureCoords;",
-    "		#elif defined( USE_OCLUSION_PARALLAX )",
-    "			vec2 prevTCoords = currentTextureCoords + dtex;",
-    // Heights for linear interpolation
-    "			float nextH = heightFromTexture - currentLayerHeight;",
-    "			float prevH = texture2D( bumpMap, prevTCoords ).r - currentLayerHeight + layerHeight;",
-    // Proportions for linear interpolation
-    "			float weight = nextH / ( nextH - prevH );",
-    // Interpolation of texture coordinates
-    "			return prevTCoords * weight + currentTextureCoords * ( 1.0 - weight );",
-    "		#else",
-    // NO_PARALLAX
-    "			return vUv;",
-    "		#endif",
-    "	}",
-    "#endif",
-    "vec2 perturbUv( vec3 surfPosition, vec3 surfNormal, vec3 viewPosition ) {",
-    "	vec2 texDx = dFdx( vUv );",
-    "	vec2 texDy = dFdy( vUv );",
-    "	vec3 vSigmaX = dFdx( surfPosition );",
-    "	vec3 vSigmaY = dFdy( surfPosition );",
-    "	vec3 vR1 = cross( vSigmaY, surfNormal );",
-    "	vec3 vR2 = cross( surfNormal, vSigmaX );",
-    "	float fDet = dot( vSigmaX, vR1 );",
-    "	vec2 vProjVscr = ( 1.0 / fDet ) * vec2( dot( vR1, viewPosition ), dot( vR2, viewPosition ) );",
-    "	vec3 vProjVtex;",
-    "	vProjVtex.xy = texDx * vProjVscr.x + texDy * vProjVscr.y;",
-    "	vProjVtex.z = dot( surfNormal, viewPosition );",
-    "	return parallaxMap( vProjVtex );",
-    "}",
-    "void main() {",
-    "	vec2 mapUv = perturbUv( -vViewPosition, normalize( vNormal ), normalize( vViewPosition ) );",
-    "	gl_FragColor = texture2D( map, mapUv );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/PixelShader.js
-const PixelShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    resolution: { value: null },
-    pixelSize: { value: 1 }
-  },
-  vertexShader: [
-    "varying highp vec2 vUv;",
-    "void main() {",
-    "vUv = uv;",
-    "gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform float pixelSize;",
-    "uniform vec2 resolution;",
-    "varying highp vec2 vUv;",
-    "void main(){",
-    "vec2 dxy = pixelSize / resolution;",
-    "vec2 coord = dxy * floor( vUv / dxy );",
-    "gl_FragColor = texture2D(tDiffuse, coord);",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/RGBShiftShader.js
-const RGBShiftShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    amount: { value: 5e-3 },
-    angle: { value: 0 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform float amount;",
-    "uniform float angle;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec2 offset = amount * vec2( cos(angle), sin(angle));",
-    "	vec4 cr = texture2D(tDiffuse, vUv + offset);",
-    "	vec4 cga = texture2D(tDiffuse, vUv);",
-    "	vec4 cb = texture2D(tDiffuse, vUv - offset);",
-    "	gl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/SepiaShader.js
-const SepiaShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    amount: { value: 1 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform float amount;",
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 color = texture2D( tDiffuse, vUv );",
-    "	vec3 c = color.rgb;",
-    "	color.r = dot( c, vec3( 1.0 - 0.607 * amount, 0.769 * amount, 0.189 * amount ) );",
-    "	color.g = dot( c, vec3( 0.349 * amount, 1.0 - 0.314 * amount, 0.168 * amount ) );",
-    "	color.b = dot( c, vec3( 0.272 * amount, 0.534 * amount, 1.0 - 0.869 * amount ) );",
-    "	gl_FragColor = vec4( min( vec3( 1.0 ), color.rgb ), color.a );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/SobelOperatorShader.js
-
-const SobelOperatorShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    resolution: { value: /* @__PURE__ */ new three_module.Vector2() }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform vec2 resolution;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec2 texel = vec2( 1.0 / resolution.x, 1.0 / resolution.y );",
-    // kernel definition (in glsl matrices are filled in column-major order)
-    "	const mat3 Gx = mat3( -1, -2, -1, 0, 0, 0, 1, 2, 1 );",
-    // x direction kernel
-    "	const mat3 Gy = mat3( -1, 0, 1, -2, 0, 2, -1, 0, 1 );",
-    // y direction kernel
-    // fetch the 3x3 neighbourhood of a fragment
-    // first column
-    "	float tx0y0 = texture2D( tDiffuse, vUv + texel * vec2( -1, -1 ) ).r;",
-    "	float tx0y1 = texture2D( tDiffuse, vUv + texel * vec2( -1,  0 ) ).r;",
-    "	float tx0y2 = texture2D( tDiffuse, vUv + texel * vec2( -1,  1 ) ).r;",
-    // second column
-    "	float tx1y0 = texture2D( tDiffuse, vUv + texel * vec2(  0, -1 ) ).r;",
-    "	float tx1y1 = texture2D( tDiffuse, vUv + texel * vec2(  0,  0 ) ).r;",
-    "	float tx1y2 = texture2D( tDiffuse, vUv + texel * vec2(  0,  1 ) ).r;",
-    // third column
-    "	float tx2y0 = texture2D( tDiffuse, vUv + texel * vec2(  1, -1 ) ).r;",
-    "	float tx2y1 = texture2D( tDiffuse, vUv + texel * vec2(  1,  0 ) ).r;",
-    "	float tx2y2 = texture2D( tDiffuse, vUv + texel * vec2(  1,  1 ) ).r;",
-    // gradient value in x direction
-    "	float valueGx = Gx[0][0] * tx0y0 + Gx[1][0] * tx1y0 + Gx[2][0] * tx2y0 + ",
-    "		Gx[0][1] * tx0y1 + Gx[1][1] * tx1y1 + Gx[2][1] * tx2y1 + ",
-    "		Gx[0][2] * tx0y2 + Gx[1][2] * tx1y2 + Gx[2][2] * tx2y2; ",
-    // gradient value in y direction
-    "	float valueGy = Gy[0][0] * tx0y0 + Gy[1][0] * tx1y0 + Gy[2][0] * tx2y0 + ",
-    "		Gy[0][1] * tx0y1 + Gy[1][1] * tx1y1 + Gy[2][1] * tx2y1 + ",
-    "		Gy[0][2] * tx0y2 + Gy[1][2] * tx1y2 + Gy[2][2] * tx2y2; ",
-    // magnitute of the total gradient
-    "	float G = sqrt( ( valueGx * valueGx ) + ( valueGy * valueGy ) );",
-    "	gl_FragColor = vec4( vec3( G ), 1 );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/SubsurfaceScatteringShader.js
-
-let _SubsurfaceScatteringShader;
-function get() {
-  if (_SubsurfaceScatteringShader)
-    return _SubsurfaceScatteringShader;
-  const meshphong_frag_head = three_module.ShaderChunk.meshphong_frag.slice(
-    0,
-    three_module.ShaderChunk.meshphong_frag.indexOf("void main() {")
-  );
-  const meshphong_frag_body = three_module.ShaderChunk.meshphong_frag.slice(
-    three_module.ShaderChunk.meshphong_frag.indexOf("void main() {")
-  );
-  _SubsurfaceScatteringShader = {
-    uniforms: /* @__PURE__ */ three_module.UniformsUtils.merge([
-      three_module.ShaderLib.phong.uniforms,
-      {
-        thicknessMap: { value: null },
-        thicknessColor: { value: /* @__PURE__ */ new three_module.Color(16777215) },
-        thicknessDistortion: { value: 0.1 },
-        thicknessAmbient: { value: 0 },
-        thicknessAttenuation: { value: 0.1 },
-        thicknessPower: { value: 2 },
-        thicknessScale: { value: 10 }
-      }
-    ]),
-    vertexShader: (
-      /* glsl */
-      `
-    #define USE_UV
-    ${three_module.ShaderChunk.meshphong_vert}
-  `
-    ),
-    fragmentShader: (
-      /* glsl */
-      `
-    #define USE_UV',
-    #define SUBSURFACE',
-
-    ${meshphong_frag_head}
-
-    uniform sampler2D thicknessMap;
-    uniform float thicknessPower;
-    uniform float thicknessScale;
-    uniform float thicknessDistortion;
-    uniform float thicknessAmbient;
-    uniform float thicknessAttenuation;
-    uniform vec3 thicknessColor;
-
-    void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {
-    	vec3 thickness = thicknessColor * texture2D(thicknessMap, uv).r;
-    	vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));
-    	float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;
-    	vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;
-    	reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;
-    }
-
-    ${meshphong_frag_body.replace(
-        "#include <lights_fragment_begin>",
-        three_module.ShaderChunk.lights_fragment_begin.replace(
-          /RE_Direct\( directLight, geometry, material, reflectedLight \);/g,
-          /* glsl */
-          `
-        RE_Direct( directLight, geometry, material, reflectedLight );
-
-        #if defined( SUBSURFACE ) && defined( USE_UV )
-          RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);
-        #endif
-      `
-        )
-      )}
-  `
-    )
-  };
-  return _SubsurfaceScatteringShader;
-}
-const SubsurfaceScatteringShader = {
-  get uniforms() {
-    return get().uniforms;
-  },
-  set uniforms(value) {
-    get().uniforms = value;
-  },
-  get vertexShader() {
-    return get().vertexShader;
-  },
-  set vertexShader(value) {
-    get().vertexShader = value;
-  },
-  get fragmentShader() {
-    return get().vertexShader;
-  },
-  set fragmentShader(value) {
-    get().vertexShader = value;
-  }
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/TechnicolorShader.js
-const TechnicolorShader = {
-  uniforms: {
-    tDiffuse: { value: null }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 tex = texture2D( tDiffuse, vec2( vUv.x, vUv.y ) );",
-    "	vec4 newTex = vec4(tex.r, (tex.g + tex.b) * .5, (tex.g + tex.b) * .5, 1.0);",
-    "	gl_FragColor = newTex;",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/ToonShader.js
-
-const ToonShader1 = {
-  uniforms: {
-    uDirLightPos: { value: /* @__PURE__ */ new three_module.Vector3() },
-    uDirLightColor: { value: /* @__PURE__ */ new three_module.Color(15658734) },
-    uAmbientLightColor: { value: /* @__PURE__ */ new three_module.Color(328965) },
-    uBaseColor: { value: /* @__PURE__ */ new three_module.Color(16777215) }
-  },
-  vertexShader: [
-    "varying vec3 vNormal;",
-    "varying vec3 vRefract;",
-    "void main() {",
-    "	vec4 worldPosition = modelMatrix * vec4( position, 1.0 );",
-    "	vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );",
-    "	vec3 worldNormal = normalize ( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal );",
-    "	vNormal = normalize( normalMatrix * normal );",
-    "	vec3 I = worldPosition.xyz - cameraPosition;",
-    "	vRefract = refract( normalize( I ), worldNormal, 1.02 );",
-    "	gl_Position = projectionMatrix * mvPosition;",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform vec3 uBaseColor;",
-    "uniform vec3 uDirLightPos;",
-    "uniform vec3 uDirLightColor;",
-    "uniform vec3 uAmbientLightColor;",
-    "varying vec3 vNormal;",
-    "varying vec3 vRefract;",
-    "void main() {",
-    "	float directionalLightWeighting = max( dot( normalize( vNormal ), uDirLightPos ), 0.0);",
-    "	vec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;",
-    "	float intensity = smoothstep( - 0.5, 1.0, pow( length(lightWeighting), 20.0 ) );",
-    "	intensity += length(lightWeighting) * 0.2;",
-    "	float cameraWeighting = dot( normalize( vNormal ), vRefract );",
-    "	intensity += pow( 1.0 - length( cameraWeighting ), 6.0 );",
-    "	intensity = intensity * 0.2 + 0.3;",
-    "	if ( intensity < 0.50 ) {",
-    "		gl_FragColor = vec4( 2.0 * intensity * uBaseColor, 1.0 );",
-    "	} else {",
-    "		gl_FragColor = vec4( 1.0 - 2.0 * ( 1.0 - intensity ) * ( 1.0 - uBaseColor ), 1.0 );",
-    "}",
-    "}"
-  ].join("\n")
-};
-const ToonShader2 = {
-  uniforms: {
-    uDirLightPos: { value: /* @__PURE__ */ new three_module.Vector3() },
-    uDirLightColor: { value: /* @__PURE__ */ new three_module.Color(15658734) },
-    uAmbientLightColor: { value: /* @__PURE__ */ new three_module.Color(328965) },
-    uBaseColor: { value: /* @__PURE__ */ new three_module.Color(15658734) },
-    uLineColor1: { value: /* @__PURE__ */ new three_module.Color(8421504) },
-    uLineColor2: { value: /* @__PURE__ */ new three_module.Color(0) },
-    uLineColor3: { value: /* @__PURE__ */ new three_module.Color(0) },
-    uLineColor4: { value: /* @__PURE__ */ new three_module.Color(0) }
-  },
-  vertexShader: [
-    "varying vec3 vNormal;",
-    "void main() {",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "	vNormal = normalize( normalMatrix * normal );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform vec3 uBaseColor;",
-    "uniform vec3 uLineColor1;",
-    "uniform vec3 uLineColor2;",
-    "uniform vec3 uLineColor3;",
-    "uniform vec3 uLineColor4;",
-    "uniform vec3 uDirLightPos;",
-    "uniform vec3 uDirLightColor;",
-    "uniform vec3 uAmbientLightColor;",
-    "varying vec3 vNormal;",
-    "void main() {",
-    "	float camera = max( dot( normalize( vNormal ), vec3( 0.0, 0.0, 1.0 ) ), 0.4);",
-    "	float light = max( dot( normalize( vNormal ), uDirLightPos ), 0.0);",
-    "	gl_FragColor = vec4( uBaseColor, 1.0 );",
-    "	if ( length(uAmbientLightColor + uDirLightColor * light) < 1.00 ) {",
-    "		gl_FragColor *= vec4( uLineColor1, 1.0 );",
-    "	}",
-    "	if ( length(uAmbientLightColor + uDirLightColor * camera) < 0.50 ) {",
-    "		gl_FragColor *= vec4( uLineColor2, 1.0 );",
-    "	}",
-    "}"
-  ].join("\n")
-};
-const ToonShaderHatching = {
-  uniforms: {
-    uDirLightPos: { value: /* @__PURE__ */ new three_module.Vector3() },
-    uDirLightColor: { value: /* @__PURE__ */ new three_module.Color(15658734) },
-    uAmbientLightColor: { value: /* @__PURE__ */ new three_module.Color(328965) },
-    uBaseColor: { value: /* @__PURE__ */ new three_module.Color(16777215) },
-    uLineColor1: { value: /* @__PURE__ */ new three_module.Color(0) },
-    uLineColor2: { value: /* @__PURE__ */ new three_module.Color(0) },
-    uLineColor3: { value: /* @__PURE__ */ new three_module.Color(0) },
-    uLineColor4: { value: /* @__PURE__ */ new three_module.Color(0) }
-  },
-  vertexShader: [
-    "varying vec3 vNormal;",
-    "void main() {",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "	vNormal = normalize( normalMatrix * normal );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform vec3 uBaseColor;",
-    "uniform vec3 uLineColor1;",
-    "uniform vec3 uLineColor2;",
-    "uniform vec3 uLineColor3;",
-    "uniform vec3 uLineColor4;",
-    "uniform vec3 uDirLightPos;",
-    "uniform vec3 uDirLightColor;",
-    "uniform vec3 uAmbientLightColor;",
-    "varying vec3 vNormal;",
-    "void main() {",
-    "	float directionalLightWeighting = max( dot( normalize(vNormal), uDirLightPos ), 0.0);",
-    "	vec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;",
-    "	gl_FragColor = vec4( uBaseColor, 1.0 );",
-    "	if ( length(lightWeighting) < 1.00 ) {",
-    "		if ( mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) {",
-    "			gl_FragColor = vec4( uLineColor1, 1.0 );",
-    "		}",
-    "	}",
-    "	if ( length(lightWeighting) < 0.75 ) {",
-    "		if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) {",
-    "			gl_FragColor = vec4( uLineColor2, 1.0 );",
-    "		}",
-    "	}",
-    "	if ( length(lightWeighting) < 0.50 ) {",
-    "		if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0) {",
-    "			gl_FragColor = vec4( uLineColor3, 1.0 );",
-    "		}",
-    "	}",
-    "	if ( length(lightWeighting) < 0.3465 ) {",
-    "		if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0) {",
-    "			gl_FragColor = vec4( uLineColor4, 1.0 );",
-    "	}",
-    "	}",
-    "}"
-  ].join("\n")
-};
-const ToonShaderDotted = {
-  uniforms: {
-    uDirLightPos: { value: /* @__PURE__ */ new three_module.Vector3() },
-    uDirLightColor: { value: /* @__PURE__ */ new three_module.Color(15658734) },
-    uAmbientLightColor: { value: /* @__PURE__ */ new three_module.Color(328965) },
-    uBaseColor: { value: /* @__PURE__ */ new three_module.Color(16777215) },
-    uLineColor1: { value: /* @__PURE__ */ new three_module.Color(0) }
-  },
-  vertexShader: [
-    "varying vec3 vNormal;",
-    "void main() {",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "	vNormal = normalize( normalMatrix * normal );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform vec3 uBaseColor;",
-    "uniform vec3 uLineColor1;",
-    "uniform vec3 uLineColor2;",
-    "uniform vec3 uLineColor3;",
-    "uniform vec3 uLineColor4;",
-    "uniform vec3 uDirLightPos;",
-    "uniform vec3 uDirLightColor;",
-    "uniform vec3 uAmbientLightColor;",
-    "varying vec3 vNormal;",
-    "void main() {",
-    "float directionalLightWeighting = max( dot( normalize(vNormal), uDirLightPos ), 0.0);",
-    "vec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;",
-    "gl_FragColor = vec4( uBaseColor, 1.0 );",
-    "if ( length(lightWeighting) < 1.00 ) {",
-    "		if ( ( mod(gl_FragCoord.x, 4.001) + mod(gl_FragCoord.y, 4.0) ) > 6.00 ) {",
-    "			gl_FragColor = vec4( uLineColor1, 1.0 );",
-    "		}",
-    "	}",
-    "	if ( length(lightWeighting) < 0.50 ) {",
-    "		if ( ( mod(gl_FragCoord.x + 2.0, 4.001) + mod(gl_FragCoord.y + 2.0, 4.0) ) > 6.00 ) {",
-    "			gl_FragColor = vec4( uLineColor1, 1.0 );",
-    "		}",
-    "	}",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/TriangleBlurShader.js
-
-const TriangleBlurShader = {
-  uniforms: {
-    texture: { value: null },
-    delta: { value: /* @__PURE__ */ new three_module.Vector2(1, 1) }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "#include <common>",
-    "#define ITERATIONS 10.0",
-    "uniform sampler2D texture;",
-    "uniform vec2 delta;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 color = vec4( 0.0 );",
-    "	float total = 0.0;",
-    // randomize the lookup values to hide the fixed number of samples
-    "	float offset = rand( vUv );",
-    "	for ( float t = -ITERATIONS; t <= ITERATIONS; t ++ ) {",
-    "		float percent = ( t + offset - 0.5 ) / ITERATIONS;",
-    "		float weight = 1.0 - abs( percent );",
-    "		color += texture2D( texture, vUv + delta * percent ) * weight;",
-    "		total += weight;",
-    "	}",
-    "	gl_FragColor = color / total;",
-    "}"
-  ].join("\n")
-};
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/shaders/VerticalBlurShader.js
-var VerticalBlurShader = __webpack_require__(37312);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/VerticalTiltShiftShader.js
-const VerticalTiltShiftShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    v: { value: 1 / 512 },
-    r: { value: 0.35 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "uniform float v;",
-    "uniform float r;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 sum = vec4( 0.0 );",
-    "	float vv = v * abs( r - vUv.y );",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * vv ) ) * 0.051;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * vv ) ) * 0.0918;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * vv ) ) * 0.12245;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * vv ) ) * 0.1531;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * vv ) ) * 0.1531;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * vv ) ) * 0.12245;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * vv ) ) * 0.0918;",
-    "	sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * vv ) ) * 0.051;",
-    "	gl_FragColor = sum;",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/VignetteShader.js
-const VignetteShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    offset: { value: 1 },
-    darkness: { value: 1 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform float offset;",
-    "uniform float darkness;",
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "void main() {",
-    // Eskil's vignette
-    "	vec4 texel = texture2D( tDiffuse, vUv );",
-    "	vec2 uv = ( vUv - vec2( 0.5 ) ) * vec2( offset );",
-    "	gl_FragColor = vec4( mix( texel.rgb, vec3( 1.0 - darkness ), dot( uv, uv ) ), texel.a );",
-    /*
-    		// alternative version from glfx.js
-    		// this one makes more "dusty" look (as opposed to "burned")
-    
-    		"	vec4 color = texture2D( tDiffuse, vUv );",
-    		"	float dist = distance( vUv, vec2( 0.5 ) );",
-    		"	color.rgb *= smoothstep( 0.8, offset * 0.799, dist *( darkness + offset ) );",
-    		"	gl_FragColor = color;",
-    		*/
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/VolumeShader.js
-
-const VolumeRenderShader1 = {
-  uniforms: {
-    u_size: { value: /* @__PURE__ */ new three_module.Vector3(1, 1, 1) },
-    u_renderstyle: { value: 0 },
-    u_renderthreshold: { value: 0.5 },
-    u_clim: { value: /* @__PURE__ */ new three_module.Vector2(1, 1) },
-    u_data: { value: null },
-    u_cmdata: { value: null }
-  },
-  vertexShader: [
-    "		varying vec4 v_nearpos;",
-    "		varying vec4 v_farpos;",
-    "		varying vec3 v_position;",
-    "		void main() {",
-    // Prepare transforms to map to "camera view". See also:
-    // https://threejs.org/docs/#api/renderers/webgl/WebGLProgram
-    "				mat4 viewtransformf = modelViewMatrix;",
-    "				mat4 viewtransformi = inverse(modelViewMatrix);",
-    // Project local vertex coordinate to camera position. Then do a step
-    // backward (in cam coords) to the near clipping plane, and project back. Do
-    // the same for the far clipping plane. This gives us all the information we
-    // need to calculate the ray and truncate it to the viewing cone.
-    "				vec4 position4 = vec4(position, 1.0);",
-    "				vec4 pos_in_cam = viewtransformf * position4;",
-    // Intersection of ray and near clipping plane (z = -1 in clip coords)
-    "				pos_in_cam.z = -pos_in_cam.w;",
-    "				v_nearpos = viewtransformi * pos_in_cam;",
-    // Intersection of ray and far clipping plane (z = +1 in clip coords)
-    "				pos_in_cam.z = pos_in_cam.w;",
-    "				v_farpos = viewtransformi * pos_in_cam;",
-    // Set varyings and output pos
-    "				v_position = position;",
-    "				gl_Position = projectionMatrix * viewMatrix * modelMatrix * position4;",
-    "		}"
-  ].join("\n"),
-  fragmentShader: [
-    "		precision highp float;",
-    "		precision mediump sampler3D;",
-    "		uniform vec3 u_size;",
-    "		uniform int u_renderstyle;",
-    "		uniform float u_renderthreshold;",
-    "		uniform vec2 u_clim;",
-    "		uniform sampler3D u_data;",
-    "		uniform sampler2D u_cmdata;",
-    "		varying vec3 v_position;",
-    "		varying vec4 v_nearpos;",
-    "		varying vec4 v_farpos;",
-    // The maximum distance through our rendering volume is sqrt(3).
-    "		const int MAX_STEPS = 887;	// 887 for 512^3, 1774 for 1024^3",
-    "		const int REFINEMENT_STEPS = 4;",
-    "		const float relative_step_size = 1.0;",
-    "		const vec4 ambient_color = vec4(0.2, 0.4, 0.2, 1.0);",
-    "		const vec4 diffuse_color = vec4(0.8, 0.2, 0.2, 1.0);",
-    "		const vec4 specular_color = vec4(1.0, 1.0, 1.0, 1.0);",
-    "		const float shininess = 40.0;",
-    "		void cast_mip(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray);",
-    "		void cast_iso(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray);",
-    "		float sample1(vec3 texcoords);",
-    "		vec4 apply_colormap(float val);",
-    "		vec4 add_lighting(float val, vec3 loc, vec3 step, vec3 view_ray);",
-    "		void main() {",
-    // Normalize clipping plane info
-    "				vec3 farpos = v_farpos.xyz / v_farpos.w;",
-    "				vec3 nearpos = v_nearpos.xyz / v_nearpos.w;",
-    // Calculate unit vector pointing in the view direction through this fragment.
-    "				vec3 view_ray = normalize(nearpos.xyz - farpos.xyz);",
-    // Compute the (negative) distance to the front surface or near clipping plane.
-    // v_position is the back face of the cuboid, so the initial distance calculated in the dot
-    // product below is the distance from near clip plane to the back of the cuboid
-    "				float distance = dot(nearpos - v_position, view_ray);",
-    "				distance = max(distance, min((-0.5 - v_position.x) / view_ray.x,",
-    "																		(u_size.x - 0.5 - v_position.x) / view_ray.x));",
-    "				distance = max(distance, min((-0.5 - v_position.y) / view_ray.y,",
-    "																		(u_size.y - 0.5 - v_position.y) / view_ray.y));",
-    "				distance = max(distance, min((-0.5 - v_position.z) / view_ray.z,",
-    "																		(u_size.z - 0.5 - v_position.z) / view_ray.z));",
-    // Now we have the starting position on the front surface
-    "				vec3 front = v_position + view_ray * distance;",
-    // Decide how many steps to take
-    "				int nsteps = int(-distance / relative_step_size + 0.5);",
-    "				if ( nsteps < 1 )",
-    "						discard;",
-    // Get starting location and step vector in texture coordinates
-    "				vec3 step = ((v_position - front) / u_size) / float(nsteps);",
-    "				vec3 start_loc = front / u_size;",
-    // For testing: show the number of steps. This helps to establish
-    // whether the rays are correctly oriented
-    //'gl_FragColor = vec4(0.0, float(nsteps) / 1.0 / u_size.x, 1.0, 1.0);',
-    //'return;',
-    "				if (u_renderstyle == 0)",
-    "						cast_mip(start_loc, step, nsteps, view_ray);",
-    "				else if (u_renderstyle == 1)",
-    "						cast_iso(start_loc, step, nsteps, view_ray);",
-    "				if (gl_FragColor.a < 0.05)",
-    "						discard;",
-    "		}",
-    "		float sample1(vec3 texcoords) {",
-    "				/* Sample float value from a 3D texture. Assumes intensity data. */",
-    "				return texture(u_data, texcoords.xyz).r;",
-    "		}",
-    "		vec4 apply_colormap(float val) {",
-    "				val = (val - u_clim[0]) / (u_clim[1] - u_clim[0]);",
-    "				return texture2D(u_cmdata, vec2(val, 0.5));",
-    "		}",
-    "		void cast_mip(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray) {",
-    "				float max_val = -1e6;",
-    "				int max_i = 100;",
-    "				vec3 loc = start_loc;",
-    // Enter the raycasting loop. In WebGL 1 the loop index cannot be compared with
-    // non-constant expression. So we use a hard-coded max, and an additional condition
-    // inside the loop.
-    "				for (int iter=0; iter<MAX_STEPS; iter++) {",
-    "						if (iter >= nsteps)",
-    "								break;",
-    // Sample from the 3D texture
-    "						float val = sample1(loc);",
-    // Apply MIP operation
-    "						if (val > max_val) {",
-    "								max_val = val;",
-    "								max_i = iter;",
-    "						}",
-    // Advance location deeper into the volume
-    "						loc += step;",
-    "				}",
-    // Refine location, gives crispier images
-    "				vec3 iloc = start_loc + step * (float(max_i) - 0.5);",
-    "				vec3 istep = step / float(REFINEMENT_STEPS);",
-    "				for (int i=0; i<REFINEMENT_STEPS; i++) {",
-    "						max_val = max(max_val, sample1(iloc));",
-    "						iloc += istep;",
-    "				}",
-    // Resolve final color
-    "				gl_FragColor = apply_colormap(max_val);",
-    "		}",
-    "		void cast_iso(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray) {",
-    "				gl_FragColor = vec4(0.0);	// init transparent",
-    "				vec4 color3 = vec4(0.0);	// final color",
-    "				vec3 dstep = 1.5 / u_size;	// step to sample derivative",
-    "				vec3 loc = start_loc;",
-    "				float low_threshold = u_renderthreshold - 0.02 * (u_clim[1] - u_clim[0]);",
-    // Enter the raycasting loop. In WebGL 1 the loop index cannot be compared with
-    // non-constant expression. So we use a hard-coded max, and an additional condition
-    // inside the loop.
-    "				for (int iter=0; iter<MAX_STEPS; iter++) {",
-    "						if (iter >= nsteps)",
-    "								break;",
-    // Sample from the 3D texture
-    "						float val = sample1(loc);",
-    "						if (val > low_threshold) {",
-    // Take the last interval in smaller steps
-    "								vec3 iloc = loc - 0.5 * step;",
-    "								vec3 istep = step / float(REFINEMENT_STEPS);",
-    "								for (int i=0; i<REFINEMENT_STEPS; i++) {",
-    "										val = sample1(iloc);",
-    "										if (val > u_renderthreshold) {",
-    "												gl_FragColor = add_lighting(val, iloc, dstep, view_ray);",
-    "												return;",
-    "										}",
-    "										iloc += istep;",
-    "								}",
-    "						}",
-    // Advance location deeper into the volume
-    "						loc += step;",
-    "				}",
-    "		}",
-    "		vec4 add_lighting(float val, vec3 loc, vec3 step, vec3 view_ray)",
-    "		{",
-    // Calculate color by incorporating lighting
-    // View direction
-    "				vec3 V = normalize(view_ray);",
-    // calculate normal vector from gradient
-    "				vec3 N;",
-    "				float val1, val2;",
-    "				val1 = sample1(loc + vec3(-step[0], 0.0, 0.0));",
-    "				val2 = sample1(loc + vec3(+step[0], 0.0, 0.0));",
-    "				N[0] = val1 - val2;",
-    "				val = max(max(val1, val2), val);",
-    "				val1 = sample1(loc + vec3(0.0, -step[1], 0.0));",
-    "				val2 = sample1(loc + vec3(0.0, +step[1], 0.0));",
-    "				N[1] = val1 - val2;",
-    "				val = max(max(val1, val2), val);",
-    "				val1 = sample1(loc + vec3(0.0, 0.0, -step[2]));",
-    "				val2 = sample1(loc + vec3(0.0, 0.0, +step[2]));",
-    "				N[2] = val1 - val2;",
-    "				val = max(max(val1, val2), val);",
-    "				float gm = length(N); // gradient magnitude",
-    "				N = normalize(N);",
-    // Flip normal so it points towards viewer
-    "				float Nselect = float(dot(N, V) > 0.0);",
-    "				N = (2.0 * Nselect - 1.0) * N;	// ==	Nselect * N - (1.0-Nselect)*N;",
-    // Init colors
-    "				vec4 ambient_color = vec4(0.0, 0.0, 0.0, 0.0);",
-    "				vec4 diffuse_color = vec4(0.0, 0.0, 0.0, 0.0);",
-    "				vec4 specular_color = vec4(0.0, 0.0, 0.0, 0.0);",
-    // note: could allow multiple lights
-    "				for (int i=0; i<1; i++)",
-    "				{",
-    // Get light direction (make sure to prevent zero devision)
-    "						vec3 L = normalize(view_ray);	//lightDirs[i];",
-    "						float lightEnabled = float( length(L) > 0.0 );",
-    "						L = normalize(L + (1.0 - lightEnabled));",
-    // Calculate lighting properties
-    "						float lambertTerm = clamp(dot(N, L), 0.0, 1.0);",
-    "						vec3 H = normalize(L+V); // Halfway vector",
-    "						float specularTerm = pow(max(dot(H, N), 0.0), shininess);",
-    // Calculate mask
-    "						float mask1 = lightEnabled;",
-    // Calculate colors
-    "						ambient_color +=	mask1 * ambient_color;	// * gl_LightSource[i].ambient;",
-    "						diffuse_color +=	mask1 * lambertTerm;",
-    "						specular_color += mask1 * specularTerm * specular_color;",
-    "				}",
-    // Calculate final color by componing different components
-    "				vec4 final_color;",
-    "				vec4 color = apply_colormap(val);",
-    "				final_color = color * (ambient_color + diffuse_color) + specular_color;",
-    "				final_color.a = color.a;",
-    "				return final_color;",
-    "		}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/shaders/WaterRefractionShader.js
-const WaterRefractionShader = {
-  uniforms: {
-    color: {
-      value: null
-    },
-    time: {
-      value: 0
-    },
-    tDiffuse: {
-      value: null
-    },
-    tDudv: {
-      value: null
-    },
-    textureMatrix: {
-      value: null
-    }
-  },
-  vertexShader: [
-    "uniform mat4 textureMatrix;",
-    "varying vec2 vUv;",
-    "varying vec4 vUvRefraction;",
-    "void main() {",
-    "	vUv = uv;",
-    "	vUvRefraction = textureMatrix * vec4( position, 1.0 );",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform vec3 color;",
-    "uniform float time;",
-    "uniform sampler2D tDiffuse;",
-    "uniform sampler2D tDudv;",
-    "varying vec2 vUv;",
-    "varying vec4 vUvRefraction;",
-    "float blendOverlay( float base, float blend ) {",
-    "	return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );",
-    "}",
-    "vec3 blendOverlay( vec3 base, vec3 blend ) {",
-    "	return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ),blendOverlay( base.b, blend.b ) );",
-    "}",
-    "void main() {",
-    " float waveStrength = 0.1;",
-    " float waveSpeed = 0.03;",
-    // simple distortion (ripple) via dudv map (see https://www.youtube.com/watch?v=6B7IF6GOu7s)
-    "	vec2 distortedUv = texture2D( tDudv, vec2( vUv.x + time * waveSpeed, vUv.y ) ).rg * waveStrength;",
-    "	distortedUv = vUv.xy + vec2( distortedUv.x, distortedUv.y + time * waveSpeed );",
-    "	vec2 distortion = ( texture2D( tDudv, distortedUv ).rg * 2.0 - 1.0 ) * waveStrength;",
-    // new uv coords
-    " vec4 uv = vec4( vUvRefraction );",
-    " uv.xy += distortion;",
-    "	vec4 base = texture2DProj( tDiffuse, uv );",
-    "	gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );",
-    "}"
-  ].join("\n")
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/interactive/HTMLMesh.js
-
-class HTMLMesh extends three_module.Mesh {
-  constructor(dom) {
-    const texture = new HTMLTexture(dom);
-    const geometry = new three_module.PlaneGeometry(texture.image.width * 1e-3, texture.image.height * 1e-3);
-    const material = new three_module.MeshBasicMaterial({ map: texture, toneMapped: false, transparent: true });
-    super(geometry, material);
-    function onEvent(event) {
-      material.map.dispatchDOMEvent(event);
-    }
-    this.addEventListener("mousedown", onEvent);
-    this.addEventListener("mousemove", onEvent);
-    this.addEventListener("mouseup", onEvent);
-    this.addEventListener("click", onEvent);
-    this.dispose = function() {
-      geometry.dispose();
-      material.dispose();
-      material.map.dispose();
-      canvases.delete(dom);
-      this.removeEventListener("mousedown", onEvent);
-      this.removeEventListener("mousemove", onEvent);
-      this.removeEventListener("mouseup", onEvent);
-      this.removeEventListener("click", onEvent);
-    };
-  }
-}
-class HTMLTexture extends three_module.CanvasTexture {
-  constructor(dom) {
-    super(html2canvas(dom));
-    this.dom = dom;
-    this.anisotropy = 16;
-    if ("colorSpace" in this)
-      this.colorSpace = "srgb";
-    else
-      this.encoding = 3001;
-    this.minFilter = three_module.LinearFilter;
-    this.magFilter = three_module.LinearFilter;
-    const observer = new MutationObserver(() => {
-      if (!this.scheduleUpdate) {
-        this.scheduleUpdate = setTimeout(() => this.update(), 16);
-      }
-    });
-    const config = { attributes: true, childList: true, subtree: true, characterData: true };
-    observer.observe(dom, config);
-    this.observer = observer;
-  }
-  dispatchDOMEvent(event) {
-    if (event.data) {
-      htmlevent(this.dom, event.type, event.data.x, event.data.y);
-    }
-  }
-  update() {
-    this.image = html2canvas(this.dom);
-    this.needsUpdate = true;
-    this.scheduleUpdate = null;
-  }
-  dispose() {
-    if (this.observer) {
-      this.observer.disconnect();
-    }
-    this.scheduleUpdate = clearTimeout(this.scheduleUpdate);
-    super.dispose();
-  }
-}
-const canvases = /* @__PURE__ */ new WeakMap();
-function html2canvas(element) {
-  const range = document.createRange();
-  const color = new three_module.Color();
-  function Clipper(context2) {
-    const clips = [];
-    let isClipping = false;
-    function doClip() {
-      if (isClipping) {
-        isClipping = false;
-        context2.restore();
-      }
-      if (clips.length === 0)
-        return;
-      let minX = -Infinity, minY = -Infinity;
-      let maxX = Infinity, maxY = Infinity;
-      for (let i = 0; i < clips.length; i++) {
-        const clip = clips[i];
-        minX = Math.max(minX, clip.x);
-        minY = Math.max(minY, clip.y);
-        maxX = Math.min(maxX, clip.x + clip.width);
-        maxY = Math.min(maxY, clip.y + clip.height);
-      }
-      context2.save();
-      context2.beginPath();
-      context2.rect(minX, minY, maxX - minX, maxY - minY);
-      context2.clip();
-      isClipping = true;
-    }
-    return {
-      add: function(clip) {
-        clips.push(clip);
-        doClip();
-      },
-      remove: function() {
-        clips.pop();
-        doClip();
-      }
-    };
-  }
-  function drawText(style, x, y, string) {
-    if (string !== "") {
-      if (style.textTransform === "uppercase") {
-        string = string.toUpperCase();
-      }
-      context.font = style.fontWeight + " " + style.fontSize + " " + style.fontFamily;
-      context.textBaseline = "top";
-      context.fillStyle = style.color;
-      context.fillText(string, x, y + parseFloat(style.fontSize) * 0.1);
-    }
-  }
-  function buildRectPath(x, y, w, h, r) {
-    if (w < 2 * r)
-      r = w / 2;
-    if (h < 2 * r)
-      r = h / 2;
-    context.beginPath();
-    context.moveTo(x + r, y);
-    context.arcTo(x + w, y, x + w, y + h, r);
-    context.arcTo(x + w, y + h, x, y + h, r);
-    context.arcTo(x, y + h, x, y, r);
-    context.arcTo(x, y, x + w, y, r);
-    context.closePath();
-  }
-  function drawBorder(style, which, x, y, width, height) {
-    const borderWidth = style[which + "Width"];
-    const borderStyle = style[which + "Style"];
-    const borderColor = style[which + "Color"];
-    if (borderWidth !== "0px" && borderStyle !== "none" && borderColor !== "transparent" && borderColor !== "rgba(0, 0, 0, 0)") {
-      context.strokeStyle = borderColor;
-      context.lineWidth = parseFloat(borderWidth);
-      context.beginPath();
-      context.moveTo(x, y);
-      context.lineTo(x + width, y + height);
-      context.stroke();
-    }
-  }
-  function drawElement(element2, style) {
-    let x = 0, y = 0, width = 0, height = 0;
-    if (element2.nodeType === Node.TEXT_NODE) {
-      range.selectNode(element2);
-      const rect = range.getBoundingClientRect();
-      x = rect.left - offset.left - 0.5;
-      y = rect.top - offset.top - 0.5;
-      width = rect.width;
-      height = rect.height;
-      drawText(style, x, y, element2.nodeValue.trim());
-    } else if (element2.nodeType === Node.COMMENT_NODE) {
-      return;
-    } else if (element2 instanceof HTMLCanvasElement) {
-      if (element2.style.display === "none")
-        return;
-      context.save();
-      const dpr = window.devicePixelRatio;
-      context.scale(1 / dpr, 1 / dpr);
-      context.drawImage(element2, 0, 0);
-      context.restore();
-    } else {
-      if (element2.style.display === "none")
-        return;
-      const rect = element2.getBoundingClientRect();
-      x = rect.left - offset.left - 0.5;
-      y = rect.top - offset.top - 0.5;
-      width = rect.width;
-      height = rect.height;
-      style = window.getComputedStyle(element2);
-      buildRectPath(x, y, width, height, parseFloat(style.borderRadius));
-      const backgroundColor = style.backgroundColor;
-      if (backgroundColor !== "transparent" && backgroundColor !== "rgba(0, 0, 0, 0)") {
-        context.fillStyle = backgroundColor;
-        context.fill();
-      }
-      const borders = ["borderTop", "borderLeft", "borderBottom", "borderRight"];
-      let match = true;
-      let prevBorder = null;
-      for (const border of borders) {
-        if (prevBorder !== null) {
-          match = style[border + "Width"] === style[prevBorder + "Width"] && style[border + "Color"] === style[prevBorder + "Color"] && style[border + "Style"] === style[prevBorder + "Style"];
-        }
-        if (match === false)
-          break;
-        prevBorder = border;
-      }
-      if (match === true) {
-        const width2 = parseFloat(style.borderTopWidth);
-        if (style.borderTopWidth !== "0px" && style.borderTopStyle !== "none" && style.borderTopColor !== "transparent" && style.borderTopColor !== "rgba(0, 0, 0, 0)") {
-          context.strokeStyle = style.borderTopColor;
-          context.lineWidth = width2;
-          context.stroke();
-        }
-      } else {
-        drawBorder(style, "borderTop", x, y, width, 0);
-        drawBorder(style, "borderLeft", x, y, 0, height);
-        drawBorder(style, "borderBottom", x, y + height, width, 0);
-        drawBorder(style, "borderRight", x + width, y, 0, height);
-      }
-      if (element2 instanceof HTMLInputElement) {
-        let accentColor = style.accentColor;
-        if (accentColor === void 0 || accentColor === "auto")
-          accentColor = style.color;
-        color.set(accentColor);
-        const luminance = Math.sqrt(0.299 * color.r ** 2 + 0.587 * color.g ** 2 + 0.114 * color.b ** 2);
-        const accentTextColor = luminance < 0.5 ? "white" : "#111111";
-        if (element2.type === "radio") {
-          buildRectPath(x, y, width, height, height);
-          context.fillStyle = "white";
-          context.strokeStyle = accentColor;
-          context.lineWidth = 1;
-          context.fill();
-          context.stroke();
-          if (element2.checked) {
-            buildRectPath(x + 2, y + 2, width - 4, height - 4, height);
-            context.fillStyle = accentColor;
-            context.strokeStyle = accentTextColor;
-            context.lineWidth = 2;
-            context.fill();
-            context.stroke();
-          }
-        }
-        if (element2.type === "checkbox") {
-          buildRectPath(x, y, width, height, 2);
-          context.fillStyle = element2.checked ? accentColor : "white";
-          context.strokeStyle = element2.checked ? accentTextColor : accentColor;
-          context.lineWidth = 1;
-          context.stroke();
-          context.fill();
-          if (element2.checked) {
-            const currentTextAlign = context.textAlign;
-            context.textAlign = "center";
-            const properties = {
-              color: accentTextColor,
-              fontFamily: style.fontFamily,
-              fontSize: height + "px",
-              fontWeight: "bold"
-            };
-            drawText(properties, x + width / 2, y, "✔");
-            context.textAlign = currentTextAlign;
-          }
-        }
-        if (element2.type === "range") {
-          const [min, max, value] = ["min", "max", "value"].map((property) => parseFloat(element2[property]));
-          const position = (value - min) / (max - min) * (width - height);
-          buildRectPath(x, y + height / 4, width, height / 2, height / 4);
-          context.fillStyle = accentTextColor;
-          context.strokeStyle = accentColor;
-          context.lineWidth = 1;
-          context.fill();
-          context.stroke();
-          buildRectPath(x, y + height / 4, position + height / 2, height / 2, height / 4);
-          context.fillStyle = accentColor;
-          context.fill();
-          buildRectPath(x + position, y, height, height, height / 2);
-          context.fillStyle = accentColor;
-          context.fill();
-        }
-        if (element2.type === "color" || element2.type === "text" || element2.type === "number") {
-          clipper.add({ x, y, width, height });
-          drawText(style, x + parseInt(style.paddingLeft), y + parseInt(style.paddingTop), element2.value);
-          clipper.remove();
-        }
-      }
-    }
-    const isClipping = style.overflow === "auto" || style.overflow === "hidden";
-    if (isClipping)
-      clipper.add({ x, y, width, height });
-    for (let i = 0; i < element2.childNodes.length; i++) {
-      drawElement(element2.childNodes[i], style);
-    }
-    if (isClipping)
-      clipper.remove();
-  }
-  const offset = element.getBoundingClientRect();
-  let canvas = canvases.get(element);
-  if (canvas === void 0) {
-    canvas = document.createElement("canvas");
-    canvas.width = offset.width;
-    canvas.height = offset.height;
-    canvases.set(element, canvas);
-  }
-  const context = canvas.getContext(
-    "2d"
-    /*, { alpha: false }*/
-  );
-  const clipper = new Clipper(context);
-  drawElement(element);
-  return canvas;
-}
-function htmlevent(element, event, x, y) {
-  const mouseEventInit = {
-    clientX: x * element.offsetWidth + element.offsetLeft,
-    clientY: y * element.offsetHeight + element.offsetTop,
-    view: element.ownerDocument.defaultView
-  };
-  window.dispatchEvent(new MouseEvent(event, mouseEventInit));
-  const rect = element.getBoundingClientRect();
-  x = x * rect.width + rect.left;
-  y = y * rect.height + rect.top;
-  function traverse(element2) {
-    if (element2.nodeType !== Node.TEXT_NODE && element2.nodeType !== Node.COMMENT_NODE) {
-      const rect2 = element2.getBoundingClientRect();
-      if (x > rect2.left && x < rect2.right && y > rect2.top && y < rect2.bottom) {
-        element2.dispatchEvent(new MouseEvent(event, mouseEventInit));
-        if (element2 instanceof HTMLInputElement && element2.type === "range" && (event === "mousedown" || event === "click")) {
-          const [min, max] = ["min", "max"].map((property) => parseFloat(element2[property]));
-          const width = rect2.width;
-          const offsetX = x - rect2.x;
-          const proportion = offsetX / width;
-          element2.value = min + (max - min) * proportion;
-          element2.dispatchEvent(new InputEvent("input", { bubbles: true }));
-        }
-      }
-      for (let i = 0; i < element2.childNodes.length; i++) {
-        traverse(element2.childNodes[i]);
-      }
-    }
-  }
-  traverse(element);
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/interactive/InteractiveGroup.js
-
-const _pointer = /* @__PURE__ */ new three_module.Vector2();
-const _event = { type: "", data: _pointer };
-class InteractiveGroup extends three_module.Group {
-  constructor(renderer, camera) {
-    super();
-    const scope = this;
-    const raycaster = new three_module.Raycaster();
-    const tempMatrix = new three_module.Matrix4();
-    const element = renderer.domElement;
-    function onPointerEvent(event) {
-      event.stopPropagation();
-      _pointer.x = event.clientX / element.clientWidth * 2 - 1;
-      _pointer.y = -(event.clientY / element.clientHeight) * 2 + 1;
-      raycaster.setFromCamera(_pointer, camera);
-      const intersects = raycaster.intersectObjects(scope.children, false);
-      if (intersects.length > 0) {
-        const intersection = intersects[0];
-        const object = intersection.object;
-        const uv = intersection.uv;
-        _event.type = event.type;
-        _event.data.set(uv.x, 1 - uv.y);
-        object.dispatchEvent(_event);
-      }
-    }
-    element.addEventListener("pointerdown", onPointerEvent);
-    element.addEventListener("pointerup", onPointerEvent);
-    element.addEventListener("pointermove", onPointerEvent);
-    element.addEventListener("mousedown", onPointerEvent);
-    element.addEventListener("mouseup", onPointerEvent);
-    element.addEventListener("mousemove", onPointerEvent);
-    element.addEventListener("click", onPointerEvent);
-    const events = {
-      move: "mousemove",
-      select: "click",
-      selectstart: "mousedown",
-      selectend: "mouseup"
-    };
-    function onXRControllerEvent(event) {
-      const controller = event.target;
-      tempMatrix.identity().extractRotation(controller.matrixWorld);
-      raycaster.ray.origin.setFromMatrixPosition(controller.matrixWorld);
-      raycaster.ray.direction.set(0, 0, -1).applyMatrix4(tempMatrix);
-      const intersections = raycaster.intersectObjects(scope.children, false);
-      if (intersections.length > 0) {
-        const intersection = intersections[0];
-        const object = intersection.object;
-        const uv = intersection.uv;
-        _event.type = events[event.type];
-        _event.data.set(uv.x, 1 - uv.y);
-        object.dispatchEvent(_event);
-      }
-    }
-    const controller1 = renderer.xr.getController(0);
-    controller1.addEventListener("move", onXRControllerEvent);
-    controller1.addEventListener("select", onXRControllerEvent);
-    controller1.addEventListener("selectstart", onXRControllerEvent);
-    controller1.addEventListener("selectend", onXRControllerEvent);
-    const controller2 = renderer.xr.getController(1);
-    controller2.addEventListener("move", onXRControllerEvent);
-    controller2.addEventListener("select", onXRControllerEvent);
-    controller2.addEventListener("selectstart", onXRControllerEvent);
-    controller2.addEventListener("selectend", onXRControllerEvent);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/interactive/SelectionHelper.js
-
-class SelectionHelper {
-  constructor(selectionBox, renderer, cssClassName) {
-    this.element = document.createElement("div");
-    this.element.classList.add(cssClassName);
-    this.element.style.pointerEvents = "none";
-    this.renderer = renderer;
-    this.startPoint = new three_module.Vector2();
-    this.pointTopLeft = new three_module.Vector2();
-    this.pointBottomRight = new three_module.Vector2();
-    this.isDown = false;
-    this.renderer.domElement.addEventListener("pointerdown", (event) => {
-      this.isDown = true;
-      this.onSelectStart(event);
-    });
-    this.renderer.domElement.addEventListener("pointermove", (event) => {
-      if (this.isDown) {
-        this.onSelectMove(event);
-      }
-    });
-    this.renderer.domElement.addEventListener("pointerup", (event) => {
-      this.isDown = false;
-      this.onSelectOver(event);
-    });
-  }
-  onSelectStart(event) {
-    this.renderer.domElement.parentElement.appendChild(this.element);
-    this.element.style.left = `${event.clientX}px`;
-    this.element.style.top = `${event.clientY}px`;
-    this.element.style.width = "0px";
-    this.element.style.height = "0px";
-    this.startPoint.x = event.clientX;
-    this.startPoint.y = event.clientY;
-  }
-  onSelectMove(event) {
-    this.pointBottomRight.x = Math.max(this.startPoint.x, event.clientX);
-    this.pointBottomRight.y = Math.max(this.startPoint.y, event.clientY);
-    this.pointTopLeft.x = Math.min(this.startPoint.x, event.clientX);
-    this.pointTopLeft.y = Math.min(this.startPoint.y, event.clientY);
-    this.element.style.left = `${this.pointTopLeft.x}px`;
-    this.element.style.top = `${this.pointTopLeft.y}px`;
-    this.element.style.width = `${this.pointBottomRight.x - this.pointTopLeft.x}px`;
-    this.element.style.height = `${this.pointBottomRight.y - this.pointTopLeft.y}px`;
-  }
-  onSelectOver() {
-    this.element.parentElement.removeChild(this.element);
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/interactive/SelectionBox.js
-var SelectionBox = __webpack_require__(31480);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/physics/AmmoPhysics.js
-async function AmmoPhysics() {
-  if ("Ammo" in window === false) {
-    console.error("AmmoPhysics: Couldn't find Ammo.js");
-    return;
-  }
-  const AmmoLib = await Ammo();
-  const frameRate = 60;
-  const collisionConfiguration = new AmmoLib.btDefaultCollisionConfiguration();
-  const dispatcher = new AmmoLib.btCollisionDispatcher(collisionConfiguration);
-  const broadphase = new AmmoLib.btDbvtBroadphase();
-  const solver = new AmmoLib.btSequentialImpulseConstraintSolver();
-  const world = new AmmoLib.btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
-  world.setGravity(new AmmoLib.btVector3(0, -9.8, 0));
-  const worldTransform = new AmmoLib.btTransform();
-  function getShape(geometry) {
-    const parameters = geometry.parameters;
-    if (geometry.type === "BoxGeometry") {
-      const sx = parameters.width !== void 0 ? parameters.width / 2 : 0.5;
-      const sy = parameters.height !== void 0 ? parameters.height / 2 : 0.5;
-      const sz = parameters.depth !== void 0 ? parameters.depth / 2 : 0.5;
-      const shape = new AmmoLib.btBoxShape(new AmmoLib.btVector3(sx, sy, sz));
-      shape.setMargin(0.05);
-      return shape;
-    } else if (geometry.type === "SphereGeometry" || geometry.type === "IcosahedronGeometry") {
-      const radius = parameters.radius !== void 0 ? parameters.radius : 1;
-      const shape = new AmmoLib.btSphereShape(radius);
-      shape.setMargin(0.05);
-      return shape;
-    }
-    return null;
-  }
-  const meshes = [];
-  const meshMap = /* @__PURE__ */ new WeakMap();
-  function addMesh(mesh, mass = 0) {
-    const shape = getShape(mesh.geometry);
-    if (shape !== null) {
-      if (mesh.isInstancedMesh) {
-        handleInstancedMesh(mesh, mass, shape);
-      } else if (mesh.isMesh) {
-        handleMesh(mesh, mass, shape);
-      }
-    }
-  }
-  function handleMesh(mesh, mass, shape) {
-    const position = mesh.position;
-    const quaternion = mesh.quaternion;
-    const transform = new AmmoLib.btTransform();
-    transform.setIdentity();
-    transform.setOrigin(new AmmoLib.btVector3(position.x, position.y, position.z));
-    transform.setRotation(new AmmoLib.btQuaternion(quaternion.x, quaternion.y, quaternion.z, quaternion.w));
-    const motionState = new AmmoLib.btDefaultMotionState(transform);
-    const localInertia = new AmmoLib.btVector3(0, 0, 0);
-    shape.calculateLocalInertia(mass, localInertia);
-    const rbInfo = new AmmoLib.btRigidBodyConstructionInfo(mass, motionState, shape, localInertia);
-    const body = new AmmoLib.btRigidBody(rbInfo);
-    world.addRigidBody(body);
-    if (mass > 0) {
-      meshes.push(mesh);
-      meshMap.set(mesh, body);
-    }
-  }
-  function handleInstancedMesh(mesh, mass, shape) {
-    const array = mesh.instanceMatrix.array;
-    const bodies = [];
-    for (let i = 0; i < mesh.count; i++) {
-      const index = i * 16;
-      const transform = new AmmoLib.btTransform();
-      transform.setFromOpenGLMatrix(array.slice(index, index + 16));
-      const motionState = new AmmoLib.btDefaultMotionState(transform);
-      const localInertia = new AmmoLib.btVector3(0, 0, 0);
-      shape.calculateLocalInertia(mass, localInertia);
-      const rbInfo = new AmmoLib.btRigidBodyConstructionInfo(mass, motionState, shape, localInertia);
-      const body = new AmmoLib.btRigidBody(rbInfo);
-      world.addRigidBody(body);
-      bodies.push(body);
-    }
-    if (mass > 0) {
-      mesh.instanceMatrix.setUsage(35048);
-      meshes.push(mesh);
-      meshMap.set(mesh, bodies);
-    }
-  }
-  function setMeshPosition(mesh, position, index = 0) {
-    if (mesh.isInstancedMesh) {
-      const bodies = meshMap.get(mesh);
-      const body = bodies[index];
-      body.setAngularVelocity(new AmmoLib.btVector3(0, 0, 0));
-      body.setLinearVelocity(new AmmoLib.btVector3(0, 0, 0));
-      worldTransform.setIdentity();
-      worldTransform.setOrigin(new AmmoLib.btVector3(position.x, position.y, position.z));
-      body.setWorldTransform(worldTransform);
-    } else if (mesh.isMesh) {
-      const body = meshMap.get(mesh);
-      body.setAngularVelocity(new AmmoLib.btVector3(0, 0, 0));
-      body.setLinearVelocity(new AmmoLib.btVector3(0, 0, 0));
-      worldTransform.setIdentity();
-      worldTransform.setOrigin(new AmmoLib.btVector3(position.x, position.y, position.z));
-      body.setWorldTransform(worldTransform);
-    }
-  }
-  let lastTime = 0;
-  function step() {
-    const time = performance.now();
-    if (lastTime > 0) {
-      const delta = (time - lastTime) / 1e3;
-      world.stepSimulation(delta, 10);
-    }
-    lastTime = time;
-    for (let i = 0, l = meshes.length; i < l; i++) {
-      const mesh = meshes[i];
-      if (mesh.isInstancedMesh) {
-        const array = mesh.instanceMatrix.array;
-        const bodies = meshMap.get(mesh);
-        for (let j = 0; j < bodies.length; j++) {
-          const body = bodies[j];
-          const motionState = body.getMotionState();
-          motionState.getWorldTransform(worldTransform);
-          const position = worldTransform.getOrigin();
-          const quaternion = worldTransform.getRotation();
-          compose(position, quaternion, array, j * 16);
-        }
-        mesh.instanceMatrix.needsUpdate = true;
-      } else if (mesh.isMesh) {
-        const body = meshMap.get(mesh);
-        const motionState = body.getMotionState();
-        motionState.getWorldTransform(worldTransform);
-        const position = worldTransform.getOrigin();
-        const quaternion = worldTransform.getRotation();
-        mesh.position.set(position.x(), position.y(), position.z());
-        mesh.quaternion.set(quaternion.x(), quaternion.y(), quaternion.z(), quaternion.w());
-      }
-    }
-  }
-  setInterval(step, 1e3 / frameRate);
-  return {
-    addMesh,
-    setMeshPosition
-    // addCompoundMesh
-  };
-}
-function compose(position, quaternion, array, index) {
-  const x = quaternion.x(), y = quaternion.y(), z = quaternion.z(), w = quaternion.w();
-  const x2 = x + x, y2 = y + y, z2 = z + z;
-  const xx = x * x2, xy = x * y2, xz = x * z2;
-  const yy = y * y2, yz = y * z2, zz = z * z2;
-  const wx = w * x2, wy = w * y2, wz = w * z2;
-  array[index + 0] = 1 - (yy + zz);
-  array[index + 1] = xy + wz;
-  array[index + 2] = xz - wy;
-  array[index + 3] = 0;
-  array[index + 4] = xy - wz;
-  array[index + 5] = 1 - (xx + zz);
-  array[index + 6] = yz + wx;
-  array[index + 7] = 0;
-  array[index + 8] = xz + wy;
-  array[index + 9] = yz - wx;
-  array[index + 10] = 1 - (xx + yy);
-  array[index + 11] = 0;
-  array[index + 12] = position.x();
-  array[index + 13] = position.y();
-  array[index + 14] = position.z();
-  array[index + 15] = 1;
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/effects/ParallaxBarrierEffect.js
-
-class ParallaxBarrierEffect {
-  constructor(renderer) {
-    const _camera = new three_module.OrthographicCamera(-1, 1, 1, -1, 0, 1);
-    const _scene = new three_module.Scene();
-    const _stereo = new three_module.StereoCamera();
-    const _params = { minFilter: three_module.LinearFilter, magFilter: three_module.NearestFilter, format: three_module.RGBAFormat };
-    const _renderTargetL = new three_module.WebGLRenderTarget(512, 512, _params);
-    const _renderTargetR = new three_module.WebGLRenderTarget(512, 512, _params);
-    const _material = new three_module.ShaderMaterial({
-      uniforms: {
-        mapLeft: { value: _renderTargetL.texture },
-        mapRight: { value: _renderTargetR.texture }
-      },
-      vertexShader: [
-        "varying vec2 vUv;",
-        "void main() {",
-        "	vUv = vec2( uv.x, uv.y );",
-        "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-        "}"
-      ].join("\n"),
-      fragmentShader: [
-        "uniform sampler2D mapLeft;",
-        "uniform sampler2D mapRight;",
-        "varying vec2 vUv;",
-        "void main() {",
-        "	vec2 uv = vUv;",
-        "	if ( ( mod( gl_FragCoord.y, 2.0 ) ) > 1.00 ) {",
-        "		gl_FragColor = texture2D( mapLeft, uv );",
-        "	} else {",
-        "		gl_FragColor = texture2D( mapRight, uv );",
-        "	}",
-        "	#include <tonemapping_fragment>",
-        "	#include <encodings_fragment>",
-        "}"
-      ].join("\n")
-    });
-    const mesh = new three_module.Mesh(new three_module.PlaneGeometry(2, 2), _material);
-    _scene.add(mesh);
-    this.setSize = function(width, height) {
-      renderer.setSize(width, height);
-      const pixelRatio = renderer.getPixelRatio();
-      _renderTargetL.setSize(width * pixelRatio, height * pixelRatio);
-      _renderTargetR.setSize(width * pixelRatio, height * pixelRatio);
-    };
-    this.render = function(scene, camera) {
-      if (scene.matrixWorldAutoUpdate === true)
-        scene.updateMatrixWorld();
-      if (camera.parent === null && camera.matrixWorldAutoUpdate === true)
-        camera.updateMatrixWorld();
-      _stereo.update(camera);
-      renderer.setRenderTarget(_renderTargetL);
-      renderer.clear();
-      renderer.render(scene, _stereo.cameraL);
-      renderer.setRenderTarget(_renderTargetR);
-      renderer.clear();
-      renderer.render(scene, _stereo.cameraR);
-      renderer.setRenderTarget(null);
-      renderer.render(_scene, _camera);
-    };
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/effects/PeppersGhostEffect.js
-
-class PeppersGhostEffect {
-  constructor(renderer) {
-    const scope = this;
-    scope.cameraDistance = 15;
-    scope.reflectFromAbove = false;
-    let _halfWidth, _width, _height;
-    const _cameraF = new three_module.PerspectiveCamera();
-    const _cameraB = new three_module.PerspectiveCamera();
-    const _cameraL = new three_module.PerspectiveCamera();
-    const _cameraR = new three_module.PerspectiveCamera();
-    const _position = new three_module.Vector3();
-    const _quaternion = new three_module.Quaternion();
-    const _scale = new three_module.Vector3();
-    renderer.autoClear = false;
-    this.setSize = function(width, height) {
-      _halfWidth = width / 2;
-      if (width < height) {
-        _width = width / 3;
-        _height = width / 3;
-      } else {
-        _width = height / 3;
-        _height = height / 3;
-      }
-      renderer.setSize(width, height);
-    };
-    this.render = function(scene, camera) {
-      if (scene.matrixWorldAutoUpdate === true)
-        scene.updateMatrixWorld();
-      if (camera.parent === null && camera.matrixWorldAutoUpdate === true)
-        camera.updateMatrixWorld();
-      camera.matrixWorld.decompose(_position, _quaternion, _scale);
-      _cameraF.position.copy(_position);
-      _cameraF.quaternion.copy(_quaternion);
-      _cameraF.translateZ(scope.cameraDistance);
-      _cameraF.lookAt(scene.position);
-      _cameraB.position.copy(_position);
-      _cameraB.quaternion.copy(_quaternion);
-      _cameraB.translateZ(-scope.cameraDistance);
-      _cameraB.lookAt(scene.position);
-      _cameraB.rotation.z += 180 * (Math.PI / 180);
-      _cameraL.position.copy(_position);
-      _cameraL.quaternion.copy(_quaternion);
-      _cameraL.translateX(-scope.cameraDistance);
-      _cameraL.lookAt(scene.position);
-      _cameraL.rotation.x += 90 * (Math.PI / 180);
-      _cameraR.position.copy(_position);
-      _cameraR.quaternion.copy(_quaternion);
-      _cameraR.translateX(scope.cameraDistance);
-      _cameraR.lookAt(scene.position);
-      _cameraR.rotation.x += 90 * (Math.PI / 180);
-      renderer.clear();
-      renderer.setScissorTest(true);
-      renderer.setScissor(_halfWidth - _width / 2, _height * 2, _width, _height);
-      renderer.setViewport(_halfWidth - _width / 2, _height * 2, _width, _height);
-      if (scope.reflectFromAbove) {
-        renderer.render(scene, _cameraB);
-      } else {
-        renderer.render(scene, _cameraF);
-      }
-      renderer.setScissor(_halfWidth - _width / 2, 0, _width, _height);
-      renderer.setViewport(_halfWidth - _width / 2, 0, _width, _height);
-      if (scope.reflectFromAbove) {
-        renderer.render(scene, _cameraF);
-      } else {
-        renderer.render(scene, _cameraB);
-      }
-      renderer.setScissor(_halfWidth - _width / 2 - _width, _height, _width, _height);
-      renderer.setViewport(_halfWidth - _width / 2 - _width, _height, _width, _height);
-      if (scope.reflectFromAbove) {
-        renderer.render(scene, _cameraR);
-      } else {
-        renderer.render(scene, _cameraL);
-      }
-      renderer.setScissor(_halfWidth + _width / 2, _height, _width, _height);
-      renderer.setViewport(_halfWidth + _width / 2, _height, _width, _height);
-      if (scope.reflectFromAbove) {
-        renderer.render(scene, _cameraL);
-      } else {
-        renderer.render(scene, _cameraR);
-      }
-      renderer.setScissorTest(false);
-    };
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/effects/OutlineEffect.js
-
-class OutlineEffect {
-  constructor(renderer, parameters = {}) {
-    this.enabled = true;
-    const defaultThickness = parameters.defaultThickness !== void 0 ? parameters.defaultThickness : 3e-3;
-    const defaultColor = new three_module.Color().fromArray(
-      parameters.defaultColor !== void 0 ? parameters.defaultColor : [0, 0, 0]
-    );
-    const defaultAlpha = parameters.defaultAlpha !== void 0 ? parameters.defaultAlpha : 1;
-    const defaultKeepAlive = parameters.defaultKeepAlive !== void 0 ? parameters.defaultKeepAlive : false;
-    const cache = {};
-    const removeThresholdCount = 60;
-    const originalMaterials = {};
-    const originalOnBeforeRenders = {};
-    const uniformsOutline = {
-      outlineThickness: { value: defaultThickness },
-      outlineColor: { value: defaultColor },
-      outlineAlpha: { value: defaultAlpha }
-    };
-    const vertexShader = [
-      "#include <common>",
-      "#include <uv_pars_vertex>",
-      "#include <displacementmap_pars_vertex>",
-      "#include <fog_pars_vertex>",
-      "#include <morphtarget_pars_vertex>",
-      "#include <skinning_pars_vertex>",
-      "#include <logdepthbuf_pars_vertex>",
-      "#include <clipping_planes_pars_vertex>",
-      "uniform float outlineThickness;",
-      "vec4 calculateOutline( vec4 pos, vec3 normal, vec4 skinned ) {",
-      "	float thickness = outlineThickness;",
-      "	const float ratio = 1.0;",
-      // TODO: support outline thickness ratio for each vertex
-      "	vec4 pos2 = projectionMatrix * modelViewMatrix * vec4( skinned.xyz + normal, 1.0 );",
-      // NOTE: subtract pos2 from pos because BackSide objectNormal is negative
-      "	vec4 norm = normalize( pos - pos2 );",
-      "	return pos + norm * thickness * pos.w * ratio;",
-      "}",
-      "void main() {",
-      "	#include <uv_vertex>",
-      "	#include <beginnormal_vertex>",
-      "	#include <morphnormal_vertex>",
-      "	#include <skinbase_vertex>",
-      "	#include <skinnormal_vertex>",
-      "	#include <begin_vertex>",
-      "	#include <morphtarget_vertex>",
-      "	#include <skinning_vertex>",
-      "	#include <displacementmap_vertex>",
-      "	#include <project_vertex>",
-      "	vec3 outlineNormal = - objectNormal;",
-      // the outline material is always rendered with BackSide
-      "	gl_Position = calculateOutline( gl_Position, outlineNormal, vec4( transformed, 1.0 ) );",
-      "	#include <logdepthbuf_vertex>",
-      "	#include <clipping_planes_vertex>",
-      "	#include <fog_vertex>",
-      "}"
-    ].join("\n");
-    const fragmentShader = [
-      "#include <common>",
-      "#include <fog_pars_fragment>",
-      "#include <logdepthbuf_pars_fragment>",
-      "#include <clipping_planes_pars_fragment>",
-      "uniform vec3 outlineColor;",
-      "uniform float outlineAlpha;",
-      "void main() {",
-      "	#include <clipping_planes_fragment>",
-      "	#include <logdepthbuf_fragment>",
-      "	gl_FragColor = vec4( outlineColor, outlineAlpha );",
-      "	#include <tonemapping_fragment>",
-      "	#include <encodings_fragment>",
-      "	#include <fog_fragment>",
-      "	#include <premultiplied_alpha_fragment>",
-      "}"
-    ].join("\n");
-    function createMaterial() {
-      return new three_module.ShaderMaterial({
-        type: "OutlineEffect",
-        uniforms: three_module.UniformsUtils.merge([three_module.UniformsLib.fog, three_module.UniformsLib.displacementmap, uniformsOutline]),
-        vertexShader,
-        fragmentShader,
-        side: three_module.BackSide
-      });
-    }
-    function getOutlineMaterialFromCache(originalMaterial) {
-      let data = cache[originalMaterial.uuid];
-      if (data === void 0) {
-        data = {
-          material: createMaterial(),
-          used: true,
-          keepAlive: defaultKeepAlive,
-          count: 0
-        };
-        cache[originalMaterial.uuid] = data;
-      }
-      data.used = true;
-      return data.material;
-    }
-    function getOutlineMaterial(originalMaterial) {
-      const outlineMaterial = getOutlineMaterialFromCache(originalMaterial);
-      originalMaterials[outlineMaterial.uuid] = originalMaterial;
-      updateOutlineMaterial(outlineMaterial, originalMaterial);
-      return outlineMaterial;
-    }
-    function isCompatible(object) {
-      const geometry = object.geometry;
-      const hasNormals = geometry !== void 0 && geometry.attributes.normal !== void 0;
-      return object.isMesh === true && object.material !== void 0 && hasNormals === true;
-    }
-    function setOutlineMaterial(object) {
-      if (isCompatible(object) === false)
-        return;
-      if (Array.isArray(object.material)) {
-        for (let i = 0, il = object.material.length; i < il; i++) {
-          object.material[i] = getOutlineMaterial(object.material[i]);
-        }
-      } else {
-        object.material = getOutlineMaterial(object.material);
-      }
-      originalOnBeforeRenders[object.uuid] = object.onBeforeRender;
-      object.onBeforeRender = onBeforeRender;
-    }
-    function restoreOriginalMaterial(object) {
-      if (isCompatible(object) === false)
-        return;
-      if (Array.isArray(object.material)) {
-        for (let i = 0, il = object.material.length; i < il; i++) {
-          object.material[i] = originalMaterials[object.material[i].uuid];
-        }
-      } else {
-        object.material = originalMaterials[object.material.uuid];
-      }
-      object.onBeforeRender = originalOnBeforeRenders[object.uuid];
-    }
-    function onBeforeRender(renderer2, scene, camera, geometry, material) {
-      const originalMaterial = originalMaterials[material.uuid];
-      if (originalMaterial === void 0)
-        return;
-      updateUniforms(material, originalMaterial);
-    }
-    function updateUniforms(material, originalMaterial) {
-      const outlineParameters = originalMaterial.userData.outlineParameters;
-      material.uniforms.outlineAlpha.value = originalMaterial.opacity;
-      if (outlineParameters !== void 0) {
-        if (outlineParameters.thickness !== void 0)
-          material.uniforms.outlineThickness.value = outlineParameters.thickness;
-        if (outlineParameters.color !== void 0)
-          material.uniforms.outlineColor.value.fromArray(outlineParameters.color);
-        if (outlineParameters.alpha !== void 0)
-          material.uniforms.outlineAlpha.value = outlineParameters.alpha;
-      }
-      if (originalMaterial.displacementMap) {
-        material.uniforms.displacementMap.value = originalMaterial.displacementMap;
-        material.uniforms.displacementScale.value = originalMaterial.displacementScale;
-        material.uniforms.displacementBias.value = originalMaterial.displacementBias;
-      }
-    }
-    function updateOutlineMaterial(material, originalMaterial) {
-      if (material.name === "invisible")
-        return;
-      const outlineParameters = originalMaterial.userData.outlineParameters;
-      material.fog = originalMaterial.fog;
-      material.toneMapped = originalMaterial.toneMapped;
-      material.premultipliedAlpha = originalMaterial.premultipliedAlpha;
-      material.displacementMap = originalMaterial.displacementMap;
-      if (outlineParameters !== void 0) {
-        if (originalMaterial.visible === false) {
-          material.visible = false;
-        } else {
-          material.visible = outlineParameters.visible !== void 0 ? outlineParameters.visible : true;
-        }
-        material.transparent = outlineParameters.alpha !== void 0 && outlineParameters.alpha < 1 ? true : originalMaterial.transparent;
-        if (outlineParameters.keepAlive !== void 0)
-          cache[originalMaterial.uuid].keepAlive = outlineParameters.keepAlive;
-      } else {
-        material.transparent = originalMaterial.transparent;
-        material.visible = originalMaterial.visible;
-      }
-      if (originalMaterial.wireframe === true || originalMaterial.depthTest === false)
-        material.visible = false;
-      if (originalMaterial.clippingPlanes) {
-        material.clipping = true;
-        material.clippingPlanes = originalMaterial.clippingPlanes;
-        material.clipIntersection = originalMaterial.clipIntersection;
-        material.clipShadows = originalMaterial.clipShadows;
-      }
-      material.version = originalMaterial.version;
-    }
-    function cleanupCache() {
-      let keys;
-      keys = Object.keys(originalMaterials);
-      for (let i = 0, il = keys.length; i < il; i++) {
-        originalMaterials[keys[i]] = void 0;
-      }
-      keys = Object.keys(originalOnBeforeRenders);
-      for (let i = 0, il = keys.length; i < il; i++) {
-        originalOnBeforeRenders[keys[i]] = void 0;
-      }
-      keys = Object.keys(cache);
-      for (let i = 0, il = keys.length; i < il; i++) {
-        const key = keys[i];
-        if (cache[key].used === false) {
-          cache[key].count++;
-          if (cache[key].keepAlive === false && cache[key].count > removeThresholdCount) {
-            delete cache[key];
-          }
-        } else {
-          cache[key].used = false;
-          cache[key].count = 0;
-        }
-      }
-    }
-    this.render = function(scene, camera) {
-      if (this.enabled === false) {
-        renderer.render(scene, camera);
-        return;
-      }
-      const currentAutoClear = renderer.autoClear;
-      renderer.autoClear = this.autoClear;
-      renderer.render(scene, camera);
-      renderer.autoClear = currentAutoClear;
-      this.renderOutline(scene, camera);
-    };
-    this.renderOutline = function(scene, camera) {
-      const currentAutoClear = renderer.autoClear;
-      const currentSceneAutoUpdate = scene.matrixWorldAutoUpdate;
-      const currentSceneBackground = scene.background;
-      const currentShadowMapEnabled = renderer.shadowMap.enabled;
-      scene.matrixWorldAutoUpdate = false;
-      scene.background = null;
-      renderer.autoClear = false;
-      renderer.shadowMap.enabled = false;
-      scene.traverse(setOutlineMaterial);
-      renderer.render(scene, camera);
-      scene.traverse(restoreOriginalMaterial);
-      cleanupCache();
-      scene.matrixWorldAutoUpdate = currentSceneAutoUpdate;
-      scene.background = currentSceneBackground;
-      renderer.autoClear = currentAutoClear;
-      renderer.shadowMap.enabled = currentShadowMapEnabled;
-    };
-    this.autoClear = renderer.autoClear;
-    this.domElement = renderer.domElement;
-    this.shadowMap = renderer.shadowMap;
-    this.clear = function(color, depth, stencil) {
-      renderer.clear(color, depth, stencil);
-    };
-    this.getPixelRatio = function() {
-      return renderer.getPixelRatio();
-    };
-    this.setPixelRatio = function(value) {
-      renderer.setPixelRatio(value);
-    };
-    this.getSize = function(target) {
-      return renderer.getSize(target);
-    };
-    this.setSize = function(width, height, updateStyle) {
-      renderer.setSize(width, height, updateStyle);
-    };
-    this.setViewport = function(x, y, width, height) {
-      renderer.setViewport(x, y, width, height);
-    };
-    this.setScissor = function(x, y, width, height) {
-      renderer.setScissor(x, y, width, height);
-    };
-    this.setScissorTest = function(boolean) {
-      renderer.setScissorTest(boolean);
-    };
-    this.setRenderTarget = function(renderTarget) {
-      renderer.setRenderTarget(renderTarget);
-    };
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/effects/AnaglyphEffect.js
-
-class AnaglyphEffect {
-  constructor(renderer, width = 512, height = 512) {
-    this.colorMatrixLeft = new three_module.Matrix3().fromArray([
-      0.4561,
-      -0.0400822,
-      -0.0152161,
-      0.500484,
-      -0.0378246,
-      -0.0205971,
-      0.176381,
-      -0.0157589,
-      -546856e-8
-    ]);
-    this.colorMatrixRight = new three_module.Matrix3().fromArray([
-      -0.0434706,
-      0.378476,
-      -0.0721527,
-      -0.0879388,
-      0.73364,
-      -0.112961,
-      -155529e-8,
-      -0.0184503,
-      1.2264
-    ]);
-    const _camera = new three_module.OrthographicCamera(-1, 1, 1, -1, 0, 1);
-    const _scene = new three_module.Scene();
-    const _stereo = new three_module.StereoCamera();
-    const _params = { minFilter: three_module.LinearFilter, magFilter: three_module.NearestFilter, format: three_module.RGBAFormat };
-    const _renderTargetL = new three_module.WebGLRenderTarget(width, height, _params);
-    const _renderTargetR = new three_module.WebGLRenderTarget(width, height, _params);
-    const _material = new three_module.ShaderMaterial({
-      uniforms: {
-        mapLeft: { value: _renderTargetL.texture },
-        mapRight: { value: _renderTargetR.texture },
-        colorMatrixLeft: { value: this.colorMatrixLeft },
-        colorMatrixRight: { value: this.colorMatrixRight }
-      },
-      vertexShader: [
-        "varying vec2 vUv;",
-        "void main() {",
-        "	vUv = vec2( uv.x, uv.y );",
-        "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-        "}"
-      ].join("\n"),
-      fragmentShader: [
-        "uniform sampler2D mapLeft;",
-        "uniform sampler2D mapRight;",
-        "varying vec2 vUv;",
-        "uniform mat3 colorMatrixLeft;",
-        "uniform mat3 colorMatrixRight;",
-        "void main() {",
-        "	vec2 uv = vUv;",
-        "	vec4 colorL = texture2D( mapLeft, uv );",
-        "	vec4 colorR = texture2D( mapRight, uv );",
-        "	vec3 color = clamp(",
-        "			colorMatrixLeft * colorL.rgb +",
-        "			colorMatrixRight * colorR.rgb, 0., 1. );",
-        "	gl_FragColor = vec4(",
-        "			color.r, color.g, color.b,",
-        "			max( colorL.a, colorR.a ) );",
-        "	#include <tonemapping_fragment>",
-        "	#include <encodings_fragment>",
-        "}"
-      ].join("\n")
-    });
-    const _mesh = new three_module.Mesh(new three_module.PlaneGeometry(2, 2), _material);
-    _scene.add(_mesh);
-    this.setSize = function(width2, height2) {
-      renderer.setSize(width2, height2);
-      const pixelRatio = renderer.getPixelRatio();
-      _renderTargetL.setSize(width2 * pixelRatio, height2 * pixelRatio);
-      _renderTargetR.setSize(width2 * pixelRatio, height2 * pixelRatio);
-    };
-    this.render = function(scene, camera) {
-      const currentRenderTarget = renderer.getRenderTarget();
-      if (scene.matrixWorldAutoUpdate === true)
-        scene.updateMatrixWorld();
-      if (camera.parent === null && camera.matrixWorldAutoUpdate === true)
-        camera.updateMatrixWorld();
-      _stereo.update(camera);
-      renderer.setRenderTarget(_renderTargetL);
-      renderer.clear();
-      renderer.render(scene, _stereo.cameraL);
-      renderer.setRenderTarget(_renderTargetR);
-      renderer.clear();
-      renderer.render(scene, _stereo.cameraR);
-      renderer.setRenderTarget(null);
-      renderer.render(_scene, _camera);
-      renderer.setRenderTarget(currentRenderTarget);
-    };
-    this.dispose = function() {
-      _renderTargetL.dispose();
-      _renderTargetR.dispose();
-      _mesh.geometry.dispose();
-      _mesh.material.dispose();
-    };
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/effects/AsciiEffect.js
-class AsciiEffect {
-  constructor(renderer, charSet = " .:-=+*#%@", options = {}) {
-    const fResolution = options["resolution"] || 0.15;
-    const iScale = options["scale"] || 1;
-    const bColor = options["color"] || false;
-    const bAlpha = options["alpha"] || false;
-    const bBlock = options["block"] || false;
-    const bInvert = options["invert"] || false;
-    const strResolution = options["strResolution"] || "low";
-    let width, height;
-    const domElement = document.createElement("div");
-    domElement.style.cursor = "default";
-    const oAscii = document.createElement("table");
-    domElement.appendChild(oAscii);
-    let iWidth, iHeight;
-    let oImg;
-    this.setSize = function(w, h) {
-      width = w;
-      height = h;
-      renderer.setSize(w, h);
-      initAsciiSize();
-    };
-    this.render = function(scene, camera) {
-      renderer.render(scene, camera);
-      asciifyImage(oAscii);
-    };
-    this.domElement = domElement;
-    function initAsciiSize() {
-      iWidth = Math.floor(width * fResolution);
-      iHeight = Math.floor(height * fResolution);
-      oCanvas.width = iWidth;
-      oCanvas.height = iHeight;
-      oImg = renderer.domElement;
-      if (oImg.style.backgroundColor) {
-        oAscii.rows[0].cells[0].style.backgroundColor = oImg.style.backgroundColor;
-        oAscii.rows[0].cells[0].style.color = oImg.style.color;
-      }
-      oAscii.cellSpacing = 0;
-      oAscii.cellPadding = 0;
-      const oStyle = oAscii.style;
-      oStyle.whiteSpace = "pre";
-      oStyle.margin = "0px";
-      oStyle.padding = "0px";
-      oStyle.letterSpacing = fLetterSpacing + "px";
-      oStyle.fontFamily = strFont;
-      oStyle.fontSize = fFontSize + "px";
-      oStyle.lineHeight = fLineHeight + "px";
-      oStyle.textAlign = "left";
-      oStyle.textDecoration = "none";
-    }
-    const aDefaultCharList = " .,:;i1tfLCG08@".split("");
-    const aDefaultColorCharList = " CGO08@".split("");
-    const strFont = "courier new, monospace";
-    const oCanvasImg = renderer.domElement;
-    const oCanvas = document.createElement("canvas");
-    if (!oCanvas.getContext) {
-      return;
-    }
-    const oCtx = oCanvas.getContext("2d");
-    if (!oCtx.getImageData) {
-      return;
-    }
-    let aCharList = bColor ? aDefaultColorCharList : aDefaultCharList;
-    if (charSet)
-      aCharList = charSet;
-    const fFontSize = 2 / fResolution * iScale;
-    const fLineHeight = 2 / fResolution * iScale;
-    let fLetterSpacing = 0;
-    if (strResolution == "low") {
-      switch (iScale) {
-        case 1:
-          fLetterSpacing = -1;
-          break;
-        case 2:
-        case 3:
-          fLetterSpacing = -2.1;
-          break;
-        case 4:
-          fLetterSpacing = -3.1;
-          break;
-        case 5:
-          fLetterSpacing = -4.15;
-          break;
-      }
-    }
-    if (strResolution == "medium") {
-      switch (iScale) {
-        case 1:
-          fLetterSpacing = 0;
-          break;
-        case 2:
-          fLetterSpacing = -1;
-          break;
-        case 3:
-          fLetterSpacing = -1.04;
-          break;
-        case 4:
-        case 5:
-          fLetterSpacing = -2.1;
-          break;
-      }
-    }
-    if (strResolution == "high") {
-      switch (iScale) {
-        case 1:
-        case 2:
-          fLetterSpacing = 0;
-          break;
-        case 3:
-        case 4:
-        case 5:
-          fLetterSpacing = -1;
-          break;
-      }
-    }
-    function asciifyImage(oAscii2) {
-      oCtx.clearRect(0, 0, iWidth, iHeight);
-      oCtx.drawImage(oCanvasImg, 0, 0, iWidth, iHeight);
-      const oImgData = oCtx.getImageData(0, 0, iWidth, iHeight).data;
-      let strChars = "";
-      for (let y = 0; y < iHeight; y += 2) {
-        for (let x = 0; x < iWidth; x++) {
-          const iOffset = (y * iWidth + x) * 4;
-          const iRed = oImgData[iOffset];
-          const iGreen = oImgData[iOffset + 1];
-          const iBlue = oImgData[iOffset + 2];
-          const iAlpha = oImgData[iOffset + 3];
-          let iCharIdx;
-          let fBrightness;
-          fBrightness = (0.3 * iRed + 0.59 * iGreen + 0.11 * iBlue) / 255;
-          if (iAlpha == 0) {
-            fBrightness = 1;
-          }
-          iCharIdx = Math.floor((1 - fBrightness) * (aCharList.length - 1));
-          if (bInvert) {
-            iCharIdx = aCharList.length - iCharIdx - 1;
-          }
-          let strThisChar = aCharList[iCharIdx];
-          if (strThisChar === void 0 || strThisChar == " ")
-            strThisChar = " ";
-          if (bColor) {
-            strChars += "<span style='color:rgb(" + iRed + "," + iGreen + "," + iBlue + ");" + (bBlock ? "background-color:rgb(" + iRed + "," + iGreen + "," + iBlue + ");" : "") + (bAlpha ? "opacity:" + iAlpha / 255 + ";" : "") + "'>" + strThisChar + "</span>";
-          } else {
-            strChars += strThisChar;
-          }
-        }
-        strChars += "<br/>";
-      }
-      oAscii2.innerHTML = `<tr><td style="display:block;width:${width}px;height:${height}px;overflow:hidden">${strChars}</td></tr>`;
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/effects/StereoEffect.js
-
-class StereoEffect {
-  constructor(renderer) {
-    const _stereo = new three_module.StereoCamera();
-    _stereo.aspect = 0.5;
-    const size = new three_module.Vector2();
-    this.setEyeSeparation = function(eyeSep) {
-      _stereo.eyeSep = eyeSep;
-    };
-    this.setSize = function(width, height) {
-      renderer.setSize(width, height);
-    };
-    this.render = function(scene, camera) {
-      if (scene.matrixWorldAutoUpdate === true)
-        scene.updateMatrixWorld();
-      if (camera.parent === null && camera.matrixWorldAutoUpdate === true)
-        camera.updateMatrixWorld();
-      _stereo.update(camera);
-      renderer.getSize(size);
-      if (renderer.autoClear)
-        renderer.clear();
-      renderer.setScissorTest(true);
-      renderer.setScissor(0, 0, size.width / 2, size.height);
-      renderer.setViewport(0, 0, size.width / 2, size.height);
-      renderer.render(scene, _stereo.cameraL);
-      renderer.setScissor(size.width / 2, 0, size.width / 2, size.height);
-      renderer.setViewport(size.width / 2, 0, size.width / 2, size.height);
-      renderer.render(scene, _stereo.cameraR);
-      renderer.setScissorTest(false);
-    };
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/loaders/FBXLoader.js
-var FBXLoader = __webpack_require__(43953);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/FontLoader.js
-var FontLoader_defProp = Object.defineProperty;
-var FontLoader_defNormalProp = (obj, key, value) => key in obj ? FontLoader_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var FontLoader_publicField = (obj, key, value) => {
-  FontLoader_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-class FontLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setRequestHeader(this.requestHeader);
-    loader.setWithCredentials(this.withCredentials);
-    loader.load(
-      url,
-      (response) => {
-        if (typeof response !== "string")
-          throw new Error("unsupported data type");
-        const json = JSON.parse(response);
-        const font = this.parse(json);
-        if (onLoad)
-          onLoad(font);
-      },
-      onProgress,
-      onError
-    );
-  }
-  loadAsync(url, onProgress) {
-    return super.loadAsync(url, onProgress);
-  }
-  parse(json) {
-    return new Font(json);
-  }
-}
-class Font {
-  constructor(data) {
-    FontLoader_publicField(this, "data");
-    this.data = data;
-  }
-  generateShapes(text, size = 100, _options) {
-    const shapes = [];
-    const options = { letterSpacing: 0, lineHeight: 1, ..._options };
-    const paths = createPaths(text, size, this.data, options);
-    for (let p = 0, pl = paths.length; p < pl; p++) {
-      Array.prototype.push.apply(shapes, paths[p].toShapes(false));
-    }
-    return shapes;
-  }
-}
-FontLoader_publicField(Font, "isFont");
-FontLoader_publicField(Font, "type");
-function createPaths(text, size, data, options) {
-  const chars = Array.from(text);
-  const scale = size / data.resolution;
-  const line_height = (data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness) * scale;
-  const paths = [];
-  let offsetX = 0, offsetY = 0;
-  for (let i = 0; i < chars.length; i++) {
-    const char = chars[i];
-    if (char === "\n") {
-      offsetX = 0;
-      offsetY -= line_height * options.lineHeight;
-    } else {
-      const ret = createPath(char, scale, offsetX, offsetY, data);
-      if (ret) {
-        offsetX += ret.offsetX + options.letterSpacing;
-        paths.push(ret.path);
-      }
-    }
-  }
-  return paths;
-}
-function createPath(char, scale, offsetX, offsetY, data) {
-  const glyph = data.glyphs[char] || data.glyphs["?"];
-  if (!glyph) {
-    console.error('THREE.Font: character "' + char + '" does not exists in font family ' + data.familyName + ".");
-    return;
-  }
-  const path = new three_module.ShapePath();
-  let x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;
-  if (glyph.o) {
-    const outline = glyph._cachedOutline || (glyph._cachedOutline = glyph.o.split(" "));
-    for (let i = 0, l = outline.length; i < l; ) {
-      const action = outline[i++];
-      switch (action) {
-        case "m":
-          x = parseInt(outline[i++]) * scale + offsetX;
-          y = parseInt(outline[i++]) * scale + offsetY;
-          path.moveTo(x, y);
-          break;
-        case "l":
-          x = parseInt(outline[i++]) * scale + offsetX;
-          y = parseInt(outline[i++]) * scale + offsetY;
-          path.lineTo(x, y);
-          break;
-        case "q":
-          cpx = parseInt(outline[i++]) * scale + offsetX;
-          cpy = parseInt(outline[i++]) * scale + offsetY;
-          cpx1 = parseInt(outline[i++]) * scale + offsetX;
-          cpy1 = parseInt(outline[i++]) * scale + offsetY;
-          path.quadraticCurveTo(cpx1, cpy1, cpx, cpy);
-          break;
-        case "b":
-          cpx = parseInt(outline[i++]) * scale + offsetX;
-          cpy = parseInt(outline[i++]) * scale + offsetY;
-          cpx1 = parseInt(outline[i++]) * scale + offsetX;
-          cpy1 = parseInt(outline[i++]) * scale + offsetY;
-          cpx2 = parseInt(outline[i++]) * scale + offsetX;
-          cpy2 = parseInt(outline[i++]) * scale + offsetY;
-          path.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, cpx, cpy);
-          break;
-      }
-    }
-  }
-  return { offsetX: glyph.ha * scale, path };
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/TGALoader.js
-
-class TGALoader extends three_module.DataTextureLoader {
-  constructor(manager) {
-    super(manager);
-  }
-  parse(buffer) {
-    function tgaCheckHeader(header2) {
-      switch (header2.image_type) {
-        case TGA_TYPE_INDEXED:
-        case TGA_TYPE_RLE_INDEXED:
-          if (header2.colormap_length > 256 || header2.colormap_size !== 24 || header2.colormap_type !== 1) {
-            console.error("THREE.TGALoader: Invalid type colormap data for indexed type.");
-          }
-          break;
-        case TGA_TYPE_RGB:
-        case TGA_TYPE_GREY:
-        case TGA_TYPE_RLE_RGB:
-        case TGA_TYPE_RLE_GREY:
-          if (header2.colormap_type) {
-            console.error("THREE.TGALoader: Invalid type colormap data for colormap type.");
-          }
-          break;
-        case TGA_TYPE_NO_DATA:
-          console.error("THREE.TGALoader: No data.");
-        default:
-          console.error('THREE.TGALoader: Invalid type "%s".', header2.image_type);
-      }
-      if (header2.width <= 0 || header2.height <= 0) {
-        console.error("THREE.TGALoader: Invalid image size.");
-      }
-      if (header2.pixel_size !== 8 && header2.pixel_size !== 16 && header2.pixel_size !== 24 && header2.pixel_size !== 32) {
-        console.error('THREE.TGALoader: Invalid pixel size "%s".', header2.pixel_size);
-      }
-    }
-    function tgaParse(use_rle2, use_pal2, header2, offset2, data) {
-      let pixel_data, palettes;
-      const pixel_size = header2.pixel_size >> 3;
-      const pixel_total = header2.width * header2.height * pixel_size;
-      if (use_pal2) {
-        palettes = data.subarray(offset2, offset2 += header2.colormap_length * (header2.colormap_size >> 3));
-      }
-      if (use_rle2) {
-        pixel_data = new Uint8Array(pixel_total);
-        let c, count, i;
-        let shift = 0;
-        const pixels = new Uint8Array(pixel_size);
-        while (shift < pixel_total) {
-          c = data[offset2++];
-          count = (c & 127) + 1;
-          if (c & 128) {
-            for (i = 0; i < pixel_size; ++i) {
-              pixels[i] = data[offset2++];
-            }
-            for (i = 0; i < count; ++i) {
-              pixel_data.set(pixels, shift + i * pixel_size);
-            }
-            shift += pixel_size * count;
-          } else {
-            count *= pixel_size;
-            for (i = 0; i < count; ++i) {
-              pixel_data[shift + i] = data[offset2++];
-            }
-            shift += count;
-          }
-        }
-      } else {
-        pixel_data = data.subarray(offset2, offset2 += use_pal2 ? header2.width * header2.height : pixel_total);
-      }
-      return {
-        pixel_data,
-        palettes
-      };
-    }
-    function tgaGetImageData8bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image, palettes) {
-      const colormap = palettes;
-      let color, i = 0, x, y;
-      const width = header.width;
-      for (y = y_start; y !== y_end; y += y_step) {
-        for (x = x_start; x !== x_end; x += x_step, i++) {
-          color = image[i];
-          imageData2[(x + width * y) * 4 + 3] = 255;
-          imageData2[(x + width * y) * 4 + 2] = colormap[color * 3 + 0];
-          imageData2[(x + width * y) * 4 + 1] = colormap[color * 3 + 1];
-          imageData2[(x + width * y) * 4 + 0] = colormap[color * 3 + 2];
-        }
-      }
-      return imageData2;
-    }
-    function tgaGetImageData16bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) {
-      let color, i = 0, x, y;
-      const width = header.width;
-      for (y = y_start; y !== y_end; y += y_step) {
-        for (x = x_start; x !== x_end; x += x_step, i += 2) {
-          color = image[i + 0] + (image[i + 1] << 8);
-          imageData2[(x + width * y) * 4 + 0] = (color & 31744) >> 7;
-          imageData2[(x + width * y) * 4 + 1] = (color & 992) >> 2;
-          imageData2[(x + width * y) * 4 + 2] = (color & 31) >> 3;
-          imageData2[(x + width * y) * 4 + 3] = color & 32768 ? 0 : 255;
-        }
-      }
-      return imageData2;
-    }
-    function tgaGetImageData24bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) {
-      let i = 0, x, y;
-      const width = header.width;
-      for (y = y_start; y !== y_end; y += y_step) {
-        for (x = x_start; x !== x_end; x += x_step, i += 3) {
-          imageData2[(x + width * y) * 4 + 3] = 255;
-          imageData2[(x + width * y) * 4 + 2] = image[i + 0];
-          imageData2[(x + width * y) * 4 + 1] = image[i + 1];
-          imageData2[(x + width * y) * 4 + 0] = image[i + 2];
-        }
-      }
-      return imageData2;
-    }
-    function tgaGetImageData32bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) {
-      let i = 0, x, y;
-      const width = header.width;
-      for (y = y_start; y !== y_end; y += y_step) {
-        for (x = x_start; x !== x_end; x += x_step, i += 4) {
-          imageData2[(x + width * y) * 4 + 2] = image[i + 0];
-          imageData2[(x + width * y) * 4 + 1] = image[i + 1];
-          imageData2[(x + width * y) * 4 + 0] = image[i + 2];
-          imageData2[(x + width * y) * 4 + 3] = image[i + 3];
-        }
-      }
-      return imageData2;
-    }
-    function tgaGetImageDataGrey8bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) {
-      let color, i = 0, x, y;
-      const width = header.width;
-      for (y = y_start; y !== y_end; y += y_step) {
-        for (x = x_start; x !== x_end; x += x_step, i++) {
-          color = image[i];
-          imageData2[(x + width * y) * 4 + 0] = color;
-          imageData2[(x + width * y) * 4 + 1] = color;
-          imageData2[(x + width * y) * 4 + 2] = color;
-          imageData2[(x + width * y) * 4 + 3] = 255;
-        }
-      }
-      return imageData2;
-    }
-    function tgaGetImageDataGrey16bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) {
-      let i = 0, x, y;
-      const width = header.width;
-      for (y = y_start; y !== y_end; y += y_step) {
-        for (x = x_start; x !== x_end; x += x_step, i += 2) {
-          imageData2[(x + width * y) * 4 + 0] = image[i + 0];
-          imageData2[(x + width * y) * 4 + 1] = image[i + 0];
-          imageData2[(x + width * y) * 4 + 2] = image[i + 0];
-          imageData2[(x + width * y) * 4 + 3] = image[i + 1];
-        }
-      }
-      return imageData2;
-    }
-    function getTgaRGBA(data, width, height, image, palette) {
-      let x_start, y_start, x_step, y_step, x_end, y_end;
-      switch ((header.flags & TGA_ORIGIN_MASK) >> TGA_ORIGIN_SHIFT) {
-        default:
-        case TGA_ORIGIN_UL:
-          x_start = 0;
-          x_step = 1;
-          x_end = width;
-          y_start = 0;
-          y_step = 1;
-          y_end = height;
-          break;
-        case TGA_ORIGIN_BL:
-          x_start = 0;
-          x_step = 1;
-          x_end = width;
-          y_start = height - 1;
-          y_step = -1;
-          y_end = -1;
-          break;
-        case TGA_ORIGIN_UR:
-          x_start = width - 1;
-          x_step = -1;
-          x_end = -1;
-          y_start = 0;
-          y_step = 1;
-          y_end = height;
-          break;
-        case TGA_ORIGIN_BR:
-          x_start = width - 1;
-          x_step = -1;
-          x_end = -1;
-          y_start = height - 1;
-          y_step = -1;
-          y_end = -1;
-          break;
-      }
-      if (use_grey) {
-        switch (header.pixel_size) {
-          case 8:
-            tgaGetImageDataGrey8bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image);
-            break;
-          case 16:
-            tgaGetImageDataGrey16bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image);
-            break;
-          default:
-            console.error("THREE.TGALoader: Format not supported.");
-            break;
-        }
-      } else {
-        switch (header.pixel_size) {
-          case 8:
-            tgaGetImageData8bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image, palette);
-            break;
-          case 16:
-            tgaGetImageData16bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image);
-            break;
-          case 24:
-            tgaGetImageData24bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image);
-            break;
-          case 32:
-            tgaGetImageData32bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image);
-            break;
-          default:
-            console.error("THREE.TGALoader: Format not supported.");
-            break;
-        }
-      }
-      return data;
-    }
-    const TGA_TYPE_NO_DATA = 0, TGA_TYPE_INDEXED = 1, TGA_TYPE_RGB = 2, TGA_TYPE_GREY = 3, TGA_TYPE_RLE_INDEXED = 9, TGA_TYPE_RLE_RGB = 10, TGA_TYPE_RLE_GREY = 11, TGA_ORIGIN_MASK = 48, TGA_ORIGIN_SHIFT = 4, TGA_ORIGIN_BL = 0, TGA_ORIGIN_BR = 1, TGA_ORIGIN_UL = 2, TGA_ORIGIN_UR = 3;
-    if (buffer.length < 19)
-      console.error("THREE.TGALoader: Not enough data to contain header.");
-    let offset = 0;
-    const content = new Uint8Array(buffer), header = {
-      id_length: content[offset++],
-      colormap_type: content[offset++],
-      image_type: content[offset++],
-      colormap_index: content[offset++] | content[offset++] << 8,
-      colormap_length: content[offset++] | content[offset++] << 8,
-      colormap_size: content[offset++],
-      origin: [content[offset++] | content[offset++] << 8, content[offset++] | content[offset++] << 8],
-      width: content[offset++] | content[offset++] << 8,
-      height: content[offset++] | content[offset++] << 8,
-      pixel_size: content[offset++],
-      flags: content[offset++]
-    };
-    tgaCheckHeader(header);
-    if (header.id_length + offset > buffer.length) {
-      console.error("THREE.TGALoader: No data.");
-    }
-    offset += header.id_length;
-    let use_rle = false, use_pal = false, use_grey = false;
-    switch (header.image_type) {
-      case TGA_TYPE_RLE_INDEXED:
-        use_rle = true;
-        use_pal = true;
-        break;
-      case TGA_TYPE_INDEXED:
-        use_pal = true;
-        break;
-      case TGA_TYPE_RLE_RGB:
-        use_rle = true;
-        break;
-      case TGA_TYPE_RGB:
-        break;
-      case TGA_TYPE_RLE_GREY:
-        use_rle = true;
-        use_grey = true;
-        break;
-      case TGA_TYPE_GREY:
-        use_grey = true;
-        break;
-    }
-    const imageData = new Uint8Array(header.width * header.height * 4);
-    const result = tgaParse(use_rle, use_pal, header, offset, content);
-    getTgaRGBA(imageData, header.width, header.height, result.pixel_data, result.palettes);
-    return {
-      data: imageData,
-      width: header.width,
-      height: header.height,
-      flipY: true,
-      generateMipmaps: true,
-      minFilter: three_module.LinearMipmapLinearFilter
-    };
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/_polyfill/Data3DTexture.js
-var Data3DTexture = __webpack_require__(81111);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/LUTCubeLoader.js
-
-
-class LUTCubeLoader extends three_module.Loader {
-  load(url, onLoad, onProgress, onError) {
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setResponseType("text");
-    loader.load(
-      url,
-      (text) => {
-        try {
-          onLoad(this.parse(text));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          this.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(str) {
-    str = str.replace(/^#.*?(\n|\r)/gm, "").replace(/^\s*?(\n|\r)/gm, "").trim();
-    let title = null;
-    let size = null;
-    const domainMin = new three_module.Vector3(0, 0, 0);
-    const domainMax = new three_module.Vector3(1, 1, 1);
-    const lines = str.split(/[\n\r]+/g);
-    let data = null;
-    let currIndex = 0;
-    for (let i = 0, l = lines.length; i < l; i++) {
-      const line = lines[i].trim();
-      const split = line.split(/\s/g);
-      switch (split[0]) {
-        case "TITLE":
-          title = line.substring(7, line.length - 1);
-          break;
-        case "LUT_3D_SIZE":
-          const sizeToken = split[1];
-          size = parseFloat(sizeToken);
-          data = new Uint8Array(size * size * size * 4);
-          break;
-        case "DOMAIN_MIN":
-          domainMin.x = parseFloat(split[1]);
-          domainMin.y = parseFloat(split[2]);
-          domainMin.z = parseFloat(split[3]);
-          break;
-        case "DOMAIN_MAX":
-          domainMax.x = parseFloat(split[1]);
-          domainMax.y = parseFloat(split[2]);
-          domainMax.z = parseFloat(split[3]);
-          break;
-        default:
-          const r = parseFloat(split[0]);
-          const g = parseFloat(split[1]);
-          const b = parseFloat(split[2]);
-          if (r > 1 || r < 0 || g > 1 || g < 0 || b > 1 || b < 0) {
-            throw new Error("LUTCubeLoader : Non normalized values not supported.");
-          }
-          data[currIndex + 0] = r * 255;
-          data[currIndex + 1] = g * 255;
-          data[currIndex + 2] = b * 255;
-          data[currIndex + 3] = 255;
-          currIndex += 4;
-      }
-    }
-    const texture = new three_module.DataTexture();
-    texture.image.data = data;
-    texture.image.width = size;
-    texture.image.height = size * size;
-    texture.type = three_module.UnsignedByteType;
-    texture.magFilter = three_module.LinearFilter;
-    texture.minFilter = three_module.LinearFilter;
-    texture.wrapS = three_module.ClampToEdgeWrapping;
-    texture.wrapT = three_module.ClampToEdgeWrapping;
-    texture.generateMipmaps = false;
-    texture.needsUpdate = true;
-    const texture3D = new Data3DTexture/* Data3DTexture */.J();
-    texture3D.image.data = data;
-    texture3D.image.width = size;
-    texture3D.image.height = size;
-    texture3D.image.depth = size;
-    texture3D.type = three_module.UnsignedByteType;
-    texture3D.magFilter = three_module.LinearFilter;
-    texture3D.minFilter = three_module.LinearFilter;
-    texture3D.wrapS = three_module.ClampToEdgeWrapping;
-    texture3D.wrapT = three_module.ClampToEdgeWrapping;
-    texture3D.wrapR = three_module.ClampToEdgeWrapping;
-    texture3D.generateMipmaps = false;
-    texture3D.needsUpdate = true;
-    return {
-      title,
-      size,
-      domainMin,
-      domainMax,
-      texture,
-      texture3D
-    };
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/NRRDLoader.js
-
-
-
-class NRRDLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(data) {
-        try {
-          onLoad(scope.parse(data));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(data) {
-    let _data = data;
-    let _dataPointer = 0;
-    const _nativeLittleEndian = new Int8Array(new Int16Array([1]).buffer)[0] > 0;
-    const _littleEndian = true;
-    const headerObject = {};
-    function scan(type, chunks) {
-      if (chunks === void 0 || chunks === null) {
-        chunks = 1;
-      }
-      let _chunkSize = 1;
-      let _array_type = Uint8Array;
-      switch (type) {
-        case "uchar":
-          break;
-        case "schar":
-          _array_type = Int8Array;
-          break;
-        case "ushort":
-          _array_type = Uint16Array;
-          _chunkSize = 2;
-          break;
-        case "sshort":
-          _array_type = Int16Array;
-          _chunkSize = 2;
-          break;
-        case "uint":
-          _array_type = Uint32Array;
-          _chunkSize = 4;
-          break;
-        case "sint":
-          _array_type = Int32Array;
-          _chunkSize = 4;
-          break;
-        case "float":
-          _array_type = Float32Array;
-          _chunkSize = 4;
-          break;
-        case "complex":
-          _array_type = Float64Array;
-          _chunkSize = 8;
-          break;
-        case "double":
-          _array_type = Float64Array;
-          _chunkSize = 8;
-          break;
-      }
-      let _bytes2 = new _array_type(_data.slice(_dataPointer, _dataPointer += chunks * _chunkSize));
-      if (_nativeLittleEndian != _littleEndian) {
-        _bytes2 = flipEndianness(_bytes2, _chunkSize);
-      }
-      if (chunks == 1) {
-        return _bytes2[0];
-      }
-      return _bytes2;
-    }
-    function flipEndianness(array, chunkSize) {
-      const u8 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);
-      for (let i2 = 0; i2 < array.byteLength; i2 += chunkSize) {
-        for (let j = i2 + chunkSize - 1, k = i2; j > k; j--, k++) {
-          const tmp = u8[k];
-          u8[k] = u8[j];
-          u8[j] = tmp;
-        }
-      }
-      return array;
-    }
-    function parseHeader(header) {
-      let data2, field, fn, i2, l, m, _i, _len;
-      const lines = header.split(/\r?\n/);
-      for (_i = 0, _len = lines.length; _i < _len; _i++) {
-        l = lines[_i];
-        if (l.match(/NRRD\d+/)) {
-          headerObject.isNrrd = true;
-        } else if (l.match(/^#/)) {
-        } else if (m = l.match(/(.*):(.*)/)) {
-          field = m[1].trim();
-          data2 = m[2].trim();
-          fn = _fieldFunctions[field];
-          if (fn) {
-            fn.call(headerObject, data2);
-          } else {
-            headerObject[field] = data2;
-          }
-        }
-      }
-      if (!headerObject.isNrrd) {
-        throw new Error("Not an NRRD file");
-      }
-      if (headerObject.encoding === "bz2" || headerObject.encoding === "bzip2") {
-        throw new Error("Bzip is not supported");
-      }
-      if (!headerObject.vectors) {
-        headerObject.vectors = [new three_module.Vector3(1, 0, 0), new three_module.Vector3(0, 1, 0), new three_module.Vector3(0, 0, 1)];
-        if (headerObject.spacings) {
-          for (i2 = 0; i2 <= 2; i2++) {
-            if (!isNaN(headerObject.spacings[i2])) {
-              headerObject.vectors[i2].multiplyScalar(headerObject.spacings[i2]);
-            }
-          }
-        }
-      }
-    }
-    function parseDataAsText(data2, start, end) {
-      let number = "";
-      start = start || 0;
-      end = end || data2.length;
-      let value;
-      const lengthOfTheResult = headerObject.sizes.reduce(function(previous, current) {
-        return previous * current;
-      }, 1);
-      let base = 10;
-      if (headerObject.encoding === "hex") {
-        base = 16;
-      }
-      const result = new headerObject.__array(lengthOfTheResult);
-      let resultIndex = 0;
-      let parsingFunction = parseInt;
-      if (headerObject.__array === Float32Array || headerObject.__array === Float64Array) {
-        parsingFunction = parseFloat;
-      }
-      for (let i2 = start; i2 < end; i2++) {
-        value = data2[i2];
-        if ((value < 9 || value > 13) && value !== 32) {
-          number += String.fromCharCode(value);
-        } else {
-          if (number !== "") {
-            result[resultIndex] = parsingFunction(number, base);
-            resultIndex++;
-          }
-          number = "";
-        }
-      }
-      if (number !== "") {
-        result[resultIndex] = parsingFunction(number, base);
-        resultIndex++;
-      }
-      return result;
-    }
-    const _bytes = scan("uchar", data.byteLength);
-    const _length = _bytes.length;
-    let _header = null;
-    let _data_start = 0;
-    let i;
-    for (i = 1; i < _length; i++) {
-      if (_bytes[i - 1] == 10 && _bytes[i] == 10) {
-        _header = this.parseChars(_bytes, 0, i - 2);
-        _data_start = i + 1;
-        break;
-      }
-    }
-    parseHeader(_header);
-    _data = _bytes.subarray(_data_start);
-    if (headerObject.encoding.substring(0, 2) === "gz") {
-      _data = (0,esm/* gunzipSync */._Z)(new Uint8Array(_data));
-    } else if (headerObject.encoding === "ascii" || headerObject.encoding === "text" || headerObject.encoding === "txt" || headerObject.encoding === "hex") {
-      _data = parseDataAsText(_data);
-    } else if (headerObject.encoding === "raw") {
-      const _copy = new Uint8Array(_data.length);
-      for (let i2 = 0; i2 < _data.length; i2++) {
-        _copy[i2] = _data[i2];
-      }
-      _data = _copy;
-    }
-    _data = _data.buffer;
-    const volume = new Volume();
-    volume.header = headerObject;
-    volume.data = new headerObject.__array(_data);
-    const min_max = volume.computeMinMax();
-    const min = min_max[0];
-    const max = min_max[1];
-    volume.windowLow = min;
-    volume.windowHigh = max;
-    volume.dimensions = [headerObject.sizes[0], headerObject.sizes[1], headerObject.sizes[2]];
-    volume.xLength = volume.dimensions[0];
-    volume.yLength = volume.dimensions[1];
-    volume.zLength = volume.dimensions[2];
-    const spacingX = new three_module.Vector3(
-      headerObject.vectors[0][0],
-      headerObject.vectors[0][1],
-      headerObject.vectors[0][2]
-    ).length();
-    const spacingY = new three_module.Vector3(
-      headerObject.vectors[1][0],
-      headerObject.vectors[1][1],
-      headerObject.vectors[1][2]
-    ).length();
-    const spacingZ = new three_module.Vector3(
-      headerObject.vectors[2][0],
-      headerObject.vectors[2][1],
-      headerObject.vectors[2][2]
-    ).length();
-    volume.spacing = [spacingX, spacingY, spacingZ];
-    volume.matrix = new three_module.Matrix4();
-    let _spaceX = 1;
-    let _spaceY = 1;
-    const _spaceZ = 1;
-    if (headerObject.space == "left-posterior-superior") {
-      _spaceX = -1;
-      _spaceY = -1;
-    } else if (headerObject.space === "left-anterior-superior") {
-      _spaceX = -1;
-    }
-    if (!headerObject.vectors) {
-      volume.matrix.set(_spaceX, 0, 0, 0, 0, _spaceY, 0, 0, 0, 0, _spaceZ, 0, 0, 0, 0, 1);
-    } else {
-      const v = headerObject.vectors;
-      volume.matrix.set(
-        _spaceX * v[0][0],
-        _spaceX * v[1][0],
-        _spaceX * v[2][0],
-        0,
-        _spaceY * v[0][1],
-        _spaceY * v[1][1],
-        _spaceY * v[2][1],
-        0,
-        _spaceZ * v[0][2],
-        _spaceZ * v[1][2],
-        _spaceZ * v[2][2],
-        0,
-        0,
-        0,
-        0,
-        1
-      );
-    }
-    volume.inverseMatrix = new three_module.Matrix4();
-    volume.inverseMatrix.copy(volume.matrix).invert();
-    volume.RASDimensions = new three_module.Vector3(volume.xLength, volume.yLength, volume.zLength).applyMatrix4(volume.matrix).round().toArray().map(Math.abs);
-    if (volume.lowerThreshold === -Infinity) {
-      volume.lowerThreshold = min;
-    }
-    if (volume.upperThreshold === Infinity) {
-      volume.upperThreshold = max;
-    }
-    return volume;
-  }
-  parseChars(array, start, end) {
-    if (start === void 0) {
-      start = 0;
-    }
-    if (end === void 0) {
-      end = array.length;
-    }
-    let output = "";
-    let i = 0;
-    for (i = start; i < end; ++i) {
-      output += String.fromCharCode(array[i]);
-    }
-    return output;
-  }
-}
-const _fieldFunctions = {
-  type: function(data) {
-    switch (data) {
-      case "uchar":
-      case "unsigned char":
-      case "uint8":
-      case "uint8_t":
-        this.__array = Uint8Array;
-        break;
-      case "signed char":
-      case "int8":
-      case "int8_t":
-        this.__array = Int8Array;
-        break;
-      case "short":
-      case "short int":
-      case "signed short":
-      case "signed short int":
-      case "int16":
-      case "int16_t":
-        this.__array = Int16Array;
-        break;
-      case "ushort":
-      case "unsigned short":
-      case "unsigned short int":
-      case "uint16":
-      case "uint16_t":
-        this.__array = Uint16Array;
-        break;
-      case "int":
-      case "signed int":
-      case "int32":
-      case "int32_t":
-        this.__array = Int32Array;
-        break;
-      case "uint":
-      case "unsigned int":
-      case "uint32":
-      case "uint32_t":
-        this.__array = Uint32Array;
-        break;
-      case "float":
-        this.__array = Float32Array;
-        break;
-      case "double":
-        this.__array = Float64Array;
-        break;
-      default:
-        throw new Error("Unsupported NRRD data type: " + data);
-    }
-    return this.type = data;
-  },
-  endian: function(data) {
-    return this.endian = data;
-  },
-  encoding: function(data) {
-    return this.encoding = data;
-  },
-  dimension: function(data) {
-    return this.dim = parseInt(data, 10);
-  },
-  sizes: function(data) {
-    let i;
-    return this.sizes = function() {
-      const _ref = data.split(/\s+/);
-      const _results = [];
-      for (let _i = 0, _len = _ref.length; _i < _len; _i++) {
-        i = _ref[_i];
-        _results.push(parseInt(i, 10));
-      }
-      return _results;
-    }();
-  },
-  space: function(data) {
-    return this.space = data;
-  },
-  "space origin": function(data) {
-    return this.space_origin = data.split("(")[1].split(")")[0].split(",");
-  },
-  "space directions": function(data) {
-    let f, v;
-    const parts = data.match(/\(.*?\)/g);
-    return this.vectors = function() {
-      const _results = [];
-      for (let _i = 0, _len = parts.length; _i < _len; _i++) {
-        v = parts[_i];
-        _results.push(
-          function() {
-            const _ref = v.slice(1, -1).split(/,/);
-            const _results2 = [];
-            for (let _j = 0, _len2 = _ref.length; _j < _len2; _j++) {
-              f = _ref[_j];
-              _results2.push(parseFloat(f));
-            }
-            return _results2;
-          }()
-        );
-      }
-      return _results;
-    }();
-  },
-  spacings: function(data) {
-    let f;
-    const parts = data.split(/\s+/);
-    return this.spacings = function() {
-      const _results = [];
-      for (let _i = 0, _len = parts.length; _i < _len; _i++) {
-        f = parts[_i];
-        _results.push(parseFloat(f));
-      }
-      return _results;
-    }();
-  }
-};
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/STLLoader.js
-
-class STLLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(this.requestHeader);
-    loader.setWithCredentials(this.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(data) {
-    function isBinary(data2) {
-      const reader = new DataView(data2);
-      const face_size = 32 / 8 * 3 + 32 / 8 * 3 * 3 + 16 / 8;
-      const n_faces = reader.getUint32(80, true);
-      const expect = 80 + 32 / 8 + n_faces * face_size;
-      if (expect === reader.byteLength) {
-        return true;
-      }
-      const solid = [115, 111, 108, 105, 100];
-      for (let off = 0; off < 5; off++) {
-        if (matchDataViewAt(solid, reader, off))
-          return false;
-      }
-      return true;
-    }
-    function matchDataViewAt(query, reader, offset) {
-      for (let i = 0, il = query.length; i < il; i++) {
-        if (query[i] !== reader.getUint8(offset + i, false))
-          return false;
-      }
-      return true;
-    }
-    function parseBinary(data2) {
-      const reader = new DataView(data2);
-      const faces = reader.getUint32(80, true);
-      let r, g, b, hasColors = false, colors;
-      let defaultR, defaultG, defaultB, alpha;
-      for (let index = 0; index < 80 - 10; index++) {
-        if (reader.getUint32(index, false) == 1129270351 && reader.getUint8(index + 4) == 82 && reader.getUint8(index + 5) == 61) {
-          hasColors = true;
-          colors = new Float32Array(faces * 3 * 3);
-          defaultR = reader.getUint8(index + 6) / 255;
-          defaultG = reader.getUint8(index + 7) / 255;
-          defaultB = reader.getUint8(index + 8) / 255;
-          alpha = reader.getUint8(index + 9) / 255;
-        }
-      }
-      const dataOffset = 84;
-      const faceLength = 12 * 4 + 2;
-      const geometry = new three_module.BufferGeometry();
-      const vertices = new Float32Array(faces * 3 * 3);
-      const normals = new Float32Array(faces * 3 * 3);
-      for (let face = 0; face < faces; face++) {
-        const start = dataOffset + face * faceLength;
-        const normalX = reader.getFloat32(start, true);
-        const normalY = reader.getFloat32(start + 4, true);
-        const normalZ = reader.getFloat32(start + 8, true);
-        if (hasColors) {
-          const packedColor = reader.getUint16(start + 48, true);
-          if ((packedColor & 32768) === 0) {
-            r = (packedColor & 31) / 31;
-            g = (packedColor >> 5 & 31) / 31;
-            b = (packedColor >> 10 & 31) / 31;
-          } else {
-            r = defaultR;
-            g = defaultG;
-            b = defaultB;
-          }
-        }
-        for (let i = 1; i <= 3; i++) {
-          const vertexstart = start + i * 12;
-          const componentIdx = face * 3 * 3 + (i - 1) * 3;
-          vertices[componentIdx] = reader.getFloat32(vertexstart, true);
-          vertices[componentIdx + 1] = reader.getFloat32(vertexstart + 4, true);
-          vertices[componentIdx + 2] = reader.getFloat32(vertexstart + 8, true);
-          normals[componentIdx] = normalX;
-          normals[componentIdx + 1] = normalY;
-          normals[componentIdx + 2] = normalZ;
-          if (hasColors) {
-            colors[componentIdx] = r;
-            colors[componentIdx + 1] = g;
-            colors[componentIdx + 2] = b;
-          }
-        }
-      }
-      geometry.setAttribute("position", new three_module.BufferAttribute(vertices, 3));
-      geometry.setAttribute("normal", new three_module.BufferAttribute(normals, 3));
-      if (hasColors) {
-        geometry.setAttribute("color", new three_module.BufferAttribute(colors, 3));
-        geometry.hasColors = true;
-        geometry.alpha = alpha;
-      }
-      return geometry;
-    }
-    function parseASCII(data2) {
-      const geometry = new three_module.BufferGeometry();
-      const patternSolid = /solid([\s\S]*?)endsolid/g;
-      const patternFace = /facet([\s\S]*?)endfacet/g;
-      let faceCounter = 0;
-      const patternFloat = /[\s]+([+-]?(?:\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?)/.source;
-      const patternVertex = new RegExp("vertex" + patternFloat + patternFloat + patternFloat, "g");
-      const patternNormal = new RegExp("normal" + patternFloat + patternFloat + patternFloat, "g");
-      const vertices = [];
-      const normals = [];
-      const normal = new three_module.Vector3();
-      let result;
-      let groupCount = 0;
-      let startVertex = 0;
-      let endVertex = 0;
-      while ((result = patternSolid.exec(data2)) !== null) {
-        startVertex = endVertex;
-        const solid = result[0];
-        while ((result = patternFace.exec(solid)) !== null) {
-          let vertexCountPerFace = 0;
-          let normalCountPerFace = 0;
-          const text = result[0];
-          while ((result = patternNormal.exec(text)) !== null) {
-            normal.x = parseFloat(result[1]);
-            normal.y = parseFloat(result[2]);
-            normal.z = parseFloat(result[3]);
-            normalCountPerFace++;
-          }
-          while ((result = patternVertex.exec(text)) !== null) {
-            vertices.push(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3]));
-            normals.push(normal.x, normal.y, normal.z);
-            vertexCountPerFace++;
-            endVertex++;
-          }
-          if (normalCountPerFace !== 1) {
-            console.error("THREE.STLLoader: Something isn't right with the normal of face number " + faceCounter);
-          }
-          if (vertexCountPerFace !== 3) {
-            console.error("THREE.STLLoader: Something isn't right with the vertices of face number " + faceCounter);
-          }
-          faceCounter++;
-        }
-        const start = startVertex;
-        const count = endVertex - startVertex;
-        geometry.addGroup(start, count, groupCount);
-        groupCount++;
-      }
-      geometry.setAttribute("position", new three_module.Float32BufferAttribute(vertices, 3));
-      geometry.setAttribute("normal", new three_module.Float32BufferAttribute(normals, 3));
-      return geometry;
-    }
-    function ensureString(buffer) {
-      if (typeof buffer !== "string") {
-        return three_module.LoaderUtils.decodeText(new Uint8Array(buffer));
-      }
-      return buffer;
-    }
-    function ensureBinary(buffer) {
-      if (typeof buffer === "string") {
-        const array_buffer = new Uint8Array(buffer.length);
-        for (let i = 0; i < buffer.length; i++) {
-          array_buffer[i] = buffer.charCodeAt(i) & 255;
-        }
-        return array_buffer.buffer || array_buffer;
-      } else {
-        return buffer;
-      }
-    }
-    const binData = ensureBinary(data);
-    return isBinary(binData) ? parseBinary(binData) : parseASCII(ensureString(data));
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/MTLLoader.js
-
-class MTLLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  /**
-   * Loads and parses a MTL asset from a URL.
-   *
-   * @param {String} url - URL to the MTL file.
-   * @param {Function} [onLoad] - Callback invoked with the loaded object.
-   * @param {Function} [onProgress] - Callback for download progress.
-   * @param {Function} [onError] - Callback for download errors.
-   *
-   * @see setPath setResourcePath
-   *
-   * @note In order for relative texture references to resolve correctly
-   * you must call setResourcePath() explicitly prior to load.
-   */
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const path = this.path === "" ? three_module.LoaderUtils.extractUrlBase(url) : this.path;
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setRequestHeader(this.requestHeader);
-    loader.setWithCredentials(this.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text, path));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  setMaterialOptions(value) {
-    this.materialOptions = value;
-    return this;
-  }
-  /**
-   * Parses a MTL file.
-   *
-   * @param {String} text - Content of MTL file
-   * @return {MaterialCreator}
-   *
-   * @see setPath setResourcePath
-   *
-   * @note In order for relative texture references to resolve correctly
-   * you must call setResourcePath() explicitly prior to parse.
-   */
-  parse(text, path) {
-    const lines = text.split("\n");
-    let info = {};
-    const delimiter_pattern = /\s+/;
-    const materialsInfo = {};
-    for (let i = 0; i < lines.length; i++) {
-      let line = lines[i];
-      line = line.trim();
-      if (line.length === 0 || line.charAt(0) === "#") {
-        continue;
-      }
-      const pos = line.indexOf(" ");
-      let key = pos >= 0 ? line.substring(0, pos) : line;
-      key = key.toLowerCase();
-      let value = pos >= 0 ? line.substring(pos + 1) : "";
-      value = value.trim();
-      if (key === "newmtl") {
-        info = { name: value };
-        materialsInfo[value] = info;
-      } else {
-        if (key === "ka" || key === "kd" || key === "ks" || key === "ke") {
-          const ss = value.split(delimiter_pattern, 3);
-          info[key] = [parseFloat(ss[0]), parseFloat(ss[1]), parseFloat(ss[2])];
-        } else {
-          info[key] = value;
-        }
-      }
-    }
-    const materialCreator = new MaterialCreator(this.resourcePath || path, this.materialOptions);
-    materialCreator.setCrossOrigin(this.crossOrigin);
-    materialCreator.setManager(this.manager);
-    materialCreator.setMaterials(materialsInfo);
-    return materialCreator;
-  }
-}
-class MaterialCreator {
-  constructor(baseUrl = "", options = {}) {
-    this.baseUrl = baseUrl;
-    this.options = options;
-    this.materialsInfo = {};
-    this.materials = {};
-    this.materialsArray = [];
-    this.nameLookup = {};
-    this.crossOrigin = "anonymous";
-    this.side = this.options.side !== void 0 ? this.options.side : three_module.FrontSide;
-    this.wrap = this.options.wrap !== void 0 ? this.options.wrap : three_module.RepeatWrapping;
-  }
-  setCrossOrigin(value) {
-    this.crossOrigin = value;
-    return this;
-  }
-  setManager(value) {
-    this.manager = value;
-  }
-  setMaterials(materialsInfo) {
-    this.materialsInfo = this.convert(materialsInfo);
-    this.materials = {};
-    this.materialsArray = [];
-    this.nameLookup = {};
-  }
-  convert(materialsInfo) {
-    if (!this.options)
-      return materialsInfo;
-    const converted = {};
-    for (const mn in materialsInfo) {
-      const mat = materialsInfo[mn];
-      const covmat = {};
-      converted[mn] = covmat;
-      for (const prop in mat) {
-        let save = true;
-        let value = mat[prop];
-        const lprop = prop.toLowerCase();
-        switch (lprop) {
-          case "kd":
-          case "ka":
-          case "ks":
-            if (this.options && this.options.normalizeRGB) {
-              value = [value[0] / 255, value[1] / 255, value[2] / 255];
-            }
-            if (this.options && this.options.ignoreZeroRGBs) {
-              if (value[0] === 0 && value[1] === 0 && value[2] === 0) {
-                save = false;
-              }
-            }
-            break;
-          default:
-            break;
-        }
-        if (save) {
-          covmat[lprop] = value;
-        }
-      }
-    }
-    return converted;
-  }
-  preload() {
-    for (const mn in this.materialsInfo) {
-      this.create(mn);
-    }
-  }
-  getIndex(materialName) {
-    return this.nameLookup[materialName];
-  }
-  getAsArray() {
-    let index = 0;
-    for (const mn in this.materialsInfo) {
-      this.materialsArray[index] = this.create(mn);
-      this.nameLookup[mn] = index;
-      index++;
-    }
-    return this.materialsArray;
-  }
-  create(materialName) {
-    if (this.materials[materialName] === void 0) {
-      this.createMaterial_(materialName);
-    }
-    return this.materials[materialName];
-  }
-  createMaterial_(materialName) {
-    const scope = this;
-    const mat = this.materialsInfo[materialName];
-    const params = {
-      name: materialName,
-      side: this.side
-    };
-    function resolveURL(baseUrl, url) {
-      if (typeof url !== "string" || url === "")
-        return "";
-      if (/^https?:\/\//i.test(url))
-        return url;
-      return baseUrl + url;
-    }
-    function setMapForType(mapType, value) {
-      if (params[mapType])
-        return;
-      const texParams = scope.getTextureParams(value, params);
-      const map = scope.loadTexture(resolveURL(scope.baseUrl, texParams.url));
-      map.repeat.copy(texParams.scale);
-      map.offset.copy(texParams.offset);
-      map.wrapS = scope.wrap;
-      map.wrapT = scope.wrap;
-      params[mapType] = map;
-    }
-    for (const prop in mat) {
-      const value = mat[prop];
-      let n;
-      if (value === "")
-        continue;
-      switch (prop.toLowerCase()) {
-        case "kd":
-          params.color = new three_module.Color().fromArray(value);
-          break;
-        case "ks":
-          params.specular = new three_module.Color().fromArray(value);
-          break;
-        case "ke":
-          params.emissive = new three_module.Color().fromArray(value);
-          break;
-        case "map_kd":
-          setMapForType("map", value);
-          break;
-        case "map_ks":
-          setMapForType("specularMap", value);
-          break;
-        case "map_ke":
-          setMapForType("emissiveMap", value);
-          break;
-        case "norm":
-          setMapForType("normalMap", value);
-          break;
-        case "map_bump":
-        case "bump":
-          setMapForType("bumpMap", value);
-          break;
-        case "map_d":
-          setMapForType("alphaMap", value);
-          params.transparent = true;
-          break;
-        case "ns":
-          params.shininess = parseFloat(value);
-          break;
-        case "d":
-          n = parseFloat(value);
-          if (n < 1) {
-            params.opacity = n;
-            params.transparent = true;
-          }
-          break;
-        case "tr":
-          n = parseFloat(value);
-          if (this.options && this.options.invertTrProperty)
-            n = 1 - n;
-          if (n > 0) {
-            params.opacity = 1 - n;
-            params.transparent = true;
-          }
-          break;
-        default:
-          break;
-      }
-    }
-    this.materials[materialName] = new three_module.MeshPhongMaterial(params);
-    return this.materials[materialName];
-  }
-  getTextureParams(value, matParams) {
-    const texParams = {
-      scale: new three_module.Vector2(1, 1),
-      offset: new three_module.Vector2(0, 0)
-    };
-    const items = value.split(/\s+/);
-    let pos;
-    pos = items.indexOf("-bm");
-    if (pos >= 0) {
-      matParams.bumpScale = parseFloat(items[pos + 1]);
-      items.splice(pos, 2);
-    }
-    pos = items.indexOf("-s");
-    if (pos >= 0) {
-      texParams.scale.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2]));
-      items.splice(pos, 4);
-    }
-    pos = items.indexOf("-o");
-    if (pos >= 0) {
-      texParams.offset.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2]));
-      items.splice(pos, 4);
-    }
-    texParams.url = items.join(" ").trim();
-    return texParams;
-  }
-  loadTexture(url, mapping, onLoad, onProgress, onError) {
-    const manager = this.manager !== void 0 ? this.manager : three_module.DefaultLoadingManager;
-    let loader = manager.getHandler(url);
-    if (loader === null) {
-      loader = new three_module.TextureLoader(manager);
-    }
-    if (loader.setCrossOrigin)
-      loader.setCrossOrigin(this.crossOrigin);
-    const texture = loader.load(url, onLoad, onProgress, onError);
-    if (mapping !== void 0)
-      texture.mapping = mapping;
-    return texture;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/XLoader.js
-
-var XLoader = /* @__PURE__ */ function() {
-  var classCallCheck = function(instance, Constructor) {
-    if (!(instance instanceof Constructor)) {
-      throw new TypeError("Cannot call a class as a function");
-    }
-  };
-  var createClass = function() {
-    function defineProperties(target, props) {
-      for (let i2 = 0; i2 < props.length; i2++) {
-        var descriptor = props[i2];
-        descriptor.enumerable = descriptor.enumerable || false;
-        descriptor.configurable = true;
-        if ("value" in descriptor)
-          descriptor.writable = true;
-        Object.defineProperty(target, descriptor.key, descriptor);
-      }
-    }
-    return function(Constructor, protoProps, staticProps) {
-      if (protoProps)
-        defineProperties(Constructor.prototype, protoProps);
-      if (staticProps)
-        defineProperties(Constructor, staticProps);
-      return Constructor;
-    };
-  }();
-  var XboneInf = function XboneInf2() {
-    classCallCheck(this, XboneInf2);
-    this.boneName = "";
-    this.BoneIndex = 0;
-    this.Indeces = [];
-    this.Weights = [];
-    this.initMatrix = null;
-    this.OffsetMatrix = null;
-  };
-  var XAnimationInfo = function XAnimationInfo2() {
-    classCallCheck(this, XAnimationInfo2);
-    this.animeName = "";
-    this.boneName = "";
-    this.targetBone = null;
-    this.keyType = 4;
-    this.frameStartLv = 0;
-    this.keyFrames = [];
-    this.InverseMx = null;
-  };
-  var XAnimationObj = function() {
-    function XAnimationObj2(_flags) {
-      classCallCheck(this, XAnimationObj2);
-      this.fps = 30;
-      this.name = "xanimation";
-      this.length = 0;
-      this.hierarchy = [];
-      this.putFlags = _flags;
-      if (this.putFlags.putPos === void 0) {
-        this.putFlags.putPos = true;
-      }
-      if (this.putFlags.putRot === void 0) {
-        this.putFlags.putRot = true;
-      }
-      if (this.putFlags.putScl === void 0) {
-        this.putFlags.putScl = true;
-      }
-    }
-    createClass(XAnimationObj2, [
-      {
-        key: "make",
-        value: function make(XAnimationInfoArray) {
-          for (let i2 = 0; i2 < XAnimationInfoArray.length; i2++) {
-            this.hierarchy.push(this.makeBonekeys(XAnimationInfoArray[i2]));
-          }
-          this.length = this.hierarchy[0].keys[this.hierarchy[0].keys.length - 1].time;
-        }
-      },
-      {
-        key: "clone",
-        value: function clone() {
-          return Object.assign({}, this);
-        }
-      },
-      {
-        key: "makeBonekeys",
-        value: function makeBonekeys(XAnimationInfo2) {
-          var refObj = {};
-          refObj.name = XAnimationInfo2.boneName;
-          refObj.parent = "";
-          refObj.keys = this.keyFrameRefactor(XAnimationInfo2);
-          refObj.copy = function() {
-            return Object.assign({}, this);
-          };
-          return refObj;
-        }
-      },
-      {
-        key: "keyFrameRefactor",
-        value: function keyFrameRefactor(XAnimationInfo2) {
-          var keys = [];
-          for (let i2 = 0; i2 < XAnimationInfo2.keyFrames.length; i2++) {
-            var keyframe = {};
-            keyframe.time = XAnimationInfo2.keyFrames[i2].time * this.fps;
-            if (XAnimationInfo2.keyFrames[i2].pos && this.putFlags.putPos) {
-              keyframe.pos = XAnimationInfo2.keyFrames[i2].pos;
-            }
-            if (XAnimationInfo2.keyFrames[i2].rot && this.putFlags.putRot) {
-              keyframe.rot = XAnimationInfo2.keyFrames[i2].rot;
-            }
-            if (XAnimationInfo2.keyFrames[i2].scl && this.putFlags.putScl) {
-              keyframe.scl = XAnimationInfo2.keyFrames[i2].scl;
-            }
-            if (XAnimationInfo2.keyFrames[i2].matrix) {
-              keyframe.matrix = XAnimationInfo2.keyFrames[i2].matrix;
-              if (this.putFlags.putPos) {
-                keyframe.pos = new three_module.Vector3().setFromMatrixPosition(keyframe.matrix);
-              }
-              if (this.putFlags.putRot) {
-                keyframe.rot = new three_module.Quaternion().setFromRotationMatrix(keyframe.matrix);
-              }
-              if (this.putFlags.putScl) {
-                keyframe.scl = new three_module.Vector3().setFromMatrixScale(keyframe.matrix);
-              }
-            }
-            keys.push(keyframe);
-          }
-          return keys;
-        }
-      }
-    ]);
-    return XAnimationObj2;
-  }();
-  var XKeyFrameInfo = function XKeyFrameInfo2() {
-    classCallCheck(this, XKeyFrameInfo2);
-    this.index = 0;
-    this.Frame = 0;
-    this.time = 0;
-    this.matrix = null;
-  };
-  var XLoader2 = function() {
-    function XLoader3(manager) {
-      three_module.Loader.call(this, manager);
-      classCallCheck(this, XLoader3);
-      this.debug = false;
-      this.texloader = new three_module.TextureLoader(this.manager);
-      this.url = "";
-      this._putMatLength = 0;
-      this._nowMat = null;
-      this._nowFrameName = "";
-      this.frameHierarchie = [];
-      this.Hierarchies = {};
-      this.HieStack = [];
-      this._currentObject = {};
-      this._currentFrame = {};
-      this._data = null;
-      this.onLoad = null;
-      this.IsUvYReverse = true;
-      this.Meshes = [];
-      this.animations = [];
-      this.animTicksPerSecond = 30;
-      this._currentGeo = null;
-      this._currentAnime = null;
-      this._currentAnimeFrames = null;
-    }
-    createClass(XLoader3, [
-      {
-        key: "_setArgOption",
-        value: function _setArgOption(_arg) {
-          var _start = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;
-          if (!_arg) {
-            return;
-          }
-          for (let i2 = _start; i2 < _arg.length; i2++) {
-            switch (i2) {
-              case 0:
-                this.url = _arg[i2];
-                break;
-              case 1:
-                this.options = _arg[i2];
-                break;
-            }
-          }
-          if (this.options === void 0) {
-            this.options = {};
-          }
-        }
-      },
-      {
-        key: "load",
-        value: function load(_arg, onLoad, onProgress, onError) {
-          var _this = this;
-          this._setArgOption(_arg);
-          var loader = new three_module.FileLoader(this.manager);
-          loader.setPath(this.path);
-          loader.setResponseType("arraybuffer");
-          loader.setRequestHeader(this.requestHeader);
-          loader.setWithCredentials(this.withCredentials);
-          loader.load(
-            this.url,
-            function(response) {
-              try {
-                _this.parse(response, onLoad);
-              } catch (e) {
-                if (onError) {
-                  onError(e);
-                } else {
-                  console.error(e);
-                }
-                _this.manager.itemError(_this.url);
-              }
-            },
-            onProgress,
-            onError
-          );
-        }
-      },
-      {
-        key: "_readLine",
-        value: function _readLine(line) {
-          var readed = 0;
-          while (true) {
-            var find = -1;
-            find = line.indexOf("//", readed);
-            if (find === -1) {
-              find = line.indexOf("#", readed);
-            }
-            if (find > -1 && find < 2) {
-              var foundNewLine = -1;
-              foundNewLine = line.indexOf("\r\n", readed);
-              if (foundNewLine > 0) {
-                readed = foundNewLine + 2;
-              } else {
-                foundNewLine = line.indexOf("\r", readed);
-                if (foundNewLine > 0) {
-                  readed = foundNewLine + 1;
-                } else {
-                  readed = line.indexOf("\n", readed) + 1;
-                }
-              }
-            } else {
-              break;
-            }
-          }
-          return line.substr(readed);
-        }
-      },
-      {
-        key: "_readLine",
-        value: function _readLine(line) {
-          var readed = 0;
-          while (true) {
-            var find = -1;
-            find = line.indexOf("//", readed);
-            if (find === -1) {
-              find = line.indexOf("#", readed);
-            }
-            if (find > -1 && find < 2) {
-              var foundNewLine = -1;
-              foundNewLine = line.indexOf("\r\n", readed);
-              if (foundNewLine > 0) {
-                readed = foundNewLine + 2;
-              } else {
-                foundNewLine = line.indexOf("\r", readed);
-                if (foundNewLine > 0) {
-                  readed = foundNewLine + 1;
-                } else {
-                  readed = line.indexOf("\n", readed) + 1;
-                }
-              }
-            } else {
-              break;
-            }
-          }
-          return line.substr(readed);
-        }
-      },
-      {
-        key: "_isBinary",
-        value: function _isBinary(binData) {
-          var reader = new DataView(binData);
-          var face_size = 32 / 8 * 3 + 32 / 8 * 3 * 3 + 16 / 8;
-          var n_faces = reader.getUint32(80, true);
-          var expect = 80 + 32 / 8 + n_faces * face_size;
-          if (expect === reader.byteLength) {
-            return true;
-          }
-          var fileLength = reader.byteLength;
-          for (let index = 0; index < fileLength; index++) {
-            if (reader.getUint8(index, false) > 127) {
-              return true;
-            }
-          }
-          return false;
-        }
-      },
-      {
-        key: "_ensureBinary",
-        value: function _ensureBinary(buf) {
-          if (typeof buf === "string") {
-            var array_buffer = new Uint8Array(buf.length);
-            for (let i2 = 0; i2 < buf.length; i2++) {
-              array_buffer[i2] = buf.charCodeAt(i2) & 255;
-            }
-            return array_buffer.buffer || array_buffer;
-          } else {
-            return buf;
-          }
-        }
-      },
-      {
-        key: "_ensureString",
-        value: function _ensureString(buf) {
-          if (typeof buf !== "string") {
-            return three_module.LoaderUtils.decodeText(new Uint8Array(buf));
-          } else {
-            return buf;
-          }
-        }
-      },
-      {
-        key: "parse",
-        value: function _parse(data, onLoad) {
-          var binData = this._ensureBinary(data);
-          this._data = this._ensureString(data);
-          this.onLoad = onLoad;
-          return this._isBinary(binData) ? this._parseBinary(binData) : this._parseASCII();
-        }
-      },
-      {
-        key: "_parseBinary",
-        value: function _parseBinary(data) {
-          return this._parseASCII(three_module.LoaderUtils.decodeText(new Uint8Array(data)));
-        }
-      },
-      {
-        key: "_parseASCII",
-        value: function _parseASCII() {
-          var path;
-          if (this.resourcePath !== "") {
-            path = this.resourcePath;
-          } else if (this.path !== "") {
-            path = this.path;
-          } else {
-            path = three_module.LoaderUtils.extractUrlBase(this.url);
-          }
-          this.texloader.setPath(path).setCrossOrigin(this.crossOrigin);
-          var endRead = 16;
-          this.Hierarchies.children = [];
-          this._hierarchieParse(this.Hierarchies, endRead);
-          this._changeRoot();
-          this._currentObject = this.Hierarchies.children.shift();
-          this._mainloop();
-        }
-      },
-      {
-        key: "_hierarchieParse",
-        value: function _hierarchieParse(_parent, _end) {
-          var endRead = _end;
-          while (true) {
-            var find1 = this._data.indexOf("{", endRead) + 1;
-            var findEnd = this._data.indexOf("}", endRead);
-            var findNext = this._data.indexOf("{", find1) + 1;
-            if (find1 > 0 && findEnd > find1) {
-              var _currentObject = {};
-              _currentObject.children = [];
-              var nameData = this._readLine(this._data.substr(endRead, find1 - endRead - 1)).trim();
-              var word = nameData.split(/ /g);
-              if (word.length > 0) {
-                _currentObject.type = word[0];
-                if (word.length >= 2) {
-                  _currentObject.name = word[1];
-                } else {
-                  _currentObject.name = word[0] + this.Hierarchies.children.length;
-                }
-              } else {
-                _currentObject.name = nameData;
-                _currentObject.type = "";
-              }
-              if (_currentObject.type === "Animation") {
-                _currentObject.data = this._data.substr(findNext, findEnd - findNext).trim();
-                var refs = this._hierarchieParse(_currentObject, findEnd + 1);
-                endRead = refs.end;
-                _currentObject.children = refs.parent.children;
-              } else {
-                var DataEnder = this._data.lastIndexOf(";", findNext > 0 ? Math.min(findNext, findEnd) : findEnd);
-                _currentObject.data = this._data.substr(find1, DataEnder - find1).trim();
-                if (findNext <= 0 || findEnd < findNext) {
-                  endRead = findEnd + 1;
-                } else {
-                  var nextStart = Math.max(DataEnder + 1, find1);
-                  var _refs = this._hierarchieParse(_currentObject, nextStart);
-                  endRead = _refs.end;
-                  _currentObject.children = _refs.parent.children;
-                }
-              }
-              _currentObject.parent = _parent;
-              if (_currentObject.type != "template") {
-                _parent.children.push(_currentObject);
-              }
-            } else {
-              endRead = find1 === -1 ? this._data.length : findEnd + 1;
-              break;
-            }
-          }
-          return {
-            parent: _parent,
-            end: endRead
-          };
-        }
-      },
-      {
-        key: "_mainloop",
-        value: function _mainloop() {
-          var _this2 = this;
-          this._mainProc();
-          if (this._currentObject.parent || this._currentObject.children.length > 0 || !this._currentObject.worked) {
-            setTimeout(function() {
-              _this2._mainloop();
-            }, 1);
-          } else {
-            setTimeout(function() {
-              _this2.onLoad({
-                models: _this2.Meshes,
-                animations: _this2.animations
-              });
-            }, 1);
-          }
-        }
-      },
-      {
-        key: "_mainProc",
-        value: function _mainProc() {
-          var breakFlag = false;
-          while (true) {
-            if (!this._currentObject.worked) {
-              switch (this._currentObject.type) {
-                case "template":
-                  break;
-                case "AnimTicksPerSecond":
-                  this.animTicksPerSecond = parseInt(this._currentObject.data);
-                  break;
-                case "Frame":
-                  this._setFrame();
-                  break;
-                case "FrameTransformMatrix":
-                  this._setFrameTransformMatrix();
-                  break;
-                case "Mesh":
-                  this._changeRoot();
-                  this._currentGeo = {};
-                  this._currentGeo.name = this._currentObject.name.trim();
-                  this._currentGeo.parentName = this._getParentName(this._currentObject).trim();
-                  this._currentGeo.VertexSetedBoneCount = [];
-                  this._currentGeo.GeometryData = {
-                    vertices: [],
-                    normals: [],
-                    uvs: [],
-                    skinIndices: [],
-                    skinWeights: [],
-                    indices: [],
-                    materialIndices: []
-                  };
-                  this._currentGeo.Materials = [];
-                  this._currentGeo.normalVectors = [];
-                  this._currentGeo.BoneInfs = [];
-                  this._currentGeo.baseFrame = this._currentFrame;
-                  this._makeBoneFrom_CurrentFrame();
-                  this._readVertexDatas();
-                  breakFlag = true;
-                  break;
-                case "MeshNormals":
-                  this._readVertexDatas();
-                  break;
-                case "MeshTextureCoords":
-                  this._setMeshTextureCoords();
-                  break;
-                case "VertexDuplicationIndices":
-                  break;
-                case "MeshMaterialList":
-                  this._setMeshMaterialList();
-                  break;
-                case "Material":
-                  this._setMaterial();
-                  break;
-                case "SkinWeights":
-                  this._setSkinWeights();
-                  break;
-                case "AnimationSet":
-                  this._changeRoot();
-                  this._currentAnime = {};
-                  this._currentAnime.name = this._currentObject.name.trim();
-                  this._currentAnime.AnimeFrames = [];
-                  break;
-                case "Animation":
-                  if (this._currentAnimeFrames) {
-                    this._currentAnime.AnimeFrames.push(this._currentAnimeFrames);
-                  }
-                  this._currentAnimeFrames = new XAnimationInfo();
-                  this._currentAnimeFrames.boneName = this._currentObject.data.trim();
-                  break;
-                case "AnimationKey":
-                  this._readAnimationKey();
-                  breakFlag = true;
-                  break;
-              }
-              this._currentObject.worked = true;
-            }
-            if (this._currentObject.children.length > 0) {
-              this._currentObject = this._currentObject.children.shift();
-              if (this.debug) {
-                console.log("processing " + this._currentObject.name);
-              }
-              if (breakFlag)
-                break;
-            } else {
-              if (this._currentObject.worked) {
-                if (this._currentObject.parent && !this._currentObject.parent.parent) {
-                  this._changeRoot();
-                }
-              }
-              if (this._currentObject.parent) {
-                this._currentObject = this._currentObject.parent;
-              } else {
-                breakFlag = true;
-              }
-              if (breakFlag)
-                break;
-            }
-          }
-          return;
-        }
-      },
-      {
-        key: "_changeRoot",
-        value: function _changeRoot() {
-          if (this._currentGeo != null && this._currentGeo.name) {
-            this._makeOutputGeometry();
-          }
-          this._currentGeo = {};
-          if (this._currentAnime != null && this._currentAnime.name) {
-            if (this._currentAnimeFrames) {
-              this._currentAnime.AnimeFrames.push(this._currentAnimeFrames);
-              this._currentAnimeFrames = null;
-            }
-            this._makeOutputAnimation();
-          }
-          this._currentAnime = {};
-        }
-      },
-      {
-        key: "_getParentName",
-        value: function _getParentName(_obj) {
-          if (_obj.parent) {
-            if (_obj.parent.name) {
-              return _obj.parent.name;
-            } else {
-              return this._getParentName(_obj.parent);
-            }
-          } else {
-            return "";
-          }
-        }
-      },
-      {
-        key: "_setFrame",
-        value: function _setFrame() {
-          this._nowFrameName = this._currentObject.name.trim();
-          this._currentFrame = {};
-          this._currentFrame.name = this._nowFrameName;
-          this._currentFrame.children = [];
-          if (this._currentObject.parent && this._currentObject.parent.name) {
-            this._currentFrame.parentName = this._currentObject.parent.name;
-          }
-          this.frameHierarchie.push(this._nowFrameName);
-          this.HieStack[this._nowFrameName] = this._currentFrame;
-        }
-      },
-      {
-        key: "_setFrameTransformMatrix",
-        value: function _setFrameTransformMatrix() {
-          this._currentFrame.FrameTransformMatrix = new three_module.Matrix4();
-          var data = this._currentObject.data.split(",");
-          this._ParseMatrixData(this._currentFrame.FrameTransformMatrix, data);
-          this._makeBoneFrom_CurrentFrame();
-        }
-      },
-      {
-        key: "_makeBoneFrom_CurrentFrame",
-        value: function _makeBoneFrom_CurrentFrame() {
-          if (!this._currentFrame.FrameTransformMatrix) {
-            return;
-          }
-          var b = new three_module.Bone();
-          b.name = this._currentFrame.name;
-          b.applyMatrix4(this._currentFrame.FrameTransformMatrix);
-          b.matrixWorld = b.matrix;
-          b.FrameTransformMatrix = this._currentFrame.FrameTransformMatrix;
-          this._currentFrame.putBone = b;
-          if (this._currentFrame.parentName) {
-            for (let frame in this.HieStack) {
-              if (this.HieStack[frame].name === this._currentFrame.parentName) {
-                this.HieStack[frame].putBone.add(this._currentFrame.putBone);
-              }
-            }
-          }
-        }
-      },
-      {
-        key: "_readVertexDatas",
-        value: function _readVertexDatas() {
-          var endRead = 0;
-          var mode = 0;
-          var mode_local = 0;
-          var maxLength = 0;
-          while (true) {
-            var changeMode = false;
-            if (mode_local === 0) {
-              var refO = this._readInt1(endRead);
-              endRead = refO.endRead;
-              mode_local = 1;
-              maxLength = this._currentObject.data.indexOf(";;", endRead) + 1;
-              if (maxLength <= 0) {
-                maxLength = this._currentObject.data.length;
-              }
-            } else {
-              var find = 0;
-              switch (mode) {
-                case 0:
-                  find = this._currentObject.data.indexOf(",", endRead) + 1;
-                  break;
-                case 1:
-                  find = this._currentObject.data.indexOf(";,", endRead) + 1;
-                  break;
-              }
-              if (find === 0 || find > maxLength) {
-                find = maxLength;
-                mode_local = 0;
-                changeMode = true;
-              }
-              switch (this._currentObject.type) {
-                case "Mesh":
-                  switch (mode) {
-                    case 0:
-                      this._readVertex1(this._currentObject.data.substr(endRead, find - endRead));
-                      break;
-                    case 1:
-                      this._readFace1(this._currentObject.data.substr(endRead, find - endRead));
-                      break;
-                  }
-                  break;
-                case "MeshNormals":
-                  switch (mode) {
-                    case 0:
-                      this._readNormalVector1(this._currentObject.data.substr(endRead, find - endRead));
-                      break;
-                  }
-                  break;
-              }
-              endRead = find + 1;
-              if (changeMode) {
-                mode++;
-              }
-            }
-            if (endRead >= this._currentObject.data.length) {
-              break;
-            }
-          }
-        }
-      },
-      {
-        key: "_readInt1",
-        value: function _readInt1(start) {
-          var find = this._currentObject.data.indexOf(";", start);
-          return {
-            refI: parseInt(this._currentObject.data.substr(start, find - start)),
-            endRead: find + 1
-          };
-        }
-      },
-      {
-        key: "_readVertex1",
-        value: function _readVertex1(line) {
-          var data = this._readLine(line.trim()).substr(0, line.length - 2).split(";");
-          this._currentGeo.GeometryData.vertices.push(parseFloat(data[0]), parseFloat(data[1]), parseFloat(data[2]));
-          this._currentGeo.GeometryData.skinIndices.push(0, 0, 0, 0);
-          this._currentGeo.GeometryData.skinWeights.push(1, 0, 0, 0);
-          this._currentGeo.VertexSetedBoneCount.push(0);
-        }
-      },
-      {
-        key: "_readFace1",
-        value: function _readFace1(line) {
-          var data = this._readLine(line.trim()).substr(2, line.length - 4).split(",");
-          this._currentGeo.GeometryData.indices.push(
-            parseInt(data[0], 10),
-            parseInt(data[1], 10),
-            parseInt(data[2], 10)
-          );
-        }
-      },
-      {
-        key: "_readNormalVector1",
-        value: function _readNormalVector1(line) {
-          var data = this._readLine(line.trim()).substr(0, line.length - 2).split(";");
-          this._currentGeo.GeometryData.normals.push(parseFloat(data[0]), parseFloat(data[1]), parseFloat(data[2]));
-        }
-      },
-      {
-        key: "_buildGeometry",
-        value: function _buildGeometry() {
-          var bufferGeometry = new three_module.BufferGeometry();
-          var position = [];
-          var normals = [];
-          var uvs = [];
-          var skinIndices = [];
-          var skinWeights = [];
-          var data = this._currentGeo.GeometryData;
-          for (let i2 = 0, l = data.indices.length; i2 < l; i2++) {
-            var stride2 = data.indices[i2] * 2;
-            var stride3 = data.indices[i2] * 3;
-            var stride4 = data.indices[i2] * 4;
-            position.push(data.vertices[stride3], data.vertices[stride3 + 1], data.vertices[stride3 + 2]);
-            normals.push(data.normals[stride3], data.normals[stride3 + 1], data.normals[stride3 + 2]);
-            skinIndices.push(
-              data.skinIndices[stride4],
-              data.skinIndices[stride4 + 1],
-              data.skinIndices[stride4 + 2],
-              data.skinIndices[stride4 + 3]
-            );
-            skinWeights.push(
-              data.skinWeights[stride4],
-              data.skinWeights[stride4 + 1],
-              data.skinWeights[stride4 + 2],
-              data.skinWeights[stride4 + 3]
-            );
-            uvs.push(data.uvs[stride2], data.uvs[stride2 + 1]);
-          }
-          bufferGeometry.setAttribute("position", new three_module.Float32BufferAttribute(position, 3));
-          bufferGeometry.setAttribute("normal", new three_module.Float32BufferAttribute(normals, 3));
-          bufferGeometry.setAttribute("uv", new three_module.Float32BufferAttribute(uvs, 2));
-          bufferGeometry.setAttribute("skinIndex", new three_module.Uint16BufferAttribute(skinIndices, 4));
-          bufferGeometry.setAttribute("skinWeight", new three_module.Float32BufferAttribute(skinWeights, 4));
-          this._computeGroups(bufferGeometry, data.materialIndices);
-          return bufferGeometry;
-        }
-      },
-      {
-        key: "_computeGroups",
-        value: function _computeGroups(bufferGeometry, materialIndices) {
-          var group;
-          var groups = [];
-          var materialIndex = void 0;
-          for (let i2 = 0; i2 < materialIndices.length; i2++) {
-            var currentMaterialIndex = materialIndices[i2];
-            if (currentMaterialIndex !== materialIndex) {
-              materialIndex = currentMaterialIndex;
-              if (group !== void 0) {
-                group.count = i2 * 3 - group.start;
-                groups.push(group);
-              }
-              group = {
-                start: i2 * 3,
-                materialIndex
-              };
-            }
-          }
-          if (group !== void 0) {
-            group.count = i * 3 - group.start;
-            groups.push(group);
-          }
-          bufferGeometry.groups = groups;
-        }
-      },
-      {
-        key: "_setMeshTextureCoords",
-        value: function _setMeshTextureCoords() {
-          var endRead = 0;
-          var mode = 0;
-          var mode_local = 0;
-          while (true) {
-            switch (mode) {
-              case 0:
-                if (mode_local === 0) {
-                  var refO = this._readInt1(0);
-                  endRead = refO.endRead;
-                  mode_local = 1;
-                } else {
-                  var find = this._currentObject.data.indexOf(",", endRead) + 1;
-                  if (find === 0) {
-                    find = this._currentObject.data.length;
-                    mode = 2;
-                    mode_local = 0;
-                  }
-                  var line = this._currentObject.data.substr(endRead, find - endRead);
-                  var data = this._readLine(line.trim()).split(";");
-                  if (this.IsUvYReverse) {
-                    this._currentGeo.GeometryData.uvs.push(parseFloat(data[0]), 1 - parseFloat(data[1]));
-                  } else {
-                    this._currentGeo.GeometryData.uvs.push(parseFloat(data[0]), parseFloat(data[1]));
-                  }
-                  endRead = find + 1;
-                }
-                break;
-            }
-            if (endRead >= this._currentObject.data.length) {
-              break;
-            }
-          }
-        }
-      },
-      {
-        key: "_setMeshMaterialList",
-        value: function _setMeshMaterialList() {
-          var endRead = 0;
-          var mode = 0;
-          var mode_local = 0;
-          while (true) {
-            if (mode_local < 2) {
-              var refO = this._readInt1(endRead);
-              endRead = refO.endRead;
-              mode_local++;
-            } else {
-              var find = this._currentObject.data.indexOf(";", endRead);
-              if (find === -1) {
-                find = this._currentObject.data.length;
-                mode = 3;
-                mode_local = 0;
-              }
-              var line = this._currentObject.data.substr(endRead, find - endRead);
-              var data = this._readLine(line.trim()).split(",");
-              for (let i2 = 0; i2 < data.length; i2++) {
-                this._currentGeo.GeometryData.materialIndices[i2] = parseInt(data[i2]);
-              }
-              endRead = this._currentObject.data.length;
-            }
-            if (endRead >= this._currentObject.data.length || mode >= 3) {
-              break;
-            }
-          }
-        }
-      },
-      {
-        key: "_setMaterial",
-        value: function _setMaterial() {
-          var _nowMat = new three_module.MeshPhongMaterial({
-            color: Math.random() * 16777215
-          });
-          _nowMat.side = three_module.FrontSide;
-          _nowMat.name = this._currentObject.name;
-          var endRead = 0;
-          var find = this._currentObject.data.indexOf(";;", endRead);
-          var line = this._currentObject.data.substr(endRead, find - endRead);
-          var data = this._readLine(line.trim()).split(";");
-          _nowMat.color.r = parseFloat(data[0]);
-          _nowMat.color.g = parseFloat(data[1]);
-          _nowMat.color.b = parseFloat(data[2]);
-          endRead = find + 2;
-          find = this._currentObject.data.indexOf(";", endRead);
-          line = this._currentObject.data.substr(endRead, find - endRead);
-          _nowMat.shininess = parseFloat(this._readLine(line));
-          endRead = find + 1;
-          find = this._currentObject.data.indexOf(";;", endRead);
-          line = this._currentObject.data.substr(endRead, find - endRead);
-          var data2 = this._readLine(line.trim()).split(";");
-          _nowMat.specular.r = parseFloat(data2[0]);
-          _nowMat.specular.g = parseFloat(data2[1]);
-          _nowMat.specular.b = parseFloat(data2[2]);
-          endRead = find + 2;
-          find = this._currentObject.data.indexOf(";;", endRead);
-          if (find === -1) {
-            find = this._currentObject.data.length;
-          }
-          line = this._currentObject.data.substr(endRead, find - endRead);
-          var data3 = this._readLine(line.trim()).split(";");
-          _nowMat.emissive.r = parseFloat(data3[0]);
-          _nowMat.emissive.g = parseFloat(data3[1]);
-          _nowMat.emissive.b = parseFloat(data3[2]);
-          var localObject = null;
-          while (true) {
-            if (this._currentObject.children.length > 0) {
-              localObject = this._currentObject.children.shift();
-              if (this.debug) {
-                console.log("processing " + localObject.name);
-              }
-              var fileName = localObject.data.substr(1, localObject.data.length - 2);
-              switch (localObject.type) {
-                case "TextureFilename":
-                  _nowMat.map = this.texloader.load(fileName);
-                  break;
-                case "BumpMapFilename":
-                  _nowMat.bumpMap = this.texloader.load(fileName);
-                  _nowMat.bumpScale = 0.05;
-                  break;
-                case "NormalMapFilename":
-                  _nowMat.normalMap = this.texloader.load(fileName);
-                  _nowMat.normalScale = new three_module.Vector2(2, 2);
-                  break;
-                case "EmissiveMapFilename":
-                  _nowMat.emissiveMap = this.texloader.load(fileName);
-                  break;
-                case "LightMapFilename":
-                  _nowMat.lightMap = this.texloader.load(fileName);
-                  break;
-              }
-            } else {
-              break;
-            }
-          }
-          this._currentGeo.Materials.push(_nowMat);
-        }
-      },
-      {
-        key: "_setSkinWeights",
-        value: function _setSkinWeights() {
-          var boneInf = new XboneInf();
-          var endRead = 0;
-          var find = this._currentObject.data.indexOf(";", endRead);
-          var line = this._currentObject.data.substr(endRead, find - endRead);
-          endRead = find + 1;
-          boneInf.boneName = line.substr(1, line.length - 2);
-          boneInf.BoneIndex = this._currentGeo.BoneInfs.length;
-          find = this._currentObject.data.indexOf(";", endRead);
-          endRead = find + 1;
-          find = this._currentObject.data.indexOf(";", endRead);
-          line = this._currentObject.data.substr(endRead, find - endRead);
-          var data = this._readLine(line.trim()).split(",");
-          for (let i2 = 0; i2 < data.length; i2++) {
-            boneInf.Indeces.push(parseInt(data[i2]));
-          }
-          endRead = find + 1;
-          find = this._currentObject.data.indexOf(";", endRead);
-          line = this._currentObject.data.substr(endRead, find - endRead);
-          var data2 = this._readLine(line.trim()).split(",");
-          for (let _i = 0; _i < data2.length; _i++) {
-            boneInf.Weights.push(parseFloat(data2[_i]));
-          }
-          endRead = find + 1;
-          find = this._currentObject.data.indexOf(";", endRead);
-          if (find <= 0) {
-            find = this._currentObject.data.length;
-          }
-          line = this._currentObject.data.substr(endRead, find - endRead);
-          var data3 = this._readLine(line.trim()).split(",");
-          boneInf.OffsetMatrix = new three_module.Matrix4();
-          this._ParseMatrixData(boneInf.OffsetMatrix, data3);
-          this._currentGeo.BoneInfs.push(boneInf);
-        }
-      },
-      {
-        key: "_makePutBoneList",
-        value: function _makePutBoneList(_RootName, _bones) {
-          var putting = false;
-          for (let frame in this.HieStack) {
-            if (this.HieStack[frame].name === _RootName || putting) {
-              putting = true;
-              var b = new three_module.Bone();
-              b.name = this.HieStack[frame].name;
-              b.applyMatrix4(this.HieStack[frame].FrameTransformMatrix);
-              b.matrixWorld = b.matrix;
-              b.FrameTransformMatrix = this.HieStack[frame].FrameTransformMatrix;
-              b.pos = new three_module.Vector3().setFromMatrixPosition(b.FrameTransformMatrix).toArray();
-              b.rotq = new three_module.Quaternion().setFromRotationMatrix(b.FrameTransformMatrix).toArray();
-              b.scl = new three_module.Vector3().setFromMatrixScale(b.FrameTransformMatrix).toArray();
-              if (this.HieStack[frame].parentName && this.HieStack[frame].parentName.length > 0) {
-                for (let i2 = 0; i2 < _bones.length; i2++) {
-                  if (this.HieStack[frame].parentName === _bones[i2].name) {
-                    _bones[i2].add(b);
-                    b.parent = i2;
-                    break;
-                  }
-                }
-              }
-              _bones.push(b);
-            }
-          }
-        }
-      },
-      {
-        key: "_makeOutputGeometry",
-        value: function _makeOutputGeometry() {
-          var mesh = null;
-          if (this._currentGeo.BoneInfs.length > 0) {
-            var putBones = [];
-            this._makePutBoneList(this._currentGeo.baseFrame.parentName, putBones);
-            for (let bi = 0; bi < this._currentGeo.BoneInfs.length; bi++) {
-              var boneIndex = 0;
-              for (let bb = 0; bb < putBones.length; bb++) {
-                if (putBones[bb].name === this._currentGeo.BoneInfs[bi].boneName) {
-                  boneIndex = bb;
-                  putBones[bb].OffsetMatrix = new three_module.Matrix4();
-                  putBones[bb].OffsetMatrix.copy(this._currentGeo.BoneInfs[bi].OffsetMatrix);
-                  break;
-                }
-              }
-              for (let vi = 0; vi < this._currentGeo.BoneInfs[bi].Indeces.length; vi++) {
-                var nowVertexID = this._currentGeo.BoneInfs[bi].Indeces[vi];
-                var nowVal = this._currentGeo.BoneInfs[bi].Weights[vi];
-                var stride = nowVertexID * 4;
-                switch (this._currentGeo.VertexSetedBoneCount[nowVertexID]) {
-                  case 0:
-                    this._currentGeo.GeometryData.skinIndices[stride] = boneIndex;
-                    this._currentGeo.GeometryData.skinWeights[stride] = nowVal;
-                    break;
-                  case 1:
-                    this._currentGeo.GeometryData.skinIndices[stride + 1] = boneIndex;
-                    this._currentGeo.GeometryData.skinWeights[stride + 1] = nowVal;
-                    break;
-                  case 2:
-                    this._currentGeo.GeometryData.skinIndices[stride + 2] = boneIndex;
-                    this._currentGeo.GeometryData.skinWeights[stride + 2] = nowVal;
-                    break;
-                  case 3:
-                    this._currentGeo.GeometryData.skinIndices[stride + 3] = boneIndex;
-                    this._currentGeo.GeometryData.skinWeights[stride + 3] = nowVal;
-                    break;
-                }
-                this._currentGeo.VertexSetedBoneCount[nowVertexID]++;
-                if (this._currentGeo.VertexSetedBoneCount[nowVertexID] > 4) {
-                  console.log("warn! over 4 bone weight! :" + nowVertexID);
-                }
-              }
-            }
-            for (let sk = 0; sk < this._currentGeo.Materials.length; sk++) {
-              this._currentGeo.Materials[sk].skinning = true;
-            }
-            var offsetList = [];
-            for (let _bi = 0; _bi < putBones.length; _bi++) {
-              if (putBones[_bi].OffsetMatrix) {
-                offsetList.push(putBones[_bi].OffsetMatrix);
-              } else {
-                offsetList.push(new three_module.Matrix4());
-              }
-            }
-            var bufferGeometry = this._buildGeometry();
-            mesh = new three_module.SkinnedMesh(
-              bufferGeometry,
-              this._currentGeo.Materials.length === 1 ? this._currentGeo.Materials[0] : this._currentGeo.Materials
-            );
-            this._initSkeleton(mesh, putBones, offsetList);
-          } else {
-            var _bufferGeometry = this._buildGeometry();
-            mesh = new three_module.Mesh(
-              _bufferGeometry,
-              this._currentGeo.Materials.length === 1 ? this._currentGeo.Materials[0] : this._currentGeo.Materials
-            );
-          }
-          mesh.name = this._currentGeo.name;
-          var worldBaseMx = new three_module.Matrix4();
-          var currentMxFrame = this._currentGeo.baseFrame.putBone;
-          if (currentMxFrame && currentMxFrame.parent) {
-            while (true) {
-              currentMxFrame = currentMxFrame.parent;
-              if (currentMxFrame) {
-                worldBaseMx.multiply(currentMxFrame.FrameTransformMatrix);
-              } else {
-                break;
-              }
-            }
-            mesh.applyMatrix4(worldBaseMx);
-          }
-          this.Meshes.push(mesh);
-        }
-      },
-      {
-        key: "_initSkeleton",
-        value: function _initSkeleton(mesh, boneList, boneInverses) {
-          var bones = [], bone, gbone;
-          var i2, il;
-          for (i2 = 0, il = boneList.length; i2 < il; i2++) {
-            gbone = boneList[i2];
-            bone = new three_module.Bone();
-            bones.push(bone);
-            bone.name = gbone.name;
-            bone.position.fromArray(gbone.pos);
-            bone.quaternion.fromArray(gbone.rotq);
-            if (gbone.scl !== void 0)
-              bone.scale.fromArray(gbone.scl);
-          }
-          for (i2 = 0, il = boneList.length; i2 < il; i2++) {
-            gbone = boneList[i2];
-            if (gbone.parent !== -1 && gbone.parent !== null && bones[gbone.parent] !== void 0) {
-              bones[gbone.parent].add(bones[i2]);
-            } else {
-              mesh.add(bones[i2]);
-            }
-          }
-          mesh.updateMatrixWorld(true);
-          var skeleton = new three_module.Skeleton(bones, boneInverses);
-          mesh.bind(skeleton, mesh.matrixWorld);
-        }
-      },
-      {
-        key: "_readAnimationKey",
-        value: function _readAnimationKey() {
-          var endRead = 0;
-          var find = this._currentObject.data.indexOf(";", endRead);
-          var line = this._currentObject.data.substr(endRead, find - endRead);
-          endRead = find + 1;
-          var nowKeyType = parseInt(this._readLine(line));
-          find = this._currentObject.data.indexOf(";", endRead);
-          endRead = find + 1;
-          line = this._currentObject.data.substr(endRead);
-          var data = this._readLine(line.trim()).split(";;,");
-          for (let i2 = 0; i2 < data.length; i2++) {
-            var data2 = data[i2].split(";");
-            var keyInfo = new XKeyFrameInfo();
-            keyInfo.type = nowKeyType;
-            keyInfo.Frame = parseInt(data2[0]);
-            keyInfo.index = this._currentAnimeFrames.keyFrames.length;
-            keyInfo.time = keyInfo.Frame;
-            if (nowKeyType != 4) {
-              var frameFound = false;
-              for (let mm = 0; mm < this._currentAnimeFrames.keyFrames.length; mm++) {
-                if (this._currentAnimeFrames.keyFrames[mm].Frame === keyInfo.Frame) {
-                  keyInfo = this._currentAnimeFrames.keyFrames[mm];
-                  frameFound = true;
-                  break;
-                }
-              }
-              var frameValue = data2[2].split(",");
-              switch (nowKeyType) {
-                case 0:
-                  keyInfo.rot = new three_module.Quaternion(
-                    parseFloat(frameValue[1]),
-                    parseFloat(frameValue[2]),
-                    parseFloat(frameValue[3]),
-                    parseFloat(frameValue[0]) * -1
-                  );
-                  break;
-                case 1:
-                  keyInfo.scl = new three_module.Vector3(
-                    parseFloat(frameValue[0]),
-                    parseFloat(frameValue[1]),
-                    parseFloat(frameValue[2])
-                  );
-                  break;
-                case 2:
-                  keyInfo.pos = new three_module.Vector3(
-                    parseFloat(frameValue[0]),
-                    parseFloat(frameValue[1]),
-                    parseFloat(frameValue[2])
-                  );
-                  break;
-              }
-              if (!frameFound) {
-                this._currentAnimeFrames.keyFrames.push(keyInfo);
-              }
-            } else {
-              keyInfo.matrix = new three_module.Matrix4();
-              this._ParseMatrixData(keyInfo.matrix, data2[2].split(","));
-              this._currentAnimeFrames.keyFrames.push(keyInfo);
-            }
-          }
-        }
-      },
-      {
-        key: "_makeOutputAnimation",
-        value: function _makeOutputAnimation() {
-          var animationObj = new XAnimationObj(this.options);
-          animationObj.fps = this.animTicksPerSecond;
-          animationObj.name = this._currentAnime.name;
-          animationObj.make(this._currentAnime.AnimeFrames);
-          this.animations.push(animationObj);
-        }
-      },
-      {
-        key: "assignAnimation",
-        value: function assignAnimation(_model, _animation) {
-          var model = _model;
-          var animation = _animation;
-          if (!model) {
-            model = this.Meshes[0];
-          }
-          if (!animation) {
-            animation = this.animations[0];
-          }
-          if (!model || !animation) {
-            return null;
-          }
-          var put = {};
-          put.fps = animation.fps;
-          put.name = animation.name;
-          put.length = animation.length;
-          put.hierarchy = [];
-          for (let b = 0; b < model.skeleton.bones.length; b++) {
-            var findAnimation = false;
-            for (let i2 = 0; i2 < animation.hierarchy.length; i2++) {
-              if (model.skeleton.bones[b].name === animation.hierarchy[i2].name) {
-                findAnimation = true;
-                var c_key = animation.hierarchy[i2].copy();
-                c_key.parent = -1;
-                if (model.skeleton.bones[b].parent && model.skeleton.bones[b].parent.type === "Bone") {
-                  for (let bb = 0; bb < put.hierarchy.length; bb++) {
-                    if (put.hierarchy[bb].name === model.skeleton.bones[b].parent.name) {
-                      c_key.parent = bb;
-                      c_key.parentName = model.skeleton.bones[b].parent.name;
-                    }
-                  }
-                }
-                put.hierarchy.push(c_key);
-                break;
-              }
-            }
-            if (!findAnimation) {
-              var _c_key = animation.hierarchy[0].copy();
-              _c_key.name = model.skeleton.bones[b].name;
-              _c_key.parent = -1;
-              for (let k = 0; k < _c_key.keys.length; k++) {
-                if (_c_key.keys[k].pos) {
-                  _c_key.keys[k].pos.set(0, 0, 0);
-                }
-                if (_c_key.keys[k].scl) {
-                  _c_key.keys[k].scl.set(1, 1, 1);
-                }
-                if (_c_key.keys[k].rot) {
-                  _c_key.keys[k].rot.set(0, 0, 0, 1);
-                }
-              }
-              put.hierarchy.push(_c_key);
-            }
-          }
-          if (!model.geometry.animations) {
-            model.geometry.animations = [];
-          }
-          model.geometry.animations.push(three_module.AnimationClip.parseAnimation(put, model.skeleton.bones));
-          if (!model.animationMixer) {
-            model.animationMixer = new three_module.AnimationMixer(model);
-          }
-          return put;
-        }
-      },
-      {
-        key: "_ParseMatrixData",
-        value: function _ParseMatrixData(targetMatrix, data) {
-          targetMatrix.set(
-            parseFloat(data[0]),
-            parseFloat(data[4]),
-            parseFloat(data[8]),
-            parseFloat(data[12]),
-            parseFloat(data[1]),
-            parseFloat(data[5]),
-            parseFloat(data[9]),
-            parseFloat(data[13]),
-            parseFloat(data[2]),
-            parseFloat(data[6]),
-            parseFloat(data[10]),
-            parseFloat(data[14]),
-            parseFloat(data[3]),
-            parseFloat(data[7]),
-            parseFloat(data[11]),
-            parseFloat(data[15])
-          );
-        }
-      }
-    ]);
-    return XLoader3;
-  }();
-  return XLoader2;
-}();
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/BVHLoader.js
-
-class BVHLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.animateBonePositions = true;
-    this.animateBoneRotations = true;
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(text) {
-    function readBvh(lines2) {
-      if (nextLine(lines2) !== "HIERARCHY") {
-        console.error("THREE.BVHLoader: HIERARCHY expected.");
-      }
-      const list = [];
-      const root = readNode(lines2, nextLine(lines2), list);
-      if (nextLine(lines2) !== "MOTION") {
-        console.error("THREE.BVHLoader: MOTION expected.");
-      }
-      let tokens = nextLine(lines2).split(/[\s]+/);
-      const numFrames = parseInt(tokens[1]);
-      if (isNaN(numFrames)) {
-        console.error("THREE.BVHLoader: Failed to read number of frames.");
-      }
-      tokens = nextLine(lines2).split(/[\s]+/);
-      const frameTime = parseFloat(tokens[2]);
-      if (isNaN(frameTime)) {
-        console.error("THREE.BVHLoader: Failed to read frame time.");
-      }
-      for (let i = 0; i < numFrames; i++) {
-        tokens = nextLine(lines2).split(/[\s]+/);
-        readFrameData(tokens, i * frameTime, root);
-      }
-      return list;
-    }
-    function readFrameData(data, frameTime, bone) {
-      if (bone.type === "ENDSITE")
-        return;
-      const keyframe = {
-        time: frameTime,
-        position: new three_module.Vector3(),
-        rotation: new three_module.Quaternion()
-      };
-      bone.frames.push(keyframe);
-      const quat = new three_module.Quaternion();
-      const vx = new three_module.Vector3(1, 0, 0);
-      const vy = new three_module.Vector3(0, 1, 0);
-      const vz = new three_module.Vector3(0, 0, 1);
-      for (let i = 0; i < bone.channels.length; i++) {
-        switch (bone.channels[i]) {
-          case "Xposition":
-            keyframe.position.x = parseFloat(data.shift().trim());
-            break;
-          case "Yposition":
-            keyframe.position.y = parseFloat(data.shift().trim());
-            break;
-          case "Zposition":
-            keyframe.position.z = parseFloat(data.shift().trim());
-            break;
-          case "Xrotation":
-            quat.setFromAxisAngle(vx, parseFloat(data.shift().trim()) * Math.PI / 180);
-            keyframe.rotation.multiply(quat);
-            break;
-          case "Yrotation":
-            quat.setFromAxisAngle(vy, parseFloat(data.shift().trim()) * Math.PI / 180);
-            keyframe.rotation.multiply(quat);
-            break;
-          case "Zrotation":
-            quat.setFromAxisAngle(vz, parseFloat(data.shift().trim()) * Math.PI / 180);
-            keyframe.rotation.multiply(quat);
-            break;
-          default:
-            console.warn("THREE.BVHLoader: Invalid channel type.");
-        }
-      }
-      for (let i = 0; i < bone.children.length; i++) {
-        readFrameData(data, frameTime, bone.children[i]);
-      }
-    }
-    function readNode(lines2, firstline, list) {
-      const node = { name: "", type: "", frames: [] };
-      list.push(node);
-      let tokens = firstline.split(/[\s]+/);
-      if (tokens[0].toUpperCase() === "END" && tokens[1].toUpperCase() === "SITE") {
-        node.type = "ENDSITE";
-        node.name = "ENDSITE";
-      } else {
-        node.name = tokens[1];
-        node.type = tokens[0].toUpperCase();
-      }
-      if (nextLine(lines2) !== "{") {
-        console.error("THREE.BVHLoader: Expected opening { after type & name");
-      }
-      tokens = nextLine(lines2).split(/[\s]+/);
-      if (tokens[0] !== "OFFSET") {
-        console.error("THREE.BVHLoader: Expected OFFSET but got: " + tokens[0]);
-      }
-      if (tokens.length !== 4) {
-        console.error("THREE.BVHLoader: Invalid number of values for OFFSET.");
-      }
-      const offset = new three_module.Vector3(parseFloat(tokens[1]), parseFloat(tokens[2]), parseFloat(tokens[3]));
-      if (isNaN(offset.x) || isNaN(offset.y) || isNaN(offset.z)) {
-        console.error("THREE.BVHLoader: Invalid values of OFFSET.");
-      }
-      node.offset = offset;
-      if (node.type !== "ENDSITE") {
-        tokens = nextLine(lines2).split(/[\s]+/);
-        if (tokens[0] !== "CHANNELS") {
-          console.error("THREE.BVHLoader: Expected CHANNELS definition.");
-        }
-        const numChannels = parseInt(tokens[1]);
-        node.channels = tokens.splice(2, numChannels);
-        node.children = [];
-      }
-      while (true) {
-        const line = nextLine(lines2);
-        if (line === "}") {
-          return node;
-        } else {
-          node.children.push(readNode(lines2, line, list));
-        }
-      }
-    }
-    function toTHREEBone(source, list) {
-      const bone = new three_module.Bone();
-      list.push(bone);
-      bone.position.add(source.offset);
-      bone.name = source.name;
-      if (source.type !== "ENDSITE") {
-        for (let i = 0; i < source.children.length; i++) {
-          bone.add(toTHREEBone(source.children[i], list));
-        }
-      }
-      return bone;
-    }
-    function toTHREEAnimation(bones2) {
-      const tracks = [];
-      for (let i = 0; i < bones2.length; i++) {
-        const bone = bones2[i];
-        if (bone.type === "ENDSITE")
-          continue;
-        const times = [];
-        const positions = [];
-        const rotations = [];
-        for (let j = 0; j < bone.frames.length; j++) {
-          const frame = bone.frames[j];
-          times.push(frame.time);
-          positions.push(frame.position.x + bone.offset.x);
-          positions.push(frame.position.y + bone.offset.y);
-          positions.push(frame.position.z + bone.offset.z);
-          rotations.push(frame.rotation.x);
-          rotations.push(frame.rotation.y);
-          rotations.push(frame.rotation.z);
-          rotations.push(frame.rotation.w);
-        }
-        if (scope.animateBonePositions) {
-          tracks.push(new three_module.VectorKeyframeTrack(".bones[" + bone.name + "].position", times, positions));
-        }
-        if (scope.animateBoneRotations) {
-          tracks.push(new three_module.QuaternionKeyframeTrack(".bones[" + bone.name + "].quaternion", times, rotations));
-        }
-      }
-      return new three_module.AnimationClip("animation", -1, tracks);
-    }
-    function nextLine(lines2) {
-      let line;
-      while ((line = lines2.shift().trim()).length === 0) {
-      }
-      return line;
-    }
-    const scope = this;
-    const lines = text.split(/[\r\n]+/g);
-    const bones = readBvh(lines);
-    const threeBones = [];
-    toTHREEBone(bones[0], threeBones);
-    const threeClip = toTHREEAnimation(bones);
-    return {
-      skeleton: new three_module.Skeleton(threeBones),
-      clip: threeClip
-    };
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/ColladaLoader.js
-
-
-class ColladaLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const path = scope.path === "" ? three_module.LoaderUtils.extractUrlBase(url) : scope.path;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text, path));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(text, path) {
-    function getElementsByTagName(xml2, name) {
-      const array = [];
-      const childNodes = xml2.childNodes;
-      for (let i = 0, l = childNodes.length; i < l; i++) {
-        const child = childNodes[i];
-        if (child.nodeName === name) {
-          array.push(child);
-        }
-      }
-      return array;
-    }
-    function parseStrings(text2) {
-      if (text2.length === 0)
-        return [];
-      const parts = text2.trim().split(/\s+/);
-      const array = new Array(parts.length);
-      for (let i = 0, l = parts.length; i < l; i++) {
-        array[i] = parts[i];
-      }
-      return array;
-    }
-    function parseFloats(text2) {
-      if (text2.length === 0)
-        return [];
-      const parts = text2.trim().split(/\s+/);
-      const array = new Array(parts.length);
-      for (let i = 0, l = parts.length; i < l; i++) {
-        array[i] = parseFloat(parts[i]);
-      }
-      return array;
-    }
-    function parseInts(text2) {
-      if (text2.length === 0)
-        return [];
-      const parts = text2.trim().split(/\s+/);
-      const array = new Array(parts.length);
-      for (let i = 0, l = parts.length; i < l; i++) {
-        array[i] = parseInt(parts[i]);
-      }
-      return array;
-    }
-    function parseId(text2) {
-      return text2.substring(1);
-    }
-    function generateId() {
-      return "three_default_" + count++;
-    }
-    function isEmpty(object) {
-      return Object.keys(object).length === 0;
-    }
-    function parseAsset(xml2) {
-      return {
-        unit: parseAssetUnit(getElementsByTagName(xml2, "unit")[0]),
-        upAxis: parseAssetUpAxis(getElementsByTagName(xml2, "up_axis")[0])
-      };
-    }
-    function parseAssetUnit(xml2) {
-      if (xml2 !== void 0 && xml2.hasAttribute("meter") === true) {
-        return parseFloat(xml2.getAttribute("meter"));
-      } else {
-        return 1;
-      }
-    }
-    function parseAssetUpAxis(xml2) {
-      return xml2 !== void 0 ? xml2.textContent : "Y_UP";
-    }
-    function parseLibrary(xml2, libraryName, nodeName, parser) {
-      const library2 = getElementsByTagName(xml2, libraryName)[0];
-      if (library2 !== void 0) {
-        const elements = getElementsByTagName(library2, nodeName);
-        for (let i = 0; i < elements.length; i++) {
-          parser(elements[i]);
-        }
-      }
-    }
-    function buildLibrary(data, builder) {
-      for (const name in data) {
-        const object = data[name];
-        object.build = builder(data[name]);
-      }
-    }
-    function getBuild(data, builder) {
-      if (data.build !== void 0)
-        return data.build;
-      data.build = builder(data);
-      return data.build;
-    }
-    function parseAnimation(xml2) {
-      const data = {
-        sources: {},
-        samplers: {},
-        channels: {}
-      };
-      let hasChildren = false;
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        let id;
-        switch (child.nodeName) {
-          case "source":
-            id = child.getAttribute("id");
-            data.sources[id] = parseSource(child);
-            break;
-          case "sampler":
-            id = child.getAttribute("id");
-            data.samplers[id] = parseAnimationSampler(child);
-            break;
-          case "channel":
-            id = child.getAttribute("target");
-            data.channels[id] = parseAnimationChannel(child);
-            break;
-          case "animation":
-            parseAnimation(child);
-            hasChildren = true;
-            break;
-          default:
-            console.log(child);
-        }
-      }
-      if (hasChildren === false) {
-        library.animations[xml2.getAttribute("id") || three_module.MathUtils.generateUUID()] = data;
-      }
-    }
-    function parseAnimationSampler(xml2) {
-      const data = {
-        inputs: {}
-      };
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "input":
-            const id = parseId(child.getAttribute("source"));
-            const semantic = child.getAttribute("semantic");
-            data.inputs[semantic] = id;
-            break;
-        }
-      }
-      return data;
-    }
-    function parseAnimationChannel(xml2) {
-      const data = {};
-      const target = xml2.getAttribute("target");
-      let parts = target.split("/");
-      const id = parts.shift();
-      let sid = parts.shift();
-      const arraySyntax = sid.indexOf("(") !== -1;
-      const memberSyntax = sid.indexOf(".") !== -1;
-      if (memberSyntax) {
-        parts = sid.split(".");
-        sid = parts.shift();
-        data.member = parts.shift();
-      } else if (arraySyntax) {
-        const indices = sid.split("(");
-        sid = indices.shift();
-        for (let i = 0; i < indices.length; i++) {
-          indices[i] = parseInt(indices[i].replace(/\)/, ""));
-        }
-        data.indices = indices;
-      }
-      data.id = id;
-      data.sid = sid;
-      data.arraySyntax = arraySyntax;
-      data.memberSyntax = memberSyntax;
-      data.sampler = parseId(xml2.getAttribute("source"));
-      return data;
-    }
-    function buildAnimation(data) {
-      const tracks = [];
-      const channels = data.channels;
-      const samplers = data.samplers;
-      const sources = data.sources;
-      for (const target in channels) {
-        if (channels.hasOwnProperty(target)) {
-          const channel = channels[target];
-          const sampler = samplers[channel.sampler];
-          const inputId = sampler.inputs.INPUT;
-          const outputId = sampler.inputs.OUTPUT;
-          const inputSource = sources[inputId];
-          const outputSource = sources[outputId];
-          const animation = buildAnimationChannel(channel, inputSource, outputSource);
-          createKeyframeTracks(animation, tracks);
-        }
-      }
-      return tracks;
-    }
-    function getAnimation(id) {
-      return getBuild(library.animations[id], buildAnimation);
-    }
-    function buildAnimationChannel(channel, inputSource, outputSource) {
-      const node = library.nodes[channel.id];
-      const object3D = getNode(node.id);
-      const transform = node.transforms[channel.sid];
-      const defaultMatrix = node.matrix.clone().transpose();
-      let time, stride;
-      let i, il, j, jl;
-      const data = {};
-      switch (transform) {
-        case "matrix":
-          for (i = 0, il = inputSource.array.length; i < il; i++) {
-            time = inputSource.array[i];
-            stride = i * outputSource.stride;
-            if (data[time] === void 0)
-              data[time] = {};
-            if (channel.arraySyntax === true) {
-              const value = outputSource.array[stride];
-              const index = channel.indices[0] + 4 * channel.indices[1];
-              data[time][index] = value;
-            } else {
-              for (j = 0, jl = outputSource.stride; j < jl; j++) {
-                data[time][j] = outputSource.array[stride + j];
-              }
-            }
-          }
-          break;
-        case "translate":
-          console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform);
-          break;
-        case "rotate":
-          console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform);
-          break;
-        case "scale":
-          console.warn('THREE.ColladaLoader: Animation transform type "%s" not yet implemented.', transform);
-          break;
-      }
-      const keyframes = prepareAnimationData(data, defaultMatrix);
-      const animation = {
-        name: object3D.uuid,
-        keyframes
-      };
-      return animation;
-    }
-    function prepareAnimationData(data, defaultMatrix) {
-      const keyframes = [];
-      for (const time in data) {
-        keyframes.push({ time: parseFloat(time), value: data[time] });
-      }
-      keyframes.sort(ascending);
-      for (let i = 0; i < 16; i++) {
-        transformAnimationData(keyframes, i, defaultMatrix.elements[i]);
-      }
-      return keyframes;
-      function ascending(a, b) {
-        return a.time - b.time;
-      }
-    }
-    const position = new three_module.Vector3();
-    const scale = new three_module.Vector3();
-    const quaternion = new three_module.Quaternion();
-    function createKeyframeTracks(animation, tracks) {
-      const keyframes = animation.keyframes;
-      const name = animation.name;
-      const times = [];
-      const positionData = [];
-      const quaternionData = [];
-      const scaleData = [];
-      for (let i = 0, l = keyframes.length; i < l; i++) {
-        const keyframe = keyframes[i];
-        const time = keyframe.time;
-        const value = keyframe.value;
-        matrix.fromArray(value).transpose();
-        matrix.decompose(position, quaternion, scale);
-        times.push(time);
-        positionData.push(position.x, position.y, position.z);
-        quaternionData.push(quaternion.x, quaternion.y, quaternion.z, quaternion.w);
-        scaleData.push(scale.x, scale.y, scale.z);
-      }
-      if (positionData.length > 0)
-        tracks.push(new three_module.VectorKeyframeTrack(name + ".position", times, positionData));
-      if (quaternionData.length > 0) {
-        tracks.push(new three_module.QuaternionKeyframeTrack(name + ".quaternion", times, quaternionData));
-      }
-      if (scaleData.length > 0)
-        tracks.push(new three_module.VectorKeyframeTrack(name + ".scale", times, scaleData));
-      return tracks;
-    }
-    function transformAnimationData(keyframes, property, defaultValue) {
-      let keyframe;
-      let empty = true;
-      let i, l;
-      for (i = 0, l = keyframes.length; i < l; i++) {
-        keyframe = keyframes[i];
-        if (keyframe.value[property] === void 0) {
-          keyframe.value[property] = null;
-        } else {
-          empty = false;
-        }
-      }
-      if (empty === true) {
-        for (i = 0, l = keyframes.length; i < l; i++) {
-          keyframe = keyframes[i];
-          keyframe.value[property] = defaultValue;
-        }
-      } else {
-        createMissingKeyframes(keyframes, property);
-      }
-    }
-    function createMissingKeyframes(keyframes, property) {
-      let prev, next;
-      for (let i = 0, l = keyframes.length; i < l; i++) {
-        const keyframe = keyframes[i];
-        if (keyframe.value[property] === null) {
-          prev = getPrev(keyframes, i, property);
-          next = getNext(keyframes, i, property);
-          if (prev === null) {
-            keyframe.value[property] = next.value[property];
-            continue;
-          }
-          if (next === null) {
-            keyframe.value[property] = prev.value[property];
-            continue;
-          }
-          interpolate(keyframe, prev, next, property);
-        }
-      }
-    }
-    function getPrev(keyframes, i, property) {
-      while (i >= 0) {
-        const keyframe = keyframes[i];
-        if (keyframe.value[property] !== null)
-          return keyframe;
-        i--;
-      }
-      return null;
-    }
-    function getNext(keyframes, i, property) {
-      while (i < keyframes.length) {
-        const keyframe = keyframes[i];
-        if (keyframe.value[property] !== null)
-          return keyframe;
-        i++;
-      }
-      return null;
-    }
-    function interpolate(key, prev, next, property) {
-      if (next.time - prev.time === 0) {
-        key.value[property] = prev.value[property];
-        return;
-      }
-      key.value[property] = (key.time - prev.time) * (next.value[property] - prev.value[property]) / (next.time - prev.time) + prev.value[property];
-    }
-    function parseAnimationClip(xml2) {
-      const data = {
-        name: xml2.getAttribute("id") || "default",
-        start: parseFloat(xml2.getAttribute("start") || 0),
-        end: parseFloat(xml2.getAttribute("end") || 0),
-        animations: []
-      };
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "instance_animation":
-            data.animations.push(parseId(child.getAttribute("url")));
-            break;
-        }
-      }
-      library.clips[xml2.getAttribute("id")] = data;
-    }
-    function buildAnimationClip(data) {
-      const tracks = [];
-      const name = data.name;
-      const duration = data.end - data.start || -1;
-      const animations2 = data.animations;
-      for (let i = 0, il = animations2.length; i < il; i++) {
-        const animationTracks = getAnimation(animations2[i]);
-        for (let j = 0, jl = animationTracks.length; j < jl; j++) {
-          tracks.push(animationTracks[j]);
-        }
-      }
-      return new three_module.AnimationClip(name, duration, tracks);
-    }
-    function getAnimationClip(id) {
-      return getBuild(library.clips[id], buildAnimationClip);
-    }
-    function parseController(xml2) {
-      const data = {};
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "skin":
-            data.id = parseId(child.getAttribute("source"));
-            data.skin = parseSkin(child);
-            break;
-          case "morph":
-            data.id = parseId(child.getAttribute("source"));
-            console.warn("THREE.ColladaLoader: Morph target animation not supported yet.");
-            break;
-        }
-      }
-      library.controllers[xml2.getAttribute("id")] = data;
-    }
-    function parseSkin(xml2) {
-      const data = {
-        sources: {}
-      };
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "bind_shape_matrix":
-            data.bindShapeMatrix = parseFloats(child.textContent);
-            break;
-          case "source":
-            const id = child.getAttribute("id");
-            data.sources[id] = parseSource(child);
-            break;
-          case "joints":
-            data.joints = parseJoints(child);
-            break;
-          case "vertex_weights":
-            data.vertexWeights = parseVertexWeights(child);
-            break;
-        }
-      }
-      return data;
-    }
-    function parseJoints(xml2) {
-      const data = {
-        inputs: {}
-      };
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "input":
-            const semantic = child.getAttribute("semantic");
-            const id = parseId(child.getAttribute("source"));
-            data.inputs[semantic] = id;
-            break;
-        }
-      }
-      return data;
-    }
-    function parseVertexWeights(xml2) {
-      const data = {
-        inputs: {}
-      };
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "input":
-            const semantic = child.getAttribute("semantic");
-            const id = parseId(child.getAttribute("source"));
-            const offset = parseInt(child.getAttribute("offset"));
-            data.inputs[semantic] = { id, offset };
-            break;
-          case "vcount":
-            data.vcount = parseInts(child.textContent);
-            break;
-          case "v":
-            data.v = parseInts(child.textContent);
-            break;
-        }
-      }
-      return data;
-    }
-    function buildController(data) {
-      const build = {
-        id: data.id
-      };
-      const geometry = library.geometries[build.id];
-      if (data.skin !== void 0) {
-        build.skin = buildSkin(data.skin);
-        geometry.sources.skinIndices = build.skin.indices;
-        geometry.sources.skinWeights = build.skin.weights;
-      }
-      return build;
-    }
-    function buildSkin(data) {
-      const BONE_LIMIT = 4;
-      const build = {
-        joints: [],
-        // this must be an array to preserve the joint order
-        indices: {
-          array: [],
-          stride: BONE_LIMIT
-        },
-        weights: {
-          array: [],
-          stride: BONE_LIMIT
-        }
-      };
-      const sources = data.sources;
-      const vertexWeights = data.vertexWeights;
-      const vcount = vertexWeights.vcount;
-      const v = vertexWeights.v;
-      const jointOffset = vertexWeights.inputs.JOINT.offset;
-      const weightOffset = vertexWeights.inputs.WEIGHT.offset;
-      const jointSource = data.sources[data.joints.inputs.JOINT];
-      const inverseSource = data.sources[data.joints.inputs.INV_BIND_MATRIX];
-      const weights = sources[vertexWeights.inputs.WEIGHT.id].array;
-      let stride = 0;
-      let i, j, l;
-      for (i = 0, l = vcount.length; i < l; i++) {
-        const jointCount = vcount[i];
-        const vertexSkinData = [];
-        for (j = 0; j < jointCount; j++) {
-          const skinIndex = v[stride + jointOffset];
-          const weightId = v[stride + weightOffset];
-          const skinWeight = weights[weightId];
-          vertexSkinData.push({ index: skinIndex, weight: skinWeight });
-          stride += 2;
-        }
-        vertexSkinData.sort(descending);
-        for (j = 0; j < BONE_LIMIT; j++) {
-          const d = vertexSkinData[j];
-          if (d !== void 0) {
-            build.indices.array.push(d.index);
-            build.weights.array.push(d.weight);
-          } else {
-            build.indices.array.push(0);
-            build.weights.array.push(0);
-          }
-        }
-      }
-      if (data.bindShapeMatrix) {
-        build.bindMatrix = new three_module.Matrix4().fromArray(data.bindShapeMatrix).transpose();
-      } else {
-        build.bindMatrix = new three_module.Matrix4().identity();
-      }
-      for (i = 0, l = jointSource.array.length; i < l; i++) {
-        const name = jointSource.array[i];
-        const boneInverse = new three_module.Matrix4().fromArray(inverseSource.array, i * inverseSource.stride).transpose();
-        build.joints.push({ name, boneInverse });
-      }
-      return build;
-      function descending(a, b) {
-        return b.weight - a.weight;
-      }
-    }
-    function getController(id) {
-      return getBuild(library.controllers[id], buildController);
-    }
-    function parseImage(xml2) {
-      const data = {
-        init_from: getElementsByTagName(xml2, "init_from")[0].textContent
-      };
-      library.images[xml2.getAttribute("id")] = data;
-    }
-    function buildImage(data) {
-      if (data.build !== void 0)
-        return data.build;
-      return data.init_from;
-    }
-    function getImage(id) {
-      const data = library.images[id];
-      if (data !== void 0) {
-        return getBuild(data, buildImage);
-      }
-      console.warn("THREE.ColladaLoader: Couldn't find image with ID:", id);
-      return null;
-    }
-    function parseEffect(xml2) {
-      const data = {};
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "profile_COMMON":
-            data.profile = parseEffectProfileCOMMON(child);
-            break;
-        }
-      }
-      library.effects[xml2.getAttribute("id")] = data;
-    }
-    function parseEffectProfileCOMMON(xml2) {
-      const data = {
-        surfaces: {},
-        samplers: {}
-      };
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "newparam":
-            parseEffectNewparam(child, data);
-            break;
-          case "technique":
-            data.technique = parseEffectTechnique(child);
-            break;
-          case "extra":
-            data.extra = parseEffectExtra(child);
-            break;
-        }
-      }
-      return data;
-    }
-    function parseEffectNewparam(xml2, data) {
-      const sid = xml2.getAttribute("sid");
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "surface":
-            data.surfaces[sid] = parseEffectSurface(child);
-            break;
-          case "sampler2D":
-            data.samplers[sid] = parseEffectSampler(child);
-            break;
-        }
-      }
-    }
-    function parseEffectSurface(xml2) {
-      const data = {};
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "init_from":
-            data.init_from = child.textContent;
-            break;
-        }
-      }
-      return data;
-    }
-    function parseEffectSampler(xml2) {
-      const data = {};
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "source":
-            data.source = child.textContent;
-            break;
-        }
-      }
-      return data;
-    }
-    function parseEffectTechnique(xml2) {
-      const data = {};
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "constant":
-          case "lambert":
-          case "blinn":
-          case "phong":
-            data.type = child.nodeName;
-            data.parameters = parseEffectParameters(child);
-            break;
-          case "extra":
-            data.extra = parseEffectExtra(child);
-            break;
-        }
-      }
-      return data;
-    }
-    function parseEffectParameters(xml2) {
-      const data = {};
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "emission":
-          case "diffuse":
-          case "specular":
-          case "bump":
-          case "ambient":
-          case "shininess":
-          case "transparency":
-            data[child.nodeName] = parseEffectParameter(child);
-            break;
-          case "transparent":
-            data[child.nodeName] = {
-              opaque: child.hasAttribute("opaque") ? child.getAttribute("opaque") : "A_ONE",
-              data: parseEffectParameter(child)
-            };
-            break;
-        }
-      }
-      return data;
-    }
-    function parseEffectParameter(xml2) {
-      const data = {};
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "color":
-            data[child.nodeName] = parseFloats(child.textContent);
-            break;
-          case "float":
-            data[child.nodeName] = parseFloat(child.textContent);
-            break;
-          case "texture":
-            data[child.nodeName] = { id: child.getAttribute("texture"), extra: parseEffectParameterTexture(child) };
-            break;
-        }
-      }
-      return data;
-    }
-    function parseEffectParameterTexture(xml2) {
-      const data = {
-        technique: {}
-      };
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "extra":
-            parseEffectParameterTextureExtra(child, data);
-            break;
-        }
-      }
-      return data;
-    }
-    function parseEffectParameterTextureExtra(xml2, data) {
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "technique":
-            parseEffectParameterTextureExtraTechnique(child, data);
-            break;
-        }
-      }
-    }
-    function parseEffectParameterTextureExtraTechnique(xml2, data) {
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "repeatU":
-          case "repeatV":
-          case "offsetU":
-          case "offsetV":
-            data.technique[child.nodeName] = parseFloat(child.textContent);
-            break;
-          case "wrapU":
-          case "wrapV":
-            if (child.textContent.toUpperCase() === "TRUE") {
-              data.technique[child.nodeName] = 1;
-            } else if (child.textContent.toUpperCase() === "FALSE") {
-              data.technique[child.nodeName] = 0;
-            } else {
-              data.technique[child.nodeName] = parseInt(child.textContent);
-            }
-            break;
-          case "bump":
-            data[child.nodeName] = parseEffectExtraTechniqueBump(child);
-            break;
-        }
-      }
-    }
-    function parseEffectExtra(xml2) {
-      const data = {};
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "technique":
-            data.technique = parseEffectExtraTechnique(child);
-            break;
-        }
-      }
-      return data;
-    }
-    function parseEffectExtraTechnique(xml2) {
-      const data = {};
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "double_sided":
-            data[child.nodeName] = parseInt(child.textContent);
-            break;
-          case "bump":
-            data[child.nodeName] = parseEffectExtraTechniqueBump(child);
-            break;
-        }
-      }
-      return data;
-    }
-    function parseEffectExtraTechniqueBump(xml2) {
-      var data = {};
-      for (var i = 0, l = xml2.childNodes.length; i < l; i++) {
-        var child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "texture":
-            data[child.nodeName] = {
-              id: child.getAttribute("texture"),
-              texcoord: child.getAttribute("texcoord"),
-              extra: parseEffectParameterTexture(child)
-            };
-            break;
-        }
-      }
-      return data;
-    }
-    function buildEffect(data) {
-      return data;
-    }
-    function getEffect(id) {
-      return getBuild(library.effects[id], buildEffect);
-    }
-    function parseMaterial(xml2) {
-      const data = {
-        name: xml2.getAttribute("name")
-      };
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "instance_effect":
-            data.url = parseId(child.getAttribute("url"));
-            break;
-        }
-      }
-      library.materials[xml2.getAttribute("id")] = data;
-    }
-    function getTextureLoader(image) {
-      let loader;
-      let extension = image.slice((image.lastIndexOf(".") - 1 >>> 0) + 2);
-      extension = extension.toLowerCase();
-      switch (extension) {
-        case "tga":
-          loader = tgaLoader;
-          break;
-        default:
-          loader = textureLoader;
-      }
-      return loader;
-    }
-    function buildMaterial(data) {
-      const effect = getEffect(data.url);
-      const technique = effect.profile.technique;
-      let material;
-      switch (technique.type) {
-        case "phong":
-        case "blinn":
-          material = new three_module.MeshPhongMaterial();
-          break;
-        case "lambert":
-          material = new three_module.MeshLambertMaterial();
-          break;
-        default:
-          material = new three_module.MeshBasicMaterial();
-          break;
-      }
-      material.name = data.name || "";
-      function getTexture(textureObject) {
-        const sampler = effect.profile.samplers[textureObject.id];
-        let image = null;
-        if (sampler !== void 0) {
-          const surface = effect.profile.surfaces[sampler.source];
-          image = getImage(surface.init_from);
-        } else {
-          console.warn("THREE.ColladaLoader: Undefined sampler. Access image directly (see #12530).");
-          image = getImage(textureObject.id);
-        }
-        if (image !== null) {
-          const loader = getTextureLoader(image);
-          if (loader !== void 0) {
-            const texture = loader.load(image);
-            const extra = textureObject.extra;
-            if (extra !== void 0 && extra.technique !== void 0 && isEmpty(extra.technique) === false) {
-              const technique2 = extra.technique;
-              texture.wrapS = technique2.wrapU ? three_module.RepeatWrapping : three_module.ClampToEdgeWrapping;
-              texture.wrapT = technique2.wrapV ? three_module.RepeatWrapping : three_module.ClampToEdgeWrapping;
-              texture.offset.set(technique2.offsetU || 0, technique2.offsetV || 0);
-              texture.repeat.set(technique2.repeatU || 1, technique2.repeatV || 1);
-            } else {
-              texture.wrapS = three_module.RepeatWrapping;
-              texture.wrapT = three_module.RepeatWrapping;
-            }
-            return texture;
-          } else {
-            console.warn("THREE.ColladaLoader: Loader for texture %s not found.", image);
-            return null;
-          }
-        } else {
-          console.warn("THREE.ColladaLoader: Couldn't create texture with ID:", textureObject.id);
-          return null;
-        }
-      }
-      const parameters = technique.parameters;
-      for (const key in parameters) {
-        const parameter = parameters[key];
-        switch (key) {
-          case "diffuse":
-            if (parameter.color)
-              material.color.fromArray(parameter.color);
-            if (parameter.texture)
-              material.map = getTexture(parameter.texture);
-            break;
-          case "specular":
-            if (parameter.color && material.specular)
-              material.specular.fromArray(parameter.color);
-            if (parameter.texture)
-              material.specularMap = getTexture(parameter.texture);
-            break;
-          case "bump":
-            if (parameter.texture)
-              material.normalMap = getTexture(parameter.texture);
-            break;
-          case "ambient":
-            if (parameter.texture)
-              material.lightMap = getTexture(parameter.texture);
-            break;
-          case "shininess":
-            if (parameter.float && material.shininess)
-              material.shininess = parameter.float;
-            break;
-          case "emission":
-            if (parameter.color && material.emissive)
-              material.emissive.fromArray(parameter.color);
-            if (parameter.texture)
-              material.emissiveMap = getTexture(parameter.texture);
-            break;
-        }
-      }
-      let transparent = parameters["transparent"];
-      let transparency = parameters["transparency"];
-      if (transparency === void 0 && transparent) {
-        transparency = {
-          float: 1
-        };
-      }
-      if (transparent === void 0 && transparency) {
-        transparent = {
-          opaque: "A_ONE",
-          data: {
-            color: [1, 1, 1, 1]
-          }
-        };
-      }
-      if (transparent && transparency) {
-        if (transparent.data.texture) {
-          material.transparent = true;
-        } else {
-          const color = transparent.data.color;
-          switch (transparent.opaque) {
-            case "A_ONE":
-              material.opacity = color[3] * transparency.float;
-              break;
-            case "RGB_ZERO":
-              material.opacity = 1 - color[0] * transparency.float;
-              break;
-            case "A_ZERO":
-              material.opacity = 1 - color[3] * transparency.float;
-              break;
-            case "RGB_ONE":
-              material.opacity = color[0] * transparency.float;
-              break;
-            default:
-              console.warn('THREE.ColladaLoader: Invalid opaque type "%s" of transparent tag.', transparent.opaque);
-          }
-          if (material.opacity < 1)
-            material.transparent = true;
-        }
-      }
-      if (technique.extra !== void 0 && technique.extra.technique !== void 0) {
-        const techniques = technique.extra.technique;
-        for (const k in techniques) {
-          const v = techniques[k];
-          switch (k) {
-            case "double_sided":
-              material.side = v === 1 ? three_module.DoubleSide : three_module.FrontSide;
-              break;
-            case "bump":
-              material.normalMap = getTexture(v.texture);
-              material.normalScale = new three_module.Vector2(1, 1);
-              break;
-          }
-        }
-      }
-      return material;
-    }
-    function getMaterial(id) {
-      return getBuild(library.materials[id], buildMaterial);
-    }
-    function parseCamera(xml2) {
-      const data = {
-        name: xml2.getAttribute("name")
-      };
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "optics":
-            data.optics = parseCameraOptics(child);
-            break;
-        }
-      }
-      library.cameras[xml2.getAttribute("id")] = data;
-    }
-    function parseCameraOptics(xml2) {
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        switch (child.nodeName) {
-          case "technique_common":
-            return parseCameraTechnique(child);
-        }
-      }
-      return {};
-    }
-    function parseCameraTechnique(xml2) {
-      const data = {};
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        switch (child.nodeName) {
-          case "perspective":
-          case "orthographic":
-            data.technique = child.nodeName;
-            data.parameters = parseCameraParameters(child);
-            break;
-        }
-      }
-      return data;
-    }
-    function parseCameraParameters(xml2) {
-      const data = {};
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        switch (child.nodeName) {
-          case "xfov":
-          case "yfov":
-          case "xmag":
-          case "ymag":
-          case "znear":
-          case "zfar":
-          case "aspect_ratio":
-            data[child.nodeName] = parseFloat(child.textContent);
-            break;
-        }
-      }
-      return data;
-    }
-    function buildCamera(data) {
-      let camera;
-      switch (data.optics.technique) {
-        case "perspective":
-          camera = new three_module.PerspectiveCamera(
-            data.optics.parameters.yfov,
-            data.optics.parameters.aspect_ratio,
-            data.optics.parameters.znear,
-            data.optics.parameters.zfar
-          );
-          break;
-        case "orthographic":
-          let ymag = data.optics.parameters.ymag;
-          let xmag = data.optics.parameters.xmag;
-          const aspectRatio = data.optics.parameters.aspect_ratio;
-          xmag = xmag === void 0 ? ymag * aspectRatio : xmag;
-          ymag = ymag === void 0 ? xmag / aspectRatio : ymag;
-          xmag *= 0.5;
-          ymag *= 0.5;
-          camera = new three_module.OrthographicCamera(
-            -xmag,
-            xmag,
-            ymag,
-            -ymag,
-            // left, right, top, bottom
-            data.optics.parameters.znear,
-            data.optics.parameters.zfar
-          );
-          break;
-        default:
-          camera = new three_module.PerspectiveCamera();
-          break;
-      }
-      camera.name = data.name || "";
-      return camera;
-    }
-    function getCamera(id) {
-      const data = library.cameras[id];
-      if (data !== void 0) {
-        return getBuild(data, buildCamera);
-      }
-      console.warn("THREE.ColladaLoader: Couldn't find camera with ID:", id);
-      return null;
-    }
-    function parseLight(xml2) {
-      let data = {};
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "technique_common":
-            data = parseLightTechnique(child);
-            break;
-        }
-      }
-      library.lights[xml2.getAttribute("id")] = data;
-    }
-    function parseLightTechnique(xml2) {
-      const data = {};
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "directional":
-          case "point":
-          case "spot":
-          case "ambient":
-            data.technique = child.nodeName;
-            data.parameters = parseLightParameters(child);
-        }
-      }
-      return data;
-    }
-    function parseLightParameters(xml2) {
-      const data = {};
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "color":
-            const array = parseFloats(child.textContent);
-            data.color = new three_module.Color().fromArray(array);
-            break;
-          case "falloff_angle":
-            data.falloffAngle = parseFloat(child.textContent);
-            break;
-          case "quadratic_attenuation":
-            const f = parseFloat(child.textContent);
-            data.distance = f ? Math.sqrt(1 / f) : 0;
-            break;
-        }
-      }
-      return data;
-    }
-    function buildLight(data) {
-      let light;
-      switch (data.technique) {
-        case "directional":
-          light = new three_module.DirectionalLight();
-          break;
-        case "point":
-          light = new three_module.PointLight();
-          break;
-        case "spot":
-          light = new three_module.SpotLight();
-          break;
-        case "ambient":
-          light = new three_module.AmbientLight();
-          break;
-      }
-      if (data.parameters.color)
-        light.color.copy(data.parameters.color);
-      if (data.parameters.distance)
-        light.distance = data.parameters.distance;
-      return light;
-    }
-    function getLight(id) {
-      const data = library.lights[id];
-      if (data !== void 0) {
-        return getBuild(data, buildLight);
-      }
-      console.warn("THREE.ColladaLoader: Couldn't find light with ID:", id);
-      return null;
-    }
-    function parseGeometry(xml2) {
-      const data = {
-        name: xml2.getAttribute("name"),
-        sources: {},
-        vertices: {},
-        primitives: []
-      };
-      const mesh = getElementsByTagName(xml2, "mesh")[0];
-      if (mesh === void 0)
-        return;
-      for (let i = 0; i < mesh.childNodes.length; i++) {
-        const child = mesh.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        const id = child.getAttribute("id");
-        switch (child.nodeName) {
-          case "source":
-            data.sources[id] = parseSource(child);
-            break;
-          case "vertices":
-            data.vertices = parseGeometryVertices(child);
-            break;
-          case "polygons":
-            console.warn("THREE.ColladaLoader: Unsupported primitive type: ", child.nodeName);
-            break;
-          case "lines":
-          case "linestrips":
-          case "polylist":
-          case "triangles":
-            data.primitives.push(parseGeometryPrimitive(child));
-            break;
-          default:
-            console.log(child);
-        }
-      }
-      library.geometries[xml2.getAttribute("id")] = data;
-    }
-    function parseSource(xml2) {
-      const data = {
-        array: [],
-        stride: 3
-      };
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "float_array":
-            data.array = parseFloats(child.textContent);
-            break;
-          case "Name_array":
-            data.array = parseStrings(child.textContent);
-            break;
-          case "technique_common":
-            const accessor = getElementsByTagName(child, "accessor")[0];
-            if (accessor !== void 0) {
-              data.stride = parseInt(accessor.getAttribute("stride"));
-            }
-            break;
-        }
-      }
-      return data;
-    }
-    function parseGeometryVertices(xml2) {
-      const data = {};
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        data[child.getAttribute("semantic")] = parseId(child.getAttribute("source"));
-      }
-      return data;
-    }
-    function parseGeometryPrimitive(xml2) {
-      const primitive = {
-        type: xml2.nodeName,
-        material: xml2.getAttribute("material"),
-        count: parseInt(xml2.getAttribute("count")),
-        inputs: {},
-        stride: 0,
-        hasUV: false
-      };
-      for (let i = 0, l = xml2.childNodes.length; i < l; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "input":
-            const id = parseId(child.getAttribute("source"));
-            const semantic = child.getAttribute("semantic");
-            const offset = parseInt(child.getAttribute("offset"));
-            const set = parseInt(child.getAttribute("set"));
-            const inputname = set > 0 ? semantic + set : semantic;
-            primitive.inputs[inputname] = { id, offset };
-            primitive.stride = Math.max(primitive.stride, offset + 1);
-            if (semantic === "TEXCOORD")
-              primitive.hasUV = true;
-            break;
-          case "vcount":
-            primitive.vcount = parseInts(child.textContent);
-            break;
-          case "p":
-            primitive.p = parseInts(child.textContent);
-            break;
-        }
-      }
-      return primitive;
-    }
-    function groupPrimitives(primitives) {
-      const build = {};
-      for (let i = 0; i < primitives.length; i++) {
-        const primitive = primitives[i];
-        if (build[primitive.type] === void 0)
-          build[primitive.type] = [];
-        build[primitive.type].push(primitive);
-      }
-      return build;
-    }
-    function checkUVCoordinates(primitives) {
-      let count2 = 0;
-      for (let i = 0, l = primitives.length; i < l; i++) {
-        const primitive = primitives[i];
-        if (primitive.hasUV === true) {
-          count2++;
-        }
-      }
-      if (count2 > 0 && count2 < primitives.length) {
-        primitives.uvsNeedsFix = true;
-      }
-    }
-    function buildGeometry(data) {
-      const build = {};
-      const sources = data.sources;
-      const vertices = data.vertices;
-      const primitives = data.primitives;
-      if (primitives.length === 0)
-        return {};
-      const groupedPrimitives = groupPrimitives(primitives);
-      for (const type in groupedPrimitives) {
-        const primitiveType = groupedPrimitives[type];
-        checkUVCoordinates(primitiveType);
-        build[type] = buildGeometryType(primitiveType, sources, vertices);
-      }
-      return build;
-    }
-    function buildGeometryType(primitives, sources, vertices) {
-      const build = {};
-      const position2 = { array: [], stride: 0 };
-      const normal = { array: [], stride: 0 };
-      const uv = { array: [], stride: 0 };
-      const uv2 = { array: [], stride: 0 };
-      const color = { array: [], stride: 0 };
-      const skinIndex = { array: [], stride: 4 };
-      const skinWeight = { array: [], stride: 4 };
-      const geometry = new three_module.BufferGeometry();
-      const materialKeys = [];
-      let start = 0;
-      for (let p = 0; p < primitives.length; p++) {
-        const primitive = primitives[p];
-        const inputs = primitive.inputs;
-        let count2 = 0;
-        switch (primitive.type) {
-          case "lines":
-          case "linestrips":
-            count2 = primitive.count * 2;
-            break;
-          case "triangles":
-            count2 = primitive.count * 3;
-            break;
-          case "polylist":
-            for (let g = 0; g < primitive.count; g++) {
-              const vc = primitive.vcount[g];
-              switch (vc) {
-                case 3:
-                  count2 += 3;
-                  break;
-                case 4:
-                  count2 += 6;
-                  break;
-                default:
-                  count2 += (vc - 2) * 3;
-                  break;
-              }
-            }
-            break;
-          default:
-            console.warn("THREE.ColladaLoader: Unknow primitive type:", primitive.type);
-        }
-        geometry.addGroup(start, count2, p);
-        start += count2;
-        if (primitive.material) {
-          materialKeys.push(primitive.material);
-        }
-        for (const name in inputs) {
-          const input = inputs[name];
-          switch (name) {
-            case "VERTEX":
-              for (const key in vertices) {
-                const id = vertices[key];
-                switch (key) {
-                  case "POSITION":
-                    const prevLength = position2.array.length;
-                    buildGeometryData(primitive, sources[id], input.offset, position2.array);
-                    position2.stride = sources[id].stride;
-                    if (sources.skinWeights && sources.skinIndices) {
-                      buildGeometryData(primitive, sources.skinIndices, input.offset, skinIndex.array);
-                      buildGeometryData(primitive, sources.skinWeights, input.offset, skinWeight.array);
-                    }
-                    if (primitive.hasUV === false && primitives.uvsNeedsFix === true) {
-                      const count3 = (position2.array.length - prevLength) / position2.stride;
-                      for (let i = 0; i < count3; i++) {
-                        uv.array.push(0, 0);
-                      }
-                    }
-                    break;
-                  case "NORMAL":
-                    buildGeometryData(primitive, sources[id], input.offset, normal.array);
-                    normal.stride = sources[id].stride;
-                    break;
-                  case "COLOR":
-                    buildGeometryData(primitive, sources[id], input.offset, color.array);
-                    color.stride = sources[id].stride;
-                    break;
-                  case "TEXCOORD":
-                    buildGeometryData(primitive, sources[id], input.offset, uv.array);
-                    uv.stride = sources[id].stride;
-                    break;
-                  case "TEXCOORD1":
-                    buildGeometryData(primitive, sources[id], input.offset, uv2.array);
-                    uv.stride = sources[id].stride;
-                    break;
-                  default:
-                    console.warn('THREE.ColladaLoader: Semantic "%s" not handled in geometry build process.', key);
-                }
-              }
-              break;
-            case "NORMAL":
-              buildGeometryData(primitive, sources[input.id], input.offset, normal.array);
-              normal.stride = sources[input.id].stride;
-              break;
-            case "COLOR":
-              buildGeometryData(primitive, sources[input.id], input.offset, color.array);
-              color.stride = sources[input.id].stride;
-              break;
-            case "TEXCOORD":
-              buildGeometryData(primitive, sources[input.id], input.offset, uv.array);
-              uv.stride = sources[input.id].stride;
-              break;
-            case "TEXCOORD1":
-              buildGeometryData(primitive, sources[input.id], input.offset, uv2.array);
-              uv2.stride = sources[input.id].stride;
-              break;
-          }
-        }
-      }
-      if (position2.array.length > 0) {
-        geometry.setAttribute("position", new three_module.Float32BufferAttribute(position2.array, position2.stride));
-      }
-      if (normal.array.length > 0) {
-        geometry.setAttribute("normal", new three_module.Float32BufferAttribute(normal.array, normal.stride));
-      }
-      if (color.array.length > 0)
-        geometry.setAttribute("color", new three_module.Float32BufferAttribute(color.array, color.stride));
-      if (uv.array.length > 0)
-        geometry.setAttribute("uv", new three_module.Float32BufferAttribute(uv.array, uv.stride));
-      if (uv2.array.length > 0)
-        geometry.setAttribute("uv2", new three_module.Float32BufferAttribute(uv2.array, uv2.stride));
-      if (skinIndex.array.length > 0) {
-        geometry.setAttribute("skinIndex", new three_module.Float32BufferAttribute(skinIndex.array, skinIndex.stride));
-      }
-      if (skinWeight.array.length > 0) {
-        geometry.setAttribute("skinWeight", new three_module.Float32BufferAttribute(skinWeight.array, skinWeight.stride));
-      }
-      build.data = geometry;
-      build.type = primitives[0].type;
-      build.materialKeys = materialKeys;
-      return build;
-    }
-    function buildGeometryData(primitive, source, offset, array) {
-      const indices = primitive.p;
-      const stride = primitive.stride;
-      const vcount = primitive.vcount;
-      function pushVector(i) {
-        let index = indices[i + offset] * sourceStride;
-        const length = index + sourceStride;
-        for (; index < length; index++) {
-          array.push(sourceArray[index]);
-        }
-      }
-      const sourceArray = source.array;
-      const sourceStride = source.stride;
-      if (primitive.vcount !== void 0) {
-        let index = 0;
-        for (let i = 0, l = vcount.length; i < l; i++) {
-          const count2 = vcount[i];
-          if (count2 === 4) {
-            const a = index + stride * 0;
-            const b = index + stride * 1;
-            const c = index + stride * 2;
-            const d = index + stride * 3;
-            pushVector(a);
-            pushVector(b);
-            pushVector(d);
-            pushVector(b);
-            pushVector(c);
-            pushVector(d);
-          } else if (count2 === 3) {
-            const a = index + stride * 0;
-            const b = index + stride * 1;
-            const c = index + stride * 2;
-            pushVector(a);
-            pushVector(b);
-            pushVector(c);
-          } else if (count2 > 4) {
-            for (let k = 1, kl = count2 - 2; k <= kl; k++) {
-              const a = index + stride * 0;
-              const b = index + stride * k;
-              const c = index + stride * (k + 1);
-              pushVector(a);
-              pushVector(b);
-              pushVector(c);
-            }
-          }
-          index += stride * count2;
-        }
-      } else {
-        for (let i = 0, l = indices.length; i < l; i += stride) {
-          pushVector(i);
-        }
-      }
-    }
-    function getGeometry(id) {
-      return getBuild(library.geometries[id], buildGeometry);
-    }
-    function parseKinematicsModel(xml2) {
-      const data = {
-        name: xml2.getAttribute("name") || "",
-        joints: {},
-        links: []
-      };
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "technique_common":
-            parseKinematicsTechniqueCommon(child, data);
-            break;
-        }
-      }
-      library.kinematicsModels[xml2.getAttribute("id")] = data;
-    }
-    function buildKinematicsModel(data) {
-      if (data.build !== void 0)
-        return data.build;
-      return data;
-    }
-    function getKinematicsModel(id) {
-      return getBuild(library.kinematicsModels[id], buildKinematicsModel);
-    }
-    function parseKinematicsTechniqueCommon(xml2, data) {
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "joint":
-            data.joints[child.getAttribute("sid")] = parseKinematicsJoint(child);
-            break;
-          case "link":
-            data.links.push(parseKinematicsLink(child));
-            break;
-        }
-      }
-    }
-    function parseKinematicsJoint(xml2) {
-      let data;
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "prismatic":
-          case "revolute":
-            data = parseKinematicsJointParameter(child);
-            break;
-        }
-      }
-      return data;
-    }
-    function parseKinematicsJointParameter(xml2) {
-      const data = {
-        sid: xml2.getAttribute("sid"),
-        name: xml2.getAttribute("name") || "",
-        axis: new three_module.Vector3(),
-        limits: {
-          min: 0,
-          max: 0
-        },
-        type: xml2.nodeName,
-        static: false,
-        zeroPosition: 0,
-        middlePosition: 0
-      };
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "axis":
-            const array = parseFloats(child.textContent);
-            data.axis.fromArray(array);
-            break;
-          case "limits":
-            const max = child.getElementsByTagName("max")[0];
-            const min = child.getElementsByTagName("min")[0];
-            data.limits.max = parseFloat(max.textContent);
-            data.limits.min = parseFloat(min.textContent);
-            break;
-        }
-      }
-      if (data.limits.min >= data.limits.max) {
-        data.static = true;
-      }
-      data.middlePosition = (data.limits.min + data.limits.max) / 2;
-      return data;
-    }
-    function parseKinematicsLink(xml2) {
-      const data = {
-        sid: xml2.getAttribute("sid"),
-        name: xml2.getAttribute("name") || "",
-        attachments: [],
-        transforms: []
-      };
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "attachment_full":
-            data.attachments.push(parseKinematicsAttachment(child));
-            break;
-          case "matrix":
-          case "translate":
-          case "rotate":
-            data.transforms.push(parseKinematicsTransform(child));
-            break;
-        }
-      }
-      return data;
-    }
-    function parseKinematicsAttachment(xml2) {
-      const data = {
-        joint: xml2.getAttribute("joint").split("/").pop(),
-        transforms: [],
-        links: []
-      };
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "link":
-            data.links.push(parseKinematicsLink(child));
-            break;
-          case "matrix":
-          case "translate":
-          case "rotate":
-            data.transforms.push(parseKinematicsTransform(child));
-            break;
-        }
-      }
-      return data;
-    }
-    function parseKinematicsTransform(xml2) {
-      const data = {
-        type: xml2.nodeName
-      };
-      const array = parseFloats(xml2.textContent);
-      switch (data.type) {
-        case "matrix":
-          data.obj = new three_module.Matrix4();
-          data.obj.fromArray(array).transpose();
-          break;
-        case "translate":
-          data.obj = new three_module.Vector3();
-          data.obj.fromArray(array);
-          break;
-        case "rotate":
-          data.obj = new three_module.Vector3();
-          data.obj.fromArray(array);
-          data.angle = three_module.MathUtils.degToRad(array[3]);
-          break;
-      }
-      return data;
-    }
-    function parsePhysicsModel(xml2) {
-      const data = {
-        name: xml2.getAttribute("name") || "",
-        rigidBodies: {}
-      };
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "rigid_body":
-            data.rigidBodies[child.getAttribute("name")] = {};
-            parsePhysicsRigidBody(child, data.rigidBodies[child.getAttribute("name")]);
-            break;
-        }
-      }
-      library.physicsModels[xml2.getAttribute("id")] = data;
-    }
-    function parsePhysicsRigidBody(xml2, data) {
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "technique_common":
-            parsePhysicsTechniqueCommon(child, data);
-            break;
-        }
-      }
-    }
-    function parsePhysicsTechniqueCommon(xml2, data) {
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "inertia":
-            data.inertia = parseFloats(child.textContent);
-            break;
-          case "mass":
-            data.mass = parseFloats(child.textContent)[0];
-            break;
-        }
-      }
-    }
-    function parseKinematicsScene(xml2) {
-      const data = {
-        bindJointAxis: []
-      };
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "bind_joint_axis":
-            data.bindJointAxis.push(parseKinematicsBindJointAxis(child));
-            break;
-        }
-      }
-      library.kinematicsScenes[parseId(xml2.getAttribute("url"))] = data;
-    }
-    function parseKinematicsBindJointAxis(xml2) {
-      const data = {
-        target: xml2.getAttribute("target").split("/").pop()
-      };
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        switch (child.nodeName) {
-          case "axis":
-            const param = child.getElementsByTagName("param")[0];
-            data.axis = param.textContent;
-            const tmpJointIndex = data.axis.split("inst_").pop().split("axis")[0];
-            data.jointIndex = tmpJointIndex.substr(0, tmpJointIndex.length - 1);
-            break;
-        }
-      }
-      return data;
-    }
-    function buildKinematicsScene(data) {
-      if (data.build !== void 0)
-        return data.build;
-      return data;
-    }
-    function getKinematicsScene(id) {
-      return getBuild(library.kinematicsScenes[id], buildKinematicsScene);
-    }
-    function setupKinematics() {
-      const kinematicsModelId = Object.keys(library.kinematicsModels)[0];
-      const kinematicsSceneId = Object.keys(library.kinematicsScenes)[0];
-      const visualSceneId = Object.keys(library.visualScenes)[0];
-      if (kinematicsModelId === void 0 || kinematicsSceneId === void 0)
-        return;
-      const kinematicsModel = getKinematicsModel(kinematicsModelId);
-      const kinematicsScene = getKinematicsScene(kinematicsSceneId);
-      const visualScene = getVisualScene(visualSceneId);
-      const bindJointAxis = kinematicsScene.bindJointAxis;
-      const jointMap = {};
-      for (let i = 0, l = bindJointAxis.length; i < l; i++) {
-        const axis = bindJointAxis[i];
-        const targetElement = collada.querySelector('[sid="' + axis.target + '"]');
-        if (targetElement) {
-          const parentVisualElement = targetElement.parentElement;
-          connect(axis.jointIndex, parentVisualElement);
-        }
-      }
-      function connect(jointIndex, visualElement) {
-        const visualElementName = visualElement.getAttribute("name");
-        const joint = kinematicsModel.joints[jointIndex];
-        visualScene.traverse(function(object) {
-          if (object.name === visualElementName) {
-            jointMap[jointIndex] = {
-              object,
-              transforms: buildTransformList(visualElement),
-              joint,
-              position: joint.zeroPosition
-            };
-          }
-        });
-      }
-      const m0 = new three_module.Matrix4();
-      kinematics = {
-        joints: kinematicsModel && kinematicsModel.joints,
-        getJointValue: function(jointIndex) {
-          const jointData = jointMap[jointIndex];
-          if (jointData) {
-            return jointData.position;
-          } else {
-            console.warn("THREE.ColladaLoader: Joint " + jointIndex + " doesn't exist.");
-          }
-        },
-        setJointValue: function(jointIndex, value) {
-          const jointData = jointMap[jointIndex];
-          if (jointData) {
-            const joint = jointData.joint;
-            if (value > joint.limits.max || value < joint.limits.min) {
-              console.warn(
-                "THREE.ColladaLoader: Joint " + jointIndex + " value " + value + " outside of limits (min: " + joint.limits.min + ", max: " + joint.limits.max + ")."
-              );
-            } else if (joint.static) {
-              console.warn("THREE.ColladaLoader: Joint " + jointIndex + " is static.");
-            } else {
-              const object = jointData.object;
-              const axis = joint.axis;
-              const transforms = jointData.transforms;
-              matrix.identity();
-              for (let i = 0; i < transforms.length; i++) {
-                const transform = transforms[i];
-                if (transform.sid && transform.sid.indexOf(jointIndex) !== -1) {
-                  switch (joint.type) {
-                    case "revolute":
-                      matrix.multiply(m0.makeRotationAxis(axis, three_module.MathUtils.degToRad(value)));
-                      break;
-                    case "prismatic":
-                      matrix.multiply(m0.makeTranslation(axis.x * value, axis.y * value, axis.z * value));
-                      break;
-                    default:
-                      console.warn("THREE.ColladaLoader: Unknown joint type: " + joint.type);
-                      break;
-                  }
-                } else {
-                  switch (transform.type) {
-                    case "matrix":
-                      matrix.multiply(transform.obj);
-                      break;
-                    case "translate":
-                      matrix.multiply(m0.makeTranslation(transform.obj.x, transform.obj.y, transform.obj.z));
-                      break;
-                    case "scale":
-                      matrix.scale(transform.obj);
-                      break;
-                    case "rotate":
-                      matrix.multiply(m0.makeRotationAxis(transform.obj, transform.angle));
-                      break;
-                  }
-                }
-              }
-              object.matrix.copy(matrix);
-              object.matrix.decompose(object.position, object.quaternion, object.scale);
-              jointMap[jointIndex].position = value;
-            }
-          } else {
-            console.log("THREE.ColladaLoader: " + jointIndex + " does not exist.");
-          }
-        }
-      };
-    }
-    function buildTransformList(node) {
-      const transforms = [];
-      const xml2 = collada.querySelector('[id="' + node.id + '"]');
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        let array, vector2;
-        switch (child.nodeName) {
-          case "matrix":
-            array = parseFloats(child.textContent);
-            const matrix2 = new three_module.Matrix4().fromArray(array).transpose();
-            transforms.push({
-              sid: child.getAttribute("sid"),
-              type: child.nodeName,
-              obj: matrix2
-            });
-            break;
-          case "translate":
-          case "scale":
-            array = parseFloats(child.textContent);
-            vector2 = new three_module.Vector3().fromArray(array);
-            transforms.push({
-              sid: child.getAttribute("sid"),
-              type: child.nodeName,
-              obj: vector2
-            });
-            break;
-          case "rotate":
-            array = parseFloats(child.textContent);
-            vector2 = new three_module.Vector3().fromArray(array);
-            const angle = three_module.MathUtils.degToRad(array[3]);
-            transforms.push({
-              sid: child.getAttribute("sid"),
-              type: child.nodeName,
-              obj: vector2,
-              angle
-            });
-            break;
-        }
-      }
-      return transforms;
-    }
-    function prepareNodes(xml2) {
-      const elements = xml2.getElementsByTagName("node");
-      for (let i = 0; i < elements.length; i++) {
-        const element = elements[i];
-        if (element.hasAttribute("id") === false) {
-          element.setAttribute("id", generateId());
-        }
-      }
-    }
-    const matrix = new three_module.Matrix4();
-    const vector = new three_module.Vector3();
-    function parseNode(xml2) {
-      const data = {
-        name: xml2.getAttribute("name") || "",
-        type: xml2.getAttribute("type"),
-        id: xml2.getAttribute("id"),
-        sid: xml2.getAttribute("sid"),
-        matrix: new three_module.Matrix4(),
-        nodes: [],
-        instanceCameras: [],
-        instanceControllers: [],
-        instanceLights: [],
-        instanceGeometries: [],
-        instanceNodes: [],
-        transforms: {}
-      };
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        if (child.nodeType !== 1)
-          continue;
-        let array;
-        switch (child.nodeName) {
-          case "node":
-            data.nodes.push(child.getAttribute("id"));
-            parseNode(child);
-            break;
-          case "instance_camera":
-            data.instanceCameras.push(parseId(child.getAttribute("url")));
-            break;
-          case "instance_controller":
-            data.instanceControllers.push(parseNodeInstance(child));
-            break;
-          case "instance_light":
-            data.instanceLights.push(parseId(child.getAttribute("url")));
-            break;
-          case "instance_geometry":
-            data.instanceGeometries.push(parseNodeInstance(child));
-            break;
-          case "instance_node":
-            data.instanceNodes.push(parseId(child.getAttribute("url")));
-            break;
-          case "matrix":
-            array = parseFloats(child.textContent);
-            data.matrix.multiply(matrix.fromArray(array).transpose());
-            data.transforms[child.getAttribute("sid")] = child.nodeName;
-            break;
-          case "translate":
-            array = parseFloats(child.textContent);
-            vector.fromArray(array);
-            data.matrix.multiply(matrix.makeTranslation(vector.x, vector.y, vector.z));
-            data.transforms[child.getAttribute("sid")] = child.nodeName;
-            break;
-          case "rotate":
-            array = parseFloats(child.textContent);
-            const angle = three_module.MathUtils.degToRad(array[3]);
-            data.matrix.multiply(matrix.makeRotationAxis(vector.fromArray(array), angle));
-            data.transforms[child.getAttribute("sid")] = child.nodeName;
-            break;
-          case "scale":
-            array = parseFloats(child.textContent);
-            data.matrix.scale(vector.fromArray(array));
-            data.transforms[child.getAttribute("sid")] = child.nodeName;
-            break;
-          case "extra":
-            break;
-          default:
-            console.log(child);
-        }
-      }
-      if (hasNode(data.id)) {
-        console.warn(
-          "THREE.ColladaLoader: There is already a node with ID %s. Exclude current node from further processing.",
-          data.id
-        );
-      } else {
-        library.nodes[data.id] = data;
-      }
-      return data;
-    }
-    function parseNodeInstance(xml2) {
-      const data = {
-        id: parseId(xml2.getAttribute("url")),
-        materials: {},
-        skeletons: []
-      };
-      for (let i = 0; i < xml2.childNodes.length; i++) {
-        const child = xml2.childNodes[i];
-        switch (child.nodeName) {
-          case "bind_material":
-            const instances = child.getElementsByTagName("instance_material");
-            for (let j = 0; j < instances.length; j++) {
-              const instance = instances[j];
-              const symbol = instance.getAttribute("symbol");
-              const target = instance.getAttribute("target");
-              data.materials[symbol] = parseId(target);
-            }
-            break;
-          case "skeleton":
-            data.skeletons.push(parseId(child.textContent));
-            break;
-          default:
-            break;
-        }
-      }
-      return data;
-    }
-    function buildSkeleton(skeletons, joints) {
-      const boneData = [];
-      const sortedBoneData = [];
-      let i, j, data;
-      for (i = 0; i < skeletons.length; i++) {
-        const skeleton = skeletons[i];
-        let root;
-        if (hasNode(skeleton)) {
-          root = getNode(skeleton);
-          buildBoneHierarchy(root, joints, boneData);
-        } else if (hasVisualScene(skeleton)) {
-          const visualScene = library.visualScenes[skeleton];
-          const children = visualScene.children;
-          for (let j2 = 0; j2 < children.length; j2++) {
-            const child = children[j2];
-            if (child.type === "JOINT") {
-              const root2 = getNode(child.id);
-              buildBoneHierarchy(root2, joints, boneData);
-            }
-          }
-        } else {
-          console.error("THREE.ColladaLoader: Unable to find root bone of skeleton with ID:", skeleton);
-        }
-      }
-      for (i = 0; i < joints.length; i++) {
-        for (j = 0; j < boneData.length; j++) {
-          data = boneData[j];
-          if (data.bone.name === joints[i].name) {
-            sortedBoneData[i] = data;
-            data.processed = true;
-            break;
-          }
-        }
-      }
-      for (i = 0; i < boneData.length; i++) {
-        data = boneData[i];
-        if (data.processed === false) {
-          sortedBoneData.push(data);
-          data.processed = true;
-        }
-      }
-      const bones = [];
-      const boneInverses = [];
-      for (i = 0; i < sortedBoneData.length; i++) {
-        data = sortedBoneData[i];
-        bones.push(data.bone);
-        boneInverses.push(data.boneInverse);
-      }
-      return new three_module.Skeleton(bones, boneInverses);
-    }
-    function buildBoneHierarchy(root, joints, boneData) {
-      root.traverse(function(object) {
-        if (object.isBone === true) {
-          let boneInverse;
-          for (let i = 0; i < joints.length; i++) {
-            const joint = joints[i];
-            if (joint.name === object.name) {
-              boneInverse = joint.boneInverse;
-              break;
-            }
-          }
-          if (boneInverse === void 0) {
-            boneInverse = new three_module.Matrix4();
-          }
-          boneData.push({ bone: object, boneInverse, processed: false });
-        }
-      });
-    }
-    function buildNode(data) {
-      const objects = [];
-      const matrix2 = data.matrix;
-      const nodes = data.nodes;
-      const type = data.type;
-      const instanceCameras = data.instanceCameras;
-      const instanceControllers = data.instanceControllers;
-      const instanceLights = data.instanceLights;
-      const instanceGeometries = data.instanceGeometries;
-      const instanceNodes = data.instanceNodes;
-      for (let i = 0, l = nodes.length; i < l; i++) {
-        objects.push(getNode(nodes[i]));
-      }
-      for (let i = 0, l = instanceCameras.length; i < l; i++) {
-        const instanceCamera = getCamera(instanceCameras[i]);
-        if (instanceCamera !== null) {
-          objects.push(instanceCamera.clone());
-        }
-      }
-      for (let i = 0, l = instanceControllers.length; i < l; i++) {
-        const instance = instanceControllers[i];
-        const controller = getController(instance.id);
-        const geometries = getGeometry(controller.id);
-        const newObjects = buildObjects(geometries, instance.materials);
-        const skeletons = instance.skeletons;
-        const joints = controller.skin.joints;
-        const skeleton = buildSkeleton(skeletons, joints);
-        for (let j = 0, jl = newObjects.length; j < jl; j++) {
-          const object2 = newObjects[j];
-          if (object2.isSkinnedMesh) {
-            object2.bind(skeleton, controller.skin.bindMatrix);
-            object2.normalizeSkinWeights();
-          }
-          objects.push(object2);
-        }
-      }
-      for (let i = 0, l = instanceLights.length; i < l; i++) {
-        const instanceLight = getLight(instanceLights[i]);
-        if (instanceLight !== null) {
-          objects.push(instanceLight.clone());
-        }
-      }
-      for (let i = 0, l = instanceGeometries.length; i < l; i++) {
-        const instance = instanceGeometries[i];
-        const geometries = getGeometry(instance.id);
-        const newObjects = buildObjects(geometries, instance.materials);
-        for (let j = 0, jl = newObjects.length; j < jl; j++) {
-          objects.push(newObjects[j]);
-        }
-      }
-      for (let i = 0, l = instanceNodes.length; i < l; i++) {
-        objects.push(getNode(instanceNodes[i]).clone());
-      }
-      let object;
-      if (nodes.length === 0 && objects.length === 1) {
-        object = objects[0];
-      } else {
-        object = type === "JOINT" ? new three_module.Bone() : new three_module.Group();
-        for (let i = 0; i < objects.length; i++) {
-          object.add(objects[i]);
-        }
-      }
-      object.name = type === "JOINT" ? data.sid : data.name;
-      object.matrix.copy(matrix2);
-      object.matrix.decompose(object.position, object.quaternion, object.scale);
-      return object;
-    }
-    const fallbackMaterial = new three_module.MeshBasicMaterial({ color: 16711935 });
-    function resolveMaterialBinding(keys, instanceMaterials) {
-      const materials = [];
-      for (let i = 0, l = keys.length; i < l; i++) {
-        const id = instanceMaterials[keys[i]];
-        if (id === void 0) {
-          console.warn("THREE.ColladaLoader: Material with key %s not found. Apply fallback material.", keys[i]);
-          materials.push(fallbackMaterial);
-        } else {
-          materials.push(getMaterial(id));
-        }
-      }
-      return materials;
-    }
-    function buildObjects(geometries, instanceMaterials) {
-      const objects = [];
-      for (const type in geometries) {
-        const geometry = geometries[type];
-        const materials = resolveMaterialBinding(geometry.materialKeys, instanceMaterials);
-        if (materials.length === 0) {
-          if (type === "lines" || type === "linestrips") {
-            materials.push(new three_module.LineBasicMaterial());
-          } else {
-            materials.push(new three_module.MeshPhongMaterial());
-          }
-        }
-        const skinning = geometry.data.attributes.skinIndex !== void 0;
-        const material = materials.length === 1 ? materials[0] : materials;
-        let object;
-        switch (type) {
-          case "lines":
-            object = new three_module.LineSegments(geometry.data, material);
-            break;
-          case "linestrips":
-            object = new three_module.Line(geometry.data, material);
-            break;
-          case "triangles":
-          case "polylist":
-            if (skinning) {
-              object = new three_module.SkinnedMesh(geometry.data, material);
-            } else {
-              object = new three_module.Mesh(geometry.data, material);
-            }
-            break;
-        }
-        objects.push(object);
-      }
-      return objects;
-    }
-    function hasNode(id) {
-      return library.nodes[id] !== void 0;
-    }
-    function getNode(id) {
-      return getBuild(library.nodes[id], buildNode);
-    }
-    function parseVisualScene(xml2) {
-      const data = {
-        name: xml2.getAttribute("name"),
-        children: []
-      };
-      prepareNodes(xml2);
-      const elements = getElementsByTagName(xml2, "node");
-      for (let i = 0; i < elements.length; i++) {
-        data.children.push(parseNode(elements[i]));
-      }
-      library.visualScenes[xml2.getAttribute("id")] = data;
-    }
-    function buildVisualScene(data) {
-      const group = new three_module.Group();
-      group.name = data.name;
-      const children = data.children;
-      for (let i = 0; i < children.length; i++) {
-        const child = children[i];
-        group.add(getNode(child.id));
-      }
-      return group;
-    }
-    function hasVisualScene(id) {
-      return library.visualScenes[id] !== void 0;
-    }
-    function getVisualScene(id) {
-      return getBuild(library.visualScenes[id], buildVisualScene);
-    }
-    function parseScene(xml2) {
-      const instance = getElementsByTagName(xml2, "instance_visual_scene")[0];
-      return getVisualScene(parseId(instance.getAttribute("url")));
-    }
-    function setupAnimations() {
-      const clips = library.clips;
-      if (isEmpty(clips) === true) {
-        if (isEmpty(library.animations) === false) {
-          const tracks = [];
-          for (const id in library.animations) {
-            const animationTracks = getAnimation(id);
-            for (let i = 0, l = animationTracks.length; i < l; i++) {
-              tracks.push(animationTracks[i]);
-            }
-          }
-          animations.push(new three_module.AnimationClip("default", -1, tracks));
-        }
-      } else {
-        for (const id in clips) {
-          animations.push(getAnimationClip(id));
-        }
-      }
-    }
-    function parserErrorToText(parserError2) {
-      let result = "";
-      const stack = [parserError2];
-      while (stack.length) {
-        const node = stack.shift();
-        if (node.nodeType === Node.TEXT_NODE) {
-          result += node.textContent;
-        } else {
-          result += "\n";
-          stack.push.apply(stack, node.childNodes);
-        }
-      }
-      return result.trim();
-    }
-    if (text.length === 0) {
-      return { scene: new three_module.Scene() };
-    }
-    const xml = new DOMParser().parseFromString(text, "application/xml");
-    const collada = getElementsByTagName(xml, "COLLADA")[0];
-    const parserError = xml.getElementsByTagName("parsererror")[0];
-    if (parserError !== void 0) {
-      const errorElement = getElementsByTagName(parserError, "div")[0];
-      let errorText;
-      if (errorElement) {
-        errorText = errorElement.textContent;
-      } else {
-        errorText = parserErrorToText(parserError);
-      }
-      console.error("THREE.ColladaLoader: Failed to parse collada file.\n", errorText);
-      return null;
-    }
-    const version = collada.getAttribute("version");
-    console.log("THREE.ColladaLoader: File version", version);
-    const asset = parseAsset(getElementsByTagName(collada, "asset")[0]);
-    const textureLoader = new three_module.TextureLoader(this.manager);
-    textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);
-    let tgaLoader;
-    if (TGALoader) {
-      tgaLoader = new TGALoader(this.manager);
-      tgaLoader.setPath(this.resourcePath || path);
-    }
-    const animations = [];
-    let kinematics = {};
-    let count = 0;
-    const library = {
-      animations: {},
-      clips: {},
-      controllers: {},
-      images: {},
-      effects: {},
-      materials: {},
-      cameras: {},
-      lights: {},
-      geometries: {},
-      nodes: {},
-      visualScenes: {},
-      kinematicsModels: {},
-      physicsModels: {},
-      kinematicsScenes: {}
-    };
-    parseLibrary(collada, "library_animations", "animation", parseAnimation);
-    parseLibrary(collada, "library_animation_clips", "animation_clip", parseAnimationClip);
-    parseLibrary(collada, "library_controllers", "controller", parseController);
-    parseLibrary(collada, "library_images", "image", parseImage);
-    parseLibrary(collada, "library_effects", "effect", parseEffect);
-    parseLibrary(collada, "library_materials", "material", parseMaterial);
-    parseLibrary(collada, "library_cameras", "camera", parseCamera);
-    parseLibrary(collada, "library_lights", "light", parseLight);
-    parseLibrary(collada, "library_geometries", "geometry", parseGeometry);
-    parseLibrary(collada, "library_nodes", "node", parseNode);
-    parseLibrary(collada, "library_visual_scenes", "visual_scene", parseVisualScene);
-    parseLibrary(collada, "library_kinematics_models", "kinematics_model", parseKinematicsModel);
-    parseLibrary(collada, "library_physics_models", "physics_model", parsePhysicsModel);
-    parseLibrary(collada, "scene", "instance_kinematics_scene", parseKinematicsScene);
-    buildLibrary(library.animations, buildAnimation);
-    buildLibrary(library.clips, buildAnimationClip);
-    buildLibrary(library.controllers, buildController);
-    buildLibrary(library.images, buildImage);
-    buildLibrary(library.effects, buildEffect);
-    buildLibrary(library.materials, buildMaterial);
-    buildLibrary(library.cameras, buildCamera);
-    buildLibrary(library.lights, buildLight);
-    buildLibrary(library.geometries, buildGeometry);
-    buildLibrary(library.visualScenes, buildVisualScene);
-    setupAnimations();
-    setupKinematics();
-    const scene = parseScene(getElementsByTagName(collada, "scene")[0]);
-    scene.animations = animations;
-    if (asset.upAxis === "Z_UP") {
-      scene.quaternion.setFromEuler(new three_module.Euler(-Math.PI / 2, 0, 0));
-    }
-    scene.scale.multiplyScalar(asset.unit);
-    return {
-      get animations() {
-        console.warn("THREE.ColladaLoader: Please access animations over scene.animations now.");
-        return animations;
-      },
-      kinematics,
-      library,
-      scene
-    };
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/KMZLoader.js
-
-
-
-class KMZLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(data) {
-    function findFile(url) {
-      for (const path in zip) {
-        if (path.substr(-url.length) === url) {
-          return zip[path];
-        }
-      }
-    }
-    const manager = new three_module.LoadingManager();
-    manager.setURLModifier(function(url) {
-      const image = findFile(url);
-      if (image) {
-        console.log("Loading", url);
-        const blob = new Blob([image.buffer], { type: "application/octet-stream" });
-        return URL.createObjectURL(blob);
-      }
-      return url;
-    });
-    const zip = (0,esm/* unzipSync */.GZ)(new Uint8Array(data));
-    if (zip["doc.kml"]) {
-      const xml = new DOMParser().parseFromString(fflate.strFromU8(zip["doc.kml"]), "application/xml");
-      const model = xml.querySelector("Placemark Model Link href");
-      if (model) {
-        const loader = new ColladaLoader(manager);
-        return loader.parse(fflate.strFromU8(zip[model.textContent]));
-      }
-    } else {
-      console.warn("KMZLoader: Missing doc.kml file.");
-      for (const path in zip) {
-        const extension = path.split(".").pop().toLowerCase();
-        if (extension === "dae") {
-          const loader = new ColladaLoader(manager);
-          return loader.parse(fflate.strFromU8(zip[path]));
-        }
-      }
-    }
-    console.error("KMZLoader: Couldn't find .dae file.");
-    return { scene: new three_module.Group() };
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/VRMLoader.js
-
-
-class VRMLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.gltfLoader = new GLTFLoader/* GLTFLoader */.E(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    this.gltfLoader.load(
-      url,
-      function(gltf) {
-        try {
-          scope.parse(gltf, onLoad);
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  setDRACOLoader(dracoLoader) {
-    this.gltfLoader.setDRACOLoader(dracoLoader);
-    return this;
-  }
-  parse(gltf, onLoad) {
-    onLoad(gltf);
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/chevrotain/lib/src/api.js
-var api = __webpack_require__(40417);
-;// CONCATENATED MODULE: ./node_modules/chevrotain/lib_esm/api_esm.mjs
-
-
-/* harmony default export */ const api_esm = ((/* unused pure expression or super */ null && (mod)));
-const Alternation = api/* Alternation */.ue;
-const Alternative = api/* Alternative */.r3;
-const CstParser = api/* CstParser */.wd;
-const EMPTY_ALT = api/* EMPTY_ALT */._o;
-const EOF = api/* EOF */.sd;
-const EarlyExitException = api/* EarlyExitException */.N7;
-const EmbeddedActionsParser = api/* EmbeddedActionsParser */.nu;
-const GAstVisitor = api/* GAstVisitor */.Mf;
-const LLkLookaheadStrategy = api/* LLkLookaheadStrategy */.dV;
-const Lexer = api/* Lexer */.hW;
-const LexerDefinitionErrorType = api/* LexerDefinitionErrorType */.Bw;
-const MismatchedTokenException = api/* MismatchedTokenException */.P7;
-const NoViableAltException = api/* NoViableAltException */.z5;
-const NonTerminal = api/* NonTerminal */.Sj;
-const NotAllInputParsedException = api/* NotAllInputParsedException */.Oq;
-const Option = api/* Option */.Wx;
-const Parser = api/* Parser */._b;
-const ParserDefinitionErrorType = api/* ParserDefinitionErrorType */.b4;
-const Repetition = api/* Repetition */.hI;
-const RepetitionMandatory = api/* RepetitionMandatory */.ej;
-const RepetitionMandatoryWithSeparator = api/* RepetitionMandatoryWithSeparator */.fK;
-const RepetitionWithSeparator = api/* RepetitionWithSeparator */.pT;
-const Rule = api/* Rule */.$9;
-const Terminal = api/* Terminal */.oI;
-const VERSION = api/* VERSION */.q4;
-const clearCache = api/* clearCache */.LK;
-const createSyntaxDiagramsCode = api/* createSyntaxDiagramsCode */.H7;
-const createToken = api/* createToken */.V3;
-const createTokenInstance = api/* createTokenInstance */.dK;
-const defaultLexerErrorProvider = api/* defaultLexerErrorProvider */.ZW;
-const defaultParserErrorProvider = api/* defaultParserErrorProvider */.Hs;
-const generateCstDts = api/* generateCstDts */.Kv;
-const getLookaheadPaths = api/* getLookaheadPaths */.oC;
-const isRecognitionException = api/* isRecognitionException */.bS;
-const serializeGrammar = api/* serializeGrammar */.N$;
-const serializeProduction = api/* serializeProduction */.SE;
-const tokenLabel = api/* tokenLabel */.l$;
-const tokenMatcher = api/* tokenMatcher */.ol;
-const tokenName = api/* tokenName */.vA;
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/VRMLLoader.js
-
-
-class VRMLLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const path = scope.path === "" ? three_module.LoaderUtils.extractUrlBase(url) : scope.path;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text, path));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(data, path) {
-    const nodeMap = {};
-    function generateVRMLTree(data2) {
-      const tokenData = createTokens();
-      const lexer = new VRMLLexer(tokenData.tokens);
-      const parser = new VRMLParser(tokenData.tokenVocabulary);
-      const visitor = createVisitor(parser.getBaseCstVisitorConstructor());
-      const lexingResult = lexer.lex(data2);
-      parser.input = lexingResult.tokens;
-      const cstOutput = parser.vrml();
-      if (parser.errors.length > 0) {
-        console.error(parser.errors);
-        throw Error("THREE.VRMLLoader: Parsing errors detected.");
-      }
-      const ast = visitor.visit(cstOutput);
-      return ast;
-    }
-    function createTokens() {
-      const RouteIdentifier = createToken({
-        name: "RouteIdentifier",
-        pattern: /[^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*[\.][^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*/
-      });
-      const Identifier = createToken({
-        name: "Identifier",
-        pattern: /[^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*/,
-        longer_alt: RouteIdentifier
-      });
-      const nodeTypes = [
-        "Anchor",
-        "Billboard",
-        "Collision",
-        "Group",
-        "Transform",
-        // grouping nodes
-        "Inline",
-        "LOD",
-        "Switch",
-        // special groups
-        "AudioClip",
-        "DirectionalLight",
-        "PointLight",
-        "Script",
-        "Shape",
-        "Sound",
-        "SpotLight",
-        "WorldInfo",
-        // common nodes
-        "CylinderSensor",
-        "PlaneSensor",
-        "ProximitySensor",
-        "SphereSensor",
-        "TimeSensor",
-        "TouchSensor",
-        "VisibilitySensor",
-        // sensors
-        "Box",
-        "Cone",
-        "Cylinder",
-        "ElevationGrid",
-        "Extrusion",
-        "IndexedFaceSet",
-        "IndexedLineSet",
-        "PointSet",
-        "Sphere",
-        // geometries
-        "Color",
-        "Coordinate",
-        "Normal",
-        "TextureCoordinate",
-        // geometric properties
-        "Appearance",
-        "FontStyle",
-        "ImageTexture",
-        "Material",
-        "MovieTexture",
-        "PixelTexture",
-        "TextureTransform",
-        // appearance
-        "ColorInterpolator",
-        "CoordinateInterpolator",
-        "NormalInterpolator",
-        "OrientationInterpolator",
-        "PositionInterpolator",
-        "ScalarInterpolator",
-        // interpolators
-        "Background",
-        "Fog",
-        "NavigationInfo",
-        "Viewpoint",
-        // bindable nodes
-        "Text"
-        // Text must be placed at the end of the regex so there are no matches for TextureTransform and TextureCoordinate
-      ];
-      const Version = createToken({
-        name: "Version",
-        pattern: /#VRML.*/,
-        longer_alt: Identifier
-      });
-      const NodeName = createToken({
-        name: "NodeName",
-        pattern: new RegExp(nodeTypes.join("|")),
-        longer_alt: Identifier
-      });
-      const DEF = createToken({
-        name: "DEF",
-        pattern: /DEF/,
-        longer_alt: Identifier
-      });
-      const USE = createToken({
-        name: "USE",
-        pattern: /USE/,
-        longer_alt: Identifier
-      });
-      const ROUTE = createToken({
-        name: "ROUTE",
-        pattern: /ROUTE/,
-        longer_alt: Identifier
-      });
-      const TO = createToken({
-        name: "TO",
-        pattern: /TO/,
-        longer_alt: Identifier
-      });
-      const StringLiteral = createToken({
-        name: "StringLiteral",
-        pattern: /"(?:[^\\"\n\r]|\\[bfnrtv"\\/]|\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])*"/
-      });
-      const HexLiteral = createToken({ name: "HexLiteral", pattern: /0[xX][0-9a-fA-F]+/ });
-      const NumberLiteral = createToken({ name: "NumberLiteral", pattern: /[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/ });
-      const TrueLiteral = createToken({ name: "TrueLiteral", pattern: /TRUE/ });
-      const FalseLiteral = createToken({ name: "FalseLiteral", pattern: /FALSE/ });
-      const NullLiteral = createToken({ name: "NullLiteral", pattern: /NULL/ });
-      const LSquare = createToken({ name: "LSquare", pattern: /\[/ });
-      const RSquare = createToken({ name: "RSquare", pattern: /]/ });
-      const LCurly = createToken({ name: "LCurly", pattern: /{/ });
-      const RCurly = createToken({ name: "RCurly", pattern: /}/ });
-      const Comment = createToken({
-        name: "Comment",
-        pattern: /#.*/,
-        group: Lexer.SKIPPED
-      });
-      const WhiteSpace = createToken({
-        name: "WhiteSpace",
-        pattern: /[ ,\s]/,
-        group: Lexer.SKIPPED
-      });
-      const tokens = [
-        WhiteSpace,
-        // keywords appear before the Identifier
-        NodeName,
-        DEF,
-        USE,
-        ROUTE,
-        TO,
-        TrueLiteral,
-        FalseLiteral,
-        NullLiteral,
-        // the Identifier must appear after the keywords because all keywords are valid identifiers
-        Version,
-        Identifier,
-        RouteIdentifier,
-        StringLiteral,
-        HexLiteral,
-        NumberLiteral,
-        LSquare,
-        RSquare,
-        LCurly,
-        RCurly,
-        Comment
-      ];
-      const tokenVocabulary = {};
-      for (let i = 0, l = tokens.length; i < l; i++) {
-        const token = tokens[i];
-        tokenVocabulary[token.name] = token;
-      }
-      return { tokens, tokenVocabulary };
-    }
-    function createVisitor(BaseVRMLVisitor) {
-      function VRMLToASTVisitor() {
-        BaseVRMLVisitor.call(this);
-        this.validateVisitor();
-      }
-      VRMLToASTVisitor.prototype = Object.assign(Object.create(BaseVRMLVisitor.prototype), {
-        constructor: VRMLToASTVisitor,
-        vrml: function(ctx) {
-          const data2 = {
-            version: this.visit(ctx.version),
-            nodes: [],
-            routes: []
-          };
-          for (let i = 0, l = ctx.node.length; i < l; i++) {
-            const node = ctx.node[i];
-            data2.nodes.push(this.visit(node));
-          }
-          if (ctx.route) {
-            for (let i = 0, l = ctx.route.length; i < l; i++) {
-              const route = ctx.route[i];
-              data2.routes.push(this.visit(route));
-            }
-          }
-          return data2;
-        },
-        version: function(ctx) {
-          return ctx.Version[0].image;
-        },
-        node: function(ctx) {
-          const data2 = {
-            name: ctx.NodeName[0].image,
-            fields: []
-          };
-          if (ctx.field) {
-            for (let i = 0, l = ctx.field.length; i < l; i++) {
-              const field = ctx.field[i];
-              data2.fields.push(this.visit(field));
-            }
-          }
-          if (ctx.def) {
-            data2.DEF = this.visit(ctx.def[0]);
-          }
-          return data2;
-        },
-        field: function(ctx) {
-          const data2 = {
-            name: ctx.Identifier[0].image,
-            type: null,
-            values: null
-          };
-          let result;
-          if (ctx.singleFieldValue) {
-            result = this.visit(ctx.singleFieldValue[0]);
-          }
-          if (ctx.multiFieldValue) {
-            result = this.visit(ctx.multiFieldValue[0]);
-          }
-          data2.type = result.type;
-          data2.values = result.values;
-          return data2;
-        },
-        def: function(ctx) {
-          return (ctx.Identifier || ctx.NodeName)[0].image;
-        },
-        use: function(ctx) {
-          return { USE: (ctx.Identifier || ctx.NodeName)[0].image };
-        },
-        singleFieldValue: function(ctx) {
-          return processField(this, ctx);
-        },
-        multiFieldValue: function(ctx) {
-          return processField(this, ctx);
-        },
-        route: function(ctx) {
-          const data2 = {
-            FROM: ctx.RouteIdentifier[0].image,
-            TO: ctx.RouteIdentifier[1].image
-          };
-          return data2;
-        }
-      });
-      function processField(scope, ctx) {
-        const field = {
-          type: null,
-          values: []
-        };
-        if (ctx.node) {
-          field.type = "node";
-          for (let i = 0, l = ctx.node.length; i < l; i++) {
-            const node = ctx.node[i];
-            field.values.push(scope.visit(node));
-          }
-        }
-        if (ctx.use) {
-          field.type = "use";
-          for (let i = 0, l = ctx.use.length; i < l; i++) {
-            const use = ctx.use[i];
-            field.values.push(scope.visit(use));
-          }
-        }
-        if (ctx.StringLiteral) {
-          field.type = "string";
-          for (let i = 0, l = ctx.StringLiteral.length; i < l; i++) {
-            const stringLiteral = ctx.StringLiteral[i];
-            field.values.push(stringLiteral.image.replace(/'|"/g, ""));
-          }
-        }
-        if (ctx.NumberLiteral) {
-          field.type = "number";
-          for (let i = 0, l = ctx.NumberLiteral.length; i < l; i++) {
-            const numberLiteral = ctx.NumberLiteral[i];
-            field.values.push(parseFloat(numberLiteral.image));
-          }
-        }
-        if (ctx.HexLiteral) {
-          field.type = "hex";
-          for (let i = 0, l = ctx.HexLiteral.length; i < l; i++) {
-            const hexLiteral = ctx.HexLiteral[i];
-            field.values.push(hexLiteral.image);
-          }
-        }
-        if (ctx.TrueLiteral) {
-          field.type = "boolean";
-          for (let i = 0, l = ctx.TrueLiteral.length; i < l; i++) {
-            const trueLiteral = ctx.TrueLiteral[i];
-            if (trueLiteral.image === "TRUE")
-              field.values.push(true);
-          }
-        }
-        if (ctx.FalseLiteral) {
-          field.type = "boolean";
-          for (let i = 0, l = ctx.FalseLiteral.length; i < l; i++) {
-            const falseLiteral = ctx.FalseLiteral[i];
-            if (falseLiteral.image === "FALSE")
-              field.values.push(false);
-          }
-        }
-        if (ctx.NullLiteral) {
-          field.type = "null";
-          ctx.NullLiteral.forEach(function() {
-            field.values.push(null);
-          });
-        }
-        return field;
-      }
-      return new VRMLToASTVisitor();
-    }
-    function parseTree(tree2) {
-      const nodes = tree2.nodes;
-      const scene2 = new three_module.Scene();
-      for (let i = 0, l = nodes.length; i < l; i++) {
-        const node = nodes[i];
-        buildNodeMap(node);
-      }
-      for (let i = 0, l = nodes.length; i < l; i++) {
-        const node = nodes[i];
-        const object = getNode(node);
-        if (object instanceof three_module.Object3D)
-          scene2.add(object);
-        if (node.name === "WorldInfo")
-          scene2.userData.worldInfo = object;
-      }
-      return scene2;
-    }
-    function buildNodeMap(node) {
-      if (node.DEF) {
-        nodeMap[node.DEF] = node;
-      }
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        if (field.type === "node") {
-          const fieldValues = field.values;
-          for (let j = 0, jl = fieldValues.length; j < jl; j++) {
-            buildNodeMap(fieldValues[j]);
-          }
-        }
-      }
-    }
-    function getNode(node) {
-      if (node.USE) {
-        return resolveUSE(node.USE);
-      }
-      if (node.build !== void 0)
-        return node.build;
-      node.build = buildNode(node);
-      return node.build;
-    }
-    function buildNode(node) {
-      const nodeName = node.name;
-      let build;
-      switch (nodeName) {
-        case "Group":
-        case "Transform":
-        case "Collision":
-          build = buildGroupingNode(node);
-          break;
-        case "Background":
-          build = buildBackgroundNode(node);
-          break;
-        case "Shape":
-          build = buildShapeNode(node);
-          break;
-        case "Appearance":
-          build = buildAppearanceNode(node);
-          break;
-        case "Material":
-          build = buildMaterialNode(node);
-          break;
-        case "ImageTexture":
-          build = buildImageTextureNode(node);
-          break;
-        case "PixelTexture":
-          build = buildPixelTextureNode(node);
-          break;
-        case "TextureTransform":
-          build = buildTextureTransformNode(node);
-          break;
-        case "IndexedFaceSet":
-          build = buildIndexedFaceSetNode(node);
-          break;
-        case "IndexedLineSet":
-          build = buildIndexedLineSetNode(node);
-          break;
-        case "PointSet":
-          build = buildPointSetNode(node);
-          break;
-        case "Box":
-          build = buildBoxNode(node);
-          break;
-        case "Cone":
-          build = buildConeNode(node);
-          break;
-        case "Cylinder":
-          build = buildCylinderNode(node);
-          break;
-        case "Sphere":
-          build = buildSphereNode(node);
-          break;
-        case "ElevationGrid":
-          build = buildElevationGridNode(node);
-          break;
-        case "Extrusion":
-          build = buildExtrusionNode(node);
-          break;
-        case "Color":
-        case "Coordinate":
-        case "Normal":
-        case "TextureCoordinate":
-          build = buildGeometricNode(node);
-          break;
-        case "WorldInfo":
-          build = buildWorldInfoNode(node);
-          break;
-        case "Anchor":
-        case "Billboard":
-        case "Inline":
-        case "LOD":
-        case "Switch":
-        case "AudioClip":
-        case "DirectionalLight":
-        case "PointLight":
-        case "Script":
-        case "Sound":
-        case "SpotLight":
-        case "CylinderSensor":
-        case "PlaneSensor":
-        case "ProximitySensor":
-        case "SphereSensor":
-        case "TimeSensor":
-        case "TouchSensor":
-        case "VisibilitySensor":
-        case "Text":
-        case "FontStyle":
-        case "MovieTexture":
-        case "ColorInterpolator":
-        case "CoordinateInterpolator":
-        case "NormalInterpolator":
-        case "OrientationInterpolator":
-        case "PositionInterpolator":
-        case "ScalarInterpolator":
-        case "Fog":
-        case "NavigationInfo":
-        case "Viewpoint":
-          break;
-        default:
-          console.warn("THREE.VRMLLoader: Unknown node:", nodeName);
-          break;
-      }
-      if (build !== void 0 && node.DEF !== void 0 && build.hasOwnProperty("name") === true) {
-        build.name = node.DEF;
-      }
-      return build;
-    }
-    function buildGroupingNode(node) {
-      const object = new three_module.Group();
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "bboxCenter":
-            break;
-          case "bboxSize":
-            break;
-          case "center":
-            break;
-          case "children":
-            parseFieldChildren(fieldValues, object);
-            break;
-          case "collide":
-            break;
-          case "rotation":
-            const axis = new three_module.Vector3(fieldValues[0], fieldValues[1], fieldValues[2]);
-            const angle = fieldValues[3];
-            object.quaternion.setFromAxisAngle(axis, angle);
-            break;
-          case "scale":
-            object.scale.set(fieldValues[0], fieldValues[1], fieldValues[2]);
-            break;
-          case "scaleOrientation":
-            break;
-          case "translation":
-            object.position.set(fieldValues[0], fieldValues[1], fieldValues[2]);
-            break;
-          case "proxy":
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      return object;
-    }
-    function buildBackgroundNode(node) {
-      const group = new three_module.Group();
-      let groundAngle, groundColor;
-      let skyAngle, skyColor;
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "groundAngle":
-            groundAngle = fieldValues;
-            break;
-          case "groundColor":
-            groundColor = fieldValues;
-            break;
-          case "backUrl":
-            break;
-          case "bottomUrl":
-            break;
-          case "frontUrl":
-            break;
-          case "leftUrl":
-            break;
-          case "rightUrl":
-            break;
-          case "topUrl":
-            break;
-          case "skyAngle":
-            skyAngle = fieldValues;
-            break;
-          case "skyColor":
-            skyColor = fieldValues;
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      const radius = 1e4;
-      if (skyColor) {
-        const skyGeometry = new three_module.SphereGeometry(radius, 32, 16);
-        const skyMaterial = new three_module.MeshBasicMaterial({ fog: false, side: three_module.BackSide, depthWrite: false, depthTest: false });
-        if (skyColor.length > 3) {
-          paintFaces(skyGeometry, radius, skyAngle, toColorArray(skyColor), true);
-          skyMaterial.vertexColors = true;
-        } else {
-          skyMaterial.color.setRGB(skyColor[0], skyColor[1], skyColor[2]);
-        }
-        const sky = new three_module.Mesh(skyGeometry, skyMaterial);
-        group.add(sky);
-      }
-      if (groundColor) {
-        if (groundColor.length > 0) {
-          const groundGeometry = new three_module.SphereGeometry(radius, 32, 16, 0, 2 * Math.PI, 0.5 * Math.PI, 1.5 * Math.PI);
-          const groundMaterial = new three_module.MeshBasicMaterial({
-            fog: false,
-            side: three_module.BackSide,
-            vertexColors: true,
-            depthWrite: false,
-            depthTest: false
-          });
-          paintFaces(groundGeometry, radius, groundAngle, toColorArray(groundColor), false);
-          const ground = new three_module.Mesh(groundGeometry, groundMaterial);
-          group.add(ground);
-        }
-      }
-      group.renderOrder = -Infinity;
-      return group;
-    }
-    function buildShapeNode(node) {
-      const fields = node.fields;
-      let material = new three_module.MeshBasicMaterial({ color: 0 });
-      let geometry;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "appearance":
-            if (fieldValues[0] !== null) {
-              material = getNode(fieldValues[0]);
-            }
-            break;
-          case "geometry":
-            if (fieldValues[0] !== null) {
-              geometry = getNode(fieldValues[0]);
-            }
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      let object;
-      if (geometry && geometry.attributes.position) {
-        const type = geometry._type;
-        if (type === "points") {
-          const pointsMaterial = new three_module.PointsMaterial({ color: 16777215 });
-          if (geometry.attributes.color !== void 0) {
-            pointsMaterial.vertexColors = true;
-          } else {
-            if (material.isMeshPhongMaterial) {
-              pointsMaterial.color.copy(material.emissive);
-            }
-          }
-          object = new three_module.Points(geometry, pointsMaterial);
-        } else if (type === "line") {
-          const lineMaterial = new three_module.LineBasicMaterial({ color: 16777215 });
-          if (geometry.attributes.color !== void 0) {
-            lineMaterial.vertexColors = true;
-          } else {
-            if (material.isMeshPhongMaterial) {
-              lineMaterial.color.copy(material.emissive);
-            }
-          }
-          object = new three_module.LineSegments(geometry, lineMaterial);
-        } else {
-          if (geometry._solid !== void 0) {
-            material.side = geometry._solid ? three_module.FrontSide : three_module.DoubleSide;
-          }
-          if (geometry.attributes.color !== void 0) {
-            material.vertexColors = true;
-          }
-          object = new three_module.Mesh(geometry, material);
-        }
-      } else {
-        object = new three_module.Object3D();
-        object.visible = false;
-      }
-      return object;
-    }
-    function buildAppearanceNode(node) {
-      let material = new three_module.MeshPhongMaterial();
-      let transformData;
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "material":
-            if (fieldValues[0] !== null) {
-              const materialData = getNode(fieldValues[0]);
-              if (materialData.diffuseColor)
-                material.color.copy(materialData.diffuseColor);
-              if (materialData.emissiveColor)
-                material.emissive.copy(materialData.emissiveColor);
-              if (materialData.shininess)
-                material.shininess = materialData.shininess;
-              if (materialData.specularColor)
-                material.specular.copy(materialData.specularColor);
-              if (materialData.transparency)
-                material.opacity = 1 - materialData.transparency;
-              if (materialData.transparency > 0)
-                material.transparent = true;
-            } else {
-              material = new three_module.MeshBasicMaterial({ color: 0 });
-            }
-            break;
-          case "texture":
-            const textureNode = fieldValues[0];
-            if (textureNode !== null) {
-              if (textureNode.name === "ImageTexture" || textureNode.name === "PixelTexture") {
-                material.map = getNode(textureNode);
-              } else {
-              }
-            }
-            break;
-          case "textureTransform":
-            if (fieldValues[0] !== null) {
-              transformData = getNode(fieldValues[0]);
-            }
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      if (material.map) {
-        if (material.map.__type) {
-          switch (material.map.__type) {
-            case TEXTURE_TYPE.INTENSITY_ALPHA:
-              material.opacity = 1;
-              break;
-            case TEXTURE_TYPE.RGB:
-              material.color.set(16777215);
-              break;
-            case TEXTURE_TYPE.RGBA:
-              material.color.set(16777215);
-              material.opacity = 1;
-              break;
-            default:
-          }
-          delete material.map.__type;
-        }
-        if (transformData) {
-          material.map.center.copy(transformData.center);
-          material.map.rotation = transformData.rotation;
-          material.map.repeat.copy(transformData.scale);
-          material.map.offset.copy(transformData.translation);
-        }
-      }
-      return material;
-    }
-    function buildMaterialNode(node) {
-      const materialData = {};
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "ambientIntensity":
-            break;
-          case "diffuseColor":
-            materialData.diffuseColor = new three_module.Color(fieldValues[0], fieldValues[1], fieldValues[2]);
-            break;
-          case "emissiveColor":
-            materialData.emissiveColor = new three_module.Color(fieldValues[0], fieldValues[1], fieldValues[2]);
-            break;
-          case "shininess":
-            materialData.shininess = fieldValues[0];
-            break;
-          case "specularColor":
-            materialData.emissiveColor = new three_module.Color(fieldValues[0], fieldValues[1], fieldValues[2]);
-            break;
-          case "transparency":
-            materialData.transparency = fieldValues[0];
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      return materialData;
-    }
-    function parseHexColor(hex, textureType, color) {
-      let value;
-      switch (textureType) {
-        case TEXTURE_TYPE.INTENSITY:
-          value = parseInt(hex);
-          color.r = value;
-          color.g = value;
-          color.b = value;
-          color.a = 1;
-          break;
-        case TEXTURE_TYPE.INTENSITY_ALPHA:
-          value = parseInt("0x" + hex.substring(2, 4));
-          color.r = value;
-          color.g = value;
-          color.b = value;
-          color.a = parseInt("0x" + hex.substring(4, 6));
-          break;
-        case TEXTURE_TYPE.RGB:
-          color.r = parseInt("0x" + hex.substring(2, 4));
-          color.g = parseInt("0x" + hex.substring(4, 6));
-          color.b = parseInt("0x" + hex.substring(6, 8));
-          color.a = 1;
-          break;
-        case TEXTURE_TYPE.RGBA:
-          color.r = parseInt("0x" + hex.substring(2, 4));
-          color.g = parseInt("0x" + hex.substring(4, 6));
-          color.b = parseInt("0x" + hex.substring(6, 8));
-          color.a = parseInt("0x" + hex.substring(8, 10));
-          break;
-        default:
-      }
-    }
-    function getTextureType(num_components) {
-      let type;
-      switch (num_components) {
-        case 1:
-          type = TEXTURE_TYPE.INTENSITY;
-          break;
-        case 2:
-          type = TEXTURE_TYPE.INTENSITY_ALPHA;
-          break;
-        case 3:
-          type = TEXTURE_TYPE.RGB;
-          break;
-        case 4:
-          type = TEXTURE_TYPE.RGBA;
-          break;
-        default:
-      }
-      return type;
-    }
-    function buildPixelTextureNode(node) {
-      let texture;
-      let wrapS = three_module.RepeatWrapping;
-      let wrapT = three_module.RepeatWrapping;
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "image":
-            const width = fieldValues[0];
-            const height = fieldValues[1];
-            const num_components = fieldValues[2];
-            const textureType = getTextureType(num_components);
-            const data2 = new Uint8Array(4 * width * height);
-            const color = { r: 0, g: 0, b: 0, a: 0 };
-            for (let j = 3, k = 0, jl = fieldValues.length; j < jl; j++, k++) {
-              parseHexColor(fieldValues[j], textureType, color);
-              const stride = k * 4;
-              data2[stride + 0] = color.r;
-              data2[stride + 1] = color.g;
-              data2[stride + 2] = color.b;
-              data2[stride + 3] = color.a;
-            }
-            texture = new three_module.DataTexture(data2, width, height);
-            texture.needsUpdate = true;
-            texture.__type = textureType;
-            break;
-          case "repeatS":
-            if (fieldValues[0] === false)
-              wrapS = three_module.ClampToEdgeWrapping;
-            break;
-          case "repeatT":
-            if (fieldValues[0] === false)
-              wrapT = three_module.ClampToEdgeWrapping;
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      if (texture) {
-        texture.wrapS = wrapS;
-        texture.wrapT = wrapT;
-      }
-      return texture;
-    }
-    function buildImageTextureNode(node) {
-      let texture;
-      let wrapS = three_module.RepeatWrapping;
-      let wrapT = three_module.RepeatWrapping;
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "url":
-            const url = fieldValues[0];
-            if (url)
-              texture = textureLoader.load(url);
-            break;
-          case "repeatS":
-            if (fieldValues[0] === false)
-              wrapS = three_module.ClampToEdgeWrapping;
-            break;
-          case "repeatT":
-            if (fieldValues[0] === false)
-              wrapT = three_module.ClampToEdgeWrapping;
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      if (texture) {
-        texture.wrapS = wrapS;
-        texture.wrapT = wrapT;
-      }
-      return texture;
-    }
-    function buildTextureTransformNode(node) {
-      const transformData = {
-        center: new three_module.Vector2(),
-        rotation: new three_module.Vector2(),
-        scale: new three_module.Vector2(),
-        translation: new three_module.Vector2()
-      };
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "center":
-            transformData.center.set(fieldValues[0], fieldValues[1]);
-            break;
-          case "rotation":
-            transformData.rotation = fieldValues[0];
-            break;
-          case "scale":
-            transformData.scale.set(fieldValues[0], fieldValues[1]);
-            break;
-          case "translation":
-            transformData.translation.set(fieldValues[0], fieldValues[1]);
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      return transformData;
-    }
-    function buildGeometricNode(node) {
-      return node.fields[0].values;
-    }
-    function buildWorldInfoNode(node) {
-      const worldInfo = {};
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "title":
-            worldInfo.title = fieldValues[0];
-            break;
-          case "info":
-            worldInfo.info = fieldValues;
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      return worldInfo;
-    }
-    function buildIndexedFaceSetNode(node) {
-      let color, coord, normal, texCoord;
-      let ccw = true, solid = true, creaseAngle = 0;
-      let colorIndex, coordIndex, normalIndex, texCoordIndex;
-      let colorPerVertex = true, normalPerVertex = true;
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "color":
-            const colorNode = fieldValues[0];
-            if (colorNode !== null) {
-              color = getNode(colorNode);
-            }
-            break;
-          case "coord":
-            const coordNode = fieldValues[0];
-            if (coordNode !== null) {
-              coord = getNode(coordNode);
-            }
-            break;
-          case "normal":
-            const normalNode = fieldValues[0];
-            if (normalNode !== null) {
-              normal = getNode(normalNode);
-            }
-            break;
-          case "texCoord":
-            const texCoordNode = fieldValues[0];
-            if (texCoordNode !== null) {
-              texCoord = getNode(texCoordNode);
-            }
-            break;
-          case "ccw":
-            ccw = fieldValues[0];
-            break;
-          case "colorIndex":
-            colorIndex = fieldValues;
-            break;
-          case "colorPerVertex":
-            colorPerVertex = fieldValues[0];
-            break;
-          case "convex":
-            break;
-          case "coordIndex":
-            coordIndex = fieldValues;
-            break;
-          case "creaseAngle":
-            creaseAngle = fieldValues[0];
-            break;
-          case "normalIndex":
-            normalIndex = fieldValues;
-            break;
-          case "normalPerVertex":
-            normalPerVertex = fieldValues[0];
-            break;
-          case "solid":
-            solid = fieldValues[0];
-            break;
-          case "texCoordIndex":
-            texCoordIndex = fieldValues;
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      if (coordIndex === void 0) {
-        console.warn("THREE.VRMLLoader: Missing coordIndex.");
-        return new three_module.BufferGeometry();
-      }
-      const triangulatedCoordIndex = triangulateFaceIndex(coordIndex, ccw);
-      let colorAttribute;
-      let normalAttribute;
-      let uvAttribute;
-      if (color) {
-        if (colorPerVertex === true) {
-          if (colorIndex && colorIndex.length > 0) {
-            const triangulatedColorIndex = triangulateFaceIndex(colorIndex, ccw);
-            colorAttribute = computeAttributeFromIndexedData(triangulatedCoordIndex, triangulatedColorIndex, color, 3);
-          } else {
-            colorAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new three_module.Float32BufferAttribute(color, 3));
-          }
-        } else {
-          if (colorIndex && colorIndex.length > 0) {
-            const flattenFaceColors = flattenData(color, colorIndex);
-            const triangulatedFaceColors = triangulateFaceData(flattenFaceColors, coordIndex);
-            colorAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceColors);
-          } else {
-            const triangulatedFaceColors = triangulateFaceData(color, coordIndex);
-            colorAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceColors);
-          }
-        }
-      }
-      if (normal) {
-        if (normalPerVertex === true) {
-          if (normalIndex && normalIndex.length > 0) {
-            const triangulatedNormalIndex = triangulateFaceIndex(normalIndex, ccw);
-            normalAttribute = computeAttributeFromIndexedData(
-              triangulatedCoordIndex,
-              triangulatedNormalIndex,
-              normal,
-              3
-            );
-          } else {
-            normalAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new three_module.Float32BufferAttribute(normal, 3));
-          }
-        } else {
-          if (normalIndex && normalIndex.length > 0) {
-            const flattenFaceNormals = flattenData(normal, normalIndex);
-            const triangulatedFaceNormals = triangulateFaceData(flattenFaceNormals, coordIndex);
-            normalAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceNormals);
-          } else {
-            const triangulatedFaceNormals = triangulateFaceData(normal, coordIndex);
-            normalAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceNormals);
-          }
-        }
-      } else {
-        normalAttribute = computeNormalAttribute(triangulatedCoordIndex, coord, creaseAngle);
-      }
-      if (texCoord) {
-        if (texCoordIndex && texCoordIndex.length > 0) {
-          const triangulatedTexCoordIndex = triangulateFaceIndex(texCoordIndex, ccw);
-          uvAttribute = computeAttributeFromIndexedData(triangulatedCoordIndex, triangulatedTexCoordIndex, texCoord, 2);
-        } else {
-          uvAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new three_module.Float32BufferAttribute(texCoord, 2));
-        }
-      }
-      const geometry = new three_module.BufferGeometry();
-      const positionAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new three_module.Float32BufferAttribute(coord, 3));
-      geometry.setAttribute("position", positionAttribute);
-      geometry.setAttribute("normal", normalAttribute);
-      if (colorAttribute)
-        geometry.setAttribute("color", colorAttribute);
-      if (uvAttribute)
-        geometry.setAttribute("uv", uvAttribute);
-      geometry._solid = solid;
-      geometry._type = "mesh";
-      return geometry;
-    }
-    function buildIndexedLineSetNode(node) {
-      let color, coord;
-      let colorIndex, coordIndex;
-      let colorPerVertex = true;
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "color":
-            const colorNode = fieldValues[0];
-            if (colorNode !== null) {
-              color = getNode(colorNode);
-            }
-            break;
-          case "coord":
-            const coordNode = fieldValues[0];
-            if (coordNode !== null) {
-              coord = getNode(coordNode);
-            }
-            break;
-          case "colorIndex":
-            colorIndex = fieldValues;
-            break;
-          case "colorPerVertex":
-            colorPerVertex = fieldValues[0];
-            break;
-          case "coordIndex":
-            coordIndex = fieldValues;
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      let colorAttribute;
-      const expandedLineIndex = expandLineIndex(coordIndex);
-      if (color) {
-        if (colorPerVertex === true) {
-          if (colorIndex.length > 0) {
-            const expandedColorIndex = expandLineIndex(colorIndex);
-            colorAttribute = computeAttributeFromIndexedData(expandedLineIndex, expandedColorIndex, color, 3);
-          } else {
-            colorAttribute = toNonIndexedAttribute(expandedLineIndex, new three_module.Float32BufferAttribute(color, 3));
-          }
-        } else {
-          if (colorIndex.length > 0) {
-            const flattenLineColors = flattenData(color, colorIndex);
-            const expandedLineColors = expandLineData(flattenLineColors, coordIndex);
-            colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandedLineColors);
-          } else {
-            const expandedLineColors = expandLineData(color, coordIndex);
-            colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandedLineColors);
-          }
-        }
-      }
-      const geometry = new three_module.BufferGeometry();
-      const positionAttribute = toNonIndexedAttribute(expandedLineIndex, new three_module.Float32BufferAttribute(coord, 3));
-      geometry.setAttribute("position", positionAttribute);
-      if (colorAttribute)
-        geometry.setAttribute("color", colorAttribute);
-      geometry._type = "line";
-      return geometry;
-    }
-    function buildPointSetNode(node) {
-      let color, coord;
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "color":
-            const colorNode = fieldValues[0];
-            if (colorNode !== null) {
-              color = getNode(colorNode);
-            }
-            break;
-          case "coord":
-            const coordNode = fieldValues[0];
-            if (coordNode !== null) {
-              coord = getNode(coordNode);
-            }
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      const geometry = new three_module.BufferGeometry();
-      geometry.setAttribute("position", new three_module.Float32BufferAttribute(coord, 3));
-      if (color)
-        geometry.setAttribute("color", new three_module.Float32BufferAttribute(color, 3));
-      geometry._type = "points";
-      return geometry;
-    }
-    function buildBoxNode(node) {
-      const size = new three_module.Vector3(2, 2, 2);
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "size":
-            size.x = fieldValues[0];
-            size.y = fieldValues[1];
-            size.z = fieldValues[2];
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      const geometry = new three_module.BoxGeometry(size.x, size.y, size.z);
-      return geometry;
-    }
-    function buildConeNode(node) {
-      let radius = 1, height = 2, openEnded = false;
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "bottom":
-            openEnded = !fieldValues[0];
-            break;
-          case "bottomRadius":
-            radius = fieldValues[0];
-            break;
-          case "height":
-            height = fieldValues[0];
-            break;
-          case "side":
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      const geometry = new three_module.ConeGeometry(radius, height, 16, 1, openEnded);
-      return geometry;
-    }
-    function buildCylinderNode(node) {
-      let radius = 1, height = 2;
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "bottom":
-            break;
-          case "radius":
-            radius = fieldValues[0];
-            break;
-          case "height":
-            height = fieldValues[0];
-            break;
-          case "side":
-            break;
-          case "top":
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      const geometry = new three_module.CylinderGeometry(radius, radius, height, 16, 1);
-      return geometry;
-    }
-    function buildSphereNode(node) {
-      let radius = 1;
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "radius":
-            radius = fieldValues[0];
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      const geometry = new three_module.SphereGeometry(radius, 16, 16);
-      return geometry;
-    }
-    function buildElevationGridNode(node) {
-      let color;
-      let normal;
-      let texCoord;
-      let height;
-      let colorPerVertex = true;
-      let normalPerVertex = true;
-      let solid = true;
-      let ccw = true;
-      let creaseAngle = 0;
-      let xDimension = 2;
-      let zDimension = 2;
-      let xSpacing = 1;
-      let zSpacing = 1;
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "color":
-            const colorNode = fieldValues[0];
-            if (colorNode !== null) {
-              color = getNode(colorNode);
-            }
-            break;
-          case "normal":
-            const normalNode = fieldValues[0];
-            if (normalNode !== null) {
-              normal = getNode(normalNode);
-            }
-            break;
-          case "texCoord":
-            const texCoordNode = fieldValues[0];
-            if (texCoordNode !== null) {
-              texCoord = getNode(texCoordNode);
-            }
-            break;
-          case "height":
-            height = fieldValues;
-            break;
-          case "ccw":
-            ccw = fieldValues[0];
-            break;
-          case "colorPerVertex":
-            colorPerVertex = fieldValues[0];
-            break;
-          case "creaseAngle":
-            creaseAngle = fieldValues[0];
-            break;
-          case "normalPerVertex":
-            normalPerVertex = fieldValues[0];
-            break;
-          case "solid":
-            solid = fieldValues[0];
-            break;
-          case "xDimension":
-            xDimension = fieldValues[0];
-            break;
-          case "xSpacing":
-            xSpacing = fieldValues[0];
-            break;
-          case "zDimension":
-            zDimension = fieldValues[0];
-            break;
-          case "zSpacing":
-            zSpacing = fieldValues[0];
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      const vertices = [];
-      const normals = [];
-      const colors = [];
-      const uvs = [];
-      for (let i = 0; i < zDimension; i++) {
-        for (let j = 0; j < xDimension; j++) {
-          const index = i * xDimension + j;
-          const x = xSpacing * i;
-          const y = height[index];
-          const z = zSpacing * j;
-          vertices.push(x, y, z);
-          if (color && colorPerVertex === true) {
-            const r = color[index * 3 + 0];
-            const g = color[index * 3 + 1];
-            const b = color[index * 3 + 2];
-            colors.push(r, g, b);
-          }
-          if (normal && normalPerVertex === true) {
-            const xn = normal[index * 3 + 0];
-            const yn = normal[index * 3 + 1];
-            const zn = normal[index * 3 + 2];
-            normals.push(xn, yn, zn);
-          }
-          if (texCoord) {
-            const s = texCoord[index * 2 + 0];
-            const t = texCoord[index * 2 + 1];
-            uvs.push(s, t);
-          } else {
-            uvs.push(i / (xDimension - 1), j / (zDimension - 1));
-          }
-        }
-      }
-      const indices = [];
-      for (let i = 0; i < xDimension - 1; i++) {
-        for (let j = 0; j < zDimension - 1; j++) {
-          const a = i + j * xDimension;
-          const b = i + (j + 1) * xDimension;
-          const c = i + 1 + (j + 1) * xDimension;
-          const d = i + 1 + j * xDimension;
-          if (ccw === true) {
-            indices.push(a, c, b);
-            indices.push(c, a, d);
-          } else {
-            indices.push(a, b, c);
-            indices.push(c, d, a);
-          }
-        }
-      }
-      const positionAttribute = toNonIndexedAttribute(indices, new three_module.Float32BufferAttribute(vertices, 3));
-      const uvAttribute = toNonIndexedAttribute(indices, new three_module.Float32BufferAttribute(uvs, 2));
-      let colorAttribute;
-      let normalAttribute;
-      if (color) {
-        if (colorPerVertex === false) {
-          for (let i = 0; i < xDimension - 1; i++) {
-            for (let j = 0; j < zDimension - 1; j++) {
-              const index = i + j * (xDimension - 1);
-              const r = color[index * 3 + 0];
-              const g = color[index * 3 + 1];
-              const b = color[index * 3 + 2];
-              colors.push(r, g, b);
-              colors.push(r, g, b);
-              colors.push(r, g, b);
-              colors.push(r, g, b);
-              colors.push(r, g, b);
-              colors.push(r, g, b);
-            }
-          }
-          colorAttribute = new three_module.Float32BufferAttribute(colors, 3);
-        } else {
-          colorAttribute = toNonIndexedAttribute(indices, new three_module.Float32BufferAttribute(colors, 3));
-        }
-      }
-      if (normal) {
-        if (normalPerVertex === false) {
-          for (let i = 0; i < xDimension - 1; i++) {
-            for (let j = 0; j < zDimension - 1; j++) {
-              const index = i + j * (xDimension - 1);
-              const xn = normal[index * 3 + 0];
-              const yn = normal[index * 3 + 1];
-              const zn = normal[index * 3 + 2];
-              normals.push(xn, yn, zn);
-              normals.push(xn, yn, zn);
-              normals.push(xn, yn, zn);
-              normals.push(xn, yn, zn);
-              normals.push(xn, yn, zn);
-              normals.push(xn, yn, zn);
-            }
-          }
-          normalAttribute = new three_module.Float32BufferAttribute(normals, 3);
-        } else {
-          normalAttribute = toNonIndexedAttribute(indices, new three_module.Float32BufferAttribute(normals, 3));
-        }
-      } else {
-        normalAttribute = computeNormalAttribute(indices, vertices, creaseAngle);
-      }
-      const geometry = new three_module.BufferGeometry();
-      geometry.setAttribute("position", positionAttribute);
-      geometry.setAttribute("normal", normalAttribute);
-      geometry.setAttribute("uv", uvAttribute);
-      if (colorAttribute)
-        geometry.setAttribute("color", colorAttribute);
-      geometry._solid = solid;
-      geometry._type = "mesh";
-      return geometry;
-    }
-    function buildExtrusionNode(node) {
-      let crossSection = [1, 1, 1, -1, -1, -1, -1, 1, 1, 1];
-      let spine = [0, 0, 0, 0, 1, 0];
-      let scale;
-      let orientation;
-      let beginCap = true;
-      let ccw = true;
-      let creaseAngle = 0;
-      let endCap = true;
-      let solid = true;
-      const fields = node.fields;
-      for (let i = 0, l = fields.length; i < l; i++) {
-        const field = fields[i];
-        const fieldName = field.name;
-        const fieldValues = field.values;
-        switch (fieldName) {
-          case "beginCap":
-            beginCap = fieldValues[0];
-            break;
-          case "ccw":
-            ccw = fieldValues[0];
-            break;
-          case "convex":
-            break;
-          case "creaseAngle":
-            creaseAngle = fieldValues[0];
-            break;
-          case "crossSection":
-            crossSection = fieldValues;
-            break;
-          case "endCap":
-            endCap = fieldValues[0];
-            break;
-          case "orientation":
-            orientation = fieldValues;
-            break;
-          case "scale":
-            scale = fieldValues;
-            break;
-          case "solid":
-            solid = fieldValues[0];
-            break;
-          case "spine":
-            spine = fieldValues;
-            break;
-          default:
-            console.warn("THREE.VRMLLoader: Unknown field:", fieldName);
-            break;
-        }
-      }
-      const crossSectionClosed = crossSection[0] === crossSection[crossSection.length - 2] && crossSection[1] === crossSection[crossSection.length - 1];
-      const vertices = [];
-      const spineVector = new three_module.Vector3();
-      const scaling = new three_module.Vector3();
-      const axis = new three_module.Vector3();
-      const vertex = new three_module.Vector3();
-      const quaternion = new three_module.Quaternion();
-      for (let i = 0, j = 0, o = 0, il = spine.length; i < il; i += 3, j += 2, o += 4) {
-        spineVector.fromArray(spine, i);
-        scaling.x = scale ? scale[j + 0] : 1;
-        scaling.y = 1;
-        scaling.z = scale ? scale[j + 1] : 1;
-        axis.x = orientation ? orientation[o + 0] : 0;
-        axis.y = orientation ? orientation[o + 1] : 0;
-        axis.z = orientation ? orientation[o + 2] : 1;
-        const angle = orientation ? orientation[o + 3] : 0;
-        for (let k = 0, kl = crossSection.length; k < kl; k += 2) {
-          vertex.x = crossSection[k + 0];
-          vertex.y = 0;
-          vertex.z = crossSection[k + 1];
-          vertex.multiply(scaling);
-          quaternion.setFromAxisAngle(axis, angle);
-          vertex.applyQuaternion(quaternion);
-          vertex.add(spineVector);
-          vertices.push(vertex.x, vertex.y, vertex.z);
-        }
-      }
-      const indices = [];
-      const spineCount = spine.length / 3;
-      const crossSectionCount = crossSection.length / 2;
-      for (let i = 0; i < spineCount - 1; i++) {
-        for (let j = 0; j < crossSectionCount - 1; j++) {
-          const a = j + i * crossSectionCount;
-          let b = j + 1 + i * crossSectionCount;
-          const c = j + (i + 1) * crossSectionCount;
-          let d = j + 1 + (i + 1) * crossSectionCount;
-          if (j === crossSectionCount - 2 && crossSectionClosed === true) {
-            b = i * crossSectionCount;
-            d = (i + 1) * crossSectionCount;
-          }
-          if (ccw === true) {
-            indices.push(a, b, c);
-            indices.push(c, b, d);
-          } else {
-            indices.push(a, c, b);
-            indices.push(c, d, b);
-          }
-        }
-      }
-      if (beginCap === true || endCap === true) {
-        const contour = [];
-        for (let i = 0, l = crossSection.length; i < l; i += 2) {
-          contour.push(new three_module.Vector2(crossSection[i], crossSection[i + 1]));
-        }
-        const faces = three_module.ShapeUtils.triangulateShape(contour, []);
-        const capIndices = [];
-        for (let i = 0, l = faces.length; i < l; i++) {
-          const face = faces[i];
-          capIndices.push(face[0], face[1], face[2]);
-        }
-        if (beginCap === true) {
-          for (let i = 0, l = capIndices.length; i < l; i += 3) {
-            if (ccw === true) {
-              indices.push(capIndices[i + 0], capIndices[i + 1], capIndices[i + 2]);
-            } else {
-              indices.push(capIndices[i + 0], capIndices[i + 2], capIndices[i + 1]);
-            }
-          }
-        }
-        if (endCap === true) {
-          const indexOffset = crossSectionCount * (spineCount - 1);
-          for (let i = 0, l = capIndices.length; i < l; i += 3) {
-            if (ccw === true) {
-              indices.push(
-                indexOffset + capIndices[i + 0],
-                indexOffset + capIndices[i + 2],
-                indexOffset + capIndices[i + 1]
-              );
-            } else {
-              indices.push(
-                indexOffset + capIndices[i + 0],
-                indexOffset + capIndices[i + 1],
-                indexOffset + capIndices[i + 2]
-              );
-            }
-          }
-        }
-      }
-      const positionAttribute = toNonIndexedAttribute(indices, new three_module.Float32BufferAttribute(vertices, 3));
-      const normalAttribute = computeNormalAttribute(indices, vertices, creaseAngle);
-      const geometry = new three_module.BufferGeometry();
-      geometry.setAttribute("position", positionAttribute);
-      geometry.setAttribute("normal", normalAttribute);
-      geometry._solid = solid;
-      geometry._type = "mesh";
-      return geometry;
-    }
-    function resolveUSE(identifier) {
-      const node = nodeMap[identifier];
-      const build = getNode(node);
-      return build.isObject3D || build.isMaterial ? build.clone() : build;
-    }
-    function parseFieldChildren(children, owner) {
-      for (let i = 0, l = children.length; i < l; i++) {
-        const object = getNode(children[i]);
-        if (object instanceof three_module.Object3D)
-          owner.add(object);
-      }
-    }
-    function triangulateFaceIndex(index, ccw) {
-      const indices = [];
-      let start = 0;
-      for (let i = 0, l = index.length; i < l; i++) {
-        const i1 = index[start];
-        const i2 = index[i + (ccw ? 1 : 2)];
-        const i3 = index[i + (ccw ? 2 : 1)];
-        indices.push(i1, i2, i3);
-        if (index[i + 3] === -1 || i + 3 >= l) {
-          i += 3;
-          start = i + 1;
-        }
-      }
-      return indices;
-    }
-    function triangulateFaceData(data2, index) {
-      const triangulatedData = [];
-      let start = 0;
-      for (let i = 0, l = index.length; i < l; i++) {
-        const stride = start * 3;
-        const x = data2[stride];
-        const y = data2[stride + 1];
-        const z = data2[stride + 2];
-        triangulatedData.push(x, y, z);
-        if (index[i + 3] === -1 || i + 3 >= l) {
-          i += 3;
-          start++;
-        }
-      }
-      return triangulatedData;
-    }
-    function flattenData(data2, index) {
-      const flattenData2 = [];
-      for (let i = 0, l = index.length; i < l; i++) {
-        const i1 = index[i];
-        const stride = i1 * 3;
-        const x = data2[stride];
-        const y = data2[stride + 1];
-        const z = data2[stride + 2];
-        flattenData2.push(x, y, z);
-      }
-      return flattenData2;
-    }
-    function expandLineIndex(index) {
-      const indices = [];
-      for (let i = 0, l = index.length; i < l; i++) {
-        const i1 = index[i];
-        const i2 = index[i + 1];
-        indices.push(i1, i2);
-        if (index[i + 2] === -1 || i + 2 >= l) {
-          i += 2;
-        }
-      }
-      return indices;
-    }
-    function expandLineData(data2, index) {
-      const triangulatedData = [];
-      let start = 0;
-      for (let i = 0, l = index.length; i < l; i++) {
-        const stride = start * 3;
-        const x = data2[stride];
-        const y = data2[stride + 1];
-        const z = data2[stride + 2];
-        triangulatedData.push(x, y, z);
-        if (index[i + 2] === -1 || i + 2 >= l) {
-          i += 2;
-          start++;
-        }
-      }
-      return triangulatedData;
-    }
-    const vA = new three_module.Vector3();
-    const vB = new three_module.Vector3();
-    const vC = new three_module.Vector3();
-    const uvA = new three_module.Vector2();
-    const uvB = new three_module.Vector2();
-    const uvC = new three_module.Vector2();
-    function computeAttributeFromIndexedData(coordIndex, index, data2, itemSize) {
-      const array = [];
-      for (let i = 0, l = coordIndex.length; i < l; i += 3) {
-        const a = index[i];
-        const b = index[i + 1];
-        const c = index[i + 2];
-        if (itemSize === 2) {
-          uvA.fromArray(data2, a * itemSize);
-          uvB.fromArray(data2, b * itemSize);
-          uvC.fromArray(data2, c * itemSize);
-          array.push(uvA.x, uvA.y);
-          array.push(uvB.x, uvB.y);
-          array.push(uvC.x, uvC.y);
-        } else {
-          vA.fromArray(data2, a * itemSize);
-          vB.fromArray(data2, b * itemSize);
-          vC.fromArray(data2, c * itemSize);
-          array.push(vA.x, vA.y, vA.z);
-          array.push(vB.x, vB.y, vB.z);
-          array.push(vC.x, vC.y, vC.z);
-        }
-      }
-      return new three_module.Float32BufferAttribute(array, itemSize);
-    }
-    function computeAttributeFromFaceData(index, faceData) {
-      const array = [];
-      for (let i = 0, j = 0, l = index.length; i < l; i += 3, j++) {
-        vA.fromArray(faceData, j * 3);
-        array.push(vA.x, vA.y, vA.z);
-        array.push(vA.x, vA.y, vA.z);
-        array.push(vA.x, vA.y, vA.z);
-      }
-      return new three_module.Float32BufferAttribute(array, 3);
-    }
-    function computeAttributeFromLineData(index, lineData) {
-      const array = [];
-      for (let i = 0, j = 0, l = index.length; i < l; i += 2, j++) {
-        vA.fromArray(lineData, j * 3);
-        array.push(vA.x, vA.y, vA.z);
-        array.push(vA.x, vA.y, vA.z);
-      }
-      return new three_module.Float32BufferAttribute(array, 3);
-    }
-    function toNonIndexedAttribute(indices, attribute) {
-      const array = attribute.array;
-      const itemSize = attribute.itemSize;
-      const array2 = new array.constructor(indices.length * itemSize);
-      let index = 0, index2 = 0;
-      for (let i = 0, l = indices.length; i < l; i++) {
-        index = indices[i] * itemSize;
-        for (let j = 0; j < itemSize; j++) {
-          array2[index2++] = array[index++];
-        }
-      }
-      return new three_module.Float32BufferAttribute(array2, itemSize);
-    }
-    const ab = new three_module.Vector3();
-    const cb = new three_module.Vector3();
-    function computeNormalAttribute(index, coord, creaseAngle) {
-      const faces = [];
-      const vertexNormals = {};
-      for (let i = 0, l = index.length; i < l; i += 3) {
-        const a = index[i];
-        const b = index[i + 1];
-        const c = index[i + 2];
-        const face = new VRMLLoader_Face(a, b, c);
-        vA.fromArray(coord, a * 3);
-        vB.fromArray(coord, b * 3);
-        vC.fromArray(coord, c * 3);
-        cb.subVectors(vC, vB);
-        ab.subVectors(vA, vB);
-        cb.cross(ab);
-        cb.normalize();
-        face.normal.copy(cb);
-        if (vertexNormals[a] === void 0)
-          vertexNormals[a] = [];
-        if (vertexNormals[b] === void 0)
-          vertexNormals[b] = [];
-        if (vertexNormals[c] === void 0)
-          vertexNormals[c] = [];
-        vertexNormals[a].push(face.normal);
-        vertexNormals[b].push(face.normal);
-        vertexNormals[c].push(face.normal);
-        faces.push(face);
-      }
-      const normals = [];
-      for (let i = 0, l = faces.length; i < l; i++) {
-        const face = faces[i];
-        const nA = weightedNormal(vertexNormals[face.a], face.normal, creaseAngle);
-        const nB = weightedNormal(vertexNormals[face.b], face.normal, creaseAngle);
-        const nC = weightedNormal(vertexNormals[face.c], face.normal, creaseAngle);
-        vA.fromArray(coord, face.a * 3);
-        vB.fromArray(coord, face.b * 3);
-        vC.fromArray(coord, face.c * 3);
-        normals.push(nA.x, nA.y, nA.z);
-        normals.push(nB.x, nB.y, nB.z);
-        normals.push(nC.x, nC.y, nC.z);
-      }
-      return new three_module.Float32BufferAttribute(normals, 3);
-    }
-    function weightedNormal(normals, vector, creaseAngle) {
-      const normal = new three_module.Vector3();
-      if (creaseAngle === 0) {
-        normal.copy(vector);
-      } else {
-        for (let i = 0, l = normals.length; i < l; i++) {
-          if (normals[i].angleTo(vector) < creaseAngle) {
-            normal.add(normals[i]);
-          }
-        }
-      }
-      return normal.normalize();
-    }
-    function toColorArray(colors) {
-      const array = [];
-      for (let i = 0, l = colors.length; i < l; i += 3) {
-        array.push(new three_module.Color(colors[i], colors[i + 1], colors[i + 2]));
-      }
-      return array;
-    }
-    function paintFaces(geometry, radius, angles, colors, topDown) {
-      const thresholds = [];
-      const startAngle = topDown === true ? 0 : Math.PI;
-      for (let i = 0, l = colors.length; i < l; i++) {
-        let angle = i === 0 ? 0 : angles[i - 1];
-        angle = topDown === true ? angle : startAngle - angle;
-        const point = new three_module.Vector3();
-        point.setFromSphericalCoords(radius, angle, 0);
-        thresholds.push(point);
-      }
-      const indices = geometry.index;
-      const positionAttribute = geometry.attributes.position;
-      const colorAttribute = new three_module.BufferAttribute(new Float32Array(geometry.attributes.position.count * 3), 3);
-      const position = new three_module.Vector3();
-      const color = new three_module.Color();
-      for (let i = 0; i < indices.count; i++) {
-        const index = indices.getX(i);
-        position.fromBufferAttribute(positionAttribute, index);
-        let thresholdIndexA, thresholdIndexB;
-        let t = 1;
-        for (let j = 1; j < thresholds.length; j++) {
-          thresholdIndexA = j - 1;
-          thresholdIndexB = j;
-          const thresholdA = thresholds[thresholdIndexA];
-          const thresholdB = thresholds[thresholdIndexB];
-          if (topDown === true) {
-            if (position.y <= thresholdA.y && position.y > thresholdB.y) {
-              t = Math.abs(thresholdA.y - position.y) / Math.abs(thresholdA.y - thresholdB.y);
-              break;
-            }
-          } else {
-            if (position.y >= thresholdA.y && position.y < thresholdB.y) {
-              t = Math.abs(thresholdA.y - position.y) / Math.abs(thresholdA.y - thresholdB.y);
-              break;
-            }
-          }
-        }
-        const colorA = colors[thresholdIndexA];
-        const colorB = colors[thresholdIndexB];
-        color.copy(colorA).lerp(colorB, t);
-        colorAttribute.setXYZ(index, color.r, color.g, color.b);
-      }
-      geometry.setAttribute("color", colorAttribute);
-    }
-    const textureLoader = new three_module.TextureLoader(this.manager);
-    textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);
-    if (data.indexOf("#VRML V2.0") === -1) {
-      throw Error("THREE.VRMLLexer: Version of VRML asset not supported.");
-    }
-    const tree = generateVRMLTree(data);
-    const scene = parseTree(tree);
-    return scene;
-  }
-}
-class VRMLLexer {
-  constructor(tokens) {
-    this.lexer = new Lexer(tokens);
-  }
-  lex(inputText) {
-    const lexingResult = this.lexer.tokenize(inputText);
-    if (lexingResult.errors.length > 0) {
-      console.error(lexingResult.errors);
-      throw Error("THREE.VRMLLexer: Lexing errors detected.");
-    }
-    return lexingResult;
-  }
-}
-class VRMLParser extends CstParser {
-  constructor(tokenVocabulary) {
-    super(tokenVocabulary);
-    const $ = this;
-    const Version = tokenVocabulary["Version"];
-    const LCurly = tokenVocabulary["LCurly"];
-    const RCurly = tokenVocabulary["RCurly"];
-    const LSquare = tokenVocabulary["LSquare"];
-    const RSquare = tokenVocabulary["RSquare"];
-    const Identifier = tokenVocabulary["Identifier"];
-    const RouteIdentifier = tokenVocabulary["RouteIdentifier"];
-    const StringLiteral = tokenVocabulary["StringLiteral"];
-    const HexLiteral = tokenVocabulary["HexLiteral"];
-    const NumberLiteral = tokenVocabulary["NumberLiteral"];
-    const TrueLiteral = tokenVocabulary["TrueLiteral"];
-    const FalseLiteral = tokenVocabulary["FalseLiteral"];
-    const NullLiteral = tokenVocabulary["NullLiteral"];
-    const DEF = tokenVocabulary["DEF"];
-    const USE = tokenVocabulary["USE"];
-    const ROUTE = tokenVocabulary["ROUTE"];
-    const TO = tokenVocabulary["TO"];
-    const NodeName = tokenVocabulary["NodeName"];
-    $.RULE("vrml", function() {
-      $.SUBRULE($.version);
-      $.AT_LEAST_ONE(function() {
-        $.SUBRULE($.node);
-      });
-      $.MANY(function() {
-        $.SUBRULE($.route);
-      });
-    });
-    $.RULE("version", function() {
-      $.CONSUME(Version);
-    });
-    $.RULE("node", function() {
-      $.OPTION(function() {
-        $.SUBRULE($.def);
-      });
-      $.CONSUME(NodeName);
-      $.CONSUME(LCurly);
-      $.MANY(function() {
-        $.SUBRULE($.field);
-      });
-      $.CONSUME(RCurly);
-    });
-    $.RULE("field", function() {
-      $.CONSUME(Identifier);
-      $.OR2([
-        {
-          ALT: function() {
-            $.SUBRULE($.singleFieldValue);
-          }
-        },
-        {
-          ALT: function() {
-            $.SUBRULE($.multiFieldValue);
-          }
-        }
-      ]);
-    });
-    $.RULE("def", function() {
-      $.CONSUME(DEF);
-      $.OR([
-        {
-          ALT: function() {
-            $.CONSUME(Identifier);
-          }
-        },
-        {
-          ALT: function() {
-            $.CONSUME(NodeName);
-          }
-        }
-      ]);
-    });
-    $.RULE("use", function() {
-      $.CONSUME(USE);
-      $.OR([
-        {
-          ALT: function() {
-            $.CONSUME(Identifier);
-          }
-        },
-        {
-          ALT: function() {
-            $.CONSUME(NodeName);
-          }
-        }
-      ]);
-    });
-    $.RULE("singleFieldValue", function() {
-      $.AT_LEAST_ONE(function() {
-        $.OR([
-          {
-            ALT: function() {
-              $.SUBRULE($.node);
-            }
-          },
-          {
-            ALT: function() {
-              $.SUBRULE($.use);
-            }
-          },
-          {
-            ALT: function() {
-              $.CONSUME(StringLiteral);
-            }
-          },
-          {
-            ALT: function() {
-              $.CONSUME(HexLiteral);
-            }
-          },
-          {
-            ALT: function() {
-              $.CONSUME(NumberLiteral);
-            }
-          },
-          {
-            ALT: function() {
-              $.CONSUME(TrueLiteral);
-            }
-          },
-          {
-            ALT: function() {
-              $.CONSUME(FalseLiteral);
-            }
-          },
-          {
-            ALT: function() {
-              $.CONSUME(NullLiteral);
-            }
-          }
-        ]);
-      });
-    });
-    $.RULE("multiFieldValue", function() {
-      $.CONSUME(LSquare);
-      $.MANY(function() {
-        $.OR([
-          {
-            ALT: function() {
-              $.SUBRULE($.node);
-            }
-          },
-          {
-            ALT: function() {
-              $.SUBRULE($.use);
-            }
-          },
-          {
-            ALT: function() {
-              $.CONSUME(StringLiteral);
-            }
-          },
-          {
-            ALT: function() {
-              $.CONSUME(HexLiteral);
-            }
-          },
-          {
-            ALT: function() {
-              $.CONSUME(NumberLiteral);
-            }
-          },
-          {
-            ALT: function() {
-              $.CONSUME(NullLiteral);
-            }
-          }
-        ]);
-      });
-      $.CONSUME(RSquare);
-    });
-    $.RULE("route", function() {
-      $.CONSUME(ROUTE);
-      $.CONSUME(RouteIdentifier);
-      $.CONSUME(TO);
-      $.CONSUME2(RouteIdentifier);
-    });
-    this.performSelfAnalysis();
-  }
-}
-class VRMLLoader_Face {
-  constructor(a, b, c) {
-    this.a = a;
-    this.b = b;
-    this.c = c;
-    this.normal = new three_module.Vector3();
-  }
-}
-const TEXTURE_TYPE = {
-  INTENSITY: 1,
-  INTENSITY_ALPHA: 2,
-  RGB: 3,
-  RGBA: 4
-};
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/loaders/KTX2Loader.js + 4 modules
-var KTX2Loader = __webpack_require__(28934);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/LottieLoader.js
-
-class LottieLoader extends three_module.Loader {
-  setQuality(value) {
-    this._quality = value;
-  }
-  load(url, onLoad, onProgress, onError) {
-    const quality = this._quality || 1;
-    const texture = new three_module.CanvasTexture();
-    texture.minFilter = three_module.NearestFilter;
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setWithCredentials(this.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        const data = JSON.parse(text);
-        const container = document.createElement("div");
-        container.style.width = data.w + "px";
-        container.style.height = data.h + "px";
-        document.body.appendChild(container);
-        const animation = bodymovin.loadAnimation({
-          container,
-          animType: "canvas",
-          loop: true,
-          autoplay: true,
-          animationData: data,
-          rendererSettings: { dpr: quality }
-        });
-        texture.animation = animation;
-        texture.image = animation.container;
-        animation.addEventListener("enterFrame", function() {
-          texture.needsUpdate = true;
-        });
-        container.style.display = "none";
-        if (onLoad !== void 0) {
-          onLoad(texture);
-        }
-      },
-      onProgress,
-      onError
-    );
-    return texture;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/opentype.js/dist/opentype.module.js
-/**
- * https://opentype.js.org v1.3.4 | (c) Frederik De Bleser and other contributors | MIT License | Uses tiny-inflate by Devon Govett and string.prototype.codepointat polyfill by Mathias Bynens
- */
-
-/*! https://mths.be/codepointat v0.2.0 by @mathias */
-if (!String.prototype.codePointAt) {
-	(function() {
-		var defineProperty = (function() {
-			// IE 8 only supports `Object.defineProperty` on DOM elements
-			try {
-				var object = {};
-				var $defineProperty = Object.defineProperty;
-				var result = $defineProperty(object, object, object) && $defineProperty;
-			} catch(error) {}
-			return result;
-		}());
-		var codePointAt = function(position) {
-			if (this == null) {
-				throw TypeError();
-			}
-			var string = String(this);
-			var size = string.length;
-			// `ToInteger`
-			var index = position ? Number(position) : 0;
-			if (index != index) { // better `isNaN`
-				index = 0;
-			}
-			// Account for out-of-bounds indices:
-			if (index < 0 || index >= size) {
-				return undefined;
-			}
-			// Get the first code unit
-			var first = string.charCodeAt(index);
-			var second;
-			if ( // check if it’s the start of a surrogate pair
-				first >= 0xD800 && first <= 0xDBFF && // high surrogate
-				size > index + 1 // there is a next code unit
-			) {
-				second = string.charCodeAt(index + 1);
-				if (second >= 0xDC00 && second <= 0xDFFF) { // low surrogate
-					// https://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
-					return (first - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;
-				}
-			}
-			return first;
-		};
-		if (defineProperty) {
-			defineProperty(String.prototype, 'codePointAt', {
-				'value': codePointAt,
-				'configurable': true,
-				'writable': true
-			});
-		} else {
-			String.prototype.codePointAt = codePointAt;
-		}
-	}());
-}
-
-var TINF_OK = 0;
-var TINF_DATA_ERROR = -3;
-
-function Tree() {
-  this.table = new Uint16Array(16);   /* table of code length counts */
-  this.trans = new Uint16Array(288);  /* code -> symbol translation table */
-}
-
-function Data(source, dest) {
-  this.source = source;
-  this.sourceIndex = 0;
-  this.tag = 0;
-  this.bitcount = 0;
-  
-  this.dest = dest;
-  this.destLen = 0;
-  
-  this.ltree = new Tree();  /* dynamic length/symbol tree */
-  this.dtree = new Tree();  /* dynamic distance tree */
-}
-
-/* --------------------------------------------------- *
- * -- uninitialized global data (static structures) -- *
- * --------------------------------------------------- */
-
-var sltree = new Tree();
-var sdtree = new Tree();
-
-/* extra bits and base tables for length codes */
-var length_bits = new Uint8Array(30);
-var length_base = new Uint16Array(30);
-
-/* extra bits and base tables for distance codes */
-var dist_bits = new Uint8Array(30);
-var dist_base = new Uint16Array(30);
-
-/* special ordering of code length codes */
-var clcidx = new Uint8Array([
-  16, 17, 18, 0, 8, 7, 9, 6,
-  10, 5, 11, 4, 12, 3, 13, 2,
-  14, 1, 15
-]);
-
-/* used by tinf_decode_trees, avoids allocations every call */
-var code_tree = new Tree();
-var lengths = new Uint8Array(288 + 32);
-
-/* ----------------------- *
- * -- utility functions -- *
- * ----------------------- */
-
-/* build extra bits and base tables */
-function tinf_build_bits_base(bits, base, delta, first) {
-  var i, sum;
-
-  /* build bits table */
-  for (i = 0; i < delta; ++i) { bits[i] = 0; }
-  for (i = 0; i < 30 - delta; ++i) { bits[i + delta] = i / delta | 0; }
-
-  /* build base table */
-  for (sum = first, i = 0; i < 30; ++i) {
-    base[i] = sum;
-    sum += 1 << bits[i];
-  }
-}
-
-/* build the fixed huffman trees */
-function tinf_build_fixed_trees(lt, dt) {
-  var i;
-
-  /* build fixed length tree */
-  for (i = 0; i < 7; ++i) { lt.table[i] = 0; }
-
-  lt.table[7] = 24;
-  lt.table[8] = 152;
-  lt.table[9] = 112;
-
-  for (i = 0; i < 24; ++i) { lt.trans[i] = 256 + i; }
-  for (i = 0; i < 144; ++i) { lt.trans[24 + i] = i; }
-  for (i = 0; i < 8; ++i) { lt.trans[24 + 144 + i] = 280 + i; }
-  for (i = 0; i < 112; ++i) { lt.trans[24 + 144 + 8 + i] = 144 + i; }
-
-  /* build fixed distance tree */
-  for (i = 0; i < 5; ++i) { dt.table[i] = 0; }
-
-  dt.table[5] = 32;
-
-  for (i = 0; i < 32; ++i) { dt.trans[i] = i; }
-}
-
-/* given an array of code lengths, build a tree */
-var offs = new Uint16Array(16);
-
-function tinf_build_tree(t, lengths, off, num) {
-  var i, sum;
-
-  /* clear code length count table */
-  for (i = 0; i < 16; ++i) { t.table[i] = 0; }
-
-  /* scan symbol lengths, and sum code length counts */
-  for (i = 0; i < num; ++i) { t.table[lengths[off + i]]++; }
-
-  t.table[0] = 0;
-
-  /* compute offset table for distribution sort */
-  for (sum = 0, i = 0; i < 16; ++i) {
-    offs[i] = sum;
-    sum += t.table[i];
-  }
-
-  /* create code->symbol translation table (symbols sorted by code) */
-  for (i = 0; i < num; ++i) {
-    if (lengths[off + i]) { t.trans[offs[lengths[off + i]]++] = i; }
-  }
-}
-
-/* ---------------------- *
- * -- decode functions -- *
- * ---------------------- */
-
-/* get one bit from source stream */
-function tinf_getbit(d) {
-  /* check if tag is empty */
-  if (!d.bitcount--) {
-    /* load next tag */
-    d.tag = d.source[d.sourceIndex++];
-    d.bitcount = 7;
-  }
-
-  /* shift bit out of tag */
-  var bit = d.tag & 1;
-  d.tag >>>= 1;
-
-  return bit;
-}
-
-/* read a num bit value from a stream and add base */
-function tinf_read_bits(d, num, base) {
-  if (!num)
-    { return base; }
-
-  while (d.bitcount < 24) {
-    d.tag |= d.source[d.sourceIndex++] << d.bitcount;
-    d.bitcount += 8;
-  }
-
-  var val = d.tag & (0xffff >>> (16 - num));
-  d.tag >>>= num;
-  d.bitcount -= num;
-  return val + base;
-}
-
-/* given a data stream and a tree, decode a symbol */
-function tinf_decode_symbol(d, t) {
-  while (d.bitcount < 24) {
-    d.tag |= d.source[d.sourceIndex++] << d.bitcount;
-    d.bitcount += 8;
-  }
-  
-  var sum = 0, cur = 0, len = 0;
-  var tag = d.tag;
-
-  /* get more bits while code value is above sum */
-  do {
-    cur = 2 * cur + (tag & 1);
-    tag >>>= 1;
-    ++len;
-
-    sum += t.table[len];
-    cur -= t.table[len];
-  } while (cur >= 0);
-  
-  d.tag = tag;
-  d.bitcount -= len;
-
-  return t.trans[sum + cur];
-}
-
-/* given a data stream, decode dynamic trees from it */
-function tinf_decode_trees(d, lt, dt) {
-  var hlit, hdist, hclen;
-  var i, num, length;
-
-  /* get 5 bits HLIT (257-286) */
-  hlit = tinf_read_bits(d, 5, 257);
-
-  /* get 5 bits HDIST (1-32) */
-  hdist = tinf_read_bits(d, 5, 1);
-
-  /* get 4 bits HCLEN (4-19) */
-  hclen = tinf_read_bits(d, 4, 4);
-
-  for (i = 0; i < 19; ++i) { lengths[i] = 0; }
-
-  /* read code lengths for code length alphabet */
-  for (i = 0; i < hclen; ++i) {
-    /* get 3 bits code length (0-7) */
-    var clen = tinf_read_bits(d, 3, 0);
-    lengths[clcidx[i]] = clen;
-  }
-
-  /* build code length tree */
-  tinf_build_tree(code_tree, lengths, 0, 19);
-
-  /* decode code lengths for the dynamic trees */
-  for (num = 0; num < hlit + hdist;) {
-    var sym = tinf_decode_symbol(d, code_tree);
-
-    switch (sym) {
-      case 16:
-        /* copy previous code length 3-6 times (read 2 bits) */
-        var prev = lengths[num - 1];
-        for (length = tinf_read_bits(d, 2, 3); length; --length) {
-          lengths[num++] = prev;
-        }
-        break;
-      case 17:
-        /* repeat code length 0 for 3-10 times (read 3 bits) */
-        for (length = tinf_read_bits(d, 3, 3); length; --length) {
-          lengths[num++] = 0;
-        }
-        break;
-      case 18:
-        /* repeat code length 0 for 11-138 times (read 7 bits) */
-        for (length = tinf_read_bits(d, 7, 11); length; --length) {
-          lengths[num++] = 0;
-        }
-        break;
-      default:
-        /* values 0-15 represent the actual code lengths */
-        lengths[num++] = sym;
-        break;
-    }
-  }
-
-  /* build dynamic trees */
-  tinf_build_tree(lt, lengths, 0, hlit);
-  tinf_build_tree(dt, lengths, hlit, hdist);
-}
-
-/* ----------------------------- *
- * -- block inflate functions -- *
- * ----------------------------- */
-
-/* given a stream and two trees, inflate a block of data */
-function tinf_inflate_block_data(d, lt, dt) {
-  while (1) {
-    var sym = tinf_decode_symbol(d, lt);
-
-    /* check for end of block */
-    if (sym === 256) {
-      return TINF_OK;
-    }
-
-    if (sym < 256) {
-      d.dest[d.destLen++] = sym;
-    } else {
-      var length, dist, offs;
-      var i;
-
-      sym -= 257;
-
-      /* possibly get more bits from length code */
-      length = tinf_read_bits(d, length_bits[sym], length_base[sym]);
-
-      dist = tinf_decode_symbol(d, dt);
-
-      /* possibly get more bits from distance code */
-      offs = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);
-
-      /* copy match */
-      for (i = offs; i < offs + length; ++i) {
-        d.dest[d.destLen++] = d.dest[i];
-      }
-    }
-  }
-}
-
-/* inflate an uncompressed block of data */
-function tinf_inflate_uncompressed_block(d) {
-  var length, invlength;
-  var i;
-  
-  /* unread from bitbuffer */
-  while (d.bitcount > 8) {
-    d.sourceIndex--;
-    d.bitcount -= 8;
-  }
-
-  /* get length */
-  length = d.source[d.sourceIndex + 1];
-  length = 256 * length + d.source[d.sourceIndex];
-
-  /* get one's complement of length */
-  invlength = d.source[d.sourceIndex + 3];
-  invlength = 256 * invlength + d.source[d.sourceIndex + 2];
-
-  /* check length */
-  if (length !== (~invlength & 0x0000ffff))
-    { return TINF_DATA_ERROR; }
-
-  d.sourceIndex += 4;
-
-  /* copy block */
-  for (i = length; i; --i)
-    { d.dest[d.destLen++] = d.source[d.sourceIndex++]; }
-
-  /* make sure we start next block on a byte boundary */
-  d.bitcount = 0;
-
-  return TINF_OK;
-}
-
-/* inflate stream from source to dest */
-function tinf_uncompress(source, dest) {
-  var d = new Data(source, dest);
-  var bfinal, btype, res;
-
-  do {
-    /* read final block flag */
-    bfinal = tinf_getbit(d);
-
-    /* read block type (2 bits) */
-    btype = tinf_read_bits(d, 2, 0);
-
-    /* decompress block */
-    switch (btype) {
-      case 0:
-        /* decompress uncompressed block */
-        res = tinf_inflate_uncompressed_block(d);
-        break;
-      case 1:
-        /* decompress block with fixed huffman trees */
-        res = tinf_inflate_block_data(d, sltree, sdtree);
-        break;
-      case 2:
-        /* decompress block with dynamic huffman trees */
-        tinf_decode_trees(d, d.ltree, d.dtree);
-        res = tinf_inflate_block_data(d, d.ltree, d.dtree);
-        break;
-      default:
-        res = TINF_DATA_ERROR;
-    }
-
-    if (res !== TINF_OK)
-      { throw new Error('Data error'); }
-
-  } while (!bfinal);
-
-  if (d.destLen < d.dest.length) {
-    if (typeof d.dest.slice === 'function')
-      { return d.dest.slice(0, d.destLen); }
-    else
-      { return d.dest.subarray(0, d.destLen); }
-  }
-  
-  return d.dest;
-}
-
-/* -------------------- *
- * -- initialization -- *
- * -------------------- */
-
-/* build fixed huffman trees */
-tinf_build_fixed_trees(sltree, sdtree);
-
-/* build extra bits and base tables */
-tinf_build_bits_base(length_bits, length_base, 4, 3);
-tinf_build_bits_base(dist_bits, dist_base, 2, 1);
-
-/* fix a special case */
-length_bits[28] = 0;
-length_base[28] = 258;
-
-var tinyInflate = tinf_uncompress;
-
-// The Bounding Box object
-
-function derive(v0, v1, v2, v3, t) {
-    return Math.pow(1 - t, 3) * v0 +
-        3 * Math.pow(1 - t, 2) * t * v1 +
-        3 * (1 - t) * Math.pow(t, 2) * v2 +
-        Math.pow(t, 3) * v3;
-}
-/**
- * A bounding box is an enclosing box that describes the smallest measure within which all the points lie.
- * It is used to calculate the bounding box of a glyph or text path.
- *
- * On initialization, x1/y1/x2/y2 will be NaN. Check if the bounding box is empty using `isEmpty()`.
- *
- * @exports opentype.BoundingBox
- * @class
- * @constructor
- */
-function BoundingBox() {
-    this.x1 = Number.NaN;
-    this.y1 = Number.NaN;
-    this.x2 = Number.NaN;
-    this.y2 = Number.NaN;
-}
-
-/**
- * Returns true if the bounding box is empty, that is, no points have been added to the box yet.
- */
-BoundingBox.prototype.isEmpty = function() {
-    return isNaN(this.x1) || isNaN(this.y1) || isNaN(this.x2) || isNaN(this.y2);
-};
-
-/**
- * Add the point to the bounding box.
- * The x1/y1/x2/y2 coordinates of the bounding box will now encompass the given point.
- * @param {number} x - The X coordinate of the point.
- * @param {number} y - The Y coordinate of the point.
- */
-BoundingBox.prototype.addPoint = function(x, y) {
-    if (typeof x === 'number') {
-        if (isNaN(this.x1) || isNaN(this.x2)) {
-            this.x1 = x;
-            this.x2 = x;
-        }
-        if (x < this.x1) {
-            this.x1 = x;
-        }
-        if (x > this.x2) {
-            this.x2 = x;
-        }
-    }
-    if (typeof y === 'number') {
-        if (isNaN(this.y1) || isNaN(this.y2)) {
-            this.y1 = y;
-            this.y2 = y;
-        }
-        if (y < this.y1) {
-            this.y1 = y;
-        }
-        if (y > this.y2) {
-            this.y2 = y;
-        }
-    }
-};
-
-/**
- * Add a X coordinate to the bounding box.
- * This extends the bounding box to include the X coordinate.
- * This function is used internally inside of addBezier.
- * @param {number} x - The X coordinate of the point.
- */
-BoundingBox.prototype.addX = function(x) {
-    this.addPoint(x, null);
-};
-
-/**
- * Add a Y coordinate to the bounding box.
- * This extends the bounding box to include the Y coordinate.
- * This function is used internally inside of addBezier.
- * @param {number} y - The Y coordinate of the point.
- */
-BoundingBox.prototype.addY = function(y) {
-    this.addPoint(null, y);
-};
-
-/**
- * Add a Bézier curve to the bounding box.
- * This extends the bounding box to include the entire Bézier.
- * @param {number} x0 - The starting X coordinate.
- * @param {number} y0 - The starting Y coordinate.
- * @param {number} x1 - The X coordinate of the first control point.
- * @param {number} y1 - The Y coordinate of the first control point.
- * @param {number} x2 - The X coordinate of the second control point.
- * @param {number} y2 - The Y coordinate of the second control point.
- * @param {number} x - The ending X coordinate.
- * @param {number} y - The ending Y coordinate.
- */
-BoundingBox.prototype.addBezier = function(x0, y0, x1, y1, x2, y2, x, y) {
-    // This code is based on http://nishiohirokazu.blogspot.com/2009/06/how-to-calculate-bezier-curves-bounding.html
-    // and https://github.com/icons8/svg-path-bounding-box
-
-    var p0 = [x0, y0];
-    var p1 = [x1, y1];
-    var p2 = [x2, y2];
-    var p3 = [x, y];
-
-    this.addPoint(x0, y0);
-    this.addPoint(x, y);
-
-    for (var i = 0; i <= 1; i++) {
-        var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];
-        var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];
-        var c = 3 * p1[i] - 3 * p0[i];
-
-        if (a === 0) {
-            if (b === 0) { continue; }
-            var t = -c / b;
-            if (0 < t && t < 1) {
-                if (i === 0) { this.addX(derive(p0[i], p1[i], p2[i], p3[i], t)); }
-                if (i === 1) { this.addY(derive(p0[i], p1[i], p2[i], p3[i], t)); }
-            }
-            continue;
-        }
-
-        var b2ac = Math.pow(b, 2) - 4 * c * a;
-        if (b2ac < 0) { continue; }
-        var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);
-        if (0 < t1 && t1 < 1) {
-            if (i === 0) { this.addX(derive(p0[i], p1[i], p2[i], p3[i], t1)); }
-            if (i === 1) { this.addY(derive(p0[i], p1[i], p2[i], p3[i], t1)); }
-        }
-        var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);
-        if (0 < t2 && t2 < 1) {
-            if (i === 0) { this.addX(derive(p0[i], p1[i], p2[i], p3[i], t2)); }
-            if (i === 1) { this.addY(derive(p0[i], p1[i], p2[i], p3[i], t2)); }
-        }
-    }
-};
-
-/**
- * Add a quadratic curve to the bounding box.
- * This extends the bounding box to include the entire quadratic curve.
- * @param {number} x0 - The starting X coordinate.
- * @param {number} y0 - The starting Y coordinate.
- * @param {number} x1 - The X coordinate of the control point.
- * @param {number} y1 - The Y coordinate of the control point.
- * @param {number} x - The ending X coordinate.
- * @param {number} y - The ending Y coordinate.
- */
-BoundingBox.prototype.addQuad = function(x0, y0, x1, y1, x, y) {
-    var cp1x = x0 + 2 / 3 * (x1 - x0);
-    var cp1y = y0 + 2 / 3 * (y1 - y0);
-    var cp2x = cp1x + 1 / 3 * (x - x0);
-    var cp2y = cp1y + 1 / 3 * (y - y0);
-    this.addBezier(x0, y0, cp1x, cp1y, cp2x, cp2y, x, y);
-};
-
-// Geometric objects
-
-/**
- * A bézier path containing a set of path commands similar to a SVG path.
- * Paths can be drawn on a context using `draw`.
- * @exports opentype.Path
- * @class
- * @constructor
- */
-function Path() {
-    this.commands = [];
-    this.fill = 'black';
-    this.stroke = null;
-    this.strokeWidth = 1;
-}
-
-/**
- * @param  {number} x
- * @param  {number} y
- */
-Path.prototype.moveTo = function(x, y) {
-    this.commands.push({
-        type: 'M',
-        x: x,
-        y: y
-    });
-};
-
-/**
- * @param  {number} x
- * @param  {number} y
- */
-Path.prototype.lineTo = function(x, y) {
-    this.commands.push({
-        type: 'L',
-        x: x,
-        y: y
-    });
-};
-
-/**
- * Draws cubic curve
- * @function
- * curveTo
- * @memberof opentype.Path.prototype
- * @param  {number} x1 - x of control 1
- * @param  {number} y1 - y of control 1
- * @param  {number} x2 - x of control 2
- * @param  {number} y2 - y of control 2
- * @param  {number} x - x of path point
- * @param  {number} y - y of path point
- */
-
-/**
- * Draws cubic curve
- * @function
- * bezierCurveTo
- * @memberof opentype.Path.prototype
- * @param  {number} x1 - x of control 1
- * @param  {number} y1 - y of control 1
- * @param  {number} x2 - x of control 2
- * @param  {number} y2 - y of control 2
- * @param  {number} x - x of path point
- * @param  {number} y - y of path point
- * @see curveTo
- */
-Path.prototype.curveTo = Path.prototype.bezierCurveTo = function(x1, y1, x2, y2, x, y) {
-    this.commands.push({
-        type: 'C',
-        x1: x1,
-        y1: y1,
-        x2: x2,
-        y2: y2,
-        x: x,
-        y: y
-    });
-};
-
-/**
- * Draws quadratic curve
- * @function
- * quadraticCurveTo
- * @memberof opentype.Path.prototype
- * @param  {number} x1 - x of control
- * @param  {number} y1 - y of control
- * @param  {number} x - x of path point
- * @param  {number} y - y of path point
- */
-
-/**
- * Draws quadratic curve
- * @function
- * quadTo
- * @memberof opentype.Path.prototype
- * @param  {number} x1 - x of control
- * @param  {number} y1 - y of control
- * @param  {number} x - x of path point
- * @param  {number} y - y of path point
- */
-Path.prototype.quadTo = Path.prototype.quadraticCurveTo = function(x1, y1, x, y) {
-    this.commands.push({
-        type: 'Q',
-        x1: x1,
-        y1: y1,
-        x: x,
-        y: y
-    });
-};
-
-/**
- * Closes the path
- * @function closePath
- * @memberof opentype.Path.prototype
- */
-
-/**
- * Close the path
- * @function close
- * @memberof opentype.Path.prototype
- */
-Path.prototype.close = Path.prototype.closePath = function() {
-    this.commands.push({
-        type: 'Z'
-    });
-};
-
-/**
- * Add the given path or list of commands to the commands of this path.
- * @param  {Array} pathOrCommands - another opentype.Path, an opentype.BoundingBox, or an array of commands.
- */
-Path.prototype.extend = function(pathOrCommands) {
-    if (pathOrCommands.commands) {
-        pathOrCommands = pathOrCommands.commands;
-    } else if (pathOrCommands instanceof BoundingBox) {
-        var box = pathOrCommands;
-        this.moveTo(box.x1, box.y1);
-        this.lineTo(box.x2, box.y1);
-        this.lineTo(box.x2, box.y2);
-        this.lineTo(box.x1, box.y2);
-        this.close();
-        return;
-    }
-
-    Array.prototype.push.apply(this.commands, pathOrCommands);
-};
-
-/**
- * Calculate the bounding box of the path.
- * @returns {opentype.BoundingBox}
- */
-Path.prototype.getBoundingBox = function() {
-    var box = new BoundingBox();
-
-    var startX = 0;
-    var startY = 0;
-    var prevX = 0;
-    var prevY = 0;
-    for (var i = 0; i < this.commands.length; i++) {
-        var cmd = this.commands[i];
-        switch (cmd.type) {
-            case 'M':
-                box.addPoint(cmd.x, cmd.y);
-                startX = prevX = cmd.x;
-                startY = prevY = cmd.y;
-                break;
-            case 'L':
-                box.addPoint(cmd.x, cmd.y);
-                prevX = cmd.x;
-                prevY = cmd.y;
-                break;
-            case 'Q':
-                box.addQuad(prevX, prevY, cmd.x1, cmd.y1, cmd.x, cmd.y);
-                prevX = cmd.x;
-                prevY = cmd.y;
-                break;
-            case 'C':
-                box.addBezier(prevX, prevY, cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);
-                prevX = cmd.x;
-                prevY = cmd.y;
-                break;
-            case 'Z':
-                prevX = startX;
-                prevY = startY;
-                break;
-            default:
-                throw new Error('Unexpected path command ' + cmd.type);
-        }
-    }
-    if (box.isEmpty()) {
-        box.addPoint(0, 0);
-    }
-    return box;
-};
-
-/**
- * Draw the path to a 2D context.
- * @param {CanvasRenderingContext2D} ctx - A 2D drawing context.
- */
-Path.prototype.draw = function(ctx) {
-    ctx.beginPath();
-    for (var i = 0; i < this.commands.length; i += 1) {
-        var cmd = this.commands[i];
-        if (cmd.type === 'M') {
-            ctx.moveTo(cmd.x, cmd.y);
-        } else if (cmd.type === 'L') {
-            ctx.lineTo(cmd.x, cmd.y);
-        } else if (cmd.type === 'C') {
-            ctx.bezierCurveTo(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);
-        } else if (cmd.type === 'Q') {
-            ctx.quadraticCurveTo(cmd.x1, cmd.y1, cmd.x, cmd.y);
-        } else if (cmd.type === 'Z') {
-            ctx.closePath();
-        }
-    }
-
-    if (this.fill) {
-        ctx.fillStyle = this.fill;
-        ctx.fill();
-    }
-
-    if (this.stroke) {
-        ctx.strokeStyle = this.stroke;
-        ctx.lineWidth = this.strokeWidth;
-        ctx.stroke();
-    }
-};
-
-/**
- * Convert the Path to a string of path data instructions
- * See http://www.w3.org/TR/SVG/paths.html#PathData
- * @param  {number} [decimalPlaces=2] - The amount of decimal places for floating-point values
- * @return {string}
- */
-Path.prototype.toPathData = function(decimalPlaces) {
-    decimalPlaces = decimalPlaces !== undefined ? decimalPlaces : 2;
-
-    function floatToString(v) {
-        if (Math.round(v) === v) {
-            return '' + Math.round(v);
-        } else {
-            return v.toFixed(decimalPlaces);
-        }
-    }
-
-    function packValues() {
-        var arguments$1 = arguments;
-
-        var s = '';
-        for (var i = 0; i < arguments.length; i += 1) {
-            var v = arguments$1[i];
-            if (v >= 0 && i > 0) {
-                s += ' ';
-            }
-
-            s += floatToString(v);
-        }
-
-        return s;
-    }
-
-    var d = '';
-    for (var i = 0; i < this.commands.length; i += 1) {
-        var cmd = this.commands[i];
-        if (cmd.type === 'M') {
-            d += 'M' + packValues(cmd.x, cmd.y);
-        } else if (cmd.type === 'L') {
-            d += 'L' + packValues(cmd.x, cmd.y);
-        } else if (cmd.type === 'C') {
-            d += 'C' + packValues(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);
-        } else if (cmd.type === 'Q') {
-            d += 'Q' + packValues(cmd.x1, cmd.y1, cmd.x, cmd.y);
-        } else if (cmd.type === 'Z') {
-            d += 'Z';
-        }
-    }
-
-    return d;
-};
-
-/**
- * Convert the path to an SVG <path> element, as a string.
- * @param  {number} [decimalPlaces=2] - The amount of decimal places for floating-point values
- * @return {string}
- */
-Path.prototype.toSVG = function(decimalPlaces) {
-    var svg = '<path d="';
-    svg += this.toPathData(decimalPlaces);
-    svg += '"';
-    if (this.fill && this.fill !== 'black') {
-        if (this.fill === null) {
-            svg += ' fill="none"';
-        } else {
-            svg += ' fill="' + this.fill + '"';
-        }
-    }
-
-    if (this.stroke) {
-        svg += ' stroke="' + this.stroke + '" stroke-width="' + this.strokeWidth + '"';
-    }
-
-    svg += '/>';
-    return svg;
-};
-
-/**
- * Convert the path to a DOM element.
- * @param  {number} [decimalPlaces=2] - The amount of decimal places for floating-point values
- * @return {SVGPathElement}
- */
-Path.prototype.toDOMElement = function(decimalPlaces) {
-    var temporaryPath = this.toPathData(decimalPlaces);
-    var newPath = document.createElementNS('http://www.w3.org/2000/svg', 'path');
-
-    newPath.setAttribute('d', temporaryPath);
-
-    return newPath;
-};
-
-// Run-time checking of preconditions.
-
-function fail(message) {
-    throw new Error(message);
-}
-
-// Precondition function that checks if the given predicate is true.
-// If not, it will throw an error.
-function argument(predicate, message) {
-    if (!predicate) {
-        fail(message);
-    }
-}
-var check = { fail: fail, argument: argument, assert: argument };
-
-// Data types used in the OpenType font file.
-
-var LIMIT16 = 32768; // The limit at which a 16-bit number switches signs == 2^15
-var LIMIT32 = 2147483648; // The limit at which a 32-bit number switches signs == 2 ^ 31
-
-/**
- * @exports opentype.decode
- * @class
- */
-var decode = {};
-/**
- * @exports opentype.encode
- * @class
- */
-var encode = {};
-/**
- * @exports opentype.sizeOf
- * @class
- */
-var sizeOf = {};
-
-// Return a function that always returns the same value.
-function constant(v) {
-    return function() {
-        return v;
-    };
-}
-
-// OpenType data types //////////////////////////////////////////////////////
-
-/**
- * Convert an 8-bit unsigned integer to a list of 1 byte.
- * @param {number}
- * @returns {Array}
- */
-encode.BYTE = function(v) {
-    check.argument(v >= 0 && v <= 255, 'Byte value should be between 0 and 255.');
-    return [v];
-};
-/**
- * @constant
- * @type {number}
- */
-sizeOf.BYTE = constant(1);
-
-/**
- * Convert a 8-bit signed integer to a list of 1 byte.
- * @param {string}
- * @returns {Array}
- */
-encode.CHAR = function(v) {
-    return [v.charCodeAt(0)];
-};
-
-/**
- * @constant
- * @type {number}
- */
-sizeOf.CHAR = constant(1);
-
-/**
- * Convert an ASCII string to a list of bytes.
- * @param {string}
- * @returns {Array}
- */
-encode.CHARARRAY = function(v) {
-    if (typeof v === 'undefined') {
-        v = '';
-        console.warn('Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name.');
-    }
-    var b = [];
-    for (var i = 0; i < v.length; i += 1) {
-        b[i] = v.charCodeAt(i);
-    }
-
-    return b;
-};
-
-/**
- * @param {Array}
- * @returns {number}
- */
-sizeOf.CHARARRAY = function(v) {
-    if (typeof v === 'undefined') {
-        return 0;
-    }
-    return v.length;
-};
-
-/**
- * Convert a 16-bit unsigned integer to a list of 2 bytes.
- * @param {number}
- * @returns {Array}
- */
-encode.USHORT = function(v) {
-    return [(v >> 8) & 0xFF, v & 0xFF];
-};
-
-/**
- * @constant
- * @type {number}
- */
-sizeOf.USHORT = constant(2);
-
-/**
- * Convert a 16-bit signed integer to a list of 2 bytes.
- * @param {number}
- * @returns {Array}
- */
-encode.SHORT = function(v) {
-    // Two's complement
-    if (v >= LIMIT16) {
-        v = -(2 * LIMIT16 - v);
-    }
-
-    return [(v >> 8) & 0xFF, v & 0xFF];
-};
-
-/**
- * @constant
- * @type {number}
- */
-sizeOf.SHORT = constant(2);
-
-/**
- * Convert a 24-bit unsigned integer to a list of 3 bytes.
- * @param {number}
- * @returns {Array}
- */
-encode.UINT24 = function(v) {
-    return [(v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF];
-};
-
-/**
- * @constant
- * @type {number}
- */
-sizeOf.UINT24 = constant(3);
-
-/**
- * Convert a 32-bit unsigned integer to a list of 4 bytes.
- * @param {number}
- * @returns {Array}
- */
-encode.ULONG = function(v) {
-    return [(v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF];
-};
-
-/**
- * @constant
- * @type {number}
- */
-sizeOf.ULONG = constant(4);
-
-/**
- * Convert a 32-bit unsigned integer to a list of 4 bytes.
- * @param {number}
- * @returns {Array}
- */
-encode.LONG = function(v) {
-    // Two's complement
-    if (v >= LIMIT32) {
-        v = -(2 * LIMIT32 - v);
-    }
-
-    return [(v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF];
-};
-
-/**
- * @constant
- * @type {number}
- */
-sizeOf.LONG = constant(4);
-
-encode.FIXED = encode.ULONG;
-sizeOf.FIXED = sizeOf.ULONG;
-
-encode.FWORD = encode.SHORT;
-sizeOf.FWORD = sizeOf.SHORT;
-
-encode.UFWORD = encode.USHORT;
-sizeOf.UFWORD = sizeOf.USHORT;
-
-/**
- * Convert a 32-bit Apple Mac timestamp integer to a list of 8 bytes, 64-bit timestamp.
- * @param {number}
- * @returns {Array}
- */
-encode.LONGDATETIME = function(v) {
-    return [0, 0, 0, 0, (v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF];
-};
-
-/**
- * @constant
- * @type {number}
- */
-sizeOf.LONGDATETIME = constant(8);
-
-/**
- * Convert a 4-char tag to a list of 4 bytes.
- * @param {string}
- * @returns {Array}
- */
-encode.TAG = function(v) {
-    check.argument(v.length === 4, 'Tag should be exactly 4 ASCII characters.');
-    return [v.charCodeAt(0),
-            v.charCodeAt(1),
-            v.charCodeAt(2),
-            v.charCodeAt(3)];
-};
-
-/**
- * @constant
- * @type {number}
- */
-sizeOf.TAG = constant(4);
-
-// CFF data types ///////////////////////////////////////////////////////////
-
-encode.Card8 = encode.BYTE;
-sizeOf.Card8 = sizeOf.BYTE;
-
-encode.Card16 = encode.USHORT;
-sizeOf.Card16 = sizeOf.USHORT;
-
-encode.OffSize = encode.BYTE;
-sizeOf.OffSize = sizeOf.BYTE;
-
-encode.SID = encode.USHORT;
-sizeOf.SID = sizeOf.USHORT;
-
-// Convert a numeric operand or charstring number to a variable-size list of bytes.
-/**
- * Convert a numeric operand or charstring number to a variable-size list of bytes.
- * @param {number}
- * @returns {Array}
- */
-encode.NUMBER = function(v) {
-    if (v >= -107 && v <= 107) {
-        return [v + 139];
-    } else if (v >= 108 && v <= 1131) {
-        v = v - 108;
-        return [(v >> 8) + 247, v & 0xFF];
-    } else if (v >= -1131 && v <= -108) {
-        v = -v - 108;
-        return [(v >> 8) + 251, v & 0xFF];
-    } else if (v >= -32768 && v <= 32767) {
-        return encode.NUMBER16(v);
-    } else {
-        return encode.NUMBER32(v);
-    }
-};
-
-/**
- * @param {number}
- * @returns {number}
- */
-sizeOf.NUMBER = function(v) {
-    return encode.NUMBER(v).length;
-};
-
-/**
- * Convert a signed number between -32768 and +32767 to a three-byte value.
- * This ensures we always use three bytes, but is not the most compact format.
- * @param {number}
- * @returns {Array}
- */
-encode.NUMBER16 = function(v) {
-    return [28, (v >> 8) & 0xFF, v & 0xFF];
-};
-
-/**
- * @constant
- * @type {number}
- */
-sizeOf.NUMBER16 = constant(3);
-
-/**
- * Convert a signed number between -(2^31) and +(2^31-1) to a five-byte value.
- * This is useful if you want to be sure you always use four bytes,
- * at the expense of wasting a few bytes for smaller numbers.
- * @param {number}
- * @returns {Array}
- */
-encode.NUMBER32 = function(v) {
-    return [29, (v >> 24) & 0xFF, (v >> 16) & 0xFF, (v >> 8) & 0xFF, v & 0xFF];
-};
-
-/**
- * @constant
- * @type {number}
- */
-sizeOf.NUMBER32 = constant(5);
-
-/**
- * @param {number}
- * @returns {Array}
- */
-encode.REAL = function(v) {
-    var value = v.toString();
-
-    // Some numbers use an epsilon to encode the value. (e.g. JavaScript will store 0.0000001 as 1e-7)
-    // This code converts it back to a number without the epsilon.
-    var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value);
-    if (m) {
-        var epsilon = parseFloat('1e' + ((m[2] ? +m[2] : 0) + m[1].length));
-        value = (Math.round(v * epsilon) / epsilon).toString();
-    }
-
-    var nibbles = '';
-    for (var i = 0, ii = value.length; i < ii; i += 1) {
-        var c = value[i];
-        if (c === 'e') {
-            nibbles += value[++i] === '-' ? 'c' : 'b';
-        } else if (c === '.') {
-            nibbles += 'a';
-        } else if (c === '-') {
-            nibbles += 'e';
-        } else {
-            nibbles += c;
-        }
-    }
-
-    nibbles += (nibbles.length & 1) ? 'f' : 'ff';
-    var out = [30];
-    for (var i$1 = 0, ii$1 = nibbles.length; i$1 < ii$1; i$1 += 2) {
-        out.push(parseInt(nibbles.substr(i$1, 2), 16));
-    }
-
-    return out;
-};
-
-/**
- * @param {number}
- * @returns {number}
- */
-sizeOf.REAL = function(v) {
-    return encode.REAL(v).length;
-};
-
-encode.NAME = encode.CHARARRAY;
-sizeOf.NAME = sizeOf.CHARARRAY;
-
-encode.STRING = encode.CHARARRAY;
-sizeOf.STRING = sizeOf.CHARARRAY;
-
-/**
- * @param {DataView} data
- * @param {number} offset
- * @param {number} numBytes
- * @returns {string}
- */
-decode.UTF8 = function(data, offset, numBytes) {
-    var codePoints = [];
-    var numChars = numBytes;
-    for (var j = 0; j < numChars; j++, offset += 1) {
-        codePoints[j] = data.getUint8(offset);
-    }
-
-    return String.fromCharCode.apply(null, codePoints);
-};
-
-/**
- * @param {DataView} data
- * @param {number} offset
- * @param {number} numBytes
- * @returns {string}
- */
-decode.UTF16 = function(data, offset, numBytes) {
-    var codePoints = [];
-    var numChars = numBytes / 2;
-    for (var j = 0; j < numChars; j++, offset += 2) {
-        codePoints[j] = data.getUint16(offset);
-    }
-
-    return String.fromCharCode.apply(null, codePoints);
-};
-
-/**
- * Convert a JavaScript string to UTF16-BE.
- * @param {string}
- * @returns {Array}
- */
-encode.UTF16 = function(v) {
-    var b = [];
-    for (var i = 0; i < v.length; i += 1) {
-        var codepoint = v.charCodeAt(i);
-        b[b.length] = (codepoint >> 8) & 0xFF;
-        b[b.length] = codepoint & 0xFF;
-    }
-
-    return b;
-};
-
-/**
- * @param {string}
- * @returns {number}
- */
-sizeOf.UTF16 = function(v) {
-    return v.length * 2;
-};
-
-// Data for converting old eight-bit Macintosh encodings to Unicode.
-// This representation is optimized for decoding; encoding is slower
-// and needs more memory. The assumption is that all opentype.js users
-// want to open fonts, but saving a font will be comparatively rare
-// so it can be more expensive. Keyed by IANA character set name.
-//
-// Python script for generating these strings:
-//
-//     s = u''.join([chr(c).decode('mac_greek') for c in range(128, 256)])
-//     print(s.encode('utf-8'))
-/**
- * @private
- */
-var eightBitMacEncodings = {
-    'x-mac-croatian':  // Python: 'mac_croatian'
-    'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø' +
-    '¿¡¬√ƒ≈Ć«Č… ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ',
-    'x-mac-cyrillic':  // Python: 'mac_cyrillic'
-    'АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњ' +
-    'јЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю',
-    'x-mac-gaelic': // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/GAELIC.TXT
-    'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæø' +
-    'ṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ',
-    'x-mac-greek':  // Python: 'mac_greek'
-    'Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩ' +
-    'άΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ\u00AD',
-    'x-mac-icelandic':  // Python: 'mac_iceland'
-    'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüÝ°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø' +
-    '¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',
-    'x-mac-inuit': // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/INUIT.TXT
-    'ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗ' +
-    'ᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł',
-    'x-mac-ce':  // Python: 'mac_latin2'
-    'ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅ' +
-    'ņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ',
-    macintosh:  // Python: 'mac_roman'
-    'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø' +
-    '¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',
-    'x-mac-romanian':  // Python: 'mac_romanian'
-    'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș' +
-    '¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ',
-    'x-mac-turkish':  // Python: 'mac_turkish'
-    'ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø' +
-    '¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ'
-};
-
-/**
- * Decodes an old-style Macintosh string. Returns either a Unicode JavaScript
- * string, or 'undefined' if the encoding is unsupported. For example, we do
- * not support Chinese, Japanese or Korean because these would need large
- * mapping tables.
- * @param {DataView} dataView
- * @param {number} offset
- * @param {number} dataLength
- * @param {string} encoding
- * @returns {string}
- */
-decode.MACSTRING = function(dataView, offset, dataLength, encoding) {
-    var table = eightBitMacEncodings[encoding];
-    if (table === undefined) {
-        return undefined;
-    }
-
-    var result = '';
-    for (var i = 0; i < dataLength; i++) {
-        var c = dataView.getUint8(offset + i);
-        // In all eight-bit Mac encodings, the characters 0x00..0x7F are
-        // mapped to U+0000..U+007F; we only need to look up the others.
-        if (c <= 0x7F) {
-            result += String.fromCharCode(c);
-        } else {
-            result += table[c & 0x7F];
-        }
-    }
-
-    return result;
-};
-
-// Helper function for encode.MACSTRING. Returns a dictionary for mapping
-// Unicode character codes to their 8-bit MacOS equivalent. This table
-// is not exactly a super cheap data structure, but we do not care because
-// encoding Macintosh strings is only rarely needed in typical applications.
-var macEncodingTableCache = typeof WeakMap === 'function' && new WeakMap();
-var macEncodingCacheKeys;
-var getMacEncodingTable = function (encoding) {
-    // Since we use encoding as a cache key for WeakMap, it has to be
-    // a String object and not a literal. And at least on NodeJS 2.10.1,
-    // WeakMap requires that the same String instance is passed for cache hits.
-    if (!macEncodingCacheKeys) {
-        macEncodingCacheKeys = {};
-        for (var e in eightBitMacEncodings) {
-            /*jshint -W053 */  // Suppress "Do not use String as a constructor."
-            macEncodingCacheKeys[e] = new String(e);
-        }
-    }
-
-    var cacheKey = macEncodingCacheKeys[encoding];
-    if (cacheKey === undefined) {
-        return undefined;
-    }
-
-    // We can't do "if (cache.has(key)) {return cache.get(key)}" here:
-    // since garbage collection may run at any time, it could also kick in
-    // between the calls to cache.has() and cache.get(). In that case,
-    // we would return 'undefined' even though we do support the encoding.
-    if (macEncodingTableCache) {
-        var cachedTable = macEncodingTableCache.get(cacheKey);
-        if (cachedTable !== undefined) {
-            return cachedTable;
-        }
-    }
-
-    var decodingTable = eightBitMacEncodings[encoding];
-    if (decodingTable === undefined) {
-        return undefined;
-    }
-
-    var encodingTable = {};
-    for (var i = 0; i < decodingTable.length; i++) {
-        encodingTable[decodingTable.charCodeAt(i)] = i + 0x80;
-    }
-
-    if (macEncodingTableCache) {
-        macEncodingTableCache.set(cacheKey, encodingTable);
-    }
-
-    return encodingTable;
-};
-
-/**
- * Encodes an old-style Macintosh string. Returns a byte array upon success.
- * If the requested encoding is unsupported, or if the input string contains
- * a character that cannot be expressed in the encoding, the function returns
- * 'undefined'.
- * @param {string} str
- * @param {string} encoding
- * @returns {Array}
- */
-encode.MACSTRING = function(str, encoding) {
-    var table = getMacEncodingTable(encoding);
-    if (table === undefined) {
-        return undefined;
-    }
-
-    var result = [];
-    for (var i = 0; i < str.length; i++) {
-        var c = str.charCodeAt(i);
-
-        // In all eight-bit Mac encodings, the characters 0x00..0x7F are
-        // mapped to U+0000..U+007F; we only need to look up the others.
-        if (c >= 0x80) {
-            c = table[c];
-            if (c === undefined) {
-                // str contains a Unicode character that cannot be encoded
-                // in the requested encoding.
-                return undefined;
-            }
-        }
-        result[i] = c;
-        // result.push(c);
-    }
-
-    return result;
-};
-
-/**
- * @param {string} str
- * @param {string} encoding
- * @returns {number}
- */
-sizeOf.MACSTRING = function(str, encoding) {
-    var b = encode.MACSTRING(str, encoding);
-    if (b !== undefined) {
-        return b.length;
-    } else {
-        return 0;
-    }
-};
-
-// Helper for encode.VARDELTAS
-function isByteEncodable(value) {
-    return value >= -128 && value <= 127;
-}
-
-// Helper for encode.VARDELTAS
-function encodeVarDeltaRunAsZeroes(deltas, pos, result) {
-    var runLength = 0;
-    var numDeltas = deltas.length;
-    while (pos < numDeltas && runLength < 64 && deltas[pos] === 0) {
-        ++pos;
-        ++runLength;
-    }
-    result.push(0x80 | (runLength - 1));
-    return pos;
-}
-
-// Helper for encode.VARDELTAS
-function encodeVarDeltaRunAsBytes(deltas, offset, result) {
-    var runLength = 0;
-    var numDeltas = deltas.length;
-    var pos = offset;
-    while (pos < numDeltas && runLength < 64) {
-        var value = deltas[pos];
-        if (!isByteEncodable(value)) {
-            break;
-        }
-
-        // Within a byte-encoded run of deltas, a single zero is best
-        // stored literally as 0x00 value. However, if we have two or
-        // more zeroes in a sequence, it is better to start a new run.
-        // Fore example, the sequence of deltas [15, 15, 0, 15, 15]
-        // becomes 6 bytes (04 0F 0F 00 0F 0F) when storing the zero
-        // within the current run, but 7 bytes (01 0F 0F 80 01 0F 0F)
-        // when starting a new run.
-        if (value === 0 && pos + 1 < numDeltas && deltas[pos + 1] === 0) {
-            break;
-        }
-
-        ++pos;
-        ++runLength;
-    }
-    result.push(runLength - 1);
-    for (var i = offset; i < pos; ++i) {
-        result.push((deltas[i] + 256) & 0xff);
-    }
-    return pos;
-}
-
-// Helper for encode.VARDELTAS
-function encodeVarDeltaRunAsWords(deltas, offset, result) {
-    var runLength = 0;
-    var numDeltas = deltas.length;
-    var pos = offset;
-    while (pos < numDeltas && runLength < 64) {
-        var value = deltas[pos];
-
-        // Within a word-encoded run of deltas, it is easiest to start
-        // a new run (with a different encoding) whenever we encounter
-        // a zero value. For example, the sequence [0x6666, 0, 0x7777]
-        // needs 7 bytes when storing the zero inside the current run
-        // (42 66 66 00 00 77 77), and equally 7 bytes when starting a
-        // new run (40 66 66 80 40 77 77).
-        if (value === 0) {
-            break;
-        }
-
-        // Within a word-encoded run of deltas, a single value in the
-        // range (-128..127) should be encoded within the current run
-        // because it is more compact. For example, the sequence
-        // [0x6666, 2, 0x7777] becomes 7 bytes when storing the value
-        // literally (42 66 66 00 02 77 77), but 8 bytes when starting
-        // a new run (40 66 66 00 02 40 77 77).
-        if (isByteEncodable(value) && pos + 1 < numDeltas && isByteEncodable(deltas[pos + 1])) {
-            break;
-        }
-
-        ++pos;
-        ++runLength;
-    }
-    result.push(0x40 | (runLength - 1));
-    for (var i = offset; i < pos; ++i) {
-        var val = deltas[i];
-        result.push(((val + 0x10000) >> 8) & 0xff, (val + 0x100) & 0xff);
-    }
-    return pos;
-}
-
-/**
- * Encode a list of variation adjustment deltas.
- *
- * Variation adjustment deltas are used in ‘gvar’ and ‘cvar’ tables.
- * They indicate how points (in ‘gvar’) or values (in ‘cvar’) get adjusted
- * when generating instances of variation fonts.
- *
- * @see https://www.microsoft.com/typography/otspec/gvar.htm
- * @see https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6gvar.html
- * @param {Array}
- * @return {Array}
- */
-encode.VARDELTAS = function(deltas) {
-    var pos = 0;
-    var result = [];
-    while (pos < deltas.length) {
-        var value = deltas[pos];
-        if (value === 0) {
-            pos = encodeVarDeltaRunAsZeroes(deltas, pos, result);
-        } else if (value >= -128 && value <= 127) {
-            pos = encodeVarDeltaRunAsBytes(deltas, pos, result);
-        } else {
-            pos = encodeVarDeltaRunAsWords(deltas, pos, result);
-        }
-    }
-    return result;
-};
-
-// Convert a list of values to a CFF INDEX structure.
-// The values should be objects containing name / type / value.
-/**
- * @param {Array} l
- * @returns {Array}
- */
-encode.INDEX = function(l) {
-    //var offset, offsets, offsetEncoder, encodedOffsets, encodedOffset, data,
-    //    i, v;
-    // Because we have to know which data type to use to encode the offsets,
-    // we have to go through the values twice: once to encode the data and
-    // calculate the offsets, then again to encode the offsets using the fitting data type.
-    var offset = 1; // First offset is always 1.
-    var offsets = [offset];
-    var data = [];
-    for (var i = 0; i < l.length; i += 1) {
-        var v = encode.OBJECT(l[i]);
-        Array.prototype.push.apply(data, v);
-        offset += v.length;
-        offsets.push(offset);
-    }
-
-    if (data.length === 0) {
-        return [0, 0];
-    }
-
-    var encodedOffsets = [];
-    var offSize = (1 + Math.floor(Math.log(offset) / Math.log(2)) / 8) | 0;
-    var offsetEncoder = [undefined, encode.BYTE, encode.USHORT, encode.UINT24, encode.ULONG][offSize];
-    for (var i$1 = 0; i$1 < offsets.length; i$1 += 1) {
-        var encodedOffset = offsetEncoder(offsets[i$1]);
-        Array.prototype.push.apply(encodedOffsets, encodedOffset);
-    }
-
-    return Array.prototype.concat(encode.Card16(l.length),
-                           encode.OffSize(offSize),
-                           encodedOffsets,
-                           data);
-};
-
-/**
- * @param {Array}
- * @returns {number}
- */
-sizeOf.INDEX = function(v) {
-    return encode.INDEX(v).length;
-};
-
-/**
- * Convert an object to a CFF DICT structure.
- * The keys should be numeric.
- * The values should be objects containing name / type / value.
- * @param {Object} m
- * @returns {Array}
- */
-encode.DICT = function(m) {
-    var d = [];
-    var keys = Object.keys(m);
-    var length = keys.length;
-
-    for (var i = 0; i < length; i += 1) {
-        // Object.keys() return string keys, but our keys are always numeric.
-        var k = parseInt(keys[i], 0);
-        var v = m[k];
-        // Value comes before the key.
-        d = d.concat(encode.OPERAND(v.value, v.type));
-        d = d.concat(encode.OPERATOR(k));
-    }
-
-    return d;
-};
-
-/**
- * @param {Object}
- * @returns {number}
- */
-sizeOf.DICT = function(m) {
-    return encode.DICT(m).length;
-};
-
-/**
- * @param {number}
- * @returns {Array}
- */
-encode.OPERATOR = function(v) {
-    if (v < 1200) {
-        return [v];
-    } else {
-        return [12, v - 1200];
-    }
-};
-
-/**
- * @param {Array} v
- * @param {string}
- * @returns {Array}
- */
-encode.OPERAND = function(v, type) {
-    var d = [];
-    if (Array.isArray(type)) {
-        for (var i = 0; i < type.length; i += 1) {
-            check.argument(v.length === type.length, 'Not enough arguments given for type' + type);
-            d = d.concat(encode.OPERAND(v[i], type[i]));
-        }
-    } else {
-        if (type === 'SID') {
-            d = d.concat(encode.NUMBER(v));
-        } else if (type === 'offset') {
-            // We make it easy for ourselves and always encode offsets as
-            // 4 bytes. This makes offset calculation for the top dict easier.
-            d = d.concat(encode.NUMBER32(v));
-        } else if (type === 'number') {
-            d = d.concat(encode.NUMBER(v));
-        } else if (type === 'real') {
-            d = d.concat(encode.REAL(v));
-        } else {
-            throw new Error('Unknown operand type ' + type);
-            // FIXME Add support for booleans
-        }
-    }
-
-    return d;
-};
-
-encode.OP = encode.BYTE;
-sizeOf.OP = sizeOf.BYTE;
-
-// memoize charstring encoding using WeakMap if available
-var wmm = typeof WeakMap === 'function' && new WeakMap();
-
-/**
- * Convert a list of CharString operations to bytes.
- * @param {Array}
- * @returns {Array}
- */
-encode.CHARSTRING = function(ops) {
-    // See encode.MACSTRING for why we don't do "if (wmm && wmm.has(ops))".
-    if (wmm) {
-        var cachedValue = wmm.get(ops);
-        if (cachedValue !== undefined) {
-            return cachedValue;
-        }
-    }
-
-    var d = [];
-    var length = ops.length;
-
-    for (var i = 0; i < length; i += 1) {
-        var op = ops[i];
-        d = d.concat(encode[op.type](op.value));
-    }
-
-    if (wmm) {
-        wmm.set(ops, d);
-    }
-
-    return d;
-};
-
-/**
- * @param {Array}
- * @returns {number}
- */
-sizeOf.CHARSTRING = function(ops) {
-    return encode.CHARSTRING(ops).length;
-};
-
-// Utility functions ////////////////////////////////////////////////////////
-
-/**
- * Convert an object containing name / type / value to bytes.
- * @param {Object}
- * @returns {Array}
- */
-encode.OBJECT = function(v) {
-    var encodingFunction = encode[v.type];
-    check.argument(encodingFunction !== undefined, 'No encoding function for type ' + v.type);
-    return encodingFunction(v.value);
-};
-
-/**
- * @param {Object}
- * @returns {number}
- */
-sizeOf.OBJECT = function(v) {
-    var sizeOfFunction = sizeOf[v.type];
-    check.argument(sizeOfFunction !== undefined, 'No sizeOf function for type ' + v.type);
-    return sizeOfFunction(v.value);
-};
-
-/**
- * Convert a table object to bytes.
- * A table contains a list of fields containing the metadata (name, type and default value).
- * The table itself has the field values set as attributes.
- * @param {opentype.Table}
- * @returns {Array}
- */
-encode.TABLE = function(table) {
-    var d = [];
-    var length = table.fields.length;
-    var subtables = [];
-    var subtableOffsets = [];
-
-    for (var i = 0; i < length; i += 1) {
-        var field = table.fields[i];
-        var encodingFunction = encode[field.type];
-        check.argument(encodingFunction !== undefined, 'No encoding function for field type ' + field.type + ' (' + field.name + ')');
-        var value = table[field.name];
-        if (value === undefined) {
-            value = field.value;
-        }
-
-        var bytes = encodingFunction(value);
-
-        if (field.type === 'TABLE') {
-            subtableOffsets.push(d.length);
-            d = d.concat([0, 0]);
-            subtables.push(bytes);
-        } else {
-            d = d.concat(bytes);
-        }
-    }
-
-    for (var i$1 = 0; i$1 < subtables.length; i$1 += 1) {
-        var o = subtableOffsets[i$1];
-        var offset = d.length;
-        check.argument(offset < 65536, 'Table ' + table.tableName + ' too big.');
-        d[o] = offset >> 8;
-        d[o + 1] = offset & 0xff;
-        d = d.concat(subtables[i$1]);
-    }
-
-    return d;
-};
-
-/**
- * @param {opentype.Table}
- * @returns {number}
- */
-sizeOf.TABLE = function(table) {
-    var numBytes = 0;
-    var length = table.fields.length;
-
-    for (var i = 0; i < length; i += 1) {
-        var field = table.fields[i];
-        var sizeOfFunction = sizeOf[field.type];
-        check.argument(sizeOfFunction !== undefined, 'No sizeOf function for field type ' + field.type + ' (' + field.name + ')');
-        var value = table[field.name];
-        if (value === undefined) {
-            value = field.value;
-        }
-
-        numBytes += sizeOfFunction(value);
-
-        // Subtables take 2 more bytes for offsets.
-        if (field.type === 'TABLE') {
-            numBytes += 2;
-        }
-    }
-
-    return numBytes;
-};
-
-encode.RECORD = encode.TABLE;
-sizeOf.RECORD = sizeOf.TABLE;
-
-// Merge in a list of bytes.
-encode.LITERAL = function(v) {
-    return v;
-};
-
-sizeOf.LITERAL = function(v) {
-    return v.length;
-};
-
-// Table metadata
-
-/**
- * @exports opentype.Table
- * @class
- * @param {string} tableName
- * @param {Array} fields
- * @param {Object} options
- * @constructor
- */
-function Table(tableName, fields, options) {
-    // For coverage tables with coverage format 2, we do not want to add the coverage data directly to the table object,
-    // as this will result in wrong encoding order of the coverage data on serialization to bytes.
-    // The fallback of using the field values directly when not present on the table is handled in types.encode.TABLE() already.
-    if (fields.length && (fields[0].name !== 'coverageFormat' || fields[0].value === 1)) {
-        for (var i = 0; i < fields.length; i += 1) {
-            var field = fields[i];
-            this[field.name] = field.value;
-        }
-    }
-
-    this.tableName = tableName;
-    this.fields = fields;
-    if (options) {
-        var optionKeys = Object.keys(options);
-        for (var i$1 = 0; i$1 < optionKeys.length; i$1 += 1) {
-            var k = optionKeys[i$1];
-            var v = options[k];
-            if (this[k] !== undefined) {
-                this[k] = v;
-            }
-        }
-    }
-}
-
-/**
- * Encodes the table and returns an array of bytes
- * @return {Array}
- */
-Table.prototype.encode = function() {
-    return encode.TABLE(this);
-};
-
-/**
- * Get the size of the table.
- * @return {number}
- */
-Table.prototype.sizeOf = function() {
-    return sizeOf.TABLE(this);
-};
-
-/**
- * @private
- */
-function ushortList(itemName, list, count) {
-    if (count === undefined) {
-        count = list.length;
-    }
-    var fields = new Array(list.length + 1);
-    fields[0] = {name: itemName + 'Count', type: 'USHORT', value: count};
-    for (var i = 0; i < list.length; i++) {
-        fields[i + 1] = {name: itemName + i, type: 'USHORT', value: list[i]};
-    }
-    return fields;
-}
-
-/**
- * @private
- */
-function tableList(itemName, records, itemCallback) {
-    var count = records.length;
-    var fields = new Array(count + 1);
-    fields[0] = {name: itemName + 'Count', type: 'USHORT', value: count};
-    for (var i = 0; i < count; i++) {
-        fields[i + 1] = {name: itemName + i, type: 'TABLE', value: itemCallback(records[i], i)};
-    }
-    return fields;
-}
-
-/**
- * @private
- */
-function recordList(itemName, records, itemCallback) {
-    var count = records.length;
-    var fields = [];
-    fields[0] = {name: itemName + 'Count', type: 'USHORT', value: count};
-    for (var i = 0; i < count; i++) {
-        fields = fields.concat(itemCallback(records[i], i));
-    }
-    return fields;
-}
-
-// Common Layout Tables
-
-/**
- * @exports opentype.Coverage
- * @class
- * @param {opentype.Table}
- * @constructor
- * @extends opentype.Table
- */
-function Coverage(coverageTable) {
-    if (coverageTable.format === 1) {
-        Table.call(this, 'coverageTable',
-            [{name: 'coverageFormat', type: 'USHORT', value: 1}]
-            .concat(ushortList('glyph', coverageTable.glyphs))
-        );
-    } else if (coverageTable.format === 2) {
-        Table.call(this, 'coverageTable',
-            [{name: 'coverageFormat', type: 'USHORT', value: 2}]
-            .concat(recordList('rangeRecord', coverageTable.ranges, function(RangeRecord) {
-                return [
-                    {name: 'startGlyphID', type: 'USHORT', value: RangeRecord.start},
-                    {name: 'endGlyphID', type: 'USHORT', value: RangeRecord.end},
-                    {name: 'startCoverageIndex', type: 'USHORT', value: RangeRecord.index} ];
-            }))
-        );
-    } else {
-        check.assert(false, 'Coverage format must be 1 or 2.');
-    }
-}
-Coverage.prototype = Object.create(Table.prototype);
-Coverage.prototype.constructor = Coverage;
-
-function ScriptList(scriptListTable) {
-    Table.call(this, 'scriptListTable',
-        recordList('scriptRecord', scriptListTable, function(scriptRecord, i) {
-            var script = scriptRecord.script;
-            var defaultLangSys = script.defaultLangSys;
-            check.assert(!!defaultLangSys, 'Unable to write GSUB: script ' + scriptRecord.tag + ' has no default language system.');
-            return [
-                {name: 'scriptTag' + i, type: 'TAG', value: scriptRecord.tag},
-                {name: 'script' + i, type: 'TABLE', value: new Table('scriptTable', [
-                    {name: 'defaultLangSys', type: 'TABLE', value: new Table('defaultLangSys', [
-                        {name: 'lookupOrder', type: 'USHORT', value: 0},
-                        {name: 'reqFeatureIndex', type: 'USHORT', value: defaultLangSys.reqFeatureIndex}]
-                        .concat(ushortList('featureIndex', defaultLangSys.featureIndexes)))}
-                    ].concat(recordList('langSys', script.langSysRecords, function(langSysRecord, i) {
-                        var langSys = langSysRecord.langSys;
-                        return [
-                            {name: 'langSysTag' + i, type: 'TAG', value: langSysRecord.tag},
-                            {name: 'langSys' + i, type: 'TABLE', value: new Table('langSys', [
-                                {name: 'lookupOrder', type: 'USHORT', value: 0},
-                                {name: 'reqFeatureIndex', type: 'USHORT', value: langSys.reqFeatureIndex}
-                                ].concat(ushortList('featureIndex', langSys.featureIndexes)))}
-                        ];
-                    })))}
-            ];
-        })
-    );
-}
-ScriptList.prototype = Object.create(Table.prototype);
-ScriptList.prototype.constructor = ScriptList;
-
-/**
- * @exports opentype.FeatureList
- * @class
- * @param {opentype.Table}
- * @constructor
- * @extends opentype.Table
- */
-function FeatureList(featureListTable) {
-    Table.call(this, 'featureListTable',
-        recordList('featureRecord', featureListTable, function(featureRecord, i) {
-            var feature = featureRecord.feature;
-            return [
-                {name: 'featureTag' + i, type: 'TAG', value: featureRecord.tag},
-                {name: 'feature' + i, type: 'TABLE', value: new Table('featureTable', [
-                    {name: 'featureParams', type: 'USHORT', value: feature.featureParams} ].concat(ushortList('lookupListIndex', feature.lookupListIndexes)))}
-            ];
-        })
-    );
-}
-FeatureList.prototype = Object.create(Table.prototype);
-FeatureList.prototype.constructor = FeatureList;
-
-/**
- * @exports opentype.LookupList
- * @class
- * @param {opentype.Table}
- * @param {Object}
- * @constructor
- * @extends opentype.Table
- */
-function LookupList(lookupListTable, subtableMakers) {
-    Table.call(this, 'lookupListTable', tableList('lookup', lookupListTable, function(lookupTable) {
-        var subtableCallback = subtableMakers[lookupTable.lookupType];
-        check.assert(!!subtableCallback, 'Unable to write GSUB lookup type ' + lookupTable.lookupType + ' tables.');
-        return new Table('lookupTable', [
-            {name: 'lookupType', type: 'USHORT', value: lookupTable.lookupType},
-            {name: 'lookupFlag', type: 'USHORT', value: lookupTable.lookupFlag}
-        ].concat(tableList('subtable', lookupTable.subtables, subtableCallback)));
-    }));
-}
-LookupList.prototype = Object.create(Table.prototype);
-LookupList.prototype.constructor = LookupList;
-
-// Record = same as Table, but inlined (a Table has an offset and its data is further in the stream)
-// Don't use offsets inside Records (probable bug), only in Tables.
-var table = {
-    Table: Table,
-    Record: Table,
-    Coverage: Coverage,
-    ScriptList: ScriptList,
-    FeatureList: FeatureList,
-    LookupList: LookupList,
-    ushortList: ushortList,
-    tableList: tableList,
-    recordList: recordList,
-};
-
-// Parsing utility functions
-
-// Retrieve an unsigned byte from the DataView.
-function getByte(dataView, offset) {
-    return dataView.getUint8(offset);
-}
-
-// Retrieve an unsigned 16-bit short from the DataView.
-// The value is stored in big endian.
-function getUShort(dataView, offset) {
-    return dataView.getUint16(offset, false);
-}
-
-// Retrieve a signed 16-bit short from the DataView.
-// The value is stored in big endian.
-function getShort(dataView, offset) {
-    return dataView.getInt16(offset, false);
-}
-
-// Retrieve an unsigned 32-bit long from the DataView.
-// The value is stored in big endian.
-function getULong(dataView, offset) {
-    return dataView.getUint32(offset, false);
-}
-
-// Retrieve a 32-bit signed fixed-point number (16.16) from the DataView.
-// The value is stored in big endian.
-function getFixed(dataView, offset) {
-    var decimal = dataView.getInt16(offset, false);
-    var fraction = dataView.getUint16(offset + 2, false);
-    return decimal + fraction / 65535;
-}
-
-// Retrieve a 4-character tag from the DataView.
-// Tags are used to identify tables.
-function getTag(dataView, offset) {
-    var tag = '';
-    for (var i = offset; i < offset + 4; i += 1) {
-        tag += String.fromCharCode(dataView.getInt8(i));
-    }
-
-    return tag;
-}
-
-// Retrieve an offset from the DataView.
-// Offsets are 1 to 4 bytes in length, depending on the offSize argument.
-function getOffset(dataView, offset, offSize) {
-    var v = 0;
-    for (var i = 0; i < offSize; i += 1) {
-        v <<= 8;
-        v += dataView.getUint8(offset + i);
-    }
-
-    return v;
-}
-
-// Retrieve a number of bytes from start offset to the end offset from the DataView.
-function getBytes(dataView, startOffset, endOffset) {
-    var bytes = [];
-    for (var i = startOffset; i < endOffset; i += 1) {
-        bytes.push(dataView.getUint8(i));
-    }
-
-    return bytes;
-}
-
-// Convert the list of bytes to a string.
-function bytesToString(bytes) {
-    var s = '';
-    for (var i = 0; i < bytes.length; i += 1) {
-        s += String.fromCharCode(bytes[i]);
-    }
-
-    return s;
-}
-
-var typeOffsets = {
-    byte: 1,
-    uShort: 2,
-    short: 2,
-    uLong: 4,
-    fixed: 4,
-    longDateTime: 8,
-    tag: 4
-};
-
-// A stateful parser that changes the offset whenever a value is retrieved.
-// The data is a DataView.
-function opentype_module_Parser(data, offset) {
-    this.data = data;
-    this.offset = offset;
-    this.relativeOffset = 0;
-}
-
-opentype_module_Parser.prototype.parseByte = function() {
-    var v = this.data.getUint8(this.offset + this.relativeOffset);
-    this.relativeOffset += 1;
-    return v;
-};
-
-opentype_module_Parser.prototype.parseChar = function() {
-    var v = this.data.getInt8(this.offset + this.relativeOffset);
-    this.relativeOffset += 1;
-    return v;
-};
-
-opentype_module_Parser.prototype.parseCard8 = opentype_module_Parser.prototype.parseByte;
-
-opentype_module_Parser.prototype.parseUShort = function() {
-    var v = this.data.getUint16(this.offset + this.relativeOffset);
-    this.relativeOffset += 2;
-    return v;
-};
-
-opentype_module_Parser.prototype.parseCard16 = opentype_module_Parser.prototype.parseUShort;
-opentype_module_Parser.prototype.parseSID = opentype_module_Parser.prototype.parseUShort;
-opentype_module_Parser.prototype.parseOffset16 = opentype_module_Parser.prototype.parseUShort;
-
-opentype_module_Parser.prototype.parseShort = function() {
-    var v = this.data.getInt16(this.offset + this.relativeOffset);
-    this.relativeOffset += 2;
-    return v;
-};
-
-opentype_module_Parser.prototype.parseF2Dot14 = function() {
-    var v = this.data.getInt16(this.offset + this.relativeOffset) / 16384;
-    this.relativeOffset += 2;
-    return v;
-};
-
-opentype_module_Parser.prototype.parseULong = function() {
-    var v = getULong(this.data, this.offset + this.relativeOffset);
-    this.relativeOffset += 4;
-    return v;
-};
-
-opentype_module_Parser.prototype.parseOffset32 = opentype_module_Parser.prototype.parseULong;
-
-opentype_module_Parser.prototype.parseFixed = function() {
-    var v = getFixed(this.data, this.offset + this.relativeOffset);
-    this.relativeOffset += 4;
-    return v;
-};
-
-opentype_module_Parser.prototype.parseString = function(length) {
-    var dataView = this.data;
-    var offset = this.offset + this.relativeOffset;
-    var string = '';
-    this.relativeOffset += length;
-    for (var i = 0; i < length; i++) {
-        string += String.fromCharCode(dataView.getUint8(offset + i));
-    }
-
-    return string;
-};
-
-opentype_module_Parser.prototype.parseTag = function() {
-    return this.parseString(4);
-};
-
-// LONGDATETIME is a 64-bit integer.
-// JavaScript and unix timestamps traditionally use 32 bits, so we
-// only take the last 32 bits.
-// + Since until 2038 those bits will be filled by zeros we can ignore them.
-opentype_module_Parser.prototype.parseLongDateTime = function() {
-    var v = getULong(this.data, this.offset + this.relativeOffset + 4);
-    // Subtract seconds between 01/01/1904 and 01/01/1970
-    // to convert Apple Mac timestamp to Standard Unix timestamp
-    v -= 2082844800;
-    this.relativeOffset += 8;
-    return v;
-};
-
-opentype_module_Parser.prototype.parseVersion = function(minorBase) {
-    var major = getUShort(this.data, this.offset + this.relativeOffset);
-
-    // How to interpret the minor version is very vague in the spec. 0x5000 is 5, 0x1000 is 1
-    // Default returns the correct number if minor = 0xN000 where N is 0-9
-    // Set minorBase to 1 for tables that use minor = N where N is 0-9
-    var minor = getUShort(this.data, this.offset + this.relativeOffset + 2);
-    this.relativeOffset += 4;
-    if (minorBase === undefined) { minorBase = 0x1000; }
-    return major + minor / minorBase / 10;
-};
-
-opentype_module_Parser.prototype.skip = function(type, amount) {
-    if (amount === undefined) {
-        amount = 1;
-    }
-
-    this.relativeOffset += typeOffsets[type] * amount;
-};
-
-///// Parsing lists and records ///////////////////////////////
-
-// Parse a list of 32 bit unsigned integers.
-opentype_module_Parser.prototype.parseULongList = function(count) {
-    if (count === undefined) { count = this.parseULong(); }
-    var offsets = new Array(count);
-    var dataView = this.data;
-    var offset = this.offset + this.relativeOffset;
-    for (var i = 0; i < count; i++) {
-        offsets[i] = dataView.getUint32(offset);
-        offset += 4;
-    }
-
-    this.relativeOffset += count * 4;
-    return offsets;
-};
-
-// Parse a list of 16 bit unsigned integers. The length of the list can be read on the stream
-// or provided as an argument.
-opentype_module_Parser.prototype.parseOffset16List =
-opentype_module_Parser.prototype.parseUShortList = function(count) {
-    if (count === undefined) { count = this.parseUShort(); }
-    var offsets = new Array(count);
-    var dataView = this.data;
-    var offset = this.offset + this.relativeOffset;
-    for (var i = 0; i < count; i++) {
-        offsets[i] = dataView.getUint16(offset);
-        offset += 2;
-    }
-
-    this.relativeOffset += count * 2;
-    return offsets;
-};
-
-// Parses a list of 16 bit signed integers.
-opentype_module_Parser.prototype.parseShortList = function(count) {
-    var list = new Array(count);
-    var dataView = this.data;
-    var offset = this.offset + this.relativeOffset;
-    for (var i = 0; i < count; i++) {
-        list[i] = dataView.getInt16(offset);
-        offset += 2;
-    }
-
-    this.relativeOffset += count * 2;
-    return list;
-};
-
-// Parses a list of bytes.
-opentype_module_Parser.prototype.parseByteList = function(count) {
-    var list = new Array(count);
-    var dataView = this.data;
-    var offset = this.offset + this.relativeOffset;
-    for (var i = 0; i < count; i++) {
-        list[i] = dataView.getUint8(offset++);
-    }
-
-    this.relativeOffset += count;
-    return list;
-};
-
-/**
- * Parse a list of items.
- * Record count is optional, if omitted it is read from the stream.
- * itemCallback is one of the Parser methods.
- */
-opentype_module_Parser.prototype.parseList = function(count, itemCallback) {
-    if (!itemCallback) {
-        itemCallback = count;
-        count = this.parseUShort();
-    }
-    var list = new Array(count);
-    for (var i = 0; i < count; i++) {
-        list[i] = itemCallback.call(this);
-    }
-    return list;
-};
-
-opentype_module_Parser.prototype.parseList32 = function(count, itemCallback) {
-    if (!itemCallback) {
-        itemCallback = count;
-        count = this.parseULong();
-    }
-    var list = new Array(count);
-    for (var i = 0; i < count; i++) {
-        list[i] = itemCallback.call(this);
-    }
-    return list;
-};
-
-/**
- * Parse a list of records.
- * Record count is optional, if omitted it is read from the stream.
- * Example of recordDescription: { sequenceIndex: Parser.uShort, lookupListIndex: Parser.uShort }
- */
-opentype_module_Parser.prototype.parseRecordList = function(count, recordDescription) {
-    // If the count argument is absent, read it in the stream.
-    if (!recordDescription) {
-        recordDescription = count;
-        count = this.parseUShort();
-    }
-    var records = new Array(count);
-    var fields = Object.keys(recordDescription);
-    for (var i = 0; i < count; i++) {
-        var rec = {};
-        for (var j = 0; j < fields.length; j++) {
-            var fieldName = fields[j];
-            var fieldType = recordDescription[fieldName];
-            rec[fieldName] = fieldType.call(this);
-        }
-        records[i] = rec;
-    }
-    return records;
-};
-
-opentype_module_Parser.prototype.parseRecordList32 = function(count, recordDescription) {
-    // If the count argument is absent, read it in the stream.
-    if (!recordDescription) {
-        recordDescription = count;
-        count = this.parseULong();
-    }
-    var records = new Array(count);
-    var fields = Object.keys(recordDescription);
-    for (var i = 0; i < count; i++) {
-        var rec = {};
-        for (var j = 0; j < fields.length; j++) {
-            var fieldName = fields[j];
-            var fieldType = recordDescription[fieldName];
-            rec[fieldName] = fieldType.call(this);
-        }
-        records[i] = rec;
-    }
-    return records;
-};
-
-// Parse a data structure into an object
-// Example of description: { sequenceIndex: Parser.uShort, lookupListIndex: Parser.uShort }
-opentype_module_Parser.prototype.parseStruct = function(description) {
-    if (typeof description === 'function') {
-        return description.call(this);
-    } else {
-        var fields = Object.keys(description);
-        var struct = {};
-        for (var j = 0; j < fields.length; j++) {
-            var fieldName = fields[j];
-            var fieldType = description[fieldName];
-            struct[fieldName] = fieldType.call(this);
-        }
-        return struct;
-    }
-};
-
-/**
- * Parse a GPOS valueRecord
- * https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#value-record
- * valueFormat is optional, if omitted it is read from the stream.
- */
-opentype_module_Parser.prototype.parseValueRecord = function(valueFormat) {
-    if (valueFormat === undefined) {
-        valueFormat = this.parseUShort();
-    }
-    if (valueFormat === 0) {
-        // valueFormat2 in kerning pairs is most often 0
-        // in this case return undefined instead of an empty object, to save space
-        return;
-    }
-    var valueRecord = {};
-
-    if (valueFormat & 0x0001) { valueRecord.xPlacement = this.parseShort(); }
-    if (valueFormat & 0x0002) { valueRecord.yPlacement = this.parseShort(); }
-    if (valueFormat & 0x0004) { valueRecord.xAdvance = this.parseShort(); }
-    if (valueFormat & 0x0008) { valueRecord.yAdvance = this.parseShort(); }
-
-    // Device table (non-variable font) / VariationIndex table (variable font) not supported
-    // https://docs.microsoft.com/fr-fr/typography/opentype/spec/chapter2#devVarIdxTbls
-    if (valueFormat & 0x0010) { valueRecord.xPlaDevice = undefined; this.parseShort(); }
-    if (valueFormat & 0x0020) { valueRecord.yPlaDevice = undefined; this.parseShort(); }
-    if (valueFormat & 0x0040) { valueRecord.xAdvDevice = undefined; this.parseShort(); }
-    if (valueFormat & 0x0080) { valueRecord.yAdvDevice = undefined; this.parseShort(); }
-
-    return valueRecord;
-};
-
-/**
- * Parse a list of GPOS valueRecords
- * https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#value-record
- * valueFormat and valueCount are read from the stream.
- */
-opentype_module_Parser.prototype.parseValueRecordList = function() {
-    var valueFormat = this.parseUShort();
-    var valueCount = this.parseUShort();
-    var values = new Array(valueCount);
-    for (var i = 0; i < valueCount; i++) {
-        values[i] = this.parseValueRecord(valueFormat);
-    }
-    return values;
-};
-
-opentype_module_Parser.prototype.parsePointer = function(description) {
-    var structOffset = this.parseOffset16();
-    if (structOffset > 0) {
-        // NULL offset => return undefined
-        return new opentype_module_Parser(this.data, this.offset + structOffset).parseStruct(description);
-    }
-    return undefined;
-};
-
-opentype_module_Parser.prototype.parsePointer32 = function(description) {
-    var structOffset = this.parseOffset32();
-    if (structOffset > 0) {
-        // NULL offset => return undefined
-        return new opentype_module_Parser(this.data, this.offset + structOffset).parseStruct(description);
-    }
-    return undefined;
-};
-
-/**
- * Parse a list of offsets to lists of 16-bit integers,
- * or a list of offsets to lists of offsets to any kind of items.
- * If itemCallback is not provided, a list of list of UShort is assumed.
- * If provided, itemCallback is called on each item and must parse the item.
- * See examples in tables/gsub.js
- */
-opentype_module_Parser.prototype.parseListOfLists = function(itemCallback) {
-    var offsets = this.parseOffset16List();
-    var count = offsets.length;
-    var relativeOffset = this.relativeOffset;
-    var list = new Array(count);
-    for (var i = 0; i < count; i++) {
-        var start = offsets[i];
-        if (start === 0) {
-            // NULL offset
-            // Add i as owned property to list. Convenient with assert.
-            list[i] = undefined;
-            continue;
-        }
-        this.relativeOffset = start;
-        if (itemCallback) {
-            var subOffsets = this.parseOffset16List();
-            var subList = new Array(subOffsets.length);
-            for (var j = 0; j < subOffsets.length; j++) {
-                this.relativeOffset = start + subOffsets[j];
-                subList[j] = itemCallback.call(this);
-            }
-            list[i] = subList;
-        } else {
-            list[i] = this.parseUShortList();
-        }
-    }
-    this.relativeOffset = relativeOffset;
-    return list;
-};
-
-///// Complex tables parsing //////////////////////////////////
-
-// Parse a coverage table in a GSUB, GPOS or GDEF table.
-// https://www.microsoft.com/typography/OTSPEC/chapter2.htm
-// parser.offset must point to the start of the table containing the coverage.
-opentype_module_Parser.prototype.parseCoverage = function() {
-    var startOffset = this.offset + this.relativeOffset;
-    var format = this.parseUShort();
-    var count = this.parseUShort();
-    if (format === 1) {
-        return {
-            format: 1,
-            glyphs: this.parseUShortList(count)
-        };
-    } else if (format === 2) {
-        var ranges = new Array(count);
-        for (var i = 0; i < count; i++) {
-            ranges[i] = {
-                start: this.parseUShort(),
-                end: this.parseUShort(),
-                index: this.parseUShort()
-            };
-        }
-        return {
-            format: 2,
-            ranges: ranges
-        };
-    }
-    throw new Error('0x' + startOffset.toString(16) + ': Coverage format must be 1 or 2.');
-};
-
-// Parse a Class Definition Table in a GSUB, GPOS or GDEF table.
-// https://www.microsoft.com/typography/OTSPEC/chapter2.htm
-opentype_module_Parser.prototype.parseClassDef = function() {
-    var startOffset = this.offset + this.relativeOffset;
-    var format = this.parseUShort();
-    if (format === 1) {
-        return {
-            format: 1,
-            startGlyph: this.parseUShort(),
-            classes: this.parseUShortList()
-        };
-    } else if (format === 2) {
-        return {
-            format: 2,
-            ranges: this.parseRecordList({
-                start: opentype_module_Parser.uShort,
-                end: opentype_module_Parser.uShort,
-                classId: opentype_module_Parser.uShort
-            })
-        };
-    }
-    throw new Error('0x' + startOffset.toString(16) + ': ClassDef format must be 1 or 2.');
-};
-
-///// Static methods ///////////////////////////////////
-// These convenience methods can be used as callbacks and should be called with "this" context set to a Parser instance.
-
-opentype_module_Parser.list = function(count, itemCallback) {
-    return function() {
-        return this.parseList(count, itemCallback);
-    };
-};
-
-opentype_module_Parser.list32 = function(count, itemCallback) {
-    return function() {
-        return this.parseList32(count, itemCallback);
-    };
-};
-
-opentype_module_Parser.recordList = function(count, recordDescription) {
-    return function() {
-        return this.parseRecordList(count, recordDescription);
-    };
-};
-
-opentype_module_Parser.recordList32 = function(count, recordDescription) {
-    return function() {
-        return this.parseRecordList32(count, recordDescription);
-    };
-};
-
-opentype_module_Parser.pointer = function(description) {
-    return function() {
-        return this.parsePointer(description);
-    };
-};
-
-opentype_module_Parser.pointer32 = function(description) {
-    return function() {
-        return this.parsePointer32(description);
-    };
-};
-
-opentype_module_Parser.tag = opentype_module_Parser.prototype.parseTag;
-opentype_module_Parser.byte = opentype_module_Parser.prototype.parseByte;
-opentype_module_Parser.uShort = opentype_module_Parser.offset16 = opentype_module_Parser.prototype.parseUShort;
-opentype_module_Parser.uShortList = opentype_module_Parser.prototype.parseUShortList;
-opentype_module_Parser.uLong = opentype_module_Parser.offset32 = opentype_module_Parser.prototype.parseULong;
-opentype_module_Parser.uLongList = opentype_module_Parser.prototype.parseULongList;
-opentype_module_Parser.struct = opentype_module_Parser.prototype.parseStruct;
-opentype_module_Parser.coverage = opentype_module_Parser.prototype.parseCoverage;
-opentype_module_Parser.classDef = opentype_module_Parser.prototype.parseClassDef;
-
-///// Script, Feature, Lookup lists ///////////////////////////////////////////////
-// https://www.microsoft.com/typography/OTSPEC/chapter2.htm
-
-var langSysTable = {
-    reserved: opentype_module_Parser.uShort,
-    reqFeatureIndex: opentype_module_Parser.uShort,
-    featureIndexes: opentype_module_Parser.uShortList
-};
-
-opentype_module_Parser.prototype.parseScriptList = function() {
-    return this.parsePointer(opentype_module_Parser.recordList({
-        tag: opentype_module_Parser.tag,
-        script: opentype_module_Parser.pointer({
-            defaultLangSys: opentype_module_Parser.pointer(langSysTable),
-            langSysRecords: opentype_module_Parser.recordList({
-                tag: opentype_module_Parser.tag,
-                langSys: opentype_module_Parser.pointer(langSysTable)
-            })
-        })
-    })) || [];
-};
-
-opentype_module_Parser.prototype.parseFeatureList = function() {
-    return this.parsePointer(opentype_module_Parser.recordList({
-        tag: opentype_module_Parser.tag,
-        feature: opentype_module_Parser.pointer({
-            featureParams: opentype_module_Parser.offset16,
-            lookupListIndexes: opentype_module_Parser.uShortList
-        })
-    })) || [];
-};
-
-opentype_module_Parser.prototype.parseLookupList = function(lookupTableParsers) {
-    return this.parsePointer(opentype_module_Parser.list(opentype_module_Parser.pointer(function() {
-        var lookupType = this.parseUShort();
-        check.argument(1 <= lookupType && lookupType <= 9, 'GPOS/GSUB lookup type ' + lookupType + ' unknown.');
-        var lookupFlag = this.parseUShort();
-        var useMarkFilteringSet = lookupFlag & 0x10;
-        return {
-            lookupType: lookupType,
-            lookupFlag: lookupFlag,
-            subtables: this.parseList(opentype_module_Parser.pointer(lookupTableParsers[lookupType])),
-            markFilteringSet: useMarkFilteringSet ? this.parseUShort() : undefined
-        };
-    }))) || [];
-};
-
-opentype_module_Parser.prototype.parseFeatureVariationsList = function() {
-    return this.parsePointer32(function() {
-        var majorVersion = this.parseUShort();
-        var minorVersion = this.parseUShort();
-        check.argument(majorVersion === 1 && minorVersion < 1, 'GPOS/GSUB feature variations table unknown.');
-        var featureVariations = this.parseRecordList32({
-            conditionSetOffset: opentype_module_Parser.offset32,
-            featureTableSubstitutionOffset: opentype_module_Parser.offset32
-        });
-        return featureVariations;
-    }) || [];
-};
-
-var parse = {
-    getByte: getByte,
-    getCard8: getByte,
-    getUShort: getUShort,
-    getCard16: getUShort,
-    getShort: getShort,
-    getULong: getULong,
-    getFixed: getFixed,
-    getTag: getTag,
-    getOffset: getOffset,
-    getBytes: getBytes,
-    bytesToString: bytesToString,
-    Parser: opentype_module_Parser,
-};
-
-// The `cmap` table stores the mappings from characters to glyphs.
-
-function parseCmapTableFormat12(cmap, p) {
-    //Skip reserved.
-    p.parseUShort();
-
-    // Length in bytes of the sub-tables.
-    cmap.length = p.parseULong();
-    cmap.language = p.parseULong();
-
-    var groupCount;
-    cmap.groupCount = groupCount = p.parseULong();
-    cmap.glyphIndexMap = {};
-
-    for (var i = 0; i < groupCount; i += 1) {
-        var startCharCode = p.parseULong();
-        var endCharCode = p.parseULong();
-        var startGlyphId = p.parseULong();
-
-        for (var c = startCharCode; c <= endCharCode; c += 1) {
-            cmap.glyphIndexMap[c] = startGlyphId;
-            startGlyphId++;
-        }
-    }
-}
-
-function parseCmapTableFormat4(cmap, p, data, start, offset) {
-    // Length in bytes of the sub-tables.
-    cmap.length = p.parseUShort();
-    cmap.language = p.parseUShort();
-
-    // segCount is stored x 2.
-    var segCount;
-    cmap.segCount = segCount = p.parseUShort() >> 1;
-
-    // Skip searchRange, entrySelector, rangeShift.
-    p.skip('uShort', 3);
-
-    // The "unrolled" mapping from character codes to glyph indices.
-    cmap.glyphIndexMap = {};
-    var endCountParser = new parse.Parser(data, start + offset + 14);
-    var startCountParser = new parse.Parser(data, start + offset + 16 + segCount * 2);
-    var idDeltaParser = new parse.Parser(data, start + offset + 16 + segCount * 4);
-    var idRangeOffsetParser = new parse.Parser(data, start + offset + 16 + segCount * 6);
-    var glyphIndexOffset = start + offset + 16 + segCount * 8;
-    for (var i = 0; i < segCount - 1; i += 1) {
-        var glyphIndex = (void 0);
-        var endCount = endCountParser.parseUShort();
-        var startCount = startCountParser.parseUShort();
-        var idDelta = idDeltaParser.parseShort();
-        var idRangeOffset = idRangeOffsetParser.parseUShort();
-        for (var c = startCount; c <= endCount; c += 1) {
-            if (idRangeOffset !== 0) {
-                // The idRangeOffset is relative to the current position in the idRangeOffset array.
-                // Take the current offset in the idRangeOffset array.
-                glyphIndexOffset = (idRangeOffsetParser.offset + idRangeOffsetParser.relativeOffset - 2);
-
-                // Add the value of the idRangeOffset, which will move us into the glyphIndex array.
-                glyphIndexOffset += idRangeOffset;
-
-                // Then add the character index of the current segment, multiplied by 2 for USHORTs.
-                glyphIndexOffset += (c - startCount) * 2;
-                glyphIndex = parse.getUShort(data, glyphIndexOffset);
-                if (glyphIndex !== 0) {
-                    glyphIndex = (glyphIndex + idDelta) & 0xFFFF;
-                }
-            } else {
-                glyphIndex = (c + idDelta) & 0xFFFF;
-            }
-
-            cmap.glyphIndexMap[c] = glyphIndex;
-        }
-    }
-}
-
-// Parse the `cmap` table. This table stores the mappings from characters to glyphs.
-// There are many available formats, but we only support the Windows format 4 and 12.
-// This function returns a `CmapEncoding` object or null if no supported format could be found.
-function parseCmapTable(data, start) {
-    var cmap = {};
-    cmap.version = parse.getUShort(data, start);
-    check.argument(cmap.version === 0, 'cmap table version should be 0.');
-
-    // The cmap table can contain many sub-tables, each with their own format.
-    // We're only interested in a "platform 0" (Unicode format) and "platform 3" (Windows format) table.
-    cmap.numTables = parse.getUShort(data, start + 2);
-    var offset = -1;
-    for (var i = cmap.numTables - 1; i >= 0; i -= 1) {
-        var platformId = parse.getUShort(data, start + 4 + (i * 8));
-        var encodingId = parse.getUShort(data, start + 4 + (i * 8) + 2);
-        if ((platformId === 3 && (encodingId === 0 || encodingId === 1 || encodingId === 10)) ||
-            (platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 2 || encodingId === 3 || encodingId === 4))) {
-            offset = parse.getULong(data, start + 4 + (i * 8) + 4);
-            break;
-        }
-    }
-
-    if (offset === -1) {
-        // There is no cmap table in the font that we support.
-        throw new Error('No valid cmap sub-tables found.');
-    }
-
-    var p = new parse.Parser(data, start + offset);
-    cmap.format = p.parseUShort();
-
-    if (cmap.format === 12) {
-        parseCmapTableFormat12(cmap, p);
-    } else if (cmap.format === 4) {
-        parseCmapTableFormat4(cmap, p, data, start, offset);
-    } else {
-        throw new Error('Only format 4 and 12 cmap tables are supported (found format ' + cmap.format + ').');
-    }
-
-    return cmap;
-}
-
-function addSegment(t, code, glyphIndex) {
-    t.segments.push({
-        end: code,
-        start: code,
-        delta: -(code - glyphIndex),
-        offset: 0,
-        glyphIndex: glyphIndex
-    });
-}
-
-function addTerminatorSegment(t) {
-    t.segments.push({
-        end: 0xFFFF,
-        start: 0xFFFF,
-        delta: 1,
-        offset: 0
-    });
-}
-
-// Make cmap table, format 4 by default, 12 if needed only
-function makeCmapTable(glyphs) {
-    // Plan 0 is the base Unicode Plan but emojis, for example are on another plan, and needs cmap 12 format (with 32bit)
-    var isPlan0Only = true;
-    var i;
-
-    // Check if we need to add cmap format 12 or if format 4 only is fine
-    for (i = glyphs.length - 1; i > 0; i -= 1) {
-        var g = glyphs.get(i);
-        if (g.unicode > 65535) {
-            console.log('Adding CMAP format 12 (needed!)');
-            isPlan0Only = false;
-            break;
-        }
-    }
-
-    var cmapTable = [
-        {name: 'version', type: 'USHORT', value: 0},
-        {name: 'numTables', type: 'USHORT', value: isPlan0Only ? 1 : 2},
-
-        // CMAP 4 header
-        {name: 'platformID', type: 'USHORT', value: 3},
-        {name: 'encodingID', type: 'USHORT', value: 1},
-        {name: 'offset', type: 'ULONG', value: isPlan0Only ? 12 : (12 + 8)}
-    ];
-
-    if (!isPlan0Only)
-        { cmapTable = cmapTable.concat([
-            // CMAP 12 header
-            {name: 'cmap12PlatformID', type: 'USHORT', value: 3}, // We encode only for PlatformID = 3 (Windows) because it is supported everywhere
-            {name: 'cmap12EncodingID', type: 'USHORT', value: 10},
-            {name: 'cmap12Offset', type: 'ULONG', value: 0}
-        ]); }
-
-    cmapTable = cmapTable.concat([
-        // CMAP 4 Subtable
-        {name: 'format', type: 'USHORT', value: 4},
-        {name: 'cmap4Length', type: 'USHORT', value: 0},
-        {name: 'language', type: 'USHORT', value: 0},
-        {name: 'segCountX2', type: 'USHORT', value: 0},
-        {name: 'searchRange', type: 'USHORT', value: 0},
-        {name: 'entrySelector', type: 'USHORT', value: 0},
-        {name: 'rangeShift', type: 'USHORT', value: 0}
-    ]);
-
-    var t = new table.Table('cmap', cmapTable);
-
-    t.segments = [];
-    for (i = 0; i < glyphs.length; i += 1) {
-        var glyph = glyphs.get(i);
-        for (var j = 0; j < glyph.unicodes.length; j += 1) {
-            addSegment(t, glyph.unicodes[j], i);
-        }
-
-        t.segments = t.segments.sort(function (a, b) {
-            return a.start - b.start;
-        });
-    }
-
-    addTerminatorSegment(t);
-
-    var segCount = t.segments.length;
-    var segCountToRemove = 0;
-
-    // CMAP 4
-    // Set up parallel segment arrays.
-    var endCounts = [];
-    var startCounts = [];
-    var idDeltas = [];
-    var idRangeOffsets = [];
-    var glyphIds = [];
-
-    // CMAP 12
-    var cmap12Groups = [];
-
-    // Reminder this loop is not following the specification at 100%
-    // The specification -> find suites of characters and make a group
-    // Here we're doing one group for each letter
-    // Doing as the spec can save 8 times (or more) space
-    for (i = 0; i < segCount; i += 1) {
-        var segment = t.segments[i];
-
-        // CMAP 4
-        if (segment.end <= 65535 && segment.start <= 65535) {
-            endCounts = endCounts.concat({name: 'end_' + i, type: 'USHORT', value: segment.end});
-            startCounts = startCounts.concat({name: 'start_' + i, type: 'USHORT', value: segment.start});
-            idDeltas = idDeltas.concat({name: 'idDelta_' + i, type: 'SHORT', value: segment.delta});
-            idRangeOffsets = idRangeOffsets.concat({name: 'idRangeOffset_' + i, type: 'USHORT', value: segment.offset});
-            if (segment.glyphId !== undefined) {
-                glyphIds = glyphIds.concat({name: 'glyph_' + i, type: 'USHORT', value: segment.glyphId});
-            }
-        } else {
-            // Skip Unicode > 65535 (16bit unsigned max) for CMAP 4, will be added in CMAP 12
-            segCountToRemove += 1;
-        }
-
-        // CMAP 12
-        // Skip Terminator Segment
-        if (!isPlan0Only && segment.glyphIndex !== undefined) {
-            cmap12Groups = cmap12Groups.concat({name: 'cmap12Start_' + i, type: 'ULONG', value: segment.start});
-            cmap12Groups = cmap12Groups.concat({name: 'cmap12End_' + i, type: 'ULONG', value: segment.end});
-            cmap12Groups = cmap12Groups.concat({name: 'cmap12Glyph_' + i, type: 'ULONG', value: segment.glyphIndex});
-        }
-    }
-
-    // CMAP 4 Subtable
-    t.segCountX2 = (segCount - segCountToRemove) * 2;
-    t.searchRange = Math.pow(2, Math.floor(Math.log((segCount - segCountToRemove)) / Math.log(2))) * 2;
-    t.entrySelector = Math.log(t.searchRange / 2) / Math.log(2);
-    t.rangeShift = t.segCountX2 - t.searchRange;
-
-    t.fields = t.fields.concat(endCounts);
-    t.fields.push({name: 'reservedPad', type: 'USHORT', value: 0});
-    t.fields = t.fields.concat(startCounts);
-    t.fields = t.fields.concat(idDeltas);
-    t.fields = t.fields.concat(idRangeOffsets);
-    t.fields = t.fields.concat(glyphIds);
-
-    t.cmap4Length = 14 + // Subtable header
-        endCounts.length * 2 +
-        2 + // reservedPad
-        startCounts.length * 2 +
-        idDeltas.length * 2 +
-        idRangeOffsets.length * 2 +
-        glyphIds.length * 2;
-
-    if (!isPlan0Only) {
-        // CMAP 12 Subtable
-        var cmap12Length = 16 + // Subtable header
-            cmap12Groups.length * 4;
-
-        t.cmap12Offset = 12 + (2 * 2) + 4 + t.cmap4Length;
-        t.fields = t.fields.concat([
-            {name: 'cmap12Format', type: 'USHORT', value: 12},
-            {name: 'cmap12Reserved', type: 'USHORT', value: 0},
-            {name: 'cmap12Length', type: 'ULONG', value: cmap12Length},
-            {name: 'cmap12Language', type: 'ULONG', value: 0},
-            {name: 'cmap12nGroups', type: 'ULONG', value: cmap12Groups.length / 3}
-        ]);
-
-        t.fields = t.fields.concat(cmap12Groups);
-    }
-
-    return t;
-}
-
-var cmap = { parse: parseCmapTable, make: makeCmapTable };
-
-// Glyph encoding
-
-var cffStandardStrings = [
-    '.notdef', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright',
-    'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two',
-    'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater',
-    'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
-    'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',
-    'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
-    'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', 'exclamdown', 'cent', 'sterling',
-    'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle', 'quotedblleft', 'guillemotleft',
-    'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'endash', 'dagger', 'daggerdbl', 'periodcentered', 'paragraph',
-    'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright', 'guillemotright', 'ellipsis', 'perthousand',
-    'questiondown', 'grave', 'acute', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'dieresis', 'ring',
-    'cedilla', 'hungarumlaut', 'ogonek', 'caron', 'emdash', 'AE', 'ordfeminine', 'Lslash', 'Oslash', 'OE',
-    'ordmasculine', 'ae', 'dotlessi', 'lslash', 'oslash', 'oe', 'germandbls', 'onesuperior', 'logicalnot', 'mu',
-    'trademark', 'Eth', 'onehalf', 'plusminus', 'Thorn', 'onequarter', 'divide', 'brokenbar', 'degree', 'thorn',
-    'threequarters', 'twosuperior', 'registered', 'minus', 'eth', 'multiply', 'threesuperior', 'copyright',
-    'Aacute', 'Acircumflex', 'Adieresis', 'Agrave', 'Aring', 'Atilde', 'Ccedilla', 'Eacute', 'Ecircumflex',
-    'Edieresis', 'Egrave', 'Iacute', 'Icircumflex', 'Idieresis', 'Igrave', 'Ntilde', 'Oacute', 'Ocircumflex',
-    'Odieresis', 'Ograve', 'Otilde', 'Scaron', 'Uacute', 'Ucircumflex', 'Udieresis', 'Ugrave', 'Yacute',
-    'Ydieresis', 'Zcaron', 'aacute', 'acircumflex', 'adieresis', 'agrave', 'aring', 'atilde', 'ccedilla', 'eacute',
-    'ecircumflex', 'edieresis', 'egrave', 'iacute', 'icircumflex', 'idieresis', 'igrave', 'ntilde', 'oacute',
-    'ocircumflex', 'odieresis', 'ograve', 'otilde', 'scaron', 'uacute', 'ucircumflex', 'udieresis', 'ugrave',
-    'yacute', 'ydieresis', 'zcaron', 'exclamsmall', 'Hungarumlautsmall', 'dollaroldstyle', 'dollarsuperior',
-    'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', '266 ff', 'onedotenleader',
-    'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle', 'fouroldstyle', 'fiveoldstyle', 'sixoldstyle',
-    'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'commasuperior', 'threequartersemdash', 'periodsuperior',
-    'questionsmall', 'asuperior', 'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', 'isuperior', 'lsuperior',
-    'msuperior', 'nsuperior', 'osuperior', 'rsuperior', 'ssuperior', 'tsuperior', 'ff', 'ffi', 'ffl',
-    'parenleftinferior', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall',
-    'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall',
-    'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',
-    'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', 'exclamdownsmall',
-    'centoldstyle', 'Lslashsmall', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall', 'Brevesmall', 'Caronsmall',
-    'Dotaccentsmall', 'Macronsmall', 'figuredash', 'hypheninferior', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall',
-    'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds',
-    'zerosuperior', 'foursuperior', 'fivesuperior', 'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior',
-    'zeroinferior', 'oneinferior', 'twoinferior', 'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior',
-    'seveninferior', 'eightinferior', 'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior',
-    'commainferior', 'Agravesmall', 'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall',
-    'Aringsmall', 'AEsmall', 'Ccedillasmall', 'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall',
-    'Igravesmall', 'Iacutesmall', 'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall',
-    'Oacutesmall', 'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall',
-    'Uacutesmall', 'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall', '001.000',
-    '001.001', '001.002', '001.003', 'Black', 'Bold', 'Book', 'Light', 'Medium', 'Regular', 'Roman', 'Semibold'];
-
-var cffStandardEncoding = [
-    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
-    '', '', '', '', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent', 'ampersand', 'quoteright',
-    'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash', 'zero', 'one', 'two',
-    'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less', 'equal', 'greater',
-    'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S',
-    'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright', 'asciicircum', 'underscore',
-    'quoteleft', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
-    'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde', '', '', '', '', '', '', '', '',
-    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
-    'exclamdown', 'cent', 'sterling', 'fraction', 'yen', 'florin', 'section', 'currency', 'quotesingle',
-    'quotedblleft', 'guillemotleft', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', '', 'endash', 'dagger',
-    'daggerdbl', 'periodcentered', '', 'paragraph', 'bullet', 'quotesinglbase', 'quotedblbase', 'quotedblright',
-    'guillemotright', 'ellipsis', 'perthousand', '', 'questiondown', '', 'grave', 'acute', 'circumflex', 'tilde',
-    'macron', 'breve', 'dotaccent', 'dieresis', '', 'ring', 'cedilla', '', 'hungarumlaut', 'ogonek', 'caron',
-    'emdash', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', 'AE', '', 'ordfeminine', '', '', '',
-    '', 'Lslash', 'Oslash', 'OE', 'ordmasculine', '', '', '', '', '', 'ae', '', '', '', 'dotlessi', '', '',
-    'lslash', 'oslash', 'oe', 'germandbls'];
-
-var cffExpertEncoding = [
-    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
-    '', '', '', '', 'space', 'exclamsmall', 'Hungarumlautsmall', '', 'dollaroldstyle', 'dollarsuperior',
-    'ampersandsmall', 'Acutesmall', 'parenleftsuperior', 'parenrightsuperior', 'twodotenleader', 'onedotenleader',
-    'comma', 'hyphen', 'period', 'fraction', 'zerooldstyle', 'oneoldstyle', 'twooldstyle', 'threeoldstyle',
-    'fouroldstyle', 'fiveoldstyle', 'sixoldstyle', 'sevenoldstyle', 'eightoldstyle', 'nineoldstyle', 'colon',
-    'semicolon', 'commasuperior', 'threequartersemdash', 'periodsuperior', 'questionsmall', '', 'asuperior',
-    'bsuperior', 'centsuperior', 'dsuperior', 'esuperior', '', '', 'isuperior', '', '', 'lsuperior', 'msuperior',
-    'nsuperior', 'osuperior', '', '', 'rsuperior', 'ssuperior', 'tsuperior', '', 'ff', 'fi', 'fl', 'ffi', 'ffl',
-    'parenleftinferior', '', 'parenrightinferior', 'Circumflexsmall', 'hyphensuperior', 'Gravesmall', 'Asmall',
-    'Bsmall', 'Csmall', 'Dsmall', 'Esmall', 'Fsmall', 'Gsmall', 'Hsmall', 'Ismall', 'Jsmall', 'Ksmall', 'Lsmall',
-    'Msmall', 'Nsmall', 'Osmall', 'Psmall', 'Qsmall', 'Rsmall', 'Ssmall', 'Tsmall', 'Usmall', 'Vsmall', 'Wsmall',
-    'Xsmall', 'Ysmall', 'Zsmall', 'colonmonetary', 'onefitted', 'rupiah', 'Tildesmall', '', '', '', '', '', '', '',
-    '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '',
-    'exclamdownsmall', 'centoldstyle', 'Lslashsmall', '', '', 'Scaronsmall', 'Zcaronsmall', 'Dieresissmall',
-    'Brevesmall', 'Caronsmall', '', 'Dotaccentsmall', '', '', 'Macronsmall', '', '', 'figuredash', 'hypheninferior',
-    '', '', 'Ogoneksmall', 'Ringsmall', 'Cedillasmall', '', '', '', 'onequarter', 'onehalf', 'threequarters',
-    'questiondownsmall', 'oneeighth', 'threeeighths', 'fiveeighths', 'seveneighths', 'onethird', 'twothirds', '',
-    '', 'zerosuperior', 'onesuperior', 'twosuperior', 'threesuperior', 'foursuperior', 'fivesuperior',
-    'sixsuperior', 'sevensuperior', 'eightsuperior', 'ninesuperior', 'zeroinferior', 'oneinferior', 'twoinferior',
-    'threeinferior', 'fourinferior', 'fiveinferior', 'sixinferior', 'seveninferior', 'eightinferior',
-    'nineinferior', 'centinferior', 'dollarinferior', 'periodinferior', 'commainferior', 'Agravesmall',
-    'Aacutesmall', 'Acircumflexsmall', 'Atildesmall', 'Adieresissmall', 'Aringsmall', 'AEsmall', 'Ccedillasmall',
-    'Egravesmall', 'Eacutesmall', 'Ecircumflexsmall', 'Edieresissmall', 'Igravesmall', 'Iacutesmall',
-    'Icircumflexsmall', 'Idieresissmall', 'Ethsmall', 'Ntildesmall', 'Ogravesmall', 'Oacutesmall',
-    'Ocircumflexsmall', 'Otildesmall', 'Odieresissmall', 'OEsmall', 'Oslashsmall', 'Ugravesmall', 'Uacutesmall',
-    'Ucircumflexsmall', 'Udieresissmall', 'Yacutesmall', 'Thornsmall', 'Ydieresissmall'];
-
-var standardNames = [
-    '.notdef', '.null', 'nonmarkingreturn', 'space', 'exclam', 'quotedbl', 'numbersign', 'dollar', 'percent',
-    'ampersand', 'quotesingle', 'parenleft', 'parenright', 'asterisk', 'plus', 'comma', 'hyphen', 'period', 'slash',
-    'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon', 'semicolon', 'less',
-    'equal', 'greater', 'question', 'at', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
-    'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'bracketleft', 'backslash', 'bracketright',
-    'asciicircum', 'underscore', 'grave', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
-    'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'braceleft', 'bar', 'braceright', 'asciitilde',
-    'Adieresis', 'Aring', 'Ccedilla', 'Eacute', 'Ntilde', 'Odieresis', 'Udieresis', 'aacute', 'agrave',
-    'acircumflex', 'adieresis', 'atilde', 'aring', 'ccedilla', 'eacute', 'egrave', 'ecircumflex', 'edieresis',
-    'iacute', 'igrave', 'icircumflex', 'idieresis', 'ntilde', 'oacute', 'ograve', 'ocircumflex', 'odieresis',
-    'otilde', 'uacute', 'ugrave', 'ucircumflex', 'udieresis', 'dagger', 'degree', 'cent', 'sterling', 'section',
-    'bullet', 'paragraph', 'germandbls', 'registered', 'copyright', 'trademark', 'acute', 'dieresis', 'notequal',
-    'AE', 'Oslash', 'infinity', 'plusminus', 'lessequal', 'greaterequal', 'yen', 'mu', 'partialdiff', 'summation',
-    'product', 'pi', 'integral', 'ordfeminine', 'ordmasculine', 'Omega', 'ae', 'oslash', 'questiondown',
-    'exclamdown', 'logicalnot', 'radical', 'florin', 'approxequal', 'Delta', 'guillemotleft', 'guillemotright',
-    'ellipsis', 'nonbreakingspace', 'Agrave', 'Atilde', 'Otilde', 'OE', 'oe', 'endash', 'emdash', 'quotedblleft',
-    'quotedblright', 'quoteleft', 'quoteright', 'divide', 'lozenge', 'ydieresis', 'Ydieresis', 'fraction',
-    'currency', 'guilsinglleft', 'guilsinglright', 'fi', 'fl', 'daggerdbl', 'periodcentered', 'quotesinglbase',
-    'quotedblbase', 'perthousand', 'Acircumflex', 'Ecircumflex', 'Aacute', 'Edieresis', 'Egrave', 'Iacute',
-    'Icircumflex', 'Idieresis', 'Igrave', 'Oacute', 'Ocircumflex', 'apple', 'Ograve', 'Uacute', 'Ucircumflex',
-    'Ugrave', 'dotlessi', 'circumflex', 'tilde', 'macron', 'breve', 'dotaccent', 'ring', 'cedilla', 'hungarumlaut',
-    'ogonek', 'caron', 'Lslash', 'lslash', 'Scaron', 'scaron', 'Zcaron', 'zcaron', 'brokenbar', 'Eth', 'eth',
-    'Yacute', 'yacute', 'Thorn', 'thorn', 'minus', 'multiply', 'onesuperior', 'twosuperior', 'threesuperior',
-    'onehalf', 'onequarter', 'threequarters', 'franc', 'Gbreve', 'gbreve', 'Idotaccent', 'Scedilla', 'scedilla',
-    'Cacute', 'cacute', 'Ccaron', 'ccaron', 'dcroat'];
-
-/**
- * This is the encoding used for fonts created from scratch.
- * It loops through all glyphs and finds the appropriate unicode value.
- * Since it's linear time, other encodings will be faster.
- * @exports opentype.DefaultEncoding
- * @class
- * @constructor
- * @param {opentype.Font}
- */
-function DefaultEncoding(font) {
-    this.font = font;
-}
-
-DefaultEncoding.prototype.charToGlyphIndex = function(c) {
-    var code = c.codePointAt(0);
-    var glyphs = this.font.glyphs;
-    if (glyphs) {
-        for (var i = 0; i < glyphs.length; i += 1) {
-            var glyph = glyphs.get(i);
-            for (var j = 0; j < glyph.unicodes.length; j += 1) {
-                if (glyph.unicodes[j] === code) {
-                    return i;
-                }
-            }
-        }
-    }
-    return null;
-};
-
-/**
- * @exports opentype.CmapEncoding
- * @class
- * @constructor
- * @param {Object} cmap - a object with the cmap encoded data
- */
-function CmapEncoding(cmap) {
-    this.cmap = cmap;
-}
-
-/**
- * @param  {string} c - the character
- * @return {number} The glyph index.
- */
-CmapEncoding.prototype.charToGlyphIndex = function(c) {
-    return this.cmap.glyphIndexMap[c.codePointAt(0)] || 0;
-};
-
-/**
- * @exports opentype.CffEncoding
- * @class
- * @constructor
- * @param {string} encoding - The encoding
- * @param {Array} charset - The character set.
- */
-function CffEncoding(encoding, charset) {
-    this.encoding = encoding;
-    this.charset = charset;
-}
-
-/**
- * @param  {string} s - The character
- * @return {number} The index.
- */
-CffEncoding.prototype.charToGlyphIndex = function(s) {
-    var code = s.codePointAt(0);
-    var charName = this.encoding[code];
-    return this.charset.indexOf(charName);
-};
-
-/**
- * @exports opentype.GlyphNames
- * @class
- * @constructor
- * @param {Object} post
- */
-function GlyphNames(post) {
-    switch (post.version) {
-        case 1:
-            this.names = standardNames.slice();
-            break;
-        case 2:
-            this.names = new Array(post.numberOfGlyphs);
-            for (var i = 0; i < post.numberOfGlyphs; i++) {
-                if (post.glyphNameIndex[i] < standardNames.length) {
-                    this.names[i] = standardNames[post.glyphNameIndex[i]];
-                } else {
-                    this.names[i] = post.names[post.glyphNameIndex[i] - standardNames.length];
-                }
-            }
-
-            break;
-        case 2.5:
-            this.names = new Array(post.numberOfGlyphs);
-            for (var i$1 = 0; i$1 < post.numberOfGlyphs; i$1++) {
-                this.names[i$1] = standardNames[i$1 + post.glyphNameIndex[i$1]];
-            }
-
-            break;
-        case 3:
-            this.names = [];
-            break;
-        default:
-            this.names = [];
-            break;
-    }
-}
-
-/**
- * Gets the index of a glyph by name.
- * @param  {string} name - The glyph name
- * @return {number} The index
- */
-GlyphNames.prototype.nameToGlyphIndex = function(name) {
-    return this.names.indexOf(name);
-};
-
-/**
- * @param  {number} gid
- * @return {string}
- */
-GlyphNames.prototype.glyphIndexToName = function(gid) {
-    return this.names[gid];
-};
-
-function addGlyphNamesAll(font) {
-    var glyph;
-    var glyphIndexMap = font.tables.cmap.glyphIndexMap;
-    var charCodes = Object.keys(glyphIndexMap);
-
-    for (var i = 0; i < charCodes.length; i += 1) {
-        var c = charCodes[i];
-        var glyphIndex = glyphIndexMap[c];
-        glyph = font.glyphs.get(glyphIndex);
-        glyph.addUnicode(parseInt(c));
-    }
-
-    for (var i$1 = 0; i$1 < font.glyphs.length; i$1 += 1) {
-        glyph = font.glyphs.get(i$1);
-        if (font.cffEncoding) {
-            if (font.isCIDFont) {
-                glyph.name = 'gid' + i$1;
-            } else {
-                glyph.name = font.cffEncoding.charset[i$1];
-            }
-        } else if (font.glyphNames.names) {
-            glyph.name = font.glyphNames.glyphIndexToName(i$1);
-        }
-    }
-}
-
-function addGlyphNamesToUnicodeMap(font) {
-    font._IndexToUnicodeMap = {};
-
-    var glyphIndexMap = font.tables.cmap.glyphIndexMap;
-    var charCodes = Object.keys(glyphIndexMap);
-
-    for (var i = 0; i < charCodes.length; i += 1) {
-        var c = charCodes[i];
-        var glyphIndex = glyphIndexMap[c];
-        if (font._IndexToUnicodeMap[glyphIndex] === undefined) {
-            font._IndexToUnicodeMap[glyphIndex] = {
-                unicodes: [parseInt(c)]
-            };
-        } else {
-            font._IndexToUnicodeMap[glyphIndex].unicodes.push(parseInt(c));
-        }
-    }
-}
-
-/**
- * @alias opentype.addGlyphNames
- * @param {opentype.Font}
- * @param {Object}
- */
-function addGlyphNames(font, opt) {
-    if (opt.lowMemory) {
-        addGlyphNamesToUnicodeMap(font);
-    } else {
-        addGlyphNamesAll(font);
-    }
-}
-
-// Drawing utility functions.
-
-// Draw a line on the given context from point `x1,y1` to point `x2,y2`.
-function line(ctx, x1, y1, x2, y2) {
-    ctx.beginPath();
-    ctx.moveTo(x1, y1);
-    ctx.lineTo(x2, y2);
-    ctx.stroke();
-}
-
-var draw = { line: line };
-
-// The Glyph object
-// import glyf from './tables/glyf' Can't be imported here, because it's a circular dependency
-
-function getPathDefinition(glyph, path) {
-    var _path = path || new Path();
-    return {
-        configurable: true,
-
-        get: function() {
-            if (typeof _path === 'function') {
-                _path = _path();
-            }
-
-            return _path;
-        },
-
-        set: function(p) {
-            _path = p;
-        }
-    };
-}
-/**
- * @typedef GlyphOptions
- * @type Object
- * @property {string} [name] - The glyph name
- * @property {number} [unicode]
- * @property {Array} [unicodes]
- * @property {number} [xMin]
- * @property {number} [yMin]
- * @property {number} [xMax]
- * @property {number} [yMax]
- * @property {number} [advanceWidth]
- */
-
-// A Glyph is an individual mark that often corresponds to a character.
-// Some glyphs, such as ligatures, are a combination of many characters.
-// Glyphs are the basic building blocks of a font.
-//
-// The `Glyph` class contains utility methods for drawing the path and its points.
-/**
- * @exports opentype.Glyph
- * @class
- * @param {GlyphOptions}
- * @constructor
- */
-function Glyph(options) {
-    // By putting all the code on a prototype function (which is only declared once)
-    // we reduce the memory requirements for larger fonts by some 2%
-    this.bindConstructorValues(options);
-}
-
-/**
- * @param  {GlyphOptions}
- */
-Glyph.prototype.bindConstructorValues = function(options) {
-    this.index = options.index || 0;
-
-    // These three values cannot be deferred for memory optimization:
-    this.name = options.name || null;
-    this.unicode = options.unicode || undefined;
-    this.unicodes = options.unicodes || options.unicode !== undefined ? [options.unicode] : [];
-
-    // But by binding these values only when necessary, we reduce can
-    // the memory requirements by almost 3% for larger fonts.
-    if ('xMin' in options) {
-        this.xMin = options.xMin;
-    }
-
-    if ('yMin' in options) {
-        this.yMin = options.yMin;
-    }
-
-    if ('xMax' in options) {
-        this.xMax = options.xMax;
-    }
-
-    if ('yMax' in options) {
-        this.yMax = options.yMax;
-    }
-
-    if ('advanceWidth' in options) {
-        this.advanceWidth = options.advanceWidth;
-    }
-
-    // The path for a glyph is the most memory intensive, and is bound as a value
-    // with a getter/setter to ensure we actually do path parsing only once the
-    // path is actually needed by anything.
-    Object.defineProperty(this, 'path', getPathDefinition(this, options.path));
-};
-
-/**
- * @param {number}
- */
-Glyph.prototype.addUnicode = function(unicode) {
-    if (this.unicodes.length === 0) {
-        this.unicode = unicode;
-    }
-
-    this.unicodes.push(unicode);
-};
-
-/**
- * Calculate the minimum bounding box for this glyph.
- * @return {opentype.BoundingBox}
- */
-Glyph.prototype.getBoundingBox = function() {
-    return this.path.getBoundingBox();
-};
-
-/**
- * Convert the glyph to a Path we can draw on a drawing context.
- * @param  {number} [x=0] - Horizontal position of the beginning of the text.
- * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
- * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
- * @param  {Object=} options - xScale, yScale to stretch the glyph.
- * @param  {opentype.Font} if hinting is to be used, the font
- * @return {opentype.Path}
- */
-Glyph.prototype.getPath = function(x, y, fontSize, options, font) {
-    x = x !== undefined ? x : 0;
-    y = y !== undefined ? y : 0;
-    fontSize = fontSize !== undefined ? fontSize : 72;
-    var commands;
-    var hPoints;
-    if (!options) { options = { }; }
-    var xScale = options.xScale;
-    var yScale = options.yScale;
-
-    if (options.hinting && font && font.hinting) {
-        // in case of hinting, the hinting engine takes care
-        // of scaling the points (not the path) before hinting.
-        hPoints = this.path && font.hinting.exec(this, fontSize);
-        // in case the hinting engine failed hPoints is undefined
-        // and thus reverts to plain rending
-    }
-
-    if (hPoints) {
-        // Call font.hinting.getCommands instead of `glyf.getPath(hPoints).commands` to avoid a circular dependency
-        commands = font.hinting.getCommands(hPoints);
-        x = Math.round(x);
-        y = Math.round(y);
-        // TODO in case of hinting xyScaling is not yet supported
-        xScale = yScale = 1;
-    } else {
-        commands = this.path.commands;
-        var scale = 1 / (this.path.unitsPerEm || 1000) * fontSize;
-        if (xScale === undefined) { xScale = scale; }
-        if (yScale === undefined) { yScale = scale; }
-    }
-
-    var p = new Path();
-    for (var i = 0; i < commands.length; i += 1) {
-        var cmd = commands[i];
-        if (cmd.type === 'M') {
-            p.moveTo(x + (cmd.x * xScale), y + (-cmd.y * yScale));
-        } else if (cmd.type === 'L') {
-            p.lineTo(x + (cmd.x * xScale), y + (-cmd.y * yScale));
-        } else if (cmd.type === 'Q') {
-            p.quadraticCurveTo(x + (cmd.x1 * xScale), y + (-cmd.y1 * yScale),
-                               x + (cmd.x * xScale), y + (-cmd.y * yScale));
-        } else if (cmd.type === 'C') {
-            p.curveTo(x + (cmd.x1 * xScale), y + (-cmd.y1 * yScale),
-                      x + (cmd.x2 * xScale), y + (-cmd.y2 * yScale),
-                      x + (cmd.x * xScale), y + (-cmd.y * yScale));
-        } else if (cmd.type === 'Z') {
-            p.closePath();
-        }
-    }
-
-    return p;
-};
-
-/**
- * Split the glyph into contours.
- * This function is here for backwards compatibility, and to
- * provide raw access to the TrueType glyph outlines.
- * @return {Array}
- */
-Glyph.prototype.getContours = function() {
-    if (this.points === undefined) {
-        return [];
-    }
-
-    var contours = [];
-    var currentContour = [];
-    for (var i = 0; i < this.points.length; i += 1) {
-        var pt = this.points[i];
-        currentContour.push(pt);
-        if (pt.lastPointOfContour) {
-            contours.push(currentContour);
-            currentContour = [];
-        }
-    }
-
-    check.argument(currentContour.length === 0, 'There are still points left in the current contour.');
-    return contours;
-};
-
-/**
- * Calculate the xMin/yMin/xMax/yMax/lsb/rsb for a Glyph.
- * @return {Object}
- */
-Glyph.prototype.getMetrics = function() {
-    var commands = this.path.commands;
-    var xCoords = [];
-    var yCoords = [];
-    for (var i = 0; i < commands.length; i += 1) {
-        var cmd = commands[i];
-        if (cmd.type !== 'Z') {
-            xCoords.push(cmd.x);
-            yCoords.push(cmd.y);
-        }
-
-        if (cmd.type === 'Q' || cmd.type === 'C') {
-            xCoords.push(cmd.x1);
-            yCoords.push(cmd.y1);
-        }
-
-        if (cmd.type === 'C') {
-            xCoords.push(cmd.x2);
-            yCoords.push(cmd.y2);
-        }
-    }
-
-    var metrics = {
-        xMin: Math.min.apply(null, xCoords),
-        yMin: Math.min.apply(null, yCoords),
-        xMax: Math.max.apply(null, xCoords),
-        yMax: Math.max.apply(null, yCoords),
-        leftSideBearing: this.leftSideBearing
-    };
-
-    if (!isFinite(metrics.xMin)) {
-        metrics.xMin = 0;
-    }
-
-    if (!isFinite(metrics.xMax)) {
-        metrics.xMax = this.advanceWidth;
-    }
-
-    if (!isFinite(metrics.yMin)) {
-        metrics.yMin = 0;
-    }
-
-    if (!isFinite(metrics.yMax)) {
-        metrics.yMax = 0;
-    }
-
-    metrics.rightSideBearing = this.advanceWidth - metrics.leftSideBearing - (metrics.xMax - metrics.xMin);
-    return metrics;
-};
-
-/**
- * Draw the glyph on the given context.
- * @param  {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.
- * @param  {number} [x=0] - Horizontal position of the beginning of the text.
- * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
- * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
- * @param  {Object=} options - xScale, yScale to stretch the glyph.
- */
-Glyph.prototype.draw = function(ctx, x, y, fontSize, options) {
-    this.getPath(x, y, fontSize, options).draw(ctx);
-};
-
-/**
- * Draw the points of the glyph.
- * On-curve points will be drawn in blue, off-curve points will be drawn in red.
- * @param  {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.
- * @param  {number} [x=0] - Horizontal position of the beginning of the text.
- * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
- * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
- */
-Glyph.prototype.drawPoints = function(ctx, x, y, fontSize) {
-    function drawCircles(l, x, y, scale) {
-        ctx.beginPath();
-        for (var j = 0; j < l.length; j += 1) {
-            ctx.moveTo(x + (l[j].x * scale), y + (l[j].y * scale));
-            ctx.arc(x + (l[j].x * scale), y + (l[j].y * scale), 2, 0, Math.PI * 2, false);
-        }
-
-        ctx.closePath();
-        ctx.fill();
-    }
-
-    x = x !== undefined ? x : 0;
-    y = y !== undefined ? y : 0;
-    fontSize = fontSize !== undefined ? fontSize : 24;
-    var scale = 1 / this.path.unitsPerEm * fontSize;
-
-    var blueCircles = [];
-    var redCircles = [];
-    var path = this.path;
-    for (var i = 0; i < path.commands.length; i += 1) {
-        var cmd = path.commands[i];
-        if (cmd.x !== undefined) {
-            blueCircles.push({x: cmd.x, y: -cmd.y});
-        }
-
-        if (cmd.x1 !== undefined) {
-            redCircles.push({x: cmd.x1, y: -cmd.y1});
-        }
-
-        if (cmd.x2 !== undefined) {
-            redCircles.push({x: cmd.x2, y: -cmd.y2});
-        }
-    }
-
-    ctx.fillStyle = 'blue';
-    drawCircles(blueCircles, x, y, scale);
-    ctx.fillStyle = 'red';
-    drawCircles(redCircles, x, y, scale);
-};
-
-/**
- * Draw lines indicating important font measurements.
- * Black lines indicate the origin of the coordinate system (point 0,0).
- * Blue lines indicate the glyph bounding box.
- * Green line indicates the advance width of the glyph.
- * @param  {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.
- * @param  {number} [x=0] - Horizontal position of the beginning of the text.
- * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
- * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
- */
-Glyph.prototype.drawMetrics = function(ctx, x, y, fontSize) {
-    var scale;
-    x = x !== undefined ? x : 0;
-    y = y !== undefined ? y : 0;
-    fontSize = fontSize !== undefined ? fontSize : 24;
-    scale = 1 / this.path.unitsPerEm * fontSize;
-    ctx.lineWidth = 1;
-
-    // Draw the origin
-    ctx.strokeStyle = 'black';
-    draw.line(ctx, x, -10000, x, 10000);
-    draw.line(ctx, -10000, y, 10000, y);
-
-    // This code is here due to memory optimization: by not using
-    // defaults in the constructor, we save a notable amount of memory.
-    var xMin = this.xMin || 0;
-    var yMin = this.yMin || 0;
-    var xMax = this.xMax || 0;
-    var yMax = this.yMax || 0;
-    var advanceWidth = this.advanceWidth || 0;
-
-    // Draw the glyph box
-    ctx.strokeStyle = 'blue';
-    draw.line(ctx, x + (xMin * scale), -10000, x + (xMin * scale), 10000);
-    draw.line(ctx, x + (xMax * scale), -10000, x + (xMax * scale), 10000);
-    draw.line(ctx, -10000, y + (-yMin * scale), 10000, y + (-yMin * scale));
-    draw.line(ctx, -10000, y + (-yMax * scale), 10000, y + (-yMax * scale));
-
-    // Draw the advance width
-    ctx.strokeStyle = 'green';
-    draw.line(ctx, x + (advanceWidth * scale), -10000, x + (advanceWidth * scale), 10000);
-};
-
-// The GlyphSet object
-
-// Define a property on the glyph that depends on the path being loaded.
-function defineDependentProperty(glyph, externalName, internalName) {
-    Object.defineProperty(glyph, externalName, {
-        get: function() {
-            // Request the path property to make sure the path is loaded.
-            glyph.path; // jshint ignore:line
-            return glyph[internalName];
-        },
-        set: function(newValue) {
-            glyph[internalName] = newValue;
-        },
-        enumerable: true,
-        configurable: true
-    });
-}
-
-/**
- * A GlyphSet represents all glyphs available in the font, but modelled using
- * a deferred glyph loader, for retrieving glyphs only once they are absolutely
- * necessary, to keep the memory footprint down.
- * @exports opentype.GlyphSet
- * @class
- * @param {opentype.Font}
- * @param {Array}
- */
-function GlyphSet(font, glyphs) {
-    this.font = font;
-    this.glyphs = {};
-    if (Array.isArray(glyphs)) {
-        for (var i = 0; i < glyphs.length; i++) {
-            var glyph = glyphs[i];
-            glyph.path.unitsPerEm = font.unitsPerEm;
-            this.glyphs[i] = glyph;
-        }
-    }
-
-    this.length = (glyphs && glyphs.length) || 0;
-}
-
-/**
- * @param  {number} index
- * @return {opentype.Glyph}
- */
-GlyphSet.prototype.get = function(index) {
-    // this.glyphs[index] is 'undefined' when low memory mode is on. glyph is pushed on request only.
-    if (this.glyphs[index] === undefined) {
-        this.font._push(index);
-        if (typeof this.glyphs[index] === 'function') {
-            this.glyphs[index] = this.glyphs[index]();
-        }
-
-        var glyph = this.glyphs[index];
-        var unicodeObj = this.font._IndexToUnicodeMap[index];
-
-        if (unicodeObj) {
-            for (var j = 0; j < unicodeObj.unicodes.length; j++)
-                { glyph.addUnicode(unicodeObj.unicodes[j]); }
-        }
-
-        if (this.font.cffEncoding) {
-            if (this.font.isCIDFont) {
-                glyph.name = 'gid' + index;
-            } else {
-                glyph.name = this.font.cffEncoding.charset[index];
-            }
-        } else if (this.font.glyphNames.names) {
-            glyph.name = this.font.glyphNames.glyphIndexToName(index);
-        }
-
-        this.glyphs[index].advanceWidth = this.font._hmtxTableData[index].advanceWidth;
-        this.glyphs[index].leftSideBearing = this.font._hmtxTableData[index].leftSideBearing;
-    } else {
-        if (typeof this.glyphs[index] === 'function') {
-            this.glyphs[index] = this.glyphs[index]();
-        }
-    }
-
-    return this.glyphs[index];
-};
-
-/**
- * @param  {number} index
- * @param  {Object}
- */
-GlyphSet.prototype.push = function(index, loader) {
-    this.glyphs[index] = loader;
-    this.length++;
-};
-
-/**
- * @alias opentype.glyphLoader
- * @param  {opentype.Font} font
- * @param  {number} index
- * @return {opentype.Glyph}
- */
-function glyphLoader(font, index) {
-    return new Glyph({index: index, font: font});
-}
-
-/**
- * Generate a stub glyph that can be filled with all metadata *except*
- * the "points" and "path" properties, which must be loaded only once
- * the glyph's path is actually requested for text shaping.
- * @alias opentype.ttfGlyphLoader
- * @param  {opentype.Font} font
- * @param  {number} index
- * @param  {Function} parseGlyph
- * @param  {Object} data
- * @param  {number} position
- * @param  {Function} buildPath
- * @return {opentype.Glyph}
- */
-function ttfGlyphLoader(font, index, parseGlyph, data, position, buildPath) {
-    return function() {
-        var glyph = new Glyph({index: index, font: font});
-
-        glyph.path = function() {
-            parseGlyph(glyph, data, position);
-            var path = buildPath(font.glyphs, glyph);
-            path.unitsPerEm = font.unitsPerEm;
-            return path;
-        };
-
-        defineDependentProperty(glyph, 'xMin', '_xMin');
-        defineDependentProperty(glyph, 'xMax', '_xMax');
-        defineDependentProperty(glyph, 'yMin', '_yMin');
-        defineDependentProperty(glyph, 'yMax', '_yMax');
-
-        return glyph;
-    };
-}
-/**
- * @alias opentype.cffGlyphLoader
- * @param  {opentype.Font} font
- * @param  {number} index
- * @param  {Function} parseCFFCharstring
- * @param  {string} charstring
- * @return {opentype.Glyph}
- */
-function cffGlyphLoader(font, index, parseCFFCharstring, charstring) {
-    return function() {
-        var glyph = new Glyph({index: index, font: font});
-
-        glyph.path = function() {
-            var path = parseCFFCharstring(font, glyph, charstring);
-            path.unitsPerEm = font.unitsPerEm;
-            return path;
-        };
-
-        return glyph;
-    };
-}
-
-var glyphset = { GlyphSet: GlyphSet, glyphLoader: glyphLoader, ttfGlyphLoader: ttfGlyphLoader, cffGlyphLoader: cffGlyphLoader };
-
-// The `CFF` table contains the glyph outlines in PostScript format.
-
-// Custom equals function that can also check lists.
-function equals(a, b) {
-    if (a === b) {
-        return true;
-    } else if (Array.isArray(a) && Array.isArray(b)) {
-        if (a.length !== b.length) {
-            return false;
-        }
-
-        for (var i = 0; i < a.length; i += 1) {
-            if (!equals(a[i], b[i])) {
-                return false;
-            }
-        }
-
-        return true;
-    } else {
-        return false;
-    }
-}
-
-// Subroutines are encoded using the negative half of the number space.
-// See type 2 chapter 4.7 "Subroutine operators".
-function calcCFFSubroutineBias(subrs) {
-    var bias;
-    if (subrs.length < 1240) {
-        bias = 107;
-    } else if (subrs.length < 33900) {
-        bias = 1131;
-    } else {
-        bias = 32768;
-    }
-
-    return bias;
-}
-
-// Parse a `CFF` INDEX array.
-// An index array consists of a list of offsets, then a list of objects at those offsets.
-function parseCFFIndex(data, start, conversionFn) {
-    var offsets = [];
-    var objects = [];
-    var count = parse.getCard16(data, start);
-    var objectOffset;
-    var endOffset;
-    if (count !== 0) {
-        var offsetSize = parse.getByte(data, start + 2);
-        objectOffset = start + ((count + 1) * offsetSize) + 2;
-        var pos = start + 3;
-        for (var i = 0; i < count + 1; i += 1) {
-            offsets.push(parse.getOffset(data, pos, offsetSize));
-            pos += offsetSize;
-        }
-
-        // The total size of the index array is 4 header bytes + the value of the last offset.
-        endOffset = objectOffset + offsets[count];
-    } else {
-        endOffset = start + 2;
-    }
-
-    for (var i$1 = 0; i$1 < offsets.length - 1; i$1 += 1) {
-        var value = parse.getBytes(data, objectOffset + offsets[i$1], objectOffset + offsets[i$1 + 1]);
-        if (conversionFn) {
-            value = conversionFn(value);
-        }
-
-        objects.push(value);
-    }
-
-    return {objects: objects, startOffset: start, endOffset: endOffset};
-}
-
-function parseCFFIndexLowMemory(data, start) {
-    var offsets = [];
-    var count = parse.getCard16(data, start);
-    var objectOffset;
-    var endOffset;
-    if (count !== 0) {
-        var offsetSize = parse.getByte(data, start + 2);
-        objectOffset = start + ((count + 1) * offsetSize) + 2;
-        var pos = start + 3;
-        for (var i = 0; i < count + 1; i += 1) {
-            offsets.push(parse.getOffset(data, pos, offsetSize));
-            pos += offsetSize;
-        }
-
-        // The total size of the index array is 4 header bytes + the value of the last offset.
-        endOffset = objectOffset + offsets[count];
-    } else {
-        endOffset = start + 2;
-    }
-
-    return {offsets: offsets, startOffset: start, endOffset: endOffset};
-}
-function getCffIndexObject(i, offsets, data, start, conversionFn) {
-    var count = parse.getCard16(data, start);
-    var objectOffset = 0;
-    if (count !== 0) {
-        var offsetSize = parse.getByte(data, start + 2);
-        objectOffset = start + ((count + 1) * offsetSize) + 2;
-    }
-
-    var value = parse.getBytes(data, objectOffset + offsets[i], objectOffset + offsets[i + 1]);
-    if (conversionFn) {
-        value = conversionFn(value);
-    }
-    return value;
-}
-
-// Parse a `CFF` DICT real value.
-function parseFloatOperand(parser) {
-    var s = '';
-    var eof = 15;
-    var lookup = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '.', 'E', 'E-', null, '-'];
-    while (true) {
-        var b = parser.parseByte();
-        var n1 = b >> 4;
-        var n2 = b & 15;
-
-        if (n1 === eof) {
-            break;
-        }
-
-        s += lookup[n1];
-
-        if (n2 === eof) {
-            break;
-        }
-
-        s += lookup[n2];
-    }
-
-    return parseFloat(s);
-}
-
-// Parse a `CFF` DICT operand.
-function parseOperand(parser, b0) {
-    var b1;
-    var b2;
-    var b3;
-    var b4;
-    if (b0 === 28) {
-        b1 = parser.parseByte();
-        b2 = parser.parseByte();
-        return b1 << 8 | b2;
-    }
-
-    if (b0 === 29) {
-        b1 = parser.parseByte();
-        b2 = parser.parseByte();
-        b3 = parser.parseByte();
-        b4 = parser.parseByte();
-        return b1 << 24 | b2 << 16 | b3 << 8 | b4;
-    }
-
-    if (b0 === 30) {
-        return parseFloatOperand(parser);
-    }
-
-    if (b0 >= 32 && b0 <= 246) {
-        return b0 - 139;
-    }
-
-    if (b0 >= 247 && b0 <= 250) {
-        b1 = parser.parseByte();
-        return (b0 - 247) * 256 + b1 + 108;
-    }
-
-    if (b0 >= 251 && b0 <= 254) {
-        b1 = parser.parseByte();
-        return -(b0 - 251) * 256 - b1 - 108;
-    }
-
-    throw new Error('Invalid b0 ' + b0);
-}
-
-// Convert the entries returned by `parseDict` to a proper dictionary.
-// If a value is a list of one, it is unpacked.
-function entriesToObject(entries) {
-    var o = {};
-    for (var i = 0; i < entries.length; i += 1) {
-        var key = entries[i][0];
-        var values = entries[i][1];
-        var value = (void 0);
-        if (values.length === 1) {
-            value = values[0];
-        } else {
-            value = values;
-        }
-
-        if (o.hasOwnProperty(key) && !isNaN(o[key])) {
-            throw new Error('Object ' + o + ' already has key ' + key);
-        }
-
-        o[key] = value;
-    }
-
-    return o;
-}
-
-// Parse a `CFF` DICT object.
-// A dictionary contains key-value pairs in a compact tokenized format.
-function parseCFFDict(data, start, size) {
-    start = start !== undefined ? start : 0;
-    var parser = new parse.Parser(data, start);
-    var entries = [];
-    var operands = [];
-    size = size !== undefined ? size : data.length;
-
-    while (parser.relativeOffset < size) {
-        var op = parser.parseByte();
-
-        // The first byte for each dict item distinguishes between operator (key) and operand (value).
-        // Values <= 21 are operators.
-        if (op <= 21) {
-            // Two-byte operators have an initial escape byte of 12.
-            if (op === 12) {
-                op = 1200 + parser.parseByte();
-            }
-
-            entries.push([op, operands]);
-            operands = [];
-        } else {
-            // Since the operands (values) come before the operators (keys), we store all operands in a list
-            // until we encounter an operator.
-            operands.push(parseOperand(parser, op));
-        }
-    }
-
-    return entriesToObject(entries);
-}
-
-// Given a String Index (SID), return the value of the string.
-// Strings below index 392 are standard CFF strings and are not encoded in the font.
-function getCFFString(strings, index) {
-    if (index <= 390) {
-        index = cffStandardStrings[index];
-    } else {
-        index = strings[index - 391];
-    }
-
-    return index;
-}
-
-// Interpret a dictionary and return a new dictionary with readable keys and values for missing entries.
-// This function takes `meta` which is a list of objects containing `operand`, `name` and `default`.
-function interpretDict(dict, meta, strings) {
-    var newDict = {};
-    var value;
-
-    // Because we also want to include missing values, we start out from the meta list
-    // and lookup values in the dict.
-    for (var i = 0; i < meta.length; i += 1) {
-        var m = meta[i];
-
-        if (Array.isArray(m.type)) {
-            var values = [];
-            values.length = m.type.length;
-            for (var j = 0; j < m.type.length; j++) {
-                value = dict[m.op] !== undefined ? dict[m.op][j] : undefined;
-                if (value === undefined) {
-                    value = m.value !== undefined && m.value[j] !== undefined ? m.value[j] : null;
-                }
-                if (m.type[j] === 'SID') {
-                    value = getCFFString(strings, value);
-                }
-                values[j] = value;
-            }
-            newDict[m.name] = values;
-        } else {
-            value = dict[m.op];
-            if (value === undefined) {
-                value = m.value !== undefined ? m.value : null;
-            }
-
-            if (m.type === 'SID') {
-                value = getCFFString(strings, value);
-            }
-            newDict[m.name] = value;
-        }
-    }
-
-    return newDict;
-}
-
-// Parse the CFF header.
-function parseCFFHeader(data, start) {
-    var header = {};
-    header.formatMajor = parse.getCard8(data, start);
-    header.formatMinor = parse.getCard8(data, start + 1);
-    header.size = parse.getCard8(data, start + 2);
-    header.offsetSize = parse.getCard8(data, start + 3);
-    header.startOffset = start;
-    header.endOffset = start + 4;
-    return header;
-}
-
-var TOP_DICT_META = [
-    {name: 'version', op: 0, type: 'SID'},
-    {name: 'notice', op: 1, type: 'SID'},
-    {name: 'copyright', op: 1200, type: 'SID'},
-    {name: 'fullName', op: 2, type: 'SID'},
-    {name: 'familyName', op: 3, type: 'SID'},
-    {name: 'weight', op: 4, type: 'SID'},
-    {name: 'isFixedPitch', op: 1201, type: 'number', value: 0},
-    {name: 'italicAngle', op: 1202, type: 'number', value: 0},
-    {name: 'underlinePosition', op: 1203, type: 'number', value: -100},
-    {name: 'underlineThickness', op: 1204, type: 'number', value: 50},
-    {name: 'paintType', op: 1205, type: 'number', value: 0},
-    {name: 'charstringType', op: 1206, type: 'number', value: 2},
-    {
-        name: 'fontMatrix',
-        op: 1207,
-        type: ['real', 'real', 'real', 'real', 'real', 'real'],
-        value: [0.001, 0, 0, 0.001, 0, 0]
-    },
-    {name: 'uniqueId', op: 13, type: 'number'},
-    {name: 'fontBBox', op: 5, type: ['number', 'number', 'number', 'number'], value: [0, 0, 0, 0]},
-    {name: 'strokeWidth', op: 1208, type: 'number', value: 0},
-    {name: 'xuid', op: 14, type: [], value: null},
-    {name: 'charset', op: 15, type: 'offset', value: 0},
-    {name: 'encoding', op: 16, type: 'offset', value: 0},
-    {name: 'charStrings', op: 17, type: 'offset', value: 0},
-    {name: 'private', op: 18, type: ['number', 'offset'], value: [0, 0]},
-    {name: 'ros', op: 1230, type: ['SID', 'SID', 'number']},
-    {name: 'cidFontVersion', op: 1231, type: 'number', value: 0},
-    {name: 'cidFontRevision', op: 1232, type: 'number', value: 0},
-    {name: 'cidFontType', op: 1233, type: 'number', value: 0},
-    {name: 'cidCount', op: 1234, type: 'number', value: 8720},
-    {name: 'uidBase', op: 1235, type: 'number'},
-    {name: 'fdArray', op: 1236, type: 'offset'},
-    {name: 'fdSelect', op: 1237, type: 'offset'},
-    {name: 'fontName', op: 1238, type: 'SID'}
-];
-
-var PRIVATE_DICT_META = [
-    {name: 'subrs', op: 19, type: 'offset', value: 0},
-    {name: 'defaultWidthX', op: 20, type: 'number', value: 0},
-    {name: 'nominalWidthX', op: 21, type: 'number', value: 0}
-];
-
-// Parse the CFF top dictionary. A CFF table can contain multiple fonts, each with their own top dictionary.
-// The top dictionary contains the essential metadata for the font, together with the private dictionary.
-function parseCFFTopDict(data, strings) {
-    var dict = parseCFFDict(data, 0, data.byteLength);
-    return interpretDict(dict, TOP_DICT_META, strings);
-}
-
-// Parse the CFF private dictionary. We don't fully parse out all the values, only the ones we need.
-function parseCFFPrivateDict(data, start, size, strings) {
-    var dict = parseCFFDict(data, start, size);
-    return interpretDict(dict, PRIVATE_DICT_META, strings);
-}
-
-// Returns a list of "Top DICT"s found using an INDEX list.
-// Used to read both the usual high-level Top DICTs and also the FDArray
-// discovered inside CID-keyed fonts.  When a Top DICT has a reference to
-// a Private DICT that is read and saved into the Top DICT.
-//
-// In addition to the expected/optional values as outlined in TOP_DICT_META
-// the following values might be saved into the Top DICT.
-//
-//    _subrs []        array of local CFF subroutines from Private DICT
-//    _subrsBias       bias value computed from number of subroutines
-//                      (see calcCFFSubroutineBias() and parseCFFCharstring())
-//    _defaultWidthX   default widths for CFF characters
-//    _nominalWidthX   bias added to width embedded within glyph description
-//
-//    _privateDict     saved copy of parsed Private DICT from Top DICT
-function gatherCFFTopDicts(data, start, cffIndex, strings) {
-    var topDictArray = [];
-    for (var iTopDict = 0; iTopDict < cffIndex.length; iTopDict += 1) {
-        var topDictData = new DataView(new Uint8Array(cffIndex[iTopDict]).buffer);
-        var topDict = parseCFFTopDict(topDictData, strings);
-        topDict._subrs = [];
-        topDict._subrsBias = 0;
-        topDict._defaultWidthX = 0;
-        topDict._nominalWidthX = 0;
-        var privateSize = topDict.private[0];
-        var privateOffset = topDict.private[1];
-        if (privateSize !== 0 && privateOffset !== 0) {
-            var privateDict = parseCFFPrivateDict(data, privateOffset + start, privateSize, strings);
-            topDict._defaultWidthX = privateDict.defaultWidthX;
-            topDict._nominalWidthX = privateDict.nominalWidthX;
-            if (privateDict.subrs !== 0) {
-                var subrOffset = privateOffset + privateDict.subrs;
-                var subrIndex = parseCFFIndex(data, subrOffset + start);
-                topDict._subrs = subrIndex.objects;
-                topDict._subrsBias = calcCFFSubroutineBias(topDict._subrs);
-            }
-            topDict._privateDict = privateDict;
-        }
-        topDictArray.push(topDict);
-    }
-    return topDictArray;
-}
-
-// Parse the CFF charset table, which contains internal names for all the glyphs.
-// This function will return a list of glyph names.
-// See Adobe TN #5176 chapter 13, "Charsets".
-function parseCFFCharset(data, start, nGlyphs, strings) {
-    var sid;
-    var count;
-    var parser = new parse.Parser(data, start);
-
-    // The .notdef glyph is not included, so subtract 1.
-    nGlyphs -= 1;
-    var charset = ['.notdef'];
-
-    var format = parser.parseCard8();
-    if (format === 0) {
-        for (var i = 0; i < nGlyphs; i += 1) {
-            sid = parser.parseSID();
-            charset.push(getCFFString(strings, sid));
-        }
-    } else if (format === 1) {
-        while (charset.length <= nGlyphs) {
-            sid = parser.parseSID();
-            count = parser.parseCard8();
-            for (var i$1 = 0; i$1 <= count; i$1 += 1) {
-                charset.push(getCFFString(strings, sid));
-                sid += 1;
-            }
-        }
-    } else if (format === 2) {
-        while (charset.length <= nGlyphs) {
-            sid = parser.parseSID();
-            count = parser.parseCard16();
-            for (var i$2 = 0; i$2 <= count; i$2 += 1) {
-                charset.push(getCFFString(strings, sid));
-                sid += 1;
-            }
-        }
-    } else {
-        throw new Error('Unknown charset format ' + format);
-    }
-
-    return charset;
-}
-
-// Parse the CFF encoding data. Only one encoding can be specified per font.
-// See Adobe TN #5176 chapter 12, "Encodings".
-function parseCFFEncoding(data, start, charset) {
-    var code;
-    var enc = {};
-    var parser = new parse.Parser(data, start);
-    var format = parser.parseCard8();
-    if (format === 0) {
-        var nCodes = parser.parseCard8();
-        for (var i = 0; i < nCodes; i += 1) {
-            code = parser.parseCard8();
-            enc[code] = i;
-        }
-    } else if (format === 1) {
-        var nRanges = parser.parseCard8();
-        code = 1;
-        for (var i$1 = 0; i$1 < nRanges; i$1 += 1) {
-            var first = parser.parseCard8();
-            var nLeft = parser.parseCard8();
-            for (var j = first; j <= first + nLeft; j += 1) {
-                enc[j] = code;
-                code += 1;
-            }
-        }
-    } else {
-        throw new Error('Unknown encoding format ' + format);
-    }
-
-    return new CffEncoding(enc, charset);
-}
-
-// Take in charstring code and return a Glyph object.
-// The encoding is described in the Type 2 Charstring Format
-// https://www.microsoft.com/typography/OTSPEC/charstr2.htm
-function parseCFFCharstring(font, glyph, code) {
-    var c1x;
-    var c1y;
-    var c2x;
-    var c2y;
-    var p = new Path();
-    var stack = [];
-    var nStems = 0;
-    var haveWidth = false;
-    var open = false;
-    var x = 0;
-    var y = 0;
-    var subrs;
-    var subrsBias;
-    var defaultWidthX;
-    var nominalWidthX;
-    if (font.isCIDFont) {
-        var fdIndex = font.tables.cff.topDict._fdSelect[glyph.index];
-        var fdDict = font.tables.cff.topDict._fdArray[fdIndex];
-        subrs = fdDict._subrs;
-        subrsBias = fdDict._subrsBias;
-        defaultWidthX = fdDict._defaultWidthX;
-        nominalWidthX = fdDict._nominalWidthX;
-    } else {
-        subrs = font.tables.cff.topDict._subrs;
-        subrsBias = font.tables.cff.topDict._subrsBias;
-        defaultWidthX = font.tables.cff.topDict._defaultWidthX;
-        nominalWidthX = font.tables.cff.topDict._nominalWidthX;
-    }
-    var width = defaultWidthX;
-
-    function newContour(x, y) {
-        if (open) {
-            p.closePath();
-        }
-
-        p.moveTo(x, y);
-        open = true;
-    }
-
-    function parseStems() {
-        var hasWidthArg;
-
-        // The number of stem operators on the stack is always even.
-        // If the value is uneven, that means a width is specified.
-        hasWidthArg = stack.length % 2 !== 0;
-        if (hasWidthArg && !haveWidth) {
-            width = stack.shift() + nominalWidthX;
-        }
-
-        nStems += stack.length >> 1;
-        stack.length = 0;
-        haveWidth = true;
-    }
-
-    function parse(code) {
-        var b1;
-        var b2;
-        var b3;
-        var b4;
-        var codeIndex;
-        var subrCode;
-        var jpx;
-        var jpy;
-        var c3x;
-        var c3y;
-        var c4x;
-        var c4y;
-
-        var i = 0;
-        while (i < code.length) {
-            var v = code[i];
-            i += 1;
-            switch (v) {
-                case 1: // hstem
-                    parseStems();
-                    break;
-                case 3: // vstem
-                    parseStems();
-                    break;
-                case 4: // vmoveto
-                    if (stack.length > 1 && !haveWidth) {
-                        width = stack.shift() + nominalWidthX;
-                        haveWidth = true;
-                    }
-
-                    y += stack.pop();
-                    newContour(x, y);
-                    break;
-                case 5: // rlineto
-                    while (stack.length > 0) {
-                        x += stack.shift();
-                        y += stack.shift();
-                        p.lineTo(x, y);
-                    }
-
-                    break;
-                case 6: // hlineto
-                    while (stack.length > 0) {
-                        x += stack.shift();
-                        p.lineTo(x, y);
-                        if (stack.length === 0) {
-                            break;
-                        }
-
-                        y += stack.shift();
-                        p.lineTo(x, y);
-                    }
-
-                    break;
-                case 7: // vlineto
-                    while (stack.length > 0) {
-                        y += stack.shift();
-                        p.lineTo(x, y);
-                        if (stack.length === 0) {
-                            break;
-                        }
-
-                        x += stack.shift();
-                        p.lineTo(x, y);
-                    }
-
-                    break;
-                case 8: // rrcurveto
-                    while (stack.length > 0) {
-                        c1x = x + stack.shift();
-                        c1y = y + stack.shift();
-                        c2x = c1x + stack.shift();
-                        c2y = c1y + stack.shift();
-                        x = c2x + stack.shift();
-                        y = c2y + stack.shift();
-                        p.curveTo(c1x, c1y, c2x, c2y, x, y);
-                    }
-
-                    break;
-                case 10: // callsubr
-                    codeIndex = stack.pop() + subrsBias;
-                    subrCode = subrs[codeIndex];
-                    if (subrCode) {
-                        parse(subrCode);
-                    }
-
-                    break;
-                case 11: // return
-                    return;
-                case 12: // flex operators
-                    v = code[i];
-                    i += 1;
-                    switch (v) {
-                        case 35: // flex
-                            // |- dx1 dy1 dx2 dy2 dx3 dy3 dx4 dy4 dx5 dy5 dx6 dy6 fd flex (12 35) |-
-                            c1x = x   + stack.shift();    // dx1
-                            c1y = y   + stack.shift();    // dy1
-                            c2x = c1x + stack.shift();    // dx2
-                            c2y = c1y + stack.shift();    // dy2
-                            jpx = c2x + stack.shift();    // dx3
-                            jpy = c2y + stack.shift();    // dy3
-                            c3x = jpx + stack.shift();    // dx4
-                            c3y = jpy + stack.shift();    // dy4
-                            c4x = c3x + stack.shift();    // dx5
-                            c4y = c3y + stack.shift();    // dy5
-                            x = c4x   + stack.shift();    // dx6
-                            y = c4y   + stack.shift();    // dy6
-                            stack.shift();                // flex depth
-                            p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);
-                            p.curveTo(c3x, c3y, c4x, c4y, x, y);
-                            break;
-                        case 34: // hflex
-                            // |- dx1 dx2 dy2 dx3 dx4 dx5 dx6 hflex (12 34) |-
-                            c1x = x   + stack.shift();    // dx1
-                            c1y = y;                      // dy1
-                            c2x = c1x + stack.shift();    // dx2
-                            c2y = c1y + stack.shift();    // dy2
-                            jpx = c2x + stack.shift();    // dx3
-                            jpy = c2y;                    // dy3
-                            c3x = jpx + stack.shift();    // dx4
-                            c3y = c2y;                    // dy4
-                            c4x = c3x + stack.shift();    // dx5
-                            c4y = y;                      // dy5
-                            x = c4x + stack.shift();      // dx6
-                            p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);
-                            p.curveTo(c3x, c3y, c4x, c4y, x, y);
-                            break;
-                        case 36: // hflex1
-                            // |- dx1 dy1 dx2 dy2 dx3 dx4 dx5 dy5 dx6 hflex1 (12 36) |-
-                            c1x = x   + stack.shift();    // dx1
-                            c1y = y   + stack.shift();    // dy1
-                            c2x = c1x + stack.shift();    // dx2
-                            c2y = c1y + stack.shift();    // dy2
-                            jpx = c2x + stack.shift();    // dx3
-                            jpy = c2y;                    // dy3
-                            c3x = jpx + stack.shift();    // dx4
-                            c3y = c2y;                    // dy4
-                            c4x = c3x + stack.shift();    // dx5
-                            c4y = c3y + stack.shift();    // dy5
-                            x = c4x + stack.shift();      // dx6
-                            p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);
-                            p.curveTo(c3x, c3y, c4x, c4y, x, y);
-                            break;
-                        case 37: // flex1
-                            // |- dx1 dy1 dx2 dy2 dx3 dy3 dx4 dy4 dx5 dy5 d6 flex1 (12 37) |-
-                            c1x = x   + stack.shift();    // dx1
-                            c1y = y   + stack.shift();    // dy1
-                            c2x = c1x + stack.shift();    // dx2
-                            c2y = c1y + stack.shift();    // dy2
-                            jpx = c2x + stack.shift();    // dx3
-                            jpy = c2y + stack.shift();    // dy3
-                            c3x = jpx + stack.shift();    // dx4
-                            c3y = jpy + stack.shift();    // dy4
-                            c4x = c3x + stack.shift();    // dx5
-                            c4y = c3y + stack.shift();    // dy5
-                            if (Math.abs(c4x - x) > Math.abs(c4y - y)) {
-                                x = c4x + stack.shift();
-                            } else {
-                                y = c4y + stack.shift();
-                            }
-
-                            p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);
-                            p.curveTo(c3x, c3y, c4x, c4y, x, y);
-                            break;
-                        default:
-                            console.log('Glyph ' + glyph.index + ': unknown operator ' + 1200 + v);
-                            stack.length = 0;
-                    }
-                    break;
-                case 14: // endchar
-                    if (stack.length > 0 && !haveWidth) {
-                        width = stack.shift() + nominalWidthX;
-                        haveWidth = true;
-                    }
-
-                    if (open) {
-                        p.closePath();
-                        open = false;
-                    }
-
-                    break;
-                case 18: // hstemhm
-                    parseStems();
-                    break;
-                case 19: // hintmask
-                case 20: // cntrmask
-                    parseStems();
-                    i += (nStems + 7) >> 3;
-                    break;
-                case 21: // rmoveto
-                    if (stack.length > 2 && !haveWidth) {
-                        width = stack.shift() + nominalWidthX;
-                        haveWidth = true;
-                    }
-
-                    y += stack.pop();
-                    x += stack.pop();
-                    newContour(x, y);
-                    break;
-                case 22: // hmoveto
-                    if (stack.length > 1 && !haveWidth) {
-                        width = stack.shift() + nominalWidthX;
-                        haveWidth = true;
-                    }
-
-                    x += stack.pop();
-                    newContour(x, y);
-                    break;
-                case 23: // vstemhm
-                    parseStems();
-                    break;
-                case 24: // rcurveline
-                    while (stack.length > 2) {
-                        c1x = x + stack.shift();
-                        c1y = y + stack.shift();
-                        c2x = c1x + stack.shift();
-                        c2y = c1y + stack.shift();
-                        x = c2x + stack.shift();
-                        y = c2y + stack.shift();
-                        p.curveTo(c1x, c1y, c2x, c2y, x, y);
-                    }
-
-                    x += stack.shift();
-                    y += stack.shift();
-                    p.lineTo(x, y);
-                    break;
-                case 25: // rlinecurve
-                    while (stack.length > 6) {
-                        x += stack.shift();
-                        y += stack.shift();
-                        p.lineTo(x, y);
-                    }
-
-                    c1x = x + stack.shift();
-                    c1y = y + stack.shift();
-                    c2x = c1x + stack.shift();
-                    c2y = c1y + stack.shift();
-                    x = c2x + stack.shift();
-                    y = c2y + stack.shift();
-                    p.curveTo(c1x, c1y, c2x, c2y, x, y);
-                    break;
-                case 26: // vvcurveto
-                    if (stack.length % 2) {
-                        x += stack.shift();
-                    }
-
-                    while (stack.length > 0) {
-                        c1x = x;
-                        c1y = y + stack.shift();
-                        c2x = c1x + stack.shift();
-                        c2y = c1y + stack.shift();
-                        x = c2x;
-                        y = c2y + stack.shift();
-                        p.curveTo(c1x, c1y, c2x, c2y, x, y);
-                    }
-
-                    break;
-                case 27: // hhcurveto
-                    if (stack.length % 2) {
-                        y += stack.shift();
-                    }
-
-                    while (stack.length > 0) {
-                        c1x = x + stack.shift();
-                        c1y = y;
-                        c2x = c1x + stack.shift();
-                        c2y = c1y + stack.shift();
-                        x = c2x + stack.shift();
-                        y = c2y;
-                        p.curveTo(c1x, c1y, c2x, c2y, x, y);
-                    }
-
-                    break;
-                case 28: // shortint
-                    b1 = code[i];
-                    b2 = code[i + 1];
-                    stack.push(((b1 << 24) | (b2 << 16)) >> 16);
-                    i += 2;
-                    break;
-                case 29: // callgsubr
-                    codeIndex = stack.pop() + font.gsubrsBias;
-                    subrCode = font.gsubrs[codeIndex];
-                    if (subrCode) {
-                        parse(subrCode);
-                    }
-
-                    break;
-                case 30: // vhcurveto
-                    while (stack.length > 0) {
-                        c1x = x;
-                        c1y = y + stack.shift();
-                        c2x = c1x + stack.shift();
-                        c2y = c1y + stack.shift();
-                        x = c2x + stack.shift();
-                        y = c2y + (stack.length === 1 ? stack.shift() : 0);
-                        p.curveTo(c1x, c1y, c2x, c2y, x, y);
-                        if (stack.length === 0) {
-                            break;
-                        }
-
-                        c1x = x + stack.shift();
-                        c1y = y;
-                        c2x = c1x + stack.shift();
-                        c2y = c1y + stack.shift();
-                        y = c2y + stack.shift();
-                        x = c2x + (stack.length === 1 ? stack.shift() : 0);
-                        p.curveTo(c1x, c1y, c2x, c2y, x, y);
-                    }
-
-                    break;
-                case 31: // hvcurveto
-                    while (stack.length > 0) {
-                        c1x = x + stack.shift();
-                        c1y = y;
-                        c2x = c1x + stack.shift();
-                        c2y = c1y + stack.shift();
-                        y = c2y + stack.shift();
-                        x = c2x + (stack.length === 1 ? stack.shift() : 0);
-                        p.curveTo(c1x, c1y, c2x, c2y, x, y);
-                        if (stack.length === 0) {
-                            break;
-                        }
-
-                        c1x = x;
-                        c1y = y + stack.shift();
-                        c2x = c1x + stack.shift();
-                        c2y = c1y + stack.shift();
-                        x = c2x + stack.shift();
-                        y = c2y + (stack.length === 1 ? stack.shift() : 0);
-                        p.curveTo(c1x, c1y, c2x, c2y, x, y);
-                    }
-
-                    break;
-                default:
-                    if (v < 32) {
-                        console.log('Glyph ' + glyph.index + ': unknown operator ' + v);
-                    } else if (v < 247) {
-                        stack.push(v - 139);
-                    } else if (v < 251) {
-                        b1 = code[i];
-                        i += 1;
-                        stack.push((v - 247) * 256 + b1 + 108);
-                    } else if (v < 255) {
-                        b1 = code[i];
-                        i += 1;
-                        stack.push(-(v - 251) * 256 - b1 - 108);
-                    } else {
-                        b1 = code[i];
-                        b2 = code[i + 1];
-                        b3 = code[i + 2];
-                        b4 = code[i + 3];
-                        i += 4;
-                        stack.push(((b1 << 24) | (b2 << 16) | (b3 << 8) | b4) / 65536);
-                    }
-            }
-        }
-    }
-
-    parse(code);
-
-    glyph.advanceWidth = width;
-    return p;
-}
-
-function parseCFFFDSelect(data, start, nGlyphs, fdArrayCount) {
-    var fdSelect = [];
-    var fdIndex;
-    var parser = new parse.Parser(data, start);
-    var format = parser.parseCard8();
-    if (format === 0) {
-        // Simple list of nGlyphs elements
-        for (var iGid = 0; iGid < nGlyphs; iGid++) {
-            fdIndex = parser.parseCard8();
-            if (fdIndex >= fdArrayCount) {
-                throw new Error('CFF table CID Font FDSelect has bad FD index value ' + fdIndex + ' (FD count ' + fdArrayCount + ')');
-            }
-            fdSelect.push(fdIndex);
-        }
-    } else if (format === 3) {
-        // Ranges
-        var nRanges = parser.parseCard16();
-        var first = parser.parseCard16();
-        if (first !== 0) {
-            throw new Error('CFF Table CID Font FDSelect format 3 range has bad initial GID ' + first);
-        }
-        var next;
-        for (var iRange = 0; iRange < nRanges; iRange++) {
-            fdIndex = parser.parseCard8();
-            next = parser.parseCard16();
-            if (fdIndex >= fdArrayCount) {
-                throw new Error('CFF table CID Font FDSelect has bad FD index value ' + fdIndex + ' (FD count ' + fdArrayCount + ')');
-            }
-            if (next > nGlyphs) {
-                throw new Error('CFF Table CID Font FDSelect format 3 range has bad GID ' + next);
-            }
-            for (; first < next; first++) {
-                fdSelect.push(fdIndex);
-            }
-            first = next;
-        }
-        if (next !== nGlyphs) {
-            throw new Error('CFF Table CID Font FDSelect format 3 range has bad final GID ' + next);
-        }
-    } else {
-        throw new Error('CFF Table CID Font FDSelect table has unsupported format ' + format);
-    }
-    return fdSelect;
-}
-
-// Parse the `CFF` table, which contains the glyph outlines in PostScript format.
-function parseCFFTable(data, start, font, opt) {
-    font.tables.cff = {};
-    var header = parseCFFHeader(data, start);
-    var nameIndex = parseCFFIndex(data, header.endOffset, parse.bytesToString);
-    var topDictIndex = parseCFFIndex(data, nameIndex.endOffset);
-    var stringIndex = parseCFFIndex(data, topDictIndex.endOffset, parse.bytesToString);
-    var globalSubrIndex = parseCFFIndex(data, stringIndex.endOffset);
-    font.gsubrs = globalSubrIndex.objects;
-    font.gsubrsBias = calcCFFSubroutineBias(font.gsubrs);
-
-    var topDictArray = gatherCFFTopDicts(data, start, topDictIndex.objects, stringIndex.objects);
-    if (topDictArray.length !== 1) {
-        throw new Error('CFF table has too many fonts in \'FontSet\' - count of fonts NameIndex.length = ' + topDictArray.length);
-    }
-
-    var topDict = topDictArray[0];
-    font.tables.cff.topDict = topDict;
-
-    if (topDict._privateDict) {
-        font.defaultWidthX = topDict._privateDict.defaultWidthX;
-        font.nominalWidthX = topDict._privateDict.nominalWidthX;
-    }
-
-    if (topDict.ros[0] !== undefined && topDict.ros[1] !== undefined) {
-        font.isCIDFont = true;
-    }
-
-    if (font.isCIDFont) {
-        var fdArrayOffset = topDict.fdArray;
-        var fdSelectOffset = topDict.fdSelect;
-        if (fdArrayOffset === 0 || fdSelectOffset === 0) {
-            throw new Error('Font is marked as a CID font, but FDArray and/or FDSelect information is missing');
-        }
-        fdArrayOffset += start;
-        var fdArrayIndex = parseCFFIndex(data, fdArrayOffset);
-        var fdArray = gatherCFFTopDicts(data, start, fdArrayIndex.objects, stringIndex.objects);
-        topDict._fdArray = fdArray;
-        fdSelectOffset += start;
-        topDict._fdSelect = parseCFFFDSelect(data, fdSelectOffset, font.numGlyphs, fdArray.length);
-    }
-
-    var privateDictOffset = start + topDict.private[1];
-    var privateDict = parseCFFPrivateDict(data, privateDictOffset, topDict.private[0], stringIndex.objects);
-    font.defaultWidthX = privateDict.defaultWidthX;
-    font.nominalWidthX = privateDict.nominalWidthX;
-
-    if (privateDict.subrs !== 0) {
-        var subrOffset = privateDictOffset + privateDict.subrs;
-        var subrIndex = parseCFFIndex(data, subrOffset);
-        font.subrs = subrIndex.objects;
-        font.subrsBias = calcCFFSubroutineBias(font.subrs);
-    } else {
-        font.subrs = [];
-        font.subrsBias = 0;
-    }
-
-    // Offsets in the top dict are relative to the beginning of the CFF data, so add the CFF start offset.
-    var charStringsIndex;
-    if (opt.lowMemory) {
-        charStringsIndex = parseCFFIndexLowMemory(data, start + topDict.charStrings);
-        font.nGlyphs = charStringsIndex.offsets.length;
-    } else {
-        charStringsIndex = parseCFFIndex(data, start + topDict.charStrings);
-        font.nGlyphs = charStringsIndex.objects.length;
-    }
-
-    var charset = parseCFFCharset(data, start + topDict.charset, font.nGlyphs, stringIndex.objects);
-    if (topDict.encoding === 0) {
-        // Standard encoding
-        font.cffEncoding = new CffEncoding(cffStandardEncoding, charset);
-    } else if (topDict.encoding === 1) {
-        // Expert encoding
-        font.cffEncoding = new CffEncoding(cffExpertEncoding, charset);
-    } else {
-        font.cffEncoding = parseCFFEncoding(data, start + topDict.encoding, charset);
-    }
-
-    // Prefer the CMAP encoding to the CFF encoding.
-    font.encoding = font.encoding || font.cffEncoding;
-
-    font.glyphs = new glyphset.GlyphSet(font);
-    if (opt.lowMemory) {
-        font._push = function(i) {
-            var charString = getCffIndexObject(i, charStringsIndex.offsets, data, start + topDict.charStrings);
-            font.glyphs.push(i, glyphset.cffGlyphLoader(font, i, parseCFFCharstring, charString));
-        };
-    } else {
-        for (var i = 0; i < font.nGlyphs; i += 1) {
-            var charString = charStringsIndex.objects[i];
-            font.glyphs.push(i, glyphset.cffGlyphLoader(font, i, parseCFFCharstring, charString));
-        }
-    }
-}
-
-// Convert a string to a String ID (SID).
-// The list of strings is modified in place.
-function encodeString(s, strings) {
-    var sid;
-
-    // Is the string in the CFF standard strings?
-    var i = cffStandardStrings.indexOf(s);
-    if (i >= 0) {
-        sid = i;
-    }
-
-    // Is the string already in the string index?
-    i = strings.indexOf(s);
-    if (i >= 0) {
-        sid = i + cffStandardStrings.length;
-    } else {
-        sid = cffStandardStrings.length + strings.length;
-        strings.push(s);
-    }
-
-    return sid;
-}
-
-function makeHeader() {
-    return new table.Record('Header', [
-        {name: 'major', type: 'Card8', value: 1},
-        {name: 'minor', type: 'Card8', value: 0},
-        {name: 'hdrSize', type: 'Card8', value: 4},
-        {name: 'major', type: 'Card8', value: 1}
-    ]);
-}
-
-function makeNameIndex(fontNames) {
-    var t = new table.Record('Name INDEX', [
-        {name: 'names', type: 'INDEX', value: []}
-    ]);
-    t.names = [];
-    for (var i = 0; i < fontNames.length; i += 1) {
-        t.names.push({name: 'name_' + i, type: 'NAME', value: fontNames[i]});
-    }
-
-    return t;
-}
-
-// Given a dictionary's metadata, create a DICT structure.
-function makeDict(meta, attrs, strings) {
-    var m = {};
-    for (var i = 0; i < meta.length; i += 1) {
-        var entry = meta[i];
-        var value = attrs[entry.name];
-        if (value !== undefined && !equals(value, entry.value)) {
-            if (entry.type === 'SID') {
-                value = encodeString(value, strings);
-            }
-
-            m[entry.op] = {name: entry.name, type: entry.type, value: value};
-        }
-    }
-
-    return m;
-}
-
-// The Top DICT houses the global font attributes.
-function makeTopDict(attrs, strings) {
-    var t = new table.Record('Top DICT', [
-        {name: 'dict', type: 'DICT', value: {}}
-    ]);
-    t.dict = makeDict(TOP_DICT_META, attrs, strings);
-    return t;
-}
-
-function makeTopDictIndex(topDict) {
-    var t = new table.Record('Top DICT INDEX', [
-        {name: 'topDicts', type: 'INDEX', value: []}
-    ]);
-    t.topDicts = [{name: 'topDict_0', type: 'TABLE', value: topDict}];
-    return t;
-}
-
-function makeStringIndex(strings) {
-    var t = new table.Record('String INDEX', [
-        {name: 'strings', type: 'INDEX', value: []}
-    ]);
-    t.strings = [];
-    for (var i = 0; i < strings.length; i += 1) {
-        t.strings.push({name: 'string_' + i, type: 'STRING', value: strings[i]});
-    }
-
-    return t;
-}
-
-function makeGlobalSubrIndex() {
-    // Currently we don't use subroutines.
-    return new table.Record('Global Subr INDEX', [
-        {name: 'subrs', type: 'INDEX', value: []}
-    ]);
-}
-
-function makeCharsets(glyphNames, strings) {
-    var t = new table.Record('Charsets', [
-        {name: 'format', type: 'Card8', value: 0}
-    ]);
-    for (var i = 0; i < glyphNames.length; i += 1) {
-        var glyphName = glyphNames[i];
-        var glyphSID = encodeString(glyphName, strings);
-        t.fields.push({name: 'glyph_' + i, type: 'SID', value: glyphSID});
-    }
-
-    return t;
-}
-
-function glyphToOps(glyph) {
-    var ops = [];
-    var path = glyph.path;
-    ops.push({name: 'width', type: 'NUMBER', value: glyph.advanceWidth});
-    var x = 0;
-    var y = 0;
-    for (var i = 0; i < path.commands.length; i += 1) {
-        var dx = (void 0);
-        var dy = (void 0);
-        var cmd = path.commands[i];
-        if (cmd.type === 'Q') {
-            // CFF only supports bézier curves, so convert the quad to a bézier.
-            var _13 = 1 / 3;
-            var _23 = 2 / 3;
-
-            // We're going to create a new command so we don't change the original path.
-            // Since all coordinates are relative, we round() them ASAP to avoid propagating errors.
-            cmd = {
-                type: 'C',
-                x: cmd.x,
-                y: cmd.y,
-                x1: Math.round(_13 * x + _23 * cmd.x1),
-                y1: Math.round(_13 * y + _23 * cmd.y1),
-                x2: Math.round(_13 * cmd.x + _23 * cmd.x1),
-                y2: Math.round(_13 * cmd.y + _23 * cmd.y1)
-            };
-        }
-
-        if (cmd.type === 'M') {
-            dx = Math.round(cmd.x - x);
-            dy = Math.round(cmd.y - y);
-            ops.push({name: 'dx', type: 'NUMBER', value: dx});
-            ops.push({name: 'dy', type: 'NUMBER', value: dy});
-            ops.push({name: 'rmoveto', type: 'OP', value: 21});
-            x = Math.round(cmd.x);
-            y = Math.round(cmd.y);
-        } else if (cmd.type === 'L') {
-            dx = Math.round(cmd.x - x);
-            dy = Math.round(cmd.y - y);
-            ops.push({name: 'dx', type: 'NUMBER', value: dx});
-            ops.push({name: 'dy', type: 'NUMBER', value: dy});
-            ops.push({name: 'rlineto', type: 'OP', value: 5});
-            x = Math.round(cmd.x);
-            y = Math.round(cmd.y);
-        } else if (cmd.type === 'C') {
-            var dx1 = Math.round(cmd.x1 - x);
-            var dy1 = Math.round(cmd.y1 - y);
-            var dx2 = Math.round(cmd.x2 - cmd.x1);
-            var dy2 = Math.round(cmd.y2 - cmd.y1);
-            dx = Math.round(cmd.x - cmd.x2);
-            dy = Math.round(cmd.y - cmd.y2);
-            ops.push({name: 'dx1', type: 'NUMBER', value: dx1});
-            ops.push({name: 'dy1', type: 'NUMBER', value: dy1});
-            ops.push({name: 'dx2', type: 'NUMBER', value: dx2});
-            ops.push({name: 'dy2', type: 'NUMBER', value: dy2});
-            ops.push({name: 'dx', type: 'NUMBER', value: dx});
-            ops.push({name: 'dy', type: 'NUMBER', value: dy});
-            ops.push({name: 'rrcurveto', type: 'OP', value: 8});
-            x = Math.round(cmd.x);
-            y = Math.round(cmd.y);
-        }
-
-        // Contours are closed automatically.
-    }
-
-    ops.push({name: 'endchar', type: 'OP', value: 14});
-    return ops;
-}
-
-function makeCharStringsIndex(glyphs) {
-    var t = new table.Record('CharStrings INDEX', [
-        {name: 'charStrings', type: 'INDEX', value: []}
-    ]);
-
-    for (var i = 0; i < glyphs.length; i += 1) {
-        var glyph = glyphs.get(i);
-        var ops = glyphToOps(glyph);
-        t.charStrings.push({name: glyph.name, type: 'CHARSTRING', value: ops});
-    }
-
-    return t;
-}
-
-function makePrivateDict(attrs, strings) {
-    var t = new table.Record('Private DICT', [
-        {name: 'dict', type: 'DICT', value: {}}
-    ]);
-    t.dict = makeDict(PRIVATE_DICT_META, attrs, strings);
-    return t;
-}
-
-function makeCFFTable(glyphs, options) {
-    var t = new table.Table('CFF ', [
-        {name: 'header', type: 'RECORD'},
-        {name: 'nameIndex', type: 'RECORD'},
-        {name: 'topDictIndex', type: 'RECORD'},
-        {name: 'stringIndex', type: 'RECORD'},
-        {name: 'globalSubrIndex', type: 'RECORD'},
-        {name: 'charsets', type: 'RECORD'},
-        {name: 'charStringsIndex', type: 'RECORD'},
-        {name: 'privateDict', type: 'RECORD'}
-    ]);
-
-    var fontScale = 1 / options.unitsPerEm;
-    // We use non-zero values for the offsets so that the DICT encodes them.
-    // This is important because the size of the Top DICT plays a role in offset calculation,
-    // and the size shouldn't change after we've written correct offsets.
-    var attrs = {
-        version: options.version,
-        fullName: options.fullName,
-        familyName: options.familyName,
-        weight: options.weightName,
-        fontBBox: options.fontBBox || [0, 0, 0, 0],
-        fontMatrix: [fontScale, 0, 0, fontScale, 0, 0],
-        charset: 999,
-        encoding: 0,
-        charStrings: 999,
-        private: [0, 999]
-    };
-
-    var privateAttrs = {};
-
-    var glyphNames = [];
-    var glyph;
-
-    // Skip first glyph (.notdef)
-    for (var i = 1; i < glyphs.length; i += 1) {
-        glyph = glyphs.get(i);
-        glyphNames.push(glyph.name);
-    }
-
-    var strings = [];
-
-    t.header = makeHeader();
-    t.nameIndex = makeNameIndex([options.postScriptName]);
-    var topDict = makeTopDict(attrs, strings);
-    t.topDictIndex = makeTopDictIndex(topDict);
-    t.globalSubrIndex = makeGlobalSubrIndex();
-    t.charsets = makeCharsets(glyphNames, strings);
-    t.charStringsIndex = makeCharStringsIndex(glyphs);
-    t.privateDict = makePrivateDict(privateAttrs, strings);
-
-    // Needs to come at the end, to encode all custom strings used in the font.
-    t.stringIndex = makeStringIndex(strings);
-
-    var startOffset = t.header.sizeOf() +
-        t.nameIndex.sizeOf() +
-        t.topDictIndex.sizeOf() +
-        t.stringIndex.sizeOf() +
-        t.globalSubrIndex.sizeOf();
-    attrs.charset = startOffset;
-
-    // We use the CFF standard encoding; proper encoding will be handled in cmap.
-    attrs.encoding = 0;
-    attrs.charStrings = attrs.charset + t.charsets.sizeOf();
-    attrs.private[1] = attrs.charStrings + t.charStringsIndex.sizeOf();
-
-    // Recreate the Top DICT INDEX with the correct offsets.
-    topDict = makeTopDict(attrs, strings);
-    t.topDictIndex = makeTopDictIndex(topDict);
-
-    return t;
-}
-
-var cff = { parse: parseCFFTable, make: makeCFFTable };
-
-// The `head` table contains global information about the font.
-
-// Parse the header `head` table
-function parseHeadTable(data, start) {
-    var head = {};
-    var p = new parse.Parser(data, start);
-    head.version = p.parseVersion();
-    head.fontRevision = Math.round(p.parseFixed() * 1000) / 1000;
-    head.checkSumAdjustment = p.parseULong();
-    head.magicNumber = p.parseULong();
-    check.argument(head.magicNumber === 0x5F0F3CF5, 'Font header has wrong magic number.');
-    head.flags = p.parseUShort();
-    head.unitsPerEm = p.parseUShort();
-    head.created = p.parseLongDateTime();
-    head.modified = p.parseLongDateTime();
-    head.xMin = p.parseShort();
-    head.yMin = p.parseShort();
-    head.xMax = p.parseShort();
-    head.yMax = p.parseShort();
-    head.macStyle = p.parseUShort();
-    head.lowestRecPPEM = p.parseUShort();
-    head.fontDirectionHint = p.parseShort();
-    head.indexToLocFormat = p.parseShort();
-    head.glyphDataFormat = p.parseShort();
-    return head;
-}
-
-function makeHeadTable(options) {
-    // Apple Mac timestamp epoch is 01/01/1904 not 01/01/1970
-    var timestamp = Math.round(new Date().getTime() / 1000) + 2082844800;
-    var createdTimestamp = timestamp;
-
-    if (options.createdTimestamp) {
-        createdTimestamp = options.createdTimestamp + 2082844800;
-    }
-
-    return new table.Table('head', [
-        {name: 'version', type: 'FIXED', value: 0x00010000},
-        {name: 'fontRevision', type: 'FIXED', value: 0x00010000},
-        {name: 'checkSumAdjustment', type: 'ULONG', value: 0},
-        {name: 'magicNumber', type: 'ULONG', value: 0x5F0F3CF5},
-        {name: 'flags', type: 'USHORT', value: 0},
-        {name: 'unitsPerEm', type: 'USHORT', value: 1000},
-        {name: 'created', type: 'LONGDATETIME', value: createdTimestamp},
-        {name: 'modified', type: 'LONGDATETIME', value: timestamp},
-        {name: 'xMin', type: 'SHORT', value: 0},
-        {name: 'yMin', type: 'SHORT', value: 0},
-        {name: 'xMax', type: 'SHORT', value: 0},
-        {name: 'yMax', type: 'SHORT', value: 0},
-        {name: 'macStyle', type: 'USHORT', value: 0},
-        {name: 'lowestRecPPEM', type: 'USHORT', value: 0},
-        {name: 'fontDirectionHint', type: 'SHORT', value: 2},
-        {name: 'indexToLocFormat', type: 'SHORT', value: 0},
-        {name: 'glyphDataFormat', type: 'SHORT', value: 0}
-    ], options);
-}
-
-var head = { parse: parseHeadTable, make: makeHeadTable };
-
-// The `hhea` table contains information for horizontal layout.
-
-// Parse the horizontal header `hhea` table
-function parseHheaTable(data, start) {
-    var hhea = {};
-    var p = new parse.Parser(data, start);
-    hhea.version = p.parseVersion();
-    hhea.ascender = p.parseShort();
-    hhea.descender = p.parseShort();
-    hhea.lineGap = p.parseShort();
-    hhea.advanceWidthMax = p.parseUShort();
-    hhea.minLeftSideBearing = p.parseShort();
-    hhea.minRightSideBearing = p.parseShort();
-    hhea.xMaxExtent = p.parseShort();
-    hhea.caretSlopeRise = p.parseShort();
-    hhea.caretSlopeRun = p.parseShort();
-    hhea.caretOffset = p.parseShort();
-    p.relativeOffset += 8;
-    hhea.metricDataFormat = p.parseShort();
-    hhea.numberOfHMetrics = p.parseUShort();
-    return hhea;
-}
-
-function makeHheaTable(options) {
-    return new table.Table('hhea', [
-        {name: 'version', type: 'FIXED', value: 0x00010000},
-        {name: 'ascender', type: 'FWORD', value: 0},
-        {name: 'descender', type: 'FWORD', value: 0},
-        {name: 'lineGap', type: 'FWORD', value: 0},
-        {name: 'advanceWidthMax', type: 'UFWORD', value: 0},
-        {name: 'minLeftSideBearing', type: 'FWORD', value: 0},
-        {name: 'minRightSideBearing', type: 'FWORD', value: 0},
-        {name: 'xMaxExtent', type: 'FWORD', value: 0},
-        {name: 'caretSlopeRise', type: 'SHORT', value: 1},
-        {name: 'caretSlopeRun', type: 'SHORT', value: 0},
-        {name: 'caretOffset', type: 'SHORT', value: 0},
-        {name: 'reserved1', type: 'SHORT', value: 0},
-        {name: 'reserved2', type: 'SHORT', value: 0},
-        {name: 'reserved3', type: 'SHORT', value: 0},
-        {name: 'reserved4', type: 'SHORT', value: 0},
-        {name: 'metricDataFormat', type: 'SHORT', value: 0},
-        {name: 'numberOfHMetrics', type: 'USHORT', value: 0}
-    ], options);
-}
-
-var hhea = { parse: parseHheaTable, make: makeHheaTable };
-
-// The `hmtx` table contains the horizontal metrics for all glyphs.
-
-function parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs) {
-    var advanceWidth;
-    var leftSideBearing;
-    var p = new parse.Parser(data, start);
-    for (var i = 0; i < numGlyphs; i += 1) {
-        // If the font is monospaced, only one entry is needed. This last entry applies to all subsequent glyphs.
-        if (i < numMetrics) {
-            advanceWidth = p.parseUShort();
-            leftSideBearing = p.parseShort();
-        }
-
-        var glyph = glyphs.get(i);
-        glyph.advanceWidth = advanceWidth;
-        glyph.leftSideBearing = leftSideBearing;
-    }
-}
-
-function parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs) {
-    font._hmtxTableData = {};
-
-    var advanceWidth;
-    var leftSideBearing;
-    var p = new parse.Parser(data, start);
-    for (var i = 0; i < numGlyphs; i += 1) {
-        // If the font is monospaced, only one entry is needed. This last entry applies to all subsequent glyphs.
-        if (i < numMetrics) {
-            advanceWidth = p.parseUShort();
-            leftSideBearing = p.parseShort();
-        }
-
-        font._hmtxTableData[i] = {
-            advanceWidth: advanceWidth,
-            leftSideBearing: leftSideBearing
-        };
-    }
-}
-
-// Parse the `hmtx` table, which contains the horizontal metrics for all glyphs.
-// This function augments the glyph array, adding the advanceWidth and leftSideBearing to each glyph.
-function parseHmtxTable(font, data, start, numMetrics, numGlyphs, glyphs, opt) {
-    if (opt.lowMemory)
-        { parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs); }
-    else
-        { parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs); }
-}
-
-function makeHmtxTable(glyphs) {
-    var t = new table.Table('hmtx', []);
-    for (var i = 0; i < glyphs.length; i += 1) {
-        var glyph = glyphs.get(i);
-        var advanceWidth = glyph.advanceWidth || 0;
-        var leftSideBearing = glyph.leftSideBearing || 0;
-        t.fields.push({name: 'advanceWidth_' + i, type: 'USHORT', value: advanceWidth});
-        t.fields.push({name: 'leftSideBearing_' + i, type: 'SHORT', value: leftSideBearing});
-    }
-
-    return t;
-}
-
-var hmtx = { parse: parseHmtxTable, make: makeHmtxTable };
-
-// The `ltag` table stores IETF BCP-47 language tags. It allows supporting
-
-function makeLtagTable(tags) {
-    var result = new table.Table('ltag', [
-        {name: 'version', type: 'ULONG', value: 1},
-        {name: 'flags', type: 'ULONG', value: 0},
-        {name: 'numTags', type: 'ULONG', value: tags.length}
-    ]);
-
-    var stringPool = '';
-    var stringPoolOffset = 12 + tags.length * 4;
-    for (var i = 0; i < tags.length; ++i) {
-        var pos = stringPool.indexOf(tags[i]);
-        if (pos < 0) {
-            pos = stringPool.length;
-            stringPool += tags[i];
-        }
-
-        result.fields.push({name: 'offset ' + i, type: 'USHORT', value: stringPoolOffset + pos});
-        result.fields.push({name: 'length ' + i, type: 'USHORT', value: tags[i].length});
-    }
-
-    result.fields.push({name: 'stringPool', type: 'CHARARRAY', value: stringPool});
-    return result;
-}
-
-function parseLtagTable(data, start) {
-    var p = new parse.Parser(data, start);
-    var tableVersion = p.parseULong();
-    check.argument(tableVersion === 1, 'Unsupported ltag table version.');
-    // The 'ltag' specification does not define any flags; skip the field.
-    p.skip('uLong', 1);
-    var numTags = p.parseULong();
-
-    var tags = [];
-    for (var i = 0; i < numTags; i++) {
-        var tag = '';
-        var offset = start + p.parseUShort();
-        var length = p.parseUShort();
-        for (var j = offset; j < offset + length; ++j) {
-            tag += String.fromCharCode(data.getInt8(j));
-        }
-
-        tags.push(tag);
-    }
-
-    return tags;
-}
-
-var ltag = { make: makeLtagTable, parse: parseLtagTable };
-
-// The `maxp` table establishes the memory requirements for the font.
-
-// Parse the maximum profile `maxp` table.
-function parseMaxpTable(data, start) {
-    var maxp = {};
-    var p = new parse.Parser(data, start);
-    maxp.version = p.parseVersion();
-    maxp.numGlyphs = p.parseUShort();
-    if (maxp.version === 1.0) {
-        maxp.maxPoints = p.parseUShort();
-        maxp.maxContours = p.parseUShort();
-        maxp.maxCompositePoints = p.parseUShort();
-        maxp.maxCompositeContours = p.parseUShort();
-        maxp.maxZones = p.parseUShort();
-        maxp.maxTwilightPoints = p.parseUShort();
-        maxp.maxStorage = p.parseUShort();
-        maxp.maxFunctionDefs = p.parseUShort();
-        maxp.maxInstructionDefs = p.parseUShort();
-        maxp.maxStackElements = p.parseUShort();
-        maxp.maxSizeOfInstructions = p.parseUShort();
-        maxp.maxComponentElements = p.parseUShort();
-        maxp.maxComponentDepth = p.parseUShort();
-    }
-
-    return maxp;
-}
-
-function makeMaxpTable(numGlyphs) {
-    return new table.Table('maxp', [
-        {name: 'version', type: 'FIXED', value: 0x00005000},
-        {name: 'numGlyphs', type: 'USHORT', value: numGlyphs}
-    ]);
-}
-
-var maxp = { parse: parseMaxpTable, make: makeMaxpTable };
-
-// The `name` naming table.
-
-// NameIDs for the name table.
-var nameTableNames = [
-    'copyright',              // 0
-    'fontFamily',             // 1
-    'fontSubfamily',          // 2
-    'uniqueID',               // 3
-    'fullName',               // 4
-    'version',                // 5
-    'postScriptName',         // 6
-    'trademark',              // 7
-    'manufacturer',           // 8
-    'designer',               // 9
-    'description',            // 10
-    'manufacturerURL',        // 11
-    'designerURL',            // 12
-    'license',                // 13
-    'licenseURL',             // 14
-    'reserved',               // 15
-    'preferredFamily',        // 16
-    'preferredSubfamily',     // 17
-    'compatibleFullName',     // 18
-    'sampleText',             // 19
-    'postScriptFindFontName', // 20
-    'wwsFamily',              // 21
-    'wwsSubfamily'            // 22
-];
-
-var macLanguages = {
-    0: 'en',
-    1: 'fr',
-    2: 'de',
-    3: 'it',
-    4: 'nl',
-    5: 'sv',
-    6: 'es',
-    7: 'da',
-    8: 'pt',
-    9: 'no',
-    10: 'he',
-    11: 'ja',
-    12: 'ar',
-    13: 'fi',
-    14: 'el',
-    15: 'is',
-    16: 'mt',
-    17: 'tr',
-    18: 'hr',
-    19: 'zh-Hant',
-    20: 'ur',
-    21: 'hi',
-    22: 'th',
-    23: 'ko',
-    24: 'lt',
-    25: 'pl',
-    26: 'hu',
-    27: 'es',
-    28: 'lv',
-    29: 'se',
-    30: 'fo',
-    31: 'fa',
-    32: 'ru',
-    33: 'zh',
-    34: 'nl-BE',
-    35: 'ga',
-    36: 'sq',
-    37: 'ro',
-    38: 'cz',
-    39: 'sk',
-    40: 'si',
-    41: 'yi',
-    42: 'sr',
-    43: 'mk',
-    44: 'bg',
-    45: 'uk',
-    46: 'be',
-    47: 'uz',
-    48: 'kk',
-    49: 'az-Cyrl',
-    50: 'az-Arab',
-    51: 'hy',
-    52: 'ka',
-    53: 'mo',
-    54: 'ky',
-    55: 'tg',
-    56: 'tk',
-    57: 'mn-CN',
-    58: 'mn',
-    59: 'ps',
-    60: 'ks',
-    61: 'ku',
-    62: 'sd',
-    63: 'bo',
-    64: 'ne',
-    65: 'sa',
-    66: 'mr',
-    67: 'bn',
-    68: 'as',
-    69: 'gu',
-    70: 'pa',
-    71: 'or',
-    72: 'ml',
-    73: 'kn',
-    74: 'ta',
-    75: 'te',
-    76: 'si',
-    77: 'my',
-    78: 'km',
-    79: 'lo',
-    80: 'vi',
-    81: 'id',
-    82: 'tl',
-    83: 'ms',
-    84: 'ms-Arab',
-    85: 'am',
-    86: 'ti',
-    87: 'om',
-    88: 'so',
-    89: 'sw',
-    90: 'rw',
-    91: 'rn',
-    92: 'ny',
-    93: 'mg',
-    94: 'eo',
-    128: 'cy',
-    129: 'eu',
-    130: 'ca',
-    131: 'la',
-    132: 'qu',
-    133: 'gn',
-    134: 'ay',
-    135: 'tt',
-    136: 'ug',
-    137: 'dz',
-    138: 'jv',
-    139: 'su',
-    140: 'gl',
-    141: 'af',
-    142: 'br',
-    143: 'iu',
-    144: 'gd',
-    145: 'gv',
-    146: 'ga',
-    147: 'to',
-    148: 'el-polyton',
-    149: 'kl',
-    150: 'az',
-    151: 'nn'
-};
-
-// MacOS language ID → MacOS script ID
-//
-// Note that the script ID is not sufficient to determine what encoding
-// to use in TrueType files. For some languages, MacOS used a modification
-// of a mainstream script. For example, an Icelandic name would be stored
-// with smRoman in the TrueType naming table, but the actual encoding
-// is a special Icelandic version of the normal Macintosh Roman encoding.
-// As another example, Inuktitut uses an 8-bit encoding for Canadian Aboriginal
-// Syllables but MacOS had run out of available script codes, so this was
-// done as a (pretty radical) "modification" of Ethiopic.
-//
-// http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt
-var macLanguageToScript = {
-    0: 0,  // langEnglish → smRoman
-    1: 0,  // langFrench → smRoman
-    2: 0,  // langGerman → smRoman
-    3: 0,  // langItalian → smRoman
-    4: 0,  // langDutch → smRoman
-    5: 0,  // langSwedish → smRoman
-    6: 0,  // langSpanish → smRoman
-    7: 0,  // langDanish → smRoman
-    8: 0,  // langPortuguese → smRoman
-    9: 0,  // langNorwegian → smRoman
-    10: 5,  // langHebrew → smHebrew
-    11: 1,  // langJapanese → smJapanese
-    12: 4,  // langArabic → smArabic
-    13: 0,  // langFinnish → smRoman
-    14: 6,  // langGreek → smGreek
-    15: 0,  // langIcelandic → smRoman (modified)
-    16: 0,  // langMaltese → smRoman
-    17: 0,  // langTurkish → smRoman (modified)
-    18: 0,  // langCroatian → smRoman (modified)
-    19: 2,  // langTradChinese → smTradChinese
-    20: 4,  // langUrdu → smArabic
-    21: 9,  // langHindi → smDevanagari
-    22: 21,  // langThai → smThai
-    23: 3,  // langKorean → smKorean
-    24: 29,  // langLithuanian → smCentralEuroRoman
-    25: 29,  // langPolish → smCentralEuroRoman
-    26: 29,  // langHungarian → smCentralEuroRoman
-    27: 29,  // langEstonian → smCentralEuroRoman
-    28: 29,  // langLatvian → smCentralEuroRoman
-    29: 0,  // langSami → smRoman
-    30: 0,  // langFaroese → smRoman (modified)
-    31: 4,  // langFarsi → smArabic (modified)
-    32: 7,  // langRussian → smCyrillic
-    33: 25,  // langSimpChinese → smSimpChinese
-    34: 0,  // langFlemish → smRoman
-    35: 0,  // langIrishGaelic → smRoman (modified)
-    36: 0,  // langAlbanian → smRoman
-    37: 0,  // langRomanian → smRoman (modified)
-    38: 29,  // langCzech → smCentralEuroRoman
-    39: 29,  // langSlovak → smCentralEuroRoman
-    40: 0,  // langSlovenian → smRoman (modified)
-    41: 5,  // langYiddish → smHebrew
-    42: 7,  // langSerbian → smCyrillic
-    43: 7,  // langMacedonian → smCyrillic
-    44: 7,  // langBulgarian → smCyrillic
-    45: 7,  // langUkrainian → smCyrillic (modified)
-    46: 7,  // langByelorussian → smCyrillic
-    47: 7,  // langUzbek → smCyrillic
-    48: 7,  // langKazakh → smCyrillic
-    49: 7,  // langAzerbaijani → smCyrillic
-    50: 4,  // langAzerbaijanAr → smArabic
-    51: 24,  // langArmenian → smArmenian
-    52: 23,  // langGeorgian → smGeorgian
-    53: 7,  // langMoldavian → smCyrillic
-    54: 7,  // langKirghiz → smCyrillic
-    55: 7,  // langTajiki → smCyrillic
-    56: 7,  // langTurkmen → smCyrillic
-    57: 27,  // langMongolian → smMongolian
-    58: 7,  // langMongolianCyr → smCyrillic
-    59: 4,  // langPashto → smArabic
-    60: 4,  // langKurdish → smArabic
-    61: 4,  // langKashmiri → smArabic
-    62: 4,  // langSindhi → smArabic
-    63: 26,  // langTibetan → smTibetan
-    64: 9,  // langNepali → smDevanagari
-    65: 9,  // langSanskrit → smDevanagari
-    66: 9,  // langMarathi → smDevanagari
-    67: 13,  // langBengali → smBengali
-    68: 13,  // langAssamese → smBengali
-    69: 11,  // langGujarati → smGujarati
-    70: 10,  // langPunjabi → smGurmukhi
-    71: 12,  // langOriya → smOriya
-    72: 17,  // langMalayalam → smMalayalam
-    73: 16,  // langKannada → smKannada
-    74: 14,  // langTamil → smTamil
-    75: 15,  // langTelugu → smTelugu
-    76: 18,  // langSinhalese → smSinhalese
-    77: 19,  // langBurmese → smBurmese
-    78: 20,  // langKhmer → smKhmer
-    79: 22,  // langLao → smLao
-    80: 30,  // langVietnamese → smVietnamese
-    81: 0,  // langIndonesian → smRoman
-    82: 0,  // langTagalog → smRoman
-    83: 0,  // langMalayRoman → smRoman
-    84: 4,  // langMalayArabic → smArabic
-    85: 28,  // langAmharic → smEthiopic
-    86: 28,  // langTigrinya → smEthiopic
-    87: 28,  // langOromo → smEthiopic
-    88: 0,  // langSomali → smRoman
-    89: 0,  // langSwahili → smRoman
-    90: 0,  // langKinyarwanda → smRoman
-    91: 0,  // langRundi → smRoman
-    92: 0,  // langNyanja → smRoman
-    93: 0,  // langMalagasy → smRoman
-    94: 0,  // langEsperanto → smRoman
-    128: 0,  // langWelsh → smRoman (modified)
-    129: 0,  // langBasque → smRoman
-    130: 0,  // langCatalan → smRoman
-    131: 0,  // langLatin → smRoman
-    132: 0,  // langQuechua → smRoman
-    133: 0,  // langGuarani → smRoman
-    134: 0,  // langAymara → smRoman
-    135: 7,  // langTatar → smCyrillic
-    136: 4,  // langUighur → smArabic
-    137: 26,  // langDzongkha → smTibetan
-    138: 0,  // langJavaneseRom → smRoman
-    139: 0,  // langSundaneseRom → smRoman
-    140: 0,  // langGalician → smRoman
-    141: 0,  // langAfrikaans → smRoman
-    142: 0,  // langBreton → smRoman (modified)
-    143: 28,  // langInuktitut → smEthiopic (modified)
-    144: 0,  // langScottishGaelic → smRoman (modified)
-    145: 0,  // langManxGaelic → smRoman (modified)
-    146: 0,  // langIrishGaelicScript → smRoman (modified)
-    147: 0,  // langTongan → smRoman
-    148: 6,  // langGreekAncient → smRoman
-    149: 0,  // langGreenlandic → smRoman
-    150: 0,  // langAzerbaijanRoman → smRoman
-    151: 0   // langNynorsk → smRoman
-};
-
-// While Microsoft indicates a region/country for all its language
-// IDs, we omit the region code if it's equal to the "most likely
-// region subtag" according to Unicode CLDR. For scripts, we omit
-// the subtag if it is equal to the Suppress-Script entry in the
-// IANA language subtag registry for IETF BCP 47.
-//
-// For example, Microsoft states that its language code 0x041A is
-// Croatian in Croatia. We transform this to the BCP 47 language code 'hr'
-// and not 'hr-HR' because Croatia is the default country for Croatian,
-// according to Unicode CLDR. As another example, Microsoft states
-// that 0x101A is Croatian (Latin) in Bosnia-Herzegovina. We transform
-// this to 'hr-BA' and not 'hr-Latn-BA' because Latin is the default script
-// for the Croatian language, according to IANA.
-//
-// http://www.unicode.org/cldr/charts/latest/supplemental/likely_subtags.html
-// http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry
-var windowsLanguages = {
-    0x0436: 'af',
-    0x041C: 'sq',
-    0x0484: 'gsw',
-    0x045E: 'am',
-    0x1401: 'ar-DZ',
-    0x3C01: 'ar-BH',
-    0x0C01: 'ar',
-    0x0801: 'ar-IQ',
-    0x2C01: 'ar-JO',
-    0x3401: 'ar-KW',
-    0x3001: 'ar-LB',
-    0x1001: 'ar-LY',
-    0x1801: 'ary',
-    0x2001: 'ar-OM',
-    0x4001: 'ar-QA',
-    0x0401: 'ar-SA',
-    0x2801: 'ar-SY',
-    0x1C01: 'aeb',
-    0x3801: 'ar-AE',
-    0x2401: 'ar-YE',
-    0x042B: 'hy',
-    0x044D: 'as',
-    0x082C: 'az-Cyrl',
-    0x042C: 'az',
-    0x046D: 'ba',
-    0x042D: 'eu',
-    0x0423: 'be',
-    0x0845: 'bn',
-    0x0445: 'bn-IN',
-    0x201A: 'bs-Cyrl',
-    0x141A: 'bs',
-    0x047E: 'br',
-    0x0402: 'bg',
-    0x0403: 'ca',
-    0x0C04: 'zh-HK',
-    0x1404: 'zh-MO',
-    0x0804: 'zh',
-    0x1004: 'zh-SG',
-    0x0404: 'zh-TW',
-    0x0483: 'co',
-    0x041A: 'hr',
-    0x101A: 'hr-BA',
-    0x0405: 'cs',
-    0x0406: 'da',
-    0x048C: 'prs',
-    0x0465: 'dv',
-    0x0813: 'nl-BE',
-    0x0413: 'nl',
-    0x0C09: 'en-AU',
-    0x2809: 'en-BZ',
-    0x1009: 'en-CA',
-    0x2409: 'en-029',
-    0x4009: 'en-IN',
-    0x1809: 'en-IE',
-    0x2009: 'en-JM',
-    0x4409: 'en-MY',
-    0x1409: 'en-NZ',
-    0x3409: 'en-PH',
-    0x4809: 'en-SG',
-    0x1C09: 'en-ZA',
-    0x2C09: 'en-TT',
-    0x0809: 'en-GB',
-    0x0409: 'en',
-    0x3009: 'en-ZW',
-    0x0425: 'et',
-    0x0438: 'fo',
-    0x0464: 'fil',
-    0x040B: 'fi',
-    0x080C: 'fr-BE',
-    0x0C0C: 'fr-CA',
-    0x040C: 'fr',
-    0x140C: 'fr-LU',
-    0x180C: 'fr-MC',
-    0x100C: 'fr-CH',
-    0x0462: 'fy',
-    0x0456: 'gl',
-    0x0437: 'ka',
-    0x0C07: 'de-AT',
-    0x0407: 'de',
-    0x1407: 'de-LI',
-    0x1007: 'de-LU',
-    0x0807: 'de-CH',
-    0x0408: 'el',
-    0x046F: 'kl',
-    0x0447: 'gu',
-    0x0468: 'ha',
-    0x040D: 'he',
-    0x0439: 'hi',
-    0x040E: 'hu',
-    0x040F: 'is',
-    0x0470: 'ig',
-    0x0421: 'id',
-    0x045D: 'iu',
-    0x085D: 'iu-Latn',
-    0x083C: 'ga',
-    0x0434: 'xh',
-    0x0435: 'zu',
-    0x0410: 'it',
-    0x0810: 'it-CH',
-    0x0411: 'ja',
-    0x044B: 'kn',
-    0x043F: 'kk',
-    0x0453: 'km',
-    0x0486: 'quc',
-    0x0487: 'rw',
-    0x0441: 'sw',
-    0x0457: 'kok',
-    0x0412: 'ko',
-    0x0440: 'ky',
-    0x0454: 'lo',
-    0x0426: 'lv',
-    0x0427: 'lt',
-    0x082E: 'dsb',
-    0x046E: 'lb',
-    0x042F: 'mk',
-    0x083E: 'ms-BN',
-    0x043E: 'ms',
-    0x044C: 'ml',
-    0x043A: 'mt',
-    0x0481: 'mi',
-    0x047A: 'arn',
-    0x044E: 'mr',
-    0x047C: 'moh',
-    0x0450: 'mn',
-    0x0850: 'mn-CN',
-    0x0461: 'ne',
-    0x0414: 'nb',
-    0x0814: 'nn',
-    0x0482: 'oc',
-    0x0448: 'or',
-    0x0463: 'ps',
-    0x0415: 'pl',
-    0x0416: 'pt',
-    0x0816: 'pt-PT',
-    0x0446: 'pa',
-    0x046B: 'qu-BO',
-    0x086B: 'qu-EC',
-    0x0C6B: 'qu',
-    0x0418: 'ro',
-    0x0417: 'rm',
-    0x0419: 'ru',
-    0x243B: 'smn',
-    0x103B: 'smj-NO',
-    0x143B: 'smj',
-    0x0C3B: 'se-FI',
-    0x043B: 'se',
-    0x083B: 'se-SE',
-    0x203B: 'sms',
-    0x183B: 'sma-NO',
-    0x1C3B: 'sms',
-    0x044F: 'sa',
-    0x1C1A: 'sr-Cyrl-BA',
-    0x0C1A: 'sr',
-    0x181A: 'sr-Latn-BA',
-    0x081A: 'sr-Latn',
-    0x046C: 'nso',
-    0x0432: 'tn',
-    0x045B: 'si',
-    0x041B: 'sk',
-    0x0424: 'sl',
-    0x2C0A: 'es-AR',
-    0x400A: 'es-BO',
-    0x340A: 'es-CL',
-    0x240A: 'es-CO',
-    0x140A: 'es-CR',
-    0x1C0A: 'es-DO',
-    0x300A: 'es-EC',
-    0x440A: 'es-SV',
-    0x100A: 'es-GT',
-    0x480A: 'es-HN',
-    0x080A: 'es-MX',
-    0x4C0A: 'es-NI',
-    0x180A: 'es-PA',
-    0x3C0A: 'es-PY',
-    0x280A: 'es-PE',
-    0x500A: 'es-PR',
-
-    // Microsoft has defined two different language codes for
-    // “Spanish with modern sorting” and “Spanish with traditional
-    // sorting”. This makes sense for collation APIs, and it would be
-    // possible to express this in BCP 47 language tags via Unicode
-    // extensions (eg., es-u-co-trad is Spanish with traditional
-    // sorting). However, for storing names in fonts, the distinction
-    // does not make sense, so we give “es” in both cases.
-    0x0C0A: 'es',
-    0x040A: 'es',
-
-    0x540A: 'es-US',
-    0x380A: 'es-UY',
-    0x200A: 'es-VE',
-    0x081D: 'sv-FI',
-    0x041D: 'sv',
-    0x045A: 'syr',
-    0x0428: 'tg',
-    0x085F: 'tzm',
-    0x0449: 'ta',
-    0x0444: 'tt',
-    0x044A: 'te',
-    0x041E: 'th',
-    0x0451: 'bo',
-    0x041F: 'tr',
-    0x0442: 'tk',
-    0x0480: 'ug',
-    0x0422: 'uk',
-    0x042E: 'hsb',
-    0x0420: 'ur',
-    0x0843: 'uz-Cyrl',
-    0x0443: 'uz',
-    0x042A: 'vi',
-    0x0452: 'cy',
-    0x0488: 'wo',
-    0x0485: 'sah',
-    0x0478: 'ii',
-    0x046A: 'yo'
-};
-
-// Returns a IETF BCP 47 language code, for example 'zh-Hant'
-// for 'Chinese in the traditional script'.
-function getLanguageCode(platformID, languageID, ltag) {
-    switch (platformID) {
-        case 0:  // Unicode
-            if (languageID === 0xFFFF) {
-                return 'und';
-            } else if (ltag) {
-                return ltag[languageID];
-            }
-
-            break;
-
-        case 1:  // Macintosh
-            return macLanguages[languageID];
-
-        case 3:  // Windows
-            return windowsLanguages[languageID];
-    }
-
-    return undefined;
-}
-
-var utf16 = 'utf-16';
-
-// MacOS script ID → encoding. This table stores the default case,
-// which can be overridden by macLanguageEncodings.
-var macScriptEncodings = {
-    0: 'macintosh',           // smRoman
-    1: 'x-mac-japanese',      // smJapanese
-    2: 'x-mac-chinesetrad',   // smTradChinese
-    3: 'x-mac-korean',        // smKorean
-    6: 'x-mac-greek',         // smGreek
-    7: 'x-mac-cyrillic',      // smCyrillic
-    9: 'x-mac-devanagai',     // smDevanagari
-    10: 'x-mac-gurmukhi',     // smGurmukhi
-    11: 'x-mac-gujarati',     // smGujarati
-    12: 'x-mac-oriya',        // smOriya
-    13: 'x-mac-bengali',      // smBengali
-    14: 'x-mac-tamil',        // smTamil
-    15: 'x-mac-telugu',       // smTelugu
-    16: 'x-mac-kannada',      // smKannada
-    17: 'x-mac-malayalam',    // smMalayalam
-    18: 'x-mac-sinhalese',    // smSinhalese
-    19: 'x-mac-burmese',      // smBurmese
-    20: 'x-mac-khmer',        // smKhmer
-    21: 'x-mac-thai',         // smThai
-    22: 'x-mac-lao',          // smLao
-    23: 'x-mac-georgian',     // smGeorgian
-    24: 'x-mac-armenian',     // smArmenian
-    25: 'x-mac-chinesesimp',  // smSimpChinese
-    26: 'x-mac-tibetan',      // smTibetan
-    27: 'x-mac-mongolian',    // smMongolian
-    28: 'x-mac-ethiopic',     // smEthiopic
-    29: 'x-mac-ce',           // smCentralEuroRoman
-    30: 'x-mac-vietnamese',   // smVietnamese
-    31: 'x-mac-extarabic'     // smExtArabic
-};
-
-// MacOS language ID → encoding. This table stores the exceptional
-// cases, which override macScriptEncodings. For writing MacOS naming
-// tables, we need to emit a MacOS script ID. Therefore, we cannot
-// merge macScriptEncodings into macLanguageEncodings.
-//
-// http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/Readme.txt
-var macLanguageEncodings = {
-    15: 'x-mac-icelandic',    // langIcelandic
-    17: 'x-mac-turkish',      // langTurkish
-    18: 'x-mac-croatian',     // langCroatian
-    24: 'x-mac-ce',           // langLithuanian
-    25: 'x-mac-ce',           // langPolish
-    26: 'x-mac-ce',           // langHungarian
-    27: 'x-mac-ce',           // langEstonian
-    28: 'x-mac-ce',           // langLatvian
-    30: 'x-mac-icelandic',    // langFaroese
-    37: 'x-mac-romanian',     // langRomanian
-    38: 'x-mac-ce',           // langCzech
-    39: 'x-mac-ce',           // langSlovak
-    40: 'x-mac-ce',           // langSlovenian
-    143: 'x-mac-inuit',       // langInuktitut
-    146: 'x-mac-gaelic'       // langIrishGaelicScript
-};
-
-function getEncoding(platformID, encodingID, languageID) {
-    switch (platformID) {
-        case 0:  // Unicode
-            return utf16;
-
-        case 1:  // Apple Macintosh
-            return macLanguageEncodings[languageID] || macScriptEncodings[encodingID];
-
-        case 3:  // Microsoft Windows
-            if (encodingID === 1 || encodingID === 10) {
-                return utf16;
-            }
-
-            break;
-    }
-
-    return undefined;
-}
-
-// Parse the naming `name` table.
-// FIXME: Format 1 additional fields are not supported yet.
-// ltag is the content of the `ltag' table, such as ['en', 'zh-Hans', 'de-CH-1904'].
-function parseNameTable(data, start, ltag) {
-    var name = {};
-    var p = new parse.Parser(data, start);
-    var format = p.parseUShort();
-    var count = p.parseUShort();
-    var stringOffset = p.offset + p.parseUShort();
-    for (var i = 0; i < count; i++) {
-        var platformID = p.parseUShort();
-        var encodingID = p.parseUShort();
-        var languageID = p.parseUShort();
-        var nameID = p.parseUShort();
-        var property = nameTableNames[nameID] || nameID;
-        var byteLength = p.parseUShort();
-        var offset = p.parseUShort();
-        var language = getLanguageCode(platformID, languageID, ltag);
-        var encoding = getEncoding(platformID, encodingID, languageID);
-        if (encoding !== undefined && language !== undefined) {
-            var text = (void 0);
-            if (encoding === utf16) {
-                text = decode.UTF16(data, stringOffset + offset, byteLength);
-            } else {
-                text = decode.MACSTRING(data, stringOffset + offset, byteLength, encoding);
-            }
-
-            if (text) {
-                var translations = name[property];
-                if (translations === undefined) {
-                    translations = name[property] = {};
-                }
-
-                translations[language] = text;
-            }
-        }
-    }
-
-    var langTagCount = 0;
-    if (format === 1) {
-        // FIXME: Also handle Microsoft's 'name' table 1.
-        langTagCount = p.parseUShort();
-    }
-
-    return name;
-}
-
-// {23: 'foo'} → {'foo': 23}
-// ['bar', 'baz'] → {'bar': 0, 'baz': 1}
-function reverseDict(dict) {
-    var result = {};
-    for (var key in dict) {
-        result[dict[key]] = parseInt(key);
-    }
-
-    return result;
-}
-
-function makeNameRecord(platformID, encodingID, languageID, nameID, length, offset) {
-    return new table.Record('NameRecord', [
-        {name: 'platformID', type: 'USHORT', value: platformID},
-        {name: 'encodingID', type: 'USHORT', value: encodingID},
-        {name: 'languageID', type: 'USHORT', value: languageID},
-        {name: 'nameID', type: 'USHORT', value: nameID},
-        {name: 'length', type: 'USHORT', value: length},
-        {name: 'offset', type: 'USHORT', value: offset}
-    ]);
-}
-
-// Finds the position of needle in haystack, or -1 if not there.
-// Like String.indexOf(), but for arrays.
-function findSubArray(needle, haystack) {
-    var needleLength = needle.length;
-    var limit = haystack.length - needleLength + 1;
-
-    loop:
-    for (var pos = 0; pos < limit; pos++) {
-        for (; pos < limit; pos++) {
-            for (var k = 0; k < needleLength; k++) {
-                if (haystack[pos + k] !== needle[k]) {
-                    continue loop;
-                }
-            }
-
-            return pos;
-        }
-    }
-
-    return -1;
-}
-
-function addStringToPool(s, pool) {
-    var offset = findSubArray(s, pool);
-    if (offset < 0) {
-        offset = pool.length;
-        var i = 0;
-        var len = s.length;
-        for (; i < len; ++i) {
-            pool.push(s[i]);
-        }
-
-    }
-
-    return offset;
-}
-
-function makeNameTable(names, ltag) {
-    var nameID;
-    var nameIDs = [];
-
-    var namesWithNumericKeys = {};
-    var nameTableIds = reverseDict(nameTableNames);
-    for (var key in names) {
-        var id = nameTableIds[key];
-        if (id === undefined) {
-            id = key;
-        }
-
-        nameID = parseInt(id);
-
-        if (isNaN(nameID)) {
-            throw new Error('Name table entry "' + key + '" does not exist, see nameTableNames for complete list.');
-        }
-
-        namesWithNumericKeys[nameID] = names[key];
-        nameIDs.push(nameID);
-    }
-
-    var macLanguageIds = reverseDict(macLanguages);
-    var windowsLanguageIds = reverseDict(windowsLanguages);
-
-    var nameRecords = [];
-    var stringPool = [];
-
-    for (var i = 0; i < nameIDs.length; i++) {
-        nameID = nameIDs[i];
-        var translations = namesWithNumericKeys[nameID];
-        for (var lang in translations) {
-            var text = translations[lang];
-
-            // For MacOS, we try to emit the name in the form that was introduced
-            // in the initial version of the TrueType spec (in the late 1980s).
-            // However, this can fail for various reasons: the requested BCP 47
-            // language code might not have an old-style Mac equivalent;
-            // we might not have a codec for the needed character encoding;
-            // or the name might contain characters that cannot be expressed
-            // in the old-style Macintosh encoding. In case of failure, we emit
-            // the name in a more modern fashion (Unicode encoding with BCP 47
-            // language tags) that is recognized by MacOS 10.5, released in 2009.
-            // If fonts were only read by operating systems, we could simply
-            // emit all names in the modern form; this would be much easier.
-            // However, there are many applications and libraries that read
-            // 'name' tables directly, and these will usually only recognize
-            // the ancient form (silently skipping the unrecognized names).
-            var macPlatform = 1;  // Macintosh
-            var macLanguage = macLanguageIds[lang];
-            var macScript = macLanguageToScript[macLanguage];
-            var macEncoding = getEncoding(macPlatform, macScript, macLanguage);
-            var macName = encode.MACSTRING(text, macEncoding);
-            if (macName === undefined) {
-                macPlatform = 0;  // Unicode
-                macLanguage = ltag.indexOf(lang);
-                if (macLanguage < 0) {
-                    macLanguage = ltag.length;
-                    ltag.push(lang);
-                }
-
-                macScript = 4;  // Unicode 2.0 and later
-                macName = encode.UTF16(text);
-            }
-
-            var macNameOffset = addStringToPool(macName, stringPool);
-            nameRecords.push(makeNameRecord(macPlatform, macScript, macLanguage,
-                                            nameID, macName.length, macNameOffset));
-
-            var winLanguage = windowsLanguageIds[lang];
-            if (winLanguage !== undefined) {
-                var winName = encode.UTF16(text);
-                var winNameOffset = addStringToPool(winName, stringPool);
-                nameRecords.push(makeNameRecord(3, 1, winLanguage,
-                                                nameID, winName.length, winNameOffset));
-            }
-        }
-    }
-
-    nameRecords.sort(function(a, b) {
-        return ((a.platformID - b.platformID) ||
-                (a.encodingID - b.encodingID) ||
-                (a.languageID - b.languageID) ||
-                (a.nameID - b.nameID));
-    });
-
-    var t = new table.Table('name', [
-        {name: 'format', type: 'USHORT', value: 0},
-        {name: 'count', type: 'USHORT', value: nameRecords.length},
-        {name: 'stringOffset', type: 'USHORT', value: 6 + nameRecords.length * 12}
-    ]);
-
-    for (var r = 0; r < nameRecords.length; r++) {
-        t.fields.push({name: 'record_' + r, type: 'RECORD', value: nameRecords[r]});
-    }
-
-    t.fields.push({name: 'strings', type: 'LITERAL', value: stringPool});
-    return t;
-}
-
-var _name = { parse: parseNameTable, make: makeNameTable };
-
-// The `OS/2` table contains metrics required in OpenType fonts.
-
-var unicodeRanges = [
-    {begin: 0x0000, end: 0x007F}, // Basic Latin
-    {begin: 0x0080, end: 0x00FF}, // Latin-1 Supplement
-    {begin: 0x0100, end: 0x017F}, // Latin Extended-A
-    {begin: 0x0180, end: 0x024F}, // Latin Extended-B
-    {begin: 0x0250, end: 0x02AF}, // IPA Extensions
-    {begin: 0x02B0, end: 0x02FF}, // Spacing Modifier Letters
-    {begin: 0x0300, end: 0x036F}, // Combining Diacritical Marks
-    {begin: 0x0370, end: 0x03FF}, // Greek and Coptic
-    {begin: 0x2C80, end: 0x2CFF}, // Coptic
-    {begin: 0x0400, end: 0x04FF}, // Cyrillic
-    {begin: 0x0530, end: 0x058F}, // Armenian
-    {begin: 0x0590, end: 0x05FF}, // Hebrew
-    {begin: 0xA500, end: 0xA63F}, // Vai
-    {begin: 0x0600, end: 0x06FF}, // Arabic
-    {begin: 0x07C0, end: 0x07FF}, // NKo
-    {begin: 0x0900, end: 0x097F}, // Devanagari
-    {begin: 0x0980, end: 0x09FF}, // Bengali
-    {begin: 0x0A00, end: 0x0A7F}, // Gurmukhi
-    {begin: 0x0A80, end: 0x0AFF}, // Gujarati
-    {begin: 0x0B00, end: 0x0B7F}, // Oriya
-    {begin: 0x0B80, end: 0x0BFF}, // Tamil
-    {begin: 0x0C00, end: 0x0C7F}, // Telugu
-    {begin: 0x0C80, end: 0x0CFF}, // Kannada
-    {begin: 0x0D00, end: 0x0D7F}, // Malayalam
-    {begin: 0x0E00, end: 0x0E7F}, // Thai
-    {begin: 0x0E80, end: 0x0EFF}, // Lao
-    {begin: 0x10A0, end: 0x10FF}, // Georgian
-    {begin: 0x1B00, end: 0x1B7F}, // Balinese
-    {begin: 0x1100, end: 0x11FF}, // Hangul Jamo
-    {begin: 0x1E00, end: 0x1EFF}, // Latin Extended Additional
-    {begin: 0x1F00, end: 0x1FFF}, // Greek Extended
-    {begin: 0x2000, end: 0x206F}, // General Punctuation
-    {begin: 0x2070, end: 0x209F}, // Superscripts And Subscripts
-    {begin: 0x20A0, end: 0x20CF}, // Currency Symbol
-    {begin: 0x20D0, end: 0x20FF}, // Combining Diacritical Marks For Symbols
-    {begin: 0x2100, end: 0x214F}, // Letterlike Symbols
-    {begin: 0x2150, end: 0x218F}, // Number Forms
-    {begin: 0x2190, end: 0x21FF}, // Arrows
-    {begin: 0x2200, end: 0x22FF}, // Mathematical Operators
-    {begin: 0x2300, end: 0x23FF}, // Miscellaneous Technical
-    {begin: 0x2400, end: 0x243F}, // Control Pictures
-    {begin: 0x2440, end: 0x245F}, // Optical Character Recognition
-    {begin: 0x2460, end: 0x24FF}, // Enclosed Alphanumerics
-    {begin: 0x2500, end: 0x257F}, // Box Drawing
-    {begin: 0x2580, end: 0x259F}, // Block Elements
-    {begin: 0x25A0, end: 0x25FF}, // Geometric Shapes
-    {begin: 0x2600, end: 0x26FF}, // Miscellaneous Symbols
-    {begin: 0x2700, end: 0x27BF}, // Dingbats
-    {begin: 0x3000, end: 0x303F}, // CJK Symbols And Punctuation
-    {begin: 0x3040, end: 0x309F}, // Hiragana
-    {begin: 0x30A0, end: 0x30FF}, // Katakana
-    {begin: 0x3100, end: 0x312F}, // Bopomofo
-    {begin: 0x3130, end: 0x318F}, // Hangul Compatibility Jamo
-    {begin: 0xA840, end: 0xA87F}, // Phags-pa
-    {begin: 0x3200, end: 0x32FF}, // Enclosed CJK Letters And Months
-    {begin: 0x3300, end: 0x33FF}, // CJK Compatibility
-    {begin: 0xAC00, end: 0xD7AF}, // Hangul Syllables
-    {begin: 0xD800, end: 0xDFFF}, // Non-Plane 0 *
-    {begin: 0x10900, end: 0x1091F}, // Phoenicia
-    {begin: 0x4E00, end: 0x9FFF}, // CJK Unified Ideographs
-    {begin: 0xE000, end: 0xF8FF}, // Private Use Area (plane 0)
-    {begin: 0x31C0, end: 0x31EF}, // CJK Strokes
-    {begin: 0xFB00, end: 0xFB4F}, // Alphabetic Presentation Forms
-    {begin: 0xFB50, end: 0xFDFF}, // Arabic Presentation Forms-A
-    {begin: 0xFE20, end: 0xFE2F}, // Combining Half Marks
-    {begin: 0xFE10, end: 0xFE1F}, // Vertical Forms
-    {begin: 0xFE50, end: 0xFE6F}, // Small Form Variants
-    {begin: 0xFE70, end: 0xFEFF}, // Arabic Presentation Forms-B
-    {begin: 0xFF00, end: 0xFFEF}, // Halfwidth And Fullwidth Forms
-    {begin: 0xFFF0, end: 0xFFFF}, // Specials
-    {begin: 0x0F00, end: 0x0FFF}, // Tibetan
-    {begin: 0x0700, end: 0x074F}, // Syriac
-    {begin: 0x0780, end: 0x07BF}, // Thaana
-    {begin: 0x0D80, end: 0x0DFF}, // Sinhala
-    {begin: 0x1000, end: 0x109F}, // Myanmar
-    {begin: 0x1200, end: 0x137F}, // Ethiopic
-    {begin: 0x13A0, end: 0x13FF}, // Cherokee
-    {begin: 0x1400, end: 0x167F}, // Unified Canadian Aboriginal Syllabics
-    {begin: 0x1680, end: 0x169F}, // Ogham
-    {begin: 0x16A0, end: 0x16FF}, // Runic
-    {begin: 0x1780, end: 0x17FF}, // Khmer
-    {begin: 0x1800, end: 0x18AF}, // Mongolian
-    {begin: 0x2800, end: 0x28FF}, // Braille Patterns
-    {begin: 0xA000, end: 0xA48F}, // Yi Syllables
-    {begin: 0x1700, end: 0x171F}, // Tagalog
-    {begin: 0x10300, end: 0x1032F}, // Old Italic
-    {begin: 0x10330, end: 0x1034F}, // Gothic
-    {begin: 0x10400, end: 0x1044F}, // Deseret
-    {begin: 0x1D000, end: 0x1D0FF}, // Byzantine Musical Symbols
-    {begin: 0x1D400, end: 0x1D7FF}, // Mathematical Alphanumeric Symbols
-    {begin: 0xFF000, end: 0xFFFFD}, // Private Use (plane 15)
-    {begin: 0xFE00, end: 0xFE0F}, // Variation Selectors
-    {begin: 0xE0000, end: 0xE007F}, // Tags
-    {begin: 0x1900, end: 0x194F}, // Limbu
-    {begin: 0x1950, end: 0x197F}, // Tai Le
-    {begin: 0x1980, end: 0x19DF}, // New Tai Lue
-    {begin: 0x1A00, end: 0x1A1F}, // Buginese
-    {begin: 0x2C00, end: 0x2C5F}, // Glagolitic
-    {begin: 0x2D30, end: 0x2D7F}, // Tifinagh
-    {begin: 0x4DC0, end: 0x4DFF}, // Yijing Hexagram Symbols
-    {begin: 0xA800, end: 0xA82F}, // Syloti Nagri
-    {begin: 0x10000, end: 0x1007F}, // Linear B Syllabary
-    {begin: 0x10140, end: 0x1018F}, // Ancient Greek Numbers
-    {begin: 0x10380, end: 0x1039F}, // Ugaritic
-    {begin: 0x103A0, end: 0x103DF}, // Old Persian
-    {begin: 0x10450, end: 0x1047F}, // Shavian
-    {begin: 0x10480, end: 0x104AF}, // Osmanya
-    {begin: 0x10800, end: 0x1083F}, // Cypriot Syllabary
-    {begin: 0x10A00, end: 0x10A5F}, // Kharoshthi
-    {begin: 0x1D300, end: 0x1D35F}, // Tai Xuan Jing Symbols
-    {begin: 0x12000, end: 0x123FF}, // Cuneiform
-    {begin: 0x1D360, end: 0x1D37F}, // Counting Rod Numerals
-    {begin: 0x1B80, end: 0x1BBF}, // Sundanese
-    {begin: 0x1C00, end: 0x1C4F}, // Lepcha
-    {begin: 0x1C50, end: 0x1C7F}, // Ol Chiki
-    {begin: 0xA880, end: 0xA8DF}, // Saurashtra
-    {begin: 0xA900, end: 0xA92F}, // Kayah Li
-    {begin: 0xA930, end: 0xA95F}, // Rejang
-    {begin: 0xAA00, end: 0xAA5F}, // Cham
-    {begin: 0x10190, end: 0x101CF}, // Ancient Symbols
-    {begin: 0x101D0, end: 0x101FF}, // Phaistos Disc
-    {begin: 0x102A0, end: 0x102DF}, // Carian
-    {begin: 0x1F030, end: 0x1F09F}  // Domino Tiles
-];
-
-function getUnicodeRange(unicode) {
-    for (var i = 0; i < unicodeRanges.length; i += 1) {
-        var range = unicodeRanges[i];
-        if (unicode >= range.begin && unicode < range.end) {
-            return i;
-        }
-    }
-
-    return -1;
-}
-
-// Parse the OS/2 and Windows metrics `OS/2` table
-function parseOS2Table(data, start) {
-    var os2 = {};
-    var p = new parse.Parser(data, start);
-    os2.version = p.parseUShort();
-    os2.xAvgCharWidth = p.parseShort();
-    os2.usWeightClass = p.parseUShort();
-    os2.usWidthClass = p.parseUShort();
-    os2.fsType = p.parseUShort();
-    os2.ySubscriptXSize = p.parseShort();
-    os2.ySubscriptYSize = p.parseShort();
-    os2.ySubscriptXOffset = p.parseShort();
-    os2.ySubscriptYOffset = p.parseShort();
-    os2.ySuperscriptXSize = p.parseShort();
-    os2.ySuperscriptYSize = p.parseShort();
-    os2.ySuperscriptXOffset = p.parseShort();
-    os2.ySuperscriptYOffset = p.parseShort();
-    os2.yStrikeoutSize = p.parseShort();
-    os2.yStrikeoutPosition = p.parseShort();
-    os2.sFamilyClass = p.parseShort();
-    os2.panose = [];
-    for (var i = 0; i < 10; i++) {
-        os2.panose[i] = p.parseByte();
-    }
-
-    os2.ulUnicodeRange1 = p.parseULong();
-    os2.ulUnicodeRange2 = p.parseULong();
-    os2.ulUnicodeRange3 = p.parseULong();
-    os2.ulUnicodeRange4 = p.parseULong();
-    os2.achVendID = String.fromCharCode(p.parseByte(), p.parseByte(), p.parseByte(), p.parseByte());
-    os2.fsSelection = p.parseUShort();
-    os2.usFirstCharIndex = p.parseUShort();
-    os2.usLastCharIndex = p.parseUShort();
-    os2.sTypoAscender = p.parseShort();
-    os2.sTypoDescender = p.parseShort();
-    os2.sTypoLineGap = p.parseShort();
-    os2.usWinAscent = p.parseUShort();
-    os2.usWinDescent = p.parseUShort();
-    if (os2.version >= 1) {
-        os2.ulCodePageRange1 = p.parseULong();
-        os2.ulCodePageRange2 = p.parseULong();
-    }
-
-    if (os2.version >= 2) {
-        os2.sxHeight = p.parseShort();
-        os2.sCapHeight = p.parseShort();
-        os2.usDefaultChar = p.parseUShort();
-        os2.usBreakChar = p.parseUShort();
-        os2.usMaxContent = p.parseUShort();
-    }
-
-    return os2;
-}
-
-function makeOS2Table(options) {
-    return new table.Table('OS/2', [
-        {name: 'version', type: 'USHORT', value: 0x0003},
-        {name: 'xAvgCharWidth', type: 'SHORT', value: 0},
-        {name: 'usWeightClass', type: 'USHORT', value: 0},
-        {name: 'usWidthClass', type: 'USHORT', value: 0},
-        {name: 'fsType', type: 'USHORT', value: 0},
-        {name: 'ySubscriptXSize', type: 'SHORT', value: 650},
-        {name: 'ySubscriptYSize', type: 'SHORT', value: 699},
-        {name: 'ySubscriptXOffset', type: 'SHORT', value: 0},
-        {name: 'ySubscriptYOffset', type: 'SHORT', value: 140},
-        {name: 'ySuperscriptXSize', type: 'SHORT', value: 650},
-        {name: 'ySuperscriptYSize', type: 'SHORT', value: 699},
-        {name: 'ySuperscriptXOffset', type: 'SHORT', value: 0},
-        {name: 'ySuperscriptYOffset', type: 'SHORT', value: 479},
-        {name: 'yStrikeoutSize', type: 'SHORT', value: 49},
-        {name: 'yStrikeoutPosition', type: 'SHORT', value: 258},
-        {name: 'sFamilyClass', type: 'SHORT', value: 0},
-        {name: 'bFamilyType', type: 'BYTE', value: 0},
-        {name: 'bSerifStyle', type: 'BYTE', value: 0},
-        {name: 'bWeight', type: 'BYTE', value: 0},
-        {name: 'bProportion', type: 'BYTE', value: 0},
-        {name: 'bContrast', type: 'BYTE', value: 0},
-        {name: 'bStrokeVariation', type: 'BYTE', value: 0},
-        {name: 'bArmStyle', type: 'BYTE', value: 0},
-        {name: 'bLetterform', type: 'BYTE', value: 0},
-        {name: 'bMidline', type: 'BYTE', value: 0},
-        {name: 'bXHeight', type: 'BYTE', value: 0},
-        {name: 'ulUnicodeRange1', type: 'ULONG', value: 0},
-        {name: 'ulUnicodeRange2', type: 'ULONG', value: 0},
-        {name: 'ulUnicodeRange3', type: 'ULONG', value: 0},
-        {name: 'ulUnicodeRange4', type: 'ULONG', value: 0},
-        {name: 'achVendID', type: 'CHARARRAY', value: 'XXXX'},
-        {name: 'fsSelection', type: 'USHORT', value: 0},
-        {name: 'usFirstCharIndex', type: 'USHORT', value: 0},
-        {name: 'usLastCharIndex', type: 'USHORT', value: 0},
-        {name: 'sTypoAscender', type: 'SHORT', value: 0},
-        {name: 'sTypoDescender', type: 'SHORT', value: 0},
-        {name: 'sTypoLineGap', type: 'SHORT', value: 0},
-        {name: 'usWinAscent', type: 'USHORT', value: 0},
-        {name: 'usWinDescent', type: 'USHORT', value: 0},
-        {name: 'ulCodePageRange1', type: 'ULONG', value: 0},
-        {name: 'ulCodePageRange2', type: 'ULONG', value: 0},
-        {name: 'sxHeight', type: 'SHORT', value: 0},
-        {name: 'sCapHeight', type: 'SHORT', value: 0},
-        {name: 'usDefaultChar', type: 'USHORT', value: 0},
-        {name: 'usBreakChar', type: 'USHORT', value: 0},
-        {name: 'usMaxContext', type: 'USHORT', value: 0}
-    ], options);
-}
-
-var os2 = { parse: parseOS2Table, make: makeOS2Table, unicodeRanges: unicodeRanges, getUnicodeRange: getUnicodeRange };
-
-// The `post` table stores additional PostScript information, such as glyph names.
-
-// Parse the PostScript `post` table
-function parsePostTable(data, start) {
-    var post = {};
-    var p = new parse.Parser(data, start);
-    post.version = p.parseVersion();
-    post.italicAngle = p.parseFixed();
-    post.underlinePosition = p.parseShort();
-    post.underlineThickness = p.parseShort();
-    post.isFixedPitch = p.parseULong();
-    post.minMemType42 = p.parseULong();
-    post.maxMemType42 = p.parseULong();
-    post.minMemType1 = p.parseULong();
-    post.maxMemType1 = p.parseULong();
-    switch (post.version) {
-        case 1:
-            post.names = standardNames.slice();
-            break;
-        case 2:
-            post.numberOfGlyphs = p.parseUShort();
-            post.glyphNameIndex = new Array(post.numberOfGlyphs);
-            for (var i = 0; i < post.numberOfGlyphs; i++) {
-                post.glyphNameIndex[i] = p.parseUShort();
-            }
-
-            post.names = [];
-            for (var i$1 = 0; i$1 < post.numberOfGlyphs; i$1++) {
-                if (post.glyphNameIndex[i$1] >= standardNames.length) {
-                    var nameLength = p.parseChar();
-                    post.names.push(p.parseString(nameLength));
-                }
-            }
-
-            break;
-        case 2.5:
-            post.numberOfGlyphs = p.parseUShort();
-            post.offset = new Array(post.numberOfGlyphs);
-            for (var i$2 = 0; i$2 < post.numberOfGlyphs; i$2++) {
-                post.offset[i$2] = p.parseChar();
-            }
-
-            break;
-    }
-    return post;
-}
-
-function makePostTable() {
-    return new table.Table('post', [
-        {name: 'version', type: 'FIXED', value: 0x00030000},
-        {name: 'italicAngle', type: 'FIXED', value: 0},
-        {name: 'underlinePosition', type: 'FWORD', value: 0},
-        {name: 'underlineThickness', type: 'FWORD', value: 0},
-        {name: 'isFixedPitch', type: 'ULONG', value: 0},
-        {name: 'minMemType42', type: 'ULONG', value: 0},
-        {name: 'maxMemType42', type: 'ULONG', value: 0},
-        {name: 'minMemType1', type: 'ULONG', value: 0},
-        {name: 'maxMemType1', type: 'ULONG', value: 0}
-    ]);
-}
-
-var post = { parse: parsePostTable, make: makePostTable };
-
-// The `GSUB` table contains ligatures, among other things.
-
-var subtableParsers = new Array(9);         // subtableParsers[0] is unused
-
-// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#SS
-subtableParsers[1] = function parseLookup1() {
-    var start = this.offset + this.relativeOffset;
-    var substFormat = this.parseUShort();
-    if (substFormat === 1) {
-        return {
-            substFormat: 1,
-            coverage: this.parsePointer(opentype_module_Parser.coverage),
-            deltaGlyphId: this.parseUShort()
-        };
-    } else if (substFormat === 2) {
-        return {
-            substFormat: 2,
-            coverage: this.parsePointer(opentype_module_Parser.coverage),
-            substitute: this.parseOffset16List()
-        };
-    }
-    check.assert(false, '0x' + start.toString(16) + ': lookup type 1 format must be 1 or 2.');
-};
-
-// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#MS
-subtableParsers[2] = function parseLookup2() {
-    var substFormat = this.parseUShort();
-    check.argument(substFormat === 1, 'GSUB Multiple Substitution Subtable identifier-format must be 1');
-    return {
-        substFormat: substFormat,
-        coverage: this.parsePointer(opentype_module_Parser.coverage),
-        sequences: this.parseListOfLists()
-    };
-};
-
-// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#AS
-subtableParsers[3] = function parseLookup3() {
-    var substFormat = this.parseUShort();
-    check.argument(substFormat === 1, 'GSUB Alternate Substitution Subtable identifier-format must be 1');
-    return {
-        substFormat: substFormat,
-        coverage: this.parsePointer(opentype_module_Parser.coverage),
-        alternateSets: this.parseListOfLists()
-    };
-};
-
-// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#LS
-subtableParsers[4] = function parseLookup4() {
-    var substFormat = this.parseUShort();
-    check.argument(substFormat === 1, 'GSUB ligature table identifier-format must be 1');
-    return {
-        substFormat: substFormat,
-        coverage: this.parsePointer(opentype_module_Parser.coverage),
-        ligatureSets: this.parseListOfLists(function() {
-            return {
-                ligGlyph: this.parseUShort(),
-                components: this.parseUShortList(this.parseUShort() - 1)
-            };
-        })
-    };
-};
-
-var lookupRecordDesc = {
-    sequenceIndex: opentype_module_Parser.uShort,
-    lookupListIndex: opentype_module_Parser.uShort
-};
-
-// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#CSF
-subtableParsers[5] = function parseLookup5() {
-    var start = this.offset + this.relativeOffset;
-    var substFormat = this.parseUShort();
-
-    if (substFormat === 1) {
-        return {
-            substFormat: substFormat,
-            coverage: this.parsePointer(opentype_module_Parser.coverage),
-            ruleSets: this.parseListOfLists(function() {
-                var glyphCount = this.parseUShort();
-                var substCount = this.parseUShort();
-                return {
-                    input: this.parseUShortList(glyphCount - 1),
-                    lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)
-                };
-            })
-        };
-    } else if (substFormat === 2) {
-        return {
-            substFormat: substFormat,
-            coverage: this.parsePointer(opentype_module_Parser.coverage),
-            classDef: this.parsePointer(opentype_module_Parser.classDef),
-            classSets: this.parseListOfLists(function() {
-                var glyphCount = this.parseUShort();
-                var substCount = this.parseUShort();
-                return {
-                    classes: this.parseUShortList(glyphCount - 1),
-                    lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)
-                };
-            })
-        };
-    } else if (substFormat === 3) {
-        var glyphCount = this.parseUShort();
-        var substCount = this.parseUShort();
-        return {
-            substFormat: substFormat,
-            coverages: this.parseList(glyphCount, opentype_module_Parser.pointer(opentype_module_Parser.coverage)),
-            lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)
-        };
-    }
-    check.assert(false, '0x' + start.toString(16) + ': lookup type 5 format must be 1, 2 or 3.');
-};
-
-// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#CC
-subtableParsers[6] = function parseLookup6() {
-    var start = this.offset + this.relativeOffset;
-    var substFormat = this.parseUShort();
-    if (substFormat === 1) {
-        return {
-            substFormat: 1,
-            coverage: this.parsePointer(opentype_module_Parser.coverage),
-            chainRuleSets: this.parseListOfLists(function() {
-                return {
-                    backtrack: this.parseUShortList(),
-                    input: this.parseUShortList(this.parseShort() - 1),
-                    lookahead: this.parseUShortList(),
-                    lookupRecords: this.parseRecordList(lookupRecordDesc)
-                };
-            })
-        };
-    } else if (substFormat === 2) {
-        return {
-            substFormat: 2,
-            coverage: this.parsePointer(opentype_module_Parser.coverage),
-            backtrackClassDef: this.parsePointer(opentype_module_Parser.classDef),
-            inputClassDef: this.parsePointer(opentype_module_Parser.classDef),
-            lookaheadClassDef: this.parsePointer(opentype_module_Parser.classDef),
-            chainClassSet: this.parseListOfLists(function() {
-                return {
-                    backtrack: this.parseUShortList(),
-                    input: this.parseUShortList(this.parseShort() - 1),
-                    lookahead: this.parseUShortList(),
-                    lookupRecords: this.parseRecordList(lookupRecordDesc)
-                };
-            })
-        };
-    } else if (substFormat === 3) {
-        return {
-            substFormat: 3,
-            backtrackCoverage: this.parseList(opentype_module_Parser.pointer(opentype_module_Parser.coverage)),
-            inputCoverage: this.parseList(opentype_module_Parser.pointer(opentype_module_Parser.coverage)),
-            lookaheadCoverage: this.parseList(opentype_module_Parser.pointer(opentype_module_Parser.coverage)),
-            lookupRecords: this.parseRecordList(lookupRecordDesc)
-        };
-    }
-    check.assert(false, '0x' + start.toString(16) + ': lookup type 6 format must be 1, 2 or 3.');
-};
-
-// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#ES
-subtableParsers[7] = function parseLookup7() {
-    // Extension Substitution subtable
-    var substFormat = this.parseUShort();
-    check.argument(substFormat === 1, 'GSUB Extension Substitution subtable identifier-format must be 1');
-    var extensionLookupType = this.parseUShort();
-    var extensionParser = new opentype_module_Parser(this.data, this.offset + this.parseULong());
-    return {
-        substFormat: 1,
-        lookupType: extensionLookupType,
-        extension: subtableParsers[extensionLookupType].call(extensionParser)
-    };
-};
-
-// https://www.microsoft.com/typography/OTSPEC/GSUB.htm#RCCS
-subtableParsers[8] = function parseLookup8() {
-    var substFormat = this.parseUShort();
-    check.argument(substFormat === 1, 'GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1');
-    return {
-        substFormat: substFormat,
-        coverage: this.parsePointer(opentype_module_Parser.coverage),
-        backtrackCoverage: this.parseList(opentype_module_Parser.pointer(opentype_module_Parser.coverage)),
-        lookaheadCoverage: this.parseList(opentype_module_Parser.pointer(opentype_module_Parser.coverage)),
-        substitutes: this.parseUShortList()
-    };
-};
-
-// https://www.microsoft.com/typography/OTSPEC/gsub.htm
-function parseGsubTable(data, start) {
-    start = start || 0;
-    var p = new opentype_module_Parser(data, start);
-    var tableVersion = p.parseVersion(1);
-    check.argument(tableVersion === 1 || tableVersion === 1.1, 'Unsupported GSUB table version.');
-    if (tableVersion === 1) {
-        return {
-            version: tableVersion,
-            scripts: p.parseScriptList(),
-            features: p.parseFeatureList(),
-            lookups: p.parseLookupList(subtableParsers)
-        };
-    } else {
-        return {
-            version: tableVersion,
-            scripts: p.parseScriptList(),
-            features: p.parseFeatureList(),
-            lookups: p.parseLookupList(subtableParsers),
-            variations: p.parseFeatureVariationsList()
-        };
-    }
-
-}
-
-// GSUB Writing //////////////////////////////////////////////
-var subtableMakers = new Array(9);
-
-subtableMakers[1] = function makeLookup1(subtable) {
-    if (subtable.substFormat === 1) {
-        return new table.Table('substitutionTable', [
-            {name: 'substFormat', type: 'USHORT', value: 1},
-            {name: 'coverage', type: 'TABLE', value: new table.Coverage(subtable.coverage)},
-            {name: 'deltaGlyphID', type: 'USHORT', value: subtable.deltaGlyphId}
-        ]);
-    } else {
-        return new table.Table('substitutionTable', [
-            {name: 'substFormat', type: 'USHORT', value: 2},
-            {name: 'coverage', type: 'TABLE', value: new table.Coverage(subtable.coverage)}
-        ].concat(table.ushortList('substitute', subtable.substitute)));
-    }
-};
-
-subtableMakers[2] = function makeLookup2(subtable) {
-    check.assert(subtable.substFormat === 1, 'Lookup type 2 substFormat must be 1.');
-    return new table.Table('substitutionTable', [
-        {name: 'substFormat', type: 'USHORT', value: 1},
-        {name: 'coverage', type: 'TABLE', value: new table.Coverage(subtable.coverage)}
-    ].concat(table.tableList('seqSet', subtable.sequences, function(sequenceSet) {
-        return new table.Table('sequenceSetTable', table.ushortList('sequence', sequenceSet));
-    })));
-};
-
-subtableMakers[3] = function makeLookup3(subtable) {
-    check.assert(subtable.substFormat === 1, 'Lookup type 3 substFormat must be 1.');
-    return new table.Table('substitutionTable', [
-        {name: 'substFormat', type: 'USHORT', value: 1},
-        {name: 'coverage', type: 'TABLE', value: new table.Coverage(subtable.coverage)}
-    ].concat(table.tableList('altSet', subtable.alternateSets, function(alternateSet) {
-        return new table.Table('alternateSetTable', table.ushortList('alternate', alternateSet));
-    })));
-};
-
-subtableMakers[4] = function makeLookup4(subtable) {
-    check.assert(subtable.substFormat === 1, 'Lookup type 4 substFormat must be 1.');
-    return new table.Table('substitutionTable', [
-        {name: 'substFormat', type: 'USHORT', value: 1},
-        {name: 'coverage', type: 'TABLE', value: new table.Coverage(subtable.coverage)}
-    ].concat(table.tableList('ligSet', subtable.ligatureSets, function(ligatureSet) {
-        return new table.Table('ligatureSetTable', table.tableList('ligature', ligatureSet, function(ligature) {
-            return new table.Table('ligatureTable',
-                [{name: 'ligGlyph', type: 'USHORT', value: ligature.ligGlyph}]
-                .concat(table.ushortList('component', ligature.components, ligature.components.length + 1))
-            );
-        }));
-    })));
-};
-
-subtableMakers[6] = function makeLookup6(subtable) {
-    if (subtable.substFormat === 1) {
-        var returnTable = new table.Table('chainContextTable', [
-            {name: 'substFormat', type: 'USHORT', value: subtable.substFormat},
-            {name: 'coverage', type: 'TABLE', value: new table.Coverage(subtable.coverage)}
-        ].concat(table.tableList('chainRuleSet', subtable.chainRuleSets, function(chainRuleSet) {
-            return new table.Table('chainRuleSetTable', table.tableList('chainRule', chainRuleSet, function(chainRule) {
-                var tableData = table.ushortList('backtrackGlyph', chainRule.backtrack, chainRule.backtrack.length)
-                    .concat(table.ushortList('inputGlyph', chainRule.input, chainRule.input.length + 1))
-                    .concat(table.ushortList('lookaheadGlyph', chainRule.lookahead, chainRule.lookahead.length))
-                    .concat(table.ushortList('substitution', [], chainRule.lookupRecords.length));
-
-                chainRule.lookupRecords.forEach(function (record, i) {
-                    tableData = tableData
-                        .concat({name: 'sequenceIndex' + i, type: 'USHORT', value: record.sequenceIndex})
-                        .concat({name: 'lookupListIndex' + i, type: 'USHORT', value: record.lookupListIndex});
-                });
-                return new table.Table('chainRuleTable', tableData);
-            }));
-        })));
-        return returnTable;
-    } else if (subtable.substFormat === 2) {
-        check.assert(false, 'lookup type 6 format 2 is not yet supported.');
-    } else if (subtable.substFormat === 3) {
-        var tableData = [
-            {name: 'substFormat', type: 'USHORT', value: subtable.substFormat} ];
-
-        tableData.push({name: 'backtrackGlyphCount', type: 'USHORT', value: subtable.backtrackCoverage.length});
-        subtable.backtrackCoverage.forEach(function (coverage, i) {
-            tableData.push({name: 'backtrackCoverage' + i, type: 'TABLE', value: new table.Coverage(coverage)});
-        });
-        tableData.push({name: 'inputGlyphCount', type: 'USHORT', value: subtable.inputCoverage.length});
-        subtable.inputCoverage.forEach(function (coverage, i) {
-            tableData.push({name: 'inputCoverage' + i, type: 'TABLE', value: new table.Coverage(coverage)});
-        });
-        tableData.push({name: 'lookaheadGlyphCount', type: 'USHORT', value: subtable.lookaheadCoverage.length});
-        subtable.lookaheadCoverage.forEach(function (coverage, i) {
-            tableData.push({name: 'lookaheadCoverage' + i, type: 'TABLE', value: new table.Coverage(coverage)});
-        });
-
-        tableData.push({name: 'substitutionCount', type: 'USHORT', value: subtable.lookupRecords.length});
-        subtable.lookupRecords.forEach(function (record, i) {
-            tableData = tableData
-                .concat({name: 'sequenceIndex' + i, type: 'USHORT', value: record.sequenceIndex})
-                .concat({name: 'lookupListIndex' + i, type: 'USHORT', value: record.lookupListIndex});
-        });
-
-        var returnTable$1 = new table.Table('chainContextTable', tableData);
-
-        return returnTable$1;
-    }
-
-    check.assert(false, 'lookup type 6 format must be 1, 2 or 3.');
-};
-
-function makeGsubTable(gsub) {
-    return new table.Table('GSUB', [
-        {name: 'version', type: 'ULONG', value: 0x10000},
-        {name: 'scripts', type: 'TABLE', value: new table.ScriptList(gsub.scripts)},
-        {name: 'features', type: 'TABLE', value: new table.FeatureList(gsub.features)},
-        {name: 'lookups', type: 'TABLE', value: new table.LookupList(gsub.lookups, subtableMakers)}
-    ]);
-}
-
-var gsub = { parse: parseGsubTable, make: makeGsubTable };
-
-// The `GPOS` table contains kerning pairs, among other things.
-
-// Parse the metadata `meta` table.
-// https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6meta.html
-function parseMetaTable(data, start) {
-    var p = new parse.Parser(data, start);
-    var tableVersion = p.parseULong();
-    check.argument(tableVersion === 1, 'Unsupported META table version.');
-    p.parseULong(); // flags - currently unused and set to 0
-    p.parseULong(); // tableOffset
-    var numDataMaps = p.parseULong();
-
-    var tags = {};
-    for (var i = 0; i < numDataMaps; i++) {
-        var tag = p.parseTag();
-        var dataOffset = p.parseULong();
-        var dataLength = p.parseULong();
-        var text = decode.UTF8(data, start + dataOffset, dataLength);
-
-        tags[tag] = text;
-    }
-    return tags;
-}
-
-function makeMetaTable(tags) {
-    var numTags = Object.keys(tags).length;
-    var stringPool = '';
-    var stringPoolOffset = 16 + numTags * 12;
-
-    var result = new table.Table('meta', [
-        {name: 'version', type: 'ULONG', value: 1},
-        {name: 'flags', type: 'ULONG', value: 0},
-        {name: 'offset', type: 'ULONG', value: stringPoolOffset},
-        {name: 'numTags', type: 'ULONG', value: numTags}
-    ]);
-
-    for (var tag in tags) {
-        var pos = stringPool.length;
-        stringPool += tags[tag];
-
-        result.fields.push({name: 'tag ' + tag, type: 'TAG', value: tag});
-        result.fields.push({name: 'offset ' + tag, type: 'ULONG', value: stringPoolOffset + pos});
-        result.fields.push({name: 'length ' + tag, type: 'ULONG', value: tags[tag].length});
-    }
-
-    result.fields.push({name: 'stringPool', type: 'CHARARRAY', value: stringPool});
-
-    return result;
-}
-
-var meta = { parse: parseMetaTable, make: makeMetaTable };
-
-// The `sfnt` wrapper provides organization for the tables in the font.
-
-function log2(v) {
-    return Math.log(v) / Math.log(2) | 0;
-}
-
-function computeCheckSum(bytes) {
-    while (bytes.length % 4 !== 0) {
-        bytes.push(0);
-    }
-
-    var sum = 0;
-    for (var i = 0; i < bytes.length; i += 4) {
-        sum += (bytes[i] << 24) +
-            (bytes[i + 1] << 16) +
-            (bytes[i + 2] << 8) +
-            (bytes[i + 3]);
-    }
-
-    sum %= Math.pow(2, 32);
-    return sum;
-}
-
-function makeTableRecord(tag, checkSum, offset, length) {
-    return new table.Record('Table Record', [
-        {name: 'tag', type: 'TAG', value: tag !== undefined ? tag : ''},
-        {name: 'checkSum', type: 'ULONG', value: checkSum !== undefined ? checkSum : 0},
-        {name: 'offset', type: 'ULONG', value: offset !== undefined ? offset : 0},
-        {name: 'length', type: 'ULONG', value: length !== undefined ? length : 0}
-    ]);
-}
-
-function makeSfntTable(tables) {
-    var sfnt = new table.Table('sfnt', [
-        {name: 'version', type: 'TAG', value: 'OTTO'},
-        {name: 'numTables', type: 'USHORT', value: 0},
-        {name: 'searchRange', type: 'USHORT', value: 0},
-        {name: 'entrySelector', type: 'USHORT', value: 0},
-        {name: 'rangeShift', type: 'USHORT', value: 0}
-    ]);
-    sfnt.tables = tables;
-    sfnt.numTables = tables.length;
-    var highestPowerOf2 = Math.pow(2, log2(sfnt.numTables));
-    sfnt.searchRange = 16 * highestPowerOf2;
-    sfnt.entrySelector = log2(highestPowerOf2);
-    sfnt.rangeShift = sfnt.numTables * 16 - sfnt.searchRange;
-
-    var recordFields = [];
-    var tableFields = [];
-
-    var offset = sfnt.sizeOf() + (makeTableRecord().sizeOf() * sfnt.numTables);
-    while (offset % 4 !== 0) {
-        offset += 1;
-        tableFields.push({name: 'padding', type: 'BYTE', value: 0});
-    }
-
-    for (var i = 0; i < tables.length; i += 1) {
-        var t = tables[i];
-        check.argument(t.tableName.length === 4, 'Table name' + t.tableName + ' is invalid.');
-        var tableLength = t.sizeOf();
-        var tableRecord = makeTableRecord(t.tableName, computeCheckSum(t.encode()), offset, tableLength);
-        recordFields.push({name: tableRecord.tag + ' Table Record', type: 'RECORD', value: tableRecord});
-        tableFields.push({name: t.tableName + ' table', type: 'RECORD', value: t});
-        offset += tableLength;
-        check.argument(!isNaN(offset), 'Something went wrong calculating the offset.');
-        while (offset % 4 !== 0) {
-            offset += 1;
-            tableFields.push({name: 'padding', type: 'BYTE', value: 0});
-        }
-    }
-
-    // Table records need to be sorted alphabetically.
-    recordFields.sort(function(r1, r2) {
-        if (r1.value.tag > r2.value.tag) {
-            return 1;
-        } else {
-            return -1;
-        }
-    });
-
-    sfnt.fields = sfnt.fields.concat(recordFields);
-    sfnt.fields = sfnt.fields.concat(tableFields);
-    return sfnt;
-}
-
-// Get the metrics for a character. If the string has more than one character
-// this function returns metrics for the first available character.
-// You can provide optional fallback metrics if no characters are available.
-function metricsForChar(font, chars, notFoundMetrics) {
-    for (var i = 0; i < chars.length; i += 1) {
-        var glyphIndex = font.charToGlyphIndex(chars[i]);
-        if (glyphIndex > 0) {
-            var glyph = font.glyphs.get(glyphIndex);
-            return glyph.getMetrics();
-        }
-    }
-
-    return notFoundMetrics;
-}
-
-function average(vs) {
-    var sum = 0;
-    for (var i = 0; i < vs.length; i += 1) {
-        sum += vs[i];
-    }
-
-    return sum / vs.length;
-}
-
-// Convert the font object to a SFNT data structure.
-// This structure contains all the necessary tables and metadata to create a binary OTF file.
-function fontToSfntTable(font) {
-    var xMins = [];
-    var yMins = [];
-    var xMaxs = [];
-    var yMaxs = [];
-    var advanceWidths = [];
-    var leftSideBearings = [];
-    var rightSideBearings = [];
-    var firstCharIndex;
-    var lastCharIndex = 0;
-    var ulUnicodeRange1 = 0;
-    var ulUnicodeRange2 = 0;
-    var ulUnicodeRange3 = 0;
-    var ulUnicodeRange4 = 0;
-
-    for (var i = 0; i < font.glyphs.length; i += 1) {
-        var glyph = font.glyphs.get(i);
-        var unicode = glyph.unicode | 0;
-
-        if (isNaN(glyph.advanceWidth)) {
-            throw new Error('Glyph ' + glyph.name + ' (' + i + '): advanceWidth is not a number.');
-        }
-
-        if (firstCharIndex > unicode || firstCharIndex === undefined) {
-            // ignore .notdef char
-            if (unicode > 0) {
-                firstCharIndex = unicode;
-            }
-        }
-
-        if (lastCharIndex < unicode) {
-            lastCharIndex = unicode;
-        }
-
-        var position = os2.getUnicodeRange(unicode);
-        if (position < 32) {
-            ulUnicodeRange1 |= 1 << position;
-        } else if (position < 64) {
-            ulUnicodeRange2 |= 1 << position - 32;
-        } else if (position < 96) {
-            ulUnicodeRange3 |= 1 << position - 64;
-        } else if (position < 123) {
-            ulUnicodeRange4 |= 1 << position - 96;
-        } else {
-            throw new Error('Unicode ranges bits > 123 are reserved for internal usage');
-        }
-        // Skip non-important characters.
-        if (glyph.name === '.notdef') { continue; }
-        var metrics = glyph.getMetrics();
-        xMins.push(metrics.xMin);
-        yMins.push(metrics.yMin);
-        xMaxs.push(metrics.xMax);
-        yMaxs.push(metrics.yMax);
-        leftSideBearings.push(metrics.leftSideBearing);
-        rightSideBearings.push(metrics.rightSideBearing);
-        advanceWidths.push(glyph.advanceWidth);
-    }
-
-    var globals = {
-        xMin: Math.min.apply(null, xMins),
-        yMin: Math.min.apply(null, yMins),
-        xMax: Math.max.apply(null, xMaxs),
-        yMax: Math.max.apply(null, yMaxs),
-        advanceWidthMax: Math.max.apply(null, advanceWidths),
-        advanceWidthAvg: average(advanceWidths),
-        minLeftSideBearing: Math.min.apply(null, leftSideBearings),
-        maxLeftSideBearing: Math.max.apply(null, leftSideBearings),
-        minRightSideBearing: Math.min.apply(null, rightSideBearings)
-    };
-    globals.ascender = font.ascender;
-    globals.descender = font.descender;
-
-    var headTable = head.make({
-        flags: 3, // 00000011 (baseline for font at y=0; left sidebearing point at x=0)
-        unitsPerEm: font.unitsPerEm,
-        xMin: globals.xMin,
-        yMin: globals.yMin,
-        xMax: globals.xMax,
-        yMax: globals.yMax,
-        lowestRecPPEM: 3,
-        createdTimestamp: font.createdTimestamp
-    });
-
-    var hheaTable = hhea.make({
-        ascender: globals.ascender,
-        descender: globals.descender,
-        advanceWidthMax: globals.advanceWidthMax,
-        minLeftSideBearing: globals.minLeftSideBearing,
-        minRightSideBearing: globals.minRightSideBearing,
-        xMaxExtent: globals.maxLeftSideBearing + (globals.xMax - globals.xMin),
-        numberOfHMetrics: font.glyphs.length
-    });
-
-    var maxpTable = maxp.make(font.glyphs.length);
-
-    var os2Table = os2.make(Object.assign({
-        xAvgCharWidth: Math.round(globals.advanceWidthAvg),
-        usFirstCharIndex: firstCharIndex,
-        usLastCharIndex: lastCharIndex,
-        ulUnicodeRange1: ulUnicodeRange1,
-        ulUnicodeRange2: ulUnicodeRange2,
-        ulUnicodeRange3: ulUnicodeRange3,
-        ulUnicodeRange4: ulUnicodeRange4,
-        // See http://typophile.com/node/13081 for more info on vertical metrics.
-        // We get metrics for typical characters (such as "x" for xHeight).
-        // We provide some fallback characters if characters are unavailable: their
-        // ordering was chosen experimentally.
-        sTypoAscender: globals.ascender,
-        sTypoDescender: globals.descender,
-        sTypoLineGap: 0,
-        usWinAscent: globals.yMax,
-        usWinDescent: Math.abs(globals.yMin),
-        ulCodePageRange1: 1, // FIXME: hard-code Latin 1 support for now
-        sxHeight: metricsForChar(font, 'xyvw', {yMax: Math.round(globals.ascender / 2)}).yMax,
-        sCapHeight: metricsForChar(font, 'HIKLEFJMNTZBDPRAGOQSUVWXY', globals).yMax,
-        usDefaultChar: font.hasChar(' ') ? 32 : 0, // Use space as the default character, if available.
-        usBreakChar: font.hasChar(' ') ? 32 : 0, // Use space as the break character, if available.
-    }, font.tables.os2));
-
-    var hmtxTable = hmtx.make(font.glyphs);
-    var cmapTable = cmap.make(font.glyphs);
-
-    var englishFamilyName = font.getEnglishName('fontFamily');
-    var englishStyleName = font.getEnglishName('fontSubfamily');
-    var englishFullName = englishFamilyName + ' ' + englishStyleName;
-    var postScriptName = font.getEnglishName('postScriptName');
-    if (!postScriptName) {
-        postScriptName = englishFamilyName.replace(/\s/g, '') + '-' + englishStyleName;
-    }
-
-    var names = {};
-    for (var n in font.names) {
-        names[n] = font.names[n];
-    }
-
-    if (!names.uniqueID) {
-        names.uniqueID = {en: font.getEnglishName('manufacturer') + ':' + englishFullName};
-    }
-
-    if (!names.postScriptName) {
-        names.postScriptName = {en: postScriptName};
-    }
-
-    if (!names.preferredFamily) {
-        names.preferredFamily = font.names.fontFamily;
-    }
-
-    if (!names.preferredSubfamily) {
-        names.preferredSubfamily = font.names.fontSubfamily;
-    }
-
-    var languageTags = [];
-    var nameTable = _name.make(names, languageTags);
-    var ltagTable = (languageTags.length > 0 ? ltag.make(languageTags) : undefined);
-
-    var postTable = post.make();
-    var cffTable = cff.make(font.glyphs, {
-        version: font.getEnglishName('version'),
-        fullName: englishFullName,
-        familyName: englishFamilyName,
-        weightName: englishStyleName,
-        postScriptName: postScriptName,
-        unitsPerEm: font.unitsPerEm,
-        fontBBox: [0, globals.yMin, globals.ascender, globals.advanceWidthMax]
-    });
-
-    var metaTable = (font.metas && Object.keys(font.metas).length > 0) ? meta.make(font.metas) : undefined;
-
-    // The order does not matter because makeSfntTable() will sort them.
-    var tables = [headTable, hheaTable, maxpTable, os2Table, nameTable, cmapTable, postTable, cffTable, hmtxTable];
-    if (ltagTable) {
-        tables.push(ltagTable);
-    }
-    // Optional tables
-    if (font.tables.gsub) {
-        tables.push(gsub.make(font.tables.gsub));
-    }
-    if (metaTable) {
-        tables.push(metaTable);
-    }
-
-    var sfntTable = makeSfntTable(tables);
-
-    // Compute the font's checkSum and store it in head.checkSumAdjustment.
-    var bytes = sfntTable.encode();
-    var checkSum = computeCheckSum(bytes);
-    var tableFields = sfntTable.fields;
-    var checkSumAdjusted = false;
-    for (var i$1 = 0; i$1 < tableFields.length; i$1 += 1) {
-        if (tableFields[i$1].name === 'head table') {
-            tableFields[i$1].value.checkSumAdjustment = 0xB1B0AFBA - checkSum;
-            checkSumAdjusted = true;
-            break;
-        }
-    }
-
-    if (!checkSumAdjusted) {
-        throw new Error('Could not find head table with checkSum to adjust.');
-    }
-
-    return sfntTable;
-}
-
-var sfnt = { make: makeSfntTable, fontToTable: fontToSfntTable, computeCheckSum: computeCheckSum };
-
-// The Layout object is the prototype of Substitution objects, and provides
-
-function searchTag(arr, tag) {
-    /* jshint bitwise: false */
-    var imin = 0;
-    var imax = arr.length - 1;
-    while (imin <= imax) {
-        var imid = (imin + imax) >>> 1;
-        var val = arr[imid].tag;
-        if (val === tag) {
-            return imid;
-        } else if (val < tag) {
-            imin = imid + 1;
-        } else { imax = imid - 1; }
-    }
-    // Not found: return -1-insertion point
-    return -imin - 1;
-}
-
-function binSearch(arr, value) {
-    /* jshint bitwise: false */
-    var imin = 0;
-    var imax = arr.length - 1;
-    while (imin <= imax) {
-        var imid = (imin + imax) >>> 1;
-        var val = arr[imid];
-        if (val === value) {
-            return imid;
-        } else if (val < value) {
-            imin = imid + 1;
-        } else { imax = imid - 1; }
-    }
-    // Not found: return -1-insertion point
-    return -imin - 1;
-}
-
-// binary search in a list of ranges (coverage, class definition)
-function searchRange(ranges, value) {
-    // jshint bitwise: false
-    var range;
-    var imin = 0;
-    var imax = ranges.length - 1;
-    while (imin <= imax) {
-        var imid = (imin + imax) >>> 1;
-        range = ranges[imid];
-        var start = range.start;
-        if (start === value) {
-            return range;
-        } else if (start < value) {
-            imin = imid + 1;
-        } else { imax = imid - 1; }
-    }
-    if (imin > 0) {
-        range = ranges[imin - 1];
-        if (value > range.end) { return 0; }
-        return range;
-    }
-}
-
-/**
- * @exports opentype.Layout
- * @class
- */
-function Layout(font, tableName) {
-    this.font = font;
-    this.tableName = tableName;
-}
-
-Layout.prototype = {
-
-    /**
-     * Binary search an object by "tag" property
-     * @instance
-     * @function searchTag
-     * @memberof opentype.Layout
-     * @param  {Array} arr
-     * @param  {string} tag
-     * @return {number}
-     */
-    searchTag: searchTag,
-
-    /**
-     * Binary search in a list of numbers
-     * @instance
-     * @function binSearch
-     * @memberof opentype.Layout
-     * @param  {Array} arr
-     * @param  {number} value
-     * @return {number}
-     */
-    binSearch: binSearch,
-
-    /**
-     * Get or create the Layout table (GSUB, GPOS etc).
-     * @param  {boolean} create - Whether to create a new one.
-     * @return {Object} The GSUB or GPOS table.
-     */
-    getTable: function(create) {
-        var layout = this.font.tables[this.tableName];
-        if (!layout && create) {
-            layout = this.font.tables[this.tableName] = this.createDefaultTable();
-        }
-        return layout;
-    },
-
-    /**
-     * Returns all scripts in the substitution table.
-     * @instance
-     * @return {Array}
-     */
-    getScriptNames: function() {
-        var layout = this.getTable();
-        if (!layout) { return []; }
-        return layout.scripts.map(function(script) {
-            return script.tag;
-        });
-    },
-
-    /**
-     * Returns the best bet for a script name.
-     * Returns 'DFLT' if it exists.
-     * If not, returns 'latn' if it exists.
-     * If neither exist, returns undefined.
-     */
-    getDefaultScriptName: function() {
-        var layout = this.getTable();
-        if (!layout) { return; }
-        var hasLatn = false;
-        for (var i = 0; i < layout.scripts.length; i++) {
-            var name = layout.scripts[i].tag;
-            if (name === 'DFLT') { return name; }
-            if (name === 'latn') { hasLatn = true; }
-        }
-        if (hasLatn) { return 'latn'; }
-    },
-
-    /**
-     * Returns all LangSysRecords in the given script.
-     * @instance
-     * @param {string} [script='DFLT']
-     * @param {boolean} create - forces the creation of this script table if it doesn't exist.
-     * @return {Object} An object with tag and script properties.
-     */
-    getScriptTable: function(script, create) {
-        var layout = this.getTable(create);
-        if (layout) {
-            script = script || 'DFLT';
-            var scripts = layout.scripts;
-            var pos = searchTag(layout.scripts, script);
-            if (pos >= 0) {
-                return scripts[pos].script;
-            } else if (create) {
-                var scr = {
-                    tag: script,
-                    script: {
-                        defaultLangSys: {reserved: 0, reqFeatureIndex: 0xffff, featureIndexes: []},
-                        langSysRecords: []
-                    }
-                };
-                scripts.splice(-1 - pos, 0, scr);
-                return scr.script;
-            }
-        }
-    },
-
-    /**
-     * Returns a language system table
-     * @instance
-     * @param {string} [script='DFLT']
-     * @param {string} [language='dlft']
-     * @param {boolean} create - forces the creation of this langSysTable if it doesn't exist.
-     * @return {Object}
-     */
-    getLangSysTable: function(script, language, create) {
-        var scriptTable = this.getScriptTable(script, create);
-        if (scriptTable) {
-            if (!language || language === 'dflt' || language === 'DFLT') {
-                return scriptTable.defaultLangSys;
-            }
-            var pos = searchTag(scriptTable.langSysRecords, language);
-            if (pos >= 0) {
-                return scriptTable.langSysRecords[pos].langSys;
-            } else if (create) {
-                var langSysRecord = {
-                    tag: language,
-                    langSys: {reserved: 0, reqFeatureIndex: 0xffff, featureIndexes: []}
-                };
-                scriptTable.langSysRecords.splice(-1 - pos, 0, langSysRecord);
-                return langSysRecord.langSys;
-            }
-        }
-    },
-
-    /**
-     * Get a specific feature table.
-     * @instance
-     * @param {string} [script='DFLT']
-     * @param {string} [language='dlft']
-     * @param {string} feature - One of the codes listed at https://www.microsoft.com/typography/OTSPEC/featurelist.htm
-     * @param {boolean} create - forces the creation of the feature table if it doesn't exist.
-     * @return {Object}
-     */
-    getFeatureTable: function(script, language, feature, create) {
-        var langSysTable = this.getLangSysTable(script, language, create);
-        if (langSysTable) {
-            var featureRecord;
-            var featIndexes = langSysTable.featureIndexes;
-            var allFeatures = this.font.tables[this.tableName].features;
-            // The FeatureIndex array of indices is in arbitrary order,
-            // even if allFeatures is sorted alphabetically by feature tag.
-            for (var i = 0; i < featIndexes.length; i++) {
-                featureRecord = allFeatures[featIndexes[i]];
-                if (featureRecord.tag === feature) {
-                    return featureRecord.feature;
-                }
-            }
-            if (create) {
-                var index = allFeatures.length;
-                // Automatic ordering of features would require to shift feature indexes in the script list.
-                check.assert(index === 0 || feature >= allFeatures[index - 1].tag, 'Features must be added in alphabetical order.');
-                featureRecord = {
-                    tag: feature,
-                    feature: { params: 0, lookupListIndexes: [] }
-                };
-                allFeatures.push(featureRecord);
-                featIndexes.push(index);
-                return featureRecord.feature;
-            }
-        }
-    },
-
-    /**
-     * Get the lookup tables of a given type for a script/language/feature.
-     * @instance
-     * @param {string} [script='DFLT']
-     * @param {string} [language='dlft']
-     * @param {string} feature - 4-letter feature code
-     * @param {number} lookupType - 1 to 9
-     * @param {boolean} create - forces the creation of the lookup table if it doesn't exist, with no subtables.
-     * @return {Object[]}
-     */
-    getLookupTables: function(script, language, feature, lookupType, create) {
-        var featureTable = this.getFeatureTable(script, language, feature, create);
-        var tables = [];
-        if (featureTable) {
-            var lookupTable;
-            var lookupListIndexes = featureTable.lookupListIndexes;
-            var allLookups = this.font.tables[this.tableName].lookups;
-            // lookupListIndexes are in no particular order, so use naive search.
-            for (var i = 0; i < lookupListIndexes.length; i++) {
-                lookupTable = allLookups[lookupListIndexes[i]];
-                if (lookupTable.lookupType === lookupType) {
-                    tables.push(lookupTable);
-                }
-            }
-            if (tables.length === 0 && create) {
-                lookupTable = {
-                    lookupType: lookupType,
-                    lookupFlag: 0,
-                    subtables: [],
-                    markFilteringSet: undefined
-                };
-                var index = allLookups.length;
-                allLookups.push(lookupTable);
-                lookupListIndexes.push(index);
-                return [lookupTable];
-            }
-        }
-        return tables;
-    },
-
-    /**
-     * Find a glyph in a class definition table
-     * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#class-definition-table
-     * @param {object} classDefTable - an OpenType Layout class definition table
-     * @param {number} glyphIndex - the index of the glyph to find
-     * @returns {number} -1 if not found
-     */
-    getGlyphClass: function(classDefTable, glyphIndex) {
-        switch (classDefTable.format) {
-            case 1:
-                if (classDefTable.startGlyph <= glyphIndex && glyphIndex < classDefTable.startGlyph + classDefTable.classes.length) {
-                    return classDefTable.classes[glyphIndex - classDefTable.startGlyph];
-                }
-                return 0;
-            case 2:
-                var range = searchRange(classDefTable.ranges, glyphIndex);
-                return range ? range.classId : 0;
-        }
-    },
-
-    /**
-     * Find a glyph in a coverage table
-     * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#coverage-table
-     * @param {object} coverageTable - an OpenType Layout coverage table
-     * @param {number} glyphIndex - the index of the glyph to find
-     * @returns {number} -1 if not found
-     */
-    getCoverageIndex: function(coverageTable, glyphIndex) {
-        switch (coverageTable.format) {
-            case 1:
-                var index = binSearch(coverageTable.glyphs, glyphIndex);
-                return index >= 0 ? index : -1;
-            case 2:
-                var range = searchRange(coverageTable.ranges, glyphIndex);
-                return range ? range.index + glyphIndex - range.start : -1;
-        }
-    },
-
-    /**
-     * Returns the list of glyph indexes of a coverage table.
-     * Format 1: the list is stored raw
-     * Format 2: compact list as range records.
-     * @instance
-     * @param  {Object} coverageTable
-     * @return {Array}
-     */
-    expandCoverage: function(coverageTable) {
-        if (coverageTable.format === 1) {
-            return coverageTable.glyphs;
-        } else {
-            var glyphs = [];
-            var ranges = coverageTable.ranges;
-            for (var i = 0; i < ranges.length; i++) {
-                var range = ranges[i];
-                var start = range.start;
-                var end = range.end;
-                for (var j = start; j <= end; j++) {
-                    glyphs.push(j);
-                }
-            }
-            return glyphs;
-        }
-    }
-
-};
-
-// The Position object provides utility methods to manipulate
-
-/**
- * @exports opentype.Position
- * @class
- * @extends opentype.Layout
- * @param {opentype.Font}
- * @constructor
- */
-function Position(font) {
-    Layout.call(this, font, 'gpos');
-}
-
-Position.prototype = Layout.prototype;
-
-/**
- * Init some data for faster and easier access later.
- */
-Position.prototype.init = function() {
-    var script = this.getDefaultScriptName();
-    this.defaultKerningTables = this.getKerningTables(script);
-};
-
-/**
- * Find a glyph pair in a list of lookup tables of type 2 and retrieve the xAdvance kerning value.
- *
- * @param {integer} leftIndex - left glyph index
- * @param {integer} rightIndex - right glyph index
- * @returns {integer}
- */
-Position.prototype.getKerningValue = function(kerningLookups, leftIndex, rightIndex) {
-    for (var i = 0; i < kerningLookups.length; i++) {
-        var subtables = kerningLookups[i].subtables;
-        for (var j = 0; j < subtables.length; j++) {
-            var subtable = subtables[j];
-            var covIndex = this.getCoverageIndex(subtable.coverage, leftIndex);
-            if (covIndex < 0) { continue; }
-            switch (subtable.posFormat) {
-                case 1:
-                    // Search Pair Adjustment Positioning Format 1
-                    var pairSet = subtable.pairSets[covIndex];
-                    for (var k = 0; k < pairSet.length; k++) {
-                        var pair = pairSet[k];
-                        if (pair.secondGlyph === rightIndex) {
-                            return pair.value1 && pair.value1.xAdvance || 0;
-                        }
-                    }
-                    break;      // left glyph found, not right glyph - try next subtable
-                case 2:
-                    // Search Pair Adjustment Positioning Format 2
-                    var class1 = this.getGlyphClass(subtable.classDef1, leftIndex);
-                    var class2 = this.getGlyphClass(subtable.classDef2, rightIndex);
-                    var pair$1 = subtable.classRecords[class1][class2];
-                    return pair$1.value1 && pair$1.value1.xAdvance || 0;
-            }
-        }
-    }
-    return 0;
-};
-
-/**
- * List all kerning lookup tables.
- *
- * @param {string} [script='DFLT'] - use font.position.getDefaultScriptName() for a better default value
- * @param {string} [language='dflt']
- * @return {object[]} The list of kerning lookup tables (may be empty), or undefined if there is no GPOS table (and we should use the kern table)
- */
-Position.prototype.getKerningTables = function(script, language) {
-    if (this.font.tables.gpos) {
-        return this.getLookupTables(script, language, 'kern', 2);
-    }
-};
-
-// The Substitution object provides utility methods to manipulate
-
-/**
- * @exports opentype.Substitution
- * @class
- * @extends opentype.Layout
- * @param {opentype.Font}
- * @constructor
- */
-function Substitution(font) {
-    Layout.call(this, font, 'gsub');
-}
-
-// Check if 2 arrays of primitives are equal.
-function arraysEqual(ar1, ar2) {
-    var n = ar1.length;
-    if (n !== ar2.length) { return false; }
-    for (var i = 0; i < n; i++) {
-        if (ar1[i] !== ar2[i]) { return false; }
-    }
-    return true;
-}
-
-// Find the first subtable of a lookup table in a particular format.
-function getSubstFormat(lookupTable, format, defaultSubtable) {
-    var subtables = lookupTable.subtables;
-    for (var i = 0; i < subtables.length; i++) {
-        var subtable = subtables[i];
-        if (subtable.substFormat === format) {
-            return subtable;
-        }
-    }
-    if (defaultSubtable) {
-        subtables.push(defaultSubtable);
-        return defaultSubtable;
-    }
-    return undefined;
-}
-
-Substitution.prototype = Layout.prototype;
-
-/**
- * Create a default GSUB table.
- * @return {Object} gsub - The GSUB table.
- */
-Substitution.prototype.createDefaultTable = function() {
-    // Generate a default empty GSUB table with just a DFLT script and dflt lang sys.
-    return {
-        version: 1,
-        scripts: [{
-            tag: 'DFLT',
-            script: {
-                defaultLangSys: { reserved: 0, reqFeatureIndex: 0xffff, featureIndexes: [] },
-                langSysRecords: []
-            }
-        }],
-        features: [],
-        lookups: []
-    };
-};
-
-/**
- * List all single substitutions (lookup type 1) for a given script, language, and feature.
- * @param {string} [script='DFLT']
- * @param {string} [language='dflt']
- * @param {string} feature - 4-character feature name ('aalt', 'salt', 'ss01'...)
- * @return {Array} substitutions - The list of substitutions.
- */
-Substitution.prototype.getSingle = function(feature, script, language) {
-    var substitutions = [];
-    var lookupTables = this.getLookupTables(script, language, feature, 1);
-    for (var idx = 0; idx < lookupTables.length; idx++) {
-        var subtables = lookupTables[idx].subtables;
-        for (var i = 0; i < subtables.length; i++) {
-            var subtable = subtables[i];
-            var glyphs = this.expandCoverage(subtable.coverage);
-            var j = (void 0);
-            if (subtable.substFormat === 1) {
-                var delta = subtable.deltaGlyphId;
-                for (j = 0; j < glyphs.length; j++) {
-                    var glyph = glyphs[j];
-                    substitutions.push({ sub: glyph, by: glyph + delta });
-                }
-            } else {
-                var substitute = subtable.substitute;
-                for (j = 0; j < glyphs.length; j++) {
-                    substitutions.push({ sub: glyphs[j], by: substitute[j] });
-                }
-            }
-        }
-    }
-    return substitutions;
-};
-
-/**
- * List all multiple substitutions (lookup type 2) for a given script, language, and feature.
- * @param {string} [script='DFLT']
- * @param {string} [language='dflt']
- * @param {string} feature - 4-character feature name ('ccmp', 'stch')
- * @return {Array} substitutions - The list of substitutions.
- */
-Substitution.prototype.getMultiple = function(feature, script, language) {
-    var substitutions = [];
-    var lookupTables = this.getLookupTables(script, language, feature, 2);
-    for (var idx = 0; idx < lookupTables.length; idx++) {
-        var subtables = lookupTables[idx].subtables;
-        for (var i = 0; i < subtables.length; i++) {
-            var subtable = subtables[i];
-            var glyphs = this.expandCoverage(subtable.coverage);
-            var j = (void 0);
-
-            for (j = 0; j < glyphs.length; j++) {
-                var glyph = glyphs[j];
-                var replacements = subtable.sequences[j];
-                substitutions.push({ sub: glyph, by: replacements });
-            }
-        }
-    }
-    return substitutions;
-};
-
-/**
- * List all alternates (lookup type 3) for a given script, language, and feature.
- * @param {string} [script='DFLT']
- * @param {string} [language='dflt']
- * @param {string} feature - 4-character feature name ('aalt', 'salt'...)
- * @return {Array} alternates - The list of alternates
- */
-Substitution.prototype.getAlternates = function(feature, script, language) {
-    var alternates = [];
-    var lookupTables = this.getLookupTables(script, language, feature, 3);
-    for (var idx = 0; idx < lookupTables.length; idx++) {
-        var subtables = lookupTables[idx].subtables;
-        for (var i = 0; i < subtables.length; i++) {
-            var subtable = subtables[i];
-            var glyphs = this.expandCoverage(subtable.coverage);
-            var alternateSets = subtable.alternateSets;
-            for (var j = 0; j < glyphs.length; j++) {
-                alternates.push({ sub: glyphs[j], by: alternateSets[j] });
-            }
-        }
-    }
-    return alternates;
-};
-
-/**
- * List all ligatures (lookup type 4) for a given script, language, and feature.
- * The result is an array of ligature objects like { sub: [ids], by: id }
- * @param {string} feature - 4-letter feature name ('liga', 'rlig', 'dlig'...)
- * @param {string} [script='DFLT']
- * @param {string} [language='dflt']
- * @return {Array} ligatures - The list of ligatures.
- */
-Substitution.prototype.getLigatures = function(feature, script, language) {
-    var ligatures = [];
-    var lookupTables = this.getLookupTables(script, language, feature, 4);
-    for (var idx = 0; idx < lookupTables.length; idx++) {
-        var subtables = lookupTables[idx].subtables;
-        for (var i = 0; i < subtables.length; i++) {
-            var subtable = subtables[i];
-            var glyphs = this.expandCoverage(subtable.coverage);
-            var ligatureSets = subtable.ligatureSets;
-            for (var j = 0; j < glyphs.length; j++) {
-                var startGlyph = glyphs[j];
-                var ligSet = ligatureSets[j];
-                for (var k = 0; k < ligSet.length; k++) {
-                    var lig = ligSet[k];
-                    ligatures.push({
-                        sub: [startGlyph].concat(lig.components),
-                        by: lig.ligGlyph
-                    });
-                }
-            }
-        }
-    }
-    return ligatures;
-};
-
-/**
- * Add or modify a single substitution (lookup type 1)
- * Format 2, more flexible, is always used.
- * @param {string} feature - 4-letter feature name ('liga', 'rlig', 'dlig'...)
- * @param {Object} substitution - { sub: id, by: id } (format 1 is not supported)
- * @param {string} [script='DFLT']
- * @param {string} [language='dflt']
- */
-Substitution.prototype.addSingle = function(feature, substitution, script, language) {
-    var lookupTable = this.getLookupTables(script, language, feature, 1, true)[0];
-    var subtable = getSubstFormat(lookupTable, 2, {                // lookup type 1 subtable, format 2, coverage format 1
-        substFormat: 2,
-        coverage: {format: 1, glyphs: []},
-        substitute: []
-    });
-    check.assert(subtable.coverage.format === 1, 'Single: unable to modify coverage table format ' + subtable.coverage.format);
-    var coverageGlyph = substitution.sub;
-    var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);
-    if (pos < 0) {
-        pos = -1 - pos;
-        subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);
-        subtable.substitute.splice(pos, 0, 0);
-    }
-    subtable.substitute[pos] = substitution.by;
-};
-
-/**
- * Add or modify a multiple substitution (lookup type 2)
- * @param {string} feature - 4-letter feature name ('ccmp', 'stch')
- * @param {Object} substitution - { sub: id, by: [id] } for format 2.
- * @param {string} [script='DFLT']
- * @param {string} [language='dflt']
- */
-Substitution.prototype.addMultiple = function(feature, substitution, script, language) {
-    check.assert(substitution.by instanceof Array && substitution.by.length > 1, 'Multiple: "by" must be an array of two or more ids');
-    var lookupTable = this.getLookupTables(script, language, feature, 2, true)[0];
-    var subtable = getSubstFormat(lookupTable, 1, {                // lookup type 2 subtable, format 1, coverage format 1
-        substFormat: 1,
-        coverage: {format: 1, glyphs: []},
-        sequences: []
-    });
-    check.assert(subtable.coverage.format === 1, 'Multiple: unable to modify coverage table format ' + subtable.coverage.format);
-    var coverageGlyph = substitution.sub;
-    var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);
-    if (pos < 0) {
-        pos = -1 - pos;
-        subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);
-        subtable.sequences.splice(pos, 0, 0);
-    }
-    subtable.sequences[pos] = substitution.by;
-};
-
-/**
- * Add or modify an alternate substitution (lookup type 3)
- * @param {string} feature - 4-letter feature name ('liga', 'rlig', 'dlig'...)
- * @param {Object} substitution - { sub: id, by: [ids] }
- * @param {string} [script='DFLT']
- * @param {string} [language='dflt']
- */
-Substitution.prototype.addAlternate = function(feature, substitution, script, language) {
-    var lookupTable = this.getLookupTables(script, language, feature, 3, true)[0];
-    var subtable = getSubstFormat(lookupTable, 1, {                // lookup type 3 subtable, format 1, coverage format 1
-        substFormat: 1,
-        coverage: {format: 1, glyphs: []},
-        alternateSets: []
-    });
-    check.assert(subtable.coverage.format === 1, 'Alternate: unable to modify coverage table format ' + subtable.coverage.format);
-    var coverageGlyph = substitution.sub;
-    var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);
-    if (pos < 0) {
-        pos = -1 - pos;
-        subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);
-        subtable.alternateSets.splice(pos, 0, 0);
-    }
-    subtable.alternateSets[pos] = substitution.by;
-};
-
-/**
- * Add a ligature (lookup type 4)
- * Ligatures with more components must be stored ahead of those with fewer components in order to be found
- * @param {string} feature - 4-letter feature name ('liga', 'rlig', 'dlig'...)
- * @param {Object} ligature - { sub: [ids], by: id }
- * @param {string} [script='DFLT']
- * @param {string} [language='dflt']
- */
-Substitution.prototype.addLigature = function(feature, ligature, script, language) {
-    var lookupTable = this.getLookupTables(script, language, feature, 4, true)[0];
-    var subtable = lookupTable.subtables[0];
-    if (!subtable) {
-        subtable = {                // lookup type 4 subtable, format 1, coverage format 1
-            substFormat: 1,
-            coverage: { format: 1, glyphs: [] },
-            ligatureSets: []
-        };
-        lookupTable.subtables[0] = subtable;
-    }
-    check.assert(subtable.coverage.format === 1, 'Ligature: unable to modify coverage table format ' + subtable.coverage.format);
-    var coverageGlyph = ligature.sub[0];
-    var ligComponents = ligature.sub.slice(1);
-    var ligatureTable = {
-        ligGlyph: ligature.by,
-        components: ligComponents
-    };
-    var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);
-    if (pos >= 0) {
-        // ligatureSet already exists
-        var ligatureSet = subtable.ligatureSets[pos];
-        for (var i = 0; i < ligatureSet.length; i++) {
-            // If ligature already exists, return.
-            if (arraysEqual(ligatureSet[i].components, ligComponents)) {
-                return;
-            }
-        }
-        // ligature does not exist: add it.
-        ligatureSet.push(ligatureTable);
-    } else {
-        // Create a new ligatureSet and add coverage for the first glyph.
-        pos = -1 - pos;
-        subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);
-        subtable.ligatureSets.splice(pos, 0, [ligatureTable]);
-    }
-};
-
-/**
- * List all feature data for a given script and language.
- * @param {string} feature - 4-letter feature name
- * @param {string} [script='DFLT']
- * @param {string} [language='dflt']
- * @return {Array} substitutions - The list of substitutions.
- */
-Substitution.prototype.getFeature = function(feature, script, language) {
-    if (/ss\d\d/.test(feature)) {
-        // ss01 - ss20
-        return this.getSingle(feature, script, language);
-    }
-    switch (feature) {
-        case 'aalt':
-        case 'salt':
-            return this.getSingle(feature, script, language)
-                    .concat(this.getAlternates(feature, script, language));
-        case 'dlig':
-        case 'liga':
-        case 'rlig':
-            return this.getLigatures(feature, script, language);
-        case 'ccmp':
-            return this.getMultiple(feature, script, language)
-                .concat(this.getLigatures(feature, script, language));
-        case 'stch':
-            return this.getMultiple(feature, script, language);
-    }
-    return undefined;
-};
-
-/**
- * Add a substitution to a feature for a given script and language.
- * @param {string} feature - 4-letter feature name
- * @param {Object} sub - the substitution to add (an object like { sub: id or [ids], by: id or [ids] })
- * @param {string} [script='DFLT']
- * @param {string} [language='dflt']
- */
-Substitution.prototype.add = function(feature, sub, script, language) {
-    if (/ss\d\d/.test(feature)) {
-        // ss01 - ss20
-        return this.addSingle(feature, sub, script, language);
-    }
-    switch (feature) {
-        case 'aalt':
-        case 'salt':
-            if (typeof sub.by === 'number') {
-                return this.addSingle(feature, sub, script, language);
-            }
-            return this.addAlternate(feature, sub, script, language);
-        case 'dlig':
-        case 'liga':
-        case 'rlig':
-            return this.addLigature(feature, sub, script, language);
-        case 'ccmp':
-            if (sub.by instanceof Array) {
-                return this.addMultiple(feature, sub, script, language);
-            }
-            return this.addLigature(feature, sub, script, language);
-    }
-    return undefined;
-};
-
-function isBrowser() {
-    return typeof window !== 'undefined';
-}
-
-function nodeBufferToArrayBuffer(buffer) {
-    var ab = new ArrayBuffer(buffer.length);
-    var view = new Uint8Array(ab);
-    for (var i = 0; i < buffer.length; ++i) {
-        view[i] = buffer[i];
-    }
-
-    return ab;
-}
-
-function arrayBufferToNodeBuffer(ab) {
-    var buffer = new Buffer(ab.byteLength);
-    var view = new Uint8Array(ab);
-    for (var i = 0; i < buffer.length; ++i) {
-        buffer[i] = view[i];
-    }
-
-    return buffer;
-}
-
-function checkArgument(expression, message) {
-    if (!expression) {
-        throw message;
-    }
-}
-
-// The `glyf` table describes the glyphs in TrueType outline format.
-
-// Parse the coordinate data for a glyph.
-function parseGlyphCoordinate(p, flag, previousValue, shortVectorBitMask, sameBitMask) {
-    var v;
-    if ((flag & shortVectorBitMask) > 0) {
-        // The coordinate is 1 byte long.
-        v = p.parseByte();
-        // The `same` bit is re-used for short values to signify the sign of the value.
-        if ((flag & sameBitMask) === 0) {
-            v = -v;
-        }
-
-        v = previousValue + v;
-    } else {
-        //  The coordinate is 2 bytes long.
-        // If the `same` bit is set, the coordinate is the same as the previous coordinate.
-        if ((flag & sameBitMask) > 0) {
-            v = previousValue;
-        } else {
-            // Parse the coordinate as a signed 16-bit delta value.
-            v = previousValue + p.parseShort();
-        }
-    }
-
-    return v;
-}
-
-// Parse a TrueType glyph.
-function parseGlyph(glyph, data, start) {
-    var p = new parse.Parser(data, start);
-    glyph.numberOfContours = p.parseShort();
-    glyph._xMin = p.parseShort();
-    glyph._yMin = p.parseShort();
-    glyph._xMax = p.parseShort();
-    glyph._yMax = p.parseShort();
-    var flags;
-    var flag;
-
-    if (glyph.numberOfContours > 0) {
-        // This glyph is not a composite.
-        var endPointIndices = glyph.endPointIndices = [];
-        for (var i = 0; i < glyph.numberOfContours; i += 1) {
-            endPointIndices.push(p.parseUShort());
-        }
-
-        glyph.instructionLength = p.parseUShort();
-        glyph.instructions = [];
-        for (var i$1 = 0; i$1 < glyph.instructionLength; i$1 += 1) {
-            glyph.instructions.push(p.parseByte());
-        }
-
-        var numberOfCoordinates = endPointIndices[endPointIndices.length - 1] + 1;
-        flags = [];
-        for (var i$2 = 0; i$2 < numberOfCoordinates; i$2 += 1) {
-            flag = p.parseByte();
-            flags.push(flag);
-            // If bit 3 is set, we repeat this flag n times, where n is the next byte.
-            if ((flag & 8) > 0) {
-                var repeatCount = p.parseByte();
-                for (var j = 0; j < repeatCount; j += 1) {
-                    flags.push(flag);
-                    i$2 += 1;
-                }
-            }
-        }
-
-        check.argument(flags.length === numberOfCoordinates, 'Bad flags.');
-
-        if (endPointIndices.length > 0) {
-            var points = [];
-            var point;
-            // X/Y coordinates are relative to the previous point, except for the first point which is relative to 0,0.
-            if (numberOfCoordinates > 0) {
-                for (var i$3 = 0; i$3 < numberOfCoordinates; i$3 += 1) {
-                    flag = flags[i$3];
-                    point = {};
-                    point.onCurve = !!(flag & 1);
-                    point.lastPointOfContour = endPointIndices.indexOf(i$3) >= 0;
-                    points.push(point);
-                }
-
-                var px = 0;
-                for (var i$4 = 0; i$4 < numberOfCoordinates; i$4 += 1) {
-                    flag = flags[i$4];
-                    point = points[i$4];
-                    point.x = parseGlyphCoordinate(p, flag, px, 2, 16);
-                    px = point.x;
-                }
-
-                var py = 0;
-                for (var i$5 = 0; i$5 < numberOfCoordinates; i$5 += 1) {
-                    flag = flags[i$5];
-                    point = points[i$5];
-                    point.y = parseGlyphCoordinate(p, flag, py, 4, 32);
-                    py = point.y;
-                }
-            }
-
-            glyph.points = points;
-        } else {
-            glyph.points = [];
-        }
-    } else if (glyph.numberOfContours === 0) {
-        glyph.points = [];
-    } else {
-        glyph.isComposite = true;
-        glyph.points = [];
-        glyph.components = [];
-        var moreComponents = true;
-        while (moreComponents) {
-            flags = p.parseUShort();
-            var component = {
-                glyphIndex: p.parseUShort(),
-                xScale: 1,
-                scale01: 0,
-                scale10: 0,
-                yScale: 1,
-                dx: 0,
-                dy: 0
-            };
-            if ((flags & 1) > 0) {
-                // The arguments are words
-                if ((flags & 2) > 0) {
-                    // values are offset
-                    component.dx = p.parseShort();
-                    component.dy = p.parseShort();
-                } else {
-                    // values are matched points
-                    component.matchedPoints = [p.parseUShort(), p.parseUShort()];
-                }
-
-            } else {
-                // The arguments are bytes
-                if ((flags & 2) > 0) {
-                    // values are offset
-                    component.dx = p.parseChar();
-                    component.dy = p.parseChar();
-                } else {
-                    // values are matched points
-                    component.matchedPoints = [p.parseByte(), p.parseByte()];
-                }
-            }
-
-            if ((flags & 8) > 0) {
-                // We have a scale
-                component.xScale = component.yScale = p.parseF2Dot14();
-            } else if ((flags & 64) > 0) {
-                // We have an X / Y scale
-                component.xScale = p.parseF2Dot14();
-                component.yScale = p.parseF2Dot14();
-            } else if ((flags & 128) > 0) {
-                // We have a 2x2 transformation
-                component.xScale = p.parseF2Dot14();
-                component.scale01 = p.parseF2Dot14();
-                component.scale10 = p.parseF2Dot14();
-                component.yScale = p.parseF2Dot14();
-            }
-
-            glyph.components.push(component);
-            moreComponents = !!(flags & 32);
-        }
-        if (flags & 0x100) {
-            // We have instructions
-            glyph.instructionLength = p.parseUShort();
-            glyph.instructions = [];
-            for (var i$6 = 0; i$6 < glyph.instructionLength; i$6 += 1) {
-                glyph.instructions.push(p.parseByte());
-            }
-        }
-    }
-}
-
-// Transform an array of points and return a new array.
-function transformPoints(points, transform) {
-    var newPoints = [];
-    for (var i = 0; i < points.length; i += 1) {
-        var pt = points[i];
-        var newPt = {
-            x: transform.xScale * pt.x + transform.scale01 * pt.y + transform.dx,
-            y: transform.scale10 * pt.x + transform.yScale * pt.y + transform.dy,
-            onCurve: pt.onCurve,
-            lastPointOfContour: pt.lastPointOfContour
-        };
-        newPoints.push(newPt);
-    }
-
-    return newPoints;
-}
-
-function getContours(points) {
-    var contours = [];
-    var currentContour = [];
-    for (var i = 0; i < points.length; i += 1) {
-        var pt = points[i];
-        currentContour.push(pt);
-        if (pt.lastPointOfContour) {
-            contours.push(currentContour);
-            currentContour = [];
-        }
-    }
-
-    check.argument(currentContour.length === 0, 'There are still points left in the current contour.');
-    return contours;
-}
-
-// Convert the TrueType glyph outline to a Path.
-function getPath(points) {
-    var p = new Path();
-    if (!points) {
-        return p;
-    }
-
-    var contours = getContours(points);
-
-    for (var contourIndex = 0; contourIndex < contours.length; ++contourIndex) {
-        var contour = contours[contourIndex];
-
-        var prev = null;
-        var curr = contour[contour.length - 1];
-        var next = contour[0];
-
-        if (curr.onCurve) {
-            p.moveTo(curr.x, curr.y);
-        } else {
-            if (next.onCurve) {
-                p.moveTo(next.x, next.y);
-            } else {
-                // If both first and last points are off-curve, start at their middle.
-                var start = {x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5};
-                p.moveTo(start.x, start.y);
-            }
-        }
-
-        for (var i = 0; i < contour.length; ++i) {
-            prev = curr;
-            curr = next;
-            next = contour[(i + 1) % contour.length];
-
-            if (curr.onCurve) {
-                // This is a straight line.
-                p.lineTo(curr.x, curr.y);
-            } else {
-                var prev2 = prev;
-                var next2 = next;
-
-                if (!prev.onCurve) {
-                    prev2 = { x: (curr.x + prev.x) * 0.5, y: (curr.y + prev.y) * 0.5 };
-                }
-
-                if (!next.onCurve) {
-                    next2 = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 };
-                }
-
-                p.quadraticCurveTo(curr.x, curr.y, next2.x, next2.y);
-            }
-        }
-
-        p.closePath();
-    }
-    return p;
-}
-
-function buildPath(glyphs, glyph) {
-    if (glyph.isComposite) {
-        for (var j = 0; j < glyph.components.length; j += 1) {
-            var component = glyph.components[j];
-            var componentGlyph = glyphs.get(component.glyphIndex);
-            // Force the ttfGlyphLoader to parse the glyph.
-            componentGlyph.getPath();
-            if (componentGlyph.points) {
-                var transformedPoints = (void 0);
-                if (component.matchedPoints === undefined) {
-                    // component positioned by offset
-                    transformedPoints = transformPoints(componentGlyph.points, component);
-                } else {
-                    // component positioned by matched points
-                    if ((component.matchedPoints[0] > glyph.points.length - 1) ||
-                        (component.matchedPoints[1] > componentGlyph.points.length - 1)) {
-                        throw Error('Matched points out of range in ' + glyph.name);
-                    }
-                    var firstPt = glyph.points[component.matchedPoints[0]];
-                    var secondPt = componentGlyph.points[component.matchedPoints[1]];
-                    var transform = {
-                        xScale: component.xScale, scale01: component.scale01,
-                        scale10: component.scale10, yScale: component.yScale,
-                        dx: 0, dy: 0
-                    };
-                    secondPt = transformPoints([secondPt], transform)[0];
-                    transform.dx = firstPt.x - secondPt.x;
-                    transform.dy = firstPt.y - secondPt.y;
-                    transformedPoints = transformPoints(componentGlyph.points, transform);
-                }
-                glyph.points = glyph.points.concat(transformedPoints);
-            }
-        }
-    }
-
-    return getPath(glyph.points);
-}
-
-function parseGlyfTableAll(data, start, loca, font) {
-    var glyphs = new glyphset.GlyphSet(font);
-
-    // The last element of the loca table is invalid.
-    for (var i = 0; i < loca.length - 1; i += 1) {
-        var offset = loca[i];
-        var nextOffset = loca[i + 1];
-        if (offset !== nextOffset) {
-            glyphs.push(i, glyphset.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath));
-        } else {
-            glyphs.push(i, glyphset.glyphLoader(font, i));
-        }
-    }
-
-    return glyphs;
-}
-
-function parseGlyfTableOnLowMemory(data, start, loca, font) {
-    var glyphs = new glyphset.GlyphSet(font);
-
-    font._push = function(i) {
-        var offset = loca[i];
-        var nextOffset = loca[i + 1];
-        if (offset !== nextOffset) {
-            glyphs.push(i, glyphset.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath));
-        } else {
-            glyphs.push(i, glyphset.glyphLoader(font, i));
-        }
-    };
-
-    return glyphs;
-}
-
-// Parse all the glyphs according to the offsets from the `loca` table.
-function parseGlyfTable(data, start, loca, font, opt) {
-    if (opt.lowMemory)
-        { return parseGlyfTableOnLowMemory(data, start, loca, font); }
-    else
-        { return parseGlyfTableAll(data, start, loca, font); }
-}
-
-var glyf = { getPath: getPath, parse: parseGlyfTable};
-
-/* A TrueType font hinting interpreter.
-*
-* (c) 2017 Axel Kittenberger
-*
-* This interpreter has been implemented according to this documentation:
-* https://developer.apple.com/fonts/TrueType-Reference-Manual/RM05/Chap5.html
-*
-* According to the documentation F24DOT6 values are used for pixels.
-* That means calculation is 1/64 pixel accurate and uses integer operations.
-* However, Javascript has floating point operations by default and only
-* those are available. One could make a case to simulate the 1/64 accuracy
-* exactly by truncating after every division operation
-* (for example with << 0) to get pixel exactly results as other TrueType
-* implementations. It may make sense since some fonts are pixel optimized
-* by hand using DELTAP instructions. The current implementation doesn't
-* and rather uses full floating point precision.
-*
-* xScale, yScale and rotation is currently ignored.
-*
-* A few non-trivial instructions are missing as I didn't encounter yet
-* a font that used them to test a possible implementation.
-*
-* Some fonts seem to use undocumented features regarding the twilight zone.
-* Only some of them are implemented as they were encountered.
-*
-* The exports.DEBUG statements are removed on the minified distribution file.
-*/
-
-var instructionTable;
-var exec;
-var execGlyph;
-var execComponent;
-
-/*
-* Creates a hinting object.
-*
-* There ought to be exactly one
-* for each truetype font that is used for hinting.
-*/
-function Hinting(font) {
-    // the font this hinting object is for
-    this.font = font;
-
-    this.getCommands = function (hPoints) {
-        return glyf.getPath(hPoints).commands;
-    };
-
-    // cached states
-    this._fpgmState  =
-    this._prepState  =
-        undefined;
-
-    // errorState
-    // 0 ... all okay
-    // 1 ... had an error in a glyf,
-    //       continue working but stop spamming
-    //       the console
-    // 2 ... error at prep, stop hinting at this ppem
-    // 3 ... error at fpeg, stop hinting for this font at all
-    this._errorState = 0;
-}
-
-/*
-* Not rounding.
-*/
-function roundOff(v) {
-    return v;
-}
-
-/*
-* Rounding to grid.
-*/
-function roundToGrid(v) {
-    //Rounding in TT is supposed to "symmetrical around zero"
-    return Math.sign(v) * Math.round(Math.abs(v));
-}
-
-/*
-* Rounding to double grid.
-*/
-function roundToDoubleGrid(v) {
-    return Math.sign(v) * Math.round(Math.abs(v * 2)) / 2;
-}
-
-/*
-* Rounding to half grid.
-*/
-function roundToHalfGrid(v) {
-    return Math.sign(v) * (Math.round(Math.abs(v) + 0.5) - 0.5);
-}
-
-/*
-* Rounding to up to grid.
-*/
-function roundUpToGrid(v) {
-    return Math.sign(v) * Math.ceil(Math.abs(v));
-}
-
-/*
-* Rounding to down to grid.
-*/
-function roundDownToGrid(v) {
-    return Math.sign(v) * Math.floor(Math.abs(v));
-}
-
-/*
-* Super rounding.
-*/
-var roundSuper = function (v) {
-    var period = this.srPeriod;
-    var phase = this.srPhase;
-    var threshold = this.srThreshold;
-    var sign = 1;
-
-    if (v < 0) {
-        v = -v;
-        sign = -1;
-    }
-
-    v += threshold - phase;
-
-    v = Math.trunc(v / period) * period;
-
-    v += phase;
-
-    // according to http://xgridfit.sourceforge.net/round.html
-    if (v < 0) { return phase * sign; }
-
-    return v * sign;
-};
-
-/*
-* Unit vector of x-axis.
-*/
-var xUnitVector = {
-    x: 1,
-
-    y: 0,
-
-    axis: 'x',
-
-    // Gets the projected distance between two points.
-    // o1/o2 ... if true, respective original position is used.
-    distance: function (p1, p2, o1, o2) {
-        return (o1 ? p1.xo : p1.x) - (o2 ? p2.xo : p2.x);
-    },
-
-    // Moves point p so the moved position has the same relative
-    // position to the moved positions of rp1 and rp2 than the
-    // original positions had.
-    //
-    // See APPENDIX on INTERPOLATE at the bottom of this file.
-    interpolate: function (p, rp1, rp2, pv) {
-        var do1;
-        var do2;
-        var doa1;
-        var doa2;
-        var dm1;
-        var dm2;
-        var dt;
-
-        if (!pv || pv === this) {
-            do1 = p.xo - rp1.xo;
-            do2 = p.xo - rp2.xo;
-            dm1 = rp1.x - rp1.xo;
-            dm2 = rp2.x - rp2.xo;
-            doa1 = Math.abs(do1);
-            doa2 = Math.abs(do2);
-            dt = doa1 + doa2;
-
-            if (dt === 0) {
-                p.x = p.xo + (dm1 + dm2) / 2;
-                return;
-            }
-
-            p.x = p.xo + (dm1 * doa2 + dm2 * doa1) / dt;
-            return;
-        }
-
-        do1 = pv.distance(p, rp1, true, true);
-        do2 = pv.distance(p, rp2, true, true);
-        dm1 = pv.distance(rp1, rp1, false, true);
-        dm2 = pv.distance(rp2, rp2, false, true);
-        doa1 = Math.abs(do1);
-        doa2 = Math.abs(do2);
-        dt = doa1 + doa2;
-
-        if (dt === 0) {
-            xUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);
-            return;
-        }
-
-        xUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);
-    },
-
-    // Slope of line normal to this
-    normalSlope: Number.NEGATIVE_INFINITY,
-
-    // Sets the point 'p' relative to point 'rp'
-    // by the distance 'd'.
-    //
-    // See APPENDIX on SETRELATIVE at the bottom of this file.
-    //
-    // p   ... point to set
-    // rp  ... reference point
-    // d   ... distance on projection vector
-    // pv  ... projection vector (undefined = this)
-    // org ... if true, uses the original position of rp as reference.
-    setRelative: function (p, rp, d, pv, org) {
-        if (!pv || pv === this) {
-            p.x = (org ? rp.xo : rp.x) + d;
-            return;
-        }
-
-        var rpx = org ? rp.xo : rp.x;
-        var rpy = org ? rp.yo : rp.y;
-        var rpdx = rpx + d * pv.x;
-        var rpdy = rpy + d * pv.y;
-
-        p.x = rpdx + (p.y - rpdy) / pv.normalSlope;
-    },
-
-    // Slope of vector line.
-    slope: 0,
-
-    // Touches the point p.
-    touch: function (p) {
-        p.xTouched = true;
-    },
-
-    // Tests if a point p is touched.
-    touched: function (p) {
-        return p.xTouched;
-    },
-
-    // Untouches the point p.
-    untouch: function (p) {
-        p.xTouched = false;
-    }
-};
-
-/*
-* Unit vector of y-axis.
-*/
-var yUnitVector = {
-    x: 0,
-
-    y: 1,
-
-    axis: 'y',
-
-    // Gets the projected distance between two points.
-    // o1/o2 ... if true, respective original position is used.
-    distance: function (p1, p2, o1, o2) {
-        return (o1 ? p1.yo : p1.y) - (o2 ? p2.yo : p2.y);
-    },
-
-    // Moves point p so the moved position has the same relative
-    // position to the moved positions of rp1 and rp2 than the
-    // original positions had.
-    //
-    // See APPENDIX on INTERPOLATE at the bottom of this file.
-    interpolate: function (p, rp1, rp2, pv) {
-        var do1;
-        var do2;
-        var doa1;
-        var doa2;
-        var dm1;
-        var dm2;
-        var dt;
-
-        if (!pv || pv === this) {
-            do1 = p.yo - rp1.yo;
-            do2 = p.yo - rp2.yo;
-            dm1 = rp1.y - rp1.yo;
-            dm2 = rp2.y - rp2.yo;
-            doa1 = Math.abs(do1);
-            doa2 = Math.abs(do2);
-            dt = doa1 + doa2;
-
-            if (dt === 0) {
-                p.y = p.yo + (dm1 + dm2) / 2;
-                return;
-            }
-
-            p.y = p.yo + (dm1 * doa2 + dm2 * doa1) / dt;
-            return;
-        }
-
-        do1 = pv.distance(p, rp1, true, true);
-        do2 = pv.distance(p, rp2, true, true);
-        dm1 = pv.distance(rp1, rp1, false, true);
-        dm2 = pv.distance(rp2, rp2, false, true);
-        doa1 = Math.abs(do1);
-        doa2 = Math.abs(do2);
-        dt = doa1 + doa2;
-
-        if (dt === 0) {
-            yUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);
-            return;
-        }
-
-        yUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);
-    },
-
-    // Slope of line normal to this.
-    normalSlope: 0,
-
-    // Sets the point 'p' relative to point 'rp'
-    // by the distance 'd'
-    //
-    // See APPENDIX on SETRELATIVE at the bottom of this file.
-    //
-    // p   ... point to set
-    // rp  ... reference point
-    // d   ... distance on projection vector
-    // pv  ... projection vector (undefined = this)
-    // org ... if true, uses the original position of rp as reference.
-    setRelative: function (p, rp, d, pv, org) {
-        if (!pv || pv === this) {
-            p.y = (org ? rp.yo : rp.y) + d;
-            return;
-        }
-
-        var rpx = org ? rp.xo : rp.x;
-        var rpy = org ? rp.yo : rp.y;
-        var rpdx = rpx + d * pv.x;
-        var rpdy = rpy + d * pv.y;
-
-        p.y = rpdy + pv.normalSlope * (p.x - rpdx);
-    },
-
-    // Slope of vector line.
-    slope: Number.POSITIVE_INFINITY,
-
-    // Touches the point p.
-    touch: function (p) {
-        p.yTouched = true;
-    },
-
-    // Tests if a point p is touched.
-    touched: function (p) {
-        return p.yTouched;
-    },
-
-    // Untouches the point p.
-    untouch: function (p) {
-        p.yTouched = false;
-    }
-};
-
-Object.freeze(xUnitVector);
-Object.freeze(yUnitVector);
-
-/*
-* Creates a unit vector that is not x- or y-axis.
-*/
-function UnitVector(x, y) {
-    this.x = x;
-    this.y = y;
-    this.axis = undefined;
-    this.slope = y / x;
-    this.normalSlope = -x / y;
-    Object.freeze(this);
-}
-
-/*
-* Gets the projected distance between two points.
-* o1/o2 ... if true, respective original position is used.
-*/
-UnitVector.prototype.distance = function(p1, p2, o1, o2) {
-    return (
-        this.x * xUnitVector.distance(p1, p2, o1, o2) +
-        this.y * yUnitVector.distance(p1, p2, o1, o2)
-    );
-};
-
-/*
-* Moves point p so the moved position has the same relative
-* position to the moved positions of rp1 and rp2 than the
-* original positions had.
-*
-* See APPENDIX on INTERPOLATE at the bottom of this file.
-*/
-UnitVector.prototype.interpolate = function(p, rp1, rp2, pv) {
-    var dm1;
-    var dm2;
-    var do1;
-    var do2;
-    var doa1;
-    var doa2;
-    var dt;
-
-    do1 = pv.distance(p, rp1, true, true);
-    do2 = pv.distance(p, rp2, true, true);
-    dm1 = pv.distance(rp1, rp1, false, true);
-    dm2 = pv.distance(rp2, rp2, false, true);
-    doa1 = Math.abs(do1);
-    doa2 = Math.abs(do2);
-    dt = doa1 + doa2;
-
-    if (dt === 0) {
-        this.setRelative(p, p, (dm1 + dm2) / 2, pv, true);
-        return;
-    }
-
-    this.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);
-};
-
-/*
-* Sets the point 'p' relative to point 'rp'
-* by the distance 'd'
-*
-* See APPENDIX on SETRELATIVE at the bottom of this file.
-*
-* p   ...  point to set
-* rp  ... reference point
-* d   ... distance on projection vector
-* pv  ... projection vector (undefined = this)
-* org ... if true, uses the original position of rp as reference.
-*/
-UnitVector.prototype.setRelative = function(p, rp, d, pv, org) {
-    pv = pv || this;
-
-    var rpx = org ? rp.xo : rp.x;
-    var rpy = org ? rp.yo : rp.y;
-    var rpdx = rpx + d * pv.x;
-    var rpdy = rpy + d * pv.y;
-
-    var pvns = pv.normalSlope;
-    var fvs = this.slope;
-
-    var px = p.x;
-    var py = p.y;
-
-    p.x = (fvs * px - pvns * rpdx + rpdy - py) / (fvs - pvns);
-    p.y = fvs * (p.x - px) + py;
-};
-
-/*
-* Touches the point p.
-*/
-UnitVector.prototype.touch = function(p) {
-    p.xTouched = true;
-    p.yTouched = true;
-};
-
-/*
-* Returns a unit vector with x/y coordinates.
-*/
-function getUnitVector(x, y) {
-    var d = Math.sqrt(x * x + y * y);
-
-    x /= d;
-    y /= d;
-
-    if (x === 1 && y === 0) { return xUnitVector; }
-    else if (x === 0 && y === 1) { return yUnitVector; }
-    else { return new UnitVector(x, y); }
-}
-
-/*
-* Creates a point in the hinting engine.
-*/
-function HPoint(
-    x,
-    y,
-    lastPointOfContour,
-    onCurve
-) {
-    this.x = this.xo = Math.round(x * 64) / 64; // hinted x value and original x-value
-    this.y = this.yo = Math.round(y * 64) / 64; // hinted y value and original y-value
-
-    this.lastPointOfContour = lastPointOfContour;
-    this.onCurve = onCurve;
-    this.prevPointOnContour = undefined;
-    this.nextPointOnContour = undefined;
-    this.xTouched = false;
-    this.yTouched = false;
-
-    Object.preventExtensions(this);
-}
-
-/*
-* Returns the next touched point on the contour.
-*
-* v  ... unit vector to test touch axis.
-*/
-HPoint.prototype.nextTouched = function(v) {
-    var p = this.nextPointOnContour;
-
-    while (!v.touched(p) && p !== this) { p = p.nextPointOnContour; }
-
-    return p;
-};
-
-/*
-* Returns the previous touched point on the contour
-*
-* v  ... unit vector to test touch axis.
-*/
-HPoint.prototype.prevTouched = function(v) {
-    var p = this.prevPointOnContour;
-
-    while (!v.touched(p) && p !== this) { p = p.prevPointOnContour; }
-
-    return p;
-};
-
-/*
-* The zero point.
-*/
-var HPZero = Object.freeze(new HPoint(0, 0));
-
-/*
-* The default state of the interpreter.
-*
-* Note: Freezing the defaultState and then deriving from it
-* makes the V8 Javascript engine going awkward,
-* so this is avoided, albeit the defaultState shouldn't
-* ever change.
-*/
-var defaultState = {
-    cvCutIn: 17 / 16,    // control value cut in
-    deltaBase: 9,
-    deltaShift: 0.125,
-    loop: 1,             // loops some instructions
-    minDis: 1,           // minimum distance
-    autoFlip: true
-};
-
-/*
-* The current state of the interpreter.
-*
-* env  ... 'fpgm' or 'prep' or 'glyf'
-* prog ... the program
-*/
-function State(env, prog) {
-    this.env = env;
-    this.stack = [];
-    this.prog = prog;
-
-    switch (env) {
-        case 'glyf' :
-            this.zp0 = this.zp1 = this.zp2 = 1;
-            this.rp0 = this.rp1 = this.rp2 = 0;
-            /* fall through */
-        case 'prep' :
-            this.fv = this.pv = this.dpv = xUnitVector;
-            this.round = roundToGrid;
-    }
-}
-
-/*
-* Executes a glyph program.
-*
-* This does the hinting for each glyph.
-*
-* Returns an array of moved points.
-*
-* glyph: the glyph to hint
-* ppem: the size the glyph is rendered for
-*/
-Hinting.prototype.exec = function(glyph, ppem) {
-    if (typeof ppem !== 'number') {
-        throw new Error('Point size is not a number!');
-    }
-
-    // Received a fatal error, don't do any hinting anymore.
-    if (this._errorState > 2) { return; }
-
-    var font = this.font;
-    var prepState = this._prepState;
-
-    if (!prepState || prepState.ppem !== ppem) {
-        var fpgmState = this._fpgmState;
-
-        if (!fpgmState) {
-            // Executes the fpgm state.
-            // This is used by fonts to define functions.
-            State.prototype = defaultState;
-
-            fpgmState =
-            this._fpgmState =
-                new State('fpgm', font.tables.fpgm);
-
-            fpgmState.funcs = [ ];
-            fpgmState.font = font;
-
-            if (exports.DEBUG) {
-                console.log('---EXEC FPGM---');
-                fpgmState.step = -1;
-            }
-
-            try {
-                exec(fpgmState);
-            } catch (e) {
-                console.log('Hinting error in FPGM:' + e);
-                this._errorState = 3;
-                return;
-            }
-        }
-
-        // Executes the prep program for this ppem setting.
-        // This is used by fonts to set cvt values
-        // depending on to be rendered font size.
-
-        State.prototype = fpgmState;
-        prepState =
-        this._prepState =
-            new State('prep', font.tables.prep);
-
-        prepState.ppem = ppem;
-
-        // Creates a copy of the cvt table
-        // and scales it to the current ppem setting.
-        var oCvt = font.tables.cvt;
-        if (oCvt) {
-            var cvt = prepState.cvt = new Array(oCvt.length);
-            var scale = ppem / font.unitsPerEm;
-            for (var c = 0; c < oCvt.length; c++) {
-                cvt[c] = oCvt[c] * scale;
-            }
-        } else {
-            prepState.cvt = [];
-        }
-
-        if (exports.DEBUG) {
-            console.log('---EXEC PREP---');
-            prepState.step = -1;
-        }
-
-        try {
-            exec(prepState);
-        } catch (e) {
-            if (this._errorState < 2) {
-                console.log('Hinting error in PREP:' + e);
-            }
-            this._errorState = 2;
-        }
-    }
-
-    if (this._errorState > 1) { return; }
-
-    try {
-        return execGlyph(glyph, prepState);
-    } catch (e) {
-        if (this._errorState < 1) {
-            console.log('Hinting error:' + e);
-            console.log('Note: further hinting errors are silenced');
-        }
-        this._errorState = 1;
-        return undefined;
-    }
-};
-
-/*
-* Executes the hinting program for a glyph.
-*/
-execGlyph = function(glyph, prepState) {
-    // original point positions
-    var xScale = prepState.ppem / prepState.font.unitsPerEm;
-    var yScale = xScale;
-    var components = glyph.components;
-    var contours;
-    var gZone;
-    var state;
-
-    State.prototype = prepState;
-    if (!components) {
-        state = new State('glyf', glyph.instructions);
-        if (exports.DEBUG) {
-            console.log('---EXEC GLYPH---');
-            state.step = -1;
-        }
-        execComponent(glyph, state, xScale, yScale);
-        gZone = state.gZone;
-    } else {
-        var font = prepState.font;
-        gZone = [];
-        contours = [];
-        for (var i = 0; i < components.length; i++) {
-            var c = components[i];
-            var cg = font.glyphs.get(c.glyphIndex);
-
-            state = new State('glyf', cg.instructions);
-
-            if (exports.DEBUG) {
-                console.log('---EXEC COMP ' + i + '---');
-                state.step = -1;
-            }
-
-            execComponent(cg, state, xScale, yScale);
-            // appends the computed points to the result array
-            // post processes the component points
-            var dx = Math.round(c.dx * xScale);
-            var dy = Math.round(c.dy * yScale);
-            var gz = state.gZone;
-            var cc = state.contours;
-            for (var pi = 0; pi < gz.length; pi++) {
-                var p = gz[pi];
-                p.xTouched = p.yTouched = false;
-                p.xo = p.x = p.x + dx;
-                p.yo = p.y = p.y + dy;
-            }
-
-            var gLen = gZone.length;
-            gZone.push.apply(gZone, gz);
-            for (var j = 0; j < cc.length; j++) {
-                contours.push(cc[j] + gLen);
-            }
-        }
-
-        if (glyph.instructions && !state.inhibitGridFit) {
-            // the composite has instructions on its own
-            state = new State('glyf', glyph.instructions);
-
-            state.gZone = state.z0 = state.z1 = state.z2 = gZone;
-
-            state.contours = contours;
-
-            // note: HPZero cannot be used here, since
-            //       the point might be modified
-            gZone.push(
-                new HPoint(0, 0),
-                new HPoint(Math.round(glyph.advanceWidth * xScale), 0)
-            );
-
-            if (exports.DEBUG) {
-                console.log('---EXEC COMPOSITE---');
-                state.step = -1;
-            }
-
-            exec(state);
-
-            gZone.length -= 2;
-        }
-    }
-
-    return gZone;
-};
-
-/*
-* Executes the hinting program for a component of a multi-component glyph
-* or of the glyph itself for a non-component glyph.
-*/
-execComponent = function(glyph, state, xScale, yScale)
-{
-    var points = glyph.points || [];
-    var pLen = points.length;
-    var gZone = state.gZone = state.z0 = state.z1 = state.z2 = [];
-    var contours = state.contours = [];
-
-    // Scales the original points and
-    // makes copies for the hinted points.
-    var cp; // current point
-    for (var i = 0; i < pLen; i++) {
-        cp = points[i];
-
-        gZone[i] = new HPoint(
-            cp.x * xScale,
-            cp.y * yScale,
-            cp.lastPointOfContour,
-            cp.onCurve
-        );
-    }
-
-    // Chain links the contours.
-    var sp; // start point
-    var np; // next point
-
-    for (var i$1 = 0; i$1 < pLen; i$1++) {
-        cp = gZone[i$1];
-
-        if (!sp) {
-            sp = cp;
-            contours.push(i$1);
-        }
-
-        if (cp.lastPointOfContour) {
-            cp.nextPointOnContour = sp;
-            sp.prevPointOnContour = cp;
-            sp = undefined;
-        } else {
-            np = gZone[i$1 + 1];
-            cp.nextPointOnContour = np;
-            np.prevPointOnContour = cp;
-        }
-    }
-
-    if (state.inhibitGridFit) { return; }
-
-    if (exports.DEBUG) {
-        console.log('PROCESSING GLYPH', state.stack);
-        for (var i$2 = 0; i$2 < pLen; i$2++) {
-            console.log(i$2, gZone[i$2].x, gZone[i$2].y);
-        }
-    }
-
-    gZone.push(
-        new HPoint(0, 0),
-        new HPoint(Math.round(glyph.advanceWidth * xScale), 0)
-    );
-
-    exec(state);
-
-    // Removes the extra points.
-    gZone.length -= 2;
-
-    if (exports.DEBUG) {
-        console.log('FINISHED GLYPH', state.stack);
-        for (var i$3 = 0; i$3 < pLen; i$3++) {
-            console.log(i$3, gZone[i$3].x, gZone[i$3].y);
-        }
-    }
-};
-
-/*
-* Executes the program loaded in state.
-*/
-exec = function(state) {
-    var prog = state.prog;
-
-    if (!prog) { return; }
-
-    var pLen = prog.length;
-    var ins;
-
-    for (state.ip = 0; state.ip < pLen; state.ip++) {
-        if (exports.DEBUG) { state.step++; }
-        ins = instructionTable[prog[state.ip]];
-
-        if (!ins) {
-            throw new Error(
-                'unknown instruction: 0x' +
-                Number(prog[state.ip]).toString(16)
-            );
-        }
-
-        ins(state);
-
-        // very extensive debugging for each step
-        /*
-        if (exports.DEBUG) {
-            var da;
-            if (state.gZone) {
-                da = [];
-                for (let i = 0; i < state.gZone.length; i++)
-                {
-                    da.push(i + ' ' +
-                        state.gZone[i].x * 64 + ' ' +
-                        state.gZone[i].y * 64 + ' ' +
-                        (state.gZone[i].xTouched ? 'x' : '') +
-                        (state.gZone[i].yTouched ? 'y' : '')
-                    );
-                }
-                console.log('GZ', da);
-            }
-
-            if (state.tZone) {
-                da = [];
-                for (let i = 0; i < state.tZone.length; i++) {
-                    da.push(i + ' ' +
-                        state.tZone[i].x * 64 + ' ' +
-                        state.tZone[i].y * 64 + ' ' +
-                        (state.tZone[i].xTouched ? 'x' : '') +
-                        (state.tZone[i].yTouched ? 'y' : '')
-                    );
-                }
-                console.log('TZ', da);
-            }
-
-            if (state.stack.length > 10) {
-                console.log(
-                    state.stack.length,
-                    '...', state.stack.slice(state.stack.length - 10)
-                );
-            } else {
-                console.log(state.stack.length, state.stack);
-            }
-        }
-        */
-    }
-};
-
-/*
-* Initializes the twilight zone.
-*
-* This is only done if a SZPx instruction
-* refers to the twilight zone.
-*/
-function initTZone(state)
-{
-    var tZone = state.tZone = new Array(state.gZone.length);
-
-    // no idea if this is actually correct...
-    for (var i = 0; i < tZone.length; i++)
-    {
-        tZone[i] = new HPoint(0, 0);
-    }
-}
-
-/*
-* Skips the instruction pointer ahead over an IF/ELSE block.
-* handleElse .. if true breaks on matching ELSE
-*/
-function skip(state, handleElse)
-{
-    var prog = state.prog;
-    var ip = state.ip;
-    var nesting = 1;
-    var ins;
-
-    do {
-        ins = prog[++ip];
-        if (ins === 0x58) // IF
-            { nesting++; }
-        else if (ins === 0x59) // EIF
-            { nesting--; }
-        else if (ins === 0x40) // NPUSHB
-            { ip += prog[ip + 1] + 1; }
-        else if (ins === 0x41) // NPUSHW
-            { ip += 2 * prog[ip + 1] + 1; }
-        else if (ins >= 0xB0 && ins <= 0xB7) // PUSHB
-            { ip += ins - 0xB0 + 1; }
-        else if (ins >= 0xB8 && ins <= 0xBF) // PUSHW
-            { ip += (ins - 0xB8 + 1) * 2; }
-        else if (handleElse && nesting === 1 && ins === 0x1B) // ELSE
-            { break; }
-    } while (nesting > 0);
-
-    state.ip = ip;
-}
-
-/*----------------------------------------------------------*
-*          And then a lot of instructions...                *
-*----------------------------------------------------------*/
-
-// SVTCA[a] Set freedom and projection Vectors To Coordinate Axis
-// 0x00-0x01
-function SVTCA(v, state) {
-    if (exports.DEBUG) { console.log(state.step, 'SVTCA[' + v.axis + ']'); }
-
-    state.fv = state.pv = state.dpv = v;
-}
-
-// SPVTCA[a] Set Projection Vector to Coordinate Axis
-// 0x02-0x03
-function SPVTCA(v, state) {
-    if (exports.DEBUG) { console.log(state.step, 'SPVTCA[' + v.axis + ']'); }
-
-    state.pv = state.dpv = v;
-}
-
-// SFVTCA[a] Set Freedom Vector to Coordinate Axis
-// 0x04-0x05
-function SFVTCA(v, state) {
-    if (exports.DEBUG) { console.log(state.step, 'SFVTCA[' + v.axis + ']'); }
-
-    state.fv = v;
-}
-
-// SPVTL[a] Set Projection Vector To Line
-// 0x06-0x07
-function SPVTL(a, state) {
-    var stack = state.stack;
-    var p2i = stack.pop();
-    var p1i = stack.pop();
-    var p2 = state.z2[p2i];
-    var p1 = state.z1[p1i];
-
-    if (exports.DEBUG) { console.log('SPVTL[' + a + ']', p2i, p1i); }
-
-    var dx;
-    var dy;
-
-    if (!a) {
-        dx = p1.x - p2.x;
-        dy = p1.y - p2.y;
-    } else {
-        dx = p2.y - p1.y;
-        dy = p1.x - p2.x;
-    }
-
-    state.pv = state.dpv = getUnitVector(dx, dy);
-}
-
-// SFVTL[a] Set Freedom Vector To Line
-// 0x08-0x09
-function SFVTL(a, state) {
-    var stack = state.stack;
-    var p2i = stack.pop();
-    var p1i = stack.pop();
-    var p2 = state.z2[p2i];
-    var p1 = state.z1[p1i];
-
-    if (exports.DEBUG) { console.log('SFVTL[' + a + ']', p2i, p1i); }
-
-    var dx;
-    var dy;
-
-    if (!a) {
-        dx = p1.x - p2.x;
-        dy = p1.y - p2.y;
-    } else {
-        dx = p2.y - p1.y;
-        dy = p1.x - p2.x;
-    }
-
-    state.fv = getUnitVector(dx, dy);
-}
-
-// SPVFS[] Set Projection Vector From Stack
-// 0x0A
-function SPVFS(state) {
-    var stack = state.stack;
-    var y = stack.pop();
-    var x = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SPVFS[]', y, x); }
-
-    state.pv = state.dpv = getUnitVector(x, y);
-}
-
-// SFVFS[] Set Freedom Vector From Stack
-// 0x0B
-function SFVFS(state) {
-    var stack = state.stack;
-    var y = stack.pop();
-    var x = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SPVFS[]', y, x); }
-
-    state.fv = getUnitVector(x, y);
-}
-
-// GPV[] Get Projection Vector
-// 0x0C
-function GPV(state) {
-    var stack = state.stack;
-    var pv = state.pv;
-
-    if (exports.DEBUG) { console.log(state.step, 'GPV[]'); }
-
-    stack.push(pv.x * 0x4000);
-    stack.push(pv.y * 0x4000);
-}
-
-// GFV[] Get Freedom Vector
-// 0x0C
-function GFV(state) {
-    var stack = state.stack;
-    var fv = state.fv;
-
-    if (exports.DEBUG) { console.log(state.step, 'GFV[]'); }
-
-    stack.push(fv.x * 0x4000);
-    stack.push(fv.y * 0x4000);
-}
-
-// SFVTPV[] Set Freedom Vector To Projection Vector
-// 0x0E
-function SFVTPV(state) {
-    state.fv = state.pv;
-
-    if (exports.DEBUG) { console.log(state.step, 'SFVTPV[]'); }
-}
-
-// ISECT[] moves point p to the InterSECTion of two lines
-// 0x0F
-function ISECT(state)
-{
-    var stack = state.stack;
-    var pa0i = stack.pop();
-    var pa1i = stack.pop();
-    var pb0i = stack.pop();
-    var pb1i = stack.pop();
-    var pi = stack.pop();
-    var z0 = state.z0;
-    var z1 = state.z1;
-    var pa0 = z0[pa0i];
-    var pa1 = z0[pa1i];
-    var pb0 = z1[pb0i];
-    var pb1 = z1[pb1i];
-    var p = state.z2[pi];
-
-    if (exports.DEBUG) { console.log('ISECT[], ', pa0i, pa1i, pb0i, pb1i, pi); }
-
-    // math from
-    // en.wikipedia.org/wiki/Line%E2%80%93line_intersection#Given_two_points_on_each_line
-
-    var x1 = pa0.x;
-    var y1 = pa0.y;
-    var x2 = pa1.x;
-    var y2 = pa1.y;
-    var x3 = pb0.x;
-    var y3 = pb0.y;
-    var x4 = pb1.x;
-    var y4 = pb1.y;
-
-    var div = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);
-    var f1 = x1 * y2 - y1 * x2;
-    var f2 = x3 * y4 - y3 * x4;
-
-    p.x = (f1 * (x3 - x4) - f2 * (x1 - x2)) / div;
-    p.y = (f1 * (y3 - y4) - f2 * (y1 - y2)) / div;
-}
-
-// SRP0[] Set Reference Point 0
-// 0x10
-function SRP0(state) {
-    state.rp0 = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SRP0[]', state.rp0); }
-}
-
-// SRP1[] Set Reference Point 1
-// 0x11
-function SRP1(state) {
-    state.rp1 = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SRP1[]', state.rp1); }
-}
-
-// SRP1[] Set Reference Point 2
-// 0x12
-function SRP2(state) {
-    state.rp2 = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SRP2[]', state.rp2); }
-}
-
-// SZP0[] Set Zone Pointer 0
-// 0x13
-function SZP0(state) {
-    var n = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SZP0[]', n); }
-
-    state.zp0 = n;
-
-    switch (n) {
-        case 0:
-            if (!state.tZone) { initTZone(state); }
-            state.z0 = state.tZone;
-            break;
-        case 1 :
-            state.z0 = state.gZone;
-            break;
-        default :
-            throw new Error('Invalid zone pointer');
-    }
-}
-
-// SZP1[] Set Zone Pointer 1
-// 0x14
-function SZP1(state) {
-    var n = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SZP1[]', n); }
-
-    state.zp1 = n;
-
-    switch (n) {
-        case 0:
-            if (!state.tZone) { initTZone(state); }
-            state.z1 = state.tZone;
-            break;
-        case 1 :
-            state.z1 = state.gZone;
-            break;
-        default :
-            throw new Error('Invalid zone pointer');
-    }
-}
-
-// SZP2[] Set Zone Pointer 2
-// 0x15
-function SZP2(state) {
-    var n = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SZP2[]', n); }
-
-    state.zp2 = n;
-
-    switch (n) {
-        case 0:
-            if (!state.tZone) { initTZone(state); }
-            state.z2 = state.tZone;
-            break;
-        case 1 :
-            state.z2 = state.gZone;
-            break;
-        default :
-            throw new Error('Invalid zone pointer');
-    }
-}
-
-// SZPS[] Set Zone PointerS
-// 0x16
-function SZPS(state) {
-    var n = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SZPS[]', n); }
-
-    state.zp0 = state.zp1 = state.zp2 = n;
-
-    switch (n) {
-        case 0:
-            if (!state.tZone) { initTZone(state); }
-            state.z0 = state.z1 = state.z2 = state.tZone;
-            break;
-        case 1 :
-            state.z0 = state.z1 = state.z2 = state.gZone;
-            break;
-        default :
-            throw new Error('Invalid zone pointer');
-    }
-}
-
-// SLOOP[] Set LOOP variable
-// 0x17
-function SLOOP(state) {
-    state.loop = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SLOOP[]', state.loop); }
-}
-
-// RTG[] Round To Grid
-// 0x18
-function RTG(state) {
-    if (exports.DEBUG) { console.log(state.step, 'RTG[]'); }
-
-    state.round = roundToGrid;
-}
-
-// RTHG[] Round To Half Grid
-// 0x19
-function RTHG(state) {
-    if (exports.DEBUG) { console.log(state.step, 'RTHG[]'); }
-
-    state.round = roundToHalfGrid;
-}
-
-// SMD[] Set Minimum Distance
-// 0x1A
-function SMD(state) {
-    var d = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SMD[]', d); }
-
-    state.minDis = d / 0x40;
-}
-
-// ELSE[] ELSE clause
-// 0x1B
-function ELSE(state) {
-    // This instruction has been reached by executing a then branch
-    // so it just skips ahead until matching EIF.
-    //
-    // In case the IF was negative the IF[] instruction already
-    // skipped forward over the ELSE[]
-
-    if (exports.DEBUG) { console.log(state.step, 'ELSE[]'); }
-
-    skip(state, false);
-}
-
-// JMPR[] JuMP Relative
-// 0x1C
-function JMPR(state) {
-    var o = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'JMPR[]', o); }
-
-    // A jump by 1 would do nothing.
-    state.ip += o - 1;
-}
-
-// SCVTCI[] Set Control Value Table Cut-In
-// 0x1D
-function SCVTCI(state) {
-    var n = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SCVTCI[]', n); }
-
-    state.cvCutIn = n / 0x40;
-}
-
-// DUP[] DUPlicate top stack element
-// 0x20
-function DUP(state) {
-    var stack = state.stack;
-
-    if (exports.DEBUG) { console.log(state.step, 'DUP[]'); }
-
-    stack.push(stack[stack.length - 1]);
-}
-
-// POP[] POP top stack element
-// 0x21
-function POP(state) {
-    if (exports.DEBUG) { console.log(state.step, 'POP[]'); }
-
-    state.stack.pop();
-}
-
-// CLEAR[] CLEAR the stack
-// 0x22
-function CLEAR(state) {
-    if (exports.DEBUG) { console.log(state.step, 'CLEAR[]'); }
-
-    state.stack.length = 0;
-}
-
-// SWAP[] SWAP the top two elements on the stack
-// 0x23
-function SWAP(state) {
-    var stack = state.stack;
-
-    var a = stack.pop();
-    var b = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SWAP[]'); }
-
-    stack.push(a);
-    stack.push(b);
-}
-
-// DEPTH[] DEPTH of the stack
-// 0x24
-function DEPTH(state) {
-    var stack = state.stack;
-
-    if (exports.DEBUG) { console.log(state.step, 'DEPTH[]'); }
-
-    stack.push(stack.length);
-}
-
-// LOOPCALL[] LOOPCALL function
-// 0x2A
-function LOOPCALL(state) {
-    var stack = state.stack;
-    var fn = stack.pop();
-    var c = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'LOOPCALL[]', fn, c); }
-
-    // saves callers program
-    var cip = state.ip;
-    var cprog = state.prog;
-
-    state.prog = state.funcs[fn];
-
-    // executes the function
-    for (var i = 0; i < c; i++) {
-        exec(state);
-
-        if (exports.DEBUG) { console.log(
-            ++state.step,
-            i + 1 < c ? 'next loopcall' : 'done loopcall',
-            i
-        ); }
-    }
-
-    // restores the callers program
-    state.ip = cip;
-    state.prog = cprog;
-}
-
-// CALL[] CALL function
-// 0x2B
-function CALL(state) {
-    var fn = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'CALL[]', fn); }
-
-    // saves callers program
-    var cip = state.ip;
-    var cprog = state.prog;
-
-    state.prog = state.funcs[fn];
-
-    // executes the function
-    exec(state);
-
-    // restores the callers program
-    state.ip = cip;
-    state.prog = cprog;
-
-    if (exports.DEBUG) { console.log(++state.step, 'returning from', fn); }
-}
-
-// CINDEX[] Copy the INDEXed element to the top of the stack
-// 0x25
-function CINDEX(state) {
-    var stack = state.stack;
-    var k = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'CINDEX[]', k); }
-
-    // In case of k == 1, it copies the last element after popping
-    // thus stack.length - k.
-    stack.push(stack[stack.length - k]);
-}
-
-// MINDEX[] Move the INDEXed element to the top of the stack
-// 0x26
-function MINDEX(state) {
-    var stack = state.stack;
-    var k = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'MINDEX[]', k); }
-
-    stack.push(stack.splice(stack.length - k, 1)[0]);
-}
-
-// FDEF[] Function DEFinition
-// 0x2C
-function FDEF(state) {
-    if (state.env !== 'fpgm') { throw new Error('FDEF not allowed here'); }
-    var stack = state.stack;
-    var prog = state.prog;
-    var ip = state.ip;
-
-    var fn = stack.pop();
-    var ipBegin = ip;
-
-    if (exports.DEBUG) { console.log(state.step, 'FDEF[]', fn); }
-
-    while (prog[++ip] !== 0x2D){ }
-
-    state.ip = ip;
-    state.funcs[fn] = prog.slice(ipBegin + 1, ip);
-}
-
-// MDAP[a] Move Direct Absolute Point
-// 0x2E-0x2F
-function MDAP(round, state) {
-    var pi = state.stack.pop();
-    var p = state.z0[pi];
-    var fv = state.fv;
-    var pv = state.pv;
-
-    if (exports.DEBUG) { console.log(state.step, 'MDAP[' + round + ']', pi); }
-
-    var d = pv.distance(p, HPZero);
-
-    if (round) { d = state.round(d); }
-
-    fv.setRelative(p, HPZero, d, pv);
-    fv.touch(p);
-
-    state.rp0 = state.rp1 = pi;
-}
-
-// IUP[a] Interpolate Untouched Points through the outline
-// 0x30
-function IUP(v, state) {
-    var z2 = state.z2;
-    var pLen = z2.length - 2;
-    var cp;
-    var pp;
-    var np;
-
-    if (exports.DEBUG) { console.log(state.step, 'IUP[' + v.axis + ']'); }
-
-    for (var i = 0; i < pLen; i++) {
-        cp = z2[i]; // current point
-
-        // if this point has been touched go on
-        if (v.touched(cp)) { continue; }
-
-        pp = cp.prevTouched(v);
-
-        // no point on the contour has been touched?
-        if (pp === cp) { continue; }
-
-        np = cp.nextTouched(v);
-
-        if (pp === np) {
-            // only one point on the contour has been touched
-            // so simply moves the point like that
-
-            v.setRelative(cp, cp, v.distance(pp, pp, false, true), v, true);
-        }
-
-        v.interpolate(cp, pp, np, v);
-    }
-}
-
-// SHP[] SHift Point using reference point
-// 0x32-0x33
-function SHP(a, state) {
-    var stack = state.stack;
-    var rpi = a ? state.rp1 : state.rp2;
-    var rp = (a ? state.z0 : state.z1)[rpi];
-    var fv = state.fv;
-    var pv = state.pv;
-    var loop = state.loop;
-    var z2 = state.z2;
-
-    while (loop--)
-    {
-        var pi = stack.pop();
-        var p = z2[pi];
-
-        var d = pv.distance(rp, rp, false, true);
-        fv.setRelative(p, p, d, pv);
-        fv.touch(p);
-
-        if (exports.DEBUG) {
-            console.log(
-                state.step,
-                (state.loop > 1 ?
-                   'loop ' + (state.loop - loop) + ': ' :
-                   ''
-                ) +
-                'SHP[' + (a ? 'rp1' : 'rp2') + ']', pi
-            );
-        }
-    }
-
-    state.loop = 1;
-}
-
-// SHC[] SHift Contour using reference point
-// 0x36-0x37
-function SHC(a, state) {
-    var stack = state.stack;
-    var rpi = a ? state.rp1 : state.rp2;
-    var rp = (a ? state.z0 : state.z1)[rpi];
-    var fv = state.fv;
-    var pv = state.pv;
-    var ci = stack.pop();
-    var sp = state.z2[state.contours[ci]];
-    var p = sp;
-
-    if (exports.DEBUG) { console.log(state.step, 'SHC[' + a + ']', ci); }
-
-    var d = pv.distance(rp, rp, false, true);
-
-    do {
-        if (p !== rp) { fv.setRelative(p, p, d, pv); }
-        p = p.nextPointOnContour;
-    } while (p !== sp);
-}
-
-// SHZ[] SHift Zone using reference point
-// 0x36-0x37
-function SHZ(a, state) {
-    var stack = state.stack;
-    var rpi = a ? state.rp1 : state.rp2;
-    var rp = (a ? state.z0 : state.z1)[rpi];
-    var fv = state.fv;
-    var pv = state.pv;
-
-    var e = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SHZ[' + a + ']', e); }
-
-    var z;
-    switch (e) {
-        case 0 : z = state.tZone; break;
-        case 1 : z = state.gZone; break;
-        default : throw new Error('Invalid zone');
-    }
-
-    var p;
-    var d = pv.distance(rp, rp, false, true);
-    var pLen = z.length - 2;
-    for (var i = 0; i < pLen; i++)
-    {
-        p = z[i];
-        fv.setRelative(p, p, d, pv);
-        //if (p !== rp) fv.setRelative(p, p, d, pv);
-    }
-}
-
-// SHPIX[] SHift point by a PIXel amount
-// 0x38
-function SHPIX(state) {
-    var stack = state.stack;
-    var loop = state.loop;
-    var fv = state.fv;
-    var d = stack.pop() / 0x40;
-    var z2 = state.z2;
-
-    while (loop--) {
-        var pi = stack.pop();
-        var p = z2[pi];
-
-        if (exports.DEBUG) {
-            console.log(
-                state.step,
-                (state.loop > 1 ? 'loop ' + (state.loop - loop) + ': ' : '') +
-                'SHPIX[]', pi, d
-            );
-        }
-
-        fv.setRelative(p, p, d);
-        fv.touch(p);
-    }
-
-    state.loop = 1;
-}
-
-// IP[] Interpolate Point
-// 0x39
-function IP(state) {
-    var stack = state.stack;
-    var rp1i = state.rp1;
-    var rp2i = state.rp2;
-    var loop = state.loop;
-    var rp1 = state.z0[rp1i];
-    var rp2 = state.z1[rp2i];
-    var fv = state.fv;
-    var pv = state.dpv;
-    var z2 = state.z2;
-
-    while (loop--) {
-        var pi = stack.pop();
-        var p = z2[pi];
-
-        if (exports.DEBUG) {
-            console.log(
-                state.step,
-                (state.loop > 1 ? 'loop ' + (state.loop - loop) + ': ' : '') +
-                'IP[]', pi, rp1i, '<->', rp2i
-            );
-        }
-
-        fv.interpolate(p, rp1, rp2, pv);
-
-        fv.touch(p);
-    }
-
-    state.loop = 1;
-}
-
-// MSIRP[a] Move Stack Indirect Relative Point
-// 0x3A-0x3B
-function MSIRP(a, state) {
-    var stack = state.stack;
-    var d = stack.pop() / 64;
-    var pi = stack.pop();
-    var p = state.z1[pi];
-    var rp0 = state.z0[state.rp0];
-    var fv = state.fv;
-    var pv = state.pv;
-
-    fv.setRelative(p, rp0, d, pv);
-    fv.touch(p);
-
-    if (exports.DEBUG) { console.log(state.step, 'MSIRP[' + a + ']', d, pi); }
-
-    state.rp1 = state.rp0;
-    state.rp2 = pi;
-    if (a) { state.rp0 = pi; }
-}
-
-// ALIGNRP[] Align to reference point.
-// 0x3C
-function ALIGNRP(state) {
-    var stack = state.stack;
-    var rp0i = state.rp0;
-    var rp0 = state.z0[rp0i];
-    var loop = state.loop;
-    var fv = state.fv;
-    var pv = state.pv;
-    var z1 = state.z1;
-
-    while (loop--) {
-        var pi = stack.pop();
-        var p = z1[pi];
-
-        if (exports.DEBUG) {
-            console.log(
-                state.step,
-                (state.loop > 1 ? 'loop ' + (state.loop - loop) + ': ' : '') +
-                'ALIGNRP[]', pi
-            );
-        }
-
-        fv.setRelative(p, rp0, 0, pv);
-        fv.touch(p);
-    }
-
-    state.loop = 1;
-}
-
-// RTG[] Round To Double Grid
-// 0x3D
-function RTDG(state) {
-    if (exports.DEBUG) { console.log(state.step, 'RTDG[]'); }
-
-    state.round = roundToDoubleGrid;
-}
-
-// MIAP[a] Move Indirect Absolute Point
-// 0x3E-0x3F
-function MIAP(round, state) {
-    var stack = state.stack;
-    var n = stack.pop();
-    var pi = stack.pop();
-    var p = state.z0[pi];
-    var fv = state.fv;
-    var pv = state.pv;
-    var cv = state.cvt[n];
-
-    if (exports.DEBUG) {
-        console.log(
-            state.step,
-            'MIAP[' + round + ']',
-            n, '(', cv, ')', pi
-        );
-    }
-
-    var d = pv.distance(p, HPZero);
-
-    if (round) {
-        if (Math.abs(d - cv) < state.cvCutIn) { d = cv; }
-
-        d = state.round(d);
-    }
-
-    fv.setRelative(p, HPZero, d, pv);
-
-    if (state.zp0 === 0) {
-        p.xo = p.x;
-        p.yo = p.y;
-    }
-
-    fv.touch(p);
-
-    state.rp0 = state.rp1 = pi;
-}
-
-// NPUSB[] PUSH N Bytes
-// 0x40
-function NPUSHB(state) {
-    var prog = state.prog;
-    var ip = state.ip;
-    var stack = state.stack;
-
-    var n = prog[++ip];
-
-    if (exports.DEBUG) { console.log(state.step, 'NPUSHB[]', n); }
-
-    for (var i = 0; i < n; i++) { stack.push(prog[++ip]); }
-
-    state.ip = ip;
-}
-
-// NPUSHW[] PUSH N Words
-// 0x41
-function NPUSHW(state) {
-    var ip = state.ip;
-    var prog = state.prog;
-    var stack = state.stack;
-    var n = prog[++ip];
-
-    if (exports.DEBUG) { console.log(state.step, 'NPUSHW[]', n); }
-
-    for (var i = 0; i < n; i++) {
-        var w = (prog[++ip] << 8) | prog[++ip];
-        if (w & 0x8000) { w = -((w ^ 0xffff) + 1); }
-        stack.push(w);
-    }
-
-    state.ip = ip;
-}
-
-// WS[] Write Store
-// 0x42
-function WS(state) {
-    var stack = state.stack;
-    var store = state.store;
-
-    if (!store) { store = state.store = []; }
-
-    var v = stack.pop();
-    var l = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'WS', v, l); }
-
-    store[l] = v;
-}
-
-// RS[] Read Store
-// 0x43
-function RS(state) {
-    var stack = state.stack;
-    var store = state.store;
-
-    var l = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'RS', l); }
-
-    var v = (store && store[l]) || 0;
-
-    stack.push(v);
-}
-
-// WCVTP[] Write Control Value Table in Pixel units
-// 0x44
-function WCVTP(state) {
-    var stack = state.stack;
-
-    var v = stack.pop();
-    var l = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'WCVTP', v, l); }
-
-    state.cvt[l] = v / 0x40;
-}
-
-// RCVT[] Read Control Value Table entry
-// 0x45
-function RCVT(state) {
-    var stack = state.stack;
-    var cvte = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'RCVT', cvte); }
-
-    stack.push(state.cvt[cvte] * 0x40);
-}
-
-// GC[] Get Coordinate projected onto the projection vector
-// 0x46-0x47
-function GC(a, state) {
-    var stack = state.stack;
-    var pi = stack.pop();
-    var p = state.z2[pi];
-
-    if (exports.DEBUG) { console.log(state.step, 'GC[' + a + ']', pi); }
-
-    stack.push(state.dpv.distance(p, HPZero, a, false) * 0x40);
-}
-
-// MD[a] Measure Distance
-// 0x49-0x4A
-function MD(a, state) {
-    var stack = state.stack;
-    var pi2 = stack.pop();
-    var pi1 = stack.pop();
-    var p2 = state.z1[pi2];
-    var p1 = state.z0[pi1];
-    var d = state.dpv.distance(p1, p2, a, a);
-
-    if (exports.DEBUG) { console.log(state.step, 'MD[' + a + ']', pi2, pi1, '->', d); }
-
-    state.stack.push(Math.round(d * 64));
-}
-
-// MPPEM[] Measure Pixels Per EM
-// 0x4B
-function MPPEM(state) {
-    if (exports.DEBUG) { console.log(state.step, 'MPPEM[]'); }
-    state.stack.push(state.ppem);
-}
-
-// FLIPON[] set the auto FLIP Boolean to ON
-// 0x4D
-function FLIPON(state) {
-    if (exports.DEBUG) { console.log(state.step, 'FLIPON[]'); }
-    state.autoFlip = true;
-}
-
-// LT[] Less Than
-// 0x50
-function LT(state) {
-    var stack = state.stack;
-    var e2 = stack.pop();
-    var e1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'LT[]', e2, e1); }
-
-    stack.push(e1 < e2 ? 1 : 0);
-}
-
-// LTEQ[] Less Than or EQual
-// 0x53
-function LTEQ(state) {
-    var stack = state.stack;
-    var e2 = stack.pop();
-    var e1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'LTEQ[]', e2, e1); }
-
-    stack.push(e1 <= e2 ? 1 : 0);
-}
-
-// GTEQ[] Greater Than
-// 0x52
-function GT(state) {
-    var stack = state.stack;
-    var e2 = stack.pop();
-    var e1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'GT[]', e2, e1); }
-
-    stack.push(e1 > e2 ? 1 : 0);
-}
-
-// GTEQ[] Greater Than or EQual
-// 0x53
-function GTEQ(state) {
-    var stack = state.stack;
-    var e2 = stack.pop();
-    var e1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'GTEQ[]', e2, e1); }
-
-    stack.push(e1 >= e2 ? 1 : 0);
-}
-
-// EQ[] EQual
-// 0x54
-function EQ(state) {
-    var stack = state.stack;
-    var e2 = stack.pop();
-    var e1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'EQ[]', e2, e1); }
-
-    stack.push(e2 === e1 ? 1 : 0);
-}
-
-// NEQ[] Not EQual
-// 0x55
-function NEQ(state) {
-    var stack = state.stack;
-    var e2 = stack.pop();
-    var e1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'NEQ[]', e2, e1); }
-
-    stack.push(e2 !== e1 ? 1 : 0);
-}
-
-// ODD[] ODD
-// 0x56
-function ODD(state) {
-    var stack = state.stack;
-    var n = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'ODD[]', n); }
-
-    stack.push(Math.trunc(n) % 2 ? 1 : 0);
-}
-
-// EVEN[] EVEN
-// 0x57
-function EVEN(state) {
-    var stack = state.stack;
-    var n = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'EVEN[]', n); }
-
-    stack.push(Math.trunc(n) % 2 ? 0 : 1);
-}
-
-// IF[] IF test
-// 0x58
-function IF(state) {
-    var test = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'IF[]', test); }
-
-    // if test is true it just continues
-    // if not the ip is skipped until matching ELSE or EIF
-    if (!test) {
-        skip(state, true);
-
-        if (exports.DEBUG) { console.log(state.step,  'EIF[]'); }
-    }
-}
-
-// EIF[] End IF
-// 0x59
-function EIF(state) {
-    // this can be reached normally when
-    // executing an else branch.
-    // -> just ignore it
-
-    if (exports.DEBUG) { console.log(state.step, 'EIF[]'); }
-}
-
-// AND[] logical AND
-// 0x5A
-function AND(state) {
-    var stack = state.stack;
-    var e2 = stack.pop();
-    var e1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'AND[]', e2, e1); }
-
-    stack.push(e2 && e1 ? 1 : 0);
-}
-
-// OR[] logical OR
-// 0x5B
-function OR(state) {
-    var stack = state.stack;
-    var e2 = stack.pop();
-    var e1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'OR[]', e2, e1); }
-
-    stack.push(e2 || e1 ? 1 : 0);
-}
-
-// NOT[] logical NOT
-// 0x5C
-function NOT(state) {
-    var stack = state.stack;
-    var e = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'NOT[]', e); }
-
-    stack.push(e ? 0 : 1);
-}
-
-// DELTAP1[] DELTA exception P1
-// DELTAP2[] DELTA exception P2
-// DELTAP3[] DELTA exception P3
-// 0x5D, 0x71, 0x72
-function DELTAP123(b, state) {
-    var stack = state.stack;
-    var n = stack.pop();
-    var fv = state.fv;
-    var pv = state.pv;
-    var ppem = state.ppem;
-    var base = state.deltaBase + (b - 1) * 16;
-    var ds = state.deltaShift;
-    var z0 = state.z0;
-
-    if (exports.DEBUG) { console.log(state.step, 'DELTAP[' + b + ']', n, stack); }
-
-    for (var i = 0; i < n; i++) {
-        var pi = stack.pop();
-        var arg = stack.pop();
-        var appem = base + ((arg & 0xF0) >> 4);
-        if (appem !== ppem) { continue; }
-
-        var mag = (arg & 0x0F) - 8;
-        if (mag >= 0) { mag++; }
-        if (exports.DEBUG) { console.log(state.step, 'DELTAPFIX', pi, 'by', mag * ds); }
-
-        var p = z0[pi];
-        fv.setRelative(p, p, mag * ds, pv);
-    }
-}
-
-// SDB[] Set Delta Base in the graphics state
-// 0x5E
-function SDB(state) {
-    var stack = state.stack;
-    var n = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SDB[]', n); }
-
-    state.deltaBase = n;
-}
-
-// SDS[] Set Delta Shift in the graphics state
-// 0x5F
-function SDS(state) {
-    var stack = state.stack;
-    var n = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SDS[]', n); }
-
-    state.deltaShift = Math.pow(0.5, n);
-}
-
-// ADD[] ADD
-// 0x60
-function ADD(state) {
-    var stack = state.stack;
-    var n2 = stack.pop();
-    var n1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'ADD[]', n2, n1); }
-
-    stack.push(n1 + n2);
-}
-
-// SUB[] SUB
-// 0x61
-function SUB(state) {
-    var stack = state.stack;
-    var n2 = stack.pop();
-    var n1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SUB[]', n2, n1); }
-
-    stack.push(n1 - n2);
-}
-
-// DIV[] DIV
-// 0x62
-function DIV(state) {
-    var stack = state.stack;
-    var n2 = stack.pop();
-    var n1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'DIV[]', n2, n1); }
-
-    stack.push(n1 * 64 / n2);
-}
-
-// MUL[] MUL
-// 0x63
-function MUL(state) {
-    var stack = state.stack;
-    var n2 = stack.pop();
-    var n1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'MUL[]', n2, n1); }
-
-    stack.push(n1 * n2 / 64);
-}
-
-// ABS[] ABSolute value
-// 0x64
-function ABS(state) {
-    var stack = state.stack;
-    var n = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'ABS[]', n); }
-
-    stack.push(Math.abs(n));
-}
-
-// NEG[] NEGate
-// 0x65
-function NEG(state) {
-    var stack = state.stack;
-    var n = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'NEG[]', n); }
-
-    stack.push(-n);
-}
-
-// FLOOR[] FLOOR
-// 0x66
-function FLOOR(state) {
-    var stack = state.stack;
-    var n = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'FLOOR[]', n); }
-
-    stack.push(Math.floor(n / 0x40) * 0x40);
-}
-
-// CEILING[] CEILING
-// 0x67
-function CEILING(state) {
-    var stack = state.stack;
-    var n = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'CEILING[]', n); }
-
-    stack.push(Math.ceil(n / 0x40) * 0x40);
-}
-
-// ROUND[ab] ROUND value
-// 0x68-0x6B
-function ROUND(dt, state) {
-    var stack = state.stack;
-    var n = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'ROUND[]'); }
-
-    stack.push(state.round(n / 0x40) * 0x40);
-}
-
-// WCVTF[] Write Control Value Table in Funits
-// 0x70
-function WCVTF(state) {
-    var stack = state.stack;
-    var v = stack.pop();
-    var l = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'WCVTF[]', v, l); }
-
-    state.cvt[l] = v * state.ppem / state.font.unitsPerEm;
-}
-
-// DELTAC1[] DELTA exception C1
-// DELTAC2[] DELTA exception C2
-// DELTAC3[] DELTA exception C3
-// 0x73, 0x74, 0x75
-function DELTAC123(b, state) {
-    var stack = state.stack;
-    var n = stack.pop();
-    var ppem = state.ppem;
-    var base = state.deltaBase + (b - 1) * 16;
-    var ds = state.deltaShift;
-
-    if (exports.DEBUG) { console.log(state.step, 'DELTAC[' + b + ']', n, stack); }
-
-    for (var i = 0; i < n; i++) {
-        var c = stack.pop();
-        var arg = stack.pop();
-        var appem = base + ((arg & 0xF0) >> 4);
-        if (appem !== ppem) { continue; }
-
-        var mag = (arg & 0x0F) - 8;
-        if (mag >= 0) { mag++; }
-
-        var delta = mag * ds;
-
-        if (exports.DEBUG) { console.log(state.step, 'DELTACFIX', c, 'by', delta); }
-
-        state.cvt[c] += delta;
-    }
-}
-
-// SROUND[] Super ROUND
-// 0x76
-function SROUND(state) {
-    var n = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'SROUND[]', n); }
-
-    state.round = roundSuper;
-
-    var period;
-
-    switch (n & 0xC0) {
-        case 0x00:
-            period = 0.5;
-            break;
-        case 0x40:
-            period = 1;
-            break;
-        case 0x80:
-            period = 2;
-            break;
-        default:
-            throw new Error('invalid SROUND value');
-    }
-
-    state.srPeriod = period;
-
-    switch (n & 0x30) {
-        case 0x00:
-            state.srPhase = 0;
-            break;
-        case 0x10:
-            state.srPhase = 0.25 * period;
-            break;
-        case 0x20:
-            state.srPhase = 0.5  * period;
-            break;
-        case 0x30:
-            state.srPhase = 0.75 * period;
-            break;
-        default: throw new Error('invalid SROUND value');
-    }
-
-    n &= 0x0F;
-
-    if (n === 0) { state.srThreshold = 0; }
-    else { state.srThreshold = (n / 8 - 0.5) * period; }
-}
-
-// S45ROUND[] Super ROUND 45 degrees
-// 0x77
-function S45ROUND(state) {
-    var n = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'S45ROUND[]', n); }
-
-    state.round = roundSuper;
-
-    var period;
-
-    switch (n & 0xC0) {
-        case 0x00:
-            period = Math.sqrt(2) / 2;
-            break;
-        case 0x40:
-            period = Math.sqrt(2);
-            break;
-        case 0x80:
-            period = 2 * Math.sqrt(2);
-            break;
-        default:
-            throw new Error('invalid S45ROUND value');
-    }
-
-    state.srPeriod = period;
-
-    switch (n & 0x30) {
-        case 0x00:
-            state.srPhase = 0;
-            break;
-        case 0x10:
-            state.srPhase = 0.25 * period;
-            break;
-        case 0x20:
-            state.srPhase = 0.5  * period;
-            break;
-        case 0x30:
-            state.srPhase = 0.75 * period;
-            break;
-        default:
-            throw new Error('invalid S45ROUND value');
-    }
-
-    n &= 0x0F;
-
-    if (n === 0) { state.srThreshold = 0; }
-    else { state.srThreshold = (n / 8 - 0.5) * period; }
-}
-
-// ROFF[] Round Off
-// 0x7A
-function ROFF(state) {
-    if (exports.DEBUG) { console.log(state.step, 'ROFF[]'); }
-
-    state.round = roundOff;
-}
-
-// RUTG[] Round Up To Grid
-// 0x7C
-function RUTG(state) {
-    if (exports.DEBUG) { console.log(state.step, 'RUTG[]'); }
-
-    state.round = roundUpToGrid;
-}
-
-// RDTG[] Round Down To Grid
-// 0x7D
-function RDTG(state) {
-    if (exports.DEBUG) { console.log(state.step, 'RDTG[]'); }
-
-    state.round = roundDownToGrid;
-}
-
-// SCANCTRL[] SCAN conversion ConTRoL
-// 0x85
-function SCANCTRL(state) {
-    var n = state.stack.pop();
-
-    // ignored by opentype.js
-
-    if (exports.DEBUG) { console.log(state.step, 'SCANCTRL[]', n); }
-}
-
-// SDPVTL[a] Set Dual Projection Vector To Line
-// 0x86-0x87
-function SDPVTL(a, state) {
-    var stack = state.stack;
-    var p2i = stack.pop();
-    var p1i = stack.pop();
-    var p2 = state.z2[p2i];
-    var p1 = state.z1[p1i];
-
-    if (exports.DEBUG) { console.log(state.step, 'SDPVTL[' + a + ']', p2i, p1i); }
-
-    var dx;
-    var dy;
-
-    if (!a) {
-        dx = p1.x - p2.x;
-        dy = p1.y - p2.y;
-    } else {
-        dx = p2.y - p1.y;
-        dy = p1.x - p2.x;
-    }
-
-    state.dpv = getUnitVector(dx, dy);
-}
-
-// GETINFO[] GET INFOrmation
-// 0x88
-function GETINFO(state) {
-    var stack = state.stack;
-    var sel = stack.pop();
-    var r = 0;
-
-    if (exports.DEBUG) { console.log(state.step, 'GETINFO[]', sel); }
-
-    // v35 as in no subpixel hinting
-    if (sel & 0x01) { r = 35; }
-
-    // TODO rotation and stretch currently not supported
-    // and thus those GETINFO are always 0.
-
-    // opentype.js is always gray scaling
-    if (sel & 0x20) { r |= 0x1000; }
-
-    stack.push(r);
-}
-
-// ROLL[] ROLL the top three stack elements
-// 0x8A
-function ROLL(state) {
-    var stack = state.stack;
-    var a = stack.pop();
-    var b = stack.pop();
-    var c = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'ROLL[]'); }
-
-    stack.push(b);
-    stack.push(a);
-    stack.push(c);
-}
-
-// MAX[] MAXimum of top two stack elements
-// 0x8B
-function MAX(state) {
-    var stack = state.stack;
-    var e2 = stack.pop();
-    var e1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'MAX[]', e2, e1); }
-
-    stack.push(Math.max(e1, e2));
-}
-
-// MIN[] MINimum of top two stack elements
-// 0x8C
-function MIN(state) {
-    var stack = state.stack;
-    var e2 = stack.pop();
-    var e1 = stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'MIN[]', e2, e1); }
-
-    stack.push(Math.min(e1, e2));
-}
-
-// SCANTYPE[] SCANTYPE
-// 0x8D
-function SCANTYPE(state) {
-    var n = state.stack.pop();
-    // ignored by opentype.js
-    if (exports.DEBUG) { console.log(state.step, 'SCANTYPE[]', n); }
-}
-
-// INSTCTRL[] INSTCTRL
-// 0x8D
-function INSTCTRL(state) {
-    var s = state.stack.pop();
-    var v = state.stack.pop();
-
-    if (exports.DEBUG) { console.log(state.step, 'INSTCTRL[]', s, v); }
-
-    switch (s) {
-        case 1 : state.inhibitGridFit = !!v; return;
-        case 2 : state.ignoreCvt = !!v; return;
-        default: throw new Error('invalid INSTCTRL[] selector');
-    }
-}
-
-// PUSHB[abc] PUSH Bytes
-// 0xB0-0xB7
-function PUSHB(n, state) {
-    var stack = state.stack;
-    var prog = state.prog;
-    var ip = state.ip;
-
-    if (exports.DEBUG) { console.log(state.step, 'PUSHB[' + n + ']'); }
-
-    for (var i = 0; i < n; i++) { stack.push(prog[++ip]); }
-
-    state.ip = ip;
-}
-
-// PUSHW[abc] PUSH Words
-// 0xB8-0xBF
-function PUSHW(n, state) {
-    var ip = state.ip;
-    var prog = state.prog;
-    var stack = state.stack;
-
-    if (exports.DEBUG) { console.log(state.ip, 'PUSHW[' + n + ']'); }
-
-    for (var i = 0; i < n; i++) {
-        var w = (prog[++ip] << 8) | prog[++ip];
-        if (w & 0x8000) { w = -((w ^ 0xffff) + 1); }
-        stack.push(w);
-    }
-
-    state.ip = ip;
-}
-
-// MDRP[abcde] Move Direct Relative Point
-// 0xD0-0xEF
-// (if indirect is 0)
-//
-// and
-//
-// MIRP[abcde] Move Indirect Relative Point
-// 0xE0-0xFF
-// (if indirect is 1)
-
-function MDRP_MIRP(indirect, setRp0, keepD, ro, dt, state) {
-    var stack = state.stack;
-    var cvte = indirect && stack.pop();
-    var pi = stack.pop();
-    var rp0i = state.rp0;
-    var rp = state.z0[rp0i];
-    var p = state.z1[pi];
-
-    var md = state.minDis;
-    var fv = state.fv;
-    var pv = state.dpv;
-    var od; // original distance
-    var d; // moving distance
-    var sign; // sign of distance
-    var cv;
-
-    d = od = pv.distance(p, rp, true, true);
-    sign = d >= 0 ? 1 : -1; // Math.sign would be 0 in case of 0
-
-    // TODO consider autoFlip
-    d = Math.abs(d);
-
-    if (indirect) {
-        cv = state.cvt[cvte];
-
-        if (ro && Math.abs(d - cv) < state.cvCutIn) { d = cv; }
-    }
-
-    if (keepD && d < md) { d = md; }
-
-    if (ro) { d = state.round(d); }
-
-    fv.setRelative(p, rp, sign * d, pv);
-    fv.touch(p);
-
-    if (exports.DEBUG) {
-        console.log(
-            state.step,
-            (indirect ? 'MIRP[' : 'MDRP[') +
-            (setRp0 ? 'M' : 'm') +
-            (keepD ? '>' : '_') +
-            (ro ? 'R' : '_') +
-            (dt === 0 ? 'Gr' : (dt === 1 ? 'Bl' : (dt === 2 ? 'Wh' : ''))) +
-            ']',
-            indirect ?
-                cvte + '(' + state.cvt[cvte] + ',' +  cv + ')' :
-                '',
-            pi,
-            '(d =', od, '->', sign * d, ')'
-        );
-    }
-
-    state.rp1 = state.rp0;
-    state.rp2 = pi;
-    if (setRp0) { state.rp0 = pi; }
-}
-
-/*
-* The instruction table.
-*/
-instructionTable = [
-    /* 0x00 */ SVTCA.bind(undefined, yUnitVector),
-    /* 0x01 */ SVTCA.bind(undefined, xUnitVector),
-    /* 0x02 */ SPVTCA.bind(undefined, yUnitVector),
-    /* 0x03 */ SPVTCA.bind(undefined, xUnitVector),
-    /* 0x04 */ SFVTCA.bind(undefined, yUnitVector),
-    /* 0x05 */ SFVTCA.bind(undefined, xUnitVector),
-    /* 0x06 */ SPVTL.bind(undefined, 0),
-    /* 0x07 */ SPVTL.bind(undefined, 1),
-    /* 0x08 */ SFVTL.bind(undefined, 0),
-    /* 0x09 */ SFVTL.bind(undefined, 1),
-    /* 0x0A */ SPVFS,
-    /* 0x0B */ SFVFS,
-    /* 0x0C */ GPV,
-    /* 0x0D */ GFV,
-    /* 0x0E */ SFVTPV,
-    /* 0x0F */ ISECT,
-    /* 0x10 */ SRP0,
-    /* 0x11 */ SRP1,
-    /* 0x12 */ SRP2,
-    /* 0x13 */ SZP0,
-    /* 0x14 */ SZP1,
-    /* 0x15 */ SZP2,
-    /* 0x16 */ SZPS,
-    /* 0x17 */ SLOOP,
-    /* 0x18 */ RTG,
-    /* 0x19 */ RTHG,
-    /* 0x1A */ SMD,
-    /* 0x1B */ ELSE,
-    /* 0x1C */ JMPR,
-    /* 0x1D */ SCVTCI,
-    /* 0x1E */ undefined,   // TODO SSWCI
-    /* 0x1F */ undefined,   // TODO SSW
-    /* 0x20 */ DUP,
-    /* 0x21 */ POP,
-    /* 0x22 */ CLEAR,
-    /* 0x23 */ SWAP,
-    /* 0x24 */ DEPTH,
-    /* 0x25 */ CINDEX,
-    /* 0x26 */ MINDEX,
-    /* 0x27 */ undefined,   // TODO ALIGNPTS
-    /* 0x28 */ undefined,
-    /* 0x29 */ undefined,   // TODO UTP
-    /* 0x2A */ LOOPCALL,
-    /* 0x2B */ CALL,
-    /* 0x2C */ FDEF,
-    /* 0x2D */ undefined,   // ENDF (eaten by FDEF)
-    /* 0x2E */ MDAP.bind(undefined, 0),
-    /* 0x2F */ MDAP.bind(undefined, 1),
-    /* 0x30 */ IUP.bind(undefined, yUnitVector),
-    /* 0x31 */ IUP.bind(undefined, xUnitVector),
-    /* 0x32 */ SHP.bind(undefined, 0),
-    /* 0x33 */ SHP.bind(undefined, 1),
-    /* 0x34 */ SHC.bind(undefined, 0),
-    /* 0x35 */ SHC.bind(undefined, 1),
-    /* 0x36 */ SHZ.bind(undefined, 0),
-    /* 0x37 */ SHZ.bind(undefined, 1),
-    /* 0x38 */ SHPIX,
-    /* 0x39 */ IP,
-    /* 0x3A */ MSIRP.bind(undefined, 0),
-    /* 0x3B */ MSIRP.bind(undefined, 1),
-    /* 0x3C */ ALIGNRP,
-    /* 0x3D */ RTDG,
-    /* 0x3E */ MIAP.bind(undefined, 0),
-    /* 0x3F */ MIAP.bind(undefined, 1),
-    /* 0x40 */ NPUSHB,
-    /* 0x41 */ NPUSHW,
-    /* 0x42 */ WS,
-    /* 0x43 */ RS,
-    /* 0x44 */ WCVTP,
-    /* 0x45 */ RCVT,
-    /* 0x46 */ GC.bind(undefined, 0),
-    /* 0x47 */ GC.bind(undefined, 1),
-    /* 0x48 */ undefined,   // TODO SCFS
-    /* 0x49 */ MD.bind(undefined, 0),
-    /* 0x4A */ MD.bind(undefined, 1),
-    /* 0x4B */ MPPEM,
-    /* 0x4C */ undefined,   // TODO MPS
-    /* 0x4D */ FLIPON,
-    /* 0x4E */ undefined,   // TODO FLIPOFF
-    /* 0x4F */ undefined,   // TODO DEBUG
-    /* 0x50 */ LT,
-    /* 0x51 */ LTEQ,
-    /* 0x52 */ GT,
-    /* 0x53 */ GTEQ,
-    /* 0x54 */ EQ,
-    /* 0x55 */ NEQ,
-    /* 0x56 */ ODD,
-    /* 0x57 */ EVEN,
-    /* 0x58 */ IF,
-    /* 0x59 */ EIF,
-    /* 0x5A */ AND,
-    /* 0x5B */ OR,
-    /* 0x5C */ NOT,
-    /* 0x5D */ DELTAP123.bind(undefined, 1),
-    /* 0x5E */ SDB,
-    /* 0x5F */ SDS,
-    /* 0x60 */ ADD,
-    /* 0x61 */ SUB,
-    /* 0x62 */ DIV,
-    /* 0x63 */ MUL,
-    /* 0x64 */ ABS,
-    /* 0x65 */ NEG,
-    /* 0x66 */ FLOOR,
-    /* 0x67 */ CEILING,
-    /* 0x68 */ ROUND.bind(undefined, 0),
-    /* 0x69 */ ROUND.bind(undefined, 1),
-    /* 0x6A */ ROUND.bind(undefined, 2),
-    /* 0x6B */ ROUND.bind(undefined, 3),
-    /* 0x6C */ undefined,   // TODO NROUND[ab]
-    /* 0x6D */ undefined,   // TODO NROUND[ab]
-    /* 0x6E */ undefined,   // TODO NROUND[ab]
-    /* 0x6F */ undefined,   // TODO NROUND[ab]
-    /* 0x70 */ WCVTF,
-    /* 0x71 */ DELTAP123.bind(undefined, 2),
-    /* 0x72 */ DELTAP123.bind(undefined, 3),
-    /* 0x73 */ DELTAC123.bind(undefined, 1),
-    /* 0x74 */ DELTAC123.bind(undefined, 2),
-    /* 0x75 */ DELTAC123.bind(undefined, 3),
-    /* 0x76 */ SROUND,
-    /* 0x77 */ S45ROUND,
-    /* 0x78 */ undefined,   // TODO JROT[]
-    /* 0x79 */ undefined,   // TODO JROF[]
-    /* 0x7A */ ROFF,
-    /* 0x7B */ undefined,
-    /* 0x7C */ RUTG,
-    /* 0x7D */ RDTG,
-    /* 0x7E */ POP, // actually SANGW, supposed to do only a pop though
-    /* 0x7F */ POP, // actually AA, supposed to do only a pop though
-    /* 0x80 */ undefined,   // TODO FLIPPT
-    /* 0x81 */ undefined,   // TODO FLIPRGON
-    /* 0x82 */ undefined,   // TODO FLIPRGOFF
-    /* 0x83 */ undefined,
-    /* 0x84 */ undefined,
-    /* 0x85 */ SCANCTRL,
-    /* 0x86 */ SDPVTL.bind(undefined, 0),
-    /* 0x87 */ SDPVTL.bind(undefined, 1),
-    /* 0x88 */ GETINFO,
-    /* 0x89 */ undefined,   // TODO IDEF
-    /* 0x8A */ ROLL,
-    /* 0x8B */ MAX,
-    /* 0x8C */ MIN,
-    /* 0x8D */ SCANTYPE,
-    /* 0x8E */ INSTCTRL,
-    /* 0x8F */ undefined,
-    /* 0x90 */ undefined,
-    /* 0x91 */ undefined,
-    /* 0x92 */ undefined,
-    /* 0x93 */ undefined,
-    /* 0x94 */ undefined,
-    /* 0x95 */ undefined,
-    /* 0x96 */ undefined,
-    /* 0x97 */ undefined,
-    /* 0x98 */ undefined,
-    /* 0x99 */ undefined,
-    /* 0x9A */ undefined,
-    /* 0x9B */ undefined,
-    /* 0x9C */ undefined,
-    /* 0x9D */ undefined,
-    /* 0x9E */ undefined,
-    /* 0x9F */ undefined,
-    /* 0xA0 */ undefined,
-    /* 0xA1 */ undefined,
-    /* 0xA2 */ undefined,
-    /* 0xA3 */ undefined,
-    /* 0xA4 */ undefined,
-    /* 0xA5 */ undefined,
-    /* 0xA6 */ undefined,
-    /* 0xA7 */ undefined,
-    /* 0xA8 */ undefined,
-    /* 0xA9 */ undefined,
-    /* 0xAA */ undefined,
-    /* 0xAB */ undefined,
-    /* 0xAC */ undefined,
-    /* 0xAD */ undefined,
-    /* 0xAE */ undefined,
-    /* 0xAF */ undefined,
-    /* 0xB0 */ PUSHB.bind(undefined, 1),
-    /* 0xB1 */ PUSHB.bind(undefined, 2),
-    /* 0xB2 */ PUSHB.bind(undefined, 3),
-    /* 0xB3 */ PUSHB.bind(undefined, 4),
-    /* 0xB4 */ PUSHB.bind(undefined, 5),
-    /* 0xB5 */ PUSHB.bind(undefined, 6),
-    /* 0xB6 */ PUSHB.bind(undefined, 7),
-    /* 0xB7 */ PUSHB.bind(undefined, 8),
-    /* 0xB8 */ PUSHW.bind(undefined, 1),
-    /* 0xB9 */ PUSHW.bind(undefined, 2),
-    /* 0xBA */ PUSHW.bind(undefined, 3),
-    /* 0xBB */ PUSHW.bind(undefined, 4),
-    /* 0xBC */ PUSHW.bind(undefined, 5),
-    /* 0xBD */ PUSHW.bind(undefined, 6),
-    /* 0xBE */ PUSHW.bind(undefined, 7),
-    /* 0xBF */ PUSHW.bind(undefined, 8),
-    /* 0xC0 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 0, 0),
-    /* 0xC1 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 0, 1),
-    /* 0xC2 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 0, 2),
-    /* 0xC3 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 0, 3),
-    /* 0xC4 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 1, 0),
-    /* 0xC5 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 1, 1),
-    /* 0xC6 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 1, 2),
-    /* 0xC7 */ MDRP_MIRP.bind(undefined, 0, 0, 0, 1, 3),
-    /* 0xC8 */ MDRP_MIRP.bind(undefined, 0, 0, 1, 0, 0),
-    /* 0xC9 */ MDRP_MIRP.bind(undefined, 0, 0, 1, 0, 1),
-    /* 0xCA */ MDRP_MIRP.bind(undefined, 0, 0, 1, 0, 2),
-    /* 0xCB */ MDRP_MIRP.bind(undefined, 0, 0, 1, 0, 3),
-    /* 0xCC */ MDRP_MIRP.bind(undefined, 0, 0, 1, 1, 0),
-    /* 0xCD */ MDRP_MIRP.bind(undefined, 0, 0, 1, 1, 1),
-    /* 0xCE */ MDRP_MIRP.bind(undefined, 0, 0, 1, 1, 2),
-    /* 0xCF */ MDRP_MIRP.bind(undefined, 0, 0, 1, 1, 3),
-    /* 0xD0 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 0, 0),
-    /* 0xD1 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 0, 1),
-    /* 0xD2 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 0, 2),
-    /* 0xD3 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 0, 3),
-    /* 0xD4 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 1, 0),
-    /* 0xD5 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 1, 1),
-    /* 0xD6 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 1, 2),
-    /* 0xD7 */ MDRP_MIRP.bind(undefined, 0, 1, 0, 1, 3),
-    /* 0xD8 */ MDRP_MIRP.bind(undefined, 0, 1, 1, 0, 0),
-    /* 0xD9 */ MDRP_MIRP.bind(undefined, 0, 1, 1, 0, 1),
-    /* 0xDA */ MDRP_MIRP.bind(undefined, 0, 1, 1, 0, 2),
-    /* 0xDB */ MDRP_MIRP.bind(undefined, 0, 1, 1, 0, 3),
-    /* 0xDC */ MDRP_MIRP.bind(undefined, 0, 1, 1, 1, 0),
-    /* 0xDD */ MDRP_MIRP.bind(undefined, 0, 1, 1, 1, 1),
-    /* 0xDE */ MDRP_MIRP.bind(undefined, 0, 1, 1, 1, 2),
-    /* 0xDF */ MDRP_MIRP.bind(undefined, 0, 1, 1, 1, 3),
-    /* 0xE0 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 0, 0),
-    /* 0xE1 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 0, 1),
-    /* 0xE2 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 0, 2),
-    /* 0xE3 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 0, 3),
-    /* 0xE4 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 1, 0),
-    /* 0xE5 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 1, 1),
-    /* 0xE6 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 1, 2),
-    /* 0xE7 */ MDRP_MIRP.bind(undefined, 1, 0, 0, 1, 3),
-    /* 0xE8 */ MDRP_MIRP.bind(undefined, 1, 0, 1, 0, 0),
-    /* 0xE9 */ MDRP_MIRP.bind(undefined, 1, 0, 1, 0, 1),
-    /* 0xEA */ MDRP_MIRP.bind(undefined, 1, 0, 1, 0, 2),
-    /* 0xEB */ MDRP_MIRP.bind(undefined, 1, 0, 1, 0, 3),
-    /* 0xEC */ MDRP_MIRP.bind(undefined, 1, 0, 1, 1, 0),
-    /* 0xED */ MDRP_MIRP.bind(undefined, 1, 0, 1, 1, 1),
-    /* 0xEE */ MDRP_MIRP.bind(undefined, 1, 0, 1, 1, 2),
-    /* 0xEF */ MDRP_MIRP.bind(undefined, 1, 0, 1, 1, 3),
-    /* 0xF0 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 0, 0),
-    /* 0xF1 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 0, 1),
-    /* 0xF2 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 0, 2),
-    /* 0xF3 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 0, 3),
-    /* 0xF4 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 1, 0),
-    /* 0xF5 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 1, 1),
-    /* 0xF6 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 1, 2),
-    /* 0xF7 */ MDRP_MIRP.bind(undefined, 1, 1, 0, 1, 3),
-    /* 0xF8 */ MDRP_MIRP.bind(undefined, 1, 1, 1, 0, 0),
-    /* 0xF9 */ MDRP_MIRP.bind(undefined, 1, 1, 1, 0, 1),
-    /* 0xFA */ MDRP_MIRP.bind(undefined, 1, 1, 1, 0, 2),
-    /* 0xFB */ MDRP_MIRP.bind(undefined, 1, 1, 1, 0, 3),
-    /* 0xFC */ MDRP_MIRP.bind(undefined, 1, 1, 1, 1, 0),
-    /* 0xFD */ MDRP_MIRP.bind(undefined, 1, 1, 1, 1, 1),
-    /* 0xFE */ MDRP_MIRP.bind(undefined, 1, 1, 1, 1, 2),
-    /* 0xFF */ MDRP_MIRP.bind(undefined, 1, 1, 1, 1, 3)
-];
-
-/*****************************
-  Mathematical Considerations
-******************************
-
-fv ... refers to freedom vector
-pv ... refers to projection vector
-rp ... refers to reference point
-p  ... refers to to point being operated on
-d  ... refers to distance
-
-SETRELATIVE:
-============
-
-case freedom vector == x-axis:
-------------------------------
-
-                        (pv)
-                     .-'
-              rpd .-'
-               .-*
-          d .-'90°'
-         .-'       '
-      .-'           '
-   *-'               ' b
-  rp                  '
-                       '
-                        '
-            p *----------*-------------- (fv)
-                          pm
-
-  rpdx = rpx + d * pv.x
-  rpdy = rpy + d * pv.y
-
-  equation of line b
-
-   y - rpdy = pvns * (x- rpdx)
-
-   y = p.y
-
-   x = rpdx + ( p.y - rpdy ) / pvns
-
-
-case freedom vector == y-axis:
-------------------------------
-
-    * pm
-    |\
-    | \
-    |  \
-    |   \
-    |    \
-    |     \
-    |      \
-    |       \
-    |        \
-    |         \ b
-    |          \
-    |           \
-    |            \    .-' (pv)
-    |         90° \.-'
-    |           .-'* rpd
-    |        .-'
-    *     *-'  d
-    p     rp
-
-  rpdx = rpx + d * pv.x
-  rpdy = rpy + d * pv.y
-
-  equation of line b:
-           pvns ... normal slope to pv
-
-   y - rpdy = pvns * (x - rpdx)
-
-   x = p.x
-
-   y = rpdy +  pvns * (p.x - rpdx)
-
-
-
-generic case:
--------------
-
-
-                              .'(fv)
-                            .'
-                          .* pm
-                        .' !
-                      .'    .
-                    .'      !
-                  .'         . b
-                .'           !
-               *              .
-              p               !
-                         90°   .    ... (pv)
-                           ...-*-'''
-                  ...---'''    rpd
-         ...---'''   d
-   *--'''
-  rp
-
-    rpdx = rpx + d * pv.x
-    rpdy = rpy + d * pv.y
-
- equation of line b:
-    pvns... normal slope to pv
-
-    y - rpdy = pvns * (x - rpdx)
-
- equation of freedom vector line:
-    fvs ... slope of freedom vector (=fy/fx)
-
-    y - py = fvs * (x - px)
-
-
-  on pm both equations are true for same x/y
-
-    y - rpdy = pvns * (x - rpdx)
-
-    y - py = fvs * (x - px)
-
-  form to y and set equal:
-
-    pvns * (x - rpdx) + rpdy = fvs * (x - px) + py
-
-  expand:
-
-    pvns * x - pvns * rpdx + rpdy = fvs * x - fvs * px + py
-
-  switch:
-
-    fvs * x - fvs * px + py = pvns * x - pvns * rpdx + rpdy
-
-  solve for x:
-
-    fvs * x - pvns * x = fvs * px - pvns * rpdx - py + rpdy
-
-
-
-          fvs * px - pvns * rpdx + rpdy - py
-    x =  -----------------------------------
-                 fvs - pvns
-
-  and:
-
-    y = fvs * (x - px) + py
-
-
-
-INTERPOLATE:
-============
-
-Examples of point interpolation.
-
-The weight of the movement of the reference point gets bigger
-the further the other reference point is away, thus the safest
-option (that is avoiding 0/0 divisions) is to weight the
-original distance of the other point by the sum of both distances.
-
-If the sum of both distances is 0, then move the point by the
-arithmetic average of the movement of both reference points.
-
-
-
-
-           (+6)
-    rp1o *---->*rp1
-         .     .                          (+12)
-         .     .                  rp2o *---------->* rp2
-         .     .                       .           .
-         .     .                       .           .
-         .    10          20           .           .
-         |.........|...................|           .
-               .   .                               .
-               .   . (+8)                          .
-                po *------>*p                      .
-               .           .                       .
-               .    12     .          24           .
-               |...........|.......................|
-                                  36
-
-
--------
-
-
-
-           (+10)
-    rp1o *-------->*rp1
-         .         .                      (-10)
-         .         .              rp2 *<---------* rpo2
-         .         .                   .         .
-         .         .                   .         .
-         .    10   .          30       .         .
-         |.........|.............................|
-                   .                   .
-                   . (+5)              .
-                po *--->* p            .
-                   .    .              .
-                   .    .   20         .
-                   |....|..............|
-                     5        15
-
-
--------
-
-
-           (+10)
-    rp1o *-------->*rp1
-         .         .
-         .         .
-    rp2o *-------->*rp2
-
-
-                               (+10)
-                          po *-------->* p
-
--------
-
-
-           (+10)
-    rp1o *-------->*rp1
-         .         .
-         .         .(+30)
-    rp2o *---------------------------->*rp2
-
-
-                                        (+25)
-                          po *----------------------->* p
-
-
-
-vim: set ts=4 sw=4 expandtab:
-*****/
-
-/**
- * Converts a string into a list of tokens.
- */
-
-/**
- * Create a new token
- * @param {string} char a single char
- */
-function Token(char) {
-    this.char = char;
-    this.state = {};
-    this.activeState = null;
-}
-
-/**
- * Create a new context range
- * @param {number} startIndex range start index
- * @param {number} endOffset range end index offset
- * @param {string} contextName owner context name
- */
-function ContextRange(startIndex, endOffset, contextName) {
-    this.contextName = contextName;
-    this.startIndex = startIndex;
-    this.endOffset = endOffset;
-}
-
-/**
- * Check context start and end
- * @param {string} contextName a unique context name
- * @param {function} checkStart a predicate function the indicates a context's start
- * @param {function} checkEnd a predicate function the indicates a context's end
- */
-function ContextChecker(contextName, checkStart, checkEnd) {
-    this.contextName = contextName;
-    this.openRange = null;
-    this.ranges = [];
-    this.checkStart = checkStart;
-    this.checkEnd = checkEnd;
-}
-
-/**
- * @typedef ContextParams
- * @type Object
- * @property {array} context context items
- * @property {number} currentIndex current item index
- */
-
-/**
- * Create a context params
- * @param {array} context a list of items
- * @param {number} currentIndex current item index
- */
-function ContextParams(context, currentIndex) {
-    this.context = context;
-    this.index = currentIndex;
-    this.length = context.length;
-    this.current = context[currentIndex];
-    this.backtrack = context.slice(0, currentIndex);
-    this.lookahead = context.slice(currentIndex + 1);
-}
-
-/**
- * Create an event instance
- * @param {string} eventId event unique id
- */
-function Event(eventId) {
-    this.eventId = eventId;
-    this.subscribers = [];
-}
-
-/**
- * Initialize a core events and auto subscribe required event handlers
- * @param {any} events an object that enlists core events handlers
- */
-function initializeCoreEvents(events) {
-    var this$1 = this;
-
-    var coreEvents = [
-        'start', 'end', 'next', 'newToken', 'contextStart',
-        'contextEnd', 'insertToken', 'removeToken', 'removeRange',
-        'replaceToken', 'replaceRange', 'composeRUD', 'updateContextsRanges'
-    ];
-
-    coreEvents.forEach(function (eventId) {
-        Object.defineProperty(this$1.events, eventId, {
-            value: new Event(eventId)
-        });
-    });
-
-    if (!!events) {
-        coreEvents.forEach(function (eventId) {
-            var event = events[eventId];
-            if (typeof event === 'function') {
-                this$1.events[eventId].subscribe(event);
-            }
-        });
-    }
-    var requiresContextUpdate = [
-        'insertToken', 'removeToken', 'removeRange',
-        'replaceToken', 'replaceRange', 'composeRUD'
-    ];
-    requiresContextUpdate.forEach(function (eventId) {
-        this$1.events[eventId].subscribe(
-            this$1.updateContextsRanges
-        );
-    });
-}
-
-/**
- * Converts a string into a list of tokens
- * @param {any} events tokenizer core events
- */
-function Tokenizer(events) {
-    this.tokens = [];
-    this.registeredContexts = {};
-    this.contextCheckers = [];
-    this.events = {};
-    this.registeredModifiers = [];
-
-    initializeCoreEvents.call(this, events);
-}
-
-/**
- * Sets the state of a token, usually called by a state modifier.
- * @param {string} key state item key
- * @param {any} value state item value
- */
-Token.prototype.setState = function(key, value) {
-    this.state[key] = value;
-    this.activeState = { key: key, value: this.state[key] };
-    return this.activeState;
-};
-
-Token.prototype.getState = function (stateId) {
-    return this.state[stateId] || null;
-};
-
-/**
- * Checks if an index exists in the tokens list.
- * @param {number} index token index
- */
-Tokenizer.prototype.inboundIndex = function(index) {
-    return index >= 0 && index < this.tokens.length;
-};
-
-/**
- * Compose and apply a list of operations (replace, update, delete)
- * @param {array} RUDs replace, update and delete operations
- * TODO: Perf. Optimization (lengthBefore === lengthAfter ? dispatch once)
- */
-Tokenizer.prototype.composeRUD = function (RUDs) {
-    var this$1 = this;
-
-    var silent = true;
-    var state = RUDs.map(function (RUD) { return (
-        this$1[RUD[0]].apply(this$1, RUD.slice(1).concat(silent))
-    ); });
-    var hasFAILObject = function (obj) { return (
-        typeof obj === 'object' &&
-        obj.hasOwnProperty('FAIL')
-    ); };
-    if (state.every(hasFAILObject)) {
-        return {
-            FAIL: "composeRUD: one or more operations hasn't completed successfully",
-            report: state.filter(hasFAILObject)
-        };
-    }
-    this.dispatch('composeRUD', [state.filter(function (op) { return !hasFAILObject(op); })]);
-};
-
-/**
- * Replace a range of tokens with a list of tokens
- * @param {number} startIndex range start index
- * @param {number} offset range offset
- * @param {token} tokens a list of tokens to replace
- * @param {boolean} silent dispatch events and update context ranges
- */
-Tokenizer.prototype.replaceRange = function (startIndex, offset, tokens, silent) {
-    offset = offset !== null ? offset : this.tokens.length;
-    var isTokenType = tokens.every(function (token) { return token instanceof Token; });
-    if (!isNaN(startIndex) && this.inboundIndex(startIndex) && isTokenType) {
-        var replaced = this.tokens.splice.apply(
-            this.tokens, [startIndex, offset].concat(tokens)
-        );
-        if (!silent) { this.dispatch('replaceToken', [startIndex, offset, tokens]); }
-        return [replaced, tokens];
-    } else {
-        return { FAIL: 'replaceRange: invalid tokens or startIndex.' };
-    }
-};
-
-/**
- * Replace a token with another token
- * @param {number} index token index
- * @param {token} token a token to replace
- * @param {boolean} silent dispatch events and update context ranges
- */
-Tokenizer.prototype.replaceToken = function (index, token, silent) {
-    if (!isNaN(index) && this.inboundIndex(index) && token instanceof Token) {
-        var replaced = this.tokens.splice(index, 1, token);
-        if (!silent) { this.dispatch('replaceToken', [index, token]); }
-        return [replaced[0], token];
-    } else {
-        return { FAIL: 'replaceToken: invalid token or index.' };
-    }
-};
-
-/**
- * Removes a range of tokens
- * @param {number} startIndex range start index
- * @param {number} offset range offset
- * @param {boolean} silent dispatch events and update context ranges
- */
-Tokenizer.prototype.removeRange = function(startIndex, offset, silent) {
-    offset = !isNaN(offset) ? offset : this.tokens.length;
-    var tokens = this.tokens.splice(startIndex, offset);
-    if (!silent) { this.dispatch('removeRange', [tokens, startIndex, offset]); }
-    return tokens;
-};
-
-/**
- * Remove a token at a certain index
- * @param {number} index token index
- * @param {boolean} silent dispatch events and update context ranges
- */
-Tokenizer.prototype.removeToken = function(index, silent) {
-    if (!isNaN(index) && this.inboundIndex(index)) {
-        var token = this.tokens.splice(index, 1);
-        if (!silent) { this.dispatch('removeToken', [token, index]); }
-        return token;
-    } else {
-        return { FAIL: 'removeToken: invalid token index.' };
-    }
-};
-
-/**
- * Insert a list of tokens at a certain index
- * @param {array} tokens a list of tokens to insert
- * @param {number} index insert the list of tokens at index
- * @param {boolean} silent dispatch events and update context ranges
- */
-Tokenizer.prototype.insertToken = function (tokens, index, silent) {
-    var tokenType = tokens.every(
-        function (token) { return token instanceof Token; }
-    );
-    if (tokenType) {
-        this.tokens.splice.apply(
-            this.tokens, [index, 0].concat(tokens)
-        );
-        if (!silent) { this.dispatch('insertToken', [tokens, index]); }
-        return tokens;
-    } else {
-        return { FAIL: 'insertToken: invalid token(s).' };
-    }
-};
-
-/**
- * A state modifier that is called on 'newToken' event
- * @param {string} modifierId state modifier id
- * @param {function} condition a predicate function that returns true or false
- * @param {function} modifier a function to update token state
- */
-Tokenizer.prototype.registerModifier = function(modifierId, condition, modifier) {
-    this.events.newToken.subscribe(function(token, contextParams) {
-        var conditionParams = [token, contextParams];
-        var canApplyModifier = (
-            condition === null ||
-            condition.apply(this, conditionParams) === true
-        );
-        var modifierParams = [token, contextParams];
-        if (canApplyModifier) {
-            var newStateValue = modifier.apply(this, modifierParams);
-            token.setState(modifierId, newStateValue);
-        }
-    });
-    this.registeredModifiers.push(modifierId);
-};
-
-/**
- * Subscribe a handler to an event
- * @param {function} eventHandler an event handler function
- */
-Event.prototype.subscribe = function (eventHandler) {
-    if (typeof eventHandler === 'function') {
-        return ((this.subscribers.push(eventHandler)) - 1);
-    } else {
-        return { FAIL: ("invalid '" + (this.eventId) + "' event handler")};
-    }
-};
-
-/**
- * Unsubscribe an event handler
- * @param {string} subsId subscription id
- */
-Event.prototype.unsubscribe = function (subsId) {
-    this.subscribers.splice(subsId, 1);
-};
-
-/**
- * Sets context params current value index
- * @param {number} index context params current value index
- */
-ContextParams.prototype.setCurrentIndex = function(index) {
-    this.index = index;
-    this.current = this.context[index];
-    this.backtrack = this.context.slice(0, index);
-    this.lookahead = this.context.slice(index + 1);
-};
-
-/**
- * Get an item at an offset from the current value
- * example (current value is 3):
- *  1    2   [3]   4    5   |   items values
- * -2   -1    0    1    2   |   offset values
- * @param {number} offset an offset from current value index
- */
-ContextParams.prototype.get = function (offset) {
-    switch (true) {
-        case (offset === 0):
-            return this.current;
-        case (offset < 0 && Math.abs(offset) <= this.backtrack.length):
-            return this.backtrack.slice(offset)[0];
-        case (offset > 0 && offset <= this.lookahead.length):
-            return this.lookahead[offset - 1];
-        default:
-            return null;
-    }
-};
-
-/**
- * Converts a context range into a string value
- * @param {contextRange} range a context range
- */
-Tokenizer.prototype.rangeToText = function (range) {
-    if (range instanceof ContextRange) {
-        return (
-            this.getRangeTokens(range)
-                .map(function (token) { return token.char; }).join('')
-        );
-    }
-};
-
-/**
- * Converts all tokens into a string
- */
-Tokenizer.prototype.getText = function () {
-    return this.tokens.map(function (token) { return token.char; }).join('');
-};
-
-/**
- * Get a context by name
- * @param {string} contextName context name to get
- */
-Tokenizer.prototype.getContext = function (contextName) {
-    var context = this.registeredContexts[contextName];
-    return !!context ? context : null;
-};
-
-/**
- * Subscribes a new event handler to an event
- * @param {string} eventName event name to subscribe to
- * @param {function} eventHandler a function to be invoked on event
- */
-Tokenizer.prototype.on = function(eventName, eventHandler) {
-    var event = this.events[eventName];
-    if (!!event) {
-        return event.subscribe(eventHandler);
-    } else {
-        return null;
-    }
-};
-
-/**
- * Dispatches an event
- * @param {string} eventName event name
- * @param {any} args event handler arguments
- */
-Tokenizer.prototype.dispatch = function(eventName, args) {
-    var this$1 = this;
-
-    var event = this.events[eventName];
-    if (event instanceof Event) {
-        event.subscribers.forEach(function (subscriber) {
-            subscriber.apply(this$1, args || []);
-        });
-    }
-};
-
-/**
- * Register a new context checker
- * @param {string} contextName a unique context name
- * @param {function} contextStartCheck a predicate function that returns true on context start
- * @param {function} contextEndCheck  a predicate function that returns true on context end
- * TODO: call tokenize on registration to update context ranges with the new context.
- */
-Tokenizer.prototype.registerContextChecker = function(contextName, contextStartCheck, contextEndCheck) {
-    if (!!this.getContext(contextName)) { return {
-        FAIL:
-        ("context name '" + contextName + "' is already registered.")
-    }; }
-    if (typeof contextStartCheck !== 'function') { return {
-        FAIL:
-        "missing context start check."
-    }; }
-    if (typeof contextEndCheck !== 'function') { return {
-        FAIL:
-        "missing context end check."
-    }; }
-    var contextCheckers = new ContextChecker(
-        contextName, contextStartCheck, contextEndCheck
-    );
-    this.registeredContexts[contextName] = contextCheckers;
-    this.contextCheckers.push(contextCheckers);
-    return contextCheckers;
-};
-
-/**
- * Gets a context range tokens
- * @param {contextRange} range a context range
- */
-Tokenizer.prototype.getRangeTokens = function(range) {
-    var endIndex = range.startIndex + range.endOffset;
-    return [].concat(
-        this.tokens
-            .slice(range.startIndex, endIndex)
-    );
-};
-
-/**
- * Gets the ranges of a context
- * @param {string} contextName context name
- */
-Tokenizer.prototype.getContextRanges = function(contextName) {
-    var context = this.getContext(contextName);
-    if (!!context) {
-        return context.ranges;
-    } else {
-        return { FAIL: ("context checker '" + contextName + "' is not registered.") };
-    }
-};
-
-/**
- * Resets context ranges to run context update
- */
-Tokenizer.prototype.resetContextsRanges = function () {
-    var registeredContexts = this.registeredContexts;
-    for (var contextName in registeredContexts) {
-        if (registeredContexts.hasOwnProperty(contextName)) {
-            var context = registeredContexts[contextName];
-            context.ranges = [];
-        }
-    }
-};
-
-/**
- * Updates context ranges
- */
-Tokenizer.prototype.updateContextsRanges = function () {
-    this.resetContextsRanges();
-    var chars = this.tokens.map(function (token) { return token.char; });
-    for (var i = 0; i < chars.length; i++) {
-        var contextParams = new ContextParams(chars, i);
-        this.runContextCheck(contextParams);
-    }
-    this.dispatch('updateContextsRanges', [this.registeredContexts]);
-};
-
-/**
- * Sets the end offset of an open range
- * @param {number} offset range end offset
- * @param {string} contextName context name
- */
-Tokenizer.prototype.setEndOffset = function (offset, contextName) {
-    var startIndex = this.getContext(contextName).openRange.startIndex;
-    var range = new ContextRange(startIndex, offset, contextName);
-    var ranges = this.getContext(contextName).ranges;
-    range.rangeId = contextName + "." + (ranges.length);
-    ranges.push(range);
-    this.getContext(contextName).openRange = null;
-    return range;
-};
-
-/**
- * Runs a context check on the current context
- * @param {contextParams} contextParams current context params
- */
-Tokenizer.prototype.runContextCheck = function(contextParams) {
-    var this$1 = this;
-
-    var index = contextParams.index;
-    this.contextCheckers.forEach(function (contextChecker) {
-        var contextName = contextChecker.contextName;
-        var openRange = this$1.getContext(contextName).openRange;
-        if (!openRange && contextChecker.checkStart(contextParams)) {
-            openRange = new ContextRange(index, null, contextName);
-            this$1.getContext(contextName).openRange = openRange;
-            this$1.dispatch('contextStart', [contextName, index]);
-        }
-        if (!!openRange && contextChecker.checkEnd(contextParams)) {
-            var offset = (index - openRange.startIndex) + 1;
-            var range = this$1.setEndOffset(offset, contextName);
-            this$1.dispatch('contextEnd', [contextName, range]);
-        }
-    });
-};
-
-/**
- * Converts a text into a list of tokens
- * @param {string} text a text to tokenize
- */
-Tokenizer.prototype.tokenize = function (text) {
-    this.tokens = [];
-    this.resetContextsRanges();
-    var chars = Array.from(text);
-    this.dispatch('start');
-    for (var i = 0; i < chars.length; i++) {
-        var char = chars[i];
-        var contextParams = new ContextParams(chars, i);
-        this.dispatch('next', [contextParams]);
-        this.runContextCheck(contextParams);
-        var token = new Token(char);
-        this.tokens.push(token);
-        this.dispatch('newToken', [token, contextParams]);
-    }
-    this.dispatch('end', [this.tokens]);
-    return this.tokens;
-};
-
-// ╭─┄┄┄────────────────────────┄─────────────────────────────────────────────╮
-// ┊ Character Class Assertions ┊ Checks if a char belongs to a certain class ┊
-// ╰─╾──────────────────────────┄─────────────────────────────────────────────╯
-// jscs:disable maximumLineLength
-/**
- * Check if a char is Arabic
- * @param {string} c a single char
- */
-function isArabicChar(c) {
-    return /[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(c);
-}
-
-/**
- * Check if a char is an isolated arabic char
- * @param {string} c a single char
- */
-function isIsolatedArabicChar(char) {
-    return /[\u0630\u0690\u0621\u0631\u0661\u0671\u0622\u0632\u0672\u0692\u06C2\u0623\u0673\u0693\u06C3\u0624\u0694\u06C4\u0625\u0675\u0695\u06C5\u06E5\u0676\u0696\u06C6\u0627\u0677\u0697\u06C7\u0648\u0688\u0698\u06C8\u0689\u0699\u06C9\u068A\u06CA\u066B\u068B\u06CB\u068C\u068D\u06CD\u06FD\u068E\u06EE\u06FE\u062F\u068F\u06CF\u06EF]/.test(char);
-}
-
-/**
- * Check if a char is an Arabic Tashkeel char
- * @param {string} c a single char
- */
-function isTashkeelArabicChar(char) {
-    return /[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(char);
-}
-
-/**
- * Check if a char is Latin
- * @param {string} c a single char
- */
-function isLatinChar(c) {
-    return /[A-z]/.test(c);
-}
-
-/**
- * Check if a char is whitespace char
- * @param {string} c a single char
- */
-function isWhiteSpace(c) {
-    return /\s/.test(c);
-}
-
-/**
- * Query a feature by some of it's properties to lookup a glyph substitution.
- */
-
-/**
- * Create feature query instance
- * @param {Font} font opentype font instance
- */
-function FeatureQuery(font) {
-    this.font = font;
-    this.features = {};
-}
-
-/**
- * @typedef SubstitutionAction
- * @type Object
- * @property {number} id substitution type
- * @property {string} tag feature tag
- * @property {any} substitution substitution value(s)
- */
-
-/**
- * Create a substitution action instance
- * @param {SubstitutionAction} action
- */
-function SubstitutionAction(action) {
-    this.id = action.id;
-    this.tag = action.tag;
-    this.substitution = action.substitution;
-}
-
-/**
- * Lookup a coverage table
- * @param {number} glyphIndex glyph index
- * @param {CoverageTable} coverage coverage table
- */
-function lookupCoverage(glyphIndex, coverage) {
-    if (!glyphIndex) { return -1; }
-    switch (coverage.format) {
-        case 1:
-            return coverage.glyphs.indexOf(glyphIndex);
-
-        case 2:
-            var ranges = coverage.ranges;
-            for (var i = 0; i < ranges.length; i++) {
-                var range = ranges[i];
-                if (glyphIndex >= range.start && glyphIndex <= range.end) {
-                    var offset = glyphIndex - range.start;
-                    return range.index + offset;
-                }
-            }
-            break;
-        default:
-            return -1; // not found
-    }
-    return -1;
-}
-
-/**
- * Handle a single substitution - format 1
- * @param {ContextParams} contextParams context params to lookup
- */
-function singleSubstitutionFormat1(glyphIndex, subtable) {
-    var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);
-    if (substituteIndex === -1) { return null; }
-    return glyphIndex + subtable.deltaGlyphId;
-}
-
-/**
- * Handle a single substitution - format 2
- * @param {ContextParams} contextParams context params to lookup
- */
-function singleSubstitutionFormat2(glyphIndex, subtable) {
-    var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);
-    if (substituteIndex === -1) { return null; }
-    return subtable.substitute[substituteIndex];
-}
-
-/**
- * Lookup a list of coverage tables
- * @param {any} coverageList a list of coverage tables
- * @param {ContextParams} contextParams context params to lookup
- */
-function lookupCoverageList(coverageList, contextParams) {
-    var lookupList = [];
-    for (var i = 0; i < coverageList.length; i++) {
-        var coverage = coverageList[i];
-        var glyphIndex = contextParams.current;
-        glyphIndex = Array.isArray(glyphIndex) ? glyphIndex[0] : glyphIndex;
-        var lookupIndex = lookupCoverage(glyphIndex, coverage);
-        if (lookupIndex !== -1) {
-            lookupList.push(lookupIndex);
-        }
-    }
-    if (lookupList.length !== coverageList.length) { return -1; }
-    return lookupList;
-}
-
-/**
- * Handle chaining context substitution - format 3
- * @param {ContextParams} contextParams context params to lookup
- */
-function chainingSubstitutionFormat3(contextParams, subtable) {
-    var lookupsCount = (
-        subtable.inputCoverage.length +
-        subtable.lookaheadCoverage.length +
-        subtable.backtrackCoverage.length
-    );
-    if (contextParams.context.length < lookupsCount) { return []; }
-    // INPUT LOOKUP //
-    var inputLookups = lookupCoverageList(
-        subtable.inputCoverage, contextParams
-    );
-    if (inputLookups === -1) { return []; }
-    // LOOKAHEAD LOOKUP //
-    var lookaheadOffset = subtable.inputCoverage.length - 1;
-    if (contextParams.lookahead.length < subtable.lookaheadCoverage.length) { return []; }
-    var lookaheadContext = contextParams.lookahead.slice(lookaheadOffset);
-    while (lookaheadContext.length && isTashkeelArabicChar(lookaheadContext[0].char)) {
-        lookaheadContext.shift();
-    }
-    var lookaheadParams = new ContextParams(lookaheadContext, 0);
-    var lookaheadLookups = lookupCoverageList(
-        subtable.lookaheadCoverage, lookaheadParams
-    );
-    // BACKTRACK LOOKUP //
-    var backtrackContext = [].concat(contextParams.backtrack);
-    backtrackContext.reverse();
-    while (backtrackContext.length && isTashkeelArabicChar(backtrackContext[0].char)) {
-        backtrackContext.shift();
-    }
-    if (backtrackContext.length < subtable.backtrackCoverage.length) { return []; }
-    var backtrackParams = new ContextParams(backtrackContext, 0);
-    var backtrackLookups = lookupCoverageList(
-        subtable.backtrackCoverage, backtrackParams
-    );
-    var contextRulesMatch = (
-        inputLookups.length === subtable.inputCoverage.length &&
-        lookaheadLookups.length === subtable.lookaheadCoverage.length &&
-        backtrackLookups.length === subtable.backtrackCoverage.length
-    );
-    var substitutions = [];
-    if (contextRulesMatch) {
-        for (var i = 0; i < subtable.lookupRecords.length; i++) {
-            var lookupRecord = subtable.lookupRecords[i];
-            var lookupListIndex = lookupRecord.lookupListIndex;
-            var lookupTable = this.getLookupByIndex(lookupListIndex);
-            for (var s = 0; s < lookupTable.subtables.length; s++) {
-                var subtable$1 = lookupTable.subtables[s];
-                var lookup = this.getLookupMethod(lookupTable, subtable$1);
-                var substitutionType = this.getSubstitutionType(lookupTable, subtable$1);
-                if (substitutionType === '12') {
-                    for (var n = 0; n < inputLookups.length; n++) {
-                        var glyphIndex = contextParams.get(n);
-                        var substitution = lookup(glyphIndex);
-                        if (substitution) { substitutions.push(substitution); }
-                    }
-                }
-            }
-        }
-    }
-    return substitutions;
-}
-
-/**
- * Handle ligature substitution - format 1
- * @param {ContextParams} contextParams context params to lookup
- */
-function ligatureSubstitutionFormat1(contextParams, subtable) {
-    // COVERAGE LOOKUP //
-    var glyphIndex = contextParams.current;
-    var ligSetIndex = lookupCoverage(glyphIndex, subtable.coverage);
-    if (ligSetIndex === -1) { return null; }
-    // COMPONENTS LOOKUP
-    // (!) note, components are ordered in the written direction.
-    var ligature;
-    var ligatureSet = subtable.ligatureSets[ligSetIndex];
-    for (var s = 0; s < ligatureSet.length; s++) {
-        ligature = ligatureSet[s];
-        for (var l = 0; l < ligature.components.length; l++) {
-            var lookaheadItem = contextParams.lookahead[l];
-            var component = ligature.components[l];
-            if (lookaheadItem !== component) { break; }
-            if (l === ligature.components.length - 1) { return ligature; }
-        }
-    }
-    return null;
-}
-
-/**
- * Handle decomposition substitution - format 1
- * @param {number} glyphIndex glyph index
- * @param {any} subtable subtable
- */
-function decompositionSubstitutionFormat1(glyphIndex, subtable) {
-    var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);
-    if (substituteIndex === -1) { return null; }
-    return subtable.sequences[substituteIndex];
-}
-
-/**
- * Get default script features indexes
- */
-FeatureQuery.prototype.getDefaultScriptFeaturesIndexes = function () {
-    var scripts = this.font.tables.gsub.scripts;
-    for (var s = 0; s < scripts.length; s++) {
-        var script = scripts[s];
-        if (script.tag === 'DFLT') { return (
-            script.script.defaultLangSys.featureIndexes
-        ); }
-    }
-    return [];
-};
-
-/**
- * Get feature indexes of a specific script
- * @param {string} scriptTag script tag
- */
-FeatureQuery.prototype.getScriptFeaturesIndexes = function(scriptTag) {
-    var tables = this.font.tables;
-    if (!tables.gsub) { return []; }
-    if (!scriptTag) { return this.getDefaultScriptFeaturesIndexes(); }
-    var scripts = this.font.tables.gsub.scripts;
-    for (var i = 0; i < scripts.length; i++) {
-        var script = scripts[i];
-        if (script.tag === scriptTag && script.script.defaultLangSys) {
-            return script.script.defaultLangSys.featureIndexes;
-        } else {
-            var langSysRecords = script.langSysRecords;
-            if (!!langSysRecords) {
-                for (var j = 0; j < langSysRecords.length; j++) {
-                    var langSysRecord = langSysRecords[j];
-                    if (langSysRecord.tag === scriptTag) {
-                        var langSys = langSysRecord.langSys;
-                        return langSys.featureIndexes;
-                    }
-                }
-            }
-        }
-    }
-    return this.getDefaultScriptFeaturesIndexes();
-};
-
-/**
- * Map a feature tag to a gsub feature
- * @param {any} features gsub features
- * @param {string} scriptTag script tag
- */
-FeatureQuery.prototype.mapTagsToFeatures = function (features, scriptTag) {
-    var tags = {};
-    for (var i = 0; i < features.length; i++) {
-        var tag = features[i].tag;
-        var feature = features[i].feature;
-        tags[tag] = feature;
-    }
-    this.features[scriptTag].tags = tags;
-};
-
-/**
- * Get features of a specific script
- * @param {string} scriptTag script tag
- */
-FeatureQuery.prototype.getScriptFeatures = function (scriptTag) {
-    var features = this.features[scriptTag];
-    if (this.features.hasOwnProperty(scriptTag)) { return features; }
-    var featuresIndexes = this.getScriptFeaturesIndexes(scriptTag);
-    if (!featuresIndexes) { return null; }
-    var gsub = this.font.tables.gsub;
-    features = featuresIndexes.map(function (index) { return gsub.features[index]; });
-    this.features[scriptTag] = features;
-    this.mapTagsToFeatures(features, scriptTag);
-    return features;
-};
-
-/**
- * Get substitution type
- * @param {any} lookupTable lookup table
- * @param {any} subtable subtable
- */
-FeatureQuery.prototype.getSubstitutionType = function(lookupTable, subtable) {
-    var lookupType = lookupTable.lookupType.toString();
-    var substFormat = subtable.substFormat.toString();
-    return lookupType + substFormat;
-};
-
-/**
- * Get lookup method
- * @param {any} lookupTable lookup table
- * @param {any} subtable subtable
- */
-FeatureQuery.prototype.getLookupMethod = function(lookupTable, subtable) {
-    var this$1 = this;
-
-    var substitutionType = this.getSubstitutionType(lookupTable, subtable);
-    switch (substitutionType) {
-        case '11':
-            return function (glyphIndex) { return singleSubstitutionFormat1.apply(
-                this$1, [glyphIndex, subtable]
-            ); };
-        case '12':
-            return function (glyphIndex) { return singleSubstitutionFormat2.apply(
-                this$1, [glyphIndex, subtable]
-            ); };
-        case '63':
-            return function (contextParams) { return chainingSubstitutionFormat3.apply(
-                this$1, [contextParams, subtable]
-            ); };
-        case '41':
-            return function (contextParams) { return ligatureSubstitutionFormat1.apply(
-                this$1, [contextParams, subtable]
-            ); };
-        case '21':
-            return function (glyphIndex) { return decompositionSubstitutionFormat1.apply(
-                this$1, [glyphIndex, subtable]
-            ); };
-        default:
-            throw new Error(
-                "lookupType: " + (lookupTable.lookupType) + " - " +
-                "substFormat: " + (subtable.substFormat) + " " +
-                "is not yet supported"
-            );
-    }
-};
-
-/**
- * [ LOOKUP TYPES ]
- * -------------------------------
- * Single                        1;
- * Multiple                      2;
- * Alternate                     3;
- * Ligature                      4;
- * Context                       5;
- * ChainingContext               6;
- * ExtensionSubstitution         7;
- * ReverseChainingContext        8;
- * -------------------------------
- *
- */
-
-/**
- * @typedef FQuery
- * @type Object
- * @param {string} tag feature tag
- * @param {string} script feature script
- * @param {ContextParams} contextParams context params
- */
-
-/**
- * Lookup a feature using a query parameters
- * @param {FQuery} query feature query
- */
-FeatureQuery.prototype.lookupFeature = function (query) {
-    var contextParams = query.contextParams;
-    var currentIndex = contextParams.index;
-    var feature = this.getFeature({
-        tag: query.tag, script: query.script
-    });
-    if (!feature) { return new Error(
-        "font '" + (this.font.names.fullName.en) + "' " +
-        "doesn't support feature '" + (query.tag) + "' " +
-        "for script '" + (query.script) + "'."
-    ); }
-    var lookups = this.getFeatureLookups(feature);
-    var substitutions = [].concat(contextParams.context);
-    for (var l = 0; l < lookups.length; l++) {
-        var lookupTable = lookups[l];
-        var subtables = this.getLookupSubtables(lookupTable);
-        for (var s = 0; s < subtables.length; s++) {
-            var subtable = subtables[s];
-            var substType = this.getSubstitutionType(lookupTable, subtable);
-            var lookup = this.getLookupMethod(lookupTable, subtable);
-            var substitution = (void 0);
-            switch (substType) {
-                case '11':
-                    substitution = lookup(contextParams.current);
-                    if (substitution) {
-                        substitutions.splice(currentIndex, 1, new SubstitutionAction({
-                            id: 11, tag: query.tag, substitution: substitution
-                        }));
-                    }
-                    break;
-                case '12':
-                    substitution = lookup(contextParams.current);
-                    if (substitution) {
-                        substitutions.splice(currentIndex, 1, new SubstitutionAction({
-                            id: 12, tag: query.tag, substitution: substitution
-                        }));
-                    }
-                    break;
-                case '63':
-                    substitution = lookup(contextParams);
-                    if (Array.isArray(substitution) && substitution.length) {
-                        substitutions.splice(currentIndex, 1, new SubstitutionAction({
-                            id: 63, tag: query.tag, substitution: substitution
-                        }));
-                    }
-                    break;
-                case '41':
-                    substitution = lookup(contextParams);
-                    if (substitution) {
-                        substitutions.splice(currentIndex, 1, new SubstitutionAction({
-                            id: 41, tag: query.tag, substitution: substitution
-                        }));
-                    }
-                    break;
-                case '21':
-                    substitution = lookup(contextParams.current);
-                    if (substitution) {
-                        substitutions.splice(currentIndex, 1, new SubstitutionAction({
-                            id: 21, tag: query.tag, substitution: substitution
-                        }));
-                    }
-                    break;
-            }
-            contextParams = new ContextParams(substitutions, currentIndex);
-            if (Array.isArray(substitution) && !substitution.length) { continue; }
-            substitution = null;
-        }
-    }
-    return substitutions.length ? substitutions : null;
-};
-
-/**
- * Checks if a font supports a specific features
- * @param {FQuery} query feature query object
- */
-FeatureQuery.prototype.supports = function (query) {
-    if (!query.script) { return false; }
-    this.getScriptFeatures(query.script);
-    var supportedScript = this.features.hasOwnProperty(query.script);
-    if (!query.tag) { return supportedScript; }
-    var supportedFeature = (
-        this.features[query.script].some(function (feature) { return feature.tag === query.tag; })
-    );
-    return supportedScript && supportedFeature;
-};
-
-/**
- * Get lookup table subtables
- * @param {any} lookupTable lookup table
- */
-FeatureQuery.prototype.getLookupSubtables = function (lookupTable) {
-    return lookupTable.subtables || null;
-};
-
-/**
- * Get lookup table by index
- * @param {number} index lookup table index
- */
-FeatureQuery.prototype.getLookupByIndex = function (index) {
-    var lookups = this.font.tables.gsub.lookups;
-    return lookups[index] || null;
-};
-
-/**
- * Get lookup tables for a feature
- * @param {string} feature
- */
-FeatureQuery.prototype.getFeatureLookups = function (feature) {
-    // TODO: memoize
-    return feature.lookupListIndexes.map(this.getLookupByIndex.bind(this));
-};
-
-/**
- * Query a feature by it's properties
- * @param {any} query an object that describes the properties of a query
- */
-FeatureQuery.prototype.getFeature = function getFeature(query) {
-    if (!this.font) { return { FAIL: "No font was found"}; }
-    if (!this.features.hasOwnProperty(query.script)) {
-        this.getScriptFeatures(query.script);
-    }
-    var scriptFeatures = this.features[query.script];
-    if (!scriptFeatures) { return (
-        { FAIL: ("No feature for script " + (query.script))}
-    ); }
-    if (!scriptFeatures.tags[query.tag]) { return null; }
-    return this.features[query.script].tags[query.tag];
-};
-
-/**
- * Arabic word context checkers
- */
-
-function arabicWordStartCheck(contextParams) {
-    var char = contextParams.current;
-    var prevChar = contextParams.get(-1);
-    return (
-        // ? arabic first char
-        (prevChar === null && isArabicChar(char)) ||
-        // ? arabic char preceded with a non arabic char
-        (!isArabicChar(prevChar) && isArabicChar(char))
-    );
-}
-
-function arabicWordEndCheck(contextParams) {
-    var nextChar = contextParams.get(1);
-    return (
-        // ? last arabic char
-        (nextChar === null) ||
-        // ? next char is not arabic
-        (!isArabicChar(nextChar))
-    );
-}
-
-var arabicWordCheck = {
-    startCheck: arabicWordStartCheck,
-    endCheck: arabicWordEndCheck
-};
-
-/**
- * Arabic sentence context checkers
- */
-
-function arabicSentenceStartCheck(contextParams) {
-    var char = contextParams.current;
-    var prevChar = contextParams.get(-1);
-    return (
-        // ? an arabic char preceded with a non arabic char
-        (isArabicChar(char) || isTashkeelArabicChar(char)) &&
-        !isArabicChar(prevChar)
-    );
-}
-
-function arabicSentenceEndCheck(contextParams) {
-    var nextChar = contextParams.get(1);
-    switch (true) {
-        case nextChar === null:
-            return true;
-        case (!isArabicChar(nextChar) && !isTashkeelArabicChar(nextChar)):
-            var nextIsWhitespace = isWhiteSpace(nextChar);
-            if (!nextIsWhitespace) { return true; }
-            if (nextIsWhitespace) {
-                var arabicCharAhead = false;
-                arabicCharAhead = (
-                    contextParams.lookahead.some(
-                        function (c) { return isArabicChar(c) || isTashkeelArabicChar(c); }
-                    )
-                );
-                if (!arabicCharAhead) { return true; }
-            }
-            break;
-        default:
-            return false;
-    }
-}
-
-var arabicSentenceCheck = {
-    startCheck: arabicSentenceStartCheck,
-    endCheck: arabicSentenceEndCheck
-};
-
-/**
- * Apply single substitution format 1
- * @param {Array} substitutions substitutions
- * @param {any} tokens a list of tokens
- * @param {number} index token index
- */
-function singleSubstitutionFormat1$1(action, tokens, index) {
-    tokens[index].setState(action.tag, action.substitution);
-}
-
-/**
- * Apply single substitution format 2
- * @param {Array} substitutions substitutions
- * @param {any} tokens a list of tokens
- * @param {number} index token index
- */
-function singleSubstitutionFormat2$1(action, tokens, index) {
-    tokens[index].setState(action.tag, action.substitution);
-}
-
-/**
- * Apply chaining context substitution format 3
- * @param {Array} substitutions substitutions
- * @param {any} tokens a list of tokens
- * @param {number} index token index
- */
-function chainingSubstitutionFormat3$1(action, tokens, index) {
-    action.substitution.forEach(function (subst, offset) {
-        var token = tokens[index + offset];
-        token.setState(action.tag, subst);
-    });
-}
-
-/**
- * Apply ligature substitution format 1
- * @param {Array} substitutions substitutions
- * @param {any} tokens a list of tokens
- * @param {number} index token index
- */
-function ligatureSubstitutionFormat1$1(action, tokens, index) {
-    var token = tokens[index];
-    token.setState(action.tag, action.substitution.ligGlyph);
-    var compsCount = action.substitution.components.length;
-    for (var i = 0; i < compsCount; i++) {
-        token = tokens[index + i + 1];
-        token.setState('deleted', true);
-    }
-}
-
-/**
- * Supported substitutions
- */
-var SUBSTITUTIONS = {
-    11: singleSubstitutionFormat1$1,
-    12: singleSubstitutionFormat2$1,
-    63: chainingSubstitutionFormat3$1,
-    41: ligatureSubstitutionFormat1$1
-};
-
-/**
- * Apply substitutions to a list of tokens
- * @param {Array} substitutions substitutions
- * @param {any} tokens a list of tokens
- * @param {number} index token index
- */
-function applySubstitution(action, tokens, index) {
-    if (action instanceof SubstitutionAction && SUBSTITUTIONS[action.id]) {
-        SUBSTITUTIONS[action.id](action, tokens, index);
-    }
-}
-
-/**
- * Apply Arabic presentation forms to a range of tokens
- */
-
-/**
- * Check if a char can be connected to it's preceding char
- * @param {ContextParams} charContextParams context params of a char
- */
-function willConnectPrev(charContextParams) {
-    var backtrack = [].concat(charContextParams.backtrack);
-    for (var i = backtrack.length - 1; i >= 0; i--) {
-        var prevChar = backtrack[i];
-        var isolated = isIsolatedArabicChar(prevChar);
-        var tashkeel = isTashkeelArabicChar(prevChar);
-        if (!isolated && !tashkeel) { return true; }
-        if (isolated) { return false; }
-    }
-    return false;
-}
-
-/**
- * Check if a char can be connected to it's proceeding char
- * @param {ContextParams} charContextParams context params of a char
- */
-function willConnectNext(charContextParams) {
-    if (isIsolatedArabicChar(charContextParams.current)) { return false; }
-    for (var i = 0; i < charContextParams.lookahead.length; i++) {
-        var nextChar = charContextParams.lookahead[i];
-        var tashkeel = isTashkeelArabicChar(nextChar);
-        if (!tashkeel) { return true; }
-    }
-    return false;
-}
-
-/**
- * Apply arabic presentation forms to a list of tokens
- * @param {ContextRange} range a range of tokens
- */
-function arabicPresentationForms(range) {
-    var this$1 = this;
-
-    var script = 'arab';
-    var tags = this.featuresTags[script];
-    var tokens = this.tokenizer.getRangeTokens(range);
-    if (tokens.length === 1) { return; }
-    var contextParams = new ContextParams(
-        tokens.map(function (token) { return token.getState('glyphIndex'); }
-    ), 0);
-    var charContextParams = new ContextParams(
-        tokens.map(function (token) { return token.char; }
-    ), 0);
-    tokens.forEach(function (token, index) {
-        if (isTashkeelArabicChar(token.char)) { return; }
-        contextParams.setCurrentIndex(index);
-        charContextParams.setCurrentIndex(index);
-        var CONNECT = 0; // 2 bits 00 (10: can connect next) (01: can connect prev)
-        if (willConnectPrev(charContextParams)) { CONNECT |= 1; }
-        if (willConnectNext(charContextParams)) { CONNECT |= 2; }
-        var tag;
-        switch (CONNECT) {
-            case 1: (tag = 'fina'); break;
-            case 2: (tag = 'init'); break;
-            case 3: (tag = 'medi'); break;
-        }
-        if (tags.indexOf(tag) === -1) { return; }
-        var substitutions = this$1.query.lookupFeature({
-            tag: tag, script: script, contextParams: contextParams
-        });
-        if (substitutions instanceof Error) { return console.info(substitutions.message); }
-        substitutions.forEach(function (action, index) {
-            if (action instanceof SubstitutionAction) {
-                applySubstitution(action, tokens, index);
-                contextParams.context[index] = action.substitution;
-            }
-        });
-    });
-}
-
-/**
- * Apply Arabic required ligatures feature to a range of tokens
- */
-
-/**
- * Update context params
- * @param {any} tokens a list of tokens
- * @param {number} index current item index
- */
-function getContextParams(tokens, index) {
-    var context = tokens.map(function (token) { return token.activeState.value; });
-    return new ContextParams(context, index || 0);
-}
-
-/**
- * Apply Arabic required ligatures to a context range
- * @param {ContextRange} range a range of tokens
- */
-function arabicRequiredLigatures(range) {
-    var this$1 = this;
-
-    var script = 'arab';
-    var tokens = this.tokenizer.getRangeTokens(range);
-    var contextParams = getContextParams(tokens);
-    contextParams.context.forEach(function (glyphIndex, index) {
-        contextParams.setCurrentIndex(index);
-        var substitutions = this$1.query.lookupFeature({
-            tag: 'rlig', script: script, contextParams: contextParams
-        });
-        if (substitutions.length) {
-            substitutions.forEach(
-                function (action) { return applySubstitution(action, tokens, index); }
-            );
-            contextParams = getContextParams(tokens);
-        }
-    });
-}
-
-/**
- * Latin word context checkers
- */
-
-function latinWordStartCheck(contextParams) {
-    var char = contextParams.current;
-    var prevChar = contextParams.get(-1);
-    return (
-        // ? latin first char
-        (prevChar === null && isLatinChar(char)) ||
-        // ? latin char preceded with a non latin char
-        (!isLatinChar(prevChar) && isLatinChar(char))
-    );
-}
-
-function latinWordEndCheck(contextParams) {
-    var nextChar = contextParams.get(1);
-    return (
-        // ? last latin char
-        (nextChar === null) ||
-        // ? next char is not latin
-        (!isLatinChar(nextChar))
-    );
-}
-
-var latinWordCheck = {
-    startCheck: latinWordStartCheck,
-    endCheck: latinWordEndCheck
-};
-
-/**
- * Apply Latin ligature feature to a range of tokens
- */
-
-/**
- * Update context params
- * @param {any} tokens a list of tokens
- * @param {number} index current item index
- */
-function getContextParams$1(tokens, index) {
-    var context = tokens.map(function (token) { return token.activeState.value; });
-    return new ContextParams(context, index || 0);
-}
-
-/**
- * Apply Arabic required ligatures to a context range
- * @param {ContextRange} range a range of tokens
- */
-function latinLigature(range) {
-    var this$1 = this;
-
-    var script = 'latn';
-    var tokens = this.tokenizer.getRangeTokens(range);
-    var contextParams = getContextParams$1(tokens);
-    contextParams.context.forEach(function (glyphIndex, index) {
-        contextParams.setCurrentIndex(index);
-        var substitutions = this$1.query.lookupFeature({
-            tag: 'liga', script: script, contextParams: contextParams
-        });
-        if (substitutions.length) {
-            substitutions.forEach(
-                function (action) { return applySubstitution(action, tokens, index); }
-            );
-            contextParams = getContextParams$1(tokens);
-        }
-    });
-}
-
-/**
- * Infer bidirectional properties for a given text and apply
- * the corresponding layout rules.
- */
-
-/**
- * Create Bidi. features
- * @param {string} baseDir text base direction. value either 'ltr' or 'rtl'
- */
-function Bidi(baseDir) {
-    this.baseDir = baseDir || 'ltr';
-    this.tokenizer = new Tokenizer();
-    this.featuresTags = {};
-}
-
-/**
- * Sets Bidi text
- * @param {string} text a text input
- */
-Bidi.prototype.setText = function (text) {
-    this.text = text;
-};
-
-/**
- * Store essential context checks:
- * arabic word check for applying gsub features
- * arabic sentence check for adjusting arabic layout
- */
-Bidi.prototype.contextChecks = ({
-    latinWordCheck: latinWordCheck,
-    arabicWordCheck: arabicWordCheck,
-    arabicSentenceCheck: arabicSentenceCheck
-});
-
-/**
- * Register arabic word check
- */
-function registerContextChecker(checkId) {
-    var check = this.contextChecks[(checkId + "Check")];
-    return this.tokenizer.registerContextChecker(
-        checkId, check.startCheck, check.endCheck
-    );
-}
-
-/**
- * Perform pre tokenization procedure then
- * tokenize text input
- */
-function tokenizeText() {
-    registerContextChecker.call(this, 'latinWord');
-    registerContextChecker.call(this, 'arabicWord');
-    registerContextChecker.call(this, 'arabicSentence');
-    return this.tokenizer.tokenize(this.text);
-}
-
-/**
- * Reverse arabic sentence layout
- * TODO: check base dir before applying adjustments - priority low
- */
-function reverseArabicSentences() {
-    var this$1 = this;
-
-    var ranges = this.tokenizer.getContextRanges('arabicSentence');
-    ranges.forEach(function (range) {
-        var rangeTokens = this$1.tokenizer.getRangeTokens(range);
-        this$1.tokenizer.replaceRange(
-            range.startIndex,
-            range.endOffset,
-            rangeTokens.reverse()
-        );
-    });
-}
-
-/**
- * Register supported features tags
- * @param {script} script script tag
- * @param {Array} tags features tags list
- */
-Bidi.prototype.registerFeatures = function (script, tags) {
-    var this$1 = this;
-
-    var supportedTags = tags.filter(
-        function (tag) { return this$1.query.supports({script: script, tag: tag}); }
-    );
-    if (!this.featuresTags.hasOwnProperty(script)) {
-        this.featuresTags[script] = supportedTags;
-    } else {
-        this.featuresTags[script] =
-        this.featuresTags[script].concat(supportedTags);
-    }
-};
-
-/**
- * Apply GSUB features
- * @param {Array} tagsList a list of features tags
- * @param {string} script a script tag
- * @param {Font} font opentype font instance
- */
-Bidi.prototype.applyFeatures = function (font, features) {
-    if (!font) { throw new Error(
-        'No valid font was provided to apply features'
-    ); }
-    if (!this.query) { this.query = new FeatureQuery(font); }
-    for (var f = 0; f < features.length; f++) {
-        var feature = features[f];
-        if (!this.query.supports({script: feature.script})) { continue; }
-        this.registerFeatures(feature.script, feature.tags);
-    }
-};
-
-/**
- * Register a state modifier
- * @param {string} modifierId state modifier id
- * @param {function} condition a predicate function that returns true or false
- * @param {function} modifier a modifier function to set token state
- */
-Bidi.prototype.registerModifier = function (modifierId, condition, modifier) {
-    this.tokenizer.registerModifier(modifierId, condition, modifier);
-};
-
-/**
- * Check if 'glyphIndex' is registered
- */
-function checkGlyphIndexStatus() {
-    if (this.tokenizer.registeredModifiers.indexOf('glyphIndex') === -1) {
-        throw new Error(
-            'glyphIndex modifier is required to apply ' +
-            'arabic presentation features.'
-        );
-    }
-}
-
-/**
- * Apply arabic presentation forms features
- */
-function applyArabicPresentationForms() {
-    var this$1 = this;
-
-    var script = 'arab';
-    if (!this.featuresTags.hasOwnProperty(script)) { return; }
-    checkGlyphIndexStatus.call(this);
-    var ranges = this.tokenizer.getContextRanges('arabicWord');
-    ranges.forEach(function (range) {
-        arabicPresentationForms.call(this$1, range);
-    });
-}
-
-/**
- * Apply required arabic ligatures
- */
-function applyArabicRequireLigatures() {
-    var this$1 = this;
-
-    var script = 'arab';
-    if (!this.featuresTags.hasOwnProperty(script)) { return; }
-    var tags = this.featuresTags[script];
-    if (tags.indexOf('rlig') === -1) { return; }
-    checkGlyphIndexStatus.call(this);
-    var ranges = this.tokenizer.getContextRanges('arabicWord');
-    ranges.forEach(function (range) {
-        arabicRequiredLigatures.call(this$1, range);
-    });
-}
-
-/**
- * Apply required arabic ligatures
- */
-function applyLatinLigatures() {
-    var this$1 = this;
-
-    var script = 'latn';
-    if (!this.featuresTags.hasOwnProperty(script)) { return; }
-    var tags = this.featuresTags[script];
-    if (tags.indexOf('liga') === -1) { return; }
-    checkGlyphIndexStatus.call(this);
-    var ranges = this.tokenizer.getContextRanges('latinWord');
-    ranges.forEach(function (range) {
-        latinLigature.call(this$1, range);
-    });
-}
-
-/**
- * Check if a context is registered
- * @param {string} contextId context id
- */
-Bidi.prototype.checkContextReady = function (contextId) {
-    return !!this.tokenizer.getContext(contextId);
-};
-
-/**
- * Apply features to registered contexts
- */
-Bidi.prototype.applyFeaturesToContexts = function () {
-    if (this.checkContextReady('arabicWord')) {
-        applyArabicPresentationForms.call(this);
-        applyArabicRequireLigatures.call(this);
-    }
-    if (this.checkContextReady('latinWord')) {
-        applyLatinLigatures.call(this);
-    }
-    if (this.checkContextReady('arabicSentence')) {
-        reverseArabicSentences.call(this);
-    }
-};
-
-/**
- * process text input
- * @param {string} text an input text
- */
-Bidi.prototype.processText = function(text) {
-    if (!this.text || this.text !== text) {
-        this.setText(text);
-        tokenizeText.call(this);
-        this.applyFeaturesToContexts();
-    }
-};
-
-/**
- * Process a string of text to identify and adjust
- * bidirectional text entities.
- * @param {string} text input text
- */
-Bidi.prototype.getBidiText = function (text) {
-    this.processText(text);
-    return this.tokenizer.getText();
-};
-
-/**
- * Get the current state index of each token
- * @param {text} text an input text
- */
-Bidi.prototype.getTextGlyphs = function (text) {
-    this.processText(text);
-    var indexes = [];
-    for (var i = 0; i < this.tokenizer.tokens.length; i++) {
-        var token = this.tokenizer.tokens[i];
-        if (token.state.deleted) { continue; }
-        var index = token.activeState.value;
-        indexes.push(Array.isArray(index) ? index[0] : index);
-    }
-    return indexes;
-};
-
-// The Font object
-
-/**
- * @typedef FontOptions
- * @type Object
- * @property {Boolean} empty - whether to create a new empty font
- * @property {string} familyName
- * @property {string} styleName
- * @property {string=} fullName
- * @property {string=} postScriptName
- * @property {string=} designer
- * @property {string=} designerURL
- * @property {string=} manufacturer
- * @property {string=} manufacturerURL
- * @property {string=} license
- * @property {string=} licenseURL
- * @property {string=} version
- * @property {string=} description
- * @property {string=} copyright
- * @property {string=} trademark
- * @property {Number} unitsPerEm
- * @property {Number} ascender
- * @property {Number} descender
- * @property {Number} createdTimestamp
- * @property {string=} weightClass
- * @property {string=} widthClass
- * @property {string=} fsSelection
- */
-
-/**
- * A Font represents a loaded OpenType font file.
- * It contains a set of glyphs and methods to draw text on a drawing context,
- * or to get a path representing the text.
- * @exports opentype.Font
- * @class
- * @param {FontOptions}
- * @constructor
- */
-function opentype_module_Font(options) {
-    options = options || {};
-    options.tables = options.tables || {};
-
-    if (!options.empty) {
-        // Check that we've provided the minimum set of names.
-        checkArgument(options.familyName, 'When creating a new Font object, familyName is required.');
-        checkArgument(options.styleName, 'When creating a new Font object, styleName is required.');
-        checkArgument(options.unitsPerEm, 'When creating a new Font object, unitsPerEm is required.');
-        checkArgument(options.ascender, 'When creating a new Font object, ascender is required.');
-        checkArgument(options.descender <= 0, 'When creating a new Font object, negative descender value is required.');
-
-        // OS X will complain if the names are empty, so we put a single space everywhere by default.
-        this.names = {
-            fontFamily: {en: options.familyName || ' '},
-            fontSubfamily: {en: options.styleName || ' '},
-            fullName: {en: options.fullName || options.familyName + ' ' + options.styleName},
-            // postScriptName may not contain any whitespace
-            postScriptName: {en: options.postScriptName || (options.familyName + options.styleName).replace(/\s/g, '')},
-            designer: {en: options.designer || ' '},
-            designerURL: {en: options.designerURL || ' '},
-            manufacturer: {en: options.manufacturer || ' '},
-            manufacturerURL: {en: options.manufacturerURL || ' '},
-            license: {en: options.license || ' '},
-            licenseURL: {en: options.licenseURL || ' '},
-            version: {en: options.version || 'Version 0.1'},
-            description: {en: options.description || ' '},
-            copyright: {en: options.copyright || ' '},
-            trademark: {en: options.trademark || ' '}
-        };
-        this.unitsPerEm = options.unitsPerEm || 1000;
-        this.ascender = options.ascender;
-        this.descender = options.descender;
-        this.createdTimestamp = options.createdTimestamp;
-        this.tables = Object.assign(options.tables, {
-            os2: Object.assign({
-                usWeightClass: options.weightClass || this.usWeightClasses.MEDIUM,
-                usWidthClass: options.widthClass || this.usWidthClasses.MEDIUM,
-                fsSelection: options.fsSelection || this.fsSelectionValues.REGULAR,
-            }, options.tables.os2)
-        });
-    }
-
-    this.supported = true; // Deprecated: parseBuffer will throw an error if font is not supported.
-    this.glyphs = new glyphset.GlyphSet(this, options.glyphs || []);
-    this.encoding = new DefaultEncoding(this);
-    this.position = new Position(this);
-    this.substitution = new Substitution(this);
-    this.tables = this.tables || {};
-
-    // needed for low memory mode only.
-    this._push = null;
-    this._hmtxTableData = {};
-
-    Object.defineProperty(this, 'hinting', {
-        get: function() {
-            if (this._hinting) { return this._hinting; }
-            if (this.outlinesFormat === 'truetype') {
-                return (this._hinting = new Hinting(this));
-            }
-        }
-    });
-}
-
-/**
- * Check if the font has a glyph for the given character.
- * @param  {string}
- * @return {Boolean}
- */
-opentype_module_Font.prototype.hasChar = function(c) {
-    return this.encoding.charToGlyphIndex(c) !== null;
-};
-
-/**
- * Convert the given character to a single glyph index.
- * Note that this function assumes that there is a one-to-one mapping between
- * the given character and a glyph; for complex scripts this might not be the case.
- * @param  {string}
- * @return {Number}
- */
-opentype_module_Font.prototype.charToGlyphIndex = function(s) {
-    return this.encoding.charToGlyphIndex(s);
-};
-
-/**
- * Convert the given character to a single Glyph object.
- * Note that this function assumes that there is a one-to-one mapping between
- * the given character and a glyph; for complex scripts this might not be the case.
- * @param  {string}
- * @return {opentype.Glyph}
- */
-opentype_module_Font.prototype.charToGlyph = function(c) {
-    var glyphIndex = this.charToGlyphIndex(c);
-    var glyph = this.glyphs.get(glyphIndex);
-    if (!glyph) {
-        // .notdef
-        glyph = this.glyphs.get(0);
-    }
-
-    return glyph;
-};
-
-/**
- * Update features
- * @param {any} options features options
- */
-opentype_module_Font.prototype.updateFeatures = function (options) {
-    // TODO: update all features options not only 'latn'.
-    return this.defaultRenderOptions.features.map(function (feature) {
-        if (feature.script === 'latn') {
-            return {
-                script: 'latn',
-                tags: feature.tags.filter(function (tag) { return options[tag]; })
-            };
-        } else {
-            return feature;
-        }
-    });
-};
-
-/**
- * Convert the given text to a list of Glyph objects.
- * Note that there is no strict one-to-one mapping between characters and
- * glyphs, so the list of returned glyphs can be larger or smaller than the
- * length of the given string.
- * @param  {string}
- * @param  {GlyphRenderOptions} [options]
- * @return {opentype.Glyph[]}
- */
-opentype_module_Font.prototype.stringToGlyphs = function(s, options) {
-    var this$1 = this;
-
-
-    var bidi = new Bidi();
-
-    // Create and register 'glyphIndex' state modifier
-    var charToGlyphIndexMod = function (token) { return this$1.charToGlyphIndex(token.char); };
-    bidi.registerModifier('glyphIndex', null, charToGlyphIndexMod);
-
-    // roll-back to default features
-    var features = options ?
-    this.updateFeatures(options.features) :
-    this.defaultRenderOptions.features;
-
-    bidi.applyFeatures(this, features);
-
-    var indexes = bidi.getTextGlyphs(s);
-
-    var length = indexes.length;
-
-    // convert glyph indexes to glyph objects
-    var glyphs = new Array(length);
-    var notdef = this.glyphs.get(0);
-    for (var i = 0; i < length; i += 1) {
-        glyphs[i] = this.glyphs.get(indexes[i]) || notdef;
-    }
-    return glyphs;
-};
-
-/**
- * @param  {string}
- * @return {Number}
- */
-opentype_module_Font.prototype.nameToGlyphIndex = function(name) {
-    return this.glyphNames.nameToGlyphIndex(name);
-};
-
-/**
- * @param  {string}
- * @return {opentype.Glyph}
- */
-opentype_module_Font.prototype.nameToGlyph = function(name) {
-    var glyphIndex = this.nameToGlyphIndex(name);
-    var glyph = this.glyphs.get(glyphIndex);
-    if (!glyph) {
-        // .notdef
-        glyph = this.glyphs.get(0);
-    }
-
-    return glyph;
-};
-
-/**
- * @param  {Number}
- * @return {String}
- */
-opentype_module_Font.prototype.glyphIndexToName = function(gid) {
-    if (!this.glyphNames.glyphIndexToName) {
-        return '';
-    }
-
-    return this.glyphNames.glyphIndexToName(gid);
-};
-
-/**
- * Retrieve the value of the kerning pair between the left glyph (or its index)
- * and the right glyph (or its index). If no kerning pair is found, return 0.
- * The kerning value gets added to the advance width when calculating the spacing
- * between glyphs.
- * For GPOS kerning, this method uses the default script and language, which covers
- * most use cases. To have greater control, use font.position.getKerningValue .
- * @param  {opentype.Glyph} leftGlyph
- * @param  {opentype.Glyph} rightGlyph
- * @return {Number}
- */
-opentype_module_Font.prototype.getKerningValue = function(leftGlyph, rightGlyph) {
-    leftGlyph = leftGlyph.index || leftGlyph;
-    rightGlyph = rightGlyph.index || rightGlyph;
-    var gposKerning = this.position.defaultKerningTables;
-    if (gposKerning) {
-        return this.position.getKerningValue(gposKerning, leftGlyph, rightGlyph);
-    }
-    // "kern" table
-    return this.kerningPairs[leftGlyph + ',' + rightGlyph] || 0;
-};
-
-/**
- * @typedef GlyphRenderOptions
- * @type Object
- * @property {string} [script] - script used to determine which features to apply. By default, 'DFLT' or 'latn' is used.
- *                               See https://www.microsoft.com/typography/otspec/scripttags.htm
- * @property {string} [language='dflt'] - language system used to determine which features to apply.
- *                                        See https://www.microsoft.com/typography/developers/opentype/languagetags.aspx
- * @property {boolean} [kerning=true] - whether to include kerning values
- * @property {object} [features] - OpenType Layout feature tags. Used to enable or disable the features of the given script/language system.
- *                                 See https://www.microsoft.com/typography/otspec/featuretags.htm
- */
-opentype_module_Font.prototype.defaultRenderOptions = {
-    kerning: true,
-    features: [
-        /**
-         * these 4 features are required to render Arabic text properly
-         * and shouldn't be turned off when rendering arabic text.
-         */
-        { script: 'arab', tags: ['init', 'medi', 'fina', 'rlig'] },
-        { script: 'latn', tags: ['liga', 'rlig'] }
-    ]
-};
-
-/**
- * Helper function that invokes the given callback for each glyph in the given text.
- * The callback gets `(glyph, x, y, fontSize, options)`.* @param  {string} text
- * @param {string} text - The text to apply.
- * @param  {number} [x=0] - Horizontal position of the beginning of the text.
- * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
- * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
- * @param  {GlyphRenderOptions=} options
- * @param  {Function} callback
- */
-opentype_module_Font.prototype.forEachGlyph = function(text, x, y, fontSize, options, callback) {
-    x = x !== undefined ? x : 0;
-    y = y !== undefined ? y : 0;
-    fontSize = fontSize !== undefined ? fontSize : 72;
-    options = Object.assign({}, this.defaultRenderOptions, options);
-    var fontScale = 1 / this.unitsPerEm * fontSize;
-    var glyphs = this.stringToGlyphs(text, options);
-    var kerningLookups;
-    if (options.kerning) {
-        var script = options.script || this.position.getDefaultScriptName();
-        kerningLookups = this.position.getKerningTables(script, options.language);
-    }
-    for (var i = 0; i < glyphs.length; i += 1) {
-        var glyph = glyphs[i];
-        callback.call(this, glyph, x, y, fontSize, options);
-        if (glyph.advanceWidth) {
-            x += glyph.advanceWidth * fontScale;
-        }
-
-        if (options.kerning && i < glyphs.length - 1) {
-            // We should apply position adjustment lookups in a more generic way.
-            // Here we only use the xAdvance value.
-            var kerningValue = kerningLookups ?
-                  this.position.getKerningValue(kerningLookups, glyph.index, glyphs[i + 1].index) :
-                  this.getKerningValue(glyph, glyphs[i + 1]);
-            x += kerningValue * fontScale;
-        }
-
-        if (options.letterSpacing) {
-            x += options.letterSpacing * fontSize;
-        } else if (options.tracking) {
-            x += (options.tracking / 1000) * fontSize;
-        }
-    }
-    return x;
-};
-
-/**
- * Create a Path object that represents the given text.
- * @param  {string} text - The text to create.
- * @param  {number} [x=0] - Horizontal position of the beginning of the text.
- * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
- * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
- * @param  {GlyphRenderOptions=} options
- * @return {opentype.Path}
- */
-opentype_module_Font.prototype.getPath = function(text, x, y, fontSize, options) {
-    var fullPath = new Path();
-    this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {
-        var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);
-        fullPath.extend(glyphPath);
-    });
-    return fullPath;
-};
-
-/**
- * Create an array of Path objects that represent the glyphs of a given text.
- * @param  {string} text - The text to create.
- * @param  {number} [x=0] - Horizontal position of the beginning of the text.
- * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
- * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
- * @param  {GlyphRenderOptions=} options
- * @return {opentype.Path[]}
- */
-opentype_module_Font.prototype.getPaths = function(text, x, y, fontSize, options) {
-    var glyphPaths = [];
-    this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {
-        var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);
-        glyphPaths.push(glyphPath);
-    });
-
-    return glyphPaths;
-};
-
-/**
- * Returns the advance width of a text.
- *
- * This is something different than Path.getBoundingBox() as for example a
- * suffixed whitespace increases the advanceWidth but not the bounding box
- * or an overhanging letter like a calligraphic 'f' might have a quite larger
- * bounding box than its advance width.
- *
- * This corresponds to canvas2dContext.measureText(text).width
- *
- * @param  {string} text - The text to create.
- * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
- * @param  {GlyphRenderOptions=} options
- * @return advance width
- */
-opentype_module_Font.prototype.getAdvanceWidth = function(text, fontSize, options) {
-    return this.forEachGlyph(text, 0, 0, fontSize, options, function() {});
-};
-
-/**
- * Draw the text on the given drawing context.
- * @param  {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.
- * @param  {string} text - The text to create.
- * @param  {number} [x=0] - Horizontal position of the beginning of the text.
- * @param  {number} [y=0] - Vertical position of the *baseline* of the text.
- * @param  {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
- * @param  {GlyphRenderOptions=} options
- */
-opentype_module_Font.prototype.draw = function(ctx, text, x, y, fontSize, options) {
-    this.getPath(text, x, y, fontSize, options).draw(ctx);
-};
-
-/**
- * Draw the points of all glyphs in the text.
- * On-curve points will be drawn in blue, off-curve points will be drawn in red.
- * @param {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.
- * @param {string} text - The text to create.
- * @param {number} [x=0] - Horizontal position of the beginning of the text.
- * @param {number} [y=0] - Vertical position of the *baseline* of the text.
- * @param {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
- * @param {GlyphRenderOptions=} options
- */
-opentype_module_Font.prototype.drawPoints = function(ctx, text, x, y, fontSize, options) {
-    this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {
-        glyph.drawPoints(ctx, gX, gY, gFontSize);
-    });
-};
-
-/**
- * Draw lines indicating important font measurements for all glyphs in the text.
- * Black lines indicate the origin of the coordinate system (point 0,0).
- * Blue lines indicate the glyph bounding box.
- * Green line indicates the advance width of the glyph.
- * @param {CanvasRenderingContext2D} ctx - A 2D drawing context, like Canvas.
- * @param {string} text - The text to create.
- * @param {number} [x=0] - Horizontal position of the beginning of the text.
- * @param {number} [y=0] - Vertical position of the *baseline* of the text.
- * @param {number} [fontSize=72] - Font size in pixels. We scale the glyph units by `1 / unitsPerEm * fontSize`.
- * @param {GlyphRenderOptions=} options
- */
-opentype_module_Font.prototype.drawMetrics = function(ctx, text, x, y, fontSize, options) {
-    this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {
-        glyph.drawMetrics(ctx, gX, gY, gFontSize);
-    });
-};
-
-/**
- * @param  {string}
- * @return {string}
- */
-opentype_module_Font.prototype.getEnglishName = function(name) {
-    var translations = this.names[name];
-    if (translations) {
-        return translations.en;
-    }
-};
-
-/**
- * Validate
- */
-opentype_module_Font.prototype.validate = function() {
-    var _this = this;
-
-    function assert(predicate, message) {
-    }
-
-    function assertNamePresent(name) {
-        var englishName = _this.getEnglishName(name);
-        assert(englishName && englishName.trim().length > 0);
-    }
-
-    // Identification information
-    assertNamePresent('fontFamily');
-    assertNamePresent('weightName');
-    assertNamePresent('manufacturer');
-    assertNamePresent('copyright');
-    assertNamePresent('version');
-
-    // Dimension information
-    assert(this.unitsPerEm > 0);
-};
-
-/**
- * Convert the font object to a SFNT data structure.
- * This structure contains all the necessary tables and metadata to create a binary OTF file.
- * @return {opentype.Table}
- */
-opentype_module_Font.prototype.toTables = function() {
-    return sfnt.fontToTable(this);
-};
-/**
- * @deprecated Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.
- */
-opentype_module_Font.prototype.toBuffer = function() {
-    console.warn('Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.');
-    return this.toArrayBuffer();
-};
-/**
- * Converts a `opentype.Font` into an `ArrayBuffer`
- * @return {ArrayBuffer}
- */
-opentype_module_Font.prototype.toArrayBuffer = function() {
-    var sfntTable = this.toTables();
-    var bytes = sfntTable.encode();
-    var buffer = new ArrayBuffer(bytes.length);
-    var intArray = new Uint8Array(buffer);
-    for (var i = 0; i < bytes.length; i++) {
-        intArray[i] = bytes[i];
-    }
-
-    return buffer;
-};
-
-/**
- * Initiate a download of the OpenType font.
- */
-opentype_module_Font.prototype.download = function(fileName) {
-    var familyName = this.getEnglishName('fontFamily');
-    var styleName = this.getEnglishName('fontSubfamily');
-    fileName = fileName || familyName.replace(/\s/g, '') + '-' + styleName + '.otf';
-    var arrayBuffer = this.toArrayBuffer();
-
-    if (isBrowser()) {
-        window.URL = window.URL || window.webkitURL;
-
-        if (window.URL) {
-            var dataView = new DataView(arrayBuffer);
-            var blob = new Blob([dataView], {type: 'font/opentype'});
-
-            var link = document.createElement('a');
-            link.href = window.URL.createObjectURL(blob);
-            link.download = fileName;
-
-            var event = document.createEvent('MouseEvents');
-            event.initEvent('click', true, false);
-            link.dispatchEvent(event);
-        } else {
-            console.warn('Font file could not be downloaded. Try using a different browser.');
-        }
-    } else {
-        var fs = __webpack_require__(57147);
-        var buffer = arrayBufferToNodeBuffer(arrayBuffer);
-        fs.writeFileSync(fileName, buffer);
-    }
-};
-/**
- * @private
- */
-opentype_module_Font.prototype.fsSelectionValues = {
-    ITALIC:              0x001, //1
-    UNDERSCORE:          0x002, //2
-    NEGATIVE:            0x004, //4
-    OUTLINED:            0x008, //8
-    STRIKEOUT:           0x010, //16
-    BOLD:                0x020, //32
-    REGULAR:             0x040, //64
-    USER_TYPO_METRICS:   0x080, //128
-    WWS:                 0x100, //256
-    OBLIQUE:             0x200  //512
-};
-
-/**
- * @private
- */
-opentype_module_Font.prototype.usWidthClasses = {
-    ULTRA_CONDENSED: 1,
-    EXTRA_CONDENSED: 2,
-    CONDENSED: 3,
-    SEMI_CONDENSED: 4,
-    MEDIUM: 5,
-    SEMI_EXPANDED: 6,
-    EXPANDED: 7,
-    EXTRA_EXPANDED: 8,
-    ULTRA_EXPANDED: 9
-};
-
-/**
- * @private
- */
-opentype_module_Font.prototype.usWeightClasses = {
-    THIN: 100,
-    EXTRA_LIGHT: 200,
-    LIGHT: 300,
-    NORMAL: 400,
-    MEDIUM: 500,
-    SEMI_BOLD: 600,
-    BOLD: 700,
-    EXTRA_BOLD: 800,
-    BLACK:    900
-};
-
-// The `fvar` table stores font variation axes and instances.
-
-function addName(name, names) {
-    var nameString = JSON.stringify(name);
-    var nameID = 256;
-    for (var nameKey in names) {
-        var n = parseInt(nameKey);
-        if (!n || n < 256) {
-            continue;
-        }
-
-        if (JSON.stringify(names[nameKey]) === nameString) {
-            return n;
-        }
-
-        if (nameID <= n) {
-            nameID = n + 1;
-        }
-    }
-
-    names[nameID] = name;
-    return nameID;
-}
-
-function makeFvarAxis(n, axis, names) {
-    var nameID = addName(axis.name, names);
-    return [
-        {name: 'tag_' + n, type: 'TAG', value: axis.tag},
-        {name: 'minValue_' + n, type: 'FIXED', value: axis.minValue << 16},
-        {name: 'defaultValue_' + n, type: 'FIXED', value: axis.defaultValue << 16},
-        {name: 'maxValue_' + n, type: 'FIXED', value: axis.maxValue << 16},
-        {name: 'flags_' + n, type: 'USHORT', value: 0},
-        {name: 'nameID_' + n, type: 'USHORT', value: nameID}
-    ];
-}
-
-function parseFvarAxis(data, start, names) {
-    var axis = {};
-    var p = new parse.Parser(data, start);
-    axis.tag = p.parseTag();
-    axis.minValue = p.parseFixed();
-    axis.defaultValue = p.parseFixed();
-    axis.maxValue = p.parseFixed();
-    p.skip('uShort', 1);  // reserved for flags; no values defined
-    axis.name = names[p.parseUShort()] || {};
-    return axis;
-}
-
-function makeFvarInstance(n, inst, axes, names) {
-    var nameID = addName(inst.name, names);
-    var fields = [
-        {name: 'nameID_' + n, type: 'USHORT', value: nameID},
-        {name: 'flags_' + n, type: 'USHORT', value: 0}
-    ];
-
-    for (var i = 0; i < axes.length; ++i) {
-        var axisTag = axes[i].tag;
-        fields.push({
-            name: 'axis_' + n + ' ' + axisTag,
-            type: 'FIXED',
-            value: inst.coordinates[axisTag] << 16
-        });
-    }
-
-    return fields;
-}
-
-function parseFvarInstance(data, start, axes, names) {
-    var inst = {};
-    var p = new parse.Parser(data, start);
-    inst.name = names[p.parseUShort()] || {};
-    p.skip('uShort', 1);  // reserved for flags; no values defined
-
-    inst.coordinates = {};
-    for (var i = 0; i < axes.length; ++i) {
-        inst.coordinates[axes[i].tag] = p.parseFixed();
-    }
-
-    return inst;
-}
-
-function makeFvarTable(fvar, names) {
-    var result = new table.Table('fvar', [
-        {name: 'version', type: 'ULONG', value: 0x10000},
-        {name: 'offsetToData', type: 'USHORT', value: 0},
-        {name: 'countSizePairs', type: 'USHORT', value: 2},
-        {name: 'axisCount', type: 'USHORT', value: fvar.axes.length},
-        {name: 'axisSize', type: 'USHORT', value: 20},
-        {name: 'instanceCount', type: 'USHORT', value: fvar.instances.length},
-        {name: 'instanceSize', type: 'USHORT', value: 4 + fvar.axes.length * 4}
-    ]);
-    result.offsetToData = result.sizeOf();
-
-    for (var i = 0; i < fvar.axes.length; i++) {
-        result.fields = result.fields.concat(makeFvarAxis(i, fvar.axes[i], names));
-    }
-
-    for (var j = 0; j < fvar.instances.length; j++) {
-        result.fields = result.fields.concat(makeFvarInstance(j, fvar.instances[j], fvar.axes, names));
-    }
-
-    return result;
-}
-
-function parseFvarTable(data, start, names) {
-    var p = new parse.Parser(data, start);
-    var tableVersion = p.parseULong();
-    check.argument(tableVersion === 0x00010000, 'Unsupported fvar table version.');
-    var offsetToData = p.parseOffset16();
-    // Skip countSizePairs.
-    p.skip('uShort', 1);
-    var axisCount = p.parseUShort();
-    var axisSize = p.parseUShort();
-    var instanceCount = p.parseUShort();
-    var instanceSize = p.parseUShort();
-
-    var axes = [];
-    for (var i = 0; i < axisCount; i++) {
-        axes.push(parseFvarAxis(data, start + offsetToData + i * axisSize, names));
-    }
-
-    var instances = [];
-    var instanceStart = start + offsetToData + axisCount * axisSize;
-    for (var j = 0; j < instanceCount; j++) {
-        instances.push(parseFvarInstance(data, instanceStart + j * instanceSize, axes, names));
-    }
-
-    return {axes: axes, instances: instances};
-}
-
-var fvar = { make: makeFvarTable, parse: parseFvarTable };
-
-// The `GDEF` table contains various glyph properties
-
-var attachList = function() {
-    return {
-        coverage: this.parsePointer(opentype_module_Parser.coverage),
-        attachPoints: this.parseList(opentype_module_Parser.pointer(opentype_module_Parser.uShortList))
-    };
-};
-
-var caretValue = function() {
-    var format = this.parseUShort();
-    check.argument(format === 1 || format === 2 || format === 3,
-        'Unsupported CaretValue table version.');
-    if (format === 1) {
-        return { coordinate: this.parseShort() };
-    } else if (format === 2) {
-        return { pointindex: this.parseShort() };
-    } else if (format === 3) {
-        // Device / Variation Index tables unsupported
-        return { coordinate: this.parseShort() };
-    }
-};
-
-var ligGlyph = function() {
-    return this.parseList(opentype_module_Parser.pointer(caretValue));
-};
-
-var ligCaretList = function() {
-    return {
-        coverage: this.parsePointer(opentype_module_Parser.coverage),
-        ligGlyphs: this.parseList(opentype_module_Parser.pointer(ligGlyph))
-    };
-};
-
-var markGlyphSets = function() {
-    this.parseUShort(); // Version
-    return this.parseList(opentype_module_Parser.pointer(opentype_module_Parser.coverage));
-};
-
-function parseGDEFTable(data, start) {
-    start = start || 0;
-    var p = new opentype_module_Parser(data, start);
-    var tableVersion = p.parseVersion(1);
-    check.argument(tableVersion === 1 || tableVersion === 1.2 || tableVersion === 1.3,
-        'Unsupported GDEF table version.');
-    var gdef = {
-        version: tableVersion,
-        classDef: p.parsePointer(opentype_module_Parser.classDef),
-        attachList: p.parsePointer(attachList),
-        ligCaretList: p.parsePointer(ligCaretList),
-        markAttachClassDef: p.parsePointer(opentype_module_Parser.classDef)
-    };
-    if (tableVersion >= 1.2) {
-        gdef.markGlyphSets = p.parsePointer(markGlyphSets);
-    }
-    return gdef;
-}
-var gdef = { parse: parseGDEFTable };
-
-// The `GPOS` table contains kerning pairs, among other things.
-
-var subtableParsers$1 = new Array(10);         // subtableParsers[0] is unused
-
-// https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#lookup-type-1-single-adjustment-positioning-subtable
-// this = Parser instance
-subtableParsers$1[1] = function parseLookup1() {
-    var start = this.offset + this.relativeOffset;
-    var posformat = this.parseUShort();
-    if (posformat === 1) {
-        return {
-            posFormat: 1,
-            coverage: this.parsePointer(opentype_module_Parser.coverage),
-            value: this.parseValueRecord()
-        };
-    } else if (posformat === 2) {
-        return {
-            posFormat: 2,
-            coverage: this.parsePointer(opentype_module_Parser.coverage),
-            values: this.parseValueRecordList()
-        };
-    }
-    check.assert(false, '0x' + start.toString(16) + ': GPOS lookup type 1 format must be 1 or 2.');
-};
-
-// https://docs.microsoft.com/en-us/typography/opentype/spec/gpos#lookup-type-2-pair-adjustment-positioning-subtable
-subtableParsers$1[2] = function parseLookup2() {
-    var start = this.offset + this.relativeOffset;
-    var posFormat = this.parseUShort();
-    check.assert(posFormat === 1 || posFormat === 2, '0x' + start.toString(16) + ': GPOS lookup type 2 format must be 1 or 2.');
-    var coverage = this.parsePointer(opentype_module_Parser.coverage);
-    var valueFormat1 = this.parseUShort();
-    var valueFormat2 = this.parseUShort();
-    if (posFormat === 1) {
-        // Adjustments for Glyph Pairs
-        return {
-            posFormat: posFormat,
-            coverage: coverage,
-            valueFormat1: valueFormat1,
-            valueFormat2: valueFormat2,
-            pairSets: this.parseList(opentype_module_Parser.pointer(opentype_module_Parser.list(function() {
-                return {        // pairValueRecord
-                    secondGlyph: this.parseUShort(),
-                    value1: this.parseValueRecord(valueFormat1),
-                    value2: this.parseValueRecord(valueFormat2)
-                };
-            })))
-        };
-    } else if (posFormat === 2) {
-        var classDef1 = this.parsePointer(opentype_module_Parser.classDef);
-        var classDef2 = this.parsePointer(opentype_module_Parser.classDef);
-        var class1Count = this.parseUShort();
-        var class2Count = this.parseUShort();
-        return {
-            // Class Pair Adjustment
-            posFormat: posFormat,
-            coverage: coverage,
-            valueFormat1: valueFormat1,
-            valueFormat2: valueFormat2,
-            classDef1: classDef1,
-            classDef2: classDef2,
-            class1Count: class1Count,
-            class2Count: class2Count,
-            classRecords: this.parseList(class1Count, opentype_module_Parser.list(class2Count, function() {
-                return {
-                    value1: this.parseValueRecord(valueFormat1),
-                    value2: this.parseValueRecord(valueFormat2)
-                };
-            }))
-        };
-    }
-};
-
-subtableParsers$1[3] = function parseLookup3() { return { error: 'GPOS Lookup 3 not supported' }; };
-subtableParsers$1[4] = function parseLookup4() { return { error: 'GPOS Lookup 4 not supported' }; };
-subtableParsers$1[5] = function parseLookup5() { return { error: 'GPOS Lookup 5 not supported' }; };
-subtableParsers$1[6] = function parseLookup6() { return { error: 'GPOS Lookup 6 not supported' }; };
-subtableParsers$1[7] = function parseLookup7() { return { error: 'GPOS Lookup 7 not supported' }; };
-subtableParsers$1[8] = function parseLookup8() { return { error: 'GPOS Lookup 8 not supported' }; };
-subtableParsers$1[9] = function parseLookup9() { return { error: 'GPOS Lookup 9 not supported' }; };
-
-// https://docs.microsoft.com/en-us/typography/opentype/spec/gpos
-function parseGposTable(data, start) {
-    start = start || 0;
-    var p = new opentype_module_Parser(data, start);
-    var tableVersion = p.parseVersion(1);
-    check.argument(tableVersion === 1 || tableVersion === 1.1, 'Unsupported GPOS table version ' + tableVersion);
-
-    if (tableVersion === 1) {
-        return {
-            version: tableVersion,
-            scripts: p.parseScriptList(),
-            features: p.parseFeatureList(),
-            lookups: p.parseLookupList(subtableParsers$1)
-        };
-    } else {
-        return {
-            version: tableVersion,
-            scripts: p.parseScriptList(),
-            features: p.parseFeatureList(),
-            lookups: p.parseLookupList(subtableParsers$1),
-            variations: p.parseFeatureVariationsList()
-        };
-    }
-
-}
-
-// GPOS Writing //////////////////////////////////////////////
-// NOT SUPPORTED
-var subtableMakers$1 = new Array(10);
-
-function makeGposTable(gpos) {
-    return new table.Table('GPOS', [
-        {name: 'version', type: 'ULONG', value: 0x10000},
-        {name: 'scripts', type: 'TABLE', value: new table.ScriptList(gpos.scripts)},
-        {name: 'features', type: 'TABLE', value: new table.FeatureList(gpos.features)},
-        {name: 'lookups', type: 'TABLE', value: new table.LookupList(gpos.lookups, subtableMakers$1)}
-    ]);
-}
-
-var gpos = { parse: parseGposTable, make: makeGposTable };
-
-// The `kern` table contains kerning pairs.
-
-function parseWindowsKernTable(p) {
-    var pairs = {};
-    // Skip nTables.
-    p.skip('uShort');
-    var subtableVersion = p.parseUShort();
-    check.argument(subtableVersion === 0, 'Unsupported kern sub-table version.');
-    // Skip subtableLength, subtableCoverage
-    p.skip('uShort', 2);
-    var nPairs = p.parseUShort();
-    // Skip searchRange, entrySelector, rangeShift.
-    p.skip('uShort', 3);
-    for (var i = 0; i < nPairs; i += 1) {
-        var leftIndex = p.parseUShort();
-        var rightIndex = p.parseUShort();
-        var value = p.parseShort();
-        pairs[leftIndex + ',' + rightIndex] = value;
-    }
-    return pairs;
-}
-
-function parseMacKernTable(p) {
-    var pairs = {};
-    // The Mac kern table stores the version as a fixed (32 bits) but we only loaded the first 16 bits.
-    // Skip the rest.
-    p.skip('uShort');
-    var nTables = p.parseULong();
-    //check.argument(nTables === 1, 'Only 1 subtable is supported (got ' + nTables + ').');
-    if (nTables > 1) {
-        console.warn('Only the first kern subtable is supported.');
-    }
-    p.skip('uLong');
-    var coverage = p.parseUShort();
-    var subtableVersion = coverage & 0xFF;
-    p.skip('uShort');
-    if (subtableVersion === 0) {
-        var nPairs = p.parseUShort();
-        // Skip searchRange, entrySelector, rangeShift.
-        p.skip('uShort', 3);
-        for (var i = 0; i < nPairs; i += 1) {
-            var leftIndex = p.parseUShort();
-            var rightIndex = p.parseUShort();
-            var value = p.parseShort();
-            pairs[leftIndex + ',' + rightIndex] = value;
-        }
-    }
-    return pairs;
-}
-
-// Parse the `kern` table which contains kerning pairs.
-function parseKernTable(data, start) {
-    var p = new parse.Parser(data, start);
-    var tableVersion = p.parseUShort();
-    if (tableVersion === 0) {
-        return parseWindowsKernTable(p);
-    } else if (tableVersion === 1) {
-        return parseMacKernTable(p);
-    } else {
-        throw new Error('Unsupported kern table version (' + tableVersion + ').');
-    }
-}
-
-var kern = { parse: parseKernTable };
-
-// The `loca` table stores the offsets to the locations of the glyphs in the font.
-
-// Parse the `loca` table. This table stores the offsets to the locations of the glyphs in the font,
-// relative to the beginning of the glyphData table.
-// The number of glyphs stored in the `loca` table is specified in the `maxp` table (under numGlyphs)
-// The loca table has two versions: a short version where offsets are stored as uShorts, and a long
-// version where offsets are stored as uLongs. The `head` table specifies which version to use
-// (under indexToLocFormat).
-function parseLocaTable(data, start, numGlyphs, shortVersion) {
-    var p = new parse.Parser(data, start);
-    var parseFn = shortVersion ? p.parseUShort : p.parseULong;
-    // There is an extra entry after the last index element to compute the length of the last glyph.
-    // That's why we use numGlyphs + 1.
-    var glyphOffsets = [];
-    for (var i = 0; i < numGlyphs + 1; i += 1) {
-        var glyphOffset = parseFn.call(p);
-        if (shortVersion) {
-            // The short table version stores the actual offset divided by 2.
-            glyphOffset *= 2;
-        }
-
-        glyphOffsets.push(glyphOffset);
-    }
-
-    return glyphOffsets;
-}
-
-var loca = { parse: parseLocaTable };
-
-// opentype.js
-
-/**
- * The opentype library.
- * @namespace opentype
- */
-
-// File loaders /////////////////////////////////////////////////////////
-/**
- * Loads a font from a file. The callback throws an error message as the first parameter if it fails
- * and the font as an ArrayBuffer in the second parameter if it succeeds.
- * @param  {string} path - The path of the file
- * @param  {Function} callback - The function to call when the font load completes
- */
-function loadFromFile(path, callback) {
-    var fs = __webpack_require__(57147);
-    fs.readFile(path, function(err, buffer) {
-        if (err) {
-            return callback(err.message);
-        }
-
-        callback(null, nodeBufferToArrayBuffer(buffer));
-    });
-}
-/**
- * Loads a font from a URL. The callback throws an error message as the first parameter if it fails
- * and the font as an ArrayBuffer in the second parameter if it succeeds.
- * @param  {string} url - The URL of the font file.
- * @param  {Function} callback - The function to call when the font load completes
- */
-function loadFromUrl(url, callback) {
-    var request = new XMLHttpRequest();
-    request.open('get', url, true);
-    request.responseType = 'arraybuffer';
-    request.onload = function() {
-        if (request.response) {
-            return callback(null, request.response);
-        } else {
-            return callback('Font could not be loaded: ' + request.statusText);
-        }
-    };
-
-    request.onerror = function () {
-        callback('Font could not be loaded');
-    };
-
-    request.send();
-}
-
-// Table Directory Entries //////////////////////////////////////////////
-/**
- * Parses OpenType table entries.
- * @param  {DataView}
- * @param  {Number}
- * @return {Object[]}
- */
-function parseOpenTypeTableEntries(data, numTables) {
-    var tableEntries = [];
-    var p = 12;
-    for (var i = 0; i < numTables; i += 1) {
-        var tag = parse.getTag(data, p);
-        var checksum = parse.getULong(data, p + 4);
-        var offset = parse.getULong(data, p + 8);
-        var length = parse.getULong(data, p + 12);
-        tableEntries.push({tag: tag, checksum: checksum, offset: offset, length: length, compression: false});
-        p += 16;
-    }
-
-    return tableEntries;
-}
-
-/**
- * Parses WOFF table entries.
- * @param  {DataView}
- * @param  {Number}
- * @return {Object[]}
- */
-function parseWOFFTableEntries(data, numTables) {
-    var tableEntries = [];
-    var p = 44; // offset to the first table directory entry.
-    for (var i = 0; i < numTables; i += 1) {
-        var tag = parse.getTag(data, p);
-        var offset = parse.getULong(data, p + 4);
-        var compLength = parse.getULong(data, p + 8);
-        var origLength = parse.getULong(data, p + 12);
-        var compression = (void 0);
-        if (compLength < origLength) {
-            compression = 'WOFF';
-        } else {
-            compression = false;
-        }
-
-        tableEntries.push({tag: tag, offset: offset, compression: compression,
-            compressedLength: compLength, length: origLength});
-        p += 20;
-    }
-
-    return tableEntries;
-}
-
-/**
- * @typedef TableData
- * @type Object
- * @property {DataView} data - The DataView
- * @property {number} offset - The data offset.
- */
-
-/**
- * @param  {DataView}
- * @param  {Object}
- * @return {TableData}
- */
-function uncompressTable(data, tableEntry) {
-    if (tableEntry.compression === 'WOFF') {
-        var inBuffer = new Uint8Array(data.buffer, tableEntry.offset + 2, tableEntry.compressedLength - 2);
-        var outBuffer = new Uint8Array(tableEntry.length);
-        tinyInflate(inBuffer, outBuffer);
-        if (outBuffer.byteLength !== tableEntry.length) {
-            throw new Error('Decompression error: ' + tableEntry.tag + ' decompressed length doesn\'t match recorded length');
-        }
-
-        var view = new DataView(outBuffer.buffer, 0);
-        return {data: view, offset: 0};
-    } else {
-        return {data: data, offset: tableEntry.offset};
-    }
-}
-
-// Public API ///////////////////////////////////////////////////////////
-
-/**
- * Parse the OpenType file data (as an ArrayBuffer) and return a Font object.
- * Throws an error if the font could not be parsed.
- * @param  {ArrayBuffer}
- * @param  {Object} opt - options for parsing
- * @return {opentype.Font}
- */
-function parseBuffer(buffer, opt) {
-    opt = (opt === undefined || opt === null) ?  {} : opt;
-
-    var indexToLocFormat;
-    var ltagTable;
-
-    // Since the constructor can also be called to create new fonts from scratch, we indicate this
-    // should be an empty font that we'll fill with our own data.
-    var font = new opentype_module_Font({empty: true});
-
-    // OpenType fonts use big endian byte ordering.
-    // We can't rely on typed array view types, because they operate with the endianness of the host computer.
-    // Instead we use DataViews where we can specify endianness.
-    var data = new DataView(buffer, 0);
-    var numTables;
-    var tableEntries = [];
-    var signature = parse.getTag(data, 0);
-    if (signature === String.fromCharCode(0, 1, 0, 0) || signature === 'true' || signature === 'typ1') {
-        font.outlinesFormat = 'truetype';
-        numTables = parse.getUShort(data, 4);
-        tableEntries = parseOpenTypeTableEntries(data, numTables);
-    } else if (signature === 'OTTO') {
-        font.outlinesFormat = 'cff';
-        numTables = parse.getUShort(data, 4);
-        tableEntries = parseOpenTypeTableEntries(data, numTables);
-    } else if (signature === 'wOFF') {
-        var flavor = parse.getTag(data, 4);
-        if (flavor === String.fromCharCode(0, 1, 0, 0)) {
-            font.outlinesFormat = 'truetype';
-        } else if (flavor === 'OTTO') {
-            font.outlinesFormat = 'cff';
-        } else {
-            throw new Error('Unsupported OpenType flavor ' + signature);
-        }
-
-        numTables = parse.getUShort(data, 12);
-        tableEntries = parseWOFFTableEntries(data, numTables);
-    } else {
-        throw new Error('Unsupported OpenType signature ' + signature);
-    }
-
-    var cffTableEntry;
-    var fvarTableEntry;
-    var glyfTableEntry;
-    var gdefTableEntry;
-    var gposTableEntry;
-    var gsubTableEntry;
-    var hmtxTableEntry;
-    var kernTableEntry;
-    var locaTableEntry;
-    var nameTableEntry;
-    var metaTableEntry;
-    var p;
-
-    for (var i = 0; i < numTables; i += 1) {
-        var tableEntry = tableEntries[i];
-        var table = (void 0);
-        switch (tableEntry.tag) {
-            case 'cmap':
-                table = uncompressTable(data, tableEntry);
-                font.tables.cmap = cmap.parse(table.data, table.offset);
-                font.encoding = new CmapEncoding(font.tables.cmap);
-                break;
-            case 'cvt ' :
-                table = uncompressTable(data, tableEntry);
-                p = new parse.Parser(table.data, table.offset);
-                font.tables.cvt = p.parseShortList(tableEntry.length / 2);
-                break;
-            case 'fvar':
-                fvarTableEntry = tableEntry;
-                break;
-            case 'fpgm' :
-                table = uncompressTable(data, tableEntry);
-                p = new parse.Parser(table.data, table.offset);
-                font.tables.fpgm = p.parseByteList(tableEntry.length);
-                break;
-            case 'head':
-                table = uncompressTable(data, tableEntry);
-                font.tables.head = head.parse(table.data, table.offset);
-                font.unitsPerEm = font.tables.head.unitsPerEm;
-                indexToLocFormat = font.tables.head.indexToLocFormat;
-                break;
-            case 'hhea':
-                table = uncompressTable(data, tableEntry);
-                font.tables.hhea = hhea.parse(table.data, table.offset);
-                font.ascender = font.tables.hhea.ascender;
-                font.descender = font.tables.hhea.descender;
-                font.numberOfHMetrics = font.tables.hhea.numberOfHMetrics;
-                break;
-            case 'hmtx':
-                hmtxTableEntry = tableEntry;
-                break;
-            case 'ltag':
-                table = uncompressTable(data, tableEntry);
-                ltagTable = ltag.parse(table.data, table.offset);
-                break;
-            case 'maxp':
-                table = uncompressTable(data, tableEntry);
-                font.tables.maxp = maxp.parse(table.data, table.offset);
-                font.numGlyphs = font.tables.maxp.numGlyphs;
-                break;
-            case 'name':
-                nameTableEntry = tableEntry;
-                break;
-            case 'OS/2':
-                table = uncompressTable(data, tableEntry);
-                font.tables.os2 = os2.parse(table.data, table.offset);
-                break;
-            case 'post':
-                table = uncompressTable(data, tableEntry);
-                font.tables.post = post.parse(table.data, table.offset);
-                font.glyphNames = new GlyphNames(font.tables.post);
-                break;
-            case 'prep' :
-                table = uncompressTable(data, tableEntry);
-                p = new parse.Parser(table.data, table.offset);
-                font.tables.prep = p.parseByteList(tableEntry.length);
-                break;
-            case 'glyf':
-                glyfTableEntry = tableEntry;
-                break;
-            case 'loca':
-                locaTableEntry = tableEntry;
-                break;
-            case 'CFF ':
-                cffTableEntry = tableEntry;
-                break;
-            case 'kern':
-                kernTableEntry = tableEntry;
-                break;
-            case 'GDEF':
-                gdefTableEntry = tableEntry;
-                break;
-            case 'GPOS':
-                gposTableEntry = tableEntry;
-                break;
-            case 'GSUB':
-                gsubTableEntry = tableEntry;
-                break;
-            case 'meta':
-                metaTableEntry = tableEntry;
-                break;
-        }
-    }
-
-    var nameTable = uncompressTable(data, nameTableEntry);
-    font.tables.name = _name.parse(nameTable.data, nameTable.offset, ltagTable);
-    font.names = font.tables.name;
-
-    if (glyfTableEntry && locaTableEntry) {
-        var shortVersion = indexToLocFormat === 0;
-        var locaTable = uncompressTable(data, locaTableEntry);
-        var locaOffsets = loca.parse(locaTable.data, locaTable.offset, font.numGlyphs, shortVersion);
-        var glyfTable = uncompressTable(data, glyfTableEntry);
-        font.glyphs = glyf.parse(glyfTable.data, glyfTable.offset, locaOffsets, font, opt);
-    } else if (cffTableEntry) {
-        var cffTable = uncompressTable(data, cffTableEntry);
-        cff.parse(cffTable.data, cffTable.offset, font, opt);
-    } else {
-        throw new Error('Font doesn\'t contain TrueType or CFF outlines.');
-    }
-
-    var hmtxTable = uncompressTable(data, hmtxTableEntry);
-    hmtx.parse(font, hmtxTable.data, hmtxTable.offset, font.numberOfHMetrics, font.numGlyphs, font.glyphs, opt);
-    addGlyphNames(font, opt);
-
-    if (kernTableEntry) {
-        var kernTable = uncompressTable(data, kernTableEntry);
-        font.kerningPairs = kern.parse(kernTable.data, kernTable.offset);
-    } else {
-        font.kerningPairs = {};
-    }
-
-    if (gdefTableEntry) {
-        var gdefTable = uncompressTable(data, gdefTableEntry);
-        font.tables.gdef = gdef.parse(gdefTable.data, gdefTable.offset);
-    }
-
-    if (gposTableEntry) {
-        var gposTable = uncompressTable(data, gposTableEntry);
-        font.tables.gpos = gpos.parse(gposTable.data, gposTable.offset);
-        font.position.init();
-    }
-
-    if (gsubTableEntry) {
-        var gsubTable = uncompressTable(data, gsubTableEntry);
-        font.tables.gsub = gsub.parse(gsubTable.data, gsubTable.offset);
-    }
-
-    if (fvarTableEntry) {
-        var fvarTable = uncompressTable(data, fvarTableEntry);
-        font.tables.fvar = fvar.parse(fvarTable.data, fvarTable.offset, font.names);
-    }
-
-    if (metaTableEntry) {
-        var metaTable = uncompressTable(data, metaTableEntry);
-        font.tables.meta = meta.parse(metaTable.data, metaTable.offset);
-        font.metas = font.tables.meta;
-    }
-
-    return font;
-}
-
-/**
- * Asynchronously load the font from a URL or a filesystem. When done, call the callback
- * with two arguments `(err, font)`. The `err` will be null on success,
- * the `font` is a Font object.
- * We use the node.js callback convention so that
- * opentype.js can integrate with frameworks like async.js.
- * @alias opentype.load
- * @param  {string} url - The URL of the font to load.
- * @param  {Function} callback - The callback.
- */
-function load(url, callback, opt) {
-    opt = (opt === undefined || opt === null) ?  {} : opt;
-    var isNode = typeof window === 'undefined';
-    var loadFn = isNode && !opt.isUrl ? loadFromFile : loadFromUrl;
-
-    return new Promise(function (resolve, reject) {
-        loadFn(url, function(err, arrayBuffer) {
-            if (err) {
-                if (callback) {
-                    return callback(err);
-                } else {
-                    reject(err);
-                }
-            }
-            var font;
-            try {
-                font = parseBuffer(arrayBuffer, opt);
-            } catch (e) {
-                if (callback) {
-                    return callback(e, null);
-                } else {
-                    reject(e);
-                }
-            }
-            if (callback) {
-                return callback(null, font);
-            } else {
-                resolve(font);
-            }
-        });
-    });
-}
-
-/**
- * Synchronously load the font from a URL or file.
- * When done, returns the font object or throws an error.
- * @alias opentype.loadSync
- * @param  {string} url - The URL of the font to load.
- * @param  {Object} opt - opt.lowMemory
- * @return {opentype.Font}
- */
-function loadSync(url, opt) {
-    var fs = __webpack_require__(57147);
-    var buffer = fs.readFileSync(url);
-    return parseBuffer(nodeBufferToArrayBuffer(buffer), opt);
-}
-
-var opentype = /*#__PURE__*/Object.freeze({
-	__proto__: null,
-	Font: opentype_module_Font,
-	Glyph: Glyph,
-	Path: Path,
-	BoundingBox: BoundingBox,
-	_parse: parse,
-	parse: parseBuffer,
-	load: load,
-	loadSync: loadSync
-});
-
-/* harmony default export */ const opentype_module = ((/* unused pure expression or super */ null && (opentype)));
-
-//# sourceMappingURL=opentype.module.js.map
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/TTFLoader.js
-
-
-class TTFLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.reversed = false;
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(this.requestHeader);
-    loader.setWithCredentials(this.withCredentials);
-    loader.load(
-      url,
-      function(buffer) {
-        try {
-          onLoad(parseBuffer(buffer));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(arraybuffer) {
-    function convert(font, reversed) {
-      const round = Math.round;
-      const glyphs = {};
-      const scale = 1e5 / ((font.unitsPerEm || 2048) * 72);
-      const glyphIndexMap = font.encoding.cmap.glyphIndexMap;
-      const unicodes = Object.keys(glyphIndexMap);
-      for (let i = 0; i < unicodes.length; i++) {
-        const unicode = unicodes[i];
-        const glyph = font.glyphs.glyphs[glyphIndexMap[unicode]];
-        if (unicode !== void 0) {
-          const token = {
-            ha: round(glyph.advanceWidth * scale),
-            x_min: round(glyph.xMin * scale),
-            x_max: round(glyph.xMax * scale),
-            o: ""
-          };
-          if (reversed) {
-            glyph.path.commands = reverseCommands(glyph.path.commands);
-          }
-          glyph.path.commands.forEach(function(command) {
-            if (command.type.toLowerCase() === "c") {
-              command.type = "b";
-            }
-            token.o += command.type.toLowerCase() + " ";
-            if (command.x !== void 0 && command.y !== void 0) {
-              token.o += round(command.x * scale) + " " + round(command.y * scale) + " ";
-            }
-            if (command.x1 !== void 0 && command.y1 !== void 0) {
-              token.o += round(command.x1 * scale) + " " + round(command.y1 * scale) + " ";
-            }
-            if (command.x2 !== void 0 && command.y2 !== void 0) {
-              token.o += round(command.x2 * scale) + " " + round(command.y2 * scale) + " ";
-            }
-          });
-          glyphs[String.fromCodePoint(glyph.unicode)] = token;
-        }
-      }
-      return {
-        glyphs,
-        familyName: font.getEnglishName("fullName"),
-        ascender: round(font.ascender * scale),
-        descender: round(font.descender * scale),
-        underlinePosition: font.tables.post.underlinePosition,
-        underlineThickness: font.tables.post.underlineThickness,
-        boundingBox: {
-          xMin: font.tables.head.xMin,
-          xMax: font.tables.head.xMax,
-          yMin: font.tables.head.yMin,
-          yMax: font.tables.head.yMax
-        },
-        resolution: 1e3,
-        original_font_information: font.tables.name
-      };
-    }
-    function reverseCommands(commands) {
-      const paths = [];
-      let path;
-      commands.forEach(function(c) {
-        if (c.type.toLowerCase() === "m") {
-          path = [c];
-          paths.push(path);
-        } else if (c.type.toLowerCase() !== "z") {
-          path.push(c);
-        }
-      });
-      const reversed = [];
-      paths.forEach(function(p) {
-        const result = {
-          type: "m",
-          x: p[p.length - 1].x,
-          y: p[p.length - 1].y
-        };
-        reversed.push(result);
-        for (let i = p.length - 1; i > 0; i--) {
-          const command = p[i];
-          const result2 = { type: command.type };
-          if (command.x2 !== void 0 && command.y2 !== void 0) {
-            result2.x1 = command.x2;
-            result2.y1 = command.y2;
-            result2.x2 = command.x1;
-            result2.y2 = command.y1;
-          } else if (command.x1 !== void 0 && command.y1 !== void 0) {
-            result2.x1 = command.x1;
-            result2.y1 = command.y1;
-          }
-          result2.x = p[i - 1].x;
-          result2.y = p[i - 1].y;
-          reversed.push(result2);
-        }
-      });
-      return reversed;
-    }
-    return convert(parseBuffer(arraybuffer), this.reversed);
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/loaders/RGBELoader.js
-var RGBELoader = __webpack_require__(8197);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/AssimpLoader.js
-
-class AssimpLoader extends three_module.Loader {
-  load(url, onLoad, onProgress, onError) {
-    var scope = this;
-    var path = scope.path === "" ? three_module.LoaderUtils.extractUrlBase(url) : scope.path;
-    var loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(buffer) {
-        try {
-          onLoad(scope.parse(buffer, path));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(buffer, path) {
-    var textureLoader = new three_module.TextureLoader(this.manager);
-    textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);
-    var Virtulous = {};
-    Virtulous.KeyFrame = class {
-      constructor(time, matrix) {
-        this.time = time;
-        this.matrix = matrix.clone();
-        this.position = new three_module.Vector3();
-        this.quaternion = new three_module.Quaternion();
-        this.scale = new three_module.Vector3(1, 1, 1);
-        this.matrix.decompose(this.position, this.quaternion, this.scale);
-        this.clone = function() {
-          var n = new Virtulous.KeyFrame(this.time, this.matrix);
-          return n;
-        };
-        this.lerp = function(nextKey, time2) {
-          time2 -= this.time;
-          var dist = nextKey.time - this.time;
-          var l = time2 / dist;
-          var l2 = 1 - l;
-          var keypos = this.position;
-          var keyrot = this.quaternion;
-          var key2pos = nextKey.position;
-          var key2rot = nextKey.quaternion;
-          Virtulous.KeyFrame.tempAniPos.x = keypos.x * l2 + key2pos.x * l;
-          Virtulous.KeyFrame.tempAniPos.y = keypos.y * l2 + key2pos.y * l;
-          Virtulous.KeyFrame.tempAniPos.z = keypos.z * l2 + key2pos.z * l;
-          Virtulous.KeyFrame.tempAniQuat.set(keyrot.x, keyrot.y, keyrot.z, keyrot.w);
-          Virtulous.KeyFrame.tempAniQuat.slerp(key2rot, l);
-          return Virtulous.KeyFrame.tempAniMatrix.compose(
-            Virtulous.KeyFrame.tempAniPos,
-            Virtulous.KeyFrame.tempAniQuat,
-            Virtulous.KeyFrame.tempAniScale
-          );
-        };
-      }
-    };
-    Virtulous.KeyFrame.tempAniPos = new three_module.Vector3();
-    Virtulous.KeyFrame.tempAniQuat = new three_module.Quaternion();
-    Virtulous.KeyFrame.tempAniScale = new three_module.Vector3(1, 1, 1);
-    Virtulous.KeyFrame.tempAniMatrix = new three_module.Matrix4();
-    Virtulous.KeyFrameTrack = function() {
-      this.keys = [];
-      this.target = null;
-      this.time = 0;
-      this.length = 0;
-      this._accelTable = {};
-      this.fps = 20;
-      this.addKey = function(key) {
-        this.keys.push(key);
-      };
-      this.init = function() {
-        this.sortKeys();
-        if (this.keys.length > 0)
-          this.length = this.keys[this.keys.length - 1].time;
-        else
-          this.length = 0;
-        if (!this.fps)
-          return;
-        for (let j = 0; j < this.length * this.fps; j++) {
-          for (let i = 0; i < this.keys.length; i++) {
-            if (this.keys[i].time == j) {
-              this._accelTable[j] = i;
-              break;
-            } else if (this.keys[i].time < j / this.fps && this.keys[i + 1] && this.keys[i + 1].time >= j / this.fps) {
-              this._accelTable[j] = i;
-              break;
-            }
-          }
-        }
-      };
-      this.parseFromThree = function(data) {
-        var fps = data.fps;
-        this.target = data.node;
-        var track = data.hierarchy[0].keys;
-        for (let i = 0; i < track.length; i++) {
-          this.addKey(new Virtulous.KeyFrame(i / fps || track[i].time, track[i].targets[0].data));
-        }
-        this.init();
-      };
-      this.parseFromCollada = function(data) {
-        var track = data.keys;
-        var fps = this.fps;
-        for (let i = 0; i < track.length; i++) {
-          this.addKey(new Virtulous.KeyFrame(i / fps || track[i].time, track[i].matrix));
-        }
-        this.init();
-      };
-      this.sortKeys = function() {
-        this.keys.sort(this.keySortFunc);
-      };
-      this.keySortFunc = function(a, b) {
-        return a.time - b.time;
-      };
-      this.clone = function() {
-        var t = new Virtulous.KeyFrameTrack();
-        t.target = this.target;
-        t.time = this.time;
-        t.length = this.length;
-        for (let i = 0; i < this.keys.length; i++) {
-          t.addKey(this.keys[i].clone());
-        }
-        t.init();
-        return t;
-      };
-      this.reTarget = function(root, compareitor) {
-        if (!compareitor)
-          compareitor = Virtulous.TrackTargetNodeNameCompare;
-        this.target = compareitor(root, this.target);
-      };
-      this.keySearchAccel = function(time) {
-        time *= this.fps;
-        time = Math.floor(time);
-        return this._accelTable[time] || 0;
-      };
-      this.setTime = function(time) {
-        time = Math.abs(time);
-        if (this.length)
-          time = time % this.length + 0.05;
-        var key0 = null;
-        var key1 = null;
-        for (let i = this.keySearchAccel(time); i < this.keys.length; i++) {
-          if (this.keys[i].time == time) {
-            key0 = this.keys[i];
-            key1 = this.keys[i];
-            break;
-          } else if (this.keys[i].time < time && this.keys[i + 1] && this.keys[i + 1].time > time) {
-            key0 = this.keys[i];
-            key1 = this.keys[i + 1];
-            break;
-          } else if (this.keys[i].time < time && i == this.keys.length - 1) {
-            key0 = this.keys[i];
-            key1 = this.keys[0].clone();
-            key1.time += this.length + 0.05;
-            break;
-          }
-        }
-        if (key0 && key1 && key0 !== key1) {
-          this.target.matrixAutoUpdate = false;
-          this.target.matrix.copy(key0.lerp(key1, time));
-          this.target.matrixWorldNeedsUpdate = true;
-          return;
-        }
-        if (key0 && key1 && key0 == key1) {
-          this.target.matrixAutoUpdate = false;
-          this.target.matrix.copy(key0.matrix);
-          this.target.matrixWorldNeedsUpdate = true;
-          return;
-        }
-      };
-    };
-    Virtulous.TrackTargetNodeNameCompare = function(root, target) {
-      function find(node, name) {
-        if (node.name == name)
-          return node;
-        for (let i = 0; i < node.children.length; i++) {
-          var r = find(node.children[i], name);
-          if (r)
-            return r;
-        }
-        return null;
-      }
-      return find(root, target.name);
-    };
-    Virtulous.Animation = function() {
-      this.tracks = [];
-      this.length = 0;
-      this.addTrack = function(track) {
-        this.tracks.push(track);
-        this.length = Math.max(track.length, this.length);
-      };
-      this.setTime = function(time) {
-        this.time = time;
-        for (let i = 0; i < this.tracks.length; i++)
-          this.tracks[i].setTime(time);
-      };
-      this.clone = function(target, compareitor) {
-        if (!compareitor)
-          compareitor = Virtulous.TrackTargetNodeNameCompare;
-        var n = new Virtulous.Animation();
-        n.target = target;
-        for (let i = 0; i < this.tracks.length; i++) {
-          var track = this.tracks[i].clone();
-          track.reTarget(target, compareitor);
-          n.addTrack(track);
-        }
-        return n;
-      };
-    };
-    var ASSBIN_CHUNK_AICAMERA = 4660;
-    var ASSBIN_CHUNK_AILIGHT = 4661;
-    var ASSBIN_CHUNK_AITEXTURE = 4662;
-    var ASSBIN_CHUNK_AIMESH = 4663;
-    var ASSBIN_CHUNK_AINODEANIM = 4664;
-    var ASSBIN_CHUNK_AISCENE = 4665;
-    var ASSBIN_CHUNK_AIBONE = 4666;
-    var ASSBIN_CHUNK_AIANIMATION = 4667;
-    var ASSBIN_CHUNK_AINODE = 4668;
-    var ASSBIN_CHUNK_AIMATERIAL = 4669;
-    var ASSBIN_CHUNK_AIMATERIALPROPERTY = 4670;
-    var ASSBIN_MESH_HAS_POSITIONS = 1;
-    var ASSBIN_MESH_HAS_NORMALS = 2;
-    var ASSBIN_MESH_HAS_TANGENTS_AND_BITANGENTS = 4;
-    var ASSBIN_MESH_HAS_TEXCOORD_BASE = 256;
-    var ASSBIN_MESH_HAS_COLOR_BASE = 65536;
-    var AI_MAX_NUMBER_OF_COLOR_SETS = 1;
-    var AI_MAX_NUMBER_OF_TEXTURECOORDS = 4;
-    //! A directional light source has a well-defined direction
-    //! but is infinitely far away. That's quite a good
-    //! approximation for sun light.
-    var aiLightSource_DIRECTIONAL = 1;
-    //! A point light source has a well-defined position
-    //! in space but no direction - it emits light in all
-    //! directions. A normal bulb is a point light.
-    //! A spot light source emits light in a specific
-    //! angle. It has a position and a direction it is pointing to.
-    //! A good example for a spot light is a light spot in
-    //! sport arenas.
-    var aiLightSource_SPOT = 3;
-    //! The generic light level of the world, including the bounces
-    //! of all other lightsources.
-    //! Typically, there's at most one ambient light in a scene.
-    //! This light type doesn't have a valid position, direction, or
-    //! other properties, just a color.
-    var aiTextureType_DIFFUSE = 1;
-    var aiTextureType_NORMALS = 6;
-    var aiTextureType_OPACITY = 8;
-    var aiTextureType_LIGHTMAP = 10;
-    var BONESPERVERT = 4;
-    function ASSBIN_MESH_HAS_TEXCOORD(n) {
-      return ASSBIN_MESH_HAS_TEXCOORD_BASE << n;
-    }
-    function ASSBIN_MESH_HAS_COLOR(n) {
-      return ASSBIN_MESH_HAS_COLOR_BASE << n;
-    }
-    function markBones(scene) {
-      for (let i in scene.mMeshes) {
-        var mesh = scene.mMeshes[i];
-        for (let k in mesh.mBones) {
-          var boneNode = scene.findNode(mesh.mBones[k].mName);
-          if (boneNode)
-            boneNode.isBone = true;
-        }
-      }
-    }
-    function cloneTreeToBones(root, scene) {
-      var rootBone = new three_module.Bone();
-      rootBone.matrix.copy(root.matrix);
-      rootBone.matrixWorld.copy(root.matrixWorld);
-      rootBone.position.copy(root.position);
-      rootBone.quaternion.copy(root.quaternion);
-      rootBone.scale.copy(root.scale);
-      scene.nodeCount++;
-      rootBone.name = "bone_" + root.name + scene.nodeCount.toString();
-      if (!scene.nodeToBoneMap[root.name])
-        scene.nodeToBoneMap[root.name] = [];
-      scene.nodeToBoneMap[root.name].push(rootBone);
-      for (let i in root.children) {
-        var child = cloneTreeToBones(root.children[i], scene);
-        rootBone.add(child);
-      }
-      return rootBone;
-    }
-    function sortWeights(indexes, weights) {
-      var pairs = [];
-      for (let i = 0; i < indexes.length; i++) {
-        pairs.push({
-          i: indexes[i],
-          w: weights[i]
-        });
-      }
-      pairs.sort(function(a, b) {
-        return b.w - a.w;
-      });
-      while (pairs.length < 4) {
-        pairs.push({
-          i: 0,
-          w: 0
-        });
-      }
-      if (pairs.length > 4)
-        pairs.length = 4;
-      var sum = 0;
-      for (let i = 0; i < 4; i++) {
-        sum += pairs[i].w * pairs[i].w;
-      }
-      sum = Math.sqrt(sum);
-      for (let i = 0; i < 4; i++) {
-        pairs[i].w = pairs[i].w / sum;
-        indexes[i] = pairs[i].i;
-        weights[i] = pairs[i].w;
-      }
-    }
-    function findMatchingBone(root, name) {
-      if (root.name.indexOf("bone_" + name) == 0)
-        return root;
-      for (let i in root.children) {
-        var ret = findMatchingBone(root.children[i], name);
-        if (ret)
-          return ret;
-      }
-      return void 0;
-    }
-    class aiMesh {
-      constructor() {
-        this.mPrimitiveTypes = 0;
-        this.mNumVertices = 0;
-        this.mNumFaces = 0;
-        this.mNumBones = 0;
-        this.mMaterialIndex = 0;
-        this.mVertices = [];
-        this.mNormals = [];
-        this.mTangents = [];
-        this.mBitangents = [];
-        this.mColors = [[]];
-        this.mTextureCoords = [[]];
-        this.mFaces = [];
-        this.mBones = [];
-        this.hookupSkeletons = function(scene) {
-          if (this.mBones.length == 0)
-            return;
-          var allBones = [];
-          var offsetMatrix = [];
-          var skeletonRoot = scene.findNode(this.mBones[0].mName);
-          while (skeletonRoot.mParent && skeletonRoot.mParent.isBone) {
-            skeletonRoot = skeletonRoot.mParent;
-          }
-          var threeSkeletonRoot = skeletonRoot.toTHREE(scene);
-          var threeSkeletonRootBone = cloneTreeToBones(threeSkeletonRoot, scene);
-          this.threeNode.add(threeSkeletonRootBone);
-          for (let i = 0; i < this.mBones.length; i++) {
-            var bone = findMatchingBone(threeSkeletonRootBone, this.mBones[i].mName);
-            if (bone) {
-              var tbone = bone;
-              allBones.push(tbone);
-              offsetMatrix.push(this.mBones[i].mOffsetMatrix.toTHREE());
-            } else {
-              var skeletonRoot = scene.findNode(this.mBones[i].mName);
-              if (!skeletonRoot)
-                return;
-              var threeSkeletonRoot = skeletonRoot.toTHREE(scene);
-              var threeSkeletonRootBone = cloneTreeToBones(threeSkeletonRoot, scene);
-              this.threeNode.add(threeSkeletonRootBone);
-              var bone = findMatchingBone(threeSkeletonRootBone, this.mBones[i].mName);
-              var tbone = bone;
-              allBones.push(tbone);
-              offsetMatrix.push(this.mBones[i].mOffsetMatrix.toTHREE());
-            }
-          }
-          var skeleton = new three_module.Skeleton(allBones, offsetMatrix);
-          this.threeNode.bind(skeleton, new three_module.Matrix4());
-          this.threeNode.material.skinning = true;
-        };
-        this.toTHREE = function(scene) {
-          if (this.threeNode)
-            return this.threeNode;
-          var geometry = new three_module.BufferGeometry();
-          var mat;
-          if (scene.mMaterials[this.mMaterialIndex])
-            mat = scene.mMaterials[this.mMaterialIndex].toTHREE(scene);
-          else
-            mat = new three_module.MeshLambertMaterial();
-          geometry.setIndex(new three_module.BufferAttribute(new Uint32Array(this.mIndexArray), 1));
-          geometry.setAttribute("position", new three_module.BufferAttribute(this.mVertexBuffer, 3));
-          if (this.mNormalBuffer && this.mNormalBuffer.length > 0) {
-            geometry.setAttribute("normal", new three_module.BufferAttribute(this.mNormalBuffer, 3));
-          }
-          if (this.mColorBuffer && this.mColorBuffer.length > 0) {
-            geometry.setAttribute("color", new three_module.BufferAttribute(this.mColorBuffer, 4));
-          }
-          if (this.mTexCoordsBuffers[0] && this.mTexCoordsBuffers[0].length > 0) {
-            geometry.setAttribute("uv", new three_module.BufferAttribute(new Float32Array(this.mTexCoordsBuffers[0]), 2));
-          }
-          if (this.mTexCoordsBuffers[1] && this.mTexCoordsBuffers[1].length > 0) {
-            geometry.setAttribute("uv1", new three_module.BufferAttribute(new Float32Array(this.mTexCoordsBuffers[1]), 2));
-          }
-          if (this.mTangentBuffer && this.mTangentBuffer.length > 0) {
-            geometry.setAttribute("tangents", new three_module.BufferAttribute(this.mTangentBuffer, 3));
-          }
-          if (this.mBitangentBuffer && this.mBitangentBuffer.length > 0) {
-            geometry.setAttribute("bitangents", new three_module.BufferAttribute(this.mBitangentBuffer, 3));
-          }
-          if (this.mBones.length > 0) {
-            var weights = [];
-            var bones = [];
-            for (let i = 0; i < this.mBones.length; i++) {
-              for (let j = 0; j < this.mBones[i].mWeights.length; j++) {
-                var weight = this.mBones[i].mWeights[j];
-                if (weight) {
-                  if (!weights[weight.mVertexId])
-                    weights[weight.mVertexId] = [];
-                  if (!bones[weight.mVertexId])
-                    bones[weight.mVertexId] = [];
-                  weights[weight.mVertexId].push(weight.mWeight);
-                  bones[weight.mVertexId].push(parseInt(i));
-                }
-              }
-            }
-            for (let i in bones) {
-              sortWeights(bones[i], weights[i]);
-            }
-            var _weights = [];
-            var _bones = [];
-            for (let i = 0; i < weights.length; i++) {
-              for (let j = 0; j < 4; j++) {
-                if (weights[i] && bones[i]) {
-                  _weights.push(weights[i][j]);
-                  _bones.push(bones[i][j]);
-                } else {
-                  _weights.push(0);
-                  _bones.push(0);
-                }
-              }
-            }
-            geometry.setAttribute("skinWeight", new three_module.BufferAttribute(new Float32Array(_weights), BONESPERVERT));
-            geometry.setAttribute("skinIndex", new three_module.BufferAttribute(new Float32Array(_bones), BONESPERVERT));
-          }
-          var mesh;
-          if (this.mBones.length == 0)
-            mesh = new three_module.Mesh(geometry, mat);
-          if (this.mBones.length > 0) {
-            mesh = new three_module.SkinnedMesh(geometry, mat);
-            mesh.normalizeSkinWeights();
-          }
-          this.threeNode = mesh;
-          return mesh;
-        };
-      }
-    }
-    class aiFace {
-      constructor() {
-        this.mNumIndices = 0;
-        this.mIndices = [];
-      }
-    }
-    class aiVector3D {
-      constructor() {
-        this.x = 0;
-        this.y = 0;
-        this.z = 0;
-        this.toTHREE = function() {
-          return new three_module.Vector3(this.x, this.y, this.z);
-        };
-      }
-    }
-    class aiColor3D {
-      constructor() {
-        this.r = 0;
-        this.g = 0;
-        this.b = 0;
-        this.a = 0;
-        this.toTHREE = function() {
-          return new three_module.Color(this.r, this.g, this.b);
-        };
-      }
-    }
-    class aiQuaternion {
-      constructor() {
-        this.x = 0;
-        this.y = 0;
-        this.z = 0;
-        this.w = 0;
-        this.toTHREE = function() {
-          return new three_module.Quaternion(this.x, this.y, this.z, this.w);
-        };
-      }
-    }
-    class aiVertexWeight {
-      constructor() {
-        this.mVertexId = 0;
-        this.mWeight = 0;
-      }
-    }
-    class aiString {
-      constructor() {
-        this.data = [];
-        this.toString = function() {
-          var str = "";
-          this.data.forEach(function(i) {
-            str += String.fromCharCode(i);
-          });
-          return str.replace(/[^\x20-\x7E]+/g, "");
-        };
-      }
-    }
-    class aiVectorKey {
-      constructor() {
-        this.mTime = 0;
-        this.mValue = null;
-      }
-    }
-    class aiQuatKey {
-      constructor() {
-        this.mTime = 0;
-        this.mValue = null;
-      }
-    }
-    class aiNode {
-      constructor() {
-        this.mName = "";
-        this.mTransformation = [];
-        this.mNumChildren = 0;
-        this.mNumMeshes = 0;
-        this.mMeshes = [];
-        this.mChildren = [];
-        this.toTHREE = function(scene) {
-          if (this.threeNode)
-            return this.threeNode;
-          var o = new three_module.Object3D();
-          o.name = this.mName;
-          o.matrix = this.mTransformation.toTHREE();
-          for (let i = 0; i < this.mChildren.length; i++) {
-            o.add(this.mChildren[i].toTHREE(scene));
-          }
-          for (let i = 0; i < this.mMeshes.length; i++) {
-            o.add(scene.mMeshes[this.mMeshes[i]].toTHREE(scene));
-          }
-          this.threeNode = o;
-          o.matrix.decompose(o.position, o.quaternion, o.scale);
-          return o;
-        };
-      }
-    }
-    class aiBone {
-      constructor() {
-        this.mName = "";
-        this.mNumWeights = 0;
-        this.mOffsetMatrix = 0;
-      }
-    }
-    class aiMaterialProperty {
-      constructor() {
-        this.mKey = "";
-        this.mSemantic = 0;
-        this.mIndex = 0;
-        this.mData = [];
-        this.mDataLength = 0;
-        this.mType = 0;
-        this.dataAsColor = function() {
-          var array = new Uint8Array(this.mData).buffer;
-          var reader = new DataView(array);
-          var r = reader.getFloat32(0, true);
-          var g = reader.getFloat32(4, true);
-          var b = reader.getFloat32(8, true);
-          return new three_module.Color(r, g, b);
-        };
-        this.dataAsFloat = function() {
-          var array = new Uint8Array(this.mData).buffer;
-          var reader = new DataView(array);
-          var r = reader.getFloat32(0, true);
-          return r;
-        };
-        this.dataAsBool = function() {
-          var array = new Uint8Array(this.mData).buffer;
-          var reader = new DataView(array);
-          var r = reader.getFloat32(0, true);
-          return !!r;
-        };
-        this.dataAsString = function() {
-          var s = new aiString();
-          s.data = this.mData;
-          return s.toString();
-        };
-        this.dataAsMap = function() {
-          var s = new aiString();
-          s.data = this.mData;
-          var path2 = s.toString();
-          path2 = path2.replace(/\\/g, "/");
-          if (path2.indexOf("/") != -1) {
-            path2 = path2.substr(path2.lastIndexOf("/") + 1);
-          }
-          return textureLoader.load(path2);
-        };
-      }
-    }
-    var namePropMapping = {
-      "?mat.name": "name",
-      "$mat.shadingm": "shading",
-      "$mat.twosided": "twoSided",
-      "$mat.wireframe": "wireframe",
-      "$clr.ambient": "ambient",
-      "$clr.diffuse": "color",
-      "$clr.specular": "specular",
-      "$clr.emissive": "emissive",
-      "$clr.transparent": "transparent",
-      "$clr.reflective": "reflect",
-      "$mat.shininess": "shininess",
-      "$mat.reflectivity": "reflectivity",
-      "$mat.refracti": "refraction",
-      "$tex.file": "map"
-    };
-    var nameTypeMapping = {
-      "?mat.name": "string",
-      "$mat.shadingm": "bool",
-      "$mat.twosided": "bool",
-      "$mat.wireframe": "bool",
-      "$clr.ambient": "color",
-      "$clr.diffuse": "color",
-      "$clr.specular": "color",
-      "$clr.emissive": "color",
-      "$clr.transparent": "color",
-      "$clr.reflective": "color",
-      "$mat.shininess": "float",
-      "$mat.reflectivity": "float",
-      "$mat.refracti": "float",
-      "$tex.file": "map"
-    };
-    class aiMaterial {
-      constructor() {
-        this.mNumAllocated = 0;
-        this.mNumProperties = 0;
-        this.mProperties = [];
-        this.toTHREE = function() {
-          var mat = new three_module.MeshPhongMaterial();
-          for (let i = 0; i < this.mProperties.length; i++) {
-            if (nameTypeMapping[this.mProperties[i].mKey] == "float") {
-              mat[namePropMapping[this.mProperties[i].mKey]] = this.mProperties[i].dataAsFloat();
-            }
-            if (nameTypeMapping[this.mProperties[i].mKey] == "color") {
-              mat[namePropMapping[this.mProperties[i].mKey]] = this.mProperties[i].dataAsColor();
-            }
-            if (nameTypeMapping[this.mProperties[i].mKey] == "bool") {
-              mat[namePropMapping[this.mProperties[i].mKey]] = this.mProperties[i].dataAsBool();
-            }
-            if (nameTypeMapping[this.mProperties[i].mKey] == "string") {
-              mat[namePropMapping[this.mProperties[i].mKey]] = this.mProperties[i].dataAsString();
-            }
-            if (nameTypeMapping[this.mProperties[i].mKey] == "map") {
-              var prop = this.mProperties[i];
-              if (prop.mSemantic == aiTextureType_DIFFUSE)
-                mat.map = this.mProperties[i].dataAsMap();
-              if (prop.mSemantic == aiTextureType_NORMALS)
-                mat.normalMap = this.mProperties[i].dataAsMap();
-              if (prop.mSemantic == aiTextureType_LIGHTMAP)
-                mat.lightMap = this.mProperties[i].dataAsMap();
-              if (prop.mSemantic == aiTextureType_OPACITY)
-                mat.alphaMap = this.mProperties[i].dataAsMap();
-            }
-          }
-          mat.ambient.r = 0.53;
-          mat.ambient.g = 0.53;
-          mat.ambient.b = 0.53;
-          mat.color.r = 1;
-          mat.color.g = 1;
-          mat.color.b = 1;
-          return mat;
-        };
-      }
-    }
-    function veclerp(v1, v2, l) {
-      var v = new three_module.Vector3();
-      var lm1 = 1 - l;
-      v.x = v1.x * l + v2.x * lm1;
-      v.y = v1.y * l + v2.y * lm1;
-      v.z = v1.z * l + v2.z * lm1;
-      return v;
-    }
-    function quatlerp(q1, q2, l) {
-      return q1.clone().slerp(q2, 1 - l);
-    }
-    function sampleTrack(keys, time, lne, lerp) {
-      if (keys.length == 1)
-        return keys[0].mValue.toTHREE();
-      var dist = Infinity;
-      var key = null;
-      var nextKey = null;
-      for (let i = 0; i < keys.length; i++) {
-        var timeDist = Math.abs(keys[i].mTime - time);
-        if (timeDist < dist && keys[i].mTime <= time) {
-          dist = timeDist;
-          key = keys[i];
-          nextKey = keys[i + 1];
-        }
-      }
-      if (!key) {
-        return null;
-      } else if (nextKey) {
-        var dT = nextKey.mTime - key.mTime;
-        var T = key.mTime - time;
-        var l = T / dT;
-        return lerp(key.mValue.toTHREE(), nextKey.mValue.toTHREE(), l);
-      } else {
-        nextKey = keys[0].clone();
-        nextKey.mTime += lne;
-        var dT = nextKey.mTime - key.mTime;
-        var T = key.mTime - time;
-        var l = T / dT;
-        return lerp(key.mValue.toTHREE(), nextKey.mValue.toTHREE(), l);
-      }
-    }
-    class aiNodeAnim {
-      constructor() {
-        this.mNodeName = "";
-        this.mNumPositionKeys = 0;
-        this.mNumRotationKeys = 0;
-        this.mNumScalingKeys = 0;
-        this.mPositionKeys = [];
-        this.mRotationKeys = [];
-        this.mScalingKeys = [];
-        this.mPreState = "";
-        this.mPostState = "";
-        this.init = function(tps) {
-          if (!tps)
-            tps = 1;
-          function t(t2) {
-            t2.mTime /= tps;
-          }
-          this.mPositionKeys.forEach(t);
-          this.mRotationKeys.forEach(t);
-          this.mScalingKeys.forEach(t);
-        };
-        this.sortKeys = function() {
-          function comp(a, b) {
-            return a.mTime - b.mTime;
-          }
-          this.mPositionKeys.sort(comp);
-          this.mRotationKeys.sort(comp);
-          this.mScalingKeys.sort(comp);
-        };
-        this.getLength = function() {
-          return Math.max(
-            Math.max.apply(
-              null,
-              this.mPositionKeys.map(function(a) {
-                return a.mTime;
-              })
-            ),
-            Math.max.apply(
-              null,
-              this.mRotationKeys.map(function(a) {
-                return a.mTime;
-              })
-            ),
-            Math.max.apply(
-              null,
-              this.mScalingKeys.map(function(a) {
-                return a.mTime;
-              })
-            )
-          );
-        };
-        this.toTHREE = function(o) {
-          this.sortKeys();
-          var length = this.getLength();
-          var track = new Virtulous.KeyFrameTrack();
-          for (let i = 0; i < length; i += 0.05) {
-            var matrix = new three_module.Matrix4();
-            var time = i;
-            var pos = sampleTrack(this.mPositionKeys, time, length, veclerp);
-            var scale = sampleTrack(this.mScalingKeys, time, length, veclerp);
-            var rotation = sampleTrack(this.mRotationKeys, time, length, quatlerp);
-            matrix.compose(pos, rotation, scale);
-            var key = new Virtulous.KeyFrame(time, matrix);
-            track.addKey(key);
-          }
-          track.target = o.findNode(this.mNodeName).toTHREE();
-          var tracks = [track];
-          if (o.nodeToBoneMap[this.mNodeName]) {
-            for (let i = 0; i < o.nodeToBoneMap[this.mNodeName].length; i++) {
-              var t2 = track.clone();
-              t2.target = o.nodeToBoneMap[this.mNodeName][i];
-              tracks.push(t2);
-            }
-          }
-          return tracks;
-        };
-      }
-    }
-    class aiAnimation {
-      constructor() {
-        this.mName = "";
-        this.mDuration = 0;
-        this.mTicksPerSecond = 0;
-        this.mNumChannels = 0;
-        this.mChannels = [];
-        this.toTHREE = function(root) {
-          var animationHandle = new Virtulous.Animation();
-          for (let i in this.mChannels) {
-            this.mChannels[i].init(this.mTicksPerSecond);
-            var tracks = this.mChannels[i].toTHREE(root);
-            for (let j in tracks) {
-              tracks[j].init();
-              animationHandle.addTrack(tracks[j]);
-            }
-          }
-          animationHandle.length = Math.max.apply(
-            null,
-            animationHandle.tracks.map(function(e) {
-              return e.length;
-            })
-          );
-          return animationHandle;
-        };
-      }
-    }
-    class aiTexture {
-      constructor() {
-        this.mWidth = 0;
-        this.mHeight = 0;
-        this.texAchFormatHint = [];
-        this.pcData = [];
-      }
-    }
-    class aiLight {
-      constructor() {
-        this.mName = "";
-        this.mType = 0;
-        this.mAttenuationConstant = 0;
-        this.mAttenuationLinear = 0;
-        this.mAttenuationQuadratic = 0;
-        this.mAngleInnerCone = 0;
-        this.mAngleOuterCone = 0;
-        this.mColorDiffuse = null;
-        this.mColorSpecular = null;
-        this.mColorAmbient = null;
-      }
-    }
-    class aiCamera {
-      constructor() {
-        this.mName = "";
-        this.mPosition = null;
-        this.mLookAt = null;
-        this.mUp = null;
-        this.mHorizontalFOV = 0;
-        this.mClipPlaneNear = 0;
-        this.mClipPlaneFar = 0;
-        this.mAspect = 0;
-      }
-    }
-    class aiScene {
-      constructor() {
-        this.versionMajor = 0;
-        this.versionMinor = 0;
-        this.versionRevision = 0;
-        this.compileFlags = 0;
-        this.mFlags = 0;
-        this.mNumMeshes = 0;
-        this.mNumMaterials = 0;
-        this.mNumAnimations = 0;
-        this.mNumTextures = 0;
-        this.mNumLights = 0;
-        this.mNumCameras = 0;
-        this.mRootNode = null;
-        this.mMeshes = [];
-        this.mMaterials = [];
-        this.mAnimations = [];
-        this.mLights = [];
-        this.mCameras = [];
-        this.nodeToBoneMap = {};
-        this.findNode = function(name, root) {
-          if (!root) {
-            root = this.mRootNode;
-          }
-          if (root.mName == name) {
-            return root;
-          }
-          for (let i = 0; i < root.mChildren.length; i++) {
-            var ret = this.findNode(name, root.mChildren[i]);
-            if (ret)
-              return ret;
-          }
-          return null;
-        };
-        this.toTHREE = function() {
-          this.nodeCount = 0;
-          markBones(this);
-          var o = this.mRootNode.toTHREE(this);
-          for (let i in this.mMeshes)
-            this.mMeshes[i].hookupSkeletons(this);
-          if (this.mAnimations.length > 0) {
-            var a = this.mAnimations[0].toTHREE(this);
-          }
-          return { object: o, animation: a };
-        };
-      }
-    }
-    class aiMatrix4 {
-      constructor() {
-        this.elements = [[], [], [], []];
-        this.toTHREE = function() {
-          var m = new three_module.Matrix4();
-          for (let i = 0; i < 4; ++i) {
-            for (let i2 = 0; i2 < 4; ++i2) {
-              m.elements[i * 4 + i2] = this.elements[i2][i];
-            }
-          }
-          return m;
-        };
-      }
-    }
-    var littleEndian = true;
-    function readFloat(dataview) {
-      var val = dataview.getFloat32(dataview.readOffset, littleEndian);
-      dataview.readOffset += 4;
-      return val;
-    }
-    function Read_double(dataview) {
-      var val = dataview.getFloat64(dataview.readOffset, littleEndian);
-      dataview.readOffset += 8;
-      return val;
-    }
-    function Read_uint8_t(dataview) {
-      var val = dataview.getUint8(dataview.readOffset);
-      dataview.readOffset += 1;
-      return val;
-    }
-    function Read_uint16_t(dataview) {
-      var val = dataview.getUint16(dataview.readOffset, littleEndian);
-      dataview.readOffset += 2;
-      return val;
-    }
-    function Read_unsigned_int(dataview) {
-      var val = dataview.getUint32(dataview.readOffset, littleEndian);
-      dataview.readOffset += 4;
-      return val;
-    }
-    function Read_uint32_t(dataview) {
-      var val = dataview.getUint32(dataview.readOffset, littleEndian);
-      dataview.readOffset += 4;
-      return val;
-    }
-    function Read_aiVector3D(stream) {
-      var v = new aiVector3D();
-      v.x = readFloat(stream);
-      v.y = readFloat(stream);
-      v.z = readFloat(stream);
-      return v;
-    }
-    function Read_aiColor3D(stream) {
-      var c = new aiColor3D();
-      c.r = readFloat(stream);
-      c.g = readFloat(stream);
-      c.b = readFloat(stream);
-      return c;
-    }
-    function Read_aiQuaternion(stream) {
-      var v = new aiQuaternion();
-      v.w = readFloat(stream);
-      v.x = readFloat(stream);
-      v.y = readFloat(stream);
-      v.z = readFloat(stream);
-      return v;
-    }
-    function Read_aiString(stream) {
-      var s = new aiString();
-      var stringlengthbytes = Read_unsigned_int(stream);
-      stream.ReadBytes(s.data, 1, stringlengthbytes);
-      return s.toString();
-    }
-    function Read_aiVertexWeight(stream) {
-      var w = new aiVertexWeight();
-      w.mVertexId = Read_unsigned_int(stream);
-      w.mWeight = readFloat(stream);
-      return w;
-    }
-    function Read_aiMatrix4x4(stream) {
-      var m = new aiMatrix4();
-      for (let i = 0; i < 4; ++i) {
-        for (let i2 = 0; i2 < 4; ++i2) {
-          m.elements[i][i2] = readFloat(stream);
-        }
-      }
-      return m;
-    }
-    function Read_aiVectorKey(stream) {
-      var v = new aiVectorKey();
-      v.mTime = Read_double(stream);
-      v.mValue = Read_aiVector3D(stream);
-      return v;
-    }
-    function Read_aiQuatKey(stream) {
-      var v = new aiQuatKey();
-      v.mTime = Read_double(stream);
-      v.mValue = Read_aiQuaternion(stream);
-      return v;
-    }
-    function ReadArray_aiVertexWeight(stream, data, size) {
-      for (let i = 0; i < size; i++)
-        data[i] = Read_aiVertexWeight(stream);
-    }
-    function ReadArray_aiVectorKey(stream, data, size) {
-      for (let i = 0; i < size; i++)
-        data[i] = Read_aiVectorKey(stream);
-    }
-    function ReadArray_aiQuatKey(stream, data, size) {
-      for (let i = 0; i < size; i++)
-        data[i] = Read_aiQuatKey(stream);
-    }
-    function ReadBounds(stream, T, n) {
-      return stream.Seek(sizeof(T) * n, aiOrigin_CUR);
-    }
-    function ai_assert(bool) {
-      if (!bool)
-        throw "asset failed";
-    }
-    function ReadBinaryNode(stream, parent, depth) {
-      var chunkID = Read_uint32_t(stream);
-      ai_assert(chunkID == ASSBIN_CHUNK_AINODE);
-      Read_uint32_t(stream);
-      var node = new aiNode();
-      node.mParent = parent;
-      node.mDepth = depth;
-      node.mName = Read_aiString(stream);
-      node.mTransformation = Read_aiMatrix4x4(stream);
-      node.mNumChildren = Read_unsigned_int(stream);
-      node.mNumMeshes = Read_unsigned_int(stream);
-      if (node.mNumMeshes) {
-        node.mMeshes = [];
-        for (let i = 0; i < node.mNumMeshes; ++i) {
-          node.mMeshes[i] = Read_unsigned_int(stream);
-        }
-      }
-      if (node.mNumChildren) {
-        node.mChildren = [];
-        for (let i = 0; i < node.mNumChildren; ++i) {
-          var node2 = ReadBinaryNode(stream, node, depth++);
-          node.mChildren[i] = node2;
-        }
-      }
-      return node;
-    }
-    function ReadBinaryBone(stream, b) {
-      var chunkID = Read_uint32_t(stream);
-      ai_assert(chunkID == ASSBIN_CHUNK_AIBONE);
-      Read_uint32_t(stream);
-      b.mName = Read_aiString(stream);
-      b.mNumWeights = Read_unsigned_int(stream);
-      b.mOffsetMatrix = Read_aiMatrix4x4(stream);
-      if (shortened) {
-        ReadBounds(stream, b.mWeights, b.mNumWeights);
-      } else {
-        b.mWeights = [];
-        ReadArray_aiVertexWeight(stream, b.mWeights, b.mNumWeights);
-      }
-      return b;
-    }
-    function ReadBinaryMesh(stream, mesh) {
-      var chunkID = Read_uint32_t(stream);
-      ai_assert(chunkID == ASSBIN_CHUNK_AIMESH);
-      Read_uint32_t(stream);
-      mesh.mPrimitiveTypes = Read_unsigned_int(stream);
-      mesh.mNumVertices = Read_unsigned_int(stream);
-      mesh.mNumFaces = Read_unsigned_int(stream);
-      mesh.mNumBones = Read_unsigned_int(stream);
-      mesh.mMaterialIndex = Read_unsigned_int(stream);
-      mesh.mNumUVComponents = [];
-      var c = Read_unsigned_int(stream);
-      if (c & ASSBIN_MESH_HAS_POSITIONS) {
-        if (shortened) {
-          ReadBounds(stream, mesh.mVertices, mesh.mNumVertices);
-        } else {
-          mesh.mVertices = [];
-          mesh.mVertexBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4);
-          stream.Seek(mesh.mNumVertices * 3 * 4, aiOrigin_CUR);
-        }
-      }
-      if (c & ASSBIN_MESH_HAS_NORMALS) {
-        if (shortened) {
-          ReadBounds(stream, mesh.mNormals, mesh.mNumVertices);
-        } else {
-          mesh.mNormals = [];
-          mesh.mNormalBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4);
-          stream.Seek(mesh.mNumVertices * 3 * 4, aiOrigin_CUR);
-        }
-      }
-      if (c & ASSBIN_MESH_HAS_TANGENTS_AND_BITANGENTS) {
-        if (shortened) {
-          ReadBounds(stream, mesh.mTangents, mesh.mNumVertices);
-          ReadBounds(stream, mesh.mBitangents, mesh.mNumVertices);
-        } else {
-          mesh.mTangents = [];
-          mesh.mTangentBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4);
-          stream.Seek(mesh.mNumVertices * 3 * 4, aiOrigin_CUR);
-          mesh.mBitangents = [];
-          mesh.mBitangentBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4);
-          stream.Seek(mesh.mNumVertices * 3 * 4, aiOrigin_CUR);
-        }
-      }
-      for (let n = 0; n < AI_MAX_NUMBER_OF_COLOR_SETS; ++n) {
-        if (!(c & ASSBIN_MESH_HAS_COLOR(n)))
-          break;
-        if (shortened) {
-          ReadBounds(stream, mesh.mColors[n], mesh.mNumVertices);
-        } else {
-          mesh.mColors[n] = [];
-          mesh.mColorBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 4 * 4);
-          stream.Seek(mesh.mNumVertices * 4 * 4, aiOrigin_CUR);
-        }
-      }
-      mesh.mTexCoordsBuffers = [];
-      for (let n = 0; n < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++n) {
-        if (!(c & ASSBIN_MESH_HAS_TEXCOORD(n)))
-          break;
-        mesh.mNumUVComponents[n] = Read_unsigned_int(stream);
-        if (shortened) {
-          ReadBounds(stream, mesh.mTextureCoords[n], mesh.mNumVertices);
-        } else {
-          mesh.mTextureCoords[n] = [];
-          mesh.mTexCoordsBuffers[n] = [];
-          for (let uv = 0; uv < mesh.mNumVertices; uv++) {
-            mesh.mTexCoordsBuffers[n].push(readFloat(stream));
-            mesh.mTexCoordsBuffers[n].push(readFloat(stream));
-            readFloat(stream);
-          }
-        }
-      }
-      if (shortened) {
-        Read_unsigned_int(stream);
-      } else {
-        mesh.mFaces = [];
-        mesh.mIndexArray = [];
-        for (let i = 0; i < mesh.mNumFaces; ++i) {
-          var f = mesh.mFaces[i] = new aiFace();
-          f.mNumIndices = Read_uint16_t(stream);
-          f.mIndices = [];
-          for (let a = 0; a < f.mNumIndices; ++a) {
-            if (mesh.mNumVertices < 1 << 16) {
-              f.mIndices[a] = Read_uint16_t(stream);
-            } else {
-              f.mIndices[a] = Read_unsigned_int(stream);
-            }
-          }
-          if (f.mNumIndices === 3) {
-            mesh.mIndexArray.push(f.mIndices[0]);
-            mesh.mIndexArray.push(f.mIndices[1]);
-            mesh.mIndexArray.push(f.mIndices[2]);
-          } else if (f.mNumIndices === 4) {
-            mesh.mIndexArray.push(f.mIndices[0]);
-            mesh.mIndexArray.push(f.mIndices[1]);
-            mesh.mIndexArray.push(f.mIndices[2]);
-            mesh.mIndexArray.push(f.mIndices[2]);
-            mesh.mIndexArray.push(f.mIndices[3]);
-            mesh.mIndexArray.push(f.mIndices[0]);
-          } else {
-            throw new Error("Sorry, can't currently triangulate polys. Use the triangulate preprocessor in Assimp.");
-          }
-        }
-      }
-      if (mesh.mNumBones) {
-        mesh.mBones = [];
-        for (let a = 0; a < mesh.mNumBones; ++a) {
-          mesh.mBones[a] = new aiBone();
-          ReadBinaryBone(stream, mesh.mBones[a]);
-        }
-      }
-    }
-    function ReadBinaryMaterialProperty(stream, prop) {
-      var chunkID = Read_uint32_t(stream);
-      ai_assert(chunkID == ASSBIN_CHUNK_AIMATERIALPROPERTY);
-      Read_uint32_t(stream);
-      prop.mKey = Read_aiString(stream);
-      prop.mSemantic = Read_unsigned_int(stream);
-      prop.mIndex = Read_unsigned_int(stream);
-      prop.mDataLength = Read_unsigned_int(stream);
-      prop.mType = Read_unsigned_int(stream);
-      prop.mData = [];
-      stream.ReadBytes(prop.mData, 1, prop.mDataLength);
-    }
-    function ReadBinaryMaterial(stream, mat) {
-      var chunkID = Read_uint32_t(stream);
-      ai_assert(chunkID == ASSBIN_CHUNK_AIMATERIAL);
-      Read_uint32_t(stream);
-      mat.mNumAllocated = mat.mNumProperties = Read_unsigned_int(stream);
-      if (mat.mNumProperties) {
-        if (mat.mProperties) {
-          delete mat.mProperties;
-        }
-        mat.mProperties = [];
-        for (let i = 0; i < mat.mNumProperties; ++i) {
-          mat.mProperties[i] = new aiMaterialProperty();
-          ReadBinaryMaterialProperty(stream, mat.mProperties[i]);
-        }
-      }
-    }
-    function ReadBinaryNodeAnim(stream, nd) {
-      var chunkID = Read_uint32_t(stream);
-      ai_assert(chunkID == ASSBIN_CHUNK_AINODEANIM);
-      Read_uint32_t(stream);
-      nd.mNodeName = Read_aiString(stream);
-      nd.mNumPositionKeys = Read_unsigned_int(stream);
-      nd.mNumRotationKeys = Read_unsigned_int(stream);
-      nd.mNumScalingKeys = Read_unsigned_int(stream);
-      nd.mPreState = Read_unsigned_int(stream);
-      nd.mPostState = Read_unsigned_int(stream);
-      if (nd.mNumPositionKeys) {
-        if (shortened) {
-          ReadBounds(stream, nd.mPositionKeys, nd.mNumPositionKeys);
-        } else {
-          nd.mPositionKeys = [];
-          ReadArray_aiVectorKey(stream, nd.mPositionKeys, nd.mNumPositionKeys);
-        }
-      }
-      if (nd.mNumRotationKeys) {
-        if (shortened) {
-          ReadBounds(stream, nd.mRotationKeys, nd.mNumRotationKeys);
-        } else {
-          nd.mRotationKeys = [];
-          ReadArray_aiQuatKey(stream, nd.mRotationKeys, nd.mNumRotationKeys);
-        }
-      }
-      if (nd.mNumScalingKeys) {
-        if (shortened) {
-          ReadBounds(stream, nd.mScalingKeys, nd.mNumScalingKeys);
-        } else {
-          nd.mScalingKeys = [];
-          ReadArray_aiVectorKey(stream, nd.mScalingKeys, nd.mNumScalingKeys);
-        }
-      }
-    }
-    function ReadBinaryAnim(stream, anim) {
-      var chunkID = Read_uint32_t(stream);
-      ai_assert(chunkID == ASSBIN_CHUNK_AIANIMATION);
-      Read_uint32_t(stream);
-      anim.mName = Read_aiString(stream);
-      anim.mDuration = Read_double(stream);
-      anim.mTicksPerSecond = Read_double(stream);
-      anim.mNumChannels = Read_unsigned_int(stream);
-      if (anim.mNumChannels) {
-        anim.mChannels = [];
-        for (let a = 0; a < anim.mNumChannels; ++a) {
-          anim.mChannels[a] = new aiNodeAnim();
-          ReadBinaryNodeAnim(stream, anim.mChannels[a]);
-        }
-      }
-    }
-    function ReadBinaryTexture(stream, tex) {
-      var chunkID = Read_uint32_t(stream);
-      ai_assert(chunkID == ASSBIN_CHUNK_AITEXTURE);
-      Read_uint32_t(stream);
-      tex.mWidth = Read_unsigned_int(stream);
-      tex.mHeight = Read_unsigned_int(stream);
-      stream.ReadBytes(tex.achFormatHint, 1, 4);
-      if (!shortened) {
-        if (!tex.mHeight) {
-          tex.pcData = [];
-          stream.ReadBytes(tex.pcData, 1, tex.mWidth);
-        } else {
-          tex.pcData = [];
-          stream.ReadBytes(tex.pcData, 1, tex.mWidth * tex.mHeight * 4);
-        }
-      }
-    }
-    function ReadBinaryLight(stream, l) {
-      var chunkID = Read_uint32_t(stream);
-      ai_assert(chunkID == ASSBIN_CHUNK_AILIGHT);
-      Read_uint32_t(stream);
-      l.mName = Read_aiString(stream);
-      l.mType = Read_unsigned_int(stream);
-      if (l.mType != aiLightSource_DIRECTIONAL) {
-        l.mAttenuationConstant = readFloat(stream);
-        l.mAttenuationLinear = readFloat(stream);
-        l.mAttenuationQuadratic = readFloat(stream);
-      }
-      l.mColorDiffuse = Read_aiColor3D(stream);
-      l.mColorSpecular = Read_aiColor3D(stream);
-      l.mColorAmbient = Read_aiColor3D(stream);
-      if (l.mType == aiLightSource_SPOT) {
-        l.mAngleInnerCone = readFloat(stream);
-        l.mAngleOuterCone = readFloat(stream);
-      }
-    }
-    function ReadBinaryCamera(stream, cam) {
-      var chunkID = Read_uint32_t(stream);
-      ai_assert(chunkID == ASSBIN_CHUNK_AICAMERA);
-      Read_uint32_t(stream);
-      cam.mName = Read_aiString(stream);
-      cam.mPosition = Read_aiVector3D(stream);
-      cam.mLookAt = Read_aiVector3D(stream);
-      cam.mUp = Read_aiVector3D(stream);
-      cam.mHorizontalFOV = readFloat(stream);
-      cam.mClipPlaneNear = readFloat(stream);
-      cam.mClipPlaneFar = readFloat(stream);
-      cam.mAspect = readFloat(stream);
-    }
-    function ReadBinaryScene(stream, scene) {
-      var chunkID = Read_uint32_t(stream);
-      ai_assert(chunkID == ASSBIN_CHUNK_AISCENE);
-      Read_uint32_t(stream);
-      scene.mFlags = Read_unsigned_int(stream);
-      scene.mNumMeshes = Read_unsigned_int(stream);
-      scene.mNumMaterials = Read_unsigned_int(stream);
-      scene.mNumAnimations = Read_unsigned_int(stream);
-      scene.mNumTextures = Read_unsigned_int(stream);
-      scene.mNumLights = Read_unsigned_int(stream);
-      scene.mNumCameras = Read_unsigned_int(stream);
-      scene.mRootNode = new aiNode();
-      scene.mRootNode = ReadBinaryNode(stream, null, 0);
-      if (scene.mNumMeshes) {
-        scene.mMeshes = [];
-        for (let i = 0; i < scene.mNumMeshes; ++i) {
-          scene.mMeshes[i] = new aiMesh();
-          ReadBinaryMesh(stream, scene.mMeshes[i]);
-        }
-      }
-      if (scene.mNumMaterials) {
-        scene.mMaterials = [];
-        for (let i = 0; i < scene.mNumMaterials; ++i) {
-          scene.mMaterials[i] = new aiMaterial();
-          ReadBinaryMaterial(stream, scene.mMaterials[i]);
-        }
-      }
-      if (scene.mNumAnimations) {
-        scene.mAnimations = [];
-        for (let i = 0; i < scene.mNumAnimations; ++i) {
-          scene.mAnimations[i] = new aiAnimation();
-          ReadBinaryAnim(stream, scene.mAnimations[i]);
-        }
-      }
-      if (scene.mNumTextures) {
-        scene.mTextures = [];
-        for (let i = 0; i < scene.mNumTextures; ++i) {
-          scene.mTextures[i] = new aiTexture();
-          ReadBinaryTexture(stream, scene.mTextures[i]);
-        }
-      }
-      if (scene.mNumLights) {
-        scene.mLights = [];
-        for (let i = 0; i < scene.mNumLights; ++i) {
-          scene.mLights[i] = new aiLight();
-          ReadBinaryLight(stream, scene.mLights[i]);
-        }
-      }
-      if (scene.mNumCameras) {
-        scene.mCameras = [];
-        for (let i = 0; i < scene.mNumCameras; ++i) {
-          scene.mCameras[i] = new aiCamera();
-          ReadBinaryCamera(stream, scene.mCameras[i]);
-        }
-      }
-    }
-    var aiOrigin_CUR = 0;
-    var aiOrigin_BEG = 1;
-    function extendStream(stream) {
-      stream.readOffset = 0;
-      stream.Seek = function(off, ori) {
-        if (ori == aiOrigin_CUR) {
-          stream.readOffset += off;
-        }
-        if (ori == aiOrigin_BEG) {
-          stream.readOffset = off;
-        }
-      };
-      stream.ReadBytes = function(buff, size, n) {
-        var bytes = size * n;
-        for (let i = 0; i < bytes; i++)
-          buff[i] = Read_uint8_t(this);
-      };
-      stream.subArray32 = function(start, end) {
-        var buff = this.buffer;
-        var newbuff = buff.slice(start, end);
-        return new Float32Array(newbuff);
-      };
-      stream.subArrayUint16 = function(start, end) {
-        var buff = this.buffer;
-        var newbuff = buff.slice(start, end);
-        return new Uint16Array(newbuff);
-      };
-      stream.subArrayUint8 = function(start, end) {
-        var buff = this.buffer;
-        var newbuff = buff.slice(start, end);
-        return new Uint8Array(newbuff);
-      };
-      stream.subArrayUint32 = function(start, end) {
-        var buff = this.buffer;
-        var newbuff = buff.slice(start, end);
-        return new Uint32Array(newbuff);
-      };
-    }
-    var shortened, compressed;
-    function InternReadFile(pFiledata) {
-      var pScene = new aiScene();
-      var stream = new DataView(pFiledata);
-      extendStream(stream);
-      stream.Seek(44, aiOrigin_CUR);
-      pScene.versionMajor = Read_unsigned_int(stream);
-      pScene.versionMinor = Read_unsigned_int(stream);
-      pScene.versionRevision = Read_unsigned_int(stream);
-      pScene.compileFlags = Read_unsigned_int(stream);
-      shortened = Read_uint16_t(stream) > 0;
-      compressed = Read_uint16_t(stream) > 0;
-      if (shortened)
-        throw "Shortened binaries are not supported!";
-      stream.Seek(256, aiOrigin_CUR);
-      stream.Seek(128, aiOrigin_CUR);
-      stream.Seek(64, aiOrigin_CUR);
-      if (compressed) {
-        var uncompressedSize = Read_uint32_t(stream);
-        var compressedSize = stream.FileSize() - stream.Tell();
-        var compressedData = [];
-        stream.Read(compressedData, 1, compressedSize);
-        var uncompressedData = [];
-        uncompress(uncompressedData, uncompressedSize, compressedData, compressedSize);
-        var buff = new ArrayBuffer(uncompressedData);
-        ReadBinaryScene(buff, pScene);
-      } else {
-        ReadBinaryScene(stream, pScene);
-      }
-      return pScene.toTHREE();
-    }
-    return InternReadFile(buffer);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/MDDLoader.js
-
-class MDDLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setResponseType("arraybuffer");
-    loader.load(
-      url,
-      function(data) {
-        onLoad(scope.parse(data));
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(data) {
-    const view = new DataView(data);
-    const totalFrames = view.getUint32(0);
-    const totalPoints = view.getUint32(4);
-    let offset = 8;
-    const times = new Float32Array(totalFrames);
-    const values = new Float32Array(totalFrames * totalFrames).fill(0);
-    for (let i = 0; i < totalFrames; i++) {
-      times[i] = view.getFloat32(offset);
-      offset += 4;
-      values[totalFrames * i + i] = 1;
-    }
-    const track = new three_module.NumberKeyframeTrack(".morphTargetInfluences", times, values);
-    const clip = new three_module.AnimationClip("default", times[times.length - 1], [track]);
-    const morphTargets = [];
-    for (let i = 0; i < totalFrames; i++) {
-      const morphTarget = new Float32Array(totalPoints * 3);
-      for (let j = 0; j < totalPoints; j++) {
-        const stride = j * 3;
-        morphTarget[stride + 0] = view.getFloat32(offset);
-        offset += 4;
-        morphTarget[stride + 1] = view.getFloat32(offset);
-        offset += 4;
-        morphTarget[stride + 2] = view.getFloat32(offset);
-        offset += 4;
-      }
-      const attribute = new three_module.BufferAttribute(morphTarget, 3);
-      attribute.name = "morph_" + i;
-      morphTargets.push(attribute);
-    }
-    return {
-      morphTargets,
-      clip
-    };
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/EXRLoader.js
-
-
-class EXRLoader extends three_module.DataTextureLoader {
-  constructor(manager) {
-    super(manager);
-    this.type = three_module.HalfFloatType;
-  }
-  parse(buffer) {
-    const USHORT_RANGE = 1 << 16;
-    const BITMAP_SIZE = USHORT_RANGE >> 3;
-    const HUF_ENCBITS = 16;
-    const HUF_DECBITS = 14;
-    const HUF_ENCSIZE = (1 << HUF_ENCBITS) + 1;
-    const HUF_DECSIZE = 1 << HUF_DECBITS;
-    const HUF_DECMASK = HUF_DECSIZE - 1;
-    const NBITS = 16;
-    const A_OFFSET = 1 << NBITS - 1;
-    const MOD_MASK = (1 << NBITS) - 1;
-    const SHORT_ZEROCODE_RUN = 59;
-    const LONG_ZEROCODE_RUN = 63;
-    const SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN;
-    const ULONG_SIZE = 8;
-    const FLOAT32_SIZE = 4;
-    const INT32_SIZE = 4;
-    const INT16_SIZE = 2;
-    const INT8_SIZE = 1;
-    const STATIC_HUFFMAN = 0;
-    const DEFLATE = 1;
-    const UNKNOWN = 0;
-    const LOSSY_DCT = 1;
-    const RLE = 2;
-    const logBase = Math.pow(2.7182818, 2.2);
-    function reverseLutFromBitmap(bitmap, lut) {
-      var k = 0;
-      for (var i = 0; i < USHORT_RANGE; ++i) {
-        if (i == 0 || bitmap[i >> 3] & 1 << (i & 7)) {
-          lut[k++] = i;
-        }
-      }
-      var n = k - 1;
-      while (k < USHORT_RANGE)
-        lut[k++] = 0;
-      return n;
-    }
-    function hufClearDecTable(hdec) {
-      for (var i = 0; i < HUF_DECSIZE; i++) {
-        hdec[i] = {};
-        hdec[i].len = 0;
-        hdec[i].lit = 0;
-        hdec[i].p = null;
-      }
-    }
-    const getBitsReturn = { l: 0, c: 0, lc: 0 };
-    function getBits(nBits, c, lc, uInt8Array2, inOffset) {
-      while (lc < nBits) {
-        c = c << 8 | parseUint8Array(uInt8Array2, inOffset);
-        lc += 8;
-      }
-      lc -= nBits;
-      getBitsReturn.l = c >> lc & (1 << nBits) - 1;
-      getBitsReturn.c = c;
-      getBitsReturn.lc = lc;
-    }
-    const hufTableBuffer = new Array(59);
-    function hufCanonicalCodeTable(hcode) {
-      for (var i = 0; i <= 58; ++i)
-        hufTableBuffer[i] = 0;
-      for (var i = 0; i < HUF_ENCSIZE; ++i)
-        hufTableBuffer[hcode[i]] += 1;
-      var c = 0;
-      for (var i = 58; i > 0; --i) {
-        var nc = c + hufTableBuffer[i] >> 1;
-        hufTableBuffer[i] = c;
-        c = nc;
-      }
-      for (var i = 0; i < HUF_ENCSIZE; ++i) {
-        var l = hcode[i];
-        if (l > 0)
-          hcode[i] = l | hufTableBuffer[l]++ << 6;
-      }
-    }
-    function hufUnpackEncTable(uInt8Array2, inDataView, inOffset, ni, im, iM, hcode) {
-      var p = inOffset;
-      var c = 0;
-      var lc = 0;
-      for (; im <= iM; im++) {
-        if (p.value - inOffset.value > ni)
-          return false;
-        getBits(6, c, lc, uInt8Array2, p);
-        var l = getBitsReturn.l;
-        c = getBitsReturn.c;
-        lc = getBitsReturn.lc;
-        hcode[im] = l;
-        if (l == LONG_ZEROCODE_RUN) {
-          if (p.value - inOffset.value > ni) {
-            throw "Something wrong with hufUnpackEncTable";
-          }
-          getBits(8, c, lc, uInt8Array2, p);
-          var zerun = getBitsReturn.l + SHORTEST_LONG_RUN;
-          c = getBitsReturn.c;
-          lc = getBitsReturn.lc;
-          if (im + zerun > iM + 1) {
-            throw "Something wrong with hufUnpackEncTable";
-          }
-          while (zerun--)
-            hcode[im++] = 0;
-          im--;
-        } else if (l >= SHORT_ZEROCODE_RUN) {
-          var zerun = l - SHORT_ZEROCODE_RUN + 2;
-          if (im + zerun > iM + 1) {
-            throw "Something wrong with hufUnpackEncTable";
-          }
-          while (zerun--)
-            hcode[im++] = 0;
-          im--;
-        }
-      }
-      hufCanonicalCodeTable(hcode);
-    }
-    function hufLength(code) {
-      return code & 63;
-    }
-    function hufCode(code) {
-      return code >> 6;
-    }
-    function hufBuildDecTable(hcode, im, iM, hdecod) {
-      for (; im <= iM; im++) {
-        var c = hufCode(hcode[im]);
-        var l = hufLength(hcode[im]);
-        if (c >> l) {
-          throw "Invalid table entry";
-        }
-        if (l > HUF_DECBITS) {
-          var pl = hdecod[c >> l - HUF_DECBITS];
-          if (pl.len) {
-            throw "Invalid table entry";
-          }
-          pl.lit++;
-          if (pl.p) {
-            var p = pl.p;
-            pl.p = new Array(pl.lit);
-            for (var i = 0; i < pl.lit - 1; ++i) {
-              pl.p[i] = p[i];
-            }
-          } else {
-            pl.p = new Array(1);
-          }
-          pl.p[pl.lit - 1] = im;
-        } else if (l) {
-          var plOffset = 0;
-          for (var i = 1 << HUF_DECBITS - l; i > 0; i--) {
-            var pl = hdecod[(c << HUF_DECBITS - l) + plOffset];
-            if (pl.len || pl.p) {
-              throw "Invalid table entry";
-            }
-            pl.len = l;
-            pl.lit = im;
-            plOffset++;
-          }
-        }
-      }
-      return true;
-    }
-    const getCharReturn = { c: 0, lc: 0 };
-    function getChar(c, lc, uInt8Array2, inOffset) {
-      c = c << 8 | parseUint8Array(uInt8Array2, inOffset);
-      lc += 8;
-      getCharReturn.c = c;
-      getCharReturn.lc = lc;
-    }
-    const getCodeReturn = { c: 0, lc: 0 };
-    function getCode(po, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outBufferOffset, outBufferEndOffset) {
-      if (po == rlc) {
-        if (lc < 8) {
-          getChar(c, lc, uInt8Array2, inOffset);
-          c = getCharReturn.c;
-          lc = getCharReturn.lc;
-        }
-        lc -= 8;
-        var cs = c >> lc;
-        var cs = new Uint8Array([cs])[0];
-        if (outBufferOffset.value + cs > outBufferEndOffset) {
-          return false;
-        }
-        var s = outBuffer[outBufferOffset.value - 1];
-        while (cs-- > 0) {
-          outBuffer[outBufferOffset.value++] = s;
-        }
-      } else if (outBufferOffset.value < outBufferEndOffset) {
-        outBuffer[outBufferOffset.value++] = po;
-      } else {
-        return false;
-      }
-      getCodeReturn.c = c;
-      getCodeReturn.lc = lc;
-    }
-    function UInt16(value) {
-      return value & 65535;
-    }
-    function Int16(value) {
-      var ref = UInt16(value);
-      return ref > 32767 ? ref - 65536 : ref;
-    }
-    const wdec14Return = { a: 0, b: 0 };
-    function wdec14(l, h) {
-      var ls = Int16(l);
-      var hs = Int16(h);
-      var hi = hs;
-      var ai = ls + (hi & 1) + (hi >> 1);
-      var as = ai;
-      var bs = ai - hi;
-      wdec14Return.a = as;
-      wdec14Return.b = bs;
-    }
-    function wdec16(l, h) {
-      var m = UInt16(l);
-      var d = UInt16(h);
-      var bb = m - (d >> 1) & MOD_MASK;
-      var aa = d + bb - A_OFFSET & MOD_MASK;
-      wdec14Return.a = aa;
-      wdec14Return.b = bb;
-    }
-    function wav2Decode(buffer2, j, nx, ox, ny, oy, mx) {
-      var w14 = mx < 1 << 14;
-      var n = nx > ny ? ny : nx;
-      var p = 1;
-      var p2;
-      while (p <= n)
-        p <<= 1;
-      p >>= 1;
-      p2 = p;
-      p >>= 1;
-      while (p >= 1) {
-        var py = 0;
-        var ey = py + oy * (ny - p2);
-        var oy1 = oy * p;
-        var oy2 = oy * p2;
-        var ox1 = ox * p;
-        var ox2 = ox * p2;
-        var i00, i01, i10, i11;
-        for (; py <= ey; py += oy2) {
-          var px = py;
-          var ex = py + ox * (nx - p2);
-          for (; px <= ex; px += ox2) {
-            var p01 = px + ox1;
-            var p10 = px + oy1;
-            var p11 = p10 + ox1;
-            if (w14) {
-              wdec14(buffer2[px + j], buffer2[p10 + j]);
-              i00 = wdec14Return.a;
-              i10 = wdec14Return.b;
-              wdec14(buffer2[p01 + j], buffer2[p11 + j]);
-              i01 = wdec14Return.a;
-              i11 = wdec14Return.b;
-              wdec14(i00, i01);
-              buffer2[px + j] = wdec14Return.a;
-              buffer2[p01 + j] = wdec14Return.b;
-              wdec14(i10, i11);
-              buffer2[p10 + j] = wdec14Return.a;
-              buffer2[p11 + j] = wdec14Return.b;
-            } else {
-              wdec16(buffer2[px + j], buffer2[p10 + j]);
-              i00 = wdec14Return.a;
-              i10 = wdec14Return.b;
-              wdec16(buffer2[p01 + j], buffer2[p11 + j]);
-              i01 = wdec14Return.a;
-              i11 = wdec14Return.b;
-              wdec16(i00, i01);
-              buffer2[px + j] = wdec14Return.a;
-              buffer2[p01 + j] = wdec14Return.b;
-              wdec16(i10, i11);
-              buffer2[p10 + j] = wdec14Return.a;
-              buffer2[p11 + j] = wdec14Return.b;
-            }
-          }
-          if (nx & p) {
-            var p10 = px + oy1;
-            if (w14)
-              wdec14(buffer2[px + j], buffer2[p10 + j]);
-            else
-              wdec16(buffer2[px + j], buffer2[p10 + j]);
-            i00 = wdec14Return.a;
-            buffer2[p10 + j] = wdec14Return.b;
-            buffer2[px + j] = i00;
-          }
-        }
-        if (ny & p) {
-          var px = py;
-          var ex = py + ox * (nx - p2);
-          for (; px <= ex; px += ox2) {
-            var p01 = px + ox1;
-            if (w14)
-              wdec14(buffer2[px + j], buffer2[p01 + j]);
-            else
-              wdec16(buffer2[px + j], buffer2[p01 + j]);
-            i00 = wdec14Return.a;
-            buffer2[p01 + j] = wdec14Return.b;
-            buffer2[px + j] = i00;
-          }
-        }
-        p2 = p;
-        p >>= 1;
-      }
-      return py;
-    }
-    function hufDecode(encodingTable, decodingTable, uInt8Array2, inDataView, inOffset, ni, rlc, no, outBuffer, outOffset) {
-      var c = 0;
-      var lc = 0;
-      var outBufferEndOffset = no;
-      var inOffsetEnd = Math.trunc(inOffset.value + (ni + 7) / 8);
-      while (inOffset.value < inOffsetEnd) {
-        getChar(c, lc, uInt8Array2, inOffset);
-        c = getCharReturn.c;
-        lc = getCharReturn.lc;
-        while (lc >= HUF_DECBITS) {
-          var index = c >> lc - HUF_DECBITS & HUF_DECMASK;
-          var pl = decodingTable[index];
-          if (pl.len) {
-            lc -= pl.len;
-            getCode(pl.lit, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset);
-            c = getCodeReturn.c;
-            lc = getCodeReturn.lc;
-          } else {
-            if (!pl.p) {
-              throw "hufDecode issues";
-            }
-            var j;
-            for (j = 0; j < pl.lit; j++) {
-              var l = hufLength(encodingTable[pl.p[j]]);
-              while (lc < l && inOffset.value < inOffsetEnd) {
-                getChar(c, lc, uInt8Array2, inOffset);
-                c = getCharReturn.c;
-                lc = getCharReturn.lc;
-              }
-              if (lc >= l) {
-                if (hufCode(encodingTable[pl.p[j]]) == (c >> lc - l & (1 << l) - 1)) {
-                  lc -= l;
-                  getCode(
-                    pl.p[j],
-                    rlc,
-                    c,
-                    lc,
-                    uInt8Array2,
-                    inDataView,
-                    inOffset,
-                    outBuffer,
-                    outOffset,
-                    outBufferEndOffset
-                  );
-                  c = getCodeReturn.c;
-                  lc = getCodeReturn.lc;
-                  break;
-                }
-              }
-            }
-            if (j == pl.lit) {
-              throw "hufDecode issues";
-            }
-          }
-        }
-      }
-      var i = 8 - ni & 7;
-      c >>= i;
-      lc -= i;
-      while (lc > 0) {
-        var pl = decodingTable[c << HUF_DECBITS - lc & HUF_DECMASK];
-        if (pl.len) {
-          lc -= pl.len;
-          getCode(pl.lit, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset);
-          c = getCodeReturn.c;
-          lc = getCodeReturn.lc;
-        } else {
-          throw "hufDecode issues";
-        }
-      }
-      return true;
-    }
-    function hufUncompress(uInt8Array2, inDataView, inOffset, nCompressed, outBuffer, nRaw) {
-      var outOffset = { value: 0 };
-      var initialInOffset = inOffset.value;
-      var im = parseUint32(inDataView, inOffset);
-      var iM = parseUint32(inDataView, inOffset);
-      inOffset.value += 4;
-      var nBits = parseUint32(inDataView, inOffset);
-      inOffset.value += 4;
-      if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE) {
-        throw "Something wrong with HUF_ENCSIZE";
-      }
-      var freq = new Array(HUF_ENCSIZE);
-      var hdec = new Array(HUF_DECSIZE);
-      hufClearDecTable(hdec);
-      var ni = nCompressed - (inOffset.value - initialInOffset);
-      hufUnpackEncTable(uInt8Array2, inDataView, inOffset, ni, im, iM, freq);
-      if (nBits > 8 * (nCompressed - (inOffset.value - initialInOffset))) {
-        throw "Something wrong with hufUncompress";
-      }
-      hufBuildDecTable(freq, im, iM, hdec);
-      hufDecode(freq, hdec, uInt8Array2, inDataView, inOffset, nBits, iM, nRaw, outBuffer, outOffset);
-    }
-    function applyLut(lut, data, nData) {
-      for (var i = 0; i < nData; ++i) {
-        data[i] = lut[data[i]];
-      }
-    }
-    function predictor(source) {
-      for (var t = 1; t < source.length; t++) {
-        var d = source[t - 1] + source[t] - 128;
-        source[t] = d;
-      }
-    }
-    function interleaveScalar(source, out) {
-      var t1 = 0;
-      var t2 = Math.floor((source.length + 1) / 2);
-      var s = 0;
-      var stop = source.length - 1;
-      while (true) {
-        if (s > stop)
-          break;
-        out[s++] = source[t1++];
-        if (s > stop)
-          break;
-        out[s++] = source[t2++];
-      }
-    }
-    function decodeRunLength(source) {
-      var size = source.byteLength;
-      var out = new Array();
-      var p = 0;
-      var reader = new DataView(source);
-      while (size > 0) {
-        var l = reader.getInt8(p++);
-        if (l < 0) {
-          var count = -l;
-          size -= count + 1;
-          for (var i = 0; i < count; i++) {
-            out.push(reader.getUint8(p++));
-          }
-        } else {
-          var count = l;
-          size -= 2;
-          var value = reader.getUint8(p++);
-          for (var i = 0; i < count + 1; i++) {
-            out.push(value);
-          }
-        }
-      }
-      return out;
-    }
-    function lossyDctDecode(cscSet, rowPtrs, channelData, acBuffer, dcBuffer, outBuffer) {
-      var dataView = new DataView(outBuffer.buffer);
-      var width = channelData[cscSet.idx[0]].width;
-      var height = channelData[cscSet.idx[0]].height;
-      var numComp = 3;
-      var numFullBlocksX = Math.floor(width / 8);
-      var numBlocksX = Math.ceil(width / 8);
-      var numBlocksY = Math.ceil(height / 8);
-      var leftoverX = width - (numBlocksX - 1) * 8;
-      var leftoverY = height - (numBlocksY - 1) * 8;
-      var currAcComp = { value: 0 };
-      var currDcComp = new Array(numComp);
-      var dctData = new Array(numComp);
-      var halfZigBlock = new Array(numComp);
-      var rowBlock = new Array(numComp);
-      var rowOffsets = new Array(numComp);
-      for (let comp2 = 0; comp2 < numComp; ++comp2) {
-        rowOffsets[comp2] = rowPtrs[cscSet.idx[comp2]];
-        currDcComp[comp2] = comp2 < 1 ? 0 : currDcComp[comp2 - 1] + numBlocksX * numBlocksY;
-        dctData[comp2] = new Float32Array(64);
-        halfZigBlock[comp2] = new Uint16Array(64);
-        rowBlock[comp2] = new Uint16Array(numBlocksX * 64);
-      }
-      for (let blocky = 0; blocky < numBlocksY; ++blocky) {
-        var maxY = 8;
-        if (blocky == numBlocksY - 1)
-          maxY = leftoverY;
-        var maxX = 8;
-        for (let blockx = 0; blockx < numBlocksX; ++blockx) {
-          if (blockx == numBlocksX - 1)
-            maxX = leftoverX;
-          for (let comp2 = 0; comp2 < numComp; ++comp2) {
-            halfZigBlock[comp2].fill(0);
-            halfZigBlock[comp2][0] = dcBuffer[currDcComp[comp2]++];
-            unRleAC(currAcComp, acBuffer, halfZigBlock[comp2]);
-            unZigZag(halfZigBlock[comp2], dctData[comp2]);
-            dctInverse(dctData[comp2]);
-          }
-          if (numComp == 3) {
-            csc709Inverse(dctData);
-          }
-          for (let comp2 = 0; comp2 < numComp; ++comp2) {
-            convertToHalf(dctData[comp2], rowBlock[comp2], blockx * 64);
-          }
-        }
-        let offset2 = 0;
-        for (let comp2 = 0; comp2 < numComp; ++comp2) {
-          const type2 = channelData[cscSet.idx[comp2]].type;
-          for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) {
-            offset2 = rowOffsets[comp2][y2];
-            for (let blockx = 0; blockx < numFullBlocksX; ++blockx) {
-              const src = blockx * 64 + (y2 & 7) * 8;
-              dataView.setUint16(offset2 + 0 * INT16_SIZE * type2, rowBlock[comp2][src + 0], true);
-              dataView.setUint16(offset2 + 1 * INT16_SIZE * type2, rowBlock[comp2][src + 1], true);
-              dataView.setUint16(offset2 + 2 * INT16_SIZE * type2, rowBlock[comp2][src + 2], true);
-              dataView.setUint16(offset2 + 3 * INT16_SIZE * type2, rowBlock[comp2][src + 3], true);
-              dataView.setUint16(offset2 + 4 * INT16_SIZE * type2, rowBlock[comp2][src + 4], true);
-              dataView.setUint16(offset2 + 5 * INT16_SIZE * type2, rowBlock[comp2][src + 5], true);
-              dataView.setUint16(offset2 + 6 * INT16_SIZE * type2, rowBlock[comp2][src + 6], true);
-              dataView.setUint16(offset2 + 7 * INT16_SIZE * type2, rowBlock[comp2][src + 7], true);
-              offset2 += 8 * INT16_SIZE * type2;
-            }
-          }
-          if (numFullBlocksX != numBlocksX) {
-            for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) {
-              const offset3 = rowOffsets[comp2][y2] + 8 * numFullBlocksX * INT16_SIZE * type2;
-              const src = numFullBlocksX * 64 + (y2 & 7) * 8;
-              for (let x2 = 0; x2 < maxX; ++x2) {
-                dataView.setUint16(offset3 + x2 * INT16_SIZE * type2, rowBlock[comp2][src + x2], true);
-              }
-            }
-          }
-        }
-      }
-      var halfRow = new Uint16Array(width);
-      var dataView = new DataView(outBuffer.buffer);
-      for (var comp = 0; comp < numComp; ++comp) {
-        channelData[cscSet.idx[comp]].decoded = true;
-        var type = channelData[cscSet.idx[comp]].type;
-        if (channelData[comp].type != 2)
-          continue;
-        for (var y = 0; y < height; ++y) {
-          const offset2 = rowOffsets[comp][y];
-          for (var x = 0; x < width; ++x) {
-            halfRow[x] = dataView.getUint16(offset2 + x * INT16_SIZE * type, true);
-          }
-          for (var x = 0; x < width; ++x) {
-            dataView.setFloat32(offset2 + x * INT16_SIZE * type, decodeFloat16(halfRow[x]), true);
-          }
-        }
-      }
-    }
-    function unRleAC(currAcComp, acBuffer, halfZigBlock) {
-      var acValue;
-      var dctComp = 1;
-      while (dctComp < 64) {
-        acValue = acBuffer[currAcComp.value];
-        if (acValue == 65280) {
-          dctComp = 64;
-        } else if (acValue >> 8 == 255) {
-          dctComp += acValue & 255;
-        } else {
-          halfZigBlock[dctComp] = acValue;
-          dctComp++;
-        }
-        currAcComp.value++;
-      }
-    }
-    function unZigZag(src, dst) {
-      dst[0] = decodeFloat16(src[0]);
-      dst[1] = decodeFloat16(src[1]);
-      dst[2] = decodeFloat16(src[5]);
-      dst[3] = decodeFloat16(src[6]);
-      dst[4] = decodeFloat16(src[14]);
-      dst[5] = decodeFloat16(src[15]);
-      dst[6] = decodeFloat16(src[27]);
-      dst[7] = decodeFloat16(src[28]);
-      dst[8] = decodeFloat16(src[2]);
-      dst[9] = decodeFloat16(src[4]);
-      dst[10] = decodeFloat16(src[7]);
-      dst[11] = decodeFloat16(src[13]);
-      dst[12] = decodeFloat16(src[16]);
-      dst[13] = decodeFloat16(src[26]);
-      dst[14] = decodeFloat16(src[29]);
-      dst[15] = decodeFloat16(src[42]);
-      dst[16] = decodeFloat16(src[3]);
-      dst[17] = decodeFloat16(src[8]);
-      dst[18] = decodeFloat16(src[12]);
-      dst[19] = decodeFloat16(src[17]);
-      dst[20] = decodeFloat16(src[25]);
-      dst[21] = decodeFloat16(src[30]);
-      dst[22] = decodeFloat16(src[41]);
-      dst[23] = decodeFloat16(src[43]);
-      dst[24] = decodeFloat16(src[9]);
-      dst[25] = decodeFloat16(src[11]);
-      dst[26] = decodeFloat16(src[18]);
-      dst[27] = decodeFloat16(src[24]);
-      dst[28] = decodeFloat16(src[31]);
-      dst[29] = decodeFloat16(src[40]);
-      dst[30] = decodeFloat16(src[44]);
-      dst[31] = decodeFloat16(src[53]);
-      dst[32] = decodeFloat16(src[10]);
-      dst[33] = decodeFloat16(src[19]);
-      dst[34] = decodeFloat16(src[23]);
-      dst[35] = decodeFloat16(src[32]);
-      dst[36] = decodeFloat16(src[39]);
-      dst[37] = decodeFloat16(src[45]);
-      dst[38] = decodeFloat16(src[52]);
-      dst[39] = decodeFloat16(src[54]);
-      dst[40] = decodeFloat16(src[20]);
-      dst[41] = decodeFloat16(src[22]);
-      dst[42] = decodeFloat16(src[33]);
-      dst[43] = decodeFloat16(src[38]);
-      dst[44] = decodeFloat16(src[46]);
-      dst[45] = decodeFloat16(src[51]);
-      dst[46] = decodeFloat16(src[55]);
-      dst[47] = decodeFloat16(src[60]);
-      dst[48] = decodeFloat16(src[21]);
-      dst[49] = decodeFloat16(src[34]);
-      dst[50] = decodeFloat16(src[37]);
-      dst[51] = decodeFloat16(src[47]);
-      dst[52] = decodeFloat16(src[50]);
-      dst[53] = decodeFloat16(src[56]);
-      dst[54] = decodeFloat16(src[59]);
-      dst[55] = decodeFloat16(src[61]);
-      dst[56] = decodeFloat16(src[35]);
-      dst[57] = decodeFloat16(src[36]);
-      dst[58] = decodeFloat16(src[48]);
-      dst[59] = decodeFloat16(src[49]);
-      dst[60] = decodeFloat16(src[57]);
-      dst[61] = decodeFloat16(src[58]);
-      dst[62] = decodeFloat16(src[62]);
-      dst[63] = decodeFloat16(src[63]);
-    }
-    function dctInverse(data) {
-      const a = 0.5 * Math.cos(3.14159 / 4);
-      const b = 0.5 * Math.cos(3.14159 / 16);
-      const c = 0.5 * Math.cos(3.14159 / 8);
-      const d = 0.5 * Math.cos(3 * 3.14159 / 16);
-      const e = 0.5 * Math.cos(5 * 3.14159 / 16);
-      const f = 0.5 * Math.cos(3 * 3.14159 / 8);
-      const g = 0.5 * Math.cos(7 * 3.14159 / 16);
-      var alpha = new Array(4);
-      var beta = new Array(4);
-      var theta = new Array(4);
-      var gamma = new Array(4);
-      for (var row = 0; row < 8; ++row) {
-        var rowPtr = row * 8;
-        alpha[0] = c * data[rowPtr + 2];
-        alpha[1] = f * data[rowPtr + 2];
-        alpha[2] = c * data[rowPtr + 6];
-        alpha[3] = f * data[rowPtr + 6];
-        beta[0] = b * data[rowPtr + 1] + d * data[rowPtr + 3] + e * data[rowPtr + 5] + g * data[rowPtr + 7];
-        beta[1] = d * data[rowPtr + 1] - g * data[rowPtr + 3] - b * data[rowPtr + 5] - e * data[rowPtr + 7];
-        beta[2] = e * data[rowPtr + 1] - b * data[rowPtr + 3] + g * data[rowPtr + 5] + d * data[rowPtr + 7];
-        beta[3] = g * data[rowPtr + 1] - e * data[rowPtr + 3] + d * data[rowPtr + 5] - b * data[rowPtr + 7];
-        theta[0] = a * (data[rowPtr + 0] + data[rowPtr + 4]);
-        theta[3] = a * (data[rowPtr + 0] - data[rowPtr + 4]);
-        theta[1] = alpha[0] + alpha[3];
-        theta[2] = alpha[1] - alpha[2];
-        gamma[0] = theta[0] + theta[1];
-        gamma[1] = theta[3] + theta[2];
-        gamma[2] = theta[3] - theta[2];
-        gamma[3] = theta[0] - theta[1];
-        data[rowPtr + 0] = gamma[0] + beta[0];
-        data[rowPtr + 1] = gamma[1] + beta[1];
-        data[rowPtr + 2] = gamma[2] + beta[2];
-        data[rowPtr + 3] = gamma[3] + beta[3];
-        data[rowPtr + 4] = gamma[3] - beta[3];
-        data[rowPtr + 5] = gamma[2] - beta[2];
-        data[rowPtr + 6] = gamma[1] - beta[1];
-        data[rowPtr + 7] = gamma[0] - beta[0];
-      }
-      for (var column = 0; column < 8; ++column) {
-        alpha[0] = c * data[16 + column];
-        alpha[1] = f * data[16 + column];
-        alpha[2] = c * data[48 + column];
-        alpha[3] = f * data[48 + column];
-        beta[0] = b * data[8 + column] + d * data[24 + column] + e * data[40 + column] + g * data[56 + column];
-        beta[1] = d * data[8 + column] - g * data[24 + column] - b * data[40 + column] - e * data[56 + column];
-        beta[2] = e * data[8 + column] - b * data[24 + column] + g * data[40 + column] + d * data[56 + column];
-        beta[3] = g * data[8 + column] - e * data[24 + column] + d * data[40 + column] - b * data[56 + column];
-        theta[0] = a * (data[column] + data[32 + column]);
-        theta[3] = a * (data[column] - data[32 + column]);
-        theta[1] = alpha[0] + alpha[3];
-        theta[2] = alpha[1] - alpha[2];
-        gamma[0] = theta[0] + theta[1];
-        gamma[1] = theta[3] + theta[2];
-        gamma[2] = theta[3] - theta[2];
-        gamma[3] = theta[0] - theta[1];
-        data[0 + column] = gamma[0] + beta[0];
-        data[8 + column] = gamma[1] + beta[1];
-        data[16 + column] = gamma[2] + beta[2];
-        data[24 + column] = gamma[3] + beta[3];
-        data[32 + column] = gamma[3] - beta[3];
-        data[40 + column] = gamma[2] - beta[2];
-        data[48 + column] = gamma[1] - beta[1];
-        data[56 + column] = gamma[0] - beta[0];
-      }
-    }
-    function csc709Inverse(data) {
-      for (var i = 0; i < 64; ++i) {
-        var y = data[0][i];
-        var cb = data[1][i];
-        var cr = data[2][i];
-        data[0][i] = y + 1.5747 * cr;
-        data[1][i] = y - 0.1873 * cb - 0.4682 * cr;
-        data[2][i] = y + 1.8556 * cb;
-      }
-    }
-    function convertToHalf(src, dst, idx) {
-      for (var i = 0; i < 64; ++i) {
-        dst[idx + i] = three_module.DataUtils.toHalfFloat(toLinear(src[i]));
-      }
-    }
-    function toLinear(float) {
-      if (float <= 1) {
-        return Math.sign(float) * Math.pow(Math.abs(float), 2.2);
-      } else {
-        return Math.sign(float) * Math.pow(logBase, Math.abs(float) - 1);
-      }
-    }
-    function uncompressRAW(info) {
-      return new DataView(info.array.buffer, info.offset.value, info.size);
-    }
-    function uncompressRLE(info) {
-      var compressed = info.viewer.buffer.slice(info.offset.value, info.offset.value + info.size);
-      var rawBuffer = new Uint8Array(decodeRunLength(compressed));
-      var tmpBuffer = new Uint8Array(rawBuffer.length);
-      predictor(rawBuffer);
-      interleaveScalar(rawBuffer, tmpBuffer);
-      return new DataView(tmpBuffer.buffer);
-    }
-    function uncompressZIP(info) {
-      var compressed = info.array.slice(info.offset.value, info.offset.value + info.size);
-      var rawBuffer = (0,esm/* unzlibSync */.HT)(compressed);
-      var tmpBuffer = new Uint8Array(rawBuffer.length);
-      predictor(rawBuffer);
-      interleaveScalar(rawBuffer, tmpBuffer);
-      return new DataView(tmpBuffer.buffer);
-    }
-    function uncompressPIZ(info) {
-      var inDataView = info.viewer;
-      var inOffset = { value: info.offset.value };
-      var outBuffer = new Uint16Array(info.width * info.scanlineBlockSize * (info.channels * info.type));
-      var bitmap = new Uint8Array(BITMAP_SIZE);
-      var outBufferEnd = 0;
-      var pizChannelData = new Array(info.channels);
-      for (var i = 0; i < info.channels; i++) {
-        pizChannelData[i] = {};
-        pizChannelData[i]["start"] = outBufferEnd;
-        pizChannelData[i]["end"] = pizChannelData[i]["start"];
-        pizChannelData[i]["nx"] = info.width;
-        pizChannelData[i]["ny"] = info.lines;
-        pizChannelData[i]["size"] = info.type;
-        outBufferEnd += pizChannelData[i].nx * pizChannelData[i].ny * pizChannelData[i].size;
-      }
-      var minNonZero = parseUint16(inDataView, inOffset);
-      var maxNonZero = parseUint16(inDataView, inOffset);
-      if (maxNonZero >= BITMAP_SIZE) {
-        throw "Something is wrong with PIZ_COMPRESSION BITMAP_SIZE";
-      }
-      if (minNonZero <= maxNonZero) {
-        for (var i = 0; i < maxNonZero - minNonZero + 1; i++) {
-          bitmap[i + minNonZero] = parseUint8(inDataView, inOffset);
-        }
-      }
-      var lut = new Uint16Array(USHORT_RANGE);
-      var maxValue = reverseLutFromBitmap(bitmap, lut);
-      var length = parseUint32(inDataView, inOffset);
-      hufUncompress(info.array, inDataView, inOffset, length, outBuffer, outBufferEnd);
-      for (var i = 0; i < info.channels; ++i) {
-        var cd = pizChannelData[i];
-        for (var j = 0; j < pizChannelData[i].size; ++j) {
-          wav2Decode(outBuffer, cd.start + j, cd.nx, cd.size, cd.ny, cd.nx * cd.size, maxValue);
-        }
-      }
-      applyLut(lut, outBuffer, outBufferEnd);
-      var tmpOffset2 = 0;
-      var tmpBuffer = new Uint8Array(outBuffer.buffer.byteLength);
-      for (var y = 0; y < info.lines; y++) {
-        for (var c = 0; c < info.channels; c++) {
-          var cd = pizChannelData[c];
-          var n = cd.nx * cd.size;
-          var cp = new Uint8Array(outBuffer.buffer, cd.end * INT16_SIZE, n * INT16_SIZE);
-          tmpBuffer.set(cp, tmpOffset2);
-          tmpOffset2 += n * INT16_SIZE;
-          cd.end += n;
-        }
-      }
-      return new DataView(tmpBuffer.buffer);
-    }
-    function uncompressPXR(info) {
-      var compressed = info.array.slice(info.offset.value, info.offset.value + info.size);
-      var rawBuffer = (0,esm/* unzlibSync */.HT)(compressed);
-      const sz = info.lines * info.channels * info.width;
-      const tmpBuffer = info.type == 1 ? new Uint16Array(sz) : new Uint32Array(sz);
-      let tmpBufferEnd = 0;
-      let writePtr = 0;
-      const ptr = new Array(4);
-      for (let y = 0; y < info.lines; y++) {
-        for (let c = 0; c < info.channels; c++) {
-          let pixel = 0;
-          switch (info.type) {
-            case 1:
-              ptr[0] = tmpBufferEnd;
-              ptr[1] = ptr[0] + info.width;
-              tmpBufferEnd = ptr[1] + info.width;
-              for (let j = 0; j < info.width; ++j) {
-                const diff = rawBuffer[ptr[0]++] << 8 | rawBuffer[ptr[1]++];
-                pixel += diff;
-                tmpBuffer[writePtr] = pixel;
-                writePtr++;
-              }
-              break;
-            case 2:
-              ptr[0] = tmpBufferEnd;
-              ptr[1] = ptr[0] + info.width;
-              ptr[2] = ptr[1] + info.width;
-              tmpBufferEnd = ptr[2] + info.width;
-              for (let j = 0; j < info.width; ++j) {
-                const diff = rawBuffer[ptr[0]++] << 24 | rawBuffer[ptr[1]++] << 16 | rawBuffer[ptr[2]++] << 8;
-                pixel += diff;
-                tmpBuffer[writePtr] = pixel;
-                writePtr++;
-              }
-              break;
-          }
-        }
-      }
-      return new DataView(tmpBuffer.buffer);
-    }
-    function uncompressDWA(info) {
-      var inDataView = info.viewer;
-      var inOffset = { value: info.offset.value };
-      var outBuffer = new Uint8Array(info.width * info.lines * (info.channels * info.type * INT16_SIZE));
-      var dwaHeader = {
-        version: parseInt64(inDataView, inOffset),
-        unknownUncompressedSize: parseInt64(inDataView, inOffset),
-        unknownCompressedSize: parseInt64(inDataView, inOffset),
-        acCompressedSize: parseInt64(inDataView, inOffset),
-        dcCompressedSize: parseInt64(inDataView, inOffset),
-        rleCompressedSize: parseInt64(inDataView, inOffset),
-        rleUncompressedSize: parseInt64(inDataView, inOffset),
-        rleRawSize: parseInt64(inDataView, inOffset),
-        totalAcUncompressedCount: parseInt64(inDataView, inOffset),
-        totalDcUncompressedCount: parseInt64(inDataView, inOffset),
-        acCompression: parseInt64(inDataView, inOffset)
-      };
-      if (dwaHeader.version < 2) {
-        throw "EXRLoader.parse: " + EXRHeader.compression + " version " + dwaHeader.version + " is unsupported";
-      }
-      var channelRules = new Array();
-      var ruleSize = parseUint16(inDataView, inOffset) - INT16_SIZE;
-      while (ruleSize > 0) {
-        var name = parseNullTerminatedString(inDataView.buffer, inOffset);
-        var value = parseUint8(inDataView, inOffset);
-        var compression = value >> 2 & 3;
-        var csc = (value >> 4) - 1;
-        var index = new Int8Array([csc])[0];
-        var type = parseUint8(inDataView, inOffset);
-        channelRules.push({
-          name,
-          index,
-          type,
-          compression
-        });
-        ruleSize -= name.length + 3;
-      }
-      var channels = EXRHeader.channels;
-      var channelData = new Array(info.channels);
-      for (var i = 0; i < info.channels; ++i) {
-        var cd = channelData[i] = {};
-        var channel = channels[i];
-        cd.name = channel.name;
-        cd.compression = UNKNOWN;
-        cd.decoded = false;
-        cd.type = channel.pixelType;
-        cd.pLinear = channel.pLinear;
-        cd.width = info.width;
-        cd.height = info.lines;
-      }
-      var cscSet = {
-        idx: new Array(3)
-      };
-      for (var offset2 = 0; offset2 < info.channels; ++offset2) {
-        var cd = channelData[offset2];
-        for (var i = 0; i < channelRules.length; ++i) {
-          var rule = channelRules[i];
-          if (cd.name == rule.name) {
-            cd.compression = rule.compression;
-            if (rule.index >= 0) {
-              cscSet.idx[rule.index] = offset2;
-            }
-            cd.offset = offset2;
-          }
-        }
-      }
-      if (dwaHeader.acCompressedSize > 0) {
-        switch (dwaHeader.acCompression) {
-          case STATIC_HUFFMAN:
-            var acBuffer = new Uint16Array(dwaHeader.totalAcUncompressedCount);
-            hufUncompress(
-              info.array,
-              inDataView,
-              inOffset,
-              dwaHeader.acCompressedSize,
-              acBuffer,
-              dwaHeader.totalAcUncompressedCount
-            );
-            break;
-          case DEFLATE:
-            var compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.totalAcUncompressedCount);
-            var data = (0,esm/* unzlibSync */.HT)(compressed);
-            var acBuffer = new Uint16Array(data.buffer);
-            inOffset.value += dwaHeader.totalAcUncompressedCount;
-            break;
-        }
-      }
-      if (dwaHeader.dcCompressedSize > 0) {
-        var zlibInfo = {
-          array: info.array,
-          offset: inOffset,
-          size: dwaHeader.dcCompressedSize
-        };
-        var dcBuffer = new Uint16Array(uncompressZIP(zlibInfo).buffer);
-        inOffset.value += dwaHeader.dcCompressedSize;
-      }
-      if (dwaHeader.rleRawSize > 0) {
-        var compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.rleCompressedSize);
-        var data = (0,esm/* unzlibSync */.HT)(compressed);
-        var rleBuffer = decodeRunLength(data.buffer);
-        inOffset.value += dwaHeader.rleCompressedSize;
-      }
-      var outBufferEnd = 0;
-      var rowOffsets = new Array(channelData.length);
-      for (var i = 0; i < rowOffsets.length; ++i) {
-        rowOffsets[i] = new Array();
-      }
-      for (var y = 0; y < info.lines; ++y) {
-        for (var chan = 0; chan < channelData.length; ++chan) {
-          rowOffsets[chan].push(outBufferEnd);
-          outBufferEnd += channelData[chan].width * info.type * INT16_SIZE;
-        }
-      }
-      lossyDctDecode(cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer);
-      for (var i = 0; i < channelData.length; ++i) {
-        var cd = channelData[i];
-        if (cd.decoded)
-          continue;
-        switch (cd.compression) {
-          case RLE:
-            var row = 0;
-            var rleOffset = 0;
-            for (var y = 0; y < info.lines; ++y) {
-              var rowOffsetBytes = rowOffsets[i][row];
-              for (var x = 0; x < cd.width; ++x) {
-                for (var byte = 0; byte < INT16_SIZE * cd.type; ++byte) {
-                  outBuffer[rowOffsetBytes++] = rleBuffer[rleOffset + byte * cd.width * cd.height];
-                }
-                rleOffset++;
-              }
-              row++;
-            }
-            break;
-          case LOSSY_DCT:
-          default:
-            throw "EXRLoader.parse: unsupported channel compression";
-        }
-      }
-      return new DataView(outBuffer.buffer);
-    }
-    function parseNullTerminatedString(buffer2, offset2) {
-      var uintBuffer = new Uint8Array(buffer2);
-      var endOffset = 0;
-      while (uintBuffer[offset2.value + endOffset] != 0) {
-        endOffset += 1;
-      }
-      var stringValue = new TextDecoder().decode(uintBuffer.slice(offset2.value, offset2.value + endOffset));
-      offset2.value = offset2.value + endOffset + 1;
-      return stringValue;
-    }
-    function parseFixedLengthString(buffer2, offset2, size) {
-      var stringValue = new TextDecoder().decode(new Uint8Array(buffer2).slice(offset2.value, offset2.value + size));
-      offset2.value = offset2.value + size;
-      return stringValue;
-    }
-    function parseRational(dataView, offset2) {
-      var x = parseInt32(dataView, offset2);
-      var y = parseUint32(dataView, offset2);
-      return [x, y];
-    }
-    function parseTimecode(dataView, offset2) {
-      var x = parseUint32(dataView, offset2);
-      var y = parseUint32(dataView, offset2);
-      return [x, y];
-    }
-    function parseInt32(dataView, offset2) {
-      var Int32 = dataView.getInt32(offset2.value, true);
-      offset2.value = offset2.value + INT32_SIZE;
-      return Int32;
-    }
-    function parseUint32(dataView, offset2) {
-      var Uint32 = dataView.getUint32(offset2.value, true);
-      offset2.value = offset2.value + INT32_SIZE;
-      return Uint32;
-    }
-    function parseUint8Array(uInt8Array2, offset2) {
-      var Uint8 = uInt8Array2[offset2.value];
-      offset2.value = offset2.value + INT8_SIZE;
-      return Uint8;
-    }
-    function parseUint8(dataView, offset2) {
-      var Uint8 = dataView.getUint8(offset2.value);
-      offset2.value = offset2.value + INT8_SIZE;
-      return Uint8;
-    }
-    const parseInt64 = function(dataView, offset2) {
-      let int;
-      if ("getBigInt64" in DataView.prototype) {
-        int = Number(dataView.getBigInt64(offset2.value, true));
-      } else {
-        int = dataView.getUint32(offset2.value + 4, true) + Number(dataView.getUint32(offset2.value, true) << 32);
-      }
-      offset2.value += ULONG_SIZE;
-      return int;
-    };
-    function parseFloat32(dataView, offset2) {
-      var float = dataView.getFloat32(offset2.value, true);
-      offset2.value += FLOAT32_SIZE;
-      return float;
-    }
-    function decodeFloat32(dataView, offset2) {
-      return three_module.DataUtils.toHalfFloat(parseFloat32(dataView, offset2));
-    }
-    function decodeFloat16(binary) {
-      var exponent = (binary & 31744) >> 10, fraction = binary & 1023;
-      return (binary >> 15 ? -1 : 1) * (exponent ? exponent === 31 ? fraction ? NaN : Infinity : Math.pow(2, exponent - 15) * (1 + fraction / 1024) : 6103515625e-14 * (fraction / 1024));
-    }
-    function parseUint16(dataView, offset2) {
-      var Uint16 = dataView.getUint16(offset2.value, true);
-      offset2.value += INT16_SIZE;
-      return Uint16;
-    }
-    function parseFloat16(buffer2, offset2) {
-      return decodeFloat16(parseUint16(buffer2, offset2));
-    }
-    function parseChlist(dataView, buffer2, offset2, size) {
-      var startOffset = offset2.value;
-      var channels = [];
-      while (offset2.value < startOffset + size - 1) {
-        var name = parseNullTerminatedString(buffer2, offset2);
-        var pixelType = parseInt32(dataView, offset2);
-        var pLinear = parseUint8(dataView, offset2);
-        offset2.value += 3;
-        var xSampling = parseInt32(dataView, offset2);
-        var ySampling = parseInt32(dataView, offset2);
-        channels.push({
-          name,
-          pixelType,
-          pLinear,
-          xSampling,
-          ySampling
-        });
-      }
-      offset2.value += 1;
-      return channels;
-    }
-    function parseChromaticities(dataView, offset2) {
-      var redX = parseFloat32(dataView, offset2);
-      var redY = parseFloat32(dataView, offset2);
-      var greenX = parseFloat32(dataView, offset2);
-      var greenY = parseFloat32(dataView, offset2);
-      var blueX = parseFloat32(dataView, offset2);
-      var blueY = parseFloat32(dataView, offset2);
-      var whiteX = parseFloat32(dataView, offset2);
-      var whiteY = parseFloat32(dataView, offset2);
-      return {
-        redX,
-        redY,
-        greenX,
-        greenY,
-        blueX,
-        blueY,
-        whiteX,
-        whiteY
-      };
-    }
-    function parseCompression(dataView, offset2) {
-      var compressionCodes = [
-        "NO_COMPRESSION",
-        "RLE_COMPRESSION",
-        "ZIPS_COMPRESSION",
-        "ZIP_COMPRESSION",
-        "PIZ_COMPRESSION",
-        "PXR24_COMPRESSION",
-        "B44_COMPRESSION",
-        "B44A_COMPRESSION",
-        "DWAA_COMPRESSION",
-        "DWAB_COMPRESSION"
-      ];
-      var compression = parseUint8(dataView, offset2);
-      return compressionCodes[compression];
-    }
-    function parseBox2i(dataView, offset2) {
-      var xMin = parseUint32(dataView, offset2);
-      var yMin = parseUint32(dataView, offset2);
-      var xMax = parseUint32(dataView, offset2);
-      var yMax = parseUint32(dataView, offset2);
-      return { xMin, yMin, xMax, yMax };
-    }
-    function parseLineOrder(dataView, offset2) {
-      var lineOrders = ["INCREASING_Y"];
-      var lineOrder = parseUint8(dataView, offset2);
-      return lineOrders[lineOrder];
-    }
-    function parseV2f(dataView, offset2) {
-      var x = parseFloat32(dataView, offset2);
-      var y = parseFloat32(dataView, offset2);
-      return [x, y];
-    }
-    function parseV3f(dataView, offset2) {
-      var x = parseFloat32(dataView, offset2);
-      var y = parseFloat32(dataView, offset2);
-      var z = parseFloat32(dataView, offset2);
-      return [x, y, z];
-    }
-    function parseValue(dataView, buffer2, offset2, type, size) {
-      if (type === "string" || type === "stringvector" || type === "iccProfile") {
-        return parseFixedLengthString(buffer2, offset2, size);
-      } else if (type === "chlist") {
-        return parseChlist(dataView, buffer2, offset2, size);
-      } else if (type === "chromaticities") {
-        return parseChromaticities(dataView, offset2);
-      } else if (type === "compression") {
-        return parseCompression(dataView, offset2);
-      } else if (type === "box2i") {
-        return parseBox2i(dataView, offset2);
-      } else if (type === "lineOrder") {
-        return parseLineOrder(dataView, offset2);
-      } else if (type === "float") {
-        return parseFloat32(dataView, offset2);
-      } else if (type === "v2f") {
-        return parseV2f(dataView, offset2);
-      } else if (type === "v3f") {
-        return parseV3f(dataView, offset2);
-      } else if (type === "int") {
-        return parseInt32(dataView, offset2);
-      } else if (type === "rational") {
-        return parseRational(dataView, offset2);
-      } else if (type === "timecode") {
-        return parseTimecode(dataView, offset2);
-      } else if (type === "preview") {
-        offset2.value += size;
-        return "skipped";
-      } else {
-        offset2.value += size;
-        return void 0;
-      }
-    }
-    function parseHeader(dataView, buffer2, offset2) {
-      const EXRHeader2 = {};
-      if (dataView.getUint32(0, true) != 20000630) {
-        throw "THREE.EXRLoader: provided file doesn't appear to be in OpenEXR format.";
-      }
-      EXRHeader2.version = dataView.getUint8(4);
-      const spec = dataView.getUint8(5);
-      EXRHeader2.spec = {
-        singleTile: !!(spec & 2),
-        longName: !!(spec & 4),
-        deepFormat: !!(spec & 8),
-        multiPart: !!(spec & 16)
-      };
-      offset2.value = 8;
-      var keepReading = true;
-      while (keepReading) {
-        var attributeName = parseNullTerminatedString(buffer2, offset2);
-        if (attributeName == 0) {
-          keepReading = false;
-        } else {
-          var attributeType = parseNullTerminatedString(buffer2, offset2);
-          var attributeSize = parseUint32(dataView, offset2);
-          var attributeValue = parseValue(dataView, buffer2, offset2, attributeType, attributeSize);
-          if (attributeValue === void 0) {
-            console.warn(`EXRLoader.parse: skipped unknown header attribute type '${attributeType}'.`);
-          } else {
-            EXRHeader2[attributeName] = attributeValue;
-          }
-        }
-      }
-      if (spec != 0) {
-        console.error("EXRHeader:", EXRHeader2);
-        throw "THREE.EXRLoader: provided file is currently unsupported.";
-      }
-      return EXRHeader2;
-    }
-    function setupDecoder(EXRHeader2, dataView, uInt8Array2, offset2, outputType) {
-      const EXRDecoder2 = {
-        size: 0,
-        viewer: dataView,
-        array: uInt8Array2,
-        offset: offset2,
-        width: EXRHeader2.dataWindow.xMax - EXRHeader2.dataWindow.xMin + 1,
-        height: EXRHeader2.dataWindow.yMax - EXRHeader2.dataWindow.yMin + 1,
-        channels: EXRHeader2.channels.length,
-        bytesPerLine: null,
-        lines: null,
-        inputSize: null,
-        type: EXRHeader2.channels[0].pixelType,
-        uncompress: null,
-        getter: null,
-        format: null,
-        encoding: null
-      };
-      switch (EXRHeader2.compression) {
-        case "NO_COMPRESSION":
-          EXRDecoder2.lines = 1;
-          EXRDecoder2.uncompress = uncompressRAW;
-          break;
-        case "RLE_COMPRESSION":
-          EXRDecoder2.lines = 1;
-          EXRDecoder2.uncompress = uncompressRLE;
-          break;
-        case "ZIPS_COMPRESSION":
-          EXRDecoder2.lines = 1;
-          EXRDecoder2.uncompress = uncompressZIP;
-          break;
-        case "ZIP_COMPRESSION":
-          EXRDecoder2.lines = 16;
-          EXRDecoder2.uncompress = uncompressZIP;
-          break;
-        case "PIZ_COMPRESSION":
-          EXRDecoder2.lines = 32;
-          EXRDecoder2.uncompress = uncompressPIZ;
-          break;
-        case "PXR24_COMPRESSION":
-          EXRDecoder2.lines = 16;
-          EXRDecoder2.uncompress = uncompressPXR;
-          break;
-        case "DWAA_COMPRESSION":
-          EXRDecoder2.lines = 32;
-          EXRDecoder2.uncompress = uncompressDWA;
-          break;
-        case "DWAB_COMPRESSION":
-          EXRDecoder2.lines = 256;
-          EXRDecoder2.uncompress = uncompressDWA;
-          break;
-        default:
-          throw "EXRLoader.parse: " + EXRHeader2.compression + " is unsupported";
-      }
-      EXRDecoder2.scanlineBlockSize = EXRDecoder2.lines;
-      if (EXRDecoder2.type == 1) {
-        switch (outputType) {
-          case three_module.FloatType:
-            EXRDecoder2.getter = parseFloat16;
-            EXRDecoder2.inputSize = INT16_SIZE;
-            break;
-          case three_module.HalfFloatType:
-            EXRDecoder2.getter = parseUint16;
-            EXRDecoder2.inputSize = INT16_SIZE;
-            break;
-        }
-      } else if (EXRDecoder2.type == 2) {
-        switch (outputType) {
-          case three_module.FloatType:
-            EXRDecoder2.getter = parseFloat32;
-            EXRDecoder2.inputSize = FLOAT32_SIZE;
-            break;
-          case three_module.HalfFloatType:
-            EXRDecoder2.getter = decodeFloat32;
-            EXRDecoder2.inputSize = FLOAT32_SIZE;
-        }
-      } else {
-        throw "EXRLoader.parse: unsupported pixelType " + EXRDecoder2.type + " for " + EXRHeader2.compression + ".";
-      }
-      EXRDecoder2.blockCount = (EXRHeader2.dataWindow.yMax + 1) / EXRDecoder2.scanlineBlockSize;
-      for (var i = 0; i < EXRDecoder2.blockCount; i++)
-        parseInt64(dataView, offset2);
-      EXRDecoder2.outputChannels = EXRDecoder2.channels == 3 ? 4 : EXRDecoder2.channels;
-      const size = EXRDecoder2.width * EXRDecoder2.height * EXRDecoder2.outputChannels;
-      switch (outputType) {
-        case three_module.FloatType:
-          EXRDecoder2.byteArray = new Float32Array(size);
-          if (EXRDecoder2.channels < EXRDecoder2.outputChannels)
-            EXRDecoder2.byteArray.fill(1, 0, size);
-          break;
-        case three_module.HalfFloatType:
-          EXRDecoder2.byteArray = new Uint16Array(size);
-          if (EXRDecoder2.channels < EXRDecoder2.outputChannels)
-            EXRDecoder2.byteArray.fill(15360, 0, size);
-          break;
-        default:
-          console.error("THREE.EXRLoader: unsupported type: ", outputType);
-          break;
-      }
-      EXRDecoder2.bytesPerLine = EXRDecoder2.width * EXRDecoder2.inputSize * EXRDecoder2.channels;
-      if (EXRDecoder2.outputChannels == 4) {
-        EXRDecoder2.format = three_module.RGBAFormat;
-        EXRDecoder2.encoding = 3e3;
-      } else {
-        EXRDecoder2.format = three_module.RedFormat;
-        EXRDecoder2.encoding = 3e3;
-      }
-      return EXRDecoder2;
-    }
-    const bufferDataView = new DataView(buffer);
-    const uInt8Array = new Uint8Array(buffer);
-    const offset = { value: 0 };
-    const EXRHeader = parseHeader(bufferDataView, buffer, offset);
-    const EXRDecoder = setupDecoder(EXRHeader, bufferDataView, uInt8Array, offset, this.type);
-    const tmpOffset = { value: 0 };
-    const channelOffsets = { R: 0, G: 1, B: 2, A: 3, Y: 0 };
-    for (let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.scanlineBlockSize; scanlineBlockIdx++) {
-      const line = parseUint32(bufferDataView, offset);
-      EXRDecoder.size = parseUint32(bufferDataView, offset);
-      EXRDecoder.lines = line + EXRDecoder.scanlineBlockSize > EXRDecoder.height ? EXRDecoder.height - line : EXRDecoder.scanlineBlockSize;
-      const isCompressed = EXRDecoder.size < EXRDecoder.lines * EXRDecoder.bytesPerLine;
-      const viewer = isCompressed ? EXRDecoder.uncompress(EXRDecoder) : uncompressRAW(EXRDecoder);
-      offset.value += EXRDecoder.size;
-      for (let line_y = 0; line_y < EXRDecoder.scanlineBlockSize; line_y++) {
-        const true_y = line_y + scanlineBlockIdx * EXRDecoder.scanlineBlockSize;
-        if (true_y >= EXRDecoder.height)
-          break;
-        for (let channelID = 0; channelID < EXRDecoder.channels; channelID++) {
-          const cOff = channelOffsets[EXRHeader.channels[channelID].name];
-          for (let x = 0; x < EXRDecoder.width; x++) {
-            tmpOffset.value = (line_y * (EXRDecoder.channels * EXRDecoder.width) + channelID * EXRDecoder.width + x) * EXRDecoder.inputSize;
-            const outIndex = (EXRDecoder.height - 1 - true_y) * (EXRDecoder.width * EXRDecoder.outputChannels) + x * EXRDecoder.outputChannels + cOff;
-            EXRDecoder.byteArray[outIndex] = EXRDecoder.getter(viewer, tmpOffset);
-          }
-        }
-      }
-    }
-    return {
-      header: EXRHeader,
-      width: EXRDecoder.width,
-      height: EXRDecoder.height,
-      data: EXRDecoder.byteArray,
-      format: EXRDecoder.format,
-      encoding: EXRDecoder.encoding,
-      type: this.type
-    };
-  }
-  setDataType(value) {
-    this.type = value;
-    return this;
-  }
-  load(url, onLoad, onProgress, onError) {
-    function onLoadCallback(texture, texData) {
-      if ("colorSpace" in texture)
-        texture.colorSpace = texData.encoding === 3001 ? "srgb" : "srgb-linear";
-      else
-        texture.encoding = texData.encoding;
-      texture.minFilter = three_module.LinearFilter;
-      texture.magFilter = three_module.LinearFilter;
-      texture.generateMipmaps = false;
-      texture.flipY = false;
-      if (onLoad)
-        onLoad(texture, texData);
-    }
-    return super.load(url, onLoadCallback, onProgress, onError);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/3MFLoader.js
-
-
-class ThreeMFLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.availableExtensions = [];
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(buffer) {
-        try {
-          onLoad(scope.parse(buffer));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(data) {
-    const scope = this;
-    const textureLoader = new three_module.TextureLoader(this.manager);
-    function loadDocument(data2) {
-      let zip = null;
-      let file = null;
-      let relsName;
-      let modelRelsName;
-      const modelPartNames = [];
-      const printTicketPartNames = [];
-      const texturesPartNames = [];
-      const otherPartNames = [];
-      let modelRels;
-      const modelParts = {};
-      const printTicketParts = {};
-      const texturesParts = {};
-      const otherParts = {};
-      try {
-        zip = (0,esm/* unzipSync */.GZ)(new Uint8Array(data2));
-      } catch (e) {
-        if (e instanceof ReferenceError) {
-          console.error("THREE.3MFLoader: fflate missing and file is compressed.");
-          return null;
-        }
-      }
-      for (file in zip) {
-        if (file.match(/\_rels\/.rels$/)) {
-          relsName = file;
-        } else if (file.match(/3D\/_rels\/.*\.model\.rels$/)) {
-          modelRelsName = file;
-        } else if (file.match(/^3D\/.*\.model$/)) {
-          modelPartNames.push(file);
-        } else if (file.match(/^3D\/Metadata\/.*\.xml$/)) {
-          printTicketPartNames.push(file);
-        } else if (file.match(/^3D\/Textures?\/.*/)) {
-          texturesPartNames.push(file);
-        } else if (file.match(/^3D\/Other\/.*/)) {
-          otherPartNames.push(file);
-        }
-      }
-      const relsView = zip[relsName];
-      const relsFileText = three_module.LoaderUtils.decodeText(relsView);
-      const rels = parseRelsXml(relsFileText);
-      if (modelRelsName) {
-        const relsView2 = zip[modelRelsName];
-        const relsFileText2 = three_module.LoaderUtils.decodeText(relsView2);
-        modelRels = parseRelsXml(relsFileText2);
-      }
-      for (let i = 0; i < modelPartNames.length; i++) {
-        const modelPart = modelPartNames[i];
-        const view = zip[modelPart];
-        const fileText = three_module.LoaderUtils.decodeText(view);
-        const xmlData = new DOMParser().parseFromString(fileText, "application/xml");
-        if (xmlData.documentElement.nodeName.toLowerCase() !== "model") {
-          console.error("THREE.3MFLoader: Error loading 3MF - no 3MF document found: ", modelPart);
-        }
-        const modelNode = xmlData.querySelector("model");
-        const extensions = {};
-        for (let i2 = 0; i2 < modelNode.attributes.length; i2++) {
-          const attr = modelNode.attributes[i2];
-          if (attr.name.match(/^xmlns:(.+)$/)) {
-            extensions[attr.value] = RegExp.$1;
-          }
-        }
-        const modelData = parseModelNode(modelNode);
-        modelData["xml"] = modelNode;
-        if (0 < Object.keys(extensions).length) {
-          modelData["extensions"] = extensions;
-        }
-        modelParts[modelPart] = modelData;
-      }
-      for (let i = 0; i < texturesPartNames.length; i++) {
-        const texturesPartName = texturesPartNames[i];
-        texturesParts[texturesPartName] = zip[texturesPartName].buffer;
-      }
-      return {
-        rels,
-        modelRels,
-        model: modelParts,
-        printTicket: printTicketParts,
-        texture: texturesParts,
-        other: otherParts
-      };
-    }
-    function parseRelsXml(relsFileText) {
-      const relationships = [];
-      const relsXmlData = new DOMParser().parseFromString(relsFileText, "application/xml");
-      const relsNodes = relsXmlData.querySelectorAll("Relationship");
-      for (let i = 0; i < relsNodes.length; i++) {
-        const relsNode = relsNodes[i];
-        const relationship = {
-          target: relsNode.getAttribute("Target"),
-          //required
-          id: relsNode.getAttribute("Id"),
-          //required
-          type: relsNode.getAttribute("Type")
-          //required
-        };
-        relationships.push(relationship);
-      }
-      return relationships;
-    }
-    function parseMetadataNodes(metadataNodes) {
-      const metadataData = {};
-      for (let i = 0; i < metadataNodes.length; i++) {
-        const metadataNode = metadataNodes[i];
-        const name = metadataNode.getAttribute("name");
-        const validNames = [
-          "Title",
-          "Designer",
-          "Description",
-          "Copyright",
-          "LicenseTerms",
-          "Rating",
-          "CreationDate",
-          "ModificationDate"
-        ];
-        if (0 <= validNames.indexOf(name)) {
-          metadataData[name] = metadataNode.textContent;
-        }
-      }
-      return metadataData;
-    }
-    function parseBasematerialsNode(basematerialsNode) {
-      const basematerialsData = {
-        id: basematerialsNode.getAttribute("id"),
-        // required
-        basematerials: []
-      };
-      const basematerialNodes = basematerialsNode.querySelectorAll("base");
-      for (let i = 0; i < basematerialNodes.length; i++) {
-        const basematerialNode = basematerialNodes[i];
-        const basematerialData = parseBasematerialNode(basematerialNode);
-        basematerialData.index = i;
-        basematerialsData.basematerials.push(basematerialData);
-      }
-      return basematerialsData;
-    }
-    function parseTexture2DNode(texture2DNode) {
-      const texture2dData = {
-        id: texture2DNode.getAttribute("id"),
-        // required
-        path: texture2DNode.getAttribute("path"),
-        // required
-        contenttype: texture2DNode.getAttribute("contenttype"),
-        // required
-        tilestyleu: texture2DNode.getAttribute("tilestyleu"),
-        tilestylev: texture2DNode.getAttribute("tilestylev"),
-        filter: texture2DNode.getAttribute("filter")
-      };
-      return texture2dData;
-    }
-    function parseTextures2DGroupNode(texture2DGroupNode) {
-      const texture2DGroupData = {
-        id: texture2DGroupNode.getAttribute("id"),
-        // required
-        texid: texture2DGroupNode.getAttribute("texid"),
-        // required
-        displaypropertiesid: texture2DGroupNode.getAttribute("displaypropertiesid")
-      };
-      const tex2coordNodes = texture2DGroupNode.querySelectorAll("tex2coord");
-      const uvs = [];
-      for (let i = 0; i < tex2coordNodes.length; i++) {
-        const tex2coordNode = tex2coordNodes[i];
-        const u = tex2coordNode.getAttribute("u");
-        const v = tex2coordNode.getAttribute("v");
-        uvs.push(parseFloat(u), parseFloat(v));
-      }
-      texture2DGroupData["uvs"] = new Float32Array(uvs);
-      return texture2DGroupData;
-    }
-    function parseColorGroupNode(colorGroupNode) {
-      const colorGroupData = {
-        id: colorGroupNode.getAttribute("id"),
-        // required
-        displaypropertiesid: colorGroupNode.getAttribute("displaypropertiesid")
-      };
-      const colorNodes = colorGroupNode.querySelectorAll("color");
-      const colors = [];
-      const colorObject = new three_module.Color();
-      for (let i = 0; i < colorNodes.length; i++) {
-        const colorNode = colorNodes[i];
-        const color = colorNode.getAttribute("color");
-        colorObject.setStyle(color.substring(0, 7));
-        colorObject.convertSRGBToLinear();
-        colors.push(colorObject.r, colorObject.g, colorObject.b);
-      }
-      colorGroupData["colors"] = new Float32Array(colors);
-      return colorGroupData;
-    }
-    function parseMetallicDisplaypropertiesNode(metallicDisplaypropetiesNode) {
-      const metallicDisplaypropertiesData = {
-        id: metallicDisplaypropetiesNode.getAttribute("id")
-        // required
-      };
-      const metallicNodes = metallicDisplaypropetiesNode.querySelectorAll("pbmetallic");
-      const metallicData = [];
-      for (let i = 0; i < metallicNodes.length; i++) {
-        const metallicNode = metallicNodes[i];
-        metallicData.push({
-          name: metallicNode.getAttribute("name"),
-          // required
-          metallicness: parseFloat(metallicNode.getAttribute("metallicness")),
-          // required
-          roughness: parseFloat(metallicNode.getAttribute("roughness"))
-          // required
-        });
-      }
-      metallicDisplaypropertiesData.data = metallicData;
-      return metallicDisplaypropertiesData;
-    }
-    function parseBasematerialNode(basematerialNode) {
-      const basematerialData = {};
-      basematerialData["name"] = basematerialNode.getAttribute("name");
-      basematerialData["displaycolor"] = basematerialNode.getAttribute("displaycolor");
-      basematerialData["displaypropertiesid"] = basematerialNode.getAttribute("displaypropertiesid");
-      return basematerialData;
-    }
-    function parseMeshNode(meshNode) {
-      const meshData = {};
-      const vertices = [];
-      const vertexNodes = meshNode.querySelectorAll("vertices vertex");
-      for (let i = 0; i < vertexNodes.length; i++) {
-        const vertexNode = vertexNodes[i];
-        const x = vertexNode.getAttribute("x");
-        const y = vertexNode.getAttribute("y");
-        const z = vertexNode.getAttribute("z");
-        vertices.push(parseFloat(x), parseFloat(y), parseFloat(z));
-      }
-      meshData["vertices"] = new Float32Array(vertices);
-      const triangleProperties = [];
-      const triangles = [];
-      const triangleNodes = meshNode.querySelectorAll("triangles triangle");
-      for (let i = 0; i < triangleNodes.length; i++) {
-        const triangleNode = triangleNodes[i];
-        const v1 = triangleNode.getAttribute("v1");
-        const v2 = triangleNode.getAttribute("v2");
-        const v3 = triangleNode.getAttribute("v3");
-        const p1 = triangleNode.getAttribute("p1");
-        const p2 = triangleNode.getAttribute("p2");
-        const p3 = triangleNode.getAttribute("p3");
-        const pid = triangleNode.getAttribute("pid");
-        const triangleProperty = {};
-        triangleProperty["v1"] = parseInt(v1, 10);
-        triangleProperty["v2"] = parseInt(v2, 10);
-        triangleProperty["v3"] = parseInt(v3, 10);
-        triangles.push(triangleProperty["v1"], triangleProperty["v2"], triangleProperty["v3"]);
-        if (p1) {
-          triangleProperty["p1"] = parseInt(p1, 10);
-        }
-        if (p2) {
-          triangleProperty["p2"] = parseInt(p2, 10);
-        }
-        if (p3) {
-          triangleProperty["p3"] = parseInt(p3, 10);
-        }
-        if (pid) {
-          triangleProperty["pid"] = pid;
-        }
-        if (0 < Object.keys(triangleProperty).length) {
-          triangleProperties.push(triangleProperty);
-        }
-      }
-      meshData["triangleProperties"] = triangleProperties;
-      meshData["triangles"] = new Uint32Array(triangles);
-      return meshData;
-    }
-    function parseComponentsNode(componentsNode) {
-      const components = [];
-      const componentNodes = componentsNode.querySelectorAll("component");
-      for (let i = 0; i < componentNodes.length; i++) {
-        const componentNode = componentNodes[i];
-        const componentData = parseComponentNode(componentNode);
-        components.push(componentData);
-      }
-      return components;
-    }
-    function parseComponentNode(componentNode) {
-      const componentData = {};
-      componentData["objectId"] = componentNode.getAttribute("objectid");
-      const transform = componentNode.getAttribute("transform");
-      if (transform) {
-        componentData["transform"] = parseTransform(transform);
-      }
-      return componentData;
-    }
-    function parseTransform(transform) {
-      const t = [];
-      transform.split(" ").forEach(function(s) {
-        t.push(parseFloat(s));
-      });
-      const matrix = new three_module.Matrix4();
-      matrix.set(t[0], t[3], t[6], t[9], t[1], t[4], t[7], t[10], t[2], t[5], t[8], t[11], 0, 0, 0, 1);
-      return matrix;
-    }
-    function parseObjectNode(objectNode) {
-      const objectData = {
-        type: objectNode.getAttribute("type")
-      };
-      const id = objectNode.getAttribute("id");
-      if (id) {
-        objectData["id"] = id;
-      }
-      const pid = objectNode.getAttribute("pid");
-      if (pid) {
-        objectData["pid"] = pid;
-      }
-      const pindex = objectNode.getAttribute("pindex");
-      if (pindex) {
-        objectData["pindex"] = pindex;
-      }
-      const thumbnail = objectNode.getAttribute("thumbnail");
-      if (thumbnail) {
-        objectData["thumbnail"] = thumbnail;
-      }
-      const partnumber = objectNode.getAttribute("partnumber");
-      if (partnumber) {
-        objectData["partnumber"] = partnumber;
-      }
-      const name = objectNode.getAttribute("name");
-      if (name) {
-        objectData["name"] = name;
-      }
-      const meshNode = objectNode.querySelector("mesh");
-      if (meshNode) {
-        objectData["mesh"] = parseMeshNode(meshNode);
-      }
-      const componentsNode = objectNode.querySelector("components");
-      if (componentsNode) {
-        objectData["components"] = parseComponentsNode(componentsNode);
-      }
-      return objectData;
-    }
-    function parseResourcesNode(resourcesNode) {
-      const resourcesData = {};
-      resourcesData["basematerials"] = {};
-      const basematerialsNodes = resourcesNode.querySelectorAll("basematerials");
-      for (let i = 0; i < basematerialsNodes.length; i++) {
-        const basematerialsNode = basematerialsNodes[i];
-        const basematerialsData = parseBasematerialsNode(basematerialsNode);
-        resourcesData["basematerials"][basematerialsData["id"]] = basematerialsData;
-      }
-      resourcesData["texture2d"] = {};
-      const textures2DNodes = resourcesNode.querySelectorAll("texture2d");
-      for (let i = 0; i < textures2DNodes.length; i++) {
-        const textures2DNode = textures2DNodes[i];
-        const texture2DData = parseTexture2DNode(textures2DNode);
-        resourcesData["texture2d"][texture2DData["id"]] = texture2DData;
-      }
-      resourcesData["colorgroup"] = {};
-      const colorGroupNodes = resourcesNode.querySelectorAll("colorgroup");
-      for (let i = 0; i < colorGroupNodes.length; i++) {
-        const colorGroupNode = colorGroupNodes[i];
-        const colorGroupData = parseColorGroupNode(colorGroupNode);
-        resourcesData["colorgroup"][colorGroupData["id"]] = colorGroupData;
-      }
-      resourcesData["pbmetallicdisplayproperties"] = {};
-      const pbmetallicdisplaypropertiesNodes = resourcesNode.querySelectorAll("pbmetallicdisplayproperties");
-      for (let i = 0; i < pbmetallicdisplaypropertiesNodes.length; i++) {
-        const pbmetallicdisplaypropertiesNode = pbmetallicdisplaypropertiesNodes[i];
-        const pbmetallicdisplaypropertiesData = parseMetallicDisplaypropertiesNode(pbmetallicdisplaypropertiesNode);
-        resourcesData["pbmetallicdisplayproperties"][pbmetallicdisplaypropertiesData["id"]] = pbmetallicdisplaypropertiesData;
-      }
-      resourcesData["texture2dgroup"] = {};
-      const textures2DGroupNodes = resourcesNode.querySelectorAll("texture2dgroup");
-      for (let i = 0; i < textures2DGroupNodes.length; i++) {
-        const textures2DGroupNode = textures2DGroupNodes[i];
-        const textures2DGroupData = parseTextures2DGroupNode(textures2DGroupNode);
-        resourcesData["texture2dgroup"][textures2DGroupData["id"]] = textures2DGroupData;
-      }
-      resourcesData["object"] = {};
-      const objectNodes = resourcesNode.querySelectorAll("object");
-      for (let i = 0; i < objectNodes.length; i++) {
-        const objectNode = objectNodes[i];
-        const objectData = parseObjectNode(objectNode);
-        resourcesData["object"][objectData["id"]] = objectData;
-      }
-      return resourcesData;
-    }
-    function parseBuildNode(buildNode) {
-      const buildData = [];
-      const itemNodes = buildNode.querySelectorAll("item");
-      for (let i = 0; i < itemNodes.length; i++) {
-        const itemNode = itemNodes[i];
-        const buildItem = {
-          objectId: itemNode.getAttribute("objectid")
-        };
-        const transform = itemNode.getAttribute("transform");
-        if (transform) {
-          buildItem["transform"] = parseTransform(transform);
-        }
-        buildData.push(buildItem);
-      }
-      return buildData;
-    }
-    function parseModelNode(modelNode) {
-      const modelData = { unit: modelNode.getAttribute("unit") || "millimeter" };
-      const metadataNodes = modelNode.querySelectorAll("metadata");
-      if (metadataNodes) {
-        modelData["metadata"] = parseMetadataNodes(metadataNodes);
-      }
-      const resourcesNode = modelNode.querySelector("resources");
-      if (resourcesNode) {
-        modelData["resources"] = parseResourcesNode(resourcesNode);
-      }
-      const buildNode = modelNode.querySelector("build");
-      if (buildNode) {
-        modelData["build"] = parseBuildNode(buildNode);
-      }
-      return modelData;
-    }
-    function buildTexture(texture2dgroup, objects2, modelData, textureData) {
-      const texid = texture2dgroup.texid;
-      const texture2ds = modelData.resources.texture2d;
-      const texture2d = texture2ds[texid];
-      if (texture2d) {
-        const data2 = textureData[texture2d.path];
-        const type = texture2d.contenttype;
-        const blob = new Blob([data2], { type });
-        const sourceURI = URL.createObjectURL(blob);
-        const texture = textureLoader.load(sourceURI, function() {
-          URL.revokeObjectURL(sourceURI);
-        });
-        if ("colorSpace" in texture)
-          texture.colorSpace = "srgb";
-        else
-          texture.encoding = 3001;
-        switch (texture2d.tilestyleu) {
-          case "wrap":
-            texture.wrapS = three_module.RepeatWrapping;
-            break;
-          case "mirror":
-            texture.wrapS = three_module.MirroredRepeatWrapping;
-            break;
-          case "none":
-          case "clamp":
-            texture.wrapS = three_module.ClampToEdgeWrapping;
-            break;
-          default:
-            texture.wrapS = three_module.RepeatWrapping;
-        }
-        switch (texture2d.tilestylev) {
-          case "wrap":
-            texture.wrapT = three_module.RepeatWrapping;
-            break;
-          case "mirror":
-            texture.wrapT = three_module.MirroredRepeatWrapping;
-            break;
-          case "none":
-          case "clamp":
-            texture.wrapT = three_module.ClampToEdgeWrapping;
-            break;
-          default:
-            texture.wrapT = three_module.RepeatWrapping;
-        }
-        switch (texture2d.filter) {
-          case "auto":
-            texture.magFilter = three_module.LinearFilter;
-            texture.minFilter = three_module.LinearMipmapLinearFilter;
-            break;
-          case "linear":
-            texture.magFilter = three_module.LinearFilter;
-            texture.minFilter = three_module.LinearFilter;
-            break;
-          case "nearest":
-            texture.magFilter = three_module.NearestFilter;
-            texture.minFilter = three_module.NearestFilter;
-            break;
-          default:
-            texture.magFilter = three_module.LinearFilter;
-            texture.minFilter = three_module.LinearMipmapLinearFilter;
-        }
-        return texture;
-      } else {
-        return null;
-      }
-    }
-    function buildBasematerialsMeshes(basematerials, triangleProperties, meshData, objects2, modelData, textureData, objectData) {
-      const objectPindex = objectData.pindex;
-      const materialMap = {};
-      for (let i = 0, l = triangleProperties.length; i < l; i++) {
-        const triangleProperty = triangleProperties[i];
-        const pindex = triangleProperty.p1 !== void 0 ? triangleProperty.p1 : objectPindex;
-        if (materialMap[pindex] === void 0)
-          materialMap[pindex] = [];
-        materialMap[pindex].push(triangleProperty);
-      }
-      const keys = Object.keys(materialMap);
-      const meshes = [];
-      for (let i = 0, l = keys.length; i < l; i++) {
-        const materialIndex = keys[i];
-        const trianglePropertiesProps = materialMap[materialIndex];
-        const basematerialData = basematerials.basematerials[materialIndex];
-        const material = getBuild(basematerialData, objects2, modelData, textureData, objectData, buildBasematerial);
-        const geometry = new three_module.BufferGeometry();
-        const positionData = [];
-        const vertices = meshData.vertices;
-        for (let j = 0, jl = trianglePropertiesProps.length; j < jl; j++) {
-          const triangleProperty = trianglePropertiesProps[j];
-          positionData.push(vertices[triangleProperty.v1 * 3 + 0]);
-          positionData.push(vertices[triangleProperty.v1 * 3 + 1]);
-          positionData.push(vertices[triangleProperty.v1 * 3 + 2]);
-          positionData.push(vertices[triangleProperty.v2 * 3 + 0]);
-          positionData.push(vertices[triangleProperty.v2 * 3 + 1]);
-          positionData.push(vertices[triangleProperty.v2 * 3 + 2]);
-          positionData.push(vertices[triangleProperty.v3 * 3 + 0]);
-          positionData.push(vertices[triangleProperty.v3 * 3 + 1]);
-          positionData.push(vertices[triangleProperty.v3 * 3 + 2]);
-        }
-        geometry.setAttribute("position", new three_module.Float32BufferAttribute(positionData, 3));
-        const mesh = new three_module.Mesh(geometry, material);
-        meshes.push(mesh);
-      }
-      return meshes;
-    }
-    function buildTexturedMesh(texture2dgroup, triangleProperties, meshData, objects2, modelData, textureData, objectData) {
-      const geometry = new three_module.BufferGeometry();
-      const positionData = [];
-      const uvData = [];
-      const vertices = meshData.vertices;
-      const uvs = texture2dgroup.uvs;
-      for (let i = 0, l = triangleProperties.length; i < l; i++) {
-        const triangleProperty = triangleProperties[i];
-        positionData.push(vertices[triangleProperty.v1 * 3 + 0]);
-        positionData.push(vertices[triangleProperty.v1 * 3 + 1]);
-        positionData.push(vertices[triangleProperty.v1 * 3 + 2]);
-        positionData.push(vertices[triangleProperty.v2 * 3 + 0]);
-        positionData.push(vertices[triangleProperty.v2 * 3 + 1]);
-        positionData.push(vertices[triangleProperty.v2 * 3 + 2]);
-        positionData.push(vertices[triangleProperty.v3 * 3 + 0]);
-        positionData.push(vertices[triangleProperty.v3 * 3 + 1]);
-        positionData.push(vertices[triangleProperty.v3 * 3 + 2]);
-        uvData.push(uvs[triangleProperty.p1 * 2 + 0]);
-        uvData.push(uvs[triangleProperty.p1 * 2 + 1]);
-        uvData.push(uvs[triangleProperty.p2 * 2 + 0]);
-        uvData.push(uvs[triangleProperty.p2 * 2 + 1]);
-        uvData.push(uvs[triangleProperty.p3 * 2 + 0]);
-        uvData.push(uvs[triangleProperty.p3 * 2 + 1]);
-      }
-      geometry.setAttribute("position", new three_module.Float32BufferAttribute(positionData, 3));
-      geometry.setAttribute("uv", new three_module.Float32BufferAttribute(uvData, 2));
-      const texture = getBuild(texture2dgroup, objects2, modelData, textureData, objectData, buildTexture);
-      const material = new three_module.MeshPhongMaterial({ map: texture, flatShading: true });
-      const mesh = new three_module.Mesh(geometry, material);
-      return mesh;
-    }
-    function buildVertexColorMesh(colorgroup, triangleProperties, meshData, objects2, modelData, objectData) {
-      const geometry = new three_module.BufferGeometry();
-      const positionData = [];
-      const colorData = [];
-      const vertices = meshData.vertices;
-      const colors = colorgroup.colors;
-      for (let i = 0, l = triangleProperties.length; i < l; i++) {
-        const triangleProperty = triangleProperties[i];
-        const v1 = triangleProperty.v1;
-        const v2 = triangleProperty.v2;
-        const v3 = triangleProperty.v3;
-        positionData.push(vertices[v1 * 3 + 0]);
-        positionData.push(vertices[v1 * 3 + 1]);
-        positionData.push(vertices[v1 * 3 + 2]);
-        positionData.push(vertices[v2 * 3 + 0]);
-        positionData.push(vertices[v2 * 3 + 1]);
-        positionData.push(vertices[v2 * 3 + 2]);
-        positionData.push(vertices[v3 * 3 + 0]);
-        positionData.push(vertices[v3 * 3 + 1]);
-        positionData.push(vertices[v3 * 3 + 2]);
-        const p1 = triangleProperty.p1 !== void 0 ? triangleProperty.p1 : objectData.pindex;
-        const p2 = triangleProperty.p2 !== void 0 ? triangleProperty.p2 : p1;
-        const p3 = triangleProperty.p3 !== void 0 ? triangleProperty.p3 : p1;
-        colorData.push(colors[p1 * 3 + 0]);
-        colorData.push(colors[p1 * 3 + 1]);
-        colorData.push(colors[p1 * 3 + 2]);
-        colorData.push(colors[p2 * 3 + 0]);
-        colorData.push(colors[p2 * 3 + 1]);
-        colorData.push(colors[p2 * 3 + 2]);
-        colorData.push(colors[p3 * 3 + 0]);
-        colorData.push(colors[p3 * 3 + 1]);
-        colorData.push(colors[p3 * 3 + 2]);
-      }
-      geometry.setAttribute("position", new three_module.Float32BufferAttribute(positionData, 3));
-      geometry.setAttribute("color", new three_module.Float32BufferAttribute(colorData, 3));
-      const material = new three_module.MeshPhongMaterial({ vertexColors: true, flatShading: true });
-      const mesh = new three_module.Mesh(geometry, material);
-      return mesh;
-    }
-    function buildDefaultMesh(meshData) {
-      const geometry = new three_module.BufferGeometry();
-      geometry.setIndex(new three_module.BufferAttribute(meshData["triangles"], 1));
-      geometry.setAttribute("position", new three_module.BufferAttribute(meshData["vertices"], 3));
-      const material = new three_module.MeshPhongMaterial({ color: 11184895, flatShading: true });
-      const mesh = new three_module.Mesh(geometry, material);
-      return mesh;
-    }
-    function buildMeshes(resourceMap, meshData, objects2, modelData, textureData, objectData) {
-      const keys = Object.keys(resourceMap);
-      const meshes = [];
-      for (let i = 0, il = keys.length; i < il; i++) {
-        const resourceId = keys[i];
-        const triangleProperties = resourceMap[resourceId];
-        const resourceType = getResourceType(resourceId, modelData);
-        switch (resourceType) {
-          case "material":
-            const basematerials = modelData.resources.basematerials[resourceId];
-            const newMeshes = buildBasematerialsMeshes(
-              basematerials,
-              triangleProperties,
-              meshData,
-              objects2,
-              modelData,
-              textureData,
-              objectData
-            );
-            for (let j = 0, jl = newMeshes.length; j < jl; j++) {
-              meshes.push(newMeshes[j]);
-            }
-            break;
-          case "texture":
-            const texture2dgroup = modelData.resources.texture2dgroup[resourceId];
-            meshes.push(
-              buildTexturedMesh(
-                texture2dgroup,
-                triangleProperties,
-                meshData,
-                objects2,
-                modelData,
-                textureData,
-                objectData
-              )
-            );
-            break;
-          case "vertexColors":
-            const colorgroup = modelData.resources.colorgroup[resourceId];
-            meshes.push(buildVertexColorMesh(colorgroup, triangleProperties, meshData, objects2, modelData, objectData));
-            break;
-          case "default":
-            meshes.push(buildDefaultMesh(meshData));
-            break;
-          default:
-            console.error("THREE.3MFLoader: Unsupported resource type.");
-        }
-      }
-      return meshes;
-    }
-    function getResourceType(pid, modelData) {
-      if (modelData.resources.texture2dgroup[pid] !== void 0) {
-        return "texture";
-      } else if (modelData.resources.basematerials[pid] !== void 0) {
-        return "material";
-      } else if (modelData.resources.colorgroup[pid] !== void 0) {
-        return "vertexColors";
-      } else if (pid === "default") {
-        return "default";
-      } else {
-        return void 0;
-      }
-    }
-    function analyzeObject(modelData, meshData, objectData) {
-      const resourceMap = {};
-      const triangleProperties = meshData["triangleProperties"];
-      const objectPid = objectData.pid;
-      for (let i = 0, l = triangleProperties.length; i < l; i++) {
-        const triangleProperty = triangleProperties[i];
-        let pid = triangleProperty.pid !== void 0 ? triangleProperty.pid : objectPid;
-        if (pid === void 0)
-          pid = "default";
-        if (resourceMap[pid] === void 0)
-          resourceMap[pid] = [];
-        resourceMap[pid].push(triangleProperty);
-      }
-      return resourceMap;
-    }
-    function buildGroup(meshData, objects2, modelData, textureData, objectData) {
-      const group = new three_module.Group();
-      const resourceMap = analyzeObject(modelData, meshData, objectData);
-      const meshes = buildMeshes(resourceMap, meshData, objects2, modelData, textureData, objectData);
-      for (let i = 0, l = meshes.length; i < l; i++) {
-        group.add(meshes[i]);
-      }
-      return group;
-    }
-    function applyExtensions(extensions, meshData, modelXml) {
-      if (!extensions) {
-        return;
-      }
-      const availableExtensions = [];
-      const keys = Object.keys(extensions);
-      for (let i = 0; i < keys.length; i++) {
-        const ns = keys[i];
-        for (let j = 0; j < scope.availableExtensions.length; j++) {
-          const extension = scope.availableExtensions[j];
-          if (extension.ns === ns) {
-            availableExtensions.push(extension);
-          }
-        }
-      }
-      for (let i = 0; i < availableExtensions.length; i++) {
-        const extension = availableExtensions[i];
-        extension.apply(modelXml, extensions[extension["ns"]], meshData);
-      }
-    }
-    function getBuild(data2, objects2, modelData, textureData, objectData, builder) {
-      if (data2.build !== void 0)
-        return data2.build;
-      data2.build = builder(data2, objects2, modelData, textureData, objectData);
-      return data2.build;
-    }
-    function buildBasematerial(materialData, objects2, modelData) {
-      let material;
-      const displaypropertiesid = materialData.displaypropertiesid;
-      const pbmetallicdisplayproperties = modelData.resources.pbmetallicdisplayproperties;
-      if (displaypropertiesid !== null && pbmetallicdisplayproperties[displaypropertiesid] !== void 0) {
-        const pbmetallicdisplayproperty = pbmetallicdisplayproperties[displaypropertiesid];
-        const metallicData = pbmetallicdisplayproperty.data[materialData.index];
-        material = new three_module.MeshStandardMaterial({
-          flatShading: true,
-          roughness: metallicData.roughness,
-          metalness: metallicData.metallicness
-        });
-      } else {
-        material = new three_module.MeshPhongMaterial({ flatShading: true });
-      }
-      material.name = materialData.name;
-      const displaycolor = materialData.displaycolor;
-      const color = displaycolor.substring(0, 7);
-      material.color.setStyle(color);
-      material.color.convertSRGBToLinear();
-      if (displaycolor.length === 9) {
-        material.opacity = parseInt(displaycolor.charAt(7) + displaycolor.charAt(8), 16) / 255;
-      }
-      return material;
-    }
-    function buildComposite(compositeData, objects2, modelData, textureData) {
-      const composite = new three_module.Group();
-      for (let j = 0; j < compositeData.length; j++) {
-        const component = compositeData[j];
-        let build2 = objects2[component.objectId];
-        if (build2 === void 0) {
-          buildObject(component.objectId, objects2, modelData, textureData);
-          build2 = objects2[component.objectId];
-        }
-        const object3D = build2.clone();
-        const transform = component.transform;
-        if (transform) {
-          object3D.applyMatrix4(transform);
-        }
-        composite.add(object3D);
-      }
-      return composite;
-    }
-    function buildObject(objectId, objects2, modelData, textureData) {
-      const objectData = modelData["resources"]["object"][objectId];
-      if (objectData["mesh"]) {
-        const meshData = objectData["mesh"];
-        const extensions = modelData["extensions"];
-        const modelXml = modelData["xml"];
-        applyExtensions(extensions, meshData, modelXml);
-        objects2[objectData.id] = getBuild(meshData, objects2, modelData, textureData, objectData, buildGroup);
-      } else {
-        const compositeData = objectData["components"];
-        objects2[objectData.id] = getBuild(compositeData, objects2, modelData, textureData, objectData, buildComposite);
-      }
-    }
-    function buildObjects(data3mf2) {
-      const modelsData = data3mf2.model;
-      const modelRels = data3mf2.modelRels;
-      const objects2 = {};
-      const modelsKeys = Object.keys(modelsData);
-      const textureData = {};
-      if (modelRels) {
-        for (let i = 0, l = modelRels.length; i < l; i++) {
-          const modelRel = modelRels[i];
-          const textureKey = modelRel.target.substring(1);
-          if (data3mf2.texture[textureKey]) {
-            textureData[modelRel.target] = data3mf2.texture[textureKey];
-          }
-        }
-      }
-      for (let i = 0; i < modelsKeys.length; i++) {
-        const modelsKey = modelsKeys[i];
-        const modelData = modelsData[modelsKey];
-        const objectIds = Object.keys(modelData["resources"]["object"]);
-        for (let j = 0; j < objectIds.length; j++) {
-          const objectId = objectIds[j];
-          buildObject(objectId, objects2, modelData, textureData);
-        }
-      }
-      return objects2;
-    }
-    function fetch3DModelPart(rels) {
-      for (let i = 0; i < rels.length; i++) {
-        const rel = rels[i];
-        const extension = rel.target.split(".").pop();
-        if (extension.toLowerCase() === "model")
-          return rel;
-      }
-    }
-    function build(objects2, data3mf2) {
-      const group = new three_module.Group();
-      const relationship = fetch3DModelPart(data3mf2["rels"]);
-      const buildData = data3mf2.model[relationship["target"].substring(1)]["build"];
-      for (let i = 0; i < buildData.length; i++) {
-        const buildItem = buildData[i];
-        const object3D = objects2[buildItem["objectId"]];
-        const transform = buildItem["transform"];
-        if (transform) {
-          object3D.applyMatrix4(transform);
-        }
-        group.add(object3D);
-      }
-      return group;
-    }
-    const data3mf = loadDocument(data);
-    const objects = buildObjects(data3mf);
-    return build(objects, data3mf);
-  }
-  addExtension(extension) {
-    this.availableExtensions.push(extension);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/XYZLoader.js
-
-class XYZLoader extends three_module.Loader {
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setRequestHeader(this.requestHeader);
-    loader.setWithCredentials(this.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(text) {
-    const lines = text.split("\n");
-    const vertices = [];
-    const colors = [];
-    for (let line of lines) {
-      line = line.trim();
-      if (line.charAt(0) === "#")
-        continue;
-      const lineValues = line.split(/\s+/);
-      if (lineValues.length === 3) {
-        vertices.push(parseFloat(lineValues[0]));
-        vertices.push(parseFloat(lineValues[1]));
-        vertices.push(parseFloat(lineValues[2]));
-      }
-      if (lineValues.length === 6) {
-        vertices.push(parseFloat(lineValues[0]));
-        vertices.push(parseFloat(lineValues[1]));
-        vertices.push(parseFloat(lineValues[2]));
-        colors.push(parseFloat(lineValues[3]) / 255);
-        colors.push(parseFloat(lineValues[4]) / 255);
-        colors.push(parseFloat(lineValues[5]) / 255);
-      }
-    }
-    const geometry = new three_module.BufferGeometry();
-    geometry.setAttribute("position", new three_module.Float32BufferAttribute(vertices, 3));
-    if (colors.length > 0) {
-      geometry.setAttribute("color", new three_module.Float32BufferAttribute(colors, 3));
-    }
-    return geometry;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/VTKLoader.js
-
-
-class VTKLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(data) {
-    function parseASCII(data2) {
-      var indices = [];
-      var positions = [];
-      var colors = [];
-      var normals = [];
-      var result;
-      var patWord = /^[^\d.\s-]+/;
-      var pat3Floats = /(\-?\d+\.?[\d\-\+e]*)\s+(\-?\d+\.?[\d\-\+e]*)\s+(\-?\d+\.?[\d\-\+e]*)/g;
-      var patConnectivity = /^(\d+)\s+([\s\d]*)/;
-      var patPOINTS = /^POINTS /;
-      var patPOLYGONS = /^POLYGONS /;
-      var patTRIANGLE_STRIPS = /^TRIANGLE_STRIPS /;
-      var patPOINT_DATA = /^POINT_DATA[ ]+(\d+)/;
-      var patCELL_DATA = /^CELL_DATA[ ]+(\d+)/;
-      var patCOLOR_SCALARS = /^COLOR_SCALARS[ ]+(\w+)[ ]+3/;
-      var patNORMALS = /^NORMALS[ ]+(\w+)[ ]+(\w+)/;
-      var inPointsSection = false;
-      var inPolygonsSection = false;
-      var inTriangleStripSection = false;
-      var inPointDataSection = false;
-      var inCellDataSection = false;
-      var inColorSection = false;
-      var inNormalsSection = false;
-      var lines = data2.split("\n");
-      for (var i in lines) {
-        var line = lines[i].trim();
-        if (line.indexOf("DATASET") === 0) {
-          var dataset = line.split(" ")[1];
-          if (dataset !== "POLYDATA")
-            throw new Error("Unsupported DATASET type: " + dataset);
-        } else if (inPointsSection) {
-          while ((result = pat3Floats.exec(line)) !== null) {
-            if (patWord.exec(line) !== null)
-              break;
-            var x = parseFloat(result[1]);
-            var y = parseFloat(result[2]);
-            var z = parseFloat(result[3]);
-            positions.push(x, y, z);
-          }
-        } else if (inPolygonsSection) {
-          if ((result = patConnectivity.exec(line)) !== null) {
-            var numVertices = parseInt(result[1]);
-            var inds = result[2].split(/\s+/);
-            if (numVertices >= 3) {
-              var i0 = parseInt(inds[0]);
-              var i1, i2;
-              var k = 1;
-              for (var j = 0; j < numVertices - 2; ++j) {
-                i1 = parseInt(inds[k]);
-                i2 = parseInt(inds[k + 1]);
-                indices.push(i0, i1, i2);
-                k++;
-              }
-            }
-          }
-        } else if (inTriangleStripSection) {
-          if ((result = patConnectivity.exec(line)) !== null) {
-            var numVertices = parseInt(result[1]);
-            var inds = result[2].split(/\s+/);
-            if (numVertices >= 3) {
-              var i0, i1, i2;
-              for (var j = 0; j < numVertices - 2; j++) {
-                if (j % 2 === 1) {
-                  i0 = parseInt(inds[j]);
-                  i1 = parseInt(inds[j + 2]);
-                  i2 = parseInt(inds[j + 1]);
-                  indices.push(i0, i1, i2);
-                } else {
-                  i0 = parseInt(inds[j]);
-                  i1 = parseInt(inds[j + 1]);
-                  i2 = parseInt(inds[j + 2]);
-                  indices.push(i0, i1, i2);
-                }
-              }
-            }
-          }
-        } else if (inPointDataSection || inCellDataSection) {
-          if (inColorSection) {
-            while ((result = pat3Floats.exec(line)) !== null) {
-              if (patWord.exec(line) !== null)
-                break;
-              var r = parseFloat(result[1]);
-              var g = parseFloat(result[2]);
-              var b = parseFloat(result[3]);
-              colors.push(r, g, b);
-            }
-          } else if (inNormalsSection) {
-            while ((result = pat3Floats.exec(line)) !== null) {
-              if (patWord.exec(line) !== null)
-                break;
-              var nx = parseFloat(result[1]);
-              var ny = parseFloat(result[2]);
-              var nz = parseFloat(result[3]);
-              normals.push(nx, ny, nz);
-            }
-          }
-        }
-        if (patPOLYGONS.exec(line) !== null) {
-          inPolygonsSection = true;
-          inPointsSection = false;
-          inTriangleStripSection = false;
-        } else if (patPOINTS.exec(line) !== null) {
-          inPolygonsSection = false;
-          inPointsSection = true;
-          inTriangleStripSection = false;
-        } else if (patTRIANGLE_STRIPS.exec(line) !== null) {
-          inPolygonsSection = false;
-          inPointsSection = false;
-          inTriangleStripSection = true;
-        } else if (patPOINT_DATA.exec(line) !== null) {
-          inPointDataSection = true;
-          inPointsSection = false;
-          inPolygonsSection = false;
-          inTriangleStripSection = false;
-        } else if (patCELL_DATA.exec(line) !== null) {
-          inCellDataSection = true;
-          inPointsSection = false;
-          inPolygonsSection = false;
-          inTriangleStripSection = false;
-        } else if (patCOLOR_SCALARS.exec(line) !== null) {
-          inColorSection = true;
-          inNormalsSection = false;
-          inPointsSection = false;
-          inPolygonsSection = false;
-          inTriangleStripSection = false;
-        } else if (patNORMALS.exec(line) !== null) {
-          inNormalsSection = true;
-          inColorSection = false;
-          inPointsSection = false;
-          inPolygonsSection = false;
-          inTriangleStripSection = false;
-        }
-      }
-      var geometry = new three_module.BufferGeometry();
-      geometry.setIndex(indices);
-      geometry.setAttribute("position", new three_module.Float32BufferAttribute(positions, 3));
-      if (normals.length === positions.length) {
-        geometry.setAttribute("normal", new three_module.Float32BufferAttribute(normals, 3));
-      }
-      if (colors.length !== indices.length) {
-        if (colors.length === positions.length) {
-          geometry.setAttribute("color", new three_module.Float32BufferAttribute(colors, 3));
-        }
-      } else {
-        geometry = geometry.toNonIndexed();
-        var numTriangles = geometry.attributes.position.count / 3;
-        if (colors.length === numTriangles * 3) {
-          var newColors = [];
-          for (var i = 0; i < numTriangles; i++) {
-            var r = colors[3 * i + 0];
-            var g = colors[3 * i + 1];
-            var b = colors[3 * i + 2];
-            newColors.push(r, g, b);
-            newColors.push(r, g, b);
-            newColors.push(r, g, b);
-          }
-          geometry.setAttribute("color", new three_module.Float32BufferAttribute(newColors, 3));
-        }
-      }
-      return geometry;
-    }
-    function parseBinary(data2) {
-      var count, pointIndex, i, numberOfPoints, s;
-      var buffer = new Uint8Array(data2);
-      var dataView = new DataView(data2);
-      var points = [];
-      var normals = [];
-      var indices = [];
-      var vtk = [];
-      var index = 0;
-      function findString(buffer2, start) {
-        var index2 = start;
-        var c = buffer2[index2];
-        var s2 = [];
-        while (c !== 10) {
-          s2.push(String.fromCharCode(c));
-          index2++;
-          c = buffer2[index2];
-        }
-        return { start, end: index2, next: index2 + 1, parsedString: s2.join("") };
-      }
-      var state, line;
-      while (true) {
-        state = findString(buffer, index);
-        line = state.parsedString;
-        if (line.indexOf("DATASET") === 0) {
-          var dataset = line.split(" ")[1];
-          if (dataset !== "POLYDATA")
-            throw new Error("Unsupported DATASET type: " + dataset);
-        } else if (line.indexOf("POINTS") === 0) {
-          vtk.push(line);
-          numberOfPoints = parseInt(line.split(" ")[1], 10);
-          count = numberOfPoints * 4 * 3;
-          points = new Float32Array(numberOfPoints * 3);
-          pointIndex = state.next;
-          for (i = 0; i < numberOfPoints; i++) {
-            points[3 * i] = dataView.getFloat32(pointIndex, false);
-            points[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false);
-            points[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false);
-            pointIndex = pointIndex + 12;
-          }
-          state.next = state.next + count + 1;
-        } else if (line.indexOf("TRIANGLE_STRIPS") === 0) {
-          var numberOfStrips = parseInt(line.split(" ")[1], 10);
-          var size = parseInt(line.split(" ")[2], 10);
-          count = size * 4;
-          indices = new Uint32Array(3 * size - 9 * numberOfStrips);
-          var indicesIndex = 0;
-          pointIndex = state.next;
-          for (i = 0; i < numberOfStrips; i++) {
-            var indexCount = dataView.getInt32(pointIndex, false);
-            var strip = [];
-            pointIndex += 4;
-            for (s = 0; s < indexCount; s++) {
-              strip.push(dataView.getInt32(pointIndex, false));
-              pointIndex += 4;
-            }
-            for (var j = 0; j < indexCount - 2; j++) {
-              if (j % 2) {
-                indices[indicesIndex++] = strip[j];
-                indices[indicesIndex++] = strip[j + 2];
-                indices[indicesIndex++] = strip[j + 1];
-              } else {
-                indices[indicesIndex++] = strip[j];
-                indices[indicesIndex++] = strip[j + 1];
-                indices[indicesIndex++] = strip[j + 2];
-              }
-            }
-          }
-          state.next = state.next + count + 1;
-        } else if (line.indexOf("POLYGONS") === 0) {
-          var numberOfStrips = parseInt(line.split(" ")[1], 10);
-          var size = parseInt(line.split(" ")[2], 10);
-          count = size * 4;
-          indices = new Uint32Array(3 * size - 9 * numberOfStrips);
-          var indicesIndex = 0;
-          pointIndex = state.next;
-          for (i = 0; i < numberOfStrips; i++) {
-            var indexCount = dataView.getInt32(pointIndex, false);
-            var strip = [];
-            pointIndex += 4;
-            for (s = 0; s < indexCount; s++) {
-              strip.push(dataView.getInt32(pointIndex, false));
-              pointIndex += 4;
-            }
-            for (var j = 1; j < indexCount - 1; j++) {
-              indices[indicesIndex++] = strip[0];
-              indices[indicesIndex++] = strip[j];
-              indices[indicesIndex++] = strip[j + 1];
-            }
-          }
-          state.next = state.next + count + 1;
-        } else if (line.indexOf("POINT_DATA") === 0) {
-          numberOfPoints = parseInt(line.split(" ")[1], 10);
-          state = findString(buffer, state.next);
-          count = numberOfPoints * 4 * 3;
-          normals = new Float32Array(numberOfPoints * 3);
-          pointIndex = state.next;
-          for (i = 0; i < numberOfPoints; i++) {
-            normals[3 * i] = dataView.getFloat32(pointIndex, false);
-            normals[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false);
-            normals[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false);
-            pointIndex += 12;
-          }
-          state.next = state.next + count;
-        }
-        index = state.next;
-        if (index >= buffer.byteLength) {
-          break;
-        }
-      }
-      var geometry = new three_module.BufferGeometry();
-      geometry.setIndex(new three_module.BufferAttribute(indices, 1));
-      geometry.setAttribute("position", new three_module.BufferAttribute(points, 3));
-      if (normals.length === points.length) {
-        geometry.setAttribute("normal", new three_module.BufferAttribute(normals, 3));
-      }
-      return geometry;
-    }
-    function Float32Concat(first, second) {
-      const firstLength = first.length, result = new Float32Array(firstLength + second.length);
-      result.set(first);
-      result.set(second, firstLength);
-      return result;
-    }
-    function Int32Concat(first, second) {
-      var firstLength = first.length, result = new Int32Array(firstLength + second.length);
-      result.set(first);
-      result.set(second, firstLength);
-      return result;
-    }
-    function parseXML(stringFile) {
-      function xmlToJson(xml) {
-        var obj = {};
-        if (xml.nodeType === 1) {
-          if (xml.attributes) {
-            if (xml.attributes.length > 0) {
-              obj["attributes"] = {};
-              for (var j2 = 0; j2 < xml.attributes.length; j2++) {
-                var attribute = xml.attributes.item(j2);
-                obj["attributes"][attribute.nodeName] = attribute.nodeValue.trim();
-              }
-            }
-          }
-        } else if (xml.nodeType === 3) {
-          obj = xml.nodeValue.trim();
-        }
-        if (xml.hasChildNodes()) {
-          for (var i2 = 0; i2 < xml.childNodes.length; i2++) {
-            var item = xml.childNodes.item(i2);
-            var nodeName = item.nodeName;
-            if (typeof obj[nodeName] === "undefined") {
-              var tmp = xmlToJson(item);
-              if (tmp !== "")
-                obj[nodeName] = tmp;
-            } else {
-              if (typeof obj[nodeName].push === "undefined") {
-                var old = obj[nodeName];
-                obj[nodeName] = [old];
-              }
-              var tmp = xmlToJson(item);
-              if (tmp !== "")
-                obj[nodeName].push(tmp);
-            }
-          }
-        }
-        return obj;
-      }
-      function Base64toByteArray(b64) {
-        var Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array;
-        var i2;
-        var lookup = [];
-        var revLookup = [];
-        var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
-        var len2 = code.length;
-        for (i2 = 0; i2 < len2; i2++) {
-          lookup[i2] = code[i2];
-        }
-        for (i2 = 0; i2 < len2; ++i2) {
-          revLookup[code.charCodeAt(i2)] = i2;
-        }
-        revLookup["-".charCodeAt(0)] = 62;
-        revLookup["_".charCodeAt(0)] = 63;
-        var j2, l, tmp, placeHolders, arr2;
-        var len2 = b64.length;
-        if (len2 % 4 > 0) {
-          throw new Error("Invalid string. Length must be a multiple of 4");
-        }
-        placeHolders = b64[len2 - 2] === "=" ? 2 : b64[len2 - 1] === "=" ? 1 : 0;
-        arr2 = new Arr(len2 * 3 / 4 - placeHolders);
-        l = placeHolders > 0 ? len2 - 4 : len2;
-        var L = 0;
-        for (i2 = 0, j2 = 0; i2 < l; i2 += 4, j2 += 3) {
-          tmp = revLookup[b64.charCodeAt(i2)] << 18 | revLookup[b64.charCodeAt(i2 + 1)] << 12 | revLookup[b64.charCodeAt(i2 + 2)] << 6 | revLookup[b64.charCodeAt(i2 + 3)];
-          arr2[L++] = (tmp & 16711680) >> 16;
-          arr2[L++] = (tmp & 65280) >> 8;
-          arr2[L++] = tmp & 255;
-        }
-        if (placeHolders === 2) {
-          tmp = revLookup[b64.charCodeAt(i2)] << 2 | revLookup[b64.charCodeAt(i2 + 1)] >> 4;
-          arr2[L++] = tmp & 255;
-        } else if (placeHolders === 1) {
-          tmp = revLookup[b64.charCodeAt(i2)] << 10 | revLookup[b64.charCodeAt(i2 + 1)] << 4 | revLookup[b64.charCodeAt(i2 + 2)] >> 2;
-          arr2[L++] = tmp >> 8 & 255;
-          arr2[L++] = tmp & 255;
-        }
-        return arr2;
-      }
-      function parseDataArray(ele, compressed2) {
-        var numBytes = 0;
-        if (json.attributes.header_type === "UInt64") {
-          numBytes = 8;
-        } else if (json.attributes.header_type === "UInt32") {
-          numBytes = 4;
-        }
-        if (ele.attributes.format === "binary" && compressed2) {
-          var rawData, content, byteData, blocks, cSizeStart, headerSize, padding, dataOffsets, currentOffset;
-          if (ele.attributes.type === "Float32") {
-            var txt = new Float32Array();
-          } else if (ele.attributes.type === "Int64") {
-            var txt = new Int32Array();
-          }
-          rawData = ele["#text"];
-          byteData = Base64toByteArray(rawData);
-          blocks = byteData[0];
-          for (var i2 = 1; i2 < numBytes - 1; i2++) {
-            blocks = blocks | byteData[i2] << i2 * numBytes;
-          }
-          headerSize = (blocks + 3) * numBytes;
-          padding = headerSize % 3 > 0 ? 3 - headerSize % 3 : 0;
-          headerSize = headerSize + padding;
-          dataOffsets = [];
-          currentOffset = headerSize;
-          dataOffsets.push(currentOffset);
-          cSizeStart = 3 * numBytes;
-          for (var i2 = 0; i2 < blocks; i2++) {
-            var currentBlockSize = byteData[i2 * numBytes + cSizeStart];
-            for (var j2 = 1; j2 < numBytes - 1; j2++) {
-              currentBlockSize = currentBlockSize | byteData[i2 * numBytes + cSizeStart + j2] << j2 * 8;
-            }
-            currentOffset = currentOffset + currentBlockSize;
-            dataOffsets.push(currentOffset);
-          }
-          for (var i2 = 0; i2 < dataOffsets.length - 1; i2++) {
-            var data2 = (0,esm/* unzlibSync */.HT)(byteData.slice(dataOffsets[i2], dataOffsets[i2 + 1]));
-            content = data2.buffer;
-            if (ele.attributes.type === "Float32") {
-              content = new Float32Array(content);
-              txt = Float32Concat(txt, content);
-            } else if (ele.attributes.type === "Int64") {
-              content = new Int32Array(content);
-              txt = Int32Concat(txt, content);
-            }
-          }
-          delete ele["#text"];
-          if (ele.attributes.type === "Int64") {
-            if (ele.attributes.format === "binary") {
-              txt = txt.filter(function(el, idx) {
-                if (idx % 2 !== 1)
-                  return true;
-              });
-            }
-          }
-        } else {
-          if (ele.attributes.format === "binary" && !compressed2) {
-            var content = Base64toByteArray(ele["#text"]);
-            content = content.slice(numBytes).buffer;
-          } else {
-            if (ele["#text"]) {
-              var content = ele["#text"].split(/\s+/).filter(function(el) {
-                if (el !== "")
-                  return el;
-              });
-            } else {
-              var content = new Int32Array(0).buffer;
-            }
-          }
-          delete ele["#text"];
-          if (ele.attributes.type === "Float32") {
-            var txt = new Float32Array(content);
-          } else if (ele.attributes.type === "Int32") {
-            var txt = new Int32Array(content);
-          } else if (ele.attributes.type === "Int64") {
-            var txt = new Int32Array(content);
-            if (ele.attributes.format === "binary") {
-              txt = txt.filter(function(el, idx) {
-                if (idx % 2 !== 1)
-                  return true;
-              });
-            }
-          }
-        }
-        return txt;
-      }
-      var dom = null;
-      if (window.DOMParser) {
-        try {
-          dom = new DOMParser().parseFromString(stringFile, "text/xml");
-        } catch (e) {
-          dom = null;
-        }
-      } else if (window.ActiveXObject) {
-        try {
-          dom = new ActiveXObject("Microsoft.XMLDOM");
-          dom.async = false;
-          if (!dom.loadXML(
-            /* xml */
-          )) {
-            throw new Error(dom.parseError.reason + dom.parseError.srcText);
-          }
-        } catch (e) {
-          dom = null;
-        }
-      } else {
-        throw new Error("Cannot parse xml string!");
-      }
-      var doc = dom.documentElement;
-      var json = xmlToJson(doc);
-      var points = [];
-      var normals = [];
-      var indices = [];
-      if (json.PolyData) {
-        var piece = json.PolyData.Piece;
-        var compressed = json.attributes.hasOwnProperty("compressor");
-        var sections = ["PointData", "Points", "Strips", "Polys"];
-        var sectionIndex = 0, numberOfSections = sections.length;
-        while (sectionIndex < numberOfSections) {
-          var section = piece[sections[sectionIndex]];
-          if (section && section.DataArray) {
-            if (Object.prototype.toString.call(section.DataArray) === "[object Array]") {
-              var arr = section.DataArray;
-            } else {
-              var arr = [section.DataArray];
-            }
-            var dataArrayIndex = 0, numberOfDataArrays = arr.length;
-            while (dataArrayIndex < numberOfDataArrays) {
-              if ("#text" in arr[dataArrayIndex] && arr[dataArrayIndex]["#text"].length > 0) {
-                arr[dataArrayIndex].text = parseDataArray(arr[dataArrayIndex], compressed);
-              }
-              dataArrayIndex++;
-            }
-            switch (sections[sectionIndex]) {
-              case "PointData":
-                var numberOfPoints = parseInt(piece.attributes.NumberOfPoints);
-                var normalsName = section.attributes.Normals;
-                if (numberOfPoints > 0) {
-                  for (var i = 0, len = arr.length; i < len; i++) {
-                    if (normalsName === arr[i].attributes.Name) {
-                      var components = arr[i].attributes.NumberOfComponents;
-                      normals = new Float32Array(numberOfPoints * components);
-                      normals.set(arr[i].text, 0);
-                    }
-                  }
-                }
-                break;
-              case "Points":
-                var numberOfPoints = parseInt(piece.attributes.NumberOfPoints);
-                if (numberOfPoints > 0) {
-                  var components = section.DataArray.attributes.NumberOfComponents;
-                  points = new Float32Array(numberOfPoints * components);
-                  points.set(section.DataArray.text, 0);
-                }
-                break;
-              case "Strips":
-                var numberOfStrips = parseInt(piece.attributes.NumberOfStrips);
-                if (numberOfStrips > 0) {
-                  var connectivity = new Int32Array(section.DataArray[0].text.length);
-                  var offset = new Int32Array(section.DataArray[1].text.length);
-                  connectivity.set(section.DataArray[0].text, 0);
-                  offset.set(section.DataArray[1].text, 0);
-                  var size = numberOfStrips + connectivity.length;
-                  indices = new Uint32Array(3 * size - 9 * numberOfStrips);
-                  var indicesIndex = 0;
-                  for (var i = 0, len = numberOfStrips; i < len; i++) {
-                    var strip = [];
-                    for (var s = 0, len1 = offset[i], len0 = 0; s < len1 - len0; s++) {
-                      strip.push(connectivity[s]);
-                      if (i > 0)
-                        len0 = offset[i - 1];
-                    }
-                    for (var j = 0, len1 = offset[i], len0 = 0; j < len1 - len0 - 2; j++) {
-                      if (j % 2) {
-                        indices[indicesIndex++] = strip[j];
-                        indices[indicesIndex++] = strip[j + 2];
-                        indices[indicesIndex++] = strip[j + 1];
-                      } else {
-                        indices[indicesIndex++] = strip[j];
-                        indices[indicesIndex++] = strip[j + 1];
-                        indices[indicesIndex++] = strip[j + 2];
-                      }
-                      if (i > 0)
-                        len0 = offset[i - 1];
-                    }
-                  }
-                }
-                break;
-              case "Polys":
-                var numberOfPolys = parseInt(piece.attributes.NumberOfPolys);
-                if (numberOfPolys > 0) {
-                  var connectivity = new Int32Array(section.DataArray[0].text.length);
-                  var offset = new Int32Array(section.DataArray[1].text.length);
-                  connectivity.set(section.DataArray[0].text, 0);
-                  offset.set(section.DataArray[1].text, 0);
-                  var size = numberOfPolys + connectivity.length;
-                  indices = new Uint32Array(3 * size - 9 * numberOfPolys);
-                  var indicesIndex = 0, connectivityIndex = 0;
-                  var i = 0, len = numberOfPolys, len0 = 0;
-                  while (i < len) {
-                    var poly = [];
-                    var s = 0, len1 = offset[i];
-                    while (s < len1 - len0) {
-                      poly.push(connectivity[connectivityIndex++]);
-                      s++;
-                    }
-                    var j = 1;
-                    while (j < len1 - len0 - 1) {
-                      indices[indicesIndex++] = poly[0];
-                      indices[indicesIndex++] = poly[j];
-                      indices[indicesIndex++] = poly[j + 1];
-                      j++;
-                    }
-                    i++;
-                    len0 = offset[i - 1];
-                  }
-                }
-                break;
-              default:
-                break;
-            }
-          }
-          sectionIndex++;
-        }
-        var geometry = new three_module.BufferGeometry();
-        geometry.setIndex(new three_module.BufferAttribute(indices, 1));
-        geometry.setAttribute("position", new three_module.BufferAttribute(points, 3));
-        if (normals.length === points.length) {
-          geometry.setAttribute("normal", new three_module.BufferAttribute(normals, 3));
-        }
-        return geometry;
-      } else {
-        throw new Error("Unsupported DATASET type");
-      }
-    }
-    var meta = three_module.LoaderUtils.decodeText(new Uint8Array(data, 0, 250)).split("\n");
-    if (meta[0].indexOf("xml") !== -1) {
-      return parseXML(three_module.LoaderUtils.decodeText(data));
-    } else if (meta[2].includes("ASCII")) {
-      return parseASCII(three_module.LoaderUtils.decodeText(data));
-    } else {
-      return parseBinary(data);
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/LUT3dlLoader.js
-
-
-class LUT3dlLoader extends three_module.Loader {
-  load(url, onLoad, onProgress, onError) {
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setResponseType("text");
-    loader.load(
-      url,
-      (text) => {
-        try {
-          onLoad(this.parse(text));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          this.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(str) {
-    str = str.replace(/^#.*?(\n|\r)/gm, "").replace(/^\s*?(\n|\r)/gm, "").trim();
-    const lines = str.split(/[\n\r]+/g);
-    const gridLines = lines[0].trim().split(/\s+/g).map((e) => parseFloat(e));
-    const gridStep = gridLines[1] - gridLines[0];
-    const size = gridLines.length;
-    for (let i = 1, l = gridLines.length; i < l; i++) {
-      if (gridStep !== gridLines[i] - gridLines[i - 1]) {
-        throw new Error("LUT3dlLoader: Inconsistent grid size not supported.");
-      }
-    }
-    const dataArray = new Array(size * size * size * 4);
-    let index = 0;
-    let maxOutputValue = 0;
-    for (let i = 1, l = lines.length; i < l; i++) {
-      const line = lines[i].trim();
-      const split = line.split(/\s/g);
-      const r = parseFloat(split[0]);
-      const g = parseFloat(split[1]);
-      const b = parseFloat(split[2]);
-      maxOutputValue = Math.max(maxOutputValue, r, g, b);
-      const bLayer = index % size;
-      const gLayer = Math.floor(index / size) % size;
-      const rLayer = Math.floor(index / (size * size)) % size;
-      const pixelIndex = bLayer * size * size + gLayer * size + rLayer;
-      dataArray[4 * pixelIndex + 0] = r;
-      dataArray[4 * pixelIndex + 1] = g;
-      dataArray[4 * pixelIndex + 2] = b;
-      dataArray[4 * pixelIndex + 3] = 1;
-      index += 1;
-    }
-    const bits = Math.ceil(Math.log2(maxOutputValue));
-    const maxBitValue = Math.pow(2, bits);
-    for (let i = 0, l = dataArray.length; i < l; i += 4) {
-      const r = dataArray[i + 0];
-      const g = dataArray[i + 1];
-      const b = dataArray[i + 2];
-      dataArray[i + 0] = 255 * r / maxBitValue;
-      dataArray[i + 1] = 255 * g / maxBitValue;
-      dataArray[i + 2] = 255 * b / maxBitValue;
-    }
-    const data = new Uint8Array(dataArray);
-    const texture = new three_module.DataTexture();
-    texture.image.data = data;
-    texture.image.width = size;
-    texture.image.height = size * size;
-    texture.format = three_module.RGBAFormat;
-    texture.type = three_module.UnsignedByteType;
-    texture.magFilter = three_module.LinearFilter;
-    texture.minFilter = three_module.LinearFilter;
-    texture.wrapS = three_module.ClampToEdgeWrapping;
-    texture.wrapT = three_module.ClampToEdgeWrapping;
-    texture.generateMipmaps = false;
-    texture.needsUpdate = true;
-    const texture3D = new Data3DTexture/* Data3DTexture */.J();
-    texture3D.image.data = data;
-    texture3D.image.width = size;
-    texture3D.image.height = size;
-    texture3D.image.depth = size;
-    texture3D.format = three_module.RGBAFormat;
-    texture3D.type = three_module.UnsignedByteType;
-    texture3D.magFilter = three_module.LinearFilter;
-    texture3D.minFilter = three_module.LinearFilter;
-    texture3D.wrapS = three_module.ClampToEdgeWrapping;
-    texture3D.wrapT = three_module.ClampToEdgeWrapping;
-    texture3D.wrapR = three_module.ClampToEdgeWrapping;
-    texture3D.generateMipmaps = false;
-    texture3D.needsUpdate = true;
-    return {
-      size,
-      texture,
-      texture3D
-    };
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/DDSLoader.js
-
-class DDSLoader extends three_module.CompressedTextureLoader {
-  constructor(manager) {
-    super(manager);
-  }
-  parse(buffer, loadMipmaps) {
-    const dds = { mipmaps: [], width: 0, height: 0, format: null, mipmapCount: 1 };
-    const DDS_MAGIC = 542327876;
-    const DDSD_MIPMAPCOUNT = 131072;
-    const DDSCAPS2_CUBEMAP = 512;
-    const DDSCAPS2_CUBEMAP_POSITIVEX = 1024;
-    const DDSCAPS2_CUBEMAP_NEGATIVEX = 2048;
-    const DDSCAPS2_CUBEMAP_POSITIVEY = 4096;
-    const DDSCAPS2_CUBEMAP_NEGATIVEY = 8192;
-    const DDSCAPS2_CUBEMAP_POSITIVEZ = 16384;
-    const DDSCAPS2_CUBEMAP_NEGATIVEZ = 32768;
-    const DDPF_FOURCC = 4;
-    function fourCCToInt32(value) {
-      return value.charCodeAt(0) + (value.charCodeAt(1) << 8) + (value.charCodeAt(2) << 16) + (value.charCodeAt(3) << 24);
-    }
-    function int32ToFourCC(value) {
-      return String.fromCharCode(value & 255, value >> 8 & 255, value >> 16 & 255, value >> 24 & 255);
-    }
-    function loadARGBMip(buffer2, dataOffset2, width, height) {
-      const dataLength = width * height * 4;
-      const srcBuffer = new Uint8Array(buffer2, dataOffset2, dataLength);
-      const byteArray = new Uint8Array(dataLength);
-      let dst = 0;
-      let src = 0;
-      for (let y = 0; y < height; y++) {
-        for (let x = 0; x < width; x++) {
-          const b = srcBuffer[src];
-          src++;
-          const g = srcBuffer[src];
-          src++;
-          const r = srcBuffer[src];
-          src++;
-          const a = srcBuffer[src];
-          src++;
-          byteArray[dst] = r;
-          dst++;
-          byteArray[dst] = g;
-          dst++;
-          byteArray[dst] = b;
-          dst++;
-          byteArray[dst] = a;
-          dst++;
-        }
-      }
-      return byteArray;
-    }
-    const FOURCC_DXT1 = fourCCToInt32("DXT1");
-    const FOURCC_DXT3 = fourCCToInt32("DXT3");
-    const FOURCC_DXT5 = fourCCToInt32("DXT5");
-    const FOURCC_ETC1 = fourCCToInt32("ETC1");
-    const headerLengthInt = 31;
-    const off_magic = 0;
-    const off_size = 1;
-    const off_flags = 2;
-    const off_height = 3;
-    const off_width = 4;
-    const off_mipmapCount = 7;
-    const off_pfFlags = 20;
-    const off_pfFourCC = 21;
-    const off_RGBBitCount = 22;
-    const off_RBitMask = 23;
-    const off_GBitMask = 24;
-    const off_BBitMask = 25;
-    const off_ABitMask = 26;
-    const off_caps2 = 28;
-    const header = new Int32Array(buffer, 0, headerLengthInt);
-    if (header[off_magic] !== DDS_MAGIC) {
-      console.error("THREE.DDSLoader.parse: Invalid magic number in DDS header.");
-      return dds;
-    }
-    if (!header[off_pfFlags] & DDPF_FOURCC) {
-      console.error("THREE.DDSLoader.parse: Unsupported format, must contain a FourCC code.");
-      return dds;
-    }
-    let blockBytes;
-    const fourCC = header[off_pfFourCC];
-    let isRGBAUncompressed = false;
-    switch (fourCC) {
-      case FOURCC_DXT1:
-        blockBytes = 8;
-        dds.format = three_module.RGB_S3TC_DXT1_Format;
-        break;
-      case FOURCC_DXT3:
-        blockBytes = 16;
-        dds.format = three_module.RGBA_S3TC_DXT3_Format;
-        break;
-      case FOURCC_DXT5:
-        blockBytes = 16;
-        dds.format = three_module.RGBA_S3TC_DXT5_Format;
-        break;
-      case FOURCC_ETC1:
-        blockBytes = 8;
-        dds.format = three_module.RGB_ETC1_Format;
-        break;
-      default:
-        if (header[off_RGBBitCount] === 32 && header[off_RBitMask] & 16711680 && header[off_GBitMask] & 65280 && header[off_BBitMask] & 255 && header[off_ABitMask] & 4278190080) {
-          isRGBAUncompressed = true;
-          blockBytes = 64;
-          dds.format = three_module.RGBAFormat;
-        } else {
-          console.error("THREE.DDSLoader.parse: Unsupported FourCC code ", int32ToFourCC(fourCC));
-          return dds;
-        }
-    }
-    dds.mipmapCount = 1;
-    if (header[off_flags] & DDSD_MIPMAPCOUNT && loadMipmaps !== false) {
-      dds.mipmapCount = Math.max(1, header[off_mipmapCount]);
-    }
-    const caps2 = header[off_caps2];
-    dds.isCubemap = caps2 & DDSCAPS2_CUBEMAP ? true : false;
-    if (dds.isCubemap && (!(caps2 & DDSCAPS2_CUBEMAP_POSITIVEX) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEX) || !(caps2 & DDSCAPS2_CUBEMAP_POSITIVEY) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEY) || !(caps2 & DDSCAPS2_CUBEMAP_POSITIVEZ) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEZ))) {
-      console.error("THREE.DDSLoader.parse: Incomplete cubemap faces");
-      return dds;
-    }
-    dds.width = header[off_width];
-    dds.height = header[off_height];
-    let dataOffset = header[off_size] + 4;
-    const faces = dds.isCubemap ? 6 : 1;
-    for (let face = 0; face < faces; face++) {
-      let width = dds.width;
-      let height = dds.height;
-      for (let i = 0; i < dds.mipmapCount; i++) {
-        let byteArray, dataLength;
-        if (isRGBAUncompressed) {
-          byteArray = loadARGBMip(buffer, dataOffset, width, height);
-          dataLength = byteArray.length;
-        } else {
-          dataLength = Math.max(4, width) / 4 * Math.max(4, height) / 4 * blockBytes;
-          byteArray = new Uint8Array(buffer, dataOffset, dataLength);
-        }
-        const mipmap = { data: byteArray, width, height };
-        dds.mipmaps.push(mipmap);
-        dataOffset += dataLength;
-        width = Math.max(width >> 1, 1);
-        height = Math.max(height >> 1, 1);
-      }
-    }
-    return dds;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/PVRLoader.js
-
-class PVRLoader extends three_module.CompressedTextureLoader {
-  constructor(manager) {
-    super(manager);
-  }
-  parse(buffer, loadMipmaps) {
-    const headerLengthInt = 13;
-    const header = new Uint32Array(buffer, 0, headerLengthInt);
-    const pvrDatas = {
-      buffer,
-      header,
-      loadMipmaps
-    };
-    if (header[0] === 55727696) {
-      return _parseV3(pvrDatas);
-    } else if (header[11] === 559044176) {
-      return _parseV2(pvrDatas);
-    } else {
-      console.error("THREE.PVRLoader: Unknown PVR format.");
-    }
-  }
-}
-function _parseV3(pvrDatas) {
-  const header = pvrDatas.header;
-  let bpp, format;
-  const metaLen = header[12], pixelFormat = header[2], height = header[6], width = header[7], numFaces = header[10], numMipmaps = header[11];
-  switch (pixelFormat) {
-    case 0:
-      bpp = 2;
-      format = three_module.RGB_PVRTC_2BPPV1_Format;
-      break;
-    case 1:
-      bpp = 2;
-      format = three_module.RGBA_PVRTC_2BPPV1_Format;
-      break;
-    case 2:
-      bpp = 4;
-      format = three_module.RGB_PVRTC_4BPPV1_Format;
-      break;
-    case 3:
-      bpp = 4;
-      format = three_module.RGBA_PVRTC_4BPPV1_Format;
-      break;
-    default:
-      console.error("THREE.PVRLoader: Unsupported PVR format:", pixelFormat);
-  }
-  pvrDatas.dataPtr = 52 + metaLen;
-  pvrDatas.bpp = bpp;
-  pvrDatas.format = format;
-  pvrDatas.width = width;
-  pvrDatas.height = height;
-  pvrDatas.numSurfaces = numFaces;
-  pvrDatas.numMipmaps = numMipmaps;
-  pvrDatas.isCubemap = numFaces === 6;
-  return _extract(pvrDatas);
-}
-function _parseV2(pvrDatas) {
-  const header = pvrDatas.header;
-  const headerLength = header[0], height = header[1], width = header[2], numMipmaps = header[3], flags = header[4], bitmaskAlpha = header[10], numSurfs = header[12];
-  const TYPE_MASK = 255;
-  const PVRTC_2 = 24, PVRTC_4 = 25;
-  const formatFlags = flags & TYPE_MASK;
-  let bpp, format;
-  const _hasAlpha = bitmaskAlpha > 0;
-  if (formatFlags === PVRTC_4) {
-    format = _hasAlpha ? three_module.RGBA_PVRTC_4BPPV1_Format : three_module.RGB_PVRTC_4BPPV1_Format;
-    bpp = 4;
-  } else if (formatFlags === PVRTC_2) {
-    format = _hasAlpha ? three_module.RGBA_PVRTC_2BPPV1_Format : three_module.RGB_PVRTC_2BPPV1_Format;
-    bpp = 2;
-  } else {
-    console.error("THREE.PVRLoader: Unknown PVR format:", formatFlags);
-  }
-  pvrDatas.dataPtr = headerLength;
-  pvrDatas.bpp = bpp;
-  pvrDatas.format = format;
-  pvrDatas.width = width;
-  pvrDatas.height = height;
-  pvrDatas.numSurfaces = numSurfs;
-  pvrDatas.numMipmaps = numMipmaps + 1;
-  pvrDatas.isCubemap = numSurfs === 6;
-  return _extract(pvrDatas);
-}
-function _extract(pvrDatas) {
-  const pvr = {
-    mipmaps: [],
-    width: pvrDatas.width,
-    height: pvrDatas.height,
-    format: pvrDatas.format,
-    mipmapCount: pvrDatas.numMipmaps,
-    isCubemap: pvrDatas.isCubemap
-  };
-  const buffer = pvrDatas.buffer;
-  let dataOffset = pvrDatas.dataPtr, dataSize = 0, blockSize = 0, blockWidth = 0, blockHeight = 0, widthBlocks = 0, heightBlocks = 0;
-  const bpp = pvrDatas.bpp, numSurfs = pvrDatas.numSurfaces;
-  if (bpp === 2) {
-    blockWidth = 8;
-    blockHeight = 4;
-  } else {
-    blockWidth = 4;
-    blockHeight = 4;
-  }
-  blockSize = blockWidth * blockHeight * bpp / 8;
-  pvr.mipmaps.length = pvrDatas.numMipmaps * numSurfs;
-  let mipLevel = 0;
-  while (mipLevel < pvrDatas.numMipmaps) {
-    const sWidth = pvrDatas.width >> mipLevel, sHeight = pvrDatas.height >> mipLevel;
-    widthBlocks = sWidth / blockWidth;
-    heightBlocks = sHeight / blockHeight;
-    if (widthBlocks < 2)
-      widthBlocks = 2;
-    if (heightBlocks < 2)
-      heightBlocks = 2;
-    dataSize = widthBlocks * heightBlocks * blockSize;
-    for (let surfIndex = 0; surfIndex < numSurfs; surfIndex++) {
-      const byteArray = new Uint8Array(buffer, dataOffset, dataSize);
-      const mipmap = {
-        data: byteArray,
-        width: sWidth,
-        height: sHeight
-      };
-      pvr.mipmaps[surfIndex * pvrDatas.numMipmaps + mipLevel] = mipmap;
-      dataOffset += dataSize;
-    }
-    mipLevel++;
-  }
-  return pvr;
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/GCodeLoader.js
-
-class GCodeLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.splitLayer = false;
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(data) {
-    let state = { x: 0, y: 0, z: 0, e: 0, f: 0, extruding: false, relative: false };
-    let layers = [];
-    let currentLayer = void 0;
-    const pathMaterial = new three_module.LineBasicMaterial({ color: 16711680 });
-    pathMaterial.name = "path";
-    const extrudingMaterial = new three_module.LineBasicMaterial({ color: 65280 });
-    extrudingMaterial.name = "extruded";
-    function newLayer(line) {
-      currentLayer = { vertex: [], pathVertex: [], z: line.z };
-      layers.push(currentLayer);
-    }
-    function addSegment(p1, p2) {
-      if (currentLayer === void 0) {
-        newLayer(p1);
-      }
-      if (state.extruding) {
-        currentLayer.vertex.push(p1.x, p1.y, p1.z);
-        currentLayer.vertex.push(p2.x, p2.y, p2.z);
-      } else {
-        currentLayer.pathVertex.push(p1.x, p1.y, p1.z);
-        currentLayer.pathVertex.push(p2.x, p2.y, p2.z);
-      }
-    }
-    function delta(v1, v2) {
-      return state.relative ? v2 : v2 - v1;
-    }
-    function absolute(v1, v2) {
-      return state.relative ? v1 + v2 : v2;
-    }
-    let lines = data.replace(/;.+/g, "").split("\n");
-    for (let i = 0; i < lines.length; i++) {
-      let tokens = lines[i].split(" ");
-      let cmd = tokens[0].toUpperCase();
-      let args = {};
-      tokens.splice(1).forEach(function(token) {
-        if (token[0] !== void 0) {
-          let key = token[0].toLowerCase();
-          let value = parseFloat(token.substring(1));
-          args[key] = value;
-        }
-      });
-      if (cmd === "G0" || cmd === "G1") {
-        let line = {
-          x: args.x !== void 0 ? absolute(state.x, args.x) : state.x,
-          y: args.y !== void 0 ? absolute(state.y, args.y) : state.y,
-          z: args.z !== void 0 ? absolute(state.z, args.z) : state.z,
-          e: args.e !== void 0 ? absolute(state.e, args.e) : state.e,
-          f: args.f !== void 0 ? absolute(state.f, args.f) : state.f
-        };
-        if (delta(state.e, line.e) > 0) {
-          line.extruding = delta(state.e, line.e) > 0;
-          if (currentLayer == void 0 || line.z != currentLayer.z) {
-            newLayer(line);
-          }
-        }
-        addSegment(state, line);
-        state = line;
-      } else if (cmd === "G2" || cmd === "G3") {
-      } else if (cmd === "G90") {
-        state.relative = false;
-      } else if (cmd === "G91") {
-        state.relative = true;
-      } else if (cmd === "G92") {
-        let line = state;
-        line.x = args.x !== void 0 ? args.x : line.x;
-        line.y = args.y !== void 0 ? args.y : line.y;
-        line.z = args.z !== void 0 ? args.z : line.z;
-        line.e = args.e !== void 0 ? args.e : line.e;
-        state = line;
-      } else {
-      }
-    }
-    function addObject(vertex, extruding, i) {
-      let geometry = new three_module.BufferGeometry();
-      geometry.setAttribute("position", new three_module.Float32BufferAttribute(vertex, 3));
-      let segments = new three_module.LineSegments(geometry, extruding ? extrudingMaterial : pathMaterial);
-      segments.name = "layer" + i;
-      object.add(segments);
-    }
-    const object = new three_module.Group();
-    object.name = "gcode";
-    if (this.splitLayer) {
-      for (let i = 0; i < layers.length; i++) {
-        let layer = layers[i];
-        addObject(layer.vertex, true, i);
-        addObject(layer.pathVertex, false, i);
-      }
-    } else {
-      const vertex = [], pathVertex = [];
-      for (let i = 0; i < layers.length; i++) {
-        let layer = layers[i];
-        let layerVertex = layer.vertex;
-        let layerPathVertex = layer.pathVertex;
-        for (let j = 0; j < layerVertex.length; j++) {
-          vertex.push(layerVertex[j]);
-        }
-        for (let j = 0; j < layerPathVertex.length; j++) {
-          pathVertex.push(layerPathVertex[j]);
-        }
-      }
-      addObject(vertex, true, layers.length);
-      addObject(pathVertex, false, layers.length);
-    }
-    object.quaternion.setFromEuler(new three_module.Euler(-Math.PI / 2, 0, 0));
-    return object;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/BasisTextureLoader.js
-var BasisTextureLoader_defProp = Object.defineProperty;
-var BasisTextureLoader_defNormalProp = (obj, key, value) => key in obj ? BasisTextureLoader_defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var BasisTextureLoader_publicField = (obj, key, value) => {
-  BasisTextureLoader_defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-const _taskCache = /* @__PURE__ */ new WeakMap();
-const _BasisTextureLoader = class extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.transcoderPath = "";
-    this.transcoderBinary = null;
-    this.transcoderPending = null;
-    this.workerLimit = 4;
-    this.workerPool = [];
-    this.workerNextTaskID = 1;
-    this.workerSourceURL = "";
-    this.workerConfig = null;
-  }
-  setTranscoderPath(path) {
-    this.transcoderPath = path;
-    return this;
-  }
-  setWorkerLimit(workerLimit) {
-    this.workerLimit = workerLimit;
-    return this;
-  }
-  detectSupport(renderer) {
-    this.workerConfig = {
-      astcSupported: renderer.extensions.has("WEBGL_compressed_texture_astc"),
-      etc1Supported: renderer.extensions.has("WEBGL_compressed_texture_etc1"),
-      etc2Supported: renderer.extensions.has("WEBGL_compressed_texture_etc"),
-      dxtSupported: renderer.extensions.has("WEBGL_compressed_texture_s3tc"),
-      bptcSupported: renderer.extensions.has("EXT_texture_compression_bptc"),
-      pvrtcSupported: renderer.extensions.has("WEBGL_compressed_texture_pvrtc") || renderer.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")
-    };
-    return this;
-  }
-  load(url, onLoad, onProgress, onError) {
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setResponseType("arraybuffer");
-    loader.setWithCredentials(this.withCredentials);
-    const texture = new three_module.CompressedTexture();
-    loader.load(
-      url,
-      (buffer) => {
-        if (_taskCache.has(buffer)) {
-          const cachedTask = _taskCache.get(buffer);
-          return cachedTask.promise.then(onLoad).catch(onError);
-        }
-        this._createTexture([buffer]).then(function(_texture) {
-          texture.copy(_texture);
-          texture.needsUpdate = true;
-          if (onLoad)
-            onLoad(texture);
-        }).catch(onError);
-      },
-      onProgress,
-      onError
-    );
-    return texture;
-  }
-  /** Low-level transcoding API, exposed for use by KTX2Loader. */
-  parseInternalAsync(options) {
-    const { levels } = options;
-    const buffers = /* @__PURE__ */ new Set();
-    for (let i = 0; i < levels.length; i++) {
-      buffers.add(levels[i].data.buffer);
-    }
-    return this._createTexture(Array.from(buffers), { ...options, lowLevel: true });
-  }
-  /**
-   * @param {ArrayBuffer[]} buffers
-   * @param {object?} config
-   * @return {Promise<CompressedTexture>}
-   */
-  _createTexture(buffers, config = {}) {
-    let worker;
-    let taskID;
-    const taskConfig = config;
-    let taskCost = 0;
-    for (let i = 0; i < buffers.length; i++) {
-      taskCost += buffers[i].byteLength;
-    }
-    const texturePending = this._allocateWorker(taskCost).then((_worker) => {
-      worker = _worker;
-      taskID = this.workerNextTaskID++;
-      return new Promise((resolve, reject) => {
-        worker._callbacks[taskID] = { resolve, reject };
-        worker.postMessage({ type: "transcode", id: taskID, buffers, taskConfig }, buffers);
-      });
-    }).then((message) => {
-      const { mipmaps, width, height, format } = message;
-      const texture = new three_module.CompressedTexture(mipmaps, width, height, format, three_module.UnsignedByteType);
-      texture.minFilter = mipmaps.length === 1 ? three_module.LinearFilter : three_module.LinearMipmapLinearFilter;
-      texture.magFilter = three_module.LinearFilter;
-      texture.generateMipmaps = false;
-      texture.needsUpdate = true;
-      return texture;
-    });
-    texturePending.catch(() => true).then(() => {
-      if (worker && taskID) {
-        worker._taskLoad -= taskCost;
-        delete worker._callbacks[taskID];
-      }
-    });
-    _taskCache.set(buffers[0], { promise: texturePending });
-    return texturePending;
-  }
-  _initTranscoder() {
-    if (!this.transcoderPending) {
-      const jsLoader = new three_module.FileLoader(this.manager);
-      jsLoader.setPath(this.transcoderPath);
-      jsLoader.setWithCredentials(this.withCredentials);
-      const jsContent = new Promise((resolve, reject) => {
-        jsLoader.load("basis_transcoder.js", resolve, void 0, reject);
-      });
-      const binaryLoader = new three_module.FileLoader(this.manager);
-      binaryLoader.setPath(this.transcoderPath);
-      binaryLoader.setResponseType("arraybuffer");
-      binaryLoader.setWithCredentials(this.withCredentials);
-      const binaryContent = new Promise((resolve, reject) => {
-        binaryLoader.load("basis_transcoder.wasm", resolve, void 0, reject);
-      });
-      this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => {
-        const fn = _BasisTextureLoader.BasisWorker.toString();
-        const body = [
-          "/* constants */",
-          "let _EngineFormat = " + JSON.stringify(_BasisTextureLoader.EngineFormat),
-          "let _TranscoderFormat = " + JSON.stringify(_BasisTextureLoader.TranscoderFormat),
-          "let _BasisFormat = " + JSON.stringify(_BasisTextureLoader.BasisFormat),
-          "/* basis_transcoder.js */",
-          jsContent2,
-          "/* worker */",
-          fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}"))
-        ].join("\n");
-        this.workerSourceURL = URL.createObjectURL(new Blob([body]));
-        this.transcoderBinary = binaryContent2;
-      });
-    }
-    return this.transcoderPending;
-  }
-  _allocateWorker(taskCost) {
-    return this._initTranscoder().then(() => {
-      if (this.workerPool.length < this.workerLimit) {
-        const worker2 = new Worker(this.workerSourceURL);
-        worker2._callbacks = {};
-        worker2._taskLoad = 0;
-        worker2.postMessage({
-          type: "init",
-          config: this.workerConfig,
-          transcoderBinary: this.transcoderBinary
-        });
-        worker2.onmessage = function(e) {
-          const message = e.data;
-          switch (message.type) {
-            case "transcode":
-              worker2._callbacks[message.id].resolve(message);
-              break;
-            case "error":
-              worker2._callbacks[message.id].reject(message);
-              break;
-            default:
-              console.error('THREE.BasisTextureLoader: Unexpected message, "' + message.type + '"');
-          }
-        };
-        this.workerPool.push(worker2);
-      } else {
-        this.workerPool.sort(function(a, b) {
-          return a._taskLoad > b._taskLoad ? -1 : 1;
-        });
-      }
-      const worker = this.workerPool[this.workerPool.length - 1];
-      worker._taskLoad += taskCost;
-      return worker;
-    });
-  }
-  dispose() {
-    for (let i = 0; i < this.workerPool.length; i++) {
-      this.workerPool[i].terminate();
-    }
-    this.workerPool.length = 0;
-    return this;
-  }
-};
-let BasisTextureLoader = _BasisTextureLoader;
-/* CONSTANTS */
-BasisTextureLoader_publicField(BasisTextureLoader, "BasisFormat", {
-  ETC1S: 0,
-  UASTC_4x4: 1
-});
-BasisTextureLoader_publicField(BasisTextureLoader, "TranscoderFormat", {
-  ETC1: 0,
-  ETC2: 1,
-  BC1: 2,
-  BC3: 3,
-  BC4: 4,
-  BC5: 5,
-  BC7_M6_OPAQUE_ONLY: 6,
-  BC7_M5: 7,
-  PVRTC1_4_RGB: 8,
-  PVRTC1_4_RGBA: 9,
-  ASTC_4x4: 10,
-  ATC_RGB: 11,
-  ATC_RGBA_INTERPOLATED_ALPHA: 12,
-  RGBA32: 13,
-  RGB565: 14,
-  BGR565: 15,
-  RGBA4444: 16
-});
-BasisTextureLoader_publicField(BasisTextureLoader, "EngineFormat", {
-  RGBAFormat: three_module.RGBAFormat,
-  RGBA_ASTC_4x4_Format: three_module.RGBA_ASTC_4x4_Format,
-  RGBA_BPTC_Format: three_module.RGBA_BPTC_Format,
-  RGBA_ETC2_EAC_Format: three_module.RGBA_ETC2_EAC_Format,
-  RGBA_PVRTC_4BPPV1_Format: three_module.RGBA_PVRTC_4BPPV1_Format,
-  RGBA_S3TC_DXT5_Format: three_module.RGBA_S3TC_DXT5_Format,
-  RGB_ETC1_Format: three_module.RGB_ETC1_Format,
-  RGB_ETC2_Format: three_module.RGB_ETC2_Format,
-  RGB_PVRTC_4BPPV1_Format: three_module.RGB_PVRTC_4BPPV1_Format,
-  RGB_S3TC_DXT1_Format: three_module.RGB_S3TC_DXT1_Format
-});
-/* WEB WORKER */
-BasisTextureLoader_publicField(BasisTextureLoader, "BasisWorker", function() {
-  let config;
-  let transcoderPending;
-  let BasisModule;
-  const EngineFormat = _EngineFormat;
-  const TranscoderFormat = _TranscoderFormat;
-  const BasisFormat = _BasisFormat;
-  onmessage = function(e) {
-    const message = e.data;
-    switch (message.type) {
-      case "init":
-        config = message.config;
-        init(message.transcoderBinary);
-        break;
-      case "transcode":
-        transcoderPending.then(() => {
-          try {
-            const { width, height, hasAlpha, mipmaps, format } = message.taskConfig.lowLevel ? transcodeLowLevel(message.taskConfig) : transcode(message.buffers[0]);
-            const buffers = [];
-            for (let i = 0; i < mipmaps.length; ++i) {
-              buffers.push(mipmaps[i].data.buffer);
-            }
-            self.postMessage({ type: "transcode", id: message.id, width, height, hasAlpha, mipmaps, format }, buffers);
-          } catch (error) {
-            console.error(error);
-            self.postMessage({ type: "error", id: message.id, error: error.message });
-          }
-        });
-        break;
-    }
-  };
-  function init(wasmBinary) {
-    transcoderPending = new Promise((resolve) => {
-      BasisModule = { wasmBinary, onRuntimeInitialized: resolve };
-      BASIS(BasisModule);
-    }).then(() => {
-      BasisModule.initializeBasis();
-    });
-  }
-  function transcodeLowLevel(taskConfig) {
-    const { basisFormat, width, height, hasAlpha } = taskConfig;
-    const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha);
-    const blockByteLength = BasisModule.getBytesPerBlockOrPixel(transcoderFormat);
-    assert(BasisModule.isFormatSupported(transcoderFormat), "THREE.BasisTextureLoader: Unsupported format.");
-    const mipmaps = [];
-    if (basisFormat === BasisFormat.ETC1S) {
-      const transcoder = new BasisModule.LowLevelETC1SImageTranscoder();
-      const { endpointCount, endpointsData, selectorCount, selectorsData, tablesData } = taskConfig.globalData;
-      try {
-        let ok;
-        ok = transcoder.decodePalettes(endpointCount, endpointsData, selectorCount, selectorsData);
-        assert(ok, "THREE.BasisTextureLoader: decodePalettes() failed.");
-        ok = transcoder.decodeTables(tablesData);
-        assert(ok, "THREE.BasisTextureLoader: decodeTables() failed.");
-        for (let i = 0; i < taskConfig.levels.length; i++) {
-          const level = taskConfig.levels[i];
-          const imageDesc = taskConfig.globalData.imageDescs[i];
-          const dstByteLength = getTranscodedImageByteLength(transcoderFormat, level.width, level.height);
-          const dst = new Uint8Array(dstByteLength);
-          ok = transcoder.transcodeImage(
-            transcoderFormat,
-            dst,
-            dstByteLength / blockByteLength,
-            level.data,
-            getWidthInBlocks(transcoderFormat, level.width),
-            getHeightInBlocks(transcoderFormat, level.height),
-            level.width,
-            level.height,
-            level.index,
-            imageDesc.rgbSliceByteOffset,
-            imageDesc.rgbSliceByteLength,
-            imageDesc.alphaSliceByteOffset,
-            imageDesc.alphaSliceByteLength,
-            imageDesc.imageFlags,
-            hasAlpha,
-            false,
-            0,
-            0
-          );
-          assert(ok, "THREE.BasisTextureLoader: transcodeImage() failed for level " + level.index + ".");
-          mipmaps.push({ data: dst, width: level.width, height: level.height });
-        }
-      } finally {
-        transcoder.delete();
-      }
-    } else {
-      for (let i = 0; i < taskConfig.levels.length; i++) {
-        const level = taskConfig.levels[i];
-        const dstByteLength = getTranscodedImageByteLength(transcoderFormat, level.width, level.height);
-        const dst = new Uint8Array(dstByteLength);
-        const ok = BasisModule.transcodeUASTCImage(
-          transcoderFormat,
-          dst,
-          dstByteLength / blockByteLength,
-          level.data,
-          getWidthInBlocks(transcoderFormat, level.width),
-          getHeightInBlocks(transcoderFormat, level.height),
-          level.width,
-          level.height,
-          level.index,
-          0,
-          level.data.byteLength,
-          0,
-          hasAlpha,
-          false,
-          0,
-          0,
-          -1,
-          -1
-        );
-        assert(ok, "THREE.BasisTextureLoader: transcodeUASTCImage() failed for level " + level.index + ".");
-        mipmaps.push({ data: dst, width: level.width, height: level.height });
-      }
-    }
-    return { width, height, hasAlpha, mipmaps, format: engineFormat };
-  }
-  function transcode(buffer) {
-    const basisFile = new BasisModule.BasisFile(new Uint8Array(buffer));
-    const basisFormat = basisFile.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S;
-    const width = basisFile.getImageWidth(0, 0);
-    const height = basisFile.getImageHeight(0, 0);
-    const levels = basisFile.getNumLevels(0);
-    const hasAlpha = basisFile.getHasAlpha();
-    function cleanup() {
-      basisFile.close();
-      basisFile.delete();
-    }
-    const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha);
-    if (!width || !height || !levels) {
-      cleanup();
-      throw new Error("THREE.BasisTextureLoader:	Invalid texture");
-    }
-    if (!basisFile.startTranscoding()) {
-      cleanup();
-      throw new Error("THREE.BasisTextureLoader: .startTranscoding failed");
-    }
-    const mipmaps = [];
-    for (let mip = 0; mip < levels; mip++) {
-      const mipWidth = basisFile.getImageWidth(0, mip);
-      const mipHeight = basisFile.getImageHeight(0, mip);
-      const dst = new Uint8Array(basisFile.getImageTranscodedSizeInBytes(0, mip, transcoderFormat));
-      const status = basisFile.transcodeImage(dst, 0, mip, transcoderFormat, 0, hasAlpha);
-      if (!status) {
-        cleanup();
-        throw new Error("THREE.BasisTextureLoader: .transcodeImage failed.");
-      }
-      mipmaps.push({ data: dst, width: mipWidth, height: mipHeight });
-    }
-    cleanup();
-    return { width, height, hasAlpha, mipmaps, format: engineFormat };
-  }
-  const FORMAT_OPTIONS = [
-    {
-      if: "astcSupported",
-      basisFormat: [BasisFormat.UASTC_4x4],
-      transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4],
-      engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format],
-      priorityETC1S: Infinity,
-      priorityUASTC: 1,
-      needsPowerOfTwo: false
-    },
-    {
-      if: "bptcSupported",
-      basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],
-      transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5],
-      engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format],
-      priorityETC1S: 3,
-      priorityUASTC: 2,
-      needsPowerOfTwo: false
-    },
-    {
-      if: "dxtSupported",
-      basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],
-      transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3],
-      engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format],
-      priorityETC1S: 4,
-      priorityUASTC: 5,
-      needsPowerOfTwo: false
-    },
-    {
-      if: "etc2Supported",
-      basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],
-      transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2],
-      engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format],
-      priorityETC1S: 1,
-      priorityUASTC: 3,
-      needsPowerOfTwo: false
-    },
-    {
-      if: "etc1Supported",
-      basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],
-      transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC1],
-      engineFormat: [EngineFormat.RGB_ETC1_Format, EngineFormat.RGB_ETC1_Format],
-      priorityETC1S: 2,
-      priorityUASTC: 4,
-      needsPowerOfTwo: false
-    },
-    {
-      if: "pvrtcSupported",
-      basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],
-      transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA],
-      engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format],
-      priorityETC1S: 5,
-      priorityUASTC: 6,
-      needsPowerOfTwo: true
-    }
-  ];
-  const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) {
-    return a.priorityETC1S - b.priorityETC1S;
-  });
-  const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) {
-    return a.priorityUASTC - b.priorityUASTC;
-  });
-  function getTranscoderFormat(basisFormat, width, height, hasAlpha) {
-    let transcoderFormat;
-    let engineFormat;
-    const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS;
-    for (let i = 0; i < options.length; i++) {
-      const opt = options[i];
-      if (!config[opt.if])
-        continue;
-      if (!opt.basisFormat.includes(basisFormat))
-        continue;
-      if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height)))
-        continue;
-      transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0];
-      engineFormat = opt.engineFormat[hasAlpha ? 1 : 0];
-      return { transcoderFormat, engineFormat };
-    }
-    console.warn("THREE.BasisTextureLoader: No suitable compressed texture format found. Decoding to RGBA32.");
-    transcoderFormat = TranscoderFormat.RGBA32;
-    engineFormat = EngineFormat.RGBAFormat;
-    return { transcoderFormat, engineFormat };
-  }
-  function assert(ok, message) {
-    if (!ok)
-      throw new Error(message);
-  }
-  function getWidthInBlocks(transcoderFormat, width) {
-    return Math.ceil(width / BasisModule.getFormatBlockWidth(transcoderFormat));
-  }
-  function getHeightInBlocks(transcoderFormat, height) {
-    return Math.ceil(height / BasisModule.getFormatBlockHeight(transcoderFormat));
-  }
-  function getTranscodedImageByteLength(transcoderFormat, width, height) {
-    const blockByteLength = BasisModule.getBytesPerBlockOrPixel(transcoderFormat);
-    if (BasisModule.formatIsUncompressed(transcoderFormat)) {
-      return width * height * blockByteLength;
-    }
-    if (transcoderFormat === TranscoderFormat.PVRTC1_4_RGB || transcoderFormat === TranscoderFormat.PVRTC1_4_RGBA) {
-      const paddedWidth = width + 3 & ~3;
-      const paddedHeight = height + 3 & ~3;
-      return (Math.max(8, paddedWidth) * Math.max(8, paddedHeight) * 4 + 7) / 8;
-    }
-    return getWidthInBlocks(transcoderFormat, width) * getHeightInBlocks(transcoderFormat, height) * blockByteLength;
-  }
-  function isPowerOfTwo(value) {
-    if (value <= 2)
-      return true;
-    return (value & value - 1) === 0 && value !== 0;
-  }
-});
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/TDSLoader.js
-
-class TDSLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.debug = false;
-    this.group = null;
-    this.position = 0;
-    this.materials = [];
-    this.meshes = [];
-  }
-  /**
-   * Load 3ds file from url.
-   *
-   * @method load
-   * @param {[type]} url URL for the file.
-   * @param {Function} onLoad onLoad callback, receives group Object3D as argument.
-   * @param {Function} onProgress onProgress callback.
-   * @param {Function} onError onError callback.
-   */
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const path = this.path === "" ? three_module.LoaderUtils.extractUrlBase(url) : this.path;
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(this.requestHeader);
-    loader.setWithCredentials(this.withCredentials);
-    loader.load(
-      url,
-      function(data) {
-        try {
-          onLoad(scope.parse(data, path));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  /**
-   * Parse arraybuffer data and load 3ds file.
-   *
-   * @method parse
-   * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded.
-   * @param {String} path Path for external resources.
-   * @return {Group} Group loaded from 3ds file.
-   */
-  parse(arraybuffer, path) {
-    this.group = new three_module.Group();
-    this.position = 0;
-    this.materials = [];
-    this.meshes = [];
-    this.readFile(arraybuffer, path);
-    for (let i = 0; i < this.meshes.length; i++) {
-      this.group.add(this.meshes[i]);
-    }
-    return this.group;
-  }
-  /**
-   * Decode file content to read 3ds data.
-   *
-   * @method readFile
-   * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded.
-   * @param {String} path Path for external resources.
-   */
-  readFile(arraybuffer, path) {
-    const data = new DataView(arraybuffer);
-    const chunk = this.readChunk(data);
-    if (chunk.id === MLIBMAGIC || chunk.id === CMAGIC || chunk.id === M3DMAGIC) {
-      let next = this.nextChunk(data, chunk);
-      while (next !== 0) {
-        if (next === M3D_VERSION) {
-          const version = this.readDWord(data);
-          this.debugMessage("3DS file version: " + version);
-        } else if (next === MDATA) {
-          this.resetPosition(data);
-          this.readMeshData(data, path);
-        } else {
-          this.debugMessage("Unknown main chunk: " + next.toString(16));
-        }
-        next = this.nextChunk(data, chunk);
-      }
-    }
-    this.debugMessage("Parsed " + this.meshes.length + " meshes");
-  }
-  /**
-   * Read mesh data chunk.
-   *
-   * @method readMeshData
-   * @param {Dataview} data Dataview in use.
-   * @param {String} path Path for external resources.
-   */
-  readMeshData(data, path) {
-    const chunk = this.readChunk(data);
-    let next = this.nextChunk(data, chunk);
-    while (next !== 0) {
-      if (next === MESH_VERSION) {
-        const version = +this.readDWord(data);
-        this.debugMessage("Mesh Version: " + version);
-      } else if (next === MASTER_SCALE) {
-        const scale = this.readFloat(data);
-        this.debugMessage("Master scale: " + scale);
-        this.group.scale.set(scale, scale, scale);
-      } else if (next === NAMED_OBJECT) {
-        this.debugMessage("Named Object");
-        this.resetPosition(data);
-        this.readNamedObject(data);
-      } else if (next === MAT_ENTRY) {
-        this.debugMessage("Material");
-        this.resetPosition(data);
-        this.readMaterialEntry(data, path);
-      } else {
-        this.debugMessage("Unknown MDATA chunk: " + next.toString(16));
-      }
-      next = this.nextChunk(data, chunk);
-    }
-  }
-  /**
-   * Read named object chunk.
-   *
-   * @method readNamedObject
-   * @param {Dataview} data Dataview in use.
-   */
-  readNamedObject(data) {
-    const chunk = this.readChunk(data);
-    const name = this.readString(data, 64);
-    chunk.cur = this.position;
-    let next = this.nextChunk(data, chunk);
-    while (next !== 0) {
-      if (next === N_TRI_OBJECT) {
-        this.resetPosition(data);
-        const mesh = this.readMesh(data);
-        mesh.name = name;
-        this.meshes.push(mesh);
-      } else {
-        this.debugMessage("Unknown named object chunk: " + next.toString(16));
-      }
-      next = this.nextChunk(data, chunk);
-    }
-    this.endChunk(chunk);
-  }
-  /**
-   * Read material data chunk and add it to the material list.
-   *
-   * @method readMaterialEntry
-   * @param {Dataview} data Dataview in use.
-   * @param {String} path Path for external resources.
-   */
-  readMaterialEntry(data, path) {
-    const chunk = this.readChunk(data);
-    let next = this.nextChunk(data, chunk);
-    const material = new three_module.MeshPhongMaterial();
-    while (next !== 0) {
-      if (next === MAT_NAME) {
-        material.name = this.readString(data, 64);
-        this.debugMessage("   Name: " + material.name);
-      } else if (next === MAT_WIRE) {
-        this.debugMessage("   Wireframe");
-        material.wireframe = true;
-      } else if (next === MAT_WIRE_SIZE) {
-        const value = this.readByte(data);
-        material.wireframeLinewidth = value;
-        this.debugMessage("   Wireframe Thickness: " + value);
-      } else if (next === MAT_TWO_SIDE) {
-        material.side = three_module.DoubleSide;
-        this.debugMessage("   DoubleSided");
-      } else if (next === MAT_ADDITIVE) {
-        this.debugMessage("   Additive Blending");
-        material.blending = three_module.AdditiveBlending;
-      } else if (next === MAT_DIFFUSE) {
-        this.debugMessage("   Diffuse Color");
-        material.color = this.readColor(data);
-      } else if (next === MAT_SPECULAR) {
-        this.debugMessage("   Specular Color");
-        material.specular = this.readColor(data);
-      } else if (next === MAT_AMBIENT) {
-        this.debugMessage("   Ambient color");
-        material.color = this.readColor(data);
-      } else if (next === MAT_SHININESS) {
-        const shininess = this.readPercentage(data);
-        material.shininess = shininess * 100;
-        this.debugMessage("   Shininess : " + shininess);
-      } else if (next === MAT_TRANSPARENCY) {
-        const transparency = this.readPercentage(data);
-        material.opacity = 1 - transparency;
-        this.debugMessage("  Transparency : " + transparency);
-        material.transparent = material.opacity < 1 ? true : false;
-      } else if (next === MAT_TEXMAP) {
-        this.debugMessage("   ColorMap");
-        this.resetPosition(data);
-        material.map = this.readMap(data, path);
-      } else if (next === MAT_BUMPMAP) {
-        this.debugMessage("   BumpMap");
-        this.resetPosition(data);
-        material.bumpMap = this.readMap(data, path);
-      } else if (next === MAT_OPACMAP) {
-        this.debugMessage("   OpacityMap");
-        this.resetPosition(data);
-        material.alphaMap = this.readMap(data, path);
-      } else if (next === MAT_SPECMAP) {
-        this.debugMessage("   SpecularMap");
-        this.resetPosition(data);
-        material.specularMap = this.readMap(data, path);
-      } else {
-        this.debugMessage("   Unknown material chunk: " + next.toString(16));
-      }
-      next = this.nextChunk(data, chunk);
-    }
-    this.endChunk(chunk);
-    this.materials[material.name] = material;
-  }
-  /**
-   * Read mesh data chunk.
-   *
-   * @method readMesh
-   * @param {Dataview} data Dataview in use.
-   * @return {Mesh} The parsed mesh.
-   */
-  readMesh(data) {
-    const chunk = this.readChunk(data);
-    let next = this.nextChunk(data, chunk);
-    const geometry = new three_module.BufferGeometry();
-    const material = new three_module.MeshPhongMaterial();
-    const mesh = new three_module.Mesh(geometry, material);
-    mesh.name = "mesh";
-    while (next !== 0) {
-      if (next === POINT_ARRAY) {
-        const points = this.readWord(data);
-        this.debugMessage("   Vertex: " + points);
-        const vertices = [];
-        for (let i = 0; i < points; i++) {
-          vertices.push(this.readFloat(data));
-          vertices.push(this.readFloat(data));
-          vertices.push(this.readFloat(data));
-        }
-        geometry.setAttribute("position", new three_module.Float32BufferAttribute(vertices, 3));
-      } else if (next === FACE_ARRAY) {
-        this.resetPosition(data);
-        this.readFaceArray(data, mesh);
-      } else if (next === TEX_VERTS) {
-        const texels = this.readWord(data);
-        this.debugMessage("   UV: " + texels);
-        const uvs = [];
-        for (let i = 0; i < texels; i++) {
-          uvs.push(this.readFloat(data));
-          uvs.push(this.readFloat(data));
-        }
-        geometry.setAttribute("uv", new three_module.Float32BufferAttribute(uvs, 2));
-      } else if (next === MESH_MATRIX) {
-        this.debugMessage("   Tranformation Matrix (TODO)");
-        const values = [];
-        for (let i = 0; i < 12; i++) {
-          values[i] = this.readFloat(data);
-        }
-        const matrix = new three_module.Matrix4();
-        matrix.elements[0] = values[0];
-        matrix.elements[1] = values[6];
-        matrix.elements[2] = values[3];
-        matrix.elements[3] = values[9];
-        matrix.elements[4] = values[2];
-        matrix.elements[5] = values[8];
-        matrix.elements[6] = values[5];
-        matrix.elements[7] = values[11];
-        matrix.elements[8] = values[1];
-        matrix.elements[9] = values[7];
-        matrix.elements[10] = values[4];
-        matrix.elements[11] = values[10];
-        matrix.elements[12] = 0;
-        matrix.elements[13] = 0;
-        matrix.elements[14] = 0;
-        matrix.elements[15] = 1;
-        matrix.transpose();
-        const inverse = new three_module.Matrix4();
-        inverse.copy(matrix).invert();
-        geometry.applyMatrix4(inverse);
-        matrix.decompose(mesh.position, mesh.quaternion, mesh.scale);
-      } else {
-        this.debugMessage("   Unknown mesh chunk: " + next.toString(16));
-      }
-      next = this.nextChunk(data, chunk);
-    }
-    this.endChunk(chunk);
-    geometry.computeVertexNormals();
-    return mesh;
-  }
-  /**
-   * Read face array data chunk.
-   *
-   * @method readFaceArray
-   * @param {Dataview} data Dataview in use.
-   * @param {Mesh} mesh Mesh to be filled with the data read.
-   */
-  readFaceArray(data, mesh) {
-    const chunk = this.readChunk(data);
-    const faces = this.readWord(data);
-    this.debugMessage("   Faces: " + faces);
-    const index = [];
-    for (let i = 0; i < faces; ++i) {
-      index.push(this.readWord(data), this.readWord(data), this.readWord(data));
-      this.readWord(data);
-    }
-    mesh.geometry.setIndex(index);
-    let materialIndex = 0;
-    let start = 0;
-    while (this.position < chunk.end) {
-      const subchunk = this.readChunk(data);
-      if (subchunk.id === MSH_MAT_GROUP) {
-        this.debugMessage("      Material Group");
-        this.resetPosition(data);
-        const group = this.readMaterialGroup(data);
-        const count = group.index.length * 3;
-        mesh.geometry.addGroup(start, count, materialIndex);
-        start += count;
-        materialIndex++;
-        const material = this.materials[group.name];
-        if (Array.isArray(mesh.material) === false)
-          mesh.material = [];
-        if (material !== void 0) {
-          mesh.material.push(material);
-        }
-      } else {
-        this.debugMessage("      Unknown face array chunk: " + subchunk.toString(16));
-      }
-      this.endChunk(subchunk);
-    }
-    if (mesh.material.length === 1)
-      mesh.material = mesh.material[0];
-    this.endChunk(chunk);
-  }
-  /**
-   * Read texture map data chunk.
-   *
-   * @method readMap
-   * @param {Dataview} data Dataview in use.
-   * @param {String} path Path for external resources.
-   * @return {Texture} Texture read from this data chunk.
-   */
-  readMap(data, path) {
-    const chunk = this.readChunk(data);
-    let next = this.nextChunk(data, chunk);
-    let texture = {};
-    const loader = new three_module.TextureLoader(this.manager);
-    loader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);
-    while (next !== 0) {
-      if (next === MAT_MAPNAME) {
-        const name = this.readString(data, 128);
-        texture = loader.load(name);
-        this.debugMessage("      File: " + path + name);
-      } else if (next === MAT_MAP_UOFFSET) {
-        texture.offset.x = this.readFloat(data);
-        this.debugMessage("      OffsetX: " + texture.offset.x);
-      } else if (next === MAT_MAP_VOFFSET) {
-        texture.offset.y = this.readFloat(data);
-        this.debugMessage("      OffsetY: " + texture.offset.y);
-      } else if (next === MAT_MAP_USCALE) {
-        texture.repeat.x = this.readFloat(data);
-        this.debugMessage("      RepeatX: " + texture.repeat.x);
-      } else if (next === MAT_MAP_VSCALE) {
-        texture.repeat.y = this.readFloat(data);
-        this.debugMessage("      RepeatY: " + texture.repeat.y);
-      } else {
-        this.debugMessage("      Unknown map chunk: " + next.toString(16));
-      }
-      next = this.nextChunk(data, chunk);
-    }
-    this.endChunk(chunk);
-    return texture;
-  }
-  /**
-   * Read material group data chunk.
-   *
-   * @method readMaterialGroup
-   * @param {Dataview} data Dataview in use.
-   * @return {Object} Object with name and index of the object.
-   */
-  readMaterialGroup(data) {
-    this.readChunk(data);
-    const name = this.readString(data, 64);
-    const numFaces = this.readWord(data);
-    this.debugMessage("         Name: " + name);
-    this.debugMessage("         Faces: " + numFaces);
-    const index = [];
-    for (let i = 0; i < numFaces; ++i) {
-      index.push(this.readWord(data));
-    }
-    return { name, index };
-  }
-  /**
-   * Read a color value.
-   *
-   * @method readColor
-   * @param {DataView} data Dataview.
-   * @return {Color} Color value read..
-   */
-  readColor(data) {
-    const chunk = this.readChunk(data);
-    const color = new three_module.Color();
-    if (chunk.id === COLOR_24 || chunk.id === LIN_COLOR_24) {
-      const r = this.readByte(data);
-      const g = this.readByte(data);
-      const b = this.readByte(data);
-      color.setRGB(r / 255, g / 255, b / 255);
-      this.debugMessage("      Color: " + color.r + ", " + color.g + ", " + color.b);
-    } else if (chunk.id === COLOR_F || chunk.id === LIN_COLOR_F) {
-      const r = this.readFloat(data);
-      const g = this.readFloat(data);
-      const b = this.readFloat(data);
-      color.setRGB(r, g, b);
-      this.debugMessage("      Color: " + color.r + ", " + color.g + ", " + color.b);
-    } else {
-      this.debugMessage("      Unknown color chunk: " + chunk.toString(16));
-    }
-    this.endChunk(chunk);
-    return color;
-  }
-  /**
-   * Read next chunk of data.
-   *
-   * @method readChunk
-   * @param {DataView} data Dataview.
-   * @return {Object} Chunk of data read.
-   */
-  readChunk(data) {
-    const chunk = {};
-    chunk.cur = this.position;
-    chunk.id = this.readWord(data);
-    chunk.size = this.readDWord(data);
-    chunk.end = chunk.cur + chunk.size;
-    chunk.cur += 6;
-    return chunk;
-  }
-  /**
-   * Set position to the end of the current chunk of data.
-   *
-   * @method endChunk
-   * @param {Object} chunk Data chunk.
-   */
-  endChunk(chunk) {
-    this.position = chunk.end;
-  }
-  /**
-   * Move to the next data chunk.
-   *
-   * @method nextChunk
-   * @param {DataView} data Dataview.
-   * @param {Object} chunk Data chunk.
-   */
-  nextChunk(data, chunk) {
-    if (chunk.cur >= chunk.end) {
-      return 0;
-    }
-    this.position = chunk.cur;
-    try {
-      const next = this.readChunk(data);
-      chunk.cur += next.size;
-      return next.id;
-    } catch (e) {
-      this.debugMessage("Unable to read chunk at " + this.position);
-      return 0;
-    }
-  }
-  /**
-   * Reset dataview position.
-   *
-   * @method resetPosition
-   */
-  resetPosition() {
-    this.position -= 6;
-  }
-  /**
-   * Read byte value.
-   *
-   * @method readByte
-   * @param {DataView} data Dataview to read data from.
-   * @return {Number} Data read from the dataview.
-   */
-  readByte(data) {
-    const v = data.getUint8(this.position, true);
-    this.position += 1;
-    return v;
-  }
-  /**
-   * Read 32 bit float value.
-   *
-   * @method readFloat
-   * @param {DataView} data Dataview to read data from.
-   * @return {Number} Data read from the dataview.
-   */
-  readFloat(data) {
-    try {
-      const v = data.getFloat32(this.position, true);
-      this.position += 4;
-      return v;
-    } catch (e) {
-      this.debugMessage(e + " " + this.position + " " + data.byteLength);
-    }
-  }
-  /**
-   * Read 32 bit signed integer value.
-   *
-   * @method readInt
-   * @param {DataView} data Dataview to read data from.
-   * @return {Number} Data read from the dataview.
-   */
-  readInt(data) {
-    const v = data.getInt32(this.position, true);
-    this.position += 4;
-    return v;
-  }
-  /**
-   * Read 16 bit signed integer value.
-   *
-   * @method readShort
-   * @param {DataView} data Dataview to read data from.
-   * @return {Number} Data read from the dataview.
-   */
-  readShort(data) {
-    const v = data.getInt16(this.position, true);
-    this.position += 2;
-    return v;
-  }
-  /**
-   * Read 64 bit unsigned integer value.
-   *
-   * @method readDWord
-   * @param {DataView} data Dataview to read data from.
-   * @return {Number} Data read from the dataview.
-   */
-  readDWord(data) {
-    const v = data.getUint32(this.position, true);
-    this.position += 4;
-    return v;
-  }
-  /**
-   * Read 32 bit unsigned integer value.
-   *
-   * @method readWord
-   * @param {DataView} data Dataview to read data from.
-   * @return {Number} Data read from the dataview.
-   */
-  readWord(data) {
-    const v = data.getUint16(this.position, true);
-    this.position += 2;
-    return v;
-  }
-  /**
-   * Read string value.
-   *
-   * @method readString
-   * @param {DataView} data Dataview to read data from.
-   * @param {Number} maxLength Max size of the string to be read.
-   * @return {String} Data read from the dataview.
-   */
-  readString(data, maxLength) {
-    let s = "";
-    for (let i = 0; i < maxLength; i++) {
-      const c = this.readByte(data);
-      if (!c) {
-        break;
-      }
-      s += String.fromCharCode(c);
-    }
-    return s;
-  }
-  /**
-   * Read percentage value.
-   *
-   * @method readPercentage
-   * @param {DataView} data Dataview to read data from.
-   * @return {Number} Data read from the dataview.
-   */
-  readPercentage(data) {
-    const chunk = this.readChunk(data);
-    let value;
-    switch (chunk.id) {
-      case INT_PERCENTAGE:
-        value = this.readShort(data) / 100;
-        break;
-      case FLOAT_PERCENTAGE:
-        value = this.readFloat(data);
-        break;
-      default:
-        this.debugMessage("      Unknown percentage chunk: " + chunk.toString(16));
-    }
-    this.endChunk(chunk);
-    return value;
-  }
-  /**
-   * Print debug message to the console.
-   *
-   * Is controlled by a flag to show or hide debug messages.
-   *
-   * @method debugMessage
-   * @param {Object} message Debug message to print to the console.
-   */
-  debugMessage(message) {
-    if (this.debug) {
-      console.log(message);
-    }
-  }
-}
-const M3DMAGIC = 19789;
-const MLIBMAGIC = 15786;
-const CMAGIC = 49725;
-const M3D_VERSION = 2;
-const COLOR_F = 16;
-const COLOR_24 = 17;
-const LIN_COLOR_24 = 18;
-const LIN_COLOR_F = 19;
-const INT_PERCENTAGE = 48;
-const FLOAT_PERCENTAGE = 49;
-const MDATA = 15677;
-const MESH_VERSION = 15678;
-const MASTER_SCALE = 256;
-const MAT_ENTRY = 45055;
-const MAT_NAME = 40960;
-const MAT_AMBIENT = 40976;
-const MAT_DIFFUSE = 40992;
-const MAT_SPECULAR = 41008;
-const MAT_SHININESS = 41024;
-const MAT_TRANSPARENCY = 41040;
-const MAT_TWO_SIDE = 41089;
-const MAT_ADDITIVE = 41091;
-const MAT_WIRE = 41093;
-const MAT_WIRE_SIZE = 41095;
-const MAT_TEXMAP = 41472;
-const MAT_OPACMAP = 41488;
-const MAT_BUMPMAP = 41520;
-const MAT_SPECMAP = 41476;
-const MAT_MAPNAME = 41728;
-const MAT_MAP_USCALE = 41812;
-const MAT_MAP_VSCALE = 41814;
-const MAT_MAP_UOFFSET = 41816;
-const MAT_MAP_VOFFSET = 41818;
-const NAMED_OBJECT = 16384;
-const N_TRI_OBJECT = 16640;
-const POINT_ARRAY = 16656;
-const FACE_ARRAY = 16672;
-const MSH_MAT_GROUP = 16688;
-const TEX_VERTS = 16704;
-const MESH_MATRIX = 16736;
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/LDrawLoader.js
-
-const FINISH_TYPE_DEFAULT = 0;
-const FINISH_TYPE_CHROME = 1;
-const FINISH_TYPE_PEARLESCENT = 2;
-const FINISH_TYPE_RUBBER = 3;
-const FINISH_TYPE_MATTE_METALLIC = 4;
-const FINISH_TYPE_METAL = 5;
-const FILE_LOCATION_AS_IS = 0;
-const FILE_LOCATION_TRY_PARTS = 1;
-const FILE_LOCATION_TRY_P = 2;
-const FILE_LOCATION_TRY_MODELS = 3;
-const FILE_LOCATION_TRY_RELATIVE = 4;
-const FILE_LOCATION_TRY_ABSOLUTE = 5;
-const FILE_LOCATION_NOT_FOUND = 6;
-const MAIN_COLOUR_CODE = "16";
-const MAIN_EDGE_COLOUR_CODE = "24";
-const _tempVec0 = /* @__PURE__ */ new three_module.Vector3();
-const _tempVec1 = /* @__PURE__ */ new three_module.Vector3();
-class LDrawConditionalLineMaterial extends three_module.ShaderMaterial {
-  constructor(parameters) {
-    super({
-      uniforms: three_module.UniformsUtils.merge([
-        three_module.UniformsLib.fog,
-        {
-          diffuse: {
-            value: new three_module.Color()
-          },
-          opacity: {
-            value: 1
-          }
-        }
-      ]),
-      vertexShader: (
-        /* glsl */
-        `
-        attribute vec3 control0;
-        attribute vec3 control1;
-        attribute vec3 direction;
-        varying float discardFlag;
-
-        #include <common>
-        #include <color_pars_vertex>
-        #include <fog_pars_vertex>
-        #include <logdepthbuf_pars_vertex>
-        #include <clipping_planes_pars_vertex>
-
-        void main() {
-          #include <color_vertex>
-
-          vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);
-          gl_Position = projectionMatrix * mvPosition;
-
-          // Transform the line segment ends and control points into camera clip space
-          vec4 c0 = projectionMatrix * modelViewMatrix * vec4(control0, 1.0);
-          vec4 c1 = projectionMatrix * modelViewMatrix * vec4(control1, 1.0);
-          vec4 p0 = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
-          vec4 p1 = projectionMatrix * modelViewMatrix * vec4(position + direction, 1.0);
-
-          c0.xy /= c0.w;
-          c1.xy /= c1.w;
-          p0.xy /= p0.w;
-          p1.xy /= p1.w;
-
-          // Get the direction of the segment and an orthogonal vector
-          vec2 dir = p1.xy - p0.xy;
-          vec2 norm = vec2(-dir.y, dir.x);
-
-          // Get control point directions from the line
-          vec2 c0dir = c0.xy - p1.xy;
-          vec2 c1dir = c1.xy - p1.xy;
-
-          // If the vectors to the controls points are pointed in different directions away
-          // from the line segment then the line should not be drawn.
-          float d0 = dot(normalize(norm), normalize(c0dir));
-          float d1 = dot(normalize(norm), normalize(c1dir));
-          discardFlag = float(sign(d0) != sign(d1));
-
-          #include <logdepthbuf_vertex>
-          #include <clipping_planes_vertex>
-          #include <fog_vertex>
-        }
-      `
-      ),
-      fragmentShader: (
-        /* glsl */
-        `
-        uniform vec3 diffuse;
-        uniform float opacity;
-        varying float discardFlag;
-
-        #include <common>
-        #include <color_pars_fragment>
-        #include <fog_pars_fragment>
-        #include <logdepthbuf_pars_fragment>
-        #include <clipping_planes_pars_fragment>
-
-        void main() {
-          if (discardFlag > 0.5) discard;
-
-          #include <clipping_planes_fragment>
-          vec3 outgoingLight = vec3(0.0);
-          vec4 diffuseColor = vec4(diffuse, opacity);
-          #include <logdepthbuf_fragment>
-          #include <color_fragment>
-          outgoingLight = diffuseColor.rgb; // simple shader
-          gl_FragColor = vec4(outgoingLight, diffuseColor.a);
-          #include <tonemapping_fragment>
-          #include <encodings_fragment>
-          #include <fog_fragment>
-          #include <premultiplied_alpha_fragment>
-        }
-      `
-      )
-    });
-    Object.defineProperties(this, {
-      opacity: {
-        get: function() {
-          return this.uniforms.opacity.value;
-        },
-        set: function(value) {
-          this.uniforms.opacity.value = value;
-        }
-      },
-      color: {
-        get: function() {
-          return this.uniforms.diffuse.value;
-        }
-      }
-    });
-    this.setValues(parameters);
-    this.isLDrawConditionalLineMaterial = true;
-  }
-}
-class ConditionalLineSegments extends three_module.LineSegments {
-  constructor(geometry, material) {
-    super(geometry, material);
-    this.isConditionalLine = true;
-  }
-}
-function generateFaceNormals(faces) {
-  for (let i = 0, l = faces.length; i < l; i++) {
-    const face = faces[i];
-    const vertices = face.vertices;
-    const v0 = vertices[0];
-    const v1 = vertices[1];
-    const v2 = vertices[2];
-    _tempVec0.subVectors(v1, v0);
-    _tempVec1.subVectors(v2, v1);
-    face.faceNormal = new three_module.Vector3().crossVectors(_tempVec0, _tempVec1).normalize();
-  }
-}
-const _ray = /* @__PURE__ */ new three_module.Ray();
-function smoothNormals(faces, lineSegments, checkSubSegments = false) {
-  const hashMultiplier = (1 + 1e-10) * 100;
-  function hashVertex(v) {
-    const x = ~~(v.x * hashMultiplier);
-    const y = ~~(v.y * hashMultiplier);
-    const z = ~~(v.z * hashMultiplier);
-    return `${x},${y},${z}`;
-  }
-  function hashEdge(v0, v1) {
-    return `${hashVertex(v0)}_${hashVertex(v1)}`;
-  }
-  function toNormalizedRay(v0, v1, targetRay) {
-    targetRay.direction.subVectors(v1, v0).normalize();
-    const scalar = v0.dot(targetRay.direction);
-    targetRay.origin.copy(v0).addScaledVector(targetRay.direction, -scalar);
-    return targetRay;
-  }
-  function hashRay(ray) {
-    return hashEdge(ray.origin, ray.direction);
-  }
-  const hardEdges = /* @__PURE__ */ new Set();
-  const hardEdgeRays = /* @__PURE__ */ new Map();
-  const halfEdgeList = {};
-  const normals = [];
-  for (let i = 0, l = lineSegments.length; i < l; i++) {
-    const ls = lineSegments[i];
-    const vertices = ls.vertices;
-    const v0 = vertices[0];
-    const v1 = vertices[1];
-    hardEdges.add(hashEdge(v0, v1));
-    hardEdges.add(hashEdge(v1, v0));
-    if (checkSubSegments) {
-      const ray = toNormalizedRay(v0, v1, new three_module.Ray());
-      const rh1 = hashRay(ray);
-      if (!hardEdgeRays.has(rh1)) {
-        toNormalizedRay(v1, v0, ray);
-        const rh2 = hashRay(ray);
-        const info2 = {
-          ray,
-          distances: []
-        };
-        hardEdgeRays.set(rh1, info2);
-        hardEdgeRays.set(rh2, info2);
-      }
-      const info = hardEdgeRays.get(rh1);
-      let d0 = info.ray.direction.dot(v0);
-      let d1 = info.ray.direction.dot(v1);
-      if (d0 > d1) {
-        ;
-        [d0, d1] = [d1, d0];
-      }
-      info.distances.push(d0, d1);
-    }
-  }
-  for (let i = 0, l = faces.length; i < l; i++) {
-    const tri = faces[i];
-    const vertices = tri.vertices;
-    const vertCount = vertices.length;
-    for (let i2 = 0; i2 < vertCount; i2++) {
-      const index = i2;
-      const next = (i2 + 1) % vertCount;
-      const v0 = vertices[index];
-      const v1 = vertices[next];
-      const hash = hashEdge(v0, v1);
-      if (hardEdges.has(hash)) {
-        continue;
-      }
-      if (checkSubSegments) {
-        toNormalizedRay(v0, v1, _ray);
-        const rayHash = hashRay(_ray);
-        if (hardEdgeRays.has(rayHash)) {
-          const info2 = hardEdgeRays.get(rayHash);
-          const { ray, distances } = info2;
-          let d0 = ray.direction.dot(v0);
-          let d1 = ray.direction.dot(v1);
-          if (d0 > d1) {
-            ;
-            [d0, d1] = [d1, d0];
-          }
-          let found = false;
-          for (let i3 = 0, l2 = distances.length; i3 < l2; i3 += 2) {
-            if (d0 >= distances[i3] && d1 <= distances[i3 + 1]) {
-              found = true;
-              break;
-            }
-          }
-          if (found) {
-            continue;
-          }
-        }
-      }
-      const info = {
-        index,
-        tri
-      };
-      halfEdgeList[hash] = info;
-    }
-  }
-  while (true) {
-    let halfEdge = null;
-    for (const key in halfEdgeList) {
-      halfEdge = halfEdgeList[key];
-      break;
-    }
-    if (halfEdge === null) {
-      break;
-    }
-    const queue = [halfEdge];
-    while (queue.length > 0) {
-      const tri = queue.pop().tri;
-      const vertices = tri.vertices;
-      const vertNormals = tri.normals;
-      const faceNormal = tri.faceNormal;
-      const vertCount = vertices.length;
-      for (let i2 = 0; i2 < vertCount; i2++) {
-        const index = i2;
-        const next = (i2 + 1) % vertCount;
-        const v0 = vertices[index];
-        const v1 = vertices[next];
-        const hash = hashEdge(v0, v1);
-        delete halfEdgeList[hash];
-        const reverseHash = hashEdge(v1, v0);
-        const otherInfo = halfEdgeList[reverseHash];
-        if (otherInfo) {
-          const otherTri = otherInfo.tri;
-          const otherIndex = otherInfo.index;
-          const otherNormals = otherTri.normals;
-          const otherVertCount = otherNormals.length;
-          const otherFaceNormal = otherTri.faceNormal;
-          if (Math.abs(otherTri.faceNormal.dot(tri.faceNormal)) < 0.25) {
-            continue;
-          }
-          if (reverseHash in halfEdgeList) {
-            queue.push(otherInfo);
-            delete halfEdgeList[reverseHash];
-          }
-          const otherNext = (otherIndex + 1) % otherVertCount;
-          if (vertNormals[index] && otherNormals[otherNext] && vertNormals[index] !== otherNormals[otherNext]) {
-            otherNormals[otherNext].norm.add(vertNormals[index].norm);
-            vertNormals[index].norm = otherNormals[otherNext].norm;
-          }
-          let sharedNormal1 = vertNormals[index] || otherNormals[otherNext];
-          if (sharedNormal1 === null) {
-            sharedNormal1 = { norm: new three_module.Vector3() };
-            normals.push(sharedNormal1.norm);
-          }
-          if (vertNormals[index] === null) {
-            vertNormals[index] = sharedNormal1;
-            sharedNormal1.norm.add(faceNormal);
-          }
-          if (otherNormals[otherNext] === null) {
-            otherNormals[otherNext] = sharedNormal1;
-            sharedNormal1.norm.add(otherFaceNormal);
-          }
-          if (vertNormals[next] && otherNormals[otherIndex] && vertNormals[next] !== otherNormals[otherIndex]) {
-            otherNormals[otherIndex].norm.add(vertNormals[next].norm);
-            vertNormals[next].norm = otherNormals[otherIndex].norm;
-          }
-          let sharedNormal2 = vertNormals[next] || otherNormals[otherIndex];
-          if (sharedNormal2 === null) {
-            sharedNormal2 = { norm: new three_module.Vector3() };
-            normals.push(sharedNormal2.norm);
-          }
-          if (vertNormals[next] === null) {
-            vertNormals[next] = sharedNormal2;
-            sharedNormal2.norm.add(faceNormal);
-          }
-          if (otherNormals[otherIndex] === null) {
-            otherNormals[otherIndex] = sharedNormal2;
-            sharedNormal2.norm.add(otherFaceNormal);
-          }
-        }
-      }
-    }
-  }
-  for (let i = 0, l = normals.length; i < l; i++) {
-    normals[i].normalize();
-  }
-}
-function isPartType(type) {
-  return type === "Part" || type === "Unofficial_Part";
-}
-function isPrimitiveType(type) {
-  return /primitive/i.test(type) || type === "Subpart";
-}
-class LineParser {
-  constructor(line, lineNumber) {
-    this.line = line;
-    this.lineLength = line.length;
-    this.currentCharIndex = 0;
-    this.currentChar = " ";
-    this.lineNumber = lineNumber;
-  }
-  seekNonSpace() {
-    while (this.currentCharIndex < this.lineLength) {
-      this.currentChar = this.line.charAt(this.currentCharIndex);
-      if (this.currentChar !== " " && this.currentChar !== "	") {
-        return;
-      }
-      this.currentCharIndex++;
-    }
-  }
-  getToken() {
-    const pos0 = this.currentCharIndex++;
-    while (this.currentCharIndex < this.lineLength) {
-      this.currentChar = this.line.charAt(this.currentCharIndex);
-      if (this.currentChar === " " || this.currentChar === "	") {
-        break;
-      }
-      this.currentCharIndex++;
-    }
-    const pos1 = this.currentCharIndex;
-    this.seekNonSpace();
-    return this.line.substring(pos0, pos1);
-  }
-  getVector() {
-    return new three_module.Vector3(parseFloat(this.getToken()), parseFloat(this.getToken()), parseFloat(this.getToken()));
-  }
-  getRemainingString() {
-    return this.line.substring(this.currentCharIndex, this.lineLength);
-  }
-  isAtTheEnd() {
-    return this.currentCharIndex >= this.lineLength;
-  }
-  setToEnd() {
-    this.currentCharIndex = this.lineLength;
-  }
-  getLineNumberString() {
-    return this.lineNumber >= 0 ? " at line " + this.lineNumber : "";
-  }
-}
-class LDrawParsedCache {
-  constructor(loader) {
-    this.loader = loader;
-    this._cache = {};
-  }
-  cloneResult(original) {
-    const result = {};
-    result.faces = original.faces.map((face) => {
-      return {
-        colorCode: face.colorCode,
-        material: face.material,
-        vertices: face.vertices.map((v) => v.clone()),
-        normals: face.normals.map(() => null),
-        faceNormal: null
-      };
-    });
-    result.conditionalSegments = original.conditionalSegments.map((face) => {
-      return {
-        colorCode: face.colorCode,
-        material: face.material,
-        vertices: face.vertices.map((v) => v.clone()),
-        controlPoints: face.controlPoints.map((v) => v.clone())
-      };
-    });
-    result.lineSegments = original.lineSegments.map((face) => {
-      return {
-        colorCode: face.colorCode,
-        material: face.material,
-        vertices: face.vertices.map((v) => v.clone())
-      };
-    });
-    result.type = original.type;
-    result.category = original.category;
-    result.keywords = original.keywords;
-    result.subobjects = original.subobjects;
-    result.totalFaces = original.totalFaces;
-    result.startingConstructionStep = original.startingConstructionStep;
-    result.materials = original.materials;
-    result.group = null;
-    return result;
-  }
-  async fetchData(fileName) {
-    let triedLowerCase = false;
-    let locationState = FILE_LOCATION_AS_IS;
-    while (locationState !== FILE_LOCATION_NOT_FOUND) {
-      let subobjectURL = fileName;
-      switch (locationState) {
-        case FILE_LOCATION_AS_IS:
-          locationState = locationState + 1;
-          break;
-        case FILE_LOCATION_TRY_PARTS:
-          subobjectURL = "parts/" + subobjectURL;
-          locationState = locationState + 1;
-          break;
-        case FILE_LOCATION_TRY_P:
-          subobjectURL = "p/" + subobjectURL;
-          locationState = locationState + 1;
-          break;
-        case FILE_LOCATION_TRY_MODELS:
-          subobjectURL = "models/" + subobjectURL;
-          locationState = locationState + 1;
-          break;
-        case FILE_LOCATION_TRY_RELATIVE:
-          subobjectURL = fileName.substring(0, fileName.lastIndexOf("/") + 1) + subobjectURL;
-          locationState = locationState + 1;
-          break;
-        case FILE_LOCATION_TRY_ABSOLUTE:
-          if (triedLowerCase) {
-            locationState = FILE_LOCATION_NOT_FOUND;
-          } else {
-            fileName = fileName.toLowerCase();
-            subobjectURL = fileName;
-            triedLowerCase = true;
-            locationState = FILE_LOCATION_AS_IS;
-          }
-          break;
-      }
-      const loader = this.loader;
-      const fileLoader = new three_module.FileLoader(loader.manager);
-      fileLoader.setPath(loader.partsLibraryPath);
-      fileLoader.setRequestHeader(loader.requestHeader);
-      fileLoader.setWithCredentials(loader.withCredentials);
-      try {
-        const text = await fileLoader.loadAsync(subobjectURL);
-        return text;
-      } catch (e) {
-        continue;
-      }
-    }
-    throw new Error('LDrawLoader: Subobject "' + fileName + '" could not be loaded.');
-  }
-  parse(text, fileName = null) {
-    const loader = this.loader;
-    const faces = [];
-    const lineSegments = [];
-    const conditionalSegments = [];
-    const subobjects = [];
-    const materials = {};
-    const getLocalMaterial = (colorCode) => {
-      return materials[colorCode] || null;
-    };
-    let type = "Model";
-    let category = null;
-    let keywords = null;
-    let totalFaces = 0;
-    if (text.indexOf("\r\n") !== -1) {
-      text = text.replace(/\r\n/g, "\n");
-    }
-    const lines = text.split("\n");
-    const numLines = lines.length;
-    let parsingEmbeddedFiles = false;
-    let currentEmbeddedFileName = null;
-    let currentEmbeddedText = null;
-    let bfcCertified = false;
-    let bfcCCW = true;
-    let bfcInverted = false;
-    let bfcCull = true;
-    let startingConstructionStep = false;
-    for (let lineIndex = 0; lineIndex < numLines; lineIndex++) {
-      const line = lines[lineIndex];
-      if (line.length === 0)
-        continue;
-      if (parsingEmbeddedFiles) {
-        if (line.startsWith("0 FILE ")) {
-          this.setData(currentEmbeddedFileName, currentEmbeddedText);
-          currentEmbeddedFileName = line.substring(7);
-          currentEmbeddedText = "";
-        } else {
-          currentEmbeddedText += line + "\n";
-        }
-        continue;
-      }
-      const lp = new LineParser(line, lineIndex + 1);
-      lp.seekNonSpace();
-      if (lp.isAtTheEnd()) {
-        continue;
-      }
-      const lineType = lp.getToken();
-      let material;
-      let colorCode;
-      let segment;
-      let ccw;
-      let doubleSided;
-      let v0, v1, v2, v3, c0, c1;
-      switch (lineType) {
-        case "0":
-          const meta = lp.getToken();
-          if (meta) {
-            switch (meta) {
-              case "!LDRAW_ORG":
-                type = lp.getToken();
-                break;
-              case "!COLOUR":
-                material = loader.parseColorMetaDirective(lp);
-                if (material) {
-                  materials[material.userData.code] = material;
-                } else {
-                  console.warn("LDrawLoader: Error parsing material" + lp.getLineNumberString());
-                }
-                break;
-              case "!CATEGORY":
-                category = lp.getToken();
-                break;
-              case "!KEYWORDS":
-                const newKeywords = lp.getRemainingString().split(",");
-                if (newKeywords.length > 0) {
-                  if (!keywords) {
-                    keywords = [];
-                  }
-                  newKeywords.forEach(function(keyword) {
-                    keywords.push(keyword.trim());
-                  });
-                }
-                break;
-              case "FILE":
-                if (lineIndex > 0) {
-                  parsingEmbeddedFiles = true;
-                  currentEmbeddedFileName = lp.getRemainingString();
-                  currentEmbeddedText = "";
-                  bfcCertified = false;
-                  bfcCCW = true;
-                }
-                break;
-              case "BFC":
-                while (!lp.isAtTheEnd()) {
-                  const token = lp.getToken();
-                  switch (token) {
-                    case "CERTIFY":
-                    case "NOCERTIFY":
-                      bfcCertified = token === "CERTIFY";
-                      bfcCCW = true;
-                      break;
-                    case "CW":
-                    case "CCW":
-                      bfcCCW = token === "CCW";
-                      break;
-                    case "INVERTNEXT":
-                      bfcInverted = true;
-                      break;
-                    case "CLIP":
-                    case "NOCLIP":
-                      bfcCull = token === "CLIP";
-                      break;
-                    default:
-                      console.warn('THREE.LDrawLoader: BFC directive "' + token + '" is unknown.');
-                      break;
-                  }
-                }
-                break;
-              case "STEP":
-                startingConstructionStep = true;
-                break;
-              default:
-                break;
-            }
-          }
-          break;
-        case "1":
-          colorCode = lp.getToken();
-          material = getLocalMaterial(colorCode);
-          const posX = parseFloat(lp.getToken());
-          const posY = parseFloat(lp.getToken());
-          const posZ = parseFloat(lp.getToken());
-          const m0 = parseFloat(lp.getToken());
-          const m1 = parseFloat(lp.getToken());
-          const m2 = parseFloat(lp.getToken());
-          const m3 = parseFloat(lp.getToken());
-          const m4 = parseFloat(lp.getToken());
-          const m5 = parseFloat(lp.getToken());
-          const m6 = parseFloat(lp.getToken());
-          const m7 = parseFloat(lp.getToken());
-          const m8 = parseFloat(lp.getToken());
-          const matrix = new three_module.Matrix4().set(m0, m1, m2, posX, m3, m4, m5, posY, m6, m7, m8, posZ, 0, 0, 0, 1);
-          let fileName2 = lp.getRemainingString().trim().replace(/\\/g, "/");
-          if (loader.fileMap[fileName2]) {
-            fileName2 = loader.fileMap[fileName2];
-          } else {
-            if (fileName2.startsWith("s/")) {
-              fileName2 = "parts/" + fileName2;
-            } else if (fileName2.startsWith("48/")) {
-              fileName2 = "p/" + fileName2;
-            }
-          }
-          subobjects.push({
-            material,
-            colorCode,
-            matrix,
-            fileName: fileName2,
-            inverted: bfcInverted,
-            startingConstructionStep
-          });
-          bfcInverted = false;
-          break;
-        case "2":
-          colorCode = lp.getToken();
-          material = getLocalMaterial(colorCode);
-          v0 = lp.getVector();
-          v1 = lp.getVector();
-          segment = {
-            material,
-            colorCode,
-            vertices: [v0, v1]
-          };
-          lineSegments.push(segment);
-          break;
-        case "5":
-          colorCode = lp.getToken();
-          material = getLocalMaterial(colorCode);
-          v0 = lp.getVector();
-          v1 = lp.getVector();
-          c0 = lp.getVector();
-          c1 = lp.getVector();
-          segment = {
-            material,
-            colorCode,
-            vertices: [v0, v1],
-            controlPoints: [c0, c1]
-          };
-          conditionalSegments.push(segment);
-          break;
-        case "3":
-          colorCode = lp.getToken();
-          material = getLocalMaterial(colorCode);
-          ccw = bfcCCW;
-          doubleSided = !bfcCertified || !bfcCull;
-          if (ccw === true) {
-            v0 = lp.getVector();
-            v1 = lp.getVector();
-            v2 = lp.getVector();
-          } else {
-            v2 = lp.getVector();
-            v1 = lp.getVector();
-            v0 = lp.getVector();
-          }
-          faces.push({
-            material,
-            colorCode,
-            faceNormal: null,
-            vertices: [v0, v1, v2],
-            normals: [null, null, null]
-          });
-          totalFaces++;
-          if (doubleSided === true) {
-            faces.push({
-              material,
-              colorCode,
-              faceNormal: null,
-              vertices: [v2, v1, v0],
-              normals: [null, null, null]
-            });
-            totalFaces++;
-          }
-          break;
-        case "4":
-          colorCode = lp.getToken();
-          material = getLocalMaterial(colorCode);
-          ccw = bfcCCW;
-          doubleSided = !bfcCertified || !bfcCull;
-          if (ccw === true) {
-            v0 = lp.getVector();
-            v1 = lp.getVector();
-            v2 = lp.getVector();
-            v3 = lp.getVector();
-          } else {
-            v3 = lp.getVector();
-            v2 = lp.getVector();
-            v1 = lp.getVector();
-            v0 = lp.getVector();
-          }
-          faces.push({
-            material,
-            colorCode,
-            faceNormal: null,
-            vertices: [v0, v1, v2, v3],
-            normals: [null, null, null, null]
-          });
-          totalFaces += 2;
-          if (doubleSided === true) {
-            faces.push({
-              material,
-              colorCode,
-              faceNormal: null,
-              vertices: [v3, v2, v1, v0],
-              normals: [null, null, null, null]
-            });
-            totalFaces += 2;
-          }
-          break;
-        default:
-          throw new Error('LDrawLoader: Unknown line type "' + lineType + '"' + lp.getLineNumberString() + ".");
-      }
-    }
-    if (parsingEmbeddedFiles) {
-      this.setData(currentEmbeddedFileName, currentEmbeddedText);
-    }
-    return {
-      faces,
-      conditionalSegments,
-      lineSegments,
-      type,
-      category,
-      keywords,
-      subobjects,
-      totalFaces,
-      startingConstructionStep,
-      materials,
-      fileName,
-      group: null
-    };
-  }
-  // returns an (optionally cloned) instance of the data
-  getData(fileName, clone = true) {
-    const key = fileName.toLowerCase();
-    const result = this._cache[key];
-    if (result === null || result instanceof Promise) {
-      return null;
-    }
-    if (clone) {
-      return this.cloneResult(result);
-    } else {
-      return result;
-    }
-  }
-  // kicks off a fetch and parse of the requested data if it hasn't already been loaded. Returns when
-  // the data is ready to use and can be retrieved synchronously with "getData".
-  async ensureDataLoaded(fileName) {
-    const key = fileName.toLowerCase();
-    if (!(key in this._cache)) {
-      this._cache[key] = this.fetchData(fileName).then((text) => {
-        const info = this.parse(text, fileName);
-        this._cache[key] = info;
-        return info;
-      });
-    }
-    await this._cache[key];
-  }
-  // sets the data in the cache from parsed data
-  setData(fileName, text) {
-    const key = fileName.toLowerCase();
-    this._cache[key] = this.parse(text, fileName);
-  }
-}
-function getMaterialFromCode(colorCode, parentColorCode, materialHierarchy, forEdge) {
-  const isPassthrough = !forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE;
-  if (isPassthrough) {
-    colorCode = parentColorCode;
-  }
-  return materialHierarchy[colorCode] || null;
-}
-class LDrawPartsGeometryCache {
-  constructor(loader) {
-    this.loader = loader;
-    this.parseCache = new LDrawParsedCache(loader);
-    this._cache = {};
-  }
-  // Convert the given file information into a mesh by processing subobjects.
-  async processIntoMesh(info) {
-    const loader = this.loader;
-    const parseCache = this.parseCache;
-    const faceMaterials = /* @__PURE__ */ new Set();
-    const processInfoSubobjects = async (info2, subobject = null) => {
-      const subobjects = info2.subobjects;
-      const promises = [];
-      for (let i = 0, l = subobjects.length; i < l; i++) {
-        const subobject2 = subobjects[i];
-        const promise = parseCache.ensureDataLoaded(subobject2.fileName).then(() => {
-          const subobjectInfo = parseCache.getData(subobject2.fileName, false);
-          if (!isPrimitiveType(subobjectInfo.type)) {
-            return this.loadModel(subobject2.fileName).catch((error) => {
-              console.warn(error);
-              return null;
-            });
-          }
-          return processInfoSubobjects(parseCache.getData(subobject2.fileName), subobject2);
-        });
-        promises.push(promise);
-      }
-      const group2 = new three_module.Group();
-      group2.userData.category = info2.category;
-      group2.userData.keywords = info2.keywords;
-      info2.group = group2;
-      const subobjectInfos = await Promise.all(promises);
-      for (let i = 0, l = subobjectInfos.length; i < l; i++) {
-        const subobject2 = info2.subobjects[i];
-        const subobjectInfo = subobjectInfos[i];
-        if (subobjectInfo === null) {
-          continue;
-        }
-        if (subobjectInfo.isGroup) {
-          const subobjectGroup = subobjectInfo;
-          subobject2.matrix.decompose(subobjectGroup.position, subobjectGroup.quaternion, subobjectGroup.scale);
-          subobjectGroup.userData.startingConstructionStep = subobject2.startingConstructionStep;
-          subobjectGroup.name = subobject2.fileName;
-          loader.applyMaterialsToMesh(subobjectGroup, subobject2.colorCode, info2.materials);
-          group2.add(subobjectGroup);
-          continue;
-        }
-        if (subobjectInfo.group.children.length) {
-          group2.add(subobjectInfo.group);
-        }
-        const parentLineSegments = info2.lineSegments;
-        const parentConditionalSegments = info2.conditionalSegments;
-        const parentFaces = info2.faces;
-        const lineSegments = subobjectInfo.lineSegments;
-        const conditionalSegments = subobjectInfo.conditionalSegments;
-        const faces = subobjectInfo.faces;
-        const matrix = subobject2.matrix;
-        const inverted = subobject2.inverted;
-        const matrixScaleInverted = matrix.determinant() < 0;
-        const colorCode = subobject2.colorCode;
-        const lineColorCode = colorCode === MAIN_COLOUR_CODE ? MAIN_EDGE_COLOUR_CODE : colorCode;
-        for (let i2 = 0, l2 = lineSegments.length; i2 < l2; i2++) {
-          const ls = lineSegments[i2];
-          const vertices = ls.vertices;
-          vertices[0].applyMatrix4(matrix);
-          vertices[1].applyMatrix4(matrix);
-          ls.colorCode = ls.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : ls.colorCode;
-          ls.material = ls.material || getMaterialFromCode(ls.colorCode, ls.colorCode, info2.materials, true);
-          parentLineSegments.push(ls);
-        }
-        for (let i2 = 0, l2 = conditionalSegments.length; i2 < l2; i2++) {
-          const os = conditionalSegments[i2];
-          const vertices = os.vertices;
-          const controlPoints = os.controlPoints;
-          vertices[0].applyMatrix4(matrix);
-          vertices[1].applyMatrix4(matrix);
-          controlPoints[0].applyMatrix4(matrix);
-          controlPoints[1].applyMatrix4(matrix);
-          os.colorCode = os.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : os.colorCode;
-          os.material = os.material || getMaterialFromCode(os.colorCode, os.colorCode, info2.materials, true);
-          parentConditionalSegments.push(os);
-        }
-        for (let i2 = 0, l2 = faces.length; i2 < l2; i2++) {
-          const tri = faces[i2];
-          const vertices = tri.vertices;
-          for (let i3 = 0, l3 = vertices.length; i3 < l3; i3++) {
-            vertices[i3].applyMatrix4(matrix);
-          }
-          tri.colorCode = tri.colorCode === MAIN_COLOUR_CODE ? colorCode : tri.colorCode;
-          tri.material = tri.material || getMaterialFromCode(tri.colorCode, colorCode, info2.materials, false);
-          faceMaterials.add(tri.colorCode);
-          if (matrixScaleInverted !== inverted) {
-            vertices.reverse();
-          }
-          parentFaces.push(tri);
-        }
-        info2.totalFaces += subobjectInfo.totalFaces;
-      }
-      if (subobject) {
-        loader.applyMaterialsToMesh(group2, subobject.colorCode, info2.materials);
-      }
-      return info2;
-    };
-    for (let i = 0, l = info.faces; i < l; i++) {
-      faceMaterials.add(info.faces[i].colorCode);
-    }
-    await processInfoSubobjects(info);
-    if (loader.smoothNormals) {
-      const checkSubSegments = faceMaterials.size > 1;
-      generateFaceNormals(info.faces);
-      smoothNormals(info.faces, info.lineSegments, checkSubSegments);
-    }
-    const group = info.group;
-    if (info.faces.length > 0) {
-      group.add(createObject(info.faces, 3, false, info.totalFaces));
-    }
-    if (info.lineSegments.length > 0) {
-      group.add(createObject(info.lineSegments, 2));
-    }
-    if (info.conditionalSegments.length > 0) {
-      group.add(createObject(info.conditionalSegments, 2, true));
-    }
-    return group;
-  }
-  hasCachedModel(fileName) {
-    return fileName !== null && fileName.toLowerCase() in this._cache;
-  }
-  async getCachedModel(fileName) {
-    if (fileName !== null && this.hasCachedModel(fileName)) {
-      const key = fileName.toLowerCase();
-      const group = await this._cache[key];
-      return group.clone();
-    } else {
-      return null;
-    }
-  }
-  // Loads and parses the model with the given file name. Returns a cached copy if available.
-  async loadModel(fileName) {
-    const parseCache = this.parseCache;
-    const key = fileName.toLowerCase();
-    if (this.hasCachedModel(fileName)) {
-      return this.getCachedModel(fileName);
-    } else {
-      await parseCache.ensureDataLoaded(fileName);
-      const info = parseCache.getData(fileName);
-      const promise = this.processIntoMesh(info);
-      if (this.hasCachedModel(fileName)) {
-        return this.getCachedModel(fileName);
-      }
-      if (isPartType(info.type)) {
-        this._cache[key] = promise;
-      }
-      const group = await promise;
-      return group.clone();
-    }
-  }
-  // parses the given model text into a renderable object. Returns cached copy if available.
-  async parseModel(text) {
-    const parseCache = this.parseCache;
-    const info = parseCache.parse(text);
-    if (isPartType(info.type) && this.hasCachedModel(info.fileName)) {
-      return this.getCachedModel(info.fileName);
-    }
-    return this.processIntoMesh(info);
-  }
-}
-function sortByMaterial(a, b) {
-  if (a.colorCode === b.colorCode) {
-    return 0;
-  }
-  if (a.colorCode < b.colorCode) {
-    return -1;
-  }
-  return 1;
-}
-function createObject(elements, elementSize, isConditionalSegments = false, totalElements = null) {
-  elements.sort(sortByMaterial);
-  if (totalElements === null) {
-    totalElements = elements.length;
-  }
-  const positions = new Float32Array(elementSize * totalElements * 3);
-  const normals = elementSize === 3 ? new Float32Array(elementSize * totalElements * 3) : null;
-  const materials = [];
-  const quadArray = new Array(6);
-  const bufferGeometry = new three_module.BufferGeometry();
-  let prevMaterial = null;
-  let index0 = 0;
-  let numGroupVerts = 0;
-  let offset = 0;
-  for (let iElem = 0, nElem = elements.length; iElem < nElem; iElem++) {
-    const elem = elements[iElem];
-    let vertices = elem.vertices;
-    if (vertices.length === 4) {
-      quadArray[0] = vertices[0];
-      quadArray[1] = vertices[1];
-      quadArray[2] = vertices[2];
-      quadArray[3] = vertices[0];
-      quadArray[4] = vertices[2];
-      quadArray[5] = vertices[3];
-      vertices = quadArray;
-    }
-    for (let j = 0, l = vertices.length; j < l; j++) {
-      const v = vertices[j];
-      const index = offset + j * 3;
-      positions[index + 0] = v.x;
-      positions[index + 1] = v.y;
-      positions[index + 2] = v.z;
-    }
-    if (elementSize === 3) {
-      if (!elem.faceNormal) {
-        const v0 = vertices[0];
-        const v1 = vertices[1];
-        const v2 = vertices[2];
-        _tempVec0.subVectors(v1, v0);
-        _tempVec1.subVectors(v2, v1);
-        elem.faceNormal = new three_module.Vector3().crossVectors(_tempVec0, _tempVec1).normalize();
-      }
-      let elemNormals = elem.normals;
-      if (elemNormals.length === 4) {
-        quadArray[0] = elemNormals[0];
-        quadArray[1] = elemNormals[1];
-        quadArray[2] = elemNormals[2];
-        quadArray[3] = elemNormals[0];
-        quadArray[4] = elemNormals[2];
-        quadArray[5] = elemNormals[3];
-        elemNormals = quadArray;
-      }
-      for (let j = 0, l = elemNormals.length; j < l; j++) {
-        let n = elem.faceNormal;
-        if (elemNormals[j]) {
-          n = elemNormals[j].norm;
-        }
-        const index = offset + j * 3;
-        normals[index + 0] = n.x;
-        normals[index + 1] = n.y;
-        normals[index + 2] = n.z;
-      }
-    }
-    if (prevMaterial !== elem.colorCode) {
-      if (prevMaterial !== null) {
-        bufferGeometry.addGroup(index0, numGroupVerts, materials.length - 1);
-      }
-      const material = elem.material;
-      if (material !== null) {
-        if (elementSize === 3) {
-          materials.push(material);
-        } else if (elementSize === 2) {
-          if (material !== null) {
-            if (isConditionalSegments) {
-              materials.push(material.userData.edgeMaterial.userData.conditionalEdgeMaterial);
-            } else {
-              materials.push(material.userData.edgeMaterial);
-            }
-          } else {
-            materials.push(null);
-          }
-        }
-      } else {
-        materials.push(elem.colorCode);
-      }
-      prevMaterial = elem.colorCode;
-      index0 = offset / 3;
-      numGroupVerts = vertices.length;
-    } else {
-      numGroupVerts += vertices.length;
-    }
-    offset += 3 * vertices.length;
-  }
-  if (numGroupVerts > 0) {
-    bufferGeometry.addGroup(index0, Infinity, materials.length - 1);
-  }
-  bufferGeometry.setAttribute("position", new three_module.BufferAttribute(positions, 3));
-  if (normals !== null) {
-    bufferGeometry.setAttribute("normal", new three_module.BufferAttribute(normals, 3));
-  }
-  let object3d = null;
-  if (elementSize === 2) {
-    if (isConditionalSegments) {
-      object3d = new ConditionalLineSegments(bufferGeometry, materials.length === 1 ? materials[0] : materials);
-    } else {
-      object3d = new three_module.LineSegments(bufferGeometry, materials.length === 1 ? materials[0] : materials);
-    }
-  } else if (elementSize === 3) {
-    object3d = new three_module.Mesh(bufferGeometry, materials.length === 1 ? materials[0] : materials);
-  }
-  if (isConditionalSegments) {
-    object3d.isConditionalLine = true;
-    const controlArray0 = new Float32Array(elements.length * 3 * 2);
-    const controlArray1 = new Float32Array(elements.length * 3 * 2);
-    const directionArray = new Float32Array(elements.length * 3 * 2);
-    for (let i = 0, l = elements.length; i < l; i++) {
-      const os = elements[i];
-      const vertices = os.vertices;
-      const controlPoints = os.controlPoints;
-      const c0 = controlPoints[0];
-      const c1 = controlPoints[1];
-      const v0 = vertices[0];
-      const v1 = vertices[1];
-      const index = i * 3 * 2;
-      controlArray0[index + 0] = c0.x;
-      controlArray0[index + 1] = c0.y;
-      controlArray0[index + 2] = c0.z;
-      controlArray0[index + 3] = c0.x;
-      controlArray0[index + 4] = c0.y;
-      controlArray0[index + 5] = c0.z;
-      controlArray1[index + 0] = c1.x;
-      controlArray1[index + 1] = c1.y;
-      controlArray1[index + 2] = c1.z;
-      controlArray1[index + 3] = c1.x;
-      controlArray1[index + 4] = c1.y;
-      controlArray1[index + 5] = c1.z;
-      directionArray[index + 0] = v1.x - v0.x;
-      directionArray[index + 1] = v1.y - v0.y;
-      directionArray[index + 2] = v1.z - v0.z;
-      directionArray[index + 3] = v1.x - v0.x;
-      directionArray[index + 4] = v1.y - v0.y;
-      directionArray[index + 5] = v1.z - v0.z;
-    }
-    bufferGeometry.setAttribute("control0", new three_module.BufferAttribute(controlArray0, 3, false));
-    bufferGeometry.setAttribute("control1", new three_module.BufferAttribute(controlArray1, 3, false));
-    bufferGeometry.setAttribute("direction", new three_module.BufferAttribute(directionArray, 3, false));
-  }
-  return object3d;
-}
-class LDrawLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.materials = [];
-    this.materialLibrary = {};
-    this.partsCache = new LDrawPartsGeometryCache(this);
-    this.fileMap = {};
-    this.setMaterials([]);
-    this.smoothNormals = true;
-    this.partsLibraryPath = "";
-  }
-  setPartsLibraryPath(path) {
-    this.partsLibraryPath = path;
-    return this;
-  }
-  async preloadMaterials(url) {
-    const fileLoader = new three_module.FileLoader(this.manager);
-    fileLoader.setPath(this.path);
-    fileLoader.setRequestHeader(this.requestHeader);
-    fileLoader.setWithCredentials(this.withCredentials);
-    const text = await fileLoader.loadAsync(url);
-    const colorLineRegex = /^0 !COLOUR/;
-    const lines = text.split(/[\n\r]/g);
-    const materials = [];
-    for (let i = 0, l = lines.length; i < l; i++) {
-      const line = lines[i];
-      if (colorLineRegex.test(line)) {
-        const directive = line.replace(colorLineRegex, "");
-        const material = this.parseColorMetaDirective(new LineParser(directive));
-        materials.push(material);
-      }
-    }
-    this.setMaterials(materials);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const fileLoader = new three_module.FileLoader(this.manager);
-    fileLoader.setPath(this.path);
-    fileLoader.setRequestHeader(this.requestHeader);
-    fileLoader.setWithCredentials(this.withCredentials);
-    fileLoader.load(
-      url,
-      (text) => {
-        this.partsCache.parseModel(text, this.materialLibrary).then((group) => {
-          this.applyMaterialsToMesh(group, MAIN_COLOUR_CODE, this.materialLibrary, true);
-          this.computeConstructionSteps(group);
-          onLoad(group);
-        }).catch(onError);
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(text, onLoad) {
-    this.partsCache.parseModel(text, this.materialLibrary).then((group) => {
-      this.computeConstructionSteps(group);
-      onLoad(group);
-    });
-  }
-  setMaterials(materials) {
-    this.materialLibrary = {};
-    this.materials = [];
-    for (let i = 0, l = materials.length; i < l; i++) {
-      this.addMaterial(materials[i]);
-    }
-    this.addMaterial(this.parseColorMetaDirective(new LineParser("Main_Colour CODE 16 VALUE #FF8080 EDGE #333333")));
-    this.addMaterial(this.parseColorMetaDirective(new LineParser("Edge_Colour CODE 24 VALUE #A0A0A0 EDGE #333333")));
-    return this;
-  }
-  setFileMap(fileMap) {
-    this.fileMap = fileMap;
-    return this;
-  }
-  addMaterial(material) {
-    const matLib = this.materialLibrary;
-    if (!matLib[material.userData.code]) {
-      this.materials.push(material);
-      matLib[material.userData.code] = material;
-    }
-    return this;
-  }
-  getMaterial(colorCode) {
-    if (colorCode.startsWith("0x2")) {
-      const color = colorCode.substring(3);
-      return this.parseColorMetaDirective(
-        new LineParser("Direct_Color_" + color + " CODE -1 VALUE #" + color + " EDGE #" + color)
-      );
-    }
-    return this.materialLibrary[colorCode] || null;
-  }
-  // Applies the appropriate materials to a prebuilt hierarchy of geometry. Assumes that color codes are present
-  // in the material array if they need to be filled in.
-  applyMaterialsToMesh(group, parentColorCode, materialHierarchy, finalMaterialPass = false) {
-    const loader = this;
-    const parentIsPassthrough = parentColorCode === MAIN_COLOUR_CODE;
-    group.traverse((c) => {
-      if (c.isMesh || c.isLineSegments) {
-        if (Array.isArray(c.material)) {
-          for (let i = 0, l = c.material.length; i < l; i++) {
-            if (!c.material[i].isMaterial) {
-              c.material[i] = getMaterial(c, c.material[i]);
-            }
-          }
-        } else if (!c.material.isMaterial) {
-          c.material = getMaterial(c, c.material);
-        }
-      }
-    });
-    function getMaterial(c, colorCode) {
-      if (parentIsPassthrough && !(colorCode in materialHierarchy) && !finalMaterialPass) {
-        return colorCode;
-      }
-      const forEdge = c.isLineSegments || c.isConditionalLine;
-      const isPassthrough = !forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE;
-      if (isPassthrough) {
-        colorCode = parentColorCode;
-      }
-      let material = null;
-      if (colorCode in materialHierarchy) {
-        material = materialHierarchy[colorCode];
-      } else if (finalMaterialPass) {
-        material = loader.getMaterial(colorCode);
-        if (material === null) {
-          throw new Error(`LDrawLoader: Material properties for code ${colorCode} not available.`);
-        }
-      } else {
-        return colorCode;
-      }
-      if (c.isLineSegments) {
-        material = material.userData.edgeMaterial;
-        if (c.isConditionalLine) {
-          material = material.userData.conditionalEdgeMaterial;
-        }
-      }
-      return material;
-    }
-  }
-  getMainMaterial() {
-    return this.getMaterial(MAIN_COLOUR_CODE);
-  }
-  getMainEdgeMaterial() {
-    return this.getMaterial(MAIN_EDGE_COLOUR_CODE);
-  }
-  parseColorMetaDirective(lineParser) {
-    let code = null;
-    let color = 16711935;
-    let edgeColor = 16711935;
-    let alpha = 1;
-    let isTransparent = false;
-    let luminance = 0;
-    let finishType = FINISH_TYPE_DEFAULT;
-    let edgeMaterial = null;
-    const name = lineParser.getToken();
-    if (!name) {
-      throw new Error(
-        'LDrawLoader: Material name was expected after "!COLOUR tag' + lineParser.getLineNumberString() + "."
-      );
-    }
-    let token = null;
-    while (true) {
-      token = lineParser.getToken();
-      if (!token) {
-        break;
-      }
-      switch (token.toUpperCase()) {
-        case "CODE":
-          code = lineParser.getToken();
-          break;
-        case "VALUE":
-          color = lineParser.getToken();
-          if (color.startsWith("0x")) {
-            color = "#" + color.substring(2);
-          } else if (!color.startsWith("#")) {
-            throw new Error(
-              "LDrawLoader: Invalid color while parsing material" + lineParser.getLineNumberString() + "."
-            );
-          }
-          break;
-        case "EDGE":
-          edgeColor = lineParser.getToken();
-          if (edgeColor.startsWith("0x")) {
-            edgeColor = "#" + edgeColor.substring(2);
-          } else if (!edgeColor.startsWith("#")) {
-            edgeMaterial = this.getMaterial(edgeColor);
-            if (!edgeMaterial) {
-              throw new Error(
-                "LDrawLoader: Invalid edge color while parsing material" + lineParser.getLineNumberString() + "."
-              );
-            }
-            edgeMaterial = edgeMaterial.userData.edgeMaterial;
-          }
-          break;
-        case "ALPHA":
-          alpha = parseInt(lineParser.getToken());
-          if (isNaN(alpha)) {
-            throw new Error(
-              "LDrawLoader: Invalid alpha value in material definition" + lineParser.getLineNumberString() + "."
-            );
-          }
-          alpha = Math.max(0, Math.min(1, alpha / 255));
-          if (alpha < 1) {
-            isTransparent = true;
-          }
-          break;
-        case "LUMINANCE":
-          luminance = parseInt(lineParser.getToken());
-          if (isNaN(luminance)) {
-            throw new Error(
-              "LDrawLoader: Invalid luminance value in material definition" + LineParser.getLineNumberString() + "."
-            );
-          }
-          luminance = Math.max(0, Math.min(1, luminance / 255));
-          break;
-        case "CHROME":
-          finishType = FINISH_TYPE_CHROME;
-          break;
-        case "PEARLESCENT":
-          finishType = FINISH_TYPE_PEARLESCENT;
-          break;
-        case "RUBBER":
-          finishType = FINISH_TYPE_RUBBER;
-          break;
-        case "MATTE_METALLIC":
-          finishType = FINISH_TYPE_MATTE_METALLIC;
-          break;
-        case "METAL":
-          finishType = FINISH_TYPE_METAL;
-          break;
-        case "MATERIAL":
-          lineParser.setToEnd();
-          break;
-        default:
-          throw new Error(
-            'LDrawLoader: Unknown token "' + token + '" while parsing material' + lineParser.getLineNumberString() + "."
-          );
-      }
-    }
-    let material = null;
-    switch (finishType) {
-      case FINISH_TYPE_DEFAULT:
-        material = new three_module.MeshStandardMaterial({ color, roughness: 0.3, metalness: 0 });
-        break;
-      case FINISH_TYPE_PEARLESCENT:
-        material = new three_module.MeshStandardMaterial({ color, roughness: 0.3, metalness: 0.25 });
-        break;
-      case FINISH_TYPE_CHROME:
-        material = new three_module.MeshStandardMaterial({ color, roughness: 0, metalness: 1 });
-        break;
-      case FINISH_TYPE_RUBBER:
-        material = new three_module.MeshStandardMaterial({ color, roughness: 0.9, metalness: 0 });
-        break;
-      case FINISH_TYPE_MATTE_METALLIC:
-        material = new three_module.MeshStandardMaterial({ color, roughness: 0.8, metalness: 0.4 });
-        break;
-      case FINISH_TYPE_METAL:
-        material = new three_module.MeshStandardMaterial({ color, roughness: 0.2, metalness: 0.85 });
-        break;
-      default:
-        break;
-    }
-    material.transparent = isTransparent;
-    material.premultipliedAlpha = true;
-    material.opacity = alpha;
-    material.depthWrite = !isTransparent;
-    material.polygonOffset = true;
-    material.polygonOffsetFactor = 1;
-    if (luminance !== 0) {
-      material.emissive.set(material.color).multiplyScalar(luminance);
-    }
-    if (!edgeMaterial) {
-      edgeMaterial = new three_module.LineBasicMaterial({
-        color: edgeColor,
-        transparent: isTransparent,
-        opacity: alpha,
-        depthWrite: !isTransparent
-      });
-      edgeMaterial.userData.code = code;
-      edgeMaterial.name = name + " - Edge";
-      edgeMaterial.userData.conditionalEdgeMaterial = new LDrawConditionalLineMaterial({
-        fog: true,
-        transparent: isTransparent,
-        depthWrite: !isTransparent,
-        color: edgeColor,
-        opacity: alpha
-      });
-    }
-    material.userData.code = code;
-    material.name = name;
-    material.userData.edgeMaterial = edgeMaterial;
-    this.addMaterial(material);
-    return material;
-  }
-  computeConstructionSteps(model) {
-    let stepNumber = 0;
-    model.traverse((c) => {
-      if (c.isGroup) {
-        if (c.userData.startingConstructionStep) {
-          stepNumber++;
-        }
-        c.userData.constructionStep = stepNumber;
-      }
-    });
-    model.userData.numConstructionSteps = stepNumber + 1;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/SVGLoader.js
-
-class SVGLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.defaultDPI = 90;
-    this.defaultUnit = "px";
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(text) {
-    const scope = this;
-    function parseNode(node, style) {
-      if (node.nodeType !== 1)
-        return;
-      const transform = getNodeTransform(node);
-      let traverseChildNodes = true;
-      let path = null;
-      switch (node.nodeName) {
-        case "svg":
-          break;
-        case "style":
-          parseCSSStylesheet(node);
-          break;
-        case "g":
-          style = parseStyle(node, style);
-          break;
-        case "path":
-          style = parseStyle(node, style);
-          if (node.hasAttribute("d"))
-            path = parsePathNode(node);
-          break;
-        case "rect":
-          style = parseStyle(node, style);
-          path = parseRectNode(node);
-          break;
-        case "polygon":
-          style = parseStyle(node, style);
-          path = parsePolygonNode(node);
-          break;
-        case "polyline":
-          style = parseStyle(node, style);
-          path = parsePolylineNode(node);
-          break;
-        case "circle":
-          style = parseStyle(node, style);
-          path = parseCircleNode(node);
-          break;
-        case "ellipse":
-          style = parseStyle(node, style);
-          path = parseEllipseNode(node);
-          break;
-        case "line":
-          style = parseStyle(node, style);
-          path = parseLineNode(node);
-          break;
-        case "defs":
-          traverseChildNodes = false;
-          break;
-        case "mask":
-          traverseChildNodes = false;
-          break;
-        case "use":
-          style = parseStyle(node, style);
-          const usedNodeId = node.href.baseVal.substring(1);
-          const usedNode = node.viewportElement.getElementById(usedNodeId);
-          if (usedNode) {
-            parseNode(usedNode, style);
-          } else {
-            console.warn("SVGLoader: 'use node' references non-existent node id: " + usedNodeId);
-          }
-          break;
-        default:
-      }
-      if (path) {
-        if (style.fill !== void 0 && style.fill !== "none") {
-          path.color.setStyle(style.fill);
-        }
-        transformPath(path, currentTransform);
-        paths.push(path);
-        path.userData = { node, style };
-      }
-      if (traverseChildNodes) {
-        const nodes = node.childNodes;
-        for (let i = 0; i < nodes.length; i++) {
-          parseNode(nodes[i], style);
-        }
-      }
-      if (transform) {
-        transformStack.pop();
-        if (transformStack.length > 0) {
-          currentTransform.copy(transformStack[transformStack.length - 1]);
-        } else {
-          currentTransform.identity();
-        }
-      }
-    }
-    function parsePathNode(node) {
-      const path = new three_module.ShapePath();
-      const point = new three_module.Vector2();
-      const control = new three_module.Vector2();
-      const firstPoint = new three_module.Vector2();
-      let isFirstPoint = true;
-      let doSetFirstPoint = false;
-      const d = node.getAttribute("d");
-      const commands = d.match(/[a-df-z][^a-df-z]*/gi);
-      for (let i = 0, l = commands.length; i < l; i++) {
-        const command = commands[i];
-        const type = command.charAt(0);
-        const data2 = command.substr(1).trim();
-        if (isFirstPoint === true) {
-          doSetFirstPoint = true;
-          isFirstPoint = false;
-        }
-        let numbers;
-        switch (type) {
-          case "M":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j += 2) {
-              point.x = numbers[j + 0];
-              point.y = numbers[j + 1];
-              control.x = point.x;
-              control.y = point.y;
-              if (j === 0) {
-                path.moveTo(point.x, point.y);
-              } else {
-                path.lineTo(point.x, point.y);
-              }
-              if (j === 0)
-                firstPoint.copy(point);
-            }
-            break;
-          case "H":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j++) {
-              point.x = numbers[j];
-              control.x = point.x;
-              control.y = point.y;
-              path.lineTo(point.x, point.y);
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "V":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j++) {
-              point.y = numbers[j];
-              control.x = point.x;
-              control.y = point.y;
-              path.lineTo(point.x, point.y);
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "L":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j += 2) {
-              point.x = numbers[j + 0];
-              point.y = numbers[j + 1];
-              control.x = point.x;
-              control.y = point.y;
-              path.lineTo(point.x, point.y);
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "C":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j += 6) {
-              path.bezierCurveTo(
-                numbers[j + 0],
-                numbers[j + 1],
-                numbers[j + 2],
-                numbers[j + 3],
-                numbers[j + 4],
-                numbers[j + 5]
-              );
-              control.x = numbers[j + 2];
-              control.y = numbers[j + 3];
-              point.x = numbers[j + 4];
-              point.y = numbers[j + 5];
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "S":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j += 4) {
-              path.bezierCurveTo(
-                getReflection(point.x, control.x),
-                getReflection(point.y, control.y),
-                numbers[j + 0],
-                numbers[j + 1],
-                numbers[j + 2],
-                numbers[j + 3]
-              );
-              control.x = numbers[j + 0];
-              control.y = numbers[j + 1];
-              point.x = numbers[j + 2];
-              point.y = numbers[j + 3];
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "Q":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j += 4) {
-              path.quadraticCurveTo(numbers[j + 0], numbers[j + 1], numbers[j + 2], numbers[j + 3]);
-              control.x = numbers[j + 0];
-              control.y = numbers[j + 1];
-              point.x = numbers[j + 2];
-              point.y = numbers[j + 3];
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "T":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j += 2) {
-              const rx = getReflection(point.x, control.x);
-              const ry = getReflection(point.y, control.y);
-              path.quadraticCurveTo(rx, ry, numbers[j + 0], numbers[j + 1]);
-              control.x = rx;
-              control.y = ry;
-              point.x = numbers[j + 0];
-              point.y = numbers[j + 1];
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "A":
-            numbers = parseFloats(data2, [3, 4], 7);
-            for (let j = 0, jl = numbers.length; j < jl; j += 7) {
-              if (numbers[j + 5] == point.x && numbers[j + 6] == point.y)
-                continue;
-              const start = point.clone();
-              point.x = numbers[j + 5];
-              point.y = numbers[j + 6];
-              control.x = point.x;
-              control.y = point.y;
-              parseArcCommand(
-                path,
-                numbers[j],
-                numbers[j + 1],
-                numbers[j + 2],
-                numbers[j + 3],
-                numbers[j + 4],
-                start,
-                point
-              );
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "m":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j += 2) {
-              point.x += numbers[j + 0];
-              point.y += numbers[j + 1];
-              control.x = point.x;
-              control.y = point.y;
-              if (j === 0) {
-                path.moveTo(point.x, point.y);
-              } else {
-                path.lineTo(point.x, point.y);
-              }
-              if (j === 0)
-                firstPoint.copy(point);
-            }
-            break;
-          case "h":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j++) {
-              point.x += numbers[j];
-              control.x = point.x;
-              control.y = point.y;
-              path.lineTo(point.x, point.y);
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "v":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j++) {
-              point.y += numbers[j];
-              control.x = point.x;
-              control.y = point.y;
-              path.lineTo(point.x, point.y);
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "l":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j += 2) {
-              point.x += numbers[j + 0];
-              point.y += numbers[j + 1];
-              control.x = point.x;
-              control.y = point.y;
-              path.lineTo(point.x, point.y);
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "c":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j += 6) {
-              path.bezierCurveTo(
-                point.x + numbers[j + 0],
-                point.y + numbers[j + 1],
-                point.x + numbers[j + 2],
-                point.y + numbers[j + 3],
-                point.x + numbers[j + 4],
-                point.y + numbers[j + 5]
-              );
-              control.x = point.x + numbers[j + 2];
-              control.y = point.y + numbers[j + 3];
-              point.x += numbers[j + 4];
-              point.y += numbers[j + 5];
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "s":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j += 4) {
-              path.bezierCurveTo(
-                getReflection(point.x, control.x),
-                getReflection(point.y, control.y),
-                point.x + numbers[j + 0],
-                point.y + numbers[j + 1],
-                point.x + numbers[j + 2],
-                point.y + numbers[j + 3]
-              );
-              control.x = point.x + numbers[j + 0];
-              control.y = point.y + numbers[j + 1];
-              point.x += numbers[j + 2];
-              point.y += numbers[j + 3];
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "q":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j += 4) {
-              path.quadraticCurveTo(
-                point.x + numbers[j + 0],
-                point.y + numbers[j + 1],
-                point.x + numbers[j + 2],
-                point.y + numbers[j + 3]
-              );
-              control.x = point.x + numbers[j + 0];
-              control.y = point.y + numbers[j + 1];
-              point.x += numbers[j + 2];
-              point.y += numbers[j + 3];
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "t":
-            numbers = parseFloats(data2);
-            for (let j = 0, jl = numbers.length; j < jl; j += 2) {
-              const rx = getReflection(point.x, control.x);
-              const ry = getReflection(point.y, control.y);
-              path.quadraticCurveTo(rx, ry, point.x + numbers[j + 0], point.y + numbers[j + 1]);
-              control.x = rx;
-              control.y = ry;
-              point.x = point.x + numbers[j + 0];
-              point.y = point.y + numbers[j + 1];
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "a":
-            numbers = parseFloats(data2, [3, 4], 7);
-            for (let j = 0, jl = numbers.length; j < jl; j += 7) {
-              if (numbers[j + 5] == 0 && numbers[j + 6] == 0)
-                continue;
-              const start = point.clone();
-              point.x += numbers[j + 5];
-              point.y += numbers[j + 6];
-              control.x = point.x;
-              control.y = point.y;
-              parseArcCommand(
-                path,
-                numbers[j],
-                numbers[j + 1],
-                numbers[j + 2],
-                numbers[j + 3],
-                numbers[j + 4],
-                start,
-                point
-              );
-              if (j === 0 && doSetFirstPoint === true)
-                firstPoint.copy(point);
-            }
-            break;
-          case "Z":
-          case "z":
-            path.currentPath.autoClose = true;
-            if (path.currentPath.curves.length > 0) {
-              point.copy(firstPoint);
-              path.currentPath.currentPoint.copy(point);
-              isFirstPoint = true;
-            }
-            break;
-          default:
-            console.warn(command);
-        }
-        doSetFirstPoint = false;
-      }
-      return path;
-    }
-    function parseCSSStylesheet(node) {
-      if (!node.sheet || !node.sheet.cssRules || !node.sheet.cssRules.length)
-        return;
-      for (let i = 0; i < node.sheet.cssRules.length; i++) {
-        const stylesheet = node.sheet.cssRules[i];
-        if (stylesheet.type !== 1)
-          continue;
-        const selectorList = stylesheet.selectorText.split(/,/gm).filter(Boolean).map((i2) => i2.trim());
-        for (let j = 0; j < selectorList.length; j++) {
-          stylesheets[selectorList[j]] = Object.assign(stylesheets[selectorList[j]] || {}, stylesheet.style);
-        }
-      }
-    }
-    function parseArcCommand(path, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, start, end) {
-      if (rx == 0 || ry == 0) {
-        path.lineTo(end.x, end.y);
-        return;
-      }
-      x_axis_rotation = x_axis_rotation * Math.PI / 180;
-      rx = Math.abs(rx);
-      ry = Math.abs(ry);
-      const dx2 = (start.x - end.x) / 2;
-      const dy2 = (start.y - end.y) / 2;
-      const x1p = Math.cos(x_axis_rotation) * dx2 + Math.sin(x_axis_rotation) * dy2;
-      const y1p = -Math.sin(x_axis_rotation) * dx2 + Math.cos(x_axis_rotation) * dy2;
-      let rxs = rx * rx;
-      let rys = ry * ry;
-      const x1ps = x1p * x1p;
-      const y1ps = y1p * y1p;
-      const cr = x1ps / rxs + y1ps / rys;
-      if (cr > 1) {
-        const s = Math.sqrt(cr);
-        rx = s * rx;
-        ry = s * ry;
-        rxs = rx * rx;
-        rys = ry * ry;
-      }
-      const dq = rxs * y1ps + rys * x1ps;
-      const pq = (rxs * rys - dq) / dq;
-      let q = Math.sqrt(Math.max(0, pq));
-      if (large_arc_flag === sweep_flag)
-        q = -q;
-      const cxp = q * rx * y1p / ry;
-      const cyp = -q * ry * x1p / rx;
-      const cx = Math.cos(x_axis_rotation) * cxp - Math.sin(x_axis_rotation) * cyp + (start.x + end.x) / 2;
-      const cy = Math.sin(x_axis_rotation) * cxp + Math.cos(x_axis_rotation) * cyp + (start.y + end.y) / 2;
-      const theta = svgAngle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry);
-      const delta = svgAngle((x1p - cxp) / rx, (y1p - cyp) / ry, (-x1p - cxp) / rx, (-y1p - cyp) / ry) % (Math.PI * 2);
-      path.currentPath.absellipse(cx, cy, rx, ry, theta, theta + delta, sweep_flag === 0, x_axis_rotation);
-    }
-    function svgAngle(ux, uy, vx, vy) {
-      const dot = ux * vx + uy * vy;
-      const len = Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy);
-      let ang = Math.acos(Math.max(-1, Math.min(1, dot / len)));
-      if (ux * vy - uy * vx < 0)
-        ang = -ang;
-      return ang;
-    }
-    function parseRectNode(node) {
-      const x = parseFloatWithUnits(node.getAttribute("x") || 0);
-      const y = parseFloatWithUnits(node.getAttribute("y") || 0);
-      const rx = parseFloatWithUnits(node.getAttribute("rx") || node.getAttribute("ry") || 0);
-      const ry = parseFloatWithUnits(node.getAttribute("ry") || node.getAttribute("rx") || 0);
-      const w = parseFloatWithUnits(node.getAttribute("width"));
-      const h = parseFloatWithUnits(node.getAttribute("height"));
-      const bci = 1 - 0.551915024494;
-      const path = new three_module.ShapePath();
-      path.moveTo(x + rx, y);
-      path.lineTo(x + w - rx, y);
-      if (rx !== 0 || ry !== 0) {
-        path.bezierCurveTo(x + w - rx * bci, y, x + w, y + ry * bci, x + w, y + ry);
-      }
-      path.lineTo(x + w, y + h - ry);
-      if (rx !== 0 || ry !== 0) {
-        path.bezierCurveTo(x + w, y + h - ry * bci, x + w - rx * bci, y + h, x + w - rx, y + h);
-      }
-      path.lineTo(x + rx, y + h);
-      if (rx !== 0 || ry !== 0) {
-        path.bezierCurveTo(x + rx * bci, y + h, x, y + h - ry * bci, x, y + h - ry);
-      }
-      path.lineTo(x, y + ry);
-      if (rx !== 0 || ry !== 0) {
-        path.bezierCurveTo(x, y + ry * bci, x + rx * bci, y, x + rx, y);
-      }
-      return path;
-    }
-    function parsePolygonNode(node) {
-      function iterator(match, a, b) {
-        const x = parseFloatWithUnits(a);
-        const y = parseFloatWithUnits(b);
-        if (index === 0) {
-          path.moveTo(x, y);
-        } else {
-          path.lineTo(x, y);
-        }
-        index++;
-      }
-      const regex = /(-?[\d\.?]+)[,|\s](-?[\d\.?]+)/g;
-      const path = new three_module.ShapePath();
-      let index = 0;
-      node.getAttribute("points").replace(regex, iterator);
-      path.currentPath.autoClose = true;
-      return path;
-    }
-    function parsePolylineNode(node) {
-      function iterator(match, a, b) {
-        const x = parseFloatWithUnits(a);
-        const y = parseFloatWithUnits(b);
-        if (index === 0) {
-          path.moveTo(x, y);
-        } else {
-          path.lineTo(x, y);
-        }
-        index++;
-      }
-      const regex = /(-?[\d\.?]+)[,|\s](-?[\d\.?]+)/g;
-      const path = new three_module.ShapePath();
-      let index = 0;
-      node.getAttribute("points").replace(regex, iterator);
-      path.currentPath.autoClose = false;
-      return path;
-    }
-    function parseCircleNode(node) {
-      const x = parseFloatWithUnits(node.getAttribute("cx") || 0);
-      const y = parseFloatWithUnits(node.getAttribute("cy") || 0);
-      const r = parseFloatWithUnits(node.getAttribute("r") || 0);
-      const subpath = new three_module.Path();
-      subpath.absarc(x, y, r, 0, Math.PI * 2);
-      const path = new three_module.ShapePath();
-      path.subPaths.push(subpath);
-      return path;
-    }
-    function parseEllipseNode(node) {
-      const x = parseFloatWithUnits(node.getAttribute("cx") || 0);
-      const y = parseFloatWithUnits(node.getAttribute("cy") || 0);
-      const rx = parseFloatWithUnits(node.getAttribute("rx") || 0);
-      const ry = parseFloatWithUnits(node.getAttribute("ry") || 0);
-      const subpath = new three_module.Path();
-      subpath.absellipse(x, y, rx, ry, 0, Math.PI * 2);
-      const path = new three_module.ShapePath();
-      path.subPaths.push(subpath);
-      return path;
-    }
-    function parseLineNode(node) {
-      const x1 = parseFloatWithUnits(node.getAttribute("x1") || 0);
-      const y1 = parseFloatWithUnits(node.getAttribute("y1") || 0);
-      const x2 = parseFloatWithUnits(node.getAttribute("x2") || 0);
-      const y2 = parseFloatWithUnits(node.getAttribute("y2") || 0);
-      const path = new three_module.ShapePath();
-      path.moveTo(x1, y1);
-      path.lineTo(x2, y2);
-      path.currentPath.autoClose = false;
-      return path;
-    }
-    function parseStyle(node, style) {
-      style = Object.assign({}, style);
-      let stylesheetStyles = {};
-      if (node.hasAttribute("class")) {
-        const classSelectors = node.getAttribute("class").split(/\s/).filter(Boolean).map((i) => i.trim());
-        for (let i = 0; i < classSelectors.length; i++) {
-          stylesheetStyles = Object.assign(stylesheetStyles, stylesheets["." + classSelectors[i]]);
-        }
-      }
-      if (node.hasAttribute("id")) {
-        stylesheetStyles = Object.assign(stylesheetStyles, stylesheets["#" + node.getAttribute("id")]);
-      }
-      function addStyle(svgName, jsName, adjustFunction) {
-        if (adjustFunction === void 0) {
-          adjustFunction = function copy(v) {
-            if (v.startsWith("url"))
-              console.warn("SVGLoader: url access in attributes is not implemented.");
-            return v;
-          };
-        }
-        if (node.hasAttribute(svgName))
-          style[jsName] = adjustFunction(node.getAttribute(svgName));
-        if (stylesheetStyles[svgName])
-          style[jsName] = adjustFunction(stylesheetStyles[svgName]);
-        if (node.style && node.style[svgName] !== "")
-          style[jsName] = adjustFunction(node.style[svgName]);
-      }
-      function clamp(v) {
-        return Math.max(0, Math.min(1, parseFloatWithUnits(v)));
-      }
-      function positive(v) {
-        return Math.max(0, parseFloatWithUnits(v));
-      }
-      addStyle("fill", "fill");
-      addStyle("fill-opacity", "fillOpacity", clamp);
-      addStyle("fill-rule", "fillRule");
-      addStyle("opacity", "opacity", clamp);
-      addStyle("stroke", "stroke");
-      addStyle("stroke-opacity", "strokeOpacity", clamp);
-      addStyle("stroke-width", "strokeWidth", positive);
-      addStyle("stroke-linejoin", "strokeLineJoin");
-      addStyle("stroke-linecap", "strokeLineCap");
-      addStyle("stroke-miterlimit", "strokeMiterLimit", positive);
-      addStyle("visibility", "visibility");
-      return style;
-    }
-    function getReflection(a, b) {
-      return a - (b - a);
-    }
-    function parseFloats(input, flags, stride) {
-      if (typeof input !== "string") {
-        throw new TypeError("Invalid input: " + typeof input);
-      }
-      const RE = {
-        SEPARATOR: /[ \t\r\n\,.\-+]/,
-        WHITESPACE: /[ \t\r\n]/,
-        DIGIT: /[\d]/,
-        SIGN: /[-+]/,
-        POINT: /\./,
-        COMMA: /,/,
-        EXP: /e/i,
-        FLAGS: /[01]/
-      };
-      const SEP = 0;
-      const INT = 1;
-      const FLOAT = 2;
-      const EXP = 3;
-      let state = SEP;
-      let seenComma = true;
-      let number = "", exponent = "";
-      const result = [];
-      function throwSyntaxError(current2, i, partial) {
-        const error = new SyntaxError('Unexpected character "' + current2 + '" at index ' + i + ".");
-        error.partial = partial;
-        throw error;
-      }
-      function newNumber() {
-        if (number !== "") {
-          if (exponent === "")
-            result.push(Number(number));
-          else
-            result.push(Number(number) * Math.pow(10, Number(exponent)));
-        }
-        number = "";
-        exponent = "";
-      }
-      let current;
-      const length = input.length;
-      for (let i = 0; i < length; i++) {
-        current = input[i];
-        if (Array.isArray(flags) && flags.includes(result.length % stride) && RE.FLAGS.test(current)) {
-          state = INT;
-          number = current;
-          newNumber();
-          continue;
-        }
-        if (state === SEP) {
-          if (RE.WHITESPACE.test(current)) {
-            continue;
-          }
-          if (RE.DIGIT.test(current) || RE.SIGN.test(current)) {
-            state = INT;
-            number = current;
-            continue;
-          }
-          if (RE.POINT.test(current)) {
-            state = FLOAT;
-            number = current;
-            continue;
-          }
-          if (RE.COMMA.test(current)) {
-            if (seenComma) {
-              throwSyntaxError(current, i, result);
-            }
-            seenComma = true;
-          }
-        }
-        if (state === INT) {
-          if (RE.DIGIT.test(current)) {
-            number += current;
-            continue;
-          }
-          if (RE.POINT.test(current)) {
-            number += current;
-            state = FLOAT;
-            continue;
-          }
-          if (RE.EXP.test(current)) {
-            state = EXP;
-            continue;
-          }
-          if (RE.SIGN.test(current) && number.length === 1 && RE.SIGN.test(number[0])) {
-            throwSyntaxError(current, i, result);
-          }
-        }
-        if (state === FLOAT) {
-          if (RE.DIGIT.test(current)) {
-            number += current;
-            continue;
-          }
-          if (RE.EXP.test(current)) {
-            state = EXP;
-            continue;
-          }
-          if (RE.POINT.test(current) && number[number.length - 1] === ".") {
-            throwSyntaxError(current, i, result);
-          }
-        }
-        if (state === EXP) {
-          if (RE.DIGIT.test(current)) {
-            exponent += current;
-            continue;
-          }
-          if (RE.SIGN.test(current)) {
-            if (exponent === "") {
-              exponent += current;
-              continue;
-            }
-            if (exponent.length === 1 && RE.SIGN.test(exponent)) {
-              throwSyntaxError(current, i, result);
-            }
-          }
-        }
-        if (RE.WHITESPACE.test(current)) {
-          newNumber();
-          state = SEP;
-          seenComma = false;
-        } else if (RE.COMMA.test(current)) {
-          newNumber();
-          state = SEP;
-          seenComma = true;
-        } else if (RE.SIGN.test(current)) {
-          newNumber();
-          state = INT;
-          number = current;
-        } else if (RE.POINT.test(current)) {
-          newNumber();
-          state = FLOAT;
-          number = current;
-        } else {
-          throwSyntaxError(current, i, result);
-        }
-      }
-      newNumber();
-      return result;
-    }
-    const units = ["mm", "cm", "in", "pt", "pc", "px"];
-    const unitConversion = {
-      mm: {
-        mm: 1,
-        cm: 0.1,
-        in: 1 / 25.4,
-        pt: 72 / 25.4,
-        pc: 6 / 25.4,
-        px: -1
-      },
-      cm: {
-        mm: 10,
-        cm: 1,
-        in: 1 / 2.54,
-        pt: 72 / 2.54,
-        pc: 6 / 2.54,
-        px: -1
-      },
-      in: {
-        mm: 25.4,
-        cm: 2.54,
-        in: 1,
-        pt: 72,
-        pc: 6,
-        px: -1
-      },
-      pt: {
-        mm: 25.4 / 72,
-        cm: 2.54 / 72,
-        in: 1 / 72,
-        pt: 1,
-        pc: 6 / 72,
-        px: -1
-      },
-      pc: {
-        mm: 25.4 / 6,
-        cm: 2.54 / 6,
-        in: 1 / 6,
-        pt: 72 / 6,
-        pc: 1,
-        px: -1
-      },
-      px: {
-        px: 1
-      }
-    };
-    function parseFloatWithUnits(string) {
-      let theUnit = "px";
-      if (typeof string === "string" || string instanceof String) {
-        for (let i = 0, n = units.length; i < n; i++) {
-          const u = units[i];
-          if (string.endsWith(u)) {
-            theUnit = u;
-            string = string.substring(0, string.length - u.length);
-            break;
-          }
-        }
-      }
-      let scale = void 0;
-      if (theUnit === "px" && scope.defaultUnit !== "px") {
-        scale = unitConversion["in"][scope.defaultUnit] / scope.defaultDPI;
-      } else {
-        scale = unitConversion[theUnit][scope.defaultUnit];
-        if (scale < 0) {
-          scale = unitConversion[theUnit]["in"] * scope.defaultDPI;
-        }
-      }
-      return scale * parseFloat(string);
-    }
-    function getNodeTransform(node) {
-      if (!(node.hasAttribute("transform") || node.nodeName === "use" && (node.hasAttribute("x") || node.hasAttribute("y")))) {
-        return null;
-      }
-      const transform = parseNodeTransform(node);
-      if (transformStack.length > 0) {
-        transform.premultiply(transformStack[transformStack.length - 1]);
-      }
-      currentTransform.copy(transform);
-      transformStack.push(transform);
-      return transform;
-    }
-    function parseNodeTransform(node) {
-      const transform = new three_module.Matrix3();
-      const currentTransform2 = tempTransform0;
-      if (node.nodeName === "use" && (node.hasAttribute("x") || node.hasAttribute("y"))) {
-        const tx = parseFloatWithUnits(node.getAttribute("x"));
-        const ty = parseFloatWithUnits(node.getAttribute("y"));
-        transform.translate(tx, ty);
-      }
-      if (node.hasAttribute("transform")) {
-        const transformsTexts = node.getAttribute("transform").split(")");
-        for (let tIndex = transformsTexts.length - 1; tIndex >= 0; tIndex--) {
-          const transformText = transformsTexts[tIndex].trim();
-          if (transformText === "")
-            continue;
-          const openParPos = transformText.indexOf("(");
-          const closeParPos = transformText.length;
-          if (openParPos > 0 && openParPos < closeParPos) {
-            const transformType = transformText.substr(0, openParPos);
-            const array = parseFloats(transformText.substr(openParPos + 1, closeParPos - openParPos - 1));
-            currentTransform2.identity();
-            switch (transformType) {
-              case "translate":
-                if (array.length >= 1) {
-                  const tx = array[0];
-                  let ty = tx;
-                  if (array.length >= 2) {
-                    ty = array[1];
-                  }
-                  currentTransform2.translate(tx, ty);
-                }
-                break;
-              case "rotate":
-                if (array.length >= 1) {
-                  let angle = 0;
-                  let cx = 0;
-                  let cy = 0;
-                  angle = -array[0] * Math.PI / 180;
-                  if (array.length >= 3) {
-                    cx = array[1];
-                    cy = array[2];
-                  }
-                  tempTransform1.identity().translate(-cx, -cy);
-                  tempTransform2.identity().rotate(angle);
-                  tempTransform3.multiplyMatrices(tempTransform2, tempTransform1);
-                  tempTransform1.identity().translate(cx, cy);
-                  currentTransform2.multiplyMatrices(tempTransform1, tempTransform3);
-                }
-                break;
-              case "scale":
-                if (array.length >= 1) {
-                  const scaleX = array[0];
-                  let scaleY = scaleX;
-                  if (array.length >= 2) {
-                    scaleY = array[1];
-                  }
-                  currentTransform2.scale(scaleX, scaleY);
-                }
-                break;
-              case "skewX":
-                if (array.length === 1) {
-                  currentTransform2.set(1, Math.tan(array[0] * Math.PI / 180), 0, 0, 1, 0, 0, 0, 1);
-                }
-                break;
-              case "skewY":
-                if (array.length === 1) {
-                  currentTransform2.set(1, 0, 0, Math.tan(array[0] * Math.PI / 180), 1, 0, 0, 0, 1);
-                }
-                break;
-              case "matrix":
-                if (array.length === 6) {
-                  currentTransform2.set(array[0], array[2], array[4], array[1], array[3], array[5], 0, 0, 1);
-                }
-                break;
-            }
-          }
-          transform.premultiply(currentTransform2);
-        }
-      }
-      return transform;
-    }
-    function transformPath(path, m) {
-      function transfVec2(v2) {
-        tempV3.set(v2.x, v2.y, 1).applyMatrix3(m);
-        v2.set(tempV3.x, tempV3.y);
-      }
-      const isRotated = isTransformRotated(m);
-      const subPaths = path.subPaths;
-      for (let i = 0, n = subPaths.length; i < n; i++) {
-        const subPath = subPaths[i];
-        const curves = subPath.curves;
-        for (let j = 0; j < curves.length; j++) {
-          const curve = curves[j];
-          if (curve.isLineCurve) {
-            transfVec2(curve.v1);
-            transfVec2(curve.v2);
-          } else if (curve.isCubicBezierCurve) {
-            transfVec2(curve.v0);
-            transfVec2(curve.v1);
-            transfVec2(curve.v2);
-            transfVec2(curve.v3);
-          } else if (curve.isQuadraticBezierCurve) {
-            transfVec2(curve.v0);
-            transfVec2(curve.v1);
-            transfVec2(curve.v2);
-          } else if (curve.isEllipseCurve) {
-            if (isRotated) {
-              console.warn("SVGLoader: Elliptic arc or ellipse rotation or skewing is not implemented.");
-            }
-            tempV2.set(curve.aX, curve.aY);
-            transfVec2(tempV2);
-            curve.aX = tempV2.x;
-            curve.aY = tempV2.y;
-            curve.xRadius *= getTransformScaleX(m);
-            curve.yRadius *= getTransformScaleY(m);
-          }
-        }
-      }
-    }
-    function isTransformRotated(m) {
-      return m.elements[1] !== 0 || m.elements[3] !== 0;
-    }
-    function getTransformScaleX(m) {
-      const te = m.elements;
-      return Math.sqrt(te[0] * te[0] + te[1] * te[1]);
-    }
-    function getTransformScaleY(m) {
-      const te = m.elements;
-      return Math.sqrt(te[3] * te[3] + te[4] * te[4]);
-    }
-    const paths = [];
-    const stylesheets = {};
-    const transformStack = [];
-    const tempTransform0 = new three_module.Matrix3();
-    const tempTransform1 = new three_module.Matrix3();
-    const tempTransform2 = new three_module.Matrix3();
-    const tempTransform3 = new three_module.Matrix3();
-    const tempV2 = new three_module.Vector2();
-    const tempV3 = new three_module.Vector3();
-    const currentTransform = new three_module.Matrix3();
-    const xml = new DOMParser().parseFromString(text, "image/svg+xml");
-    parseNode(xml.documentElement, {
-      fill: "#000",
-      fillOpacity: 1,
-      strokeOpacity: 1,
-      strokeWidth: 1,
-      strokeLineJoin: "miter",
-      strokeLineCap: "butt",
-      strokeMiterLimit: 4
-    });
-    const data = { paths, xml: xml.documentElement };
-    return data;
-  }
-  static createShapes(shapePath) {
-    const BIGNUMBER = 999999999;
-    const IntersectionLocationType = {
-      ORIGIN: 0,
-      DESTINATION: 1,
-      BETWEEN: 2,
-      LEFT: 3,
-      RIGHT: 4,
-      BEHIND: 5,
-      BEYOND: 6
-    };
-    const classifyResult = {
-      loc: IntersectionLocationType.ORIGIN,
-      t: 0
-    };
-    function findEdgeIntersection(a0, a1, b0, b1) {
-      const x1 = a0.x;
-      const x2 = a1.x;
-      const x3 = b0.x;
-      const x4 = b1.x;
-      const y1 = a0.y;
-      const y2 = a1.y;
-      const y3 = b0.y;
-      const y4 = b1.y;
-      const nom1 = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3);
-      const nom2 = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3);
-      const denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);
-      const t1 = nom1 / denom;
-      const t2 = nom2 / denom;
-      if (denom === 0 && nom1 !== 0 || t1 <= 0 || t1 >= 1 || t2 < 0 || t2 > 1) {
-        return null;
-      } else if (nom1 === 0 && denom === 0) {
-        for (let i = 0; i < 2; i++) {
-          classifyPoint(i === 0 ? b0 : b1, a0, a1);
-          if (classifyResult.loc == IntersectionLocationType.ORIGIN) {
-            const point = i === 0 ? b0 : b1;
-            return { x: point.x, y: point.y, t: classifyResult.t };
-          } else if (classifyResult.loc == IntersectionLocationType.BETWEEN) {
-            const x = +(x1 + classifyResult.t * (x2 - x1)).toPrecision(10);
-            const y = +(y1 + classifyResult.t * (y2 - y1)).toPrecision(10);
-            return { x, y, t: classifyResult.t };
-          }
-        }
-        return null;
-      } else {
-        for (let i = 0; i < 2; i++) {
-          classifyPoint(i === 0 ? b0 : b1, a0, a1);
-          if (classifyResult.loc == IntersectionLocationType.ORIGIN) {
-            const point = i === 0 ? b0 : b1;
-            return { x: point.x, y: point.y, t: classifyResult.t };
-          }
-        }
-        const x = +(x1 + t1 * (x2 - x1)).toPrecision(10);
-        const y = +(y1 + t1 * (y2 - y1)).toPrecision(10);
-        return { x, y, t: t1 };
-      }
-    }
-    function classifyPoint(p, edgeStart, edgeEnd) {
-      const ax = edgeEnd.x - edgeStart.x;
-      const ay = edgeEnd.y - edgeStart.y;
-      const bx = p.x - edgeStart.x;
-      const by = p.y - edgeStart.y;
-      const sa = ax * by - bx * ay;
-      if (p.x === edgeStart.x && p.y === edgeStart.y) {
-        classifyResult.loc = IntersectionLocationType.ORIGIN;
-        classifyResult.t = 0;
-        return;
-      }
-      if (p.x === edgeEnd.x && p.y === edgeEnd.y) {
-        classifyResult.loc = IntersectionLocationType.DESTINATION;
-        classifyResult.t = 1;
-        return;
-      }
-      if (sa < -Number.EPSILON) {
-        classifyResult.loc = IntersectionLocationType.LEFT;
-        return;
-      }
-      if (sa > Number.EPSILON) {
-        classifyResult.loc = IntersectionLocationType.RIGHT;
-        return;
-      }
-      if (ax * bx < 0 || ay * by < 0) {
-        classifyResult.loc = IntersectionLocationType.BEHIND;
-        return;
-      }
-      if (Math.sqrt(ax * ax + ay * ay) < Math.sqrt(bx * bx + by * by)) {
-        classifyResult.loc = IntersectionLocationType.BEYOND;
-        return;
-      }
-      let t;
-      if (ax !== 0) {
-        t = bx / ax;
-      } else {
-        t = by / ay;
-      }
-      classifyResult.loc = IntersectionLocationType.BETWEEN;
-      classifyResult.t = t;
-    }
-    function getIntersections(path1, path2) {
-      const intersectionsRaw = [];
-      const intersections = [];
-      for (let index = 1; index < path1.length; index++) {
-        const path1EdgeStart = path1[index - 1];
-        const path1EdgeEnd = path1[index];
-        for (let index2 = 1; index2 < path2.length; index2++) {
-          const path2EdgeStart = path2[index2 - 1];
-          const path2EdgeEnd = path2[index2];
-          const intersection = findEdgeIntersection(path1EdgeStart, path1EdgeEnd, path2EdgeStart, path2EdgeEnd);
-          if (intersection !== null && intersectionsRaw.find(
-            (i) => i.t <= intersection.t + Number.EPSILON && i.t >= intersection.t - Number.EPSILON
-          ) === void 0) {
-            intersectionsRaw.push(intersection);
-            intersections.push(new three_module.Vector2(intersection.x, intersection.y));
-          }
-        }
-      }
-      return intersections;
-    }
-    function getScanlineIntersections(scanline, boundingBox, paths) {
-      const center = new three_module.Vector2();
-      boundingBox.getCenter(center);
-      const allIntersections = [];
-      paths.forEach((path) => {
-        if (path.boundingBox.containsPoint(center)) {
-          const intersections = getIntersections(scanline, path.points);
-          intersections.forEach((p) => {
-            allIntersections.push({ identifier: path.identifier, isCW: path.isCW, point: p });
-          });
-        }
-      });
-      allIntersections.sort((i1, i2) => {
-        return i1.point.x - i2.point.x;
-      });
-      return allIntersections;
-    }
-    function isHoleTo(simplePath, allPaths, scanlineMinX2, scanlineMaxX2, _fillRule) {
-      if (_fillRule === null || _fillRule === void 0 || _fillRule === "") {
-        _fillRule = "nonzero";
-      }
-      const centerBoundingBox = new three_module.Vector2();
-      simplePath.boundingBox.getCenter(centerBoundingBox);
-      const scanline = [new three_module.Vector2(scanlineMinX2, centerBoundingBox.y), new three_module.Vector2(scanlineMaxX2, centerBoundingBox.y)];
-      const scanlineIntersections = getScanlineIntersections(scanline, simplePath.boundingBox, allPaths);
-      scanlineIntersections.sort((i1, i2) => {
-        return i1.point.x - i2.point.x;
-      });
-      const baseIntersections = [];
-      const otherIntersections = [];
-      scanlineIntersections.forEach((i2) => {
-        if (i2.identifier === simplePath.identifier) {
-          baseIntersections.push(i2);
-        } else {
-          otherIntersections.push(i2);
-        }
-      });
-      const firstXOfPath = baseIntersections[0].point.x;
-      const stack = [];
-      let i = 0;
-      while (i < otherIntersections.length && otherIntersections[i].point.x < firstXOfPath) {
-        if (stack.length > 0 && stack[stack.length - 1] === otherIntersections[i].identifier) {
-          stack.pop();
-        } else {
-          stack.push(otherIntersections[i].identifier);
-        }
-        i++;
-      }
-      stack.push(simplePath.identifier);
-      if (_fillRule === "evenodd") {
-        const isHole = stack.length % 2 === 0 ? true : false;
-        const isHoleFor = stack[stack.length - 2];
-        return { identifier: simplePath.identifier, isHole, for: isHoleFor };
-      } else if (_fillRule === "nonzero") {
-        let isHole = true;
-        let isHoleFor = null;
-        let lastCWValue = null;
-        for (let i2 = 0; i2 < stack.length; i2++) {
-          const identifier2 = stack[i2];
-          if (isHole) {
-            lastCWValue = allPaths[identifier2].isCW;
-            isHole = false;
-            isHoleFor = identifier2;
-          } else if (lastCWValue !== allPaths[identifier2].isCW) {
-            lastCWValue = allPaths[identifier2].isCW;
-            isHole = true;
-          }
-        }
-        return { identifier: simplePath.identifier, isHole, for: isHoleFor };
-      } else {
-        console.warn('fill-rule: "' + _fillRule + '" is currently not implemented.');
-      }
-    }
-    let identifier = 0;
-    let scanlineMinX = BIGNUMBER;
-    let scanlineMaxX = -BIGNUMBER;
-    let simplePaths = shapePath.subPaths.map((p) => {
-      const points = p.getPoints();
-      let maxY = -BIGNUMBER;
-      let minY = BIGNUMBER;
-      let maxX = -BIGNUMBER;
-      let minX = BIGNUMBER;
-      for (let i = 0; i < points.length; i++) {
-        const p2 = points[i];
-        if (p2.y > maxY) {
-          maxY = p2.y;
-        }
-        if (p2.y < minY) {
-          minY = p2.y;
-        }
-        if (p2.x > maxX) {
-          maxX = p2.x;
-        }
-        if (p2.x < minX) {
-          minX = p2.x;
-        }
-      }
-      if (scanlineMaxX <= maxX) {
-        scanlineMaxX = maxX + 1;
-      }
-      if (scanlineMinX >= minX) {
-        scanlineMinX = minX - 1;
-      }
-      return {
-        curves: p.curves,
-        points,
-        isCW: three_module.ShapeUtils.isClockWise(points),
-        identifier: identifier++,
-        boundingBox: new three_module.Box2(new three_module.Vector2(minX, minY), new three_module.Vector2(maxX, maxY))
-      };
-    });
-    simplePaths = simplePaths.filter((sp) => sp.points.length > 1);
-    const isAHole = simplePaths.map(
-      (p) => isHoleTo(p, simplePaths, scanlineMinX, scanlineMaxX, shapePath.userData.style.fillRule)
-    );
-    const shapesToReturn = [];
-    simplePaths.forEach((p) => {
-      const amIAHole = isAHole[p.identifier];
-      if (!amIAHole.isHole) {
-        const shape = new three_module.Shape();
-        shape.curves = p.curves;
-        const holes = isAHole.filter((h) => h.isHole && h.for === p.identifier);
-        holes.forEach((h) => {
-          const hole = simplePaths[h.identifier];
-          const path = new three_module.Path();
-          path.curves = hole.curves;
-          shape.holes.push(path);
-        });
-        shapesToReturn.push(shape);
-      }
-    });
-    return shapesToReturn;
-  }
-  static getStrokeStyle(width, color, lineJoin, lineCap, miterLimit) {
-    width = width !== void 0 ? width : 1;
-    color = color !== void 0 ? color : "#000";
-    lineJoin = lineJoin !== void 0 ? lineJoin : "miter";
-    lineCap = lineCap !== void 0 ? lineCap : "butt";
-    miterLimit = miterLimit !== void 0 ? miterLimit : 4;
-    return {
-      strokeColor: color,
-      strokeWidth: width,
-      strokeLineJoin: lineJoin,
-      strokeLineCap: lineCap,
-      strokeMiterLimit: miterLimit
-    };
-  }
-  static pointsToStroke(points, style, arcDivisions, minDistance) {
-    const vertices = [];
-    const normals = [];
-    const uvs = [];
-    if (SVGLoader.pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs) === 0) {
-      return null;
-    }
-    const geometry = new three_module.BufferGeometry();
-    geometry.setAttribute("position", new three_module.Float32BufferAttribute(vertices, 3));
-    geometry.setAttribute("normal", new three_module.Float32BufferAttribute(normals, 3));
-    geometry.setAttribute("uv", new three_module.Float32BufferAttribute(uvs, 2));
-    return geometry;
-  }
-  static pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs, vertexOffset) {
-    const tempV2_1 = new three_module.Vector2();
-    const tempV2_2 = new three_module.Vector2();
-    const tempV2_3 = new three_module.Vector2();
-    const tempV2_4 = new three_module.Vector2();
-    const tempV2_5 = new three_module.Vector2();
-    const tempV2_6 = new three_module.Vector2();
-    const tempV2_7 = new three_module.Vector2();
-    const lastPointL = new three_module.Vector2();
-    const lastPointR = new three_module.Vector2();
-    const point0L = new three_module.Vector2();
-    const point0R = new three_module.Vector2();
-    const currentPointL = new three_module.Vector2();
-    const currentPointR = new three_module.Vector2();
-    const nextPointL = new three_module.Vector2();
-    const nextPointR = new three_module.Vector2();
-    const innerPoint = new three_module.Vector2();
-    const outerPoint = new three_module.Vector2();
-    arcDivisions = arcDivisions !== void 0 ? arcDivisions : 12;
-    minDistance = minDistance !== void 0 ? minDistance : 1e-3;
-    vertexOffset = vertexOffset !== void 0 ? vertexOffset : 0;
-    points = removeDuplicatedPoints(points);
-    const numPoints = points.length;
-    if (numPoints < 2)
-      return 0;
-    const isClosed = points[0].equals(points[numPoints - 1]);
-    let currentPoint;
-    let previousPoint = points[0];
-    let nextPoint;
-    const strokeWidth2 = style.strokeWidth / 2;
-    const deltaU = 1 / (numPoints - 1);
-    let u0 = 0, u1;
-    let innerSideModified;
-    let joinIsOnLeftSide;
-    let isMiter;
-    let initialJoinIsOnLeftSide = false;
-    let numVertices = 0;
-    let currentCoordinate = vertexOffset * 3;
-    let currentCoordinateUV = vertexOffset * 2;
-    getNormal(points[0], points[1], tempV2_1).multiplyScalar(strokeWidth2);
-    lastPointL.copy(points[0]).sub(tempV2_1);
-    lastPointR.copy(points[0]).add(tempV2_1);
-    point0L.copy(lastPointL);
-    point0R.copy(lastPointR);
-    for (let iPoint = 1; iPoint < numPoints; iPoint++) {
-      currentPoint = points[iPoint];
-      if (iPoint === numPoints - 1) {
-        if (isClosed) {
-          nextPoint = points[1];
-        } else {
-          nextPoint = void 0;
-        }
-      } else {
-        nextPoint = points[iPoint + 1];
-      }
-      const normal1 = tempV2_1;
-      getNormal(previousPoint, currentPoint, normal1);
-      tempV2_3.copy(normal1).multiplyScalar(strokeWidth2);
-      currentPointL.copy(currentPoint).sub(tempV2_3);
-      currentPointR.copy(currentPoint).add(tempV2_3);
-      u1 = u0 + deltaU;
-      innerSideModified = false;
-      if (nextPoint !== void 0) {
-        getNormal(currentPoint, nextPoint, tempV2_2);
-        tempV2_3.copy(tempV2_2).multiplyScalar(strokeWidth2);
-        nextPointL.copy(currentPoint).sub(tempV2_3);
-        nextPointR.copy(currentPoint).add(tempV2_3);
-        joinIsOnLeftSide = true;
-        tempV2_3.subVectors(nextPoint, previousPoint);
-        if (normal1.dot(tempV2_3) < 0) {
-          joinIsOnLeftSide = false;
-        }
-        if (iPoint === 1)
-          initialJoinIsOnLeftSide = joinIsOnLeftSide;
-        tempV2_3.subVectors(nextPoint, currentPoint);
-        tempV2_3.normalize();
-        const dot = Math.abs(normal1.dot(tempV2_3));
-        if (dot !== 0) {
-          const miterSide = strokeWidth2 / dot;
-          tempV2_3.multiplyScalar(-miterSide);
-          tempV2_4.subVectors(currentPoint, previousPoint);
-          tempV2_5.copy(tempV2_4).setLength(miterSide).add(tempV2_3);
-          innerPoint.copy(tempV2_5).negate();
-          const miterLength2 = tempV2_5.length();
-          const segmentLengthPrev = tempV2_4.length();
-          tempV2_4.divideScalar(segmentLengthPrev);
-          tempV2_6.subVectors(nextPoint, currentPoint);
-          const segmentLengthNext = tempV2_6.length();
-          tempV2_6.divideScalar(segmentLengthNext);
-          if (tempV2_4.dot(innerPoint) < segmentLengthPrev && tempV2_6.dot(innerPoint) < segmentLengthNext) {
-            innerSideModified = true;
-          }
-          outerPoint.copy(tempV2_5).add(currentPoint);
-          innerPoint.add(currentPoint);
-          isMiter = false;
-          if (innerSideModified) {
-            if (joinIsOnLeftSide) {
-              nextPointR.copy(innerPoint);
-              currentPointR.copy(innerPoint);
-            } else {
-              nextPointL.copy(innerPoint);
-              currentPointL.copy(innerPoint);
-            }
-          } else {
-            makeSegmentTriangles();
-          }
-          switch (style.strokeLineJoin) {
-            case "bevel":
-              makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1);
-              break;
-            case "round":
-              createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified);
-              if (joinIsOnLeftSide) {
-                makeCircularSector(currentPoint, currentPointL, nextPointL, u1, 0);
-              } else {
-                makeCircularSector(currentPoint, nextPointR, currentPointR, u1, 1);
-              }
-              break;
-            case "miter":
-            case "miter-clip":
-            default:
-              const miterFraction = strokeWidth2 * style.strokeMiterLimit / miterLength2;
-              if (miterFraction < 1) {
-                if (style.strokeLineJoin !== "miter-clip") {
-                  makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1);
-                  break;
-                } else {
-                  createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified);
-                  if (joinIsOnLeftSide) {
-                    tempV2_6.subVectors(outerPoint, currentPointL).multiplyScalar(miterFraction).add(currentPointL);
-                    tempV2_7.subVectors(outerPoint, nextPointL).multiplyScalar(miterFraction).add(nextPointL);
-                    addVertex(currentPointL, u1, 0);
-                    addVertex(tempV2_6, u1, 0);
-                    addVertex(currentPoint, u1, 0.5);
-                    addVertex(currentPoint, u1, 0.5);
-                    addVertex(tempV2_6, u1, 0);
-                    addVertex(tempV2_7, u1, 0);
-                    addVertex(currentPoint, u1, 0.5);
-                    addVertex(tempV2_7, u1, 0);
-                    addVertex(nextPointL, u1, 0);
-                  } else {
-                    tempV2_6.subVectors(outerPoint, currentPointR).multiplyScalar(miterFraction).add(currentPointR);
-                    tempV2_7.subVectors(outerPoint, nextPointR).multiplyScalar(miterFraction).add(nextPointR);
-                    addVertex(currentPointR, u1, 1);
-                    addVertex(tempV2_6, u1, 1);
-                    addVertex(currentPoint, u1, 0.5);
-                    addVertex(currentPoint, u1, 0.5);
-                    addVertex(tempV2_6, u1, 1);
-                    addVertex(tempV2_7, u1, 1);
-                    addVertex(currentPoint, u1, 0.5);
-                    addVertex(tempV2_7, u1, 1);
-                    addVertex(nextPointR, u1, 1);
-                  }
-                }
-              } else {
-                if (innerSideModified) {
-                  if (joinIsOnLeftSide) {
-                    addVertex(lastPointR, u0, 1);
-                    addVertex(lastPointL, u0, 0);
-                    addVertex(outerPoint, u1, 0);
-                    addVertex(lastPointR, u0, 1);
-                    addVertex(outerPoint, u1, 0);
-                    addVertex(innerPoint, u1, 1);
-                  } else {
-                    addVertex(lastPointR, u0, 1);
-                    addVertex(lastPointL, u0, 0);
-                    addVertex(outerPoint, u1, 1);
-                    addVertex(lastPointL, u0, 0);
-                    addVertex(innerPoint, u1, 0);
-                    addVertex(outerPoint, u1, 1);
-                  }
-                  if (joinIsOnLeftSide) {
-                    nextPointL.copy(outerPoint);
-                  } else {
-                    nextPointR.copy(outerPoint);
-                  }
-                } else {
-                  if (joinIsOnLeftSide) {
-                    addVertex(currentPointL, u1, 0);
-                    addVertex(outerPoint, u1, 0);
-                    addVertex(currentPoint, u1, 0.5);
-                    addVertex(currentPoint, u1, 0.5);
-                    addVertex(outerPoint, u1, 0);
-                    addVertex(nextPointL, u1, 0);
-                  } else {
-                    addVertex(currentPointR, u1, 1);
-                    addVertex(outerPoint, u1, 1);
-                    addVertex(currentPoint, u1, 0.5);
-                    addVertex(currentPoint, u1, 0.5);
-                    addVertex(outerPoint, u1, 1);
-                    addVertex(nextPointR, u1, 1);
-                  }
-                }
-                isMiter = true;
-              }
-              break;
-          }
-        } else {
-          makeSegmentTriangles();
-        }
-      } else {
-        makeSegmentTriangles();
-      }
-      if (!isClosed && iPoint === numPoints - 1) {
-        addCapGeometry(points[0], point0L, point0R, joinIsOnLeftSide, true, u0);
-      }
-      u0 = u1;
-      previousPoint = currentPoint;
-      lastPointL.copy(nextPointL);
-      lastPointR.copy(nextPointR);
-    }
-    if (!isClosed) {
-      addCapGeometry(currentPoint, currentPointL, currentPointR, joinIsOnLeftSide, false, u1);
-    } else if (innerSideModified && vertices) {
-      let lastOuter = outerPoint;
-      let lastInner = innerPoint;
-      if (initialJoinIsOnLeftSide !== joinIsOnLeftSide) {
-        lastOuter = innerPoint;
-        lastInner = outerPoint;
-      }
-      if (joinIsOnLeftSide) {
-        if (isMiter || initialJoinIsOnLeftSide) {
-          lastInner.toArray(vertices, 0 * 3);
-          lastInner.toArray(vertices, 3 * 3);
-          if (isMiter) {
-            lastOuter.toArray(vertices, 1 * 3);
-          }
-        }
-      } else {
-        if (isMiter || !initialJoinIsOnLeftSide) {
-          lastInner.toArray(vertices, 1 * 3);
-          lastInner.toArray(vertices, 3 * 3);
-          if (isMiter) {
-            lastOuter.toArray(vertices, 0 * 3);
-          }
-        }
-      }
-    }
-    return numVertices;
-    function getNormal(p1, p2, result) {
-      result.subVectors(p2, p1);
-      return result.set(-result.y, result.x).normalize();
-    }
-    function addVertex(position, u, v) {
-      if (vertices) {
-        vertices[currentCoordinate] = position.x;
-        vertices[currentCoordinate + 1] = position.y;
-        vertices[currentCoordinate + 2] = 0;
-        if (normals) {
-          normals[currentCoordinate] = 0;
-          normals[currentCoordinate + 1] = 0;
-          normals[currentCoordinate + 2] = 1;
-        }
-        currentCoordinate += 3;
-        if (uvs) {
-          uvs[currentCoordinateUV] = u;
-          uvs[currentCoordinateUV + 1] = v;
-          currentCoordinateUV += 2;
-        }
-      }
-      numVertices += 3;
-    }
-    function makeCircularSector(center, p1, p2, u, v) {
-      tempV2_1.copy(p1).sub(center).normalize();
-      tempV2_2.copy(p2).sub(center).normalize();
-      let angle = Math.PI;
-      const dot = tempV2_1.dot(tempV2_2);
-      if (Math.abs(dot) < 1)
-        angle = Math.abs(Math.acos(dot));
-      angle /= arcDivisions;
-      tempV2_3.copy(p1);
-      for (let i = 0, il = arcDivisions - 1; i < il; i++) {
-        tempV2_4.copy(tempV2_3).rotateAround(center, angle);
-        addVertex(tempV2_3, u, v);
-        addVertex(tempV2_4, u, v);
-        addVertex(center, u, 0.5);
-        tempV2_3.copy(tempV2_4);
-      }
-      addVertex(tempV2_4, u, v);
-      addVertex(p2, u, v);
-      addVertex(center, u, 0.5);
-    }
-    function makeSegmentTriangles() {
-      addVertex(lastPointR, u0, 1);
-      addVertex(lastPointL, u0, 0);
-      addVertex(currentPointL, u1, 0);
-      addVertex(lastPointR, u0, 1);
-      addVertex(currentPointL, u1, 1);
-      addVertex(currentPointR, u1, 0);
-    }
-    function makeSegmentWithBevelJoin(joinIsOnLeftSide2, innerSideModified2, u) {
-      if (innerSideModified2) {
-        if (joinIsOnLeftSide2) {
-          addVertex(lastPointR, u0, 1);
-          addVertex(lastPointL, u0, 0);
-          addVertex(currentPointL, u1, 0);
-          addVertex(lastPointR, u0, 1);
-          addVertex(currentPointL, u1, 0);
-          addVertex(innerPoint, u1, 1);
-          addVertex(currentPointL, u, 0);
-          addVertex(nextPointL, u, 0);
-          addVertex(innerPoint, u, 0.5);
-        } else {
-          addVertex(lastPointR, u0, 1);
-          addVertex(lastPointL, u0, 0);
-          addVertex(currentPointR, u1, 1);
-          addVertex(lastPointL, u0, 0);
-          addVertex(innerPoint, u1, 0);
-          addVertex(currentPointR, u1, 1);
-          addVertex(currentPointR, u, 1);
-          addVertex(nextPointR, u, 0);
-          addVertex(innerPoint, u, 0.5);
-        }
-      } else {
-        if (joinIsOnLeftSide2) {
-          addVertex(currentPointL, u, 0);
-          addVertex(nextPointL, u, 0);
-          addVertex(currentPoint, u, 0.5);
-        } else {
-          addVertex(currentPointR, u, 1);
-          addVertex(nextPointR, u, 0);
-          addVertex(currentPoint, u, 0.5);
-        }
-      }
-    }
-    function createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide2, innerSideModified2) {
-      if (innerSideModified2) {
-        if (joinIsOnLeftSide2) {
-          addVertex(lastPointR, u0, 1);
-          addVertex(lastPointL, u0, 0);
-          addVertex(currentPointL, u1, 0);
-          addVertex(lastPointR, u0, 1);
-          addVertex(currentPointL, u1, 0);
-          addVertex(innerPoint, u1, 1);
-          addVertex(currentPointL, u0, 0);
-          addVertex(currentPoint, u1, 0.5);
-          addVertex(innerPoint, u1, 1);
-          addVertex(currentPoint, u1, 0.5);
-          addVertex(nextPointL, u0, 0);
-          addVertex(innerPoint, u1, 1);
-        } else {
-          addVertex(lastPointR, u0, 1);
-          addVertex(lastPointL, u0, 0);
-          addVertex(currentPointR, u1, 1);
-          addVertex(lastPointL, u0, 0);
-          addVertex(innerPoint, u1, 0);
-          addVertex(currentPointR, u1, 1);
-          addVertex(currentPointR, u0, 1);
-          addVertex(innerPoint, u1, 0);
-          addVertex(currentPoint, u1, 0.5);
-          addVertex(currentPoint, u1, 0.5);
-          addVertex(innerPoint, u1, 0);
-          addVertex(nextPointR, u0, 1);
-        }
-      }
-    }
-    function addCapGeometry(center, p1, p2, joinIsOnLeftSide2, start, u) {
-      switch (style.strokeLineCap) {
-        case "round":
-          if (start) {
-            makeCircularSector(center, p2, p1, u, 0.5);
-          } else {
-            makeCircularSector(center, p1, p2, u, 0.5);
-          }
-          break;
-        case "square":
-          if (start) {
-            tempV2_1.subVectors(p1, center);
-            tempV2_2.set(tempV2_1.y, -tempV2_1.x);
-            tempV2_3.addVectors(tempV2_1, tempV2_2).add(center);
-            tempV2_4.subVectors(tempV2_2, tempV2_1).add(center);
-            if (joinIsOnLeftSide2) {
-              tempV2_3.toArray(vertices, 1 * 3);
-              tempV2_4.toArray(vertices, 0 * 3);
-              tempV2_4.toArray(vertices, 3 * 3);
-            } else {
-              tempV2_3.toArray(vertices, 1 * 3);
-              tempV2_3.toArray(vertices, 3 * 3);
-              tempV2_4.toArray(vertices, 0 * 3);
-            }
-          } else {
-            tempV2_1.subVectors(p2, center);
-            tempV2_2.set(tempV2_1.y, -tempV2_1.x);
-            tempV2_3.addVectors(tempV2_1, tempV2_2).add(center);
-            tempV2_4.subVectors(tempV2_2, tempV2_1).add(center);
-            const vl = vertices.length;
-            if (joinIsOnLeftSide2) {
-              tempV2_3.toArray(vertices, vl - 1 * 3);
-              tempV2_4.toArray(vertices, vl - 2 * 3);
-              tempV2_4.toArray(vertices, vl - 4 * 3);
-            } else {
-              tempV2_3.toArray(vertices, vl - 2 * 3);
-              tempV2_4.toArray(vertices, vl - 1 * 3);
-              tempV2_4.toArray(vertices, vl - 4 * 3);
-            }
-          }
-          break;
-        case "butt":
-        default:
-          break;
-      }
-    }
-    function removeDuplicatedPoints(points2) {
-      let dupPoints = false;
-      for (let i = 1, n = points2.length - 1; i < n; i++) {
-        if (points2[i].distanceTo(points2[i + 1]) < minDistance) {
-          dupPoints = true;
-          break;
-        }
-      }
-      if (!dupPoints)
-        return points2;
-      const newPoints = [];
-      newPoints.push(points2[0]);
-      for (let i = 1, n = points2.length - 1; i < n; i++) {
-        if (points2[i].distanceTo(points2[i + 1]) >= minDistance) {
-          newPoints.push(points2[i]);
-        }
-      }
-      newPoints.push(points2[points2.length - 1]);
-      return newPoints;
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/3DMLoader.js
-
-const _3DMLoader_taskCache = /* @__PURE__ */ new WeakMap();
-class Rhino3dmLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.libraryPath = "";
-    this.libraryPending = null;
-    this.libraryBinary = null;
-    this.libraryConfig = {};
-    this.url = "";
-    this.workerLimit = 4;
-    this.workerPool = [];
-    this.workerNextTaskID = 1;
-    this.workerSourceURL = "";
-    this.workerConfig = {};
-    this.materials = [];
-  }
-  setLibraryPath(path) {
-    this.libraryPath = path;
-    return this;
-  }
-  setWorkerLimit(workerLimit) {
-    this.workerLimit = workerLimit;
-    return this;
-  }
-  load(url, onLoad, onProgress, onError) {
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(this.requestHeader);
-    this.url = url;
-    loader.load(
-      url,
-      (buffer) => {
-        if (_3DMLoader_taskCache.has(buffer)) {
-          const cachedTask = _3DMLoader_taskCache.get(buffer);
-          return cachedTask.promise.then(onLoad).catch(onError);
-        }
-        this.decodeObjects(buffer, url).then(onLoad).catch(onError);
-      },
-      onProgress,
-      onError
-    );
-  }
-  debug() {
-    console.log(
-      "Task load: ",
-      this.workerPool.map((worker) => worker._taskLoad)
-    );
-  }
-  decodeObjects(buffer, url) {
-    let worker;
-    let taskID;
-    const taskCost = buffer.byteLength;
-    const objectPending = this._getWorker(taskCost).then((_worker) => {
-      worker = _worker;
-      taskID = this.workerNextTaskID++;
-      return new Promise((resolve, reject) => {
-        worker._callbacks[taskID] = { resolve, reject };
-        worker.postMessage({ type: "decode", id: taskID, buffer }, [buffer]);
-      });
-    }).then((message) => this._createGeometry(message.data));
-    objectPending.catch(() => true).then(() => {
-      if (worker && taskID) {
-        this._releaseTask(worker, taskID);
-      }
-    });
-    _3DMLoader_taskCache.set(buffer, {
-      url,
-      promise: objectPending
-    });
-    return objectPending;
-  }
-  parse(data, onLoad, onError) {
-    this.decodeObjects(data, "").then(onLoad).catch(onError);
-  }
-  _compareMaterials(material) {
-    const mat = {};
-    mat.name = material.name;
-    mat.color = {};
-    mat.color.r = material.color.r;
-    mat.color.g = material.color.g;
-    mat.color.b = material.color.b;
-    mat.type = material.type;
-    for (let i = 0; i < this.materials.length; i++) {
-      const m = this.materials[i];
-      const _mat = {};
-      _mat.name = m.name;
-      _mat.color = {};
-      _mat.color.r = m.color.r;
-      _mat.color.g = m.color.g;
-      _mat.color.b = m.color.b;
-      _mat.type = m.type;
-      if (JSON.stringify(mat) === JSON.stringify(_mat)) {
-        return m;
-      }
-    }
-    this.materials.push(material);
-    return material;
-  }
-  _createMaterial(material) {
-    if (material === void 0) {
-      return new three_module.MeshStandardMaterial({
-        color: new three_module.Color(1, 1, 1),
-        metalness: 0.8,
-        name: "default",
-        side: 2
-      });
-    }
-    const _diffuseColor = material.diffuseColor;
-    const diffusecolor = new three_module.Color(_diffuseColor.r / 255, _diffuseColor.g / 255, _diffuseColor.b / 255);
-    if (_diffuseColor.r === 0 && _diffuseColor.g === 0 && _diffuseColor.b === 0) {
-      diffusecolor.r = 1;
-      diffusecolor.g = 1;
-      diffusecolor.b = 1;
-    }
-    const mat = new three_module.MeshStandardMaterial({
-      color: diffusecolor,
-      name: material.name,
-      side: 2,
-      transparent: material.transparency > 0 ? true : false,
-      opacity: 1 - material.transparency
-    });
-    const textureLoader = new three_module.TextureLoader();
-    for (let i = 0; i < material.textures.length; i++) {
-      const texture = material.textures[i];
-      if (texture.image !== null) {
-        const map = textureLoader.load(texture.image);
-        switch (texture.type) {
-          case "Diffuse":
-            mat.map = map;
-            break;
-          case "Bump":
-            mat.bumpMap = map;
-            break;
-          case "Transparency":
-            mat.alphaMap = map;
-            mat.transparent = true;
-            break;
-          case "Emap":
-            mat.envMap = map;
-            break;
-        }
-      }
-    }
-    return mat;
-  }
-  _createGeometry(data) {
-    const object = new three_module.Object3D();
-    const instanceDefinitionObjects = [];
-    const instanceDefinitions = [];
-    const instanceReferences = [];
-    object.userData["layers"] = data.layers;
-    object.userData["groups"] = data.groups;
-    object.userData["settings"] = data.settings;
-    object.userData["objectType"] = "File3dm";
-    object.userData["materials"] = null;
-    object.name = this.url;
-    let objects = data.objects;
-    const materials = data.materials;
-    for (let i = 0; i < objects.length; i++) {
-      const obj = objects[i];
-      const attributes = obj.attributes;
-      switch (obj.objectType) {
-        case "InstanceDefinition":
-          instanceDefinitions.push(obj);
-          break;
-        case "InstanceReference":
-          instanceReferences.push(obj);
-          break;
-        default:
-          let _object;
-          if (attributes.materialIndex >= 0) {
-            const rMaterial = materials[attributes.materialIndex];
-            let material = this._createMaterial(rMaterial);
-            material = this._compareMaterials(material);
-            _object = this._createObject(obj, material);
-          } else {
-            const material = this._createMaterial();
-            _object = this._createObject(obj, material);
-          }
-          if (_object === void 0) {
-            continue;
-          }
-          const layer = data.layers[attributes.layerIndex];
-          _object.visible = layer ? data.layers[attributes.layerIndex].visible : true;
-          if (attributes.isInstanceDefinitionObject) {
-            instanceDefinitionObjects.push(_object);
-          } else {
-            object.add(_object);
-          }
-          break;
-      }
-    }
-    for (let i = 0; i < instanceDefinitions.length; i++) {
-      const iDef = instanceDefinitions[i];
-      objects = [];
-      for (let j = 0; j < iDef.attributes.objectIds.length; j++) {
-        const objId = iDef.attributes.objectIds[j];
-        for (let p = 0; p < instanceDefinitionObjects.length; p++) {
-          const idoId = instanceDefinitionObjects[p].userData.attributes.id;
-          if (objId === idoId) {
-            objects.push(instanceDefinitionObjects[p]);
-          }
-        }
-      }
-      for (let j = 0; j < instanceReferences.length; j++) {
-        const iRef = instanceReferences[j];
-        if (iRef.geometry.parentIdefId === iDef.attributes.id) {
-          const iRefObject = new three_module.Object3D();
-          const xf = iRef.geometry.xform.array;
-          const matrix = new three_module.Matrix4();
-          matrix.set(
-            xf[0],
-            xf[1],
-            xf[2],
-            xf[3],
-            xf[4],
-            xf[5],
-            xf[6],
-            xf[7],
-            xf[8],
-            xf[9],
-            xf[10],
-            xf[11],
-            xf[12],
-            xf[13],
-            xf[14],
-            xf[15]
-          );
-          iRefObject.applyMatrix4(matrix);
-          for (let p = 0; p < objects.length; p++) {
-            iRefObject.add(objects[p].clone(true));
-          }
-          object.add(iRefObject);
-        }
-      }
-    }
-    object.userData["materials"] = this.materials;
-    return object;
-  }
-  _createObject(obj, mat) {
-    const loader = new three_module.BufferGeometryLoader();
-    const attributes = obj.attributes;
-    let geometry, material, _color, color;
-    switch (obj.objectType) {
-      case "Point":
-      case "PointSet":
-        geometry = loader.parse(obj.geometry);
-        if (geometry.attributes.hasOwnProperty("color")) {
-          material = new three_module.PointsMaterial({ vertexColors: true, sizeAttenuation: false, size: 2 });
-        } else {
-          _color = attributes.drawColor;
-          color = new three_module.Color(_color.r / 255, _color.g / 255, _color.b / 255);
-          material = new three_module.PointsMaterial({ color, sizeAttenuation: false, size: 2 });
-        }
-        material = this._compareMaterials(material);
-        const points = new three_module.Points(geometry, material);
-        points.userData["attributes"] = attributes;
-        points.userData["objectType"] = obj.objectType;
-        if (attributes.name) {
-          points.name = attributes.name;
-        }
-        return points;
-      case "Mesh":
-      case "Extrusion":
-      case "SubD":
-      case "Brep":
-        if (obj.geometry === null)
-          return;
-        geometry = loader.parse(obj.geometry);
-        if (geometry.attributes.hasOwnProperty("color")) {
-          mat.vertexColors = true;
-        }
-        if (mat === null) {
-          mat = this._createMaterial();
-          mat = this._compareMaterials(mat);
-        }
-        const mesh = new three_module.Mesh(geometry, mat);
-        mesh.castShadow = attributes.castsShadows;
-        mesh.receiveShadow = attributes.receivesShadows;
-        mesh.userData["attributes"] = attributes;
-        mesh.userData["objectType"] = obj.objectType;
-        if (attributes.name) {
-          mesh.name = attributes.name;
-        }
-        return mesh;
-      case "Curve":
-        geometry = loader.parse(obj.geometry);
-        _color = attributes.drawColor;
-        color = new three_module.Color(_color.r / 255, _color.g / 255, _color.b / 255);
-        material = new three_module.LineBasicMaterial({ color });
-        material = this._compareMaterials(material);
-        const lines = new three_module.Line(geometry, material);
-        lines.userData["attributes"] = attributes;
-        lines.userData["objectType"] = obj.objectType;
-        if (attributes.name) {
-          lines.name = attributes.name;
-        }
-        return lines;
-      case "TextDot":
-        geometry = obj.geometry;
-        const ctx = document.createElement("canvas").getContext("2d");
-        const font = `${geometry.fontHeight}px ${geometry.fontFace}`;
-        ctx.font = font;
-        const width = ctx.measureText(geometry.text).width + 10;
-        const height = geometry.fontHeight + 10;
-        const r = window.devicePixelRatio;
-        ctx.canvas.width = width * r;
-        ctx.canvas.height = height * r;
-        ctx.canvas.style.width = width + "px";
-        ctx.canvas.style.height = height + "px";
-        ctx.setTransform(r, 0, 0, r, 0, 0);
-        ctx.font = font;
-        ctx.textBaseline = "middle";
-        ctx.textAlign = "center";
-        color = attributes.drawColor;
-        ctx.fillStyle = `rgba(${color.r},${color.g},${color.b},${color.a})`;
-        ctx.fillRect(0, 0, width, height);
-        ctx.fillStyle = "white";
-        ctx.fillText(geometry.text, width / 2, height / 2);
-        const texture = new three_module.CanvasTexture(ctx.canvas);
-        texture.minFilter = three_module.LinearFilter;
-        texture.wrapS = three_module.ClampToEdgeWrapping;
-        texture.wrapT = three_module.ClampToEdgeWrapping;
-        material = new three_module.SpriteMaterial({ map: texture, depthTest: false });
-        const sprite = new three_module.Sprite(material);
-        sprite.position.set(geometry.point[0], geometry.point[1], geometry.point[2]);
-        sprite.scale.set(width / 10, height / 10, 1);
-        sprite.userData["attributes"] = attributes;
-        sprite.userData["objectType"] = obj.objectType;
-        if (attributes.name) {
-          sprite.name = attributes.name;
-        }
-        return sprite;
-      case "Light":
-        geometry = obj.geometry;
-        let light;
-        if (geometry.isDirectionalLight) {
-          light = new three_module.DirectionalLight();
-          light.castShadow = attributes.castsShadows;
-          light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]);
-          light.target.position.set(geometry.direction[0], geometry.direction[1], geometry.direction[2]);
-          light.shadow.normalBias = 0.1;
-        } else if (geometry.isPointLight) {
-          light = new three_module.PointLight();
-          light.castShadow = attributes.castsShadows;
-          light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]);
-          light.shadow.normalBias = 0.1;
-        } else if (geometry.isRectangularLight) {
-          light = new three_module.RectAreaLight();
-          const width2 = Math.abs(geometry.width[2]);
-          const height2 = Math.abs(geometry.length[0]);
-          light.position.set(geometry.location[0] - height2 / 2, geometry.location[1], geometry.location[2] - width2 / 2);
-          light.height = height2;
-          light.width = width2;
-          light.lookAt(new three_module.Vector3(geometry.direction[0], geometry.direction[1], geometry.direction[2]));
-        } else if (geometry.isSpotLight) {
-          light = new three_module.SpotLight();
-          light.castShadow = attributes.castsShadows;
-          light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]);
-          light.target.position.set(geometry.direction[0], geometry.direction[1], geometry.direction[2]);
-          light.angle = geometry.spotAngleRadians;
-          light.shadow.normalBias = 0.1;
-        } else if (geometry.isLinearLight) {
-          console.warn("THREE.3DMLoader:  No conversion exists for linear lights.");
-          return;
-        }
-        if (light) {
-          light.intensity = geometry.intensity;
-          _color = geometry.diffuse;
-          color = new three_module.Color(_color.r / 255, _color.g / 255, _color.b / 255);
-          light.color = color;
-          light.userData["attributes"] = attributes;
-          light.userData["objectType"] = obj.objectType;
-        }
-        return light;
-    }
-  }
-  _initLibrary() {
-    if (!this.libraryPending) {
-      const jsLoader = new three_module.FileLoader(this.manager);
-      jsLoader.setPath(this.libraryPath);
-      const jsContent = new Promise((resolve, reject) => {
-        jsLoader.load("rhino3dm.js", resolve, void 0, reject);
-      });
-      const binaryLoader = new three_module.FileLoader(this.manager);
-      binaryLoader.setPath(this.libraryPath);
-      binaryLoader.setResponseType("arraybuffer");
-      const binaryContent = new Promise((resolve, reject) => {
-        binaryLoader.load("rhino3dm.wasm", resolve, void 0, reject);
-      });
-      this.libraryPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => {
-        this.libraryConfig.wasmBinary = binaryContent2;
-        const fn = Rhino3dmWorker.toString();
-        const body = [
-          "/* rhino3dm.js */",
-          jsContent2,
-          "/* worker */",
-          fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}"))
-        ].join("\n");
-        this.workerSourceURL = URL.createObjectURL(new Blob([body]));
-      });
-    }
-    return this.libraryPending;
-  }
-  _getWorker(taskCost) {
-    return this._initLibrary().then(() => {
-      if (this.workerPool.length < this.workerLimit) {
-        const worker2 = new Worker(this.workerSourceURL);
-        worker2._callbacks = {};
-        worker2._taskCosts = {};
-        worker2._taskLoad = 0;
-        worker2.postMessage({
-          type: "init",
-          libraryConfig: this.libraryConfig
-        });
-        worker2.onmessage = function(e) {
-          const message = e.data;
-          switch (message.type) {
-            case "decode":
-              worker2._callbacks[message.id].resolve(message);
-              break;
-            case "error":
-              worker2._callbacks[message.id].reject(message);
-              break;
-            default:
-              console.error('THREE.Rhino3dmLoader: Unexpected message, "' + message.type + '"');
-          }
-        };
-        this.workerPool.push(worker2);
-      } else {
-        this.workerPool.sort(function(a, b) {
-          return a._taskLoad > b._taskLoad ? -1 : 1;
-        });
-      }
-      const worker = this.workerPool[this.workerPool.length - 1];
-      worker._taskLoad += taskCost;
-      return worker;
-    });
-  }
-  _releaseTask(worker, taskID) {
-    worker._taskLoad -= worker._taskCosts[taskID];
-    delete worker._callbacks[taskID];
-    delete worker._taskCosts[taskID];
-  }
-  dispose() {
-    for (let i = 0; i < this.workerPool.length; ++i) {
-      this.workerPool[i].terminate();
-    }
-    this.workerPool.length = 0;
-    return this;
-  }
-}
-function Rhino3dmWorker() {
-  let libraryPending;
-  let libraryConfig;
-  let rhino;
-  onmessage = function(e) {
-    const message = e.data;
-    switch (message.type) {
-      case "init":
-        libraryConfig = message.libraryConfig;
-        const wasmBinary = libraryConfig.wasmBinary;
-        let RhinoModule;
-        libraryPending = new Promise(function(resolve) {
-          RhinoModule = { wasmBinary, onRuntimeInitialized: resolve };
-          rhino3dm(RhinoModule);
-        }).then(() => {
-          rhino = RhinoModule;
-        });
-        break;
-      case "decode":
-        const buffer = message.buffer;
-        libraryPending.then(() => {
-          const data = decodeObjects(rhino, buffer);
-          self.postMessage({ type: "decode", id: message.id, data });
-        });
-        break;
-    }
-  };
-  function decodeObjects(rhino2, buffer) {
-    const arr = new Uint8Array(buffer);
-    const doc = rhino2.File3dm.fromByteArray(arr);
-    const objects = [];
-    const materials = [];
-    const layers = [];
-    const views = [];
-    const namedViews = [];
-    const groups = [];
-    const objs = doc.objects();
-    const cnt = objs.count;
-    for (let i = 0; i < cnt; i++) {
-      const _object = objs.get(i);
-      const object = extractObjectData(_object, doc);
-      _object.delete();
-      if (object) {
-        objects.push(object);
-      }
-    }
-    for (let i = 0; i < doc.instanceDefinitions().count(); i++) {
-      const idef = doc.instanceDefinitions().get(i);
-      const idefAttributes = extractProperties(idef);
-      idefAttributes.objectIds = idef.getObjectIds();
-      objects.push({ geometry: null, attributes: idefAttributes, objectType: "InstanceDefinition" });
-    }
-    const textureTypes = [
-      // rhino.TextureType.Bitmap,
-      rhino2.TextureType.Diffuse,
-      rhino2.TextureType.Bump,
-      rhino2.TextureType.Transparency,
-      rhino2.TextureType.Opacity,
-      rhino2.TextureType.Emap
-    ];
-    const pbrTextureTypes = [
-      rhino2.TextureType.PBR_BaseColor,
-      rhino2.TextureType.PBR_Subsurface,
-      rhino2.TextureType.PBR_SubsurfaceScattering,
-      rhino2.TextureType.PBR_SubsurfaceScatteringRadius,
-      rhino2.TextureType.PBR_Metallic,
-      rhino2.TextureType.PBR_Specular,
-      rhino2.TextureType.PBR_SpecularTint,
-      rhino2.TextureType.PBR_Roughness,
-      rhino2.TextureType.PBR_Anisotropic,
-      rhino2.TextureType.PBR_Anisotropic_Rotation,
-      rhino2.TextureType.PBR_Sheen,
-      rhino2.TextureType.PBR_SheenTint,
-      rhino2.TextureType.PBR_Clearcoat,
-      rhino2.TextureType.PBR_ClearcoatBump,
-      rhino2.TextureType.PBR_ClearcoatRoughness,
-      rhino2.TextureType.PBR_OpacityIor,
-      rhino2.TextureType.PBR_OpacityRoughness,
-      rhino2.TextureType.PBR_Emission,
-      rhino2.TextureType.PBR_AmbientOcclusion,
-      rhino2.TextureType.PBR_Displacement
-    ];
-    for (let i = 0; i < doc.materials().count(); i++) {
-      const _material = doc.materials().get(i);
-      const _pbrMaterial = _material.physicallyBased();
-      let material = extractProperties(_material);
-      const textures = [];
-      for (let j = 0; j < textureTypes.length; j++) {
-        const _texture = _material.getTexture(textureTypes[j]);
-        if (_texture) {
-          let textureType = textureTypes[j].constructor.name;
-          textureType = textureType.substring(12, textureType.length);
-          const texture = { type: textureType };
-          const image = doc.getEmbeddedFileAsBase64(_texture.fileName);
-          if (image) {
-            texture.image = "data:image/png;base64," + image;
-          } else {
-            console.warn(`THREE.3DMLoader: Image for ${textureType} texture not embedded in file.`);
-            texture.image = null;
-          }
-          textures.push(texture);
-          _texture.delete();
-        }
-      }
-      material.textures = textures;
-      if (_pbrMaterial.supported) {
-        console.log("pbr true");
-        for (let j = 0; j < pbrTextureTypes.length; j++) {
-          const _texture = _material.getTexture(textureTypes[j]);
-          if (_texture) {
-            const image = doc.getEmbeddedFileAsBase64(_texture.fileName);
-            let textureType = textureTypes[j].constructor.name;
-            textureType = textureType.substring(12, textureType.length);
-            const texture = { type: textureType, image: "data:image/png;base64," + image };
-            textures.push(texture);
-            _texture.delete();
-          }
-        }
-        const pbMaterialProperties = extractProperties(_material.physicallyBased());
-        material = Object.assign(pbMaterialProperties, material);
-      }
-      materials.push(material);
-      _material.delete();
-      _pbrMaterial.delete();
-    }
-    for (let i = 0; i < doc.layers().count(); i++) {
-      const _layer = doc.layers().get(i);
-      const layer = extractProperties(_layer);
-      layers.push(layer);
-      _layer.delete();
-    }
-    for (let i = 0; i < doc.views().count(); i++) {
-      const _view = doc.views().get(i);
-      const view = extractProperties(_view);
-      views.push(view);
-      _view.delete();
-    }
-    for (let i = 0; i < doc.namedViews().count(); i++) {
-      const _namedView = doc.namedViews().get(i);
-      const namedView = extractProperties(_namedView);
-      namedViews.push(namedView);
-      _namedView.delete();
-    }
-    for (let i = 0; i < doc.groups().count(); i++) {
-      const _group = doc.groups().get(i);
-      const group = extractProperties(_group);
-      groups.push(group);
-      _group.delete();
-    }
-    const settings = extractProperties(doc.settings());
-    doc.delete();
-    return { objects, materials, layers, views, namedViews, groups, settings };
-  }
-  function extractObjectData(object, doc) {
-    const _geometry = object.geometry();
-    const _attributes = object.attributes();
-    let objectType = _geometry.objectType;
-    let geometry, attributes, position, data, mesh;
-    switch (objectType) {
-      case rhino.ObjectType.Curve:
-        const pts = curveToPoints(_geometry, 100);
-        position = {};
-        attributes = {};
-        data = {};
-        position.itemSize = 3;
-        position.type = "Float32Array";
-        position.array = [];
-        for (let j = 0; j < pts.length; j++) {
-          position.array.push(pts[j][0]);
-          position.array.push(pts[j][1]);
-          position.array.push(pts[j][2]);
-        }
-        attributes.position = position;
-        data.attributes = attributes;
-        geometry = { data };
-        break;
-      case rhino.ObjectType.Point:
-        const pt = _geometry.location;
-        position = {};
-        const color = {};
-        attributes = {};
-        data = {};
-        position.itemSize = 3;
-        position.type = "Float32Array";
-        position.array = [pt[0], pt[1], pt[2]];
-        const _color = _attributes.drawColor(doc);
-        color.itemSize = 3;
-        color.type = "Float32Array";
-        color.array = [_color.r / 255, _color.g / 255, _color.b / 255];
-        attributes.position = position;
-        attributes.color = color;
-        data.attributes = attributes;
-        geometry = { data };
-        break;
-      case rhino.ObjectType.PointSet:
-      case rhino.ObjectType.Mesh:
-        geometry = _geometry.toThreejsJSON();
-        break;
-      case rhino.ObjectType.Brep:
-        const faces = _geometry.faces();
-        mesh = new rhino.Mesh();
-        for (let faceIndex = 0; faceIndex < faces.count; faceIndex++) {
-          const face = faces.get(faceIndex);
-          const _mesh = face.getMesh(rhino.MeshType.Any);
-          if (_mesh) {
-            mesh.append(_mesh);
-            _mesh.delete();
-          }
-          face.delete();
-        }
-        if (mesh.faces().count > 0) {
-          mesh.compact();
-          geometry = mesh.toThreejsJSON();
-          faces.delete();
-        }
-        mesh.delete();
-        break;
-      case rhino.ObjectType.Extrusion:
-        mesh = _geometry.getMesh(rhino.MeshType.Any);
-        if (mesh) {
-          geometry = mesh.toThreejsJSON();
-          mesh.delete();
-        }
-        break;
-      case rhino.ObjectType.TextDot:
-        geometry = extractProperties(_geometry);
-        break;
-      case rhino.ObjectType.Light:
-        geometry = extractProperties(_geometry);
-        break;
-      case rhino.ObjectType.InstanceReference:
-        geometry = extractProperties(_geometry);
-        geometry.xform = extractProperties(_geometry.xform);
-        geometry.xform.array = _geometry.xform.toFloatArray(true);
-        break;
-      case rhino.ObjectType.SubD:
-        _geometry.subdivide(3);
-        mesh = rhino.Mesh.createFromSubDControlNet(_geometry);
-        if (mesh) {
-          geometry = mesh.toThreejsJSON();
-          mesh.delete();
-        }
-        break;
-      default:
-        console.warn(`THREE.3DMLoader: TODO: Implement ${objectType.constructor.name}`);
-        break;
-    }
-    if (geometry) {
-      attributes = extractProperties(_attributes);
-      attributes.geometry = extractProperties(_geometry);
-      if (_attributes.groupCount > 0) {
-        attributes.groupIds = _attributes.getGroupList();
-      }
-      if (_attributes.userStringCount > 0) {
-        attributes.userStrings = _attributes.getUserStrings();
-      }
-      if (_geometry.userStringCount > 0) {
-        attributes.geometry.userStrings = _geometry.getUserStrings();
-      }
-      attributes.drawColor = _attributes.drawColor(doc);
-      objectType = objectType.constructor.name;
-      objectType = objectType.substring(11, objectType.length);
-      return { geometry, attributes, objectType };
-    } else {
-      console.warn(`THREE.3DMLoader: ${objectType.constructor.name} has no associated mesh geometry.`);
-    }
-  }
-  function extractProperties(object) {
-    const result = {};
-    for (const property in object) {
-      const value = object[property];
-      if (typeof value !== "function") {
-        if (typeof value === "object" && value !== null && value.hasOwnProperty("constructor")) {
-          result[property] = { name: value.constructor.name, value: value.value };
-        } else {
-          result[property] = value;
-        }
-      } else {
-      }
-    }
-    return result;
-  }
-  function curveToPoints(curve, pointLimit) {
-    let pointCount = pointLimit;
-    let rc = [];
-    const ts = [];
-    if (curve instanceof rhino.LineCurve) {
-      return [curve.pointAtStart, curve.pointAtEnd];
-    }
-    if (curve instanceof rhino.PolylineCurve) {
-      pointCount = curve.pointCount;
-      for (let i = 0; i < pointCount; i++) {
-        rc.push(curve.point(i));
-      }
-      return rc;
-    }
-    if (curve instanceof rhino.PolyCurve) {
-      const segmentCount = curve.segmentCount;
-      for (let i = 0; i < segmentCount; i++) {
-        const segment = curve.segmentCurve(i);
-        const segmentArray = curveToPoints(segment, pointCount);
-        rc = rc.concat(segmentArray);
-        segment.delete();
-      }
-      return rc;
-    }
-    if (curve instanceof rhino.ArcCurve) {
-      pointCount = Math.floor(curve.angleDegrees / 5);
-      pointCount = pointCount < 2 ? 2 : pointCount;
-    }
-    if (curve instanceof rhino.NurbsCurve && curve.degree === 1) {
-      const pLine = curve.tryGetPolyline();
-      for (let i = 0; i < pLine.count; i++) {
-        rc.push(pLine.get(i));
-      }
-      pLine.delete();
-      return rc;
-    }
-    const domain = curve.domain;
-    const divisions = pointCount - 1;
-    for (let j = 0; j < pointCount; j++) {
-      const t = domain[0] + j / divisions * (domain[1] - domain[0]);
-      if (t === domain[0] || t === domain[1]) {
-        ts.push(t);
-        continue;
-      }
-      const tan = curve.tangentAt(t);
-      const prevTan = curve.tangentAt(ts.slice(-1)[0]);
-      const tS = tan[0] * tan[0] + tan[1] * tan[1] + tan[2] * tan[2];
-      const ptS = prevTan[0] * prevTan[0] + prevTan[1] * prevTan[1] + prevTan[2] * prevTan[2];
-      const denominator = Math.sqrt(tS * ptS);
-      let angle;
-      if (denominator === 0) {
-        angle = Math.PI / 2;
-      } else {
-        const theta = (tan.x * prevTan.x + tan.y * prevTan.y + tan.z * prevTan.z) / denominator;
-        angle = Math.acos(Math.max(-1, Math.min(1, theta)));
-      }
-      if (angle < 0.1)
-        continue;
-      ts.push(t);
-    }
-    rc = ts.map((t) => curve.pointAt(t));
-    return rc;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/OBJLoader.js
-
-const _object_pattern = /^[og]\s*(.+)?/;
-const _material_library_pattern = /^mtllib /;
-const _material_use_pattern = /^usemtl /;
-const _map_use_pattern = /^usemap /;
-const _vA = /* @__PURE__ */ new three_module.Vector3();
-const _vB = /* @__PURE__ */ new three_module.Vector3();
-const _vC = /* @__PURE__ */ new three_module.Vector3();
-const _ab = /* @__PURE__ */ new three_module.Vector3();
-const _cb = /* @__PURE__ */ new three_module.Vector3();
-function ParserState() {
-  const state = {
-    objects: [],
-    object: {},
-    vertices: [],
-    normals: [],
-    colors: [],
-    uvs: [],
-    materials: {},
-    materialLibraries: [],
-    startObject: function(name, fromDeclaration) {
-      if (this.object && this.object.fromDeclaration === false) {
-        this.object.name = name;
-        this.object.fromDeclaration = fromDeclaration !== false;
-        return;
-      }
-      const previousMaterial = this.object && typeof this.object.currentMaterial === "function" ? this.object.currentMaterial() : void 0;
-      if (this.object && typeof this.object._finalize === "function") {
-        this.object._finalize(true);
-      }
-      this.object = {
-        name: name || "",
-        fromDeclaration: fromDeclaration !== false,
-        geometry: {
-          vertices: [],
-          normals: [],
-          colors: [],
-          uvs: [],
-          hasUVIndices: false
-        },
-        materials: [],
-        smooth: true,
-        startMaterial: function(name2, libraries) {
-          const previous = this._finalize(false);
-          if (previous && (previous.inherited || previous.groupCount <= 0)) {
-            this.materials.splice(previous.index, 1);
-          }
-          const material = {
-            index: this.materials.length,
-            name: name2 || "",
-            mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : "",
-            smooth: previous !== void 0 ? previous.smooth : this.smooth,
-            groupStart: previous !== void 0 ? previous.groupEnd : 0,
-            groupEnd: -1,
-            groupCount: -1,
-            inherited: false,
-            clone: function(index) {
-              const cloned = {
-                index: typeof index === "number" ? index : this.index,
-                name: this.name,
-                mtllib: this.mtllib,
-                smooth: this.smooth,
-                groupStart: 0,
-                groupEnd: -1,
-                groupCount: -1,
-                inherited: false
-              };
-              cloned.clone = this.clone.bind(cloned);
-              return cloned;
-            }
-          };
-          this.materials.push(material);
-          return material;
-        },
-        currentMaterial: function() {
-          if (this.materials.length > 0) {
-            return this.materials[this.materials.length - 1];
-          }
-          return void 0;
-        },
-        _finalize: function(end) {
-          const lastMultiMaterial = this.currentMaterial();
-          if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {
-            lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;
-            lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;
-            lastMultiMaterial.inherited = false;
-          }
-          if (end && this.materials.length > 1) {
-            for (let mi = this.materials.length - 1; mi >= 0; mi--) {
-              if (this.materials[mi].groupCount <= 0) {
-                this.materials.splice(mi, 1);
-              }
-            }
-          }
-          if (end && this.materials.length === 0) {
-            this.materials.push({
-              name: "",
-              smooth: this.smooth
-            });
-          }
-          return lastMultiMaterial;
-        }
-      };
-      if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === "function") {
-        const declared = previousMaterial.clone(0);
-        declared.inherited = true;
-        this.object.materials.push(declared);
-      }
-      this.objects.push(this.object);
-    },
-    finalize: function() {
-      if (this.object && typeof this.object._finalize === "function") {
-        this.object._finalize(true);
-      }
-    },
-    parseVertexIndex: function(value, len) {
-      const index = parseInt(value, 10);
-      return (index >= 0 ? index - 1 : index + len / 3) * 3;
-    },
-    parseNormalIndex: function(value, len) {
-      const index = parseInt(value, 10);
-      return (index >= 0 ? index - 1 : index + len / 3) * 3;
-    },
-    parseUVIndex: function(value, len) {
-      const index = parseInt(value, 10);
-      return (index >= 0 ? index - 1 : index + len / 2) * 2;
-    },
-    addVertex: function(a, b, c) {
-      const src = this.vertices;
-      const dst = this.object.geometry.vertices;
-      dst.push(src[a + 0], src[a + 1], src[a + 2]);
-      dst.push(src[b + 0], src[b + 1], src[b + 2]);
-      dst.push(src[c + 0], src[c + 1], src[c + 2]);
-    },
-    addVertexPoint: function(a) {
-      const src = this.vertices;
-      const dst = this.object.geometry.vertices;
-      dst.push(src[a + 0], src[a + 1], src[a + 2]);
-    },
-    addVertexLine: function(a) {
-      const src = this.vertices;
-      const dst = this.object.geometry.vertices;
-      dst.push(src[a + 0], src[a + 1], src[a + 2]);
-    },
-    addNormal: function(a, b, c) {
-      const src = this.normals;
-      const dst = this.object.geometry.normals;
-      dst.push(src[a + 0], src[a + 1], src[a + 2]);
-      dst.push(src[b + 0], src[b + 1], src[b + 2]);
-      dst.push(src[c + 0], src[c + 1], src[c + 2]);
-    },
-    addFaceNormal: function(a, b, c) {
-      const src = this.vertices;
-      const dst = this.object.geometry.normals;
-      _vA.fromArray(src, a);
-      _vB.fromArray(src, b);
-      _vC.fromArray(src, c);
-      _cb.subVectors(_vC, _vB);
-      _ab.subVectors(_vA, _vB);
-      _cb.cross(_ab);
-      _cb.normalize();
-      dst.push(_cb.x, _cb.y, _cb.z);
-      dst.push(_cb.x, _cb.y, _cb.z);
-      dst.push(_cb.x, _cb.y, _cb.z);
-    },
-    addColor: function(a, b, c) {
-      const src = this.colors;
-      const dst = this.object.geometry.colors;
-      if (src[a] !== void 0)
-        dst.push(src[a + 0], src[a + 1], src[a + 2]);
-      if (src[b] !== void 0)
-        dst.push(src[b + 0], src[b + 1], src[b + 2]);
-      if (src[c] !== void 0)
-        dst.push(src[c + 0], src[c + 1], src[c + 2]);
-    },
-    addUV: function(a, b, c) {
-      const src = this.uvs;
-      const dst = this.object.geometry.uvs;
-      dst.push(src[a + 0], src[a + 1]);
-      dst.push(src[b + 0], src[b + 1]);
-      dst.push(src[c + 0], src[c + 1]);
-    },
-    addDefaultUV: function() {
-      const dst = this.object.geometry.uvs;
-      dst.push(0, 0);
-      dst.push(0, 0);
-      dst.push(0, 0);
-    },
-    addUVLine: function(a) {
-      const src = this.uvs;
-      const dst = this.object.geometry.uvs;
-      dst.push(src[a + 0], src[a + 1]);
-    },
-    addFace: function(a, b, c, ua, ub, uc, na, nb, nc) {
-      const vLen = this.vertices.length;
-      let ia = this.parseVertexIndex(a, vLen);
-      let ib = this.parseVertexIndex(b, vLen);
-      let ic = this.parseVertexIndex(c, vLen);
-      this.addVertex(ia, ib, ic);
-      this.addColor(ia, ib, ic);
-      if (na !== void 0 && na !== "") {
-        const nLen = this.normals.length;
-        ia = this.parseNormalIndex(na, nLen);
-        ib = this.parseNormalIndex(nb, nLen);
-        ic = this.parseNormalIndex(nc, nLen);
-        this.addNormal(ia, ib, ic);
-      } else {
-        this.addFaceNormal(ia, ib, ic);
-      }
-      if (ua !== void 0 && ua !== "") {
-        const uvLen = this.uvs.length;
-        ia = this.parseUVIndex(ua, uvLen);
-        ib = this.parseUVIndex(ub, uvLen);
-        ic = this.parseUVIndex(uc, uvLen);
-        this.addUV(ia, ib, ic);
-        this.object.geometry.hasUVIndices = true;
-      } else {
-        this.addDefaultUV();
-      }
-    },
-    addPointGeometry: function(vertices) {
-      this.object.geometry.type = "Points";
-      const vLen = this.vertices.length;
-      for (let vi = 0, l = vertices.length; vi < l; vi++) {
-        const index = this.parseVertexIndex(vertices[vi], vLen);
-        this.addVertexPoint(index);
-        this.addColor(index);
-      }
-    },
-    addLineGeometry: function(vertices, uvs) {
-      this.object.geometry.type = "Line";
-      const vLen = this.vertices.length;
-      const uvLen = this.uvs.length;
-      for (let vi = 0, l = vertices.length; vi < l; vi++) {
-        this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen));
-      }
-      for (let uvi = 0, l = uvs.length; uvi < l; uvi++) {
-        this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen));
-      }
-    }
-  };
-  state.startObject("", false);
-  return state;
-}
-class OBJLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.materials = null;
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setRequestHeader(this.requestHeader);
-    loader.setWithCredentials(this.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  setMaterials(materials) {
-    this.materials = materials;
-    return this;
-  }
-  parse(text) {
-    const state = new ParserState();
-    if (text.indexOf("\r\n") !== -1) {
-      text = text.replace(/\r\n/g, "\n");
-    }
-    if (text.indexOf("\\\n") !== -1) {
-      text = text.replace(/\\\n/g, "");
-    }
-    const lines = text.split("\n");
-    let line = "", lineFirstChar = "";
-    let lineLength = 0;
-    let result = [];
-    const trimLeft = typeof "".trimLeft === "function";
-    for (let i = 0, l = lines.length; i < l; i++) {
-      line = lines[i];
-      line = trimLeft ? line.trimLeft() : line.trim();
-      lineLength = line.length;
-      if (lineLength === 0)
-        continue;
-      lineFirstChar = line.charAt(0);
-      if (lineFirstChar === "#")
-        continue;
-      if (lineFirstChar === "v") {
-        const data = line.split(/\s+/);
-        switch (data[0]) {
-          case "v":
-            state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));
-            if (data.length >= 7) {
-              state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]));
-            } else {
-              state.colors.push(void 0, void 0, void 0);
-            }
-            break;
-          case "vn":
-            state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));
-            break;
-          case "vt":
-            state.uvs.push(parseFloat(data[1]), parseFloat(data[2]));
-            break;
-        }
-      } else if (lineFirstChar === "f") {
-        const lineData = line.substr(1).trim();
-        const vertexData = lineData.split(/\s+/);
-        const faceVertices = [];
-        for (let j = 0, jl = vertexData.length; j < jl; j++) {
-          const vertex = vertexData[j];
-          if (vertex.length > 0) {
-            const vertexParts = vertex.split("/");
-            faceVertices.push(vertexParts);
-          }
-        }
-        const v1 = faceVertices[0];
-        for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {
-          const v2 = faceVertices[j];
-          const v3 = faceVertices[j + 1];
-          state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]);
-        }
-      } else if (lineFirstChar === "l") {
-        const lineParts = line.substring(1).trim().split(" ");
-        let lineVertices = [];
-        const lineUVs = [];
-        if (line.indexOf("/") === -1) {
-          lineVertices = lineParts;
-        } else {
-          for (let li = 0, llen = lineParts.length; li < llen; li++) {
-            const parts = lineParts[li].split("/");
-            if (parts[0] !== "")
-              lineVertices.push(parts[0]);
-            if (parts[1] !== "")
-              lineUVs.push(parts[1]);
-          }
-        }
-        state.addLineGeometry(lineVertices, lineUVs);
-      } else if (lineFirstChar === "p") {
-        const lineData = line.substr(1).trim();
-        const pointData = lineData.split(" ");
-        state.addPointGeometry(pointData);
-      } else if ((result = _object_pattern.exec(line)) !== null) {
-        const name = (" " + result[0].substr(1).trim()).substr(1);
-        state.startObject(name);
-      } else if (_material_use_pattern.test(line)) {
-        state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);
-      } else if (_material_library_pattern.test(line)) {
-        state.materialLibraries.push(line.substring(7).trim());
-      } else if (_map_use_pattern.test(line)) {
-        console.warn(
-          'THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.'
-        );
-      } else if (lineFirstChar === "s") {
-        result = line.split(" ");
-        if (result.length > 1) {
-          const value = result[1].trim().toLowerCase();
-          state.object.smooth = value !== "0" && value !== "off";
-        } else {
-          state.object.smooth = true;
-        }
-        const material = state.object.currentMaterial();
-        if (material)
-          material.smooth = state.object.smooth;
-      } else {
-        if (line === "\0")
-          continue;
-        console.warn('THREE.OBJLoader: Unexpected line: "' + line + '"');
-      }
-    }
-    state.finalize();
-    const container = new three_module.Group();
-    container.materialLibraries = [].concat(state.materialLibraries);
-    const hasPrimitives = !(state.objects.length === 1 && state.objects[0].geometry.vertices.length === 0);
-    if (hasPrimitives === true) {
-      for (let i = 0, l = state.objects.length; i < l; i++) {
-        const object = state.objects[i];
-        const geometry = object.geometry;
-        const materials = object.materials;
-        const isLine = geometry.type === "Line";
-        const isPoints = geometry.type === "Points";
-        let hasVertexColors = false;
-        if (geometry.vertices.length === 0)
-          continue;
-        const buffergeometry = new three_module.BufferGeometry();
-        buffergeometry.setAttribute("position", new three_module.Float32BufferAttribute(geometry.vertices, 3));
-        if (geometry.normals.length > 0) {
-          buffergeometry.setAttribute("normal", new three_module.Float32BufferAttribute(geometry.normals, 3));
-        }
-        if (geometry.colors.length > 0) {
-          hasVertexColors = true;
-          buffergeometry.setAttribute("color", new three_module.Float32BufferAttribute(geometry.colors, 3));
-        }
-        if (geometry.hasUVIndices === true) {
-          buffergeometry.setAttribute("uv", new three_module.Float32BufferAttribute(geometry.uvs, 2));
-        }
-        const createdMaterials = [];
-        for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {
-          const sourceMaterial = materials[mi];
-          const materialHash = sourceMaterial.name + "_" + sourceMaterial.smooth + "_" + hasVertexColors;
-          let material = state.materials[materialHash];
-          if (this.materials !== null) {
-            material = this.materials.create(sourceMaterial.name);
-            if (isLine && material && !(material instanceof three_module.LineBasicMaterial)) {
-              const materialLine = new three_module.LineBasicMaterial();
-              three_module.Material.prototype.copy.call(materialLine, material);
-              materialLine.color.copy(material.color);
-              material = materialLine;
-            } else if (isPoints && material && !(material instanceof three_module.PointsMaterial)) {
-              const materialPoints = new three_module.PointsMaterial({ size: 10, sizeAttenuation: false });
-              three_module.Material.prototype.copy.call(materialPoints, material);
-              materialPoints.color.copy(material.color);
-              materialPoints.map = material.map;
-              material = materialPoints;
-            }
-          }
-          if (material === void 0) {
-            if (isLine) {
-              material = new three_module.LineBasicMaterial();
-            } else if (isPoints) {
-              material = new three_module.PointsMaterial({ size: 1, sizeAttenuation: false });
-            } else {
-              material = new three_module.MeshPhongMaterial();
-            }
-            material.name = sourceMaterial.name;
-            material.flatShading = sourceMaterial.smooth ? false : true;
-            material.vertexColors = hasVertexColors;
-            state.materials[materialHash] = material;
-          }
-          createdMaterials.push(material);
-        }
-        let mesh;
-        if (createdMaterials.length > 1) {
-          for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {
-            const sourceMaterial = materials[mi];
-            buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi);
-          }
-          if (isLine) {
-            mesh = new three_module.LineSegments(buffergeometry, createdMaterials);
-          } else if (isPoints) {
-            mesh = new three_module.Points(buffergeometry, createdMaterials);
-          } else {
-            mesh = new three_module.Mesh(buffergeometry, createdMaterials);
-          }
-        } else {
-          if (isLine) {
-            mesh = new three_module.LineSegments(buffergeometry, createdMaterials[0]);
-          } else if (isPoints) {
-            mesh = new three_module.Points(buffergeometry, createdMaterials[0]);
-          } else {
-            mesh = new three_module.Mesh(buffergeometry, createdMaterials[0]);
-          }
-        }
-        mesh.name = object.name;
-        container.add(mesh);
-      }
-    } else {
-      if (state.vertices.length > 0) {
-        const material = new three_module.PointsMaterial({ size: 1, sizeAttenuation: false });
-        const buffergeometry = new three_module.BufferGeometry();
-        buffergeometry.setAttribute("position", new three_module.Float32BufferAttribute(state.vertices, 3));
-        if (state.colors.length > 0 && state.colors[0] !== void 0) {
-          buffergeometry.setAttribute("color", new three_module.Float32BufferAttribute(state.colors, 3));
-          material.vertexColors = true;
-        }
-        const points = new three_module.Points(buffergeometry, material);
-        container.add(points);
-      }
-    }
-    return container;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/AMFLoader.js
-
-
-class AMFLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(data) {
-    function loadDocument(data2) {
-      let view = new DataView(data2);
-      const magic = String.fromCharCode(view.getUint8(0), view.getUint8(1));
-      if (magic === "PK") {
-        let zip = null;
-        let file = null;
-        console.log("THREE.AMFLoader: Loading Zip");
-        try {
-          zip = (0,esm/* unzipSync */.GZ)(new Uint8Array(data2));
-        } catch (e) {
-          if (e instanceof ReferenceError) {
-            console.log("THREE.AMFLoader: fflate missing and file is compressed.");
-            return null;
-          }
-        }
-        for (file in zip) {
-          if (file.toLowerCase().substr(-4) === ".amf") {
-            break;
-          }
-        }
-        console.log("THREE.AMFLoader: Trying to load file asset: " + file);
-        view = new DataView(zip[file].buffer);
-      }
-      const fileText = three_module.LoaderUtils.decodeText(view);
-      const xmlData2 = new DOMParser().parseFromString(fileText, "application/xml");
-      if (xmlData2.documentElement.nodeName.toLowerCase() !== "amf") {
-        console.log("THREE.AMFLoader: Error loading AMF - no AMF document found.");
-        return null;
-      }
-      return xmlData2;
-    }
-    function loadDocumentScale(node) {
-      let scale = 1;
-      let unit = "millimeter";
-      if (node.documentElement.attributes.unit !== void 0) {
-        unit = node.documentElement.attributes.unit.value.toLowerCase();
-      }
-      const scaleUnits = {
-        millimeter: 1,
-        inch: 25.4,
-        feet: 304.8,
-        meter: 1e3,
-        micron: 1e-3
-      };
-      if (scaleUnits[unit] !== void 0) {
-        scale = scaleUnits[unit];
-      }
-      console.log("THREE.AMFLoader: Unit scale: " + scale);
-      return scale;
-    }
-    function loadMaterials(node) {
-      let matName = "AMF Material";
-      const matId = node.attributes.id.textContent;
-      let color = { r: 1, g: 1, b: 1, a: 1 };
-      let loadedMaterial = null;
-      for (let i2 = 0; i2 < node.childNodes.length; i2++) {
-        const matChildEl = node.childNodes[i2];
-        if (matChildEl.nodeName === "metadata" && matChildEl.attributes.type !== void 0) {
-          if (matChildEl.attributes.type.value === "name") {
-            matName = matChildEl.textContent;
-          }
-        } else if (matChildEl.nodeName === "color") {
-          color = loadColor(matChildEl);
-        }
-      }
-      loadedMaterial = new three_module.MeshPhongMaterial({
-        flatShading: true,
-        color: new three_module.Color(color.r, color.g, color.b),
-        name: matName
-      });
-      if (color.a !== 1) {
-        loadedMaterial.transparent = true;
-        loadedMaterial.opacity = color.a;
-      }
-      return { id: matId, material: loadedMaterial };
-    }
-    function loadColor(node) {
-      const color = { r: 1, g: 1, b: 1, a: 1 };
-      for (let i2 = 0; i2 < node.childNodes.length; i2++) {
-        const matColor = node.childNodes[i2];
-        if (matColor.nodeName === "r") {
-          color.r = matColor.textContent;
-        } else if (matColor.nodeName === "g") {
-          color.g = matColor.textContent;
-        } else if (matColor.nodeName === "b") {
-          color.b = matColor.textContent;
-        } else if (matColor.nodeName === "a") {
-          color.a = matColor.textContent;
-        }
-      }
-      return color;
-    }
-    function loadMeshVolume(node) {
-      const volume = { name: "", triangles: [], materialid: null };
-      let currVolumeNode = node.firstElementChild;
-      if (node.attributes.materialid !== void 0) {
-        volume.materialId = node.attributes.materialid.nodeValue;
-      }
-      while (currVolumeNode) {
-        if (currVolumeNode.nodeName === "metadata") {
-          if (currVolumeNode.attributes.type !== void 0) {
-            if (currVolumeNode.attributes.type.value === "name") {
-              volume.name = currVolumeNode.textContent;
-            }
-          }
-        } else if (currVolumeNode.nodeName === "triangle") {
-          const v1 = currVolumeNode.getElementsByTagName("v1")[0].textContent;
-          const v2 = currVolumeNode.getElementsByTagName("v2")[0].textContent;
-          const v3 = currVolumeNode.getElementsByTagName("v3")[0].textContent;
-          volume.triangles.push(v1, v2, v3);
-        }
-        currVolumeNode = currVolumeNode.nextElementSibling;
-      }
-      return volume;
-    }
-    function loadMeshVertices(node) {
-      const vertArray = [];
-      const normalArray = [];
-      let currVerticesNode = node.firstElementChild;
-      while (currVerticesNode) {
-        if (currVerticesNode.nodeName === "vertex") {
-          let vNode = currVerticesNode.firstElementChild;
-          while (vNode) {
-            if (vNode.nodeName === "coordinates") {
-              const x = vNode.getElementsByTagName("x")[0].textContent;
-              const y = vNode.getElementsByTagName("y")[0].textContent;
-              const z = vNode.getElementsByTagName("z")[0].textContent;
-              vertArray.push(x, y, z);
-            } else if (vNode.nodeName === "normal") {
-              const nx = vNode.getElementsByTagName("nx")[0].textContent;
-              const ny = vNode.getElementsByTagName("ny")[0].textContent;
-              const nz = vNode.getElementsByTagName("nz")[0].textContent;
-              normalArray.push(nx, ny, nz);
-            }
-            vNode = vNode.nextElementSibling;
-          }
-        }
-        currVerticesNode = currVerticesNode.nextElementSibling;
-      }
-      return { vertices: vertArray, normals: normalArray };
-    }
-    function loadObject(node) {
-      const objId = node.attributes.id.textContent;
-      const loadedObject = { name: "amfobject", meshes: [] };
-      let currColor = null;
-      let currObjNode = node.firstElementChild;
-      while (currObjNode) {
-        if (currObjNode.nodeName === "metadata") {
-          if (currObjNode.attributes.type !== void 0) {
-            if (currObjNode.attributes.type.value === "name") {
-              loadedObject.name = currObjNode.textContent;
-            }
-          }
-        } else if (currObjNode.nodeName === "color") {
-          currColor = loadColor(currObjNode);
-        } else if (currObjNode.nodeName === "mesh") {
-          let currMeshNode = currObjNode.firstElementChild;
-          const mesh = { vertices: [], normals: [], volumes: [], color: currColor };
-          while (currMeshNode) {
-            if (currMeshNode.nodeName === "vertices") {
-              const loadedVertices = loadMeshVertices(currMeshNode);
-              mesh.normals = mesh.normals.concat(loadedVertices.normals);
-              mesh.vertices = mesh.vertices.concat(loadedVertices.vertices);
-            } else if (currMeshNode.nodeName === "volume") {
-              mesh.volumes.push(loadMeshVolume(currMeshNode));
-            }
-            currMeshNode = currMeshNode.nextElementSibling;
-          }
-          loadedObject.meshes.push(mesh);
-        }
-        currObjNode = currObjNode.nextElementSibling;
-      }
-      return { id: objId, obj: loadedObject };
-    }
-    const xmlData = loadDocument(data);
-    let amfName = "";
-    let amfAuthor = "";
-    const amfScale = loadDocumentScale(xmlData);
-    const amfMaterials = {};
-    const amfObjects = {};
-    const childNodes = xmlData.documentElement.childNodes;
-    let i, j;
-    for (i = 0; i < childNodes.length; i++) {
-      const child = childNodes[i];
-      if (child.nodeName === "metadata") {
-        if (child.attributes.type !== void 0) {
-          if (child.attributes.type.value === "name") {
-            amfName = child.textContent;
-          } else if (child.attributes.type.value === "author") {
-            amfAuthor = child.textContent;
-          }
-        }
-      } else if (child.nodeName === "material") {
-        const loadedMaterial = loadMaterials(child);
-        amfMaterials[loadedMaterial.id] = loadedMaterial.material;
-      } else if (child.nodeName === "object") {
-        const loadedObject = loadObject(child);
-        amfObjects[loadedObject.id] = loadedObject.obj;
-      }
-    }
-    const sceneObject = new three_module.Group();
-    const defaultMaterial = new three_module.MeshPhongMaterial({ color: 11184895, flatShading: true });
-    sceneObject.name = amfName;
-    sceneObject.userData.author = amfAuthor;
-    sceneObject.userData.loader = "AMF";
-    for (const id in amfObjects) {
-      const part = amfObjects[id];
-      const meshes = part.meshes;
-      const newObject = new three_module.Group();
-      newObject.name = part.name || "";
-      for (i = 0; i < meshes.length; i++) {
-        let objDefaultMaterial = defaultMaterial;
-        const mesh = meshes[i];
-        const vertices = new three_module.Float32BufferAttribute(mesh.vertices, 3);
-        let normals = null;
-        if (mesh.normals.length) {
-          normals = new three_module.Float32BufferAttribute(mesh.normals, 3);
-        }
-        if (mesh.color) {
-          const color = mesh.color;
-          objDefaultMaterial = defaultMaterial.clone();
-          objDefaultMaterial.color = new three_module.Color(color.r, color.g, color.b);
-          if (color.a !== 1) {
-            objDefaultMaterial.transparent = true;
-            objDefaultMaterial.opacity = color.a;
-          }
-        }
-        const volumes = mesh.volumes;
-        for (j = 0; j < volumes.length; j++) {
-          const volume = volumes[j];
-          const newGeometry = new three_module.BufferGeometry();
-          let material = objDefaultMaterial;
-          newGeometry.setIndex(volume.triangles);
-          newGeometry.setAttribute("position", vertices.clone());
-          if (normals) {
-            newGeometry.setAttribute("normal", normals.clone());
-          }
-          if (amfMaterials[volume.materialId] !== void 0) {
-            material = amfMaterials[volume.materialId];
-          }
-          newGeometry.scale(amfScale, amfScale, amfScale);
-          newObject.add(new three_module.Mesh(newGeometry, material.clone()));
-        }
-      }
-      sceneObject.add(newObject);
-    }
-    return sceneObject;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/MMDLoader.js
-
-
-
-class MMDLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.loader = new three_module.FileLoader(this.manager);
-    this.parser = null;
-    this.meshBuilder = new MeshBuilder(this.manager);
-    this.animationBuilder = new AnimationBuilder();
-  }
-  /**
-   * @param {string} animationPath
-   * @return {MMDLoader}
-   */
-  setAnimationPath(animationPath) {
-    this.animationPath = animationPath;
-    return this;
-  }
-  // Load MMD assets as Three.js Object
-  /**
-   * Loads Model file (.pmd or .pmx) as a SkinnedMesh.
-   *
-   * @param {string} url - url to Model(.pmd or .pmx) file
-   * @param {function} onLoad
-   * @param {function} onProgress
-   * @param {function} onError
-   */
-  load(url, onLoad, onProgress, onError) {
-    const builder = this.meshBuilder.setCrossOrigin(this.crossOrigin);
-    let resourcePath;
-    if (this.resourcePath !== "") {
-      resourcePath = this.resourcePath;
-    } else if (this.path !== "") {
-      resourcePath = this.path;
-    } else {
-      resourcePath = three_module.LoaderUtils.extractUrlBase(url);
-    }
-    const modelExtension = this._extractExtension(url).toLowerCase();
-    if (modelExtension !== "pmd" && modelExtension !== "pmx") {
-      if (onError)
-        onError(new Error("THREE.MMDLoader: Unknown model file extension ." + modelExtension + "."));
-      return;
-    }
-    this[modelExtension === "pmd" ? "loadPMD" : "loadPMX"](
-      url,
-      function(data) {
-        onLoad(builder.build(data, resourcePath, onProgress, onError));
-      },
-      onProgress,
-      onError
-    );
-  }
-  /**
-   * Loads Motion file(s) (.vmd) as a AnimationClip.
-   * If two or more files are specified, they'll be merged.
-   *
-   * @param {string|Array<string>} url - url(s) to animation(.vmd) file(s)
-   * @param {SkinnedMesh|THREE.Camera} object - tracks will be fitting to this object
-   * @param {function} onLoad
-   * @param {function} onProgress
-   * @param {function} onError
-   */
-  loadAnimation(url, object, onLoad, onProgress, onError) {
-    const builder = this.animationBuilder;
-    this.loadVMD(
-      url,
-      function(vmd) {
-        onLoad(object.isCamera ? builder.buildCameraAnimation(vmd) : builder.build(vmd, object));
-      },
-      onProgress,
-      onError
-    );
-  }
-  /**
-   * Loads mode file and motion file(s) as an object containing
-   * a SkinnedMesh and a AnimationClip.
-   * Tracks of AnimationClip are fitting to the model.
-   *
-   * @param {string} modelUrl - url to Model(.pmd or .pmx) file
-   * @param {string|Array{string}} vmdUrl - url(s) to animation(.vmd) file
-   * @param {function} onLoad
-   * @param {function} onProgress
-   * @param {function} onError
-   */
-  loadWithAnimation(modelUrl, vmdUrl, onLoad, onProgress, onError) {
-    const scope = this;
-    this.load(
-      modelUrl,
-      function(mesh) {
-        scope.loadAnimation(
-          vmdUrl,
-          mesh,
-          function(animation) {
-            onLoad({
-              mesh,
-              animation
-            });
-          },
-          onProgress,
-          onError
-        );
-      },
-      onProgress,
-      onError
-    );
-  }
-  // Load MMD assets as Object data parsed by MMDParser
-  /**
-   * Loads .pmd file as an Object.
-   *
-   * @param {string} url - url to .pmd file
-   * @param {function} onLoad
-   * @param {function} onProgress
-   * @param {function} onError
-   */
-  loadPMD(url, onLoad, onProgress, onError) {
-    const parser = this._getParser();
-    this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(
-      url,
-      function(buffer) {
-        onLoad(parser.parsePmd(buffer, true));
-      },
-      onProgress,
-      onError
-    );
-  }
-  /**
-   * Loads .pmx file as an Object.
-   *
-   * @param {string} url - url to .pmx file
-   * @param {function} onLoad
-   * @param {function} onProgress
-   * @param {function} onError
-   */
-  loadPMX(url, onLoad, onProgress, onError) {
-    const parser = this._getParser();
-    this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(
-      url,
-      function(buffer) {
-        onLoad(parser.parsePmx(buffer, true));
-      },
-      onProgress,
-      onError
-    );
-  }
-  /**
-   * Loads .vmd file as an Object. If two or more files are specified
-   * they'll be merged.
-   *
-   * @param {string|Array<string>} url - url(s) to .vmd file(s)
-   * @param {function} onLoad
-   * @param {function} onProgress
-   * @param {function} onError
-   */
-  loadVMD(url, onLoad, onProgress, onError) {
-    const urls = Array.isArray(url) ? url : [url];
-    const vmds = [];
-    const vmdNum = urls.length;
-    const parser = this._getParser();
-    this.loader.setMimeType(void 0).setPath(this.animationPath).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials);
-    for (let i = 0, il = urls.length; i < il; i++) {
-      this.loader.load(
-        urls[i],
-        function(buffer) {
-          vmds.push(parser.parseVmd(buffer, true));
-          if (vmds.length === vmdNum)
-            onLoad(parser.mergeVmds(vmds));
-        },
-        onProgress,
-        onError
-      );
-    }
-  }
-  /**
-   * Loads .vpd file as an Object.
-   *
-   * @param {string} url - url to .vpd file
-   * @param {boolean} isUnicode
-   * @param {function} onLoad
-   * @param {function} onProgress
-   * @param {function} onError
-   */
-  loadVPD(url, isUnicode, onLoad, onProgress, onError) {
-    const parser = this._getParser();
-    this.loader.setMimeType(isUnicode ? void 0 : "text/plain; charset=shift_jis").setPath(this.animationPath).setResponseType("text").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(
-      url,
-      function(text) {
-        onLoad(parser.parseVpd(text, true));
-      },
-      onProgress,
-      onError
-    );
-  }
-  // private methods
-  _extractExtension(url) {
-    const index = url.lastIndexOf(".");
-    return index < 0 ? "" : url.slice(index + 1);
-  }
-  _getParser() {
-    if (this.parser === null) {
-      this.parser = new mmdparser.Parser();
-    }
-    return this.parser;
-  }
-}
-const DEFAULT_TOON_TEXTURES = [
-  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
-  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/bWiiMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh8aBHZBl14e8wAAAABJRU5ErkJggg==",
-  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVRYR+3WMREAMAwDsYY/yoDI7MLwIiP40+RJklfcCCBAgAABAgTqArfb/QMCCBAgQIAAgbbAB3z/e0F3js2cAAAAAElFTkSuQmCC",
-  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/B5ilMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh81dWyx0gFwKAAAAABJRU5ErkJggg==",
-  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOklEQVRYR+3WoREAMAwDsWb/UQtCy9wxTOQJ/oQ8SXKKGwEECBAgQIBAXeDt7f4BAQQIECBAgEBb4AOz8Hzx7WLY4wAAAABJRU5ErkJggg==",
-  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABPUlEQVRYR+1XwW7CMAy1+f9fZOMysSEOEweEOPRNdm3HbdOyIhAcklPrOs/PLy9RygBALxzcCDQFmgJNgaZAU6Ap0BR4PwX8gsRMVLssMRH5HcpzJEaWL7EVg9F1IHRlyqQohgVr4FGUlUcMJSjcUlDw0zvjeun70cLWmneoyf7NgBTQSniBTQQSuJAZsOnnaczjIMb5hCiuHKxokCrJfVnrctyZL0PkJAJe1HMil4nxeyi3Ypfn1kX51jpPvo/JeCNC4PhVdHdJw2XjBR8brF8PEIhNVn12AgP7uHsTBguBn53MUZCqv7Lp07Pn5k1Ro+uWmUNn7D+M57rtk7aG0Vo73xyF/fbFf0bPJjDXngnGocDTdFhygZjwUQrMNrDcmZlQT50VJ/g/UwNyHpu778+yW+/ksOz/BFo54P4AsUXMfRq7XWsAAAAASUVORK5CYII=",
-  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACMElEQVRYR+2Xv4pTQRTGf2dubhLdICiii2KnYKHVolhauKWPoGAnNr6BD6CvIVaihYuI2i1ia0BY0MZGRHQXjZj/mSPnnskfNWiWZUlzJ5k7M2cm833nO5Mziej2DWWJRUoCpQKlAntSQCqgw39/iUWAGmh37jrRnVsKlgpiqmkoGVABA7E57fvY+pJDdgKqF6HzFCSADkDq+F6AHABtQ+UMVE5D7zXod7fFNhTEckTbj5XQgHzNN+5tQvc5NG7C6BNkp6D3EmpXHDR+dQAjFLchW3VS9rlw3JBh+B7ys5Cf9z0GW1C/7P32AyBAOAz1q4jGliIH3YPuBnSfQX4OGreTIgEYQb/pBDtPnEQ4CivXYPAWBk13oHrB54yA9QuSn2H4AcKRpEILDt0BUzj+RLR1V5EqjD66NPRBVpLcQwjHoHYJOhsQv6U4mnzmrIXJCFr4LDwm/xBUoboG9XX4cc9VKdYoSA2yk5NQLJaKDUjTBoveG3Z2TElTxwjNK4M3LEZgUdDdruvcXzKBpStgp2NPiWi3ks9ZXxIoFVi+AvHLdc9TqtjL3/aYjpPlrzOcEnK62Szhimdd7xX232zFDTgtxezOu3WNMRLjiKgjtOhHVMd1loynVHvOgjuIIJMaELEqhJAV/RCSLbWTcfPFakFgFlALTRRvx+ok6Hlp/Q+v3fmx90bMyUzaEAhmM3KvHlXTL5DxnbGf/1M8RNNACLL5MNtPxP/mypJAqcDSFfgFhpYqWUzhTEAAAAAASUVORK5CYII=",
-  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
-  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
-  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=",
-  "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII="
-];
-class MeshBuilder {
-  constructor(manager) {
-    this.crossOrigin = "anonymous";
-    this.geometryBuilder = new GeometryBuilder();
-    this.materialBuilder = new MaterialBuilder(manager);
-  }
-  /**
-   * @param {string} crossOrigin
-   * @return {MeshBuilder}
-   */
-  setCrossOrigin(crossOrigin) {
-    this.crossOrigin = crossOrigin;
-    return this;
-  }
-  /**
-   * @param {Object} data - parsed PMD/PMX data
-   * @param {string} resourcePath
-   * @param {function} onProgress
-   * @param {function} onError
-   * @return {SkinnedMesh}
-   */
-  build(data, resourcePath, onProgress, onError) {
-    const geometry = this.geometryBuilder.build(data);
-    const material = this.materialBuilder.setCrossOrigin(this.crossOrigin).setResourcePath(resourcePath).build(data, geometry, onProgress, onError);
-    const mesh = new three_module.SkinnedMesh(geometry, material);
-    const skeleton = new three_module.Skeleton(initBones(mesh));
-    mesh.bind(skeleton);
-    return mesh;
-  }
-}
-function initBones(mesh) {
-  const geometry = mesh.geometry;
-  const bones = [];
-  if (geometry && geometry.bones !== void 0) {
-    for (let i = 0, il = geometry.bones.length; i < il; i++) {
-      const gbone = geometry.bones[i];
-      const bone = new three_module.Bone();
-      bones.push(bone);
-      bone.name = gbone.name;
-      bone.position.fromArray(gbone.pos);
-      bone.quaternion.fromArray(gbone.rotq);
-      if (gbone.scl !== void 0)
-        bone.scale.fromArray(gbone.scl);
-    }
-    for (let i = 0, il = geometry.bones.length; i < il; i++) {
-      const gbone = geometry.bones[i];
-      if (gbone.parent !== -1 && gbone.parent !== null && bones[gbone.parent] !== void 0) {
-        bones[gbone.parent].add(bones[i]);
-      } else {
-        mesh.add(bones[i]);
-      }
-    }
-  }
-  mesh.updateMatrixWorld(true);
-  return bones;
-}
-class GeometryBuilder {
-  /**
-   * @param {Object} data - parsed PMD/PMX data
-   * @return {BufferGeometry}
-   */
-  build(data) {
-    const positions = [];
-    const uvs = [];
-    const normals = [];
-    const indices = [];
-    const groups = [];
-    const bones = [];
-    const skinIndices = [];
-    const skinWeights = [];
-    const morphTargets = [];
-    const morphPositions = [];
-    const iks = [];
-    const grants = [];
-    const rigidBodies = [];
-    const constraints = [];
-    let offset = 0;
-    const boneTypeTable = {};
-    for (let i = 0; i < data.metadata.vertexCount; i++) {
-      const v = data.vertices[i];
-      for (let j = 0, jl = v.position.length; j < jl; j++) {
-        positions.push(v.position[j]);
-      }
-      for (let j = 0, jl = v.normal.length; j < jl; j++) {
-        normals.push(v.normal[j]);
-      }
-      for (let j = 0, jl = v.uv.length; j < jl; j++) {
-        uvs.push(v.uv[j]);
-      }
-      for (let j = 0; j < 4; j++) {
-        skinIndices.push(v.skinIndices.length - 1 >= j ? v.skinIndices[j] : 0);
-      }
-      for (let j = 0; j < 4; j++) {
-        skinWeights.push(v.skinWeights.length - 1 >= j ? v.skinWeights[j] : 0);
-      }
-    }
-    for (let i = 0; i < data.metadata.faceCount; i++) {
-      const face = data.faces[i];
-      for (let j = 0, jl = face.indices.length; j < jl; j++) {
-        indices.push(face.indices[j]);
-      }
-    }
-    for (let i = 0; i < data.metadata.materialCount; i++) {
-      const material = data.materials[i];
-      groups.push({
-        offset: offset * 3,
-        count: material.faceCount * 3
-      });
-      offset += material.faceCount;
-    }
-    for (let i = 0; i < data.metadata.rigidBodyCount; i++) {
-      const body = data.rigidBodies[i];
-      let value = boneTypeTable[body.boneIndex];
-      value = value === void 0 ? body.type : Math.max(body.type, value);
-      boneTypeTable[body.boneIndex] = value;
-    }
-    for (let i = 0; i < data.metadata.boneCount; i++) {
-      const boneData = data.bones[i];
-      const bone = {
-        index: i,
-        transformationClass: boneData.transformationClass,
-        parent: boneData.parentIndex,
-        name: boneData.name,
-        pos: boneData.position.slice(0, 3),
-        rotq: [0, 0, 0, 1],
-        scl: [1, 1, 1],
-        rigidBodyType: boneTypeTable[i] !== void 0 ? boneTypeTable[i] : -1
-      };
-      if (bone.parent !== -1) {
-        bone.pos[0] -= data.bones[bone.parent].position[0];
-        bone.pos[1] -= data.bones[bone.parent].position[1];
-        bone.pos[2] -= data.bones[bone.parent].position[2];
-      }
-      bones.push(bone);
-    }
-    if (data.metadata.format === "pmd") {
-      for (let i = 0; i < data.metadata.ikCount; i++) {
-        const ik = data.iks[i];
-        const param = {
-          target: ik.target,
-          effector: ik.effector,
-          iteration: ik.iteration,
-          maxAngle: ik.maxAngle * 4,
-          links: []
-        };
-        for (let j = 0, jl = ik.links.length; j < jl; j++) {
-          const link = {};
-          link.index = ik.links[j].index;
-          link.enabled = true;
-          if (data.bones[link.index].name.indexOf("ひざ") >= 0) {
-            link.limitation = new three_module.Vector3(1, 0, 0);
-          }
-          param.links.push(link);
-        }
-        iks.push(param);
-      }
-    } else {
-      for (let i = 0; i < data.metadata.boneCount; i++) {
-        const ik = data.bones[i].ik;
-        if (ik === void 0)
-          continue;
-        const param = {
-          target: i,
-          effector: ik.effector,
-          iteration: ik.iteration,
-          maxAngle: ik.maxAngle,
-          links: []
-        };
-        for (let j = 0, jl = ik.links.length; j < jl; j++) {
-          const link = {};
-          link.index = ik.links[j].index;
-          link.enabled = true;
-          if (ik.links[j].angleLimitation === 1) {
-            const rotationMin = ik.links[j].lowerLimitationAngle;
-            const rotationMax = ik.links[j].upperLimitationAngle;
-            const tmp1 = -rotationMax[0];
-            const tmp2 = -rotationMax[1];
-            rotationMax[0] = -rotationMin[0];
-            rotationMax[1] = -rotationMin[1];
-            rotationMin[0] = tmp1;
-            rotationMin[1] = tmp2;
-            link.rotationMin = new three_module.Vector3().fromArray(rotationMin);
-            link.rotationMax = new three_module.Vector3().fromArray(rotationMax);
-          }
-          param.links.push(link);
-        }
-        iks.push(param);
-        bones[i].ik = param;
-      }
-    }
-    if (data.metadata.format === "pmx") {
-      let traverse = function(entry) {
-        if (entry.param) {
-          grants.push(entry.param);
-          bones[entry.param.index].grant = entry.param;
-        }
-        entry.visited = true;
-        for (let i = 0, il = entry.children.length; i < il; i++) {
-          const child = entry.children[i];
-          if (!child.visited)
-            traverse(child);
-        }
-      };
-      const grantEntryMap = {};
-      for (let i = 0; i < data.metadata.boneCount; i++) {
-        const boneData = data.bones[i];
-        const grant = boneData.grant;
-        if (grant === void 0)
-          continue;
-        const param = {
-          index: i,
-          parentIndex: grant.parentIndex,
-          ratio: grant.ratio,
-          isLocal: grant.isLocal,
-          affectRotation: grant.affectRotation,
-          affectPosition: grant.affectPosition,
-          transformationClass: boneData.transformationClass
-        };
-        grantEntryMap[i] = { parent: null, children: [], param, visited: false };
-      }
-      const rootEntry = { parent: null, children: [], param: null, visited: false };
-      for (const boneIndex in grantEntryMap) {
-        const grantEntry = grantEntryMap[boneIndex];
-        const parentGrantEntry = grantEntryMap[grantEntry.parentIndex] || rootEntry;
-        grantEntry.parent = parentGrantEntry;
-        parentGrantEntry.children.push(grantEntry);
-      }
-      traverse(rootEntry);
-    }
-    function updateAttributes(attribute, morph, ratio) {
-      for (let i = 0; i < morph.elementCount; i++) {
-        const element = morph.elements[i];
-        let index;
-        if (data.metadata.format === "pmd") {
-          index = data.morphs[0].elements[element.index].index;
-        } else {
-          index = element.index;
-        }
-        attribute.array[index * 3 + 0] += element.position[0] * ratio;
-        attribute.array[index * 3 + 1] += element.position[1] * ratio;
-        attribute.array[index * 3 + 2] += element.position[2] * ratio;
-      }
-    }
-    for (let i = 0; i < data.metadata.morphCount; i++) {
-      const morph = data.morphs[i];
-      const params = { name: morph.name };
-      const attribute = new three_module.Float32BufferAttribute(data.metadata.vertexCount * 3, 3);
-      attribute.name = morph.name;
-      for (let j = 0; j < data.metadata.vertexCount * 3; j++) {
-        attribute.array[j] = positions[j];
-      }
-      if (data.metadata.format === "pmd") {
-        if (i !== 0) {
-          updateAttributes(attribute, morph, 1);
-        }
-      } else {
-        if (morph.type === 0) {
-          for (let j = 0; j < morph.elementCount; j++) {
-            const morph2 = data.morphs[morph.elements[j].index];
-            const ratio = morph.elements[j].ratio;
-            if (morph2.type === 1) {
-              updateAttributes(attribute, morph2, ratio);
-            } else {
-            }
-          }
-        } else if (morph.type === 1) {
-          updateAttributes(attribute, morph, 1);
-        } else if (morph.type === 2) {
-        } else if (morph.type === 3) {
-        } else if (morph.type === 4) {
-        } else if (morph.type === 5) {
-        } else if (morph.type === 6) {
-        } else if (morph.type === 7) {
-        } else if (morph.type === 8) {
-        }
-      }
-      morphTargets.push(params);
-      morphPositions.push(attribute);
-    }
-    for (let i = 0; i < data.metadata.rigidBodyCount; i++) {
-      const rigidBody = data.rigidBodies[i];
-      const params = {};
-      for (const key in rigidBody) {
-        params[key] = rigidBody[key];
-      }
-      if (data.metadata.format === "pmx") {
-        if (params.boneIndex !== -1) {
-          const bone = data.bones[params.boneIndex];
-          params.position[0] -= bone.position[0];
-          params.position[1] -= bone.position[1];
-          params.position[2] -= bone.position[2];
-        }
-      }
-      rigidBodies.push(params);
-    }
-    for (let i = 0; i < data.metadata.constraintCount; i++) {
-      const constraint = data.constraints[i];
-      const params = {};
-      for (const key in constraint) {
-        params[key] = constraint[key];
-      }
-      const bodyA = rigidBodies[params.rigidBodyIndex1];
-      const bodyB = rigidBodies[params.rigidBodyIndex2];
-      if (bodyA.type !== 0 && bodyB.type === 2) {
-        if (bodyA.boneIndex !== -1 && bodyB.boneIndex !== -1 && data.bones[bodyB.boneIndex].parentIndex === bodyA.boneIndex) {
-          bodyB.type = 1;
-        }
-      }
-      constraints.push(params);
-    }
-    const geometry = new three_module.BufferGeometry();
-    geometry.setAttribute("position", new three_module.Float32BufferAttribute(positions, 3));
-    geometry.setAttribute("normal", new three_module.Float32BufferAttribute(normals, 3));
-    geometry.setAttribute("uv", new three_module.Float32BufferAttribute(uvs, 2));
-    geometry.setAttribute("skinIndex", new three_module.Uint16BufferAttribute(skinIndices, 4));
-    geometry.setAttribute("skinWeight", new three_module.Float32BufferAttribute(skinWeights, 4));
-    geometry.setIndex(indices);
-    for (let i = 0, il = groups.length; i < il; i++) {
-      geometry.addGroup(groups[i].offset, groups[i].count, i);
-    }
-    geometry.bones = bones;
-    geometry.morphTargets = morphTargets;
-    geometry.morphAttributes.position = morphPositions;
-    geometry.morphTargetsRelative = false;
-    geometry.userData.MMD = {
-      bones,
-      iks,
-      grants,
-      rigidBodies,
-      constraints,
-      format: data.metadata.format
-    };
-    geometry.computeBoundingSphere();
-    return geometry;
-  }
-}
-class MaterialBuilder {
-  constructor(manager) {
-    this.manager = manager;
-    this.textureLoader = new three_module.TextureLoader(this.manager);
-    this.tgaLoader = null;
-    this.crossOrigin = "anonymous";
-    this.resourcePath = void 0;
-  }
-  /**
-   * @param {string} crossOrigin
-   * @return {MaterialBuilder}
-   */
-  setCrossOrigin(crossOrigin) {
-    this.crossOrigin = crossOrigin;
-    return this;
-  }
-  /**
-   * @param {string} resourcePath
-   * @return {MaterialBuilder}
-   */
-  setResourcePath(resourcePath) {
-    this.resourcePath = resourcePath;
-    return this;
-  }
-  /**
-   * @param {Object} data - parsed PMD/PMX data
-   * @param {BufferGeometry} geometry - some properties are dependend on geometry
-   * @param {function} onProgress
-   * @param {function} onError
-   * @return {Array<MeshToonMaterial>}
-   */
-  build(data, geometry) {
-    const materials = [];
-    const textures = {};
-    this.textureLoader.setCrossOrigin(this.crossOrigin);
-    for (let i = 0; i < data.metadata.materialCount; i++) {
-      const material = data.materials[i];
-      const params = { userData: {} };
-      if (material.name !== void 0)
-        params.name = material.name;
-      params.color = new three_module.Color().fromArray(material.diffuse);
-      params.opacity = material.diffuse[3];
-      params.emissive = new three_module.Color().fromArray(material.ambient);
-      params.transparent = params.opacity !== 1;
-      params.skinning = geometry.bones.length > 0 ? true : false;
-      params.morphTargets = geometry.morphTargets.length > 0 ? true : false;
-      params.fog = true;
-      params.blending = three_module.CustomBlending;
-      params.blendSrc = three_module.SrcAlphaFactor;
-      params.blendDst = three_module.OneMinusSrcAlphaFactor;
-      params.blendSrcAlpha = three_module.SrcAlphaFactor;
-      params.blendDstAlpha = three_module.DstAlphaFactor;
-      if (data.metadata.format === "pmx" && (material.flag & 1) === 1) {
-        params.side = three_module.DoubleSide;
-      } else {
-        params.side = params.opacity === 1 ? three_module.FrontSide : three_module.DoubleSide;
-      }
-      if (data.metadata.format === "pmd") {
-        if (material.fileName) {
-          const fileName = material.fileName;
-          const fileNames = fileName.split("*");
-          params.map = this._loadTexture(fileNames[0], textures);
-          if (fileNames.length > 1) {
-            const extension = fileNames[1].slice(-4).toLowerCase();
-            params.envMap = this._loadTexture(fileNames[1], textures);
-            params.combine = extension === ".sph" ? three_module.MultiplyOperation : three_module.AddOperation;
-          }
-        }
-        const toonFileName = material.toonIndex === -1 ? "toon00.bmp" : data.toonTextures[material.toonIndex].fileName;
-        params.gradientMap = this._loadTexture(toonFileName, textures, {
-          isToonTexture: true,
-          isDefaultToonTexture: this._isDefaultToonTexture(toonFileName)
-        });
-        params.userData.outlineParameters = {
-          thickness: material.edgeFlag === 1 ? 3e-3 : 0,
-          color: [0, 0, 0],
-          alpha: 1,
-          visible: material.edgeFlag === 1
-        };
-      } else {
-        if (material.textureIndex !== -1) {
-          params.map = this._loadTexture(data.textures[material.textureIndex], textures);
-        }
-        if (material.envTextureIndex !== -1 && (material.envFlag === 1 || material.envFlag == 2)) {
-          params.envMap = this._loadTexture(data.textures[material.envTextureIndex], textures);
-          params.combine = material.envFlag === 1 ? three_module.MultiplyOperation : three_module.AddOperation;
-        }
-        let toonFileName, isDefaultToon;
-        if (material.toonIndex === -1 || material.toonFlag !== 0) {
-          toonFileName = "toon" + ("0" + (material.toonIndex + 1)).slice(-2) + ".bmp";
-          isDefaultToon = true;
-        } else {
-          toonFileName = data.textures[material.toonIndex];
-          isDefaultToon = false;
-        }
-        params.gradientMap = this._loadTexture(toonFileName, textures, {
-          isToonTexture: true,
-          isDefaultToonTexture: isDefaultToon
-        });
-        params.userData.outlineParameters = {
-          thickness: material.edgeSize / 300,
-          // TODO: better calculation?
-          color: material.edgeColor.slice(0, 3),
-          alpha: material.edgeColor[3],
-          visible: (material.flag & 16) !== 0 && material.edgeSize > 0
-        };
-      }
-      if (params.map !== void 0) {
-        if (!params.transparent) {
-          this._checkImageTransparency(params.map, geometry, i);
-        }
-        params.emissive.multiplyScalar(0.2);
-      }
-      materials.push(new three_module.MeshToonMaterial(params));
-    }
-    if (data.metadata.format === "pmx") {
-      let checkAlphaMorph = function(elements, materials2) {
-        for (let i = 0, il = elements.length; i < il; i++) {
-          const element = elements[i];
-          if (element.index === -1)
-            continue;
-          const material = materials2[element.index];
-          if (material.opacity !== element.diffuse[3]) {
-            material.transparent = true;
-          }
-        }
-      };
-      for (let i = 0, il = data.morphs.length; i < il; i++) {
-        const morph = data.morphs[i];
-        const elements = morph.elements;
-        if (morph.type === 0) {
-          for (let j = 0, jl = elements.length; j < jl; j++) {
-            const morph2 = data.morphs[elements[j].index];
-            if (morph2.type !== 8)
-              continue;
-            checkAlphaMorph(morph2.elements, materials);
-          }
-        } else if (morph.type === 8) {
-          checkAlphaMorph(elements, materials);
-        }
-      }
-    }
-    return materials;
-  }
-  // private methods
-  _getTGALoader() {
-    if (this.tgaLoader === null) {
-      if (TGALoader === void 0) {
-        throw new Error("THREE.MMDLoader: Import TGALoader");
-      }
-      this.tgaLoader = new TGALoader(this.manager);
-    }
-    return this.tgaLoader;
-  }
-  _isDefaultToonTexture(name) {
-    if (name.length !== 10)
-      return false;
-    return /toon(10|0[0-9])\.bmp/.test(name);
-  }
-  _loadTexture(filePath, textures, params, onProgress, onError) {
-    params = params || {};
-    const scope = this;
-    let fullPath;
-    if (params.isDefaultToonTexture === true) {
-      let index;
-      try {
-        index = parseInt(filePath.match(/toon([0-9]{2})\.bmp$/)[1]);
-      } catch (e) {
-        console.warn(
-          "THREE.MMDLoader: " + filePath + " seems like a not right default texture path. Using toon00.bmp instead."
-        );
-        index = 0;
-      }
-      fullPath = DEFAULT_TOON_TEXTURES[index];
-    } else {
-      fullPath = this.resourcePath + filePath;
-    }
-    if (textures[fullPath] !== void 0)
-      return textures[fullPath];
-    let loader = this.manager.getHandler(fullPath);
-    if (loader === null) {
-      loader = filePath.slice(-4).toLowerCase() === ".tga" ? this._getTGALoader() : this.textureLoader;
-    }
-    const texture = loader.load(
-      fullPath,
-      function(t) {
-        if (params.isToonTexture === true) {
-          t.image = scope._getRotatedImage(t.image);
-          t.magFilter = three_module.NearestFilter;
-          t.minFilter = three_module.NearestFilter;
-        }
-        t.flipY = false;
-        t.wrapS = three_module.RepeatWrapping;
-        t.wrapT = three_module.RepeatWrapping;
-        for (let i = 0; i < texture.readyCallbacks.length; i++) {
-          texture.readyCallbacks[i](texture);
-        }
-        delete texture.readyCallbacks;
-      },
-      onProgress,
-      onError
-    );
-    texture.readyCallbacks = [];
-    textures[fullPath] = texture;
-    return texture;
-  }
-  _getRotatedImage(image) {
-    const canvas = document.createElement("canvas");
-    const context = canvas.getContext("2d");
-    const width = image.width;
-    const height = image.height;
-    canvas.width = width;
-    canvas.height = height;
-    context.clearRect(0, 0, width, height);
-    context.translate(width / 2, height / 2);
-    context.rotate(0.5 * Math.PI);
-    context.translate(-width / 2, -height / 2);
-    context.drawImage(image, 0, 0);
-    return context.getImageData(0, 0, width, height);
-  }
-  // Check if the partial image area used by the texture is transparent.
-  _checkImageTransparency(map, geometry, groupIndex) {
-    map.readyCallbacks.push(function(texture) {
-      function createImageData(image) {
-        const canvas = document.createElement("canvas");
-        canvas.width = image.width;
-        canvas.height = image.height;
-        const context = canvas.getContext("2d");
-        context.drawImage(image, 0, 0);
-        return context.getImageData(0, 0, canvas.width, canvas.height);
-      }
-      function detectImageTransparency(image, uvs, indices) {
-        const width = image.width;
-        const height = image.height;
-        const data = image.data;
-        const threshold = 253;
-        if (data.length / (width * height) !== 4)
-          return false;
-        for (let i = 0; i < indices.length; i += 3) {
-          const centerUV = { x: 0, y: 0 };
-          for (let j = 0; j < 3; j++) {
-            const index = indices[i * 3 + j];
-            const uv = { x: uvs[index * 2 + 0], y: uvs[index * 2 + 1] };
-            if (getAlphaByUv(image, uv) < threshold)
-              return true;
-            centerUV.x += uv.x;
-            centerUV.y += uv.y;
-          }
-          centerUV.x /= 3;
-          centerUV.y /= 3;
-          if (getAlphaByUv(image, centerUV) < threshold)
-            return true;
-        }
-        return false;
-      }
-      function getAlphaByUv(image, uv) {
-        const width = image.width;
-        const height = image.height;
-        let x = Math.round(uv.x * width) % width;
-        let y = Math.round(uv.y * height) % height;
-        if (x < 0)
-          x += width;
-        if (y < 0)
-          y += height;
-        const index = y * width + x;
-        return image.data[index * 4 + 3];
-      }
-      const imageData = texture.image.data !== void 0 ? texture.image : createImageData(texture.image);
-      const group = geometry.groups[groupIndex];
-      if (detectImageTransparency(
-        imageData,
-        geometry.attributes.uv.array,
-        geometry.index.array.slice(group.start, group.start + group.count)
-      )) {
-        map.transparent = true;
-      }
-    });
-  }
-}
-class AnimationBuilder {
-  /**
-   * @param {Object} vmd - parsed VMD data
-   * @param {SkinnedMesh} mesh - tracks will be fitting to mesh
-   * @return {AnimationClip}
-   */
-  build(vmd, mesh) {
-    const tracks = this.buildSkeletalAnimation(vmd, mesh).tracks;
-    const tracks2 = this.buildMorphAnimation(vmd, mesh).tracks;
-    for (let i = 0, il = tracks2.length; i < il; i++) {
-      tracks.push(tracks2[i]);
-    }
-    return new three_module.AnimationClip("", -1, tracks);
-  }
-  /**
-   * @param {Object} vmd - parsed VMD data
-   * @param {SkinnedMesh} mesh - tracks will be fitting to mesh
-   * @return {AnimationClip}
-   */
-  buildSkeletalAnimation(vmd, mesh) {
-    function pushInterpolation(array, interpolation, index) {
-      array.push(interpolation[index + 0] / 127);
-      array.push(interpolation[index + 8] / 127);
-      array.push(interpolation[index + 4] / 127);
-      array.push(interpolation[index + 12] / 127);
-    }
-    const tracks = [];
-    const motions = {};
-    const bones = mesh.skeleton.bones;
-    const boneNameDictionary = {};
-    for (let i = 0, il = bones.length; i < il; i++) {
-      boneNameDictionary[bones[i].name] = true;
-    }
-    for (let i = 0; i < vmd.metadata.motionCount; i++) {
-      const motion = vmd.motions[i];
-      const boneName = motion.boneName;
-      if (boneNameDictionary[boneName] === void 0)
-        continue;
-      motions[boneName] = motions[boneName] || [];
-      motions[boneName].push(motion);
-    }
-    for (const key in motions) {
-      const array = motions[key];
-      array.sort(function(a, b) {
-        return a.frameNum - b.frameNum;
-      });
-      const times = [];
-      const positions = [];
-      const rotations = [];
-      const pInterpolations = [];
-      const rInterpolations = [];
-      const basePosition = mesh.skeleton.getBoneByName(key).position.toArray();
-      for (let i = 0, il = array.length; i < il; i++) {
-        const time = array[i].frameNum / 30;
-        const position = array[i].position;
-        const rotation = array[i].rotation;
-        const interpolation = array[i].interpolation;
-        times.push(time);
-        for (let j = 0; j < 3; j++)
-          positions.push(basePosition[j] + position[j]);
-        for (let j = 0; j < 4; j++)
-          rotations.push(rotation[j]);
-        for (let j = 0; j < 3; j++)
-          pushInterpolation(pInterpolations, interpolation, j);
-        pushInterpolation(rInterpolations, interpolation, 3);
-      }
-      const targetName = ".bones[" + key + "]";
-      tracks.push(this._createTrack(targetName + ".position", three_module.VectorKeyframeTrack, times, positions, pInterpolations));
-      tracks.push(
-        this._createTrack(targetName + ".quaternion", three_module.QuaternionKeyframeTrack, times, rotations, rInterpolations)
-      );
-    }
-    return new three_module.AnimationClip("", -1, tracks);
-  }
-  /**
-   * @param {Object} vmd - parsed VMD data
-   * @param {SkinnedMesh} mesh - tracks will be fitting to mesh
-   * @return {AnimationClip}
-   */
-  buildMorphAnimation(vmd, mesh) {
-    const tracks = [];
-    const morphs = {};
-    const morphTargetDictionary = mesh.morphTargetDictionary;
-    for (let i = 0; i < vmd.metadata.morphCount; i++) {
-      const morph = vmd.morphs[i];
-      const morphName = morph.morphName;
-      if (morphTargetDictionary[morphName] === void 0)
-        continue;
-      morphs[morphName] = morphs[morphName] || [];
-      morphs[morphName].push(morph);
-    }
-    for (const key in morphs) {
-      const array = morphs[key];
-      array.sort(function(a, b) {
-        return a.frameNum - b.frameNum;
-      });
-      const times = [];
-      const values = [];
-      for (let i = 0, il = array.length; i < il; i++) {
-        times.push(array[i].frameNum / 30);
-        values.push(array[i].weight);
-      }
-      tracks.push(new three_module.NumberKeyframeTrack(".morphTargetInfluences[" + morphTargetDictionary[key] + "]", times, values));
-    }
-    return new three_module.AnimationClip("", -1, tracks);
-  }
-  /**
-   * @param {Object} vmd - parsed VMD data
-   * @return {AnimationClip}
-   */
-  buildCameraAnimation(vmd) {
-    function pushVector3(array, vec) {
-      array.push(vec.x);
-      array.push(vec.y);
-      array.push(vec.z);
-    }
-    function pushQuaternion(array, q) {
-      array.push(q.x);
-      array.push(q.y);
-      array.push(q.z);
-      array.push(q.w);
-    }
-    function pushInterpolation(array, interpolation, index) {
-      array.push(interpolation[index * 4 + 0] / 127);
-      array.push(interpolation[index * 4 + 1] / 127);
-      array.push(interpolation[index * 4 + 2] / 127);
-      array.push(interpolation[index * 4 + 3] / 127);
-    }
-    const cameras = vmd.cameras === void 0 ? [] : vmd.cameras.slice();
-    cameras.sort(function(a, b) {
-      return a.frameNum - b.frameNum;
-    });
-    const times = [];
-    const centers = [];
-    const quaternions = [];
-    const positions = [];
-    const fovs = [];
-    const cInterpolations = [];
-    const qInterpolations = [];
-    const pInterpolations = [];
-    const fInterpolations = [];
-    const quaternion = new three_module.Quaternion();
-    const euler = new three_module.Euler();
-    const position = new three_module.Vector3();
-    const center = new three_module.Vector3();
-    for (let i = 0, il = cameras.length; i < il; i++) {
-      const motion = cameras[i];
-      const time = motion.frameNum / 30;
-      const pos = motion.position;
-      const rot = motion.rotation;
-      const distance = motion.distance;
-      const fov = motion.fov;
-      const interpolation = motion.interpolation;
-      times.push(time);
-      position.set(0, 0, -distance);
-      center.set(pos[0], pos[1], pos[2]);
-      euler.set(-rot[0], -rot[1], -rot[2]);
-      quaternion.setFromEuler(euler);
-      position.add(center);
-      position.applyQuaternion(quaternion);
-      pushVector3(centers, center);
-      pushQuaternion(quaternions, quaternion);
-      pushVector3(positions, position);
-      fovs.push(fov);
-      for (let j = 0; j < 3; j++) {
-        pushInterpolation(cInterpolations, interpolation, j);
-      }
-      pushInterpolation(qInterpolations, interpolation, 3);
-      for (let j = 0; j < 3; j++) {
-        pushInterpolation(pInterpolations, interpolation, 4);
-      }
-      pushInterpolation(fInterpolations, interpolation, 5);
-    }
-    const tracks = [];
-    tracks.push(this._createTrack("target.position", three_module.VectorKeyframeTrack, times, centers, cInterpolations));
-    tracks.push(this._createTrack(".quaternion", three_module.QuaternionKeyframeTrack, times, quaternions, qInterpolations));
-    tracks.push(this._createTrack(".position", three_module.VectorKeyframeTrack, times, positions, pInterpolations));
-    tracks.push(this._createTrack(".fov", three_module.NumberKeyframeTrack, times, fovs, fInterpolations));
-    return new three_module.AnimationClip("", -1, tracks);
-  }
-  // private method
-  _createTrack(node, typedKeyframeTrack, times, values, interpolations) {
-    if (times.length > 2) {
-      times = times.slice();
-      values = values.slice();
-      interpolations = interpolations.slice();
-      const stride = values.length / times.length;
-      const interpolateStride = interpolations.length / times.length;
-      let index = 1;
-      for (let aheadIndex = 2, endIndex = times.length; aheadIndex < endIndex; aheadIndex++) {
-        for (let i = 0; i < stride; i++) {
-          if (values[index * stride + i] !== values[(index - 1) * stride + i] || values[index * stride + i] !== values[aheadIndex * stride + i]) {
-            index++;
-            break;
-          }
-        }
-        if (aheadIndex > index) {
-          times[index] = times[aheadIndex];
-          for (let i = 0; i < stride; i++) {
-            values[index * stride + i] = values[aheadIndex * stride + i];
-          }
-          for (let i = 0; i < interpolateStride; i++) {
-            interpolations[index * interpolateStride + i] = interpolations[aheadIndex * interpolateStride + i];
-          }
-        }
-      }
-      times.length = index + 1;
-      values.length = (index + 1) * stride;
-      interpolations.length = (index + 1) * interpolateStride;
-    }
-    const track = new typedKeyframeTrack(node, times, values);
-    track.createInterpolant = function InterpolantFactoryMethodCubicBezier(result) {
-      return new CubicBezierInterpolation(
-        this.times,
-        this.values,
-        this.getValueSize(),
-        result,
-        new Float32Array(interpolations)
-      );
-    };
-    return track;
-  }
-}
-class CubicBezierInterpolation extends three_module.Interpolant {
-  constructor(parameterPositions, sampleValues, sampleSize, resultBuffer, params) {
-    super(parameterPositions, sampleValues, sampleSize, resultBuffer);
-    this.interpolationParams = params;
-  }
-  interpolate_(i1, t0, t, t1) {
-    const result = this.resultBuffer;
-    const values = this.sampleValues;
-    const stride = this.valueSize;
-    const params = this.interpolationParams;
-    const offset1 = i1 * stride;
-    const offset0 = offset1 - stride;
-    const weight1 = t1 - t0 < 1 / 30 * 1.5 ? 0 : (t - t0) / (t1 - t0);
-    if (stride === 4) {
-      const x1 = params[i1 * 4 + 0];
-      const x2 = params[i1 * 4 + 1];
-      const y1 = params[i1 * 4 + 2];
-      const y2 = params[i1 * 4 + 3];
-      const ratio = this._calculate(x1, x2, y1, y2, weight1);
-      three_module.Quaternion.slerpFlat(result, 0, values, offset0, values, offset1, ratio);
-    } else if (stride === 3) {
-      for (let i = 0; i !== stride; ++i) {
-        const x1 = params[i1 * 12 + i * 4 + 0];
-        const x2 = params[i1 * 12 + i * 4 + 1];
-        const y1 = params[i1 * 12 + i * 4 + 2];
-        const y2 = params[i1 * 12 + i * 4 + 3];
-        const ratio = this._calculate(x1, x2, y1, y2, weight1);
-        result[i] = values[offset0 + i] * (1 - ratio) + values[offset1 + i] * ratio;
-      }
-    } else {
-      const x1 = params[i1 * 4 + 0];
-      const x2 = params[i1 * 4 + 1];
-      const y1 = params[i1 * 4 + 2];
-      const y2 = params[i1 * 4 + 3];
-      const ratio = this._calculate(x1, x2, y1, y2, weight1);
-      result[0] = values[offset0] * (1 - ratio) + values[offset1] * ratio;
-    }
-    return result;
-  }
-  _calculate(x1, x2, y1, y2, x) {
-    let c = 0.5;
-    let t = c;
-    let s = 1 - t;
-    const loop = 15;
-    const eps = 1e-5;
-    const math = Math;
-    let sst3, stt3, ttt;
-    for (let i = 0; i < loop; i++) {
-      sst3 = 3 * s * s * t;
-      stt3 = 3 * s * t * t;
-      ttt = t * t * t;
-      const ft = sst3 * x1 + stt3 * x2 + ttt - x;
-      if (math.abs(ft) < eps)
-        break;
-      c /= 2;
-      t += ft < 0 ? c : -c;
-      s = 1 - t;
-    }
-    return sst3 * y1 + stt3 * y2 + ttt;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/KTXLoader.js
-
-class KTXLoader extends three_module.CompressedTextureLoader {
-  constructor(manager) {
-    super(manager);
-  }
-  parse(buffer, loadMipmaps) {
-    const ktx = new KhronosTextureContainer(buffer, 1);
-    return {
-      mipmaps: ktx.mipmaps(loadMipmaps),
-      width: ktx.pixelWidth,
-      height: ktx.pixelHeight,
-      format: ktx.glInternalFormat,
-      isCubemap: ktx.numberOfFaces === 6,
-      mipmapCount: ktx.numberOfMipmapLevels
-    };
-  }
-}
-const HEADER_LEN = 12 + 13 * 4;
-const COMPRESSED_2D = 0;
-class KhronosTextureContainer {
-  /**
-   * @param {ArrayBuffer} arrayBuffer- contents of the KTX container file
-   * @param {number} facesExpected- should be either 1 or 6, based whether a cube texture or or
-   * @param {boolean} threeDExpected- provision for indicating that data should be a 3D texture, not implemented
-   * @param {boolean} textureArrayExpected- provision for indicating that data should be a texture array, not implemented
-   */
-  constructor(arrayBuffer, facesExpected) {
-    this.arrayBuffer = arrayBuffer;
-    const identifier = new Uint8Array(this.arrayBuffer, 0, 12);
-    if (identifier[0] !== 171 || identifier[1] !== 75 || identifier[2] !== 84 || identifier[3] !== 88 || identifier[4] !== 32 || identifier[5] !== 49 || identifier[6] !== 49 || identifier[7] !== 187 || identifier[8] !== 13 || identifier[9] !== 10 || identifier[10] !== 26 || identifier[11] !== 10) {
-      console.error("texture missing KTX identifier");
-      return;
-    }
-    const dataSize = Uint32Array.BYTES_PER_ELEMENT;
-    const headerDataView = new DataView(this.arrayBuffer, 12, 13 * dataSize);
-    const endianness = headerDataView.getUint32(0, true);
-    const littleEndian = endianness === 67305985;
-    this.glType = headerDataView.getUint32(1 * dataSize, littleEndian);
-    this.glTypeSize = headerDataView.getUint32(2 * dataSize, littleEndian);
-    this.glFormat = headerDataView.getUint32(3 * dataSize, littleEndian);
-    this.glInternalFormat = headerDataView.getUint32(4 * dataSize, littleEndian);
-    this.glBaseInternalFormat = headerDataView.getUint32(5 * dataSize, littleEndian);
-    this.pixelWidth = headerDataView.getUint32(6 * dataSize, littleEndian);
-    this.pixelHeight = headerDataView.getUint32(7 * dataSize, littleEndian);
-    this.pixelDepth = headerDataView.getUint32(8 * dataSize, littleEndian);
-    this.numberOfArrayElements = headerDataView.getUint32(9 * dataSize, littleEndian);
-    this.numberOfFaces = headerDataView.getUint32(10 * dataSize, littleEndian);
-    this.numberOfMipmapLevels = headerDataView.getUint32(11 * dataSize, littleEndian);
-    this.bytesOfKeyValueData = headerDataView.getUint32(12 * dataSize, littleEndian);
-    if (this.glType !== 0) {
-      console.warn("only compressed formats currently supported");
-      return;
-    } else {
-      this.numberOfMipmapLevels = Math.max(1, this.numberOfMipmapLevels);
-    }
-    if (this.pixelHeight === 0 || this.pixelDepth !== 0) {
-      console.warn("only 2D textures currently supported");
-      return;
-    }
-    if (this.numberOfArrayElements !== 0) {
-      console.warn("texture arrays not currently supported");
-      return;
-    }
-    if (this.numberOfFaces !== facesExpected) {
-      console.warn("number of faces expected" + facesExpected + ", but found " + this.numberOfFaces);
-      return;
-    }
-    this.loadType = COMPRESSED_2D;
-  }
-  mipmaps(loadMipmaps) {
-    const mipmaps = [];
-    let dataOffset = HEADER_LEN + this.bytesOfKeyValueData;
-    let width = this.pixelWidth;
-    let height = this.pixelHeight;
-    const mipmapCount = loadMipmaps ? this.numberOfMipmapLevels : 1;
-    for (let level = 0; level < mipmapCount; level++) {
-      const imageSize = new Int32Array(this.arrayBuffer, dataOffset, 1)[0];
-      dataOffset += 4;
-      for (let face = 0; face < this.numberOfFaces; face++) {
-        const byteArray = new Uint8Array(this.arrayBuffer, dataOffset, imageSize);
-        mipmaps.push({ data: byteArray, width, height });
-        dataOffset += imageSize;
-        dataOffset += 3 - (imageSize + 3) % 4;
-      }
-      width = Math.max(1, width * 0.5);
-      height = Math.max(1, height * 0.5);
-    }
-    return mipmaps;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/TiltLoader.js
-
-
-class TiltLoader extends three_module.Loader {
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setResponseType("arraybuffer");
-    loader.setWithCredentials(this.withCredentials);
-    loader.load(
-      url,
-      function(buffer) {
-        try {
-          onLoad(scope.parse(buffer));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(buffer) {
-    const group = new three_module.Group();
-    const zip = (0,esm/* unzipSync */.GZ)(new Uint8Array(buffer.slice(16)));
-    const metadata = JSON.parse((0,esm/* strFromU8 */.T8)(zip["metadata.json"]));
-    const data = new DataView(zip["data.sketch"].buffer);
-    const num_strokes = data.getInt32(16, true);
-    const brushes = {};
-    let offset = 20;
-    for (let i = 0; i < num_strokes; i++) {
-      const brush_index = data.getInt32(offset, true);
-      const brush_color = [
-        data.getFloat32(offset + 4, true),
-        data.getFloat32(offset + 8, true),
-        data.getFloat32(offset + 12, true),
-        data.getFloat32(offset + 16, true)
-      ];
-      const brush_size = data.getFloat32(offset + 20, true);
-      const stroke_mask = data.getUint32(offset + 24, true);
-      const controlpoint_mask = data.getUint32(offset + 28, true);
-      let offset_stroke_mask = 0;
-      let offset_controlpoint_mask = 0;
-      for (let j = 0; j < 4; j++) {
-        const byte = 1 << j;
-        if ((stroke_mask & byte) > 0)
-          offset_stroke_mask += 4;
-        if ((controlpoint_mask & byte) > 0)
-          offset_controlpoint_mask += 4;
-      }
-      offset = offset + 28 + offset_stroke_mask + 4;
-      const num_control_points = data.getInt32(offset, true);
-      const positions = new Float32Array(num_control_points * 3);
-      const quaternions = new Float32Array(num_control_points * 4);
-      offset = offset + 4;
-      for (let j = 0, k = 0; j < positions.length; j += 3, k += 4) {
-        positions[j + 0] = data.getFloat32(offset + 0, true);
-        positions[j + 1] = data.getFloat32(offset + 4, true);
-        positions[j + 2] = data.getFloat32(offset + 8, true);
-        quaternions[k + 0] = data.getFloat32(offset + 12, true);
-        quaternions[k + 1] = data.getFloat32(offset + 16, true);
-        quaternions[k + 2] = data.getFloat32(offset + 20, true);
-        quaternions[k + 3] = data.getFloat32(offset + 24, true);
-        offset = offset + 28 + offset_controlpoint_mask;
-      }
-      if (brush_index in brushes === false) {
-        brushes[brush_index] = [];
-      }
-      brushes[brush_index].push([positions, quaternions, brush_size, brush_color]);
-    }
-    for (const brush_index in brushes) {
-      const geometry = new StrokeGeometry(brushes[brush_index]);
-      const material = getMaterial(metadata.BrushIndex[brush_index]);
-      group.add(new three_module.Mesh(geometry, material));
-    }
-    return group;
-  }
-}
-class StrokeGeometry extends three_module.BufferGeometry {
-  constructor(strokes) {
-    super();
-    const vertices = [];
-    const colors = [];
-    const uvs = [];
-    const position = new three_module.Vector3();
-    const prevPosition = new three_module.Vector3();
-    const quaternion = new three_module.Quaternion();
-    const prevQuaternion = new three_module.Quaternion();
-    const vector1 = new three_module.Vector3();
-    const vector2 = new three_module.Vector3();
-    const vector3 = new three_module.Vector3();
-    const vector4 = new three_module.Vector3();
-    for (const k in strokes) {
-      const stroke = strokes[k];
-      const positions = stroke[0];
-      const quaternions = stroke[1];
-      const size = stroke[2];
-      const color = stroke[3];
-      prevPosition.fromArray(positions, 0);
-      prevQuaternion.fromArray(quaternions, 0);
-      for (let i = 3, j = 4, l = positions.length; i < l; i += 3, j += 4) {
-        position.fromArray(positions, i);
-        quaternion.fromArray(quaternions, j);
-        vector1.set(-size, 0, 0);
-        vector1.applyQuaternion(quaternion);
-        vector1.add(position);
-        vector2.set(size, 0, 0);
-        vector2.applyQuaternion(quaternion);
-        vector2.add(position);
-        vector3.set(size, 0, 0);
-        vector3.applyQuaternion(prevQuaternion);
-        vector3.add(prevPosition);
-        vector4.set(-size, 0, 0);
-        vector4.applyQuaternion(prevQuaternion);
-        vector4.add(prevPosition);
-        vertices.push(vector1.x, vector1.y, -vector1.z);
-        vertices.push(vector2.x, vector2.y, -vector2.z);
-        vertices.push(vector4.x, vector4.y, -vector4.z);
-        vertices.push(vector2.x, vector2.y, -vector2.z);
-        vertices.push(vector3.x, vector3.y, -vector3.z);
-        vertices.push(vector4.x, vector4.y, -vector4.z);
-        prevPosition.copy(position);
-        prevQuaternion.copy(quaternion);
-        colors.push(...color);
-        colors.push(...color);
-        colors.push(...color);
-        colors.push(...color);
-        colors.push(...color);
-        colors.push(...color);
-        const p1 = i / l;
-        const p2 = (i - 3) / l;
-        uvs.push(p1, 0);
-        uvs.push(p1, 1);
-        uvs.push(p2, 0);
-        uvs.push(p1, 1);
-        uvs.push(p2, 1);
-        uvs.push(p2, 0);
-      }
-    }
-    this.setAttribute("position", new three_module.BufferAttribute(new Float32Array(vertices), 3));
-    this.setAttribute("color", new three_module.BufferAttribute(new Float32Array(colors), 4));
-    this.setAttribute("uv", new three_module.BufferAttribute(new Float32Array(uvs), 2));
-  }
-}
-const BRUSH_LIST_ARRAY = {
-  "89d104cd-d012-426b-b5b3-bbaee63ac43c": "Bubbles",
-  "700f3aa8-9a7c-2384-8b8a-ea028905dd8c": "CelVinyl",
-  "0f0ff7b2-a677-45eb-a7d6-0cd7206f4816": "ChromaticWave",
-  "1161af82-50cf-47db-9706-0c3576d43c43": "CoarseBristles",
-  "79168f10-6961-464a-8be1-57ed364c5600": "CoarseBristlesSingleSided",
-  "1caa6d7d-f015-3f54-3a4b-8b5354d39f81": "Comet",
-  "c8313697-2563-47fc-832e-290f4c04b901": "DiamondHull",
-  "4391aaaa-df73-4396-9e33-31e4e4930b27": "Disco",
-  "d1d991f2-e7a0-4cf1-b328-f57e915e6260": "DotMarker",
-  "6a1cf9f9-032c-45ec-9b1d-a6680bee30f7": "Dots",
-  "0d3889f3-3ede-470c-8af4-f44813306126": "DoubleTaperedFlat",
-  "0d3889f3-3ede-470c-8af4-de4813306126": "DoubleTaperedMarker",
-  "d0262945-853c-4481-9cbd-88586bed93cb": "DuctTape",
-  "3ca16e2f-bdcd-4da2-8631-dcef342f40f1": "DuctTapeSingleSided",
-  "f6e85de3-6dcc-4e7f-87fd-cee8c3d25d51": "Electricity",
-  "02ffb866-7fb2-4d15-b761-1012cefb1360": "Embers",
-  "cb92b597-94ca-4255-b017-0e3f42f12f9e": "Fire",
-  "2d35bcf0-e4d8-452c-97b1-3311be063130": "Flat",
-  "55303bc4-c749-4a72-98d9-d23e68e76e18": "FlatDeprecated",
-  "280c0a7a-aad8-416c-a7d2-df63d129ca70": "FlatSingleSided",
-  "cf019139-d41c-4eb0-a1d0-5cf54b0a42f3": "Highlighter",
-  "6a1cf9f9-032c-45ec-9b6e-a6680bee32e9": "HyperGrid",
-  "dce872c2-7b49-4684-b59b-c45387949c5c": "Hypercolor",
-  "e8ef32b1-baa8-460a-9c2c-9cf8506794f5": "HypercolorSingleSided",
-  "2f212815-f4d3-c1a4-681a-feeaf9c6dc37": "Icing",
-  "f5c336cf-5108-4b40-ade9-c687504385ab": "Ink",
-  "c0012095-3ffd-4040-8ee1-fc180d346eaa": "InkSingleSided",
-  "4a76a27a-44d8-4bfe-9a8c-713749a499b0": "Leaves",
-  "ea19de07-d0c0-4484-9198-18489a3c1487": "LeavesSingleSided",
-  "2241cd32-8ba2-48a5-9ee7-2caef7e9ed62": "Light",
-  "4391aaaa-df81-4396-9e33-31e4e4930b27": "LightWire",
-  "d381e0f5-3def-4a0d-8853-31e9200bcbda": "Lofted",
-  "429ed64a-4e97-4466-84d3-145a861ef684": "Marker",
-  "79348357-432d-4746-8e29-0e25c112e3aa": "MatteHull",
-  "b2ffef01-eaaa-4ab5-aa64-95a2c4f5dbc6": "NeonPulse",
-  "f72ec0e7-a844-4e38-82e3-140c44772699": "OilPaint",
-  "c515dad7-4393-4681-81ad-162ef052241b": "OilPaintSingleSided",
-  "f1114e2e-eb8d-4fde-915a-6e653b54e9f5": "Paper",
-  "759f1ebd-20cd-4720-8d41-234e0da63716": "PaperSingleSided",
-  "e0abbc80-0f80-e854-4970-8924a0863dcc": "Petal",
-  "c33714d1-b2f9-412e-bd50-1884c9d46336": "Plasma",
-  "ad1ad437-76e2-450d-a23a-e17f8310b960": "Rainbow",
-  "faaa4d44-fcfb-4177-96be-753ac0421ba3": "ShinyHull",
-  "70d79cca-b159-4f35-990c-f02193947fe8": "Smoke",
-  "d902ed8b-d0d1-476c-a8de-878a79e3a34c": "Snow",
-  "accb32f5-4509-454f-93f8-1df3fd31df1b": "SoftHighlighter",
-  "cf7f0059-7aeb-53a4-2b67-c83d863a9ffa": "Spikes",
-  "8dc4a70c-d558-4efd-a5ed-d4e860f40dc3": "Splatter",
-  "7a1c8107-50c5-4b70-9a39-421576d6617e": "SplatterSingleSided",
-  "0eb4db27-3f82-408d-b5a1-19ebd7d5b711": "Stars",
-  "44bb800a-fbc3-4592-8426-94ecb05ddec3": "Streamers",
-  "0077f88c-d93a-42f3-b59b-b31c50cdb414": "Taffy",
-  "b468c1fb-f254-41ed-8ec9-57030bc5660c": "TaperedFlat",
-  "c8ccb53d-ae13-45ef-8afb-b730d81394eb": "TaperedFlatSingleSided",
-  "d90c6ad8-af0f-4b54-b422-e0f92abe1b3c": "TaperedMarker",
-  "1a26b8c0-8a07-4f8a-9fac-d2ef36e0cad0": "TaperedMarker_Flat",
-  "75b32cf0-fdd6-4d89-a64b-e2a00b247b0f": "ThickPaint",
-  "fdf0326a-c0d1-4fed-b101-9db0ff6d071f": "ThickPaintSingleSided",
-  "4391385a-df73-4396-9e33-31e4e4930b27": "Toon",
-  "a8fea537-da7c-4d4b-817f-24f074725d6d": "UnlitHull",
-  "d229d335-c334-495a-a801-660ac8a87360": "VelvetInk",
-  "10201aa3-ebc2-42d8-84b7-2e63f6eeb8ab": "Waveform",
-  "b67c0e81-ce6d-40a8-aeb0-ef036b081aa3": "WetPaint",
-  "dea67637-cd1a-27e4-c9b1-52f4bbcb84e5": "WetPaintSingleSided",
-  "5347acf0-a8e2-47b6-8346-30c70719d763": "WigglyGraphite",
-  "e814fef1-97fd-7194-4a2f-50c2bb918be2": "WigglyGraphiteSingleSided",
-  "4391385a-cf83-4396-9e33-31e4e4930b27": "Wire"
-};
-const common = {
-  colors: {
-    BloomColor: `
-			vec3 BloomColor(vec3 color, float gain) {
-				// Guarantee that there's at least a little bit of all 3 channels.
-				// This makes fully-saturated strokes (which only have 2 non-zero
-				// color channels) eventually clip to white rather than to a secondary.
-				float cmin = length(color.rgb) * .05;
-				color.rgb = max(color.rgb, vec3(cmin, cmin, cmin));
-				// If we try to remove this pow() from .a, it brightens up
-				// pressure-sensitive strokes; looks better as-is.
-				color = pow(color, vec3(2.2));
-				color.rgb *= 2. * exp(gain * 10.);
-				return color;
-			}
-		`,
-    LinearToSrgb: `
-			vec3 LinearToSrgb(vec3 color) {
-				// Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html
-				vec3 linearColor = color.rgb;
-				vec3 S1 = sqrt(linearColor);
-				vec3 S2 = sqrt(S1);
-				vec3 S3 = sqrt(S2);
-				color.rgb = 0.662002687 * S1 + 0.684122060 * S2 - 0.323583601 * S3 - 0.0225411470 * linearColor;
-				return color;
-			}
-		`,
-    hsv: `
-			// uniform sampler2D lookupTex;
-			vec4 lookup(vec4 textureColor) {
-				return textureColor;
-			}
-
-			vec3 lookup(vec3 textureColor) {
-				return textureColor;
-			}
-
-			vec3 hsv2rgb( vec3 hsv ) {
-				vec3 rgb = clamp( abs(mod(hsv.x*6.0+vec3(0.0,4.0,2.0),6.0)-3.0)-1.0, 0.0, 1.0 );
-				return hsv.z * mix( vec3(1.0), rgb, hsv.y);
-			}
-
-			vec3 rgb2hsv( vec3 rgb ) {
-				vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
-				vec4 p = mix(vec4(rgb.bg, K.wz), vec4(rgb.gb, K.xy), step(rgb.b, rgb.g));
-				vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));
-
-				float d = q.x - min(q.w, q.y);
-				float e = 1.0e-10;
-
-				return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
-			}
-		`,
-    SrgbToLinear: `
-			vec3 SrgbToLinear(vec3 color) {
-				// Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html
-				vec3 sRGB = color.rgb;
-				color.rgb = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878);
-				return color;
-			}
-		`
-  }
-};
-const shaders = () => ({
-  Light: {
-    uniforms: {
-      mainTex: {
-        value: /* @__PURE__ */ new three_module.TextureLoader().setPath("./textures/tiltbrush/").loader.load("Light.webp")
-      },
-      alphaTest: { value: 0.067 },
-      emission_gain: { value: 0.45 },
-      alpha: { value: 1 }
-    },
-    vertexShader: `
-			precision highp float;
-			precision highp int;
-
-			attribute vec2 uv;
-			attribute vec4 color;
-			attribute vec3 position;
-
-			uniform mat4 modelMatrix;
-			uniform mat4 modelViewMatrix;
-			uniform mat4 projectionMatrix;
-			uniform mat4 viewMatrix;
-			uniform mat3 normalMatrix;
-			uniform vec3 cameraPosition;
-
-			varying vec2 vUv;
-			varying vec3 vColor;
-
-			${common.colors.LinearToSrgb}
-			${common.colors.hsv}
-
-			void main() {
-
-				vUv = uv;
-
-				vColor = lookup(color.rgb);
-
-				vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );
-
-				gl_Position = projectionMatrix * mvPosition;
-
-			}
-		`,
-    fragmentShader: `
-			precision highp float;
-			precision highp int;
-
-			uniform float emission_gain;
-
-			uniform sampler2D mainTex;
-			uniform float alphaTest;
-
-			varying vec2 vUv;
-			varying vec3 vColor;
-
-			${common.colors.BloomColor}
-			${common.colors.SrgbToLinear}
-
-			void main(){
-				vec4 col = texture2D(mainTex, vUv);
-				vec3 color = vColor;
-				color = BloomColor(color, emission_gain);
-				color = color * col.rgb;
-				color = color * col.a;
-				color = SrgbToLinear(color);
-				gl_FragColor = vec4(color, 1.0);
-			}
-		`,
-    side: 2,
-    transparent: true,
-    depthFunc: 2,
-    depthWrite: true,
-    depthTest: false,
-    blending: 5,
-    blendDst: 201,
-    blendDstAlpha: 201,
-    blendEquation: 100,
-    blendEquationAlpha: 100,
-    blendSrc: 201,
-    blendSrcAlpha: 201
-  }
-});
-function getMaterial(GUID) {
-  const name = BRUSH_LIST_ARRAY[GUID];
-  switch (name) {
-    case "Light":
-      return new three_module.RawShaderMaterial(shaders().Light);
-    default:
-      return new three_module.MeshBasicMaterial({ vertexColors: true, side: three_module.DoubleSide });
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/loaders/DRACOLoader.js
-var DRACOLoader = __webpack_require__(44976);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/HDRCubeTextureLoader.js
-
-
-class HDRCubeTextureLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.hdrLoader = new RGBELoader/* RGBELoader */.x();
-    this.type = three_module.HalfFloatType;
-  }
-  load(urls, onLoad, onProgress, onError) {
-    if (!Array.isArray(urls)) {
-      console.warn("THREE.HDRCubeTextureLoader signature has changed. Use .setDataType() instead.");
-      this.setDataType(urls);
-      urls = onLoad;
-      onLoad = onProgress;
-      onProgress = onError;
-      onError = arguments[4];
-    }
-    const texture = new three_module.CubeTexture();
-    texture.type = this.type;
-    switch (texture.type) {
-      case three_module.FloatType:
-      case three_module.HalfFloatType:
-        if ("colorSpace" in texture)
-          texture.colorSpace = "srgb-linear";
-        else
-          texture.encoding = 3e3;
-        texture.minFilter = three_module.LinearFilter;
-        texture.magFilter = three_module.LinearFilter;
-        texture.generateMipmaps = false;
-        break;
-    }
-    const scope = this;
-    let loaded = 0;
-    function loadHDRData(i, onLoad2, onProgress2, onError2) {
-      new three_module.FileLoader(scope.manager).setPath(scope.path).setResponseType("arraybuffer").setWithCredentials(scope.withCredentials).load(
-        urls[i],
-        function(buffer) {
-          loaded++;
-          const texData = scope.hdrLoader.parse(buffer);
-          if (!texData)
-            return;
-          if (texData.data !== void 0) {
-            const dataTexture = new three_module.DataTexture(texData.data, texData.width, texData.height);
-            dataTexture.type = texture.type;
-            dataTexture.encoding = texture.encoding;
-            dataTexture.format = texture.format;
-            dataTexture.minFilter = texture.minFilter;
-            dataTexture.magFilter = texture.magFilter;
-            dataTexture.generateMipmaps = texture.generateMipmaps;
-            texture.images[i] = dataTexture;
-          }
-          if (loaded === 6) {
-            texture.needsUpdate = true;
-            if (onLoad2)
-              onLoad2(texture);
-          }
-        },
-        onProgress2,
-        onError2
-      );
-    }
-    for (let i = 0; i < urls.length; i++) {
-      loadHDRData(i, onLoad, onProgress, onError);
-    }
-    return texture;
-  }
-  setDataType(value) {
-    this.type = value;
-    this.hdrLoader.setDataType(value);
-    return this;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/PDBLoader.js
-
-class PDBLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  // Based on CanvasMol PDB parser
-  parse(text) {
-    function trim(text2) {
-      return text2.replace(/^\s\s*/, "").replace(/\s\s*$/, "");
-    }
-    function capitalize(text2) {
-      return text2.charAt(0).toUpperCase() + text2.substr(1).toLowerCase();
-    }
-    function hash(s, e) {
-      return "s" + Math.min(s, e) + "e" + Math.max(s, e);
-    }
-    function parseBond(start, length, satom, i) {
-      const eatom = parseInt(lines[i].substr(start, length));
-      if (eatom) {
-        const h = hash(satom, eatom);
-        if (_bhash[h] === void 0) {
-          _bonds.push([satom - 1, eatom - 1, 1]);
-          _bhash[h] = _bonds.length - 1;
-        } else {
-        }
-      }
-    }
-    function buildGeometry() {
-      const build = {
-        geometryAtoms: new three_module.BufferGeometry(),
-        geometryBonds: new three_module.BufferGeometry(),
-        json: {
-          atoms
-        }
-      };
-      const geometryAtoms = build.geometryAtoms;
-      const geometryBonds = build.geometryBonds;
-      const verticesAtoms = [];
-      const colorsAtoms = [];
-      const verticesBonds = [];
-      for (let i = 0, l = atoms.length; i < l; i++) {
-        const atom = atoms[i];
-        const x = atom[0];
-        const y = atom[1];
-        const z = atom[2];
-        verticesAtoms.push(x, y, z);
-        const r = atom[3][0] / 255;
-        const g = atom[3][1] / 255;
-        const b = atom[3][2] / 255;
-        colorsAtoms.push(r, g, b);
-      }
-      for (let i = 0, l = _bonds.length; i < l; i++) {
-        const bond = _bonds[i];
-        const start = bond[0];
-        const end = bond[1];
-        const startAtom = _atomMap[start];
-        const endAtom = _atomMap[end];
-        let x = startAtom[0];
-        let y = startAtom[1];
-        let z = startAtom[2];
-        verticesBonds.push(x, y, z);
-        x = endAtom[0];
-        y = endAtom[1];
-        z = endAtom[2];
-        verticesBonds.push(x, y, z);
-      }
-      geometryAtoms.setAttribute("position", new three_module.Float32BufferAttribute(verticesAtoms, 3));
-      geometryAtoms.setAttribute("color", new three_module.Float32BufferAttribute(colorsAtoms, 3));
-      geometryBonds.setAttribute("position", new three_module.Float32BufferAttribute(verticesBonds, 3));
-      return build;
-    }
-    const CPK = {
-      h: [255, 255, 255],
-      he: [217, 255, 255],
-      li: [204, 128, 255],
-      be: [194, 255, 0],
-      b: [255, 181, 181],
-      c: [144, 144, 144],
-      n: [48, 80, 248],
-      o: [255, 13, 13],
-      f: [144, 224, 80],
-      ne: [179, 227, 245],
-      na: [171, 92, 242],
-      mg: [138, 255, 0],
-      al: [191, 166, 166],
-      si: [240, 200, 160],
-      p: [255, 128, 0],
-      s: [255, 255, 48],
-      cl: [31, 240, 31],
-      ar: [128, 209, 227],
-      k: [143, 64, 212],
-      ca: [61, 255, 0],
-      sc: [230, 230, 230],
-      ti: [191, 194, 199],
-      v: [166, 166, 171],
-      cr: [138, 153, 199],
-      mn: [156, 122, 199],
-      fe: [224, 102, 51],
-      co: [240, 144, 160],
-      ni: [80, 208, 80],
-      cu: [200, 128, 51],
-      zn: [125, 128, 176],
-      ga: [194, 143, 143],
-      ge: [102, 143, 143],
-      as: [189, 128, 227],
-      se: [255, 161, 0],
-      br: [166, 41, 41],
-      kr: [92, 184, 209],
-      rb: [112, 46, 176],
-      sr: [0, 255, 0],
-      y: [148, 255, 255],
-      zr: [148, 224, 224],
-      nb: [115, 194, 201],
-      mo: [84, 181, 181],
-      tc: [59, 158, 158],
-      ru: [36, 143, 143],
-      rh: [10, 125, 140],
-      pd: [0, 105, 133],
-      ag: [192, 192, 192],
-      cd: [255, 217, 143],
-      in: [166, 117, 115],
-      sn: [102, 128, 128],
-      sb: [158, 99, 181],
-      te: [212, 122, 0],
-      i: [148, 0, 148],
-      xe: [66, 158, 176],
-      cs: [87, 23, 143],
-      ba: [0, 201, 0],
-      la: [112, 212, 255],
-      ce: [255, 255, 199],
-      pr: [217, 255, 199],
-      nd: [199, 255, 199],
-      pm: [163, 255, 199],
-      sm: [143, 255, 199],
-      eu: [97, 255, 199],
-      gd: [69, 255, 199],
-      tb: [48, 255, 199],
-      dy: [31, 255, 199],
-      ho: [0, 255, 156],
-      er: [0, 230, 117],
-      tm: [0, 212, 82],
-      yb: [0, 191, 56],
-      lu: [0, 171, 36],
-      hf: [77, 194, 255],
-      ta: [77, 166, 255],
-      w: [33, 148, 214],
-      re: [38, 125, 171],
-      os: [38, 102, 150],
-      ir: [23, 84, 135],
-      pt: [208, 208, 224],
-      au: [255, 209, 35],
-      hg: [184, 184, 208],
-      tl: [166, 84, 77],
-      pb: [87, 89, 97],
-      bi: [158, 79, 181],
-      po: [171, 92, 0],
-      at: [117, 79, 69],
-      rn: [66, 130, 150],
-      fr: [66, 0, 102],
-      ra: [0, 125, 0],
-      ac: [112, 171, 250],
-      th: [0, 186, 255],
-      pa: [0, 161, 255],
-      u: [0, 143, 255],
-      np: [0, 128, 255],
-      pu: [0, 107, 255],
-      am: [84, 92, 242],
-      cm: [120, 92, 227],
-      bk: [138, 79, 227],
-      cf: [161, 54, 212],
-      es: [179, 31, 212],
-      fm: [179, 31, 186],
-      md: [179, 13, 166],
-      no: [189, 13, 135],
-      lr: [199, 0, 102],
-      rf: [204, 0, 89],
-      db: [209, 0, 79],
-      sg: [217, 0, 69],
-      bh: [224, 0, 56],
-      hs: [230, 0, 46],
-      mt: [235, 0, 38],
-      ds: [235, 0, 38],
-      rg: [235, 0, 38],
-      cn: [235, 0, 38],
-      uut: [235, 0, 38],
-      uuq: [235, 0, 38],
-      uup: [235, 0, 38],
-      uuh: [235, 0, 38],
-      uus: [235, 0, 38],
-      uuo: [235, 0, 38]
-    };
-    const atoms = [];
-    const _bonds = [];
-    const _bhash = {};
-    const _atomMap = {};
-    const lines = text.split("\n");
-    for (let i = 0, l = lines.length; i < l; i++) {
-      if (lines[i].substr(0, 4) === "ATOM" || lines[i].substr(0, 6) === "HETATM") {
-        const x = parseFloat(lines[i].substr(30, 7));
-        const y = parseFloat(lines[i].substr(38, 7));
-        const z = parseFloat(lines[i].substr(46, 7));
-        const index = parseInt(lines[i].substr(6, 5)) - 1;
-        let e = trim(lines[i].substr(76, 2)).toLowerCase();
-        if (e === "") {
-          e = trim(lines[i].substr(12, 2)).toLowerCase();
-        }
-        const atomData = [x, y, z, CPK[e], capitalize(e)];
-        atoms.push(atomData);
-        _atomMap[index] = atomData;
-      } else if (lines[i].substr(0, 6) === "CONECT") {
-        const satom = parseInt(lines[i].substr(6, 5));
-        parseBond(11, 5, satom, i);
-        parseBond(16, 5, satom, i);
-        parseBond(21, 5, satom, i);
-        parseBond(26, 5, satom, i);
-      }
-    }
-    return buildGeometry();
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/PRWMLoader.js
-
-let bigEndianPlatform = null;
-function isBigEndianPlatform() {
-  if (bigEndianPlatform === null) {
-    const buffer = new ArrayBuffer(2), uint8Array = new Uint8Array(buffer), uint16Array = new Uint16Array(buffer);
-    uint8Array[0] = 170;
-    uint8Array[1] = 187;
-    bigEndianPlatform = uint16Array[0] === 43707;
-  }
-  return bigEndianPlatform;
-}
-const InvertedEncodingTypes = [
-  null,
-  Float32Array,
-  null,
-  Int8Array,
-  Int16Array,
-  null,
-  Int32Array,
-  Uint8Array,
-  Uint16Array,
-  null,
-  Uint32Array
-];
-const getMethods = {
-  Uint16Array: "getUint16",
-  Uint32Array: "getUint32",
-  Int16Array: "getInt16",
-  Int32Array: "getInt32",
-  Float32Array: "getFloat32",
-  Float64Array: "getFloat64"
-};
-function copyFromBuffer(sourceArrayBuffer, viewType, position, length, fromBigEndian) {
-  const bytesPerElement = viewType.BYTES_PER_ELEMENT;
-  let result;
-  if (fromBigEndian === isBigEndianPlatform() || bytesPerElement === 1) {
-    result = new viewType(sourceArrayBuffer, position, length);
-  } else {
-    const readView = new DataView(sourceArrayBuffer, position, length * bytesPerElement), getMethod = getMethods[viewType.name], littleEndian = !fromBigEndian;
-    result = new viewType(length);
-    for (let i = 0; i < length; i++) {
-      result[i] = readView[getMethod](i * bytesPerElement, littleEndian);
-    }
-  }
-  return result;
-}
-function decodePrwm(buffer) {
-  const array = new Uint8Array(buffer), version = array[0];
-  let flags = array[1];
-  const indexedGeometry = !!(flags >> 7 & 1), indicesType = flags >> 6 & 1, bigEndian = (flags >> 5 & 1) === 1, attributesNumber = flags & 31;
-  let valuesNumber = 0, indicesNumber = 0;
-  if (bigEndian) {
-    valuesNumber = (array[2] << 16) + (array[3] << 8) + array[4];
-    indicesNumber = (array[5] << 16) + (array[6] << 8) + array[7];
-  } else {
-    valuesNumber = array[2] + (array[3] << 8) + (array[4] << 16);
-    indicesNumber = array[5] + (array[6] << 8) + (array[7] << 16);
-  }
-  if (version === 0) {
-    throw new Error("PRWM decoder: Invalid format version: 0");
-  } else if (version !== 1) {
-    throw new Error("PRWM decoder: Unsupported format version: " + version);
-  }
-  if (!indexedGeometry) {
-    if (indicesType !== 0) {
-      throw new Error("PRWM decoder: Indices type must be set to 0 for non-indexed geometries");
-    } else if (indicesNumber !== 0) {
-      throw new Error("PRWM decoder: Number of indices must be set to 0 for non-indexed geometries");
-    }
-  }
-  let pos = 8;
-  const attributes = {};
-  for (let i = 0; i < attributesNumber; i++) {
-    let attributeName = "";
-    while (pos < array.length) {
-      const char = array[pos];
-      pos++;
-      if (char === 0) {
-        break;
-      } else {
-        attributeName += String.fromCharCode(char);
-      }
-    }
-    flags = array[pos];
-    const attributeType = flags >> 7 & 1;
-    const cardinality = (flags >> 4 & 3) + 1;
-    const encodingType = flags & 15;
-    const arrayType = InvertedEncodingTypes[encodingType];
-    pos++;
-    pos = Math.ceil(pos / 4) * 4;
-    const values = copyFromBuffer(buffer, arrayType, pos, cardinality * valuesNumber, bigEndian);
-    pos += arrayType.BYTES_PER_ELEMENT * cardinality * valuesNumber;
-    attributes[attributeName] = {
-      type: attributeType,
-      cardinality,
-      values
-    };
-  }
-  pos = Math.ceil(pos / 4) * 4;
-  let indices = null;
-  if (indexedGeometry) {
-    indices = copyFromBuffer(buffer, indicesType === 1 ? Uint32Array : Uint16Array, pos, indicesNumber, bigEndian);
-  }
-  return {
-    version,
-    attributes,
-    indices
-  };
-}
-class PRWMLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    url = url.replace(/\*/g, isBigEndianPlatform() ? "be" : "le");
-    loader.load(
-      url,
-      function(arrayBuffer) {
-        try {
-          onLoad(scope.parse(arrayBuffer));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(arrayBuffer) {
-    const data = decodePrwm(arrayBuffer), attributesKey = Object.keys(data.attributes), bufferGeometry = new three_module.BufferGeometry();
-    for (let i = 0; i < attributesKey.length; i++) {
-      const attribute = data.attributes[attributesKey[i]];
-      bufferGeometry.setAttribute(
-        attributesKey[i],
-        new three_module.BufferAttribute(attribute.values, attribute.cardinality, attribute.normalized)
-      );
-    }
-    if (data.indices !== null) {
-      bufferGeometry.setIndex(new three_module.BufferAttribute(data.indices, 1));
-    }
-    return bufferGeometry;
-  }
-  static isBigEndianPlatform() {
-    return isBigEndianPlatform();
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/RGBMLoader.js
-
-let UPNG;
-function RGBMLoader_init() {
-  if (UPNG)
-    return UPNG;
-  UPNG = {};
-  UPNG.toRGBA8 = function(out) {
-    var w = out.width, h = out.height;
-    if (out.tabs.acTL == null)
-      return [UPNG.toRGBA8.decodeImage(out.data, w, h, out).buffer];
-    var frms = [];
-    if (out.frames[0].data == null)
-      out.frames[0].data = out.data;
-    var len = w * h * 4, img = new Uint8Array(len), empty = new Uint8Array(len), prev = new Uint8Array(len);
-    for (var i = 0; i < out.frames.length; i++) {
-      var frm = out.frames[i];
-      var fx = frm.rect.x, fy = frm.rect.y, fw = frm.rect.width, fh = frm.rect.height;
-      var fdata = UPNG.toRGBA8.decodeImage(frm.data, fw, fh, out);
-      if (i != 0)
-        for (var j = 0; j < len; j++)
-          prev[j] = img[j];
-      if (frm.blend == 0)
-        UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 0);
-      else if (frm.blend == 1)
-        UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 1);
-      frms.push(img.buffer.slice(0));
-      if (frm.dispose == 1)
-        UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0);
-      else if (frm.dispose == 2)
-        for (var j = 0; j < len; j++)
-          img[j] = prev[j];
-    }
-    return frms;
-  };
-  UPNG.toRGBA8.decodeImage = function(data, w, h, out) {
-    var area = w * h, bpp = UPNG.decode._getBPP(out);
-    var bpl = Math.ceil(w * bpp / 8);
-    var bf = new Uint8Array(area * 4), bf32 = new Uint32Array(bf.buffer);
-    var ctype = out.ctype, depth = out.depth;
-    var rs = UPNG._bin.readUshort;
-    if (ctype == 6) {
-      var qarea = area << 2;
-      if (depth == 8) {
-        for (var i = 0; i < qarea; i += 4) {
-          bf[i] = data[i];
-          bf[i + 1] = data[i + 1];
-          bf[i + 2] = data[i + 2];
-          bf[i + 3] = data[i + 3];
-        }
-      }
-      if (depth == 16) {
-        for (var i = 0; i < qarea; i++) {
-          bf[i] = data[i << 1];
-        }
-      }
-    } else if (ctype == 2) {
-      var ts = out.tabs["tRNS"];
-      if (ts == null) {
-        if (depth == 8) {
-          for (var i = 0; i < area; i++) {
-            var ti = i * 3;
-            bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];
-          }
-        }
-        if (depth == 16) {
-          for (var i = 0; i < area; i++) {
-            var ti = i * 6;
-            bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];
-          }
-        }
-      } else {
-        var tr = ts[0], tg = ts[1], tb = ts[2];
-        if (depth == 8) {
-          for (var i = 0; i < area; i++) {
-            var qi = i << 2, ti = i * 3;
-            bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];
-            if (data[ti] == tr && data[ti + 1] == tg && data[ti + 2] == tb)
-              bf[qi + 3] = 0;
-          }
-        }
-        if (depth == 16) {
-          for (var i = 0; i < area; i++) {
-            var qi = i << 2, ti = i * 6;
-            bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];
-            if (rs(data, ti) == tr && rs(data, ti + 2) == tg && rs(data, ti + 4) == tb)
-              bf[qi + 3] = 0;
-          }
-        }
-      }
-    } else if (ctype == 3) {
-      var p = out.tabs["PLTE"], ap = out.tabs["tRNS"], tl = ap ? ap.length : 0;
-      if (depth == 1) {
-        for (var y = 0; y < h; y++) {
-          var s0 = y * bpl, t0 = y * w;
-          for (var i = 0; i < w; i++) {
-            var qi = t0 + i << 2, j = data[s0 + (i >> 3)] >> 7 - ((i & 7) << 0) & 1, cj = 3 * j;
-            bf[qi] = p[cj];
-            bf[qi + 1] = p[cj + 1];
-            bf[qi + 2] = p[cj + 2];
-            bf[qi + 3] = j < tl ? ap[j] : 255;
-          }
-        }
-      }
-      if (depth == 2) {
-        for (var y = 0; y < h; y++) {
-          var s0 = y * bpl, t0 = y * w;
-          for (var i = 0; i < w; i++) {
-            var qi = t0 + i << 2, j = data[s0 + (i >> 2)] >> 6 - ((i & 3) << 1) & 3, cj = 3 * j;
-            bf[qi] = p[cj];
-            bf[qi + 1] = p[cj + 1];
-            bf[qi + 2] = p[cj + 2];
-            bf[qi + 3] = j < tl ? ap[j] : 255;
-          }
-        }
-      }
-      if (depth == 4) {
-        for (var y = 0; y < h; y++) {
-          var s0 = y * bpl, t0 = y * w;
-          for (var i = 0; i < w; i++) {
-            var qi = t0 + i << 2, j = data[s0 + (i >> 1)] >> 4 - ((i & 1) << 2) & 15, cj = 3 * j;
-            bf[qi] = p[cj];
-            bf[qi + 1] = p[cj + 1];
-            bf[qi + 2] = p[cj + 2];
-            bf[qi + 3] = j < tl ? ap[j] : 255;
-          }
-        }
-      }
-      if (depth == 8) {
-        for (var i = 0; i < area; i++) {
-          var qi = i << 2, j = data[i], cj = 3 * j;
-          bf[qi] = p[cj];
-          bf[qi + 1] = p[cj + 1];
-          bf[qi + 2] = p[cj + 2];
-          bf[qi + 3] = j < tl ? ap[j] : 255;
-        }
-      }
-    } else if (ctype == 4) {
-      if (depth == 8) {
-        for (var i = 0; i < area; i++) {
-          var qi = i << 2, di = i << 1, gr = data[di];
-          bf[qi] = gr;
-          bf[qi + 1] = gr;
-          bf[qi + 2] = gr;
-          bf[qi + 3] = data[di + 1];
-        }
-      }
-      if (depth == 16) {
-        for (var i = 0; i < area; i++) {
-          var qi = i << 2, di = i << 2, gr = data[di];
-          bf[qi] = gr;
-          bf[qi + 1] = gr;
-          bf[qi + 2] = gr;
-          bf[qi + 3] = data[di + 2];
-        }
-      }
-    } else if (ctype == 0) {
-      var tr = out.tabs["tRNS"] ? out.tabs["tRNS"] : -1;
-      for (var y = 0; y < h; y++) {
-        var off = y * bpl, to = y * w;
-        if (depth == 1) {
-          for (var x = 0; x < w; x++) {
-            var gr = 255 * (data[off + (x >>> 3)] >>> 7 - (x & 7) & 1), al = gr == tr * 255 ? 0 : 255;
-            bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
-          }
-        } else if (depth == 2) {
-          for (var x = 0; x < w; x++) {
-            var gr = 85 * (data[off + (x >>> 2)] >>> 6 - ((x & 3) << 1) & 3), al = gr == tr * 85 ? 0 : 255;
-            bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
-          }
-        } else if (depth == 4) {
-          for (var x = 0; x < w; x++) {
-            var gr = 17 * (data[off + (x >>> 1)] >>> 4 - ((x & 1) << 2) & 15), al = gr == tr * 17 ? 0 : 255;
-            bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
-          }
-        } else if (depth == 8) {
-          for (var x = 0; x < w; x++) {
-            var gr = data[off + x], al = gr == tr ? 0 : 255;
-            bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
-          }
-        } else if (depth == 16) {
-          for (var x = 0; x < w; x++) {
-            var gr = data[off + (x << 1)], al = rs(data, off + (x << 1)) == tr ? 0 : 255;
-            bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;
-          }
-        }
-      }
-    }
-    return bf;
-  };
-  UPNG.decode = function(buff) {
-    var data = new Uint8Array(buff), offset = 8, bin = UPNG._bin, rUs = bin.readUshort, rUi = bin.readUint;
-    var out = { tabs: {}, frames: [] };
-    var dd = new Uint8Array(data.length), doff = 0;
-    var fd, foff = 0;
-    var text, keyw, bfr;
-    var mgck = [137, 80, 78, 71, 13, 10, 26, 10];
-    for (var i = 0; i < 8; i++)
-      if (data[i] != mgck[i])
-        throw new Error("The input is not a PNG file!");
-    while (offset < data.length) {
-      var len = bin.readUint(data, offset);
-      offset += 4;
-      var type = bin.readASCII(data, offset, 4);
-      offset += 4;
-      if (type == "IHDR") {
-        UPNG.decode._IHDR(data, offset, out);
-      } else if (type == "CgBI") {
-        out.tabs[type] = data.slice(offset, offset + 4);
-      } else if (type == "IDAT") {
-        for (var i = 0; i < len; i++)
-          dd[doff + i] = data[offset + i];
-        doff += len;
-      } else if (type == "acTL") {
-        out.tabs[type] = { num_frames: rUi(data, offset), num_plays: rUi(data, offset + 4) };
-        fd = new Uint8Array(data.length);
-      } else if (type == "fcTL") {
-        if (foff != 0) {
-          var fr = out.frames[out.frames.length - 1];
-          fr.data = UPNG.decode._decompress(out, fd.slice(0, foff), fr.rect.width, fr.rect.height);
-          foff = 0;
-        }
-        var rct = {
-          x: rUi(data, offset + 12),
-          y: rUi(data, offset + 16),
-          width: rUi(data, offset + 4),
-          height: rUi(data, offset + 8)
-        };
-        var del = rUs(data, offset + 22);
-        del = rUs(data, offset + 20) / (del == 0 ? 100 : del);
-        var frm = { rect: rct, delay: Math.round(del * 1e3), dispose: data[offset + 24], blend: data[offset + 25] };
-        out.frames.push(frm);
-      } else if (type == "fdAT") {
-        for (var i = 0; i < len - 4; i++)
-          fd[foff + i] = data[offset + i + 4];
-        foff += len - 4;
-      } else if (type == "pHYs") {
-        out.tabs[type] = [bin.readUint(data, offset), bin.readUint(data, offset + 4), data[offset + 8]];
-      } else if (type == "cHRM") {
-        out.tabs[type] = [];
-        for (var i = 0; i < 8; i++)
-          out.tabs[type].push(bin.readUint(data, offset + i * 4));
-      } else if (type == "tEXt" || type == "zTXt") {
-        if (out.tabs[type] == null)
-          out.tabs[type] = {};
-        var nz = bin.nextZero(data, offset);
-        keyw = bin.readASCII(data, offset, nz - offset);
-        var tl = offset + len - nz - 1;
-        if (type == "tEXt") {
-          text = bin.readASCII(data, nz + 1, tl);
-        } else {
-          bfr = UPNG.decode._inflate(data.slice(nz + 2, nz + 2 + tl));
-          text = bin.readUTF8(bfr, 0, bfr.length);
-        }
-        out.tabs[type][keyw] = text;
-      } else if (type == "iTXt") {
-        if (out.tabs[type] == null)
-          out.tabs[type] = {};
-        var nz = 0, off = offset;
-        nz = bin.nextZero(data, off);
-        keyw = bin.readASCII(data, off, nz - off);
-        off = nz + 1;
-        var cflag = data[off];
-        off += 2;
-        nz = bin.nextZero(data, off);
-        bin.readASCII(data, off, nz - off);
-        off = nz + 1;
-        nz = bin.nextZero(data, off);
-        bin.readUTF8(data, off, nz - off);
-        off = nz + 1;
-        var tl = len - (off - offset);
-        if (cflag == 0) {
-          text = bin.readUTF8(data, off, tl);
-        } else {
-          bfr = UPNG.decode._inflate(data.slice(off, off + tl));
-          text = bin.readUTF8(bfr, 0, bfr.length);
-        }
-        out.tabs[type][keyw] = text;
-      } else if (type == "PLTE") {
-        out.tabs[type] = bin.readBytes(data, offset, len);
-      } else if (type == "hIST") {
-        var pl = out.tabs["PLTE"].length / 3;
-        out.tabs[type] = [];
-        for (var i = 0; i < pl; i++)
-          out.tabs[type].push(rUs(data, offset + i * 2));
-      } else if (type == "tRNS") {
-        if (out.ctype == 3)
-          out.tabs[type] = bin.readBytes(data, offset, len);
-        else if (out.ctype == 0)
-          out.tabs[type] = rUs(data, offset);
-        else if (out.ctype == 2)
-          out.tabs[type] = [rUs(data, offset), rUs(data, offset + 2), rUs(data, offset + 4)];
-      } else if (type == "gAMA") {
-        out.tabs[type] = bin.readUint(data, offset) / 1e5;
-      } else if (type == "sRGB") {
-        out.tabs[type] = data[offset];
-      } else if (type == "bKGD") {
-        if (out.ctype == 0 || out.ctype == 4) {
-          out.tabs[type] = [rUs(data, offset)];
-        } else if (out.ctype == 2 || out.ctype == 6) {
-          out.tabs[type] = [rUs(data, offset), rUs(data, offset + 2), rUs(data, offset + 4)];
-        } else if (out.ctype == 3) {
-          out.tabs[type] = data[offset];
-        }
-      } else if (type == "IEND") {
-        break;
-      }
-      offset += len;
-      bin.readUint(data, offset);
-      offset += 4;
-    }
-    if (foff != 0) {
-      var fr = out.frames[out.frames.length - 1];
-      fr.data = UPNG.decode._decompress(out, fd.slice(0, foff), fr.rect.width, fr.rect.height);
-    }
-    out.data = UPNG.decode._decompress(out, dd, out.width, out.height);
-    delete out.compress;
-    delete out.interlace;
-    delete out.filter;
-    return out;
-  };
-  UPNG.decode._decompress = function(out, dd, w, h) {
-    var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w * bpp / 8), buff = new Uint8Array((bpl + 1 + out.interlace) * h);
-    if (out.tabs["CgBI"])
-      dd = UPNG.inflateRaw(dd, buff);
-    else
-      dd = UPNG.decode._inflate(dd, buff);
-    if (out.interlace == 0)
-      dd = UPNG.decode._filterZero(dd, out, 0, w, h);
-    else if (out.interlace == 1)
-      dd = UPNG.decode._readInterlace(dd, out);
-    return dd;
-  };
-  UPNG.decode._inflate = function(data, buff) {
-    var out = UPNG["inflateRaw"](new Uint8Array(data.buffer, 2, data.length - 6), buff);
-    return out;
-  };
-  UPNG.inflateRaw = function() {
-    var H = {};
-    H.H = {};
-    H.H.N = function(N, W) {
-      var R = Uint8Array, i = 0, m = 0, J = 0, h = 0, Q = 0, X = 0, u = 0, w = 0, d = 0, v, C;
-      if (N[0] == 3 && N[1] == 0)
-        return W ? W : new R(0);
-      var V = H.H, n = V.b, A = V.e, l = V.R, M = V.n, I = V.A, e = V.Z, b = V.m, Z = W == null;
-      if (Z)
-        W = new R(N.length >>> 2 << 5);
-      while (i == 0) {
-        i = n(N, d, 1);
-        m = n(N, d + 1, 2);
-        d += 3;
-        if (m == 0) {
-          if ((d & 7) != 0)
-            d += 8 - (d & 7);
-          var D = (d >>> 3) + 4, q = N[D - 4] | N[D - 3] << 8;
-          if (Z)
-            W = H.H.W(W, w + q);
-          W.set(new R(N.buffer, N.byteOffset + D, q), w);
-          d = D + q << 3;
-          w += q;
-          continue;
-        }
-        if (Z)
-          W = H.H.W(W, w + (1 << 17));
-        if (m == 1) {
-          v = b.J;
-          C = b.h;
-          X = (1 << 9) - 1;
-          u = (1 << 5) - 1;
-        }
-        if (m == 2) {
-          J = A(N, d, 5) + 257;
-          h = A(N, d + 5, 5) + 1;
-          Q = A(N, d + 10, 4) + 4;
-          d += 14;
-          var j = 1;
-          for (var c = 0; c < 38; c += 2) {
-            b.Q[c] = 0;
-            b.Q[c + 1] = 0;
-          }
-          for (var c = 0; c < Q; c++) {
-            var K = A(N, d + c * 3, 3);
-            b.Q[(b.X[c] << 1) + 1] = K;
-            if (K > j)
-              j = K;
-          }
-          d += 3 * Q;
-          M(b.Q, j);
-          I(b.Q, j, b.u);
-          v = b.w;
-          C = b.d;
-          d = l(b.u, (1 << j) - 1, J + h, N, d, b.v);
-          var r = V.V(b.v, 0, J, b.C);
-          X = (1 << r) - 1;
-          var S = V.V(b.v, J, h, b.D);
-          u = (1 << S) - 1;
-          M(b.C, r);
-          I(b.C, r, v);
-          M(b.D, S);
-          I(b.D, S, C);
-        }
-        while (true) {
-          var T = v[e(N, d) & X];
-          d += T & 15;
-          var p = T >>> 4;
-          if (p >>> 8 == 0) {
-            W[w++] = p;
-          } else if (p == 256) {
-            break;
-          } else {
-            var z = w + p - 254;
-            if (p > 264) {
-              var _ = b.q[p - 257];
-              z = w + (_ >>> 3) + A(N, d, _ & 7);
-              d += _ & 7;
-            }
-            var $ = C[e(N, d) & u];
-            d += $ & 15;
-            var s = $ >>> 4, Y = b.c[s], a = (Y >>> 4) + n(N, d, Y & 15);
-            d += Y & 15;
-            while (w < z) {
-              W[w] = W[w++ - a];
-              W[w] = W[w++ - a];
-              W[w] = W[w++ - a];
-              W[w] = W[w++ - a];
-            }
-            w = z;
-          }
-        }
-      }
-      return W.length == w ? W : W.slice(0, w);
-    };
-    H.H.W = function(N, W) {
-      var R = N.length;
-      if (W <= R)
-        return N;
-      var V = new Uint8Array(R << 1);
-      V.set(N, 0);
-      return V;
-    };
-    H.H.R = function(N, W, R, V, n, A) {
-      var l = H.H.e, M = H.H.Z, I = 0;
-      while (I < R) {
-        var e = N[M(V, n) & W];
-        n += e & 15;
-        var b = e >>> 4;
-        if (b <= 15) {
-          A[I] = b;
-          I++;
-        } else {
-          var Z = 0, m = 0;
-          if (b == 16) {
-            m = 3 + l(V, n, 2);
-            n += 2;
-            Z = A[I - 1];
-          } else if (b == 17) {
-            m = 3 + l(V, n, 3);
-            n += 3;
-          } else if (b == 18) {
-            m = 11 + l(V, n, 7);
-            n += 7;
-          }
-          var J = I + m;
-          while (I < J) {
-            A[I] = Z;
-            I++;
-          }
-        }
-      }
-      return n;
-    };
-    H.H.V = function(N, W, R, V) {
-      var n = 0, A = 0, l = V.length >>> 1;
-      while (A < R) {
-        var M = N[A + W];
-        V[A << 1] = 0;
-        V[(A << 1) + 1] = M;
-        if (M > n)
-          n = M;
-        A++;
-      }
-      while (A < l) {
-        V[A << 1] = 0;
-        V[(A << 1) + 1] = 0;
-        A++;
-      }
-      return n;
-    };
-    H.H.n = function(N, W) {
-      var R = H.H.m, V = N.length, n, A, l, M, I, e = R.j;
-      for (var M = 0; M <= W; M++)
-        e[M] = 0;
-      for (M = 1; M < V; M += 2)
-        e[N[M]]++;
-      var b = R.K;
-      n = 0;
-      e[0] = 0;
-      for (A = 1; A <= W; A++) {
-        n = n + e[A - 1] << 1;
-        b[A] = n;
-      }
-      for (l = 0; l < V; l += 2) {
-        I = N[l + 1];
-        if (I != 0) {
-          N[l] = b[I];
-          b[I]++;
-        }
-      }
-    };
-    H.H.A = function(N, W, R) {
-      var V = N.length, n = H.H.m, A = n.r;
-      for (var l = 0; l < V; l += 2) {
-        if (N[l + 1] != 0) {
-          var M = l >> 1, I = N[l + 1], e = M << 4 | I, b = W - I, Z = N[l] << b, m = Z + (1 << b);
-          while (Z != m) {
-            var J = A[Z] >>> 15 - W;
-            R[J] = e;
-            Z++;
-          }
-        }
-      }
-    };
-    H.H.l = function(N, W) {
-      var R = H.H.m.r, V = 15 - W;
-      for (var n = 0; n < N.length; n += 2) {
-        var A = N[n] << W - N[n + 1];
-        N[n] = R[A] >>> V;
-      }
-    };
-    H.H.M = function(N, W, R) {
-      R = R << (W & 7);
-      var V = W >>> 3;
-      N[V] |= R;
-      N[V + 1] |= R >>> 8;
-    };
-    H.H.I = function(N, W, R) {
-      R = R << (W & 7);
-      var V = W >>> 3;
-      N[V] |= R;
-      N[V + 1] |= R >>> 8;
-      N[V + 2] |= R >>> 16;
-    };
-    H.H.e = function(N, W, R) {
-      return (N[W >>> 3] | N[(W >>> 3) + 1] << 8) >>> (W & 7) & (1 << R) - 1;
-    };
-    H.H.b = function(N, W, R) {
-      return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7) & (1 << R) - 1;
-    };
-    H.H.Z = function(N, W) {
-      return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7);
-    };
-    H.H.i = function(N, W) {
-      return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16 | N[(W >>> 3) + 3] << 24) >>> (W & 7);
-    };
-    H.H.m = function() {
-      var N = Uint16Array, W = Uint32Array;
-      return {
-        K: new N(16),
-        j: new N(16),
-        X: [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],
-        S: [
-          3,
-          4,
-          5,
-          6,
-          7,
-          8,
-          9,
-          10,
-          11,
-          13,
-          15,
-          17,
-          19,
-          23,
-          27,
-          31,
-          35,
-          43,
-          51,
-          59,
-          67,
-          83,
-          99,
-          115,
-          131,
-          163,
-          195,
-          227,
-          258,
-          999,
-          999,
-          999
-        ],
-        T: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0],
-        q: new N(32),
-        p: [
-          1,
-          2,
-          3,
-          4,
-          5,
-          7,
-          9,
-          13,
-          17,
-          25,
-          33,
-          49,
-          65,
-          97,
-          129,
-          193,
-          257,
-          385,
-          513,
-          769,
-          1025,
-          1537,
-          2049,
-          3073,
-          4097,
-          6145,
-          8193,
-          12289,
-          16385,
-          24577,
-          65535,
-          65535
-        ],
-        z: [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0],
-        c: new W(32),
-        J: new N(512),
-        _: [],
-        h: new N(32),
-        $: [],
-        w: new N(32768),
-        C: [],
-        v: [],
-        d: new N(32768),
-        D: [],
-        u: new N(512),
-        Q: [],
-        r: new N(1 << 15),
-        s: new W(286),
-        Y: new W(30),
-        a: new W(19),
-        t: new W(15e3),
-        k: new N(1 << 16),
-        g: new N(1 << 15)
-      };
-    }();
-    (function() {
-      var N = H.H.m, W = 1 << 15;
-      for (var R = 0; R < W; R++) {
-        var V = R;
-        V = (V & 2863311530) >>> 1 | (V & 1431655765) << 1;
-        V = (V & 3435973836) >>> 2 | (V & 858993459) << 2;
-        V = (V & 4042322160) >>> 4 | (V & 252645135) << 4;
-        V = (V & 4278255360) >>> 8 | (V & 16711935) << 8;
-        N.r[R] = (V >>> 16 | V << 16) >>> 17;
-      }
-      function n(A, l, M) {
-        while (l-- != 0)
-          A.push(0, M);
-      }
-      for (var R = 0; R < 32; R++) {
-        N.q[R] = N.S[R] << 3 | N.T[R];
-        N.c[R] = N.p[R] << 4 | N.z[R];
-      }
-      n(N._, 144, 8);
-      n(N._, 255 - 143, 9);
-      n(N._, 279 - 255, 7);
-      n(N._, 287 - 279, 8);
-      H.H.n(N._, 9);
-      H.H.A(N._, 9, N.J);
-      H.H.l(N._, 9);
-      n(N.$, 32, 5);
-      H.H.n(N.$, 5);
-      H.H.A(N.$, 5, N.h);
-      H.H.l(N.$, 5);
-      n(N.Q, 19, 0);
-      n(N.C, 286, 0);
-      n(N.D, 30, 0);
-      n(N.v, 320, 0);
-    })();
-    return H.H.N;
-  }();
-  UPNG.decode._readInterlace = function(data, out) {
-    var w = out.width, h = out.height;
-    var bpp = UPNG.decode._getBPP(out), cbpp = bpp >> 3, bpl = Math.ceil(w * bpp / 8);
-    var img = new Uint8Array(h * bpl);
-    var di = 0;
-    var starting_row = [0, 0, 4, 0, 2, 0, 1];
-    var starting_col = [0, 4, 0, 2, 0, 1, 0];
-    var row_increment = [8, 8, 8, 4, 4, 2, 2];
-    var col_increment = [8, 8, 4, 4, 2, 2, 1];
-    var pass = 0;
-    while (pass < 7) {
-      var ri = row_increment[pass], ci = col_increment[pass];
-      var sw = 0, sh = 0;
-      var cr = starting_row[pass];
-      while (cr < h) {
-        cr += ri;
-        sh++;
-      }
-      var cc = starting_col[pass];
-      while (cc < w) {
-        cc += ci;
-        sw++;
-      }
-      var bpll = Math.ceil(sw * bpp / 8);
-      UPNG.decode._filterZero(data, out, di, sw, sh);
-      var y = 0, row = starting_row[pass];
-      var val;
-      while (row < h) {
-        var col = starting_col[pass];
-        var cdi = di + y * bpll << 3;
-        while (col < w) {
-          if (bpp == 1) {
-            val = data[cdi >> 3];
-            val = val >> 7 - (cdi & 7) & 1;
-            img[row * bpl + (col >> 3)] |= val << 7 - ((col & 7) << 0);
-          }
-          if (bpp == 2) {
-            val = data[cdi >> 3];
-            val = val >> 6 - (cdi & 7) & 3;
-            img[row * bpl + (col >> 2)] |= val << 6 - ((col & 3) << 1);
-          }
-          if (bpp == 4) {
-            val = data[cdi >> 3];
-            val = val >> 4 - (cdi & 7) & 15;
-            img[row * bpl + (col >> 1)] |= val << 4 - ((col & 1) << 2);
-          }
-          if (bpp >= 8) {
-            var ii = row * bpl + col * cbpp;
-            for (var j = 0; j < cbpp; j++)
-              img[ii + j] = data[(cdi >> 3) + j];
-          }
-          cdi += bpp;
-          col += ci;
-        }
-        y++;
-        row += ri;
-      }
-      if (sw * sh != 0)
-        di += sh * (1 + bpll);
-      pass = pass + 1;
-    }
-    return img;
-  };
-  UPNG.decode._getBPP = function(out) {
-    var noc = [1, null, 3, 1, 2, null, 4][out.ctype];
-    return noc * out.depth;
-  };
-  UPNG.decode._filterZero = function(data, out, off, w, h) {
-    var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w * bpp / 8), paeth = UPNG.decode._paeth;
-    bpp = Math.ceil(bpp / 8);
-    var i, di, type = data[off], x = 0;
-    if (type > 1)
-      data[off] = [0, 0, 1][type - 2];
-    if (type == 3)
-      for (x = bpp; x < bpl; x++)
-        data[x + 1] = data[x + 1] + (data[x + 1 - bpp] >>> 1) & 255;
-    for (var y = 0; y < h; y++) {
-      i = off + y * bpl;
-      di = i + y + 1;
-      type = data[di - 1];
-      x = 0;
-      if (type == 0) {
-        for (; x < bpl; x++)
-          data[i + x] = data[di + x];
-      } else if (type == 1) {
-        for (; x < bpp; x++)
-          data[i + x] = data[di + x];
-        for (; x < bpl; x++)
-          data[i + x] = data[di + x] + data[i + x - bpp];
-      } else if (type == 2) {
-        for (; x < bpl; x++)
-          data[i + x] = data[di + x] + data[i + x - bpl];
-      } else if (type == 3) {
-        for (; x < bpp; x++)
-          data[i + x] = data[di + x] + (data[i + x - bpl] >>> 1);
-        for (; x < bpl; x++)
-          data[i + x] = data[di + x] + (data[i + x - bpl] + data[i + x - bpp] >>> 1);
-      } else {
-        for (; x < bpp; x++)
-          data[i + x] = data[di + x] + paeth(0, data[i + x - bpl], 0);
-        for (; x < bpl; x++) {
-          data[i + x] = data[di + x] + paeth(data[i + x - bpp], data[i + x - bpl], data[i + x - bpp - bpl]);
-        }
-      }
-    }
-    return data;
-  };
-  UPNG.decode._paeth = function(a, b, c) {
-    var p = a + b - c, pa = p - a, pb = p - b, pc = p - c;
-    if (pa * pa <= pb * pb && pa * pa <= pc * pc)
-      return a;
-    else if (pb * pb <= pc * pc)
-      return b;
-    return c;
-  };
-  UPNG.decode._IHDR = function(data, offset, out) {
-    var bin = UPNG._bin;
-    out.width = bin.readUint(data, offset);
-    offset += 4;
-    out.height = bin.readUint(data, offset);
-    offset += 4;
-    out.depth = data[offset];
-    offset++;
-    out.ctype = data[offset];
-    offset++;
-    out.compress = data[offset];
-    offset++;
-    out.filter = data[offset];
-    offset++;
-    out.interlace = data[offset];
-    offset++;
-  };
-  UPNG._bin = {
-    nextZero: function(data, p) {
-      while (data[p] != 0)
-        p++;
-      return p;
-    },
-    readUshort: function(buff, p) {
-      return buff[p] << 8 | buff[p + 1];
-    },
-    writeUshort: function(buff, p, n) {
-      buff[p] = n >> 8 & 255;
-      buff[p + 1] = n & 255;
-    },
-    readUint: function(buff, p) {
-      return buff[p] * (256 * 256 * 256) + (buff[p + 1] << 16 | buff[p + 2] << 8 | buff[p + 3]);
-    },
-    writeUint: function(buff, p, n) {
-      buff[p] = n >> 24 & 255;
-      buff[p + 1] = n >> 16 & 255;
-      buff[p + 2] = n >> 8 & 255;
-      buff[p + 3] = n & 255;
-    },
-    readASCII: function(buff, p, l) {
-      var s = "";
-      for (var i = 0; i < l; i++)
-        s += String.fromCharCode(buff[p + i]);
-      return s;
-    },
-    writeASCII: function(data, p, s) {
-      for (var i = 0; i < s.length; i++)
-        data[p + i] = s.charCodeAt(i);
-    },
-    readBytes: function(buff, p, l) {
-      var arr = [];
-      for (var i = 0; i < l; i++)
-        arr.push(buff[p + i]);
-      return arr;
-    },
-    pad: function(n) {
-      return n.length < 2 ? "0" + n : n;
-    },
-    readUTF8: function(buff, p, l) {
-      var s = "", ns;
-      for (var i = 0; i < l; i++)
-        s += "%" + UPNG._bin.pad(buff[p + i].toString(16));
-      try {
-        ns = decodeURIComponent(s);
-      } catch (e) {
-        return UPNG._bin.readASCII(buff, p, l);
-      }
-      return ns;
-    }
-  };
-  UPNG._copyTile = function(sb, sw, sh, tb, tw, th, xoff, yoff, mode) {
-    var w = Math.min(sw, tw), h = Math.min(sh, th);
-    var si = 0, ti = 0;
-    for (var y = 0; y < h; y++) {
-      for (var x = 0; x < w; x++) {
-        if (xoff >= 0 && yoff >= 0) {
-          si = y * sw + x << 2;
-          ti = (yoff + y) * tw + xoff + x << 2;
-        } else {
-          si = (-yoff + y) * sw - xoff + x << 2;
-          ti = y * tw + x << 2;
-        }
-        if (mode == 0) {
-          tb[ti] = sb[si];
-          tb[ti + 1] = sb[si + 1];
-          tb[ti + 2] = sb[si + 2];
-          tb[ti + 3] = sb[si + 3];
-        } else if (mode == 1) {
-          var fa = sb[si + 3] * (1 / 255), fr = sb[si] * fa, fg = sb[si + 1] * fa, fb = sb[si + 2] * fa;
-          var ba = tb[ti + 3] * (1 / 255), br = tb[ti] * ba, bg = tb[ti + 1] * ba, bb = tb[ti + 2] * ba;
-          var ifa = 1 - fa, oa = fa + ba * ifa, ioa = oa == 0 ? 0 : 1 / oa;
-          tb[ti + 3] = 255 * oa;
-          tb[ti + 0] = (fr + br * ifa) * ioa;
-          tb[ti + 1] = (fg + bg * ifa) * ioa;
-          tb[ti + 2] = (fb + bb * ifa) * ioa;
-        } else if (mode == 2) {
-          var fa = sb[si + 3], fr = sb[si], fg = sb[si + 1], fb = sb[si + 2];
-          var ba = tb[ti + 3], br = tb[ti], bg = tb[ti + 1], bb = tb[ti + 2];
-          if (fa == ba && fr == br && fg == bg && fb == bb) {
-            tb[ti] = 0;
-            tb[ti + 1] = 0;
-            tb[ti + 2] = 0;
-            tb[ti + 3] = 0;
-          } else {
-            tb[ti] = fr;
-            tb[ti + 1] = fg;
-            tb[ti + 2] = fb;
-            tb[ti + 3] = fa;
-          }
-        } else if (mode == 3) {
-          var fa = sb[si + 3], fr = sb[si], fg = sb[si + 1], fb = sb[si + 2];
-          var ba = tb[ti + 3], br = tb[ti], bg = tb[ti + 1], bb = tb[ti + 2];
-          if (fa == ba && fr == br && fg == bg && fb == bb)
-            continue;
-          if (fa < 220 && ba > 20)
-            return false;
-        }
-      }
-    }
-    return true;
-  };
-}
-class RGBMLoader extends three_module.DataTextureLoader {
-  constructor(manager) {
-    super(manager);
-    this.type = three_module.HalfFloatType;
-    this.maxRange = 7;
-  }
-  setDataType(value) {
-    this.type = value;
-    return this;
-  }
-  setMaxRange(value) {
-    this.maxRange = value;
-    return this;
-  }
-  loadCubemap(urls, onLoad, onProgress, onError) {
-    const texture = new three_module.CubeTexture();
-    let loaded = 0;
-    const scope = this;
-    function loadTexture(i) {
-      scope.load(
-        urls[i],
-        function(image) {
-          texture.images[i] = image;
-          loaded++;
-          if (loaded === 6) {
-            texture.needsUpdate = true;
-            if (onLoad)
-              onLoad(texture);
-          }
-        },
-        void 0,
-        onError
-      );
-    }
-    for (let i = 0; i < urls.length; ++i) {
-      loadTexture(i);
-    }
-    texture.type = this.type;
-    texture.format = three_module.RGBAFormat;
-    texture.minFilter = three_module.LinearFilter;
-    texture.generateMipmaps = false;
-    return texture;
-  }
-  parse(buffer) {
-    RGBMLoader_init();
-    const img = UPNG.decode(buffer);
-    const rgba = UPNG.toRGBA8(img)[0];
-    const data = new Uint8Array(rgba);
-    const size = img.width * img.height * 4;
-    const output = this.type === three_module.HalfFloatType ? new Uint16Array(size) : new Float32Array(size);
-    for (let i = 0; i < data.length; i += 4) {
-      const r = data[i + 0] / 255;
-      const g = data[i + 1] / 255;
-      const b = data[i + 2] / 255;
-      const a = data[i + 3] / 255;
-      if (this.type === three_module.HalfFloatType) {
-        output[i + 0] = three_module.DataUtils.toHalfFloat(Math.min(r * a * this.maxRange, 65504));
-        output[i + 1] = three_module.DataUtils.toHalfFloat(Math.min(g * a * this.maxRange, 65504));
-        output[i + 2] = three_module.DataUtils.toHalfFloat(Math.min(b * a * this.maxRange, 65504));
-        output[i + 3] = three_module.DataUtils.toHalfFloat(1);
-      } else {
-        output[i + 0] = r * a * this.maxRange;
-        output[i + 1] = g * a * this.maxRange;
-        output[i + 2] = b * a * this.maxRange;
-        output[i + 3] = 1;
-      }
-    }
-    return {
-      width: img.width,
-      height: img.height,
-      data: output,
-      format: three_module.RGBAFormat,
-      type: this.type,
-      flipY: true
-    };
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/VOXLoader.js
-
-
-class VOXLoader extends three_module.Loader {
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(scope.requestHeader);
-    loader.load(
-      url,
-      function(buffer) {
-        try {
-          onLoad(scope.parse(buffer));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(buffer) {
-    const data = new DataView(buffer);
-    const id = data.getUint32(0, true);
-    const version = data.getUint32(4, true);
-    if (id !== 542658390 || version !== 150) {
-      console.error("Not a valid VOX file");
-      return;
-    }
-    const DEFAULT_PALETTE = [
-      0,
-      4294967295,
-      4291624959,
-      4288282623,
-      4284940287,
-      4281597951,
-      4278255615,
-      4294954239,
-      4291611903,
-      4288269567,
-      4284927231,
-      4281584895,
-      4278242559,
-      4294941183,
-      4291598847,
-      4288256511,
-      4284914175,
-      4281571839,
-      4278229503,
-      4294928127,
-      4291585791,
-      4288243455,
-      4284901119,
-      4281558783,
-      4278216447,
-      4294915071,
-      4291572735,
-      4288230399,
-      4284888063,
-      4281545727,
-      4278203391,
-      4294902015,
-      4291559679,
-      4288217343,
-      4284875007,
-      4281532671,
-      4278190335,
-      4294967244,
-      4291624908,
-      4288282572,
-      4284940236,
-      4281597900,
-      4278255564,
-      4294954188,
-      4291611852,
-      4288269516,
-      4284927180,
-      4281584844,
-      4278242508,
-      4294941132,
-      4291598796,
-      4288256460,
-      4284914124,
-      4281571788,
-      4278229452,
-      4294928076,
-      4291585740,
-      4288243404,
-      4284901068,
-      4281558732,
-      4278216396,
-      4294915020,
-      4291572684,
-      4288230348,
-      4284888012,
-      4281545676,
-      4278203340,
-      4294901964,
-      4291559628,
-      4288217292,
-      4284874956,
-      4281532620,
-      4278190284,
-      4294967193,
-      4291624857,
-      4288282521,
-      4284940185,
-      4281597849,
-      4278255513,
-      4294954137,
-      4291611801,
-      4288269465,
-      4284927129,
-      4281584793,
-      4278242457,
-      4294941081,
-      4291598745,
-      4288256409,
-      4284914073,
-      4281571737,
-      4278229401,
-      4294928025,
-      4291585689,
-      4288243353,
-      4284901017,
-      4281558681,
-      4278216345,
-      4294914969,
-      4291572633,
-      4288230297,
-      4284887961,
-      4281545625,
-      4278203289,
-      4294901913,
-      4291559577,
-      4288217241,
-      4284874905,
-      4281532569,
-      4278190233,
-      4294967142,
-      4291624806,
-      4288282470,
-      4284940134,
-      4281597798,
-      4278255462,
-      4294954086,
-      4291611750,
-      4288269414,
-      4284927078,
-      4281584742,
-      4278242406,
-      4294941030,
-      4291598694,
-      4288256358,
-      4284914022,
-      4281571686,
-      4278229350,
-      4294927974,
-      4291585638,
-      4288243302,
-      4284900966,
-      4281558630,
-      4278216294,
-      4294914918,
-      4291572582,
-      4288230246,
-      4284887910,
-      4281545574,
-      4278203238,
-      4294901862,
-      4291559526,
-      4288217190,
-      4284874854,
-      4281532518,
-      4278190182,
-      4294967091,
-      4291624755,
-      4288282419,
-      4284940083,
-      4281597747,
-      4278255411,
-      4294954035,
-      4291611699,
-      4288269363,
-      4284927027,
-      4281584691,
-      4278242355,
-      4294940979,
-      4291598643,
-      4288256307,
-      4284913971,
-      4281571635,
-      4278229299,
-      4294927923,
-      4291585587,
-      4288243251,
-      4284900915,
-      4281558579,
-      4278216243,
-      4294914867,
-      4291572531,
-      4288230195,
-      4284887859,
-      4281545523,
-      4278203187,
-      4294901811,
-      4291559475,
-      4288217139,
-      4284874803,
-      4281532467,
-      4278190131,
-      4294967040,
-      4291624704,
-      4288282368,
-      4284940032,
-      4281597696,
-      4278255360,
-      4294953984,
-      4291611648,
-      4288269312,
-      4284926976,
-      4281584640,
-      4278242304,
-      4294940928,
-      4291598592,
-      4288256256,
-      4284913920,
-      4281571584,
-      4278229248,
-      4294927872,
-      4291585536,
-      4288243200,
-      4284900864,
-      4281558528,
-      4278216192,
-      4294914816,
-      4291572480,
-      4288230144,
-      4284887808,
-      4281545472,
-      4278203136,
-      4294901760,
-      4291559424,
-      4288217088,
-      4284874752,
-      4281532416,
-      4278190318,
-      4278190301,
-      4278190267,
-      4278190250,
-      4278190216,
-      4278190199,
-      4278190165,
-      4278190148,
-      4278190114,
-      4278190097,
-      4278251008,
-      4278246656,
-      4278237952,
-      4278233600,
-      4278224896,
-      4278220544,
-      4278211840,
-      4278207488,
-      4278198784,
-      4278194432,
-      4293787648,
-      4292673536,
-      4290445312,
-      4289331200,
-      4287102976,
-      4285988864,
-      4283760640,
-      4282646528,
-      4280418304,
-      4279304192,
-      4293848814,
-      4292730333,
-      4290493371,
-      4289374890,
-      4287137928,
-      4286019447,
-      4283782485,
-      4282664004,
-      4280427042,
-      4279308561
-    ];
-    let i = 8;
-    let chunk;
-    const chunks = [];
-    while (i < data.byteLength) {
-      let id2 = "";
-      for (let j = 0; j < 4; j++) {
-        id2 += String.fromCharCode(data.getUint8(i++));
-      }
-      const chunkSize = data.getUint32(i, true);
-      i += 4;
-      i += 4;
-      if (id2 === "SIZE") {
-        const x = data.getUint32(i, true);
-        i += 4;
-        const y = data.getUint32(i, true);
-        i += 4;
-        const z = data.getUint32(i, true);
-        i += 4;
-        chunk = {
-          palette: DEFAULT_PALETTE,
-          size: { x, y, z }
-        };
-        chunks.push(chunk);
-        i += chunkSize - 3 * 4;
-      } else if (id2 === "XYZI") {
-        const numVoxels = data.getUint32(i, true);
-        i += 4;
-        chunk.data = new Uint8Array(buffer, i, numVoxels * 4);
-        i += numVoxels * 4;
-      } else if (id2 === "RGBA") {
-        const palette = [0];
-        for (let j = 0; j < 256; j++) {
-          palette[j + 1] = data.getUint32(i, true);
-          i += 4;
-        }
-        chunk.palette = palette;
-      } else {
-        i += chunkSize;
-      }
-    }
-    return chunks;
-  }
-}
-class VOXMesh extends three_module.Mesh {
-  constructor(chunk) {
-    const data = chunk.data;
-    const size = chunk.size;
-    const palette = chunk.palette;
-    const vertices = [];
-    const colors = [];
-    const nx = [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1];
-    const px = [1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0];
-    const py = [0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1];
-    const ny = [0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0];
-    const nz = [0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0];
-    const pz = [0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1];
-    function add(tile, x, y, z, r, g, b) {
-      x -= size.x / 2;
-      y -= size.z / 2;
-      z += size.y / 2;
-      for (let i = 0; i < 18; i += 3) {
-        vertices.push(tile[i + 0] + x, tile[i + 1] + y, tile[i + 2] + z);
-        colors.push(r, g, b);
-      }
-    }
-    const offsety = size.x;
-    const offsetz = size.x * size.y;
-    const array = new Uint8Array(size.x * size.y * size.z);
-    for (let j = 0; j < data.length; j += 4) {
-      const x = data[j + 0];
-      const y = data[j + 1];
-      const z = data[j + 2];
-      const index = x + y * offsety + z * offsetz;
-      array[index] = 255;
-    }
-    let hasColors = false;
-    for (let j = 0; j < data.length; j += 4) {
-      const x = data[j + 0];
-      const y = data[j + 1];
-      const z = data[j + 2];
-      const c = data[j + 3];
-      const hex = palette[c];
-      const r = (hex >> 0 & 255) / 255;
-      const g = (hex >> 8 & 255) / 255;
-      const b = (hex >> 16 & 255) / 255;
-      if (r > 0 || g > 0 || b > 0)
-        hasColors = true;
-      const index = x + y * offsety + z * offsetz;
-      if (array[index + 1] === 0 || x === size.x - 1)
-        add(px, x, z, -y, r, g, b);
-      if (array[index - 1] === 0 || x === 0)
-        add(nx, x, z, -y, r, g, b);
-      if (array[index + offsety] === 0 || y === size.y - 1)
-        add(ny, x, z, -y, r, g, b);
-      if (array[index - offsety] === 0 || y === 0)
-        add(py, x, z, -y, r, g, b);
-      if (array[index + offsetz] === 0 || z === size.z - 1)
-        add(pz, x, z, -y, r, g, b);
-      if (array[index - offsetz] === 0 || z === 0)
-        add(nz, x, z, -y, r, g, b);
-    }
-    const geometry = new three_module.BufferGeometry();
-    geometry.setAttribute("position", new three_module.Float32BufferAttribute(vertices, 3));
-    geometry.computeVertexNormals();
-    const material = new three_module.MeshStandardMaterial();
-    if (hasColors) {
-      geometry.setAttribute("color", new three_module.Float32BufferAttribute(colors, 3));
-      material.vertexColors = true;
-    }
-    super(geometry, material);
-  }
-}
-class VOXData3DTexture extends Data3DTexture/* Data3DTexture */.J {
-  constructor(chunk) {
-    const data = chunk.data;
-    const size = chunk.size;
-    const offsety = size.x;
-    const offsetz = size.x * size.y;
-    const array = new Uint8Array(size.x * size.y * size.z);
-    for (let j = 0; j < data.length; j += 4) {
-      const x = data[j + 0];
-      const y = data[j + 1];
-      const z = data[j + 2];
-      const index = x + y * offsety + z * offsetz;
-      array[index] = 255;
-    }
-    super(array, size.x, size.y, size.z);
-    this.format = three_module.RedFormat;
-    this.minFilter = three_module.NearestFilter;
-    this.magFilter = three_module.LinearFilter;
-    this.unpackAlignment = 1;
-    this.needsUpdate = true;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/PCDLoader.js
-
-class PCDLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.littleEndian = true;
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(scope.manager);
-    loader.setPath(scope.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(data) {
-        try {
-          onLoad(scope.parse(data, url));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(data, url) {
-    function decompressLZF(inData, outLength) {
-      const inLength = inData.length;
-      const outData = new Uint8Array(outLength);
-      let inPtr = 0;
-      let outPtr = 0;
-      let ctrl;
-      let len;
-      let ref;
-      do {
-        ctrl = inData[inPtr++];
-        if (ctrl < 1 << 5) {
-          ctrl++;
-          if (outPtr + ctrl > outLength)
-            throw new Error("Output buffer is not large enough");
-          if (inPtr + ctrl > inLength)
-            throw new Error("Invalid compressed data");
-          do {
-            outData[outPtr++] = inData[inPtr++];
-          } while (--ctrl);
-        } else {
-          len = ctrl >> 5;
-          ref = outPtr - ((ctrl & 31) << 8) - 1;
-          if (inPtr >= inLength)
-            throw new Error("Invalid compressed data");
-          if (len === 7) {
-            len += inData[inPtr++];
-            if (inPtr >= inLength)
-              throw new Error("Invalid compressed data");
-          }
-          ref -= inData[inPtr++];
-          if (outPtr + len + 2 > outLength)
-            throw new Error("Output buffer is not large enough");
-          if (ref < 0)
-            throw new Error("Invalid compressed data");
-          if (ref >= outPtr)
-            throw new Error("Invalid compressed data");
-          do {
-            outData[outPtr++] = outData[ref++];
-          } while (--len + 2);
-        }
-      } while (inPtr < inLength);
-      return outData;
-    }
-    function parseHeader(data2) {
-      const PCDheader2 = {};
-      const result1 = data2.search(/[\r\n]DATA\s(\S*)\s/i);
-      const result2 = /[\r\n]DATA\s(\S*)\s/i.exec(data2.substr(result1 - 1));
-      PCDheader2.data = result2[1];
-      PCDheader2.headerLen = result2[0].length + result1;
-      PCDheader2.str = data2.substr(0, PCDheader2.headerLen);
-      PCDheader2.str = PCDheader2.str.replace(/\#.*/gi, "");
-      PCDheader2.version = /VERSION (.*)/i.exec(PCDheader2.str);
-      PCDheader2.fields = /FIELDS (.*)/i.exec(PCDheader2.str);
-      PCDheader2.size = /SIZE (.*)/i.exec(PCDheader2.str);
-      PCDheader2.type = /TYPE (.*)/i.exec(PCDheader2.str);
-      PCDheader2.count = /COUNT (.*)/i.exec(PCDheader2.str);
-      PCDheader2.width = /WIDTH (.*)/i.exec(PCDheader2.str);
-      PCDheader2.height = /HEIGHT (.*)/i.exec(PCDheader2.str);
-      PCDheader2.viewpoint = /VIEWPOINT (.*)/i.exec(PCDheader2.str);
-      PCDheader2.points = /POINTS (.*)/i.exec(PCDheader2.str);
-      if (PCDheader2.version !== null)
-        PCDheader2.version = parseFloat(PCDheader2.version[1]);
-      if (PCDheader2.fields !== null)
-        PCDheader2.fields = PCDheader2.fields[1].split(" ");
-      if (PCDheader2.type !== null)
-        PCDheader2.type = PCDheader2.type[1].split(" ");
-      if (PCDheader2.width !== null)
-        PCDheader2.width = parseInt(PCDheader2.width[1]);
-      if (PCDheader2.height !== null)
-        PCDheader2.height = parseInt(PCDheader2.height[1]);
-      if (PCDheader2.viewpoint !== null)
-        PCDheader2.viewpoint = PCDheader2.viewpoint[1];
-      if (PCDheader2.points !== null)
-        PCDheader2.points = parseInt(PCDheader2.points[1], 10);
-      if (PCDheader2.points === null)
-        PCDheader2.points = PCDheader2.width * PCDheader2.height;
-      if (PCDheader2.size !== null) {
-        PCDheader2.size = PCDheader2.size[1].split(" ").map(function(x) {
-          return parseInt(x, 10);
-        });
-      }
-      if (PCDheader2.count !== null) {
-        PCDheader2.count = PCDheader2.count[1].split(" ").map(function(x) {
-          return parseInt(x, 10);
-        });
-      } else {
-        PCDheader2.count = [];
-        for (let i = 0, l = PCDheader2.fields.length; i < l; i++) {
-          PCDheader2.count.push(1);
-        }
-      }
-      PCDheader2.offset = {};
-      let sizeSum = 0;
-      for (let i = 0, l = PCDheader2.fields.length; i < l; i++) {
-        if (PCDheader2.data === "ascii") {
-          PCDheader2.offset[PCDheader2.fields[i]] = i;
-        } else {
-          PCDheader2.offset[PCDheader2.fields[i]] = sizeSum;
-          sizeSum += PCDheader2.size[i] * PCDheader2.count[i];
-        }
-      }
-      PCDheader2.rowSize = sizeSum;
-      return PCDheader2;
-    }
-    const textData = three_module.LoaderUtils.decodeText(new Uint8Array(data));
-    const PCDheader = parseHeader(textData);
-    const position = [];
-    const normal = [];
-    const color = [];
-    if (PCDheader.data === "ascii") {
-      const offset = PCDheader.offset;
-      const pcdData = textData.substr(PCDheader.headerLen);
-      const lines = pcdData.split("\n");
-      for (let i = 0, l = lines.length; i < l; i++) {
-        if (lines[i] === "")
-          continue;
-        const line = lines[i].split(" ");
-        if (offset.x !== void 0) {
-          position.push(parseFloat(line[offset.x]));
-          position.push(parseFloat(line[offset.y]));
-          position.push(parseFloat(line[offset.z]));
-        }
-        if (offset.rgb !== void 0) {
-          const rgb = parseFloat(line[offset.rgb]);
-          const r = rgb >> 16 & 255;
-          const g = rgb >> 8 & 255;
-          const b = rgb >> 0 & 255;
-          color.push(r / 255, g / 255, b / 255);
-        }
-        if (offset.normal_x !== void 0) {
-          normal.push(parseFloat(line[offset.normal_x]));
-          normal.push(parseFloat(line[offset.normal_y]));
-          normal.push(parseFloat(line[offset.normal_z]));
-        }
-      }
-    }
-    if (PCDheader.data === "binary_compressed") {
-      const sizes = new Uint32Array(data.slice(PCDheader.headerLen, PCDheader.headerLen + 8));
-      const compressedSize = sizes[0];
-      const decompressedSize = sizes[1];
-      const decompressed = decompressLZF(
-        new Uint8Array(data, PCDheader.headerLen + 8, compressedSize),
-        decompressedSize
-      );
-      const dataview = new DataView(decompressed.buffer);
-      const offset = PCDheader.offset;
-      for (let i = 0; i < PCDheader.points; i++) {
-        if (offset.x !== void 0) {
-          position.push(dataview.getFloat32(PCDheader.points * offset.x + PCDheader.size[0] * i, this.littleEndian));
-          position.push(dataview.getFloat32(PCDheader.points * offset.y + PCDheader.size[1] * i, this.littleEndian));
-          position.push(dataview.getFloat32(PCDheader.points * offset.z + PCDheader.size[2] * i, this.littleEndian));
-        }
-        if (offset.rgb !== void 0) {
-          color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 2) / 255);
-          color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 1) / 255);
-          color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 0) / 255);
-        }
-        if (offset.normal_x !== void 0) {
-          normal.push(
-            dataview.getFloat32(PCDheader.points * offset.normal_x + PCDheader.size[4] * i, this.littleEndian)
-          );
-          normal.push(
-            dataview.getFloat32(PCDheader.points * offset.normal_y + PCDheader.size[5] * i, this.littleEndian)
-          );
-          normal.push(
-            dataview.getFloat32(PCDheader.points * offset.normal_z + PCDheader.size[6] * i, this.littleEndian)
-          );
-        }
-      }
-    }
-    if (PCDheader.data === "binary") {
-      const dataview = new DataView(data, PCDheader.headerLen);
-      const offset = PCDheader.offset;
-      for (let i = 0, row = 0; i < PCDheader.points; i++, row += PCDheader.rowSize) {
-        if (offset.x !== void 0) {
-          position.push(dataview.getFloat32(row + offset.x, this.littleEndian));
-          position.push(dataview.getFloat32(row + offset.y, this.littleEndian));
-          position.push(dataview.getFloat32(row + offset.z, this.littleEndian));
-        }
-        if (offset.rgb !== void 0) {
-          color.push(dataview.getUint8(row + offset.rgb + 2) / 255);
-          color.push(dataview.getUint8(row + offset.rgb + 1) / 255);
-          color.push(dataview.getUint8(row + offset.rgb + 0) / 255);
-        }
-        if (offset.normal_x !== void 0) {
-          normal.push(dataview.getFloat32(row + offset.normal_x, this.littleEndian));
-          normal.push(dataview.getFloat32(row + offset.normal_y, this.littleEndian));
-          normal.push(dataview.getFloat32(row + offset.normal_z, this.littleEndian));
-        }
-      }
-    }
-    const geometry = new three_module.BufferGeometry();
-    if (position.length > 0)
-      geometry.setAttribute("position", new three_module.Float32BufferAttribute(position, 3));
-    if (normal.length > 0)
-      geometry.setAttribute("normal", new three_module.Float32BufferAttribute(normal, 3));
-    if (color.length > 0)
-      geometry.setAttribute("color", new three_module.Float32BufferAttribute(color, 3));
-    geometry.computeBoundingSphere();
-    const material = new three_module.PointsMaterial({ size: 5e-3 });
-    if (color.length > 0) {
-      material.vertexColors = true;
-    } else {
-      material.color.setHex(Math.random() * 16777215);
-    }
-    const mesh = new three_module.Points(geometry, material);
-    let name = url.split("").reverse().join("");
-    name = /([^\/]*)/.exec(name);
-    name = name[1].split("").reverse().join("");
-    mesh.name = name;
-    return mesh;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/lwo/LWO2Parser.js
-class LWO2Parser {
-  constructor(IFFParser) {
-    this.IFF = IFFParser;
-  }
-  parseBlock() {
-    this.IFF.debugger.offset = this.IFF.reader.offset;
-    this.IFF.debugger.closeForms();
-    const blockID = this.IFF.reader.getIDTag();
-    let length = this.IFF.reader.getUint32();
-    if (length > this.IFF.reader.dv.byteLength - this.IFF.reader.offset) {
-      this.IFF.reader.offset -= 4;
-      length = this.IFF.reader.getUint16();
-    }
-    this.IFF.debugger.dataOffset = this.IFF.reader.offset;
-    this.IFF.debugger.length = length;
-    switch (blockID) {
-      case "FORM":
-        this.IFF.parseForm(length);
-        break;
-      case "ICON":
-      case "VMPA":
-      case "BBOX":
-      case "NORM":
-      case "PRE ":
-      case "POST":
-      case "KEY ":
-      case "SPAN":
-      case "TIME":
-      case "CLRS":
-      case "CLRA":
-      case "FILT":
-      case "DITH":
-      case "CONT":
-      case "BRIT":
-      case "SATR":
-      case "HUE ":
-      case "GAMM":
-      case "NEGA":
-      case "IFLT":
-      case "PFLT":
-      case "PROJ":
-      case "AXIS":
-      case "AAST":
-      case "PIXB":
-      case "AUVO":
-      case "STCK":
-      case "PROC":
-      case "VALU":
-      case "FUNC":
-      case "PNAM":
-      case "INAM":
-      case "GRST":
-      case "GREN":
-      case "GRPT":
-      case "FKEY":
-      case "IKEY":
-      case "CSYS":
-      case "OPAQ":
-      case "CMAP":
-      case "NLOC":
-      case "NZOM":
-      case "NVER":
-      case "NSRV":
-      case "NVSK":
-      case "NCRD":
-      case "WRPW":
-      case "WRPH":
-      case "NMOD":
-      case "NSEL":
-      case "NPRW":
-      case "NPLA":
-      case "NODS":
-      case "VERS":
-      case "ENUM":
-      case "TAG ":
-      case "OPAC":
-      case "CGMD":
-      case "CGTY":
-      case "CGST":
-      case "CGEN":
-      case "CGTS":
-      case "CGTE":
-      case "OSMP":
-      case "OMDE":
-      case "OUTR":
-      case "FLAG":
-      case "TRNL":
-      case "GLOW":
-      case "GVAL":
-      case "SHRP":
-      case "RFOP":
-      case "RSAN":
-      case "TROP":
-      case "RBLR":
-      case "TBLR":
-      case "CLRH":
-      case "CLRF":
-      case "ADTR":
-      case "LINE":
-      case "ALPH":
-      case "VCOL":
-      case "ENAB":
-        this.IFF.debugger.skipped = true;
-        this.IFF.reader.skip(length);
-        break;
-      case "SURF":
-        this.IFF.parseSurfaceLwo2(length);
-        break;
-      case "CLIP":
-        this.IFF.parseClipLwo2(length);
-        break;
-      case "IPIX":
-      case "IMIP":
-      case "IMOD":
-      case "AMOD":
-      case "IINV":
-      case "INCR":
-      case "IAXS":
-      case "IFOT":
-      case "ITIM":
-      case "IWRL":
-      case "IUTI":
-      case "IINX":
-      case "IINY":
-      case "IINZ":
-      case "IREF":
-        if (length === 4)
-          this.IFF.currentNode[blockID] = this.IFF.reader.getInt32();
-        else
-          this.IFF.reader.skip(length);
-        break;
-      case "OTAG":
-        this.IFF.parseObjectTag();
-        break;
-      case "LAYR":
-        this.IFF.parseLayer(length);
-        break;
-      case "PNTS":
-        this.IFF.parsePoints(length);
-        break;
-      case "VMAP":
-        this.IFF.parseVertexMapping(length);
-        break;
-      case "AUVU":
-      case "AUVN":
-        this.IFF.reader.skip(length - 1);
-        this.IFF.reader.getVariableLengthIndex();
-        break;
-      case "POLS":
-        this.IFF.parsePolygonList(length);
-        break;
-      case "TAGS":
-        this.IFF.parseTagStrings(length);
-        break;
-      case "PTAG":
-        this.IFF.parsePolygonTagMapping(length);
-        break;
-      case "VMAD":
-        this.IFF.parseVertexMapping(length, true);
-        break;
-      case "DESC":
-        this.IFF.currentForm.description = this.IFF.reader.getString();
-        break;
-      case "TEXT":
-      case "CMNT":
-      case "NCOM":
-        this.IFF.currentForm.comment = this.IFF.reader.getString();
-        break;
-      case "NAME":
-        this.IFF.currentForm.channelName = this.IFF.reader.getString();
-        break;
-      case "WRAP":
-        this.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() };
-        break;
-      case "IMAG":
-        const index = this.IFF.reader.getVariableLengthIndex();
-        this.IFF.currentForm.imageIndex = index;
-        break;
-      case "OREF":
-        this.IFF.currentForm.referenceObject = this.IFF.reader.getString();
-        break;
-      case "ROID":
-        this.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32();
-        break;
-      case "SSHN":
-        this.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString();
-        break;
-      case "AOVN":
-        this.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString();
-        break;
-      case "NSTA":
-        this.IFF.currentForm.disabled = this.IFF.reader.getUint16();
-        break;
-      case "NRNM":
-        this.IFF.currentForm.realName = this.IFF.reader.getString();
-        break;
-      case "NNME":
-        this.IFF.currentForm.refName = this.IFF.reader.getString();
-        this.IFF.currentSurface.nodes[this.IFF.currentForm.refName] = this.IFF.currentForm;
-        break;
-      case "INME":
-        if (!this.IFF.currentForm.nodeName)
-          this.IFF.currentForm.nodeName = [];
-        this.IFF.currentForm.nodeName.push(this.IFF.reader.getString());
-        break;
-      case "IINN":
-        if (!this.IFF.currentForm.inputNodeName)
-          this.IFF.currentForm.inputNodeName = [];
-        this.IFF.currentForm.inputNodeName.push(this.IFF.reader.getString());
-        break;
-      case "IINM":
-        if (!this.IFF.currentForm.inputName)
-          this.IFF.currentForm.inputName = [];
-        this.IFF.currentForm.inputName.push(this.IFF.reader.getString());
-        break;
-      case "IONM":
-        if (!this.IFF.currentForm.inputOutputName)
-          this.IFF.currentForm.inputOutputName = [];
-        this.IFF.currentForm.inputOutputName.push(this.IFF.reader.getString());
-        break;
-      case "FNAM":
-        this.IFF.currentForm.fileName = this.IFF.reader.getString();
-        break;
-      case "CHAN":
-        if (length === 4)
-          this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag();
-        else
-          this.IFF.reader.skip(length);
-        break;
-      case "SMAN":
-        const maxSmoothingAngle = this.IFF.reader.getFloat32();
-        this.IFF.currentSurface.attributes.smooth = maxSmoothingAngle < 0 ? false : true;
-        break;
-      case "COLR":
-        this.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array(3) };
-        this.IFF.reader.skip(2);
-        break;
-      case "LUMI":
-        this.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() };
-        this.IFF.reader.skip(2);
-        break;
-      case "SPEC":
-        this.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() };
-        this.IFF.reader.skip(2);
-        break;
-      case "DIFF":
-        this.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() };
-        this.IFF.reader.skip(2);
-        break;
-      case "REFL":
-        this.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() };
-        this.IFF.reader.skip(2);
-        break;
-      case "GLOS":
-        this.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() };
-        this.IFF.reader.skip(2);
-        break;
-      case "TRAN":
-        this.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32();
-        this.IFF.reader.skip(2);
-        break;
-      case "BUMP":
-        this.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32();
-        this.IFF.reader.skip(2);
-        break;
-      case "SIDE":
-        this.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16();
-        break;
-      case "RIMG":
-        this.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex();
-        break;
-      case "RIND":
-        this.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32();
-        this.IFF.reader.skip(2);
-        break;
-      case "TIMG":
-        this.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex();
-        break;
-      case "IMAP":
-        this.IFF.reader.skip(2);
-        break;
-      case "TMAP":
-        this.IFF.debugger.skipped = true;
-        this.IFF.reader.skip(length);
-        break;
-      case "IUVI":
-        this.IFF.currentNode.UVChannel = this.IFF.reader.getString(length);
-        break;
-      case "IUTL":
-        this.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32();
-        break;
-      case "IVTL":
-        this.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32();
-        break;
-      case "BLOK":
-        break;
-      default:
-        this.IFF.parseUnknownCHUNK(blockID, length);
-    }
-    if (blockID != "FORM") {
-      this.IFF.debugger.node = 1;
-      this.IFF.debugger.nodeID = blockID;
-      this.IFF.debugger.log();
-    }
-    if (this.IFF.reader.offset >= this.IFF.currentFormEnd) {
-      this.IFF.currentForm = this.IFF.parentForm;
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/lwo/LWO3Parser.js
-class LWO3Parser {
-  constructor(IFFParser) {
-    this.IFF = IFFParser;
-  }
-  parseBlock() {
-    this.IFF.debugger.offset = this.IFF.reader.offset;
-    this.IFF.debugger.closeForms();
-    const blockID = this.IFF.reader.getIDTag();
-    const length = this.IFF.reader.getUint32();
-    this.IFF.debugger.dataOffset = this.IFF.reader.offset;
-    this.IFF.debugger.length = length;
-    switch (blockID) {
-      case "FORM":
-        this.IFF.parseForm(length);
-        break;
-      case "ICON":
-      case "VMPA":
-      case "BBOX":
-      case "NORM":
-      case "PRE ":
-      case "POST":
-      case "KEY ":
-      case "SPAN":
-      case "TIME":
-      case "CLRS":
-      case "CLRA":
-      case "FILT":
-      case "DITH":
-      case "CONT":
-      case "BRIT":
-      case "SATR":
-      case "HUE ":
-      case "GAMM":
-      case "NEGA":
-      case "IFLT":
-      case "PFLT":
-      case "PROJ":
-      case "AXIS":
-      case "AAST":
-      case "PIXB":
-      case "STCK":
-      case "VALU":
-      case "PNAM":
-      case "INAM":
-      case "GRST":
-      case "GREN":
-      case "GRPT":
-      case "FKEY":
-      case "IKEY":
-      case "CSYS":
-      case "OPAQ":
-      case "CMAP":
-      case "NLOC":
-      case "NZOM":
-      case "NVER":
-      case "NSRV":
-      case "NCRD":
-      case "NMOD":
-      case "NSEL":
-      case "NPRW":
-      case "NPLA":
-      case "VERS":
-      case "ENUM":
-      case "TAG ":
-      case "CGMD":
-      case "CGTY":
-      case "CGST":
-      case "CGEN":
-      case "CGTS":
-      case "CGTE":
-      case "OSMP":
-      case "OMDE":
-      case "OUTR":
-      case "FLAG":
-      case "TRNL":
-      case "SHRP":
-      case "RFOP":
-      case "RSAN":
-      case "TROP":
-      case "RBLR":
-      case "TBLR":
-      case "CLRH":
-      case "CLRF":
-      case "ADTR":
-      case "GLOW":
-      case "LINE":
-      case "ALPH":
-      case "VCOL":
-      case "ENAB":
-        this.IFF.debugger.skipped = true;
-        this.IFF.reader.skip(length);
-        break;
-      case "IPIX":
-      case "IMIP":
-      case "IMOD":
-      case "AMOD":
-      case "IINV":
-      case "INCR":
-      case "IAXS":
-      case "IFOT":
-      case "ITIM":
-      case "IWRL":
-      case "IUTI":
-      case "IINX":
-      case "IINY":
-      case "IINZ":
-      case "IREF":
-        if (length === 4)
-          this.IFF.currentNode[blockID] = this.IFF.reader.getInt32();
-        else
-          this.IFF.reader.skip(length);
-        break;
-      case "OTAG":
-        this.IFF.parseObjectTag();
-        break;
-      case "LAYR":
-        this.IFF.parseLayer(length);
-        break;
-      case "PNTS":
-        this.IFF.parsePoints(length);
-        break;
-      case "VMAP":
-        this.IFF.parseVertexMapping(length);
-        break;
-      case "POLS":
-        this.IFF.parsePolygonList(length);
-        break;
-      case "TAGS":
-        this.IFF.parseTagStrings(length);
-        break;
-      case "PTAG":
-        this.IFF.parsePolygonTagMapping(length);
-        break;
-      case "VMAD":
-        this.IFF.parseVertexMapping(length, true);
-        break;
-      case "DESC":
-        this.IFF.currentForm.description = this.IFF.reader.getString();
-        break;
-      case "TEXT":
-      case "CMNT":
-      case "NCOM":
-        this.IFF.currentForm.comment = this.IFF.reader.getString();
-        break;
-      case "NAME":
-        this.IFF.currentForm.channelName = this.IFF.reader.getString();
-        break;
-      case "WRAP":
-        this.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() };
-        break;
-      case "IMAG":
-        const index = this.IFF.reader.getVariableLengthIndex();
-        this.IFF.currentForm.imageIndex = index;
-        break;
-      case "OREF":
-        this.IFF.currentForm.referenceObject = this.IFF.reader.getString();
-        break;
-      case "ROID":
-        this.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32();
-        break;
-      case "SSHN":
-        this.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString();
-        break;
-      case "AOVN":
-        this.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString();
-        break;
-      case "NSTA":
-        this.IFF.currentForm.disabled = this.IFF.reader.getUint16();
-        break;
-      case "NRNM":
-        this.IFF.currentForm.realName = this.IFF.reader.getString();
-        break;
-      case "NNME":
-        this.IFF.currentForm.refName = this.IFF.reader.getString();
-        this.IFF.currentSurface.nodes[this.IFF.currentForm.refName] = this.IFF.currentForm;
-        break;
-      case "INME":
-        if (!this.IFF.currentForm.nodeName)
-          this.IFF.currentForm.nodeName = [];
-        this.IFF.currentForm.nodeName.push(this.IFF.reader.getString());
-        break;
-      case "IINN":
-        if (!this.IFF.currentForm.inputNodeName)
-          this.IFF.currentForm.inputNodeName = [];
-        this.IFF.currentForm.inputNodeName.push(this.IFF.reader.getString());
-        break;
-      case "IINM":
-        if (!this.IFF.currentForm.inputName)
-          this.IFF.currentForm.inputName = [];
-        this.IFF.currentForm.inputName.push(this.IFF.reader.getString());
-        break;
-      case "IONM":
-        if (!this.IFF.currentForm.inputOutputName)
-          this.IFF.currentForm.inputOutputName = [];
-        this.IFF.currentForm.inputOutputName.push(this.IFF.reader.getString());
-        break;
-      case "FNAM":
-        this.IFF.currentForm.fileName = this.IFF.reader.getString();
-        break;
-      case "CHAN":
-        if (length === 4)
-          this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag();
-        else
-          this.IFF.reader.skip(length);
-        break;
-      case "SMAN":
-        const maxSmoothingAngle = this.IFF.reader.getFloat32();
-        this.IFF.currentSurface.attributes.smooth = maxSmoothingAngle < 0 ? false : true;
-        break;
-      case "COLR":
-        this.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array(3) };
-        this.IFF.reader.skip(2);
-        break;
-      case "LUMI":
-        this.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() };
-        this.IFF.reader.skip(2);
-        break;
-      case "SPEC":
-        this.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() };
-        this.IFF.reader.skip(2);
-        break;
-      case "DIFF":
-        this.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() };
-        this.IFF.reader.skip(2);
-        break;
-      case "REFL":
-        this.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() };
-        this.IFF.reader.skip(2);
-        break;
-      case "GLOS":
-        this.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() };
-        this.IFF.reader.skip(2);
-        break;
-      case "TRAN":
-        this.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32();
-        this.IFF.reader.skip(2);
-        break;
-      case "BUMP":
-        this.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32();
-        this.IFF.reader.skip(2);
-        break;
-      case "SIDE":
-        this.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16();
-        break;
-      case "RIMG":
-        this.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex();
-        break;
-      case "RIND":
-        this.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32();
-        this.IFF.reader.skip(2);
-        break;
-      case "TIMG":
-        this.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex();
-        break;
-      case "IMAP":
-        this.IFF.currentSurface.attributes.imageMapIndex = this.IFF.reader.getUint32();
-        break;
-      case "IUVI":
-        this.IFF.currentNode.UVChannel = this.IFF.reader.getString(length);
-        break;
-      case "IUTL":
-        this.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32();
-        break;
-      case "IVTL":
-        this.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32();
-        break;
-      default:
-        this.IFF.parseUnknownCHUNK(blockID, length);
-    }
-    if (blockID != "FORM") {
-      this.IFF.debugger.node = 1;
-      this.IFF.debugger.nodeID = blockID;
-      this.IFF.debugger.log();
-    }
-    if (this.IFF.reader.offset >= this.IFF.currentFormEnd) {
-      this.IFF.currentForm = this.IFF.parentForm;
-    }
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/lwo/IFFParser.js
-
-
-class IFFParser {
-  constructor() {
-    this.debugger = new Debugger();
-  }
-  parse(buffer) {
-    this.reader = new DataViewReader(buffer);
-    this.tree = {
-      materials: {},
-      layers: [],
-      tags: [],
-      textures: []
-    };
-    this.currentLayer = this.tree;
-    this.currentForm = this.tree;
-    this.parseTopForm();
-    if (this.tree.format === void 0)
-      return;
-    if (this.tree.format === "LWO2") {
-      this.parser = new LWO2Parser(this);
-      while (!this.reader.endOfFile())
-        this.parser.parseBlock();
-    } else if (this.tree.format === "LWO3") {
-      this.parser = new LWO3Parser(this);
-      while (!this.reader.endOfFile())
-        this.parser.parseBlock();
-    }
-    this.debugger.offset = this.reader.offset;
-    this.debugger.closeForms();
-    return this.tree;
-  }
-  parseTopForm() {
-    this.debugger.offset = this.reader.offset;
-    var topForm = this.reader.getIDTag();
-    if (topForm !== "FORM") {
-      console.warn("LWOLoader: Top-level FORM missing.");
-      return;
-    }
-    var length = this.reader.getUint32();
-    this.debugger.dataOffset = this.reader.offset;
-    this.debugger.length = length;
-    var type = this.reader.getIDTag();
-    if (type === "LWO2") {
-      this.tree.format = type;
-    } else if (type === "LWO3") {
-      this.tree.format = type;
-    }
-    this.debugger.node = 0;
-    this.debugger.nodeID = type;
-    this.debugger.log();
-    return;
-  }
-  ///
-  // FORM PARSING METHODS
-  ///
-  // Forms are organisational and can contain any number of sub chunks and sub forms
-  // FORM ::= 'FORM'[ID4], length[U4], type[ID4], ( chunk[CHUNK] | form[FORM] ) * }
-  parseForm(length) {
-    var type = this.reader.getIDTag();
-    switch (type) {
-      case "ISEQ":
-      case "ANIM":
-      case "STCC":
-      case "VPVL":
-      case "VPRM":
-      case "NROT":
-      case "WRPW":
-      case "WRPH":
-      case "FUNC":
-      case "FALL":
-      case "OPAC":
-      case "GRAD":
-      case "ENVS":
-      case "VMOP":
-      case "VMBG":
-      case "OMAX":
-      case "STEX":
-      case "CKBG":
-      case "CKEY":
-      case "VMLA":
-      case "VMLB":
-        this.debugger.skipped = true;
-        this.skipForm(length);
-        break;
-      case "META":
-      case "NNDS":
-      case "NODS":
-      case "NDTA":
-      case "ADAT":
-      case "AOVS":
-      case "BLOK":
-      case "IBGC":
-      case "IOPC":
-      case "IIMG":
-      case "TXTR":
-        this.debugger.length = 4;
-        this.debugger.skipped = true;
-        break;
-      case "IFAL":
-      case "ISCL":
-      case "IPOS":
-      case "IROT":
-      case "IBMP":
-      case "IUTD":
-      case "IVTD":
-        this.parseTextureNodeAttribute(type);
-        break;
-      case "ENVL":
-        this.parseEnvelope(length);
-        break;
-      case "CLIP":
-        if (this.tree.format === "LWO2") {
-          this.parseForm(length);
-        } else {
-          this.parseClip(length);
-        }
-        break;
-      case "STIL":
-        this.parseImage();
-        break;
-      case "XREF":
-        this.reader.skip(8);
-        this.currentForm.referenceTexture = {
-          index: this.reader.getUint32(),
-          refName: this.reader.getString()
-          // internal unique ref
-        };
-        break;
-      case "IMST":
-        this.parseImageStateForm(length);
-        break;
-      case "SURF":
-        this.parseSurfaceForm(length);
-        break;
-      case "VALU":
-        this.parseValueForm(length);
-        break;
-      case "NTAG":
-        this.parseSubNode(length);
-        break;
-      case "ATTR":
-      case "SATR":
-        this.setupForm("attributes", length);
-        break;
-      case "NCON":
-        this.parseConnections(length);
-        break;
-      case "SSHA":
-        this.parentForm = this.currentForm;
-        this.currentForm = this.currentSurface;
-        this.setupForm("surfaceShader", length);
-        break;
-      case "SSHD":
-        this.setupForm("surfaceShaderData", length);
-        break;
-      case "ENTR":
-        this.parseEntryForm(length);
-        break;
-      case "IMAP":
-        this.parseImageMap(length);
-        break;
-      case "TAMP":
-        this.parseXVAL("amplitude", length);
-        break;
-      case "TMAP":
-        this.setupForm("textureMap", length);
-        break;
-      case "CNTR":
-        this.parseXVAL3("center", length);
-        break;
-      case "SIZE":
-        this.parseXVAL3("scale", length);
-        break;
-      case "ROTA":
-        this.parseXVAL3("rotation", length);
-        break;
-      default:
-        this.parseUnknownForm(type, length);
-    }
-    this.debugger.node = 0;
-    this.debugger.nodeID = type;
-    this.debugger.log();
-  }
-  setupForm(type, length) {
-    if (!this.currentForm)
-      this.currentForm = this.currentNode;
-    this.currentFormEnd = this.reader.offset + length;
-    this.parentForm = this.currentForm;
-    if (!this.currentForm[type]) {
-      this.currentForm[type] = {};
-      this.currentForm = this.currentForm[type];
-    } else {
-      console.warn("LWOLoader: form already exists on parent: ", type, this.currentForm);
-      this.currentForm = this.currentForm[type];
-    }
-  }
-  skipForm(length) {
-    this.reader.skip(length - 4);
-  }
-  parseUnknownForm(type, length) {
-    console.warn("LWOLoader: unknown FORM encountered: " + type, length);
-    printBuffer(this.reader.dv.buffer, this.reader.offset, length - 4);
-    this.reader.skip(length - 4);
-  }
-  parseSurfaceForm(length) {
-    this.reader.skip(8);
-    var name = this.reader.getString();
-    var surface = {
-      attributes: {},
-      // LWO2 style non-node attributes will go here
-      connections: {},
-      name,
-      inputName: name,
-      nodes: {},
-      source: this.reader.getString()
-    };
-    this.tree.materials[name] = surface;
-    this.currentSurface = surface;
-    this.parentForm = this.tree.materials;
-    this.currentForm = surface;
-    this.currentFormEnd = this.reader.offset + length;
-  }
-  parseSurfaceLwo2(length) {
-    var name = this.reader.getString();
-    var surface = {
-      attributes: {},
-      // LWO2 style non-node attributes will go here
-      connections: {},
-      name,
-      nodes: {},
-      source: this.reader.getString()
-    };
-    this.tree.materials[name] = surface;
-    this.currentSurface = surface;
-    this.parentForm = this.tree.materials;
-    this.currentForm = surface;
-    this.currentFormEnd = this.reader.offset + length;
-  }
-  parseSubNode(length) {
-    this.reader.skip(8);
-    var name = this.reader.getString();
-    var node = {
-      name
-    };
-    this.currentForm = node;
-    this.currentNode = node;
-    this.currentFormEnd = this.reader.offset + length;
-  }
-  // collect attributes from all nodes at the top level of a surface
-  parseConnections(length) {
-    this.currentFormEnd = this.reader.offset + length;
-    this.parentForm = this.currentForm;
-    this.currentForm = this.currentSurface.connections;
-  }
-  // surface node attribute data, e.g. specular, roughness etc
-  parseEntryForm(length) {
-    this.reader.skip(8);
-    var name = this.reader.getString();
-    this.currentForm = this.currentNode.attributes;
-    this.setupForm(name, length);
-  }
-  // parse values from material - doesn't match up to other LWO3 data types
-  // sub form of entry form
-  parseValueForm() {
-    this.reader.skip(8);
-    var valueType = this.reader.getString();
-    if (valueType === "double") {
-      this.currentForm.value = this.reader.getUint64();
-    } else if (valueType === "int") {
-      this.currentForm.value = this.reader.getUint32();
-    } else if (valueType === "vparam") {
-      this.reader.skip(24);
-      this.currentForm.value = this.reader.getFloat64();
-    } else if (valueType === "vparam3") {
-      this.reader.skip(24);
-      this.currentForm.value = this.reader.getFloat64Array(3);
-    }
-  }
-  // holds various data about texture node image state
-  // Data other thanmipMapLevel unknown
-  parseImageStateForm() {
-    this.reader.skip(8);
-    this.currentForm.mipMapLevel = this.reader.getFloat32();
-  }
-  // LWO2 style image data node OR LWO3 textures defined at top level in editor (not as SURF node)
-  parseImageMap(length) {
-    this.currentFormEnd = this.reader.offset + length;
-    this.parentForm = this.currentForm;
-    if (!this.currentForm.maps)
-      this.currentForm.maps = [];
-    var map = {};
-    this.currentForm.maps.push(map);
-    this.currentForm = map;
-    this.reader.skip(10);
-  }
-  parseTextureNodeAttribute(type) {
-    this.reader.skip(28);
-    this.reader.skip(20);
-    switch (type) {
-      case "ISCL":
-        this.currentNode.scale = this.reader.getFloat32Array(3);
-        break;
-      case "IPOS":
-        this.currentNode.position = this.reader.getFloat32Array(3);
-        break;
-      case "IROT":
-        this.currentNode.rotation = this.reader.getFloat32Array(3);
-        break;
-      case "IFAL":
-        this.currentNode.falloff = this.reader.getFloat32Array(3);
-        break;
-      case "IBMP":
-        this.currentNode.amplitude = this.reader.getFloat32();
-        break;
-      case "IUTD":
-        this.currentNode.uTiles = this.reader.getFloat32();
-        break;
-      case "IVTD":
-        this.currentNode.vTiles = this.reader.getFloat32();
-        break;
-    }
-    this.reader.skip(2);
-  }
-  // ENVL forms are currently ignored
-  parseEnvelope(length) {
-    this.reader.skip(length - 4);
-  }
-  ///
-  // CHUNK PARSING METHODS
-  ///
-  // clips can either be defined inside a surface node, or at the top
-  // level and they have a different format in each case
-  parseClip(length) {
-    var tag = this.reader.getIDTag();
-    if (tag === "FORM") {
-      this.reader.skip(16);
-      this.currentNode.fileName = this.reader.getString();
-      return;
-    }
-    this.reader.setOffset(this.reader.offset - 4);
-    this.currentFormEnd = this.reader.offset + length;
-    this.parentForm = this.currentForm;
-    this.reader.skip(8);
-    var texture = {
-      index: this.reader.getUint32()
-    };
-    this.tree.textures.push(texture);
-    this.currentForm = texture;
-  }
-  parseClipLwo2(length) {
-    var texture = {
-      index: this.reader.getUint32(),
-      fileName: ""
-    };
-    while (true) {
-      var tag = this.reader.getIDTag();
-      var n_length = this.reader.getUint16();
-      if (tag === "STIL") {
-        texture.fileName = this.reader.getString();
-        break;
-      }
-      if (n_length >= length) {
-        break;
-      }
-    }
-    this.tree.textures.push(texture);
-    this.currentForm = texture;
-  }
-  parseImage() {
-    this.reader.skip(8);
-    this.currentForm.fileName = this.reader.getString();
-  }
-  parseXVAL(type, length) {
-    var endOffset = this.reader.offset + length - 4;
-    this.reader.skip(8);
-    this.currentForm[type] = this.reader.getFloat32();
-    this.reader.setOffset(endOffset);
-  }
-  parseXVAL3(type, length) {
-    var endOffset = this.reader.offset + length - 4;
-    this.reader.skip(8);
-    this.currentForm[type] = {
-      x: this.reader.getFloat32(),
-      y: this.reader.getFloat32(),
-      z: this.reader.getFloat32()
-    };
-    this.reader.setOffset(endOffset);
-  }
-  // Tags associated with an object
-  // OTAG { type[ID4], tag-string[S0] }
-  parseObjectTag() {
-    if (!this.tree.objectTags)
-      this.tree.objectTags = {};
-    this.tree.objectTags[this.reader.getIDTag()] = {
-      tagString: this.reader.getString()
-    };
-  }
-  // Signals the start of a new layer. All the data chunks which follow will be included in this layer until another layer chunk is encountered.
-  // LAYR: number[U2], flags[U2], pivot[VEC12], name[S0], parent[U2]
-  parseLayer(length) {
-    var layer = {
-      number: this.reader.getUint16(),
-      flags: this.reader.getUint16(),
-      // If the least significant bit of flags is set, the layer is hidden.
-      pivot: this.reader.getFloat32Array(3),
-      // Note: this seems to be superflous, as the geometry is translated when pivot is present
-      name: this.reader.getString()
-    };
-    this.tree.layers.push(layer);
-    this.currentLayer = layer;
-    var parsedLength = 16 + stringOffset(this.currentLayer.name);
-    this.currentLayer.parent = parsedLength < length ? this.reader.getUint16() : -1;
-  }
-  // VEC12 * ( F4 + F4 + F4 ) array of x,y,z vectors
-  // Converting from left to right handed coordinate system:
-  // x -> -x and switch material FrontSide -> BackSide
-  parsePoints(length) {
-    this.currentPoints = [];
-    for (var i = 0; i < length / 4; i += 3) {
-      this.currentPoints.push(this.reader.getFloat32(), this.reader.getFloat32(), -this.reader.getFloat32());
-    }
-  }
-  // parse VMAP or VMAD
-  // Associates a set of floating-point vectors with a set of points.
-  // VMAP: { type[ID4], dimension[U2], name[S0], ( vert[VX], value[F4] # dimension ) * }
-  // VMAD Associates a set of floating-point vectors with the vertices of specific polygons.
-  // Similar to VMAP UVs, but associates with polygon vertices rather than points
-  // to solve to problem of UV seams:  VMAD chunks are paired with VMAPs of the same name,
-  // if they exist. The vector values in the VMAD will then replace those in the
-  // corresponding VMAP, but only for calculations involving the specified polygons.
-  // VMAD { type[ID4], dimension[U2], name[S0], ( vert[VX], poly[VX], value[F4] # dimension ) * }
-  parseVertexMapping(length, discontinuous) {
-    var finalOffset = this.reader.offset + length;
-    var channelName = this.reader.getString();
-    if (this.reader.offset === finalOffset) {
-      this.currentForm.UVChannel = channelName;
-      return;
-    }
-    this.reader.setOffset(this.reader.offset - stringOffset(channelName));
-    var type = this.reader.getIDTag();
-    this.reader.getUint16();
-    var name = this.reader.getString();
-    var remainingLength = length - 6 - stringOffset(name);
-    switch (type) {
-      case "TXUV":
-        this.parseUVMapping(name, finalOffset, discontinuous);
-        break;
-      case "MORF":
-      case "SPOT":
-        this.parseMorphTargets(name, finalOffset, type);
-        break;
-      case "APSL":
-      case "NORM":
-      case "WGHT":
-      case "MNVW":
-      case "PICK":
-      case "RGB ":
-      case "RGBA":
-        this.reader.skip(remainingLength);
-        break;
-      default:
-        console.warn("LWOLoader: unknown vertex map type: " + type);
-        this.reader.skip(remainingLength);
-    }
-  }
-  parseUVMapping(name, finalOffset, discontinuous) {
-    var uvIndices = [];
-    var polyIndices = [];
-    var uvs = [];
-    while (this.reader.offset < finalOffset) {
-      uvIndices.push(this.reader.getVariableLengthIndex());
-      if (discontinuous)
-        polyIndices.push(this.reader.getVariableLengthIndex());
-      uvs.push(this.reader.getFloat32(), this.reader.getFloat32());
-    }
-    if (discontinuous) {
-      if (!this.currentLayer.discontinuousUVs)
-        this.currentLayer.discontinuousUVs = {};
-      this.currentLayer.discontinuousUVs[name] = {
-        uvIndices,
-        polyIndices,
-        uvs
-      };
-    } else {
-      if (!this.currentLayer.uvs)
-        this.currentLayer.uvs = {};
-      this.currentLayer.uvs[name] = {
-        uvIndices,
-        uvs
-      };
-    }
-  }
-  parseMorphTargets(name, finalOffset, type) {
-    var indices = [];
-    var points = [];
-    type = type === "MORF" ? "relative" : "absolute";
-    while (this.reader.offset < finalOffset) {
-      indices.push(this.reader.getVariableLengthIndex());
-      points.push(this.reader.getFloat32(), this.reader.getFloat32(), -this.reader.getFloat32());
-    }
-    if (!this.currentLayer.morphTargets)
-      this.currentLayer.morphTargets = {};
-    this.currentLayer.morphTargets[name] = {
-      indices,
-      points,
-      type
-    };
-  }
-  // A list of polygons for the current layer.
-  // POLS { type[ID4], ( numvert+flags[U2], vert[VX] # numvert ) * }
-  parsePolygonList(length) {
-    var finalOffset = this.reader.offset + length;
-    var type = this.reader.getIDTag();
-    var indices = [];
-    var polygonDimensions = [];
-    while (this.reader.offset < finalOffset) {
-      var numverts = this.reader.getUint16();
-      numverts = numverts & 1023;
-      polygonDimensions.push(numverts);
-      for (var j = 0; j < numverts; j++)
-        indices.push(this.reader.getVariableLengthIndex());
-    }
-    var geometryData = {
-      type,
-      vertexIndices: indices,
-      polygonDimensions,
-      points: this.currentPoints
-    };
-    if (polygonDimensions[0] === 1)
-      geometryData.type = "points";
-    else if (polygonDimensions[0] === 2)
-      geometryData.type = "lines";
-    this.currentLayer.geometry = geometryData;
-  }
-  // Lists the tag strings that can be associated with polygons by the PTAG chunk.
-  // TAGS { tag-string[S0] * }
-  parseTagStrings(length) {
-    this.tree.tags = this.reader.getStringArray(length);
-  }
-  // Associates tags of a given type with polygons in the most recent POLS chunk.
-  // PTAG { type[ID4], ( poly[VX], tag[U2] ) * }
-  parsePolygonTagMapping(length) {
-    var finalOffset = this.reader.offset + length;
-    var type = this.reader.getIDTag();
-    if (type === "SURF")
-      this.parseMaterialIndices(finalOffset);
-    else {
-      this.reader.skip(length - 4);
-    }
-  }
-  parseMaterialIndices(finalOffset) {
-    this.currentLayer.geometry.materialIndices = [];
-    while (this.reader.offset < finalOffset) {
-      var polygonIndex = this.reader.getVariableLengthIndex();
-      var materialIndex = this.reader.getUint16();
-      this.currentLayer.geometry.materialIndices.push(polygonIndex, materialIndex);
-    }
-  }
-  parseUnknownCHUNK(blockID, length) {
-    console.warn("LWOLoader: unknown chunk type: " + blockID + " length: " + length);
-    var data = this.reader.getString(length);
-    this.currentForm[blockID] = data;
-  }
-}
-class DataViewReader {
-  constructor(buffer) {
-    this.dv = new DataView(buffer);
-    this.offset = 0;
-    this._textDecoder = new TextDecoder();
-    this._bytes = new Uint8Array(buffer);
-  }
-  size() {
-    return this.dv.buffer.byteLength;
-  }
-  setOffset(offset) {
-    if (offset > 0 && offset < this.dv.buffer.byteLength) {
-      this.offset = offset;
-    } else {
-      console.error("LWOLoader: invalid buffer offset");
-    }
-  }
-  endOfFile() {
-    if (this.offset >= this.size())
-      return true;
-    return false;
-  }
-  skip(length) {
-    this.offset += length;
-  }
-  getUint8() {
-    var value = this.dv.getUint8(this.offset);
-    this.offset += 1;
-    return value;
-  }
-  getUint16() {
-    var value = this.dv.getUint16(this.offset);
-    this.offset += 2;
-    return value;
-  }
-  getInt32() {
-    var value = this.dv.getInt32(this.offset, false);
-    this.offset += 4;
-    return value;
-  }
-  getUint32() {
-    var value = this.dv.getUint32(this.offset, false);
-    this.offset += 4;
-    return value;
-  }
-  getUint64() {
-    var low, high;
-    high = this.getUint32();
-    low = this.getUint32();
-    return high * 4294967296 + low;
-  }
-  getFloat32() {
-    var value = this.dv.getFloat32(this.offset, false);
-    this.offset += 4;
-    return value;
-  }
-  getFloat32Array(size) {
-    var a = [];
-    for (var i = 0; i < size; i++) {
-      a.push(this.getFloat32());
-    }
-    return a;
-  }
-  getFloat64() {
-    var value = this.dv.getFloat64(this.offset, this.littleEndian);
-    this.offset += 8;
-    return value;
-  }
-  getFloat64Array(size) {
-    var a = [];
-    for (var i = 0; i < size; i++) {
-      a.push(this.getFloat64());
-    }
-    return a;
-  }
-  // get variable-length index data type
-  // VX ::= index[U2] | (index + 0xFF000000)[U4]
-  // If the index value is less than 65,280 (0xFF00),then VX === U2
-  // otherwise VX === U4 with bits 24-31 set
-  // When reading an index, if the first byte encountered is 255 (0xFF), then
-  // the four-byte form is being used and the first byte should be discarded or masked out.
-  getVariableLengthIndex() {
-    var firstByte = this.getUint8();
-    if (firstByte === 255) {
-      return this.getUint8() * 65536 + this.getUint8() * 256 + this.getUint8();
-    }
-    return firstByte * 256 + this.getUint8();
-  }
-  // An ID tag is a sequence of 4 bytes containing 7-bit ASCII values
-  getIDTag() {
-    return this.getString(4);
-  }
-  getString(size) {
-    if (size === 0)
-      return;
-    const start = this.offset;
-    let result;
-    let length;
-    if (size) {
-      length = size;
-      result = this._textDecoder.decode(new Uint8Array(this.dv.buffer, start, size));
-    } else {
-      length = this._bytes.indexOf(0, start) - start;
-      result = this._textDecoder.decode(new Uint8Array(this.dv.buffer, start, length));
-      length++;
-      length += length % 2;
-    }
-    this.skip(length);
-    return result;
-  }
-  getStringArray(size) {
-    var a = this.getString(size);
-    a = a.split("\0");
-    return a.filter(Boolean);
-  }
-}
-class Debugger {
-  constructor() {
-    this.active = false;
-    this.depth = 0;
-    this.formList = [];
-  }
-  enable() {
-    this.active = true;
-  }
-  log() {
-    if (!this.active)
-      return;
-    var nodeType;
-    switch (this.node) {
-      case 0:
-        nodeType = "FORM";
-        break;
-      case 1:
-        nodeType = "CHK";
-        break;
-      case 2:
-        nodeType = "S-CHK";
-        break;
-    }
-    console.log(
-      "| ".repeat(this.depth) + nodeType,
-      this.nodeID,
-      `( ${this.offset} ) -> ( ${this.dataOffset + this.length} )`,
-      this.node == 0 ? " {" : "",
-      this.skipped ? "SKIPPED" : "",
-      this.node == 0 && this.skipped ? "}" : ""
-    );
-    if (this.node == 0 && !this.skipped) {
-      this.depth += 1;
-      this.formList.push(this.dataOffset + this.length);
-    }
-    this.skipped = false;
-  }
-  closeForms() {
-    if (!this.active)
-      return;
-    for (var i = this.formList.length - 1; i >= 0; i--) {
-      if (this.offset >= this.formList[i]) {
-        this.depth -= 1;
-        console.log("| ".repeat(this.depth) + "}");
-        this.formList.splice(-1, 1);
-      }
-    }
-  }
-}
-function isEven(num) {
-  return num % 2;
-}
-function stringOffset(string) {
-  return string.length + 1 + (isEven(string.length + 1) ? 1 : 0);
-}
-function printBuffer(buffer, from, to) {
-  console.log(new TextDecoder().decode(new Uint8Array(buffer, from, to)));
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/LWOLoader.js
-
-
-let _lwoTree;
-class LWOLoader extends three_module.Loader {
-  constructor(manager, parameters = {}) {
-    super(manager);
-    this.resourcePath = parameters.resourcePath !== void 0 ? parameters.resourcePath : "";
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const path = scope.path === "" ? extractParentUrl(url, "Objects") : scope.path;
-    const modelName = url.split(path).pop().split(".")[0];
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(scope.path);
-    loader.setResponseType("arraybuffer");
-    loader.load(
-      url,
-      function(buffer) {
-        try {
-          onLoad(scope.parse(buffer, path, modelName));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(iffBuffer, path, modelName) {
-    _lwoTree = new IFFParser().parse(iffBuffer);
-    const textureLoader = new three_module.TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);
-    return new LWOTreeParser(textureLoader).parse(modelName);
-  }
-}
-class LWOTreeParser {
-  constructor(textureLoader) {
-    this.textureLoader = textureLoader;
-  }
-  parse(modelName) {
-    this.materials = new MaterialParser(this.textureLoader).parse();
-    this.defaultLayerName = modelName;
-    this.meshes = this.parseLayers();
-    return {
-      materials: this.materials,
-      meshes: this.meshes
-    };
-  }
-  parseLayers() {
-    const meshes = [];
-    const finalMeshes = [];
-    const geometryParser = new GeometryParser();
-    const scope = this;
-    _lwoTree.layers.forEach(function(layer) {
-      const geometry = geometryParser.parse(layer.geometry, layer);
-      const mesh = scope.parseMesh(geometry, layer);
-      meshes[layer.number] = mesh;
-      if (layer.parent === -1)
-        finalMeshes.push(mesh);
-      else
-        meshes[layer.parent].add(mesh);
-    });
-    this.applyPivots(finalMeshes);
-    return finalMeshes;
-  }
-  parseMesh(geometry, layer) {
-    let mesh;
-    const materials = this.getMaterials(geometry.userData.matNames, layer.geometry.type);
-    this.duplicateUVs(geometry, materials);
-    if (layer.geometry.type === "points")
-      mesh = new three_module.Points(geometry, materials);
-    else if (layer.geometry.type === "lines")
-      mesh = new three_module.LineSegments(geometry, materials);
-    else
-      mesh = new three_module.Mesh(geometry, materials);
-    if (layer.name)
-      mesh.name = layer.name;
-    else
-      mesh.name = this.defaultLayerName + "_layer_" + layer.number;
-    mesh.userData.pivot = layer.pivot;
-    return mesh;
-  }
-  // TODO: may need to be reversed in z to convert LWO to three.js coordinates
-  applyPivots(meshes) {
-    meshes.forEach(function(mesh) {
-      mesh.traverse(function(child) {
-        const pivot = child.userData.pivot;
-        child.position.x += pivot[0];
-        child.position.y += pivot[1];
-        child.position.z += pivot[2];
-        if (child.parent) {
-          const parentPivot = child.parent.userData.pivot;
-          child.position.x -= parentPivot[0];
-          child.position.y -= parentPivot[1];
-          child.position.z -= parentPivot[2];
-        }
-      });
-    });
-  }
-  getMaterials(namesArray, type) {
-    const materials = [];
-    const scope = this;
-    namesArray.forEach(function(name, i) {
-      materials[i] = scope.getMaterialByName(name);
-    });
-    if (type === "points" || type === "lines") {
-      materials.forEach(function(mat, i) {
-        const spec = {
-          color: mat.color
-        };
-        if (type === "points") {
-          spec.size = 0.1;
-          spec.map = mat.map;
-          spec.morphTargets = mat.morphTargets;
-          materials[i] = new three_module.PointsMaterial(spec);
-        } else if (type === "lines") {
-          materials[i] = new three_module.LineBasicMaterial(spec);
-        }
-      });
-    }
-    const filtered = materials.filter(Boolean);
-    if (filtered.length === 1)
-      return filtered[0];
-    return materials;
-  }
-  getMaterialByName(name) {
-    return this.materials.filter(function(m) {
-      return m.name === name;
-    })[0];
-  }
-  // If the material has an aoMap, duplicate UVs
-  duplicateUVs(geometry, materials) {
-    let duplicateUVs = false;
-    if (!Array.isArray(materials)) {
-      if (materials.aoMap)
-        duplicateUVs = true;
-    } else {
-      materials.forEach(function(material) {
-        if (material.aoMap)
-          duplicateUVs = true;
-      });
-    }
-    if (!duplicateUVs)
-      return;
-    geometry.setAttribute("uv2", new three_module.BufferAttribute(geometry.attributes.uv.array, 2));
-  }
-}
-class MaterialParser {
-  constructor(textureLoader) {
-    this.textureLoader = textureLoader;
-  }
-  parse() {
-    const materials = [];
-    this.textures = {};
-    for (const name in _lwoTree.materials) {
-      if (_lwoTree.format === "LWO3") {
-        materials.push(this.parseMaterial(_lwoTree.materials[name], name, _lwoTree.textures));
-      } else if (_lwoTree.format === "LWO2") {
-        materials.push(this.parseMaterialLwo2(_lwoTree.materials[name], name, _lwoTree.textures));
-      }
-    }
-    return materials;
-  }
-  parseMaterial(materialData, name, textures) {
-    let params = {
-      name,
-      side: this.getSide(materialData.attributes),
-      flatShading: this.getSmooth(materialData.attributes)
-    };
-    const connections = this.parseConnections(materialData.connections, materialData.nodes);
-    const maps = this.parseTextureNodes(connections.maps);
-    this.parseAttributeImageMaps(connections.attributes, textures, maps, materialData.maps);
-    const attributes = this.parseAttributes(connections.attributes, maps);
-    this.parseEnvMap(connections, maps, attributes);
-    params = Object.assign(maps, params);
-    params = Object.assign(params, attributes);
-    const materialType = this.getMaterialType(connections.attributes);
-    return new materialType(params);
-  }
-  parseMaterialLwo2(materialData, name) {
-    let params = {
-      name,
-      side: this.getSide(materialData.attributes),
-      flatShading: this.getSmooth(materialData.attributes)
-    };
-    const attributes = this.parseAttributes(materialData.attributes, {});
-    params = Object.assign(params, attributes);
-    return new three_module.MeshPhongMaterial(params);
-  }
-  // Note: converting from left to right handed coords by switching x -> -x in vertices, and
-  // then switching mat FrontSide -> BackSide
-  // NB: this means that FrontSide and BackSide have been switched!
-  getSide(attributes) {
-    if (!attributes.side)
-      return three_module.BackSide;
-    switch (attributes.side) {
-      case 0:
-      case 1:
-        return three_module.BackSide;
-      case 2:
-        return three_module.FrontSide;
-      case 3:
-        return three_module.DoubleSide;
-    }
-  }
-  getSmooth(attributes) {
-    if (!attributes.smooth)
-      return true;
-    return !attributes.smooth;
-  }
-  parseConnections(connections, nodes) {
-    const materialConnections = {
-      maps: {}
-    };
-    const inputName = connections.inputName;
-    const inputNodeName = connections.inputNodeName;
-    const nodeName = connections.nodeName;
-    const scope = this;
-    inputName.forEach(function(name, index) {
-      if (name === "Material") {
-        const matNode = scope.getNodeByRefName(inputNodeName[index], nodes);
-        materialConnections.attributes = matNode.attributes;
-        materialConnections.envMap = matNode.fileName;
-        materialConnections.name = inputNodeName[index];
-      }
-    });
-    nodeName.forEach(function(name, index) {
-      if (name === materialConnections.name) {
-        materialConnections.maps[inputName[index]] = scope.getNodeByRefName(inputNodeName[index], nodes);
-      }
-    });
-    return materialConnections;
-  }
-  getNodeByRefName(refName, nodes) {
-    for (const name in nodes) {
-      if (nodes[name].refName === refName)
-        return nodes[name];
-    }
-  }
-  parseTextureNodes(textureNodes) {
-    const maps = {};
-    for (const name in textureNodes) {
-      const node = textureNodes[name];
-      const path = node.fileName;
-      if (!path)
-        return;
-      const texture = this.loadTexture(path);
-      if (node.widthWrappingMode !== void 0)
-        texture.wrapS = this.getWrappingType(node.widthWrappingMode);
-      if (node.heightWrappingMode !== void 0)
-        texture.wrapT = this.getWrappingType(node.heightWrappingMode);
-      switch (name) {
-        case "Color":
-          maps.map = texture;
-          break;
-        case "Roughness":
-          maps.roughnessMap = texture;
-          maps.roughness = 0.5;
-          break;
-        case "Specular":
-          maps.specularMap = texture;
-          maps.specular = 16777215;
-          break;
-        case "Luminous":
-          maps.emissiveMap = texture;
-          maps.emissive = 8421504;
-          break;
-        case "Luminous Color":
-          maps.emissive = 8421504;
-          break;
-        case "Metallic":
-          maps.metalnessMap = texture;
-          maps.metalness = 0.5;
-          break;
-        case "Transparency":
-        case "Alpha":
-          maps.alphaMap = texture;
-          maps.transparent = true;
-          break;
-        case "Normal":
-          maps.normalMap = texture;
-          if (node.amplitude !== void 0)
-            maps.normalScale = new three_module.Vector2(node.amplitude, node.amplitude);
-          break;
-        case "Bump":
-          maps.bumpMap = texture;
-          break;
-      }
-    }
-    if (maps.roughnessMap && maps.specularMap)
-      delete maps.specularMap;
-    return maps;
-  }
-  // maps can also be defined on individual material attributes, parse those here
-  // This occurs on Standard (Phong) surfaces
-  parseAttributeImageMaps(attributes, textures, maps) {
-    for (const name in attributes) {
-      const attribute = attributes[name];
-      if (attribute.maps) {
-        const mapData = attribute.maps[0];
-        const path = this.getTexturePathByIndex(mapData.imageIndex, textures);
-        if (!path)
-          return;
-        const texture = this.loadTexture(path);
-        if (mapData.wrap !== void 0)
-          texture.wrapS = this.getWrappingType(mapData.wrap.w);
-        if (mapData.wrap !== void 0)
-          texture.wrapT = this.getWrappingType(mapData.wrap.h);
-        switch (name) {
-          case "Color":
-            maps.map = texture;
-            break;
-          case "Diffuse":
-            maps.aoMap = texture;
-            break;
-          case "Roughness":
-            maps.roughnessMap = texture;
-            maps.roughness = 1;
-            break;
-          case "Specular":
-            maps.specularMap = texture;
-            maps.specular = 16777215;
-            break;
-          case "Luminosity":
-            maps.emissiveMap = texture;
-            maps.emissive = 8421504;
-            break;
-          case "Metallic":
-            maps.metalnessMap = texture;
-            maps.metalness = 1;
-            break;
-          case "Transparency":
-          case "Alpha":
-            maps.alphaMap = texture;
-            maps.transparent = true;
-            break;
-          case "Normal":
-            maps.normalMap = texture;
-            break;
-          case "Bump":
-            maps.bumpMap = texture;
-            break;
-        }
-      }
-    }
-  }
-  parseAttributes(attributes, maps) {
-    const params = {};
-    if (attributes.Color && !maps.map) {
-      params.color = new three_module.Color().fromArray(attributes.Color.value);
-    } else {
-      params.color = new three_module.Color();
-    }
-    if (attributes.Transparency && attributes.Transparency.value !== 0) {
-      params.opacity = 1 - attributes.Transparency.value;
-      params.transparent = true;
-    }
-    if (attributes["Bump Height"])
-      params.bumpScale = attributes["Bump Height"].value * 0.1;
-    if (attributes["Refraction Index"])
-      params.refractionRatio = 1 / attributes["Refraction Index"].value;
-    this.parsePhysicalAttributes(params, attributes, maps);
-    this.parseStandardAttributes(params, attributes, maps);
-    this.parsePhongAttributes(params, attributes, maps);
-    return params;
-  }
-  parsePhysicalAttributes(params, attributes) {
-    if (attributes.Clearcoat && attributes.Clearcoat.value > 0) {
-      params.clearcoat = attributes.Clearcoat.value;
-      if (attributes["Clearcoat Gloss"]) {
-        params.clearcoatRoughness = 0.5 * (1 - attributes["Clearcoat Gloss"].value);
-      }
-    }
-  }
-  parseStandardAttributes(params, attributes, maps) {
-    if (attributes.Luminous) {
-      params.emissiveIntensity = attributes.Luminous.value;
-      if (attributes["Luminous Color"] && !maps.emissive) {
-        params.emissive = new three_module.Color().fromArray(attributes["Luminous Color"].value);
-      } else {
-        params.emissive = new three_module.Color(8421504);
-      }
-    }
-    if (attributes.Roughness && !maps.roughnessMap)
-      params.roughness = attributes.Roughness.value;
-    if (attributes.Metallic && !maps.metalnessMap)
-      params.metalness = attributes.Metallic.value;
-  }
-  parsePhongAttributes(params, attributes, maps) {
-    if (attributes.Diffuse)
-      params.color.multiplyScalar(attributes.Diffuse.value);
-    if (attributes.Reflection) {
-      params.reflectivity = attributes.Reflection.value;
-      params.combine = three_module.AddOperation;
-    }
-    if (attributes.Luminosity) {
-      params.emissiveIntensity = attributes.Luminosity.value;
-      if (!maps.emissiveMap && !maps.map) {
-        params.emissive = params.color;
-      } else {
-        params.emissive = new three_module.Color(8421504);
-      }
-    }
-    if (!attributes.Roughness && attributes.Specular && !maps.specularMap) {
-      if (attributes["Color Highlight"]) {
-        params.specular = new three_module.Color().setScalar(attributes.Specular.value).lerp(params.color.clone().multiplyScalar(attributes.Specular.value), attributes["Color Highlight"].value);
-      } else {
-        params.specular = new three_module.Color().setScalar(attributes.Specular.value);
-      }
-    }
-    if (params.specular && attributes.Glossiness) {
-      params.shininess = 7 + Math.pow(2, attributes.Glossiness.value * 12 + 2);
-    }
-  }
-  parseEnvMap(connections, maps, attributes) {
-    if (connections.envMap) {
-      const envMap = this.loadTexture(connections.envMap);
-      if (attributes.transparent && attributes.opacity < 0.999) {
-        envMap.mapping = three_module.EquirectangularRefractionMapping;
-        if (attributes.reflectivity !== void 0) {
-          delete attributes.reflectivity;
-          delete attributes.combine;
-        }
-        if (attributes.metalness !== void 0) {
-          delete attributes.metalness;
-        }
-      } else {
-        envMap.mapping = three_module.EquirectangularReflectionMapping;
-      }
-      maps.envMap = envMap;
-    }
-  }
-  // get texture defined at top level by its index
-  getTexturePathByIndex(index) {
-    let fileName = "";
-    if (!_lwoTree.textures)
-      return fileName;
-    _lwoTree.textures.forEach(function(texture) {
-      if (texture.index === index)
-        fileName = texture.fileName;
-    });
-    return fileName;
-  }
-  loadTexture(path) {
-    if (!path)
-      return null;
-    const texture = this.textureLoader.load(path, void 0, void 0, function() {
-      console.warn(
-        "LWOLoader: non-standard resource hierarchy. Use `resourcePath` parameter to specify root content directory."
-      );
-    });
-    return texture;
-  }
-  // 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge
-  getWrappingType(num) {
-    switch (num) {
-      case 0:
-        console.warn('LWOLoader: "Reset" texture wrapping type is not supported in three.js');
-        return three_module.ClampToEdgeWrapping;
-      case 1:
-        return three_module.RepeatWrapping;
-      case 2:
-        return three_module.MirroredRepeatWrapping;
-      case 3:
-        return three_module.ClampToEdgeWrapping;
-    }
-  }
-  getMaterialType(nodeData) {
-    if (nodeData.Clearcoat && nodeData.Clearcoat.value > 0)
-      return three_module.MeshPhysicalMaterial;
-    if (nodeData.Roughness)
-      return three_module.MeshStandardMaterial;
-    return three_module.MeshPhongMaterial;
-  }
-}
-class GeometryParser {
-  parse(geoData, layer) {
-    const geometry = new three_module.BufferGeometry();
-    geometry.setAttribute("position", new three_module.Float32BufferAttribute(geoData.points, 3));
-    const indices = this.splitIndices(geoData.vertexIndices, geoData.polygonDimensions);
-    geometry.setIndex(indices);
-    this.parseGroups(geometry, geoData);
-    geometry.computeVertexNormals();
-    this.parseUVs(geometry, layer, indices);
-    this.parseMorphTargets(geometry, layer, indices);
-    geometry.translate(-layer.pivot[0], -layer.pivot[1], -layer.pivot[2]);
-    return geometry;
-  }
-  // split quads into tris
-  splitIndices(indices, polygonDimensions) {
-    const remappedIndices = [];
-    let i = 0;
-    polygonDimensions.forEach(function(dim) {
-      if (dim < 4) {
-        for (let k = 0; k < dim; k++)
-          remappedIndices.push(indices[i + k]);
-      } else if (dim === 4) {
-        remappedIndices.push(
-          indices[i],
-          indices[i + 1],
-          indices[i + 2],
-          indices[i],
-          indices[i + 2],
-          indices[i + 3]
-        );
-      } else if (dim > 4) {
-        for (let k = 1; k < dim - 1; k++) {
-          remappedIndices.push(indices[i], indices[i + k], indices[i + k + 1]);
-        }
-        console.warn("LWOLoader: polygons with greater than 4 sides are not supported");
-      }
-      i += dim;
-    });
-    return remappedIndices;
-  }
-  // NOTE: currently ignoring poly indices and assuming that they are intelligently ordered
-  parseGroups(geometry, geoData) {
-    const tags = _lwoTree.tags;
-    const matNames = [];
-    let elemSize = 3;
-    if (geoData.type === "lines")
-      elemSize = 2;
-    if (geoData.type === "points")
-      elemSize = 1;
-    const remappedIndices = this.splitMaterialIndices(geoData.polygonDimensions, geoData.materialIndices);
-    let indexNum = 0;
-    const indexPairs = {};
-    let prevMaterialIndex;
-    let materialIndex;
-    let prevStart = 0;
-    let currentCount = 0;
-    for (let i = 0; i < remappedIndices.length; i += 2) {
-      materialIndex = remappedIndices[i + 1];
-      if (i === 0)
-        matNames[indexNum] = tags[materialIndex];
-      if (prevMaterialIndex === void 0)
-        prevMaterialIndex = materialIndex;
-      if (materialIndex !== prevMaterialIndex) {
-        let currentIndex;
-        if (indexPairs[tags[prevMaterialIndex]]) {
-          currentIndex = indexPairs[tags[prevMaterialIndex]];
-        } else {
-          currentIndex = indexNum;
-          indexPairs[tags[prevMaterialIndex]] = indexNum;
-          matNames[indexNum] = tags[prevMaterialIndex];
-          indexNum++;
-        }
-        geometry.addGroup(prevStart, currentCount, currentIndex);
-        prevStart += currentCount;
-        prevMaterialIndex = materialIndex;
-        currentCount = 0;
-      }
-      currentCount += elemSize;
-    }
-    if (geometry.groups.length > 0) {
-      let currentIndex;
-      if (indexPairs[tags[materialIndex]]) {
-        currentIndex = indexPairs[tags[materialIndex]];
-      } else {
-        currentIndex = indexNum;
-        indexPairs[tags[materialIndex]] = indexNum;
-        matNames[indexNum] = tags[materialIndex];
-      }
-      geometry.addGroup(prevStart, currentCount, currentIndex);
-    }
-    geometry.userData.matNames = matNames;
-  }
-  splitMaterialIndices(polygonDimensions, indices) {
-    const remappedIndices = [];
-    polygonDimensions.forEach(function(dim, i) {
-      if (dim <= 3) {
-        remappedIndices.push(indices[i * 2], indices[i * 2 + 1]);
-      } else if (dim === 4) {
-        remappedIndices.push(indices[i * 2], indices[i * 2 + 1], indices[i * 2], indices[i * 2 + 1]);
-      } else {
-        for (let k = 0; k < dim - 2; k++) {
-          remappedIndices.push(indices[i * 2], indices[i * 2 + 1]);
-        }
-      }
-    });
-    return remappedIndices;
-  }
-  // UV maps:
-  // 1: are defined via index into an array of points, not into a geometry
-  // - the geometry is also defined by an index into this array, but the indexes may not match
-  // 2: there can be any number of UV maps for a single geometry. Here these are combined,
-  // 	with preference given to the first map encountered
-  // 3: UV maps can be partial - that is, defined for only a part of the geometry
-  // 4: UV maps can be VMAP or VMAD (discontinuous, to allow for seams). In practice, most
-  // UV maps are defined as partially VMAP and partially VMAD
-  // VMADs are currently not supported
-  parseUVs(geometry, layer) {
-    const remappedUVs = Array.from(Array(geometry.attributes.position.count * 2), function() {
-      return 0;
-    });
-    for (const name in layer.uvs) {
-      const uvs = layer.uvs[name].uvs;
-      const uvIndices = layer.uvs[name].uvIndices;
-      uvIndices.forEach(function(i, j) {
-        remappedUVs[i * 2] = uvs[j * 2];
-        remappedUVs[i * 2 + 1] = uvs[j * 2 + 1];
-      });
-    }
-    geometry.setAttribute("uv", new three_module.Float32BufferAttribute(remappedUVs, 2));
-  }
-  parseMorphTargets(geometry, layer) {
-    let num = 0;
-    for (const name in layer.morphTargets) {
-      const remappedPoints = geometry.attributes.position.array.slice();
-      if (!geometry.morphAttributes.position)
-        geometry.morphAttributes.position = [];
-      const morphPoints = layer.morphTargets[name].points;
-      const morphIndices = layer.morphTargets[name].indices;
-      const type = layer.morphTargets[name].type;
-      morphIndices.forEach(function(i, j) {
-        if (type === "relative") {
-          remappedPoints[i * 3] += morphPoints[j * 3];
-          remappedPoints[i * 3 + 1] += morphPoints[j * 3 + 1];
-          remappedPoints[i * 3 + 2] += morphPoints[j * 3 + 2];
-        } else {
-          remappedPoints[i * 3] = morphPoints[j * 3];
-          remappedPoints[i * 3 + 1] = morphPoints[j * 3 + 1];
-          remappedPoints[i * 3 + 2] = morphPoints[j * 3 + 2];
-        }
-      });
-      geometry.morphAttributes.position[num] = new three_module.Float32BufferAttribute(remappedPoints, 3);
-      geometry.morphAttributes.position[num].name = name;
-      num++;
-    }
-    geometry.morphTargetsRelative = false;
-  }
-}
-function extractParentUrl(url, dir) {
-  const index = url.indexOf(dir);
-  if (index === -1)
-    return "./";
-  return url.substr(0, index);
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/PLYLoader.js
-
-class PLYLoader extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.propertyNameMapping = {};
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(this.requestHeader);
-    loader.setWithCredentials(this.withCredentials);
-    loader.load(
-      url,
-      function(text) {
-        try {
-          onLoad(scope.parse(text));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  setPropertyNameMapping(mapping) {
-    this.propertyNameMapping = mapping;
-  }
-  parse(data) {
-    function parseHeader(data2) {
-      const patternHeader = /ply([\s\S]*)end_header\r?\n/;
-      let headerText = "";
-      let headerLength = 0;
-      const result = patternHeader.exec(data2);
-      if (result !== null) {
-        headerText = result[1];
-        headerLength = new Blob([result[0]]).size;
-      }
-      const header = {
-        comments: [],
-        elements: [],
-        headerLength,
-        objInfo: ""
-      };
-      const lines = headerText.split("\n");
-      let currentElement;
-      function make_ply_element_property(propertValues, propertyNameMapping) {
-        const property = { type: propertValues[0] };
-        if (property.type === "list") {
-          property.name = propertValues[3];
-          property.countType = propertValues[1];
-          property.itemType = propertValues[2];
-        } else {
-          property.name = propertValues[1];
-        }
-        if (property.name in propertyNameMapping) {
-          property.name = propertyNameMapping[property.name];
-        }
-        return property;
-      }
-      for (let i = 0; i < lines.length; i++) {
-        let line = lines[i];
-        line = line.trim();
-        if (line === "")
-          continue;
-        const lineValues = line.split(/\s+/);
-        const lineType = lineValues.shift();
-        line = lineValues.join(" ");
-        switch (lineType) {
-          case "format":
-            header.format = lineValues[0];
-            header.version = lineValues[1];
-            break;
-          case "comment":
-            header.comments.push(line);
-            break;
-          case "element":
-            if (currentElement !== void 0) {
-              header.elements.push(currentElement);
-            }
-            currentElement = {};
-            currentElement.name = lineValues[0];
-            currentElement.count = parseInt(lineValues[1]);
-            currentElement.properties = [];
-            break;
-          case "property":
-            currentElement.properties.push(make_ply_element_property(lineValues, scope.propertyNameMapping));
-            break;
-          case "obj_info":
-            header.objInfo = line;
-            break;
-          default:
-            console.log("unhandled", lineType, lineValues);
-        }
-      }
-      if (currentElement !== void 0) {
-        header.elements.push(currentElement);
-      }
-      return header;
-    }
-    function parseASCIINumber(n, type) {
-      switch (type) {
-        case "char":
-        case "uchar":
-        case "short":
-        case "ushort":
-        case "int":
-        case "uint":
-        case "int8":
-        case "uint8":
-        case "int16":
-        case "uint16":
-        case "int32":
-        case "uint32":
-          return parseInt(n);
-        case "float":
-        case "double":
-        case "float32":
-        case "float64":
-          return parseFloat(n);
-      }
-    }
-    function parseASCIIElement(properties, line) {
-      const values = line.split(/\s+/);
-      const element = {};
-      for (let i = 0; i < properties.length; i++) {
-        if (properties[i].type === "list") {
-          const list = [];
-          const n = parseASCIINumber(values.shift(), properties[i].countType);
-          for (let j = 0; j < n; j++) {
-            list.push(parseASCIINumber(values.shift(), properties[i].itemType));
-          }
-          element[properties[i].name] = list;
-        } else {
-          element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);
-        }
-      }
-      return element;
-    }
-    function parseASCII(data2, header) {
-      const buffer = {
-        indices: [],
-        vertices: [],
-        normals: [],
-        uvs: [],
-        faceVertexUvs: [],
-        colors: []
-      };
-      let result;
-      const patternBody = /end_header\s([\s\S]*)$/;
-      let body = "";
-      if ((result = patternBody.exec(data2)) !== null) {
-        body = result[1];
-      }
-      const lines = body.split("\n");
-      let currentElement = 0;
-      let currentElementCount = 0;
-      for (let i = 0; i < lines.length; i++) {
-        let line = lines[i];
-        line = line.trim();
-        if (line === "") {
-          continue;
-        }
-        if (currentElementCount >= header.elements[currentElement].count) {
-          currentElement++;
-          currentElementCount = 0;
-        }
-        const element = parseASCIIElement(header.elements[currentElement].properties, line);
-        handleElement(buffer, header.elements[currentElement].name, element);
-        currentElementCount++;
-      }
-      return postProcess(buffer);
-    }
-    function postProcess(buffer) {
-      let geometry2 = new three_module.BufferGeometry();
-      if (buffer.indices.length > 0) {
-        geometry2.setIndex(buffer.indices);
-      }
-      geometry2.setAttribute("position", new three_module.Float32BufferAttribute(buffer.vertices, 3));
-      if (buffer.normals.length > 0) {
-        geometry2.setAttribute("normal", new three_module.Float32BufferAttribute(buffer.normals, 3));
-      }
-      if (buffer.uvs.length > 0) {
-        geometry2.setAttribute("uv", new three_module.Float32BufferAttribute(buffer.uvs, 2));
-      }
-      if (buffer.colors.length > 0) {
-        geometry2.setAttribute("color", new three_module.Float32BufferAttribute(buffer.colors, 3));
-      }
-      if (buffer.faceVertexUvs.length > 0) {
-        geometry2 = geometry2.toNonIndexed();
-        geometry2.setAttribute("uv", new three_module.Float32BufferAttribute(buffer.faceVertexUvs, 2));
-      }
-      geometry2.computeBoundingSphere();
-      return geometry2;
-    }
-    function handleElement(buffer, elementName, element) {
-      if (elementName === "vertex") {
-        buffer.vertices.push(element.x, element.y, element.z);
-        if ("nx" in element && "ny" in element && "nz" in element) {
-          buffer.normals.push(element.nx, element.ny, element.nz);
-        }
-        if ("s" in element && "t" in element) {
-          buffer.uvs.push(element.s, element.t);
-        }
-        if ("red" in element && "green" in element && "blue" in element) {
-          buffer.colors.push(element.red / 255, element.green / 255, element.blue / 255);
-        }
-      } else if (elementName === "face") {
-        const vertex_indices = element.vertex_indices || element.vertex_index;
-        const texcoord = element.texcoord;
-        if (vertex_indices.length === 3) {
-          buffer.indices.push(vertex_indices[0], vertex_indices[1], vertex_indices[2]);
-          if (texcoord && texcoord.length === 6) {
-            buffer.faceVertexUvs.push(texcoord[0], texcoord[1]);
-            buffer.faceVertexUvs.push(texcoord[2], texcoord[3]);
-            buffer.faceVertexUvs.push(texcoord[4], texcoord[5]);
-          }
-        } else if (vertex_indices.length === 4) {
-          buffer.indices.push(vertex_indices[0], vertex_indices[1], vertex_indices[3]);
-          buffer.indices.push(vertex_indices[1], vertex_indices[2], vertex_indices[3]);
-        }
-      }
-    }
-    function binaryRead(dataview, at, type, little_endian) {
-      switch (type) {
-        case "int8":
-        case "char":
-          return [dataview.getInt8(at), 1];
-        case "uint8":
-        case "uchar":
-          return [dataview.getUint8(at), 1];
-        case "int16":
-        case "short":
-          return [dataview.getInt16(at, little_endian), 2];
-        case "uint16":
-        case "ushort":
-          return [dataview.getUint16(at, little_endian), 2];
-        case "int32":
-        case "int":
-          return [dataview.getInt32(at, little_endian), 4];
-        case "uint32":
-        case "uint":
-          return [dataview.getUint32(at, little_endian), 4];
-        case "float32":
-        case "float":
-          return [dataview.getFloat32(at, little_endian), 4];
-        case "float64":
-        case "double":
-          return [dataview.getFloat64(at, little_endian), 8];
-      }
-    }
-    function binaryReadElement(dataview, at, properties, little_endian) {
-      const element = {};
-      let result, read = 0;
-      for (let i = 0; i < properties.length; i++) {
-        if (properties[i].type === "list") {
-          const list = [];
-          result = binaryRead(dataview, at + read, properties[i].countType, little_endian);
-          const n = result[0];
-          read += result[1];
-          for (let j = 0; j < n; j++) {
-            result = binaryRead(dataview, at + read, properties[i].itemType, little_endian);
-            list.push(result[0]);
-            read += result[1];
-          }
-          element[properties[i].name] = list;
-        } else {
-          result = binaryRead(dataview, at + read, properties[i].type, little_endian);
-          element[properties[i].name] = result[0];
-          read += result[1];
-        }
-      }
-      return [element, read];
-    }
-    function parseBinary(data2, header) {
-      const buffer = {
-        indices: [],
-        vertices: [],
-        normals: [],
-        uvs: [],
-        faceVertexUvs: [],
-        colors: []
-      };
-      const little_endian = header.format === "binary_little_endian";
-      const body = new DataView(data2, header.headerLength);
-      let result, loc = 0;
-      for (let currentElement = 0; currentElement < header.elements.length; currentElement++) {
-        for (let currentElementCount = 0; currentElementCount < header.elements[currentElement].count; currentElementCount++) {
-          result = binaryReadElement(body, loc, header.elements[currentElement].properties, little_endian);
-          loc += result[1];
-          const element = result[0];
-          handleElement(buffer, header.elements[currentElement].name, element);
-        }
-      }
-      return postProcess(buffer);
-    }
-    let geometry;
-    const scope = this;
-    if (data instanceof ArrayBuffer) {
-      const text = three_module.LoaderUtils.decodeText(new Uint8Array(data));
-      const header = parseHeader(text);
-      geometry = header.format === "ascii" ? parseASCII(text, header) : parseBinary(data, header);
-    } else {
-      geometry = parseASCII(data, parseHeader(data));
-    }
-    return geometry;
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/lines/LineSegmentsGeometry.js
-var LineSegmentsGeometry = __webpack_require__(3415);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/lines/LineGeometry.js
-var LineGeometry = __webpack_require__(51815);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/lines/LineMaterial.js
-var LineMaterial = __webpack_require__(10977);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/lines/Wireframe.js
-
-
-
-const _start = /* @__PURE__ */ new three_module.Vector3();
-const _end = /* @__PURE__ */ new three_module.Vector3();
-class Wireframe extends three_module.Mesh {
-  constructor(geometry = new LineSegmentsGeometry/* LineSegmentsGeometry */.z(), material = new LineMaterial/* LineMaterial */.Y({ color: Math.random() * 16777215 })) {
-    super(geometry, material);
-    this.isWireframe = true;
-    this.type = "Wireframe";
-  }
-  // for backwards-compatibility, but could be a method of LineSegmentsGeometry...
-  computeLineDistances() {
-    const geometry = this.geometry;
-    const instanceStart = geometry.attributes.instanceStart;
-    const instanceEnd = geometry.attributes.instanceEnd;
-    const lineDistances = new Float32Array(2 * instanceStart.count);
-    for (let i = 0, j = 0, l = instanceStart.count; i < l; i++, j += 2) {
-      _start.fromBufferAttribute(instanceStart, i);
-      _end.fromBufferAttribute(instanceEnd, i);
-      lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1];
-      lineDistances[j + 1] = lineDistances[j] + _start.distanceTo(_end);
-    }
-    const instanceDistanceBuffer = new three_module.InstancedInterleavedBuffer(lineDistances, 2, 1);
-    geometry.setAttribute("instanceDistanceStart", new three_module.InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0));
-    geometry.setAttribute("instanceDistanceEnd", new three_module.InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1));
-    return this;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/lines/WireframeGeometry2.js
-
-
-class WireframeGeometry2 extends LineSegmentsGeometry/* LineSegmentsGeometry */.z {
-  constructor(geometry) {
-    super();
-    this.isWireframeGeometry2 = true;
-    this.type = "WireframeGeometry2";
-    this.fromWireframeGeometry(new three_module.WireframeGeometry(geometry));
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/lines/Line2.js
-var Line2 = __webpack_require__(43075);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/lines/LineSegments2.js
-var LineSegments2 = __webpack_require__(21939);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/helpers/LightProbeHelper.js
-
-class LightProbeHelper extends three_module.Mesh {
-  constructor(lightProbe, size) {
-    const material = new three_module.ShaderMaterial({
-      type: "LightProbeHelperMaterial",
-      uniforms: {
-        sh: { value: lightProbe.sh.coefficients },
-        // by reference
-        intensity: { value: lightProbe.intensity }
-      },
-      vertexShader: [
-        "varying vec3 vNormal;",
-        "void main() {",
-        "	vNormal = normalize( normalMatrix * normal );",
-        "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-        "}"
-      ].join("\n"),
-      fragmentShader: [
-        "#define RECIPROCAL_PI 0.318309886",
-        "vec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {",
-        "	// matrix is assumed to be orthogonal",
-        "	return normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );",
-        "}",
-        "// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf",
-        "vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {",
-        "	// normal is assumed to have unit length",
-        "	float x = normal.x, y = normal.y, z = normal.z;",
-        "	// band 0",
-        "	vec3 result = shCoefficients[ 0 ] * 0.886227;",
-        "	// band 1",
-        "	result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;",
-        "	result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;",
-        "	result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;",
-        "	// band 2",
-        "	result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;",
-        "	result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;",
-        "	result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );",
-        "	result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;",
-        "	result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );",
-        "	return result;",
-        "}",
-        "uniform vec3 sh[ 9 ]; // sh coefficients",
-        "uniform float intensity; // light probe intensity",
-        "varying vec3 vNormal;",
-        "void main() {",
-        "	vec3 normal = normalize( vNormal );",
-        "	vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );",
-        "	vec3 irradiance = shGetIrradianceAt( worldNormal, sh );",
-        "	vec3 outgoingLight = RECIPROCAL_PI * irradiance * intensity;",
-        "	gl_FragColor = linearToOutputTexel( vec4( outgoingLight, 1.0 ) );",
-        "}"
-      ].join("\n")
-    });
-    const geometry = new three_module.SphereGeometry(1, 32, 16);
-    super(geometry, material);
-    this.lightProbe = lightProbe;
-    this.size = size;
-    this.type = "LightProbeHelper";
-    this.onBeforeRender();
-  }
-  dispose() {
-    this.geometry.dispose();
-    this.material.dispose();
-  }
-  onBeforeRender() {
-    this.position.copy(this.lightProbe.position);
-    this.scale.set(1, 1, 1).multiplyScalar(this.size);
-    this.material.uniforms.intensity.value = this.lightProbe.intensity;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/helpers/VertexTangentsHelper.js
-
-const VertexTangentsHelper_v1 = /* @__PURE__ */ new three_module.Vector3();
-const VertexTangentsHelper_v2 = /* @__PURE__ */ new three_module.Vector3();
-class VertexTangentsHelper extends three_module.LineSegments {
-  constructor(object, size = 1, color = 65535) {
-    const geometry = new three_module.BufferGeometry();
-    const nTangents = object.geometry.attributes.tangent.count;
-    const positions = new three_module.Float32BufferAttribute(nTangents * 2 * 3, 3);
-    geometry.setAttribute("position", positions);
-    super(geometry, new three_module.LineBasicMaterial({ color, toneMapped: false }));
-    this.object = object;
-    this.size = size;
-    this.type = "VertexTangentsHelper";
-    this.matrixAutoUpdate = false;
-    this.update();
-  }
-  update() {
-    this.object.updateMatrixWorld(true);
-    const matrixWorld = this.object.matrixWorld;
-    const position = this.geometry.attributes.position;
-    const objGeometry = this.object.geometry;
-    const objPos = objGeometry.attributes.position;
-    const objTan = objGeometry.attributes.tangent;
-    let idx = 0;
-    for (let j = 0, jl = objPos.count; j < jl; j++) {
-      VertexTangentsHelper_v1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld);
-      VertexTangentsHelper_v2.fromBufferAttribute(objTan, j);
-      VertexTangentsHelper_v2.transformDirection(matrixWorld).multiplyScalar(this.size).add(VertexTangentsHelper_v1);
-      position.setXYZ(idx, VertexTangentsHelper_v1.x, VertexTangentsHelper_v1.y, VertexTangentsHelper_v1.z);
-      idx = idx + 1;
-      position.setXYZ(idx, VertexTangentsHelper_v2.x, VertexTangentsHelper_v2.y, VertexTangentsHelper_v2.z);
-      idx = idx + 1;
-    }
-    position.needsUpdate = true;
-  }
-  dispose() {
-    this.geometry.dispose();
-    this.material.dispose();
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/helpers/PositionalAudioHelper.js
-
-class PositionalAudioHelper extends three_module.Line {
-  constructor(audio, range = 1, divisionsInnerAngle = 16, divisionsOuterAngle = 2) {
-    const geometry = new three_module.BufferGeometry();
-    const divisions = divisionsInnerAngle + divisionsOuterAngle * 2;
-    const positions = new Float32Array((divisions * 3 + 3) * 3);
-    geometry.setAttribute("position", new three_module.BufferAttribute(positions, 3));
-    const materialInnerAngle = new three_module.LineBasicMaterial({ color: 65280 });
-    const materialOuterAngle = new three_module.LineBasicMaterial({ color: 16776960 });
-    super(geometry, [materialOuterAngle, materialInnerAngle]);
-    this.type = "PositionalAudioHelper";
-    this.audio = audio;
-    this.range = range;
-    this.divisionsInnerAngle = divisionsInnerAngle;
-    this.divisionsOuterAngle = divisionsOuterAngle;
-    this.update();
-  }
-  update() {
-    const audio = this.audio;
-    const range = this.range;
-    const divisionsInnerAngle = this.divisionsInnerAngle;
-    const divisionsOuterAngle = this.divisionsOuterAngle;
-    const coneInnerAngle = three_module.MathUtils.degToRad(audio.panner.coneInnerAngle);
-    const coneOuterAngle = three_module.MathUtils.degToRad(audio.panner.coneOuterAngle);
-    const halfConeInnerAngle = coneInnerAngle / 2;
-    const halfConeOuterAngle = coneOuterAngle / 2;
-    let start = 0;
-    let count = 0;
-    let i, stride;
-    const geometry = this.geometry;
-    const positionAttribute = geometry.attributes.position;
-    geometry.clearGroups();
-    function generateSegment(from, to, divisions, materialIndex) {
-      const step = (to - from) / divisions;
-      positionAttribute.setXYZ(start, 0, 0, 0);
-      count++;
-      for (i = from; i < to; i += step) {
-        stride = start + count;
-        positionAttribute.setXYZ(stride, Math.sin(i) * range, 0, Math.cos(i) * range);
-        positionAttribute.setXYZ(
-          stride + 1,
-          Math.sin(Math.min(i + step, to)) * range,
-          0,
-          Math.cos(Math.min(i + step, to)) * range
-        );
-        positionAttribute.setXYZ(stride + 2, 0, 0, 0);
-        count += 3;
-      }
-      geometry.addGroup(start, count, materialIndex);
-      start += count;
-      count = 0;
-    }
-    generateSegment(-halfConeOuterAngle, -halfConeInnerAngle, divisionsOuterAngle, 0);
-    generateSegment(-halfConeInnerAngle, halfConeInnerAngle, divisionsInnerAngle, 1);
-    generateSegment(halfConeInnerAngle, halfConeOuterAngle, divisionsOuterAngle, 0);
-    positionAttribute.needsUpdate = true;
-    if (coneInnerAngle === coneOuterAngle)
-      this.material[0].visible = false;
-  }
-  dispose() {
-    this.geometry.dispose();
-    this.material[0].dispose();
-    this.material[1].dispose();
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/helpers/VertexNormalsHelper.js
-
-const VertexNormalsHelper_v1 = /* @__PURE__ */ new three_module.Vector3();
-const VertexNormalsHelper_v2 = /* @__PURE__ */ new three_module.Vector3();
-const _normalMatrix = /* @__PURE__ */ new three_module.Matrix3();
-class VertexNormalsHelper extends three_module.LineSegments {
-  constructor(object, size = 1, color = 16711680) {
-    const geometry = new three_module.BufferGeometry();
-    const nNormals = object.geometry.attributes.normal.count;
-    const positions = new three_module.Float32BufferAttribute(nNormals * 2 * 3, 3);
-    geometry.setAttribute("position", positions);
-    super(geometry, new three_module.LineBasicMaterial({ color, toneMapped: false }));
-    this.object = object;
-    this.size = size;
-    this.type = "VertexNormalsHelper";
-    this.matrixAutoUpdate = false;
-    this.update();
-  }
-  update() {
-    this.object.updateMatrixWorld(true);
-    _normalMatrix.getNormalMatrix(this.object.matrixWorld);
-    const matrixWorld = this.object.matrixWorld;
-    const position = this.geometry.attributes.position;
-    const objGeometry = this.object.geometry;
-    if (objGeometry) {
-      const objPos = objGeometry.attributes.position;
-      const objNorm = objGeometry.attributes.normal;
-      let idx = 0;
-      for (let j = 0, jl = objPos.count; j < jl; j++) {
-        VertexNormalsHelper_v1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld);
-        VertexNormalsHelper_v2.fromBufferAttribute(objNorm, j);
-        VertexNormalsHelper_v2.applyMatrix3(_normalMatrix).normalize().multiplyScalar(this.size).add(VertexNormalsHelper_v1);
-        position.setXYZ(idx, VertexNormalsHelper_v1.x, VertexNormalsHelper_v1.y, VertexNormalsHelper_v1.z);
-        idx = idx + 1;
-        position.setXYZ(idx, VertexNormalsHelper_v2.x, VertexNormalsHelper_v2.y, VertexNormalsHelper_v2.z);
-        idx = idx + 1;
-      }
-    }
-    position.needsUpdate = true;
-  }
-  dispose() {
-    this.geometry.dispose();
-    this.material.dispose();
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/helpers/RectAreaLightHelper.js
-
-class RectAreaLightHelper extends three_module.Line {
-  constructor(light, color) {
-    const positions = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0];
-    const geometry = new three_module.BufferGeometry();
-    geometry.setAttribute("position", new three_module.Float32BufferAttribute(positions, 3));
-    geometry.computeBoundingSphere();
-    const material = new three_module.LineBasicMaterial({ fog: false });
-    super(geometry, material);
-    this.light = light;
-    this.color = color;
-    this.type = "RectAreaLightHelper";
-    const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0];
-    const geometry2 = new three_module.BufferGeometry();
-    geometry2.setAttribute("position", new three_module.Float32BufferAttribute(positions2, 3));
-    geometry2.computeBoundingSphere();
-    this.add(new three_module.Mesh(geometry2, new three_module.MeshBasicMaterial({ side: three_module.BackSide, fog: false })));
-  }
-  updateMatrixWorld() {
-    this.scale.set(0.5 * this.light.width, 0.5 * this.light.height, 1);
-    if (this.color !== void 0) {
-      this.material.color.set(this.color);
-      this.children[0].material.color.set(this.color);
-    } else {
-      this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);
-      const c = this.material.color;
-      const max = Math.max(c.r, c.g, c.b);
-      if (max > 1)
-        c.multiplyScalar(1 / max);
-      this.children[0].material.color.copy(this.material.color);
-    }
-    this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld);
-    this.children[0].matrixWorld.copy(this.matrixWorld);
-  }
-  dispose() {
-    this.geometry.dispose();
-    this.material.dispose();
-    this.children[0].geometry.dispose();
-    this.children[0].material.dispose();
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/lights/RectAreaLightUniformsLib.js
-
-class RectAreaLightUniformsLib {
-  static init() {
-    const LTC_MAT_1 = [
-      1,
-      0,
-      0,
-      2e-5,
-      1,
-      0,
-      0,
-      503905e-9,
-      1,
-      0,
-      0,
-      201562e-8,
-      1,
-      0,
-      0,
-      453516e-8,
-      1,
-      0,
-      0,
-      806253e-8,
-      1,
-      0,
-      0,
-      0.0125978,
-      1,
-      0,
-      0,
-      0.018141,
-      1,
-      0,
-      0,
-      0.0246924,
-      1,
-      0,
-      0,
-      0.0322525,
-      1,
-      0,
-      0,
-      0.0408213,
-      1,
-      0,
-      0,
-      0.0503999,
-      1,
-      0,
-      0,
-      0.0609894,
-      1,
-      0,
-      0,
-      0.0725906,
-      1,
-      0,
-      0,
-      0.0852058,
-      1,
-      0,
-      0,
-      0.0988363,
-      1,
-      0,
-      0,
-      0.113484,
-      1,
-      0,
-      0,
-      0.129153,
-      1,
-      0,
-      0,
-      0.145839,
-      1,
-      0,
-      0,
-      0.163548,
-      1,
-      0,
-      0,
-      0.182266,
-      1,
-      0,
-      0,
-      0.201942,
-      1,
-      0,
-      0,
-      0.222314,
-      1,
-      0,
-      0,
-      0.241906,
-      1,
-      0,
-      0,
-      0.262314,
-      1,
-      0,
-      0,
-      0.285754,
-      1,
-      0,
-      0,
-      0.310159,
-      1,
-      0,
-      0,
-      0.335426,
-      1,
-      0,
-      0,
-      0.361341,
-      1,
-      0,
-      0,
-      0.387445,
-      1,
-      0,
-      0,
-      0.412784,
-      1,
-      0,
-      0,
-      0.438197,
-      1,
-      0,
-      0,
-      0.466966,
-      1,
-      0,
-      0,
-      0.49559,
-      1,
-      0,
-      0,
-      0.523448,
-      1,
-      0,
-      0,
-      0.549938,
-      1,
-      0,
-      0,
-      0.57979,
-      1,
-      0,
-      0,
-      0.608746,
-      1,
-      0,
-      0,
-      0.636185,
-      1,
-      0,
-      0,
-      0.664748,
-      1,
-      0,
-      0,
-      0.69313,
-      1,
-      0,
-      0,
-      0.71966,
-      1,
-      0,
-      0,
-      0.747662,
-      1,
-      0,
-      0,
-      0.774023,
-      1,
-      0,
-      0,
-      0.799775,
-      1,
-      0,
-      0,
-      0.825274,
-      1,
-      0,
-      0,
-      0.849156,
-      1,
-      0,
-      0,
-      0.873248,
-      1,
-      0,
-      0,
-      0.89532,
-      1,
-      0,
-      0,
-      0.917565,
-      1,
-      0,
-      0,
-      0.937863,
-      1,
-      0,
-      0,
-      0.958139,
-      1,
-      0,
-      0,
-      0.976563,
-      1,
-      0,
-      0,
-      0.994658,
-      1,
-      0,
-      0,
-      1.0112,
-      1,
-      0,
-      0,
-      1.02712,
-      1,
-      0,
-      0,
-      1.04189,
-      1,
-      0,
-      0,
-      1.05568,
-      1,
-      0,
-      0,
-      1.06877,
-      1,
-      0,
-      0,
-      1.08058,
-      1,
-      0,
-      0,
-      1.09194,
-      1,
-      0,
-      0,
-      1.10191,
-      1,
-      0,
-      0,
-      1.11161,
-      1,
-      0,
-      0,
-      1.1199,
-      1,
-      0,
-      0,
-      1.12813,
-      0.999547,
-      -448815e-12,
-      0.0224417,
-      199902e-10,
-      0.999495,
-      -113079e-10,
-      0.0224406,
-      503651e-9,
-      0.999496,
-      -452317e-10,
-      0.0224406,
-      201461e-8,
-      0.999496,
-      -101772e-9,
-      0.0224406,
-      453287e-8,
-      0.999495,
-      -180928e-9,
-      0.0224406,
-      805845e-8,
-      0.999497,
-      -282702e-9,
-      0.0224406,
-      0.0125914,
-      0.999496,
-      -407096e-9,
-      0.0224406,
-      0.0181319,
-      0.999498,
-      -554114e-9,
-      0.0224406,
-      0.02468,
-      0.999499,
-      -723768e-9,
-      0.0224406,
-      0.0322363,
-      0.999495,
-      -916058e-9,
-      0.0224405,
-      0.0408009,
-      0.999499,
-      -113101e-8,
-      0.0224408,
-      0.050375,
-      0.999494,
-      -136863e-8,
-      0.0224405,
-      0.0609586,
-      0.999489,
-      -162896e-8,
-      0.0224401,
-      0.0725537,
-      0.999489,
-      -191201e-8,
-      0.0224414,
-      0.0851619,
-      0.999498,
-      -221787e-8,
-      0.0224413,
-      0.0987867,
-      0.999492,
-      -254642e-8,
-      0.0224409,
-      0.113426,
-      0.999507,
-      -289779e-8,
-      0.0224417,
-      0.129088,
-      0.999494,
-      -32716e-7,
-      0.0224386,
-      0.145767,
-      0.999546,
-      -36673e-7,
-      0.0224424,
-      0.163472,
-      0.999543,
-      -408166e-8,
-      0.0224387,
-      0.182182,
-      0.999499,
-      -450056e-8,
-      0.0224338,
-      0.201843,
-      0.999503,
-      -483661e-8,
-      0.0224203,
-      0.222198,
-      0.999546,
-      -452928e-8,
-      0.022315,
-      0.241714,
-      0.999508,
-      -587403e-8,
-      0.0224329,
-      0.262184,
-      0.999509,
-      -638806e-8,
-      0.0224271,
-      0.285609,
-      0.999501,
-      -691028e-8,
-      0.0224166,
-      0.309998,
-      0.999539,
-      -741979e-8,
-      0.0223989,
-      0.335262,
-      0.999454,
-      -786282e-8,
-      0.0223675,
-      0.361154,
-      0.999529,
-      -811928e-8,
-      0.0222828,
-      0.387224,
-      0.999503,
-      -799941e-8,
-      0.0221063,
-      0.41252,
-      0.999561,
-      -952753e-8,
-      0.0223057,
-      0.438006,
-      0.999557,
-      -99134e-7,
-      0.0222065,
-      0.466735,
-      0.999541,
-      -0.0100935,
-      0.0220402,
-      0.495332,
-      0.999562,
-      -996821e-8,
-      0.0218067,
-      0.523197,
-      0.999556,
-      -0.0105031,
-      0.0217096,
-      0.550223,
-      0.999561,
-      -0.0114191,
-      0.0217215,
-      0.579498,
-      0.999588,
-      -0.0111818,
-      0.0213357,
-      0.608416,
-      0.999633,
-      -0.0107725,
-      0.0208689,
-      0.635965,
-      0.999527,
-      -0.0121671,
-      0.0210149,
-      0.664476,
-      0.999508,
-      -0.0116005,
-      0.020431,
-      0.692786,
-      0.999568,
-      -0.0115604,
-      0.0199791,
-      0.719709,
-      0.999671,
-      -0.0121117,
-      0.0197415,
-      0.74737,
-      0.999688,
-      -0.0110769,
-      0.0188846,
-      0.773692,
-      0.99962,
-      -0.0122368,
-      0.0188452,
-      0.799534,
-      0.999823,
-      -0.0110325,
-      0.0178001,
-      0.825046,
-      0.999599,
-      -0.0114923,
-      0.0174221,
-      0.849075,
-      0.999619,
-      -0.0105923,
-      0.0164345,
-      0.872999,
-      0.999613,
-      -0.0105988,
-      0.0158227,
-      0.895371,
-      0.99964,
-      -979861e-8,
-      0.0148131,
-      0.917364,
-      0.99977,
-      -967238e-8,
-      0.0140721,
-      0.938002,
-      0.999726,
-      -869175e-8,
-      0.0129543,
-      0.957917,
-      0.99973,
-      -866872e-8,
-      0.0122329,
-      0.976557,
-      0.999773,
-      -731956e-8,
-      0.0108958,
-      0.994459,
-      0.999811,
-      -756027e-8,
-      0.0102715,
-      1.01118,
-      0.999862,
-      -583732e-8,
-      878781e-8,
-      1.02701,
-      0.999835,
-      -631438e-8,
-      827529e-8,
-      1.04186,
-      0.999871,
-      -450785e-8,
-      674583e-8,
-      1.05569,
-      0.999867,
-      -486079e-8,
-      621041e-8,
-      1.06861,
-      0.999939,
-      -322072e-8,
-      478301e-8,
-      1.08064,
-      0.999918,
-      -318199e-8,
-      406395e-8,
-      1.09181,
-      1.00003,
-      -193348e-8,
-      280682e-8,
-      1.10207,
-      0.999928,
-      -153729e-8,
-      198741e-8,
-      1.11152,
-      0.999933,
-      -623666e-9,
-      917714e-9,
-      1.12009,
-      1,
-      -102387e-11,
-      907581e-12,
-      1.12813,
-      0.997866,
-      -896716e-12,
-      0.0448334,
-      199584e-10,
-      0.997987,
-      -225945e-10,
-      0.0448389,
-      502891e-9,
-      0.997987,
-      -903781e-10,
-      0.0448388,
-      201156e-8,
-      0.997985,
-      -203351e-9,
-      0.0448388,
-      452602e-8,
-      0.997986,
-      -361514e-9,
-      0.0448388,
-      804629e-8,
-      0.997987,
-      -56487e-8,
-      0.0448389,
-      0.0125724,
-      0.997988,
-      -813423e-9,
-      0.0448389,
-      0.0181045,
-      0.997984,
-      -110718e-8,
-      0.0448387,
-      0.0246427,
-      0.997985,
-      -144616e-8,
-      0.0448388,
-      0.0321875,
-      0.997987,
-      -183038e-8,
-      0.044839,
-      0.0407392,
-      0.997983,
-      -225987e-8,
-      0.0448387,
-      0.0502986,
-      0.997991,
-      -273467e-8,
-      0.0448389,
-      0.0608667,
-      0.997984,
-      -325481e-8,
-      0.0448384,
-      0.0724444,
-      0.998002,
-      -382043e-8,
-      0.044839,
-      0.0850348,
-      0.997997,
-      -443145e-8,
-      0.0448396,
-      0.0986372,
-      0.998007,
-      -508796e-8,
-      0.0448397,
-      0.113255,
-      0.998008,
-      -578985e-8,
-      0.04484,
-      0.128891,
-      0.998003,
-      -653683e-8,
-      0.0448384,
-      0.145548,
-      0.997983,
-      -732713e-8,
-      0.0448358,
-      0.163221,
-      0.997985,
-      -815454e-8,
-      0.0448358,
-      0.181899,
-      0.998005,
-      -898985e-8,
-      0.0448286,
-      0.201533,
-      0.998026,
-      -964404e-8,
-      0.0447934,
-      0.221821,
-      0.998055,
-      -922677e-8,
-      0.044611,
-      0.241282,
-      0.99804,
-      -0.0117361,
-      0.0448245,
-      0.261791,
-      0.998048,
-      -0.0127628,
-      0.0448159,
-      0.285181,
-      0.998088,
-      -0.0138055,
-      0.0447996,
-      0.30954,
-      0.998058,
-      -0.0148206,
-      0.0447669,
-      0.334751,
-      0.998099,
-      -0.0156998,
-      0.044697,
-      0.36061,
-      0.998116,
-      -0.0161976,
-      0.0445122,
-      0.386603,
-      0.998195,
-      -0.015945,
-      0.0441711,
-      0.411844,
-      0.998168,
-      -0.0183947,
-      0.0444255,
-      0.43773,
-      0.998184,
-      -0.0197913,
-      0.0443809,
-      0.466009,
-      0.998251,
-      -0.0201426,
-      0.0440689,
-      0.494574,
-      0.998305,
-      -0.0198847,
-      0.0435632,
-      0.522405,
-      0.998273,
-      -0.0210577,
-      0.043414,
-      0.549967,
-      0.998254,
-      -0.0227901,
-      0.0433943,
-      0.578655,
-      0.998349,
-      -0.0223108,
-      0.0426529,
-      0.60758,
-      0.99843,
-      -0.0223088,
-      0.042,
-      0.635524,
-      0.998373,
-      -0.0241141,
-      0.0418987,
-      0.663621,
-      0.998425,
-      -0.0231446,
-      0.0408118,
-      0.691906,
-      0.998504,
-      -0.0233684,
-      0.0400565,
-      0.719339,
-      0.998443,
-      -0.0241652,
-      0.0394634,
-      0.74643,
-      0.99848,
-      -0.0228715,
-      0.0380002,
-      0.773086,
-      0.998569,
-      -0.023519,
-      0.0372322,
-      0.798988,
-      0.998619,
-      -0.0223108,
-      0.0356468,
-      0.824249,
-      0.998594,
-      -0.0223105,
-      0.034523,
-      0.848808,
-      0.998622,
-      -0.0213426,
-      0.0328887,
-      0.87227,
-      0.998669,
-      -0.0207912,
-      0.0314374,
-      0.895157,
-      0.998705,
-      -0.0198416,
-      0.0296925,
-      0.916769,
-      0.998786,
-      -0.0189168,
-      0.0279634,
-      0.937773,
-      0.998888,
-      -0.0178811,
-      0.0261597,
-      0.957431,
-      0.99906,
-      -0.0166845,
-      0.0242159,
-      0.976495,
-      0.999038,
-      -0.0155464,
-      0.0222638,
-      0.994169,
-      0.999237,
-      -0.0141349,
-      0.0201967,
-      1.01112,
-      0.999378,
-      -0.0129324,
-      0.0181744,
-      1.02692,
-      0.999433,
-      -0.0113192,
-      0.0159898,
-      1.04174,
-      0.999439,
-      -0.0101244,
-      0.0140385,
-      1.05559,
-      0.999614,
-      -837456e-8,
-      0.0117826,
-      1.06852,
-      0.999722,
-      -721769e-8,
-      983745e-8,
-      1.08069,
-      0.999817,
-      -554067e-8,
-      769002e-8,
-      1.09176,
-      0.99983,
-      -426961e-8,
-      5782e-6,
-      1.10211,
-      0.999964,
-      -273904e-8,
-      374503e-8,
-      1.11152,
-      1.00001,
-      -136739e-8,
-      187176e-8,
-      1.12031,
-      0.999946,
-      393227e-10,
-      -28919e-9,
-      1.12804,
-      0.995847,
-      -13435e-10,
-      0.0671785,
-      19916e-9,
-      0.995464,
-      -338387e-10,
-      0.0671527,
-      501622e-9,
-      0.99547,
-      -135355e-9,
-      0.0671531,
-      200649e-8,
-      0.995471,
-      -30455e-8,
-      0.0671532,
-      451461e-8,
-      0.99547,
-      -541423e-9,
-      0.0671531,
-      8026e-6,
-      0.995471,
-      -84598e-8,
-      0.0671531,
-      0.0125407,
-      0.99547,
-      -121823e-8,
-      0.0671531,
-      0.0180589,
-      0.99547,
-      -165817e-8,
-      0.0671531,
-      0.0245806,
-      0.995463,
-      -216583e-8,
-      0.0671526,
-      0.0321062,
-      0.995468,
-      -274127e-8,
-      0.0671527,
-      0.0406366,
-      0.995474,
-      -338447e-8,
-      0.0671534,
-      0.0501717,
-      0.995473,
-      -409554e-8,
-      0.0671533,
-      0.0607131,
-      0.995478,
-      -487451e-8,
-      0.0671531,
-      0.0722618,
-      0.995476,
-      -572148e-8,
-      0.0671532,
-      0.0848191,
-      0.995477,
-      -663658e-8,
-      0.0671539,
-      0.0983882,
-      0.995498,
-      -761986e-8,
-      0.0671541,
-      0.112972,
-      0.995509,
-      -867094e-8,
-      0.0671542,
-      0.128568,
-      0.995509,
-      -978951e-8,
-      0.0671531,
-      0.145183,
-      0.995503,
-      -0.0109725,
-      0.0671491,
-      0.162808,
-      0.995501,
-      -0.012211,
-      0.0671465,
-      0.181441,
-      0.99553,
-      -0.0134565,
-      0.0671371,
-      0.201015,
-      0.99555,
-      -0.014391,
-      0.0670831,
-      0.221206,
-      0.99558,
-      -0.014351,
-      0.0668883,
-      0.240813,
-      0.995577,
-      -0.0173997,
-      0.0671055,
-      0.261257,
-      0.995602,
-      -0.0191111,
-      0.0671178,
-      0.284467,
-      0.995623,
-      -0.0206705,
-      0.0670946,
-      0.308765,
-      0.995658,
-      -0.022184,
-      0.0670472,
-      0.333905,
-      0.995705,
-      -0.0234832,
-      0.0669417,
-      0.359677,
-      0.995719,
-      -0.0241933,
-      0.0666714,
-      0.385554,
-      0.995786,
-      -0.0243539,
-      0.066266,
-      0.410951,
-      0.995887,
-      -0.0271866,
-      0.0664367,
-      0.437163,
-      0.995944,
-      -0.0296012,
-      0.0664931,
-      0.464842,
-      0.996004,
-      -0.0301045,
-      0.0660105,
-      0.49332,
-      0.996128,
-      -0.0298311,
-      0.0652694,
-      0.521131,
-      0.996253,
-      -0.0316426,
-      0.0650739,
-      0.549167,
-      0.996244,
-      -0.0339043,
-      0.0649433,
-      0.57737,
-      0.996309,
-      -0.033329,
-      0.0638926,
-      0.606073,
-      0.996417,
-      -0.0338935,
-      0.0630849,
-      0.634527,
-      0.996372,
-      -0.0353104,
-      0.0625083,
-      0.66256,
-      0.996542,
-      -0.0348942,
-      0.0611986,
-      0.690516,
-      0.996568,
-      -0.0351614,
-      0.060069,
-      0.718317,
-      0.996711,
-      -0.0354317,
-      0.0588522,
-      0.74528,
-      0.996671,
-      -0.0349513,
-      0.0571902,
-      0.772061,
-      0.996865,
-      -0.0345622,
-      0.0555321,
-      0.798089,
-      0.996802,
-      -0.0342566,
-      0.0537816,
-      0.823178,
-      0.996992,
-      -0.0330862,
-      0.0516095,
-      0.847949,
-      0.996944,
-      -0.0324666,
-      0.0495537,
-      0.871431,
-      0.997146,
-      -0.0309544,
-      0.0470302,
-      0.894357,
-      0.997189,
-      -0.0299372,
-      0.0446043,
-      0.916142,
-      0.997471,
-      -0.0281389,
-      0.0418812,
-      0.937193,
-      0.997515,
-      -0.0268702,
-      0.0391823,
-      0.957,
-      0.997812,
-      -0.0247166,
-      0.0361338,
-      0.975936,
-      0.998027,
-      -0.0233525,
-      0.0333945,
-      0.99391,
-      0.998233,
-      -0.0209839,
-      0.0301917,
-      1.01075,
-      0.998481,
-      -0.0194309,
-      0.027271,
-      1.02669,
-      0.998859,
-      -0.0169728,
-      0.0240162,
-      1.04173,
-      0.99894,
-      -0.0152322,
-      0.0210517,
-      1.05551,
-      0.999132,
-      -0.0127497,
-      0.0178632,
-      1.06856,
-      0.999369,
-      -0.0108282,
-      0.014787,
-      1.08054,
-      0.999549,
-      -845886e-8,
-      0.0116185,
-      1.09185,
-      0.999805,
-      -63937e-7,
-      867209e-8,
-      1.10207,
-      0.99985,
-      -414582e-8,
-      566823e-8,
-      1.1117,
-      0.999912,
-      -207443e-8,
-      277562e-8,
-      1.12022,
-      1.00001,
-      870226e-10,
-      -53766e-9,
-      1.12832,
-      0.991943,
-      -178672e-11,
-      0.0893382,
-      198384e-10,
-      0.991952,
-      -450183e-10,
-      0.089339,
-      499849e-9,
-      0.991956,
-      -180074e-9,
-      0.0893394,
-      19994e-7,
-      0.991955,
-      -405167e-9,
-      0.0893393,
-      449867e-8,
-      0.991953,
-      -720298e-9,
-      0.0893391,
-      799764e-8,
-      0.991955,
-      -112548e-8,
-      0.0893393,
-      0.0124964,
-      0.991957,
-      -16207e-7,
-      0.0893395,
-      0.0179951,
-      0.991958,
-      -220601e-8,
-      0.0893396,
-      0.0244939,
-      0.991947,
-      -288137e-8,
-      0.0893385,
-      0.0319929,
-      0.991962,
-      -364693e-8,
-      0.0893399,
-      0.0404933,
-      0.991965,
-      -450264e-8,
-      0.0893399,
-      0.049995,
-      0.99198,
-      -544862e-8,
-      0.0893411,
-      0.0604995,
-      0.99197,
-      -648491e-8,
-      0.0893397,
-      0.0720074,
-      0.991976,
-      -761164e-8,
-      0.089341,
-      0.0845207,
-      0.99198,
-      -882891e-8,
-      0.0893405,
-      0.0980413,
-      0.991982,
-      -0.0101367,
-      0.0893396,
-      0.112571,
-      0.992008,
-      -0.011535,
-      0.0893415,
-      0.128115,
-      0.992026,
-      -0.0130228,
-      0.0893414,
-      0.144672,
-      0.992064,
-      -0.0145966,
-      0.0893418,
-      0.162241,
-      0.992041,
-      -0.0162421,
-      0.0893359,
-      0.180801,
-      0.992086,
-      -0.0178888,
-      0.0893214,
-      0.200302,
-      0.992157,
-      -0.0190368,
-      0.0892401,
-      0.220332,
-      0.992181,
-      -0.0195584,
-      0.0890525,
-      0.240144,
-      0.992175,
-      -0.0227257,
-      0.0892153,
-      0.260728,
-      0.99221,
-      -0.0254195,
-      0.089304,
-      0.283473,
-      0.99222,
-      -0.0274883,
-      0.0892703,
-      0.307673,
-      0.992317,
-      -0.0294905,
-      0.0892027,
-      0.332729,
-      0.992374,
-      -0.0311861,
-      0.0890577,
-      0.358387,
-      0.992505,
-      -0.0320656,
-      0.0886994,
-      0.384102,
-      0.992568,
-      -0.0329715,
-      0.0883198,
-      0.409767,
-      0.992675,
-      -0.036006,
-      0.0883602,
-      0.436145,
-      0.992746,
-      -0.0392897,
-      0.0884591,
-      0.463217,
-      0.992873,
-      -0.0399337,
-      0.0878287,
-      0.491557,
-      0.992934,
-      -0.040231,
-      0.0870108,
-      0.519516,
-      0.993091,
-      -0.0422013,
-      0.0865857,
-      0.547741,
-      0.993259,
-      -0.0443503,
-      0.0861937,
-      0.575792,
-      0.993455,
-      -0.0446368,
-      0.0851187,
-      0.604233,
-      0.993497,
-      -0.0454299,
-      0.0840576,
-      0.632925,
-      0.993694,
-      -0.0463296,
-      0.0829671,
-      0.660985,
-      0.993718,
-      -0.0470619,
-      0.0817185,
-      0.688714,
-      0.993973,
-      -0.0468838,
-      0.0800294,
-      0.716743,
-      0.994207,
-      -0.046705,
-      0.0781286,
-      0.74377,
-      0.994168,
-      -0.0469698,
-      0.0763337,
-      0.77042,
-      0.9945,
-      -0.0456816,
-      0.0738184,
-      0.796659,
-      0.994356,
-      -0.0455518,
-      0.0715545,
-      0.821868,
-      0.994747,
-      -0.0439488,
-      0.0686085,
-      0.846572,
-      0.994937,
-      -0.0430056,
-      0.065869,
-      0.870435,
-      0.995142,
-      -0.0413414,
-      0.0626446,
-      0.893272,
-      0.995451,
-      -0.0396521,
-      0.05929,
-      0.915376,
-      0.995445,
-      -0.0378453,
-      0.0558503,
-      0.936196,
-      0.995967,
-      -0.0355219,
-      0.0520949,
-      0.956376,
-      0.996094,
-      -0.0335146,
-      0.048377,
-      0.975327,
-      0.996622,
-      -0.030682,
-      0.0442575,
-      0.993471,
-      0.996938,
-      -0.0285504,
-      0.0404693,
-      1.01052,
-      0.997383,
-      -0.0253399,
-      0.0360903,
-      1.02637,
-      0.997714,
-      -0.0231651,
-      0.0322176,
-      1.04139,
-      0.998249,
-      -0.0198138,
-      0.0278433,
-      1.05542,
-      0.998596,
-      -0.0174337,
-      0.0238759,
-      1.06846,
-      0.998946,
-      -0.0141349,
-      0.0195944,
-      1.08056,
-      0.99928,
-      -0.0115603,
-      0.0156279,
-      1.09181,
-      0.999507,
-      -839065e-8,
-      0.0114607,
-      1.10213,
-      0.999697,
-      -5666e-6,
-      763325e-8,
-      1.11169,
-      0.999869,
-      -269902e-8,
-      364946e-8,
-      1.12042,
-      1.00001,
-      623836e-10,
-      -319288e-10,
-      1.12832,
-      0.987221,
-      -222675e-11,
-      0.111332,
-      197456e-10,
-      0.98739,
-      -561116e-10,
-      0.111351,
-      497563e-9,
-      0.987448,
-      -224453e-9,
-      0.111357,
-      199031e-8,
-      0.987441,
-      -505019e-9,
-      0.111357,
-      44782e-7,
-      0.987442,
-      -897816e-9,
-      0.111357,
-      796129e-8,
-      0.987442,
-      -140284e-8,
-      0.111357,
-      0.0124396,
-      0.987444,
-      -202012e-8,
-      0.111357,
-      0.0179132,
-      0.987442,
-      -274964e-8,
-      0.111357,
-      0.0243824,
-      0.987446,
-      -359147e-8,
-      0.111357,
-      0.0318474,
-      0.987435,
-      -454562e-8,
-      0.111356,
-      0.0403086,
-      0.987461,
-      -561225e-8,
-      0.111358,
-      0.0497678,
-      0.987458,
-      -679125e-8,
-      0.111358,
-      0.0602239,
-      0.987443,
-      -80828e-7,
-      0.111356,
-      0.0716792,
-      0.987476,
-      -94872e-7,
-      0.111358,
-      0.0841364,
-      0.98749,
-      -0.0110044,
-      0.111361,
-      0.097597,
-      0.987508,
-      -0.0126344,
-      0.111362,
-      0.112062,
-      0.987494,
-      -0.0143767,
-      0.111357,
-      0.127533,
-      0.987526,
-      -0.0162307,
-      0.111359,
-      0.144015,
-      0.987558,
-      -0.0181912,
-      0.111361,
-      0.161502,
-      0.987602,
-      -0.0202393,
-      0.111355,
-      0.179979,
-      0.987692,
-      -0.022273,
-      0.111346,
-      0.199386,
-      0.987702,
-      -0.0235306,
-      0.111215,
-      0.219183,
-      0.987789,
-      -0.0247628,
-      0.111061,
-      0.239202,
-      0.987776,
-      -0.0280668,
-      0.111171,
-      0.259957,
-      0.987856,
-      -0.0316751,
-      0.111327,
-      0.282198,
-      0.987912,
-      -0.0342468,
-      0.111282,
-      0.306294,
-      0.988,
-      -0.0367205,
-      0.111198,
-      0.331219,
-      0.988055,
-      -0.0387766,
-      0.110994,
-      0.356708,
-      0.988241,
-      -0.0397722,
-      0.110547,
-      0.382234,
-      0.988399,
-      -0.0416076,
-      0.110198,
-      0.408227,
-      0.988539,
-      -0.0448192,
-      0.110137,
-      0.434662,
-      0.988661,
-      -0.0483793,
-      0.110143,
-      0.461442,
-      0.988967,
-      -0.0495895,
-      0.109453,
-      0.489318,
-      0.989073,
-      -0.0506797,
-      0.108628,
-      0.517516,
-      0.989274,
-      -0.0526953,
-      0.108003,
-      0.545844,
-      0.989528,
-      -0.054578,
-      0.107255,
-      0.573823,
-      0.989709,
-      -0.0561503,
-      0.106294,
-      0.601944,
-      0.989991,
-      -0.056866,
-      0.104896,
-      0.630855,
-      0.990392,
-      -0.0572914,
-      0.103336,
-      0.658925,
-      0.990374,
-      -0.0586224,
-      0.10189,
-      0.686661,
-      0.990747,
-      -0.0584764,
-      0.099783,
-      0.714548,
-      0.991041,
-      -0.0582662,
-      0.0974309,
-      0.74186,
-      0.991236,
-      -0.0584118,
-      0.0951678,
-      0.768422,
-      0.991585,
-      -0.0573055,
-      0.0921581,
-      0.794817,
-      0.991984,
-      -0.0564241,
-      0.0891167,
-      0.820336,
-      0.9921,
-      -0.0553608,
-      0.085805,
-      0.84493,
-      0.992749,
-      -0.0533816,
-      0.0820354,
-      0.868961,
-      0.99288,
-      -0.0518661,
-      0.0782181,
-      0.891931,
-      0.993511,
-      -0.0492492,
-      0.0738935,
-      0.914186,
-      0.993617,
-      -0.0471956,
-      0.0696402,
-      0.93532,
-      0.99411,
-      -0.044216,
-      0.0649659,
-      0.95543,
-      0.994595,
-      -0.0416654,
-      0.0603177,
-      0.974685,
-      0.994976,
-      -0.0384314,
-      0.0553493,
-      0.992807,
-      0.995579,
-      -0.0353491,
-      0.0503942,
-      1.00996,
-      0.996069,
-      -0.0319787,
-      0.0452123,
-      1.02606,
-      0.996718,
-      -0.028472,
-      0.0400112,
-      1.04114,
-      0.997173,
-      -0.0250789,
-      0.0349456,
-      1.05517,
-      0.997818,
-      -0.0213326,
-      0.029653,
-      1.0683,
-      0.998318,
-      -0.0178509,
-      0.024549,
-      1.0805,
-      0.998853,
-      -0.0141118,
-      0.0194197,
-      1.09177,
-      0.999218,
-      -0.0105914,
-      0.0143869,
-      1.1022,
-      0.999594,
-      -693474e-8,
-      943517e-8,
-      1.11175,
-      0.99975,
-      -340478e-8,
-      464051e-8,
-      1.12056,
-      1.00001,
-      109172e-9,
-      -112821e-9,
-      1.12853,
-      0.983383,
-      -266524e-11,
-      0.133358,
-      196534e-10,
-      0.981942,
-      -671009e-10,
-      0.133162,
-      494804e-9,
-      0.981946,
-      -268405e-9,
-      0.133163,
-      197923e-8,
-      0.981944,
-      -603912e-9,
-      0.133163,
-      445326e-8,
-      0.981941,
-      -107362e-8,
-      0.133162,
-      791693e-8,
-      0.981946,
-      -167755e-8,
-      0.133163,
-      0.0123703,
-      0.981944,
-      -241569e-8,
-      0.133162,
-      0.0178135,
-      0.981945,
-      -328807e-8,
-      0.133163,
-      0.0242466,
-      0.981945,
-      -429472e-8,
-      0.133162,
-      0.03167,
-      0.981955,
-      -543573e-8,
-      0.133164,
-      0.0400846,
-      0.981951,
-      -671105e-8,
-      0.133163,
-      0.0494901,
-      0.981968,
-      -812092e-8,
-      0.133165,
-      0.0598886,
-      0.981979,
-      -966541e-8,
-      0.133166,
-      0.0712811,
-      0.981996,
-      -0.0113446,
-      0.133168,
-      0.083669,
-      0.982014,
-      -0.0131585,
-      0.133169,
-      0.0970533,
-      0.982011,
-      -0.0151073,
-      0.133167,
-      0.111438,
-      0.982062,
-      -0.0171906,
-      0.133172,
-      0.126826,
-      0.9821,
-      -0.0194067,
-      0.133175,
-      0.143215,
-      0.982149,
-      -0.0217502,
-      0.133176,
-      0.160609,
-      0.982163,
-      -0.0241945,
-      0.133173,
-      0.178981,
-      0.982247,
-      -0.0265907,
-      0.133148,
-      0.198249,
-      0.982291,
-      -0.027916,
-      0.132974,
-      0.217795,
-      0.982396,
-      -0.0299663,
-      0.132868,
-      0.238042,
-      0.982456,
-      -0.0334544,
-      0.132934,
-      0.258901,
-      0.982499,
-      -0.0378636,
-      0.133137,
-      0.280639,
-      0.982617,
-      -0.0409274,
-      0.133085,
-      0.304604,
-      0.98274,
-      -0.0438523,
-      0.132985,
-      0.329376,
-      0.982944,
-      -0.0462288,
-      0.132728,
-      0.354697,
-      0.98308,
-      -0.0475995,
-      0.132228,
-      0.380102,
-      0.983391,
-      -0.0501901,
-      0.131924,
-      0.406256,
-      0.983514,
-      -0.0535899,
-      0.131737,
-      0.432735,
-      0.98373,
-      -0.0571858,
-      0.131567,
-      0.459359,
-      0.984056,
-      -0.0592353,
-      0.130932,
-      0.486637,
-      0.984234,
-      -0.0610488,
-      0.130092,
-      0.51509,
-      0.984748,
-      -0.0630758,
-      0.12923,
-      0.543461,
-      0.985073,
-      -0.0647398,
-      0.128174,
-      0.571376,
-      0.985195,
-      -0.0671941,
-      0.127133,
-      0.599414,
-      0.985734,
-      -0.0681345,
-      0.125576,
-      0.628134,
-      0.986241,
-      -0.0686089,
-      0.123639,
-      0.656399,
-      0.986356,
-      -0.0698511,
-      0.121834,
-      0.684258,
-      0.986894,
-      -0.0700931,
-      0.119454,
-      0.711818,
-      0.987382,
-      -0.0698321,
-      0.116718,
-      0.739511,
-      0.988109,
-      -0.0693975,
-      0.113699,
-      0.766267,
-      0.988363,
-      -0.0689584,
-      0.110454,
-      0.792456,
-      0.989112,
-      -0.0672353,
-      0.106602,
-      0.81813,
-      0.989241,
-      -0.0662034,
-      0.10267,
-      0.842889,
-      0.990333,
-      -0.0638938,
-      0.0981381,
-      0.867204,
-      0.990591,
-      -0.0618534,
-      0.0935388,
-      0.89038,
-      0.991106,
-      -0.0593117,
-      0.088553,
-      0.912576,
-      0.991919,
-      -0.0562676,
-      0.0832187,
-      0.934118,
-      0.992111,
-      -0.0534085,
-      0.0778302,
-      0.954254,
-      0.992997,
-      -0.0495459,
-      0.0720453,
-      0.973722,
-      0.993317,
-      -0.0463707,
-      0.0663458,
-      0.991949,
-      0.994133,
-      -0.0421245,
-      0.0601883,
-      1.00936,
-      0.994705,
-      -0.0384977,
-      0.0542501,
-      1.02559,
-      0.995495,
-      -0.0340956,
-      0.0479862,
-      1.04083,
-      0.996206,
-      -0.030105,
-      0.041887,
-      1.05497,
-      0.996971,
-      -0.0256095,
-      0.0355355,
-      1.06824,
-      0.997796,
-      -0.0213932,
-      0.0293655,
-      1.08056,
-      0.998272,
-      -0.0169612,
-      0.0232926,
-      1.09182,
-      0.998857,
-      -0.0126756,
-      0.0172786,
-      1.10219,
-      0.99939,
-      -832486e-8,
-      0.0113156,
-      1.11192,
-      0.999752,
-      -410826e-8,
-      557892e-8,
-      1.12075,
-      1,
-      150957e-9,
-      -119101e-9,
-      1.12885,
-      0.975169,
-      -309397e-11,
-      0.154669,
-      195073e-10,
-      0.975439,
-      -779608e-10,
-      0.154712,
-      491534e-9,
-      0.975464,
-      -311847e-9,
-      0.154716,
-      196617e-8,
-      0.975464,
-      -701656e-9,
-      0.154716,
-      442387e-8,
-      0.975462,
-      -12474e-7,
-      0.154715,
-      78647e-7,
-      0.975461,
-      -194906e-8,
-      0.154715,
-      0.0122886,
-      0.975464,
-      -280667e-8,
-      0.154715,
-      0.0176959,
-      0.975468,
-      -382025e-8,
-      0.154716,
-      0.0240867,
-      0.975471,
-      -498985e-8,
-      0.154716,
-      0.0314612,
-      0.975472,
-      -631541e-8,
-      0.154717,
-      0.0398199,
-      0.975486,
-      -779719e-8,
-      0.154718,
-      0.0491639,
-      0.975489,
-      -943505e-8,
-      0.154718,
-      0.0594932,
-      0.975509,
-      -0.0112295,
-      0.154721,
-      0.0708113,
-      0.97554,
-      -0.0131802,
-      0.154724,
-      0.0831176,
-      0.975557,
-      -0.0152876,
-      0.154726,
-      0.096415,
-      0.975585,
-      -0.0175512,
-      0.154728,
-      0.110705,
-      0.975605,
-      -0.0199713,
-      0.154729,
-      0.125992,
-      0.975645,
-      -0.0225447,
-      0.154729,
-      0.142272,
-      0.975711,
-      -0.0252649,
-      0.154735,
-      0.159549,
-      0.975788,
-      -0.0280986,
-      0.154736,
-      0.177805,
-      0.975872,
-      -0.0308232,
-      0.154704,
-      0.196911,
-      0.975968,
-      -0.0324841,
-      0.154525,
-      0.216324,
-      0.976063,
-      -0.0351281,
-      0.154432,
-      0.236628,
-      0.976157,
-      -0.0388618,
-      0.15446,
-      0.257539,
-      0.976204,
-      -0.0437704,
-      0.154665,
-      0.278975,
-      0.976358,
-      -0.047514,
-      0.154652,
-      0.302606,
-      0.976571,
-      -0.0508638,
-      0.154535,
-      0.327204,
-      0.976725,
-      -0.0534995,
-      0.154221,
-      0.352276,
-      0.977013,
-      -0.0555547,
-      0.153737,
-      0.377696,
-      0.977294,
-      -0.0586728,
-      0.153403,
-      0.403855,
-      0.977602,
-      -0.0622715,
-      0.15312,
-      0.430333,
-      0.977932,
-      -0.0658166,
-      0.152755,
-      0.456855,
-      0.978241,
-      -0.0689877,
-      0.152233,
-      0.483668,
-      0.978602,
-      -0.0712805,
-      0.15132,
-      0.512097,
-      0.979234,
-      -0.0732775,
-      0.150235,
-      0.540455,
-      0.97977,
-      -0.075163,
-      0.148978,
-      0.568486,
-      0.979995,
-      -0.0778026,
-      0.147755,
-      0.596524,
-      0.98078,
-      -0.0791854,
-      0.146019,
-      0.624825,
-      0.981628,
-      -0.0799666,
-      0.143906,
-      0.653403,
-      0.982067,
-      -0.0808532,
-      0.141561,
-      0.681445,
-      0.98271,
-      -0.0816024,
-      0.139025,
-      0.708918,
-      0.983734,
-      -0.0812511,
-      0.135764,
-      0.736594,
-      0.98431,
-      -0.0806201,
-      0.132152,
-      0.763576,
-      0.985071,
-      -0.0801605,
-      0.12846,
-      0.789797,
-      0.98618,
-      -0.0784208,
-      0.124084,
-      0.815804,
-      0.986886,
-      -0.0766643,
-      0.1193,
-      0.840869,
-      0.987485,
-      -0.0747744,
-      0.114236,
-      0.864952,
-      0.988431,
-      -0.0716701,
-      0.108654,
-      0.888431,
-      0.988886,
-      -0.0691609,
-      0.102994,
-      0.910963,
-      0.990024,
-      -0.0654048,
-      0.0967278,
-      0.932629,
-      0.990401,
-      -0.0619765,
-      0.090384,
-      0.95313,
-      0.991093,
-      -0.0579296,
-      0.0837885,
-      0.972587,
-      0.992018,
-      -0.0536576,
-      0.0770171,
-      0.991184,
-      0.992536,
-      -0.0493719,
-      0.0701486,
-      1.00863,
-      0.993421,
-      -0.0444813,
-      0.062953,
-      1.02494,
-      0.993928,
-      -0.040008,
-      0.0560455,
-      1.04017,
-      0.994994,
-      -0.0347982,
-      0.04856,
-      1.05463,
-      0.995866,
-      -0.0301017,
-      0.0416152,
-      1.06807,
-      0.996916,
-      -0.0248225,
-      0.0342597,
-      1.08039,
-      0.997766,
-      -0.0199229,
-      0.0271668,
-      1.09177,
-      0.998479,
-      -0.0147422,
-      0.0201387,
-      1.10235,
-      0.99921,
-      -980173e-8,
-      0.0131944,
-      1.11206,
-      0.999652,
-      -47426e-7,
-      640712e-8,
-      1.12104,
-      0.999998,
-      891673e-10,
-      -10379e-8,
-      1.12906,
-      0.967868,
-      -351885e-11,
-      0.175947,
-      193569e-10,
-      0.968001,
-      -886733e-10,
-      0.175972,
-      487782e-9,
-      0.96801,
-      -354697e-9,
-      0.175973,
-      195115e-8,
-      0.968012,
-      -798063e-9,
-      0.175974,
-      439006e-8,
-      0.968011,
-      -141879e-8,
-      0.175973,
-      780461e-8,
-      0.968011,
-      -221686e-8,
-      0.175973,
-      0.0121948,
-      0.968016,
-      -319231e-8,
-      0.175974,
-      0.0175607,
-      0.968019,
-      -434515e-8,
-      0.175974,
-      0.0239027,
-      0.968018,
-      -567538e-8,
-      0.175974,
-      0.0312208,
-      0.968033,
-      -718308e-8,
-      0.175977,
-      0.0395158,
-      0.968049,
-      -886836e-8,
-      0.175979,
-      0.0487885,
-      0.968047,
-      -0.0107312,
-      0.175978,
-      0.0590394,
-      0.968072,
-      -0.0127719,
-      0.175981,
-      0.0702705,
-      0.968108,
-      -0.0149905,
-      0.175986,
-      0.0824836,
-      0.968112,
-      -0.0173866,
-      0.175985,
-      0.0956783,
-      0.968173,
-      -0.0199611,
-      0.175993,
-      0.109862,
-      0.96827,
-      -0.0227128,
-      0.176008,
-      0.125033,
-      0.968292,
-      -0.025639,
-      0.17601,
-      0.141193,
-      0.968339,
-      -0.0287299,
-      0.176007,
-      0.158336,
-      0.968389,
-      -0.0319399,
-      0.176001,
-      0.176441,
-      0.968501,
-      -0.034941,
-      0.175962,
-      0.195359,
-      0.968646,
-      -0.0370812,
-      0.175793,
-      0.214686,
-      0.968789,
-      -0.0402329,
-      0.175708,
-      0.234973,
-      0.96886,
-      -0.0442601,
-      0.1757,
-      0.255871,
-      0.969013,
-      -0.049398,
-      0.175876,
-      0.277238,
-      0.969242,
-      -0.0539932,
-      0.17594,
-      0.300326,
-      0.969419,
-      -0.0577299,
-      0.175781,
-      0.324702,
-      0.969763,
-      -0.0605643,
-      0.175432,
-      0.349527,
-      0.970093,
-      -0.0634488,
-      0.174992,
-      0.374976,
-      0.970361,
-      -0.0670589,
-      0.174611,
-      0.401097,
-      0.970825,
-      -0.0708246,
-      0.174226,
-      0.427496,
-      0.971214,
-      -0.0742871,
-      0.173684,
-      0.453858,
-      0.971622,
-      -0.0782608,
-      0.173186,
-      0.480637,
-      0.972175,
-      -0.0813151,
-      0.172288,
-      0.508655,
-      0.972944,
-      -0.0832678,
-      0.170979,
-      0.536973,
-      0.973595,
-      -0.0855964,
-      0.169573,
-      0.565138,
-      0.974345,
-      -0.0882163,
-      0.168152,
-      0.593222,
-      0.975233,
-      -0.0901671,
-      0.166314,
-      0.621201,
-      0.976239,
-      -0.0912111,
-      0.163931,
-      0.649919,
-      0.977289,
-      -0.0916959,
-      0.161106,
-      0.678011,
-      0.978076,
-      -0.0927061,
-      0.158272,
-      0.705717,
-      0.979533,
-      -0.0925562,
-      0.15475,
-      0.733228,
-      0.980335,
-      -0.0918159,
-      0.150638,
-      0.760454,
-      0.981808,
-      -0.0908508,
-      0.146201,
-      0.786918,
-      0.983061,
-      -0.0896172,
-      0.141386,
-      0.812953,
-      0.984148,
-      -0.0871588,
-      0.135837,
-      0.838281,
-      0.985047,
-      -0.0850624,
-      0.130135,
-      0.862594,
-      0.986219,
-      -0.0818541,
-      0.123882,
-      0.88633,
-      0.987043,
-      -0.0784523,
-      0.117126,
-      0.908952,
-      0.988107,
-      -0.0749601,
-      0.110341,
-      0.930744,
-      0.988955,
-      -0.0703548,
-      0.102885,
-      0.951728,
-      0.989426,
-      -0.0662798,
-      0.0954167,
-      0.971166,
-      0.990421,
-      -0.0610834,
-      0.0876331,
-      0.989984,
-      0.991032,
-      -0.0562936,
-      0.0797785,
-      1.00765,
-      0.992041,
-      -0.0508154,
-      0.0718166,
-      1.02434,
-      0.992794,
-      -0.0454045,
-      0.0637125,
-      1.03976,
-      0.993691,
-      -0.0398194,
-      0.0555338,
-      1.05418,
-      0.994778,
-      -0.0341482,
-      0.0473388,
-      1.06772,
-      0.995915,
-      -0.028428,
-      0.0391016,
-      1.08028,
-      0.997109,
-      -0.022642,
-      0.0309953,
-      1.09185,
-      0.998095,
-      -0.0168738,
-      0.0230288,
-      1.10247,
-      0.998985,
-      -0.0111274,
-      0.0150722,
-      1.11229,
-      0.999581,
-      -543881e-8,
-      740605e-8,
-      1.12131,
-      1.00003,
-      162239e-9,
-      -105549e-9,
-      1.12946,
-      0.959505,
-      -393734e-11,
-      0.196876,
-      191893e-10,
-      0.959599,
-      -992157e-10,
-      0.196895,
-      483544e-9,
-      0.959641,
-      -396868e-9,
-      0.196903,
-      19342e-7,
-      0.959599,
-      -892948e-9,
-      0.196895,
-      435193e-8,
-      0.959603,
-      -158747e-8,
-      0.196896,
-      77368e-7,
-      0.959604,
-      -248042e-8,
-      0.196896,
-      0.0120888,
-      0.959605,
-      -357184e-8,
-      0.196896,
-      0.0174082,
-      0.959605,
-      -486169e-8,
-      0.196896,
-      0.0236949,
-      0.959613,
-      -635008e-8,
-      0.196897,
-      0.0309497,
-      0.959619,
-      -803696e-8,
-      0.196898,
-      0.0391725,
-      0.959636,
-      -992255e-8,
-      0.196901,
-      0.0483649,
-      0.959634,
-      -0.0120067,
-      0.1969,
-      0.0585266,
-      0.959675,
-      -0.0142898,
-      0.196906,
-      0.0696609,
-      0.959712,
-      -0.0167717,
-      0.196911,
-      0.0817678,
-      0.959752,
-      -0.0194524,
-      0.196918,
-      0.0948494,
-      0.959807,
-      -0.0223321,
-      0.196925,
-      0.10891,
-      0.959828,
-      -0.0254091,
-      0.196924,
-      0.123947,
-      0.959906,
-      -0.0286815,
-      0.196934,
-      0.139968,
-      0.960005,
-      -0.0321371,
-      0.196944,
-      0.156968,
-      0.960071,
-      -0.0357114,
-      0.196936,
-      0.17491,
-      0.960237,
-      -0.0389064,
-      0.196882,
-      0.193597,
-      0.960367,
-      -0.041623,
-      0.196731,
-      0.21285,
-      0.960562,
-      -0.0452655,
-      0.196654,
-      0.233075,
-      0.960735,
-      -0.0496207,
-      0.196643,
-      0.253941,
-      0.960913,
-      -0.0549379,
-      0.196774,
-      0.275278,
-      0.961121,
-      -0.0603414,
-      0.196893,
-      0.297733,
-      0.96139,
-      -0.0644244,
-      0.196717,
-      0.321877,
-      0.961818,
-      -0.067556,
-      0.196314,
-      0.346476,
-      0.962175,
-      -0.0712709,
-      0.195917,
-      0.371907,
-      0.96255,
-      -0.0752848,
-      0.1955,
-      0.397916,
-      0.963164,
-      -0.0792073,
-      0.195026,
-      0.424229,
-      0.963782,
-      -0.0828225,
-      0.194424,
-      0.450637,
-      0.964306,
-      -0.0873119,
-      0.193831,
-      0.477288,
-      0.964923,
-      -0.0911051,
-      0.192973,
-      0.504716,
-      0.966048,
-      -0.093251,
-      0.19151,
-      0.533053,
-      0.967024,
-      -0.0958983,
-      0.190013,
-      0.561366,
-      0.968038,
-      -0.09835,
-      0.188253,
-      0.589464,
-      0.969152,
-      -0.100754,
-      0.186257,
-      0.617433,
-      0.970557,
-      -0.102239,
-      0.183775,
-      0.645801,
-      0.972104,
-      -0.102767,
-      0.180645,
-      0.674278,
-      0.973203,
-      -0.103492,
-      0.177242,
-      0.702004,
-      0.975123,
-      -0.103793,
-      0.17345,
-      0.729529,
-      0.97641,
-      -0.102839,
-      0.168886,
-      0.756712,
-      0.978313,
-      -0.101687,
-      0.163892,
-      0.783801,
-      0.980036,
-      -0.100314,
-      0.158439,
-      0.809671,
-      0.981339,
-      -0.097836,
-      0.152211,
-      0.835402,
-      0.982794,
-      -0.0950006,
-      0.145679,
-      0.860081,
-      0.984123,
-      -0.0920994,
-      0.138949,
-      0.883757,
-      0.984918,
-      -0.0878641,
-      0.131283,
-      0.90685,
-      0.985999,
-      -0.083939,
-      0.123464,
-      0.928786,
-      0.987151,
-      -0.0791234,
-      0.115324,
-      0.94983,
-      0.987827,
-      -0.0739332,
-      0.106854,
-      0.96962,
-      0.988806,
-      -0.0688088,
-      0.0982691,
-      0.98861,
-      0.989588,
-      -0.0628962,
-      0.0893456,
-      1.00667,
-      0.990438,
-      -0.0573146,
-      0.0805392,
-      1.02344,
-      0.991506,
-      -0.0509433,
-      0.0713725,
-      1.03933,
-      0.992492,
-      -0.0448724,
-      0.0623732,
-      1.05378,
-      0.993663,
-      -0.0383497,
-      0.0530838,
-      1.06747,
-      0.994956,
-      -0.0319593,
-      0.0439512,
-      1.08007,
-      0.99634,
-      -0.025401,
-      0.0347803,
-      1.09182,
-      0.99761,
-      -0.0189687,
-      0.0257954,
-      1.1025,
-      0.99863,
-      -0.0124441,
-      0.0169893,
-      1.11247,
-      0.99947,
-      -614003e-8,
-      829498e-8,
-      1.12151,
-      1.00008,
-      216624e-9,
-      -146107e-9,
-      1.12993,
-      0.950129,
-      -434955e-11,
-      0.217413,
-      190081e-10,
-      0.950264,
-      -10957e-8,
-      0.217444,
-      47884e-8,
-      0.9503,
-      -438299e-9,
-      0.217451,
-      191543e-8,
-      0.950246,
-      -986124e-9,
-      0.21744,
-      430951e-8,
-      0.950246,
-      -175311e-8,
-      0.21744,
-      766137e-8,
-      0.950245,
-      -273923e-8,
-      0.21744,
-      0.011971,
-      0.950253,
-      -394453e-8,
-      0.217441,
-      0.0172385,
-      0.950258,
-      -536897e-8,
-      0.217442,
-      0.0234641,
-      0.950267,
-      -701262e-8,
-      0.217444,
-      0.030648,
-      0.950277,
-      -887551e-8,
-      0.217446,
-      0.038791,
-      0.950284,
-      -0.0109576,
-      0.217446,
-      0.0478931,
-      0.950312,
-      -0.0132591,
-      0.217451,
-      0.0579568,
-      0.950334,
-      -0.01578,
-      0.217454,
-      0.0689821,
-      0.950378,
-      -0.0185204,
-      0.217462,
-      0.0809714,
-      0.950417,
-      -0.0214803,
-      0.217467,
-      0.0939265,
-      0.950488,
-      -0.0246594,
-      0.217479,
-      0.10785,
-      0.950534,
-      -0.0280565,
-      0.217483,
-      0.122743,
-      0.950633,
-      -0.0316685,
-      0.217498,
-      0.138611,
-      0.950698,
-      -0.0354787,
-      0.217499,
-      0.155442,
-      0.950844,
-      -0.0394003,
-      0.217507,
-      0.173208,
-      0.950999,
-      -0.0426812,
-      0.217419,
-      0.191605,
-      0.951221,
-      -0.0461302,
-      0.217317,
-      0.21084,
-      0.951412,
-      -0.0502131,
-      0.217238,
-      0.230945,
-      0.951623,
-      -0.0549183,
-      0.21722,
-      0.251745,
-      0.951867,
-      -0.0604493,
-      0.217306,
-      0.273001,
-      0.952069,
-      -0.0665189,
-      0.217466,
-      0.294874,
-      0.952459,
-      -0.0709179,
-      0.217266,
-      0.318732,
-      0.952996,
-      -0.0746112,
-      0.216891,
-      0.34318,
-      0.953425,
-      -0.0789252,
-      0.216503,
-      0.36849,
-      0.953885,
-      -0.0833293,
-      0.216042,
-      0.394373,
-      0.954617,
-      -0.087371,
-      0.215469,
-      0.420505,
-      0.955429,
-      -0.0914054,
-      0.214802,
-      0.446907,
-      0.956068,
-      -0.0961671,
-      0.214146,
-      0.473522,
-      0.957094,
-      -0.10048,
-      0.213286,
-      0.50052,
-      0.958372,
-      -0.103248,
-      0.211796,
-      0.528715,
-      0.959654,
-      -0.106033,
-      0.21016,
-      0.557065,
-      0.961305,
-      -0.108384,
-      0.208149,
-      0.585286,
-      0.962785,
-      -0.111122,
-      0.206024,
-      0.613334,
-      0.964848,
-      -0.112981,
-      0.203442,
-      0.641334,
-      0.966498,
-      -0.113717,
-      0.19996,
-      0.669955,
-      0.968678,
-      -0.114121,
-      0.196105,
-      0.698094,
-      0.970489,
-      -0.114524,
-      0.191906,
-      0.725643,
-      0.972903,
-      -0.113792,
-      0.186963,
-      0.752856,
-      0.974701,
-      -0.112406,
-      0.181343,
-      0.780013,
-      0.976718,
-      -0.110685,
-      0.175185,
-      0.806268,
-      0.978905,
-      -0.108468,
-      0.168535,
-      0.832073,
-      0.980267,
-      -0.105061,
-      0.161106,
-      0.857149,
-      0.981967,
-      -0.101675,
-      0.153387,
-      0.881145,
-      0.983063,
-      -0.0974492,
-      0.145199,
-      0.904255,
-      0.984432,
-      -0.0925815,
-      0.136527,
-      0.926686,
-      0.985734,
-      -0.0877983,
-      0.127584,
-      0.947901,
-      0.986228,
-      -0.081884,
-      0.118125,
-      0.968111,
-      0.98719,
-      -0.0761208,
-      0.108594,
-      0.98719,
-      0.988228,
-      -0.0698196,
-      0.0989996,
-      1.00559,
-      0.989046,
-      -0.0632739,
-      0.0890074,
-      1.02246,
-      0.990242,
-      -0.056522,
-      0.0790832,
-      1.03841,
-      0.991252,
-      -0.0495272,
-      0.0689182,
-      1.05347,
-      0.992542,
-      -0.0425373,
-      0.0588592,
-      1.06724,
-      0.994096,
-      -0.0353198,
-      0.0486833,
-      1.08009,
-      0.995593,
-      -0.028235,
-      0.0385977,
-      1.09177,
-      0.99711,
-      -0.0209511,
-      0.0286457,
-      1.10274,
-      0.998263,
-      -0.0139289,
-      0.0188497,
-      1.11262,
-      0.999254,
-      -67359e-7,
-      9208e-6,
-      1.12191,
-      0.999967,
-      141846e-9,
-      -657764e-10,
-      1.13024,
-      0.935608,
-      -474692e-11,
-      0.236466,
-      187817e-10,
-      0.93996,
-      -11971e-8,
-      0.237568,
-      473646e-9,
-      0.939959,
-      -478845e-9,
-      0.237567,
-      18946e-7,
-      0.939954,
-      -10774e-7,
-      0.237566,
-      426284e-8,
-      0.939956,
-      -191538e-8,
-      0.237566,
-      757842e-8,
-      0.939954,
-      -299277e-8,
-      0.237566,
-      0.0118413,
-      0.93996,
-      -430961e-8,
-      0.237567,
-      0.0170518,
-      0.939969,
-      -586589e-8,
-      0.237569,
-      0.02321,
-      0.939982,
-      -766166e-8,
-      0.237572,
-      0.0303164,
-      0.939987,
-      -969686e-8,
-      0.237572,
-      0.0383711,
-      0.939997,
-      -0.0119715,
-      0.237574,
-      0.0473751,
-      0.940031,
-      -0.0144858,
-      0.237581,
-      0.0573298,
-      0.940073,
-      -0.0172399,
-      0.237589,
-      0.0682366,
-      0.94012,
-      -0.0202335,
-      0.237598,
-      0.080097,
-      0.940162,
-      -0.0234663,
-      0.237604,
-      0.0929116,
-      0.940237,
-      -0.0269387,
-      0.237615,
-      0.106686,
-      0.940328,
-      -0.0306489,
-      0.237632,
-      0.121421,
-      0.940419,
-      -0.0345917,
-      0.237645,
-      0.137115,
-      0.940522,
-      -0.0387481,
-      0.237654,
-      0.153766,
-      0.940702,
-      -0.0429906,
-      0.237661,
-      0.17133,
-      0.940871,
-      -0.0465089,
-      0.237561,
-      0.189502,
-      0.941103,
-      -0.050531,
-      0.23748,
-      0.208616,
-      0.941369,
-      -0.0550657,
-      0.237423,
-      0.228595,
-      0.941641,
-      -0.0601337,
-      0.237399,
-      0.249287,
-      0.941903,
-      -0.0658804,
-      0.237443,
-      0.270467,
-      0.942224,
-      -0.0722674,
-      0.237597,
-      0.292024,
-      0.942633,
-      -0.0771788,
-      0.237419,
-      0.315272,
-      0.943172,
-      -0.0815623,
-      0.237068,
-      0.339579,
-      0.943691,
-      -0.0863973,
-      0.236682,
-      0.364717,
-      0.944382,
-      -0.0911536,
-      0.236213,
-      0.390435,
-      0.945392,
-      -0.0952967,
-      0.235562,
-      0.416425,
-      0.946185,
-      -0.0998948,
-      0.234832,
-      0.442772,
-      0.947212,
-      -0.104796,
-      0.234114,
-      0.469347,
-      0.948778,
-      -0.10928,
-      0.233222,
-      0.496162,
-      0.950149,
-      -0.113081,
-      0.231845,
-      0.523978,
-      0.951989,
-      -0.115893,
-      0.230005,
-      0.552295,
-      0.953921,
-      -0.11846,
-      0.227862,
-      0.580569,
-      0.955624,
-      -0.12115,
-      0.225439,
-      0.608698,
-      0.958234,
-      -0.123373,
-      0.222635,
-      0.636696,
-      0.960593,
-      -0.124519,
-      0.219093,
-      0.665208,
-      0.963201,
-      -0.124736,
-      0.214749,
-      0.693557,
-      0.965642,
-      -0.125012,
-      0.210059,
-      0.721334,
-      0.968765,
-      -0.124661,
-      0.204935,
-      0.748613,
-      0.971753,
-      -0.122996,
-      0.198661,
-      0.776224,
-      0.973751,
-      -0.120998,
-      0.191823,
-      0.802461,
-      0.976709,
-      -0.118583,
-      0.184359,
-      0.828399,
-      0.977956,
-      -0.115102,
-      0.176437,
-      0.853693,
-      0.979672,
-      -0.111077,
-      0.167681,
-      0.877962,
-      0.981816,
-      -0.10688,
-      0.158872,
-      0.901564,
-      0.98238,
-      -0.101469,
-      0.149398,
-      0.924057,
-      0.983964,
-      -0.0960013,
-      0.139436,
-      0.945751,
-      0.984933,
-      -0.0899626,
-      0.12943,
-      0.966272,
-      0.985694,
-      -0.0832973,
-      0.11894,
-      0.985741,
-      0.986822,
-      -0.0767082,
-      0.108349,
-      1.00407,
-      0.987725,
-      -0.0693614,
-      0.0976026,
-      1.02154,
-      0.98877,
-      -0.06211,
-      0.086652,
-      1.03757,
-      0.990129,
-      -0.0544143,
-      0.0756182,
-      1.05296,
-      0.991337,
-      -0.046744,
-      0.0645753,
-      1.06683,
-      0.992978,
-      -0.0387931,
-      0.0534683,
-      1.0798,
-      0.994676,
-      -0.030973,
-      0.0424137,
-      1.09181,
-      0.99645,
-      -0.0230311,
-      0.0314035,
-      1.10286,
-      0.997967,
-      -0.0152065,
-      0.0206869,
-      1.11291,
-      0.99922,
-      -744837e-8,
-      0.010155,
-      1.12237,
-      1.00002,
-      240209e-9,
-      -752767e-10,
-      1.13089,
-      0.922948,
-      -515351e-11,
-      0.255626,
-      186069e-10,
-      0.928785,
-      -129623e-9,
-      0.257244,
-      468009e-9,
-      0.928761,
-      -51849e-8,
-      0.257237,
-      187202e-8,
-      0.928751,
-      -11666e-7,
-      0.257235,
-      421204e-8,
-      0.928751,
-      -207395e-8,
-      0.257234,
-      74881e-7,
-      0.928754,
-      -324055e-8,
-      0.257235,
-      0.0117002,
-      0.92876,
-      -466639e-8,
-      0.257236,
-      0.0168486,
-      0.928763,
-      -635149e-8,
-      0.257237,
-      0.0229334,
-      0.928774,
-      -829584e-8,
-      0.257239,
-      0.029955,
-      0.928791,
-      -0.0104995,
-      0.257243,
-      0.0379139,
-      0.928804,
-      -0.0129623,
-      0.257245,
-      0.0468108,
-      0.928847,
-      -0.0156846,
-      0.257255,
-      0.0566473,
-      0.92889,
-      -0.0186661,
-      0.257263,
-      0.0674246,
-      0.928924,
-      -0.0219067,
-      0.257268,
-      0.0791433,
-      0.928989,
-      -0.0254066,
-      0.257282,
-      0.0918076,
-      0.92909,
-      -0.0291651,
-      0.257301,
-      0.105419,
-      0.92918,
-      -0.0331801,
-      0.257316,
-      0.119978,
-      0.92929,
-      -0.0374469,
-      0.257332,
-      0.135491,
-      0.929453,
-      -0.041939,
-      0.257357,
-      0.151948,
-      0.929586,
-      -0.0464612,
-      0.257347,
-      0.169275,
-      0.929858,
-      -0.0503426,
-      0.257269,
-      0.187257,
-      0.930125,
-      -0.0548409,
-      0.257199,
-      0.206204,
-      0.930403,
-      -0.0598063,
-      0.257149,
-      0.22601,
-      0.930726,
-      -0.0652437,
-      0.257122,
-      0.246561,
-      0.931098,
-      -0.0712376,
-      0.257153,
-      0.267618,
-      0.931396,
-      -0.0777506,
-      0.257237,
-      0.288993,
-      0.931947,
-      -0.0832374,
-      0.257124,
-      0.311527,
-      0.932579,
-      -0.0883955,
-      0.25683,
-      0.335697,
-      0.933194,
-      -0.0937037,
-      0.256444,
-      0.360634,
-      0.934013,
-      -0.0987292,
-      0.255939,
-      0.386126,
-      0.935307,
-      -0.103215,
-      0.255282,
-      0.412018,
-      0.936374,
-      -0.108234,
-      0.254538,
-      0.438292,
-      0.93776,
-      -0.113234,
-      0.253728,
-      0.464805,
-      0.939599,
-      -0.118013,
-      0.25275,
-      0.491464,
-      0.941036,
-      -0.122661,
-      0.251404,
-      0.518751,
-      0.94337,
-      -0.125477,
-      0.249435,
-      0.547133,
-      0.945318,
-      -0.128374,
-      0.247113,
-      0.575456,
-      0.947995,
-      -0.130996,
-      0.244441,
-      0.60372,
-      0.950818,
-      -0.133438,
-      0.241352,
-      0.63174,
-      0.954378,
-      -0.135004,
-      0.237849,
-      0.659971,
-      0.957151,
-      -0.135313,
-      0.233188,
-      0.688478,
-      0.960743,
-      -0.13521,
-      0.228001,
-      0.716767,
-      0.964352,
-      -0.135007,
-      0.222249,
-      0.744349,
-      0.967273,
-      -0.133523,
-      0.21542,
-      0.771786,
-      0.969767,
-      -0.131155,
-      0.208039,
-      0.798639,
-      0.973195,
-      -0.128492,
-      0.200076,
-      0.824774,
-      0.975557,
-      -0.125094,
-      0.191451,
-      0.850222,
-      0.977692,
-      -0.120578,
-      0.18184,
-      0.874761,
-      0.98026,
-      -0.115882,
-      0.172102,
-      0.898497,
-      0.981394,
-      -0.110372,
-      0.161859,
-      0.921636,
-      0.982386,
-      -0.10415,
-      0.15108,
-      0.943467,
-      0.983783,
-      -0.0978128,
-      0.140407,
-      0.964045,
-      0.98422,
-      -0.0906171,
-      0.129058,
-      0.98398,
-      0.985447,
-      -0.0832921,
-      0.117614,
-      1.00276,
-      0.986682,
-      -0.0754412,
-      0.10585,
-      1.02047,
-      0.987326,
-      -0.0673885,
-      0.0940943,
-      1.03678,
-      0.988707,
-      -0.0592565,
-      0.0822093,
-      1.05218,
-      0.990185,
-      -0.050717,
-      0.070192,
-      1.06652,
-      0.991866,
-      -0.0423486,
-      0.0582081,
-      1.07965,
-      0.993897,
-      -0.0336118,
-      0.0460985,
-      1.09188,
-      0.995841,
-      -0.0252178,
-      0.0342737,
-      1.10307,
-      0.997605,
-      -0.0164893,
-      0.0224829,
-      1.11324,
-      0.999037,
-      -817112e-8,
-      0.0110647,
-      1.12262,
-      1.00003,
-      291686e-9,
-      -168673e-9,
-      1.13139,
-      0.915304,
-      -552675e-11,
-      0.275999,
-      183285e-10,
-      0.91668,
-      -139285e-9,
-      0.276414,
-      461914e-9,
-      0.916664,
-      -55713e-8,
-      0.276409,
-      184763e-8,
-      0.916653,
-      -125354e-8,
-      0.276406,
-      415715e-8,
-      0.916651,
-      -222851e-8,
-      0.276405,
-      739053e-8,
-      0.916655,
-      -348205e-8,
-      0.276406,
-      0.0115478,
-      0.916653,
-      -501414e-8,
-      0.276405,
-      0.0166291,
-      0.916667,
-      -682478e-8,
-      0.276409,
-      0.0226346,
-      0.91668,
-      -891398e-8,
-      0.276412,
-      0.0295648,
-      0.91669,
-      -0.0112817,
-      0.276413,
-      0.0374199,
-      0.916727,
-      -0.013928,
-      0.276422,
-      0.0462016,
-      0.916759,
-      -0.0168528,
-      0.276429,
-      0.0559101,
-      0.916793,
-      -0.0200558,
-      0.276436,
-      0.0665466,
-      0.916849,
-      -0.0235373,
-      0.276448,
-      0.0781139,
-      0.916964,
-      -0.0272973,
-      0.276474,
-      0.0906156,
-      0.917047,
-      -0.0313344,
-      0.276491,
-      0.104051,
-      0.917152,
-      -0.0356465,
-      0.276511,
-      0.118424,
-      0.917286,
-      -0.0402271,
-      0.276533,
-      0.133736,
-      0.917469,
-      -0.0450408,
-      0.276564,
-      0.149978,
-      0.917686,
-      -0.0497872,
-      0.276563,
-      0.167057,
-      0.917953,
-      -0.0540937,
-      0.276493,
-      0.184846,
-      0.918228,
-      -0.0590709,
-      0.276437,
-      0.203614,
-      0.918572,
-      -0.0644277,
-      0.276398,
-      0.223212,
-      0.918918,
-      -0.0702326,
-      0.276362,
-      0.243584,
-      0.919356,
-      -0.076484,
-      0.276383,
-      0.264465,
-      0.919842,
-      -0.0830808,
-      0.276434,
-      0.285701,
-      0.920451,
-      -0.0892972,
-      0.276407,
-      0.307559,
-      0.921113,
-      -0.095016,
-      0.276128,
-      0.331501,
-      0.921881,
-      -0.100771,
-      0.275754,
-      0.356207,
-      0.923027,
-      -0.106029,
-      0.275254,
-      0.381477,
-      0.924364,
-      -0.111029,
-      0.274595,
-      0.40722,
-      0.925818,
-      -0.116345,
-      0.273841,
-      0.433385,
-      0.92746,
-      -0.121424,
-      0.272913,
-      0.459848,
-      0.929167,
-      -0.12657,
-      0.271837,
-      0.486493,
-      0.931426,
-      -0.131581,
-      0.270575,
-      0.513432,
-      0.934001,
-      -0.135038,
-      0.268512,
-      0.541502,
-      0.936296,
-      -0.138039,
-      0.266135,
-      0.569658,
-      0.939985,
-      -0.140687,
-      0.263271,
-      0.598375,
-      0.943516,
-      -0.143247,
-      0.260058,
-      0.626563,
-      0.94782,
-      -0.145135,
-      0.256138,
-      0.654711,
-      0.951023,
-      -0.145733,
-      0.251154,
-      0.683285,
-      0.955338,
-      -0.145554,
-      0.245562,
-      0.711831,
-      0.959629,
-      -0.145008,
-      0.239265,
-      0.739573,
-      0.963123,
-      -0.144003,
-      0.232064,
-      0.767027,
-      0.966742,
-      -0.141289,
-      0.224036,
-      0.794359,
-      0.969991,
-      -0.138247,
-      0.215305,
-      0.820361,
-      0.973403,
-      -0.134786,
-      0.206051,
-      0.846548,
-      0.975317,
-      -0.129966,
-      0.195914,
-      0.871541,
-      0.977647,
-      -0.12471,
-      0.185184,
-      0.895313,
-      0.980137,
-      -0.119086,
-      0.174161,
-      0.918398,
-      0.981031,
-      -0.112297,
-      0.162792,
-      0.940679,
-      0.982037,
-      -0.105372,
-      0.150952,
-      0.961991,
-      0.983164,
-      -0.097821,
-      0.138921,
-      0.981913,
-      0.983757,
-      -0.0897245,
-      0.126611,
-      1.00109,
-      0.985036,
-      -0.0815974,
-      0.114228,
-      1.01902,
-      0.986289,
-      -0.0727725,
-      0.101389,
-      1.03604,
-      0.987329,
-      -0.0639323,
-      0.0886476,
-      1.05149,
-      0.989193,
-      -0.0548109,
-      0.0756837,
-      1.06619,
-      0.990716,
-      -0.045687,
-      0.0627581,
-      1.07948,
-      0.992769,
-      -0.0364315,
-      0.0498337,
-      1.09172,
-      0.99524,
-      -0.0271761,
-      0.0370305,
-      1.1033,
-      0.997154,
-      -0.0179609,
-      0.0243959,
-      1.11353,
-      0.998845,
-      -878063e-8,
-      0.0119567,
-      1.12319,
-      1.00002,
-      259038e-9,
-      -108146e-9,
-      1.13177,
-      0.903945,
-      -591681e-11,
-      0.295126,
-      181226e-10,
-      0.903668,
-      -148672e-9,
-      0.295037,
-      455367e-9,
-      0.903677,
-      -594683e-9,
-      0.29504,
-      182145e-8,
-      0.903673,
-      -133805e-8,
-      0.295039,
-      409831e-8,
-      0.903666,
-      -237872e-8,
-      0.295036,
-      728584e-8,
-      0.903668,
-      -371676e-8,
-      0.295037,
-      0.0113842,
-      0.903679,
-      -535212e-8,
-      0.29504,
-      0.0163936,
-      0.903684,
-      -728479e-8,
-      0.295041,
-      0.0223141,
-      0.903698,
-      -951473e-8,
-      0.295044,
-      0.0291462,
-      0.903718,
-      -0.0120419,
-      0.295049,
-      0.0368904,
-      0.903754,
-      -0.0148664,
-      0.295058,
-      0.0455477,
-      0.903801,
-      -0.017988,
-      0.29507,
-      0.0551194,
-      0.903851,
-      -0.0214064,
-      0.295082,
-      0.0656058,
-      0.903921,
-      -0.0251219,
-      0.295097,
-      0.0770109,
-      0.904002,
-      -0.0291337,
-      0.295116,
-      0.0893354,
-      0.904111,
-      -0.033441,
-      0.29514,
-      0.102583,
-      0.904246,
-      -0.0380415,
-      0.295169,
-      0.116755,
-      0.904408,
-      -0.0429258,
-      0.295202,
-      0.131853,
-      0.904637,
-      -0.0480468,
-      0.295245,
-      0.147869,
-      0.904821,
-      -0.0529208,
-      0.295214,
-      0.164658,
-      0.905163,
-      -0.0577748,
-      0.295185,
-      0.182274,
-      0.905469,
-      -0.0631763,
-      0.295143,
-      0.200828,
-      0.905851,
-      -0.068917,
-      0.295112,
-      0.2202,
-      0.906322,
-      -0.0750861,
-      0.295104,
-      0.240372,
-      0.906761,
-      -0.0815855,
-      0.295086,
-      0.261082,
-      0.90735,
-      -0.0882138,
-      0.295095,
-      0.282123,
-      0.908087,
-      -0.095082,
-      0.295139,
-      0.303563,
-      0.908826,
-      -0.101488,
-      0.29492,
-      0.327028,
-      0.909832,
-      -0.107577,
-      0.294577,
-      0.351464,
-      0.911393,
-      -0.113033,
-      0.294115,
-      0.376497,
-      0.912804,
-      -0.118629,
-      0.293446,
-      0.402115,
-      0.914081,
-      -0.124232,
-      0.292581,
-      0.428111,
-      0.91637,
-      -0.129399,
-      0.29166,
-      0.454442,
-      0.91814,
-      -0.134892,
-      0.290422,
-      0.481024,
-      0.921179,
-      -0.140069,
-      0.289194,
-      0.507924,
-      0.924544,
-      -0.144431,
-      0.287421,
-      0.535557,
-      0.927995,
-      -0.147498,
-      0.284867,
-      0.563984,
-      0.931556,
-      -0.150197,
-      0.281722,
-      0.5923,
-      0.935777,
-      -0.152711,
-      0.278207,
-      0.620832,
-      0.940869,
-      -0.154836,
-      0.274148,
-      0.649069,
-      0.945994,
-      -0.155912,
-      0.269057,
-      0.677746,
-      0.949634,
-      -0.155641,
-      0.262799,
-      0.706293,
-      0.955032,
-      -0.154809,
-      0.256097,
-      0.734278,
-      0.95917,
-      -0.153678,
-      0.248618,
-      0.761751,
-      0.962931,
-      -0.151253,
-      0.239794,
-      0.789032,
-      0.966045,
-      -0.147625,
-      0.230281,
-      0.815422,
-      0.96971,
-      -0.143964,
-      0.220382,
-      0.841787,
-      0.972747,
-      -0.139464,
-      0.209846,
-      0.867446,
-      0.975545,
-      -0.133459,
-      0.198189,
-      0.892004,
-      0.978381,
-      -0.127424,
-      0.186362,
-      0.915458,
-      0.979935,
-      -0.120506,
-      0.173964,
-      0.937948,
-      0.980948,
-      -0.11282,
-      0.161429,
-      0.959732,
-      0.982234,
-      -0.104941,
-      0.148557,
-      0.980118,
-      0.982767,
-      -0.0962905,
-      0.135508,
-      0.999463,
-      0.983544,
-      -0.0873625,
-      0.122338,
-      1.01756,
-      0.984965,
-      -0.0783447,
-      0.108669,
-      1.03492,
-      0.986233,
-      -0.0684798,
-      0.0949911,
-      1.05087,
-      0.987796,
-      -0.0590867,
-      0.0811386,
-      1.0656,
-      0.989885,
-      -0.0489145,
-      0.0673099,
-      1.0794,
-      0.991821,
-      -0.0391,
-      0.0535665,
-      1.09174,
-      0.99448,
-      -0.029087,
-      0.0397529,
-      1.10341,
-      0.996769,
-      -0.019114,
-      0.0261463,
-      1.11383,
-      0.998641,
-      -947007e-8,
-      0.0128731,
-      1.1237,
-      0.999978,
-      446316e-9,
-      -169093e-9,
-      1.13253,
-      0.888362,
-      -627064e-11,
-      0.312578,
-      178215e-10,
-      0.889988,
-      -157791e-9,
-      0.313148,
-      448451e-9,
-      0.889825,
-      -631076e-9,
-      0.313092,
-      179356e-8,
-      0.88984,
-      -141994e-8,
-      0.313097,
-      403554e-8,
-      0.889828,
-      -25243e-7,
-      0.313092,
-      717429e-8,
-      0.889831,
-      -394421e-8,
-      0.313093,
-      0.0112099,
-      0.889831,
-      -567962e-8,
-      0.313093,
-      0.0161425,
-      0.889844,
-      -773051e-8,
-      0.313096,
-      0.0219724,
-      0.889858,
-      -0.0100968,
-      0.3131,
-      0.0286999,
-      0.889882,
-      -0.0127786,
-      0.313106,
-      0.0363256,
-      0.889918,
-      -0.0157757,
-      0.313116,
-      0.0448509,
-      0.889967,
-      -0.0190878,
-      0.313129,
-      0.0542758,
-      0.89003,
-      -0.022715,
-      0.313145,
-      0.0646032,
-      0.890108,
-      -0.0266566,
-      0.313165,
-      0.0758339,
-      0.890218,
-      -0.0309131,
-      0.313193,
-      0.0879729,
-      0.890351,
-      -0.0354819,
-      0.313226,
-      0.101019,
-      0.89051,
-      -0.0403613,
-      0.313263,
-      0.114979,
-      0.890672,
-      -0.0455385,
-      0.313294,
-      0.129848,
-      0.890882,
-      -0.0509444,
-      0.313333,
-      0.145616,
-      0.891189,
-      -0.0559657,
-      0.313324,
-      0.162122,
-      0.891457,
-      -0.0613123,
-      0.313281,
-      0.179524,
-      0.891856,
-      -0.0671488,
-      0.313281,
-      0.197855,
-      0.892312,
-      -0.0732732,
-      0.313268,
-      0.216991,
-      0.892819,
-      -0.0797865,
-      0.313263,
-      0.236924,
-      0.893369,
-      -0.0865269,
-      0.313247,
-      0.257433,
-      0.894045,
-      -0.0931592,
-      0.313205,
-      0.278215,
-      0.894884,
-      -0.100532,
-      0.313276,
-      0.299467,
-      0.895832,
-      -0.107716,
-      0.313205,
-      0.322276,
-      0.897043,
-      -0.114099,
-      0.312873,
-      0.34642,
-      0.898515,
-      -0.119941,
-      0.312331,
-      0.371187,
-      0.900191,
-      -0.126044,
-      0.311731,
-      0.396656,
-      0.90188,
-      -0.131808,
-      0.310859,
-      0.422488,
-      0.904359,
-      -0.137289,
-      0.309857,
-      0.448744,
-      0.906923,
-      -0.142991,
-      0.308714,
-      0.475239,
-      0.910634,
-      -0.148253,
-      0.307465,
-      0.501983,
-      0.914502,
-      -0.153332,
-      0.305774,
-      0.529254,
-      0.919046,
-      -0.156646,
-      0.303156,
-      0.557709,
-      0.923194,
-      -0.159612,
-      0.299928,
-      0.586267,
-      0.928858,
-      -0.162027,
-      0.296245,
-      0.614925,
-      0.934464,
-      -0.164203,
-      0.291832,
-      0.643187,
-      0.939824,
-      -0.165602,
-      0.286565,
-      0.671601,
-      0.944582,
-      -0.165383,
-      0.280073,
-      0.700213,
-      0.949257,
-      -0.164439,
-      0.272891,
-      0.728432,
-      0.954389,
-      -0.162953,
-      0.264771,
-      0.756082,
-      0.958595,
-      -0.161007,
-      0.255927,
-      0.78369,
-      0.962138,
-      -0.157243,
-      0.245769,
-      0.810769,
-      0.966979,
-      -0.152872,
-      0.235127,
-      0.836999,
-      0.969566,
-      -0.148209,
-      0.22347,
-      0.862684,
-      0.972372,
-      -0.142211,
-      0.211147,
-      0.887847,
-      0.975916,
-      -0.135458,
-      0.198606,
-      0.911843,
-      0.978026,
-      -0.128398,
-      0.185498,
-      0.934795,
-      0.979686,
-      -0.120313,
-      0.17171,
-      0.956787,
-      0.980748,
-      -0.11166,
-      0.158159,
-      0.978046,
-      0.981622,
-      -0.103035,
-      0.144399,
-      0.997693,
-      0.982356,
-      -0.0930328,
-      0.13001,
-      1.01642,
-      0.983308,
-      -0.0834627,
-      0.115778,
-      1.03366,
-      0.985037,
-      -0.0732249,
-      0.101327,
-      1.05014,
-      0.986493,
-      -0.0628145,
-      0.086554,
-      1.06507,
-      0.988484,
-      -0.0526556,
-      0.0720413,
-      1.07907,
-      0.991051,
-      -0.0415744,
-      0.0571151,
-      1.09189,
-      0.993523,
-      -0.0314275,
-      0.0426643,
-      1.10369,
-      0.99628,
-      -0.0203603,
-      0.0279325,
-      1.11423,
-      0.998344,
-      -0.0102446,
-      0.0138182,
-      1.12421,
-      0.999997,
-      42612e-8,
-      -193628e-9,
-      1.1333,
-      0.871555,
-      -660007e-11,
-      0.329176,
-      174749e-10,
-      0.875255,
-      -166579e-9,
-      0.330571,
-      441051e-9,
-      0.875644,
-      -666394e-9,
-      0.330718,
-      176441e-8,
-      0.875159,
-      -149903e-8,
-      0.330536,
-      396899e-8,
-      0.87516,
-      -266493e-8,
-      0.330536,
-      7056e-6,
-      0.875158,
-      -416393e-8,
-      0.330535,
-      0.0110251,
-      0.87516,
-      -599598e-8,
-      0.330535,
-      0.0158764,
-      0.875163,
-      -816108e-8,
-      0.330536,
-      0.0216101,
-      0.875174,
-      -0.0106591,
-      0.330538,
-      0.0282266,
-      0.875199,
-      -0.0134899,
-      0.330545,
-      0.0357266,
-      0.875257,
-      -0.0166538,
-      0.330563,
-      0.0441117,
-      0.875304,
-      -0.0201501,
-      0.330575,
-      0.0533821,
-      0.875373,
-      -0.0239785,
-      0.330595,
-      0.0635395,
-      0.875464,
-      -0.0281389,
-      0.330619,
-      0.0745872,
-      0.875565,
-      -0.0326301,
-      0.330645,
-      0.0865255,
-      0.875691,
-      -0.0374516,
-      0.330676,
-      0.0993599,
-      0.875897,
-      -0.0425993,
-      0.330733,
-      0.113093,
-      0.876091,
-      -0.0480576,
-      0.330776,
-      0.127722,
-      0.876353,
-      -0.0537216,
-      0.330826,
-      0.143227,
-      0.876649,
-      -0.0589807,
-      0.330809,
-      0.159462,
-      0.877034,
-      -0.0647865,
-      0.330819,
-      0.176642,
-      0.877443,
-      -0.0709789,
-      0.330817,
-      0.194702,
-      0.877956,
-      -0.0774782,
-      0.330832,
-      0.213577,
-      0.878499,
-      -0.0843175,
-      0.330822,
-      0.233246,
-      0.879144,
-      -0.0912714,
-      0.330804,
-      0.253512,
-      0.879982,
-      -0.0980824,
-      0.330766,
-      0.274137,
-      0.88097,
-      -0.105823,
-      0.330864,
-      0.295209,
-      0.882051,
-      -0.113671,
-      0.330896,
-      0.317226,
-      0.883397,
-      -0.120303,
-      0.330545,
-      0.341068,
-      0.884987,
-      -0.12667,
-      0.330068,
-      0.365613,
-      0.886789,
-      -0.133118,
-      0.329418,
-      0.390807,
-      0.889311,
-      -0.139024,
-      0.328683,
-      0.416494,
-      0.891995,
-      -0.144971,
-      0.327729,
-      0.442618,
-      0.895106,
-      -0.150747,
-      0.326521,
-      0.469131,
-      0.899527,
-      -0.156283,
-      0.325229,
-      0.495921,
-      0.90504,
-      -0.161707,
-      0.32378,
-      0.523162,
-      0.909875,
-      -0.165661,
-      0.32122,
-      0.55092,
-      0.91561,
-      -0.168755,
-      0.317942,
-      0.579928,
-      0.921225,
-      -0.171193,
-      0.313983,
-      0.608539,
-      0.927308,
-      -0.17319,
-      0.309636,
-      0.636854,
-      0.933077,
-      -0.174819,
-      0.304262,
-      0.66523,
-      0.938766,
-      -0.175002,
-      0.297563,
-      0.693609,
-      0.943667,
-      -0.173946,
-      0.289613,
-      0.722157,
-      0.949033,
-      -0.172221,
-      0.281227,
-      0.750021,
-      0.953765,
-      -0.169869,
-      0.271545,
-      0.777466,
-      0.95804,
-      -0.166578,
-      0.261034,
-      0.804853,
-      0.962302,
-      -0.161761,
-      0.249434,
-      0.831569,
-      0.966544,
-      -0.156636,
-      0.237484,
-      0.857779,
-      0.969372,
-      -0.150784,
-      0.224395,
-      0.883051,
-      0.972486,
-      -0.143672,
-      0.210786,
-      0.907864,
-      0.975853,
-      -0.135772,
-      0.196556,
-      0.931223,
-      0.977975,
-      -0.127942,
-      0.182307,
-      0.954061,
-      0.979122,
-      -0.118347,
-      0.167607,
-      0.97531,
-      0.980719,
-      -0.109112,
-      0.152739,
-      0.995666,
-      0.981223,
-      -0.0991789,
-      0.137932,
-      1.01475,
-      0.98216,
-      -0.0883553,
-      0.122692,
-      1.03253,
-      0.983379,
-      -0.0780825,
-      0.107493,
-      1.04917,
-      0.985434,
-      -0.0665646,
-      0.0917791,
-      1.06464,
-      0.987332,
-      -0.0557714,
-      0.0764949,
-      1.07896,
-      0.990004,
-      -0.0442805,
-      0.060721,
-      1.09199,
-      0.992975,
-      -0.0331676,
-      0.0452284,
-      1.10393,
-      0.995811,
-      -0.0219547,
-      0.0297934,
-      1.11476,
-      0.9982,
-      -0.0107613,
-      0.0146415,
-      1.12484,
-      1.00002,
-      248678e-9,
-      -14555e-8,
-      1.13413,
-      0.859519,
-      -693595e-11,
-      0.347264,
-      171673e-10,
-      0.859843,
-      -17503e-8,
-      0.347394,
-      433219e-9,
-      0.859656,
-      -700076e-9,
-      0.347319,
-      173277e-8,
-      0.859671,
-      -157517e-8,
-      0.347325,
-      389875e-8,
-      0.859669,
-      -280028e-8,
-      0.347324,
-      693112e-8,
-      0.85967,
-      -43754e-7,
-      0.347324,
-      0.01083,
-      0.859665,
-      -630049e-8,
-      0.347321,
-      0.0155954,
-      0.859685,
-      -85755e-7,
-      0.347328,
-      0.0212278,
-      0.859694,
-      -0.0112003,
-      0.347329,
-      0.0277273,
-      0.859718,
-      -0.0141747,
-      0.347336,
-      0.0350946,
-      0.85976,
-      -0.0174988,
-      0.347348,
-      0.0433314,
-      0.85982,
-      -0.0211722,
-      0.347366,
-      0.0524384,
-      0.859892,
-      -0.0251941,
-      0.347387,
-      0.0624168,
-      0.860006,
-      -0.0295649,
-      0.347422,
-      0.0732708,
-      0.860122,
-      -0.0342825,
-      0.347453,
-      0.0849999,
-      0.860282,
-      -0.0393462,
-      0.347499,
-      0.0976102,
-      0.860482,
-      -0.0447513,
-      0.347554,
-      0.111104,
-      0.860719,
-      -0.0504775,
-      0.347614,
-      0.125479,
-      0.860998,
-      -0.0563577,
-      0.347666,
-      0.140703,
-      0.861322,
-      -0.0619473,
-      0.347662,
-      0.156681,
-      0.861724,
-      -0.0681277,
-      0.347684,
-      0.173597,
-      0.862198,
-      -0.0746567,
-      0.347709,
-      0.191371,
-      0.862733,
-      -0.0815234,
-      0.347727,
-      0.209976,
-      0.863371,
-      -0.0886643,
-      0.347744,
-      0.229351,
-      0.86414,
-      -0.0957908,
-      0.347734,
-      0.24934,
-      0.865138,
-      -0.102912,
-      0.34772,
-      0.269797,
-      0.866182,
-      -0.110924,
-      0.3478,
-      0.290654,
-      0.867436,
-      -0.119223,
-      0.347911,
-      0.312074,
-      0.869087,
-      -0.126197,
-      0.347649,
-      0.335438,
-      0.870859,
-      -0.133145,
-      0.347222,
-      0.359732,
-      0.872997,
-      -0.139869,
-      0.346645,
-      0.38467,
-      0.875939,
-      -0.146089,
-      0.345935,
-      0.41019,
-      0.879012,
-      -0.152334,
-      0.345012,
-      0.436218,
-      0.883353,
-      -0.15821,
-      0.343924,
-      0.462641,
-      0.888362,
-      -0.164097,
-      0.342636,
-      0.489449,
-      0.895026,
-      -0.169528,
-      0.341351,
-      0.516629,
-      0.900753,
-      -0.174408,
-      0.339115,
-      0.544109,
-      0.906814,
-      -0.17751,
-      0.335809,
-      0.572857,
-      0.912855,
-      -0.180101,
-      0.331597,
-      0.601554,
-      0.919438,
-      -0.182116,
-      0.32698,
-      0.630198,
-      0.925962,
-      -0.183494,
-      0.321449,
-      0.658404,
-      0.931734,
-      -0.184159,
-      0.314595,
-      0.686625,
-      0.93762,
-      -0.18304,
-      0.306462,
-      0.71531,
-      0.943858,
-      -0.181323,
-      0.297514,
-      0.744272,
-      0.948662,
-      -0.178683,
-      0.287447,
-      0.771462,
-      0.953299,
-      -0.175379,
-      0.276166,
-      0.798593,
-      0.957346,
-      -0.170395,
-      0.263758,
-      0.8256,
-      0.962565,
-      -0.165042,
-      0.251019,
-      0.852575,
-      0.966075,
-      -0.158655,
-      0.237011,
-      0.878316,
-      0.969048,
-      -0.151707,
-      0.222518,
-      0.90329,
-      0.972423,
-      -0.143271,
-      0.207848,
-      0.927745,
-      0.975833,
-      -0.134824,
-      0.192463,
-      0.950859,
-      0.977629,
-      -0.125444,
-      0.1768,
-      0.972947,
-      0.978995,
-      -0.114949,
-      0.161033,
-      0.993263,
-      0.980533,
-      -0.104936,
-      0.145523,
-      1.01337,
-      0.980745,
-      -0.0935577,
-      0.129799,
-      1.03128,
-      0.981814,
-      -0.0822956,
-      0.113486,
-      1.04825,
-      0.983943,
-      -0.0710082,
-      0.0972925,
-      1.06405,
-      0.986141,
-      -0.0587931,
-      0.0808138,
-      1.0785,
-      0.988878,
-      -0.0472755,
-      0.0644915,
-      1.09204,
-      0.992132,
-      -0.0349128,
-      0.0478128,
-      1.10413,
-      0.9953,
-      -0.0232407,
-      0.031621,
-      1.11527,
-      0.998117,
-      -0.0112713,
-      0.0154935,
-      1.12551,
-      1.00003,
-      339743e-9,
-      -195763e-9,
-      1.13504,
-      0.845441,
-      -729126e-11,
-      0.364305,
-      169208e-10,
-      0.843588,
-      -183164e-9,
-      0.363506,
-      425067e-9,
-      0.843412,
-      -73253e-8,
-      0.36343,
-      169999e-8,
-      0.843401,
-      -164818e-8,
-      0.363426,
-      382495e-8,
-      0.843399,
-      -293008e-8,
-      0.363425,
-      679993e-8,
-      0.843401,
-      -457822e-8,
-      0.363425,
-      0.010625,
-      0.843394,
-      -659249e-8,
-      0.363421,
-      0.0153002,
-      0.843398,
-      -897282e-8,
-      0.363421,
-      0.0208258,
-      0.843415,
-      -0.0117191,
-      0.363426,
-      0.0272024,
-      0.843438,
-      -0.0148312,
-      0.363432,
-      0.0344305,
-      0.843483,
-      -0.018309,
-      0.363447,
-      0.0425116,
-      0.84356,
-      -0.0221521,
-      0.363472,
-      0.0514471,
-      0.843646,
-      -0.0263597,
-      0.363499,
-      0.061238,
-      0.843743,
-      -0.0309315,
-      0.363527,
-      0.0718873,
-      0.84388,
-      -0.0358658,
-      0.363569,
-      0.0833969,
-      0.844079,
-      -0.0411624,
-      0.363631,
-      0.0957742,
-      0.844279,
-      -0.0468128,
-      0.363688,
-      0.109015,
-      0.844549,
-      -0.0527923,
-      0.363761,
-      0.123124,
-      0.844858,
-      -0.0588204,
-      0.363817,
-      0.138044,
-      0.84522,
-      -0.0647573,
-      0.36383,
-      0.153755,
-      0.845669,
-      -0.0713181,
-      0.363879,
-      0.170394,
-      0.846155,
-      -0.0781697,
-      0.363908,
-      0.187861,
-      0.846789,
-      -0.0853913,
-      0.363969,
-      0.206176,
-      0.847502,
-      -0.0928086,
-      0.363999,
-      0.225244,
-      0.8484,
-      -0.10005,
-      0.363997,
-      0.244926,
-      0.849461,
-      -0.107615,
-      0.364008,
-      0.265188,
-      0.850562,
-      -0.115814,
-      0.364055,
-      0.28587,
-      0.851962,
-      -0.124334,
-      0.364179,
-      0.306926,
-      0.854326,
-      -0.131995,
-      0.364233,
-      0.329605,
-      0.856295,
-      -0.139338,
-      0.363856,
-      0.35359,
-      0.858857,
-      -0.146346,
-      0.363347,
-      0.37831,
-      0.862428,
-      -0.152994,
-      0.362807,
-      0.403722,
-      0.866203,
-      -0.159463,
-      0.361963,
-      0.429537,
-      0.871629,
-      -0.165623,
-      0.36112,
-      0.456,
-      0.877365,
-      -0.171649,
-      0.359917,
-      0.482773,
-      0.883744,
-      -0.177151,
-      0.35848,
-      0.509705,
-      0.890693,
-      -0.182381,
-      0.356523,
-      0.537215,
-      0.897278,
-      -0.186076,
-      0.3533,
-      0.565493,
-      0.903958,
-      -0.188602,
-      0.349095,
-      0.594293,
-      0.910908,
-      -0.190755,
-      0.344215,
-      0.623165,
-      0.918117,
-      -0.192063,
-      0.338606,
-      0.651573,
-      0.924644,
-      -0.192758,
-      0.331544,
-      0.679869,
-      0.931054,
-      -0.192238,
-      0.323163,
-      0.708668,
-      0.937303,
-      -0.190035,
-      0.313529,
-      0.737201,
-      0.943387,
-      -0.187162,
-      0.303152,
-      0.764977,
-      0.948494,
-      -0.183876,
-      0.29146,
-      0.792683,
-      0.952546,
-      -0.178901,
-      0.277917,
-      0.819228,
-      0.958077,
-      -0.173173,
-      0.264753,
-      0.846559,
-      0.962462,
-      -0.16645,
-      0.25002,
-      0.872962,
-      0.966569,
-      -0.159452,
-      0.234873,
-      0.898729,
-      0.969108,
-      -0.15074,
-      0.218752,
-      0.923126,
-      0.973072,
-      -0.141523,
-      0.202673,
-      0.947278,
-      0.975452,
-      -0.132075,
-      0.186326,
-      0.969938,
-      0.977784,
-      -0.121257,
-      0.169396,
-      0.991325,
-      0.97899,
-      -0.110182,
-      0.153044,
-      1.01123,
-      0.979777,
-      -0.0989634,
-      0.136485,
-      1.0299,
-      0.980865,
-      -0.0865894,
-      0.119343,
-      1.04727,
-      0.982432,
-      -0.0746115,
-      0.102452,
-      1.06341,
-      0.984935,
-      -0.0621822,
-      0.0852423,
-      1.07834,
-      0.987776,
-      -0.0495694,
-      0.0678546,
-      1.092,
-      0.99103,
-      -0.0372386,
-      0.0506917,
-      1.1043,
-      0.99474,
-      -0.0244353,
-      0.0333316,
-      1.11576,
-      0.997768,
-      -0.0121448,
-      0.0164348,
-      1.12617,
-      1.00003,
-      31774e-8,
-      -169504e-9,
-      1.13598,
-      0.825551,
-      -756799e-11,
-      0.378425,
-      165099e-10,
-      0.82664,
-      -190922e-9,
-      0.378923,
-      416504e-9,
-      0.826323,
-      -763495e-9,
-      0.378779,
-      16656e-7,
-      0.826359,
-      -171789e-8,
-      0.378795,
-      374768e-8,
-      0.82636,
-      -305402e-8,
-      0.378795,
-      666259e-8,
-      0.826368,
-      -477185e-8,
-      0.378798,
-      0.0104104,
-      0.826364,
-      -687131e-8,
-      0.378795,
-      0.0149912,
-      0.826368,
-      -935232e-8,
-      0.378795,
-      0.0204054,
-      0.826376,
-      -0.0122146,
-      0.378797,
-      0.0266532,
-      0.826399,
-      -0.0154581,
-      0.378803,
-      0.0337355,
-      0.82646,
-      -0.0190825,
-      0.378824,
-      0.0416537,
-      0.826525,
-      -0.0230873,
-      0.378846,
-      0.0504091,
-      0.826614,
-      -0.0274719,
-      0.378876,
-      0.0600032,
-      0.82674,
-      -0.0322355,
-      0.378917,
-      0.0704393,
-      0.826888,
-      -0.0373766,
-      0.378964,
-      0.0817195,
-      0.827078,
-      -0.0428936,
-      0.379024,
-      0.0938492,
-      0.827318,
-      -0.0487778,
-      0.379099,
-      0.106828,
-      0.82764,
-      -0.0549935,
-      0.379199,
-      0.120659,
-      0.827926,
-      -0.0611058,
-      0.379227,
-      0.13526,
-      0.828325,
-      -0.0675054,
-      0.379275,
-      0.150713,
-      0.828801,
-      -0.0743455,
-      0.379332,
-      0.167034,
-      0.8294,
-      -0.0815523,
-      0.379415,
-      0.184209,
-      0.830094,
-      -0.0890779,
-      0.379495,
-      0.202203,
-      0.8309,
-      -0.096736,
-      0.379555,
-      0.220945,
-      0.831943,
-      -0.104135,
-      0.379577,
-      0.240306,
-      0.833037,
-      -0.112106,
-      0.379604,
-      0.260317,
-      0.834278,
-      -0.120554,
-      0.379668,
-      0.2808,
-      0.836192,
-      -0.129128,
-      0.3799,
-      0.301654,
-      0.838671,
-      -0.137541,
-      0.380109,
-      0.323502,
-      0.840939,
-      -0.14523,
-      0.379809,
-      0.347176,
-      0.844575,
-      -0.15248,
-      0.379593,
-      0.371706,
-      0.848379,
-      -0.159607,
-      0.37909,
-      0.39688,
-      0.853616,
-      -0.166267,
-      0.378617,
-      0.422702,
-      0.858921,
-      -0.172698,
-      0.377746,
-      0.448919,
-      0.865324,
-      -0.178823,
-      0.376749,
-      0.475661,
-      0.872207,
-      -0.184542,
-      0.375363,
-      0.502599,
-      0.880018,
-      -0.189836,
-      0.373657,
-      0.529914,
-      0.88694,
-      -0.194294,
-      0.370673,
-      0.557683,
-      0.894779,
-      -0.197022,
-      0.36662,
-      0.586848,
-      0.902242,
-      -0.199108,
-      0.36138,
-      0.615831,
-      0.909914,
-      -0.200398,
-      0.355434,
-      0.644478,
-      0.917088,
-      -0.20094,
-      0.348173,
-      0.672905,
-      0.923888,
-      -0.200671,
-      0.339482,
-      0.701327,
-      0.930495,
-      -0.198773,
-      0.32956,
-      0.730101,
-      0.937247,
-      -0.195394,
-      0.318363,
-      0.758383,
-      0.943108,
-      -0.191956,
-      0.306323,
-      0.786539,
-      0.948296,
-      -0.187227,
-      0.292576,
-      0.813637,
-      0.953472,
-      -0.181165,
-      0.278234,
-      0.840793,
-      0.958485,
-      -0.174119,
-      0.263054,
-      0.867712,
-      0.962714,
-      -0.166564,
-      0.246756,
-      0.893635,
-      0.966185,
-      -0.158181,
-      0.229945,
-      0.919028,
-      0.970146,
-      -0.148275,
-      0.212633,
-      0.943413,
-      0.973491,
-      -0.138157,
-      0.195229,
-      0.966627,
-      0.975741,
-      -0.127574,
-      0.178048,
-      0.988817,
-      0.977238,
-      -0.11554,
-      0.160312,
-      1.00924,
-      0.978411,
-      -0.10364,
-      0.142857,
-      1.02845,
-      0.979811,
-      -0.0913122,
-      0.125317,
-      1.04648,
-      0.98116,
-      -0.0782558,
-      0.107627,
-      1.06284,
-      0.983543,
-      -0.0655957,
-      0.0895862,
-      1.07798,
-      0.986789,
-      -0.0520411,
-      0.0713756,
-      1.092,
-      0.990292,
-      -0.0389727,
-      0.053228,
-      1.10484,
-      0.994187,
-      -0.025808,
-      0.0351945,
-      1.11642,
-      0.997499,
-      -0.0126071,
-      0.0173198,
-      1.12703,
-      0.999999,
-      275604e-9,
-      -148602e-9,
-      1.13674,
-      0.81075,
-      -78735e-10,
-      0.394456,
-      161829e-10,
-      0.808692,
-      -198293e-9,
-      0.393453,
-      407564e-9,
-      0.80846,
-      -792877e-9,
-      0.39334,
-      162965e-8,
-      0.808595,
-      -178416e-8,
-      0.393407,
-      366711e-8,
-      0.808597,
-      -317182e-8,
-      0.393408,
-      651934e-8,
-      0.808598,
-      -495589e-8,
-      0.393408,
-      0.0101866,
-      0.808591,
-      -713627e-8,
-      0.393403,
-      0.0146689,
-      0.808592,
-      -971285e-8,
-      0.393402,
-      0.0199667,
-      0.80861,
-      -0.0126855,
-      0.393407,
-      0.0260803,
-      0.808633,
-      -0.0160538,
-      0.393413,
-      0.0330107,
-      0.80868,
-      -0.0198175,
-      0.393429,
-      0.0407589,
-      0.808748,
-      -0.0239758,
-      0.393453,
-      0.0493264,
-      0.808854,
-      -0.0285286,
-      0.39349,
-      0.0587161,
-      0.808992,
-      -0.0334748,
-      0.39354,
-      0.0689304,
-      0.809141,
-      -0.0388116,
-      0.393588,
-      0.0799707,
-      0.809352,
-      -0.0445375,
-      0.39366,
-      0.0918432,
-      0.809608,
-      -0.0506427,
-      0.393742,
-      0.104549,
-      0.809915,
-      -0.0570708,
-      0.393834,
-      0.118085,
-      0.810253,
-      -0.0633526,
-      0.393885,
-      0.132377,
-      0.810687,
-      -0.0700966,
-      0.393953,
-      0.147537,
-      0.811233,
-      -0.0772274,
-      0.394047,
-      0.163543,
-      0.811865,
-      -0.0847629,
-      0.394148,
-      0.180394,
-      0.812648,
-      -0.0925663,
-      0.394265,
-      0.198051,
-      0.813583,
-      -0.100416,
-      0.394363,
-      0.216443,
-      0.814683,
-      -0.108119,
-      0.394402,
-      0.235502,
-      0.815948,
-      -0.11644,
-      0.394489,
-      0.255242,
-      0.817278,
-      -0.125036,
-      0.394542,
-      0.275441,
-      0.819605,
-      -0.133655,
-      0.39486,
-      0.296094,
-      0.822256,
-      -0.142682,
-      0.395248,
-      0.317309,
-      0.825349,
-      -0.150756,
-      0.395241,
-      0.340516,
-      0.829605,
-      -0.158392,
-      0.395285,
-      0.364819,
-      0.83391,
-      -0.165801,
-      0.394922,
-      0.389736,
-      0.839808,
-      -0.172677,
-      0.394691,
-      0.415409,
-      0.845708,
-      -0.179448,
-      0.394006,
-      0.441546,
-      0.853025,
-      -0.185746,
-      0.393279,
-      0.46832,
-      0.859666,
-      -0.191684,
-      0.391655,
-      0.495302,
-      0.86789,
-      -0.197146,
-      0.390068,
-      0.52262,
-      0.875845,
-      -0.201904,
-      0.38727,
-      0.550336,
-      0.882634,
-      -0.205023,
-      0.382688,
-      0.578825,
-      0.891076,
-      -0.207098,
-      0.377543,
-      0.608103,
-      0.900589,
-      -0.208474,
-      0.371752,
-      0.63723,
-      0.90791,
-      -0.209068,
-      0.364016,
-      0.665769,
-      0.915971,
-      -0.208655,
-      0.355593,
-      0.694428,
-      0.923455,
-      -0.20729,
-      0.345439,
-      0.723224,
-      0.931514,
-      -0.203821,
-      0.334099,
-      0.751925,
-      0.937885,
-      -0.19986,
-      0.321069,
-      0.780249,
-      0.943136,
-      -0.194993,
-      0.306571,
-      0.8077,
-      0.948818,
-      -0.189132,
-      0.291556,
-      0.83497,
-      0.954433,
-      -0.181617,
-      0.275745,
-      0.86188,
-      0.959078,
-      -0.173595,
-      0.258695,
-      0.888562,
-      0.962705,
-      -0.164855,
-      0.240825,
-      0.914008,
-      0.966753,
-      -0.155129,
-      0.22268,
-      0.939145,
-      0.970704,
-      -0.144241,
-      0.204542,
-      0.963393,
-      0.973367,
-      -0.133188,
-      0.185927,
-      0.985983,
-      0.975984,
-      -0.121146,
-      0.167743,
-      1.00704,
-      0.976994,
-      -0.108366,
-      0.149218,
-      1.02715,
-      0.978485,
-      -0.0956746,
-      0.13131,
-      1.0455,
-      0.980074,
-      -0.0820733,
-      0.112513,
-      1.06221,
-      0.98225,
-      -0.0684061,
-      0.0938323,
-      1.07782,
-      0.98553,
-      -0.0549503,
-      0.0749508,
-      1.09199,
-      0.989529,
-      -0.0407857,
-      0.055848,
-      1.10508,
-      0.993536,
-      -0.0271978,
-      0.0368581,
-      1.11684,
-      0.997247,
-      -0.0132716,
-      0.0181845,
-      1.12789,
-      1,
-      431817e-9,
-      -198809e-9,
-      1.13792,
-      0.785886,
-      -812608e-11,
-      0.405036,
-      157669e-10,
-      0.790388,
-      -205278e-9,
-      0.407355,
-      398297e-9,
-      0.790145,
-      -820824e-9,
-      0.407231,
-      159263e-8,
-      0.790135,
-      -184681e-8,
-      0.407226,
-      358336e-8,
-      0.790119,
-      -328316e-8,
-      0.407218,
-      637039e-8,
-      0.790126,
-      -512988e-8,
-      0.40722,
-      99539e-7,
-      0.79013,
-      -738684e-8,
-      0.407221,
-      0.0143339,
-      0.790135,
-      -0.0100538,
-      0.407221,
-      0.0195107,
-      0.790134,
-      -0.0131306,
-      0.407217,
-      0.0254848,
-      0.79016,
-      -0.0166169,
-      0.407224,
-      0.0322572,
-      0.790197,
-      -0.020512,
-      0.407236,
-      0.0398284,
-      0.790273,
-      -0.0248157,
-      0.407263,
-      0.0482014,
-      0.790381,
-      -0.029527,
-      0.407304,
-      0.0573777,
-      0.790521,
-      -0.0346446,
-      0.407355,
-      0.0673602,
-      0.790704,
-      -0.0401665,
-      0.40742,
-      0.0781522,
-      0.790925,
-      -0.0460896,
-      0.407499,
-      0.0897582,
-      0.791195,
-      -0.0524017,
-      0.407589,
-      0.10218,
-      0.791522,
-      -0.0590121,
-      0.407691,
-      0.11541,
-      0.791878,
-      -0.0654876,
-      0.407748,
-      0.12939,
-      0.792361,
-      -0.0725207,
-      0.407849,
-      0.144237,
-      0.792942,
-      -0.0799844,
-      0.407963,
-      0.159924,
-      0.79362,
-      -0.0877896,
-      0.408087,
-      0.176425,
-      0.794529,
-      -0.0958451,
-      0.408259,
-      0.193733,
-      0.795521,
-      -0.103827,
-      0.408362,
-      0.211756,
-      0.796778,
-      -0.111937,
-      0.408482,
-      0.230524,
-      0.798027,
-      -0.120521,
-      0.408547,
-      0.249967,
-      0.799813,
-      -0.129242,
-      0.408721,
-      0.269926,
-      0.802387,
-      -0.138048,
-      0.409148,
-      0.290338,
-      0.805279,
-      -0.147301,
-      0.409641,
-      0.311193,
-      0.809251,
-      -0.155895,
-      0.410154,
-      0.333611,
-      0.813733,
-      -0.163942,
-      0.410297,
-      0.357615,
-      0.819081,
-      -0.171666,
-      0.410373,
-      0.382339,
-      0.825427,
-      -0.178905,
-      0.410348,
-      0.407828,
-      0.83172,
-      -0.185812,
-      0.409486,
-      0.434034,
-      0.83877,
-      -0.192318,
-      0.408776,
-      0.460493,
-      0.845817,
-      -0.198249,
-      0.407176,
-      0.487346,
-      0.854664,
-      -0.204034,
-      0.405719,
-      0.514832,
-      0.863495,
-      -0.208908,
-      0.403282,
-      0.542401,
-      0.871883,
-      -0.212765,
-      0.399293,
-      0.570683,
-      0.88065,
-      -0.214911,
-      0.393803,
-      0.599947,
-      0.89004,
-      -0.216214,
-      0.387536,
-      0.62932,
-      0.898476,
-      -0.216745,
-      0.379846,
-      0.658319,
-      0.906738,
-      -0.216387,
-      0.370625,
-      0.687138,
-      0.914844,
-      -0.215053,
-      0.360139,
-      0.71601,
-      0.923877,
-      -0.212007,
-      0.348849,
-      0.745124,
-      0.931925,
-      -0.207481,
-      0.335639,
-      0.773366,
-      0.938054,
-      -0.202418,
-      0.320798,
-      0.801636,
-      0.943895,
-      -0.196507,
-      0.304772,
-      0.829055,
-      0.949468,
-      -0.189009,
-      0.288033,
-      0.856097,
-      0.955152,
-      -0.180539,
-      0.270532,
-      0.88301,
-      0.959403,
-      -0.171437,
-      0.251639,
-      0.909296,
-      0.963309,
-      -0.161661,
-      0.232563,
-      0.934868,
-      0.967399,
-      -0.150425,
-      0.213231,
-      0.959662,
-      0.972009,
-      -0.138659,
-      0.194247,
-      0.98302,
-      0.97433,
-      -0.126595,
-      0.174718,
-      1.00517,
-      0.975823,
-      -0.113205,
-      0.155518,
-      1.02566,
-      0.976371,
-      -0.0996096,
-      0.136709,
-      1.04418,
-      0.978705,
-      -0.0860754,
-      0.117571,
-      1.06146,
-      0.981477,
-      -0.0714438,
-      0.0980046,
-      1.07777,
-      0.984263,
-      -0.0572304,
-      0.0782181,
-      1.09214,
-      0.988423,
-      -0.0428875,
-      0.0584052,
-      1.10553,
-      0.993,
-      -0.0282442,
-      0.038522,
-      1.11758,
-      0.99704,
-      -0.0140183,
-      0.0190148,
-      1.12864,
-      0.999913,
-      369494e-9,
-      -145203e-9,
-      1.13901,
-      0.777662,
-      -84153e-10,
-      0.423844,
-      154403e-10,
-      0.770458,
-      -211714e-9,
-      0.419915,
-      38845e-8,
-      0.770716,
-      -846888e-9,
-      0.420055,
-      155386e-8,
-      0.770982,
-      -190567e-8,
-      0.420202,
-      349653e-8,
-      0.770981,
-      -338782e-8,
-      0.420201,
-      621606e-8,
-      0.77098,
-      -529338e-8,
-      0.4202,
-      971274e-8,
-      0.770983,
-      -762223e-8,
-      0.4202,
-      0.0139867,
-      0.770985,
-      -0.0103741,
-      0.420198,
-      0.0190381,
-      0.770996,
-      -0.0135489,
-      0.4202,
-      0.0248677,
-      0.771029,
-      -0.0171461,
-      0.420212,
-      0.0314764,
-      0.771052,
-      -0.0211647,
-      0.420215,
-      0.0388648,
-      0.771131,
-      -0.0256048,
-      0.420245,
-      0.047036,
-      0.771235,
-      -0.0304647,
-      0.420284,
-      0.0559911,
-      0.771383,
-      -0.0357436,
-      0.420341,
-      0.0657346,
-      0.771591,
-      -0.0414392,
-      0.420423,
-      0.0762694,
-      0.771819,
-      -0.0475462,
-      0.420506,
-      0.0875984,
-      0.772123,
-      -0.0540506,
-      0.420617,
-      0.099727,
-      0.772464,
-      -0.060797,
-      0.42072,
-      0.112637,
-      0.772855,
-      -0.0675393,
-      0.420799,
-      0.126313,
-      0.773317,
-      -0.0748323,
-      0.420893,
-      0.140824,
-      0.773981,
-      -0.0825681,
-      0.421058,
-      0.15617,
-      0.774746,
-      -0.0906307,
-      0.421226,
-      0.172322,
-      0.77566,
-      -0.0988982,
-      0.421397,
-      0.189253,
-      0.776837,
-      -0.106994,
-      0.421569,
-      0.206912,
-      0.778097,
-      -0.115528,
-      0.421704,
-      0.225359,
-      0.779588,
-      -0.124317,
-      0.421849,
-      0.24447,
-      0.781574,
-      -0.133139,
-      0.422097,
-      0.264156,
-      0.784451,
-      -0.142179,
-      0.422615,
-      0.284318,
-      0.787682,
-      -0.15165,
-      0.423269,
-      0.304902,
-      0.792433,
-      -0.160771,
-      0.424396,
-      0.3265,
-      0.797359,
-      -0.169166,
-      0.424772,
-      0.35014,
-      0.803986,
-      -0.177149,
-      0.425475,
-      0.374768,
-      0.809504,
-      -0.184745,
-      0.424996,
-      0.399928,
-      0.815885,
-      -0.19173,
-      0.424247,
-      0.425796,
-      0.823513,
-      -0.198525,
-      0.423515,
-      0.452287,
-      0.832549,
-      -0.204709,
-      0.422787,
-      0.479321,
-      0.841653,
-      -0.210447,
-      0.421187,
-      0.506718,
-      0.850401,
-      -0.215501,
-      0.418519,
-      0.53432,
-      0.859854,
-      -0.219752,
-      0.414715,
-      0.56242,
-      0.869364,
-      -0.222305,
-      0.409462,
-      0.591558,
-      0.878837,
-      -0.223744,
-      0.402926,
-      0.621074,
-      0.888636,
-      -0.224065,
-      0.395043,
-      0.650538,
-      0.898132,
-      -0.223742,
-      0.38564,
-      0.679538,
-      0.907181,
-      -0.222308,
-      0.375378,
-      0.708674,
-      0.915621,
-      -0.219837,
-      0.363212,
-      0.737714,
-      0.9239,
-      -0.215233,
-      0.349313,
-      0.767014,
-      0.931644,
-      -0.209592,
-      0.334162,
-      0.795133,
-      0.938887,
-      -0.203644,
-      0.317943,
-      0.823228,
-      0.945282,
-      -0.196349,
-      0.300581,
-      0.850822,
-      0.950758,
-      -0.18742,
-      0.282195,
-      0.877594,
-      0.956146,
-      -0.177879,
-      0.262481,
-      0.904564,
-      0.960355,
-      -0.167643,
-      0.242487,
-      0.930741,
-      0.965256,
-      -0.156671,
-      0.222668,
-      0.955868,
-      0.968029,
-      -0.144123,
-      0.201907,
-      0.979869,
-      0.97251,
-      -0.131305,
-      0.18202,
-      1.00291,
-      0.974925,
-      -0.118335,
-      0.161909,
-      1.02392,
-      0.975402,
-      -0.103714,
-      0.142129,
-      1.0433,
-      0.976987,
-      -0.089415,
-      0.122447,
-      1.06089,
-      0.979677,
-      -0.0748858,
-      0.102248,
-      1.07713,
-      0.983184,
-      -0.0596086,
-      0.0814851,
-      1.09218,
-      0.987466,
-      -0.0447671,
-      0.0609484,
-      1.10585,
-      0.992348,
-      -0.0295217,
-      0.0401835,
-      1.11829,
-      0.996674,
-      -0.0143917,
-      0.0198163,
-      1.12966,
-      1.00003,
-      321364e-9,
-      -149983e-9,
-      1.1402,
-      0.757901,
-      -869074e-11,
-      0.436176,
-      151011e-10,
-      0.751195,
-      -217848e-9,
-      0.432317,
-      378533e-9,
-      0.751178,
-      -871373e-9,
-      0.432307,
-      15141e-7,
-      0.751195,
-      -196061e-8,
-      0.432317,
-      34068e-7,
-      0.751198,
-      -348552e-8,
-      0.432318,
-      605659e-8,
-      0.751195,
-      -544599e-8,
-      0.432315,
-      946353e-8,
-      0.751207,
-      -784203e-8,
-      0.43232,
-      0.013628,
-      0.751213,
-      -0.0106732,
-      0.43232,
-      0.0185499,
-      0.751221,
-      -0.0139393,
-      0.432319,
-      0.0242302,
-      0.751244,
-      -0.0176398,
-      0.432325,
-      0.0306694,
-      0.7513,
-      -0.0217743,
-      0.432348,
-      0.0378698,
-      0.751358,
-      -0.0263412,
-      0.432367,
-      0.0458321,
-      0.751458,
-      -0.0313396,
-      0.432404,
-      0.0545587,
-      0.751608,
-      -0.0367682,
-      0.432464,
-      0.0640543,
-      0.7518,
-      -0.0426246,
-      0.43254,
-      0.0743222,
-      0.752065,
-      -0.0489031,
-      0.432645,
-      0.0853668,
-      0.752376,
-      -0.0555828,
-      0.432762,
-      0.0971911,
-      0.752715,
-      -0.0623861,
-      0.432859,
-      0.109768,
-      0.753137,
-      -0.069415,
-      0.432958,
-      0.123126,
-      0.753676,
-      -0.0770039,
-      0.433099,
-      0.137308,
-      0.754345,
-      -0.084971,
-      0.433272,
-      0.15229,
-      0.755235,
-      -0.0932681,
-      0.433504,
-      0.168075,
-      0.756186,
-      -0.10171,
-      0.433693,
-      0.184625,
-      0.757363,
-      -0.110019,
-      0.433857,
-      0.201897,
-      0.75884,
-      -0.11887,
-      0.434102,
-      0.220014,
-      0.760467,
-      -0.127881,
-      0.434306,
-      0.238778,
-      0.762969,
-      -0.136766,
-      0.434751,
-      0.258172,
-      0.765823,
-      -0.14612,
-      0.43529,
-      0.278062,
-      0.769676,
-      -0.15566,
-      0.436236,
-      0.298437,
-      0.774909,
-      -0.165177,
-      0.437754,
-      0.319532,
-      0.77994,
-      -0.17402,
-      0.438343,
-      0.342505,
-      0.785757,
-      -0.182201,
-      0.438609,
-      0.366693,
-      0.792487,
-      -0.190104,
-      0.438762,
-      0.391668,
-      0.80038,
-      -0.197438,
-      0.438795,
-      0.417494,
-      0.808494,
-      -0.204365,
-      0.438226,
-      0.443933,
-      0.817695,
-      -0.210714,
-      0.437283,
-      0.470929,
-      0.828111,
-      -0.216651,
-      0.436087,
-      0.498569,
-      0.837901,
-      -0.221804,
-      0.433717,
-      0.526165,
-      0.847813,
-      -0.226318,
-      0.430133,
-      0.554155,
-      0.858314,
-      -0.229297,
-      0.425213,
-      0.582822,
-      0.868891,
-      -0.230999,
-      0.418576,
-      0.612847,
-      0.878941,
-      -0.231155,
-      0.410405,
-      0.642445,
-      0.888809,
-      -0.230935,
-      0.400544,
-      0.672024,
-      0.898089,
-      -0.229343,
-      0.389613,
-      0.701366,
-      0.908081,
-      -0.226886,
-      0.377197,
-      0.730763,
-      0.916819,
-      -0.222676,
-      0.363397,
-      0.759642,
-      0.924968,
-      -0.216835,
-      0.347437,
-      0.788775,
-      0.932906,
-      -0.210245,
-      0.32995,
-      0.817135,
-      0.940025,
-      -0.202992,
-      0.312262,
-      0.844912,
-      0.946101,
-      -0.19436,
-      0.293313,
-      0.872164,
-      0.952835,
-      -0.184125,
-      0.273638,
-      0.899443,
-      0.957347,
-      -0.173657,
-      0.252385,
-      0.926389,
-      0.961434,
-      -0.162204,
-      0.231038,
-      0.951947,
-      0.965522,
-      -0.14979,
-      0.209834,
-      0.976751,
-      0.969412,
-      -0.136307,
-      0.188821,
-      1.00022,
-      0.973902,
-      -0.122527,
-      0.168013,
-      1.02229,
-      0.974045,
-      -0.108213,
-      0.147634,
-      1.04199,
-      0.975775,
-      -0.0927397,
-      0.12705,
-      1.06019,
-      0.978383,
-      -0.0778212,
-      0.106309,
-      1.07711,
-      0.98211,
-      -0.0621216,
-      0.0849279,
-      1.09245,
-      0.986517,
-      -0.0463847,
-      0.0633519,
-      1.10651,
-      0.991696,
-      -0.0309353,
-      0.0419698,
-      1.11903,
-      0.996349,
-      -0.0150914,
-      0.0206272,
-      1.13073,
-      1.00003,
-      442449e-9,
-      -231396e-9,
-      1.14146,
-      0.727498,
-      -885074e-11,
-      0.441528,
-      145832e-10,
-      0.730897,
-      -223525e-9,
-      0.443589,
-      368298e-9,
-      0.730796,
-      -893996e-9,
-      0.443528,
-      147303e-8,
-      0.730805,
-      -201149e-8,
-      0.443533,
-      331433e-8,
-      0.730814,
-      -357596e-8,
-      0.443538,
-      589222e-8,
-      0.730815,
-      -558734e-8,
-      0.443538,
-      920678e-8,
-      0.730822,
-      -804544e-8,
-      0.44354,
-      0.0132582,
-      0.730836,
-      -0.0109501,
-      0.443545,
-      0.0180468,
-      0.730848,
-      -0.0143008,
-      0.443546,
-      0.0235732,
-      0.730871,
-      -0.0180969,
-      0.443552,
-      0.0298382,
-      0.730915,
-      -0.022338,
-      0.443567,
-      0.0368438,
-      0.730982,
-      -0.0270225,
-      0.443591,
-      0.044591,
-      0.731076,
-      -0.0321491,
-      0.443627,
-      0.0530831,
-      0.731245,
-      -0.0377166,
-      0.443699,
-      0.0623243,
-      0.73144,
-      -0.0437216,
-      0.443777,
-      0.0723181,
-      0.7317,
-      -0.0501576,
-      0.443881,
-      0.0830691,
-      0.732034,
-      -0.0569942,
-      0.444014,
-      0.0945809,
-      0.732388,
-      -0.0638756,
-      0.444113,
-      0.106825,
-      0.732853,
-      -0.071203,
-      0.444247,
-      0.119859,
-      0.733473,
-      -0.0790076,
-      0.444442,
-      0.13369,
-      0.734195,
-      -0.0871937,
-      0.444645,
-      0.148304,
-      0.735069,
-      -0.095696,
-      0.444877,
-      0.163702,
-      0.736169,
-      -0.10426,
-      0.445133,
-      0.179861,
-      0.73747,
-      -0.112853,
-      0.44537,
-      0.196778,
-      0.738991,
-      -0.12199,
-      0.445651,
-      0.214496,
-      0.740865,
-      -0.131153,
-      0.445958,
-      0.232913,
-      0.743637,
-      -0.140245,
-      0.446548,
-      0.251977,
-      0.746797,
-      -0.149722,
-      0.447246,
-      0.271551,
-      0.751517,
-      -0.159341,
-      0.448656,
-      0.291774,
-      0.756156,
-      -0.169106,
-      0.449866,
-      0.312455,
-      0.761519,
-      -0.178436,
-      0.450919,
-      0.334552,
-      0.768295,
-      -0.186904,
-      0.451776,
-      0.358491,
-      0.776613,
-      -0.195117,
-      0.452832,
-      0.383446,
-      0.783966,
-      -0.202695,
-      0.45249,
-      0.408945,
-      0.793542,
-      -0.20985,
-      0.452587,
-      0.435364,
-      0.803192,
-      -0.216403,
-      0.451852,
-      0.462336,
-      0.813892,
-      -0.22251,
-      0.450708,
-      0.48987,
-      0.824968,
-      -0.227676,
-      0.4486,
-      0.517697,
-      0.835859,
-      -0.232443,
-      0.445156,
-      0.545975,
-      0.846825,
-      -0.235775,
-      0.440351,
-      0.574483,
-      0.858085,
-      -0.237897,
-      0.433641,
-      0.604246,
-      0.868825,
-      -0.238074,
-      0.425354,
-      0.634101,
-      0.879638,
-      -0.237661,
-      0.415383,
-      0.664201,
-      0.889966,
-      -0.236186,
-      0.404136,
-      0.693918,
-      0.899479,
-      -0.233599,
-      0.390917,
-      0.723481,
-      0.908769,
-      -0.229737,
-      0.376352,
-      0.75258,
-      0.917966,
-      -0.223836,
-      0.360372,
-      0.781764,
-      0.926304,
-      -0.217067,
-      0.342551,
-      0.811139,
-      0.934626,
-      -0.209309,
-      0.324238,
-      0.839585,
-      0.941841,
-      -0.20071,
-      0.304484,
-      0.867044,
-      0.94789,
-      -0.190602,
-      0.283607,
-      0.894579,
-      0.954196,
-      -0.179253,
-      0.262205,
-      0.921743,
-      0.958383,
-      -0.167646,
-      0.239847,
-      0.948026,
-      0.963119,
-      -0.155073,
-      0.218078,
-      0.973296,
-      0.966941,
-      -0.141426,
-      0.195899,
-      0.998135,
-      0.970836,
-      -0.126849,
-      0.174121,
-      1.02021,
-      0.973301,
-      -0.112296,
-      0.153052,
-      1.04085,
-      0.97448,
-      -0.0964965,
-      0.131733,
-      1.05946,
-      0.977045,
-      -0.080489,
-      0.10997,
-      1.07693,
-      0.980751,
-      -0.064844,
-      0.0881657,
-      1.09254,
-      0.985475,
-      -0.0481938,
-      0.0657987,
-      1.10697,
-      0.991089,
-      -0.0319185,
-      0.0435215,
-      1.12004,
-      0.996122,
-      -0.0158088,
-      0.0214779,
-      1.13173,
-      1.00001,
-      372455e-9,
-      -200295e-9,
-      1.14291,
-      0.708622,
-      -907597e-11,
-      0.45304,
-      141962e-10,
-      0.711162,
-      -228911e-9,
-      0.454662,
-      358052e-9,
-      0.709812,
-      -914446e-9,
-      0.453797,
-      143034e-8,
-      0.709865,
-      -205819e-8,
-      0.453834,
-      321935e-8,
-      0.709864,
-      -365894e-8,
-      0.453833,
-      572331e-8,
-      0.709855,
-      -571692e-8,
-      0.453826,
-      894278e-8,
-      0.709862,
-      -823201e-8,
-      0.453828,
-      0.012878,
-      0.709875,
-      -0.011204,
-      0.453832,
-      0.0175295,
-      0.709896,
-      -0.0146323,
-      0.453839,
-      0.0228978,
-      0.709925,
-      -0.0185163,
-      0.453847,
-      0.0289839,
-      0.709974,
-      -0.0228551,
-      0.453866,
-      0.0357894,
-      0.710045,
-      -0.0276473,
-      0.453892,
-      0.0433161,
-      0.710133,
-      -0.032891,
-      0.453924,
-      0.0515665,
-      0.710292,
-      -0.0385851,
-      0.453992,
-      0.0605458,
-      0.710485,
-      -0.0447254,
-      0.45407,
-      0.0702574,
-      0.710769,
-      -0.0513051,
-      0.454192,
-      0.0807077,
-      0.711106,
-      -0.0582733,
-      0.454329,
-      0.091896,
-      0.711516,
-      -0.0652866,
-      0.45446,
-      0.103814,
-      0.712071,
-      -0.0728426,
-      0.454653,
-      0.116508,
-      0.712676,
-      -0.0808307,
-      0.45484,
-      0.129968,
-      0.713476,
-      -0.0892216,
-      0.455096,
-      0.144206,
-      0.714377,
-      -0.0979047,
-      0.455346,
-      0.159212,
-      0.715579,
-      -0.106531,
-      0.455647,
-      0.174973,
-      0.716977,
-      -0.115492,
-      0.455961,
-      0.191504,
-      0.71862,
-      -0.124821,
-      0.456315,
-      0.208835,
-      0.72084,
-      -0.134079,
-      0.4568,
-      0.226869,
-      0.723786,
-      -0.143427,
-      0.457521,
-      0.245582,
-      0.727464,
-      -0.153061,
-      0.458475,
-      0.264957,
-      0.732771,
-      -0.162768,
-      0.460239,
-      0.284948,
-      0.736515,
-      -0.172627,
-      0.460899,
-      0.30522,
-      0.743519,
-      -0.182487,
-      0.463225,
-      0.326717,
-      0.750041,
-      -0.191295,
-      0.464027,
-      0.350113,
-      0.758589,
-      -0.199746,
-      0.465227,
-      0.374782,
-      0.767703,
-      -0.207584,
-      0.465877,
-      0.400226,
-      0.777484,
-      -0.214973,
-      0.465996,
-      0.426442,
-      0.788792,
-      -0.221796,
-      0.466019,
-      0.453688,
-      0.800194,
-      -0.228038,
-      0.465083,
-      0.481246,
-      0.811234,
-      -0.233346,
-      0.462506,
-      0.509086,
-      0.822859,
-      -0.238073,
-      0.459257,
-      0.537338,
-      0.835082,
-      -0.241764,
-      0.454863,
-      0.566108,
-      0.846332,
-      -0.244241,
-      0.448163,
-      0.595126,
-      0.858355,
-      -0.244736,
-      0.439709,
-      0.625574,
-      0.87034,
-      -0.244278,
-      0.429837,
-      0.65617,
-      0.881027,
-      -0.24255,
-      0.418002,
-      0.686029,
-      0.891007,
-      -0.239912,
-      0.404325,
-      0.716039,
-      0.900874,
-      -0.236133,
-      0.389222,
-      0.745518,
-      0.911072,
-      -0.230672,
-      0.373269,
-      0.775026,
-      0.920359,
-      -0.22356,
-      0.355083,
-      0.804521,
-      0.928604,
-      -0.215591,
-      0.335533,
-      0.834045,
-      0.937175,
-      -0.206503,
-      0.315278,
-      0.861612,
-      0.942825,
-      -0.196684,
-      0.293653,
-      0.889131,
-      0.949805,
-      -0.185116,
-      0.271503,
-      0.916853,
-      0.955535,
-      -0.172703,
-      0.248821,
-      0.943541,
-      0.959843,
-      -0.159978,
-      0.225591,
-      0.970132,
-      0.964393,
-      -0.146375,
-      0.202719,
-      0.994709,
-      0.968008,
-      -0.131269,
-      0.179928,
-      1.0186,
-      0.971013,
-      -0.11569,
-      0.158007,
-      1.03928,
-      0.973334,
-      -0.1003,
-      0.13624,
-      1.05887,
-      0.975775,
-      -0.0833352,
-      0.1138,
-      1.07652,
-      0.979579,
-      -0.0668981,
-      0.0913141,
-      1.09297,
-      0.984323,
-      -0.0500902,
-      0.0683051,
-      1.10734,
-      0.990351,
-      -0.0332377,
-      0.0451771,
-      1.12084,
-      0.995823,
-      -0.0161491,
-      0.0221705,
-      1.13296,
-      1.0001,
-      234083e-9,
-      -108712e-9,
-      1.14441,
-      0.683895,
-      -924677e-11,
-      0.46015,
-      137429e-10,
-      0.68833,
-      -233383e-9,
-      0.463134,
-      346865e-9,
-      0.688368,
-      -933547e-9,
-      0.463159,
-      138748e-8,
-      0.688367,
-      -210049e-8,
-      0.463159,
-      312187e-8,
-      0.688369,
-      -373415e-8,
-      0.463159,
-      555004e-8,
-      0.688377,
-      -583449e-8,
-      0.463163,
-      867216e-8,
-      0.688386,
-      -840128e-8,
-      0.463166,
-      0.0124884,
-      0.688398,
-      -0.0114343,
-      0.463169,
-      0.0169993,
-      0.688418,
-      -0.0149329,
-      0.463175,
-      0.0222054,
-      0.688453,
-      -0.0188964,
-      0.463188,
-      0.028108,
-      0.688515,
-      -0.0233239,
-      0.463214,
-      0.0347085,
-      0.68857,
-      -0.0282136,
-      0.463231,
-      0.0420091,
-      0.688679,
-      -0.033564,
-      0.463276,
-      0.0500132,
-      0.688854,
-      -0.0393733,
-      0.463356,
-      0.0587255,
-      0.689038,
-      -0.0456354,
-      0.46343,
-      0.0681476,
-      0.689321,
-      -0.0523433,
-      0.463553,
-      0.0782897,
-      0.689662,
-      -0.059412,
-      0.463693,
-      0.0891501,
-      0.690188,
-      -0.0665736,
-      0.4639,
-      0.100735,
-      0.690755,
-      -0.0743106,
-      0.464107,
-      0.113074,
-      0.691405,
-      -0.0824722,
-      0.464329,
-      0.126161,
-      0.692198,
-      -0.0910484,
-      0.464585,
-      0.140007,
-      0.693196,
-      -0.0998778,
-      0.464893,
-      0.154612,
-      0.69454,
-      -0.108651,
-      0.465285,
-      0.169984,
-      0.695921,
-      -0.117855,
-      0.465596,
-      0.186106,
-      0.697749,
-      -0.12734,
-      0.466056,
-      0.203034,
-      0.700375,
-      -0.136714,
-      0.466771,
-      0.220703,
-      0.703395,
-      -0.146386,
-      0.467579,
-      0.239062,
-      0.707904,
-      -0.156096,
-      0.469067,
-      0.258188,
-      0.711673,
-      -0.165904,
-      0.469851,
-      0.277759,
-      0.717489,
-      -0.175812,
-      0.471815,
-      0.297935,
-      0.724051,
-      -0.185931,
-      0.47389,
-      0.318916,
-      0.731965,
-      -0.195238,
-      0.47587,
-      0.341591,
-      0.741151,
-      -0.204021,
-      0.477523,
-      0.366062,
-      0.751416,
-      -0.212113,
-      0.478881,
-      0.391396,
-      0.761848,
-      -0.21979,
-      0.479226,
-      0.417599,
-      0.771886,
-      -0.2267,
-      0.478495,
-      0.444401,
-      0.783998,
-      -0.232991,
-      0.477622,
-      0.472084,
-      0.796523,
-      -0.238645,
-      0.475833,
-      0.500193,
-      0.808851,
-      -0.243396,
-      0.472568,
-      0.52865,
-      0.821191,
-      -0.247226,
-      0.467857,
-      0.557362,
-      0.834261,
-      -0.250102,
-      0.461871,
-      0.586768,
-      0.846762,
-      -0.251056,
-      0.453543,
-      0.617085,
-      0.859867,
-      -0.250604,
-      0.443494,
-      0.647659,
-      0.871948,
-      -0.248783,
-      0.431711,
-      0.678119,
-      0.882967,
-      -0.245855,
-      0.417911,
-      0.708399,
-      0.892826,
-      -0.242168,
-      0.401993,
-      0.738256,
-      0.90332,
-      -0.237062,
-      0.385371,
-      0.767999,
-      0.913633,
-      -0.22997,
-      0.366837,
-      0.798191,
-      0.922774,
-      -0.221687,
-      0.346372,
-      0.827756,
-      0.931371,
-      -0.212345,
-      0.325682,
-      0.856425,
-      0.938929,
-      -0.20206,
-      0.303665,
-      0.884299,
-      0.944821,
-      -0.190981,
-      0.280786,
-      0.912023,
-      0.951792,
-      -0.178065,
-      0.2573,
-      0.939669,
-      0.957712,
-      -0.164634,
-      0.233448,
-      0.96655,
-      0.961912,
-      -0.150863,
-      0.209504,
-      0.992366,
-      0.966382,
-      -0.13577,
-      0.18597,
-      1.01633,
-      0.969588,
-      -0.119593,
-      0.162905,
-      1.03843,
-      0.971777,
-      -0.103203,
-      0.14053,
-      1.05841,
-      0.97433,
-      -0.0865888,
-      0.117909,
-      1.07632,
-      0.978686,
-      -0.0690829,
-      0.0944101,
-      1.09326,
-      0.983281,
-      -0.0516568,
-      0.0705671,
-      1.10796,
-      0.989562,
-      -0.034558,
-      0.0468592,
-      1.12182,
-      0.995465,
-      -0.0167808,
-      0.0229846,
-      1.1342,
-      0.999991,
-      373016e-9,
-      -235606e-9,
-      1.1459,
-      0.662251,
-      -939016e-11,
-      0.468575,
-      132714e-10,
-      0.666634,
-      -237624e-9,
-      0.471675,
-      335842e-9,
-      0.666411,
-      -950385e-9,
-      0.471516,
-      134321e-8,
-      0.666399,
-      -213833e-8,
-      0.471509,
-      302221e-8,
-      0.666386,
-      -38014e-7,
-      0.471499,
-      537283e-8,
-      0.666405,
-      -593958e-8,
-      0.471511,
-      839533e-8,
-      0.666406,
-      -855253e-8,
-      0.471508,
-      0.0120898,
-      0.666428,
-      -0.0116401,
-      0.471519,
-      0.0164569,
-      0.666444,
-      -0.0152015,
-      0.471522,
-      0.0214971,
-      0.66649,
-      -0.0192362,
-      0.471543,
-      0.027212,
-      0.666537,
-      -0.0237428,
-      0.471558,
-      0.033603,
-      0.666617,
-      -0.0287198,
-      0.471591,
-      0.0406728,
-      0.666718,
-      -0.0341647,
-      0.471631,
-      0.0484238,
-      0.666889,
-      -0.0400759,
-      0.47171,
-      0.0568621,
-      0.667104,
-      -0.0464479,
-      0.471805,
-      0.0659915,
-      0.667374,
-      -0.0532677,
-      0.471923,
-      0.0758178,
-      0.667772,
-      -0.0603805,
-      0.472098,
-      0.0863425,
-      0.668371,
-      -0.0677392,
-      0.472363,
-      0.0975917,
-      0.668971,
-      -0.0756028,
-      0.472596,
-      0.109567,
-      0.669696,
-      -0.0839293,
-      0.472869,
-      0.122272,
-      0.670481,
-      -0.0926683,
-      0.473126,
-      0.135718,
-      0.6715,
-      -0.1016,
-      0.473442,
-      0.149914,
-      0.672911,
-      -0.110566,
-      0.47389,
-      0.164882,
-      0.674512,
-      -0.119984,
-      0.474354,
-      0.180602,
-      0.67651,
-      -0.129574,
-      0.474922,
-      0.19711,
-      0.679292,
-      -0.139106,
-      0.475764,
-      0.214371,
-      0.682798,
-      -0.148993,
-      0.476886,
-      0.232405,
-      0.686955,
-      -0.158737,
-      0.478179,
-      0.251153,
-      0.691406,
-      -0.168754,
-      0.479432,
-      0.270436,
-      0.697438,
-      -0.178703,
-      0.481481,
-      0.290374,
-      0.704761,
-      -0.188955,
-      0.484143,
-      0.311044,
-      0.713599,
-      -0.198814,
-      0.487007,
-      0.333003,
-      0.723194,
-      -0.207869,
-      0.488962,
-      0.357144,
-      0.732601,
-      -0.216189,
-      0.489815,
-      0.382169,
-      0.744193,
-      -0.22398,
-      0.490888,
-      0.408227,
-      0.754907,
-      -0.231156,
-      0.490355,
-      0.434928,
-      0.767403,
-      -0.23747,
-      0.489548,
-      0.462599,
-      0.78107,
-      -0.243503,
-      0.488274,
-      0.490908,
-      0.793893,
-      -0.248114,
-      0.484843,
-      0.519421,
-      0.807296,
-      -0.25222,
-      0.4803,
-      0.548561,
-      0.820529,
-      -0.255265,
-      0.474097,
-      0.577772,
-      0.833716,
-      -0.256741,
-      0.466041,
-      0.607782,
-      0.848403,
-      -0.25637,
-      0.456547,
-      0.638807,
-      0.860755,
-      -0.254804,
-      0.443946,
-      0.670058,
-      0.874012,
-      -0.251834,
-      0.430852,
-      0.700749,
-      0.885619,
-      -0.247867,
-      0.414903,
-      0.731446,
-      0.896069,
-      -0.242634,
-      0.397276,
-      0.761191,
-      0.906266,
-      -0.236093,
-      0.378535,
-      0.791053,
-      0.916759,
-      -0.227543,
-      0.358038,
-      0.821298,
-      0.92523,
-      -0.21783,
-      0.335705,
-      0.850747,
-      0.93436,
-      -0.207534,
-      0.313797,
-      0.879258,
-      0.941631,
-      -0.195983,
-      0.289671,
-      0.907734,
-      0.947564,
-      -0.183567,
-      0.265319,
-      0.935206,
-      0.953681,
-      -0.169345,
-      0.240815,
-      0.962739,
-      0.960008,
-      -0.154909,
-      0.216119,
-      0.989227,
-      0.964145,
-      -0.140161,
-      0.192096,
-      1.01465,
-      0.968171,
-      -0.123411,
-      0.167855,
-      1.03737,
-      0.969859,
-      -0.106525,
-      0.144817,
-      1.05767,
-      0.972666,
-      -0.0891023,
-      0.12149,
-      1.0761,
-      0.977055,
-      -0.0718094,
-      0.0975306,
-      1.09336,
-      0.982527,
-      -0.0534213,
-      0.0730217,
-      1.10878,
-      0.989001,
-      -0.0355579,
-      0.0483366,
-      1.12285,
-      0.99512,
-      -0.0176383,
-      0.023938,
-      1.13548,
-      1.00007,
-      368831e-9,
-      -211581e-9,
-      1.14744,
-      0.651047,
-      -960845e-11,
-      0.484101,
-      12922e-9,
-      0.644145,
-      -241347e-9,
-      0.478968,
-      324578e-9,
-      0.64396,
-      -965142e-9,
-      0.478831,
-      129798e-8,
-      0.64396,
-      -217154e-8,
-      0.47883,
-      292046e-8,
-      0.643968,
-      -386049e-8,
-      0.478835,
-      519202e-8,
-      0.643974,
-      -603186e-8,
-      0.478838,
-      81128e-7,
-      0.643977,
-      -86854e-7,
-      0.478836,
-      0.011683,
-      0.643982,
-      -0.0118207,
-      0.478834,
-      0.0159031,
-      0.644024,
-      -0.0154374,
-      0.478856,
-      0.0207743,
-      0.644059,
-      -0.0195343,
-      0.478868,
-      0.0262975,
-      0.644122,
-      -0.0241103,
-      0.478896,
-      0.0324747,
-      0.644207,
-      -0.0291638,
-      0.478933,
-      0.039309,
-      0.64432,
-      -0.0346919,
-      0.478981,
-      0.0468029,
-      0.644481,
-      -0.0406919,
-      0.479053,
-      0.0549614,
-      0.644722,
-      -0.047159,
-      0.479169,
-      0.0637909,
-      0.645013,
-      -0.0540748,
-      0.479302,
-      0.0732974,
-      0.645503,
-      -0.0612001,
-      0.479541,
-      0.0834898,
-      0.646117,
-      -0.0687303,
-      0.479829,
-      0.0943873,
-      0.646707,
-      -0.0767846,
-      0.480061,
-      0.105991,
-      0.647431,
-      -0.0852465,
-      0.480343,
-      0.11831,
-      0.64831,
-      -0.0940719,
-      0.48066,
-      0.131348,
-      0.649486,
-      -0.103056,
-      0.481083,
-      0.14514,
-      0.650864,
-      -0.112261,
-      0.481528,
-      0.159676,
-      0.652604,
-      -0.121852,
-      0.482102,
-      0.174979,
-      0.654825,
-      -0.131505,
-      0.482813,
-      0.191079,
-      0.657876,
-      -0.141189,
-      0.483876,
-      0.207927,
-      0.661339,
-      -0.151239,
-      0.48499,
-      0.225586,
-      0.665463,
-      -0.161091,
-      0.486279,
-      0.243947,
-      0.670542,
-      -0.171235,
-      0.487968,
-      0.262957,
-      0.677361,
-      -0.181347,
-      0.49053,
-      0.282781,
-      0.685672,
-      -0.191679,
-      0.493862,
-      0.303311,
-      0.694551,
-      -0.201781,
-      0.49699,
-      0.324607,
-      0.703753,
-      -0.211164,
-      0.498884,
-      0.347916,
-      0.713703,
-      -0.219675,
-      0.500086,
-      0.372628,
-      0.725911,
-      -0.227836,
-      0.501554,
-      0.398694,
-      0.73862,
-      -0.23533,
-      0.502193,
-      0.425529,
-      0.752118,
-      -0.241786,
-      0.501811,
-      0.453209,
-      0.76579,
-      -0.247865,
-      0.500185,
-      0.481381,
-      0.779568,
-      -0.252696,
-      0.497159,
-      0.51011,
-      0.793991,
-      -0.256802,
-      0.492765,
-      0.539322,
-      0.808182,
-      -0.259942,
-      0.486827,
-      0.569078,
-      0.821698,
-      -0.261703,
-      0.478386,
-      0.598818,
-      0.836009,
-      -0.262006,
-      0.468772,
-      0.629762,
-      0.849824,
-      -0.260333,
-      0.456352,
-      0.661366,
-      0.863888,
-      -0.257398,
-      0.442533,
-      0.69295,
-      0.876585,
-      -0.253264,
-      0.426573,
-      0.723608,
-      0.888665,
-      -0.248026,
-      0.408964,
-      0.754378,
-      0.899537,
-      -0.241487,
-      0.389677,
-      0.784761,
-      0.9094,
-      -0.233463,
-      0.368516,
-      0.814688,
-      0.920166,
-      -0.223397,
-      0.346624,
-      0.845009,
-      0.928899,
-      -0.21255,
-      0.322717,
-      0.874431,
-      0.937156,
-      -0.200869,
-      0.298698,
-      0.902922,
-      0.943861,
-      -0.188387,
-      0.273491,
-      0.931356,
-      0.949557,
-      -0.174341,
-      0.247866,
-      0.958854,
-      0.955862,
-      -0.158994,
-      0.222496,
-      0.986098,
-      0.961721,
-      -0.143664,
-      0.197522,
-      1.01229,
-      0.965976,
-      -0.127412,
-      0.17302,
-      1.03571,
-      0.968652,
-      -0.109798,
-      0.148954,
-      1.05699,
-      0.971084,
-      -0.0916787,
-      0.125044,
-      1.07587,
-      0.975584,
-      -0.0739634,
-      0.100577,
-      1.09372,
-      0.98122,
-      -0.055322,
-      0.0753666,
-      1.10948,
-      0.988253,
-      -0.0366825,
-      0.0498899,
-      1.12394,
-      0.99482,
-      -0.0180389,
-      0.024611,
-      1.13694,
-      1.00001,
-      229839e-9,
-      -188283e-9,
-      1.14919,
-      0.613867,
-      -964198e-11,
-      0.479449,
-      123452e-10,
-      0.621485,
-      -244534e-9,
-      0.485399,
-      313091e-9,
-      0.621429,
-      -978202e-9,
-      0.485353,
-      125245e-8,
-      0.62112,
-      -220004e-8,
-      0.485114,
-      281687e-8,
-      0.621119,
-      -39111e-7,
-      0.485112,
-      500783e-8,
-      0.621122,
-      -611091e-8,
-      0.485112,
-      782498e-8,
-      0.621133,
-      -879922e-8,
-      0.485117,
-      0.0112687,
-      0.621152,
-      -0.0119756,
-      0.485125,
-      0.0153394,
-      0.621183,
-      -0.0156396,
-      0.485139,
-      0.0200382,
-      0.621227,
-      -0.0197898,
-      0.485158,
-      0.0253663,
-      0.621298,
-      -0.0244253,
-      0.485192,
-      0.0313261,
-      0.621388,
-      -0.0295441,
-      0.485233,
-      0.0379204,
-      0.621507,
-      -0.0351432,
-      0.485286,
-      0.0451523,
-      0.621693,
-      -0.0412198,
-      0.485378,
-      0.0530277,
-      0.621933,
-      -0.0477673,
-      0.485495,
-      0.0615522,
-      0.622232,
-      -0.0547574,
-      0.485635,
-      0.0707316,
-      0.622809,
-      -0.0619417,
-      0.485943,
-      0.0805883,
-      0.623407,
-      -0.069625,
-      0.486232,
-      0.0911267,
-      0.62406,
-      -0.077796,
-      0.486516,
-      0.102354,
-      0.624835,
-      -0.0863731,
-      0.486838,
-      0.114279,
-      0.625758,
-      -0.095251,
-      0.487188,
-      0.126902,
-      0.627043,
-      -0.104299,
-      0.487695,
-      0.140285,
-      0.628438,
-      -0.113724,
-      0.488163,
-      0.154397,
-      0.630325,
-      -0.123417,
-      0.488858,
-      0.169267,
-      0.632801,
-      -0.133137,
-      0.489754,
-      0.184941,
-      0.635784,
-      -0.143052,
-      0.490815,
-      0.20136,
-      0.639406,
-      -0.153132,
-      0.492048,
-      0.218643,
-      0.643872,
-      -0.163143,
-      0.49363,
-      0.236615,
-      0.6499,
-      -0.17333,
-      0.496009,
-      0.255449,
-      0.657201,
-      -0.183622,
-      0.498994,
-      0.275006,
-      0.666221,
-      -0.194019,
-      0.502888,
-      0.295354,
-      0.674419,
-      -0.204192,
-      0.505459,
-      0.316244,
-      0.683729,
-      -0.21406,
-      0.507771,
-      0.33849,
-      0.695584,
-      -0.222854,
-      0.510245,
-      0.363166,
-      0.708583,
-      -0.231315,
-      0.512293,
-      0.389071,
-      0.721233,
-      -0.238911,
-      0.512747,
-      0.415737,
-      0.735134,
-      -0.245657,
-      0.512482,
-      0.443331,
-      0.750179,
-      -0.251879,
-      0.511526,
-      0.471891,
-      0.765073,
-      -0.256911,
-      0.508935,
-      0.500892,
-      0.779794,
-      -0.261144,
-      0.504341,
-      0.530294,
-      0.794801,
-      -0.264316,
-      0.498515,
-      0.560144,
-      0.810339,
-      -0.266276,
-      0.491015,
-      0.590213,
-      0.824818,
-      -0.266981,
-      0.481126,
-      0.620865,
-      0.839375,
-      -0.265778,
-      0.468685,
-      0.652687,
-      0.853043,
-      -0.262748,
-      0.453925,
-      0.684759,
-      0.867335,
-      -0.258474,
-      0.437912,
-      0.716209,
-      0.88037,
-      -0.253187,
-      0.419648,
-      0.747508,
-      0.891711,
-      -0.246476,
-      0.39982,
-      0.77797,
-      0.902896,
-      -0.238735,
-      0.37879,
-      0.808586,
-      0.913601,
-      -0.22885,
-      0.355891,
-      0.838843,
-      0.923019,
-      -0.217656,
-      0.331773,
-      0.869014,
-      0.933432,
-      -0.205539,
-      0.307356,
-      0.898512,
-      0.939691,
-      -0.192595,
-      0.281321,
-      0.9269,
-      0.946938,
-      -0.178945,
-      0.255441,
-      0.955297,
-      0.952372,
-      -0.163587,
-      0.229013,
-      0.983231,
-      0.95909,
-      -0.147214,
-      0.203179,
-      1.00971,
-      0.963675,
-      -0.13064,
-      0.17792,
-      1.03438,
-      0.968247,
-      -0.113121,
-      0.152898,
-      1.05625,
-      0.97001,
-      -0.0945824,
-      0.128712,
-      1.07598,
-      0.974458,
-      -0.0755648,
-      0.103349,
-      1.094,
-      0.980168,
-      -0.0571998,
-      0.0776731,
-      1.1104,
-      0.987295,
-      -0.0377994,
-      0.0514445,
-      1.12491,
-      0.994432,
-      -0.0186417,
-      0.025429,
-      1.13851,
-      0.999975,
-      542714e-9,
-      -282356e-9,
-      1.15108,
-      0.592656,
-      -980249e-11,
-      0.486018,
-      119532e-10,
-      0.598467,
-      -247275e-9,
-      0.490781,
-      301531e-9,
-      0.597934,
-      -988317e-9,
-      0.490343,
-      120517e-8,
-      0.597903,
-      -222366e-8,
-      0.490319,
-      27116e-7,
-      0.597913,
-      -395315e-8,
-      0.490327,
-      482077e-8,
-      0.597919,
-      -617653e-8,
-      0.490329,
-      753264e-8,
-      0.597936,
-      -889375e-8,
-      0.490339,
-      0.0108478,
-      0.597956,
-      -0.0121043,
-      0.490347,
-      0.0147668,
-      0.597992,
-      -0.0158073,
-      0.490365,
-      0.0192905,
-      0.598032,
-      -0.0200017,
-      0.490382,
-      0.0244204,
-      0.598109,
-      -0.0246865,
-      0.49042,
-      0.0301593,
-      0.598215,
-      -0.0298594,
-      0.490474,
-      0.03651,
-      0.59833,
-      -0.0355167,
-      0.490524,
-      0.0434757,
-      0.598525,
-      -0.0416559,
-      0.490624,
-      0.0510629,
-      0.598778,
-      -0.0482692,
-      0.490753,
-      0.0592781,
-      0.599135,
-      -0.0553114,
-      0.49094,
-      0.0681304,
-      0.599802,
-      -0.062542,
-      0.491328,
-      0.0776467,
-      0.600361,
-      -0.0703638,
-      0.491598,
-      0.0878184,
-      0.60101,
-      -0.0786256,
-      0.491882,
-      0.0986573,
-      0.601811,
-      -0.0872962,
-      0.492232,
-      0.11018,
-      0.602861,
-      -0.0962284,
-      0.492684,
-      0.1224,
-      0.604167,
-      -0.10538,
-      0.493213,
-      0.135354,
-      0.605693,
-      -0.114896,
-      0.493799,
-      0.149034,
-      0.607682,
-      -0.124654,
-      0.494576,
-      0.163469,
-      0.610672,
-      -0.13456,
-      0.4959,
-      0.178747,
-      0.613313,
-      -0.144581,
-      0.496713,
-      0.194723,
-      0.617603,
-      -0.154703,
-      0.498499,
-      0.211617,
-      0.622174,
-      -0.16489,
-      0.500188,
-      0.229183,
-      0.628855,
-      -0.175164,
-      0.503072,
-      0.247786,
-      0.636963,
-      -0.185565,
-      0.506798,
-      0.267116,
-      0.644866,
-      -0.195911,
-      0.509719,
-      0.28702,
-      0.653741,
-      -0.206104,
-      0.512776,
-      0.307763,
-      0.664942,
-      -0.216447,
-      0.516812,
-      0.329631,
-      0.67633,
-      -0.22552,
-      0.519181,
-      0.353515,
-      0.690012,
-      -0.234316,
-      0.521681,
-      0.379226,
-      0.704243,
-      -0.242032,
-      0.523129,
-      0.405901,
-      0.719396,
-      -0.249172,
-      0.523768,
-      0.433585,
-      0.734471,
-      -0.255543,
-      0.522541,
-      0.462085,
-      0.750539,
-      -0.260697,
-      0.520217,
-      0.491233,
-      0.766365,
-      -0.26501,
-      0.516293,
-      0.521094,
-      0.781677,
-      -0.268409,
-      0.509708,
-      0.551014,
-      0.797132,
-      -0.270399,
-      0.501944,
-      0.581463,
-      0.812655,
-      -0.271247,
-      0.492025,
-      0.612402,
-      0.828592,
-      -0.270708,
-      0.480424,
-      0.643798,
-      0.844044,
-      -0.268085,
-      0.465955,
-      0.67682,
-      0.857305,
-      -0.263459,
-      0.448425,
-      0.708496,
-      0.87114,
-      -0.258151,
-      0.430243,
-      0.74046,
-      0.884936,
-      -0.251171,
-      0.410578,
-      0.771583,
-      0.895772,
-      -0.243305,
-      0.38862,
-      0.802234,
-      0.906961,
-      -0.234037,
-      0.365214,
-      0.833179,
-      0.917775,
-      -0.222714,
-      0.34116,
-      0.86353,
-      0.927883,
-      -0.210175,
-      0.31572,
-      0.893557,
-      0.936617,
-      -0.196925,
-      0.289159,
-      0.922976,
-      0.943384,
-      -0.182788,
-      0.261996,
-      0.951606,
-      0.949713,
-      -0.167965,
-      0.235324,
-      0.979958,
-      0.955818,
-      -0.151109,
-      0.208408,
-      1.00765,
-      0.961344,
-      -0.133834,
-      0.182591,
-      1.03329,
-      0.965469,
-      -0.115987,
-      0.156958,
-      1.0557,
-      0.968693,
-      -0.09746,
-      0.132239,
-      1.07583,
-      0.973165,
-      -0.0778514,
-      0.106195,
-      1.09451,
-      0.979387,
-      -0.0585067,
-      0.0797669,
-      1.11137,
-      0.98671,
-      -0.0390409,
-      0.0530263,
-      1.12643,
-      0.994093,
-      -0.019408,
-      0.0263163,
-      1.14016,
-      1.00002,
-      540029e-9,
-      -194487e-9,
-      1.15299,
-      0.574483,
-      -989066e-11,
-      0.494533,
-      114896e-10,
-      0.574478,
-      -249127e-9,
-      0.494528,
-      289403e-9,
-      0.574607,
-      -996811e-9,
-      0.494637,
-      115797e-8,
-      0.574396,
-      -224241e-8,
-      0.494458,
-      260498e-8,
-      0.574377,
-      -398632e-8,
-      0.49444,
-      463102e-8,
-      0.574386,
-      -622836e-8,
-      0.494445,
-      723623e-8,
-      0.574401,
-      -89683e-7,
-      0.494453,
-      0.010421,
-      0.574419,
-      -0.0122056,
-      0.49446,
-      0.0141859,
-      0.574459,
-      -0.0159396,
-      0.494481,
-      0.0185322,
-      0.574525,
-      -0.0201692,
-      0.49452,
-      0.0234617,
-      0.574587,
-      -0.0248924,
-      0.494547,
-      0.0289762,
-      0.574697,
-      -0.0301074,
-      0.494604,
-      0.0350797,
-      0.574853,
-      -0.0358114,
-      0.494688,
-      0.0417767,
-      0.575027,
-      -0.041999,
-      0.494772,
-      0.0490718,
-      0.575294,
-      -0.0486618,
-      0.494915,
-      0.0569728,
-      0.575733,
-      -0.0557148,
-      0.495173,
-      0.0654955,
-      0.576356,
-      -0.0630489,
-      0.495537,
-      0.0746612,
-      0.576944,
-      -0.0709285,
-      0.495836,
-      0.0844615,
-      0.57765,
-      -0.0792723,
-      0.496177,
-      0.0949142,
-      0.578491,
-      -0.0880167,
-      0.496563,
-      0.10603,
-      0.579639,
-      -0.0969462,
-      0.497096,
-      0.117841,
-      0.580989,
-      -0.10622,
-      0.497684,
-      0.130367,
-      0.582587,
-      -0.115861,
-      0.498337,
-      0.143609,
-      0.584951,
-      -0.125605,
-      0.499414,
-      0.157625,
-      0.587602,
-      -0.135608,
-      0.500518,
-      0.172413,
-      0.59076,
-      -0.145742,
-      0.501767,
-      0.187999,
-      0.594992,
-      -0.155934,
-      0.503542,
-      0.20445,
-      0.600656,
-      -0.166303,
-      0.506135,
-      0.221764,
-      0.607816,
-      -0.176681,
-      0.509542,
-      0.24002,
-      0.61522,
-      -0.187071,
-      0.51263,
-      0.258992,
-      0.623702,
-      -0.197465,
-      0.516021,
-      0.278773,
-      0.634192,
-      -0.207816,
-      0.520422,
-      0.299377,
-      0.644936,
-      -0.218183,
-      0.524073,
-      0.320802,
-      0.657888,
-      -0.2278,
-      0.528049,
-      0.34384,
-      0.670666,
-      -0.236747,
-      0.52986,
-      0.36916,
-      0.685626,
-      -0.24484,
-      0.531892,
-      0.395867,
-      0.701304,
-      -0.252071,
-      0.532727,
-      0.423488,
-      0.717727,
-      -0.258714,
-      0.532146,
-      0.452201,
-      0.733914,
-      -0.264211,
-      0.529883,
-      0.481579,
-      0.750529,
-      -0.26859,
-      0.5259,
-      0.511558,
-      0.76747,
-      -0.272046,
-      0.51999,
-      0.542042,
-      0.785189,
-      -0.274225,
-      0.513083,
-      0.572799,
-      0.800954,
-      -0.275189,
-      0.502936,
-      0.603816,
-      0.816962,
-      -0.274946,
-      0.490921,
-      0.635461,
-      0.83336,
-      -0.272695,
-      0.47684,
-      0.6676,
-      0.848143,
-      -0.268223,
-      0.459405,
-      0.70051,
-      0.861818,
-      -0.262768,
-      0.440319,
-      0.732902,
-      0.876828,
-      -0.255872,
-      0.420123,
-      0.765084,
-      0.889312,
-      -0.247703,
-      0.398379,
-      0.796391,
-      0.900412,
-      -0.238381,
-      0.374496,
-      0.827333,
-      0.912251,
-      -0.227783,
-      0.349874,
-      0.858385,
-      0.921792,
-      -0.214832,
-      0.323181,
-      0.888652,
-      0.931273,
-      -0.200949,
-      0.296624,
-      0.917763,
-      0.940295,
-      -0.186537,
-      0.269211,
-      0.947878,
-      0.946812,
-      -0.171538,
-      0.241447,
-      0.977016,
-      0.953588,
-      -0.155254,
-      0.213829,
-      1.00501,
-      0.958841,
-      -0.137156,
-      0.186807,
-      1.03179,
-      0.963746,
-      -0.118699,
-      0.160706,
-      1.05502,
-      0.966468,
-      -0.0998358,
-      0.135504,
-      1.07568,
-      0.971178,
-      -0.0805186,
-      0.109131,
-      1.09479,
-      0.97831,
-      -0.0599348,
-      0.0818293,
-      1.1123,
-      0.985886,
-      -0.0399661,
-      0.0545872,
-      1.12771,
-      0.994021,
-      -0.0198682,
-      0.0269405,
-      1.14186,
-      1.00009,
-      271022e-9,
-      -12989e-8,
-      1.15514,
-      0.538716,
-      -990918e-11,
-      0.486732,
-      109675e-10,
-      0.550656,
-      -250642e-9,
-      0.497518,
-      277412e-9,
-      0.55057,
-      -100265e-8,
-      0.497441,
-      110974e-8,
-      0.550903,
-      -225672e-8,
-      0.497733,
-      249779e-8,
-      0.550568,
-      -401046e-8,
-      0.497438,
-      443906e-8,
-      0.550574,
-      -626613e-8,
-      0.49744,
-      693637e-8,
-      0.550591,
-      -90226e-7,
-      0.497449,
-      998921e-8,
-      0.550623,
-      -0.0122795,
-      0.497469,
-      0.0135984,
-      0.550667,
-      -0.0160361,
-      0.497495,
-      0.0177654,
-      0.550724,
-      -0.0202908,
-      0.497526,
-      0.0224915,
-      0.550792,
-      -0.0250421,
-      0.497557,
-      0.0277795,
-      0.550918,
-      -0.0302878,
-      0.49763,
-      0.0336334,
-      0.551058,
-      -0.0360241,
-      0.497701,
-      0.0400573,
-      0.551276,
-      -0.0422473,
-      0.497824,
-      0.0470585,
-      0.551551,
-      -0.0489441,
-      0.497977,
-      0.0546433,
-      0.552074,
-      -0.0559596,
-      0.498312,
-      0.0628367,
-      0.552681,
-      -0.0633978,
-      0.498679,
-      0.071646,
-      0.553324,
-      -0.0713176,
-      0.499031,
-      0.0810746,
-      0.554011,
-      -0.0797268,
-      0.499365,
-      0.091129,
-      0.55488,
-      -0.0885238,
-      0.499779,
-      0.101837,
-      0.556171,
-      -0.0974417,
-      0.500444,
-      0.113239,
-      0.557498,
-      -0.106841,
-      0.501025,
-      0.125316,
-      0.559299,
-      -0.116533,
-      0.501864,
-      0.138128,
-      0.561647,
-      -0.126298,
-      0.502967,
-      0.151695,
-      0.564347,
-      -0.136388,
-      0.504129,
-      0.16604,
-      0.567863,
-      -0.146576,
-      0.505713,
-      0.181207,
-      0.572569,
-      -0.156832,
-      0.507953,
-      0.197259,
-      0.578919,
-      -0.167323,
-      0.511186,
-      0.214258,
-      0.585387,
-      -0.177712,
-      0.514042,
-      0.232038,
-      0.593134,
-      -0.188184,
-      0.517484,
-      0.250733,
-      0.603295,
-      -0.198717,
-      0.522345,
-      0.270454,
-      0.613854,
-      -0.209177,
-      0.526751,
-      0.290807,
-      0.626092,
-      -0.219644,
-      0.531595,
-      0.312202,
-      0.637868,
-      -0.229494,
-      0.534721,
-      0.334435,
-      0.652458,
-      -0.238718,
-      0.538304,
-      0.359184,
-      0.666985,
-      -0.247061,
-      0.539875,
-      0.385637,
-      0.683301,
-      -0.254652,
-      0.541042,
-      0.41328,
-      0.69998,
-      -0.261376,
-      0.540735,
-      0.441903,
-      0.717824,
-      -0.267085,
-      0.539139,
-      0.471609,
-      0.734617,
-      -0.271465,
-      0.534958,
-      0.501446,
-      0.753663,
-      -0.27528,
-      0.53032,
-      0.532571,
-      0.770512,
-      -0.277617,
-      0.522134,
-      0.563641,
-      0.787356,
-      -0.278525,
-      0.51206,
-      0.595067,
-      0.806252,
-      -0.278512,
-      0.50119,
-      0.627226,
-      0.822061,
-      -0.277023,
-      0.486791,
-      0.659402,
-      0.838959,
-      -0.273175,
-      0.470467,
-      0.692874,
-      0.85379,
-      -0.267238,
-      0.450688,
-      0.725702,
-      0.868268,
-      -0.260327,
-      0.429741,
-      0.75832,
-      0.881994,
-      -0.251946,
-      0.407223,
-      0.790189,
-      0.893885,
-      -0.242432,
-      0.383214,
-      0.821625,
-      0.905118,
-      -0.231904,
-      0.357297,
-      0.853011,
-      0.916045,
-      -0.219545,
-      0.330733,
-      0.883773,
-      0.927614,
-      -0.205378,
-      0.303916,
-      0.914435,
-      0.936005,
-      -0.190388,
-      0.275941,
-      0.944502,
-      0.944533,
-      -0.1749,
-      0.247493,
-      0.974439,
-      0.950758,
-      -0.158588,
-      0.218996,
-      1.00286,
-      0.957078,
-      -0.141027,
-      0.191559,
-      1.0304,
-      0.962448,
-      -0.121507,
-      0.164457,
-      1.05466,
-      0.964993,
-      -0.102068,
-      0.138636,
-      1.0761,
-      0.970017,
-      -0.0822598,
-      0.111861,
-      1.09541,
-      0.97661,
-      -0.062033,
-      0.0843438,
-      1.11317,
-      0.985073,
-      -0.0409832,
-      0.0558496,
-      1.12911,
-      0.993515,
-      -0.020146,
-      0.0275331,
-      1.1438,
-      1.00006,
-      27329e-8,
-      -107883e-9,
-      1.15736,
-      0.525324,
-      -999341e-11,
-      0.498153,
-      105385e-10,
-      0.526513,
-      -251605e-9,
-      0.499277,
-      265329e-9,
-      0.526517,
-      -100641e-8,
-      0.499282,
-      10613e-7,
-      0.526588,
-      -226466e-8,
-      0.499337,
-      238823e-8,
-      0.526539,
-      -40255e-7,
-      0.499302,
-      424535e-8,
-      0.526547,
-      -628954e-8,
-      0.499306,
-      663364e-8,
-      0.526561,
-      -905628e-8,
-      0.499313,
-      955337e-8,
-      0.526593,
-      -0.0123253,
-      0.499334,
-      0.0130054,
-      0.526642,
-      -0.0160957,
-      0.499365,
-      0.0169911,
-      0.5267,
-      -0.0203661,
-      0.499396,
-      0.0215122,
-      0.526792,
-      -0.0251347,
-      0.499451,
-      0.0265718,
-      0.526904,
-      -0.0303985,
-      0.499511,
-      0.0321732,
-      0.527079,
-      -0.0361554,
-      0.499617,
-      0.0383231,
-      0.527285,
-      -0.0423982,
-      0.499731,
-      0.045026,
-      0.527602,
-      -0.0491121,
-      0.499924,
-      0.0522936,
-      0.528166,
-      -0.0561127,
-      0.500306,
-      0.0601528,
-      0.52879,
-      -0.0635988,
-      0.5007,
-      0.0686059,
-      0.529421,
-      -0.071581,
-      0.501048,
-      0.0776518,
-      0.530144,
-      -0.0799854,
-      0.501421,
-      0.0873148,
-      0.531062,
-      -0.0888032,
-      0.501884,
-      0.0976084,
-      0.532374,
-      -0.0977643,
-      0.50259,
-      0.108588,
-      0.533828,
-      -0.107197,
-      0.50329,
-      0.120234,
-      0.53581,
-      -0.116887,
-      0.504312,
-      0.132602,
-      0.538063,
-      -0.126755,
-      0.505365,
-      0.145721,
-      0.5409,
-      -0.136819,
-      0.506668,
-      0.159617,
-      0.544882,
-      -0.147117,
-      0.508731,
-      0.174369,
-      0.550238,
-      -0.157446,
-      0.511601,
-      0.190028,
-      0.556038,
-      -0.167988,
-      0.514431,
-      0.206587,
-      0.563031,
-      -0.178364,
-      0.517808,
-      0.224046,
-      0.571543,
-      -0.189007,
-      0.521937,
-      0.242503,
-      0.582255,
-      -0.199546,
-      0.527415,
-      0.261977,
-      0.59272,
-      -0.210084,
-      0.531682,
-      0.282162,
-      0.605648,
-      -0.220448,
-      0.537123,
-      0.303426,
-      0.61785,
-      -0.230593,
-      0.540664,
-      0.325323,
-      0.632223,
-      -0.240238,
-      0.544467,
-      0.348993,
-      0.648819,
-      -0.24887,
-      0.547594,
-      0.375462,
-      0.665825,
-      -0.256657,
-      0.54912,
-      0.403024,
-      0.683389,
-      -0.263711,
-      0.549294,
-      0.431773,
-      0.701495,
-      -0.269666,
-      0.547649,
-      0.461494,
-      0.719197,
-      -0.274169,
-      0.543786,
-      0.491623,
-      0.737906,
-      -0.278124,
-      0.538644,
-      0.522994,
-      0.756652,
-      -0.280632,
-      0.531057,
-      0.554775,
-      0.775279,
-      -0.281741,
-      0.521972,
-      0.586441,
-      0.792688,
-      -0.281652,
-      0.509613,
-      0.618596,
-      0.811894,
-      -0.280345,
-      0.496497,
-      0.651462,
-      0.827938,
-      -0.277128,
-      0.47968,
-      0.684023,
-      0.844837,
-      -0.271646,
-      0.460688,
-      0.718024,
-      0.859239,
-      -0.264397,
-      0.438872,
-      0.751207,
-      0.874088,
-      -0.256144,
-      0.41577,
-      0.784232,
-      0.887693,
-      -0.246311,
-      0.391369,
-      0.816191,
-      0.899402,
-      -0.235497,
-      0.365872,
-      0.847828,
-      0.910973,
-      -0.223631,
-      0.338618,
-      0.87934,
-      0.92204,
-      -0.209874,
-      0.310803,
-      0.910325,
-      0.930987,
-      -0.194265,
-      0.281802,
-      0.940695,
-      0.94,
-      -0.178125,
-      0.252836,
-      0.970958,
-      0.948018,
-      -0.161479,
-      0.224239,
-      1.00078,
-      0.955141,
-      -0.144038,
-      0.195857,
-      1.0288,
-      0.960513,
-      -0.124915,
-      0.168487,
-      1.05371,
-      0.963964,
-      -0.104284,
-      0.141495,
-      1.07596,
-      0.968713,
-      -0.0838732,
-      0.114437,
-      1.09628,
-      0.975524,
-      -0.0635579,
-      0.0863105,
-      1.11448,
-      0.98431,
-      -0.042291,
-      0.0574774,
-      1.13069,
-      0.992916,
-      -0.0209131,
-      0.0284343,
-      1.14568,
-      0.999926,
-      743097e-9,
-      -379265e-9,
-      1.15955,
-      0.501042,
-      -998428e-11,
-      0.498726,
-      100306e-10,
-      0.502992,
-      -252112e-9,
-      0.500665,
-      253283e-9,
-      0.502417,
-      -100791e-8,
-      0.500092,
-      101259e-8,
-      0.502965,
-      -226919e-8,
-      0.500621,
-      227978e-8,
-      0.502318,
-      -403109e-8,
-      0.499994,
-      405011e-8,
-      0.502333,
-      -629832e-8,
-      0.500005,
-      632868e-8,
-      0.502362,
-      -906907e-8,
-      0.500027,
-      911446e-8,
-      0.502369,
-      -0.0123423,
-      0.500023,
-      0.0124078,
-      0.50243,
-      -0.0161178,
-      0.500066,
-      0.016211,
-      0.502493,
-      -0.0203937,
-      0.500103,
-      0.0205256,
-      0.502592,
-      -0.0251684,
-      0.500166,
-      0.0253548,
-      0.502707,
-      -0.0304389,
-      0.50023,
-      0.0307029,
-      0.502881,
-      -0.0362015,
-      0.500335,
-      0.0365753,
-      0.503124,
-      -0.0424507,
-      0.500488,
-      0.0429798,
-      0.503443,
-      -0.0491582,
-      0.500686,
-      0.0499268,
-      0.504083,
-      -0.0561476,
-      0.501155,
-      0.0574541,
-      0.504668,
-      -0.0636846,
-      0.501524,
-      0.0655408,
-      0.505319,
-      -0.0716834,
-      0.501904,
-      0.0742072,
-      0.50609,
-      -0.0800925,
-      0.502321,
-      0.0834699,
-      0.507122,
-      -0.0888425,
-      0.502896,
-      0.0933603,
-      0.508414,
-      -0.097855,
-      0.503603,
-      0.10391,
-      0.509955,
-      -0.107304,
-      0.504416,
-      0.115113,
-      0.512061,
-      -0.116921,
-      0.505565,
-      0.127054,
-      0.514419,
-      -0.12689,
-      0.506732,
-      0.139709,
-      0.517529,
-      -0.136934,
-      0.508338,
-      0.153173,
-      0.522085,
-      -0.147327,
-      0.510987,
-      0.167528,
-      0.526986,
-      -0.157612,
-      0.513527,
-      0.182708,
-      0.533122,
-      -0.168213,
-      0.516717,
-      0.198881,
-      0.540807,
-      -0.178688,
-      0.520832,
-      0.215986,
-      0.550687,
-      -0.189511,
-      0.52632,
-      0.234335,
-      0.560567,
-      -0.199998,
-      0.531009,
-      0.253375,
-      0.571698,
-      -0.210652,
-      0.535839,
-      0.273499,
-      0.584364,
-      -0.220917,
-      0.541091,
-      0.294355,
-      0.599066,
-      -0.23137,
-      0.546875,
-      0.316525,
-      0.614148,
-      -0.241206,
-      0.551306,
-      0.339671,
-      0.631157,
-      -0.250379,
-      0.555187,
-      0.36531,
-      0.647919,
-      -0.258397,
-      0.556595,
-      0.392767,
-      0.666112,
-      -0.265528,
-      0.556949,
-      0.421397,
-      0.686158,
-      -0.271827,
-      0.556617,
-      0.451433,
-      0.704838,
-      -0.27674,
-      0.552975,
-      0.482131,
-      0.723957,
-      -0.280733,
-      0.547814,
-      0.513458,
-      0.74262,
-      -0.283359,
-      0.53997,
-      0.545446,
-      0.762009,
-      -0.284541,
-      0.530422,
-      0.57775,
-      0.781314,
-      -0.284507,
-      0.518546,
-      0.610434,
-      0.799116,
-      -0.283309,
-      0.504178,
-      0.643178,
-      0.817604,
-      -0.280378,
-      0.48843,
-      0.676248,
-      0.83459,
-      -0.275619,
-      0.469457,
-      0.709698,
-      0.850974,
-      -0.26856,
-      0.447698,
-      0.744245,
-      0.866747,
-      -0.260094,
-      0.424791,
-      0.777695,
-      0.881412,
-      -0.249929,
-      0.399913,
-      0.810392,
-      0.8936,
-      -0.239137,
-      0.37308,
-      0.842872,
-      0.905943,
-      -0.226818,
-      0.345705,
-      0.874677,
-      0.916408,
-      -0.213699,
-      0.31706,
-      0.906257,
-      0.927215,
-      -0.198428,
-      0.288444,
-      0.936881,
-      0.935625,
-      -0.181643,
-      0.258329,
-      0.96795,
-      0.944076,
-      -0.164386,
-      0.228488,
-      0.998216,
-      0.951229,
-      -0.146339,
-      0.199763,
-      1.02689,
-      0.958793,
-      -0.127709,
-      0.172153,
-      1.0535,
-      0.963219,
-      -0.107244,
-      0.144989,
-      1.07646,
-      0.967562,
-      -0.0857764,
-      0.11685,
-      1.09675,
-      0.974866,
-      -0.0645377,
-      0.0880571,
-      1.11576,
-      0.983353,
-      -0.0431732,
-      0.0587352,
-      1.13227,
-      0.992503,
-      -0.0218356,
-      0.0294181,
-      1.1478,
-      1.00003,
-      605203e-9,
-      -231013e-9,
-      1.16207,
-      0.482935,
-      -101177e-10,
-      0.504695,
-      968142e-11,
-      0.477554,
-      -251521e-9,
-      0.499071,
-      240676e-9,
-      0.477904,
-      -100683e-8,
-      0.499436,
-      96342e-8,
-      0.478368,
-      -226636e-8,
-      0.499899,
-      21687e-7,
-      0.477977,
-      -402719e-8,
-      0.499513,
-      385384e-8,
-      0.477993,
-      -629226e-8,
-      0.499525,
-      60221e-7,
-      0.478011,
-      -906011e-8,
-      0.499536,
-      867289e-8,
-      0.478051,
-      -0.0123305,
-      0.499566,
-      0.0118074,
-      0.478089,
-      -0.016102,
-      0.499587,
-      0.0154269,
-      0.478171,
-      -0.0203736,
-      0.499645,
-      0.0195341,
-      0.478254,
-      -0.025143,
-      0.499692,
-      0.0241318,
-      0.47839,
-      -0.0304071,
-      0.499779,
-      0.0292247,
-      0.478588,
-      -0.0361631,
-      0.499911,
-      0.0348196,
-      0.478812,
-      -0.0424023,
-      0.500046,
-      0.0409231,
-      0.479208,
-      -0.0490724,
-      0.500326,
-      0.047552,
-      0.479841,
-      -0.0560722,
-      0.500805,
-      0.0547377,
-      0.480392,
-      -0.0636125,
-      0.501152,
-      0.0624607,
-      0.481068,
-      -0.0716134,
-      0.501561,
-      0.0707473,
-      0.481898,
-      -0.0800062,
-      0.502054,
-      0.0796118,
-      0.483022,
-      -0.0886568,
-      0.502728,
-      0.0890974,
-      0.484332,
-      -0.0977553,
-      0.503479,
-      0.0992099,
-      0.486126,
-      -0.107173,
-      0.504546,
-      0.10999,
-      0.488066,
-      -0.11677,
-      0.50557,
-      0.121476,
-      0.490521,
-      -0.126725,
-      0.506849,
-      0.133672,
-      0.494232,
-      -0.136793,
-      0.50911,
-      0.146731,
-      0.498302,
-      -0.147116,
-      0.511345,
-      0.160577,
-      0.503565,
-      -0.157446,
-      0.514344,
-      0.175335,
-      0.510902,
-      -0.168121,
-      0.518824,
-      0.191207,
-      0.519263,
-      -0.178799,
-      0.523666,
-      0.208058,
-      0.528204,
-      -0.189407,
-      0.528296,
-      0.225875,
-      0.538854,
-      -0.200145,
-      0.533724,
-      0.244782,
-      0.551278,
-      -0.210701,
-      0.539833,
-      0.264753,
-      0.565222,
-      -0.221303,
-      0.546131,
-      0.285745,
-      0.579403,
-      -0.231688,
-      0.551496,
-      0.307592,
-      0.595469,
-      -0.241718,
-      0.556809,
-      0.330582,
-      0.610929,
-      -0.250992,
-      0.559641,
-      0.354995,
-      0.629433,
-      -0.259602,
-      0.562379,
-      0.382471,
-      0.648504,
-      -0.267038,
-      0.563676,
-      0.411126,
-      0.66756,
-      -0.273388,
-      0.562092,
-      0.440924,
-      0.689143,
-      -0.278788,
-      0.560807,
-      0.472118,
-      0.709056,
-      -0.282783,
-      0.555701,
-      0.503774,
-      0.729855,
-      -0.285836,
-      0.548698,
-      0.536364,
-      0.748954,
-      -0.287078,
-      0.538544,
-      0.56895,
-      0.768373,
-      -0.287133,
-      0.526711,
-      0.601991,
-      0.78827,
-      -0.285839,
-      0.512511,
-      0.635403,
-      0.807465,
-      -0.283238,
-      0.496323,
-      0.668797,
-      0.825194,
-      -0.27906,
-      0.477638,
-      0.702584,
-      0.842203,
-      -0.272286,
-      0.456253,
-      0.736393,
-      0.857749,
-      -0.263854,
-      0.432412,
-      0.77096,
-      0.874799,
-      -0.253943,
-      0.407806,
-      0.80489,
-      0.887497,
-      -0.24237,
-      0.38033,
-      0.83771,
-      0.89966,
-      -0.230278,
-      0.352446,
-      0.870376,
-      0.911753,
-      -0.21646,
-      0.323268,
-      0.902256,
-      0.923011,
-      -0.202071,
-      0.294314,
-      0.933306,
-      0.932375,
-      -0.185519,
-      0.264104,
-      0.965177,
-      0.940537,
-      -0.167604,
-      0.234035,
-      0.996303,
-      0.948904,
-      -0.149068,
-      0.20412,
-      1.0261,
-      0.955263,
-      -0.129539,
-      0.175431,
-      1.05304,
-      0.960303,
-      -0.109932,
-      0.148116,
-      1.07617,
-      0.965512,
-      -0.0880572,
-      0.119693,
-      1.09742,
-      0.973466,
-      -0.0660548,
-      0.0901619,
-      1.11721,
-      0.98284,
-      -0.0439228,
-      0.0599875,
-      1.13436,
-      0.992216,
-      -0.0219588,
-      0.0298975,
-      1.15006,
-      0.999946,
-      119402e-9,
-      -208547e-10,
-      1.16471,
-      0.447827,
-      -100414e-10,
-      0.491543,
-      914833e-11,
-      0.454778,
-      -251257e-9,
-      0.499172,
-      22891e-8,
-      0.453519,
-      -100342e-8,
-      0.497787,
-      914184e-9,
-      0.45357,
-      -225776e-8,
-      0.497847,
-      205701e-8,
-      0.453578,
-      -401371e-8,
-      0.497855,
-      365705e-8,
-      0.45357,
-      -627107e-8,
-      0.497841,
-      571453e-8,
-      0.453598,
-      -902968e-8,
-      0.497864,
-      823019e-8,
-      0.453627,
-      -0.0122888,
-      0.497882,
-      0.0112049,
-      0.453684,
-      -0.0160475,
-      0.497923,
-      0.0146405,
-      0.453764,
-      -0.0203044,
-      0.49798,
-      0.0185394,
-      0.453866,
-      -0.0250576,
-      0.498049,
-      0.0229054,
-      0.453996,
-      -0.0303028,
-      0.49813,
-      0.0277424,
-      0.454196,
-      -0.0360379,
-      0.498267,
-      0.0330587,
-      0.454457,
-      -0.0422521,
-      0.498445,
-      0.0388613,
-      0.454926,
-      -0.0488393,
-      0.498812,
-      0.0451767,
-      0.455525,
-      -0.0558653,
-      0.499272,
-      0.0520153,
-      0.456074,
-      -0.0633772,
-      0.499625,
-      0.0593754,
-      0.456752,
-      -0.0713606,
-      0.500049,
-      0.0672751,
-      0.457648,
-      -0.07971,
-      0.500615,
-      0.0757447,
-      0.458849,
-      -0.0883032,
-      0.501399,
-      0.0848231,
-      0.46029,
-      -0.0974095,
-      0.502293,
-      0.0945135,
-      0.462,
-      -0.106729,
-      0.503301,
-      0.104848,
-      0.464121,
-      -0.116354,
-      0.504533,
-      0.115884,
-      0.466889,
-      -0.126214,
-      0.506172,
-      0.127652,
-      0.470744,
-      -0.136324,
-      0.508667,
-      0.14024,
-      0.47488,
-      -0.146595,
-      0.510995,
-      0.153673,
-      0.480845,
-      -0.157027,
-      0.514832,
-      0.168053,
-      0.488262,
-      -0.167658,
-      0.519506,
-      0.183508,
-      0.496547,
-      -0.178343,
-      0.524347,
-      0.199948,
-      0.506254,
-      -0.188916,
-      0.52983,
-      0.217503,
-      0.517961,
-      -0.199975,
-      0.536357,
-      0.236272,
-      0.531484,
-      -0.210624,
-      0.543641,
-      0.256096,
-      0.545496,
-      -0.221227,
-      0.550048,
-      0.277085,
-      0.559497,
-      -0.231568,
-      0.555076,
-      0.298615,
-      0.575752,
-      -0.241698,
-      0.560541,
-      0.321547,
-      0.591999,
-      -0.251172,
-      0.564156,
-      0.345602,
-      0.610654,
-      -0.260178,
-      0.567607,
-      0.371851,
-      0.630484,
-      -0.268094,
-      0.56923,
-      0.40076,
-      0.651807,
-      -0.274661,
-      0.569779,
-      0.430801,
-      0.67239,
-      -0.280331,
-      0.566791,
-      0.461939,
-      0.693024,
-      -0.284501,
-      0.562007,
-      0.493854,
-      0.715473,
-      -0.287852,
-      0.555791,
-      0.526992,
-      0.736323,
-      -0.28929,
-      0.546345,
-      0.560102,
-      0.755771,
-      -0.289405,
-      0.534,
-      0.593543,
-      0.775424,
-      -0.2881,
-      0.519114,
-      0.627256,
-      0.795447,
-      -0.285562,
-      0.502543,
-      0.661464,
-      0.815319,
-      -0.281416,
-      0.484773,
-      0.695206,
-      0.831769,
-      -0.275523,
-      0.463445,
-      0.729044,
-      0.849464,
-      -0.267516,
-      0.440269,
-      0.764069,
-      0.866775,
-      -0.257584,
-      0.415049,
-      0.799089,
-      0.881252,
-      -0.245817,
-      0.388049,
-      0.831948,
-      0.894209,
-      -0.233127,
-      0.35889,
-      0.865526,
-      0.906922,
-      -0.219579,
-      0.329915,
-      0.89818,
-      0.919686,
-      -0.204491,
-      0.300441,
-      0.930013,
-      0.929044,
-      -0.188962,
-      0.269445,
-      0.962061,
-      0.938393,
-      -0.171079,
-      0.238402,
-      0.994214,
-      0.94661,
-      -0.15199,
-      0.208204,
-      1.02533,
-      0.953095,
-      -0.131953,
-      0.178653,
-      1.0529,
-      0.958644,
-      -0.111233,
-      0.150684,
-      1.0771,
-      0.963925,
-      -0.0903098,
-      0.122359,
-      1.09855,
-      0.971995,
-      -0.0680505,
-      0.0923342,
-      1.11874,
-      0.981658,
-      -0.0448512,
-      0.0614195,
-      1.13635,
-      0.991649,
-      -0.0221931,
-      0.0303582,
-      1.15238,
-      0.999985,
-      393403e-9,
-      -111086e-9,
-      1.16772,
-      0.396806,
-      -971563e-11,
-      0.457671,
-      842355e-11,
-      0.429186,
-      -249421e-9,
-      0.495017,
-      21625e-8,
-      0.429324,
-      -998052e-9,
-      0.495173,
-      865322e-9,
-      0.429175,
-      -224487e-8,
-      0.494999,
-      194637e-8,
-      0.429129,
-      -399041e-8,
-      0.494952,
-      346004e-8,
-      0.429153,
-      -623476e-8,
-      0.494974,
-      540684e-8,
-      0.429168,
-      -89773e-7,
-      0.494983,
-      778714e-8,
-      0.429207,
-      -0.0122175,
-      0.495012,
-      0.0106022,
-      0.429257,
-      -0.0159542,
-      0.495047,
-      0.0138535,
-      0.429338,
-      -0.0201864,
-      0.495106,
-      0.0175443,
-      0.429431,
-      -0.0249104,
-      0.495165,
-      0.0216774,
-      0.429587,
-      -0.0301252,
-      0.495279,
-      0.0262594,
-      0.429796,
-      -0.0358249,
-      0.495432,
-      0.0312968,
-      0.430065,
-      -0.0419972,
-      0.495621,
-      0.0367985,
-      0.430588,
-      -0.0485144,
-      0.496061,
-      0.042798,
-      0.43113,
-      -0.0555028,
-      0.496472,
-      0.0492914,
-      0.431743,
-      -0.0629852,
-      0.496904,
-      0.0562907,
-      0.432448,
-      -0.0709256,
-      0.497369,
-      0.0638056,
-      0.433414,
-      -0.0791942,
-      0.498032,
-      0.071885,
-      0.434638,
-      -0.0877346,
-      0.498854,
-      0.0805517,
-      0.43611,
-      -0.0968056,
-      0.499812,
-      0.0898047,
-      0.437859,
-      -0.106002,
-      0.500891,
-      0.0997142,
-      0.440017,
-      -0.115648,
-      0.502198,
-      0.110289,
-      0.443236,
-      -0.125427,
-      0.504389,
-      0.121644,
-      0.44697,
-      -0.135492,
-      0.506809,
-      0.133769,
-      0.451689,
-      -0.145746,
-      0.509858,
-      0.146787,
-      0.45811,
-      -0.156219,
-      0.514247,
-      0.160793,
-      0.465305,
-      -0.166834,
-      0.518816,
-      0.175791,
-      0.474085,
-      -0.177546,
-      0.524331,
-      0.191906,
-      0.484808,
-      -0.188262,
-      0.53104,
-      0.209199,
-      0.49732,
-      -0.199346,
-      0.538511,
-      0.227825,
-      0.509693,
-      -0.209951,
-      0.544554,
-      0.247269,
-      0.524367,
-      -0.220533,
-      0.551616,
-      0.267978,
-      0.539228,
-      -0.231082,
-      0.557368,
-      0.289672,
-      0.55644,
-      -0.241342,
-      0.563782,
-      0.31268,
-      0.574204,
-      -0.250964,
-      0.568851,
-      0.33651,
-      0.593388,
-      -0.260306,
-      0.57312,
-      0.362219,
-      0.613358,
-      -0.268667,
-      0.574916,
-      0.390322,
-      0.634512,
-      -0.275591,
-      0.575053,
-      0.420478,
-      0.65563,
-      -0.281328,
-      0.572404,
-      0.451614,
-      0.678265,
-      -0.285948,
-      0.568893,
-      0.484112,
-      0.70011,
-      -0.289408,
-      0.561878,
-      0.517348,
-      0.723005,
-      -0.291328,
-      0.55359,
-      0.551355,
-      0.743744,
-      -0.291418,
-      0.541099,
-      0.585109,
-      0.763949,
-      -0.290252,
-      0.526489,
-      0.619487,
-      0.784186,
-      -0.287648,
-      0.509496,
-      0.65404,
-      0.804304,
-      -0.283782,
-      0.491484,
-      0.688649,
-      0.823629,
-      -0.278067,
-      0.470517,
-      0.723133,
-      0.84094,
-      -0.270588,
-      0.44705,
-      0.757163,
-      0.857852,
-      -0.261188,
-      0.421252,
-      0.792816,
-      0.874934,
-      -0.249313,
-      0.394191,
-      0.827248,
-      0.888709,
-      -0.236492,
-      0.365359,
-      0.861074,
-      0.902589,
-      -0.222185,
-      0.336016,
-      0.894417,
-      0.914201,
-      -0.207314,
-      0.30527,
-      0.926825,
-      0.925978,
-      -0.191146,
-      0.274532,
-      0.9595,
-      0.93512,
-      -0.174135,
-      0.243393,
-      0.991583,
-      0.943656,
-      -0.155231,
-      0.212414,
-      1.02356,
-      0.951719,
-      -0.134403,
-      0.182005,
-      1.05239,
-      0.957164,
-      -0.113023,
-      0.153043,
-      1.07754,
-      0.962656,
-      -0.0914493,
-      0.124186,
-      1.09984,
-      0.970695,
-      -0.0694179,
-      0.0941654,
-      1.12,
-      0.980749,
-      -0.0466199,
-      0.0629671,
-      1.13849,
-      0.991205,
-      -0.0227032,
-      0.0311146,
-      1.15494,
-      0.999884,
-      632388e-9,
-      -254483e-9,
-      1.1706,
-      0.379821,
-      -957289e-11,
-      0.460637,
-      789337e-11,
-      0.405188,
-      -247483e-9,
-      0.491396,
-      204064e-9,
-      0.404796,
-      -989434e-9,
-      0.490914,
-      815853e-9,
-      0.40483,
-      -222607e-8,
-      0.490949,
-      183559e-8,
-      0.40473,
-      -395723e-8,
-      0.49084,
-      326332e-8,
-      0.404731,
-      -618287e-8,
-      0.490836,
-      509945e-8,
-      0.404768,
-      -890258e-8,
-      0.490871,
-      734463e-8,
-      0.404791,
-      -0.0121156,
-      0.490883,
-      999992e-8,
-      0.404857,
-      -0.0158214,
-      0.490938,
-      0.0130676,
-      0.404943,
-      -0.0200178,
-      0.491004,
-      0.0165503,
-      0.405059,
-      -0.0247027,
-      0.491093,
-      0.0204521,
-      0.405213,
-      -0.0298729,
-      0.491205,
-      0.0247788,
-      0.405399,
-      -0.0355226,
-      0.491333,
-      0.0295373,
-      0.405731,
-      -0.0416352,
-      0.491604,
-      0.034741,
-      0.406303,
-      -0.0480807,
-      0.492116,
-      0.0404255,
-      0.406814,
-      -0.0550458,
-      0.492506,
-      0.0465732,
-      0.407404,
-      -0.0624652,
-      0.492926,
-      0.0532058,
-      0.408149,
-      -0.0702958,
-      0.493442,
-      0.0603442,
-      0.409128,
-      -0.0784623,
-      0.494136,
-      0.0680297,
-      0.410408,
-      -0.087007,
-      0.495054,
-      0.0762786,
-      0.411813,
-      -0.0959639,
-      0.495962,
-      0.0851046,
-      0.413735,
-      -0.105075,
-      0.497257,
-      0.0945878,
-      0.416137,
-      -0.114646,
-      0.498882,
-      0.104725,
-      0.41934,
-      -0.124394,
-      0.501132,
-      0.11563,
-      0.423326,
-      -0.134328,
-      0.503883,
-      0.127325,
-      0.428419,
-      -0.14458,
-      0.50747,
-      0.139911,
-      0.43484,
-      -0.154979,
-      0.511964,
-      0.153481,
-      0.442641,
-      -0.165628,
-      0.517328,
-      0.168114,
-      0.452511,
-      -0.176365,
-      0.524258,
-      0.183995,
-      0.463473,
-      -0.187298,
-      0.531248,
-      0.200953,
-      0.475564,
-      -0.198244,
-      0.538367,
-      0.219176,
-      0.488664,
-      -0.208938,
-      0.545175,
-      0.238514,
-      0.504073,
-      -0.219599,
-      0.553227,
-      0.259129,
-      0.520832,
-      -0.230378,
-      0.560653,
-      0.280997,
-      0.538455,
-      -0.240703,
-      0.567523,
-      0.303821,
-      0.55709,
-      -0.250548,
-      0.573287,
-      0.327948,
-      0.576646,
-      -0.259964,
-      0.577795,
-      0.353362,
-      0.596705,
-      -0.268721,
-      0.580077,
-      0.380336,
-      0.618053,
-      -0.276054,
-      0.58018,
-      0.4101,
-      0.640303,
-      -0.282176,
-      0.578747,
-      0.44161,
-      0.662365,
-      -0.286931,
-      0.574294,
-      0.474106,
-      0.684542,
-      -0.290521,
-      0.567035,
-      0.507549,
-      0.707984,
-      -0.292672,
-      0.558687,
-      0.541853,
-      0.730913,
-      -0.293189,
-      0.547606,
-      0.576581,
-      0.752948,
-      -0.292199,
-      0.533471,
-      0.61172,
-      0.773452,
-      -0.289508,
-      0.516395,
-      0.646339,
-      0.794715,
-      -0.285716,
-      0.497873,
-      0.682131,
-      0.814251,
-      -0.280051,
-      0.476845,
-      0.716396,
-      0.833057,
-      -0.272873,
-      0.453449,
-      0.751503,
-      0.84959,
-      -0.263982,
-      0.427857,
-      0.786085,
-      0.867022,
-      -0.252745,
-      0.400335,
-      0.821355,
-      0.882277,
-      -0.239655,
-      0.371304,
-      0.85646,
-      0.895375,
-      -0.225386,
-      0.340397,
-      0.890828,
-      0.909347,
-      -0.209587,
-      0.310005,
-      0.923532,
-      0.921885,
-      -0.193433,
-      0.2796,
-      0.956419,
-      0.932127,
-      -0.176135,
-      0.247276,
-      0.989445,
-      0.941869,
-      -0.157872,
-      0.216186,
-      1.02221,
-      0.949735,
-      -0.137577,
-      0.185602,
-      1.05195,
-      0.956617,
-      -0.115285,
-      0.155767,
-      1.07822,
-      0.961974,
-      -0.0928418,
-      0.126103,
-      1.10149,
-      0.96972,
-      -0.0700592,
-      0.0956758,
-      1.12207,
-      0.98012,
-      -0.0474671,
-      0.0643269,
-      1.1408,
-      0.990825,
-      -0.0238113,
-      0.0320863,
-      1.1577,
-      0.999876,
-      381574e-9,
-      -812203e-10,
-      1.17403,
-      0.367636,
-      -961342e-11,
-      0.469176,
-      753287e-11,
-      0.380377,
-      -244772e-9,
-      0.485434,
-      191797e-9,
-      0.380416,
-      -978857e-9,
-      0.485475,
-      767015e-9,
-      0.380376,
-      -220165e-8,
-      0.485435,
-      172522e-8,
-      0.380419,
-      -391408e-8,
-      0.485487,
-      306734e-8,
-      0.380438,
-      -611549e-8,
-      0.485505,
-      479332e-8,
-      0.380462,
-      -880558e-8,
-      0.485525,
-      690391e-8,
-      0.380496,
-      -0.0119837,
-      0.485551,
-      940039e-8,
-      0.38056,
-      -0.0156487,
-      0.485605,
-      0.0122848,
-      0.38064,
-      -0.0197988,
-      0.485666,
-      0.0155601,
-      0.380767,
-      -0.0244324,
-      0.48577,
-      0.0192313,
-      0.380909,
-      -0.0295444,
-      0.485871,
-      0.0233032,
-      0.381142,
-      -0.0351321,
-      0.48606,
-      0.0277861,
-      0.381472,
-      -0.0411535,
-      0.486336,
-      0.0326939,
-      0.382015,
-      -0.0475408,
-      0.486833,
-      0.0380565,
-      0.382523,
-      -0.0544395,
-      0.487231,
-      0.0438615,
-      0.383129,
-      -0.061784,
-      0.487683,
-      0.0501332,
-      0.383952,
-      -0.0695085,
-      0.488313,
-      0.0568996,
-      0.38498,
-      -0.0775819,
-      0.489077,
-      0.0641952,
-      0.386331,
-      -0.0860443,
-      0.490113,
-      0.0720324,
-      0.387788,
-      -0.0948406,
-      0.491099,
-      0.0804379,
-      0.389808,
-      -0.103899,
-      0.492566,
-      0.0894899,
-      0.39252,
-      -0.113313,
-      0.494601,
-      0.0992098,
-      0.395493,
-      -0.123007,
-      0.496619,
-      0.109641,
-      0.399826,
-      -0.132859,
-      0.499912,
-      0.120919,
-      0.405341,
-      -0.143077,
-      0.504061,
-      0.133107,
-      0.411932,
-      -0.153465,
-      0.508905,
-      0.146263,
-      0.420591,
-      -0.164108,
-      0.515482,
-      0.160544,
-      0.43101,
-      -0.174893,
-      0.523191,
-      0.176123,
-      0.441881,
-      -0.185839,
-      0.53026,
-      0.192757,
-      0.453919,
-      -0.196633,
-      0.537295,
-      0.210535,
-      0.468715,
-      -0.207611,
-      0.546156,
-      0.229886,
-      0.485182,
-      -0.218517,
-      0.555173,
-      0.250543,
-      0.501926,
-      -0.229249,
-      0.562728,
-      0.27221,
-      0.51785,
-      -0.239481,
-      0.567494,
-      0.294892,
-      0.536947,
-      -0.249395,
-      0.573889,
-      0.318987,
-      0.557115,
-      -0.259,
-      0.578831,
-      0.344348,
-      0.577966,
-      -0.268075,
-      0.582055,
-      0.371223,
-      0.599489,
-      -0.276115,
-      0.583307,
-      0.399834,
-      0.62479,
-      -0.282523,
-      0.583902,
-      0.431415,
-      0.647504,
-      -0.287663,
-      0.57953,
-      0.464301,
-      0.670601,
-      -0.291538,
-      0.573103,
-      0.498123,
-      0.693539,
-      -0.293842,
-      0.563731,
-      0.532662,
-      0.717385,
-      -0.294681,
-      0.553169,
-      0.567925,
-      0.741533,
-      -0.293717,
-      0.539908,
-      0.603502,
-      0.762142,
-      -0.291156,
-      0.521902,
-      0.639074,
-      0.783014,
-      -0.28719,
-      0.502815,
-      0.674439,
-      0.805158,
-      -0.281773,
-      0.482598,
-      0.710497,
-      0.823646,
-      -0.274682,
-      0.458949,
-      0.7456,
-      0.841879,
-      -0.266184,
-      0.433129,
-      0.781085,
-      0.859515,
-      -0.255682,
-      0.406064,
-      0.816,
-      0.875335,
-      -0.242849,
-      0.376509,
-      0.851074,
-      0.890147,
-      -0.228329,
-      0.345502,
-      0.886473,
-      0.903144,
-      -0.212491,
-      0.31428,
-      0.920751,
-      0.916618,
-      -0.195695,
-      0.282994,
-      0.954606,
-      0.927953,
-      -0.178267,
-      0.251091,
-      0.988402,
-      0.937414,
-      -0.159549,
-      0.219107,
-      1.02141,
-      0.946823,
-      -0.140022,
-      0.18896,
-      1.05167,
-      0.954651,
-      -0.118154,
-      0.158667,
-      1.07819,
-      0.959955,
-      -0.0946636,
-      0.128808,
-      1.1025,
-      0.96858,
-      -0.0711792,
-      0.0973787,
-      1.12391,
-      0.97938,
-      -0.0475046,
-      0.0650965,
-      1.14322,
-      0.990498,
-      -0.024059,
-      0.0326267,
-      1.16077,
-      0.999844,
-      -512408e-10,
-      112444e-9,
-      1.17727,
-      0.316912,
-      -934977e-11,
-      0.425996,
-      695559e-11,
-      0.356423,
-      -241372e-9,
-      0.479108,
-      179562e-9,
-      0.356272,
-      -965292e-9,
-      0.478897,
-      71811e-8,
-      0.356262,
-      -217182e-8,
-      0.478894,
-      161574e-8,
-      0.356265,
-      -386092e-8,
-      0.478895,
-      287261e-8,
-      0.356278,
-      -60324e-7,
-      0.478905,
-      448907e-8,
-      0.356293,
-      -868565e-8,
-      0.478914,
-      646572e-8,
-      0.356346,
-      -0.0118207,
-      0.478965,
-      880438e-8,
-      0.356395,
-      -0.0154355,
-      0.479001,
-      0.0115066,
-      0.356484,
-      -0.019529,
-      0.479075,
-      0.0145762,
-      0.356609,
-      -0.0240991,
-      0.47918,
-      0.018018,
-      0.356766,
-      -0.0291413,
-      0.479305,
-      0.0218379,
-      0.357009,
-      -0.0346498,
-      0.479512,
-      0.0260454,
-      0.357424,
-      -0.0405462,
-      0.479909,
-      0.0306657,
-      0.357899,
-      -0.0468825,
-      0.480337,
-      0.0357054,
-      0.358424,
-      -0.0536887,
-      0.480771,
-      0.0411728,
-      0.359041,
-      -0.0609416,
-      0.481242,
-      0.0470841,
-      0.359903,
-      -0.0685239,
-      0.481943,
-      0.0534831,
-      0.360932,
-      -0.0764883,
-      0.482741,
-      0.0603795,
-      0.362196,
-      -0.0848364,
-      0.483688,
-      0.0678028,
-      0.363847,
-      -0.0935002,
-      0.484947,
-      0.0758086,
-      0.365972,
-      -0.102471,
-      0.486588,
-      0.0844173,
-      0.368741,
-      -0.111751,
-      0.488787,
-      0.0937199,
-      0.372146,
-      -0.121334,
-      0.491405,
-      0.103732,
-      0.377114,
-      -0.131147,
-      0.495604,
-      0.114608,
-      0.38226,
-      -0.141213,
-      0.499436,
-      0.126345,
-      0.389609,
-      -0.151632,
-      0.505334,
-      0.139116,
-      0.397925,
-      -0.162073,
-      0.51168,
-      0.152995,
-      0.407824,
-      -0.172819,
-      0.518876,
-      0.168071,
-      0.420014,
-      -0.183929,
-      0.527639,
-      0.184495,
-      0.434266,
-      -0.195032,
-      0.537588,
-      0.20232,
-      0.447352,
-      -0.205792,
-      0.544379,
-      0.221189,
-      0.463726,
-      -0.216704,
-      0.553422,
-      0.241616,
-      0.481406,
-      -0.227531,
-      0.562074,
-      0.263298,
-      0.498707,
-      -0.238017,
-      0.568227,
-      0.286116,
-      0.518039,
-      -0.247936,
-      0.574473,
-      0.3101,
-      0.538277,
-      -0.257437,
-      0.579191,
-      0.335401,
-      0.561166,
-      -0.266829,
-      0.584807,
-      0.362246,
-      0.583189,
-      -0.275329,
-      0.586476,
-      0.390609,
-      0.606024,
-      -0.28234,
-      0.585578,
-      0.420998,
-      0.632419,
-      -0.287924,
-      0.584496,
-      0.454357,
-      0.656128,
-      -0.291972,
-      0.577766,
-      0.488233,
-      0.679953,
-      -0.29456,
-      0.56875,
-      0.523248,
-      0.704654,
-      -0.295816,
-      0.558388,
-      0.559168,
-      0.729016,
-      -0.295157,
-      0.544826,
-      0.595326,
-      0.752062,
-      -0.292779,
-      0.528273,
-      0.631864,
-      0.773138,
-      -0.288681,
-      0.508482,
-      0.667793,
-      0.794869,
-      -0.283358,
-      0.487341,
-      0.704035,
-      0.815101,
-      -0.27608,
-      0.46354,
-      0.739925,
-      0.834212,
-      -0.26767,
-      0.438672,
-      0.775539,
-      0.852368,
-      -0.257397,
-      0.411239,
-      0.810895,
-      0.870207,
-      -0.245689,
-      0.3829,
-      0.846472,
-      0.884063,
-      -0.231452,
-      0.351496,
-      0.881788,
-      0.898284,
-      -0.215561,
-      0.31895,
-      0.917438,
-      0.912964,
-      -0.198208,
-      0.287367,
-      0.952422,
-      0.924666,
-      -0.180426,
-      0.254487,
-      0.987551,
-      0.934429,
-      -0.161525,
-      0.222226,
-      1.02142,
-      0.943485,
-      -0.141197,
-      0.191143,
-      1.05218,
-      0.9521,
-      -0.120085,
-      0.161112,
-      1.07937,
-      0.957876,
-      -0.0975881,
-      0.130982,
-      1.10403,
-      0.966943,
-      -0.0726842,
-      0.0990553,
-      1.12616,
-      0.978313,
-      -0.0483705,
-      0.0662818,
-      1.14619,
-      0.990048,
-      -0.0239072,
-      0.0329243,
-      1.16413,
-      0.999984,
-      461885e-9,
-      -772859e-10,
-      1.18099,
-      0.321287,
-      -935049e-11,
-      0.455413,
-      659662e-11,
-      0.332595,
-      -237513e-9,
-      0.471437,
-      167562e-9,
-      0.332729,
-      -949964e-9,
-      0.471618,
-      670192e-9,
-      0.332305,
-      -213618e-8,
-      0.471028,
-      150712e-8,
-      0.332326,
-      -379765e-8,
-      0.471055,
-      267959e-8,
-      0.332344,
-      -593353e-8,
-      0.471072,
-      418751e-8,
-      0.332356,
-      -854349e-8,
-      0.471077,
-      603172e-8,
-      0.332403,
-      -0.0116268,
-      0.471121,
-      821362e-8,
-      0.332461,
-      -0.0151824,
-      0.47117,
-      0.0107357,
-      0.332552,
-      -0.0192088,
-      0.471251,
-      0.0136014,
-      0.332657,
-      -0.0237024,
-      0.47133,
-      0.0168152,
-      0.332835,
-      -0.0286615,
-      0.471487,
-      0.0203853,
-      0.333083,
-      -0.0340765,
-      0.471708,
-      0.0243212,
-      0.333547,
-      -0.0398563,
-      0.47219,
-      0.0286518,
-      0.333989,
-      -0.0460916,
-      0.472587,
-      0.0333763,
-      0.334532,
-      -0.0527897,
-      0.473054,
-      0.0385084,
-      0.335167,
-      -0.0599284,
-      0.473568,
-      0.0440638,
-      0.33608,
-      -0.0673514,
-      0.474362,
-      0.0500962,
-      0.337146,
-      -0.0752237,
-      0.475231,
-      0.0566022,
-      0.338462,
-      -0.083418,
-      0.476282,
-      0.0636272,
-      0.34014,
-      -0.0919382,
-      0.477615,
-      0.0712153,
-      0.342341,
-      -0.100741,
-      0.479404,
-      0.079417,
-      0.345088,
-      -0.109905,
-      0.481618,
-      0.0882631,
-      0.349049,
-      -0.119369,
-      0.485081,
-      0.0978851,
-      0.353939,
-      -0.129033,
-      0.489317,
-      0.108336,
-      0.359893,
-      -0.139038,
-      0.494309,
-      0.119698,
-      0.366945,
-      -0.149411,
-      0.499983,
-      0.132024,
-      0.375814,
-      -0.159843,
-      0.507185,
-      0.145558,
-      0.387112,
-      -0.170664,
-      0.516392,
-      0.160433,
-      0.40023,
-      -0.181897,
-      0.526519,
-      0.176648,
-      0.412555,
-      -0.192785,
-      0.53423,
-      0.193922,
-      0.427023,
-      -0.203663,
-      0.542741,
-      0.212662,
-      0.443685,
-      -0.214695,
-      0.552066,
-      0.232944,
-      0.461499,
-      -0.225561,
-      0.560762,
-      0.254495,
-      0.480975,
-      -0.236257,
-      0.569421,
-      0.277531,
-      0.501,
-      -0.24639,
-      0.576101,
-      0.301724,
-      0.521691,
-      -0.256101,
-      0.581493,
-      0.327112,
-      0.543478,
-      -0.265289,
-      0.585221,
-      0.353917,
-      0.566094,
-      -0.273938,
-      0.587614,
-      0.381941,
-      0.589578,
-      -0.281679,
-      0.587991,
-      0.41172,
-      0.614583,
-      -0.287655,
-      0.585928,
-      0.444148,
-      0.641813,
-      -0.292228,
-      0.582092,
-      0.478617,
-      0.666189,
-      -0.295172,
-      0.57398,
-      0.51397,
-      0.690475,
-      -0.29648,
-      0.561676,
-      0.550118,
-      0.715543,
-      -0.296203,
-      0.548758,
-      0.586933,
-      0.740405,
-      -0.293999,
-      0.532792,
-      0.62384,
-      0.762183,
-      -0.28998,
-      0.512735,
-      0.660723,
-      0.786069,
-      -0.28478,
-      0.492402,
-      0.69807,
-      0.806812,
-      -0.277568,
-      0.469058,
-      0.734422,
-      0.826987,
-      -0.268951,
-      0.443017,
-      0.770946,
-      0.844588,
-      -0.259049,
-      0.415501,
-      0.80699,
-      0.863725,
-      -0.2471,
-      0.387328,
-      0.842107,
-      0.879137,
-      -0.234157,
-      0.356108,
-      0.878078,
-      0.894634,
-      -0.218719,
-      0.324315,
-      0.914058,
-      0.909162,
-      -0.201293,
-      0.291813,
-      0.949922,
-      0.92072,
-      -0.18267,
-      0.258474,
-      0.985337,
-      0.93158,
-      -0.163212,
-      0.225593,
-      1.0205,
-      0.941238,
-      -0.142771,
-      0.193986,
-      1.05273,
-      0.949293,
-      -0.120956,
-      0.163392,
-      1.08075,
-      0.956226,
-      -0.0985743,
-      0.132934,
-      1.10559,
-      0.96546,
-      -0.075118,
-      0.101255,
-      1.12823,
-      0.977403,
-      -0.0497921,
-      0.0675441,
-      1.149,
-      0.989648,
-      -0.0241574,
-      0.0334681,
-      1.16765,
-      1.00001,
-      5762e-7,
-      -184807e-9,
-      1.18519,
-      0.303474,
-      -916603e-11,
-      0.4542,
-      61243e-10,
-      0.308894,
-      -232869e-9,
-      0.462306,
-      155592e-9,
-      0.309426,
-      -931661e-9,
-      0.463093,
-      622499e-9,
-      0.308643,
-      -20949e-7,
-      0.461933,
-      139979e-8,
-      0.308651,
-      -37242e-7,
-      0.461941,
-      248874e-8,
-      0.308662,
-      -581873e-8,
-      0.46195,
-      388933e-8,
-      0.308687,
-      -837818e-8,
-      0.461974,
-      560247e-8,
-      0.308728,
-      -0.0114016,
-      0.462011,
-      762948e-8,
-      0.308789,
-      -0.0148884,
-      0.462067,
-      997326e-8,
-      0.308882,
-      -0.0188369,
-      0.462151,
-      0.0126375,
-      0.309007,
-      -0.0232436,
-      0.462263,
-      0.0156271,
-      0.30918,
-      -0.0281054,
-      0.462417,
-      0.0189498,
-      0.309442,
-      -0.0334065,
-      0.462667,
-      0.0226167,
-      0.309901,
-      -0.0390589,
-      0.463162,
-      0.0266614,
-      0.310331,
-      -0.0452042,
-      0.463555,
-      0.0310715,
-      0.310858,
-      -0.0517735,
-      0.464019,
-      0.0358698,
-      0.311576,
-      -0.0587359,
-      0.464669,
-      0.0410848,
-      0.312436,
-      -0.0660383,
-      0.465406,
-      0.0467453,
-      0.313526,
-      -0.0737266,
-      0.466339,
-      0.0528718,
-      0.314903,
-      -0.0817574,
-      0.467504,
-      0.0595039,
-      0.316814,
-      -0.090167,
-      0.469226,
-      0.0666888,
-      0.318965,
-      -0.0987555,
-      0.470981,
-      0.0744658,
-      0.322077,
-      -0.107792,
-      0.473814,
-      0.082912,
-      0.325947,
-      -0.117098,
-      0.477241,
-      0.0920846,
-      0.331008,
-      -0.126602,
-      0.48184,
-      0.102137,
-      0.337893,
-      -0.136619,
-      0.488334,
-      0.113135,
-      0.345106,
-      -0.146838,
-      0.494415,
-      0.12511,
-      0.355111,
-      -0.157357,
-      0.503275,
-      0.138356,
-      0.365095,
-      -0.167955,
-      0.510966,
-      0.152686,
-      0.378344,
-      -0.179157,
-      0.521508,
-      0.16856,
-      0.391599,
-      -0.190143,
-      0.530455,
-      0.18561,
-      0.407786,
-      -0.20123,
-      0.541275,
-      0.204308,
-      0.425294,
-      -0.212456,
-      0.551784,
-      0.224623,
-      0.444021,
-      -0.223568,
-      0.561493,
-      0.246172,
-      0.463418,
-      -0.234154,
-      0.569886,
-      0.268979,
-      0.484077,
-      -0.244546,
-      0.577116,
-      0.293411,
-      0.505513,
-      -0.254301,
-      0.582914,
-      0.318936,
-      0.527672,
-      -0.263564,
-      0.587208,
-      0.345856,
-      0.550565,
-      -0.272332,
-      0.589277,
-      0.374054,
-      0.573656,
-      -0.280011,
-      0.588426,
-      0.403276,
-      0.59827,
-      -0.286924,
-      0.587504,
-      0.43474,
-      0.624731,
-      -0.291994,
-      0.583401,
-      0.468767,
-      0.652396,
-      -0.295159,
-      0.576997,
-      0.504411,
-      0.67732,
-      -0.296954,
-      0.565863,
-      0.54114,
-      0.703147,
-      -0.296877,
-      0.552316,
-      0.57816,
-      0.728715,
-      -0.295147,
-      0.536773,
-      0.616124,
-      0.752448,
-      -0.291275,
-      0.51771,
-      0.653885,
-      0.775169,
-      -0.285905,
-      0.496087,
-      0.691537,
-      0.799307,
-      -0.279064,
-      0.474232,
-      0.729251,
-      0.819482,
-      -0.270294,
-      0.447676,
-      0.766267,
-      0.837659,
-      -0.260032,
-      0.419656,
-      0.802616,
-      0.856903,
-      -0.248497,
-      0.391328,
-      0.838583,
-      0.873325,
-      -0.235252,
-      0.360285,
-      0.874711,
-      0.889788,
-      -0.221126,
-      0.329215,
-      0.91077,
-      0.904486,
-      -0.204304,
-      0.296392,
-      0.94653,
-      0.917711,
-      -0.185562,
-      0.262159,
-      0.983828,
-      0.928969,
-      -0.165635,
-      0.229142,
-      1.01955,
-      0.939707,
-      -0.14442,
-      0.19673,
-      1.05317,
-      0.948167,
-      -0.122147,
-      0.165095,
-      1.0823,
-      0.955222,
-      -0.099098,
-      0.13451,
-      1.10791,
-      0.964401,
-      -0.0755332,
-      0.102476,
-      1.1312,
-      0.976605,
-      -0.0513817,
-      0.0689667,
-      1.15218,
-      0.989085,
-      -0.0258499,
-      0.034506,
-      1.17129,
-      0.999908,
-      617773e-9,
-      -271268e-9,
-      1.18961,
-      0.285803,
-      -905752e-11,
-      0.452348,
-      572272e-11,
-      0.284689,
-      -22732e-8,
-      0.450581,
-      143626e-9,
-      0.285263,
-      -910214e-9,
-      0.451482,
-      575099e-9,
-      0.285302,
-      -204784e-8,
-      0.451553,
-      129395e-8,
-      0.285318,
-      -364057e-8,
-      0.451574,
-      23006e-7,
-      0.28533,
-      -568813e-8,
-      0.451585,
-      359547e-8,
-      0.285361,
-      -819001e-8,
-      0.451618,
-      517934e-8,
-      0.285397,
-      -0.0111458,
-      0.45165,
-      7054e-6,
-      0.285447,
-      -0.0145536,
-      0.451688,
-      922167e-8,
-      0.285527,
-      -0.0184127,
-      0.451758,
-      0.0116869,
-      0.285688,
-      -0.0227207,
-      0.451929,
-      0.0144555,
-      0.28584,
-      -0.0274712,
-      0.452055,
-      0.0175341,
-      0.286136,
-      -0.0326278,
-      0.452369,
-      0.0209406,
-      0.286574,
-      -0.0381792,
-      0.452853,
-      0.0246965,
-      0.287012,
-      -0.0441879,
-      0.453272,
-      0.0287996,
-      0.287542,
-      -0.0506096,
-      0.453752,
-      0.033268,
-      0.288299,
-      -0.0573634,
-      0.454488,
-      0.0381504,
-      0.289186,
-      -0.0645458,
-      0.455294,
-      0.0434447,
-      0.290302,
-      -0.0720405,
-      0.456301,
-      0.0491973,
-      0.291776,
-      -0.0799046,
-      0.457648,
-      0.0554453,
-      0.29372,
-      -0.088117,
-      0.459483,
-      0.0622311,
-      0.296052,
-      -0.0965328,
-      0.461571,
-      0.0695992,
-      0.299563,
-      -0.105409,
-      0.465085,
-      0.077658,
-      0.30335,
-      -0.114553,
-      0.468506,
-      0.0864176,
-      0.309167,
-      -0.123917,
-      0.474423,
-      0.0961078,
-      0.31529,
-      -0.13381,
-      0.47995,
-      0.106643,
-      0.324163,
-      -0.144021,
-      0.488592,
-      0.118322,
-      0.333272,
-      -0.154382,
-      0.496461,
-      0.131133,
-      0.344224,
-      -0.165015,
-      0.50562,
-      0.145208,
-      0.357733,
-      -0.176168,
-      0.516719,
-      0.16073,
-      0.373046,
-      -0.187468,
-      0.528513,
-      0.177807,
-      0.38788,
-      -0.198488,
-      0.537713,
-      0.196072,
-      0.405133,
-      -0.209545,
-      0.547999,
-      0.21605,
-      0.423845,
-      -0.220724,
-      0.55759,
-      0.237484,
-      0.443777,
-      -0.231518,
-      0.566246,
-      0.26039,
-      0.464824,
-      -0.242035,
-      0.574326,
-      0.284835,
-      0.486635,
-      -0.251898,
-      0.58037,
-      0.310518,
-      0.51012,
-      -0.261304,
-      0.58568,
-      0.337678,
-      0.535301,
-      -0.270384,
-      0.590197,
-      0.366242,
-      0.559193,
-      -0.27841,
-      0.590569,
-      0.395873,
-      0.583544,
-      -0.285325,
-      0.588161,
-      0.426857,
-      0.608834,
-      -0.291113,
-      0.584249,
-      0.459477,
-      0.635753,
-      -0.294882,
-      0.57763,
-      0.494734,
-      0.664367,
-      -0.297088,
-      0.569479,
-      0.532023,
-      0.689688,
-      -0.297364,
-      0.555064,
-      0.569629,
-      0.715732,
-      -0.295949,
-      0.539522,
-      0.608124,
-      0.741307,
-      -0.292259,
-      0.521613,
-      0.646231,
-      0.764949,
-      -0.287063,
-      0.49969,
-      0.684938,
-      0.788599,
-      -0.28012,
-      0.476747,
-      0.723548,
-      0.81048,
-      -0.27153,
-      0.45116,
-      0.761135,
-      0.831372,
-      -0.261289,
-      0.424101,
-      0.798916,
-      0.850092,
-      -0.249559,
-      0.39443,
-      0.835952,
-      0.867777,
-      -0.236348,
-      0.363849,
-      0.871606,
-      0.884632,
-      -0.221569,
-      0.332477,
-      0.907843,
-      0.90047,
-      -0.20618,
-      0.300667,
-      0.944187,
-      0.914524,
-      -0.188771,
-      0.266552,
-      0.981371,
-      0.926892,
-      -0.168362,
-      0.232349,
-      1.01841,
-      0.937951,
-      -0.146761,
-      0.199359,
-      1.05308,
-      0.947236,
-      -0.123813,
-      0.1675,
-      1.0839,
-      0.954367,
-      -0.099984,
-      0.136166,
-      1.11047,
-      0.963907,
-      -0.0759278,
-      0.103808,
-      1.13414,
-      0.976218,
-      -0.0511367,
-      0.0697061,
-      1.15575,
-      0.988772,
-      -0.0267415,
-      0.0352529,
-      1.17531,
-      0.999888,
-      -520778e-9,
-      289926e-9,
-      1.19389,
-      0.263546,
-      -883274e-11,
-      0.441896,
-      526783e-11,
-      0.262352,
-      -221849e-9,
-      0.439889,
-      132311e-9,
-      0.262325,
-      -886683e-9,
-      0.439848,
-      528824e-9,
-      0.26228,
-      -199476e-8,
-      0.439765,
-      118975e-8,
-      0.262372,
-      -354671e-8,
-      0.439922,
-      211568e-8,
-      0.26239,
-      -554141e-8,
-      0.439941,
-      330652e-8,
-      0.262412,
-      -797888e-8,
-      0.439961,
-      476346e-8,
-      0.262453,
-      -0.0108584,
-      0.440002,
-      648818e-8,
-      0.262528,
-      -0.0141788,
-      0.440085,
-      84835e-7,
-      0.262615,
-      -0.017938,
-      0.440166,
-      0.0107533,
-      0.262744,
-      -0.0221346,
-      0.440291,
-      0.0133044,
-      0.262939,
-      -0.026762,
-      0.440493,
-      0.0161445,
-      0.263277,
-      -0.0317573,
-      0.440889,
-      0.0192974,
-      0.26368,
-      -0.0371832,
-      0.441338,
-      0.0227699,
-      0.264106,
-      -0.0430371,
-      0.441753,
-      0.0265698,
-      0.264624,
-      -0.0493035,
-      0.442227,
-      0.0307178,
-      0.265378,
-      -0.0558669,
-      0.442985,
-      0.0352616,
-      0.266253,
-      -0.0628718,
-      0.443795,
-      0.0401968,
-      0.267478,
-      -0.0701569,
-      0.445008,
-      0.04559,
-      0.269062,
-      -0.077845,
-      0.446599,
-      0.0514539,
-      0.270926,
-      -0.0857941,
-      0.448349,
-      0.0578382,
-      0.273693,
-      -0.0940773,
-      0.451221,
-      0.0648363,
-      0.276746,
-      -0.102704,
-      0.454097,
-      0.0724389,
-      0.281693,
-      -0.111735,
-      0.459517,
-      0.0808744,
-      0.287335,
-      -0.121004,
-      0.46531,
-      0.0901551,
-      0.29448,
-      -0.130734,
-      0.472605,
-      0.100371,
-      0.30257,
-      -0.140777,
-      0.480251,
-      0.111644,
-      0.312465,
-      -0.15111,
-      0.489444,
-      0.124111,
-      0.324856,
-      -0.16189,
-      0.500919,
-      0.137979,
-      0.33774,
-      -0.172946,
-      0.511317,
-      0.153163,
-      0.35255,
-      -0.184152,
-      0.522684,
-      0.169817,
-      0.367786,
-      -0.19522,
-      0.53248,
-      0.187886,
-      0.385474,
-      -0.20632,
-      0.543326,
-      0.207634,
-      0.404976,
-      -0.217744,
-      0.554109,
-      0.229165,
-      0.425203,
-      -0.228691,
-      0.563395,
-      0.252068,
-      0.446704,
-      -0.239299,
-      0.571565,
-      0.276471,
-      0.468951,
-      -0.249348,
-      0.577935,
-      0.302323,
-      0.493487,
-      -0.258933,
-      0.584309,
-      0.329882,
-      0.517861,
-      -0.268009,
-      0.58773,
-      0.358525,
-      0.543309,
-      -0.276238,
-      0.589612,
-      0.388585,
-      0.569704,
-      -0.28356,
-      0.589294,
-      0.419787,
-      0.594871,
-      -0.289497,
-      0.585137,
-      0.452114,
-      0.622555,
-      -0.294452,
-      0.580356,
-      0.486466,
-      0.651167,
-      -0.296918,
-      0.57185,
-      0.523079,
-      0.677332,
-      -0.297647,
-      0.558428,
-      0.5611,
-      0.703718,
-      -0.296321,
-      0.542232,
-      0.599592,
-      0.730262,
-      -0.293339,
-      0.524541,
-      0.639138,
-      0.754304,
-      -0.288036,
-      0.502691,
-      0.677978,
-      0.778051,
-      -0.281018,
-      0.479212,
-      0.716537,
-      0.801557,
-      -0.272414,
-      0.454071,
-      0.75586,
-      0.822559,
-      -0.262419,
-      0.425952,
-      0.794477,
-      0.843051,
-      -0.250702,
-      0.397313,
-      0.832664,
-      0.86232,
-      -0.237264,
-      0.366534,
-      0.869876,
-      0.879044,
-      -0.222716,
-      0.334816,
-      0.906973,
-      0.896362,
-      -0.206827,
-      0.303143,
-      0.943558,
-      0.910342,
-      -0.189659,
-      0.269699,
-      0.979759,
-      0.924119,
-      -0.171108,
-      0.236411,
-      1.01718,
-      0.935374,
-      -0.149579,
-      0.202224,
-      1.05289,
-      0.944295,
-      -0.126295,
-      0.16989,
-      1.08496,
-      0.952227,
-      -0.101511,
-      0.138089,
-      1.11256,
-      0.962041,
-      -0.0766392,
-      0.105053,
-      1.1375,
-      0.97528,
-      -0.0511967,
-      0.070329,
-      1.15983,
-      0.988476,
-      -0.025463,
-      0.0351268,
-      1.17987,
-      0.999962,
-      286808e-10,
-      145564e-10,
-      1.19901,
-      0.227089,
-      -841413e-11,
-      0.404216,
-      472707e-11,
-      0.239725,
-      -215083e-9,
-      0.426708,
-      120833e-9,
-      0.239904,
-      -860718e-9,
-      0.427028,
-      483555e-9,
-      0.239911,
-      -193661e-8,
-      0.427039,
-      108806e-8,
-      0.239914,
-      -344276e-8,
-      0.42704,
-      193457e-8,
-      0.239933,
-      -537907e-8,
-      0.427064,
-      302363e-8,
-      0.239944,
-      -774482e-8,
-      0.427065,
-      435604e-8,
-      0.239993,
-      -0.01054,
-      0.427122,
-      593398e-8,
-      0.240052,
-      -0.0137626,
-      0.427179,
-      775987e-8,
-      0.240148,
-      -0.0174115,
-      0.427279,
-      983854e-8,
-      0.240278,
-      -0.021484,
-      0.42741,
-      0.0121763,
-      0.240472,
-      -0.0259729,
-      0.427618,
-      0.0147827,
-      0.240839,
-      -0.0308131,
-      0.428086,
-      0.0176837,
-      0.241201,
-      -0.0360893,
-      0.428482,
-      0.0208775,
-      0.241626,
-      -0.0417723,
-      0.428907,
-      0.0243821,
-      0.242207,
-      -0.0478337,
-      0.42952,
-      0.0282228,
-      0.24298,
-      -0.0542199,
-      0.430332,
-      0.0324333,
-      0.243881,
-      -0.0610015,
-      0.431222,
-      0.0370252,
-      0.245123,
-      -0.0680874,
-      0.432512,
-      0.0420535,
-      0.24667,
-      -0.0755482,
-      0.434088,
-      0.0475414,
-      0.248779,
-      -0.0832873,
-      0.436323,
-      0.0535542,
-      0.251665,
-      -0.0913546,
-      0.439509,
-      0.0601716,
-      0.255305,
-      -0.0998489,
-      0.443478,
-      0.0674282,
-      0.260049,
-      -0.108576,
-      0.448713,
-      0.0754673,
-      0.266192,
-      -0.117754,
-      0.455524,
-      0.084339,
-      0.273158,
-      -0.127294,
-      0.4627,
-      0.0941683,
-      0.282131,
-      -0.137311,
-      0.472068,
-      0.10515,
-      0.293332,
-      -0.147736,
-      0.483565,
-      0.117402,
-      0.304667,
-      -0.158357,
-      0.493702,
-      0.130824,
-      0.317785,
-      -0.169274,
-      0.504708,
-      0.145724,
-      0.333245,
-      -0.180595,
-      0.517107,
-      0.16215,
-      0.349843,
-      -0.191892,
-      0.528849,
-      0.180149,
-      0.367944,
-      -0.203168,
-      0.540301,
-      0.199746,
-      0.387579,
-      -0.214443,
-      0.551514,
-      0.221047,
-      0.408247,
-      -0.225624,
-      0.560906,
-      0.243981,
-      0.43014,
-      -0.236422,
-      0.56959,
-      0.268513,
-      0.452669,
-      -0.24654,
-      0.576098,
-      0.294409,
-      0.476196,
-      -0.256157,
-      0.580925,
-      0.322002,
-      0.501157,
-      -0.265289,
-      0.584839,
-      0.351052,
-      0.527632,
-      -0.273671,
-      0.587614,
-      0.3812,
-      0.555754,
-      -0.281254,
-      0.589119,
-      0.412994,
-      0.581682,
-      -0.287448,
-      0.585204,
-      0.445498,
-      0.608196,
-      -0.292614,
-      0.579006,
-      0.479505,
-      0.635661,
-      -0.296068,
-      0.571297,
-      0.514643,
-      0.664999,
-      -0.297395,
-      0.560855,
-      0.552213,
-      0.691039,
-      -0.296645,
-      0.544525,
-      0.591365,
-      0.7179,
-      -0.293785,
-      0.526535,
-      0.630883,
-      0.744059,
-      -0.289089,
-      0.50545,
-      0.670932,
-      0.76863,
-      -0.282239,
-      0.482514,
-      0.710904,
-      0.793273,
-      -0.273688,
-      0.457246,
-      0.750259,
-      0.814731,
-      -0.26328,
-      0.428872,
-      0.78948,
-      0.835603,
-      -0.251526,
-      0.399384,
-      0.828597,
-      0.85489,
-      -0.238339,
-      0.368811,
-      0.866892,
-      0.872828,
-      -0.223607,
-      0.336617,
-      0.90563,
-      0.889462,
-      -0.207538,
-      0.303997,
-      0.943538,
-      0.904929,
-      -0.190297,
-      0.270812,
-      0.980591,
-      0.919101,
-      -0.172034,
-      0.237453,
-      1.01935,
-      0.930536,
-      -0.152058,
-      0.204431,
-      1.05498,
-      0.941223,
-      -0.129515,
-      0.172495,
-      1.08717,
-      0.94982,
-      -0.104263,
-      0.140175,
-      1.11551,
-      0.960592,
-      -0.0781944,
-      0.106465,
-      1.14098,
-      0.974629,
-      -0.051688,
-      0.0711592,
-      1.16418,
-      0.98811,
-      -0.0253929,
-      0.0354432,
-      1.18465,
-      1.00004,
-      804378e-9,
-      -330876e-9,
-      1.20462,
-      0.214668,
-      -821282e-11,
-      0.406619,
-      433582e-11,
-      0.218053,
-      -208144e-9,
-      0.413025,
-      109887e-9,
-      0.217987,
-      -832212e-9,
-      0.412901,
-      439362e-9,
-      0.217971,
-      -187246e-8,
-      0.412876,
-      988623e-9,
-      0.217968,
-      -332855e-8,
-      0.41286,
-      175772e-8,
-      0.217985,
-      -520055e-8,
-      0.412882,
-      274729e-8,
-      0.218014,
-      -748814e-8,
-      0.412916,
-      395842e-8,
-      0.218054,
-      -0.0101901,
-      0.412957,
-      539274e-8,
-      0.218106,
-      -0.0133057,
-      0.413005,
-      705348e-8,
-      0.218217,
-      -0.0168342,
-      0.413139,
-      894581e-8,
-      0.218338,
-      -0.0207707,
-      0.413258,
-      0.0110754,
-      0.21855,
-      -0.0251001,
-      0.413509,
-      0.0134551,
-      0.218913,
-      -0.0297861,
-      0.413992,
-      0.0161081,
-      0.219265,
-      -0.0348956,
-      0.414383,
-      0.0190307,
-      0.219696,
-      -0.0403909,
-      0.414839,
-      0.0222458,
-      0.220329,
-      -0.0462003,
-      0.415567,
-      0.025792,
-      0.220989,
-      -0.0524208,
-      0.41621,
-      0.0296637,
-      0.222027,
-      -0.058948,
-      0.417385,
-      0.0339323,
-      0.223301,
-      -0.0658208,
-      0.418779,
-      0.0386055,
-      0.224988,
-      -0.0730347,
-      0.420665,
-      0.0437355,
-      0.227211,
-      -0.0805274,
-      0.423198,
-      0.0493844,
-      0.230131,
-      -0.088395,
-      0.426566,
-      0.0556135,
-      0.233908,
-      -0.0966208,
-      0.43091,
-      0.0624829,
-      0.239092,
-      -0.105223,
-      0.437148,
-      0.0701636,
-      0.245315,
-      -0.11424,
-      0.444302,
-      0.0786949,
-      0.253166,
-      -0.12368,
-      0.453262,
-      0.0882382,
-      0.262374,
-      -0.133569,
-      0.463211,
-      0.0988682,
-      0.273145,
-      -0.143836,
-      0.474271,
-      0.110727,
-      0.285512,
-      -0.154577,
-      0.4863,
-      0.123945,
-      0.299512,
-      -0.165501,
-      0.498817,
-      0.138581,
-      0.314287,
-      -0.176698,
-      0.510341,
-      0.154676,
-      0.331083,
-      -0.188066,
-      0.522583,
-      0.172459,
-      0.349615,
-      -0.199597,
-      0.534879,
-      0.191979,
-      0.369318,
-      -0.210843,
-      0.546083,
-      0.21309,
-      0.390377,
-      -0.222068,
-      0.5562,
-      0.235998,
-      0.412411,
-      -0.233059,
-      0.564704,
-      0.260518,
-      0.435715,
-      -0.24357,
-      0.572314,
-      0.286795,
-      0.461196,
-      -0.253356,
-      0.579395,
-      0.314559,
-      0.485587,
-      -0.262362,
-      0.581985,
-      0.343581,
-      0.511908,
-      -0.270895,
-      0.584347,
-      0.374367,
-      0.539798,
-      -0.278452,
-      0.58505,
-      0.406015,
-      0.567974,
-      -0.284877,
-      0.583344,
-      0.439168,
-      0.594303,
-      -0.290124,
-      0.577348,
-      0.473005,
-      0.622951,
-      -0.294183,
-      0.570751,
-      0.508534,
-      0.652404,
-      -0.296389,
-      0.561541,
-      0.544764,
-      0.679291,
-      -0.296605,
-      0.546426,
-      0.582927,
-      0.706437,
-      -0.294095,
-      0.528599,
-      0.622681,
-      0.734485,
-      -0.28978,
-      0.508676,
-      0.663567,
-      0.758841,
-      -0.283363,
-      0.484768,
-      0.704092,
-      0.78537,
-      -0.275015,
-      0.460434,
-      0.745101,
-      0.807315,
-      -0.264689,
-      0.432166,
-      0.784712,
-      0.8271,
-      -0.252597,
-      0.401807,
-      0.824241,
-      0.849191,
-      -0.239154,
-      0.371458,
-      0.863803,
-      0.867046,
-      -0.224451,
-      0.338873,
-      0.903063,
-      0.8852,
-      -0.208342,
-      0.306175,
-      0.942763,
-      0.901771,
-      -0.190684,
-      0.272759,
-      0.981559,
-      0.915958,
-      -0.172105,
-      0.239306,
-      1.02048,
-      0.928046,
-      -0.152214,
-      0.206071,
-      1.05765,
-      0.939961,
-      -0.130247,
-      0.17367,
-      1.08999,
-      0.948711,
-      -0.10672,
-      0.142201,
-      1.11829,
-      0.959305,
-      -0.0808688,
-      0.108454,
-      1.14467,
-      0.973009,
-      -0.0539145,
-      0.0728109,
-      1.16839,
-      0.987631,
-      -0.0262947,
-      0.0360625,
-      1.19004,
-      0.999978,
-      132758e-8,
-      -559424e-9,
-      1.21058,
-      0.193925,
-      -793421e-11,
-      0.391974,
-      392537e-11,
-      0.196746,
-      -200315e-9,
-      0.397675,
-      991033e-10,
-      0.19667,
-      -801099e-9,
-      0.397521,
-      396342e-9,
-      0.196633,
-      -180246e-8,
-      0.397445,
-      891829e-9,
-      0.196654,
-      -320443e-8,
-      0.397482,
-      158582e-8,
-      0.196659,
-      -500647e-8,
-      0.39748,
-      247867e-8,
-      0.196683,
-      -72086e-7,
-      0.397506,
-      357167e-8,
-      0.196728,
-      -981001e-8,
-      0.397562,
-      486675e-8,
-      0.196792,
-      -0.0128096,
-      0.397633,
-      636707e-8,
-      0.19689,
-      -0.0162055,
-      0.397746,
-      807752e-8,
-      0.197017,
-      -0.0199943,
-      0.397884,
-      0.0100052,
-      0.19729,
-      -0.024139,
-      0.39827,
-      0.0121691,
-      0.197583,
-      -0.0286671,
-      0.398639,
-      0.0145755,
-      0.197927,
-      -0.0335858,
-      0.399034,
-      0.0172355,
-      0.198383,
-      -0.0388806,
-      0.399554,
-      0.0201718,
-      0.199002,
-      -0.0444736,
-      0.400289,
-      0.0234194,
-      0.199739,
-      -0.0504583,
-      0.401111,
-      0.026984,
-      0.200784,
-      -0.056729,
-      0.402349,
-      0.0309217,
-      0.202075,
-      -0.0633643,
-      0.403841,
-      0.0352496,
-      0.203898,
-      -0.0703247,
-      0.406076,
-      0.0400313,
-      0.206199,
-      -0.0775565,
-      0.408841,
-      0.0453282,
-      0.209252,
-      -0.085184,
-      0.41259,
-      0.0511794,
-      0.213638,
-      -0.0931994,
-      0.418288,
-      0.0577459,
-      0.21881,
-      -0.101617,
-      0.424681,
-      0.0650508,
-      0.225642,
-      -0.11052,
-      0.433429,
-      0.0732759,
-      0.233717,
-      -0.119772,
-      0.442897,
-      0.0824683,
-      0.242823,
-      -0.129505,
-      0.452888,
-      0.0927484,
-      0.254772,
-      -0.139906,
-      0.466407,
-      0.104417,
-      0.266603,
-      -0.150402,
-      0.477413,
-      0.117211,
-      0.28073,
-      -0.161395,
-      0.490519,
-      0.131598,
-      0.295399,
-      -0.172465,
-      0.50201,
-      0.147407,
-      0.312705,
-      -0.183982,
-      0.515311,
-      0.165031,
-      0.331335,
-      -0.195532,
-      0.52786,
-      0.184336,
-      0.351037,
-      -0.206971,
-      0.5392,
-      0.205361,
-      0.372175,
-      -0.218117,
-      0.54941,
-      0.228043,
-      0.394548,
-      -0.229327,
-      0.558642,
-      0.25267,
-      0.419598,
-      -0.240052,
-      0.567861,
-      0.279071,
-      0.443922,
-      -0.249937,
-      0.573332,
-      0.306882,
-      0.471495,
-      -0.259407,
-      0.58013,
-      0.33661,
-      0.496769,
-      -0.267749,
-      0.580564,
-      0.367328,
-      0.524951,
-      -0.275524,
-      0.581696,
-      0.399753,
-      0.55318,
-      -0.282148,
-      0.579885,
-      0.433134,
-      0.581577,
-      -0.287533,
-      0.575471,
-      0.467534,
-      0.609231,
-      -0.291612,
-      0.567445,
-      0.502943,
-      0.637478,
-      -0.293911,
-      0.557657,
-      0.53871,
-      0.667795,
-      -0.295096,
-      0.546535,
-      0.576568,
-      0.694272,
-      -0.294073,
-      0.529561,
-      0.614929,
-      0.722937,
-      -0.290386,
-      0.510561,
-      0.655909,
-      0.749682,
-      -0.284481,
-      0.487846,
-      0.697663,
-      0.774754,
-      -0.276188,
-      0.462487,
-      0.738515,
-      0.799301,
-      -0.266215,
-      0.43481,
-      0.779802,
-      0.820762,
-      -0.254116,
-      0.404879,
-      0.820045,
-      0.843231,
-      -0.240393,
-      0.374559,
-      0.860294,
-      0.861857,
-      -0.225503,
-      0.341582,
-      0.900965,
-      0.880815,
-      -0.209382,
-      0.308778,
-      0.941727,
-      0.89766,
-      -0.19155,
-      0.275232,
-      0.980916,
-      0.912926,
-      -0.172346,
-      0.240938,
-      1.02162,
-      0.926391,
-      -0.151799,
-      0.207223,
-      1.0597,
-      0.938429,
-      -0.129968,
-      0.17484,
-      1.09291,
-      0.947834,
-      -0.10651,
-      0.142984,
-      1.12248,
-      0.958432,
-      -0.0824098,
-      0.109902,
-      1.149,
-      0.972402,
-      -0.0565242,
-      0.0744454,
-      1.1733,
-      0.987191,
-      -0.028427,
-      0.0373794,
-      1.19538,
-      0.999975,
-      385685e-10,
-      -4203e-8,
-      1.21676,
-      0.178114,
-      -766075e-11,
-      0.385418,
-      354027e-11,
-      0.176074,
-      -191966e-9,
-      0.381002,
-      887135e-10,
-      0.17601,
-      -767549e-9,
-      0.380861,
-      354715e-9,
-      0.17598,
-      -172696e-8,
-      0.380798,
-      798168e-9,
-      0.175994,
-      -307012e-8,
-      0.380824,
-      141928e-8,
-      0.176017,
-      -479684e-8,
-      0.380858,
-      221859e-8,
-      0.176019,
-      -690648e-8,
-      0.380839,
-      319714e-8,
-      0.176072,
-      -939888e-8,
-      0.380913,
-      43572e-7,
-      0.176131,
-      -0.0122726,
-      0.380979,
-      5702e-6,
-      0.176239,
-      -0.0155264,
-      0.38112,
-      723689e-8,
-      0.176371,
-      -0.0191551,
-      0.381272,
-      896907e-8,
-      0.176638,
-      -0.023117,
-      0.381669,
-      0.0109194,
-      0.176912,
-      -0.0274633,
-      0.382015,
-      0.0130903,
-      0.177279,
-      -0.032173,
-      0.382476,
-      0.0154949,
-      0.17774,
-      -0.0372219,
-      0.383041,
-      0.0181669,
-      0.178344,
-      -0.0426132,
-      0.38378,
-      0.0211209,
-      0.179153,
-      -0.0483309,
-      0.384773,
-      0.0243899,
-      0.180197,
-      -0.0543447,
-      0.386076,
-      0.0280062,
-      0.181581,
-      -0.0607122,
-      0.387809,
-      0.032004,
-      0.18344,
-      -0.0673855,
-      0.390205,
-      0.036453,
-      0.186139,
-      -0.0743989,
-      0.393944,
-      0.0414162,
-      0.189432,
-      -0.0817731,
-      0.39832,
-      0.0469394,
-      0.193795,
-      -0.0895464,
-      0.404188,
-      0.0531442,
-      0.199641,
-      -0.0978264,
-      0.4121,
-      0.0601374,
-      0.206679,
-      -0.106499,
-      0.421425,
-      0.0680078,
-      0.214865,
-      -0.115654,
-      0.431504,
-      0.076919,
-      0.224406,
-      -0.125268,
-      0.442526,
-      0.0868835,
-      0.235876,
-      -0.135475,
-      0.455465,
-      0.0981875,
-      0.248335,
-      -0.146023,
-      0.4681,
-      0.110759,
-      0.262868,
-      -0.157016,
-      0.482069,
-      0.124885,
-      0.278962,
-      -0.168245,
-      0.496182,
-      0.140645,
-      0.295082,
-      -0.17958,
-      0.507401,
-      0.157838,
-      0.313738,
-      -0.191227,
-      0.520252,
-      0.17695,
-      0.333573,
-      -0.202718,
-      0.531708,
-      0.197817,
-      0.356433,
-      -0.214424,
-      0.544509,
-      0.220785,
-      0.378853,
-      -0.225492,
-      0.55373,
-      0.245306,
-      0.402717,
-      -0.236236,
-      0.561348,
-      0.271593,
-      0.428375,
-      -0.246568,
-      0.568538,
-      0.299776,
-      0.454724,
-      -0.255941,
-      0.573462,
-      0.329433,
-      0.482291,
-      -0.264511,
-      0.576356,
-      0.360598,
-      0.509706,
-      -0.272129,
-      0.576446,
-      0.393204,
-      0.538805,
-      -0.278979,
-      0.575298,
-      0.427227,
-      0.568919,
-      -0.284528,
-      0.572154,
-      0.462157,
-      0.596804,
-      -0.288801,
-      0.564691,
-      0.497997,
-      0.625987,
-      -0.291334,
-      0.555134,
-      0.534467,
-      0.656414,
-      -0.292722,
-      0.545051,
-      0.571736,
-      0.683916,
-      -0.292185,
-      0.528813,
-      0.610158,
-      0.711809,
-      -0.290043,
-      0.51106,
-      0.649061,
-      0.739547,
-      -0.285246,
-      0.490103,
-      0.690081,
-      0.766914,
-      -0.277647,
-      0.465523,
-      0.732554,
-      0.791375,
-      -0.267603,
-      0.437718,
-      0.773982,
-      0.814772,
-      -0.256109,
-      0.40882,
-      0.81609,
-      0.836691,
-      -0.242281,
-      0.377823,
-      0.856849,
-      0.856984,
-      -0.227155,
-      0.34496,
-      0.898363,
-      0.876332,
-      -0.210395,
-      0.311335,
-      0.939471,
-      0.894988,
-      -0.192612,
-      0.277703,
-      0.980799,
-      0.911113,
-      -0.173236,
-      0.243019,
-      1.02215,
-      0.924092,
-      -0.152258,
-      0.209037,
-      1.06139,
-      0.936828,
-      -0.129575,
-      0.175909,
-      1.09635,
-      0.946869,
-      -0.10594,
-      0.143852,
-      1.12707,
-      0.958284,
-      -0.081318,
-      0.110289,
-      1.15419,
-      0.972325,
-      -0.0556133,
-      0.0747232,
-      1.17909,
-      0.986878,
-      -0.0297899,
-      0.0383149,
-      1.20163,
-      0.999936,
-      -197169e-8,
-      912402e-9,
-      1.22338,
-      0.151174,
-      -720365e-11,
-      0.351531,
-      309789e-11,
-      0.155594,
-      -18279e-8,
-      0.361806,
-      78608e-9,
-      0.156099,
-      -731569e-9,
-      0.362982,
-      314615e-9,
-      0.156053,
-      -164578e-8,
-      0.362869,
-      707845e-9,
-      0.156093,
-      -29261e-7,
-      0.362961,
-      125884e-8,
-      0.156099,
-      -457155e-8,
-      0.362959,
-      196783e-8,
-      0.15612,
-      -658224e-8,
-      0.362982,
-      283622e-8,
-      0.156168,
-      -895774e-8,
-      0.363048,
-      386625e-8,
-      0.156221,
-      -0.0116962,
-      0.363101,
-      506109e-8,
-      0.156324,
-      -0.0147973,
-      0.363241,
-      642675e-8,
-      0.156476,
-      -0.0182503,
-      0.363448,
-      797175e-8,
-      0.156731,
-      -0.0220266,
-      0.36384,
-      971484e-8,
-      0.156994,
-      -0.026176,
-      0.364179,
-      0.0116575,
-      0.157341,
-      -0.0306701,
-      0.36462,
-      0.0138207,
-      0.157867,
-      -0.0354591,
-      0.365364,
-      0.0162356,
-      0.15846,
-      -0.0406141,
-      0.366111,
-      0.0189092,
-      0.159308,
-      -0.0460519,
-      0.367248,
-      0.021885,
-      0.160426,
-      -0.0518096,
-      0.368767,
-      0.0252004,
-      0.161877,
-      -0.0578906,
-      0.370745,
-      0.0288825,
-      0.163995,
-      -0.0642812,
-      0.373831,
-      0.0330139,
-      0.16655,
-      -0.0710067,
-      0.377366,
-      0.0376283,
-      0.170237,
-      -0.0781522,
-      0.382799,
-      0.0428493,
-      0.175096,
-      -0.0857172,
-      0.389915,
-      0.0487324,
-      0.181069,
-      -0.0938025,
-      0.398487,
-      0.0554214,
-      0.188487,
-      -0.102363,
-      0.408799,
-      0.0630189,
-      0.197029,
-      -0.111343,
-      0.419991,
-      0.071634,
-      0.206684,
-      -0.120812,
-      0.431455,
-      0.0812797,
-      0.218698,
-      -0.131033,
-      0.445746,
-      0.0923651,
-      0.230726,
-      -0.141373,
-      0.457471,
-      0.104545,
-      0.245516,
-      -0.152387,
-      0.472388,
-      0.118449,
-      0.261551,
-      -0.163628,
-      0.486671,
-      0.133923,
-      0.277437,
-      -0.174814,
-      0.49762,
-      0.150849,
-      0.296662,
-      -0.186713,
-      0.51162,
-      0.169924,
-      0.31795,
-      -0.198513,
-      0.525435,
-      0.190848,
-      0.339422,
-      -0.210119,
-      0.536267,
-      0.213504,
-      0.362143,
-      -0.221354,
-      0.545982,
-      0.237947,
-      0.387198,
-      -0.23224,
-      0.555364,
-      0.264427,
-      0.412349,
-      -0.24257,
-      0.561489,
-      0.292519,
-      0.439274,
-      -0.252284,
-      0.566903,
-      0.322561,
-      0.466779,
-      -0.261023,
-      0.569614,
-      0.353952,
-      0.496011,
-      -0.26899,
-      0.571589,
-      0.387278,
-      0.524964,
-      -0.275498,
-      0.570325,
-      0.421356,
-      0.556518,
-      -0.281449,
-      0.568792,
-      0.457314,
-      0.584363,
-      -0.285526,
-      0.560268,
-      0.493199,
-      0.614214,
-      -0.28844,
-      0.55205,
-      0.530276,
-      0.645684,
-      -0.289777,
-      0.541906,
-      0.56855,
-      0.673446,
-      -0.289722,
-      0.526464,
-      0.606927,
-      0.701924,
-      -0.287792,
-      0.509872,
-      0.645945,
-      0.73037,
-      -0.284315,
-      0.490649,
-      0.685564,
-      0.757405,
-      -0.278804,
-      0.467964,
-      0.726511,
-      0.784025,
-      -0.269543,
-      0.441468,
-      0.768601,
-      0.808255,
-      -0.258117,
-      0.41216,
-      0.811321,
-      0.830739,
-      -0.244728,
-      0.380606,
-      0.853496,
-      0.851914,
-      -0.229428,
-      0.348111,
-      0.895374,
-      0.872586,
-      -0.212508,
-      0.314732,
-      0.937674,
-      0.891581,
-      -0.194025,
-      0.280338,
-      0.979869,
-      0.907641,
-      -0.174711,
-      0.245203,
-      1.02253,
-      0.922233,
-      -0.153509,
-      0.21077,
-      1.06371,
-      0.935878,
-      -0.130418,
-      0.177399,
-      1.09972,
-      0.946338,
-      -0.105558,
-      0.144507,
-      1.13124,
-      0.957265,
-      -0.080059,
-      0.110508,
-      1.15973,
-      0.971668,
-      -0.0539766,
-      0.0742311,
-      1.18515,
-      0.9866,
-      -0.0277101,
-      0.0375224,
-      1.20858,
-      1.00021,
-      -515531e-9,
-      135226e-9,
-      1.23135,
-      0.137468,
-      -686011e-11,
-      0.345041,
-      273315e-11,
-      0.13703,
-      -173378e-9,
-      0.343936,
-      690761e-10,
-      0.136986,
-      -693048e-9,
-      0.34383,
-      276126e-9,
-      0.136964,
-      -155931e-8,
-      0.343761,
-      621337e-9,
-      0.137003,
-      -277211e-8,
-      0.343863,
-      110494e-8,
-      0.137012,
-      -433103e-8,
-      0.343868,
-      172744e-8,
-      0.137043,
-      -623606e-8,
-      0.343916,
-      249022e-8,
-      0.13709,
-      -84868e-7,
-      0.343986,
-      339559e-8,
-      0.137145,
-      -0.0110814,
-      0.344045,
-      444687e-8,
-      0.137242,
-      -0.0140187,
-      0.344177,
-      565007e-8,
-      0.137431,
-      -0.0172713,
-      0.344491,
-      701868e-8,
-      0.137644,
-      -0.0208605,
-      0.344805,
-      856042e-8,
-      0.13791,
-      -0.024792,
-      0.345172,
-      0.0102863,
-      0.138295,
-      -0.0290461,
-      0.345734,
-      0.0122185,
-      0.138764,
-      -0.0335957,
-      0.346371,
-      0.0143771,
-      0.139415,
-      -0.038467,
-      0.347298,
-      0.0167894,
-      0.140272,
-      -0.0436176,
-      0.348527,
-      0.0194895,
-      0.141457,
-      -0.0491016,
-      0.350276,
-      0.0225043,
-      0.14303,
-      -0.0548764,
-      0.352646,
-      0.0258962,
-      0.145289,
-      -0.0610096,
-      0.356206,
-      0.0297168,
-      0.148502,
-      -0.0674777,
-      0.361488,
-      0.0340562,
-      0.152188,
-      -0.074345,
-      0.367103,
-      0.0389534,
-      0.157359,
-      -0.0817442,
-      0.375247,
-      0.0445541,
-      0.16379,
-      -0.0896334,
-      0.385064,
-      0.0509535,
-      0.171376,
-      -0.098005,
-      0.396082,
-      0.0582611,
-      0.179901,
-      -0.106817,
-      0.407418,
-      0.06654,
-      0.189892,
-      -0.116239,
-      0.420031,
-      0.075994,
-      0.201838,
-      -0.12627,
-      0.434321,
-      0.0867239,
-      0.214311,
-      -0.136701,
-      0.447631,
-      0.0987517,
-      0.228902,
-      -0.147616,
-      0.462046,
-      0.112353,
-      0.245107,
-      -0.158871,
-      0.476942,
-      0.127605,
-      0.262292,
-      -0.170261,
-      0.490285,
-      0.144469,
-      0.281215,
-      -0.182017,
-      0.503783,
-      0.163282,
-      0.301058,
-      -0.193729,
-      0.515505,
-      0.183873,
-      0.322752,
-      -0.205512,
-      0.52682,
-      0.206466,
-      0.347547,
-      -0.217214,
-      0.539473,
-      0.231194,
-      0.370969,
-      -0.227966,
-      0.546625,
-      0.257288,
-      0.397533,
-      -0.238555,
-      0.55472,
-      0.285789,
-      0.42398,
-      -0.248278,
-      0.559468,
-      0.315746,
-      0.452928,
-      -0.257422,
-      0.564095,
-      0.347724,
-      0.482121,
-      -0.265306,
-      0.565426,
-      0.380922,
-      0.510438,
-      -0.272043,
-      0.563205,
-      0.415639,
-      0.541188,
-      -0.277614,
-      0.561087,
-      0.451702,
-      0.571667,
-      -0.281927,
-      0.554922,
-      0.48845,
-      0.602432,
-      -0.285015,
-      0.546838,
-      0.526442,
-      0.634126,
-      -0.286512,
-      0.537415,
-      0.564896,
-      0.662816,
-      -0.286388,
-      0.522906,
-      0.604037,
-      0.692411,
-      -0.284734,
-      0.507003,
-      0.643795,
-      0.720946,
-      -0.281297,
-      0.488398,
-      0.68298,
-      0.748293,
-      -0.276262,
-      0.466353,
-      0.723466,
-      0.776931,
-      -0.269978,
-      0.443573,
-      0.764565,
-      0.801065,
-      -0.260305,
-      0.415279,
-      0.805838,
-      0.825843,
-      -0.247426,
-      0.384773,
-      0.849985,
-      0.84807,
-      -0.232437,
-      0.352555,
-      0.893174,
-      0.869122,
-      -0.215806,
-      0.318642,
-      0.936564,
-      0.888963,
-      -0.197307,
-      0.28381,
-      0.980253,
-      0.905547,
-      -0.177203,
-      0.247888,
-      1.02463,
-      0.918554,
-      -0.155542,
-      0.212904,
-      1.06714,
-      0.931395,
-      -0.131948,
-      0.1787,
-      1.10451,
-      0.941749,
-      -0.106723,
-      0.145902,
-      1.13694,
-      0.954551,
-      -0.0804939,
-      0.111193,
-      1.1666,
-      0.970279,
-      -0.0534239,
-      0.0744697,
-      1.19249,
-      0.986117,
-      -0.0257452,
-      0.0368788,
-      1.21665,
-      0.999938,
-      190634e-8,
-      -10291e-7,
-      1.23981,
-      0.118493,
-      -647439e-11,
-      0.32272,
-      23772e-10,
-      0.118765,
-      -163023e-9,
-      0.323456,
-      598573e-10,
-      0.118772,
-      -65212e-8,
-      0.323477,
-      239447e-9,
-      0.118843,
-      -146741e-8,
-      0.323657,
-      538881e-9,
-      0.118804,
-      -260846e-8,
-      0.323553,
-      95826e-8,
-      0.118826,
-      -407576e-8,
-      0.323595,
-      149845e-8,
-      0.118846,
-      -586826e-8,
-      0.323617,
-      216047e-8,
-      0.118886,
-      -798578e-8,
-      0.32367,
-      294679e-8,
-      0.118947,
-      -0.0104273,
-      0.323753,
-      386124e-8,
-      0.119055,
-      -0.0131909,
-      0.323922,
-      490999e-8,
-      0.119241,
-      -0.0162444,
-      0.324251,
-      610804e-8,
-      0.11944,
-      -0.0196339,
-      0.324544,
-      745805e-8,
-      0.119739,
-      -0.0233378,
-      0.325026,
-      897805e-8,
-      0.12011,
-      -0.0273179,
-      0.325586,
-      0.0106895,
-      0.120571,
-      -0.0316143,
-      0.326231,
-      0.0126073,
-      0.12124,
-      -0.0361939,
-      0.327264,
-      0.0147654,
-      0.122162,
-      -0.0410511,
-      0.328733,
-      0.0172001,
-      0.123378,
-      -0.0462233,
-      0.330659,
-      0.0199375,
-      0.125183,
-      -0.0517109,
-      0.333754,
-      0.0230498,
-      0.127832,
-      -0.0575652,
-      0.338507,
-      0.026597,
-      0.130909,
-      -0.0637441,
-      0.343666,
-      0.0306345,
-      0.135221,
-      -0.0704302,
-      0.351063,
-      0.035273,
-      0.14082,
-      -0.0776364,
-      0.360604,
-      0.0406137,
-      0.146781,
-      -0.0852293,
-      0.369638,
-      0.0466788,
-      0.155121,
-      -0.0935351,
-      0.3827,
-      0.0537628,
-      0.16398,
-      -0.102234,
-      0.39522,
-      0.0617985,
-      0.173926,
-      -0.111465,
-      0.40793,
-      0.07097,
-      0.185137,
-      -0.121296,
-      0.42105,
-      0.0813426,
-      0.19826,
-      -0.13169,
-      0.435735,
-      0.0931596,
-      0.212938,
-      -0.142614,
-      0.450932,
-      0.106547,
-      0.229046,
-      -0.153884,
-      0.465726,
-      0.121575,
-      0.246246,
-      -0.165382,
-      0.479461,
-      0.138286,
-      0.264637,
-      -0.176806,
-      0.492106,
-      0.15666,
-      0.284959,
-      -0.188793,
-      0.504774,
-      0.17728,
-      0.308157,
-      -0.200763,
-      0.518805,
-      0.19988,
-      0.330951,
-      -0.21239,
-      0.528231,
-      0.224293,
-      0.3549,
-      -0.223521,
-      0.536376,
-      0.250541,
-      0.381502,
-      -0.234169,
-      0.544846,
-      0.278902,
-      0.409529,
-      -0.244077,
-      0.551717,
-      0.309227,
-      0.437523,
-      -0.253363,
-      0.55517,
-      0.341426,
-      0.467624,
-      -0.261659,
-      0.557772,
-      0.37518,
-      0.497268,
-      -0.268498,
-      0.556442,
-      0.41007,
-      0.528294,
-      -0.274018,
-      0.553915,
-      0.446445,
-      0.559053,
-      -0.278169,
-      0.549153,
-      0.483779,
-      0.589329,
-      -0.281229,
-      0.539878,
-      0.522249,
-      0.622503,
-      -0.282902,
-      0.53162,
-      0.561754,
-      0.652382,
-      -0.282815,
-      0.518119,
-      0.601544,
-      0.681847,
-      -0.281247,
-      0.502187,
-      0.641574,
-      0.712285,
-      -0.277986,
-      0.484824,
-      0.682633,
-      0.740094,
-      -0.273017,
-      0.463483,
-      0.723426,
-      0.768478,
-      -0.266692,
-      0.441299,
-      0.763747,
-      0.794556,
-      -0.258358,
-      0.415238,
-      0.805565,
-      0.819408,
-      -0.248807,
-      0.386912,
-      0.847254,
-      0.843411,
-      -0.236214,
-      0.356165,
-      0.891091,
-      0.862397,
-      -0.219794,
-      0.320562,
-      0.936174,
-      0.883113,
-      -0.201768,
-      0.285322,
-      0.982562,
-      0.90023,
-      -0.181672,
-      0.249713,
-      1.02862,
-      0.915192,
-      -0.159279,
-      0.214546,
-      1.07163,
-      0.928458,
-      -0.134725,
-      0.180285,
-      1.10995,
-      0.94069,
-      -0.10913,
-      0.147119,
-      1.14354,
-      0.953409,
-      -0.0821315,
-      0.112492,
-      1.17372,
-      0.969537,
-      -0.0542677,
-      0.0752014,
-      1.20043,
-      0.985612,
-      -0.0259096,
-      0.0370361,
-      1.22528,
-      0.999835,
-      298198e-8,
-      -151801e-8,
-      1.24959,
-      0.10097,
-      -602574e-11,
-      0.300277,
-      202619e-11,
-      0.101577,
-      -152164e-9,
-      0.302077,
-      511662e-10,
-      0.101572,
-      -608889e-9,
-      0.302066,
-      204751e-9,
-      0.101566,
-      -136997e-8,
-      0.302047,
-      460753e-9,
-      0.101592,
-      -243557e-8,
-      0.302114,
-      819497e-9,
-      0.101608,
-      -38053e-7,
-      0.30214,
-      128154e-8,
-      0.101627,
-      -547906e-8,
-      0.30216,
-      18483e-7,
-      0.101669,
-      -745647e-8,
-      0.302224,
-      252223e-8,
-      0.101732,
-      -973615e-8,
-      0.302318,
-      330716e-8,
-      0.101844,
-      -0.0123097,
-      0.302513,
-      421061e-8,
-      0.102025,
-      -0.0151681,
-      0.30285,
-      524481e-8,
-      0.102224,
-      -0.0183334,
-      0.303166,
-      64154e-7,
-      0.102515,
-      -0.0217819,
-      0.303654,
-      774063e-8,
-      0.102886,
-      -0.0255067,
-      0.304243,
-      92398e-7,
-      0.103395,
-      -0.029514,
-      0.305089,
-      0.0109339,
-      0.104109,
-      -0.0337912,
-      0.306301,
-      0.0128561,
-      0.105074,
-      -0.0383565,
-      0.30798,
-      0.0150338,
-      0.10654,
-      -0.0432132,
-      0.310726,
-      0.0175228,
-      0.108478,
-      -0.0484244,
-      0.314351,
-      0.0203648,
-      0.111015,
-      -0.0539339,
-      0.319032,
-      0.0236325,
-      0.114682,
-      -0.0598885,
-      0.32605,
-      0.0274188,
-      0.11911,
-      -0.0663375,
-      0.334109,
-      0.0317905,
-      0.124736,
-      -0.0733011,
-      0.344013,
-      0.0368502,
-      0.131479,
-      -0.0807744,
-      0.355358,
-      0.0427104,
-      0.139283,
-      -0.0888204,
-      0.367614,
-      0.0494788,
-      0.148054,
-      -0.0973394,
-      0.380072,
-      0.0572367,
-      0.159037,
-      -0.10665,
-      0.395678,
-      0.0662704,
-      0.169794,
-      -0.116221,
-      0.40795,
-      0.0763192,
-      0.18314,
-      -0.126632,
-      0.423546,
-      0.087956,
-      0.197515,
-      -0.137383,
-      0.438213,
-      0.101042,
-      0.213514,
-      -0.148641,
-      0.453248,
-      0.115827,
-      0.23065,
-      -0.160117,
-      0.46688,
-      0.132283,
-      0.249148,
-      -0.171807,
-      0.479962,
-      0.150644,
-      0.270219,
-      -0.183695,
-      0.494618,
-      0.171073,
-      0.292338,
-      -0.195574,
-      0.506937,
-      0.193378,
-      0.314999,
-      -0.207205,
-      0.516463,
-      0.217585,
-      0.340991,
-      -0.218955,
-      0.528123,
-      0.24428,
-      0.367982,
-      -0.229917,
-      0.537025,
-      0.272784,
-      0.39432,
-      -0.239737,
-      0.541627,
-      0.302742,
-      0.423364,
-      -0.249048,
-      0.546466,
-      0.335112,
-      0.453751,
-      -0.257329,
-      0.549466,
-      0.369032,
-      0.48416,
-      -0.264623,
-      0.549503,
-      0.404577,
-      0.515262,
-      -0.270411,
-      0.547008,
-      0.441337,
-      0.547036,
-      -0.274581,
-      0.542249,
-      0.479162,
-      0.576614,
-      -0.277266,
-      0.533015,
-      0.517904,
-      0.611143,
-      -0.279144,
-      0.525512,
-      0.558508,
-      0.640989,
-      -0.279001,
-      0.51154,
-      0.598995,
-      0.671182,
-      -0.277324,
-      0.495641,
-      0.639935,
-      0.700848,
-      -0.273908,
-      0.477526,
-      0.681017,
-      0.729862,
-      -0.269063,
-      0.457955,
-      0.722764,
-      0.758273,
-      -0.262282,
-      0.434846,
-      0.764349,
-      0.784121,
-      -0.254281,
-      0.409203,
-      0.806206,
-      0.809798,
-      -0.24505,
-      0.382694,
-      0.848617,
-      0.834953,
-      -0.233861,
-      0.354034,
-      0.892445,
-      0.856817,
-      -0.221308,
-      0.321764,
-      0.936263,
-      0.877609,
-      -0.205996,
-      0.288118,
-      0.982401,
-      0.897489,
-      -0.186702,
-      0.253277,
-      1.02975,
-      0.913792,
-      -0.164618,
-      0.217963,
-      1.07488,
-      0.92785,
-      -0.140023,
-      0.183221,
-      1.11487,
-      0.940378,
-      -0.11328,
-      0.149385,
-      1.14947,
-      0.95273,
-      -0.0853958,
-      0.114152,
-      1.1807,
-      0.969059,
-      -0.0568698,
-      0.0769845,
-      1.20912,
-      0.985574,
-      -0.0276502,
-      0.0381186,
-      1.23498,
-      0.999943,
-      239052e-8,
-      -126861e-8,
-      1.25987,
-      0.0852715,
-      -560067e-11,
-      0.279021,
-      171162e-11,
-      0.0854143,
-      -140871e-9,
-      0.279483,
-      430516e-10,
-      0.0854191,
-      -563385e-9,
-      0.2795,
-      172184e-9,
-      0.0854188,
-      -126753e-8,
-      0.279493,
-      387464e-9,
-      0.0854229,
-      -225337e-8,
-      0.279501,
-      68918e-8,
-      0.0854443,
-      -352086e-8,
-      0.279549,
-      107803e-8,
-      0.0854697,
-      -506962e-8,
-      0.279591,
-      155536e-8,
-      0.0855093,
-      -689873e-8,
-      0.279652,
-      212354e-8,
-      0.0855724,
-      -900821e-8,
-      0.279752,
-      278703e-8,
-      0.0856991,
-      -0.0113799,
-      0.280011,
-      35551e-7,
-      0.085855,
-      -0.0140314,
-      0.280297,
-      443449e-8,
-      0.0860682,
-      -0.016963,
-      0.280682,
-      543636e-8,
-      0.086344,
-      -0.0201438,
-      0.281159,
-      65788e-7,
-      0.0867426,
-      -0.0235999,
-      0.281886,
-      787977e-8,
-      0.087239,
-      -0.0273069,
-      0.282745,
-      93606e-7,
-      0.0879815,
-      -0.031269,
-      0.284139,
-      0.011056,
-      0.0891258,
-      -0.035531,
-      0.28647,
-      0.0130065,
-      0.0906909,
-      -0.0400947,
-      0.289708,
-      0.0152495,
-      0.0927624,
-      -0.0449638,
-      0.293904,
-      0.0178454,
-      0.0958376,
-      -0.0502427,
-      0.300471,
-      0.0208915,
-      0.0995827,
-      -0.0559514,
-      0.30806,
-      0.0244247,
-      0.104526,
-      -0.0622152,
-      0.317874,
-      0.0285721,
-      0.110532,
-      -0.0690046,
-      0.329332,
-      0.0334227,
-      0.117385,
-      -0.0763068,
-      0.341217,
-      0.0390466,
-      0.12522,
-      -0.084184,
-      0.353968,
-      0.0455786,
-      0.134037,
-      -0.0925248,
-      0.366797,
-      0.0530773,
-      0.144014,
-      -0.101487,
-      0.380209,
-      0.0617424,
-      0.156013,
-      -0.111273,
-      0.395956,
-      0.071777,
-      0.168872,
-      -0.121431,
-      0.41053,
-      0.0830905,
-      0.183089,
-      -0.132105,
-      0.425073,
-      0.0959341,
-      0.198763,
-      -0.143286,
-      0.439833,
-      0.110448,
-      0.216159,
-      -0.154841,
-      0.454507,
-      0.126769,
-      0.234859,
-      -0.166588,
-      0.468368,
-      0.14495,
-      0.255879,
-      -0.178626,
-      0.482846,
-      0.165233,
-      0.27677,
-      -0.190218,
-      0.493489,
-      0.187217,
-      0.301184,
-      -0.202227,
-      0.506549,
-      0.211659,
-      0.325852,
-      -0.213764,
-      0.5158,
-      0.237922,
-      0.352824,
-      -0.22487,
-      0.525442,
-      0.26632,
-      0.380882,
-      -0.235246,
-      0.532487,
-      0.296691,
-      0.410137,
-      -0.244847,
-      0.537703,
-      0.329179,
-      0.439787,
-      -0.253122,
-      0.540361,
-      0.363135,
-      0.472291,
-      -0.260517,
-      0.542734,
-      0.399222,
-      0.501856,
-      -0.266519,
-      0.538826,
-      0.436352,
-      0.534816,
-      -0.270905,
-      0.535152,
-      0.474505,
-      0.565069,
-      -0.273826,
-      0.525979,
-      0.513988,
-      0.597154,
-      -0.275333,
-      0.516394,
-      0.554852,
-      0.630473,
-      -0.275314,
-      0.506206,
-      0.596592,
-      0.660574,
-      -0.273323,
-      0.489769,
-      0.638117,
-      0.692015,
-      -0.270008,
-      0.472578,
-      0.680457,
-      0.720647,
-      -0.265001,
-      0.452134,
-      0.723008,
-      0.750528,
-      -0.258311,
-      0.430344,
-      0.765954,
-      0.777568,
-      -0.250046,
-      0.405624,
-      0.809012,
-      0.80387,
-      -0.240114,
-      0.378339,
-      0.852425,
-      0.828439,
-      -0.228737,
-      0.349877,
-      0.895346,
-      0.851472,
-      -0.216632,
-      0.318968,
-      0.940695,
-      0.873906,
-      -0.202782,
-      0.287489,
-      0.987235,
-      0.89467,
-      -0.187059,
-      0.254394,
-      1.03348,
-      0.912281,
-      -0.168818,
-      0.221294,
-      1.07812,
-      0.927358,
-      -0.146494,
-      0.18675,
-      1.11928,
-      0.940385,
-      -0.120009,
-      0.152322,
-      1.15609,
-      0.952672,
-      -0.0917183,
-      0.117514,
-      1.18875,
-      0.968496,
-      -0.0620321,
-      0.0797405,
-      1.21821,
-      0.985236,
-      -0.0314945,
-      0.0402383,
-      1.24523,
-      0.99998,
-      -575153e-9,
-      110644e-9,
-      1.27133,
-      0.0702429,
-      -512222e-11,
-      0.255273,
-      140947e-11,
-      0.0702981,
-      -128826e-9,
-      0.255469,
-      354488e-10,
-      0.0703691,
-      -515562e-9,
-      0.255727,
-      141874e-9,
-      0.0703805,
-      -116e-5,
-      0.255754,
-      31929e-8,
-      0.0703961,
-      -206224e-8,
-      0.255813,
-      567999e-9,
-      0.0704102,
-      -322223e-8,
-      0.255839,
-      88871e-8,
-      0.0704298,
-      -463928e-8,
-      0.255863,
-      128272e-8,
-      0.0704759,
-      -631375e-8,
-      0.255953,
-      175283e-8,
-      0.0705434,
-      -824317e-8,
-      0.256079,
-      230342e-8,
-      0.0706693,
-      -0.010412,
-      0.25636,
-      29443e-7,
-      0.0708189,
-      -0.0128439,
-      0.256647,
-      368031e-8,
-      0.0710364,
-      -0.0155177,
-      0.257084,
-      452614e-8,
-      0.0713223,
-      -0.0184374,
-      0.257637,
-      549706e-8,
-      0.0717182,
-      -0.0216002,
-      0.258416,
-      661246e-8,
-      0.072321,
-      -0.0249966,
-      0.259699,
-      790147e-8,
-      0.0731446,
-      -0.0286566,
-      0.261475,
-      93884e-7,
-      0.0743352,
-      -0.0325888,
-      0.264132,
-      0.0111186,
-      0.0760676,
-      -0.036843,
-      0.26815,
-      0.013145,
-      0.078454,
-      -0.0414292,
-      0.273636,
-      0.0155251,
-      0.0818618,
-      -0.0464634,
-      0.281653,
-      0.0183525,
-      0.0857382,
-      -0.0519478,
-      0.289992,
-      0.0216642,
-      0.0908131,
-      -0.0579836,
-      0.30066,
-      0.0255956,
-      0.0967512,
-      -0.0645124,
-      0.312204,
-      0.0301954,
-      0.103717,
-      -0.0716505,
-      0.325001,
-      0.0356017,
-      0.111596,
-      -0.0793232,
-      0.338129,
-      0.041896,
-      0.120933,
-      -0.087645,
-      0.352853,
-      0.0492447,
-      0.130787,
-      -0.096492,
-      0.366192,
-      0.0576749,
-      0.142311,
-      -0.105973,
-      0.380864,
-      0.0673969,
-      0.155344,
-      -0.116182,
-      0.396575,
-      0.0785899,
-      0.169535,
-      -0.126815,
-      0.411443,
-      0.0912377,
-      0.185173,
-      -0.138015,
-      0.426256,
-      0.105607,
-      0.201755,
-      -0.149325,
-      0.439607,
-      0.121551,
-      0.221334,
-      -0.161207,
-      0.455467,
-      0.139608,
-      0.241461,
-      -0.173162,
-      0.469096,
-      0.159591,
-      0.26294,
-      -0.18504,
-      0.481014,
-      0.18156,
-      0.286776,
-      -0.196881,
-      0.493291,
-      0.205781,
-      0.311596,
-      -0.208311,
-      0.503556,
-      0.231819,
-      0.338667,
-      -0.219671,
-      0.513268,
-      0.260274,
-      0.366021,
-      -0.230451,
-      0.519414,
-      0.290862,
-      0.395875,
-      -0.240131,
-      0.526766,
-      0.323196,
-      0.425564,
-      -0.248566,
-      0.52905,
-      0.357071,
-      0.457094,
-      -0.256195,
-      0.530796,
-      0.393262,
-      0.488286,
-      -0.262331,
-      0.528703,
-      0.430797,
-      0.522291,
-      -0.267141,
-      0.52727,
-      0.470231,
-      0.554172,
-      -0.270411,
-      0.519848,
-      0.510477,
-      0.586427,
-      -0.271986,
-      0.510307,
-      0.551594,
-      0.619638,
-      -0.27192,
-      0.499158,
-      0.593849,
-      0.650656,
-      -0.269817,
-      0.483852,
-      0.636314,
-      0.68284,
-      -0.266267,
-      0.467515,
-      0.679679,
-      0.714356,
-      -0.26113,
-      0.44931,
-      0.723884,
-      0.742717,
-      -0.254067,
-      0.425789,
-      0.767245,
-      0.770894,
-      -0.245652,
-      0.401144,
-      0.811819,
-      0.797358,
-      -0.235554,
-      0.374224,
-      0.856315,
-      0.823377,
-      -0.223896,
-      0.346167,
-      0.901077,
-      0.847456,
-      -0.210865,
-      0.316056,
-      0.946502,
-      0.870697,
-      -0.196574,
-      0.284503,
-      0.993711,
-      0.891068,
-      -0.180814,
-      0.251628,
-      1.04134,
-      0.909267,
-      -0.163314,
-      0.219065,
-      1.08609,
-      0.925653,
-      -0.143304,
-      0.186446,
-      1.12702,
-      0.940017,
-      -0.121322,
-      0.153416,
-      1.16371,
-      0.952398,
-      -0.0973872,
-      0.120334,
-      1.19712,
-      0.967568,
-      -0.0698785,
-      0.08352,
-      1.22791,
-      0.984772,
-      -0.0390031,
-      0.0439209,
-      1.25672,
-      1.00026,
-      -70087e-7,
-      315668e-8,
-      1.28428,
-      0.0556653,
-      -459654e-11,
-      0.227325,
-      112556e-11,
-      0.0565238,
-      -116382e-9,
-      0.230826,
-      284985e-10,
-      0.0565717,
-      -465666e-9,
-      0.231026,
-      114036e-9,
-      0.0565859,
-      -104773e-8,
-      0.231079,
-      256656e-9,
-      0.0565761,
-      -186255e-8,
-      0.231025,
-      45663e-8,
-      0.0565913,
-      -291002e-8,
-      0.231058,
-      714664e-9,
-      0.0566108,
-      -418998e-8,
-      0.231085,
-      103224e-8,
-      0.0566532,
-      -570206e-8,
-      0.231169,
-      141202e-8,
-      0.0567473,
-      -743666e-8,
-      0.231417,
-      186018e-8,
-      0.0568567,
-      -940298e-8,
-      0.231661,
-      238264e-8,
-      0.0569859,
-      -0.0115991,
-      0.231895,
-      298699e-8,
-      0.0572221,
-      -0.0140096,
-      0.232456,
-      368957e-8,
-      0.057519,
-      -0.0166508,
-      0.233096,
-      450303e-8,
-      0.0579534,
-      -0.01951,
-      0.234094,
-      544945e-8,
-      0.0585922,
-      -0.0225991,
-      0.235629,
-      655564e-8,
-      0.0595647,
-      -0.0259416,
-      0.238106,
-      785724e-8,
-      0.0609109,
-      -0.0295661,
-      0.241557,
-      939127e-8,
-      0.0628751,
-      -0.0335126,
-      0.246652,
-      0.0112198,
-      0.0656908,
-      -0.0378604,
-      0.254091,
-      0.0134168,
-      0.0691347,
-      -0.0426543,
-      0.262666,
-      0.0160374,
-      0.0732165,
-      -0.0478967,
-      0.272029,
-      0.0191514,
-      0.0782863,
-      -0.0536716,
-      0.283007,
-      0.0228597,
-      0.0843973,
-      -0.0600683,
-      0.295732,
-      0.0272829,
-      0.0913598,
-      -0.0670095,
-      0.308779,
-      0.032484,
-      0.0994407,
-      -0.0745516,
-      0.322886,
-      0.0385886,
-      0.108189,
-      -0.082712,
-      0.336408,
-      0.0457133,
-      0.118574,
-      -0.0914927,
-      0.351692,
-      0.0539832,
-      0.129989,
-      -0.100854,
-      0.366502,
-      0.0635162,
-      0.142722,
-      -0.110837,
-      0.381675,
-      0.0744386,
-      0.156654,
-      -0.121353,
-      0.3963,
-      0.0868483,
-      0.172151,
-      -0.132414,
-      0.411477,
-      0.100963,
-      0.188712,
-      -0.143809,
-      0.42508,
-      0.116795,
-      0.208093,
-      -0.155765,
-      0.441328,
-      0.134715,
-      0.227936,
-      -0.167608,
-      0.454328,
-      0.154396,
-      0.249495,
-      -0.179579,
-      0.467235,
-      0.176179,
-      0.27362,
-      -0.191488,
-      0.480248,
-      0.200193,
-      0.296371,
-      -0.202618,
-      0.487886,
-      0.225775,
-      0.324234,
-      -0.214133,
-      0.499632,
-      0.25441,
-      0.353049,
-      -0.225212,
-      0.509532,
-      0.285077,
-      0.381785,
-      -0.234875,
-      0.514265,
-      0.317047,
-      0.414038,
-      -0.244205,
-      0.521282,
-      0.351874,
-      0.445251,
-      -0.252145,
-      0.522931,
-      0.388279,
-      0.476819,
-      -0.258433,
-      0.520947,
-      0.425825,
-      0.509209,
-      -0.263411,
-      0.517669,
-      0.465104,
-      0.542759,
-      -0.266732,
-      0.512841,
-      0.505741,
-      0.574822,
-      -0.268263,
-      0.503317,
-      0.547611,
-      0.609324,
-      -0.268489,
-      0.493035,
-      0.590953,
-      0.641772,
-      -0.266941,
-      0.478816,
-      0.63488,
-      0.674049,
-      -0.263297,
-      0.462863,
-      0.679072,
-      0.705071,
-      -0.257618,
-      0.442931,
-      0.723487,
-      0.734709,
-      -0.250625,
-      0.421299,
-      0.768708,
-      0.763704,
-      -0.24179,
-      0.397085,
-      0.814375,
-      0.791818,
-      -0.231115,
-      0.370577,
-      0.859907,
-      0.817439,
-      -0.21922,
-      0.34232,
-      0.906715,
-      0.843202,
-      -0.205658,
-      0.312627,
-      0.953943,
-      0.866639,
-      -0.190563,
-      0.280933,
-      1.00185,
-      0.888129,
-      -0.173978,
-      0.248393,
-      1.05105,
-      0.907239,
-      -0.155485,
-      0.216007,
-      1.09704,
-      0.923893,
-      -0.134782,
-      0.183233,
-      1.13857,
-      0.938882,
-      -0.11249,
-      0.150376,
-      1.17539,
-      0.952464,
-      -0.0890706,
-      0.117177,
-      1.20924,
-      0.968529,
-      -0.0646523,
-      0.0813095,
-      1.24055,
-      0.984763,
-      -0.038606,
-      0.0439378,
-      1.27018,
-      1.00053,
-      -0.01238,
-      598668e-8,
-      1.29873,
-      0.0437928,
-      -409594e-11,
-      0.204012,
-      879224e-12,
-      0.0440166,
-      -103395e-9,
-      0.205049,
-      221946e-10,
-      0.0440529,
-      -413633e-9,
-      0.205225,
-      887981e-10,
-      0.0440493,
-      -930594e-9,
-      0.2052,
-      199858e-9,
-      0.0439884,
-      -165352e-8,
-      0.204901,
-      355495e-9,
-      0.0440716,
-      -25849e-7,
-      0.205255,
-      556983e-9,
-      0.0440968,
-      -372222e-8,
-      0.205311,
-      805326e-9,
-      0.0441359,
-      -506478e-8,
-      0.205391,
-      110333e-8,
-      0.0442231,
-      -660384e-8,
-      0.205638,
-      145768e-8,
-      0.0443254,
-      -835246e-8,
-      0.205877,
-      187275e-8,
-      0.0444832,
-      -0.0102992,
-      0.20627,
-      235938e-8,
-      0.0447001,
-      -0.0124449,
-      0.206796,
-      29299e-7,
-      0.0450168,
-      -0.0147935,
-      0.207593,
-      36005e-7,
-      0.0454816,
-      -0.017336,
-      0.208819,
-      439246e-8,
-      0.0462446,
-      -0.0201156,
-      0.211036,
-      533864e-8,
-      0.0473694,
-      -0.0231568,
-      0.214388,
-      646984e-8,
-      0.0490191,
-      -0.0264941,
-      0.219357,
-      783856e-8,
-      0.0512776,
-      -0.030184,
-      0.226061,
-      950182e-8,
-      0.0541279,
-      -0.0342661,
-      0.234094,
-      0.0115156,
-      0.0578989,
-      -0.0388539,
-      0.244297,
-      0.0139687,
-      0.0620835,
-      -0.0438735,
-      0.254457,
-      0.0169015,
-      0.0673497,
-      -0.04951,
-      0.266706,
-      0.0204554,
-      0.0731759,
-      -0.0556263,
-      0.278753,
-      0.0246606,
-      0.0803937,
-      -0.0624585,
-      0.29309,
-      0.0297126,
-      0.0879287,
-      -0.0697556,
-      0.305856,
-      0.0355868,
-      0.0970669,
-      -0.0778795,
-      0.321059,
-      0.0425768,
-      0.106508,
-      -0.0863541,
-      0.333873,
-      0.05056,
-      0.11776,
-      -0.0955935,
-      0.349008,
-      0.0598972,
-      0.130081,
-      -0.105438,
-      0.363776,
-      0.0706314,
-      0.144454,
-      -0.115899,
-      0.380112,
-      0.0828822,
-      0.1596,
-      -0.126827,
-      0.394843,
-      0.0967611,
-      0.176097,
-      -0.138161,
-      0.409033,
-      0.112381,
-      0.194726,
-      -0.149904,
-      0.424257,
-      0.129952,
-      0.213944,
-      -0.161675,
-      0.436945,
-      0.149333,
-      0.235516,
-      -0.173659,
-      0.450176,
-      0.170892,
-      0.260564,
-      -0.185963,
-      0.466305,
-      0.194984,
-      0.285183,
-      -0.197582,
-      0.477328,
-      0.220805,
-      0.311095,
-      -0.208697,
-      0.486566,
-      0.248694,
-      0.338924,
-      -0.219519,
-      0.494811,
-      0.279015,
-      0.369757,
-      -0.229766,
-      0.504065,
-      0.311725,
-      0.3996,
-      -0.238879,
-      0.507909,
-      0.345844,
-      0.430484,
-      -0.246802,
-      0.509805,
-      0.381749,
-      0.46413,
-      -0.253924,
-      0.511436,
-      0.420251,
-      0.497077,
-      -0.259319,
-      0.508787,
-      0.459957,
-      0.530434,
-      -0.263297,
-      0.50394,
-      0.501356,
-      0.565725,
-      -0.265619,
-      0.49804,
-      0.544252,
-      0.599254,
-      -0.265842,
-      0.487346,
-      0.587856,
-      0.631251,
-      -0.263978,
-      0.472975,
-      0.631969,
-      0.663972,
-      -0.26043,
-      0.457135,
-      0.677471,
-      0.697724,
-      -0.255358,
-      0.439844,
-      0.723744,
-      0.727725,
-      -0.248308,
-      0.417872,
-      0.770653,
-      0.756417,
-      -0.239181,
-      0.39273,
-      0.817357,
-      0.785419,
-      -0.22814,
-      0.367839,
-      0.864221,
-      0.81266,
-      -0.215681,
-      0.339449,
-      0.912701,
-      0.839391,
-      -0.201623,
-      0.309279,
-      0.962419,
-      0.86366,
-      -0.185624,
-      0.278029,
-      1.0122,
-      0.885028,
-      -0.16797,
-      0.245294,
-      1.06186,
-      0.904639,
-      -0.148336,
-      0.212689,
-      1.10934,
-      0.922048,
-      -0.12637,
-      0.179616,
-      1.15063,
-      0.936952,
-      -0.102928,
-      0.146749,
-      1.18885,
-      0.951895,
-      -0.0785268,
-      0.112733,
-      1.22352,
-      0.967198,
-      -0.0530153,
-      0.0760056,
-      1.25681,
-      0.984405,
-      -0.02649,
-      0.0383183,
-      1.28762,
-      1.00021,
-      70019e-8,
-      -20039e-8,
-      1.31656,
-      0.0325964,
-      -355447e-11,
-      0.176706,
-      655682e-12,
-      0.0329333,
-      -899174e-10,
-      0.178527,
-      165869e-10,
-      0.0329181,
-      -359637e-9,
-      0.178453,
-      663498e-10,
-      0.0329085,
-      -808991e-9,
-      0.178383,
-      149332e-9,
-      0.0329181,
-      -143826e-8,
-      0.178394,
-      265873e-9,
-      0.0329425,
-      -224678e-8,
-      0.178517,
-      416597e-9,
-      0.0329511,
-      -323575e-8,
-      0.17849,
-      603299e-9,
-      0.033011,
-      -439875e-8,
-      0.178695,
-      829422e-9,
-      0.0330733,
-      -574059e-8,
-      0.178843,
-      109908e-8,
-      0.0331857,
-      -725896e-8,
-      0.179176,
-      141933e-8,
-      0.0333445,
-      -895289e-8,
-      0.179618,
-      17999e-7,
-      0.0335674,
-      -0.0108219,
-      0.180238,
-      225316e-8,
-      0.033939,
-      -0.0128687,
-      0.181417,
-      279765e-8,
-      0.0345239,
-      -0.015114,
-      0.183395,
-      34564e-7,
-      0.0354458,
-      -0.017596,
-      0.186616,
-      425864e-8,
-      0.0368313,
-      -0.0203524,
-      0.191547,
-      524936e-8,
-      0.0386115,
-      -0.0234105,
-      0.197508,
-      647033e-8,
-      0.0410303,
-      -0.0268509,
-      0.205395,
-      798121e-8,
-      0.0442245,
-      -0.0307481,
-      0.215365,
-      98557e-7,
-      0.0478659,
-      -0.0350863,
-      0.225595,
-      0.0121417,
-      0.0522416,
-      -0.0399506,
-      0.236946,
-      0.0149385,
-      0.0574513,
-      -0.045357,
-      0.249442,
-      0.0183189,
-      0.0631208,
-      -0.0512863,
-      0.261222,
-      0.0223644,
-      0.0701124,
-      -0.0579273,
-      0.275418,
-      0.0272418,
-      0.0777331,
-      -0.0650652,
-      0.288989,
-      0.0329458,
-      0.0862709,
-      -0.0728813,
-      0.302546,
-      0.0396819,
-      0.096103,
-      -0.081363,
-      0.317164,
-      0.04757,
-      0.106976,
-      -0.0904463,
-      0.331733,
-      0.0567012,
-      0.119175,
-      -0.100105,
-      0.34661,
-      0.067202,
-      0.132919,
-      -0.110375,
-      0.362249,
-      0.0792588,
-      0.147727,
-      -0.121115,
-      0.376978,
-      0.0928672,
-      0.163618,
-      -0.132299,
-      0.390681,
-      0.108228,
-      0.182234,
-      -0.143887,
-      0.406571,
-      0.125502,
-      0.201809,
-      -0.155827,
-      0.42042,
-      0.144836,
-      0.225041,
-      -0.168357,
-      0.438411,
-      0.166706,
-      0.247621,
-      -0.18004,
-      0.450368,
-      0.189909,
-      0.27097,
-      -0.191536,
-      0.460083,
-      0.215251,
-      0.296658,
-      -0.203024,
-      0.469765,
-      0.243164,
-      0.325892,
-      -0.214056,
-      0.481837,
-      0.273388,
-      0.35406,
-      -0.224104,
-      0.487474,
-      0.305344,
-      0.384372,
-      -0.233489,
-      0.492773,
-      0.339741,
-      0.41749,
-      -0.241874,
-      0.498451,
-      0.376287,
-      0.45013,
-      -0.248834,
-      0.499632,
-      0.414195,
-      0.481285,
-      -0.254658,
-      0.495233,
-      0.454077,
-      0.519183,
-      -0.259367,
-      0.496401,
-      0.496352,
-      0.551544,
-      -0.261818,
-      0.487686,
-      0.538798,
-      0.587349,
-      -0.262964,
-      0.479453,
-      0.583626,
-      0.621679,
-      -0.262128,
-      0.467709,
-      0.629451,
-      0.654991,
-      -0.258998,
-      0.452123,
-      0.67566,
-      0.686873,
-      -0.254119,
-      0.433495,
-      0.723248,
-      0.719801,
-      -0.246946,
-      0.413657,
-      0.771156,
-      0.750355,
-      -0.237709,
-      0.390366,
-      0.81989,
-      0.780033,
-      -0.226549,
-      0.364947,
-      0.868601,
-      0.809254,
-      -0.214186,
-      0.337256,
-      0.920034,
-      0.836576,
-      -0.199639,
-      0.307395,
-      0.971706,
-      0.861774,
-      -0.183169,
-      0.275431,
-      1.02479,
-      0.885707,
-      -0.165111,
-      0.243431,
-      1.07837,
-      0.904742,
-      -0.144363,
-      0.210921,
-      1.12783,
-      0.915604,
-      -0.121305,
-      0.17647,
-      1.17254,
-      0.930959,
-      -0.0962119,
-      0.143106,
-      1.21012,
-      0.948404,
-      -0.069969,
-      0.108112,
-      1.24474,
-      0.967012,
-      -0.0427586,
-      0.0708478,
-      1.27718,
-      0.984183,
-      -0.0147043,
-      0.032335,
-      1.3083,
-      0.999577,
-      0.0142165,
-      -726867e-8,
-      1.3382,
-      0.0229227,
-      -299799e-11,
-      0.148623,
-      462391e-12,
-      0.0232194,
-      -758796e-10,
-      0.15054,
-      117033e-10,
-      0.0232315,
-      -303636e-9,
-      0.15063,
-      468397e-10,
-      0.0232354,
-      -683189e-9,
-      0.150624,
-      105472e-9,
-      0.0232092,
-      -12136e-7,
-      0.150445,
-      187744e-9,
-      0.0232523,
-      -189765e-8,
-      0.150679,
-      294847e-9,
-      0.0232828,
-      -273247e-8,
-      0.150789,
-      428013e-9,
-      0.0233371,
-      -371287e-8,
-      0.150995,
-      591134e-9,
-      0.0234015,
-      -484794e-8,
-      0.15118,
-      787642e-9,
-      0.023514,
-      -612877e-8,
-      0.151562,
-      102547e-8,
-      0.023679,
-      -756125e-8,
-      0.152116,
-      131351e-8,
-      0.0239559,
-      -914651e-8,
-      0.153162,
-      166594e-8,
-      0.0244334,
-      -0.010904,
-      0.155133,
-      210182e-8,
-      0.025139,
-      -0.0128615,
-      0.158035,
-      264406e-8,
-      0.0262598,
-      -0.0150628,
-      0.162751,
-      332923e-8,
-      0.0277875,
-      -0.0175532,
-      0.168944,
-      419773e-8,
-      0.0298472,
-      -0.0203981,
-      0.176835,
-      530034e-8,
-      0.0325444,
-      -0.023655,
-      0.186686,
-      669777e-8,
-      0.0355581,
-      -0.0272982,
-      0.196248,
-      842661e-8,
-      0.0392841,
-      -0.0314457,
-      0.207352,
-      0.0105854,
-      0.0436815,
-      -0.0361157,
-      0.219279,
-      0.0132458,
-      0.0485272,
-      -0.0412932,
-      0.230728,
-      0.0164736,
-      0.0541574,
-      -0.0470337,
-      0.242994,
-      0.0203715,
-      0.0609479,
-      -0.0535002,
-      0.257042,
-      0.0250953,
-      0.0685228,
-      -0.0605409,
-      0.27102,
-      0.0306856,
-      0.0768042,
-      -0.0680553,
-      0.28406,
-      0.037193,
-      0.0864844,
-      -0.0765011,
-      0.299186,
-      0.0449795,
-      0.0969415,
-      -0.0852674,
-      0.3132,
-      0.0538316,
-      0.108478,
-      -0.0947333,
-      0.327138,
-      0.0641149,
-      0.121705,
-      -0.10481,
-      0.342345,
-      0.0759185,
-      0.136743,
-      -0.115474,
-      0.358472,
-      0.0894116,
-      0.152986,
-      -0.126536,
-      0.374067,
-      0.104562,
-      0.170397,
-      -0.138061,
-      0.388267,
-      0.121632,
-      0.191392,
-      -0.150203,
-      0.406467,
-      0.140996,
-      0.211566,
-      -0.161751,
-      0.418641,
-      0.161696,
-      0.233567,
-      -0.173407,
-      0.430418,
-      0.184557,
-      0.257769,
-      -0.185397,
-      0.44277,
-      0.210092,
-      0.28531,
-      -0.197048,
-      0.457191,
-      0.237827,
-      0.311726,
-      -0.20784,
-      0.464712,
-      0.267253,
-      0.340537,
-      -0.218345,
-      0.472539,
-      0.299332,
-      0.372921,
-      -0.228306,
-      0.482331,
-      0.333988,
-      0.402924,
-      -0.236665,
-      0.484378,
-      0.369722,
-      0.434475,
-      -0.244097,
-      0.484717,
-      0.407836,
-      0.469736,
-      -0.250547,
-      0.487093,
-      0.448465,
-      0.505045,
-      -0.25511,
-      0.485575,
-      0.490263,
-      0.540262,
-      -0.258444,
-      0.481225,
-      0.534495,
-      0.576347,
-      -0.259903,
-      0.473481,
-      0.579451,
-      0.608656,
-      -0.259572,
-      0.4603,
-      0.625604,
-      0.646679,
-      -0.257908,
-      0.450341,
-      0.674511,
-      0.679902,
-      -0.253663,
-      0.431561,
-      0.723269,
-      0.714159,
-      -0.247419,
-      0.412684,
-      0.773263,
-      0.745345,
-      -0.239122,
-      0.389388,
-      0.824182,
-      0.778248,
-      -0.228837,
-      0.365361,
-      0.876634,
-      0.807208,
-      -0.216197,
-      0.337667,
-      0.92945,
-      0.835019,
-      -0.201772,
-      0.307197,
-      0.985261,
-      0.860261,
-      -0.185291,
-      0.274205,
-      1.04299,
-      0.877601,
-      -0.165809,
-      0.240178,
-      1.09816,
-      0.898211,
-      -0.143897,
-      0.207571,
-      1.14694,
-      0.915789,
-      -0.119513,
-      0.174904,
-      1.19008,
-      0.931831,
-      -0.0932919,
-      0.141423,
-      1.2297,
-      0.949244,
-      -0.0656528,
-      0.105603,
-      1.26553,
-      0.967527,
-      -0.0370262,
-      0.0679551,
-      1.29986,
-      0.984139,
-      -730117e-8,
-      0.0283133,
-      1.33252,
-      0.999713,
-      0.0234648,
-      -0.0121785,
-      1.36397,
-      0.0152135,
-      -245447e-11,
-      0.122795,
-      304092e-12,
-      0.0151652,
-      -615778e-10,
-      0.122399,
-      76292e-10,
-      0.0151181,
-      -245948e-9,
-      0.122023,
-      304802e-10,
-      0.0151203,
-      -553394e-9,
-      0.12203,
-      686634e-10,
-      0.015125,
-      -983841e-9,
-      0.122037,
-      122463e-9,
-      0.0151427,
-      -153774e-8,
-      0.12214,
-      192706e-9,
-      0.0151708,
-      -22103e-7,
-      0.122237,
-      281219e-9,
-      0.0152115,
-      -300741e-8,
-      0.12238,
-      390804e-9,
-      0.0152877,
-      -392494e-8,
-      0.1227,
-      526317e-9,
-      0.015412,
-      -496597e-8,
-      0.123244,
-      69443e-8,
-      0.0156201,
-      -613314e-8,
-      0.124228,
-      90547e-8,
-      0.0159658,
-      -744113e-8,
-      0.125945,
-      11732e-7,
-      0.0165674,
-      -892546e-8,
-      0.129098,
-      151888e-8,
-      0.017487,
-      -0.010627,
-      0.133865,
-      197007e-8,
-      0.018839,
-      -0.0126043,
-      0.140682,
-      25637e-7,
-      0.020554,
-      -0.0148814,
-      0.148534,
-      333637e-8,
-      0.0226727,
-      -0.0175123,
-      0.157381,
-      433738e-8,
-      0.0251879,
-      -0.0205266,
-      0.166685,
-      561664e-8,
-      0.0283635,
-      -0.0240319,
-      0.177796,
-      725563e-8,
-      0.0318694,
-      -0.0279432,
-      0.188251,
-      928811e-8,
-      0.0361044,
-      -0.0324313,
-      0.200038,
-      0.011835,
-      0.0406656,
-      -0.0373527,
-      0.210685,
-      0.0149146,
-      0.0463846,
-      -0.0430132,
-      0.224182,
-      0.0187254,
-      0.0525696,
-      -0.0491013,
-      0.23634,
-      0.0232283,
-      0.0598083,
-      -0.0559175,
-      0.250013,
-      0.0286521,
-      0.0679437,
-      -0.0633657,
-      0.263981,
-      0.0350634,
-      0.0771181,
-      -0.0714602,
-      0.278072,
-      0.0425882,
-      0.0881273,
-      -0.0803502,
-      0.29511,
-      0.0514487,
-      0.0996628,
-      -0.0896903,
-      0.309976,
-      0.0615766,
-      0.112702,
-      -0.099644,
-      0.325611,
-      0.0732139,
-      0.126488,
-      -0.109829,
-      0.339321,
-      0.0862324,
-      0.142625,
-      -0.120859,
-      0.35574,
-      0.101275,
-      0.15953,
-      -0.131956,
-      0.369845,
-      0.117892,
-      0.176991,
-      -0.143145,
-      0.38146,
-      0.136205,
-      0.199715,
-      -0.155292,
-      0.40052,
-      0.157252,
-      0.220787,
-      -0.167066,
-      0.412055,
-      0.179966,
-      0.243697,
-      -0.178396,
-      0.423133,
-      0.204418,
-      0.272106,
-      -0.190433,
-      0.439524,
-      0.232141,
-      0.297637,
-      -0.201265,
-      0.447041,
-      0.261109,
-      0.325273,
-      -0.211834,
-      0.454488,
-      0.292627,
-      0.357219,
-      -0.221889,
-      0.465004,
-      0.326669,
-      0.387362,
-      -0.230729,
-      0.468527,
-      0.362426,
-      0.423131,
-      -0.23924,
-      0.475836,
-      0.401533,
-      0.45543,
-      -0.246067,
-      0.475017,
-      0.441902,
-      0.493393,
-      -0.251557,
-      0.478017,
-      0.484239,
-      0.526253,
-      -0.255571,
-      0.4709,
-      0.528586,
-      0.560554,
-      -0.257752,
-      0.463167,
-      0.574346,
-      0.599306,
-      -0.258076,
-      0.456452,
-      0.621655,
-      0.634541,
-      -0.256471,
-      0.443725,
-      0.670492,
-      0.668907,
-      -0.253283,
-      0.428719,
-      0.721943,
-      0.705619,
-      -0.247562,
-      0.411348,
-      0.772477,
-      0.739034,
-      -0.240626,
-      0.388939,
-      0.8264,
-      0.771408,
-      -0.231493,
-      0.36425,
-      0.881702,
-      0.803312,
-      -0.220125,
-      0.337321,
-      0.9385,
-      0.828457,
-      -0.206645,
-      0.305364,
-      0.997437,
-      0.854819,
-      -0.190664,
-      0.273715,
-      1.05693,
-      0.878666,
-      -0.171429,
-      0.242218,
-      1.11251,
-      0.898404,
-      -0.149235,
-      0.209556,
-      1.16398,
-      0.917416,
-      -0.12435,
-      0.176863,
-      1.21014,
-      0.933133,
-      -0.0972703,
-      0.142775,
-      1.25178,
-      0.95066,
-      -0.0683607,
-      0.106735,
-      1.29028,
-      0.968589,
-      -0.0378724,
-      0.0681609,
-      1.32703,
-      0.984776,
-      -605712e-8,
-      0.0273966,
-      1.36158,
-      0.99994,
-      0.0263276,
-      -0.0138124,
-      1.3943,
-      867437e-8,
-      -186005e-11,
-      0.0928979,
-      173682e-12,
-      864003e-8,
-      -466389e-10,
-      0.0925237,
-      435505e-11,
-      864593e-8,
-      -186594e-9,
-      0.0925806,
-      174322e-10,
-      864095e-8,
-      -419639e-9,
-      0.0924903,
-      392862e-10,
-      863851e-8,
-      -746272e-9,
-      0.0924589,
-      702598e-10,
-      868531e-8,
-      -116456e-8,
-      0.0929,
-      111188e-9,
-      869667e-8,
-      -167711e-8,
-      0.0928529,
-      163867e-9,
-      874332e-8,
-      -228051e-8,
-      0.0930914,
-      23104e-8,
-      882709e-8,
-      -297864e-8,
-      0.0935679,
-      31741e-8,
-      898874e-8,
-      -377557e-8,
-      0.0946165,
-      430186e-9,
-      929346e-8,
-      -469247e-8,
-      0.0967406,
-      580383e-9,
-      978271e-8,
-      -575491e-8,
-      0.100084,
-      783529e-9,
-      0.0105746,
-      -701514e-8,
-      0.105447,
-      106304e-8,
-      0.0116949,
-      -851797e-8,
-      0.112494,
-      144685e-8,
-      0.0130419,
-      -0.0102757,
-      0.119876,
-      196439e-8,
-      0.0148375,
-      -0.012381,
-      0.129034,
-      266433e-8,
-      0.0168725,
-      -0.01482,
-      0.137812,
-      358364e-8,
-      0.0193689,
-      -0.0176563,
-      0.147696,
-      478132e-8,
-      0.0222691,
-      -0.0209211,
-      0.157795,
-      631721e-8,
-      0.0256891,
-      -0.0246655,
-      0.168431,
-      826346e-8,
-      0.0294686,
-      -0.0288597,
-      0.178587,
-      0.0106714,
-      0.0340412,
-      -0.0336441,
-      0.190251,
-      0.0136629,
-      0.0393918,
-      -0.039033,
-      0.202999,
-      0.0173272,
-      0.0453947,
-      -0.0450087,
-      0.215655,
-      0.0217448,
-      0.0521936,
-      -0.0515461,
-      0.228686,
-      0.0269941,
-      0.0600279,
-      -0.058817,
-      0.242838,
-      0.033272,
-      0.0692398,
-      -0.0667228,
-      0.258145,
-      0.0406457,
-      0.0793832,
-      -0.0752401,
-      0.273565,
-      0.0492239,
-      0.0902297,
-      -0.0841851,
-      0.287735,
-      0.0590105,
-      0.102014,
-      -0.0936479,
-      0.301161,
-      0.0702021,
-      0.116054,
-      -0.103967,
-      0.317438,
-      0.0832001,
-      0.13191,
-      -0.114622,
-      0.334166,
-      0.0977951,
-      0.148239,
-      -0.125452,
-      0.348192,
-      0.113985,
-      0.165809,
-      -0.136453,
-      0.361094,
-      0.131928,
-      0.184616,
-      -0.147648,
-      0.373534,
-      0.151811,
-      0.207491,
-      -0.159607,
-      0.39101,
-      0.174476,
-      0.230106,
-      -0.171119,
-      0.402504,
-      0.198798,
-      0.257036,
-      -0.182906,
-      0.418032,
-      0.225796,
-      0.281172,
-      -0.193605,
-      0.425468,
-      0.254027,
-      0.312034,
-      -0.204771,
-      0.440379,
-      0.285713,
-      0.340402,
-      -0.214988,
-      0.445406,
-      0.319196,
-      0.370231,
-      -0.224711,
-      0.44968,
-      0.35537,
-      0.407105,
-      -0.233516,
-      0.460747,
-      0.393838,
-      0.439037,
-      -0.240801,
-      0.460624,
-      0.433747,
-      0.47781,
-      -0.24762,
-      0.465957,
-      0.477234,
-      0.510655,
-      -0.251823,
-      0.460054,
-      0.52044,
-      0.550584,
-      -0.255552,
-      0.459172,
-      0.567853,
-      0.585872,
-      -0.257036,
-      0.450311,
-      0.615943,
-      0.620466,
-      -0.257535,
-      0.437763,
-      0.667693,
-      0.660496,
-      -0.255248,
-      0.426639,
-      0.718988,
-      0.695578,
-      -0.251141,
-      0.409185,
-      0.772503,
-      0.732176,
-      -0.244718,
-      0.39015,
-      0.827023,
-      0.760782,
-      -0.236782,
-      0.362594,
-      0.885651,
-      0.79422,
-      -0.225923,
-      0.33711,
-      0.943756,
-      0.824521,
-      -0.213855,
-      0.308272,
-      1.00874,
-      0.854964,
-      -0.197723,
-      0.278529,
-      1.06764,
-      0.878065,
-      -0.179209,
-      0.246208,
-      1.12836,
-      0.899834,
-      -0.157569,
-      0.21329,
-      1.18318,
-      0.918815,
-      -0.133206,
-      0.181038,
-      1.23161,
-      0.934934,
-      -0.106545,
-      0.146993,
-      1.27644,
-      0.952115,
-      -0.0780574,
-      0.111175,
-      1.31842,
-      0.96906,
-      -0.0478279,
-      0.0728553,
-      1.35839,
-      0.985178,
-      -0.0160014,
-      0.032579,
-      1.39697,
-      1.00039,
-      0.0173126,
-      -95256e-7,
-      1.43312,
-      384146e-8,
-      -124311e-11,
-      0.0613583,
-      778271e-13,
-      390023e-8,
-      -314043e-10,
-      0.0622919,
-      196626e-11,
-      389971e-8,
-      -125622e-9,
-      0.0622632,
-      787379e-11,
-      389491e-8,
-      -282352e-9,
-      0.0620659,
-      1778e-8,
-      391618e-8,
-      -502512e-9,
-      0.0624687,
-      320918e-10,
-      392662e-8,
-      -784458e-9,
-      0.0625113,
-      515573e-10,
-      396053e-8,
-      -112907e-8,
-      0.0628175,
-      778668e-10,
-      401911e-8,
-      -153821e-8,
-      0.0633286,
-      113811e-9,
-      414994e-8,
-      -20208e-7,
-      0.0646443,
-      16445e-8,
-      441223e-8,
-      -260007e-8,
-      0.0673886,
-      237734e-9,
-      484427e-8,
-      -33097e-7,
-      0.0716528,
-      345929e-9,
-      549109e-8,
-      -418966e-8,
-      0.0774998,
-      505987e-9,
-      636293e-8,
-      -527331e-8,
-      0.0844758,
-      739208e-9,
-      746566e-8,
-      -660428e-8,
-      0.0921325,
-      107347e-8,
-      876625e-8,
-      -818826e-8,
-      0.0997067,
-      153691e-8,
-      0.0103125,
-      -0.0100811,
-      0.107433,
-      217153e-8,
-      0.0123309,
-      -0.0123643,
-      0.117088,
-      303427e-8,
-      0.0146274,
-      -0.0150007,
-      0.126438,
-      416018e-8,
-      0.0172295,
-      -0.0180531,
-      0.135672,
-      561513e-8,
-      0.0204248,
-      -0.0215962,
-      0.146244,
-      7478e-6,
-      0.0241597,
-      -0.0256234,
-      0.157481,
-      981046e-8,
-      0.0284693,
-      -0.0302209,
-      0.169125,
-      0.0127148,
-      0.033445,
-      -0.0353333,
-      0.181659,
-      0.0162453,
-      0.0391251,
-      -0.0410845,
-      0.1944,
-      0.0205417,
-      0.0454721,
-      -0.0473451,
-      0.207082,
-      0.0256333,
-      0.0530983,
-      -0.0542858,
-      0.221656,
-      0.0317036,
-      0.0615356,
-      -0.0618384,
-      0.236036,
-      0.0388319,
-      0.0703363,
-      -0.0697631,
-      0.248398,
-      0.046974,
-      0.0810391,
-      -0.0784757,
-      0.263611,
-      0.0565246,
-      0.0920144,
-      -0.0873488,
-      0.275857,
-      0.0671724,
-      0.105584,
-      -0.0973652,
-      0.292555,
-      0.0798105,
-      0.119506,
-      -0.107271,
-      0.306333,
-      0.0935945,
-      0.134434,
-      -0.117608,
-      0.318888,
-      0.109106,
-      0.153399,
-      -0.128938,
-      0.337552,
-      0.127074,
-      0.171258,
-      -0.139944,
-      0.349955,
-      0.14643,
-      0.191059,
-      -0.151288,
-      0.361545,
-      0.168,
-      0.215069,
-      -0.163018,
-      0.378421,
-      0.192082,
-      0.237838,
-      -0.174226,
-      0.38879,
-      0.217838,
-      0.266965,
-      -0.186063,
-      0.405857,
-      0.246931,
-      0.292827,
-      -0.196909,
-      0.414146,
-      0.277505,
-      0.324352,
-      -0.207473,
-      0.426955,
-      0.310711,
-      0.354427,
-      -0.217713,
-      0.433429,
-      0.346794,
-      0.389854,
-      -0.227183,
-      0.443966,
-      0.385237,
-      0.420749,
-      -0.235131,
-      0.44471,
-      0.424955,
-      0.459597,
-      -0.242786,
-      0.451729,
-      0.468446,
-      0.495316,
-      -0.248767,
-      0.45072,
-      0.513422,
-      0.534903,
-      -0.253351,
-      0.450924,
-      0.560618,
-      0.572369,
-      -0.256277,
-      0.445266,
-      0.609677,
-      0.612383,
-      -0.2576,
-      0.438798,
-      0.660995,
-      0.644037,
-      -0.256931,
-      0.421693,
-      0.713807,
-      0.686749,
-      -0.254036,
-      0.4109,
-      0.767616,
-      0.719814,
-      -0.249785,
-      0.390151,
-      0.82533,
-      0.754719,
-      -0.244283,
-      0.367847,
-      0.888311,
-      0.792022,
-      -0.235076,
-      0.345013,
-      0.948177,
-      0.822404,
-      -0.225061,
-      0.316193,
-      1.01661,
-      0.853084,
-      -0.211113,
-      0.287013,
-      1.08075,
-      0.879871,
-      -0.19449,
-      0.255424,
-      1.14501,
-      0.901655,
-      -0.174023,
-      0.222879,
-      1.20203,
-      0.919957,
-      -0.1509,
-      0.18989,
-      1.25698,
-      0.938412,
-      -0.124923,
-      0.15606,
-      1.30588,
-      0.953471,
-      -0.0968139,
-      0.120512,
-      1.3529,
-      0.970451,
-      -0.066734,
-      0.0828515,
-      1.3986,
-      0.985522,
-      -0.034734,
-      0.0424458,
-      1.44148,
-      1.00099,
-      -102222e-8,
-      678929e-9,
-      1.48398,
-      965494e-9,
-      -627338e-12,
-      0.0306409,
-      197672e-13,
-      99168e-8,
-      -158573e-10,
-      0.0314638,
-      499803e-12,
-      991068e-9,
-      -634012e-10,
-      0.031363,
-      200682e-11,
-      974567e-9,
-      -14144e-8,
-      0.03036,
-      457312e-11,
-      998079e-9,
-      -252812e-9,
-      0.031496,
-      860131e-11,
-      102243e-8,
-      -396506e-9,
-      0.0319955,
-      148288e-10,
-      107877e-8,
-      -577593e-9,
-      0.0331376,
-      249141e-10,
-      121622e-8,
-      -816816e-9,
-      0.0359396,
-      423011e-10,
-      14455e-7,
-      -113761e-8,
-      0.0399652,
-      724613e-10,
-      178791e-8,
-      -156959e-8,
-      0.0450556,
-      123929e-9,
-      225668e-8,
-      -214064e-8,
-      0.0508025,
-      208531e-9,
-      285627e-8,
-      -287655e-8,
-      0.0568443,
-      341969e-9,
-      35991e-7,
-      -380271e-8,
-      0.0630892,
-      544158e-9,
-      455524e-8,
-      -496264e-8,
-      0.0702204,
-      842423e-9,
-      569143e-8,
-      -63793e-7,
-      0.0773426,
-      126704e-8,
-      716928e-8,
-      -813531e-8,
-      0.0860839,
-      186642e-8,
-      885307e-8,
-      -0.0101946,
-      0.0944079,
-      267014e-8,
-      0.0109316,
-      -0.0126386,
-      0.103951,
-      374033e-8,
-      0.0133704,
-      -0.0154876,
-      0.113786,
-      51304e-7,
-      0.0161525,
-      -0.0187317,
-      0.123477,
-      688858e-8,
-      0.0194267,
-      -0.0224652,
-      0.133986,
-      910557e-8,
-      0.0230967,
-      -0.0265976,
-      0.143979,
-      0.0118074,
-      0.0273627,
-      -0.0312848,
-      0.154645,
-      0.0151266,
-      0.0323898,
-      -0.0365949,
-      0.166765,
-      0.0191791,
-      0.0379225,
-      -0.0422914,
-      0.177932,
-      0.0239236,
-      0.0447501,
-      -0.0487469,
-      0.19167,
-      0.0296568,
-      0.0519391,
-      -0.0556398,
-      0.203224,
-      0.0362924,
-      0.0599464,
-      -0.0631646,
-      0.215652,
-      0.0440585,
-      0.0702427,
-      -0.0714308,
-      0.232089,
-      0.0531619,
-      0.0806902,
-      -0.0800605,
-      0.245258,
-      0.0634564,
-      0.0923194,
-      -0.0892815,
-      0.258609,
-      0.0752481,
-      0.106938,
-      -0.09931,
-      0.276654,
-      0.0888914,
-      0.121238,
-      -0.109575,
-      0.289847,
-      0.104055,
-      0.138817,
-      -0.120461,
-      0.307566,
-      0.121266,
-      0.15595,
-      -0.131209,
-      0.320117,
-      0.139944,
-      0.178418,
-      -0.143049,
-      0.339677,
-      0.161591,
-      0.197875,
-      -0.154074,
-      0.349886,
-      0.184303,
-      0.224368,
-      -0.166307,
-      0.369352,
-      0.210669,
-      0.252213,
-      -0.178051,
-      0.386242,
-      0.238895,
-      0.277321,
-      -0.189335,
-      0.395294,
-      0.269182,
-      0.310332,
-      -0.200683,
-      0.412148,
-      0.302508,
-      0.338809,
-      -0.210856,
-      0.418266,
-      0.337264,
-      0.372678,
-      -0.220655,
-      0.428723,
-      0.374881,
-      0.405632,
-      -0.230053,
-      0.433887,
-      0.415656,
-      0.442293,
-      -0.237993,
-      0.439911,
-      0.457982,
-      0.477256,
-      -0.244897,
-      0.440175,
-      0.502831,
-      0.515592,
-      -0.250657,
-      0.441079,
-      0.550277,
-      0.550969,
-      -0.255459,
-      0.435219,
-      0.601102,
-      0.592883,
-      -0.257696,
-      0.432882,
-      0.651785,
-      0.629092,
-      -0.259894,
-      0.421054,
-      0.708961,
-      0.672033,
-      -0.258592,
-      0.41177,
-      0.763806,
-      0.709147,
-      -0.256525,
-      0.395267,
-      0.824249,
-      0.745367,
-      -0.254677,
-      0.375013,
-      0.8951,
-      0.784715,
-      -0.247892,
-      0.353906,
-      0.959317,
-      0.818107,
-      -0.240162,
-      0.327801,
-      1.03153,
-      0.847895,
-      -0.229741,
-      0.298821,
-      1.10601,
-      0.879603,
-      -0.213084,
-      0.269115,
-      1.164,
-      0.902605,
-      -0.195242,
-      0.236606,
-      1.22854,
-      0.922788,
-      -0.174505,
-      0.203442,
-      1.29017,
-      0.944831,
-      -0.150169,
-      0.169594,
-      1.34157,
-      0.959656,
-      -0.124099,
-      0.135909,
-      1.3956,
-      0.972399,
-      -0.0960626,
-      0.0990563,
-      1.45128,
-      0.986549,
-      -0.0657097,
-      0.0602348,
-      1.50312,
-      1.00013,
-      -0.0333558,
-      0.0186694,
-      1.55364,
-      619747e-11,
-      -1e-7,
-      778326e-8,
-      796756e-16,
-      237499e-13,
-      -999999e-13,
-      282592e-10,
-      114596e-15,
-      100292e-11,
-      -166369e-11,
-      250354e-9,
-      677492e-14,
-      350752e-11,
-      -637769e-11,
-      357289e-9,
-      631655e-13,
-      826445e-11,
-      -174689e-10,
-      516179e-9,
-      31851e-11,
-      242481e-10,
-      -450868e-10,
-      10223e-7,
-      130577e-11,
-      455631e-10,
-      -89044e-9,
-      144302e-8,
-      374587e-11,
-      971222e-10,
-      -178311e-9,
-      241912e-8,
-      102584e-10,
-      171403e-9,
-      -313976e-9,
-      354938e-8,
-      236481e-10,
-      292747e-9,
-      -520026e-9,
-      513765e-8,
-      496014e-10,
-      789827e-9,
-      -118187e-8,
-      0.0238621,
-      139056e-9,
-      114093e-8,
-      -171827e-8,
-      0.0286691,
-      244093e-9,
-      176119e-8,
-      -249667e-8,
-      0.0368565,
-      420623e-9,
-      22233e-7,
-      -333742e-8,
-      0.0400469,
-      65673e-8,
-      343382e-8,
-      -481976e-8,
-      0.0535751,
-      109323e-8,
-      427602e-8,
-      -600755e-8,
-      0.057099,
-      155268e-8,
-      461435e-8,
-      -737637e-8,
-      0.0551084,
-      215031e-8,
-      695698e-8,
-      -971401e-8,
-      0.0715767,
-      316529e-8,
-      867619e-8,
-      -0.0120943,
-      0.0793314,
-      436995e-8,
-      0.0106694,
-      -0.0148202,
-      0.0869391,
-      58959e-7,
-      0.0140351,
-      -0.0183501,
-      0.101572,
-      798757e-8,
-      0.0168939,
-      -0.022006,
-      0.11018,
-      0.0104233,
-      0.020197,
-      -0.0261568,
-      0.119041,
-      0.0134167,
-      0.0254702,
-      -0.0312778,
-      0.135404,
-      0.0173009,
-      0.0298384,
-      -0.0362469,
-      0.1437,
-      0.0215428,
-      0.035159,
-      -0.042237,
-      0.15512,
-      0.0268882,
-      0.0427685,
-      -0.0488711,
-      0.17128,
-      0.033235,
-      0.0494848,
-      -0.0557997,
-      0.181813,
-      0.0404443,
-      0.0592394,
-      -0.0635578,
-      0.198745,
-      0.0490043,
-      0.0681463,
-      -0.071838,
-      0.210497,
-      0.0588239,
-      0.0804753,
-      -0.0809297,
-      0.228864,
-      0.0702835,
-      0.0942205,
-      -0.0906488,
-      0.247008,
-      0.0834012,
-      0.106777,
-      -0.100216,
-      0.258812,
-      0.0975952,
-      0.124471,
-      -0.110827,
-      0.278617,
-      0.114162,
-      0.138389,
-      -0.121193,
-      0.287049,
-      0.131983,
-      0.159543,
-      -0.13253,
-      0.307151,
-      0.152541,
-      0.176432,
-      -0.143611,
-      0.31564,
-      0.174673,
-      0.201723,
-      -0.15548,
-      0.33538,
-      0.199842,
-      0.229721,
-      -0.167166,
-      0.355256,
-      0.227097,
-      0.250206,
-      -0.178238,
-      0.360047,
-      0.256014,
-      0.282118,
-      -0.189905,
-      0.378761,
-      0.28855,
-      0.312821,
-      -0.201033,
-      0.39181,
-      0.323348,
-      0.341482,
-      -0.211584,
-      0.397716,
-      0.360564,
-      0.377368,
-      -0.221314,
-      0.410141,
-      0.400004,
-      0.418229,
-      -0.230474,
-      0.423485,
-      0.442371,
-      0.444881,
-      -0.239443,
-      0.418874,
-      0.488796,
-      0.488899,
-      -0.245987,
-      0.427545,
-      0.535012,
-      0.520317,
-      -0.253948,
-      0.422147,
-      0.589678,
-      0.568566,
-      -0.256616,
-      0.42719,
-      0.637683,
-      0.599607,
-      -0.26376,
-      0.415114,
-      0.703363,
-      0.64222,
-      -0.268687,
-      0.408715,
-      0.771363,
-      0.685698,
-      -0.2694,
-      0.399722,
-      0.83574,
-      0.732327,
-      -0.266642,
-      0.388651,
-      0.897764,
-      0.769873,
-      -0.267712,
-      0.369198,
-      0.983312,
-      0.806733,
-      -0.263479,
-      0.346802,
-      1.06222,
-      0.843466,
-      -0.254575,
-      0.321368,
-      1.13477,
-      0.873008,
-      -0.242749,
-      0.29211,
-      1.20712,
-      0.908438,
-      -0.22725,
-      0.262143,
-      1.27465,
-      0.936321,
-      -0.207621,
-      0.228876,
-      1.33203,
-      0.950353,
-      -0.187932,
-      0.19484,
-      1.40439,
-      0.96442,
-      -0.165154,
-      0.163178,
-      1.4732,
-      0.979856,
-      -0.139302,
-      0.127531,
-      1.53574,
-      0.982561,
-      -0.11134,
-      0.0903457,
-      1.59982,
-      0.996389,
-      -0.0808124,
-      0.0489007,
-      1.6577
-    ];
-    const LTC_MAT_2 = [
-      1,
-      0,
-      0,
-      0,
-      1,
-      791421e-36,
-      0,
-      0,
-      1,
-      104392e-29,
-      0,
-      0,
-      1,
-      349405e-26,
-      0,
-      0,
-      1,
-      109923e-23,
-      0,
-      0,
-      1,
-      947414e-22,
-      0,
-      0,
-      1,
-      359627e-20,
-      0,
-      0,
-      1,
-      772053e-19,
-      0,
-      0,
-      1,
-      108799e-17,
-      0,
-      0,
-      1,
-      110655e-16,
-      0,
-      0,
-      1,
-      865818e-16,
-      0,
-      0,
-      0.999998,
-      545037e-15,
-      0,
-      0,
-      0.999994,
-      285095e-14,
-      0,
-      0,
-      0.999989,
-      126931e-13,
-      0,
-      0,
-      0.999973,
-      489938e-13,
-      0,
-      0,
-      0.999947,
-      166347e-12,
-      0,
-      0,
-      0.999894,
-      502694e-12,
-      0,
-      0,
-      0.999798,
-      136532e-11,
-      0,
-      0,
-      0.999617,
-      335898e-11,
-      0,
-      0,
-      0.999234,
-      752126e-11,
-      0,
-      0,
-      0.998258,
-      152586e-10,
-      0,
-      0,
-      0.99504,
-      266207e-10,
-      0,
-      0,
-      0.980816,
-      236802e-10,
-      0,
-      0,
-      0.967553,
-      207684e-11,
-      0,
-      0,
-      0.966877,
-      403733e-11,
-      0,
-      0,
-      0.965752,
-      741174e-11,
-      0,
-      0,
-      0.96382,
-      127746e-10,
-      0,
-      0,
-      0.960306,
-      202792e-10,
-      0,
-      0,
-      0.953619,
-      280232e-10,
-      0,
-      0,
-      0.941103,
-      278816e-10,
-      0,
-      0,
-      0.926619,
-      160221e-10,
-      0,
-      0,
-      0.920983,
-      235164e-10,
-      0,
-      0,
-      0.912293,
-      311924e-10,
-      0,
-      0.0158731,
-      0.899277,
-      348118e-10,
-      0,
-      0.0476191,
-      0.880884,
-      26041e-9,
-      0,
-      0.0793651,
-      0.870399,
-      338726e-10,
-      0,
-      0.111111,
-      0.856138,
-      392906e-10,
-      0,
-      0.142857,
-      0.837436,
-      372874e-10,
-      0,
-      0.174603,
-      0.820973,
-      392558e-10,
-      0,
-      0.206349,
-      0.803583,
-      434658e-10,
-      0,
-      0.238095,
-      0.782168,
-      40256e-9,
-      0,
-      0.269841,
-      0.764107,
-      448159e-10,
-      0,
-      0.301587,
-      0.743092,
-      457627e-10,
-      0,
-      0.333333,
-      0.721626,
-      455314e-10,
-      0,
-      0.365079,
-      0.700375,
-      477335e-10,
-      0,
-      0.396825,
-      0.677334,
-      461072e-10,
-      0,
-      0.428571,
-      0.655702,
-      484393e-10,
-      0,
-      0.460317,
-      0.632059,
-      464583e-10,
-      0,
-      0.492064,
-      0.610125,
-      483923e-10,
-      0,
-      0.52381,
-      0.58653,
-      464342e-10,
-      0,
-      0.555556,
-      0.564508,
-      477033e-10,
-      0,
-      0.587302,
-      0.541405,
-      459263e-10,
-      0,
-      0.619048,
-      0.519556,
-      46412e-9,
-      0,
-      0.650794,
-      0.497292,
-      448913e-10,
-      0,
-      0.68254,
-      0.475898,
-      445789e-10,
-      0,
-      0.714286,
-      0.454722,
-      433496e-10,
-      0,
-      0.746032,
-      0.434042,
-      423054e-10,
-      0,
-      0.777778,
-      0.414126,
-      413737e-10,
-      0,
-      0.809524,
-      0.394387,
-      397265e-10,
-      0,
-      0.84127,
-      0.375841,
-      390709e-10,
-      0,
-      0.873016,
-      0.357219,
-      369938e-10,
-      0,
-      0.904762,
-      0.340084,
-      365618e-10,
-      0,
-      0.936508,
-      0.322714,
-      342533e-10,
-      0,
-      0.968254,
-      0.306974,
-      339596e-10,
-      0,
-      1,
-      1,
-      101524e-23,
-      0,
-      0,
-      1,
-      10292e-22,
-      0,
-      0,
-      1,
-      130908e-23,
-      0,
-      0,
-      1,
-      473331e-23,
-      0,
-      0,
-      1,
-      625319e-22,
-      0,
-      0,
-      1,
-      107932e-20,
-      0,
-      0,
-      1,
-      163779e-19,
-      0,
-      0,
-      1,
-      203198e-18,
-      0,
-      0,
-      1,
-      204717e-17,
-      0,
-      0,
-      0.999999,
-      168995e-16,
-      0,
-      0,
-      0.999998,
-      115855e-15,
-      0,
-      0,
-      0.999996,
-      66947e-14,
-      0,
-      0,
-      0.999991,
-      330863e-14,
-      0,
-      0,
-      0.999983,
-      141737e-13,
-      0,
-      0,
-      0.999968,
-      532626e-13,
-      0,
-      0,
-      0.99994,
-      177431e-12,
-      0,
-      0,
-      0.999891,
-      528835e-12,
-      0,
-      0,
-      0.999797,
-      142169e-11,
-      0,
-      0,
-      0.999617,
-      347057e-11,
-      0,
-      0,
-      0.999227,
-      77231e-10,
-      0,
-      0,
-      0.998239,
-      155753e-10,
-      0,
-      0,
-      0.994937,
-      268495e-10,
-      0,
-      0,
-      0.980225,
-      213742e-10,
-      0,
-      0,
-      0.967549,
-      21631e-10,
-      0,
-      0,
-      0.966865,
-      417989e-11,
-      0,
-      0,
-      0.965739,
-      763341e-11,
-      0,
-      0,
-      0.963794,
-      130892e-10,
-      0,
-      0,
-      0.960244,
-      206456e-10,
-      0,
-      0,
-      0.953495,
-      282016e-10,
-      0,
-      148105e-9,
-      0.940876,
-      271581e-10,
-      0,
-      2454e-6,
-      0.926569,
-      164159e-10,
-      0,
-      867491e-8,
-      0.920905,
-      239521e-10,
-      0,
-      0.01956,
-      0.912169,
-      315127e-10,
-      0,
-      0.035433,
-      0.899095,
-      346626e-10,
-      0,
-      0.056294,
-      0.882209,
-      290223e-10,
-      0,
-      0.0818191,
-      0.870272,
-      342992e-10,
-      0,
-      0.111259,
-      0.855977,
-      394164e-10,
-      0,
-      0.142857,
-      0.837431,
-      372343e-10,
-      0,
-      0.174603,
-      0.820826,
-      396691e-10,
-      0,
-      0.206349,
-      0.803408,
-      435395e-10,
-      0,
-      0.238095,
-      0.782838,
-      419579e-10,
-      0,
-      0.269841,
-      0.763941,
-      450953e-10,
-      0,
-      0.301587,
-      0.742904,
-      455847e-10,
-      0,
-      0.333333,
-      0.721463,
-      458833e-10,
-      0,
-      0.365079,
-      0.700197,
-      477159e-10,
-      0,
-      0.396825,
-      0.677501,
-      470641e-10,
-      0,
-      0.428571,
-      0.655527,
-      484732e-10,
-      0,
-      0.460317,
-      0.6324,
-      476834e-10,
-      0,
-      0.492064,
-      0.609964,
-      484213e-10,
-      0,
-      0.52381,
-      0.586839,
-      475541e-10,
-      0,
-      0.555556,
-      0.564353,
-      476951e-10,
-      0,
-      0.587302,
-      0.541589,
-      467611e-10,
-      0,
-      0.619048,
-      0.519413,
-      463493e-10,
-      0,
-      0.650794,
-      0.497337,
-      453994e-10,
-      0,
-      0.68254,
-      0.475797,
-      445308e-10,
-      0,
-      0.714286,
-      0.454659,
-      435787e-10,
-      0,
-      0.746032,
-      0.434065,
-      424839e-10,
-      0,
-      0.777778,
-      0.414018,
-      41436e-9,
-      0,
-      0.809524,
-      0.39455,
-      401902e-10,
-      0,
-      0.84127,
-      0.375742,
-      390813e-10,
-      0,
-      0.873016,
-      0.357501,
-      377116e-10,
-      0,
-      0.904762,
-      0.339996,
-      36535e-9,
-      0,
-      0.936508,
-      0.323069,
-      351265e-10,
-      0,
-      0.968254,
-      0.306897,
-      339112e-10,
-      0,
-      1,
-      1,
-      10396e-19,
-      0,
-      0,
-      1,
-      104326e-20,
-      0,
-      0,
-      1,
-      110153e-20,
-      0,
-      0,
-      1,
-      144668e-20,
-      0,
-      0,
-      1,
-      34528e-19,
-      0,
-      0,
-      1,
-      175958e-19,
-      0,
-      0,
-      1,
-      12627e-17,
-      0,
-      0,
-      1,
-      936074e-18,
-      0,
-      0,
-      1,
-      645742e-17,
-      0,
-      0,
-      0.999998,
-      401228e-16,
-      0,
-      0,
-      0.999997,
-      222338e-15,
-      0,
-      0,
-      0.999995,
-      10967e-13,
-      0,
-      0,
-      0.999991,
-      482132e-14,
-      0,
-      0,
-      0.999981,
-      189434e-13,
-      0,
-      0,
-      0.999967,
-      667716e-13,
-      0,
-      0,
-      0.999938,
-      212066e-12,
-      0,
-      0,
-      0.999886,
-      60977e-11,
-      0,
-      0,
-      0.999792,
-      159504e-11,
-      0,
-      0,
-      0.999608,
-      381191e-11,
-      0,
-      0,
-      0.999209,
-      833727e-11,
-      0,
-      0,
-      0.998179,
-      165288e-10,
-      0,
-      0,
-      0.994605,
-      274387e-10,
-      0,
-      0,
-      0.979468,
-      167316e-10,
-      0,
-      0,
-      0.967529,
-      242877e-11,
-      0,
-      0,
-      0.966836,
-      461696e-11,
-      0,
-      0,
-      0.96569,
-      830977e-11,
-      0,
-      0,
-      0.963706,
-      140427e-10,
-      0,
-      244659e-11,
-      0.960063,
-      217353e-10,
-      0,
-      760774e-9,
-      0.953113,
-      286606e-10,
-      0,
-      367261e-8,
-      0.940192,
-      247691e-10,
-      0,
-      940263e-8,
-      0.927731,
-      195814e-10,
-      0,
-      0.018333,
-      0.920669,
-      252531e-10,
-      0,
-      0.0306825,
-      0.911799,
-      324277e-10,
-      0,
-      0.0465556,
-      0.89857,
-      340982e-10,
-      0,
-      0.0659521,
-      0.883283,
-      319622e-10,
-      0,
-      0.0887677,
-      0.86989,
-      35548e-9,
-      0,
-      0.114784,
-      0.855483,
-      397143e-10,
-      0,
-      0.143618,
-      0.837987,
-      391665e-10,
-      0,
-      0.174606,
-      0.820546,
-      411306e-10,
-      0,
-      0.206349,
-      0.802878,
-      436753e-10,
-      0,
-      0.238095,
-      0.783402,
-      444e-7,
-      0,
-      0.269841,
-      0.763439,
-      458726e-10,
-      0,
-      0.301587,
-      0.742925,
-      467097e-10,
-      0,
-      0.333333,
-      0.721633,
-      478887e-10,
-      0,
-      0.365079,
-      0.69985,
-      481251e-10,
-      0,
-      0.396825,
-      0.67783,
-      491811e-10,
-      0,
-      0.428571,
-      0.655126,
-      488199e-10,
-      0,
-      0.460318,
-      0.632697,
-      496025e-10,
-      0,
-      0.492064,
-      0.609613,
-      48829e-9,
-      0,
-      0.52381,
-      0.587098,
-      492754e-10,
-      0,
-      0.555556,
-      0.564119,
-      482625e-10,
-      0,
-      0.587302,
-      0.541813,
-      482807e-10,
-      0,
-      0.619048,
-      0.519342,
-      471552e-10,
-      0,
-      0.650794,
-      0.497514,
-      466765e-10,
-      0,
-      0.68254,
-      0.475879,
-      455582e-10,
-      0,
-      0.714286,
-      0.454789,
-      446007e-10,
-      0,
-      0.746032,
-      0.434217,
-      435382e-10,
-      0,
-      0.777778,
-      0.414086,
-      421753e-10,
-      0,
-      0.809524,
-      0.394744,
-      412093e-10,
-      0,
-      0.84127,
-      0.375782,
-      396634e-10,
-      0,
-      0.873016,
-      0.357707,
-      386419e-10,
-      0,
-      0.904762,
-      0.340038,
-      370345e-10,
-      0,
-      0.936508,
-      0.323284,
-      359725e-10,
-      0,
-      0.968254,
-      0.306954,
-      3436e-8,
-      0,
-      1,
-      1,
-      599567e-19,
-      0,
-      0,
-      1,
-      600497e-19,
-      0,
-      0,
-      1,
-      614839e-19,
-      0,
-      0,
-      1,
-      686641e-19,
-      0,
-      0,
-      1,
-      972658e-19,
-      0,
-      0,
-      1,
-      221271e-18,
-      0,
-      0,
-      1,
-      833195e-18,
-      0,
-      0,
-      1,
-      403601e-17,
-      0,
-      0,
-      0.999999,
-      206001e-16,
-      0,
-      0,
-      0.999998,
-      101739e-15,
-      0,
-      0,
-      0.999997,
-      470132e-15,
-      0,
-      0,
-      0.999993,
-      200436e-14,
-      0,
-      0,
-      0.999988,
-      783682e-14,
-      0,
-      0,
-      0.999979,
-      280338e-13,
-      0,
-      0,
-      0.999962,
-      917033e-13,
-      0,
-      0,
-      0.999933,
-      274514e-12,
-      0,
-      0,
-      0.999881,
-      753201e-12,
-      0,
-      0,
-      0.999783,
-      189826e-11,
-      0,
-      0,
-      0.999594,
-      440279e-11,
-      0,
-      0,
-      0.999178,
-      93898e-10,
-      0,
-      0,
-      0.998073,
-      181265e-10,
-      0,
-      0,
-      0.993993,
-      280487e-10,
-      0,
-      0,
-      0.979982,
-      149422e-10,
-      0,
-      0,
-      0.968145,
-      378481e-11,
-      0,
-      0,
-      0.966786,
-      53771e-10,
-      0,
-      0,
-      0.965611,
-      947508e-11,
-      0,
-      388934e-10,
-      0.963557,
-      156616e-10,
-      0,
-      9693e-7,
-      0.959752,
-      235144e-10,
-      0,
-      370329e-8,
-      0.952461,
-      291568e-10,
-      0,
-      868428e-8,
-      0.940193,
-      240102e-10,
-      0,
-      0.0161889,
-      0.929042,
-      231235e-10,
-      0,
-      0.0263948,
-      0.920266,
-      273968e-10,
-      0,
-      0.0394088,
-      0.911178,
-      337915e-10,
-      0,
-      0.0552818,
-      0.897873,
-      333629e-10,
-      0,
-      0.0740138,
-      0.884053,
-      351405e-10,
-      0,
-      0.0955539,
-      0.869455,
-      378034e-10,
-      0,
-      0.119795,
-      0.854655,
-      399378e-10,
-      0,
-      0.14656,
-      0.838347,
-      419108e-10,
-      0,
-      0.175573,
-      0.820693,
-      440831e-10,
-      0,
-      0.206388,
-      0.802277,
-      445599e-10,
-      0,
-      0.238095,
-      0.783634,
-      472691e-10,
-      0,
-      0.269841,
-      0.763159,
-      476984e-10,
-      0,
-      0.301587,
-      0.742914,
-      491487e-10,
-      0,
-      0.333333,
-      0.721662,
-      502312e-10,
-      0,
-      0.365079,
-      0.699668,
-      502817e-10,
-      0,
-      0.396825,
-      0.677839,
-      51406e-9,
-      0,
-      0.428571,
-      0.655091,
-      511095e-10,
-      0,
-      0.460317,
-      0.632665,
-      516067e-10,
-      0,
-      0.492064,
-      0.609734,
-      512255e-10,
-      0,
-      0.52381,
-      0.587043,
-      510263e-10,
-      0,
-      0.555556,
-      0.564298,
-      50565e-9,
-      0,
-      0.587302,
-      0.541769,
-      497951e-10,
-      0,
-      0.619048,
-      0.519529,
-      492698e-10,
-      0,
-      0.650794,
-      0.497574,
-      482066e-10,
-      0,
-      0.68254,
-      0.476028,
-      473689e-10,
-      0,
-      0.714286,
-      0.454961,
-      461941e-10,
-      0,
-      0.746032,
-      0.434341,
-      450618e-10,
-      0,
-      0.777778,
-      0.414364,
-      438355e-10,
-      0,
-      0.809524,
-      0.394832,
-      424196e-10,
-      0,
-      0.84127,
-      0.376109,
-      412563e-10,
-      0,
-      0.873016,
-      0.35779,
-      396226e-10,
-      0,
-      0.904762,
-      0.340379,
-      384886e-10,
-      0,
-      0.936508,
-      0.323385,
-      368214e-10,
-      0,
-      0.968254,
-      0.307295,
-      356636e-10,
-      0,
-      1,
-      1,
-      106465e-17,
-      0,
-      0,
-      1,
-      106555e-17,
-      0,
-      0,
-      1,
-      107966e-17,
-      0,
-      0,
-      1,
-      114601e-17,
-      0,
-      0,
-      1,
-      137123e-17,
-      0,
-      0,
-      1,
-      21243e-16,
-      0,
-      0,
-      0.999999,
-      489653e-17,
-      0,
-      0,
-      0.999999,
-      160283e-16,
-      0,
-      0,
-      0.999998,
-      62269e-15,
-      0,
-      0,
-      0.999997,
-      251859e-15,
-      0,
-      0,
-      0.999996,
-      996192e-15,
-      0,
-      0,
-      0.999992,
-      374531e-14,
-      0,
-      0,
-      0.999986,
-      132022e-13,
-      0,
-      0,
-      0.999975,
-      433315e-13,
-      0,
-      0,
-      0.999959,
-      131956e-12,
-      0,
-      0,
-      0.999927,
-      372249e-12,
-      0,
-      0,
-      0.999871,
-      972461e-12,
-      0,
-      0,
-      0.999771,
-      235343e-11,
-      0,
-      0,
-      0.999572,
-      52768e-10,
-      0,
-      0,
-      0.999133,
-      109237e-10,
-      0,
-      0,
-      0.997912,
-      203675e-10,
-      0,
-      0,
-      0.993008,
-      279396e-10,
-      0,
-      0,
-      0.980645,
-      139604e-10,
-      0,
-      0,
-      0.970057,
-      646596e-11,
-      0,
-      0,
-      0.966717,
-      65089e-10,
-      0,
-      474145e-10,
-      0.965497,
-      111863e-10,
-      0,
-      89544e-8,
-      0.96334,
-      179857e-10,
-      0,
-      32647e-7,
-      0.959294,
-      259045e-10,
-      0,
-      75144e-7,
-      0.951519,
-      292327e-10,
-      0,
-      0.0138734,
-      0.940517,
-      249769e-10,
-      0,
-      0.0224952,
-      0.93014,
-      26803e-9,
-      0,
-      0.0334828,
-      0.91972,
-      303656e-10,
-      0,
-      0.0468973,
-      0.910294,
-      353323e-10,
-      0,
-      0.0627703,
-      0.897701,
-      351002e-10,
-      0,
-      0.0811019,
-      0.884522,
-      388104e-10,
-      0,
-      0.10186,
-      0.869489,
-      412932e-10,
-      0,
-      0.124985,
-      0.853983,
-      415781e-10,
-      0,
-      0.150372,
-      0.838425,
-      454066e-10,
-      0,
-      0.177868,
-      0.820656,
-      471624e-10,
-      0,
-      0.207245,
-      0.801875,
-      475243e-10,
-      0,
-      0.238143,
-      0.783521,
-      505621e-10,
-      0,
-      0.269841,
-      0.763131,
-      50721e-9,
-      0,
-      0.301587,
-      0.74261,
-      523293e-10,
-      0,
-      0.333333,
-      0.72148,
-      528699e-10,
-      0,
-      0.365079,
-      0.699696,
-      538677e-10,
-      0,
-      0.396825,
-      0.677592,
-      539255e-10,
-      0,
-      0.428571,
-      0.65525,
-      546367e-10,
-      0,
-      0.460317,
-      0.632452,
-      541348e-10,
-      0,
-      0.492064,
-      0.609903,
-      544976e-10,
-      0,
-      0.52381,
-      0.586928,
-      536201e-10,
-      0,
-      0.555556,
-      0.564464,
-      535185e-10,
-      0,
-      0.587302,
-      0.541801,
-      524949e-10,
-      0,
-      0.619048,
-      0.519681,
-      51812e-9,
-      0,
-      0.650794,
-      0.497685,
-      507687e-10,
-      0,
-      0.68254,
-      0.47622,
-      496243e-10,
-      0,
-      0.714286,
-      0.455135,
-      485714e-10,
-      0,
-      0.746032,
-      0.4346,
-      471847e-10,
-      0,
-      0.777778,
-      0.414564,
-      459294e-10,
-      0,
-      0.809524,
-      0.395165,
-      444705e-10,
-      0,
-      0.84127,
-      0.376333,
-      430772e-10,
-      0,
-      0.873016,
-      0.358197,
-      416229e-10,
-      0,
-      0.904762,
-      0.34064,
-      401019e-10,
-      0,
-      0.936508,
-      0.323816,
-      386623e-10,
-      0,
-      0.968254,
-      0.307581,
-      370933e-10,
-      0,
-      1,
-      1,
-      991541e-17,
-      0,
-      0,
-      1,
-      992077e-17,
-      0,
-      0,
-      1,
-      100041e-16,
-      0,
-      0,
-      1,
-      10385e-15,
-      0,
-      0,
-      1,
-      115777e-16,
-      0,
-      0,
-      1,
-      150215e-16,
-      0,
-      0,
-      0.999999,
-      254738e-16,
-      0,
-      0,
-      0.999999,
-      598822e-16,
-      0,
-      0,
-      0.999998,
-      179597e-15,
-      0,
-      0,
-      0.999997,
-      602367e-15,
-      0,
-      0,
-      0.999994,
-      206835e-14,
-      0,
-      0,
-      0.99999,
-      694952e-14,
-      0,
-      0,
-      0.999984,
-      223363e-13,
-      0,
-      0,
-      0.999972,
-      678578e-13,
-      0,
-      0,
-      0.999952,
-      193571e-12,
-      0,
-      0,
-      0.999919,
-      516594e-12,
-      0,
-      0,
-      0.99986,
-      128739e-11,
-      0,
-      0,
-      0.999753,
-      299298e-11,
-      0,
-      0,
-      0.999546,
-      648258e-11,
-      0,
-      0,
-      0.999074,
-      129985e-10,
-      0,
-      0,
-      0.997671,
-      232176e-10,
-      0,
-      0,
-      0.991504,
-      256701e-10,
-      0,
-      0,
-      0.981148,
-      131141e-10,
-      0,
-      0,
-      0.971965,
-      869048e-11,
-      0,
-      280182e-10,
-      0.966624,
-      808301e-11,
-      0,
-      695475e-9,
-      0.965344,
-      135235e-10,
-      0,
-      265522e-8,
-      0.963048,
-      210592e-10,
-      0,
-      622975e-8,
-      0.958673,
-      287473e-10,
-      0,
-      0.0116234,
-      0.950262,
-      281379e-10,
-      0,
-      0.018976,
-      0.940836,
-      271089e-10,
-      0,
-      0.0283844,
-      0.930996,
-      30926e-9,
-      0,
-      0.0399151,
-      0.919848,
-      348359e-10,
-      0,
-      0.0536063,
-      0.909136,
-      366092e-10,
-      0,
-      0.0694793,
-      0.897554,
-      384162e-10,
-      0,
-      0.0875342,
-      0.884691,
-      430971e-10,
-      0,
-      0.107749,
-      0.869414,
-      447803e-10,
-      0,
-      0.130087,
-      0.853462,
-      452858e-10,
-      0,
-      0.154481,
-      0.838187,
-      495769e-10,
-      0,
-      0.180833,
-      0.820381,
-      502709e-10,
-      0,
-      0.209005,
-      0.801844,
-      522713e-10,
-      0,
-      0.238791,
-      0.783061,
-      541505e-10,
-      0,
-      0.269869,
-      0.763205,
-      553712e-10,
-      0,
-      0.301587,
-      0.742362,
-      564909e-10,
-      0,
-      0.333333,
-      0.721393,
-      572646e-10,
-      0,
-      0.365079,
-      0.699676,
-      581012e-10,
-      0,
-      0.396825,
-      0.677395,
-      58096e-9,
-      0,
-      0.428571,
-      0.655208,
-      585766e-10,
-      0,
-      0.460317,
-      0.632451,
-      583602e-10,
-      0,
-      0.492064,
-      0.609839,
-      580234e-10,
-      0,
-      0.52381,
-      0.587093,
-      577161e-10,
-      0,
-      0.555556,
-      0.564467,
-      568447e-10,
-      0,
-      0.587302,
-      0.542043,
-      563166e-10,
-      0,
-      0.619048,
-      0.519826,
-      55156e-9,
-      0,
-      0.650794,
-      0.497952,
-      541682e-10,
-      0,
-      0.68254,
-      0.476477,
-      528971e-10,
-      0,
-      0.714286,
-      0.455412,
-      514952e-10,
-      0,
-      0.746032,
-      0.434926,
-      502222e-10,
-      0,
-      0.777778,
-      0.4149,
-      485779e-10,
-      0,
-      0.809524,
-      0.395552,
-      472242e-10,
-      0,
-      0.84127,
-      0.376712,
-      454891e-10,
-      0,
-      0.873016,
-      0.358622,
-      440924e-10,
-      0,
-      0.904762,
-      0.341048,
-      422984e-10,
-      0,
-      0.936508,
-      0.324262,
-      408582e-10,
-      0,
-      0.968254,
-      0.308013,
-      390839e-10,
-      0,
-      1,
-      1,
-      613913e-16,
-      0,
-      0,
-      1,
-      614145e-16,
-      0,
-      0,
-      1,
-      617708e-16,
-      0,
-      0,
-      1,
-      633717e-16,
-      0,
-      0,
-      1,
-      681648e-16,
-      0,
-      0,
-      1,
-      808291e-16,
-      0,
-      0,
-      1,
-      114608e-15,
-      0,
-      0,
-      0.999998,
-      210507e-15,
-      0,
-      0,
-      0.999997,
-      499595e-15,
-      0,
-      0,
-      0.999995,
-      139897e-14,
-      0,
-      0,
-      0.999994,
-      419818e-14,
-      0,
-      0,
-      0.999988,
-      127042e-13,
-      0,
-      0,
-      0.999979,
-      375153e-13,
-      0,
-      0,
-      0.999965,
-      106206e-12,
-      0,
-      0,
-      0.999945,
-      285381e-12,
-      0,
-      0,
-      0.999908,
-      723611e-12,
-      0,
-      0,
-      0.999846,
-      17255e-10,
-      0,
-      0,
-      0.999733,
-      386104e-11,
-      0,
-      0,
-      0.999511,
-      808493e-11,
-      0,
-      0,
-      0.998993,
-      156884e-10,
-      0,
-      0,
-      0.997326,
-      265538e-10,
-      0,
-      0,
-      0.989706,
-      206466e-10,
-      0,
-      0,
-      0.981713,
-      130756e-10,
-      0,
-      70005e-10,
-      0.973636,
-      106473e-10,
-      0,
-      464797e-9,
-      0.966509,
-      10194e-9,
-      0,
-      201743e-8,
-      0.965149,
-      165881e-10,
-      0,
-      497549e-8,
-      0.962669,
-      249147e-10,
-      0,
-      953262e-8,
-      0.95786,
-      317449e-10,
-      0,
-      0.0158211,
-      0.949334,
-      281045e-10,
-      0,
-      0.0239343,
-      0.941041,
-      303263e-10,
-      0,
-      0.0339372,
-      0.931575,
-      356754e-10,
-      0,
-      0.0458738,
-      0.920102,
-      397075e-10,
-      0,
-      0.059772,
-      0.908002,
-      384886e-10,
-      0,
-      0.075645,
-      0.897269,
-      43027e-9,
-      0,
-      0.0934929,
-      0.884559,
-      479925e-10,
-      0,
-      0.113302,
-      0.869161,
-      48246e-9,
-      0,
-      0.135045,
-      0.853342,
-      509505e-10,
-      0,
-      0.158678,
-      0.837633,
-      542846e-10,
-      0,
-      0.184136,
-      0.820252,
-      554139e-10,
-      0,
-      0.211325,
-      0.801872,
-      581412e-10,
-      0,
-      0.240113,
-      0.782418,
-      585535e-10,
-      0,
-      0.270306,
-      0.7631,
-      610923e-10,
-      0,
-      0.301594,
-      0.742183,
-      613678e-10,
-      0,
-      0.333333,
-      0.721098,
-      627275e-10,
-      0,
-      0.365079,
-      0.699512,
-      629413e-10,
-      0,
-      0.396825,
-      0.677372,
-      636351e-10,
-      0,
-      0.428571,
-      0.655059,
-      633555e-10,
-      0,
-      0.460317,
-      0.632567,
-      636513e-10,
-      0,
-      0.492064,
-      0.609784,
-      628965e-10,
-      0,
-      0.52381,
-      0.587237,
-      625546e-10,
-      0,
-      0.555556,
-      0.564525,
-      615825e-10,
-      0,
-      0.587302,
-      0.542181,
-      605048e-10,
-      0,
-      0.619048,
-      0.520017,
-      596329e-10,
-      0,
-      0.650794,
-      0.498204,
-      581516e-10,
-      0,
-      0.68254,
-      0.476742,
-      569186e-10,
-      0,
-      0.714286,
-      0.455803,
-      553833e-10,
-      0,
-      0.746032,
-      0.435251,
-      537807e-10,
-      0,
-      0.777778,
-      0.415374,
-      522025e-10,
-      0,
-      0.809524,
-      0.395921,
-      503421e-10,
-      0,
-      0.84127,
-      0.377253,
-      488211e-10,
-      0,
-      0.873016,
-      0.359021,
-      468234e-10,
-      0,
-      0.904762,
-      0.341637,
-      453269e-10,
-      0,
-      0.936508,
-      0.3247,
-      433014e-10,
-      0,
-      0.968254,
-      0.308625,
-      418007e-10,
-      0,
-      1,
-      1,
-      286798e-15,
-      0,
-      0,
-      1,
-      286877e-15,
-      0,
-      0,
-      1,
-      288094e-15,
-      0,
-      0,
-      1,
-      293506e-15,
-      0,
-      0,
-      1,
-      309262e-15,
-      0,
-      0,
-      0.999999,
-      348593e-15,
-      0,
-      0,
-      0.999999,
-      444582e-15,
-      0,
-      0,
-      0.999998,
-      688591e-15,
-      0,
-      0,
-      0.999996,
-      134391e-14,
-      0,
-      0,
-      0.999993,
-      317438e-14,
-      0,
-      0,
-      0.999989,
-      835609e-14,
-      0,
-      0,
-      0.999983,
-      228677e-13,
-      0,
-      0,
-      0.999974,
-      623361e-13,
-      0,
-      0,
-      0.999959,
-      165225e-12,
-      0,
-      0,
-      0.999936,
-      419983e-12,
-      0,
-      0,
-      0.999896,
-      101546e-11,
-      0,
-      0,
-      0.99983,
-      232376e-11,
-      0,
-      0,
-      0.999709,
-      50156e-10,
-      0,
-      0,
-      0.999469,
-      10167e-9,
-      0,
-      0,
-      0.998886,
-      190775e-10,
-      0,
-      0,
-      0.996819,
-      300511e-10,
-      0,
-      0,
-      0.988837,
-      185092e-10,
-      0,
-      168222e-12,
-      0.982178,
-      134622e-10,
-      0,
-      259622e-9,
-      0.975017,
-      125961e-10,
-      0,
-      142595e-8,
-      0.967101,
-      13507e-9,
-      0,
-      382273e-8,
-      0.964905,
-      205003e-10,
-      0,
-      764164e-8,
-      0.96218,
-      29546e-9,
-      0,
-      0.0130121,
-      0.956821,
-      343738e-10,
-      0,
-      0.0200253,
-      0.948829,
-      305063e-10,
-      0,
-      0.0287452,
-      0.941092,
-      346487e-10,
-      0,
-      0.039218,
-      0.931883,
-      412061e-10,
-      0,
-      0.0514748,
-      0.920211,
-      444651e-10,
-      0,
-      0.0655351,
-      0.907307,
-      431252e-10,
-      0,
-      0.0814082,
-      0.89684,
-      490382e-10,
-      0,
-      0.0990939,
-      0.884119,
-      53334e-9,
-      0,
-      0.118583,
-      0.869148,
-      54114e-9,
-      0,
-      0.139856,
-      0.853377,
-      578536e-10,
-      0,
-      0.162882,
-      0.836753,
-      592285e-10,
-      0,
-      0.187615,
-      0.820063,
-      622787e-10,
-      0,
-      0.213991,
-      0.801694,
-      645492e-10,
-      0,
-      0.241918,
-      0.782116,
-      65353e-9,
-      0,
-      0.271267,
-      0.762673,
-      674344e-10,
-      0,
-      0.301847,
-      0.742133,
-      682788e-10,
-      0,
-      0.333333,
-      0.720779,
-      691959e-10,
-      0,
-      0.365079,
-      0.699386,
-      696817e-10,
-      0,
-      0.396826,
-      0.67732,
-      699583e-10,
-      0,
-      0.428572,
-      0.654888,
-      698447e-10,
-      0,
-      0.460318,
-      0.632499,
-      694063e-10,
-      0,
-      0.492064,
-      0.609825,
-      691612e-10,
-      0,
-      0.52381,
-      0.587287,
-      681576e-10,
-      0,
-      0.555556,
-      0.564743,
-      674138e-10,
-      0,
-      0.587302,
-      0.542409,
-      661617e-10,
-      0,
-      0.619048,
-      0.520282,
-      647785e-10,
-      0,
-      0.650794,
-      0.498506,
-      633836e-10,
-      0,
-      0.68254,
-      0.477102,
-      615905e-10,
-      0,
-      0.714286,
-      0.456167,
-      601013e-10,
-      0,
-      0.746032,
-      0.435728,
-      581457e-10,
-      0,
-      0.777778,
-      0.415809,
-      564215e-10,
-      0,
-      0.809524,
-      0.396517,
-      544997e-10,
-      0,
-      0.84127,
-      0.377737,
-      525061e-10,
-      0,
-      0.873016,
-      0.359698,
-      506831e-10,
-      0,
-      0.904762,
-      0.342164,
-      48568e-9,
-      0,
-      0.936508,
-      0.325417,
-      467826e-10,
-      0,
-      0.968254,
-      0.309186,
-      446736e-10,
-      0,
-      1,
-      1,
-      109018e-14,
-      0,
-      0,
-      1,
-      10904e-13,
-      0,
-      0,
-      1,
-      109393e-14,
-      0,
-      0,
-      1,
-      11095e-13,
-      0,
-      0,
-      1,
-      1154e-12,
-      0,
-      0,
-      1,
-      126089e-14,
-      0,
-      0,
-      0.999999,
-      15059e-13,
-      0,
-      0,
-      0.999997,
-      207899e-14,
-      0,
-      0,
-      0.999994,
-      348164e-14,
-      0,
-      0,
-      0.999993,
-      705728e-14,
-      0,
-      0,
-      0.999987,
-      163692e-13,
-      0,
-      0,
-      0.999981,
-      406033e-13,
-      0,
-      0,
-      0.999969,
-      10245e-11,
-      0,
-      0,
-      0.999953,
-      255023e-12,
-      0,
-      0,
-      0.999925,
-      61511e-11,
-      0,
-      0,
-      0.999881,
-      142218e-11,
-      0,
-      0,
-      0.99981,
-      313086e-11,
-      0,
-      0,
-      0.99968,
-      653119e-11,
-      0,
-      0,
-      0.999418,
-      12832e-9,
-      0,
-      0,
-      0.998748,
-      232497e-10,
-      0,
-      0,
-      0.996066,
-      329522e-10,
-      0,
-      0,
-      0.988379,
-      179613e-10,
-      0,
-      108799e-9,
-      0.982567,
-      143715e-10,
-      0,
-      921302e-9,
-      0.976097,
-      148096e-10,
-      0,
-      280738e-8,
-      0.968475,
-      178905e-10,
-      0,
-      596622e-8,
-      0.964606,
-      253921e-10,
-      0,
-      0.0105284,
-      0.961564,
-      348623e-10,
-      0,
-      0.0165848,
-      0.955517,
-      357612e-10,
-      0,
-      0.0242,
-      0.948381,
-      343493e-10,
-      0,
-      0.03342,
-      0.941095,
-      405849e-10,
-      0,
-      0.0442777,
-      0.931923,
-      475394e-10,
-      0,
-      0.0567958,
-      0.91996,
-      484328e-10,
-      0,
-      0.0709879,
-      0.907419,
-      502146e-10,
-      0,
-      0.086861,
-      0.89618,
-      561654e-10,
-      0,
-      0.104415,
-      0.88337,
-      587612e-10,
-      0,
-      0.123643,
-      0.869046,
-      618057e-10,
-      0,
-      0.144531,
-      0.853278,
-      657392e-10,
-      0,
-      0.167057,
-      0.836091,
-      66303e-9,
-      0,
-      0.191188,
-      0.819644,
-      704445e-10,
-      0,
-      0.216878,
-      0.801246,
-      714071e-10,
-      0,
-      0.244062,
-      0.782031,
-      740093e-10,
-      0,
-      0.272649,
-      0.762066,
-      74685e-9,
-      0,
-      0.302509,
-      0.741964,
-      766647e-10,
-      0,
-      0.333442,
-      0.720554,
-      766328e-10,
-      0,
-      0.365079,
-      0.699098,
-      777857e-10,
-      0,
-      0.396826,
-      0.677189,
-      774633e-10,
-      0,
-      0.428572,
-      0.65484,
-      776235e-10,
-      0,
-      0.460318,
-      0.632496,
-      770316e-10,
-      0,
-      0.492064,
-      0.609908,
-      762669e-10,
-      0,
-      0.52381,
-      0.587312,
-      753972e-10,
-      0,
-      0.555556,
-      0.564938,
-      739994e-10,
-      0,
-      0.587302,
-      0.542577,
-      728382e-10,
-      0,
-      0.619048,
-      0.52062,
-      71112e-9,
-      0,
-      0.650794,
-      0.498819,
-      694004e-10,
-      0,
-      0.68254,
-      0.477555,
-      675575e-10,
-      0,
-      0.714286,
-      0.456568,
-      653449e-10,
-      0,
-      0.746032,
-      0.436278,
-      636068e-10,
-      0,
-      0.777778,
-      0.41637,
-      613466e-10,
-      0,
-      0.809524,
-      0.397144,
-      594177e-10,
-      0,
-      0.84127,
-      0.378412,
-      570987e-10,
-      0,
-      0.873016,
-      0.360376,
-      550419e-10,
-      0,
-      0.904762,
-      0.342906,
-      527422e-10,
-      0,
-      0.936508,
-      0.326136,
-      506544e-10,
-      0,
-      0.968254,
-      0.30997,
-      484307e-10,
-      0,
-      1,
-      1,
-      354014e-14,
-      0,
-      0,
-      1,
-      354073e-14,
-      0,
-      0,
-      1,
-      354972e-14,
-      0,
-      0,
-      1,
-      358929e-14,
-      0,
-      0,
-      1,
-      370093e-14,
-      0,
-      0,
-      0.999999,
-      396194e-14,
-      0,
-      0,
-      0.999998,
-      453352e-14,
-      0,
-      0,
-      0.999997,
-      578828e-14,
-      0,
-      0,
-      0.999994,
-      863812e-14,
-      0,
-      0,
-      0.999991,
-      153622e-13,
-      0,
-      0,
-      0.999985,
-      316356e-13,
-      0,
-      0,
-      0.999977,
-      712781e-13,
-      0,
-      0,
-      0.999964,
-      166725e-12,
-      0,
-      0,
-      0.999945,
-      390501e-12,
-      0,
-      0,
-      0.999912,
-      895622e-12,
-      0,
-      0,
-      0.999866,
-      198428e-11,
-      0,
-      0,
-      0.999786,
-      421038e-11,
-      0,
-      0,
-      0.999647,
-      850239e-11,
-      0,
-      0,
-      0.999356,
-      162059e-10,
-      0,
-      0,
-      0.998563,
-      282652e-10,
-      0,
-      0,
-      0.994928,
-      336309e-10,
-      0,
-      244244e-10,
-      0.987999,
-      178458e-10,
-      0,
-      523891e-9,
-      0.982893,
-      159162e-10,
-      0,
-      194729e-8,
-      0.977044,
-      178056e-10,
-      0,
-      451099e-8,
-      0.969972,
-      230624e-10,
-      0,
-      835132e-8,
-      0.964237,
-      313922e-10,
-      0,
-      0.013561,
-      0.960791,
-      406145e-10,
-      0,
-      0.0202056,
-      0.954292,
-      372796e-10,
-      0,
-      0.0283321,
-      0.948052,
-      403199e-10,
-      0,
-      0.0379739,
-      0.940938,
-      479537e-10,
-      0,
-      0.0491551,
-      0.931689,
-      545292e-10,
-      0,
-      0.0618918,
-      0.91987,
-      54038e-9,
-      0,
-      0.0761941,
-      0.907665,
-      589909e-10,
-      0,
-      0.0920672,
-      0.895281,
-      642651e-10,
-      0,
-      0.109511,
-      0.882621,
-      659707e-10,
-      0,
-      0.12852,
-      0.86873,
-      709973e-10,
-      0,
-      0.149085,
-      0.853008,
-      742221e-10,
-      0,
-      0.171189,
-      0.835944,
-      761754e-10,
-      0,
-      0.194809,
-      0.818949,
-      797052e-10,
-      0,
-      0.21991,
-      0.800951,
-      812434e-10,
-      0,
-      0.246447,
-      0.781847,
-      838075e-10,
-      0,
-      0.274352,
-      0.761649,
-      84501e-9,
-      0,
-      0.303535,
-      0.74152,
-      860258e-10,
-      0,
-      0.333857,
-      0.720495,
-      866233e-10,
-      0,
-      0.365104,
-      0.698742,
-      868326e-10,
-      0,
-      0.396826,
-      0.677096,
-      87133e-9,
-      0,
-      0.428572,
-      0.654782,
-      863497e-10,
-      0,
-      0.460318,
-      0.632335,
-      860206e-10,
-      0,
-      0.492064,
-      0.610031,
-      849337e-10,
-      0,
-      0.52381,
-      0.587457,
-      838279e-10,
-      0,
-      0.555556,
-      0.56513,
-      82309e-9,
-      0,
-      0.587302,
-      0.542877,
-      803542e-10,
-      0,
-      0.619048,
-      0.5209,
-      786928e-10,
-      0,
-      0.650794,
-      0.499291,
-      765171e-10,
-      0,
-      0.68254,
-      0.477971,
-      744753e-10,
-      0,
-      0.714286,
-      0.457221,
-      72209e-9,
-      0,
-      0.746032,
-      0.436803,
-      697448e-10,
-      0,
-      0.777778,
-      0.417083,
-      675333e-10,
-      0,
-      0.809524,
-      0.397749,
-      648058e-10,
-      0,
-      0.84127,
-      0.379177,
-      625759e-10,
-      0,
-      0.873016,
-      0.361061,
-      598584e-10,
-      0,
-      0.904762,
-      0.343713,
-      575797e-10,
-      0,
-      0.936508,
-      0.326894,
-      549999e-10,
-      0,
-      0.968254,
-      0.310816,
-      527482e-10,
-      0,
-      1,
-      1,
-      10153e-12,
-      0,
-      0,
-      1,
-      101544e-13,
-      0,
-      0,
-      1,
-      101751e-13,
-      0,
-      0,
-      1,
-      102662e-13,
-      0,
-      0,
-      1,
-      10521e-12,
-      0,
-      0,
-      0.999999,
-      111049e-13,
-      0,
-      0,
-      0.999999,
-      123408e-13,
-      0,
-      0,
-      0.999996,
-      14924e-12,
-      0,
-      0,
-      0.999992,
-      204471e-13,
-      0,
-      0,
-      0.999989,
-      326539e-13,
-      0,
-      0,
-      0.99998,
-      603559e-13,
-      0,
-      0,
-      0.999971,
-      123936e-12,
-      0,
-      0,
-      0.999955,
-      269058e-12,
-      0,
-      0,
-      0.999933,
-      593604e-12,
-      0,
-      0,
-      0.999901,
-      129633e-11,
-      0,
-      0,
-      0.999847,
-      275621e-11,
-      0,
-      0,
-      0.999761,
-      564494e-11,
-      0,
-      0,
-      0.999607,
-      110485e-10,
-      0,
-      0,
-      0.999282,
-      204388e-10,
-      0,
-      0,
-      0.99831,
-      341084e-10,
-      0,
-      22038e-11,
-      0.993288,
-      294949e-10,
-      0,
-      242388e-9,
-      0.987855,
-      192736e-10,
-      0,
-      12503e-7,
-      0.983167,
-      182383e-10,
-      0,
-      32745e-7,
-      0.977908,
-      218633e-10,
-      0,
-      646321e-8,
-      0.971194,
-      290662e-10,
-      0,
-      0.0109133,
-      0.963867,
-      386401e-10,
-      0,
-      0.0166927,
-      0.95982,
-      462827e-10,
-      0,
-      0.0238494,
-      0.953497,
-      420705e-10,
-      0,
-      0.0324178,
-      0.947621,
-      477743e-10,
-      0,
-      0.0424225,
-      0.940611,
-      568258e-10,
-      0,
-      0.0538808,
-      0.931174,
-      618061e-10,
-      0,
-      0.0668047,
-      0.919919,
-      627098e-10,
-      0,
-      0.0812014,
-      0.907856,
-      694714e-10,
-      0,
-      0.0970745,
-      0.894509,
-      735008e-10,
-      0,
-      0.114424,
-      0.881954,
-      763369e-10,
-      0,
-      0.133246,
-      0.868309,
-      821896e-10,
-      0,
-      0.153534,
-      0.852511,
-      83769e-9,
-      0,
-      0.175275,
-      0.835821,
-      881615e-10,
-      0,
-      0.198453,
-      0.817981,
-      896368e-10,
-      0,
-      0.223042,
-      0.800504,
-      930906e-10,
-      0,
-      0.249009,
-      0.78141,
-      945056e-10,
-      0,
-      0.276304,
-      0.761427,
-      963605e-10,
-      0,
-      0.304862,
-      0.74094,
-      968088e-10,
-      0,
-      0.334584,
-      0.720233,
-      981481e-10,
-      0,
-      0.365322,
-      0.698592,
-      979122e-10,
-      0,
-      0.396826,
-      0.676763,
-      981057e-10,
-      0,
-      0.428571,
-      0.654808,
-      973956e-10,
-      0,
-      0.460318,
-      0.632326,
-      962619e-10,
-      0,
-      0.492064,
-      0.610049,
-      952996e-10,
-      0,
-      0.52381,
-      0.58763,
-      933334e-10,
-      0,
-      0.555556,
-      0.565261,
-      917573e-10,
-      0,
-      0.587302,
-      0.543244,
-      896636e-10,
-      0,
-      0.619048,
-      0.521273,
-      873304e-10,
-      0,
-      0.650794,
-      0.499818,
-      852648e-10,
-      0,
-      0.68254,
-      0.478536,
-      823961e-10,
-      0,
-      0.714286,
-      0.457826,
-      79939e-9,
-      0,
-      0.746032,
-      0.437549,
-      77126e-9,
-      0,
-      0.777778,
-      0.41776,
-      743043e-10,
-      0,
-      0.809524,
-      0.39863,
-      716426e-10,
-      0,
-      0.84127,
-      0.379954,
-      686456e-10,
-      0,
-      0.873016,
-      0.362025,
-      660514e-10,
-      0,
-      0.904762,
-      0.344581,
-      630755e-10,
-      0,
-      0.936508,
-      0.327909,
-      605439e-10,
-      0,
-      0.968254,
-      0.311736,
-      576345e-10,
-      0,
-      1,
-      1,
-      263344e-13,
-      0,
-      0,
-      1,
-      263373e-13,
-      0,
-      0,
-      1,
-      263815e-13,
-      0,
-      0,
-      1,
-      265753e-13,
-      0,
-      0,
-      1,
-      271132e-13,
-      0,
-      0,
-      0.999999,
-      283279e-13,
-      0,
-      0,
-      0.999997,
-      30833e-12,
-      0,
-      0,
-      0.999995,
-      358711e-13,
-      0,
-      0,
-      0.999992,
-      461266e-13,
-      0,
-      0,
-      0.999985,
-      67574e-12,
-      0,
-      0,
-      0.999977,
-      11358e-11,
-      0,
-      0,
-      0.999966,
-      213657e-12,
-      0,
-      0,
-      0.999948,
-      431151e-12,
-      0,
-      0,
-      0.999923,
-      896656e-12,
-      0,
-      0,
-      0.999884,
-      186603e-11,
-      0,
-      0,
-      0.999826,
-      381115e-11,
-      0,
-      0,
-      0.999732,
-      754184e-11,
-      0,
-      0,
-      0.999561,
-      143192e-10,
-      0,
-      0,
-      0.999191,
-      257061e-10,
-      0,
-      0,
-      0.997955,
-      405724e-10,
-      0,
-      744132e-10,
-      0.992228,
-      276537e-10,
-      0,
-      716477e-9,
-      0.987638,
-      208885e-10,
-      0,
-      22524e-7,
-      0.983395,
-      215226e-10,
-      0,
-      484816e-8,
-      0.978614,
-      270795e-10,
-      0,
-      860962e-8,
-      0.972389,
-      365282e-10,
-      0,
-      0.0136083,
-      0.964392,
-      474747e-10,
-      0,
-      0.0198941,
-      0.95861,
-      509141e-10,
-      0,
-      0.0275023,
-      0.952806,
-      48963e-9,
-      0,
-      0.0364584,
-      0.94712,
-      571119e-10,
-      0,
-      0.04678,
-      0.940104,
-      671704e-10,
-      0,
-      0.0584799,
-      0.930398,
-      687586e-10,
-      0,
-      0.0715665,
-      0.919866,
-      738161e-10,
-      0,
-      0.086045,
-      0.907853,
-      813235e-10,
-      0,
-      0.101918,
-      0.894078,
-      834582e-10,
-      0,
-      0.119186,
-      0.881177,
-      892093e-10,
-      0,
-      0.137845,
-      0.867575,
-      944548e-10,
-      0,
-      0.157891,
-      0.852107,
-      969607e-10,
-      0,
-      0.179316,
-      0.835502,
-      101456e-9,
-      0,
-      0.202106,
-      0.81756,
-      103256e-9,
-      0,
-      0.226243,
-      0.79984,
-      106954e-9,
-      0,
-      0.251704,
-      0.780998,
-      108066e-9,
-      0,
-      0.278451,
-      0.761132,
-      110111e-9,
-      0,
-      0.306436,
-      0.740429,
-      110459e-9,
-      0,
-      0.335586,
-      0.719836,
-      111219e-9,
-      0,
-      0.365796,
-      0.698467,
-      11145e-8,
-      0,
-      0.3969,
-      0.676446,
-      110393e-9,
-      0,
-      0.428571,
-      0.654635,
-      110035e-9,
-      0,
-      0.460318,
-      0.632411,
-      108548e-9,
-      0,
-      0.492064,
-      0.609986,
-      106963e-9,
-      0,
-      0.52381,
-      0.587872,
-      105238e-9,
-      0,
-      0.555556,
-      0.565528,
-      102665e-9,
-      0,
-      0.587302,
-      0.543563,
-      100543e-9,
-      0,
-      0.619048,
-      0.52176,
-      976182e-10,
-      0,
-      0.650794,
-      0.500188,
-      947099e-10,
-      0,
-      0.68254,
-      0.479204,
-      919929e-10,
-      0,
-      0.714286,
-      0.458413,
-      886139e-10,
-      0,
-      0.746032,
-      0.438314,
-      857839e-10,
-      0,
-      0.777778,
-      0.418573,
-      82411e-9,
-      0,
-      0.809524,
-      0.39947,
-      792211e-10,
-      0,
-      0.84127,
-      0.380892,
-      759546e-10,
-      0,
-      0.873016,
-      0.362953,
-      727571e-10,
-      0,
-      0.904762,
-      0.345601,
-      695738e-10,
-      0,
-      0.936508,
-      0.328895,
-      664907e-10,
-      0,
-      0.968254,
-      0.312808,
-      634277e-10,
-      0,
-      1,
-      1,
-      628647e-13,
-      0,
-      0,
-      1,
-      628705e-13,
-      0,
-      0,
-      1,
-      629587e-13,
-      0,
-      0,
-      1,
-      633441e-13,
-      0,
-      0,
-      0.999999,
-      644087e-13,
-      0,
-      0,
-      0.999998,
-      667856e-13,
-      0,
-      0,
-      0.999997,
-      715889e-13,
-      0,
-      0,
-      0.999995,
-      809577e-13,
-      0,
-      0,
-      0.999989,
-      992764e-13,
-      0,
-      0,
-      0.999983,
-      135834e-12,
-      0,
-      0,
-      0.999974,
-      210482e-12,
-      0,
-      0,
-      0.999959,
-      365215e-12,
-      0,
-      0,
-      0.999939,
-      686693e-12,
-      0,
-      0,
-      0.999911,
-      13472e-10,
-      0,
-      0,
-      0.999868,
-      26731e-10,
-      0,
-      0,
-      0.999804,
-      524756e-11,
-      0,
-      0,
-      0.9997,
-      100403e-10,
-      0,
-      0,
-      0.99951,
-      185019e-10,
-      0,
-      0,
-      0.999078,
-      322036e-10,
-      0,
-      620676e-11,
-      0.997428,
-      470002e-10,
-      0,
-      341552e-9,
-      0.99162,
-      287123e-10,
-      0,
-      143727e-8,
-      0.987479,
-      234706e-10,
-      0,
-      349201e-8,
-      0.983582,
-      260083e-10,
-      0,
-      66242e-7,
-      0.979186,
-      337927e-10,
-      0,
-      0.0109113,
-      0.97325,
-      454689e-10,
-      0,
-      0.0164064,
-      0.965221,
-      573759e-10,
-      0,
-      0.0231463,
-      0.957262,
-      544114e-10,
-      0,
-      0.0311571,
-      0.952211,
-      587006e-10,
-      0,
-      0.0404572,
-      0.946631,
-      692256e-10,
-      0,
-      0.0510592,
-      0.939391,
-      787819e-10,
-      0,
-      0.0629723,
-      0.929795,
-      792368e-10,
-      0,
-      0.0762025,
-      0.91965,
-      875075e-10,
-      0,
-      0.090753,
-      0.907737,
-      950903e-10,
-      0,
-      0.106626,
-      0.893899,
-      972963e-10,
-      0,
-      0.123822,
-      0.880239,
-      10459e-8,
-      0,
-      0.142337,
-      0.866562,
-      107689e-9,
-      0,
-      0.16217,
-      0.85164,
-      113081e-9,
-      0,
-      0.183314,
-      0.835021,
-      116636e-9,
-      0,
-      0.20576,
-      0.817311,
-      120074e-9,
-      0,
-      0.229496,
-      0.798845,
-      121921e-9,
-      0,
-      0.254502,
-      0.780479,
-      12475e-8,
-      0,
-      0.280753,
-      0.760694,
-      125255e-9,
-      0,
-      0.308212,
-      0.740142,
-      126719e-9,
-      0,
-      0.336825,
-      0.719248,
-      12636e-8,
-      0,
-      0.366517,
-      0.698209,
-      126712e-9,
-      0,
-      0.397167,
-      0.676398,
-      125769e-9,
-      0,
-      0.428578,
-      0.654378,
-      124432e-9,
-      0,
-      0.460318,
-      0.632484,
-      123272e-9,
-      0,
-      0.492064,
-      0.610113,
-      12085e-8,
-      0,
-      0.52381,
-      0.587931,
-      118411e-9,
-      0,
-      0.555556,
-      0.565872,
-      11569e-8,
-      0,
-      0.587302,
-      0.543814,
-      112521e-9,
-      0,
-      0.619048,
-      0.522265,
-      109737e-9,
-      0,
-      0.650794,
-      0.500835,
-      106228e-9,
-      0,
-      0.68254,
-      0.479818,
-      102591e-9,
-      0,
-      0.714286,
-      0.459258,
-      991288e-10,
-      0,
-      0.746032,
-      0.439061,
-      952325e-10,
-      0,
-      0.777778,
-      0.419552,
-      91895e-9,
-      0,
-      0.809524,
-      0.400399,
-      879051e-10,
-      0,
-      0.84127,
-      0.381976,
-      844775e-10,
-      0,
-      0.873016,
-      0.364009,
-      806316e-10,
-      0,
-      0.904762,
-      0.346761,
-      771848e-10,
-      0,
-      0.936508,
-      0.330049,
-      735429e-10,
-      0,
-      0.968254,
-      0.314018,
-      702103e-10,
-      0,
-      1,
-      1,
-      139968e-12,
-      0,
-      0,
-      1,
-      139979e-12,
-      0,
-      0,
-      1,
-      140145e-12,
-      0,
-      0,
-      1,
-      14087e-11,
-      0,
-      0,
-      0.999999,
-      142865e-12,
-      0,
-      0,
-      0.999998,
-      147279e-12,
-      0,
-      0,
-      0.999997,
-      156057e-12,
-      0,
-      0,
-      0.999992,
-      17276e-11,
-      0,
-      0,
-      0.999989,
-      204352e-12,
-      0,
-      0,
-      0.99998,
-      26494e-11,
-      0,
-      0,
-      0.999969,
-      383435e-12,
-      0,
-      0,
-      0.999953,
-      618641e-12,
-      0,
-      0,
-      0.999929,
-      108755e-11,
-      0,
-      0,
-      0.999898,
-      201497e-11,
-      0,
-      0,
-      0.999849,
-      381346e-11,
-      0,
-      0,
-      0.999778,
-      719815e-11,
-      0,
-      0,
-      0.999661,
-      133215e-10,
-      0,
-      0,
-      0.999451,
-      238313e-10,
-      0,
-      0,
-      0.998936,
-      401343e-10,
-      0,
-      113724e-9,
-      0.99662,
-      517346e-10,
-      0,
-      820171e-9,
-      0.991094,
-      304323e-10,
-      0,
-      238143e-8,
-      0.987487,
-      281757e-10,
-      0,
-      493527e-8,
-      0.983731,
-      320048e-10,
-      0,
-      856859e-8,
-      0.979647,
-      423905e-10,
-      0,
-      0.0133393,
-      0.973837,
-      562935e-10,
-      0,
-      0.0192863,
-      0.96584,
-      677442e-10,
-      0,
-      0.0264369,
-      0.956309,
-      623073e-10,
-      0,
-      0.03481,
-      0.951523,
-      704131e-10,
-      0,
-      0.0444184,
-      0.946003,
-      836594e-10,
-      0,
-      0.0552713,
-      0.938454,
-      911736e-10,
-      0,
-      0.0673749,
-      0.929279,
-      938264e-10,
-      0,
-      0.0807329,
-      0.919239,
-      103754e-9,
-      0,
-      0.0953479,
-      0.907293,
-      109928e-9,
-      0,
-      0.111221,
-      0.893936,
-      115257e-9,
-      0,
-      0.128352,
-      0.879674,
-      122265e-9,
-      0,
-      0.14674,
-      0.865668,
-      125733e-9,
-      0,
-      0.166382,
-      0.850998,
-      132305e-9,
-      0,
-      0.187276,
-      0.834498,
-      134844e-9,
-      0,
-      0.209413,
-      0.816903,
-      139276e-9,
-      0,
-      0.232786,
-      0.798235,
-      140984e-9,
-      0,
-      0.257382,
-      0.779724,
-      14378e-8,
-      0,
-      0.283181,
-      0.760251,
-      144623e-9,
-      0,
-      0.310156,
-      0.739808,
-      145228e-9,
-      0,
-      0.338269,
-      0.718762,
-      14539e-8,
-      0,
-      0.367461,
-      0.697815,
-      144432e-9,
-      0,
-      0.397646,
-      0.67631,
-      143893e-9,
-      0,
-      0.428685,
-      0.654278,
-      141846e-9,
-      0,
-      0.460318,
-      0.632347,
-      13935e-8,
-      0,
-      0.492064,
-      0.610296,
-      137138e-9,
-      0,
-      0.52381,
-      0.588039,
-      133806e-9,
-      0,
-      0.555556,
-      0.566218,
-      130755e-9,
-      0,
-      0.587302,
-      0.544346,
-      127128e-9,
-      0,
-      0.619048,
-      0.522701,
-      123002e-9,
-      0,
-      0.650794,
-      0.501542,
-      119443e-9,
-      0,
-      0.68254,
-      0.480508,
-      115055e-9,
-      0,
-      0.714286,
-      0.460092,
-      111032e-9,
-      0,
-      0.746032,
-      0.440021,
-      106635e-9,
-      0,
-      0.777778,
-      0.420446,
-      102162e-9,
-      0,
-      0.809524,
-      0.401512,
-      98184e-9,
-      0,
-      0.84127,
-      0.38299,
-      936497e-10,
-      0,
-      0.873016,
-      0.365232,
-      89813e-9,
-      0,
-      0.904762,
-      0.347865,
-      853073e-10,
-      0,
-      0.936508,
-      0.331342,
-      817068e-10,
-      0,
-      0.968254,
-      0.315202,
-      773818e-10,
-      0,
-      1,
-      1,
-      29368e-11,
-      0,
-      0,
-      1,
-      2937e-10,
-      0,
-      0,
-      1,
-      293998e-12,
-      0,
-      0,
-      1,
-      295298e-12,
-      0,
-      0,
-      0.999999,
-      298865e-12,
-      0,
-      0,
-      0.999998,
-      3067e-10,
-      0,
-      0,
-      0.999995,
-      322082e-12,
-      0,
-      0,
-      0.999992,
-      350767e-12,
-      0,
-      0,
-      0.999986,
-      403538e-12,
-      0,
-      0,
-      0.999976,
-      501372e-12,
-      0,
-      0,
-      0.999964,
-      68562e-11,
-      0,
-      0,
-      0.999945,
-      10374e-10,
-      0,
-      0,
-      0.999919,
-      171269e-11,
-      0,
-      0,
-      0.999882,
-      300175e-11,
-      0,
-      0,
-      0.999829,
-      542144e-11,
-      0,
-      0,
-      0.999749,
-      984182e-11,
-      0,
-      0,
-      0.99962,
-      176213e-10,
-      0,
-      0,
-      0.999382,
-      305995e-10,
-      0,
-      138418e-10,
-      0.998751,
-      496686e-10,
-      0,
-      389844e-9,
-      0.995344,
-      510733e-10,
-      0,
-      150343e-8,
-      0.990768,
-      345829e-10,
-      0,
-      352451e-8,
-      0.987464,
-      342841e-10,
-      0,
-      655379e-8,
-      0.983846,
-      399072e-10,
-      0,
-      0.0106554,
-      0.980007,
-      533219e-10,
-      0,
-      0.0158723,
-      0.974494,
-      696992e-10,
-      0,
-      0.0222333,
-      0.96622,
-      776754e-10,
-      0,
-      0.029758,
-      0.956273,
-      747718e-10,
-      0,
-      0.0384596,
-      0.950952,
-      864611e-10,
-      0,
-      0.0483473,
-      0.945215,
-      100464e-9,
-      0,
-      0.0594266,
-      0.937287,
-      103729e-9,
-      0,
-      0.0717019,
-      0.928649,
-      111665e-9,
-      0,
-      0.0851752,
-      0.918791,
-      12353e-8,
-      0,
-      0.0998479,
-      0.906685,
-      127115e-9,
-      0,
-      0.115721,
-      0.893706,
-      13628e-8,
-      0,
-      0.132794,
-      0.879248,
-      142427e-9,
-      0,
-      0.151067,
-      0.864685,
-      148091e-9,
-      0,
-      0.170538,
-      0.850032,
-      153517e-9,
-      0,
-      0.191204,
-      0.833853,
-      157322e-9,
-      0,
-      0.213063,
-      0.816353,
-      161086e-9,
-      0,
-      0.236107,
-      0.797834,
-      164111e-9,
-      0,
-      0.260329,
-      0.778831,
-      165446e-9,
-      0,
-      0.285714,
-      0.759756,
-      167492e-9,
-      0,
-      0.312243,
-      0.739419,
-      166928e-9,
-      0,
-      0.339887,
-      0.718491,
-      167e-6,
-      0,
-      0.368604,
-      0.697392,
-      165674e-9,
-      0,
-      0.398329,
-      0.676102,
-      163815e-9,
-      0,
-      0.428961,
-      0.654243,
-      162003e-9,
-      0,
-      0.460331,
-      0.632176,
-      158831e-9,
-      0,
-      0.492064,
-      0.610407,
-      155463e-9,
-      0,
-      0.52381,
-      0.588394,
-      152062e-9,
-      0,
-      0.555556,
-      0.56645,
-      147665e-9,
-      0,
-      0.587302,
-      0.5449,
-      14375e-8,
-      0,
-      0.619048,
-      0.523276,
-      138905e-9,
-      0,
-      0.650794,
-      0.502179,
-      134189e-9,
-      0,
-      0.68254,
-      0.481359,
-      129392e-9,
-      0,
-      0.714286,
-      0.46092,
-      124556e-9,
-      0,
-      0.746032,
-      0.441084,
-      11957e-8,
-      0,
-      0.777778,
-      0.421517,
-      114652e-9,
-      0,
-      0.809524,
-      0.402721,
-      109688e-9,
-      0,
-      0.84127,
-      0.384222,
-      104667e-9,
-      0,
-      0.873016,
-      0.366534,
-      999633e-10,
-      0,
-      0.904762,
-      0.349205,
-      950177e-10,
-      0,
-      0.936508,
-      0.332702,
-      907301e-10,
-      0,
-      0.968254,
-      0.316599,
-      859769e-10,
-      0,
-      1,
-      1,
-      585473e-12,
-      0,
-      0,
-      1,
-      585507e-12,
-      0,
-      0,
-      1,
-      58602e-11,
-      0,
-      0,
-      0.999999,
-      588259e-12,
-      0,
-      0,
-      0.999999,
-      594381e-12,
-      0,
-      0,
-      0.999998,
-      607754e-12,
-      0,
-      0,
-      0.999995,
-      633729e-12,
-      0,
-      0,
-      0.99999,
-      68137e-11,
-      0,
-      0,
-      0.999984,
-      767003e-12,
-      0,
-      0,
-      0.999973,
-      921212e-12,
-      0,
-      0,
-      0.999959,
-      120218e-11,
-      0,
-      0,
-      0.999936,
-      172024e-11,
-      0,
-      0,
-      0.999907,
-      268088e-11,
-      0,
-      0,
-      0.999866,
-      445512e-11,
-      0,
-      0,
-      0.999806,
-      768481e-11,
-      0,
-      0,
-      0.999716,
-      1342e-8,
-      0,
-      0,
-      0.999576,
-      232473e-10,
-      0,
-      0,
-      0.9993,
-      391694e-10,
-      0,
-      129917e-9,
-      0.998498,
-      608429e-10,
-      0,
-      845035e-9,
-      0.994132,
-      489743e-10,
-      0,
-      237616e-8,
-      0.99031,
-      384644e-10,
-      0,
-      484456e-8,
-      0.987409,
-      421768e-10,
-      0,
-      832472e-8,
-      0.983981,
-      504854e-10,
-      0,
-      0.0128643,
-      0.980268,
-      671028e-10,
-      0,
-      0.0184947,
-      0.974875,
-      852749e-10,
-      0,
-      0.025237,
-      0.966063,
-      85531e-9,
-      0,
-      0.0331046,
-      0.956779,
-      900588e-10,
-      0,
-      0.0421067,
-      0.950259,
-      10577e-8,
-      0,
-      0.0522487,
-      0.944239,
-      119458e-9,
-      0,
-      0.0635343,
-      0.936341,
-      122164e-9,
-      0,
-      0.0759654,
-      0.928047,
-      134929e-9,
-      0,
-      0.0895434,
-      0.918065,
-      145544e-9,
-      0,
-      0.104269,
-      0.906267,
-      150531e-9,
-      0,
-      0.120142,
-      0.893419,
-      161652e-9,
-      0,
-      0.137163,
-      0.878758,
-      16593e-8,
-      0,
-      0.15533,
-      0.863699,
-      174014e-9,
-      0,
-      0.174645,
-      0.848876,
-      177877e-9,
-      0,
-      0.195106,
-      0.833032,
-      184049e-9,
-      0,
-      0.21671,
-      0.815557,
-      186088e-9,
-      0,
-      0.239454,
-      0.797323,
-      19054e-8,
-      0,
-      0.263332,
-      0.778124,
-      191765e-9,
-      0,
-      0.288336,
-      0.758929,
-      192535e-9,
-      0,
-      0.314451,
-      0.738979,
-      192688e-9,
-      0,
-      0.341658,
-      0.718213,
-      191522e-9,
-      0,
-      0.369924,
-      0.696947,
-      190491e-9,
-      0,
-      0.399202,
-      0.675807,
-      187913e-9,
-      0,
-      0.429416,
-      0.654147,
-      184451e-9,
-      0,
-      0.460447,
-      0.63229,
-      181442e-9,
-      0,
-      0.492064,
-      0.610499,
-      177139e-9,
-      0,
-      0.523809,
-      0.588747,
-      172596e-9,
-      0,
-      0.555555,
-      0.566783,
-      167457e-9,
-      0,
-      0.587301,
-      0.545359,
-      162518e-9,
-      0,
-      0.619048,
-      0.523984,
-      156818e-9,
-      0,
-      0.650794,
-      0.502917,
-      151884e-9,
-      0,
-      0.68254,
-      0.482294,
-      145514e-9,
-      0,
-      0.714286,
-      0.461945,
-      140199e-9,
-      0,
-      0.746032,
-      0.442133,
-      134101e-9,
-      0,
-      0.777778,
-      0.422705,
-      128374e-9,
-      0,
-      0.809524,
-      0.403916,
-      122996e-9,
-      0,
-      0.84127,
-      0.38554,
-      116808e-9,
-      0,
-      0.873016,
-      0.367909,
-      111973e-9,
-      0,
-      0.904762,
-      0.350651,
-      105938e-9,
-      0,
-      0.936508,
-      0.334208,
-      101355e-9,
-      0,
-      0.968254,
-      0.318123,
-      957629e-10,
-      0,
-      1,
-      1,
-      111633e-11,
-      0,
-      0,
-      1,
-      111639e-11,
-      0,
-      0,
-      1,
-      111725e-11,
-      0,
-      0,
-      1,
-      112096e-11,
-      0,
-      0,
-      0.999999,
-      11311e-10,
-      0,
-      0,
-      0.999997,
-      115315e-11,
-      0,
-      0,
-      0.999995,
-      11956e-10,
-      0,
-      0,
-      0.999989,
-      127239e-11,
-      0,
-      0,
-      0.999981,
-      140772e-11,
-      0,
-      0,
-      0.999969,
-      164541e-11,
-      0,
-      0,
-      0.999952,
-      206607e-11,
-      0,
-      0,
-      0.999928,
-      281783e-11,
-      0,
-      0,
-      0.999895,
-      416835e-11,
-      0,
-      0,
-      0.999848,
-      658728e-11,
-      0,
-      0,
-      0.999781,
-      108648e-10,
-      0,
-      0,
-      0.999682,
-      182579e-10,
-      0,
-      0,
-      0.999523,
-      306003e-10,
-      0,
-      159122e-10,
-      0.999205,
-      499862e-10,
-      0,
-      391184e-9,
-      0.998131,
-      73306e-9,
-      0,
-      147534e-8,
-      0.993334,
-      513229e-10,
-      0,
-      34227e-7,
-      0.99016,
-      467783e-10,
-      0,
-      632232e-8,
-      0.987321,
-      523413e-10,
-      0,
-      0.0102295,
-      0.984099,
-      64267e-9,
-      0,
-      0.0151794,
-      0.980432,
-      843042e-10,
-      0,
-      0.0211947,
-      0.974976,
-      102819e-9,
-      0,
-      0.0282899,
-      0.966429,
-      996234e-10,
-      0,
-      0.0364739,
-      0.957633,
-      111074e-9,
-      0,
-      0.0457522,
-      0.949422,
-      128644e-9,
-      0,
-      0.0561278,
-      0.943045,
-      140076e-9,
-      0,
-      0.0676023,
-      0.935448,
-      146349e-9,
-      0,
-      0.0801762,
-      0.927225,
-      161854e-9,
-      0,
-      0.0938499,
-      0.917033,
-      169135e-9,
-      0,
-      0.108623,
-      0.905762,
-      179987e-9,
-      0,
-      0.124496,
-      0.892879,
-      189832e-9,
-      0,
-      0.141469,
-      0.878435,
-      195881e-9,
-      0,
-      0.159541,
-      0.863114,
-      20466e-8,
-      0,
-      0.178713,
-      0.84776,
-      209473e-9,
-      0,
-      0.198985,
-      0.832084,
-      214861e-9,
-      0,
-      0.220355,
-      0.814915,
-      217695e-9,
-      0,
-      0.242823,
-      0.796711,
-      220313e-9,
-      0,
-      0.266385,
-      0.777603,
-      22313e-8,
-      0,
-      0.291036,
-      0.757991,
-      222471e-9,
-      0,
-      0.316767,
-      0.738371,
-      222869e-9,
-      0,
-      0.343563,
-      0.717872,
-      221243e-9,
-      0,
-      0.371402,
-      0.696619,
-      218089e-9,
-      0,
-      0.400248,
-      0.675379,
-      21562e-8,
-      0,
-      0.430047,
-      0.65411,
-      21169e-8,
-      0,
-      0.460709,
-      0.63241,
-      206947e-9,
-      0,
-      0.492079,
-      0.61046,
-      201709e-9,
-      0,
-      0.52381,
-      0.58903,
-      196753e-9,
-      0,
-      0.555556,
-      0.567267,
-      189637e-9,
-      0,
-      0.587302,
-      0.545886,
-      184735e-9,
-      0,
-      0.619048,
-      0.524714,
-      177257e-9,
-      0,
-      0.650794,
-      0.503789,
-      171424e-9,
-      0,
-      0.68254,
-      0.483204,
-      164688e-9,
-      0,
-      0.714286,
-      0.462976,
-      157172e-9,
-      0,
-      0.746032,
-      0.443294,
-      151341e-9,
-      0,
-      0.777778,
-      0.423988,
-      143737e-9,
-      0,
-      0.809524,
-      0.405325,
-      138098e-9,
-      0,
-      0.84127,
-      0.386981,
-      130698e-9,
-      0,
-      0.873016,
-      0.369436,
-      125276e-9,
-      0,
-      0.904762,
-      0.35219,
-      118349e-9,
-      0,
-      0.936508,
-      0.335804,
-      11312e-8,
-      0,
-      0.968254,
-      0.319749,
-      106687e-9,
-      0,
-      1,
-      1,
-      204685e-11,
-      0,
-      0,
-      1,
-      204694e-11,
-      0,
-      0,
-      1,
-      204831e-11,
-      0,
-      0,
-      0.999999,
-      205428e-11,
-      0,
-      0,
-      0.999999,
-      207056e-11,
-      0,
-      0,
-      0.999997,
-      210581e-11,
-      0,
-      0,
-      0.999993,
-      21732e-10,
-      0,
-      0,
-      0.999987,
-      229365e-11,
-      0,
-      0,
-      0.999979,
-      250243e-11,
-      0,
-      0,
-      0.999965,
-      286127e-11,
-      0,
-      0,
-      0.999947,
-      348028e-11,
-      0,
-      0,
-      0.999918,
-      455588e-11,
-      0,
-      0,
-      0.999881,
-      643303e-11,
-      0,
-      0,
-      0.999828,
-      970064e-11,
-      0,
-      0,
-      0.999753,
-      153233e-10,
-      0,
-      0,
-      0.999642,
-      24793e-9,
-      0,
-      0,
-      0.999464,
-      402032e-10,
-      0,
-      122947e-9,
-      0.999089,
-      635852e-10,
-      0,
-      807414e-9,
-      0.997567,
-      857026e-10,
-      0,
-      227206e-8,
-      0.992903,
-      594912e-10,
-      0,
-      462812e-8,
-      0.990011,
-      578515e-10,
-      0,
-      794162e-8,
-      0.987192,
-      65399e-9,
-      0,
-      0.0122534,
-      0.98418,
-      819675e-10,
-      0,
-      0.0175888,
-      0.980491,
-      105514e-9,
-      0,
-      0.0239635,
-      0.974779,
-      121532e-9,
-      0,
-      0.031387,
-      0.96675,
-      119144e-9,
-      0,
-      0.0398644,
-      0.958248,
-      136125e-9,
-      0,
-      0.0493982,
-      0.948884,
-      155408e-9,
-      0,
-      0.0599896,
-      0.941673,
-      162281e-9,
-      0,
-      0.0716382,
-      0.934521,
-      176754e-9,
-      0,
-      0.0843437,
-      0.926205,
-      192873e-9,
-      0,
-      0.0981056,
-      0.916089,
-      200038e-9,
-      0,
-      0.112923,
-      0.904963,
-      213624e-9,
-      0,
-      0.128796,
-      0.892089,
-      221834e-9,
-      0,
-      0.145725,
-      0.878028,
-      232619e-9,
-      0,
-      0.163709,
-      0.86249,
-      238632e-9,
-      0,
-      0.182749,
-      0.846587,
-      247002e-9,
-      0,
-      0.202847,
-      0.830988,
-      250702e-9,
-      0,
-      0.224001,
-      0.814165,
-      255562e-9,
-      0,
-      0.246214,
-      0.796135,
-      257505e-9,
-      0,
-      0.269482,
-      0.777052,
-      258625e-9,
-      0,
-      0.293805,
-      0.757201,
-      258398e-9,
-      0,
-      0.319176,
-      0.737655,
-      256714e-9,
-      0,
-      0.345587,
-      0.717477,
-      255187e-9,
-      0,
-      0.373021,
-      0.696433,
-      251792e-9,
-      0,
-      0.401454,
-      0.675084,
-      247223e-9,
-      0,
-      0.430844,
-      0.653907,
-      242213e-9,
-      0,
-      0.461125,
-      0.632561,
-      237397e-9,
-      0,
-      0.492187,
-      0.610658,
-      229313e-9,
-      0,
-      0.52381,
-      0.589322,
-      224402e-9,
-      0,
-      0.555556,
-      0.567857,
-      216116e-9,
-      0,
-      0.587302,
-      0.54652,
-      209124e-9,
-      0,
-      0.619048,
-      0.525433,
-      201601e-9,
-      0,
-      0.650794,
-      0.504679,
-      192957e-9,
-      0,
-      0.68254,
-      0.484203,
-      186052e-9,
-      0,
-      0.714286,
-      0.464203,
-      177672e-9,
-      0,
-      0.746032,
-      0.444549,
-      170005e-9,
-      0,
-      0.777778,
-      0.425346,
-      162401e-9,
-      0,
-      0.809524,
-      0.406706,
-      1544e-7,
-      0,
-      0.84127,
-      0.388576,
-      147437e-9,
-      0,
-      0.873016,
-      0.37094,
-      139493e-9,
-      0,
-      0.904762,
-      0.353996,
-      133219e-9,
-      0,
-      0.936508,
-      0.337391,
-      125573e-9,
-      0,
-      0.968254,
-      0.321648,
-      119867e-9,
-      0,
-      1,
-      1,
-      362511e-11,
-      0,
-      0,
-      1,
-      362525e-11,
-      0,
-      0,
-      1,
-      362739e-11,
-      0,
-      0,
-      0.999999,
-      363673e-11,
-      0,
-      0,
-      0.999998,
-      366214e-11,
-      0,
-      0,
-      0.999996,
-      371698e-11,
-      0,
-      0,
-      0.999992,
-      382116e-11,
-      0,
-      0,
-      0.999986,
-      400554e-11,
-      0,
-      0,
-      0.999976,
-      432058e-11,
-      0,
-      0,
-      0.999961,
-      485194e-11,
-      0,
-      0,
-      0.999938,
-      574808e-11,
-      0,
-      0,
-      0.999908,
-      726643e-11,
-      0,
-      0,
-      0.999865,
-      984707e-11,
-      0,
-      0,
-      0.999807,
-      142217e-10,
-      0,
-      0,
-      0.999723,
-      215581e-10,
-      0,
-      0,
-      0.999602,
-      336114e-10,
-      0,
-      119113e-10,
-      0.999398,
-      527353e-10,
-      0,
-      355813e-9,
-      0.998946,
-      805809e-10,
-      0,
-      137768e-8,
-      0.996647,
-      942908e-10,
-      0,
-      322469e-8,
-      0.992298,
-      668733e-10,
-      0,
-      597897e-8,
-      0.989802,
-      716564e-10,
-      0,
-      968903e-8,
-      0.987019,
-      821355e-10,
-      0,
-      0.0143845,
-      0.984219,
-      104555e-9,
-      0,
-      0.0200831,
-      0.980425,
-      131245e-9,
-      0,
-      0.0267948,
-      0.974241,
-      139613e-9,
-      0,
-      0.034525,
-      0.967006,
-      145931e-9,
-      0,
-      0.0432757,
-      0.95893,
-      167153e-9,
-      0,
-      0.0530471,
-      0.949157,
-      188146e-9,
-      0,
-      0.0638386,
-      0.94062,
-      194625e-9,
-      0,
-      0.0756487,
-      0.933509,
-      213721e-9,
-      0,
-      0.0884762,
-      0.925088,
-      229616e-9,
-      0,
-      0.10232,
-      0.915178,
-      239638e-9,
-      0,
-      0.117178,
-      0.904093,
-      254814e-9,
-      0,
-      0.133051,
-      0.891337,
-      263685e-9,
-      0,
-      0.149939,
-      0.877326,
-      274789e-9,
-      0,
-      0.167841,
-      0.861794,
-      280534e-9,
-      0,
-      0.18676,
-      0.845758,
-      289534e-9,
-      0,
-      0.206696,
-      0.829792,
-      294446e-9,
-      0,
-      0.22765,
-      0.813037,
-      296877e-9,
-      0,
-      0.249625,
-      0.795285,
-      300217e-9,
-      0,
-      0.27262,
-      0.776323,
-      299826e-9,
-      0,
-      0.296636,
-      0.756673,
-      299787e-9,
-      0,
-      0.321671,
-      0.736856,
-      297867e-9,
-      0,
-      0.347718,
-      0.716883,
-      294052e-9,
-      0,
-      0.374768,
-      0.696089,
-      289462e-9,
-      0,
-      0.402804,
-      0.67505,
-      285212e-9,
-      0,
-      0.431796,
-      0.653509,
-      27653e-8,
-      0,
-      0.461695,
-      0.63258,
-      271759e-9,
-      0,
-      0.49242,
-      0.61104,
-      262811e-9,
-      0,
-      0.523822,
-      0.589567,
-      255151e-9,
-      0,
-      0.555556,
-      0.568322,
-      246434e-9,
-      0,
-      0.587302,
-      0.547235,
-      237061e-9,
-      0,
-      0.619048,
-      0.52616,
-      228343e-9,
-      0,
-      0.650794,
-      0.505716,
-      219236e-9,
-      0,
-      0.68254,
-      0.485274,
-      209595e-9,
-      0,
-      0.714286,
-      0.465411,
-      201011e-9,
-      0,
-      0.746032,
-      0.445854,
-      19109e-8,
-      0,
-      0.777778,
-      0.426911,
-      182897e-9,
-      0,
-      0.809524,
-      0.408222,
-      173569e-9,
-      0,
-      0.84127,
-      0.390307,
-      165496e-9,
-      0,
-      0.873016,
-      0.372624,
-      156799e-9,
-      0,
-      0.904762,
-      0.355804,
-      14917e-8,
-      0,
-      0.936508,
-      0.33924,
-      140907e-9,
-      0,
-      0.968254,
-      0.323534,
-      134062e-9,
-      0,
-      1,
-      1,
-      622487e-11,
-      0,
-      0,
-      1,
-      62251e-10,
-      0,
-      0,
-      1,
-      622837e-11,
-      0,
-      0,
-      0.999999,
-      624259e-11,
-      0,
-      0,
-      0.999998,
-      628127e-11,
-      0,
-      0,
-      0.999996,
-      636451e-11,
-      0,
-      0,
-      0.999991,
-      65218e-10,
-      0,
-      0,
-      0.999984,
-      679782e-11,
-      0,
-      0,
-      0.999973,
-      726361e-11,
-      0,
-      0,
-      0.999955,
-      803644e-11,
-      0,
-      0,
-      0.999931,
-      931397e-11,
-      0,
-      0,
-      0.999896,
-      114299e-10,
-      0,
-      0,
-      0.999847,
-      149402e-10,
-      0,
-      0,
-      0.999784,
-      207461e-10,
-      0,
-      0,
-      0.999692,
-      302493e-10,
-      0,
-      0,
-      0.999554,
-      454957e-10,
-      0,
-      997275e-10,
-      0.999326,
-      690762e-10,
-      0,
-      724813e-9,
-      0.998757,
-      101605e-9,
-      0,
-      20972e-7,
-      0.995367,
-      958745e-10,
-      0,
-      432324e-8,
-      0.99209,
-      832808e-10,
-      0,
-      746347e-8,
-      0.989517,
-      887601e-10,
-      0,
-      0.0115534,
-      0.987008,
-      10564e-8,
-      0,
-      0.0166134,
-      0.98421,
-      133179e-9,
-      0,
-      0.0226552,
-      0.98021,
-      161746e-9,
-      0,
-      0.0296838,
-      0.973676,
-      161821e-9,
-      0,
-      0.0377016,
-      0.967052,
-      178635e-9,
-      0,
-      0.0467079,
-      0.959385,
-      206765e-9,
-      0,
-      0.0567013,
-      0.949461,
-      22476e-8,
-      0,
-      0.0676796,
-      0.939578,
-      23574e-8,
-      0,
-      0.0796403,
-      0.932416,
-      25893e-8,
-      0,
-      0.0925812,
-      0.923759,
-      271228e-9,
-      0,
-      0.106501,
-      0.914223,
-      289165e-9,
-      0,
-      0.121397,
-      0.902942,
-      301156e-9,
-      0,
-      0.13727,
-      0.890419,
-      313852e-9,
-      0,
-      0.15412,
-      0.876639,
-      324408e-9,
-      0,
-      0.171946,
-      0.861316,
-      33249e-8,
-      0,
-      0.190751,
-      0.84496,
-      338497e-9,
-      0,
-      0.210537,
-      0.828427,
-      345861e-9,
-      0,
-      0.231305,
-      0.811871,
-      347863e-9,
-      0,
-      0.253057,
-      0.794397,
-      350225e-9,
-      0,
-      0.275797,
-      0.775726,
-      349915e-9,
-      0,
-      0.299525,
-      0.75617,
-      347297e-9,
-      0,
-      0.324242,
-      0.736091,
-      344232e-9,
-      0,
-      0.349947,
-      0.716213,
-      340835e-9,
-      0,
-      0.376633,
-      0.695736,
-      332369e-9,
-      0,
-      0.404289,
-      0.674961,
-      327943e-9,
-      0,
-      0.432895,
-      0.653518,
-      318533e-9,
-      0,
-      0.462415,
-      0.632574,
-      310391e-9,
-      0,
-      0.492788,
-      0.61134,
-      300755e-9,
-      0,
-      0.523909,
-      0.590017,
-      290506e-9,
-      0,
-      0.555556,
-      0.568752,
-      280446e-9,
-      0,
-      0.587302,
-      0.548061,
-      269902e-9,
-      0,
-      0.619048,
-      0.52711,
-      258815e-9,
-      0,
-      0.650794,
-      0.506682,
-      248481e-9,
-      0,
-      0.68254,
-      0.486524,
-      237141e-9,
-      0,
-      0.714286,
-      0.466812,
-      226872e-9,
-      0,
-      0.746032,
-      0.44732,
-      216037e-9,
-      0,
-      0.777778,
-      0.428473,
-      205629e-9,
-      0,
-      0.809524,
-      0.409921,
-      195691e-9,
-      0,
-      0.84127,
-      0.392028,
-      185457e-9,
-      0,
-      0.873016,
-      0.374606,
-      176436e-9,
-      0,
-      0.904762,
-      0.357601,
-      166508e-9,
-      0,
-      0.936508,
-      0.341348,
-      158385e-9,
-      0,
-      0.968254,
-      0.32542,
-      149203e-9,
-      0,
-      1,
-      1,
-      103967e-10,
-      0,
-      0,
-      1,
-      10397e-9,
-      0,
-      0,
-      1,
-      104019e-10,
-      0,
-      0,
-      0.999999,
-      104231e-10,
-      0,
-      0,
-      0.999998,
-      104806e-10,
-      0,
-      0,
-      0.999995,
-      106042e-10,
-      0,
-      0,
-      0.999991,
-      108366e-10,
-      0,
-      0,
-      0.999982,
-      112415e-10,
-      0,
-      0,
-      0.999968,
-      119174e-10,
-      0,
-      0,
-      0.99995,
-      130227e-10,
-      0,
-      0,
-      0.999922,
-      148176e-10,
-      0,
-      0,
-      0.999884,
-      177303e-10,
-      0,
-      0,
-      0.99983,
-      224564e-10,
-      0,
-      0,
-      0.999758,
-      300966e-10,
-      0,
-      0,
-      0.999654,
-      423193e-10,
-      0,
-      549083e-11,
-      0.999503,
-      614848e-10,
-      0,
-      296087e-9,
-      0.999237,
-      903576e-10,
-      0,
-      123144e-8,
-      0.998491,
-      1271e-7,
-      0,
-      295954e-8,
-      0.994594,
-      107754e-9,
-      0,
-      555829e-8,
-      0.99178,
-      103025e-9,
-      0,
-      907209e-8,
-      0.989265,
-      11154e-8,
-      0,
-      0.0135257,
-      0.986998,
-      136296e-9,
-      0,
-      0.0189327,
-      0.984137,
-      169154e-9,
-      0,
-      0.0252993,
-      0.979798,
-      196671e-9,
-      0,
-      0.0326272,
-      0.97337,
-      196678e-9,
-      0,
-      0.0409157,
-      0.967239,
-      223121e-9,
-      0,
-      0.0501623,
-      0.959543,
-      253809e-9,
-      0,
-      0.0603638,
-      0.949466,
-      265972e-9,
-      0,
-      0.0715171,
-      0.939074,
-      288372e-9,
-      0,
-      0.0836187,
-      0.931118,
-      310983e-9,
-      0,
-      0.0966657,
-      0.922525,
-      325561e-9,
-      0,
-      0.110656,
-      0.912983,
-      345725e-9,
-      0,
-      0.125588,
-      0.901617,
-      3556e-7,
-      0,
-      0.141461,
-      0.889487,
-      374012e-9,
-      0,
-      0.158275,
-      0.875787,
-      383445e-9,
-      0,
-      0.176031,
-      0.860654,
-      393972e-9,
-      0,
-      0.19473,
-      0.844417,
-      400311e-9,
-      0,
-      0.214374,
-      0.82741,
-      405004e-9,
-      0,
-      0.234967,
-      0.810545,
-      407378e-9,
-      0,
-      0.256512,
-      0.793312,
-      407351e-9,
-      0,
-      0.279011,
-      0.774847,
-      406563e-9,
-      0,
-      0.302468,
-      0.755621,
-      404903e-9,
-      0,
-      0.326887,
-      0.735511,
-      397486e-9,
-      0,
-      0.352266,
-      0.715435,
-      39357e-8,
-      0,
-      0.378605,
-      0.695403,
-      384739e-9,
-      0,
-      0.405897,
-      0.674681,
-      376108e-9,
-      0,
-      0.43413,
-      0.65359,
-      365997e-9,
-      0,
-      0.463277,
-      0.632471,
-      354957e-9,
-      0,
-      0.493295,
-      0.61151,
-      343593e-9,
-      0,
-      0.524106,
-      0.59064,
-      331841e-9,
-      0,
-      0.555561,
-      0.569386,
-      318891e-9,
-      0,
-      0.587302,
-      0.548785,
-      3072e-7,
-      0,
-      0.619048,
-      0.528146,
-      29361e-8,
-      0,
-      0.650794,
-      0.507872,
-      281709e-9,
-      0,
-      0.68254,
-      0.487805,
-      268627e-9,
-      0,
-      0.714286,
-      0.468196,
-      255887e-9,
-      0,
-      0.746032,
-      0.448922,
-      243997e-9,
-      0,
-      0.777778,
-      0.430093,
-      231662e-9,
-      0,
-      0.809524,
-      0.411845,
-      220339e-9,
-      0,
-      0.84127,
-      0.393808,
-      208694e-9,
-      0,
-      0.873016,
-      0.376615,
-      198045e-9,
-      0,
-      0.904762,
-      0.359655,
-      187375e-9,
-      0,
-      0.936508,
-      0.343452,
-      177371e-9,
-      0,
-      0.968254,
-      0.32765,
-      167525e-9,
-      0,
-      1,
-      1,
-      169351e-10,
-      0,
-      0,
-      1,
-      169356e-10,
-      0,
-      0,
-      1,
-      169427e-10,
-      0,
-      0,
-      0.999999,
-      169736e-10,
-      0,
-      0,
-      0.999998,
-      170575e-10,
-      0,
-      0,
-      0.999995,
-      172372e-10,
-      0,
-      0,
-      0.99999,
-      175739e-10,
-      0,
-      0,
-      0.999979,
-      181568e-10,
-      0,
-      0,
-      0.999966,
-      191206e-10,
-      0,
-      0,
-      0.999944,
-      20677e-9,
-      0,
-      0,
-      0.999912,
-      231644e-10,
-      0,
-      0,
-      0.999869,
-      271268e-10,
-      0,
-      0,
-      0.999811,
-      334272e-10,
-      0,
-      0,
-      0.99973,
-      433979e-10,
-      0,
-      0,
-      0.999617,
-      590083e-10,
-      0,
-      680315e-10,
-      0.999445,
-      829497e-10,
-      0,
-      612796e-9,
-      0.999138,
-      118019e-9,
-      0,
-      187408e-8,
-      0.998095,
-      156712e-9,
-      0,
-      395791e-8,
-      0.993919,
-      125054e-9,
-      0,
-      692144e-8,
-      0.991333,
-      126091e-9,
-      0,
-      0.0107962,
-      0.989226,
-      144912e-9,
-      0,
-      0.0155986,
-      0.986954,
-      175737e-9,
-      0,
-      0.0213364,
-      0.983982,
-      213883e-9,
-      0,
-      0.0280114,
-      0.979128,
-      234526e-9,
-      0,
-      0.0356226,
-      0.973327,
-      243725e-9,
-      0,
-      0.0441668,
-      0.967416,
-      2773e-7,
-      0,
-      0.0536399,
-      0.959729,
-      308799e-9,
-      0,
-      0.0640376,
-      0.949758,
-      322447e-9,
-      0,
-      0.0753554,
-      0.939173,
-      350021e-9,
-      0,
-      0.0875893,
-      0.9296,
-      370089e-9,
-      0,
-      0.100736,
-      0.921181,
-      391365e-9,
-      0,
-      0.114793,
-      0.91164,
-      413636e-9,
-      0,
-      0.129759,
-      0.900435,
-      427068e-9,
-      0,
-      0.145632,
-      0.888183,
-      441046e-9,
-      0,
-      0.162412,
-      0.874772,
-      454968e-9,
-      0,
-      0.180101,
-      0.859566,
-      461882e-9,
-      0,
-      0.1987,
-      0.843579,
-      471556e-9,
-      0,
-      0.218213,
-      0.826453,
-      474335e-9,
-      0,
-      0.238641,
-      0.809164,
-      477078e-9,
-      0,
-      0.259989,
-      0.792179,
-      47755e-8,
-      0,
-      0.282262,
-      0.773866,
-      472573e-9,
-      0,
-      0.305464,
-      0.754944,
-      469765e-9,
-      0,
-      0.329599,
-      0.735133,
-      462371e-9,
-      0,
-      0.35467,
-      0.714858,
-      453674e-9,
-      0,
-      0.380678,
-      0.694829,
-      443888e-9,
-      0,
-      0.407622,
-      0.674453,
-      432052e-9,
-      0,
-      0.435493,
-      0.653685,
-      420315e-9,
-      0,
-      0.464275,
-      0.632666,
-      406829e-9,
-      0,
-      0.493938,
-      0.611676,
-      392234e-9,
-      0,
-      0.524422,
-      0.591193,
-      379208e-9,
-      0,
-      0.555624,
-      0.570145,
-      36319e-8,
-      0,
-      0.587302,
-      0.549566,
-      349111e-9,
-      0,
-      0.619048,
-      0.529278,
-      334166e-9,
-      0,
-      0.650794,
-      0.509026,
-      318456e-9,
-      0,
-      0.68254,
-      0.489186,
-      30449e-8,
-      0,
-      0.714286,
-      0.469662,
-      289051e-9,
-      0,
-      0.746032,
-      0.450691,
-      275494e-9,
-      0,
-      0.777778,
-      0.431841,
-      261437e-9,
-      0,
-      0.809524,
-      0.413752,
-      247846e-9,
-      0,
-      0.84127,
-      0.395951,
-      235085e-9,
-      0,
-      0.873016,
-      0.378633,
-      222245e-9,
-      0,
-      0.904762,
-      0.36194,
-      210533e-9,
-      0,
-      0.936508,
-      0.345599,
-      198494e-9,
-      0,
-      0.968254,
-      0.329999,
-      188133e-9,
-      0,
-      1,
-      1,
-      269663e-10,
-      0,
-      0,
-      1,
-      26967e-9,
-      0,
-      0,
-      1,
-      269772e-10,
-      0,
-      0,
-      0.999999,
-      270214e-10,
-      0,
-      0,
-      0.999998,
-      271415e-10,
-      0,
-      0,
-      0.999994,
-      27398e-9,
-      0,
-      0,
-      0.999988,
-      278771e-10,
-      0,
-      0,
-      0.999977,
-      287019e-10,
-      0,
-      0,
-      0.999961,
-      300544e-10,
-      0,
-      0,
-      0.999937,
-      322138e-10,
-      0,
-      0,
-      0.999904,
-      356163e-10,
-      0,
-      0,
-      0.999854,
-      409465e-10,
-      0,
-      0,
-      0.99979,
-      492651e-10,
-      0,
-      0,
-      0.999699,
-      621722e-10,
-      0,
-      88288e-11,
-      0.999572,
-      819715e-10,
-      0,
-      223369e-9,
-      0.999381,
-      111689e-9,
-      0,
-      105414e-8,
-      0.999016,
-      153862e-9,
-      0,
-      26493e-7,
-      0.997437,
-      187667e-9,
-      0,
-      508608e-8,
-      0.993545,
-      155672e-9,
-      0,
-      840554e-8,
-      0.991135,
-      161455e-9,
-      0,
-      0.012629,
-      0.989157,
-      188241e-9,
-      0,
-      0.0177661,
-      0.986874,
-      226229e-9,
-      0,
-      0.0238198,
-      0.983714,
-      268668e-9,
-      0,
-      0.0307887,
-      0.978301,
-      277109e-9,
-      0,
-      0.0386688,
-      0.973227,
-      303446e-9,
-      0,
-      0.0474554,
-      0.967317,
-      341851e-9,
-      0,
-      0.0571428,
-      0.959477,
-      370885e-9,
-      0,
-      0.0677256,
-      0.950012,
-      392753e-9,
-      0,
-      0.0791988,
-      0.939484,
-      42781e-8,
-      0,
-      0.0915576,
-      0.928135,
-      443866e-9,
-      0,
-      0.104798,
-      0.919819,
-      472959e-9,
-      0,
-      0.118918,
-      0.910049,
-      491551e-9,
-      0,
-      0.133915,
-      0.899181,
-      512616e-9,
-      0,
-      0.149788,
-      0.886881,
-      523563e-9,
-      0,
-      0.166537,
-      0.87359,
-      540183e-9,
-      0,
-      0.184164,
-      0.858613,
-      547386e-9,
-      0,
-      0.202669,
-      0.842809,
-      554809e-9,
-      0,
-      0.222056,
-      0.825727,
-      558316e-9,
-      0,
-      0.242329,
-      0.808086,
-      557824e-9,
-      0,
-      0.263492,
-      0.790728,
-      556346e-9,
-      0,
-      0.285551,
-      0.772987,
-      552672e-9,
-      0,
-      0.30851,
-      0.7541,
-      543738e-9,
-      0,
-      0.332376,
-      0.734669,
-      536107e-9,
-      0,
-      0.357153,
-      0.714411,
-      523342e-9,
-      0,
-      0.382845,
-      0.694196,
-      512238e-9,
-      0,
-      0.409454,
-      0.674252,
-      497465e-9,
-      0,
-      0.436977,
-      0.65357,
-      481096e-9,
-      0,
-      0.465404,
-      0.632999,
-      467054e-9,
-      0,
-      0.494713,
-      0.611994,
-      448771e-9,
-      0,
-      0.524864,
-      0.591604,
-      431889e-9,
-      0,
-      0.555779,
-      0.571134,
-      415238e-9,
-      0,
-      0.587302,
-      0.550528,
-      396369e-9,
-      0,
-      0.619048,
-      0.530292,
-      379477e-9,
-      0,
-      0.650794,
-      0.510364,
-      361488e-9,
-      0,
-      0.68254,
-      0.490749,
-      343787e-9,
-      0,
-      0.714286,
-      0.471266,
-      327822e-9,
-      0,
-      0.746032,
-      0.452462,
-      310626e-9,
-      0,
-      0.777778,
-      0.433907,
-      295352e-9,
-      0,
-      0.809524,
-      0.415659,
-      279179e-9,
-      0,
-      0.84127,
-      0.398138,
-      264685e-9,
-      0,
-      0.873016,
-      0.380833,
-      249905e-9,
-      0,
-      0.904762,
-      0.364247,
-      236282e-9,
-      0,
-      0.936508,
-      0.348041,
-      222905e-9,
-      0,
-      0.968254,
-      0.332389,
-      210522e-9,
-      0,
-      1,
-      1,
-      420604e-10,
-      0,
-      0,
-      1,
-      420614e-10,
-      0,
-      0,
-      1,
-      420757e-10,
-      0,
-      0,
-      0.999999,
-      42138e-9,
-      0,
-      0,
-      0.999997,
-      423067e-10,
-      0,
-      0,
-      0.999993,
-      426668e-10,
-      0,
-      0,
-      0.999986,
-      433372e-10,
-      0,
-      0,
-      0.999974,
-      444857e-10,
-      0,
-      0,
-      0.999956,
-      463554e-10,
-      0,
-      0,
-      0.99993,
-      493105e-10,
-      0,
-      0,
-      0.999892,
-      539077e-10,
-      0,
-      0,
-      0.999838,
-      610005e-10,
-      0,
-      0,
-      0.999767,
-      718822e-10,
-      0,
-      0,
-      0.999666,
-      884581e-10,
-      0,
-      365471e-10,
-      0.999525,
-      113398e-9,
-      0,
-      485623e-9,
-      0.999311,
-      150043e-9,
-      0,
-      162096e-8,
-      0.998865,
-      200063e-9,
-      0,
-      355319e-8,
-      0.996278,
-      211014e-9,
-      0,
-      633818e-8,
-      0.992956,
-      189672e-9,
-      0,
-      0.0100043,
-      0.991017,
-      210262e-9,
-      0,
-      0.0145648,
-      0.989055,
-      244292e-9,
-      0,
-      0.0200237,
-      0.986741,
-      290481e-9,
-      0,
-      0.0263798,
-      0.983288,
-      334303e-9,
-      0,
-      0.033629,
-      0.977784,
-      340307e-9,
-      0,
-      0.0417652,
-      0.973037,
-      377864e-9,
-      0,
-      0.0507821,
-      0.967181,
-      4239e-7,
-      0,
-      0.060673,
-      0.958971,
-      443854e-9,
-      0,
-      0.0714314,
-      0.950093,
-      483039e-9,
-      0,
-      0.0830518,
-      0.939552,
-      517934e-9,
-      0,
-      0.0955288,
-      0.927678,
-      539449e-9,
-      0,
-      0.108859,
-      0.918278,
-      568604e-9,
-      0,
-      0.123038,
-      0.908449,
-      588505e-9,
-      0,
-      0.138065,
-      0.897713,
-      612473e-9,
-      0,
-      0.153938,
-      0.885533,
-      625575e-9,
-      0,
-      0.170657,
-      0.872131,
-      63854e-8,
-      0,
-      0.188224,
-      0.857517,
-      647034e-9,
-      0,
-      0.20664,
-      0.841796,
-      65209e-8,
-      0,
-      0.225909,
-      0.824726,
-      6544e-7,
-      0,
-      0.246035,
-      0.807297,
-      655744e-9,
-      0,
-      0.267022,
-      0.789058,
-      646716e-9,
-      0,
-      0.288878,
-      0.77189,
-      643898e-9,
-      0,
-      0.311607,
-      0.753082,
-      629973e-9,
-      0,
-      0.335216,
-      0.7341,
-      621564e-9,
-      0,
-      0.359713,
-      0.714094,
-      605171e-9,
-      0,
-      0.385103,
-      0.693839,
-      588752e-9,
-      0,
-      0.41139,
-      0.673891,
-      573294e-9,
-      0,
-      0.438576,
-      0.653565,
-      552682e-9,
-      0,
-      0.466656,
-      0.633326,
-      533446e-9,
-      0,
-      0.495617,
-      0.612582,
-      514635e-9,
-      0,
-      0.525431,
-      0.59205,
-      49303e-8,
-      0,
-      0.556041,
-      0.571918,
-      471842e-9,
-      0,
-      0.587338,
-      0.551572,
-      451713e-9,
-      0,
-      0.619048,
-      0.531553,
-      430049e-9,
-      0,
-      0.650794,
-      0.51175,
-      410445e-9,
-      0,
-      0.68254,
-      0.49238,
-      390098e-9,
-      0,
-      0.714286,
-      0.473143,
-      370033e-9,
-      0,
-      0.746032,
-      0.45423,
-      351205e-9,
-      0,
-      0.777778,
-      0.435963,
-      332049e-9,
-      0,
-      0.809524,
-      0.41787,
-      315021e-9,
-      0,
-      0.84127,
-      0.400387,
-      297315e-9,
-      0,
-      0.873016,
-      0.383332,
-      281385e-9,
-      0,
-      0.904762,
-      0.366665,
-      265397e-9,
-      0,
-      0.936508,
-      0.350633,
-      250601e-9,
-      0,
-      0.968254,
-      0.334964,
-      23589e-8,
-      0,
-      1,
-      1,
-      643736e-10,
-      0,
-      0,
-      1,
-      64375e-9,
-      0,
-      0,
-      1,
-      643947e-10,
-      0,
-      0,
-      0.999999,
-      64481e-9,
-      0,
-      0,
-      0.999997,
-      647143e-10,
-      0,
-      0,
-      0.999994,
-      652119e-10,
-      0,
-      0,
-      0.999985,
-      661359e-10,
-      0,
-      0,
-      0.999972,
-      677116e-10,
-      0,
-      0,
-      0.999952,
-      702599e-10,
-      0,
-      0,
-      0.999922,
-      742517e-10,
-      0,
-      0,
-      0.99988,
-      803906e-10,
-      0,
-      0,
-      0.99982,
-      897315e-10,
-      0,
-      0,
-      0.999741,
-      103838e-9,
-      0,
-      0,
-      0.999629,
-      12496e-8,
-      0,
-      149024e-9,
-      0.999474,
-      156161e-9,
-      0,
-      861027e-9,
-      0.999229,
-      201034e-9,
-      0,
-      231198e-8,
-      0.998662,
-      259069e-9,
-      0,
-      458147e-8,
-      0.995299,
-      245439e-9,
-      0,
-      770895e-8,
-      0.992732,
-      24498e-8,
-      0,
-      0.0117126,
-      0.990847,
-      273211e-9,
-      0,
-      0.0165989,
-      0.988911,
-      316492e-9,
-      0,
-      0.0223674,
-      0.98654,
-      37161e-8,
-      0,
-      0.0290135,
-      0.982636,
-      410352e-9,
-      0,
-      0.0365309,
-      0.977346,
-      421756e-9,
-      0,
-      0.0449117,
-      0.972909,
-      475578e-9,
-      0,
-      0.0541481,
-      0.966821,
-      522482e-9,
-      0,
-      0.0642326,
-      0.958686,
-      545008e-9,
-      0,
-      0.075158,
-      0.949754,
-      589286e-9,
-      0,
-      0.0869181,
-      0.939184,
-      619995e-9,
-      0,
-      0.0995074,
-      0.927505,
-      654266e-9,
-      0,
-      0.112922,
-      0.916606,
-      682362e-9,
-      0,
-      0.127157,
-      0.906707,
-      704286e-9,
-      0,
-      0.142212,
-      0.895937,
-      725909e-9,
-      0,
-      0.158085,
-      0.883913,
-      743939e-9,
-      0,
-      0.174776,
-      0.870642,
-      755157e-9,
-      0,
-      0.192287,
-      0.856241,
-      764387e-9,
-      0,
-      0.210619,
-      0.84069,
-      771032e-9,
-      0,
-      0.229775,
-      0.823728,
-      765906e-9,
-      0,
-      0.249761,
-      0.806481,
-      767604e-9,
-      0,
-      0.270582,
-      0.787924,
-      754385e-9,
-      0,
-      0.292243,
-      0.770588,
-      749668e-9,
-      0,
-      0.314753,
-      0.751991,
-      731613e-9,
-      0,
-      0.338118,
-      0.733407,
-      717655e-9,
-      0,
-      0.362347,
-      0.713688,
-      700604e-9,
-      0,
-      0.387447,
-      0.693595,
-      678765e-9,
-      0,
-      0.413424,
-      0.673426,
-      657042e-9,
-      0,
-      0.440284,
-      0.65359,
-      635892e-9,
-      0,
-      0.468027,
-      0.633576,
-      611569e-9,
-      0,
-      0.496645,
-      0.613144,
-      586011e-9,
-      0,
-      0.526122,
-      0.592711,
-      563111e-9,
-      0,
-      0.556417,
-      0.572722,
-      537699e-9,
-      0,
-      0.587451,
-      0.552762,
-      512556e-9,
-      0,
-      0.619048,
-      0.532985,
-      489757e-9,
-      0,
-      0.650794,
-      0.513219,
-      464139e-9,
-      0,
-      0.68254,
-      0.493992,
-      442193e-9,
-      0,
-      0.714286,
-      0.47509,
-      418629e-9,
-      0,
-      0.746032,
-      0.456287,
-      397045e-9,
-      0,
-      0.777778,
-      0.438152,
-      375504e-9,
-      0,
-      0.809524,
-      0.420294,
-      35492e-8,
-      0,
-      0.84127,
-      0.402749,
-      335327e-9,
-      0,
-      0.873016,
-      0.385879,
-      316422e-9,
-      0,
-      0.904762,
-      0.369352,
-      298333e-9,
-      0,
-      0.936508,
-      0.353301,
-      281417e-9,
-      0,
-      0.968254,
-      0.337781,
-      265203e-9,
-      0,
-      1,
-      1,
-      968267e-10,
-      0,
-      0,
-      1,
-      968284e-10,
-      0,
-      0,
-      1,
-      968556e-10,
-      0,
-      0,
-      0.999999,
-      969733e-10,
-      0,
-      0,
-      0.999997,
-      972913e-10,
-      0,
-      0,
-      0.999993,
-      979688e-10,
-      0,
-      0,
-      0.999984,
-      992239e-10,
-      0,
-      0,
-      0.999969,
-      101356e-9,
-      0,
-      0,
-      0.999946,
-      104784e-9,
-      0,
-      0,
-      0.999913,
-      110111e-9,
-      0,
-      0,
-      0.999868,
-      118217e-9,
-      0,
-      0,
-      0.999801,
-      130396e-9,
-      0,
-      0,
-      0.999712,
-      148523e-9,
-      0,
-      124907e-10,
-      0.999589,
-      175233e-9,
-      0,
-      355405e-9,
-      0.999416,
-      213999e-9,
-      0,
-      13528e-7,
-      0.999136,
-      268529e-9,
-      0,
-      312557e-8,
-      0.998367,
-      333088e-9,
-      0,
-      573045e-8,
-      0.994701,
-      304757e-9,
-      0,
-      919397e-8,
-      0.992497,
-      318031e-9,
-      0,
-      0.0135261,
-      0.990608,
-      353863e-9,
-      0,
-      0.0187278,
-      0.988715,
-      409044e-9,
-      0,
-      0.0247947,
-      0.986241,
-      472967e-9,
-      0,
-      0.0317196,
-      0.981696,
-      495104e-9,
-      0,
-      0.039494,
-      0.977097,
-      532873e-9,
-      0,
-      0.0481087,
-      0.972583,
-      594447e-9,
-      0,
-      0.0575549,
-      0.966142,
-      636867e-9,
-      0,
-      0.0678242,
-      0.95823,
-      669899e-9,
-      0,
-      0.0789089,
-      0.949677,
-      719499e-9,
-      0,
-      0.0908023,
-      0.939226,
-      750584e-9,
-      0,
-      0.103499,
-      0.927501,
-      793183e-9,
-      0,
-      0.116993,
-      0.915199,
-      81995e-8,
-      0,
-      0.131282,
-      0.90498,
-      847654e-9,
-      0,
-      0.146364,
-      0.894243,
-      868929e-9,
-      0,
-      0.162237,
-      0.882154,
-      884278e-9,
-      0,
-      0.178902,
-      0.869161,
-      898108e-9,
-      0,
-      0.196358,
-      0.854751,
-      901254e-9,
-      0,
-      0.21461,
-      0.839368,
-      90679e-8,
-      0,
-      0.23366,
-      0.822874,
-      901541e-9,
-      0,
-      0.253512,
-      0.805514,
-      897297e-9,
-      0,
-      0.274174,
-      0.78716,
-      881856e-9,
-      0,
-      0.29565,
-      0.769061,
-      870032e-9,
-      0,
-      0.31795,
-      0.751,
-      851719e-9,
-      0,
-      0.341081,
-      0.732614,
-      830671e-9,
-      0,
-      0.365053,
-      0.713171,
-      806569e-9,
-      0,
-      0.389874,
-      0.693472,
-      78338e-8,
-      0,
-      0.415553,
-      0.673528,
-      756404e-9,
-      0,
-      0.442098,
-      0.653397,
-      726872e-9,
-      0,
-      0.469512,
-      0.633781,
-      700494e-9,
-      0,
-      0.497794,
-      0.613877,
-      67105e-8,
-      0,
-      0.526935,
-      0.593506,
-      640361e-9,
-      0,
-      0.556908,
-      0.573667,
-      613502e-9,
-      0,
-      0.587657,
-      0.553932,
-      583177e-9,
-      0,
-      0.61906,
-      0.534345,
-      554375e-9,
-      0,
-      0.650794,
-      0.515042,
-      527811e-9,
-      0,
-      0.68254,
-      0.495674,
-      499367e-9,
-      0,
-      0.714286,
-      0.477132,
-      47429e-8,
-      0,
-      0.746032,
-      0.458609,
-      447726e-9,
-      0,
-      0.777778,
-      0.440354,
-      424205e-9,
-      0,
-      0.809524,
-      0.422765,
-      399549e-9,
-      0,
-      0.84127,
-      0.405472,
-      378315e-9,
-      0,
-      0.873016,
-      0.388482,
-      355327e-9,
-      0,
-      0.904762,
-      0.372191,
-      336122e-9,
-      0,
-      0.936508,
-      0.356099,
-      315247e-9,
-      0,
-      0.968254,
-      0.340737,
-      29794e-8,
-      0,
-      1,
-      1,
-      143327e-9,
-      0,
-      0,
-      1,
-      14333e-8,
-      0,
-      0,
-      1,
-      143366e-9,
-      0,
-      0,
-      0.999999,
-      143524e-9,
-      0,
-      0,
-      0.999996,
-      143952e-9,
-      0,
-      0,
-      0.999991,
-      144862e-9,
-      0,
-      0,
-      0.999981,
-      146544e-9,
-      0,
-      0,
-      0.999966,
-      149391e-9,
-      0,
-      0,
-      0.999941,
-      153946e-9,
-      0,
-      0,
-      0.999905,
-      160971e-9,
-      0,
-      0,
-      0.999852,
-      171562e-9,
-      0,
-      0,
-      0.99978,
-      18729e-8,
-      0,
-      0,
-      0.999681,
-      210386e-9,
-      0,
-      826239e-10,
-      0.999546,
-      243906e-9,
-      0,
-      664807e-9,
-      0.999352,
-      291739e-9,
-      0,
-      196192e-8,
-      0.999027,
-      357419e-9,
-      0,
-      405941e-8,
-      0.997886,
-      422349e-9,
-      0,
-      699664e-8,
-      0.99419,
-      385008e-9,
-      0,
-      0.0107896,
-      0.99214,
-      409775e-9,
-      0,
-      0.0154415,
-      0.990274,
-      456418e-9,
-      0,
-      0.0209488,
-      0.988455,
-      527008e-9,
-      0,
-      0.0273037,
-      0.985804,
-      597685e-9,
-      0,
-      0.0344969,
-      0.98103,
-      613124e-9,
-      0,
-      0.0425183,
-      0.976674,
-      668321e-9,
-      0,
-      0.0513575,
-      0.972021,
-      736985e-9,
-      0,
-      0.0610046,
-      0.965274,
-      773789e-9,
-      0,
-      0.0714508,
-      0.958046,
-      830852e-9,
-      0,
-      0.0826877,
-      0.949333,
-      875766e-9,
-      0,
-      0.0947085,
-      0.939135,
-      917088e-9,
-      0,
-      0.107507,
-      0.927119,
-      952244e-9,
-      0,
-      0.121078,
-      0.91469,
-      990626e-9,
-      0,
-      0.135419,
-      0.903006,
-      101304e-8,
-      0,
-      0.150526,
-      0.892368,
-      103834e-8,
-      0,
-      0.166399,
-      0.880231,
-      105002e-8,
-      0,
-      0.183038,
-      0.867432,
-      106331e-8,
-      0,
-      0.200443,
-      0.853208,
-      106783e-8,
-      0,
-      0.218618,
-      0.837956,
-      106458e-8,
-      0,
-      0.237566,
-      0.821772,
-      105945e-8,
-      0,
-      0.257291,
-      0.804328,
-      104685e-8,
-      0,
-      0.2778,
-      0.786465,
-      103178e-8,
-      0,
-      0.2991,
-      0.768004,
-      101077e-8,
-      0,
-      0.321199,
-      0.74972,
-      985504e-9,
-      0,
-      0.344106,
-      0.731682,
-      962893e-9,
-      0,
-      0.36783,
-      0.712813,
-      932146e-9,
-      0,
-      0.392383,
-      0.693139,
-      89871e-8,
-      0,
-      0.417774,
-      0.673566,
-      869678e-9,
-      0,
-      0.444013,
-      0.653483,
-      835525e-9,
-      0,
-      0.471107,
-      0.633891,
-      799853e-9,
-      0,
-      0.49906,
-      0.614433,
-      766838e-9,
-      0,
-      0.527869,
-      0.594586,
-      732227e-9,
-      0,
-      0.557517,
-      0.574769,
-      696442e-9,
-      0,
-      0.587966,
-      0.555149,
-      663935e-9,
-      0,
-      0.61913,
-      0.535898,
-      629826e-9,
-      0,
-      0.650794,
-      0.516753,
-      596486e-9,
-      0,
-      0.68254,
-      0.497816,
-      567078e-9,
-      0,
-      0.714286,
-      0.479034,
-      534399e-9,
-      0,
-      0.746032,
-      0.460975,
-      507013e-9,
-      0,
-      0.777778,
-      0.442935,
-      477421e-9,
-      0,
-      0.809524,
-      0.425263,
-      451101e-9,
-      0,
-      0.84127,
-      0.408248,
-      424964e-9,
-      0,
-      0.873016,
-      0.391339,
-      39993e-8,
-      0,
-      0.904762,
-      0.37513,
-      377619e-9,
-      0,
-      0.936508,
-      0.359172,
-      354418e-9,
-      0,
-      0.968254,
-      0.343876,
-      334823e-9,
-      0,
-      1,
-      1,
-      209042e-9,
-      0,
-      0,
-      1,
-      209045e-9,
-      0,
-      0,
-      1,
-      209093e-9,
-      0,
-      0,
-      0.999999,
-      209304e-9,
-      0,
-      0,
-      0.999996,
-      209871e-9,
-      0,
-      0,
-      0.999991,
-      211078e-9,
-      0,
-      0,
-      0.999979,
-      213304e-9,
-      0,
-      0,
-      0.999963,
-      217061e-9,
-      0,
-      0,
-      0.999933,
-      223042e-9,
-      0,
-      0,
-      0.999894,
-      232206e-9,
-      0,
-      0,
-      0.999837,
-      245901e-9,
-      0,
-      0,
-      0.999756,
-      266023e-9,
-      0,
-      102927e-11,
-      0.999648,
-      295204e-9,
-      0,
-      233468e-9,
-      0.999499,
-      336958e-9,
-      0,
-      108237e-8,
-      0.999283,
-      395563e-9,
-      0,
-      268832e-8,
-      0.998896,
-      473785e-9,
-      0,
-      511138e-8,
-      0.997006,
-      520008e-9,
-      0,
-      837705e-8,
-      0.993819,
-      497261e-9,
-      0,
-      0.0124928,
-      0.991632,
-      523722e-9,
-      0,
-      0.0174561,
-      0.989875,
-      587258e-9,
-      0,
-      0.0232596,
-      0.988109,
-      676329e-9,
-      0,
-      0.0298932,
-      0.985155,
-      747701e-9,
-      0,
-      0.0373453,
-      0.980479,
-      768803e-9,
-      0,
-      0.0456045,
-      0.976271,
-      841054e-9,
-      0,
-      0.0546593,
-      0.971347,
-      911469e-9,
-      0,
-      0.0644994,
-      0.964528,
-      953057e-9,
-      0,
-      0.0751152,
-      0.957632,
-      102221e-8,
-      0,
-      0.0864981,
-      0.948681,
-      106122e-8,
-      0,
-      0.0986407,
-      0.938716,
-      111857e-8,
-      0,
-      0.111537,
-      0.926629,
-      114762e-8,
-      0,
-      0.125182,
-      0.914025,
-      118995e-8,
-      0,
-      0.139571,
-      0.901026,
-      121228e-8,
-      0,
-      0.154703,
-      0.890358,
-      123946e-8,
-      0,
-      0.170576,
-      0.878283,
-      12527e-7,
-      0,
-      0.18719,
-      0.865459,
-      125536e-8,
-      0,
-      0.204547,
-      0.851407,
-      126134e-8,
-      0,
-      0.222648,
-      0.836276,
-      124759e-8,
-      0,
-      0.241498,
-      0.820436,
-      124443e-8,
-      0,
-      0.261101,
-      0.803253,
-      122071e-8,
-      0,
-      0.281465,
-      0.785562,
-      120107e-8,
-      0,
-      0.302595,
-      0.76718,
-      117762e-8,
-      0,
-      0.324501,
-      0.748551,
-      114289e-8,
-      0,
-      0.347192,
-      0.730564,
-      110872e-8,
-      0,
-      0.370679,
-      0.712253,
-      107636e-8,
-      0,
-      0.394973,
-      0.692867,
-      103646e-8,
-      0,
-      0.420085,
-      0.673695,
-      996793e-9,
-      0,
-      0.446027,
-      0.653912,
-      95675e-8,
-      0,
-      0.47281,
-      0.634129,
-      916739e-9,
-      0,
-      0.500441,
-      0.615004,
-      874401e-9,
-      0,
-      0.528921,
-      0.595587,
-      833411e-9,
-      0,
-      0.558244,
-      0.575965,
-      794556e-9,
-      0,
-      0.588384,
-      0.5566,
-      75196e-8,
-      0,
-      0.619281,
-      0.537428,
-      716381e-9,
-      0,
-      0.650795,
-      0.518623,
-      676558e-9,
-      0,
-      0.68254,
-      0.499964,
-      64074e-8,
-      0,
-      0.714286,
-      0.481356,
-      605984e-9,
-      0,
-      0.746032,
-      0.463279,
-      570256e-9,
-      0,
-      0.777778,
-      0.445673,
-      540138e-9,
-      0,
-      0.809524,
-      0.428032,
-      507299e-9,
-      0,
-      0.84127,
-      0.411112,
-      479553e-9,
-      0,
-      0.873016,
-      0.394444,
-      450737e-9,
-      0,
-      0.904762,
-      0.378247,
-      424269e-9,
-      0,
-      0.936508,
-      0.362415,
-      399111e-9,
-      0,
-      0.968254,
-      0.347103,
-      375274e-9,
-      0,
-      1,
-      1,
-      300729e-9,
-      0,
-      0,
-      1,
-      300733e-9,
-      0,
-      0,
-      1,
-      300797e-9,
-      0,
-      0,
-      0.999998,
-      301072e-9,
-      0,
-      0,
-      0.999996,
-      301817e-9,
-      0,
-      0,
-      0.999989,
-      303398e-9,
-      0,
-      0,
-      0.999977,
-      306309e-9,
-      0,
-      0,
-      0.999958,
-      311209e-9,
-      0,
-      0,
-      0.999927,
-      318975e-9,
-      0,
-      0,
-      0.999884,
-      330804e-9,
-      0,
-      0,
-      0.99982,
-      34834e-8,
-      0,
-      0,
-      0.999733,
-      373854e-9,
-      0,
-      326995e-10,
-      0.999613,
-      410424e-9,
-      0,
-      477174e-9,
-      0.999447,
-      462047e-9,
-      0,
-      161099e-8,
-      0.999204,
-      533322e-9,
-      0,
-      353153e-8,
-      0.998725,
-      624964e-9,
-      0,
-      627965e-8,
-      0.995871,
-      631786e-9,
-      0,
-      98693e-7,
-      0.993194,
-      632017e-9,
-      0,
-      0.0143011,
-      0.991541,
-      68923e-8,
-      0,
-      0.019568,
-      0.989773,
-      766892e-9,
-      0,
-      0.0256593,
-      0.987647,
-      863668e-9,
-      0,
-      0.0325625,
-      0.984193,
-      922089e-9,
-      0,
-      0.0402647,
-      0.980016,
-      970749e-9,
-      0,
-      0.0487532,
-      0.975859,
-      106027e-8,
-      0,
-      0.058016,
-      0.970514,
-      112239e-8,
-      0,
-      0.0680419,
-      0.963625,
-      117212e-8,
-      0,
-      0.0788208,
-      0.956959,
-      125211e-8,
-      0,
-      0.0903439,
-      0.947956,
-      129411e-8,
-      0,
-      0.102604,
-      0.93809,
-      135879e-8,
-      0,
-      0.115594,
-      0.92659,
-      139309e-8,
-      0,
-      0.129309,
-      0.913829,
-      143253e-8,
-      0,
-      0.143745,
-      0.90005,
-      145809e-8,
-      0,
-      0.158901,
-      0.888129,
-      14748e-7,
-      0,
-      0.174774,
-      0.87607,
-      148756e-8,
-      0,
-      0.191365,
-      0.863461,
-      148714e-8,
-      0,
-      0.208674,
-      0.849594,
-      148892e-8,
-      0,
-      0.226705,
-      0.834531,
-      146496e-8,
-      0,
-      0.245461,
-      0.81903,
-      14579e-7,
-      0,
-      0.264947,
-      0.802122,
-      143039e-8,
-      0,
-      0.28517,
-      0.78445,
-      139717e-8,
-      0,
-      0.306137,
-      0.766434,
-      136312e-8,
-      0,
-      0.327857,
-      0.747816,
-      132597e-8,
-      0,
-      0.350341,
-      0.729519,
-      128323e-8,
-      0,
-      0.373598,
-      0.711454,
-      123803e-8,
-      0,
-      0.397642,
-      0.692699,
-      119097e-8,
-      0,
-      0.422485,
-      0.673723,
-      114565e-8,
-      0,
-      0.448139,
-      0.654386,
-      109552e-8,
-      0,
-      0.474619,
-      0.634673,
-      104553e-8,
-      0,
-      0.501933,
-      0.615554,
-      99985e-8,
-      0,
-      0.530089,
-      0.596462,
-      948207e-9,
-      0,
-      0.559087,
-      0.577385,
-      902299e-9,
-      0,
-      0.588913,
-      0.558257,
-      856448e-9,
-      0,
-      0.619525,
-      0.5392,
-      810395e-9,
-      0,
-      0.650826,
-      0.520543,
-      768558e-9,
-      0,
-      0.68254,
-      0.502206,
-      7239e-7,
-      0,
-      0.714286,
-      0.48402,
-      685794e-9,
-      0,
-      0.746032,
-      0.465779,
-      64471e-8,
-      0,
-      0.777778,
-      0.448455,
-      609583e-9,
-      0,
-      0.809524,
-      0.431091,
-      57227e-8,
-      0,
-      0.84127,
-      0.414147,
-      54042e-8,
-      0,
-      0.873016,
-      0.39765,
-      506545e-9,
-      0,
-      0.904762,
-      0.381576,
-      477635e-9,
-      0,
-      0.936508,
-      0.365881,
-      448446e-9,
-      0,
-      0.968254,
-      0.350582,
-      421424e-9,
-      0,
-      1,
-      1,
-      427144e-9,
-      0,
-      0,
-      1,
-      427151e-9,
-      0,
-      0,
-      1,
-      427232e-9,
-      0,
-      0,
-      0.999998,
-      42759e-8,
-      0,
-      0,
-      0.999995,
-      428555e-9,
-      0,
-      0,
-      0.999988,
-      430603e-9,
-      0,
-      0,
-      0.999976,
-      434368e-9,
-      0,
-      0,
-      0.999952,
-      440688e-9,
-      0,
-      0,
-      0.999919,
-      450667e-9,
-      0,
-      0,
-      0.999871,
-      46578e-8,
-      0,
-      0,
-      0.999801,
-      488024e-9,
-      0,
-      0,
-      0.999704,
-      520092e-9,
-      0,
-      129791e-9,
-      0.999572,
-      565553e-9,
-      0,
-      821056e-9,
-      0.999389,
-      628906e-9,
-      0,
-      225241e-8,
-      0.999114,
-      714911e-9,
-      0,
-      449109e-8,
-      0.998488,
-      819218e-9,
-      0,
-      756249e-8,
-      0.995234,
-      80415e-8,
-      0,
-      0.0114716,
-      0.993021,
-      830181e-9,
-      0,
-      0.0162131,
-      0.991407,
-      902645e-9,
-      0,
-      0.021776,
-      0.989625,
-      996934e-9,
-      0,
-      0.0281471,
-      0.987064,
-      109707e-8,
-      0,
-      0.0353118,
-      0.983265,
-      114353e-8,
-      0,
-      0.0432562,
-      0.979535,
-      12272e-7,
-      0,
-      0.0519665,
-      0.975224,
-      132642e-8,
-      0,
-      0.0614298,
-      0.969574,
-      138092e-8,
-      0,
-      0.0716348,
-      0.963021,
-      145896e-8,
-      0,
-      0.0825709,
-      0.956046,
-      152834e-8,
-      0,
-      0.094229,
-      0.947136,
-      158217e-8,
-      0,
-      0.106602,
-      0.937313,
-      16347e-7,
-      0,
-      0.119682,
-      0.926073,
-      168383e-8,
-      0,
-      0.133465,
-      0.913121,
-      171627e-8,
-      0,
-      0.147947,
-      0.899165,
-      174229e-8,
-      0,
-      0.163125,
-      0.885891,
-      176137e-8,
-      0,
-      0.178998,
-      0.873783,
-      176406e-8,
-      0,
-      0.195566,
-      0.861331,
-      176156e-8,
-      0,
-      0.21283,
-      0.847569,
-      175346e-8,
-      0,
-      0.230793,
-      0.832785,
-      172753e-8,
-      0,
-      0.249459,
-      0.817442,
-      170204e-8,
-      0,
-      0.268832,
-      0.800613,
-      166576e-8,
-      0,
-      0.28892,
-      0.783597,
-      162909e-8,
-      0,
-      0.30973,
-      0.76571,
-      15826e-7,
-      0,
-      0.331271,
-      0.747021,
-      153106e-8,
-      0,
-      0.353554,
-      0.728593,
-      148036e-8,
-      0,
-      0.37659,
-      0.710661,
-      142808e-8,
-      0,
-      0.400391,
-      0.692426,
-      136906e-8,
-      0,
-      0.424973,
-      0.673623,
-      131066e-8,
-      0,
-      0.450347,
-      0.65494,
-      125569e-8,
-      0,
-      0.476531,
-      0.635448,
-      119517e-8,
-      0,
-      0.503535,
-      0.616221,
-      113828e-8,
-      0,
-      0.531372,
-      0.597531,
-      10816e-7,
-      0,
-      0.560047,
-      0.578795,
-      102673e-8,
-      0,
-      0.589554,
-      0.559892,
-      970985e-9,
-      0,
-      0.619869,
-      0.541307,
-      919773e-9,
-      0,
-      0.650923,
-      0.522608,
-      868479e-9,
-      0,
-      0.68254,
-      0.504484,
-      82137e-8,
-      0,
-      0.714286,
-      0.486603,
-      772916e-9,
-      0,
-      0.746032,
-      0.468802,
-      730353e-9,
-      0,
-      0.777778,
-      0.451172,
-      684955e-9,
-      0,
-      0.809524,
-      0.434348,
-      647565e-9,
-      0,
-      0.84127,
-      0.417445,
-      605863e-9,
-      0,
-      0.873016,
-      0.401077,
-      571885e-9,
-      0,
-      0.904762,
-      0.385039,
-      536034e-9,
-      0,
-      0.936508,
-      0.369483,
-      504227e-9,
-      0,
-      0.968254,
-      0.354272,
-      473165e-9,
-      0,
-      1,
-      1,
-      599525e-9,
-      0,
-      0,
-      1,
-      599533e-9,
-      0,
-      0,
-      1,
-      599639e-9,
-      0,
-      0,
-      0.999998,
-      600097e-9,
-      0,
-      0,
-      0.999994,
-      601336e-9,
-      0,
-      0,
-      0.999987,
-      603958e-9,
-      0,
-      0,
-      0.999972,
-      608775e-9,
-      0,
-      0,
-      0.999949,
-      616842e-9,
-      0,
-      0,
-      0.999912,
-      629534e-9,
-      0,
-      0,
-      0.999857,
-      648658e-9,
-      0,
-      0,
-      0.999781,
-      676615e-9,
-      0,
-      538873e-11,
-      0.999674,
-      716574e-9,
-      0,
-      308602e-9,
-      0.999528,
-      772641e-9,
-      0,
-      127003e-8,
-      0.999326,
-      849806e-9,
-      0,
-      300783e-8,
-      0.999009,
-      952682e-9,
-      0,
-      556637e-8,
-      0.998112,
-      106394e-8,
-      0,
-      895889e-8,
-      0.994496,
-      102228e-8,
-      0,
-      0.0131827,
-      0.992806,
-      108586e-8,
-      0,
-      0.0182277,
-      0.991211,
-      11759e-7,
-      0,
-      0.0240795,
-      0.989415,
-      128955e-8,
-      0,
-      0.030723,
-      0.986499,
-      139038e-8,
-      0,
-      0.0381418,
-      0.982679,
-      144539e-8,
-      0,
-      0.046321,
-      0.978839,
-      153954e-8,
-      0,
-      0.0552459,
-      0.974295,
-      164417e-8,
-      0,
-      0.0649034,
-      0.968784,
-      171517e-8,
-      0,
-      0.0752814,
-      0.962324,
-      180282e-8,
-      0,
-      0.0863693,
-      0.954956,
-      186387e-8,
-      0,
-      0.0981578,
-      0.94624,
-      193817e-8,
-      0,
-      0.110639,
-      0.936517,
-      198156e-8,
-      0,
-      0.123806,
-      0.925186,
-      203042e-8,
-      0,
-      0.137655,
-      0.91252,
-      20664e-7,
-      0,
-      0.15218,
-      0.898441,
-      207822e-8,
-      0,
-      0.16738,
-      0.884394,
-      20992e-7,
-      0,
-      0.183253,
-      0.871273,
-      208748e-8,
-      0,
-      0.199799,
-      0.859057,
-      208686e-8,
-      0,
-      0.21702,
-      0.845243,
-      205519e-8,
-      0,
-      0.234918,
-      0.830723,
-      202868e-8,
-      0,
-      0.253496,
-      0.815801,
-      199501e-8,
-      0,
-      0.272761,
-      0.79914,
-      194193e-8,
-      0,
-      0.292719,
-      0.782372,
-      188824e-8,
-      0,
-      0.313377,
-      0.76482,
-      183695e-8,
-      0,
-      0.334745,
-      0.746586,
-      177418e-8,
-      0,
-      0.356833,
-      0.7281,
-      170628e-8,
-      0,
-      0.379654,
-      0.709842,
-      164063e-8,
-      0,
-      0.403221,
-      0.692019,
-      157355e-8,
-      0,
-      0.427548,
-      0.67364,
-      150262e-8,
-      0,
-      0.452651,
-      0.655277,
-      143473e-8,
-      0,
-      0.478545,
-      0.636438,
-      136371e-8,
-      0,
-      0.505246,
-      0.617364,
-      129911e-8,
-      0,
-      0.532768,
-      0.598603,
-      123014e-8,
-      0,
-      0.561122,
-      0.580195,
-      116587e-8,
-      0,
-      0.590309,
-      0.561786,
-      110398e-8,
-      0,
-      0.620318,
-      0.543377,
-      104148e-8,
-      0,
-      0.651102,
-      0.525093,
-      983984e-9,
-      0,
-      0.682545,
-      0.506791,
-      92667e-8,
-      0,
-      0.714286,
-      0.489291,
-      874326e-9,
-      0,
-      0.746032,
-      0.471811,
-      821734e-9,
-      0,
-      0.777778,
-      0.454435,
-      774698e-9,
-      0,
-      0.809524,
-      0.437493,
-      727302e-9,
-      0,
-      0.84127,
-      0.420977,
-      684039e-9,
-      0,
-      0.873016,
-      0.404729,
-      64373e-8,
-      0,
-      0.904762,
-      0.388756,
-      60285e-8,
-      0,
-      0.936508,
-      0.373344,
-      56765e-8,
-      0,
-      0.968254,
-      0.358191,
-      531929e-9,
-      0,
-      1,
-      1,
-      832169e-9,
-      0,
-      0,
-      1,
-      832178e-9,
-      0,
-      0,
-      1,
-      83231e-8,
-      0,
-      0,
-      0.999998,
-      832893e-9,
-      0,
-      0,
-      0.999995,
-      834465e-9,
-      0,
-      0,
-      0.999985,
-      837791e-9,
-      0,
-      0,
-      0.999969,
-      843893e-9,
-      0,
-      0,
-      0.999944,
-      854086e-9,
-      0,
-      0,
-      0.999903,
-      870071e-9,
-      0,
-      0,
-      0.999843,
-      894042e-9,
-      0,
-      0,
-      0.999759,
-      928865e-9,
-      0,
-      531805e-10,
-      0.999643,
-      978242e-9,
-      0,
-      579365e-9,
-      0.99948,
-      104684e-8,
-      0,
-      182774e-8,
-      0.999255,
-      114012e-8,
-      0,
-      387804e-8,
-      0.998885,
-      126188e-8,
-      0,
-      675709e-8,
-      0.997405,
-      135888e-8,
-      0,
-      0.010468,
-      0.99424,
-      133626e-8,
-      0,
-      0.0150018,
-      0.992458,
-      140905e-8,
-      0,
-      0.0203443,
-      0.990929,
-      152305e-8,
-      0,
-      0.0264786,
-      0.989116,
-      165882e-8,
-      0,
-      0.0333875,
-      0.985624,
-      174128e-8,
-      0,
-      0.0410536,
-      0.982003,
-      182108e-8,
-      0,
-      0.0494609,
-      0.978336,
-      194498e-8,
-      0,
-      0.0585941,
-      0.973184,
-      202708e-8,
-      0,
-      0.0684396,
-      0.9678,
-      212166e-8,
-      0,
-      0.0789851,
-      0.961348,
-      221366e-8,
-      0,
-      0.0902199,
-      0.953841,
-      228219e-8,
-      0,
-      0.102134,
-      0.94534,
-      235662e-8,
-      0,
-      0.114721,
-      0.935552,
-      240572e-8,
-      0,
-      0.127972,
-      0.924064,
-      244405e-8,
-      0,
-      0.141884,
-      0.911827,
-      247557e-8,
-      0,
-      0.156451,
-      0.897731,
-      248374e-8,
-      0,
-      0.171672,
-      0.883409,
-      249863e-8,
-      0,
-      0.187545,
-      0.868625,
-      246688e-8,
-      0,
-      0.20407,
-      0.856529,
-      246523e-8,
-      0,
-      0.221249,
-      0.842999,
-      242368e-8,
-      0,
-      0.239083,
-      0.828505,
-      237354e-8,
-      0,
-      0.257578,
-      0.813825,
-      232588e-8,
-      0,
-      0.276738,
-      0.797813,
-      226731e-8,
-      0,
-      0.296569,
-      0.781097,
-      219704e-8,
-      0,
-      0.31708,
-      0.764038,
-      212394e-8,
-      0,
-      0.338281,
-      0.746067,
-      204786e-8,
-      0,
-      0.360181,
-      0.727687,
-      196728e-8,
-      0,
-      0.382794,
-      0.709571,
-      188779e-8,
-      0,
-      0.406133,
-      0.691503,
-      180532e-8,
-      0,
-      0.430213,
-      0.673673,
-      171849e-8,
-      0,
-      0.45505,
-      0.655732,
-      164147e-8,
-      0,
-      0.480662,
-      0.637399,
-      155858e-8,
-      0,
-      0.507065,
-      0.618616,
-      147641e-8,
-      0,
-      0.534278,
-      0.60005,
-      140125e-8,
-      0,
-      0.562313,
-      0.581713,
-      132441e-8,
-      0,
-      0.59118,
-      0.563546,
-      125014e-8,
-      0,
-      0.620875,
-      0.545605,
-      118249e-8,
-      0,
-      0.651373,
-      0.527559,
-      11116e-7,
-      0,
-      0.682593,
-      0.509764,
-      104979e-8,
-      0,
-      0.714286,
-      0.49193,
-      985977e-9,
-      0,
-      0.746032,
-      0.475011,
-      928592e-9,
-      0,
-      0.777778,
-      0.457878,
-      873466e-9,
-      0,
-      0.809524,
-      0.440979,
-      819585e-9,
-      0,
-      0.84127,
-      0.424613,
-      772365e-9,
-      0,
-      0.873016,
-      0.408549,
-      722195e-9,
-      0,
-      0.904762,
-      0.392771,
-      680014e-9,
-      0,
-      0.936508,
-      0.377317,
-      636797e-9,
-      0,
-      0.968254,
-      0.362352,
-      598318e-9,
-      0,
-      1,
-      1,
-      114313e-8,
-      0,
-      0,
-      1,
-      114314e-8,
-      0,
-      0,
-      0.999999,
-      114331e-8,
-      0,
-      0,
-      0.999998,
-      114404e-8,
-      0,
-      0,
-      0.999994,
-      114601e-8,
-      0,
-      0,
-      0.999984,
-      115019e-8,
-      0,
-      0,
-      0.999967,
-      115784e-8,
-      0,
-      0,
-      0.999937,
-      11706e-7,
-      0,
-      0,
-      0.999894,
-      119054e-8,
-      0,
-      0,
-      0.999828,
-      122031e-8,
-      0,
-      0,
-      0.999735,
-      126331e-8,
-      0,
-      169263e-9,
-      0.999606,
-      132382e-8,
-      0,
-      949167e-9,
-      0.999426,
-      14071e-7,
-      0,
-      249668e-8,
-      0.999173,
-      151895e-8,
-      0,
-      486392e-8,
-      0.99873,
-      166102e-8,
-      0,
-      806323e-8,
-      0.996243,
-      17023e-7,
-      0,
-      0.0120895,
-      0.993779,
-      172782e-8,
-      0,
-      0.0169288,
-      0.9919,
-      18108e-7,
-      0,
-      0.0225633,
-      0.990524,
-      196028e-8,
-      0,
-      0.028974,
-      0.98868,
-      212014e-8,
-      0,
-      0.036142,
-      0.984663,
-      217598e-8,
-      0,
-      0.044049,
-      0.981457,
-      230563e-8,
-      0,
-      0.0526781,
-      0.977608,
-      243966e-8,
-      0,
-      0.0620137,
-      0.972215,
-      251336e-8,
-      0,
-      0.0720418,
-      0.966798,
-      26285e-7,
-      0,
-      0.0827499,
-      0.960241,
-      271409e-8,
-      0,
-      0.0941271,
-      0.952489,
-      278381e-8,
-      0,
-      0.106164,
-      0.944127,
-      285399e-8,
-      0,
-      0.118852,
-      0.934282,
-      290994e-8,
-      0,
-      0.132185,
-      0.923271,
-      294558e-8,
-      0,
-      0.146157,
-      0.910803,
-      296269e-8,
-      0,
-      0.160766,
-      0.896705,
-      296803e-8,
-      0,
-      0.176007,
-      0.88238,
-      296637e-8,
-      0,
-      0.19188,
-      0.867116,
-      293163e-8,
-      0,
-      0.208385,
-      0.853636,
-      289418e-8,
-      0,
-      0.225523,
-      0.840469,
-      284663e-8,
-      0,
-      0.243296,
-      0.82639,
-      278594e-8,
-      0,
-      0.261709,
-      0.811759,
-      271618e-8,
-      0,
-      0.280767,
-      0.796113,
-      263187e-8,
-      0,
-      0.300476,
-      0.779518,
-      254589e-8,
-      0,
-      0.320845,
-      0.763142,
-      246003e-8,
-      0,
-      0.341883,
-      0.745464,
-      236529e-8,
-      0,
-      0.363601,
-      0.727491,
-      226536e-8,
-      0,
-      0.386011,
-      0.709414,
-      216375e-8,
-      0,
-      0.409128,
-      0.691396,
-      207127e-8,
-      0,
-      0.432967,
-      0.67368,
-      197106e-8,
-      0,
-      0.457545,
-      0.656049,
-      187022e-8,
-      0,
-      0.482881,
-      0.638188,
-      177605e-8,
-      0,
-      0.508992,
-      0.620177,
-      168482e-8,
-      0,
-      0.535899,
-      0.601506,
-      158909e-8,
-      0,
-      0.563619,
-      0.58362,
-      150583e-8,
-      0,
-      0.592165,
-      0.565496,
-      141791e-8,
-      0,
-      0.621544,
-      0.54789,
-      133693e-8,
-      0,
-      0.651743,
-      0.530323,
-      126038e-8,
-      0,
-      0.682709,
-      0.512795,
-      118556e-8,
-      0,
-      0.714286,
-      0.495199,
-      111527e-8,
-      0,
-      0.746032,
-      0.478101,
-      10489e-7,
-      0,
-      0.777778,
-      0.461511,
-      984264e-9,
-      0,
-      0.809524,
-      0.444879,
-      92591e-8,
-      0,
-      0.84127,
-      0.428424,
-      866582e-9,
-      0,
-      0.873016,
-      0.412495,
-      814463e-9,
-      0,
-      0.904762,
-      0.396975,
-      764498e-9,
-      0,
-      0.936508,
-      0.381614,
-      715967e-9,
-      0,
-      0.968254,
-      0.366732,
-      672483e-9,
-      0,
-      1,
-      1,
-      155501e-8,
-      0,
-      0,
-      1,
-      155503e-8,
-      0,
-      0,
-      1,
-      155524e-8,
-      0,
-      0,
-      0.999998,
-      155615e-8,
-      0,
-      0,
-      0.999994,
-      15586e-7,
-      0,
-      0,
-      0.999983,
-      156379e-8,
-      0,
-      0,
-      0.999963,
-      15733e-7,
-      0,
-      0,
-      0.999932,
-      158911e-8,
-      0,
-      0,
-      0.999882,
-      161376e-8,
-      0,
-      0,
-      0.99981,
-      165041e-8,
-      0,
-      100875e-10,
-      0.999708,
-      170304e-8,
-      0,
-      367658e-9,
-      0.999565,
-      177658e-8,
-      0,
-      14234e-7,
-      0.999368,
-      187688e-8,
-      0,
-      327939e-8,
-      0.999081,
-      200989e-8,
-      0,
-      596629e-8,
-      0.99852,
-      217177e-8,
-      0,
-      94852e-7,
-      0.99549,
-      21745e-7,
-      0,
-      0.013824,
-      0.993252,
-      222357e-8,
-      0,
-      0.0189642,
-      0.991727,
-      235022e-8,
-      0,
-      0.0248856,
-      0.989951,
-      250561e-8,
-      0,
-      0.0315669,
-      0.988029,
-      268829e-8,
-      0,
-      0.0389882,
-      0.984029,
-      27496e-7,
-      0,
-      0.0471302,
-      0.980683,
-      289793e-8,
-      0,
-      0.0559754,
-      0.976554,
-      303315e-8,
-      0,
-      0.0655081,
-      0.97139,
-      313257e-8,
-      0,
-      0.0757138,
-      0.965544,
-      323656e-8,
-      0,
-      0.08658,
-      0.95912,
-      333432e-8,
-      0,
-      0.0980954,
-      0.951183,
-      34039e-7,
-      0,
-      0.110251,
-      0.942974,
-      347515e-8,
-      0,
-      0.123038,
-      0.932642,
-      350381e-8,
-      0,
-      0.13645,
-      0.922158,
-      354519e-8,
-      0,
-      0.150482,
-      0.909404,
-      353851e-8,
-      0,
-      0.165129,
-      0.896071,
-      35435e-7,
-      0,
-      0.18039,
-      0.881206,
-      349936e-8,
-      0,
-      0.196263,
-      0.866077,
-      347256e-8,
-      0,
-      0.212748,
-      0.85093,
-      3415e-6,
-      0,
-      0.229847,
-      0.837703,
-      333367e-8,
-      0,
-      0.247561,
-      0.823878,
-      3249e-6,
-      0,
-      0.265895,
-      0.809449,
-      316347e-8,
-      0,
-      0.284854,
-      0.794379,
-      306351e-8,
-      0,
-      0.304445,
-      0.778138,
-      29499e-7,
-      0,
-      0.324675,
-      0.761997,
-      284099e-8,
-      0,
-      0.345555,
-      0.744938,
-      272104e-8,
-      0,
-      0.367095,
-      0.727212,
-      260715e-8,
-      0,
-      0.389309,
-      0.709549,
-      248855e-8,
-      0,
-      0.41221,
-      0.691704,
-      236783e-8,
-      0,
-      0.435814,
-      0.673689,
-      225178e-8,
-      0,
-      0.460138,
-      0.656453,
-      213765e-8,
-      0,
-      0.485203,
-      0.639128,
-      202178e-8,
-      0,
-      0.511028,
-      0.621512,
-      191443e-8,
-      0,
-      0.537634,
-      0.603598,
-      180977e-8,
-      0,
-      0.565041,
-      0.58559,
-      170456e-8,
-      0,
-      0.593268,
-      0.567852,
-      160927e-8,
-      0,
-      0.622327,
-      0.5503,
-      151395e-8,
-      0,
-      0.652217,
-      0.533033,
-      142499e-8,
-      0,
-      0.682907,
-      0.515942,
-      133955e-8,
-      0,
-      0.714296,
-      0.498814,
-      12602e-7,
-      0,
-      0.746032,
-      0.481595,
-      118188e-8,
-      0,
-      0.777778,
-      0.465117,
-      111171e-8,
-      0,
-      0.809524,
-      0.448865,
-      104091e-8,
-      0,
-      0.84127,
-      0.432711,
-      976618e-9,
-      0,
-      0.873016,
-      0.416822,
-      91859e-8,
-      0,
-      0.904762,
-      0.401272,
-      857704e-9,
-      0,
-      0.936508,
-      0.386226,
-      807172e-9,
-      0,
-      0.968254,
-      0.371321,
-      75464e-8,
-      0,
-      1,
-      1,
-      209596e-8,
-      0,
-      0,
-      1,
-      209598e-8,
-      0,
-      0,
-      1,
-      209624e-8,
-      0,
-      0,
-      0.999997,
-      209736e-8,
-      0,
-      0,
-      0.999991,
-      210039e-8,
-      0,
-      0,
-      0.999979,
-      210678e-8,
-      0,
-      0,
-      0.999959,
-      211847e-8,
-      0,
-      0,
-      0.999925,
-      21379e-7,
-      0,
-      0,
-      0.99987,
-      216809e-8,
-      0,
-      0,
-      0.999791,
-      221281e-8,
-      0,
-      681487e-10,
-      0.999677,
-      227669e-8,
-      0,
-      658161e-9,
-      0.999521,
-      236533e-8,
-      0,
-      200635e-8,
-      0.999301,
-      248514e-8,
-      0,
-      41779e-7,
-      0.998977,
-      264185e-8,
-      0,
-      718648e-8,
-      0.998191,
-      281695e-8,
-      0,
-      0.0110239,
-      0.994801,
-      278518e-8,
-      0,
-      0.015672,
-      0.993091,
-      288774e-8,
-      0,
-      0.0211091,
-      0.991571,
-      303931e-8,
-      0,
-      0.0273123,
-      0.9897,
-      321643e-8,
-      0,
-      0.034259,
-      0.987023,
-      337332e-8,
-      0,
-      0.0419282,
-      0.983289,
-      346146e-8,
-      0,
-      0.0502998,
-      0.979892,
-      363704e-8,
-      0,
-      0.0593562,
-      0.975111,
-      373601e-8,
-      0,
-      0.069081,
-      0.970351,
-      38842e-7,
-      0,
-      0.0794598,
-      0.964131,
-      397053e-8,
-      0,
-      0.0904798,
-      0.957747,
-      408078e-8,
-      0,
-      0.10213,
-      0.949536,
-      413533e-8,
-      0,
-      0.1144,
-      0.941372,
-      420305e-8,
-      0,
-      0.127284,
-      0.931049,
-      422815e-8,
-      0,
-      0.140772,
-      0.920647,
-      425048e-8,
-      0,
-      0.154862,
-      0.908033,
-      42281e-7,
-      0,
-      0.169548,
-      0.895028,
-      422026e-8,
-      0,
-      0.184828,
-      0.879968,
-      415042e-8,
-      0,
-      0.200701,
-      0.864875,
-      408821e-8,
-      0,
-      0.217167,
-      0.84918,
-      400909e-8,
-      0,
-      0.234227,
-      0.834934,
-      391178e-8,
-      0,
-      0.251884,
-      0.821397,
-      380066e-8,
-      0,
-      0.270141,
-      0.807135,
-      367974e-8,
-      0,
-      0.289004,
-      0.792363,
-      355172e-8,
-      0,
-      0.308479,
-      0.776661,
-      3411e-6,
-      0,
-      0.328575,
-      0.760705,
-      328123e-8,
-      0,
-      0.349301,
-      0.744408,
-      314003e-8,
-      0,
-      0.370668,
-      0.726994,
-      29906e-7,
-      0,
-      0.392689,
-      0.709598,
-      285034e-8,
-      0,
-      0.415379,
-      0.692112,
-      271179e-8,
-      0,
-      0.438754,
-      0.674435,
-      257185e-8,
-      0,
-      0.46283,
-      0.65676,
-      243425e-8,
-      0,
-      0.48763,
-      0.639982,
-      230351e-8,
-      0,
-      0.513173,
-      0.622983,
-      21777e-7,
-      0,
-      0.539482,
-      0.605471,
-      204991e-8,
-      0,
-      0.566579,
-      0.58796,
-      193759e-8,
-      0,
-      0.594488,
-      0.570463,
-      181976e-8,
-      0,
-      0.623226,
-      0.553058,
-      171497e-8,
-      0,
-      0.6528,
-      0.535894,
-      161109e-8,
-      0,
-      0.683198,
-      0.519089,
-      151394e-8,
-      0,
-      0.714354,
-      0.502454,
-      142122e-8,
-      0,
-      0.746032,
-      0.485681,
-      133488e-8,
-      0,
-      0.777778,
-      0.468935,
-      124975e-8,
-      0,
-      0.809524,
-      0.452951,
-      117309e-8,
-      0,
-      0.84127,
-      0.437139,
-      110155e-8,
-      0,
-      0.873016,
-      0.421446,
-      103124e-8,
-      0,
-      0.904762,
-      0.405951,
-      966387e-9,
-      0,
-      0.936508,
-      0.391003,
-      908119e-9,
-      0,
-      0.968254,
-      0.376198,
-      848057e-9,
-      0,
-      1,
-      1,
-      280076e-8,
-      0,
-      0,
-      1,
-      280078e-8,
-      0,
-      0,
-      0.999999,
-      280109e-8,
-      0,
-      0,
-      0.999997,
-      280246e-8,
-      0,
-      0,
-      0.999992,
-      280616e-8,
-      0,
-      0,
-      0.999979,
-      281396e-8,
-      0,
-      0,
-      0.999956,
-      282822e-8,
-      0,
-      0,
-      0.999916,
-      285186e-8,
-      0,
-      0,
-      0.999857,
-      28885e-7,
-      0,
-      0,
-      0.999768,
-      294259e-8,
-      0,
-      196026e-9,
-      0.999645,
-      301946e-8,
-      0,
-      104842e-8,
-      0.99947,
-      312541e-8,
-      0,
-      270199e-8,
-      0.999229,
-      326733e-8,
-      0,
-      519449e-8,
-      0.998852,
-      344992e-8,
-      0,
-      852602e-8,
-      0.997558,
-      361052e-8,
-      0,
-      0.0126804,
-      0.994417,
-      35898e-7,
-      0,
-      0.017635,
-      0.992824,
-      372393e-8,
-      0,
-      0.023365,
-      0.991344,
-      390695e-8,
-      0,
-      0.0298456,
-      0.989337,
-      410392e-8,
-      0,
-      0.0370529,
-      0.985811,
-      420987e-8,
-      0,
-      0.0449651,
-      0.982772,
-      437488e-8,
-      0,
-      0.0535615,
-      0.979001,
-      455069e-8,
-      0,
-      0.0628243,
-      0.974102,
-      464462e-8,
-      0,
-      0.0727368,
-      0.969197,
-      480577e-8,
-      0,
-      0.0832844,
-      0.962759,
-      487818e-8,
-      0,
-      0.0944545,
-      0.956207,
-      498176e-8,
-      0,
-      0.106236,
-      0.947909,
-      503392e-8,
-      0,
-      0.118619,
-      0.939596,
-      507474e-8,
-      0,
-      0.131595,
-      0.929642,
-      509798e-8,
-      0,
-      0.145159,
-      0.918807,
-      508476e-8,
-      0,
-      0.159305,
-      0.906921,
-      505634e-8,
-      0,
-      0.174028,
-      0.893312,
-      498845e-8,
-      0,
-      0.189327,
-      0.878933,
-      49133e-7,
-      0,
-      0.2052,
-      0.863986,
-      48259e-7,
-      0,
-      0.221647,
-      0.847936,
-      470848e-8,
-      0,
-      0.23867,
-      0.832253,
-      456889e-8,
-      0,
-      0.25627,
-      0.818619,
-      442726e-8,
-      0,
-      0.274453,
-      0.804788,
-      427677e-8,
-      0,
-      0.293222,
-      0.790241,
-      411906e-8,
-      0,
-      0.312585,
-      0.775162,
-      394833e-8,
-      0,
-      0.33255,
-      0.759463,
-      377366e-8,
-      0,
-      0.353126,
-      0.743598,
-      361026e-8,
-      0,
-      0.374324,
-      0.72697,
-      343627e-8,
-      0,
-      0.396158,
-      0.709646,
-      326422e-8,
-      0,
-      0.418641,
-      0.69277,
-      309717e-8,
-      0,
-      0.44179,
-      0.675371,
-      29356e-7,
-      0,
-      0.465624,
-      0.657863,
-      277712e-8,
-      0,
-      0.490163,
-      0.640772,
-      261738e-8,
-      0,
-      0.515429,
-      0.624441,
-      24737e-7,
-      0,
-      0.541445,
-      0.607497,
-      233125e-8,
-      0,
-      0.568236,
-      0.590438,
-      218994e-8,
-      0,
-      0.595828,
-      0.573224,
-      20664e-7,
-      0,
-      0.624242,
-      0.556168,
-      193526e-8,
-      0,
-      0.653496,
-      0.539232,
-      182463e-8,
-      0,
-      0.683588,
-      0.522352,
-      170735e-8,
-      0,
-      0.714482,
-      0.506172,
-      160555e-8,
-      0,
-      0.746032,
-      0.489842,
-      150451e-8,
-      0,
-      0.777778,
-      0.473463,
-      140938e-8,
-      0,
-      0.809524,
-      0.457266,
-      132568e-8,
-      0,
-      0.84127,
-      0.441609,
-      12376e-7,
-      0,
-      0.873016,
-      0.426348,
-      116265e-8,
-      0,
-      0.904762,
-      0.411002,
-      108935e-8,
-      0,
-      0.936508,
-      0.396045,
-      101946e-8,
-      0,
-      0.968254,
-      0.381448,
-      955665e-9,
-      0,
-      1,
-      1,
-      37121e-7,
-      0,
-      0,
-      1,
-      371213e-8,
-      0,
-      0,
-      1,
-      371251e-8,
-      0,
-      0,
-      0.999997,
-      371417e-8,
-      0,
-      0,
-      0.99999,
-      371863e-8,
-      0,
-      0,
-      0.999977,
-      372807e-8,
-      0,
-      0,
-      0.99995,
-      374529e-8,
-      0,
-      0,
-      0.999908,
-      37738e-7,
-      0,
-      0,
-      0.999843,
-      381789e-8,
-      0,
-      123596e-10,
-      0.999745,
-      388273e-8,
-      0,
-      407442e-9,
-      0.999608,
-      397443e-8,
-      0,
-      15447e-7,
-      0.999415,
-      409998e-8,
-      0,
-      351385e-8,
-      0.999143,
-      426662e-8,
-      0,
-      63316e-7,
-      0.9987,
-      447625e-8,
-      0,
-      998679e-8,
-      0.996363,
-      455323e-8,
-      0,
-      0.0144569,
-      0.994021,
-      461052e-8,
-      0,
-      0.0197151,
-      0.992372,
-      476359e-8,
-      0,
-      0.0257344,
-      0.991007,
-      499101e-8,
-      0,
-      0.0324882,
-      0.988767,
-      51972e-7,
-      0,
-      0.0399517,
-      0.984872,
-      528407e-8,
-      0,
-      0.0481022,
-      0.982004,
-      548926e-8,
-      0,
-      0.0569191,
-      0.977714,
-      564385e-8,
-      0,
-      0.0663839,
-      0.973076,
-      57693e-7,
-      0,
-      0.0764801,
-      0.967565,
-      58924e-7,
-      0,
-      0.0871928,
-      0.961384,
-      599629e-8,
-      0,
-      0.0985095,
-      0.954435,
-      605998e-8,
-      0,
-      0.110419,
-      0.946303,
-      61133e-7,
-      0,
-      0.122912,
-      0.937662,
-      612028e-8,
-      0,
-      0.13598,
-      0.927867,
-      612209e-8,
-      0,
-      0.149617,
-      0.916475,
-      604813e-8,
-      0,
-      0.163817,
-      0.90541,
-      603088e-8,
-      0,
-      0.178577,
-      0.891591,
-      592218e-8,
-      0,
-      0.193894,
-      0.877573,
-      578854e-8,
-      0,
-      0.209767,
-      0.862511,
-      566648e-8,
-      0,
-      0.226196,
-      0.846861,
-      551481e-8,
-      0,
-      0.243182,
-      0.83068,
-      533754e-8,
-      0,
-      0.260728,
-      0.815725,
-      515487e-8,
-      0,
-      0.278837,
-      0.802321,
-      49655e-7,
-      0,
-      0.297515,
-      0.787826,
-      475421e-8,
-      0,
-      0.316768,
-      0.773454,
-      456002e-8,
-      0,
-      0.336605,
-      0.758224,
-      434727e-8,
-      0,
-      0.357034,
-      0.74265,
-      414444e-8,
-      0,
-      0.378067,
-      0.726729,
-      393738e-8,
-      0,
-      0.399717,
-      0.710155,
-      373575e-8,
-      0,
-      0.421998,
-      0.693312,
-      353736e-8,
-      0,
-      0.444928,
-      0.67653,
-      334368e-8,
-      0,
-      0.468523,
-      0.659444,
-      315981e-8,
-      0,
-      0.492806,
-      0.642051,
-      297809e-8,
-      0,
-      0.517798,
-      0.625758,
-      280592e-8,
-      0,
-      0.543525,
-      0.609615,
-      264254e-8,
-      0,
-      0.570012,
-      0.592919,
-      248459e-8,
-      0,
-      0.597288,
-      0.576298,
-      233327e-8,
-      0,
-      0.625379,
-      0.559489,
-      219519e-8,
-      0,
-      0.654307,
-      0.542891,
-      205441e-8,
-      0,
-      0.684084,
-      0.526255,
-      193385e-8,
-      0,
-      0.714693,
-      0.509853,
-      180745e-8,
-      0,
-      0.746044,
-      0.494131,
-      169817e-8,
-      0,
-      0.777778,
-      0.478114,
-      15913e-7,
-      0,
-      0.809524,
-      0.462274,
-      148981e-8,
-      0,
-      0.84127,
-      0.446412,
-      139537e-8,
-      0,
-      0.873016,
-      0.431274,
-      130984e-8,
-      0,
-      0.904762,
-      0.41635,
-      122403e-8,
-      0,
-      0.936508,
-      0.401476,
-      114809e-8,
-      0,
-      0.968254,
-      0.386993,
-      107563e-8,
-      0,
-      1,
-      1,
-      488216e-8,
-      0,
-      0,
-      1,
-      48822e-7,
-      0,
-      0,
-      1,
-      488265e-8,
-      0,
-      0,
-      0.999997,
-      488463e-8,
-      0,
-      0,
-      0.999988,
-      488999e-8,
-      0,
-      0,
-      0.999974,
-      490129e-8,
-      0,
-      0,
-      0.999946,
-      492191e-8,
-      0,
-      0,
-      0.999897,
-      495598e-8,
-      0,
-      0,
-      0.999825,
-      500855e-8,
-      0,
-      744791e-10,
-      0.999718,
-      508559e-8,
-      0,
-      712744e-9,
-      0.999565,
-      5194e-6,
-      0,
-      215249e-8,
-      0.999352,
-      534147e-8,
-      0,
-      444576e-8,
-      0.999046,
-      553523e-8,
-      0,
-      759218e-8,
-      0.998492,
-      577016e-8,
-      0,
-      0.0115714,
-      0.995564,
-      578487e-8,
-      0,
-      0.0163557,
-      0.993339,
-      586414e-8,
-      0,
-      0.021915,
-      0.991834,
-      606002e-8,
-      0,
-      0.0282201,
-      0.990496,
-      633312e-8,
-      0,
-      0.0352433,
-      0.987826,
-      651941e-8,
-      0,
-      0.042959,
-      0.98383,
-      660842e-8,
-      0,
-      0.0513439,
-      0.98109,
-      685523e-8,
-      0,
-      0.0603772,
-      0.976131,
-      695778e-8,
-      0,
-      0.0700402,
-      0.971922,
-      714236e-8,
-      0,
-      0.0803163,
-      0.965901,
-      721437e-8,
-      0,
-      0.0911908,
-      0.959606,
-      732017e-8,
-      0,
-      0.102651,
-      0.952504,
-      735788e-8,
-      0,
-      0.114686,
-      0.944365,
-      738493e-8,
-      0,
-      0.127286,
-      0.935652,
-      737969e-8,
-      0,
-      0.140443,
-      0.925813,
-      733612e-8,
-      0,
-      0.154151,
-      0.914397,
-      723094e-8,
-      0,
-      0.168405,
-      0.903257,
-      714002e-8,
-      0,
-      0.183201,
-      0.890015,
-      700149e-8,
-      0,
-      0.198536,
-      0.876014,
-      682813e-8,
-      0,
-      0.214409,
-      0.861436,
-      665567e-8,
-      0,
-      0.23082,
-      0.845752,
-      644526e-8,
-      0,
-      0.24777,
-      0.829169,
-      621635e-8,
-      0,
-      0.265263,
-      0.813435,
-      597789e-8,
-      0,
-      0.283301,
-      0.799701,
-      575694e-8,
-      0,
-      0.301889,
-      0.785726,
-      549866e-8,
-      0,
-      0.321035,
-      0.77152,
-      52503e-7,
-      0,
-      0.340746,
-      0.75683,
-      499619e-8,
-      0,
-      0.361032,
-      0.741951,
-      47543e-7,
-      0,
-      0.381904,
-      0.726367,
-      45084e-7,
-      0,
-      0.403374,
-      0.710537,
-      426784e-8,
-      0,
-      0.425457,
-      0.693965,
-      403487e-8,
-      0,
-      0.448169,
-      0.677724,
-      38075e-7,
-      0,
-      0.47153,
-      0.66117,
-      359431e-8,
-      0,
-      0.495561,
-      0.644274,
-      338354e-8,
-      0,
-      0.520284,
-      0.627449,
-      318163e-8,
-      0,
-      0.545725,
-      0.611645,
-      299672e-8,
-      0,
-      0.571911,
-      0.595614,
-      281016e-8,
-      0,
-      0.598873,
-      0.579426,
-      264252e-8,
-      0,
-      0.62664,
-      0.563016,
-      247509e-8,
-      0,
-      0.655239,
-      0.546728,
-      232647e-8,
-      0,
-      0.684692,
-      0.530539,
-      217803e-8,
-      0,
-      0.714999,
-      0.514164,
-      204216e-8,
-      0,
-      0.746106,
-      0.498344,
-      191403e-8,
-      0,
-      0.777778,
-      0.482957,
-      179203e-8,
-      0,
-      0.809524,
-      0.467336,
-      167695e-8,
-      0,
-      0.84127,
-      0.451994,
-      157567e-8,
-      0,
-      0.873016,
-      0.436514,
-      147113e-8,
-      0,
-      0.904762,
-      0.42178,
-      138034e-8,
-      0,
-      0.936508,
-      0.407271,
-      129219e-8,
-      0,
-      0.968254,
-      0.392822,
-      12098e-7,
-      0,
-      1,
-      1,
-      637427e-8,
-      0,
-      0,
-      1,
-      637431e-8,
-      0,
-      0,
-      0.999999,
-      637485e-8,
-      0,
-      0,
-      0.999996,
-      637721e-8,
-      0,
-      0,
-      0.999987,
-      638357e-8,
-      0,
-      0,
-      0.999971,
-      6397e-6,
-      0,
-      0,
-      0.999939,
-      642142e-8,
-      0,
-      0,
-      0.999888,
-      646177e-8,
-      0,
-      0,
-      0.999807,
-      652387e-8,
-      0,
-      207916e-9,
-      0.999689,
-      661454e-8,
-      0,
-      112051e-8,
-      0.99952,
-      674155e-8,
-      0,
-      287719e-8,
-      0.999283,
-      691313e-8,
-      0,
-      550145e-8,
-      0.998936,
-      713598e-8,
-      0,
-      897928e-8,
-      0.998165,
-      738501e-8,
-      0,
-      0.0132829,
-      0.994847,
-      734388e-8,
-      0,
-      0.01838,
-      0.993182,
-      749991e-8,
-      0,
-      0.0242381,
-      0.991665,
-      77246e-7,
-      0,
-      0.030826,
-      0.989708,
-      797579e-8,
-      0,
-      0.0381152,
-      0.986663,
-      813011e-8,
-      0,
-      0.0460794,
-      0.983288,
-      830365e-8,
-      0,
-      0.0546951,
-      0.980104,
-      853496e-8,
-      0,
-      0.0639411,
-      0.974855,
-      861045e-8,
-      0,
-      0.0737988,
-      0.97045,
-      879133e-8,
-      0,
-      0.0842516,
-      0.964509,
-      886377e-8,
-      0,
-      0.0952848,
-      0.957594,
-      890346e-8,
-      0,
-      0.106886,
-      0.950546,
-      893289e-8,
-      0,
-      0.119044,
-      0.942225,
-      890074e-8,
-      0,
-      0.131749,
-      0.933365,
-      886826e-8,
-      0,
-      0.144994,
-      0.923202,
-      87316e-7,
-      0,
-      0.158772,
-      0.912605,
-      863082e-8,
-      0,
-      0.173078,
-      0.901099,
-      847403e-8,
-      0,
-      0.187908,
-      0.888177,
-      825838e-8,
-      0,
-      0.203261,
-      0.873955,
-      801834e-8,
-      0,
-      0.219134,
-      0.860091,
-      779026e-8,
-      0,
-      0.235527,
-      0.84434,
-      752478e-8,
-      0,
-      0.252443,
-      0.828517,
-      724074e-8,
-      0,
-      0.269883,
-      0.81239,
-      693769e-8,
-      0,
-      0.287851,
-      0.79721,
-      664817e-8,
-      0,
-      0.306352,
-      0.783489,
-      634763e-8,
-      0,
-      0.325393,
-      0.769514,
-      604221e-8,
-      0,
-      0.344981,
-      0.755419,
-      573568e-8,
-      0,
-      0.365126,
-      0.741083,
-      544359e-8,
-      0,
-      0.385839,
-      0.726059,
-      515515e-8,
-      0,
-      0.407132,
-      0.710809,
-      487139e-8,
-      0,
-      0.42902,
-      0.695052,
-      459846e-8,
-      0,
-      0.45152,
-      0.678886,
-      433412e-8,
-      0,
-      0.474651,
-      0.663042,
-      407981e-8,
-      0,
-      0.498433,
-      0.646634,
-      384264e-8,
-      0,
-      0.52289,
-      0.630117,
-      360897e-8,
-      0,
-      0.548048,
-      0.613804,
-      338863e-8,
-      0,
-      0.573936,
-      0.598338,
-      318486e-8,
-      0,
-      0.600584,
-      0.582687,
-      298377e-8,
-      0,
-      0.628027,
-      0.566809,
-      280082e-8,
-      0,
-      0.656295,
-      0.550817,
-      262255e-8,
-      0,
-      0.685417,
-      0.534937,
-      245835e-8,
-      0,
-      0.715406,
-      0.519151,
-      230574e-8,
-      0,
-      0.74624,
-      0.503118,
-      21549e-7,
-      0,
-      0.777778,
-      0.487723,
-      202008e-8,
-      0,
-      0.809524,
-      0.472725,
-      189355e-8,
-      0,
-      0.84127,
-      0.457599,
-      177108e-8,
-      0,
-      0.873016,
-      0.442558,
-      165843e-8,
-      0,
-      0.904762,
-      0.427624,
-      155494e-8,
-      0,
-      0.936508,
-      0.413171,
-      145273e-8,
-      0,
-      0.968254,
-      0.399122,
-      136454e-8,
-      0,
-      1,
-      1,
-      826496e-8,
-      0,
-      0,
-      1,
-      826499e-8,
-      0,
-      0,
-      1,
-      826564e-8,
-      0,
-      0,
-      0.999996,
-      826842e-8,
-      0,
-      0,
-      0.999987,
-      827589e-8,
-      0,
-      0,
-      0.999967,
-      829167e-8,
-      0,
-      0,
-      0.999933,
-      832037e-8,
-      0,
-      0,
-      0.999876,
-      836768e-8,
-      0,
-      109338e-10,
-      0.999786,
-      844031e-8,
-      0,
-      427145e-9,
-      0.999655,
-      854603e-8,
-      0,
-      16384e-7,
-      0.999468,
-      869337e-8,
-      0,
-      372392e-8,
-      0.999203,
-      8891e-6,
-      0,
-      668513e-8,
-      0.998803,
-      914387e-8,
-      0,
-      0.0104968,
-      0.99748,
-      935838e-8,
-      0,
-      0.015125,
-      0.994446,
-      933309e-8,
-      0,
-      0.0205338,
-      0.99292,
-      953084e-8,
-      0,
-      0.0266884,
-      0.991414,
-      97893e-7,
-      0,
-      0.0335565,
-      0.989049,
-      0.0100228,
-      0,
-      0.0411086,
-      0.98582,
-      0.0101664,
-      0,
-      0.0493181,
-      0.982441,
-      0.0103582,
-      0,
-      0.0581613,
-      0.978595,
-      0.0105292,
-      0,
-      0.0676169,
-      0.973495,
-      0.0106274,
-      0,
-      0.0776661,
-      0.968405,
-      0.0107261,
-      0,
-      0.0882926,
-      0.962717,
-      0.0108234,
-      0,
-      0.0994817,
-      0.955478,
-      0.0108102,
-      0,
-      0.111221,
-      0.948275,
-      0.0107914,
-      0,
-      0.123499,
-      0.940006,
-      0.0107161,
-      0,
-      0.136308,
-      0.930831,
-      0.0106309,
-      0,
-      0.149639,
-      0.920648,
-      0.0104083,
-      0,
-      0.163485,
-      0.910205,
-      0.0102312,
-      0,
-      0.177843,
-      0.898445,
-      0.0100051,
-      0,
-      0.192707,
-      0.885986,
-      971928e-8,
-      0,
-      0.208077,
-      0.872204,
-      940747e-8,
-      0,
-      0.22395,
-      0.858436,
-      91085e-7,
-      0,
-      0.240326,
-      0.843454,
-      876595e-8,
-      0,
-      0.257208,
-      0.827437,
-      839794e-8,
-      0,
-      0.274596,
-      0.811488,
-      803692e-8,
-      0,
-      0.292496,
-      0.796039,
-      767352e-8,
-      0,
-      0.310911,
-      0.781083,
-      73097e-7,
-      0,
-      0.329849,
-      0.767642,
-      694032e-8,
-      0,
-      0.349316,
-      0.753901,
-      657476e-8,
-      0,
-      0.369323,
-      0.740131,
-      622699e-8,
-      0,
-      0.38988,
-      0.725845,
-      58838e-7,
-      0,
-      0.410999,
-      0.710991,
-      555586e-8,
-      0,
-      0.432696,
-      0.696002,
-      523089e-8,
-      0,
-      0.454987,
-      0.680461,
-      492494e-8,
-      0,
-      0.47789,
-      0.664875,
-      463464e-8,
-      0,
-      0.501426,
-      0.649273,
-      435422e-8,
-      0,
-      0.52562,
-      0.63302,
-      40875e-7,
-      0,
-      0.550498,
-      0.61705,
-      384075e-8,
-      0,
-      0.576089,
-      0.601154,
-      359557e-8,
-      0,
-      0.602427,
-      0.586008,
-      337636e-8,
-      0,
-      0.629544,
-      0.570699,
-      316019e-8,
-      0,
-      0.657479,
-      0.555166,
-      296033e-8,
-      0,
-      0.686264,
-      0.539645,
-      277552e-8,
-      0,
-      0.715924,
-      0.524159,
-      259499e-8,
-      0,
-      0.746459,
-      0.508682,
-      243257e-8,
-      0,
-      0.777789,
-      0.493163,
-      227851e-8,
-      0,
-      0.809524,
-      0.478004,
-      213083e-8,
-      0,
-      0.84127,
-      0.46347,
-      199502e-8,
-      0,
-      0.873016,
-      0.448778,
-      186967e-8,
-      0,
-      0.904762,
-      0.434105,
-      174732e-8,
-      0,
-      0.936508,
-      0.419576,
-      163861e-8,
-      0,
-      0.968254,
-      0.405541,
-      153341e-8,
-      0,
-      1,
-      1,
-      0.0106462,
-      0,
-      0,
-      1,
-      0.0106462,
-      0,
-      0,
-      0.999999,
-      0.010647,
-      0,
-      0,
-      0.999995,
-      0.0106502,
-      0,
-      0,
-      0.999985,
-      0.0106589,
-      0,
-      0,
-      0.999964,
-      0.0106773,
-      0,
-      0,
-      0.999925,
-      0.0107106,
-      0,
-      0,
-      0.999861,
-      0.0107655,
-      0,
-      712986e-10,
-      0.999763,
-      0.0108497,
-      0,
-      743959e-9,
-      0.999616,
-      0.0109716,
-      0,
-      227361e-8,
-      0.999408,
-      0.0111408,
-      0,
-      46983e-7,
-      0.999112,
-      0.0113659,
-      0,
-      800158e-8,
-      0.998637,
-      0.0116475,
-      0,
-      0.0121493,
-      0.996223,
-      0.0117231,
-      0,
-      0.0171023,
-      0.994006,
-      0.0118064,
-      0,
-      0.0228218,
-      0.992444,
-      0.0120254,
-      0,
-      0.0292711,
-      0.991028,
-      0.0123314,
-      0,
-      0.036417,
-      0.98803,
-      0.0124954,
-      0,
-      0.0442295,
-      0.984816,
-      0.0126538,
-      0,
-      0.0526815,
-      0.981399,
-      0.0128537,
-      0,
-      0.0617492,
-      0.977085,
-      0.0129694,
-      0,
-      0.0714114,
-      0.972154,
-      0.013091,
-      0,
-      0.0816495,
-      0.966617,
-      0.0131166,
-      0,
-      0.0924472,
-      0.960628,
-      0.0131583,
-      0,
-      0.10379,
-      0.953295,
-      0.0131094,
-      0,
-      0.115665,
-      0.94575,
-      0.0129966,
-      0,
-      0.128062,
-      0.937654,
-      0.0128796,
-      0,
-      0.140972,
-      0.927716,
-      0.0126477,
-      0,
-      0.154387,
-      0.917932,
-      0.0123889,
-      0,
-      0.168301,
-      0.907719,
-      0.012131,
-      0,
-      0.182709,
-      0.89584,
-      0.0118013,
-      0,
-      0.197608,
-      0.883526,
-      0.0114145,
-      0,
-      0.212994,
-      0.870301,
-      0.0110075,
-      0,
-      0.228867,
-      0.856272,
-      0.0106019,
-      0,
-      0.245227,
-      0.842251,
-      0.0101938,
-      0,
-      0.262074,
-      0.826466,
-      973254e-8,
-      0,
-      0.279412,
-      0.810859,
-      92846e-7,
-      0,
-      0.297244,
-      0.795051,
-      883304e-8,
-      0,
-      0.315575,
-      0.780053,
-      840272e-8,
-      0,
-      0.334412,
-      0.76575,
-      796438e-8,
-      0,
-      0.35376,
-      0.752298,
-      752526e-8,
-      0,
-      0.373631,
-      0.739153,
-      711486e-8,
-      0,
-      0.394034,
-      0.725514,
-      670361e-8,
-      0,
-      0.414983,
-      0.711473,
-      632656e-8,
-      0,
-      0.436491,
-      0.696936,
-      595206e-8,
-      0,
-      0.458575,
-      0.682126,
-      559191e-8,
-      0,
-      0.481253,
-      0.667027,
-      525362e-8,
-      0,
-      0.504547,
-      0.651875,
-      493805e-8,
-      0,
-      0.528481,
-      0.636463,
-      462848e-8,
-      0,
-      0.553081,
-      0.620641,
-      433936e-8,
-      0,
-      0.578377,
-      0.604931,
-      407e-5,
-      0,
-      0.604404,
-      0.589549,
-      380864e-8,
-      0,
-      0.631197,
-      0.574712,
-      357049e-8,
-      0,
-      0.658795,
-      0.559775,
-      334466e-8,
-      0,
-      0.687238,
-      0.544514,
-      312505e-8,
-      0,
-      0.716559,
-      0.529555,
-      293199e-8,
-      0,
-      0.746776,
-      0.514402,
-      274204e-8,
-      0,
-      0.777849,
-      0.499302,
-      256647e-8,
-      0,
-      0.809524,
-      0.484114,
-      239901e-8,
-      0,
-      0.84127,
-      0.469308,
-      225148e-8,
-      0,
-      0.873016,
-      0.455133,
-      210178e-8,
-      0,
-      0.904762,
-      0.440939,
-      19727e-7,
-      0,
-      0.936508,
-      0.426627,
-      184382e-8,
-      0,
-      0.968254,
-      0.412509,
-      172548e-8,
-      0,
-      1,
-      1,
-      0.013628,
-      0,
-      0,
-      1,
-      0.0136281,
-      0,
-      0,
-      0.999999,
-      0.0136289,
-      0,
-      0,
-      0.999995,
-      0.0136327,
-      0,
-      0,
-      0.999983,
-      0.0136427,
-      0,
-      0,
-      0.99996,
-      0.0136638,
-      0,
-      0,
-      0.999917,
-      0.0137022,
-      0,
-      0,
-      0.999846,
-      0.0137652,
-      0,
-      204597e-9,
-      0.999736,
-      0.0138615,
-      0,
-      116837e-8,
-      0.999573,
-      0.0140007,
-      0,
-      303325e-8,
-      0.99934,
-      0.0141927,
-      0,
-      580613e-8,
-      0.999004,
-      0.0144457,
-      0,
-      945626e-8,
-      0.998407,
-      0.0147489,
-      0,
-      0.0139421,
-      0.995464,
-      0.014731,
-      0,
-      0.0192202,
-      0.993328,
-      0.0148283,
-      0,
-      0.0252495,
-      0.991799,
-      0.0150797,
-      0,
-      0.0319921,
-      0.990397,
-      0.0154316,
-      0,
-      0.0394138,
-      0.986835,
-      0.0155005,
-      0,
-      0.0474843,
-      0.983938,
-      0.0157308,
-      0,
-      0.0561763,
-      0.980154,
-      0.0158753,
-      0,
-      0.0654661,
-      0.975659,
-      0.0159581,
-      0,
-      0.0753326,
-      0.970171,
-      0.0159832,
-      0,
-      0.0857571,
-      0.964803,
-      0.0160084,
-      0,
-      0.0967236,
-      0.958366,
-      0.0159484,
-      0,
-      0.108218,
-      0.950613,
-      0.0158001,
-      0,
-      0.120227,
-      0.942874,
-      0.0155845,
-      0,
-      0.132741,
-      0.935005,
-      0.0154292,
-      0,
-      0.145751,
-      0.924991,
-      0.0150742,
-      0,
-      0.159249,
-      0.914814,
-      0.0146757,
-      0,
-      0.17323,
-      0.904743,
-      0.0143097,
-      0,
-      0.187687,
-      0.893216,
-      0.0138695,
-      0,
-      0.202619,
-      0.880769,
-      0.0133706,
-      0,
-      0.218021,
-      0.868136,
-      0.0128606,
-      0,
-      0.233894,
-      0.85469,
-      0.0123403,
-      0,
-      0.250238,
-      0.840593,
-      0.0118091,
-      0,
-      0.267052,
-      0.825808,
-      0.011253,
-      0,
-      0.284341,
-      0.81009,
-      0.0107099,
-      0,
-      0.302106,
-      0.79504,
-      0.0101636,
-      0,
-      0.320354,
-      0.779757,
-      964041e-8,
-      0,
-      0.33909,
-      0.764697,
-      911896e-8,
-      0,
-      0.358322,
-      0.750913,
-      859533e-8,
-      0,
-      0.378059,
-      0.738175,
-      811592e-8,
-      0,
-      0.398311,
-      0.725242,
-      764504e-8,
-      0,
-      0.41909,
-      0.711864,
-      718885e-8,
-      0,
-      0.440412,
-      0.698009,
-      675843e-8,
-      0,
-      0.462292,
-      0.683841,
-      634984e-8,
-      0,
-      0.484748,
-      0.669391,
-      595502e-8,
-      0,
-      0.507802,
-      0.654731,
-      558671e-8,
-      0,
-      0.531477,
-      0.639805,
-      523578e-8,
-      0,
-      0.555802,
-      0.624789,
-      490834e-8,
-      0,
-      0.580805,
-      0.609325,
-      459448e-8,
-      0,
-      0.606522,
-      0.593975,
-      430342e-8,
-      0,
-      0.63299,
-      0.578983,
-      403019e-8,
-      0,
-      0.66025,
-      0.564442,
-      37707e-7,
-      0,
-      0.688346,
-      0.549835,
-      35316e-7,
-      0,
-      0.717319,
-      0.535039,
-      330255e-8,
-      0,
-      0.7472,
-      0.520403,
-      308932e-8,
-      0,
-      0.777982,
-      0.505687,
-      289335e-8,
-      0,
-      0.809524,
-      0.490939,
-      270818e-8,
-      0,
-      0.84127,
-      0.476233,
-      25343e-7,
-      0,
-      0.873016,
-      0.461624,
-      237097e-8,
-      0,
-      0.904762,
-      0.447833,
-      222065e-8,
-      0,
-      0.936508,
-      0.433992,
-      207561e-8,
-      0,
-      0.968254,
-      0.420147,
-      194955e-8,
-      0,
-      1,
-      1,
-      0.0173415,
-      0,
-      0,
-      1,
-      0.0173416,
-      0,
-      0,
-      0.999999,
-      0.0173426,
-      0,
-      0,
-      0.999995,
-      0.0173468,
-      0,
-      0,
-      0.999983,
-      0.0173582,
-      0,
-      0,
-      0.999954,
-      0.0173822,
-      0,
-      0,
-      0.999908,
-      0.0174258,
-      0,
-      669501e-11,
-      0.999828,
-      0.0174973,
-      0,
-      427399e-9,
-      0.999705,
-      0.0176063,
-      0,
-      171019e-8,
-      0.999524,
-      0.0177631,
-      0,
-      39248e-7,
-      0.999263,
-      0.0179781,
-      0,
-      705382e-8,
-      0.998878,
-      0.018258,
-      0,
-      0.0110552,
-      0.998012,
-      0.0185551,
-      0,
-      0.0158812,
-      0.994614,
-      0.0184264,
-      0,
-      0.0214852,
-      0.993132,
-      0.0186385,
-      0,
-      0.0278239,
-      0.991563,
-      0.0189067,
-      0,
-      0.0348585,
-      0.989298,
-      0.0191577,
-      0,
-      0.0425544,
-      0.986036,
-      0.0192522,
-      0,
-      0.050881,
-      0.982558,
-      0.0194063,
-      0,
-      0.059811,
-      0.978531,
-      0.019486,
-      0,
-      0.0693209,
-      0.974198,
-      0.0195847,
-      0,
-      0.0793895,
-      0.968148,
-      0.0194749,
-      0,
-      0.0899984,
-      0.962565,
-      0.0194277,
-      0,
-      0.101132,
-      0.956041,
-      0.0192991,
-      0,
-      0.112775,
-      0.947749,
-      0.0189893,
-      0,
-      0.124917,
-      0.94018,
-      0.018704,
-      0,
-      0.137547,
-      0.93165,
-      0.0183458,
-      0,
-      0.150655,
-      0.921798,
-      0.0178775,
-      0,
-      0.164236,
-      0.911573,
-      0.0173618,
-      0,
-      0.178281,
-      0.901569,
-      0.0168482,
-      0,
-      0.192788,
-      0.890341,
-      0.016265,
-      0,
-      0.207752,
-      0.877835,
-      0.0156199,
-      0,
-      0.223171,
-      0.865472,
-      0.0149516,
-      0,
-      0.239044,
-      0.852905,
-      0.0143274,
-      0,
-      0.255371,
-      0.838906,
-      0.0136643,
-      0,
-      0.272153,
-      0.824888,
-      0.0129903,
-      0,
-      0.289393,
-      0.809977,
-      0.0123218,
-      0,
-      0.307093,
-      0.794697,
-      0.0116572,
-      0,
-      0.325259,
-      0.780028,
-      0.0110307,
-      0,
-      0.343896,
-      0.765124,
-      0.0104236,
-      0,
-      0.363012,
-      0.750411,
-      98219e-7,
-      0,
-      0.382617,
-      0.737264,
-      924397e-8,
-      0,
-      0.402719,
-      0.724799,
-      868719e-8,
-      0,
-      0.423332,
-      0.712253,
-      816476e-8,
-      0,
-      0.444469,
-      0.699267,
-      767262e-8,
-      0,
-      0.466146,
-      0.685618,
-      719746e-8,
-      0,
-      0.488383,
-      0.671736,
-      673916e-8,
-      0,
-      0.511199,
-      0.657777,
-      631937e-8,
-      0,
-      0.534618,
-      0.643497,
-      592411e-8,
-      0,
-      0.558668,
-      0.62889,
-      553928e-8,
-      0,
-      0.58338,
-      0.614299,
-      51934e-7,
-      0,
-      0.608787,
-      0.599197,
-      485985e-8,
-      0,
-      0.634929,
-      0.584175,
-      454357e-8,
-      0,
-      0.661849,
-      0.569541,
-      425787e-8,
-      0,
-      0.689594,
-      0.555193,
-      397905e-8,
-      0,
-      0.718211,
-      0.540947,
-      372364e-8,
-      0,
-      0.747742,
-      0.526593,
-      348599e-8,
-      0,
-      0.778205,
-      0.512335,
-      326103e-8,
-      0,
-      0.80953,
-      0.498017,
-      305137e-8,
-      0,
-      0.84127,
-      0.483609,
-      285485e-8,
-      0,
-      0.873016,
-      0.469368,
-      267472e-8,
-      0,
-      0.904762,
-      0.455037,
-      249945e-8,
-      0,
-      0.936508,
-      0.441493,
-      234792e-8,
-      0,
-      0.968254,
-      0.428147,
-      219936e-8,
-      0,
-      1,
-      1,
-      0.0219422,
-      0,
-      0,
-      1,
-      0.0219423,
-      0,
-      0,
-      0.999998,
-      0.0219434,
-      0,
-      0,
-      0.999993,
-      0.0219481,
-      0,
-      0,
-      0.999981,
-      0.021961,
-      0,
-      0,
-      0.999949,
-      0.0219879,
-      0,
-      0,
-      0.999896,
-      0.0220367,
-      0,
-      593194e-10,
-      0.999808,
-      0.0221167,
-      0,
-      75364e-8,
-      0.99967,
-      0.0222383,
-      0,
-      237884e-8,
-      0.999466,
-      0.0224125,
-      0,
-      495612e-8,
-      0.999174,
-      0.0226495,
-      0,
-      844887e-8,
-      0.998725,
-      0.0229525,
-      0,
-      0.0128058,
-      0.996979,
-      0.0231123,
-      0,
-      0.0179742,
-      0.994317,
-      0.0230742,
-      0,
-      0.0239047,
-      0.992781,
-      0.0232895,
-      0,
-      0.0305526,
-      0.991191,
-      0.0235734,
-      0,
-      0.0378786,
-      0.987787,
-      0.0236152,
-      0,
-      0.0458475,
-      0.985092,
-      0.0237994,
-      0,
-      0.0544287,
-      0.981121,
-      0.0238553,
-      0,
-      0.0635952,
-      0.976924,
-      0.0238706,
-      0,
-      0.0733233,
-      0.97218,
-      0.0238704,
-      0,
-      0.0835922,
-      0.965956,
-      0.0236598,
-      0,
-      0.0943839,
-      0.959998,
-      0.0234735,
-      0,
-      0.105682,
-      0.953245,
-      0.0232277,
-      0,
-      0.117474,
-      0.944445,
-      0.0226973,
-      0,
-      0.129747,
-      0.937087,
-      0.0223527,
-      0,
-      0.142491,
-      0.928341,
-      0.0218144,
-      0,
-      0.155697,
-      0.9184,
-      0.0211516,
-      0,
-      0.169358,
-      0.907959,
-      0.0204553,
-      0,
-      0.183469,
-      0.89808,
-      0.0197673,
-      0,
-      0.198024,
-      0.887047,
-      0.0189915,
-      0,
-      0.21302,
-      0.875221,
-      0.0182082,
-      0,
-      0.228455,
-      0.86269,
-      0.0173584,
-      0,
-      0.244329,
-      0.850735,
-      0.0165718,
-      0,
-      0.260639,
-      0.837545,
-      0.0157524,
-      0,
-      0.277389,
-      0.823639,
-      0.0149482,
-      0,
-      0.29458,
-      0.809699,
-      0.0141431,
-      0,
-      0.312216,
-      0.794797,
-      0.0133527,
-      0,
-      0.3303,
-      0.780578,
-      0.0126193,
-      0,
-      0.34884,
-      0.766019,
-      0.0118914,
-      0,
-      0.367842,
-      0.751447,
-      0.0111839,
-      0,
-      0.387315,
-      0.737275,
-      0.010514,
-      0,
-      0.40727,
-      0.724545,
-      987277e-8,
-      0,
-      0.427717,
-      0.712644,
-      926569e-8,
-      0,
-      0.448671,
-      0.700432,
-      869029e-8,
-      0,
-      0.470149,
-      0.687664,
-      814691e-8,
-      0,
-      0.492167,
-      0.674288,
-      763012e-8,
-      0,
-      0.514746,
-      0.660966,
-      714437e-8,
-      0,
-      0.537911,
-      0.647264,
-      668457e-8,
-      0,
-      0.561688,
-      0.633431,
-      626581e-8,
-      0,
-      0.586108,
-      0.619133,
-      585593e-8,
-      0,
-      0.611206,
-      0.604935,
-      548188e-8,
-      0,
-      0.637022,
-      0.590236,
-      513288e-8,
-      0,
-      0.663599,
-      0.575473,
-      47906e-7,
-      0,
-      0.690989,
-      0.561228,
-      448895e-8,
-      0,
-      0.719242,
-      0.547054,
-      420233e-8,
-      0,
-      0.748411,
-      0.533175,
-      392869e-8,
-      0,
-      0.778531,
-      0.519163,
-      367445e-8,
-      0,
-      0.809583,
-      0.505328,
-      344097e-8,
-      0,
-      0.84127,
-      0.491446,
-      322003e-8,
-      0,
-      0.873016,
-      0.477356,
-      301283e-8,
-      0,
-      0.904762,
-      0.46356,
-      282592e-8,
-      0,
-      0.936508,
-      0.449623,
-      264956e-8,
-      0,
-      0.968254,
-      0.436068,
-      246956e-8,
-      0,
-      1,
-      1,
-      0.0276135,
-      0,
-      0,
-      1,
-      0.0276136,
-      0,
-      0,
-      0.999998,
-      0.0276148,
-      0,
-      0,
-      0.999993,
-      0.0276201,
-      0,
-      0,
-      0.999976,
-      0.0276342,
-      0,
-      0,
-      0.999945,
-      0.027664,
-      0,
-      0,
-      0.999884,
-      0.0277179,
-      0,
-      18679e-8,
-      0.999784,
-      0.027806,
-      0,
-      119607e-8,
-      0.99963,
-      0.0279394,
-      0,
-      318407e-8,
-      0.999401,
-      0.0281295,
-      0,
-      613601e-8,
-      0.999066,
-      0.0283858,
-      0,
-      999963e-8,
-      0.998524,
-      0.0287027,
-      0,
-      0.0147164,
-      0.995702,
-      0.0286256,
-      0,
-      0.0202295,
-      0.993593,
-      0.0286733,
-      0,
-      0.0264876,
-      0.992067,
-      0.0288989,
-      0,
-      0.0334452,
-      0.990548,
-      0.0292135,
-      0,
-      0.0410621,
-      0.986775,
-      0.0291296,
-      0,
-      0.0493032,
-      0.984054,
-      0.0293099,
-      0,
-      0.0581381,
-      0.979481,
-      0.0291881,
-      0,
-      0.0675397,
-      0.975297,
-      0.0291598,
-      0,
-      0.0774848,
-      0.96981,
-      0.028954,
-      0,
-      0.0879528,
-      0.963524,
-      0.028628,
-      0,
-      0.0989258,
-      0.957398,
-      0.0283135,
-      0,
-      0.110388,
-      0.950088,
-      0.0278469,
-      0,
-      0.122327,
-      0.941538,
-      0.0271798,
-      0,
-      0.134729,
-      0.933332,
-      0.0265388,
-      0,
-      0.147587,
-      0.924392,
-      0.0257776,
-      0,
-      0.160889,
-      0.914581,
-      0.024916,
-      0,
-      0.174631,
-      0.904347,
-      0.0240242,
-      0,
-      0.188806,
-      0.894324,
-      0.0231229,
-      0,
-      0.203409,
-      0.883724,
-      0.022153,
-      0,
-      0.218437,
-      0.872207,
-      0.0211355,
-      0,
-      0.233888,
-      0.859927,
-      0.0201048,
-      0,
-      0.249761,
-      0.848373,
-      0.0191263,
-      0,
-      0.266056,
-      0.836023,
-      0.0181306,
-      0,
-      0.282774,
-      0.82289,
-      0.0171718,
-      0,
-      0.299917,
-      0.809324,
-      0.0162196,
-      0,
-      0.317488,
-      0.795361,
-      0.0152622,
-      0,
-      0.335493,
-      0.781253,
-      0.01439,
-      0,
-      0.353936,
-      0.767338,
-      0.013533,
-      0,
-      0.372825,
-      0.753156,
-      0.0127244,
-      0,
-      0.392168,
-      0.739122,
-      0.0119454,
-      0,
-      0.411976,
-      0.725358,
-      0.0112054,
-      0,
-      0.432259,
-      0.712949,
-      0.010487,
-      0,
-      0.453032,
-      0.701621,
-      984032e-8,
-      0,
-      0.47431,
-      0.689703,
-      921495e-8,
-      0,
-      0.496111,
-      0.677216,
-      862492e-8,
-      0,
-      0.518456,
-      0.664217,
-      806882e-8,
-      0,
-      0.541367,
-      0.65137,
-      755922e-8,
-      0,
-      0.564872,
-      0.638,
-      705705e-8,
-      0,
-      0.589001,
-      0.62453,
-      661266e-8,
-      0,
-      0.613789,
-      0.610601,
-      618432e-8,
-      0,
-      0.639277,
-      0.59676,
-      578033e-8,
-      0,
-      0.66551,
-      0.582433,
-      540927e-8,
-      0,
-      0.692539,
-      0.568026,
-      506104e-8,
-      0,
-      0.720422,
-      0.55414,
-      47353e-7,
-      0,
-      0.749216,
-      0.540178,
-      442889e-8,
-      0,
-      0.778974,
-      0.526513,
-      414363e-8,
-      0,
-      0.809711,
-      0.512954,
-      388237e-8,
-      0,
-      0.84127,
-      0.499403,
-      362875e-8,
-      0,
-      0.873016,
-      0.486026,
-      340827e-8,
-      0,
-      0.904762,
-      0.472345,
-      318598e-8,
-      0,
-      0.936508,
-      0.458828,
-      297635e-8,
-      0,
-      0.968254,
-      0.445379,
-      279447e-8,
-      0,
-      1,
-      1,
-      0.0345716,
-      0,
-      0,
-      1,
-      0.0345717,
-      0,
-      0,
-      0.999999,
-      0.034573,
-      0,
-      0,
-      0.999991,
-      0.0345787,
-      0,
-      0,
-      0.999974,
-      0.0345941,
-      0,
-      0,
-      0.999937,
-      0.0346263,
-      0,
-      188589e-11,
-      0.999869,
-      0.0346847,
-      0,
-      409238e-9,
-      0.999757,
-      0.0347798,
-      0,
-      17674e-7,
-      0.999582,
-      0.0349233,
-      0,
-      413658e-8,
-      0.999322,
-      0.0351265,
-      0,
-      747408e-8,
-      0.998939,
-      0.0353967,
-      0,
-      0.0117157,
-      0.998219,
-      0.0357018,
-      0,
-      0.0167966,
-      0.994974,
-      0.0354726,
-      0,
-      0.0226572,
-      0.993201,
-      0.0355621,
-      0,
-      0.0292445,
-      0.991573,
-      0.0357641,
-      0,
-      0.0365123,
-      0.989301,
-      0.0359252,
-      0,
-      0.0444203,
-      0.985712,
-      0.0358017,
-      0,
-      0.0529334,
-      0.982411,
-      0.0358353,
-      0,
-      0.0620214,
-      0.977827,
-      0.035617,
-      0,
-      0.0716574,
-      0.973278,
-      0.0354398,
-      0,
-      0.0818186,
-      0.967397,
-      0.0350483,
-      0,
-      0.0924846,
-      0.960696,
-      0.0344795,
-      0,
-      0.103638,
-      0.954349,
-      0.0339861,
-      0,
-      0.115263,
-      0.946066,
-      0.0331323,
-      0,
-      0.127348,
-      0.938012,
-      0.032359,
-      0,
-      0.13988,
-      0.929413,
-      0.0314413,
-      0,
-      0.152849,
-      0.920355,
-      0.0304103,
-      0,
-      0.166248,
-      0.910586,
-      0.0292785,
-      0,
-      0.18007,
-      0.900609,
-      0.0281391,
-      0,
-      0.194308,
-      0.890093,
-      0.0269103,
-      0,
-      0.208958,
-      0.880013,
-      0.0257269,
-      0,
-      0.224018,
-      0.869001,
-      0.0244671,
-      0,
-      0.239485,
-      0.85751,
-      0.0232252,
-      0,
-      0.255359,
-      0.84582,
-      0.0220117,
-      0,
-      0.271638,
-      0.834383,
-      0.0208274,
-      0,
-      0.288324,
-      0.822158,
-      0.0196628,
-      0,
-      0.305419,
-      0.809056,
-      0.0185306,
-      0,
-      0.322927,
-      0.795832,
-      0.0174174,
-      0,
-      0.340851,
-      0.782547,
-      0.0163758,
-      0,
-      0.359199,
-      0.7689,
-      0.015391,
-      0,
-      0.377975,
-      0.755526,
-      0.0144488,
-      0,
-      0.397189,
-      0.741681,
-      0.0135372,
-      0,
-      0.416851,
-      0.728178,
-      0.0126957,
-      0,
-      0.436971,
-      0.714642,
-      0.0118812,
-      0,
-      0.457564,
-      0.702756,
-      0.0111165,
-      0,
-      0.478644,
-      0.69175,
-      0.0104145,
-      0,
-      0.500229,
-      0.680159,
-      974439e-8,
-      0,
-      0.522339,
-      0.668073,
-      911926e-8,
-      0,
-      0.544997,
-      0.655405,
-      851393e-8,
-      0,
-      0.56823,
-      0.642921,
-      797637e-8,
-      0,
-      0.592068,
-      0.629993,
-      745119e-8,
-      0,
-      0.616546,
-      0.616828,
-      696972e-8,
-      0,
-      0.641705,
-      0.603305,
-      652425e-8,
-      0,
-      0.66759,
-      0.589833,
-      610188e-8,
-      0,
-      0.694255,
-      0.575945,
-      570834e-8,
-      0,
-      0.72176,
-      0.561745,
-      533384e-8,
-      0,
-      0.750168,
-      0.548277,
-      500001e-8,
-      0,
-      0.779545,
-      0.534467,
-      467582e-8,
-      0,
-      0.809933,
-      0.521032,
-      438092e-8,
-      0,
-      0.841272,
-      0.507877,
-      410348e-8,
-      0,
-      0.873016,
-      0.494654,
-      383618e-8,
-      0,
-      0.904762,
-      0.481592,
-      358699e-8,
-      0,
-      0.936508,
-      0.468509,
-      337281e-8,
-      0,
-      0.968254,
-      0.455293,
-      316196e-8,
-      0,
-      1,
-      1,
-      0.0430698,
-      0,
-      0,
-      1,
-      0.0430699,
-      0,
-      0,
-      0.999998,
-      0.0430713,
-      0,
-      0,
-      0.999991,
-      0.0430773,
-      0,
-      0,
-      0.99997,
-      0.0430936,
-      0,
-      0,
-      0.999928,
-      0.0431277,
-      0,
-      406396e-10,
-      0.999852,
-      0.0431893,
-      0,
-      744376e-9,
-      0.999724,
-      0.0432895,
-      0,
-      24806e-7,
-      0.999527,
-      0.0434397,
-      0,
-      524779e-8,
-      0.99923,
-      0.0436507,
-      0,
-      898164e-8,
-      0.998783,
-      0.0439255,
-      0,
-      0.0136083,
-      0.997507,
-      0.0441104,
-      0,
-      0.0190582,
-      0.994418,
-      0.0438225,
-      0,
-      0.0252694,
-      0.992864,
-      0.0439396,
-      0,
-      0.0321879,
-      0.991127,
-      0.0440962,
-      0,
-      0.039767,
-      0.987331,
-      0.0438408,
-      0,
-      0.0479667,
-      0.984819,
-      0.0438991,
-      0,
-      0.056752,
-      0.980384,
-      0.0435906,
-      0,
-      0.0660929,
-      0.975846,
-      0.0432543,
-      0,
-      0.075963,
-      0.970748,
-      0.0428293,
-      0,
-      0.0863398,
-      0.964303,
-      0.042153,
-      0,
-      0.0972035,
-      0.95772,
-      0.0414111,
-      0,
-      0.108537,
-      0.950747,
-      0.0405893,
-      0,
-      0.120325,
-      0.942533,
-      0.0394887,
-      0,
-      0.132554,
-      0.934045,
-      0.0383544,
-      0,
-      0.145215,
-      0.924942,
-      0.037057,
-      0,
-      0.158296,
-      0.915811,
-      0.0356993,
-      0,
-      0.17179,
-      0.90612,
-      0.0342401,
-      0,
-      0.185691,
-      0.896434,
-      0.0328078,
-      0,
-      0.199993,
-      0.886021,
-      0.031288,
-      0,
-      0.214691,
-      0.876081,
-      0.0297776,
-      0,
-      0.229782,
-      0.865608,
-      0.0282334,
-      0,
-      0.245265,
-      0.854924,
-      0.026749,
-      0,
-      0.261138,
-      0.843607,
-      0.02526,
-      0,
-      0.277401,
-      0.832456,
-      0.0238214,
-      0,
-      0.294056,
-      0.821342,
-      0.0224682,
-      0,
-      0.311104,
-      0.809303,
-      0.0211297,
-      0,
-      0.328548,
-      0.796468,
-      0.0198387,
-      0,
-      0.346394,
-      0.784046,
-      0.0186227,
-      0,
-      0.364645,
-      0.771262,
-      0.0174561,
-      0,
-      0.38331,
-      0.758118,
-      0.0163806,
-      0,
-      0.402396,
-      0.745075,
-      0.0153287,
-      0,
-      0.421912,
-      0.731926,
-      0.0143647,
-      0,
-      0.44187,
-      0.71863,
-      0.0134363,
-      0,
-      0.462283,
-      0.705414,
-      0.0125603,
-      0,
-      0.483165,
-      0.693792,
-      0.0117508,
-      0,
-      0.504535,
-      0.683108,
-      0.0110016,
-      0,
-      0.52641,
-      0.67183,
-      0.0102757,
-      0,
-      0.548816,
-      0.66015,
-      962044e-8,
-      0,
-      0.571776,
-      0.647907,
-      898031e-8,
-      0,
-      0.595323,
-      0.635734,
-      840811e-8,
-      0,
-      0.619489,
-      0.623208,
-      786211e-8,
-      0,
-      0.644317,
-      0.610438,
-      734953e-8,
-      0,
-      0.669852,
-      0.597345,
-      687688e-8,
-      0,
-      0.696148,
-      0.584138,
-      643469e-8,
-      0,
-      0.723267,
-      0.5707,
-      602236e-8,
-      0,
-      0.75128,
-      0.556966,
-      56324e-7,
-      0,
-      0.780258,
-      0.543607,
-      528277e-8,
-      0,
-      0.810268,
-      0.530213,
-      493999e-8,
-      0,
-      0.841311,
-      0.516912,
-      462265e-8,
-      0,
-      0.873016,
-      0.503916,
-      43307e-7,
-      0,
-      0.904762,
-      0.491146,
-      406858e-8,
-      0,
-      0.936508,
-      0.478439,
-      381436e-8,
-      0,
-      0.968254,
-      0.465834,
-      358003e-8,
-      0,
-      1,
-      1,
-      0.0534039,
-      0,
-      0,
-      1,
-      0.053404,
-      0,
-      0,
-      0.999998,
-      0.0534055,
-      0,
-      0,
-      0.999989,
-      0.0534116,
-      0,
-      0,
-      0.999968,
-      0.0534283,
-      0,
-      0,
-      0.999918,
-      0.0534633,
-      0,
-      155895e-9,
-      0.99983,
-      0.0535262,
-      0,
-      120914e-8,
-      0.999685,
-      0.0536281,
-      0,
-      334944e-8,
-      0.999461,
-      0.0537799,
-      0,
-      653077e-8,
-      0.999119,
-      0.0539902,
-      0,
-      0.0106718,
-      0.998582,
-      0.0542524,
-      0,
-      0.0156907,
-      0.995919,
-      0.0540318,
-      0,
-      0.0215147,
-      0.993735,
-      0.0538914,
-      0,
-      0.0280801,
-      0.992126,
-      0.0539557,
-      0,
-      0.0353323,
-      0.990266,
-      0.0540401,
-      0,
-      0.0432247,
-      0.986317,
-      0.0536064,
-      0,
-      0.0517172,
-      0.983213,
-      0.0534425,
-      0,
-      0.0607754,
-      0.978303,
-      0.0528622,
-      0,
-      0.0703698,
-      0.973665,
-      0.0523363,
-      0,
-      0.0804742,
-      0.968091,
-      0.0516165,
-      0,
-      0.0910667,
-      0.961026,
-      0.0505434,
-      0,
-      0.102128,
-      0.954333,
-      0.049523,
-      0,
-      0.113641,
-      0.946372,
-      0.0481698,
-      0,
-      0.125591,
-      0.938254,
-      0.0467674,
-      0,
-      0.137965,
-      0.929516,
-      0.0452341,
-      0,
-      0.150754,
-      0.920106,
-      0.0435083,
-      0,
-      0.163947,
-      0.910899,
-      0.0417399,
-      0,
-      0.177537,
-      0.901532,
-      0.0399389,
-      0,
-      0.191516,
-      0.891919,
-      0.0380901,
-      0,
-      0.205881,
-      0.882006,
-      0.0362341,
-      0,
-      0.220626,
-      0.871965,
-      0.0343444,
-      0,
-      0.235749,
-      0.862145,
-      0.0324832,
-      0,
-      0.251248,
-      0.852058,
-      0.0306681,
-      0,
-      0.267121,
-      0.84161,
-      0.0289097,
-      0,
-      0.283368,
-      0.830806,
-      0.0272079,
-      0,
-      0.299992,
-      0.820476,
-      0.0256089,
-      0,
-      0.316992,
-      0.809514,
-      0.0240394,
-      0,
-      0.334374,
-      0.797865,
-      0.0225379,
-      0,
-      0.35214,
-      0.785621,
-      0.0211235,
-      0,
-      0.370296,
-      0.773765,
-      0.0197908,
-      0,
-      0.388849,
-      0.761629,
-      0.0185235,
-      0,
-      0.407807,
-      0.748891,
-      0.0173358,
-      0,
-      0.427178,
-      0.736437,
-      0.0162305,
-      0,
-      0.446974,
-      0.723707,
-      0.0151778,
-      0,
-      0.467207,
-      0.710606,
-      0.0141791,
-      0,
-      0.487892,
-      0.698019,
-      0.0132592,
-      0,
-      0.509046,
-      0.686203,
-      0.0123887,
-      0,
-      0.530687,
-      0.675692,
-      0.0115976,
-      0,
-      0.552839,
-      0.664826,
-      0.0108325,
-      0,
-      0.575527,
-      0.65349,
-      0.0101348,
-      0,
-      0.59878,
-      0.641774,
-      947756e-8,
-      0,
-      0.622634,
-      0.629794,
-      886058e-8,
-      0,
-      0.647128,
-      0.617647,
-      828526e-8,
-      0,
-      0.672308,
-      0.60534,
-      775312e-8,
-      0,
-      0.698231,
-      0.592718,
-      726033e-8,
-      0,
-      0.724958,
-      0.579746,
-      679731e-8,
-      0,
-      0.752563,
-      0.566763,
-      636111e-8,
-      0,
-      0.781127,
-      0.553515,
-      595228e-8,
-      0,
-      0.810733,
-      0.540118,
-      556876e-8,
-      0,
-      0.841426,
-      0.527325,
-      523051e-8,
-      0,
-      0.873016,
-      0.514265,
-      490712e-8,
-      0,
-      0.904762,
-      0.501406,
-      460297e-8,
-      0,
-      0.936508,
-      0.488922,
-      431247e-8,
-      0,
-      0.968254,
-      0.476541,
-      40472e-7,
-      0,
-      1,
-      1,
-      0.0659184,
-      0,
-      0,
-      1,
-      0.0659185,
-      0,
-      0,
-      0.999998,
-      0.06592,
-      0,
-      0,
-      0.999988,
-      0.0659259,
-      0,
-      0,
-      0.999963,
-      0.0659423,
-      0,
-      0,
-      0.999907,
-      0.0659764,
-      0,
-      374198e-9,
-      0.999806,
-      0.0660376,
-      0,
-      182071e-8,
-      0.999639,
-      0.0661361,
-      0,
-      43894e-7,
-      0.999378,
-      0.0662814,
-      0,
-      800055e-8,
-      0.998985,
-      0.0664779,
-      0,
-      0.0125594,
-      0.998285,
-      0.0666914,
-      0,
-      0.0179786,
-      0.995071,
-      0.0661989,
-      0,
-      0.0241822,
-      0.993172,
-      0.0660454,
-      0,
-      0.031106,
-      0.991438,
-      0.0660105,
-      0,
-      0.0386952,
-      0.988428,
-      0.0656875,
-      0,
-      0.0469032,
-      0.985218,
-      0.0652913,
-      0,
-      0.0556905,
-      0.981128,
-      0.0647107,
-      0,
-      0.065023,
-      0.976015,
-      0.0638491,
-      0,
-      0.0748717,
-      0.97097,
-      0.062993,
-      0,
-      0.0852112,
-      0.964582,
-      0.0617927,
-      0,
-      0.0960199,
-      0.957383,
-      0.0603626,
-      0,
-      0.107279,
-      0.949969,
-      0.0588128,
-      0,
-      0.118971,
-      0.941843,
-      0.0570274,
-      0,
-      0.131084,
-      0.933624,
-      0.0551885,
-      0,
-      0.143604,
-      0.924543,
-      0.053122,
-      0,
-      0.156521,
-      0.914919,
-      0.0508897,
-      0,
-      0.169825,
-      0.905773,
-      0.0486418,
-      0,
-      0.18351,
-      0.896434,
-      0.0463364,
-      0,
-      0.197569,
-      0.887195,
-      0.0440623,
-      0,
-      0.211997,
-      0.877706,
-      0.0417799,
-      0,
-      0.226789,
-      0.867719,
-      0.03945,
-      0,
-      0.241944,
-      0.858587,
-      0.037243,
-      0,
-      0.257458,
-      0.849317,
-      0.0350956,
-      0,
-      0.273331,
-      0.839585,
-      0.0329852,
-      0,
-      0.289563,
-      0.829856,
-      0.0310028,
-      0,
-      0.306154,
-      0.819589,
-      0.0290953,
-      0,
-      0.323108,
-      0.809714,
-      0.0272738,
-      0,
-      0.340426,
-      0.79934,
-      0.0255631,
-      0,
-      0.358113,
-      0.788224,
-      0.0239175,
-      0,
-      0.376175,
-      0.776619,
-      0.0223831,
-      0,
-      0.394616,
-      0.76521,
-      0.0209298,
-      0,
-      0.413445,
-      0.753716,
-      0.0195786,
-      0,
-      0.432671,
-      0.741564,
-      0.0183001,
-      0,
-      0.452305,
-      0.729413,
-      0.0171259,
-      0,
-      0.472358,
-      0.717146,
-      0.0159933,
-      0,
-      0.492845,
-      0.70436,
-      0.0149495,
-      0,
-      0.513783,
-      0.69219,
-      0.0139681,
-      0,
-      0.535189,
-      0.680289,
-      0.0130577,
-      0,
-      0.557087,
-      0.669611,
-      0.0122198,
-      0,
-      0.5795,
-      0.659113,
-      0.0114174,
-      0,
-      0.602459,
-      0.648148,
-      0.0106729,
-      0,
-      0.625997,
-      0.636905,
-      998997e-8,
-      0,
-      0.650154,
-      0.625154,
-      934313e-8,
-      0,
-      0.674976,
-      0.613481,
-      874839e-8,
-      0,
-      0.700518,
-      0.60154,
-      818265e-8,
-      0,
-      0.726845,
-      0.58943,
-      766889e-8,
-      0,
-      0.754032,
-      0.576828,
-      717153e-8,
-      0,
-      0.782167,
-      0.564194,
-      672696e-8,
-      0,
-      0.811344,
-      0.551501,
-      630863e-8,
-      0,
-      0.841644,
-      0.538635,
-      592177e-8,
-      0,
-      0.873016,
-      0.525724,
-      554888e-8,
-      0,
-      0.904762,
-      0.513209,
-      520225e-8,
-      0,
-      0.936508,
-      0.500457,
-      488231e-8,
-      0,
-      0.968254,
-      0.48799,
-      457153e-8,
-      0,
-      1,
-      1,
-      0.0810131,
-      0,
-      0,
-      1,
-      0.0810133,
-      0,
-      0,
-      0.999997,
-      0.0810145,
-      0,
-      0,
-      0.999985,
-      0.08102,
-      0,
-      0,
-      0.999956,
-      0.0810347,
-      0,
-      195026e-10,
-      0.999893,
-      0.0810656,
-      0,
-      719316e-9,
-      0.999777,
-      0.0811205,
-      0,
-      259774e-8,
-      0.999583,
-      0.081208,
-      0,
-      561807e-8,
-      0.999281,
-      0.0813343,
-      0,
-      967472e-8,
-      0.998813,
-      0.0814969,
-      0,
-      0.0146627,
-      0.997597,
-      0.0815217,
-      0,
-      0.0204902,
-      0.994379,
-      0.0808502,
-      0,
-      0.0270802,
-      0.992744,
-      0.0806792,
-      0,
-      0.0343674,
-      0.990745,
-      0.0804589,
-      0,
-      0.0422974,
-      0.986646,
-      0.0796107,
-      0,
-      0.0508242,
-      0.983611,
-      0.0790913,
-      0,
-      0.0599087,
-      0.978869,
-      0.0780746,
-      0,
-      0.0695175,
-      0.973475,
-      0.0768218,
-      0,
-      0.0796223,
-      0.967845,
-      0.0754926,
-      0,
-      0.0901983,
-      0.960778,
-      0.0737063,
-      0,
-      0.101224,
-      0.953333,
-      0.0718052,
-      0,
-      0.112682,
-      0.945274,
-      0.0695946,
-      0,
-      0.124555,
-      0.936955,
-      0.0672492,
-      0,
-      0.136831,
-      0.928319,
-      0.0647732,
-      0,
-      0.149496,
-      0.919075,
-      0.0620947,
-      0,
-      0.162542,
-      0.909114,
-      0.0591816,
-      0,
-      0.175958,
-      0.900137,
-      0.0563917,
-      0,
-      0.189739,
-      0.891069,
-      0.0535392,
-      0,
-      0.203877,
-      0.882262,
-      0.0507642,
-      0,
-      0.218368,
-      0.873232,
-      0.0479793,
-      0,
-      0.233208,
-      0.864042,
-      0.045226,
-      0,
-      0.248393,
-      0.855002,
-      0.0425413,
-      0,
-      0.263923,
-      0.846569,
-      0.0400126,
-      0,
-      0.279796,
-      0.837714,
-      0.0375269,
-      0,
-      0.296012,
-      0.828918,
-      0.0352027,
-      0,
-      0.312573,
-      0.819783,
-      0.0330011,
-      0,
-      0.329479,
-      0.810129,
-      0.0308908,
-      0,
-      0.346734,
-      0.800866,
-      0.0289112,
-      0,
-      0.364342,
-      0.79093,
-      0.0270255,
-      0,
-      0.382307,
-      0.780593,
-      0.0252758,
-      0,
-      0.400637,
-      0.769511,
-      0.0236178,
-      0,
-      0.419337,
-      0.758558,
-      0.0220652,
-      0,
-      0.438418,
-      0.747632,
-      0.0206289,
-      0,
-      0.457889,
-      0.736146,
-      0.0192873,
-      0,
-      0.477761,
-      0.724093,
-      0.0180333,
-      0,
-      0.49805,
-      0.71234,
-      0.0168264,
-      0,
-      0.51877,
-      0.700201,
-      0.015746,
-      0,
-      0.53994,
-      0.687949,
-      0.0147027,
-      0,
-      0.561581,
-      0.676163,
-      0.0137512,
-      0,
-      0.583718,
-      0.665001,
-      0.0128655,
-      0,
-      0.60638,
-      0.65472,
-      0.0120366,
-      0,
-      0.629599,
-      0.644213,
-      0.0112604,
-      0,
-      0.653415,
-      0.633382,
-      0.0105413,
-      0,
-      0.677874,
-      0.62212,
-      986498e-8,
-      0,
-      0.70303,
-      0.610631,
-      923308e-8,
-      0,
-      0.728948,
-      0.599078,
-      864206e-8,
-      0,
-      0.755706,
-      0.587519,
-      811784e-8,
-      0,
-      0.783396,
-      0.575505,
-      761237e-8,
-      0,
-      0.812121,
-      0.563148,
-      713949e-8,
-      0,
-      0.841989,
-      0.550828,
-      668379e-8,
-      0,
-      0.873035,
-      0.538458,
-      627715e-8,
-      0,
-      0.904762,
-      0.525905,
-      588336e-8,
-      0,
-      0.936508,
-      0.513517,
-      552687e-8,
-      0,
-      0.968254,
-      0.501395,
-      519681e-8,
-      0,
-      1,
-      1,
-      0.0991506,
-      0,
-      0,
-      1,
-      0.0991504,
-      0,
-      0,
-      0.999996,
-      0.0991515,
-      0,
-      0,
-      0.999984,
-      0.0991558,
-      0,
-      0,
-      0.999947,
-      0.0991672,
-      0,
-      114389e-9,
-      0.999874,
-      0.0991912,
-      0,
-      121503e-8,
-      0.999739,
-      0.0992331,
-      0,
-      356108e-8,
-      0.999514,
-      0.0992983,
-      0,
-      705578e-8,
-      0.999159,
-      0.0993877,
-      0,
-      0.011574,
-      0.998586,
-      0.0994837,
-      0,
-      0.017003,
-      0.995731,
-      0.0988425,
-      0,
-      0.0232484,
-      0.993384,
-      0.098276,
-      0,
-      0.0302318,
-      0.991615,
-      0.0979269,
-      0,
-      0.0378884,
-      0.989029,
-      0.0973432,
-      0,
-      0.0461641,
-      0.985373,
-      0.0963539,
-      0,
-      0.0550136,
-      0.981278,
-      0.0952306,
-      0,
-      0.0643988,
-      0.975777,
-      0.0936233,
-      0,
-      0.0742868,
-      0.970526,
-      0.0920219,
-      0,
-      0.0846501,
-      0.963755,
-      0.0898912,
-      0,
-      0.0954644,
-      0.956676,
-      0.0876064,
-      0,
-      0.106709,
-      0.948099,
-      0.0847751,
-      0,
-      0.118367,
-      0.939718,
-      0.0818638,
-      0,
-      0.130423,
-      0.931305,
-      0.078857,
-      0,
-      0.142862,
-      0.922342,
-      0.0756127,
-      0,
-      0.155674,
-      0.912842,
-      0.0721473,
-      0,
-      0.168849,
-      0.903304,
-      0.0686195,
-      0,
-      0.182378,
-      0.89411,
-      0.0650589,
-      0,
-      0.196255,
-      0.885512,
-      0.0616022,
-      0,
-      0.210473,
-      0.877193,
-      0.0582434,
-      0,
-      0.225027,
-      0.86877,
-      0.0548979,
-      0,
-      0.239915,
-      0.860267,
-      0.0516095,
-      0,
-      0.255132,
-      0.851915,
-      0.048468,
-      0,
-      0.270678,
-      0.843912,
-      0.0454447,
-      0,
-      0.286551,
-      0.83604,
-      0.0425612,
-      0,
-      0.302751,
-      0.828245,
-      0.0398752,
-      0,
-      0.31928,
-      0.820159,
-      0.0373198,
-      0,
-      0.336138,
-      0.81167,
-      0.034916,
-      0,
-      0.35333,
-      0.802659,
-      0.0326402,
-      0,
-      0.370858,
-      0.793921,
-      0.0304901,
-      0,
-      0.388728,
-      0.784713,
-      0.0284857,
-      0,
-      0.406944,
-      0.774946,
-      0.0266186,
-      0,
-      0.425515,
-      0.76448,
-      0.0248593,
-      0,
-      0.444449,
-      0.753793,
-      0.0232114,
-      0,
-      0.463756,
-      0.743506,
-      0.0217039,
-      0,
-      0.483447,
-      0.732555,
-      0.0202841,
-      0,
-      0.503535,
-      0.720965,
-      0.0189648,
-      0,
-      0.524036,
-      0.709422,
-      0.0177189,
-      0,
-      0.544968,
-      0.697756,
-      0.0165626,
-      0,
-      0.56635,
-      0.685565,
-      0.015483,
-      0,
-      0.588208,
-      0.673987,
-      0.0144892,
-      0,
-      0.610569,
-      0.66244,
-      0.0135607,
-      0,
-      0.633466,
-      0.651675,
-      0.0126956,
-      0,
-      0.656936,
-      0.641598,
-      0.0118788,
-      0,
-      0.681025,
-      0.63121,
-      0.0111261,
-      0,
-      0.705788,
-      0.620514,
-      0.010437,
-      0,
-      0.731289,
-      0.609366,
-      978747e-8,
-      0,
-      0.757606,
-      0.598137,
-      917257e-8,
-      0,
-      0.784834,
-      0.586966,
-      859778e-8,
-      0,
-      0.813085,
-      0.575549,
-      806803e-8,
-      0,
-      0.842485,
-      0.563797,
-      757294e-8,
-      0,
-      0.87313,
-      0.551758,
-      710592e-8,
-      0,
-      0.904762,
-      0.539894,
-      66841e-7,
-      0,
-      0.936508,
-      0.527901,
-      627901e-8,
-      0,
-      0.968254,
-      0.515819,
-      590506e-8,
-      0,
-      1,
-      1,
-      0.120864,
-      0,
-      0,
-      1,
-      0.120864,
-      0,
-      0,
-      0.999996,
-      0.120864,
-      0,
-      0,
-      0.99998,
-      0.120867,
-      0,
-      0,
-      0.99994,
-      0.120872,
-      0,
-      323781e-9,
-      0.999852,
-      0.120884,
-      0,
-      188693e-8,
-      0.999693,
-      0.120903,
-      0,
-      473489e-8,
-      0.999426,
-      0.120929,
-      0,
-      872704e-8,
-      0.999002,
-      0.120955,
-      0,
-      0.0137237,
-      0.998235,
-      0.120918,
-      0,
-      0.0196068,
-      0.994608,
-      0.119764,
-      0,
-      0.0262803,
-      0.992997,
-      0.119265,
-      0,
-      0.0336657,
-      0.990968,
-      0.11863,
-      0,
-      0.0416987,
-      0.987002,
-      0.117261,
-      0,
-      0.0503261,
-      0.983524,
-      0.116009,
-      0,
-      0.0595035,
-      0.97875,
-      0.114252,
-      0,
-      0.0691935,
-      0.972652,
-      0.11193,
-      0,
-      0.0793645,
-      0.966613,
-      0.109555,
-      0,
-      0.0899894,
-      0.959275,
-      0.106612,
-      0,
-      0.101045,
-      0.951272,
-      0.103375,
-      0,
-      0.112512,
-      0.942323,
-      0.0996594,
-      0,
-      0.124372,
-      0.933679,
-      0.0958841,
-      0,
-      0.136611,
-      0.924822,
-      0.0919265,
-      0,
-      0.149216,
-      0.915742,
-      0.0878061,
-      0,
-      0.162176,
-      0.906348,
-      0.0834894,
-      0,
-      0.175482,
-      0.896883,
-      0.079085,
-      0,
-      0.189125,
-      0.88774,
-      0.0746745,
-      0,
-      0.203098,
-      0.87986,
-      0.0705773,
-      0,
-      0.217396,
-      0.871998,
-      0.0665005,
-      0,
-      0.232015,
-      0.864325,
-      0.0625413,
-      0,
-      0.24695,
-      0.856685,
-      0.0586781,
-      0,
-      0.2622,
-      0.84925,
-      0.0550063,
-      0,
-      0.277761,
-      0.841719,
-      0.0514727,
-      0,
-      0.293634,
-      0.834755,
-      0.0481398,
-      0,
-      0.309819,
-      0.827853,
-      0.0450172,
-      0,
-      0.326315,
-      0.820888,
-      0.0420969,
-      0,
-      0.343126,
-      0.813616,
-      0.0393702,
-      0,
-      0.360254,
-      0.805767,
-      0.0367771,
-      0,
-      0.377701,
-      0.797338,
-      0.0343274,
-      0,
-      0.395474,
-      0.789122,
-      0.0320529,
-      0,
-      0.413577,
-      0.780601,
-      0.0299485,
-      0,
-      0.432018,
-      0.771424,
-      0.0279812,
-      0,
-      0.450804,
-      0.761502,
-      0.0261054,
-      0,
-      0.469944,
-      0.751166,
-      0.0243942,
-      0,
-      0.489451,
-      0.741276,
-      0.0228087,
-      0,
-      0.509337,
-      0.730898,
-      0.0213265,
-      0,
-      0.529617,
-      0.719878,
-      0.0199307,
-      0,
-      0.550307,
-      0.708379,
-      0.0186574,
-      0,
-      0.571428,
-      0.697165,
-      0.0174446,
-      0,
-      0.593003,
-      0.685554,
-      0.0163144,
-      0,
-      0.615059,
-      0.673631,
-      0.015276,
-      0,
-      0.637628,
-      0.662385,
-      0.0143003,
-      0,
-      0.660746,
-      0.651059,
-      0.0134112,
-      0,
-      0.68446,
-      0.640451,
-      0.0125794,
-      0,
-      0.70882,
-      0.630536,
-      0.011793,
-      0,
-      0.733893,
-      0.620316,
-      0.0110547,
-      0,
-      0.759756,
-      0.609722,
-      0.0103668,
-      0,
-      0.786505,
-      0.598804,
-      973009e-8,
-      0,
-      0.814259,
-      0.587871,
-      912812e-8,
-      0,
-      0.843157,
-      0.577121,
-      858916e-8,
-      0,
-      0.87334,
-      0.566019,
-      807333e-8,
-      0,
-      0.904762,
-      0.554664,
-      759687e-8,
-      0,
-      0.936508,
-      0.543101,
-      714759e-8,
-      0,
-      0.968254,
-      0.531558,
-      673418e-8,
-      0,
-      1,
-      1,
-      0.146767,
-      0,
-      0,
-      1,
-      0.146767,
-      0,
-      0,
-      0.999997,
-      0.146767,
-      0,
-      0,
-      0.999977,
-      0.146765,
-      0,
-      320658e-11,
-      0.999929,
-      0.146762,
-      0,
-      682576e-9,
-      0.999823,
-      0.146753,
-      0,
-      276402e-8,
-      0.999633,
-      0.146735,
-      0,
-      614771e-8,
-      0.999314,
-      0.146699,
-      0,
-      0.0106613,
-      0.998796,
-      0.14662,
-      0,
-      0.0161546,
-      0.997124,
-      0.146107,
-      0,
-      0.0225063,
-      0.994062,
-      0.144857,
-      0,
-      0.0296198,
-      0.992154,
-      0.144011,
-      0,
-      0.037417,
-      0.989186,
-      0.142712,
-      0,
-      0.0458348,
-      0.985279,
-      0.140926,
-      0,
-      0.0548211,
-      0.980826,
-      0.13885,
-      0,
-      0.0643326,
-      0.975056,
-      0.136168,
-      0,
-      0.074333,
-      0.969005,
-      0.133217,
-      0,
-      0.0847917,
-      0.961554,
-      0.12959,
-      0,
-      0.0956828,
-      0.954206,
-      0.125886,
-      0,
-      0.106984,
-      0.945046,
-      0.121335,
-      0,
-      0.118675,
-      0.935678,
-      0.116492,
-      0,
-      0.130741,
-      0.926748,
-      0.111635,
-      0,
-      0.143166,
-      0.917764,
-      0.106625,
-      0,
-      0.155939,
-      0.908358,
-      0.101325,
-      0,
-      0.169049,
-      0.899219,
-      0.0960249,
-      0,
-      0.182487,
-      0.890089,
-      0.0906527,
-      0,
-      0.196245,
-      0.881488,
-      0.0853905,
-      0,
-      0.210317,
-      0.874031,
-      0.0804177,
-      0,
-      0.224697,
-      0.866932,
-      0.0756005,
-      0,
-      0.23938,
-      0.859976,
-      0.0709019,
-      0,
-      0.254364,
-      0.853375,
-      0.0664391,
-      0,
-      0.269646,
-      0.846971,
-      0.0622012,
-      0,
-      0.285223,
-      0.840483,
-      0.058129,
-      0,
-      0.301096,
-      0.833969,
-      0.0542762,
-      0,
-      0.317265,
-      0.82806,
-      0.0507042,
-      0,
-      0.333729,
-      0.822128,
-      0.047368,
-      0,
-      0.350491,
-      0.815989,
-      0.044272,
-      0,
-      0.367554,
-      0.809336,
-      0.0413444,
-      0,
-      0.38492,
-      0.802177,
-      0.038601,
-      0,
-      0.402594,
-      0.79441,
-      0.0360227,
-      0,
-      0.420582,
-      0.786573,
-      0.0336383,
-      0,
-      0.438891,
-      0.778619,
-      0.0314321,
-      0,
-      0.457527,
-      0.77,
-      0.029362,
-      0,
-      0.476499,
-      0.760698,
-      0.0274102,
-      0,
-      0.49582,
-      0.750932,
-      0.0256146,
-      0,
-      0.5155,
-      0.740993,
-      0.023974,
-      0,
-      0.535555,
-      0.731159,
-      0.0224182,
-      0,
-      0.556,
-      0.720836,
-      0.0209889,
-      0,
-      0.576855,
-      0.709913,
-      0.0196411,
-      0,
-      0.598143,
-      0.698415,
-      0.0183824,
-      0,
-      0.619888,
-      0.68745,
-      0.0172222,
-      0,
-      0.642123,
-      0.676154,
-      0.0161509,
-      0,
-      0.664883,
-      0.664383,
-      0.0151397,
-      0,
-      0.688211,
-      0.6533,
-      0.0141873,
-      0,
-      0.71216,
-      0.642072,
-      0.0133105,
-      0,
-      0.736792,
-      0.631412,
-      0.0124932,
-      0,
-      0.762186,
-      0.621622,
-      0.0117408,
-      0,
-      0.788439,
-      0.611681,
-      0.0110358,
-      0,
-      0.815672,
-      0.60142,
-      0.0103775,
-      0,
-      0.844034,
-      0.59083,
-      975623e-8,
-      0,
-      0.873699,
-      0.580254,
-      918084e-8,
-      0,
-      0.904765,
-      0.569841,
-      864721e-8,
-      0,
-      0.936508,
-      0.559224,
-      815731e-8,
-      0,
-      0.968254,
-      0.548315,
-      767924e-8,
-      0,
-      1,
-      1,
-      0.177563,
-      0,
-      0,
-      1,
-      0.177563,
-      0,
-      0,
-      0.999994,
-      0.177562,
-      0,
-      0,
-      0.999972,
-      0.177555,
-      0,
-      664171e-10,
-      0.999914,
-      0.177536,
-      0,
-      12276e-7,
-      0.999787,
-      0.177496,
-      0,
-      388025e-8,
-      0.999556,
-      0.17742,
-      0,
-      783463e-8,
-      0.999165,
-      0.177285,
-      0,
-      0.0128953,
-      0.9985,
-      0.177037,
-      0,
-      0.0189053,
-      0.995388,
-      0.175634,
-      0,
-      0.025742,
-      0.993102,
-      0.174375,
-      0,
-      0.033309,
-      0.990992,
-      0.173121,
-      0,
-      0.0415298,
-      0.986932,
-      0.170896,
-      0,
-      0.0503425,
-      0.982786,
-      0.16847,
-      0,
-      0.0596964,
-      0.977592,
-      0.165455,
-      0,
-      0.0695498,
-      0.971075,
-      0.161676,
-      0,
-      0.0798676,
-      0.963967,
-      0.157458,
-      0,
-      0.0906201,
-      0.956397,
-      0.152836,
-      0,
-      0.101783,
-      0.947489,
-      0.147467,
-      0,
-      0.113333,
-      0.937564,
-      0.14145,
-      0,
-      0.125254,
-      0.928182,
-      0.135383,
-      0,
-      0.137529,
-      0.919027,
-      0.129212,
-      0,
-      0.150144,
-      0.909618,
-      0.12276,
-      0,
-      0.163088,
-      0.900492,
-      0.116273,
-      0,
-      0.176351,
-      0.891671,
-      0.1098,
-      0,
-      0.189924,
-      0.883146,
-      0.103362,
-      0,
-      0.203799,
-      0.875151,
-      0.0970799,
-      0,
-      0.21797,
-      0.868338,
-      0.0911732,
-      0,
-      0.232433,
-      0.862033,
-      0.0854966,
-      0,
-      0.247182,
-      0.856107,
-      0.0800691,
-      0,
-      0.262216,
-      0.850644,
-      0.0749618,
-      0,
-      0.27753,
-      0.845261,
-      0.070079,
-      0,
-      0.293124,
-      0.839885,
-      0.0654321,
-      0,
-      0.308997,
-      0.834609,
-      0.0610975,
-      0,
-      0.325149,
-      0.829083,
-      0.0569741,
-      0,
-      0.341581,
-      0.82404,
-      0.0531736,
-      0,
-      0.358294,
-      0.818968,
-      0.049665,
-      0,
-      0.37529,
-      0.813496,
-      0.0463856,
-      0,
-      0.392573,
-      0.807533,
-      0.0433217,
-      0,
-      0.410148,
-      0.80099,
-      0.0404402,
-      0,
-      0.428019,
-      0.793891,
-      0.0377578,
-      0,
-      0.446192,
-      0.786281,
-      0.0352616,
-      0,
-      0.464676,
-      0.778773,
-      0.0329577,
-      0,
-      0.483478,
-      0.770737,
-      0.030808,
-      0,
-      0.502608,
-      0.762094,
-      0.0287964,
-      0,
-      0.522079,
-      0.752898,
-      0.0269254,
-      0,
-      0.541905,
-      0.743306,
-      0.0251926,
-      0,
-      0.5621,
-      0.733416,
-      0.023595,
-      0,
-      0.582684,
-      0.723742,
-      0.0221155,
-      0,
-      0.603677,
-      0.713542,
-      0.0207435,
-      0,
-      0.625106,
-      0.702755,
-      0.019434,
-      0,
-      0.646998,
-      0.691484,
-      0.0182046,
-      0,
-      0.66939,
-      0.680531,
-      0.0170771,
-      0,
-      0.692324,
-      0.66953,
-      0.0160339,
-      0,
-      0.715849,
-      0.658126,
-      0.0150677,
-      0,
-      0.740028,
-      0.646933,
-      0.0141551,
-      0,
-      0.764937,
-      0.636107,
-      0.0133179,
-      0,
-      0.790673,
-      0.625271,
-      0.0125284,
-      0,
-      0.817358,
-      0.615225,
-      0.0117937,
-      0,
-      0.84515,
-      0.605678,
-      0.0111181,
-      0,
-      0.874244,
-      0.59583,
-      0.0104759,
-      0,
-      0.904828,
-      0.585704,
-      986672e-8,
-      0,
-      0.936508,
-      0.575413,
-      929712e-8,
-      0,
-      0.968254,
-      0.565373,
-      876713e-8,
-      0,
-      1,
-      1,
-      0.214058,
-      0,
-      0,
-      0.999999,
-      0.214058,
-      0,
-      0,
-      0.999994,
-      0.214055,
-      0,
-      0,
-      0.999966,
-      0.214039,
-      0,
-      259642e-9,
-      0.999893,
-      0.213998,
-      0,
-      200075e-8,
-      0.999737,
-      0.21391,
-      0,
-      527775e-8,
-      0.999449,
-      0.213745,
-      0,
-      983959e-8,
-      0.99896,
-      0.213458,
-      0,
-      0.0154755,
-      0.9979,
-      0.212855,
-      0,
-      0.0220249,
-      0.994278,
-      0.210779,
-      0,
-      0.0293654,
-      0.992254,
-      0.20926,
-      0,
-      0.0374021,
-      0.98881,
-      0.206908,
-      0,
-      0.0460604,
-      0.984715,
-      0.204009,
-      0,
-      0.0552802,
-      0.979738,
-      0.200471,
-      0,
-      0.0650127,
-      0.972884,
-      0.195813,
-      0,
-      0.0752175,
-      0.965996,
-      0.190856,
-      0,
-      0.0858612,
-      0.957974,
-      0.185077,
-      0,
-      0.0969155,
-      0.949155,
-      0.17868,
-      0,
-      0.108356,
-      0.939288,
-      0.171513,
-      0,
-      0.120163,
-      0.928996,
-      0.163838,
-      0,
-      0.132319,
-      0.919563,
-      0.156246,
-      0,
-      0.144808,
-      0.910004,
-      0.148359,
-      0,
-      0.157618,
-      0.900791,
-      0.140417,
-      0,
-      0.170737,
-      0.892135,
-      0.132569,
-      0,
-      0.184155,
-      0.883803,
-      0.124741,
-      0,
-      0.197866,
-      0.876034,
-      0.117091,
-      0,
-      0.211861,
-      0.869219,
-      0.109835,
-      0,
-      0.226134,
-      0.863062,
-      0.102859,
-      0,
-      0.240682,
-      0.857795,
-      0.0962928,
-      0,
-      0.255499,
-      0.853009,
-      0.0900725,
-      0,
-      0.270583,
-      0.848603,
-      0.0842101,
-      0,
-      0.285931,
-      0.844335,
-      0.0786527,
-      0,
-      0.301542,
-      0.840208,
-      0.0734397,
-      0,
-      0.317415,
-      0.836035,
-      0.0685334,
-      0,
-      0.33355,
-      0.83172,
-      0.0639275,
-      0,
-      0.349948,
-      0.827135,
-      0.0595909,
-      0,
-      0.36661,
-      0.822797,
-      0.0556204,
-      0,
-      0.383539,
-      0.818387,
-      0.0519394,
-      0,
-      0.400738,
-      0.813565,
-      0.0485317,
-      0,
-      0.41821,
-      0.808142,
-      0.0453138,
-      0,
-      0.435961,
-      0.802212,
-      0.0423354,
-      0,
-      0.453997,
-      0.79573,
-      0.0395553,
-      0,
-      0.472324,
-      0.788741,
-      0.036988,
-      0,
-      0.490951,
-      0.781093,
-      0.0345688,
-      0,
-      0.509887,
-      0.773597,
-      0.0323297,
-      0,
-      0.529144,
-      0.765622,
-      0.0302719,
-      0,
-      0.548735,
-      0.757083,
-      0.0283477,
-      0,
-      0.568674,
-      0.747992,
-      0.0265562,
-      0,
-      0.588979,
-      0.738591,
-      0.0248844,
-      0,
-      0.609671,
-      0.728719,
-      0.0233342,
-      0,
-      0.630773,
-      0.719146,
-      0.0219081,
-      0,
-      0.652314,
-      0.709165,
-      0.0205711,
-      0,
-      0.674328,
-      0.69875,
-      0.0193248,
-      0,
-      0.696854,
-      0.687884,
-      0.0181582,
-      0,
-      0.719942,
-      0.676818,
-      0.0170746,
-      0,
-      0.743651,
-      0.666247,
-      0.0160718,
-      0,
-      0.768057,
-      0.655284,
-      0.0151262,
-      0,
-      0.793253,
-      0.64401,
-      0.0142561,
-      0,
-      0.819363,
-      0.633353,
-      0.0134327,
-      0,
-      0.846547,
-      0.622674,
-      0.012653,
-      0,
-      0.875017,
-      0.612265,
-      0.0119354,
-      0,
-      0.905021,
-      0.602455,
-      0.0112533,
-      0,
-      0.936508,
-      0.593147,
-      0.0106234,
-      0,
-      0.968254,
-      0.583592,
-      0.0100213,
-      0,
-      1,
-      1,
-      0.25717,
-      0,
-      0,
-      1,
-      0.25717,
-      0,
-      0,
-      0.999992,
-      0.257164,
-      0,
-      0,
-      0.999958,
-      0.257135,
-      0,
-      641715e-9,
-      0.999864,
-      0.25706,
-      0,
-      305314e-8,
-      0.999666,
-      0.256897,
-      0,
-      700975e-8,
-      0.999302,
-      0.256596,
-      0,
-      0.0122194,
-      0.998663,
-      0.25607,
-      0,
-      0.0184622,
-      0.995607,
-      0.254123,
-      0,
-      0.0255773,
-      0.993094,
-      0.252081,
-      0,
-      0.0334439,
-      0.9907,
-      0.249867,
-      0,
-      0.0419696,
-      0.98594,
-      0.246118,
-      0,
-      0.0510823,
-      0.981214,
-      0.242049,
-      0,
-      0.0607242,
-      0.974966,
-      0.236869,
-      0,
-      0.0708486,
-      0.967589,
-      0.230724,
-      0,
-      0.081417,
-      0.95915,
-      0.223635,
-      0,
-      0.0923974,
-      0.950257,
-      0.21596,
-      0,
-      0.103763,
-      0.940165,
-      0.207296,
-      0,
-      0.115491,
-      0.929396,
-      0.197901,
-      0,
-      0.127562,
-      0.919288,
-      0.188437,
-      0,
-      0.13996,
-      0.909428,
-      0.178762,
-      0,
-      0.15267,
-      0.900105,
-      0.169072,
-      0,
-      0.165679,
-      0.891418,
-      0.159478,
-      0,
-      0.178979,
-      0.883347,
-      0.15002,
-      0,
-      0.192558,
-      0.875992,
-      0.140813,
-      0,
-      0.20641,
-      0.869466,
-      0.13196,
-      0,
-      0.220529,
-      0.863699,
-      0.123501,
-      0,
-      0.234907,
-      0.858553,
-      0.115436,
-      0,
-      0.249542,
-      0.854379,
-      0.107901,
-      0,
-      0.264428,
-      0.850894,
-      0.10088,
-      0,
-      0.279564,
-      0.847632,
-      0.0942296,
-      0,
-      0.294947,
-      0.844571,
-      0.0879861,
-      0,
-      0.310575,
-      0.84163,
-      0.0821534,
-      0,
-      0.326448,
-      0.838542,
-      0.0766409,
-      0,
-      0.342566,
-      0.835412,
-      0.0715322,
-      0,
-      0.358929,
-      0.831899,
-      0.0666883,
-      0,
-      0.37554,
-      0.828177,
-      0.0622175,
-      0,
-      0.392399,
-      0.82416,
-      0.0580452,
-      0,
-      0.409511,
-      0.820393,
-      0.054267,
-      0,
-      0.426878,
-      0.816068,
-      0.0507172,
-      0,
-      0.444506,
-      0.811201,
-      0.0474041,
-      0,
-      0.4624,
-      0.805785,
-      0.0443174,
-      0,
-      0.480566,
-      0.799878,
-      0.0414562,
-      0,
-      0.499013,
-      0.793469,
-      0.0388147,
-      0,
-      0.517749,
-      0.786473,
-      0.0363453,
-      0,
-      0.536785,
-      0.778874,
-      0.0340225,
-      0,
-      0.556134,
-      0.771277,
-      0.0318599,
-      0,
-      0.575809,
-      0.763426,
-      0.0298859,
-      0,
-      0.595827,
-      0.755044,
-      0.0280357,
-      0,
-      0.616207,
-      0.746161,
-      0.0262979,
-      0,
-      0.636973,
-      0.737124,
-      0.0247295,
-      0,
-      0.65815,
-      0.72761,
-      0.0232514,
-      0,
-      0.679772,
-      0.717822,
-      0.0218755,
-      0,
-      0.701876,
-      0.708279,
-      0.0205942,
-      0,
-      0.724509,
-      0.698333,
-      0.0193947,
-      0,
-      0.74773,
-      0.68802,
-      0.0182717,
-      0,
-      0.771609,
-      0.677321,
-      0.0172044,
-      0,
-      0.79624,
-      0.666504,
-      0.0162122,
-      0,
-      0.821743,
-      0.656184,
-      0.0152924,
-      0,
-      0.84828,
-      0.64556,
-      0.0144326,
-      0,
-      0.876069,
-      0.634636,
-      0.0136157,
-      0,
-      0.905404,
-      0.624124,
-      0.0128612,
-      0,
-      0.936508,
-      0.613914,
-      0.0121435,
-      0,
-      0.968254,
-      0.603589,
-      0.0114887,
-      0,
-      1,
-      1,
-      0.307946,
-      0,
-      0,
-      0.999999,
-      0.307945,
-      0,
-      0,
-      0.999988,
-      0.307934,
-      0,
-      204479e-10,
-      0.999944,
-      0.307886,
-      0,
-      127833e-8,
-      0.999824,
-      0.307756,
-      0,
-      445047e-8,
-      0.999565,
-      0.30748,
-      0,
-      914673e-8,
-      0.999085,
-      0.306966,
-      0,
-      0.0150498,
-      0.998103,
-      0.306004,
-      0,
-      0.0219367,
-      0.994249,
-      0.303028,
-      0,
-      0.0296485,
-      0.991807,
-      0.300435,
-      0,
-      0.038068,
-      0.987773,
-      0.296554,
-      0,
-      0.0471062,
-      0.982673,
-      0.2916,
-      0,
-      0.0566942,
-      0.976623,
-      0.285641,
-      0,
-      0.0667768,
-      0.968757,
-      0.27815,
-      0,
-      0.0773099,
-      0.959849,
-      0.269529,
-      0,
-      0.088257,
-      0.950663,
-      0.260248,
-      0,
-      0.0995879,
-      0.940129,
-      0.249704,
-      0,
-      0.111277,
-      0.92895,
-      0.238291,
-      0,
-      0.123304,
-      0.917996,
-      0.226501,
-      0,
-      0.13565,
-      0.907813,
-      0.214669,
-      0,
-      0.148299,
-      0.898305,
-      0.202835,
-      0,
-      0.161237,
-      0.889626,
-      0.191158,
-      0,
-      0.174455,
-      0.88175,
-      0.179695,
-      0,
-      0.187941,
-      0.874715,
-      0.168548,
-      0,
-      0.201687,
-      0.868746,
-      0.15792,
-      0,
-      0.215687,
-      0.863703,
-      0.147807,
-      0,
-      0.229933,
-      0.859315,
-      0.138149,
-      0,
-      0.24442,
-      0.855538,
-      0.128993,
-      0,
-      0.259145,
-      0.852428,
-      0.120414,
-      0,
-      0.274103,
-      0.850168,
-      0.112498,
-      0,
-      0.289293,
-      0.848132,
-      0.105054,
-      0,
-      0.304711,
-      0.846291,
-      0.0981087,
-      0,
-      0.320357,
-      0.844431,
-      0.0915942,
-      0,
-      0.33623,
-      0.842493,
-      0.0855056,
-      0,
-      0.35233,
-      0.840368,
-      0.0798204,
-      0,
-      0.368658,
-      0.83798,
-      0.0745097,
-      0,
-      0.385214,
-      0.83523,
-      0.0695424,
-      0,
-      0.402002,
-      0.832091,
-      0.0649092,
-      0,
-      0.419023,
-      0.828667,
-      0.0606291,
-      0,
-      0.436282,
-      0.824805,
-      0.0566523,
-      0,
-      0.453782,
-      0.820988,
-      0.0530229,
-      0,
-      0.471529,
-      0.816635,
-      0.0496364,
-      0,
-      0.489528,
-      0.811725,
-      0.0464658,
-      0,
-      0.507788,
-      0.806316,
-      0.0435082,
-      0,
-      0.526317,
-      0.800469,
-      0.0407873,
-      0,
-      0.545124,
-      0.794107,
-      0.038255,
-      0,
-      0.564221,
-      0.787218,
-      0.0358825,
-      0,
-      0.583621,
-      0.779872,
-      0.0336785,
-      0,
-      0.603341,
-      0.772097,
-      0.0316379,
-      0,
-      0.623397,
-      0.764484,
-      0.0297379,
-      0,
-      0.643812,
-      0.756428,
-      0.0279581,
-      0,
-      0.664611,
-      0.748022,
-      0.0263153,
-      0,
-      0.685824,
-      0.739268,
-      0.0247799,
-      0,
-      0.707488,
-      0.73024,
-      0.0233385,
-      0,
-      0.729646,
-      0.720893,
-      0.0220035,
-      0,
-      0.752354,
-      0.71119,
-      0.0207555,
-      0,
-      0.77568,
-      0.701791,
-      0.0195843,
-      0,
-      0.799715,
-      0.692184,
-      0.0184891,
-      0,
-      0.824574,
-      0.682258,
-      0.0174541,
-      0,
-      0.850417,
-      0.67206,
-      0.0164873,
-      0,
-      0.877466,
-      0.661717,
-      0.0155959,
-      0,
-      0.90604,
-      0.651462,
-      0.0147519,
-      0,
-      0.936528,
-      0.641467,
-      0.0139727,
-      0,
-      0.968254,
-      0.631229,
-      0.0132363,
-      0,
-      1,
-      1,
-      0.367573,
-      0,
-      0,
-      0.999999,
-      0.367571,
-      0,
-      0,
-      0.999984,
-      0.367553,
-      0,
-      183382e-9,
-      0.999925,
-      0.367473,
-      0,
-      225254e-8,
-      0.999759,
-      0.367259,
-      0,
-      628165e-8,
-      0.99941,
-      0.366801,
-      0,
-      0.0117858,
-      0.998739,
-      0.365946,
-      0,
-      0.0184359,
-      0.995529,
-      0.363191,
-      0,
-      0.0260114,
-      0.992875,
-      0.360171,
-      0,
-      0.0343581,
-      0.989135,
-      0.355981,
-      0,
-      0.0433637,
-      0.984166,
-      0.350401,
-      0,
-      0.0529438,
-      0.977871,
-      0.343348,
-      0,
-      0.0630334,
-      0.96951,
-      0.334341,
-      0,
-      0.0735805,
-      0.959964,
-      0.323862,
-      0,
-      0.0845437,
-      0.950162,
-      0.312521,
-      0,
-      0.095889,
-      0.938882,
-      0.299577,
-      0,
-      0.107588,
-      0.926992,
-      0.285573,
-      0,
-      0.119617,
-      0.915589,
-      0.271212,
-      0,
-      0.131957,
-      0.904791,
-      0.256611,
-      0,
-      0.144591,
-      0.895177,
-      0.242224,
-      0,
-      0.157503,
-      0.886403,
-      0.227952,
-      0,
-      0.170682,
-      0.878957,
-      0.214192,
-      0,
-      0.184117,
-      0.872418,
-      0.200795,
-      0,
-      0.197799,
-      0.867029,
-      0.188015,
-      0,
-      0.21172,
-      0.862835,
-      0.175975,
-      0,
-      0.225873,
-      0.859411,
-      0.164526,
-      0,
-      0.240253,
-      0.856655,
-      0.153693,
-      0,
-      0.254854,
-      0.854519,
-      0.14352,
-      0,
-      0.269673,
-      0.852828,
-      0.13397,
-      0,
-      0.284707,
-      0.851412,
-      0.124984,
-      0,
-      0.299953,
-      0.850609,
-      0.116748,
-      0,
-      0.315408,
-      0.849855,
-      0.10905,
-      0,
-      0.331073,
-      0.849017,
-      0.101839,
-      0,
-      0.346946,
-      0.848079,
-      0.0951359,
-      0,
-      0.363028,
-      0.846911,
-      0.0888774,
-      0,
-      0.379318,
-      0.845445,
-      0.0830375,
-      0,
-      0.395818,
-      0.84362,
-      0.0775844,
-      0,
-      0.41253,
-      0.841411,
-      0.0725054,
-      0,
-      0.429457,
-      0.838768,
-      0.0677691,
-      0,
-      0.446602,
-      0.835801,
-      0.0634016,
-      0,
-      0.463968,
-      0.832341,
-      0.0593095,
-      0,
-      0.481561,
-      0.828424,
-      0.0555121,
-      0,
-      0.499386,
-      0.824312,
-      0.052024,
-      0,
-      0.51745,
-      0.819918,
-      0.0487865,
-      0,
-      0.535761,
-      0.815072,
-      0.0457801,
-      0,
-      0.554328,
-      0.809863,
-      0.0430184,
-      0,
-      0.573162,
-      0.804164,
-      0.0404245,
-      0,
-      0.592275,
-      0.798034,
-      0.0380146,
-      0,
-      0.611681,
-      0.791436,
-      0.0357436,
-      0,
-      0.631398,
-      0.784498,
-      0.0336475,
-      0,
-      0.651445,
-      0.777125,
-      0.0316666,
-      0,
-      0.671845,
-      0.769365,
-      0.0298122,
-      0,
-      0.692628,
-      0.761579,
-      0.0281001,
-      0,
-      0.713827,
-      0.753746,
-      0.0265049,
-      0,
-      0.735484,
-      0.745573,
-      0.0250067,
-      0,
-      0.75765,
-      0.737083,
-      0.0236026,
-      0,
-      0.78039,
-      0.728545,
-      0.0223302,
-      0,
-      0.803789,
-      0.719691,
-      0.0211243,
-      0,
-      0.82796,
-      0.710569,
-      0.0199983,
-      0,
-      0.853056,
-      0.701216,
-      0.0189569,
-      0,
-      0.879298,
-      0.692094,
-      0.0179702,
-      0,
-      0.907014,
-      0.682909,
-      0.0170418,
-      0,
-      0.936691,
-      0.673509,
-      0.0161732,
-      0,
-      0.968254,
-      0.663863,
-      0.0153406,
-      0,
-      1,
-      1,
-      0.437395,
-      0,
-      0,
-      0.999998,
-      0.437394,
-      0,
-      0,
-      0.99998,
-      0.437363,
-      0,
-      616704e-9,
-      0.999891,
-      0.437232,
-      0,
-      367925e-8,
-      0.999656,
-      0.436877,
-      0,
-      867446e-8,
-      0.999148,
-      0.436121,
-      0,
-      0.0150679,
-      0.997959,
-      0.434564,
-      0,
-      0.022531,
-      0.993464,
-      0.430134,
-      0,
-      0.0308507,
-      0.990606,
-      0.426077,
-      0,
-      0.0398805,
-      0.985027,
-      0.419397,
-      0,
-      0.0495148,
-      0.978491,
-      0.41118,
-      0,
-      0.0596749,
-      0.969643,
-      0.40048,
-      0,
-      0.0703001,
-      0.959189,
-      0.38769,
-      0,
-      0.0813427,
-      0.948223,
-      0.373575,
-      0,
-      0.0927641,
-      0.935955,
-      0.357622,
-      0,
-      0.104533,
-      0.923237,
-      0.34043,
-      0,
-      0.116624,
-      0.911074,
-      0.322735,
-      0,
-      0.129015,
-      0.899724,
-      0.30479,
-      0,
-      0.141687,
-      0.890189,
-      0.287392,
-      0,
-      0.154626,
-      0.881796,
-      0.270248,
-      0,
-      0.167818,
-      0.874781,
-      0.253659,
-      0,
-      0.181252,
-      0.869166,
-      0.237786,
-      0,
-      0.194918,
-      0.864725,
-      0.222618,
-      0,
-      0.208807,
-      0.861565,
-      0.208356,
-      0,
-      0.222913,
-      0.859284,
-      0.194867,
-      0,
-      0.237229,
-      0.857677,
-      0.18212,
-      0,
-      0.25175,
-      0.856714,
-      0.17018,
-      0,
-      0.266473,
-      0.856155,
-      0.158969,
-      0,
-      0.281392,
-      0.8558,
-      0.148413,
-      0,
-      0.296505,
-      0.855672,
-      0.138578,
-      0,
-      0.311811,
-      0.855538,
-      0.129345,
-      0,
-      0.327306,
-      0.855689,
-      0.120861,
-      0,
-      0.342991,
-      0.855767,
-      0.112969,
-      0,
-      0.358864,
-      0.855618,
-      0.105593,
-      0,
-      0.374925,
-      0.85525,
-      0.0987451,
-      0,
-      0.391176,
-      0.854583,
-      0.0923727,
-      0,
-      0.407616,
-      0.853534,
-      0.0864143,
-      0,
-      0.424249,
-      0.852061,
-      0.0808338,
-      0,
-      0.441076,
-      0.850253,
-      0.0756771,
-      0,
-      0.4581,
-      0.848004,
-      0.0708612,
-      0,
-      0.475324,
-      0.845333,
-      0.0663784,
-      0,
-      0.492754,
-      0.842376,
-      0.0622631,
-      0,
-      0.510394,
-      0.838956,
-      0.0584112,
-      0,
-      0.528251,
-      0.835121,
-      0.0548328,
-      0,
-      0.546331,
-      0.830842,
-      0.0514838,
-      0,
-      0.564644,
-      0.826212,
-      0.048355,
-      0,
-      0.583198,
-      0.821522,
-      0.0454714,
-      0,
-      0.602005,
-      0.816551,
-      0.0428263,
-      0,
-      0.621078,
-      0.811211,
-      0.0403612,
-      0,
-      0.640434,
-      0.805479,
-      0.038039,
-      0,
-      0.660089,
-      0.799409,
-      0.0358739,
-      0,
-      0.680066,
-      0.79306,
-      0.0338727,
-      0,
-      0.70039,
-      0.786395,
-      0.0319985,
-      0,
-      0.721094,
-      0.779416,
-      0.030241,
-      0,
-      0.742215,
-      0.77214,
-      0.0285951,
-      0,
-      0.7638,
-      0.764636,
-      0.0270747,
-      0,
-      0.785912,
-      0.756836,
-      0.0256354,
-      0,
-      0.808628,
-      0.749315,
-      0.0243027,
-      0,
-      0.832055,
-      0.741561,
-      0.0230497,
-      0,
-      0.856338,
-      0.733589,
-      0.0218801,
-      0,
-      0.88169,
-      0.725479,
-      0.020784,
-      0,
-      0.908441,
-      0.717255,
-      0.0197702,
-      0,
-      0.937125,
-      0.708829,
-      0.0188168,
-      0,
-      0.968254,
-      0.700191,
-      0.0179113,
-      0,
-      1,
-      1,
-      0.518937,
-      0,
-      0,
-      0.999998,
-      0.518933,
-      0,
-      0,
-      0.999967,
-      0.518883,
-      0,
-      147741e-8,
-      0.999832,
-      0.51866,
-      0,
-      573221e-8,
-      0.999466,
-      0.518057,
-      0,
-      0.011826,
-      0.998644,
-      0.516752,
-      0,
-      0.0192116,
-      0.994458,
-      0.512347,
-      0,
-      0.027573,
-      0.991223,
-      0.507675,
-      0,
-      0.0367099,
-      0.985515,
-      0.500188,
-      0,
-      0.046487,
-      0.978308,
-      0.490408,
-      0,
-      0.0568071,
-      0.968359,
-      0.477357,
-      0,
-      0.0675984,
-      0.95682,
-      0.461752,
-      0,
-      0.0788059,
-      0.943929,
-      0.443796,
-      0,
-      0.090386,
-      0.930224,
-      0.423893,
-      0,
-      0.102304,
-      0.916514,
-      0.402682,
-      0,
-      0.114532,
-      0.903653,
-      0.380914,
-      0,
-      0.127047,
-      0.892315,
-      0.359212,
-      0,
-      0.139828,
-      0.882942,
-      0.338102,
-      0,
-      0.152861,
-      0.875438,
-      0.31773,
-      0,
-      0.16613,
-      0.869642,
-      0.298186,
-      0,
-      0.179624,
-      0.865304,
-      0.279491,
-      0,
-      0.193332,
-      0.862382,
-      0.261804,
-      0,
-      0.207247,
-      0.860666,
-      0.245146,
-      0,
-      0.22136,
-      0.859788,
-      0.229406,
-      0,
-      0.235666,
-      0.859608,
-      0.214605,
-      0,
-      0.250158,
-      0.859912,
-      0.200691,
-      0,
-      0.264832,
-      0.86053,
-      0.187623,
-      0,
-      0.279684,
-      0.861368,
-      0.17539,
-      0,
-      0.294711,
-      0.862237,
-      0.163901,
-      0,
-      0.309911,
-      0.863127,
-      0.153175,
-      0,
-      0.32528,
-      0.863923,
-      0.143147,
-      0,
-      0.340819,
-      0.864567,
-      0.133781,
-      0,
-      0.356524,
-      0.865013,
-      0.125042,
-      0,
-      0.372397,
-      0.86539,
-      0.116952,
-      0,
-      0.388438,
-      0.865591,
-      0.109476,
-      0,
-      0.404645,
-      0.865517,
-      0.102542,
-      0,
-      0.421022,
-      0.865084,
-      0.0960688,
-      0,
-      0.437569,
-      0.864309,
-      0.0900499,
-      0,
-      0.454287,
-      0.863151,
-      0.0844328,
-      0,
-      0.471181,
-      0.861649,
-      0.0792218,
-      0,
-      0.488253,
-      0.859742,
-      0.0743482,
-      0,
-      0.505507,
-      0.857446,
-      0.0697963,
-      0,
-      0.522947,
-      0.854757,
-      0.0655364,
-      0,
-      0.54058,
-      0.851783,
-      0.061608,
-      0,
-      0.558412,
-      0.848516,
-      0.0579701,
-      0,
-      0.576449,
-      0.844897,
-      0.0545742,
-      0,
-      0.594701,
-      0.840956,
-      0.0514167,
-      0,
-      0.613178,
-      0.836676,
-      0.0484598,
-      0,
-      0.631892,
-      0.832075,
-      0.0456934,
-      0,
-      0.650856,
-      0.827191,
-      0.0431178,
-      0,
-      0.670088,
-      0.822295,
-      0.0407718,
-      0,
-      0.689606,
-      0.817294,
-      0.0386032,
-      0,
-      0.709434,
-      0.812013,
-      0.0365675,
-      0,
-      0.7296,
-      0.806465,
-      0.0346547,
-      0,
-      0.750138,
-      0.800691,
-      0.0328717,
-      0,
-      0.771093,
-      0.794709,
-      0.031211,
-      0,
-      0.792519,
-      0.788493,
-      0.0296504,
-      0,
-      0.814488,
-      0.782049,
-      0.0281782,
-      0,
-      0.837097,
-      0.775403,
-      0.0267965,
-      0,
-      0.860481,
-      0.76857,
-      0.0255002,
-      0,
-      0.884842,
-      0.761536,
-      0.0242759,
-      0,
-      0.910494,
-      0.754303,
-      0.0231142,
-      0,
-      0.937985,
-      0.74692,
-      0.0220305,
-      0,
-      0.968254,
-      0.739745,
-      0.0210192,
-      0,
-      1,
-      1,
-      0.613914,
-      0,
-      0,
-      0.999996,
-      0.613907,
-      0,
-      963597e-10,
-      0.999942,
-      0.613814,
-      0,
-      301247e-8,
-      0.999704,
-      0.613407,
-      0,
-      870385e-8,
-      0.999046,
-      0.612302,
-      0,
-      0.0160714,
-      0.995516,
-      0.608266,
-      0,
-      0.0245899,
-      0.991726,
-      0.602863,
-      0,
-      0.0339681,
-      0.985157,
-      0.593956,
-      0,
-      0.0440254,
-      0.97642,
-      0.581748,
-      0,
-      0.0546409,
-      0.964404,
-      0.565183,
-      0,
-      0.0657284,
-      0.950601,
-      0.545273,
-      0,
-      0.0772246,
-      0.935158,
-      0.522129,
-      0,
-      0.0890812,
-      0.919364,
-      0.496782,
-      0,
-      0.10126,
-      0.904754,
-      0.470571,
-      0,
-      0.113731,
-      0.89176,
-      0.444037,
-      0,
-      0.126469,
-      0.881492,
-      0.418322,
-      0,
-      0.139454,
-      0.873656,
-      0.393522,
-      0,
-      0.15267,
-      0.868053,
-      0.369795,
-      0,
-      0.166101,
-      0.864336,
-      0.347171,
-      0,
-      0.179736,
-      0.862259,
-      0.325737,
-      0,
-      0.193565,
-      0.861556,
-      0.305532,
-      0,
-      0.207578,
-      0.861776,
-      0.286416,
-      0,
-      0.221769,
-      0.862661,
-      0.268355,
-      0,
-      0.23613,
-      0.864015,
-      0.251334,
-      0,
-      0.250656,
-      0.865711,
-      0.235352,
-      0,
-      0.265343,
-      0.867519,
-      0.220302,
-      0,
-      0.280187,
-      0.869351,
-      0.206161,
-      0,
-      0.295183,
-      0.871144,
-      0.192908,
-      0,
-      0.31033,
-      0.872839,
-      0.180505,
-      0,
-      0.325624,
-      0.874307,
-      0.168848,
-      0,
-      0.341065,
-      0.875667,
-      0.158021,
-      0,
-      0.35665,
-      0.876758,
-      0.147877,
-      0,
-      0.37238,
-      0.87764,
-      0.138441,
-      0,
-      0.388253,
-      0.878237,
-      0.129627,
-      0,
-      0.404269,
-      0.878563,
-      0.121415,
-      0,
-      0.42043,
-      0.878572,
-      0.113741,
-      0,
-      0.436735,
-      0.87842,
-      0.106652,
-      0,
-      0.453187,
-      0.878057,
-      0.100097,
-      0,
-      0.469786,
-      0.877413,
-      0.0940128,
-      0,
-      0.486536,
-      0.87646,
-      0.0883462,
-      0,
-      0.503439,
-      0.875233,
-      0.0830924,
-      0,
-      0.520498,
-      0.8737,
-      0.0781975,
-      0,
-      0.537717,
-      0.871873,
-      0.07364,
-      0,
-      0.555102,
-      0.86978,
-      0.0694103,
-      0,
-      0.572657,
-      0.867405,
-      0.0654696,
-      0,
-      0.59039,
-      0.864751,
-      0.0617914,
-      0,
-      0.608307,
-      0.861818,
-      0.0583491,
-      0,
-      0.626419,
-      0.858645,
-      0.0551443,
-      0,
-      0.644733,
-      0.855307,
-      0.0521894,
-      0,
-      0.663264,
-      0.851736,
-      0.0494334,
-      0,
-      0.682025,
-      0.847927,
-      0.0468504,
-      0,
-      0.701032,
-      0.843888,
-      0.0444261,
-      0,
-      0.720308,
-      0.839629,
-      0.0421497,
-      0,
-      0.739875,
-      0.835158,
-      0.0400082,
-      0,
-      0.759764,
-      0.830509,
-      0.0380076,
-      0,
-      0.780014,
-      0.825714,
-      0.0361488,
-      0,
-      0.800673,
-      0.820729,
-      0.0343956,
-      0,
-      0.821803,
-      0.815751,
-      0.0327781,
-      0,
-      0.843492,
-      0.810752,
-      0.031275,
-      0,
-      0.86586,
-      0.805587,
-      0.0298542,
-      0,
-      0.889087,
-      0.800317,
-      0.0285397,
-      0,
-      0.913466,
-      0.79489,
-      0.0272948,
-      0,
-      0.93952,
-      0.789314,
-      0.0261139,
-      0,
-      0.96835,
-      0.783593,
-      0.0249938,
-      0,
-      1,
-      1,
-      0.724258,
-      0,
-      0,
-      0.999992,
-      0.724243,
-      0,
-      726889e-9,
-      0.99987,
-      0.724044,
-      0,
-      569574e-8,
-      0.999336,
-      0.72317,
-      0,
-      0.0131702,
-      0.996271,
-      0.719432,
-      0,
-      0.0220738,
-      0.991159,
-      0.712576,
-      0,
-      0.0319405,
-      0.982465,
-      0.700927,
-      0,
-      0.0425202,
-      0.97049,
-      0.684297,
-      0,
-      0.0536599,
-      0.953973,
-      0.661244,
-      0,
-      0.065258,
-      0.935546,
-      0.633804,
-      0,
-      0.0772427,
-      0.916596,
-      0.603071,
-      0,
-      0.0895616,
-      0.899353,
-      0.57105,
-      0,
-      0.102175,
-      0.885216,
-      0.539206,
-      0,
-      0.11505,
-      0.875076,
-      0.508714,
-      0,
-      0.128164,
-      0.868334,
-      0.479571,
-      0,
-      0.141495,
-      0.864414,
-      0.451796,
-      0,
-      0.155026,
-      0.862678,
-      0.425328,
-      0,
-      0.168745,
-      0.862835,
-      0.400352,
-      0,
-      0.182639,
-      0.864067,
-      0.376532,
-      0,
-      0.196699,
-      0.866086,
-      0.35391,
-      0,
-      0.210915,
-      0.868557,
-      0.332424,
-      0,
-      0.225282,
-      0.871271,
-      0.312053,
-      0,
-      0.239792,
-      0.874058,
-      0.292764,
-      0,
-      0.25444,
-      0.8768,
-      0.27453,
-      0,
-      0.269223,
-      0.87939,
-      0.257297,
-      0,
-      0.284135,
-      0.8819,
-      0.24114,
-      0,
-      0.299174,
-      0.884187,
-      0.225934,
-      0,
-      0.314337,
-      0.886262,
-      0.211669,
-      0,
-      0.329622,
-      0.888119,
-      0.198311,
-      0,
-      0.345026,
-      0.889709,
-      0.185783,
-      0,
-      0.360549,
-      0.891054,
-      0.174063,
-      0,
-      0.376189,
-      0.892196,
-      0.163143,
-      0,
-      0.391946,
-      0.893101,
-      0.152952,
-      0,
-      0.407819,
-      0.893803,
-      0.143475,
-      0,
-      0.423808,
-      0.894277,
-      0.134647,
-      0,
-      0.439914,
-      0.894532,
-      0.126434,
-      0,
-      0.456137,
-      0.894576,
-      0.1188,
-      0,
-      0.472479,
-      0.894393,
-      0.111694,
-      0,
-      0.48894,
-      0.893976,
-      0.105069,
-      0,
-      0.505523,
-      0.893346,
-      0.0989077,
-      0,
-      0.52223,
-      0.892502,
-      0.0931724,
-      0,
-      0.539064,
-      0.891441,
-      0.0878276,
-      0,
-      0.556028,
-      0.890276,
-      0.082903,
-      0,
-      0.573125,
-      0.888972,
-      0.0783505,
-      0,
-      0.590361,
-      0.887469,
-      0.0741083,
-      0,
-      0.607741,
-      0.885785,
-      0.0701633,
-      0,
-      0.62527,
-      0.883914,
-      0.0664835,
-      0,
-      0.642957,
-      0.881872,
-      0.0630567,
-      0,
-      0.660809,
-      0.879651,
-      0.0598527,
-      0,
-      0.678836,
-      0.877267,
-      0.0568615,
-      0,
-      0.69705,
-      0.874717,
-      0.05406,
-      0,
-      0.715465,
-      0.872012,
-      0.0514378,
-      0,
-      0.734098,
-      0.869157,
-      0.0489805,
-      0,
-      0.752968,
-      0.866155,
-      0.0466727,
-      0,
-      0.772101,
-      0.863014,
-      0.0445056,
-      0,
-      0.791529,
-      0.859748,
-      0.0424733,
-      0,
-      0.81129,
-      0.856416,
-      0.0405957,
-      0,
-      0.831438,
-      0.852958,
-      0.0388273,
-      0,
-      0.852044,
-      0.849382,
-      0.0371619,
-      0,
-      0.87321,
-      0.845694,
-      0.0355959,
-      0,
-      0.89509,
-      0.841893,
-      0.0341155,
-      0,
-      0.917932,
-      0.837981,
-      0.0327141,
-      0,
-      0.942204,
-      0.833963,
-      0.0313856,
-      0,
-      0.968981,
-      0.829847,
-      0.0301275,
-      0,
-      1,
-      1,
-      0.85214,
-      0,
-      0,
-      0.999969,
-      0.852095,
-      0,
-      279627e-8,
-      0.999483,
-      0.851408,
-      0,
-      0.0107635,
-      0.994545,
-      0.84579,
-      0,
-      0.0206454,
-      0.986188,
-      0.835231,
-      0,
-      0.0315756,
-      0.969847,
-      0.814687,
-      0,
-      0.0432021,
-      0.945951,
-      0.783735,
-      0,
-      0.0553396,
-      0.91917,
-      0.746074,
-      0,
-      0.0678766,
-      0.895488,
-      0.706938,
-      0,
-      0.0807395,
-      0.878232,
-      0.669534,
-      0,
-      0.0938767,
-      0.868252,
-      0.635168,
-      0,
-      0.10725,
-      0.863873,
-      0.603069,
-      0,
-      0.120832,
-      0.863369,
-      0.572514,
-      0,
-      0.134598,
-      0.86545,
-      0.543169,
-      0,
-      0.148533,
-      0.868803,
-      0.514578,
-      0,
-      0.16262,
-      0.872794,
-      0.486762,
-      0,
-      0.176849,
-      0.87702,
-      0.459811,
-      0,
-      0.19121,
-      0.881054,
-      0.433654,
-      0,
-      0.205694,
-      0.884974,
-      0.408574,
-      0,
-      0.220294,
-      0.888587,
-      0.384525,
-      0,
-      0.235005,
-      0.891877,
-      0.36156,
-      0,
-      0.24982,
-      0.894793,
-      0.339661,
-      0,
-      0.264737,
-      0.89743,
-      0.318913,
-      0,
-      0.279751,
-      0.899796,
-      0.299302,
-      0,
-      0.294859,
-      0.901943,
-      0.280843,
-      0,
-      0.310058,
-      0.903858,
-      0.263481,
-      0,
-      0.325346,
-      0.905574,
-      0.247197,
-      0,
-      0.340721,
-      0.907069,
-      0.231915,
-      0,
-      0.356181,
-      0.908379,
-      0.217614,
-      0,
-      0.371725,
-      0.90952,
-      0.20425,
-      0,
-      0.387353,
-      0.910483,
-      0.191758,
-      0,
-      0.403063,
-      0.91128,
-      0.180092,
-      0,
-      0.418854,
-      0.911936,
-      0.169222,
-      0,
-      0.434727,
-      0.912454,
-      0.159098,
-      0,
-      0.450682,
-      0.912835,
-      0.149668,
-      0,
-      0.466718,
-      0.913078,
-      0.140884,
-      0,
-      0.482837,
-      0.913192,
-      0.132709,
-      0,
-      0.499038,
-      0.913175,
-      0.125095,
-      0,
-      0.515324,
-      0.91304,
-      0.118012,
-      0,
-      0.531695,
-      0.912781,
-      0.111417,
-      0,
-      0.548153,
-      0.91241,
-      0.105281,
-      0,
-      0.5647,
-      0.911924,
-      0.0995691,
-      0,
-      0.581338,
-      0.911331,
-      0.0942531,
-      0,
-      0.59807,
-      0.910637,
-      0.0893076,
-      0,
-      0.6149,
-      0.90984,
-      0.0846998,
-      0,
-      0.63183,
-      0.908941,
-      0.0804044,
-      0,
-      0.648865,
-      0.907944,
-      0.0763984,
-      0,
-      0.666011,
-      0.906857,
-      0.0726638,
-      0,
-      0.683273,
-      0.90568,
-      0.0691783,
-      0,
-      0.700659,
-      0.904416,
-      0.0659222,
-      0,
-      0.718176,
-      0.903067,
-      0.0628782,
-      0,
-      0.735834,
-      0.901637,
-      0.0600307,
-      0,
-      0.753646,
-      0.900128,
-      0.0573647,
-      0,
-      0.771625,
-      0.898544,
-      0.0548668,
-      0,
-      0.78979,
-      0.89689,
-      0.052527,
-      0,
-      0.808162,
-      0.895165,
-      0.0503306,
-      0,
-      0.826771,
-      0.893371,
-      0.0482668,
-      0,
-      0.845654,
-      0.891572,
-      0.0463605,
-      0,
-      0.864863,
-      0.889763,
-      0.0445998,
-      0,
-      0.884472,
-      0.887894,
-      0.0429451,
-      0,
-      0.904592,
-      0.885967,
-      0.0413884,
-      0,
-      0.925407,
-      0.883984,
-      0.0399225,
-      0,
-      0.947271,
-      0.881945,
-      0.0385405,
-      0,
-      0.97105,
-      0.879854,
-      0.0372362,
-      0,
-      1,
-      0.999804,
-      0.995833,
-      0,
-      0,
-      0.938155,
-      0.933611,
-      0,
-      0.0158731,
-      0.864755,
-      0.854311,
-      0,
-      0.0317461,
-      0.888594,
-      0.865264,
-      0,
-      0.0476191,
-      0.905575,
-      0.863922,
-      0,
-      0.0634921,
-      0.915125,
-      0.850558,
-      0,
-      0.0793651,
-      0.920665,
-      0.829254,
-      0,
-      0.0952381,
-      0.924073,
-      0.802578,
-      0,
-      0.111111,
-      0.926304,
-      0.772211,
-      0,
-      0.126984,
-      0.927829,
-      0.739366,
-      0,
-      0.142857,
-      0.928924,
-      0.705033,
-      0,
-      0.15873,
-      0.92973,
-      0.670019,
-      0,
-      0.174603,
-      0.930339,
-      0.634993,
-      0,
-      0.190476,
-      0.930811,
-      0.600485,
-      0,
-      0.206349,
-      0.931191,
-      0.566897,
-      0,
-      0.222222,
-      0.93149,
-      0.534485,
-      0,
-      0.238095,
-      0.931737,
-      0.503429,
-      0,
-      0.253968,
-      0.931939,
-      0.473811,
-      0,
-      0.269841,
-      0.932108,
-      0.445668,
-      0,
-      0.285714,
-      0.93225,
-      0.418993,
-      0,
-      0.301587,
-      0.932371,
-      0.393762,
-      0,
-      0.31746,
-      0.932474,
-      0.369939,
-      0,
-      0.333333,
-      0.932562,
-      0.347479,
-      0,
-      0.349206,
-      0.932638,
-      0.326336,
-      0,
-      0.365079,
-      0.932703,
-      0.306462,
-      0,
-      0.380952,
-      0.93276,
-      0.287805,
-      0,
-      0.396825,
-      0.932809,
-      0.270313,
-      0,
-      0.412698,
-      0.932851,
-      0.253933,
-      0,
-      0.428571,
-      0.932887,
-      0.23861,
-      0,
-      0.444444,
-      0.932917,
-      0.224289,
-      0,
-      0.460317,
-      0.932943,
-      0.210917,
-      0,
-      0.47619,
-      0.932965,
-      0.19844,
-      0,
-      0.492063,
-      0.932982,
-      0.186807,
-      0,
-      0.507937,
-      0.932995,
-      0.175966,
-      0,
-      0.52381,
-      0.933005,
-      0.165869,
-      0,
-      0.539683,
-      0.933011,
-      0.156468,
-      0,
-      0.555556,
-      0.933013,
-      0.147719,
-      0,
-      0.571429,
-      0.933013,
-      0.139579,
-      0,
-      0.587302,
-      0.93301,
-      0.132007,
-      0,
-      0.603175,
-      0.933004,
-      0.124965,
-      0,
-      0.619048,
-      0.932994,
-      0.118416,
-      0,
-      0.634921,
-      0.932982,
-      0.112326,
-      0,
-      0.650794,
-      0.932968,
-      0.106663,
-      0,
-      0.666667,
-      0.93295,
-      0.101397,
-      0,
-      0.68254,
-      0.932931,
-      0.0964993,
-      0,
-      0.698413,
-      0.932908,
-      0.0919438,
-      0,
-      0.714286,
-      0.932883,
-      0.0877057,
-      0,
-      0.730159,
-      0.932856,
-      0.0837623,
-      0,
-      0.746032,
-      0.932827,
-      0.0800921,
-      0,
-      0.761905,
-      0.932796,
-      0.0766754,
-      0,
-      0.777778,
-      0.932762,
-      0.0734936,
-      0,
-      0.793651,
-      0.932727,
-      0.0705296,
-      0,
-      0.809524,
-      0.932689,
-      0.0677676,
-      0,
-      0.825397,
-      0.93265,
-      0.0651929,
-      0,
-      0.84127,
-      0.932609,
-      0.0627917,
-      0,
-      0.857143,
-      0.932565,
-      0.0605515,
-      0,
-      0.873016,
-      0.932521,
-      0.0584606,
-      0,
-      0.888889,
-      0.932474,
-      0.0565082,
-      0,
-      0.904762,
-      0.932427,
-      0.0546841,
-      0,
-      0.920635,
-      0.932377,
-      0.0529793,
-      0,
-      0.936508,
-      0.932326,
-      0.0513851,
-      0,
-      0.952381,
-      0.932274,
-      0.0498936,
-      0,
-      0.968254,
-      0.93222,
-      0.0484975,
-      0,
-      0.984127,
-      0.932164,
-      0.0471899,
-      0,
-      1
-    ];
-    const ltc_float_1 = new Float32Array(LTC_MAT_1);
-    const ltc_float_2 = new Float32Array(LTC_MAT_2);
-    three_module.UniformsLib.LTC_FLOAT_1 = new three_module.DataTexture(
-      ltc_float_1,
-      64,
-      64,
-      three_module.RGBAFormat,
-      three_module.FloatType,
-      three_module.UVMapping,
-      three_module.ClampToEdgeWrapping,
-      three_module.ClampToEdgeWrapping,
-      three_module.LinearFilter,
-      three_module.NearestFilter,
-      1
-    );
-    three_module.UniformsLib.LTC_FLOAT_2 = new three_module.DataTexture(
-      ltc_float_2,
-      64,
-      64,
-      three_module.RGBAFormat,
-      three_module.FloatType,
-      three_module.UVMapping,
-      three_module.ClampToEdgeWrapping,
-      three_module.ClampToEdgeWrapping,
-      three_module.LinearFilter,
-      three_module.NearestFilter,
-      1
-    );
-    three_module.UniformsLib.LTC_FLOAT_1.needsUpdate = true;
-    three_module.UniformsLib.LTC_FLOAT_2.needsUpdate = true;
-    const ltc_half_1 = new Uint16Array(LTC_MAT_1.length);
-    LTC_MAT_1.forEach(function(x, index) {
-      ltc_half_1[index] = three_module.DataUtils.toHalfFloat(x);
-    });
-    const ltc_half_2 = new Uint16Array(LTC_MAT_2.length);
-    LTC_MAT_2.forEach(function(x, index) {
-      ltc_half_2[index] = three_module.DataUtils.toHalfFloat(x);
-    });
-    three_module.UniformsLib.LTC_HALF_1 = new three_module.DataTexture(
-      ltc_half_1,
-      64,
-      64,
-      three_module.RGBAFormat,
-      three_module.HalfFloatType,
-      three_module.UVMapping,
-      three_module.ClampToEdgeWrapping,
-      three_module.ClampToEdgeWrapping,
-      three_module.LinearFilter,
-      three_module.NearestFilter,
-      1
-    );
-    three_module.UniformsLib.LTC_HALF_2 = new three_module.DataTexture(
-      ltc_half_2,
-      64,
-      64,
-      three_module.RGBAFormat,
-      three_module.HalfFloatType,
-      three_module.UVMapping,
-      three_module.ClampToEdgeWrapping,
-      three_module.ClampToEdgeWrapping,
-      three_module.LinearFilter,
-      three_module.NearestFilter,
-      1
-    );
-    three_module.UniformsLib.LTC_HALF_1.needsUpdate = true;
-    three_module.UniformsLib.LTC_HALF_2.needsUpdate = true;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/lights/LightProbeGenerator.js
-
-class LightProbeGenerator {
-  // https://www.ppsloan.org/publications/StupidSH36.pdf
-  static fromCubeTexture(cubeTexture) {
-    let totalWeight = 0;
-    const coord = new three_module.Vector3();
-    const dir = new three_module.Vector3();
-    const color = new three_module.Color();
-    const shBasis = [0, 0, 0, 0, 0, 0, 0, 0, 0];
-    const sh = new three_module.SphericalHarmonics3();
-    const shCoefficients = sh.coefficients;
-    for (let faceIndex = 0; faceIndex < 6; faceIndex++) {
-      const image = cubeTexture.image[faceIndex];
-      const width = image.width;
-      const height = image.height;
-      const canvas = document.createElement("canvas");
-      canvas.width = width;
-      canvas.height = height;
-      const context = canvas.getContext("2d");
-      context.drawImage(image, 0, 0, width, height);
-      const imageData = context.getImageData(0, 0, width, height);
-      const data = imageData.data;
-      const imageWidth = imageData.width;
-      const pixelSize = 2 / imageWidth;
-      for (let i = 0, il = data.length; i < il; i += 4) {
-        color.setRGB(data[i] / 255, data[i + 1] / 255, data[i + 2] / 255);
-        if ("colorSpace" in cubeTexture) {
-          if (cubeTexture.colorSpace === "srgb") {
-            color.convertSRGBToLinear();
-          }
-        } else if (cubeTexture.encoding === 3001) {
-          color.convertSRGBToLinear();
-        }
-        const pixelIndex = i / 4;
-        const col = -1 + (pixelIndex % imageWidth + 0.5) * pixelSize;
-        const row = 1 - (Math.floor(pixelIndex / imageWidth) + 0.5) * pixelSize;
-        switch (faceIndex) {
-          case 0:
-            coord.set(-1, row, -col);
-            break;
-          case 1:
-            coord.set(1, row, col);
-            break;
-          case 2:
-            coord.set(-col, 1, -row);
-            break;
-          case 3:
-            coord.set(-col, -1, row);
-            break;
-          case 4:
-            coord.set(-col, row, 1);
-            break;
-          case 5:
-            coord.set(col, row, -1);
-            break;
-        }
-        const lengthSq = coord.lengthSq();
-        const weight = 4 / (Math.sqrt(lengthSq) * lengthSq);
-        totalWeight += weight;
-        dir.copy(coord).normalize();
-        three_module.SphericalHarmonics3.getBasisAt(dir, shBasis);
-        for (let j = 0; j < 9; j++) {
-          shCoefficients[j].x += shBasis[j] * color.r * weight;
-          shCoefficients[j].y += shBasis[j] * color.g * weight;
-          shCoefficients[j].z += shBasis[j] * color.b * weight;
-        }
-      }
-    }
-    const norm = 4 * Math.PI / totalWeight;
-    for (let j = 0; j < 9; j++) {
-      shCoefficients[j].x *= norm;
-      shCoefficients[j].y *= norm;
-      shCoefficients[j].z *= norm;
-    }
-    return new three_module.LightProbe(sh);
-  }
-  static fromCubeRenderTarget(renderer, cubeRenderTarget) {
-    let totalWeight = 0;
-    const coord = new three_module.Vector3();
-    const dir = new three_module.Vector3();
-    const color = new three_module.Color();
-    const shBasis = [0, 0, 0, 0, 0, 0, 0, 0, 0];
-    const sh = new three_module.SphericalHarmonics3();
-    const shCoefficients = sh.coefficients;
-    for (let faceIndex = 0; faceIndex < 6; faceIndex++) {
-      const imageWidth = cubeRenderTarget.width;
-      const data = new Uint8Array(imageWidth * imageWidth * 4);
-      renderer.readRenderTargetPixels(cubeRenderTarget, 0, 0, imageWidth, imageWidth, data, faceIndex);
-      const pixelSize = 2 / imageWidth;
-      for (let i = 0, il = data.length; i < il; i += 4) {
-        color.setRGB(data[i] / 255, data[i + 1] / 255, data[i + 2] / 255);
-        if ("colorSpace" in cubeRenderTarget.texture) {
-          if (cubeRenderTarget.texture.colorSpace === "srgb") {
-            color.convertSRGBToLinear();
-          }
-        } else if (cubeRenderTarget.texture.encoding === 3001) {
-          color.convertSRGBToLinear();
-        }
-        const pixelIndex = i / 4;
-        const col = -1 + (pixelIndex % imageWidth + 0.5) * pixelSize;
-        const row = 1 - (Math.floor(pixelIndex / imageWidth) + 0.5) * pixelSize;
-        switch (faceIndex) {
-          case 0:
-            coord.set(1, row, -col);
-            break;
-          case 1:
-            coord.set(-1, row, col);
-            break;
-          case 2:
-            coord.set(col, 1, -row);
-            break;
-          case 3:
-            coord.set(col, -1, row);
-            break;
-          case 4:
-            coord.set(col, row, 1);
-            break;
-          case 5:
-            coord.set(-col, row, -1);
-            break;
-        }
-        const lengthSq = coord.lengthSq();
-        const weight = 4 / (Math.sqrt(lengthSq) * lengthSq);
-        totalWeight += weight;
-        dir.copy(coord).normalize();
-        three_module.SphericalHarmonics3.getBasisAt(dir, shBasis);
-        for (let j = 0; j < 9; j++) {
-          shCoefficients[j].x += shBasis[j] * color.r * weight;
-          shCoefficients[j].y += shBasis[j] * color.g * weight;
-          shCoefficients[j].z += shBasis[j] * color.b * weight;
-        }
-      }
-    }
-    const norm = 4 * Math.PI / totalWeight;
-    for (let j = 0; j < 9; j++) {
-      shCoefficients[j].x *= norm;
-      shCoefficients[j].y *= norm;
-      shCoefficients[j].z *= norm;
-    }
-    return new three_module.LightProbe(sh);
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/curves/NURBSUtils.js
-var NURBSUtils = __webpack_require__(71246);
-// EXTERNAL MODULE: ./node_modules/three-stdlib/curves/NURBSCurve.js
-var NURBSCurve = __webpack_require__(33785);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/curves/NURBSSurface.js
-
-
-class NURBSSurface {
-  constructor(degree1, degree2, knots1, knots2, controlPoints) {
-    this.degree1 = degree1;
-    this.degree2 = degree2;
-    this.knots1 = knots1;
-    this.knots2 = knots2;
-    this.controlPoints = [];
-    const len1 = knots1.length - degree1 - 1;
-    const len2 = knots2.length - degree2 - 1;
-    for (let i = 0; i < len1; ++i) {
-      this.controlPoints[i] = [];
-      for (let j = 0; j < len2; ++j) {
-        const point = controlPoints[i][j];
-        this.controlPoints[i][j] = new three_module.Vector4(point.x, point.y, point.z, point.w);
-      }
-    }
-  }
-  getPoint(t1, t2, target) {
-    const u = this.knots1[0] + t1 * (this.knots1[this.knots1.length - 1] - this.knots1[0]);
-    const v = this.knots2[0] + t2 * (this.knots2[this.knots2.length - 1] - this.knots2[0]);
-    (0,NURBSUtils/* calcSurfacePoint */.nl)(this.degree1, this.degree2, this.knots1, this.knots2, this.controlPoints, u, v, target);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/curves/CurveExtras.js
-
-class GrannyKnot extends three_module.Curve {
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    t = 2 * Math.PI * t;
-    const x = -0.22 * Math.cos(t) - 1.28 * Math.sin(t) - 0.44 * Math.cos(3 * t) - 0.78 * Math.sin(3 * t);
-    const y = -0.1 * Math.cos(2 * t) - 0.27 * Math.sin(2 * t) + 0.38 * Math.cos(4 * t) + 0.46 * Math.sin(4 * t);
-    const z = 0.7 * Math.cos(3 * t) - 0.4 * Math.sin(3 * t);
-    return point.set(x, y, z).multiplyScalar(20);
-  }
-}
-class HeartCurve extends three_module.Curve {
-  constructor(scale = 5) {
-    super();
-    this.scale = scale;
-  }
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    t *= 2 * Math.PI;
-    const x = 16 * Math.pow(Math.sin(t), 3);
-    const y = 13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t);
-    const z = 0;
-    return point.set(x, y, z).multiplyScalar(this.scale);
-  }
-}
-class VivianiCurve extends three_module.Curve {
-  constructor(scale = 70) {
-    super();
-    this.scale = scale;
-  }
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    t = t * 4 * Math.PI;
-    const a = this.scale / 2;
-    const x = a * (1 + Math.cos(t));
-    const y = a * Math.sin(t);
-    const z = 2 * a * Math.sin(t / 2);
-    return point.set(x, y, z);
-  }
-}
-class KnotCurve extends three_module.Curve {
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    t *= 2 * Math.PI;
-    const R = 10;
-    const s = 50;
-    const x = s * Math.sin(t);
-    const y = Math.cos(t) * (R + s * Math.cos(t));
-    const z = Math.sin(t) * (R + s * Math.cos(t));
-    return point.set(x, y, z);
-  }
-}
-class HelixCurve extends three_module.Curve {
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    const a = 30;
-    const b = 150;
-    const t2 = 2 * Math.PI * t * b / 30;
-    const x = Math.cos(t2) * a;
-    const y = Math.sin(t2) * a;
-    const z = b * t;
-    return point.set(x, y, z);
-  }
-}
-class TrefoilKnot extends three_module.Curve {
-  constructor(scale = 10) {
-    super();
-    this.scale = scale;
-  }
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    t *= Math.PI * 2;
-    const x = (2 + Math.cos(3 * t)) * Math.cos(2 * t);
-    const y = (2 + Math.cos(3 * t)) * Math.sin(2 * t);
-    const z = Math.sin(3 * t);
-    return point.set(x, y, z).multiplyScalar(this.scale);
-  }
-}
-class TorusKnot extends three_module.Curve {
-  constructor(scale = 10) {
-    super();
-    this.scale = scale;
-  }
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    const p = 3;
-    const q = 4;
-    t *= Math.PI * 2;
-    const x = (2 + Math.cos(q * t)) * Math.cos(p * t);
-    const y = (2 + Math.cos(q * t)) * Math.sin(p * t);
-    const z = Math.sin(q * t);
-    return point.set(x, y, z).multiplyScalar(this.scale);
-  }
-}
-class CinquefoilKnot extends three_module.Curve {
-  constructor(scale = 10) {
-    super();
-    this.scale = scale;
-  }
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    const p = 2;
-    const q = 5;
-    t *= Math.PI * 2;
-    const x = (2 + Math.cos(q * t)) * Math.cos(p * t);
-    const y = (2 + Math.cos(q * t)) * Math.sin(p * t);
-    const z = Math.sin(q * t);
-    return point.set(x, y, z).multiplyScalar(this.scale);
-  }
-}
-class TrefoilPolynomialKnot extends three_module.Curve {
-  constructor(scale = 10) {
-    super();
-    this.scale = scale;
-  }
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    t = t * 4 - 2;
-    const x = Math.pow(t, 3) - 3 * t;
-    const y = Math.pow(t, 4) - 4 * t * t;
-    const z = 1 / 5 * Math.pow(t, 5) - 2 * t;
-    return point.set(x, y, z).multiplyScalar(this.scale);
-  }
-}
-function scaleTo(x, y, t) {
-  const r = y - x;
-  return t * r + x;
-}
-class FigureEightPolynomialKnot extends three_module.Curve {
-  constructor(scale = 1) {
-    super();
-    this.scale = scale;
-  }
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    t = scaleTo(-4, 4, t);
-    const x = 2 / 5 * t * (t * t - 7) * (t * t - 10);
-    const y = Math.pow(t, 4) - 13 * t * t;
-    const z = 1 / 10 * t * (t * t - 4) * (t * t - 9) * (t * t - 12);
-    return point.set(x, y, z).multiplyScalar(this.scale);
-  }
-}
-class DecoratedTorusKnot4a extends three_module.Curve {
-  constructor(scale = 40) {
-    super();
-    this.scale = scale;
-  }
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    t *= Math.PI * 2;
-    const x = Math.cos(2 * t) * (1 + 0.6 * (Math.cos(5 * t) + 0.75 * Math.cos(10 * t)));
-    const y = Math.sin(2 * t) * (1 + 0.6 * (Math.cos(5 * t) + 0.75 * Math.cos(10 * t)));
-    const z = 0.35 * Math.sin(5 * t);
-    return point.set(x, y, z).multiplyScalar(this.scale);
-  }
-}
-class DecoratedTorusKnot4b extends three_module.Curve {
-  constructor(scale = 40) {
-    super();
-    this.scale = scale;
-  }
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    const fi = t * Math.PI * 2;
-    const x = Math.cos(2 * fi) * (1 + 0.45 * Math.cos(3 * fi) + 0.4 * Math.cos(9 * fi));
-    const y = Math.sin(2 * fi) * (1 + 0.45 * Math.cos(3 * fi) + 0.4 * Math.cos(9 * fi));
-    const z = 0.2 * Math.sin(9 * fi);
-    return point.set(x, y, z).multiplyScalar(this.scale);
-  }
-}
-class DecoratedTorusKnot5a extends three_module.Curve {
-  constructor(scale = 40) {
-    super();
-    this.scale = scale;
-  }
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    const fi = t * Math.PI * 2;
-    const x = Math.cos(3 * fi) * (1 + 0.3 * Math.cos(5 * fi) + 0.5 * Math.cos(10 * fi));
-    const y = Math.sin(3 * fi) * (1 + 0.3 * Math.cos(5 * fi) + 0.5 * Math.cos(10 * fi));
-    const z = 0.2 * Math.sin(20 * fi);
-    return point.set(x, y, z).multiplyScalar(this.scale);
-  }
-}
-class DecoratedTorusKnot5c extends three_module.Curve {
-  constructor(scale = 40) {
-    super();
-    this.scale = scale;
-  }
-  getPoint(t, optionalTarget = new three_module.Vector3()) {
-    const point = optionalTarget;
-    const fi = t * Math.PI * 2;
-    const x = Math.cos(4 * fi) * (1 + 0.5 * (Math.cos(5 * fi) + 0.4 * Math.cos(20 * fi)));
-    const y = Math.sin(4 * fi) * (1 + 0.5 * (Math.cos(5 * fi) + 0.4 * Math.cos(20 * fi)));
-    const z = 0.35 * Math.sin(15 * fi);
-    return point.set(x, y, z).multiplyScalar(this.scale);
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/deprecated/Geometry.js
-
-const _m1 = /* @__PURE__ */ new three_module.Matrix4();
-const _obj = /* @__PURE__ */ new three_module.Object3D();
-const _offset = /* @__PURE__ */ new three_module.Vector3();
-class Geometry extends three_module.EventDispatcher {
-  static createBufferGeometryFromObject(object) {
-    let buffergeometry = new three_module.BufferGeometry();
-    const geometry = object.geometry;
-    if (object.isPoints || object.isLine) {
-      const positions = new three_module.Float32BufferAttribute(geometry.vertices.length * 3, 3);
-      const colors = new three_module.Float32BufferAttribute(geometry.colors.length * 3, 3);
-      buffergeometry.setAttribute("position", positions.copyVector3sArray(geometry.vertices));
-      buffergeometry.setAttribute("color", colors.copyColorsArray(geometry.colors));
-      if (geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length) {
-        const lineDistances = new three_module.Float32BufferAttribute(geometry.lineDistances.length, 1);
-        buffergeometry.setAttribute("lineDistance", lineDistances.copyArray(geometry.lineDistances));
-      }
-      if (geometry.boundingSphere !== null) {
-        buffergeometry.boundingSphere = geometry.boundingSphere.clone();
-      }
-      if (geometry.boundingBox !== null) {
-        buffergeometry.boundingBox = geometry.boundingBox.clone();
-      }
-    } else if (object.isMesh) {
-      buffergeometry = geometry.toBufferGeometry();
-    }
-    return buffergeometry;
-  }
-  constructor() {
-    super();
-    this.isGeometry = true;
-    this.uuid = three_module.MathUtils.generateUUID();
-    this.name = "";
-    this.type = "Geometry";
-    this.vertices = [];
-    this.colors = [];
-    this.faces = [];
-    this.faceVertexUvs = [[]];
-    this.morphTargets = [];
-    this.morphNormals = [];
-    this.skinWeights = [];
-    this.skinIndices = [];
-    this.lineDistances = [];
-    this.boundingBox = null;
-    this.boundingSphere = null;
-    this.elementsNeedUpdate = false;
-    this.verticesNeedUpdate = false;
-    this.uvsNeedUpdate = false;
-    this.normalsNeedUpdate = false;
-    this.colorsNeedUpdate = false;
-    this.lineDistancesNeedUpdate = false;
-    this.groupsNeedUpdate = false;
-  }
-  applyMatrix4(matrix) {
-    const normalMatrix = new three_module.Matrix3().getNormalMatrix(matrix);
-    for (let i = 0, il = this.vertices.length; i < il; i++) {
-      const vertex = this.vertices[i];
-      vertex.applyMatrix4(matrix);
-    }
-    for (let i = 0, il = this.faces.length; i < il; i++) {
-      const face = this.faces[i];
-      face.normal.applyMatrix3(normalMatrix).normalize();
-      for (let j = 0, jl = face.vertexNormals.length; j < jl; j++) {
-        face.vertexNormals[j].applyMatrix3(normalMatrix).normalize();
-      }
-    }
-    if (this.boundingBox !== null) {
-      this.computeBoundingBox();
-    }
-    if (this.boundingSphere !== null) {
-      this.computeBoundingSphere();
-    }
-    this.verticesNeedUpdate = true;
-    this.normalsNeedUpdate = true;
-    return this;
-  }
-  rotateX(angle) {
-    _m1.makeRotationX(angle);
-    this.applyMatrix4(_m1);
-    return this;
-  }
-  rotateY(angle) {
-    _m1.makeRotationY(angle);
-    this.applyMatrix4(_m1);
-    return this;
-  }
-  rotateZ(angle) {
-    _m1.makeRotationZ(angle);
-    this.applyMatrix4(_m1);
-    return this;
-  }
-  translate(x, y, z) {
-    _m1.makeTranslation(x, y, z);
-    this.applyMatrix4(_m1);
-    return this;
-  }
-  scale(x, y, z) {
-    _m1.makeScale(x, y, z);
-    this.applyMatrix4(_m1);
-    return this;
-  }
-  lookAt(vector) {
-    _obj.lookAt(vector);
-    _obj.updateMatrix();
-    this.applyMatrix4(_obj.matrix);
-    return this;
-  }
-  fromBufferGeometry(geometry) {
-    const scope = this;
-    const index = geometry.index !== null ? geometry.index : void 0;
-    const attributes = geometry.attributes;
-    if (attributes.position === void 0) {
-      console.error("THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.");
-      return this;
-    }
-    const position = attributes.position;
-    const normal = attributes.normal;
-    const color = attributes.color;
-    const uv = attributes.uv;
-    const uv2 = attributes.uv2;
-    if (uv2 !== void 0)
-      this.faceVertexUvs[1] = [];
-    for (let i = 0; i < position.count; i++) {
-      scope.vertices.push(new three_module.Vector3().fromBufferAttribute(position, i));
-      if (color !== void 0) {
-        scope.colors.push(new three_module.Color().fromBufferAttribute(color, i));
-      }
-    }
-    function addFace(a, b, c, materialIndex) {
-      const vertexColors = color === void 0 ? [] : [scope.colors[a].clone(), scope.colors[b].clone(), scope.colors[c].clone()];
-      const vertexNormals = normal === void 0 ? [] : [
-        new three_module.Vector3().fromBufferAttribute(normal, a),
-        new three_module.Vector3().fromBufferAttribute(normal, b),
-        new three_module.Vector3().fromBufferAttribute(normal, c)
-      ];
-      const face = new Face3(a, b, c, vertexNormals, vertexColors, materialIndex);
-      scope.faces.push(face);
-      if (uv !== void 0) {
-        scope.faceVertexUvs[0].push([
-          new three_module.Vector2().fromBufferAttribute(uv, a),
-          new three_module.Vector2().fromBufferAttribute(uv, b),
-          new three_module.Vector2().fromBufferAttribute(uv, c)
-        ]);
-      }
-      if (uv2 !== void 0) {
-        scope.faceVertexUvs[1].push([
-          new three_module.Vector2().fromBufferAttribute(uv2, a),
-          new three_module.Vector2().fromBufferAttribute(uv2, b),
-          new three_module.Vector2().fromBufferAttribute(uv2, c)
-        ]);
-      }
-    }
-    const groups = geometry.groups;
-    if (groups.length > 0) {
-      for (let i = 0; i < groups.length; i++) {
-        const group = groups[i];
-        const start = group.start;
-        const count = group.count;
-        for (let j = start, jl = start + count; j < jl; j += 3) {
-          if (index !== void 0) {
-            addFace(index.getX(j), index.getX(j + 1), index.getX(j + 2), group.materialIndex);
-          } else {
-            addFace(j, j + 1, j + 2, group.materialIndex);
-          }
-        }
-      }
-    } else {
-      if (index !== void 0) {
-        for (let i = 0; i < index.count; i += 3) {
-          addFace(index.getX(i), index.getX(i + 1), index.getX(i + 2));
-        }
-      } else {
-        for (let i = 0; i < position.count; i += 3) {
-          addFace(i, i + 1, i + 2);
-        }
-      }
-    }
-    this.computeFaceNormals();
-    if (geometry.boundingBox !== null) {
-      this.boundingBox = geometry.boundingBox.clone();
-    }
-    if (geometry.boundingSphere !== null) {
-      this.boundingSphere = geometry.boundingSphere.clone();
-    }
-    return this;
-  }
-  center() {
-    this.computeBoundingBox();
-    this.boundingBox.getCenter(_offset).negate();
-    this.translate(_offset.x, _offset.y, _offset.z);
-    return this;
-  }
-  normalize() {
-    this.computeBoundingSphere();
-    const center = this.boundingSphere.center;
-    const radius = this.boundingSphere.radius;
-    const s = radius === 0 ? 1 : 1 / radius;
-    const matrix = new three_module.Matrix4();
-    matrix.set(s, 0, 0, -s * center.x, 0, s, 0, -s * center.y, 0, 0, s, -s * center.z, 0, 0, 0, 1);
-    this.applyMatrix4(matrix);
-    return this;
-  }
-  computeFaceNormals() {
-    const cb = new three_module.Vector3(), ab = new three_module.Vector3();
-    for (let f = 0, fl = this.faces.length; f < fl; f++) {
-      const face = this.faces[f];
-      const vA = this.vertices[face.a];
-      const vB = this.vertices[face.b];
-      const vC = this.vertices[face.c];
-      cb.subVectors(vC, vB);
-      ab.subVectors(vA, vB);
-      cb.cross(ab);
-      cb.normalize();
-      face.normal.copy(cb);
-    }
-  }
-  computeVertexNormals(areaWeighted = true) {
-    const vertices = new Array(this.vertices.length);
-    for (let v = 0, vl = this.vertices.length; v < vl; v++) {
-      vertices[v] = new three_module.Vector3();
-    }
-    if (areaWeighted) {
-      const cb = new three_module.Vector3(), ab = new three_module.Vector3();
-      for (let f = 0, fl = this.faces.length; f < fl; f++) {
-        const face = this.faces[f];
-        const vA = this.vertices[face.a];
-        const vB = this.vertices[face.b];
-        const vC = this.vertices[face.c];
-        cb.subVectors(vC, vB);
-        ab.subVectors(vA, vB);
-        cb.cross(ab);
-        vertices[face.a].add(cb);
-        vertices[face.b].add(cb);
-        vertices[face.c].add(cb);
-      }
-    } else {
-      this.computeFaceNormals();
-      for (let f = 0, fl = this.faces.length; f < fl; f++) {
-        const face = this.faces[f];
-        vertices[face.a].add(face.normal);
-        vertices[face.b].add(face.normal);
-        vertices[face.c].add(face.normal);
-      }
-    }
-    for (let v = 0, vl = this.vertices.length; v < vl; v++) {
-      vertices[v].normalize();
-    }
-    for (let f = 0, fl = this.faces.length; f < fl; f++) {
-      const face = this.faces[f];
-      const vertexNormals = face.vertexNormals;
-      if (vertexNormals.length === 3) {
-        vertexNormals[0].copy(vertices[face.a]);
-        vertexNormals[1].copy(vertices[face.b]);
-        vertexNormals[2].copy(vertices[face.c]);
-      } else {
-        vertexNormals[0] = vertices[face.a].clone();
-        vertexNormals[1] = vertices[face.b].clone();
-        vertexNormals[2] = vertices[face.c].clone();
-      }
-    }
-    if (this.faces.length > 0) {
-      this.normalsNeedUpdate = true;
-    }
-  }
-  computeFlatVertexNormals() {
-    this.computeFaceNormals();
-    for (let f = 0, fl = this.faces.length; f < fl; f++) {
-      const face = this.faces[f];
-      const vertexNormals = face.vertexNormals;
-      if (vertexNormals.length === 3) {
-        vertexNormals[0].copy(face.normal);
-        vertexNormals[1].copy(face.normal);
-        vertexNormals[2].copy(face.normal);
-      } else {
-        vertexNormals[0] = face.normal.clone();
-        vertexNormals[1] = face.normal.clone();
-        vertexNormals[2] = face.normal.clone();
-      }
-    }
-    if (this.faces.length > 0) {
-      this.normalsNeedUpdate = true;
-    }
-  }
-  computeMorphNormals() {
-    for (let f = 0, fl = this.faces.length; f < fl; f++) {
-      const face = this.faces[f];
-      if (!face.__originalFaceNormal) {
-        face.__originalFaceNormal = face.normal.clone();
-      } else {
-        face.__originalFaceNormal.copy(face.normal);
-      }
-      if (!face.__originalVertexNormals)
-        face.__originalVertexNormals = [];
-      for (let i = 0, il = face.vertexNormals.length; i < il; i++) {
-        if (!face.__originalVertexNormals[i]) {
-          face.__originalVertexNormals[i] = face.vertexNormals[i].clone();
-        } else {
-          face.__originalVertexNormals[i].copy(face.vertexNormals[i]);
-        }
-      }
-    }
-    const tmpGeo = new Geometry();
-    tmpGeo.faces = this.faces;
-    for (let i = 0, il = this.morphTargets.length; i < il; i++) {
-      if (!this.morphNormals[i]) {
-        this.morphNormals[i] = {};
-        this.morphNormals[i].faceNormals = [];
-        this.morphNormals[i].vertexNormals = [];
-        const dstNormalsFace = this.morphNormals[i].faceNormals;
-        const dstNormalsVertex = this.morphNormals[i].vertexNormals;
-        for (let f = 0, fl = this.faces.length; f < fl; f++) {
-          const faceNormal = new three_module.Vector3();
-          const vertexNormals = {
-            a: new three_module.Vector3(),
-            b: new three_module.Vector3(),
-            c: new three_module.Vector3()
-          };
-          dstNormalsFace.push(faceNormal);
-          dstNormalsVertex.push(vertexNormals);
-        }
-      }
-      const morphNormals = this.morphNormals[i];
-      tmpGeo.vertices = this.morphTargets[i].vertices;
-      tmpGeo.computeFaceNormals();
-      tmpGeo.computeVertexNormals();
-      for (let f = 0, fl = this.faces.length; f < fl; f++) {
-        const face = this.faces[f];
-        const faceNormal = morphNormals.faceNormals[f];
-        const vertexNormals = morphNormals.vertexNormals[f];
-        faceNormal.copy(face.normal);
-        vertexNormals.a.copy(face.vertexNormals[0]);
-        vertexNormals.b.copy(face.vertexNormals[1]);
-        vertexNormals.c.copy(face.vertexNormals[2]);
-      }
-    }
-    for (let f = 0, fl = this.faces.length; f < fl; f++) {
-      const face = this.faces[f];
-      face.normal = face.__originalFaceNormal;
-      face.vertexNormals = face.__originalVertexNormals;
-    }
-  }
-  computeBoundingBox() {
-    if (this.boundingBox === null) {
-      this.boundingBox = new three_module.Box3();
-    }
-    this.boundingBox.setFromPoints(this.vertices);
-  }
-  computeBoundingSphere() {
-    if (this.boundingSphere === null) {
-      this.boundingSphere = new three_module.Sphere();
-    }
-    this.boundingSphere.setFromPoints(this.vertices);
-  }
-  merge(geometry, matrix, materialIndexOffset = 0) {
-    if (!(geometry && geometry.isGeometry)) {
-      console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.", geometry);
-      return;
-    }
-    let normalMatrix;
-    const vertexOffset = this.vertices.length, vertices1 = this.vertices, vertices2 = geometry.vertices, faces1 = this.faces, faces2 = geometry.faces, colors1 = this.colors, colors2 = geometry.colors;
-    if (matrix !== void 0) {
-      normalMatrix = new three_module.Matrix3().getNormalMatrix(matrix);
-    }
-    for (let i = 0, il = vertices2.length; i < il; i++) {
-      const vertex = vertices2[i];
-      const vertexCopy = vertex.clone();
-      if (matrix !== void 0)
-        vertexCopy.applyMatrix4(matrix);
-      vertices1.push(vertexCopy);
-    }
-    for (let i = 0, il = colors2.length; i < il; i++) {
-      colors1.push(colors2[i].clone());
-    }
-    for (let i = 0, il = faces2.length; i < il; i++) {
-      const face = faces2[i];
-      let normal, color;
-      const faceVertexNormals = face.vertexNormals, faceVertexColors = face.vertexColors;
-      const faceCopy = new Face3(face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset);
-      faceCopy.normal.copy(face.normal);
-      if (normalMatrix !== void 0) {
-        faceCopy.normal.applyMatrix3(normalMatrix).normalize();
-      }
-      for (let j = 0, jl = faceVertexNormals.length; j < jl; j++) {
-        normal = faceVertexNormals[j].clone();
-        if (normalMatrix !== void 0) {
-          normal.applyMatrix3(normalMatrix).normalize();
-        }
-        faceCopy.vertexNormals.push(normal);
-      }
-      faceCopy.color.copy(face.color);
-      for (let j = 0, jl = faceVertexColors.length; j < jl; j++) {
-        color = faceVertexColors[j];
-        faceCopy.vertexColors.push(color.clone());
-      }
-      faceCopy.materialIndex = face.materialIndex + materialIndexOffset;
-      faces1.push(faceCopy);
-    }
-    for (let i = 0, il = geometry.faceVertexUvs.length; i < il; i++) {
-      const faceVertexUvs2 = geometry.faceVertexUvs[i];
-      if (this.faceVertexUvs[i] === void 0)
-        this.faceVertexUvs[i] = [];
-      for (let j = 0, jl = faceVertexUvs2.length; j < jl; j++) {
-        const uvs2 = faceVertexUvs2[j], uvsCopy = [];
-        for (let k = 0, kl = uvs2.length; k < kl; k++) {
-          uvsCopy.push(uvs2[k].clone());
-        }
-        this.faceVertexUvs[i].push(uvsCopy);
-      }
-    }
-  }
-  mergeMesh(mesh) {
-    if (!(mesh && mesh.isMesh)) {
-      console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.", mesh);
-      return;
-    }
-    if (mesh.matrixAutoUpdate)
-      mesh.updateMatrix();
-    this.merge(mesh.geometry, mesh.matrix);
-  }
-  /*
-   * Checks for duplicate vertices with hashmap.
-   * Duplicated vertices are removed
-   * and faces' vertices are updated.
-   */
-  mergeVertices(precisionPoints = 4) {
-    const verticesMap = {};
-    const unique = [], changes = [];
-    const precision = Math.pow(10, precisionPoints);
-    for (let i = 0, il = this.vertices.length; i < il; i++) {
-      const v = this.vertices[i];
-      const key = `${Math.round(v.x * precision)}_${Math.round(v.y * precision)}_${Math.round(v.z * precision)}`;
-      if (verticesMap[key] === void 0) {
-        verticesMap[key] = i;
-        unique.push(this.vertices[i]);
-        changes[i] = unique.length - 1;
-      } else {
-        changes[i] = changes[verticesMap[key]];
-      }
-    }
-    const faceIndicesToRemove = [];
-    for (let i = 0, il = this.faces.length; i < il; i++) {
-      const face = this.faces[i];
-      face.a = changes[face.a];
-      face.b = changes[face.b];
-      face.c = changes[face.c];
-      const indices = [face.a, face.b, face.c];
-      for (let n = 0; n < 3; n++) {
-        if (indices[n] === indices[(n + 1) % 3]) {
-          faceIndicesToRemove.push(i);
-          break;
-        }
-      }
-    }
-    for (let i = faceIndicesToRemove.length - 1; i >= 0; i--) {
-      const idx = faceIndicesToRemove[i];
-      this.faces.splice(idx, 1);
-      for (let j = 0, jl = this.faceVertexUvs.length; j < jl; j++) {
-        this.faceVertexUvs[j].splice(idx, 1);
-      }
-    }
-    const diff = this.vertices.length - unique.length;
-    this.vertices = unique;
-    return diff;
-  }
-  setFromPoints(points) {
-    this.vertices = [];
-    for (let i = 0, l = points.length; i < l; i++) {
-      const point = points[i];
-      this.vertices.push(new three_module.Vector3(point.x, point.y, point.z || 0));
-    }
-    return this;
-  }
-  sortFacesByMaterialIndex() {
-    const faces = this.faces;
-    const length = faces.length;
-    for (let i = 0; i < length; i++) {
-      faces[i]._id = i;
-    }
-    function materialIndexSort(a, b) {
-      return a.materialIndex - b.materialIndex;
-    }
-    faces.sort(materialIndexSort);
-    const uvs1 = this.faceVertexUvs[0];
-    const uvs2 = this.faceVertexUvs[1];
-    let newUvs1, newUvs2;
-    if (uvs1 && uvs1.length === length)
-      newUvs1 = [];
-    if (uvs2 && uvs2.length === length)
-      newUvs2 = [];
-    for (let i = 0; i < length; i++) {
-      const id = faces[i]._id;
-      if (newUvs1)
-        newUvs1.push(uvs1[id]);
-      if (newUvs2)
-        newUvs2.push(uvs2[id]);
-    }
-    if (newUvs1)
-      this.faceVertexUvs[0] = newUvs1;
-    if (newUvs2)
-      this.faceVertexUvs[1] = newUvs2;
-  }
-  toJSON() {
-    const data = {
-      metadata: {
-        version: 4.5,
-        type: "Geometry",
-        generator: "Geometry.toJSON"
-      }
-    };
-    data.uuid = this.uuid;
-    data.type = this.type;
-    if (this.name !== "")
-      data.name = this.name;
-    if (this.parameters !== void 0) {
-      const parameters = this.parameters;
-      for (let key in parameters) {
-        if (parameters[key] !== void 0)
-          data[key] = parameters[key];
-      }
-      return data;
-    }
-    const vertices = [];
-    for (let i = 0; i < this.vertices.length; i++) {
-      const vertex = this.vertices[i];
-      vertices.push(vertex.x, vertex.y, vertex.z);
-    }
-    const faces = [];
-    const normals = [];
-    const normalsHash = {};
-    const colors = [];
-    const colorsHash = {};
-    const uvs = [];
-    const uvsHash = {};
-    for (let i = 0; i < this.faces.length; i++) {
-      const face = this.faces[i];
-      const hasMaterial = true;
-      const hasFaceUv = false;
-      const hasFaceVertexUv = this.faceVertexUvs[0][i] !== void 0;
-      const hasFaceNormal = face.normal.length() > 0;
-      const hasFaceVertexNormal = face.vertexNormals.length > 0;
-      const hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;
-      const hasFaceVertexColor = face.vertexColors.length > 0;
-      let faceType = 0;
-      faceType = setBit(faceType, 0, 0);
-      faceType = setBit(faceType, 1, hasMaterial);
-      faceType = setBit(faceType, 2, hasFaceUv);
-      faceType = setBit(faceType, 3, hasFaceVertexUv);
-      faceType = setBit(faceType, 4, hasFaceNormal);
-      faceType = setBit(faceType, 5, hasFaceVertexNormal);
-      faceType = setBit(faceType, 6, hasFaceColor);
-      faceType = setBit(faceType, 7, hasFaceVertexColor);
-      faces.push(faceType);
-      faces.push(face.a, face.b, face.c);
-      faces.push(face.materialIndex);
-      if (hasFaceVertexUv) {
-        const faceVertexUvs = this.faceVertexUvs[0][i];
-        faces.push(getUvIndex(faceVertexUvs[0]), getUvIndex(faceVertexUvs[1]), getUvIndex(faceVertexUvs[2]));
-      }
-      if (hasFaceNormal) {
-        faces.push(getNormalIndex(face.normal));
-      }
-      if (hasFaceVertexNormal) {
-        const vertexNormals = face.vertexNormals;
-        faces.push(getNormalIndex(vertexNormals[0]), getNormalIndex(vertexNormals[1]), getNormalIndex(vertexNormals[2]));
-      }
-      if (hasFaceColor) {
-        faces.push(getColorIndex(face.color));
-      }
-      if (hasFaceVertexColor) {
-        const vertexColors = face.vertexColors;
-        faces.push(getColorIndex(vertexColors[0]), getColorIndex(vertexColors[1]), getColorIndex(vertexColors[2]));
-      }
-    }
-    function setBit(value, position, enabled) {
-      return enabled ? value | 1 << position : value & ~(1 << position);
-    }
-    function getNormalIndex(normal) {
-      const hash = normal.x.toString() + normal.y.toString() + normal.z.toString();
-      if (normalsHash[hash] !== void 0) {
-        return normalsHash[hash];
-      }
-      normalsHash[hash] = normals.length / 3;
-      normals.push(normal.x, normal.y, normal.z);
-      return normalsHash[hash];
-    }
-    function getColorIndex(color) {
-      const hash = color.r.toString() + color.g.toString() + color.b.toString();
-      if (colorsHash[hash] !== void 0) {
-        return colorsHash[hash];
-      }
-      colorsHash[hash] = colors.length;
-      colors.push(color.getHex());
-      return colorsHash[hash];
-    }
-    function getUvIndex(uv) {
-      const hash = uv.x.toString() + uv.y.toString();
-      if (uvsHash[hash] !== void 0) {
-        return uvsHash[hash];
-      }
-      uvsHash[hash] = uvs.length / 2;
-      uvs.push(uv.x, uv.y);
-      return uvsHash[hash];
-    }
-    data.data = {};
-    data.data.vertices = vertices;
-    data.data.normals = normals;
-    if (colors.length > 0)
-      data.data.colors = colors;
-    if (uvs.length > 0)
-      data.data.uvs = [uvs];
-    data.data.faces = faces;
-    return data;
-  }
-  clone() {
-    return new Geometry().copy(this);
-  }
-  copy(source) {
-    this.vertices = [];
-    this.colors = [];
-    this.faces = [];
-    this.faceVertexUvs = [[]];
-    this.morphTargets = [];
-    this.morphNormals = [];
-    this.skinWeights = [];
-    this.skinIndices = [];
-    this.lineDistances = [];
-    this.boundingBox = null;
-    this.boundingSphere = null;
-    this.name = source.name;
-    const vertices = source.vertices;
-    for (let i = 0, il = vertices.length; i < il; i++) {
-      this.vertices.push(vertices[i].clone());
-    }
-    const colors = source.colors;
-    for (let i = 0, il = colors.length; i < il; i++) {
-      this.colors.push(colors[i].clone());
-    }
-    const faces = source.faces;
-    for (let i = 0, il = faces.length; i < il; i++) {
-      this.faces.push(faces[i].clone());
-    }
-    for (let i = 0, il = source.faceVertexUvs.length; i < il; i++) {
-      const faceVertexUvs = source.faceVertexUvs[i];
-      if (this.faceVertexUvs[i] === void 0) {
-        this.faceVertexUvs[i] = [];
-      }
-      for (let j = 0, jl = faceVertexUvs.length; j < jl; j++) {
-        const uvs = faceVertexUvs[j], uvsCopy = [];
-        for (let k = 0, kl = uvs.length; k < kl; k++) {
-          const uv = uvs[k];
-          uvsCopy.push(uv.clone());
-        }
-        this.faceVertexUvs[i].push(uvsCopy);
-      }
-    }
-    const morphTargets = source.morphTargets;
-    for (let i = 0, il = morphTargets.length; i < il; i++) {
-      const morphTarget = {};
-      morphTarget.name = morphTargets[i].name;
-      if (morphTargets[i].vertices !== void 0) {
-        morphTarget.vertices = [];
-        for (let j = 0, jl = morphTargets[i].vertices.length; j < jl; j++) {
-          morphTarget.vertices.push(morphTargets[i].vertices[j].clone());
-        }
-      }
-      if (morphTargets[i].normals !== void 0) {
-        morphTarget.normals = [];
-        for (let j = 0, jl = morphTargets[i].normals.length; j < jl; j++) {
-          morphTarget.normals.push(morphTargets[i].normals[j].clone());
-        }
-      }
-      this.morphTargets.push(morphTarget);
-    }
-    const morphNormals = source.morphNormals;
-    for (let i = 0, il = morphNormals.length; i < il; i++) {
-      const morphNormal = {};
-      if (morphNormals[i].vertexNormals !== void 0) {
-        morphNormal.vertexNormals = [];
-        for (let j = 0, jl = morphNormals[i].vertexNormals.length; j < jl; j++) {
-          const srcVertexNormal = morphNormals[i].vertexNormals[j];
-          const destVertexNormal = {};
-          destVertexNormal.a = srcVertexNormal.a.clone();
-          destVertexNormal.b = srcVertexNormal.b.clone();
-          destVertexNormal.c = srcVertexNormal.c.clone();
-          morphNormal.vertexNormals.push(destVertexNormal);
-        }
-      }
-      if (morphNormals[i].faceNormals !== void 0) {
-        morphNormal.faceNormals = [];
-        for (let j = 0, jl = morphNormals[i].faceNormals.length; j < jl; j++) {
-          morphNormal.faceNormals.push(morphNormals[i].faceNormals[j].clone());
-        }
-      }
-      this.morphNormals.push(morphNormal);
-    }
-    const skinWeights = source.skinWeights;
-    for (let i = 0, il = skinWeights.length; i < il; i++) {
-      this.skinWeights.push(skinWeights[i].clone());
-    }
-    const skinIndices = source.skinIndices;
-    for (let i = 0, il = skinIndices.length; i < il; i++) {
-      this.skinIndices.push(skinIndices[i].clone());
-    }
-    const lineDistances = source.lineDistances;
-    for (let i = 0, il = lineDistances.length; i < il; i++) {
-      this.lineDistances.push(lineDistances[i]);
-    }
-    const boundingBox = source.boundingBox;
-    if (boundingBox !== null) {
-      this.boundingBox = boundingBox.clone();
-    }
-    const boundingSphere = source.boundingSphere;
-    if (boundingSphere !== null) {
-      this.boundingSphere = boundingSphere.clone();
-    }
-    this.elementsNeedUpdate = source.elementsNeedUpdate;
-    this.verticesNeedUpdate = source.verticesNeedUpdate;
-    this.uvsNeedUpdate = source.uvsNeedUpdate;
-    this.normalsNeedUpdate = source.normalsNeedUpdate;
-    this.colorsNeedUpdate = source.colorsNeedUpdate;
-    this.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;
-    this.groupsNeedUpdate = source.groupsNeedUpdate;
-    return this;
-  }
-  toBufferGeometry() {
-    const geometry = new DirectGeometry().fromGeometry(this);
-    const buffergeometry = new three_module.BufferGeometry();
-    const positions = new Float32Array(geometry.vertices.length * 3);
-    buffergeometry.setAttribute("position", new three_module.BufferAttribute(positions, 3).copyVector3sArray(geometry.vertices));
-    if (geometry.normals.length > 0) {
-      const normals = new Float32Array(geometry.normals.length * 3);
-      buffergeometry.setAttribute("normal", new three_module.BufferAttribute(normals, 3).copyVector3sArray(geometry.normals));
-    }
-    if (geometry.colors.length > 0) {
-      const colors = new Float32Array(geometry.colors.length * 3);
-      buffergeometry.setAttribute("color", new three_module.BufferAttribute(colors, 3).copyColorsArray(geometry.colors));
-    }
-    if (geometry.uvs.length > 0) {
-      const uvs = new Float32Array(geometry.uvs.length * 2);
-      buffergeometry.setAttribute("uv", new three_module.BufferAttribute(uvs, 2).copyVector2sArray(geometry.uvs));
-    }
-    if (geometry.uvs2.length > 0) {
-      const uvs2 = new Float32Array(geometry.uvs2.length * 2);
-      buffergeometry.setAttribute("uv2", new three_module.BufferAttribute(uvs2, 2).copyVector2sArray(geometry.uvs2));
-    }
-    buffergeometry.groups = geometry.groups;
-    for (let name in geometry.morphTargets) {
-      const array = [];
-      const morphTargets = geometry.morphTargets[name];
-      for (let i = 0, l = morphTargets.length; i < l; i++) {
-        const morphTarget = morphTargets[i];
-        const attribute = new three_module.Float32BufferAttribute(morphTarget.data.length * 3, 3);
-        attribute.name = morphTarget.name;
-        array.push(attribute.copyVector3sArray(morphTarget.data));
-      }
-      buffergeometry.morphAttributes[name] = array;
-    }
-    if (geometry.skinIndices.length > 0) {
-      const skinIndices = new three_module.Float32BufferAttribute(geometry.skinIndices.length * 4, 4);
-      buffergeometry.setAttribute("skinIndex", skinIndices.copyVector4sArray(geometry.skinIndices));
-    }
-    if (geometry.skinWeights.length > 0) {
-      const skinWeights = new three_module.Float32BufferAttribute(geometry.skinWeights.length * 4, 4);
-      buffergeometry.setAttribute("skinWeight", skinWeights.copyVector4sArray(geometry.skinWeights));
-    }
-    if (geometry.boundingSphere !== null) {
-      buffergeometry.boundingSphere = geometry.boundingSphere.clone();
-    }
-    if (geometry.boundingBox !== null) {
-      buffergeometry.boundingBox = geometry.boundingBox.clone();
-    }
-    return buffergeometry;
-  }
-  computeTangents() {
-    console.error("THREE.Geometry: .computeTangents() has been removed.");
-  }
-  computeLineDistances() {
-    console.error(
-      "THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead."
-    );
-  }
-  applyMatrix(matrix) {
-    console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().");
-    return this.applyMatrix4(matrix);
-  }
-  dispose() {
-    this.dispatchEvent({ type: "dispose" });
-  }
-}
-class DirectGeometry {
-  constructor() {
-    this.vertices = [];
-    this.normals = [];
-    this.colors = [];
-    this.uvs = [];
-    this.uvs2 = [];
-    this.groups = [];
-    this.morphTargets = {};
-    this.skinWeights = [];
-    this.skinIndices = [];
-    this.boundingBox = null;
-    this.boundingSphere = null;
-    this.verticesNeedUpdate = false;
-    this.normalsNeedUpdate = false;
-    this.colorsNeedUpdate = false;
-    this.uvsNeedUpdate = false;
-    this.groupsNeedUpdate = false;
-  }
-  computeGroups(geometry) {
-    const groups = [];
-    let group, i;
-    let materialIndex = void 0;
-    const faces = geometry.faces;
-    for (i = 0; i < faces.length; i++) {
-      const face = faces[i];
-      if (face.materialIndex !== materialIndex) {
-        materialIndex = face.materialIndex;
-        if (group !== void 0) {
-          group.count = i * 3 - group.start;
-          groups.push(group);
-        }
-        group = {
-          start: i * 3,
-          materialIndex
-        };
-      }
-    }
-    if (group !== void 0) {
-      group.count = i * 3 - group.start;
-      groups.push(group);
-    }
-    this.groups = groups;
-  }
-  fromGeometry(geometry) {
-    const faces = geometry.faces;
-    const vertices = geometry.vertices;
-    const faceVertexUvs = geometry.faceVertexUvs;
-    const hasFaceVertexUv = faceVertexUvs[0] && faceVertexUvs[0].length > 0;
-    const hasFaceVertexUv2 = faceVertexUvs[1] && faceVertexUvs[1].length > 0;
-    const morphTargets = geometry.morphTargets;
-    const morphTargetsLength = morphTargets.length;
-    let morphTargetsPosition;
-    if (morphTargetsLength > 0) {
-      morphTargetsPosition = [];
-      for (let i = 0; i < morphTargetsLength; i++) {
-        morphTargetsPosition[i] = {
-          name: morphTargets[i].name,
-          data: []
-        };
-      }
-      this.morphTargets.position = morphTargetsPosition;
-    }
-    const morphNormals = geometry.morphNormals;
-    const morphNormalsLength = morphNormals.length;
-    let morphTargetsNormal;
-    if (morphNormalsLength > 0) {
-      morphTargetsNormal = [];
-      for (let i = 0; i < morphNormalsLength; i++) {
-        morphTargetsNormal[i] = {
-          name: morphNormals[i].name,
-          data: []
-        };
-      }
-      this.morphTargets.normal = morphTargetsNormal;
-    }
-    const skinIndices = geometry.skinIndices;
-    const skinWeights = geometry.skinWeights;
-    const hasSkinIndices = skinIndices.length === vertices.length;
-    const hasSkinWeights = skinWeights.length === vertices.length;
-    if (vertices.length > 0 && faces.length === 0) {
-      console.error("THREE.DirectGeometry: Faceless geometries are not supported.");
-    }
-    for (let i = 0; i < faces.length; i++) {
-      const face = faces[i];
-      this.vertices.push(vertices[face.a], vertices[face.b], vertices[face.c]);
-      const vertexNormals = face.vertexNormals;
-      if (vertexNormals.length === 3) {
-        this.normals.push(vertexNormals[0], vertexNormals[1], vertexNormals[2]);
-      } else {
-        const normal = face.normal;
-        this.normals.push(normal, normal, normal);
-      }
-      const vertexColors = face.vertexColors;
-      if (vertexColors.length === 3) {
-        this.colors.push(vertexColors[0], vertexColors[1], vertexColors[2]);
-      } else {
-        const color = face.color;
-        this.colors.push(color, color, color);
-      }
-      if (hasFaceVertexUv === true) {
-        const vertexUvs = faceVertexUvs[0][i];
-        if (vertexUvs !== void 0) {
-          this.uvs.push(vertexUvs[0], vertexUvs[1], vertexUvs[2]);
-        } else {
-          console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ", i);
-          this.uvs.push(new three_module.Vector2(), new three_module.Vector2(), new three_module.Vector2());
-        }
-      }
-      if (hasFaceVertexUv2 === true) {
-        const vertexUvs = faceVertexUvs[1][i];
-        if (vertexUvs !== void 0) {
-          this.uvs2.push(vertexUvs[0], vertexUvs[1], vertexUvs[2]);
-        } else {
-          console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ", i);
-          this.uvs2.push(new three_module.Vector2(), new three_module.Vector2(), new three_module.Vector2());
-        }
-      }
-      for (let j = 0; j < morphTargetsLength; j++) {
-        const morphTarget = morphTargets[j].vertices;
-        morphTargetsPosition[j].data.push(morphTarget[face.a], morphTarget[face.b], morphTarget[face.c]);
-      }
-      for (let j = 0; j < morphNormalsLength; j++) {
-        const morphNormal = morphNormals[j].vertexNormals[i];
-        morphTargetsNormal[j].data.push(morphNormal.a, morphNormal.b, morphNormal.c);
-      }
-      if (hasSkinIndices) {
-        this.skinIndices.push(skinIndices[face.a], skinIndices[face.b], skinIndices[face.c]);
-      }
-      if (hasSkinWeights) {
-        this.skinWeights.push(skinWeights[face.a], skinWeights[face.b], skinWeights[face.c]);
-      }
-    }
-    this.computeGroups(geometry);
-    this.verticesNeedUpdate = geometry.verticesNeedUpdate;
-    this.normalsNeedUpdate = geometry.normalsNeedUpdate;
-    this.colorsNeedUpdate = geometry.colorsNeedUpdate;
-    this.uvsNeedUpdate = geometry.uvsNeedUpdate;
-    this.groupsNeedUpdate = geometry.groupsNeedUpdate;
-    if (geometry.boundingSphere !== null) {
-      this.boundingSphere = geometry.boundingSphere.clone();
-    }
-    if (geometry.boundingBox !== null) {
-      this.boundingBox = geometry.boundingBox.clone();
-    }
-    return this;
-  }
-}
-class Face3 {
-  constructor(a, b, c, normal, color, materialIndex = 0) {
-    this.a = a;
-    this.b = b;
-    this.c = c;
-    this.normal = normal && normal.isVector3 ? normal : new three_module.Vector3();
-    this.vertexNormals = Array.isArray(normal) ? normal : [];
-    this.color = color && color.isColor ? color : new three_module.Color();
-    this.vertexColors = Array.isArray(color) ? color : [];
-    this.materialIndex = materialIndex;
-  }
-  clone() {
-    return new this.constructor().copy(this);
-  }
-  copy(source) {
-    this.a = source.a;
-    this.b = source.b;
-    this.c = source.c;
-    this.normal.copy(source.normal);
-    this.color.copy(source.color);
-    this.materialIndex = source.materialIndex;
-    for (let i = 0, il = source.vertexNormals.length; i < il; i++) {
-      this.vertexNormals[i] = source.vertexNormals[i].clone();
-    }
-    for (let i = 0, il = source.vertexColors.length; i < il; i++) {
-      this.vertexColors[i] = source.vertexColors[i].clone();
-    }
-    return this;
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/libs/MeshoptDecoder.js
-var MeshoptDecoder = __webpack_require__(46295);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/index.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/***/ }),
-
-/***/ 31480:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "M": () => (/* binding */ SelectionBox)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-
-const frustum = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Frustum();
-const center = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const tmpPoint = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const vecNear = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const vecTopLeft = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const vecTopRight = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const vecDownRight = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const vecDownLeft = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const vecFarTopLeft = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const vecFarTopRight = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const vecFarDownRight = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const vecFarDownLeft = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const vectemp1 = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const vectemp2 = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const vectemp3 = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-class SelectionBox {
-  constructor(camera, scene, deep) {
-    this.camera = camera;
-    this.scene = scene;
-    this.startPoint = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    this.endPoint = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    this.collection = [];
-    this.deep = deep || Number.MAX_VALUE;
-  }
-  select(startPoint, endPoint) {
-    this.startPoint = startPoint || this.startPoint;
-    this.endPoint = endPoint || this.endPoint;
-    this.collection = [];
-    this.updateFrustum(this.startPoint, this.endPoint);
-    this.searchChildInFrustum(frustum, this.scene);
-    return this.collection;
-  }
-  updateFrustum(startPoint, endPoint) {
-    startPoint = startPoint || this.startPoint;
-    endPoint = endPoint || this.endPoint;
-    if (startPoint.x === endPoint.x) {
-      endPoint.x += Number.EPSILON;
-    }
-    if (startPoint.y === endPoint.y) {
-      endPoint.y += Number.EPSILON;
-    }
-    this.camera.updateProjectionMatrix();
-    this.camera.updateMatrixWorld();
-    if (this.camera.isPerspectiveCamera) {
-      tmpPoint.copy(startPoint);
-      tmpPoint.x = Math.min(startPoint.x, endPoint.x);
-      tmpPoint.y = Math.max(startPoint.y, endPoint.y);
-      endPoint.x = Math.max(startPoint.x, endPoint.x);
-      endPoint.y = Math.min(startPoint.y, endPoint.y);
-      vecNear.setFromMatrixPosition(this.camera.matrixWorld);
-      vecTopLeft.copy(tmpPoint);
-      vecTopRight.set(endPoint.x, tmpPoint.y, 0);
-      vecDownRight.copy(endPoint);
-      vecDownLeft.set(tmpPoint.x, endPoint.y, 0);
-      vecTopLeft.unproject(this.camera);
-      vecTopRight.unproject(this.camera);
-      vecDownRight.unproject(this.camera);
-      vecDownLeft.unproject(this.camera);
-      vectemp1.copy(vecTopLeft).sub(vecNear);
-      vectemp2.copy(vecTopRight).sub(vecNear);
-      vectemp3.copy(vecDownRight).sub(vecNear);
-      vectemp1.normalize();
-      vectemp2.normalize();
-      vectemp3.normalize();
-      vectemp1.multiplyScalar(this.deep);
-      vectemp2.multiplyScalar(this.deep);
-      vectemp3.multiplyScalar(this.deep);
-      vectemp1.add(vecNear);
-      vectemp2.add(vecNear);
-      vectemp3.add(vecNear);
-      var planes = frustum.planes;
-      planes[0].setFromCoplanarPoints(vecNear, vecTopLeft, vecTopRight);
-      planes[1].setFromCoplanarPoints(vecNear, vecTopRight, vecDownRight);
-      planes[2].setFromCoplanarPoints(vecDownRight, vecDownLeft, vecNear);
-      planes[3].setFromCoplanarPoints(vecDownLeft, vecTopLeft, vecNear);
-      planes[4].setFromCoplanarPoints(vecTopRight, vecDownRight, vecDownLeft);
-      planes[5].setFromCoplanarPoints(vectemp3, vectemp2, vectemp1);
-      planes[5].normal.multiplyScalar(-1);
-    } else if (this.camera.isOrthographicCamera) {
-      const left = Math.min(startPoint.x, endPoint.x);
-      const top = Math.max(startPoint.y, endPoint.y);
-      const right = Math.max(startPoint.x, endPoint.x);
-      const down = Math.min(startPoint.y, endPoint.y);
-      vecTopLeft.set(left, top, -1);
-      vecTopRight.set(right, top, -1);
-      vecDownRight.set(right, down, -1);
-      vecDownLeft.set(left, down, -1);
-      vecFarTopLeft.set(left, top, 1);
-      vecFarTopRight.set(right, top, 1);
-      vecFarDownRight.set(right, down, 1);
-      vecFarDownLeft.set(left, down, 1);
-      vecTopLeft.unproject(this.camera);
-      vecTopRight.unproject(this.camera);
-      vecDownRight.unproject(this.camera);
-      vecDownLeft.unproject(this.camera);
-      vecFarTopLeft.unproject(this.camera);
-      vecFarTopRight.unproject(this.camera);
-      vecFarDownRight.unproject(this.camera);
-      vecFarDownLeft.unproject(this.camera);
-      var planes = frustum.planes;
-      planes[0].setFromCoplanarPoints(vecTopLeft, vecFarTopLeft, vecFarTopRight);
-      planes[1].setFromCoplanarPoints(vecTopRight, vecFarTopRight, vecFarDownRight);
-      planes[2].setFromCoplanarPoints(vecFarDownRight, vecFarDownLeft, vecDownLeft);
-      planes[3].setFromCoplanarPoints(vecFarDownLeft, vecFarTopLeft, vecTopLeft);
-      planes[4].setFromCoplanarPoints(vecTopRight, vecDownRight, vecDownLeft);
-      planes[5].setFromCoplanarPoints(vecFarDownRight, vecFarTopRight, vecFarTopLeft);
-      planes[5].normal.multiplyScalar(-1);
-    } else {
-      console.error("THREE.SelectionBox: Unsupported camera type.");
-    }
-  }
-  searchChildInFrustum(frustum2, object) {
-    if (object.isMesh || object.isLine || object.isPoints) {
-      if (object.material !== void 0) {
-        if (object.geometry.boundingSphere === null)
-          object.geometry.computeBoundingSphere();
-        center.copy(object.geometry.boundingSphere.center);
-        center.applyMatrix4(object.matrixWorld);
-        if (frustum2.containsPoint(center)) {
-          this.collection.push(object);
-        }
-      }
-    }
-    if (object.children.length > 0) {
-      for (let x = 0; x < object.children.length; x++) {
-        this.searchChildInFrustum(frustum2, object.children[x]);
-      }
-    }
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 46295:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "z": () => (/* binding */ MeshoptDecoder)
-/* harmony export */ });
-let generated;
-const MeshoptDecoder = () => {
-  if (generated)
-    return generated;
-  const wasm_base = "B9h9z9tFBBBF8fL9gBB9gLaaaaaFa9gEaaaB9gFaFa9gEaaaFaEMcBFFFGGGEIIILF9wFFFLEFBFKNFaFCx/IFMO/LFVK9tv9t9vq95GBt9f9f939h9z9t9f9j9h9s9s9f9jW9vq9zBBp9tv9z9o9v9wW9f9kv9j9v9kv9WvqWv94h919m9mvqBF8Z9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv94h919m9mvqBGy9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv949TvZ91v9u9jvBEn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9P9jWBIi9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9R919hWBLn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9F949wBKI9z9iqlBOc+x8ycGBM/qQFTa8jUUUUBCU/EBlHL8kUUUUBC9+RKGXAGCFJAI9LQBCaRKAE2BBC+gF9HQBALAEAIJHOAGlAGTkUUUBRNCUoBAG9uC/wgBZHKCUGAKCUG9JyRVAECFJRICBRcGXEXAcAF9PQFAVAFAclAcAVJAF9JyRMGXGXAG9FQBAMCbJHKC9wZRSAKCIrCEJCGrRQANCUGJRfCBRbAIRTEXGXAOATlAQ9PQBCBRISEMATAQJRIGXAS9FQBCBRtCBREEXGXAOAIlCi9PQBCBRISLMANCU/CBJAEJRKGXGXGXGXGXATAECKrJ2BBAtCKZrCEZfIBFGEBMAKhB83EBAKCNJhB83EBSEMAKAI2BIAI2BBHmCKrHYAYCE6HYy86BBAKCFJAICIJAYJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCGJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCEJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCIJAYAmJHY2BBAI2BFHmCKrHPAPCE6HPy86BBAKCLJAYAPJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCKJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCOJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCNJAYAmJHY2BBAI2BGHmCKrHPAPCE6HPy86BBAKCVJAYAPJHY2BBAmCIrCEZHPAPCE6HPy86BBAKCcJAYAPJHY2BBAmCGrCEZHPAPCE6HPy86BBAKCMJAYAPJHY2BBAmCEZHmAmCE6Hmy86BBAKCSJAYAmJHm2BBAI2BEHICKrHYAYCE6HYy86BBAKCQJAmAYJHm2BBAICIrCEZHYAYCE6HYy86BBAKCfJAmAYJHm2BBAICGrCEZHYAYCE6HYy86BBAKCbJAmAYJHK2BBAICEZHIAICE6HIy86BBAKAIJRISGMAKAI2BNAI2BBHmCIrHYAYCb6HYy86BBAKCFJAICNJAYJHY2BBAmCbZHmAmCb6Hmy86BBAKCGJAYAmJHm2BBAI2BFHYCIrHPAPCb6HPy86BBAKCEJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCIJAmAYJHm2BBAI2BGHYCIrHPAPCb6HPy86BBAKCLJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCKJAmAYJHm2BBAI2BEHYCIrHPAPCb6HPy86BBAKCOJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCNJAmAYJHm2BBAI2BIHYCIrHPAPCb6HPy86BBAKCVJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCcJAmAYJHm2BBAI2BLHYCIrHPAPCb6HPy86BBAKCMJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCSJAmAYJHm2BBAI2BKHYCIrHPAPCb6HPy86BBAKCQJAmAPJHm2BBAYCbZHYAYCb6HYy86BBAKCfJAmAYJHm2BBAI2BOHICIrHYAYCb6HYy86BBAKCbJAmAYJHK2BBAICbZHIAICb6HIy86BBAKAIJRISFMAKAI8pBB83BBAKCNJAICNJ8pBB83BBAICTJRIMAtCGJRtAECTJHEAS9JQBMMGXAIQBCBRISEMGXAM9FQBANAbJ2BBRtCBRKAfREEXAEANCU/CBJAKJ2BBHTCFrCBATCFZl9zAtJHt86BBAEAGJREAKCFJHKAM9HQBMMAfCFJRfAIRTAbCFJHbAG9HQBMMABAcAG9sJANCUGJAMAG9sTkUUUBpANANCUGJAMCaJAG9sJAGTkUUUBpMAMCBAIyAcJRcAIQBMC9+RKSFMCBC99AOAIlAGCAAGCA9Ly6yRKMALCU/EBJ8kUUUUBAKM+OmFTa8jUUUUBCoFlHL8kUUUUBC9+RKGXAFCE9uHOCtJAI9LQBCaRKAE2BBHNC/wFZC/gF9HQBANCbZHVCF9LQBALCoBJCgFCUFT+JUUUBpALC84Jha83EBALC8wJha83EBALC8oJha83EBALCAJha83EBALCiJha83EBALCTJha83EBALha83ENALha83EBAEAIJC9wJRcAECFJHNAOJRMGXAF9FQBCQCbAVCF6yRSABRECBRVCBRQCBRfCBRICBRKEXGXAMAcuQBC9+RKSEMGXGXAN2BBHOC/vF9LQBALCoBJAOCIrCa9zAKJCbZCEWJHb8oGIRTAb8oGBRtGXAOCbZHbAS9PQBALAOCa9zAIJCbZCGWJ8oGBAVAbyROAb9FRbGXGXAGCG9HQBABAt87FBABCIJAO87FBABCGJAT87FBSFMAEAtjGBAECNJAOjGBAECIJATjGBMAVAbJRVALCoBJAKCEWJHmAOjGBAmATjGIALAICGWJAOjGBALCoBJAKCFJCbZHKCEWJHTAtjGBATAOjGIAIAbJRIAKCFJRKSGMGXGXAbCb6QBAQAbJAbC989zJCFJRQSFMAM1BBHbCgFZROGXGXAbCa9MQBAMCFJRMSFMAM1BFHbCgBZCOWAOCgBZqROGXAbCa9MQBAMCGJRMSFMAM1BGHbCgBZCfWAOqROGXAbCa9MQBAMCEJRMSFMAM1BEHbCgBZCdWAOqROGXAbCa9MQBAMCIJRMSFMAM2BIC8cWAOqROAMCLJRMMAOCFrCBAOCFZl9zAQJRQMGXGXAGCG9HQBABAt87FBABCIJAQ87FBABCGJAT87FBSFMAEAtjGBAECNJAQjGBAECIJATjGBMALCoBJAKCEWJHOAQjGBAOATjGIALAICGWJAQjGBALCoBJAKCFJCbZHKCEWJHOAtjGBAOAQjGIAICFJRIAKCFJRKSFMGXAOCDF9LQBALAIAcAOCbZJ2BBHbCIrHTlCbZCGWJ8oGBAVCFJHtATyROALAIAblCbZCGWJ8oGBAtAT9FHmJHtAbCbZHTyRbAT9FRTGXGXAGCG9HQBABAV87FBABCIJAb87FBABCGJAO87FBSFMAEAVjGBAECNJAbjGBAECIJAOjGBMALAICGWJAVjGBALCoBJAKCEWJHYAOjGBAYAVjGIALAICFJHICbZCGWJAOjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAIAmJCbZHICGWJAbjGBALCoBJAKCGJCbZHKCEWJHOAVjGBAOAbjGIAKCFJRKAIATJRIAtATJRVSFMAVCBAM2BBHYyHTAOC/+F6HPJROAYCbZRtGXGXAYCIrHmQBAOCFJRbSFMAORbALAIAmlCbZCGWJ8oGBROMGXGXAtQBAbCFJRVSFMAbRVALAIAYlCbZCGWJ8oGBRbMGXGXAP9FQBAMCFJRYSFMAM1BFHYCgFZRTGXGXAYCa9MQBAMCGJRYSFMAM1BGHYCgBZCOWATCgBZqRTGXAYCa9MQBAMCEJRYSFMAM1BEHYCgBZCfWATqRTGXAYCa9MQBAMCIJRYSFMAM1BIHYCgBZCdWATqRTGXAYCa9MQBAMCLJRYSFMAMCKJRYAM2BLC8cWATqRTMATCFrCBATCFZl9zAQJHQRTMGXGXAmCb6QBAYRPSFMAY1BBHMCgFZROGXGXAMCa9MQBAYCFJRPSFMAY1BFHMCgBZCOWAOCgBZqROGXAMCa9MQBAYCGJRPSFMAY1BGHMCgBZCfWAOqROGXAMCa9MQBAYCEJRPSFMAY1BEHMCgBZCdWAOqROGXAMCa9MQBAYCIJRPSFMAYCLJRPAY2BIC8cWAOqROMAOCFrCBAOCFZl9zAQJHQROMGXGXAtCb6QBAPRMSFMAP1BBHMCgFZRbGXGXAMCa9MQBAPCFJRMSFMAP1BFHMCgBZCOWAbCgBZqRbGXAMCa9MQBAPCGJRMSFMAP1BGHMCgBZCfWAbqRbGXAMCa9MQBAPCEJRMSFMAP1BEHMCgBZCdWAbqRbGXAMCa9MQBAPCIJRMSFMAPCLJRMAP2BIC8cWAbqRbMAbCFrCBAbCFZl9zAQJHQRbMGXGXAGCG9HQBABAT87FBABCIJAb87FBABCGJAO87FBSFMAEATjGBAECNJAbjGBAECIJAOjGBMALCoBJAKCEWJHYAOjGBAYATjGIALAICGWJATjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAICFJHICbZCGWJAOjGBALCoBJAKCGJCbZCEWJHOATjGBAOAbjGIALAIAm9FAmCb6qJHICbZCGWJAbjGBAIAt9FAtCb6qJRIAKCEJRKMANCFJRNABCKJRBAECSJREAKCbZRKAICbZRIAfCEJHfAF9JQBMMCBC99AMAc6yRKMALCoFJ8kUUUUBAKM/tIFGa8jUUUUBCTlRLC9+RKGXAFCLJAI9LQBCaRKAE2BBC/+FZC/QF9HQBALhB83ENAECFJRKAEAIJC98JREGXAF9FQBGXAGCG6QBEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMALCNJAICFZCGWqHGAICGrCBAICFrCFZl9zAG8oGBJHIjGBABAIjGBABCIJRBAFCaJHFQBSGMMEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMABAICGrCBAICFrCFZl9zALCNJAICFZCGWqHI8oGBJHG87FBAIAGjGBABCGJRBAFCaJHFQBMMCBC99AKAE6yRKMAKM+lLKFaF99GaG99FaG99GXGXAGCI9HQBAF9FQFEXGXGX9DBBB8/9DBBB+/ABCGJHG1BB+yAB1BBHE+yHI+L+TABCFJHL1BBHK+yHO+L+THN9DBBBB9gHVyAN9DBB/+hANAN+U9DBBBBANAVyHcAc+MHMAECa3yAI+SHIAI+UAcAMAKCa3yAO+SHcAc+U+S+S+R+VHO+U+SHN+L9DBBB9P9d9FQBAN+oRESFMCUUUU94REMAGAE86BBGXGX9DBBB8/9DBBB+/Ac9DBBBB9gyAcAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMALAG86BBGXGX9DBBB8/9DBBB+/AI9DBBBB9gyAIAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMABAG86BBABCIJRBAFCaJHFQBSGMMAF9FQBEXGXGX9DBBB8/9DBBB+/ABCIJHG8uFB+yAB8uFBHE+yHI+L+TABCGJHL8uFBHK+yHO+L+THN9DBBBB9gHVyAN9DB/+g6ANAN+U9DBBBBANAVyHcAc+MHMAECa3yAI+SHIAI+UAcAMAKCa3yAO+SHcAc+U+S+S+R+VHO+U+SHN+L9DBBB9P9d9FQBAN+oRESFMCUUUU94REMAGAE87FBGXGX9DBBB8/9DBBB+/Ac9DBBBB9gyAcAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMALAG87FBGXGX9DBBB8/9DBBB+/AI9DBBBB9gyAIAO+U+SHN+L9DBBB9P9d9FQBAN+oRGSFMCUUUU94RGMABAG87FBABCNJRBAFCaJHFQBMMM/SEIEaE99EaF99GXAF9FQBCBREABRIEXGXGX9D/zI818/AICKJ8uFBHLCEq+y+VHKAI8uFB+y+UHO9DB/+g6+U9DBBB8/9DBBB+/AO9DBBBB9gy+SHN+L9DBBB9P9d9FQBAN+oRVSFMCUUUU94RVMAICIJ8uFBRcAICGJ8uFBRMABALCFJCEZAEqCFWJAV87FBGXGXAKAM+y+UHN9DB/+g6+U9DBBB8/9DBBB+/AN9DBBBB9gy+SHS+L9DBBB9P9d9FQBAS+oRMSFMCUUUU94RMMABALCGJCEZAEqCFWJAM87FBGXGXAKAc+y+UHK9DB/+g6+U9DBBB8/9DBBB+/AK9DBBBB9gy+SHS+L9DBBB9P9d9FQBAS+oRcSFMCUUUU94RcMABALCaJCEZAEqCFWJAc87FBGXGX9DBBU8/AOAO+U+TANAN+U+TAKAK+U+THO9DBBBBAO9DBBBB9gy+R9DB/+g6+U9DBBB8/+SHO+L9DBBB9P9d9FQBAO+oRcSFMCUUUU94RcMABALCEZAEqCFWJAc87FBAICNJRIAECIJREAFCaJHFQBMMM9JBGXAGCGrAF9sHF9FQBEXABAB8oGBHGCNWCN91+yAGCi91CnWCUUU/8EJ+++U84GBABCIJRBAFCaJHFQBMMM9TFEaCBCB8oGUkUUBHFABCEJC98ZJHBjGUkUUBGXGXAB8/BCTWHGuQBCaREABAGlCggEJCTrXBCa6QFMAFREMAEM/lFFFaGXGXAFABqCEZ9FQBABRESFMGXGXAGCT9PQBABRESFMABREEXAEAF8oGBjGBAECIJAFCIJ8oGBjGBAECNJAFCNJ8oGBjGBAECSJAFCSJ8oGBjGBAECTJREAFCTJRFAGC9wJHGCb9LQBMMAGCI9JQBEXAEAF8oGBjGBAFCIJRFAECIJREAGC98JHGCE9LQBMMGXAG9FQBEXAEAF2BB86BBAECFJREAFCFJRFAGCaJHGQBMMABMoFFGaGXGXABCEZ9FQBABRESFMAFCgFZC+BwsN9sRIGXGXAGCT9PQBABRESFMABREEXAEAIjGBAECSJAIjGBAECNJAIjGBAECIJAIjGBAECTJREAGC9wJHGCb9LQBMMAGCI9JQBEXAEAIjGBAECIJREAGC98JHGCE9LQBMMGXAG9FQBEXAEAF86BBAECFJREAGCaJHGQBMMABMMMFBCUNMIT9kBB";
-  const wasm_simd = "B9h9z9tFBBBFiI9gBB9gLaaaaaFa9gEaaaB9gFaFaEMcBBFBFFGGGEILF9wFFFLEFBFKNFaFCx/aFMO/LFVK9tv9t9vq95GBt9f9f939h9z9t9f9j9h9s9s9f9jW9vq9zBBp9tv9z9o9v9wW9f9kv9j9v9kv9WvqWv94h919m9mvqBG8Z9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv94h919m9mvqBIy9tv9z9o9v9wW9f9kv9j9v9kv9J9u9kv949TvZ91v9u9jvBLn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9P9jWBKi9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9R919hWBOn9tv9z9o9v9wW9f9kv9j9v9kv69p9sWvq9F949wBNI9z9iqlBVc+N9IcIBTEM9+FLa8jUUUUBCTlRBCBRFEXCBRGCBREEXABCNJAGJAECUaAFAGrCFZHIy86BBAEAIJREAGCFJHGCN9HQBMAFCx+YUUBJAE86BBAFCEWCxkUUBJAB8pEN83EBAFCFJHFCUG9HQBMMk8lLbaE97F9+FaL978jUUUUBCU/KBlHL8kUUUUBC9+RKGXAGCFJAI9LQBCaRKAE2BBC+gF9HQBALAEAIJHOAGlAG/8cBBCUoBAG9uC/wgBZHKCUGAKCUG9JyRNAECFJRKCBRVGXEXAVAF9PQFANAFAVlAVANJAF9JyRcGXGXAG9FQBAcCbJHIC9wZHMCE9sRSAMCFWRQAICIrCEJCGrRfCBRbEXAKRTCBRtGXEXGXAOATlAf9PQBCBRKSLMALCU/CBJAtAM9sJRmATAfJRKCBREGXAMCoB9JQBAOAKlC/gB9JQBCBRIEXAmAIJREGXGXGXGXGXATAICKrJ2BBHYCEZfIBFGEBMAECBDtDMIBSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMIBAKCTJRKMGXGXGXGXGXAYCGrCEZfIBFGEBMAECBDtDMITSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMITAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMITAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMITAKCTJRKMGXGXGXGXGXAYCIrCEZfIBFGEBMAECBDtDMIASEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIAAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIAAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAEAKDBBBDMIAAKCTJRKMGXGXGXGXGXAYCKrfIBFGEBMAECBDtDMI8wSEMAEAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHYCEWCxkUUBJDBEBAYCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHYCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMI8wAKCIJAeDeBJAYCx+YUUBJ2BBJRKSGMAEAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHYCEWCxkUUBJDBEBAYCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHYCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMI8wAKCNJAeDeBJAYCx+YUUBJ2BBJRKSFMAEAKDBBBDMI8wAKCTJRKMAICoBJREAICUFJAM9LQFAERIAOAKlC/fB9LQBMMGXAEAM9PQBAECErRIEXGXAOAKlCi9PQBCBRKSOMAmAEJRYGXGXGXGXGXATAECKrJ2BBAICKZrCEZfIBFGEBMAYCBDtDMIBSEMAYAKDBBIAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnHPCGD+MFAPDQBTFtGmEYIPLdKeOnC0+G+MiDtD9OHdCEDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCIJAeDeBJAiCx+YUUBJ2BBJRKSGMAYAKDBBNAKDBBBHPCID+MFAPDQBTFtGmEYIPLdKeOnC+P+e+8/4BDtD9OHdCbDbD8jHPAPDQBFGENVcMILKOSQfbHeD8dBh+BsxoxoUwN0AeD8dFhxoUwkwk+gUa0sHnhTkAnsHnhNkAnsHn7CgFZHiCEWCxkUUBJDBEBAiCx+YUUBJDBBBHeAeDQBBBBBBBBBBBBBBBBAnhAk7CgFZHiCEWCxkUUBJDBEBD9uDQBFGEILKOTtmYPdenDfAdAPD9SDMIBAKCNJAeDeBJAiCx+YUUBJ2BBJRKSFMAYAKDBBBDMIBAKCTJRKMAICGJRIAECTJHEAM9JQBMMGXAK9FQBAKRTAtCFJHtCI6QGSFMMCBRKSEMGXAM9FQBALCUGJAbJREALAbJDBGBReCBRYEXAEALCU/CBJAYJHIDBIBHdCFD9tAdCFDbHPD9OD9hD9RHdAIAMJDBIBH8ZCFD9tA8ZAPD9OD9hD9RH8ZDQBTFtGmEYIPLdKeOnHpAIAQJDBIBHyCFD9tAyAPD9OD9hD9RHyAIASJDBIBH8cCFD9tA8cAPD9OD9hD9RH8cDQBTFtGmEYIPLdKeOnH8dDQBFTtGEmYILPdKOenHPAPDQBFGEBFGEBFGEBFGEAeD9uHeDyBjGBAEAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeApA8dDQNVi8ZcMpySQ8c8dfb8e8fHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeAdA8ZDQNiV8ZcpMyS8cQ8df8eb8fHdAyA8cDQNiV8ZcpMyS8cQ8df8eb8fH8ZDQBFTtGEmYILPdKOenHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJHIAeAdA8ZDQNVi8ZcMpySQ8c8dfb8e8fHPAPDQBFGEBFGEBFGEBFGED9uHeDyBjGBAIAGJHIAeAPAPDQILKOILKOILKOILKOD9uHeDyBjGBAIAGJHIAeAPAPDQNVcMNVcMNVcMNVcMD9uHeDyBjGBAIAGJHIAeAPAPDQSQfbSQfbSQfbSQfbD9uHeDyBjGBAIAGJREAYCTJHYAM9JQBMMAbCIJHbAG9JQBMMABAVAG9sJALCUGJAcAG9s/8cBBALALCUGJAcCaJAG9sJAG/8cBBMAcCBAKyAVJRVAKQBMC9+RKSFMCBC99AOAKlAGCAAGCA9Ly6yRKMALCU/KBJ8kUUUUBAKMNBT+BUUUBM+KmFTa8jUUUUBCoFlHL8kUUUUBC9+RKGXAFCE9uHOCtJAI9LQBCaRKAE2BBHNC/wFZC/gF9HQBANCbZHVCF9LQBALCoBJCgFCUF/8MBALC84Jha83EBALC8wJha83EBALC8oJha83EBALCAJha83EBALCiJha83EBALCTJha83EBALha83ENALha83EBAEAIJC9wJRcAECFJHNAOJRMGXAF9FQBCQCbAVCF6yRSABRECBRVCBRQCBRfCBRICBRKEXGXAMAcuQBC9+RKSEMGXGXAN2BBHOC/vF9LQBALCoBJAOCIrCa9zAKJCbZCEWJHb8oGIRTAb8oGBRtGXAOCbZHbAS9PQBALAOCa9zAIJCbZCGWJ8oGBAVAbyROAb9FRbGXGXAGCG9HQBABAt87FBABCIJAO87FBABCGJAT87FBSFMAEAtjGBAECNJAOjGBAECIJATjGBMAVAbJRVALCoBJAKCEWJHmAOjGBAmATjGIALAICGWJAOjGBALCoBJAKCFJCbZHKCEWJHTAtjGBATAOjGIAIAbJRIAKCFJRKSGMGXGXAbCb6QBAQAbJAbC989zJCFJRQSFMAM1BBHbCgFZROGXGXAbCa9MQBAMCFJRMSFMAM1BFHbCgBZCOWAOCgBZqROGXAbCa9MQBAMCGJRMSFMAM1BGHbCgBZCfWAOqROGXAbCa9MQBAMCEJRMSFMAM1BEHbCgBZCdWAOqROGXAbCa9MQBAMCIJRMSFMAM2BIC8cWAOqROAMCLJRMMAOCFrCBAOCFZl9zAQJRQMGXGXAGCG9HQBABAt87FBABCIJAQ87FBABCGJAT87FBSFMAEAtjGBAECNJAQjGBAECIJATjGBMALCoBJAKCEWJHOAQjGBAOATjGIALAICGWJAQjGBALCoBJAKCFJCbZHKCEWJHOAtjGBAOAQjGIAICFJRIAKCFJRKSFMGXAOCDF9LQBALAIAcAOCbZJ2BBHbCIrHTlCbZCGWJ8oGBAVCFJHtATyROALAIAblCbZCGWJ8oGBAtAT9FHmJHtAbCbZHTyRbAT9FRTGXGXAGCG9HQBABAV87FBABCIJAb87FBABCGJAO87FBSFMAEAVjGBAECNJAbjGBAECIJAOjGBMALAICGWJAVjGBALCoBJAKCEWJHYAOjGBAYAVjGIALAICFJHICbZCGWJAOjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAIAmJCbZHICGWJAbjGBALCoBJAKCGJCbZHKCEWJHOAVjGBAOAbjGIAKCFJRKAIATJRIAtATJRVSFMAVCBAM2BBHYyHTAOC/+F6HPJROAYCbZRtGXGXAYCIrHmQBAOCFJRbSFMAORbALAIAmlCbZCGWJ8oGBROMGXGXAtQBAbCFJRVSFMAbRVALAIAYlCbZCGWJ8oGBRbMGXGXAP9FQBAMCFJRYSFMAM1BFHYCgFZRTGXGXAYCa9MQBAMCGJRYSFMAM1BGHYCgBZCOWATCgBZqRTGXAYCa9MQBAMCEJRYSFMAM1BEHYCgBZCfWATqRTGXAYCa9MQBAMCIJRYSFMAM1BIHYCgBZCdWATqRTGXAYCa9MQBAMCLJRYSFMAMCKJRYAM2BLC8cWATqRTMATCFrCBATCFZl9zAQJHQRTMGXGXAmCb6QBAYRPSFMAY1BBHMCgFZROGXGXAMCa9MQBAYCFJRPSFMAY1BFHMCgBZCOWAOCgBZqROGXAMCa9MQBAYCGJRPSFMAY1BGHMCgBZCfWAOqROGXAMCa9MQBAYCEJRPSFMAY1BEHMCgBZCdWAOqROGXAMCa9MQBAYCIJRPSFMAYCLJRPAY2BIC8cWAOqROMAOCFrCBAOCFZl9zAQJHQROMGXGXAtCb6QBAPRMSFMAP1BBHMCgFZRbGXGXAMCa9MQBAPCFJRMSFMAP1BFHMCgBZCOWAbCgBZqRbGXAMCa9MQBAPCGJRMSFMAP1BGHMCgBZCfWAbqRbGXAMCa9MQBAPCEJRMSFMAP1BEHMCgBZCdWAbqRbGXAMCa9MQBAPCIJRMSFMAPCLJRMAP2BIC8cWAbqRbMAbCFrCBAbCFZl9zAQJHQRbMGXGXAGCG9HQBABAT87FBABCIJAb87FBABCGJAO87FBSFMAEATjGBAECNJAbjGBAECIJAOjGBMALCoBJAKCEWJHYAOjGBAYATjGIALAICGWJATjGBALCoBJAKCFJCbZCEWJHYAbjGBAYAOjGIALAICFJHICbZCGWJAOjGBALCoBJAKCGJCbZCEWJHOATjGBAOAbjGIALAIAm9FAmCb6qJHICbZCGWJAbjGBAIAt9FAtCb6qJRIAKCEJRKMANCFJRNABCKJRBAECSJREAKCbZRKAICbZRIAfCEJHfAF9JQBMMCBC99AMAc6yRKMALCoFJ8kUUUUBAKM/tIFGa8jUUUUBCTlRLC9+RKGXAFCLJAI9LQBCaRKAE2BBC/+FZC/QF9HQBALhB83ENAECFJRKAEAIJC98JREGXAF9FQBGXAGCG6QBEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMALCNJAICFZCGWqHGAICGrCBAICFrCFZl9zAG8oGBJHIjGBABAIjGBABCIJRBAFCaJHFQBSGMMEXGXAKAE9JQBC9+bMAK1BBHGCgFZRIGXGXAGCa9MQBAKCFJRKSFMAK1BFHGCgBZCOWAICgBZqRIGXAGCa9MQBAKCGJRKSFMAK1BGHGCgBZCfWAIqRIGXAGCa9MQBAKCEJRKSFMAK1BEHGCgBZCdWAIqRIGXAGCa9MQBAKCIJRKSFMAK2BIC8cWAIqRIAKCLJRKMABAICGrCBAICFrCFZl9zALCNJAICFZCGWqHI8oGBJHG87FBAIAGjGBABCGJRBAFCaJHFQBMMCBC99AKAE6yRKMAKM/dLEK97FaF97GXGXAGCI9HQBAF9FQFCBRGEXABABDBBBHECiD+rFCiD+sFD/6FHIAECND+rFCiD+sFD/6FAID/gFAECTD+rFCiD+sFD/6FHLD/gFD/kFD/lFHKCBDtD+2FHOAICUUUU94DtHND9OD9RD/kFHI9DBB/+hDYAIAID/mFAKAKD/mFALAOALAND9OD9RD/kFHIAID/mFD/kFD/kFD/jFD/nFHLD/mF9DBBX9LDYHOD/kFCgFDtD9OAECUUU94DtD9OD9QAIALD/mFAOD/kFCND+rFCU/+EDtD9OD9QAKALD/mFAOD/kFCTD+rFCUU/8ODtD9OD9QDMBBABCTJRBAGCIJHGAF9JQBSGMMAF9FQBCBRGEXABCTJHVAVDBBBHECBDtHOCUU98D8cFCUU98D8cEHND9OABDBBBHKAEDQILKOSQfbPden8c8d8e8fCggFDtD9OD/6FAKAEDQBFGENVcMTtmYi8ZpyHECTD+sFD/6FHID/gFAECTD+rFCTD+sFD/6FHLD/gFD/kFD/lFHE9DB/+g6DYALAEAOD+2FHOALCUUUU94DtHcD9OD9RD/kFHLALD/mFAEAED/mFAIAOAIAcD9OD9RD/kFHEAED/mFD/kFD/kFD/jFD/nFHID/mF9DBBX9LDYHOD/kFCTD+rFALAID/mFAOD/kFCggEDtD9OD9QHLAEAID/mFAOD/kFCaDbCBDnGCBDnECBDnKCBDnOCBDncCBDnMCBDnfCBDnbD9OHEDQNVi8ZcMpySQ8c8dfb8e8fD9QDMBBABAKAND9OALAEDQBFTtGEmYILPdKOenD9QDMBBABCAJRBAGCIJHGAF9JQBMMM/hEIGaF97FaL978jUUUUBCTlREGXAF9FQBCBRIEXAEABDBBBHLABCTJHKDBBBHODQILKOSQfbPden8c8d8e8fHNCTD+sFHVCID+rFDMIBAB9DBBU8/DY9D/zI818/DYAVCEDtD9QD/6FD/nFHVALAODQBFGENVcMTtmYi8ZpyHLCTD+rFCTD+sFD/6FD/mFHOAOD/mFAVALCTD+sFD/6FD/mFHcAcD/mFAVANCTD+rFCTD+sFD/6FD/mFHNAND/mFD/kFD/kFD/lFCBDtD+4FD/jF9DB/+g6DYHVD/mF9DBBX9LDYHLD/kFCggEDtHMD9OAcAVD/mFALD/kFCTD+rFD9QHcANAVD/mFALD/kFCTD+rFAOAVD/mFALD/kFAMD9OD9QHVDQBFTtGEmYILPdKOenHLD8dBAEDBIBDyB+t+J83EBABCNJALD8dFAEDBIBDyF+t+J83EBAKAcAVDQNVi8ZcMpySQ8c8dfb8e8fHVD8dBAEDBIBDyG+t+J83EBABCiJAVD8dFAEDBIBDyE+t+J83EBABCAJRBAICIJHIAF9JQBMMM9jFF97GXAGCGrAF9sHG9FQBCBRFEXABABDBBBHECND+rFCND+sFD/6FAECiD+sFCnD+rFCUUU/8EDtD+uFD/mFDMBBABCTJRBAFCIJHFAG9JQBMMM9TFEaCBCB8oGUkUUBHFABCEJC98ZJHBjGUkUUBGXGXAB8/BCTWHGuQBCaREABAGlCggEJCTrXBCa6QFMAFREMAEMMMFBCUNMIT9tBB";
-  const detector = new Uint8Array([
-    0,
-    97,
-    115,
-    109,
-    1,
-    0,
-    0,
-    0,
-    1,
-    4,
-    1,
-    96,
-    0,
-    0,
-    3,
-    3,
-    2,
-    0,
-    0,
-    5,
-    3,
-    1,
-    0,
-    1,
-    12,
-    1,
-    0,
-    10,
-    22,
-    2,
-    12,
-    0,
-    65,
-    0,
-    65,
-    0,
-    65,
-    0,
-    252,
-    10,
-    0,
-    0,
-    11,
-    7,
-    0,
-    65,
-    0,
-    253,
-    15,
-    26,
-    11
-  ]);
-  const wasmpack = new Uint8Array([
-    32,
-    0,
-    65,
-    253,
-    3,
-    1,
-    2,
-    34,
-    4,
-    106,
-    6,
-    5,
-    11,
-    8,
-    7,
-    20,
-    13,
-    33,
-    12,
-    16,
-    128,
-    9,
-    116,
-    64,
-    19,
-    113,
-    127,
-    15,
-    10,
-    21,
-    22,
-    14,
-    255,
-    66,
-    24,
-    54,
-    136,
-    107,
-    18,
-    23,
-    192,
-    26,
-    114,
-    118,
-    132,
-    17,
-    77,
-    101,
-    130,
-    144,
-    27,
-    87,
-    131,
-    44,
-    45,
-    74,
-    156,
-    154,
-    70,
-    167
-  ]);
-  if (typeof WebAssembly !== "object") {
-    return {
-      supported: false
-    };
-  }
-  let wasm = wasm_base;
-  if (WebAssembly.validate(detector)) {
-    wasm = wasm_simd;
-  }
-  let instance;
-  const promise = WebAssembly.instantiate(unpack(wasm), {}).then((result) => {
-    instance = result.instance;
-    instance.exports.__wasm_call_ctors();
-  });
-  function unpack(data) {
-    const result = new Uint8Array(data.length);
-    for (let i = 0; i < data.length; ++i) {
-      const ch = data.charCodeAt(i);
-      result[i] = ch > 96 ? ch - 71 : ch > 64 ? ch - 65 : ch > 47 ? ch + 4 : ch > 46 ? 63 : 62;
-    }
-    let write = 0;
-    for (let i = 0; i < data.length; ++i) {
-      result[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];
-    }
-    return result.buffer.slice(0, write);
-  }
-  function decode(fun, target, count, size, source, filter) {
-    const sbrk = instance.exports.sbrk;
-    const count4 = count + 3 & ~3;
-    const tp = sbrk(count4 * size);
-    const sp = sbrk(source.length);
-    const heap = new Uint8Array(instance.exports.memory.buffer);
-    heap.set(source, sp);
-    const res = fun(tp, count, size, sp, source.length);
-    if (res === 0 && filter) {
-      filter(tp, count4, size);
-    }
-    target.set(heap.subarray(tp, tp + count * size));
-    sbrk(tp - sbrk(0));
-    if (res !== 0) {
-      throw new Error(`Malformed buffer data: ${res}`);
-    }
-  }
-  const filters = {
-    // legacy index-based enums for glTF
-    0: "",
-    1: "meshopt_decodeFilterOct",
-    2: "meshopt_decodeFilterQuat",
-    3: "meshopt_decodeFilterExp",
-    // string-based enums for glTF
-    NONE: "",
-    OCTAHEDRAL: "meshopt_decodeFilterOct",
-    QUATERNION: "meshopt_decodeFilterQuat",
-    EXPONENTIAL: "meshopt_decodeFilterExp"
-  };
-  const decoders = {
-    // legacy index-based enums for glTF
-    0: "meshopt_decodeVertexBuffer",
-    1: "meshopt_decodeIndexBuffer",
-    2: "meshopt_decodeIndexSequence",
-    // string-based enums for glTF
-    ATTRIBUTES: "meshopt_decodeVertexBuffer",
-    TRIANGLES: "meshopt_decodeIndexBuffer",
-    INDICES: "meshopt_decodeIndexSequence"
-  };
-  generated = {
-    ready: promise,
-    supported: true,
-    decodeVertexBuffer(target, count, size, source, filter) {
-      decode(
-        instance.exports.meshopt_decodeVertexBuffer,
-        target,
-        count,
-        size,
-        source,
-        instance.exports[filters[filter]]
-      );
-    },
-    decodeIndexBuffer(target, count, size, source) {
-      decode(instance.exports.meshopt_decodeIndexBuffer, target, count, size, source);
-    },
-    decodeIndexSequence(target, count, size, source) {
-      decode(instance.exports.meshopt_decodeIndexSequence, target, count, size, source);
-    },
-    decodeGltfBuffer(target, count, size, source, mode, filter) {
-      decode(
-        instance.exports[decoders[mode]],
-        target,
-        count,
-        size,
-        source,
-        instance.exports[filters[filter]]
-      );
-    }
-  };
-  return generated;
-};
-
-
-
-/***/ }),
-
-/***/ 43075:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "w": () => (/* binding */ Line2)
-/* harmony export */ });
-/* harmony import */ var _LineSegments2_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(21939);
-/* harmony import */ var _LineGeometry_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(51815);
-/* harmony import */ var _LineMaterial_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10977);
-
-
-
-class Line2 extends _LineSegments2_js__WEBPACK_IMPORTED_MODULE_0__/* .LineSegments2 */ .w {
-  constructor(geometry = new _LineGeometry_js__WEBPACK_IMPORTED_MODULE_1__/* .LineGeometry */ .L(), material = new _LineMaterial_js__WEBPACK_IMPORTED_MODULE_2__/* .LineMaterial */ .Y({ color: Math.random() * 16777215 })) {
-    super(geometry, material);
-    this.isLine2 = true;
-    this.type = "Line2";
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 51815:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "L": () => (/* binding */ LineGeometry)
-/* harmony export */ });
-/* harmony import */ var _LineSegmentsGeometry_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3415);
-
-class LineGeometry extends _LineSegmentsGeometry_js__WEBPACK_IMPORTED_MODULE_0__/* .LineSegmentsGeometry */ .z {
-  constructor() {
-    super();
-    this.isLineGeometry = true;
-    this.type = "LineGeometry";
-  }
-  setPositions(array) {
-    const length = array.length - 3;
-    const points = new Float32Array(2 * length);
-    for (let i = 0; i < length; i += 3) {
-      points[2 * i] = array[i];
-      points[2 * i + 1] = array[i + 1];
-      points[2 * i + 2] = array[i + 2];
-      points[2 * i + 3] = array[i + 3];
-      points[2 * i + 4] = array[i + 4];
-      points[2 * i + 5] = array[i + 5];
-    }
-    super.setPositions(points);
-    return this;
-  }
-  setColors(array) {
-    const length = array.length - 3;
-    const colors = new Float32Array(2 * length);
-    for (let i = 0; i < length; i += 3) {
-      colors[2 * i] = array[i];
-      colors[2 * i + 1] = array[i + 1];
-      colors[2 * i + 2] = array[i + 2];
-      colors[2 * i + 3] = array[i + 3];
-      colors[2 * i + 4] = array[i + 4];
-      colors[2 * i + 5] = array[i + 5];
-    }
-    super.setColors(colors);
-    return this;
-  }
-  fromLine(line) {
-    const geometry = line.geometry;
-    this.setPositions(geometry.attributes.position.array);
-    return this;
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 10977:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Y": () => (/* binding */ LineMaterial)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-
-class LineMaterial extends three__WEBPACK_IMPORTED_MODULE_0__.ShaderMaterial {
-  constructor(parameters) {
-    super({
-      type: "LineMaterial",
-      uniforms: three__WEBPACK_IMPORTED_MODULE_0__.UniformsUtils.clone(
-        three__WEBPACK_IMPORTED_MODULE_0__.UniformsUtils.merge([
-          three__WEBPACK_IMPORTED_MODULE_0__.UniformsLib.common,
-          three__WEBPACK_IMPORTED_MODULE_0__.UniformsLib.fog,
-          {
-            worldUnits: { value: 1 },
-            linewidth: { value: 1 },
-            resolution: { value: new three__WEBPACK_IMPORTED_MODULE_0__.Vector2(1, 1) },
-            dashOffset: { value: 0 },
-            dashScale: { value: 1 },
-            dashSize: { value: 1 },
-            gapSize: { value: 1 }
-            // todo FIX - maybe change to totalSize
-          }
-        ])
-      ),
-      vertexShader: (
-        /* glsl */
-        `
-				#include <common>
-				#include <color_pars_vertex>
-				#include <fog_pars_vertex>
-				#include <logdepthbuf_pars_vertex>
-				#include <clipping_planes_pars_vertex>
-
-				uniform float linewidth;
-				uniform vec2 resolution;
-
-				attribute vec3 instanceStart;
-				attribute vec3 instanceEnd;
-
-				attribute vec3 instanceColorStart;
-				attribute vec3 instanceColorEnd;
-
-				#ifdef WORLD_UNITS
-
-					varying vec4 worldPos;
-					varying vec3 worldStart;
-					varying vec3 worldEnd;
-
-					#ifdef USE_DASH
-
-						varying vec2 vUv;
-
-					#endif
-
-				#else
-
-					varying vec2 vUv;
-
-				#endif
-
-				#ifdef USE_DASH
-
-					uniform float dashScale;
-					attribute float instanceDistanceStart;
-					attribute float instanceDistanceEnd;
-					varying float vLineDistance;
-
-				#endif
-
-				void trimSegment( const in vec4 start, inout vec4 end ) {
-
-					// trim end segment so it terminates between the camera plane and the near plane
-
-					// conservative estimate of the near plane
-					float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column
-					float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column
-					float nearEstimate = - 0.5 * b / a;
-
-					float alpha = ( nearEstimate - start.z ) / ( end.z - start.z );
-
-					end.xyz = mix( start.xyz, end.xyz, alpha );
-
-				}
-
-				void main() {
-
-					#ifdef USE_COLOR
-
-						vColor.xyz = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;
-
-					#endif
-
-					#ifdef USE_DASH
-
-						vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;
-						vUv = uv;
-
-					#endif
-
-					float aspect = resolution.x / resolution.y;
-
-					// camera space
-					vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );
-					vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );
-
-					#ifdef WORLD_UNITS
-
-						worldStart = start.xyz;
-						worldEnd = end.xyz;
-
-					#else
-
-						vUv = uv;
-
-					#endif
-
-					// special case for perspective projection, and segments that terminate either in, or behind, the camera plane
-					// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space
-					// but we need to perform ndc-space calculations in the shader, so we must address this issue directly
-					// perhaps there is a more elegant solution -- WestLangley
-
-					bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column
-
-					if ( perspective ) {
-
-						if ( start.z < 0.0 && end.z >= 0.0 ) {
-
-							trimSegment( start, end );
-
-						} else if ( end.z < 0.0 && start.z >= 0.0 ) {
-
-							trimSegment( end, start );
-
-						}
-
-					}
-
-					// clip space
-					vec4 clipStart = projectionMatrix * start;
-					vec4 clipEnd = projectionMatrix * end;
-
-					// ndc space
-					vec3 ndcStart = clipStart.xyz / clipStart.w;
-					vec3 ndcEnd = clipEnd.xyz / clipEnd.w;
-
-					// direction
-					vec2 dir = ndcEnd.xy - ndcStart.xy;
-
-					// account for clip-space aspect ratio
-					dir.x *= aspect;
-					dir = normalize( dir );
-
-					#ifdef WORLD_UNITS
-
-						// get the offset direction as perpendicular to the view vector
-						vec3 worldDir = normalize( end.xyz - start.xyz );
-						vec3 offset;
-						if ( position.y < 0.5 ) {
-
-							offset = normalize( cross( start.xyz, worldDir ) );
-
-						} else {
-
-							offset = normalize( cross( end.xyz, worldDir ) );
-
-						}
-
-						// sign flip
-						if ( position.x < 0.0 ) offset *= - 1.0;
-
-						float forwardOffset = dot( worldDir, vec3( 0.0, 0.0, 1.0 ) );
-
-						// don't extend the line if we're rendering dashes because we
-						// won't be rendering the endcaps
-						#ifndef USE_DASH
-
-							// extend the line bounds to encompass  endcaps
-							start.xyz += - worldDir * linewidth * 0.5;
-							end.xyz += worldDir * linewidth * 0.5;
-
-							// shift the position of the quad so it hugs the forward edge of the line
-							offset.xy -= dir * forwardOffset;
-							offset.z += 0.5;
-
-						#endif
-
-						// endcaps
-						if ( position.y > 1.0 || position.y < 0.0 ) {
-
-							offset.xy += dir * 2.0 * forwardOffset;
-
-						}
-
-						// adjust for linewidth
-						offset *= linewidth * 0.5;
-
-						// set the world position
-						worldPos = ( position.y < 0.5 ) ? start : end;
-						worldPos.xyz += offset;
-
-						// project the worldpos
-						vec4 clip = projectionMatrix * worldPos;
-
-						// shift the depth of the projected points so the line
-						// segments overlap neatly
-						vec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;
-						clip.z = clipPose.z * clip.w;
-
-					#else
-
-						vec2 offset = vec2( dir.y, - dir.x );
-						// undo aspect ratio adjustment
-						dir.x /= aspect;
-						offset.x /= aspect;
-
-						// sign flip
-						if ( position.x < 0.0 ) offset *= - 1.0;
-
-						// endcaps
-						if ( position.y < 0.0 ) {
-
-							offset += - dir;
-
-						} else if ( position.y > 1.0 ) {
-
-							offset += dir;
-
-						}
-
-						// adjust for linewidth
-						offset *= linewidth;
-
-						// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...
-						offset /= resolution.y;
-
-						// select end
-						vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;
-
-						// back to clip space
-						offset *= clip.w;
-
-						clip.xy += offset;
-
-					#endif
-
-					gl_Position = clip;
-
-					vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation
-
-					#include <logdepthbuf_vertex>
-					#include <clipping_planes_vertex>
-					#include <fog_vertex>
-
-				}
-			`
-      ),
-      fragmentShader: (
-        /* glsl */
-        `
-				uniform vec3 diffuse;
-				uniform float opacity;
-				uniform float linewidth;
-
-				#ifdef USE_DASH
-
-					uniform float dashOffset;
-					uniform float dashSize;
-					uniform float gapSize;
-
-				#endif
-
-				varying float vLineDistance;
-
-				#ifdef WORLD_UNITS
-
-					varying vec4 worldPos;
-					varying vec3 worldStart;
-					varying vec3 worldEnd;
-
-					#ifdef USE_DASH
-
-						varying vec2 vUv;
-
-					#endif
-
-				#else
-
-					varying vec2 vUv;
-
-				#endif
-
-				#include <common>
-				#include <color_pars_fragment>
-				#include <fog_pars_fragment>
-				#include <logdepthbuf_pars_fragment>
-				#include <clipping_planes_pars_fragment>
-
-				vec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {
-
-					float mua;
-					float mub;
-
-					vec3 p13 = p1 - p3;
-					vec3 p43 = p4 - p3;
-
-					vec3 p21 = p2 - p1;
-
-					float d1343 = dot( p13, p43 );
-					float d4321 = dot( p43, p21 );
-					float d1321 = dot( p13, p21 );
-					float d4343 = dot( p43, p43 );
-					float d2121 = dot( p21, p21 );
-
-					float denom = d2121 * d4343 - d4321 * d4321;
-
-					float numer = d1343 * d4321 - d1321 * d4343;
-
-					mua = numer / denom;
-					mua = clamp( mua, 0.0, 1.0 );
-					mub = ( d1343 + d4321 * ( mua ) ) / d4343;
-					mub = clamp( mub, 0.0, 1.0 );
-
-					return vec2( mua, mub );
-
-				}
-
-				void main() {
-
-					#include <clipping_planes_fragment>
-
-					#ifdef USE_DASH
-
-						if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps
-
-						if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX
-
-					#endif
-
-					float alpha = opacity;
-
-					#ifdef WORLD_UNITS
-
-						// Find the closest points on the view ray and the line segment
-						vec3 rayEnd = normalize( worldPos.xyz ) * 1e5;
-						vec3 lineDir = worldEnd - worldStart;
-						vec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );
-
-						vec3 p1 = worldStart + lineDir * params.x;
-						vec3 p2 = rayEnd * params.y;
-						vec3 delta = p1 - p2;
-						float len = length( delta );
-						float norm = len / linewidth;
-
-						#ifndef USE_DASH
-
-							#ifdef USE_ALPHA_TO_COVERAGE
-
-								float dnorm = fwidth( norm );
-								alpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );
-
-							#else
-
-								if ( norm > 0.5 ) {
-
-									discard;
-
-								}
-
-							#endif
-
-						#endif
-
-					#else
-
-						#ifdef USE_ALPHA_TO_COVERAGE
-
-							// artifacts appear on some hardware if a derivative is taken within a conditional
-							float a = vUv.x;
-							float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;
-							float len2 = a * a + b * b;
-							float dlen = fwidth( len2 );
-
-							if ( abs( vUv.y ) > 1.0 ) {
-
-								alpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );
-
-							}
-
-						#else
-
-							if ( abs( vUv.y ) > 1.0 ) {
-
-								float a = vUv.x;
-								float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;
-								float len2 = a * a + b * b;
-
-								if ( len2 > 1.0 ) discard;
-
-							}
-
-						#endif
-
-					#endif
-
-					vec4 diffuseColor = vec4( diffuse, alpha );
-
-					#include <logdepthbuf_fragment>
-					#include <color_fragment>
-
-					gl_FragColor = vec4( diffuseColor.rgb, alpha );
-
-					#include <tonemapping_fragment>
-					#include <encodings_fragment>
-					#include <fog_fragment>
-					#include <premultiplied_alpha_fragment>
-
-				}
-			`
-      ),
-      clipping: true
-      // required for clipping support
-    });
-    this.isLineMaterial = true;
-    Object.defineProperties(this, {
-      color: {
-        enumerable: true,
-        get: function() {
-          return this.uniforms.diffuse.value;
-        },
-        set: function(value) {
-          this.uniforms.diffuse.value = value;
-        }
-      },
-      worldUnits: {
-        enumerable: true,
-        get: function() {
-          return "WORLD_UNITS" in this.defines;
-        },
-        set: function(value) {
-          if (value === true) {
-            this.defines.WORLD_UNITS = "";
-          } else {
-            delete this.defines.WORLD_UNITS;
-          }
-        }
-      },
-      linewidth: {
-        enumerable: true,
-        get: function() {
-          return this.uniforms.linewidth.value;
-        },
-        set: function(value) {
-          this.uniforms.linewidth.value = value;
-        }
-      },
-      dashed: {
-        enumerable: true,
-        get: function() {
-          return Boolean("USE_DASH" in this.defines);
-        },
-        set(value) {
-          if (Boolean(value) !== Boolean("USE_DASH" in this.defines)) {
-            this.needsUpdate = true;
-          }
-          if (value === true) {
-            this.defines.USE_DASH = "";
-          } else {
-            delete this.defines.USE_DASH;
-          }
-        }
-      },
-      dashScale: {
-        enumerable: true,
-        get: function() {
-          return this.uniforms.dashScale.value;
-        },
-        set: function(value) {
-          this.uniforms.dashScale.value = value;
-        }
-      },
-      dashSize: {
-        enumerable: true,
-        get: function() {
-          return this.uniforms.dashSize.value;
-        },
-        set: function(value) {
-          this.uniforms.dashSize.value = value;
-        }
-      },
-      dashOffset: {
-        enumerable: true,
-        get: function() {
-          return this.uniforms.dashOffset.value;
-        },
-        set: function(value) {
-          this.uniforms.dashOffset.value = value;
-        }
-      },
-      gapSize: {
-        enumerable: true,
-        get: function() {
-          return this.uniforms.gapSize.value;
-        },
-        set: function(value) {
-          this.uniforms.gapSize.value = value;
-        }
-      },
-      opacity: {
-        enumerable: true,
-        get: function() {
-          return this.uniforms.opacity.value;
-        },
-        set: function(value) {
-          this.uniforms.opacity.value = value;
-        }
-      },
-      resolution: {
-        enumerable: true,
-        get: function() {
-          return this.uniforms.resolution.value;
-        },
-        set: function(value) {
-          this.uniforms.resolution.value.copy(value);
-        }
-      },
-      alphaToCoverage: {
-        enumerable: true,
-        get: function() {
-          return Boolean("USE_ALPHA_TO_COVERAGE" in this.defines);
-        },
-        set: function(value) {
-          if (Boolean(value) !== Boolean("USE_ALPHA_TO_COVERAGE" in this.defines)) {
-            this.needsUpdate = true;
-          }
-          if (value === true) {
-            this.defines.USE_ALPHA_TO_COVERAGE = "";
-            this.extensions.derivatives = true;
-          } else {
-            delete this.defines.USE_ALPHA_TO_COVERAGE;
-            this.extensions.derivatives = false;
-          }
-        }
-      }
-    });
-    this.setValues(parameters);
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 21939:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "w": () => (/* binding */ LineSegments2)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-/* harmony import */ var _LineSegmentsGeometry_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(3415);
-/* harmony import */ var _LineMaterial_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(10977);
-
-
-
-const _start = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const _end = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const _start4 = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector4();
-const _end4 = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector4();
-const _ssOrigin = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector4();
-const _ssOrigin3 = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const _mvMatrix = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-const _line = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Line3();
-const _closestPoint = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-const _box = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Box3();
-const _sphere = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Sphere();
-const _clipToWorldVector = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector4();
-let _ray, _instanceStart, _instanceEnd, _lineWidth;
-function getWorldSpaceHalfWidth(camera, distance, resolution) {
-  _clipToWorldVector.set(0, 0, -distance, 1).applyMatrix4(camera.projectionMatrix);
-  _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w);
-  _clipToWorldVector.x = _lineWidth / resolution.width;
-  _clipToWorldVector.y = _lineWidth / resolution.height;
-  _clipToWorldVector.applyMatrix4(camera.projectionMatrixInverse);
-  _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w);
-  return Math.abs(Math.max(_clipToWorldVector.x, _clipToWorldVector.y));
-}
-function raycastWorldUnits(lineSegments, intersects) {
-  for (let i = 0, l = _instanceStart.count; i < l; i++) {
-    _line.start.fromBufferAttribute(_instanceStart, i);
-    _line.end.fromBufferAttribute(_instanceEnd, i);
-    const pointOnLine = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    const point = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    _ray.distanceSqToSegment(_line.start, _line.end, point, pointOnLine);
-    const isInside = point.distanceTo(pointOnLine) < _lineWidth * 0.5;
-    if (isInside) {
-      intersects.push({
-        point,
-        pointOnLine,
-        distance: _ray.origin.distanceTo(point),
-        object: lineSegments,
-        face: null,
-        faceIndex: i,
-        uv: null,
-        uv2: null
-      });
-    }
-  }
-}
-function raycastScreenSpace(lineSegments, camera, intersects) {
-  const projectionMatrix = camera.projectionMatrix;
-  const material = lineSegments.material;
-  const resolution = material.resolution;
-  const matrixWorld = lineSegments.matrixWorld;
-  const geometry = lineSegments.geometry;
-  const instanceStart = geometry.attributes.instanceStart;
-  const instanceEnd = geometry.attributes.instanceEnd;
-  const near = -camera.near;
-  _ray.at(1, _ssOrigin);
-  _ssOrigin.w = 1;
-  _ssOrigin.applyMatrix4(camera.matrixWorldInverse);
-  _ssOrigin.applyMatrix4(projectionMatrix);
-  _ssOrigin.multiplyScalar(1 / _ssOrigin.w);
-  _ssOrigin.x *= resolution.x / 2;
-  _ssOrigin.y *= resolution.y / 2;
-  _ssOrigin.z = 0;
-  _ssOrigin3.copy(_ssOrigin);
-  _mvMatrix.multiplyMatrices(camera.matrixWorldInverse, matrixWorld);
-  for (let i = 0, l = instanceStart.count; i < l; i++) {
-    _start4.fromBufferAttribute(instanceStart, i);
-    _end4.fromBufferAttribute(instanceEnd, i);
-    _start4.w = 1;
-    _end4.w = 1;
-    _start4.applyMatrix4(_mvMatrix);
-    _end4.applyMatrix4(_mvMatrix);
-    const isBehindCameraNear = _start4.z > near && _end4.z > near;
-    if (isBehindCameraNear) {
-      continue;
-    }
-    if (_start4.z > near) {
-      const deltaDist = _start4.z - _end4.z;
-      const t = (_start4.z - near) / deltaDist;
-      _start4.lerp(_end4, t);
-    } else if (_end4.z > near) {
-      const deltaDist = _end4.z - _start4.z;
-      const t = (_end4.z - near) / deltaDist;
-      _end4.lerp(_start4, t);
-    }
-    _start4.applyMatrix4(projectionMatrix);
-    _end4.applyMatrix4(projectionMatrix);
-    _start4.multiplyScalar(1 / _start4.w);
-    _end4.multiplyScalar(1 / _end4.w);
-    _start4.x *= resolution.x / 2;
-    _start4.y *= resolution.y / 2;
-    _end4.x *= resolution.x / 2;
-    _end4.y *= resolution.y / 2;
-    _line.start.copy(_start4);
-    _line.start.z = 0;
-    _line.end.copy(_end4);
-    _line.end.z = 0;
-    const param = _line.closestPointToPointParameter(_ssOrigin3, true);
-    _line.at(param, _closestPoint);
-    const zPos = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.lerp(_start4.z, _end4.z, param);
-    const isInClipSpace = zPos >= -1 && zPos <= 1;
-    const isInside = _ssOrigin3.distanceTo(_closestPoint) < _lineWidth * 0.5;
-    if (isInClipSpace && isInside) {
-      _line.start.fromBufferAttribute(instanceStart, i);
-      _line.end.fromBufferAttribute(instanceEnd, i);
-      _line.start.applyMatrix4(matrixWorld);
-      _line.end.applyMatrix4(matrixWorld);
-      const pointOnLine = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-      const point = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-      _ray.distanceSqToSegment(_line.start, _line.end, point, pointOnLine);
-      intersects.push({
-        point,
-        pointOnLine,
-        distance: _ray.origin.distanceTo(point),
-        object: lineSegments,
-        face: null,
-        faceIndex: i,
-        uv: null,
-        uv2: null
-      });
-    }
-  }
-}
-class LineSegments2 extends three__WEBPACK_IMPORTED_MODULE_0__.Mesh {
-  constructor(geometry = new _LineSegmentsGeometry_js__WEBPACK_IMPORTED_MODULE_1__/* .LineSegmentsGeometry */ .z(), material = new _LineMaterial_js__WEBPACK_IMPORTED_MODULE_2__/* .LineMaterial */ .Y({ color: Math.random() * 16777215 })) {
-    super(geometry, material);
-    this.isLineSegments2 = true;
-    this.type = "LineSegments2";
-  }
-  // for backwards-compatibility, but could be a method of LineSegmentsGeometry...
-  computeLineDistances() {
-    const geometry = this.geometry;
-    const instanceStart = geometry.attributes.instanceStart;
-    const instanceEnd = geometry.attributes.instanceEnd;
-    const lineDistances = new Float32Array(2 * instanceStart.count);
-    for (let i = 0, j = 0, l = instanceStart.count; i < l; i++, j += 2) {
-      _start.fromBufferAttribute(instanceStart, i);
-      _end.fromBufferAttribute(instanceEnd, i);
-      lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1];
-      lineDistances[j + 1] = lineDistances[j] + _start.distanceTo(_end);
-    }
-    const instanceDistanceBuffer = new three__WEBPACK_IMPORTED_MODULE_0__.InstancedInterleavedBuffer(lineDistances, 2, 1);
-    geometry.setAttribute("instanceDistanceStart", new three__WEBPACK_IMPORTED_MODULE_0__.InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0));
-    geometry.setAttribute("instanceDistanceEnd", new three__WEBPACK_IMPORTED_MODULE_0__.InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1));
-    return this;
-  }
-  raycast(raycaster, intersects) {
-    const worldUnits = this.material.worldUnits;
-    const camera = raycaster.camera;
-    if (camera === null && !worldUnits) {
-      console.error(
-        'LineSegments2: "Raycaster.camera" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.'
-      );
-    }
-    const threshold = raycaster.params.Line2 !== void 0 ? raycaster.params.Line2.threshold || 0 : 0;
-    _ray = raycaster.ray;
-    const matrixWorld = this.matrixWorld;
-    const geometry = this.geometry;
-    const material = this.material;
-    _lineWidth = material.linewidth + threshold;
-    _instanceStart = geometry.attributes.instanceStart;
-    _instanceEnd = geometry.attributes.instanceEnd;
-    if (geometry.boundingSphere === null) {
-      geometry.computeBoundingSphere();
-    }
-    _sphere.copy(geometry.boundingSphere).applyMatrix4(matrixWorld);
-    let sphereMargin;
-    if (worldUnits) {
-      sphereMargin = _lineWidth * 0.5;
-    } else {
-      const distanceToSphere = Math.max(camera.near, _sphere.distanceToPoint(_ray.origin));
-      sphereMargin = getWorldSpaceHalfWidth(camera, distanceToSphere, material.resolution);
-    }
-    _sphere.radius += sphereMargin;
-    if (_ray.intersectsSphere(_sphere) === false) {
-      return;
-    }
-    if (geometry.boundingBox === null) {
-      geometry.computeBoundingBox();
-    }
-    _box.copy(geometry.boundingBox).applyMatrix4(matrixWorld);
-    let boxMargin;
-    if (worldUnits) {
-      boxMargin = _lineWidth * 0.5;
-    } else {
-      const distanceToBox = Math.max(camera.near, _box.distanceToPoint(_ray.origin));
-      boxMargin = getWorldSpaceHalfWidth(camera, distanceToBox, material.resolution);
-    }
-    _box.expandByScalar(boxMargin);
-    if (_ray.intersectsBox(_box) === false) {
-      return;
-    }
-    if (worldUnits) {
-      raycastWorldUnits(this, intersects);
-    } else {
-      raycastScreenSpace(this, camera, intersects);
-    }
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 3415:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "z": () => (/* binding */ LineSegmentsGeometry)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-
-const _box = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Box3();
-const _vector = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-class LineSegmentsGeometry extends three__WEBPACK_IMPORTED_MODULE_0__.InstancedBufferGeometry {
-  constructor() {
-    super();
-    this.isLineSegmentsGeometry = true;
-    this.type = "LineSegmentsGeometry";
-    const positions = [-1, 2, 0, 1, 2, 0, -1, 1, 0, 1, 1, 0, -1, 0, 0, 1, 0, 0, -1, -1, 0, 1, -1, 0];
-    const uvs = [-1, 2, 1, 2, -1, 1, 1, 1, -1, -1, 1, -1, -1, -2, 1, -2];
-    const index = [0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5];
-    this.setIndex(index);
-    this.setAttribute("position", new three__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute(positions, 3));
-    this.setAttribute("uv", new three__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute(uvs, 2));
-  }
-  applyMatrix4(matrix) {
-    const start = this.attributes.instanceStart;
-    const end = this.attributes.instanceEnd;
-    if (start !== void 0) {
-      start.applyMatrix4(matrix);
-      end.applyMatrix4(matrix);
-      start.needsUpdate = true;
-    }
-    if (this.boundingBox !== null) {
-      this.computeBoundingBox();
-    }
-    if (this.boundingSphere !== null) {
-      this.computeBoundingSphere();
-    }
-    return this;
-  }
-  setPositions(array) {
-    let lineSegments;
-    if (array instanceof Float32Array) {
-      lineSegments = array;
-    } else if (Array.isArray(array)) {
-      lineSegments = new Float32Array(array);
-    }
-    const instanceBuffer = new three__WEBPACK_IMPORTED_MODULE_0__.InstancedInterleavedBuffer(lineSegments, 6, 1);
-    this.setAttribute("instanceStart", new three__WEBPACK_IMPORTED_MODULE_0__.InterleavedBufferAttribute(instanceBuffer, 3, 0));
-    this.setAttribute("instanceEnd", new three__WEBPACK_IMPORTED_MODULE_0__.InterleavedBufferAttribute(instanceBuffer, 3, 3));
-    this.computeBoundingBox();
-    this.computeBoundingSphere();
-    return this;
-  }
-  setColors(array) {
-    let colors;
-    if (array instanceof Float32Array) {
-      colors = array;
-    } else if (Array.isArray(array)) {
-      colors = new Float32Array(array);
-    }
-    const instanceColorBuffer = new three__WEBPACK_IMPORTED_MODULE_0__.InstancedInterleavedBuffer(colors, 6, 1);
-    this.setAttribute("instanceColorStart", new three__WEBPACK_IMPORTED_MODULE_0__.InterleavedBufferAttribute(instanceColorBuffer, 3, 0));
-    this.setAttribute("instanceColorEnd", new three__WEBPACK_IMPORTED_MODULE_0__.InterleavedBufferAttribute(instanceColorBuffer, 3, 3));
-    return this;
-  }
-  fromWireframeGeometry(geometry) {
-    this.setPositions(geometry.attributes.position.array);
-    return this;
-  }
-  fromEdgesGeometry(geometry) {
-    this.setPositions(geometry.attributes.position.array);
-    return this;
-  }
-  fromMesh(mesh) {
-    this.fromWireframeGeometry(new three__WEBPACK_IMPORTED_MODULE_0__.WireframeGeometry(mesh.geometry));
-    return this;
-  }
-  fromLineSegments(lineSegments) {
-    const geometry = lineSegments.geometry;
-    this.setPositions(geometry.attributes.position.array);
-    return this;
-  }
-  computeBoundingBox() {
-    if (this.boundingBox === null) {
-      this.boundingBox = new three__WEBPACK_IMPORTED_MODULE_0__.Box3();
-    }
-    const start = this.attributes.instanceStart;
-    const end = this.attributes.instanceEnd;
-    if (start !== void 0 && end !== void 0) {
-      this.boundingBox.setFromBufferAttribute(start);
-      _box.setFromBufferAttribute(end);
-      this.boundingBox.union(_box);
-    }
-  }
-  computeBoundingSphere() {
-    if (this.boundingSphere === null) {
-      this.boundingSphere = new three__WEBPACK_IMPORTED_MODULE_0__.Sphere();
-    }
-    if (this.boundingBox === null) {
-      this.computeBoundingBox();
-    }
-    const start = this.attributes.instanceStart;
-    const end = this.attributes.instanceEnd;
-    if (start !== void 0 && end !== void 0) {
-      const center = this.boundingSphere.center;
-      this.boundingBox.getCenter(center);
-      let maxRadiusSq = 0;
-      for (let i = 0, il = start.count; i < il; i++) {
-        _vector.fromBufferAttribute(start, i);
-        maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector));
-        _vector.fromBufferAttribute(end, i);
-        maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector));
-      }
-      this.boundingSphere.radius = Math.sqrt(maxRadiusSq);
-      if (isNaN(this.boundingSphere.radius)) {
-        console.error(
-          "THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.",
-          this
-        );
-      }
-    }
-  }
-  toJSON() {
-  }
-  applyMatrix(matrix) {
-    console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().");
-    return this.applyMatrix4(matrix);
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 44976:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "_": () => (/* binding */ DRACOLoader)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-
-const _taskCache = /* @__PURE__ */ new WeakMap();
-class DRACOLoader extends three__WEBPACK_IMPORTED_MODULE_0__.Loader {
-  constructor(manager) {
-    super(manager);
-    this.decoderPath = "";
-    this.decoderConfig = {};
-    this.decoderBinary = null;
-    this.decoderPending = null;
-    this.workerLimit = 4;
-    this.workerPool = [];
-    this.workerNextTaskID = 1;
-    this.workerSourceURL = "";
-    this.defaultAttributeIDs = {
-      position: "POSITION",
-      normal: "NORMAL",
-      color: "COLOR",
-      uv: "TEX_COORD"
-    };
-    this.defaultAttributeTypes = {
-      position: "Float32Array",
-      normal: "Float32Array",
-      color: "Float32Array",
-      uv: "Float32Array"
-    };
-  }
-  setDecoderPath(path) {
-    this.decoderPath = path;
-    return this;
-  }
-  setDecoderConfig(config) {
-    this.decoderConfig = config;
-    return this;
-  }
-  setWorkerLimit(workerLimit) {
-    this.workerLimit = workerLimit;
-    return this;
-  }
-  load(url, onLoad, onProgress, onError) {
-    const loader = new three__WEBPACK_IMPORTED_MODULE_0__.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(this.requestHeader);
-    loader.setWithCredentials(this.withCredentials);
-    loader.load(
-      url,
-      (buffer) => {
-        const taskConfig = {
-          attributeIDs: this.defaultAttributeIDs,
-          attributeTypes: this.defaultAttributeTypes,
-          useUniqueIDs: false
-        };
-        this.decodeGeometry(buffer, taskConfig).then(onLoad).catch(onError);
-      },
-      onProgress,
-      onError
-    );
-  }
-  /** @deprecated Kept for backward-compatibility with previous DRACOLoader versions. */
-  decodeDracoFile(buffer, callback, attributeIDs, attributeTypes) {
-    const taskConfig = {
-      attributeIDs: attributeIDs || this.defaultAttributeIDs,
-      attributeTypes: attributeTypes || this.defaultAttributeTypes,
-      useUniqueIDs: !!attributeIDs
-    };
-    this.decodeGeometry(buffer, taskConfig).then(callback);
-  }
-  decodeGeometry(buffer, taskConfig) {
-    for (const attribute in taskConfig.attributeTypes) {
-      const type = taskConfig.attributeTypes[attribute];
-      if (type.BYTES_PER_ELEMENT !== void 0) {
-        taskConfig.attributeTypes[attribute] = type.name;
-      }
-    }
-    const taskKey = JSON.stringify(taskConfig);
-    if (_taskCache.has(buffer)) {
-      const cachedTask = _taskCache.get(buffer);
-      if (cachedTask.key === taskKey) {
-        return cachedTask.promise;
-      } else if (buffer.byteLength === 0) {
-        throw new Error(
-          "THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred."
-        );
-      }
-    }
-    let worker;
-    const taskID = this.workerNextTaskID++;
-    const taskCost = buffer.byteLength;
-    const geometryPending = this._getWorker(taskID, taskCost).then((_worker) => {
-      worker = _worker;
-      return new Promise((resolve, reject) => {
-        worker._callbacks[taskID] = { resolve, reject };
-        worker.postMessage({ type: "decode", id: taskID, taskConfig, buffer }, [buffer]);
-      });
-    }).then((message) => this._createGeometry(message.geometry));
-    geometryPending.catch(() => true).then(() => {
-      if (worker && taskID) {
-        this._releaseTask(worker, taskID);
-      }
-    });
-    _taskCache.set(buffer, {
-      key: taskKey,
-      promise: geometryPending
-    });
-    return geometryPending;
-  }
-  _createGeometry(geometryData) {
-    const geometry = new three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry();
-    if (geometryData.index) {
-      geometry.setIndex(new three__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute(geometryData.index.array, 1));
-    }
-    for (let i = 0; i < geometryData.attributes.length; i++) {
-      const attribute = geometryData.attributes[i];
-      const name = attribute.name;
-      const array = attribute.array;
-      const itemSize = attribute.itemSize;
-      geometry.setAttribute(name, new three__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute(array, itemSize));
-    }
-    return geometry;
-  }
-  _loadLibrary(url, responseType) {
-    const loader = new three__WEBPACK_IMPORTED_MODULE_0__.FileLoader(this.manager);
-    loader.setPath(this.decoderPath);
-    loader.setResponseType(responseType);
-    loader.setWithCredentials(this.withCredentials);
-    return new Promise((resolve, reject) => {
-      loader.load(url, resolve, void 0, reject);
-    });
-  }
-  preload() {
-    this._initDecoder();
-    return this;
-  }
-  _initDecoder() {
-    if (this.decoderPending)
-      return this.decoderPending;
-    const useJS = typeof WebAssembly !== "object" || this.decoderConfig.type === "js";
-    const librariesPending = [];
-    if (useJS) {
-      librariesPending.push(this._loadLibrary("draco_decoder.js", "text"));
-    } else {
-      librariesPending.push(this._loadLibrary("draco_wasm_wrapper.js", "text"));
-      librariesPending.push(this._loadLibrary("draco_decoder.wasm", "arraybuffer"));
-    }
-    this.decoderPending = Promise.all(librariesPending).then((libraries) => {
-      const jsContent = libraries[0];
-      if (!useJS) {
-        this.decoderConfig.wasmBinary = libraries[1];
-      }
-      const fn = DRACOWorker.toString();
-      const body = [
-        "/* draco decoder */",
-        jsContent,
-        "",
-        "/* worker */",
-        fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}"))
-      ].join("\n");
-      this.workerSourceURL = URL.createObjectURL(new Blob([body]));
-    });
-    return this.decoderPending;
-  }
-  _getWorker(taskID, taskCost) {
-    return this._initDecoder().then(() => {
-      if (this.workerPool.length < this.workerLimit) {
-        const worker2 = new Worker(this.workerSourceURL);
-        worker2._callbacks = {};
-        worker2._taskCosts = {};
-        worker2._taskLoad = 0;
-        worker2.postMessage({ type: "init", decoderConfig: this.decoderConfig });
-        worker2.onmessage = function(e) {
-          const message = e.data;
-          switch (message.type) {
-            case "decode":
-              worker2._callbacks[message.id].resolve(message);
-              break;
-            case "error":
-              worker2._callbacks[message.id].reject(message);
-              break;
-            default:
-              console.error('THREE.DRACOLoader: Unexpected message, "' + message.type + '"');
-          }
-        };
-        this.workerPool.push(worker2);
-      } else {
-        this.workerPool.sort(function(a, b) {
-          return a._taskLoad > b._taskLoad ? -1 : 1;
-        });
-      }
-      const worker = this.workerPool[this.workerPool.length - 1];
-      worker._taskCosts[taskID] = taskCost;
-      worker._taskLoad += taskCost;
-      return worker;
-    });
-  }
-  _releaseTask(worker, taskID) {
-    worker._taskLoad -= worker._taskCosts[taskID];
-    delete worker._callbacks[taskID];
-    delete worker._taskCosts[taskID];
-  }
-  debug() {
-    console.log(
-      "Task load: ",
-      this.workerPool.map((worker) => worker._taskLoad)
-    );
-  }
-  dispose() {
-    for (let i = 0; i < this.workerPool.length; ++i) {
-      this.workerPool[i].terminate();
-    }
-    this.workerPool.length = 0;
-    return this;
-  }
-}
-function DRACOWorker() {
-  let decoderConfig;
-  let decoderPending;
-  onmessage = function(e) {
-    const message = e.data;
-    switch (message.type) {
-      case "init":
-        decoderConfig = message.decoderConfig;
-        decoderPending = new Promise(function(resolve) {
-          decoderConfig.onModuleLoaded = function(draco) {
-            resolve({ draco });
-          };
-          DracoDecoderModule(decoderConfig);
-        });
-        break;
-      case "decode":
-        const buffer = message.buffer;
-        const taskConfig = message.taskConfig;
-        decoderPending.then((module) => {
-          const draco = module.draco;
-          const decoder = new draco.Decoder();
-          const decoderBuffer = new draco.DecoderBuffer();
-          decoderBuffer.Init(new Int8Array(buffer), buffer.byteLength);
-          try {
-            const geometry = decodeGeometry(draco, decoder, decoderBuffer, taskConfig);
-            const buffers = geometry.attributes.map((attr) => attr.array.buffer);
-            if (geometry.index)
-              buffers.push(geometry.index.array.buffer);
-            self.postMessage({ type: "decode", id: message.id, geometry }, buffers);
-          } catch (error) {
-            console.error(error);
-            self.postMessage({ type: "error", id: message.id, error: error.message });
-          } finally {
-            draco.destroy(decoderBuffer);
-            draco.destroy(decoder);
-          }
-        });
-        break;
-    }
-  };
-  function decodeGeometry(draco, decoder, decoderBuffer, taskConfig) {
-    const attributeIDs = taskConfig.attributeIDs;
-    const attributeTypes = taskConfig.attributeTypes;
-    let dracoGeometry;
-    let decodingStatus;
-    const geometryType = decoder.GetEncodedGeometryType(decoderBuffer);
-    if (geometryType === draco.TRIANGULAR_MESH) {
-      dracoGeometry = new draco.Mesh();
-      decodingStatus = decoder.DecodeBufferToMesh(decoderBuffer, dracoGeometry);
-    } else if (geometryType === draco.POINT_CLOUD) {
-      dracoGeometry = new draco.PointCloud();
-      decodingStatus = decoder.DecodeBufferToPointCloud(decoderBuffer, dracoGeometry);
-    } else {
-      throw new Error("THREE.DRACOLoader: Unexpected geometry type.");
-    }
-    if (!decodingStatus.ok() || dracoGeometry.ptr === 0) {
-      throw new Error("THREE.DRACOLoader: Decoding failed: " + decodingStatus.error_msg());
-    }
-    const geometry = { index: null, attributes: [] };
-    for (const attributeName in attributeIDs) {
-      const attributeType = self[attributeTypes[attributeName]];
-      let attribute;
-      let attributeID;
-      if (taskConfig.useUniqueIDs) {
-        attributeID = attributeIDs[attributeName];
-        attribute = decoder.GetAttributeByUniqueId(dracoGeometry, attributeID);
-      } else {
-        attributeID = decoder.GetAttributeId(dracoGeometry, draco[attributeIDs[attributeName]]);
-        if (attributeID === -1)
-          continue;
-        attribute = decoder.GetAttribute(dracoGeometry, attributeID);
-      }
-      geometry.attributes.push(decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute));
-    }
-    if (geometryType === draco.TRIANGULAR_MESH) {
-      geometry.index = decodeIndex(draco, decoder, dracoGeometry);
-    }
-    draco.destroy(dracoGeometry);
-    return geometry;
-  }
-  function decodeIndex(draco, decoder, dracoGeometry) {
-    const numFaces = dracoGeometry.num_faces();
-    const numIndices = numFaces * 3;
-    const byteLength = numIndices * 4;
-    const ptr = draco._malloc(byteLength);
-    decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr);
-    const index = new Uint32Array(draco.HEAPF32.buffer, ptr, numIndices).slice();
-    draco._free(ptr);
-    return { array: index, itemSize: 1 };
-  }
-  function decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute) {
-    const numComponents = attribute.num_components();
-    const numPoints = dracoGeometry.num_points();
-    const numValues = numPoints * numComponents;
-    const byteLength = numValues * attributeType.BYTES_PER_ELEMENT;
-    const dataType = getDracoDataType(draco, attributeType);
-    const ptr = draco._malloc(byteLength);
-    decoder.GetAttributeDataArrayForAllPoints(dracoGeometry, attribute, dataType, byteLength, ptr);
-    const array = new attributeType(draco.HEAPF32.buffer, ptr, numValues).slice();
-    draco._free(ptr);
-    return {
-      name: attributeName,
-      array,
-      itemSize: numComponents
-    };
-  }
-  function getDracoDataType(draco, attributeType) {
-    switch (attributeType) {
-      case Float32Array:
-        return draco.DT_FLOAT32;
-      case Int8Array:
-        return draco.DT_INT8;
-      case Int16Array:
-        return draco.DT_INT16;
-      case Int32Array:
-        return draco.DT_INT32;
-      case Uint8Array:
-        return draco.DT_UINT8;
-      case Uint16Array:
-        return draco.DT_UINT16;
-      case Uint32Array:
-        return draco.DT_UINT32;
-    }
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 43953:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "y": () => (/* binding */ FBXLoader)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-/* harmony import */ var fflate__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(92672);
-/* harmony import */ var _curves_NURBSCurve_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(33785);
-
-
-
-let fbxTree;
-let connections;
-let sceneGraph;
-class FBXLoader extends three__WEBPACK_IMPORTED_MODULE_0__.Loader {
-  constructor(manager) {
-    super(manager);
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    const path = scope.path === "" ? three__WEBPACK_IMPORTED_MODULE_0__.LoaderUtils.extractUrlBase(url) : scope.path;
-    const loader = new three__WEBPACK_IMPORTED_MODULE_0__.FileLoader(this.manager);
-    loader.setPath(scope.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(scope.requestHeader);
-    loader.setWithCredentials(scope.withCredentials);
-    loader.load(
-      url,
-      function(buffer) {
-        try {
-          onLoad(scope.parse(buffer, path));
-        } catch (e) {
-          if (onError) {
-            onError(e);
-          } else {
-            console.error(e);
-          }
-          scope.manager.itemError(url);
-        }
-      },
-      onProgress,
-      onError
-    );
-  }
-  parse(FBXBuffer, path) {
-    if (isFbxFormatBinary(FBXBuffer)) {
-      fbxTree = new BinaryParser().parse(FBXBuffer);
-    } else {
-      const FBXText = convertArrayBufferToString(FBXBuffer);
-      if (!isFbxFormatASCII(FBXText)) {
-        throw new Error("THREE.FBXLoader: Unknown format.");
-      }
-      if (getFbxVersion(FBXText) < 7e3) {
-        throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + getFbxVersion(FBXText));
-      }
-      fbxTree = new TextParser().parse(FBXText);
-    }
-    const textureLoader = new three__WEBPACK_IMPORTED_MODULE_0__.TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);
-    return new FBXTreeParser(textureLoader, this.manager).parse(fbxTree);
-  }
-}
-class FBXTreeParser {
-  constructor(textureLoader, manager) {
-    this.textureLoader = textureLoader;
-    this.manager = manager;
-  }
-  parse() {
-    connections = this.parseConnections();
-    const images = this.parseImages();
-    const textures = this.parseTextures(images);
-    const materials = this.parseMaterials(textures);
-    const deformers = this.parseDeformers();
-    const geometryMap = new GeometryParser().parse(deformers);
-    this.parseScene(deformers, geometryMap, materials);
-    return sceneGraph;
-  }
-  // Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry )
-  // and details the connection type
-  parseConnections() {
-    const connectionMap = /* @__PURE__ */ new Map();
-    if ("Connections" in fbxTree) {
-      const rawConnections = fbxTree.Connections.connections;
-      rawConnections.forEach(function(rawConnection) {
-        const fromID = rawConnection[0];
-        const toID = rawConnection[1];
-        const relationship = rawConnection[2];
-        if (!connectionMap.has(fromID)) {
-          connectionMap.set(fromID, {
-            parents: [],
-            children: []
-          });
-        }
-        const parentRelationship = { ID: toID, relationship };
-        connectionMap.get(fromID).parents.push(parentRelationship);
-        if (!connectionMap.has(toID)) {
-          connectionMap.set(toID, {
-            parents: [],
-            children: []
-          });
-        }
-        const childRelationship = { ID: fromID, relationship };
-        connectionMap.get(toID).children.push(childRelationship);
-      });
-    }
-    return connectionMap;
-  }
-  // Parse FBXTree.Objects.Video for embedded image data
-  // These images are connected to textures in FBXTree.Objects.Textures
-  // via FBXTree.Connections.
-  parseImages() {
-    const images = {};
-    const blobs = {};
-    if ("Video" in fbxTree.Objects) {
-      const videoNodes = fbxTree.Objects.Video;
-      for (const nodeID in videoNodes) {
-        const videoNode = videoNodes[nodeID];
-        const id = parseInt(nodeID);
-        images[id] = videoNode.RelativeFilename || videoNode.Filename;
-        if ("Content" in videoNode) {
-          const arrayBufferContent = videoNode.Content instanceof ArrayBuffer && videoNode.Content.byteLength > 0;
-          const base64Content = typeof videoNode.Content === "string" && videoNode.Content !== "";
-          if (arrayBufferContent || base64Content) {
-            const image = this.parseImage(videoNodes[nodeID]);
-            blobs[videoNode.RelativeFilename || videoNode.Filename] = image;
-          }
-        }
-      }
-    }
-    for (const id in images) {
-      const filename = images[id];
-      if (blobs[filename] !== void 0)
-        images[id] = blobs[filename];
-      else
-        images[id] = images[id].split("\\").pop();
-    }
-    return images;
-  }
-  // Parse embedded image data in FBXTree.Video.Content
-  parseImage(videoNode) {
-    const content = videoNode.Content;
-    const fileName = videoNode.RelativeFilename || videoNode.Filename;
-    const extension = fileName.slice(fileName.lastIndexOf(".") + 1).toLowerCase();
-    let type;
-    switch (extension) {
-      case "bmp":
-        type = "image/bmp";
-        break;
-      case "jpg":
-      case "jpeg":
-        type = "image/jpeg";
-        break;
-      case "png":
-        type = "image/png";
-        break;
-      case "tif":
-        type = "image/tiff";
-        break;
-      case "tga":
-        if (this.manager.getHandler(".tga") === null) {
-          console.warn("FBXLoader: TGA loader not found, skipping ", fileName);
-        }
-        type = "image/tga";
-        break;
-      default:
-        console.warn('FBXLoader: Image type "' + extension + '" is not supported.');
-        return;
-    }
-    if (typeof content === "string") {
-      return "data:" + type + ";base64," + content;
-    } else {
-      const array = new Uint8Array(content);
-      return window.URL.createObjectURL(new Blob([array], { type }));
-    }
-  }
-  // Parse nodes in FBXTree.Objects.Texture
-  // These contain details such as UV scaling, cropping, rotation etc and are connected
-  // to images in FBXTree.Objects.Video
-  parseTextures(images) {
-    const textureMap = /* @__PURE__ */ new Map();
-    if ("Texture" in fbxTree.Objects) {
-      const textureNodes = fbxTree.Objects.Texture;
-      for (const nodeID in textureNodes) {
-        const texture = this.parseTexture(textureNodes[nodeID], images);
-        textureMap.set(parseInt(nodeID), texture);
-      }
-    }
-    return textureMap;
-  }
-  // Parse individual node in FBXTree.Objects.Texture
-  parseTexture(textureNode, images) {
-    const texture = this.loadTexture(textureNode, images);
-    texture.ID = textureNode.id;
-    texture.name = textureNode.attrName;
-    const wrapModeU = textureNode.WrapModeU;
-    const wrapModeV = textureNode.WrapModeV;
-    const valueU = wrapModeU !== void 0 ? wrapModeU.value : 0;
-    const valueV = wrapModeV !== void 0 ? wrapModeV.value : 0;
-    texture.wrapS = valueU === 0 ? three__WEBPACK_IMPORTED_MODULE_0__.RepeatWrapping : three__WEBPACK_IMPORTED_MODULE_0__.ClampToEdgeWrapping;
-    texture.wrapT = valueV === 0 ? three__WEBPACK_IMPORTED_MODULE_0__.RepeatWrapping : three__WEBPACK_IMPORTED_MODULE_0__.ClampToEdgeWrapping;
-    if ("Scaling" in textureNode) {
-      const values = textureNode.Scaling.value;
-      texture.repeat.x = values[0];
-      texture.repeat.y = values[1];
-    }
-    return texture;
-  }
-  // load a texture specified as a blob or data URI, or via an external URL using TextureLoader
-  loadTexture(textureNode, images) {
-    let fileName;
-    const currentPath = this.textureLoader.path;
-    const children = connections.get(textureNode.id).children;
-    if (children !== void 0 && children.length > 0 && images[children[0].ID] !== void 0) {
-      fileName = images[children[0].ID];
-      if (fileName.indexOf("blob:") === 0 || fileName.indexOf("data:") === 0) {
-        this.textureLoader.setPath(void 0);
-      }
-    }
-    let texture;
-    const extension = textureNode.FileName.slice(-3).toLowerCase();
-    if (extension === "tga") {
-      const loader = this.manager.getHandler(".tga");
-      if (loader === null) {
-        console.warn("FBXLoader: TGA loader not found, creating placeholder texture for", textureNode.RelativeFilename);
-        texture = new three__WEBPACK_IMPORTED_MODULE_0__.Texture();
-      } else {
-        loader.setPath(this.textureLoader.path);
-        texture = loader.load(fileName);
-      }
-    } else if (extension === "psd") {
-      console.warn(
-        "FBXLoader: PSD textures are not supported, creating placeholder texture for",
-        textureNode.RelativeFilename
-      );
-      texture = new three__WEBPACK_IMPORTED_MODULE_0__.Texture();
-    } else {
-      texture = this.textureLoader.load(fileName);
-    }
-    this.textureLoader.setPath(currentPath);
-    return texture;
-  }
-  // Parse nodes in FBXTree.Objects.Material
-  parseMaterials(textureMap) {
-    const materialMap = /* @__PURE__ */ new Map();
-    if ("Material" in fbxTree.Objects) {
-      const materialNodes = fbxTree.Objects.Material;
-      for (const nodeID in materialNodes) {
-        const material = this.parseMaterial(materialNodes[nodeID], textureMap);
-        if (material !== null)
-          materialMap.set(parseInt(nodeID), material);
-      }
-    }
-    return materialMap;
-  }
-  // Parse single node in FBXTree.Objects.Material
-  // Materials are connected to texture maps in FBXTree.Objects.Textures
-  // FBX format currently only supports Lambert and Phong shading models
-  parseMaterial(materialNode, textureMap) {
-    const ID = materialNode.id;
-    const name = materialNode.attrName;
-    let type = materialNode.ShadingModel;
-    if (typeof type === "object") {
-      type = type.value;
-    }
-    if (!connections.has(ID))
-      return null;
-    const parameters = this.parseParameters(materialNode, textureMap, ID);
-    let material;
-    switch (type.toLowerCase()) {
-      case "phong":
-        material = new three__WEBPACK_IMPORTED_MODULE_0__.MeshPhongMaterial();
-        break;
-      case "lambert":
-        material = new three__WEBPACK_IMPORTED_MODULE_0__.MeshLambertMaterial();
-        break;
-      default:
-        console.warn('THREE.FBXLoader: unknown material type "%s". Defaulting to MeshPhongMaterial.', type);
-        material = new three__WEBPACK_IMPORTED_MODULE_0__.MeshPhongMaterial();
-        break;
-    }
-    material.setValues(parameters);
-    material.name = name;
-    return material;
-  }
-  // Parse FBX material and return parameters suitable for a three.js material
-  // Also parse the texture map and return any textures associated with the material
-  parseParameters(materialNode, textureMap, ID) {
-    const parameters = {};
-    if (materialNode.BumpFactor) {
-      parameters.bumpScale = materialNode.BumpFactor.value;
-    }
-    if (materialNode.Diffuse) {
-      parameters.color = new three__WEBPACK_IMPORTED_MODULE_0__.Color().fromArray(materialNode.Diffuse.value);
-    } else if (materialNode.DiffuseColor && (materialNode.DiffuseColor.type === "Color" || materialNode.DiffuseColor.type === "ColorRGB")) {
-      parameters.color = new three__WEBPACK_IMPORTED_MODULE_0__.Color().fromArray(materialNode.DiffuseColor.value);
-    }
-    if (materialNode.DisplacementFactor) {
-      parameters.displacementScale = materialNode.DisplacementFactor.value;
-    }
-    if (materialNode.Emissive) {
-      parameters.emissive = new three__WEBPACK_IMPORTED_MODULE_0__.Color().fromArray(materialNode.Emissive.value);
-    } else if (materialNode.EmissiveColor && (materialNode.EmissiveColor.type === "Color" || materialNode.EmissiveColor.type === "ColorRGB")) {
-      parameters.emissive = new three__WEBPACK_IMPORTED_MODULE_0__.Color().fromArray(materialNode.EmissiveColor.value);
-    }
-    if (materialNode.EmissiveFactor) {
-      parameters.emissiveIntensity = parseFloat(materialNode.EmissiveFactor.value);
-    }
-    if (materialNode.Opacity) {
-      parameters.opacity = parseFloat(materialNode.Opacity.value);
-    }
-    if (parameters.opacity < 1) {
-      parameters.transparent = true;
-    }
-    if (materialNode.ReflectionFactor) {
-      parameters.reflectivity = materialNode.ReflectionFactor.value;
-    }
-    if (materialNode.Shininess) {
-      parameters.shininess = materialNode.Shininess.value;
-    }
-    if (materialNode.Specular) {
-      parameters.specular = new three__WEBPACK_IMPORTED_MODULE_0__.Color().fromArray(materialNode.Specular.value);
-    } else if (materialNode.SpecularColor && materialNode.SpecularColor.type === "Color") {
-      parameters.specular = new three__WEBPACK_IMPORTED_MODULE_0__.Color().fromArray(materialNode.SpecularColor.value);
-    }
-    const scope = this;
-    connections.get(ID).children.forEach(function(child) {
-      const type = child.relationship;
-      switch (type) {
-        case "Bump":
-          parameters.bumpMap = scope.getTexture(textureMap, child.ID);
-          break;
-        case "Maya|TEX_ao_map":
-          parameters.aoMap = scope.getTexture(textureMap, child.ID);
-          break;
-        case "DiffuseColor":
-        case "Maya|TEX_color_map":
-          parameters.map = scope.getTexture(textureMap, child.ID);
-          if (parameters.map !== void 0) {
-            if ("colorSpace" in parameters.map)
-              parameters.map.colorSpace = "srgb";
-            else
-              parameters.map.encoding = 3001;
-          }
-          break;
-        case "DisplacementColor":
-          parameters.displacementMap = scope.getTexture(textureMap, child.ID);
-          break;
-        case "EmissiveColor":
-          parameters.emissiveMap = scope.getTexture(textureMap, child.ID);
-          if (parameters.emissiveMap !== void 0) {
-            if ("colorSpace" in parameters.emissiveMap)
-              parameters.emissiveMap.colorSpace = "srgb";
-            else
-              parameters.emissiveMap.encoding = 3001;
-          }
-          break;
-        case "NormalMap":
-        case "Maya|TEX_normal_map":
-          parameters.normalMap = scope.getTexture(textureMap, child.ID);
-          break;
-        case "ReflectionColor":
-          parameters.envMap = scope.getTexture(textureMap, child.ID);
-          if (parameters.envMap !== void 0) {
-            parameters.envMap.mapping = three__WEBPACK_IMPORTED_MODULE_0__.EquirectangularReflectionMapping;
-            if ("colorSpace" in parameters.envMap)
-              parameters.envMap.colorSpace = "srgb";
-            else
-              parameters.envMap.encoding = 3001;
-          }
-          break;
-        case "SpecularColor":
-          parameters.specularMap = scope.getTexture(textureMap, child.ID);
-          if (parameters.specularMap !== void 0) {
-            if ("colorSpace" in parameters.specularMap)
-              parameters.specularMap.colorSpace = "srgb";
-            else
-              parameters.specularMap.encoding = 3001;
-          }
-          break;
-        case "TransparentColor":
-        case "TransparencyFactor":
-          parameters.alphaMap = scope.getTexture(textureMap, child.ID);
-          parameters.transparent = true;
-          break;
-        case "AmbientColor":
-        case "ShininessExponent":
-        case "SpecularFactor":
-        case "VectorDisplacementColor":
-        default:
-          console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.", type);
-          break;
-      }
-    });
-    return parameters;
-  }
-  // get a texture from the textureMap for use by a material.
-  getTexture(textureMap, id) {
-    if ("LayeredTexture" in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture) {
-      console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.");
-      id = connections.get(id).children[0].ID;
-    }
-    return textureMap.get(id);
-  }
-  // Parse nodes in FBXTree.Objects.Deformer
-  // Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here
-  // Generates map of Skeleton-like objects for use later when generating and binding skeletons.
-  parseDeformers() {
-    const skeletons = {};
-    const morphTargets = {};
-    if ("Deformer" in fbxTree.Objects) {
-      const DeformerNodes = fbxTree.Objects.Deformer;
-      for (const nodeID in DeformerNodes) {
-        const deformerNode = DeformerNodes[nodeID];
-        const relationships = connections.get(parseInt(nodeID));
-        if (deformerNode.attrType === "Skin") {
-          const skeleton = this.parseSkeleton(relationships, DeformerNodes);
-          skeleton.ID = nodeID;
-          if (relationships.parents.length > 1) {
-            console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported.");
-          }
-          skeleton.geometryID = relationships.parents[0].ID;
-          skeletons[nodeID] = skeleton;
-        } else if (deformerNode.attrType === "BlendShape") {
-          const morphTarget = {
-            id: nodeID
-          };
-          morphTarget.rawTargets = this.parseMorphTargets(relationships, DeformerNodes);
-          morphTarget.id = nodeID;
-          if (relationships.parents.length > 1) {
-            console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported.");
-          }
-          morphTargets[nodeID] = morphTarget;
-        }
-      }
-    }
-    return {
-      skeletons,
-      morphTargets
-    };
-  }
-  // Parse single nodes in FBXTree.Objects.Deformer
-  // The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster'
-  // Each skin node represents a skeleton and each cluster node represents a bone
-  parseSkeleton(relationships, deformerNodes) {
-    const rawBones = [];
-    relationships.children.forEach(function(child) {
-      const boneNode = deformerNodes[child.ID];
-      if (boneNode.attrType !== "Cluster")
-        return;
-      const rawBone = {
-        ID: child.ID,
-        indices: [],
-        weights: [],
-        transformLink: new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4().fromArray(boneNode.TransformLink.a)
-        // transform: new Matrix4().fromArray( boneNode.Transform.a ),
-        // linkMode: boneNode.Mode,
-      };
-      if ("Indexes" in boneNode) {
-        rawBone.indices = boneNode.Indexes.a;
-        rawBone.weights = boneNode.Weights.a;
-      }
-      rawBones.push(rawBone);
-    });
-    return {
-      rawBones,
-      bones: []
-    };
-  }
-  // The top level morph deformer node has type "BlendShape" and sub nodes have type "BlendShapeChannel"
-  parseMorphTargets(relationships, deformerNodes) {
-    const rawMorphTargets = [];
-    for (let i = 0; i < relationships.children.length; i++) {
-      const child = relationships.children[i];
-      const morphTargetNode = deformerNodes[child.ID];
-      const rawMorphTarget = {
-        name: morphTargetNode.attrName,
-        initialWeight: morphTargetNode.DeformPercent,
-        id: morphTargetNode.id,
-        fullWeights: morphTargetNode.FullWeights.a
-      };
-      if (morphTargetNode.attrType !== "BlendShapeChannel")
-        return;
-      rawMorphTarget.geoID = connections.get(parseInt(child.ID)).children.filter(function(child2) {
-        return child2.relationship === void 0;
-      })[0].ID;
-      rawMorphTargets.push(rawMorphTarget);
-    }
-    return rawMorphTargets;
-  }
-  // create the main Group() to be returned by the loader
-  parseScene(deformers, geometryMap, materialMap) {
-    sceneGraph = new three__WEBPACK_IMPORTED_MODULE_0__.Group();
-    const modelMap = this.parseModels(deformers.skeletons, geometryMap, materialMap);
-    const modelNodes = fbxTree.Objects.Model;
-    const scope = this;
-    modelMap.forEach(function(model) {
-      const modelNode = modelNodes[model.ID];
-      scope.setLookAtProperties(model, modelNode);
-      const parentConnections = connections.get(model.ID).parents;
-      parentConnections.forEach(function(connection) {
-        const parent = modelMap.get(connection.ID);
-        if (parent !== void 0)
-          parent.add(model);
-      });
-      if (model.parent === null) {
-        sceneGraph.add(model);
-      }
-    });
-    this.bindSkeleton(deformers.skeletons, geometryMap, modelMap);
-    this.createAmbientLight();
-    sceneGraph.traverse(function(node) {
-      if (node.userData.transformData) {
-        if (node.parent) {
-          node.userData.transformData.parentMatrix = node.parent.matrix;
-          node.userData.transformData.parentMatrixWorld = node.parent.matrixWorld;
-        }
-        const transform = generateTransform(node.userData.transformData);
-        node.applyMatrix4(transform);
-        node.updateWorldMatrix();
-      }
-    });
-    const animations = new AnimationParser().parse();
-    if (sceneGraph.children.length === 1 && sceneGraph.children[0].isGroup) {
-      sceneGraph.children[0].animations = animations;
-      sceneGraph = sceneGraph.children[0];
-    }
-    sceneGraph.animations = animations;
-  }
-  // parse nodes in FBXTree.Objects.Model
-  parseModels(skeletons, geometryMap, materialMap) {
-    const modelMap = /* @__PURE__ */ new Map();
-    const modelNodes = fbxTree.Objects.Model;
-    for (const nodeID in modelNodes) {
-      const id = parseInt(nodeID);
-      const node = modelNodes[nodeID];
-      const relationships = connections.get(id);
-      let model = this.buildSkeleton(relationships, skeletons, id, node.attrName);
-      if (!model) {
-        switch (node.attrType) {
-          case "Camera":
-            model = this.createCamera(relationships);
-            break;
-          case "Light":
-            model = this.createLight(relationships);
-            break;
-          case "Mesh":
-            model = this.createMesh(relationships, geometryMap, materialMap);
-            break;
-          case "NurbsCurve":
-            model = this.createCurve(relationships, geometryMap);
-            break;
-          case "LimbNode":
-          case "Root":
-            model = new three__WEBPACK_IMPORTED_MODULE_0__.Bone();
-            break;
-          case "Null":
-          default:
-            model = new three__WEBPACK_IMPORTED_MODULE_0__.Group();
-            break;
-        }
-        model.name = node.attrName ? three__WEBPACK_IMPORTED_MODULE_0__.PropertyBinding.sanitizeNodeName(node.attrName) : "";
-        model.ID = id;
-      }
-      this.getTransformData(model, node);
-      modelMap.set(id, model);
-    }
-    return modelMap;
-  }
-  buildSkeleton(relationships, skeletons, id, name) {
-    let bone = null;
-    relationships.parents.forEach(function(parent) {
-      for (const ID in skeletons) {
-        const skeleton = skeletons[ID];
-        skeleton.rawBones.forEach(function(rawBone, i) {
-          if (rawBone.ID === parent.ID) {
-            const subBone = bone;
-            bone = new three__WEBPACK_IMPORTED_MODULE_0__.Bone();
-            bone.matrixWorld.copy(rawBone.transformLink);
-            bone.name = name ? three__WEBPACK_IMPORTED_MODULE_0__.PropertyBinding.sanitizeNodeName(name) : "";
-            bone.ID = id;
-            skeleton.bones[i] = bone;
-            if (subBone !== null) {
-              bone.add(subBone);
-            }
-          }
-        });
-      }
-    });
-    return bone;
-  }
-  // create a PerspectiveCamera or OrthographicCamera
-  createCamera(relationships) {
-    let model;
-    let cameraAttribute;
-    relationships.children.forEach(function(child) {
-      const attr = fbxTree.Objects.NodeAttribute[child.ID];
-      if (attr !== void 0) {
-        cameraAttribute = attr;
-      }
-    });
-    if (cameraAttribute === void 0) {
-      model = new three__WEBPACK_IMPORTED_MODULE_0__.Object3D();
-    } else {
-      let type = 0;
-      if (cameraAttribute.CameraProjectionType !== void 0 && cameraAttribute.CameraProjectionType.value === 1) {
-        type = 1;
-      }
-      let nearClippingPlane = 1;
-      if (cameraAttribute.NearPlane !== void 0) {
-        nearClippingPlane = cameraAttribute.NearPlane.value / 1e3;
-      }
-      let farClippingPlane = 1e3;
-      if (cameraAttribute.FarPlane !== void 0) {
-        farClippingPlane = cameraAttribute.FarPlane.value / 1e3;
-      }
-      let width = window.innerWidth;
-      let height = window.innerHeight;
-      if (cameraAttribute.AspectWidth !== void 0 && cameraAttribute.AspectHeight !== void 0) {
-        width = cameraAttribute.AspectWidth.value;
-        height = cameraAttribute.AspectHeight.value;
-      }
-      const aspect = width / height;
-      let fov = 45;
-      if (cameraAttribute.FieldOfView !== void 0) {
-        fov = cameraAttribute.FieldOfView.value;
-      }
-      const focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null;
-      switch (type) {
-        case 0:
-          model = new three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera(fov, aspect, nearClippingPlane, farClippingPlane);
-          if (focalLength !== null)
-            model.setFocalLength(focalLength);
-          break;
-        case 1:
-          model = new three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera(
-            -width / 2,
-            width / 2,
-            height / 2,
-            -height / 2,
-            nearClippingPlane,
-            farClippingPlane
-          );
-          break;
-        default:
-          console.warn("THREE.FBXLoader: Unknown camera type " + type + ".");
-          model = new three__WEBPACK_IMPORTED_MODULE_0__.Object3D();
-          break;
-      }
-    }
-    return model;
-  }
-  // Create a DirectionalLight, PointLight or SpotLight
-  createLight(relationships) {
-    let model;
-    let lightAttribute;
-    relationships.children.forEach(function(child) {
-      const attr = fbxTree.Objects.NodeAttribute[child.ID];
-      if (attr !== void 0) {
-        lightAttribute = attr;
-      }
-    });
-    if (lightAttribute === void 0) {
-      model = new three__WEBPACK_IMPORTED_MODULE_0__.Object3D();
-    } else {
-      let type;
-      if (lightAttribute.LightType === void 0) {
-        type = 0;
-      } else {
-        type = lightAttribute.LightType.value;
-      }
-      let color = 16777215;
-      if (lightAttribute.Color !== void 0) {
-        color = new three__WEBPACK_IMPORTED_MODULE_0__.Color().fromArray(lightAttribute.Color.value);
-      }
-      let intensity = lightAttribute.Intensity === void 0 ? 1 : lightAttribute.Intensity.value / 100;
-      if (lightAttribute.CastLightOnObject !== void 0 && lightAttribute.CastLightOnObject.value === 0) {
-        intensity = 0;
-      }
-      let distance = 0;
-      if (lightAttribute.FarAttenuationEnd !== void 0) {
-        if (lightAttribute.EnableFarAttenuation !== void 0 && lightAttribute.EnableFarAttenuation.value === 0) {
-          distance = 0;
-        } else {
-          distance = lightAttribute.FarAttenuationEnd.value;
-        }
-      }
-      const decay = 1;
-      switch (type) {
-        case 0:
-          model = new three__WEBPACK_IMPORTED_MODULE_0__.PointLight(color, intensity, distance, decay);
-          break;
-        case 1:
-          model = new three__WEBPACK_IMPORTED_MODULE_0__.DirectionalLight(color, intensity);
-          break;
-        case 2:
-          let angle = Math.PI / 3;
-          if (lightAttribute.InnerAngle !== void 0) {
-            angle = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad(lightAttribute.InnerAngle.value);
-          }
-          let penumbra = 0;
-          if (lightAttribute.OuterAngle !== void 0) {
-            penumbra = three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad(lightAttribute.OuterAngle.value);
-            penumbra = Math.max(penumbra, 1);
-          }
-          model = new three__WEBPACK_IMPORTED_MODULE_0__.SpotLight(color, intensity, distance, angle, penumbra, decay);
-          break;
-        default:
-          console.warn(
-            "THREE.FBXLoader: Unknown light type " + lightAttribute.LightType.value + ", defaulting to a PointLight."
-          );
-          model = new three__WEBPACK_IMPORTED_MODULE_0__.PointLight(color, intensity);
-          break;
-      }
-      if (lightAttribute.CastShadows !== void 0 && lightAttribute.CastShadows.value === 1) {
-        model.castShadow = true;
-      }
-    }
-    return model;
-  }
-  createMesh(relationships, geometryMap, materialMap) {
-    let model;
-    let geometry = null;
-    let material = null;
-    const materials = [];
-    relationships.children.forEach(function(child) {
-      if (geometryMap.has(child.ID)) {
-        geometry = geometryMap.get(child.ID);
-      }
-      if (materialMap.has(child.ID)) {
-        materials.push(materialMap.get(child.ID));
-      }
-    });
-    if (materials.length > 1) {
-      material = materials;
-    } else if (materials.length > 0) {
-      material = materials[0];
-    } else {
-      material = new three__WEBPACK_IMPORTED_MODULE_0__.MeshPhongMaterial({ color: 13421772 });
-      materials.push(material);
-    }
-    if ("color" in geometry.attributes) {
-      materials.forEach(function(material2) {
-        material2.vertexColors = true;
-      });
-    }
-    if (geometry.FBX_Deformer) {
-      model = new three__WEBPACK_IMPORTED_MODULE_0__.SkinnedMesh(geometry, material);
-      model.normalizeSkinWeights();
-    } else {
-      model = new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(geometry, material);
-    }
-    return model;
-  }
-  createCurve(relationships, geometryMap) {
-    const geometry = relationships.children.reduce(function(geo, child) {
-      if (geometryMap.has(child.ID))
-        geo = geometryMap.get(child.ID);
-      return geo;
-    }, null);
-    const material = new three__WEBPACK_IMPORTED_MODULE_0__.LineBasicMaterial({ color: 3342591, linewidth: 1 });
-    return new three__WEBPACK_IMPORTED_MODULE_0__.Line(geometry, material);
-  }
-  // parse the model node for transform data
-  getTransformData(model, modelNode) {
-    const transformData = {};
-    if ("InheritType" in modelNode)
-      transformData.inheritType = parseInt(modelNode.InheritType.value);
-    if ("RotationOrder" in modelNode)
-      transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value);
-    else
-      transformData.eulerOrder = "ZYX";
-    if ("Lcl_Translation" in modelNode)
-      transformData.translation = modelNode.Lcl_Translation.value;
-    if ("PreRotation" in modelNode)
-      transformData.preRotation = modelNode.PreRotation.value;
-    if ("Lcl_Rotation" in modelNode)
-      transformData.rotation = modelNode.Lcl_Rotation.value;
-    if ("PostRotation" in modelNode)
-      transformData.postRotation = modelNode.PostRotation.value;
-    if ("Lcl_Scaling" in modelNode)
-      transformData.scale = modelNode.Lcl_Scaling.value;
-    if ("ScalingOffset" in modelNode)
-      transformData.scalingOffset = modelNode.ScalingOffset.value;
-    if ("ScalingPivot" in modelNode)
-      transformData.scalingPivot = modelNode.ScalingPivot.value;
-    if ("RotationOffset" in modelNode)
-      transformData.rotationOffset = modelNode.RotationOffset.value;
-    if ("RotationPivot" in modelNode)
-      transformData.rotationPivot = modelNode.RotationPivot.value;
-    model.userData.transformData = transformData;
-  }
-  setLookAtProperties(model, modelNode) {
-    if ("LookAtProperty" in modelNode) {
-      const children = connections.get(model.ID).children;
-      children.forEach(function(child) {
-        if (child.relationship === "LookAtProperty") {
-          const lookAtTarget = fbxTree.Objects.Model[child.ID];
-          if ("Lcl_Translation" in lookAtTarget) {
-            const pos = lookAtTarget.Lcl_Translation.value;
-            if (model.target !== void 0) {
-              model.target.position.fromArray(pos);
-              sceneGraph.add(model.target);
-            } else {
-              model.lookAt(new three__WEBPACK_IMPORTED_MODULE_0__.Vector3().fromArray(pos));
-            }
-          }
-        }
-      });
-    }
-  }
-  bindSkeleton(skeletons, geometryMap, modelMap) {
-    const bindMatrices = this.parsePoseNodes();
-    for (const ID in skeletons) {
-      const skeleton = skeletons[ID];
-      const parents = connections.get(parseInt(skeleton.ID)).parents;
-      parents.forEach(function(parent) {
-        if (geometryMap.has(parent.ID)) {
-          const geoID = parent.ID;
-          const geoRelationships = connections.get(geoID);
-          geoRelationships.parents.forEach(function(geoConnParent) {
-            if (modelMap.has(geoConnParent.ID)) {
-              const model = modelMap.get(geoConnParent.ID);
-              model.bind(new three__WEBPACK_IMPORTED_MODULE_0__.Skeleton(skeleton.bones), bindMatrices[geoConnParent.ID]);
-            }
-          });
-        }
-      });
-    }
-  }
-  parsePoseNodes() {
-    const bindMatrices = {};
-    if ("Pose" in fbxTree.Objects) {
-      const BindPoseNode = fbxTree.Objects.Pose;
-      for (const nodeID in BindPoseNode) {
-        if (BindPoseNode[nodeID].attrType === "BindPose" && BindPoseNode[nodeID].NbPoseNodes > 0) {
-          const poseNodes = BindPoseNode[nodeID].PoseNode;
-          if (Array.isArray(poseNodes)) {
-            poseNodes.forEach(function(poseNode) {
-              bindMatrices[poseNode.Node] = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4().fromArray(poseNode.Matrix.a);
-            });
-          } else {
-            bindMatrices[poseNodes.Node] = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4().fromArray(poseNodes.Matrix.a);
-          }
-        }
-      }
-    }
-    return bindMatrices;
-  }
-  // Parse ambient color in FBXTree.GlobalSettings - if it's not set to black (default), create an ambient light
-  createAmbientLight() {
-    if ("GlobalSettings" in fbxTree && "AmbientColor" in fbxTree.GlobalSettings) {
-      const ambientColor = fbxTree.GlobalSettings.AmbientColor.value;
-      const r = ambientColor[0];
-      const g = ambientColor[1];
-      const b = ambientColor[2];
-      if (r !== 0 || g !== 0 || b !== 0) {
-        const color = new three__WEBPACK_IMPORTED_MODULE_0__.Color(r, g, b);
-        sceneGraph.add(new three__WEBPACK_IMPORTED_MODULE_0__.AmbientLight(color, 1));
-      }
-    }
-  }
-}
-class GeometryParser {
-  // Parse nodes in FBXTree.Objects.Geometry
-  parse(deformers) {
-    const geometryMap = /* @__PURE__ */ new Map();
-    if ("Geometry" in fbxTree.Objects) {
-      const geoNodes = fbxTree.Objects.Geometry;
-      for (const nodeID in geoNodes) {
-        const relationships = connections.get(parseInt(nodeID));
-        const geo = this.parseGeometry(relationships, geoNodes[nodeID], deformers);
-        geometryMap.set(parseInt(nodeID), geo);
-      }
-    }
-    return geometryMap;
-  }
-  // Parse single node in FBXTree.Objects.Geometry
-  parseGeometry(relationships, geoNode, deformers) {
-    switch (geoNode.attrType) {
-      case "Mesh":
-        return this.parseMeshGeometry(relationships, geoNode, deformers);
-        break;
-      case "NurbsCurve":
-        return this.parseNurbsGeometry(geoNode);
-        break;
-    }
-  }
-  // Parse single node mesh geometry in FBXTree.Objects.Geometry
-  parseMeshGeometry(relationships, geoNode, deformers) {
-    const skeletons = deformers.skeletons;
-    const morphTargets = [];
-    const modelNodes = relationships.parents.map(function(parent) {
-      return fbxTree.Objects.Model[parent.ID];
-    });
-    if (modelNodes.length === 0)
-      return;
-    const skeleton = relationships.children.reduce(function(skeleton2, child) {
-      if (skeletons[child.ID] !== void 0)
-        skeleton2 = skeletons[child.ID];
-      return skeleton2;
-    }, null);
-    relationships.children.forEach(function(child) {
-      if (deformers.morphTargets[child.ID] !== void 0) {
-        morphTargets.push(deformers.morphTargets[child.ID]);
-      }
-    });
-    const modelNode = modelNodes[0];
-    const transformData = {};
-    if ("RotationOrder" in modelNode)
-      transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value);
-    if ("InheritType" in modelNode)
-      transformData.inheritType = parseInt(modelNode.InheritType.value);
-    if ("GeometricTranslation" in modelNode)
-      transformData.translation = modelNode.GeometricTranslation.value;
-    if ("GeometricRotation" in modelNode)
-      transformData.rotation = modelNode.GeometricRotation.value;
-    if ("GeometricScaling" in modelNode)
-      transformData.scale = modelNode.GeometricScaling.value;
-    const transform = generateTransform(transformData);
-    return this.genGeometry(geoNode, skeleton, morphTargets, transform);
-  }
-  // Generate a BufferGeometry from a node in FBXTree.Objects.Geometry
-  genGeometry(geoNode, skeleton, morphTargets, preTransform) {
-    const geo = new three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry();
-    if (geoNode.attrName)
-      geo.name = geoNode.attrName;
-    const geoInfo = this.parseGeoNode(geoNode, skeleton);
-    const buffers = this.genBuffers(geoInfo);
-    const positionAttribute = new three__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute(buffers.vertex, 3);
-    positionAttribute.applyMatrix4(preTransform);
-    geo.setAttribute("position", positionAttribute);
-    if (buffers.colors.length > 0) {
-      geo.setAttribute("color", new three__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute(buffers.colors, 3));
-    }
-    if (skeleton) {
-      geo.setAttribute("skinIndex", new three__WEBPACK_IMPORTED_MODULE_0__.Uint16BufferAttribute(buffers.weightsIndices, 4));
-      geo.setAttribute("skinWeight", new three__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute(buffers.vertexWeights, 4));
-      geo.FBX_Deformer = skeleton;
-    }
-    if (buffers.normal.length > 0) {
-      const normalMatrix = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix3().getNormalMatrix(preTransform);
-      const normalAttribute = new three__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute(buffers.normal, 3);
-      normalAttribute.applyNormalMatrix(normalMatrix);
-      geo.setAttribute("normal", normalAttribute);
-    }
-    buffers.uvs.forEach(function(uvBuffer, i) {
-      let name = "uv" + (i + 1).toString();
-      if (i === 0) {
-        name = "uv";
-      }
-      geo.setAttribute(name, new three__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute(buffers.uvs[i], 2));
-    });
-    if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") {
-      let prevMaterialIndex = buffers.materialIndex[0];
-      let startIndex = 0;
-      buffers.materialIndex.forEach(function(currentIndex, i) {
-        if (currentIndex !== prevMaterialIndex) {
-          geo.addGroup(startIndex, i - startIndex, prevMaterialIndex);
-          prevMaterialIndex = currentIndex;
-          startIndex = i;
-        }
-      });
-      if (geo.groups.length > 0) {
-        const lastGroup = geo.groups[geo.groups.length - 1];
-        const lastIndex = lastGroup.start + lastGroup.count;
-        if (lastIndex !== buffers.materialIndex.length) {
-          geo.addGroup(lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex);
-        }
-      }
-      if (geo.groups.length === 0) {
-        geo.addGroup(0, buffers.materialIndex.length, buffers.materialIndex[0]);
-      }
-    }
-    this.addMorphTargets(geo, geoNode, morphTargets, preTransform);
-    return geo;
-  }
-  parseGeoNode(geoNode, skeleton) {
-    const geoInfo = {};
-    geoInfo.vertexPositions = geoNode.Vertices !== void 0 ? geoNode.Vertices.a : [];
-    geoInfo.vertexIndices = geoNode.PolygonVertexIndex !== void 0 ? geoNode.PolygonVertexIndex.a : [];
-    if (geoNode.LayerElementColor) {
-      geoInfo.color = this.parseVertexColors(geoNode.LayerElementColor[0]);
-    }
-    if (geoNode.LayerElementMaterial) {
-      geoInfo.material = this.parseMaterialIndices(geoNode.LayerElementMaterial[0]);
-    }
-    if (geoNode.LayerElementNormal) {
-      geoInfo.normal = this.parseNormals(geoNode.LayerElementNormal[0]);
-    }
-    if (geoNode.LayerElementUV) {
-      geoInfo.uv = [];
-      let i = 0;
-      while (geoNode.LayerElementUV[i]) {
-        if (geoNode.LayerElementUV[i].UV) {
-          geoInfo.uv.push(this.parseUVs(geoNode.LayerElementUV[i]));
-        }
-        i++;
-      }
-    }
-    geoInfo.weightTable = {};
-    if (skeleton !== null) {
-      geoInfo.skeleton = skeleton;
-      skeleton.rawBones.forEach(function(rawBone, i) {
-        rawBone.indices.forEach(function(index, j) {
-          if (geoInfo.weightTable[index] === void 0)
-            geoInfo.weightTable[index] = [];
-          geoInfo.weightTable[index].push({
-            id: i,
-            weight: rawBone.weights[j]
-          });
-        });
-      });
-    }
-    return geoInfo;
-  }
-  genBuffers(geoInfo) {
-    const buffers = {
-      vertex: [],
-      normal: [],
-      colors: [],
-      uvs: [],
-      materialIndex: [],
-      vertexWeights: [],
-      weightsIndices: []
-    };
-    let polygonIndex = 0;
-    let faceLength = 0;
-    let displayedWeightsWarning = false;
-    let facePositionIndexes = [];
-    let faceNormals = [];
-    let faceColors = [];
-    let faceUVs = [];
-    let faceWeights = [];
-    let faceWeightIndices = [];
-    const scope = this;
-    geoInfo.vertexIndices.forEach(function(vertexIndex, polygonVertexIndex) {
-      let materialIndex;
-      let endOfFace = false;
-      if (vertexIndex < 0) {
-        vertexIndex = vertexIndex ^ -1;
-        endOfFace = true;
-      }
-      let weightIndices = [];
-      let weights = [];
-      facePositionIndexes.push(vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2);
-      if (geoInfo.color) {
-        const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color);
-        faceColors.push(data[0], data[1], data[2]);
-      }
-      if (geoInfo.skeleton) {
-        if (geoInfo.weightTable[vertexIndex] !== void 0) {
-          geoInfo.weightTable[vertexIndex].forEach(function(wt) {
-            weights.push(wt.weight);
-            weightIndices.push(wt.id);
-          });
-        }
-        if (weights.length > 4) {
-          if (!displayedWeightsWarning) {
-            console.warn(
-              "THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."
-            );
-            displayedWeightsWarning = true;
-          }
-          const wIndex = [0, 0, 0, 0];
-          const Weight = [0, 0, 0, 0];
-          weights.forEach(function(weight, weightIndex) {
-            let currentWeight = weight;
-            let currentIndex = weightIndices[weightIndex];
-            Weight.forEach(function(comparedWeight, comparedWeightIndex, comparedWeightArray) {
-              if (currentWeight > comparedWeight) {
-                comparedWeightArray[comparedWeightIndex] = currentWeight;
-                currentWeight = comparedWeight;
-                const tmp = wIndex[comparedWeightIndex];
-                wIndex[comparedWeightIndex] = currentIndex;
-                currentIndex = tmp;
-              }
-            });
-          });
-          weightIndices = wIndex;
-          weights = Weight;
-        }
-        while (weights.length < 4) {
-          weights.push(0);
-          weightIndices.push(0);
-        }
-        for (let i = 0; i < 4; ++i) {
-          faceWeights.push(weights[i]);
-          faceWeightIndices.push(weightIndices[i]);
-        }
-      }
-      if (geoInfo.normal) {
-        const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal);
-        faceNormals.push(data[0], data[1], data[2]);
-      }
-      if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") {
-        materialIndex = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material)[0];
-      }
-      if (geoInfo.uv) {
-        geoInfo.uv.forEach(function(uv, i) {
-          const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, uv);
-          if (faceUVs[i] === void 0) {
-            faceUVs[i] = [];
-          }
-          faceUVs[i].push(data[0]);
-          faceUVs[i].push(data[1]);
-        });
-      }
-      faceLength++;
-      if (endOfFace) {
-        scope.genFace(
-          buffers,
-          geoInfo,
-          facePositionIndexes,
-          materialIndex,
-          faceNormals,
-          faceColors,
-          faceUVs,
-          faceWeights,
-          faceWeightIndices,
-          faceLength
-        );
-        polygonIndex++;
-        faceLength = 0;
-        facePositionIndexes = [];
-        faceNormals = [];
-        faceColors = [];
-        faceUVs = [];
-        faceWeights = [];
-        faceWeightIndices = [];
-      }
-    });
-    return buffers;
-  }
-  // Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris
-  genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength) {
-    for (let i = 2; i < faceLength; i++) {
-      buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[0]]);
-      buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[1]]);
-      buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[2]]);
-      buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3]]);
-      buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3 + 1]]);
-      buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3 + 2]]);
-      buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3]]);
-      buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3 + 1]]);
-      buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3 + 2]]);
-      if (geoInfo.skeleton) {
-        buffers.vertexWeights.push(faceWeights[0]);
-        buffers.vertexWeights.push(faceWeights[1]);
-        buffers.vertexWeights.push(faceWeights[2]);
-        buffers.vertexWeights.push(faceWeights[3]);
-        buffers.vertexWeights.push(faceWeights[(i - 1) * 4]);
-        buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 1]);
-        buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 2]);
-        buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 3]);
-        buffers.vertexWeights.push(faceWeights[i * 4]);
-        buffers.vertexWeights.push(faceWeights[i * 4 + 1]);
-        buffers.vertexWeights.push(faceWeights[i * 4 + 2]);
-        buffers.vertexWeights.push(faceWeights[i * 4 + 3]);
-        buffers.weightsIndices.push(faceWeightIndices[0]);
-        buffers.weightsIndices.push(faceWeightIndices[1]);
-        buffers.weightsIndices.push(faceWeightIndices[2]);
-        buffers.weightsIndices.push(faceWeightIndices[3]);
-        buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4]);
-        buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 1]);
-        buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 2]);
-        buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 3]);
-        buffers.weightsIndices.push(faceWeightIndices[i * 4]);
-        buffers.weightsIndices.push(faceWeightIndices[i * 4 + 1]);
-        buffers.weightsIndices.push(faceWeightIndices[i * 4 + 2]);
-        buffers.weightsIndices.push(faceWeightIndices[i * 4 + 3]);
-      }
-      if (geoInfo.color) {
-        buffers.colors.push(faceColors[0]);
-        buffers.colors.push(faceColors[1]);
-        buffers.colors.push(faceColors[2]);
-        buffers.colors.push(faceColors[(i - 1) * 3]);
-        buffers.colors.push(faceColors[(i - 1) * 3 + 1]);
-        buffers.colors.push(faceColors[(i - 1) * 3 + 2]);
-        buffers.colors.push(faceColors[i * 3]);
-        buffers.colors.push(faceColors[i * 3 + 1]);
-        buffers.colors.push(faceColors[i * 3 + 2]);
-      }
-      if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") {
-        buffers.materialIndex.push(materialIndex);
-        buffers.materialIndex.push(materialIndex);
-        buffers.materialIndex.push(materialIndex);
-      }
-      if (geoInfo.normal) {
-        buffers.normal.push(faceNormals[0]);
-        buffers.normal.push(faceNormals[1]);
-        buffers.normal.push(faceNormals[2]);
-        buffers.normal.push(faceNormals[(i - 1) * 3]);
-        buffers.normal.push(faceNormals[(i - 1) * 3 + 1]);
-        buffers.normal.push(faceNormals[(i - 1) * 3 + 2]);
-        buffers.normal.push(faceNormals[i * 3]);
-        buffers.normal.push(faceNormals[i * 3 + 1]);
-        buffers.normal.push(faceNormals[i * 3 + 2]);
-      }
-      if (geoInfo.uv) {
-        geoInfo.uv.forEach(function(uv, j) {
-          if (buffers.uvs[j] === void 0)
-            buffers.uvs[j] = [];
-          buffers.uvs[j].push(faceUVs[j][0]);
-          buffers.uvs[j].push(faceUVs[j][1]);
-          buffers.uvs[j].push(faceUVs[j][(i - 1) * 2]);
-          buffers.uvs[j].push(faceUVs[j][(i - 1) * 2 + 1]);
-          buffers.uvs[j].push(faceUVs[j][i * 2]);
-          buffers.uvs[j].push(faceUVs[j][i * 2 + 1]);
-        });
-      }
-    }
-  }
-  addMorphTargets(parentGeo, parentGeoNode, morphTargets, preTransform) {
-    if (morphTargets.length === 0)
-      return;
-    parentGeo.morphTargetsRelative = true;
-    parentGeo.morphAttributes.position = [];
-    const scope = this;
-    morphTargets.forEach(function(morphTarget) {
-      morphTarget.rawTargets.forEach(function(rawTarget) {
-        const morphGeoNode = fbxTree.Objects.Geometry[rawTarget.geoID];
-        if (morphGeoNode !== void 0) {
-          scope.genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name);
-        }
-      });
-    });
-  }
-  // a morph geometry node is similar to a standard  node, and the node is also contained
-  // in FBXTree.Objects.Geometry, however it can only have attributes for position, normal
-  // and a special attribute Index defining which vertices of the original geometry are affected
-  // Normal and position attributes only have data for the vertices that are affected by the morph
-  genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, name) {
-    const vertexIndices = parentGeoNode.PolygonVertexIndex !== void 0 ? parentGeoNode.PolygonVertexIndex.a : [];
-    const morphPositionsSparse = morphGeoNode.Vertices !== void 0 ? morphGeoNode.Vertices.a : [];
-    const indices = morphGeoNode.Indexes !== void 0 ? morphGeoNode.Indexes.a : [];
-    const length = parentGeo.attributes.position.count * 3;
-    const morphPositions = new Float32Array(length);
-    for (let i = 0; i < indices.length; i++) {
-      const morphIndex = indices[i] * 3;
-      morphPositions[morphIndex] = morphPositionsSparse[i * 3];
-      morphPositions[morphIndex + 1] = morphPositionsSparse[i * 3 + 1];
-      morphPositions[morphIndex + 2] = morphPositionsSparse[i * 3 + 2];
-    }
-    const morphGeoInfo = {
-      vertexIndices,
-      vertexPositions: morphPositions
-    };
-    const morphBuffers = this.genBuffers(morphGeoInfo);
-    const positionAttribute = new three__WEBPACK_IMPORTED_MODULE_0__.Float32BufferAttribute(morphBuffers.vertex, 3);
-    positionAttribute.name = name || morphGeoNode.attrName;
-    positionAttribute.applyMatrix4(preTransform);
-    parentGeo.morphAttributes.position.push(positionAttribute);
-  }
-  // Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists
-  parseNormals(NormalNode) {
-    const mappingType = NormalNode.MappingInformationType;
-    const referenceType = NormalNode.ReferenceInformationType;
-    const buffer = NormalNode.Normals.a;
-    let indexBuffer = [];
-    if (referenceType === "IndexToDirect") {
-      if ("NormalIndex" in NormalNode) {
-        indexBuffer = NormalNode.NormalIndex.a;
-      } else if ("NormalsIndex" in NormalNode) {
-        indexBuffer = NormalNode.NormalsIndex.a;
-      }
-    }
-    return {
-      dataSize: 3,
-      buffer,
-      indices: indexBuffer,
-      mappingType,
-      referenceType
-    };
-  }
-  // Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists
-  parseUVs(UVNode) {
-    const mappingType = UVNode.MappingInformationType;
-    const referenceType = UVNode.ReferenceInformationType;
-    const buffer = UVNode.UV.a;
-    let indexBuffer = [];
-    if (referenceType === "IndexToDirect") {
-      indexBuffer = UVNode.UVIndex.a;
-    }
-    return {
-      dataSize: 2,
-      buffer,
-      indices: indexBuffer,
-      mappingType,
-      referenceType
-    };
-  }
-  // Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists
-  parseVertexColors(ColorNode) {
-    const mappingType = ColorNode.MappingInformationType;
-    const referenceType = ColorNode.ReferenceInformationType;
-    const buffer = ColorNode.Colors.a;
-    let indexBuffer = [];
-    if (referenceType === "IndexToDirect") {
-      indexBuffer = ColorNode.ColorIndex.a;
-    }
-    return {
-      dataSize: 4,
-      buffer,
-      indices: indexBuffer,
-      mappingType,
-      referenceType
-    };
-  }
-  // Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists
-  parseMaterialIndices(MaterialNode) {
-    const mappingType = MaterialNode.MappingInformationType;
-    const referenceType = MaterialNode.ReferenceInformationType;
-    if (mappingType === "NoMappingInformation") {
-      return {
-        dataSize: 1,
-        buffer: [0],
-        indices: [0],
-        mappingType: "AllSame",
-        referenceType
-      };
-    }
-    const materialIndexBuffer = MaterialNode.Materials.a;
-    const materialIndices = [];
-    for (let i = 0; i < materialIndexBuffer.length; ++i) {
-      materialIndices.push(i);
-    }
-    return {
-      dataSize: 1,
-      buffer: materialIndexBuffer,
-      indices: materialIndices,
-      mappingType,
-      referenceType
-    };
-  }
-  // Generate a NurbGeometry from a node in FBXTree.Objects.Geometry
-  parseNurbsGeometry(geoNode) {
-    if (_curves_NURBSCurve_js__WEBPACK_IMPORTED_MODULE_1__/* .NURBSCurve */ .e === void 0) {
-      console.error(
-        "THREE.FBXLoader: The loader relies on NURBSCurve for any nurbs present in the model. Nurbs will show up as empty geometry."
-      );
-      return new three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry();
-    }
-    const order = parseInt(geoNode.Order);
-    if (isNaN(order)) {
-      console.error("THREE.FBXLoader: Invalid Order %s given for geometry ID: %s", geoNode.Order, geoNode.id);
-      return new three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry();
-    }
-    const degree = order - 1;
-    const knots = geoNode.KnotVector.a;
-    const controlPoints = [];
-    const pointsValues = geoNode.Points.a;
-    for (let i = 0, l = pointsValues.length; i < l; i += 4) {
-      controlPoints.push(new three__WEBPACK_IMPORTED_MODULE_0__.Vector4().fromArray(pointsValues, i));
-    }
-    let startKnot, endKnot;
-    if (geoNode.Form === "Closed") {
-      controlPoints.push(controlPoints[0]);
-    } else if (geoNode.Form === "Periodic") {
-      startKnot = degree;
-      endKnot = knots.length - 1 - startKnot;
-      for (let i = 0; i < degree; ++i) {
-        controlPoints.push(controlPoints[i]);
-      }
-    }
-    const curve = new _curves_NURBSCurve_js__WEBPACK_IMPORTED_MODULE_1__/* .NURBSCurve */ .e(degree, knots, controlPoints, startKnot, endKnot);
-    const points = curve.getPoints(controlPoints.length * 12);
-    return new three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry().setFromPoints(points);
-  }
-}
-class AnimationParser {
-  // take raw animation clips and turn them into three.js animation clips
-  parse() {
-    const animationClips = [];
-    const rawClips = this.parseClips();
-    if (rawClips !== void 0) {
-      for (const key in rawClips) {
-        const rawClip = rawClips[key];
-        const clip = this.addClip(rawClip);
-        animationClips.push(clip);
-      }
-    }
-    return animationClips;
-  }
-  parseClips() {
-    if (fbxTree.Objects.AnimationCurve === void 0)
-      return void 0;
-    const curveNodesMap = this.parseAnimationCurveNodes();
-    this.parseAnimationCurves(curveNodesMap);
-    const layersMap = this.parseAnimationLayers(curveNodesMap);
-    const rawClips = this.parseAnimStacks(layersMap);
-    return rawClips;
-  }
-  // parse nodes in FBXTree.Objects.AnimationCurveNode
-  // each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation )
-  // and is referenced by an AnimationLayer
-  parseAnimationCurveNodes() {
-    const rawCurveNodes = fbxTree.Objects.AnimationCurveNode;
-    const curveNodesMap = /* @__PURE__ */ new Map();
-    for (const nodeID in rawCurveNodes) {
-      const rawCurveNode = rawCurveNodes[nodeID];
-      if (rawCurveNode.attrName.match(/S|R|T|DeformPercent/) !== null) {
-        const curveNode = {
-          id: rawCurveNode.id,
-          attr: rawCurveNode.attrName,
-          curves: {}
-        };
-        curveNodesMap.set(curveNode.id, curveNode);
-      }
-    }
-    return curveNodesMap;
-  }
-  // parse nodes in FBXTree.Objects.AnimationCurve and connect them up to
-  // previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated
-  // axis ( e.g. times and values of x rotation)
-  parseAnimationCurves(curveNodesMap) {
-    const rawCurves = fbxTree.Objects.AnimationCurve;
-    for (const nodeID in rawCurves) {
-      const animationCurve = {
-        id: rawCurves[nodeID].id,
-        times: rawCurves[nodeID].KeyTime.a.map(convertFBXTimeToSeconds),
-        values: rawCurves[nodeID].KeyValueFloat.a
-      };
-      const relationships = connections.get(animationCurve.id);
-      if (relationships !== void 0) {
-        const animationCurveID = relationships.parents[0].ID;
-        const animationCurveRelationship = relationships.parents[0].relationship;
-        if (animationCurveRelationship.match(/X/)) {
-          curveNodesMap.get(animationCurveID).curves["x"] = animationCurve;
-        } else if (animationCurveRelationship.match(/Y/)) {
-          curveNodesMap.get(animationCurveID).curves["y"] = animationCurve;
-        } else if (animationCurveRelationship.match(/Z/)) {
-          curveNodesMap.get(animationCurveID).curves["z"] = animationCurve;
-        } else if (animationCurveRelationship.match(/d|DeformPercent/) && curveNodesMap.has(animationCurveID)) {
-          curveNodesMap.get(animationCurveID).curves["morph"] = animationCurve;
-        }
-      }
-    }
-  }
-  // parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references
-  // to various AnimationCurveNodes and is referenced by an AnimationStack node
-  // note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack
-  parseAnimationLayers(curveNodesMap) {
-    const rawLayers = fbxTree.Objects.AnimationLayer;
-    const layersMap = /* @__PURE__ */ new Map();
-    for (const nodeID in rawLayers) {
-      const layerCurveNodes = [];
-      const connection = connections.get(parseInt(nodeID));
-      if (connection !== void 0) {
-        const children = connection.children;
-        children.forEach(function(child, i) {
-          if (curveNodesMap.has(child.ID)) {
-            const curveNode = curveNodesMap.get(child.ID);
-            if (curveNode.curves.x !== void 0 || curveNode.curves.y !== void 0 || curveNode.curves.z !== void 0) {
-              if (layerCurveNodes[i] === void 0) {
-                const modelID = connections.get(child.ID).parents.filter(function(parent) {
-                  return parent.relationship !== void 0;
-                })[0].ID;
-                if (modelID !== void 0) {
-                  const rawModel = fbxTree.Objects.Model[modelID.toString()];
-                  if (rawModel === void 0) {
-                    console.warn("THREE.FBXLoader: Encountered a unused curve.", child);
-                    return;
-                  }
-                  const node = {
-                    modelName: rawModel.attrName ? three__WEBPACK_IMPORTED_MODULE_0__.PropertyBinding.sanitizeNodeName(rawModel.attrName) : "",
-                    ID: rawModel.id,
-                    initialPosition: [0, 0, 0],
-                    initialRotation: [0, 0, 0],
-                    initialScale: [1, 1, 1]
-                  };
-                  sceneGraph.traverse(function(child2) {
-                    if (child2.ID === rawModel.id) {
-                      node.transform = child2.matrix;
-                      if (child2.userData.transformData)
-                        node.eulerOrder = child2.userData.transformData.eulerOrder;
-                    }
-                  });
-                  if (!node.transform)
-                    node.transform = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-                  if ("PreRotation" in rawModel)
-                    node.preRotation = rawModel.PreRotation.value;
-                  if ("PostRotation" in rawModel)
-                    node.postRotation = rawModel.PostRotation.value;
-                  layerCurveNodes[i] = node;
-                }
-              }
-              if (layerCurveNodes[i])
-                layerCurveNodes[i][curveNode.attr] = curveNode;
-            } else if (curveNode.curves.morph !== void 0) {
-              if (layerCurveNodes[i] === void 0) {
-                const deformerID = connections.get(child.ID).parents.filter(function(parent) {
-                  return parent.relationship !== void 0;
-                })[0].ID;
-                const morpherID = connections.get(deformerID).parents[0].ID;
-                const geoID = connections.get(morpherID).parents[0].ID;
-                const modelID = connections.get(geoID).parents[0].ID;
-                const rawModel = fbxTree.Objects.Model[modelID];
-                const node = {
-                  modelName: rawModel.attrName ? three__WEBPACK_IMPORTED_MODULE_0__.PropertyBinding.sanitizeNodeName(rawModel.attrName) : "",
-                  morphName: fbxTree.Objects.Deformer[deformerID].attrName
-                };
-                layerCurveNodes[i] = node;
-              }
-              layerCurveNodes[i][curveNode.attr] = curveNode;
-            }
-          }
-        });
-        layersMap.set(parseInt(nodeID), layerCurveNodes);
-      }
-    }
-    return layersMap;
-  }
-  // parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation
-  // hierarchy. Each Stack node will be used to create a AnimationClip
-  parseAnimStacks(layersMap) {
-    const rawStacks = fbxTree.Objects.AnimationStack;
-    const rawClips = {};
-    for (const nodeID in rawStacks) {
-      const children = connections.get(parseInt(nodeID)).children;
-      if (children.length > 1) {
-        console.warn(
-          "THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers."
-        );
-      }
-      const layer = layersMap.get(children[0].ID);
-      rawClips[nodeID] = {
-        name: rawStacks[nodeID].attrName,
-        layer
-      };
-    }
-    return rawClips;
-  }
-  addClip(rawClip) {
-    let tracks = [];
-    const scope = this;
-    rawClip.layer.forEach(function(rawTracks) {
-      tracks = tracks.concat(scope.generateTracks(rawTracks));
-    });
-    return new three__WEBPACK_IMPORTED_MODULE_0__.AnimationClip(rawClip.name, -1, tracks);
-  }
-  generateTracks(rawTracks) {
-    const tracks = [];
-    let initialPosition = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    let initialRotation = new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion();
-    let initialScale = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    if (rawTracks.transform)
-      rawTracks.transform.decompose(initialPosition, initialRotation, initialScale);
-    initialPosition = initialPosition.toArray();
-    initialRotation = new three__WEBPACK_IMPORTED_MODULE_0__.Euler().setFromQuaternion(initialRotation, rawTracks.eulerOrder).toArray();
-    initialScale = initialScale.toArray();
-    if (rawTracks.T !== void 0 && Object.keys(rawTracks.T.curves).length > 0) {
-      const positionTrack = this.generateVectorTrack(
-        rawTracks.modelName,
-        rawTracks.T.curves,
-        initialPosition,
-        "position"
-      );
-      if (positionTrack !== void 0)
-        tracks.push(positionTrack);
-    }
-    if (rawTracks.R !== void 0 && Object.keys(rawTracks.R.curves).length > 0) {
-      const rotationTrack = this.generateRotationTrack(
-        rawTracks.modelName,
-        rawTracks.R.curves,
-        initialRotation,
-        rawTracks.preRotation,
-        rawTracks.postRotation,
-        rawTracks.eulerOrder
-      );
-      if (rotationTrack !== void 0)
-        tracks.push(rotationTrack);
-    }
-    if (rawTracks.S !== void 0 && Object.keys(rawTracks.S.curves).length > 0) {
-      const scaleTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.S.curves, initialScale, "scale");
-      if (scaleTrack !== void 0)
-        tracks.push(scaleTrack);
-    }
-    if (rawTracks.DeformPercent !== void 0) {
-      const morphTrack = this.generateMorphTrack(rawTracks);
-      if (morphTrack !== void 0)
-        tracks.push(morphTrack);
-    }
-    return tracks;
-  }
-  generateVectorTrack(modelName, curves, initialValue, type) {
-    const times = this.getTimesForAllAxes(curves);
-    const values = this.getKeyframeTrackValues(times, curves, initialValue);
-    return new three__WEBPACK_IMPORTED_MODULE_0__.VectorKeyframeTrack(modelName + "." + type, times, values);
-  }
-  generateRotationTrack(modelName, curves, initialValue, preRotation, postRotation, eulerOrder) {
-    if (curves.x !== void 0) {
-      this.interpolateRotations(curves.x);
-      curves.x.values = curves.x.values.map(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad);
-    }
-    if (curves.y !== void 0) {
-      this.interpolateRotations(curves.y);
-      curves.y.values = curves.y.values.map(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad);
-    }
-    if (curves.z !== void 0) {
-      this.interpolateRotations(curves.z);
-      curves.z.values = curves.z.values.map(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad);
-    }
-    const times = this.getTimesForAllAxes(curves);
-    const values = this.getKeyframeTrackValues(times, curves, initialValue);
-    if (preRotation !== void 0) {
-      preRotation = preRotation.map(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad);
-      preRotation.push(eulerOrder);
-      preRotation = new three__WEBPACK_IMPORTED_MODULE_0__.Euler().fromArray(preRotation);
-      preRotation = new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion().setFromEuler(preRotation);
-    }
-    if (postRotation !== void 0) {
-      postRotation = postRotation.map(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad);
-      postRotation.push(eulerOrder);
-      postRotation = new three__WEBPACK_IMPORTED_MODULE_0__.Euler().fromArray(postRotation);
-      postRotation = new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion().setFromEuler(postRotation).invert();
-    }
-    const quaternion = new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion();
-    const euler = new three__WEBPACK_IMPORTED_MODULE_0__.Euler();
-    const quaternionValues = [];
-    for (let i = 0; i < values.length; i += 3) {
-      euler.set(values[i], values[i + 1], values[i + 2], eulerOrder);
-      quaternion.setFromEuler(euler);
-      if (preRotation !== void 0)
-        quaternion.premultiply(preRotation);
-      if (postRotation !== void 0)
-        quaternion.multiply(postRotation);
-      quaternion.toArray(quaternionValues, i / 3 * 4);
-    }
-    return new three__WEBPACK_IMPORTED_MODULE_0__.QuaternionKeyframeTrack(modelName + ".quaternion", times, quaternionValues);
-  }
-  generateMorphTrack(rawTracks) {
-    const curves = rawTracks.DeformPercent.curves.morph;
-    const values = curves.values.map(function(val) {
-      return val / 100;
-    });
-    const morphNum = sceneGraph.getObjectByName(rawTracks.modelName).morphTargetDictionary[rawTracks.morphName];
-    return new three__WEBPACK_IMPORTED_MODULE_0__.NumberKeyframeTrack(
-      rawTracks.modelName + ".morphTargetInfluences[" + morphNum + "]",
-      curves.times,
-      values
-    );
-  }
-  // For all animated objects, times are defined separately for each axis
-  // Here we'll combine the times into one sorted array without duplicates
-  getTimesForAllAxes(curves) {
-    let times = [];
-    if (curves.x !== void 0)
-      times = times.concat(curves.x.times);
-    if (curves.y !== void 0)
-      times = times.concat(curves.y.times);
-    if (curves.z !== void 0)
-      times = times.concat(curves.z.times);
-    times = times.sort(function(a, b) {
-      return a - b;
-    });
-    if (times.length > 1) {
-      let targetIndex = 1;
-      let lastValue = times[0];
-      for (let i = 1; i < times.length; i++) {
-        const currentValue = times[i];
-        if (currentValue !== lastValue) {
-          times[targetIndex] = currentValue;
-          lastValue = currentValue;
-          targetIndex++;
-        }
-      }
-      times = times.slice(0, targetIndex);
-    }
-    return times;
-  }
-  getKeyframeTrackValues(times, curves, initialValue) {
-    const prevValue = initialValue;
-    const values = [];
-    let xIndex = -1;
-    let yIndex = -1;
-    let zIndex = -1;
-    times.forEach(function(time) {
-      if (curves.x)
-        xIndex = curves.x.times.indexOf(time);
-      if (curves.y)
-        yIndex = curves.y.times.indexOf(time);
-      if (curves.z)
-        zIndex = curves.z.times.indexOf(time);
-      if (xIndex !== -1) {
-        const xValue = curves.x.values[xIndex];
-        values.push(xValue);
-        prevValue[0] = xValue;
-      } else {
-        values.push(prevValue[0]);
-      }
-      if (yIndex !== -1) {
-        const yValue = curves.y.values[yIndex];
-        values.push(yValue);
-        prevValue[1] = yValue;
-      } else {
-        values.push(prevValue[1]);
-      }
-      if (zIndex !== -1) {
-        const zValue = curves.z.values[zIndex];
-        values.push(zValue);
-        prevValue[2] = zValue;
-      } else {
-        values.push(prevValue[2]);
-      }
-    });
-    return values;
-  }
-  // Rotations are defined as Euler angles which can have values  of any size
-  // These will be converted to quaternions which don't support values greater than
-  // PI, so we'll interpolate large rotations
-  interpolateRotations(curve) {
-    for (let i = 1; i < curve.values.length; i++) {
-      const initialValue = curve.values[i - 1];
-      const valuesSpan = curve.values[i] - initialValue;
-      const absoluteSpan = Math.abs(valuesSpan);
-      if (absoluteSpan >= 180) {
-        const numSubIntervals = absoluteSpan / 180;
-        const step = valuesSpan / numSubIntervals;
-        let nextValue = initialValue + step;
-        const initialTime = curve.times[i - 1];
-        const timeSpan = curve.times[i] - initialTime;
-        const interval = timeSpan / numSubIntervals;
-        let nextTime = initialTime + interval;
-        const interpolatedTimes = [];
-        const interpolatedValues = [];
-        while (nextTime < curve.times[i]) {
-          interpolatedTimes.push(nextTime);
-          nextTime += interval;
-          interpolatedValues.push(nextValue);
-          nextValue += step;
-        }
-        curve.times = inject(curve.times, i, interpolatedTimes);
-        curve.values = inject(curve.values, i, interpolatedValues);
-      }
-    }
-  }
-}
-class TextParser {
-  getPrevNode() {
-    return this.nodeStack[this.currentIndent - 2];
-  }
-  getCurrentNode() {
-    return this.nodeStack[this.currentIndent - 1];
-  }
-  getCurrentProp() {
-    return this.currentProp;
-  }
-  pushStack(node) {
-    this.nodeStack.push(node);
-    this.currentIndent += 1;
-  }
-  popStack() {
-    this.nodeStack.pop();
-    this.currentIndent -= 1;
-  }
-  setCurrentProp(val, name) {
-    this.currentProp = val;
-    this.currentPropName = name;
-  }
-  parse(text) {
-    this.currentIndent = 0;
-    this.allNodes = new FBXTree();
-    this.nodeStack = [];
-    this.currentProp = [];
-    this.currentPropName = "";
-    const scope = this;
-    const split = text.split(/[\r\n]+/);
-    split.forEach(function(line, i) {
-      const matchComment = line.match(/^[\s\t]*;/);
-      const matchEmpty = line.match(/^[\s\t]*$/);
-      if (matchComment || matchEmpty)
-        return;
-      const matchBeginning = line.match("^\\t{" + scope.currentIndent + "}(\\w+):(.*){", "");
-      const matchProperty = line.match("^\\t{" + scope.currentIndent + "}(\\w+):[\\s\\t\\r\\n](.*)");
-      const matchEnd = line.match("^\\t{" + (scope.currentIndent - 1) + "}}");
-      if (matchBeginning) {
-        scope.parseNodeBegin(line, matchBeginning);
-      } else if (matchProperty) {
-        scope.parseNodeProperty(line, matchProperty, split[++i]);
-      } else if (matchEnd) {
-        scope.popStack();
-      } else if (line.match(/^[^\s\t}]/)) {
-        scope.parseNodePropertyContinued(line);
-      }
-    });
-    return this.allNodes;
-  }
-  parseNodeBegin(line, property) {
-    const nodeName = property[1].trim().replace(/^"/, "").replace(/"$/, "");
-    const nodeAttrs = property[2].split(",").map(function(attr) {
-      return attr.trim().replace(/^"/, "").replace(/"$/, "");
-    });
-    const node = { name: nodeName };
-    const attrs = this.parseNodeAttr(nodeAttrs);
-    const currentNode = this.getCurrentNode();
-    if (this.currentIndent === 0) {
-      this.allNodes.add(nodeName, node);
-    } else {
-      if (nodeName in currentNode) {
-        if (nodeName === "PoseNode") {
-          currentNode.PoseNode.push(node);
-        } else if (currentNode[nodeName].id !== void 0) {
-          currentNode[nodeName] = {};
-          currentNode[nodeName][currentNode[nodeName].id] = currentNode[nodeName];
-        }
-        if (attrs.id !== "")
-          currentNode[nodeName][attrs.id] = node;
-      } else if (typeof attrs.id === "number") {
-        currentNode[nodeName] = {};
-        currentNode[nodeName][attrs.id] = node;
-      } else if (nodeName !== "Properties70") {
-        if (nodeName === "PoseNode")
-          currentNode[nodeName] = [node];
-        else
-          currentNode[nodeName] = node;
-      }
-    }
-    if (typeof attrs.id === "number")
-      node.id = attrs.id;
-    if (attrs.name !== "")
-      node.attrName = attrs.name;
-    if (attrs.type !== "")
-      node.attrType = attrs.type;
-    this.pushStack(node);
-  }
-  parseNodeAttr(attrs) {
-    let id = attrs[0];
-    if (attrs[0] !== "") {
-      id = parseInt(attrs[0]);
-      if (isNaN(id)) {
-        id = attrs[0];
-      }
-    }
-    let name = "", type = "";
-    if (attrs.length > 1) {
-      name = attrs[1].replace(/^(\w+)::/, "");
-      type = attrs[2];
-    }
-    return { id, name, type };
-  }
-  parseNodeProperty(line, property, contentLine) {
-    let propName = property[1].replace(/^"/, "").replace(/"$/, "").trim();
-    let propValue = property[2].replace(/^"/, "").replace(/"$/, "").trim();
-    if (propName === "Content" && propValue === ",") {
-      propValue = contentLine.replace(/"/g, "").replace(/,$/, "").trim();
-    }
-    const currentNode = this.getCurrentNode();
-    const parentName = currentNode.name;
-    if (parentName === "Properties70") {
-      this.parseNodeSpecialProperty(line, propName, propValue);
-      return;
-    }
-    if (propName === "C") {
-      const connProps = propValue.split(",").slice(1);
-      const from = parseInt(connProps[0]);
-      const to = parseInt(connProps[1]);
-      let rest = propValue.split(",").slice(3);
-      rest = rest.map(function(elem) {
-        return elem.trim().replace(/^"/, "");
-      });
-      propName = "connections";
-      propValue = [from, to];
-      append(propValue, rest);
-      if (currentNode[propName] === void 0) {
-        currentNode[propName] = [];
-      }
-    }
-    if (propName === "Node")
-      currentNode.id = propValue;
-    if (propName in currentNode && Array.isArray(currentNode[propName])) {
-      currentNode[propName].push(propValue);
-    } else {
-      if (propName !== "a")
-        currentNode[propName] = propValue;
-      else
-        currentNode.a = propValue;
-    }
-    this.setCurrentProp(currentNode, propName);
-    if (propName === "a" && propValue.slice(-1) !== ",") {
-      currentNode.a = parseNumberArray(propValue);
-    }
-  }
-  parseNodePropertyContinued(line) {
-    const currentNode = this.getCurrentNode();
-    currentNode.a += line;
-    if (line.slice(-1) !== ",") {
-      currentNode.a = parseNumberArray(currentNode.a);
-    }
-  }
-  // parse "Property70"
-  parseNodeSpecialProperty(line, propName, propValue) {
-    const props = propValue.split('",').map(function(prop) {
-      return prop.trim().replace(/^\"/, "").replace(/\s/, "_");
-    });
-    const innerPropName = props[0];
-    const innerPropType1 = props[1];
-    const innerPropType2 = props[2];
-    const innerPropFlag = props[3];
-    let innerPropValue = props[4];
-    switch (innerPropType1) {
-      case "int":
-      case "enum":
-      case "bool":
-      case "ULongLong":
-      case "double":
-      case "Number":
-      case "FieldOfView":
-        innerPropValue = parseFloat(innerPropValue);
-        break;
-      case "Color":
-      case "ColorRGB":
-      case "Vector3D":
-      case "Lcl_Translation":
-      case "Lcl_Rotation":
-      case "Lcl_Scaling":
-        innerPropValue = parseNumberArray(innerPropValue);
-        break;
-    }
-    this.getPrevNode()[innerPropName] = {
-      type: innerPropType1,
-      type2: innerPropType2,
-      flag: innerPropFlag,
-      value: innerPropValue
-    };
-    this.setCurrentProp(this.getPrevNode(), innerPropName);
-  }
-}
-class BinaryParser {
-  parse(buffer) {
-    const reader = new BinaryReader(buffer);
-    reader.skip(23);
-    const version = reader.getUint32();
-    if (version < 6400) {
-      throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + version);
-    }
-    const allNodes = new FBXTree();
-    while (!this.endOfContent(reader)) {
-      const node = this.parseNode(reader, version);
-      if (node !== null)
-        allNodes.add(node.name, node);
-    }
-    return allNodes;
-  }
-  // Check if reader has reached the end of content.
-  endOfContent(reader) {
-    if (reader.size() % 16 === 0) {
-      return (reader.getOffset() + 160 + 16 & ~15) >= reader.size();
-    } else {
-      return reader.getOffset() + 160 + 16 >= reader.size();
-    }
-  }
-  // recursively parse nodes until the end of the file is reached
-  parseNode(reader, version) {
-    const node = {};
-    const endOffset = version >= 7500 ? reader.getUint64() : reader.getUint32();
-    const numProperties = version >= 7500 ? reader.getUint64() : reader.getUint32();
-    version >= 7500 ? reader.getUint64() : reader.getUint32();
-    const nameLen = reader.getUint8();
-    const name = reader.getString(nameLen);
-    if (endOffset === 0)
-      return null;
-    const propertyList = [];
-    for (let i = 0; i < numProperties; i++) {
-      propertyList.push(this.parseProperty(reader));
-    }
-    const id = propertyList.length > 0 ? propertyList[0] : "";
-    const attrName = propertyList.length > 1 ? propertyList[1] : "";
-    const attrType = propertyList.length > 2 ? propertyList[2] : "";
-    node.singleProperty = numProperties === 1 && reader.getOffset() === endOffset ? true : false;
-    while (endOffset > reader.getOffset()) {
-      const subNode = this.parseNode(reader, version);
-      if (subNode !== null)
-        this.parseSubNode(name, node, subNode);
-    }
-    node.propertyList = propertyList;
-    if (typeof id === "number")
-      node.id = id;
-    if (attrName !== "")
-      node.attrName = attrName;
-    if (attrType !== "")
-      node.attrType = attrType;
-    if (name !== "")
-      node.name = name;
-    return node;
-  }
-  parseSubNode(name, node, subNode) {
-    if (subNode.singleProperty === true) {
-      const value = subNode.propertyList[0];
-      if (Array.isArray(value)) {
-        node[subNode.name] = subNode;
-        subNode.a = value;
-      } else {
-        node[subNode.name] = value;
-      }
-    } else if (name === "Connections" && subNode.name === "C") {
-      const array = [];
-      subNode.propertyList.forEach(function(property, i) {
-        if (i !== 0)
-          array.push(property);
-      });
-      if (node.connections === void 0) {
-        node.connections = [];
-      }
-      node.connections.push(array);
-    } else if (subNode.name === "Properties70") {
-      const keys = Object.keys(subNode);
-      keys.forEach(function(key) {
-        node[key] = subNode[key];
-      });
-    } else if (name === "Properties70" && subNode.name === "P") {
-      let innerPropName = subNode.propertyList[0];
-      let innerPropType1 = subNode.propertyList[1];
-      const innerPropType2 = subNode.propertyList[2];
-      const innerPropFlag = subNode.propertyList[3];
-      let innerPropValue;
-      if (innerPropName.indexOf("Lcl ") === 0)
-        innerPropName = innerPropName.replace("Lcl ", "Lcl_");
-      if (innerPropType1.indexOf("Lcl ") === 0)
-        innerPropType1 = innerPropType1.replace("Lcl ", "Lcl_");
-      if (innerPropType1 === "Color" || innerPropType1 === "ColorRGB" || innerPropType1 === "Vector" || innerPropType1 === "Vector3D" || innerPropType1.indexOf("Lcl_") === 0) {
-        innerPropValue = [subNode.propertyList[4], subNode.propertyList[5], subNode.propertyList[6]];
-      } else {
-        innerPropValue = subNode.propertyList[4];
-      }
-      node[innerPropName] = {
-        type: innerPropType1,
-        type2: innerPropType2,
-        flag: innerPropFlag,
-        value: innerPropValue
-      };
-    } else if (node[subNode.name] === void 0) {
-      if (typeof subNode.id === "number") {
-        node[subNode.name] = {};
-        node[subNode.name][subNode.id] = subNode;
-      } else {
-        node[subNode.name] = subNode;
-      }
-    } else {
-      if (subNode.name === "PoseNode") {
-        if (!Array.isArray(node[subNode.name])) {
-          node[subNode.name] = [node[subNode.name]];
-        }
-        node[subNode.name].push(subNode);
-      } else if (node[subNode.name][subNode.id] === void 0) {
-        node[subNode.name][subNode.id] = subNode;
-      }
-    }
-  }
-  parseProperty(reader) {
-    const type = reader.getString(1);
-    let length;
-    switch (type) {
-      case "C":
-        return reader.getBoolean();
-      case "D":
-        return reader.getFloat64();
-      case "F":
-        return reader.getFloat32();
-      case "I":
-        return reader.getInt32();
-      case "L":
-        return reader.getInt64();
-      case "R":
-        length = reader.getUint32();
-        return reader.getArrayBuffer(length);
-      case "S":
-        length = reader.getUint32();
-        return reader.getString(length);
-      case "Y":
-        return reader.getInt16();
-      case "b":
-      case "c":
-      case "d":
-      case "f":
-      case "i":
-      case "l":
-        const arrayLength = reader.getUint32();
-        const encoding = reader.getUint32();
-        const compressedLength = reader.getUint32();
-        if (encoding === 0) {
-          switch (type) {
-            case "b":
-            case "c":
-              return reader.getBooleanArray(arrayLength);
-            case "d":
-              return reader.getFloat64Array(arrayLength);
-            case "f":
-              return reader.getFloat32Array(arrayLength);
-            case "i":
-              return reader.getInt32Array(arrayLength);
-            case "l":
-              return reader.getInt64Array(arrayLength);
-          }
-        }
-        const data = (0,fflate__WEBPACK_IMPORTED_MODULE_2__/* .unzlibSync */ .HT)(new Uint8Array(reader.getArrayBuffer(compressedLength)));
-        const reader2 = new BinaryReader(data.buffer);
-        switch (type) {
-          case "b":
-          case "c":
-            return reader2.getBooleanArray(arrayLength);
-          case "d":
-            return reader2.getFloat64Array(arrayLength);
-          case "f":
-            return reader2.getFloat32Array(arrayLength);
-          case "i":
-            return reader2.getInt32Array(arrayLength);
-          case "l":
-            return reader2.getInt64Array(arrayLength);
-        }
-      default:
-        throw new Error("THREE.FBXLoader: Unknown property type " + type);
-    }
-  }
-}
-class BinaryReader {
-  constructor(buffer, littleEndian) {
-    this.dv = new DataView(buffer);
-    this.offset = 0;
-    this.littleEndian = littleEndian !== void 0 ? littleEndian : true;
-  }
-  getOffset() {
-    return this.offset;
-  }
-  size() {
-    return this.dv.buffer.byteLength;
-  }
-  skip(length) {
-    this.offset += length;
-  }
-  // seems like true/false representation depends on exporter.
-  // true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54)
-  // then sees LSB.
-  getBoolean() {
-    return (this.getUint8() & 1) === 1;
-  }
-  getBooleanArray(size) {
-    const a = [];
-    for (let i = 0; i < size; i++) {
-      a.push(this.getBoolean());
-    }
-    return a;
-  }
-  getUint8() {
-    const value = this.dv.getUint8(this.offset);
-    this.offset += 1;
-    return value;
-  }
-  getInt16() {
-    const value = this.dv.getInt16(this.offset, this.littleEndian);
-    this.offset += 2;
-    return value;
-  }
-  getInt32() {
-    const value = this.dv.getInt32(this.offset, this.littleEndian);
-    this.offset += 4;
-    return value;
-  }
-  getInt32Array(size) {
-    const a = [];
-    for (let i = 0; i < size; i++) {
-      a.push(this.getInt32());
-    }
-    return a;
-  }
-  getUint32() {
-    const value = this.dv.getUint32(this.offset, this.littleEndian);
-    this.offset += 4;
-    return value;
-  }
-  // JavaScript doesn't support 64-bit integer so calculate this here
-  // 1 << 32 will return 1 so using multiply operation instead here.
-  // There's a possibility that this method returns wrong value if the value
-  // is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER.
-  // TODO: safely handle 64-bit integer
-  getInt64() {
-    let low, high;
-    if (this.littleEndian) {
-      low = this.getUint32();
-      high = this.getUint32();
-    } else {
-      high = this.getUint32();
-      low = this.getUint32();
-    }
-    if (high & 2147483648) {
-      high = ~high & 4294967295;
-      low = ~low & 4294967295;
-      if (low === 4294967295)
-        high = high + 1 & 4294967295;
-      low = low + 1 & 4294967295;
-      return -(high * 4294967296 + low);
-    }
-    return high * 4294967296 + low;
-  }
-  getInt64Array(size) {
-    const a = [];
-    for (let i = 0; i < size; i++) {
-      a.push(this.getInt64());
-    }
-    return a;
-  }
-  // Note: see getInt64() comment
-  getUint64() {
-    let low, high;
-    if (this.littleEndian) {
-      low = this.getUint32();
-      high = this.getUint32();
-    } else {
-      high = this.getUint32();
-      low = this.getUint32();
-    }
-    return high * 4294967296 + low;
-  }
-  getFloat32() {
-    const value = this.dv.getFloat32(this.offset, this.littleEndian);
-    this.offset += 4;
-    return value;
-  }
-  getFloat32Array(size) {
-    const a = [];
-    for (let i = 0; i < size; i++) {
-      a.push(this.getFloat32());
-    }
-    return a;
-  }
-  getFloat64() {
-    const value = this.dv.getFloat64(this.offset, this.littleEndian);
-    this.offset += 8;
-    return value;
-  }
-  getFloat64Array(size) {
-    const a = [];
-    for (let i = 0; i < size; i++) {
-      a.push(this.getFloat64());
-    }
-    return a;
-  }
-  getArrayBuffer(size) {
-    const value = this.dv.buffer.slice(this.offset, this.offset + size);
-    this.offset += size;
-    return value;
-  }
-  getString(size) {
-    let a = [];
-    for (let i = 0; i < size; i++) {
-      a[i] = this.getUint8();
-    }
-    const nullByte = a.indexOf(0);
-    if (nullByte >= 0)
-      a = a.slice(0, nullByte);
-    return three__WEBPACK_IMPORTED_MODULE_0__.LoaderUtils.decodeText(new Uint8Array(a));
-  }
-}
-class FBXTree {
-  add(key, val) {
-    this[key] = val;
-  }
-}
-function isFbxFormatBinary(buffer) {
-  const CORRECT = "Kaydara FBX Binary  \0";
-  return buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString(buffer, 0, CORRECT.length);
-}
-function isFbxFormatASCII(text) {
-  const CORRECT = [
-    "K",
-    "a",
-    "y",
-    "d",
-    "a",
-    "r",
-    "a",
-    "\\",
-    "F",
-    "B",
-    "X",
-    "\\",
-    "B",
-    "i",
-    "n",
-    "a",
-    "r",
-    "y",
-    "\\",
-    "\\"
-  ];
-  let cursor = 0;
-  function read(offset) {
-    const result = text[offset - 1];
-    text = text.slice(cursor + offset);
-    cursor++;
-    return result;
-  }
-  for (let i = 0; i < CORRECT.length; ++i) {
-    const num = read(1);
-    if (num === CORRECT[i]) {
-      return false;
-    }
-  }
-  return true;
-}
-function getFbxVersion(text) {
-  const versionRegExp = /FBXVersion: (\d+)/;
-  const match = text.match(versionRegExp);
-  if (match) {
-    const version = parseInt(match[1]);
-    return version;
-  }
-  throw new Error("THREE.FBXLoader: Cannot find the version number for the file given.");
-}
-function convertFBXTimeToSeconds(time) {
-  return time / 46186158e3;
-}
-const dataArray = [];
-function getData(polygonVertexIndex, polygonIndex, vertexIndex, infoObject) {
-  let index;
-  switch (infoObject.mappingType) {
-    case "ByPolygonVertex":
-      index = polygonVertexIndex;
-      break;
-    case "ByPolygon":
-      index = polygonIndex;
-      break;
-    case "ByVertice":
-      index = vertexIndex;
-      break;
-    case "AllSame":
-      index = infoObject.indices[0];
-      break;
-    default:
-      console.warn("THREE.FBXLoader: unknown attribute mapping type " + infoObject.mappingType);
-  }
-  if (infoObject.referenceType === "IndexToDirect")
-    index = infoObject.indices[index];
-  const from = index * infoObject.dataSize;
-  const to = from + infoObject.dataSize;
-  return slice(dataArray, infoObject.buffer, from, to);
-}
-const tempEuler = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Euler();
-const tempVec = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-function generateTransform(transformData) {
-  const lTranslationM = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  const lPreRotationM = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  const lRotationM = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  const lPostRotationM = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  const lScalingM = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  const lScalingPivotM = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  const lScalingOffsetM = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  const lRotationOffsetM = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  const lRotationPivotM = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  const lParentGX = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  const lParentLX = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  const lGlobalT = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  const inheritType = transformData.inheritType ? transformData.inheritType : 0;
-  if (transformData.translation)
-    lTranslationM.setPosition(tempVec.fromArray(transformData.translation));
-  if (transformData.preRotation) {
-    const array = transformData.preRotation.map(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad);
-    array.push(transformData.eulerOrder);
-    lPreRotationM.makeRotationFromEuler(tempEuler.fromArray(array));
-  }
-  if (transformData.rotation) {
-    const array = transformData.rotation.map(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad);
-    array.push(transformData.eulerOrder);
-    lRotationM.makeRotationFromEuler(tempEuler.fromArray(array));
-  }
-  if (transformData.postRotation) {
-    const array = transformData.postRotation.map(three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.degToRad);
-    array.push(transformData.eulerOrder);
-    lPostRotationM.makeRotationFromEuler(tempEuler.fromArray(array));
-    lPostRotationM.invert();
-  }
-  if (transformData.scale)
-    lScalingM.scale(tempVec.fromArray(transformData.scale));
-  if (transformData.scalingOffset)
-    lScalingOffsetM.setPosition(tempVec.fromArray(transformData.scalingOffset));
-  if (transformData.scalingPivot)
-    lScalingPivotM.setPosition(tempVec.fromArray(transformData.scalingPivot));
-  if (transformData.rotationOffset)
-    lRotationOffsetM.setPosition(tempVec.fromArray(transformData.rotationOffset));
-  if (transformData.rotationPivot)
-    lRotationPivotM.setPosition(tempVec.fromArray(transformData.rotationPivot));
-  if (transformData.parentMatrixWorld) {
-    lParentLX.copy(transformData.parentMatrix);
-    lParentGX.copy(transformData.parentMatrixWorld);
-  }
-  const lLRM = lPreRotationM.clone().multiply(lRotationM).multiply(lPostRotationM);
-  const lParentGRM = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  lParentGRM.extractRotation(lParentGX);
-  const lParentTM = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  lParentTM.copyPosition(lParentGX);
-  const lParentGRSM = lParentTM.clone().invert().multiply(lParentGX);
-  const lParentGSM = lParentGRM.clone().invert().multiply(lParentGRSM);
-  const lLSM = lScalingM;
-  const lGlobalRS = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-  if (inheritType === 0) {
-    lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM).multiply(lLSM);
-  } else if (inheritType === 1) {
-    lGlobalRS.copy(lParentGRM).multiply(lParentGSM).multiply(lLRM).multiply(lLSM);
-  } else {
-    const lParentLSM = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4().scale(new three__WEBPACK_IMPORTED_MODULE_0__.Vector3().setFromMatrixScale(lParentLX));
-    const lParentLSM_inv = lParentLSM.clone().invert();
-    const lParentGSM_noLocal = lParentGSM.clone().multiply(lParentLSM_inv);
-    lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM_noLocal).multiply(lLSM);
-  }
-  const lRotationPivotM_inv = lRotationPivotM.clone().invert();
-  const lScalingPivotM_inv = lScalingPivotM.clone().invert();
-  let lTransform = lTranslationM.clone().multiply(lRotationOffsetM).multiply(lRotationPivotM).multiply(lPreRotationM).multiply(lRotationM).multiply(lPostRotationM).multiply(lRotationPivotM_inv).multiply(lScalingOffsetM).multiply(lScalingPivotM).multiply(lScalingM).multiply(lScalingPivotM_inv);
-  const lLocalTWithAllPivotAndOffsetInfo = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4().copyPosition(lTransform);
-  const lGlobalTranslation = lParentGX.clone().multiply(lLocalTWithAllPivotAndOffsetInfo);
-  lGlobalT.copyPosition(lGlobalTranslation);
-  lTransform = lGlobalT.clone().multiply(lGlobalRS);
-  lTransform.premultiply(lParentGX.invert());
-  return lTransform;
-}
-function getEulerOrder(order) {
-  order = order || 0;
-  const enums = [
-    "ZYX",
-    // -> XYZ extrinsic
-    "YZX",
-    // -> XZY extrinsic
-    "XZY",
-    // -> YZX extrinsic
-    "ZXY",
-    // -> YXZ extrinsic
-    "YXZ",
-    // -> ZXY extrinsic
-    "XYZ"
-    // -> ZYX extrinsic
-    //'SphericXYZ', // not possible to support
-  ];
-  if (order === 6) {
-    console.warn("THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect.");
-    return enums[0];
-  }
-  return enums[order];
-}
-function parseNumberArray(value) {
-  const array = value.split(",").map(function(val) {
-    return parseFloat(val);
-  });
-  return array;
-}
-function convertArrayBufferToString(buffer, from, to) {
-  if (from === void 0)
-    from = 0;
-  if (to === void 0)
-    to = buffer.byteLength;
-  return three__WEBPACK_IMPORTED_MODULE_0__.LoaderUtils.decodeText(new Uint8Array(buffer, from, to));
-}
-function append(a, b) {
-  for (let i = 0, j = a.length, l = b.length; i < l; i++, j++) {
-    a[j] = b[i];
-  }
-}
-function slice(a, b, from, to) {
-  for (let i = from, j = 0; i < to; i++, j++) {
-    a[j] = b[i];
-  }
-  return a;
-}
-function inject(a1, index, a2) {
-  return a1.slice(0, index).concat(a2).concat(a1.slice(index));
-}
-
-
-
-/***/ }),
-
-/***/ 17607:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "E": () => (/* binding */ GLTFLoader)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-/* harmony import */ var _utils_BufferGeometryUtils_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84975);
-
-
-class GLTFLoader extends three__WEBPACK_IMPORTED_MODULE_0__.Loader {
-  constructor(manager) {
-    super(manager);
-    this.dracoLoader = null;
-    this.ktx2Loader = null;
-    this.meshoptDecoder = null;
-    this.pluginCallbacks = [];
-    this.register(function(parser) {
-      return new GLTFMaterialsClearcoatExtension(parser);
-    });
-    this.register(function(parser) {
-      return new GLTFTextureBasisUExtension(parser);
-    });
-    this.register(function(parser) {
-      return new GLTFTextureWebPExtension(parser);
-    });
-    this.register(function(parser) {
-      return new GLTFTextureAVIFExtension(parser);
-    });
-    this.register(function(parser) {
-      return new GLTFMaterialsSheenExtension(parser);
-    });
-    this.register(function(parser) {
-      return new GLTFMaterialsTransmissionExtension(parser);
-    });
-    this.register(function(parser) {
-      return new GLTFMaterialsVolumeExtension(parser);
-    });
-    this.register(function(parser) {
-      return new GLTFMaterialsIorExtension(parser);
-    });
-    this.register(function(parser) {
-      return new GLTFMaterialsEmissiveStrengthExtension(parser);
-    });
-    this.register(function(parser) {
-      return new GLTFMaterialsSpecularExtension(parser);
-    });
-    this.register(function(parser) {
-      return new GLTFMaterialsIridescenceExtension(parser);
-    });
-    this.register(function(parser) {
-      return new GLTFLightsExtension(parser);
-    });
-    this.register(function(parser) {
-      return new GLTFMeshoptCompression(parser);
-    });
-    this.register(function(parser) {
-      return new GLTFMeshGpuInstancing(parser);
-    });
-  }
-  load(url, onLoad, onProgress, onError) {
-    const scope = this;
-    let resourcePath;
-    if (this.resourcePath !== "") {
-      resourcePath = this.resourcePath;
-    } else if (this.path !== "") {
-      resourcePath = this.path;
-    } else {
-      resourcePath = three__WEBPACK_IMPORTED_MODULE_0__.LoaderUtils.extractUrlBase(url);
-    }
-    this.manager.itemStart(url);
-    const _onError = function(e) {
-      if (onError) {
-        onError(e);
-      } else {
-        console.error(e);
-      }
-      scope.manager.itemError(url);
-      scope.manager.itemEnd(url);
-    };
-    const loader = new three__WEBPACK_IMPORTED_MODULE_0__.FileLoader(this.manager);
-    loader.setPath(this.path);
-    loader.setResponseType("arraybuffer");
-    loader.setRequestHeader(this.requestHeader);
-    loader.setWithCredentials(this.withCredentials);
-    loader.load(
-      url,
-      function(data) {
-        try {
-          scope.parse(
-            data,
-            resourcePath,
-            function(gltf) {
-              onLoad(gltf);
-              scope.manager.itemEnd(url);
-            },
-            _onError
-          );
-        } catch (e) {
-          _onError(e);
-        }
-      },
-      onProgress,
-      _onError
-    );
-  }
-  setDRACOLoader(dracoLoader) {
-    this.dracoLoader = dracoLoader;
-    return this;
-  }
-  setDDSLoader() {
-    throw new Error('THREE.GLTFLoader: "MSFT_texture_dds" no longer supported. Please update to "KHR_texture_basisu".');
-  }
-  setKTX2Loader(ktx2Loader) {
-    this.ktx2Loader = ktx2Loader;
-    return this;
-  }
-  setMeshoptDecoder(meshoptDecoder) {
-    this.meshoptDecoder = meshoptDecoder;
-    return this;
-  }
-  register(callback) {
-    if (this.pluginCallbacks.indexOf(callback) === -1) {
-      this.pluginCallbacks.push(callback);
-    }
-    return this;
-  }
-  unregister(callback) {
-    if (this.pluginCallbacks.indexOf(callback) !== -1) {
-      this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1);
-    }
-    return this;
-  }
-  parse(data, path, onLoad, onError) {
-    let json;
-    const extensions = {};
-    const plugins = {};
-    if (typeof data === "string") {
-      json = JSON.parse(data);
-    } else if (data instanceof ArrayBuffer) {
-      const magic = three__WEBPACK_IMPORTED_MODULE_0__.LoaderUtils.decodeText(new Uint8Array(data.slice(0, 4)));
-      if (magic === BINARY_EXTENSION_HEADER_MAGIC) {
-        try {
-          extensions[EXTENSIONS.KHR_BINARY_GLTF] = new GLTFBinaryExtension(data);
-        } catch (error) {
-          if (onError)
-            onError(error);
-          return;
-        }
-        json = JSON.parse(extensions[EXTENSIONS.KHR_BINARY_GLTF].content);
-      } else {
-        json = JSON.parse(three__WEBPACK_IMPORTED_MODULE_0__.LoaderUtils.decodeText(new Uint8Array(data)));
-      }
-    } else {
-      json = data;
-    }
-    if (json.asset === void 0 || json.asset.version[0] < 2) {
-      if (onError)
-        onError(new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported."));
-      return;
-    }
-    const parser = new GLTFParser(json, {
-      path: path || this.resourcePath || "",
-      crossOrigin: this.crossOrigin,
-      requestHeader: this.requestHeader,
-      manager: this.manager,
-      ktx2Loader: this.ktx2Loader,
-      meshoptDecoder: this.meshoptDecoder
-    });
-    parser.fileLoader.setRequestHeader(this.requestHeader);
-    for (let i = 0; i < this.pluginCallbacks.length; i++) {
-      const plugin = this.pluginCallbacks[i](parser);
-      plugins[plugin.name] = plugin;
-      extensions[plugin.name] = true;
-    }
-    if (json.extensionsUsed) {
-      for (let i = 0; i < json.extensionsUsed.length; ++i) {
-        const extensionName = json.extensionsUsed[i];
-        const extensionsRequired = json.extensionsRequired || [];
-        switch (extensionName) {
-          case EXTENSIONS.KHR_MATERIALS_UNLIT:
-            extensions[extensionName] = new GLTFMaterialsUnlitExtension();
-            break;
-          case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:
-            extensions[extensionName] = new GLTFDracoMeshCompressionExtension(json, this.dracoLoader);
-            break;
-          case EXTENSIONS.KHR_TEXTURE_TRANSFORM:
-            extensions[extensionName] = new GLTFTextureTransformExtension();
-            break;
-          case EXTENSIONS.KHR_MESH_QUANTIZATION:
-            extensions[extensionName] = new GLTFMeshQuantizationExtension();
-            break;
-          default:
-            if (extensionsRequired.indexOf(extensionName) >= 0 && plugins[extensionName] === void 0) {
-              console.warn('THREE.GLTFLoader: Unknown extension "' + extensionName + '".');
-            }
-        }
-      }
-    }
-    parser.setExtensions(extensions);
-    parser.setPlugins(plugins);
-    parser.parse(onLoad, onError);
-  }
-  parseAsync(data, path) {
-    const scope = this;
-    return new Promise(function(resolve, reject) {
-      scope.parse(data, path, resolve, reject);
-    });
-  }
-}
-function GLTFRegistry() {
-  let objects = {};
-  return {
-    get: function(key) {
-      return objects[key];
-    },
-    add: function(key, object) {
-      objects[key] = object;
-    },
-    remove: function(key) {
-      delete objects[key];
-    },
-    removeAll: function() {
-      objects = {};
-    }
-  };
-}
-const EXTENSIONS = {
-  KHR_BINARY_GLTF: "KHR_binary_glTF",
-  KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression",
-  KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual",
-  KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat",
-  KHR_MATERIALS_IOR: "KHR_materials_ior",
-  KHR_MATERIALS_SHEEN: "KHR_materials_sheen",
-  KHR_MATERIALS_SPECULAR: "KHR_materials_specular",
-  KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission",
-  KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence",
-  KHR_MATERIALS_UNLIT: "KHR_materials_unlit",
-  KHR_MATERIALS_VOLUME: "KHR_materials_volume",
-  KHR_TEXTURE_BASISU: "KHR_texture_basisu",
-  KHR_TEXTURE_TRANSFORM: "KHR_texture_transform",
-  KHR_MESH_QUANTIZATION: "KHR_mesh_quantization",
-  KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength",
-  EXT_TEXTURE_WEBP: "EXT_texture_webp",
-  EXT_TEXTURE_AVIF: "EXT_texture_avif",
-  EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression",
-  EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing"
-};
-class GLTFLightsExtension {
-  constructor(parser) {
-    this.parser = parser;
-    this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;
-    this.cache = { refs: {}, uses: {} };
-  }
-  _markDefs() {
-    const parser = this.parser;
-    const nodeDefs = this.parser.json.nodes || [];
-    for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) {
-      const nodeDef = nodeDefs[nodeIndex];
-      if (nodeDef.extensions && nodeDef.extensions[this.name] && nodeDef.extensions[this.name].light !== void 0) {
-        parser._addNodeRef(this.cache, nodeDef.extensions[this.name].light);
-      }
-    }
-  }
-  _loadLight(lightIndex) {
-    const parser = this.parser;
-    const cacheKey = "light:" + lightIndex;
-    let dependency = parser.cache.get(cacheKey);
-    if (dependency)
-      return dependency;
-    const json = parser.json;
-    const extensions = json.extensions && json.extensions[this.name] || {};
-    const lightDefs = extensions.lights || [];
-    const lightDef = lightDefs[lightIndex];
-    let lightNode;
-    const color = new three__WEBPACK_IMPORTED_MODULE_0__.Color(16777215);
-    if (lightDef.color !== void 0)
-      color.fromArray(lightDef.color);
-    const range = lightDef.range !== void 0 ? lightDef.range : 0;
-    switch (lightDef.type) {
-      case "directional":
-        lightNode = new three__WEBPACK_IMPORTED_MODULE_0__.DirectionalLight(color);
-        lightNode.target.position.set(0, 0, -1);
-        lightNode.add(lightNode.target);
-        break;
-      case "point":
-        lightNode = new three__WEBPACK_IMPORTED_MODULE_0__.PointLight(color);
-        lightNode.distance = range;
-        break;
-      case "spot":
-        lightNode = new three__WEBPACK_IMPORTED_MODULE_0__.SpotLight(color);
-        lightNode.distance = range;
-        lightDef.spot = lightDef.spot || {};
-        lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== void 0 ? lightDef.spot.innerConeAngle : 0;
-        lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== void 0 ? lightDef.spot.outerConeAngle : Math.PI / 4;
-        lightNode.angle = lightDef.spot.outerConeAngle;
-        lightNode.penumbra = 1 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;
-        lightNode.target.position.set(0, 0, -1);
-        lightNode.add(lightNode.target);
-        break;
-      default:
-        throw new Error("THREE.GLTFLoader: Unexpected light type: " + lightDef.type);
-    }
-    lightNode.position.set(0, 0, 0);
-    lightNode.decay = 2;
-    assignExtrasToUserData(lightNode, lightDef);
-    if (lightDef.intensity !== void 0)
-      lightNode.intensity = lightDef.intensity;
-    lightNode.name = parser.createUniqueName(lightDef.name || "light_" + lightIndex);
-    dependency = Promise.resolve(lightNode);
-    parser.cache.add(cacheKey, dependency);
-    return dependency;
-  }
-  getDependency(type, index) {
-    if (type !== "light")
-      return;
-    return this._loadLight(index);
-  }
-  createNodeAttachment(nodeIndex) {
-    const self2 = this;
-    const parser = this.parser;
-    const json = parser.json;
-    const nodeDef = json.nodes[nodeIndex];
-    const lightDef = nodeDef.extensions && nodeDef.extensions[this.name] || {};
-    const lightIndex = lightDef.light;
-    if (lightIndex === void 0)
-      return null;
-    return this._loadLight(lightIndex).then(function(light) {
-      return parser._getNodeRef(self2.cache, lightIndex, light);
-    });
-  }
-}
-class GLTFMaterialsUnlitExtension {
-  constructor() {
-    this.name = EXTENSIONS.KHR_MATERIALS_UNLIT;
-  }
-  getMaterialType() {
-    return three__WEBPACK_IMPORTED_MODULE_0__.MeshBasicMaterial;
-  }
-  extendParams(materialParams, materialDef, parser) {
-    const pending = [];
-    materialParams.color = new three__WEBPACK_IMPORTED_MODULE_0__.Color(1, 1, 1);
-    materialParams.opacity = 1;
-    const metallicRoughness = materialDef.pbrMetallicRoughness;
-    if (metallicRoughness) {
-      if (Array.isArray(metallicRoughness.baseColorFactor)) {
-        const array = metallicRoughness.baseColorFactor;
-        materialParams.color.fromArray(array);
-        materialParams.opacity = array[3];
-      }
-      if (metallicRoughness.baseColorTexture !== void 0) {
-        pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, 3001));
-      }
-    }
-    return Promise.all(pending);
-  }
-}
-class GLTFMaterialsEmissiveStrengthExtension {
-  constructor(parser) {
-    this.parser = parser;
-    this.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;
-  }
-  extendMaterialParams(materialIndex, materialParams) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
-      return Promise.resolve();
-    }
-    const emissiveStrength = materialDef.extensions[this.name].emissiveStrength;
-    if (emissiveStrength !== void 0) {
-      materialParams.emissiveIntensity = emissiveStrength;
-    }
-    return Promise.resolve();
-  }
-}
-class GLTFMaterialsClearcoatExtension {
-  constructor(parser) {
-    this.parser = parser;
-    this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;
-  }
-  getMaterialType(materialIndex) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name])
-      return null;
-    return three__WEBPACK_IMPORTED_MODULE_0__.MeshPhysicalMaterial;
-  }
-  extendMaterialParams(materialIndex, materialParams) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
-      return Promise.resolve();
-    }
-    const pending = [];
-    const extension = materialDef.extensions[this.name];
-    if (extension.clearcoatFactor !== void 0) {
-      materialParams.clearcoat = extension.clearcoatFactor;
-    }
-    if (extension.clearcoatTexture !== void 0) {
-      pending.push(parser.assignTexture(materialParams, "clearcoatMap", extension.clearcoatTexture));
-    }
-    if (extension.clearcoatRoughnessFactor !== void 0) {
-      materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;
-    }
-    if (extension.clearcoatRoughnessTexture !== void 0) {
-      pending.push(parser.assignTexture(materialParams, "clearcoatRoughnessMap", extension.clearcoatRoughnessTexture));
-    }
-    if (extension.clearcoatNormalTexture !== void 0) {
-      pending.push(parser.assignTexture(materialParams, "clearcoatNormalMap", extension.clearcoatNormalTexture));
-      if (extension.clearcoatNormalTexture.scale !== void 0) {
-        const scale = extension.clearcoatNormalTexture.scale;
-        materialParams.clearcoatNormalScale = new three__WEBPACK_IMPORTED_MODULE_0__.Vector2(scale, scale);
-      }
-    }
-    return Promise.all(pending);
-  }
-}
-class GLTFMaterialsIridescenceExtension {
-  constructor(parser) {
-    this.parser = parser;
-    this.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;
-  }
-  getMaterialType(materialIndex) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name])
-      return null;
-    return three__WEBPACK_IMPORTED_MODULE_0__.MeshPhysicalMaterial;
-  }
-  extendMaterialParams(materialIndex, materialParams) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
-      return Promise.resolve();
-    }
-    const pending = [];
-    const extension = materialDef.extensions[this.name];
-    if (extension.iridescenceFactor !== void 0) {
-      materialParams.iridescence = extension.iridescenceFactor;
-    }
-    if (extension.iridescenceTexture !== void 0) {
-      pending.push(parser.assignTexture(materialParams, "iridescenceMap", extension.iridescenceTexture));
-    }
-    if (extension.iridescenceIor !== void 0) {
-      materialParams.iridescenceIOR = extension.iridescenceIor;
-    }
-    if (materialParams.iridescenceThicknessRange === void 0) {
-      materialParams.iridescenceThicknessRange = [100, 400];
-    }
-    if (extension.iridescenceThicknessMinimum !== void 0) {
-      materialParams.iridescenceThicknessRange[0] = extension.iridescenceThicknessMinimum;
-    }
-    if (extension.iridescenceThicknessMaximum !== void 0) {
-      materialParams.iridescenceThicknessRange[1] = extension.iridescenceThicknessMaximum;
-    }
-    if (extension.iridescenceThicknessTexture !== void 0) {
-      pending.push(
-        parser.assignTexture(materialParams, "iridescenceThicknessMap", extension.iridescenceThicknessTexture)
-      );
-    }
-    return Promise.all(pending);
-  }
-}
-class GLTFMaterialsSheenExtension {
-  constructor(parser) {
-    this.parser = parser;
-    this.name = EXTENSIONS.KHR_MATERIALS_SHEEN;
-  }
-  getMaterialType(materialIndex) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name])
-      return null;
-    return three__WEBPACK_IMPORTED_MODULE_0__.MeshPhysicalMaterial;
-  }
-  extendMaterialParams(materialIndex, materialParams) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
-      return Promise.resolve();
-    }
-    const pending = [];
-    materialParams.sheenColor = new three__WEBPACK_IMPORTED_MODULE_0__.Color(0, 0, 0);
-    materialParams.sheenRoughness = 0;
-    materialParams.sheen = 1;
-    const extension = materialDef.extensions[this.name];
-    if (extension.sheenColorFactor !== void 0) {
-      materialParams.sheenColor.fromArray(extension.sheenColorFactor);
-    }
-    if (extension.sheenRoughnessFactor !== void 0) {
-      materialParams.sheenRoughness = extension.sheenRoughnessFactor;
-    }
-    if (extension.sheenColorTexture !== void 0) {
-      pending.push(parser.assignTexture(materialParams, "sheenColorMap", extension.sheenColorTexture, 3001));
-    }
-    if (extension.sheenRoughnessTexture !== void 0) {
-      pending.push(parser.assignTexture(materialParams, "sheenRoughnessMap", extension.sheenRoughnessTexture));
-    }
-    return Promise.all(pending);
-  }
-}
-class GLTFMaterialsTransmissionExtension {
-  constructor(parser) {
-    this.parser = parser;
-    this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;
-  }
-  getMaterialType(materialIndex) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name])
-      return null;
-    return three__WEBPACK_IMPORTED_MODULE_0__.MeshPhysicalMaterial;
-  }
-  extendMaterialParams(materialIndex, materialParams) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
-      return Promise.resolve();
-    }
-    const pending = [];
-    const extension = materialDef.extensions[this.name];
-    if (extension.transmissionFactor !== void 0) {
-      materialParams.transmission = extension.transmissionFactor;
-    }
-    if (extension.transmissionTexture !== void 0) {
-      pending.push(parser.assignTexture(materialParams, "transmissionMap", extension.transmissionTexture));
-    }
-    return Promise.all(pending);
-  }
-}
-class GLTFMaterialsVolumeExtension {
-  constructor(parser) {
-    this.parser = parser;
-    this.name = EXTENSIONS.KHR_MATERIALS_VOLUME;
-  }
-  getMaterialType(materialIndex) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name])
-      return null;
-    return three__WEBPACK_IMPORTED_MODULE_0__.MeshPhysicalMaterial;
-  }
-  extendMaterialParams(materialIndex, materialParams) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
-      return Promise.resolve();
-    }
-    const pending = [];
-    const extension = materialDef.extensions[this.name];
-    materialParams.thickness = extension.thicknessFactor !== void 0 ? extension.thicknessFactor : 0;
-    if (extension.thicknessTexture !== void 0) {
-      pending.push(parser.assignTexture(materialParams, "thicknessMap", extension.thicknessTexture));
-    }
-    materialParams.attenuationDistance = extension.attenuationDistance || Infinity;
-    const colorArray = extension.attenuationColor || [1, 1, 1];
-    materialParams.attenuationColor = new three__WEBPACK_IMPORTED_MODULE_0__.Color(colorArray[0], colorArray[1], colorArray[2]);
-    return Promise.all(pending);
-  }
-}
-class GLTFMaterialsIorExtension {
-  constructor(parser) {
-    this.parser = parser;
-    this.name = EXTENSIONS.KHR_MATERIALS_IOR;
-  }
-  getMaterialType(materialIndex) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name])
-      return null;
-    return three__WEBPACK_IMPORTED_MODULE_0__.MeshPhysicalMaterial;
-  }
-  extendMaterialParams(materialIndex, materialParams) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
-      return Promise.resolve();
-    }
-    const extension = materialDef.extensions[this.name];
-    materialParams.ior = extension.ior !== void 0 ? extension.ior : 1.5;
-    return Promise.resolve();
-  }
-}
-class GLTFMaterialsSpecularExtension {
-  constructor(parser) {
-    this.parser = parser;
-    this.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;
-  }
-  getMaterialType(materialIndex) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name])
-      return null;
-    return three__WEBPACK_IMPORTED_MODULE_0__.MeshPhysicalMaterial;
-  }
-  extendMaterialParams(materialIndex, materialParams) {
-    const parser = this.parser;
-    const materialDef = parser.json.materials[materialIndex];
-    if (!materialDef.extensions || !materialDef.extensions[this.name]) {
-      return Promise.resolve();
-    }
-    const pending = [];
-    const extension = materialDef.extensions[this.name];
-    materialParams.specularIntensity = extension.specularFactor !== void 0 ? extension.specularFactor : 1;
-    if (extension.specularTexture !== void 0) {
-      pending.push(parser.assignTexture(materialParams, "specularIntensityMap", extension.specularTexture));
-    }
-    const colorArray = extension.specularColorFactor || [1, 1, 1];
-    materialParams.specularColor = new three__WEBPACK_IMPORTED_MODULE_0__.Color(colorArray[0], colorArray[1], colorArray[2]);
-    if (extension.specularColorTexture !== void 0) {
-      pending.push(
-        parser.assignTexture(materialParams, "specularColorMap", extension.specularColorTexture, 3001)
-        // sRGBEncoding
-      );
-    }
-    return Promise.all(pending);
-  }
-}
-class GLTFTextureBasisUExtension {
-  constructor(parser) {
-    this.parser = parser;
-    this.name = EXTENSIONS.KHR_TEXTURE_BASISU;
-  }
-  loadTexture(textureIndex) {
-    const parser = this.parser;
-    const json = parser.json;
-    const textureDef = json.textures[textureIndex];
-    if (!textureDef.extensions || !textureDef.extensions[this.name]) {
-      return null;
-    }
-    const extension = textureDef.extensions[this.name];
-    const loader = parser.options.ktx2Loader;
-    if (!loader) {
-      if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) {
-        throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures");
-      } else {
-        return null;
-      }
-    }
-    return parser.loadTextureImage(textureIndex, extension.source, loader);
-  }
-}
-class GLTFTextureWebPExtension {
-  constructor(parser) {
-    this.parser = parser;
-    this.name = EXTENSIONS.EXT_TEXTURE_WEBP;
-    this.isSupported = null;
-  }
-  loadTexture(textureIndex) {
-    const name = this.name;
-    const parser = this.parser;
-    const json = parser.json;
-    const textureDef = json.textures[textureIndex];
-    if (!textureDef.extensions || !textureDef.extensions[name]) {
-      return null;
-    }
-    const extension = textureDef.extensions[name];
-    const source = json.images[extension.source];
-    let loader = parser.textureLoader;
-    if (source.uri) {
-      const handler = parser.options.manager.getHandler(source.uri);
-      if (handler !== null)
-        loader = handler;
-    }
-    return this.detectSupport().then(function(isSupported) {
-      if (isSupported)
-        return parser.loadTextureImage(textureIndex, extension.source, loader);
-      if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) {
-        throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported.");
-      }
-      return parser.loadTexture(textureIndex);
-    });
-  }
-  detectSupport() {
-    if (!this.isSupported) {
-      this.isSupported = new Promise(function(resolve) {
-        const image = new Image();
-        image.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA";
-        image.onload = image.onerror = function() {
-          resolve(image.height === 1);
-        };
-      });
-    }
-    return this.isSupported;
-  }
-}
-class GLTFTextureAVIFExtension {
-  constructor(parser) {
-    this.parser = parser;
-    this.name = EXTENSIONS.EXT_TEXTURE_AVIF;
-    this.isSupported = null;
-  }
-  loadTexture(textureIndex) {
-    const name = this.name;
-    const parser = this.parser;
-    const json = parser.json;
-    const textureDef = json.textures[textureIndex];
-    if (!textureDef.extensions || !textureDef.extensions[name]) {
-      return null;
-    }
-    const extension = textureDef.extensions[name];
-    const source = json.images[extension.source];
-    let loader = parser.textureLoader;
-    if (source.uri) {
-      const handler = parser.options.manager.getHandler(source.uri);
-      if (handler !== null)
-        loader = handler;
-    }
-    return this.detectSupport().then(function(isSupported) {
-      if (isSupported)
-        return parser.loadTextureImage(textureIndex, extension.source, loader);
-      if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) {
-        throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported.");
-      }
-      return parser.loadTexture(textureIndex);
-    });
-  }
-  detectSupport() {
-    if (!this.isSupported) {
-      this.isSupported = new Promise(function(resolve) {
-        const image = new Image();
-        image.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=";
-        image.onload = image.onerror = function() {
-          resolve(image.height === 1);
-        };
-      });
-    }
-    return this.isSupported;
-  }
-}
-class GLTFMeshoptCompression {
-  constructor(parser) {
-    this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;
-    this.parser = parser;
-  }
-  loadBufferView(index) {
-    const json = this.parser.json;
-    const bufferView = json.bufferViews[index];
-    if (bufferView.extensions && bufferView.extensions[this.name]) {
-      const extensionDef = bufferView.extensions[this.name];
-      const buffer = this.parser.getDependency("buffer", extensionDef.buffer);
-      const decoder = this.parser.options.meshoptDecoder;
-      if (!decoder || !decoder.supported) {
-        if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) {
-          throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files");
-        } else {
-          return null;
-        }
-      }
-      return buffer.then(function(res) {
-        const byteOffset = extensionDef.byteOffset || 0;
-        const byteLength = extensionDef.byteLength || 0;
-        const count = extensionDef.count;
-        const stride = extensionDef.byteStride;
-        const source = new Uint8Array(res, byteOffset, byteLength);
-        if (decoder.decodeGltfBufferAsync) {
-          return decoder.decodeGltfBufferAsync(count, stride, source, extensionDef.mode, extensionDef.filter).then(function(res2) {
-            return res2.buffer;
-          });
-        } else {
-          return decoder.ready.then(function() {
-            const result = new ArrayBuffer(count * stride);
-            decoder.decodeGltfBuffer(
-              new Uint8Array(result),
-              count,
-              stride,
-              source,
-              extensionDef.mode,
-              extensionDef.filter
-            );
-            return result;
-          });
-        }
-      });
-    } else {
-      return null;
-    }
-  }
-}
-class GLTFMeshGpuInstancing {
-  constructor(parser) {
-    this.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;
-    this.parser = parser;
-  }
-  createNodeMesh(nodeIndex) {
-    const json = this.parser.json;
-    const nodeDef = json.nodes[nodeIndex];
-    if (!nodeDef.extensions || !nodeDef.extensions[this.name] || nodeDef.mesh === void 0) {
-      return null;
-    }
-    const meshDef = json.meshes[nodeDef.mesh];
-    for (const primitive of meshDef.primitives) {
-      if (primitive.mode !== WEBGL_CONSTANTS.TRIANGLES && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN && primitive.mode !== void 0) {
-        return null;
-      }
-    }
-    const extensionDef = nodeDef.extensions[this.name];
-    const attributesDef = extensionDef.attributes;
-    const pending = [];
-    const attributes = {};
-    for (const key in attributesDef) {
-      pending.push(
-        this.parser.getDependency("accessor", attributesDef[key]).then((accessor) => {
-          attributes[key] = accessor;
-          return attributes[key];
-        })
-      );
-    }
-    if (pending.length < 1) {
-      return null;
-    }
-    pending.push(this.parser.createNodeMesh(nodeIndex));
-    return Promise.all(pending).then((results) => {
-      const nodeObject = results.pop();
-      const meshes = nodeObject.isGroup ? nodeObject.children : [nodeObject];
-      const count = results[0].count;
-      const instancedMeshes = [];
-      for (const mesh of meshes) {
-        const m = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-        const p = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-        const q = new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion();
-        const s = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(1, 1, 1);
-        const instancedMesh = new three__WEBPACK_IMPORTED_MODULE_0__.InstancedMesh(mesh.geometry, mesh.material, count);
-        for (let i = 0; i < count; i++) {
-          if (attributes.TRANSLATION) {
-            p.fromBufferAttribute(attributes.TRANSLATION, i);
-          }
-          if (attributes.ROTATION) {
-            q.fromBufferAttribute(attributes.ROTATION, i);
-          }
-          if (attributes.SCALE) {
-            s.fromBufferAttribute(attributes.SCALE, i);
-          }
-          instancedMesh.setMatrixAt(i, m.compose(p, q, s));
-        }
-        for (const attributeName in attributes) {
-          if (attributeName !== "TRANSLATION" && attributeName !== "ROTATION" && attributeName !== "SCALE") {
-            mesh.geometry.setAttribute(attributeName, attributes[attributeName]);
-          }
-        }
-        three__WEBPACK_IMPORTED_MODULE_0__.Object3D.prototype.copy.call(instancedMesh, mesh);
-        this.parser.assignFinalMaterial(instancedMesh);
-        instancedMeshes.push(instancedMesh);
-      }
-      if (nodeObject.isGroup) {
-        nodeObject.clear();
-        nodeObject.add(...instancedMeshes);
-        return nodeObject;
-      }
-      return instancedMeshes[0];
-    });
-  }
-}
-const BINARY_EXTENSION_HEADER_MAGIC = "glTF";
-const BINARY_EXTENSION_HEADER_LENGTH = 12;
-const BINARY_EXTENSION_CHUNK_TYPES = { JSON: 1313821514, BIN: 5130562 };
-class GLTFBinaryExtension {
-  constructor(data) {
-    this.name = EXTENSIONS.KHR_BINARY_GLTF;
-    this.content = null;
-    this.body = null;
-    const headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH);
-    this.header = {
-      magic: three__WEBPACK_IMPORTED_MODULE_0__.LoaderUtils.decodeText(new Uint8Array(data.slice(0, 4))),
-      version: headerView.getUint32(4, true),
-      length: headerView.getUint32(8, true)
-    };
-    if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) {
-      throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header.");
-    } else if (this.header.version < 2) {
-      throw new Error("THREE.GLTFLoader: Legacy binary file detected.");
-    }
-    const chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;
-    const chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH);
-    let chunkIndex = 0;
-    while (chunkIndex < chunkContentsLength) {
-      const chunkLength = chunkView.getUint32(chunkIndex, true);
-      chunkIndex += 4;
-      const chunkType = chunkView.getUint32(chunkIndex, true);
-      chunkIndex += 4;
-      if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) {
-        const contentArray = new Uint8Array(data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength);
-        this.content = three__WEBPACK_IMPORTED_MODULE_0__.LoaderUtils.decodeText(contentArray);
-      } else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) {
-        const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;
-        this.body = data.slice(byteOffset, byteOffset + chunkLength);
-      }
-      chunkIndex += chunkLength;
-    }
-    if (this.content === null) {
-      throw new Error("THREE.GLTFLoader: JSON content not found.");
-    }
-  }
-}
-class GLTFDracoMeshCompressionExtension {
-  constructor(json, dracoLoader) {
-    if (!dracoLoader) {
-      throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided.");
-    }
-    this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;
-    this.json = json;
-    this.dracoLoader = dracoLoader;
-    this.dracoLoader.preload();
-  }
-  decodePrimitive(primitive, parser) {
-    const json = this.json;
-    const dracoLoader = this.dracoLoader;
-    const bufferViewIndex = primitive.extensions[this.name].bufferView;
-    const gltfAttributeMap = primitive.extensions[this.name].attributes;
-    const threeAttributeMap = {};
-    const attributeNormalizedMap = {};
-    const attributeTypeMap = {};
-    for (const attributeName in gltfAttributeMap) {
-      const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase();
-      threeAttributeMap[threeAttributeName] = gltfAttributeMap[attributeName];
-    }
-    for (const attributeName in primitive.attributes) {
-      const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase();
-      if (gltfAttributeMap[attributeName] !== void 0) {
-        const accessorDef = json.accessors[primitive.attributes[attributeName]];
-        const componentType = WEBGL_COMPONENT_TYPES[accessorDef.componentType];
-        attributeTypeMap[threeAttributeName] = componentType.name;
-        attributeNormalizedMap[threeAttributeName] = accessorDef.normalized === true;
-      }
-    }
-    return parser.getDependency("bufferView", bufferViewIndex).then(function(bufferView) {
-      return new Promise(function(resolve) {
-        dracoLoader.decodeDracoFile(
-          bufferView,
-          function(geometry) {
-            for (const attributeName in geometry.attributes) {
-              const attribute = geometry.attributes[attributeName];
-              const normalized = attributeNormalizedMap[attributeName];
-              if (normalized !== void 0)
-                attribute.normalized = normalized;
-            }
-            resolve(geometry);
-          },
-          threeAttributeMap,
-          attributeTypeMap
-        );
-      });
-    });
-  }
-}
-class GLTFTextureTransformExtension {
-  constructor() {
-    this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;
-  }
-  extendTexture(texture, transform) {
-    if ((transform.texCoord === void 0 || transform.texCoord === texture.channel) && transform.offset === void 0 && transform.rotation === void 0 && transform.scale === void 0) {
-      return texture;
-    }
-    texture = texture.clone();
-    if (transform.texCoord !== void 0) {
-      texture.channel = transform.texCoord;
-    }
-    if (transform.offset !== void 0) {
-      texture.offset.fromArray(transform.offset);
-    }
-    if (transform.rotation !== void 0) {
-      texture.rotation = transform.rotation;
-    }
-    if (transform.scale !== void 0) {
-      texture.repeat.fromArray(transform.scale);
-    }
-    texture.needsUpdate = true;
-    return texture;
-  }
-}
-class GLTFMeshQuantizationExtension {
-  constructor() {
-    this.name = EXTENSIONS.KHR_MESH_QUANTIZATION;
-  }
-}
-class GLTFCubicSplineInterpolant extends three__WEBPACK_IMPORTED_MODULE_0__.Interpolant {
-  constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {
-    super(parameterPositions, sampleValues, sampleSize, resultBuffer);
-  }
-  copySampleValue_(index) {
-    const result = this.resultBuffer, values = this.sampleValues, valueSize = this.valueSize, offset = index * valueSize * 3 + valueSize;
-    for (let i = 0; i !== valueSize; i++) {
-      result[i] = values[offset + i];
-    }
-    return result;
-  }
-  interpolate_(i1, t0, t, t1) {
-    const result = this.resultBuffer;
-    const values = this.sampleValues;
-    const stride = this.valueSize;
-    const stride2 = stride * 2;
-    const stride3 = stride * 3;
-    const td = t1 - t0;
-    const p = (t - t0) / td;
-    const pp = p * p;
-    const ppp = pp * p;
-    const offset1 = i1 * stride3;
-    const offset0 = offset1 - stride3;
-    const s2 = -2 * ppp + 3 * pp;
-    const s3 = ppp - pp;
-    const s0 = 1 - s2;
-    const s1 = s3 - pp + p;
-    for (let i = 0; i !== stride; i++) {
-      const p0 = values[offset0 + i + stride];
-      const m0 = values[offset0 + i + stride2] * td;
-      const p1 = values[offset1 + i + stride];
-      const m1 = values[offset1 + i] * td;
-      result[i] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;
-    }
-    return result;
-  }
-}
-const _q = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Quaternion();
-class GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {
-  interpolate_(i1, t0, t, t1) {
-    const result = super.interpolate_(i1, t0, t, t1);
-    _q.fromArray(result).normalize().toArray(result);
-    return result;
-  }
-}
-const WEBGL_CONSTANTS = {
-  FLOAT: 5126,
-  //FLOAT_MAT2: 35674,
-  FLOAT_MAT3: 35675,
-  FLOAT_MAT4: 35676,
-  FLOAT_VEC2: 35664,
-  FLOAT_VEC3: 35665,
-  FLOAT_VEC4: 35666,
-  LINEAR: 9729,
-  REPEAT: 10497,
-  SAMPLER_2D: 35678,
-  POINTS: 0,
-  LINES: 1,
-  LINE_LOOP: 2,
-  LINE_STRIP: 3,
-  TRIANGLES: 4,
-  TRIANGLE_STRIP: 5,
-  TRIANGLE_FAN: 6,
-  UNSIGNED_BYTE: 5121,
-  UNSIGNED_SHORT: 5123
-};
-const WEBGL_COMPONENT_TYPES = {
-  5120: Int8Array,
-  5121: Uint8Array,
-  5122: Int16Array,
-  5123: Uint16Array,
-  5125: Uint32Array,
-  5126: Float32Array
-};
-const WEBGL_FILTERS = {
-  9728: three__WEBPACK_IMPORTED_MODULE_0__.NearestFilter,
-  9729: three__WEBPACK_IMPORTED_MODULE_0__.LinearFilter,
-  9984: three__WEBPACK_IMPORTED_MODULE_0__.NearestMipmapNearestFilter,
-  9985: three__WEBPACK_IMPORTED_MODULE_0__.LinearMipmapNearestFilter,
-  9986: three__WEBPACK_IMPORTED_MODULE_0__.NearestMipmapLinearFilter,
-  9987: three__WEBPACK_IMPORTED_MODULE_0__.LinearMipmapLinearFilter
-};
-const WEBGL_WRAPPINGS = {
-  33071: three__WEBPACK_IMPORTED_MODULE_0__.ClampToEdgeWrapping,
-  33648: three__WEBPACK_IMPORTED_MODULE_0__.MirroredRepeatWrapping,
-  10497: three__WEBPACK_IMPORTED_MODULE_0__.RepeatWrapping
-};
-const WEBGL_TYPE_SIZES = {
-  SCALAR: 1,
-  VEC2: 2,
-  VEC3: 3,
-  VEC4: 4,
-  MAT2: 4,
-  MAT3: 9,
-  MAT4: 16
-};
-const ATTRIBUTES = {
-  POSITION: "position",
-  NORMAL: "normal",
-  TANGENT: "tangent",
-  // uv => uv1, 4 uv channels
-  // https://github.com/mrdoob/three.js/pull/25943
-  // https://github.com/mrdoob/three.js/pull/25788
-  ...three__WEBPACK_IMPORTED_MODULE_0__.REVISION.replace(/\D+/g, "") >= 152 ? {
-    TEXCOORD_0: "uv",
-    TEXCOORD_1: "uv1",
-    TEXCOORD_2: "uv2",
-    TEXCOORD_3: "uv3"
-  } : {
-    TEXCOORD_0: "uv",
-    TEXCOORD_1: "uv2"
-  },
-  COLOR_0: "color",
-  WEIGHTS_0: "skinWeight",
-  JOINTS_0: "skinIndex"
-};
-const PATH_PROPERTIES = {
-  scale: "scale",
-  translation: "position",
-  rotation: "quaternion",
-  weights: "morphTargetInfluences"
-};
-const INTERPOLATION = {
-  CUBICSPLINE: void 0,
-  // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each
-  // keyframe track will be initialized with a default interpolation type, then modified.
-  LINEAR: three__WEBPACK_IMPORTED_MODULE_0__.InterpolateLinear,
-  STEP: three__WEBPACK_IMPORTED_MODULE_0__.InterpolateDiscrete
-};
-const ALPHA_MODES = {
-  OPAQUE: "OPAQUE",
-  MASK: "MASK",
-  BLEND: "BLEND"
-};
-function createDefaultMaterial(cache) {
-  if (cache["DefaultMaterial"] === void 0) {
-    cache["DefaultMaterial"] = new three__WEBPACK_IMPORTED_MODULE_0__.MeshStandardMaterial({
-      color: 16777215,
-      emissive: 0,
-      metalness: 1,
-      roughness: 1,
-      transparent: false,
-      depthTest: true,
-      side: three__WEBPACK_IMPORTED_MODULE_0__.FrontSide
-    });
-  }
-  return cache["DefaultMaterial"];
-}
-function addUnknownExtensionsToUserData(knownExtensions, object, objectDef) {
-  for (const name in objectDef.extensions) {
-    if (knownExtensions[name] === void 0) {
-      object.userData.gltfExtensions = object.userData.gltfExtensions || {};
-      object.userData.gltfExtensions[name] = objectDef.extensions[name];
-    }
-  }
-}
-function assignExtrasToUserData(object, gltfDef) {
-  if (gltfDef.extras !== void 0) {
-    if (typeof gltfDef.extras === "object") {
-      Object.assign(object.userData, gltfDef.extras);
-    } else {
-      console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + gltfDef.extras);
-    }
-  }
-}
-function addMorphTargets(geometry, targets, parser) {
-  let hasMorphPosition = false;
-  let hasMorphNormal = false;
-  let hasMorphColor = false;
-  for (let i = 0, il = targets.length; i < il; i++) {
-    const target = targets[i];
-    if (target.POSITION !== void 0)
-      hasMorphPosition = true;
-    if (target.NORMAL !== void 0)
-      hasMorphNormal = true;
-    if (target.COLOR_0 !== void 0)
-      hasMorphColor = true;
-    if (hasMorphPosition && hasMorphNormal && hasMorphColor)
-      break;
-  }
-  if (!hasMorphPosition && !hasMorphNormal && !hasMorphColor)
-    return Promise.resolve(geometry);
-  const pendingPositionAccessors = [];
-  const pendingNormalAccessors = [];
-  const pendingColorAccessors = [];
-  for (let i = 0, il = targets.length; i < il; i++) {
-    const target = targets[i];
-    if (hasMorphPosition) {
-      const pendingAccessor = target.POSITION !== void 0 ? parser.getDependency("accessor", target.POSITION) : geometry.attributes.position;
-      pendingPositionAccessors.push(pendingAccessor);
-    }
-    if (hasMorphNormal) {
-      const pendingAccessor = target.NORMAL !== void 0 ? parser.getDependency("accessor", target.NORMAL) : geometry.attributes.normal;
-      pendingNormalAccessors.push(pendingAccessor);
-    }
-    if (hasMorphColor) {
-      const pendingAccessor = target.COLOR_0 !== void 0 ? parser.getDependency("accessor", target.COLOR_0) : geometry.attributes.color;
-      pendingColorAccessors.push(pendingAccessor);
-    }
-  }
-  return Promise.all([
-    Promise.all(pendingPositionAccessors),
-    Promise.all(pendingNormalAccessors),
-    Promise.all(pendingColorAccessors)
-  ]).then(function(accessors) {
-    const morphPositions = accessors[0];
-    const morphNormals = accessors[1];
-    const morphColors = accessors[2];
-    if (hasMorphPosition)
-      geometry.morphAttributes.position = morphPositions;
-    if (hasMorphNormal)
-      geometry.morphAttributes.normal = morphNormals;
-    if (hasMorphColor)
-      geometry.morphAttributes.color = morphColors;
-    geometry.morphTargetsRelative = true;
-    return geometry;
-  });
-}
-function updateMorphTargets(mesh, meshDef) {
-  mesh.updateMorphTargets();
-  if (meshDef.weights !== void 0) {
-    for (let i = 0, il = meshDef.weights.length; i < il; i++) {
-      mesh.morphTargetInfluences[i] = meshDef.weights[i];
-    }
-  }
-  if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) {
-    const targetNames = meshDef.extras.targetNames;
-    if (mesh.morphTargetInfluences.length === targetNames.length) {
-      mesh.morphTargetDictionary = {};
-      for (let i = 0, il = targetNames.length; i < il; i++) {
-        mesh.morphTargetDictionary[targetNames[i]] = i;
-      }
-    } else {
-      console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.");
-    }
-  }
-}
-function createPrimitiveKey(primitiveDef) {
-  const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION];
-  let geometryKey;
-  if (dracoExtension) {
-    geometryKey = "draco:" + dracoExtension.bufferView + ":" + dracoExtension.indices + ":" + createAttributesKey(dracoExtension.attributes);
-  } else {
-    geometryKey = primitiveDef.indices + ":" + createAttributesKey(primitiveDef.attributes) + ":" + primitiveDef.mode;
-  }
-  return geometryKey;
-}
-function createAttributesKey(attributes) {
-  let attributesKey = "";
-  const keys = Object.keys(attributes).sort();
-  for (let i = 0, il = keys.length; i < il; i++) {
-    attributesKey += keys[i] + ":" + attributes[keys[i]] + ";";
-  }
-  return attributesKey;
-}
-function getNormalizedComponentScale(constructor) {
-  switch (constructor) {
-    case Int8Array:
-      return 1 / 127;
-    case Uint8Array:
-      return 1 / 255;
-    case Int16Array:
-      return 1 / 32767;
-    case Uint16Array:
-      return 1 / 65535;
-    default:
-      throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type.");
-  }
-}
-function getImageURIMimeType(uri) {
-  if (uri.search(/\.jpe?g($|\?)/i) > 0 || uri.search(/^data\:image\/jpeg/) === 0)
-    return "image/jpeg";
-  if (uri.search(/\.webp($|\?)/i) > 0 || uri.search(/^data\:image\/webp/) === 0)
-    return "image/webp";
-  return "image/png";
-}
-const _identityMatrix = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-class GLTFParser {
-  constructor(json = {}, options = {}) {
-    this.json = json;
-    this.extensions = {};
-    this.plugins = {};
-    this.options = options;
-    this.cache = new GLTFRegistry();
-    this.associations = /* @__PURE__ */ new Map();
-    this.primitiveCache = {};
-    this.nodeCache = {};
-    this.meshCache = { refs: {}, uses: {} };
-    this.cameraCache = { refs: {}, uses: {} };
-    this.lightCache = { refs: {}, uses: {} };
-    this.sourceCache = {};
-    this.textureCache = {};
-    this.nodeNamesUsed = {};
-    let isSafari = false;
-    let isFirefox = false;
-    let firefoxVersion = -1;
-    if (typeof navigator !== "undefined") {
-      isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent) === true;
-      isFirefox = navigator.userAgent.indexOf("Firefox") > -1;
-      firefoxVersion = isFirefox ? navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1] : -1;
-    }
-    if (typeof createImageBitmap === "undefined" || isSafari || isFirefox && firefoxVersion < 98) {
-      this.textureLoader = new three__WEBPACK_IMPORTED_MODULE_0__.TextureLoader(this.options.manager);
-    } else {
-      this.textureLoader = new three__WEBPACK_IMPORTED_MODULE_0__.ImageBitmapLoader(this.options.manager);
-    }
-    this.textureLoader.setCrossOrigin(this.options.crossOrigin);
-    this.textureLoader.setRequestHeader(this.options.requestHeader);
-    this.fileLoader = new three__WEBPACK_IMPORTED_MODULE_0__.FileLoader(this.options.manager);
-    this.fileLoader.setResponseType("arraybuffer");
-    if (this.options.crossOrigin === "use-credentials") {
-      this.fileLoader.setWithCredentials(true);
-    }
-  }
-  setExtensions(extensions) {
-    this.extensions = extensions;
-  }
-  setPlugins(plugins) {
-    this.plugins = plugins;
-  }
-  parse(onLoad, onError) {
-    const parser = this;
-    const json = this.json;
-    const extensions = this.extensions;
-    this.cache.removeAll();
-    this.nodeCache = {};
-    this._invokeAll(function(ext) {
-      return ext._markDefs && ext._markDefs();
-    });
-    Promise.all(
-      this._invokeAll(function(ext) {
-        return ext.beforeRoot && ext.beforeRoot();
-      })
-    ).then(function() {
-      return Promise.all([
-        parser.getDependencies("scene"),
-        parser.getDependencies("animation"),
-        parser.getDependencies("camera")
-      ]);
-    }).then(function(dependencies) {
-      const result = {
-        scene: dependencies[0][json.scene || 0],
-        scenes: dependencies[0],
-        animations: dependencies[1],
-        cameras: dependencies[2],
-        asset: json.asset,
-        parser,
-        userData: {}
-      };
-      addUnknownExtensionsToUserData(extensions, result, json);
-      assignExtrasToUserData(result, json);
-      Promise.all(
-        parser._invokeAll(function(ext) {
-          return ext.afterRoot && ext.afterRoot(result);
-        })
-      ).then(function() {
-        onLoad(result);
-      });
-    }).catch(onError);
-  }
-  /**
-   * Marks the special nodes/meshes in json for efficient parse.
-   */
-  _markDefs() {
-    const nodeDefs = this.json.nodes || [];
-    const skinDefs = this.json.skins || [];
-    const meshDefs = this.json.meshes || [];
-    for (let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex++) {
-      const joints = skinDefs[skinIndex].joints;
-      for (let i = 0, il = joints.length; i < il; i++) {
-        nodeDefs[joints[i]].isBone = true;
-      }
-    }
-    for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) {
-      const nodeDef = nodeDefs[nodeIndex];
-      if (nodeDef.mesh !== void 0) {
-        this._addNodeRef(this.meshCache, nodeDef.mesh);
-        if (nodeDef.skin !== void 0) {
-          meshDefs[nodeDef.mesh].isSkinnedMesh = true;
-        }
-      }
-      if (nodeDef.camera !== void 0) {
-        this._addNodeRef(this.cameraCache, nodeDef.camera);
-      }
-    }
-  }
-  /**
-   * Counts references to shared node / Object3D resources. These resources
-   * can be reused, or "instantiated", at multiple nodes in the scene
-   * hierarchy. Mesh, Camera, and Light instances are instantiated and must
-   * be marked. Non-scenegraph resources (like Materials, Geometries, and
-   * Textures) can be reused directly and are not marked here.
-   *
-   * Example: CesiumMilkTruck sample model reuses "Wheel" meshes.
-   */
-  _addNodeRef(cache, index) {
-    if (index === void 0)
-      return;
-    if (cache.refs[index] === void 0) {
-      cache.refs[index] = cache.uses[index] = 0;
-    }
-    cache.refs[index]++;
-  }
-  /** Returns a reference to a shared resource, cloning it if necessary. */
-  _getNodeRef(cache, index, object) {
-    if (cache.refs[index] <= 1)
-      return object;
-    const ref = object.clone();
-    const updateMappings = (original, clone) => {
-      const mappings = this.associations.get(original);
-      if (mappings != null) {
-        this.associations.set(clone, mappings);
-      }
-      for (const [i, child] of original.children.entries()) {
-        updateMappings(child, clone.children[i]);
-      }
-    };
-    updateMappings(object, ref);
-    ref.name += "_instance_" + cache.uses[index]++;
-    return ref;
-  }
-  _invokeOne(func) {
-    const extensions = Object.values(this.plugins);
-    extensions.push(this);
-    for (let i = 0; i < extensions.length; i++) {
-      const result = func(extensions[i]);
-      if (result)
-        return result;
-    }
-    return null;
-  }
-  _invokeAll(func) {
-    const extensions = Object.values(this.plugins);
-    extensions.unshift(this);
-    const pending = [];
-    for (let i = 0; i < extensions.length; i++) {
-      const result = func(extensions[i]);
-      if (result)
-        pending.push(result);
-    }
-    return pending;
-  }
-  /**
-   * Requests the specified dependency asynchronously, with caching.
-   * @param {string} type
-   * @param {number} index
-   * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}
-   */
-  getDependency(type, index) {
-    const cacheKey = type + ":" + index;
-    let dependency = this.cache.get(cacheKey);
-    if (!dependency) {
-      switch (type) {
-        case "scene":
-          dependency = this.loadScene(index);
-          break;
-        case "node":
-          dependency = this._invokeOne(function(ext) {
-            return ext.loadNode && ext.loadNode(index);
-          });
-          break;
-        case "mesh":
-          dependency = this._invokeOne(function(ext) {
-            return ext.loadMesh && ext.loadMesh(index);
-          });
-          break;
-        case "accessor":
-          dependency = this.loadAccessor(index);
-          break;
-        case "bufferView":
-          dependency = this._invokeOne(function(ext) {
-            return ext.loadBufferView && ext.loadBufferView(index);
-          });
-          break;
-        case "buffer":
-          dependency = this.loadBuffer(index);
-          break;
-        case "material":
-          dependency = this._invokeOne(function(ext) {
-            return ext.loadMaterial && ext.loadMaterial(index);
-          });
-          break;
-        case "texture":
-          dependency = this._invokeOne(function(ext) {
-            return ext.loadTexture && ext.loadTexture(index);
-          });
-          break;
-        case "skin":
-          dependency = this.loadSkin(index);
-          break;
-        case "animation":
-          dependency = this._invokeOne(function(ext) {
-            return ext.loadAnimation && ext.loadAnimation(index);
-          });
-          break;
-        case "camera":
-          dependency = this.loadCamera(index);
-          break;
-        default:
-          dependency = this._invokeOne(function(ext) {
-            return ext != this && ext.getDependency && ext.getDependency(type, index);
-          });
-          if (!dependency) {
-            throw new Error("Unknown type: " + type);
-          }
-          break;
-      }
-      this.cache.add(cacheKey, dependency);
-    }
-    return dependency;
-  }
-  /**
-   * Requests all dependencies of the specified type asynchronously, with caching.
-   * @param {string} type
-   * @return {Promise<Array<Object>>}
-   */
-  getDependencies(type) {
-    let dependencies = this.cache.get(type);
-    if (!dependencies) {
-      const parser = this;
-      const defs = this.json[type + (type === "mesh" ? "es" : "s")] || [];
-      dependencies = Promise.all(
-        defs.map(function(def, index) {
-          return parser.getDependency(type, index);
-        })
-      );
-      this.cache.add(type, dependencies);
-    }
-    return dependencies;
-  }
-  /**
-   * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views
-   * @param {number} bufferIndex
-   * @return {Promise<ArrayBuffer>}
-   */
-  loadBuffer(bufferIndex) {
-    const bufferDef = this.json.buffers[bufferIndex];
-    const loader = this.fileLoader;
-    if (bufferDef.type && bufferDef.type !== "arraybuffer") {
-      throw new Error("THREE.GLTFLoader: " + bufferDef.type + " buffer type is not supported.");
-    }
-    if (bufferDef.uri === void 0 && bufferIndex === 0) {
-      return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body);
-    }
-    const options = this.options;
-    return new Promise(function(resolve, reject) {
-      loader.load(three__WEBPACK_IMPORTED_MODULE_0__.LoaderUtils.resolveURL(bufferDef.uri, options.path), resolve, void 0, function() {
-        reject(new Error('THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".'));
-      });
-    });
-  }
-  /**
-   * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views
-   * @param {number} bufferViewIndex
-   * @return {Promise<ArrayBuffer>}
-   */
-  loadBufferView(bufferViewIndex) {
-    const bufferViewDef = this.json.bufferViews[bufferViewIndex];
-    return this.getDependency("buffer", bufferViewDef.buffer).then(function(buffer) {
-      const byteLength = bufferViewDef.byteLength || 0;
-      const byteOffset = bufferViewDef.byteOffset || 0;
-      return buffer.slice(byteOffset, byteOffset + byteLength);
-    });
-  }
-  /**
-   * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors
-   * @param {number} accessorIndex
-   * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}
-   */
-  loadAccessor(accessorIndex) {
-    const parser = this;
-    const json = this.json;
-    const accessorDef = this.json.accessors[accessorIndex];
-    if (accessorDef.bufferView === void 0 && accessorDef.sparse === void 0) {
-      const itemSize = WEBGL_TYPE_SIZES[accessorDef.type];
-      const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType];
-      const normalized = accessorDef.normalized === true;
-      const array = new TypedArray(accessorDef.count * itemSize);
-      return Promise.resolve(new three__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute(array, itemSize, normalized));
-    }
-    const pendingBufferViews = [];
-    if (accessorDef.bufferView !== void 0) {
-      pendingBufferViews.push(this.getDependency("bufferView", accessorDef.bufferView));
-    } else {
-      pendingBufferViews.push(null);
-    }
-    if (accessorDef.sparse !== void 0) {
-      pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.indices.bufferView));
-      pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.values.bufferView));
-    }
-    return Promise.all(pendingBufferViews).then(function(bufferViews) {
-      const bufferView = bufferViews[0];
-      const itemSize = WEBGL_TYPE_SIZES[accessorDef.type];
-      const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType];
-      const elementBytes = TypedArray.BYTES_PER_ELEMENT;
-      const itemBytes = elementBytes * itemSize;
-      const byteOffset = accessorDef.byteOffset || 0;
-      const byteStride = accessorDef.bufferView !== void 0 ? json.bufferViews[accessorDef.bufferView].byteStride : void 0;
-      const normalized = accessorDef.normalized === true;
-      let array, bufferAttribute;
-      if (byteStride && byteStride !== itemBytes) {
-        const ibSlice = Math.floor(byteOffset / byteStride);
-        const ibCacheKey = "InterleavedBuffer:" + accessorDef.bufferView + ":" + accessorDef.componentType + ":" + ibSlice + ":" + accessorDef.count;
-        let ib = parser.cache.get(ibCacheKey);
-        if (!ib) {
-          array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes);
-          ib = new three__WEBPACK_IMPORTED_MODULE_0__.InterleavedBuffer(array, byteStride / elementBytes);
-          parser.cache.add(ibCacheKey, ib);
-        }
-        bufferAttribute = new three__WEBPACK_IMPORTED_MODULE_0__.InterleavedBufferAttribute(
-          ib,
-          itemSize,
-          byteOffset % byteStride / elementBytes,
-          normalized
-        );
-      } else {
-        if (bufferView === null) {
-          array = new TypedArray(accessorDef.count * itemSize);
-        } else {
-          array = new TypedArray(bufferView, byteOffset, accessorDef.count * itemSize);
-        }
-        bufferAttribute = new three__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute(array, itemSize, normalized);
-      }
-      if (accessorDef.sparse !== void 0) {
-        const itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;
-        const TypedArrayIndices = WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType];
-        const byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;
-        const byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;
-        const sparseIndices = new TypedArrayIndices(
-          bufferViews[1],
-          byteOffsetIndices,
-          accessorDef.sparse.count * itemSizeIndices
-        );
-        const sparseValues = new TypedArray(bufferViews[2], byteOffsetValues, accessorDef.sparse.count * itemSize);
-        if (bufferView !== null) {
-          bufferAttribute = new three__WEBPACK_IMPORTED_MODULE_0__.BufferAttribute(
-            bufferAttribute.array.slice(),
-            bufferAttribute.itemSize,
-            bufferAttribute.normalized
-          );
-        }
-        for (let i = 0, il = sparseIndices.length; i < il; i++) {
-          const index = sparseIndices[i];
-          bufferAttribute.setX(index, sparseValues[i * itemSize]);
-          if (itemSize >= 2)
-            bufferAttribute.setY(index, sparseValues[i * itemSize + 1]);
-          if (itemSize >= 3)
-            bufferAttribute.setZ(index, sparseValues[i * itemSize + 2]);
-          if (itemSize >= 4)
-            bufferAttribute.setW(index, sparseValues[i * itemSize + 3]);
-          if (itemSize >= 5)
-            throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.");
-        }
-      }
-      return bufferAttribute;
-    });
-  }
-  /**
-   * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures
-   * @param {number} textureIndex
-   * @return {Promise<THREE.Texture|null>}
-   */
-  loadTexture(textureIndex) {
-    const json = this.json;
-    const options = this.options;
-    const textureDef = json.textures[textureIndex];
-    const sourceIndex = textureDef.source;
-    const sourceDef = json.images[sourceIndex];
-    let loader = this.textureLoader;
-    if (sourceDef.uri) {
-      const handler = options.manager.getHandler(sourceDef.uri);
-      if (handler !== null)
-        loader = handler;
-    }
-    return this.loadTextureImage(textureIndex, sourceIndex, loader);
-  }
-  loadTextureImage(textureIndex, sourceIndex, loader) {
-    const parser = this;
-    const json = this.json;
-    const textureDef = json.textures[textureIndex];
-    const sourceDef = json.images[sourceIndex];
-    const cacheKey = (sourceDef.uri || sourceDef.bufferView) + ":" + textureDef.sampler;
-    if (this.textureCache[cacheKey]) {
-      return this.textureCache[cacheKey];
-    }
-    const promise = this.loadImageSource(sourceIndex, loader).then(function(texture) {
-      texture.flipY = false;
-      texture.name = textureDef.name || sourceDef.name || "";
-      if (texture.name === "" && typeof sourceDef.uri === "string" && sourceDef.uri.startsWith("data:image/") === false) {
-        texture.name = sourceDef.uri;
-      }
-      const samplers = json.samplers || {};
-      const sampler = samplers[textureDef.sampler] || {};
-      texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || three__WEBPACK_IMPORTED_MODULE_0__.LinearFilter;
-      texture.minFilter = WEBGL_FILTERS[sampler.minFilter] || three__WEBPACK_IMPORTED_MODULE_0__.LinearMipmapLinearFilter;
-      texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || three__WEBPACK_IMPORTED_MODULE_0__.RepeatWrapping;
-      texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || three__WEBPACK_IMPORTED_MODULE_0__.RepeatWrapping;
-      parser.associations.set(texture, { textures: textureIndex });
-      return texture;
-    }).catch(function() {
-      return null;
-    });
-    this.textureCache[cacheKey] = promise;
-    return promise;
-  }
-  loadImageSource(sourceIndex, loader) {
-    const parser = this;
-    const json = this.json;
-    const options = this.options;
-    if (this.sourceCache[sourceIndex] !== void 0) {
-      return this.sourceCache[sourceIndex].then((texture) => texture.clone());
-    }
-    const sourceDef = json.images[sourceIndex];
-    const URL = self.URL || self.webkitURL;
-    let sourceURI = sourceDef.uri || "";
-    let isObjectURL = false;
-    if (sourceDef.bufferView !== void 0) {
-      sourceURI = parser.getDependency("bufferView", sourceDef.bufferView).then(function(bufferView) {
-        isObjectURL = true;
-        const blob = new Blob([bufferView], { type: sourceDef.mimeType });
-        sourceURI = URL.createObjectURL(blob);
-        return sourceURI;
-      });
-    } else if (sourceDef.uri === void 0) {
-      throw new Error("THREE.GLTFLoader: Image " + sourceIndex + " is missing URI and bufferView");
-    }
-    const promise = Promise.resolve(sourceURI).then(function(sourceURI2) {
-      return new Promise(function(resolve, reject) {
-        let onLoad = resolve;
-        if (loader.isImageBitmapLoader === true) {
-          onLoad = function(imageBitmap) {
-            const texture = new three__WEBPACK_IMPORTED_MODULE_0__.Texture(imageBitmap);
-            texture.needsUpdate = true;
-            resolve(texture);
-          };
-        }
-        loader.load(three__WEBPACK_IMPORTED_MODULE_0__.LoaderUtils.resolveURL(sourceURI2, options.path), onLoad, void 0, reject);
-      });
-    }).then(function(texture) {
-      if (isObjectURL === true) {
-        URL.revokeObjectURL(sourceURI);
-      }
-      texture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType(sourceDef.uri);
-      return texture;
-    }).catch(function(error) {
-      console.error("THREE.GLTFLoader: Couldn't load texture", sourceURI);
-      throw error;
-    });
-    this.sourceCache[sourceIndex] = promise;
-    return promise;
-  }
-  /**
-   * Asynchronously assigns a texture to the given material parameters.
-   * @param {Object} materialParams
-   * @param {string} mapName
-   * @param {Object} mapDef
-   * @return {Promise<Texture>}
-   */
-  assignTexture(materialParams, mapName, mapDef, encoding) {
-    const parser = this;
-    return this.getDependency("texture", mapDef.index).then(function(texture) {
-      if (!texture)
-        return null;
-      if (mapDef.texCoord !== void 0 && mapDef.texCoord > 0) {
-        texture = texture.clone();
-        texture.channel = mapDef.texCoord;
-      }
-      if (parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]) {
-        const transform = mapDef.extensions !== void 0 ? mapDef.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM] : void 0;
-        if (transform) {
-          const gltfReference = parser.associations.get(texture);
-          texture = parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM].extendTexture(texture, transform);
-          parser.associations.set(texture, gltfReference);
-        }
-      }
-      if (encoding !== void 0) {
-        if ("colorSpace" in texture)
-          texture.colorSpace = encoding === 3001 ? "srgb" : "srgb-linear";
-        else
-          texture.encoding = encoding;
-      }
-      materialParams[mapName] = texture;
-      return texture;
-    });
-  }
-  /**
-   * Assigns final material to a Mesh, Line, or Points instance. The instance
-   * already has a material (generated from the glTF material options alone)
-   * but reuse of the same glTF material may require multiple threejs materials
-   * to accommodate different primitive types, defines, etc. New materials will
-   * be created if necessary, and reused from a cache.
-   * @param  {Object3D} mesh Mesh, Line, or Points instance.
-   */
-  assignFinalMaterial(mesh) {
-    const geometry = mesh.geometry;
-    let material = mesh.material;
-    const useDerivativeTangents = geometry.attributes.tangent === void 0;
-    const useVertexColors = geometry.attributes.color !== void 0;
-    const useFlatShading = geometry.attributes.normal === void 0;
-    if (mesh.isPoints) {
-      const cacheKey = "PointsMaterial:" + material.uuid;
-      let pointsMaterial = this.cache.get(cacheKey);
-      if (!pointsMaterial) {
-        pointsMaterial = new three__WEBPACK_IMPORTED_MODULE_0__.PointsMaterial();
-        three__WEBPACK_IMPORTED_MODULE_0__.Material.prototype.copy.call(pointsMaterial, material);
-        pointsMaterial.color.copy(material.color);
-        pointsMaterial.map = material.map;
-        pointsMaterial.sizeAttenuation = false;
-        this.cache.add(cacheKey, pointsMaterial);
-      }
-      material = pointsMaterial;
-    } else if (mesh.isLine) {
-      const cacheKey = "LineBasicMaterial:" + material.uuid;
-      let lineMaterial = this.cache.get(cacheKey);
-      if (!lineMaterial) {
-        lineMaterial = new three__WEBPACK_IMPORTED_MODULE_0__.LineBasicMaterial();
-        three__WEBPACK_IMPORTED_MODULE_0__.Material.prototype.copy.call(lineMaterial, material);
-        lineMaterial.color.copy(material.color);
-        lineMaterial.map = material.map;
-        this.cache.add(cacheKey, lineMaterial);
-      }
-      material = lineMaterial;
-    }
-    if (useDerivativeTangents || useVertexColors || useFlatShading) {
-      let cacheKey = "ClonedMaterial:" + material.uuid + ":";
-      if (useDerivativeTangents)
-        cacheKey += "derivative-tangents:";
-      if (useVertexColors)
-        cacheKey += "vertex-colors:";
-      if (useFlatShading)
-        cacheKey += "flat-shading:";
-      let cachedMaterial = this.cache.get(cacheKey);
-      if (!cachedMaterial) {
-        cachedMaterial = material.clone();
-        if (useVertexColors)
-          cachedMaterial.vertexColors = true;
-        if (useFlatShading)
-          cachedMaterial.flatShading = true;
-        if (useDerivativeTangents) {
-          if (cachedMaterial.normalScale)
-            cachedMaterial.normalScale.y *= -1;
-          if (cachedMaterial.clearcoatNormalScale)
-            cachedMaterial.clearcoatNormalScale.y *= -1;
-        }
-        this.cache.add(cacheKey, cachedMaterial);
-        this.associations.set(cachedMaterial, this.associations.get(material));
-      }
-      material = cachedMaterial;
-    }
-    mesh.material = material;
-  }
-  getMaterialType() {
-    return three__WEBPACK_IMPORTED_MODULE_0__.MeshStandardMaterial;
-  }
-  /**
-   * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials
-   * @param {number} materialIndex
-   * @return {Promise<Material>}
-   */
-  loadMaterial(materialIndex) {
-    const parser = this;
-    const json = this.json;
-    const extensions = this.extensions;
-    const materialDef = json.materials[materialIndex];
-    let materialType;
-    const materialParams = {};
-    const materialExtensions = materialDef.extensions || {};
-    const pending = [];
-    if (materialExtensions[EXTENSIONS.KHR_MATERIALS_UNLIT]) {
-      const kmuExtension = extensions[EXTENSIONS.KHR_MATERIALS_UNLIT];
-      materialType = kmuExtension.getMaterialType();
-      pending.push(kmuExtension.extendParams(materialParams, materialDef, parser));
-    } else {
-      const metallicRoughness = materialDef.pbrMetallicRoughness || {};
-      materialParams.color = new three__WEBPACK_IMPORTED_MODULE_0__.Color(1, 1, 1);
-      materialParams.opacity = 1;
-      if (Array.isArray(metallicRoughness.baseColorFactor)) {
-        const array = metallicRoughness.baseColorFactor;
-        materialParams.color.fromArray(array);
-        materialParams.opacity = array[3];
-      }
-      if (metallicRoughness.baseColorTexture !== void 0) {
-        pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, 3001));
-      }
-      materialParams.metalness = metallicRoughness.metallicFactor !== void 0 ? metallicRoughness.metallicFactor : 1;
-      materialParams.roughness = metallicRoughness.roughnessFactor !== void 0 ? metallicRoughness.roughnessFactor : 1;
-      if (metallicRoughness.metallicRoughnessTexture !== void 0) {
-        pending.push(parser.assignTexture(materialParams, "metalnessMap", metallicRoughness.metallicRoughnessTexture));
-        pending.push(parser.assignTexture(materialParams, "roughnessMap", metallicRoughness.metallicRoughnessTexture));
-      }
-      materialType = this._invokeOne(function(ext) {
-        return ext.getMaterialType && ext.getMaterialType(materialIndex);
-      });
-      pending.push(
-        Promise.all(
-          this._invokeAll(function(ext) {
-            return ext.extendMaterialParams && ext.extendMaterialParams(materialIndex, materialParams);
-          })
-        )
-      );
-    }
-    if (materialDef.doubleSided === true) {
-      materialParams.side = three__WEBPACK_IMPORTED_MODULE_0__.DoubleSide;
-    }
-    const alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;
-    if (alphaMode === ALPHA_MODES.BLEND) {
-      materialParams.transparent = true;
-      materialParams.depthWrite = false;
-    } else {
-      materialParams.transparent = false;
-      if (alphaMode === ALPHA_MODES.MASK) {
-        materialParams.alphaTest = materialDef.alphaCutoff !== void 0 ? materialDef.alphaCutoff : 0.5;
-      }
-    }
-    if (materialDef.normalTexture !== void 0 && materialType !== three__WEBPACK_IMPORTED_MODULE_0__.MeshBasicMaterial) {
-      pending.push(parser.assignTexture(materialParams, "normalMap", materialDef.normalTexture));
-      materialParams.normalScale = new three__WEBPACK_IMPORTED_MODULE_0__.Vector2(1, 1);
-      if (materialDef.normalTexture.scale !== void 0) {
-        const scale = materialDef.normalTexture.scale;
-        materialParams.normalScale.set(scale, scale);
-      }
-    }
-    if (materialDef.occlusionTexture !== void 0 && materialType !== three__WEBPACK_IMPORTED_MODULE_0__.MeshBasicMaterial) {
-      pending.push(parser.assignTexture(materialParams, "aoMap", materialDef.occlusionTexture));
-      if (materialDef.occlusionTexture.strength !== void 0) {
-        materialParams.aoMapIntensity = materialDef.occlusionTexture.strength;
-      }
-    }
-    if (materialDef.emissiveFactor !== void 0 && materialType !== three__WEBPACK_IMPORTED_MODULE_0__.MeshBasicMaterial) {
-      materialParams.emissive = new three__WEBPACK_IMPORTED_MODULE_0__.Color().fromArray(materialDef.emissiveFactor);
-    }
-    if (materialDef.emissiveTexture !== void 0 && materialType !== three__WEBPACK_IMPORTED_MODULE_0__.MeshBasicMaterial) {
-      pending.push(parser.assignTexture(materialParams, "emissiveMap", materialDef.emissiveTexture, 3001));
-    }
-    return Promise.all(pending).then(function() {
-      const material = new materialType(materialParams);
-      if (materialDef.name)
-        material.name = materialDef.name;
-      assignExtrasToUserData(material, materialDef);
-      parser.associations.set(material, { materials: materialIndex });
-      if (materialDef.extensions)
-        addUnknownExtensionsToUserData(extensions, material, materialDef);
-      return material;
-    });
-  }
-  /** When Object3D instances are targeted by animation, they need unique names. */
-  createUniqueName(originalName) {
-    const sanitizedName = three__WEBPACK_IMPORTED_MODULE_0__.PropertyBinding.sanitizeNodeName(originalName || "");
-    let name = sanitizedName;
-    for (let i = 1; this.nodeNamesUsed[name]; ++i) {
-      name = sanitizedName + "_" + i;
-    }
-    this.nodeNamesUsed[name] = true;
-    return name;
-  }
-  /**
-   * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry
-   *
-   * Creates BufferGeometries from primitives.
-   *
-   * @param {Array<GLTF.Primitive>} primitives
-   * @return {Promise<Array<BufferGeometry>>}
-   */
-  loadGeometries(primitives) {
-    const parser = this;
-    const extensions = this.extensions;
-    const cache = this.primitiveCache;
-    function createDracoPrimitive(primitive) {
-      return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive, parser).then(function(geometry) {
-        return addPrimitiveAttributes(geometry, primitive, parser);
-      });
-    }
-    const pending = [];
-    for (let i = 0, il = primitives.length; i < il; i++) {
-      const primitive = primitives[i];
-      const cacheKey = createPrimitiveKey(primitive);
-      const cached = cache[cacheKey];
-      if (cached) {
-        pending.push(cached.promise);
-      } else {
-        let geometryPromise;
-        if (primitive.extensions && primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]) {
-          geometryPromise = createDracoPrimitive(primitive);
-        } else {
-          geometryPromise = addPrimitiveAttributes(new three__WEBPACK_IMPORTED_MODULE_0__.BufferGeometry(), primitive, parser);
-        }
-        cache[cacheKey] = { primitive, promise: geometryPromise };
-        pending.push(geometryPromise);
-      }
-    }
-    return Promise.all(pending);
-  }
-  /**
-   * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes
-   * @param {number} meshIndex
-   * @return {Promise<Group|Mesh|SkinnedMesh>}
-   */
-  loadMesh(meshIndex) {
-    const parser = this;
-    const json = this.json;
-    const extensions = this.extensions;
-    const meshDef = json.meshes[meshIndex];
-    const primitives = meshDef.primitives;
-    const pending = [];
-    for (let i = 0, il = primitives.length; i < il; i++) {
-      const material = primitives[i].material === void 0 ? createDefaultMaterial(this.cache) : this.getDependency("material", primitives[i].material);
-      pending.push(material);
-    }
-    pending.push(parser.loadGeometries(primitives));
-    return Promise.all(pending).then(function(results) {
-      const materials = results.slice(0, results.length - 1);
-      const geometries = results[results.length - 1];
-      const meshes = [];
-      for (let i = 0, il = geometries.length; i < il; i++) {
-        const geometry = geometries[i];
-        const primitive = primitives[i];
-        let mesh;
-        const material = materials[i];
-        if (primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || primitive.mode === void 0) {
-          mesh = meshDef.isSkinnedMesh === true ? new three__WEBPACK_IMPORTED_MODULE_0__.SkinnedMesh(geometry, material) : new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(geometry, material);
-          if (mesh.isSkinnedMesh === true) {
-            mesh.normalizeSkinWeights();
-          }
-          if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP) {
-            mesh.geometry = (0,_utils_BufferGeometryUtils_js__WEBPACK_IMPORTED_MODULE_1__.toTrianglesDrawMode)(mesh.geometry, three__WEBPACK_IMPORTED_MODULE_0__.TriangleStripDrawMode);
-          } else if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN) {
-            mesh.geometry = (0,_utils_BufferGeometryUtils_js__WEBPACK_IMPORTED_MODULE_1__.toTrianglesDrawMode)(mesh.geometry, three__WEBPACK_IMPORTED_MODULE_0__.TriangleFanDrawMode);
-          }
-        } else if (primitive.mode === WEBGL_CONSTANTS.LINES) {
-          mesh = new three__WEBPACK_IMPORTED_MODULE_0__.LineSegments(geometry, material);
-        } else if (primitive.mode === WEBGL_CONSTANTS.LINE_STRIP) {
-          mesh = new three__WEBPACK_IMPORTED_MODULE_0__.Line(geometry, material);
-        } else if (primitive.mode === WEBGL_CONSTANTS.LINE_LOOP) {
-          mesh = new three__WEBPACK_IMPORTED_MODULE_0__.LineLoop(geometry, material);
-        } else if (primitive.mode === WEBGL_CONSTANTS.POINTS) {
-          mesh = new three__WEBPACK_IMPORTED_MODULE_0__.Points(geometry, material);
-        } else {
-          throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + primitive.mode);
-        }
-        if (Object.keys(mesh.geometry.morphAttributes).length > 0) {
-          updateMorphTargets(mesh, meshDef);
-        }
-        mesh.name = parser.createUniqueName(meshDef.name || "mesh_" + meshIndex);
-        assignExtrasToUserData(mesh, meshDef);
-        if (primitive.extensions)
-          addUnknownExtensionsToUserData(extensions, mesh, primitive);
-        parser.assignFinalMaterial(mesh);
-        meshes.push(mesh);
-      }
-      for (let i = 0, il = meshes.length; i < il; i++) {
-        parser.associations.set(meshes[i], {
-          meshes: meshIndex,
-          primitives: i
-        });
-      }
-      if (meshes.length === 1) {
-        return meshes[0];
-      }
-      const group = new three__WEBPACK_IMPORTED_MODULE_0__.Group();
-      parser.associations.set(group, { meshes: meshIndex });
-      for (let i = 0, il = meshes.length; i < il; i++) {
-        group.add(meshes[i]);
-      }
-      return group;
-    });
-  }
-  /**
-   * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras
-   * @param {number} cameraIndex
-   * @return {Promise<THREE.Camera>}
-   */
-  loadCamera(cameraIndex) {
-    let camera;
-    const cameraDef = this.json.cameras[cameraIndex];
-    const params = cameraDef[cameraDef.type];
-    if (!params) {
-      console.warn("THREE.GLTFLoader: Missing camera parameters.");
-      return;
-    }
-    if (cameraDef.type === "perspective") {
-      camera = new three__WEBPACK_IMPORTED_MODULE_0__.PerspectiveCamera(
-        three__WEBPACK_IMPORTED_MODULE_0__.MathUtils.radToDeg(params.yfov),
-        params.aspectRatio || 1,
-        params.znear || 1,
-        params.zfar || 2e6
-      );
-    } else if (cameraDef.type === "orthographic") {
-      camera = new three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera(-params.xmag, params.xmag, params.ymag, -params.ymag, params.znear, params.zfar);
-    }
-    if (cameraDef.name)
-      camera.name = this.createUniqueName(cameraDef.name);
-    assignExtrasToUserData(camera, cameraDef);
-    return Promise.resolve(camera);
-  }
-  /**
-   * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins
-   * @param {number} skinIndex
-   * @return {Promise<Skeleton>}
-   */
-  loadSkin(skinIndex) {
-    const skinDef = this.json.skins[skinIndex];
-    const pending = [];
-    for (let i = 0, il = skinDef.joints.length; i < il; i++) {
-      pending.push(this._loadNodeShallow(skinDef.joints[i]));
-    }
-    if (skinDef.inverseBindMatrices !== void 0) {
-      pending.push(this.getDependency("accessor", skinDef.inverseBindMatrices));
-    } else {
-      pending.push(null);
-    }
-    return Promise.all(pending).then(function(results) {
-      const inverseBindMatrices = results.pop();
-      const jointNodes = results;
-      const bones = [];
-      const boneInverses = [];
-      for (let i = 0, il = jointNodes.length; i < il; i++) {
-        const jointNode = jointNodes[i];
-        if (jointNode) {
-          bones.push(jointNode);
-          const mat = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-          if (inverseBindMatrices !== null) {
-            mat.fromArray(inverseBindMatrices.array, i * 16);
-          }
-          boneInverses.push(mat);
-        } else {
-          console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', skinDef.joints[i]);
-        }
-      }
-      return new three__WEBPACK_IMPORTED_MODULE_0__.Skeleton(bones, boneInverses);
-    });
-  }
-  /**
-   * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations
-   * @param {number} animationIndex
-   * @return {Promise<AnimationClip>}
-   */
-  loadAnimation(animationIndex) {
-    const json = this.json;
-    const animationDef = json.animations[animationIndex];
-    const animationName = animationDef.name ? animationDef.name : "animation_" + animationIndex;
-    const pendingNodes = [];
-    const pendingInputAccessors = [];
-    const pendingOutputAccessors = [];
-    const pendingSamplers = [];
-    const pendingTargets = [];
-    for (let i = 0, il = animationDef.channels.length; i < il; i++) {
-      const channel = animationDef.channels[i];
-      const sampler = animationDef.samplers[channel.sampler];
-      const target = channel.target;
-      const name = target.node;
-      const input = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.input] : sampler.input;
-      const output = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.output] : sampler.output;
-      if (target.node === void 0)
-        continue;
-      pendingNodes.push(this.getDependency("node", name));
-      pendingInputAccessors.push(this.getDependency("accessor", input));
-      pendingOutputAccessors.push(this.getDependency("accessor", output));
-      pendingSamplers.push(sampler);
-      pendingTargets.push(target);
-    }
-    return Promise.all([
-      Promise.all(pendingNodes),
-      Promise.all(pendingInputAccessors),
-      Promise.all(pendingOutputAccessors),
-      Promise.all(pendingSamplers),
-      Promise.all(pendingTargets)
-    ]).then(function(dependencies) {
-      const nodes = dependencies[0];
-      const inputAccessors = dependencies[1];
-      const outputAccessors = dependencies[2];
-      const samplers = dependencies[3];
-      const targets = dependencies[4];
-      const tracks = [];
-      for (let i = 0, il = nodes.length; i < il; i++) {
-        const node = nodes[i];
-        const inputAccessor = inputAccessors[i];
-        const outputAccessor = outputAccessors[i];
-        const sampler = samplers[i];
-        const target = targets[i];
-        if (node === void 0)
-          continue;
-        node.updateMatrix();
-        let TypedKeyframeTrack;
-        switch (PATH_PROPERTIES[target.path]) {
-          case PATH_PROPERTIES.weights:
-            TypedKeyframeTrack = three__WEBPACK_IMPORTED_MODULE_0__.NumberKeyframeTrack;
-            break;
-          case PATH_PROPERTIES.rotation:
-            TypedKeyframeTrack = three__WEBPACK_IMPORTED_MODULE_0__.QuaternionKeyframeTrack;
-            break;
-          case PATH_PROPERTIES.position:
-          case PATH_PROPERTIES.scale:
-          default:
-            TypedKeyframeTrack = three__WEBPACK_IMPORTED_MODULE_0__.VectorKeyframeTrack;
-            break;
-        }
-        const targetName = node.name ? node.name : node.uuid;
-        const interpolation = sampler.interpolation !== void 0 ? INTERPOLATION[sampler.interpolation] : three__WEBPACK_IMPORTED_MODULE_0__.InterpolateLinear;
-        const targetNames = [];
-        if (PATH_PROPERTIES[target.path] === PATH_PROPERTIES.weights) {
-          node.traverse(function(object) {
-            if (object.morphTargetInfluences) {
-              targetNames.push(object.name ? object.name : object.uuid);
-            }
-          });
-        } else {
-          targetNames.push(targetName);
-        }
-        let outputArray = outputAccessor.array;
-        if (outputAccessor.normalized) {
-          const scale = getNormalizedComponentScale(outputArray.constructor);
-          const scaled = new Float32Array(outputArray.length);
-          for (let j = 0, jl = outputArray.length; j < jl; j++) {
-            scaled[j] = outputArray[j] * scale;
-          }
-          outputArray = scaled;
-        }
-        for (let j = 0, jl = targetNames.length; j < jl; j++) {
-          const track = new TypedKeyframeTrack(
-            targetNames[j] + "." + PATH_PROPERTIES[target.path],
-            inputAccessor.array,
-            outputArray,
-            interpolation
-          );
-          if (sampler.interpolation === "CUBICSPLINE") {
-            track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline(result) {
-              const interpolantType = this instanceof three__WEBPACK_IMPORTED_MODULE_0__.QuaternionKeyframeTrack ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;
-              return new interpolantType(this.times, this.values, this.getValueSize() / 3, result);
-            };
-            track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;
-          }
-          tracks.push(track);
-        }
-      }
-      return new three__WEBPACK_IMPORTED_MODULE_0__.AnimationClip(animationName, void 0, tracks);
-    });
-  }
-  createNodeMesh(nodeIndex) {
-    const json = this.json;
-    const parser = this;
-    const nodeDef = json.nodes[nodeIndex];
-    if (nodeDef.mesh === void 0)
-      return null;
-    return parser.getDependency("mesh", nodeDef.mesh).then(function(mesh) {
-      const node = parser._getNodeRef(parser.meshCache, nodeDef.mesh, mesh);
-      if (nodeDef.weights !== void 0) {
-        node.traverse(function(o) {
-          if (!o.isMesh)
-            return;
-          for (let i = 0, il = nodeDef.weights.length; i < il; i++) {
-            o.morphTargetInfluences[i] = nodeDef.weights[i];
-          }
-        });
-      }
-      return node;
-    });
-  }
-  /**
-   * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy
-   * @param {number} nodeIndex
-   * @return {Promise<Object3D>}
-   */
-  loadNode(nodeIndex) {
-    const json = this.json;
-    const parser = this;
-    const nodeDef = json.nodes[nodeIndex];
-    const nodePending = parser._loadNodeShallow(nodeIndex);
-    const childPending = [];
-    const childrenDef = nodeDef.children || [];
-    for (let i = 0, il = childrenDef.length; i < il; i++) {
-      childPending.push(parser.getDependency("node", childrenDef[i]));
-    }
-    const skeletonPending = nodeDef.skin === void 0 ? Promise.resolve(null) : parser.getDependency("skin", nodeDef.skin);
-    return Promise.all([nodePending, Promise.all(childPending), skeletonPending]).then(function(results) {
-      const node = results[0];
-      const children = results[1];
-      const skeleton = results[2];
-      if (skeleton !== null) {
-        node.traverse(function(mesh) {
-          if (!mesh.isSkinnedMesh)
-            return;
-          mesh.bind(skeleton, _identityMatrix);
-        });
-      }
-      for (let i = 0, il = children.length; i < il; i++) {
-        node.add(children[i]);
-      }
-      return node;
-    });
-  }
-  // ._loadNodeShallow() parses a single node.
-  // skin and child nodes are created and added in .loadNode() (no '_' prefix).
-  _loadNodeShallow(nodeIndex) {
-    const json = this.json;
-    const extensions = this.extensions;
-    const parser = this;
-    if (this.nodeCache[nodeIndex] !== void 0) {
-      return this.nodeCache[nodeIndex];
-    }
-    const nodeDef = json.nodes[nodeIndex];
-    const nodeName = nodeDef.name ? parser.createUniqueName(nodeDef.name) : "";
-    const pending = [];
-    const meshPromise = parser._invokeOne(function(ext) {
-      return ext.createNodeMesh && ext.createNodeMesh(nodeIndex);
-    });
-    if (meshPromise) {
-      pending.push(meshPromise);
-    }
-    if (nodeDef.camera !== void 0) {
-      pending.push(
-        parser.getDependency("camera", nodeDef.camera).then(function(camera) {
-          return parser._getNodeRef(parser.cameraCache, nodeDef.camera, camera);
-        })
-      );
-    }
-    parser._invokeAll(function(ext) {
-      return ext.createNodeAttachment && ext.createNodeAttachment(nodeIndex);
-    }).forEach(function(promise) {
-      pending.push(promise);
-    });
-    this.nodeCache[nodeIndex] = Promise.all(pending).then(function(objects) {
-      let node;
-      if (nodeDef.isBone === true) {
-        node = new three__WEBPACK_IMPORTED_MODULE_0__.Bone();
-      } else if (objects.length > 1) {
-        node = new three__WEBPACK_IMPORTED_MODULE_0__.Group();
-      } else if (objects.length === 1) {
-        node = objects[0];
-      } else {
-        node = new three__WEBPACK_IMPORTED_MODULE_0__.Object3D();
-      }
-      if (node !== objects[0]) {
-        for (let i = 0, il = objects.length; i < il; i++) {
-          node.add(objects[i]);
-        }
-      }
-      if (nodeDef.name) {
-        node.userData.name = nodeDef.name;
-        node.name = nodeName;
-      }
-      assignExtrasToUserData(node, nodeDef);
-      if (nodeDef.extensions)
-        addUnknownExtensionsToUserData(extensions, node, nodeDef);
-      if (nodeDef.matrix !== void 0) {
-        const matrix = new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-        matrix.fromArray(nodeDef.matrix);
-        node.applyMatrix4(matrix);
-      } else {
-        if (nodeDef.translation !== void 0) {
-          node.position.fromArray(nodeDef.translation);
-        }
-        if (nodeDef.rotation !== void 0) {
-          node.quaternion.fromArray(nodeDef.rotation);
-        }
-        if (nodeDef.scale !== void 0) {
-          node.scale.fromArray(nodeDef.scale);
-        }
-      }
-      if (!parser.associations.has(node)) {
-        parser.associations.set(node, {});
-      }
-      parser.associations.get(node).nodes = nodeIndex;
-      return node;
-    });
-    return this.nodeCache[nodeIndex];
-  }
-  /**
-   * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes
-   * @param {number} sceneIndex
-   * @return {Promise<Group>}
-   */
-  loadScene(sceneIndex) {
-    const extensions = this.extensions;
-    const sceneDef = this.json.scenes[sceneIndex];
-    const parser = this;
-    const scene = new three__WEBPACK_IMPORTED_MODULE_0__.Group();
-    if (sceneDef.name)
-      scene.name = parser.createUniqueName(sceneDef.name);
-    assignExtrasToUserData(scene, sceneDef);
-    if (sceneDef.extensions)
-      addUnknownExtensionsToUserData(extensions, scene, sceneDef);
-    const nodeIds = sceneDef.nodes || [];
-    const pending = [];
-    for (let i = 0, il = nodeIds.length; i < il; i++) {
-      pending.push(parser.getDependency("node", nodeIds[i]));
-    }
-    return Promise.all(pending).then(function(nodes) {
-      for (let i = 0, il = nodes.length; i < il; i++) {
-        scene.add(nodes[i]);
-      }
-      const reduceAssociations = (node) => {
-        const reducedAssociations = /* @__PURE__ */ new Map();
-        for (const [key, value] of parser.associations) {
-          if (key instanceof three__WEBPACK_IMPORTED_MODULE_0__.Material || key instanceof three__WEBPACK_IMPORTED_MODULE_0__.Texture) {
-            reducedAssociations.set(key, value);
-          }
-        }
-        node.traverse((node2) => {
-          const mappings = parser.associations.get(node2);
-          if (mappings != null) {
-            reducedAssociations.set(node2, mappings);
-          }
-        });
-        return reducedAssociations;
-      };
-      parser.associations = reduceAssociations(scene);
-      return scene;
-    });
-  }
-}
-function computeBounds(geometry, primitiveDef, parser) {
-  const attributes = primitiveDef.attributes;
-  const box = new three__WEBPACK_IMPORTED_MODULE_0__.Box3();
-  if (attributes.POSITION !== void 0) {
-    const accessor = parser.json.accessors[attributes.POSITION];
-    const min = accessor.min;
-    const max = accessor.max;
-    if (min !== void 0 && max !== void 0) {
-      box.set(new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(min[0], min[1], min[2]), new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(max[0], max[1], max[2]));
-      if (accessor.normalized) {
-        const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]);
-        box.min.multiplyScalar(boxScale);
-        box.max.multiplyScalar(boxScale);
-      }
-    } else {
-      console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");
-      return;
-    }
-  } else {
-    return;
-  }
-  const targets = primitiveDef.targets;
-  if (targets !== void 0) {
-    const maxDisplacement = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    const vector = new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-    for (let i = 0, il = targets.length; i < il; i++) {
-      const target = targets[i];
-      if (target.POSITION !== void 0) {
-        const accessor = parser.json.accessors[target.POSITION];
-        const min = accessor.min;
-        const max = accessor.max;
-        if (min !== void 0 && max !== void 0) {
-          vector.setX(Math.max(Math.abs(min[0]), Math.abs(max[0])));
-          vector.setY(Math.max(Math.abs(min[1]), Math.abs(max[1])));
-          vector.setZ(Math.max(Math.abs(min[2]), Math.abs(max[2])));
-          if (accessor.normalized) {
-            const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]);
-            vector.multiplyScalar(boxScale);
-          }
-          maxDisplacement.max(vector);
-        } else {
-          console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION.");
-        }
-      }
-    }
-    box.expandByVector(maxDisplacement);
-  }
-  geometry.boundingBox = box;
-  const sphere = new three__WEBPACK_IMPORTED_MODULE_0__.Sphere();
-  box.getCenter(sphere.center);
-  sphere.radius = box.min.distanceTo(box.max) / 2;
-  geometry.boundingSphere = sphere;
-}
-function addPrimitiveAttributes(geometry, primitiveDef, parser) {
-  const attributes = primitiveDef.attributes;
-  const pending = [];
-  function assignAttributeAccessor(accessorIndex, attributeName) {
-    return parser.getDependency("accessor", accessorIndex).then(function(accessor) {
-      geometry.setAttribute(attributeName, accessor);
-    });
-  }
-  for (const gltfAttributeName in attributes) {
-    const threeAttributeName = ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase();
-    if (threeAttributeName in geometry.attributes)
-      continue;
-    pending.push(assignAttributeAccessor(attributes[gltfAttributeName], threeAttributeName));
-  }
-  if (primitiveDef.indices !== void 0 && !geometry.index) {
-    const accessor = parser.getDependency("accessor", primitiveDef.indices).then(function(accessor2) {
-      geometry.setIndex(accessor2);
-    });
-    pending.push(accessor);
-  }
-  assignExtrasToUserData(geometry, primitiveDef);
-  computeBounds(geometry, primitiveDef, parser);
-  return Promise.all(pending).then(function() {
-    return primitiveDef.targets !== void 0 ? addMorphTargets(geometry, primitiveDef.targets, parser) : geometry;
-  });
-}
-
-
-
-/***/ }),
-
-/***/ 28934:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "a": () => (/* binding */ KTX2Loader)
-});
-
-// EXTERNAL MODULE: ./node_modules/three/build/three.module.js
-var three_module = __webpack_require__(99477);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/utils/WorkerPool.js
-class WorkerPool {
-  constructor(pool = 4) {
-    this.pool = pool;
-    this.queue = [];
-    this.workers = [];
-    this.workersResolve = [];
-    this.workerStatus = 0;
-  }
-  _initWorker(workerId) {
-    if (!this.workers[workerId]) {
-      const worker = this.workerCreator();
-      worker.addEventListener("message", this._onMessage.bind(this, workerId));
-      this.workers[workerId] = worker;
-    }
-  }
-  _getIdleWorker() {
-    for (let i = 0; i < this.pool; i++)
-      if (!(this.workerStatus & 1 << i))
-        return i;
-    return -1;
-  }
-  _onMessage(workerId, msg) {
-    const resolve = this.workersResolve[workerId];
-    resolve && resolve(msg);
-    if (this.queue.length) {
-      const { resolve: resolve2, msg: msg2, transfer } = this.queue.shift();
-      this.workersResolve[workerId] = resolve2;
-      this.workers[workerId].postMessage(msg2, transfer);
-    } else {
-      this.workerStatus ^= 1 << workerId;
-    }
-  }
-  setWorkerCreator(workerCreator) {
-    this.workerCreator = workerCreator;
-  }
-  setWorkerLimit(pool) {
-    this.pool = pool;
-  }
-  postMessage(msg, transfer) {
-    return new Promise((resolve) => {
-      const workerId = this._getIdleWorker();
-      if (workerId !== -1) {
-        this._initWorker(workerId);
-        this.workerStatus |= 1 << workerId;
-        this.workersResolve[workerId] = resolve;
-        this.workers[workerId].postMessage(msg, transfer);
-      } else {
-        this.queue.push({ resolve, msg, transfer });
-      }
-    });
-  }
-  dispose() {
-    this.workers.forEach((worker) => worker.terminate());
-    this.workersResolve.length = 0;
-    this.workers.length = 0;
-    this.queue.length = 0;
-    this.workerStatus = 0;
-  }
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/ktx-parse/dist/ktx-parse.modern.js
-///////////////////////////////////////////////////
-// KTX2 Header.
-///////////////////////////////////////////////////
-const KHR_SUPERCOMPRESSION_NONE = 0;
-const KHR_SUPERCOMPRESSION_BASISLZ = 1;
-const KHR_SUPERCOMPRESSION_ZSTD = 2;
-const KHR_SUPERCOMPRESSION_ZLIB = 3; ///////////////////////////////////////////////////
-// Data Format Descriptor (DFD).
-///////////////////////////////////////////////////
-
-const KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT = 0;
-const KHR_DF_VENDORID_KHRONOS = 0;
-const KHR_DF_VERSION = 2;
-const KHR_DF_MODEL_UNSPECIFIED = 0;
-const KHR_DF_MODEL_RGBSDA = 1; // ...
-
-const KHR_DF_MODEL_ETC1 = 160;
-const KHR_DF_MODEL_ETC2 = 161;
-const KHR_DF_MODEL_ASTC = 162;
-const KHR_DF_MODEL_ETC1S = 163;
-const KHR_DF_MODEL_UASTC = 166;
-const KHR_DF_FLAG_ALPHA_STRAIGHT = 0;
-const KHR_DF_FLAG_ALPHA_PREMULTIPLIED = 1;
-const KHR_DF_TRANSFER_UNSPECIFIED = 0;
-const KHR_DF_TRANSFER_LINEAR = 1;
-const KHR_DF_TRANSFER_SRGB = 2;
-const KHR_DF_TRANSFER_ITU = 3;
-const KHR_DF_TRANSFER_NTSC = 4;
-const KHR_DF_TRANSFER_SLOG = 5;
-const KHR_DF_TRANSFER_SLOG2 = 6;
-const KHR_DF_TRANSFER_BT1886 = 7;
-const KHR_DF_TRANSFER_HLG_OETF = 8;
-const KHR_DF_TRANSFER_HLG_EOTF = 9;
-const KHR_DF_TRANSFER_PQ_EOTF = 10;
-const KHR_DF_TRANSFER_PQ_OETF = 11;
-const KHR_DF_TRANSFER_DCIP3 = 12;
-const KHR_DF_TRANSFER_PAL_OETF = 13;
-const KHR_DF_TRANSFER_PAL625_EOTF = 14;
-const KHR_DF_TRANSFER_ST240 = 15;
-const KHR_DF_TRANSFER_ACESCC = 16;
-const KHR_DF_TRANSFER_ACESCCT = 17;
-const KHR_DF_TRANSFER_ADOBERGB = 18;
-const KHR_DF_PRIMARIES_UNSPECIFIED = 0;
-const KHR_DF_PRIMARIES_BT709 = 1;
-const KHR_DF_PRIMARIES_BT601_EBU = 2;
-const KHR_DF_PRIMARIES_BT601_SMPTE = 3;
-const KHR_DF_PRIMARIES_BT2020 = 4;
-const KHR_DF_PRIMARIES_CIEXYZ = 5;
-const KHR_DF_PRIMARIES_ACES = 6;
-const KHR_DF_PRIMARIES_ACESCC = 7;
-const KHR_DF_PRIMARIES_NTSC1953 = 8;
-const KHR_DF_PRIMARIES_PAL525 = 9;
-const KHR_DF_PRIMARIES_DISPLAYP3 = 10;
-const KHR_DF_PRIMARIES_ADOBERGB = 11;
-const KHR_DF_CHANNEL_RGBSDA_RED = 0;
-const KHR_DF_CHANNEL_RGBSDA_GREEN = 1;
-const KHR_DF_CHANNEL_RGBSDA_BLUE = 2;
-const KHR_DF_CHANNEL_RGBSDA_STENCIL = 13;
-const KHR_DF_CHANNEL_RGBSDA_DEPTH = 14;
-const KHR_DF_CHANNEL_RGBSDA_ALPHA = 15;
-const KHR_DF_SAMPLE_DATATYPE_FLOAT = 0x80;
-const KHR_DF_SAMPLE_DATATYPE_SIGNED = 0x40;
-const KHR_DF_SAMPLE_DATATYPE_EXPONENT = 0x20;
-const KHR_DF_SAMPLE_DATATYPE_LINEAR = 0x10; ///////////////////////////////////////////////////
-// VK FORMAT.
-///////////////////////////////////////////////////
-
-const VK_FORMAT_UNDEFINED = 0;
-const VK_FORMAT_R4G4_UNORM_PACK8 = 1;
-const VK_FORMAT_R4G4B4A4_UNORM_PACK16 = 2;
-const VK_FORMAT_B4G4R4A4_UNORM_PACK16 = 3;
-const VK_FORMAT_R5G6B5_UNORM_PACK16 = 4;
-const VK_FORMAT_B5G6R5_UNORM_PACK16 = 5;
-const VK_FORMAT_R5G5B5A1_UNORM_PACK16 = 6;
-const VK_FORMAT_B5G5R5A1_UNORM_PACK16 = 7;
-const VK_FORMAT_A1R5G5B5_UNORM_PACK16 = 8;
-const VK_FORMAT_R8_UNORM = 9;
-const VK_FORMAT_R8_SNORM = 10;
-const VK_FORMAT_R8_UINT = 13;
-const VK_FORMAT_R8_SINT = 14;
-const VK_FORMAT_R8_SRGB = 15;
-const VK_FORMAT_R8G8_UNORM = 16;
-const VK_FORMAT_R8G8_SNORM = 17;
-const VK_FORMAT_R8G8_UINT = 20;
-const VK_FORMAT_R8G8_SINT = 21;
-const VK_FORMAT_R8G8_SRGB = 22;
-const VK_FORMAT_R8G8B8_UNORM = 23;
-const VK_FORMAT_R8G8B8_SNORM = 24;
-const VK_FORMAT_R8G8B8_UINT = 27;
-const VK_FORMAT_R8G8B8_SINT = 28;
-const VK_FORMAT_R8G8B8_SRGB = 29;
-const VK_FORMAT_B8G8R8_UNORM = 30;
-const VK_FORMAT_B8G8R8_SNORM = 31;
-const VK_FORMAT_B8G8R8_UINT = 34;
-const VK_FORMAT_B8G8R8_SINT = 35;
-const VK_FORMAT_B8G8R8_SRGB = 36;
-const VK_FORMAT_R8G8B8A8_UNORM = 37;
-const VK_FORMAT_R8G8B8A8_SNORM = 38;
-const VK_FORMAT_R8G8B8A8_UINT = 41;
-const VK_FORMAT_R8G8B8A8_SINT = 42;
-const VK_FORMAT_R8G8B8A8_SRGB = 43;
-const VK_FORMAT_B8G8R8A8_UNORM = 44;
-const VK_FORMAT_B8G8R8A8_SNORM = 45;
-const VK_FORMAT_B8G8R8A8_UINT = 48;
-const VK_FORMAT_B8G8R8A8_SINT = 49;
-const VK_FORMAT_B8G8R8A8_SRGB = 50;
-const VK_FORMAT_A2R10G10B10_UNORM_PACK32 = 58;
-const VK_FORMAT_A2R10G10B10_SNORM_PACK32 = 59;
-const VK_FORMAT_A2R10G10B10_UINT_PACK32 = 62;
-const VK_FORMAT_A2R10G10B10_SINT_PACK32 = 63;
-const VK_FORMAT_A2B10G10R10_UNORM_PACK32 = 64;
-const VK_FORMAT_A2B10G10R10_SNORM_PACK32 = 65;
-const VK_FORMAT_A2B10G10R10_UINT_PACK32 = 68;
-const VK_FORMAT_A2B10G10R10_SINT_PACK32 = 69;
-const VK_FORMAT_R16_UNORM = 70;
-const VK_FORMAT_R16_SNORM = 71;
-const VK_FORMAT_R16_UINT = 74;
-const VK_FORMAT_R16_SINT = 75;
-const VK_FORMAT_R16_SFLOAT = 76;
-const VK_FORMAT_R16G16_UNORM = 77;
-const VK_FORMAT_R16G16_SNORM = 78;
-const VK_FORMAT_R16G16_UINT = 81;
-const VK_FORMAT_R16G16_SINT = 82;
-const VK_FORMAT_R16G16_SFLOAT = 83;
-const VK_FORMAT_R16G16B16_UNORM = 84;
-const VK_FORMAT_R16G16B16_SNORM = 85;
-const VK_FORMAT_R16G16B16_UINT = 88;
-const VK_FORMAT_R16G16B16_SINT = 89;
-const VK_FORMAT_R16G16B16_SFLOAT = 90;
-const VK_FORMAT_R16G16B16A16_UNORM = 91;
-const VK_FORMAT_R16G16B16A16_SNORM = 92;
-const VK_FORMAT_R16G16B16A16_UINT = 95;
-const VK_FORMAT_R16G16B16A16_SINT = 96;
-const VK_FORMAT_R16G16B16A16_SFLOAT = 97;
-const VK_FORMAT_R32_UINT = 98;
-const VK_FORMAT_R32_SINT = 99;
-const VK_FORMAT_R32_SFLOAT = 100;
-const VK_FORMAT_R32G32_UINT = 101;
-const VK_FORMAT_R32G32_SINT = 102;
-const VK_FORMAT_R32G32_SFLOAT = 103;
-const VK_FORMAT_R32G32B32_UINT = 104;
-const VK_FORMAT_R32G32B32_SINT = 105;
-const VK_FORMAT_R32G32B32_SFLOAT = 106;
-const VK_FORMAT_R32G32B32A32_UINT = 107;
-const VK_FORMAT_R32G32B32A32_SINT = 108;
-const VK_FORMAT_R32G32B32A32_SFLOAT = 109;
-const VK_FORMAT_R64_UINT = 110;
-const VK_FORMAT_R64_SINT = 111;
-const VK_FORMAT_R64_SFLOAT = 112;
-const VK_FORMAT_R64G64_UINT = 113;
-const VK_FORMAT_R64G64_SINT = 114;
-const VK_FORMAT_R64G64_SFLOAT = 115;
-const VK_FORMAT_R64G64B64_UINT = 116;
-const VK_FORMAT_R64G64B64_SINT = 117;
-const VK_FORMAT_R64G64B64_SFLOAT = 118;
-const VK_FORMAT_R64G64B64A64_UINT = 119;
-const VK_FORMAT_R64G64B64A64_SINT = 120;
-const VK_FORMAT_R64G64B64A64_SFLOAT = 121;
-const VK_FORMAT_B10G11R11_UFLOAT_PACK32 = 122;
-const VK_FORMAT_E5B9G9R9_UFLOAT_PACK32 = 123;
-const VK_FORMAT_D16_UNORM = 124;
-const VK_FORMAT_X8_D24_UNORM_PACK32 = 125;
-const VK_FORMAT_D32_SFLOAT = 126;
-const VK_FORMAT_S8_UINT = 127;
-const VK_FORMAT_D16_UNORM_S8_UINT = 128;
-const VK_FORMAT_D24_UNORM_S8_UINT = 129;
-const VK_FORMAT_D32_SFLOAT_S8_UINT = 130;
-const VK_FORMAT_BC1_RGB_UNORM_BLOCK = 131;
-const VK_FORMAT_BC1_RGB_SRGB_BLOCK = 132;
-const VK_FORMAT_BC1_RGBA_UNORM_BLOCK = 133;
-const VK_FORMAT_BC1_RGBA_SRGB_BLOCK = 134;
-const VK_FORMAT_BC2_UNORM_BLOCK = 135;
-const VK_FORMAT_BC2_SRGB_BLOCK = 136;
-const VK_FORMAT_BC3_UNORM_BLOCK = 137;
-const VK_FORMAT_BC3_SRGB_BLOCK = 138;
-const VK_FORMAT_BC4_UNORM_BLOCK = 139;
-const VK_FORMAT_BC4_SNORM_BLOCK = 140;
-const VK_FORMAT_BC5_UNORM_BLOCK = 141;
-const VK_FORMAT_BC5_SNORM_BLOCK = 142;
-const VK_FORMAT_BC6H_UFLOAT_BLOCK = 143;
-const VK_FORMAT_BC6H_SFLOAT_BLOCK = 144;
-const VK_FORMAT_BC7_UNORM_BLOCK = 145;
-const VK_FORMAT_BC7_SRGB_BLOCK = 146;
-const VK_FORMAT_ETC2_R8G8B8_UNORM_BLOCK = 147;
-const VK_FORMAT_ETC2_R8G8B8_SRGB_BLOCK = 148;
-const VK_FORMAT_ETC2_R8G8B8A1_UNORM_BLOCK = 149;
-const VK_FORMAT_ETC2_R8G8B8A1_SRGB_BLOCK = 150;
-const VK_FORMAT_ETC2_R8G8B8A8_UNORM_BLOCK = 151;
-const VK_FORMAT_ETC2_R8G8B8A8_SRGB_BLOCK = 152;
-const VK_FORMAT_EAC_R11_UNORM_BLOCK = 153;
-const VK_FORMAT_EAC_R11_SNORM_BLOCK = 154;
-const VK_FORMAT_EAC_R11G11_UNORM_BLOCK = 155;
-const VK_FORMAT_EAC_R11G11_SNORM_BLOCK = 156;
-const VK_FORMAT_ASTC_4x4_UNORM_BLOCK = 157;
-const VK_FORMAT_ASTC_4x4_SRGB_BLOCK = 158;
-const VK_FORMAT_ASTC_5x4_UNORM_BLOCK = 159;
-const VK_FORMAT_ASTC_5x4_SRGB_BLOCK = 160;
-const VK_FORMAT_ASTC_5x5_UNORM_BLOCK = 161;
-const VK_FORMAT_ASTC_5x5_SRGB_BLOCK = 162;
-const VK_FORMAT_ASTC_6x5_UNORM_BLOCK = 163;
-const VK_FORMAT_ASTC_6x5_SRGB_BLOCK = 164;
-const VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165;
-const VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166;
-const VK_FORMAT_ASTC_8x5_UNORM_BLOCK = 167;
-const VK_FORMAT_ASTC_8x5_SRGB_BLOCK = 168;
-const VK_FORMAT_ASTC_8x6_UNORM_BLOCK = 169;
-const VK_FORMAT_ASTC_8x6_SRGB_BLOCK = 170;
-const VK_FORMAT_ASTC_8x8_UNORM_BLOCK = 171;
-const VK_FORMAT_ASTC_8x8_SRGB_BLOCK = 172;
-const VK_FORMAT_ASTC_10x5_UNORM_BLOCK = 173;
-const VK_FORMAT_ASTC_10x5_SRGB_BLOCK = 174;
-const VK_FORMAT_ASTC_10x6_UNORM_BLOCK = 175;
-const VK_FORMAT_ASTC_10x6_SRGB_BLOCK = 176;
-const VK_FORMAT_ASTC_10x8_UNORM_BLOCK = 177;
-const VK_FORMAT_ASTC_10x8_SRGB_BLOCK = 178;
-const VK_FORMAT_ASTC_10x10_UNORM_BLOCK = 179;
-const VK_FORMAT_ASTC_10x10_SRGB_BLOCK = 180;
-const VK_FORMAT_ASTC_12x10_UNORM_BLOCK = 181;
-const VK_FORMAT_ASTC_12x10_SRGB_BLOCK = 182;
-const VK_FORMAT_ASTC_12x12_UNORM_BLOCK = 183;
-const VK_FORMAT_ASTC_12x12_SRGB_BLOCK = 184;
-const VK_FORMAT_R10X6_UNORM_PACK16 = 1000156007;
-const VK_FORMAT_R10X6G10X6_UNORM_2PACK16 = 1000156008;
-const VK_FORMAT_R10X6G10X6B10X6A10X6_UNORM_4PACK16 = 1000156009;
-const VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16 = 1000156010;
-const VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16 = 1000156011;
-const VK_FORMAT_R12X4_UNORM_PACK16 = 1000156017;
-const VK_FORMAT_R12X4G12X4_UNORM_2PACK16 = 1000156018;
-const VK_FORMAT_R12X4G12X4B12X4A12X4_UNORM_4PACK16 = 1000156019;
-const VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16 = 1000156020;
-const VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16 = 1000156021;
-const VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000;
-const VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001;
-const VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002;
-const VK_FORMAT_PVRTC2_4BPP_UNORM_BLOCK_IMG = 1000054003;
-const VK_FORMAT_PVRTC1_2BPP_SRGB_BLOCK_IMG = 1000054004;
-const VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005;
-const VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006;
-const VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007;
-const VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = 1000066000;
-const VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = 1000066001;
-const VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = 1000066002;
-const VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = 1000066003;
-const VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = 1000066004;
-const VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = 1000066005;
-const VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = 1000066006;
-const VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = 1000066007;
-const VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = 1000066008;
-const VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = 1000066009;
-const VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = 1000066010;
-const VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = 1000066011;
-const VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = 1000066012;
-const VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = 1000066013;
-const VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = 1000340000;
-const VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = 1000340001;
-
-/**
- * Represents an unpacked KTX 2.0 texture container. Data for individual mip levels are stored in
- * the `.levels` array, typically compressed in Basis Universal formats. Additional properties
- * provide metadata required to process, transcode, and upload these textures.
- */
-
-class KTX2Container {
-  constructor() {
-    this.vkFormat = VK_FORMAT_UNDEFINED;
-    this.typeSize = 1;
-    this.pixelWidth = 0;
-    this.pixelHeight = 0;
-    this.pixelDepth = 0;
-    this.layerCount = 0;
-    this.faceCount = 1;
-    this.supercompressionScheme = KHR_SUPERCOMPRESSION_NONE;
-    this.levels = [];
-    this.dataFormatDescriptor = [{
-      vendorId: KHR_DF_VENDORID_KHRONOS,
-      descriptorType: KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT,
-      descriptorBlockSize: 0,
-      versionNumber: KHR_DF_VERSION,
-      colorModel: KHR_DF_MODEL_UNSPECIFIED,
-      colorPrimaries: KHR_DF_PRIMARIES_BT709,
-      transferFunction: KHR_DF_TRANSFER_SRGB,
-      flags: KHR_DF_FLAG_ALPHA_STRAIGHT,
-      texelBlockDimension: [0, 0, 0, 0],
-      bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0],
-      samples: []
-    }];
-    this.keyValue = {};
-    this.globalData = null;
-  }
-
-}
-
-class BufferReader {
-  constructor(data, byteOffset, byteLength, littleEndian) {
-    this._dataView = void 0;
-    this._littleEndian = void 0;
-    this._offset = void 0;
-    this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength);
-    this._littleEndian = littleEndian;
-    this._offset = 0;
-  }
-
-  _nextUint8() {
-    const value = this._dataView.getUint8(this._offset);
-
-    this._offset += 1;
-    return value;
-  }
-
-  _nextUint16() {
-    const value = this._dataView.getUint16(this._offset, this._littleEndian);
-
-    this._offset += 2;
-    return value;
-  }
-
-  _nextUint32() {
-    const value = this._dataView.getUint32(this._offset, this._littleEndian);
-
-    this._offset += 4;
-    return value;
-  }
-
-  _nextUint64() {
-    const left = this._dataView.getUint32(this._offset, this._littleEndian);
-
-    const right = this._dataView.getUint32(this._offset + 4, this._littleEndian); // TODO(cleanup): Just test this...
-    // const value = this._littleEndian ? left + (2 ** 32 * right) : (2 ** 32 * left) + right;
-
-
-    const value = left + 2 ** 32 * right;
-    this._offset += 8;
-    return value;
-  }
-
-  _nextInt32() {
-    const value = this._dataView.getInt32(this._offset, this._littleEndian);
-
-    this._offset += 4;
-    return value;
-  }
-
-  _skip(bytes) {
-    this._offset += bytes;
-    return this;
-  }
-
-  _scan(maxByteLength, term = 0x00) {
-    const byteOffset = this._offset;
-    let byteLength = 0;
-
-    while (this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength) {
-      byteLength++;
-      this._offset++;
-    }
-
-    if (byteLength < maxByteLength) this._offset++;
-    return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength);
-  }
-
-}
-
-///////////////////////////////////////////////////
-// Common.
-///////////////////////////////////////////////////
-const KTX_WRITER = (/* unused pure expression or super */ null && (`KTX-Parse v${"0.4.5"}`));
-const NUL = new Uint8Array([0x00]); ///////////////////////////////////////////////////
-// KTX2 Header.
-///////////////////////////////////////////////////
-
-const KTX2_ID = [// '´', 'K', 'T', 'X', '2', '0', 'ª', '\r', '\n', '\x1A', '\n'
-0xab, 0x4b, 0x54, 0x58, 0x20, 0x32, 0x30, 0xbb, 0x0d, 0x0a, 0x1a, 0x0a];
-const HEADER_BYTE_LENGTH = 68; // 13 * 4 + 2 * 8
-
-/** Encodes text to an ArrayBuffer. */
-function encodeText(text) {
-  if (typeof TextEncoder !== 'undefined') {
-    return new TextEncoder().encode(text);
-  }
-
-  return Buffer.from(text);
-}
-/** Decodes an ArrayBuffer to text. */
-
-function decodeText(buffer) {
-  if (typeof TextDecoder !== 'undefined') {
-    return new TextDecoder().decode(buffer);
-  }
-
-  return Buffer.from(buffer).toString('utf8');
-}
-/** Concatenates N ArrayBuffers. */
-
-function concat(buffers) {
-  let totalByteLength = 0;
-
-  for (const buffer of buffers) {
-    totalByteLength += buffer.byteLength;
-  }
-
-  const result = new Uint8Array(totalByteLength);
-  let byteOffset = 0;
-
-  for (const buffer of buffers) {
-    result.set(new Uint8Array(buffer), byteOffset);
-    byteOffset += buffer.byteLength;
-  }
-
-  return result;
-}
-
-/**
- * Parses a KTX 2.0 file, returning an unpacked {@link KTX2Container} instance with all associated
- * data. The container's mip levels and other binary data are pointers into the original file, not
- * copies, so the original file should not be overwritten after reading.
- *
- * @param data Bytes of KTX 2.0 file, as Uint8Array or Buffer.
- */
-
-function read(data) {
-  ///////////////////////////////////////////////////
-  // KTX 2.0 Identifier.
-  ///////////////////////////////////////////////////
-  const id = new Uint8Array(data.buffer, data.byteOffset, KTX2_ID.length);
-
-  if (id[0] !== KTX2_ID[0] || // '´'
-  id[1] !== KTX2_ID[1] || // 'K'
-  id[2] !== KTX2_ID[2] || // 'T'
-  id[3] !== KTX2_ID[3] || // 'X'
-  id[4] !== KTX2_ID[4] || // ' '
-  id[5] !== KTX2_ID[5] || // '2'
-  id[6] !== KTX2_ID[6] || // '0'
-  id[7] !== KTX2_ID[7] || // 'ª'
-  id[8] !== KTX2_ID[8] || // '\r'
-  id[9] !== KTX2_ID[9] || // '\n'
-  id[10] !== KTX2_ID[10] || // '\x1A'
-  id[11] !== KTX2_ID[11] // '\n'
-  ) {
-    throw new Error('Missing KTX 2.0 identifier.');
-  }
-
-  const container = new KTX2Container(); ///////////////////////////////////////////////////
-  // Header.
-  ///////////////////////////////////////////////////
-
-  const headerByteLength = 17 * Uint32Array.BYTES_PER_ELEMENT;
-  const headerReader = new BufferReader(data, KTX2_ID.length, headerByteLength, true);
-  container.vkFormat = headerReader._nextUint32();
-  container.typeSize = headerReader._nextUint32();
-  container.pixelWidth = headerReader._nextUint32();
-  container.pixelHeight = headerReader._nextUint32();
-  container.pixelDepth = headerReader._nextUint32();
-  container.layerCount = headerReader._nextUint32();
-  container.faceCount = headerReader._nextUint32();
-
-  const levelCount = headerReader._nextUint32();
-
-  container.supercompressionScheme = headerReader._nextUint32();
-
-  const dfdByteOffset = headerReader._nextUint32();
-
-  const dfdByteLength = headerReader._nextUint32();
-
-  const kvdByteOffset = headerReader._nextUint32();
-
-  const kvdByteLength = headerReader._nextUint32();
-
-  const sgdByteOffset = headerReader._nextUint64();
-
-  const sgdByteLength = headerReader._nextUint64(); ///////////////////////////////////////////////////
-  // Level Index.
-  ///////////////////////////////////////////////////
-
-
-  const levelByteLength = levelCount * 3 * 8;
-  const levelReader = new BufferReader(data, KTX2_ID.length + headerByteLength, levelByteLength, true);
-
-  for (let i = 0; i < levelCount; i++) {
-    container.levels.push({
-      levelData: new Uint8Array(data.buffer, data.byteOffset + levelReader._nextUint64(), levelReader._nextUint64()),
-      uncompressedByteLength: levelReader._nextUint64()
-    });
-  } ///////////////////////////////////////////////////
-  // Data Format Descriptor (DFD).
-  ///////////////////////////////////////////////////
-
-
-  const dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength, true);
-  const dfd = {
-    vendorId: dfdReader._skip(4
-    /* totalSize */
-    )._nextUint16(),
-    descriptorType: dfdReader._nextUint16(),
-    versionNumber: dfdReader._nextUint16(),
-    descriptorBlockSize: dfdReader._nextUint16(),
-    colorModel: dfdReader._nextUint8(),
-    colorPrimaries: dfdReader._nextUint8(),
-    transferFunction: dfdReader._nextUint8(),
-    flags: dfdReader._nextUint8(),
-    texelBlockDimension: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],
-    bytesPlane: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],
-    samples: []
-  };
-  const sampleStart = 6;
-  const sampleWords = 4;
-  const numSamples = (dfd.descriptorBlockSize / 4 - sampleStart) / sampleWords;
-
-  for (let i = 0; i < numSamples; i++) {
-    const sample = {
-      bitOffset: dfdReader._nextUint16(),
-      bitLength: dfdReader._nextUint8(),
-      channelType: dfdReader._nextUint8(),
-      samplePosition: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],
-      sampleLower: -Infinity,
-      sampleUpper: Infinity
-    };
-
-    if (sample.channelType & KHR_DF_SAMPLE_DATATYPE_SIGNED) {
-      sample.sampleLower = dfdReader._nextInt32();
-      sample.sampleUpper = dfdReader._nextInt32();
-    } else {
-      sample.sampleLower = dfdReader._nextUint32();
-      sample.sampleUpper = dfdReader._nextUint32();
-    }
-
-    dfd.samples[i] = sample;
-  }
-
-  container.dataFormatDescriptor.length = 0;
-  container.dataFormatDescriptor.push(dfd); ///////////////////////////////////////////////////
-  // Key/Value Data (KVD).
-  ///////////////////////////////////////////////////
-
-  const kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true);
-
-  while (kvdReader._offset < kvdByteLength) {
-    const keyValueByteLength = kvdReader._nextUint32();
-
-    const keyData = kvdReader._scan(keyValueByteLength);
-
-    const key = decodeText(keyData);
-
-    const valueData = kvdReader._scan(keyValueByteLength - keyData.byteLength);
-
-    container.keyValue[key] = key.match(/^ktx/i) ? decodeText(valueData) : valueData; // 4-byte alignment.
-
-    if (kvdReader._offset % 4) kvdReader._skip(4 - kvdReader._offset % 4);
-  } ///////////////////////////////////////////////////
-  // Supercompression Global Data (SGD).
-  ///////////////////////////////////////////////////
-
-
-  if (sgdByteLength <= 0) return container;
-  const sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true);
-
-  const endpointCount = sgdReader._nextUint16();
-
-  const selectorCount = sgdReader._nextUint16();
-
-  const endpointsByteLength = sgdReader._nextUint32();
-
-  const selectorsByteLength = sgdReader._nextUint32();
-
-  const tablesByteLength = sgdReader._nextUint32();
-
-  const extendedByteLength = sgdReader._nextUint32();
-
-  const imageDescs = [];
-
-  for (let i = 0; i < levelCount; i++) {
-    imageDescs.push({
-      imageFlags: sgdReader._nextUint32(),
-      rgbSliceByteOffset: sgdReader._nextUint32(),
-      rgbSliceByteLength: sgdReader._nextUint32(),
-      alphaSliceByteOffset: sgdReader._nextUint32(),
-      alphaSliceByteLength: sgdReader._nextUint32()
-    });
-  }
-
-  const endpointsByteOffset = sgdByteOffset + sgdReader._offset;
-  const selectorsByteOffset = endpointsByteOffset + endpointsByteLength;
-  const tablesByteOffset = selectorsByteOffset + selectorsByteLength;
-  const extendedByteOffset = tablesByteOffset + tablesByteLength;
-  const endpointsData = new Uint8Array(data.buffer, data.byteOffset + endpointsByteOffset, endpointsByteLength);
-  const selectorsData = new Uint8Array(data.buffer, data.byteOffset + selectorsByteOffset, selectorsByteLength);
-  const tablesData = new Uint8Array(data.buffer, data.byteOffset + tablesByteOffset, tablesByteLength);
-  const extendedData = new Uint8Array(data.buffer, data.byteOffset + extendedByteOffset, extendedByteLength);
-  container.globalData = {
-    endpointCount,
-    selectorCount,
-    imageDescs,
-    endpointsData,
-    selectorsData,
-    tablesData,
-    extendedData
-  };
-  return container;
-}
-
-function _extends() {
-  _extends = Object.assign ? Object.assign.bind() : function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-
-    return target;
-  };
-  return _extends.apply(this, arguments);
-}
-
-const DEFAULT_OPTIONS = {
-  keepWriter: false
-};
-/**
- * Serializes a {@link KTX2Container} instance to a KTX 2.0 file. Mip levels and other binary data
- * are copied into the resulting Uint8Array, so the original container can safely be edited or
- * destroyed after it is serialized.
- *
- * Options:
- * - keepWriter: If true, 'KTXWriter' key/value field is written as provided by the container.
- * 		Otherwise, a string for the current ktx-parse version is generated. Default: false.
- *
- * @param container
- * @param options
- */
-
-function write(container, options = {}) {
-  options = _extends({}, DEFAULT_OPTIONS, options); ///////////////////////////////////////////////////
-  // Supercompression Global Data (SGD).
-  ///////////////////////////////////////////////////
-
-  let sgdBuffer = new ArrayBuffer(0);
-
-  if (container.globalData) {
-    const sgdHeaderBuffer = new ArrayBuffer(20 + container.globalData.imageDescs.length * 5 * 4);
-    const sgdHeaderView = new DataView(sgdHeaderBuffer);
-    sgdHeaderView.setUint16(0, container.globalData.endpointCount, true);
-    sgdHeaderView.setUint16(2, container.globalData.selectorCount, true);
-    sgdHeaderView.setUint32(4, container.globalData.endpointsData.byteLength, true);
-    sgdHeaderView.setUint32(8, container.globalData.selectorsData.byteLength, true);
-    sgdHeaderView.setUint32(12, container.globalData.tablesData.byteLength, true);
-    sgdHeaderView.setUint32(16, container.globalData.extendedData.byteLength, true);
-
-    for (let i = 0; i < container.globalData.imageDescs.length; i++) {
-      const imageDesc = container.globalData.imageDescs[i];
-      sgdHeaderView.setUint32(20 + i * 5 * 4 + 0, imageDesc.imageFlags, true);
-      sgdHeaderView.setUint32(20 + i * 5 * 4 + 4, imageDesc.rgbSliceByteOffset, true);
-      sgdHeaderView.setUint32(20 + i * 5 * 4 + 8, imageDesc.rgbSliceByteLength, true);
-      sgdHeaderView.setUint32(20 + i * 5 * 4 + 12, imageDesc.alphaSliceByteOffset, true);
-      sgdHeaderView.setUint32(20 + i * 5 * 4 + 16, imageDesc.alphaSliceByteLength, true);
-    }
-
-    sgdBuffer = concat([sgdHeaderBuffer, container.globalData.endpointsData, container.globalData.selectorsData, container.globalData.tablesData, container.globalData.extendedData]);
-  } ///////////////////////////////////////////////////
-  // Key/Value Data (KVD).
-  ///////////////////////////////////////////////////
-
-
-  const keyValueData = [];
-  let keyValue = container.keyValue;
-
-  if (!options.keepWriter) {
-    keyValue = _extends({}, container.keyValue, {
-      KTXwriter: KTX_WRITER
-    });
-  }
-
-  for (const key in keyValue) {
-    const value = keyValue[key];
-    const keyData = encodeText(key);
-    const valueData = typeof value === 'string' ? encodeText(value) : value;
-    const kvByteLength = keyData.byteLength + 1 + valueData.byteLength + 1;
-    const kvPadding = kvByteLength % 4 ? 4 - kvByteLength % 4 : 0; // align(4)
-
-    keyValueData.push(concat([new Uint32Array([kvByteLength]), keyData, NUL, valueData, NUL, new Uint8Array(kvPadding).fill(0x00) // align(4)
-    ]));
-  }
-
-  const kvdBuffer = concat(keyValueData); ///////////////////////////////////////////////////
-  // Data Format Descriptor (DFD).
-  ///////////////////////////////////////////////////
-
-  if (container.dataFormatDescriptor.length !== 1 || container.dataFormatDescriptor[0].descriptorType !== KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT) {
-    throw new Error('Only BASICFORMAT Data Format Descriptor output supported.');
-  }
-
-  const dfd = container.dataFormatDescriptor[0];
-  const dfdBuffer = new ArrayBuffer(28 + dfd.samples.length * 16);
-  const dfdView = new DataView(dfdBuffer);
-  const descriptorBlockSize = 24 + dfd.samples.length * 16;
-  dfdView.setUint32(0, dfdBuffer.byteLength, true);
-  dfdView.setUint16(4, dfd.vendorId, true);
-  dfdView.setUint16(6, dfd.descriptorType, true);
-  dfdView.setUint16(8, dfd.versionNumber, true);
-  dfdView.setUint16(10, descriptorBlockSize, true);
-  dfdView.setUint8(12, dfd.colorModel);
-  dfdView.setUint8(13, dfd.colorPrimaries);
-  dfdView.setUint8(14, dfd.transferFunction);
-  dfdView.setUint8(15, dfd.flags);
-
-  if (!Array.isArray(dfd.texelBlockDimension)) {
-    throw new Error('texelBlockDimension is now an array. For dimensionality `d`, set `d - 1`.');
-  }
-
-  dfdView.setUint8(16, dfd.texelBlockDimension[0]);
-  dfdView.setUint8(17, dfd.texelBlockDimension[1]);
-  dfdView.setUint8(18, dfd.texelBlockDimension[2]);
-  dfdView.setUint8(19, dfd.texelBlockDimension[3]);
-
-  for (let i = 0; i < 8; i++) dfdView.setUint8(20 + i, dfd.bytesPlane[i]);
-
-  for (let i = 0; i < dfd.samples.length; i++) {
-    const sample = dfd.samples[i];
-    const sampleByteOffset = 28 + i * 16;
-
-    if (sample.channelID) {
-      throw new Error('channelID has been renamed to channelType.');
-    }
-
-    dfdView.setUint16(sampleByteOffset + 0, sample.bitOffset, true);
-    dfdView.setUint8(sampleByteOffset + 2, sample.bitLength);
-    dfdView.setUint8(sampleByteOffset + 3, sample.channelType);
-    dfdView.setUint8(sampleByteOffset + 4, sample.samplePosition[0]);
-    dfdView.setUint8(sampleByteOffset + 5, sample.samplePosition[1]);
-    dfdView.setUint8(sampleByteOffset + 6, sample.samplePosition[2]);
-    dfdView.setUint8(sampleByteOffset + 7, sample.samplePosition[3]);
-
-    if (sample.channelType & KHR_DF_SAMPLE_DATATYPE_SIGNED) {
-      dfdView.setInt32(sampleByteOffset + 8, sample.sampleLower, true);
-      dfdView.setInt32(sampleByteOffset + 12, sample.sampleUpper, true);
-    } else {
-      dfdView.setUint32(sampleByteOffset + 8, sample.sampleLower, true);
-      dfdView.setUint32(sampleByteOffset + 12, sample.sampleUpper, true);
-    }
-  } ///////////////////////////////////////////////////
-  // Data alignment.
-  ///////////////////////////////////////////////////
-
-
-  const dfdByteOffset = KTX2_ID.length + HEADER_BYTE_LENGTH + container.levels.length * 3 * 8;
-  const kvdByteOffset = dfdByteOffset + dfdBuffer.byteLength;
-  let sgdByteOffset = sgdBuffer.byteLength > 0 ? kvdByteOffset + kvdBuffer.byteLength : 0;
-  if (sgdByteOffset % 8) sgdByteOffset += 8 - sgdByteOffset % 8; // align(8)
-  ///////////////////////////////////////////////////
-  // Level Index.
-  ///////////////////////////////////////////////////
-
-  const levelData = [];
-  const levelIndex = new DataView(new ArrayBuffer(container.levels.length * 3 * 8));
-  let levelDataByteOffset = (sgdByteOffset || kvdByteOffset + kvdBuffer.byteLength) + sgdBuffer.byteLength;
-
-  for (let i = 0; i < container.levels.length; i++) {
-    const level = container.levels[i];
-    levelData.push(level.levelData);
-    levelIndex.setBigUint64(i * 24 + 0, BigInt(levelDataByteOffset), true);
-    levelIndex.setBigUint64(i * 24 + 8, BigInt(level.levelData.byteLength), true);
-    levelIndex.setBigUint64(i * 24 + 16, BigInt(level.uncompressedByteLength), true);
-    levelDataByteOffset += level.levelData.byteLength;
-  } ///////////////////////////////////////////////////
-  // Header.
-  ///////////////////////////////////////////////////
-
-
-  const headerBuffer = new ArrayBuffer(HEADER_BYTE_LENGTH);
-  const headerView = new DataView(headerBuffer);
-  headerView.setUint32(0, container.vkFormat, true);
-  headerView.setUint32(4, container.typeSize, true);
-  headerView.setUint32(8, container.pixelWidth, true);
-  headerView.setUint32(12, container.pixelHeight, true);
-  headerView.setUint32(16, container.pixelDepth, true);
-  headerView.setUint32(20, container.layerCount, true);
-  headerView.setUint32(24, container.faceCount, true);
-  headerView.setUint32(28, container.levels.length, true);
-  headerView.setUint32(32, container.supercompressionScheme, true);
-  headerView.setUint32(36, dfdByteOffset, true);
-  headerView.setUint32(40, dfdBuffer.byteLength, true);
-  headerView.setUint32(44, kvdByteOffset, true);
-  headerView.setUint32(48, kvdBuffer.byteLength, true);
-  headerView.setBigUint64(52, BigInt(sgdBuffer.byteLength > 0 ? sgdByteOffset : 0), true);
-  headerView.setBigUint64(60, BigInt(sgdBuffer.byteLength), true); ///////////////////////////////////////////////////
-  // Compose.
-  ///////////////////////////////////////////////////
-
-  return new Uint8Array(concat([new Uint8Array(KTX2_ID).buffer, headerBuffer, levelIndex.buffer, dfdBuffer, kvdBuffer, sgdByteOffset > 0 ? new ArrayBuffer(sgdByteOffset - (kvdByteOffset + kvdBuffer.byteLength)) // align(8)
-  : new ArrayBuffer(0), sgdBuffer, ...levelData]));
-}
-
-
-//# sourceMappingURL=ktx-parse.modern.js.map
-
-;// CONCATENATED MODULE: ./node_modules/zstddec/dist/zstddec.modern.js
-let A,I,B;const g={env:{emscripten_notify_memory_growth:function(A){B=new Uint8Array(I.exports.memory.buffer)}}};class Q{init(){return A||(A="undefined"!=typeof fetch?fetch("data:application/wasm;base64,"+C).then(A=>A.arrayBuffer()).then(A=>WebAssembly.instantiate(A,g)).then(this._init):WebAssembly.instantiate(Buffer.from(C,"base64"),g).then(this._init),A)}_init(A){I=A.instance,g.env.emscripten_notify_memory_growth(0)}decode(A,g=0){if(!I)throw new Error("ZSTDDecoder: Await .init() before decoding.");const Q=A.byteLength,C=I.exports.malloc(Q);B.set(A,C),g=g||Number(I.exports.ZSTD_findDecompressedSize(C,Q));const E=I.exports.malloc(g),i=I.exports.ZSTD_decompress(E,g,C,Q),D=B.slice(E,E+i);return I.exports.free(C),I.exports.free(E),D}}const C="AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQhBSAGQQR2IQRBICAAdCIAQQFyIQkgASgCACEPQQAhAiADIQYCQANAIAlBAkggAiAPS3JFBEAgAiEHAkAgCARAA0AgBEH//wNxQf//A0YEQCAHQRhqIQcgBiAQSQR/IAZBAmoiBigAACAFdgUgBUEQaiEFIARBEHYLIQQMAQsLA0AgBEEDcSIIQQNGBEAgBUECaiEFIARBAnYhBCAHQQNqIQcMAQsLIAcgCGoiByAPSw0EIAVBAmohBQNAIAIgB0kEQCANIAJBAXRqQQA7AQAgAkEBaiECDAELCyAGIA5LQQAgBiAFQQN1aiIHIAxLG0UEQCAHKAAAIAVBB3EiBXYhBAwCCyAEQQJ2IQQLIAYhBwsCfyALQX9qIAQgAEF/anEiBiAAQQF0QX9qIgggCWsiEUkNABogBCAIcSIEQQAgESAEIABIG2shBiALCyEIIA0gAkEBdGogBkF/aiIEOwEAIAlBASAGayAEIAZBAUgbayEJA0AgCSAASARAIABBAXUhACALQX9qIQsMAQsLAn8gByAOS0EAIAcgBSAIaiIFQQN1aiIGIAxLG0UEQCAFQQdxDAELIAUgDCIGIAdrQQN0awshBSACQQFqIQIgBEUhCCAGKAAAIAVBH3F2IQQMAQsLQWwgCUEBRyAFQSBKcg0BGiABIAJBf2o2AgAgBiAFQQdqQQN1aiADawwBC0FQCyEAIApBEGokACAACwkAQQFBBSAAGwsMACAAIAEoAAA2AAALqgMBCn8jAEHwAGsiCiQAIAJBAWohDiAAQQhqIQtBgIAEIAVBf2p0QRB1IQxBACECQQEhBkEBIAV0IglBf2oiDyEIA0AgAiAORkUEQAJAIAEgAkEBdCINai8BACIHQf//A0YEQCALIAhBA3RqIAI2AgQgCEF/aiEIQQEhBwwBCyAGQQAgDCAHQRB0QRB1ShshBgsgCiANaiAHOwEAIAJBAWohAgwBCwsgACAFNgIEIAAgBjYCACAJQQN2IAlBAXZqQQNqIQxBACEAQQAhBkEAIQIDQCAGIA5GBEADQAJAIAAgCUYNACAKIAsgAEEDdGoiASgCBCIGQQF0aiICIAIvAQAiAkEBajsBACABIAUgAhAUayIIOgADIAEgAiAIQf8BcXQgCWs7AQAgASAEIAZBAnQiAmooAgA6AAIgASACIANqKAIANgIEIABBAWohAAwBCwsFIAEgBkEBdGouAQAhDUEAIQcDQCAHIA1ORQRAIAsgAkEDdGogBjYCBANAIAIgDGogD3EiAiAISw0ACyAHQQFqIQcMAQsLIAZBAWohBgwBCwsgCkHwAGokAAsjAEIAIAEQCSAAhUKHla+vmLbem55/fkLj3MqV/M7y9YV/fAsQACAAQn43AwggACABNgIACyQBAX8gAARAIAEoAgQiAgRAIAEoAgggACACEQEADwsgABAmCwsfACAAIAEgAi8BABAINgIAIAEQBBogACACQQRqNgIEC0oBAX9BoCAoAgAiASAAaiIAQX9MBEBBiCBBMDYCAEF/DwsCQCAAPwBBEHRNDQAgABBmDQBBiCBBMDYCAEF/DwtBoCAgADYCACABC9cBAQh/Qbp/IQoCQCACKAIEIgggAigCACIJaiIOIAEgAGtLDQBBbCEKIAkgBCADKAIAIgtrSw0AIAAgCWoiBCACKAIIIgxrIQ0gACABQWBqIg8gCyAJQQAQKSADIAkgC2o2AgACQAJAIAwgBCAFa00EQCANIQUMAQsgDCAEIAZrSw0CIAcgDSAFayIAaiIBIAhqIAdNBEAgBCABIAgQDxoMAgsgBCABQQAgAGsQDyEBIAIgACAIaiIINgIEIAEgAGshBAsgBCAPIAUgCEEBECkLIA4hCgsgCgubAgEBfyMAQYABayINJAAgDSADNgJ8AkAgAkEDSwRAQX8hCQwBCwJAAkACQAJAIAJBAWsOAwADAgELIAZFBEBBuH8hCQwEC0FsIQkgBS0AACICIANLDQMgACAHIAJBAnQiAmooAgAgAiAIaigCABA7IAEgADYCAEEBIQkMAwsgASAJNgIAQQAhCQwCCyAKRQRAQWwhCQwCC0EAIQkgC0UgDEEZSHINAUEIIAR0QQhqIQBBACECA0AgAiAATw0CIAJBQGshAgwAAAsAC0FsIQkgDSANQfwAaiANQfgAaiAFIAYQFSICEAMNACANKAJ4IgMgBEsNACAAIA0gDSgCfCAHIAggAxAYIAEgADYCACACIQkLIA1BgAFqJAAgCQsLACAAIAEgAhALGgsQACAALwAAIAAtAAJBEHRyCy8AAn9BuH8gAUEISQ0AGkFyIAAoAAQiAEF3Sw0AGkG4fyAAQQhqIgAgACABSxsLCwkAIAAgATsAAAsDAAELigYBBX8gACAAKAIAIgVBfnE2AgBBACAAIAVBAXZqQYQgKAIAIgQgAEYbIQECQAJAIAAoAgQiAkUNACACKAIAIgNBAXENACACQQhqIgUgA0EBdkF4aiIDQQggA0EISxtnQR9zQQJ0QYAfaiIDKAIARgRAIAMgAigCDDYCAAsgAigCCCIDBEAgAyACKAIMNgIECyACKAIMIgMEQCADIAIoAgg2AgALIAIgAigCACAAKAIAQX5xajYCAEGEICEAAkACQCABRQ0AIAEgAjYCBCABKAIAIgNBAXENASADQQF2QXhqIgNBCCADQQhLG2dBH3NBAnRBgB9qIgMoAgAgAUEIakYEQCADIAEoAgw2AgALIAEoAggiAwRAIAMgASgCDDYCBAsgASgCDCIDBEAgAyABKAIINgIAQYQgKAIAIQQLIAIgAigCACABKAIAQX5xajYCACABIARGDQAgASABKAIAQQF2akEEaiEACyAAIAI2AgALIAIoAgBBAXZBeGoiAEEIIABBCEsbZ0Efc0ECdEGAH2oiASgCACEAIAEgBTYCACACIAA2AgwgAkEANgIIIABFDQEgACAFNgIADwsCQCABRQ0AIAEoAgAiAkEBcQ0AIAJBAXZBeGoiAkEIIAJBCEsbZ0Efc0ECdEGAH2oiAigCACABQQhqRgRAIAIgASgCDDYCAAsgASgCCCICBEAgAiABKAIMNgIECyABKAIMIgIEQCACIAEoAgg2AgBBhCAoAgAhBAsgACAAKAIAIAEoAgBBfnFqIgI2AgACQCABIARHBEAgASABKAIAQQF2aiAANgIEIAAoAgAhAgwBC0GEICAANgIACyACQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgIoAgAhASACIABBCGoiAjYCACAAIAE2AgwgAEEANgIIIAFFDQEgASACNgIADwsgBUEBdkF4aiIBQQggAUEISxtnQR9zQQJ0QYAfaiICKAIAIQEgAiAAQQhqIgI2AgAgACABNgIMIABBADYCCCABRQ0AIAEgAjYCAAsLDgAgAARAIABBeGoQJQsLgAIBA38CQCAAQQ9qQXhxQYQgKAIAKAIAQQF2ayICEB1Bf0YNAAJAQYQgKAIAIgAoAgAiAUEBcQ0AIAFBAXZBeGoiAUEIIAFBCEsbZ0Efc0ECdEGAH2oiASgCACAAQQhqRgRAIAEgACgCDDYCAAsgACgCCCIBBEAgASAAKAIMNgIECyAAKAIMIgFFDQAgASAAKAIINgIAC0EBIQEgACAAKAIAIAJBAXRqIgI2AgAgAkEBcQ0AIAJBAXZBeGoiAkEIIAJBCEsbZ0Efc0ECdEGAH2oiAygCACECIAMgAEEIaiIDNgIAIAAgAjYCDCAAQQA2AgggAkUNACACIAM2AgALIAELtwIBA38CQAJAIABBASAAGyICEDgiAA0AAkACQEGEICgCACIARQ0AIAAoAgAiA0EBcQ0AIAAgA0EBcjYCACADQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgAgAEEIakYEQCABIAAoAgw2AgALIAAoAggiAQRAIAEgACgCDDYCBAsgACgCDCIBBEAgASAAKAIINgIACyACECchAkEAIQFBhCAoAgAhACACDQEgACAAKAIAQX5xNgIAQQAPCyACQQ9qQXhxIgMQHSICQX9GDQIgAkEHakF4cSIAIAJHBEAgACACaxAdQX9GDQMLAkBBhCAoAgAiAUUEQEGAICAANgIADAELIAAgATYCBAtBhCAgADYCACAAIANBAXRBAXI2AgAMAQsgAEUNAQsgAEEIaiEBCyABC7kDAQJ/IAAgA2ohBQJAIANBB0wEQANAIAAgBU8NAiAAIAItAAA6AAAgAEEBaiEAIAJBAWohAgwAAAsACyAEQQFGBEACQCAAIAJrIgZBB00EQCAAIAItAAA6AAAgACACLQABOgABIAAgAi0AAjoAAiAAIAItAAM6AAMgAEEEaiACIAZBAnQiBkHAHmooAgBqIgIQFyACIAZB4B5qKAIAayECDAELIAAgAhAMCyACQQhqIQIgAEEIaiEACwJAAkACQAJAIAUgAU0EQCAAIANqIQEgBEEBRyAAIAJrQQ9Kcg0BA0AgACACEAwgAkEIaiECIABBCGoiACABSQ0ACwwFCyAAIAFLBEAgACEBDAQLIARBAUcgACACa0EPSnINASAAIQMgAiEEA0AgAyAEEAwgBEEIaiEEIANBCGoiAyABSQ0ACwwCCwNAIAAgAhAHIAJBEGohAiAAQRBqIgAgAUkNAAsMAwsgACEDIAIhBANAIAMgBBAHIARBEGohBCADQRBqIgMgAUkNAAsLIAIgASAAa2ohAgsDQCABIAVPDQEgASACLQAAOgAAIAFBAWohASACQQFqIQIMAAALAAsLQQECfyAAIAAoArjgASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigCACACaiAAQQZ2IgFBAnRBsB5qKAIAaiAAQSBxIgBFaiABRSAAQQV2cWoFQbh/CwsdACAAKAKQ4gEQWiAAQQA2AqDiASAAQgA3A5DiAQu1AwEFfyMAQZACayIKJABBuH8hBgJAIAVFDQAgBCwAACIIQf8BcSEHAkAgCEF/TARAIAdBgn9qQQF2IgggBU8NAkFsIQYgB0GBf2oiBUGAAk8NAiAEQQFqIQdBACEGA0AgBiAFTwRAIAUhBiAIIQcMAwUgACAGaiAHIAZBAXZqIgQtAABBBHY6AAAgACAGQQFyaiAELQAAQQ9xOgAAIAZBAmohBgwBCwAACwALIAcgBU8NASAAIARBAWogByAKEFMiBhADDQELIAYhBEEAIQYgAUEAQTQQECEJQQAhBQNAIAQgBkcEQCAAIAZqIggtAAAiAUELSwRAQWwhBgwDBSAJIAFBAnRqIgEgASgCAEEBajYCACAGQQFqIQZBASAILQAAdEEBdSAFaiEFDAILAAsLQWwhBiAFRQ0AIAUQFEEBaiIBQQxLDQAgAyABNgIAQQFBASABdCAFayIDEBQiAXQgA0cNACAAIARqIAFBAWoiADoAACAJIABBAnRqIgAgACgCAEEBajYCACAJKAIEIgBBAkkgAEEBcXINACACIARBAWo2AgAgB0EBaiEGCyAKQZACaiQAIAYLxhEBDH8jAEHwAGsiBSQAQWwhCwJAIANBCkkNACACLwAAIQogAi8AAiEJIAIvAAQhByAFQQhqIAQQDgJAIAMgByAJIApqakEGaiIMSQ0AIAUtAAohCCAFQdgAaiACQQZqIgIgChAGIgsQAw0BIAVBQGsgAiAKaiICIAkQBiILEAMNASAFQShqIAIgCWoiAiAHEAYiCxADDQEgBUEQaiACIAdqIAMgDGsQBiILEAMNASAAIAFqIg9BfWohECAEQQRqIQZBASELIAAgAUEDakECdiIDaiIMIANqIgIgA2oiDiEDIAIhBCAMIQcDQCALIAMgEElxBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgCS0AAyELIAcgBiAFQUBrIAgQAkECdGoiCS8BADsAACAFQUBrIAktAAIQASAJLQADIQogBCAGIAVBKGogCBACQQJ0aiIJLwEAOwAAIAVBKGogCS0AAhABIAktAAMhCSADIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgDS0AAyENIAAgC2oiCyAGIAVB2ABqIAgQAkECdGoiAC8BADsAACAFQdgAaiAALQACEAEgAC0AAyEAIAcgCmoiCiAGIAVBQGsgCBACQQJ0aiIHLwEAOwAAIAVBQGsgBy0AAhABIActAAMhByAEIAlqIgkgBiAFQShqIAgQAkECdGoiBC8BADsAACAFQShqIAQtAAIQASAELQADIQQgAyANaiIDIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgACALaiEAIAcgCmohByAEIAlqIQQgAyANLQADaiEDIAVB2ABqEA0gBUFAaxANciAFQShqEA1yIAVBEGoQDXJFIQsMAQsLIAQgDksgByACS3INAEFsIQsgACAMSw0BIAxBfWohCQNAQQAgACAJSSAFQdgAahAEGwRAIAAgBiAFQdgAaiAIEAJBAnRqIgovAQA7AAAgBUHYAGogCi0AAhABIAAgCi0AA2oiACAGIAVB2ABqIAgQAkECdGoiCi8BADsAACAFQdgAaiAKLQACEAEgACAKLQADaiEADAEFIAxBfmohCgNAIAVB2ABqEAQgACAKS3JFBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgACAJLQADaiEADAELCwNAIAAgCk0EQCAAIAYgBUHYAGogCBACQQJ0aiIJLwEAOwAAIAVB2ABqIAktAAIQASAAIAktAANqIQAMAQsLAkAgACAMTw0AIAAgBiAFQdgAaiAIEAIiAEECdGoiDC0AADoAACAMLQADQQFGBEAgBUHYAGogDC0AAhABDAELIAUoAlxBH0sNACAFQdgAaiAGIABBAnRqLQACEAEgBSgCXEEhSQ0AIAVBIDYCXAsgAkF9aiEMA0BBACAHIAxJIAVBQGsQBBsEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiIAIAYgBUFAayAIEAJBAnRqIgcvAQA7AAAgBUFAayAHLQACEAEgACAHLQADaiEHDAEFIAJBfmohDANAIAVBQGsQBCAHIAxLckUEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwNAIAcgDE0EQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwJAIAcgAk8NACAHIAYgBUFAayAIEAIiAEECdGoiAi0AADoAACACLQADQQFGBEAgBUFAayACLQACEAEMAQsgBSgCREEfSw0AIAVBQGsgBiAAQQJ0ai0AAhABIAUoAkRBIUkNACAFQSA2AkQLIA5BfWohAgNAQQAgBCACSSAFQShqEAQbBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2oiACAGIAVBKGogCBACQQJ0aiIELwEAOwAAIAVBKGogBC0AAhABIAAgBC0AA2ohBAwBBSAOQX5qIQIDQCAFQShqEAQgBCACS3JFBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsDQCAEIAJNBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsCQCAEIA5PDQAgBCAGIAVBKGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBKGogAi0AAhABDAELIAUoAixBH0sNACAFQShqIAYgAEECdGotAAIQASAFKAIsQSFJDQAgBUEgNgIsCwNAQQAgAyAQSSAFQRBqEAQbBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2oiACAGIAVBEGogCBACQQJ0aiICLwEAOwAAIAVBEGogAi0AAhABIAAgAi0AA2ohAwwBBSAPQX5qIQIDQCAFQRBqEAQgAyACS3JFBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsDQCADIAJNBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsCQCADIA9PDQAgAyAGIAVBEGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBEGogAi0AAhABDAELIAUoAhRBH0sNACAFQRBqIAYgAEECdGotAAIQASAFKAIUQSFJDQAgBUEgNgIUCyABQWwgBUHYAGoQCiAFQUBrEApxIAVBKGoQCnEgBUEQahAKcRshCwwJCwAACwALAAALAAsAAAsACwAACwALQWwhCwsgBUHwAGokACALC7UEAQ5/IwBBEGsiBiQAIAZBBGogABAOQVQhBQJAIARB3AtJDQAgBi0ABCEHIANB8ARqQQBB7AAQECEIIAdBDEsNACADQdwJaiIJIAggBkEIaiAGQQxqIAEgAhAxIhAQA0UEQCAGKAIMIgQgB0sNASADQdwFaiEPIANBpAVqIREgAEEEaiESIANBqAVqIQEgBCEFA0AgBSICQX9qIQUgCCACQQJ0aigCAEUNAAsgAkEBaiEOQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgASALaiAKNgIAIAVBAWohBSAKIAxqIQoMAQsLIAEgCjYCAEEAIQUgBigCCCELA0AgBSALRkUEQCABIAUgCWotAAAiDEECdGoiDSANKAIAIg1BAWo2AgAgDyANQQF0aiINIAw6AAEgDSAFOgAAIAVBAWohBQwBCwtBACEBIANBADYCqAUgBEF/cyAHaiEJQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgAyALaiABNgIAIAwgBSAJanQgAWohASAFQQFqIQUMAQsLIAcgBEEBaiIBIAJrIgRrQQFqIQgDQEEBIQUgBCAIT0UEQANAIAUgDk9FBEAgBUECdCIJIAMgBEE0bGpqIAMgCWooAgAgBHY2AgAgBUEBaiEFDAELCyAEQQFqIQQMAQsLIBIgByAPIAogESADIAIgARBkIAZBAToABSAGIAc6AAYgACAGKAIENgIACyAQIQULIAZBEGokACAFC8ENAQt/IwBB8ABrIgUkAEFsIQkCQCADQQpJDQAgAi8AACEKIAIvAAIhDCACLwAEIQYgBUEIaiAEEA4CQCADIAYgCiAMampBBmoiDUkNACAFLQAKIQcgBUHYAGogAkEGaiICIAoQBiIJEAMNASAFQUBrIAIgCmoiAiAMEAYiCRADDQEgBUEoaiACIAxqIgIgBhAGIgkQAw0BIAVBEGogAiAGaiADIA1rEAYiCRADDQEgACABaiIOQX1qIQ8gBEEEaiEGQQEhCSAAIAFBA2pBAnYiAmoiCiACaiIMIAJqIg0hAyAMIQQgCiECA0AgCSADIA9JcQRAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAACAGIAVBQGsgBxACQQF0aiIILQAAIQsgBUFAayAILQABEAEgAiALOgAAIAYgBUEoaiAHEAJBAXRqIggtAAAhCyAFQShqIAgtAAEQASAEIAs6AAAgBiAFQRBqIAcQAkEBdGoiCC0AACELIAVBEGogCC0AARABIAMgCzoAACAGIAVB2ABqIAcQAkEBdGoiCC0AACELIAVB2ABqIAgtAAEQASAAIAs6AAEgBiAFQUBrIAcQAkEBdGoiCC0AACELIAVBQGsgCC0AARABIAIgCzoAASAGIAVBKGogBxACQQF0aiIILQAAIQsgBUEoaiAILQABEAEgBCALOgABIAYgBUEQaiAHEAJBAXRqIggtAAAhCyAFQRBqIAgtAAEQASADIAs6AAEgA0ECaiEDIARBAmohBCACQQJqIQIgAEECaiEAIAkgBUHYAGoQDUVxIAVBQGsQDUVxIAVBKGoQDUVxIAVBEGoQDUVxIQkMAQsLIAQgDUsgAiAMS3INAEFsIQkgACAKSw0BIApBfWohCQNAIAVB2ABqEAQgACAJT3JFBEAgBiAFQdgAaiAHEAJBAXRqIggtAAAhCyAFQdgAaiAILQABEAEgACALOgAAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAASAAQQJqIQAMAQsLA0AgBUHYAGoQBCAAIApPckUEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCwNAIAAgCkkEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCyAMQX1qIQADQCAFQUBrEAQgAiAAT3JFBEAgBiAFQUBrIAcQAkEBdGoiCi0AACEJIAVBQGsgCi0AARABIAIgCToAACAGIAVBQGsgBxACQQF0aiIKLQAAIQkgBUFAayAKLQABEAEgAiAJOgABIAJBAmohAgwBCwsDQCAFQUBrEAQgAiAMT3JFBEAgBiAFQUBrIAcQAkEBdGoiAC0AACEKIAVBQGsgAC0AARABIAIgCjoAACACQQFqIQIMAQsLA0AgAiAMSQRAIAYgBUFAayAHEAJBAXRqIgAtAAAhCiAFQUBrIAAtAAEQASACIAo6AAAgAkEBaiECDAELCyANQX1qIQADQCAFQShqEAQgBCAAT3JFBEAgBiAFQShqIAcQAkEBdGoiAi0AACEKIAVBKGogAi0AARABIAQgCjoAACAGIAVBKGogBxACQQF0aiICLQAAIQogBUEoaiACLQABEAEgBCAKOgABIARBAmohBAwBCwsDQCAFQShqEAQgBCANT3JFBEAgBiAFQShqIAcQAkEBdGoiAC0AACECIAVBKGogAC0AARABIAQgAjoAACAEQQFqIQQMAQsLA0AgBCANSQRAIAYgBUEoaiAHEAJBAXRqIgAtAAAhAiAFQShqIAAtAAEQASAEIAI6AAAgBEEBaiEEDAELCwNAIAVBEGoQBCADIA9PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIAYgBUEQaiAHEAJBAXRqIgAtAAAhAiAFQRBqIAAtAAEQASADIAI6AAEgA0ECaiEDDAELCwNAIAVBEGoQBCADIA5PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIANBAWohAwwBCwsDQCADIA5JBEAgBiAFQRBqIAcQAkEBdGoiAC0AACECIAVBEGogAC0AARABIAMgAjoAACADQQFqIQMMAQsLIAFBbCAFQdgAahAKIAVBQGsQCnEgBUEoahAKcSAFQRBqEApxGyEJDAELQWwhCQsgBUHwAGokACAJC8oCAQR/IwBBIGsiBSQAIAUgBBAOIAUtAAIhByAFQQhqIAIgAxAGIgIQA0UEQCAEQQRqIQIgACABaiIDQX1qIQQDQCAFQQhqEAQgACAET3JFBEAgAiAFQQhqIAcQAkEBdGoiBi0AACEIIAVBCGogBi0AARABIAAgCDoAACACIAVBCGogBxACQQF0aiIGLQAAIQggBUEIaiAGLQABEAEgACAIOgABIABBAmohAAwBCwsDQCAFQQhqEAQgACADT3JFBEAgAiAFQQhqIAcQAkEBdGoiBC0AACEGIAVBCGogBC0AARABIAAgBjoAACAAQQFqIQAMAQsLA0AgACADT0UEQCACIAVBCGogBxACQQF0aiIELQAAIQYgBUEIaiAELQABEAEgACAGOgAAIABBAWohAAwBCwsgAUFsIAVBCGoQChshAgsgBUEgaiQAIAILtgMBCX8jAEEQayIGJAAgBkEANgIMIAZBADYCCEFUIQQCQAJAIANBQGsiDCADIAZBCGogBkEMaiABIAIQMSICEAMNACAGQQRqIAAQDiAGKAIMIgcgBi0ABEEBaksNASAAQQRqIQogBkEAOgAFIAYgBzoABiAAIAYoAgQ2AgAgB0EBaiEJQQEhBANAIAQgCUkEQCADIARBAnRqIgEoAgAhACABIAU2AgAgACAEQX9qdCAFaiEFIARBAWohBAwBCwsgB0EBaiEHQQAhBSAGKAIIIQkDQCAFIAlGDQEgAyAFIAxqLQAAIgRBAnRqIgBBASAEdEEBdSILIAAoAgAiAWoiADYCACAHIARrIQhBACEEAkAgC0EDTQRAA0AgBCALRg0CIAogASAEakEBdGoiACAIOgABIAAgBToAACAEQQFqIQQMAAALAAsDQCABIABPDQEgCiABQQF0aiIEIAg6AAEgBCAFOgAAIAQgCDoAAyAEIAU6AAIgBCAIOgAFIAQgBToABCAEIAg6AAcgBCAFOgAGIAFBBGohAQwAAAsACyAFQQFqIQUMAAALAAsgAiEECyAGQRBqJAAgBAutAQECfwJAQYQgKAIAIABHIAAoAgBBAXYiAyABa0F4aiICQXhxQQhHcgR/IAIFIAMQJ0UNASACQQhqC0EQSQ0AIAAgACgCACICQQFxIAAgAWpBD2pBeHEiASAAa0EBdHI2AgAgASAANgIEIAEgASgCAEEBcSAAIAJBAXZqIAFrIgJBAXRyNgIAQYQgIAEgAkH/////B3FqQQRqQYQgKAIAIABGGyABNgIAIAEQJQsLygIBBX8CQAJAAkAgAEEIIABBCEsbZ0EfcyAAaUEBR2oiAUEESSAAIAF2cg0AIAFBAnRB/B5qKAIAIgJFDQADQCACQXhqIgMoAgBBAXZBeGoiBSAATwRAIAIgBUEIIAVBCEsbZ0Efc0ECdEGAH2oiASgCAEYEQCABIAIoAgQ2AgALDAMLIARBHksNASAEQQFqIQQgAigCBCICDQALC0EAIQMgAUEgTw0BA0AgAUECdEGAH2ooAgAiAkUEQCABQR5LIQIgAUEBaiEBIAJFDQEMAwsLIAIgAkF4aiIDKAIAQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgBGBEAgASACKAIENgIACwsgAigCACIBBEAgASACKAIENgIECyACKAIEIgEEQCABIAIoAgA2AgALIAMgAygCAEEBcjYCACADIAAQNwsgAwvhCwINfwV+IwBB8ABrIgckACAHIAAoAvDhASIINgJcIAEgAmohDSAIIAAoAoDiAWohDwJAAkAgBUUEQCABIQQMAQsgACgCxOABIRAgACgCwOABIREgACgCvOABIQ4gAEEBNgKM4QFBACEIA0AgCEEDRwRAIAcgCEECdCICaiAAIAJqQazQAWooAgA2AkQgCEEBaiEIDAELC0FsIQwgB0EYaiADIAQQBhADDQEgB0EsaiAHQRhqIAAoAgAQEyAHQTRqIAdBGGogACgCCBATIAdBPGogB0EYaiAAKAIEEBMgDUFgaiESIAEhBEEAIQwDQCAHKAIwIAcoAixBA3RqKQIAIhRCEIinQf8BcSEIIAcoAkAgBygCPEEDdGopAgAiFUIQiKdB/wFxIQsgBygCOCAHKAI0QQN0aikCACIWQiCIpyEJIBVCIIghFyAUQiCIpyECAkAgFkIQiKdB/wFxIgNBAk8EQAJAIAZFIANBGUlyRQRAIAkgB0EYaiADQSAgBygCHGsiCiAKIANLGyIKEAUgAyAKayIDdGohCSAHQRhqEAQaIANFDQEgB0EYaiADEAUgCWohCQwBCyAHQRhqIAMQBSAJaiEJIAdBGGoQBBoLIAcpAkQhGCAHIAk2AkQgByAYNwNIDAELAkAgA0UEQCACBEAgBygCRCEJDAMLIAcoAkghCQwBCwJAAkAgB0EYakEBEAUgCSACRWpqIgNBA0YEQCAHKAJEQX9qIgMgA0VqIQkMAQsgA0ECdCAHaigCRCIJIAlFaiEJIANBAUYNAQsgByAHKAJINgJMCwsgByAHKAJENgJIIAcgCTYCRAsgF6chAyALBEAgB0EYaiALEAUgA2ohAwsgCCALakEUTwRAIAdBGGoQBBoLIAgEQCAHQRhqIAgQBSACaiECCyAHQRhqEAQaIAcgB0EYaiAUQhiIp0H/AXEQCCAUp0H//wNxajYCLCAHIAdBGGogFUIYiKdB/wFxEAggFadB//8DcWo2AjwgB0EYahAEGiAHIAdBGGogFkIYiKdB/wFxEAggFqdB//8DcWo2AjQgByACNgJgIAcoAlwhCiAHIAk2AmggByADNgJkAkACQAJAIAQgAiADaiILaiASSw0AIAIgCmoiEyAPSw0AIA0gBGsgC0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdBKGogACgCBBATQQAhBCAHQeAAaiEMIAdB5ABqIQoDQCAHQShqEARBAksgBCAXTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEJIAcoAkggBygCREEDdGopAgAiH0IgiKchCCAeQiCIISAgHUIgiKchAgJAIB9CEIinQf8BcSIDQQJPBEACQCAGRSADQRlJckUEQCAIIAdBKGogA0EgIAcoAixrIg0gDSADSxsiDRAFIAMgDWsiA3RqIQggB0EoahAEGiADRQ0BIAdBKGogAxAFIAhqIQgMAQsgB0EoaiADEAUgCGohCCAHQShqEAQaCyAHKQJUISEgByAINgJUIAcgITcDWAwBCwJAIANFBEAgAgRAIAcoAlQhCAwDCyAHKAJYIQgMAQsCQAJAIAdBKGpBARAFIAggAkVqaiIDQQNGBEAgBygCVEF/aiIDIANFaiEIDAELIANBAnQgB2ooAlQiCCAIRWohCCADQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAg2AlQLICCnIQMgCQRAIAdBKGogCRAFIANqIQMLIAkgC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgAmohAgsgB0EoahAEGiAHIAcoAmggAmoiCSADajYCaCAKIAwgCCAJSxsoAgAhDSAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogB0EoaiAfQhiIp0H/AXEQCCEOIAdB8ABqIARBBHRqIgsgCSANaiAIazYCDCALIAg2AgggCyADNgIEIAsgAjYCACAHIA4gH6dB//8DcWo2AkQgBEEBaiEEDAELCyAEIBdIDQEgEkFgaiEYIAdB4ABqIRogB0HkAGohGyABIQMDQCAHQShqEARBAksgBCAFTnJFBEAgBygCQCAHKAI8QQN0aikCACIdQhCIp0H/AXEhCyAHKAJQIAcoAkxBA3RqKQIAIh5CEIinQf8BcSEIIAcoAkggBygCREEDdGopAgAiH0IgiKchCSAeQiCIISAgHUIgiKchDAJAIB9CEIinQf8BcSICQQJPBEACQCAGRSACQRlJckUEQCAJIAdBKGogAkEgIAcoAixrIgogCiACSxsiChAFIAIgCmsiAnRqIQkgB0EoahAEGiACRQ0BIAdBKGogAhAFIAlqIQkMAQsgB0EoaiACEAUgCWohCSAHQShqEAQaCyAHKQJUISEgByAJNgJUIAcgITcDWAwBCwJAIAJFBEAgDARAIAcoAlQhCQwDCyAHKAJYIQkMAQsCQAJAIAdBKGpBARAFIAkgDEVqaiICQQNGBEAgBygCVEF/aiICIAJFaiEJDAELIAJBAnQgB2ooAlQiCSAJRWohCSACQQFGDQELIAcgBygCWDYCXAsLIAcgBygCVDYCWCAHIAk2AlQLICCnIRQgCARAIAdBKGogCBAFIBRqIRQLIAggC2pBFE8EQCAHQShqEAQaCyALBEAgB0EoaiALEAUgDGohDAsgB0EoahAEGiAHIAcoAmggDGoiGSAUajYCaCAbIBogCSAZSxsoAgAhHCAHIAdBKGogHUIYiKdB/wFxEAggHadB//8DcWo2AjwgByAHQShqIB5CGIinQf8BcRAIIB6nQf//A3FqNgJMIAdBKGoQBBogByAHQShqIB9CGIinQf8BcRAIIB+nQf//A3FqNgJEIAcgB0HwAGogBEEDcUEEdGoiDSkDCCIdNwPIASAHIA0pAwAiHjcDwAECQAJAAkAgBygCvAEiDiAepyICaiIWIBNLDQAgAyAHKALEASIKIAJqIgtqIBhLDQAgEiADayALQSBqTw0BCyAHIAcpA8gBNwMQIAcgBykDwAE3AwggAyASIAdBCGogB0G8AWogEyAPIBUgERAeIQsMAQsgAiADaiEIIAMgDhAHIAJBEU8EQCADQRBqIQIDQCACIA5BEGoiDhAHIAJBEGoiAiAISQ0ACwsgCCAdpyIOayECIAcgFjYCvAEgDiAIIA9rSwRAIA4gCCAVa0sEQEFsIQsMAgsgESACIA9rIgJqIhYgCmogEU0EQCAIIBYgChAPGgwCCyAIIBZBACACaxAPIQggByACIApqIgo2AsQBIAggAmshCCAPIQILIA5BEE8EQCAIIApqIQoDQCAIIAIQByACQRBqIQIgCEEQaiIIIApJDQALDAELAkAgDkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgDkECdCIKQcAeaigCAGoiAhAXIAIgCkHgHmooAgBrIQIgBygCxAEhCgwBCyAIIAIQDAsgCkEJSQ0AIAggCmohCiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAKSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAKSQ0ACwsgCxADBEAgCyEQDAQFIA0gDDYCACANIBkgHGogCWs2AgwgDSAJNgIIIA0gFDYCBCAEQQFqIQQgAyALaiEDDAILAAsLIAQgBUgNASAEIBdrIQtBACEEA0AgCyAFSARAIAcgB0HwAGogC0EDcUEEdGoiAikDCCIdNwPIASAHIAIpAwAiHjcDwAECQAJAAkAgBygCvAEiDCAepyICaiIKIBNLDQAgAyAHKALEASIJIAJqIhBqIBhLDQAgEiADayAQQSBqTw0BCyAHIAcpA8gBNwMgIAcgBykDwAE3AxggAyASIAdBGGogB0G8AWogEyAPIBUgERAeIRAMAQsgAiADaiEIIAMgDBAHIAJBEU8EQCADQRBqIQIDQCACIAxBEGoiDBAHIAJBEGoiAiAISQ0ACwsgCCAdpyIGayECIAcgCjYCvAEgBiAIIA9rSwRAIAYgCCAVa0sEQEFsIRAMAgsgESACIA9rIgJqIgwgCWogEU0EQCAIIAwgCRAPGgwCCyAIIAxBACACaxAPIQggByACIAlqIgk2AsQBIAggAmshCCAPIQILIAZBEE8EQCAIIAlqIQYDQCAIIAIQByACQRBqIQIgCEEQaiIIIAZJDQALDAELAkAgBkEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgBkECdCIGQcAeaigCAGoiAhAXIAIgBkHgHmooAgBrIQIgBygCxAEhCQwBCyAIIAIQDAsgCUEJSQ0AIAggCWohBiAIQQhqIgggAkEIaiICa0EPTARAA0AgCCACEAwgAkEIaiECIAhBCGoiCCAGSQ0ADAIACwALA0AgCCACEAcgAkEQaiECIAhBEGoiCCAGSQ0ACwsgEBADDQMgC0EBaiELIAMgEGohAwwBCwsDQCAEQQNHBEAgACAEQQJ0IgJqQazQAWogAiAHaigCVDYCACAEQQFqIQQMAQsLIAcoArwBIQgLQbp/IRAgEyAIayIAIBIgA2tLDQAgAwR/IAMgCCAAEAsgAGoFQQALIAFrIRALIAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY0AAQMyIFEAMiBg0AIANBHzYCfCADIANB/ABqIANB+ABqIAQgBCAFaiAGGyIEIAEgAmoiAiAEaxAVIgUQAw0AIAMoAnwiBkEfSw0AIAMoAngiB0EJTw0AIABBiCBqIAMgBkGAC0GADCAHEBggA0E0NgJ8IAMgA0H8AGogA0H4AGogBCAFaiIEIAIgBGsQFSIFEAMNACADKAJ8IgZBNEsNACADKAJ4IgdBCk8NACAAQZAwaiADIAZBgA1B4A4gBxAYIANBIzYCfCADIANB/ABqIANB+ABqIAQgBWoiBCACIARrEBUiBRADDQAgAygCfCIGQSNLDQAgAygCeCIHQQpPDQAgACADIAZBwBBB0BEgBxAYIAQgBWoiBEEMaiIFIAJLDQAgAiAFayEFQQAhAgNAIAJBA0cEQCAEKAAAIgZBf2ogBU8NAiAAIAJBAnRqQZzQAWogBjYCACACQQFqIQIgBEEEaiEEDAELCyAEIAFrIQgLIANBgAFqJAAgCAtGAQN/IABBCGohAyAAKAIEIQJBACEAA0AgACACdkUEQCABIAMgAEEDdGotAAJBFktqIQEgAEEBaiEADAELCyABQQggAmt0C4YDAQV/Qbh/IQcCQCADRQ0AIAItAAAiBEUEQCABQQA2AgBBAUG4fyADQQFGGw8LAn8gAkEBaiIFIARBGHRBGHUiBkF/Sg0AGiAGQX9GBEAgA0EDSA0CIAUvAABBgP4BaiEEIAJBA2oMAQsgA0ECSA0BIAItAAEgBEEIdHJBgIB+aiEEIAJBAmoLIQUgASAENgIAIAVBAWoiASACIANqIgNLDQBBbCEHIABBEGogACAFLQAAIgVBBnZBI0EJIAEgAyABa0HAEEHQEUHwEiAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBmCBqIABBCGogBUEEdkEDcUEfQQggASABIAZqIAgbIgEgAyABa0GAC0GADEGAFyAAKAKM4QEgACgCnOIBIAQQHyIGEAMiCA0AIABBoDBqIABBBGogBUECdkEDcUE0QQkgASABIAZqIAgbIgEgAyABa0GADUHgDkGQGSAAKAKM4QEgACgCnOIBIAQQHyIAEAMNACAAIAFqIAJrIQcLIAcLrQMBCn8jAEGABGsiCCQAAn9BUiACQf8BSw0AGkFUIANBDEsNABogAkEBaiELIABBBGohCUGAgAQgA0F/anRBEHUhCkEAIQJBASEEQQEgA3QiB0F/aiIMIQUDQCACIAtGRQRAAkAgASACQQF0Ig1qLwEAIgZB//8DRgRAIAkgBUECdGogAjoAAiAFQX9qIQVBASEGDAELIARBACAKIAZBEHRBEHVKGyEECyAIIA1qIAY7AQAgAkEBaiECDAELCyAAIAQ7AQIgACADOwEAIAdBA3YgB0EBdmpBA2ohBkEAIQRBACECA0AgBCALRkUEQCABIARBAXRqLgEAIQpBACEAA0AgACAKTkUEQCAJIAJBAnRqIAQ6AAIDQCACIAZqIAxxIgIgBUsNAAsgAEEBaiEADAELCyAEQQFqIQQMAQsLQX8gAg0AGkEAIQIDfyACIAdGBH9BAAUgCCAJIAJBAnRqIgAtAAJBAXRqIgEgAS8BACIBQQFqOwEAIAAgAyABEBRrIgU6AAMgACABIAVB/wFxdCAHazsBACACQQFqIQIMAQsLCyEFIAhBgARqJAAgBQvjBgEIf0FsIQcCQCACQQNJDQACQAJAAkACQCABLQAAIgNBA3EiCUEBaw4DAwEAAgsgACgCiOEBDQBBYg8LIAJBBUkNAkEDIQYgASgAACEFAn8CQAJAIANBAnZBA3EiCEF+aiIEQQFNBEAgBEEBaw0BDAILIAVBDnZB/wdxIQQgBUEEdkH/B3EhAyAIRQwCCyAFQRJ2IQRBBCEGIAVBBHZB//8AcSEDQQAMAQsgBUEEdkH//w9xIgNBgIAISw0DIAEtAARBCnQgBUEWdnIhBEEFIQZBAAshBSAEIAZqIgogAksNAgJAIANBgQZJDQAgACgCnOIBRQ0AQQAhAgNAIAJBg4ABSw0BIAJBQGshAgwAAAsACwJ/IAlBA0YEQCABIAZqIQEgAEHw4gFqIQIgACgCDCEGIAUEQCACIAMgASAEIAYQXwwCCyACIAMgASAEIAYQXQwBCyAAQbjQAWohAiABIAZqIQEgAEHw4gFqIQYgAEGo0ABqIQggBQRAIAggBiADIAEgBCACEF4MAQsgCCAGIAMgASAEIAIQXAsQAw0CIAAgAzYCgOIBIABBATYCiOEBIAAgAEHw4gFqNgLw4QEgCUECRgRAIAAgAEGo0ABqNgIMCyAAIANqIgBBiOMBakIANwAAIABBgOMBakIANwAAIABB+OIBakIANwAAIABB8OIBakIANwAAIAoPCwJ/AkACQAJAIANBAnZBA3FBf2oiBEECSw0AIARBAWsOAgACAQtBASEEIANBA3YMAgtBAiEEIAEvAABBBHYMAQtBAyEEIAEQIUEEdgsiAyAEaiIFQSBqIAJLBEAgBSACSw0CIABB8OIBaiABIARqIAMQCyEBIAAgAzYCgOIBIAAgATYC8OEBIAEgA2oiAEIANwAYIABCADcAECAAQgA3AAggAEIANwAAIAUPCyAAIAM2AoDiASAAIAEgBGo2AvDhASAFDwsCfwJAAkACQCADQQJ2QQNxQX9qIgRBAksNACAEQQFrDgIAAgELQQEhByADQQN2DAILQQIhByABLwAAQQR2DAELIAJBBEkgARAhIgJBj4CAAUtyDQFBAyEHIAJBBHYLIQIgAEHw4gFqIAEgB2otAAAgAkEgahAQIQEgACACNgKA4gEgACABNgLw4QEgB0EBaiEHCyAHC0sAIABC+erQ0OfJoeThADcDICAAQgA3AxggAELP1tO+0ser2UI3AxAgAELW64Lu6v2J9eAANwMIIABCADcDACAAQShqQQBBKBAQGgviAgICfwV+IABBKGoiASAAKAJIaiECAn4gACkDACIDQiBaBEAgACkDECIEQgeJIAApAwgiBUIBiXwgACkDGCIGQgyJfCAAKQMgIgdCEol8IAUQGSAEEBkgBhAZIAcQGQwBCyAAKQMYQsXP2bLx5brqJ3wLIAN8IQMDQCABQQhqIgAgAk0EQEIAIAEpAAAQCSADhUIbiUKHla+vmLbem55/fkLj3MqV/M7y9YV/fCEDIAAhAQwBCwsCQCABQQRqIgAgAksEQCABIQAMAQsgASgAAK1Ch5Wvr5i23puef34gA4VCF4lCz9bTvtLHq9lCfkL5893xmfaZqxZ8IQMLA0AgACACSQRAIAAxAABCxc/ZsvHluuonfiADhUILiUKHla+vmLbem55/fiEDIABBAWohAAwBCwsgA0IhiCADhULP1tO+0ser2UJ+IgNCHYggA4VC+fPd8Zn2masWfiIDQiCIIAOFC+8CAgJ/BH4gACAAKQMAIAKtfDcDAAJAAkAgACgCSCIDIAJqIgRBH00EQCABRQ0BIAAgA2pBKGogASACECAgACgCSCACaiEEDAELIAEgAmohAgJ/IAMEQCAAQShqIgQgA2ogAUEgIANrECAgACAAKQMIIAQpAAAQCTcDCCAAIAApAxAgACkAMBAJNwMQIAAgACkDGCAAKQA4EAk3AxggACAAKQMgIABBQGspAAAQCTcDICAAKAJIIQMgAEEANgJIIAEgA2tBIGohAQsgAUEgaiACTQsEQCACQWBqIQMgACkDICEFIAApAxghBiAAKQMQIQcgACkDCCEIA0AgCCABKQAAEAkhCCAHIAEpAAgQCSEHIAYgASkAEBAJIQYgBSABKQAYEAkhBSABQSBqIgEgA00NAAsgACAFNwMgIAAgBjcDGCAAIAc3AxAgACAINwMICyABIAJPDQEgAEEoaiABIAIgAWsiBBAgCyAAIAQ2AkgLCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQEBogAwVBun8LCy8BAX8gAEUEQEG2f0EAIAMbDwtBun8hBCADIAFNBH8gACACIAMQCxogAwVBun8LC6gCAQZ/IwBBEGsiByQAIABB2OABaikDAEKAgIAQViEIQbh/IQUCQCAEQf//B0sNACAAIAMgBBBCIgUQAyIGDQAgACgCnOIBIQkgACAHQQxqIAMgAyAFaiAGGyIKIARBACAFIAYbayIGEEAiAxADBEAgAyEFDAELIAcoAgwhBCABRQRAQbp/IQUgBEEASg0BCyAGIANrIQUgAyAKaiEDAkAgCQRAIABBADYCnOIBDAELAkACQAJAIARBBUgNACAAQdjgAWopAwBCgICACFgNAAwBCyAAQQA2ApziAQwBCyAAKAIIED8hBiAAQQA2ApziASAGQRRPDQELIAAgASACIAMgBSAEIAgQOSEFDAELIAAgASACIAMgBSAEIAgQOiEFCyAHQRBqJAAgBQtnACAAQdDgAWogASACIAAoAuzhARAuIgEQAwRAIAEPC0G4fyECAkAgAQ0AIABB7OABaigCACIBBEBBYCECIAAoApjiASABRw0BC0EAIQIgAEHw4AFqKAIARQ0AIABBkOEBahBDCyACCycBAX8QVyIERQRAQUAPCyAEIAAgASACIAMgBBBLEE8hACAEEFYgAAs/AQF/AkACQAJAIAAoAqDiAUEBaiIBQQJLDQAgAUEBaw4CAAECCyAAEDBBAA8LIABBADYCoOIBCyAAKAKU4gELvAMCB38BfiMAQRBrIgkkAEG4fyEGAkAgBCgCACIIQQVBCSAAKALs4QEiBRtJDQAgAygCACIHQQFBBSAFGyAFEC8iBRADBEAgBSEGDAELIAggBUEDakkNACAAIAcgBRBJIgYQAw0AIAEgAmohCiAAQZDhAWohCyAIIAVrIQIgBSAHaiEHIAEhBQNAIAcgAiAJECwiBhADDQEgAkF9aiICIAZJBEBBuH8hBgwCCyAJKAIAIghBAksEQEFsIQYMAgsgB0EDaiEHAn8CQAJAAkAgCEEBaw4CAgABCyAAIAUgCiAFayAHIAYQSAwCCyAFIAogBWsgByAGEEcMAQsgBSAKIAVrIActAAAgCSgCCBBGCyIIEAMEQCAIIQYMAgsgACgC8OABBEAgCyAFIAgQRQsgAiAGayECIAYgB2ohByAFIAhqIQUgCSgCBEUNAAsgACkD0OABIgxCf1IEQEFsIQYgDCAFIAFrrFINAQsgACgC8OABBEBBaiEGIAJBBEkNASALEEQhDCAHKAAAIAynRw0BIAdBBGohByACQXxqIQILIAMgBzYCACAEIAI2AgAgBSABayEGCyAJQRBqJAAgBgsuACAAECsCf0EAQQAQAw0AGiABRSACRXJFBEBBYiAAIAEgAhA9EAMNARoLQQALCzcAIAEEQCAAIAAoAsTgASABKAIEIAEoAghqRzYCnOIBCyAAECtBABADIAFFckUEQCAAIAEQWwsL0QIBB38jAEEQayIGJAAgBiAENgIIIAYgAzYCDCAFBEAgBSgCBCEKIAUoAgghCQsgASEIAkACQANAIAAoAuzhARAWIQsCQANAIAQgC0kNASADKAAAQXBxQdDUtMIBRgRAIAMgBBAiIgcQAw0EIAQgB2shBCADIAdqIQMMAQsLIAYgAzYCDCAGIAQ2AggCQCAFBEAgACAFEE5BACEHQQAQA0UNAQwFCyAAIAogCRBNIgcQAw0ECyAAIAgQUCAMQQFHQQAgACAIIAIgBkEMaiAGQQhqEEwiByIDa0EAIAMQAxtBCkdyRQRAQbh/IQcMBAsgBxADDQMgAiAHayECIAcgCGohCEEBIQwgBigCDCEDIAYoAgghBAwBCwsgBiADNgIMIAYgBDYCCEG4fyEHIAQNASAIIAFrIQcMAQsgBiADNgIMIAYgBDYCCAsgBkEQaiQAIAcLRgECfyABIAAoArjgASICRwRAIAAgAjYCxOABIAAgATYCuOABIAAoArzgASEDIAAgATYCvOABIAAgASADIAJrajYCwOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEEdCAAbiECCyAAQQh2IgEgAkEYbCIAQYwIaigCAGwgAEGICGooAgBqIgJBA3YgAmogAEGACGooAgAgAEGECGooAgAgAWxqSQs3ACAAIAMgBCAFQYAQEDMiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQMgVBuH8LC78DAQN/IwBBIGsiBSQAIAVBCGogAiADEAYiAhADRQRAIAAgAWoiB0F9aiEGIAUgBBAOIARBBGohAiAFLQACIQMDQEEAIAAgBkkgBUEIahAEGwRAIAAgAiAFQQhqIAMQAkECdGoiBC8BADsAACAFQQhqIAQtAAIQASAAIAQtAANqIgQgAiAFQQhqIAMQAkECdGoiAC8BADsAACAFQQhqIAAtAAIQASAEIAAtAANqIQAMAQUgB0F+aiEEA0AgBUEIahAEIAAgBEtyRQRAIAAgAiAFQQhqIAMQAkECdGoiBi8BADsAACAFQQhqIAYtAAIQASAAIAYtAANqIQAMAQsLA0AgACAES0UEQCAAIAIgBUEIaiADEAJBAnRqIgYvAQA7AAAgBUEIaiAGLQACEAEgACAGLQADaiEADAELCwJAIAAgB08NACAAIAIgBUEIaiADEAIiA0ECdGoiAC0AADoAACAALQADQQFGBEAgBUEIaiAALQACEAEMAQsgBSgCDEEfSw0AIAVBCGogAiADQQJ0ai0AAhABIAUoAgxBIUkNACAFQSA2AgwLIAFBbCAFQQhqEAobIQILCwsgBUEgaiQAIAILkgIBBH8jAEFAaiIJJAAgCSADQTQQCyEDAkAgBEECSA0AIAMgBEECdGooAgAhCSADQTxqIAgQIyADQQE6AD8gAyACOgA+QQAhBCADKAI8IQoDQCAEIAlGDQEgACAEQQJ0aiAKNgEAIARBAWohBAwAAAsAC0EAIQkDQCAGIAlGRQRAIAMgBSAJQQF0aiIKLQABIgtBAnRqIgwoAgAhBCADQTxqIAotAABBCHQgCGpB//8DcRAjIANBAjoAPyADIAcgC2siCiACajoAPiAEQQEgASAKa3RqIQogAygCPCELA0AgACAEQQJ0aiALNgEAIARBAWoiBCAKSQ0ACyAMIAo2AgAgCUEBaiEJDAELCyADQUBrJAALowIBCX8jAEHQAGsiCSQAIAlBEGogBUE0EAsaIAcgBmshDyAHIAFrIRADQAJAIAMgCkcEQEEBIAEgByACIApBAXRqIgYtAAEiDGsiCGsiC3QhDSAGLQAAIQ4gCUEQaiAMQQJ0aiIMKAIAIQYgCyAPTwRAIAAgBkECdGogCyAIIAUgCEE0bGogCCAQaiIIQQEgCEEBShsiCCACIAQgCEECdGooAgAiCEEBdGogAyAIayAHIA4QYyAGIA1qIQgMAgsgCUEMaiAOECMgCUEBOgAPIAkgCDoADiAGIA1qIQggCSgCDCELA0AgBiAITw0CIAAgBkECdGogCzYBACAGQQFqIQYMAAALAAsgCUHQAGokAA8LIAwgCDYCACAKQQFqIQoMAAALAAs0ACAAIAMgBCAFEDYiBRADBEAgBQ8LIAUgBEkEfyABIAIgAyAFaiAEIAVrIAAQNAVBuH8LCyMAIAA/AEEQdGtB//8DakEQdkAAQX9GBEBBAA8LQQAQAEEBCzsBAX8gAgRAA0AgACABIAJBgCAgAkGAIEkbIgMQCyEAIAFBgCBqIQEgAEGAIGohACACIANrIgINAAsLCwYAIAAQAwsLqBUJAEGICAsNAQAAAAEAAAACAAAAAgBBoAgLswYBAAAAAQAAAAIAAAACAAAAJgAAAIIAAAAhBQAASgAAAGcIAAAmAAAAwAEAAIAAAABJBQAASgAAAL4IAAApAAAALAIAAIAAAABJBQAASgAAAL4IAAAvAAAAygIAAIAAAACKBQAASgAAAIQJAAA1AAAAcwMAAIAAAACdBQAASgAAAKAJAAA9AAAAgQMAAIAAAADrBQAASwAAAD4KAABEAAAAngMAAIAAAABNBgAASwAAAKoKAABLAAAAswMAAIAAAADBBgAATQAAAB8NAABNAAAAUwQAAIAAAAAjCAAAUQAAAKYPAABUAAAAmQQAAIAAAABLCQAAVwAAALESAABYAAAA2gQAAIAAAABvCQAAXQAAACMUAABUAAAARQUAAIAAAABUCgAAagAAAIwUAABqAAAArwUAAIAAAAB2CQAAfAAAAE4QAAB8AAAA0gIAAIAAAABjBwAAkQAAAJAHAACSAAAAAAAAAAEAAAABAAAABQAAAA0AAAAdAAAAPQAAAH0AAAD9AAAA/QEAAP0DAAD9BwAA/Q8AAP0fAAD9PwAA/X8AAP3/AAD9/wEA/f8DAP3/BwD9/w8A/f8fAP3/PwD9/38A/f//AP3//wH9//8D/f//B/3//w/9//8f/f//P/3//38AAAAAAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABEAAAASAAAAEwAAABQAAAAVAAAAFgAAABcAAAAYAAAAGQAAABoAAAAbAAAAHAAAAB0AAAAeAAAAHwAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAAAA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAAAAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACUAAAAnAAAAKQAAACsAAAAvAAAAMwAAADsAAABDAAAAUwAAAGMAAACDAAAAAwEAAAMCAAADBAAAAwgAAAMQAAADIAAAA0AAAAOAAAADAAEAQeAPC1EBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAEAAAABQAAAAcAAAAIAAAACQAAAAoAAAALAAAADAAAAA0AAAAOAAAADwAAABAAQcQQC4sBAQAAAAIAAAADAAAABAAAAAUAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAABIAAAAUAAAAFgAAABgAAAAcAAAAIAAAACgAAAAwAAAAQAAAAIAAAAAAAQAAAAIAAAAEAAAACAAAABAAAAAgAAAAQAAAAIAAAAAAAQBBkBIL5gQBAAAAAQAAAAEAAAABAAAAAgAAAAIAAAADAAAAAwAAAAQAAAAGAAAABwAAAAgAAAAJAAAACgAAAAsAAAAMAAAADQAAAA4AAAAPAAAAEAAAAAEAAAAEAAAACAAAAAAAAAABAAEBBgAAAAAAAAQAAAAAEAAABAAAAAAgAAAFAQAAAAAAAAUDAAAAAAAABQQAAAAAAAAFBgAAAAAAAAUHAAAAAAAABQkAAAAAAAAFCgAAAAAAAAUMAAAAAAAABg4AAAAAAAEFEAAAAAAAAQUUAAAAAAABBRYAAAAAAAIFHAAAAAAAAwUgAAAAAAAEBTAAAAAgAAYFQAAAAAAABwWAAAAAAAAIBgABAAAAAAoGAAQAAAAADAYAEAAAIAAABAAAAAAAAAAEAQAAAAAAAAUCAAAAIAAABQQAAAAAAAAFBQAAACAAAAUHAAAAAAAABQgAAAAgAAAFCgAAAAAAAAULAAAAAAAABg0AAAAgAAEFEAAAAAAAAQUSAAAAIAABBRYAAAAAAAIFGAAAACAAAwUgAAAAAAADBSgAAAAAAAYEQAAAABAABgRAAAAAIAAHBYAAAAAAAAkGAAIAAAAACwYACAAAMAAABAAAAAAQAAAEAQAAACAAAAUCAAAAIAAABQMAAAAgAAAFBQAAACAAAAUGAAAAIAAABQgAAAAgAAAFCQAAACAAAAULAAAAIAAABQwAAAAAAAAGDwAAACAAAQUSAAAAIAABBRQAAAAgAAIFGAAAACAAAgUcAAAAIAADBSgAAAAgAAQFMAAAAAAAEAYAAAEAAAAPBgCAAAAAAA4GAEAAAAAADQYAIABBgBcLhwIBAAEBBQAAAAAAAAUAAAAAAAAGBD0AAAAAAAkF/QEAAAAADwX9fwAAAAAVBf3/HwAAAAMFBQAAAAAABwR9AAAAAAAMBf0PAAAAABIF/f8DAAAAFwX9/38AAAAFBR0AAAAAAAgE/QAAAAAADgX9PwAAAAAUBf3/DwAAAAIFAQAAABAABwR9AAAAAAALBf0HAAAAABEF/f8BAAAAFgX9/z8AAAAEBQ0AAAAQAAgE/QAAAAAADQX9HwAAAAATBf3/BwAAAAEFAQAAABAABgQ9AAAAAAAKBf0DAAAAABAF/f8AAAAAHAX9//8PAAAbBf3//wcAABoF/f//AwAAGQX9//8BAAAYBf3//wBBkBkLhgQBAAEBBgAAAAAAAAYDAAAAAAAABAQAAAAgAAAFBQAAAAAAAAUGAAAAAAAABQgAAAAAAAAFCQAAAAAAAAULAAAAAAAABg0AAAAAAAAGEAAAAAAAAAYTAAAAAAAABhYAAAAAAAAGGQAAAAAAAAYcAAAAAAAABh8AAAAAAAAGIgAAAAAAAQYlAAAAAAABBikAAAAAAAIGLwAAAAAAAwY7AAAAAAAEBlMAAAAAAAcGgwAAAAAACQYDAgAAEAAABAQAAAAAAAAEBQAAACAAAAUGAAAAAAAABQcAAAAgAAAFCQAAAAAAAAUKAAAAAAAABgwAAAAAAAAGDwAAAAAAAAYSAAAAAAAABhUAAAAAAAAGGAAAAAAAAAYbAAAAAAAABh4AAAAAAAAGIQAAAAAAAQYjAAAAAAABBicAAAAAAAIGKwAAAAAAAwYzAAAAAAAEBkMAAAAAAAUGYwAAAAAACAYDAQAAIAAABAQAAAAwAAAEBAAAABAAAAQFAAAAIAAABQcAAAAgAAAFCAAAACAAAAUKAAAAIAAABQsAAAAAAAAGDgAAAAAAAAYRAAAAAAAABhQAAAAAAAAGFwAAAAAAAAYaAAAAAAAABh0AAAAAAAAGIAAAAAAAEAYDAAEAAAAPBgOAAAAAAA4GA0AAAAAADQYDIAAAAAAMBgMQAAAAAAsGAwgAAAAACgYDBABBpB0L2QEBAAAAAwAAAAcAAAAPAAAAHwAAAD8AAAB/AAAA/wAAAP8BAAD/AwAA/wcAAP8PAAD/HwAA/z8AAP9/AAD//wAA//8BAP//AwD//wcA//8PAP//HwD//z8A//9/AP///wD///8B////A////wf///8P////H////z////9/AAAAAAEAAAACAAAABAAAAAAAAAACAAAABAAAAAgAAAAAAAAAAQAAAAIAAAABAAAABAAAAAQAAAAEAAAABAAAAAgAAAAIAAAACAAAAAcAAAAIAAAACQAAAAoAAAALAEGgIAsDwBBQ";
-//# sourceMappingURL=zstddec.modern.js.map
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/_polyfill/CompressedArrayTexture.js
-
-class CompressedArrayTexture extends three_module.CompressedTexture {
-  constructor(mipmaps, width, height, depth, format, type) {
-    super(mipmaps, width, height, format, type);
-    this.isCompressedArrayTexture = true;
-    this.image.depth = depth;
-    this.wrapR = three_module.ClampToEdgeWrapping;
-  }
-}
-
-
-// EXTERNAL MODULE: ./node_modules/three-stdlib/_polyfill/Data3DTexture.js
-var Data3DTexture = __webpack_require__(81111);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/loaders/KTX2Loader.js
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-
-
-
-const _taskCache = /* @__PURE__ */ new WeakMap();
-let _activeLoaders = 0;
-let _zstd;
-const _KTX2Loader = class extends three_module.Loader {
-  constructor(manager) {
-    super(manager);
-    this.transcoderPath = "";
-    this.transcoderBinary = null;
-    this.transcoderPending = null;
-    this.workerPool = new WorkerPool();
-    this.workerSourceURL = "";
-    this.workerConfig = null;
-    if (typeof MSC_TRANSCODER !== "undefined") {
-      console.warn(
-        'THREE.KTX2Loader: Please update to latest "basis_transcoder". "msc_basis_transcoder" is no longer supported in three.js r125+.'
-      );
-    }
-  }
-  setTranscoderPath(path) {
-    this.transcoderPath = path;
-    return this;
-  }
-  setWorkerLimit(num) {
-    this.workerPool.setWorkerLimit(num);
-    return this;
-  }
-  detectSupport(renderer) {
-    this.workerConfig = {
-      astcSupported: renderer.extensions.has("WEBGL_compressed_texture_astc"),
-      etc1Supported: renderer.extensions.has("WEBGL_compressed_texture_etc1"),
-      etc2Supported: renderer.extensions.has("WEBGL_compressed_texture_etc"),
-      dxtSupported: renderer.extensions.has("WEBGL_compressed_texture_s3tc"),
-      bptcSupported: renderer.extensions.has("EXT_texture_compression_bptc"),
-      pvrtcSupported: renderer.extensions.has("WEBGL_compressed_texture_pvrtc") || renderer.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc")
-    };
-    if (renderer.capabilities.isWebGL2) {
-      this.workerConfig.etc1Supported = false;
-    }
-    return this;
-  }
-  init() {
-    if (!this.transcoderPending) {
-      const jsLoader = new three_module.FileLoader(this.manager);
-      jsLoader.setPath(this.transcoderPath);
-      jsLoader.setWithCredentials(this.withCredentials);
-      const jsContent = jsLoader.loadAsync("basis_transcoder.js");
-      const binaryLoader = new three_module.FileLoader(this.manager);
-      binaryLoader.setPath(this.transcoderPath);
-      binaryLoader.setResponseType("arraybuffer");
-      binaryLoader.setWithCredentials(this.withCredentials);
-      const binaryContent = binaryLoader.loadAsync("basis_transcoder.wasm");
-      this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => {
-        const fn = _KTX2Loader.BasisWorker.toString();
-        const body = [
-          "/* constants */",
-          "let _EngineFormat = " + JSON.stringify(_KTX2Loader.EngineFormat),
-          "let _TranscoderFormat = " + JSON.stringify(_KTX2Loader.TranscoderFormat),
-          "let _BasisFormat = " + JSON.stringify(_KTX2Loader.BasisFormat),
-          "/* basis_transcoder.js */",
-          jsContent2,
-          "/* worker */",
-          fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}"))
-        ].join("\n");
-        this.workerSourceURL = URL.createObjectURL(new Blob([body]));
-        this.transcoderBinary = binaryContent2;
-        this.workerPool.setWorkerCreator(() => {
-          const worker = new Worker(this.workerSourceURL);
-          const transcoderBinary = this.transcoderBinary.slice(0);
-          worker.postMessage({ type: "init", config: this.workerConfig, transcoderBinary }, [transcoderBinary]);
-          return worker;
-        });
-      });
-      if (_activeLoaders > 0) {
-        console.warn(
-          "THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."
-        );
-      }
-      _activeLoaders++;
-    }
-    return this.transcoderPending;
-  }
-  load(url, onLoad, onProgress, onError) {
-    if (this.workerConfig === null) {
-      throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.");
-    }
-    const loader = new three_module.FileLoader(this.manager);
-    loader.setResponseType("arraybuffer");
-    loader.setWithCredentials(this.withCredentials);
-    loader.load(
-      url,
-      (buffer) => {
-        if (_taskCache.has(buffer)) {
-          const cachedTask = _taskCache.get(buffer);
-          return cachedTask.promise.then(onLoad).catch(onError);
-        }
-        this._createTexture(buffer).then((texture) => onLoad ? onLoad(texture) : null).catch(onError);
-      },
-      onProgress,
-      onError
-    );
-  }
-  _createTextureFrom(transcodeResult, container) {
-    const { mipmaps, width, height, format, type, error, dfdTransferFn, dfdFlags } = transcodeResult;
-    if (type === "error")
-      return Promise.reject(error);
-    const texture = container.layerCount > 1 ? new CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, three_module.UnsignedByteType) : new three_module.CompressedTexture(mipmaps, width, height, format, three_module.UnsignedByteType);
-    texture.minFilter = mipmaps.length === 1 ? three_module.LinearFilter : three_module.LinearMipmapLinearFilter;
-    texture.magFilter = three_module.LinearFilter;
-    texture.generateMipmaps = false;
-    texture.needsUpdate = true;
-    if ("colorSpace" in texture)
-      texture.colorSpace = dfdTransferFn === KHR_DF_TRANSFER_SRGB ? "srgb" : "srgb-linear";
-    else
-      texture.encoding = dfdTransferFn === KHR_DF_TRANSFER_SRGB ? 3001 : 3e3;
-    texture.premultiplyAlpha = !!(dfdFlags & KHR_DF_FLAG_ALPHA_PREMULTIPLIED);
-    return texture;
-  }
-  /**
-   * @param {ArrayBuffer} buffer
-   * @param {object?} config
-   * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}
-   */
-  async _createTexture(buffer, config = {}) {
-    const container = read(new Uint8Array(buffer));
-    if (container.vkFormat !== VK_FORMAT_UNDEFINED) {
-      return createDataTexture(container);
-    }
-    const taskConfig = config;
-    const texturePending = this.init().then(() => {
-      return this.workerPool.postMessage({ type: "transcode", buffer, taskConfig }, [buffer]);
-    }).then((e) => this._createTextureFrom(e.data, container));
-    _taskCache.set(buffer, { promise: texturePending });
-    return texturePending;
-  }
-  dispose() {
-    this.workerPool.dispose();
-    if (this.workerSourceURL)
-      URL.revokeObjectURL(this.workerSourceURL);
-    _activeLoaders--;
-    return this;
-  }
-};
-let KTX2Loader = _KTX2Loader;
-/* CONSTANTS */
-__publicField(KTX2Loader, "BasisFormat", {
-  ETC1S: 0,
-  UASTC_4x4: 1
-});
-__publicField(KTX2Loader, "TranscoderFormat", {
-  ETC1: 0,
-  ETC2: 1,
-  BC1: 2,
-  BC3: 3,
-  BC4: 4,
-  BC5: 5,
-  BC7_M6_OPAQUE_ONLY: 6,
-  BC7_M5: 7,
-  PVRTC1_4_RGB: 8,
-  PVRTC1_4_RGBA: 9,
-  ASTC_4x4: 10,
-  ATC_RGB: 11,
-  ATC_RGBA_INTERPOLATED_ALPHA: 12,
-  RGBA32: 13,
-  RGB565: 14,
-  BGR565: 15,
-  RGBA4444: 16
-});
-__publicField(KTX2Loader, "EngineFormat", {
-  RGBAFormat: three_module.RGBAFormat,
-  RGBA_ASTC_4x4_Format: three_module.RGBA_ASTC_4x4_Format,
-  RGBA_BPTC_Format: three_module.RGBA_BPTC_Format,
-  RGBA_ETC2_EAC_Format: three_module.RGBA_ETC2_EAC_Format,
-  RGBA_PVRTC_4BPPV1_Format: three_module.RGBA_PVRTC_4BPPV1_Format,
-  RGBA_S3TC_DXT5_Format: three_module.RGBA_S3TC_DXT5_Format,
-  RGB_ETC1_Format: three_module.RGB_ETC1_Format,
-  RGB_ETC2_Format: three_module.RGB_ETC2_Format,
-  RGB_PVRTC_4BPPV1_Format: three_module.RGB_PVRTC_4BPPV1_Format,
-  RGB_S3TC_DXT1_Format: three_module.RGB_S3TC_DXT1_Format
-});
-/* WEB WORKER */
-__publicField(KTX2Loader, "BasisWorker", function() {
-  let config;
-  let transcoderPending;
-  let BasisModule;
-  const EngineFormat = _EngineFormat;
-  const TranscoderFormat = _TranscoderFormat;
-  const BasisFormat = _BasisFormat;
-  self.addEventListener("message", function(e) {
-    const message = e.data;
-    switch (message.type) {
-      case "init":
-        config = message.config;
-        init(message.transcoderBinary);
-        break;
-      case "transcode":
-        transcoderPending.then(() => {
-          try {
-            const { width, height, hasAlpha, mipmaps, format, dfdTransferFn, dfdFlags } = transcode(message.buffer);
-            const buffers = [];
-            for (let i = 0; i < mipmaps.length; ++i) {
-              buffers.push(mipmaps[i].data.buffer);
-            }
-            self.postMessage(
-              {
-                type: "transcode",
-                id: message.id,
-                width,
-                height,
-                hasAlpha,
-                mipmaps,
-                format,
-                dfdTransferFn,
-                dfdFlags
-              },
-              buffers
-            );
-          } catch (error) {
-            console.error(error);
-            self.postMessage({ type: "error", id: message.id, error: error.message });
-          }
-        });
-        break;
-    }
-  });
-  function init(wasmBinary) {
-    transcoderPending = new Promise((resolve) => {
-      BasisModule = { wasmBinary, onRuntimeInitialized: resolve };
-      BASIS(BasisModule);
-    }).then(() => {
-      BasisModule.initializeBasis();
-      if (BasisModule.KTX2File === void 0) {
-        console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder.");
-      }
-    });
-  }
-  function transcode(buffer) {
-    const ktx2File = new BasisModule.KTX2File(new Uint8Array(buffer));
-    function cleanup() {
-      ktx2File.close();
-      ktx2File.delete();
-    }
-    if (!ktx2File.isValid()) {
-      cleanup();
-      throw new Error("THREE.KTX2Loader:	Invalid or unsupported .ktx2 file");
-    }
-    const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S;
-    const width = ktx2File.getWidth();
-    const height = ktx2File.getHeight();
-    const layers = ktx2File.getLayers() || 1;
-    const levels = ktx2File.getLevels();
-    const hasAlpha = ktx2File.getHasAlpha();
-    const dfdTransferFn = ktx2File.getDFDTransferFunc();
-    const dfdFlags = ktx2File.getDFDFlags();
-    const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha);
-    if (!width || !height || !levels) {
-      cleanup();
-      throw new Error("THREE.KTX2Loader:	Invalid texture");
-    }
-    if (!ktx2File.startTranscoding()) {
-      cleanup();
-      throw new Error("THREE.KTX2Loader: .startTranscoding failed");
-    }
-    const mipmaps = [];
-    for (let mip = 0; mip < levels; mip++) {
-      const layerMips = [];
-      let mipWidth, mipHeight;
-      for (let layer = 0; layer < layers; layer++) {
-        const levelInfo = ktx2File.getImageLevelInfo(mip, layer, 0);
-        mipWidth = levelInfo.origWidth < 4 ? levelInfo.origWidth : levelInfo.width;
-        mipHeight = levelInfo.origHeight < 4 ? levelInfo.origHeight : levelInfo.height;
-        const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat));
-        const status = ktx2File.transcodeImage(dst, mip, layer, 0, transcoderFormat, 0, -1, -1);
-        if (!status) {
-          cleanup();
-          throw new Error("THREE.KTX2Loader: .transcodeImage failed.");
-        }
-        layerMips.push(dst);
-      }
-      mipmaps.push({ data: concat(layerMips), width: mipWidth, height: mipHeight });
-    }
-    cleanup();
-    return { width, height, hasAlpha, mipmaps, format: engineFormat, dfdTransferFn, dfdFlags };
-  }
-  const FORMAT_OPTIONS = [
-    {
-      if: "astcSupported",
-      basisFormat: [BasisFormat.UASTC_4x4],
-      transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4],
-      engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format],
-      priorityETC1S: Infinity,
-      priorityUASTC: 1,
-      needsPowerOfTwo: false
-    },
-    {
-      if: "bptcSupported",
-      basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],
-      transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5],
-      engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format],
-      priorityETC1S: 3,
-      priorityUASTC: 2,
-      needsPowerOfTwo: false
-    },
-    {
-      if: "dxtSupported",
-      basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],
-      transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3],
-      engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format],
-      priorityETC1S: 4,
-      priorityUASTC: 5,
-      needsPowerOfTwo: false
-    },
-    {
-      if: "etc2Supported",
-      basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],
-      transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2],
-      engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format],
-      priorityETC1S: 1,
-      priorityUASTC: 3,
-      needsPowerOfTwo: false
-    },
-    {
-      if: "etc1Supported",
-      basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],
-      transcoderFormat: [TranscoderFormat.ETC1],
-      engineFormat: [EngineFormat.RGB_ETC1_Format],
-      priorityETC1S: 2,
-      priorityUASTC: 4,
-      needsPowerOfTwo: false
-    },
-    {
-      if: "pvrtcSupported",
-      basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],
-      transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA],
-      engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format],
-      priorityETC1S: 5,
-      priorityUASTC: 6,
-      needsPowerOfTwo: true
-    }
-  ];
-  const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) {
-    return a.priorityETC1S - b.priorityETC1S;
-  });
-  const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) {
-    return a.priorityUASTC - b.priorityUASTC;
-  });
-  function getTranscoderFormat(basisFormat, width, height, hasAlpha) {
-    let transcoderFormat;
-    let engineFormat;
-    const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS;
-    for (let i = 0; i < options.length; i++) {
-      const opt = options[i];
-      if (!config[opt.if])
-        continue;
-      if (!opt.basisFormat.includes(basisFormat))
-        continue;
-      if (hasAlpha && opt.transcoderFormat.length < 2)
-        continue;
-      if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height)))
-        continue;
-      transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0];
-      engineFormat = opt.engineFormat[hasAlpha ? 1 : 0];
-      return { transcoderFormat, engineFormat };
-    }
-    console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32.");
-    transcoderFormat = TranscoderFormat.RGBA32;
-    engineFormat = EngineFormat.RGBAFormat;
-    return { transcoderFormat, engineFormat };
-  }
-  function isPowerOfTwo(value) {
-    if (value <= 2)
-      return true;
-    return (value & value - 1) === 0 && value !== 0;
-  }
-  function concat(arrays) {
-    let totalByteLength = 0;
-    for (let i = 0; i < arrays.length; i++) {
-      const array = arrays[i];
-      totalByteLength += array.byteLength;
-    }
-    const result = new Uint8Array(totalByteLength);
-    let byteOffset = 0;
-    for (let i = 0; i < arrays.length; i++) {
-      const array = arrays[i];
-      result.set(array, byteOffset);
-      byteOffset += array.byteLength;
-    }
-    return result;
-  }
-});
-const FORMAT_MAP = {
-  [VK_FORMAT_R32G32B32A32_SFLOAT]: three_module.RGBAFormat,
-  [VK_FORMAT_R16G16B16A16_SFLOAT]: three_module.RGBAFormat,
-  [VK_FORMAT_R8G8B8A8_UNORM]: three_module.RGBAFormat,
-  [VK_FORMAT_R8G8B8A8_SRGB]: three_module.RGBAFormat,
-  [VK_FORMAT_R32G32_SFLOAT]: three_module.RGFormat,
-  [VK_FORMAT_R16G16_SFLOAT]: three_module.RGFormat,
-  [VK_FORMAT_R8G8_UNORM]: three_module.RGFormat,
-  [VK_FORMAT_R8G8_SRGB]: three_module.RGFormat,
-  [VK_FORMAT_R32_SFLOAT]: three_module.RedFormat,
-  [VK_FORMAT_R16_SFLOAT]: three_module.RedFormat,
-  [VK_FORMAT_R8_SRGB]: three_module.RedFormat,
-  [VK_FORMAT_R8_UNORM]: three_module.RedFormat
-};
-const TYPE_MAP = {
-  [VK_FORMAT_R32G32B32A32_SFLOAT]: three_module.FloatType,
-  [VK_FORMAT_R16G16B16A16_SFLOAT]: three_module.HalfFloatType,
-  [VK_FORMAT_R8G8B8A8_UNORM]: three_module.UnsignedByteType,
-  [VK_FORMAT_R8G8B8A8_SRGB]: three_module.UnsignedByteType,
-  [VK_FORMAT_R32G32_SFLOAT]: three_module.FloatType,
-  [VK_FORMAT_R16G16_SFLOAT]: three_module.HalfFloatType,
-  [VK_FORMAT_R8G8_UNORM]: three_module.UnsignedByteType,
-  [VK_FORMAT_R8G8_SRGB]: three_module.UnsignedByteType,
-  [VK_FORMAT_R32_SFLOAT]: three_module.FloatType,
-  [VK_FORMAT_R16_SFLOAT]: three_module.HalfFloatType,
-  [VK_FORMAT_R8_SRGB]: three_module.UnsignedByteType,
-  [VK_FORMAT_R8_UNORM]: three_module.UnsignedByteType
-};
-const ENCODING_MAP = {
-  [VK_FORMAT_R8G8B8A8_SRGB]: 3001,
-  // sRGBEncoding
-  [VK_FORMAT_R8G8_SRGB]: 3001,
-  // sRGBEncoding
-  [VK_FORMAT_R8_SRGB]: 3001
-  // sRGBEncoding
-};
-async function createDataTexture(container) {
-  const { vkFormat, pixelWidth, pixelHeight, pixelDepth } = container;
-  if (FORMAT_MAP[vkFormat] === void 0) {
-    throw new Error("THREE.KTX2Loader: Unsupported vkFormat.");
-  }
-  const level = container.levels[0];
-  let levelData;
-  let view;
-  if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE) {
-    levelData = level.levelData;
-  } else if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {
-    if (!_zstd) {
-      _zstd = new Promise(async (resolve) => {
-        const zstd = new Q();
-        await zstd.init();
-        resolve(zstd);
-      });
-    }
-    levelData = (await _zstd).decode(level.levelData, level.uncompressedByteLength);
-  } else {
-    throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme.");
-  }
-  if (TYPE_MAP[vkFormat] === three_module.FloatType) {
-    view = new Float32Array(
-      levelData.buffer,
-      levelData.byteOffset,
-      levelData.byteLength / Float32Array.BYTES_PER_ELEMENT
-    );
-  } else if (TYPE_MAP[vkFormat] === three_module.HalfFloatType) {
-    view = new Uint16Array(levelData.buffer, levelData.byteOffset, levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT);
-  } else {
-    view = levelData;
-  }
-  const texture = pixelDepth === 0 ? new three_module.DataTexture(view, pixelWidth, pixelHeight) : new Data3DTexture/* Data3DTexture */.J(view, pixelWidth, pixelHeight, pixelDepth);
-  texture.type = TYPE_MAP[vkFormat];
-  texture.format = FORMAT_MAP[vkFormat];
-  texture.encoding = ENCODING_MAP[vkFormat] || 3e3;
-  texture.needsUpdate = true;
-  return Promise.resolve(texture);
-}
-
-
-
-/***/ }),
-
-/***/ 8197:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "x": () => (/* binding */ RGBELoader)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-
-class RGBELoader extends three__WEBPACK_IMPORTED_MODULE_0__.DataTextureLoader {
-  constructor(manager) {
-    super(manager);
-    this.type = three__WEBPACK_IMPORTED_MODULE_0__.HalfFloatType;
-  }
-  // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html
-  parse(buffer) {
-    const RGBE_RETURN_FAILURE = -1, rgbe_read_error = 1, rgbe_write_error = 2, rgbe_format_error = 3, rgbe_memory_error = 4, rgbe_error = function(rgbe_error_code, msg) {
-      switch (rgbe_error_code) {
-        case rgbe_read_error:
-          console.error("THREE.RGBELoader Read Error: " + (msg || ""));
-          break;
-        case rgbe_write_error:
-          console.error("THREE.RGBELoader Write Error: " + (msg || ""));
-          break;
-        case rgbe_format_error:
-          console.error("THREE.RGBELoader Bad File Format: " + (msg || ""));
-          break;
-        default:
-        case rgbe_memory_error:
-          console.error("THREE.RGBELoader: Error: " + (msg || ""));
-      }
-      return RGBE_RETURN_FAILURE;
-    }, RGBE_VALID_PROGRAMTYPE = 1, RGBE_VALID_FORMAT = 2, RGBE_VALID_DIMENSIONS = 4, NEWLINE = "\n", fgets = function(buffer2, lineLimit, consume) {
-      const chunkSize = 128;
-      lineLimit = !lineLimit ? 1024 : lineLimit;
-      let p = buffer2.pos, i = -1, len = 0, s = "", chunk = String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p, p + chunkSize)));
-      while (0 > (i = chunk.indexOf(NEWLINE)) && len < lineLimit && p < buffer2.byteLength) {
-        s += chunk;
-        len += chunk.length;
-        p += chunkSize;
-        chunk += String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p, p + chunkSize)));
-      }
-      if (-1 < i) {
-        if (false !== consume)
-          buffer2.pos += len + i + 1;
-        return s + chunk.slice(0, i);
-      }
-      return false;
-    }, RGBE_ReadHeader = function(buffer2) {
-      const magic_token_re = /^#\?(\S+)/, gamma_re = /^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/, exposure_re = /^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/, format_re = /^\s*FORMAT=(\S+)\s*$/, dimensions_re = /^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/, header = {
-        valid: 0,
-        string: "",
-        comments: "",
-        programtype: "RGBE",
-        format: "",
-        gamma: 1,
-        exposure: 1,
-        width: 0,
-        height: 0
-      };
-      let line, match;
-      if (buffer2.pos >= buffer2.byteLength || !(line = fgets(buffer2))) {
-        return rgbe_error(rgbe_read_error, "no header found");
-      }
-      if (!(match = line.match(magic_token_re))) {
-        return rgbe_error(rgbe_format_error, "bad initial token");
-      }
-      header.valid |= RGBE_VALID_PROGRAMTYPE;
-      header.programtype = match[1];
-      header.string += line + "\n";
-      while (true) {
-        line = fgets(buffer2);
-        if (false === line)
-          break;
-        header.string += line + "\n";
-        if ("#" === line.charAt(0)) {
-          header.comments += line + "\n";
-          continue;
-        }
-        if (match = line.match(gamma_re)) {
-          header.gamma = parseFloat(match[1]);
-        }
-        if (match = line.match(exposure_re)) {
-          header.exposure = parseFloat(match[1]);
-        }
-        if (match = line.match(format_re)) {
-          header.valid |= RGBE_VALID_FORMAT;
-          header.format = match[1];
-        }
-        if (match = line.match(dimensions_re)) {
-          header.valid |= RGBE_VALID_DIMENSIONS;
-          header.height = parseInt(match[1], 10);
-          header.width = parseInt(match[2], 10);
-        }
-        if (header.valid & RGBE_VALID_FORMAT && header.valid & RGBE_VALID_DIMENSIONS)
-          break;
-      }
-      if (!(header.valid & RGBE_VALID_FORMAT)) {
-        return rgbe_error(rgbe_format_error, "missing format specifier");
-      }
-      if (!(header.valid & RGBE_VALID_DIMENSIONS)) {
-        return rgbe_error(rgbe_format_error, "missing image size specifier");
-      }
-      return header;
-    }, RGBE_ReadPixels_RLE = function(buffer2, w, h) {
-      const scanline_width = w;
-      if (
-        // run length encoding is not allowed so read flat
-        scanline_width < 8 || scanline_width > 32767 || // this file is not run length encoded
-        2 !== buffer2[0] || 2 !== buffer2[1] || buffer2[2] & 128
-      ) {
-        return new Uint8Array(buffer2);
-      }
-      if (scanline_width !== (buffer2[2] << 8 | buffer2[3])) {
-        return rgbe_error(rgbe_format_error, "wrong scanline width");
-      }
-      const data_rgba = new Uint8Array(4 * w * h);
-      if (!data_rgba.length) {
-        return rgbe_error(rgbe_memory_error, "unable to allocate buffer space");
-      }
-      let offset = 0, pos = 0;
-      const ptr_end = 4 * scanline_width;
-      const rgbeStart = new Uint8Array(4);
-      const scanline_buffer = new Uint8Array(ptr_end);
-      let num_scanlines = h;
-      while (num_scanlines > 0 && pos < buffer2.byteLength) {
-        if (pos + 4 > buffer2.byteLength) {
-          return rgbe_error(rgbe_read_error);
-        }
-        rgbeStart[0] = buffer2[pos++];
-        rgbeStart[1] = buffer2[pos++];
-        rgbeStart[2] = buffer2[pos++];
-        rgbeStart[3] = buffer2[pos++];
-        if (2 != rgbeStart[0] || 2 != rgbeStart[1] || (rgbeStart[2] << 8 | rgbeStart[3]) != scanline_width) {
-          return rgbe_error(rgbe_format_error, "bad rgbe scanline format");
-        }
-        let ptr = 0, count;
-        while (ptr < ptr_end && pos < buffer2.byteLength) {
-          count = buffer2[pos++];
-          const isEncodedRun = count > 128;
-          if (isEncodedRun)
-            count -= 128;
-          if (0 === count || ptr + count > ptr_end) {
-            return rgbe_error(rgbe_format_error, "bad scanline data");
-          }
-          if (isEncodedRun) {
-            const byteValue = buffer2[pos++];
-            for (let i = 0; i < count; i++) {
-              scanline_buffer[ptr++] = byteValue;
-            }
-          } else {
-            scanline_buffer.set(buffer2.subarray(pos, pos + count), ptr);
-            ptr += count;
-            pos += count;
-          }
-        }
-        const l = scanline_width;
-        for (let i = 0; i < l; i++) {
-          let off = 0;
-          data_rgba[offset] = scanline_buffer[i + off];
-          off += scanline_width;
-          data_rgba[offset + 1] = scanline_buffer[i + off];
-          off += scanline_width;
-          data_rgba[offset + 2] = scanline_buffer[i + off];
-          off += scanline_width;
-          data_rgba[offset + 3] = scanline_buffer[i + off];
-          offset += 4;
-        }
-        num_scanlines--;
-      }
-      return data_rgba;
-    };
-    const RGBEByteToRGBFloat = function(sourceArray, sourceOffset, destArray, destOffset) {
-      const e = sourceArray[sourceOffset + 3];
-      const scale = Math.pow(2, e - 128) / 255;
-      destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale;
-      destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale;
-      destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale;
-      destArray[destOffset + 3] = 1;
-    };
-    const RGBEByteToRGBHalf = function(sourceArray, sourceOffset, destArray, destOffset) {
-      const e = sourceArray[sourceOffset + 3];
-      const scale = Math.pow(2, e - 128) / 255;
-      destArray[destOffset + 0] = three__WEBPACK_IMPORTED_MODULE_0__.DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale, 65504));
-      destArray[destOffset + 1] = three__WEBPACK_IMPORTED_MODULE_0__.DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale, 65504));
-      destArray[destOffset + 2] = three__WEBPACK_IMPORTED_MODULE_0__.DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale, 65504));
-      destArray[destOffset + 3] = three__WEBPACK_IMPORTED_MODULE_0__.DataUtils.toHalfFloat(1);
-    };
-    const byteArray = new Uint8Array(buffer);
-    byteArray.pos = 0;
-    const rgbe_header_info = RGBE_ReadHeader(byteArray);
-    if (RGBE_RETURN_FAILURE !== rgbe_header_info) {
-      const w = rgbe_header_info.width, h = rgbe_header_info.height, image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h);
-      if (RGBE_RETURN_FAILURE !== image_rgba_data) {
-        let data, type;
-        let numElements;
-        switch (this.type) {
-          case three__WEBPACK_IMPORTED_MODULE_0__.FloatType:
-            numElements = image_rgba_data.length / 4;
-            const floatArray = new Float32Array(numElements * 4);
-            for (let j = 0; j < numElements; j++) {
-              RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4);
-            }
-            data = floatArray;
-            type = three__WEBPACK_IMPORTED_MODULE_0__.FloatType;
-            break;
-          case three__WEBPACK_IMPORTED_MODULE_0__.HalfFloatType:
-            numElements = image_rgba_data.length / 4;
-            const halfArray = new Uint16Array(numElements * 4);
-            for (let j = 0; j < numElements; j++) {
-              RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4);
-            }
-            data = halfArray;
-            type = three__WEBPACK_IMPORTED_MODULE_0__.HalfFloatType;
-            break;
-          default:
-            console.error("THREE.RGBELoader: unsupported type: ", this.type);
-            break;
-        }
-        return {
-          width: w,
-          height: h,
-          data,
-          header: rgbe_header_info.string,
-          gamma: rgbe_header_info.gamma,
-          exposure: rgbe_header_info.exposure,
-          type
-        };
-      }
-    }
-    return null;
-  }
-  setDataType(value) {
-    this.type = value;
-    return this;
-  }
-  load(url, onLoad, onProgress, onError) {
-    function onLoadCallback(texture, texData) {
-      switch (texture.type) {
-        case three__WEBPACK_IMPORTED_MODULE_0__.FloatType:
-        case three__WEBPACK_IMPORTED_MODULE_0__.HalfFloatType:
-          if ("colorSpace" in texture)
-            texture.colorSpace = "srgb-linear";
-          else
-            texture.encoding = 3e3;
-          texture.minFilter = three__WEBPACK_IMPORTED_MODULE_0__.LinearFilter;
-          texture.magFilter = three__WEBPACK_IMPORTED_MODULE_0__.LinearFilter;
-          texture.generateMipmaps = false;
-          texture.flipY = true;
-          break;
-      }
-      if (onLoad)
-        onLoad(texture, texData);
-    }
-    return super.load(url, onLoadCallback, onProgress, onError);
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 96272:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "a": () => (/* binding */ MeshSurfaceSampler)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-
-const _face = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Triangle();
-const _color = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3();
-class MeshSurfaceSampler {
-  constructor(mesh) {
-    let geometry = mesh.geometry;
-    if (geometry.index) {
-      console.warn("THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry.");
-      geometry = geometry.toNonIndexed();
-    }
-    this.geometry = geometry;
-    this.randomFunction = Math.random;
-    this.positionAttribute = this.geometry.getAttribute("position");
-    this.colorAttribute = this.geometry.getAttribute("color");
-    this.weightAttribute = null;
-    this.distribution = null;
-  }
-  setWeightAttribute(name) {
-    this.weightAttribute = name ? this.geometry.getAttribute(name) : null;
-    return this;
-  }
-  build() {
-    const positionAttribute = this.positionAttribute;
-    const weightAttribute = this.weightAttribute;
-    const faceWeights = new Float32Array(positionAttribute.count / 3);
-    for (let i = 0; i < positionAttribute.count; i += 3) {
-      let faceWeight = 1;
-      if (weightAttribute) {
-        faceWeight = weightAttribute.getX(i) + weightAttribute.getX(i + 1) + weightAttribute.getX(i + 2);
-      }
-      _face.a.fromBufferAttribute(positionAttribute, i);
-      _face.b.fromBufferAttribute(positionAttribute, i + 1);
-      _face.c.fromBufferAttribute(positionAttribute, i + 2);
-      faceWeight *= _face.getArea();
-      faceWeights[i / 3] = faceWeight;
-    }
-    this.distribution = new Float32Array(positionAttribute.count / 3);
-    let cumulativeTotal = 0;
-    for (let i = 0; i < faceWeights.length; i++) {
-      cumulativeTotal += faceWeights[i];
-      this.distribution[i] = cumulativeTotal;
-    }
-    return this;
-  }
-  setRandomGenerator(randomFunction) {
-    this.randomFunction = randomFunction;
-    return this;
-  }
-  sample(targetPosition, targetNormal, targetColor) {
-    const faceIndex = this.sampleFaceIndex();
-    return this.sampleFace(faceIndex, targetPosition, targetNormal, targetColor);
-  }
-  sampleFaceIndex() {
-    const cumulativeTotal = this.distribution[this.distribution.length - 1];
-    return this.binarySearch(this.randomFunction() * cumulativeTotal);
-  }
-  binarySearch(x) {
-    const dist = this.distribution;
-    let start = 0;
-    let end = dist.length - 1;
-    let index = -1;
-    while (start <= end) {
-      const mid = Math.ceil((start + end) / 2);
-      if (mid === 0 || dist[mid - 1] <= x && dist[mid] > x) {
-        index = mid;
-        break;
-      } else if (x < dist[mid]) {
-        end = mid - 1;
-      } else {
-        start = mid + 1;
-      }
-    }
-    return index;
-  }
-  sampleFace(faceIndex, targetPosition, targetNormal, targetColor) {
-    let u = this.randomFunction();
-    let v = this.randomFunction();
-    if (u + v > 1) {
-      u = 1 - u;
-      v = 1 - v;
-    }
-    _face.a.fromBufferAttribute(this.positionAttribute, faceIndex * 3);
-    _face.b.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 1);
-    _face.c.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 2);
-    targetPosition.set(0, 0, 0).addScaledVector(_face.a, u).addScaledVector(_face.b, v).addScaledVector(_face.c, 1 - (u + v));
-    if (targetNormal !== void 0) {
-      _face.getNormal(targetNormal);
-    }
-    if (targetColor !== void 0 && this.colorAttribute !== void 0) {
-      _face.a.fromBufferAttribute(this.colorAttribute, faceIndex * 3);
-      _face.b.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 1);
-      _face.c.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 2);
-      _color.set(0, 0, 0).addScaledVector(_face.a, u).addScaledVector(_face.b, v).addScaledVector(_face.c, 1 - (u + v));
-      targetColor.r = _color.x;
-      targetColor.g = _color.y;
-      targetColor.b = _color.z;
-    }
-    return this;
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 13945:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "L": () => (/* binding */ SimplexNoise)
-/* harmony export */ });
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-class SimplexNoise {
-  /**
-   * You can pass in a random number generator object if you like.
-   * It is assumed to have a random() method.
-   */
-  constructor(r = Math) {
-    __publicField(this, "grad3", [
-      [1, 1, 0],
-      [-1, 1, 0],
-      [1, -1, 0],
-      [-1, -1, 0],
-      [1, 0, 1],
-      [-1, 0, 1],
-      [1, 0, -1],
-      [-1, 0, -1],
-      [0, 1, 1],
-      [0, -1, 1],
-      [0, 1, -1],
-      [0, -1, -1]
-    ]);
-    __publicField(this, "grad4", [
-      [0, 1, 1, 1],
-      [0, 1, 1, -1],
-      [0, 1, -1, 1],
-      [0, 1, -1, -1],
-      [0, -1, 1, 1],
-      [0, -1, 1, -1],
-      [0, -1, -1, 1],
-      [0, -1, -1, -1],
-      [1, 0, 1, 1],
-      [1, 0, 1, -1],
-      [1, 0, -1, 1],
-      [1, 0, -1, -1],
-      [-1, 0, 1, 1],
-      [-1, 0, 1, -1],
-      [-1, 0, -1, 1],
-      [-1, 0, -1, -1],
-      [1, 1, 0, 1],
-      [1, 1, 0, -1],
-      [1, -1, 0, 1],
-      [1, -1, 0, -1],
-      [-1, 1, 0, 1],
-      [-1, 1, 0, -1],
-      [-1, -1, 0, 1],
-      [-1, -1, 0, -1],
-      [1, 1, 1, 0],
-      [1, 1, -1, 0],
-      [1, -1, 1, 0],
-      [1, -1, -1, 0],
-      [-1, 1, 1, 0],
-      [-1, 1, -1, 0],
-      [-1, -1, 1, 0],
-      [-1, -1, -1, 0]
-    ]);
-    __publicField(this, "p", []);
-    // To remove the need for index wrapping, double the permutation table length
-    __publicField(this, "perm", []);
-    // A lookup table to traverse the simplex around a given point in 4D.
-    // Details can be found where this table is used, in the 4D noise method.
-    __publicField(this, "simplex", [
-      [0, 1, 2, 3],
-      [0, 1, 3, 2],
-      [0, 0, 0, 0],
-      [0, 2, 3, 1],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [1, 2, 3, 0],
-      [0, 2, 1, 3],
-      [0, 0, 0, 0],
-      [0, 3, 1, 2],
-      [0, 3, 2, 1],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [1, 3, 2, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [1, 2, 0, 3],
-      [0, 0, 0, 0],
-      [1, 3, 0, 2],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [2, 3, 0, 1],
-      [2, 3, 1, 0],
-      [1, 0, 2, 3],
-      [1, 0, 3, 2],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [2, 0, 3, 1],
-      [0, 0, 0, 0],
-      [2, 1, 3, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [2, 0, 1, 3],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [3, 0, 1, 2],
-      [3, 0, 2, 1],
-      [0, 0, 0, 0],
-      [3, 1, 2, 0],
-      [2, 1, 0, 3],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [0, 0, 0, 0],
-      [3, 1, 0, 2],
-      [0, 0, 0, 0],
-      [3, 2, 0, 1],
-      [3, 2, 1, 0]
-    ]);
-    __publicField(this, "dot", (g, x, y) => {
-      return g[0] * x + g[1] * y;
-    });
-    __publicField(this, "dot3", (g, x, y, z) => {
-      return g[0] * x + g[1] * y + g[2] * z;
-    });
-    __publicField(this, "dot4", (g, x, y, z, w) => {
-      return g[0] * x + g[1] * y + g[2] * z + g[3] * w;
-    });
-    __publicField(this, "noise", (xin, yin) => {
-      let n0;
-      let n1;
-      let n2;
-      const F2 = 0.5 * (Math.sqrt(3) - 1);
-      const s = (xin + yin) * F2;
-      const i = Math.floor(xin + s);
-      const j = Math.floor(yin + s);
-      const G2 = (3 - Math.sqrt(3)) / 6;
-      const t = (i + j) * G2;
-      const X0 = i - t;
-      const Y0 = j - t;
-      const x0 = xin - X0;
-      const y0 = yin - Y0;
-      let i1 = 0;
-      let j1 = 1;
-      if (x0 > y0) {
-        i1 = 1;
-        j1 = 0;
-      }
-      const x1 = x0 - i1 + G2;
-      const y1 = y0 - j1 + G2;
-      const x2 = x0 - 1 + 2 * G2;
-      const y2 = y0 - 1 + 2 * G2;
-      const ii = i & 255;
-      const jj = j & 255;
-      const gi0 = this.perm[ii + this.perm[jj]] % 12;
-      const gi1 = this.perm[ii + i1 + this.perm[jj + j1]] % 12;
-      const gi2 = this.perm[ii + 1 + this.perm[jj + 1]] % 12;
-      let t0 = 0.5 - x0 * x0 - y0 * y0;
-      if (t0 < 0) {
-        n0 = 0;
-      } else {
-        t0 *= t0;
-        n0 = t0 * t0 * this.dot(this.grad3[gi0], x0, y0);
-      }
-      let t1 = 0.5 - x1 * x1 - y1 * y1;
-      if (t1 < 0) {
-        n1 = 0;
-      } else {
-        t1 *= t1;
-        n1 = t1 * t1 * this.dot(this.grad3[gi1], x1, y1);
-      }
-      let t2 = 0.5 - x2 * x2 - y2 * y2;
-      if (t2 < 0) {
-        n2 = 0;
-      } else {
-        t2 *= t2;
-        n2 = t2 * t2 * this.dot(this.grad3[gi2], x2, y2);
-      }
-      return 70 * (n0 + n1 + n2);
-    });
-    // 3D simplex noise
-    __publicField(this, "noise3d", (xin, yin, zin) => {
-      let n0;
-      let n1;
-      let n2;
-      let n3;
-      const F3 = 1 / 3;
-      const s = (xin + yin + zin) * F3;
-      const i = Math.floor(xin + s);
-      const j = Math.floor(yin + s);
-      const k = Math.floor(zin + s);
-      const G3 = 1 / 6;
-      const t = (i + j + k) * G3;
-      const X0 = i - t;
-      const Y0 = j - t;
-      const Z0 = k - t;
-      const x0 = xin - X0;
-      const y0 = yin - Y0;
-      const z0 = zin - Z0;
-      let i1;
-      let j1;
-      let k1;
-      let i2;
-      let j2;
-      let k2;
-      if (x0 >= y0) {
-        if (y0 >= z0) {
-          i1 = 1;
-          j1 = 0;
-          k1 = 0;
-          i2 = 1;
-          j2 = 1;
-          k2 = 0;
-        } else if (x0 >= z0) {
-          i1 = 1;
-          j1 = 0;
-          k1 = 0;
-          i2 = 1;
-          j2 = 0;
-          k2 = 1;
-        } else {
-          i1 = 0;
-          j1 = 0;
-          k1 = 1;
-          i2 = 1;
-          j2 = 0;
-          k2 = 1;
-        }
-      } else {
-        if (y0 < z0) {
-          i1 = 0;
-          j1 = 0;
-          k1 = 1;
-          i2 = 0;
-          j2 = 1;
-          k2 = 1;
-        } else if (x0 < z0) {
-          i1 = 0;
-          j1 = 1;
-          k1 = 0;
-          i2 = 0;
-          j2 = 1;
-          k2 = 1;
-        } else {
-          i1 = 0;
-          j1 = 1;
-          k1 = 0;
-          i2 = 1;
-          j2 = 1;
-          k2 = 0;
-        }
-      }
-      const x1 = x0 - i1 + G3;
-      const y1 = y0 - j1 + G3;
-      const z1 = z0 - k1 + G3;
-      const x2 = x0 - i2 + 2 * G3;
-      const y2 = y0 - j2 + 2 * G3;
-      const z2 = z0 - k2 + 2 * G3;
-      const x3 = x0 - 1 + 3 * G3;
-      const y3 = y0 - 1 + 3 * G3;
-      const z3 = z0 - 1 + 3 * G3;
-      const ii = i & 255;
-      const jj = j & 255;
-      const kk = k & 255;
-      const gi0 = this.perm[ii + this.perm[jj + this.perm[kk]]] % 12;
-      const gi1 = this.perm[ii + i1 + this.perm[jj + j1 + this.perm[kk + k1]]] % 12;
-      const gi2 = this.perm[ii + i2 + this.perm[jj + j2 + this.perm[kk + k2]]] % 12;
-      const gi3 = this.perm[ii + 1 + this.perm[jj + 1 + this.perm[kk + 1]]] % 12;
-      let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;
-      if (t0 < 0) {
-        n0 = 0;
-      } else {
-        t0 *= t0;
-        n0 = t0 * t0 * this.dot3(this.grad3[gi0], x0, y0, z0);
-      }
-      let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;
-      if (t1 < 0) {
-        n1 = 0;
-      } else {
-        t1 *= t1;
-        n1 = t1 * t1 * this.dot3(this.grad3[gi1], x1, y1, z1);
-      }
-      let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;
-      if (t2 < 0) {
-        n2 = 0;
-      } else {
-        t2 *= t2;
-        n2 = t2 * t2 * this.dot3(this.grad3[gi2], x2, y2, z2);
-      }
-      let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;
-      if (t3 < 0) {
-        n3 = 0;
-      } else {
-        t3 *= t3;
-        n3 = t3 * t3 * this.dot3(this.grad3[gi3], x3, y3, z3);
-      }
-      return 32 * (n0 + n1 + n2 + n3);
-    });
-    // 4D simplex noise
-    __publicField(this, "noise4d", (x, y, z, w) => {
-      const grad4 = this.grad4;
-      const simplex = this.simplex;
-      const perm = this.perm;
-      const F4 = (Math.sqrt(5) - 1) / 4;
-      const G4 = (5 - Math.sqrt(5)) / 20;
-      let n0;
-      let n1;
-      let n2;
-      let n3;
-      let n4;
-      const s = (x + y + z + w) * F4;
-      const i = Math.floor(x + s);
-      const j = Math.floor(y + s);
-      const k = Math.floor(z + s);
-      const l = Math.floor(w + s);
-      const t = (i + j + k + l) * G4;
-      const X0 = i - t;
-      const Y0 = j - t;
-      const Z0 = k - t;
-      const W0 = l - t;
-      const x0 = x - X0;
-      const y0 = y - Y0;
-      const z0 = z - Z0;
-      const w0 = w - W0;
-      const c1 = x0 > y0 ? 32 : 0;
-      const c2 = x0 > z0 ? 16 : 0;
-      const c3 = y0 > z0 ? 8 : 0;
-      const c4 = x0 > w0 ? 4 : 0;
-      const c5 = y0 > w0 ? 2 : 0;
-      const c6 = z0 > w0 ? 1 : 0;
-      const c = c1 + c2 + c3 + c4 + c5 + c6;
-      let i1;
-      let j1;
-      let k1;
-      let l1;
-      let i2;
-      let j2;
-      let k2;
-      let l2;
-      let i3;
-      let j3;
-      let k3;
-      let l3;
-      i1 = simplex[c][0] >= 3 ? 1 : 0;
-      j1 = simplex[c][1] >= 3 ? 1 : 0;
-      k1 = simplex[c][2] >= 3 ? 1 : 0;
-      l1 = simplex[c][3] >= 3 ? 1 : 0;
-      i2 = simplex[c][0] >= 2 ? 1 : 0;
-      j2 = simplex[c][1] >= 2 ? 1 : 0;
-      k2 = simplex[c][2] >= 2 ? 1 : 0;
-      l2 = simplex[c][3] >= 2 ? 1 : 0;
-      i3 = simplex[c][0] >= 1 ? 1 : 0;
-      j3 = simplex[c][1] >= 1 ? 1 : 0;
-      k3 = simplex[c][2] >= 1 ? 1 : 0;
-      l3 = simplex[c][3] >= 1 ? 1 : 0;
-      const x1 = x0 - i1 + G4;
-      const y1 = y0 - j1 + G4;
-      const z1 = z0 - k1 + G4;
-      const w1 = w0 - l1 + G4;
-      const x2 = x0 - i2 + 2 * G4;
-      const y2 = y0 - j2 + 2 * G4;
-      const z2 = z0 - k2 + 2 * G4;
-      const w2 = w0 - l2 + 2 * G4;
-      const x3 = x0 - i3 + 3 * G4;
-      const y3 = y0 - j3 + 3 * G4;
-      const z3 = z0 - k3 + 3 * G4;
-      const w3 = w0 - l3 + 3 * G4;
-      const x4 = x0 - 1 + 4 * G4;
-      const y4 = y0 - 1 + 4 * G4;
-      const z4 = z0 - 1 + 4 * G4;
-      const w4 = w0 - 1 + 4 * G4;
-      const ii = i & 255;
-      const jj = j & 255;
-      const kk = k & 255;
-      const ll = l & 255;
-      const gi0 = perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32;
-      const gi1 = perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32;
-      const gi2 = perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32;
-      const gi3 = perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32;
-      const gi4 = perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32;
-      let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;
-      if (t0 < 0) {
-        n0 = 0;
-      } else {
-        t0 *= t0;
-        n0 = t0 * t0 * this.dot4(grad4[gi0], x0, y0, z0, w0);
-      }
-      let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;
-      if (t1 < 0) {
-        n1 = 0;
-      } else {
-        t1 *= t1;
-        n1 = t1 * t1 * this.dot4(grad4[gi1], x1, y1, z1, w1);
-      }
-      let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;
-      if (t2 < 0) {
-        n2 = 0;
-      } else {
-        t2 *= t2;
-        n2 = t2 * t2 * this.dot4(grad4[gi2], x2, y2, z2, w2);
-      }
-      let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;
-      if (t3 < 0) {
-        n3 = 0;
-      } else {
-        t3 *= t3;
-        n3 = t3 * t3 * this.dot4(grad4[gi3], x3, y3, z3, w3);
-      }
-      let t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;
-      if (t4 < 0) {
-        n4 = 0;
-      } else {
-        t4 *= t4;
-        n4 = t4 * t4 * this.dot4(grad4[gi4], x4, y4, z4, w4);
-      }
-      return 27 * (n0 + n1 + n2 + n3 + n4);
-    });
-    for (let i = 0; i < 256; i++) {
-      this.p[i] = Math.floor(r.random() * 256);
-    }
-    for (let i = 0; i < 512; i++) {
-      this.perm[i] = this.p[i & 255];
-    }
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 53615:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "TU": () => (/* binding */ updateSplineTexture),
-/* harmony export */   "Zw": () => (/* binding */ Flow),
-/* harmony export */   "az": () => (/* binding */ getUniforms),
-/* harmony export */   "iJ": () => (/* binding */ InstancedFlow),
-/* harmony export */   "i_": () => (/* binding */ modifyShader),
-/* harmony export */   "z_": () => (/* binding */ initSplineTexture)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-const CHANNELS = 4;
-const TEXTURE_WIDTH = 1024;
-const TEXTURE_HEIGHT = 4;
-const initSplineTexture = (numberOfCurves = 1) => {
-  const dataArray = new Float32Array(TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS);
-  const dataTexture = new three__WEBPACK_IMPORTED_MODULE_0__.DataTexture(dataArray, TEXTURE_WIDTH, TEXTURE_HEIGHT * numberOfCurves, three__WEBPACK_IMPORTED_MODULE_0__.RGBAFormat, three__WEBPACK_IMPORTED_MODULE_0__.FloatType);
-  dataTexture.wrapS = three__WEBPACK_IMPORTED_MODULE_0__.RepeatWrapping;
-  dataTexture.wrapT = three__WEBPACK_IMPORTED_MODULE_0__.RepeatWrapping;
-  dataTexture.magFilter = three__WEBPACK_IMPORTED_MODULE_0__.NearestFilter;
-  dataTexture.needsUpdate = true;
-  return dataTexture;
-};
-const updateSplineTexture = (texture, splineCurve, offset = 0) => {
-  const numberOfPoints = Math.floor(TEXTURE_WIDTH * (TEXTURE_HEIGHT / 4));
-  splineCurve.arcLengthDivisions = numberOfPoints / 2;
-  splineCurve.updateArcLengths();
-  const points = splineCurve.getSpacedPoints(numberOfPoints);
-  const frenetFrames = splineCurve.computeFrenetFrames(numberOfPoints, true);
-  for (let i = 0; i < numberOfPoints; i++) {
-    const rowOffset = Math.floor(i / TEXTURE_WIDTH);
-    const rowIndex = i % TEXTURE_WIDTH;
-    let pt = points[i];
-    setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 0 + rowOffset + TEXTURE_HEIGHT * offset);
-    pt = frenetFrames.tangents[i];
-    setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 1 + rowOffset + TEXTURE_HEIGHT * offset);
-    pt = frenetFrames.normals[i];
-    setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 2 + rowOffset + TEXTURE_HEIGHT * offset);
-    pt = frenetFrames.binormals[i];
-    setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 3 + rowOffset + TEXTURE_HEIGHT * offset);
-  }
-  texture.needsUpdate = true;
-};
-const setTextureValue = (texture, index, x, y, z, o) => {
-  const image = texture.image;
-  const { data } = image;
-  const i = CHANNELS * TEXTURE_WIDTH * o;
-  data[index * CHANNELS + i + 0] = x;
-  data[index * CHANNELS + i + 1] = y;
-  data[index * CHANNELS + i + 2] = z;
-  data[index * CHANNELS + i + 3] = 1;
-};
-const getUniforms = (splineTexture) => ({
-  spineTexture: { value: splineTexture },
-  pathOffset: { type: "f", value: 0 },
-  // time of path curve
-  pathSegment: { type: "f", value: 1 },
-  // fractional length of path
-  spineOffset: { type: "f", value: 161 },
-  spineLength: { type: "f", value: 400 },
-  flow: { type: "i", value: 1 }
-});
-function modifyShader(material, uniforms, numberOfCurves = 1) {
-  if (material.__ok)
-    return;
-  material.__ok = true;
-  material.onBeforeCompile = (shader) => {
-    if (shader.__modified)
-      return;
-    shader.__modified = true;
-    Object.assign(shader.uniforms, uniforms);
-    const vertexShader = (
-      /* glsl */
-      `
-		uniform sampler2D spineTexture;
-		uniform float pathOffset;
-		uniform float pathSegment;
-		uniform float spineOffset;
-		uniform float spineLength;
-		uniform int flow;
-
-		float textureLayers = ${TEXTURE_HEIGHT * numberOfCurves}.;
-		float textureStacks = ${TEXTURE_HEIGHT / 4}.;
-
-		${shader.vertexShader}
-		`.replace("#include <beginnormal_vertex>", "").replace("#include <defaultnormal_vertex>", "").replace("#include <begin_vertex>", "").replace(
-        /void\s*main\s*\(\)\s*\{/,
-        /* glsl */
-        `
-        void main() {
-        #include <beginnormal_vertex>
-
-        vec4 worldPos = modelMatrix * vec4(position, 1.);
-
-        bool bend = flow > 0;
-        float xWeight = bend ? 0. : 1.;
-
-        #ifdef USE_INSTANCING
-        float pathOffsetFromInstanceMatrix = instanceMatrix[3][2];
-        float spineLengthFromInstanceMatrix = instanceMatrix[3][0];
-        float spinePortion = bend ? (worldPos.x + spineOffset) / spineLengthFromInstanceMatrix : 0.;
-        float mt = (spinePortion * pathSegment + pathOffset + pathOffsetFromInstanceMatrix)*textureStacks;
-        #else
-        float spinePortion = bend ? (worldPos.x + spineOffset) / spineLength : 0.;
-        float mt = (spinePortion * pathSegment + pathOffset)*textureStacks;
-        #endif
-
-        mt = mod(mt, textureStacks);
-        float rowOffset = floor(mt);
-
-        #ifdef USE_INSTANCING
-        rowOffset += instanceMatrix[3][1] * ${TEXTURE_HEIGHT}.;
-        #endif
-
-        vec3 spinePos = texture2D(spineTexture, vec2(mt, (0. + rowOffset + 0.5) / textureLayers)).xyz;
-        vec3 a =        texture2D(spineTexture, vec2(mt, (1. + rowOffset + 0.5) / textureLayers)).xyz;
-        vec3 b =        texture2D(spineTexture, vec2(mt, (2. + rowOffset + 0.5) / textureLayers)).xyz;
-        vec3 c =        texture2D(spineTexture, vec2(mt, (3. + rowOffset + 0.5) / textureLayers)).xyz;
-        mat3 basis = mat3(a, b, c);
-
-        vec3 transformed = basis
-          * vec3(worldPos.x * xWeight, worldPos.y * 1., worldPos.z * 1.)
-          + spinePos;
-
-        vec3 transformedNormal = normalMatrix * (basis * objectNormal);
-			`
-      ).replace(
-        "#include <project_vertex>",
-        /* glsl */
-        `vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );
-				gl_Position = projectionMatrix * mvPosition;`
-      )
-    );
-    shader.vertexShader = vertexShader;
-  };
-}
-class Flow {
-  /**
-   * @param {Mesh} mesh The mesh to clone and modify to bend around the curve
-   * @param {number} numberOfCurves The amount of space that should preallocated for additional curves
-   */
-  constructor(mesh, numberOfCurves = 1) {
-    __publicField(this, "curveArray");
-    __publicField(this, "curveLengthArray");
-    __publicField(this, "object3D");
-    __publicField(this, "splineTexure");
-    __publicField(this, "uniforms");
-    const obj3D = mesh.clone();
-    const splineTexure = initSplineTexture(numberOfCurves);
-    const uniforms = getUniforms(splineTexure);
-    obj3D.traverse((child) => {
-      if (child instanceof three__WEBPACK_IMPORTED_MODULE_0__.Mesh || child instanceof three__WEBPACK_IMPORTED_MODULE_0__.InstancedMesh) {
-        child.material = child.material.clone();
-        modifyShader(child.material, uniforms, numberOfCurves);
-      }
-    });
-    this.curveArray = new Array(numberOfCurves);
-    this.curveLengthArray = new Array(numberOfCurves);
-    this.object3D = obj3D;
-    this.splineTexure = splineTexure;
-    this.uniforms = uniforms;
-  }
-  updateCurve(index, curve) {
-    if (index >= this.curveArray.length)
-      throw Error("Index out of range for Flow");
-    const curveLength = curve.getLength();
-    this.uniforms.spineLength.value = curveLength;
-    this.curveLengthArray[index] = curveLength;
-    this.curveArray[index] = curve;
-    updateSplineTexture(this.splineTexure, curve, index);
-  }
-  moveAlongCurve(amount) {
-    this.uniforms.pathOffset.value += amount;
-  }
-}
-const matrix = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Matrix4();
-class InstancedFlow extends Flow {
-  /**
-   *
-   * @param {number} count The number of instanced elements
-   * @param {number} curveCount The number of curves to preallocate for
-   * @param {Geometry} geometry The geometry to use for the instanced mesh
-   * @param {Material} material The material to use for the instanced mesh
-   */
-  constructor(count, curveCount, geometry, material) {
-    const mesh = new three__WEBPACK_IMPORTED_MODULE_0__.InstancedMesh(geometry, material, count);
-    mesh.instanceMatrix.setUsage(three__WEBPACK_IMPORTED_MODULE_0__.DynamicDrawUsage);
-    mesh.frustumCulled = false;
-    super(mesh, curveCount);
-    __publicField(this, "offsets");
-    __publicField(this, "whichCurve");
-    this.offsets = new Array(count).fill(0);
-    this.whichCurve = new Array(count).fill(0);
-  }
-  /**
-   * The extra information about which curve and curve position is stored in the translation components of the matrix for the instanced objects
-   * This writes that information to the matrix and marks it as needing update.
-   *
-   * @param {number} index of the instanced element to update
-   */
-  writeChanges(index) {
-    matrix.makeTranslation(this.curveLengthArray[this.whichCurve[index]], this.whichCurve[index], this.offsets[index]);
-    this.object3D.setMatrixAt(index, matrix);
-    this.object3D.instanceMatrix.needsUpdate = true;
-  }
-  /**
-   * Move an individual element along the curve by a specific amount
-   *
-   * @param {number} index Which element to update
-   * @param {number} offset Move by how much
-   */
-  moveIndividualAlongCurve(index, offset) {
-    this.offsets[index] += offset;
-    this.writeChanges(index);
-  }
-  /**
-   * Select which curve to use for an element
-   *
-   * @param {number} index the index of the instanced element to update
-   * @param {number} curveNo the index of the curve it should use
-   */
-  setCurve(index, curveNo) {
-    if (isNaN(curveNo))
-      throw Error("curve index being set is Not a Number (NaN)");
-    this.whichCurve[index] = curveNo;
-    this.writeChanges(index);
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 48756:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "q": () => (/* binding */ Sky)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-const SkyShader = {
-  uniforms: {
-    turbidity: { value: 2 },
-    rayleigh: { value: 1 },
-    mieCoefficient: { value: 5e-3 },
-    mieDirectionalG: { value: 0.8 },
-    sunPosition: { value: /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3() },
-    up: { value: /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.Vector3(0, 1, 0) }
-  },
-  vertexShader: (
-    /* glsl */
-    `
-      uniform vec3 sunPosition;
-      uniform float rayleigh;
-      uniform float turbidity;
-      uniform float mieCoefficient;
-      uniform vec3 up;
-
-      varying vec3 vWorldPosition;
-      varying vec3 vSunDirection;
-      varying float vSunfade;
-      varying vec3 vBetaR;
-      varying vec3 vBetaM;
-      varying float vSunE;
-
-      // constants for atmospheric scattering
-      const float e = 2.71828182845904523536028747135266249775724709369995957;
-      const float pi = 3.141592653589793238462643383279502884197169;
-
-      // wavelength of used primaries, according to preetham
-      const vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );
-      // this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:
-      // (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))
-      const vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );
-
-      // mie stuff
-      // K coefficient for the primaries
-      const float v = 4.0;
-      const vec3 K = vec3( 0.686, 0.678, 0.666 );
-      // MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K
-      const vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );
-
-      // earth shadow hack
-      // cutoffAngle = pi / 1.95;
-      const float cutoffAngle = 1.6110731556870734;
-      const float steepness = 1.5;
-      const float EE = 1000.0;
-
-      float sunIntensity( float zenithAngleCos ) {
-        zenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );
-        return EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );
-      }
-
-      vec3 totalMie( float T ) {
-        float c = ( 0.2 * T ) * 10E-18;
-        return 0.434 * c * MieConst;
-      }
-
-      void main() {
-
-        vec4 worldPosition = modelMatrix * vec4( position, 1.0 );
-        vWorldPosition = worldPosition.xyz;
-
-        gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-        gl_Position.z = gl_Position.w; // set z to camera.far
-
-        vSunDirection = normalize( sunPosition );
-
-        vSunE = sunIntensity( dot( vSunDirection, up ) );
-
-        vSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );
-
-        float rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );
-
-      // extinction (absorbtion + out scattering)
-      // rayleigh coefficients
-        vBetaR = totalRayleigh * rayleighCoefficient;
-
-      // mie coefficients
-        vBetaM = totalMie( turbidity ) * mieCoefficient;
-
-      }
-    `
-  ),
-  fragmentShader: (
-    /* glsl */
-    `
-      varying vec3 vWorldPosition;
-      varying vec3 vSunDirection;
-      varying float vSunfade;
-      varying vec3 vBetaR;
-      varying vec3 vBetaM;
-      varying float vSunE;
-
-      uniform float mieDirectionalG;
-      uniform vec3 up;
-
-      const vec3 cameraPos = vec3( 0.0, 0.0, 0.0 );
-
-      // constants for atmospheric scattering
-      const float pi = 3.141592653589793238462643383279502884197169;
-
-      const float n = 1.0003; // refractive index of air
-      const float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius)
-
-      // optical length at zenith for molecules
-      const float rayleighZenithLength = 8.4E3;
-      const float mieZenithLength = 1.25E3;
-      // 66 arc seconds -> degrees, and the cosine of that
-      const float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;
-
-      // 3.0 / ( 16.0 * pi )
-      const float THREE_OVER_SIXTEENPI = 0.05968310365946075;
-      // 1.0 / ( 4.0 * pi )
-      const float ONE_OVER_FOURPI = 0.07957747154594767;
-
-      float rayleighPhase( float cosTheta ) {
-        return THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );
-      }
-
-      float hgPhase( float cosTheta, float g ) {
-        float g2 = pow( g, 2.0 );
-        float inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );
-        return ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );
-      }
-
-      void main() {
-
-        vec3 direction = normalize( vWorldPosition - cameraPos );
-
-      // optical length
-      // cutoff angle at 90 to avoid singularity in next formula.
-        float zenithAngle = acos( max( 0.0, dot( up, direction ) ) );
-        float inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );
-        float sR = rayleighZenithLength * inverse;
-        float sM = mieZenithLength * inverse;
-
-      // combined extinction factor
-        vec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );
-
-      // in scattering
-        float cosTheta = dot( direction, vSunDirection );
-
-        float rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );
-        vec3 betaRTheta = vBetaR * rPhase;
-
-        float mPhase = hgPhase( cosTheta, mieDirectionalG );
-        vec3 betaMTheta = vBetaM * mPhase;
-
-        vec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );
-        Lin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );
-
-      // nightsky
-        float theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2]
-        float phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2]
-        vec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );
-        vec3 L0 = vec3( 0.1 ) * Fex;
-
-      // composition + solar disc
-        float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );
-        L0 += ( vSunE * 19000.0 * Fex ) * sundisk;
-
-        vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );
-
-        vec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );
-
-        gl_FragColor = vec4( retColor, 1.0 );
-
-      #include <tonemapping_fragment>
-      #include <encodings_fragment>
-
-      }
-    `
-  )
-};
-const material = /* @__PURE__ */ new three__WEBPACK_IMPORTED_MODULE_0__.ShaderMaterial({
-  name: "SkyShader",
-  fragmentShader: SkyShader.fragmentShader,
-  vertexShader: SkyShader.vertexShader,
-  uniforms: /* @__PURE__ */ three__WEBPACK_IMPORTED_MODULE_0__.UniformsUtils.clone(SkyShader.uniforms),
-  side: three__WEBPACK_IMPORTED_MODULE_0__.BackSide,
-  depthWrite: false
-});
-class Sky extends three__WEBPACK_IMPORTED_MODULE_0__.Mesh {
-  constructor() {
-    super(new three__WEBPACK_IMPORTED_MODULE_0__.BoxGeometry(1, 1, 1), material);
-  }
-}
-__publicField(Sky, "SkyShader", SkyShader);
-__publicField(Sky, "material", material);
-
-
-
-/***/ }),
-
-/***/ 8064:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "x": () => (/* binding */ EffectComposer)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-/* harmony import */ var _shaders_CopyShader_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(84360);
-/* harmony import */ var _ShaderPass_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(6073);
-/* harmony import */ var _MaskPass_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(14394);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-
-
-class EffectComposer {
-  constructor(renderer, renderTarget) {
-    __publicField(this, "renderer");
-    __publicField(this, "_pixelRatio");
-    __publicField(this, "_width");
-    __publicField(this, "_height");
-    __publicField(this, "renderTarget1");
-    __publicField(this, "renderTarget2");
-    __publicField(this, "writeBuffer");
-    __publicField(this, "readBuffer");
-    __publicField(this, "renderToScreen");
-    __publicField(this, "passes", []);
-    __publicField(this, "copyPass");
-    __publicField(this, "clock");
-    this.renderer = renderer;
-    if (renderTarget === void 0) {
-      const parameters = {
-        minFilter: three__WEBPACK_IMPORTED_MODULE_0__.LinearFilter,
-        magFilter: three__WEBPACK_IMPORTED_MODULE_0__.LinearFilter,
-        format: three__WEBPACK_IMPORTED_MODULE_0__.RGBAFormat
-      };
-      const size = renderer.getSize(new three__WEBPACK_IMPORTED_MODULE_0__.Vector2());
-      this._pixelRatio = renderer.getPixelRatio();
-      this._width = size.width;
-      this._height = size.height;
-      renderTarget = new three__WEBPACK_IMPORTED_MODULE_0__.WebGLRenderTarget(
-        this._width * this._pixelRatio,
-        this._height * this._pixelRatio,
-        parameters
-      );
-      renderTarget.texture.name = "EffectComposer.rt1";
-    } else {
-      this._pixelRatio = 1;
-      this._width = renderTarget.width;
-      this._height = renderTarget.height;
-    }
-    this.renderTarget1 = renderTarget;
-    this.renderTarget2 = renderTarget.clone();
-    this.renderTarget2.texture.name = "EffectComposer.rt2";
-    this.writeBuffer = this.renderTarget1;
-    this.readBuffer = this.renderTarget2;
-    this.renderToScreen = true;
-    if (_shaders_CopyShader_js__WEBPACK_IMPORTED_MODULE_1__/* .CopyShader */ .C === void 0) {
-      console.error("THREE.EffectComposer relies on CopyShader");
-    }
-    if (_ShaderPass_js__WEBPACK_IMPORTED_MODULE_2__/* .ShaderPass */ .T === void 0) {
-      console.error("THREE.EffectComposer relies on ShaderPass");
-    }
-    this.copyPass = new _ShaderPass_js__WEBPACK_IMPORTED_MODULE_2__/* .ShaderPass */ .T(_shaders_CopyShader_js__WEBPACK_IMPORTED_MODULE_1__/* .CopyShader */ .C);
-    this.clock = new three__WEBPACK_IMPORTED_MODULE_0__.Clock();
-  }
-  swapBuffers() {
-    const tmp = this.readBuffer;
-    this.readBuffer = this.writeBuffer;
-    this.writeBuffer = tmp;
-  }
-  addPass(pass) {
-    this.passes.push(pass);
-    pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);
-  }
-  insertPass(pass, index) {
-    this.passes.splice(index, 0, pass);
-    pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);
-  }
-  removePass(pass) {
-    const index = this.passes.indexOf(pass);
-    if (index !== -1) {
-      this.passes.splice(index, 1);
-    }
-  }
-  isLastEnabledPass(passIndex) {
-    for (let i = passIndex + 1; i < this.passes.length; i++) {
-      if (this.passes[i].enabled) {
-        return false;
-      }
-    }
-    return true;
-  }
-  render(deltaTime) {
-    if (deltaTime === void 0) {
-      deltaTime = this.clock.getDelta();
-    }
-    const currentRenderTarget = this.renderer.getRenderTarget();
-    let maskActive = false;
-    const il = this.passes.length;
-    for (let i = 0; i < il; i++) {
-      const pass = this.passes[i];
-      if (pass.enabled === false)
-        continue;
-      pass.renderToScreen = this.renderToScreen && this.isLastEnabledPass(i);
-      pass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive);
-      if (pass.needsSwap) {
-        if (maskActive) {
-          const context = this.renderer.getContext();
-          const stencil = this.renderer.state.buffers.stencil;
-          stencil.setFunc(context.NOTEQUAL, 1, 4294967295);
-          this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime);
-          stencil.setFunc(context.EQUAL, 1, 4294967295);
-        }
-        this.swapBuffers();
-      }
-      if (_MaskPass_js__WEBPACK_IMPORTED_MODULE_3__/* .MaskPass */ .F !== void 0) {
-        if (pass instanceof _MaskPass_js__WEBPACK_IMPORTED_MODULE_3__/* .MaskPass */ .F) {
-          maskActive = true;
-        } else if (pass instanceof _MaskPass_js__WEBPACK_IMPORTED_MODULE_3__/* .ClearMaskPass */ .M) {
-          maskActive = false;
-        }
-      }
-    }
-    this.renderer.setRenderTarget(currentRenderTarget);
-  }
-  reset(renderTarget) {
-    if (renderTarget === void 0) {
-      const size = this.renderer.getSize(new three__WEBPACK_IMPORTED_MODULE_0__.Vector2());
-      this._pixelRatio = this.renderer.getPixelRatio();
-      this._width = size.width;
-      this._height = size.height;
-      renderTarget = this.renderTarget1.clone();
-      renderTarget.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);
-    }
-    this.renderTarget1.dispose();
-    this.renderTarget2.dispose();
-    this.renderTarget1 = renderTarget;
-    this.renderTarget2 = renderTarget.clone();
-    this.writeBuffer = this.renderTarget1;
-    this.readBuffer = this.renderTarget2;
-  }
-  setSize(width, height) {
-    this._width = width;
-    this._height = height;
-    const effectiveWidth = this._width * this._pixelRatio;
-    const effectiveHeight = this._height * this._pixelRatio;
-    this.renderTarget1.setSize(effectiveWidth, effectiveHeight);
-    this.renderTarget2.setSize(effectiveWidth, effectiveHeight);
-    for (let i = 0; i < this.passes.length; i++) {
-      this.passes[i].setSize(effectiveWidth, effectiveHeight);
-    }
-  }
-  setPixelRatio(pixelRatio) {
-    this._pixelRatio = pixelRatio;
-    this.setSize(this._width, this._height);
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 14394:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "F": () => (/* binding */ MaskPass),
-/* harmony export */   "M": () => (/* binding */ ClearMaskPass)
-/* harmony export */ });
-/* harmony import */ var _Pass_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(87628);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-class MaskPass extends _Pass_js__WEBPACK_IMPORTED_MODULE_0__/* .Pass */ .w {
-  constructor(scene, camera) {
-    super();
-    __publicField(this, "scene");
-    __publicField(this, "camera");
-    __publicField(this, "inverse");
-    this.scene = scene;
-    this.camera = camera;
-    this.clear = true;
-    this.needsSwap = false;
-    this.inverse = false;
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    const context = renderer.getContext();
-    const state = renderer.state;
-    state.buffers.color.setMask(false);
-    state.buffers.depth.setMask(false);
-    state.buffers.color.setLocked(true);
-    state.buffers.depth.setLocked(true);
-    let writeValue, clearValue;
-    if (this.inverse) {
-      writeValue = 0;
-      clearValue = 1;
-    } else {
-      writeValue = 1;
-      clearValue = 0;
-    }
-    state.buffers.stencil.setTest(true);
-    state.buffers.stencil.setOp(context.REPLACE, context.REPLACE, context.REPLACE);
-    state.buffers.stencil.setFunc(context.ALWAYS, writeValue, 4294967295);
-    state.buffers.stencil.setClear(clearValue);
-    state.buffers.stencil.setLocked(true);
-    renderer.setRenderTarget(readBuffer);
-    if (this.clear)
-      renderer.clear();
-    renderer.render(this.scene, this.camera);
-    renderer.setRenderTarget(writeBuffer);
-    if (this.clear)
-      renderer.clear();
-    renderer.render(this.scene, this.camera);
-    state.buffers.color.setLocked(false);
-    state.buffers.depth.setLocked(false);
-    state.buffers.stencil.setLocked(false);
-    state.buffers.stencil.setFunc(context.EQUAL, 1, 4294967295);
-    state.buffers.stencil.setOp(context.KEEP, context.KEEP, context.KEEP);
-    state.buffers.stencil.setLocked(true);
-  }
-}
-class ClearMaskPass extends _Pass_js__WEBPACK_IMPORTED_MODULE_0__/* .Pass */ .w {
-  constructor() {
-    super();
-    this.needsSwap = false;
-  }
-  render(renderer) {
-    renderer.state.buffers.stencil.setLocked(false);
-    renderer.state.buffers.stencil.setTest(false);
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 87628:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "T": () => (/* binding */ FullScreenQuad),
-/* harmony export */   "w": () => (/* binding */ Pass)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(99477);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-class Pass {
-  constructor() {
-    // if set to true, the pass is processed by the composer
-    __publicField(this, "enabled", true);
-    // if set to true, the pass indicates to swap read and write buffer after rendering
-    __publicField(this, "needsSwap", true);
-    // if set to true, the pass clears its buffer before rendering
-    __publicField(this, "clear", false);
-    // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.
-    __publicField(this, "renderToScreen", false);
-  }
-  setSize(width, height) {
-  }
-  render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) {
-    console.error("THREE.Pass: .render() must be implemented in derived pass.");
-  }
-}
-class FullScreenQuad {
-  constructor(material) {
-    __publicField(this, "camera", new three__WEBPACK_IMPORTED_MODULE_0__.OrthographicCamera(-1, 1, 1, -1, 0, 1));
-    __publicField(this, "geometry", new three__WEBPACK_IMPORTED_MODULE_0__.PlaneGeometry(2, 2));
-    __publicField(this, "mesh");
-    this.mesh = new three__WEBPACK_IMPORTED_MODULE_0__.Mesh(this.geometry, material);
-  }
-  get material() {
-    return this.mesh.material;
-  }
-  set material(value) {
-    this.mesh.material = value;
-  }
-  dispose() {
-    this.mesh.geometry.dispose();
-  }
-  render(renderer) {
-    renderer.render(this.mesh, this.camera);
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 48197:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "C": () => (/* binding */ RenderPass)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99477);
-/* harmony import */ var _Pass_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(87628);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-class RenderPass extends _Pass_js__WEBPACK_IMPORTED_MODULE_0__/* .Pass */ .w {
-  constructor(scene, camera, overrideMaterial, clearColor, clearAlpha = 0) {
-    super();
-    __publicField(this, "scene");
-    __publicField(this, "camera");
-    __publicField(this, "overrideMaterial");
-    __publicField(this, "clearColor");
-    __publicField(this, "clearAlpha");
-    __publicField(this, "clearDepth", false);
-    __publicField(this, "_oldClearColor", new three__WEBPACK_IMPORTED_MODULE_1__.Color());
-    this.scene = scene;
-    this.camera = camera;
-    this.overrideMaterial = overrideMaterial;
-    this.clearColor = clearColor;
-    this.clearAlpha = clearAlpha;
-    this.clear = true;
-    this.needsSwap = false;
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    let oldAutoClear = renderer.autoClear;
-    renderer.autoClear = false;
-    let oldClearAlpha;
-    let oldOverrideMaterial = null;
-    if (this.overrideMaterial !== void 0) {
-      oldOverrideMaterial = this.scene.overrideMaterial;
-      this.scene.overrideMaterial = this.overrideMaterial;
-    }
-    if (this.clearColor) {
-      renderer.getClearColor(this._oldClearColor);
-      oldClearAlpha = renderer.getClearAlpha();
-      renderer.setClearColor(this.clearColor, this.clearAlpha);
-    }
-    if (this.clearDepth) {
-      renderer.clearDepth();
-    }
-    renderer.setRenderTarget(this.renderToScreen ? null : readBuffer);
-    if (this.clear)
-      renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil);
-    renderer.render(this.scene, this.camera);
-    if (this.clearColor) {
-      renderer.setClearColor(this._oldClearColor, oldClearAlpha);
-    }
-    if (this.overrideMaterial !== void 0) {
-      this.scene.overrideMaterial = oldOverrideMaterial;
-    }
-    renderer.autoClear = oldAutoClear;
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 6073:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "T": () => (/* binding */ ShaderPass)
-/* harmony export */ });
-/* harmony import */ var three__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(99477);
-/* harmony import */ var _Pass_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(87628);
-var __defProp = Object.defineProperty;
-var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
-var __publicField = (obj, key, value) => {
-  __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
-  return value;
-};
-
-
-class ShaderPass extends _Pass_js__WEBPACK_IMPORTED_MODULE_0__/* .Pass */ .w {
-  constructor(shader, textureID = "tDiffuse") {
-    super();
-    __publicField(this, "textureID");
-    __publicField(this, "uniforms");
-    __publicField(this, "material");
-    __publicField(this, "fsQuad");
-    this.textureID = textureID;
-    if (shader instanceof three__WEBPACK_IMPORTED_MODULE_1__.ShaderMaterial) {
-      this.uniforms = shader.uniforms;
-      this.material = shader;
-    } else {
-      this.uniforms = three__WEBPACK_IMPORTED_MODULE_1__.UniformsUtils.clone(shader.uniforms);
-      this.material = new three__WEBPACK_IMPORTED_MODULE_1__.ShaderMaterial({
-        defines: Object.assign({}, shader.defines),
-        uniforms: this.uniforms,
-        vertexShader: shader.vertexShader,
-        fragmentShader: shader.fragmentShader
-      });
-    }
-    this.fsQuad = new _Pass_js__WEBPACK_IMPORTED_MODULE_0__/* .FullScreenQuad */ .T(this.material);
-  }
-  render(renderer, writeBuffer, readBuffer) {
-    if (this.uniforms[this.textureID]) {
-      this.uniforms[this.textureID].value = readBuffer.texture;
-    }
-    this.fsQuad.material = this.material;
-    if (this.renderToScreen) {
-      renderer.setRenderTarget(null);
-      this.fsQuad.render(renderer);
-    } else {
-      renderer.setRenderTarget(writeBuffer);
-      if (this.clear)
-        renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil);
-      this.fsQuad.render(renderer);
-    }
-  }
-}
-
-
-
-/***/ }),
-
-/***/ 84360:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "C": () => (/* binding */ CopyShader)
-/* harmony export */ });
-const CopyShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    opacity: { value: 1 }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform float opacity;",
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 texel = texture2D( tDiffuse, vUv );",
-    "	gl_FragColor = opacity * texel;",
-    "}"
-  ].join("\n")
-};
-
-
-
-/***/ }),
-
-/***/ 60809:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Y": () => (/* binding */ GammaCorrectionShader)
-/* harmony export */ });
-const GammaCorrectionShader = {
-  uniforms: {
-    tDiffuse: { value: null }
-  },
-  vertexShader: [
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vUv = uv;",
-    "	gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );",
-    "}"
-  ].join("\n"),
-  fragmentShader: [
-    "uniform sampler2D tDiffuse;",
-    "varying vec2 vUv;",
-    "void main() {",
-    "	vec4 tex = texture2D( tDiffuse, vUv );",
-    "	gl_FragColor = LinearTosRGB( tex );",
-    "}"
-  ].join("\n")
-};
-
-
-
-/***/ }),
-
-/***/ 78466:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "P": () => (/* binding */ HorizontalBlurShader)
-/* harmony export */ });
-const HorizontalBlurShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    h: { value: 1 / 512 }
-  },
-  vertexShader: (
-    /* glsl */
-    `
-      varying vec2 vUv;
-
-      void main() {
-
-        vUv = uv;
-        gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-
-      }
-  `
-  ),
-  fragmentShader: (
-    /* glsl */
-    `
-    uniform sampler2D tDiffuse;
-    uniform float h;
-
-    varying vec2 vUv;
-
-    void main() {
-
-    	vec4 sum = vec4( 0.0 );
-
-    	sum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * h, vUv.y ) ) * 0.051;
-    	sum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * h, vUv.y ) ) * 0.0918;
-    	sum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * h, vUv.y ) ) * 0.12245;
-    	sum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * h, vUv.y ) ) * 0.1531;
-    	sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;
-    	sum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * h, vUv.y ) ) * 0.1531;
-    	sum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * h, vUv.y ) ) * 0.12245;
-    	sum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * h, vUv.y ) ) * 0.0918;
-    	sum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * h, vUv.y ) ) * 0.051;
-
-    	gl_FragColor = sum;
-
-    }
-  `
-  )
-};
-
-
-
-/***/ }),
-
-/***/ 37312:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (/* binding */ VerticalBlurShader)
-/* harmony export */ });
-const VerticalBlurShader = {
-  uniforms: {
-    tDiffuse: { value: null },
-    v: { value: 1 / 512 }
-  },
-  vertexShader: (
-    /* glsl */
-    `
-    varying vec2 vUv;
-
-    void main() {
-
-      vUv = uv;
-      gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
-
-    }
-  `
-  ),
-  fragmentShader: (
-    /* glsl */
-    `
-
-  uniform sampler2D tDiffuse;
-  uniform float v;
-
-  varying vec2 vUv;
-
-  void main() {
-
-    vec4 sum = vec4( 0.0 );
-
-    sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051;
-    sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918;
-    sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * v ) ) * 0.12245;
-    sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * v ) ) * 0.1531;
-    sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;
-    sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * v ) ) * 0.1531;
-    sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * v ) ) * 0.12245;
-    sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * v ) ) * 0.0918;
-    sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * v ) ) * 0.051;
-
-    gl_FragColor = sum;
-
-  }
-  `
-  )
-};
-
-
-
-/***/ }),
-
-/***/ 84975:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-// ESM COMPAT FLAG
-__webpack_require__.r(__webpack_exports__);
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "computeMorphedAttributes": () => (/* binding */ computeMorphedAttributes),
-  "estimateBytesUsed": () => (/* binding */ estimateBytesUsed),
-  "interleaveAttributes": () => (/* binding */ interleaveAttributes),
-  "mergeBufferAttributes": () => (/* binding */ mergeBufferAttributes),
-  "mergeBufferGeometries": () => (/* binding */ mergeBufferGeometries),
-  "mergeVertices": () => (/* binding */ mergeVertices),
-  "toCreasedNormals": () => (/* binding */ toCreasedNormals),
-  "toTrianglesDrawMode": () => (/* binding */ toTrianglesDrawMode)
-});
-
-// EXTERNAL MODULE: ./node_modules/three/build/three.module.js
-var three_module = __webpack_require__(99477);
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/types/helpers.js
-const getWithKey = (obj, key) => obj[key];
-
-
-;// CONCATENATED MODULE: ./node_modules/three-stdlib/utils/BufferGeometryUtils.js
-
-
-const mergeBufferGeometries = (geometries, useGroups) => {
-  const isIndexed = geometries[0].index !== null;
-  const attributesUsed = new Set(Object.keys(geometries[0].attributes));
-  const morphAttributesUsed = new Set(Object.keys(geometries[0].morphAttributes));
-  const attributes = {};
-  const morphAttributes = {};
-  const morphTargetsRelative = geometries[0].morphTargetsRelative;
-  const mergedGeometry = new three_module.BufferGeometry();
-  let offset = 0;
-  geometries.forEach((geom, i) => {
-    let attributesCount = 0;
-    if (isIndexed !== (geom.index !== null)) {
-      console.error(
-        "THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index " + i + ". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."
-      );
-      return null;
-    }
-    for (let name in geom.attributes) {
-      if (!attributesUsed.has(name)) {
-        console.error(
-          "THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index " + i + '. All geometries must have compatible attributes; make sure "' + name + '" attribute exists among all geometries, or in none of them.'
-        );
-        return null;
-      }
-      if (attributes[name] === void 0) {
-        attributes[name] = [];
-      }
-      attributes[name].push(geom.attributes[name]);
-      attributesCount++;
-    }
-    if (attributesCount !== attributesUsed.size) {
-      console.error(
-        "THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index " + i + ". Make sure all geometries have the same number of attributes."
-      );
-      return null;
-    }
-    if (morphTargetsRelative !== geom.morphTargetsRelative) {
-      console.error(
-        "THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index " + i + ". .morphTargetsRelative must be consistent throughout all geometries."
-      );
-      return null;
-    }
-    for (let name in geom.morphAttributes) {
-      if (!morphAttributesUsed.has(name)) {
-        console.error(
-          "THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index " + i + ".  .morphAttributes must be consistent throughout all geometries."
-        );
-        return null;
-      }
-      if (morphAttributes[name] === void 0)
-        morphAttributes[name] = [];
-      morphAttributes[name].push(geom.morphAttributes[name]);
-    }
-    mergedGeometry.userData.mergedUserData = mergedGeometry.userData.mergedUserData || [];
-    mergedGeometry.userData.mergedUserData.push(geom.userData);
-    if (useGroups) {
-      let count;
-      if (geom.index) {
-        count = geom.index.count;
-      } else if (geom.attributes.position !== void 0) {
-        count = geom.attributes.position.count;
-      } else {
-        console.error(
-          "THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index " + i + ". The geometry must have either an index or a position attribute"
-        );
-        return null;
-      }
-      mergedGeometry.addGroup(offset, count, i);
-      offset += count;
-    }
-  });
-  if (isIndexed) {
-    let indexOffset = 0;
-    const mergedIndex = [];
-    geometries.forEach((geom) => {
-      const index = geom.index;
-      for (let j = 0; j < index.count; ++j) {
-        mergedIndex.push(index.getX(j) + indexOffset);
-      }
-      indexOffset += geom.attributes.position.count;
-    });
-    mergedGeometry.setIndex(mergedIndex);
-  }
-  for (let name in attributes) {
-    const mergedAttribute = mergeBufferAttributes(attributes[name]);
-    if (!mergedAttribute) {
-      console.error(
-        "THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the " + name + " attribute."
-      );
-      return null;
-    }
-    mergedGeometry.setAttribute(name, mergedAttribute);
-  }
-  for (let name in morphAttributes) {
-    const numMorphTargets = morphAttributes[name][0].length;
-    if (numMorphTargets === 0)
-      break;
-    mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};
-    mergedGeometry.morphAttributes[name] = [];
-    for (let i = 0; i < numMorphTargets; ++i) {
-      const morphAttributesToMerge = [];
-      for (let j = 0; j < morphAttributes[name].length; ++j) {
-        morphAttributesToMerge.push(morphAttributes[name][j][i]);
-      }
-      const mergedMorphAttribute = mergeBufferAttributes(morphAttributesToMerge);
-      if (!mergedMorphAttribute) {
-        console.error(
-          "THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the " + name + " morphAttribute."
-        );
-        return null;
-      }
-      mergedGeometry.morphAttributes[name].push(mergedMorphAttribute);
-    }
-  }
-  return mergedGeometry;
-};
-const mergeBufferAttributes = (attributes) => {
-  let TypedArray = void 0;
-  let itemSize = void 0;
-  let normalized = void 0;
-  let arrayLength = 0;
-  attributes.forEach((attr) => {
-    if (TypedArray === void 0) {
-      TypedArray = attr.array.constructor;
-    }
-    if (TypedArray !== attr.array.constructor) {
-      console.error(
-        "THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."
-      );
-      return null;
-    }
-    if (itemSize === void 0)
-      itemSize = attr.itemSize;
-    if (itemSize !== attr.itemSize) {
-      console.error(
-        "THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."
-      );
-      return null;
-    }
-    if (normalized === void 0)
-      normalized = attr.normalized;
-    if (normalized !== attr.normalized) {
-      console.error(
-        "THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."
-      );
-      return null;
-    }
-    arrayLength += attr.array.length;
-  });
-  if (TypedArray && itemSize) {
-    const array = new TypedArray(arrayLength);
-    let offset = 0;
-    attributes.forEach((attr) => {
-      array.set(attr.array, offset);
-      offset += attr.array.length;
-    });
-    return new three_module.BufferAttribute(array, itemSize, normalized);
-  }
-};
-const interleaveAttributes = (attributes) => {
-  let TypedArray = void 0;
-  let arrayLength = 0;
-  let stride = 0;
-  for (let i = 0, l = attributes.length; i < l; ++i) {
-    const attribute = attributes[i];
-    if (TypedArray === void 0)
-      TypedArray = attribute.array.constructor;
-    if (TypedArray !== attribute.array.constructor) {
-      console.error("AttributeBuffers of different types cannot be interleaved");
-      return null;
-    }
-    arrayLength += attribute.array.length;
-    stride += attribute.itemSize;
-  }
-  const interleavedBuffer = new three_module.InterleavedBuffer(new TypedArray(arrayLength), stride);
-  let offset = 0;
-  const res = [];
-  const getters = ["getX", "getY", "getZ", "getW"];
-  const setters = ["setX", "setY", "setZ", "setW"];
-  for (let j = 0, l = attributes.length; j < l; j++) {
-    const attribute = attributes[j];
-    const itemSize = attribute.itemSize;
-    const count = attribute.count;
-    const iba = new three_module.InterleavedBufferAttribute(interleavedBuffer, itemSize, offset, attribute.normalized);
-    res.push(iba);
-    offset += itemSize;
-    for (let c = 0; c < count; c++) {
-      for (let k = 0; k < itemSize; k++) {
-        const set = getWithKey(iba, setters[k]);
-        const get = getWithKey(attribute, getters[k]);
-        set(c, get(c));
-      }
-    }
-  }
-  return res;
-};
-function estimateBytesUsed(geometry) {
-  let mem = 0;
-  for (let name in geometry.attributes) {
-    const attr = geometry.getAttribute(name);
-    mem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;
-  }
-  const indices = geometry.getIndex();
-  mem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;
-  return mem;
-}
-function mergeVertices(geometry, tolerance = 1e-4) {
-  tolerance = Math.max(tolerance, Number.EPSILON);
-  const hashToIndex = {};
-  const indices = geometry.getIndex();
-  const positions = geometry.getAttribute("position");
-  const vertexCount = indices ? indices.count : positions.count;
-  let nextIndex = 0;
-  const attributeNames = Object.keys(geometry.attributes);
-  const attrArrays = {};
-  const morphAttrsArrays = {};
-  const newIndices = [];
-  const getters = ["getX", "getY", "getZ", "getW"];
-  for (let i = 0, l = attributeNames.length; i < l; i++) {
-    const name = attributeNames[i];
-    attrArrays[name] = [];
-    const morphAttr = geometry.morphAttributes[name];
-    if (morphAttr) {
-      morphAttrsArrays[name] = new Array(morphAttr.length).fill(0).map(() => []);
-    }
-  }
-  const decimalShift = Math.log10(1 / tolerance);
-  const shiftMultiplier = Math.pow(10, decimalShift);
-  for (let i = 0; i < vertexCount; i++) {
-    const index = indices ? indices.getX(i) : i;
-    let hash = "";
-    for (let j = 0, l = attributeNames.length; j < l; j++) {
-      const name = attributeNames[j];
-      const attribute = geometry.getAttribute(name);
-      const itemSize = attribute.itemSize;
-      for (let k = 0; k < itemSize; k++) {
-        hash += `${~~(attribute[getters[k]](index) * shiftMultiplier)},`;
-      }
-    }
-    if (hash in hashToIndex) {
-      newIndices.push(hashToIndex[hash]);
-    } else {
-      for (let j = 0, l = attributeNames.length; j < l; j++) {
-        const name = attributeNames[j];
-        const attribute = geometry.getAttribute(name);
-        const morphAttr = geometry.morphAttributes[name];
-        const itemSize = attribute.itemSize;
-        const newarray = attrArrays[name];
-        const newMorphArrays = morphAttrsArrays[name];
-        for (let k = 0; k < itemSize; k++) {
-          const getterFunc = getters[k];
-          newarray.push(attribute[getterFunc](index));
-          if (morphAttr) {
-            for (let m = 0, ml = morphAttr.length; m < ml; m++) {
-              newMorphArrays[m].push(morphAttr[m][getterFunc](index));
-            }
-          }
-        }
-      }
-      hashToIndex[hash] = nextIndex;
-      newIndices.push(nextIndex);
-      nextIndex++;
-    }
-  }
-  const result = geometry.clone();
-  for (let i = 0, l = attributeNames.length; i < l; i++) {
-    const name = attributeNames[i];
-    const oldAttribute = geometry.getAttribute(name);
-    const buffer = new oldAttribute.array.constructor(attrArrays[name]);
-    const attribute = new three_module.BufferAttribute(buffer, oldAttribute.itemSize, oldAttribute.normalized);
-    result.setAttribute(name, attribute);
-    if (name in morphAttrsArrays) {
-      for (let j = 0; j < morphAttrsArrays[name].length; j++) {
-        const oldMorphAttribute = geometry.morphAttributes[name][j];
-        const buffer2 = new oldMorphAttribute.array.constructor(morphAttrsArrays[name][j]);
-        const morphAttribute = new three_module.BufferAttribute(buffer2, oldMorphAttribute.itemSize, oldMorphAttribute.normalized);
-        result.morphAttributes[name][j] = morphAttribute;
-      }
-    }
-  }
-  result.setIndex(newIndices);
-  return result;
-}
-function toTrianglesDrawMode(geometry, drawMode) {
-  if (drawMode === three_module.TrianglesDrawMode) {
-    console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.");
-    return geometry;
-  }
-  if (drawMode === three_module.TriangleFanDrawMode || drawMode === three_module.TriangleStripDrawMode) {
-    let index = geometry.getIndex();
-    if (index === null) {
-      const indices = [];
-      const position = geometry.getAttribute("position");
-      if (position !== void 0) {
-        for (let i = 0; i < position.count; i++) {
-          indices.push(i);
-        }
-        geometry.setIndex(indices);
-        index = geometry.getIndex();
-      } else {
-        console.error(
-          "THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."
-        );
-        return geometry;
-      }
-    }
-    const numberOfTriangles = index.count - 2;
-    const newIndices = [];
-    if (index) {
-      if (drawMode === three_module.TriangleFanDrawMode) {
-        for (let i = 1; i <= numberOfTriangles; i++) {
-          newIndices.push(index.getX(0));
-          newIndices.push(index.getX(i));
-          newIndices.push(index.getX(i + 1));
-        }
-      } else {
-        for (let i = 0; i < numberOfTriangles; i++) {
-          if (i % 2 === 0) {
-            newIndices.push(index.getX(i));
-            newIndices.push(index.getX(i + 1));
-            newIndices.push(index.getX(i + 2));
-          } else {
-            newIndices.push(index.getX(i + 2));
-            newIndices.push(index.getX(i + 1));
-            newIndices.push(index.getX(i));
-          }
-        }
-      }
-    }
-    if (newIndices.length / 3 !== numberOfTriangles) {
-      console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.");
-    }
-    const newGeometry = geometry.clone();
-    newGeometry.setIndex(newIndices);
-    newGeometry.clearGroups();
-    return newGeometry;
-  } else {
-    console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", drawMode);
-    return geometry;
-  }
-}
-function computeMorphedAttributes(object) {
-  if (object.geometry.isBufferGeometry !== true) {
-    console.error("THREE.BufferGeometryUtils: Geometry is not of type BufferGeometry.");
-    return null;
-  }
-  const _vA = new three_module.Vector3();
-  const _vB = new three_module.Vector3();
-  const _vC = new three_module.Vector3();
-  const _tempA = new three_module.Vector3();
-  const _tempB = new three_module.Vector3();
-  const _tempC = new three_module.Vector3();
-  const _morphA = new three_module.Vector3();
-  const _morphB = new three_module.Vector3();
-  const _morphC = new three_module.Vector3();
-  function _calculateMorphedAttributeData(object2, material2, attribute, morphAttribute, morphTargetsRelative2, a2, b2, c2, modifiedAttributeArray) {
-    _vA.fromBufferAttribute(attribute, a2);
-    _vB.fromBufferAttribute(attribute, b2);
-    _vC.fromBufferAttribute(attribute, c2);
-    const morphInfluences = object2.morphTargetInfluences;
-    if (
-      // @ts-ignore
-      material2.morphTargets && morphAttribute && morphInfluences
-    ) {
-      _morphA.set(0, 0, 0);
-      _morphB.set(0, 0, 0);
-      _morphC.set(0, 0, 0);
-      for (let i2 = 0, il2 = morphAttribute.length; i2 < il2; i2++) {
-        const influence = morphInfluences[i2];
-        const morph = morphAttribute[i2];
-        if (influence === 0)
-          continue;
-        _tempA.fromBufferAttribute(morph, a2);
-        _tempB.fromBufferAttribute(morph, b2);
-        _tempC.fromBufferAttribute(morph, c2);
-        if (morphTargetsRelative2) {
-          _morphA.addScaledVector(_tempA, influence);
-          _morphB.addScaledVector(_tempB, influence);
-          _morphC.addScaledVector(_tempC, influence);
-        } else {
-          _morphA.addScaledVector(_tempA.sub(_vA), influence);
-          _morphB.addScaledVector(_tempB.sub(_vB), influence);
-          _morphC.addScaledVector(_tempC.sub(_vC), influence);
-        }
-      }
-      _vA.add(_morphA);
-      _vB.add(_morphB);
-      _vC.add(_morphC);
-    }
-    if (object2.isSkinnedMesh) {
-      object2.boneTransform(a2, _vA);
-      object2.boneTransform(b2, _vB);
-      object2.boneTransform(c2, _vC);
-    }
-    modifiedAttributeArray[a2 * 3 + 0] = _vA.x;
-    modifiedAttributeArray[a2 * 3 + 1] = _vA.y;
-    modifiedAttributeArray[a2 * 3 + 2] = _vA.z;
-    modifiedAttributeArray[b2 * 3 + 0] = _vB.x;
-    modifiedAttributeArray[b2 * 3 + 1] = _vB.y;
-    modifiedAttributeArray[b2 * 3 + 2] = _vB.z;
-    modifiedAttributeArray[c2 * 3 + 0] = _vC.x;
-    modifiedAttributeArray[c2 * 3 + 1] = _vC.y;
-    modifiedAttributeArray[c2 * 3 + 2] = _vC.z;
-  }
-  const geometry = object.geometry;
-  const material = object.material;
-  let a, b, c;
-  const index = geometry.index;
-  const positionAttribute = geometry.attributes.position;
-  const morphPosition = geometry.morphAttributes.position;
-  const morphTargetsRelative = geometry.morphTargetsRelative;
-  const normalAttribute = geometry.attributes.normal;
-  const morphNormal = geometry.morphAttributes.position;
-  const groups = geometry.groups;
-  const drawRange = geometry.drawRange;
-  let i, j, il, jl;
-  let group, groupMaterial;
-  let start, end;
-  const modifiedPosition = new Float32Array(positionAttribute.count * positionAttribute.itemSize);
-  const modifiedNormal = new Float32Array(normalAttribute.count * normalAttribute.itemSize);
-  if (index !== null) {
-    if (Array.isArray(material)) {
-      for (i = 0, il = groups.length; i < il; i++) {
-        group = groups[i];
-        groupMaterial = material[group.materialIndex];
-        start = Math.max(group.start, drawRange.start);
-        end = Math.min(group.start + group.count, drawRange.start + drawRange.count);
-        for (j = start, jl = end; j < jl; j += 3) {
-          a = index.getX(j);
-          b = index.getX(j + 1);
-          c = index.getX(j + 2);
-          _calculateMorphedAttributeData(
-            object,
-            groupMaterial,
-            positionAttribute,
-            morphPosition,
-            morphTargetsRelative,
-            a,
-            b,
-            c,
-            modifiedPosition
-          );
-          _calculateMorphedAttributeData(
-            object,
-            groupMaterial,
-            normalAttribute,
-            morphNormal,
-            morphTargetsRelative,
-            a,
-            b,
-            c,
-            modifiedNormal
-          );
-        }
-      }
-    } else {
-      start = Math.max(0, drawRange.start);
-      end = Math.min(index.count, drawRange.start + drawRange.count);
-      for (i = start, il = end; i < il; i += 3) {
-        a = index.getX(i);
-        b = index.getX(i + 1);
-        c = index.getX(i + 2);
-        _calculateMorphedAttributeData(
-          object,
-          material,
-          positionAttribute,
-          morphPosition,
-          morphTargetsRelative,
-          a,
-          b,
-          c,
-          modifiedPosition
-        );
-        _calculateMorphedAttributeData(
-          object,
-          material,
-          normalAttribute,
-          morphNormal,
-          morphTargetsRelative,
-          a,
-          b,
-          c,
-          modifiedNormal
-        );
-      }
-    }
-  } else if (positionAttribute !== void 0) {
-    if (Array.isArray(material)) {
-      for (i = 0, il = groups.length; i < il; i++) {
-        group = groups[i];
-        groupMaterial = material[group.materialIndex];
-        start = Math.max(group.start, drawRange.start);
-        end = Math.min(group.start + group.count, drawRange.start + drawRange.count);
-        for (j = start, jl = end; j < jl; j += 3) {
-          a = j;
-          b = j + 1;
-          c = j + 2;
-          _calculateMorphedAttributeData(
-            object,
-            groupMaterial,
-            positionAttribute,
-            morphPosition,
-            morphTargetsRelative,
-            a,
-            b,
-            c,
-            modifiedPosition
-          );
-          _calculateMorphedAttributeData(
-            object,
-            groupMaterial,
-            normalAttribute,
-            morphNormal,
-            morphTargetsRelative,
-            a,
-            b,
-            c,
-            modifiedNormal
-          );
-        }
-      }
-    } else {
-      start = Math.max(0, drawRange.start);
-      end = Math.min(positionAttribute.count, drawRange.start + drawRange.count);
-      for (i = start, il = end; i < il; i += 3) {
-        a = i;
-        b = i + 1;
-        c = i + 2;
-        _calculateMorphedAttributeData(
-          object,
-          material,
-          positionAttribute,
-          morphPosition,
-          morphTargetsRelative,
-          a,
-          b,
-          c,
-          modifiedPosition
-        );
-        _calculateMorphedAttributeData(
-          object,
-          material,
-          normalAttribute,
-          morphNormal,
-          morphTargetsRelative,
-          a,
-          b,
-          c,
-          modifiedNormal
-        );
-      }
-    }
-  }
-  const morphedPositionAttribute = new three_module.Float32BufferAttribute(modifiedPosition, 3);
-  const morphedNormalAttribute = new three_module.Float32BufferAttribute(modifiedNormal, 3);
-  return {
-    positionAttribute,
-    normalAttribute,
-    morphedPositionAttribute,
-    morphedNormalAttribute
-  };
-}
-function toCreasedNormals(geometry, creaseAngle = Math.PI / 3) {
-  const creaseDot = Math.cos(creaseAngle);
-  const hashMultiplier = (1 + 1e-10) * 100;
-  const verts = [new three_module.Vector3(), new three_module.Vector3(), new three_module.Vector3()];
-  const tempVec1 = new three_module.Vector3();
-  const tempVec2 = new three_module.Vector3();
-  const tempNorm = new three_module.Vector3();
-  const tempNorm2 = new three_module.Vector3();
-  function hashVertex(v) {
-    const x = ~~(v.x * hashMultiplier);
-    const y = ~~(v.y * hashMultiplier);
-    const z = ~~(v.z * hashMultiplier);
-    return `${x},${y},${z}`;
-  }
-  const resultGeometry = geometry.toNonIndexed();
-  const posAttr = resultGeometry.attributes.position;
-  const vertexMap = {};
-  for (let i = 0, l = posAttr.count / 3; i < l; i++) {
-    const i3 = 3 * i;
-    const a = verts[0].fromBufferAttribute(posAttr, i3 + 0);
-    const b = verts[1].fromBufferAttribute(posAttr, i3 + 1);
-    const c = verts[2].fromBufferAttribute(posAttr, i3 + 2);
-    tempVec1.subVectors(c, b);
-    tempVec2.subVectors(a, b);
-    const normal = new three_module.Vector3().crossVectors(tempVec1, tempVec2).normalize();
-    for (let n = 0; n < 3; n++) {
-      const vert = verts[n];
-      const hash = hashVertex(vert);
-      if (!(hash in vertexMap)) {
-        vertexMap[hash] = [];
-      }
-      vertexMap[hash].push(normal);
-    }
-  }
-  const normalArray = new Float32Array(posAttr.count * 3);
-  const normAttr = new three_module.BufferAttribute(normalArray, 3, false);
-  for (let i = 0, l = posAttr.count / 3; i < l; i++) {
-    const i3 = 3 * i;
-    const a = verts[0].fromBufferAttribute(posAttr, i3 + 0);
-    const b = verts[1].fromBufferAttribute(posAttr, i3 + 1);
-    const c = verts[2].fromBufferAttribute(posAttr, i3 + 2);
-    tempVec1.subVectors(c, b);
-    tempVec2.subVectors(a, b);
-    tempNorm.crossVectors(tempVec1, tempVec2).normalize();
-    for (let n = 0; n < 3; n++) {
-      const vert = verts[n];
-      const hash = hashVertex(vert);
-      const otherNormals = vertexMap[hash];
-      tempNorm2.set(0, 0, 0);
-      for (let k = 0, lk = otherNormals.length; k < lk; k++) {
-        const otherNorm = otherNormals[k];
-        if (tempNorm.dot(otherNorm) > creaseDot) {
-          tempNorm2.add(otherNorm);
-        }
-      }
-      tempNorm2.normalize();
-      normAttr.setXYZ(i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z);
-    }
-  }
-  resultGeometry.setAttribute("normal", normAttr);
-  return resultGeometry;
-}
-
-
-
-/***/ }),
-
-/***/ 11742:
-/***/ ((module) => {
-
-
-module.exports = function () {
-  var selection = document.getSelection();
-  if (!selection.rangeCount) {
-    return function () {};
-  }
-  var active = document.activeElement;
-
-  var ranges = [];
-  for (var i = 0; i < selection.rangeCount; i++) {
-    ranges.push(selection.getRangeAt(i));
-  }
-
-  switch (active.tagName.toUpperCase()) { // .toUpperCase handles XHTML
-    case 'INPUT':
-    case 'TEXTAREA':
-      active.blur();
-      break;
-
-    default:
-      active = null;
-      break;
-  }
-
-  selection.removeAllRanges();
-  return function () {
-    selection.type === 'Caret' &&
-    selection.removeAllRanges();
-
-    if (!selection.rangeCount) {
-      ranges.forEach(function(range) {
-        selection.addRange(range);
-      });
-    }
-
-    active &&
-    active.focus();
-  };
-};
-
-
-/***/ }),
-
-/***/ 75534:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-var __webpack_unused_export__;
-
-__webpack_unused_export__ = ({ value: true });
-exports.U = {
-    // No easing, no acceleration
-    linear: function (t) { return t; },
-    // Accelerates fast, then slows quickly towards end.
-    quadratic: function (t) { return t * (-(t * t) * t + 4 * t * t - 6 * t + 4); },
-    // Overshoots over 1 and then returns to 1 towards end.
-    cubic: function (t) { return t * (4 * t * t - 9 * t + 6); },
-    // Overshoots over 1 multiple times - wiggles around 1.
-    elastic: function (t) { return t * (33 * t * t * t * t - 106 * t * t * t + 126 * t * t - 67 * t + 15); },
-    // Accelerating from zero velocity
-    inQuad: function (t) { return t * t; },
-    // Decelerating to zero velocity
-    outQuad: function (t) { return t * (2 - t); },
-    // Acceleration until halfway, then deceleration
-    inOutQuad: function (t) { return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t; },
-    // Accelerating from zero velocity
-    inCubic: function (t) { return t * t * t; },
-    // Decelerating to zero velocity
-    outCubic: function (t) { return (--t) * t * t + 1; },
-    // Acceleration until halfway, then deceleration
-    inOutCubic: function (t) { return t < .5 ? 4 * t * t * t : (t - 1) * (2 * t - 2) * (2 * t - 2) + 1; },
-    // Accelerating from zero velocity
-    inQuart: function (t) { return t * t * t * t; },
-    // Decelerating to zero velocity
-    outQuart: function (t) { return 1 - (--t) * t * t * t; },
-    // Acceleration until halfway, then deceleration
-    inOutQuart: function (t) { return t < .5 ? 8 * t * t * t * t : 1 - 8 * (--t) * t * t * t; },
-    // Accelerating from zero velocity
-    inQuint: function (t) { return t * t * t * t * t; },
-    // Decelerating to zero velocity
-    outQuint: function (t) { return 1 + (--t) * t * t * t * t; },
-    // Acceleration until halfway, then deceleration
-    inOutQuint: function (t) { return t < .5 ? 16 * t * t * t * t * t : 1 + 16 * (--t) * t * t * t * t; },
-    // Accelerating from zero velocity
-    inSine: function (t) { return -Math.cos(t * (Math.PI / 2)) + 1; },
-    // Decelerating to zero velocity
-    outSine: function (t) { return Math.sin(t * (Math.PI / 2)); },
-    // Accelerating until halfway, then decelerating
-    inOutSine: function (t) { return -(Math.cos(Math.PI * t) - 1) / 2; },
-    // Exponential accelerating from zero velocity
-    inExpo: function (t) { return Math.pow(2, 10 * (t - 1)); },
-    // Exponential decelerating to zero velocity
-    outExpo: function (t) { return -Math.pow(2, -10 * t) + 1; },
-    // Exponential accelerating until halfway, then decelerating
-    inOutExpo: function (t) {
-        t /= .5;
-        if (t < 1)
-            return Math.pow(2, 10 * (t - 1)) / 2;
-        t--;
-        return (-Math.pow(2, -10 * t) + 2) / 2;
-    },
-    // Circular accelerating from zero velocity
-    inCirc: function (t) { return -Math.sqrt(1 - t * t) + 1; },
-    // Circular decelerating to zero velocity Moves VERY fast at the beginning and
-    // then quickly slows down in the middle. This tween can actually be used
-    // in continuous transitions where target value changes all the time,
-    // because of the very quick start, it hides the jitter between target value changes.
-    outCirc: function (t) { return Math.sqrt(1 - (t = t - 1) * t); },
-    // Circular acceleration until halfway, then deceleration
-    inOutCirc: function (t) {
-        t /= .5;
-        if (t < 1)
-            return -(Math.sqrt(1 - t * t) - 1) / 2;
-        t -= 2;
-        return (Math.sqrt(1 - t * t) + 1) / 2;
-    }
-};
-
-
-/***/ }),
-
-/***/ 70655:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "__assign": () => (/* binding */ __assign),
-/* harmony export */   "__asyncDelegator": () => (/* binding */ __asyncDelegator),
-/* harmony export */   "__asyncGenerator": () => (/* binding */ __asyncGenerator),
-/* harmony export */   "__asyncValues": () => (/* binding */ __asyncValues),
-/* harmony export */   "__await": () => (/* binding */ __await),
-/* harmony export */   "__awaiter": () => (/* binding */ __awaiter),
-/* harmony export */   "__classPrivateFieldGet": () => (/* binding */ __classPrivateFieldGet),
-/* harmony export */   "__classPrivateFieldIn": () => (/* binding */ __classPrivateFieldIn),
-/* harmony export */   "__classPrivateFieldSet": () => (/* binding */ __classPrivateFieldSet),
-/* harmony export */   "__createBinding": () => (/* binding */ __createBinding),
-/* harmony export */   "__decorate": () => (/* binding */ __decorate),
-/* harmony export */   "__exportStar": () => (/* binding */ __exportStar),
-/* harmony export */   "__extends": () => (/* binding */ __extends),
-/* harmony export */   "__generator": () => (/* binding */ __generator),
-/* harmony export */   "__importDefault": () => (/* binding */ __importDefault),
-/* harmony export */   "__importStar": () => (/* binding */ __importStar),
-/* harmony export */   "__makeTemplateObject": () => (/* binding */ __makeTemplateObject),
-/* harmony export */   "__metadata": () => (/* binding */ __metadata),
-/* harmony export */   "__param": () => (/* binding */ __param),
-/* harmony export */   "__read": () => (/* binding */ __read),
-/* harmony export */   "__rest": () => (/* binding */ __rest),
-/* harmony export */   "__spread": () => (/* binding */ __spread),
-/* harmony export */   "__spreadArray": () => (/* binding */ __spreadArray),
-/* harmony export */   "__spreadArrays": () => (/* binding */ __spreadArrays),
-/* harmony export */   "__values": () => (/* binding */ __values)
-/* harmony export */ });
-/******************************************************************************
-Copyright (c) Microsoft Corporation.
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
-***************************************************************************** */
-/* global Reflect, Promise */
-
-var extendStatics = function(d, b) {
-    extendStatics = Object.setPrototypeOf ||
-        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
-        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
-    return extendStatics(d, b);
-};
-
-function __extends(d, b) {
-    if (typeof b !== "function" && b !== null)
-        throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
-    extendStatics(d, b);
-    function __() { this.constructor = d; }
-    d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
-}
-
-var __assign = function() {
-    __assign = Object.assign || function __assign(t) {
-        for (var s, i = 1, n = arguments.length; i < n; i++) {
-            s = arguments[i];
-            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
-        }
-        return t;
-    }
-    return __assign.apply(this, arguments);
-}
-
-function __rest(s, e) {
-    var t = {};
-    for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
-        t[p] = s[p];
-    if (s != null && typeof Object.getOwnPropertySymbols === "function")
-        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]];
-        }
-    return t;
-}
-
-function __decorate(decorators, target, key, desc) {
-    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
-    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
-    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;
-    return c > 3 && r && Object.defineProperty(target, key, r), r;
-}
-
-function __param(paramIndex, decorator) {
-    return function (target, key) { decorator(target, key, paramIndex); }
-}
-
-function __metadata(metadataKey, metadataValue) {
-    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
-}
-
-function __awaiter(thisArg, _arguments, P, generator) {
-    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
-    return new (P || (P = Promise))(function (resolve, reject) {
-        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
-        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
-        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
-        step((generator = generator.apply(thisArg, _arguments || [])).next());
-    });
-}
-
-function __generator(thisArg, body) {
-    var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
-    return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
-    function verb(n) { return function (v) { return step([n, v]); }; }
-    function step(op) {
-        if (f) throw new TypeError("Generator is already executing.");
-        while (_) try {
-            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;
-            if (y = 0, t) op = [op[0] & 2, t.value];
-            switch (op[0]) {
-                case 0: case 1: t = op; break;
-                case 4: _.label++; return { value: op[1], done: false };
-                case 5: _.label++; y = op[1]; op = [0]; continue;
-                case 7: op = _.ops.pop(); _.trys.pop(); continue;
-                default:
-                    if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
-                    if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
-                    if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
-                    if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
-                    if (t[2]) _.ops.pop();
-                    _.trys.pop(); continue;
-            }
-            op = body.call(thisArg, _);
-        } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
-        if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
-    }
-}
-
-var __createBinding = Object.create ? (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    var desc = Object.getOwnPropertyDescriptor(m, k);
-    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
-        desc = { enumerable: true, get: function() { return m[k]; } };
-    }
-    Object.defineProperty(o, k2, desc);
-}) : (function(o, m, k, k2) {
-    if (k2 === undefined) k2 = k;
-    o[k2] = m[k];
-});
-
-function __exportStar(m, o) {
-    for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
-}
-
-function __values(o) {
-    var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
-    if (m) return m.call(o);
-    if (o && typeof o.length === "number") return {
-        next: function () {
-            if (o && i >= o.length) o = void 0;
-            return { value: o && o[i++], done: !o };
-        }
-    };
-    throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
-}
-
-function __read(o, n) {
-    var m = typeof Symbol === "function" && o[Symbol.iterator];
-    if (!m) return o;
-    var i = m.call(o), r, ar = [], e;
-    try {
-        while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
-    }
-    catch (error) { e = { error: error }; }
-    finally {
-        try {
-            if (r && !r.done && (m = i["return"])) m.call(i);
-        }
-        finally { if (e) throw e.error; }
-    }
-    return ar;
-}
-
-/** @deprecated */
-function __spread() {
-    for (var ar = [], i = 0; i < arguments.length; i++)
-        ar = ar.concat(__read(arguments[i]));
-    return ar;
-}
-
-/** @deprecated */
-function __spreadArrays() {
-    for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
-    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];
-    return r;
-}
-
-function __spreadArray(to, from, pack) {
-    if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
-        if (ar || !(i in from)) {
-            if (!ar) ar = Array.prototype.slice.call(from, 0, i);
-            ar[i] = from[i];
-        }
-    }
-    return to.concat(ar || Array.prototype.slice.call(from));
-}
-
-function __await(v) {
-    return this instanceof __await ? (this.v = v, this) : new __await(v);
-}
-
-function __asyncGenerator(thisArg, _arguments, generator) {
-    if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
-    var g = generator.apply(thisArg, _arguments || []), i, q = [];
-    return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
-    function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
-    function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
-    function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
-    function fulfill(value) { resume("next", value); }
-    function reject(value) { resume("throw", value); }
-    function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
-}
-
-function __asyncDelegator(o) {
-    var i, p;
-    return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
-    function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
-}
-
-function __asyncValues(o) {
-    if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
-    var m = o[Symbol.asyncIterator], i;
-    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);
-    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); }); }; }
-    function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
-}
-
-function __makeTemplateObject(cooked, raw) {
-    if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
-    return cooked;
-};
-
-var __setModuleDefault = Object.create ? (function(o, v) {
-    Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
-    o["default"] = v;
-};
-
-function __importStar(mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
-    __setModuleDefault(result, mod);
-    return result;
-}
-
-function __importDefault(mod) {
-    return (mod && mod.__esModule) ? mod : { default: mod };
-}
-
-function __classPrivateFieldGet(receiver, state, kind, f) {
-    if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
-    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");
-    return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
-}
-
-function __classPrivateFieldSet(receiver, state, value, kind, f) {
-    if (kind === "m") throw new TypeError("Private method is not writable");
-    if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
-    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");
-    return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
-}
-
-function __classPrivateFieldIn(state, receiver) {
-    if (receiver === null || (typeof receiver !== "object" && typeof receiver !== "function")) throw new TypeError("Cannot use 'in' operator on non-object");
-    return typeof state === "function" ? receiver === state : state.has(receiver);
-}
-
-
-/***/ }),
-
-/***/ 48930:
-/***/ ((__unused_webpack_module, exports) => {
-
-"use strict";
-
-
-exports.fromCallback = function (fn) {
-  return Object.defineProperty(function (...args) {
-    if (typeof args[args.length - 1] === 'function') fn.apply(this, args)
-    else {
-      return new Promise((resolve, reject) => {
-        fn.call(
-          this,
-          ...args,
-          (err, res) => (err != null) ? reject(err) : resolve(res)
-        )
-      })
-    }
-  }, 'name', { value: fn.name })
-}
-
-exports.fromPromise = function (fn) {
-  return Object.defineProperty(function (...args) {
-    const cb = args[args.length - 1]
-    if (typeof cb !== 'function') return fn.apply(this, args)
-    else fn.apply(this, args.slice(0, -1)).then(r => cb(null, r), cb)
-  }, 'name', { value: fn.name })
-}
-
-
-/***/ }),
-
-/***/ 25815:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (__webpack_require__.p + "assets/images/architect-859851235bc357ba82544fdc52d500de.png");
-
-/***/ }),
-
-/***/ 53250:
-/***/ ((__unused_webpack_module, exports, __webpack_require__) => {
-
-"use strict";
-/**
- * @license React
- * use-sync-external-store-shim.production.min.js
- *
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- */
-var e=__webpack_require__(67294);function h(a,b){return a===b&&(0!==a||1/a===1/b)||a!==a&&b!==b}var k="function"===typeof Object.is?Object.is:h,l=e.useState,m=e.useEffect,n=e.useLayoutEffect,p=e.useDebugValue;function q(a,b){var d=b(),f=l({inst:{value:d,getSnapshot:b}}),c=f[0].inst,g=f[1];n(function(){c.value=d;c.getSnapshot=b;r(c)&&g({inst:c})},[a,d,b]);m(function(){r(c)&&g({inst:c});return a(function(){r(c)&&g({inst:c})})},[a]);p(d);return d}
-function r(a){var b=a.getSnapshot;a=a.value;try{var d=b();return!k(a,d)}catch(f){return!0}}function t(a,b){return b()}var u="undefined"===typeof window||"undefined"===typeof window.document||"undefined"===typeof window.document.createElement?t:q;exports.useSyncExternalStore=void 0!==e.useSyncExternalStore?e.useSyncExternalStore:u;
-
-
-/***/ }),
-
-/***/ 61688:
-/***/ ((module, __unused_webpack_exports, __webpack_require__) => {
-
-"use strict";
-
-
-if (true) {
-  module.exports = __webpack_require__(53250);
-} else {}
-
-
-/***/ }),
-
-/***/ 14671:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (/* binding */ create)
-/* harmony export */ });
-/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(67294);
-
-
-function createStore(createState) {
-  let state;
-  const listeners = /* @__PURE__ */ new Set();
-  const setState = (partial, replace) => {
-    const nextState = typeof partial === "function" ? partial(state) : partial;
-    if (nextState !== state) {
-      const previousState = state;
-      state = replace ? nextState : Object.assign({}, state, nextState);
-      listeners.forEach((listener) => listener(state, previousState));
-    }
-  };
-  const getState = () => state;
-  const subscribeWithSelector = (listener, selector = getState, equalityFn = Object.is) => {
-    console.warn("[DEPRECATED] Please use `subscribeWithSelector` middleware");
-    let currentSlice = selector(state);
-    function listenerToAdd() {
-      const nextSlice = selector(state);
-      if (!equalityFn(currentSlice, nextSlice)) {
-        const previousSlice = currentSlice;
-        listener(currentSlice = nextSlice, previousSlice);
-      }
-    }
-    listeners.add(listenerToAdd);
-    return () => listeners.delete(listenerToAdd);
-  };
-  const subscribe = (listener, selector, equalityFn) => {
-    if (selector || equalityFn) {
-      return subscribeWithSelector(listener, selector, equalityFn);
-    }
-    listeners.add(listener);
-    return () => listeners.delete(listener);
-  };
-  const destroy = () => listeners.clear();
-  const api = { setState, getState, subscribe, destroy };
-  state = createState(setState, getState, api);
-  return api;
-}
-
-const isSSR = typeof window === "undefined" || !window.navigator || /ServerSideRendering|^Deno\//.test(window.navigator.userAgent);
-const useIsomorphicLayoutEffect = isSSR ? react__WEBPACK_IMPORTED_MODULE_0__.useEffect : react__WEBPACK_IMPORTED_MODULE_0__.useLayoutEffect;
-function create(createState) {
-  const api = typeof createState === "function" ? createStore(createState) : createState;
-  const useStore = (selector = api.getState, equalityFn = Object.is) => {
-    const [, forceUpdate] = (0,react__WEBPACK_IMPORTED_MODULE_0__.useReducer)((c) => c + 1, 0);
-    const state = api.getState();
-    const stateRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(state);
-    const selectorRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(selector);
-    const equalityFnRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(equalityFn);
-    const erroredRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(false);
-    const currentSliceRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)();
-    if (currentSliceRef.current === void 0) {
-      currentSliceRef.current = selector(state);
-    }
-    let newStateSlice;
-    let hasNewStateSlice = false;
-    if (stateRef.current !== state || selectorRef.current !== selector || equalityFnRef.current !== equalityFn || erroredRef.current) {
-      newStateSlice = selector(state);
-      hasNewStateSlice = !equalityFn(currentSliceRef.current, newStateSlice);
-    }
-    useIsomorphicLayoutEffect(() => {
-      if (hasNewStateSlice) {
-        currentSliceRef.current = newStateSlice;
-      }
-      stateRef.current = state;
-      selectorRef.current = selector;
-      equalityFnRef.current = equalityFn;
-      erroredRef.current = false;
-    });
-    const stateBeforeSubscriptionRef = (0,react__WEBPACK_IMPORTED_MODULE_0__.useRef)(state);
-    useIsomorphicLayoutEffect(() => {
-      const listener = () => {
-        try {
-          const nextState = api.getState();
-          const nextStateSlice = selectorRef.current(nextState);
-          if (!equalityFnRef.current(currentSliceRef.current, nextStateSlice)) {
-            stateRef.current = nextState;
-            currentSliceRef.current = nextStateSlice;
-            forceUpdate();
-          }
-        } catch (error) {
-          erroredRef.current = true;
-          forceUpdate();
-        }
-      };
-      const unsubscribe = api.subscribe(listener);
-      if (api.getState() !== stateBeforeSubscriptionRef.current) {
-        listener();
-      }
-      return unsubscribe;
-    }, []);
-    const sliceToReturn = hasNewStateSlice ? newStateSlice : currentSliceRef.current;
-    (0,react__WEBPACK_IMPORTED_MODULE_0__.useDebugValue)(sliceToReturn);
-    return sliceToReturn;
-  };
-  Object.assign(useStore, api);
-  useStore[Symbol.iterator] = function() {
-    console.warn("[useStore, api] = create() is deprecated and will be removed in v4");
-    const items = [useStore, api];
-    return {
-      next() {
-        const done = items.length <= 0;
-        return { value: items.shift(), done };
-      }
-    };
-  };
-  return useStore;
-}
-
-
-
-
-/***/ }),
-
-/***/ 60374:
-/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (/* binding */ shallow)
-/* harmony export */ });
-function shallow(objA, objB) {
-  if (Object.is(objA, objB)) {
-    return true;
-  }
-  if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) {
-    return false;
-  }
-  const keysA = Object.keys(objA);
-  if (keysA.length !== Object.keys(objB).length) {
-    return false;
-  }
-  for (let i = 0; i < keysA.length; i++) {
-    if (!Object.prototype.hasOwnProperty.call(objB, keysA[i]) || !Object.is(objA[keysA[i]], objB[keysA[i]])) {
-      return false;
-    }
-  }
-  return true;
-}
-
-
-
-
-/***/ }),
-
-/***/ 39491:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("assert");
-
-/***/ }),
-
-/***/ 22057:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("constants");
-
-/***/ }),
-
-/***/ 6113:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("crypto");
-
-/***/ }),
-
-/***/ 57147:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("fs");
-
-/***/ }),
-
-/***/ 13685:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("http");
-
-/***/ }),
-
-/***/ 95687:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("https");
-
-/***/ }),
-
-/***/ 22037:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("os");
-
-/***/ }),
-
-/***/ 71017:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("path");
-
-/***/ }),
-
-/***/ 12781:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("stream");
-
-/***/ }),
-
-/***/ 76224:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("tty");
-
-/***/ }),
-
-/***/ 57310:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("url");
-
-/***/ }),
-
-/***/ 73837:
-/***/ ((module) => {
-
-"use strict";
-module.exports = require("util");
-
-/***/ }),
-
-/***/ 89728:
-/***/ ((module) => {
-
-function _defineProperties(target, props) {
-  for (var i = 0; i < props.length; i++) {
-    var descriptor = props[i];
-    descriptor.enumerable = descriptor.enumerable || false;
-    descriptor.configurable = true;
-    if ("value" in descriptor) descriptor.writable = true;
-    Object.defineProperty(target, descriptor.key, descriptor);
-  }
-}
-
-function _createClass(Constructor, protoProps, staticProps) {
-  if (protoProps) _defineProperties(Constructor.prototype, protoProps);
-  if (staticProps) _defineProperties(Constructor, staticProps);
-  Object.defineProperty(Constructor, "prototype", {
-    writable: false
-  });
-  return Constructor;
-}
-
-module.exports = _createClass, module.exports.__esModule = true, module.exports["default"] = module.exports;
-
-/***/ }),
-
-/***/ 10434:
-/***/ ((module) => {
-
-function _extends() {
-  module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-
-    return target;
-  }, module.exports.__esModule = true, module.exports["default"] = module.exports;
-  return _extends.apply(this, arguments);
-}
-
-module.exports = _extends, module.exports.__esModule = true, module.exports["default"] = module.exports;
-
-/***/ }),
-
-/***/ 64836:
-/***/ ((module) => {
-
-function _interopRequireDefault(obj) {
-  return obj && obj.__esModule ? obj : {
-    "default": obj
-  };
-}
-
-module.exports = _interopRequireDefault, module.exports.__esModule = true, module.exports["default"] = module.exports;
-
-/***/ }),
-
-/***/ 61303:
-/***/ ((module) => {
-
-function _extends() {
-  module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-    return target;
-  }, module.exports.__esModule = true, module.exports["default"] = module.exports;
-  return _extends.apply(this, arguments);
-}
-module.exports = _extends, module.exports.__esModule = true, module.exports["default"] = module.exports;
-
-/***/ }),
-
-/***/ 64304:
-/***/ ((module) => {
-
-function _extends() {
-  module.exports = _extends = Object.assign ? Object.assign.bind() : function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-    return target;
-  }, module.exports.__esModule = true, module.exports["default"] = module.exports;
-  return _extends.apply(this, arguments);
-}
-module.exports = _extends, module.exports.__esModule = true, module.exports["default"] = module.exports;
-
-/***/ }),
-
-/***/ 34950:
-/***/ (function(__unused_webpack_module, exports, __webpack_require__) {
-
-(function (global, factory) {
- true ? factory(exports, __webpack_require__(92878)) :
-0;
-}(this, (function (exports, sourceMap) { 'use strict';
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-function characters(str) {
-    return str.split("");
-}
-
-function member(name, array) {
-    return array.includes(name);
-}
-
-class DefaultsError extends Error {
-    constructor(msg, defs) {
-        super();
-
-        this.name = "DefaultsError";
-        this.message = msg;
-        this.defs = defs;
-    }
-}
-
-function defaults(args, defs, croak) {
-    if (args === true) {
-        args = {};
-    } else if (args != null && typeof args === "object") {
-        args = {...args};
-    }
-
-    const ret = args || {};
-
-    if (croak) for (const i in ret) if (HOP(ret, i) && !HOP(defs, i)) {
-        throw new DefaultsError("`" + i + "` is not a supported option", defs);
-    }
-
-    for (const i in defs) if (HOP(defs, i)) {
-        if (!args || !HOP(args, i)) {
-            ret[i] = defs[i];
-        } else if (i === "ecma") {
-            let ecma = args[i] | 0;
-            if (ecma > 5 && ecma < 2015) ecma += 2009;
-            ret[i] = ecma;
-        } else {
-            ret[i] = (args && HOP(args, i)) ? args[i] : defs[i];
-        }
-    }
-
-    return ret;
-}
-
-function noop() {}
-function return_false() { return false; }
-function return_true() { return true; }
-function return_this() { return this; }
-function return_null() { return null; }
-
-var MAP = (function() {
-    function MAP(a, f, backwards) {
-        var ret = [], top = [], i;
-        function doit() {
-            var val = f(a[i], i);
-            var is_last = val instanceof Last;
-            if (is_last) val = val.v;
-            if (val instanceof AtTop) {
-                val = val.v;
-                if (val instanceof Splice) {
-                    top.push.apply(top, backwards ? val.v.slice().reverse() : val.v);
-                } else {
-                    top.push(val);
-                }
-            } else if (val !== skip) {
-                if (val instanceof Splice) {
-                    ret.push.apply(ret, backwards ? val.v.slice().reverse() : val.v);
-                } else {
-                    ret.push(val);
-                }
-            }
-            return is_last;
-        }
-        if (Array.isArray(a)) {
-            if (backwards) {
-                for (i = a.length; --i >= 0;) if (doit()) break;
-                ret.reverse();
-                top.reverse();
-            } else {
-                for (i = 0; i < a.length; ++i) if (doit()) break;
-            }
-        } else {
-            for (i in a) if (HOP(a, i)) if (doit()) break;
-        }
-        return top.concat(ret);
-    }
-    MAP.at_top = function(val) { return new AtTop(val); };
-    MAP.splice = function(val) { return new Splice(val); };
-    MAP.last = function(val) { return new Last(val); };
-    var skip = MAP.skip = {};
-    function AtTop(val) { this.v = val; }
-    function Splice(val) { this.v = val; }
-    function Last(val) { this.v = val; }
-    return MAP;
-})();
-
-function make_node(ctor, orig, props) {
-    if (!props) props = {};
-    if (orig) {
-        if (!props.start) props.start = orig.start;
-        if (!props.end) props.end = orig.end;
-    }
-    return new ctor(props);
-}
-
-function push_uniq(array, el) {
-    if (!array.includes(el))
-        array.push(el);
-}
-
-function string_template(text, props) {
-    return text.replace(/{(.+?)}/g, function(str, p) {
-        return props && props[p];
-    });
-}
-
-function remove(array, el) {
-    for (var i = array.length; --i >= 0;) {
-        if (array[i] === el) array.splice(i, 1);
-    }
-}
-
-function mergeSort(array, cmp) {
-    if (array.length < 2) return array.slice();
-    function merge(a, b) {
-        var r = [], ai = 0, bi = 0, i = 0;
-        while (ai < a.length && bi < b.length) {
-            cmp(a[ai], b[bi]) <= 0
-                ? r[i++] = a[ai++]
-                : r[i++] = b[bi++];
-        }
-        if (ai < a.length) r.push.apply(r, a.slice(ai));
-        if (bi < b.length) r.push.apply(r, b.slice(bi));
-        return r;
-    }
-    function _ms(a) {
-        if (a.length <= 1)
-            return a;
-        var m = Math.floor(a.length / 2), left = a.slice(0, m), right = a.slice(m);
-        left = _ms(left);
-        right = _ms(right);
-        return merge(left, right);
-    }
-    return _ms(array);
-}
-
-function makePredicate(words) {
-    if (!Array.isArray(words)) words = words.split(" ");
-
-    return new Set(words.sort());
-}
-
-function map_add(map, key, value) {
-    if (map.has(key)) {
-        map.get(key).push(value);
-    } else {
-        map.set(key, [ value ]);
-    }
-}
-
-function map_from_object(obj) {
-    var map = new Map();
-    for (var key in obj) {
-        if (HOP(obj, key) && key.charAt(0) === "$") {
-            map.set(key.substr(1), obj[key]);
-        }
-    }
-    return map;
-}
-
-function map_to_object(map) {
-    var obj = Object.create(null);
-    map.forEach(function (value, key) {
-        obj["$" + key] = value;
-    });
-    return obj;
-}
-
-function HOP(obj, prop) {
-    return Object.prototype.hasOwnProperty.call(obj, prop);
-}
-
-function keep_name(keep_setting, name) {
-    return keep_setting === true
-        || (keep_setting instanceof RegExp && keep_setting.test(name));
-}
-
-var lineTerminatorEscape = {
-    "\0": "0",
-    "\n": "n",
-    "\r": "r",
-    "\u2028": "u2028",
-    "\u2029": "u2029",
-};
-function regexp_source_fix(source) {
-    // V8 does not escape line terminators in regexp patterns in node 12
-    // We'll also remove literal \0
-    return source.replace(/[\0\n\r\u2028\u2029]/g, function (match, offset) {
-        var escaped = source[offset - 1] == "\\"
-            && (source[offset - 2] != "\\"
-            || /(?:^|[^\\])(?:\\{2})*$/.test(source.slice(0, offset - 1)));
-        return (escaped ? "" : "\\") + lineTerminatorEscape[match];
-    });
-}
-
-// Subset of regexps that is not going to cause regexp based DDOS
-// https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS
-const re_safe_regexp = /^[\\/|\0\s\w^$.[\]()]*$/;
-
-/** Check if the regexp is safe for Terser to create without risking a RegExp DOS */
-const regexp_is_safe = (source) => re_safe_regexp.test(source);
-
-const all_flags = "dgimsuy";
-function sort_regexp_flags(flags) {
-    const existing_flags = new Set(flags.split(""));
-    let out = "";
-    for (const flag of all_flags) {
-        if (existing_flags.has(flag)) {
-            out += flag;
-            existing_flags.delete(flag);
-        }
-    }
-    if (existing_flags.size) {
-        // Flags Terser doesn't know about
-        existing_flags.forEach(flag => { out += flag; });
-    }
-    return out;
-}
-
-function has_annotation(node, annotation) {
-    return node._annotations & annotation;
-}
-
-function set_annotation(node, annotation) {
-    node._annotations |= annotation;
-}
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-    Parser based on parse-js (http://marijn.haverbeke.nl/parse-js/).
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-var LATEST_RAW = "";  // Only used for numbers and template strings
-var TEMPLATE_RAWS = new Map();  // Raw template strings
-
-var KEYWORDS = "break case catch class const continue debugger default delete do else export extends finally for function if in instanceof let new return switch throw try typeof var void while with";
-var KEYWORDS_ATOM = "false null true";
-var RESERVED_WORDS = "enum import super this " + KEYWORDS_ATOM + " " + KEYWORDS;
-var ALL_RESERVED_WORDS = "implements interface package private protected public static " + RESERVED_WORDS;
-var KEYWORDS_BEFORE_EXPRESSION = "return new delete throw else case yield await";
-
-KEYWORDS = makePredicate(KEYWORDS);
-RESERVED_WORDS = makePredicate(RESERVED_WORDS);
-KEYWORDS_BEFORE_EXPRESSION = makePredicate(KEYWORDS_BEFORE_EXPRESSION);
-KEYWORDS_ATOM = makePredicate(KEYWORDS_ATOM);
-ALL_RESERVED_WORDS = makePredicate(ALL_RESERVED_WORDS);
-
-var OPERATOR_CHARS = makePredicate(characters("+-*&%=<>!?|~^"));
-
-var RE_NUM_LITERAL = /[0-9a-f]/i;
-var RE_HEX_NUMBER = /^0x[0-9a-f]+$/i;
-var RE_OCT_NUMBER = /^0[0-7]+$/;
-var RE_ES6_OCT_NUMBER = /^0o[0-7]+$/i;
-var RE_BIN_NUMBER = /^0b[01]+$/i;
-var RE_DEC_NUMBER = /^\d*\.?\d*(?:e[+-]?\d*(?:\d\.?|\.?\d)\d*)?$/i;
-var RE_BIG_INT = /^(0[xob])?[0-9a-f]+n$/i;
-
-var OPERATORS = makePredicate([
-    "in",
-    "instanceof",
-    "typeof",
-    "new",
-    "void",
-    "delete",
-    "++",
-    "--",
-    "+",
-    "-",
-    "!",
-    "~",
-    "&",
-    "|",
-    "^",
-    "*",
-    "**",
-    "/",
-    "%",
-    ">>",
-    "<<",
-    ">>>",
-    "<",
-    ">",
-    "<=",
-    ">=",
-    "==",
-    "===",
-    "!=",
-    "!==",
-    "?",
-    "=",
-    "+=",
-    "-=",
-    "||=",
-    "&&=",
-    "??=",
-    "/=",
-    "*=",
-    "**=",
-    "%=",
-    ">>=",
-    "<<=",
-    ">>>=",
-    "|=",
-    "^=",
-    "&=",
-    "&&",
-    "??",
-    "||",
-]);
-
-var WHITESPACE_CHARS = makePredicate(characters(" \u00a0\n\r\t\f\u000b\u200b\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200a\u2028\u2029\u202f\u205f\u3000\uFEFF"));
-
-var NEWLINE_CHARS = makePredicate(characters("\n\r\u2028\u2029"));
-
-var PUNC_AFTER_EXPRESSION = makePredicate(characters(";]),:"));
-
-var PUNC_BEFORE_EXPRESSION = makePredicate(characters("[{(,;:"));
-
-var PUNC_CHARS = makePredicate(characters("[]{}(),;:"));
-
-/* -----[ Tokenizer ]----- */
-
-// surrogate safe regexps adapted from https://github.com/mathiasbynens/unicode-8.0.0/tree/89b412d8a71ecca9ed593d9e9fa073ab64acfebe/Binary_Property
-var UNICODE = {
-    ID_Start: /[$A-Z_a-z\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,
-    ID_Continue: /(?:[$0-9A-Z_a-z\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF])+/,
-};
-
-function get_full_char(str, pos) {
-    if (is_surrogate_pair_head(str.charCodeAt(pos))) {
-        if (is_surrogate_pair_tail(str.charCodeAt(pos + 1))) {
-            return str.charAt(pos) + str.charAt(pos + 1);
-        }
-    } else if (is_surrogate_pair_tail(str.charCodeAt(pos))) {
-        if (is_surrogate_pair_head(str.charCodeAt(pos - 1))) {
-            return str.charAt(pos - 1) + str.charAt(pos);
-        }
-    }
-    return str.charAt(pos);
-}
-
-function get_full_char_code(str, pos) {
-    // https://en.wikipedia.org/wiki/Universal_Character_Set_characters#Surrogates
-    if (is_surrogate_pair_head(str.charCodeAt(pos))) {
-        return 0x10000 + (str.charCodeAt(pos) - 0xd800 << 10) + str.charCodeAt(pos + 1) - 0xdc00;
-    }
-    return str.charCodeAt(pos);
-}
-
-function get_full_char_length(str) {
-    var surrogates = 0;
-
-    for (var i = 0; i < str.length; i++) {
-        if (is_surrogate_pair_head(str.charCodeAt(i)) && is_surrogate_pair_tail(str.charCodeAt(i + 1))) {
-            surrogates++;
-            i++;
-        }
-    }
-
-    return str.length - surrogates;
-}
-
-function from_char_code(code) {
-    // Based on https://github.com/mathiasbynens/String.fromCodePoint/blob/master/fromcodepoint.js
-    if (code > 0xFFFF) {
-        code -= 0x10000;
-        return (String.fromCharCode((code >> 10) + 0xD800) +
-            String.fromCharCode((code % 0x400) + 0xDC00));
-    }
-    return String.fromCharCode(code);
-}
-
-function is_surrogate_pair_head(code) {
-    return code >= 0xd800 && code <= 0xdbff;
-}
-
-function is_surrogate_pair_tail(code) {
-    return code >= 0xdc00 && code <= 0xdfff;
-}
-
-function is_digit(code) {
-    return code >= 48 && code <= 57;
-}
-
-function is_identifier_start(ch) {
-    return UNICODE.ID_Start.test(ch);
-}
-
-function is_identifier_char(ch) {
-    return UNICODE.ID_Continue.test(ch);
-}
-
-const BASIC_IDENT = /^[a-z_$][a-z0-9_$]*$/i;
-
-function is_basic_identifier_string(str) {
-    return BASIC_IDENT.test(str);
-}
-
-function is_identifier_string(str, allow_surrogates) {
-    if (BASIC_IDENT.test(str)) {
-        return true;
-    }
-    if (!allow_surrogates && /[\ud800-\udfff]/.test(str)) {
-        return false;
-    }
-    var match = UNICODE.ID_Start.exec(str);
-    if (!match || match.index !== 0) {
-        return false;
-    }
-
-    str = str.slice(match[0].length);
-    if (!str) {
-        return true;
-    }
-
-    match = UNICODE.ID_Continue.exec(str);
-    return !!match && match[0].length === str.length;
-}
-
-function parse_js_number(num, allow_e = true) {
-    if (!allow_e && num.includes("e")) {
-        return NaN;
-    }
-    if (RE_HEX_NUMBER.test(num)) {
-        return parseInt(num.substr(2), 16);
-    } else if (RE_OCT_NUMBER.test(num)) {
-        return parseInt(num.substr(1), 8);
-    } else if (RE_ES6_OCT_NUMBER.test(num)) {
-        return parseInt(num.substr(2), 8);
-    } else if (RE_BIN_NUMBER.test(num)) {
-        return parseInt(num.substr(2), 2);
-    } else if (RE_DEC_NUMBER.test(num)) {
-        return parseFloat(num);
-    } else {
-        var val = parseFloat(num);
-        if (val == num) return val;
-    }
-}
-
-class JS_Parse_Error extends Error {
-    constructor(message, filename, line, col, pos) {
-        super();
-
-        this.name = "SyntaxError";
-        this.message = message;
-        this.filename = filename;
-        this.line = line;
-        this.col = col;
-        this.pos = pos;
-    }
-}
-
-function js_error(message, filename, line, col, pos) {
-    throw new JS_Parse_Error(message, filename, line, col, pos);
-}
-
-function is_token(token, type, val) {
-    return token.type == type && (val == null || token.value == val);
-}
-
-var EX_EOF = {};
-
-function tokenizer($TEXT, filename, html5_comments, shebang) {
-    var S = {
-        text            : $TEXT,
-        filename        : filename,
-        pos             : 0,
-        tokpos          : 0,
-        line            : 1,
-        tokline         : 0,
-        col             : 0,
-        tokcol          : 0,
-        newline_before  : false,
-        regex_allowed   : false,
-        brace_counter   : 0,
-        template_braces : [],
-        comments_before : [],
-        directives      : {},
-        directive_stack : []
-    };
-
-    function peek() { return get_full_char(S.text, S.pos); }
-
-    // Used because parsing ?. involves a lookahead for a digit
-    function is_option_chain_op() {
-        const must_be_dot = S.text.charCodeAt(S.pos + 1) === 46;
-        if (!must_be_dot) return false;
-
-        const cannot_be_digit = S.text.charCodeAt(S.pos + 2);
-        return cannot_be_digit < 48 || cannot_be_digit > 57;
-    }
-
-    function next(signal_eof, in_string) {
-        var ch = get_full_char(S.text, S.pos++);
-        if (signal_eof && !ch)
-            throw EX_EOF;
-        if (NEWLINE_CHARS.has(ch)) {
-            S.newline_before = S.newline_before || !in_string;
-            ++S.line;
-            S.col = 0;
-            if (ch == "\r" && peek() == "\n") {
-                // treat a \r\n sequence as a single \n
-                ++S.pos;
-                ch = "\n";
-            }
-        } else {
-            if (ch.length > 1) {
-                ++S.pos;
-                ++S.col;
-            }
-            ++S.col;
-        }
-        return ch;
-    }
-
-    function forward(i) {
-        while (i--) next();
-    }
-
-    function looking_at(str) {
-        return S.text.substr(S.pos, str.length) == str;
-    }
-
-    function find_eol() {
-        var text = S.text;
-        for (var i = S.pos, n = S.text.length; i < n; ++i) {
-            var ch = text[i];
-            if (NEWLINE_CHARS.has(ch))
-                return i;
-        }
-        return -1;
-    }
-
-    function find(what, signal_eof) {
-        var pos = S.text.indexOf(what, S.pos);
-        if (signal_eof && pos == -1) throw EX_EOF;
-        return pos;
-    }
-
-    function start_token() {
-        S.tokline = S.line;
-        S.tokcol = S.col;
-        S.tokpos = S.pos;
-    }
-
-    var prev_was_dot = false;
-    var previous_token = null;
-    function token(type, value, is_comment) {
-        S.regex_allowed = ((type == "operator" && !UNARY_POSTFIX.has(value)) ||
-                           (type == "keyword" && KEYWORDS_BEFORE_EXPRESSION.has(value)) ||
-                           (type == "punc" && PUNC_BEFORE_EXPRESSION.has(value))) ||
-                           (type == "arrow");
-        if (type == "punc" && (value == "." || value == "?.")) {
-            prev_was_dot = true;
-        } else if (!is_comment) {
-            prev_was_dot = false;
-        }
-        const line     = S.tokline;
-        const col      = S.tokcol;
-        const pos      = S.tokpos;
-        const nlb      = S.newline_before;
-        const file     = filename;
-        let comments_before = [];
-        let comments_after  = [];
-
-        if (!is_comment) {
-            comments_before = S.comments_before;
-            comments_after = S.comments_before = [];
-        }
-        S.newline_before = false;
-        const tok = new AST_Token(type, value, line, col, pos, nlb, comments_before, comments_after, file);
-
-        if (!is_comment) previous_token = tok;
-        return tok;
-    }
-
-    function skip_whitespace() {
-        while (WHITESPACE_CHARS.has(peek()))
-            next();
-    }
-
-    function read_while(pred) {
-        var ret = "", ch, i = 0;
-        while ((ch = peek()) && pred(ch, i++))
-            ret += next();
-        return ret;
-    }
-
-    function parse_error(err) {
-        js_error(err, filename, S.tokline, S.tokcol, S.tokpos);
-    }
-
-    function read_num(prefix) {
-        var has_e = false, after_e = false, has_x = false, has_dot = prefix == ".", is_big_int = false, numeric_separator = false;
-        var num = read_while(function(ch, i) {
-            if (is_big_int) return false;
-
-            var code = ch.charCodeAt(0);
-            switch (code) {
-              case 95: // _
-                return (numeric_separator = true);
-              case 98: case 66: // bB
-                return (has_x = true); // Can occur in hex sequence, don't return false yet
-              case 111: case 79: // oO
-              case 120: case 88: // xX
-                return has_x ? false : (has_x = true);
-              case 101: case 69: // eE
-                return has_x ? true : has_e ? false : (has_e = after_e = true);
-              case 45: // -
-                return after_e || (i == 0 && !prefix);
-              case 43: // +
-                return after_e;
-              case (after_e = false, 46): // .
-                return (!has_dot && !has_x && !has_e) ? (has_dot = true) : false;
-            }
-
-            if (ch === "n") {
-                is_big_int = true;
-
-                return true;
-            }
-
-            return RE_NUM_LITERAL.test(ch);
-        });
-        if (prefix) num = prefix + num;
-
-        LATEST_RAW = num;
-
-        if (RE_OCT_NUMBER.test(num) && next_token.has_directive("use strict")) {
-            parse_error("Legacy octal literals are not allowed in strict mode");
-        }
-        if (numeric_separator) {
-            if (num.endsWith("_")) {
-                parse_error("Numeric separators are not allowed at the end of numeric literals");
-            } else if (num.includes("__")) {
-                parse_error("Only one underscore is allowed as numeric separator");
-            }
-            num = num.replace(/_/g, "");
-        }
-        if (num.endsWith("n")) {
-            const without_n = num.slice(0, -1);
-            const allow_e = RE_HEX_NUMBER.test(without_n);
-            const valid = parse_js_number(without_n, allow_e);
-            if (!has_dot && RE_BIG_INT.test(num) && !isNaN(valid))
-                return token("big_int", without_n);
-            parse_error("Invalid or unexpected token");
-        }
-        var valid = parse_js_number(num);
-        if (!isNaN(valid)) {
-            return token("num", valid);
-        } else {
-            parse_error("Invalid syntax: " + num);
-        }
-    }
-
-    function is_octal(ch) {
-        return ch >= "0" && ch <= "7";
-    }
-
-    function read_escaped_char(in_string, strict_hex, template_string) {
-        var ch = next(true, in_string);
-        switch (ch.charCodeAt(0)) {
-          case 110 : return "\n";
-          case 114 : return "\r";
-          case 116 : return "\t";
-          case 98  : return "\b";
-          case 118 : return "\u000b"; // \v
-          case 102 : return "\f";
-          case 120 : return String.fromCharCode(hex_bytes(2, strict_hex)); // \x
-          case 117 : // \u
-            if (peek() == "{") {
-                next(true);
-                if (peek() === "}")
-                    parse_error("Expecting hex-character between {}");
-                while (peek() == "0") next(true); // No significance
-                var result, length = find("}", true) - S.pos;
-                // Avoid 32 bit integer overflow (1 << 32 === 1)
-                // We know first character isn't 0 and thus out of range anyway
-                if (length > 6 || (result = hex_bytes(length, strict_hex)) > 0x10FFFF) {
-                    parse_error("Unicode reference out of bounds");
-                }
-                next(true);
-                return from_char_code(result);
-            }
-            return String.fromCharCode(hex_bytes(4, strict_hex));
-          case 10  : return ""; // newline
-          case 13  :            // \r
-            if (peek() == "\n") { // DOS newline
-                next(true, in_string);
-                return "";
-            }
-        }
-        if (is_octal(ch)) {
-            if (template_string && strict_hex) {
-                const represents_null_character = ch === "0" && !is_octal(peek());
-                if (!represents_null_character) {
-                    parse_error("Octal escape sequences are not allowed in template strings");
-                }
-            }
-            return read_octal_escape_sequence(ch, strict_hex);
-        }
-        return ch;
-    }
-
-    function read_octal_escape_sequence(ch, strict_octal) {
-        // Read
-        var p = peek();
-        if (p >= "0" && p <= "7") {
-            ch += next(true);
-            if (ch[0] <= "3" && (p = peek()) >= "0" && p <= "7")
-                ch += next(true);
-        }
-
-        // Parse
-        if (ch === "0") return "\0";
-        if (ch.length > 0 && next_token.has_directive("use strict") && strict_octal)
-            parse_error("Legacy octal escape sequences are not allowed in strict mode");
-        return String.fromCharCode(parseInt(ch, 8));
-    }
-
-    function hex_bytes(n, strict_hex) {
-        var num = 0;
-        for (; n > 0; --n) {
-            if (!strict_hex && isNaN(parseInt(peek(), 16))) {
-                return parseInt(num, 16) || "";
-            }
-            var digit = next(true);
-            if (isNaN(parseInt(digit, 16)))
-                parse_error("Invalid hex-character pattern in string");
-            num += digit;
-        }
-        return parseInt(num, 16);
-    }
-
-    var read_string = with_eof_error("Unterminated string constant", function() {
-        const start_pos = S.pos;
-        var quote = next(), ret = [];
-        for (;;) {
-            var ch = next(true, true);
-            if (ch == "\\") ch = read_escaped_char(true, true);
-            else if (ch == "\r" || ch == "\n") parse_error("Unterminated string constant");
-            else if (ch == quote) break;
-            ret.push(ch);
-        }
-        var tok = token("string", ret.join(""));
-        LATEST_RAW = S.text.slice(start_pos, S.pos);
-        tok.quote = quote;
-        return tok;
-    });
-
-    var read_template_characters = with_eof_error("Unterminated template", function(begin) {
-        if (begin) {
-            S.template_braces.push(S.brace_counter);
-        }
-        var content = "", raw = "", ch, tok;
-        next(true, true);
-        while ((ch = next(true, true)) != "`") {
-            if (ch == "\r") {
-                if (peek() == "\n") ++S.pos;
-                ch = "\n";
-            } else if (ch == "$" && peek() == "{") {
-                next(true, true);
-                S.brace_counter++;
-                tok = token(begin ? "template_head" : "template_substitution", content);
-                TEMPLATE_RAWS.set(tok, raw);
-                tok.template_end = false;
-                return tok;
-            }
-
-            raw += ch;
-            if (ch == "\\") {
-                var tmp = S.pos;
-                var prev_is_tag = previous_token && (previous_token.type === "name" || previous_token.type === "punc" && (previous_token.value === ")" || previous_token.value === "]"));
-                ch = read_escaped_char(true, !prev_is_tag, true);
-                raw += S.text.substr(tmp, S.pos - tmp);
-            }
-
-            content += ch;
-        }
-        S.template_braces.pop();
-        tok = token(begin ? "template_head" : "template_substitution", content);
-        TEMPLATE_RAWS.set(tok, raw);
-        tok.template_end = true;
-        return tok;
-    });
-
-    function skip_line_comment(type) {
-        var regex_allowed = S.regex_allowed;
-        var i = find_eol(), ret;
-        if (i == -1) {
-            ret = S.text.substr(S.pos);
-            S.pos = S.text.length;
-        } else {
-            ret = S.text.substring(S.pos, i);
-            S.pos = i;
-        }
-        S.col = S.tokcol + (S.pos - S.tokpos);
-        S.comments_before.push(token(type, ret, true));
-        S.regex_allowed = regex_allowed;
-        return next_token;
-    }
-
-    var skip_multiline_comment = with_eof_error("Unterminated multiline comment", function() {
-        var regex_allowed = S.regex_allowed;
-        var i = find("*/", true);
-        var text = S.text.substring(S.pos, i).replace(/\r\n|\r|\u2028|\u2029/g, "\n");
-        // update stream position
-        forward(get_full_char_length(text) /* text length doesn't count \r\n as 2 char while S.pos - i does */ + 2);
-        S.comments_before.push(token("comment2", text, true));
-        S.newline_before = S.newline_before || text.includes("\n");
-        S.regex_allowed = regex_allowed;
-        return next_token;
-    });
-
-    var read_name = with_eof_error("Unterminated identifier name", function() {
-        var name = [], ch, escaped = false;
-        var read_escaped_identifier_char = function() {
-            escaped = true;
-            next();
-            if (peek() !== "u") {
-                parse_error("Expecting UnicodeEscapeSequence -- uXXXX or u{XXXX}");
-            }
-            return read_escaped_char(false, true);
-        };
-
-        // Read first character (ID_Start)
-        if ((ch = peek()) === "\\") {
-            ch = read_escaped_identifier_char();
-            if (!is_identifier_start(ch)) {
-                parse_error("First identifier char is an invalid identifier char");
-            }
-        } else if (is_identifier_start(ch)) {
-            next();
-        } else {
-            return "";
-        }
-
-        name.push(ch);
-
-        // Read ID_Continue
-        while ((ch = peek()) != null) {
-            if ((ch = peek()) === "\\") {
-                ch = read_escaped_identifier_char();
-                if (!is_identifier_char(ch)) {
-                    parse_error("Invalid escaped identifier char");
-                }
-            } else {
-                if (!is_identifier_char(ch)) {
-                    break;
-                }
-                next();
-            }
-            name.push(ch);
-        }
-        const name_str = name.join("");
-        if (RESERVED_WORDS.has(name_str) && escaped) {
-            parse_error("Escaped characters are not allowed in keywords");
-        }
-        return name_str;
-    });
-
-    var read_regexp = with_eof_error("Unterminated regular expression", function(source) {
-        var prev_backslash = false, ch, in_class = false;
-        while ((ch = next(true))) if (NEWLINE_CHARS.has(ch)) {
-            parse_error("Unexpected line terminator");
-        } else if (prev_backslash) {
-            source += "\\" + ch;
-            prev_backslash = false;
-        } else if (ch == "[") {
-            in_class = true;
-            source += ch;
-        } else if (ch == "]" && in_class) {
-            in_class = false;
-            source += ch;
-        } else if (ch == "/" && !in_class) {
-            break;
-        } else if (ch == "\\") {
-            prev_backslash = true;
-        } else {
-            source += ch;
-        }
-        const flags = read_name();
-        return token("regexp", "/" + source + "/" + flags);
-    });
-
-    function read_operator(prefix) {
-        function grow(op) {
-            if (!peek()) return op;
-            var bigger = op + peek();
-            if (OPERATORS.has(bigger)) {
-                next();
-                return grow(bigger);
-            } else {
-                return op;
-            }
-        }
-        return token("operator", grow(prefix || next()));
-    }
-
-    function handle_slash() {
-        next();
-        switch (peek()) {
-          case "/":
-            next();
-            return skip_line_comment("comment1");
-          case "*":
-            next();
-            return skip_multiline_comment();
-        }
-        return S.regex_allowed ? read_regexp("") : read_operator("/");
-    }
-
-    function handle_eq_sign() {
-        next();
-        if (peek() === ">") {
-            next();
-            return token("arrow", "=>");
-        } else {
-            return read_operator("=");
-        }
-    }
-
-    function handle_dot() {
-        next();
-        if (is_digit(peek().charCodeAt(0))) {
-            return read_num(".");
-        }
-        if (peek() === ".") {
-            next();  // Consume second dot
-            next();  // Consume third dot
-            return token("expand", "...");
-        }
-
-        return token("punc", ".");
-    }
-
-    function read_word() {
-        var word = read_name();
-        if (prev_was_dot) return token("name", word);
-        return KEYWORDS_ATOM.has(word) ? token("atom", word)
-            : !KEYWORDS.has(word) ? token("name", word)
-            : OPERATORS.has(word) ? token("operator", word)
-            : token("keyword", word);
-    }
-
-    function read_private_word() {
-        next();
-        return token("privatename", read_name());
-    }
-
-    function with_eof_error(eof_error, cont) {
-        return function(x) {
-            try {
-                return cont(x);
-            } catch(ex) {
-                if (ex === EX_EOF) parse_error(eof_error);
-                else throw ex;
-            }
-        };
-    }
-
-    function next_token(force_regexp) {
-        if (force_regexp != null)
-            return read_regexp(force_regexp);
-        if (shebang && S.pos == 0 && looking_at("#!")) {
-            start_token();
-            forward(2);
-            skip_line_comment("comment5");
-        }
-        for (;;) {
-            skip_whitespace();
-            start_token();
-            if (html5_comments) {
-                if (looking_at("<!--")) {
-                    forward(4);
-                    skip_line_comment("comment3");
-                    continue;
-                }
-                if (looking_at("-->") && S.newline_before) {
-                    forward(3);
-                    skip_line_comment("comment4");
-                    continue;
-                }
-            }
-            var ch = peek();
-            if (!ch) return token("eof");
-            var code = ch.charCodeAt(0);
-            switch (code) {
-              case 34: case 39: return read_string();
-              case 46: return handle_dot();
-              case 47: {
-                  var tok = handle_slash();
-                  if (tok === next_token) continue;
-                  return tok;
-              }
-              case 61: return handle_eq_sign();
-              case 63: {
-                  if (!is_option_chain_op()) break;  // Handled below
-
-                  next(); // ?
-                  next(); // .
-
-                  return token("punc", "?.");
-              }
-              case 96: return read_template_characters(true);
-              case 123:
-                S.brace_counter++;
-                break;
-              case 125:
-                S.brace_counter--;
-                if (S.template_braces.length > 0
-                    && S.template_braces[S.template_braces.length - 1] === S.brace_counter)
-                    return read_template_characters(false);
-                break;
-            }
-            if (is_digit(code)) return read_num();
-            if (PUNC_CHARS.has(ch)) return token("punc", next());
-            if (OPERATOR_CHARS.has(ch)) return read_operator();
-            if (code == 92 || is_identifier_start(ch)) return read_word();
-            if (code == 35) return read_private_word();
-            break;
-        }
-        parse_error("Unexpected character '" + ch + "'");
-    }
-
-    next_token.next = next;
-    next_token.peek = peek;
-
-    next_token.context = function(nc) {
-        if (nc) S = nc;
-        return S;
-    };
-
-    next_token.add_directive = function(directive) {
-        S.directive_stack[S.directive_stack.length - 1].push(directive);
-
-        if (S.directives[directive] === undefined) {
-            S.directives[directive] = 1;
-        } else {
-            S.directives[directive]++;
-        }
-    };
-
-    next_token.push_directives_stack = function() {
-        S.directive_stack.push([]);
-    };
-
-    next_token.pop_directives_stack = function() {
-        var directives = S.directive_stack[S.directive_stack.length - 1];
-
-        for (var i = 0; i < directives.length; i++) {
-            S.directives[directives[i]]--;
-        }
-
-        S.directive_stack.pop();
-    };
-
-    next_token.has_directive = function(directive) {
-        return S.directives[directive] > 0;
-    };
-
-    return next_token;
-
-}
-
-/* -----[ Parser (constants) ]----- */
-
-var UNARY_PREFIX = makePredicate([
-    "typeof",
-    "void",
-    "delete",
-    "--",
-    "++",
-    "!",
-    "~",
-    "-",
-    "+"
-]);
-
-var UNARY_POSTFIX = makePredicate([ "--", "++" ]);
-
-var ASSIGNMENT = makePredicate([ "=", "+=", "-=", "??=", "&&=", "||=", "/=", "*=", "**=", "%=", ">>=", "<<=", ">>>=", "|=", "^=", "&=" ]);
-
-var LOGICAL_ASSIGNMENT = makePredicate([ "??=", "&&=", "||=" ]);
-
-var PRECEDENCE = (function(a, ret) {
-    for (var i = 0; i < a.length; ++i) {
-        var b = a[i];
-        for (var j = 0; j < b.length; ++j) {
-            ret[b[j]] = i + 1;
-        }
-    }
-    return ret;
-})(
-    [
-        ["||"],
-        ["??"],
-        ["&&"],
-        ["|"],
-        ["^"],
-        ["&"],
-        ["==", "===", "!=", "!=="],
-        ["<", ">", "<=", ">=", "in", "instanceof"],
-        [">>", "<<", ">>>"],
-        ["+", "-"],
-        ["*", "/", "%"],
-        ["**"]
-    ],
-    {}
-);
-
-var ATOMIC_START_TOKEN = makePredicate([ "atom", "num", "big_int", "string", "regexp", "name" ]);
-
-/* -----[ Parser ]----- */
-
-function parse($TEXT, options) {
-    // maps start tokens to count of comments found outside of their parens
-    // Example: /* I count */ ( /* I don't */ foo() )
-    // Useful because comments_before property of call with parens outside
-    // contains both comments inside and outside these parens. Used to find the
-    
-    const outer_comments_before_counts = new WeakMap();
-
-    options = defaults(options, {
-        bare_returns   : false,
-        ecma           : null,  // Legacy
-        expression     : false,
-        filename       : null,
-        html5_comments : true,
-        module         : false,
-        shebang        : true,
-        strict         : false,
-        toplevel       : null,
-    }, true);
-
-    var S = {
-        input         : (typeof $TEXT == "string"
-                         ? tokenizer($TEXT, options.filename,
-                                     options.html5_comments, options.shebang)
-                         : $TEXT),
-        token         : null,
-        prev          : null,
-        peeked        : null,
-        in_function   : 0,
-        in_async      : -1,
-        in_generator  : -1,
-        in_directives : true,
-        in_loop       : 0,
-        labels        : []
-    };
-
-    S.token = next();
-
-    function is(type, value) {
-        return is_token(S.token, type, value);
-    }
-
-    function peek() { return S.peeked || (S.peeked = S.input()); }
-
-    function next() {
-        S.prev = S.token;
-
-        if (!S.peeked) peek();
-        S.token = S.peeked;
-        S.peeked = null;
-        S.in_directives = S.in_directives && (
-            S.token.type == "string" || is("punc", ";")
-        );
-        return S.token;
-    }
-
-    function prev() {
-        return S.prev;
-    }
-
-    function croak(msg, line, col, pos) {
-        var ctx = S.input.context();
-        js_error(msg,
-                 ctx.filename,
-                 line != null ? line : ctx.tokline,
-                 col != null ? col : ctx.tokcol,
-                 pos != null ? pos : ctx.tokpos);
-    }
-
-    function token_error(token, msg) {
-        croak(msg, token.line, token.col);
-    }
-
-    function unexpected(token) {
-        if (token == null)
-            token = S.token;
-        token_error(token, "Unexpected token: " + token.type + " (" + token.value + ")");
-    }
-
-    function expect_token(type, val) {
-        if (is(type, val)) {
-            return next();
-        }
-        token_error(S.token, "Unexpected token " + S.token.type + " «" + S.token.value + "»" + ", expected " + type + " «" + val + "»");
-    }
-
-    function expect(punc) { return expect_token("punc", punc); }
-
-    function has_newline_before(token) {
-        return token.nlb || !token.comments_before.every((comment) => !comment.nlb);
-    }
-
-    function can_insert_semicolon() {
-        return !options.strict
-            && (is("eof") || is("punc", "}") || has_newline_before(S.token));
-    }
-
-    function is_in_generator() {
-        return S.in_generator === S.in_function;
-    }
-
-    function is_in_async() {
-        return S.in_async === S.in_function;
-    }
-
-    function can_await() {
-        return (
-            S.in_async === S.in_function
-            || S.in_function === 0 && S.input.has_directive("use strict")
-        );
-    }
-
-    function semicolon(optional) {
-        if (is("punc", ";")) next();
-        else if (!optional && !can_insert_semicolon()) unexpected();
-    }
-
-    function parenthesised() {
-        expect("(");
-        var exp = expression(true);
-        expect(")");
-        return exp;
-    }
-
-    function embed_tokens(parser) {
-        return function _embed_tokens_wrapper(...args) {
-            const start = S.token;
-            const expr = parser(...args);
-            expr.start = start;
-            expr.end = prev();
-            return expr;
-        };
-    }
-
-    function handle_regexp() {
-        if (is("operator", "/") || is("operator", "/=")) {
-            S.peeked = null;
-            S.token = S.input(S.token.value.substr(1)); // force regexp
-        }
-    }
-
-    var statement = embed_tokens(function statement(is_export_default, is_for_body, is_if_body) {
-        handle_regexp();
-        switch (S.token.type) {
-          case "string":
-            if (S.in_directives) {
-                var token = peek();
-                if (!LATEST_RAW.includes("\\")
-                    && (is_token(token, "punc", ";")
-                        || is_token(token, "punc", "}")
-                        || has_newline_before(token)
-                        || is_token(token, "eof"))) {
-                    S.input.add_directive(S.token.value);
-                } else {
-                    S.in_directives = false;
-                }
-            }
-            var dir = S.in_directives, stat = simple_statement();
-            return dir && stat.body instanceof AST_String ? new AST_Directive(stat.body) : stat;
-          case "template_head":
-          case "num":
-          case "big_int":
-          case "regexp":
-          case "operator":
-          case "atom":
-            return simple_statement();
-
-          case "name":
-            if (S.token.value == "async" && is_token(peek(), "keyword", "function")) {
-                next();
-                next();
-                if (is_for_body) {
-                    croak("functions are not allowed as the body of a loop");
-                }
-                return function_(AST_Defun, false, true, is_export_default);
-            }
-            if (S.token.value == "import" && !is_token(peek(), "punc", "(") && !is_token(peek(), "punc", ".")) {
-                next();
-                var node = import_statement();
-                semicolon();
-                return node;
-            }
-            return is_token(peek(), "punc", ":")
-                ? labeled_statement()
-                : simple_statement();
-
-          case "punc":
-            switch (S.token.value) {
-              case "{":
-                return new AST_BlockStatement({
-                    start : S.token,
-                    body  : block_(),
-                    end   : prev()
-                });
-              case "[":
-              case "(":
-                return simple_statement();
-              case ";":
-                S.in_directives = false;
-                next();
-                return new AST_EmptyStatement();
-              default:
-                unexpected();
-            }
-
-          case "keyword":
-            switch (S.token.value) {
-              case "break":
-                next();
-                return break_cont(AST_Break);
-
-              case "continue":
-                next();
-                return break_cont(AST_Continue);
-
-              case "debugger":
-                next();
-                semicolon();
-                return new AST_Debugger();
-
-              case "do":
-                next();
-                var body = in_loop(statement);
-                expect_token("keyword", "while");
-                var condition = parenthesised();
-                semicolon(true);
-                return new AST_Do({
-                    body      : body,
-                    condition : condition
-                });
-
-              case "while":
-                next();
-                return new AST_While({
-                    condition : parenthesised(),
-                    body      : in_loop(function() { return statement(false, true); })
-                });
-
-              case "for":
-                next();
-                return for_();
-
-              case "class":
-                next();
-                if (is_for_body) {
-                    croak("classes are not allowed as the body of a loop");
-                }
-                if (is_if_body) {
-                    croak("classes are not allowed as the body of an if");
-                }
-                return class_(AST_DefClass, is_export_default);
-
-              case "function":
-                next();
-                if (is_for_body) {
-                    croak("functions are not allowed as the body of a loop");
-                }
-                return function_(AST_Defun, false, false, is_export_default);
-
-              case "if":
-                next();
-                return if_();
-
-              case "return":
-                if (S.in_function == 0 && !options.bare_returns)
-                    croak("'return' outside of function");
-                next();
-                var value = null;
-                if (is("punc", ";")) {
-                    next();
-                } else if (!can_insert_semicolon()) {
-                    value = expression(true);
-                    semicolon();
-                }
-                return new AST_Return({
-                    value: value
-                });
-
-              case "switch":
-                next();
-                return new AST_Switch({
-                    expression : parenthesised(),
-                    body       : in_loop(switch_body_)
-                });
-
-              case "throw":
-                next();
-                if (has_newline_before(S.token))
-                    croak("Illegal newline after 'throw'");
-                var value = expression(true);
-                semicolon();
-                return new AST_Throw({
-                    value: value
-                });
-
-              case "try":
-                next();
-                return try_();
-
-              case "var":
-                next();
-                var node = var_();
-                semicolon();
-                return node;
-
-              case "let":
-                next();
-                var node = let_();
-                semicolon();
-                return node;
-
-              case "const":
-                next();
-                var node = const_();
-                semicolon();
-                return node;
-
-              case "with":
-                if (S.input.has_directive("use strict")) {
-                    croak("Strict mode may not include a with statement");
-                }
-                next();
-                return new AST_With({
-                    expression : parenthesised(),
-                    body       : statement()
-                });
-
-              case "export":
-                if (!is_token(peek(), "punc", "(")) {
-                    next();
-                    var node = export_statement();
-                    if (is("punc", ";")) semicolon();
-                    return node;
-                }
-            }
-        }
-        unexpected();
-    });
-
-    function labeled_statement() {
-        var label = as_symbol(AST_Label);
-        if (label.name === "await" && is_in_async()) {
-            token_error(S.prev, "await cannot be used as label inside async function");
-        }
-        if (S.labels.some((l) => l.name === label.name)) {
-            // ECMA-262, 12.12: An ECMAScript program is considered
-            // syntactically incorrect if it contains a
-            // LabelledStatement that is enclosed by a
-            // LabelledStatement with the same Identifier as label.
-            croak("Label " + label.name + " defined twice");
-        }
-        expect(":");
-        S.labels.push(label);
-        var stat = statement();
-        S.labels.pop();
-        if (!(stat instanceof AST_IterationStatement)) {
-            // check for `continue` that refers to this label.
-            // those should be reported as syntax errors.
-            // https://github.com/mishoo/UglifyJS2/issues/287
-            label.references.forEach(function(ref) {
-                if (ref instanceof AST_Continue) {
-                    ref = ref.label.start;
-                    croak("Continue label `" + label.name + "` refers to non-IterationStatement.",
-                          ref.line, ref.col, ref.pos);
-                }
-            });
-        }
-        return new AST_LabeledStatement({ body: stat, label: label });
-    }
-
-    function simple_statement(tmp) {
-        return new AST_SimpleStatement({ body: (tmp = expression(true), semicolon(), tmp) });
-    }
-
-    function break_cont(type) {
-        var label = null, ldef;
-        if (!can_insert_semicolon()) {
-            label = as_symbol(AST_LabelRef, true);
-        }
-        if (label != null) {
-            ldef = S.labels.find((l) => l.name === label.name);
-            if (!ldef)
-                croak("Undefined label " + label.name);
-            label.thedef = ldef;
-        } else if (S.in_loop == 0)
-            croak(type.TYPE + " not inside a loop or switch");
-        semicolon();
-        var stat = new type({ label: label });
-        if (ldef) ldef.references.push(stat);
-        return stat;
-    }
-
-    function for_() {
-        var for_await_error = "`for await` invalid in this context";
-        var await_tok = S.token;
-        if (await_tok.type == "name" && await_tok.value == "await") {
-            if (!can_await()) {
-                token_error(await_tok, for_await_error);
-            }
-            next();
-        } else {
-            await_tok = false;
-        }
-        expect("(");
-        var init = null;
-        if (!is("punc", ";")) {
-            init =
-                is("keyword", "var") ? (next(), var_(true)) :
-                is("keyword", "let") ? (next(), let_(true)) :
-                is("keyword", "const") ? (next(), const_(true)) :
-                                       expression(true, true);
-            var is_in = is("operator", "in");
-            var is_of = is("name", "of");
-            if (await_tok && !is_of) {
-                token_error(await_tok, for_await_error);
-            }
-            if (is_in || is_of) {
-                if (init instanceof AST_Definitions) {
-                    if (init.definitions.length > 1)
-                        token_error(init.start, "Only one variable declaration allowed in for..in loop");
-                } else if (!(is_assignable(init) || (init = to_destructuring(init)) instanceof AST_Destructuring)) {
-                    token_error(init.start, "Invalid left-hand side in for..in loop");
-                }
-                next();
-                if (is_in) {
-                    return for_in(init);
-                } else {
-                    return for_of(init, !!await_tok);
-                }
-            }
-        } else if (await_tok) {
-            token_error(await_tok, for_await_error);
-        }
-        return regular_for(init);
-    }
-
-    function regular_for(init) {
-        expect(";");
-        var test = is("punc", ";") ? null : expression(true);
-        expect(";");
-        var step = is("punc", ")") ? null : expression(true);
-        expect(")");
-        return new AST_For({
-            init      : init,
-            condition : test,
-            step      : step,
-            body      : in_loop(function() { return statement(false, true); })
-        });
-    }
-
-    function for_of(init, is_await) {
-        var lhs = init instanceof AST_Definitions ? init.definitions[0].name : null;
-        var obj = expression(true);
-        expect(")");
-        return new AST_ForOf({
-            await  : is_await,
-            init   : init,
-            name   : lhs,
-            object : obj,
-            body   : in_loop(function() { return statement(false, true); })
-        });
-    }
-
-    function for_in(init) {
-        var obj = expression(true);
-        expect(")");
-        return new AST_ForIn({
-            init   : init,
-            object : obj,
-            body   : in_loop(function() { return statement(false, true); })
-        });
-    }
-
-    var arrow_function = function(start, argnames, is_async) {
-        if (has_newline_before(S.token)) {
-            croak("Unexpected newline before arrow (=>)");
-        }
-
-        expect_token("arrow", "=>");
-
-        var body = _function_body(is("punc", "{"), false, is_async);
-
-        var end =
-            body instanceof Array && body.length ? body[body.length - 1].end :
-            body instanceof Array ? start :
-                body.end;
-
-        return new AST_Arrow({
-            start    : start,
-            end      : end,
-            async    : is_async,
-            argnames : argnames,
-            body     : body
-        });
-    };
-
-    var function_ = function(ctor, is_generator_property, is_async, is_export_default) {
-        var in_statement = ctor === AST_Defun;
-        var is_generator = is("operator", "*");
-        if (is_generator) {
-            next();
-        }
-
-        var name = is("name") ? as_symbol(in_statement ? AST_SymbolDefun : AST_SymbolLambda) : null;
-        if (in_statement && !name) {
-            if (is_export_default) {
-                ctor = AST_Function;
-            } else {
-                unexpected();
-            }
-        }
-
-        if (name && ctor !== AST_Accessor && !(name instanceof AST_SymbolDeclaration))
-            unexpected(prev());
-
-        var args = [];
-        var body = _function_body(true, is_generator || is_generator_property, is_async, name, args);
-        return new ctor({
-            start : args.start,
-            end   : body.end,
-            is_generator: is_generator,
-            async : is_async,
-            name  : name,
-            argnames: args,
-            body  : body
-        });
-    };
-
-    class UsedParametersTracker {
-        constructor(is_parameter, strict, duplicates_ok = false) {
-            this.is_parameter = is_parameter;
-            this.duplicates_ok = duplicates_ok;
-            this.parameters = new Set();
-            this.duplicate = null;
-            this.default_assignment = false;
-            this.spread = false;
-            this.strict_mode = !!strict;
-        }
-        add_parameter(token) {
-            if (this.parameters.has(token.value)) {
-                if (this.duplicate === null) {
-                    this.duplicate = token;
-                }
-                this.check_strict();
-            } else {
-                this.parameters.add(token.value);
-                if (this.is_parameter) {
-                    switch (token.value) {
-                      case "arguments":
-                      case "eval":
-                      case "yield":
-                        if (this.strict_mode) {
-                            token_error(token, "Unexpected " + token.value + " identifier as parameter inside strict mode");
-                        }
-                        break;
-                      default:
-                        if (RESERVED_WORDS.has(token.value)) {
-                            unexpected();
-                        }
-                    }
-                }
-            }
-        }
-        mark_default_assignment(token) {
-            if (this.default_assignment === false) {
-                this.default_assignment = token;
-            }
-        }
-        mark_spread(token) {
-            if (this.spread === false) {
-                this.spread = token;
-            }
-        }
-        mark_strict_mode() {
-            this.strict_mode = true;
-        }
-        is_strict() {
-            return this.default_assignment !== false || this.spread !== false || this.strict_mode;
-        }
-        check_strict() {
-            if (this.is_strict() && this.duplicate !== null && !this.duplicates_ok) {
-                token_error(this.duplicate, "Parameter " + this.duplicate.value + " was used already");
-            }
-        }
-    }
-
-    function parameters(params) {
-        var used_parameters = new UsedParametersTracker(true, S.input.has_directive("use strict"));
-
-        expect("(");
-
-        while (!is("punc", ")")) {
-            var param = parameter(used_parameters);
-            params.push(param);
-
-            if (!is("punc", ")")) {
-                expect(",");
-            }
-
-            if (param instanceof AST_Expansion) {
-                break;
-            }
-        }
-
-        next();
-    }
-
-    function parameter(used_parameters, symbol_type) {
-        var param;
-        var expand = false;
-        if (used_parameters === undefined) {
-            used_parameters = new UsedParametersTracker(true, S.input.has_directive("use strict"));
-        }
-        if (is("expand", "...")) {
-            expand = S.token;
-            used_parameters.mark_spread(S.token);
-            next();
-        }
-        param = binding_element(used_parameters, symbol_type);
-
-        if (is("operator", "=") && expand === false) {
-            used_parameters.mark_default_assignment(S.token);
-            next();
-            param = new AST_DefaultAssign({
-                start: param.start,
-                left: param,
-                operator: "=",
-                right: expression(false),
-                end: S.token
-            });
-        }
-
-        if (expand !== false) {
-            if (!is("punc", ")")) {
-                unexpected();
-            }
-            param = new AST_Expansion({
-                start: expand,
-                expression: param,
-                end: expand
-            });
-        }
-        used_parameters.check_strict();
-
-        return param;
-    }
-
-    function binding_element(used_parameters, symbol_type) {
-        var elements = [];
-        var first = true;
-        var is_expand = false;
-        var expand_token;
-        var first_token = S.token;
-        if (used_parameters === undefined) {
-            const strict = S.input.has_directive("use strict");
-            const duplicates_ok = symbol_type === AST_SymbolVar;
-            used_parameters = new UsedParametersTracker(false, strict, duplicates_ok);
-        }
-        symbol_type = symbol_type === undefined ? AST_SymbolFunarg : symbol_type;
-        if (is("punc", "[")) {
-            next();
-            while (!is("punc", "]")) {
-                if (first) {
-                    first = false;
-                } else {
-                    expect(",");
-                }
-
-                if (is("expand", "...")) {
-                    is_expand = true;
-                    expand_token = S.token;
-                    used_parameters.mark_spread(S.token);
-                    next();
-                }
-                if (is("punc")) {
-                    switch (S.token.value) {
-                      case ",":
-                        elements.push(new AST_Hole({
-                            start: S.token,
-                            end: S.token
-                        }));
-                        continue;
-                      case "]": // Trailing comma after last element
-                        break;
-                      case "[":
-                      case "{":
-                        elements.push(binding_element(used_parameters, symbol_type));
-                        break;
-                      default:
-                        unexpected();
-                    }
-                } else if (is("name")) {
-                    used_parameters.add_parameter(S.token);
-                    elements.push(as_symbol(symbol_type));
-                } else {
-                    croak("Invalid function parameter");
-                }
-                if (is("operator", "=") && is_expand === false) {
-                    used_parameters.mark_default_assignment(S.token);
-                    next();
-                    elements[elements.length - 1] = new AST_DefaultAssign({
-                        start: elements[elements.length - 1].start,
-                        left: elements[elements.length - 1],
-                        operator: "=",
-                        right: expression(false),
-                        end: S.token
-                    });
-                }
-                if (is_expand) {
-                    if (!is("punc", "]")) {
-                        croak("Rest element must be last element");
-                    }
-                    elements[elements.length - 1] = new AST_Expansion({
-                        start: expand_token,
-                        expression: elements[elements.length - 1],
-                        end: expand_token
-                    });
-                }
-            }
-            expect("]");
-            used_parameters.check_strict();
-            return new AST_Destructuring({
-                start: first_token,
-                names: elements,
-                is_array: true,
-                end: prev()
-            });
-        } else if (is("punc", "{")) {
-            next();
-            while (!is("punc", "}")) {
-                if (first) {
-                    first = false;
-                } else {
-                    expect(",");
-                }
-                if (is("expand", "...")) {
-                    is_expand = true;
-                    expand_token = S.token;
-                    used_parameters.mark_spread(S.token);
-                    next();
-                }
-                if (is("name") && (is_token(peek(), "punc") || is_token(peek(), "operator")) && [",", "}", "="].includes(peek().value)) {
-                    used_parameters.add_parameter(S.token);
-                    var start = prev();
-                    var value = as_symbol(symbol_type);
-                    if (is_expand) {
-                        elements.push(new AST_Expansion({
-                            start: expand_token,
-                            expression: value,
-                            end: value.end,
-                        }));
-                    } else {
-                        elements.push(new AST_ObjectKeyVal({
-                            start: start,
-                            key: value.name,
-                            value: value,
-                            end: value.end,
-                        }));
-                    }
-                } else if (is("punc", "}")) {
-                    continue; // Allow trailing hole
-                } else {
-                    var property_token = S.token;
-                    var property = as_property_name();
-                    if (property === null) {
-                        unexpected(prev());
-                    } else if (prev().type === "name" && !is("punc", ":")) {
-                        elements.push(new AST_ObjectKeyVal({
-                            start: prev(),
-                            key: property,
-                            value: new symbol_type({
-                                start: prev(),
-                                name: property,
-                                end: prev()
-                            }),
-                            end: prev()
-                        }));
-                    } else {
-                        expect(":");
-                        elements.push(new AST_ObjectKeyVal({
-                            start: property_token,
-                            quote: property_token.quote,
-                            key: property,
-                            value: binding_element(used_parameters, symbol_type),
-                            end: prev()
-                        }));
-                    }
-                }
-                if (is_expand) {
-                    if (!is("punc", "}")) {
-                        croak("Rest element must be last element");
-                    }
-                } else if (is("operator", "=")) {
-                    used_parameters.mark_default_assignment(S.token);
-                    next();
-                    elements[elements.length - 1].value = new AST_DefaultAssign({
-                        start: elements[elements.length - 1].value.start,
-                        left: elements[elements.length - 1].value,
-                        operator: "=",
-                        right: expression(false),
-                        end: S.token
-                    });
-                }
-            }
-            expect("}");
-            used_parameters.check_strict();
-            return new AST_Destructuring({
-                start: first_token,
-                names: elements,
-                is_array: false,
-                end: prev()
-            });
-        } else if (is("name")) {
-            used_parameters.add_parameter(S.token);
-            return as_symbol(symbol_type);
-        } else {
-            croak("Invalid function parameter");
-        }
-    }
-
-    function params_or_seq_(allow_arrows, maybe_sequence) {
-        var spread_token;
-        var invalid_sequence;
-        var trailing_comma;
-        var a = [];
-        expect("(");
-        while (!is("punc", ")")) {
-            if (spread_token) unexpected(spread_token);
-            if (is("expand", "...")) {
-                spread_token = S.token;
-                if (maybe_sequence) invalid_sequence = S.token;
-                next();
-                a.push(new AST_Expansion({
-                    start: prev(),
-                    expression: expression(),
-                    end: S.token,
-                }));
-            } else {
-                a.push(expression());
-            }
-            if (!is("punc", ")")) {
-                expect(",");
-                if (is("punc", ")")) {
-                    trailing_comma = prev();
-                    if (maybe_sequence) invalid_sequence = trailing_comma;
-                }
-            }
-        }
-        expect(")");
-        if (allow_arrows && is("arrow", "=>")) {
-            if (spread_token && trailing_comma) unexpected(trailing_comma);
-        } else if (invalid_sequence) {
-            unexpected(invalid_sequence);
-        }
-        return a;
-    }
-
-    function _function_body(block, generator, is_async, name, args) {
-        var loop = S.in_loop;
-        var labels = S.labels;
-        var current_generator = S.in_generator;
-        var current_async = S.in_async;
-        ++S.in_function;
-        if (generator)
-            S.in_generator = S.in_function;
-        if (is_async)
-            S.in_async = S.in_function;
-        if (args) parameters(args);
-        if (block)
-            S.in_directives = true;
-        S.in_loop = 0;
-        S.labels = [];
-        if (block) {
-            S.input.push_directives_stack();
-            var a = block_();
-            if (name) _verify_symbol(name);
-            if (args) args.forEach(_verify_symbol);
-            S.input.pop_directives_stack();
-        } else {
-            var a = [new AST_Return({
-                start: S.token,
-                value: expression(false),
-                end: S.token
-            })];
-        }
-        --S.in_function;
-        S.in_loop = loop;
-        S.labels = labels;
-        S.in_generator = current_generator;
-        S.in_async = current_async;
-        return a;
-    }
-
-    function _await_expression() {
-        // Previous token must be "await" and not be interpreted as an identifier
-        if (!can_await()) {
-            croak("Unexpected await expression outside async function",
-                S.prev.line, S.prev.col, S.prev.pos);
-        }
-        // the await expression is parsed as a unary expression in Babel
-        return new AST_Await({
-            start: prev(),
-            end: S.token,
-            expression : maybe_unary(true),
-        });
-    }
-
-    function _yield_expression() {
-        // Previous token must be keyword yield and not be interpret as an identifier
-        if (!is_in_generator()) {
-            croak("Unexpected yield expression outside generator function",
-                S.prev.line, S.prev.col, S.prev.pos);
-        }
-        var start = S.token;
-        var star = false;
-        var has_expression = true;
-
-        // Attempt to get expression or star (and then the mandatory expression)
-        // behind yield on the same line.
-        //
-        // If nothing follows on the same line of the yieldExpression,
-        // it should default to the value `undefined` for yield to return.
-        // In that case, the `undefined` stored as `null` in ast.
-        //
-        // Note 1: It isn't allowed for yield* to close without an expression
-        // Note 2: If there is a nlb between yield and star, it is interpret as
-        //         yield <explicit undefined> <inserted automatic semicolon> *
-        if (can_insert_semicolon() ||
-            (is("punc") && PUNC_AFTER_EXPRESSION.has(S.token.value))) {
-            has_expression = false;
-
-        } else if (is("operator", "*")) {
-            star = true;
-            next();
-        }
-
-        return new AST_Yield({
-            start      : start,
-            is_star    : star,
-            expression : has_expression ? expression() : null,
-            end        : prev()
-        });
-    }
-
-    function if_() {
-        var cond = parenthesised(), body = statement(false, false, true), belse = null;
-        if (is("keyword", "else")) {
-            next();
-            belse = statement(false, false, true);
-        }
-        return new AST_If({
-            condition   : cond,
-            body        : body,
-            alternative : belse
-        });
-    }
-
-    function block_() {
-        expect("{");
-        var a = [];
-        while (!is("punc", "}")) {
-            if (is("eof")) unexpected();
-            a.push(statement());
-        }
-        next();
-        return a;
-    }
-
-    function switch_body_() {
-        expect("{");
-        var a = [], cur = null, branch = null, tmp;
-        while (!is("punc", "}")) {
-            if (is("eof")) unexpected();
-            if (is("keyword", "case")) {
-                if (branch) branch.end = prev();
-                cur = [];
-                branch = new AST_Case({
-                    start      : (tmp = S.token, next(), tmp),
-                    expression : expression(true),
-                    body       : cur
-                });
-                a.push(branch);
-                expect(":");
-            } else if (is("keyword", "default")) {
-                if (branch) branch.end = prev();
-                cur = [];
-                branch = new AST_Default({
-                    start : (tmp = S.token, next(), expect(":"), tmp),
-                    body  : cur
-                });
-                a.push(branch);
-            } else {
-                if (!cur) unexpected();
-                cur.push(statement());
-            }
-        }
-        if (branch) branch.end = prev();
-        next();
-        return a;
-    }
-
-    function try_() {
-        var body = block_(), bcatch = null, bfinally = null;
-        if (is("keyword", "catch")) {
-            var start = S.token;
-            next();
-            if (is("punc", "{")) {
-                var name = null;
-            } else {
-                expect("(");
-                var name = parameter(undefined, AST_SymbolCatch);
-                expect(")");
-            }
-            bcatch = new AST_Catch({
-                start   : start,
-                argname : name,
-                body    : block_(),
-                end     : prev()
-            });
-        }
-        if (is("keyword", "finally")) {
-            var start = S.token;
-            next();
-            bfinally = new AST_Finally({
-                start : start,
-                body  : block_(),
-                end   : prev()
-            });
-        }
-        if (!bcatch && !bfinally)
-            croak("Missing catch/finally blocks");
-        return new AST_Try({
-            body     : body,
-            bcatch   : bcatch,
-            bfinally : bfinally
-        });
-    }
-
-    function vardefs(no_in, kind) {
-        var a = [];
-        var def;
-        for (;;) {
-            var sym_type =
-                kind === "var" ? AST_SymbolVar :
-                kind === "const" ? AST_SymbolConst :
-                kind === "let" ? AST_SymbolLet : null;
-            if (is("punc", "{") || is("punc", "[")) {
-                def = new AST_VarDef({
-                    start: S.token,
-                    name: binding_element(undefined, sym_type),
-                    value: is("operator", "=") ? (expect_token("operator", "="), expression(false, no_in)) : null,
-                    end: prev()
-                });
-            } else {
-                def = new AST_VarDef({
-                    start : S.token,
-                    name  : as_symbol(sym_type),
-                    value : is("operator", "=")
-                        ? (next(), expression(false, no_in))
-                        : !no_in && kind === "const"
-                            ? croak("Missing initializer in const declaration") : null,
-                    end   : prev()
-                });
-                if (def.name.name == "import") croak("Unexpected token: import");
-            }
-            a.push(def);
-            if (!is("punc", ","))
-                break;
-            next();
-        }
-        return a;
-    }
-
-    var var_ = function(no_in) {
-        return new AST_Var({
-            start       : prev(),
-            definitions : vardefs(no_in, "var"),
-            end         : prev()
-        });
-    };
-
-    var let_ = function(no_in) {
-        return new AST_Let({
-            start       : prev(),
-            definitions : vardefs(no_in, "let"),
-            end         : prev()
-        });
-    };
-
-    var const_ = function(no_in) {
-        return new AST_Const({
-            start       : prev(),
-            definitions : vardefs(no_in, "const"),
-            end         : prev()
-        });
-    };
-
-    var new_ = function(allow_calls) {
-        var start = S.token;
-        expect_token("operator", "new");
-        if (is("punc", ".")) {
-            next();
-            expect_token("name", "target");
-            return subscripts(new AST_NewTarget({
-                start : start,
-                end   : prev()
-            }), allow_calls);
-        }
-        var newexp = expr_atom(false), args;
-        if (is("punc", "(")) {
-            next();
-            args = expr_list(")", true);
-        } else {
-            args = [];
-        }
-        var call = new AST_New({
-            start      : start,
-            expression : newexp,
-            args       : args,
-            end        : prev()
-        });
-        annotate(call);
-        return subscripts(call, allow_calls);
-    };
-
-    function as_atom_node() {
-        var tok = S.token, ret;
-        switch (tok.type) {
-          case "name":
-            ret = _make_symbol(AST_SymbolRef);
-            break;
-          case "num":
-            ret = new AST_Number({
-                start: tok,
-                end: tok,
-                value: tok.value,
-                raw: LATEST_RAW
-            });
-            break;
-          case "big_int":
-            ret = new AST_BigInt({ start: tok, end: tok, value: tok.value });
-            break;
-          case "string":
-            ret = new AST_String({
-                start : tok,
-                end   : tok,
-                value : tok.value,
-                quote : tok.quote
-            });
-            break;
-          case "regexp":
-            const [_, source, flags] = tok.value.match(/^\/(.*)\/(\w*)$/);
-
-            ret = new AST_RegExp({ start: tok, end: tok, value: { source, flags } });
-            break;
-          case "atom":
-            switch (tok.value) {
-              case "false":
-                ret = new AST_False({ start: tok, end: tok });
-                break;
-              case "true":
-                ret = new AST_True({ start: tok, end: tok });
-                break;
-              case "null":
-                ret = new AST_Null({ start: tok, end: tok });
-                break;
-            }
-            break;
-        }
-        next();
-        return ret;
-    }
-
-    function to_fun_args(ex, default_seen_above) {
-        var insert_default = function(ex, default_value) {
-            if (default_value) {
-                return new AST_DefaultAssign({
-                    start: ex.start,
-                    left: ex,
-                    operator: "=",
-                    right: default_value,
-                    end: default_value.end
-                });
-            }
-            return ex;
-        };
-        if (ex instanceof AST_Object) {
-            return insert_default(new AST_Destructuring({
-                start: ex.start,
-                end: ex.end,
-                is_array: false,
-                names: ex.properties.map(prop => to_fun_args(prop))
-            }), default_seen_above);
-        } else if (ex instanceof AST_ObjectKeyVal) {
-            ex.value = to_fun_args(ex.value);
-            return insert_default(ex, default_seen_above);
-        } else if (ex instanceof AST_Hole) {
-            return ex;
-        } else if (ex instanceof AST_Destructuring) {
-            ex.names = ex.names.map(name => to_fun_args(name));
-            return insert_default(ex, default_seen_above);
-        } else if (ex instanceof AST_SymbolRef) {
-            return insert_default(new AST_SymbolFunarg({
-                name: ex.name,
-                start: ex.start,
-                end: ex.end
-            }), default_seen_above);
-        } else if (ex instanceof AST_Expansion) {
-            ex.expression = to_fun_args(ex.expression);
-            return insert_default(ex, default_seen_above);
-        } else if (ex instanceof AST_Array) {
-            return insert_default(new AST_Destructuring({
-                start: ex.start,
-                end: ex.end,
-                is_array: true,
-                names: ex.elements.map(elm => to_fun_args(elm))
-            }), default_seen_above);
-        } else if (ex instanceof AST_Assign) {
-            return insert_default(to_fun_args(ex.left, ex.right), default_seen_above);
-        } else if (ex instanceof AST_DefaultAssign) {
-            ex.left = to_fun_args(ex.left);
-            return ex;
-        } else {
-            croak("Invalid function parameter", ex.start.line, ex.start.col);
-        }
-    }
-
-    var expr_atom = function(allow_calls, allow_arrows) {
-        if (is("operator", "new")) {
-            return new_(allow_calls);
-        }
-        if (is("operator", "import")) {
-            return import_meta();
-        }
-        var start = S.token;
-        var peeked;
-        var async = is("name", "async")
-            && (peeked = peek()).value != "["
-            && peeked.type != "arrow"
-            && as_atom_node();
-        if (is("punc")) {
-            switch (S.token.value) {
-              case "(":
-                if (async && !allow_calls) break;
-                var exprs = params_or_seq_(allow_arrows, !async);
-                if (allow_arrows && is("arrow", "=>")) {
-                    return arrow_function(start, exprs.map(e => to_fun_args(e)), !!async);
-                }
-                var ex = async ? new AST_Call({
-                    expression: async,
-                    args: exprs
-                }) : exprs.length == 1 ? exprs[0] : new AST_Sequence({
-                    expressions: exprs
-                });
-                if (ex.start) {
-                    const outer_comments_before = start.comments_before.length;
-                    outer_comments_before_counts.set(start, outer_comments_before);
-                    ex.start.comments_before.unshift(...start.comments_before);
-                    start.comments_before = ex.start.comments_before;
-                    if (outer_comments_before == 0 && start.comments_before.length > 0) {
-                        var comment = start.comments_before[0];
-                        if (!comment.nlb) {
-                            comment.nlb = start.nlb;
-                            start.nlb = false;
-                        }
-                    }
-                    start.comments_after = ex.start.comments_after;
-                }
-                ex.start = start;
-                var end = prev();
-                if (ex.end) {
-                    end.comments_before = ex.end.comments_before;
-                    ex.end.comments_after.push(...end.comments_after);
-                    end.comments_after = ex.end.comments_after;
-                }
-                ex.end = end;
-                if (ex instanceof AST_Call) annotate(ex);
-                return subscripts(ex, allow_calls);
-              case "[":
-                return subscripts(array_(), allow_calls);
-              case "{":
-                return subscripts(object_or_destructuring_(), allow_calls);
-            }
-            if (!async) unexpected();
-        }
-        if (allow_arrows && is("name") && is_token(peek(), "arrow")) {
-            var param = new AST_SymbolFunarg({
-                name: S.token.value,
-                start: start,
-                end: start,
-            });
-            next();
-            return arrow_function(start, [param], !!async);
-        }
-        if (is("keyword", "function")) {
-            next();
-            var func = function_(AST_Function, false, !!async);
-            func.start = start;
-            func.end = prev();
-            return subscripts(func, allow_calls);
-        }
-        if (async) return subscripts(async, allow_calls);
-        if (is("keyword", "class")) {
-            next();
-            var cls = class_(AST_ClassExpression);
-            cls.start = start;
-            cls.end = prev();
-            return subscripts(cls, allow_calls);
-        }
-        if (is("template_head")) {
-            return subscripts(template_string(), allow_calls);
-        }
-        if (ATOMIC_START_TOKEN.has(S.token.type)) {
-            return subscripts(as_atom_node(), allow_calls);
-        }
-        unexpected();
-    };
-
-    function template_string() {
-        var segments = [], start = S.token;
-
-        segments.push(new AST_TemplateSegment({
-            start: S.token,
-            raw: TEMPLATE_RAWS.get(S.token),
-            value: S.token.value,
-            end: S.token
-        }));
-
-        while (!S.token.template_end) {
-            next();
-            handle_regexp();
-            segments.push(expression(true));
-
-            segments.push(new AST_TemplateSegment({
-                start: S.token,
-                raw: TEMPLATE_RAWS.get(S.token),
-                value: S.token.value,
-                end: S.token
-            }));
-        }
-        next();
-
-        return new AST_TemplateString({
-            start: start,
-            segments: segments,
-            end: S.token
-        });
-    }
-
-    function expr_list(closing, allow_trailing_comma, allow_empty) {
-        var first = true, a = [];
-        while (!is("punc", closing)) {
-            if (first) first = false; else expect(",");
-            if (allow_trailing_comma && is("punc", closing)) break;
-            if (is("punc", ",") && allow_empty) {
-                a.push(new AST_Hole({ start: S.token, end: S.token }));
-            } else if (is("expand", "...")) {
-                next();
-                a.push(new AST_Expansion({start: prev(), expression: expression(),end: S.token}));
-            } else {
-                a.push(expression(false));
-            }
-        }
-        next();
-        return a;
-    }
-
-    var array_ = embed_tokens(function() {
-        expect("[");
-        return new AST_Array({
-            elements: expr_list("]", !options.strict, true)
-        });
-    });
-
-    var create_accessor = embed_tokens((is_generator, is_async) => {
-        return function_(AST_Accessor, is_generator, is_async);
-    });
-
-    var object_or_destructuring_ = embed_tokens(function object_or_destructuring_() {
-        var start = S.token, first = true, a = [];
-        expect("{");
-        while (!is("punc", "}")) {
-            if (first) first = false; else expect(",");
-            if (!options.strict && is("punc", "}"))
-                // allow trailing comma
-                break;
-
-            start = S.token;
-            if (start.type == "expand") {
-                next();
-                a.push(new AST_Expansion({
-                    start: start,
-                    expression: expression(false),
-                    end: prev(),
-                }));
-                continue;
-            }
-
-            var name = as_property_name();
-            var value;
-
-            // Check property and fetch value
-            if (!is("punc", ":")) {
-                var concise = concise_method_or_getset(name, start);
-                if (concise) {
-                    a.push(concise);
-                    continue;
-                }
-
-                value = new AST_SymbolRef({
-                    start: prev(),
-                    name: name,
-                    end: prev()
-                });
-            } else if (name === null) {
-                unexpected(prev());
-            } else {
-                next(); // `:` - see first condition
-                value = expression(false);
-            }
-
-            // Check for default value and alter value accordingly if necessary
-            if (is("operator", "=")) {
-                next();
-                value = new AST_Assign({
-                    start: start,
-                    left: value,
-                    operator: "=",
-                    right: expression(false),
-                    logical: false,
-                    end: prev()
-                });
-            }
-
-            // Create property
-            a.push(new AST_ObjectKeyVal({
-                start: start,
-                quote: start.quote,
-                key: name instanceof AST_Node ? name : "" + name,
-                value: value,
-                end: prev()
-            }));
-        }
-        next();
-        return new AST_Object({ properties: a });
-    });
-
-    function class_(KindOfClass, is_export_default) {
-        var start, method, class_name, extends_, a = [];
-
-        S.input.push_directives_stack(); // Push directive stack, but not scope stack
-        S.input.add_directive("use strict");
-
-        if (S.token.type == "name" && S.token.value != "extends") {
-            class_name = as_symbol(KindOfClass === AST_DefClass ? AST_SymbolDefClass : AST_SymbolClass);
-        }
-
-        if (KindOfClass === AST_DefClass && !class_name) {
-            if (is_export_default) {
-                KindOfClass = AST_ClassExpression;
-            } else {
-                unexpected();
-            }
-        }
-
-        if (S.token.value == "extends") {
-            next();
-            extends_ = expression(true);
-        }
-
-        expect("{");
-
-        while (is("punc", ";")) { next(); }  // Leading semicolons are okay in class bodies.
-        while (!is("punc", "}")) {
-            start = S.token;
-            method = concise_method_or_getset(as_property_name(), start, true);
-            if (!method) { unexpected(); }
-            a.push(method);
-            while (is("punc", ";")) { next(); }
-        }
-
-        S.input.pop_directives_stack();
-
-        next();
-
-        return new KindOfClass({
-            start: start,
-            name: class_name,
-            extends: extends_,
-            properties: a,
-            end: prev(),
-        });
-    }
-
-    function concise_method_or_getset(name, start, is_class) {
-        const get_symbol_ast = (name, SymbolClass = AST_SymbolMethod) => {
-            if (typeof name === "string" || typeof name === "number") {
-                return new SymbolClass({
-                    start,
-                    name: "" + name,
-                    end: prev()
-                });
-            } else if (name === null) {
-                unexpected();
-            }
-            return name;
-        };
-
-        const is_not_method_start = () =>
-            !is("punc", "(") && !is("punc", ",") && !is("punc", "}") && !is("punc", ";") && !is("operator", "=");
-
-        var is_async = false;
-        var is_static = false;
-        var is_generator = false;
-        var is_private = false;
-        var accessor_type = null;
-
-        if (is_class && name === "static" && is_not_method_start()) {
-            const static_block = class_static_block();
-            if (static_block != null) {
-                return static_block;
-            }
-            is_static = true;
-            name = as_property_name();
-        }
-        if (name === "async" && is_not_method_start()) {
-            is_async = true;
-            name = as_property_name();
-        }
-        if (prev().type === "operator" && prev().value === "*") {
-            is_generator = true;
-            name = as_property_name();
-        }
-        if ((name === "get" || name === "set") && is_not_method_start()) {
-            accessor_type = name;
-            name = as_property_name();
-        }
-        if (prev().type === "privatename") {
-            is_private = true;
-        }
-
-        const property_token = prev();
-
-        if (accessor_type != null) {
-            if (!is_private) {
-                const AccessorClass = accessor_type === "get"
-                    ? AST_ObjectGetter
-                    : AST_ObjectSetter;
-
-                name = get_symbol_ast(name);
-                return new AccessorClass({
-                    start,
-                    static: is_static,
-                    key: name,
-                    quote: name instanceof AST_SymbolMethod ? property_token.quote : undefined,
-                    value: create_accessor(),
-                    end: prev()
-                });
-            } else {
-                const AccessorClass = accessor_type === "get"
-                    ? AST_PrivateGetter
-                    : AST_PrivateSetter;
-
-                return new AccessorClass({
-                    start,
-                    static: is_static,
-                    key: get_symbol_ast(name),
-                    value: create_accessor(),
-                    end: prev(),
-                });
-            }
-        }
-
-        if (is("punc", "(")) {
-            name = get_symbol_ast(name);
-            const AST_MethodVariant = is_private
-                ? AST_PrivateMethod
-                : AST_ConciseMethod;
-            var node = new AST_MethodVariant({
-                start       : start,
-                static      : is_static,
-                is_generator: is_generator,
-                async       : is_async,
-                key         : name,
-                quote       : name instanceof AST_SymbolMethod ?
-                              property_token.quote : undefined,
-                value       : create_accessor(is_generator, is_async),
-                end         : prev()
-            });
-            return node;
-        }
-
-        if (is_class) {
-            const key = get_symbol_ast(name, AST_SymbolClassProperty);
-            const quote = key instanceof AST_SymbolClassProperty
-                ? property_token.quote
-                : undefined;
-            const AST_ClassPropertyVariant = is_private
-                ? AST_ClassPrivateProperty
-                : AST_ClassProperty;
-            if (is("operator", "=")) {
-                next();
-                return new AST_ClassPropertyVariant({
-                    start,
-                    static: is_static,
-                    quote,
-                    key,
-                    value: expression(false),
-                    end: prev()
-                });
-            } else if (
-                is("name")
-                || is("privatename")
-                || is("operator", "*")
-                || is("punc", ";")
-                || is("punc", "}")
-            ) {
-                return new AST_ClassPropertyVariant({
-                    start,
-                    static: is_static,
-                    quote,
-                    key,
-                    end: prev()
-                });
-            }
-        }
-    }
-
-    function class_static_block() {
-        if (!is("punc", "{")) {
-            return null;
-        }
-
-        const start = S.token;
-        const body = [];
-
-        next();
-
-        while (!is("punc", "}")) {
-            body.push(statement());
-        }
-
-        next();
-
-        return new AST_ClassStaticBlock({ start, body, end: prev() });
-    }
-
-    function maybe_import_assertion() {
-        if (is("name", "assert") && !has_newline_before(S.token)) {
-            next();
-            return object_or_destructuring_();
-        }
-        return null;
-    }
-
-    function import_statement() {
-        var start = prev();
-
-        var imported_name;
-        var imported_names;
-        if (is("name")) {
-            imported_name = as_symbol(AST_SymbolImport);
-        }
-
-        if (is("punc", ",")) {
-            next();
-        }
-
-        imported_names = map_names(true);
-
-        if (imported_names || imported_name) {
-            expect_token("name", "from");
-        }
-        var mod_str = S.token;
-        if (mod_str.type !== "string") {
-            unexpected();
-        }
-        next();
-
-        const assert_clause = maybe_import_assertion();
-
-        return new AST_Import({
-            start,
-            imported_name,
-            imported_names,
-            module_name: new AST_String({
-                start: mod_str,
-                value: mod_str.value,
-                quote: mod_str.quote,
-                end: mod_str,
-            }),
-            assert_clause,
-            end: S.token,
-        });
-    }
-
-    function import_meta() {
-        var start = S.token;
-        expect_token("operator", "import");
-        expect_token("punc", ".");
-        expect_token("name", "meta");
-        return subscripts(new AST_ImportMeta({
-            start: start,
-            end: prev()
-        }), false);
-    }
-
-    function map_name(is_import) {
-        function make_symbol(type) {
-            return new type({
-                name: as_property_name(),
-                start: prev(),
-                end: prev()
-            });
-        }
-
-        var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign;
-        var type = is_import ? AST_SymbolImport : AST_SymbolExport;
-        var start = S.token;
-        var foreign_name;
-        var name;
-
-        if (is_import) {
-            foreign_name = make_symbol(foreign_type);
-        } else {
-            name = make_symbol(type);
-        }
-        if (is("name", "as")) {
-            next();  // The "as" word
-            if (is_import) {
-                name = make_symbol(type);
-            } else {
-                foreign_name = make_symbol(foreign_type);
-            }
-        } else if (is_import) {
-            name = new type(foreign_name);
-        } else {
-            foreign_name = new foreign_type(name);
-        }
-
-        return new AST_NameMapping({
-            start: start,
-            foreign_name: foreign_name,
-            name: name,
-            end: prev(),
-        });
-    }
-
-    function map_nameAsterisk(is_import, name) {
-        var foreign_type = is_import ? AST_SymbolImportForeign : AST_SymbolExportForeign;
-        var type = is_import ? AST_SymbolImport : AST_SymbolExport;
-        var start = S.token;
-        var foreign_name;
-        var end = prev();
-
-        name = name || new type({
-            start: start,
-            name: "*",
-            end: end,
-        });
-
-        foreign_name = new foreign_type({
-            start: start,
-            name: "*",
-            end: end,
-        });
-
-        return new AST_NameMapping({
-            start: start,
-            foreign_name: foreign_name,
-            name: name,
-            end: end,
-        });
-    }
-
-    function map_names(is_import) {
-        var names;
-        if (is("punc", "{")) {
-            next();
-            names = [];
-            while (!is("punc", "}")) {
-                names.push(map_name(is_import));
-                if (is("punc", ",")) {
-                    next();
-                }
-            }
-            next();
-        } else if (is("operator", "*")) {
-            var name;
-            next();
-            if (is_import && is("name", "as")) {
-                next();  // The "as" word
-                name = as_symbol(is_import ? AST_SymbolImport : AST_SymbolExportForeign);
-            }
-            names = [map_nameAsterisk(is_import, name)];
-        }
-        return names;
-    }
-
-    function export_statement() {
-        var start = S.token;
-        var is_default;
-        var exported_names;
-
-        if (is("keyword", "default")) {
-            is_default = true;
-            next();
-        } else if (exported_names = map_names(false)) {
-            if (is("name", "from")) {
-                next();
-
-                var mod_str = S.token;
-                if (mod_str.type !== "string") {
-                    unexpected();
-                }
-                next();
-
-                const assert_clause = maybe_import_assertion();
-
-                return new AST_Export({
-                    start: start,
-                    is_default: is_default,
-                    exported_names: exported_names,
-                    module_name: new AST_String({
-                        start: mod_str,
-                        value: mod_str.value,
-                        quote: mod_str.quote,
-                        end: mod_str,
-                    }),
-                    end: prev(),
-                    assert_clause
-                });
-            } else {
-                return new AST_Export({
-                    start: start,
-                    is_default: is_default,
-                    exported_names: exported_names,
-                    end: prev(),
-                });
-            }
-        }
-
-        var node;
-        var exported_value;
-        var exported_definition;
-        if (is("punc", "{")
-            || is_default
-                && (is("keyword", "class") || is("keyword", "function"))
-                && is_token(peek(), "punc")) {
-            exported_value = expression(false);
-            semicolon();
-        } else if ((node = statement(is_default)) instanceof AST_Definitions && is_default) {
-            unexpected(node.start);
-        } else if (
-            node instanceof AST_Definitions
-            || node instanceof AST_Defun
-            || node instanceof AST_DefClass
-        ) {
-            exported_definition = node;
-        } else if (
-            node instanceof AST_ClassExpression
-            || node instanceof AST_Function
-        ) {
-            exported_value = node;
-        } else if (node instanceof AST_SimpleStatement) {
-            exported_value = node.body;
-        } else {
-            unexpected(node.start);
-        }
-
-        return new AST_Export({
-            start: start,
-            is_default: is_default,
-            exported_value: exported_value,
-            exported_definition: exported_definition,
-            end: prev(),
-            assert_clause: null
-        });
-    }
-
-    function as_property_name() {
-        var tmp = S.token;
-        switch (tmp.type) {
-          case "punc":
-            if (tmp.value === "[") {
-                next();
-                var ex = expression(false);
-                expect("]");
-                return ex;
-            } else unexpected(tmp);
-          case "operator":
-            if (tmp.value === "*") {
-                next();
-                return null;
-            }
-            if (!["delete", "in", "instanceof", "new", "typeof", "void"].includes(tmp.value)) {
-                unexpected(tmp);
-            }
-            /* falls through */
-          case "name":
-          case "privatename":
-          case "string":
-          case "num":
-          case "big_int":
-          case "keyword":
-          case "atom":
-            next();
-            return tmp.value;
-          default:
-            unexpected(tmp);
-        }
-    }
-
-    function as_name() {
-        var tmp = S.token;
-        if (tmp.type != "name" && tmp.type != "privatename") unexpected();
-        next();
-        return tmp.value;
-    }
-
-    function _make_symbol(type) {
-        var name = S.token.value;
-        return new (name == "this" ? AST_This :
-                    name == "super" ? AST_Super :
-                    type)({
-            name  : String(name),
-            start : S.token,
-            end   : S.token
-        });
-    }
-
-    function _verify_symbol(sym) {
-        var name = sym.name;
-        if (is_in_generator() && name == "yield") {
-            token_error(sym.start, "Yield cannot be used as identifier inside generators");
-        }
-        if (S.input.has_directive("use strict")) {
-            if (name == "yield") {
-                token_error(sym.start, "Unexpected yield identifier inside strict mode");
-            }
-            if (sym instanceof AST_SymbolDeclaration && (name == "arguments" || name == "eval")) {
-                token_error(sym.start, "Unexpected " + name + " in strict mode");
-            }
-        }
-    }
-
-    function as_symbol(type, noerror) {
-        if (!is("name")) {
-            if (!noerror) croak("Name expected");
-            return null;
-        }
-        var sym = _make_symbol(type);
-        _verify_symbol(sym);
-        next();
-        return sym;
-    }
-
-    // Annotate AST_Call, AST_Lambda or AST_New with the special comments
-    function annotate(node) {
-        var start = node.start;
-        var comments = start.comments_before;
-        const comments_outside_parens = outer_comments_before_counts.get(start);
-        var i = comments_outside_parens != null ? comments_outside_parens : comments.length;
-        while (--i >= 0) {
-            var comment = comments[i];
-            if (/[@#]__/.test(comment.value)) {
-                if (/[@#]__PURE__/.test(comment.value)) {
-                    set_annotation(node, _PURE);
-                    break;
-                }
-                if (/[@#]__INLINE__/.test(comment.value)) {
-                    set_annotation(node, _INLINE);
-                    break;
-                }
-                if (/[@#]__NOINLINE__/.test(comment.value)) {
-                    set_annotation(node, _NOINLINE);
-                    break;
-                }
-            }
-        }
-    }
-
-    var subscripts = function(expr, allow_calls, is_chain) {
-        var start = expr.start;
-        if (is("punc", ".")) {
-            next();
-            const AST_DotVariant = is("privatename") ? AST_DotHash : AST_Dot;
-            return subscripts(new AST_DotVariant({
-                start      : start,
-                expression : expr,
-                optional   : false,
-                property   : as_name(),
-                end        : prev()
-            }), allow_calls, is_chain);
-        }
-        if (is("punc", "[")) {
-            next();
-            var prop = expression(true);
-            expect("]");
-            return subscripts(new AST_Sub({
-                start      : start,
-                expression : expr,
-                optional   : false,
-                property   : prop,
-                end        : prev()
-            }), allow_calls, is_chain);
-        }
-        if (allow_calls && is("punc", "(")) {
-            next();
-            var call = new AST_Call({
-                start      : start,
-                expression : expr,
-                optional   : false,
-                args       : call_args(),
-                end        : prev()
-            });
-            annotate(call);
-            return subscripts(call, true, is_chain);
-        }
-
-        if (is("punc", "?.")) {
-            next();
-
-            let chain_contents;
-
-            if (allow_calls && is("punc", "(")) {
-                next();
-
-                const call = new AST_Call({
-                    start,
-                    optional: true,
-                    expression: expr,
-                    args: call_args(),
-                    end: prev()
-                });
-                annotate(call);
-
-                chain_contents = subscripts(call, true, true);
-            } else if (is("name") || is("privatename")) {
-                const AST_DotVariant = is("privatename") ? AST_DotHash : AST_Dot;
-                chain_contents = subscripts(new AST_DotVariant({
-                    start,
-                    expression: expr,
-                    optional: true,
-                    property: as_name(),
-                    end: prev()
-                }), allow_calls, true);
-            } else if (is("punc", "[")) {
-                next();
-                const property = expression(true);
-                expect("]");
-                chain_contents = subscripts(new AST_Sub({
-                    start,
-                    expression: expr,
-                    optional: true,
-                    property,
-                    end: prev()
-                }), allow_calls, true);
-            }
-
-            if (!chain_contents) unexpected();
-
-            if (chain_contents instanceof AST_Chain) return chain_contents;
-
-            return new AST_Chain({
-                start,
-                expression: chain_contents,
-                end: prev()
-            });
-        }
-
-        if (is("template_head")) {
-            if (is_chain) {
-                // a?.b`c` is a syntax error
-                unexpected();
-            }
-
-            return subscripts(new AST_PrefixedTemplateString({
-                start: start,
-                prefix: expr,
-                template_string: template_string(),
-                end: prev()
-            }), allow_calls);
-        }
-
-        return expr;
-    };
-
-    function call_args() {
-        var args = [];
-        while (!is("punc", ")")) {
-            if (is("expand", "...")) {
-                next();
-                args.push(new AST_Expansion({
-                    start: prev(),
-                    expression: expression(false),
-                    end: prev()
-                }));
-            } else {
-                args.push(expression(false));
-            }
-            if (!is("punc", ")")) {
-                expect(",");
-            }
-        }
-        next();
-        return args;
-    }
-
-    var maybe_unary = function(allow_calls, allow_arrows) {
-        var start = S.token;
-        if (start.type == "name" && start.value == "await" && can_await()) {
-            next();
-            return _await_expression();
-        }
-        if (is("operator") && UNARY_PREFIX.has(start.value)) {
-            next();
-            handle_regexp();
-            var ex = make_unary(AST_UnaryPrefix, start, maybe_unary(allow_calls));
-            ex.start = start;
-            ex.end = prev();
-            return ex;
-        }
-        var val = expr_atom(allow_calls, allow_arrows);
-        while (is("operator") && UNARY_POSTFIX.has(S.token.value) && !has_newline_before(S.token)) {
-            if (val instanceof AST_Arrow) unexpected();
-            val = make_unary(AST_UnaryPostfix, S.token, val);
-            val.start = start;
-            val.end = S.token;
-            next();
-        }
-        return val;
-    };
-
-    function make_unary(ctor, token, expr) {
-        var op = token.value;
-        switch (op) {
-          case "++":
-          case "--":
-            if (!is_assignable(expr))
-                croak("Invalid use of " + op + " operator", token.line, token.col, token.pos);
-            break;
-          case "delete":
-            if (expr instanceof AST_SymbolRef && S.input.has_directive("use strict"))
-                croak("Calling delete on expression not allowed in strict mode", expr.start.line, expr.start.col, expr.start.pos);
-            break;
-        }
-        return new ctor({ operator: op, expression: expr });
-    }
-
-    var expr_op = function(left, min_prec, no_in) {
-        var op = is("operator") ? S.token.value : null;
-        if (op == "in" && no_in) op = null;
-        if (op == "**" && left instanceof AST_UnaryPrefix
-            /* unary token in front not allowed - parenthesis required */
-            && !is_token(left.start, "punc", "(")
-            && left.operator !== "--" && left.operator !== "++")
-                unexpected(left.start);
-        var prec = op != null ? PRECEDENCE[op] : null;
-        if (prec != null && (prec > min_prec || (op === "**" && min_prec === prec))) {
-            next();
-            var right = expr_op(maybe_unary(true), prec, no_in);
-            return expr_op(new AST_Binary({
-                start    : left.start,
-                left     : left,
-                operator : op,
-                right    : right,
-                end      : right.end
-            }), min_prec, no_in);
-        }
-        return left;
-    };
-
-    function expr_ops(no_in) {
-        return expr_op(maybe_unary(true, true), 0, no_in);
-    }
-
-    var maybe_conditional = function(no_in) {
-        var start = S.token;
-        var expr = expr_ops(no_in);
-        if (is("operator", "?")) {
-            next();
-            var yes = expression(false);
-            expect(":");
-            return new AST_Conditional({
-                start       : start,
-                condition   : expr,
-                consequent  : yes,
-                alternative : expression(false, no_in),
-                end         : prev()
-            });
-        }
-        return expr;
-    };
-
-    function is_assignable(expr) {
-        return expr instanceof AST_PropAccess || expr instanceof AST_SymbolRef;
-    }
-
-    function to_destructuring(node) {
-        if (node instanceof AST_Object) {
-            node = new AST_Destructuring({
-                start: node.start,
-                names: node.properties.map(to_destructuring),
-                is_array: false,
-                end: node.end
-            });
-        } else if (node instanceof AST_Array) {
-            var names = [];
-
-            for (var i = 0; i < node.elements.length; i++) {
-                // Only allow expansion as last element
-                if (node.elements[i] instanceof AST_Expansion) {
-                    if (i + 1 !== node.elements.length) {
-                        token_error(node.elements[i].start, "Spread must the be last element in destructuring array");
-                    }
-                    node.elements[i].expression = to_destructuring(node.elements[i].expression);
-                }
-
-                names.push(to_destructuring(node.elements[i]));
-            }
-
-            node = new AST_Destructuring({
-                start: node.start,
-                names: names,
-                is_array: true,
-                end: node.end
-            });
-        } else if (node instanceof AST_ObjectProperty) {
-            node.value = to_destructuring(node.value);
-        } else if (node instanceof AST_Assign) {
-            node = new AST_DefaultAssign({
-                start: node.start,
-                left: node.left,
-                operator: "=",
-                right: node.right,
-                end: node.end
-            });
-        }
-        return node;
-    }
-
-    // In ES6, AssignmentExpression can also be an ArrowFunction
-    var maybe_assign = function(no_in) {
-        handle_regexp();
-        var start = S.token;
-
-        if (start.type == "name" && start.value == "yield") {
-            if (is_in_generator()) {
-                next();
-                return _yield_expression();
-            } else if (S.input.has_directive("use strict")) {
-                token_error(S.token, "Unexpected yield identifier inside strict mode");
-            }
-        }
-
-        var left = maybe_conditional(no_in);
-        var val = S.token.value;
-
-        if (is("operator") && ASSIGNMENT.has(val)) {
-            if (is_assignable(left) || (left = to_destructuring(left)) instanceof AST_Destructuring) {
-                next();
-
-                return new AST_Assign({
-                    start    : start,
-                    left     : left,
-                    operator : val,
-                    right    : maybe_assign(no_in),
-                    logical  : LOGICAL_ASSIGNMENT.has(val),
-                    end      : prev()
-                });
-            }
-            croak("Invalid assignment");
-        }
-        return left;
-    };
-
-    var expression = function(commas, no_in) {
-        var start = S.token;
-        var exprs = [];
-        while (true) {
-            exprs.push(maybe_assign(no_in));
-            if (!commas || !is("punc", ",")) break;
-            next();
-            commas = true;
-        }
-        return exprs.length == 1 ? exprs[0] : new AST_Sequence({
-            start       : start,
-            expressions : exprs,
-            end         : peek()
-        });
-    };
-
-    function in_loop(cont) {
-        ++S.in_loop;
-        var ret = cont();
-        --S.in_loop;
-        return ret;
-    }
-
-    if (options.expression) {
-        return expression(true);
-    }
-
-    return (function parse_toplevel() {
-        var start = S.token;
-        var body = [];
-        S.input.push_directives_stack();
-        if (options.module) S.input.add_directive("use strict");
-        while (!is("eof")) {
-            body.push(statement());
-        }
-        S.input.pop_directives_stack();
-        var end = prev();
-        var toplevel = options.toplevel;
-        if (toplevel) {
-            toplevel.body = toplevel.body.concat(body);
-            toplevel.end = end;
-        } else {
-            toplevel = new AST_Toplevel({ start: start, body: body, end: end });
-        }
-        TEMPLATE_RAWS = new Map();
-        return toplevel;
-    })();
-
-}
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-function DEFNODE(type, props, ctor, methods, base = AST_Node) {
-    if (!props) props = [];
-    else props = props.split(/\s+/);
-    var self_props = props;
-    if (base && base.PROPS)
-        props = props.concat(base.PROPS);
-    const proto = base && Object.create(base.prototype);
-    if (proto) {
-        ctor.prototype = proto;
-        ctor.BASE = base;
-    }
-    if (base) base.SUBCLASSES.push(ctor);
-    ctor.prototype.CTOR = ctor;
-    ctor.prototype.constructor = ctor;
-    ctor.PROPS = props || null;
-    ctor.SELF_PROPS = self_props;
-    ctor.SUBCLASSES = [];
-    if (type) {
-        ctor.prototype.TYPE = ctor.TYPE = type;
-    }
-    if (methods) for (let i in methods) if (HOP(methods, i)) {
-        if (i[0] === "$") {
-            ctor[i.substr(1)] = methods[i];
-        } else {
-            ctor.prototype[i] = methods[i];
-        }
-    }
-    ctor.DEFMETHOD = function(name, method) {
-        this.prototype[name] = method;
-    };
-    return ctor;
-}
-
-const has_tok_flag = (tok, flag) => Boolean(tok.flags & flag);
-const set_tok_flag = (tok, flag, truth) => {
-    if (truth) {
-        tok.flags |= flag;
-    } else {
-        tok.flags &= ~flag;
-    }
-};
-
-const TOK_FLAG_NLB          = 0b0001;
-const TOK_FLAG_QUOTE_SINGLE = 0b0010;
-const TOK_FLAG_QUOTE_EXISTS = 0b0100;
-const TOK_FLAG_TEMPLATE_END = 0b1000;
-
-class AST_Token {
-    constructor(type, value, line, col, pos, nlb, comments_before, comments_after, file) {
-        this.flags = (nlb ? 1 : 0);
-
-        this.type = type;
-        this.value = value;
-        this.line = line;
-        this.col = col;
-        this.pos = pos;
-        this.comments_before = comments_before;
-        this.comments_after = comments_after;
-        this.file = file;
-
-        Object.seal(this);
-    }
-
-    get nlb() {
-        return has_tok_flag(this, TOK_FLAG_NLB);
-    }
-
-    set nlb(new_nlb) {
-        set_tok_flag(this, TOK_FLAG_NLB, new_nlb);
-    }
-
-    get quote() {
-        return !has_tok_flag(this, TOK_FLAG_QUOTE_EXISTS)
-            ? ""
-            : (has_tok_flag(this, TOK_FLAG_QUOTE_SINGLE) ? "'" : '"');
-    }
-
-    set quote(quote_type) {
-        set_tok_flag(this, TOK_FLAG_QUOTE_SINGLE, quote_type === "'");
-        set_tok_flag(this, TOK_FLAG_QUOTE_EXISTS, !!quote_type);
-    }
-
-    get template_end() {
-        return has_tok_flag(this, TOK_FLAG_TEMPLATE_END);
-    }
-
-    set template_end(new_template_end) {
-        set_tok_flag(this, TOK_FLAG_TEMPLATE_END, new_template_end);
-    }
-}
-
-var AST_Node = DEFNODE("Node", "start end", function AST_Node(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    _clone: function(deep) {
-        if (deep) {
-            var self = this.clone();
-            return self.transform(new TreeTransformer(function(node) {
-                if (node !== self) {
-                    return node.clone(true);
-                }
-            }));
-        }
-        return new this.CTOR(this);
-    },
-    clone: function(deep) {
-        return this._clone(deep);
-    },
-    $documentation: "Base class of all AST nodes",
-    $propdoc: {
-        start: "[AST_Token] The first token of this node",
-        end: "[AST_Token] The last token of this node"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this);
-    },
-    walk: function(visitor) {
-        return this._walk(visitor); // not sure the indirection will be any help
-    },
-    _children_backwards: () => {}
-}, null);
-
-/* -----[ statements ]----- */
-
-var AST_Statement = DEFNODE("Statement", null, function AST_Statement(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Base class of all statements",
-});
-
-var AST_Debugger = DEFNODE("Debugger", null, function AST_Debugger(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Represents a debugger statement",
-}, AST_Statement);
-
-var AST_Directive = DEFNODE("Directive", "value quote", function AST_Directive(props) {
-    if (props) {
-        this.value = props.value;
-        this.quote = props.quote;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Represents a directive, like \"use strict\";",
-    $propdoc: {
-        value: "[string] The value of this directive as a plain string (it's not an AST_String!)",
-        quote: "[string] the original quote character"
-    },
-}, AST_Statement);
-
-var AST_SimpleStatement = DEFNODE("SimpleStatement", "body", function AST_SimpleStatement(props) {
-    if (props) {
-        this.body = props.body;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A statement consisting of an expression, i.e. a = 1 + 2",
-    $propdoc: {
-        body: "[AST_Node] an expression node (should not be instanceof AST_Statement)"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.body._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.body);
-    }
-}, AST_Statement);
-
-function walk_body(node, visitor) {
-    const body = node.body;
-    for (var i = 0, len = body.length; i < len; i++) {
-        body[i]._walk(visitor);
-    }
-}
-
-function clone_block_scope(deep) {
-    var clone = this._clone(deep);
-    if (this.block_scope) {
-        clone.block_scope = this.block_scope.clone();
-    }
-    return clone;
-}
-
-var AST_Block = DEFNODE("Block", "body block_scope", function AST_Block(props) {
-    if (props) {
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A body of statements (usually braced)",
-    $propdoc: {
-        body: "[AST_Statement*] an array of statements",
-        block_scope: "[AST_Scope] the block scope"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            walk_body(this, visitor);
-        });
-    },
-    _children_backwards(push) {
-        let i = this.body.length;
-        while (i--) push(this.body[i]);
-    },
-    clone: clone_block_scope
-}, AST_Statement);
-
-var AST_BlockStatement = DEFNODE("BlockStatement", null, function AST_BlockStatement(props) {
-    if (props) {
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A block statement",
-}, AST_Block);
-
-var AST_EmptyStatement = DEFNODE("EmptyStatement", null, function AST_EmptyStatement(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "The empty statement (empty block or simply a semicolon)"
-}, AST_Statement);
-
-var AST_StatementWithBody = DEFNODE("StatementWithBody", "body", function AST_StatementWithBody(props) {
-    if (props) {
-        this.body = props.body;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Base class for all statements that contain one nested body: `For`, `ForIn`, `Do`, `While`, `With`",
-    $propdoc: {
-        body: "[AST_Statement] the body; this should always be present, even if it's an AST_EmptyStatement"
-    }
-}, AST_Statement);
-
-var AST_LabeledStatement = DEFNODE("LabeledStatement", "label", function AST_LabeledStatement(props) {
-    if (props) {
-        this.label = props.label;
-        this.body = props.body;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Statement with a label",
-    $propdoc: {
-        label: "[AST_Label] a label definition"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.label._walk(visitor);
-            this.body._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.body);
-        push(this.label);
-    },
-    clone: function(deep) {
-        var node = this._clone(deep);
-        if (deep) {
-            var label = node.label;
-            var def = this.label;
-            node.walk(new TreeWalker(function(node) {
-                if (node instanceof AST_LoopControl
-                    && node.label && node.label.thedef === def) {
-                    node.label.thedef = label;
-                    label.references.push(node);
-                }
-            }));
-        }
-        return node;
-    }
-}, AST_StatementWithBody);
-
-var AST_IterationStatement = DEFNODE(
-    "IterationStatement",
-    "block_scope",
-    function AST_IterationStatement(props) {
-        if (props) {
-            this.block_scope = props.block_scope;
-            this.body = props.body;
-            this.start = props.start;
-            this.end = props.end;
-        }
-
-        this.flags = 0;
-    },
-    {
-        $documentation: "Internal class.  All loops inherit from it.",
-        $propdoc: {
-            block_scope: "[AST_Scope] the block scope for this iteration statement."
-        },
-        clone: clone_block_scope
-    },
-    AST_StatementWithBody
-);
-
-var AST_DWLoop = DEFNODE("DWLoop", "condition", function AST_DWLoop(props) {
-    if (props) {
-        this.condition = props.condition;
-        this.block_scope = props.block_scope;
-        this.body = props.body;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Base class for do/while statements",
-    $propdoc: {
-        condition: "[AST_Node] the loop condition.  Should not be instanceof AST_Statement"
-    }
-}, AST_IterationStatement);
-
-var AST_Do = DEFNODE("Do", null, function AST_Do(props) {
-    if (props) {
-        this.condition = props.condition;
-        this.block_scope = props.block_scope;
-        this.body = props.body;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `do` statement",
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.body._walk(visitor);
-            this.condition._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.condition);
-        push(this.body);
-    }
-}, AST_DWLoop);
-
-var AST_While = DEFNODE("While", null, function AST_While(props) {
-    if (props) {
-        this.condition = props.condition;
-        this.block_scope = props.block_scope;
-        this.body = props.body;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `while` statement",
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.condition._walk(visitor);
-            this.body._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.body);
-        push(this.condition);
-    },
-}, AST_DWLoop);
-
-var AST_For = DEFNODE("For", "init condition step", function AST_For(props) {
-    if (props) {
-        this.init = props.init;
-        this.condition = props.condition;
-        this.step = props.step;
-        this.block_scope = props.block_scope;
-        this.body = props.body;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `for` statement",
-    $propdoc: {
-        init: "[AST_Node?] the `for` initialization code, or null if empty",
-        condition: "[AST_Node?] the `for` termination clause, or null if empty",
-        step: "[AST_Node?] the `for` update clause, or null if empty"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            if (this.init) this.init._walk(visitor);
-            if (this.condition) this.condition._walk(visitor);
-            if (this.step) this.step._walk(visitor);
-            this.body._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.body);
-        if (this.step) push(this.step);
-        if (this.condition) push(this.condition);
-        if (this.init) push(this.init);
-    },
-}, AST_IterationStatement);
-
-var AST_ForIn = DEFNODE("ForIn", "init object", function AST_ForIn(props) {
-    if (props) {
-        this.init = props.init;
-        this.object = props.object;
-        this.block_scope = props.block_scope;
-        this.body = props.body;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `for ... in` statement",
-    $propdoc: {
-        init: "[AST_Node] the `for/in` initialization code",
-        object: "[AST_Node] the object that we're looping through"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.init._walk(visitor);
-            this.object._walk(visitor);
-            this.body._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.body);
-        if (this.object) push(this.object);
-        if (this.init) push(this.init);
-    },
-}, AST_IterationStatement);
-
-var AST_ForOf = DEFNODE("ForOf", "await", function AST_ForOf(props) {
-    if (props) {
-        this.await = props.await;
-        this.init = props.init;
-        this.object = props.object;
-        this.block_scope = props.block_scope;
-        this.body = props.body;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `for ... of` statement",
-}, AST_ForIn);
-
-var AST_With = DEFNODE("With", "expression", function AST_With(props) {
-    if (props) {
-        this.expression = props.expression;
-        this.body = props.body;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `with` statement",
-    $propdoc: {
-        expression: "[AST_Node] the `with` expression"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.expression._walk(visitor);
-            this.body._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.body);
-        push(this.expression);
-    },
-}, AST_StatementWithBody);
-
-/* -----[ scope and functions ]----- */
-
-var AST_Scope = DEFNODE(
-    "Scope",
-    "variables uses_with uses_eval parent_scope enclosed cname",
-    function AST_Scope(props) {
-        if (props) {
-            this.variables = props.variables;
-            this.uses_with = props.uses_with;
-            this.uses_eval = props.uses_eval;
-            this.parent_scope = props.parent_scope;
-            this.enclosed = props.enclosed;
-            this.cname = props.cname;
-            this.body = props.body;
-            this.block_scope = props.block_scope;
-            this.start = props.start;
-            this.end = props.end;
-        }
-
-        this.flags = 0;
-    },
-    {
-        $documentation: "Base class for all statements introducing a lexical scope",
-        $propdoc: {
-            variables: "[Map/S] a map of name -> SymbolDef for all variables/functions defined in this scope",
-            uses_with: "[boolean/S] tells whether this scope uses the `with` statement",
-            uses_eval: "[boolean/S] tells whether this scope contains a direct call to the global `eval`",
-            parent_scope: "[AST_Scope?/S] link to the parent scope",
-            enclosed: "[SymbolDef*/S] a list of all symbol definitions that are accessed from this scope or any subscopes",
-            cname: "[integer/S] current index for mangling variables (used internally by the mangler)",
-        },
-        get_defun_scope: function() {
-            var self = this;
-            while (self.is_block_scope()) {
-                self = self.parent_scope;
-            }
-            return self;
-        },
-        clone: function(deep, toplevel) {
-            var node = this._clone(deep);
-            if (deep && this.variables && toplevel && !this._block_scope) {
-                node.figure_out_scope({}, {
-                    toplevel: toplevel,
-                    parent_scope: this.parent_scope
-                });
-            } else {
-                if (this.variables) node.variables = new Map(this.variables);
-                if (this.enclosed) node.enclosed = this.enclosed.slice();
-                if (this._block_scope) node._block_scope = this._block_scope;
-            }
-            return node;
-        },
-        pinned: function() {
-            return this.uses_eval || this.uses_with;
-        }
-    },
-    AST_Block
-);
-
-var AST_Toplevel = DEFNODE("Toplevel", "globals", function AST_Toplevel(props) {
-    if (props) {
-        this.globals = props.globals;
-        this.variables = props.variables;
-        this.uses_with = props.uses_with;
-        this.uses_eval = props.uses_eval;
-        this.parent_scope = props.parent_scope;
-        this.enclosed = props.enclosed;
-        this.cname = props.cname;
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "The toplevel scope",
-    $propdoc: {
-        globals: "[Map/S] a map of name -> SymbolDef for all undeclared names",
-    },
-    wrap_commonjs: function(name) {
-        var body = this.body;
-        var wrapped_tl = "(function(exports){'$ORIG';})(typeof " + name + "=='undefined'?(" + name + "={}):" + name + ");";
-        wrapped_tl = parse(wrapped_tl);
-        wrapped_tl = wrapped_tl.transform(new TreeTransformer(function(node) {
-            if (node instanceof AST_Directive && node.value == "$ORIG") {
-                return MAP.splice(body);
-            }
-        }));
-        return wrapped_tl;
-    },
-    wrap_enclose: function(args_values) {
-        if (typeof args_values != "string") args_values = "";
-        var index = args_values.indexOf(":");
-        if (index < 0) index = args_values.length;
-        var body = this.body;
-        return parse([
-            "(function(",
-            args_values.slice(0, index),
-            '){"$ORIG"})(',
-            args_values.slice(index + 1),
-            ")"
-        ].join("")).transform(new TreeTransformer(function(node) {
-            if (node instanceof AST_Directive && node.value == "$ORIG") {
-                return MAP.splice(body);
-            }
-        }));
-    }
-}, AST_Scope);
-
-var AST_Expansion = DEFNODE("Expansion", "expression", function AST_Expansion(props) {
-    if (props) {
-        this.expression = props.expression;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "An expandible argument, such as ...rest, a splat, such as [1,2,...all], or an expansion in a variable declaration, such as var [first, ...rest] = list",
-    $propdoc: {
-        expression: "[AST_Node] the thing to be expanded"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.expression.walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.expression);
-    },
-});
-
-var AST_Lambda = DEFNODE(
-    "Lambda",
-    "name argnames uses_arguments is_generator async",
-    function AST_Lambda(props) {
-        if (props) {
-            this.name = props.name;
-            this.argnames = props.argnames;
-            this.uses_arguments = props.uses_arguments;
-            this.is_generator = props.is_generator;
-            this.async = props.async;
-            this.variables = props.variables;
-            this.uses_with = props.uses_with;
-            this.uses_eval = props.uses_eval;
-            this.parent_scope = props.parent_scope;
-            this.enclosed = props.enclosed;
-            this.cname = props.cname;
-            this.body = props.body;
-            this.block_scope = props.block_scope;
-            this.start = props.start;
-            this.end = props.end;
-        }
-
-        this.flags = 0;
-    },
-    {
-        $documentation: "Base class for functions",
-        $propdoc: {
-            name: "[AST_SymbolDeclaration?] the name of this function",
-            argnames: "[AST_SymbolFunarg|AST_Destructuring|AST_Expansion|AST_DefaultAssign*] array of function arguments, destructurings, or expanding arguments",
-            uses_arguments: "[boolean/S] tells whether this function accesses the arguments array",
-            is_generator: "[boolean] is this a generator method",
-            async: "[boolean] is this method async",
-        },
-        args_as_names: function () {
-            var out = [];
-            for (var i = 0; i < this.argnames.length; i++) {
-                if (this.argnames[i] instanceof AST_Destructuring) {
-                    out.push(...this.argnames[i].all_symbols());
-                } else {
-                    out.push(this.argnames[i]);
-                }
-            }
-            return out;
-        },
-        _walk: function(visitor) {
-            return visitor._visit(this, function() {
-                if (this.name) this.name._walk(visitor);
-                var argnames = this.argnames;
-                for (var i = 0, len = argnames.length; i < len; i++) {
-                    argnames[i]._walk(visitor);
-                }
-                walk_body(this, visitor);
-            });
-        },
-        _children_backwards(push) {
-            let i = this.body.length;
-            while (i--) push(this.body[i]);
-
-            i = this.argnames.length;
-            while (i--) push(this.argnames[i]);
-
-            if (this.name) push(this.name);
-        },
-        is_braceless() {
-            return this.body[0] instanceof AST_Return && this.body[0].value;
-        },
-        // Default args and expansion don't count, so .argnames.length doesn't cut it
-        length_property() {
-            let length = 0;
-
-            for (const arg of this.argnames) {
-                if (arg instanceof AST_SymbolFunarg || arg instanceof AST_Destructuring) {
-                    length++;
-                }
-            }
-
-            return length;
-        }
-    },
-    AST_Scope
-);
-
-var AST_Accessor = DEFNODE("Accessor", null, function AST_Accessor(props) {
-    if (props) {
-        this.name = props.name;
-        this.argnames = props.argnames;
-        this.uses_arguments = props.uses_arguments;
-        this.is_generator = props.is_generator;
-        this.async = props.async;
-        this.variables = props.variables;
-        this.uses_with = props.uses_with;
-        this.uses_eval = props.uses_eval;
-        this.parent_scope = props.parent_scope;
-        this.enclosed = props.enclosed;
-        this.cname = props.cname;
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A setter/getter function.  The `name` property is always null."
-}, AST_Lambda);
-
-var AST_Function = DEFNODE("Function", null, function AST_Function(props) {
-    if (props) {
-        this.name = props.name;
-        this.argnames = props.argnames;
-        this.uses_arguments = props.uses_arguments;
-        this.is_generator = props.is_generator;
-        this.async = props.async;
-        this.variables = props.variables;
-        this.uses_with = props.uses_with;
-        this.uses_eval = props.uses_eval;
-        this.parent_scope = props.parent_scope;
-        this.enclosed = props.enclosed;
-        this.cname = props.cname;
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A function expression"
-}, AST_Lambda);
-
-var AST_Arrow = DEFNODE("Arrow", null, function AST_Arrow(props) {
-    if (props) {
-        this.name = props.name;
-        this.argnames = props.argnames;
-        this.uses_arguments = props.uses_arguments;
-        this.is_generator = props.is_generator;
-        this.async = props.async;
-        this.variables = props.variables;
-        this.uses_with = props.uses_with;
-        this.uses_eval = props.uses_eval;
-        this.parent_scope = props.parent_scope;
-        this.enclosed = props.enclosed;
-        this.cname = props.cname;
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "An ES6 Arrow function ((a) => b)"
-}, AST_Lambda);
-
-var AST_Defun = DEFNODE("Defun", null, function AST_Defun(props) {
-    if (props) {
-        this.name = props.name;
-        this.argnames = props.argnames;
-        this.uses_arguments = props.uses_arguments;
-        this.is_generator = props.is_generator;
-        this.async = props.async;
-        this.variables = props.variables;
-        this.uses_with = props.uses_with;
-        this.uses_eval = props.uses_eval;
-        this.parent_scope = props.parent_scope;
-        this.enclosed = props.enclosed;
-        this.cname = props.cname;
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A function definition"
-}, AST_Lambda);
-
-/* -----[ DESTRUCTURING ]----- */
-var AST_Destructuring = DEFNODE("Destructuring", "names is_array", function AST_Destructuring(props) {
-    if (props) {
-        this.names = props.names;
-        this.is_array = props.is_array;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A destructuring of several names. Used in destructuring assignment and with destructuring function argument names",
-    $propdoc: {
-        "names": "[AST_Node*] Array of properties or elements",
-        "is_array": "[Boolean] Whether the destructuring represents an object or array"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.names.forEach(function(name) {
-                name._walk(visitor);
-            });
-        });
-    },
-    _children_backwards(push) {
-        let i = this.names.length;
-        while (i--) push(this.names[i]);
-    },
-    all_symbols: function() {
-        var out = [];
-        this.walk(new TreeWalker(function (node) {
-            if (node instanceof AST_Symbol) {
-                out.push(node);
-            }
-        }));
-        return out;
-    }
-});
-
-var AST_PrefixedTemplateString = DEFNODE(
-    "PrefixedTemplateString",
-    "template_string prefix",
-    function AST_PrefixedTemplateString(props) {
-        if (props) {
-            this.template_string = props.template_string;
-            this.prefix = props.prefix;
-            this.start = props.start;
-            this.end = props.end;
-        }
-
-        this.flags = 0;
-    },
-    {
-        $documentation: "A templatestring with a prefix, such as String.raw`foobarbaz`",
-        $propdoc: {
-            template_string: "[AST_TemplateString] The template string",
-            prefix: "[AST_Node] The prefix, which will get called."
-        },
-        _walk: function(visitor) {
-            return visitor._visit(this, function () {
-                this.prefix._walk(visitor);
-                this.template_string._walk(visitor);
-            });
-        },
-        _children_backwards(push) {
-            push(this.template_string);
-            push(this.prefix);
-        },
-    }
-);
-
-var AST_TemplateString = DEFNODE("TemplateString", "segments", function AST_TemplateString(props) {
-    if (props) {
-        this.segments = props.segments;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A template string literal",
-    $propdoc: {
-        segments: "[AST_Node*] One or more segments, starting with AST_TemplateSegment. AST_Node may follow AST_TemplateSegment, but each AST_Node must be followed by AST_TemplateSegment."
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.segments.forEach(function(seg) {
-                seg._walk(visitor);
-            });
-        });
-    },
-    _children_backwards(push) {
-        let i = this.segments.length;
-        while (i--) push(this.segments[i]);
-    }
-});
-
-var AST_TemplateSegment = DEFNODE("TemplateSegment", "value raw", function AST_TemplateSegment(props) {
-    if (props) {
-        this.value = props.value;
-        this.raw = props.raw;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A segment of a template string literal",
-    $propdoc: {
-        value: "Content of the segment",
-        raw: "Raw source of the segment",
-    }
-});
-
-/* -----[ JUMPS ]----- */
-
-var AST_Jump = DEFNODE("Jump", null, function AST_Jump(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Base class for “jumps” (for now that's `return`, `throw`, `break` and `continue`)"
-}, AST_Statement);
-
-var AST_Exit = DEFNODE("Exit", "value", function AST_Exit(props) {
-    if (props) {
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Base class for “exits” (`return` and `throw`)",
-    $propdoc: {
-        value: "[AST_Node?] the value returned or thrown by this statement; could be null for AST_Return"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, this.value && function() {
-            this.value._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        if (this.value) push(this.value);
-    },
-}, AST_Jump);
-
-var AST_Return = DEFNODE("Return", null, function AST_Return(props) {
-    if (props) {
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `return` statement"
-}, AST_Exit);
-
-var AST_Throw = DEFNODE("Throw", null, function AST_Throw(props) {
-    if (props) {
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `throw` statement"
-}, AST_Exit);
-
-var AST_LoopControl = DEFNODE("LoopControl", "label", function AST_LoopControl(props) {
-    if (props) {
-        this.label = props.label;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Base class for loop control statements (`break` and `continue`)",
-    $propdoc: {
-        label: "[AST_LabelRef?] the label, or null if none",
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, this.label && function() {
-            this.label._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        if (this.label) push(this.label);
-    },
-}, AST_Jump);
-
-var AST_Break = DEFNODE("Break", null, function AST_Break(props) {
-    if (props) {
-        this.label = props.label;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `break` statement"
-}, AST_LoopControl);
-
-var AST_Continue = DEFNODE("Continue", null, function AST_Continue(props) {
-    if (props) {
-        this.label = props.label;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `continue` statement"
-}, AST_LoopControl);
-
-var AST_Await = DEFNODE("Await", "expression", function AST_Await(props) {
-    if (props) {
-        this.expression = props.expression;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "An `await` statement",
-    $propdoc: {
-        expression: "[AST_Node] the mandatory expression being awaited",
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.expression._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.expression);
-    },
-});
-
-var AST_Yield = DEFNODE("Yield", "expression is_star", function AST_Yield(props) {
-    if (props) {
-        this.expression = props.expression;
-        this.is_star = props.is_star;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `yield` statement",
-    $propdoc: {
-        expression: "[AST_Node?] the value returned or thrown by this statement; could be null (representing undefined) but only when is_star is set to false",
-        is_star: "[Boolean] Whether this is a yield or yield* statement"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, this.expression && function() {
-            this.expression._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        if (this.expression) push(this.expression);
-    }
-});
-
-/* -----[ IF ]----- */
-
-var AST_If = DEFNODE("If", "condition alternative", function AST_If(props) {
-    if (props) {
-        this.condition = props.condition;
-        this.alternative = props.alternative;
-        this.body = props.body;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `if` statement",
-    $propdoc: {
-        condition: "[AST_Node] the `if` condition",
-        alternative: "[AST_Statement?] the `else` part, or null if not present"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.condition._walk(visitor);
-            this.body._walk(visitor);
-            if (this.alternative) this.alternative._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        if (this.alternative) {
-            push(this.alternative);
-        }
-        push(this.body);
-        push(this.condition);
-    }
-}, AST_StatementWithBody);
-
-/* -----[ SWITCH ]----- */
-
-var AST_Switch = DEFNODE("Switch", "expression", function AST_Switch(props) {
-    if (props) {
-        this.expression = props.expression;
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `switch` statement",
-    $propdoc: {
-        expression: "[AST_Node] the `switch` “discriminant”"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.expression._walk(visitor);
-            walk_body(this, visitor);
-        });
-    },
-    _children_backwards(push) {
-        let i = this.body.length;
-        while (i--) push(this.body[i]);
-        push(this.expression);
-    }
-}, AST_Block);
-
-var AST_SwitchBranch = DEFNODE("SwitchBranch", null, function AST_SwitchBranch(props) {
-    if (props) {
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Base class for `switch` branches",
-}, AST_Block);
-
-var AST_Default = DEFNODE("Default", null, function AST_Default(props) {
-    if (props) {
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `default` switch branch",
-}, AST_SwitchBranch);
-
-var AST_Case = DEFNODE("Case", "expression", function AST_Case(props) {
-    if (props) {
-        this.expression = props.expression;
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `case` switch branch",
-    $propdoc: {
-        expression: "[AST_Node] the `case` expression"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.expression._walk(visitor);
-            walk_body(this, visitor);
-        });
-    },
-    _children_backwards(push) {
-        let i = this.body.length;
-        while (i--) push(this.body[i]);
-        push(this.expression);
-    },
-}, AST_SwitchBranch);
-
-/* -----[ EXCEPTIONS ]----- */
-
-var AST_Try = DEFNODE("Try", "bcatch bfinally", function AST_Try(props) {
-    if (props) {
-        this.bcatch = props.bcatch;
-        this.bfinally = props.bfinally;
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `try` statement",
-    $propdoc: {
-        bcatch: "[AST_Catch?] the catch block, or null if not present",
-        bfinally: "[AST_Finally?] the finally block, or null if not present"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            walk_body(this, visitor);
-            if (this.bcatch) this.bcatch._walk(visitor);
-            if (this.bfinally) this.bfinally._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        if (this.bfinally) push(this.bfinally);
-        if (this.bcatch) push(this.bcatch);
-        let i = this.body.length;
-        while (i--) push(this.body[i]);
-    },
-}, AST_Block);
-
-var AST_Catch = DEFNODE("Catch", "argname", function AST_Catch(props) {
-    if (props) {
-        this.argname = props.argname;
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `catch` node; only makes sense as part of a `try` statement",
-    $propdoc: {
-        argname: "[AST_SymbolCatch|AST_Destructuring|AST_Expansion|AST_DefaultAssign] symbol for the exception"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            if (this.argname) this.argname._walk(visitor);
-            walk_body(this, visitor);
-        });
-    },
-    _children_backwards(push) {
-        let i = this.body.length;
-        while (i--) push(this.body[i]);
-        if (this.argname) push(this.argname);
-    },
-}, AST_Block);
-
-var AST_Finally = DEFNODE("Finally", null, function AST_Finally(props) {
-    if (props) {
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `finally` node; only makes sense as part of a `try` statement"
-}, AST_Block);
-
-/* -----[ VAR/CONST ]----- */
-
-var AST_Definitions = DEFNODE("Definitions", "definitions", function AST_Definitions(props) {
-    if (props) {
-        this.definitions = props.definitions;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Base class for `var` or `const` nodes (variable declarations/initializations)",
-    $propdoc: {
-        definitions: "[AST_VarDef*] array of variable definitions"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            var definitions = this.definitions;
-            for (var i = 0, len = definitions.length; i < len; i++) {
-                definitions[i]._walk(visitor);
-            }
-        });
-    },
-    _children_backwards(push) {
-        let i = this.definitions.length;
-        while (i--) push(this.definitions[i]);
-    },
-}, AST_Statement);
-
-var AST_Var = DEFNODE("Var", null, function AST_Var(props) {
-    if (props) {
-        this.definitions = props.definitions;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `var` statement"
-}, AST_Definitions);
-
-var AST_Let = DEFNODE("Let", null, function AST_Let(props) {
-    if (props) {
-        this.definitions = props.definitions;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `let` statement"
-}, AST_Definitions);
-
-var AST_Const = DEFNODE("Const", null, function AST_Const(props) {
-    if (props) {
-        this.definitions = props.definitions;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A `const` statement"
-}, AST_Definitions);
-
-var AST_VarDef = DEFNODE("VarDef", "name value", function AST_VarDef(props) {
-    if (props) {
-        this.name = props.name;
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A variable declaration; only appears in a AST_Definitions node",
-    $propdoc: {
-        name: "[AST_Destructuring|AST_SymbolConst|AST_SymbolLet|AST_SymbolVar] name of the variable",
-        value: "[AST_Node?] initializer, or null of there's no initializer"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.name._walk(visitor);
-            if (this.value) this.value._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        if (this.value) push(this.value);
-        push(this.name);
-    },
-});
-
-var AST_NameMapping = DEFNODE("NameMapping", "foreign_name name", function AST_NameMapping(props) {
-    if (props) {
-        this.foreign_name = props.foreign_name;
-        this.name = props.name;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "The part of the export/import statement that declare names from a module.",
-    $propdoc: {
-        foreign_name: "[AST_SymbolExportForeign|AST_SymbolImportForeign] The name being exported/imported (as specified in the module)",
-        name: "[AST_SymbolExport|AST_SymbolImport] The name as it is visible to this module."
-    },
-    _walk: function (visitor) {
-        return visitor._visit(this, function() {
-            this.foreign_name._walk(visitor);
-            this.name._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.name);
-        push(this.foreign_name);
-    },
-});
-
-var AST_Import = DEFNODE(
-    "Import",
-    "imported_name imported_names module_name assert_clause",
-    function AST_Import(props) {
-        if (props) {
-            this.imported_name = props.imported_name;
-            this.imported_names = props.imported_names;
-            this.module_name = props.module_name;
-            this.assert_clause = props.assert_clause;
-            this.start = props.start;
-            this.end = props.end;
-        }
-
-        this.flags = 0;
-    },
-    {
-        $documentation: "An `import` statement",
-        $propdoc: {
-            imported_name: "[AST_SymbolImport] The name of the variable holding the module's default export.",
-            imported_names: "[AST_NameMapping*] The names of non-default imported variables",
-            module_name: "[AST_String] String literal describing where this module came from",
-            assert_clause: "[AST_Object?] The import assertion"
-        },
-        _walk: function(visitor) {
-            return visitor._visit(this, function() {
-                if (this.imported_name) {
-                    this.imported_name._walk(visitor);
-                }
-                if (this.imported_names) {
-                    this.imported_names.forEach(function(name_import) {
-                        name_import._walk(visitor);
-                    });
-                }
-                this.module_name._walk(visitor);
-            });
-        },
-        _children_backwards(push) {
-            push(this.module_name);
-            if (this.imported_names) {
-                let i = this.imported_names.length;
-                while (i--) push(this.imported_names[i]);
-            }
-            if (this.imported_name) push(this.imported_name);
-        },
-    }
-);
-
-var AST_ImportMeta = DEFNODE("ImportMeta", null, function AST_ImportMeta(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A reference to import.meta",
-});
-
-var AST_Export = DEFNODE(
-    "Export",
-    "exported_definition exported_value is_default exported_names module_name assert_clause",
-    function AST_Export(props) {
-        if (props) {
-            this.exported_definition = props.exported_definition;
-            this.exported_value = props.exported_value;
-            this.is_default = props.is_default;
-            this.exported_names = props.exported_names;
-            this.module_name = props.module_name;
-            this.assert_clause = props.assert_clause;
-            this.start = props.start;
-            this.end = props.end;
-        }
-
-        this.flags = 0;
-    },
-    {
-        $documentation: "An `export` statement",
-        $propdoc: {
-            exported_definition: "[AST_Defun|AST_Definitions|AST_DefClass?] An exported definition",
-            exported_value: "[AST_Node?] An exported value",
-            exported_names: "[AST_NameMapping*?] List of exported names",
-            module_name: "[AST_String?] Name of the file to load exports from",
-            is_default: "[Boolean] Whether this is the default exported value of this module",
-            assert_clause: "[AST_Object?] The import assertion"
-        },
-        _walk: function (visitor) {
-            return visitor._visit(this, function () {
-                if (this.exported_definition) {
-                    this.exported_definition._walk(visitor);
-                }
-                if (this.exported_value) {
-                    this.exported_value._walk(visitor);
-                }
-                if (this.exported_names) {
-                    this.exported_names.forEach(function(name_export) {
-                        name_export._walk(visitor);
-                    });
-                }
-                if (this.module_name) {
-                    this.module_name._walk(visitor);
-                }
-            });
-        },
-        _children_backwards(push) {
-            if (this.module_name) push(this.module_name);
-            if (this.exported_names) {
-                let i = this.exported_names.length;
-                while (i--) push(this.exported_names[i]);
-            }
-            if (this.exported_value) push(this.exported_value);
-            if (this.exported_definition) push(this.exported_definition);
-        }
-    },
-    AST_Statement
-);
-
-/* -----[ OTHER ]----- */
-
-var AST_Call = DEFNODE(
-    "Call",
-    "expression args optional _annotations",
-    function AST_Call(props) {
-        if (props) {
-            this.expression = props.expression;
-            this.args = props.args;
-            this.optional = props.optional;
-            this._annotations = props._annotations;
-            this.start = props.start;
-            this.end = props.end;
-            this.initialize();
-        }
-
-        this.flags = 0;
-    },
-    {
-        $documentation: "A function call expression",
-        $propdoc: {
-            expression: "[AST_Node] expression to invoke as function",
-            args: "[AST_Node*] array of arguments",
-            optional: "[boolean] whether this is an optional call (IE ?.() )",
-            _annotations: "[number] bitfield containing information about the call"
-        },
-        initialize() {
-            if (this._annotations == null) this._annotations = 0;
-        },
-        _walk(visitor) {
-            return visitor._visit(this, function() {
-                var args = this.args;
-                for (var i = 0, len = args.length; i < len; i++) {
-                    args[i]._walk(visitor);
-                }
-                this.expression._walk(visitor);  // TODO why do we need to crawl this last?
-            });
-        },
-        _children_backwards(push) {
-            let i = this.args.length;
-            while (i--) push(this.args[i]);
-            push(this.expression);
-        },
-    }
-);
-
-var AST_New = DEFNODE("New", null, function AST_New(props) {
-    if (props) {
-        this.expression = props.expression;
-        this.args = props.args;
-        this.optional = props.optional;
-        this._annotations = props._annotations;
-        this.start = props.start;
-        this.end = props.end;
-        this.initialize();
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "An object instantiation.  Derives from a function call since it has exactly the same properties"
-}, AST_Call);
-
-var AST_Sequence = DEFNODE("Sequence", "expressions", function AST_Sequence(props) {
-    if (props) {
-        this.expressions = props.expressions;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A sequence expression (comma-separated expressions)",
-    $propdoc: {
-        expressions: "[AST_Node*] array of expressions (at least two)"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.expressions.forEach(function(node) {
-                node._walk(visitor);
-            });
-        });
-    },
-    _children_backwards(push) {
-        let i = this.expressions.length;
-        while (i--) push(this.expressions[i]);
-    },
-});
-
-var AST_PropAccess = DEFNODE(
-    "PropAccess",
-    "expression property optional",
-    function AST_PropAccess(props) {
-        if (props) {
-            this.expression = props.expression;
-            this.property = props.property;
-            this.optional = props.optional;
-            this.start = props.start;
-            this.end = props.end;
-        }
-
-        this.flags = 0;
-    },
-    {
-        $documentation: "Base class for property access expressions, i.e. `a.foo` or `a[\"foo\"]`",
-        $propdoc: {
-            expression: "[AST_Node] the “container” expression",
-            property: "[AST_Node|string] the property to access.  For AST_Dot & AST_DotHash this is always a plain string, while for AST_Sub it's an arbitrary AST_Node",
-
-            optional: "[boolean] whether this is an optional property access (IE ?.)"
-        }
-    }
-);
-
-var AST_Dot = DEFNODE("Dot", "quote", function AST_Dot(props) {
-    if (props) {
-        this.quote = props.quote;
-        this.expression = props.expression;
-        this.property = props.property;
-        this.optional = props.optional;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A dotted property access expression",
-    $propdoc: {
-        quote: "[string] the original quote character when transformed from AST_Sub",
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.expression._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.expression);
-    },
-}, AST_PropAccess);
-
-var AST_DotHash = DEFNODE("DotHash", "", function AST_DotHash(props) {
-    if (props) {
-        this.expression = props.expression;
-        this.property = props.property;
-        this.optional = props.optional;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A dotted property access to a private property",
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.expression._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.expression);
-    },
-}, AST_PropAccess);
-
-var AST_Sub = DEFNODE("Sub", null, function AST_Sub(props) {
-    if (props) {
-        this.expression = props.expression;
-        this.property = props.property;
-        this.optional = props.optional;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Index-style property access, i.e. `a[\"foo\"]`",
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.expression._walk(visitor);
-            this.property._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.property);
-        push(this.expression);
-    },
-}, AST_PropAccess);
-
-var AST_Chain = DEFNODE("Chain", "expression", function AST_Chain(props) {
-    if (props) {
-        this.expression = props.expression;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A chain expression like a?.b?.(c)?.[d]",
-    $propdoc: {
-        expression: "[AST_Call|AST_Dot|AST_DotHash|AST_Sub] chain element."
-    },
-    _walk: function (visitor) {
-        return visitor._visit(this, function() {
-            this.expression._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.expression);
-    },
-});
-
-var AST_Unary = DEFNODE("Unary", "operator expression", function AST_Unary(props) {
-    if (props) {
-        this.operator = props.operator;
-        this.expression = props.expression;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Base class for unary expressions",
-    $propdoc: {
-        operator: "[string] the operator",
-        expression: "[AST_Node] expression that this unary operator applies to"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.expression._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.expression);
-    },
-});
-
-var AST_UnaryPrefix = DEFNODE("UnaryPrefix", null, function AST_UnaryPrefix(props) {
-    if (props) {
-        this.operator = props.operator;
-        this.expression = props.expression;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Unary prefix expression, i.e. `typeof i` or `++i`"
-}, AST_Unary);
-
-var AST_UnaryPostfix = DEFNODE("UnaryPostfix", null, function AST_UnaryPostfix(props) {
-    if (props) {
-        this.operator = props.operator;
-        this.expression = props.expression;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Unary postfix expression, i.e. `i++`"
-}, AST_Unary);
-
-var AST_Binary = DEFNODE("Binary", "operator left right", function AST_Binary(props) {
-    if (props) {
-        this.operator = props.operator;
-        this.left = props.left;
-        this.right = props.right;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Binary expression, i.e. `a + b`",
-    $propdoc: {
-        left: "[AST_Node] left-hand side expression",
-        operator: "[string] the operator",
-        right: "[AST_Node] right-hand side expression"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            this.left._walk(visitor);
-            this.right._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.right);
-        push(this.left);
-    },
-});
-
-var AST_Conditional = DEFNODE(
-    "Conditional",
-    "condition consequent alternative",
-    function AST_Conditional(props) {
-        if (props) {
-            this.condition = props.condition;
-            this.consequent = props.consequent;
-            this.alternative = props.alternative;
-            this.start = props.start;
-            this.end = props.end;
-        }
-
-        this.flags = 0;
-    },
-    {
-        $documentation: "Conditional expression using the ternary operator, i.e. `a ? b : c`",
-        $propdoc: {
-            condition: "[AST_Node]",
-            consequent: "[AST_Node]",
-            alternative: "[AST_Node]"
-        },
-        _walk: function(visitor) {
-            return visitor._visit(this, function() {
-                this.condition._walk(visitor);
-                this.consequent._walk(visitor);
-                this.alternative._walk(visitor);
-            });
-        },
-        _children_backwards(push) {
-            push(this.alternative);
-            push(this.consequent);
-            push(this.condition);
-        },
-    }
-);
-
-var AST_Assign = DEFNODE("Assign", "logical", function AST_Assign(props) {
-    if (props) {
-        this.logical = props.logical;
-        this.operator = props.operator;
-        this.left = props.left;
-        this.right = props.right;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "An assignment expression — `a = b + 5`",
-    $propdoc: {
-        logical: "Whether it's a logical assignment"
-    }
-}, AST_Binary);
-
-var AST_DefaultAssign = DEFNODE("DefaultAssign", null, function AST_DefaultAssign(props) {
-    if (props) {
-        this.operator = props.operator;
-        this.left = props.left;
-        this.right = props.right;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A default assignment expression like in `(a = 3) => a`"
-}, AST_Binary);
-
-/* -----[ LITERALS ]----- */
-
-var AST_Array = DEFNODE("Array", "elements", function AST_Array(props) {
-    if (props) {
-        this.elements = props.elements;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "An array literal",
-    $propdoc: {
-        elements: "[AST_Node*] array of elements"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            var elements = this.elements;
-            for (var i = 0, len = elements.length; i < len; i++) {
-                elements[i]._walk(visitor);
-            }
-        });
-    },
-    _children_backwards(push) {
-        let i = this.elements.length;
-        while (i--) push(this.elements[i]);
-    },
-});
-
-var AST_Object = DEFNODE("Object", "properties", function AST_Object(props) {
-    if (props) {
-        this.properties = props.properties;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "An object literal",
-    $propdoc: {
-        properties: "[AST_ObjectProperty*] array of properties"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            var properties = this.properties;
-            for (var i = 0, len = properties.length; i < len; i++) {
-                properties[i]._walk(visitor);
-            }
-        });
-    },
-    _children_backwards(push) {
-        let i = this.properties.length;
-        while (i--) push(this.properties[i]);
-    },
-});
-
-var AST_ObjectProperty = DEFNODE("ObjectProperty", "key value", function AST_ObjectProperty(props) {
-    if (props) {
-        this.key = props.key;
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Base class for literal object properties",
-    $propdoc: {
-        key: "[string|AST_Node] property name. For ObjectKeyVal this is a string. For getters, setters and computed property this is an AST_Node.",
-        value: "[AST_Node] property value.  For getters and setters this is an AST_Accessor."
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            if (this.key instanceof AST_Node)
-                this.key._walk(visitor);
-            this.value._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        push(this.value);
-        if (this.key instanceof AST_Node) push(this.key);
-    }
-});
-
-var AST_ObjectKeyVal = DEFNODE("ObjectKeyVal", "quote", function AST_ObjectKeyVal(props) {
-    if (props) {
-        this.quote = props.quote;
-        this.key = props.key;
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A key: value object property",
-    $propdoc: {
-        quote: "[string] the original quote character"
-    },
-    computed_key() {
-        return this.key instanceof AST_Node;
-    }
-}, AST_ObjectProperty);
-
-var AST_PrivateSetter = DEFNODE("PrivateSetter", "static", function AST_PrivateSetter(props) {
-    if (props) {
-        this.static = props.static;
-        this.key = props.key;
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $propdoc: {
-        static: "[boolean] whether this is a static private setter"
-    },
-    $documentation: "A private setter property",
-    computed_key() {
-        return false;
-    }
-}, AST_ObjectProperty);
-
-var AST_PrivateGetter = DEFNODE("PrivateGetter", "static", function AST_PrivateGetter(props) {
-    if (props) {
-        this.static = props.static;
-        this.key = props.key;
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $propdoc: {
-        static: "[boolean] whether this is a static private getter"
-    },
-    $documentation: "A private getter property",
-    computed_key() {
-        return false;
-    }
-}, AST_ObjectProperty);
-
-var AST_ObjectSetter = DEFNODE("ObjectSetter", "quote static", function AST_ObjectSetter(props) {
-    if (props) {
-        this.quote = props.quote;
-        this.static = props.static;
-        this.key = props.key;
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $propdoc: {
-        quote: "[string|undefined] the original quote character, if any",
-        static: "[boolean] whether this is a static setter (classes only)"
-    },
-    $documentation: "An object setter property",
-    computed_key() {
-        return !(this.key instanceof AST_SymbolMethod);
-    }
-}, AST_ObjectProperty);
-
-var AST_ObjectGetter = DEFNODE("ObjectGetter", "quote static", function AST_ObjectGetter(props) {
-    if (props) {
-        this.quote = props.quote;
-        this.static = props.static;
-        this.key = props.key;
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $propdoc: {
-        quote: "[string|undefined] the original quote character, if any",
-        static: "[boolean] whether this is a static getter (classes only)"
-    },
-    $documentation: "An object getter property",
-    computed_key() {
-        return !(this.key instanceof AST_SymbolMethod);
-    }
-}, AST_ObjectProperty);
-
-var AST_ConciseMethod = DEFNODE(
-    "ConciseMethod",
-    "quote static is_generator async",
-    function AST_ConciseMethod(props) {
-        if (props) {
-            this.quote = props.quote;
-            this.static = props.static;
-            this.is_generator = props.is_generator;
-            this.async = props.async;
-            this.key = props.key;
-            this.value = props.value;
-            this.start = props.start;
-            this.end = props.end;
-        }
-
-        this.flags = 0;
-    },
-    {
-        $propdoc: {
-            quote: "[string|undefined] the original quote character, if any",
-            static: "[boolean] is this method static (classes only)",
-            is_generator: "[boolean] is this a generator method",
-            async: "[boolean] is this method async",
-        },
-        $documentation: "An ES6 concise method inside an object or class",
-        computed_key() {
-            return !(this.key instanceof AST_SymbolMethod);
-        }
-    },
-    AST_ObjectProperty
-);
-
-var AST_PrivateMethod = DEFNODE("PrivateMethod", "", function AST_PrivateMethod(props) {
-    if (props) {
-        this.quote = props.quote;
-        this.static = props.static;
-        this.is_generator = props.is_generator;
-        this.async = props.async;
-        this.key = props.key;
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A private class method inside a class",
-}, AST_ConciseMethod);
-
-var AST_Class = DEFNODE("Class", "name extends properties", function AST_Class(props) {
-    if (props) {
-        this.name = props.name;
-        this.extends = props.extends;
-        this.properties = props.properties;
-        this.variables = props.variables;
-        this.uses_with = props.uses_with;
-        this.uses_eval = props.uses_eval;
-        this.parent_scope = props.parent_scope;
-        this.enclosed = props.enclosed;
-        this.cname = props.cname;
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $propdoc: {
-        name: "[AST_SymbolClass|AST_SymbolDefClass?] optional class name.",
-        extends: "[AST_Node]? optional parent class",
-        properties: "[AST_ObjectProperty*] array of properties"
-    },
-    $documentation: "An ES6 class",
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            if (this.name) {
-                this.name._walk(visitor);
-            }
-            if (this.extends) {
-                this.extends._walk(visitor);
-            }
-            this.properties.forEach((prop) => prop._walk(visitor));
-        });
-    },
-    _children_backwards(push) {
-        let i = this.properties.length;
-        while (i--) push(this.properties[i]);
-        if (this.extends) push(this.extends);
-        if (this.name) push(this.name);
-    },
-}, AST_Scope /* TODO a class might have a scope but it's not a scope */);
-
-var AST_ClassProperty = DEFNODE("ClassProperty", "static quote", function AST_ClassProperty(props) {
-    if (props) {
-        this.static = props.static;
-        this.quote = props.quote;
-        this.key = props.key;
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A class property",
-    $propdoc: {
-        static: "[boolean] whether this is a static key",
-        quote: "[string] which quote is being used"
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            if (this.key instanceof AST_Node)
-                this.key._walk(visitor);
-            if (this.value instanceof AST_Node)
-                this.value._walk(visitor);
-        });
-    },
-    _children_backwards(push) {
-        if (this.value instanceof AST_Node) push(this.value);
-        if (this.key instanceof AST_Node) push(this.key);
-    },
-    computed_key() {
-        return !(this.key instanceof AST_SymbolClassProperty);
-    }
-}, AST_ObjectProperty);
-
-var AST_ClassPrivateProperty = DEFNODE("ClassPrivateProperty", "", function AST_ClassPrivateProperty(props) {
-    if (props) {
-        this.static = props.static;
-        this.quote = props.quote;
-        this.key = props.key;
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A class property for a private property",
-}, AST_ClassProperty);
-
-var AST_DefClass = DEFNODE("DefClass", null, function AST_DefClass(props) {
-    if (props) {
-        this.name = props.name;
-        this.extends = props.extends;
-        this.properties = props.properties;
-        this.variables = props.variables;
-        this.uses_with = props.uses_with;
-        this.uses_eval = props.uses_eval;
-        this.parent_scope = props.parent_scope;
-        this.enclosed = props.enclosed;
-        this.cname = props.cname;
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A class definition",
-}, AST_Class);
-
-var AST_ClassStaticBlock = DEFNODE("ClassStaticBlock", "body block_scope", function AST_ClassStaticBlock (props) {
-    this.body = props.body;
-    this.block_scope = props.block_scope;
-    this.start = props.start;
-    this.end = props.end;
-}, {
-    $documentation: "A block containing statements to be executed in the context of the class",
-    $propdoc: {
-        body: "[AST_Statement*] an array of statements",
-    },
-    _walk: function(visitor) {
-        return visitor._visit(this, function() {
-            walk_body(this, visitor);
-        });
-    },
-    _children_backwards(push) {
-        let i = this.body.length;
-        while (i--) push(this.body[i]);
-    },
-    clone: clone_block_scope,
-}, AST_Scope);
-
-var AST_ClassExpression = DEFNODE("ClassExpression", null, function AST_ClassExpression(props) {
-    if (props) {
-        this.name = props.name;
-        this.extends = props.extends;
-        this.properties = props.properties;
-        this.variables = props.variables;
-        this.uses_with = props.uses_with;
-        this.uses_eval = props.uses_eval;
-        this.parent_scope = props.parent_scope;
-        this.enclosed = props.enclosed;
-        this.cname = props.cname;
-        this.body = props.body;
-        this.block_scope = props.block_scope;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A class expression."
-}, AST_Class);
-
-var AST_Symbol = DEFNODE("Symbol", "scope name thedef", function AST_Symbol(props) {
-    if (props) {
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $propdoc: {
-        name: "[string] name of this symbol",
-        scope: "[AST_Scope/S] the current scope (not necessarily the definition scope)",
-        thedef: "[SymbolDef/S] the definition of this symbol"
-    },
-    $documentation: "Base class for all symbols"
-});
-
-var AST_NewTarget = DEFNODE("NewTarget", null, function AST_NewTarget(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A reference to new.target"
-});
-
-var AST_SymbolDeclaration = DEFNODE("SymbolDeclaration", "init", function AST_SymbolDeclaration(props) {
-    if (props) {
-        this.init = props.init;
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A declaration symbol (symbol in var/const, function name or argument, symbol in catch)",
-}, AST_Symbol);
-
-var AST_SymbolVar = DEFNODE("SymbolVar", null, function AST_SymbolVar(props) {
-    if (props) {
-        this.init = props.init;
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Symbol defining a variable",
-}, AST_SymbolDeclaration);
-
-var AST_SymbolBlockDeclaration = DEFNODE(
-    "SymbolBlockDeclaration",
-    null,
-    function AST_SymbolBlockDeclaration(props) {
-        if (props) {
-            this.init = props.init;
-            this.scope = props.scope;
-            this.name = props.name;
-            this.thedef = props.thedef;
-            this.start = props.start;
-            this.end = props.end;
-        }
-
-        this.flags = 0;
-    },
-    {
-        $documentation: "Base class for block-scoped declaration symbols"
-    },
-    AST_SymbolDeclaration
-);
-
-var AST_SymbolConst = DEFNODE("SymbolConst", null, function AST_SymbolConst(props) {
-    if (props) {
-        this.init = props.init;
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A constant declaration"
-}, AST_SymbolBlockDeclaration);
-
-var AST_SymbolLet = DEFNODE("SymbolLet", null, function AST_SymbolLet(props) {
-    if (props) {
-        this.init = props.init;
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A block-scoped `let` declaration"
-}, AST_SymbolBlockDeclaration);
-
-var AST_SymbolFunarg = DEFNODE("SymbolFunarg", null, function AST_SymbolFunarg(props) {
-    if (props) {
-        this.init = props.init;
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Symbol naming a function argument",
-}, AST_SymbolVar);
-
-var AST_SymbolDefun = DEFNODE("SymbolDefun", null, function AST_SymbolDefun(props) {
-    if (props) {
-        this.init = props.init;
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Symbol defining a function",
-}, AST_SymbolDeclaration);
-
-var AST_SymbolMethod = DEFNODE("SymbolMethod", null, function AST_SymbolMethod(props) {
-    if (props) {
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Symbol in an object defining a method",
-}, AST_Symbol);
-
-var AST_SymbolClassProperty = DEFNODE("SymbolClassProperty", null, function AST_SymbolClassProperty(props) {
-    if (props) {
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Symbol for a class property",
-}, AST_Symbol);
-
-var AST_SymbolLambda = DEFNODE("SymbolLambda", null, function AST_SymbolLambda(props) {
-    if (props) {
-        this.init = props.init;
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Symbol naming a function expression",
-}, AST_SymbolDeclaration);
-
-var AST_SymbolDefClass = DEFNODE("SymbolDefClass", null, function AST_SymbolDefClass(props) {
-    if (props) {
-        this.init = props.init;
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Symbol naming a class's name in a class declaration. Lexically scoped to its containing scope, and accessible within the class."
-}, AST_SymbolBlockDeclaration);
-
-var AST_SymbolClass = DEFNODE("SymbolClass", null, function AST_SymbolClass(props) {
-    if (props) {
-        this.init = props.init;
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Symbol naming a class's name. Lexically scoped to the class."
-}, AST_SymbolDeclaration);
-
-var AST_SymbolCatch = DEFNODE("SymbolCatch", null, function AST_SymbolCatch(props) {
-    if (props) {
-        this.init = props.init;
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Symbol naming the exception in catch",
-}, AST_SymbolBlockDeclaration);
-
-var AST_SymbolImport = DEFNODE("SymbolImport", null, function AST_SymbolImport(props) {
-    if (props) {
-        this.init = props.init;
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Symbol referring to an imported name",
-}, AST_SymbolBlockDeclaration);
-
-var AST_SymbolImportForeign = DEFNODE("SymbolImportForeign", null, function AST_SymbolImportForeign(props) {
-    if (props) {
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A symbol imported from a module, but it is defined in the other module, and its real name is irrelevant for this module's purposes",
-}, AST_Symbol);
-
-var AST_Label = DEFNODE("Label", "references", function AST_Label(props) {
-    if (props) {
-        this.references = props.references;
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-        this.initialize();
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Symbol naming a label (declaration)",
-    $propdoc: {
-        references: "[AST_LoopControl*] a list of nodes referring to this label"
-    },
-    initialize: function() {
-        this.references = [];
-        this.thedef = this;
-    }
-}, AST_Symbol);
-
-var AST_SymbolRef = DEFNODE("SymbolRef", null, function AST_SymbolRef(props) {
-    if (props) {
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Reference to some symbol (not definition/declaration)",
-}, AST_Symbol);
-
-var AST_SymbolExport = DEFNODE("SymbolExport", null, function AST_SymbolExport(props) {
-    if (props) {
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Symbol referring to a name to export",
-}, AST_SymbolRef);
-
-var AST_SymbolExportForeign = DEFNODE("SymbolExportForeign", null, function AST_SymbolExportForeign(props) {
-    if (props) {
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A symbol exported from this module, but it is used in the other module, and its real name is irrelevant for this module's purposes",
-}, AST_Symbol);
-
-var AST_LabelRef = DEFNODE("LabelRef", null, function AST_LabelRef(props) {
-    if (props) {
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Reference to a label symbol",
-}, AST_Symbol);
-
-var AST_This = DEFNODE("This", null, function AST_This(props) {
-    if (props) {
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "The `this` symbol",
-}, AST_Symbol);
-
-var AST_Super = DEFNODE("Super", null, function AST_Super(props) {
-    if (props) {
-        this.scope = props.scope;
-        this.name = props.name;
-        this.thedef = props.thedef;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "The `super` symbol",
-}, AST_This);
-
-var AST_Constant = DEFNODE("Constant", null, function AST_Constant(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Base class for all constants",
-    getValue: function() {
-        return this.value;
-    }
-});
-
-var AST_String = DEFNODE("String", "value quote", function AST_String(props) {
-    if (props) {
-        this.value = props.value;
-        this.quote = props.quote;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A string literal",
-    $propdoc: {
-        value: "[string] the contents of this string",
-        quote: "[string] the original quote character"
-    }
-}, AST_Constant);
-
-var AST_Number = DEFNODE("Number", "value raw", function AST_Number(props) {
-    if (props) {
-        this.value = props.value;
-        this.raw = props.raw;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A number literal",
-    $propdoc: {
-        value: "[number] the numeric value",
-        raw: "[string] numeric value as string"
-    }
-}, AST_Constant);
-
-var AST_BigInt = DEFNODE("BigInt", "value", function AST_BigInt(props) {
-    if (props) {
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A big int literal",
-    $propdoc: {
-        value: "[string] big int value"
-    }
-}, AST_Constant);
-
-var AST_RegExp = DEFNODE("RegExp", "value", function AST_RegExp(props) {
-    if (props) {
-        this.value = props.value;
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A regexp literal",
-    $propdoc: {
-        value: "[RegExp] the actual regexp",
-    }
-}, AST_Constant);
-
-var AST_Atom = DEFNODE("Atom", null, function AST_Atom(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Base class for atoms",
-}, AST_Constant);
-
-var AST_Null = DEFNODE("Null", null, function AST_Null(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "The `null` atom",
-    value: null
-}, AST_Atom);
-
-var AST_NaN = DEFNODE("NaN", null, function AST_NaN(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "The impossible value",
-    value: 0/0
-}, AST_Atom);
-
-var AST_Undefined = DEFNODE("Undefined", null, function AST_Undefined(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "The `undefined` value",
-    value: (function() {}())
-}, AST_Atom);
-
-var AST_Hole = DEFNODE("Hole", null, function AST_Hole(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "A hole in an array",
-    value: (function() {}())
-}, AST_Atom);
-
-var AST_Infinity = DEFNODE("Infinity", null, function AST_Infinity(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "The `Infinity` value",
-    value: 1/0
-}, AST_Atom);
-
-var AST_Boolean = DEFNODE("Boolean", null, function AST_Boolean(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "Base class for booleans",
-}, AST_Atom);
-
-var AST_False = DEFNODE("False", null, function AST_False(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "The `false` atom",
-    value: false
-}, AST_Boolean);
-
-var AST_True = DEFNODE("True", null, function AST_True(props) {
-    if (props) {
-        this.start = props.start;
-        this.end = props.end;
-    }
-
-    this.flags = 0;
-}, {
-    $documentation: "The `true` atom",
-    value: true
-}, AST_Boolean);
-
-/* -----[ Walk function ]---- */
-
-/**
- * Walk nodes in depth-first search fashion.
- * Callback can return `walk_abort` symbol to stop iteration.
- * It can also return `true` to stop iteration just for child nodes.
- * Iteration can be stopped and continued by passing the `to_visit` argument,
- * which is given to the callback in the second argument.
- **/
-function walk(node, cb, to_visit = [node]) {
-    const push = to_visit.push.bind(to_visit);
-    while (to_visit.length) {
-        const node = to_visit.pop();
-        const ret = cb(node, to_visit);
-
-        if (ret) {
-            if (ret === walk_abort) return true;
-            continue;
-        }
-
-        node._children_backwards(push);
-    }
-    return false;
-}
-
-/**
- * Walks an AST node and its children.
- *
- * {cb} can return `walk_abort` to interrupt the walk.
- *
- * @param node
- * @param cb {(node, info: { parent: (nth) => any }) => (boolean | undefined)}
- *
- * @returns {boolean} whether the walk was aborted
- *
- * @example
- * const found_some_cond = walk_parent(my_ast_node, (node, { parent }) => {
- *   if (some_cond(node, parent())) return walk_abort
- * });
- */
-function walk_parent(node, cb, initial_stack) {
-    const to_visit = [node];
-    const push = to_visit.push.bind(to_visit);
-    const stack = initial_stack ? initial_stack.slice() : [];
-    const parent_pop_indices = [];
-
-    let current;
-
-    const info = {
-        parent: (n = 0) => {
-            if (n === -1) {
-                return current;
-            }
-
-            // [ p1 p0 ] [ 1 0 ]
-            if (initial_stack && n >= stack.length) {
-                n -= stack.length;
-                return initial_stack[
-                    initial_stack.length - (n + 1)
-                ];
-            }
-
-            return stack[stack.length - (1 + n)];
-        },
-    };
-
-    while (to_visit.length) {
-        current = to_visit.pop();
-
-        while (
-            parent_pop_indices.length &&
-            to_visit.length == parent_pop_indices[parent_pop_indices.length - 1]
-        ) {
-            stack.pop();
-            parent_pop_indices.pop();
-        }
-
-        const ret = cb(current, info);
-
-        if (ret) {
-            if (ret === walk_abort) return true;
-            continue;
-        }
-
-        const visit_length = to_visit.length;
-
-        current._children_backwards(push);
-
-        // Push only if we're going to traverse the children
-        if (to_visit.length > visit_length) {
-            stack.push(current);
-            parent_pop_indices.push(visit_length - 1);
-        }
-    }
-
-    return false;
-}
-
-const walk_abort = Symbol("abort walk");
-
-/* -----[ TreeWalker ]----- */
-
-class TreeWalker {
-    constructor(callback) {
-        this.visit = callback;
-        this.stack = [];
-        this.directives = Object.create(null);
-    }
-
-    _visit(node, descend) {
-        this.push(node);
-        var ret = this.visit(node, descend ? function() {
-            descend.call(node);
-        } : noop);
-        if (!ret && descend) {
-            descend.call(node);
-        }
-        this.pop();
-        return ret;
-    }
-
-    parent(n) {
-        return this.stack[this.stack.length - 2 - (n || 0)];
-    }
-
-    push(node) {
-        if (node instanceof AST_Lambda) {
-            this.directives = Object.create(this.directives);
-        } else if (node instanceof AST_Directive && !this.directives[node.value]) {
-            this.directives[node.value] = node;
-        } else if (node instanceof AST_Class) {
-            this.directives = Object.create(this.directives);
-            if (!this.directives["use strict"]) {
-                this.directives["use strict"] = node;
-            }
-        }
-        this.stack.push(node);
-    }
-
-    pop() {
-        var node = this.stack.pop();
-        if (node instanceof AST_Lambda || node instanceof AST_Class) {
-            this.directives = Object.getPrototypeOf(this.directives);
-        }
-    }
-
-    self() {
-        return this.stack[this.stack.length - 1];
-    }
-
-    find_parent(type) {
-        var stack = this.stack;
-        for (var i = stack.length; --i >= 0;) {
-            var x = stack[i];
-            if (x instanceof type) return x;
-        }
-    }
-
-    find_scope() {
-        for (let i = 0;;i++) {
-            const p = this.parent(i);
-            if (p instanceof AST_Toplevel) return p;
-            if (p instanceof AST_Lambda) return p;
-            if (p.block_scope) return p.block_scope;
-        }
-    }
-
-    has_directive(type) {
-        var dir = this.directives[type];
-        if (dir) return dir;
-        var node = this.stack[this.stack.length - 1];
-        if (node instanceof AST_Scope && node.body) {
-            for (var i = 0; i < node.body.length; ++i) {
-                var st = node.body[i];
-                if (!(st instanceof AST_Directive)) break;
-                if (st.value == type) return st;
-            }
-        }
-    }
-
-    loopcontrol_target(node) {
-        var stack = this.stack;
-        if (node.label) for (var i = stack.length; --i >= 0;) {
-            var x = stack[i];
-            if (x instanceof AST_LabeledStatement && x.label.name == node.label.name)
-                return x.body;
-        } else for (var i = stack.length; --i >= 0;) {
-            var x = stack[i];
-            if (x instanceof AST_IterationStatement
-                || node instanceof AST_Break && x instanceof AST_Switch)
-                return x;
-        }
-    }
-}
-
-// Tree transformer helpers.
-class TreeTransformer extends TreeWalker {
-    constructor(before, after) {
-        super();
-        this.before = before;
-        this.after = after;
-    }
-}
-
-const _PURE     = 0b00000001;
-const _INLINE   = 0b00000010;
-const _NOINLINE = 0b00000100;
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-function def_transform(node, descend) {
-    node.DEFMETHOD("transform", function(tw, in_list) {
-        let transformed = undefined;
-        tw.push(this);
-        if (tw.before) transformed = tw.before(this, descend, in_list);
-        if (transformed === undefined) {
-            transformed = this;
-            descend(transformed, tw);
-            if (tw.after) {
-                const after_ret = tw.after(transformed, in_list);
-                if (after_ret !== undefined) transformed = after_ret;
-            }
-        }
-        tw.pop();
-        return transformed;
-    });
-}
-
-function do_list(list, tw) {
-    return MAP(list, function(node) {
-        return node.transform(tw, true);
-    });
-}
-
-def_transform(AST_Node, noop);
-
-def_transform(AST_LabeledStatement, function(self, tw) {
-    self.label = self.label.transform(tw);
-    self.body = self.body.transform(tw);
-});
-
-def_transform(AST_SimpleStatement, function(self, tw) {
-    self.body = self.body.transform(tw);
-});
-
-def_transform(AST_Block, function(self, tw) {
-    self.body = do_list(self.body, tw);
-});
-
-def_transform(AST_Do, function(self, tw) {
-    self.body = self.body.transform(tw);
-    self.condition = self.condition.transform(tw);
-});
-
-def_transform(AST_While, function(self, tw) {
-    self.condition = self.condition.transform(tw);
-    self.body = self.body.transform(tw);
-});
-
-def_transform(AST_For, function(self, tw) {
-    if (self.init) self.init = self.init.transform(tw);
-    if (self.condition) self.condition = self.condition.transform(tw);
-    if (self.step) self.step = self.step.transform(tw);
-    self.body = self.body.transform(tw);
-});
-
-def_transform(AST_ForIn, function(self, tw) {
-    self.init = self.init.transform(tw);
-    self.object = self.object.transform(tw);
-    self.body = self.body.transform(tw);
-});
-
-def_transform(AST_With, function(self, tw) {
-    self.expression = self.expression.transform(tw);
-    self.body = self.body.transform(tw);
-});
-
-def_transform(AST_Exit, function(self, tw) {
-    if (self.value) self.value = self.value.transform(tw);
-});
-
-def_transform(AST_LoopControl, function(self, tw) {
-    if (self.label) self.label = self.label.transform(tw);
-});
-
-def_transform(AST_If, function(self, tw) {
-    self.condition = self.condition.transform(tw);
-    self.body = self.body.transform(tw);
-    if (self.alternative) self.alternative = self.alternative.transform(tw);
-});
-
-def_transform(AST_Switch, function(self, tw) {
-    self.expression = self.expression.transform(tw);
-    self.body = do_list(self.body, tw);
-});
-
-def_transform(AST_Case, function(self, tw) {
-    self.expression = self.expression.transform(tw);
-    self.body = do_list(self.body, tw);
-});
-
-def_transform(AST_Try, function(self, tw) {
-    self.body = do_list(self.body, tw);
-    if (self.bcatch) self.bcatch = self.bcatch.transform(tw);
-    if (self.bfinally) self.bfinally = self.bfinally.transform(tw);
-});
-
-def_transform(AST_Catch, function(self, tw) {
-    if (self.argname) self.argname = self.argname.transform(tw);
-    self.body = do_list(self.body, tw);
-});
-
-def_transform(AST_Definitions, function(self, tw) {
-    self.definitions = do_list(self.definitions, tw);
-});
-
-def_transform(AST_VarDef, function(self, tw) {
-    self.name = self.name.transform(tw);
-    if (self.value) self.value = self.value.transform(tw);
-});
-
-def_transform(AST_Destructuring, function(self, tw) {
-    self.names = do_list(self.names, tw);
-});
-
-def_transform(AST_Lambda, function(self, tw) {
-    if (self.name) self.name = self.name.transform(tw);
-    self.argnames = do_list(self.argnames, tw);
-    if (self.body instanceof AST_Node) {
-        self.body = self.body.transform(tw);
-    } else {
-        self.body = do_list(self.body, tw);
-    }
-});
-
-def_transform(AST_Call, function(self, tw) {
-    self.expression = self.expression.transform(tw);
-    self.args = do_list(self.args, tw);
-});
-
-def_transform(AST_Sequence, function(self, tw) {
-    const result = do_list(self.expressions, tw);
-    self.expressions = result.length
-        ? result
-        : [new AST_Number({ value: 0 })];
-});
-
-def_transform(AST_PropAccess, function(self, tw) {
-    self.expression = self.expression.transform(tw);
-});
-
-def_transform(AST_Sub, function(self, tw) {
-    self.expression = self.expression.transform(tw);
-    self.property = self.property.transform(tw);
-});
-
-def_transform(AST_Chain, function(self, tw) {
-    self.expression = self.expression.transform(tw);
-});
-
-def_transform(AST_Yield, function(self, tw) {
-    if (self.expression) self.expression = self.expression.transform(tw);
-});
-
-def_transform(AST_Await, function(self, tw) {
-    self.expression = self.expression.transform(tw);
-});
-
-def_transform(AST_Unary, function(self, tw) {
-    self.expression = self.expression.transform(tw);
-});
-
-def_transform(AST_Binary, function(self, tw) {
-    self.left = self.left.transform(tw);
-    self.right = self.right.transform(tw);
-});
-
-def_transform(AST_Conditional, function(self, tw) {
-    self.condition = self.condition.transform(tw);
-    self.consequent = self.consequent.transform(tw);
-    self.alternative = self.alternative.transform(tw);
-});
-
-def_transform(AST_Array, function(self, tw) {
-    self.elements = do_list(self.elements, tw);
-});
-
-def_transform(AST_Object, function(self, tw) {
-    self.properties = do_list(self.properties, tw);
-});
-
-def_transform(AST_ObjectProperty, function(self, tw) {
-    if (self.key instanceof AST_Node) {
-        self.key = self.key.transform(tw);
-    }
-    if (self.value) self.value = self.value.transform(tw);
-});
-
-def_transform(AST_Class, function(self, tw) {
-    if (self.name) self.name = self.name.transform(tw);
-    if (self.extends) self.extends = self.extends.transform(tw);
-    self.properties = do_list(self.properties, tw);
-});
-
-def_transform(AST_ClassStaticBlock, function(self, tw) {
-    self.body = do_list(self.body, tw);
-});
-
-def_transform(AST_Expansion, function(self, tw) {
-    self.expression = self.expression.transform(tw);
-});
-
-def_transform(AST_NameMapping, function(self, tw) {
-    self.foreign_name = self.foreign_name.transform(tw);
-    self.name = self.name.transform(tw);
-});
-
-def_transform(AST_Import, function(self, tw) {
-    if (self.imported_name) self.imported_name = self.imported_name.transform(tw);
-    if (self.imported_names) do_list(self.imported_names, tw);
-    self.module_name = self.module_name.transform(tw);
-});
-
-def_transform(AST_Export, function(self, tw) {
-    if (self.exported_definition) self.exported_definition = self.exported_definition.transform(tw);
-    if (self.exported_value) self.exported_value = self.exported_value.transform(tw);
-    if (self.exported_names) do_list(self.exported_names, tw);
-    if (self.module_name) self.module_name = self.module_name.transform(tw);
-});
-
-def_transform(AST_TemplateString, function(self, tw) {
-    self.segments = do_list(self.segments, tw);
-});
-
-def_transform(AST_PrefixedTemplateString, function(self, tw) {
-    self.prefix = self.prefix.transform(tw);
-    self.template_string = self.template_string.transform(tw);
-});
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-(function() {
-
-    var normalize_directives = function(body) {
-        var in_directive = true;
-
-        for (var i = 0; i < body.length; i++) {
-            if (in_directive && body[i] instanceof AST_Statement && body[i].body instanceof AST_String) {
-                body[i] = new AST_Directive({
-                    start: body[i].start,
-                    end: body[i].end,
-                    value: body[i].body.value
-                });
-            } else if (in_directive && !(body[i] instanceof AST_Statement && body[i].body instanceof AST_String)) {
-                in_directive = false;
-            }
-        }
-
-        return body;
-    };
-
-    const assert_clause_from_moz = (assertions) => {
-        if (assertions && assertions.length > 0) {
-            return new AST_Object({
-                start: my_start_token(assertions),
-                end: my_end_token(assertions),
-                properties: assertions.map((assertion_kv) =>
-                    new AST_ObjectKeyVal({
-                        start: my_start_token(assertion_kv),
-                        end: my_end_token(assertion_kv),
-                        key: assertion_kv.key.name || assertion_kv.key.value,
-                        value: from_moz(assertion_kv.value)
-                    })
-                )
-            });
-        }
-        return null;
-    };
-
-    var MOZ_TO_ME = {
-        Program: function(M) {
-            return new AST_Toplevel({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                body: normalize_directives(M.body.map(from_moz))
-            });
-        },
-
-        ArrayPattern: function(M) {
-            return new AST_Destructuring({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                names: M.elements.map(function(elm) {
-                    if (elm === null) {
-                        return new AST_Hole();
-                    }
-                    return from_moz(elm);
-                }),
-                is_array: true
-            });
-        },
-
-        ObjectPattern: function(M) {
-            return new AST_Destructuring({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                names: M.properties.map(from_moz),
-                is_array: false
-            });
-        },
-
-        AssignmentPattern: function(M) {
-            return new AST_DefaultAssign({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                left: from_moz(M.left),
-                operator: "=",
-                right: from_moz(M.right)
-            });
-        },
-
-        SpreadElement: function(M) {
-            return new AST_Expansion({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                expression: from_moz(M.argument)
-            });
-        },
-
-        RestElement: function(M) {
-            return new AST_Expansion({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                expression: from_moz(M.argument)
-            });
-        },
-
-        TemplateElement: function(M) {
-            return new AST_TemplateSegment({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                value: M.value.cooked,
-                raw: M.value.raw
-            });
-        },
-
-        TemplateLiteral: function(M) {
-            var segments = [];
-            for (var i = 0; i < M.quasis.length; i++) {
-                segments.push(from_moz(M.quasis[i]));
-                if (M.expressions[i]) {
-                    segments.push(from_moz(M.expressions[i]));
-                }
-            }
-            return new AST_TemplateString({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                segments: segments
-            });
-        },
-
-        TaggedTemplateExpression: function(M) {
-            return new AST_PrefixedTemplateString({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                template_string: from_moz(M.quasi),
-                prefix: from_moz(M.tag)
-            });
-        },
-
-        FunctionDeclaration: function(M) {
-            return new AST_Defun({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                name: from_moz(M.id),
-                argnames: M.params.map(from_moz),
-                is_generator: M.generator,
-                async: M.async,
-                body: normalize_directives(from_moz(M.body).body)
-            });
-        },
-
-        FunctionExpression: function(M) {
-            return new AST_Function({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                name: from_moz(M.id),
-                argnames: M.params.map(from_moz),
-                is_generator: M.generator,
-                async: M.async,
-                body: normalize_directives(from_moz(M.body).body)
-            });
-        },
-
-        ArrowFunctionExpression: function(M) {
-            const body = M.body.type === "BlockStatement"
-                ? from_moz(M.body).body
-                : [make_node(AST_Return, {}, { value: from_moz(M.body) })];
-            return new AST_Arrow({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                argnames: M.params.map(from_moz),
-                body,
-                async: M.async,
-            });
-        },
-
-        ExpressionStatement: function(M) {
-            return new AST_SimpleStatement({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                body: from_moz(M.expression)
-            });
-        },
-
-        TryStatement: function(M) {
-            var handlers = M.handlers || [M.handler];
-            if (handlers.length > 1 || M.guardedHandlers && M.guardedHandlers.length) {
-                throw new Error("Multiple catch clauses are not supported.");
-            }
-            return new AST_Try({
-                start    : my_start_token(M),
-                end      : my_end_token(M),
-                body     : from_moz(M.block).body,
-                bcatch   : from_moz(handlers[0]),
-                bfinally : M.finalizer ? new AST_Finally(from_moz(M.finalizer)) : null
-            });
-        },
-
-        Property: function(M) {
-            var key = M.key;
-            var args = {
-                start    : my_start_token(key || M.value),
-                end      : my_end_token(M.value),
-                key      : key.type == "Identifier" ? key.name : key.value,
-                value    : from_moz(M.value)
-            };
-            if (M.computed) {
-                args.key = from_moz(M.key);
-            }
-            if (M.method) {
-                args.is_generator = M.value.generator;
-                args.async = M.value.async;
-                if (!M.computed) {
-                    args.key = new AST_SymbolMethod({ name: args.key });
-                } else {
-                    args.key = from_moz(M.key);
-                }
-                return new AST_ConciseMethod(args);
-            }
-            if (M.kind == "init") {
-                if (key.type != "Identifier" && key.type != "Literal") {
-                    args.key = from_moz(key);
-                }
-                return new AST_ObjectKeyVal(args);
-            }
-            if (typeof args.key === "string" || typeof args.key === "number") {
-                args.key = new AST_SymbolMethod({
-                    name: args.key
-                });
-            }
-            args.value = new AST_Accessor(args.value);
-            if (M.kind == "get") return new AST_ObjectGetter(args);
-            if (M.kind == "set") return new AST_ObjectSetter(args);
-            if (M.kind == "method") {
-                args.async = M.value.async;
-                args.is_generator = M.value.generator;
-                args.quote = M.computed ? "\"" : null;
-                return new AST_ConciseMethod(args);
-            }
-        },
-
-        MethodDefinition: function(M) {
-            var args = {
-                start    : my_start_token(M),
-                end      : my_end_token(M),
-                key      : M.computed ? from_moz(M.key) : new AST_SymbolMethod({ name: M.key.name || M.key.value }),
-                value    : from_moz(M.value),
-                static   : M.static,
-            };
-            if (M.kind == "get") {
-                return new AST_ObjectGetter(args);
-            }
-            if (M.kind == "set") {
-                return new AST_ObjectSetter(args);
-            }
-            args.is_generator = M.value.generator;
-            args.async = M.value.async;
-            return new AST_ConciseMethod(args);
-        },
-
-        FieldDefinition: function(M) {
-            let key;
-            if (M.computed) {
-                key = from_moz(M.key);
-            } else {
-                if (M.key.type !== "Identifier") throw new Error("Non-Identifier key in FieldDefinition");
-                key = from_moz(M.key);
-            }
-            return new AST_ClassProperty({
-                start    : my_start_token(M),
-                end      : my_end_token(M),
-                key,
-                value    : from_moz(M.value),
-                static   : M.static,
-            });
-        },
-
-        PropertyDefinition: function(M) {
-            let key;
-            if (M.computed) {
-                key = from_moz(M.key);
-            } else {
-                if (M.key.type !== "Identifier") throw new Error("Non-Identifier key in PropertyDefinition");
-                key = from_moz(M.key);
-            }
-
-            return new AST_ClassProperty({
-                start    : my_start_token(M),
-                end      : my_end_token(M),
-                key,
-                value    : from_moz(M.value),
-                static   : M.static,
-            });
-        },
-
-        StaticBlock: function(M) {
-            return new AST_ClassStaticBlock({
-                start : my_start_token(M),
-                end   : my_end_token(M),
-                body  : M.body.map(from_moz),
-            });
-        },
-
-        ArrayExpression: function(M) {
-            return new AST_Array({
-                start    : my_start_token(M),
-                end      : my_end_token(M),
-                elements : M.elements.map(function(elem) {
-                    return elem === null ? new AST_Hole() : from_moz(elem);
-                })
-            });
-        },
-
-        ObjectExpression: function(M) {
-            return new AST_Object({
-                start      : my_start_token(M),
-                end        : my_end_token(M),
-                properties : M.properties.map(function(prop) {
-                    if (prop.type === "SpreadElement") {
-                        return from_moz(prop);
-                    }
-                    prop.type = "Property";
-                    return from_moz(prop);
-                })
-            });
-        },
-
-        SequenceExpression: function(M) {
-            return new AST_Sequence({
-                start      : my_start_token(M),
-                end        : my_end_token(M),
-                expressions: M.expressions.map(from_moz)
-            });
-        },
-
-        MemberExpression: function(M) {
-            return new (M.computed ? AST_Sub : AST_Dot)({
-                start      : my_start_token(M),
-                end        : my_end_token(M),
-                property   : M.computed ? from_moz(M.property) : M.property.name,
-                expression : from_moz(M.object),
-                optional   : M.optional || false
-            });
-        },
-
-        ChainExpression: function(M) {
-            return new AST_Chain({
-                start      : my_start_token(M),
-                end        : my_end_token(M),
-                expression : from_moz(M.expression)
-            });
-        },
-
-        SwitchCase: function(M) {
-            return new (M.test ? AST_Case : AST_Default)({
-                start      : my_start_token(M),
-                end        : my_end_token(M),
-                expression : from_moz(M.test),
-                body       : M.consequent.map(from_moz)
-            });
-        },
-
-        VariableDeclaration: function(M) {
-            return new (M.kind === "const" ? AST_Const :
-                        M.kind === "let" ? AST_Let : AST_Var)({
-                start       : my_start_token(M),
-                end         : my_end_token(M),
-                definitions : M.declarations.map(from_moz)
-            });
-        },
-
-        ImportDeclaration: function(M) {
-            var imported_name = null;
-            var imported_names = null;
-            M.specifiers.forEach(function (specifier) {
-                if (specifier.type === "ImportSpecifier") {
-                    if (!imported_names) { imported_names = []; }
-                    imported_names.push(new AST_NameMapping({
-                        start: my_start_token(specifier),
-                        end: my_end_token(specifier),
-                        foreign_name: from_moz(specifier.imported),
-                        name: from_moz(specifier.local)
-                    }));
-                } else if (specifier.type === "ImportDefaultSpecifier") {
-                    imported_name = from_moz(specifier.local);
-                } else if (specifier.type === "ImportNamespaceSpecifier") {
-                    if (!imported_names) { imported_names = []; }
-                    imported_names.push(new AST_NameMapping({
-                        start: my_start_token(specifier),
-                        end: my_end_token(specifier),
-                        foreign_name: new AST_SymbolImportForeign({ name: "*" }),
-                        name: from_moz(specifier.local)
-                    }));
-                }
-            });
-            return new AST_Import({
-                start       : my_start_token(M),
-                end         : my_end_token(M),
-                imported_name: imported_name,
-                imported_names : imported_names,
-                module_name : from_moz(M.source),
-                assert_clause: assert_clause_from_moz(M.assertions)
-            });
-        },
-
-        ExportAllDeclaration: function(M) {
-            return new AST_Export({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                exported_names: [
-                    new AST_NameMapping({
-                        name: new AST_SymbolExportForeign({ name: "*" }),
-                        foreign_name: new AST_SymbolExportForeign({ name: "*" })
-                    })
-                ],
-                module_name: from_moz(M.source),
-                assert_clause: assert_clause_from_moz(M.assertions)
-            });
-        },
-
-        ExportNamedDeclaration: function(M) {
-            return new AST_Export({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                exported_definition: from_moz(M.declaration),
-                exported_names: M.specifiers && M.specifiers.length ? M.specifiers.map(function (specifier) {
-                    return new AST_NameMapping({
-                        foreign_name: from_moz(specifier.exported),
-                        name: from_moz(specifier.local)
-                    });
-                }) : null,
-                module_name: from_moz(M.source),
-                assert_clause: assert_clause_from_moz(M.assertions)
-            });
-        },
-
-        ExportDefaultDeclaration: function(M) {
-            return new AST_Export({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                exported_value: from_moz(M.declaration),
-                is_default: true
-            });
-        },
-
-        Literal: function(M) {
-            var val = M.value, args = {
-                start  : my_start_token(M),
-                end    : my_end_token(M)
-            };
-            var rx = M.regex;
-            if (rx && rx.pattern) {
-                // RegExpLiteral as per ESTree AST spec
-                args.value = {
-                    source: rx.pattern,
-                    flags: rx.flags
-                };
-                return new AST_RegExp(args);
-            } else if (rx) {
-                // support legacy RegExp
-                const rx_source = M.raw || val;
-                const match = rx_source.match(/^\/(.*)\/(\w*)$/);
-                if (!match) throw new Error("Invalid regex source " + rx_source);
-                const [_, source, flags] = match;
-                args.value = { source, flags };
-                return new AST_RegExp(args);
-            }
-            if (val === null) return new AST_Null(args);
-            switch (typeof val) {
-              case "string":
-                args.value = val;
-                return new AST_String(args);
-              case "number":
-                args.value = val;
-                args.raw = M.raw || val.toString();
-                return new AST_Number(args);
-              case "boolean":
-                return new (val ? AST_True : AST_False)(args);
-            }
-        },
-
-        MetaProperty: function(M) {
-            if (M.meta.name === "new" && M.property.name === "target") {
-                return new AST_NewTarget({
-                    start: my_start_token(M),
-                    end: my_end_token(M)
-                });
-            } else if (M.meta.name === "import" && M.property.name === "meta") {
-                return new AST_ImportMeta({
-                    start: my_start_token(M),
-                    end: my_end_token(M)
-                });
-            }
-        },
-
-        Identifier: function(M) {
-            var p = FROM_MOZ_STACK[FROM_MOZ_STACK.length - 2];
-            return new (  p.type == "LabeledStatement" ? AST_Label
-                        : p.type == "VariableDeclarator" && p.id === M ? (p.kind == "const" ? AST_SymbolConst : p.kind == "let" ? AST_SymbolLet : AST_SymbolVar)
-                        : /Import.*Specifier/.test(p.type) ? (p.local === M ? AST_SymbolImport : AST_SymbolImportForeign)
-                        : p.type == "ExportSpecifier" ? (p.local === M ? AST_SymbolExport : AST_SymbolExportForeign)
-                        : p.type == "FunctionExpression" ? (p.id === M ? AST_SymbolLambda : AST_SymbolFunarg)
-                        : p.type == "FunctionDeclaration" ? (p.id === M ? AST_SymbolDefun : AST_SymbolFunarg)
-                        : p.type == "ArrowFunctionExpression" ? (p.params.includes(M)) ? AST_SymbolFunarg : AST_SymbolRef
-                        : p.type == "ClassExpression" ? (p.id === M ? AST_SymbolClass : AST_SymbolRef)
-                        : p.type == "Property" ? (p.key === M && p.computed || p.value === M ? AST_SymbolRef : AST_SymbolMethod)
-                        : p.type == "PropertyDefinition" || p.type === "FieldDefinition" ? (p.key === M && p.computed || p.value === M ? AST_SymbolRef : AST_SymbolClassProperty)
-                        : p.type == "ClassDeclaration" ? (p.id === M ? AST_SymbolDefClass : AST_SymbolRef)
-                        : p.type == "MethodDefinition" ? (p.computed ? AST_SymbolRef : AST_SymbolMethod)
-                        : p.type == "CatchClause" ? AST_SymbolCatch
-                        : p.type == "BreakStatement" || p.type == "ContinueStatement" ? AST_LabelRef
-                        : AST_SymbolRef)({
-                            start : my_start_token(M),
-                            end   : my_end_token(M),
-                            name  : M.name
-                        });
-        },
-
-        BigIntLiteral(M) {
-            return new AST_BigInt({
-                start : my_start_token(M),
-                end   : my_end_token(M),
-                value : M.value
-            });
-        },
-
-        EmptyStatement: function(M) {
-            return new AST_EmptyStatement({
-                start: my_start_token(M),
-                end: my_end_token(M)
-            });
-        },
-
-        BlockStatement: function(M) {
-            return new AST_BlockStatement({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                body: M.body.map(from_moz)
-            });
-        },
-
-        IfStatement: function(M) {
-            return new AST_If({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                condition: from_moz(M.test),
-                body: from_moz(M.consequent),
-                alternative: from_moz(M.alternate)
-            });
-        },
-
-        LabeledStatement: function(M) {
-            return new AST_LabeledStatement({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                label: from_moz(M.label),
-                body: from_moz(M.body)
-            });
-        },
-
-        BreakStatement: function(M) {
-            return new AST_Break({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                label: from_moz(M.label)
-            });
-        },
-
-        ContinueStatement: function(M) {
-            return new AST_Continue({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                label: from_moz(M.label)
-            });
-        },
-
-        WithStatement: function(M) {
-            return new AST_With({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                expression: from_moz(M.object),
-                body: from_moz(M.body)
-            });
-        },
-
-        SwitchStatement: function(M) {
-            return new AST_Switch({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                expression: from_moz(M.discriminant),
-                body: M.cases.map(from_moz)
-            });
-        },
-
-        ReturnStatement: function(M) {
-            return new AST_Return({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                value: from_moz(M.argument)
-            });
-        },
-
-        ThrowStatement: function(M) {
-            return new AST_Throw({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                value: from_moz(M.argument)
-            });
-        },
-
-        WhileStatement: function(M) {
-            return new AST_While({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                condition: from_moz(M.test),
-                body: from_moz(M.body)
-            });
-        },
-
-        DoWhileStatement: function(M) {
-            return new AST_Do({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                condition: from_moz(M.test),
-                body: from_moz(M.body)
-            });
-        },
-
-        ForStatement: function(M) {
-            return new AST_For({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                init: from_moz(M.init),
-                condition: from_moz(M.test),
-                step: from_moz(M.update),
-                body: from_moz(M.body)
-            });
-        },
-
-        ForInStatement: function(M) {
-            return new AST_ForIn({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                init: from_moz(M.left),
-                object: from_moz(M.right),
-                body: from_moz(M.body)
-            });
-        },
-
-        ForOfStatement: function(M) {
-            return new AST_ForOf({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                init: from_moz(M.left),
-                object: from_moz(M.right),
-                body: from_moz(M.body),
-                await: M.await
-            });
-        },
-
-        AwaitExpression: function(M) {
-            return new AST_Await({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                expression: from_moz(M.argument)
-            });
-        },
-
-        YieldExpression: function(M) {
-            return new AST_Yield({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                expression: from_moz(M.argument),
-                is_star: M.delegate
-            });
-        },
-
-        DebuggerStatement: function(M) {
-            return new AST_Debugger({
-                start: my_start_token(M),
-                end: my_end_token(M)
-            });
-        },
-
-        VariableDeclarator: function(M) {
-            return new AST_VarDef({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                name: from_moz(M.id),
-                value: from_moz(M.init)
-            });
-        },
-
-        CatchClause: function(M) {
-            return new AST_Catch({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                argname: from_moz(M.param),
-                body: from_moz(M.body).body
-            });
-        },
-
-        ThisExpression: function(M) {
-            return new AST_This({
-                start: my_start_token(M),
-                end: my_end_token(M)
-            });
-        },
-
-        Super: function(M) {
-            return new AST_Super({
-                start: my_start_token(M),
-                end: my_end_token(M)
-            });
-        },
-
-        BinaryExpression: function(M) {
-            return new AST_Binary({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                operator: M.operator,
-                left: from_moz(M.left),
-                right: from_moz(M.right)
-            });
-        },
-
-        LogicalExpression: function(M) {
-            return new AST_Binary({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                operator: M.operator,
-                left: from_moz(M.left),
-                right: from_moz(M.right)
-            });
-        },
-
-        AssignmentExpression: function(M) {
-            return new AST_Assign({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                operator: M.operator,
-                left: from_moz(M.left),
-                right: from_moz(M.right)
-            });
-        },
-
-        ConditionalExpression: function(M) {
-            return new AST_Conditional({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                condition: from_moz(M.test),
-                consequent: from_moz(M.consequent),
-                alternative: from_moz(M.alternate)
-            });
-        },
-
-        NewExpression: function(M) {
-            return new AST_New({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                expression: from_moz(M.callee),
-                args: M.arguments.map(from_moz)
-            });
-        },
-
-        CallExpression: function(M) {
-            return new AST_Call({
-                start: my_start_token(M),
-                end: my_end_token(M),
-                expression: from_moz(M.callee),
-                optional: M.optional,
-                args: M.arguments.map(from_moz)
-            });
-        }
-    };
-
-    MOZ_TO_ME.UpdateExpression =
-    MOZ_TO_ME.UnaryExpression = function To_Moz_Unary(M) {
-        var prefix = "prefix" in M ? M.prefix
-            : M.type == "UnaryExpression" ? true : false;
-        return new (prefix ? AST_UnaryPrefix : AST_UnaryPostfix)({
-            start      : my_start_token(M),
-            end        : my_end_token(M),
-            operator   : M.operator,
-            expression : from_moz(M.argument)
-        });
-    };
-
-    MOZ_TO_ME.ClassDeclaration =
-    MOZ_TO_ME.ClassExpression = function From_Moz_Class(M) {
-        return new (M.type === "ClassDeclaration" ? AST_DefClass : AST_ClassExpression)({
-            start    : my_start_token(M),
-            end      : my_end_token(M),
-            name     : from_moz(M.id),
-            extends  : from_moz(M.superClass),
-            properties: M.body.body.map(from_moz)
-        });
-    };
-
-    def_to_moz(AST_EmptyStatement, function To_Moz_EmptyStatement() {
-        return {
-            type: "EmptyStatement"
-        };
-    });
-    def_to_moz(AST_BlockStatement, function To_Moz_BlockStatement(M) {
-        return {
-            type: "BlockStatement",
-            body: M.body.map(to_moz)
-        };
-    });
-    def_to_moz(AST_If, function To_Moz_IfStatement(M) {
-        return {
-            type: "IfStatement",
-            test: to_moz(M.condition),
-            consequent: to_moz(M.body),
-            alternate: to_moz(M.alternative)
-        };
-    });
-    def_to_moz(AST_LabeledStatement, function To_Moz_LabeledStatement(M) {
-        return {
-            type: "LabeledStatement",
-            label: to_moz(M.label),
-            body: to_moz(M.body)
-        };
-    });
-    def_to_moz(AST_Break, function To_Moz_BreakStatement(M) {
-        return {
-            type: "BreakStatement",
-            label: to_moz(M.label)
-        };
-    });
-    def_to_moz(AST_Continue, function To_Moz_ContinueStatement(M) {
-        return {
-            type: "ContinueStatement",
-            label: to_moz(M.label)
-        };
-    });
-    def_to_moz(AST_With, function To_Moz_WithStatement(M) {
-        return {
-            type: "WithStatement",
-            object: to_moz(M.expression),
-            body: to_moz(M.body)
-        };
-    });
-    def_to_moz(AST_Switch, function To_Moz_SwitchStatement(M) {
-        return {
-            type: "SwitchStatement",
-            discriminant: to_moz(M.expression),
-            cases: M.body.map(to_moz)
-        };
-    });
-    def_to_moz(AST_Return, function To_Moz_ReturnStatement(M) {
-        return {
-            type: "ReturnStatement",
-            argument: to_moz(M.value)
-        };
-    });
-    def_to_moz(AST_Throw, function To_Moz_ThrowStatement(M) {
-        return {
-            type: "ThrowStatement",
-            argument: to_moz(M.value)
-        };
-    });
-    def_to_moz(AST_While, function To_Moz_WhileStatement(M) {
-        return {
-            type: "WhileStatement",
-            test: to_moz(M.condition),
-            body: to_moz(M.body)
-        };
-    });
-    def_to_moz(AST_Do, function To_Moz_DoWhileStatement(M) {
-        return {
-            type: "DoWhileStatement",
-            test: to_moz(M.condition),
-            body: to_moz(M.body)
-        };
-    });
-    def_to_moz(AST_For, function To_Moz_ForStatement(M) {
-        return {
-            type: "ForStatement",
-            init: to_moz(M.init),
-            test: to_moz(M.condition),
-            update: to_moz(M.step),
-            body: to_moz(M.body)
-        };
-    });
-    def_to_moz(AST_ForIn, function To_Moz_ForInStatement(M) {
-        return {
-            type: "ForInStatement",
-            left: to_moz(M.init),
-            right: to_moz(M.object),
-            body: to_moz(M.body)
-        };
-    });
-    def_to_moz(AST_ForOf, function To_Moz_ForOfStatement(M) {
-        return {
-            type: "ForOfStatement",
-            left: to_moz(M.init),
-            right: to_moz(M.object),
-            body: to_moz(M.body),
-            await: M.await
-        };
-    });
-    def_to_moz(AST_Await, function To_Moz_AwaitExpression(M) {
-        return {
-            type: "AwaitExpression",
-            argument: to_moz(M.expression)
-        };
-    });
-    def_to_moz(AST_Yield, function To_Moz_YieldExpression(M) {
-        return {
-            type: "YieldExpression",
-            argument: to_moz(M.expression),
-            delegate: M.is_star
-        };
-    });
-    def_to_moz(AST_Debugger, function To_Moz_DebuggerStatement() {
-        return {
-            type: "DebuggerStatement"
-        };
-    });
-    def_to_moz(AST_VarDef, function To_Moz_VariableDeclarator(M) {
-        return {
-            type: "VariableDeclarator",
-            id: to_moz(M.name),
-            init: to_moz(M.value)
-        };
-    });
-    def_to_moz(AST_Catch, function To_Moz_CatchClause(M) {
-        return {
-            type: "CatchClause",
-            param: to_moz(M.argname),
-            body: to_moz_block(M)
-        };
-    });
-
-    def_to_moz(AST_This, function To_Moz_ThisExpression() {
-        return {
-            type: "ThisExpression"
-        };
-    });
-    def_to_moz(AST_Super, function To_Moz_Super() {
-        return {
-            type: "Super"
-        };
-    });
-    def_to_moz(AST_Binary, function To_Moz_BinaryExpression(M) {
-        return {
-            type: "BinaryExpression",
-            operator: M.operator,
-            left: to_moz(M.left),
-            right: to_moz(M.right)
-        };
-    });
-    def_to_moz(AST_Binary, function To_Moz_LogicalExpression(M) {
-        return {
-            type: "LogicalExpression",
-            operator: M.operator,
-            left: to_moz(M.left),
-            right: to_moz(M.right)
-        };
-    });
-    def_to_moz(AST_Assign, function To_Moz_AssignmentExpression(M) {
-        return {
-            type: "AssignmentExpression",
-            operator: M.operator,
-            left: to_moz(M.left),
-            right: to_moz(M.right)
-        };
-    });
-    def_to_moz(AST_Conditional, function To_Moz_ConditionalExpression(M) {
-        return {
-            type: "ConditionalExpression",
-            test: to_moz(M.condition),
-            consequent: to_moz(M.consequent),
-            alternate: to_moz(M.alternative)
-        };
-    });
-    def_to_moz(AST_New, function To_Moz_NewExpression(M) {
-        return {
-            type: "NewExpression",
-            callee: to_moz(M.expression),
-            arguments: M.args.map(to_moz)
-        };
-    });
-    def_to_moz(AST_Call, function To_Moz_CallExpression(M) {
-        return {
-            type: "CallExpression",
-            callee: to_moz(M.expression),
-            optional: M.optional,
-            arguments: M.args.map(to_moz)
-        };
-    });
-
-    def_to_moz(AST_Toplevel, function To_Moz_Program(M) {
-        return to_moz_scope("Program", M);
-    });
-
-    def_to_moz(AST_Expansion, function To_Moz_Spread(M) {
-        return {
-            type: to_moz_in_destructuring() ? "RestElement" : "SpreadElement",
-            argument: to_moz(M.expression)
-        };
-    });
-
-    def_to_moz(AST_PrefixedTemplateString, function To_Moz_TaggedTemplateExpression(M) {
-        return {
-            type: "TaggedTemplateExpression",
-            tag: to_moz(M.prefix),
-            quasi: to_moz(M.template_string)
-        };
-    });
-
-    def_to_moz(AST_TemplateString, function To_Moz_TemplateLiteral(M) {
-        var quasis = [];
-        var expressions = [];
-        for (var i = 0; i < M.segments.length; i++) {
-            if (i % 2 !== 0) {
-                expressions.push(to_moz(M.segments[i]));
-            } else {
-                quasis.push({
-                    type: "TemplateElement",
-                    value: {
-                        raw: M.segments[i].raw,
-                        cooked: M.segments[i].value
-                    },
-                    tail: i === M.segments.length - 1
-                });
-            }
-        }
-        return {
-            type: "TemplateLiteral",
-            quasis: quasis,
-            expressions: expressions
-        };
-    });
-
-    def_to_moz(AST_Defun, function To_Moz_FunctionDeclaration(M) {
-        return {
-            type: "FunctionDeclaration",
-            id: to_moz(M.name),
-            params: M.argnames.map(to_moz),
-            generator: M.is_generator,
-            async: M.async,
-            body: to_moz_scope("BlockStatement", M)
-        };
-    });
-
-    def_to_moz(AST_Function, function To_Moz_FunctionExpression(M, parent) {
-        var is_generator = parent.is_generator !== undefined ?
-            parent.is_generator : M.is_generator;
-        return {
-            type: "FunctionExpression",
-            id: to_moz(M.name),
-            params: M.argnames.map(to_moz),
-            generator: is_generator,
-            async: M.async,
-            body: to_moz_scope("BlockStatement", M)
-        };
-    });
-
-    def_to_moz(AST_Arrow, function To_Moz_ArrowFunctionExpression(M) {
-        var body = {
-            type: "BlockStatement",
-            body: M.body.map(to_moz)
-        };
-        return {
-            type: "ArrowFunctionExpression",
-            params: M.argnames.map(to_moz),
-            async: M.async,
-            body: body
-        };
-    });
-
-    def_to_moz(AST_Destructuring, function To_Moz_ObjectPattern(M) {
-        if (M.is_array) {
-            return {
-                type: "ArrayPattern",
-                elements: M.names.map(to_moz)
-            };
-        }
-        return {
-            type: "ObjectPattern",
-            properties: M.names.map(to_moz)
-        };
-    });
-
-    def_to_moz(AST_Directive, function To_Moz_Directive(M) {
-        return {
-            type: "ExpressionStatement",
-            expression: {
-                type: "Literal",
-                value: M.value,
-                raw: M.print_to_string()
-            },
-            directive: M.value
-        };
-    });
-
-    def_to_moz(AST_SimpleStatement, function To_Moz_ExpressionStatement(M) {
-        return {
-            type: "ExpressionStatement",
-            expression: to_moz(M.body)
-        };
-    });
-
-    def_to_moz(AST_SwitchBranch, function To_Moz_SwitchCase(M) {
-        return {
-            type: "SwitchCase",
-            test: to_moz(M.expression),
-            consequent: M.body.map(to_moz)
-        };
-    });
-
-    def_to_moz(AST_Try, function To_Moz_TryStatement(M) {
-        return {
-            type: "TryStatement",
-            block: to_moz_block(M),
-            handler: to_moz(M.bcatch),
-            guardedHandlers: [],
-            finalizer: to_moz(M.bfinally)
-        };
-    });
-
-    def_to_moz(AST_Catch, function To_Moz_CatchClause(M) {
-        return {
-            type: "CatchClause",
-            param: to_moz(M.argname),
-            guard: null,
-            body: to_moz_block(M)
-        };
-    });
-
-    def_to_moz(AST_Definitions, function To_Moz_VariableDeclaration(M) {
-        return {
-            type: "VariableDeclaration",
-            kind:
-                M instanceof AST_Const ? "const" :
-                M instanceof AST_Let ? "let" : "var",
-            declarations: M.definitions.map(to_moz)
-        };
-    });
-
-    const assert_clause_to_moz = assert_clause => {
-        const assertions = [];
-        if (assert_clause) {
-            for (const { key, value } of assert_clause.properties) {
-                const key_moz = is_basic_identifier_string(key)
-                    ? { type: "Identifier", name: key }
-                    : { type: "Literal", value: key, raw: JSON.stringify(key) };
-                assertions.push({
-                    type: "ImportAttribute",
-                    key: key_moz,
-                    value: to_moz(value)
-                });
-            }
-        }
-        return assertions;
-    };
-
-    def_to_moz(AST_Export, function To_Moz_ExportDeclaration(M) {
-        if (M.exported_names) {
-            if (M.exported_names[0].name.name === "*") {
-                return {
-                    type: "ExportAllDeclaration",
-                    source: to_moz(M.module_name),
-                    assertions: assert_clause_to_moz(M.assert_clause)
-                };
-            }
-            return {
-                type: "ExportNamedDeclaration",
-                specifiers: M.exported_names.map(function (name_mapping) {
-                    return {
-                        type: "ExportSpecifier",
-                        exported: to_moz(name_mapping.foreign_name),
-                        local: to_moz(name_mapping.name)
-                    };
-                }),
-                declaration: to_moz(M.exported_definition),
-                source: to_moz(M.module_name),
-                assertions: assert_clause_to_moz(M.assert_clause)
-            };
-        }
-        return {
-            type: M.is_default ? "ExportDefaultDeclaration" : "ExportNamedDeclaration",
-            declaration: to_moz(M.exported_value || M.exported_definition)
-        };
-    });
-
-    def_to_moz(AST_Import, function To_Moz_ImportDeclaration(M) {
-        var specifiers = [];
-        if (M.imported_name) {
-            specifiers.push({
-                type: "ImportDefaultSpecifier",
-                local: to_moz(M.imported_name)
-            });
-        }
-        if (M.imported_names && M.imported_names[0].foreign_name.name === "*") {
-            specifiers.push({
-                type: "ImportNamespaceSpecifier",
-                local: to_moz(M.imported_names[0].name)
-            });
-        } else if (M.imported_names) {
-            M.imported_names.forEach(function(name_mapping) {
-                specifiers.push({
-                    type: "ImportSpecifier",
-                    local: to_moz(name_mapping.name),
-                    imported: to_moz(name_mapping.foreign_name)
-                });
-            });
-        }
-        return {
-            type: "ImportDeclaration",
-            specifiers: specifiers,
-            source: to_moz(M.module_name),
-            assertions: assert_clause_to_moz(M.assert_clause)
-        };
-    });
-
-    def_to_moz(AST_ImportMeta, function To_Moz_MetaProperty() {
-        return {
-            type: "MetaProperty",
-            meta: {
-                type: "Identifier",
-                name: "import"
-            },
-            property: {
-                type: "Identifier",
-                name: "meta"
-            }
-        };
-    });
-
-    def_to_moz(AST_Sequence, function To_Moz_SequenceExpression(M) {
-        return {
-            type: "SequenceExpression",
-            expressions: M.expressions.map(to_moz)
-        };
-    });
-
-    def_to_moz(AST_DotHash, function To_Moz_PrivateMemberExpression(M) {
-        return {
-            type: "MemberExpression",
-            object: to_moz(M.expression),
-            computed: false,
-            property: {
-                type: "PrivateIdentifier",
-                name: M.property
-            },
-            optional: M.optional
-        };
-    });
-
-    def_to_moz(AST_PropAccess, function To_Moz_MemberExpression(M) {
-        var isComputed = M instanceof AST_Sub;
-        return {
-            type: "MemberExpression",
-            object: to_moz(M.expression),
-            computed: isComputed,
-            property: isComputed ? to_moz(M.property) : {type: "Identifier", name: M.property},
-            optional: M.optional
-        };
-    });
-
-    def_to_moz(AST_Chain, function To_Moz_ChainExpression(M) {
-        return {
-            type: "ChainExpression",
-            expression: to_moz(M.expression)
-        };
-    });
-
-    def_to_moz(AST_Unary, function To_Moz_Unary(M) {
-        return {
-            type: M.operator == "++" || M.operator == "--" ? "UpdateExpression" : "UnaryExpression",
-            operator: M.operator,
-            prefix: M instanceof AST_UnaryPrefix,
-            argument: to_moz(M.expression)
-        };
-    });
-
-    def_to_moz(AST_Binary, function To_Moz_BinaryExpression(M) {
-        if (M.operator == "=" && to_moz_in_destructuring()) {
-            return {
-                type: "AssignmentPattern",
-                left: to_moz(M.left),
-                right: to_moz(M.right)
-            };
-        }
-
-        const type = M.operator == "&&" || M.operator == "||" || M.operator === "??"
-            ? "LogicalExpression"
-            : "BinaryExpression";
-
-        return {
-            type,
-            left: to_moz(M.left),
-            operator: M.operator,
-            right: to_moz(M.right)
-        };
-    });
-
-    def_to_moz(AST_Array, function To_Moz_ArrayExpression(M) {
-        return {
-            type: "ArrayExpression",
-            elements: M.elements.map(to_moz)
-        };
-    });
-
-    def_to_moz(AST_Object, function To_Moz_ObjectExpression(M) {
-        return {
-            type: "ObjectExpression",
-            properties: M.properties.map(to_moz)
-        };
-    });
-
-    def_to_moz(AST_ObjectProperty, function To_Moz_Property(M, parent) {
-        var key = M.key instanceof AST_Node ? to_moz(M.key) : {
-            type: "Identifier",
-            value: M.key
-        };
-        if (typeof M.key === "number") {
-            key = {
-                type: "Literal",
-                value: Number(M.key)
-            };
-        }
-        if (typeof M.key === "string") {
-            key = {
-                type: "Identifier",
-                name: M.key
-            };
-        }
-        var kind;
-        var string_or_num = typeof M.key === "string" || typeof M.key === "number";
-        var computed = string_or_num ? false : !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef;
-        if (M instanceof AST_ObjectKeyVal) {
-            kind = "init";
-            computed = !string_or_num;
-        } else
-        if (M instanceof AST_ObjectGetter) {
-            kind = "get";
-        } else
-        if (M instanceof AST_ObjectSetter) {
-            kind = "set";
-        }
-        if (M instanceof AST_PrivateGetter || M instanceof AST_PrivateSetter) {
-            const kind = M instanceof AST_PrivateGetter ? "get" : "set";
-            return {
-                type: "MethodDefinition",
-                computed: false,
-                kind: kind,
-                static: M.static,
-                key: {
-                    type: "PrivateIdentifier",
-                    name: M.key.name
-                },
-                value: to_moz(M.value)
-            };
-        }
-        if (M instanceof AST_ClassPrivateProperty) {
-            return {
-                type: "PropertyDefinition",
-                key: {
-                    type: "PrivateIdentifier",
-                    name: M.key.name
-                },
-                value: to_moz(M.value),
-                computed: false,
-                static: M.static
-            };
-        }
-        if (M instanceof AST_ClassProperty) {
-            return {
-                type: "PropertyDefinition",
-                key,
-                value: to_moz(M.value),
-                computed,
-                static: M.static
-            };
-        }
-        if (parent instanceof AST_Class) {
-            return {
-                type: "MethodDefinition",
-                computed: computed,
-                kind: kind,
-                static: M.static,
-                key: to_moz(M.key),
-                value: to_moz(M.value)
-            };
-        }
-        return {
-            type: "Property",
-            computed: computed,
-            kind: kind,
-            key: key,
-            value: to_moz(M.value)
-        };
-    });
-
-    def_to_moz(AST_ConciseMethod, function To_Moz_MethodDefinition(M, parent) {
-        if (parent instanceof AST_Object) {
-            return {
-                type: "Property",
-                computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef,
-                kind: "init",
-                method: true,
-                shorthand: false,
-                key: to_moz(M.key),
-                value: to_moz(M.value)
-            };
-        }
-
-        const key = M instanceof AST_PrivateMethod
-            ? {
-                type: "PrivateIdentifier",
-                name: M.key.name
-            }
-            : to_moz(M.key);
-
-        return {
-            type: "MethodDefinition",
-            kind: M.key === "constructor" ? "constructor" : "method",
-            key,
-            value: to_moz(M.value),
-            computed: !(M.key instanceof AST_Symbol) || M.key instanceof AST_SymbolRef,
-            static: M.static,
-        };
-    });
-
-    def_to_moz(AST_Class, function To_Moz_Class(M) {
-        var type = M instanceof AST_ClassExpression ? "ClassExpression" : "ClassDeclaration";
-        return {
-            type: type,
-            superClass: to_moz(M.extends),
-            id: M.name ? to_moz(M.name) : null,
-            body: {
-                type: "ClassBody",
-                body: M.properties.map(to_moz)
-            }
-        };
-    });
-
-    def_to_moz(AST_ClassStaticBlock, function To_Moz_StaticBlock(M) {
-        return {
-            type: "StaticBlock",
-            body: M.body.map(to_moz),
-        };
-    });
-
-    def_to_moz(AST_NewTarget, function To_Moz_MetaProperty() {
-        return {
-            type: "MetaProperty",
-            meta: {
-                type: "Identifier",
-                name: "new"
-            },
-            property: {
-                type: "Identifier",
-                name: "target"
-            }
-        };
-    });
-
-    def_to_moz(AST_Symbol, function To_Moz_Identifier(M, parent) {
-        if (M instanceof AST_SymbolMethod && parent.quote) {
-            return {
-                type: "Literal",
-                value: M.name
-            };
-        }
-        var def = M.definition();
-        return {
-            type: "Identifier",
-            name: def ? def.mangled_name || def.name : M.name
-        };
-    });
-
-    def_to_moz(AST_RegExp, function To_Moz_RegExpLiteral(M) {
-        const pattern = M.value.source;
-        const flags = M.value.flags;
-        return {
-            type: "Literal",
-            value: null,
-            raw: M.print_to_string(),
-            regex: { pattern, flags }
-        };
-    });
-
-    def_to_moz(AST_Constant, function To_Moz_Literal(M) {
-        var value = M.value;
-        return {
-            type: "Literal",
-            value: value,
-            raw: M.raw || M.print_to_string()
-        };
-    });
-
-    def_to_moz(AST_Atom, function To_Moz_Atom(M) {
-        return {
-            type: "Identifier",
-            name: String(M.value)
-        };
-    });
-
-    def_to_moz(AST_BigInt, M => ({
-        type: "BigIntLiteral",
-        value: M.value
-    }));
-
-    AST_Boolean.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast);
-    AST_Null.DEFMETHOD("to_mozilla_ast", AST_Constant.prototype.to_mozilla_ast);
-    AST_Hole.DEFMETHOD("to_mozilla_ast", function To_Moz_ArrayHole() { return null; });
-
-    AST_Block.DEFMETHOD("to_mozilla_ast", AST_BlockStatement.prototype.to_mozilla_ast);
-    AST_Lambda.DEFMETHOD("to_mozilla_ast", AST_Function.prototype.to_mozilla_ast);
-
-    /* -----[ tools ]----- */
-
-    function my_start_token(moznode) {
-        var loc = moznode.loc, start = loc && loc.start;
-        var range = moznode.range;
-        return new AST_Token(
-            "",
-            "",
-            start && start.line || 0,
-            start && start.column || 0,
-            range ? range [0] : moznode.start,
-            false,
-            [],
-            [],
-            loc && loc.source,
-        );
-    }
-
-    function my_end_token(moznode) {
-        var loc = moznode.loc, end = loc && loc.end;
-        var range = moznode.range;
-        return new AST_Token(
-            "",
-            "",
-            end && end.line || 0,
-            end && end.column || 0,
-            range ? range [0] : moznode.end,
-            false,
-            [],
-            [],
-            loc && loc.source,
-        );
-    }
-
-    var FROM_MOZ_STACK = null;
-
-    function from_moz(node) {
-        FROM_MOZ_STACK.push(node);
-        var ret = node != null ? MOZ_TO_ME[node.type](node) : null;
-        FROM_MOZ_STACK.pop();
-        return ret;
-    }
-
-    AST_Node.from_mozilla_ast = function(node) {
-        var save_stack = FROM_MOZ_STACK;
-        FROM_MOZ_STACK = [];
-        var ast = from_moz(node);
-        FROM_MOZ_STACK = save_stack;
-        return ast;
-    };
-
-    function set_moz_loc(mynode, moznode) {
-        var start = mynode.start;
-        var end = mynode.end;
-        if (!(start && end)) {
-            return moznode;
-        }
-        if (start.pos != null && end.endpos != null) {
-            moznode.range = [start.pos, end.endpos];
-        }
-        if (start.line) {
-            moznode.loc = {
-                start: {line: start.line, column: start.col},
-                end: end.endline ? {line: end.endline, column: end.endcol} : null
-            };
-            if (start.file) {
-                moznode.loc.source = start.file;
-            }
-        }
-        return moznode;
-    }
-
-    function def_to_moz(mytype, handler) {
-        mytype.DEFMETHOD("to_mozilla_ast", function(parent) {
-            return set_moz_loc(this, handler(this, parent));
-        });
-    }
-
-    var TO_MOZ_STACK = null;
-
-    function to_moz(node) {
-        if (TO_MOZ_STACK === null) { TO_MOZ_STACK = []; }
-        TO_MOZ_STACK.push(node);
-        var ast = node != null ? node.to_mozilla_ast(TO_MOZ_STACK[TO_MOZ_STACK.length - 2]) : null;
-        TO_MOZ_STACK.pop();
-        if (TO_MOZ_STACK.length === 0) { TO_MOZ_STACK = null; }
-        return ast;
-    }
-
-    function to_moz_in_destructuring() {
-        var i = TO_MOZ_STACK.length;
-        while (i--) {
-            if (TO_MOZ_STACK[i] instanceof AST_Destructuring) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    function to_moz_block(node) {
-        return {
-            type: "BlockStatement",
-            body: node.body.map(to_moz)
-        };
-    }
-
-    function to_moz_scope(type, node) {
-        var body = node.body.map(to_moz);
-        if (node.body[0] instanceof AST_SimpleStatement && node.body[0].body instanceof AST_String) {
-            body.unshift(to_moz(new AST_EmptyStatement(node.body[0])));
-        }
-        return {
-            type: type,
-            body: body
-        };
-    }
-})();
-
-// return true if the node at the top of the stack (that means the
-// innermost node in the current output) is lexically the first in
-// a statement.
-function first_in_statement(stack) {
-    let node = stack.parent(-1);
-    for (let i = 0, p; p = stack.parent(i); i++) {
-        if (p instanceof AST_Statement && p.body === node)
-            return true;
-        if ((p instanceof AST_Sequence && p.expressions[0] === node) ||
-            (p.TYPE === "Call" && p.expression === node) ||
-            (p instanceof AST_PrefixedTemplateString && p.prefix === node) ||
-            (p instanceof AST_Dot && p.expression === node) ||
-            (p instanceof AST_Sub && p.expression === node) ||
-            (p instanceof AST_Chain && p.expression === node) ||
-            (p instanceof AST_Conditional && p.condition === node) ||
-            (p instanceof AST_Binary && p.left === node) ||
-            (p instanceof AST_UnaryPostfix && p.expression === node)
-        ) {
-            node = p;
-        } else {
-            return false;
-        }
-    }
-}
-
-// Returns whether the leftmost item in the expression is an object
-function left_is_object(node) {
-    if (node instanceof AST_Object) return true;
-    if (node instanceof AST_Sequence) return left_is_object(node.expressions[0]);
-    if (node.TYPE === "Call") return left_is_object(node.expression);
-    if (node instanceof AST_PrefixedTemplateString) return left_is_object(node.prefix);
-    if (node instanceof AST_Dot || node instanceof AST_Sub) return left_is_object(node.expression);
-    if (node instanceof AST_Chain) return left_is_object(node.expression);
-    if (node instanceof AST_Conditional) return left_is_object(node.condition);
-    if (node instanceof AST_Binary) return left_is_object(node.left);
-    if (node instanceof AST_UnaryPostfix) return left_is_object(node.expression);
-    return false;
-}
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-const EXPECT_DIRECTIVE = /^$|[;{][\s\n]*$/;
-const CODE_LINE_BREAK = 10;
-const CODE_SPACE = 32;
-
-const r_annotation = /[@#]__(PURE|INLINE|NOINLINE)__/g;
-
-function is_some_comments(comment) {
-    // multiline comment
-    return (
-        (comment.type === "comment2" || comment.type === "comment1")
-        && /@preserve|@copyright|@lic|@cc_on|^\**!/i.test(comment.value)
-    );
-}
-
-class Rope {
-    constructor() {
-        this.committed = "";
-        this.current = "";
-    }
-
-    append(str) {
-        this.current += str;
-    }
-
-    insertAt(char, index) {
-        const { committed, current } = this;
-        if (index < committed.length) {
-            this.committed = committed.slice(0, index) + char + committed.slice(index);
-        } else if (index === committed.length) {
-            this.committed += char;
-        } else {
-            index -= committed.length;
-            this.committed += current.slice(0, index) + char;
-            this.current = current.slice(index);
-        }
-    }
-
-    charAt(index) {
-        const { committed } = this;
-        if (index < committed.length) return committed[index];
-        return this.current[index - committed.length];
-    }
-
-    curLength() {
-        return this.current.length;
-    }
-
-    length() {
-        return this.committed.length + this.current.length;
-    }
-
-    toString() {
-        return this.committed + this.current;
-    }
-}
-
-function OutputStream(options) {
-
-    var readonly = !options;
-    options = defaults(options, {
-        ascii_only           : false,
-        beautify             : false,
-        braces               : false,
-        comments             : "some",
-        ecma                 : 5,
-        ie8                  : false,
-        indent_level         : 4,
-        indent_start         : 0,
-        inline_script        : true,
-        keep_numbers         : false,
-        keep_quoted_props    : false,
-        max_line_len         : false,
-        preamble             : null,
-        preserve_annotations : false,
-        quote_keys           : false,
-        quote_style          : 0,
-        safari10             : false,
-        semicolons           : true,
-        shebang              : true,
-        shorthand            : undefined,
-        source_map           : null,
-        webkit               : false,
-        width                : 80,
-        wrap_iife            : false,
-        wrap_func_args       : true,
-
-        _destroy_ast         : false
-    }, true);
-
-    if (options.shorthand === undefined)
-        options.shorthand = options.ecma > 5;
-
-    // Convert comment option to RegExp if necessary and set up comments filter
-    var comment_filter = return_false; // Default case, throw all comments away
-    if (options.comments) {
-        let comments = options.comments;
-        if (typeof options.comments === "string" && /^\/.*\/[a-zA-Z]*$/.test(options.comments)) {
-            var regex_pos = options.comments.lastIndexOf("/");
-            comments = new RegExp(
-                options.comments.substr(1, regex_pos - 1),
-                options.comments.substr(regex_pos + 1)
-            );
-        }
-        if (comments instanceof RegExp) {
-            comment_filter = function(comment) {
-                return comment.type != "comment5" && comments.test(comment.value);
-            };
-        } else if (typeof comments === "function") {
-            comment_filter = function(comment) {
-                return comment.type != "comment5" && comments(this, comment);
-            };
-        } else if (comments === "some") {
-            comment_filter = is_some_comments;
-        } else { // NOTE includes "all" option
-            comment_filter = return_true;
-        }
-    }
-
-    var indentation = 0;
-    var current_col = 0;
-    var current_line = 1;
-    var current_pos = 0;
-    var OUTPUT = new Rope();
-    let printed_comments = new Set();
-
-    var to_utf8 = options.ascii_only ? function(str, identifier = false, regexp = false) {
-        if (options.ecma >= 2015 && !options.safari10 && !regexp) {
-            str = str.replace(/[\ud800-\udbff][\udc00-\udfff]/g, function(ch) {
-                var code = get_full_char_code(ch, 0).toString(16);
-                return "\\u{" + code + "}";
-            });
-        }
-        return str.replace(/[\u0000-\u001f\u007f-\uffff]/g, function(ch) {
-            var code = ch.charCodeAt(0).toString(16);
-            if (code.length <= 2 && !identifier) {
-                while (code.length < 2) code = "0" + code;
-                return "\\x" + code;
-            } else {
-                while (code.length < 4) code = "0" + code;
-                return "\\u" + code;
-            }
-        });
-    } : function(str) {
-        return str.replace(/[\ud800-\udbff][\udc00-\udfff]|([\ud800-\udbff]|[\udc00-\udfff])/g, function(match, lone) {
-            if (lone) {
-                return "\\u" + lone.charCodeAt(0).toString(16);
-            }
-            return match;
-        });
-    };
-
-    function make_string(str, quote) {
-        var dq = 0, sq = 0;
-        str = str.replace(/[\\\b\f\n\r\v\t\x22\x27\u2028\u2029\0\ufeff]/g,
-          function(s, i) {
-            switch (s) {
-              case '"': ++dq; return '"';
-              case "'": ++sq; return "'";
-              case "\\": return "\\\\";
-              case "\n": return "\\n";
-              case "\r": return "\\r";
-              case "\t": return "\\t";
-              case "\b": return "\\b";
-              case "\f": return "\\f";
-              case "\x0B": return options.ie8 ? "\\x0B" : "\\v";
-              case "\u2028": return "\\u2028";
-              case "\u2029": return "\\u2029";
-              case "\ufeff": return "\\ufeff";
-              case "\0":
-                  return /[0-9]/.test(get_full_char(str, i+1)) ? "\\x00" : "\\0";
-            }
-            return s;
-        });
-        function quote_single() {
-            return "'" + str.replace(/\x27/g, "\\'") + "'";
-        }
-        function quote_double() {
-            return '"' + str.replace(/\x22/g, '\\"') + '"';
-        }
-        function quote_template() {
-            return "`" + str.replace(/`/g, "\\`") + "`";
-        }
-        str = to_utf8(str);
-        if (quote === "`") return quote_template();
-        switch (options.quote_style) {
-          case 1:
-            return quote_single();
-          case 2:
-            return quote_double();
-          case 3:
-            return quote == "'" ? quote_single() : quote_double();
-          default:
-            return dq > sq ? quote_single() : quote_double();
-        }
-    }
-
-    function encode_string(str, quote) {
-        var ret = make_string(str, quote);
-        if (options.inline_script) {
-            ret = ret.replace(/<\x2f(script)([>\/\t\n\f\r ])/gi, "<\\/$1$2");
-            ret = ret.replace(/\x3c!--/g, "\\x3c!--");
-            ret = ret.replace(/--\x3e/g, "--\\x3e");
-        }
-        return ret;
-    }
-
-    function make_name(name) {
-        name = name.toString();
-        name = to_utf8(name, true);
-        return name;
-    }
-
-    function make_indent(back) {
-        return " ".repeat(options.indent_start + indentation - back * options.indent_level);
-    }
-
-    /* -----[ beautification/minification ]----- */
-
-    var has_parens = false;
-    var might_need_space = false;
-    var might_need_semicolon = false;
-    var might_add_newline = 0;
-    var need_newline_indented = false;
-    var need_space = false;
-    var newline_insert = -1;
-    var last = "";
-    var mapping_token, mapping_name, mappings = options.source_map && [];
-
-    var do_add_mapping = mappings ? function() {
-        mappings.forEach(function(mapping) {
-            try {
-                let { name, token } = mapping;
-                if (token.type == "name" || token.type === "privatename") {
-                    name = token.value;
-                } else if (name instanceof AST_Symbol) {
-                    name = token.type === "string" ? token.value : name.name;
-                }
-                options.source_map.add(
-                    mapping.token.file,
-                    mapping.line, mapping.col,
-                    mapping.token.line, mapping.token.col,
-                    is_basic_identifier_string(name) ? name : undefined
-                );
-            } catch(ex) {
-                // Ignore bad mapping
-            }
-        });
-        mappings = [];
-    } : noop;
-
-    var ensure_line_len = options.max_line_len ? function() {
-        if (current_col > options.max_line_len) {
-            if (might_add_newline) {
-                OUTPUT.insertAt("\n", might_add_newline);
-                const curLength = OUTPUT.curLength();
-                if (mappings) {
-                    var delta = curLength - current_col;
-                    mappings.forEach(function(mapping) {
-                        mapping.line++;
-                        mapping.col += delta;
-                    });
-                }
-                current_line++;
-                current_pos++;
-                current_col = curLength;
-            }
-        }
-        if (might_add_newline) {
-            might_add_newline = 0;
-            do_add_mapping();
-        }
-    } : noop;
-
-    var requireSemicolonChars = makePredicate("( [ + * / - , . `");
-
-    function print(str) {
-        str = String(str);
-        var ch = get_full_char(str, 0);
-        if (need_newline_indented && ch) {
-            need_newline_indented = false;
-            if (ch !== "\n") {
-                print("\n");
-                indent();
-            }
-        }
-        if (need_space && ch) {
-            need_space = false;
-            if (!/[\s;})]/.test(ch)) {
-                space();
-            }
-        }
-        newline_insert = -1;
-        var prev = last.charAt(last.length - 1);
-        if (might_need_semicolon) {
-            might_need_semicolon = false;
-
-            if (prev === ":" && ch === "}" || (!ch || !";}".includes(ch)) && prev !== ";") {
-                if (options.semicolons || requireSemicolonChars.has(ch)) {
-                    OUTPUT.append(";");
-                    current_col++;
-                    current_pos++;
-                } else {
-                    ensure_line_len();
-                    if (current_col > 0) {
-                        OUTPUT.append("\n");
-                        current_pos++;
-                        current_line++;
-                        current_col = 0;
-                    }
-
-                    if (/^\s+$/.test(str)) {
-                        // reset the semicolon flag, since we didn't print one
-                        // now and might still have to later
-                        might_need_semicolon = true;
-                    }
-                }
-
-                if (!options.beautify)
-                    might_need_space = false;
-            }
-        }
-
-        if (might_need_space) {
-            if ((is_identifier_char(prev)
-                    && (is_identifier_char(ch) || ch == "\\"))
-                || (ch == "/" && ch == prev)
-                || ((ch == "+" || ch == "-") && ch == last)
-            ) {
-                OUTPUT.append(" ");
-                current_col++;
-                current_pos++;
-            }
-            might_need_space = false;
-        }
-
-        if (mapping_token) {
-            mappings.push({
-                token: mapping_token,
-                name: mapping_name,
-                line: current_line,
-                col: current_col
-            });
-            mapping_token = false;
-            if (!might_add_newline) do_add_mapping();
-        }
-
-        OUTPUT.append(str);
-        has_parens = str[str.length - 1] == "(";
-        current_pos += str.length;
-        var a = str.split(/\r?\n/), n = a.length - 1;
-        current_line += n;
-        current_col += a[0].length;
-        if (n > 0) {
-            ensure_line_len();
-            current_col = a[n].length;
-        }
-        last = str;
-    }
-
-    var star = function() {
-        print("*");
-    };
-
-    var space = options.beautify ? function() {
-        print(" ");
-    } : function() {
-        might_need_space = true;
-    };
-
-    var indent = options.beautify ? function(half) {
-        if (options.beautify) {
-            print(make_indent(half ? 0.5 : 0));
-        }
-    } : noop;
-
-    var with_indent = options.beautify ? function(col, cont) {
-        if (col === true) col = next_indent();
-        var save_indentation = indentation;
-        indentation = col;
-        var ret = cont();
-        indentation = save_indentation;
-        return ret;
-    } : function(col, cont) { return cont(); };
-
-    var newline = options.beautify ? function() {
-        if (newline_insert < 0) return print("\n");
-        if (OUTPUT.charAt(newline_insert) != "\n") {
-            OUTPUT.insertAt("\n", newline_insert);
-            current_pos++;
-            current_line++;
-        }
-        newline_insert++;
-    } : options.max_line_len ? function() {
-        ensure_line_len();
-        might_add_newline = OUTPUT.length();
-    } : noop;
-
-    var semicolon = options.beautify ? function() {
-        print(";");
-    } : function() {
-        might_need_semicolon = true;
-    };
-
-    function force_semicolon() {
-        might_need_semicolon = false;
-        print(";");
-    }
-
-    function next_indent() {
-        return indentation + options.indent_level;
-    }
-
-    function with_block(cont) {
-        var ret;
-        print("{");
-        newline();
-        with_indent(next_indent(), function() {
-            ret = cont();
-        });
-        indent();
-        print("}");
-        return ret;
-    }
-
-    function with_parens(cont) {
-        print("(");
-        //XXX: still nice to have that for argument lists
-        //var ret = with_indent(current_col, cont);
-        var ret = cont();
-        print(")");
-        return ret;
-    }
-
-    function with_square(cont) {
-        print("[");
-        //var ret = with_indent(current_col, cont);
-        var ret = cont();
-        print("]");
-        return ret;
-    }
-
-    function comma() {
-        print(",");
-        space();
-    }
-
-    function colon() {
-        print(":");
-        space();
-    }
-
-    var add_mapping = mappings ? function(token, name) {
-        mapping_token = token;
-        mapping_name = name;
-    } : noop;
-
-    function get() {
-        if (might_add_newline) {
-            ensure_line_len();
-        }
-        return OUTPUT.toString();
-    }
-
-    function has_nlb() {
-        const output = OUTPUT.toString();
-        let n = output.length - 1;
-        while (n >= 0) {
-            const code = output.charCodeAt(n);
-            if (code === CODE_LINE_BREAK) {
-                return true;
-            }
-
-            if (code !== CODE_SPACE) {
-                return false;
-            }
-            n--;
-        }
-        return true;
-    }
-
-    function filter_comment(comment) {
-        if (!options.preserve_annotations) {
-            comment = comment.replace(r_annotation, " ");
-        }
-        if (/^\s*$/.test(comment)) {
-            return "";
-        }
-        return comment.replace(/(<\s*\/\s*)(script)/i, "<\\/$2");
-    }
-
-    function prepend_comments(node) {
-        var self = this;
-        var start = node.start;
-        if (!start) return;
-        var printed_comments = self.printed_comments;
-
-        // There cannot be a newline between return and its value.
-        const return_with_value = node instanceof AST_Exit && node.value;
-
-        if (
-            start.comments_before
-            && printed_comments.has(start.comments_before)
-        ) {
-            if (return_with_value) {
-                start.comments_before = [];
-            } else {
-                return;
-            }
-        }
-
-        var comments = start.comments_before;
-        if (!comments) {
-            comments = start.comments_before = [];
-        }
-        printed_comments.add(comments);
-
-        if (return_with_value) {
-            var tw = new TreeWalker(function(node) {
-                var parent = tw.parent();
-                if (parent instanceof AST_Exit
-                    || parent instanceof AST_Binary && parent.left === node
-                    || parent.TYPE == "Call" && parent.expression === node
-                    || parent instanceof AST_Conditional && parent.condition === node
-                    || parent instanceof AST_Dot && parent.expression === node
-                    || parent instanceof AST_Sequence && parent.expressions[0] === node
-                    || parent instanceof AST_Sub && parent.expression === node
-                    || parent instanceof AST_UnaryPostfix) {
-                    if (!node.start) return;
-                    var text = node.start.comments_before;
-                    if (text && !printed_comments.has(text)) {
-                        printed_comments.add(text);
-                        comments = comments.concat(text);
-                    }
-                } else {
-                    return true;
-                }
-            });
-            tw.push(node);
-            node.value.walk(tw);
-        }
-
-        if (current_pos == 0) {
-            if (comments.length > 0 && options.shebang && comments[0].type === "comment5"
-                && !printed_comments.has(comments[0])) {
-                print("#!" + comments.shift().value + "\n");
-                indent();
-            }
-            var preamble = options.preamble;
-            if (preamble) {
-                print(preamble.replace(/\r\n?|[\n\u2028\u2029]|\s*$/g, "\n"));
-            }
-        }
-
-        comments = comments.filter(comment_filter, node).filter(c => !printed_comments.has(c));
-        if (comments.length == 0) return;
-        var last_nlb = has_nlb();
-        comments.forEach(function(c, i) {
-            printed_comments.add(c);
-            if (!last_nlb) {
-                if (c.nlb) {
-                    print("\n");
-                    indent();
-                    last_nlb = true;
-                } else if (i > 0) {
-                    space();
-                }
-            }
-
-            if (/comment[134]/.test(c.type)) {
-                var value = filter_comment(c.value);
-                if (value) {
-                    print("//" + value + "\n");
-                    indent();
-                }
-                last_nlb = true;
-            } else if (c.type == "comment2") {
-                var value = filter_comment(c.value);
-                if (value) {
-                    print("/*" + value + "*/");
-                }
-                last_nlb = false;
-            }
-        });
-        if (!last_nlb) {
-            if (start.nlb) {
-                print("\n");
-                indent();
-            } else {
-                space();
-            }
-        }
-    }
-
-    function append_comments(node, tail) {
-        var self = this;
-        var token = node.end;
-        if (!token) return;
-        var printed_comments = self.printed_comments;
-        var comments = token[tail ? "comments_before" : "comments_after"];
-        if (!comments || printed_comments.has(comments)) return;
-        if (!(node instanceof AST_Statement || comments.every((c) =>
-            !/comment[134]/.test(c.type)
-        ))) return;
-        printed_comments.add(comments);
-        var insert = OUTPUT.length();
-        comments.filter(comment_filter, node).forEach(function(c, i) {
-            if (printed_comments.has(c)) return;
-            printed_comments.add(c);
-            need_space = false;
-            if (need_newline_indented) {
-                print("\n");
-                indent();
-                need_newline_indented = false;
-            } else if (c.nlb && (i > 0 || !has_nlb())) {
-                print("\n");
-                indent();
-            } else if (i > 0 || !tail) {
-                space();
-            }
-            if (/comment[134]/.test(c.type)) {
-                const value = filter_comment(c.value);
-                if (value) {
-                    print("//" + value);
-                }
-                need_newline_indented = true;
-            } else if (c.type == "comment2") {
-                const value = filter_comment(c.value);
-                if (value) {
-                    print("/*" + value + "*/");
-                }
-                need_space = true;
-            }
-        });
-        if (OUTPUT.length() > insert) newline_insert = insert;
-    }
-
-    /**
-     * When output.option("_destroy_ast") is enabled, destroy the function.
-     * Call this after printing it.
-     */
-    const gc_scope =
-      options["_destroy_ast"]
-        ? function gc_scope(scope) {
-            scope.body.length = 0;
-            scope.argnames.length = 0;
-        }
-        : noop;
-
-    var stack = [];
-    return {
-        get             : get,
-        toString        : get,
-        indent          : indent,
-        in_directive    : false,
-        use_asm         : null,
-        active_scope    : null,
-        indentation     : function() { return indentation; },
-        current_width   : function() { return current_col - indentation; },
-        should_break    : function() { return options.width && this.current_width() >= options.width; },
-        has_parens      : function() { return has_parens; },
-        newline         : newline,
-        print           : print,
-        star            : star,
-        space           : space,
-        comma           : comma,
-        colon           : colon,
-        last            : function() { return last; },
-        semicolon       : semicolon,
-        force_semicolon : force_semicolon,
-        to_utf8         : to_utf8,
-        print_name      : function(name) { print(make_name(name)); },
-        print_string    : function(str, quote, escape_directive) {
-            var encoded = encode_string(str, quote);
-            if (escape_directive === true && !encoded.includes("\\")) {
-                // Insert semicolons to break directive prologue
-                if (!EXPECT_DIRECTIVE.test(OUTPUT.toString())) {
-                    force_semicolon();
-                }
-                force_semicolon();
-            }
-            print(encoded);
-        },
-        print_template_string_chars: function(str) {
-            var encoded = encode_string(str, "`").replace(/\${/g, "\\${");
-            return print(encoded.substr(1, encoded.length - 2));
-        },
-        encode_string   : encode_string,
-        next_indent     : next_indent,
-        with_indent     : with_indent,
-        with_block      : with_block,
-        with_parens     : with_parens,
-        with_square     : with_square,
-        add_mapping     : add_mapping,
-        option          : function(opt) { return options[opt]; },
-        gc_scope,
-        printed_comments: printed_comments,
-        prepend_comments: readonly ? noop : prepend_comments,
-        append_comments : readonly || comment_filter === return_false ? noop : append_comments,
-        line            : function() { return current_line; },
-        col             : function() { return current_col; },
-        pos             : function() { return current_pos; },
-        push_node       : function(node) { stack.push(node); },
-        pop_node        : function() { return stack.pop(); },
-        parent          : function(n) {
-            return stack[stack.length - 2 - (n || 0)];
-        }
-    };
-
-}
-
-/* -----[ code generators ]----- */
-
-(function() {
-
-    /* -----[ utils ]----- */
-
-    function DEFPRINT(nodetype, generator) {
-        nodetype.DEFMETHOD("_codegen", generator);
-    }
-
-    AST_Node.DEFMETHOD("print", function(output, force_parens) {
-        var self = this, generator = self._codegen;
-        if (self instanceof AST_Scope) {
-            output.active_scope = self;
-        } else if (!output.use_asm && self instanceof AST_Directive && self.value == "use asm") {
-            output.use_asm = output.active_scope;
-        }
-        function doit() {
-            output.prepend_comments(self);
-            self.add_source_map(output);
-            generator(self, output);
-            output.append_comments(self);
-        }
-        output.push_node(self);
-        if (force_parens || self.needs_parens(output)) {
-            output.with_parens(doit);
-        } else {
-            doit();
-        }
-        output.pop_node();
-        if (self === output.use_asm) {
-            output.use_asm = null;
-        }
-    });
-    AST_Node.DEFMETHOD("_print", AST_Node.prototype.print);
-
-    AST_Node.DEFMETHOD("print_to_string", function(options) {
-        var output = OutputStream(options);
-        this.print(output);
-        return output.get();
-    });
-
-    /* -----[ PARENTHESES ]----- */
-
-    function PARENS(nodetype, func) {
-        if (Array.isArray(nodetype)) {
-            nodetype.forEach(function(nodetype) {
-                PARENS(nodetype, func);
-            });
-        } else {
-            nodetype.DEFMETHOD("needs_parens", func);
-        }
-    }
-
-    PARENS(AST_Node, return_false);
-
-    // a function expression needs parens around it when it's provably
-    // the first token to appear in a statement.
-    PARENS(AST_Function, function(output) {
-        if (!output.has_parens() && first_in_statement(output)) {
-            return true;
-        }
-
-        if (output.option("webkit")) {
-            var p = output.parent();
-            if (p instanceof AST_PropAccess && p.expression === this) {
-                return true;
-            }
-        }
-
-        if (output.option("wrap_iife")) {
-            var p = output.parent();
-            if (p instanceof AST_Call && p.expression === this) {
-                return true;
-            }
-        }
-
-        if (output.option("wrap_func_args")) {
-            var p = output.parent();
-            if (p instanceof AST_Call && p.args.includes(this)) {
-                return true;
-            }
-        }
-
-        return false;
-    });
-
-    PARENS(AST_Arrow, function(output) {
-        var p = output.parent();
-
-        if (
-            output.option("wrap_func_args")
-            && p instanceof AST_Call
-            && p.args.includes(this)
-        ) {
-            return true;
-        }
-        return p instanceof AST_PropAccess && p.expression === this;
-    });
-
-    // same goes for an object literal (as in AST_Function), because
-    // otherwise {...} would be interpreted as a block of code.
-    PARENS(AST_Object, function(output) {
-        return !output.has_parens() && first_in_statement(output);
-    });
-
-    PARENS(AST_ClassExpression, first_in_statement);
-
-    PARENS(AST_Unary, function(output) {
-        var p = output.parent();
-        return p instanceof AST_PropAccess && p.expression === this
-            || p instanceof AST_Call && p.expression === this
-            || p instanceof AST_Binary
-                && p.operator === "**"
-                && this instanceof AST_UnaryPrefix
-                && p.left === this
-                && this.operator !== "++"
-                && this.operator !== "--";
-    });
-
-    PARENS(AST_Await, function(output) {
-        var p = output.parent();
-        return p instanceof AST_PropAccess && p.expression === this
-            || p instanceof AST_Call && p.expression === this
-            || p instanceof AST_Binary && p.operator === "**" && p.left === this
-            || output.option("safari10") && p instanceof AST_UnaryPrefix;
-    });
-
-    PARENS(AST_Sequence, function(output) {
-        var p = output.parent();
-        return p instanceof AST_Call                          // (foo, bar)() or foo(1, (2, 3), 4)
-            || p instanceof AST_Unary                         // !(foo, bar, baz)
-            || p instanceof AST_Binary                        // 1 + (2, 3) + 4 ==> 8
-            || p instanceof AST_VarDef                        // var a = (1, 2), b = a + a; ==> b == 4
-            || p instanceof AST_PropAccess                    // (1, {foo:2}).foo or (1, {foo:2})["foo"] ==> 2
-            || p instanceof AST_Array                         // [ 1, (2, 3), 4 ] ==> [ 1, 3, 4 ]
-            || p instanceof AST_ObjectProperty                // { foo: (1, 2) }.foo ==> 2
-            || p instanceof AST_Conditional                   /* (false, true) ? (a = 10, b = 20) : (c = 30)
-                                                               * ==> 20 (side effect, set a := 10 and b := 20) */
-            || p instanceof AST_Arrow                         // x => (x, x)
-            || p instanceof AST_DefaultAssign                 // x => (x = (0, function(){}))
-            || p instanceof AST_Expansion                     // [...(a, b)]
-            || p instanceof AST_ForOf && this === p.object    // for (e of (foo, bar)) {}
-            || p instanceof AST_Yield                         // yield (foo, bar)
-            || p instanceof AST_Export                        // export default (foo, bar)
-        ;
-    });
-
-    PARENS(AST_Binary, function(output) {
-        var p = output.parent();
-        // (foo && bar)()
-        if (p instanceof AST_Call && p.expression === this)
-            return true;
-        // typeof (foo && bar)
-        if (p instanceof AST_Unary)
-            return true;
-        // (foo && bar)["prop"], (foo && bar).prop
-        if (p instanceof AST_PropAccess && p.expression === this)
-            return true;
-        // this deals with precedence: 3 * (2 + 1)
-        if (p instanceof AST_Binary) {
-            const po = p.operator;
-            const so = this.operator;
-
-            if (so === "??" && (po === "||" || po === "&&")) {
-                return true;
-            }
-
-            if (po === "??" && (so === "||" || so === "&&")) {
-                return true;
-            }
-
-            const pp = PRECEDENCE[po];
-            const sp = PRECEDENCE[so];
-            if (pp > sp
-                || (pp == sp
-                    && (this === p.right || po == "**"))) {
-                return true;
-            }
-        }
-    });
-
-    PARENS(AST_Yield, function(output) {
-        var p = output.parent();
-        // (yield 1) + (yield 2)
-        // a = yield 3
-        if (p instanceof AST_Binary && p.operator !== "=")
-            return true;
-        // (yield 1)()
-        // new (yield 1)()
-        if (p instanceof AST_Call && p.expression === this)
-            return true;
-        // (yield 1) ? yield 2 : yield 3
-        if (p instanceof AST_Conditional && p.condition === this)
-            return true;
-        // -(yield 4)
-        if (p instanceof AST_Unary)
-            return true;
-        // (yield x).foo
-        // (yield x)['foo']
-        if (p instanceof AST_PropAccess && p.expression === this)
-            return true;
-    });
-
-    PARENS(AST_PropAccess, function(output) {
-        var p = output.parent();
-        if (p instanceof AST_New && p.expression === this) {
-            // i.e. new (foo.bar().baz)
-            //
-            // if there's one call into this subtree, then we need
-            // parens around it too, otherwise the call will be
-            // interpreted as passing the arguments to the upper New
-            // expression.
-            return walk(this, node => {
-                if (node instanceof AST_Scope) return true;
-                if (node instanceof AST_Call) {
-                    return walk_abort;  // makes walk() return true.
-                }
-            });
-        }
-    });
-
-    PARENS(AST_Call, function(output) {
-        var p = output.parent(), p1;
-        if (p instanceof AST_New && p.expression === this
-            || p instanceof AST_Export && p.is_default && this.expression instanceof AST_Function)
-            return true;
-
-        // workaround for Safari bug.
-        // https://bugs.webkit.org/show_bug.cgi?id=123506
-        return this.expression instanceof AST_Function
-            && p instanceof AST_PropAccess
-            && p.expression === this
-            && (p1 = output.parent(1)) instanceof AST_Assign
-            && p1.left === p;
-    });
-
-    PARENS(AST_New, function(output) {
-        var p = output.parent();
-        if (this.args.length === 0
-            && (p instanceof AST_PropAccess // (new Date).getTime(), (new Date)["getTime"]()
-                || p instanceof AST_Call && p.expression === this
-                || p instanceof AST_PrefixedTemplateString && p.prefix === this)) // (new foo)(bar)
-            return true;
-    });
-
-    PARENS(AST_Number, function(output) {
-        var p = output.parent();
-        if (p instanceof AST_PropAccess && p.expression === this) {
-            var value = this.getValue();
-            if (value < 0 || /^0/.test(make_num(value))) {
-                return true;
-            }
-        }
-    });
-
-    PARENS(AST_BigInt, function(output) {
-        var p = output.parent();
-        if (p instanceof AST_PropAccess && p.expression === this) {
-            var value = this.getValue();
-            if (value.startsWith("-")) {
-                return true;
-            }
-        }
-    });
-
-    PARENS([ AST_Assign, AST_Conditional ], function(output) {
-        var p = output.parent();
-        // !(a = false) → true
-        if (p instanceof AST_Unary)
-            return true;
-        // 1 + (a = 2) + 3 → 6, side effect setting a = 2
-        if (p instanceof AST_Binary && !(p instanceof AST_Assign))
-            return true;
-        // (a = func)() —or— new (a = Object)()
-        if (p instanceof AST_Call && p.expression === this)
-            return true;
-        // (a = foo) ? bar : baz
-        if (p instanceof AST_Conditional && p.condition === this)
-            return true;
-        // (a = foo)["prop"] —or— (a = foo).prop
-        if (p instanceof AST_PropAccess && p.expression === this)
-            return true;
-        // ({a, b} = {a: 1, b: 2}), a destructuring assignment
-        if (this instanceof AST_Assign && this.left instanceof AST_Destructuring && this.left.is_array === false)
-            return true;
-    });
-
-    /* -----[ PRINTERS ]----- */
-
-    DEFPRINT(AST_Directive, function(self, output) {
-        output.print_string(self.value, self.quote);
-        output.semicolon();
-    });
-
-    DEFPRINT(AST_Expansion, function (self, output) {
-        output.print("...");
-        self.expression.print(output);
-    });
-
-    DEFPRINT(AST_Destructuring, function (self, output) {
-        output.print(self.is_array ? "[" : "{");
-        var len = self.names.length;
-        self.names.forEach(function (name, i) {
-            if (i > 0) output.comma();
-            name.print(output);
-            // If the final element is a hole, we need to make sure it
-            // doesn't look like a trailing comma, by inserting an actual
-            // trailing comma.
-            if (i == len - 1 && name instanceof AST_Hole) output.comma();
-        });
-        output.print(self.is_array ? "]" : "}");
-    });
-
-    DEFPRINT(AST_Debugger, function(self, output) {
-        output.print("debugger");
-        output.semicolon();
-    });
-
-    /* -----[ statements ]----- */
-
-    function display_body(body, is_toplevel, output, allow_directives) {
-        var last = body.length - 1;
-        output.in_directive = allow_directives;
-        body.forEach(function(stmt, i) {
-            if (output.in_directive === true && !(stmt instanceof AST_Directive ||
-                stmt instanceof AST_EmptyStatement ||
-                (stmt instanceof AST_SimpleStatement && stmt.body instanceof AST_String)
-            )) {
-                output.in_directive = false;
-            }
-            if (!(stmt instanceof AST_EmptyStatement)) {
-                output.indent();
-                stmt.print(output);
-                if (!(i == last && is_toplevel)) {
-                    output.newline();
-                    if (is_toplevel) output.newline();
-                }
-            }
-            if (output.in_directive === true &&
-                stmt instanceof AST_SimpleStatement &&
-                stmt.body instanceof AST_String
-            ) {
-                output.in_directive = false;
-            }
-        });
-        output.in_directive = false;
-    }
-
-    AST_StatementWithBody.DEFMETHOD("_do_print_body", function(output) {
-        force_statement(this.body, output);
-    });
-
-    DEFPRINT(AST_Statement, function(self, output) {
-        self.body.print(output);
-        output.semicolon();
-    });
-    DEFPRINT(AST_Toplevel, function(self, output) {
-        display_body(self.body, true, output, true);
-        output.print("");
-    });
-    DEFPRINT(AST_LabeledStatement, function(self, output) {
-        self.label.print(output);
-        output.colon();
-        self.body.print(output);
-    });
-    DEFPRINT(AST_SimpleStatement, function(self, output) {
-        self.body.print(output);
-        output.semicolon();
-    });
-    function print_braced_empty(self, output) {
-        output.print("{");
-        output.with_indent(output.next_indent(), function() {
-            output.append_comments(self, true);
-        });
-        output.add_mapping(self.end);
-        output.print("}");
-    }
-    function print_braced(self, output, allow_directives) {
-        if (self.body.length > 0) {
-            output.with_block(function() {
-                display_body(self.body, false, output, allow_directives);
-                output.add_mapping(self.end);
-            });
-        } else print_braced_empty(self, output);
-    }
-    DEFPRINT(AST_BlockStatement, function(self, output) {
-        print_braced(self, output);
-    });
-    DEFPRINT(AST_EmptyStatement, function(self, output) {
-        output.semicolon();
-    });
-    DEFPRINT(AST_Do, function(self, output) {
-        output.print("do");
-        output.space();
-        make_block(self.body, output);
-        output.space();
-        output.print("while");
-        output.space();
-        output.with_parens(function() {
-            self.condition.print(output);
-        });
-        output.semicolon();
-    });
-    DEFPRINT(AST_While, function(self, output) {
-        output.print("while");
-        output.space();
-        output.with_parens(function() {
-            self.condition.print(output);
-        });
-        output.space();
-        self._do_print_body(output);
-    });
-    DEFPRINT(AST_For, function(self, output) {
-        output.print("for");
-        output.space();
-        output.with_parens(function() {
-            if (self.init) {
-                if (self.init instanceof AST_Definitions) {
-                    self.init.print(output);
-                } else {
-                    parenthesize_for_noin(self.init, output, true);
-                }
-                output.print(";");
-                output.space();
-            } else {
-                output.print(";");
-            }
-            if (self.condition) {
-                self.condition.print(output);
-                output.print(";");
-                output.space();
-            } else {
-                output.print(";");
-            }
-            if (self.step) {
-                self.step.print(output);
-            }
-        });
-        output.space();
-        self._do_print_body(output);
-    });
-    DEFPRINT(AST_ForIn, function(self, output) {
-        output.print("for");
-        if (self.await) {
-            output.space();
-            output.print("await");
-        }
-        output.space();
-        output.with_parens(function() {
-            self.init.print(output);
-            output.space();
-            output.print(self instanceof AST_ForOf ? "of" : "in");
-            output.space();
-            self.object.print(output);
-        });
-        output.space();
-        self._do_print_body(output);
-    });
-    DEFPRINT(AST_With, function(self, output) {
-        output.print("with");
-        output.space();
-        output.with_parens(function() {
-            self.expression.print(output);
-        });
-        output.space();
-        self._do_print_body(output);
-    });
-
-    /* -----[ functions ]----- */
-    AST_Lambda.DEFMETHOD("_do_print", function(output, nokeyword) {
-        var self = this;
-        if (!nokeyword) {
-            if (self.async) {
-                output.print("async");
-                output.space();
-            }
-            output.print("function");
-            if (self.is_generator) {
-                output.star();
-            }
-            if (self.name) {
-                output.space();
-            }
-        }
-        if (self.name instanceof AST_Symbol) {
-            self.name.print(output);
-        } else if (nokeyword && self.name instanceof AST_Node) {
-            output.with_square(function() {
-                self.name.print(output); // Computed method name
-            });
-        }
-        output.with_parens(function() {
-            self.argnames.forEach(function(arg, i) {
-                if (i) output.comma();
-                arg.print(output);
-            });
-        });
-        output.space();
-        print_braced(self, output, true);
-    });
-    DEFPRINT(AST_Lambda, function(self, output) {
-        self._do_print(output);
-        output.gc_scope(self);
-    });
-
-    DEFPRINT(AST_PrefixedTemplateString, function(self, output) {
-        var tag = self.prefix;
-        var parenthesize_tag = tag instanceof AST_Lambda
-            || tag instanceof AST_Binary
-            || tag instanceof AST_Conditional
-            || tag instanceof AST_Sequence
-            || tag instanceof AST_Unary
-            || tag instanceof AST_Dot && tag.expression instanceof AST_Object;
-        if (parenthesize_tag) output.print("(");
-        self.prefix.print(output);
-        if (parenthesize_tag) output.print(")");
-        self.template_string.print(output);
-    });
-    DEFPRINT(AST_TemplateString, function(self, output) {
-        var is_tagged = output.parent() instanceof AST_PrefixedTemplateString;
-
-        output.print("`");
-        for (var i = 0; i < self.segments.length; i++) {
-            if (!(self.segments[i] instanceof AST_TemplateSegment)) {
-                output.print("${");
-                self.segments[i].print(output);
-                output.print("}");
-            } else if (is_tagged) {
-                output.print(self.segments[i].raw);
-            } else {
-                output.print_template_string_chars(self.segments[i].value);
-            }
-        }
-        output.print("`");
-    });
-    DEFPRINT(AST_TemplateSegment, function(self, output) {
-        output.print_template_string_chars(self.value);
-    });
-
-    AST_Arrow.DEFMETHOD("_do_print", function(output) {
-        var self = this;
-        var parent = output.parent();
-        var needs_parens = (parent instanceof AST_Binary && !(parent instanceof AST_Assign)) ||
-            parent instanceof AST_Unary ||
-            (parent instanceof AST_Call && self === parent.expression);
-        if (needs_parens) { output.print("("); }
-        if (self.async) {
-            output.print("async");
-            output.space();
-        }
-        if (self.argnames.length === 1 && self.argnames[0] instanceof AST_Symbol) {
-            self.argnames[0].print(output);
-        } else {
-            output.with_parens(function() {
-                self.argnames.forEach(function(arg, i) {
-                    if (i) output.comma();
-                    arg.print(output);
-                });
-            });
-        }
-        output.space();
-        output.print("=>");
-        output.space();
-        const first_statement = self.body[0];
-        if (
-            self.body.length === 1
-            && first_statement instanceof AST_Return
-        ) {
-            const returned = first_statement.value;
-            if (!returned) {
-                output.print("{}");
-            } else if (left_is_object(returned)) {
-                output.print("(");
-                returned.print(output);
-                output.print(")");
-            } else {
-                returned.print(output);
-            }
-        } else {
-            print_braced(self, output);
-        }
-        if (needs_parens) { output.print(")"); }
-        output.gc_scope(self);
-    });
-
-    /* -----[ exits ]----- */
-    AST_Exit.DEFMETHOD("_do_print", function(output, kind) {
-        output.print(kind);
-        if (this.value) {
-            output.space();
-            const comments = this.value.start.comments_before;
-            if (comments && comments.length && !output.printed_comments.has(comments)) {
-                output.print("(");
-                this.value.print(output);
-                output.print(")");
-            } else {
-                this.value.print(output);
-            }
-        }
-        output.semicolon();
-    });
-    DEFPRINT(AST_Return, function(self, output) {
-        self._do_print(output, "return");
-    });
-    DEFPRINT(AST_Throw, function(self, output) {
-        self._do_print(output, "throw");
-    });
-
-    /* -----[ yield ]----- */
-
-    DEFPRINT(AST_Yield, function(self, output) {
-        var star = self.is_star ? "*" : "";
-        output.print("yield" + star);
-        if (self.expression) {
-            output.space();
-            self.expression.print(output);
-        }
-    });
-
-    DEFPRINT(AST_Await, function(self, output) {
-        output.print("await");
-        output.space();
-        var e = self.expression;
-        var parens = !(
-               e instanceof AST_Call
-            || e instanceof AST_SymbolRef
-            || e instanceof AST_PropAccess
-            || e instanceof AST_Unary
-            || e instanceof AST_Constant
-            || e instanceof AST_Await
-            || e instanceof AST_Object
-        );
-        if (parens) output.print("(");
-        self.expression.print(output);
-        if (parens) output.print(")");
-    });
-
-    /* -----[ loop control ]----- */
-    AST_LoopControl.DEFMETHOD("_do_print", function(output, kind) {
-        output.print(kind);
-        if (this.label) {
-            output.space();
-            this.label.print(output);
-        }
-        output.semicolon();
-    });
-    DEFPRINT(AST_Break, function(self, output) {
-        self._do_print(output, "break");
-    });
-    DEFPRINT(AST_Continue, function(self, output) {
-        self._do_print(output, "continue");
-    });
-
-    /* -----[ if ]----- */
-    function make_then(self, output) {
-        var b = self.body;
-        if (output.option("braces")
-            || output.option("ie8") && b instanceof AST_Do)
-            return make_block(b, output);
-        // The squeezer replaces "block"-s that contain only a single
-        // statement with the statement itself; technically, the AST
-        // is correct, but this can create problems when we output an
-        // IF having an ELSE clause where the THEN clause ends in an
-        // IF *without* an ELSE block (then the outer ELSE would refer
-        // to the inner IF).  This function checks for this case and
-        // adds the block braces if needed.
-        if (!b) return output.force_semicolon();
-        while (true) {
-            if (b instanceof AST_If) {
-                if (!b.alternative) {
-                    make_block(self.body, output);
-                    return;
-                }
-                b = b.alternative;
-            } else if (b instanceof AST_StatementWithBody) {
-                b = b.body;
-            } else break;
-        }
-        force_statement(self.body, output);
-    }
-    DEFPRINT(AST_If, function(self, output) {
-        output.print("if");
-        output.space();
-        output.with_parens(function() {
-            self.condition.print(output);
-        });
-        output.space();
-        if (self.alternative) {
-            make_then(self, output);
-            output.space();
-            output.print("else");
-            output.space();
-            if (self.alternative instanceof AST_If)
-                self.alternative.print(output);
-            else
-                force_statement(self.alternative, output);
-        } else {
-            self._do_print_body(output);
-        }
-    });
-
-    /* -----[ switch ]----- */
-    DEFPRINT(AST_Switch, function(self, output) {
-        output.print("switch");
-        output.space();
-        output.with_parens(function() {
-            self.expression.print(output);
-        });
-        output.space();
-        var last = self.body.length - 1;
-        if (last < 0) print_braced_empty(self, output);
-        else output.with_block(function() {
-            self.body.forEach(function(branch, i) {
-                output.indent(true);
-                branch.print(output);
-                if (i < last && branch.body.length > 0)
-                    output.newline();
-            });
-        });
-    });
-    AST_SwitchBranch.DEFMETHOD("_do_print_body", function(output) {
-        output.newline();
-        this.body.forEach(function(stmt) {
-            output.indent();
-            stmt.print(output);
-            output.newline();
-        });
-    });
-    DEFPRINT(AST_Default, function(self, output) {
-        output.print("default:");
-        self._do_print_body(output);
-    });
-    DEFPRINT(AST_Case, function(self, output) {
-        output.print("case");
-        output.space();
-        self.expression.print(output);
-        output.print(":");
-        self._do_print_body(output);
-    });
-
-    /* -----[ exceptions ]----- */
-    DEFPRINT(AST_Try, function(self, output) {
-        output.print("try");
-        output.space();
-        print_braced(self, output);
-        if (self.bcatch) {
-            output.space();
-            self.bcatch.print(output);
-        }
-        if (self.bfinally) {
-            output.space();
-            self.bfinally.print(output);
-        }
-    });
-    DEFPRINT(AST_Catch, function(self, output) {
-        output.print("catch");
-        if (self.argname) {
-            output.space();
-            output.with_parens(function() {
-                self.argname.print(output);
-            });
-        }
-        output.space();
-        print_braced(self, output);
-    });
-    DEFPRINT(AST_Finally, function(self, output) {
-        output.print("finally");
-        output.space();
-        print_braced(self, output);
-    });
-
-    /* -----[ var/const ]----- */
-    AST_Definitions.DEFMETHOD("_do_print", function(output, kind) {
-        output.print(kind);
-        output.space();
-        this.definitions.forEach(function(def, i) {
-            if (i) output.comma();
-            def.print(output);
-        });
-        var p = output.parent();
-        var in_for = p instanceof AST_For || p instanceof AST_ForIn;
-        var output_semicolon = !in_for || p && p.init !== this;
-        if (output_semicolon)
-            output.semicolon();
-    });
-    DEFPRINT(AST_Let, function(self, output) {
-        self._do_print(output, "let");
-    });
-    DEFPRINT(AST_Var, function(self, output) {
-        self._do_print(output, "var");
-    });
-    DEFPRINT(AST_Const, function(self, output) {
-        self._do_print(output, "const");
-    });
-    DEFPRINT(AST_Import, function(self, output) {
-        output.print("import");
-        output.space();
-        if (self.imported_name) {
-            self.imported_name.print(output);
-        }
-        if (self.imported_name && self.imported_names) {
-            output.print(",");
-            output.space();
-        }
-        if (self.imported_names) {
-            if (self.imported_names.length === 1 && self.imported_names[0].foreign_name.name === "*") {
-                self.imported_names[0].print(output);
-            } else {
-                output.print("{");
-                self.imported_names.forEach(function (name_import, i) {
-                    output.space();
-                    name_import.print(output);
-                    if (i < self.imported_names.length - 1) {
-                        output.print(",");
-                    }
-                });
-                output.space();
-                output.print("}");
-            }
-        }
-        if (self.imported_name || self.imported_names) {
-            output.space();
-            output.print("from");
-            output.space();
-        }
-        self.module_name.print(output);
-        if (self.assert_clause) {
-            output.print("assert");
-            self.assert_clause.print(output);
-        }
-        output.semicolon();
-    });
-    DEFPRINT(AST_ImportMeta, function(self, output) {
-        output.print("import.meta");
-    });
-
-    DEFPRINT(AST_NameMapping, function(self, output) {
-        var is_import = output.parent() instanceof AST_Import;
-        var definition = self.name.definition();
-        var names_are_different =
-            (definition && definition.mangled_name || self.name.name) !==
-            self.foreign_name.name;
-        if (names_are_different) {
-            if (is_import) {
-                output.print(self.foreign_name.name);
-            } else {
-                self.name.print(output);
-            }
-            output.space();
-            output.print("as");
-            output.space();
-            if (is_import) {
-                self.name.print(output);
-            } else {
-                output.print(self.foreign_name.name);
-            }
-        } else {
-            self.name.print(output);
-        }
-    });
-
-    DEFPRINT(AST_Export, function(self, output) {
-        output.print("export");
-        output.space();
-        if (self.is_default) {
-            output.print("default");
-            output.space();
-        }
-        if (self.exported_names) {
-            if (self.exported_names.length === 1 && self.exported_names[0].name.name === "*") {
-                self.exported_names[0].print(output);
-            } else {
-                output.print("{");
-                self.exported_names.forEach(function(name_export, i) {
-                    output.space();
-                    name_export.print(output);
-                    if (i < self.exported_names.length - 1) {
-                        output.print(",");
-                    }
-                });
-                output.space();
-                output.print("}");
-            }
-        } else if (self.exported_value) {
-            self.exported_value.print(output);
-        } else if (self.exported_definition) {
-            self.exported_definition.print(output);
-            if (self.exported_definition instanceof AST_Definitions) return;
-        }
-        if (self.module_name) {
-            output.space();
-            output.print("from");
-            output.space();
-            self.module_name.print(output);
-        }
-        if (self.assert_clause) {
-            output.print("assert");
-            self.assert_clause.print(output);
-        }
-        if (self.exported_value
-                && !(self.exported_value instanceof AST_Defun ||
-                    self.exported_value instanceof AST_Function ||
-                    self.exported_value instanceof AST_Class)
-            || self.module_name
-            || self.exported_names
-        ) {
-            output.semicolon();
-        }
-    });
-
-    function parenthesize_for_noin(node, output, noin) {
-        var parens = false;
-        // need to take some precautions here:
-        //    https://github.com/mishoo/UglifyJS2/issues/60
-        if (noin) {
-            parens = walk(node, node => {
-                // Don't go into scopes -- except arrow functions:
-                // https://github.com/terser/terser/issues/1019#issuecomment-877642607
-                if (node instanceof AST_Scope && !(node instanceof AST_Arrow)) {
-                    return true;
-                }
-                if (node instanceof AST_Binary && node.operator == "in") {
-                    return walk_abort;  // makes walk() return true
-                }
-            });
-        }
-        node.print(output, parens);
-    }
-
-    DEFPRINT(AST_VarDef, function(self, output) {
-        self.name.print(output);
-        if (self.value) {
-            output.space();
-            output.print("=");
-            output.space();
-            var p = output.parent(1);
-            var noin = p instanceof AST_For || p instanceof AST_ForIn;
-            parenthesize_for_noin(self.value, output, noin);
-        }
-    });
-
-    /* -----[ other expressions ]----- */
-    DEFPRINT(AST_Call, function(self, output) {
-        self.expression.print(output);
-        if (self instanceof AST_New && self.args.length === 0)
-            return;
-        if (self.expression instanceof AST_Call || self.expression instanceof AST_Lambda) {
-            output.add_mapping(self.start);
-        }
-        if (self.optional) output.print("?.");
-        output.with_parens(function() {
-            self.args.forEach(function(expr, i) {
-                if (i) output.comma();
-                expr.print(output);
-            });
-        });
-    });
-    DEFPRINT(AST_New, function(self, output) {
-        output.print("new");
-        output.space();
-        AST_Call.prototype._codegen(self, output);
-    });
-
-    AST_Sequence.DEFMETHOD("_do_print", function(output) {
-        this.expressions.forEach(function(node, index) {
-            if (index > 0) {
-                output.comma();
-                if (output.should_break()) {
-                    output.newline();
-                    output.indent();
-                }
-            }
-            node.print(output);
-        });
-    });
-    DEFPRINT(AST_Sequence, function(self, output) {
-        self._do_print(output);
-        // var p = output.parent();
-        // if (p instanceof AST_Statement) {
-        //     output.with_indent(output.next_indent(), function(){
-        //         self._do_print(output);
-        //     });
-        // } else {
-        //     self._do_print(output);
-        // }
-    });
-    DEFPRINT(AST_Dot, function(self, output) {
-        var expr = self.expression;
-        expr.print(output);
-        var prop = self.property;
-        var print_computed = ALL_RESERVED_WORDS.has(prop)
-            ? output.option("ie8")
-            : !is_identifier_string(
-                prop,
-                output.option("ecma") >= 2015 || output.option("safari10")
-            );
-
-        if (self.optional) output.print("?.");
-
-        if (print_computed) {
-            output.print("[");
-            output.add_mapping(self.end);
-            output.print_string(prop);
-            output.print("]");
-        } else {
-            if (expr instanceof AST_Number && expr.getValue() >= 0) {
-                if (!/[xa-f.)]/i.test(output.last())) {
-                    output.print(".");
-                }
-            }
-            if (!self.optional) output.print(".");
-            // the name after dot would be mapped about here.
-            output.add_mapping(self.end);
-            output.print_name(prop);
-        }
-    });
-    DEFPRINT(AST_DotHash, function(self, output) {
-        var expr = self.expression;
-        expr.print(output);
-        var prop = self.property;
-
-        if (self.optional) output.print("?");
-        output.print(".#");
-        output.add_mapping(self.end);
-        output.print_name(prop);
-    });
-    DEFPRINT(AST_Sub, function(self, output) {
-        self.expression.print(output);
-        if (self.optional) output.print("?.");
-        output.print("[");
-        self.property.print(output);
-        output.print("]");
-    });
-    DEFPRINT(AST_Chain, function(self, output) {
-        self.expression.print(output);
-    });
-    DEFPRINT(AST_UnaryPrefix, function(self, output) {
-        var op = self.operator;
-        output.print(op);
-        if (/^[a-z]/i.test(op)
-            || (/[+-]$/.test(op)
-                && self.expression instanceof AST_UnaryPrefix
-                && /^[+-]/.test(self.expression.operator))) {
-            output.space();
-        }
-        self.expression.print(output);
-    });
-    DEFPRINT(AST_UnaryPostfix, function(self, output) {
-        self.expression.print(output);
-        output.print(self.operator);
-    });
-    DEFPRINT(AST_Binary, function(self, output) {
-        var op = self.operator;
-        self.left.print(output);
-        if (op[0] == ">" /* ">>" ">>>" ">" ">=" */
-            && self.left instanceof AST_UnaryPostfix
-            && self.left.operator == "--") {
-            // space is mandatory to avoid outputting -->
-            output.print(" ");
-        } else {
-            // the space is optional depending on "beautify"
-            output.space();
-        }
-        output.print(op);
-        if ((op == "<" || op == "<<")
-            && self.right instanceof AST_UnaryPrefix
-            && self.right.operator == "!"
-            && self.right.expression instanceof AST_UnaryPrefix
-            && self.right.expression.operator == "--") {
-            // space is mandatory to avoid outputting <!--
-            output.print(" ");
-        } else {
-            // the space is optional depending on "beautify"
-            output.space();
-        }
-        self.right.print(output);
-    });
-    DEFPRINT(AST_Conditional, function(self, output) {
-        self.condition.print(output);
-        output.space();
-        output.print("?");
-        output.space();
-        self.consequent.print(output);
-        output.space();
-        output.colon();
-        self.alternative.print(output);
-    });
-
-    /* -----[ literals ]----- */
-    DEFPRINT(AST_Array, function(self, output) {
-        output.with_square(function() {
-            var a = self.elements, len = a.length;
-            if (len > 0) output.space();
-            a.forEach(function(exp, i) {
-                if (i) output.comma();
-                exp.print(output);
-                // If the final element is a hole, we need to make sure it
-                // doesn't look like a trailing comma, by inserting an actual
-                // trailing comma.
-                if (i === len - 1 && exp instanceof AST_Hole)
-                  output.comma();
-            });
-            if (len > 0) output.space();
-        });
-    });
-    DEFPRINT(AST_Object, function(self, output) {
-        if (self.properties.length > 0) output.with_block(function() {
-            self.properties.forEach(function(prop, i) {
-                if (i) {
-                    output.print(",");
-                    output.newline();
-                }
-                output.indent();
-                prop.print(output);
-            });
-            output.newline();
-        });
-        else print_braced_empty(self, output);
-    });
-    DEFPRINT(AST_Class, function(self, output) {
-        output.print("class");
-        output.space();
-        if (self.name) {
-            self.name.print(output);
-            output.space();
-        }
-        if (self.extends) {
-            var parens = (
-                   !(self.extends instanceof AST_SymbolRef)
-                && !(self.extends instanceof AST_PropAccess)
-                && !(self.extends instanceof AST_ClassExpression)
-                && !(self.extends instanceof AST_Function)
-            );
-            output.print("extends");
-            if (parens) {
-                output.print("(");
-            } else {
-                output.space();
-            }
-            self.extends.print(output);
-            if (parens) {
-                output.print(")");
-            } else {
-                output.space();
-            }
-        }
-        if (self.properties.length > 0) output.with_block(function() {
-            self.properties.forEach(function(prop, i) {
-                if (i) {
-                    output.newline();
-                }
-                output.indent();
-                prop.print(output);
-            });
-            output.newline();
-        });
-        else output.print("{}");
-    });
-    DEFPRINT(AST_NewTarget, function(self, output) {
-        output.print("new.target");
-    });
-
-    function print_property_name(key, quote, output) {
-        if (output.option("quote_keys")) {
-            return output.print_string(key);
-        }
-        if ("" + +key == key && key >= 0) {
-            if (output.option("keep_numbers")) {
-                return output.print(key);
-            }
-            return output.print(make_num(key));
-        }
-        var print_string = ALL_RESERVED_WORDS.has(key)
-            ? output.option("ie8")
-            : (
-                output.option("ecma") < 2015 || output.option("safari10")
-                    ? !is_basic_identifier_string(key)
-                    : !is_identifier_string(key, true)
-            );
-        if (print_string || (quote && output.option("keep_quoted_props"))) {
-            return output.print_string(key, quote);
-        }
-        return output.print_name(key);
-    }
-
-    DEFPRINT(AST_ObjectKeyVal, function(self, output) {
-        function get_name(self) {
-            var def = self.definition();
-            return def ? def.mangled_name || def.name : self.name;
-        }
-
-        var allowShortHand = output.option("shorthand");
-        if (allowShortHand &&
-            self.value instanceof AST_Symbol &&
-            is_identifier_string(
-                self.key,
-                output.option("ecma") >= 2015 || output.option("safari10")
-            ) &&
-            get_name(self.value) === self.key &&
-            !ALL_RESERVED_WORDS.has(self.key)
-        ) {
-            print_property_name(self.key, self.quote, output);
-
-        } else if (allowShortHand &&
-            self.value instanceof AST_DefaultAssign &&
-            self.value.left instanceof AST_Symbol &&
-            is_identifier_string(
-                self.key,
-                output.option("ecma") >= 2015 || output.option("safari10")
-            ) &&
-            get_name(self.value.left) === self.key
-        ) {
-            print_property_name(self.key, self.quote, output);
-            output.space();
-            output.print("=");
-            output.space();
-            self.value.right.print(output);
-        } else {
-            if (!(self.key instanceof AST_Node)) {
-                print_property_name(self.key, self.quote, output);
-            } else {
-                output.with_square(function() {
-                    self.key.print(output);
-                });
-            }
-            output.colon();
-            self.value.print(output);
-        }
-    });
-    DEFPRINT(AST_ClassPrivateProperty, (self, output) => {
-        if (self.static) {
-            output.print("static");
-            output.space();
-        }
-
-        output.print("#");
-        
-        print_property_name(self.key.name, self.quote, output);
-
-        if (self.value) {
-            output.print("=");
-            self.value.print(output);
-        }
-
-        output.semicolon();
-    });
-    DEFPRINT(AST_ClassProperty, (self, output) => {
-        if (self.static) {
-            output.print("static");
-            output.space();
-        }
-
-        if (self.key instanceof AST_SymbolClassProperty) {
-            print_property_name(self.key.name, self.quote, output);
-        } else {
-            output.print("[");
-            self.key.print(output);
-            output.print("]");
-        }
-
-        if (self.value) {
-            output.print("=");
-            self.value.print(output);
-        }
-
-        output.semicolon();
-    });
-    AST_ObjectProperty.DEFMETHOD("_print_getter_setter", function(type, is_private, output) {
-        var self = this;
-        if (self.static) {
-            output.print("static");
-            output.space();
-        }
-        if (type) {
-            output.print(type);
-            output.space();
-        }
-        if (self.key instanceof AST_SymbolMethod) {
-            if (is_private) output.print("#");
-            print_property_name(self.key.name, self.quote, output);
-        } else {
-            output.with_square(function() {
-                self.key.print(output);
-            });
-        }
-        self.value._do_print(output, true);
-    });
-    DEFPRINT(AST_ObjectSetter, function(self, output) {
-        self._print_getter_setter("set", false, output);
-    });
-    DEFPRINT(AST_ObjectGetter, function(self, output) {
-        self._print_getter_setter("get", false, output);
-    });
-    DEFPRINT(AST_PrivateSetter, function(self, output) {
-        self._print_getter_setter("set", true, output);
-    });
-    DEFPRINT(AST_PrivateGetter, function(self, output) {
-        self._print_getter_setter("get", true, output);
-    });
-    DEFPRINT(AST_PrivateMethod, function(self, output) {
-        var type;
-        if (self.is_generator && self.async) {
-            type = "async*";
-        } else if (self.is_generator) {
-            type = "*";
-        } else if (self.async) {
-            type = "async";
-        }
-        self._print_getter_setter(type, true, output);
-    });
-    DEFPRINT(AST_ConciseMethod, function(self, output) {
-        var type;
-        if (self.is_generator && self.async) {
-            type = "async*";
-        } else if (self.is_generator) {
-            type = "*";
-        } else if (self.async) {
-            type = "async";
-        }
-        self._print_getter_setter(type, false, output);
-    });
-    DEFPRINT(AST_ClassStaticBlock, function (self, output) {
-        output.print("static");
-        output.space();
-        print_braced(self, output);
-    });
-    AST_Symbol.DEFMETHOD("_do_print", function(output) {
-        var def = this.definition();
-        output.print_name(def ? def.mangled_name || def.name : this.name);
-    });
-    DEFPRINT(AST_Symbol, function (self, output) {
-        self._do_print(output);
-    });
-    DEFPRINT(AST_Hole, noop);
-    DEFPRINT(AST_This, function(self, output) {
-        output.print("this");
-    });
-    DEFPRINT(AST_Super, function(self, output) {
-        output.print("super");
-    });
-    DEFPRINT(AST_Constant, function(self, output) {
-        output.print(self.getValue());
-    });
-    DEFPRINT(AST_String, function(self, output) {
-        output.print_string(self.getValue(), self.quote, output.in_directive);
-    });
-    DEFPRINT(AST_Number, function(self, output) {
-        if ((output.option("keep_numbers") || output.use_asm) && self.raw) {
-            output.print(self.raw);
-        } else {
-            output.print(make_num(self.getValue()));
-        }
-    });
-    DEFPRINT(AST_BigInt, function(self, output) {
-        output.print(self.getValue() + "n");
-    });
-
-    const r_slash_script = /(<\s*\/\s*script)/i;
-    const slash_script_replace = (_, $1) => $1.replace("/", "\\/");
-    DEFPRINT(AST_RegExp, function(self, output) {
-        let { source, flags } = self.getValue();
-        source = regexp_source_fix(source);
-        flags = flags ? sort_regexp_flags(flags) : "";
-        source = source.replace(r_slash_script, slash_script_replace);
-
-        output.print(output.to_utf8(`/${source}/${flags}`, false, true));
-
-        const parent = output.parent();
-        if (
-            parent instanceof AST_Binary
-            && /^\w/.test(parent.operator)
-            && parent.left === self
-        ) {
-            output.print(" ");
-        }
-    });
-
-    function force_statement(stat, output) {
-        if (output.option("braces")) {
-            make_block(stat, output);
-        } else {
-            if (!stat || stat instanceof AST_EmptyStatement)
-                output.force_semicolon();
-            else
-                stat.print(output);
-        }
-    }
-
-    function best_of(a) {
-        var best = a[0], len = best.length;
-        for (var i = 1; i < a.length; ++i) {
-            if (a[i].length < len) {
-                best = a[i];
-                len = best.length;
-            }
-        }
-        return best;
-    }
-
-    function make_num(num) {
-        var str = num.toString(10).replace(/^0\./, ".").replace("e+", "e");
-        var candidates = [ str ];
-        if (Math.floor(num) === num) {
-            if (num < 0) {
-                candidates.push("-0x" + (-num).toString(16).toLowerCase());
-            } else {
-                candidates.push("0x" + num.toString(16).toLowerCase());
-            }
-        }
-        var match, len, digits;
-        if (match = /^\.0+/.exec(str)) {
-            len = match[0].length;
-            digits = str.slice(len);
-            candidates.push(digits + "e-" + (digits.length + len - 1));
-        } else if (match = /0+$/.exec(str)) {
-            len = match[0].length;
-            candidates.push(str.slice(0, -len) + "e" + len);
-        } else if (match = /^(\d)\.(\d+)e(-?\d+)$/.exec(str)) {
-            candidates.push(match[1] + match[2] + "e" + (match[3] - match[2].length));
-        }
-        return best_of(candidates);
-    }
-
-    function make_block(stmt, output) {
-        if (!stmt || stmt instanceof AST_EmptyStatement)
-            output.print("{}");
-        else if (stmt instanceof AST_BlockStatement)
-            stmt.print(output);
-        else output.with_block(function() {
-            output.indent();
-            stmt.print(output);
-            output.newline();
-        });
-    }
-
-    /* -----[ source map generators ]----- */
-
-    function DEFMAP(nodetype, generator) {
-        nodetype.forEach(function(nodetype) {
-            nodetype.DEFMETHOD("add_source_map", generator);
-        });
-    }
-
-    DEFMAP([
-        // We could easily add info for ALL nodes, but it seems to me that
-        // would be quite wasteful, hence this noop in the base class.
-        AST_Node,
-        // since the label symbol will mark it
-        AST_LabeledStatement,
-        AST_Toplevel,
-    ], noop);
-
-    // XXX: I'm not exactly sure if we need it for all of these nodes,
-    // or if we should add even more.
-    DEFMAP([
-        AST_Array,
-        AST_BlockStatement,
-        AST_Catch,
-        AST_Class,
-        AST_Constant,
-        AST_Debugger,
-        AST_Definitions,
-        AST_Directive,
-        AST_Finally,
-        AST_Jump,
-        AST_Lambda,
-        AST_New,
-        AST_Object,
-        AST_StatementWithBody,
-        AST_Symbol,
-        AST_Switch,
-        AST_SwitchBranch,
-        AST_TemplateString,
-        AST_TemplateSegment,
-        AST_Try,
-    ], function(output) {
-        output.add_mapping(this.start);
-    });
-
-    DEFMAP([
-        AST_ObjectGetter,
-        AST_ObjectSetter,
-        AST_PrivateGetter,
-        AST_PrivateSetter,
-    ], function(output) {
-        output.add_mapping(this.key.end, this.key.name);
-    });
-
-    DEFMAP([ AST_ObjectProperty ], function(output) {
-        output.add_mapping(this.start, this.key);
-    });
-})();
-
-const shallow_cmp = (node1, node2) => {
-    return (
-        node1 === null && node2 === null
-        || node1.TYPE === node2.TYPE && node1.shallow_cmp(node2)
-    );
-};
-
-const equivalent_to = (tree1, tree2) => {
-    if (!shallow_cmp(tree1, tree2)) return false;
-    const walk_1_state = [tree1];
-    const walk_2_state = [tree2];
-
-    const walk_1_push = walk_1_state.push.bind(walk_1_state);
-    const walk_2_push = walk_2_state.push.bind(walk_2_state);
-
-    while (walk_1_state.length && walk_2_state.length) {
-        const node_1 = walk_1_state.pop();
-        const node_2 = walk_2_state.pop();
-
-        if (!shallow_cmp(node_1, node_2)) return false;
-
-        node_1._children_backwards(walk_1_push);
-        node_2._children_backwards(walk_2_push);
-
-        if (walk_1_state.length !== walk_2_state.length) {
-            // Different number of children
-            return false;
-        }
-    }
-
-    return walk_1_state.length == 0 && walk_2_state.length == 0;
-};
-
-const pass_through = () => true;
-
-AST_Node.prototype.shallow_cmp = function () {
-    throw new Error("did not find a shallow_cmp function for " + this.constructor.name);
-};
-
-AST_Debugger.prototype.shallow_cmp = pass_through;
-
-AST_Directive.prototype.shallow_cmp = function(other) {
-    return this.value === other.value;
-};
-
-AST_SimpleStatement.prototype.shallow_cmp = pass_through;
-
-AST_Block.prototype.shallow_cmp = pass_through;
-
-AST_EmptyStatement.prototype.shallow_cmp = pass_through;
-
-AST_LabeledStatement.prototype.shallow_cmp = function(other) {
-    return this.label.name === other.label.name;
-};
-
-AST_Do.prototype.shallow_cmp = pass_through;
-
-AST_While.prototype.shallow_cmp = pass_through;
-
-AST_For.prototype.shallow_cmp = function(other) {
-    return (this.init == null ? other.init == null : this.init === other.init) && (this.condition == null ? other.condition == null : this.condition === other.condition) && (this.step == null ? other.step == null : this.step === other.step);
-};
-
-AST_ForIn.prototype.shallow_cmp = pass_through;
-
-AST_ForOf.prototype.shallow_cmp = pass_through;
-
-AST_With.prototype.shallow_cmp = pass_through;
-
-AST_Toplevel.prototype.shallow_cmp = pass_through;
-
-AST_Expansion.prototype.shallow_cmp = pass_through;
-
-AST_Lambda.prototype.shallow_cmp = function(other) {
-    return this.is_generator === other.is_generator && this.async === other.async;
-};
-
-AST_Destructuring.prototype.shallow_cmp = function(other) {
-    return this.is_array === other.is_array;
-};
-
-AST_PrefixedTemplateString.prototype.shallow_cmp = pass_through;
-
-AST_TemplateString.prototype.shallow_cmp = pass_through;
-
-AST_TemplateSegment.prototype.shallow_cmp = function(other) {
-    return this.value === other.value;
-};
-
-AST_Jump.prototype.shallow_cmp = pass_through;
-
-AST_LoopControl.prototype.shallow_cmp = pass_through;
-
-AST_Await.prototype.shallow_cmp = pass_through;
-
-AST_Yield.prototype.shallow_cmp = function(other) {
-    return this.is_star === other.is_star;
-};
-
-AST_If.prototype.shallow_cmp = function(other) {
-    return this.alternative == null ? other.alternative == null : this.alternative === other.alternative;
-};
-
-AST_Switch.prototype.shallow_cmp = pass_through;
-
-AST_SwitchBranch.prototype.shallow_cmp = pass_through;
-
-AST_Try.prototype.shallow_cmp = function(other) {
-    return (this.bcatch == null ? other.bcatch == null : this.bcatch === other.bcatch) && (this.bfinally == null ? other.bfinally == null : this.bfinally === other.bfinally);
-};
-
-AST_Catch.prototype.shallow_cmp = function(other) {
-    return this.argname == null ? other.argname == null : this.argname === other.argname;
-};
-
-AST_Finally.prototype.shallow_cmp = pass_through;
-
-AST_Definitions.prototype.shallow_cmp = pass_through;
-
-AST_VarDef.prototype.shallow_cmp = function(other) {
-    return this.value == null ? other.value == null : this.value === other.value;
-};
-
-AST_NameMapping.prototype.shallow_cmp = pass_through;
-
-AST_Import.prototype.shallow_cmp = function(other) {
-    return (this.imported_name == null ? other.imported_name == null : this.imported_name === other.imported_name) && (this.imported_names == null ? other.imported_names == null : this.imported_names === other.imported_names);
-};
-
-AST_ImportMeta.prototype.shallow_cmp = pass_through;
-
-AST_Export.prototype.shallow_cmp = function(other) {
-    return (this.exported_definition == null ? other.exported_definition == null : this.exported_definition === other.exported_definition) && (this.exported_value == null ? other.exported_value == null : this.exported_value === other.exported_value) && (this.exported_names == null ? other.exported_names == null : this.exported_names === other.exported_names) && this.module_name === other.module_name && this.is_default === other.is_default;
-};
-
-AST_Call.prototype.shallow_cmp = pass_through;
-
-AST_Sequence.prototype.shallow_cmp = pass_through;
-
-AST_PropAccess.prototype.shallow_cmp = pass_through;
-
-AST_Chain.prototype.shallow_cmp = pass_through;
-
-AST_Dot.prototype.shallow_cmp = function(other) {
-    return this.property === other.property;
-};
-
-AST_DotHash.prototype.shallow_cmp = function(other) {
-    return this.property === other.property;
-};
-
-AST_Unary.prototype.shallow_cmp = function(other) {
-    return this.operator === other.operator;
-};
-
-AST_Binary.prototype.shallow_cmp = function(other) {
-    return this.operator === other.operator;
-};
-
-AST_Conditional.prototype.shallow_cmp = pass_through;
-
-AST_Array.prototype.shallow_cmp = pass_through;
-
-AST_Object.prototype.shallow_cmp = pass_through;
-
-AST_ObjectProperty.prototype.shallow_cmp = pass_through;
-
-AST_ObjectKeyVal.prototype.shallow_cmp = function(other) {
-    return this.key === other.key;
-};
-
-AST_ObjectSetter.prototype.shallow_cmp = function(other) {
-    return this.static === other.static;
-};
-
-AST_ObjectGetter.prototype.shallow_cmp = function(other) {
-    return this.static === other.static;
-};
-
-AST_ConciseMethod.prototype.shallow_cmp = function(other) {
-    return this.static === other.static && this.is_generator === other.is_generator && this.async === other.async;
-};
-
-AST_Class.prototype.shallow_cmp = function(other) {
-    return (this.name == null ? other.name == null : this.name === other.name) && (this.extends == null ? other.extends == null : this.extends === other.extends);
-};
-
-AST_ClassProperty.prototype.shallow_cmp = function(other) {
-    return this.static === other.static;
-};
-
-AST_Symbol.prototype.shallow_cmp = function(other) {
-    return this.name === other.name;
-};
-
-AST_NewTarget.prototype.shallow_cmp = pass_through;
-
-AST_This.prototype.shallow_cmp = pass_through;
-
-AST_Super.prototype.shallow_cmp = pass_through;
-
-AST_String.prototype.shallow_cmp = function(other) {
-    return this.value === other.value;
-};
-
-AST_Number.prototype.shallow_cmp = function(other) {
-    return this.value === other.value;
-};
-
-AST_BigInt.prototype.shallow_cmp = function(other) {
-    return this.value === other.value;
-};
-
-AST_RegExp.prototype.shallow_cmp = function (other) {
-    return (
-        this.value.flags === other.value.flags
-        && this.value.source === other.value.source
-    );
-};
-
-AST_Atom.prototype.shallow_cmp = pass_through;
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-const MASK_EXPORT_DONT_MANGLE = 1 << 0;
-const MASK_EXPORT_WANT_MANGLE = 1 << 1;
-
-let function_defs = null;
-let unmangleable_names = null;
-/**
- * When defined, there is a function declaration somewhere that's inside of a block.
- * See https://tc39.es/ecma262/multipage/additional-ecmascript-features-for-web-browsers.html#sec-block-level-function-declarations-web-legacy-compatibility-semantics
-*/
-let scopes_with_block_defuns = null;
-
-class SymbolDef {
-    constructor(scope, orig, init) {
-        this.name = orig.name;
-        this.orig = [ orig ];
-        this.init = init;
-        this.eliminated = 0;
-        this.assignments = 0;
-        this.scope = scope;
-        this.replaced = 0;
-        this.global = false;
-        this.export = 0;
-        this.mangled_name = null;
-        this.undeclared = false;
-        this.id = SymbolDef.next_id++;
-        this.chained = false;
-        this.direct_access = false;
-        this.escaped = 0;
-        this.recursive_refs = 0;
-        this.references = [];
-        this.should_replace = undefined;
-        this.single_use = false;
-        this.fixed = false;
-        Object.seal(this);
-    }
-    fixed_value() {
-        if (!this.fixed || this.fixed instanceof AST_Node) return this.fixed;
-        return this.fixed();
-    }
-    unmangleable(options) {
-        if (!options) options = {};
-
-        if (
-            function_defs &&
-            function_defs.has(this.id) &&
-            keep_name(options.keep_fnames, this.orig[0].name)
-        ) return true;
-
-        return this.global && !options.toplevel
-            || (this.export & MASK_EXPORT_DONT_MANGLE)
-            || this.undeclared
-            || !options.eval && this.scope.pinned()
-            || (this.orig[0] instanceof AST_SymbolLambda
-                  || this.orig[0] instanceof AST_SymbolDefun) && keep_name(options.keep_fnames, this.orig[0].name)
-            || this.orig[0] instanceof AST_SymbolMethod
-            || (this.orig[0] instanceof AST_SymbolClass
-                  || this.orig[0] instanceof AST_SymbolDefClass) && keep_name(options.keep_classnames, this.orig[0].name);
-    }
-    mangle(options) {
-        const cache = options.cache && options.cache.props;
-        if (this.global && cache && cache.has(this.name)) {
-            this.mangled_name = cache.get(this.name);
-        } else if (!this.mangled_name && !this.unmangleable(options)) {
-            var s = this.scope;
-            var sym = this.orig[0];
-            if (options.ie8 && sym instanceof AST_SymbolLambda)
-                s = s.parent_scope;
-            const redefinition = redefined_catch_def(this);
-            this.mangled_name = redefinition
-                ? redefinition.mangled_name || redefinition.name
-                : s.next_mangled(options, this);
-            if (this.global && cache) {
-                cache.set(this.name, this.mangled_name);
-            }
-        }
-    }
-}
-
-SymbolDef.next_id = 1;
-
-function redefined_catch_def(def) {
-    if (def.orig[0] instanceof AST_SymbolCatch
-        && def.scope.is_block_scope()
-    ) {
-        return def.scope.get_defun_scope().variables.get(def.name);
-    }
-}
-
-AST_Scope.DEFMETHOD("figure_out_scope", function(options, { parent_scope = null, toplevel = this } = {}) {
-    options = defaults(options, {
-        cache: null,
-        ie8: false,
-        safari10: false,
-    });
-
-    if (!(toplevel instanceof AST_Toplevel)) {
-        throw new Error("Invalid toplevel scope");
-    }
-
-    // pass 1: setup scope chaining and handle definitions
-    var scope = this.parent_scope = parent_scope;
-    var labels = new Map();
-    var defun = null;
-    var in_destructuring = null;
-    var for_scopes = [];
-    var tw = new TreeWalker((node, descend) => {
-        if (node.is_block_scope()) {
-            const save_scope = scope;
-            node.block_scope = scope = new AST_Scope(node);
-            scope._block_scope = true;
-            // AST_Try in the AST sadly *is* (not has) a body itself,
-            // and its catch and finally branches are children of the AST_Try itself
-            const parent_scope = node instanceof AST_Catch
-                ? save_scope.parent_scope
-                : save_scope;
-            scope.init_scope_vars(parent_scope);
-            scope.uses_with = save_scope.uses_with;
-            scope.uses_eval = save_scope.uses_eval;
-            if (options.safari10) {
-                if (node instanceof AST_For || node instanceof AST_ForIn) {
-                    for_scopes.push(scope);
-                }
-            }
-
-            if (node instanceof AST_Switch) {
-                // XXX: HACK! Ensure the switch expression gets the correct scope (the parent scope) and the body gets the contained scope
-                // AST_Switch has a scope within the body, but it itself "is a block scope"
-                // This means the switched expression has to belong to the outer scope
-                // while the body inside belongs to the switch itself.
-                // This is pretty nasty and warrants an AST change similar to AST_Try (read above)
-                const the_block_scope = scope;
-                scope = save_scope;
-                node.expression.walk(tw);
-                scope = the_block_scope;
-                for (let i = 0; i < node.body.length; i++) {
-                    node.body[i].walk(tw);
-                }
-            } else {
-                descend();
-            }
-            scope = save_scope;
-            return true;
-        }
-        if (node instanceof AST_Destructuring) {
-            const save_destructuring = in_destructuring;
-            in_destructuring = node;
-            descend();
-            in_destructuring = save_destructuring;
-            return true;
-        }
-        if (node instanceof AST_Scope) {
-            node.init_scope_vars(scope);
-            var save_scope = scope;
-            var save_defun = defun;
-            var save_labels = labels;
-            defun = scope = node;
-            labels = new Map();
-            descend();
-            scope = save_scope;
-            defun = save_defun;
-            labels = save_labels;
-            return true;        // don't descend again in TreeWalker
-        }
-        if (node instanceof AST_LabeledStatement) {
-            var l = node.label;
-            if (labels.has(l.name)) {
-                throw new Error(string_template("Label {name} defined twice", l));
-            }
-            labels.set(l.name, l);
-            descend();
-            labels.delete(l.name);
-            return true;        // no descend again
-        }
-        if (node instanceof AST_With) {
-            for (var s = scope; s; s = s.parent_scope)
-                s.uses_with = true;
-            return;
-        }
-        if (node instanceof AST_Symbol) {
-            node.scope = scope;
-        }
-        if (node instanceof AST_Label) {
-            node.thedef = node;
-            node.references = [];
-        }
-        if (node instanceof AST_SymbolLambda) {
-            defun.def_function(node, node.name == "arguments" ? undefined : defun);
-        } else if (node instanceof AST_SymbolDefun) {
-            // Careful here, the scope where this should be defined is
-            // the parent scope.  The reason is that we enter a new
-            // scope when we encounter the AST_Defun node (which is
-            // instanceof AST_Scope) but we get to the symbol a bit
-            // later.
-            const closest_scope = defun.parent_scope;
-
-            // In strict mode, function definitions are block-scoped
-            node.scope = tw.directives["use strict"]
-                ? closest_scope
-                : closest_scope.get_defun_scope();
-
-            mark_export(node.scope.def_function(node, defun), 1);
-        } else if (node instanceof AST_SymbolClass) {
-            mark_export(defun.def_variable(node, defun), 1);
-        } else if (node instanceof AST_SymbolImport) {
-            scope.def_variable(node);
-        } else if (node instanceof AST_SymbolDefClass) {
-            // This deals with the name of the class being available
-            // inside the class.
-            mark_export((node.scope = defun.parent_scope).def_function(node, defun), 1);
-        } else if (
-            node instanceof AST_SymbolVar
-            || node instanceof AST_SymbolLet
-            || node instanceof AST_SymbolConst
-            || node instanceof AST_SymbolCatch
-        ) {
-            var def;
-            if (node instanceof AST_SymbolBlockDeclaration) {
-                def = scope.def_variable(node, null);
-            } else {
-                def = defun.def_variable(node, node.TYPE == "SymbolVar" ? null : undefined);
-            }
-            if (!def.orig.every((sym) => {
-                if (sym === node) return true;
-                if (node instanceof AST_SymbolBlockDeclaration) {
-                    return sym instanceof AST_SymbolLambda;
-                }
-                return !(sym instanceof AST_SymbolLet || sym instanceof AST_SymbolConst);
-            })) {
-                js_error(
-                    `"${node.name}" is redeclared`,
-                    node.start.file,
-                    node.start.line,
-                    node.start.col,
-                    node.start.pos
-                );
-            }
-            if (!(node instanceof AST_SymbolFunarg)) mark_export(def, 2);
-            if (defun !== scope) {
-                node.mark_enclosed();
-                var def = scope.find_variable(node);
-                if (node.thedef !== def) {
-                    node.thedef = def;
-                    node.reference();
-                }
-            }
-        } else if (node instanceof AST_LabelRef) {
-            var sym = labels.get(node.name);
-            if (!sym) throw new Error(string_template("Undefined label {name} [{line},{col}]", {
-                name: node.name,
-                line: node.start.line,
-                col: node.start.col
-            }));
-            node.thedef = sym;
-        }
-        if (!(scope instanceof AST_Toplevel) && (node instanceof AST_Export || node instanceof AST_Import)) {
-            js_error(
-                `"${node.TYPE}" statement may only appear at the top level`,
-                node.start.file,
-                node.start.line,
-                node.start.col,
-                node.start.pos
-            );
-        }
-    });
-    this.walk(tw);
-
-    function mark_export(def, level) {
-        if (in_destructuring) {
-            var i = 0;
-            do {
-                level++;
-            } while (tw.parent(i++) !== in_destructuring);
-        }
-        var node = tw.parent(level);
-        if (def.export = node instanceof AST_Export ? MASK_EXPORT_DONT_MANGLE : 0) {
-            var exported = node.exported_definition;
-            if ((exported instanceof AST_Defun || exported instanceof AST_DefClass) && node.is_default) {
-                def.export = MASK_EXPORT_WANT_MANGLE;
-            }
-        }
-    }
-
-    // pass 2: find back references and eval
-    const is_toplevel = this instanceof AST_Toplevel;
-    if (is_toplevel) {
-        this.globals = new Map();
-    }
-
-    var tw = new TreeWalker(node => {
-        if (node instanceof AST_LoopControl && node.label) {
-            node.label.thedef.references.push(node);
-            return true;
-        }
-        if (node instanceof AST_SymbolRef) {
-            var name = node.name;
-            if (name == "eval" && tw.parent() instanceof AST_Call) {
-                for (var s = node.scope; s && !s.uses_eval; s = s.parent_scope) {
-                    s.uses_eval = true;
-                }
-            }
-            var sym;
-            if (tw.parent() instanceof AST_NameMapping && tw.parent(1).module_name
-                || !(sym = node.scope.find_variable(name))) {
-
-                sym = toplevel.def_global(node);
-                if (node instanceof AST_SymbolExport) sym.export = MASK_EXPORT_DONT_MANGLE;
-            } else if (sym.scope instanceof AST_Lambda && name == "arguments") {
-                sym.scope.uses_arguments = true;
-            }
-            node.thedef = sym;
-            node.reference();
-            if (node.scope.is_block_scope()
-                && !(sym.orig[0] instanceof AST_SymbolBlockDeclaration)) {
-                node.scope = node.scope.get_defun_scope();
-            }
-            return true;
-        }
-        // ensure mangling works if catch reuses a scope variable
-        var def;
-        if (node instanceof AST_SymbolCatch && (def = redefined_catch_def(node.definition()))) {
-            var s = node.scope;
-            while (s) {
-                push_uniq(s.enclosed, def);
-                if (s === def.scope) break;
-                s = s.parent_scope;
-            }
-        }
-    });
-    this.walk(tw);
-
-    // pass 3: work around IE8 and Safari catch scope bugs
-    if (options.ie8 || options.safari10) {
-        walk(this, node => {
-            if (node instanceof AST_SymbolCatch) {
-                var name = node.name;
-                var refs = node.thedef.references;
-                var scope = node.scope.get_defun_scope();
-                var def = scope.find_variable(name)
-                    || toplevel.globals.get(name)
-                    || scope.def_variable(node);
-                refs.forEach(function(ref) {
-                    ref.thedef = def;
-                    ref.reference();
-                });
-                node.thedef = def;
-                node.reference();
-                return true;
-            }
-        });
-    }
-
-    // pass 4: add symbol definitions to loop scopes
-    // Safari/Webkit bug workaround - loop init let variable shadowing argument.
-    // https://github.com/mishoo/UglifyJS2/issues/1753
-    // https://bugs.webkit.org/show_bug.cgi?id=171041
-    if (options.safari10) {
-        for (const scope of for_scopes) {
-            scope.parent_scope.variables.forEach(function(def) {
-                push_uniq(scope.enclosed, def);
-            });
-        }
-    }
-});
-
-AST_Toplevel.DEFMETHOD("def_global", function(node) {
-    var globals = this.globals, name = node.name;
-    if (globals.has(name)) {
-        return globals.get(name);
-    } else {
-        var g = new SymbolDef(this, node);
-        g.undeclared = true;
-        g.global = true;
-        globals.set(name, g);
-        return g;
-    }
-});
-
-AST_Scope.DEFMETHOD("init_scope_vars", function(parent_scope) {
-    this.variables = new Map();         // map name to AST_SymbolVar (variables defined in this scope; includes functions)
-    this.uses_with = false;             // will be set to true if this or some nested scope uses the `with` statement
-    this.uses_eval = false;             // will be set to true if this or nested scope uses the global `eval`
-    this.parent_scope = parent_scope;   // the parent scope
-    this.enclosed = [];                 // a list of variables from this or outer scope(s) that are referenced from this or inner scopes
-    this.cname = -1;                    // the current index for mangling functions/variables
-});
-
-AST_Scope.DEFMETHOD("conflicting_def", function (name) {
-    return (
-        this.enclosed.find(def => def.name === name)
-        || this.variables.has(name)
-        || (this.parent_scope && this.parent_scope.conflicting_def(name))
-    );
-});
-
-AST_Scope.DEFMETHOD("conflicting_def_shallow", function (name) {
-    return (
-        this.enclosed.find(def => def.name === name)
-        || this.variables.has(name)
-    );
-});
-
-AST_Scope.DEFMETHOD("add_child_scope", function (scope) {
-    // `scope` is going to be moved into `this` right now.
-    // Update the required scopes' information
-
-    if (scope.parent_scope === this) return;
-
-    scope.parent_scope = this;
-
-    // TODO uses_with, uses_eval, etc
-
-    const scope_ancestry = (() => {
-        const ancestry = [];
-        let cur = this;
-        do {
-            ancestry.push(cur);
-        } while ((cur = cur.parent_scope));
-        ancestry.reverse();
-        return ancestry;
-    })();
-
-    const new_scope_enclosed_set = new Set(scope.enclosed);
-    const to_enclose = [];
-    for (const scope_topdown of scope_ancestry) {
-        to_enclose.forEach(e => push_uniq(scope_topdown.enclosed, e));
-        for (const def of scope_topdown.variables.values()) {
-            if (new_scope_enclosed_set.has(def)) {
-                push_uniq(to_enclose, def);
-                push_uniq(scope_topdown.enclosed, def);
-            }
-        }
-    }
-});
-
-function find_scopes_visible_from(scopes) {
-    const found_scopes = new Set();
-
-    for (const scope of new Set(scopes)) {
-        (function bubble_up(scope) {
-            if (scope == null || found_scopes.has(scope)) return;
-
-            found_scopes.add(scope);
-
-            bubble_up(scope.parent_scope);
-        })(scope);
-    }
-
-    return [...found_scopes];
-}
-
-// Creates a symbol during compression
-AST_Scope.DEFMETHOD("create_symbol", function(SymClass, {
-    source,
-    tentative_name,
-    scope,
-    conflict_scopes = [scope],
-    init = null
-} = {}) {
-    let symbol_name;
-
-    conflict_scopes = find_scopes_visible_from(conflict_scopes);
-
-    if (tentative_name) {
-        // Implement hygiene (no new names are conflicting with existing names)
-        tentative_name =
-            symbol_name =
-            tentative_name.replace(/(?:^[^a-z_$]|[^a-z0-9_$])/ig, "_");
-
-        let i = 0;
-        while (conflict_scopes.find(s => s.conflicting_def_shallow(symbol_name))) {
-            symbol_name = tentative_name + "$" + i++;
-        }
-    }
-
-    if (!symbol_name) {
-        throw new Error("No symbol name could be generated in create_symbol()");
-    }
-
-    const symbol = make_node(SymClass, source, {
-        name: symbol_name,
-        scope
-    });
-
-    this.def_variable(symbol, init || null);
-
-    symbol.mark_enclosed();
-
-    return symbol;
-});
-
-
-AST_Node.DEFMETHOD("is_block_scope", return_false);
-AST_Class.DEFMETHOD("is_block_scope", return_false);
-AST_Lambda.DEFMETHOD("is_block_scope", return_false);
-AST_Toplevel.DEFMETHOD("is_block_scope", return_false);
-AST_SwitchBranch.DEFMETHOD("is_block_scope", return_false);
-AST_Block.DEFMETHOD("is_block_scope", return_true);
-AST_Scope.DEFMETHOD("is_block_scope", function () {
-    return this._block_scope || false;
-});
-AST_IterationStatement.DEFMETHOD("is_block_scope", return_true);
-
-AST_Lambda.DEFMETHOD("init_scope_vars", function() {
-    AST_Scope.prototype.init_scope_vars.apply(this, arguments);
-    this.uses_arguments = false;
-    this.def_variable(new AST_SymbolFunarg({
-        name: "arguments",
-        start: this.start,
-        end: this.end
-    }));
-});
-
-AST_Arrow.DEFMETHOD("init_scope_vars", function() {
-    AST_Scope.prototype.init_scope_vars.apply(this, arguments);
-    this.uses_arguments = false;
-});
-
-AST_Symbol.DEFMETHOD("mark_enclosed", function() {
-    var def = this.definition();
-    var s = this.scope;
-    while (s) {
-        push_uniq(s.enclosed, def);
-        if (s === def.scope) break;
-        s = s.parent_scope;
-    }
-});
-
-AST_Symbol.DEFMETHOD("reference", function() {
-    this.definition().references.push(this);
-    this.mark_enclosed();
-});
-
-AST_Scope.DEFMETHOD("find_variable", function(name) {
-    if (name instanceof AST_Symbol) name = name.name;
-    return this.variables.get(name)
-        || (this.parent_scope && this.parent_scope.find_variable(name));
-});
-
-AST_Scope.DEFMETHOD("def_function", function(symbol, init) {
-    var def = this.def_variable(symbol, init);
-    if (!def.init || def.init instanceof AST_Defun) def.init = init;
-    return def;
-});
-
-AST_Scope.DEFMETHOD("def_variable", function(symbol, init) {
-    var def = this.variables.get(symbol.name);
-    if (def) {
-        def.orig.push(symbol);
-        if (def.init && (def.scope !== symbol.scope || def.init instanceof AST_Function)) {
-            def.init = init;
-        }
-    } else {
-        def = new SymbolDef(this, symbol, init);
-        this.variables.set(symbol.name, def);
-        def.global = !this.parent_scope;
-    }
-    return symbol.thedef = def;
-});
-
-function next_mangled(scope, options) {
-    let defun_scope;
-    if (
-        scopes_with_block_defuns
-        && (defun_scope = scope.get_defun_scope())
-        && scopes_with_block_defuns.has(defun_scope)
-    ) {
-        scope = defun_scope;
-    }
-
-    var ext = scope.enclosed;
-    var nth_identifier = options.nth_identifier;
-    out: while (true) {
-        var m = nth_identifier.get(++scope.cname);
-        if (ALL_RESERVED_WORDS.has(m)) continue; // skip over "do"
-
-        // https://github.com/mishoo/UglifyJS2/issues/242 -- do not
-        // shadow a name reserved from mangling.
-        if (options.reserved.has(m)) continue;
-
-        // Functions with short names might collide with base54 output
-        // and therefore cause collisions when keep_fnames is true.
-        if (unmangleable_names && unmangleable_names.has(m)) continue out;
-
-        // we must ensure that the mangled name does not shadow a name
-        // from some parent scope that is referenced in this or in
-        // inner scopes.
-        for (let i = ext.length; --i >= 0;) {
-            const def = ext[i];
-            const name = def.mangled_name || (def.unmangleable(options) && def.name);
-            if (m == name) continue out;
-        }
-        return m;
-    }
-}
-
-AST_Scope.DEFMETHOD("next_mangled", function(options) {
-    return next_mangled(this, options);
-});
-
-AST_Toplevel.DEFMETHOD("next_mangled", function(options) {
-    let name;
-    const mangled_names = this.mangled_names;
-    do {
-        name = next_mangled(this, options);
-    } while (mangled_names.has(name));
-    return name;
-});
-
-AST_Function.DEFMETHOD("next_mangled", function(options, def) {
-    // #179, #326
-    // in Safari strict mode, something like (function x(x){...}) is a syntax error;
-    // a function expression's argument cannot shadow the function expression's name
-
-    var tricky_def = def.orig[0] instanceof AST_SymbolFunarg && this.name && this.name.definition();
-
-    // the function's mangled_name is null when keep_fnames is true
-    var tricky_name = tricky_def ? tricky_def.mangled_name || tricky_def.name : null;
-
-    while (true) {
-        var name = next_mangled(this, options);
-        if (!tricky_name || tricky_name != name)
-            return name;
-    }
-});
-
-AST_Symbol.DEFMETHOD("unmangleable", function(options) {
-    var def = this.definition();
-    return !def || def.unmangleable(options);
-});
-
-// labels are always mangleable
-AST_Label.DEFMETHOD("unmangleable", return_false);
-
-AST_Symbol.DEFMETHOD("unreferenced", function() {
-    return !this.definition().references.length && !this.scope.pinned();
-});
-
-AST_Symbol.DEFMETHOD("definition", function() {
-    return this.thedef;
-});
-
-AST_Symbol.DEFMETHOD("global", function() {
-    return this.thedef.global;
-});
-
-AST_Toplevel.DEFMETHOD("_default_mangler_options", function(options) {
-    options = defaults(options, {
-        eval        : false,
-        nth_identifier : base54,
-        ie8         : false,
-        keep_classnames: false,
-        keep_fnames : false,
-        module      : false,
-        reserved    : [],
-        toplevel    : false,
-    });
-    if (options.module) options.toplevel = true;
-    if (!Array.isArray(options.reserved)
-        && !(options.reserved instanceof Set)
-    ) {
-        options.reserved = [];
-    }
-    options.reserved = new Set(options.reserved);
-    // Never mangle arguments
-    options.reserved.add("arguments");
-    return options;
-});
-
-AST_Toplevel.DEFMETHOD("mangle_names", function(options) {
-    options = this._default_mangler_options(options);
-    var nth_identifier = options.nth_identifier;
-
-    // We only need to mangle declaration nodes.  Special logic wired
-    // into the code generator will display the mangled name if it's
-    // present (and for AST_SymbolRef-s it'll use the mangled name of
-    // the AST_SymbolDeclaration that it points to).
-    var lname = -1;
-    var to_mangle = [];
-
-    if (options.keep_fnames) {
-        function_defs = new Set();
-    }
-
-    const mangled_names = this.mangled_names = new Set();
-    unmangleable_names = new Set();
-
-    if (options.cache) {
-        this.globals.forEach(collect);
-        if (options.cache.props) {
-            options.cache.props.forEach(function(mangled_name) {
-                mangled_names.add(mangled_name);
-            });
-        }
-    }
-
-    var tw = new TreeWalker(function(node, descend) {
-        if (node instanceof AST_LabeledStatement) {
-            // lname is incremented when we get to the AST_Label
-            var save_nesting = lname;
-            descend();
-            lname = save_nesting;
-            return true;        // don't descend again in TreeWalker
-        }
-        if (
-            node instanceof AST_Defun
-            && !(tw.parent() instanceof AST_Scope)
-        ) {
-            scopes_with_block_defuns = scopes_with_block_defuns || new Set();
-            scopes_with_block_defuns.add(node.parent_scope.get_defun_scope());
-        }
-        if (node instanceof AST_Scope) {
-            node.variables.forEach(collect);
-            return;
-        }
-        if (node.is_block_scope()) {
-            node.block_scope.variables.forEach(collect);
-            return;
-        }
-        if (
-            function_defs
-            && node instanceof AST_VarDef
-            && node.value instanceof AST_Lambda
-            && !node.value.name
-            && keep_name(options.keep_fnames, node.name.name)
-        ) {
-            function_defs.add(node.name.definition().id);
-            return;
-        }
-        if (node instanceof AST_Label) {
-            let name;
-            do {
-                name = nth_identifier.get(++lname);
-            } while (ALL_RESERVED_WORDS.has(name));
-            node.mangled_name = name;
-            return true;
-        }
-        if (!(options.ie8 || options.safari10) && node instanceof AST_SymbolCatch) {
-            to_mangle.push(node.definition());
-            return;
-        }
-    });
-
-    this.walk(tw);
-
-    if (options.keep_fnames || options.keep_classnames) {
-        // Collect a set of short names which are unmangleable,
-        // for use in avoiding collisions in next_mangled.
-        to_mangle.forEach(def => {
-            if (def.name.length < 6 && def.unmangleable(options)) {
-                unmangleable_names.add(def.name);
-            }
-        });
-    }
-
-    to_mangle.forEach(def => { def.mangle(options); });
-
-    function_defs = null;
-    unmangleable_names = null;
-    scopes_with_block_defuns = null;
-
-    function collect(symbol) {
-        if (symbol.export & MASK_EXPORT_DONT_MANGLE) {
-            unmangleable_names.add(symbol.name);
-        } else if (!options.reserved.has(symbol.name)) {
-            to_mangle.push(symbol);
-        }
-    }
-});
-
-AST_Toplevel.DEFMETHOD("find_colliding_names", function(options) {
-    const cache = options.cache && options.cache.props;
-    const avoid = new Set();
-    options.reserved.forEach(to_avoid);
-    this.globals.forEach(add_def);
-    this.walk(new TreeWalker(function(node) {
-        if (node instanceof AST_Scope) node.variables.forEach(add_def);
-        if (node instanceof AST_SymbolCatch) add_def(node.definition());
-    }));
-    return avoid;
-
-    function to_avoid(name) {
-        avoid.add(name);
-    }
-
-    function add_def(def) {
-        var name = def.name;
-        if (def.global && cache && cache.has(name)) name = cache.get(name);
-        else if (!def.unmangleable(options)) return;
-        to_avoid(name);
-    }
-});
-
-AST_Toplevel.DEFMETHOD("expand_names", function(options) {
-    options = this._default_mangler_options(options);
-    var nth_identifier = options.nth_identifier;
-    if (nth_identifier.reset && nth_identifier.sort) {
-        nth_identifier.reset();
-        nth_identifier.sort();
-    }
-    var avoid = this.find_colliding_names(options);
-    var cname = 0;
-    this.globals.forEach(rename);
-    this.walk(new TreeWalker(function(node) {
-        if (node instanceof AST_Scope) node.variables.forEach(rename);
-        if (node instanceof AST_SymbolCatch) rename(node.definition());
-    }));
-
-    function next_name() {
-        var name;
-        do {
-            name = nth_identifier.get(cname++);
-        } while (avoid.has(name) || ALL_RESERVED_WORDS.has(name));
-        return name;
-    }
-
-    function rename(def) {
-        if (def.global && options.cache) return;
-        if (def.unmangleable(options)) return;
-        if (options.reserved.has(def.name)) return;
-        const redefinition = redefined_catch_def(def);
-        const name = def.name = redefinition ? redefinition.name : next_name();
-        def.orig.forEach(function(sym) {
-            sym.name = name;
-        });
-        def.references.forEach(function(sym) {
-            sym.name = name;
-        });
-    }
-});
-
-AST_Node.DEFMETHOD("tail_node", return_this);
-AST_Sequence.DEFMETHOD("tail_node", function() {
-    return this.expressions[this.expressions.length - 1];
-});
-
-AST_Toplevel.DEFMETHOD("compute_char_frequency", function(options) {
-    options = this._default_mangler_options(options);
-    var nth_identifier = options.nth_identifier;
-    if (!nth_identifier.reset || !nth_identifier.consider || !nth_identifier.sort) {
-        // If the identifier mangler is invariant, skip computing character frequency.
-        return;
-    }
-    nth_identifier.reset();
-
-    try {
-        AST_Node.prototype.print = function(stream, force_parens) {
-            this._print(stream, force_parens);
-            if (this instanceof AST_Symbol && !this.unmangleable(options)) {
-                nth_identifier.consider(this.name, -1);
-            } else if (options.properties) {
-                if (this instanceof AST_DotHash) {
-                    nth_identifier.consider("#" + this.property, -1);
-                } else if (this instanceof AST_Dot) {
-                    nth_identifier.consider(this.property, -1);
-                } else if (this instanceof AST_Sub) {
-                    skip_string(this.property);
-                }
-            }
-        };
-        nth_identifier.consider(this.print_to_string(), 1);
-    } finally {
-        AST_Node.prototype.print = AST_Node.prototype._print;
-    }
-    nth_identifier.sort();
-
-    function skip_string(node) {
-        if (node instanceof AST_String) {
-            nth_identifier.consider(node.value, -1);
-        } else if (node instanceof AST_Conditional) {
-            skip_string(node.consequent);
-            skip_string(node.alternative);
-        } else if (node instanceof AST_Sequence) {
-            skip_string(node.tail_node());
-        }
-    }
-});
-
-const base54 = (() => {
-    const leading = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_".split("");
-    const digits = "0123456789".split("");
-    let chars;
-    let frequency;
-    function reset() {
-        frequency = new Map();
-        leading.forEach(function(ch) {
-            frequency.set(ch, 0);
-        });
-        digits.forEach(function(ch) {
-            frequency.set(ch, 0);
-        });
-    }
-    function consider(str, delta) {
-        for (var i = str.length; --i >= 0;) {
-            frequency.set(str[i], frequency.get(str[i]) + delta);
-        }
-    }
-    function compare(a, b) {
-        return frequency.get(b) - frequency.get(a);
-    }
-    function sort() {
-        chars = mergeSort(leading, compare).concat(mergeSort(digits, compare));
-    }
-    // Ensure this is in a usable initial state.
-    reset();
-    sort();
-    function base54(num) {
-        var ret = "", base = 54;
-        num++;
-        do {
-            num--;
-            ret += chars[num % base];
-            num = Math.floor(num / base);
-            base = 64;
-        } while (num > 0);
-        return ret;
-    }
-
-    return {
-        get: base54,
-        consider,
-        reset,
-        sort
-    };
-})();
-
-let mangle_options = undefined;
-AST_Node.prototype.size = function (compressor, stack) {
-    mangle_options = compressor && compressor.mangle_options;
-
-    let size = 0;
-    walk_parent(this, (node, info) => {
-        size += node._size(info);
-
-        // Braceless arrow functions have fake "return" statements
-        if (node instanceof AST_Arrow && node.is_braceless()) {
-            size += node.body[0].value._size(info);
-            return true;
-        }
-    }, stack || (compressor && compressor.stack));
-
-    // just to save a bit of memory
-    mangle_options = undefined;
-
-    return size;
-};
-
-AST_Node.prototype._size = () => 0;
-
-AST_Debugger.prototype._size = () => 8;
-
-AST_Directive.prototype._size = function () {
-    // TODO string encoding stuff
-    return 2 + this.value.length;
-};
-
-/** Count commas/semicolons necessary to show a list of expressions/statements */
-const list_overhead = (array) => array.length && array.length - 1;
-
-AST_Block.prototype._size = function () {
-    return 2 + list_overhead(this.body);
-};
-
-AST_Toplevel.prototype._size = function() {
-    return list_overhead(this.body);
-};
-
-AST_EmptyStatement.prototype._size = () => 1;
-
-AST_LabeledStatement.prototype._size = () => 2;  // x:
-
-AST_Do.prototype._size = () => 9;
-
-AST_While.prototype._size = () => 7;
-
-AST_For.prototype._size = () => 8;
-
-AST_ForIn.prototype._size = () => 8;
-// AST_ForOf inherits ^
-
-AST_With.prototype._size = () => 6;
-
-AST_Expansion.prototype._size = () => 3;
-
-const lambda_modifiers = func =>
-    (func.is_generator ? 1 : 0) + (func.async ? 6 : 0);
-
-AST_Accessor.prototype._size = function () {
-    return lambda_modifiers(this) + 4 + list_overhead(this.argnames) + list_overhead(this.body);
-};
-
-AST_Function.prototype._size = function (info) {
-    const first = !!first_in_statement(info);
-    return (first * 2) + lambda_modifiers(this) + 12 + list_overhead(this.argnames) + list_overhead(this.body);
-};
-
-AST_Defun.prototype._size = function () {
-    return lambda_modifiers(this) + 13 + list_overhead(this.argnames) + list_overhead(this.body);
-};
-
-AST_Arrow.prototype._size = function () {
-    let args_and_arrow = 2 + list_overhead(this.argnames);
-
-    if (
-        !(
-            this.argnames.length === 1
-            && this.argnames[0] instanceof AST_Symbol
-        )
-    ) {
-        args_and_arrow += 2; // parens around the args
-    }
-
-    const body_overhead = this.is_braceless() ? 0 : list_overhead(this.body) + 2;
-
-    return lambda_modifiers(this) + args_and_arrow + body_overhead;
-};
-
-AST_Destructuring.prototype._size = () => 2;
-
-AST_TemplateString.prototype._size = function () {
-    return 2 + (Math.floor(this.segments.length / 2) * 3);  /* "${}" */
-};
-
-AST_TemplateSegment.prototype._size = function () {
-    return this.value.length;
-};
-
-AST_Return.prototype._size = function () {
-    return this.value ? 7 : 6;
-};
-
-AST_Throw.prototype._size = () => 6;
-
-AST_Break.prototype._size = function () {
-    return this.label ? 6 : 5;
-};
-
-AST_Continue.prototype._size = function () {
-    return this.label ? 9 : 8;
-};
-
-AST_If.prototype._size = () => 4;
-
-AST_Switch.prototype._size = function () {
-    return 8 + list_overhead(this.body);
-};
-
-AST_Case.prototype._size = function () {
-    return 5 + list_overhead(this.body);
-};
-
-AST_Default.prototype._size = function () {
-    return 8 + list_overhead(this.body);
-};
-
-AST_Try.prototype._size = function () {
-    return 3 + list_overhead(this.body);
-};
-
-AST_Catch.prototype._size = function () {
-    let size = 7 + list_overhead(this.body);
-    if (this.argname) {
-        size += 2;
-    }
-    return size;
-};
-
-AST_Finally.prototype._size = function () {
-    return 7 + list_overhead(this.body);
-};
-
-AST_Var.prototype._size = function () {
-    return 4 + list_overhead(this.definitions);
-};
-
-AST_Let.prototype._size = function () {
-    return 4 + list_overhead(this.definitions);
-};
-
-AST_Const.prototype._size = function () {
-    return 6 + list_overhead(this.definitions);
-};
-
-AST_VarDef.prototype._size = function () {
-    return this.value ? 1 : 0;
-};
-
-AST_NameMapping.prototype._size = function () {
-    // foreign name isn't mangled
-    return this.name ? 4 : 0;
-};
-
-AST_Import.prototype._size = function () {
-    // import
-    let size = 6;
-
-    if (this.imported_name) size += 1;
-
-    // from
-    if (this.imported_name || this.imported_names) size += 5;
-
-    // braces, and the commas
-    if (this.imported_names) {
-        size += 2 + list_overhead(this.imported_names);
-    }
-
-    return size;
-};
-
-AST_ImportMeta.prototype._size = () => 11;
-
-AST_Export.prototype._size = function () {
-    let size = 7 + (this.is_default ? 8 : 0);
-
-    if (this.exported_value) {
-        size += this.exported_value._size();
-    }
-
-    if (this.exported_names) {
-        // Braces and commas
-        size += 2 + list_overhead(this.exported_names);
-    }
-
-    if (this.module_name) {
-        // "from "
-        size += 5;
-    }
-
-    return size;
-};
-
-AST_Call.prototype._size = function () {
-    if (this.optional) {
-        return 4 + list_overhead(this.args);
-    }
-    return 2 + list_overhead(this.args);
-};
-
-AST_New.prototype._size = function () {
-    return 6 + list_overhead(this.args);
-};
-
-AST_Sequence.prototype._size = function () {
-    return list_overhead(this.expressions);
-};
-
-AST_Dot.prototype._size = function () {
-    if (this.optional) {
-        return this.property.length + 2;
-    }
-    return this.property.length + 1;
-};
-
-AST_DotHash.prototype._size = function () {
-    if (this.optional) {
-        return this.property.length + 3;
-    }
-    return this.property.length + 2;
-};
-
-AST_Sub.prototype._size = function () {
-    return this.optional ? 4 : 2;
-};
-
-AST_Unary.prototype._size = function () {
-    if (this.operator === "typeof") return 7;
-    if (this.operator === "void") return 5;
-    return this.operator.length;
-};
-
-AST_Binary.prototype._size = function (info) {
-    if (this.operator === "in") return 4;
-
-    let size = this.operator.length;
-
-    if (
-        (this.operator === "+" || this.operator === "-")
-        && this.right instanceof AST_Unary && this.right.operator === this.operator
-    ) {
-        // 1+ +a > needs space between the +
-        size += 1;
-    }
-
-    if (this.needs_parens(info)) {
-        size += 2;
-    }
-
-    return size;
-};
-
-AST_Conditional.prototype._size = () => 3;
-
-AST_Array.prototype._size = function () {
-    return 2 + list_overhead(this.elements);
-};
-
-AST_Object.prototype._size = function (info) {
-    let base = 2;
-    if (first_in_statement(info)) {
-        base += 2; // parens
-    }
-    return base + list_overhead(this.properties);
-};
-
-/*#__INLINE__*/
-const key_size = key =>
-    typeof key === "string" ? key.length : 0;
-
-AST_ObjectKeyVal.prototype._size = function () {
-    return key_size(this.key) + 1;
-};
-
-/*#__INLINE__*/
-const static_size = is_static => is_static ? 7 : 0;
-
-AST_ObjectGetter.prototype._size = function () {
-    return 5 + static_size(this.static) + key_size(this.key);
-};
-
-AST_ObjectSetter.prototype._size = function () {
-    return 5 + static_size(this.static) + key_size(this.key);
-};
-
-AST_ConciseMethod.prototype._size = function () {
-    return static_size(this.static) + key_size(this.key) + lambda_modifiers(this);
-};
-
-AST_PrivateMethod.prototype._size = function () {
-    return AST_ConciseMethod.prototype._size.call(this) + 1;
-};
-
-AST_PrivateGetter.prototype._size = AST_PrivateSetter.prototype._size = function () {
-    return AST_ConciseMethod.prototype._size.call(this) + 4;
-};
-
-AST_Class.prototype._size = function () {
-    return (
-        (this.name ? 8 : 7)
-        + (this.extends ? 8 : 0)
-    );
-};
-
-AST_ClassStaticBlock.prototype._size = function () {
-    // "class{}" + semicolons
-    return 7 + list_overhead(this.body);
-};
-
-AST_ClassProperty.prototype._size = function () {
-    return (
-        static_size(this.static)
-        + (typeof this.key === "string" ? this.key.length + 2 : 0)
-        + (this.value ? 1 : 0)
-    );
-};
-
-AST_ClassPrivateProperty.prototype._size = function () {
-    return AST_ClassProperty.prototype._size.call(this) + 1;
-};
-
-AST_Symbol.prototype._size = function () {
-    return !mangle_options || this.definition().unmangleable(mangle_options)
-        ? this.name.length
-        : 1;
-};
-
-// TODO take propmangle into account
-AST_SymbolClassProperty.prototype._size = function () {
-    return this.name.length;
-};
-
-AST_SymbolRef.prototype._size = AST_SymbolDeclaration.prototype._size = function () {
-    const { name, thedef } = this;
-
-    if (thedef && thedef.global) return name.length;
-
-    if (name === "arguments") return 9;
-
-    return AST_Symbol.prototype._size.call(this);
-};
-
-AST_NewTarget.prototype._size = () => 10;
-
-AST_SymbolImportForeign.prototype._size = function () {
-    return this.name.length;
-};
-
-AST_SymbolExportForeign.prototype._size = function () {
-    return this.name.length;
-};
-
-AST_This.prototype._size = () => 4;
-
-AST_Super.prototype._size = () => 5;
-
-AST_String.prototype._size = function () {
-    return this.value.length + 2;
-};
-
-AST_Number.prototype._size = function () {
-    const { value } = this;
-    if (value === 0) return 1;
-    if (value > 0 && Math.floor(value) === value) {
-        return Math.floor(Math.log10(value) + 1);
-    }
-    return value.toString().length;
-};
-
-AST_BigInt.prototype._size = function () {
-    return this.value.length;
-};
-
-AST_RegExp.prototype._size = function () {
-    return this.value.toString().length;
-};
-
-AST_Null.prototype._size = () => 4;
-
-AST_NaN.prototype._size = () => 3;
-
-AST_Undefined.prototype._size = () => 6; // "void 0"
-
-AST_Hole.prototype._size = () => 0;  // comma is taken into account by list_overhead()
-
-AST_Infinity.prototype._size = () => 8;
-
-AST_True.prototype._size = () => 4;
-
-AST_False.prototype._size = () => 5;
-
-AST_Await.prototype._size = () => 6;
-
-AST_Yield.prototype._size = () => 6;
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-// bitfield flags to be stored in node.flags.
-// These are set and unset during compression, and store information in the node without requiring multiple fields.
-const UNUSED = 0b00000001;
-const TRUTHY = 0b00000010;
-const FALSY = 0b00000100;
-const UNDEFINED = 0b00001000;
-const INLINED = 0b00010000;
-
-// Nodes to which values are ever written. Used when keep_assign is part of the unused option string.
-const WRITE_ONLY = 0b00100000;
-
-// information specific to a single compression pass
-const SQUEEZED = 0b0000000100000000;
-const OPTIMIZED = 0b0000001000000000;
-const TOP = 0b0000010000000000;
-const CLEAR_BETWEEN_PASSES = SQUEEZED | OPTIMIZED | TOP;
-
-const has_flag = (node, flag) => node.flags & flag;
-const set_flag = (node, flag) => { node.flags |= flag; };
-const clear_flag = (node, flag) => { node.flags &= ~flag; };
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-function merge_sequence(array, node) {
-    if (node instanceof AST_Sequence) {
-        array.push(...node.expressions);
-    } else {
-        array.push(node);
-    }
-    return array;
-}
-
-function make_sequence(orig, expressions) {
-    if (expressions.length == 1) return expressions[0];
-    if (expressions.length == 0) throw new Error("trying to create a sequence with length zero!");
-    return make_node(AST_Sequence, orig, {
-        expressions: expressions.reduce(merge_sequence, [])
-    });
-}
-
-function make_node_from_constant(val, orig) {
-    switch (typeof val) {
-      case "string":
-        return make_node(AST_String, orig, {
-            value: val
-        });
-      case "number":
-        if (isNaN(val)) return make_node(AST_NaN, orig);
-        if (isFinite(val)) {
-            return 1 / val < 0 ? make_node(AST_UnaryPrefix, orig, {
-                operator: "-",
-                expression: make_node(AST_Number, orig, { value: -val })
-            }) : make_node(AST_Number, orig, { value: val });
-        }
-        return val < 0 ? make_node(AST_UnaryPrefix, orig, {
-            operator: "-",
-            expression: make_node(AST_Infinity, orig)
-        }) : make_node(AST_Infinity, orig);
-      case "boolean":
-        return make_node(val ? AST_True : AST_False, orig);
-      case "undefined":
-        return make_node(AST_Undefined, orig);
-      default:
-        if (val === null) {
-            return make_node(AST_Null, orig, { value: null });
-        }
-        if (val instanceof RegExp) {
-            return make_node(AST_RegExp, orig, {
-                value: {
-                    source: regexp_source_fix(val.source),
-                    flags: val.flags
-                }
-            });
-        }
-        throw new Error(string_template("Can't handle constant of type: {type}", {
-            type: typeof val
-        }));
-    }
-}
-
-function best_of_expression(ast1, ast2) {
-    return ast1.size() > ast2.size() ? ast2 : ast1;
-}
-
-function best_of_statement(ast1, ast2) {
-    return best_of_expression(
-        make_node(AST_SimpleStatement, ast1, {
-            body: ast1
-        }),
-        make_node(AST_SimpleStatement, ast2, {
-            body: ast2
-        })
-    ).body;
-}
-
-/** Find which node is smaller, and return that */
-function best_of(compressor, ast1, ast2) {
-    if (first_in_statement(compressor)) {
-        return best_of_statement(ast1, ast2);
-    } else {
-        return best_of_expression(ast1, ast2);
-    }
-}
-
-/** Simplify an object property's key, if possible */
-function get_simple_key(key) {
-    if (key instanceof AST_Constant) {
-        return key.getValue();
-    }
-    if (key instanceof AST_UnaryPrefix
-        && key.operator == "void"
-        && key.expression instanceof AST_Constant) {
-        return;
-    }
-    return key;
-}
-
-function read_property(obj, key) {
-    key = get_simple_key(key);
-    if (key instanceof AST_Node) return;
-
-    var value;
-    if (obj instanceof AST_Array) {
-        var elements = obj.elements;
-        if (key == "length") return make_node_from_constant(elements.length, obj);
-        if (typeof key == "number" && key in elements) value = elements[key];
-    } else if (obj instanceof AST_Object) {
-        key = "" + key;
-        var props = obj.properties;
-        for (var i = props.length; --i >= 0;) {
-            var prop = props[i];
-            if (!(prop instanceof AST_ObjectKeyVal)) return;
-            if (!value && props[i].key === key) value = props[i].value;
-        }
-    }
-
-    return value instanceof AST_SymbolRef && value.fixed_value() || value;
-}
-
-function has_break_or_continue(loop, parent) {
-    var found = false;
-    var tw = new TreeWalker(function(node) {
-        if (found || node instanceof AST_Scope) return true;
-        if (node instanceof AST_LoopControl && tw.loopcontrol_target(node) === loop) {
-            return found = true;
-        }
-    });
-    if (parent instanceof AST_LabeledStatement) tw.push(parent);
-    tw.push(loop);
-    loop.body.walk(tw);
-    return found;
-}
-
-// we shouldn't compress (1,func)(something) to
-// func(something) because that changes the meaning of
-// the func (becomes lexical instead of global).
-function maintain_this_binding(parent, orig, val) {
-    if (
-        parent instanceof AST_UnaryPrefix && parent.operator == "delete"
-        || parent instanceof AST_Call && parent.expression === orig
-            && (
-                val instanceof AST_PropAccess
-                || val instanceof AST_SymbolRef && val.name == "eval"
-            )
-    ) {
-        const zero = make_node(AST_Number, orig, { value: 0 });
-        return make_sequence(orig, [ zero, val ]);
-    } else {
-        return val;
-    }
-}
-
-function is_func_expr(node) {
-    return node instanceof AST_Arrow || node instanceof AST_Function;
-}
-
-function is_iife_call(node) {
-    // Used to determine whether the node can benefit from negation.
-    // Not the case with arrow functions (you need an extra set of parens).
-    if (node.TYPE != "Call") return false;
-    return node.expression instanceof AST_Function || is_iife_call(node.expression);
-}
-
-function is_empty(thing) {
-    if (thing === null) return true;
-    if (thing instanceof AST_EmptyStatement) return true;
-    if (thing instanceof AST_BlockStatement) return thing.body.length == 0;
-    return false;
-}
-
-const identifier_atom = makePredicate("Infinity NaN undefined");
-function is_identifier_atom(node) {
-    return node instanceof AST_Infinity
-        || node instanceof AST_NaN
-        || node instanceof AST_Undefined;
-}
-
-/** Check if this is a SymbolRef node which has one def of a certain AST type */
-function is_ref_of(ref, type) {
-    if (!(ref instanceof AST_SymbolRef)) return false;
-    var orig = ref.definition().orig;
-    for (var i = orig.length; --i >= 0;) {
-        if (orig[i] instanceof type) return true;
-    }
-}
-
-/**Can we turn { block contents... } into just the block contents ?
- * Not if one of these is inside.
- **/
-function can_be_evicted_from_block(node) {
-    return !(
-        node instanceof AST_DefClass ||
-        node instanceof AST_Defun ||
-        node instanceof AST_Let ||
-        node instanceof AST_Const ||
-        node instanceof AST_Export ||
-        node instanceof AST_Import
-    );
-}
-
-function as_statement_array(thing) {
-    if (thing === null) return [];
-    if (thing instanceof AST_BlockStatement) return thing.body;
-    if (thing instanceof AST_EmptyStatement) return [];
-    if (thing instanceof AST_Statement) return [ thing ];
-    throw new Error("Can't convert thing to statement array");
-}
-
-function is_reachable(scope_node, defs) {
-    const find_ref = node => {
-        if (node instanceof AST_SymbolRef && defs.includes(node.definition())) {
-            return walk_abort;
-        }
-    };
-
-    return walk_parent(scope_node, (node, info) => {
-        if (node instanceof AST_Scope && node !== scope_node) {
-            var parent = info.parent();
-
-            if (
-                parent instanceof AST_Call
-                && parent.expression === node
-                // Async/Generators aren't guaranteed to sync evaluate all of
-                // their body steps, so it's possible they close over the variable.
-                && !(node.async || node.is_generator)
-            ) {
-                return;
-            }
-
-            if (walk(node, find_ref)) return walk_abort;
-
-            return true;
-        }
-    });
-}
-
-/** Check if a ref refers to the name of a function/class it's defined within */
-function is_recursive_ref(compressor, def) {
-    var node;
-    for (var i = 0; node = compressor.parent(i); i++) {
-        if (node instanceof AST_Lambda || node instanceof AST_Class) {
-            var name = node.name;
-            if (name && name.definition() === def) {
-                return true;
-            }
-        }
-    }
-    return false;
-}
-
-// TODO this only works with AST_Defun, shouldn't it work for other ways of defining functions?
-function retain_top_func(fn, compressor) {
-    return compressor.top_retain
-        && fn instanceof AST_Defun
-        && has_flag(fn, TOP)
-        && fn.name
-        && compressor.top_retain(fn.name);
-}
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-// Lists of native methods, useful for `unsafe` option which assumes they exist.
-// Note: Lots of methods and functions are missing here, in case they aren't pure
-// or not available in all JS environments.
-
-function make_nested_lookup(obj) {
-    const out = new Map();
-    for (var key of Object.keys(obj)) {
-        out.set(key, makePredicate(obj[key]));
-    }
-
-    const does_have = (global_name, fname) => {
-        const inner_map = out.get(global_name);
-        return inner_map != null && inner_map.has(fname);
-    };
-    return does_have;
-}
-
-// Objects which are safe to access without throwing or causing a side effect.
-// Usually we'd check the `unsafe` option first but these are way too common for that
-const pure_prop_access_globals = new Set([
-    "Number",
-    "String",
-    "Array",
-    "Object",
-    "Function",
-    "Promise",
-]);
-
-const object_methods = [
-    "constructor",
-    "toString",
-    "valueOf",
-];
-
-const is_pure_native_method = make_nested_lookup({
-    Array: [
-        "indexOf",
-        "join",
-        "lastIndexOf",
-        "slice",
-        ...object_methods,
-    ],
-    Boolean: object_methods,
-    Function: object_methods,
-    Number: [
-        "toExponential",
-        "toFixed",
-        "toPrecision",
-        ...object_methods,
-    ],
-    Object: object_methods,
-    RegExp: [
-        "test",
-        ...object_methods,
-    ],
-    String: [
-        "charAt",
-        "charCodeAt",
-        "concat",
-        "indexOf",
-        "italics",
-        "lastIndexOf",
-        "match",
-        "replace",
-        "search",
-        "slice",
-        "split",
-        "substr",
-        "substring",
-        "toLowerCase",
-        "toUpperCase",
-        "trim",
-        ...object_methods,
-    ],
-});
-
-const is_pure_native_fn = make_nested_lookup({
-    Array: [
-        "isArray",
-    ],
-    Math: [
-        "abs",
-        "acos",
-        "asin",
-        "atan",
-        "ceil",
-        "cos",
-        "exp",
-        "floor",
-        "log",
-        "round",
-        "sin",
-        "sqrt",
-        "tan",
-        "atan2",
-        "pow",
-        "max",
-        "min",
-    ],
-    Number: [
-        "isFinite",
-        "isNaN",
-    ],
-    Object: [
-        "create",
-        "getOwnPropertyDescriptor",
-        "getOwnPropertyNames",
-        "getPrototypeOf",
-        "isExtensible",
-        "isFrozen",
-        "isSealed",
-        "hasOwn",
-        "keys",
-    ],
-    String: [
-        "fromCharCode",
-    ],
-});
-
-// Known numeric values which come with JS environments
-const is_pure_native_value = make_nested_lookup({
-    Math: [
-        "E",
-        "LN10",
-        "LN2",
-        "LOG2E",
-        "LOG10E",
-        "PI",
-        "SQRT1_2",
-        "SQRT2",
-    ],
-    Number: [
-        "MAX_VALUE",
-        "MIN_VALUE",
-        "NaN",
-        "NEGATIVE_INFINITY",
-        "POSITIVE_INFINITY",
-    ],
-});
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-// Functions and methods to infer certain facts about expressions
-// It's not always possible to be 100% sure about something just by static analysis,
-// so `true` means yes, and `false` means maybe
-
-const is_undeclared_ref = (node) =>
-    node instanceof AST_SymbolRef && node.definition().undeclared;
-
-const lazy_op = makePredicate("&& || ??");
-const unary_side_effects = makePredicate("delete ++ --");
-
-// methods to determine whether an expression has a boolean result type
-(function(def_is_boolean) {
-    const unary_bool = makePredicate("! delete");
-    const binary_bool = makePredicate("in instanceof == != === !== < <= >= >");
-    def_is_boolean(AST_Node, return_false);
-    def_is_boolean(AST_UnaryPrefix, function() {
-        return unary_bool.has(this.operator);
-    });
-    def_is_boolean(AST_Binary, function() {
-        return binary_bool.has(this.operator)
-            || lazy_op.has(this.operator)
-                && this.left.is_boolean()
-                && this.right.is_boolean();
-    });
-    def_is_boolean(AST_Conditional, function() {
-        return this.consequent.is_boolean() && this.alternative.is_boolean();
-    });
-    def_is_boolean(AST_Assign, function() {
-        return this.operator == "=" && this.right.is_boolean();
-    });
-    def_is_boolean(AST_Sequence, function() {
-        return this.tail_node().is_boolean();
-    });
-    def_is_boolean(AST_True, return_true);
-    def_is_boolean(AST_False, return_true);
-})(function(node, func) {
-    node.DEFMETHOD("is_boolean", func);
-});
-
-// methods to determine if an expression has a numeric result type
-(function(def_is_number) {
-    def_is_number(AST_Node, return_false);
-    def_is_number(AST_Number, return_true);
-    const unary = makePredicate("+ - ~ ++ --");
-    def_is_number(AST_Unary, function() {
-        return unary.has(this.operator);
-    });
-    const numeric_ops = makePredicate("- * / % & | ^ << >> >>>");
-    def_is_number(AST_Binary, function(compressor) {
-        return numeric_ops.has(this.operator) || this.operator == "+"
-            && this.left.is_number(compressor)
-            && this.right.is_number(compressor);
-    });
-    def_is_number(AST_Assign, function(compressor) {
-        return numeric_ops.has(this.operator.slice(0, -1))
-            || this.operator == "=" && this.right.is_number(compressor);
-    });
-    def_is_number(AST_Sequence, function(compressor) {
-        return this.tail_node().is_number(compressor);
-    });
-    def_is_number(AST_Conditional, function(compressor) {
-        return this.consequent.is_number(compressor) && this.alternative.is_number(compressor);
-    });
-})(function(node, func) {
-    node.DEFMETHOD("is_number", func);
-});
-
-// methods to determine if an expression has a string result type
-(function(def_is_string) {
-    def_is_string(AST_Node, return_false);
-    def_is_string(AST_String, return_true);
-    def_is_string(AST_TemplateString, return_true);
-    def_is_string(AST_UnaryPrefix, function() {
-        return this.operator == "typeof";
-    });
-    def_is_string(AST_Binary, function(compressor) {
-        return this.operator == "+" &&
-            (this.left.is_string(compressor) || this.right.is_string(compressor));
-    });
-    def_is_string(AST_Assign, function(compressor) {
-        return (this.operator == "=" || this.operator == "+=") && this.right.is_string(compressor);
-    });
-    def_is_string(AST_Sequence, function(compressor) {
-        return this.tail_node().is_string(compressor);
-    });
-    def_is_string(AST_Conditional, function(compressor) {
-        return this.consequent.is_string(compressor) && this.alternative.is_string(compressor);
-    });
-})(function(node, func) {
-    node.DEFMETHOD("is_string", func);
-});
-
-function is_undefined(node, compressor) {
-    return (
-        has_flag(node, UNDEFINED)
-        || node instanceof AST_Undefined
-        || node instanceof AST_UnaryPrefix
-            && node.operator == "void"
-            && !node.expression.has_side_effects(compressor)
-    );
-}
-
-// Is the node explicitly null or undefined.
-function is_null_or_undefined(node, compressor) {
-    let fixed;
-    return (
-        node instanceof AST_Null
-        || is_undefined(node, compressor)
-        || (
-            node instanceof AST_SymbolRef
-            && (fixed = node.definition().fixed) instanceof AST_Node
-            && is_nullish(fixed, compressor)
-        )
-    );
-}
-
-// Find out if this expression is optionally chained from a base-point that we
-// can statically analyze as null or undefined.
-function is_nullish_shortcircuited(node, compressor) {
-    if (node instanceof AST_PropAccess || node instanceof AST_Call) {
-        return (
-            (node.optional && is_null_or_undefined(node.expression, compressor))
-            || is_nullish_shortcircuited(node.expression, compressor)
-        );
-    }
-    if (node instanceof AST_Chain) return is_nullish_shortcircuited(node.expression, compressor);
-    return false;
-}
-
-// Find out if something is == null, or can short circuit into nullish.
-// Used to optimize ?. and ??
-function is_nullish(node, compressor) {
-    if (is_null_or_undefined(node, compressor)) return true;
-    return is_nullish_shortcircuited(node, compressor);
-}
-
-// Determine if expression might cause side effects
-// If there's a possibility that a node may change something when it's executed, this returns true
-(function(def_has_side_effects) {
-    def_has_side_effects(AST_Node, return_true);
-
-    def_has_side_effects(AST_EmptyStatement, return_false);
-    def_has_side_effects(AST_Constant, return_false);
-    def_has_side_effects(AST_This, return_false);
-
-    function any(list, compressor) {
-        for (var i = list.length; --i >= 0;)
-            if (list[i].has_side_effects(compressor))
-                return true;
-        return false;
-    }
-
-    def_has_side_effects(AST_Block, function(compressor) {
-        return any(this.body, compressor);
-    });
-    def_has_side_effects(AST_Call, function(compressor) {
-        if (
-            !this.is_callee_pure(compressor)
-            && (!this.expression.is_call_pure(compressor)
-                || this.expression.has_side_effects(compressor))
-        ) {
-            return true;
-        }
-        return any(this.args, compressor);
-    });
-    def_has_side_effects(AST_Switch, function(compressor) {
-        return this.expression.has_side_effects(compressor)
-            || any(this.body, compressor);
-    });
-    def_has_side_effects(AST_Case, function(compressor) {
-        return this.expression.has_side_effects(compressor)
-            || any(this.body, compressor);
-    });
-    def_has_side_effects(AST_Try, function(compressor) {
-        return any(this.body, compressor)
-            || this.bcatch && this.bcatch.has_side_effects(compressor)
-            || this.bfinally && this.bfinally.has_side_effects(compressor);
-    });
-    def_has_side_effects(AST_If, function(compressor) {
-        return this.condition.has_side_effects(compressor)
-            || this.body && this.body.has_side_effects(compressor)
-            || this.alternative && this.alternative.has_side_effects(compressor);
-    });
-    def_has_side_effects(AST_LabeledStatement, function(compressor) {
-        return this.body.has_side_effects(compressor);
-    });
-    def_has_side_effects(AST_SimpleStatement, function(compressor) {
-        return this.body.has_side_effects(compressor);
-    });
-    def_has_side_effects(AST_Lambda, return_false);
-    def_has_side_effects(AST_Class, function (compressor) {
-        if (this.extends && this.extends.has_side_effects(compressor)) {
-            return true;
-        }
-        return any(this.properties, compressor);
-    });
-    def_has_side_effects(AST_ClassStaticBlock, function(compressor) {
-        return any(this.body, compressor);
-    });
-    def_has_side_effects(AST_Binary, function(compressor) {
-        return this.left.has_side_effects(compressor)
-            || this.right.has_side_effects(compressor);
-    });
-    def_has_side_effects(AST_Assign, return_true);
-    def_has_side_effects(AST_Conditional, function(compressor) {
-        return this.condition.has_side_effects(compressor)
-            || this.consequent.has_side_effects(compressor)
-            || this.alternative.has_side_effects(compressor);
-    });
-    def_has_side_effects(AST_Unary, function(compressor) {
-        return unary_side_effects.has(this.operator)
-            || this.expression.has_side_effects(compressor);
-    });
-    def_has_side_effects(AST_SymbolRef, function(compressor) {
-        return !this.is_declared(compressor) && !pure_prop_access_globals.has(this.name);
-    });
-    def_has_side_effects(AST_SymbolClassProperty, return_false);
-    def_has_side_effects(AST_SymbolDeclaration, return_false);
-    def_has_side_effects(AST_Object, function(compressor) {
-        return any(this.properties, compressor);
-    });
-    def_has_side_effects(AST_ObjectProperty, function(compressor) {
-        return (
-            this.computed_key() && this.key.has_side_effects(compressor)
-            || this.value && this.value.has_side_effects(compressor)
-        );
-    });
-    def_has_side_effects(AST_ClassProperty, function(compressor) {
-        return (
-            this.computed_key() && this.key.has_side_effects(compressor)
-            || this.static && this.value && this.value.has_side_effects(compressor)
-        );
-    });
-    def_has_side_effects(AST_ConciseMethod, function(compressor) {
-        return this.computed_key() && this.key.has_side_effects(compressor);
-    });
-    def_has_side_effects(AST_ObjectGetter, function(compressor) {
-        return this.computed_key() && this.key.has_side_effects(compressor);
-    });
-    def_has_side_effects(AST_ObjectSetter, function(compressor) {
-        return this.computed_key() && this.key.has_side_effects(compressor);
-    });
-    def_has_side_effects(AST_Array, function(compressor) {
-        return any(this.elements, compressor);
-    });
-    def_has_side_effects(AST_Dot, function(compressor) {
-        if (is_nullish(this, compressor)) return false;
-        return !this.optional && this.expression.may_throw_on_access(compressor)
-            || this.expression.has_side_effects(compressor);
-    });
-    def_has_side_effects(AST_Sub, function(compressor) {
-        if (is_nullish(this, compressor)) return false;
-
-        return !this.optional && this.expression.may_throw_on_access(compressor)
-            || this.expression.has_side_effects(compressor)
-            || this.property.has_side_effects(compressor);
-    });
-    def_has_side_effects(AST_Chain, function (compressor) {
-        return this.expression.has_side_effects(compressor);
-    });
-    def_has_side_effects(AST_Sequence, function(compressor) {
-        return any(this.expressions, compressor);
-    });
-    def_has_side_effects(AST_Definitions, function(compressor) {
-        return any(this.definitions, compressor);
-    });
-    def_has_side_effects(AST_VarDef, function() {
-        return this.value;
-    });
-    def_has_side_effects(AST_TemplateSegment, return_false);
-    def_has_side_effects(AST_TemplateString, function(compressor) {
-        return any(this.segments, compressor);
-    });
-})(function(node, func) {
-    node.DEFMETHOD("has_side_effects", func);
-});
-
-// determine if expression may throw
-(function(def_may_throw) {
-    def_may_throw(AST_Node, return_true);
-
-    def_may_throw(AST_Constant, return_false);
-    def_may_throw(AST_EmptyStatement, return_false);
-    def_may_throw(AST_Lambda, return_false);
-    def_may_throw(AST_SymbolDeclaration, return_false);
-    def_may_throw(AST_This, return_false);
-
-    function any(list, compressor) {
-        for (var i = list.length; --i >= 0;)
-            if (list[i].may_throw(compressor))
-                return true;
-        return false;
-    }
-
-    def_may_throw(AST_Class, function(compressor) {
-        if (this.extends && this.extends.may_throw(compressor)) return true;
-        return any(this.properties, compressor);
-    });
-    def_may_throw(AST_ClassStaticBlock, function (compressor) {
-        return any(this.body, compressor);
-    });
-
-    def_may_throw(AST_Array, function(compressor) {
-        return any(this.elements, compressor);
-    });
-    def_may_throw(AST_Assign, function(compressor) {
-        if (this.right.may_throw(compressor)) return true;
-        if (!compressor.has_directive("use strict")
-            && this.operator == "="
-            && this.left instanceof AST_SymbolRef) {
-            return false;
-        }
-        return this.left.may_throw(compressor);
-    });
-    def_may_throw(AST_Binary, function(compressor) {
-        return this.left.may_throw(compressor)
-            || this.right.may_throw(compressor);
-    });
-    def_may_throw(AST_Block, function(compressor) {
-        return any(this.body, compressor);
-    });
-    def_may_throw(AST_Call, function(compressor) {
-        if (is_nullish(this, compressor)) return false;
-        if (any(this.args, compressor)) return true;
-        if (this.is_callee_pure(compressor)) return false;
-        if (this.expression.may_throw(compressor)) return true;
-        return !(this.expression instanceof AST_Lambda)
-            || any(this.expression.body, compressor);
-    });
-    def_may_throw(AST_Case, function(compressor) {
-        return this.expression.may_throw(compressor)
-            || any(this.body, compressor);
-    });
-    def_may_throw(AST_Conditional, function(compressor) {
-        return this.condition.may_throw(compressor)
-            || this.consequent.may_throw(compressor)
-            || this.alternative.may_throw(compressor);
-    });
-    def_may_throw(AST_Definitions, function(compressor) {
-        return any(this.definitions, compressor);
-    });
-    def_may_throw(AST_If, function(compressor) {
-        return this.condition.may_throw(compressor)
-            || this.body && this.body.may_throw(compressor)
-            || this.alternative && this.alternative.may_throw(compressor);
-    });
-    def_may_throw(AST_LabeledStatement, function(compressor) {
-        return this.body.may_throw(compressor);
-    });
-    def_may_throw(AST_Object, function(compressor) {
-        return any(this.properties, compressor);
-    });
-    def_may_throw(AST_ObjectProperty, function(compressor) {
-        // TODO key may throw too
-        return this.value ? this.value.may_throw(compressor) : false;
-    });
-    def_may_throw(AST_ClassProperty, function(compressor) {
-        return (
-            this.computed_key() && this.key.may_throw(compressor)
-            || this.static && this.value && this.value.may_throw(compressor)
-        );
-    });
-    def_may_throw(AST_ConciseMethod, function(compressor) {
-        return this.computed_key() && this.key.may_throw(compressor);
-    });
-    def_may_throw(AST_ObjectGetter, function(compressor) {
-        return this.computed_key() && this.key.may_throw(compressor);
-    });
-    def_may_throw(AST_ObjectSetter, function(compressor) {
-        return this.computed_key() && this.key.may_throw(compressor);
-    });
-    def_may_throw(AST_Return, function(compressor) {
-        return this.value && this.value.may_throw(compressor);
-    });
-    def_may_throw(AST_Sequence, function(compressor) {
-        return any(this.expressions, compressor);
-    });
-    def_may_throw(AST_SimpleStatement, function(compressor) {
-        return this.body.may_throw(compressor);
-    });
-    def_may_throw(AST_Dot, function(compressor) {
-        if (is_nullish(this, compressor)) return false;
-        return !this.optional && this.expression.may_throw_on_access(compressor)
-            || this.expression.may_throw(compressor);
-    });
-    def_may_throw(AST_Sub, function(compressor) {
-        if (is_nullish(this, compressor)) return false;
-        return !this.optional && this.expression.may_throw_on_access(compressor)
-            || this.expression.may_throw(compressor)
-            || this.property.may_throw(compressor);
-    });
-    def_may_throw(AST_Chain, function(compressor) {
-        return this.expression.may_throw(compressor);
-    });
-    def_may_throw(AST_Switch, function(compressor) {
-        return this.expression.may_throw(compressor)
-            || any(this.body, compressor);
-    });
-    def_may_throw(AST_SymbolRef, function(compressor) {
-        return !this.is_declared(compressor) && !pure_prop_access_globals.has(this.name);
-    });
-    def_may_throw(AST_SymbolClassProperty, return_false);
-    def_may_throw(AST_Try, function(compressor) {
-        return this.bcatch ? this.bcatch.may_throw(compressor) : any(this.body, compressor)
-            || this.bfinally && this.bfinally.may_throw(compressor);
-    });
-    def_may_throw(AST_Unary, function(compressor) {
-        if (this.operator == "typeof" && this.expression instanceof AST_SymbolRef)
-            return false;
-        return this.expression.may_throw(compressor);
-    });
-    def_may_throw(AST_VarDef, function(compressor) {
-        if (!this.value) return false;
-        return this.value.may_throw(compressor);
-    });
-})(function(node, func) {
-    node.DEFMETHOD("may_throw", func);
-});
-
-// determine if expression is constant
-(function(def_is_constant_expression) {
-    function all_refs_local(scope) {
-        let result = true;
-        walk(this, node => {
-            if (node instanceof AST_SymbolRef) {
-                if (has_flag(this, INLINED)) {
-                    result = false;
-                    return walk_abort;
-                }
-                var def = node.definition();
-                if (
-                    member(def, this.enclosed)
-                    && !this.variables.has(def.name)
-                ) {
-                    if (scope) {
-                        var scope_def = scope.find_variable(node);
-                        if (def.undeclared ? !scope_def : scope_def === def) {
-                            result = "f";
-                            return true;
-                        }
-                    }
-                    result = false;
-                    return walk_abort;
-                }
-                return true;
-            }
-            if (node instanceof AST_This && this instanceof AST_Arrow) {
-                // TODO check arguments too!
-                result = false;
-                return walk_abort;
-            }
-        });
-        return result;
-    }
-
-    def_is_constant_expression(AST_Node, return_false);
-    def_is_constant_expression(AST_Constant, return_true);
-    def_is_constant_expression(AST_Class, function(scope) {
-        if (this.extends && !this.extends.is_constant_expression(scope)) {
-            return false;
-        }
-
-        for (const prop of this.properties) {
-            if (prop.computed_key() && !prop.key.is_constant_expression(scope)) {
-                return false;
-            }
-            if (prop.static && prop.value && !prop.value.is_constant_expression(scope)) {
-                return false;
-            }
-            if (prop instanceof AST_ClassStaticBlock) {
-                return false;
-            }
-        }
-
-        return all_refs_local.call(this, scope);
-    });
-    def_is_constant_expression(AST_Lambda, all_refs_local);
-    def_is_constant_expression(AST_Unary, function() {
-        return this.expression.is_constant_expression();
-    });
-    def_is_constant_expression(AST_Binary, function() {
-        return this.left.is_constant_expression()
-            && this.right.is_constant_expression();
-    });
-    def_is_constant_expression(AST_Array, function() {
-        return this.elements.every((l) => l.is_constant_expression());
-    });
-    def_is_constant_expression(AST_Object, function() {
-        return this.properties.every((l) => l.is_constant_expression());
-    });
-    def_is_constant_expression(AST_ObjectProperty, function() {
-        return !!(!(this.key instanceof AST_Node) && this.value && this.value.is_constant_expression());
-    });
-})(function(node, func) {
-    node.DEFMETHOD("is_constant_expression", func);
-});
-
-
-// may_throw_on_access()
-// returns true if this node may be null, undefined or contain `AST_Accessor`
-(function(def_may_throw_on_access) {
-    AST_Node.DEFMETHOD("may_throw_on_access", function(compressor) {
-        return !compressor.option("pure_getters")
-            || this._dot_throw(compressor);
-    });
-
-    function is_strict(compressor) {
-        return /strict/.test(compressor.option("pure_getters"));
-    }
-
-    def_may_throw_on_access(AST_Node, is_strict);
-    def_may_throw_on_access(AST_Null, return_true);
-    def_may_throw_on_access(AST_Undefined, return_true);
-    def_may_throw_on_access(AST_Constant, return_false);
-    def_may_throw_on_access(AST_Array, return_false);
-    def_may_throw_on_access(AST_Object, function(compressor) {
-        if (!is_strict(compressor)) return false;
-        for (var i = this.properties.length; --i >=0;)
-            if (this.properties[i]._dot_throw(compressor)) return true;
-        return false;
-    });
-    // Do not be as strict with classes as we are with objects.
-    // Hopefully the community is not going to abuse static getters and setters.
-    // https://github.com/terser/terser/issues/724#issuecomment-643655656
-    def_may_throw_on_access(AST_Class, return_false);
-    def_may_throw_on_access(AST_ObjectProperty, return_false);
-    def_may_throw_on_access(AST_ObjectGetter, return_true);
-    def_may_throw_on_access(AST_Expansion, function(compressor) {
-        return this.expression._dot_throw(compressor);
-    });
-    def_may_throw_on_access(AST_Function, return_false);
-    def_may_throw_on_access(AST_Arrow, return_false);
-    def_may_throw_on_access(AST_UnaryPostfix, return_false);
-    def_may_throw_on_access(AST_UnaryPrefix, function() {
-        return this.operator == "void";
-    });
-    def_may_throw_on_access(AST_Binary, function(compressor) {
-        return (this.operator == "&&" || this.operator == "||" || this.operator == "??")
-            && (this.left._dot_throw(compressor) || this.right._dot_throw(compressor));
-    });
-    def_may_throw_on_access(AST_Assign, function(compressor) {
-        if (this.logical) return true;
-
-        return this.operator == "="
-            && this.right._dot_throw(compressor);
-    });
-    def_may_throw_on_access(AST_Conditional, function(compressor) {
-        return this.consequent._dot_throw(compressor)
-            || this.alternative._dot_throw(compressor);
-    });
-    def_may_throw_on_access(AST_Dot, function(compressor) {
-        if (!is_strict(compressor)) return false;
-
-        if (this.property == "prototype") {
-            return !(
-                this.expression instanceof AST_Function
-                || this.expression instanceof AST_Class
-            );
-        }
-        return true;
-    });
-    def_may_throw_on_access(AST_Chain, function(compressor) {
-        return this.expression._dot_throw(compressor);
-    });
-    def_may_throw_on_access(AST_Sequence, function(compressor) {
-        return this.tail_node()._dot_throw(compressor);
-    });
-    def_may_throw_on_access(AST_SymbolRef, function(compressor) {
-        if (this.name === "arguments") return false;
-        if (has_flag(this, UNDEFINED)) return true;
-        if (!is_strict(compressor)) return false;
-        if (is_undeclared_ref(this) && this.is_declared(compressor)) return false;
-        if (this.is_immutable()) return false;
-        var fixed = this.fixed_value();
-        return !fixed || fixed._dot_throw(compressor);
-    });
-})(function(node, func) {
-    node.DEFMETHOD("_dot_throw", func);
-});
-
-function is_lhs(node, parent) {
-    if (parent instanceof AST_Unary && unary_side_effects.has(parent.operator)) return parent.expression;
-    if (parent instanceof AST_Assign && parent.left === node) return node;
-}
-
-(function(def_find_defs) {
-    function to_node(value, orig) {
-        if (value instanceof AST_Node) {
-            if (!(value instanceof AST_Constant)) {
-                // Value may be a function, an array including functions and even a complex assign / block expression,
-                // so it should never be shared in different places.
-                // Otherwise wrong information may be used in the compression phase
-                value = value.clone(true);
-            }
-            return make_node(value.CTOR, orig, value);
-        }
-        if (Array.isArray(value)) return make_node(AST_Array, orig, {
-            elements: value.map(function(value) {
-                return to_node(value, orig);
-            })
-        });
-        if (value && typeof value == "object") {
-            var props = [];
-            for (var key in value) if (HOP(value, key)) {
-                props.push(make_node(AST_ObjectKeyVal, orig, {
-                    key: key,
-                    value: to_node(value[key], orig)
-                }));
-            }
-            return make_node(AST_Object, orig, {
-                properties: props
-            });
-        }
-        return make_node_from_constant(value, orig);
-    }
-
-    AST_Toplevel.DEFMETHOD("resolve_defines", function(compressor) {
-        if (!compressor.option("global_defs")) return this;
-        this.figure_out_scope({ ie8: compressor.option("ie8") });
-        return this.transform(new TreeTransformer(function(node) {
-            var def = node._find_defs(compressor, "");
-            if (!def) return;
-            var level = 0, child = node, parent;
-            while (parent = this.parent(level++)) {
-                if (!(parent instanceof AST_PropAccess)) break;
-                if (parent.expression !== child) break;
-                child = parent;
-            }
-            if (is_lhs(child, parent)) {
-                return;
-            }
-            return def;
-        }));
-    });
-    def_find_defs(AST_Node, noop);
-    def_find_defs(AST_Chain, function(compressor, suffix) {
-        return this.expression._find_defs(compressor, suffix);
-    });
-    def_find_defs(AST_Dot, function(compressor, suffix) {
-        return this.expression._find_defs(compressor, "." + this.property + suffix);
-    });
-    def_find_defs(AST_SymbolDeclaration, function() {
-        if (!this.global()) return;
-    });
-    def_find_defs(AST_SymbolRef, function(compressor, suffix) {
-        if (!this.global()) return;
-        var defines = compressor.option("global_defs");
-        var name = this.name + suffix;
-        if (HOP(defines, name)) return to_node(defines[name], this);
-    });
-})(function(node, func) {
-    node.DEFMETHOD("_find_defs", func);
-});
-
-// method to negate an expression
-(function(def_negate) {
-    function basic_negation(exp) {
-        return make_node(AST_UnaryPrefix, exp, {
-            operator: "!",
-            expression: exp
-        });
-    }
-    function best(orig, alt, first_in_statement) {
-        var negated = basic_negation(orig);
-        if (first_in_statement) {
-            var stat = make_node(AST_SimpleStatement, alt, {
-                body: alt
-            });
-            return best_of_expression(negated, stat) === stat ? alt : negated;
-        }
-        return best_of_expression(negated, alt);
-    }
-    def_negate(AST_Node, function() {
-        return basic_negation(this);
-    });
-    def_negate(AST_Statement, function() {
-        throw new Error("Cannot negate a statement");
-    });
-    def_negate(AST_Function, function() {
-        return basic_negation(this);
-    });
-    def_negate(AST_Arrow, function() {
-        return basic_negation(this);
-    });
-    def_negate(AST_UnaryPrefix, function() {
-        if (this.operator == "!")
-            return this.expression;
-        return basic_negation(this);
-    });
-    def_negate(AST_Sequence, function(compressor) {
-        var expressions = this.expressions.slice();
-        expressions.push(expressions.pop().negate(compressor));
-        return make_sequence(this, expressions);
-    });
-    def_negate(AST_Conditional, function(compressor, first_in_statement) {
-        var self = this.clone();
-        self.consequent = self.consequent.negate(compressor);
-        self.alternative = self.alternative.negate(compressor);
-        return best(this, self, first_in_statement);
-    });
-    def_negate(AST_Binary, function(compressor, first_in_statement) {
-        var self = this.clone(), op = this.operator;
-        if (compressor.option("unsafe_comps")) {
-            switch (op) {
-              case "<=" : self.operator = ">"  ; return self;
-              case "<"  : self.operator = ">=" ; return self;
-              case ">=" : self.operator = "<"  ; return self;
-              case ">"  : self.operator = "<=" ; return self;
-            }
-        }
-        switch (op) {
-          case "==" : self.operator = "!="; return self;
-          case "!=" : self.operator = "=="; return self;
-          case "===": self.operator = "!=="; return self;
-          case "!==": self.operator = "==="; return self;
-          case "&&":
-            self.operator = "||";
-            self.left = self.left.negate(compressor, first_in_statement);
-            self.right = self.right.negate(compressor);
-            return best(this, self, first_in_statement);
-          case "||":
-            self.operator = "&&";
-            self.left = self.left.negate(compressor, first_in_statement);
-            self.right = self.right.negate(compressor);
-            return best(this, self, first_in_statement);
-        }
-        return basic_negation(this);
-    });
-})(function(node, func) {
-    node.DEFMETHOD("negate", function(compressor, first_in_statement) {
-        return func.call(this, compressor, first_in_statement);
-    });
-});
-
-// Is the callee of this function pure?
-var global_pure_fns = makePredicate("Boolean decodeURI decodeURIComponent Date encodeURI encodeURIComponent Error escape EvalError isFinite isNaN Number Object parseFloat parseInt RangeError ReferenceError String SyntaxError TypeError unescape URIError");
-AST_Call.DEFMETHOD("is_callee_pure", function(compressor) {
-    if (compressor.option("unsafe")) {
-        var expr = this.expression;
-        var first_arg = (this.args && this.args[0] && this.args[0].evaluate(compressor));
-        if (
-            expr.expression && expr.expression.name === "hasOwnProperty" &&
-            (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared)
-        ) {
-            return false;
-        }
-        if (is_undeclared_ref(expr) && global_pure_fns.has(expr.name)) return true;
-        if (
-            expr instanceof AST_Dot
-            && is_undeclared_ref(expr.expression)
-            && is_pure_native_fn(expr.expression.name, expr.property)
-        ) {
-            return true;
-        }
-    }
-    return !!has_annotation(this, _PURE) || !compressor.pure_funcs(this);
-});
-
-// If I call this, is it a pure function?
-AST_Node.DEFMETHOD("is_call_pure", return_false);
-AST_Dot.DEFMETHOD("is_call_pure", function(compressor) {
-    if (!compressor.option("unsafe")) return;
-    const expr = this.expression;
-
-    let native_obj;
-    if (expr instanceof AST_Array) {
-        native_obj = "Array";
-    } else if (expr.is_boolean()) {
-        native_obj = "Boolean";
-    } else if (expr.is_number(compressor)) {
-        native_obj = "Number";
-    } else if (expr instanceof AST_RegExp) {
-        native_obj = "RegExp";
-    } else if (expr.is_string(compressor)) {
-        native_obj = "String";
-    } else if (!this.may_throw_on_access(compressor)) {
-        native_obj = "Object";
-    }
-    return native_obj != null && is_pure_native_method(native_obj, this.property);
-});
-
-// tell me if a statement aborts
-const aborts = (thing) => thing && thing.aborts();
-
-(function(def_aborts) {
-    def_aborts(AST_Statement, return_null);
-    def_aborts(AST_Jump, return_this);
-    function block_aborts() {
-        for (var i = 0; i < this.body.length; i++) {
-            if (aborts(this.body[i])) {
-                return this.body[i];
-            }
-        }
-        return null;
-    }
-    def_aborts(AST_Import, return_null);
-    def_aborts(AST_BlockStatement, block_aborts);
-    def_aborts(AST_SwitchBranch, block_aborts);
-    def_aborts(AST_DefClass, function () {
-        for (const prop of this.properties) {
-            if (prop instanceof AST_ClassStaticBlock) {
-                if (prop.aborts()) return prop;
-            }
-        }
-        return null;
-    });
-    def_aborts(AST_ClassStaticBlock, block_aborts);
-    def_aborts(AST_If, function() {
-        return this.alternative && aborts(this.body) && aborts(this.alternative) && this;
-    });
-})(function(node, func) {
-    node.DEFMETHOD("aborts", func);
-});
-
-function is_modified(compressor, tw, node, value, level, immutable) {
-    var parent = tw.parent(level);
-    var lhs = is_lhs(node, parent);
-    if (lhs) return lhs;
-    if (!immutable
-        && parent instanceof AST_Call
-        && parent.expression === node
-        && !(value instanceof AST_Arrow)
-        && !(value instanceof AST_Class)
-        && !parent.is_callee_pure(compressor)
-        && (!(value instanceof AST_Function)
-            || !(parent instanceof AST_New) && value.contains_this())) {
-        return true;
-    }
-    if (parent instanceof AST_Array) {
-        return is_modified(compressor, tw, parent, parent, level + 1);
-    }
-    if (parent instanceof AST_ObjectKeyVal && node === parent.value) {
-        var obj = tw.parent(level + 1);
-        return is_modified(compressor, tw, obj, obj, level + 2);
-    }
-    if (parent instanceof AST_PropAccess && parent.expression === node) {
-        var prop = read_property(value, parent.property);
-        return !immutable && is_modified(compressor, tw, parent, prop, level + 1);
-    }
-}
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-// methods to evaluate a constant expression
-
-function def_eval(node, func) {
-    node.DEFMETHOD("_eval", func);
-}
-
-// Used to propagate a nullish short-circuit signal upwards through the chain.
-const nullish = Symbol("This AST_Chain is nullish");
-
-// If the node has been successfully reduced to a constant,
-// then its value is returned; otherwise the element itself
-// is returned.
-// They can be distinguished as constant value is never a
-// descendant of AST_Node.
-AST_Node.DEFMETHOD("evaluate", function (compressor) {
-    if (!compressor.option("evaluate"))
-        return this;
-    var val = this._eval(compressor, 1);
-    if (!val || val instanceof RegExp)
-        return val;
-    if (typeof val == "function" || typeof val == "object" || val == nullish)
-        return this;
-    return val;
-});
-
-var unaryPrefix = makePredicate("! ~ - + void");
-AST_Node.DEFMETHOD("is_constant", function () {
-    // Accomodate when compress option evaluate=false
-    // as well as the common constant expressions !0 and -1
-    if (this instanceof AST_Constant) {
-        return !(this instanceof AST_RegExp);
-    } else {
-        return this instanceof AST_UnaryPrefix
-            && this.expression instanceof AST_Constant
-            && unaryPrefix.has(this.operator);
-    }
-});
-
-def_eval(AST_Statement, function () {
-    throw new Error(string_template("Cannot evaluate a statement [{file}:{line},{col}]", this.start));
-});
-
-def_eval(AST_Lambda, return_this);
-def_eval(AST_Class, return_this);
-def_eval(AST_Node, return_this);
-def_eval(AST_Constant, function () {
-    return this.getValue();
-});
-
-def_eval(AST_BigInt, return_this);
-
-def_eval(AST_RegExp, function (compressor) {
-    let evaluated = compressor.evaluated_regexps.get(this.value);
-    if (evaluated === undefined && regexp_is_safe(this.value.source)) {
-        try {
-            const { source, flags } = this.value;
-            evaluated = new RegExp(source, flags);
-        } catch (e) {
-            evaluated = null;
-        }
-        compressor.evaluated_regexps.set(this.value, evaluated);
-    }
-    return evaluated || this;
-});
-
-def_eval(AST_TemplateString, function () {
-    if (this.segments.length !== 1) return this;
-    return this.segments[0].value;
-});
-
-def_eval(AST_Function, function (compressor) {
-    if (compressor.option("unsafe")) {
-        var fn = function () { };
-        fn.node = this;
-        fn.toString = () => this.print_to_string();
-        return fn;
-    }
-    return this;
-});
-
-def_eval(AST_Array, function (compressor, depth) {
-    if (compressor.option("unsafe")) {
-        var elements = [];
-        for (var i = 0, len = this.elements.length; i < len; i++) {
-            var element = this.elements[i];
-            var value = element._eval(compressor, depth);
-            if (element === value)
-                return this;
-            elements.push(value);
-        }
-        return elements;
-    }
-    return this;
-});
-
-def_eval(AST_Object, function (compressor, depth) {
-    if (compressor.option("unsafe")) {
-        var val = {};
-        for (var i = 0, len = this.properties.length; i < len; i++) {
-            var prop = this.properties[i];
-            if (prop instanceof AST_Expansion)
-                return this;
-            var key = prop.key;
-            if (key instanceof AST_Symbol) {
-                key = key.name;
-            } else if (key instanceof AST_Node) {
-                key = key._eval(compressor, depth);
-                if (key === prop.key)
-                    return this;
-            }
-            if (typeof Object.prototype[key] === "function") {
-                return this;
-            }
-            if (prop.value instanceof AST_Function)
-                continue;
-            val[key] = prop.value._eval(compressor, depth);
-            if (val[key] === prop.value)
-                return this;
-        }
-        return val;
-    }
-    return this;
-});
-
-var non_converting_unary = makePredicate("! typeof void");
-def_eval(AST_UnaryPrefix, function (compressor, depth) {
-    var e = this.expression;
-    // Function would be evaluated to an array and so typeof would
-    // incorrectly return 'object'. Hence making is a special case.
-    if (compressor.option("typeofs")
-        && this.operator == "typeof"
-        && (e instanceof AST_Lambda
-            || e instanceof AST_SymbolRef
-            && e.fixed_value() instanceof AST_Lambda)) {
-        return typeof function () { };
-    }
-    if (!non_converting_unary.has(this.operator))
-        depth++;
-    e = e._eval(compressor, depth);
-    if (e === this.expression)
-        return this;
-    switch (this.operator) {
-        case "!": return !e;
-        case "typeof":
-            // typeof <RegExp> returns "object" or "function" on different platforms
-            // so cannot evaluate reliably
-            if (e instanceof RegExp)
-                return this;
-            return typeof e;
-        case "void": return void e;
-        case "~": return ~e;
-        case "-": return -e;
-        case "+": return +e;
-    }
-    return this;
-});
-
-var non_converting_binary = makePredicate("&& || ?? === !==");
-const identity_comparison = makePredicate("== != === !==");
-const has_identity = value => typeof value === "object"
-    || typeof value === "function"
-    || typeof value === "symbol";
-
-def_eval(AST_Binary, function (compressor, depth) {
-    if (!non_converting_binary.has(this.operator))
-        depth++;
-
-    var left = this.left._eval(compressor, depth);
-    if (left === this.left)
-        return this;
-    var right = this.right._eval(compressor, depth);
-    if (right === this.right)
-        return this;
-    var result;
-
-    if (left != null
-        && right != null
-        && identity_comparison.has(this.operator)
-        && has_identity(left)
-        && has_identity(right)
-        && typeof left === typeof right) {
-        // Do not compare by reference
-        return this;
-    }
-
-    switch (this.operator) {
-        case "&&": result = left && right; break;
-        case "||": result = left || right; break;
-        case "??": result = left != null ? left : right; break;
-        case "|": result = left | right; break;
-        case "&": result = left & right; break;
-        case "^": result = left ^ right; break;
-        case "+": result = left + right; break;
-        case "*": result = left * right; break;
-        case "**": result = Math.pow(left, right); break;
-        case "/": result = left / right; break;
-        case "%": result = left % right; break;
-        case "-": result = left - right; break;
-        case "<<": result = left << right; break;
-        case ">>": result = left >> right; break;
-        case ">>>": result = left >>> right; break;
-        case "==": result = left == right; break;
-        case "===": result = left === right; break;
-        case "!=": result = left != right; break;
-        case "!==": result = left !== right; break;
-        case "<": result = left < right; break;
-        case "<=": result = left <= right; break;
-        case ">": result = left > right; break;
-        case ">=": result = left >= right; break;
-        default:
-            return this;
-    }
-    if (isNaN(result) && compressor.find_parent(AST_With)) {
-        // leave original expression as is
-        return this;
-    }
-    return result;
-});
-
-def_eval(AST_Conditional, function (compressor, depth) {
-    var condition = this.condition._eval(compressor, depth);
-    if (condition === this.condition)
-        return this;
-    var node = condition ? this.consequent : this.alternative;
-    var value = node._eval(compressor, depth);
-    return value === node ? this : value;
-});
-
-// Set of AST_SymbolRef which are currently being evaluated.
-// Avoids infinite recursion of ._eval()
-const reentrant_ref_eval = new Set();
-def_eval(AST_SymbolRef, function (compressor, depth) {
-    if (reentrant_ref_eval.has(this))
-        return this;
-
-    var fixed = this.fixed_value();
-    if (!fixed)
-        return this;
-
-    reentrant_ref_eval.add(this);
-    const value = fixed._eval(compressor, depth);
-    reentrant_ref_eval.delete(this);
-
-    if (value === fixed)
-        return this;
-
-    if (value && typeof value == "object") {
-        var escaped = this.definition().escaped;
-        if (escaped && depth > escaped)
-            return this;
-    }
-    return value;
-});
-
-const global_objs = { Array, Math, Number, Object, String };
-
-const regexp_flags = new Set([
-    "dotAll",
-    "global",
-    "ignoreCase",
-    "multiline",
-    "sticky",
-    "unicode",
-]);
-
-def_eval(AST_PropAccess, function (compressor, depth) {
-    let obj = this.expression._eval(compressor, depth + 1);
-    if (obj === nullish || (this.optional && obj == null)) return nullish;
-    if (compressor.option("unsafe")) {
-        var key = this.property;
-        if (key instanceof AST_Node) {
-            key = key._eval(compressor, depth);
-            if (key === this.property)
-                return this;
-        }
-        var exp = this.expression;
-        if (is_undeclared_ref(exp)) {
-
-            var aa;
-            var first_arg = exp.name === "hasOwnProperty"
-                && key === "call"
-                && (aa = compressor.parent() && compressor.parent().args)
-                && (aa && aa[0]
-                    && aa[0].evaluate(compressor));
-
-            first_arg = first_arg instanceof AST_Dot ? first_arg.expression : first_arg;
-
-            if (first_arg == null || first_arg.thedef && first_arg.thedef.undeclared) {
-                return this.clone();
-            }
-            if (!is_pure_native_value(exp.name, key))
-                return this;
-            obj = global_objs[exp.name];
-        } else {
-            if (obj instanceof RegExp) {
-                if (key == "source") {
-                    return regexp_source_fix(obj.source);
-                } else if (key == "flags" || regexp_flags.has(key)) {
-                    return obj[key];
-                }
-            }
-            if (!obj || obj === exp || !HOP(obj, key))
-                return this;
-
-            if (typeof obj == "function")
-                switch (key) {
-                    case "name":
-                        return obj.node.name ? obj.node.name.name : "";
-                    case "length":
-                        return obj.node.length_property();
-                    default:
-                        return this;
-                }
-        }
-        return obj[key];
-    }
-    return this;
-});
-
-def_eval(AST_Chain, function (compressor, depth) {
-    const evaluated = this.expression._eval(compressor, depth);
-    return evaluated === nullish
-        ? undefined
-        : evaluated === this.expression
-          ? this
-          : evaluated;
-});
-
-def_eval(AST_Call, function (compressor, depth) {
-    var exp = this.expression;
-
-    const callee = exp._eval(compressor, depth);
-    if (callee === nullish || (this.optional && callee == null)) return nullish;
-
-    if (compressor.option("unsafe") && exp instanceof AST_PropAccess) {
-        var key = exp.property;
-        if (key instanceof AST_Node) {
-            key = key._eval(compressor, depth);
-            if (key === exp.property)
-                return this;
-        }
-        var val;
-        var e = exp.expression;
-        if (is_undeclared_ref(e)) {
-            var first_arg = e.name === "hasOwnProperty" &&
-                key === "call" &&
-                (this.args[0] && this.args[0].evaluate(compressor));
-
-            first_arg = first_arg instanceof AST_Dot ? first_arg.expression : first_arg;
-
-            if ((first_arg == null || first_arg.thedef && first_arg.thedef.undeclared)) {
-                return this.clone();
-            }
-            if (!is_pure_native_fn(e.name, key)) return this;
-            val = global_objs[e.name];
-        } else {
-            val = e._eval(compressor, depth + 1);
-            if (val === e || !val)
-                return this;
-            if (!is_pure_native_method(val.constructor.name, key))
-                return this;
-        }
-        var args = [];
-        for (var i = 0, len = this.args.length; i < len; i++) {
-            var arg = this.args[i];
-            var value = arg._eval(compressor, depth);
-            if (arg === value)
-                return this;
-            if (arg instanceof AST_Lambda)
-                return this;
-            args.push(value);
-        }
-        try {
-            return val[key].apply(val, args);
-        } catch (ex) {
-            // We don't really care
-        }
-    }
-    return this;
-});
-
-// Also a subclass of AST_Call
-def_eval(AST_New, return_this);
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-// AST_Node#drop_side_effect_free() gets called when we don't care about the value,
-// only about side effects. We'll be defining this method for each node type in this module
-//
-// Examples:
-// foo++ -> foo++
-// 1 + func() -> func()
-// 10 -> (nothing)
-// knownPureFunc(foo++) -> foo++
-
-function def_drop_side_effect_free(node, func) {
-    node.DEFMETHOD("drop_side_effect_free", func);
-}
-
-// Drop side-effect-free elements from an array of expressions.
-// Returns an array of expressions with side-effects or null
-// if all elements were dropped. Note: original array may be
-// returned if nothing changed.
-function trim(nodes, compressor, first_in_statement) {
-    var len = nodes.length;
-    if (!len)  return null;
-
-    var ret = [], changed = false;
-    for (var i = 0; i < len; i++) {
-        var node = nodes[i].drop_side_effect_free(compressor, first_in_statement);
-        changed |= node !== nodes[i];
-        if (node) {
-            ret.push(node);
-            first_in_statement = false;
-        }
-    }
-    return changed ? ret.length ? ret : null : nodes;
-}
-
-def_drop_side_effect_free(AST_Node, return_this);
-def_drop_side_effect_free(AST_Constant, return_null);
-def_drop_side_effect_free(AST_This, return_null);
-
-def_drop_side_effect_free(AST_Call, function (compressor, first_in_statement) {
-    if (is_nullish_shortcircuited(this, compressor)) {
-        return this.expression.drop_side_effect_free(compressor, first_in_statement);
-    }
-
-    if (!this.is_callee_pure(compressor)) {
-        if (this.expression.is_call_pure(compressor)) {
-            var exprs = this.args.slice();
-            exprs.unshift(this.expression.expression);
-            exprs = trim(exprs, compressor, first_in_statement);
-            return exprs && make_sequence(this, exprs);
-        }
-        if (is_func_expr(this.expression)
-            && (!this.expression.name || !this.expression.name.definition().references.length)) {
-            var node = this.clone();
-            node.expression.process_expression(false, compressor);
-            return node;
-        }
-        return this;
-    }
-
-    var args = trim(this.args, compressor, first_in_statement);
-    return args && make_sequence(this, args);
-});
-
-def_drop_side_effect_free(AST_Accessor, return_null);
-
-def_drop_side_effect_free(AST_Function, return_null);
-
-def_drop_side_effect_free(AST_Arrow, return_null);
-
-def_drop_side_effect_free(AST_Class, function (compressor) {
-    const with_effects = [];
-    const trimmed_extends = this.extends && this.extends.drop_side_effect_free(compressor);
-    if (trimmed_extends)
-        with_effects.push(trimmed_extends);
-    for (const prop of this.properties) {
-        if (prop instanceof AST_ClassStaticBlock) {
-            if (prop.body.some(stat => stat.has_side_effects(compressor))) {
-                return this;
-            } else {
-                continue;
-            }
-        }
-
-        const trimmed_prop = prop.drop_side_effect_free(compressor);
-        if (trimmed_prop)
-            with_effects.push(trimmed_prop);
-    }
-    if (!with_effects.length)
-        return null;
-    return make_sequence(this, with_effects);
-});
-
-def_drop_side_effect_free(AST_Binary, function (compressor, first_in_statement) {
-    var right = this.right.drop_side_effect_free(compressor);
-    if (!right)
-        return this.left.drop_side_effect_free(compressor, first_in_statement);
-    if (lazy_op.has(this.operator)) {
-        if (right === this.right)
-            return this;
-        var node = this.clone();
-        node.right = right;
-        return node;
-    } else {
-        var left = this.left.drop_side_effect_free(compressor, first_in_statement);
-        if (!left)
-            return this.right.drop_side_effect_free(compressor, first_in_statement);
-        return make_sequence(this, [left, right]);
-    }
-});
-
-def_drop_side_effect_free(AST_Assign, function (compressor) {
-    if (this.logical)
-        return this;
-
-    var left = this.left;
-    if (left.has_side_effects(compressor)
-        || compressor.has_directive("use strict")
-        && left instanceof AST_PropAccess
-        && left.expression.is_constant()) {
-        return this;
-    }
-    set_flag(this, WRITE_ONLY);
-    while (left instanceof AST_PropAccess) {
-        left = left.expression;
-    }
-    if (left.is_constant_expression(compressor.find_parent(AST_Scope))) {
-        return this.right.drop_side_effect_free(compressor);
-    }
-    return this;
-});
-
-def_drop_side_effect_free(AST_Conditional, function (compressor) {
-    var consequent = this.consequent.drop_side_effect_free(compressor);
-    var alternative = this.alternative.drop_side_effect_free(compressor);
-    if (consequent === this.consequent && alternative === this.alternative)
-        return this;
-    if (!consequent)
-        return alternative ? make_node(AST_Binary, this, {
-            operator: "||",
-            left: this.condition,
-            right: alternative
-        }) : this.condition.drop_side_effect_free(compressor);
-    if (!alternative)
-        return make_node(AST_Binary, this, {
-            operator: "&&",
-            left: this.condition,
-            right: consequent
-        });
-    var node = this.clone();
-    node.consequent = consequent;
-    node.alternative = alternative;
-    return node;
-});
-
-def_drop_side_effect_free(AST_Unary, function (compressor, first_in_statement) {
-    if (unary_side_effects.has(this.operator)) {
-        if (!this.expression.has_side_effects(compressor)) {
-            set_flag(this, WRITE_ONLY);
-        } else {
-            clear_flag(this, WRITE_ONLY);
-        }
-        return this;
-    }
-    if (this.operator == "typeof" && this.expression instanceof AST_SymbolRef)
-        return null;
-    var expression = this.expression.drop_side_effect_free(compressor, first_in_statement);
-    if (first_in_statement && expression && is_iife_call(expression)) {
-        if (expression === this.expression && this.operator == "!")
-            return this;
-        return expression.negate(compressor, first_in_statement);
-    }
-    return expression;
-});
-
-def_drop_side_effect_free(AST_SymbolRef, function (compressor) {
-    const safe_access = this.is_declared(compressor)
-        || pure_prop_access_globals.has(this.name);
-    return safe_access ? null : this;
-});
-
-def_drop_side_effect_free(AST_Object, function (compressor, first_in_statement) {
-    var values = trim(this.properties, compressor, first_in_statement);
-    return values && make_sequence(this, values);
-});
-
-def_drop_side_effect_free(AST_ObjectProperty, function (compressor, first_in_statement) {
-    const computed_key = this instanceof AST_ObjectKeyVal && this.key instanceof AST_Node;
-    const key = computed_key && this.key.drop_side_effect_free(compressor, first_in_statement);
-    const value = this.value && this.value.drop_side_effect_free(compressor, first_in_statement);
-    if (key && value) {
-        return make_sequence(this, [key, value]);
-    }
-    return key || value;
-});
-
-def_drop_side_effect_free(AST_ClassProperty, function (compressor) {
-    const key = this.computed_key() && this.key.drop_side_effect_free(compressor);
-
-    const value = this.static && this.value
-        && this.value.drop_side_effect_free(compressor);
-
-    if (key && value)
-        return make_sequence(this, [key, value]);
-    return key || value || null;
-});
-
-def_drop_side_effect_free(AST_ConciseMethod, function () {
-    return this.computed_key() ? this.key : null;
-});
-
-def_drop_side_effect_free(AST_ObjectGetter, function () {
-    return this.computed_key() ? this.key : null;
-});
-
-def_drop_side_effect_free(AST_ObjectSetter, function () {
-    return this.computed_key() ? this.key : null;
-});
-
-def_drop_side_effect_free(AST_Array, function (compressor, first_in_statement) {
-    var values = trim(this.elements, compressor, first_in_statement);
-    return values && make_sequence(this, values);
-});
-
-def_drop_side_effect_free(AST_Dot, function (compressor, first_in_statement) {
-    if (is_nullish_shortcircuited(this, compressor)) {
-        return this.expression.drop_side_effect_free(compressor, first_in_statement);
-    }
-    if (this.expression.may_throw_on_access(compressor)) return this;
-
-    return this.expression.drop_side_effect_free(compressor, first_in_statement);
-});
-
-def_drop_side_effect_free(AST_Sub, function (compressor, first_in_statement) {
-    if (is_nullish_shortcircuited(this, compressor)) {
-        return this.expression.drop_side_effect_free(compressor, first_in_statement);
-    }
-    if (this.expression.may_throw_on_access(compressor)) return this;
-
-    var expression = this.expression.drop_side_effect_free(compressor, first_in_statement);
-    if (!expression)
-        return this.property.drop_side_effect_free(compressor, first_in_statement);
-    var property = this.property.drop_side_effect_free(compressor);
-    if (!property)
-        return expression;
-    return make_sequence(this, [expression, property]);
-});
-
-def_drop_side_effect_free(AST_Chain, function (compressor, first_in_statement) {
-    return this.expression.drop_side_effect_free(compressor, first_in_statement);
-});
-
-def_drop_side_effect_free(AST_Sequence, function (compressor) {
-    var last = this.tail_node();
-    var expr = last.drop_side_effect_free(compressor);
-    if (expr === last)
-        return this;
-    var expressions = this.expressions.slice(0, -1);
-    if (expr)
-        expressions.push(expr);
-    if (!expressions.length) {
-        return make_node(AST_Number, this, { value: 0 });
-    }
-    return make_sequence(this, expressions);
-});
-
-def_drop_side_effect_free(AST_Expansion, function (compressor, first_in_statement) {
-    return this.expression.drop_side_effect_free(compressor, first_in_statement);
-});
-
-def_drop_side_effect_free(AST_TemplateSegment, return_null);
-
-def_drop_side_effect_free(AST_TemplateString, function (compressor) {
-    var values = trim(this.segments, compressor, first_in_statement);
-    return values && make_sequence(this, values);
-});
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-// Define the method AST_Node#reduce_vars, which goes through the AST in
-// execution order to perform basic flow analysis
-
-function def_reduce_vars(node, func) {
-    node.DEFMETHOD("reduce_vars", func);
-}
-
-def_reduce_vars(AST_Node, noop);
-
-function reset_def(compressor, def) {
-    def.assignments = 0;
-    def.chained = false;
-    def.direct_access = false;
-    def.escaped = 0;
-    def.recursive_refs = 0;
-    def.references = [];
-    def.single_use = undefined;
-    if (def.scope.pinned()) {
-        def.fixed = false;
-    } else if (def.orig[0] instanceof AST_SymbolConst || !compressor.exposed(def)) {
-        def.fixed = def.init;
-    } else {
-        def.fixed = false;
-    }
-}
-
-function reset_variables(tw, compressor, node) {
-    node.variables.forEach(function(def) {
-        reset_def(compressor, def);
-        if (def.fixed === null) {
-            tw.defs_to_safe_ids.set(def.id, tw.safe_ids);
-            mark(tw, def, true);
-        } else if (def.fixed) {
-            tw.loop_ids.set(def.id, tw.in_loop);
-            mark(tw, def, true);
-        }
-    });
-}
-
-function reset_block_variables(compressor, node) {
-    if (node.block_scope) node.block_scope.variables.forEach((def) => {
-        reset_def(compressor, def);
-    });
-}
-
-function push(tw) {
-    tw.safe_ids = Object.create(tw.safe_ids);
-}
-
-function pop(tw) {
-    tw.safe_ids = Object.getPrototypeOf(tw.safe_ids);
-}
-
-function mark(tw, def, safe) {
-    tw.safe_ids[def.id] = safe;
-}
-
-function safe_to_read(tw, def) {
-    if (def.single_use == "m") return false;
-    if (tw.safe_ids[def.id]) {
-        if (def.fixed == null) {
-            var orig = def.orig[0];
-            if (orig instanceof AST_SymbolFunarg || orig.name == "arguments") return false;
-            def.fixed = make_node(AST_Undefined, orig);
-        }
-        return true;
-    }
-    return def.fixed instanceof AST_Defun;
-}
-
-function safe_to_assign(tw, def, scope, value) {
-    if (def.fixed === undefined) return true;
-    let def_safe_ids;
-    if (def.fixed === null
-        && (def_safe_ids = tw.defs_to_safe_ids.get(def.id))
-    ) {
-        def_safe_ids[def.id] = false;
-        tw.defs_to_safe_ids.delete(def.id);
-        return true;
-    }
-    if (!HOP(tw.safe_ids, def.id)) return false;
-    if (!safe_to_read(tw, def)) return false;
-    if (def.fixed === false) return false;
-    if (def.fixed != null && (!value || def.references.length > def.assignments)) return false;
-    if (def.fixed instanceof AST_Defun) {
-        return value instanceof AST_Node && def.fixed.parent_scope === scope;
-    }
-    return def.orig.every((sym) => {
-        return !(sym instanceof AST_SymbolConst
-            || sym instanceof AST_SymbolDefun
-            || sym instanceof AST_SymbolLambda);
-    });
-}
-
-function ref_once(tw, compressor, def) {
-    return compressor.option("unused")
-        && !def.scope.pinned()
-        && def.references.length - def.recursive_refs == 1
-        && tw.loop_ids.get(def.id) === tw.in_loop;
-}
-
-function is_immutable(value) {
-    if (!value) return false;
-    return value.is_constant()
-        || value instanceof AST_Lambda
-        || value instanceof AST_This;
-}
-
-// A definition "escapes" when its value can leave the point of use.
-// Example: `a = b || c`
-// In this example, "b" and "c" are escaping, because they're going into "a"
-//
-// def.escaped is != 0 when it escapes.
-//
-// When greater than 1, it means that N chained properties will be read off
-// of that def before an escape occurs. This is useful for evaluating
-// property accesses, where you need to know when to stop.
-function mark_escaped(tw, d, scope, node, value, level = 0, depth = 1) {
-    var parent = tw.parent(level);
-    if (value) {
-        if (value.is_constant()) return;
-        if (value instanceof AST_ClassExpression) return;
-    }
-
-    if (
-        parent instanceof AST_Assign && (parent.operator === "=" || parent.logical) && node === parent.right
-        || parent instanceof AST_Call && (node !== parent.expression || parent instanceof AST_New)
-        || parent instanceof AST_Exit && node === parent.value && node.scope !== d.scope
-        || parent instanceof AST_VarDef && node === parent.value
-        || parent instanceof AST_Yield && node === parent.value && node.scope !== d.scope
-    ) {
-        if (depth > 1 && !(value && value.is_constant_expression(scope))) depth = 1;
-        if (!d.escaped || d.escaped > depth) d.escaped = depth;
-        return;
-    } else if (
-        parent instanceof AST_Array
-        || parent instanceof AST_Await
-        || parent instanceof AST_Binary && lazy_op.has(parent.operator)
-        || parent instanceof AST_Conditional && node !== parent.condition
-        || parent instanceof AST_Expansion
-        || parent instanceof AST_Sequence && node === parent.tail_node()
-    ) {
-        mark_escaped(tw, d, scope, parent, parent, level + 1, depth);
-    } else if (parent instanceof AST_ObjectKeyVal && node === parent.value) {
-        var obj = tw.parent(level + 1);
-
-        mark_escaped(tw, d, scope, obj, obj, level + 2, depth);
-    } else if (parent instanceof AST_PropAccess && node === parent.expression) {
-        value = read_property(value, parent.property);
-
-        mark_escaped(tw, d, scope, parent, value, level + 1, depth + 1);
-        if (value) return;
-    }
-
-    if (level > 0) return;
-    if (parent instanceof AST_Sequence && node !== parent.tail_node()) return;
-    if (parent instanceof AST_SimpleStatement) return;
-
-    d.direct_access = true;
-}
-
-const suppress = node => walk(node, node => {
-    if (!(node instanceof AST_Symbol)) return;
-    var d = node.definition();
-    if (!d) return;
-    if (node instanceof AST_SymbolRef) d.references.push(node);
-    d.fixed = false;
-});
-
-def_reduce_vars(AST_Accessor, function(tw, descend, compressor) {
-    push(tw);
-    reset_variables(tw, compressor, this);
-    descend();
-    pop(tw);
-    return true;
-});
-
-def_reduce_vars(AST_Assign, function(tw, descend, compressor) {
-    var node = this;
-    if (node.left instanceof AST_Destructuring) {
-        suppress(node.left);
-        return;
-    }
-
-    const finish_walk = () => {
-        if (node.logical) {
-            node.left.walk(tw);
-
-            push(tw);
-            node.right.walk(tw);
-            pop(tw);
-
-            return true;
-        }
-    };
-
-    var sym = node.left;
-    if (!(sym instanceof AST_SymbolRef)) return finish_walk();
-
-    var def = sym.definition();
-    var safe = safe_to_assign(tw, def, sym.scope, node.right);
-    def.assignments++;
-    if (!safe) return finish_walk();
-
-    var fixed = def.fixed;
-    if (!fixed && node.operator != "=" && !node.logical) return finish_walk();
-
-    var eq = node.operator == "=";
-    var value = eq ? node.right : node;
-    if (is_modified(compressor, tw, node, value, 0)) return finish_walk();
-
-    def.references.push(sym);
-
-    if (!node.logical) {
-        if (!eq) def.chained = true;
-
-        def.fixed = eq ? function() {
-            return node.right;
-        } : function() {
-            return make_node(AST_Binary, node, {
-                operator: node.operator.slice(0, -1),
-                left: fixed instanceof AST_Node ? fixed : fixed(),
-                right: node.right
-            });
-        };
-    }
-
-    if (node.logical) {
-        mark(tw, def, false);
-        push(tw);
-        node.right.walk(tw);
-        pop(tw);
-        return true;
-    }
-
-    mark(tw, def, false);
-    node.right.walk(tw);
-    mark(tw, def, true);
-
-    mark_escaped(tw, def, sym.scope, node, value, 0, 1);
-
-    return true;
-});
-
-def_reduce_vars(AST_Binary, function(tw) {
-    if (!lazy_op.has(this.operator)) return;
-    this.left.walk(tw);
-    push(tw);
-    this.right.walk(tw);
-    pop(tw);
-    return true;
-});
-
-def_reduce_vars(AST_Block, function(tw, descend, compressor) {
-    reset_block_variables(compressor, this);
-});
-
-def_reduce_vars(AST_Case, function(tw) {
-    push(tw);
-    this.expression.walk(tw);
-    pop(tw);
-    push(tw);
-    walk_body(this, tw);
-    pop(tw);
-    return true;
-});
-
-def_reduce_vars(AST_Class, function(tw, descend) {
-    clear_flag(this, INLINED);
-    push(tw);
-    descend();
-    pop(tw);
-    return true;
-});
-
-def_reduce_vars(AST_ClassStaticBlock, function(tw, descend, compressor) {
-    reset_block_variables(compressor, this);
-});
-
-def_reduce_vars(AST_Conditional, function(tw) {
-    this.condition.walk(tw);
-    push(tw);
-    this.consequent.walk(tw);
-    pop(tw);
-    push(tw);
-    this.alternative.walk(tw);
-    pop(tw);
-    return true;
-});
-
-def_reduce_vars(AST_Chain, function(tw, descend) {
-    // Chains' conditions apply left-to-right, cumulatively.
-    // If we walk normally we don't go in that order because we would pop before pushing again
-    // Solution: AST_PropAccess and AST_Call push when they are optional, and never pop.
-    // Then we pop everything when they are done being walked.
-    const safe_ids = tw.safe_ids;
-
-    descend();
-
-    // Unroll back to start
-    tw.safe_ids = safe_ids;
-    return true;
-});
-
-def_reduce_vars(AST_Call, function (tw) {
-    this.expression.walk(tw);
-
-    if (this.optional) {
-        // Never pop -- it's popped at AST_Chain above
-        push(tw);
-    }
-
-    for (const arg of this.args) arg.walk(tw);
-
-    return true;
-});
-
-def_reduce_vars(AST_PropAccess, function (tw) {
-    if (!this.optional) return;
-
-    this.expression.walk(tw);
-
-    // Never pop -- it's popped at AST_Chain above
-    push(tw);
-
-    if (this.property instanceof AST_Node) this.property.walk(tw);
-
-    return true;
-});
-
-def_reduce_vars(AST_Default, function(tw, descend) {
-    push(tw);
-    descend();
-    pop(tw);
-    return true;
-});
-
-function mark_lambda(tw, descend, compressor) {
-    clear_flag(this, INLINED);
-    push(tw);
-    reset_variables(tw, compressor, this);
-    if (this.uses_arguments) {
-        descend();
-        pop(tw);
-        return;
-    }
-    var iife;
-    if (!this.name
-        && (iife = tw.parent()) instanceof AST_Call
-        && iife.expression === this
-        && !iife.args.some(arg => arg instanceof AST_Expansion)
-        && this.argnames.every(arg_name => arg_name instanceof AST_Symbol)
-    ) {
-        // Virtually turn IIFE parameters into variable definitions:
-        //   (function(a,b) {...})(c,d) => (function() {var a=c,b=d; ...})()
-        // So existing transformation rules can work on them.
-        this.argnames.forEach((arg, i) => {
-            if (!arg.definition) return;
-            var d = arg.definition();
-            // Avoid setting fixed when there's more than one origin for a variable value
-            if (d.orig.length > 1) return;
-            if (d.fixed === undefined && (!this.uses_arguments || tw.has_directive("use strict"))) {
-                d.fixed = function() {
-                    return iife.args[i] || make_node(AST_Undefined, iife);
-                };
-                tw.loop_ids.set(d.id, tw.in_loop);
-                mark(tw, d, true);
-            } else {
-                d.fixed = false;
-            }
-        });
-    }
-    descend();
-    pop(tw);
-    return true;
-}
-
-def_reduce_vars(AST_Lambda, mark_lambda);
-
-def_reduce_vars(AST_Do, function(tw, descend, compressor) {
-    reset_block_variables(compressor, this);
-    const saved_loop = tw.in_loop;
-    tw.in_loop = this;
-    push(tw);
-    this.body.walk(tw);
-    if (has_break_or_continue(this)) {
-        pop(tw);
-        push(tw);
-    }
-    this.condition.walk(tw);
-    pop(tw);
-    tw.in_loop = saved_loop;
-    return true;
-});
-
-def_reduce_vars(AST_For, function(tw, descend, compressor) {
-    reset_block_variables(compressor, this);
-    if (this.init) this.init.walk(tw);
-    const saved_loop = tw.in_loop;
-    tw.in_loop = this;
-    push(tw);
-    if (this.condition) this.condition.walk(tw);
-    this.body.walk(tw);
-    if (this.step) {
-        if (has_break_or_continue(this)) {
-            pop(tw);
-            push(tw);
-        }
-        this.step.walk(tw);
-    }
-    pop(tw);
-    tw.in_loop = saved_loop;
-    return true;
-});
-
-def_reduce_vars(AST_ForIn, function(tw, descend, compressor) {
-    reset_block_variables(compressor, this);
-    suppress(this.init);
-    this.object.walk(tw);
-    const saved_loop = tw.in_loop;
-    tw.in_loop = this;
-    push(tw);
-    this.body.walk(tw);
-    pop(tw);
-    tw.in_loop = saved_loop;
-    return true;
-});
-
-def_reduce_vars(AST_If, function(tw) {
-    this.condition.walk(tw);
-    push(tw);
-    this.body.walk(tw);
-    pop(tw);
-    if (this.alternative) {
-        push(tw);
-        this.alternative.walk(tw);
-        pop(tw);
-    }
-    return true;
-});
-
-def_reduce_vars(AST_LabeledStatement, function(tw) {
-    push(tw);
-    this.body.walk(tw);
-    pop(tw);
-    return true;
-});
-
-def_reduce_vars(AST_SymbolCatch, function() {
-    this.definition().fixed = false;
-});
-
-def_reduce_vars(AST_SymbolRef, function(tw, descend, compressor) {
-    var d = this.definition();
-    d.references.push(this);
-    if (d.references.length == 1
-        && !d.fixed
-        && d.orig[0] instanceof AST_SymbolDefun) {
-        tw.loop_ids.set(d.id, tw.in_loop);
-    }
-    var fixed_value;
-    if (d.fixed === undefined || !safe_to_read(tw, d)) {
-        d.fixed = false;
-    } else if (d.fixed) {
-        fixed_value = this.fixed_value();
-        if (
-            fixed_value instanceof AST_Lambda
-            && is_recursive_ref(tw, d)
-        ) {
-            d.recursive_refs++;
-        } else if (fixed_value
-            && !compressor.exposed(d)
-            && ref_once(tw, compressor, d)
-        ) {
-            d.single_use =
-                fixed_value instanceof AST_Lambda && !fixed_value.pinned()
-                || fixed_value instanceof AST_Class
-                || d.scope === this.scope && fixed_value.is_constant_expression();
-        } else {
-            d.single_use = false;
-        }
-        if (is_modified(compressor, tw, this, fixed_value, 0, is_immutable(fixed_value))) {
-            if (d.single_use) {
-                d.single_use = "m";
-            } else {
-                d.fixed = false;
-            }
-        }
-    }
-    mark_escaped(tw, d, this.scope, this, fixed_value, 0, 1);
-});
-
-def_reduce_vars(AST_Toplevel, function(tw, descend, compressor) {
-    this.globals.forEach(function(def) {
-        reset_def(compressor, def);
-    });
-    reset_variables(tw, compressor, this);
-});
-
-def_reduce_vars(AST_Try, function(tw, descend, compressor) {
-    reset_block_variables(compressor, this);
-    push(tw);
-    walk_body(this, tw);
-    pop(tw);
-    if (this.bcatch) {
-        push(tw);
-        this.bcatch.walk(tw);
-        pop(tw);
-    }
-    if (this.bfinally) this.bfinally.walk(tw);
-    return true;
-});
-
-def_reduce_vars(AST_Unary, function(tw) {
-    var node = this;
-    if (node.operator !== "++" && node.operator !== "--") return;
-    var exp = node.expression;
-    if (!(exp instanceof AST_SymbolRef)) return;
-    var def = exp.definition();
-    var safe = safe_to_assign(tw, def, exp.scope, true);
-    def.assignments++;
-    if (!safe) return;
-    var fixed = def.fixed;
-    if (!fixed) return;
-    def.references.push(exp);
-    def.chained = true;
-    def.fixed = function() {
-        return make_node(AST_Binary, node, {
-            operator: node.operator.slice(0, -1),
-            left: make_node(AST_UnaryPrefix, node, {
-                operator: "+",
-                expression: fixed instanceof AST_Node ? fixed : fixed()
-            }),
-            right: make_node(AST_Number, node, {
-                value: 1
-            })
-        });
-    };
-    mark(tw, def, true);
-    return true;
-});
-
-def_reduce_vars(AST_VarDef, function(tw, descend) {
-    var node = this;
-    if (node.name instanceof AST_Destructuring) {
-        suppress(node.name);
-        return;
-    }
-    var d = node.name.definition();
-    if (node.value) {
-        if (safe_to_assign(tw, d, node.name.scope, node.value)) {
-            d.fixed = function() {
-                return node.value;
-            };
-            tw.loop_ids.set(d.id, tw.in_loop);
-            mark(tw, d, false);
-            descend();
-            mark(tw, d, true);
-            return true;
-        } else {
-            d.fixed = false;
-        }
-    }
-});
-
-def_reduce_vars(AST_While, function(tw, descend, compressor) {
-    reset_block_variables(compressor, this);
-    const saved_loop = tw.in_loop;
-    tw.in_loop = this;
-    push(tw);
-    descend();
-    pop(tw);
-    tw.in_loop = saved_loop;
-    return true;
-});
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-function loop_body(x) {
-    if (x instanceof AST_IterationStatement) {
-        return x.body instanceof AST_BlockStatement ? x.body : x;
-    }
-    return x;
-}
-
-function is_lhs_read_only(lhs) {
-    if (lhs instanceof AST_This) return true;
-    if (lhs instanceof AST_SymbolRef) return lhs.definition().orig[0] instanceof AST_SymbolLambda;
-    if (lhs instanceof AST_PropAccess) {
-        lhs = lhs.expression;
-        if (lhs instanceof AST_SymbolRef) {
-            if (lhs.is_immutable()) return false;
-            lhs = lhs.fixed_value();
-        }
-        if (!lhs) return true;
-        if (lhs instanceof AST_RegExp) return false;
-        if (lhs instanceof AST_Constant) return true;
-        return is_lhs_read_only(lhs);
-    }
-    return false;
-}
-
-// Remove code which we know is unreachable.
-function trim_unreachable_code(compressor, stat, target) {
-    walk(stat, node => {
-        if (node instanceof AST_Var) {
-            node.remove_initializers();
-            target.push(node);
-            return true;
-        }
-        if (
-            node instanceof AST_Defun
-            && (node === stat || !compressor.has_directive("use strict"))
-        ) {
-            target.push(node === stat ? node : make_node(AST_Var, node, {
-                definitions: [
-                    make_node(AST_VarDef, node, {
-                        name: make_node(AST_SymbolVar, node.name, node.name),
-                        value: null
-                    })
-                ]
-            }));
-            return true;
-        }
-        if (node instanceof AST_Export || node instanceof AST_Import) {
-            target.push(node);
-            return true;
-        }
-        if (node instanceof AST_Scope) {
-            return true;
-        }
-    });
-}
-
-/** Tighten a bunch of statements together, and perform statement-level optimization. */
-function tighten_body(statements, compressor) {
-    var in_loop, in_try;
-    var scope = compressor.find_parent(AST_Scope).get_defun_scope();
-    find_loop_scope_try();
-    var CHANGED, max_iter = 10;
-    do {
-        CHANGED = false;
-        eliminate_spurious_blocks(statements);
-        if (compressor.option("dead_code")) {
-            eliminate_dead_code(statements, compressor);
-        }
-        if (compressor.option("if_return")) {
-            handle_if_return(statements, compressor);
-        }
-        if (compressor.sequences_limit > 0) {
-            sequencesize(statements, compressor);
-            sequencesize_2(statements, compressor);
-        }
-        if (compressor.option("join_vars")) {
-            join_consecutive_vars(statements);
-        }
-        if (compressor.option("collapse_vars")) {
-            collapse(statements, compressor);
-        }
-    } while (CHANGED && max_iter-- > 0);
-
-    function find_loop_scope_try() {
-        var node = compressor.self(), level = 0;
-        do {
-            if (node instanceof AST_Catch || node instanceof AST_Finally) {
-                level++;
-            } else if (node instanceof AST_IterationStatement) {
-                in_loop = true;
-            } else if (node instanceof AST_Scope) {
-                scope = node;
-                break;
-            } else if (node instanceof AST_Try) {
-                in_try = true;
-            }
-        } while (node = compressor.parent(level++));
-    }
-
-    // Search from right to left for assignment-like expressions:
-    // - `var a = x;`
-    // - `a = x;`
-    // - `++a`
-    // For each candidate, scan from left to right for first usage, then try
-    // to fold assignment into the site for compression.
-    // Will not attempt to collapse assignments into or past code blocks
-    // which are not sequentially executed, e.g. loops and conditionals.
-    function collapse(statements, compressor) {
-        if (scope.pinned())
-            return statements;
-        var args;
-        var candidates = [];
-        var stat_index = statements.length;
-        var scanner = new TreeTransformer(function (node) {
-            if (abort)
-                return node;
-            // Skip nodes before `candidate` as quickly as possible
-            if (!hit) {
-                if (node !== hit_stack[hit_index])
-                    return node;
-                hit_index++;
-                if (hit_index < hit_stack.length)
-                    return handle_custom_scan_order(node);
-                hit = true;
-                stop_after = find_stop(node, 0);
-                if (stop_after === node)
-                    abort = true;
-                return node;
-            }
-            // Stop immediately if these node types are encountered
-            var parent = scanner.parent();
-            if (node instanceof AST_Assign
-                    && (node.logical || node.operator != "=" && lhs.equivalent_to(node.left))
-                || node instanceof AST_Await
-                || node instanceof AST_Call && lhs instanceof AST_PropAccess && lhs.equivalent_to(node.expression)
-                || node instanceof AST_Debugger
-                || node instanceof AST_Destructuring
-                || node instanceof AST_Expansion
-                    && node.expression instanceof AST_Symbol
-                    && (
-                        node.expression instanceof AST_This
-                        || node.expression.definition().references.length > 1
-                    )
-                || node instanceof AST_IterationStatement && !(node instanceof AST_For)
-                || node instanceof AST_LoopControl
-                || node instanceof AST_Try
-                || node instanceof AST_With
-                || node instanceof AST_Yield
-                || node instanceof AST_Export
-                || node instanceof AST_Class
-                || parent instanceof AST_For && node !== parent.init
-                || !replace_all
-                    && (
-                        node instanceof AST_SymbolRef
-                        && !node.is_declared(compressor)
-                        && !pure_prop_access_globals.has(node)
-                    )
-                || node instanceof AST_SymbolRef
-                    && parent instanceof AST_Call
-                    && has_annotation(parent, _NOINLINE)
-            ) {
-                abort = true;
-                return node;
-            }
-            // Stop only if candidate is found within conditional branches
-            if (!stop_if_hit && (!lhs_local || !replace_all)
-                && (parent instanceof AST_Binary && lazy_op.has(parent.operator) && parent.left !== node
-                    || parent instanceof AST_Conditional && parent.condition !== node
-                    || parent instanceof AST_If && parent.condition !== node)) {
-                stop_if_hit = parent;
-            }
-            // Replace variable with assignment when found
-            if (can_replace
-                && !(node instanceof AST_SymbolDeclaration)
-                && lhs.equivalent_to(node)
-                && !shadows(node.scope, lvalues)
-            ) {
-                if (stop_if_hit) {
-                    abort = true;
-                    return node;
-                }
-                if (is_lhs(node, parent)) {
-                    if (value_def)
-                        replaced++;
-                    return node;
-                } else {
-                    replaced++;
-                    if (value_def && candidate instanceof AST_VarDef)
-                        return node;
-                }
-                CHANGED = abort = true;
-                if (candidate instanceof AST_UnaryPostfix) {
-                    return make_node(AST_UnaryPrefix, candidate, candidate);
-                }
-                if (candidate instanceof AST_VarDef) {
-                    var def = candidate.name.definition();
-                    var value = candidate.value;
-                    if (def.references.length - def.replaced == 1 && !compressor.exposed(def)) {
-                        def.replaced++;
-                        if (funarg && is_identifier_atom(value)) {
-                            return value.transform(compressor);
-                        } else {
-                            return maintain_this_binding(parent, node, value);
-                        }
-                    }
-                    return make_node(AST_Assign, candidate, {
-                        operator: "=",
-                        logical: false,
-                        left: make_node(AST_SymbolRef, candidate.name, candidate.name),
-                        right: value
-                    });
-                }
-                clear_flag(candidate, WRITE_ONLY);
-                return candidate;
-            }
-            // These node types have child nodes that execute sequentially,
-            // but are otherwise not safe to scan into or beyond them.
-            var sym;
-            if (node instanceof AST_Call
-                || node instanceof AST_Exit
-                && (side_effects || lhs instanceof AST_PropAccess || may_modify(lhs))
-                || node instanceof AST_PropAccess
-                && (side_effects || node.expression.may_throw_on_access(compressor))
-                || node instanceof AST_SymbolRef
-                && ((lvalues.has(node.name) && lvalues.get(node.name).modified) || side_effects && may_modify(node))
-                || node instanceof AST_VarDef && node.value
-                && (lvalues.has(node.name.name) || side_effects && may_modify(node.name))
-                || (sym = is_lhs(node.left, node))
-                && (sym instanceof AST_PropAccess || lvalues.has(sym.name))
-                || may_throw
-                && (in_try ? node.has_side_effects(compressor) : side_effects_external(node))) {
-                stop_after = node;
-                if (node instanceof AST_Scope)
-                    abort = true;
-            }
-            return handle_custom_scan_order(node);
-        }, function (node) {
-            if (abort)
-                return;
-            if (stop_after === node)
-                abort = true;
-            if (stop_if_hit === node)
-                stop_if_hit = null;
-        });
-
-        var multi_replacer = new TreeTransformer(function (node) {
-            if (abort)
-                return node;
-            // Skip nodes before `candidate` as quickly as possible
-            if (!hit) {
-                if (node !== hit_stack[hit_index])
-                    return node;
-                hit_index++;
-                if (hit_index < hit_stack.length)
-                    return;
-                hit = true;
-                return node;
-            }
-            // Replace variable when found
-            if (node instanceof AST_SymbolRef
-                && node.name == def.name) {
-                if (!--replaced)
-                    abort = true;
-                if (is_lhs(node, multi_replacer.parent()))
-                    return node;
-                def.replaced++;
-                value_def.replaced--;
-                return candidate.value;
-            }
-            // Skip (non-executed) functions and (leading) default case in switch statements
-            if (node instanceof AST_Default || node instanceof AST_Scope)
-                return node;
-        });
-
-        while (--stat_index >= 0) {
-            // Treat parameters as collapsible in IIFE, i.e.
-            //   function(a, b){ ... }(x());
-            // would be translated into equivalent assignments:
-            //   var a = x(), b = undefined;
-            if (stat_index == 0 && compressor.option("unused"))
-                extract_args();
-            // Find collapsible assignments
-            var hit_stack = [];
-            extract_candidates(statements[stat_index]);
-            while (candidates.length > 0) {
-                hit_stack = candidates.pop();
-                var hit_index = 0;
-                var candidate = hit_stack[hit_stack.length - 1];
-                var value_def = null;
-                var stop_after = null;
-                var stop_if_hit = null;
-                var lhs = get_lhs(candidate);
-                if (!lhs || is_lhs_read_only(lhs) || lhs.has_side_effects(compressor))
-                    continue;
-                // Locate symbols which may execute code outside of scanning range
-                var lvalues = get_lvalues(candidate);
-                var lhs_local = is_lhs_local(lhs);
-                if (lhs instanceof AST_SymbolRef) {
-                    lvalues.set(lhs.name, { def: lhs.definition(), modified: false });
-                }
-                var side_effects = value_has_side_effects(candidate);
-                var replace_all = replace_all_symbols();
-                var may_throw = candidate.may_throw(compressor);
-                var funarg = candidate.name instanceof AST_SymbolFunarg;
-                var hit = funarg;
-                var abort = false, replaced = 0, can_replace = !args || !hit;
-                if (!can_replace) {
-                    for (var j = compressor.self().argnames.lastIndexOf(candidate.name) + 1; !abort && j < args.length; j++) {
-                        args[j].transform(scanner);
-                    }
-                    can_replace = true;
-                }
-                for (var i = stat_index; !abort && i < statements.length; i++) {
-                    statements[i].transform(scanner);
-                }
-                if (value_def) {
-                    var def = candidate.name.definition();
-                    if (abort && def.references.length - def.replaced > replaced)
-                        replaced = false;
-                    else {
-                        abort = false;
-                        hit_index = 0;
-                        hit = funarg;
-                        for (var i = stat_index; !abort && i < statements.length; i++) {
-                            statements[i].transform(multi_replacer);
-                        }
-                        value_def.single_use = false;
-                    }
-                }
-                if (replaced && !remove_candidate(candidate))
-                    statements.splice(stat_index, 1);
-            }
-        }
-
-        function handle_custom_scan_order(node) {
-            // Skip (non-executed) functions
-            if (node instanceof AST_Scope)
-                return node;
-
-            // Scan case expressions first in a switch statement
-            if (node instanceof AST_Switch) {
-                node.expression = node.expression.transform(scanner);
-                for (var i = 0, len = node.body.length; !abort && i < len; i++) {
-                    var branch = node.body[i];
-                    if (branch instanceof AST_Case) {
-                        if (!hit) {
-                            if (branch !== hit_stack[hit_index])
-                                continue;
-                            hit_index++;
-                        }
-                        branch.expression = branch.expression.transform(scanner);
-                        if (!replace_all)
-                            break;
-                    }
-                }
-                abort = true;
-                return node;
-            }
-        }
-
-        function redefined_within_scope(def, scope) {
-            if (def.global)
-                return false;
-            let cur_scope = def.scope;
-            while (cur_scope && cur_scope !== scope) {
-                if (cur_scope.variables.has(def.name)) {
-                    return true;
-                }
-                cur_scope = cur_scope.parent_scope;
-            }
-            return false;
-        }
-
-        function has_overlapping_symbol(fn, arg, fn_strict) {
-            var found = false, scan_this = !(fn instanceof AST_Arrow);
-            arg.walk(new TreeWalker(function (node, descend) {
-                if (found)
-                    return true;
-                if (node instanceof AST_SymbolRef && (fn.variables.has(node.name) || redefined_within_scope(node.definition(), fn))) {
-                    var s = node.definition().scope;
-                    if (s !== scope)
-                        while (s = s.parent_scope) {
-                            if (s === scope)
-                                return true;
-                        }
-                    return found = true;
-                }
-                if ((fn_strict || scan_this) && node instanceof AST_This) {
-                    return found = true;
-                }
-                if (node instanceof AST_Scope && !(node instanceof AST_Arrow)) {
-                    var prev = scan_this;
-                    scan_this = false;
-                    descend();
-                    scan_this = prev;
-                    return true;
-                }
-            }));
-            return found;
-        }
-
-        function extract_args() {
-            var iife, fn = compressor.self();
-            if (is_func_expr(fn)
-                && !fn.name
-                && !fn.uses_arguments
-                && !fn.pinned()
-                && (iife = compressor.parent()) instanceof AST_Call
-                && iife.expression === fn
-                && iife.args.every((arg) => !(arg instanceof AST_Expansion))) {
-                var fn_strict = compressor.has_directive("use strict");
-                if (fn_strict && !member(fn_strict, fn.body))
-                    fn_strict = false;
-                var len = fn.argnames.length;
-                args = iife.args.slice(len);
-                var names = new Set();
-                for (var i = len; --i >= 0;) {
-                    var sym = fn.argnames[i];
-                    var arg = iife.args[i];
-                    // The following two line fix is a duplicate of the fix at
-                    // https://github.com/terser/terser/commit/011d3eb08cefe6922c7d1bdfa113fc4aeaca1b75
-                    // This might mean that these two pieces of code (one here in collapse_vars and another in reduce_vars
-                    // Might be doing the exact same thing.
-                    const def = sym.definition && sym.definition();
-                    const is_reassigned = def && def.orig.length > 1;
-                    if (is_reassigned)
-                        continue;
-                    args.unshift(make_node(AST_VarDef, sym, {
-                        name: sym,
-                        value: arg
-                    }));
-                    if (names.has(sym.name))
-                        continue;
-                    names.add(sym.name);
-                    if (sym instanceof AST_Expansion) {
-                        var elements = iife.args.slice(i);
-                        if (elements.every((arg) => !has_overlapping_symbol(fn, arg, fn_strict)
-                        )) {
-                            candidates.unshift([make_node(AST_VarDef, sym, {
-                                name: sym.expression,
-                                value: make_node(AST_Array, iife, {
-                                    elements: elements
-                                })
-                            })]);
-                        }
-                    } else {
-                        if (!arg) {
-                            arg = make_node(AST_Undefined, sym).transform(compressor);
-                        } else if (arg instanceof AST_Lambda && arg.pinned()
-                            || has_overlapping_symbol(fn, arg, fn_strict)) {
-                            arg = null;
-                        }
-                        if (arg)
-                            candidates.unshift([make_node(AST_VarDef, sym, {
-                                name: sym,
-                                value: arg
-                            })]);
-                    }
-                }
-            }
-        }
-
-        function extract_candidates(expr) {
-            hit_stack.push(expr);
-            if (expr instanceof AST_Assign) {
-                if (!expr.left.has_side_effects(compressor)
-                    && !(expr.right instanceof AST_Chain)) {
-                    candidates.push(hit_stack.slice());
-                }
-                extract_candidates(expr.right);
-            } else if (expr instanceof AST_Binary) {
-                extract_candidates(expr.left);
-                extract_candidates(expr.right);
-            } else if (expr instanceof AST_Call && !has_annotation(expr, _NOINLINE)) {
-                extract_candidates(expr.expression);
-                expr.args.forEach(extract_candidates);
-            } else if (expr instanceof AST_Case) {
-                extract_candidates(expr.expression);
-            } else if (expr instanceof AST_Conditional) {
-                extract_candidates(expr.condition);
-                extract_candidates(expr.consequent);
-                extract_candidates(expr.alternative);
-            } else if (expr instanceof AST_Definitions) {
-                var len = expr.definitions.length;
-                // limit number of trailing variable definitions for consideration
-                var i = len - 200;
-                if (i < 0)
-                    i = 0;
-                for (; i < len; i++) {
-                    extract_candidates(expr.definitions[i]);
-                }
-            } else if (expr instanceof AST_DWLoop) {
-                extract_candidates(expr.condition);
-                if (!(expr.body instanceof AST_Block)) {
-                    extract_candidates(expr.body);
-                }
-            } else if (expr instanceof AST_Exit) {
-                if (expr.value)
-                    extract_candidates(expr.value);
-            } else if (expr instanceof AST_For) {
-                if (expr.init)
-                    extract_candidates(expr.init);
-                if (expr.condition)
-                    extract_candidates(expr.condition);
-                if (expr.step)
-                    extract_candidates(expr.step);
-                if (!(expr.body instanceof AST_Block)) {
-                    extract_candidates(expr.body);
-                }
-            } else if (expr instanceof AST_ForIn) {
-                extract_candidates(expr.object);
-                if (!(expr.body instanceof AST_Block)) {
-                    extract_candidates(expr.body);
-                }
-            } else if (expr instanceof AST_If) {
-                extract_candidates(expr.condition);
-                if (!(expr.body instanceof AST_Block)) {
-                    extract_candidates(expr.body);
-                }
-                if (expr.alternative && !(expr.alternative instanceof AST_Block)) {
-                    extract_candidates(expr.alternative);
-                }
-            } else if (expr instanceof AST_Sequence) {
-                expr.expressions.forEach(extract_candidates);
-            } else if (expr instanceof AST_SimpleStatement) {
-                extract_candidates(expr.body);
-            } else if (expr instanceof AST_Switch) {
-                extract_candidates(expr.expression);
-                expr.body.forEach(extract_candidates);
-            } else if (expr instanceof AST_Unary) {
-                if (expr.operator == "++" || expr.operator == "--") {
-                    candidates.push(hit_stack.slice());
-                }
-            } else if (expr instanceof AST_VarDef) {
-                if (expr.value && !(expr.value instanceof AST_Chain)) {
-                    candidates.push(hit_stack.slice());
-                    extract_candidates(expr.value);
-                }
-            }
-            hit_stack.pop();
-        }
-
-        function find_stop(node, level, write_only) {
-            var parent = scanner.parent(level);
-            if (parent instanceof AST_Assign) {
-                if (write_only
-                    && !parent.logical
-                    && !(parent.left instanceof AST_PropAccess
-                        || lvalues.has(parent.left.name))) {
-                    return find_stop(parent, level + 1, write_only);
-                }
-                return node;
-            }
-            if (parent instanceof AST_Binary) {
-                if (write_only && (!lazy_op.has(parent.operator) || parent.left === node)) {
-                    return find_stop(parent, level + 1, write_only);
-                }
-                return node;
-            }
-            if (parent instanceof AST_Call)
-                return node;
-            if (parent instanceof AST_Case)
-                return node;
-            if (parent instanceof AST_Conditional) {
-                if (write_only && parent.condition === node) {
-                    return find_stop(parent, level + 1, write_only);
-                }
-                return node;
-            }
-            if (parent instanceof AST_Definitions) {
-                return find_stop(parent, level + 1, true);
-            }
-            if (parent instanceof AST_Exit) {
-                return write_only ? find_stop(parent, level + 1, write_only) : node;
-            }
-            if (parent instanceof AST_If) {
-                if (write_only && parent.condition === node) {
-                    return find_stop(parent, level + 1, write_only);
-                }
-                return node;
-            }
-            if (parent instanceof AST_IterationStatement)
-                return node;
-            if (parent instanceof AST_Sequence) {
-                return find_stop(parent, level + 1, parent.tail_node() !== node);
-            }
-            if (parent instanceof AST_SimpleStatement) {
-                return find_stop(parent, level + 1, true);
-            }
-            if (parent instanceof AST_Switch)
-                return node;
-            if (parent instanceof AST_VarDef)
-                return node;
-            return null;
-        }
-
-        function mangleable_var(var_def) {
-            var value = var_def.value;
-            if (!(value instanceof AST_SymbolRef))
-                return;
-            if (value.name == "arguments")
-                return;
-            var def = value.definition();
-            if (def.undeclared)
-                return;
-            return value_def = def;
-        }
-
-        function get_lhs(expr) {
-            if (expr instanceof AST_Assign && expr.logical) {
-                return false;
-            } else if (expr instanceof AST_VarDef && expr.name instanceof AST_SymbolDeclaration) {
-                var def = expr.name.definition();
-                if (!member(expr.name, def.orig))
-                    return;
-                var referenced = def.references.length - def.replaced;
-                if (!referenced)
-                    return;
-                var declared = def.orig.length - def.eliminated;
-                if (declared > 1 && !(expr.name instanceof AST_SymbolFunarg)
-                    || (referenced > 1 ? mangleable_var(expr) : !compressor.exposed(def))) {
-                    return make_node(AST_SymbolRef, expr.name, expr.name);
-                }
-            } else {
-                const lhs = expr instanceof AST_Assign
-                    ? expr.left
-                    : expr.expression;
-                return !is_ref_of(lhs, AST_SymbolConst)
-                    && !is_ref_of(lhs, AST_SymbolLet) && lhs;
-            }
-        }
-
-        function get_rvalue(expr) {
-            if (expr instanceof AST_Assign) {
-                return expr.right;
-            } else {
-                return expr.value;
-            }
-        }
-
-        function get_lvalues(expr) {
-            var lvalues = new Map();
-            if (expr instanceof AST_Unary)
-                return lvalues;
-            var tw = new TreeWalker(function (node) {
-                var sym = node;
-                while (sym instanceof AST_PropAccess)
-                    sym = sym.expression;
-                if (sym instanceof AST_SymbolRef) {
-                    const prev = lvalues.get(sym.name);
-                    if (!prev || !prev.modified) {
-                        lvalues.set(sym.name, {
-                            def: sym.definition(),
-                            modified: is_modified(compressor, tw, node, node, 0)
-                        });
-                    }
-                }
-            });
-            get_rvalue(expr).walk(tw);
-            return lvalues;
-        }
-
-        function remove_candidate(expr) {
-            if (expr.name instanceof AST_SymbolFunarg) {
-                var iife = compressor.parent(), argnames = compressor.self().argnames;
-                var index = argnames.indexOf(expr.name);
-                if (index < 0) {
-                    iife.args.length = Math.min(iife.args.length, argnames.length - 1);
-                } else {
-                    var args = iife.args;
-                    if (args[index])
-                        args[index] = make_node(AST_Number, args[index], {
-                            value: 0
-                        });
-                }
-                return true;
-            }
-            var found = false;
-            return statements[stat_index].transform(new TreeTransformer(function (node, descend, in_list) {
-                if (found)
-                    return node;
-                if (node === expr || node.body === expr) {
-                    found = true;
-                    if (node instanceof AST_VarDef) {
-                        node.value = node.name instanceof AST_SymbolConst
-                            ? make_node(AST_Undefined, node.value) // `const` always needs value.
-                            : null;
-                        return node;
-                    }
-                    return in_list ? MAP.skip : null;
-                }
-            }, function (node) {
-                if (node instanceof AST_Sequence)
-                    switch (node.expressions.length) {
-                        case 0: return null;
-                        case 1: return node.expressions[0];
-                    }
-            }));
-        }
-
-        function is_lhs_local(lhs) {
-            while (lhs instanceof AST_PropAccess)
-                lhs = lhs.expression;
-            return lhs instanceof AST_SymbolRef
-                && lhs.definition().scope === scope
-                && !(in_loop
-                    && (lvalues.has(lhs.name)
-                        || candidate instanceof AST_Unary
-                        || (candidate instanceof AST_Assign
-                            && !candidate.logical
-                            && candidate.operator != "=")));
-        }
-
-        function value_has_side_effects(expr) {
-            if (expr instanceof AST_Unary)
-                return unary_side_effects.has(expr.operator);
-            return get_rvalue(expr).has_side_effects(compressor);
-        }
-
-        function replace_all_symbols() {
-            if (side_effects)
-                return false;
-            if (value_def)
-                return true;
-            if (lhs instanceof AST_SymbolRef) {
-                var def = lhs.definition();
-                if (def.references.length - def.replaced == (candidate instanceof AST_VarDef ? 1 : 2)) {
-                    return true;
-                }
-            }
-            return false;
-        }
-
-        function may_modify(sym) {
-            if (!sym.definition)
-                return true; // AST_Destructuring
-            var def = sym.definition();
-            if (def.orig.length == 1 && def.orig[0] instanceof AST_SymbolDefun)
-                return false;
-            if (def.scope.get_defun_scope() !== scope)
-                return true;
-            return !def.references.every((ref) => {
-                var s = ref.scope.get_defun_scope();
-                // "block" scope within AST_Catch
-                if (s.TYPE == "Scope")
-                    s = s.parent_scope;
-                return s === scope;
-            });
-        }
-
-        function side_effects_external(node, lhs) {
-            if (node instanceof AST_Assign)
-                return side_effects_external(node.left, true);
-            if (node instanceof AST_Unary)
-                return side_effects_external(node.expression, true);
-            if (node instanceof AST_VarDef)
-                return node.value && side_effects_external(node.value);
-            if (lhs) {
-                if (node instanceof AST_Dot)
-                    return side_effects_external(node.expression, true);
-                if (node instanceof AST_Sub)
-                    return side_effects_external(node.expression, true);
-                if (node instanceof AST_SymbolRef)
-                    return node.definition().scope !== scope;
-            }
-            return false;
-        }
-
-        function shadows(newScope, lvalues) {
-            for (const {def} of lvalues.values()) {
-                let current = newScope;
-                while (current && current !== def.scope) {
-                    let nested_def = current.variables.get(def.name);
-                    if (nested_def && nested_def !== def) return true;
-                    current = current.parent_scope;
-                }
-            }
-            return false;
-        }
-    }
-
-    function eliminate_spurious_blocks(statements) {
-        var seen_dirs = [];
-        for (var i = 0; i < statements.length;) {
-            var stat = statements[i];
-            if (stat instanceof AST_BlockStatement && stat.body.every(can_be_evicted_from_block)) {
-                CHANGED = true;
-                eliminate_spurious_blocks(stat.body);
-                statements.splice(i, 1, ...stat.body);
-                i += stat.body.length;
-            } else if (stat instanceof AST_EmptyStatement) {
-                CHANGED = true;
-                statements.splice(i, 1);
-            } else if (stat instanceof AST_Directive) {
-                if (seen_dirs.indexOf(stat.value) < 0) {
-                    i++;
-                    seen_dirs.push(stat.value);
-                } else {
-                    CHANGED = true;
-                    statements.splice(i, 1);
-                }
-            } else
-                i++;
-        }
-    }
-
-    function handle_if_return(statements, compressor) {
-        var self = compressor.self();
-        var multiple_if_returns = has_multiple_if_returns(statements);
-        var in_lambda = self instanceof AST_Lambda;
-        for (var i = statements.length; --i >= 0;) {
-            var stat = statements[i];
-            var j = next_index(i);
-            var next = statements[j];
-
-            if (in_lambda && !next && stat instanceof AST_Return) {
-                if (!stat.value) {
-                    CHANGED = true;
-                    statements.splice(i, 1);
-                    continue;
-                }
-                if (stat.value instanceof AST_UnaryPrefix && stat.value.operator == "void") {
-                    CHANGED = true;
-                    statements[i] = make_node(AST_SimpleStatement, stat, {
-                        body: stat.value.expression
-                    });
-                    continue;
-                }
-            }
-
-            if (stat instanceof AST_If) {
-                var ab = aborts(stat.body);
-                if (can_merge_flow(ab)) {
-                    if (ab.label) {
-                        remove(ab.label.thedef.references, ab);
-                    }
-                    CHANGED = true;
-                    stat = stat.clone();
-                    stat.condition = stat.condition.negate(compressor);
-                    var body = as_statement_array_with_return(stat.body, ab);
-                    stat.body = make_node(AST_BlockStatement, stat, {
-                        body: as_statement_array(stat.alternative).concat(extract_functions())
-                    });
-                    stat.alternative = make_node(AST_BlockStatement, stat, {
-                        body: body
-                    });
-                    statements[i] = stat.transform(compressor);
-                    continue;
-                }
-
-                var ab = aborts(stat.alternative);
-                if (can_merge_flow(ab)) {
-                    if (ab.label) {
-                        remove(ab.label.thedef.references, ab);
-                    }
-                    CHANGED = true;
-                    stat = stat.clone();
-                    stat.body = make_node(AST_BlockStatement, stat.body, {
-                        body: as_statement_array(stat.body).concat(extract_functions())
-                    });
-                    var body = as_statement_array_with_return(stat.alternative, ab);
-                    stat.alternative = make_node(AST_BlockStatement, stat.alternative, {
-                        body: body
-                    });
-                    statements[i] = stat.transform(compressor);
-                    continue;
-                }
-            }
-
-            if (stat instanceof AST_If && stat.body instanceof AST_Return) {
-                var value = stat.body.value;
-                //---
-                // pretty silly case, but:
-                // if (foo()) return; return; ==> foo(); return;
-                if (!value && !stat.alternative
-                    && (in_lambda && !next || next instanceof AST_Return && !next.value)) {
-                    CHANGED = true;
-                    statements[i] = make_node(AST_SimpleStatement, stat.condition, {
-                        body: stat.condition
-                    });
-                    continue;
-                }
-                //---
-                // if (foo()) return x; return y; ==> return foo() ? x : y;
-                if (value && !stat.alternative && next instanceof AST_Return && next.value) {
-                    CHANGED = true;
-                    stat = stat.clone();
-                    stat.alternative = next;
-                    statements[i] = stat.transform(compressor);
-                    statements.splice(j, 1);
-                    continue;
-                }
-                //---
-                // if (foo()) return x; [ return ; ] ==> return foo() ? x : undefined;
-                if (value && !stat.alternative
-                    && (!next && in_lambda && multiple_if_returns
-                        || next instanceof AST_Return)) {
-                    CHANGED = true;
-                    stat = stat.clone();
-                    stat.alternative = next || make_node(AST_Return, stat, {
-                        value: null
-                    });
-                    statements[i] = stat.transform(compressor);
-                    if (next)
-                        statements.splice(j, 1);
-                    continue;
-                }
-                //---
-                // if (a) return b; if (c) return d; e; ==> return a ? b : c ? d : void e;
-                //
-                // if sequences is not enabled, this can lead to an endless loop (issue #866).
-                // however, with sequences on this helps producing slightly better output for
-                // the example code.
-                var prev = statements[prev_index(i)];
-                if (compressor.option("sequences") && in_lambda && !stat.alternative
-                    && prev instanceof AST_If && prev.body instanceof AST_Return
-                    && next_index(j) == statements.length && next instanceof AST_SimpleStatement) {
-                    CHANGED = true;
-                    stat = stat.clone();
-                    stat.alternative = make_node(AST_BlockStatement, next, {
-                        body: [
-                            next,
-                            make_node(AST_Return, next, {
-                                value: null
-                            })
-                        ]
-                    });
-                    statements[i] = stat.transform(compressor);
-                    statements.splice(j, 1);
-                    continue;
-                }
-            }
-        }
-
-        function has_multiple_if_returns(statements) {
-            var n = 0;
-            for (var i = statements.length; --i >= 0;) {
-                var stat = statements[i];
-                if (stat instanceof AST_If && stat.body instanceof AST_Return) {
-                    if (++n > 1)
-                        return true;
-                }
-            }
-            return false;
-        }
-
-        function is_return_void(value) {
-            return !value || value instanceof AST_UnaryPrefix && value.operator == "void";
-        }
-
-        function can_merge_flow(ab) {
-            if (!ab)
-                return false;
-            for (var j = i + 1, len = statements.length; j < len; j++) {
-                var stat = statements[j];
-                if (stat instanceof AST_Const || stat instanceof AST_Let)
-                    return false;
-            }
-            var lct = ab instanceof AST_LoopControl ? compressor.loopcontrol_target(ab) : null;
-            return ab instanceof AST_Return && in_lambda && is_return_void(ab.value)
-                || ab instanceof AST_Continue && self === loop_body(lct)
-                || ab instanceof AST_Break && lct instanceof AST_BlockStatement && self === lct;
-        }
-
-        function extract_functions() {
-            var tail = statements.slice(i + 1);
-            statements.length = i + 1;
-            return tail.filter(function (stat) {
-                if (stat instanceof AST_Defun) {
-                    statements.push(stat);
-                    return false;
-                }
-                return true;
-            });
-        }
-
-        function as_statement_array_with_return(node, ab) {
-            var body = as_statement_array(node).slice(0, -1);
-            if (ab.value) {
-                body.push(make_node(AST_SimpleStatement, ab.value, {
-                    body: ab.value.expression
-                }));
-            }
-            return body;
-        }
-
-        function next_index(i) {
-            for (var j = i + 1, len = statements.length; j < len; j++) {
-                var stat = statements[j];
-                if (!(stat instanceof AST_Var && declarations_only(stat))) {
-                    break;
-                }
-            }
-            return j;
-        }
-
-        function prev_index(i) {
-            for (var j = i; --j >= 0;) {
-                var stat = statements[j];
-                if (!(stat instanceof AST_Var && declarations_only(stat))) {
-                    break;
-                }
-            }
-            return j;
-        }
-    }
-
-    function eliminate_dead_code(statements, compressor) {
-        var has_quit;
-        var self = compressor.self();
-        for (var i = 0, n = 0, len = statements.length; i < len; i++) {
-            var stat = statements[i];
-            if (stat instanceof AST_LoopControl) {
-                var lct = compressor.loopcontrol_target(stat);
-                if (stat instanceof AST_Break
-                    && !(lct instanceof AST_IterationStatement)
-                    && loop_body(lct) === self
-                    || stat instanceof AST_Continue
-                    && loop_body(lct) === self) {
-                    if (stat.label) {
-                        remove(stat.label.thedef.references, stat);
-                    }
-                } else {
-                    statements[n++] = stat;
-                }
-            } else {
-                statements[n++] = stat;
-            }
-            if (aborts(stat)) {
-                has_quit = statements.slice(i + 1);
-                break;
-            }
-        }
-        statements.length = n;
-        CHANGED = n != len;
-        if (has_quit)
-            has_quit.forEach(function (stat) {
-                trim_unreachable_code(compressor, stat, statements);
-            });
-    }
-
-    function declarations_only(node) {
-        return node.definitions.every((var_def) => !var_def.value);
-    }
-
-    function sequencesize(statements, compressor) {
-        if (statements.length < 2)
-            return;
-        var seq = [], n = 0;
-        function push_seq() {
-            if (!seq.length)
-                return;
-            var body = make_sequence(seq[0], seq);
-            statements[n++] = make_node(AST_SimpleStatement, body, { body: body });
-            seq = [];
-        }
-        for (var i = 0, len = statements.length; i < len; i++) {
-            var stat = statements[i];
-            if (stat instanceof AST_SimpleStatement) {
-                if (seq.length >= compressor.sequences_limit)
-                    push_seq();
-                var body = stat.body;
-                if (seq.length > 0)
-                    body = body.drop_side_effect_free(compressor);
-                if (body)
-                    merge_sequence(seq, body);
-            } else if (stat instanceof AST_Definitions && declarations_only(stat)
-                || stat instanceof AST_Defun) {
-                statements[n++] = stat;
-            } else {
-                push_seq();
-                statements[n++] = stat;
-            }
-        }
-        push_seq();
-        statements.length = n;
-        if (n != len)
-            CHANGED = true;
-    }
-
-    function to_simple_statement(block, decls) {
-        if (!(block instanceof AST_BlockStatement))
-            return block;
-        var stat = null;
-        for (var i = 0, len = block.body.length; i < len; i++) {
-            var line = block.body[i];
-            if (line instanceof AST_Var && declarations_only(line)) {
-                decls.push(line);
-            } else if (stat || line instanceof AST_Const || line instanceof AST_Let) {
-                return false;
-            } else {
-                stat = line;
-            }
-        }
-        return stat;
-    }
-
-    function sequencesize_2(statements, compressor) {
-        function cons_seq(right) {
-            n--;
-            CHANGED = true;
-            var left = prev.body;
-            return make_sequence(left, [left, right]).transform(compressor);
-        }
-        var n = 0, prev;
-        for (var i = 0; i < statements.length; i++) {
-            var stat = statements[i];
-            if (prev) {
-                if (stat instanceof AST_Exit) {
-                    stat.value = cons_seq(stat.value || make_node(AST_Undefined, stat).transform(compressor));
-                } else if (stat instanceof AST_For) {
-                    if (!(stat.init instanceof AST_Definitions)) {
-                        const abort = walk(prev.body, node => {
-                            if (node instanceof AST_Scope)
-                                return true;
-                            if (node instanceof AST_Binary
-                                && node.operator === "in") {
-                                return walk_abort;
-                            }
-                        });
-                        if (!abort) {
-                            if (stat.init)
-                                stat.init = cons_seq(stat.init);
-                            else {
-                                stat.init = prev.body;
-                                n--;
-                                CHANGED = true;
-                            }
-                        }
-                    }
-                } else if (stat instanceof AST_ForIn) {
-                    if (!(stat.init instanceof AST_Const) && !(stat.init instanceof AST_Let)) {
-                        stat.object = cons_seq(stat.object);
-                    }
-                } else if (stat instanceof AST_If) {
-                    stat.condition = cons_seq(stat.condition);
-                } else if (stat instanceof AST_Switch) {
-                    stat.expression = cons_seq(stat.expression);
-                } else if (stat instanceof AST_With) {
-                    stat.expression = cons_seq(stat.expression);
-                }
-            }
-            if (compressor.option("conditionals") && stat instanceof AST_If) {
-                var decls = [];
-                var body = to_simple_statement(stat.body, decls);
-                var alt = to_simple_statement(stat.alternative, decls);
-                if (body !== false && alt !== false && decls.length > 0) {
-                    var len = decls.length;
-                    decls.push(make_node(AST_If, stat, {
-                        condition: stat.condition,
-                        body: body || make_node(AST_EmptyStatement, stat.body),
-                        alternative: alt
-                    }));
-                    decls.unshift(n, 1);
-                    [].splice.apply(statements, decls);
-                    i += len;
-                    n += len + 1;
-                    prev = null;
-                    CHANGED = true;
-                    continue;
-                }
-            }
-            statements[n++] = stat;
-            prev = stat instanceof AST_SimpleStatement ? stat : null;
-        }
-        statements.length = n;
-    }
-
-    function join_object_assignments(defn, body) {
-        if (!(defn instanceof AST_Definitions))
-            return;
-        var def = defn.definitions[defn.definitions.length - 1];
-        if (!(def.value instanceof AST_Object))
-            return;
-        var exprs;
-        if (body instanceof AST_Assign && !body.logical) {
-            exprs = [body];
-        } else if (body instanceof AST_Sequence) {
-            exprs = body.expressions.slice();
-        }
-        if (!exprs)
-            return;
-        var trimmed = false;
-        do {
-            var node = exprs[0];
-            if (!(node instanceof AST_Assign))
-                break;
-            if (node.operator != "=")
-                break;
-            if (!(node.left instanceof AST_PropAccess))
-                break;
-            var sym = node.left.expression;
-            if (!(sym instanceof AST_SymbolRef))
-                break;
-            if (def.name.name != sym.name)
-                break;
-            if (!node.right.is_constant_expression(scope))
-                break;
-            var prop = node.left.property;
-            if (prop instanceof AST_Node) {
-                prop = prop.evaluate(compressor);
-            }
-            if (prop instanceof AST_Node)
-                break;
-            prop = "" + prop;
-            var diff = compressor.option("ecma") < 2015
-                && compressor.has_directive("use strict") ? function (node) {
-                    return node.key != prop && (node.key && node.key.name != prop);
-                } : function (node) {
-                    return node.key && node.key.name != prop;
-                };
-            if (!def.value.properties.every(diff))
-                break;
-            var p = def.value.properties.filter(function (p) { return p.key === prop; })[0];
-            if (!p) {
-                def.value.properties.push(make_node(AST_ObjectKeyVal, node, {
-                    key: prop,
-                    value: node.right
-                }));
-            } else {
-                p.value = new AST_Sequence({
-                    start: p.start,
-                    expressions: [p.value.clone(), node.right.clone()],
-                    end: p.end
-                });
-            }
-            exprs.shift();
-            trimmed = true;
-        } while (exprs.length);
-        return trimmed && exprs;
-    }
-
-    function join_consecutive_vars(statements) {
-        var defs;
-        for (var i = 0, j = -1, len = statements.length; i < len; i++) {
-            var stat = statements[i];
-            var prev = statements[j];
-            if (stat instanceof AST_Definitions) {
-                if (prev && prev.TYPE == stat.TYPE) {
-                    prev.definitions = prev.definitions.concat(stat.definitions);
-                    CHANGED = true;
-                } else if (defs && defs.TYPE == stat.TYPE && declarations_only(stat)) {
-                    defs.definitions = defs.definitions.concat(stat.definitions);
-                    CHANGED = true;
-                } else {
-                    statements[++j] = stat;
-                    defs = stat;
-                }
-            } else if (stat instanceof AST_Exit) {
-                stat.value = extract_object_assignments(stat.value);
-            } else if (stat instanceof AST_For) {
-                var exprs = join_object_assignments(prev, stat.init);
-                if (exprs) {
-                    CHANGED = true;
-                    stat.init = exprs.length ? make_sequence(stat.init, exprs) : null;
-                    statements[++j] = stat;
-                } else if (prev instanceof AST_Var && (!stat.init || stat.init.TYPE == prev.TYPE)) {
-                    if (stat.init) {
-                        prev.definitions = prev.definitions.concat(stat.init.definitions);
-                    }
-                    stat.init = prev;
-                    statements[j] = stat;
-                    CHANGED = true;
-                } else if (defs && stat.init && defs.TYPE == stat.init.TYPE && declarations_only(stat.init)) {
-                    defs.definitions = defs.definitions.concat(stat.init.definitions);
-                    stat.init = null;
-                    statements[++j] = stat;
-                    CHANGED = true;
-                } else {
-                    statements[++j] = stat;
-                }
-            } else if (stat instanceof AST_ForIn) {
-                stat.object = extract_object_assignments(stat.object);
-            } else if (stat instanceof AST_If) {
-                stat.condition = extract_object_assignments(stat.condition);
-            } else if (stat instanceof AST_SimpleStatement) {
-                var exprs = join_object_assignments(prev, stat.body);
-                if (exprs) {
-                    CHANGED = true;
-                    if (!exprs.length)
-                        continue;
-                    stat.body = make_sequence(stat.body, exprs);
-                }
-                statements[++j] = stat;
-            } else if (stat instanceof AST_Switch) {
-                stat.expression = extract_object_assignments(stat.expression);
-            } else if (stat instanceof AST_With) {
-                stat.expression = extract_object_assignments(stat.expression);
-            } else {
-                statements[++j] = stat;
-            }
-        }
-        statements.length = j + 1;
-
-        function extract_object_assignments(value) {
-            statements[++j] = stat;
-            var exprs = join_object_assignments(prev, value);
-            if (exprs) {
-                CHANGED = true;
-                if (exprs.length) {
-                    return make_sequence(value, exprs);
-                } else if (value instanceof AST_Sequence) {
-                    return value.tail_node().left;
-                } else {
-                    return value.left;
-                }
-            }
-            return value;
-        }
-    }
-}
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-
-function within_array_or_object_literal(compressor) {
-    var node, level = 0;
-    while (node = compressor.parent(level++)) {
-        if (node instanceof AST_Statement) return false;
-        if (node instanceof AST_Array
-            || node instanceof AST_ObjectKeyVal
-            || node instanceof AST_Object) {
-            return true;
-        }
-    }
-    return false;
-}
-
-function scope_encloses_variables_in_this_scope(scope, pulled_scope) {
-    for (const enclosed of pulled_scope.enclosed) {
-        if (pulled_scope.variables.has(enclosed.name)) {
-            continue;
-        }
-        const looked_up = scope.find_variable(enclosed.name);
-        if (looked_up) {
-            if (looked_up === enclosed) continue;
-            return true;
-        }
-    }
-    return false;
-}
-
-function inline_into_symbolref(self, compressor) {
-    if (
-        !compressor.option("ie8")
-        && is_undeclared_ref(self)
-        && !compressor.find_parent(AST_With)
-    ) {
-        switch (self.name) {
-          case "undefined":
-            return make_node(AST_Undefined, self).optimize(compressor);
-          case "NaN":
-            return make_node(AST_NaN, self).optimize(compressor);
-          case "Infinity":
-            return make_node(AST_Infinity, self).optimize(compressor);
-        }
-    }
-
-    const parent = compressor.parent();
-    if (compressor.option("reduce_vars") && is_lhs(self, parent) !== self) {
-        const def = self.definition();
-        const nearest_scope = compressor.find_scope();
-        if (compressor.top_retain && def.global && compressor.top_retain(def)) {
-            def.fixed = false;
-            def.single_use = false;
-            return self;
-        }
-
-        let fixed = self.fixed_value();
-        let single_use = def.single_use
-            && !(parent instanceof AST_Call
-                && (parent.is_callee_pure(compressor))
-                    || has_annotation(parent, _NOINLINE))
-            && !(parent instanceof AST_Export
-                && fixed instanceof AST_Lambda
-                && fixed.name);
-
-        if (single_use && fixed instanceof AST_Node) {
-            single_use =
-                !fixed.has_side_effects(compressor)
-                && !fixed.may_throw(compressor);
-        }
-
-        if (single_use && (fixed instanceof AST_Lambda || fixed instanceof AST_Class)) {
-            if (retain_top_func(fixed, compressor)) {
-                single_use = false;
-            } else if (def.scope !== self.scope
-                && (def.escaped == 1
-                    || has_flag(fixed, INLINED)
-                    || within_array_or_object_literal(compressor)
-                    || !compressor.option("reduce_funcs"))) {
-                single_use = false;
-            } else if (is_recursive_ref(compressor, def)) {
-                single_use = false;
-            } else if (def.scope !== self.scope || def.orig[0] instanceof AST_SymbolFunarg) {
-                single_use = fixed.is_constant_expression(self.scope);
-                if (single_use == "f") {
-                    var scope = self.scope;
-                    do {
-                        if (scope instanceof AST_Defun || is_func_expr(scope)) {
-                            set_flag(scope, INLINED);
-                        }
-                    } while (scope = scope.parent_scope);
-                }
-            }
-        }
-
-        if (single_use && (fixed instanceof AST_Lambda || fixed instanceof AST_Class)) {
-            single_use =
-                def.scope === self.scope
-                    && !scope_encloses_variables_in_this_scope(nearest_scope, fixed)
-                || parent instanceof AST_Call
-                    && parent.expression === self
-                    && !scope_encloses_variables_in_this_scope(nearest_scope, fixed)
-                    && !(fixed.name && fixed.name.definition().recursive_refs > 0);
-        }
-
-        if (single_use && fixed) {
-            if (fixed instanceof AST_DefClass) {
-                set_flag(fixed, SQUEEZED);
-                fixed = make_node(AST_ClassExpression, fixed, fixed);
-            }
-            if (fixed instanceof AST_Defun) {
-                set_flag(fixed, SQUEEZED);
-                fixed = make_node(AST_Function, fixed, fixed);
-            }
-            if (def.recursive_refs > 0 && fixed.name instanceof AST_SymbolDefun) {
-                const defun_def = fixed.name.definition();
-                let lambda_def = fixed.variables.get(fixed.name.name);
-                let name = lambda_def && lambda_def.orig[0];
-                if (!(name instanceof AST_SymbolLambda)) {
-                    name = make_node(AST_SymbolLambda, fixed.name, fixed.name);
-                    name.scope = fixed;
-                    fixed.name = name;
-                    lambda_def = fixed.def_function(name);
-                }
-                walk(fixed, node => {
-                    if (node instanceof AST_SymbolRef && node.definition() === defun_def) {
-                        node.thedef = lambda_def;
-                        lambda_def.references.push(node);
-                    }
-                });
-            }
-            if (
-                (fixed instanceof AST_Lambda || fixed instanceof AST_Class)
-                && fixed.parent_scope !== nearest_scope
-            ) {
-                fixed = fixed.clone(true, compressor.get_toplevel());
-
-                nearest_scope.add_child_scope(fixed);
-            }
-            return fixed.optimize(compressor);
-        }
-
-        // multiple uses
-        if (fixed) {
-            let replace;
-
-            if (fixed instanceof AST_This) {
-                if (!(def.orig[0] instanceof AST_SymbolFunarg)
-                    && def.references.every((ref) =>
-                        def.scope === ref.scope
-                    )) {
-                    replace = fixed;
-                }
-            } else {
-                var ev = fixed.evaluate(compressor);
-                if (
-                    ev !== fixed
-                    && (compressor.option("unsafe_regexp") || !(ev instanceof RegExp))
-                ) {
-                    replace = make_node_from_constant(ev, fixed);
-                }
-            }
-
-            if (replace) {
-                const name_length = self.size(compressor);
-                const replace_size = replace.size(compressor);
-
-                let overhead = 0;
-                if (compressor.option("unused") && !compressor.exposed(def)) {
-                    overhead =
-                        (name_length + 2 + replace_size) /
-                        (def.references.length - def.assignments);
-                }
-
-                if (replace_size <= name_length + overhead) {
-                    return replace;
-                }
-            }
-        }
-    }
-
-    return self;
-}
-
-function inline_into_call(self, fn, compressor) {
-    var exp = self.expression;
-    var simple_args = self.args.every((arg) => !(arg instanceof AST_Expansion));
-
-    if (compressor.option("reduce_vars")
-        && fn instanceof AST_SymbolRef
-        && !has_annotation(self, _NOINLINE)
-    ) {
-        const fixed = fn.fixed_value();
-        if (!retain_top_func(fixed, compressor)) {
-            fn = fixed;
-        }
-    }
-
-    var is_func = fn instanceof AST_Lambda;
-
-    var stat = is_func && fn.body[0];
-    var is_regular_func = is_func && !fn.is_generator && !fn.async;
-    var can_inline = is_regular_func && compressor.option("inline") && !self.is_callee_pure(compressor);
-    if (can_inline && stat instanceof AST_Return) {
-        let returned = stat.value;
-        if (!returned || returned.is_constant_expression()) {
-            if (returned) {
-                returned = returned.clone(true);
-            } else {
-                returned = make_node(AST_Undefined, self);
-            }
-            const args = self.args.concat(returned);
-            return make_sequence(self, args).optimize(compressor);
-        }
-
-        // optimize identity function
-        if (
-            fn.argnames.length === 1
-            && (fn.argnames[0] instanceof AST_SymbolFunarg)
-            && self.args.length < 2
-            && !(self.args[0] instanceof AST_Expansion)
-            && returned instanceof AST_SymbolRef
-            && returned.name === fn.argnames[0].name
-        ) {
-            const replacement =
-                (self.args[0] || make_node(AST_Undefined)).optimize(compressor);
-
-            let parent;
-            if (
-                replacement instanceof AST_PropAccess
-                && (parent = compressor.parent()) instanceof AST_Call
-                && parent.expression === self
-            ) {
-                // identity function was being used to remove `this`, like in
-                //
-                // id(bag.no_this)(...)
-                //
-                // Replace with a larger but more effish (0, bag.no_this) wrapper.
-
-                return make_sequence(self, [
-                    make_node(AST_Number, self, { value: 0 }),
-                    replacement
-                ]);
-            }
-            // replace call with first argument or undefined if none passed
-            return replacement;
-        }
-    }
-
-    if (can_inline) {
-        var scope, in_loop, level = -1;
-        let def;
-        let returned_value;
-        let nearest_scope;
-        if (simple_args
-            && !fn.uses_arguments
-            && !(compressor.parent() instanceof AST_Class)
-            && !(fn.name && fn instanceof AST_Function)
-            && (returned_value = can_flatten_body(stat))
-            && (exp === fn
-                || has_annotation(self, _INLINE)
-                || compressor.option("unused")
-                    && (def = exp.definition()).references.length == 1
-                    && !is_recursive_ref(compressor, def)
-                    && fn.is_constant_expression(exp.scope))
-            && !has_annotation(self, _PURE | _NOINLINE)
-            && !fn.contains_this()
-            && can_inject_symbols()
-            && (nearest_scope = compressor.find_scope())
-            && !scope_encloses_variables_in_this_scope(nearest_scope, fn)
-            && !(function in_default_assign() {
-                    // Due to the fact function parameters have their own scope
-                    // which can't use `var something` in the function body within,
-                    // we simply don't inline into DefaultAssign.
-                    let i = 0;
-                    let p;
-                    while ((p = compressor.parent(i++))) {
-                        if (p instanceof AST_DefaultAssign) return true;
-                        if (p instanceof AST_Block) break;
-                    }
-                    return false;
-                })()
-            && !(scope instanceof AST_Class)
-        ) {
-            set_flag(fn, SQUEEZED);
-            nearest_scope.add_child_scope(fn);
-            return make_sequence(self, flatten_fn(returned_value)).optimize(compressor);
-        }
-    }
-
-    if (can_inline && has_annotation(self, _INLINE)) {
-        set_flag(fn, SQUEEZED);
-        fn = make_node(fn.CTOR === AST_Defun ? AST_Function : fn.CTOR, fn, fn);
-        fn = fn.clone(true);
-        fn.figure_out_scope({}, {
-            parent_scope: compressor.find_scope(),
-            toplevel: compressor.get_toplevel()
-        });
-
-        return make_node(AST_Call, self, {
-            expression: fn,
-            args: self.args,
-        }).optimize(compressor);
-    }
-
-    const can_drop_this_call = is_regular_func && compressor.option("side_effects") && fn.body.every(is_empty);
-    if (can_drop_this_call) {
-        var args = self.args.concat(make_node(AST_Undefined, self));
-        return make_sequence(self, args).optimize(compressor);
-    }
-
-    if (compressor.option("negate_iife")
-        && compressor.parent() instanceof AST_SimpleStatement
-        && is_iife_call(self)) {
-        return self.negate(compressor, true);
-    }
-
-    var ev = self.evaluate(compressor);
-    if (ev !== self) {
-        ev = make_node_from_constant(ev, self).optimize(compressor);
-        return best_of(compressor, ev, self);
-    }
-
-    return self;
-
-    function return_value(stat) {
-        if (!stat) return make_node(AST_Undefined, self);
-        if (stat instanceof AST_Return) {
-            if (!stat.value) return make_node(AST_Undefined, self);
-            return stat.value.clone(true);
-        }
-        if (stat instanceof AST_SimpleStatement) {
-            return make_node(AST_UnaryPrefix, stat, {
-                operator: "void",
-                expression: stat.body.clone(true)
-            });
-        }
-    }
-
-    function can_flatten_body(stat) {
-        var body = fn.body;
-        var len = body.length;
-        if (compressor.option("inline") < 3) {
-            return len == 1 && return_value(stat);
-        }
-        stat = null;
-        for (var i = 0; i < len; i++) {
-            var line = body[i];
-            if (line instanceof AST_Var) {
-                if (stat && !line.definitions.every((var_def) =>
-                    !var_def.value
-                )) {
-                    return false;
-                }
-            } else if (stat) {
-                return false;
-            } else if (!(line instanceof AST_EmptyStatement)) {
-                stat = line;
-            }
-        }
-        return return_value(stat);
-    }
-
-    function can_inject_args(block_scoped, safe_to_inject) {
-        for (var i = 0, len = fn.argnames.length; i < len; i++) {
-            var arg = fn.argnames[i];
-            if (arg instanceof AST_DefaultAssign) {
-                if (has_flag(arg.left, UNUSED)) continue;
-                return false;
-            }
-            if (arg instanceof AST_Destructuring) return false;
-            if (arg instanceof AST_Expansion) {
-                if (has_flag(arg.expression, UNUSED)) continue;
-                return false;
-            }
-            if (has_flag(arg, UNUSED)) continue;
-            if (!safe_to_inject
-                || block_scoped.has(arg.name)
-                || identifier_atom.has(arg.name)
-                || scope.conflicting_def(arg.name)) {
-                return false;
-            }
-            if (in_loop) in_loop.push(arg.definition());
-        }
-        return true;
-    }
-
-    function can_inject_vars(block_scoped, safe_to_inject) {
-        var len = fn.body.length;
-        for (var i = 0; i < len; i++) {
-            var stat = fn.body[i];
-            if (!(stat instanceof AST_Var)) continue;
-            if (!safe_to_inject) return false;
-            for (var j = stat.definitions.length; --j >= 0;) {
-                var name = stat.definitions[j].name;
-                if (name instanceof AST_Destructuring
-                    || block_scoped.has(name.name)
-                    || identifier_atom.has(name.name)
-                    || scope.conflicting_def(name.name)) {
-                    return false;
-                }
-                if (in_loop) in_loop.push(name.definition());
-            }
-        }
-        return true;
-    }
-
-    function can_inject_symbols() {
-        var block_scoped = new Set();
-        do {
-            scope = compressor.parent(++level);
-            if (scope.is_block_scope() && scope.block_scope) {
-                // TODO this is sometimes undefined during compression.
-                // But it should always have a value!
-                scope.block_scope.variables.forEach(function (variable) {
-                    block_scoped.add(variable.name);
-                });
-            }
-            if (scope instanceof AST_Catch) {
-                // TODO can we delete? AST_Catch is a block scope.
-                if (scope.argname) {
-                    block_scoped.add(scope.argname.name);
-                }
-            } else if (scope instanceof AST_IterationStatement) {
-                in_loop = [];
-            } else if (scope instanceof AST_SymbolRef) {
-                if (scope.fixed_value() instanceof AST_Scope) return false;
-            }
-        } while (!(scope instanceof AST_Scope));
-
-        var safe_to_inject = !(scope instanceof AST_Toplevel) || compressor.toplevel.vars;
-        var inline = compressor.option("inline");
-        if (!can_inject_vars(block_scoped, inline >= 3 && safe_to_inject)) return false;
-        if (!can_inject_args(block_scoped, inline >= 2 && safe_to_inject)) return false;
-        return !in_loop || in_loop.length == 0 || !is_reachable(fn, in_loop);
-    }
-
-    function append_var(decls, expressions, name, value) {
-        var def = name.definition();
-
-        // Name already exists, only when a function argument had the same name
-        const already_appended = scope.variables.has(name.name);
-        if (!already_appended) {
-            scope.variables.set(name.name, def);
-            scope.enclosed.push(def);
-            decls.push(make_node(AST_VarDef, name, {
-                name: name,
-                value: null
-            }));
-        }
-
-        var sym = make_node(AST_SymbolRef, name, name);
-        def.references.push(sym);
-        if (value) expressions.push(make_node(AST_Assign, self, {
-            operator: "=",
-            logical: false,
-            left: sym,
-            right: value.clone()
-        }));
-    }
-
-    function flatten_args(decls, expressions) {
-        var len = fn.argnames.length;
-        for (var i = self.args.length; --i >= len;) {
-            expressions.push(self.args[i]);
-        }
-        for (i = len; --i >= 0;) {
-            var name = fn.argnames[i];
-            var value = self.args[i];
-            if (has_flag(name, UNUSED) || !name.name || scope.conflicting_def(name.name)) {
-                if (value) expressions.push(value);
-            } else {
-                var symbol = make_node(AST_SymbolVar, name, name);
-                name.definition().orig.push(symbol);
-                if (!value && in_loop) value = make_node(AST_Undefined, self);
-                append_var(decls, expressions, symbol, value);
-            }
-        }
-        decls.reverse();
-        expressions.reverse();
-    }
-
-    function flatten_vars(decls, expressions) {
-        var pos = expressions.length;
-        for (var i = 0, lines = fn.body.length; i < lines; i++) {
-            var stat = fn.body[i];
-            if (!(stat instanceof AST_Var)) continue;
-            for (var j = 0, defs = stat.definitions.length; j < defs; j++) {
-                var var_def = stat.definitions[j];
-                var name = var_def.name;
-                append_var(decls, expressions, name, var_def.value);
-                if (in_loop && fn.argnames.every((argname) =>
-                    argname.name != name.name
-                )) {
-                    var def = fn.variables.get(name.name);
-                    var sym = make_node(AST_SymbolRef, name, name);
-                    def.references.push(sym);
-                    expressions.splice(pos++, 0, make_node(AST_Assign, var_def, {
-                        operator: "=",
-                        logical: false,
-                        left: sym,
-                        right: make_node(AST_Undefined, name)
-                    }));
-                }
-            }
-        }
-    }
-
-    function flatten_fn(returned_value) {
-        var decls = [];
-        var expressions = [];
-        flatten_args(decls, expressions);
-        flatten_vars(decls, expressions);
-        expressions.push(returned_value);
-
-        if (decls.length) {
-            const i = scope.body.indexOf(compressor.parent(level - 1)) + 1;
-            scope.body.splice(i, 0, make_node(AST_Var, fn, {
-                definitions: decls
-            }));
-        }
-
-        return expressions.map(exp => exp.clone(true));
-    }
-}
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-class Compressor extends TreeWalker {
-    constructor(options, { false_by_default = false, mangle_options = false }) {
-        super();
-        if (options.defaults !== undefined && !options.defaults) false_by_default = true;
-        this.options = defaults(options, {
-            arguments     : false,
-            arrows        : !false_by_default,
-            booleans      : !false_by_default,
-            booleans_as_integers : false,
-            collapse_vars : !false_by_default,
-            comparisons   : !false_by_default,
-            computed_props: !false_by_default,
-            conditionals  : !false_by_default,
-            dead_code     : !false_by_default,
-            defaults      : true,
-            directives    : !false_by_default,
-            drop_console  : false,
-            drop_debugger : !false_by_default,
-            ecma          : 5,
-            evaluate      : !false_by_default,
-            expression    : false,
-            global_defs   : false,
-            hoist_funs    : false,
-            hoist_props   : !false_by_default,
-            hoist_vars    : false,
-            ie8           : false,
-            if_return     : !false_by_default,
-            inline        : !false_by_default,
-            join_vars     : !false_by_default,
-            keep_classnames: false,
-            keep_fargs    : true,
-            keep_fnames   : false,
-            keep_infinity : false,
-            loops         : !false_by_default,
-            module        : false,
-            negate_iife   : !false_by_default,
-            passes        : 1,
-            properties    : !false_by_default,
-            pure_getters  : !false_by_default && "strict",
-            pure_funcs    : null,
-            reduce_funcs  : !false_by_default,
-            reduce_vars   : !false_by_default,
-            sequences     : !false_by_default,
-            side_effects  : !false_by_default,
-            switches      : !false_by_default,
-            top_retain    : null,
-            toplevel      : !!(options && options["top_retain"]),
-            typeofs       : !false_by_default,
-            unsafe        : false,
-            unsafe_arrows : false,
-            unsafe_comps  : false,
-            unsafe_Function: false,
-            unsafe_math   : false,
-            unsafe_symbols: false,
-            unsafe_methods: false,
-            unsafe_proto  : false,
-            unsafe_regexp : false,
-            unsafe_undefined: false,
-            unused        : !false_by_default,
-            warnings      : false  // legacy
-        }, true);
-        var global_defs = this.options["global_defs"];
-        if (typeof global_defs == "object") for (var key in global_defs) {
-            if (key[0] === "@" && HOP(global_defs, key)) {
-                global_defs[key.slice(1)] = parse(global_defs[key], {
-                    expression: true
-                });
-            }
-        }
-        if (this.options["inline"] === true) this.options["inline"] = 3;
-        var pure_funcs = this.options["pure_funcs"];
-        if (typeof pure_funcs == "function") {
-            this.pure_funcs = pure_funcs;
-        } else {
-            this.pure_funcs = pure_funcs ? function(node) {
-                return !pure_funcs.includes(node.expression.print_to_string());
-            } : return_true;
-        }
-        var top_retain = this.options["top_retain"];
-        if (top_retain instanceof RegExp) {
-            this.top_retain = function(def) {
-                return top_retain.test(def.name);
-            };
-        } else if (typeof top_retain == "function") {
-            this.top_retain = top_retain;
-        } else if (top_retain) {
-            if (typeof top_retain == "string") {
-                top_retain = top_retain.split(/,/);
-            }
-            this.top_retain = function(def) {
-                return top_retain.includes(def.name);
-            };
-        }
-        if (this.options["module"]) {
-            this.directives["use strict"] = true;
-            this.options["toplevel"] = true;
-        }
-        var toplevel = this.options["toplevel"];
-        this.toplevel = typeof toplevel == "string" ? {
-            funcs: /funcs/.test(toplevel),
-            vars: /vars/.test(toplevel)
-        } : {
-            funcs: toplevel,
-            vars: toplevel
-        };
-        var sequences = this.options["sequences"];
-        this.sequences_limit = sequences == 1 ? 800 : sequences | 0;
-        this.evaluated_regexps = new Map();
-        this._toplevel = undefined;
-        this.mangle_options = mangle_options;
-    }
-
-    option(key) {
-        return this.options[key];
-    }
-
-    exposed(def) {
-        if (def.export) return true;
-        if (def.global) for (var i = 0, len = def.orig.length; i < len; i++)
-            if (!this.toplevel[def.orig[i] instanceof AST_SymbolDefun ? "funcs" : "vars"])
-                return true;
-        return false;
-    }
-
-    in_boolean_context() {
-        if (!this.option("booleans")) return false;
-        var self = this.self();
-        for (var i = 0, p; p = this.parent(i); i++) {
-            if (p instanceof AST_SimpleStatement
-                || p instanceof AST_Conditional && p.condition === self
-                || p instanceof AST_DWLoop && p.condition === self
-                || p instanceof AST_For && p.condition === self
-                || p instanceof AST_If && p.condition === self
-                || p instanceof AST_UnaryPrefix && p.operator == "!" && p.expression === self) {
-                return true;
-            }
-            if (
-                p instanceof AST_Binary
-                    && (
-                        p.operator == "&&"
-                        || p.operator == "||"
-                        || p.operator == "??"
-                    )
-                || p instanceof AST_Conditional
-                || p.tail_node() === self
-            ) {
-                self = p;
-            } else {
-                return false;
-            }
-        }
-    }
-
-    get_toplevel() {
-        return this._toplevel;
-    }
-
-    compress(toplevel) {
-        toplevel = toplevel.resolve_defines(this);
-        this._toplevel = toplevel;
-        if (this.option("expression")) {
-            this._toplevel.process_expression(true);
-        }
-        var passes = +this.options.passes || 1;
-        var min_count = 1 / 0;
-        var stopping = false;
-        var nth_identifier = this.mangle_options && this.mangle_options.nth_identifier || base54;
-        var mangle = { ie8: this.option("ie8"), nth_identifier: nth_identifier };
-        for (var pass = 0; pass < passes; pass++) {
-            this._toplevel.figure_out_scope(mangle);
-            if (pass === 0 && this.option("drop_console")) {
-                // must be run before reduce_vars and compress pass
-                this._toplevel = this._toplevel.drop_console();
-            }
-            if (pass > 0 || this.option("reduce_vars")) {
-                this._toplevel.reset_opt_flags(this);
-            }
-            this._toplevel = this._toplevel.transform(this);
-            if (passes > 1) {
-                let count = 0;
-                walk(this._toplevel, () => { count++; });
-                if (count < min_count) {
-                    min_count = count;
-                    stopping = false;
-                } else if (stopping) {
-                    break;
-                } else {
-                    stopping = true;
-                }
-            }
-        }
-        if (this.option("expression")) {
-            this._toplevel.process_expression(false);
-        }
-        toplevel = this._toplevel;
-        this._toplevel = undefined;
-        return toplevel;
-    }
-
-    before(node, descend) {
-        if (has_flag(node, SQUEEZED)) return node;
-        var was_scope = false;
-        if (node instanceof AST_Scope) {
-            node = node.hoist_properties(this);
-            node = node.hoist_declarations(this);
-            was_scope = true;
-        }
-        // Before https://github.com/mishoo/UglifyJS2/pull/1602 AST_Node.optimize()
-        // would call AST_Node.transform() if a different instance of AST_Node is
-        // produced after def_optimize().
-        // This corrupts TreeWalker.stack, which cause AST look-ups to malfunction.
-        // Migrate and defer all children's AST_Node.transform() to below, which
-        // will now happen after this parent AST_Node has been properly substituted
-        // thus gives a consistent AST snapshot.
-        descend(node, this);
-        // Existing code relies on how AST_Node.optimize() worked, and omitting the
-        // following replacement call would result in degraded efficiency of both
-        // output and performance.
-        descend(node, this);
-        var opt = node.optimize(this);
-        if (was_scope && opt instanceof AST_Scope) {
-            opt.drop_unused(this);
-            descend(opt, this);
-        }
-        if (opt === node) set_flag(opt, SQUEEZED);
-        return opt;
-    }
-}
-
-function def_optimize(node, optimizer) {
-    node.DEFMETHOD("optimize", function(compressor) {
-        var self = this;
-        if (has_flag(self, OPTIMIZED)) return self;
-        if (compressor.has_directive("use asm")) return self;
-        var opt = optimizer(self, compressor);
-        set_flag(opt, OPTIMIZED);
-        return opt;
-    });
-}
-
-def_optimize(AST_Node, function(self) {
-    return self;
-});
-
-AST_Toplevel.DEFMETHOD("drop_console", function() {
-    return this.transform(new TreeTransformer(function(self) {
-        if (self.TYPE == "Call") {
-            var exp = self.expression;
-            if (exp instanceof AST_PropAccess) {
-                var name = exp.expression;
-                while (name.expression) {
-                    name = name.expression;
-                }
-                if (is_undeclared_ref(name) && name.name == "console") {
-                    return make_node(AST_Undefined, self);
-                }
-            }
-        }
-    }));
-});
-
-AST_Node.DEFMETHOD("equivalent_to", function(node) {
-    return equivalent_to(this, node);
-});
-
-AST_Scope.DEFMETHOD("process_expression", function(insert, compressor) {
-    var self = this;
-    var tt = new TreeTransformer(function(node) {
-        if (insert && node instanceof AST_SimpleStatement) {
-            return make_node(AST_Return, node, {
-                value: node.body
-            });
-        }
-        if (!insert && node instanceof AST_Return) {
-            if (compressor) {
-                var value = node.value && node.value.drop_side_effect_free(compressor, true);
-                return value
-                    ? make_node(AST_SimpleStatement, node, { body: value })
-                    : make_node(AST_EmptyStatement, node);
-            }
-            return make_node(AST_SimpleStatement, node, {
-                body: node.value || make_node(AST_UnaryPrefix, node, {
-                    operator: "void",
-                    expression: make_node(AST_Number, node, {
-                        value: 0
-                    })
-                })
-            });
-        }
-        if (node instanceof AST_Class || node instanceof AST_Lambda && node !== self) {
-            return node;
-        }
-        if (node instanceof AST_Block) {
-            var index = node.body.length - 1;
-            if (index >= 0) {
-                node.body[index] = node.body[index].transform(tt);
-            }
-        } else if (node instanceof AST_If) {
-            node.body = node.body.transform(tt);
-            if (node.alternative) {
-                node.alternative = node.alternative.transform(tt);
-            }
-        } else if (node instanceof AST_With) {
-            node.body = node.body.transform(tt);
-        }
-        return node;
-    });
-    self.transform(tt);
-});
-
-AST_Toplevel.DEFMETHOD("reset_opt_flags", function(compressor) {
-    const self = this;
-    const reduce_vars = compressor.option("reduce_vars");
-
-    const preparation = new TreeWalker(function(node, descend) {
-        clear_flag(node, CLEAR_BETWEEN_PASSES);
-        if (reduce_vars) {
-            if (compressor.top_retain
-                && node instanceof AST_Defun  // Only functions are retained
-                && preparation.parent() === self
-            ) {
-                set_flag(node, TOP);
-            }
-            return node.reduce_vars(preparation, descend, compressor);
-        }
-    });
-    // Stack of look-up tables to keep track of whether a `SymbolDef` has been
-    // properly assigned before use:
-    // - `push()` & `pop()` when visiting conditional branches
-    preparation.safe_ids = Object.create(null);
-    preparation.in_loop = null;
-    preparation.loop_ids = new Map();
-    preparation.defs_to_safe_ids = new Map();
-    self.walk(preparation);
-});
-
-AST_Symbol.DEFMETHOD("fixed_value", function() {
-    var fixed = this.thedef.fixed;
-    if (!fixed || fixed instanceof AST_Node) return fixed;
-    return fixed();
-});
-
-AST_SymbolRef.DEFMETHOD("is_immutable", function() {
-    var orig = this.definition().orig;
-    return orig.length == 1 && orig[0] instanceof AST_SymbolLambda;
-});
-
-function find_variable(compressor, name) {
-    var scope, i = 0;
-    while (scope = compressor.parent(i++)) {
-        if (scope instanceof AST_Scope) break;
-        if (scope instanceof AST_Catch && scope.argname) {
-            scope = scope.argname.definition().scope;
-            break;
-        }
-    }
-    return scope.find_variable(name);
-}
-
-var global_names = makePredicate("Array Boolean clearInterval clearTimeout console Date decodeURI decodeURIComponent encodeURI encodeURIComponent Error escape eval EvalError Function isFinite isNaN JSON Math Number parseFloat parseInt RangeError ReferenceError RegExp Object setInterval setTimeout String SyntaxError TypeError unescape URIError");
-AST_SymbolRef.DEFMETHOD("is_declared", function(compressor) {
-    return !this.definition().undeclared
-        || compressor.option("unsafe") && global_names.has(this.name);
-});
-
-/* -----[ optimizers ]----- */
-
-var directives = new Set(["use asm", "use strict"]);
-def_optimize(AST_Directive, function(self, compressor) {
-    if (compressor.option("directives")
-        && (!directives.has(self.value) || compressor.has_directive(self.value) !== self)) {
-        return make_node(AST_EmptyStatement, self);
-    }
-    return self;
-});
-
-def_optimize(AST_Debugger, function(self, compressor) {
-    if (compressor.option("drop_debugger"))
-        return make_node(AST_EmptyStatement, self);
-    return self;
-});
-
-def_optimize(AST_LabeledStatement, function(self, compressor) {
-    if (self.body instanceof AST_Break
-        && compressor.loopcontrol_target(self.body) === self.body) {
-        return make_node(AST_EmptyStatement, self);
-    }
-    return self.label.references.length == 0 ? self.body : self;
-});
-
-def_optimize(AST_Block, function(self, compressor) {
-    tighten_body(self.body, compressor);
-    return self;
-});
-
-function can_be_extracted_from_if_block(node) {
-    return !(
-        node instanceof AST_Const
-        || node instanceof AST_Let
-        || node instanceof AST_Class
-    );
-}
-
-def_optimize(AST_BlockStatement, function(self, compressor) {
-    tighten_body(self.body, compressor);
-    switch (self.body.length) {
-      case 1:
-        if (!compressor.has_directive("use strict")
-            && compressor.parent() instanceof AST_If
-            && can_be_extracted_from_if_block(self.body[0])
-            || can_be_evicted_from_block(self.body[0])) {
-            return self.body[0];
-        }
-        break;
-      case 0: return make_node(AST_EmptyStatement, self);
-    }
-    return self;
-});
-
-function opt_AST_Lambda(self, compressor) {
-    tighten_body(self.body, compressor);
-    if (compressor.option("side_effects")
-        && self.body.length == 1
-        && self.body[0] === compressor.has_directive("use strict")) {
-        self.body.length = 0;
-    }
-    return self;
-}
-def_optimize(AST_Lambda, opt_AST_Lambda);
-
-const r_keep_assign = /keep_assign/;
-AST_Scope.DEFMETHOD("drop_unused", function(compressor) {
-    if (!compressor.option("unused")) return;
-    if (compressor.has_directive("use asm")) return;
-    var self = this;
-    if (self.pinned()) return;
-    var drop_funcs = !(self instanceof AST_Toplevel) || compressor.toplevel.funcs;
-    var drop_vars = !(self instanceof AST_Toplevel) || compressor.toplevel.vars;
-    const assign_as_unused = r_keep_assign.test(compressor.option("unused")) ? return_false : function(node) {
-        if (node instanceof AST_Assign
-            && !node.logical
-            && (has_flag(node, WRITE_ONLY) || node.operator == "=")
-        ) {
-            return node.left;
-        }
-        if (node instanceof AST_Unary && has_flag(node, WRITE_ONLY)) {
-            return node.expression;
-        }
-    };
-    var in_use_ids = new Map();
-    var fixed_ids = new Map();
-    if (self instanceof AST_Toplevel && compressor.top_retain) {
-        self.variables.forEach(function(def) {
-            if (compressor.top_retain(def) && !in_use_ids.has(def.id)) {
-                in_use_ids.set(def.id, def);
-            }
-        });
-    }
-    var var_defs_by_id = new Map();
-    var initializations = new Map();
-    // pass 1: find out which symbols are directly used in
-    // this scope (not in nested scopes).
-    var scope = this;
-    var tw = new TreeWalker(function(node, descend) {
-        if (node instanceof AST_Lambda && node.uses_arguments && !tw.has_directive("use strict")) {
-            node.argnames.forEach(function(argname) {
-                if (!(argname instanceof AST_SymbolDeclaration)) return;
-                var def = argname.definition();
-                if (!in_use_ids.has(def.id)) {
-                    in_use_ids.set(def.id, def);
-                }
-            });
-        }
-        if (node === self) return;
-        if (node instanceof AST_Defun || node instanceof AST_DefClass) {
-            var node_def = node.name.definition();
-            const in_export = tw.parent() instanceof AST_Export;
-            if (in_export || !drop_funcs && scope === self) {
-                if (node_def.global && !in_use_ids.has(node_def.id)) {
-                    in_use_ids.set(node_def.id, node_def);
-                }
-            }
-            if (node instanceof AST_DefClass) {
-                if (
-                    node.extends
-                    && (node.extends.has_side_effects(compressor)
-                    || node.extends.may_throw(compressor))
-                ) {
-                    node.extends.walk(tw);
-                }
-                for (const prop of node.properties) {
-                    if (
-                        prop.has_side_effects(compressor) ||
-                        prop.may_throw(compressor)
-                    ) {
-                        prop.walk(tw);
-                    }
-                }
-            }
-            map_add(initializations, node_def.id, node);
-            return true; // don't go in nested scopes
-        }
-        if (node instanceof AST_SymbolFunarg && scope === self) {
-            map_add(var_defs_by_id, node.definition().id, node);
-        }
-        if (node instanceof AST_Definitions && scope === self) {
-            const in_export = tw.parent() instanceof AST_Export;
-            node.definitions.forEach(function(def) {
-                if (def.name instanceof AST_SymbolVar) {
-                    map_add(var_defs_by_id, def.name.definition().id, def);
-                }
-                if (in_export || !drop_vars) {
-                    walk(def.name, node => {
-                        if (node instanceof AST_SymbolDeclaration) {
-                            const def = node.definition();
-                            if (
-                                (in_export || def.global)
-                                && !in_use_ids.has(def.id)
-                            ) {
-                                in_use_ids.set(def.id, def);
-                            }
-                        }
-                    });
-                }
-                if (def.value) {
-                    if (def.name instanceof AST_Destructuring) {
-                        def.walk(tw);
-                    } else {
-                        var node_def = def.name.definition();
-                        map_add(initializations, node_def.id, def.value);
-                        if (!node_def.chained && def.name.fixed_value() === def.value) {
-                            fixed_ids.set(node_def.id, def);
-                        }
-                    }
-                    if (def.value.has_side_effects(compressor)) {
-                        def.value.walk(tw);
-                    }
-                }
-            });
-            return true;
-        }
-        return scan_ref_scoped(node, descend);
-    });
-    self.walk(tw);
-    // pass 2: for every used symbol we need to walk its
-    // initialization code to figure out if it uses other
-    // symbols (that may not be in_use).
-    tw = new TreeWalker(scan_ref_scoped);
-    in_use_ids.forEach(function (def) {
-        var init = initializations.get(def.id);
-        if (init) init.forEach(function(init) {
-            init.walk(tw);
-        });
-    });
-    // pass 3: we should drop declarations not in_use
-    var tt = new TreeTransformer(
-        function before(node, descend, in_list) {
-            var parent = tt.parent();
-            if (drop_vars) {
-                const sym = assign_as_unused(node);
-                if (sym instanceof AST_SymbolRef) {
-                    var def = sym.definition();
-                    var in_use = in_use_ids.has(def.id);
-                    if (node instanceof AST_Assign) {
-                        if (!in_use || fixed_ids.has(def.id) && fixed_ids.get(def.id) !== node) {
-                            return maintain_this_binding(parent, node, node.right.transform(tt));
-                        }
-                    } else if (!in_use) return in_list ? MAP.skip : make_node(AST_Number, node, {
-                        value: 0
-                    });
-                }
-            }
-            if (scope !== self) return;
-            var def;
-            if (node.name
-                && (node instanceof AST_ClassExpression
-                    && !keep_name(compressor.option("keep_classnames"), (def = node.name.definition()).name)
-                || node instanceof AST_Function
-                    && !keep_name(compressor.option("keep_fnames"), (def = node.name.definition()).name))) {
-                // any declarations with same name will overshadow
-                // name of this anonymous function and can therefore
-                // never be used anywhere
-                if (!in_use_ids.has(def.id) || def.orig.length > 1) node.name = null;
-            }
-            if (node instanceof AST_Lambda && !(node instanceof AST_Accessor)) {
-                var trim = !compressor.option("keep_fargs");
-                for (var a = node.argnames, i = a.length; --i >= 0;) {
-                    var sym = a[i];
-                    if (sym instanceof AST_Expansion) {
-                        sym = sym.expression;
-                    }
-                    if (sym instanceof AST_DefaultAssign) {
-                        sym = sym.left;
-                    }
-                    // Do not drop destructuring arguments.
-                    // They constitute a type assertion, so dropping
-                    // them would stop that TypeError which would happen
-                    // if someone called it with an incorrectly formatted
-                    // parameter.
-                    if (!(sym instanceof AST_Destructuring) && !in_use_ids.has(sym.definition().id)) {
-                        set_flag(sym, UNUSED);
-                        if (trim) {
-                            a.pop();
-                        }
-                    } else {
-                        trim = false;
-                    }
-                }
-            }
-            if ((node instanceof AST_Defun || node instanceof AST_DefClass) && node !== self) {
-                const def = node.name.definition();
-                const keep = def.global && !drop_funcs || in_use_ids.has(def.id);
-                // Class "extends" and static blocks may have side effects
-                const has_side_effects = !keep
-                    && node instanceof AST_Class
-                    && node.has_side_effects(compressor);
-                if (!keep && !has_side_effects) {
-                    def.eliminated++;
-                    return in_list ? MAP.skip : make_node(AST_EmptyStatement, node);
-                }
-            }
-            if (node instanceof AST_Definitions && !(parent instanceof AST_ForIn && parent.init === node)) {
-                var drop_block = !(parent instanceof AST_Toplevel) && !(node instanceof AST_Var);
-                // place uninitialized names at the start
-                var body = [], head = [], tail = [];
-                // for unused names whose initialization has
-                // side effects, we can cascade the init. code
-                // into the next one, or next statement.
-                var side_effects = [];
-                node.definitions.forEach(function(def) {
-                    if (def.value) def.value = def.value.transform(tt);
-                    var is_destructure = def.name instanceof AST_Destructuring;
-                    var sym = is_destructure
-                        ? new SymbolDef(null, { name: "<destructure>" }) /* fake SymbolDef */
-                        : def.name.definition();
-                    if (drop_block && sym.global) return tail.push(def);
-                    if (!(drop_vars || drop_block)
-                        || is_destructure
-                            && (def.name.names.length
-                                || def.name.is_array
-                                || compressor.option("pure_getters") != true)
-                        || in_use_ids.has(sym.id)
-                    ) {
-                        if (def.value && fixed_ids.has(sym.id) && fixed_ids.get(sym.id) !== def) {
-                            def.value = def.value.drop_side_effect_free(compressor);
-                        }
-                        if (def.name instanceof AST_SymbolVar) {
-                            var var_defs = var_defs_by_id.get(sym.id);
-                            if (var_defs.length > 1 && (!def.value || sym.orig.indexOf(def.name) > sym.eliminated)) {
-                                if (def.value) {
-                                    var ref = make_node(AST_SymbolRef, def.name, def.name);
-                                    sym.references.push(ref);
-                                    var assign = make_node(AST_Assign, def, {
-                                        operator: "=",
-                                        logical: false,
-                                        left: ref,
-                                        right: def.value
-                                    });
-                                    if (fixed_ids.get(sym.id) === def) {
-                                        fixed_ids.set(sym.id, assign);
-                                    }
-                                    side_effects.push(assign.transform(tt));
-                                }
-                                remove(var_defs, def);
-                                sym.eliminated++;
-                                return;
-                            }
-                        }
-                        if (def.value) {
-                            if (side_effects.length > 0) {
-                                if (tail.length > 0) {
-                                    side_effects.push(def.value);
-                                    def.value = make_sequence(def.value, side_effects);
-                                } else {
-                                    body.push(make_node(AST_SimpleStatement, node, {
-                                        body: make_sequence(node, side_effects)
-                                    }));
-                                }
-                                side_effects = [];
-                            }
-                            tail.push(def);
-                        } else {
-                            head.push(def);
-                        }
-                    } else if (sym.orig[0] instanceof AST_SymbolCatch) {
-                        var value = def.value && def.value.drop_side_effect_free(compressor);
-                        if (value) side_effects.push(value);
-                        def.value = null;
-                        head.push(def);
-                    } else {
-                        var value = def.value && def.value.drop_side_effect_free(compressor);
-                        if (value) {
-                            side_effects.push(value);
-                        }
-                        sym.eliminated++;
-                    }
-                });
-                if (head.length > 0 || tail.length > 0) {
-                    node.definitions = head.concat(tail);
-                    body.push(node);
-                }
-                if (side_effects.length > 0) {
-                    body.push(make_node(AST_SimpleStatement, node, {
-                        body: make_sequence(node, side_effects)
-                    }));
-                }
-                switch (body.length) {
-                  case 0:
-                    return in_list ? MAP.skip : make_node(AST_EmptyStatement, node);
-                  case 1:
-                    return body[0];
-                  default:
-                    return in_list ? MAP.splice(body) : make_node(AST_BlockStatement, node, {
-                        body: body
-                    });
-                }
-            }
-            // certain combination of unused name + side effect leads to:
-            //    https://github.com/mishoo/UglifyJS2/issues/44
-            //    https://github.com/mishoo/UglifyJS2/issues/1830
-            //    https://github.com/mishoo/UglifyJS2/issues/1838
-            // that's an invalid AST.
-            // We fix it at this stage by moving the `var` outside the `for`.
-            if (node instanceof AST_For) {
-                descend(node, this);
-                var block;
-                if (node.init instanceof AST_BlockStatement) {
-                    block = node.init;
-                    node.init = block.body.pop();
-                    block.body.push(node);
-                }
-                if (node.init instanceof AST_SimpleStatement) {
-                    node.init = node.init.body;
-                } else if (is_empty(node.init)) {
-                    node.init = null;
-                }
-                return !block ? node : in_list ? MAP.splice(block.body) : block;
-            }
-            if (node instanceof AST_LabeledStatement
-                && node.body instanceof AST_For
-            ) {
-                descend(node, this);
-                if (node.body instanceof AST_BlockStatement) {
-                    var block = node.body;
-                    node.body = block.body.pop();
-                    block.body.push(node);
-                    return in_list ? MAP.splice(block.body) : block;
-                }
-                return node;
-            }
-            if (node instanceof AST_BlockStatement) {
-                descend(node, this);
-                if (in_list && node.body.every(can_be_evicted_from_block)) {
-                    return MAP.splice(node.body);
-                }
-                return node;
-            }
-            if (node instanceof AST_Scope) {
-                const save_scope = scope;
-                scope = node;
-                descend(node, this);
-                scope = save_scope;
-                return node;
-            }
-        }
-    );
-
-    self.transform(tt);
-
-    function scan_ref_scoped(node, descend) {
-        var node_def;
-        const sym = assign_as_unused(node);
-        if (sym instanceof AST_SymbolRef
-            && !is_ref_of(node.left, AST_SymbolBlockDeclaration)
-            && self.variables.get(sym.name) === (node_def = sym.definition())
-        ) {
-            if (node instanceof AST_Assign) {
-                node.right.walk(tw);
-                if (!node_def.chained && node.left.fixed_value() === node.right) {
-                    fixed_ids.set(node_def.id, node);
-                }
-            }
-            return true;
-        }
-        if (node instanceof AST_SymbolRef) {
-            node_def = node.definition();
-            if (!in_use_ids.has(node_def.id)) {
-                in_use_ids.set(node_def.id, node_def);
-                if (node_def.orig[0] instanceof AST_SymbolCatch) {
-                    const redef = node_def.scope.is_block_scope()
-                        && node_def.scope.get_defun_scope().variables.get(node_def.name);
-                    if (redef) in_use_ids.set(redef.id, redef);
-                }
-            }
-            return true;
-        }
-        if (node instanceof AST_Scope) {
-            var save_scope = scope;
-            scope = node;
-            descend();
-            scope = save_scope;
-            return true;
-        }
-    }
-});
-
-AST_Scope.DEFMETHOD("hoist_declarations", function(compressor) {
-    var self = this;
-    if (compressor.has_directive("use asm")) return self;
-    // Hoisting makes no sense in an arrow func
-    if (!Array.isArray(self.body)) return self;
-
-    var hoist_funs = compressor.option("hoist_funs");
-    var hoist_vars = compressor.option("hoist_vars");
-
-    if (hoist_funs || hoist_vars) {
-        var dirs = [];
-        var hoisted = [];
-        var vars = new Map(), vars_found = 0, var_decl = 0;
-        // let's count var_decl first, we seem to waste a lot of
-        // space if we hoist `var` when there's only one.
-        walk(self, node => {
-            if (node instanceof AST_Scope && node !== self)
-                return true;
-            if (node instanceof AST_Var) {
-                ++var_decl;
-                return true;
-            }
-        });
-        hoist_vars = hoist_vars && var_decl > 1;
-        var tt = new TreeTransformer(
-            function before(node) {
-                if (node !== self) {
-                    if (node instanceof AST_Directive) {
-                        dirs.push(node);
-                        return make_node(AST_EmptyStatement, node);
-                    }
-                    if (hoist_funs && node instanceof AST_Defun
-                        && !(tt.parent() instanceof AST_Export)
-                        && tt.parent() === self) {
-                        hoisted.push(node);
-                        return make_node(AST_EmptyStatement, node);
-                    }
-                    if (
-                        hoist_vars
-                        && node instanceof AST_Var
-                        && !node.definitions.some(def => def.name instanceof AST_Destructuring)
-                    ) {
-                        node.definitions.forEach(function(def) {
-                            vars.set(def.name.name, def);
-                            ++vars_found;
-                        });
-                        var seq = node.to_assignments(compressor);
-                        var p = tt.parent();
-                        if (p instanceof AST_ForIn && p.init === node) {
-                            if (seq == null) {
-                                var def = node.definitions[0].name;
-                                return make_node(AST_SymbolRef, def, def);
-                            }
-                            return seq;
-                        }
-                        if (p instanceof AST_For && p.init === node) {
-                            return seq;
-                        }
-                        if (!seq) return make_node(AST_EmptyStatement, node);
-                        return make_node(AST_SimpleStatement, node, {
-                            body: seq
-                        });
-                    }
-                    if (node instanceof AST_Scope)
-                        return node; // to avoid descending in nested scopes
-                }
-            }
-        );
-        self = self.transform(tt);
-        if (vars_found > 0) {
-            // collect only vars which don't show up in self's arguments list
-            var defs = [];
-            const is_lambda = self instanceof AST_Lambda;
-            const args_as_names = is_lambda ? self.args_as_names() : null;
-            vars.forEach((def, name) => {
-                if (is_lambda && args_as_names.some((x) => x.name === def.name.name)) {
-                    vars.delete(name);
-                } else {
-                    def = def.clone();
-                    def.value = null;
-                    defs.push(def);
-                    vars.set(name, def);
-                }
-            });
-            if (defs.length > 0) {
-                // try to merge in assignments
-                for (var i = 0; i < self.body.length;) {
-                    if (self.body[i] instanceof AST_SimpleStatement) {
-                        var expr = self.body[i].body, sym, assign;
-                        if (expr instanceof AST_Assign
-                            && expr.operator == "="
-                            && (sym = expr.left) instanceof AST_Symbol
-                            && vars.has(sym.name)
-                        ) {
-                            var def = vars.get(sym.name);
-                            if (def.value) break;
-                            def.value = expr.right;
-                            remove(defs, def);
-                            defs.push(def);
-                            self.body.splice(i, 1);
-                            continue;
-                        }
-                        if (expr instanceof AST_Sequence
-                            && (assign = expr.expressions[0]) instanceof AST_Assign
-                            && assign.operator == "="
-                            && (sym = assign.left) instanceof AST_Symbol
-                            && vars.has(sym.name)
-                        ) {
-                            var def = vars.get(sym.name);
-                            if (def.value) break;
-                            def.value = assign.right;
-                            remove(defs, def);
-                            defs.push(def);
-                            self.body[i].body = make_sequence(expr, expr.expressions.slice(1));
-                            continue;
-                        }
-                    }
-                    if (self.body[i] instanceof AST_EmptyStatement) {
-                        self.body.splice(i, 1);
-                        continue;
-                    }
-                    if (self.body[i] instanceof AST_BlockStatement) {
-                        self.body.splice(i, 1, ...self.body[i].body);
-                        continue;
-                    }
-                    break;
-                }
-                defs = make_node(AST_Var, self, {
-                    definitions: defs
-                });
-                hoisted.push(defs);
-            }
-        }
-        self.body = dirs.concat(hoisted, self.body);
-    }
-    return self;
-});
-
-AST_Scope.DEFMETHOD("hoist_properties", function(compressor) {
-    var self = this;
-    if (!compressor.option("hoist_props") || compressor.has_directive("use asm")) return self;
-    var top_retain = self instanceof AST_Toplevel && compressor.top_retain || return_false;
-    var defs_by_id = new Map();
-    var hoister = new TreeTransformer(function(node, descend) {
-        if (node instanceof AST_Definitions
-            && hoister.parent() instanceof AST_Export) return node;
-        if (node instanceof AST_VarDef) {
-            const sym = node.name;
-            let def;
-            let value;
-            if (sym.scope === self
-                && (def = sym.definition()).escaped != 1
-                && !def.assignments
-                && !def.direct_access
-                && !def.single_use
-                && !compressor.exposed(def)
-                && !top_retain(def)
-                && (value = sym.fixed_value()) === node.value
-                && value instanceof AST_Object
-                && !value.properties.some(prop =>
-                    prop instanceof AST_Expansion || prop.computed_key()
-                )
-            ) {
-                descend(node, this);
-                const defs = new Map();
-                const assignments = [];
-                value.properties.forEach(({ key, value }) => {
-                    const scope = hoister.find_scope();
-                    const symbol = self.create_symbol(sym.CTOR, {
-                        source: sym,
-                        scope,
-                        conflict_scopes: new Set([
-                            scope,
-                            ...sym.definition().references.map(ref => ref.scope)
-                        ]),
-                        tentative_name: sym.name + "_" + key
-                    });
-
-                    defs.set(String(key), symbol.definition());
-
-                    assignments.push(make_node(AST_VarDef, node, {
-                        name: symbol,
-                        value
-                    }));
-                });
-                defs_by_id.set(def.id, defs);
-                return MAP.splice(assignments);
-            }
-        } else if (node instanceof AST_PropAccess
-            && node.expression instanceof AST_SymbolRef
-        ) {
-            const defs = defs_by_id.get(node.expression.definition().id);
-            if (defs) {
-                const def = defs.get(String(get_simple_key(node.property)));
-                const sym = make_node(AST_SymbolRef, node, {
-                    name: def.name,
-                    scope: node.expression.scope,
-                    thedef: def
-                });
-                sym.reference({});
-                return sym;
-            }
-        }
-    });
-    return self.transform(hoister);
-});
-
-def_optimize(AST_SimpleStatement, function(self, compressor) {
-    if (compressor.option("side_effects")) {
-        var body = self.body;
-        var node = body.drop_side_effect_free(compressor, true);
-        if (!node) {
-            return make_node(AST_EmptyStatement, self);
-        }
-        if (node !== body) {
-            return make_node(AST_SimpleStatement, self, { body: node });
-        }
-    }
-    return self;
-});
-
-def_optimize(AST_While, function(self, compressor) {
-    return compressor.option("loops") ? make_node(AST_For, self, self).optimize(compressor) : self;
-});
-
-def_optimize(AST_Do, function(self, compressor) {
-    if (!compressor.option("loops")) return self;
-    var cond = self.condition.tail_node().evaluate(compressor);
-    if (!(cond instanceof AST_Node)) {
-        if (cond) return make_node(AST_For, self, {
-            body: make_node(AST_BlockStatement, self.body, {
-                body: [
-                    self.body,
-                    make_node(AST_SimpleStatement, self.condition, {
-                        body: self.condition
-                    })
-                ]
-            })
-        }).optimize(compressor);
-        if (!has_break_or_continue(self, compressor.parent())) {
-            return make_node(AST_BlockStatement, self.body, {
-                body: [
-                    self.body,
-                    make_node(AST_SimpleStatement, self.condition, {
-                        body: self.condition
-                    })
-                ]
-            }).optimize(compressor);
-        }
-    }
-    return self;
-});
-
-function if_break_in_loop(self, compressor) {
-    var first = self.body instanceof AST_BlockStatement ? self.body.body[0] : self.body;
-    if (compressor.option("dead_code") && is_break(first)) {
-        var body = [];
-        if (self.init instanceof AST_Statement) {
-            body.push(self.init);
-        } else if (self.init) {
-            body.push(make_node(AST_SimpleStatement, self.init, {
-                body: self.init
-            }));
-        }
-        if (self.condition) {
-            body.push(make_node(AST_SimpleStatement, self.condition, {
-                body: self.condition
-            }));
-        }
-        trim_unreachable_code(compressor, self.body, body);
-        return make_node(AST_BlockStatement, self, {
-            body: body
-        });
-    }
-    if (first instanceof AST_If) {
-        if (is_break(first.body)) {
-            if (self.condition) {
-                self.condition = make_node(AST_Binary, self.condition, {
-                    left: self.condition,
-                    operator: "&&",
-                    right: first.condition.negate(compressor),
-                });
-            } else {
-                self.condition = first.condition.negate(compressor);
-            }
-            drop_it(first.alternative);
-        } else if (is_break(first.alternative)) {
-            if (self.condition) {
-                self.condition = make_node(AST_Binary, self.condition, {
-                    left: self.condition,
-                    operator: "&&",
-                    right: first.condition,
-                });
-            } else {
-                self.condition = first.condition;
-            }
-            drop_it(first.body);
-        }
-    }
-    return self;
-
-    function is_break(node) {
-        return node instanceof AST_Break
-            && compressor.loopcontrol_target(node) === compressor.self();
-    }
-
-    function drop_it(rest) {
-        rest = as_statement_array(rest);
-        if (self.body instanceof AST_BlockStatement) {
-            self.body = self.body.clone();
-            self.body.body = rest.concat(self.body.body.slice(1));
-            self.body = self.body.transform(compressor);
-        } else {
-            self.body = make_node(AST_BlockStatement, self.body, {
-                body: rest
-            }).transform(compressor);
-        }
-        self = if_break_in_loop(self, compressor);
-    }
-}
-
-def_optimize(AST_For, function(self, compressor) {
-    if (!compressor.option("loops")) return self;
-    if (compressor.option("side_effects") && self.init) {
-        self.init = self.init.drop_side_effect_free(compressor);
-    }
-    if (self.condition) {
-        var cond = self.condition.evaluate(compressor);
-        if (!(cond instanceof AST_Node)) {
-            if (cond) self.condition = null;
-            else if (!compressor.option("dead_code")) {
-                var orig = self.condition;
-                self.condition = make_node_from_constant(cond, self.condition);
-                self.condition = best_of_expression(self.condition.transform(compressor), orig);
-            }
-        }
-        if (compressor.option("dead_code")) {
-            if (cond instanceof AST_Node) cond = self.condition.tail_node().evaluate(compressor);
-            if (!cond) {
-                var body = [];
-                trim_unreachable_code(compressor, self.body, body);
-                if (self.init instanceof AST_Statement) {
-                    body.push(self.init);
-                } else if (self.init) {
-                    body.push(make_node(AST_SimpleStatement, self.init, {
-                        body: self.init
-                    }));
-                }
-                body.push(make_node(AST_SimpleStatement, self.condition, {
-                    body: self.condition
-                }));
-                return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);
-            }
-        }
-    }
-    return if_break_in_loop(self, compressor);
-});
-
-def_optimize(AST_If, function(self, compressor) {
-    if (is_empty(self.alternative)) self.alternative = null;
-
-    if (!compressor.option("conditionals")) return self;
-    // if condition can be statically determined, drop
-    // one of the blocks.  note, statically determined implies
-    // “has no side effects”; also it doesn't work for cases like
-    // `x && true`, though it probably should.
-    var cond = self.condition.evaluate(compressor);
-    if (!compressor.option("dead_code") && !(cond instanceof AST_Node)) {
-        var orig = self.condition;
-        self.condition = make_node_from_constant(cond, orig);
-        self.condition = best_of_expression(self.condition.transform(compressor), orig);
-    }
-    if (compressor.option("dead_code")) {
-        if (cond instanceof AST_Node) cond = self.condition.tail_node().evaluate(compressor);
-        if (!cond) {
-            var body = [];
-            trim_unreachable_code(compressor, self.body, body);
-            body.push(make_node(AST_SimpleStatement, self.condition, {
-                body: self.condition
-            }));
-            if (self.alternative) body.push(self.alternative);
-            return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);
-        } else if (!(cond instanceof AST_Node)) {
-            var body = [];
-            body.push(make_node(AST_SimpleStatement, self.condition, {
-                body: self.condition
-            }));
-            body.push(self.body);
-            if (self.alternative) {
-                trim_unreachable_code(compressor, self.alternative, body);
-            }
-            return make_node(AST_BlockStatement, self, { body: body }).optimize(compressor);
-        }
-    }
-    var negated = self.condition.negate(compressor);
-    var self_condition_length = self.condition.size();
-    var negated_length = negated.size();
-    var negated_is_best = negated_length < self_condition_length;
-    if (self.alternative && negated_is_best) {
-        negated_is_best = false; // because we already do the switch here.
-        // no need to swap values of self_condition_length and negated_length
-        // here because they are only used in an equality comparison later on.
-        self.condition = negated;
-        var tmp = self.body;
-        self.body = self.alternative || make_node(AST_EmptyStatement, self);
-        self.alternative = tmp;
-    }
-    if (is_empty(self.body) && is_empty(self.alternative)) {
-        return make_node(AST_SimpleStatement, self.condition, {
-            body: self.condition.clone()
-        }).optimize(compressor);
-    }
-    if (self.body instanceof AST_SimpleStatement
-        && self.alternative instanceof AST_SimpleStatement) {
-        return make_node(AST_SimpleStatement, self, {
-            body: make_node(AST_Conditional, self, {
-                condition   : self.condition,
-                consequent  : self.body.body,
-                alternative : self.alternative.body
-            })
-        }).optimize(compressor);
-    }
-    if (is_empty(self.alternative) && self.body instanceof AST_SimpleStatement) {
-        if (self_condition_length === negated_length && !negated_is_best
-            && self.condition instanceof AST_Binary && self.condition.operator == "||") {
-            // although the code length of self.condition and negated are the same,
-            // negated does not require additional surrounding parentheses.
-            // see https://github.com/mishoo/UglifyJS2/issues/979
-            negated_is_best = true;
-        }
-        if (negated_is_best) return make_node(AST_SimpleStatement, self, {
-            body: make_node(AST_Binary, self, {
-                operator : "||",
-                left     : negated,
-                right    : self.body.body
-            })
-        }).optimize(compressor);
-        return make_node(AST_SimpleStatement, self, {
-            body: make_node(AST_Binary, self, {
-                operator : "&&",
-                left     : self.condition,
-                right    : self.body.body
-            })
-        }).optimize(compressor);
-    }
-    if (self.body instanceof AST_EmptyStatement
-        && self.alternative instanceof AST_SimpleStatement) {
-        return make_node(AST_SimpleStatement, self, {
-            body: make_node(AST_Binary, self, {
-                operator : "||",
-                left     : self.condition,
-                right    : self.alternative.body
-            })
-        }).optimize(compressor);
-    }
-    if (self.body instanceof AST_Exit
-        && self.alternative instanceof AST_Exit
-        && self.body.TYPE == self.alternative.TYPE) {
-        return make_node(self.body.CTOR, self, {
-            value: make_node(AST_Conditional, self, {
-                condition   : self.condition,
-                consequent  : self.body.value || make_node(AST_Undefined, self.body),
-                alternative : self.alternative.value || make_node(AST_Undefined, self.alternative)
-            }).transform(compressor)
-        }).optimize(compressor);
-    }
-    if (self.body instanceof AST_If
-        && !self.body.alternative
-        && !self.alternative) {
-        self = make_node(AST_If, self, {
-            condition: make_node(AST_Binary, self.condition, {
-                operator: "&&",
-                left: self.condition,
-                right: self.body.condition
-            }),
-            body: self.body.body,
-            alternative: null
-        });
-    }
-    if (aborts(self.body)) {
-        if (self.alternative) {
-            var alt = self.alternative;
-            self.alternative = null;
-            return make_node(AST_BlockStatement, self, {
-                body: [ self, alt ]
-            }).optimize(compressor);
-        }
-    }
-    if (aborts(self.alternative)) {
-        var body = self.body;
-        self.body = self.alternative;
-        self.condition = negated_is_best ? negated : self.condition.negate(compressor);
-        self.alternative = null;
-        return make_node(AST_BlockStatement, self, {
-            body: [ self, body ]
-        }).optimize(compressor);
-    }
-    return self;
-});
-
-def_optimize(AST_Switch, function(self, compressor) {
-    if (!compressor.option("switches")) return self;
-    var branch;
-    var value = self.expression.evaluate(compressor);
-    if (!(value instanceof AST_Node)) {
-        var orig = self.expression;
-        self.expression = make_node_from_constant(value, orig);
-        self.expression = best_of_expression(self.expression.transform(compressor), orig);
-    }
-    if (!compressor.option("dead_code")) return self;
-    if (value instanceof AST_Node) {
-        value = self.expression.tail_node().evaluate(compressor);
-    }
-    var decl = [];
-    var body = [];
-    var default_branch;
-    var exact_match;
-    for (var i = 0, len = self.body.length; i < len && !exact_match; i++) {
-        branch = self.body[i];
-        if (branch instanceof AST_Default) {
-            if (!default_branch) {
-                default_branch = branch;
-            } else {
-                eliminate_branch(branch, body[body.length - 1]);
-            }
-        } else if (!(value instanceof AST_Node)) {
-            var exp = branch.expression.evaluate(compressor);
-            if (!(exp instanceof AST_Node) && exp !== value) {
-                eliminate_branch(branch, body[body.length - 1]);
-                continue;
-            }
-            if (exp instanceof AST_Node) exp = branch.expression.tail_node().evaluate(compressor);
-            if (exp === value) {
-                exact_match = branch;
-                if (default_branch) {
-                    var default_index = body.indexOf(default_branch);
-                    body.splice(default_index, 1);
-                    eliminate_branch(default_branch, body[default_index - 1]);
-                    default_branch = null;
-                }
-            }
-        }
-        body.push(branch);
-    }
-    while (i < len) eliminate_branch(self.body[i++], body[body.length - 1]);
-    self.body = body;
-
-    let default_or_exact = default_branch || exact_match;
-    default_branch = null;
-    exact_match = null;
-
-    // group equivalent branches so they will be located next to each other,
-    // that way the next micro-optimization will merge them.
-    // ** bail micro-optimization if not a simple switch case with breaks
-    if (body.every((branch, i) =>
-        (branch === default_or_exact || branch.expression instanceof AST_Constant)
-        && (branch.body.length === 0 || aborts(branch) || body.length - 1 === i))
-    ) {
-        for (let i = 0; i < body.length; i++) {
-            const branch = body[i];
-            for (let j = i + 1; j < body.length; j++) {
-                const next = body[j];
-                if (next.body.length === 0) continue;
-                const last_branch = j === (body.length - 1);
-                const equivalentBranch = branches_equivalent(next, branch, false);
-                if (equivalentBranch || (last_branch && branches_equivalent(next, branch, true))) {
-                    if (!equivalentBranch && last_branch) {
-                        next.body.push(make_node(AST_Break));
-                    }
-
-                    // let's find previous siblings with inert fallthrough...
-                    let x = j - 1;
-                    let fallthroughDepth = 0;
-                    while (x > i) {
-                        if (is_inert_body(body[x--])) {
-                            fallthroughDepth++;
-                        } else {
-                            break;
-                        }
-                    }
-
-                    const plucked = body.splice(j - fallthroughDepth, 1 + fallthroughDepth);
-                    body.splice(i + 1, 0, ...plucked);
-                    i += plucked.length;
-                }
-            }
-        }
-    }
-
-    // merge equivalent branches in a row
-    for (let i = 0; i < body.length; i++) {
-        let branch = body[i];
-        if (branch.body.length === 0) continue;
-        if (!aborts(branch)) continue;
-
-        for (let j = i + 1; j < body.length; i++, j++) {
-            let next = body[j];
-            if (next.body.length === 0) continue;
-            if (
-                branches_equivalent(next, branch, false)
-                || (j === body.length - 1 && branches_equivalent(next, branch, true))
-            ) {
-                branch.body = [];
-                branch = next;
-                continue;
-            }
-            break;
-        }
-    }
-
-    // Prune any empty branches at the end of the switch statement.
-    {
-        let i = body.length - 1;
-        for (; i >= 0; i--) {
-            let bbody = body[i].body;
-            if (is_break(bbody[bbody.length - 1], compressor)) bbody.pop();
-            if (!is_inert_body(body[i])) break;
-        }
-        // i now points to the index of a branch that contains a body. By incrementing, it's
-        // pointing to the first branch that's empty.
-        i++;
-        if (!default_or_exact || body.indexOf(default_or_exact) >= i) {
-            // The default behavior is to do nothing. We can take advantage of that to
-            // remove all case expressions that are side-effect free that also do
-            // nothing, since they'll default to doing nothing. But we can't remove any
-            // case expressions before one that would side-effect, since they may cause
-            // the side-effect to be skipped.
-            for (let j = body.length - 1; j >= i; j--) {
-                let branch = body[j];
-                if (branch === default_or_exact) {
-                    default_or_exact = null;
-                    body.pop();
-                } else if (!branch.expression.has_side_effects(compressor)) {
-                    body.pop();
-                } else {
-                    break;
-                }
-            }
-        }
-    }
-
-
-    // Prune side-effect free branches that fall into default.
-    DEFAULT: if (default_or_exact) {
-        let default_index = body.indexOf(default_or_exact);
-        let default_body_index = default_index;
-        for (; default_body_index < body.length - 1; default_body_index++) {
-            if (!is_inert_body(body[default_body_index])) break;
-        }
-        if (default_body_index < body.length - 1) {
-            break DEFAULT;
-        }
-
-        let side_effect_index = body.length - 1;
-        for (; side_effect_index >= 0; side_effect_index--) {
-            let branch = body[side_effect_index];
-            if (branch === default_or_exact) continue;
-            if (branch.expression.has_side_effects(compressor)) break;
-        }
-        // If the default behavior comes after any side-effect case expressions,
-        // then we can fold all side-effect free cases into the default branch.
-        // If the side-effect case is after the default, then any side-effect
-        // free cases could prevent the side-effect from occurring.
-        if (default_body_index > side_effect_index) {
-            let prev_body_index = default_index - 1;
-            for (; prev_body_index >= 0; prev_body_index--) {
-                if (!is_inert_body(body[prev_body_index])) break;
-            }
-            let before = Math.max(side_effect_index, prev_body_index) + 1;
-            let after = default_index;
-            if (side_effect_index > default_index) {
-                // If the default falls into the same body as a side-effect
-                // case, then we need preserve that case and only prune the
-                // cases after it.
-                after = side_effect_index;
-                body[side_effect_index].body = body[default_body_index].body;
-            } else {
-                // The default will be the last branch.
-                default_or_exact.body = body[default_body_index].body;
-            }
-
-            // Prune everything after the default (or last side-effect case)
-            // until the next case with a body.
-            body.splice(after + 1, default_body_index - after);
-            // Prune everything before the default that falls into it.
-            body.splice(before, default_index - before);
-        }
-    }
-
-    // See if we can remove the switch entirely if all cases (the default) fall into the same case body.
-    DEFAULT: if (default_or_exact) {
-        let i = body.findIndex(branch => !is_inert_body(branch));
-        let caseBody;
-        // `i` is equal to one of the following:
-        // - `-1`, there is no body in the switch statement.
-        // - `body.length - 1`, all cases fall into the same body.
-        // - anything else, there are multiple bodies in the switch.
-        if (i === body.length - 1) {
-            // All cases fall into the case body.
-            let branch = body[i];
-            if (has_nested_break(self)) break DEFAULT;
-
-            // This is the last case body, and we've already pruned any breaks, so it's
-            // safe to hoist.
-            caseBody = make_node(AST_BlockStatement, branch, {
-                body: branch.body
-            });
-            branch.body = [];
-        } else if (i !== -1) {
-            // If there are multiple bodies, then we cannot optimize anything.
-            break DEFAULT;
-        }
-
-        let sideEffect = body.find(branch => {
-            return (
-                branch !== default_or_exact
-                && branch.expression.has_side_effects(compressor)
-            );
-        });
-        // If no cases cause a side-effect, we can eliminate the switch entirely.
-        if (!sideEffect) {
-            return make_node(AST_BlockStatement, self, {
-                body: decl.concat(
-                    statement(self.expression),
-                    default_or_exact.expression ? statement(default_or_exact.expression) : [],
-                    caseBody || []
-                )
-            }).optimize(compressor);
-        }
-
-        // If we're this far, either there was no body or all cases fell into the same body.
-        // If there was no body, then we don't need a default branch (because the default is
-        // do nothing). If there was a body, we'll extract it to after the switch, so the
-        // switch's new default is to do nothing and we can still prune it.
-        const default_index = body.indexOf(default_or_exact);
-        body.splice(default_index, 1);
-        default_or_exact = null;
-
-        if (caseBody) {
-            // Recurse into switch statement one more time so that we can append the case body
-            // outside of the switch. This recursion will only happen once since we've pruned
-            // the default case.
-            return make_node(AST_BlockStatement, self, {
-                body: decl.concat(self, caseBody)
-            }).optimize(compressor);
-        }
-        // If we fall here, there is a default branch somewhere, there are no case bodies,
-        // and there's a side-effect somewhere. Just let the below paths take care of it.
-    }
-
-    if (body.length > 0) {
-        body[0].body = decl.concat(body[0].body);
-    }
-
-    if (body.length == 0) {
-        return make_node(AST_BlockStatement, self, {
-            body: decl.concat(statement(self.expression))
-        }).optimize(compressor);
-    }
-    if (body.length == 1 && !has_nested_break(self)) {
-        // This is the last case body, and we've already pruned any breaks, so it's
-        // safe to hoist.
-        let branch = body[0];
-        return make_node(AST_If, self, {
-            condition: make_node(AST_Binary, self, {
-                operator: "===",
-                left: self.expression,
-                right: branch.expression,
-            }),
-            body: make_node(AST_BlockStatement, branch, {
-                body: branch.body
-            }),
-            alternative: null
-        }).optimize(compressor);
-    }
-    if (body.length === 2 && default_or_exact && !has_nested_break(self)) {
-        let branch = body[0] === default_or_exact ? body[1] : body[0];
-        let exact_exp = default_or_exact.expression && statement(default_or_exact.expression);
-        if (aborts(body[0])) {
-            // Only the first branch body could have a break (at the last statement)
-            let first = body[0];
-            if (is_break(first.body[first.body.length - 1], compressor)) {
-                first.body.pop();
-            }
-            return make_node(AST_If, self, {
-                condition: make_node(AST_Binary, self, {
-                    operator: "===",
-                    left: self.expression,
-                    right: branch.expression,
-                }),
-                body: make_node(AST_BlockStatement, branch, {
-                    body: branch.body
-                }),
-                alternative: make_node(AST_BlockStatement, default_or_exact, {
-                    body: [].concat(
-                        exact_exp || [],
-                        default_or_exact.body
-                    )
-                })
-            }).optimize(compressor);
-        }
-        let operator = "===";
-        let consequent = make_node(AST_BlockStatement, branch, {
-            body: branch.body,
-        });
-        let always = make_node(AST_BlockStatement, default_or_exact, {
-            body: [].concat(
-                exact_exp || [],
-                default_or_exact.body
-            )
-        });
-        if (body[0] === default_or_exact) {
-            operator = "!==";
-            let tmp = always;
-            always = consequent;
-            consequent = tmp;
-        }
-        return make_node(AST_BlockStatement, self, {
-            body: [
-                make_node(AST_If, self, {
-                    condition: make_node(AST_Binary, self, {
-                        operator: operator,
-                        left: self.expression,
-                        right: branch.expression,
-                    }),
-                    body: consequent,
-                    alternative: null
-                })
-            ].concat(always)
-        }).optimize(compressor);
-    }
-    return self;
-
-    function eliminate_branch(branch, prev) {
-        if (prev && !aborts(prev)) {
-            prev.body = prev.body.concat(branch.body);
-        } else {
-            trim_unreachable_code(compressor, branch, decl);
-        }
-    }
-    function branches_equivalent(branch, prev, insertBreak) {
-        let bbody = branch.body;
-        let pbody = prev.body;
-        if (insertBreak) {
-            bbody = bbody.concat(make_node(AST_Break));
-        }
-        if (bbody.length !== pbody.length) return false;
-        let bblock = make_node(AST_BlockStatement, branch, { body: bbody });
-        let pblock = make_node(AST_BlockStatement, prev, { body: pbody });
-        return bblock.equivalent_to(pblock);
-    }
-    function statement(expression) {
-        return make_node(AST_SimpleStatement, expression, {
-            body: expression
-        });
-    }
-    function has_nested_break(root) {
-        let has_break = false;
-        let tw = new TreeWalker(node => {
-            if (has_break) return true;
-            if (node instanceof AST_Lambda) return true;
-            if (node instanceof AST_SimpleStatement) return true;
-            if (!is_break(node, tw)) return;
-            let parent = tw.parent();
-            if (
-                parent instanceof AST_SwitchBranch
-                && parent.body[parent.body.length - 1] === node
-            ) {
-                return;
-            }
-            has_break = true;
-        });
-        root.walk(tw);
-        return has_break;
-    }
-    function is_break(node, stack) {
-        return node instanceof AST_Break
-            && stack.loopcontrol_target(node) === self;
-    }
-    function is_inert_body(branch) {
-        return !aborts(branch) && !make_node(AST_BlockStatement, branch, {
-            body: branch.body
-        }).has_side_effects(compressor);
-    }
-});
-
-def_optimize(AST_Try, function(self, compressor) {
-    tighten_body(self.body, compressor);
-    if (self.bcatch && self.bfinally && self.bfinally.body.every(is_empty)) self.bfinally = null;
-    if (compressor.option("dead_code") && self.body.every(is_empty)) {
-        var body = [];
-        if (self.bcatch) {
-            trim_unreachable_code(compressor, self.bcatch, body);
-        }
-        if (self.bfinally) body.push(...self.bfinally.body);
-        return make_node(AST_BlockStatement, self, {
-            body: body
-        }).optimize(compressor);
-    }
-    return self;
-});
-
-AST_Definitions.DEFMETHOD("remove_initializers", function() {
-    var decls = [];
-    this.definitions.forEach(function(def) {
-        if (def.name instanceof AST_SymbolDeclaration) {
-            def.value = null;
-            decls.push(def);
-        } else {
-            walk(def.name, node => {
-                if (node instanceof AST_SymbolDeclaration) {
-                    decls.push(make_node(AST_VarDef, def, {
-                        name: node,
-                        value: null
-                    }));
-                }
-            });
-        }
-    });
-    this.definitions = decls;
-});
-
-AST_Definitions.DEFMETHOD("to_assignments", function(compressor) {
-    var reduce_vars = compressor.option("reduce_vars");
-    var assignments = [];
-
-    for (const def of this.definitions) {
-        if (def.value) {
-            var name = make_node(AST_SymbolRef, def.name, def.name);
-            assignments.push(make_node(AST_Assign, def, {
-                operator : "=",
-                logical: false,
-                left     : name,
-                right    : def.value
-            }));
-            if (reduce_vars) name.definition().fixed = false;
-        } else if (def.value) {
-            // Because it's a destructuring, do not turn into an assignment.
-            var varDef = make_node(AST_VarDef, def, {
-                name: def.name,
-                value: def.value
-            });
-            var var_ = make_node(AST_Var, def, {
-                definitions: [ varDef ]
-            });
-            assignments.push(var_);
-        }
-        const thedef = def.name.definition();
-        thedef.eliminated++;
-        thedef.replaced--;
-    }
-
-    if (assignments.length == 0) return null;
-    return make_sequence(this, assignments);
-});
-
-def_optimize(AST_Definitions, function(self) {
-    if (self.definitions.length == 0)
-        return make_node(AST_EmptyStatement, self);
-    return self;
-});
-
-def_optimize(AST_VarDef, function(self, compressor) {
-    if (
-        self.name instanceof AST_SymbolLet
-        && self.value != null
-        && is_undefined(self.value, compressor)
-    ) {
-        self.value = null;
-    }
-    return self;
-});
-
-def_optimize(AST_Import, function(self) {
-    return self;
-});
-
-def_optimize(AST_Call, function(self, compressor) {
-    var exp = self.expression;
-    var fn = exp;
-    inline_array_like_spread(self.args);
-    var simple_args = self.args.every((arg) =>
-        !(arg instanceof AST_Expansion)
-    );
-
-    if (compressor.option("reduce_vars")
-        && fn instanceof AST_SymbolRef
-        && !has_annotation(self, _NOINLINE)
-    ) {
-        const fixed = fn.fixed_value();
-        if (!retain_top_func(fixed, compressor)) {
-            fn = fixed;
-        }
-    }
-
-    var is_func = fn instanceof AST_Lambda;
-
-    if (is_func && fn.pinned()) return self;
-
-    if (compressor.option("unused")
-        && simple_args
-        && is_func
-        && !fn.uses_arguments) {
-        var pos = 0, last = 0;
-        for (var i = 0, len = self.args.length; i < len; i++) {
-            if (fn.argnames[i] instanceof AST_Expansion) {
-                if (has_flag(fn.argnames[i].expression, UNUSED)) while (i < len) {
-                    var node = self.args[i++].drop_side_effect_free(compressor);
-                    if (node) {
-                        self.args[pos++] = node;
-                    }
-                } else while (i < len) {
-                    self.args[pos++] = self.args[i++];
-                }
-                last = pos;
-                break;
-            }
-            var trim = i >= fn.argnames.length;
-            if (trim || has_flag(fn.argnames[i], UNUSED)) {
-                var node = self.args[i].drop_side_effect_free(compressor);
-                if (node) {
-                    self.args[pos++] = node;
-                } else if (!trim) {
-                    self.args[pos++] = make_node(AST_Number, self.args[i], {
-                        value: 0
-                    });
-                    continue;
-                }
-            } else {
-                self.args[pos++] = self.args[i];
-            }
-            last = pos;
-        }
-        self.args.length = last;
-    }
-
-    if (compressor.option("unsafe")) {
-        if (exp instanceof AST_Dot && exp.start.value === "Array" && exp.property === "from" && self.args.length === 1) {
-            const [argument] = self.args;
-            if (argument instanceof AST_Array) {
-                return make_node(AST_Array, argument, {
-                    elements: argument.elements
-                }).optimize(compressor);
-            }
-        }
-        if (is_undeclared_ref(exp)) switch (exp.name) {
-          case "Array":
-            if (self.args.length != 1) {
-                return make_node(AST_Array, self, {
-                    elements: self.args
-                }).optimize(compressor);
-            } else if (self.args[0] instanceof AST_Number && self.args[0].value <= 11) {
-                const elements = [];
-                for (let i = 0; i < self.args[0].value; i++) elements.push(new AST_Hole);
-                return new AST_Array({ elements });
-            }
-            break;
-          case "Object":
-            if (self.args.length == 0) {
-                return make_node(AST_Object, self, {
-                    properties: []
-                });
-            }
-            break;
-          case "String":
-            if (self.args.length == 0) return make_node(AST_String, self, {
-                value: ""
-            });
-            if (self.args.length <= 1) return make_node(AST_Binary, self, {
-                left: self.args[0],
-                operator: "+",
-                right: make_node(AST_String, self, { value: "" })
-            }).optimize(compressor);
-            break;
-          case "Number":
-            if (self.args.length == 0) return make_node(AST_Number, self, {
-                value: 0
-            });
-            if (self.args.length == 1 && compressor.option("unsafe_math")) {
-                return make_node(AST_UnaryPrefix, self, {
-                    expression: self.args[0],
-                    operator: "+"
-                }).optimize(compressor);
-            }
-            break;
-          case "Symbol":
-            if (self.args.length == 1 && self.args[0] instanceof AST_String && compressor.option("unsafe_symbols"))
-                self.args.length = 0;
-                break;
-          case "Boolean":
-            if (self.args.length == 0) return make_node(AST_False, self);
-            if (self.args.length == 1) return make_node(AST_UnaryPrefix, self, {
-                expression: make_node(AST_UnaryPrefix, self, {
-                    expression: self.args[0],
-                    operator: "!"
-                }),
-                operator: "!"
-            }).optimize(compressor);
-            break;
-          case "RegExp":
-            var params = [];
-            if (self.args.length >= 1
-                && self.args.length <= 2
-                && self.args.every((arg) => {
-                    var value = arg.evaluate(compressor);
-                    params.push(value);
-                    return arg !== value;
-                })
-                && regexp_is_safe(params[0])
-            ) {
-                let [ source, flags ] = params;
-                source = regexp_source_fix(new RegExp(source).source);
-                const rx = make_node(AST_RegExp, self, {
-                    value: { source, flags }
-                });
-                if (rx._eval(compressor) !== rx) {
-                    return rx;
-                }
-            }
-            break;
-        } else if (exp instanceof AST_Dot) switch(exp.property) {
-          case "toString":
-            if (self.args.length == 0 && !exp.expression.may_throw_on_access(compressor)) {
-                return make_node(AST_Binary, self, {
-                    left: make_node(AST_String, self, { value: "" }),
-                    operator: "+",
-                    right: exp.expression
-                }).optimize(compressor);
-            }
-            break;
-          case "join":
-            if (exp.expression instanceof AST_Array) EXIT: {
-                var separator;
-                if (self.args.length > 0) {
-                    separator = self.args[0].evaluate(compressor);
-                    if (separator === self.args[0]) break EXIT; // not a constant
-                }
-                var elements = [];
-                var consts = [];
-                for (var i = 0, len = exp.expression.elements.length; i < len; i++) {
-                    var el = exp.expression.elements[i];
-                    if (el instanceof AST_Expansion) break EXIT;
-                    var value = el.evaluate(compressor);
-                    if (value !== el) {
-                        consts.push(value);
-                    } else {
-                        if (consts.length > 0) {
-                            elements.push(make_node(AST_String, self, {
-                                value: consts.join(separator)
-                            }));
-                            consts.length = 0;
-                        }
-                        elements.push(el);
-                    }
-                }
-                if (consts.length > 0) {
-                    elements.push(make_node(AST_String, self, {
-                        value: consts.join(separator)
-                    }));
-                }
-                if (elements.length == 0) return make_node(AST_String, self, { value: "" });
-                if (elements.length == 1) {
-                    if (elements[0].is_string(compressor)) {
-                        return elements[0];
-                    }
-                    return make_node(AST_Binary, elements[0], {
-                        operator : "+",
-                        left     : make_node(AST_String, self, { value: "" }),
-                        right    : elements[0]
-                    });
-                }
-                if (separator == "") {
-                    var first;
-                    if (elements[0].is_string(compressor)
-                        || elements[1].is_string(compressor)) {
-                        first = elements.shift();
-                    } else {
-                        first = make_node(AST_String, self, { value: "" });
-                    }
-                    return elements.reduce(function(prev, el) {
-                        return make_node(AST_Binary, el, {
-                            operator : "+",
-                            left     : prev,
-                            right    : el
-                        });
-                    }, first).optimize(compressor);
-                }
-                // need this awkward cloning to not affect original element
-                // best_of will decide which one to get through.
-                var node = self.clone();
-                node.expression = node.expression.clone();
-                node.expression.expression = node.expression.expression.clone();
-                node.expression.expression.elements = elements;
-                return best_of(compressor, self, node);
-            }
-            break;
-          case "charAt":
-            if (exp.expression.is_string(compressor)) {
-                var arg = self.args[0];
-                var index = arg ? arg.evaluate(compressor) : 0;
-                if (index !== arg) {
-                    return make_node(AST_Sub, exp, {
-                        expression: exp.expression,
-                        property: make_node_from_constant(index | 0, arg || exp)
-                    }).optimize(compressor);
-                }
-            }
-            break;
-          case "apply":
-            if (self.args.length == 2 && self.args[1] instanceof AST_Array) {
-                var args = self.args[1].elements.slice();
-                args.unshift(self.args[0]);
-                return make_node(AST_Call, self, {
-                    expression: make_node(AST_Dot, exp, {
-                        expression: exp.expression,
-                        optional: false,
-                        property: "call"
-                    }),
-                    args: args
-                }).optimize(compressor);
-            }
-            break;
-          case "call":
-            var func = exp.expression;
-            if (func instanceof AST_SymbolRef) {
-                func = func.fixed_value();
-            }
-            if (func instanceof AST_Lambda && !func.contains_this()) {
-                return (self.args.length ? make_sequence(this, [
-                    self.args[0],
-                    make_node(AST_Call, self, {
-                        expression: exp.expression,
-                        args: self.args.slice(1)
-                    })
-                ]) : make_node(AST_Call, self, {
-                    expression: exp.expression,
-                    args: []
-                })).optimize(compressor);
-            }
-            break;
-        }
-    }
-
-    if (compressor.option("unsafe_Function")
-        && is_undeclared_ref(exp)
-        && exp.name == "Function") {
-        // new Function() => function(){}
-        if (self.args.length == 0) return make_node(AST_Function, self, {
-            argnames: [],
-            body: []
-        }).optimize(compressor);
-        var nth_identifier = compressor.mangle_options && compressor.mangle_options.nth_identifier || base54;
-        if (self.args.every((x) => x instanceof AST_String)) {
-            // quite a corner-case, but we can handle it:
-            //   https://github.com/mishoo/UglifyJS2/issues/203
-            // if the code argument is a constant, then we can minify it.
-            try {
-                var code = "n(function(" + self.args.slice(0, -1).map(function(arg) {
-                    return arg.value;
-                }).join(",") + "){" + self.args[self.args.length - 1].value + "})";
-                var ast = parse(code);
-                var mangle = { ie8: compressor.option("ie8"), nth_identifier: nth_identifier };
-                ast.figure_out_scope(mangle);
-                var comp = new Compressor(compressor.options, {
-                    mangle_options: compressor.mangle_options
-                });
-                ast = ast.transform(comp);
-                ast.figure_out_scope(mangle);
-                ast.compute_char_frequency(mangle);
-                ast.mangle_names(mangle);
-                var fun;
-                walk(ast, node => {
-                    if (is_func_expr(node)) {
-                        fun = node;
-                        return walk_abort;
-                    }
-                });
-                var code = OutputStream();
-                AST_BlockStatement.prototype._codegen.call(fun, fun, code);
-                self.args = [
-                    make_node(AST_String, self, {
-                        value: fun.argnames.map(function(arg) {
-                            return arg.print_to_string();
-                        }).join(",")
-                    }),
-                    make_node(AST_String, self.args[self.args.length - 1], {
-                        value: code.get().replace(/^{|}$/g, "")
-                    })
-                ];
-                return self;
-            } catch (ex) {
-                if (!(ex instanceof JS_Parse_Error)) {
-                    throw ex;
-                }
-
-                // Otherwise, it crashes at runtime. Or maybe it's nonstandard syntax.
-            }
-        }
-    }
-
-    return inline_into_call(self, fn, compressor);
-});
-
-def_optimize(AST_New, function(self, compressor) {
-    if (
-        compressor.option("unsafe") &&
-        is_undeclared_ref(self.expression) &&
-        ["Object", "RegExp", "Function", "Error", "Array"].includes(self.expression.name)
-    ) return make_node(AST_Call, self, self).transform(compressor);
-    return self;
-});
-
-def_optimize(AST_Sequence, function(self, compressor) {
-    if (!compressor.option("side_effects")) return self;
-    var expressions = [];
-    filter_for_side_effects();
-    var end = expressions.length - 1;
-    trim_right_for_undefined();
-    if (end == 0) {
-        self = maintain_this_binding(compressor.parent(), compressor.self(), expressions[0]);
-        if (!(self instanceof AST_Sequence)) self = self.optimize(compressor);
-        return self;
-    }
-    self.expressions = expressions;
-    return self;
-
-    function filter_for_side_effects() {
-        var first = first_in_statement(compressor);
-        var last = self.expressions.length - 1;
-        self.expressions.forEach(function(expr, index) {
-            if (index < last) expr = expr.drop_side_effect_free(compressor, first);
-            if (expr) {
-                merge_sequence(expressions, expr);
-                first = false;
-            }
-        });
-    }
-
-    function trim_right_for_undefined() {
-        while (end > 0 && is_undefined(expressions[end], compressor)) end--;
-        if (end < expressions.length - 1) {
-            expressions[end] = make_node(AST_UnaryPrefix, self, {
-                operator   : "void",
-                expression : expressions[end]
-            });
-            expressions.length = end + 1;
-        }
-    }
-});
-
-AST_Unary.DEFMETHOD("lift_sequences", function(compressor) {
-    if (compressor.option("sequences")) {
-        if (this.expression instanceof AST_Sequence) {
-            var x = this.expression.expressions.slice();
-            var e = this.clone();
-            e.expression = x.pop();
-            x.push(e);
-            return make_sequence(this, x).optimize(compressor);
-        }
-    }
-    return this;
-});
-
-def_optimize(AST_UnaryPostfix, function(self, compressor) {
-    return self.lift_sequences(compressor);
-});
-
-def_optimize(AST_UnaryPrefix, function(self, compressor) {
-    var e = self.expression;
-    if (
-        self.operator == "delete" &&
-        !(
-            e instanceof AST_SymbolRef ||
-            e instanceof AST_PropAccess ||
-            e instanceof AST_Chain ||
-            is_identifier_atom(e)
-        )
-    ) {
-        return make_sequence(self, [e, make_node(AST_True, self)]).optimize(compressor);
-    }
-    var seq = self.lift_sequences(compressor);
-    if (seq !== self) {
-        return seq;
-    }
-    if (compressor.option("side_effects") && self.operator == "void") {
-        e = e.drop_side_effect_free(compressor);
-        if (e) {
-            self.expression = e;
-            return self;
-        } else {
-            return make_node(AST_Undefined, self).optimize(compressor);
-        }
-    }
-    if (compressor.in_boolean_context()) {
-        switch (self.operator) {
-          case "!":
-            if (e instanceof AST_UnaryPrefix && e.operator == "!") {
-                // !!foo ==> foo, if we're in boolean context
-                return e.expression;
-            }
-            if (e instanceof AST_Binary) {
-                self = best_of(compressor, self, e.negate(compressor, first_in_statement(compressor)));
-            }
-            break;
-          case "typeof":
-            // typeof always returns a non-empty string, thus it's
-            // always true in booleans
-            // And we don't need to check if it's undeclared, because in typeof, that's OK
-            return (e instanceof AST_SymbolRef ? make_node(AST_True, self) : make_sequence(self, [
-                e,
-                make_node(AST_True, self)
-            ])).optimize(compressor);
-        }
-    }
-    if (self.operator == "-" && e instanceof AST_Infinity) {
-        e = e.transform(compressor);
-    }
-    if (e instanceof AST_Binary
-        && (self.operator == "+" || self.operator == "-")
-        && (e.operator == "*" || e.operator == "/" || e.operator == "%")) {
-        return make_node(AST_Binary, self, {
-            operator: e.operator,
-            left: make_node(AST_UnaryPrefix, e.left, {
-                operator: self.operator,
-                expression: e.left
-            }),
-            right: e.right
-        });
-    }
-    // avoids infinite recursion of numerals
-    if (self.operator != "-"
-        || !(e instanceof AST_Number || e instanceof AST_Infinity || e instanceof AST_BigInt)) {
-        var ev = self.evaluate(compressor);
-        if (ev !== self) {
-            ev = make_node_from_constant(ev, self).optimize(compressor);
-            return best_of(compressor, ev, self);
-        }
-    }
-    return self;
-});
-
-AST_Binary.DEFMETHOD("lift_sequences", function(compressor) {
-    if (compressor.option("sequences")) {
-        if (this.left instanceof AST_Sequence) {
-            var x = this.left.expressions.slice();
-            var e = this.clone();
-            e.left = x.pop();
-            x.push(e);
-            return make_sequence(this, x).optimize(compressor);
-        }
-        if (this.right instanceof AST_Sequence && !this.left.has_side_effects(compressor)) {
-            var assign = this.operator == "=" && this.left instanceof AST_SymbolRef;
-            var x = this.right.expressions;
-            var last = x.length - 1;
-            for (var i = 0; i < last; i++) {
-                if (!assign && x[i].has_side_effects(compressor)) break;
-            }
-            if (i == last) {
-                x = x.slice();
-                var e = this.clone();
-                e.right = x.pop();
-                x.push(e);
-                return make_sequence(this, x).optimize(compressor);
-            } else if (i > 0) {
-                var e = this.clone();
-                e.right = make_sequence(this.right, x.slice(i));
-                x = x.slice(0, i);
-                x.push(e);
-                return make_sequence(this, x).optimize(compressor);
-            }
-        }
-    }
-    return this;
-});
-
-var commutativeOperators = makePredicate("== === != !== * & | ^");
-function is_object(node) {
-    return node instanceof AST_Array
-        || node instanceof AST_Lambda
-        || node instanceof AST_Object
-        || node instanceof AST_Class;
-}
-
-def_optimize(AST_Binary, function(self, compressor) {
-    function reversible() {
-        return self.left.is_constant()
-            || self.right.is_constant()
-            || !self.left.has_side_effects(compressor)
-                && !self.right.has_side_effects(compressor);
-    }
-    function reverse(op) {
-        if (reversible()) {
-            if (op) self.operator = op;
-            var tmp = self.left;
-            self.left = self.right;
-            self.right = tmp;
-        }
-    }
-    if (commutativeOperators.has(self.operator)) {
-        if (self.right.is_constant()
-            && !self.left.is_constant()) {
-            // if right is a constant, whatever side effects the
-            // left side might have could not influence the
-            // result.  hence, force switch.
-
-            if (!(self.left instanceof AST_Binary
-                  && PRECEDENCE[self.left.operator] >= PRECEDENCE[self.operator])) {
-                reverse();
-            }
-        }
-    }
-    self = self.lift_sequences(compressor);
-    if (compressor.option("comparisons")) switch (self.operator) {
-      case "===":
-      case "!==":
-        var is_strict_comparison = true;
-        if ((self.left.is_string(compressor) && self.right.is_string(compressor)) ||
-            (self.left.is_number(compressor) && self.right.is_number(compressor)) ||
-            (self.left.is_boolean() && self.right.is_boolean()) ||
-            self.left.equivalent_to(self.right)) {
-            self.operator = self.operator.substr(0, 2);
-        }
-        // XXX: intentionally falling down to the next case
-      case "==":
-      case "!=":
-        // void 0 == x => null == x
-        if (!is_strict_comparison && is_undefined(self.left, compressor)) {
-            self.left = make_node(AST_Null, self.left);
-        } else if (compressor.option("typeofs")
-            // "undefined" == typeof x => undefined === x
-            && self.left instanceof AST_String
-            && self.left.value == "undefined"
-            && self.right instanceof AST_UnaryPrefix
-            && self.right.operator == "typeof") {
-            var expr = self.right.expression;
-            if (expr instanceof AST_SymbolRef ? expr.is_declared(compressor)
-                : !(expr instanceof AST_PropAccess && compressor.option("ie8"))) {
-                self.right = expr;
-                self.left = make_node(AST_Undefined, self.left).optimize(compressor);
-                if (self.operator.length == 2) self.operator += "=";
-            }
-        } else if (self.left instanceof AST_SymbolRef
-            // obj !== obj => false
-            && self.right instanceof AST_SymbolRef
-            && self.left.definition() === self.right.definition()
-            && is_object(self.left.fixed_value())) {
-            return make_node(self.operator[0] == "=" ? AST_True : AST_False, self);
-        }
-        break;
-      case "&&":
-      case "||":
-        var lhs = self.left;
-        if (lhs.operator == self.operator) {
-            lhs = lhs.right;
-        }
-        if (lhs instanceof AST_Binary
-            && lhs.operator == (self.operator == "&&" ? "!==" : "===")
-            && self.right instanceof AST_Binary
-            && lhs.operator == self.right.operator
-            && (is_undefined(lhs.left, compressor) && self.right.left instanceof AST_Null
-                || lhs.left instanceof AST_Null && is_undefined(self.right.left, compressor))
-            && !lhs.right.has_side_effects(compressor)
-            && lhs.right.equivalent_to(self.right.right)) {
-            var combined = make_node(AST_Binary, self, {
-                operator: lhs.operator.slice(0, -1),
-                left: make_node(AST_Null, self),
-                right: lhs.right
-            });
-            if (lhs !== self.left) {
-                combined = make_node(AST_Binary, self, {
-                    operator: self.operator,
-                    left: self.left.left,
-                    right: combined
-                });
-            }
-            return combined;
-        }
-        break;
-    }
-    if (self.operator == "+" && compressor.in_boolean_context()) {
-        var ll = self.left.evaluate(compressor);
-        var rr = self.right.evaluate(compressor);
-        if (ll && typeof ll == "string") {
-            return make_sequence(self, [
-                self.right,
-                make_node(AST_True, self)
-            ]).optimize(compressor);
-        }
-        if (rr && typeof rr == "string") {
-            return make_sequence(self, [
-                self.left,
-                make_node(AST_True, self)
-            ]).optimize(compressor);
-        }
-    }
-    if (compressor.option("comparisons") && self.is_boolean()) {
-        if (!(compressor.parent() instanceof AST_Binary)
-            || compressor.parent() instanceof AST_Assign) {
-            var negated = make_node(AST_UnaryPrefix, self, {
-                operator: "!",
-                expression: self.negate(compressor, first_in_statement(compressor))
-            });
-            self = best_of(compressor, self, negated);
-        }
-        if (compressor.option("unsafe_comps")) {
-            switch (self.operator) {
-              case "<": reverse(">"); break;
-              case "<=": reverse(">="); break;
-            }
-        }
-    }
-    if (self.operator == "+") {
-        if (self.right instanceof AST_String
-            && self.right.getValue() == ""
-            && self.left.is_string(compressor)) {
-            return self.left;
-        }
-        if (self.left instanceof AST_String
-            && self.left.getValue() == ""
-            && self.right.is_string(compressor)) {
-            return self.right;
-        }
-        if (self.left instanceof AST_Binary
-            && self.left.operator == "+"
-            && self.left.left instanceof AST_String
-            && self.left.left.getValue() == ""
-            && self.right.is_string(compressor)) {
-            self.left = self.left.right;
-            return self;
-        }
-    }
-    if (compressor.option("evaluate")) {
-        switch (self.operator) {
-          case "&&":
-            var ll = has_flag(self.left, TRUTHY)
-                ? true
-                : has_flag(self.left, FALSY)
-                    ? false
-                    : self.left.evaluate(compressor);
-            if (!ll) {
-                return maintain_this_binding(compressor.parent(), compressor.self(), self.left).optimize(compressor);
-            } else if (!(ll instanceof AST_Node)) {
-                return make_sequence(self, [ self.left, self.right ]).optimize(compressor);
-            }
-            var rr = self.right.evaluate(compressor);
-            if (!rr) {
-                if (compressor.in_boolean_context()) {
-                    return make_sequence(self, [
-                        self.left,
-                        make_node(AST_False, self)
-                    ]).optimize(compressor);
-                } else {
-                    set_flag(self, FALSY);
-                }
-            } else if (!(rr instanceof AST_Node)) {
-                var parent = compressor.parent();
-                if (parent.operator == "&&" && parent.left === compressor.self() || compressor.in_boolean_context()) {
-                    return self.left.optimize(compressor);
-                }
-            }
-            // x || false && y ---> x ? y : false
-            if (self.left.operator == "||") {
-                var lr = self.left.right.evaluate(compressor);
-                if (!lr) return make_node(AST_Conditional, self, {
-                    condition: self.left.left,
-                    consequent: self.right,
-                    alternative: self.left.right
-                }).optimize(compressor);
-            }
-            break;
-          case "||":
-            var ll = has_flag(self.left, TRUTHY)
-              ? true
-              : has_flag(self.left, FALSY)
-                ? false
-                : self.left.evaluate(compressor);
-            if (!ll) {
-                return make_sequence(self, [ self.left, self.right ]).optimize(compressor);
-            } else if (!(ll instanceof AST_Node)) {
-                return maintain_this_binding(compressor.parent(), compressor.self(), self.left).optimize(compressor);
-            }
-            var rr = self.right.evaluate(compressor);
-            if (!rr) {
-                var parent = compressor.parent();
-                if (parent.operator == "||" && parent.left === compressor.self() || compressor.in_boolean_context()) {
-                    return self.left.optimize(compressor);
-                }
-            } else if (!(rr instanceof AST_Node)) {
-                if (compressor.in_boolean_context()) {
-                    return make_sequence(self, [
-                        self.left,
-                        make_node(AST_True, self)
-                    ]).optimize(compressor);
-                } else {
-                    set_flag(self, TRUTHY);
-                }
-            }
-            if (self.left.operator == "&&") {
-                var lr = self.left.right.evaluate(compressor);
-                if (lr && !(lr instanceof AST_Node)) return make_node(AST_Conditional, self, {
-                    condition: self.left.left,
-                    consequent: self.left.right,
-                    alternative: self.right
-                }).optimize(compressor);
-            }
-            break;
-          case "??":
-            if (is_nullish(self.left, compressor)) {
-                return self.right;
-            }
-
-            var ll = self.left.evaluate(compressor);
-            if (!(ll instanceof AST_Node)) {
-                // if we know the value for sure we can simply compute right away.
-                return ll == null ? self.right : self.left;
-            }
-
-            if (compressor.in_boolean_context()) {
-                const rr = self.right.evaluate(compressor);
-                if (!(rr instanceof AST_Node) && !rr) {
-                    return self.left;
-                }
-            }
-        }
-        var associative = true;
-        switch (self.operator) {
-          case "+":
-            // (x + "foo") + "bar" => x + "foobar"
-            if (self.right instanceof AST_Constant
-                && self.left instanceof AST_Binary
-                && self.left.operator == "+"
-                && self.left.is_string(compressor)) {
-                var binary = make_node(AST_Binary, self, {
-                    operator: "+",
-                    left: self.left.right,
-                    right: self.right,
-                });
-                var r = binary.optimize(compressor);
-                if (binary !== r) {
-                    self = make_node(AST_Binary, self, {
-                        operator: "+",
-                        left: self.left.left,
-                        right: r
-                    });
-                }
-            }
-            // (x + "foo") + ("bar" + y) => (x + "foobar") + y
-            if (self.left instanceof AST_Binary
-                && self.left.operator == "+"
-                && self.left.is_string(compressor)
-                && self.right instanceof AST_Binary
-                && self.right.operator == "+"
-                && self.right.is_string(compressor)) {
-                var binary = make_node(AST_Binary, self, {
-                    operator: "+",
-                    left: self.left.right,
-                    right: self.right.left,
-                });
-                var m = binary.optimize(compressor);
-                if (binary !== m) {
-                    self = make_node(AST_Binary, self, {
-                        operator: "+",
-                        left: make_node(AST_Binary, self.left, {
-                            operator: "+",
-                            left: self.left.left,
-                            right: m
-                        }),
-                        right: self.right.right
-                    });
-                }
-            }
-            // a + -b => a - b
-            if (self.right instanceof AST_UnaryPrefix
-                && self.right.operator == "-"
-                && self.left.is_number(compressor)) {
-                self = make_node(AST_Binary, self, {
-                    operator: "-",
-                    left: self.left,
-                    right: self.right.expression
-                });
-                break;
-            }
-            // -a + b => b - a
-            if (self.left instanceof AST_UnaryPrefix
-                && self.left.operator == "-"
-                && reversible()
-                && self.right.is_number(compressor)) {
-                self = make_node(AST_Binary, self, {
-                    operator: "-",
-                    left: self.right,
-                    right: self.left.expression
-                });
-                break;
-            }
-            // `foo${bar}baz` + 1 => `foo${bar}baz1`
-            if (self.left instanceof AST_TemplateString) {
-                var l = self.left;
-                var r = self.right.evaluate(compressor);
-                if (r != self.right) {
-                    l.segments[l.segments.length - 1].value += String(r);
-                    return l;
-                }
-            }
-            // 1 + `foo${bar}baz` => `1foo${bar}baz`
-            if (self.right instanceof AST_TemplateString) {
-                var r = self.right;
-                var l = self.left.evaluate(compressor);
-                if (l != self.left) {
-                    r.segments[0].value = String(l) + r.segments[0].value;
-                    return r;
-                }
-            }
-            // `1${bar}2` + `foo${bar}baz` => `1${bar}2foo${bar}baz`
-            if (self.left instanceof AST_TemplateString
-                && self.right instanceof AST_TemplateString) {
-                var l = self.left;
-                var segments = l.segments;
-                var r = self.right;
-                segments[segments.length - 1].value += r.segments[0].value;
-                for (var i = 1; i < r.segments.length; i++) {
-                    segments.push(r.segments[i]);
-                }
-                return l;
-            }
-          case "*":
-            associative = compressor.option("unsafe_math");
-          case "&":
-          case "|":
-          case "^":
-            // a + +b => +b + a
-            if (self.left.is_number(compressor)
-                && self.right.is_number(compressor)
-                && reversible()
-                && !(self.left instanceof AST_Binary
-                    && self.left.operator != self.operator
-                    && PRECEDENCE[self.left.operator] >= PRECEDENCE[self.operator])) {
-                var reversed = make_node(AST_Binary, self, {
-                    operator: self.operator,
-                    left: self.right,
-                    right: self.left
-                });
-                if (self.right instanceof AST_Constant
-                    && !(self.left instanceof AST_Constant)) {
-                    self = best_of(compressor, reversed, self);
-                } else {
-                    self = best_of(compressor, self, reversed);
-                }
-            }
-            if (associative && self.is_number(compressor)) {
-                // a + (b + c) => (a + b) + c
-                if (self.right instanceof AST_Binary
-                    && self.right.operator == self.operator) {
-                    self = make_node(AST_Binary, self, {
-                        operator: self.operator,
-                        left: make_node(AST_Binary, self.left, {
-                            operator: self.operator,
-                            left: self.left,
-                            right: self.right.left,
-                            start: self.left.start,
-                            end: self.right.left.end
-                        }),
-                        right: self.right.right
-                    });
-                }
-                // (n + 2) + 3 => 5 + n
-                // (2 * n) * 3 => 6 + n
-                if (self.right instanceof AST_Constant
-                    && self.left instanceof AST_Binary
-                    && self.left.operator == self.operator) {
-                    if (self.left.left instanceof AST_Constant) {
-                        self = make_node(AST_Binary, self, {
-                            operator: self.operator,
-                            left: make_node(AST_Binary, self.left, {
-                                operator: self.operator,
-                                left: self.left.left,
-                                right: self.right,
-                                start: self.left.left.start,
-                                end: self.right.end
-                            }),
-                            right: self.left.right
-                        });
-                    } else if (self.left.right instanceof AST_Constant) {
-                        self = make_node(AST_Binary, self, {
-                            operator: self.operator,
-                            left: make_node(AST_Binary, self.left, {
-                                operator: self.operator,
-                                left: self.left.right,
-                                right: self.right,
-                                start: self.left.right.start,
-                                end: self.right.end
-                            }),
-                            right: self.left.left
-                        });
-                    }
-                }
-                // (a | 1) | (2 | d) => (3 | a) | b
-                if (self.left instanceof AST_Binary
-                    && self.left.operator == self.operator
-                    && self.left.right instanceof AST_Constant
-                    && self.right instanceof AST_Binary
-                    && self.right.operator == self.operator
-                    && self.right.left instanceof AST_Constant) {
-                    self = make_node(AST_Binary, self, {
-                        operator: self.operator,
-                        left: make_node(AST_Binary, self.left, {
-                            operator: self.operator,
-                            left: make_node(AST_Binary, self.left.left, {
-                                operator: self.operator,
-                                left: self.left.right,
-                                right: self.right.left,
-                                start: self.left.right.start,
-                                end: self.right.left.end
-                            }),
-                            right: self.left.left
-                        }),
-                        right: self.right.right
-                    });
-                }
-            }
-        }
-    }
-    // x && (y && z)  ==>  x && y && z
-    // x || (y || z)  ==>  x || y || z
-    // x + ("y" + z)  ==>  x + "y" + z
-    // "x" + (y + "z")==>  "x" + y + "z"
-    if (self.right instanceof AST_Binary
-        && self.right.operator == self.operator
-        && (lazy_op.has(self.operator)
-            || (self.operator == "+"
-                && (self.right.left.is_string(compressor)
-                    || (self.left.is_string(compressor)
-                        && self.right.right.is_string(compressor)))))
-    ) {
-        self.left = make_node(AST_Binary, self.left, {
-            operator : self.operator,
-            left     : self.left.transform(compressor),
-            right    : self.right.left.transform(compressor)
-        });
-        self.right = self.right.right.transform(compressor);
-        return self.transform(compressor);
-    }
-    var ev = self.evaluate(compressor);
-    if (ev !== self) {
-        ev = make_node_from_constant(ev, self).optimize(compressor);
-        return best_of(compressor, ev, self);
-    }
-    return self;
-});
-
-def_optimize(AST_SymbolExport, function(self) {
-    return self;
-});
-
-def_optimize(AST_SymbolRef, function(self, compressor) {
-    if (
-        !compressor.option("ie8")
-        && is_undeclared_ref(self)
-        && !compressor.find_parent(AST_With)
-    ) {
-        switch (self.name) {
-          case "undefined":
-            return make_node(AST_Undefined, self).optimize(compressor);
-          case "NaN":
-            return make_node(AST_NaN, self).optimize(compressor);
-          case "Infinity":
-            return make_node(AST_Infinity, self).optimize(compressor);
-        }
-    }
-
-    const parent = compressor.parent();
-    if (compressor.option("reduce_vars") && is_lhs(self, parent) !== self) {
-        return inline_into_symbolref(self, compressor);
-    } else {
-        return self;
-    }
-});
-
-function is_atomic(lhs, self) {
-    return lhs instanceof AST_SymbolRef || lhs.TYPE === self.TYPE;
-}
-
-def_optimize(AST_Undefined, function(self, compressor) {
-    if (compressor.option("unsafe_undefined")) {
-        var undef = find_variable(compressor, "undefined");
-        if (undef) {
-            var ref = make_node(AST_SymbolRef, self, {
-                name   : "undefined",
-                scope  : undef.scope,
-                thedef : undef
-            });
-            set_flag(ref, UNDEFINED);
-            return ref;
-        }
-    }
-    var lhs = is_lhs(compressor.self(), compressor.parent());
-    if (lhs && is_atomic(lhs, self)) return self;
-    return make_node(AST_UnaryPrefix, self, {
-        operator: "void",
-        expression: make_node(AST_Number, self, {
-            value: 0
-        })
-    });
-});
-
-def_optimize(AST_Infinity, function(self, compressor) {
-    var lhs = is_lhs(compressor.self(), compressor.parent());
-    if (lhs && is_atomic(lhs, self)) return self;
-    if (
-        compressor.option("keep_infinity")
-        && !(lhs && !is_atomic(lhs, self))
-        && !find_variable(compressor, "Infinity")
-    ) {
-        return self;
-    }
-    return make_node(AST_Binary, self, {
-        operator: "/",
-        left: make_node(AST_Number, self, {
-            value: 1
-        }),
-        right: make_node(AST_Number, self, {
-            value: 0
-        })
-    });
-});
-
-def_optimize(AST_NaN, function(self, compressor) {
-    var lhs = is_lhs(compressor.self(), compressor.parent());
-    if (lhs && !is_atomic(lhs, self)
-        || find_variable(compressor, "NaN")) {
-        return make_node(AST_Binary, self, {
-            operator: "/",
-            left: make_node(AST_Number, self, {
-                value: 0
-            }),
-            right: make_node(AST_Number, self, {
-                value: 0
-            })
-        });
-    }
-    return self;
-});
-
-const ASSIGN_OPS = makePredicate("+ - / * % >> << >>> | ^ &");
-const ASSIGN_OPS_COMMUTATIVE = makePredicate("* | ^ &");
-def_optimize(AST_Assign, function(self, compressor) {
-    if (self.logical) {
-        return self.lift_sequences(compressor);
-    }
-
-    var def;
-    // x = x ---> x
-    if (
-        self.operator === "="
-        && self.left instanceof AST_SymbolRef
-        && self.left.name !== "arguments"
-        && !(def = self.left.definition()).undeclared
-        && self.right.equivalent_to(self.left)
-    ) {
-        return self.right;
-    }
-
-    if (compressor.option("dead_code")
-        && self.left instanceof AST_SymbolRef
-        && (def = self.left.definition()).scope === compressor.find_parent(AST_Lambda)) {
-        var level = 0, node, parent = self;
-        do {
-            node = parent;
-            parent = compressor.parent(level++);
-            if (parent instanceof AST_Exit) {
-                if (in_try(level, parent)) break;
-                if (is_reachable(def.scope, [ def ])) break;
-                if (self.operator == "=") return self.right;
-                def.fixed = false;
-                return make_node(AST_Binary, self, {
-                    operator: self.operator.slice(0, -1),
-                    left: self.left,
-                    right: self.right
-                }).optimize(compressor);
-            }
-        } while (parent instanceof AST_Binary && parent.right === node
-            || parent instanceof AST_Sequence && parent.tail_node() === node);
-    }
-    self = self.lift_sequences(compressor);
-
-    if (self.operator == "=" && self.left instanceof AST_SymbolRef && self.right instanceof AST_Binary) {
-        // x = expr1 OP expr2
-        if (self.right.left instanceof AST_SymbolRef
-            && self.right.left.name == self.left.name
-            && ASSIGN_OPS.has(self.right.operator)) {
-            // x = x - 2  --->  x -= 2
-            self.operator = self.right.operator + "=";
-            self.right = self.right.right;
-        } else if (self.right.right instanceof AST_SymbolRef
-            && self.right.right.name == self.left.name
-            && ASSIGN_OPS_COMMUTATIVE.has(self.right.operator)
-            && !self.right.left.has_side_effects(compressor)) {
-            // x = 2 & x  --->  x &= 2
-            self.operator = self.right.operator + "=";
-            self.right = self.right.left;
-        }
-    }
-    return self;
-
-    function in_try(level, node) {
-        var right = self.right;
-        self.right = make_node(AST_Null, right);
-        var may_throw = node.may_throw(compressor);
-        self.right = right;
-        var scope = self.left.definition().scope;
-        var parent;
-        while ((parent = compressor.parent(level++)) !== scope) {
-            if (parent instanceof AST_Try) {
-                if (parent.bfinally) return true;
-                if (may_throw && parent.bcatch) return true;
-            }
-        }
-    }
-});
-
-def_optimize(AST_DefaultAssign, function(self, compressor) {
-    if (!compressor.option("evaluate")) {
-        return self;
-    }
-    var evaluateRight = self.right.evaluate(compressor);
-
-    // `[x = undefined] = foo` ---> `[x] = foo`
-    if (evaluateRight === undefined) {
-        self = self.left;
-    } else if (evaluateRight !== self.right) {
-        evaluateRight = make_node_from_constant(evaluateRight, self.right);
-        self.right = best_of_expression(evaluateRight, self.right);
-    }
-
-    return self;
-});
-
-function is_nullish_check(check, check_subject, compressor) {
-    if (check_subject.may_throw(compressor)) return false;
-
-    let nullish_side;
-
-    // foo == null
-    if (
-        check instanceof AST_Binary
-        && check.operator === "=="
-        // which side is nullish?
-        && (
-            (nullish_side = is_nullish(check.left, compressor) && check.left)
-            || (nullish_side = is_nullish(check.right, compressor) && check.right)
-        )
-        // is the other side the same as the check_subject
-        && (
-            nullish_side === check.left
-                ? check.right
-                : check.left
-        ).equivalent_to(check_subject)
-    ) {
-        return true;
-    }
-
-    // foo === null || foo === undefined
-    if (check instanceof AST_Binary && check.operator === "||") {
-        let null_cmp;
-        let undefined_cmp;
-
-        const find_comparison = cmp => {
-            if (!(
-                cmp instanceof AST_Binary
-                && (cmp.operator === "===" || cmp.operator === "==")
-            )) {
-                return false;
-            }
-
-            let found = 0;
-            let defined_side;
-
-            if (cmp.left instanceof AST_Null) {
-                found++;
-                null_cmp = cmp;
-                defined_side = cmp.right;
-            }
-            if (cmp.right instanceof AST_Null) {
-                found++;
-                null_cmp = cmp;
-                defined_side = cmp.left;
-            }
-            if (is_undefined(cmp.left, compressor)) {
-                found++;
-                undefined_cmp = cmp;
-                defined_side = cmp.right;
-            }
-            if (is_undefined(cmp.right, compressor)) {
-                found++;
-                undefined_cmp = cmp;
-                defined_side = cmp.left;
-            }
-
-            if (found !== 1) {
-                return false;
-            }
-
-            if (!defined_side.equivalent_to(check_subject)) {
-                return false;
-            }
-
-            return true;
-        };
-
-        if (!find_comparison(check.left)) return false;
-        if (!find_comparison(check.right)) return false;
-
-        if (null_cmp && undefined_cmp && null_cmp !== undefined_cmp) {
-            return true;
-        }
-    }
-
-    return false;
-}
-
-def_optimize(AST_Conditional, function(self, compressor) {
-    if (!compressor.option("conditionals")) return self;
-    // This looks like lift_sequences(), should probably be under "sequences"
-    if (self.condition instanceof AST_Sequence) {
-        var expressions = self.condition.expressions.slice();
-        self.condition = expressions.pop();
-        expressions.push(self);
-        return make_sequence(self, expressions);
-    }
-    var cond = self.condition.evaluate(compressor);
-    if (cond !== self.condition) {
-        if (cond) {
-            return maintain_this_binding(compressor.parent(), compressor.self(), self.consequent);
-        } else {
-            return maintain_this_binding(compressor.parent(), compressor.self(), self.alternative);
-        }
-    }
-    var negated = cond.negate(compressor, first_in_statement(compressor));
-    if (best_of(compressor, cond, negated) === negated) {
-        self = make_node(AST_Conditional, self, {
-            condition: negated,
-            consequent: self.alternative,
-            alternative: self.consequent
-        });
-    }
-    var condition = self.condition;
-    var consequent = self.consequent;
-    var alternative = self.alternative;
-    // x?x:y --> x||y
-    if (condition instanceof AST_SymbolRef
-        && consequent instanceof AST_SymbolRef
-        && condition.definition() === consequent.definition()) {
-        return make_node(AST_Binary, self, {
-            operator: "||",
-            left: condition,
-            right: alternative
-        });
-    }
-    // if (foo) exp = something; else exp = something_else;
-    //                   |
-    //                   v
-    // exp = foo ? something : something_else;
-    if (
-        consequent instanceof AST_Assign
-        && alternative instanceof AST_Assign
-        && consequent.operator === alternative.operator
-        && consequent.logical === alternative.logical
-        && consequent.left.equivalent_to(alternative.left)
-        && (!self.condition.has_side_effects(compressor)
-            || consequent.operator == "="
-                && !consequent.left.has_side_effects(compressor))
-    ) {
-        return make_node(AST_Assign, self, {
-            operator: consequent.operator,
-            left: consequent.left,
-            logical: consequent.logical,
-            right: make_node(AST_Conditional, self, {
-                condition: self.condition,
-                consequent: consequent.right,
-                alternative: alternative.right
-            })
-        });
-    }
-    // x ? y(a) : y(b) --> y(x ? a : b)
-    var arg_index;
-    if (consequent instanceof AST_Call
-        && alternative.TYPE === consequent.TYPE
-        && consequent.args.length > 0
-        && consequent.args.length == alternative.args.length
-        && consequent.expression.equivalent_to(alternative.expression)
-        && !self.condition.has_side_effects(compressor)
-        && !consequent.expression.has_side_effects(compressor)
-        && typeof (arg_index = single_arg_diff()) == "number") {
-        var node = consequent.clone();
-        node.args[arg_index] = make_node(AST_Conditional, self, {
-            condition: self.condition,
-            consequent: consequent.args[arg_index],
-            alternative: alternative.args[arg_index]
-        });
-        return node;
-    }
-    // a ? b : c ? b : d --> (a || c) ? b : d
-    if (alternative instanceof AST_Conditional
-        && consequent.equivalent_to(alternative.consequent)) {
-        return make_node(AST_Conditional, self, {
-            condition: make_node(AST_Binary, self, {
-                operator: "||",
-                left: condition,
-                right: alternative.condition
-            }),
-            consequent: consequent,
-            alternative: alternative.alternative
-        }).optimize(compressor);
-    }
-
-    // a == null ? b : a -> a ?? b
-    if (
-        compressor.option("ecma") >= 2020 &&
-        is_nullish_check(condition, alternative, compressor)
-    ) {
-        return make_node(AST_Binary, self, {
-            operator: "??",
-            left: alternative,
-            right: consequent
-        }).optimize(compressor);
-    }
-
-    // a ? b : (c, b) --> (a || c), b
-    if (alternative instanceof AST_Sequence
-        && consequent.equivalent_to(alternative.expressions[alternative.expressions.length - 1])) {
-        return make_sequence(self, [
-            make_node(AST_Binary, self, {
-                operator: "||",
-                left: condition,
-                right: make_sequence(self, alternative.expressions.slice(0, -1))
-            }),
-            consequent
-        ]).optimize(compressor);
-    }
-    // a ? b : (c && b) --> (a || c) && b
-    if (alternative instanceof AST_Binary
-        && alternative.operator == "&&"
-        && consequent.equivalent_to(alternative.right)) {
-        return make_node(AST_Binary, self, {
-            operator: "&&",
-            left: make_node(AST_Binary, self, {
-                operator: "||",
-                left: condition,
-                right: alternative.left
-            }),
-            right: consequent
-        }).optimize(compressor);
-    }
-    // x?y?z:a:a --> x&&y?z:a
-    if (consequent instanceof AST_Conditional
-        && consequent.alternative.equivalent_to(alternative)) {
-        return make_node(AST_Conditional, self, {
-            condition: make_node(AST_Binary, self, {
-                left: self.condition,
-                operator: "&&",
-                right: consequent.condition
-            }),
-            consequent: consequent.consequent,
-            alternative: alternative
-        });
-    }
-    // x ? y : y --> x, y
-    if (consequent.equivalent_to(alternative)) {
-        return make_sequence(self, [
-            self.condition,
-            consequent
-        ]).optimize(compressor);
-    }
-    // x ? y || z : z --> x && y || z
-    if (consequent instanceof AST_Binary
-        && consequent.operator == "||"
-        && consequent.right.equivalent_to(alternative)) {
-        return make_node(AST_Binary, self, {
-            operator: "||",
-            left: make_node(AST_Binary, self, {
-                operator: "&&",
-                left: self.condition,
-                right: consequent.left
-            }),
-            right: alternative
-        }).optimize(compressor);
-    }
-
-    const in_bool = compressor.in_boolean_context();
-    if (is_true(self.consequent)) {
-        if (is_false(self.alternative)) {
-            // c ? true : false ---> !!c
-            return booleanize(self.condition);
-        }
-        // c ? true : x ---> !!c || x
-        return make_node(AST_Binary, self, {
-            operator: "||",
-            left: booleanize(self.condition),
-            right: self.alternative
-        });
-    }
-    if (is_false(self.consequent)) {
-        if (is_true(self.alternative)) {
-            // c ? false : true ---> !c
-            return booleanize(self.condition.negate(compressor));
-        }
-        // c ? false : x ---> !c && x
-        return make_node(AST_Binary, self, {
-            operator: "&&",
-            left: booleanize(self.condition.negate(compressor)),
-            right: self.alternative
-        });
-    }
-    if (is_true(self.alternative)) {
-        // c ? x : true ---> !c || x
-        return make_node(AST_Binary, self, {
-            operator: "||",
-            left: booleanize(self.condition.negate(compressor)),
-            right: self.consequent
-        });
-    }
-    if (is_false(self.alternative)) {
-        // c ? x : false ---> !!c && x
-        return make_node(AST_Binary, self, {
-            operator: "&&",
-            left: booleanize(self.condition),
-            right: self.consequent
-        });
-    }
-
-    return self;
-
-    function booleanize(node) {
-        if (node.is_boolean()) return node;
-        // !!expression
-        return make_node(AST_UnaryPrefix, node, {
-            operator: "!",
-            expression: node.negate(compressor)
-        });
-    }
-
-    // AST_True or !0
-    function is_true(node) {
-        return node instanceof AST_True
-            || in_bool
-                && node instanceof AST_Constant
-                && node.getValue()
-            || (node instanceof AST_UnaryPrefix
-                && node.operator == "!"
-                && node.expression instanceof AST_Constant
-                && !node.expression.getValue());
-    }
-    // AST_False or !1
-    function is_false(node) {
-        return node instanceof AST_False
-            || in_bool
-                && node instanceof AST_Constant
-                && !node.getValue()
-            || (node instanceof AST_UnaryPrefix
-                && node.operator == "!"
-                && node.expression instanceof AST_Constant
-                && node.expression.getValue());
-    }
-
-    function single_arg_diff() {
-        var a = consequent.args;
-        var b = alternative.args;
-        for (var i = 0, len = a.length; i < len; i++) {
-            if (a[i] instanceof AST_Expansion) return;
-            if (!a[i].equivalent_to(b[i])) {
-                if (b[i] instanceof AST_Expansion) return;
-                for (var j = i + 1; j < len; j++) {
-                    if (a[j] instanceof AST_Expansion) return;
-                    if (!a[j].equivalent_to(b[j])) return;
-                }
-                return i;
-            }
-        }
-    }
-});
-
-def_optimize(AST_Boolean, function(self, compressor) {
-    if (compressor.in_boolean_context()) return make_node(AST_Number, self, {
-        value: +self.value
-    });
-    var p = compressor.parent();
-    if (compressor.option("booleans_as_integers")) {
-        if (p instanceof AST_Binary && (p.operator == "===" || p.operator == "!==")) {
-            p.operator = p.operator.replace(/=$/, "");
-        }
-        return make_node(AST_Number, self, {
-            value: +self.value
-        });
-    }
-    if (compressor.option("booleans")) {
-        if (p instanceof AST_Binary && (p.operator == "=="
-                                        || p.operator == "!=")) {
-            return make_node(AST_Number, self, {
-                value: +self.value
-            });
-        }
-        return make_node(AST_UnaryPrefix, self, {
-            operator: "!",
-            expression: make_node(AST_Number, self, {
-                value: 1 - self.value
-            })
-        });
-    }
-    return self;
-});
-
-function safe_to_flatten(value, compressor) {
-    if (value instanceof AST_SymbolRef) {
-        value = value.fixed_value();
-    }
-    if (!value) return false;
-    if (!(value instanceof AST_Lambda || value instanceof AST_Class)) return true;
-    if (!(value instanceof AST_Lambda && value.contains_this())) return true;
-    return compressor.parent() instanceof AST_New;
-}
-
-AST_PropAccess.DEFMETHOD("flatten_object", function(key, compressor) {
-    if (!compressor.option("properties")) return;
-    if (key === "__proto__") return;
-
-    var arrows = compressor.option("unsafe_arrows") && compressor.option("ecma") >= 2015;
-    var expr = this.expression;
-    if (expr instanceof AST_Object) {
-        var props = expr.properties;
-
-        for (var i = props.length; --i >= 0;) {
-            var prop = props[i];
-
-            if ("" + (prop instanceof AST_ConciseMethod ? prop.key.name : prop.key) == key) {
-                const all_props_flattenable = props.every((p) =>
-                    (p instanceof AST_ObjectKeyVal
-                        || arrows && p instanceof AST_ConciseMethod && !p.is_generator
-                    )
-                    && !p.computed_key()
-                );
-
-                if (!all_props_flattenable) return;
-                if (!safe_to_flatten(prop.value, compressor)) return;
-
-                return make_node(AST_Sub, this, {
-                    expression: make_node(AST_Array, expr, {
-                        elements: props.map(function(prop) {
-                            var v = prop.value;
-                            if (v instanceof AST_Accessor) {
-                                v = make_node(AST_Function, v, v);
-                            }
-
-                            var k = prop.key;
-                            if (k instanceof AST_Node && !(k instanceof AST_SymbolMethod)) {
-                                return make_sequence(prop, [ k, v ]);
-                            }
-
-                            return v;
-                        })
-                    }),
-                    property: make_node(AST_Number, this, {
-                        value: i
-                    })
-                });
-            }
-        }
-    }
-});
-
-def_optimize(AST_Sub, function(self, compressor) {
-    var expr = self.expression;
-    var prop = self.property;
-    if (compressor.option("properties")) {
-        var key = prop.evaluate(compressor);
-        if (key !== prop) {
-            if (typeof key == "string") {
-                if (key == "undefined") {
-                    key = undefined;
-                } else {
-                    var value = parseFloat(key);
-                    if (value.toString() == key) {
-                        key = value;
-                    }
-                }
-            }
-            prop = self.property = best_of_expression(prop, make_node_from_constant(key, prop).transform(compressor));
-            var property = "" + key;
-            if (is_basic_identifier_string(property)
-                && property.length <= prop.size() + 1) {
-                return make_node(AST_Dot, self, {
-                    expression: expr,
-                    optional: self.optional,
-                    property: property,
-                    quote: prop.quote,
-                }).optimize(compressor);
-            }
-        }
-    }
-    var fn;
-    OPT_ARGUMENTS: if (compressor.option("arguments")
-        && expr instanceof AST_SymbolRef
-        && expr.name == "arguments"
-        && expr.definition().orig.length == 1
-        && (fn = expr.scope) instanceof AST_Lambda
-        && fn.uses_arguments
-        && !(fn instanceof AST_Arrow)
-        && prop instanceof AST_Number) {
-        var index = prop.getValue();
-        var params = new Set();
-        var argnames = fn.argnames;
-        for (var n = 0; n < argnames.length; n++) {
-            if (!(argnames[n] instanceof AST_SymbolFunarg)) {
-                break OPT_ARGUMENTS; // destructuring parameter - bail
-            }
-            var param = argnames[n].name;
-            if (params.has(param)) {
-                break OPT_ARGUMENTS; // duplicate parameter - bail
-            }
-            params.add(param);
-        }
-        var argname = fn.argnames[index];
-        if (argname && compressor.has_directive("use strict")) {
-            var def = argname.definition();
-            if (!compressor.option("reduce_vars") || def.assignments || def.orig.length > 1) {
-                argname = null;
-            }
-        } else if (!argname && !compressor.option("keep_fargs") && index < fn.argnames.length + 5) {
-            while (index >= fn.argnames.length) {
-                argname = fn.create_symbol(AST_SymbolFunarg, {
-                    source: fn,
-                    scope: fn,
-                    tentative_name: "argument_" + fn.argnames.length,
-                });
-                fn.argnames.push(argname);
-            }
-        }
-        if (argname) {
-            var sym = make_node(AST_SymbolRef, self, argname);
-            sym.reference({});
-            clear_flag(argname, UNUSED);
-            return sym;
-        }
-    }
-    if (is_lhs(self, compressor.parent())) return self;
-    if (key !== prop) {
-        var sub = self.flatten_object(property, compressor);
-        if (sub) {
-            expr = self.expression = sub.expression;
-            prop = self.property = sub.property;
-        }
-    }
-    if (compressor.option("properties") && compressor.option("side_effects")
-        && prop instanceof AST_Number && expr instanceof AST_Array) {
-        var index = prop.getValue();
-        var elements = expr.elements;
-        var retValue = elements[index];
-        FLATTEN: if (safe_to_flatten(retValue, compressor)) {
-            var flatten = true;
-            var values = [];
-            for (var i = elements.length; --i > index;) {
-                var value = elements[i].drop_side_effect_free(compressor);
-                if (value) {
-                    values.unshift(value);
-                    if (flatten && value.has_side_effects(compressor)) flatten = false;
-                }
-            }
-            if (retValue instanceof AST_Expansion) break FLATTEN;
-            retValue = retValue instanceof AST_Hole ? make_node(AST_Undefined, retValue) : retValue;
-            if (!flatten) values.unshift(retValue);
-            while (--i >= 0) {
-                var value = elements[i];
-                if (value instanceof AST_Expansion) break FLATTEN;
-                value = value.drop_side_effect_free(compressor);
-                if (value) values.unshift(value);
-                else index--;
-            }
-            if (flatten) {
-                values.push(retValue);
-                return make_sequence(self, values).optimize(compressor);
-            } else return make_node(AST_Sub, self, {
-                expression: make_node(AST_Array, expr, {
-                    elements: values
-                }),
-                property: make_node(AST_Number, prop, {
-                    value: index
-                })
-            });
-        }
-    }
-    var ev = self.evaluate(compressor);
-    if (ev !== self) {
-        ev = make_node_from_constant(ev, self).optimize(compressor);
-        return best_of(compressor, ev, self);
-    }
-    return self;
-});
-
-def_optimize(AST_Chain, function (self, compressor) {
-    if (is_nullish(self.expression, compressor)) {
-        let parent = compressor.parent();
-        // It's valid to delete a nullish optional chain, but if we optimized
-        // this to `delete undefined` then it would appear to be a syntax error
-        // when we try to optimize the delete. Thankfully, `delete 0` is fine.
-        if (parent instanceof AST_UnaryPrefix && parent.operator === "delete") {
-            return make_node_from_constant(0, self);
-        }
-        return make_node(AST_Undefined, self);
-    }
-    return self;
-});
-
-AST_Lambda.DEFMETHOD("contains_this", function() {
-    return walk(this, node => {
-        if (node instanceof AST_This) return walk_abort;
-        if (
-            node !== this
-            && node instanceof AST_Scope
-            && !(node instanceof AST_Arrow)
-        ) {
-            return true;
-        }
-    });
-});
-
-def_optimize(AST_Dot, function(self, compressor) {
-    const parent = compressor.parent();
-    if (is_lhs(self, parent)) return self;
-    if (compressor.option("unsafe_proto")
-        && self.expression instanceof AST_Dot
-        && self.expression.property == "prototype") {
-        var exp = self.expression.expression;
-        if (is_undeclared_ref(exp)) switch (exp.name) {
-          case "Array":
-            self.expression = make_node(AST_Array, self.expression, {
-                elements: []
-            });
-            break;
-          case "Function":
-            self.expression = make_node(AST_Function, self.expression, {
-                argnames: [],
-                body: []
-            });
-            break;
-          case "Number":
-            self.expression = make_node(AST_Number, self.expression, {
-                value: 0
-            });
-            break;
-          case "Object":
-            self.expression = make_node(AST_Object, self.expression, {
-                properties: []
-            });
-            break;
-          case "RegExp":
-            self.expression = make_node(AST_RegExp, self.expression, {
-                value: { source: "t", flags: "" }
-            });
-            break;
-          case "String":
-            self.expression = make_node(AST_String, self.expression, {
-                value: ""
-            });
-            break;
-        }
-    }
-    if (!(parent instanceof AST_Call) || !has_annotation(parent, _NOINLINE)) {
-        const sub = self.flatten_object(self.property, compressor);
-        if (sub) return sub.optimize(compressor);
-    }
-
-    if (self.expression instanceof AST_PropAccess
-        && parent instanceof AST_PropAccess) {
-        return self;
-    }
-
-    let ev = self.evaluate(compressor);
-    if (ev !== self) {
-        ev = make_node_from_constant(ev, self).optimize(compressor);
-        return best_of(compressor, ev, self);
-    }
-    return self;
-});
-
-function literals_in_boolean_context(self, compressor) {
-    if (compressor.in_boolean_context()) {
-        return best_of(compressor, self, make_sequence(self, [
-            self,
-            make_node(AST_True, self)
-        ]).optimize(compressor));
-    }
-    return self;
-}
-
-function inline_array_like_spread(elements) {
-    for (var i = 0; i < elements.length; i++) {
-        var el = elements[i];
-        if (el instanceof AST_Expansion) {
-            var expr = el.expression;
-            if (
-                expr instanceof AST_Array
-                && !expr.elements.some(elm => elm instanceof AST_Hole)
-            ) {
-                elements.splice(i, 1, ...expr.elements);
-                // Step back one, as the element at i is now new.
-                i--;
-            }
-            // In array-like spread, spreading a non-iterable value is TypeError.
-            // We therefore can’t optimize anything else, unlike with object spread.
-        }
-    }
-}
-
-def_optimize(AST_Array, function(self, compressor) {
-    var optimized = literals_in_boolean_context(self, compressor);
-    if (optimized !== self) {
-        return optimized;
-    }
-    inline_array_like_spread(self.elements);
-    return self;
-});
-
-function inline_object_prop_spread(props, compressor) {
-    for (var i = 0; i < props.length; i++) {
-        var prop = props[i];
-        if (prop instanceof AST_Expansion) {
-            const expr = prop.expression;
-            if (
-                expr instanceof AST_Object
-                && expr.properties.every(prop => prop instanceof AST_ObjectKeyVal)
-            ) {
-                props.splice(i, 1, ...expr.properties);
-                // Step back one, as the property at i is now new.
-                i--;
-            } else if (expr instanceof AST_Constant
-                && !(expr instanceof AST_String)) {
-                // Unlike array-like spread, in object spread, spreading a
-                // non-iterable value silently does nothing; it is thus safe
-                // to remove. AST_String is the only iterable AST_Constant.
-                props.splice(i, 1);
-                i--;
-            } else if (is_nullish(expr, compressor)) {
-                // Likewise, null and undefined can be silently removed.
-                props.splice(i, 1);
-                i--;
-            }
-        }
-    }
-}
-
-def_optimize(AST_Object, function(self, compressor) {
-    var optimized = literals_in_boolean_context(self, compressor);
-    if (optimized !== self) {
-        return optimized;
-    }
-    inline_object_prop_spread(self.properties, compressor);
-    return self;
-});
-
-def_optimize(AST_RegExp, literals_in_boolean_context);
-
-def_optimize(AST_Return, function(self, compressor) {
-    if (self.value && is_undefined(self.value, compressor)) {
-        self.value = null;
-    }
-    return self;
-});
-
-def_optimize(AST_Arrow, opt_AST_Lambda);
-
-def_optimize(AST_Function, function(self, compressor) {
-    self = opt_AST_Lambda(self, compressor);
-    if (compressor.option("unsafe_arrows")
-        && compressor.option("ecma") >= 2015
-        && !self.name
-        && !self.is_generator
-        && !self.uses_arguments
-        && !self.pinned()) {
-        const uses_this = walk(self, node => {
-            if (node instanceof AST_This) return walk_abort;
-        });
-        if (!uses_this) return make_node(AST_Arrow, self, self).optimize(compressor);
-    }
-    return self;
-});
-
-def_optimize(AST_Class, function(self) {
-    // HACK to avoid compress failure.
-    // AST_Class is not really an AST_Scope/AST_Block as it lacks a body.
-    return self;
-});
-
-def_optimize(AST_ClassStaticBlock, function(self, compressor) {
-    tighten_body(self.body, compressor);
-    return self;
-});
-
-def_optimize(AST_Yield, function(self, compressor) {
-    if (self.expression && !self.is_star && is_undefined(self.expression, compressor)) {
-        self.expression = null;
-    }
-    return self;
-});
-
-def_optimize(AST_TemplateString, function(self, compressor) {
-    if (
-        !compressor.option("evaluate")
-        || compressor.parent() instanceof AST_PrefixedTemplateString
-    ) {
-        return self;
-    }
-
-    var segments = [];
-    for (var i = 0; i < self.segments.length; i++) {
-        var segment = self.segments[i];
-        if (segment instanceof AST_Node) {
-            var result = segment.evaluate(compressor);
-            // Evaluate to constant value
-            // Constant value shorter than ${segment}
-            if (result !== segment && (result + "").length <= segment.size() + "${}".length) {
-                // There should always be a previous and next segment if segment is a node
-                segments[segments.length - 1].value = segments[segments.length - 1].value + result + self.segments[++i].value;
-                continue;
-            }
-            // `before ${`innerBefore ${any} innerAfter`} after` => `before innerBefore ${any} innerAfter after`
-            // TODO:
-            // `before ${'test' + foo} after` => `before innerBefore ${any} innerAfter after`
-            // `before ${foo + 'test} after` => `before innerBefore ${any} innerAfter after`
-            if (segment instanceof AST_TemplateString) {
-                var inners = segment.segments;
-                segments[segments.length - 1].value += inners[0].value;
-                for (var j = 1; j < inners.length; j++) {
-                    segment = inners[j];
-                    segments.push(segment);
-                }
-                continue;
-            }
-        }
-        segments.push(segment);
-    }
-    self.segments = segments;
-
-    // `foo` => "foo"
-    if (segments.length == 1) {
-        return make_node(AST_String, self, segments[0]);
-    }
-
-    if (
-        segments.length === 3
-        && segments[1] instanceof AST_Node
-        && (
-            segments[1].is_string(compressor)
-            || segments[1].is_number(compressor)
-            || is_nullish(segments[1], compressor)
-            || compressor.option("unsafe")
-        )
-    ) {
-        // `foo${bar}` => "foo" + bar
-        if (segments[2].value === "") {
-            return make_node(AST_Binary, self, {
-                operator: "+",
-                left: make_node(AST_String, self, {
-                    value: segments[0].value,
-                }),
-                right: segments[1],
-            });
-        }
-        // `${bar}baz` => bar + "baz"
-        if (segments[0].value === "") {
-            return make_node(AST_Binary, self, {
-                operator: "+",
-                left: segments[1],
-                right: make_node(AST_String, self, {
-                    value: segments[2].value,
-                }),
-            });
-        }
-    }
-    return self;
-});
-
-def_optimize(AST_PrefixedTemplateString, function(self) {
-    return self;
-});
-
-// ["p"]:1 ---> p:1
-// [42]:1 ---> 42:1
-function lift_key(self, compressor) {
-    if (!compressor.option("computed_props")) return self;
-    // save a comparison in the typical case
-    if (!(self.key instanceof AST_Constant)) return self;
-    // allow certain acceptable props as not all AST_Constants are true constants
-    if (self.key instanceof AST_String || self.key instanceof AST_Number) {
-        if (self.key.value === "__proto__") return self;
-        if (self.key.value == "constructor"
-            && compressor.parent() instanceof AST_Class) return self;
-        if (self instanceof AST_ObjectKeyVal) {
-            self.quote = self.key.quote;
-            self.key = self.key.value;
-        } else if (self instanceof AST_ClassProperty) {
-            self.quote = self.key.quote;
-            self.key = make_node(AST_SymbolClassProperty, self.key, {
-                name: self.key.value
-            });
-        } else {
-            self.quote = self.key.quote;
-            self.key = make_node(AST_SymbolMethod, self.key, {
-                name: self.key.value
-            });
-        }
-    }
-    return self;
-}
-
-def_optimize(AST_ObjectProperty, lift_key);
-
-def_optimize(AST_ConciseMethod, function(self, compressor) {
-    lift_key(self, compressor);
-    // p(){return x;} ---> p:()=>x
-    if (compressor.option("arrows")
-        && compressor.parent() instanceof AST_Object
-        && !self.is_generator
-        && !self.value.uses_arguments
-        && !self.value.pinned()
-        && self.value.body.length == 1
-        && self.value.body[0] instanceof AST_Return
-        && self.value.body[0].value
-        && !self.value.contains_this()) {
-        var arrow = make_node(AST_Arrow, self.value, self.value);
-        arrow.async = self.async;
-        arrow.is_generator = self.is_generator;
-        return make_node(AST_ObjectKeyVal, self, {
-            key: self.key instanceof AST_SymbolMethod ? self.key.name : self.key,
-            value: arrow,
-            quote: self.quote,
-        });
-    }
-    return self;
-});
-
-def_optimize(AST_ObjectKeyVal, function(self, compressor) {
-    lift_key(self, compressor);
-    // p:function(){} ---> p(){}
-    // p:function*(){} ---> *p(){}
-    // p:async function(){} ---> async p(){}
-    // p:()=>{} ---> p(){}
-    // p:async()=>{} ---> async p(){}
-    var unsafe_methods = compressor.option("unsafe_methods");
-    if (unsafe_methods
-        && compressor.option("ecma") >= 2015
-        && (!(unsafe_methods instanceof RegExp) || unsafe_methods.test(self.key + ""))) {
-        var key = self.key;
-        var value = self.value;
-        var is_arrow_with_block = value instanceof AST_Arrow
-            && Array.isArray(value.body)
-            && !value.contains_this();
-        if ((is_arrow_with_block || value instanceof AST_Function) && !value.name) {
-            return make_node(AST_ConciseMethod, self, {
-                async: value.async,
-                is_generator: value.is_generator,
-                key: key instanceof AST_Node ? key : make_node(AST_SymbolMethod, self, {
-                    name: key,
-                }),
-                value: make_node(AST_Accessor, value, value),
-                quote: self.quote,
-            });
-        }
-    }
-    return self;
-});
-
-def_optimize(AST_Destructuring, function(self, compressor) {
-    if (compressor.option("pure_getters") == true
-        && compressor.option("unused")
-        && !self.is_array
-        && Array.isArray(self.names)
-        && !is_destructuring_export_decl(compressor)
-        && !(self.names[self.names.length - 1] instanceof AST_Expansion)) {
-        var keep = [];
-        for (var i = 0; i < self.names.length; i++) {
-            var elem = self.names[i];
-            if (!(elem instanceof AST_ObjectKeyVal
-                && typeof elem.key == "string"
-                && elem.value instanceof AST_SymbolDeclaration
-                && !should_retain(compressor, elem.value.definition()))) {
-                keep.push(elem);
-            }
-        }
-        if (keep.length != self.names.length) {
-            self.names = keep;
-        }
-    }
-    return self;
-
-    function is_destructuring_export_decl(compressor) {
-        var ancestors = [/^VarDef$/, /^(Const|Let|Var)$/, /^Export$/];
-        for (var a = 0, p = 0, len = ancestors.length; a < len; p++) {
-            var parent = compressor.parent(p);
-            if (!parent) return false;
-            if (a === 0 && parent.TYPE == "Destructuring") continue;
-            if (!ancestors[a].test(parent.TYPE)) {
-                return false;
-            }
-            a++;
-        }
-        return true;
-    }
-
-    function should_retain(compressor, def) {
-        if (def.references.length) return true;
-        if (!def.global) return false;
-        if (compressor.toplevel.vars) {
-             if (compressor.top_retain) {
-                 return compressor.top_retain(def);
-             }
-             return false;
-        }
-        return true;
-    }
-});
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-// a small wrapper around source-map and @jridgewell/source-map
-async function SourceMap(options) {
-    options = defaults(options, {
-        file : null,
-        root : null,
-        orig : null,
-        files: {},
-    });
-
-    var orig_map;
-    var generator = new sourceMap.SourceMapGenerator({
-        file       : options.file,
-        sourceRoot : options.root
-    });
-
-    let sourcesContent = {__proto__: null};
-    let files = options.files;
-    for (var name in files) if (HOP(files, name)) {
-        sourcesContent[name] = files[name];
-    }
-    if (options.orig) {
-        // We support both @jridgewell/source-map (which has a sync
-        // SourceMapConsumer) and source-map (which has an async
-        // SourceMapConsumer).
-        orig_map = await new sourceMap.SourceMapConsumer(options.orig);
-        if (orig_map.sourcesContent) {
-            orig_map.sources.forEach(function(source, i) {
-                var content = orig_map.sourcesContent[i];
-                if (content) {
-                    sourcesContent[source] = content;
-                }
-            });
-        }
-    }
-
-    function add(source, gen_line, gen_col, orig_line, orig_col, name) {
-        let generatedPos = { line: gen_line, column: gen_col };
-
-        if (orig_map) {
-            var info = orig_map.originalPositionFor({
-                line: orig_line,
-                column: orig_col
-            });
-            if (info.source === null) {
-                generator.addMapping({
-                    generated: generatedPos,
-                    original: null,
-                    source: null,
-                    name: null
-                });
-                return;
-            }
-            source = info.source;
-            orig_line = info.line;
-            orig_col = info.column;
-            name = info.name || name;
-        }
-        generator.addMapping({
-            generated : generatedPos,
-            original  : { line: orig_line, column: orig_col },
-            source    : source,
-            name      : name
-        });
-        generator.setSourceContent(source, sourcesContent[source]);
-    }
-
-    function clean(map) {
-        const allNull = map.sourcesContent && map.sourcesContent.every(c => c == null);
-        if (allNull) delete map.sourcesContent;
-        if (map.file === undefined) delete map.file;
-        if (map.sourceRoot === undefined) delete map.sourceRoot;
-        return map;
-    }
-
-    function getDecoded() {
-        if (!generator.toDecodedMap) return null;
-        return clean(generator.toDecodedMap());
-    }
-
-    function getEncoded() {
-        return clean(generator.toJSON());
-    }
-
-    function destroy() {
-        // @jridgewell/source-map's SourceMapConsumer does not need to be
-        // manually freed.
-        if (orig_map && orig_map.destroy) orig_map.destroy();
-    }
-
-    return {
-        add,
-        getDecoded,
-        getEncoded,
-        destroy,
-    };
-}
-
-var domprops = [
-    "$&",
-    "$'",
-    "$*",
-    "$+",
-    "$1",
-    "$2",
-    "$3",
-    "$4",
-    "$5",
-    "$6",
-    "$7",
-    "$8",
-    "$9",
-    "$_",
-    "$`",
-    "$input",
-    "-moz-animation",
-    "-moz-animation-delay",
-    "-moz-animation-direction",
-    "-moz-animation-duration",
-    "-moz-animation-fill-mode",
-    "-moz-animation-iteration-count",
-    "-moz-animation-name",
-    "-moz-animation-play-state",
-    "-moz-animation-timing-function",
-    "-moz-appearance",
-    "-moz-backface-visibility",
-    "-moz-border-end",
-    "-moz-border-end-color",
-    "-moz-border-end-style",
-    "-moz-border-end-width",
-    "-moz-border-image",
-    "-moz-border-start",
-    "-moz-border-start-color",
-    "-moz-border-start-style",
-    "-moz-border-start-width",
-    "-moz-box-align",
-    "-moz-box-direction",
-    "-moz-box-flex",
-    "-moz-box-ordinal-group",
-    "-moz-box-orient",
-    "-moz-box-pack",
-    "-moz-box-sizing",
-    "-moz-float-edge",
-    "-moz-font-feature-settings",
-    "-moz-font-language-override",
-    "-moz-force-broken-image-icon",
-    "-moz-hyphens",
-    "-moz-image-region",
-    "-moz-margin-end",
-    "-moz-margin-start",
-    "-moz-orient",
-    "-moz-osx-font-smoothing",
-    "-moz-outline-radius",
-    "-moz-outline-radius-bottomleft",
-    "-moz-outline-radius-bottomright",
-    "-moz-outline-radius-topleft",
-    "-moz-outline-radius-topright",
-    "-moz-padding-end",
-    "-moz-padding-start",
-    "-moz-perspective",
-    "-moz-perspective-origin",
-    "-moz-tab-size",
-    "-moz-text-size-adjust",
-    "-moz-transform",
-    "-moz-transform-origin",
-    "-moz-transform-style",
-    "-moz-transition",
-    "-moz-transition-delay",
-    "-moz-transition-duration",
-    "-moz-transition-property",
-    "-moz-transition-timing-function",
-    "-moz-user-focus",
-    "-moz-user-input",
-    "-moz-user-modify",
-    "-moz-user-select",
-    "-moz-window-dragging",
-    "-webkit-align-content",
-    "-webkit-align-items",
-    "-webkit-align-self",
-    "-webkit-animation",
-    "-webkit-animation-delay",
-    "-webkit-animation-direction",
-    "-webkit-animation-duration",
-    "-webkit-animation-fill-mode",
-    "-webkit-animation-iteration-count",
-    "-webkit-animation-name",
-    "-webkit-animation-play-state",
-    "-webkit-animation-timing-function",
-    "-webkit-appearance",
-    "-webkit-backface-visibility",
-    "-webkit-background-clip",
-    "-webkit-background-origin",
-    "-webkit-background-size",
-    "-webkit-border-bottom-left-radius",
-    "-webkit-border-bottom-right-radius",
-    "-webkit-border-image",
-    "-webkit-border-radius",
-    "-webkit-border-top-left-radius",
-    "-webkit-border-top-right-radius",
-    "-webkit-box-align",
-    "-webkit-box-direction",
-    "-webkit-box-flex",
-    "-webkit-box-ordinal-group",
-    "-webkit-box-orient",
-    "-webkit-box-pack",
-    "-webkit-box-shadow",
-    "-webkit-box-sizing",
-    "-webkit-filter",
-    "-webkit-flex",
-    "-webkit-flex-basis",
-    "-webkit-flex-direction",
-    "-webkit-flex-flow",
-    "-webkit-flex-grow",
-    "-webkit-flex-shrink",
-    "-webkit-flex-wrap",
-    "-webkit-justify-content",
-    "-webkit-line-clamp",
-    "-webkit-mask",
-    "-webkit-mask-clip",
-    "-webkit-mask-composite",
-    "-webkit-mask-image",
-    "-webkit-mask-origin",
-    "-webkit-mask-position",
-    "-webkit-mask-position-x",
-    "-webkit-mask-position-y",
-    "-webkit-mask-repeat",
-    "-webkit-mask-size",
-    "-webkit-order",
-    "-webkit-perspective",
-    "-webkit-perspective-origin",
-    "-webkit-text-fill-color",
-    "-webkit-text-size-adjust",
-    "-webkit-text-stroke",
-    "-webkit-text-stroke-color",
-    "-webkit-text-stroke-width",
-    "-webkit-transform",
-    "-webkit-transform-origin",
-    "-webkit-transform-style",
-    "-webkit-transition",
-    "-webkit-transition-delay",
-    "-webkit-transition-duration",
-    "-webkit-transition-property",
-    "-webkit-transition-timing-function",
-    "-webkit-user-select",
-    "0",
-    "1",
-    "10",
-    "11",
-    "12",
-    "13",
-    "14",
-    "15",
-    "16",
-    "17",
-    "18",
-    "19",
-    "2",
-    "20",
-    "3",
-    "4",
-    "5",
-    "6",
-    "7",
-    "8",
-    "9",
-    "@@iterator",
-    "ABORT_ERR",
-    "ACTIVE",
-    "ACTIVE_ATTRIBUTES",
-    "ACTIVE_TEXTURE",
-    "ACTIVE_UNIFORMS",
-    "ACTIVE_UNIFORM_BLOCKS",
-    "ADDITION",
-    "ALIASED_LINE_WIDTH_RANGE",
-    "ALIASED_POINT_SIZE_RANGE",
-    "ALLOW_KEYBOARD_INPUT",
-    "ALLPASS",
-    "ALPHA",
-    "ALPHA_BITS",
-    "ALREADY_SIGNALED",
-    "ALT_MASK",
-    "ALWAYS",
-    "ANY_SAMPLES_PASSED",
-    "ANY_SAMPLES_PASSED_CONSERVATIVE",
-    "ANY_TYPE",
-    "ANY_UNORDERED_NODE_TYPE",
-    "ARRAY_BUFFER",
-    "ARRAY_BUFFER_BINDING",
-    "ATTACHED_SHADERS",
-    "ATTRIBUTE_NODE",
-    "AT_TARGET",
-    "AbortController",
-    "AbortSignal",
-    "AbsoluteOrientationSensor",
-    "AbstractRange",
-    "Accelerometer",
-    "AddSearchProvider",
-    "AggregateError",
-    "AnalyserNode",
-    "Animation",
-    "AnimationEffect",
-    "AnimationEvent",
-    "AnimationPlaybackEvent",
-    "AnimationTimeline",
-    "AnonXMLHttpRequest",
-    "Any",
-    "ApplicationCache",
-    "ApplicationCacheErrorEvent",
-    "Array",
-    "ArrayBuffer",
-    "ArrayType",
-    "Atomics",
-    "Attr",
-    "Audio",
-    "AudioBuffer",
-    "AudioBufferSourceNode",
-    "AudioContext",
-    "AudioDestinationNode",
-    "AudioListener",
-    "AudioNode",
-    "AudioParam",
-    "AudioParamMap",
-    "AudioProcessingEvent",
-    "AudioScheduledSourceNode",
-    "AudioStreamTrack",
-    "AudioWorklet",
-    "AudioWorkletNode",
-    "AuthenticatorAssertionResponse",
-    "AuthenticatorAttestationResponse",
-    "AuthenticatorResponse",
-    "AutocompleteErrorEvent",
-    "BACK",
-    "BAD_BOUNDARYPOINTS_ERR",
-    "BAD_REQUEST",
-    "BANDPASS",
-    "BLEND",
-    "BLEND_COLOR",
-    "BLEND_DST_ALPHA",
-    "BLEND_DST_RGB",
-    "BLEND_EQUATION",
-    "BLEND_EQUATION_ALPHA",
-    "BLEND_EQUATION_RGB",
-    "BLEND_SRC_ALPHA",
-    "BLEND_SRC_RGB",
-    "BLUE_BITS",
-    "BLUR",
-    "BOOL",
-    "BOOLEAN_TYPE",
-    "BOOL_VEC2",
-    "BOOL_VEC3",
-    "BOOL_VEC4",
-    "BOTH",
-    "BROWSER_DEFAULT_WEBGL",
-    "BUBBLING_PHASE",
-    "BUFFER_SIZE",
-    "BUFFER_USAGE",
-    "BYTE",
-    "BYTES_PER_ELEMENT",
-    "BackgroundFetchManager",
-    "BackgroundFetchRecord",
-    "BackgroundFetchRegistration",
-    "BarProp",
-    "BarcodeDetector",
-    "BaseAudioContext",
-    "BaseHref",
-    "BatteryManager",
-    "BeforeInstallPromptEvent",
-    "BeforeLoadEvent",
-    "BeforeUnloadEvent",
-    "BigInt",
-    "BigInt64Array",
-    "BigUint64Array",
-    "BiquadFilterNode",
-    "Blob",
-    "BlobEvent",
-    "Bluetooth",
-    "BluetoothCharacteristicProperties",
-    "BluetoothDevice",
-    "BluetoothRemoteGATTCharacteristic",
-    "BluetoothRemoteGATTDescriptor",
-    "BluetoothRemoteGATTServer",
-    "BluetoothRemoteGATTService",
-    "BluetoothUUID",
-    "Boolean",
-    "BroadcastChannel",
-    "ByteLengthQueuingStrategy",
-    "CAPTURING_PHASE",
-    "CCW",
-    "CDATASection",
-    "CDATA_SECTION_NODE",
-    "CHANGE",
-    "CHARSET_RULE",
-    "CHECKING",
-    "CLAMP_TO_EDGE",
-    "CLICK",
-    "CLOSED",
-    "CLOSING",
-    "COLOR",
-    "COLOR_ATTACHMENT0",
-    "COLOR_ATTACHMENT1",
-    "COLOR_ATTACHMENT10",
-    "COLOR_ATTACHMENT11",
-    "COLOR_ATTACHMENT12",
-    "COLOR_ATTACHMENT13",
-    "COLOR_ATTACHMENT14",
-    "COLOR_ATTACHMENT15",
-    "COLOR_ATTACHMENT2",
-    "COLOR_ATTACHMENT3",
-    "COLOR_ATTACHMENT4",
-    "COLOR_ATTACHMENT5",
-    "COLOR_ATTACHMENT6",
-    "COLOR_ATTACHMENT7",
-    "COLOR_ATTACHMENT8",
-    "COLOR_ATTACHMENT9",
-    "COLOR_BUFFER_BIT",
-    "COLOR_CLEAR_VALUE",
-    "COLOR_WRITEMASK",
-    "COMMENT_NODE",
-    "COMPARE_REF_TO_TEXTURE",
-    "COMPILE_STATUS",
-    "COMPLETION_STATUS_KHR",
-    "COMPRESSED_RGBA_S3TC_DXT1_EXT",
-    "COMPRESSED_RGBA_S3TC_DXT3_EXT",
-    "COMPRESSED_RGBA_S3TC_DXT5_EXT",
-    "COMPRESSED_RGB_S3TC_DXT1_EXT",
-    "COMPRESSED_TEXTURE_FORMATS",
-    "CONDITION_SATISFIED",
-    "CONFIGURATION_UNSUPPORTED",
-    "CONNECTING",
-    "CONSTANT_ALPHA",
-    "CONSTANT_COLOR",
-    "CONSTRAINT_ERR",
-    "CONTEXT_LOST_WEBGL",
-    "CONTROL_MASK",
-    "COPY_READ_BUFFER",
-    "COPY_READ_BUFFER_BINDING",
-    "COPY_WRITE_BUFFER",
-    "COPY_WRITE_BUFFER_BINDING",
-    "COUNTER_STYLE_RULE",
-    "CSS",
-    "CSS2Properties",
-    "CSSAnimation",
-    "CSSCharsetRule",
-    "CSSConditionRule",
-    "CSSCounterStyleRule",
-    "CSSFontFaceRule",
-    "CSSFontFeatureValuesRule",
-    "CSSGroupingRule",
-    "CSSImageValue",
-    "CSSImportRule",
-    "CSSKeyframeRule",
-    "CSSKeyframesRule",
-    "CSSKeywordValue",
-    "CSSMathInvert",
-    "CSSMathMax",
-    "CSSMathMin",
-    "CSSMathNegate",
-    "CSSMathProduct",
-    "CSSMathSum",
-    "CSSMathValue",
-    "CSSMatrixComponent",
-    "CSSMediaRule",
-    "CSSMozDocumentRule",
-    "CSSNameSpaceRule",
-    "CSSNamespaceRule",
-    "CSSNumericArray",
-    "CSSNumericValue",
-    "CSSPageRule",
-    "CSSPerspective",
-    "CSSPositionValue",
-    "CSSPrimitiveValue",
-    "CSSRotate",
-    "CSSRule",
-    "CSSRuleList",
-    "CSSScale",
-    "CSSSkew",
-    "CSSSkewX",
-    "CSSSkewY",
-    "CSSStyleDeclaration",
-    "CSSStyleRule",
-    "CSSStyleSheet",
-    "CSSStyleValue",
-    "CSSSupportsRule",
-    "CSSTransformComponent",
-    "CSSTransformValue",
-    "CSSTransition",
-    "CSSTranslate",
-    "CSSUnitValue",
-    "CSSUnknownRule",
-    "CSSUnparsedValue",
-    "CSSValue",
-    "CSSValueList",
-    "CSSVariableReferenceValue",
-    "CSSVariablesDeclaration",
-    "CSSVariablesRule",
-    "CSSViewportRule",
-    "CSS_ATTR",
-    "CSS_CM",
-    "CSS_COUNTER",
-    "CSS_CUSTOM",
-    "CSS_DEG",
-    "CSS_DIMENSION",
-    "CSS_EMS",
-    "CSS_EXS",
-    "CSS_FILTER_BLUR",
-    "CSS_FILTER_BRIGHTNESS",
-    "CSS_FILTER_CONTRAST",
-    "CSS_FILTER_CUSTOM",
-    "CSS_FILTER_DROP_SHADOW",
-    "CSS_FILTER_GRAYSCALE",
-    "CSS_FILTER_HUE_ROTATE",
-    "CSS_FILTER_INVERT",
-    "CSS_FILTER_OPACITY",
-    "CSS_FILTER_REFERENCE",
-    "CSS_FILTER_SATURATE",
-    "CSS_FILTER_SEPIA",
-    "CSS_GRAD",
-    "CSS_HZ",
-    "CSS_IDENT",
-    "CSS_IN",
-    "CSS_INHERIT",
-    "CSS_KHZ",
-    "CSS_MATRIX",
-    "CSS_MATRIX3D",
-    "CSS_MM",
-    "CSS_MS",
-    "CSS_NUMBER",
-    "CSS_PC",
-    "CSS_PERCENTAGE",
-    "CSS_PERSPECTIVE",
-    "CSS_PRIMITIVE_VALUE",
-    "CSS_PT",
-    "CSS_PX",
-    "CSS_RAD",
-    "CSS_RECT",
-    "CSS_RGBCOLOR",
-    "CSS_ROTATE",
-    "CSS_ROTATE3D",
-    "CSS_ROTATEX",
-    "CSS_ROTATEY",
-    "CSS_ROTATEZ",
-    "CSS_S",
-    "CSS_SCALE",
-    "CSS_SCALE3D",
-    "CSS_SCALEX",
-    "CSS_SCALEY",
-    "CSS_SCALEZ",
-    "CSS_SKEW",
-    "CSS_SKEWX",
-    "CSS_SKEWY",
-    "CSS_STRING",
-    "CSS_TRANSLATE",
-    "CSS_TRANSLATE3D",
-    "CSS_TRANSLATEX",
-    "CSS_TRANSLATEY",
-    "CSS_TRANSLATEZ",
-    "CSS_UNKNOWN",
-    "CSS_URI",
-    "CSS_VALUE_LIST",
-    "CSS_VH",
-    "CSS_VMAX",
-    "CSS_VMIN",
-    "CSS_VW",
-    "CULL_FACE",
-    "CULL_FACE_MODE",
-    "CURRENT_PROGRAM",
-    "CURRENT_QUERY",
-    "CURRENT_VERTEX_ATTRIB",
-    "CUSTOM",
-    "CW",
-    "Cache",
-    "CacheStorage",
-    "CanvasCaptureMediaStream",
-    "CanvasCaptureMediaStreamTrack",
-    "CanvasGradient",
-    "CanvasPattern",
-    "CanvasRenderingContext2D",
-    "CaretPosition",
-    "ChannelMergerNode",
-    "ChannelSplitterNode",
-    "CharacterData",
-    "ClientRect",
-    "ClientRectList",
-    "Clipboard",
-    "ClipboardEvent",
-    "ClipboardItem",
-    "CloseEvent",
-    "Collator",
-    "CommandEvent",
-    "Comment",
-    "CompileError",
-    "CompositionEvent",
-    "CompressionStream",
-    "Console",
-    "ConstantSourceNode",
-    "Controllers",
-    "ConvolverNode",
-    "CountQueuingStrategy",
-    "Counter",
-    "Credential",
-    "CredentialsContainer",
-    "Crypto",
-    "CryptoKey",
-    "CustomElementRegistry",
-    "CustomEvent",
-    "DATABASE_ERR",
-    "DATA_CLONE_ERR",
-    "DATA_ERR",
-    "DBLCLICK",
-    "DECR",
-    "DECR_WRAP",
-    "DELETE_STATUS",
-    "DEPTH",
-    "DEPTH24_STENCIL8",
-    "DEPTH32F_STENCIL8",
-    "DEPTH_ATTACHMENT",
-    "DEPTH_BITS",
-    "DEPTH_BUFFER_BIT",
-    "DEPTH_CLEAR_VALUE",
-    "DEPTH_COMPONENT",
-    "DEPTH_COMPONENT16",
-    "DEPTH_COMPONENT24",
-    "DEPTH_COMPONENT32F",
-    "DEPTH_FUNC",
-    "DEPTH_RANGE",
-    "DEPTH_STENCIL",
-    "DEPTH_STENCIL_ATTACHMENT",
-    "DEPTH_TEST",
-    "DEPTH_WRITEMASK",
-    "DEVICE_INELIGIBLE",
-    "DIRECTION_DOWN",
-    "DIRECTION_LEFT",
-    "DIRECTION_RIGHT",
-    "DIRECTION_UP",
-    "DISABLED",
-    "DISPATCH_REQUEST_ERR",
-    "DITHER",
-    "DOCUMENT_FRAGMENT_NODE",
-    "DOCUMENT_NODE",
-    "DOCUMENT_POSITION_CONTAINED_BY",
-    "DOCUMENT_POSITION_CONTAINS",
-    "DOCUMENT_POSITION_DISCONNECTED",
-    "DOCUMENT_POSITION_FOLLOWING",
-    "DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC",
-    "DOCUMENT_POSITION_PRECEDING",
-    "DOCUMENT_TYPE_NODE",
-    "DOMCursor",
-    "DOMError",
-    "DOMException",
-    "DOMImplementation",
-    "DOMImplementationLS",
-    "DOMMatrix",
-    "DOMMatrixReadOnly",
-    "DOMParser",
-    "DOMPoint",
-    "DOMPointReadOnly",
-    "DOMQuad",
-    "DOMRect",
-    "DOMRectList",
-    "DOMRectReadOnly",
-    "DOMRequest",
-    "DOMSTRING_SIZE_ERR",
-    "DOMSettableTokenList",
-    "DOMStringList",
-    "DOMStringMap",
-    "DOMTokenList",
-    "DOMTransactionEvent",
-    "DOM_DELTA_LINE",
-    "DOM_DELTA_PAGE",
-    "DOM_DELTA_PIXEL",
-    "DOM_INPUT_METHOD_DROP",
-    "DOM_INPUT_METHOD_HANDWRITING",
-    "DOM_INPUT_METHOD_IME",
-    "DOM_INPUT_METHOD_KEYBOARD",
-    "DOM_INPUT_METHOD_MULTIMODAL",
-    "DOM_INPUT_METHOD_OPTION",
-    "DOM_INPUT_METHOD_PASTE",
-    "DOM_INPUT_METHOD_SCRIPT",
-    "DOM_INPUT_METHOD_UNKNOWN",
-    "DOM_INPUT_METHOD_VOICE",
-    "DOM_KEY_LOCATION_JOYSTICK",
-    "DOM_KEY_LOCATION_LEFT",
-    "DOM_KEY_LOCATION_MOBILE",
-    "DOM_KEY_LOCATION_NUMPAD",
-    "DOM_KEY_LOCATION_RIGHT",
-    "DOM_KEY_LOCATION_STANDARD",
-    "DOM_VK_0",
-    "DOM_VK_1",
-    "DOM_VK_2",
-    "DOM_VK_3",
-    "DOM_VK_4",
-    "DOM_VK_5",
-    "DOM_VK_6",
-    "DOM_VK_7",
-    "DOM_VK_8",
-    "DOM_VK_9",
-    "DOM_VK_A",
-    "DOM_VK_ACCEPT",
-    "DOM_VK_ADD",
-    "DOM_VK_ALT",
-    "DOM_VK_ALTGR",
-    "DOM_VK_AMPERSAND",
-    "DOM_VK_ASTERISK",
-    "DOM_VK_AT",
-    "DOM_VK_ATTN",
-    "DOM_VK_B",
-    "DOM_VK_BACKSPACE",
-    "DOM_VK_BACK_QUOTE",
-    "DOM_VK_BACK_SLASH",
-    "DOM_VK_BACK_SPACE",
-    "DOM_VK_C",
-    "DOM_VK_CANCEL",
-    "DOM_VK_CAPS_LOCK",
-    "DOM_VK_CIRCUMFLEX",
-    "DOM_VK_CLEAR",
-    "DOM_VK_CLOSE_BRACKET",
-    "DOM_VK_CLOSE_CURLY_BRACKET",
-    "DOM_VK_CLOSE_PAREN",
-    "DOM_VK_COLON",
-    "DOM_VK_COMMA",
-    "DOM_VK_CONTEXT_MENU",
-    "DOM_VK_CONTROL",
-    "DOM_VK_CONVERT",
-    "DOM_VK_CRSEL",
-    "DOM_VK_CTRL",
-    "DOM_VK_D",
-    "DOM_VK_DECIMAL",
-    "DOM_VK_DELETE",
-    "DOM_VK_DIVIDE",
-    "DOM_VK_DOLLAR",
-    "DOM_VK_DOUBLE_QUOTE",
-    "DOM_VK_DOWN",
-    "DOM_VK_E",
-    "DOM_VK_EISU",
-    "DOM_VK_END",
-    "DOM_VK_ENTER",
-    "DOM_VK_EQUALS",
-    "DOM_VK_EREOF",
-    "DOM_VK_ESCAPE",
-    "DOM_VK_EXCLAMATION",
-    "DOM_VK_EXECUTE",
-    "DOM_VK_EXSEL",
-    "DOM_VK_F",
-    "DOM_VK_F1",
-    "DOM_VK_F10",
-    "DOM_VK_F11",
-    "DOM_VK_F12",
-    "DOM_VK_F13",
-    "DOM_VK_F14",
-    "DOM_VK_F15",
-    "DOM_VK_F16",
-    "DOM_VK_F17",
-    "DOM_VK_F18",
-    "DOM_VK_F19",
-    "DOM_VK_F2",
-    "DOM_VK_F20",
-    "DOM_VK_F21",
-    "DOM_VK_F22",
-    "DOM_VK_F23",
-    "DOM_VK_F24",
-    "DOM_VK_F25",
-    "DOM_VK_F26",
-    "DOM_VK_F27",
-    "DOM_VK_F28",
-    "DOM_VK_F29",
-    "DOM_VK_F3",
-    "DOM_VK_F30",
-    "DOM_VK_F31",
-    "DOM_VK_F32",
-    "DOM_VK_F33",
-    "DOM_VK_F34",
-    "DOM_VK_F35",
-    "DOM_VK_F36",
-    "DOM_VK_F4",
-    "DOM_VK_F5",
-    "DOM_VK_F6",
-    "DOM_VK_F7",
-    "DOM_VK_F8",
-    "DOM_VK_F9",
-    "DOM_VK_FINAL",
-    "DOM_VK_FRONT",
-    "DOM_VK_G",
-    "DOM_VK_GREATER_THAN",
-    "DOM_VK_H",
-    "DOM_VK_HANGUL",
-    "DOM_VK_HANJA",
-    "DOM_VK_HASH",
-    "DOM_VK_HELP",
-    "DOM_VK_HK_TOGGLE",
-    "DOM_VK_HOME",
-    "DOM_VK_HYPHEN_MINUS",
-    "DOM_VK_I",
-    "DOM_VK_INSERT",
-    "DOM_VK_J",
-    "DOM_VK_JUNJA",
-    "DOM_VK_K",
-    "DOM_VK_KANA",
-    "DOM_VK_KANJI",
-    "DOM_VK_L",
-    "DOM_VK_LEFT",
-    "DOM_VK_LEFT_TAB",
-    "DOM_VK_LESS_THAN",
-    "DOM_VK_M",
-    "DOM_VK_META",
-    "DOM_VK_MODECHANGE",
-    "DOM_VK_MULTIPLY",
-    "DOM_VK_N",
-    "DOM_VK_NONCONVERT",
-    "DOM_VK_NUMPAD0",
-    "DOM_VK_NUMPAD1",
-    "DOM_VK_NUMPAD2",
-    "DOM_VK_NUMPAD3",
-    "DOM_VK_NUMPAD4",
-    "DOM_VK_NUMPAD5",
-    "DOM_VK_NUMPAD6",
-    "DOM_VK_NUMPAD7",
-    "DOM_VK_NUMPAD8",
-    "DOM_VK_NUMPAD9",
-    "DOM_VK_NUM_LOCK",
-    "DOM_VK_O",
-    "DOM_VK_OEM_1",
-    "DOM_VK_OEM_102",
-    "DOM_VK_OEM_2",
-    "DOM_VK_OEM_3",
-    "DOM_VK_OEM_4",
-    "DOM_VK_OEM_5",
-    "DOM_VK_OEM_6",
-    "DOM_VK_OEM_7",
-    "DOM_VK_OEM_8",
-    "DOM_VK_OEM_COMMA",
-    "DOM_VK_OEM_MINUS",
-    "DOM_VK_OEM_PERIOD",
-    "DOM_VK_OEM_PLUS",
-    "DOM_VK_OPEN_BRACKET",
-    "DOM_VK_OPEN_CURLY_BRACKET",
-    "DOM_VK_OPEN_PAREN",
-    "DOM_VK_P",
-    "DOM_VK_PA1",
-    "DOM_VK_PAGEDOWN",
-    "DOM_VK_PAGEUP",
-    "DOM_VK_PAGE_DOWN",
-    "DOM_VK_PAGE_UP",
-    "DOM_VK_PAUSE",
-    "DOM_VK_PERCENT",
-    "DOM_VK_PERIOD",
-    "DOM_VK_PIPE",
-    "DOM_VK_PLAY",
-    "DOM_VK_PLUS",
-    "DOM_VK_PRINT",
-    "DOM_VK_PRINTSCREEN",
-    "DOM_VK_PROCESSKEY",
-    "DOM_VK_PROPERITES",
-    "DOM_VK_Q",
-    "DOM_VK_QUESTION_MARK",
-    "DOM_VK_QUOTE",
-    "DOM_VK_R",
-    "DOM_VK_REDO",
-    "DOM_VK_RETURN",
-    "DOM_VK_RIGHT",
-    "DOM_VK_S",
-    "DOM_VK_SCROLL_LOCK",
-    "DOM_VK_SELECT",
-    "DOM_VK_SEMICOLON",
-    "DOM_VK_SEPARATOR",
-    "DOM_VK_SHIFT",
-    "DOM_VK_SLASH",
-    "DOM_VK_SLEEP",
-    "DOM_VK_SPACE",
-    "DOM_VK_SUBTRACT",
-    "DOM_VK_T",
-    "DOM_VK_TAB",
-    "DOM_VK_TILDE",
-    "DOM_VK_U",
-    "DOM_VK_UNDERSCORE",
-    "DOM_VK_UNDO",
-    "DOM_VK_UNICODE",
-    "DOM_VK_UP",
-    "DOM_VK_V",
-    "DOM_VK_VOLUME_DOWN",
-    "DOM_VK_VOLUME_MUTE",
-    "DOM_VK_VOLUME_UP",
-    "DOM_VK_W",
-    "DOM_VK_WIN",
-    "DOM_VK_WINDOW",
-    "DOM_VK_WIN_ICO_00",
-    "DOM_VK_WIN_ICO_CLEAR",
-    "DOM_VK_WIN_ICO_HELP",
-    "DOM_VK_WIN_OEM_ATTN",
-    "DOM_VK_WIN_OEM_AUTO",
-    "DOM_VK_WIN_OEM_BACKTAB",
-    "DOM_VK_WIN_OEM_CLEAR",
-    "DOM_VK_WIN_OEM_COPY",
-    "DOM_VK_WIN_OEM_CUSEL",
-    "DOM_VK_WIN_OEM_ENLW",
-    "DOM_VK_WIN_OEM_FINISH",
-    "DOM_VK_WIN_OEM_FJ_JISHO",
-    "DOM_VK_WIN_OEM_FJ_LOYA",
-    "DOM_VK_WIN_OEM_FJ_MASSHOU",
-    "DOM_VK_WIN_OEM_FJ_ROYA",
-    "DOM_VK_WIN_OEM_FJ_TOUROKU",
-    "DOM_VK_WIN_OEM_JUMP",
-    "DOM_VK_WIN_OEM_PA1",
-    "DOM_VK_WIN_OEM_PA2",
-    "DOM_VK_WIN_OEM_PA3",
-    "DOM_VK_WIN_OEM_RESET",
-    "DOM_VK_WIN_OEM_WSCTRL",
-    "DOM_VK_X",
-    "DOM_VK_XF86XK_ADD_FAVORITE",
-    "DOM_VK_XF86XK_APPLICATION_LEFT",
-    "DOM_VK_XF86XK_APPLICATION_RIGHT",
-    "DOM_VK_XF86XK_AUDIO_CYCLE_TRACK",
-    "DOM_VK_XF86XK_AUDIO_FORWARD",
-    "DOM_VK_XF86XK_AUDIO_LOWER_VOLUME",
-    "DOM_VK_XF86XK_AUDIO_MEDIA",
-    "DOM_VK_XF86XK_AUDIO_MUTE",
-    "DOM_VK_XF86XK_AUDIO_NEXT",
-    "DOM_VK_XF86XK_AUDIO_PAUSE",
-    "DOM_VK_XF86XK_AUDIO_PLAY",
-    "DOM_VK_XF86XK_AUDIO_PREV",
-    "DOM_VK_XF86XK_AUDIO_RAISE_VOLUME",
-    "DOM_VK_XF86XK_AUDIO_RANDOM_PLAY",
-    "DOM_VK_XF86XK_AUDIO_RECORD",
-    "DOM_VK_XF86XK_AUDIO_REPEAT",
-    "DOM_VK_XF86XK_AUDIO_REWIND",
-    "DOM_VK_XF86XK_AUDIO_STOP",
-    "DOM_VK_XF86XK_AWAY",
-    "DOM_VK_XF86XK_BACK",
-    "DOM_VK_XF86XK_BACK_FORWARD",
-    "DOM_VK_XF86XK_BATTERY",
-    "DOM_VK_XF86XK_BLUE",
-    "DOM_VK_XF86XK_BLUETOOTH",
-    "DOM_VK_XF86XK_BOOK",
-    "DOM_VK_XF86XK_BRIGHTNESS_ADJUST",
-    "DOM_VK_XF86XK_CALCULATOR",
-    "DOM_VK_XF86XK_CALENDAR",
-    "DOM_VK_XF86XK_CD",
-    "DOM_VK_XF86XK_CLOSE",
-    "DOM_VK_XF86XK_COMMUNITY",
-    "DOM_VK_XF86XK_CONTRAST_ADJUST",
-    "DOM_VK_XF86XK_COPY",
-    "DOM_VK_XF86XK_CUT",
-    "DOM_VK_XF86XK_CYCLE_ANGLE",
-    "DOM_VK_XF86XK_DISPLAY",
-    "DOM_VK_XF86XK_DOCUMENTS",
-    "DOM_VK_XF86XK_DOS",
-    "DOM_VK_XF86XK_EJECT",
-    "DOM_VK_XF86XK_EXCEL",
-    "DOM_VK_XF86XK_EXPLORER",
-    "DOM_VK_XF86XK_FAVORITES",
-    "DOM_VK_XF86XK_FINANCE",
-    "DOM_VK_XF86XK_FORWARD",
-    "DOM_VK_XF86XK_FRAME_BACK",
-    "DOM_VK_XF86XK_FRAME_FORWARD",
-    "DOM_VK_XF86XK_GAME",
-    "DOM_VK_XF86XK_GO",
-    "DOM_VK_XF86XK_GREEN",
-    "DOM_VK_XF86XK_HIBERNATE",
-    "DOM_VK_XF86XK_HISTORY",
-    "DOM_VK_XF86XK_HOME_PAGE",
-    "DOM_VK_XF86XK_HOT_LINKS",
-    "DOM_VK_XF86XK_I_TOUCH",
-    "DOM_VK_XF86XK_KBD_BRIGHTNESS_DOWN",
-    "DOM_VK_XF86XK_KBD_BRIGHTNESS_UP",
-    "DOM_VK_XF86XK_KBD_LIGHT_ON_OFF",
-    "DOM_VK_XF86XK_LAUNCH0",
-    "DOM_VK_XF86XK_LAUNCH1",
-    "DOM_VK_XF86XK_LAUNCH2",
-    "DOM_VK_XF86XK_LAUNCH3",
-    "DOM_VK_XF86XK_LAUNCH4",
-    "DOM_VK_XF86XK_LAUNCH5",
-    "DOM_VK_XF86XK_LAUNCH6",
-    "DOM_VK_XF86XK_LAUNCH7",
-    "DOM_VK_XF86XK_LAUNCH8",
-    "DOM_VK_XF86XK_LAUNCH9",
-    "DOM_VK_XF86XK_LAUNCH_A",
-    "DOM_VK_XF86XK_LAUNCH_B",
-    "DOM_VK_XF86XK_LAUNCH_C",
-    "DOM_VK_XF86XK_LAUNCH_D",
-    "DOM_VK_XF86XK_LAUNCH_E",
-    "DOM_VK_XF86XK_LAUNCH_F",
-    "DOM_VK_XF86XK_LIGHT_BULB",
-    "DOM_VK_XF86XK_LOG_OFF",
-    "DOM_VK_XF86XK_MAIL",
-    "DOM_VK_XF86XK_MAIL_FORWARD",
-    "DOM_VK_XF86XK_MARKET",
-    "DOM_VK_XF86XK_MEETING",
-    "DOM_VK_XF86XK_MEMO",
-    "DOM_VK_XF86XK_MENU_KB",
-    "DOM_VK_XF86XK_MENU_PB",
-    "DOM_VK_XF86XK_MESSENGER",
-    "DOM_VK_XF86XK_MON_BRIGHTNESS_DOWN",
-    "DOM_VK_XF86XK_MON_BRIGHTNESS_UP",
-    "DOM_VK_XF86XK_MUSIC",
-    "DOM_VK_XF86XK_MY_COMPUTER",
-    "DOM_VK_XF86XK_MY_SITES",
-    "DOM_VK_XF86XK_NEW",
-    "DOM_VK_XF86XK_NEWS",
-    "DOM_VK_XF86XK_OFFICE_HOME",
-    "DOM_VK_XF86XK_OPEN",
-    "DOM_VK_XF86XK_OPEN_URL",
-    "DOM_VK_XF86XK_OPTION",
-    "DOM_VK_XF86XK_PASTE",
-    "DOM_VK_XF86XK_PHONE",
-    "DOM_VK_XF86XK_PICTURES",
-    "DOM_VK_XF86XK_POWER_DOWN",
-    "DOM_VK_XF86XK_POWER_OFF",
-    "DOM_VK_XF86XK_RED",
-    "DOM_VK_XF86XK_REFRESH",
-    "DOM_VK_XF86XK_RELOAD",
-    "DOM_VK_XF86XK_REPLY",
-    "DOM_VK_XF86XK_ROCKER_DOWN",
-    "DOM_VK_XF86XK_ROCKER_ENTER",
-    "DOM_VK_XF86XK_ROCKER_UP",
-    "DOM_VK_XF86XK_ROTATE_WINDOWS",
-    "DOM_VK_XF86XK_ROTATION_KB",
-    "DOM_VK_XF86XK_ROTATION_PB",
-    "DOM_VK_XF86XK_SAVE",
-    "DOM_VK_XF86XK_SCREEN_SAVER",
-    "DOM_VK_XF86XK_SCROLL_CLICK",
-    "DOM_VK_XF86XK_SCROLL_DOWN",
-    "DOM_VK_XF86XK_SCROLL_UP",
-    "DOM_VK_XF86XK_SEARCH",
-    "DOM_VK_XF86XK_SEND",
-    "DOM_VK_XF86XK_SHOP",
-    "DOM_VK_XF86XK_SPELL",
-    "DOM_VK_XF86XK_SPLIT_SCREEN",
-    "DOM_VK_XF86XK_STANDBY",
-    "DOM_VK_XF86XK_START",
-    "DOM_VK_XF86XK_STOP",
-    "DOM_VK_XF86XK_SUBTITLE",
-    "DOM_VK_XF86XK_SUPPORT",
-    "DOM_VK_XF86XK_SUSPEND",
-    "DOM_VK_XF86XK_TASK_PANE",
-    "DOM_VK_XF86XK_TERMINAL",
-    "DOM_VK_XF86XK_TIME",
-    "DOM_VK_XF86XK_TOOLS",
-    "DOM_VK_XF86XK_TOP_MENU",
-    "DOM_VK_XF86XK_TO_DO_LIST",
-    "DOM_VK_XF86XK_TRAVEL",
-    "DOM_VK_XF86XK_USER1KB",
-    "DOM_VK_XF86XK_USER2KB",
-    "DOM_VK_XF86XK_USER_PB",
-    "DOM_VK_XF86XK_UWB",
-    "DOM_VK_XF86XK_VENDOR_HOME",
-    "DOM_VK_XF86XK_VIDEO",
-    "DOM_VK_XF86XK_VIEW",
-    "DOM_VK_XF86XK_WAKE_UP",
-    "DOM_VK_XF86XK_WEB_CAM",
-    "DOM_VK_XF86XK_WHEEL_BUTTON",
-    "DOM_VK_XF86XK_WLAN",
-    "DOM_VK_XF86XK_WORD",
-    "DOM_VK_XF86XK_WWW",
-    "DOM_VK_XF86XK_XFER",
-    "DOM_VK_XF86XK_YELLOW",
-    "DOM_VK_XF86XK_ZOOM_IN",
-    "DOM_VK_XF86XK_ZOOM_OUT",
-    "DOM_VK_Y",
-    "DOM_VK_Z",
-    "DOM_VK_ZOOM",
-    "DONE",
-    "DONT_CARE",
-    "DOWNLOADING",
-    "DRAGDROP",
-    "DRAW_BUFFER0",
-    "DRAW_BUFFER1",
-    "DRAW_BUFFER10",
-    "DRAW_BUFFER11",
-    "DRAW_BUFFER12",
-    "DRAW_BUFFER13",
-    "DRAW_BUFFER14",
-    "DRAW_BUFFER15",
-    "DRAW_BUFFER2",
-    "DRAW_BUFFER3",
-    "DRAW_BUFFER4",
-    "DRAW_BUFFER5",
-    "DRAW_BUFFER6",
-    "DRAW_BUFFER7",
-    "DRAW_BUFFER8",
-    "DRAW_BUFFER9",
-    "DRAW_FRAMEBUFFER",
-    "DRAW_FRAMEBUFFER_BINDING",
-    "DST_ALPHA",
-    "DST_COLOR",
-    "DYNAMIC_COPY",
-    "DYNAMIC_DRAW",
-    "DYNAMIC_READ",
-    "DataChannel",
-    "DataTransfer",
-    "DataTransferItem",
-    "DataTransferItemList",
-    "DataView",
-    "Date",
-    "DateTimeFormat",
-    "DecompressionStream",
-    "DelayNode",
-    "DeprecationReportBody",
-    "DesktopNotification",
-    "DesktopNotificationCenter",
-    "DeviceLightEvent",
-    "DeviceMotionEvent",
-    "DeviceMotionEventAcceleration",
-    "DeviceMotionEventRotationRate",
-    "DeviceOrientationEvent",
-    "DeviceProximityEvent",
-    "DeviceStorage",
-    "DeviceStorageChangeEvent",
-    "Directory",
-    "DisplayNames",
-    "Document",
-    "DocumentFragment",
-    "DocumentTimeline",
-    "DocumentType",
-    "DragEvent",
-    "DynamicsCompressorNode",
-    "E",
-    "ELEMENT_ARRAY_BUFFER",
-    "ELEMENT_ARRAY_BUFFER_BINDING",
-    "ELEMENT_NODE",
-    "EMPTY",
-    "ENCODING_ERR",
-    "ENDED",
-    "END_TO_END",
-    "END_TO_START",
-    "ENTITY_NODE",
-    "ENTITY_REFERENCE_NODE",
-    "EPSILON",
-    "EQUAL",
-    "EQUALPOWER",
-    "ERROR",
-    "EXPONENTIAL_DISTANCE",
-    "Element",
-    "ElementInternals",
-    "ElementQuery",
-    "EnterPictureInPictureEvent",
-    "Entity",
-    "EntityReference",
-    "Error",
-    "ErrorEvent",
-    "EvalError",
-    "Event",
-    "EventException",
-    "EventSource",
-    "EventTarget",
-    "External",
-    "FASTEST",
-    "FIDOSDK",
-    "FILTER_ACCEPT",
-    "FILTER_INTERRUPT",
-    "FILTER_REJECT",
-    "FILTER_SKIP",
-    "FINISHED_STATE",
-    "FIRST_ORDERED_NODE_TYPE",
-    "FLOAT",
-    "FLOAT_32_UNSIGNED_INT_24_8_REV",
-    "FLOAT_MAT2",
-    "FLOAT_MAT2x3",
-    "FLOAT_MAT2x4",
-    "FLOAT_MAT3",
-    "FLOAT_MAT3x2",
-    "FLOAT_MAT3x4",
-    "FLOAT_MAT4",
-    "FLOAT_MAT4x2",
-    "FLOAT_MAT4x3",
-    "FLOAT_VEC2",
-    "FLOAT_VEC3",
-    "FLOAT_VEC4",
-    "FOCUS",
-    "FONT_FACE_RULE",
-    "FONT_FEATURE_VALUES_RULE",
-    "FRAGMENT_SHADER",
-    "FRAGMENT_SHADER_DERIVATIVE_HINT",
-    "FRAGMENT_SHADER_DERIVATIVE_HINT_OES",
-    "FRAMEBUFFER",
-    "FRAMEBUFFER_ATTACHMENT_ALPHA_SIZE",
-    "FRAMEBUFFER_ATTACHMENT_BLUE_SIZE",
-    "FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING",
-    "FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE",
-    "FRAMEBUFFER_ATTACHMENT_DEPTH_SIZE",
-    "FRAMEBUFFER_ATTACHMENT_GREEN_SIZE",
-    "FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",
-    "FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",
-    "FRAMEBUFFER_ATTACHMENT_RED_SIZE",
-    "FRAMEBUFFER_ATTACHMENT_STENCIL_SIZE",
-    "FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",
-    "FRAMEBUFFER_ATTACHMENT_TEXTURE_LAYER",
-    "FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",
-    "FRAMEBUFFER_BINDING",
-    "FRAMEBUFFER_COMPLETE",
-    "FRAMEBUFFER_DEFAULT",
-    "FRAMEBUFFER_INCOMPLETE_ATTACHMENT",
-    "FRAMEBUFFER_INCOMPLETE_DIMENSIONS",
-    "FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",
-    "FRAMEBUFFER_INCOMPLETE_MULTISAMPLE",
-    "FRAMEBUFFER_UNSUPPORTED",
-    "FRONT",
-    "FRONT_AND_BACK",
-    "FRONT_FACE",
-    "FUNC_ADD",
-    "FUNC_REVERSE_SUBTRACT",
-    "FUNC_SUBTRACT",
-    "FeaturePolicy",
-    "FeaturePolicyViolationReportBody",
-    "FederatedCredential",
-    "Feed",
-    "FeedEntry",
-    "File",
-    "FileError",
-    "FileList",
-    "FileReader",
-    "FileSystem",
-    "FileSystemDirectoryEntry",
-    "FileSystemDirectoryReader",
-    "FileSystemEntry",
-    "FileSystemFileEntry",
-    "FinalizationRegistry",
-    "FindInPage",
-    "Float32Array",
-    "Float64Array",
-    "FocusEvent",
-    "FontFace",
-    "FontFaceSet",
-    "FontFaceSetLoadEvent",
-    "FormData",
-    "FormDataEvent",
-    "FragmentDirective",
-    "Function",
-    "GENERATE_MIPMAP_HINT",
-    "GEQUAL",
-    "GREATER",
-    "GREEN_BITS",
-    "GainNode",
-    "Gamepad",
-    "GamepadAxisMoveEvent",
-    "GamepadButton",
-    "GamepadButtonEvent",
-    "GamepadEvent",
-    "GamepadHapticActuator",
-    "GamepadPose",
-    "Geolocation",
-    "GeolocationCoordinates",
-    "GeolocationPosition",
-    "GeolocationPositionError",
-    "GestureEvent",
-    "Global",
-    "Gyroscope",
-    "HALF_FLOAT",
-    "HAVE_CURRENT_DATA",
-    "HAVE_ENOUGH_DATA",
-    "HAVE_FUTURE_DATA",
-    "HAVE_METADATA",
-    "HAVE_NOTHING",
-    "HEADERS_RECEIVED",
-    "HIDDEN",
-    "HIERARCHY_REQUEST_ERR",
-    "HIGHPASS",
-    "HIGHSHELF",
-    "HIGH_FLOAT",
-    "HIGH_INT",
-    "HORIZONTAL",
-    "HORIZONTAL_AXIS",
-    "HRTF",
-    "HTMLAllCollection",
-    "HTMLAnchorElement",
-    "HTMLAppletElement",
-    "HTMLAreaElement",
-    "HTMLAudioElement",
-    "HTMLBRElement",
-    "HTMLBaseElement",
-    "HTMLBaseFontElement",
-    "HTMLBlockquoteElement",
-    "HTMLBodyElement",
-    "HTMLButtonElement",
-    "HTMLCanvasElement",
-    "HTMLCollection",
-    "HTMLCommandElement",
-    "HTMLContentElement",
-    "HTMLDListElement",
-    "HTMLDataElement",
-    "HTMLDataListElement",
-    "HTMLDetailsElement",
-    "HTMLDialogElement",
-    "HTMLDirectoryElement",
-    "HTMLDivElement",
-    "HTMLDocument",
-    "HTMLElement",
-    "HTMLEmbedElement",
-    "HTMLFieldSetElement",
-    "HTMLFontElement",
-    "HTMLFormControlsCollection",
-    "HTMLFormElement",
-    "HTMLFrameElement",
-    "HTMLFrameSetElement",
-    "HTMLHRElement",
-    "HTMLHeadElement",
-    "HTMLHeadingElement",
-    "HTMLHtmlElement",
-    "HTMLIFrameElement",
-    "HTMLImageElement",
-    "HTMLInputElement",
-    "HTMLIsIndexElement",
-    "HTMLKeygenElement",
-    "HTMLLIElement",
-    "HTMLLabelElement",
-    "HTMLLegendElement",
-    "HTMLLinkElement",
-    "HTMLMapElement",
-    "HTMLMarqueeElement",
-    "HTMLMediaElement",
-    "HTMLMenuElement",
-    "HTMLMenuItemElement",
-    "HTMLMetaElement",
-    "HTMLMeterElement",
-    "HTMLModElement",
-    "HTMLOListElement",
-    "HTMLObjectElement",
-    "HTMLOptGroupElement",
-    "HTMLOptionElement",
-    "HTMLOptionsCollection",
-    "HTMLOutputElement",
-    "HTMLParagraphElement",
-    "HTMLParamElement",
-    "HTMLPictureElement",
-    "HTMLPreElement",
-    "HTMLProgressElement",
-    "HTMLPropertiesCollection",
-    "HTMLQuoteElement",
-    "HTMLScriptElement",
-    "HTMLSelectElement",
-    "HTMLShadowElement",
-    "HTMLSlotElement",
-    "HTMLSourceElement",
-    "HTMLSpanElement",
-    "HTMLStyleElement",
-    "HTMLTableCaptionElement",
-    "HTMLTableCellElement",
-    "HTMLTableColElement",
-    "HTMLTableElement",
-    "HTMLTableRowElement",
-    "HTMLTableSectionElement",
-    "HTMLTemplateElement",
-    "HTMLTextAreaElement",
-    "HTMLTimeElement",
-    "HTMLTitleElement",
-    "HTMLTrackElement",
-    "HTMLUListElement",
-    "HTMLUnknownElement",
-    "HTMLVideoElement",
-    "HashChangeEvent",
-    "Headers",
-    "History",
-    "Hz",
-    "ICE_CHECKING",
-    "ICE_CLOSED",
-    "ICE_COMPLETED",
-    "ICE_CONNECTED",
-    "ICE_FAILED",
-    "ICE_GATHERING",
-    "ICE_WAITING",
-    "IDBCursor",
-    "IDBCursorWithValue",
-    "IDBDatabase",
-    "IDBDatabaseException",
-    "IDBFactory",
-    "IDBFileHandle",
-    "IDBFileRequest",
-    "IDBIndex",
-    "IDBKeyRange",
-    "IDBMutableFile",
-    "IDBObjectStore",
-    "IDBOpenDBRequest",
-    "IDBRequest",
-    "IDBTransaction",
-    "IDBVersionChangeEvent",
-    "IDLE",
-    "IIRFilterNode",
-    "IMPLEMENTATION_COLOR_READ_FORMAT",
-    "IMPLEMENTATION_COLOR_READ_TYPE",
-    "IMPORT_RULE",
-    "INCR",
-    "INCR_WRAP",
-    "INDEX_SIZE_ERR",
-    "INT",
-    "INTERLEAVED_ATTRIBS",
-    "INT_2_10_10_10_REV",
-    "INT_SAMPLER_2D",
-    "INT_SAMPLER_2D_ARRAY",
-    "INT_SAMPLER_3D",
-    "INT_SAMPLER_CUBE",
-    "INT_VEC2",
-    "INT_VEC3",
-    "INT_VEC4",
-    "INUSE_ATTRIBUTE_ERR",
-    "INVALID_ACCESS_ERR",
-    "INVALID_CHARACTER_ERR",
-    "INVALID_ENUM",
-    "INVALID_EXPRESSION_ERR",
-    "INVALID_FRAMEBUFFER_OPERATION",
-    "INVALID_INDEX",
-    "INVALID_MODIFICATION_ERR",
-    "INVALID_NODE_TYPE_ERR",
-    "INVALID_OPERATION",
-    "INVALID_STATE_ERR",
-    "INVALID_VALUE",
-    "INVERSE_DISTANCE",
-    "INVERT",
-    "IceCandidate",
-    "IdleDeadline",
-    "Image",
-    "ImageBitmap",
-    "ImageBitmapRenderingContext",
-    "ImageCapture",
-    "ImageData",
-    "Infinity",
-    "InputDeviceCapabilities",
-    "InputDeviceInfo",
-    "InputEvent",
-    "InputMethodContext",
-    "InstallTrigger",
-    "InstallTriggerImpl",
-    "Instance",
-    "Int16Array",
-    "Int32Array",
-    "Int8Array",
-    "Intent",
-    "InternalError",
-    "IntersectionObserver",
-    "IntersectionObserverEntry",
-    "Intl",
-    "IsSearchProviderInstalled",
-    "Iterator",
-    "JSON",
-    "KEEP",
-    "KEYDOWN",
-    "KEYFRAMES_RULE",
-    "KEYFRAME_RULE",
-    "KEYPRESS",
-    "KEYUP",
-    "KeyEvent",
-    "Keyboard",
-    "KeyboardEvent",
-    "KeyboardLayoutMap",
-    "KeyframeEffect",
-    "LENGTHADJUST_SPACING",
-    "LENGTHADJUST_SPACINGANDGLYPHS",
-    "LENGTHADJUST_UNKNOWN",
-    "LEQUAL",
-    "LESS",
-    "LINEAR",
-    "LINEAR_DISTANCE",
-    "LINEAR_MIPMAP_LINEAR",
-    "LINEAR_MIPMAP_NEAREST",
-    "LINES",
-    "LINE_LOOP",
-    "LINE_STRIP",
-    "LINE_WIDTH",
-    "LINK_STATUS",
-    "LIVE",
-    "LN10",
-    "LN2",
-    "LOADED",
-    "LOADING",
-    "LOG10E",
-    "LOG2E",
-    "LOWPASS",
-    "LOWSHELF",
-    "LOW_FLOAT",
-    "LOW_INT",
-    "LSException",
-    "LSParserFilter",
-    "LUMINANCE",
-    "LUMINANCE_ALPHA",
-    "LargestContentfulPaint",
-    "LayoutShift",
-    "LayoutShiftAttribution",
-    "LinearAccelerationSensor",
-    "LinkError",
-    "ListFormat",
-    "LocalMediaStream",
-    "Locale",
-    "Location",
-    "Lock",
-    "LockManager",
-    "MAX",
-    "MAX_3D_TEXTURE_SIZE",
-    "MAX_ARRAY_TEXTURE_LAYERS",
-    "MAX_CLIENT_WAIT_TIMEOUT_WEBGL",
-    "MAX_COLOR_ATTACHMENTS",
-    "MAX_COMBINED_FRAGMENT_UNIFORM_COMPONENTS",
-    "MAX_COMBINED_TEXTURE_IMAGE_UNITS",
-    "MAX_COMBINED_UNIFORM_BLOCKS",
-    "MAX_COMBINED_VERTEX_UNIFORM_COMPONENTS",
-    "MAX_CUBE_MAP_TEXTURE_SIZE",
-    "MAX_DRAW_BUFFERS",
-    "MAX_ELEMENTS_INDICES",
-    "MAX_ELEMENTS_VERTICES",
-    "MAX_ELEMENT_INDEX",
-    "MAX_FRAGMENT_INPUT_COMPONENTS",
-    "MAX_FRAGMENT_UNIFORM_BLOCKS",
-    "MAX_FRAGMENT_UNIFORM_COMPONENTS",
-    "MAX_FRAGMENT_UNIFORM_VECTORS",
-    "MAX_PROGRAM_TEXEL_OFFSET",
-    "MAX_RENDERBUFFER_SIZE",
-    "MAX_SAFE_INTEGER",
-    "MAX_SAMPLES",
-    "MAX_SERVER_WAIT_TIMEOUT",
-    "MAX_TEXTURE_IMAGE_UNITS",
-    "MAX_TEXTURE_LOD_BIAS",
-    "MAX_TEXTURE_MAX_ANISOTROPY_EXT",
-    "MAX_TEXTURE_SIZE",
-    "MAX_TRANSFORM_FEEDBACK_INTERLEAVED_COMPONENTS",
-    "MAX_TRANSFORM_FEEDBACK_SEPARATE_ATTRIBS",
-    "MAX_TRANSFORM_FEEDBACK_SEPARATE_COMPONENTS",
-    "MAX_UNIFORM_BLOCK_SIZE",
-    "MAX_UNIFORM_BUFFER_BINDINGS",
-    "MAX_VALUE",
-    "MAX_VARYING_COMPONENTS",
-    "MAX_VARYING_VECTORS",
-    "MAX_VERTEX_ATTRIBS",
-    "MAX_VERTEX_OUTPUT_COMPONENTS",
-    "MAX_VERTEX_TEXTURE_IMAGE_UNITS",
-    "MAX_VERTEX_UNIFORM_BLOCKS",
-    "MAX_VERTEX_UNIFORM_COMPONENTS",
-    "MAX_VERTEX_UNIFORM_VECTORS",
-    "MAX_VIEWPORT_DIMS",
-    "MEDIA_ERR_ABORTED",
-    "MEDIA_ERR_DECODE",
-    "MEDIA_ERR_ENCRYPTED",
-    "MEDIA_ERR_NETWORK",
-    "MEDIA_ERR_SRC_NOT_SUPPORTED",
-    "MEDIA_KEYERR_CLIENT",
-    "MEDIA_KEYERR_DOMAIN",
-    "MEDIA_KEYERR_HARDWARECHANGE",
-    "MEDIA_KEYERR_OUTPUT",
-    "MEDIA_KEYERR_SERVICE",
-    "MEDIA_KEYERR_UNKNOWN",
-    "MEDIA_RULE",
-    "MEDIUM_FLOAT",
-    "MEDIUM_INT",
-    "META_MASK",
-    "MIDIAccess",
-    "MIDIConnectionEvent",
-    "MIDIInput",
-    "MIDIInputMap",
-    "MIDIMessageEvent",
-    "MIDIOutput",
-    "MIDIOutputMap",
-    "MIDIPort",
-    "MIN",
-    "MIN_PROGRAM_TEXEL_OFFSET",
-    "MIN_SAFE_INTEGER",
-    "MIN_VALUE",
-    "MIRRORED_REPEAT",
-    "MODE_ASYNCHRONOUS",
-    "MODE_SYNCHRONOUS",
-    "MODIFICATION",
-    "MOUSEDOWN",
-    "MOUSEDRAG",
-    "MOUSEMOVE",
-    "MOUSEOUT",
-    "MOUSEOVER",
-    "MOUSEUP",
-    "MOZ_KEYFRAMES_RULE",
-    "MOZ_KEYFRAME_RULE",
-    "MOZ_SOURCE_CURSOR",
-    "MOZ_SOURCE_ERASER",
-    "MOZ_SOURCE_KEYBOARD",
-    "MOZ_SOURCE_MOUSE",
-    "MOZ_SOURCE_PEN",
-    "MOZ_SOURCE_TOUCH",
-    "MOZ_SOURCE_UNKNOWN",
-    "MSGESTURE_FLAG_BEGIN",
-    "MSGESTURE_FLAG_CANCEL",
-    "MSGESTURE_FLAG_END",
-    "MSGESTURE_FLAG_INERTIA",
-    "MSGESTURE_FLAG_NONE",
-    "MSPOINTER_TYPE_MOUSE",
-    "MSPOINTER_TYPE_PEN",
-    "MSPOINTER_TYPE_TOUCH",
-    "MS_ASYNC_CALLBACK_STATUS_ASSIGN_DELEGATE",
-    "MS_ASYNC_CALLBACK_STATUS_CANCEL",
-    "MS_ASYNC_CALLBACK_STATUS_CHOOSEANY",
-    "MS_ASYNC_CALLBACK_STATUS_ERROR",
-    "MS_ASYNC_CALLBACK_STATUS_JOIN",
-    "MS_ASYNC_OP_STATUS_CANCELED",
-    "MS_ASYNC_OP_STATUS_ERROR",
-    "MS_ASYNC_OP_STATUS_SUCCESS",
-    "MS_MANIPULATION_STATE_ACTIVE",
-    "MS_MANIPULATION_STATE_CANCELLED",
-    "MS_MANIPULATION_STATE_COMMITTED",
-    "MS_MANIPULATION_STATE_DRAGGING",
-    "MS_MANIPULATION_STATE_INERTIA",
-    "MS_MANIPULATION_STATE_PRESELECT",
-    "MS_MANIPULATION_STATE_SELECTING",
-    "MS_MANIPULATION_STATE_STOPPED",
-    "MS_MEDIA_ERR_ENCRYPTED",
-    "MS_MEDIA_KEYERR_CLIENT",
-    "MS_MEDIA_KEYERR_DOMAIN",
-    "MS_MEDIA_KEYERR_HARDWARECHANGE",
-    "MS_MEDIA_KEYERR_OUTPUT",
-    "MS_MEDIA_KEYERR_SERVICE",
-    "MS_MEDIA_KEYERR_UNKNOWN",
-    "Map",
-    "Math",
-    "MathMLElement",
-    "MediaCapabilities",
-    "MediaCapabilitiesInfo",
-    "MediaController",
-    "MediaDeviceInfo",
-    "MediaDevices",
-    "MediaElementAudioSourceNode",
-    "MediaEncryptedEvent",
-    "MediaError",
-    "MediaKeyError",
-    "MediaKeyEvent",
-    "MediaKeyMessageEvent",
-    "MediaKeyNeededEvent",
-    "MediaKeySession",
-    "MediaKeyStatusMap",
-    "MediaKeySystemAccess",
-    "MediaKeys",
-    "MediaList",
-    "MediaMetadata",
-    "MediaQueryList",
-    "MediaQueryListEvent",
-    "MediaRecorder",
-    "MediaRecorderErrorEvent",
-    "MediaSession",
-    "MediaSettingsRange",
-    "MediaSource",
-    "MediaStream",
-    "MediaStreamAudioDestinationNode",
-    "MediaStreamAudioSourceNode",
-    "MediaStreamEvent",
-    "MediaStreamTrack",
-    "MediaStreamTrackAudioSourceNode",
-    "MediaStreamTrackEvent",
-    "Memory",
-    "MessageChannel",
-    "MessageEvent",
-    "MessagePort",
-    "Methods",
-    "MimeType",
-    "MimeTypeArray",
-    "Module",
-    "MouseEvent",
-    "MouseScrollEvent",
-    "MozAnimation",
-    "MozAnimationDelay",
-    "MozAnimationDirection",
-    "MozAnimationDuration",
-    "MozAnimationFillMode",
-    "MozAnimationIterationCount",
-    "MozAnimationName",
-    "MozAnimationPlayState",
-    "MozAnimationTimingFunction",
-    "MozAppearance",
-    "MozBackfaceVisibility",
-    "MozBinding",
-    "MozBorderBottomColors",
-    "MozBorderEnd",
-    "MozBorderEndColor",
-    "MozBorderEndStyle",
-    "MozBorderEndWidth",
-    "MozBorderImage",
-    "MozBorderLeftColors",
-    "MozBorderRightColors",
-    "MozBorderStart",
-    "MozBorderStartColor",
-    "MozBorderStartStyle",
-    "MozBorderStartWidth",
-    "MozBorderTopColors",
-    "MozBoxAlign",
-    "MozBoxDirection",
-    "MozBoxFlex",
-    "MozBoxOrdinalGroup",
-    "MozBoxOrient",
-    "MozBoxPack",
-    "MozBoxSizing",
-    "MozCSSKeyframeRule",
-    "MozCSSKeyframesRule",
-    "MozColumnCount",
-    "MozColumnFill",
-    "MozColumnGap",
-    "MozColumnRule",
-    "MozColumnRuleColor",
-    "MozColumnRuleStyle",
-    "MozColumnRuleWidth",
-    "MozColumnWidth",
-    "MozColumns",
-    "MozContactChangeEvent",
-    "MozFloatEdge",
-    "MozFontFeatureSettings",
-    "MozFontLanguageOverride",
-    "MozForceBrokenImageIcon",
-    "MozHyphens",
-    "MozImageRegion",
-    "MozMarginEnd",
-    "MozMarginStart",
-    "MozMmsEvent",
-    "MozMmsMessage",
-    "MozMobileMessageThread",
-    "MozOSXFontSmoothing",
-    "MozOrient",
-    "MozOsxFontSmoothing",
-    "MozOutlineRadius",
-    "MozOutlineRadiusBottomleft",
-    "MozOutlineRadiusBottomright",
-    "MozOutlineRadiusTopleft",
-    "MozOutlineRadiusTopright",
-    "MozPaddingEnd",
-    "MozPaddingStart",
-    "MozPerspective",
-    "MozPerspectiveOrigin",
-    "MozPowerManager",
-    "MozSettingsEvent",
-    "MozSmsEvent",
-    "MozSmsMessage",
-    "MozStackSizing",
-    "MozTabSize",
-    "MozTextAlignLast",
-    "MozTextDecorationColor",
-    "MozTextDecorationLine",
-    "MozTextDecorationStyle",
-    "MozTextSizeAdjust",
-    "MozTransform",
-    "MozTransformOrigin",
-    "MozTransformStyle",
-    "MozTransition",
-    "MozTransitionDelay",
-    "MozTransitionDuration",
-    "MozTransitionProperty",
-    "MozTransitionTimingFunction",
-    "MozUserFocus",
-    "MozUserInput",
-    "MozUserModify",
-    "MozUserSelect",
-    "MozWindowDragging",
-    "MozWindowShadow",
-    "MutationEvent",
-    "MutationObserver",
-    "MutationRecord",
-    "NAMESPACE_ERR",
-    "NAMESPACE_RULE",
-    "NEAREST",
-    "NEAREST_MIPMAP_LINEAR",
-    "NEAREST_MIPMAP_NEAREST",
-    "NEGATIVE_INFINITY",
-    "NETWORK_EMPTY",
-    "NETWORK_ERR",
-    "NETWORK_IDLE",
-    "NETWORK_LOADED",
-    "NETWORK_LOADING",
-    "NETWORK_NO_SOURCE",
-    "NEVER",
-    "NEW",
-    "NEXT",
-    "NEXT_NO_DUPLICATE",
-    "NICEST",
-    "NODE_AFTER",
-    "NODE_BEFORE",
-    "NODE_BEFORE_AND_AFTER",
-    "NODE_INSIDE",
-    "NONE",
-    "NON_TRANSIENT_ERR",
-    "NOTATION_NODE",
-    "NOTCH",
-    "NOTEQUAL",
-    "NOT_ALLOWED_ERR",
-    "NOT_FOUND_ERR",
-    "NOT_READABLE_ERR",
-    "NOT_SUPPORTED_ERR",
-    "NO_DATA_ALLOWED_ERR",
-    "NO_ERR",
-    "NO_ERROR",
-    "NO_MODIFICATION_ALLOWED_ERR",
-    "NUMBER_TYPE",
-    "NUM_COMPRESSED_TEXTURE_FORMATS",
-    "NaN",
-    "NamedNodeMap",
-    "NavigationPreloadManager",
-    "Navigator",
-    "NearbyLinks",
-    "NetworkInformation",
-    "Node",
-    "NodeFilter",
-    "NodeIterator",
-    "NodeList",
-    "Notation",
-    "Notification",
-    "NotifyPaintEvent",
-    "Number",
-    "NumberFormat",
-    "OBJECT_TYPE",
-    "OBSOLETE",
-    "OK",
-    "ONE",
-    "ONE_MINUS_CONSTANT_ALPHA",
-    "ONE_MINUS_CONSTANT_COLOR",
-    "ONE_MINUS_DST_ALPHA",
-    "ONE_MINUS_DST_COLOR",
-    "ONE_MINUS_SRC_ALPHA",
-    "ONE_MINUS_SRC_COLOR",
-    "OPEN",
-    "OPENED",
-    "OPENING",
-    "ORDERED_NODE_ITERATOR_TYPE",
-    "ORDERED_NODE_SNAPSHOT_TYPE",
-    "OTHER_ERROR",
-    "OUT_OF_MEMORY",
-    "Object",
-    "OfflineAudioCompletionEvent",
-    "OfflineAudioContext",
-    "OfflineResourceList",
-    "OffscreenCanvas",
-    "OffscreenCanvasRenderingContext2D",
-    "Option",
-    "OrientationSensor",
-    "OscillatorNode",
-    "OverconstrainedError",
-    "OverflowEvent",
-    "PACK_ALIGNMENT",
-    "PACK_ROW_LENGTH",
-    "PACK_SKIP_PIXELS",
-    "PACK_SKIP_ROWS",
-    "PAGE_RULE",
-    "PARSE_ERR",
-    "PATHSEG_ARC_ABS",
-    "PATHSEG_ARC_REL",
-    "PATHSEG_CLOSEPATH",
-    "PATHSEG_CURVETO_CUBIC_ABS",
-    "PATHSEG_CURVETO_CUBIC_REL",
-    "PATHSEG_CURVETO_CUBIC_SMOOTH_ABS",
-    "PATHSEG_CURVETO_CUBIC_SMOOTH_REL",
-    "PATHSEG_CURVETO_QUADRATIC_ABS",
-    "PATHSEG_CURVETO_QUADRATIC_REL",
-    "PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS",
-    "PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL",
-    "PATHSEG_LINETO_ABS",
-    "PATHSEG_LINETO_HORIZONTAL_ABS",
-    "PATHSEG_LINETO_HORIZONTAL_REL",
-    "PATHSEG_LINETO_REL",
-    "PATHSEG_LINETO_VERTICAL_ABS",
-    "PATHSEG_LINETO_VERTICAL_REL",
-    "PATHSEG_MOVETO_ABS",
-    "PATHSEG_MOVETO_REL",
-    "PATHSEG_UNKNOWN",
-    "PATH_EXISTS_ERR",
-    "PEAKING",
-    "PERMISSION_DENIED",
-    "PERSISTENT",
-    "PI",
-    "PIXEL_PACK_BUFFER",
-    "PIXEL_PACK_BUFFER_BINDING",
-    "PIXEL_UNPACK_BUFFER",
-    "PIXEL_UNPACK_BUFFER_BINDING",
-    "PLAYING_STATE",
-    "POINTS",
-    "POLYGON_OFFSET_FACTOR",
-    "POLYGON_OFFSET_FILL",
-    "POLYGON_OFFSET_UNITS",
-    "POSITION_UNAVAILABLE",
-    "POSITIVE_INFINITY",
-    "PREV",
-    "PREV_NO_DUPLICATE",
-    "PROCESSING_INSTRUCTION_NODE",
-    "PageChangeEvent",
-    "PageTransitionEvent",
-    "PaintRequest",
-    "PaintRequestList",
-    "PannerNode",
-    "PasswordCredential",
-    "Path2D",
-    "PaymentAddress",
-    "PaymentInstruments",
-    "PaymentManager",
-    "PaymentMethodChangeEvent",
-    "PaymentRequest",
-    "PaymentRequestUpdateEvent",
-    "PaymentResponse",
-    "Performance",
-    "PerformanceElementTiming",
-    "PerformanceEntry",
-    "PerformanceEventTiming",
-    "PerformanceLongTaskTiming",
-    "PerformanceMark",
-    "PerformanceMeasure",
-    "PerformanceNavigation",
-    "PerformanceNavigationTiming",
-    "PerformanceObserver",
-    "PerformanceObserverEntryList",
-    "PerformancePaintTiming",
-    "PerformanceResourceTiming",
-    "PerformanceServerTiming",
-    "PerformanceTiming",
-    "PeriodicSyncManager",
-    "PeriodicWave",
-    "PermissionStatus",
-    "Permissions",
-    "PhotoCapabilities",
-    "PictureInPictureWindow",
-    "Plugin",
-    "PluginArray",
-    "PluralRules",
-    "PointerEvent",
-    "PopStateEvent",
-    "PopupBlockedEvent",
-    "Presentation",
-    "PresentationAvailability",
-    "PresentationConnection",
-    "PresentationConnectionAvailableEvent",
-    "PresentationConnectionCloseEvent",
-    "PresentationConnectionList",
-    "PresentationReceiver",
-    "PresentationRequest",
-    "ProcessingInstruction",
-    "ProgressEvent",
-    "Promise",
-    "PromiseRejectionEvent",
-    "PropertyNodeList",
-    "Proxy",
-    "PublicKeyCredential",
-    "PushManager",
-    "PushSubscription",
-    "PushSubscriptionOptions",
-    "Q",
-    "QUERY_RESULT",
-    "QUERY_RESULT_AVAILABLE",
-    "QUOTA_ERR",
-    "QUOTA_EXCEEDED_ERR",
-    "QueryInterface",
-    "R11F_G11F_B10F",
-    "R16F",
-    "R16I",
-    "R16UI",
-    "R32F",
-    "R32I",
-    "R32UI",
-    "R8",
-    "R8I",
-    "R8UI",
-    "R8_SNORM",
-    "RASTERIZER_DISCARD",
-    "READ_BUFFER",
-    "READ_FRAMEBUFFER",
-    "READ_FRAMEBUFFER_BINDING",
-    "READ_ONLY",
-    "READ_ONLY_ERR",
-    "READ_WRITE",
-    "RED",
-    "RED_BITS",
-    "RED_INTEGER",
-    "REMOVAL",
-    "RENDERBUFFER",
-    "RENDERBUFFER_ALPHA_SIZE",
-    "RENDERBUFFER_BINDING",
-    "RENDERBUFFER_BLUE_SIZE",
-    "RENDERBUFFER_DEPTH_SIZE",
-    "RENDERBUFFER_GREEN_SIZE",
-    "RENDERBUFFER_HEIGHT",
-    "RENDERBUFFER_INTERNAL_FORMAT",
-    "RENDERBUFFER_RED_SIZE",
-    "RENDERBUFFER_SAMPLES",
-    "RENDERBUFFER_STENCIL_SIZE",
-    "RENDERBUFFER_WIDTH",
-    "RENDERER",
-    "RENDERING_INTENT_ABSOLUTE_COLORIMETRIC",
-    "RENDERING_INTENT_AUTO",
-    "RENDERING_INTENT_PERCEPTUAL",
-    "RENDERING_INTENT_RELATIVE_COLORIMETRIC",
-    "RENDERING_INTENT_SATURATION",
-    "RENDERING_INTENT_UNKNOWN",
-    "REPEAT",
-    "REPLACE",
-    "RG",
-    "RG16F",
-    "RG16I",
-    "RG16UI",
-    "RG32F",
-    "RG32I",
-    "RG32UI",
-    "RG8",
-    "RG8I",
-    "RG8UI",
-    "RG8_SNORM",
-    "RGB",
-    "RGB10_A2",
-    "RGB10_A2UI",
-    "RGB16F",
-    "RGB16I",
-    "RGB16UI",
-    "RGB32F",
-    "RGB32I",
-    "RGB32UI",
-    "RGB565",
-    "RGB5_A1",
-    "RGB8",
-    "RGB8I",
-    "RGB8UI",
-    "RGB8_SNORM",
-    "RGB9_E5",
-    "RGBA",
-    "RGBA16F",
-    "RGBA16I",
-    "RGBA16UI",
-    "RGBA32F",
-    "RGBA32I",
-    "RGBA32UI",
-    "RGBA4",
-    "RGBA8",
-    "RGBA8I",
-    "RGBA8UI",
-    "RGBA8_SNORM",
-    "RGBA_INTEGER",
-    "RGBColor",
-    "RGB_INTEGER",
-    "RG_INTEGER",
-    "ROTATION_CLOCKWISE",
-    "ROTATION_COUNTERCLOCKWISE",
-    "RTCCertificate",
-    "RTCDTMFSender",
-    "RTCDTMFToneChangeEvent",
-    "RTCDataChannel",
-    "RTCDataChannelEvent",
-    "RTCDtlsTransport",
-    "RTCError",
-    "RTCErrorEvent",
-    "RTCIceCandidate",
-    "RTCIceTransport",
-    "RTCPeerConnection",
-    "RTCPeerConnectionIceErrorEvent",
-    "RTCPeerConnectionIceEvent",
-    "RTCRtpReceiver",
-    "RTCRtpSender",
-    "RTCRtpTransceiver",
-    "RTCSctpTransport",
-    "RTCSessionDescription",
-    "RTCStatsReport",
-    "RTCTrackEvent",
-    "RadioNodeList",
-    "Range",
-    "RangeError",
-    "RangeException",
-    "ReadableStream",
-    "ReadableStreamDefaultReader",
-    "RecordErrorEvent",
-    "Rect",
-    "ReferenceError",
-    "Reflect",
-    "RegExp",
-    "RelativeOrientationSensor",
-    "RelativeTimeFormat",
-    "RemotePlayback",
-    "Report",
-    "ReportBody",
-    "ReportingObserver",
-    "Request",
-    "ResizeObserver",
-    "ResizeObserverEntry",
-    "ResizeObserverSize",
-    "Response",
-    "RuntimeError",
-    "SAMPLER_2D",
-    "SAMPLER_2D_ARRAY",
-    "SAMPLER_2D_ARRAY_SHADOW",
-    "SAMPLER_2D_SHADOW",
-    "SAMPLER_3D",
-    "SAMPLER_BINDING",
-    "SAMPLER_CUBE",
-    "SAMPLER_CUBE_SHADOW",
-    "SAMPLES",
-    "SAMPLE_ALPHA_TO_COVERAGE",
-    "SAMPLE_BUFFERS",
-    "SAMPLE_COVERAGE",
-    "SAMPLE_COVERAGE_INVERT",
-    "SAMPLE_COVERAGE_VALUE",
-    "SAWTOOTH",
-    "SCHEDULED_STATE",
-    "SCISSOR_BOX",
-    "SCISSOR_TEST",
-    "SCROLL_PAGE_DOWN",
-    "SCROLL_PAGE_UP",
-    "SDP_ANSWER",
-    "SDP_OFFER",
-    "SDP_PRANSWER",
-    "SECURITY_ERR",
-    "SELECT",
-    "SEPARATE_ATTRIBS",
-    "SERIALIZE_ERR",
-    "SEVERITY_ERROR",
-    "SEVERITY_FATAL_ERROR",
-    "SEVERITY_WARNING",
-    "SHADER_COMPILER",
-    "SHADER_TYPE",
-    "SHADING_LANGUAGE_VERSION",
-    "SHIFT_MASK",
-    "SHORT",
-    "SHOWING",
-    "SHOW_ALL",
-    "SHOW_ATTRIBUTE",
-    "SHOW_CDATA_SECTION",
-    "SHOW_COMMENT",
-    "SHOW_DOCUMENT",
-    "SHOW_DOCUMENT_FRAGMENT",
-    "SHOW_DOCUMENT_TYPE",
-    "SHOW_ELEMENT",
-    "SHOW_ENTITY",
-    "SHOW_ENTITY_REFERENCE",
-    "SHOW_NOTATION",
-    "SHOW_PROCESSING_INSTRUCTION",
-    "SHOW_TEXT",
-    "SIGNALED",
-    "SIGNED_NORMALIZED",
-    "SINE",
-    "SOUNDFIELD",
-    "SQLException",
-    "SQRT1_2",
-    "SQRT2",
-    "SQUARE",
-    "SRC_ALPHA",
-    "SRC_ALPHA_SATURATE",
-    "SRC_COLOR",
-    "SRGB",
-    "SRGB8",
-    "SRGB8_ALPHA8",
-    "START_TO_END",
-    "START_TO_START",
-    "STATIC_COPY",
-    "STATIC_DRAW",
-    "STATIC_READ",
-    "STENCIL",
-    "STENCIL_ATTACHMENT",
-    "STENCIL_BACK_FAIL",
-    "STENCIL_BACK_FUNC",
-    "STENCIL_BACK_PASS_DEPTH_FAIL",
-    "STENCIL_BACK_PASS_DEPTH_PASS",
-    "STENCIL_BACK_REF",
-    "STENCIL_BACK_VALUE_MASK",
-    "STENCIL_BACK_WRITEMASK",
-    "STENCIL_BITS",
-    "STENCIL_BUFFER_BIT",
-    "STENCIL_CLEAR_VALUE",
-    "STENCIL_FAIL",
-    "STENCIL_FUNC",
-    "STENCIL_INDEX",
-    "STENCIL_INDEX8",
-    "STENCIL_PASS_DEPTH_FAIL",
-    "STENCIL_PASS_DEPTH_PASS",
-    "STENCIL_REF",
-    "STENCIL_TEST",
-    "STENCIL_VALUE_MASK",
-    "STENCIL_WRITEMASK",
-    "STREAM_COPY",
-    "STREAM_DRAW",
-    "STREAM_READ",
-    "STRING_TYPE",
-    "STYLE_RULE",
-    "SUBPIXEL_BITS",
-    "SUPPORTS_RULE",
-    "SVGAElement",
-    "SVGAltGlyphDefElement",
-    "SVGAltGlyphElement",
-    "SVGAltGlyphItemElement",
-    "SVGAngle",
-    "SVGAnimateColorElement",
-    "SVGAnimateElement",
-    "SVGAnimateMotionElement",
-    "SVGAnimateTransformElement",
-    "SVGAnimatedAngle",
-    "SVGAnimatedBoolean",
-    "SVGAnimatedEnumeration",
-    "SVGAnimatedInteger",
-    "SVGAnimatedLength",
-    "SVGAnimatedLengthList",
-    "SVGAnimatedNumber",
-    "SVGAnimatedNumberList",
-    "SVGAnimatedPreserveAspectRatio",
-    "SVGAnimatedRect",
-    "SVGAnimatedString",
-    "SVGAnimatedTransformList",
-    "SVGAnimationElement",
-    "SVGCircleElement",
-    "SVGClipPathElement",
-    "SVGColor",
-    "SVGComponentTransferFunctionElement",
-    "SVGCursorElement",
-    "SVGDefsElement",
-    "SVGDescElement",
-    "SVGDiscardElement",
-    "SVGDocument",
-    "SVGElement",
-    "SVGElementInstance",
-    "SVGElementInstanceList",
-    "SVGEllipseElement",
-    "SVGException",
-    "SVGFEBlendElement",
-    "SVGFEColorMatrixElement",
-    "SVGFEComponentTransferElement",
-    "SVGFECompositeElement",
-    "SVGFEConvolveMatrixElement",
-    "SVGFEDiffuseLightingElement",
-    "SVGFEDisplacementMapElement",
-    "SVGFEDistantLightElement",
-    "SVGFEDropShadowElement",
-    "SVGFEFloodElement",
-    "SVGFEFuncAElement",
-    "SVGFEFuncBElement",
-    "SVGFEFuncGElement",
-    "SVGFEFuncRElement",
-    "SVGFEGaussianBlurElement",
-    "SVGFEImageElement",
-    "SVGFEMergeElement",
-    "SVGFEMergeNodeElement",
-    "SVGFEMorphologyElement",
-    "SVGFEOffsetElement",
-    "SVGFEPointLightElement",
-    "SVGFESpecularLightingElement",
-    "SVGFESpotLightElement",
-    "SVGFETileElement",
-    "SVGFETurbulenceElement",
-    "SVGFilterElement",
-    "SVGFontElement",
-    "SVGFontFaceElement",
-    "SVGFontFaceFormatElement",
-    "SVGFontFaceNameElement",
-    "SVGFontFaceSrcElement",
-    "SVGFontFaceUriElement",
-    "SVGForeignObjectElement",
-    "SVGGElement",
-    "SVGGeometryElement",
-    "SVGGlyphElement",
-    "SVGGlyphRefElement",
-    "SVGGradientElement",
-    "SVGGraphicsElement",
-    "SVGHKernElement",
-    "SVGImageElement",
-    "SVGLength",
-    "SVGLengthList",
-    "SVGLineElement",
-    "SVGLinearGradientElement",
-    "SVGMPathElement",
-    "SVGMarkerElement",
-    "SVGMaskElement",
-    "SVGMatrix",
-    "SVGMetadataElement",
-    "SVGMissingGlyphElement",
-    "SVGNumber",
-    "SVGNumberList",
-    "SVGPaint",
-    "SVGPathElement",
-    "SVGPathSeg",
-    "SVGPathSegArcAbs",
-    "SVGPathSegArcRel",
-    "SVGPathSegClosePath",
-    "SVGPathSegCurvetoCubicAbs",
-    "SVGPathSegCurvetoCubicRel",
-    "SVGPathSegCurvetoCubicSmoothAbs",
-    "SVGPathSegCurvetoCubicSmoothRel",
-    "SVGPathSegCurvetoQuadraticAbs",
-    "SVGPathSegCurvetoQuadraticRel",
-    "SVGPathSegCurvetoQuadraticSmoothAbs",
-    "SVGPathSegCurvetoQuadraticSmoothRel",
-    "SVGPathSegLinetoAbs",
-    "SVGPathSegLinetoHorizontalAbs",
-    "SVGPathSegLinetoHorizontalRel",
-    "SVGPathSegLinetoRel",
-    "SVGPathSegLinetoVerticalAbs",
-    "SVGPathSegLinetoVerticalRel",
-    "SVGPathSegList",
-    "SVGPathSegMovetoAbs",
-    "SVGPathSegMovetoRel",
-    "SVGPatternElement",
-    "SVGPoint",
-    "SVGPointList",
-    "SVGPolygonElement",
-    "SVGPolylineElement",
-    "SVGPreserveAspectRatio",
-    "SVGRadialGradientElement",
-    "SVGRect",
-    "SVGRectElement",
-    "SVGRenderingIntent",
-    "SVGSVGElement",
-    "SVGScriptElement",
-    "SVGSetElement",
-    "SVGStopElement",
-    "SVGStringList",
-    "SVGStyleElement",
-    "SVGSwitchElement",
-    "SVGSymbolElement",
-    "SVGTRefElement",
-    "SVGTSpanElement",
-    "SVGTextContentElement",
-    "SVGTextElement",
-    "SVGTextPathElement",
-    "SVGTextPositioningElement",
-    "SVGTitleElement",
-    "SVGTransform",
-    "SVGTransformList",
-    "SVGUnitTypes",
-    "SVGUseElement",
-    "SVGVKernElement",
-    "SVGViewElement",
-    "SVGViewSpec",
-    "SVGZoomAndPan",
-    "SVGZoomEvent",
-    "SVG_ANGLETYPE_DEG",
-    "SVG_ANGLETYPE_GRAD",
-    "SVG_ANGLETYPE_RAD",
-    "SVG_ANGLETYPE_UNKNOWN",
-    "SVG_ANGLETYPE_UNSPECIFIED",
-    "SVG_CHANNEL_A",
-    "SVG_CHANNEL_B",
-    "SVG_CHANNEL_G",
-    "SVG_CHANNEL_R",
-    "SVG_CHANNEL_UNKNOWN",
-    "SVG_COLORTYPE_CURRENTCOLOR",
-    "SVG_COLORTYPE_RGBCOLOR",
-    "SVG_COLORTYPE_RGBCOLOR_ICCCOLOR",
-    "SVG_COLORTYPE_UNKNOWN",
-    "SVG_EDGEMODE_DUPLICATE",
-    "SVG_EDGEMODE_NONE",
-    "SVG_EDGEMODE_UNKNOWN",
-    "SVG_EDGEMODE_WRAP",
-    "SVG_FEBLEND_MODE_COLOR",
-    "SVG_FEBLEND_MODE_COLOR_BURN",
-    "SVG_FEBLEND_MODE_COLOR_DODGE",
-    "SVG_FEBLEND_MODE_DARKEN",
-    "SVG_FEBLEND_MODE_DIFFERENCE",
-    "SVG_FEBLEND_MODE_EXCLUSION",
-    "SVG_FEBLEND_MODE_HARD_LIGHT",
-    "SVG_FEBLEND_MODE_HUE",
-    "SVG_FEBLEND_MODE_LIGHTEN",
-    "SVG_FEBLEND_MODE_LUMINOSITY",
-    "SVG_FEBLEND_MODE_MULTIPLY",
-    "SVG_FEBLEND_MODE_NORMAL",
-    "SVG_FEBLEND_MODE_OVERLAY",
-    "SVG_FEBLEND_MODE_SATURATION",
-    "SVG_FEBLEND_MODE_SCREEN",
-    "SVG_FEBLEND_MODE_SOFT_LIGHT",
-    "SVG_FEBLEND_MODE_UNKNOWN",
-    "SVG_FECOLORMATRIX_TYPE_HUEROTATE",
-    "SVG_FECOLORMATRIX_TYPE_LUMINANCETOALPHA",
-    "SVG_FECOLORMATRIX_TYPE_MATRIX",
-    "SVG_FECOLORMATRIX_TYPE_SATURATE",
-    "SVG_FECOLORMATRIX_TYPE_UNKNOWN",
-    "SVG_FECOMPONENTTRANSFER_TYPE_DISCRETE",
-    "SVG_FECOMPONENTTRANSFER_TYPE_GAMMA",
-    "SVG_FECOMPONENTTRANSFER_TYPE_IDENTITY",
-    "SVG_FECOMPONENTTRANSFER_TYPE_LINEAR",
-    "SVG_FECOMPONENTTRANSFER_TYPE_TABLE",
-    "SVG_FECOMPONENTTRANSFER_TYPE_UNKNOWN",
-    "SVG_FECOMPOSITE_OPERATOR_ARITHMETIC",
-    "SVG_FECOMPOSITE_OPERATOR_ATOP",
-    "SVG_FECOMPOSITE_OPERATOR_IN",
-    "SVG_FECOMPOSITE_OPERATOR_OUT",
-    "SVG_FECOMPOSITE_OPERATOR_OVER",
-    "SVG_FECOMPOSITE_OPERATOR_UNKNOWN",
-    "SVG_FECOMPOSITE_OPERATOR_XOR",
-    "SVG_INVALID_VALUE_ERR",
-    "SVG_LENGTHTYPE_CM",
-    "SVG_LENGTHTYPE_EMS",
-    "SVG_LENGTHTYPE_EXS",
-    "SVG_LENGTHTYPE_IN",
-    "SVG_LENGTHTYPE_MM",
-    "SVG_LENGTHTYPE_NUMBER",
-    "SVG_LENGTHTYPE_PC",
-    "SVG_LENGTHTYPE_PERCENTAGE",
-    "SVG_LENGTHTYPE_PT",
-    "SVG_LENGTHTYPE_PX",
-    "SVG_LENGTHTYPE_UNKNOWN",
-    "SVG_MARKERUNITS_STROKEWIDTH",
-    "SVG_MARKERUNITS_UNKNOWN",
-    "SVG_MARKERUNITS_USERSPACEONUSE",
-    "SVG_MARKER_ORIENT_ANGLE",
-    "SVG_MARKER_ORIENT_AUTO",
-    "SVG_MARKER_ORIENT_UNKNOWN",
-    "SVG_MASKTYPE_ALPHA",
-    "SVG_MASKTYPE_LUMINANCE",
-    "SVG_MATRIX_NOT_INVERTABLE",
-    "SVG_MEETORSLICE_MEET",
-    "SVG_MEETORSLICE_SLICE",
-    "SVG_MEETORSLICE_UNKNOWN",
-    "SVG_MORPHOLOGY_OPERATOR_DILATE",
-    "SVG_MORPHOLOGY_OPERATOR_ERODE",
-    "SVG_MORPHOLOGY_OPERATOR_UNKNOWN",
-    "SVG_PAINTTYPE_CURRENTCOLOR",
-    "SVG_PAINTTYPE_NONE",
-    "SVG_PAINTTYPE_RGBCOLOR",
-    "SVG_PAINTTYPE_RGBCOLOR_ICCCOLOR",
-    "SVG_PAINTTYPE_UNKNOWN",
-    "SVG_PAINTTYPE_URI",
-    "SVG_PAINTTYPE_URI_CURRENTCOLOR",
-    "SVG_PAINTTYPE_URI_NONE",
-    "SVG_PAINTTYPE_URI_RGBCOLOR",
-    "SVG_PAINTTYPE_URI_RGBCOLOR_ICCCOLOR",
-    "SVG_PRESERVEASPECTRATIO_NONE",
-    "SVG_PRESERVEASPECTRATIO_UNKNOWN",
-    "SVG_PRESERVEASPECTRATIO_XMAXYMAX",
-    "SVG_PRESERVEASPECTRATIO_XMAXYMID",
-    "SVG_PRESERVEASPECTRATIO_XMAXYMIN",
-    "SVG_PRESERVEASPECTRATIO_XMIDYMAX",
-    "SVG_PRESERVEASPECTRATIO_XMIDYMID",
-    "SVG_PRESERVEASPECTRATIO_XMIDYMIN",
-    "SVG_PRESERVEASPECTRATIO_XMINYMAX",
-    "SVG_PRESERVEASPECTRATIO_XMINYMID",
-    "SVG_PRESERVEASPECTRATIO_XMINYMIN",
-    "SVG_SPREADMETHOD_PAD",
-    "SVG_SPREADMETHOD_REFLECT",
-    "SVG_SPREADMETHOD_REPEAT",
-    "SVG_SPREADMETHOD_UNKNOWN",
-    "SVG_STITCHTYPE_NOSTITCH",
-    "SVG_STITCHTYPE_STITCH",
-    "SVG_STITCHTYPE_UNKNOWN",
-    "SVG_TRANSFORM_MATRIX",
-    "SVG_TRANSFORM_ROTATE",
-    "SVG_TRANSFORM_SCALE",
-    "SVG_TRANSFORM_SKEWX",
-    "SVG_TRANSFORM_SKEWY",
-    "SVG_TRANSFORM_TRANSLATE",
-    "SVG_TRANSFORM_UNKNOWN",
-    "SVG_TURBULENCE_TYPE_FRACTALNOISE",
-    "SVG_TURBULENCE_TYPE_TURBULENCE",
-    "SVG_TURBULENCE_TYPE_UNKNOWN",
-    "SVG_UNIT_TYPE_OBJECTBOUNDINGBOX",
-    "SVG_UNIT_TYPE_UNKNOWN",
-    "SVG_UNIT_TYPE_USERSPACEONUSE",
-    "SVG_WRONG_TYPE_ERR",
-    "SVG_ZOOMANDPAN_DISABLE",
-    "SVG_ZOOMANDPAN_MAGNIFY",
-    "SVG_ZOOMANDPAN_UNKNOWN",
-    "SYNC_CONDITION",
-    "SYNC_FENCE",
-    "SYNC_FLAGS",
-    "SYNC_FLUSH_COMMANDS_BIT",
-    "SYNC_GPU_COMMANDS_COMPLETE",
-    "SYNC_STATUS",
-    "SYNTAX_ERR",
-    "SavedPages",
-    "Screen",
-    "ScreenOrientation",
-    "Script",
-    "ScriptProcessorNode",
-    "ScrollAreaEvent",
-    "SecurityPolicyViolationEvent",
-    "Selection",
-    "Sensor",
-    "SensorErrorEvent",
-    "ServiceWorker",
-    "ServiceWorkerContainer",
-    "ServiceWorkerRegistration",
-    "SessionDescription",
-    "Set",
-    "ShadowRoot",
-    "SharedArrayBuffer",
-    "SharedWorker",
-    "SimpleGestureEvent",
-    "SourceBuffer",
-    "SourceBufferList",
-    "SpeechSynthesis",
-    "SpeechSynthesisErrorEvent",
-    "SpeechSynthesisEvent",
-    "SpeechSynthesisUtterance",
-    "SpeechSynthesisVoice",
-    "StaticRange",
-    "StereoPannerNode",
-    "StopIteration",
-    "Storage",
-    "StorageEvent",
-    "StorageManager",
-    "String",
-    "StructType",
-    "StylePropertyMap",
-    "StylePropertyMapReadOnly",
-    "StyleSheet",
-    "StyleSheetList",
-    "SubmitEvent",
-    "SubtleCrypto",
-    "Symbol",
-    "SyncManager",
-    "SyntaxError",
-    "TEMPORARY",
-    "TEXTPATH_METHODTYPE_ALIGN",
-    "TEXTPATH_METHODTYPE_STRETCH",
-    "TEXTPATH_METHODTYPE_UNKNOWN",
-    "TEXTPATH_SPACINGTYPE_AUTO",
-    "TEXTPATH_SPACINGTYPE_EXACT",
-    "TEXTPATH_SPACINGTYPE_UNKNOWN",
-    "TEXTURE",
-    "TEXTURE0",
-    "TEXTURE1",
-    "TEXTURE10",
-    "TEXTURE11",
-    "TEXTURE12",
-    "TEXTURE13",
-    "TEXTURE14",
-    "TEXTURE15",
-    "TEXTURE16",
-    "TEXTURE17",
-    "TEXTURE18",
-    "TEXTURE19",
-    "TEXTURE2",
-    "TEXTURE20",
-    "TEXTURE21",
-    "TEXTURE22",
-    "TEXTURE23",
-    "TEXTURE24",
-    "TEXTURE25",
-    "TEXTURE26",
-    "TEXTURE27",
-    "TEXTURE28",
-    "TEXTURE29",
-    "TEXTURE3",
-    "TEXTURE30",
-    "TEXTURE31",
-    "TEXTURE4",
-    "TEXTURE5",
-    "TEXTURE6",
-    "TEXTURE7",
-    "TEXTURE8",
-    "TEXTURE9",
-    "TEXTURE_2D",
-    "TEXTURE_2D_ARRAY",
-    "TEXTURE_3D",
-    "TEXTURE_BASE_LEVEL",
-    "TEXTURE_BINDING_2D",
-    "TEXTURE_BINDING_2D_ARRAY",
-    "TEXTURE_BINDING_3D",
-    "TEXTURE_BINDING_CUBE_MAP",
-    "TEXTURE_COMPARE_FUNC",
-    "TEXTURE_COMPARE_MODE",
-    "TEXTURE_CUBE_MAP",
-    "TEXTURE_CUBE_MAP_NEGATIVE_X",
-    "TEXTURE_CUBE_MAP_NEGATIVE_Y",
-    "TEXTURE_CUBE_MAP_NEGATIVE_Z",
-    "TEXTURE_CUBE_MAP_POSITIVE_X",
-    "TEXTURE_CUBE_MAP_POSITIVE_Y",
-    "TEXTURE_CUBE_MAP_POSITIVE_Z",
-    "TEXTURE_IMMUTABLE_FORMAT",
-    "TEXTURE_IMMUTABLE_LEVELS",
-    "TEXTURE_MAG_FILTER",
-    "TEXTURE_MAX_ANISOTROPY_EXT",
-    "TEXTURE_MAX_LEVEL",
-    "TEXTURE_MAX_LOD",
-    "TEXTURE_MIN_FILTER",
-    "TEXTURE_MIN_LOD",
-    "TEXTURE_WRAP_R",
-    "TEXTURE_WRAP_S",
-    "TEXTURE_WRAP_T",
-    "TEXT_NODE",
-    "TIMEOUT",
-    "TIMEOUT_ERR",
-    "TIMEOUT_EXPIRED",
-    "TIMEOUT_IGNORED",
-    "TOO_LARGE_ERR",
-    "TRANSACTION_INACTIVE_ERR",
-    "TRANSFORM_FEEDBACK",
-    "TRANSFORM_FEEDBACK_ACTIVE",
-    "TRANSFORM_FEEDBACK_BINDING",
-    "TRANSFORM_FEEDBACK_BUFFER",
-    "TRANSFORM_FEEDBACK_BUFFER_BINDING",
-    "TRANSFORM_FEEDBACK_BUFFER_MODE",
-    "TRANSFORM_FEEDBACK_BUFFER_SIZE",
-    "TRANSFORM_FEEDBACK_BUFFER_START",
-    "TRANSFORM_FEEDBACK_PAUSED",
-    "TRANSFORM_FEEDBACK_PRIMITIVES_WRITTEN",
-    "TRANSFORM_FEEDBACK_VARYINGS",
-    "TRIANGLE",
-    "TRIANGLES",
-    "TRIANGLE_FAN",
-    "TRIANGLE_STRIP",
-    "TYPE_BACK_FORWARD",
-    "TYPE_ERR",
-    "TYPE_MISMATCH_ERR",
-    "TYPE_NAVIGATE",
-    "TYPE_RELOAD",
-    "TYPE_RESERVED",
-    "Table",
-    "TaskAttributionTiming",
-    "Text",
-    "TextDecoder",
-    "TextDecoderStream",
-    "TextEncoder",
-    "TextEncoderStream",
-    "TextEvent",
-    "TextMetrics",
-    "TextTrack",
-    "TextTrackCue",
-    "TextTrackCueList",
-    "TextTrackList",
-    "TimeEvent",
-    "TimeRanges",
-    "Touch",
-    "TouchEvent",
-    "TouchList",
-    "TrackEvent",
-    "TransformStream",
-    "TransitionEvent",
-    "TreeWalker",
-    "TrustedHTML",
-    "TrustedScript",
-    "TrustedScriptURL",
-    "TrustedTypePolicy",
-    "TrustedTypePolicyFactory",
-    "TypeError",
-    "TypedObject",
-    "U2F",
-    "UIEvent",
-    "UNCACHED",
-    "UNIFORM_ARRAY_STRIDE",
-    "UNIFORM_BLOCK_ACTIVE_UNIFORMS",
-    "UNIFORM_BLOCK_ACTIVE_UNIFORM_INDICES",
-    "UNIFORM_BLOCK_BINDING",
-    "UNIFORM_BLOCK_DATA_SIZE",
-    "UNIFORM_BLOCK_INDEX",
-    "UNIFORM_BLOCK_REFERENCED_BY_FRAGMENT_SHADER",
-    "UNIFORM_BLOCK_REFERENCED_BY_VERTEX_SHADER",
-    "UNIFORM_BUFFER",
-    "UNIFORM_BUFFER_BINDING",
-    "UNIFORM_BUFFER_OFFSET_ALIGNMENT",
-    "UNIFORM_BUFFER_SIZE",
-    "UNIFORM_BUFFER_START",
-    "UNIFORM_IS_ROW_MAJOR",
-    "UNIFORM_MATRIX_STRIDE",
-    "UNIFORM_OFFSET",
-    "UNIFORM_SIZE",
-    "UNIFORM_TYPE",
-    "UNKNOWN_ERR",
-    "UNKNOWN_RULE",
-    "UNMASKED_RENDERER_WEBGL",
-    "UNMASKED_VENDOR_WEBGL",
-    "UNORDERED_NODE_ITERATOR_TYPE",
-    "UNORDERED_NODE_SNAPSHOT_TYPE",
-    "UNPACK_ALIGNMENT",
-    "UNPACK_COLORSPACE_CONVERSION_WEBGL",
-    "UNPACK_FLIP_Y_WEBGL",
-    "UNPACK_IMAGE_HEIGHT",
-    "UNPACK_PREMULTIPLY_ALPHA_WEBGL",
-    "UNPACK_ROW_LENGTH",
-    "UNPACK_SKIP_IMAGES",
-    "UNPACK_SKIP_PIXELS",
-    "UNPACK_SKIP_ROWS",
-    "UNSCHEDULED_STATE",
-    "UNSENT",
-    "UNSIGNALED",
-    "UNSIGNED_BYTE",
-    "UNSIGNED_INT",
-    "UNSIGNED_INT_10F_11F_11F_REV",
-    "UNSIGNED_INT_24_8",
-    "UNSIGNED_INT_2_10_10_10_REV",
-    "UNSIGNED_INT_5_9_9_9_REV",
-    "UNSIGNED_INT_SAMPLER_2D",
-    "UNSIGNED_INT_SAMPLER_2D_ARRAY",
-    "UNSIGNED_INT_SAMPLER_3D",
-    "UNSIGNED_INT_SAMPLER_CUBE",
-    "UNSIGNED_INT_VEC2",
-    "UNSIGNED_INT_VEC3",
-    "UNSIGNED_INT_VEC4",
-    "UNSIGNED_NORMALIZED",
-    "UNSIGNED_SHORT",
-    "UNSIGNED_SHORT_4_4_4_4",
-    "UNSIGNED_SHORT_5_5_5_1",
-    "UNSIGNED_SHORT_5_6_5",
-    "UNSPECIFIED_EVENT_TYPE_ERR",
-    "UPDATEREADY",
-    "URIError",
-    "URL",
-    "URLSearchParams",
-    "URLUnencoded",
-    "URL_MISMATCH_ERR",
-    "USB",
-    "USBAlternateInterface",
-    "USBConfiguration",
-    "USBConnectionEvent",
-    "USBDevice",
-    "USBEndpoint",
-    "USBInTransferResult",
-    "USBInterface",
-    "USBIsochronousInTransferPacket",
-    "USBIsochronousInTransferResult",
-    "USBIsochronousOutTransferPacket",
-    "USBIsochronousOutTransferResult",
-    "USBOutTransferResult",
-    "UTC",
-    "Uint16Array",
-    "Uint32Array",
-    "Uint8Array",
-    "Uint8ClampedArray",
-    "UserActivation",
-    "UserMessageHandler",
-    "UserMessageHandlersNamespace",
-    "UserProximityEvent",
-    "VALIDATE_STATUS",
-    "VALIDATION_ERR",
-    "VARIABLES_RULE",
-    "VENDOR",
-    "VERSION",
-    "VERSION_CHANGE",
-    "VERSION_ERR",
-    "VERTEX_ARRAY_BINDING",
-    "VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",
-    "VERTEX_ATTRIB_ARRAY_DIVISOR",
-    "VERTEX_ATTRIB_ARRAY_DIVISOR_ANGLE",
-    "VERTEX_ATTRIB_ARRAY_ENABLED",
-    "VERTEX_ATTRIB_ARRAY_INTEGER",
-    "VERTEX_ATTRIB_ARRAY_NORMALIZED",
-    "VERTEX_ATTRIB_ARRAY_POINTER",
-    "VERTEX_ATTRIB_ARRAY_SIZE",
-    "VERTEX_ATTRIB_ARRAY_STRIDE",
-    "VERTEX_ATTRIB_ARRAY_TYPE",
-    "VERTEX_SHADER",
-    "VERTICAL",
-    "VERTICAL_AXIS",
-    "VER_ERR",
-    "VIEWPORT",
-    "VIEWPORT_RULE",
-    "VRDisplay",
-    "VRDisplayCapabilities",
-    "VRDisplayEvent",
-    "VREyeParameters",
-    "VRFieldOfView",
-    "VRFrameData",
-    "VRPose",
-    "VRStageParameters",
-    "VTTCue",
-    "VTTRegion",
-    "ValidityState",
-    "VideoPlaybackQuality",
-    "VideoStreamTrack",
-    "VisualViewport",
-    "WAIT_FAILED",
-    "WEBKIT_FILTER_RULE",
-    "WEBKIT_KEYFRAMES_RULE",
-    "WEBKIT_KEYFRAME_RULE",
-    "WEBKIT_REGION_RULE",
-    "WRONG_DOCUMENT_ERR",
-    "WakeLock",
-    "WakeLockSentinel",
-    "WasmAnyRef",
-    "WaveShaperNode",
-    "WeakMap",
-    "WeakRef",
-    "WeakSet",
-    "WebAssembly",
-    "WebGL2RenderingContext",
-    "WebGLActiveInfo",
-    "WebGLBuffer",
-    "WebGLContextEvent",
-    "WebGLFramebuffer",
-    "WebGLProgram",
-    "WebGLQuery",
-    "WebGLRenderbuffer",
-    "WebGLRenderingContext",
-    "WebGLSampler",
-    "WebGLShader",
-    "WebGLShaderPrecisionFormat",
-    "WebGLSync",
-    "WebGLTexture",
-    "WebGLTransformFeedback",
-    "WebGLUniformLocation",
-    "WebGLVertexArray",
-    "WebGLVertexArrayObject",
-    "WebKitAnimationEvent",
-    "WebKitBlobBuilder",
-    "WebKitCSSFilterRule",
-    "WebKitCSSFilterValue",
-    "WebKitCSSKeyframeRule",
-    "WebKitCSSKeyframesRule",
-    "WebKitCSSMatrix",
-    "WebKitCSSRegionRule",
-    "WebKitCSSTransformValue",
-    "WebKitDataCue",
-    "WebKitGamepad",
-    "WebKitMediaKeyError",
-    "WebKitMediaKeyMessageEvent",
-    "WebKitMediaKeySession",
-    "WebKitMediaKeys",
-    "WebKitMediaSource",
-    "WebKitMutationObserver",
-    "WebKitNamespace",
-    "WebKitPlaybackTargetAvailabilityEvent",
-    "WebKitPoint",
-    "WebKitShadowRoot",
-    "WebKitSourceBuffer",
-    "WebKitSourceBufferList",
-    "WebKitTransitionEvent",
-    "WebSocket",
-    "WebkitAlignContent",
-    "WebkitAlignItems",
-    "WebkitAlignSelf",
-    "WebkitAnimation",
-    "WebkitAnimationDelay",
-    "WebkitAnimationDirection",
-    "WebkitAnimationDuration",
-    "WebkitAnimationFillMode",
-    "WebkitAnimationIterationCount",
-    "WebkitAnimationName",
-    "WebkitAnimationPlayState",
-    "WebkitAnimationTimingFunction",
-    "WebkitAppearance",
-    "WebkitBackfaceVisibility",
-    "WebkitBackgroundClip",
-    "WebkitBackgroundOrigin",
-    "WebkitBackgroundSize",
-    "WebkitBorderBottomLeftRadius",
-    "WebkitBorderBottomRightRadius",
-    "WebkitBorderImage",
-    "WebkitBorderRadius",
-    "WebkitBorderTopLeftRadius",
-    "WebkitBorderTopRightRadius",
-    "WebkitBoxAlign",
-    "WebkitBoxDirection",
-    "WebkitBoxFlex",
-    "WebkitBoxOrdinalGroup",
-    "WebkitBoxOrient",
-    "WebkitBoxPack",
-    "WebkitBoxShadow",
-    "WebkitBoxSizing",
-    "WebkitFilter",
-    "WebkitFlex",
-    "WebkitFlexBasis",
-    "WebkitFlexDirection",
-    "WebkitFlexFlow",
-    "WebkitFlexGrow",
-    "WebkitFlexShrink",
-    "WebkitFlexWrap",
-    "WebkitJustifyContent",
-    "WebkitLineClamp",
-    "WebkitMask",
-    "WebkitMaskClip",
-    "WebkitMaskComposite",
-    "WebkitMaskImage",
-    "WebkitMaskOrigin",
-    "WebkitMaskPosition",
-    "WebkitMaskPositionX",
-    "WebkitMaskPositionY",
-    "WebkitMaskRepeat",
-    "WebkitMaskSize",
-    "WebkitOrder",
-    "WebkitPerspective",
-    "WebkitPerspectiveOrigin",
-    "WebkitTextFillColor",
-    "WebkitTextSizeAdjust",
-    "WebkitTextStroke",
-    "WebkitTextStrokeColor",
-    "WebkitTextStrokeWidth",
-    "WebkitTransform",
-    "WebkitTransformOrigin",
-    "WebkitTransformStyle",
-    "WebkitTransition",
-    "WebkitTransitionDelay",
-    "WebkitTransitionDuration",
-    "WebkitTransitionProperty",
-    "WebkitTransitionTimingFunction",
-    "WebkitUserSelect",
-    "WheelEvent",
-    "Window",
-    "Worker",
-    "Worklet",
-    "WritableStream",
-    "WritableStreamDefaultWriter",
-    "XMLDocument",
-    "XMLHttpRequest",
-    "XMLHttpRequestEventTarget",
-    "XMLHttpRequestException",
-    "XMLHttpRequestProgressEvent",
-    "XMLHttpRequestUpload",
-    "XMLSerializer",
-    "XMLStylesheetProcessingInstruction",
-    "XPathEvaluator",
-    "XPathException",
-    "XPathExpression",
-    "XPathNSResolver",
-    "XPathResult",
-    "XRBoundedReferenceSpace",
-    "XRDOMOverlayState",
-    "XRFrame",
-    "XRHitTestResult",
-    "XRHitTestSource",
-    "XRInputSource",
-    "XRInputSourceArray",
-    "XRInputSourceEvent",
-    "XRInputSourcesChangeEvent",
-    "XRLayer",
-    "XRPose",
-    "XRRay",
-    "XRReferenceSpace",
-    "XRReferenceSpaceEvent",
-    "XRRenderState",
-    "XRRigidTransform",
-    "XRSession",
-    "XRSessionEvent",
-    "XRSpace",
-    "XRSystem",
-    "XRTransientInputHitTestResult",
-    "XRTransientInputHitTestSource",
-    "XRView",
-    "XRViewerPose",
-    "XRViewport",
-    "XRWebGLLayer",
-    "XSLTProcessor",
-    "ZERO",
-    "_XD0M_",
-    "_YD0M_",
-    "__defineGetter__",
-    "__defineSetter__",
-    "__lookupGetter__",
-    "__lookupSetter__",
-    "__opera",
-    "__proto__",
-    "_browserjsran",
-    "a",
-    "aLink",
-    "abbr",
-    "abort",
-    "aborted",
-    "abs",
-    "absolute",
-    "acceleration",
-    "accelerationIncludingGravity",
-    "accelerator",
-    "accept",
-    "acceptCharset",
-    "acceptNode",
-    "accessKey",
-    "accessKeyLabel",
-    "accuracy",
-    "acos",
-    "acosh",
-    "action",
-    "actionURL",
-    "actions",
-    "activated",
-    "active",
-    "activeCues",
-    "activeElement",
-    "activeSourceBuffers",
-    "activeSourceCount",
-    "activeTexture",
-    "activeVRDisplays",
-    "actualBoundingBoxAscent",
-    "actualBoundingBoxDescent",
-    "actualBoundingBoxLeft",
-    "actualBoundingBoxRight",
-    "add",
-    "addAll",
-    "addBehavior",
-    "addCandidate",
-    "addColorStop",
-    "addCue",
-    "addElement",
-    "addEventListener",
-    "addFilter",
-    "addFromString",
-    "addFromUri",
-    "addIceCandidate",
-    "addImport",
-    "addListener",
-    "addModule",
-    "addNamed",
-    "addPageRule",
-    "addPath",
-    "addPointer",
-    "addRange",
-    "addRegion",
-    "addRule",
-    "addSearchEngine",
-    "addSourceBuffer",
-    "addStream",
-    "addTextTrack",
-    "addTrack",
-    "addTransceiver",
-    "addWakeLockListener",
-    "added",
-    "addedNodes",
-    "additionalName",
-    "additiveSymbols",
-    "addons",
-    "address",
-    "addressLine",
-    "adoptNode",
-    "adoptedStyleSheets",
-    "adr",
-    "advance",
-    "after",
-    "album",
-    "alert",
-    "algorithm",
-    "align",
-    "align-content",
-    "align-items",
-    "align-self",
-    "alignContent",
-    "alignItems",
-    "alignSelf",
-    "alignmentBaseline",
-    "alinkColor",
-    "all",
-    "allSettled",
-    "allow",
-    "allowFullscreen",
-    "allowPaymentRequest",
-    "allowedDirections",
-    "allowedFeatures",
-    "allowedToPlay",
-    "allowsFeature",
-    "alpha",
-    "alt",
-    "altGraphKey",
-    "altHtml",
-    "altKey",
-    "altLeft",
-    "alternate",
-    "alternateSetting",
-    "alternates",
-    "altitude",
-    "altitudeAccuracy",
-    "amplitude",
-    "ancestorOrigins",
-    "anchor",
-    "anchorNode",
-    "anchorOffset",
-    "anchors",
-    "and",
-    "angle",
-    "angularAcceleration",
-    "angularVelocity",
-    "animVal",
-    "animate",
-    "animatedInstanceRoot",
-    "animatedNormalizedPathSegList",
-    "animatedPathSegList",
-    "animatedPoints",
-    "animation",
-    "animation-delay",
-    "animation-direction",
-    "animation-duration",
-    "animation-fill-mode",
-    "animation-iteration-count",
-    "animation-name",
-    "animation-play-state",
-    "animation-timing-function",
-    "animationDelay",
-    "animationDirection",
-    "animationDuration",
-    "animationFillMode",
-    "animationIterationCount",
-    "animationName",
-    "animationPlayState",
-    "animationStartTime",
-    "animationTimingFunction",
-    "animationsPaused",
-    "anniversary",
-    "antialias",
-    "anticipatedRemoval",
-    "any",
-    "app",
-    "appCodeName",
-    "appMinorVersion",
-    "appName",
-    "appNotifications",
-    "appVersion",
-    "appearance",
-    "append",
-    "appendBuffer",
-    "appendChild",
-    "appendData",
-    "appendItem",
-    "appendMedium",
-    "appendNamed",
-    "appendRule",
-    "appendStream",
-    "appendWindowEnd",
-    "appendWindowStart",
-    "applets",
-    "applicationCache",
-    "applicationServerKey",
-    "apply",
-    "applyConstraints",
-    "applyElement",
-    "arc",
-    "arcTo",
-    "architecture",
-    "archive",
-    "areas",
-    "arguments",
-    "ariaAtomic",
-    "ariaAutoComplete",
-    "ariaBusy",
-    "ariaChecked",
-    "ariaColCount",
-    "ariaColIndex",
-    "ariaColSpan",
-    "ariaCurrent",
-    "ariaDescription",
-    "ariaDisabled",
-    "ariaExpanded",
-    "ariaHasPopup",
-    "ariaHidden",
-    "ariaKeyShortcuts",
-    "ariaLabel",
-    "ariaLevel",
-    "ariaLive",
-    "ariaModal",
-    "ariaMultiLine",
-    "ariaMultiSelectable",
-    "ariaOrientation",
-    "ariaPlaceholder",
-    "ariaPosInSet",
-    "ariaPressed",
-    "ariaReadOnly",
-    "ariaRelevant",
-    "ariaRequired",
-    "ariaRoleDescription",
-    "ariaRowCount",
-    "ariaRowIndex",
-    "ariaRowSpan",
-    "ariaSelected",
-    "ariaSetSize",
-    "ariaSort",
-    "ariaValueMax",
-    "ariaValueMin",
-    "ariaValueNow",
-    "ariaValueText",
-    "arrayBuffer",
-    "artist",
-    "artwork",
-    "as",
-    "asIntN",
-    "asUintN",
-    "asin",
-    "asinh",
-    "assert",
-    "assign",
-    "assignedElements",
-    "assignedNodes",
-    "assignedSlot",
-    "async",
-    "asyncIterator",
-    "atEnd",
-    "atan",
-    "atan2",
-    "atanh",
-    "atob",
-    "attachEvent",
-    "attachInternals",
-    "attachShader",
-    "attachShadow",
-    "attachments",
-    "attack",
-    "attestationObject",
-    "attrChange",
-    "attrName",
-    "attributeFilter",
-    "attributeName",
-    "attributeNamespace",
-    "attributeOldValue",
-    "attributeStyleMap",
-    "attributes",
-    "attribution",
-    "audioBitsPerSecond",
-    "audioTracks",
-    "audioWorklet",
-    "authenticatedSignedWrites",
-    "authenticatorData",
-    "autoIncrement",
-    "autobuffer",
-    "autocapitalize",
-    "autocomplete",
-    "autocorrect",
-    "autofocus",
-    "automationRate",
-    "autoplay",
-    "availHeight",
-    "availLeft",
-    "availTop",
-    "availWidth",
-    "availability",
-    "available",
-    "aversion",
-    "ax",
-    "axes",
-    "axis",
-    "ay",
-    "azimuth",
-    "b",
-    "back",
-    "backface-visibility",
-    "backfaceVisibility",
-    "background",
-    "background-attachment",
-    "background-blend-mode",
-    "background-clip",
-    "background-color",
-    "background-image",
-    "background-origin",
-    "background-position",
-    "background-position-x",
-    "background-position-y",
-    "background-repeat",
-    "background-size",
-    "backgroundAttachment",
-    "backgroundBlendMode",
-    "backgroundClip",
-    "backgroundColor",
-    "backgroundFetch",
-    "backgroundImage",
-    "backgroundOrigin",
-    "backgroundPosition",
-    "backgroundPositionX",
-    "backgroundPositionY",
-    "backgroundRepeat",
-    "backgroundSize",
-    "badInput",
-    "badge",
-    "balance",
-    "baseFrequencyX",
-    "baseFrequencyY",
-    "baseLatency",
-    "baseLayer",
-    "baseNode",
-    "baseOffset",
-    "baseURI",
-    "baseVal",
-    "baselineShift",
-    "battery",
-    "bday",
-    "before",
-    "beginElement",
-    "beginElementAt",
-    "beginPath",
-    "beginQuery",
-    "beginTransformFeedback",
-    "behavior",
-    "behaviorCookie",
-    "behaviorPart",
-    "behaviorUrns",
-    "beta",
-    "bezierCurveTo",
-    "bgColor",
-    "bgProperties",
-    "bias",
-    "big",
-    "bigint64",
-    "biguint64",
-    "binaryType",
-    "bind",
-    "bindAttribLocation",
-    "bindBuffer",
-    "bindBufferBase",
-    "bindBufferRange",
-    "bindFramebuffer",
-    "bindRenderbuffer",
-    "bindSampler",
-    "bindTexture",
-    "bindTransformFeedback",
-    "bindVertexArray",
-    "bitness",
-    "blendColor",
-    "blendEquation",
-    "blendEquationSeparate",
-    "blendFunc",
-    "blendFuncSeparate",
-    "blink",
-    "blitFramebuffer",
-    "blob",
-    "block-size",
-    "blockDirection",
-    "blockSize",
-    "blockedURI",
-    "blue",
-    "bluetooth",
-    "blur",
-    "body",
-    "bodyUsed",
-    "bold",
-    "bookmarks",
-    "booleanValue",
-    "border",
-    "border-block",
-    "border-block-color",
-    "border-block-end",
-    "border-block-end-color",
-    "border-block-end-style",
-    "border-block-end-width",
-    "border-block-start",
-    "border-block-start-color",
-    "border-block-start-style",
-    "border-block-start-width",
-    "border-block-style",
-    "border-block-width",
-    "border-bottom",
-    "border-bottom-color",
-    "border-bottom-left-radius",
-    "border-bottom-right-radius",
-    "border-bottom-style",
-    "border-bottom-width",
-    "border-collapse",
-    "border-color",
-    "border-end-end-radius",
-    "border-end-start-radius",
-    "border-image",
-    "border-image-outset",
-    "border-image-repeat",
-    "border-image-slice",
-    "border-image-source",
-    "border-image-width",
-    "border-inline",
-    "border-inline-color",
-    "border-inline-end",
-    "border-inline-end-color",
-    "border-inline-end-style",
-    "border-inline-end-width",
-    "border-inline-start",
-    "border-inline-start-color",
-    "border-inline-start-style",
-    "border-inline-start-width",
-    "border-inline-style",
-    "border-inline-width",
-    "border-left",
-    "border-left-color",
-    "border-left-style",
-    "border-left-width",
-    "border-radius",
-    "border-right",
-    "border-right-color",
-    "border-right-style",
-    "border-right-width",
-    "border-spacing",
-    "border-start-end-radius",
-    "border-start-start-radius",
-    "border-style",
-    "border-top",
-    "border-top-color",
-    "border-top-left-radius",
-    "border-top-right-radius",
-    "border-top-style",
-    "border-top-width",
-    "border-width",
-    "borderBlock",
-    "borderBlockColor",
-    "borderBlockEnd",
-    "borderBlockEndColor",
-    "borderBlockEndStyle",
-    "borderBlockEndWidth",
-    "borderBlockStart",
-    "borderBlockStartColor",
-    "borderBlockStartStyle",
-    "borderBlockStartWidth",
-    "borderBlockStyle",
-    "borderBlockWidth",
-    "borderBottom",
-    "borderBottomColor",
-    "borderBottomLeftRadius",
-    "borderBottomRightRadius",
-    "borderBottomStyle",
-    "borderBottomWidth",
-    "borderBoxSize",
-    "borderCollapse",
-    "borderColor",
-    "borderColorDark",
-    "borderColorLight",
-    "borderEndEndRadius",
-    "borderEndStartRadius",
-    "borderImage",
-    "borderImageOutset",
-    "borderImageRepeat",
-    "borderImageSlice",
-    "borderImageSource",
-    "borderImageWidth",
-    "borderInline",
-    "borderInlineColor",
-    "borderInlineEnd",
-    "borderInlineEndColor",
-    "borderInlineEndStyle",
-    "borderInlineEndWidth",
-    "borderInlineStart",
-    "borderInlineStartColor",
-    "borderInlineStartStyle",
-    "borderInlineStartWidth",
-    "borderInlineStyle",
-    "borderInlineWidth",
-    "borderLeft",
-    "borderLeftColor",
-    "borderLeftStyle",
-    "borderLeftWidth",
-    "borderRadius",
-    "borderRight",
-    "borderRightColor",
-    "borderRightStyle",
-    "borderRightWidth",
-    "borderSpacing",
-    "borderStartEndRadius",
-    "borderStartStartRadius",
-    "borderStyle",
-    "borderTop",
-    "borderTopColor",
-    "borderTopLeftRadius",
-    "borderTopRightRadius",
-    "borderTopStyle",
-    "borderTopWidth",
-    "borderWidth",
-    "bottom",
-    "bottomMargin",
-    "bound",
-    "boundElements",
-    "boundingClientRect",
-    "boundingHeight",
-    "boundingLeft",
-    "boundingTop",
-    "boundingWidth",
-    "bounds",
-    "boundsGeometry",
-    "box-decoration-break",
-    "box-shadow",
-    "box-sizing",
-    "boxDecorationBreak",
-    "boxShadow",
-    "boxSizing",
-    "brand",
-    "brands",
-    "break-after",
-    "break-before",
-    "break-inside",
-    "breakAfter",
-    "breakBefore",
-    "breakInside",
-    "broadcast",
-    "browserLanguage",
-    "btoa",
-    "bubbles",
-    "buffer",
-    "bufferData",
-    "bufferDepth",
-    "bufferSize",
-    "bufferSubData",
-    "buffered",
-    "bufferedAmount",
-    "bufferedAmountLowThreshold",
-    "buildID",
-    "buildNumber",
-    "button",
-    "buttonID",
-    "buttons",
-    "byteLength",
-    "byteOffset",
-    "bytesWritten",
-    "c",
-    "cache",
-    "caches",
-    "call",
-    "caller",
-    "canBeFormatted",
-    "canBeMounted",
-    "canBeShared",
-    "canHaveChildren",
-    "canHaveHTML",
-    "canInsertDTMF",
-    "canMakePayment",
-    "canPlayType",
-    "canPresent",
-    "canTrickleIceCandidates",
-    "cancel",
-    "cancelAndHoldAtTime",
-    "cancelAnimationFrame",
-    "cancelBubble",
-    "cancelIdleCallback",
-    "cancelScheduledValues",
-    "cancelVideoFrameCallback",
-    "cancelWatchAvailability",
-    "cancelable",
-    "candidate",
-    "canonicalUUID",
-    "canvas",
-    "capabilities",
-    "caption",
-    "caption-side",
-    "captionSide",
-    "capture",
-    "captureEvents",
-    "captureStackTrace",
-    "captureStream",
-    "caret-color",
-    "caretBidiLevel",
-    "caretColor",
-    "caretPositionFromPoint",
-    "caretRangeFromPoint",
-    "cast",
-    "catch",
-    "category",
-    "cbrt",
-    "cd",
-    "ceil",
-    "cellIndex",
-    "cellPadding",
-    "cellSpacing",
-    "cells",
-    "ch",
-    "chOff",
-    "chain",
-    "challenge",
-    "changeType",
-    "changedTouches",
-    "channel",
-    "channelCount",
-    "channelCountMode",
-    "channelInterpretation",
-    "char",
-    "charAt",
-    "charCode",
-    "charCodeAt",
-    "charIndex",
-    "charLength",
-    "characterData",
-    "characterDataOldValue",
-    "characterSet",
-    "characteristic",
-    "charging",
-    "chargingTime",
-    "charset",
-    "check",
-    "checkEnclosure",
-    "checkFramebufferStatus",
-    "checkIntersection",
-    "checkValidity",
-    "checked",
-    "childElementCount",
-    "childList",
-    "childNodes",
-    "children",
-    "chrome",
-    "ciphertext",
-    "cite",
-    "city",
-    "claimInterface",
-    "claimed",
-    "classList",
-    "className",
-    "classid",
-    "clear",
-    "clearAppBadge",
-    "clearAttributes",
-    "clearBufferfi",
-    "clearBufferfv",
-    "clearBufferiv",
-    "clearBufferuiv",
-    "clearColor",
-    "clearData",
-    "clearDepth",
-    "clearHalt",
-    "clearImmediate",
-    "clearInterval",
-    "clearLiveSeekableRange",
-    "clearMarks",
-    "clearMaxGCPauseAccumulator",
-    "clearMeasures",
-    "clearParameters",
-    "clearRect",
-    "clearResourceTimings",
-    "clearShadow",
-    "clearStencil",
-    "clearTimeout",
-    "clearWatch",
-    "click",
-    "clickCount",
-    "clientDataJSON",
-    "clientHeight",
-    "clientInformation",
-    "clientLeft",
-    "clientRect",
-    "clientRects",
-    "clientTop",
-    "clientWaitSync",
-    "clientWidth",
-    "clientX",
-    "clientY",
-    "clip",
-    "clip-path",
-    "clip-rule",
-    "clipBottom",
-    "clipLeft",
-    "clipPath",
-    "clipPathUnits",
-    "clipRight",
-    "clipRule",
-    "clipTop",
-    "clipboard",
-    "clipboardData",
-    "clone",
-    "cloneContents",
-    "cloneNode",
-    "cloneRange",
-    "close",
-    "closePath",
-    "closed",
-    "closest",
-    "clz",
-    "clz32",
-    "cm",
-    "cmp",
-    "code",
-    "codeBase",
-    "codePointAt",
-    "codeType",
-    "colSpan",
-    "collapse",
-    "collapseToEnd",
-    "collapseToStart",
-    "collapsed",
-    "collect",
-    "colno",
-    "color",
-    "color-adjust",
-    "color-interpolation",
-    "color-interpolation-filters",
-    "colorAdjust",
-    "colorDepth",
-    "colorInterpolation",
-    "colorInterpolationFilters",
-    "colorMask",
-    "colorType",
-    "cols",
-    "column-count",
-    "column-fill",
-    "column-gap",
-    "column-rule",
-    "column-rule-color",
-    "column-rule-style",
-    "column-rule-width",
-    "column-span",
-    "column-width",
-    "columnCount",
-    "columnFill",
-    "columnGap",
-    "columnNumber",
-    "columnRule",
-    "columnRuleColor",
-    "columnRuleStyle",
-    "columnRuleWidth",
-    "columnSpan",
-    "columnWidth",
-    "columns",
-    "command",
-    "commit",
-    "commitPreferences",
-    "commitStyles",
-    "commonAncestorContainer",
-    "compact",
-    "compareBoundaryPoints",
-    "compareDocumentPosition",
-    "compareEndPoints",
-    "compareExchange",
-    "compareNode",
-    "comparePoint",
-    "compatMode",
-    "compatible",
-    "compile",
-    "compileShader",
-    "compileStreaming",
-    "complete",
-    "component",
-    "componentFromPoint",
-    "composed",
-    "composedPath",
-    "composite",
-    "compositionEndOffset",
-    "compositionStartOffset",
-    "compressedTexImage2D",
-    "compressedTexImage3D",
-    "compressedTexSubImage2D",
-    "compressedTexSubImage3D",
-    "computedStyleMap",
-    "concat",
-    "conditionText",
-    "coneInnerAngle",
-    "coneOuterAngle",
-    "coneOuterGain",
-    "configuration",
-    "configurationName",
-    "configurationValue",
-    "configurations",
-    "confirm",
-    "confirmComposition",
-    "confirmSiteSpecificTrackingException",
-    "confirmWebWideTrackingException",
-    "connect",
-    "connectEnd",
-    "connectShark",
-    "connectStart",
-    "connected",
-    "connection",
-    "connectionList",
-    "connectionSpeed",
-    "connectionState",
-    "connections",
-    "console",
-    "consolidate",
-    "constraint",
-    "constrictionActive",
-    "construct",
-    "constructor",
-    "contactID",
-    "contain",
-    "containerId",
-    "containerName",
-    "containerSrc",
-    "containerType",
-    "contains",
-    "containsNode",
-    "content",
-    "contentBoxSize",
-    "contentDocument",
-    "contentEditable",
-    "contentHint",
-    "contentOverflow",
-    "contentRect",
-    "contentScriptType",
-    "contentStyleType",
-    "contentType",
-    "contentWindow",
-    "context",
-    "contextMenu",
-    "contextmenu",
-    "continue",
-    "continuePrimaryKey",
-    "continuous",
-    "control",
-    "controlTransferIn",
-    "controlTransferOut",
-    "controller",
-    "controls",
-    "controlsList",
-    "convertPointFromNode",
-    "convertQuadFromNode",
-    "convertRectFromNode",
-    "convertToBlob",
-    "convertToSpecifiedUnits",
-    "cookie",
-    "cookieEnabled",
-    "coords",
-    "copyBufferSubData",
-    "copyFromChannel",
-    "copyTexImage2D",
-    "copyTexSubImage2D",
-    "copyTexSubImage3D",
-    "copyToChannel",
-    "copyWithin",
-    "correspondingElement",
-    "correspondingUseElement",
-    "corruptedVideoFrames",
-    "cos",
-    "cosh",
-    "count",
-    "countReset",
-    "counter-increment",
-    "counter-reset",
-    "counter-set",
-    "counterIncrement",
-    "counterReset",
-    "counterSet",
-    "country",
-    "cpuClass",
-    "cpuSleepAllowed",
-    "create",
-    "createAnalyser",
-    "createAnswer",
-    "createAttribute",
-    "createAttributeNS",
-    "createBiquadFilter",
-    "createBuffer",
-    "createBufferSource",
-    "createCDATASection",
-    "createCSSStyleSheet",
-    "createCaption",
-    "createChannelMerger",
-    "createChannelSplitter",
-    "createComment",
-    "createConstantSource",
-    "createContextualFragment",
-    "createControlRange",
-    "createConvolver",
-    "createDTMFSender",
-    "createDataChannel",
-    "createDelay",
-    "createDelayNode",
-    "createDocument",
-    "createDocumentFragment",
-    "createDocumentType",
-    "createDynamicsCompressor",
-    "createElement",
-    "createElementNS",
-    "createEntityReference",
-    "createEvent",
-    "createEventObject",
-    "createExpression",
-    "createFramebuffer",
-    "createFunction",
-    "createGain",
-    "createGainNode",
-    "createHTML",
-    "createHTMLDocument",
-    "createIIRFilter",
-    "createImageBitmap",
-    "createImageData",
-    "createIndex",
-    "createJavaScriptNode",
-    "createLinearGradient",
-    "createMediaElementSource",
-    "createMediaKeys",
-    "createMediaStreamDestination",
-    "createMediaStreamSource",
-    "createMediaStreamTrackSource",
-    "createMutableFile",
-    "createNSResolver",
-    "createNodeIterator",
-    "createNotification",
-    "createObjectStore",
-    "createObjectURL",
-    "createOffer",
-    "createOscillator",
-    "createPanner",
-    "createPattern",
-    "createPeriodicWave",
-    "createPolicy",
-    "createPopup",
-    "createProcessingInstruction",
-    "createProgram",
-    "createQuery",
-    "createRadialGradient",
-    "createRange",
-    "createRangeCollection",
-    "createReader",
-    "createRenderbuffer",
-    "createSVGAngle",
-    "createSVGLength",
-    "createSVGMatrix",
-    "createSVGNumber",
-    "createSVGPathSegArcAbs",
-    "createSVGPathSegArcRel",
-    "createSVGPathSegClosePath",
-    "createSVGPathSegCurvetoCubicAbs",
-    "createSVGPathSegCurvetoCubicRel",
-    "createSVGPathSegCurvetoCubicSmoothAbs",
-    "createSVGPathSegCurvetoCubicSmoothRel",
-    "createSVGPathSegCurvetoQuadraticAbs",
-    "createSVGPathSegCurvetoQuadraticRel",
-    "createSVGPathSegCurvetoQuadraticSmoothAbs",
-    "createSVGPathSegCurvetoQuadraticSmoothRel",
-    "createSVGPathSegLinetoAbs",
-    "createSVGPathSegLinetoHorizontalAbs",
-    "createSVGPathSegLinetoHorizontalRel",
-    "createSVGPathSegLinetoRel",
-    "createSVGPathSegLinetoVerticalAbs",
-    "createSVGPathSegLinetoVerticalRel",
-    "createSVGPathSegMovetoAbs",
-    "createSVGPathSegMovetoRel",
-    "createSVGPoint",
-    "createSVGRect",
-    "createSVGTransform",
-    "createSVGTransformFromMatrix",
-    "createSampler",
-    "createScript",
-    "createScriptProcessor",
-    "createScriptURL",
-    "createSession",
-    "createShader",
-    "createShadowRoot",
-    "createStereoPanner",
-    "createStyleSheet",
-    "createTBody",
-    "createTFoot",
-    "createTHead",
-    "createTextNode",
-    "createTextRange",
-    "createTexture",
-    "createTouch",
-    "createTouchList",
-    "createTransformFeedback",
-    "createTreeWalker",
-    "createVertexArray",
-    "createWaveShaper",
-    "creationTime",
-    "credentials",
-    "crossOrigin",
-    "crossOriginIsolated",
-    "crypto",
-    "csi",
-    "csp",
-    "cssFloat",
-    "cssRules",
-    "cssText",
-    "cssValueType",
-    "ctrlKey",
-    "ctrlLeft",
-    "cues",
-    "cullFace",
-    "currentDirection",
-    "currentLocalDescription",
-    "currentNode",
-    "currentPage",
-    "currentRect",
-    "currentRemoteDescription",
-    "currentScale",
-    "currentScript",
-    "currentSrc",
-    "currentState",
-    "currentStyle",
-    "currentTarget",
-    "currentTime",
-    "currentTranslate",
-    "currentView",
-    "cursor",
-    "curve",
-    "customElements",
-    "customError",
-    "cx",
-    "cy",
-    "d",
-    "data",
-    "dataFld",
-    "dataFormatAs",
-    "dataLoss",
-    "dataLossMessage",
-    "dataPageSize",
-    "dataSrc",
-    "dataTransfer",
-    "database",
-    "databases",
-    "dataset",
-    "dateTime",
-    "db",
-    "debug",
-    "debuggerEnabled",
-    "declare",
-    "decode",
-    "decodeAudioData",
-    "decodeURI",
-    "decodeURIComponent",
-    "decodedBodySize",
-    "decoding",
-    "decodingInfo",
-    "decrypt",
-    "default",
-    "defaultCharset",
-    "defaultChecked",
-    "defaultMuted",
-    "defaultPlaybackRate",
-    "defaultPolicy",
-    "defaultPrevented",
-    "defaultRequest",
-    "defaultSelected",
-    "defaultStatus",
-    "defaultURL",
-    "defaultValue",
-    "defaultView",
-    "defaultstatus",
-    "defer",
-    "define",
-    "defineMagicFunction",
-    "defineMagicVariable",
-    "defineProperties",
-    "defineProperty",
-    "deg",
-    "delay",
-    "delayTime",
-    "delegatesFocus",
-    "delete",
-    "deleteBuffer",
-    "deleteCaption",
-    "deleteCell",
-    "deleteContents",
-    "deleteData",
-    "deleteDatabase",
-    "deleteFramebuffer",
-    "deleteFromDocument",
-    "deleteIndex",
-    "deleteMedium",
-    "deleteObjectStore",
-    "deleteProgram",
-    "deleteProperty",
-    "deleteQuery",
-    "deleteRenderbuffer",
-    "deleteRow",
-    "deleteRule",
-    "deleteSampler",
-    "deleteShader",
-    "deleteSync",
-    "deleteTFoot",
-    "deleteTHead",
-    "deleteTexture",
-    "deleteTransformFeedback",
-    "deleteVertexArray",
-    "deliverChangeRecords",
-    "delivery",
-    "deliveryInfo",
-    "deliveryStatus",
-    "deliveryTimestamp",
-    "delta",
-    "deltaMode",
-    "deltaX",
-    "deltaY",
-    "deltaZ",
-    "dependentLocality",
-    "depthFar",
-    "depthFunc",
-    "depthMask",
-    "depthNear",
-    "depthRange",
-    "deref",
-    "deriveBits",
-    "deriveKey",
-    "description",
-    "deselectAll",
-    "designMode",
-    "desiredSize",
-    "destination",
-    "destinationURL",
-    "detach",
-    "detachEvent",
-    "detachShader",
-    "detail",
-    "details",
-    "detect",
-    "detune",
-    "device",
-    "deviceClass",
-    "deviceId",
-    "deviceMemory",
-    "devicePixelContentBoxSize",
-    "devicePixelRatio",
-    "deviceProtocol",
-    "deviceSubclass",
-    "deviceVersionMajor",
-    "deviceVersionMinor",
-    "deviceVersionSubminor",
-    "deviceXDPI",
-    "deviceYDPI",
-    "didTimeout",
-    "diffuseConstant",
-    "digest",
-    "dimensions",
-    "dir",
-    "dirName",
-    "direction",
-    "dirxml",
-    "disable",
-    "disablePictureInPicture",
-    "disableRemotePlayback",
-    "disableVertexAttribArray",
-    "disabled",
-    "dischargingTime",
-    "disconnect",
-    "disconnectShark",
-    "dispatchEvent",
-    "display",
-    "displayId",
-    "displayName",
-    "disposition",
-    "distanceModel",
-    "div",
-    "divisor",
-    "djsapi",
-    "djsproxy",
-    "doImport",
-    "doNotTrack",
-    "doScroll",
-    "doctype",
-    "document",
-    "documentElement",
-    "documentMode",
-    "documentURI",
-    "dolphin",
-    "dolphinGameCenter",
-    "dolphininfo",
-    "dolphinmeta",
-    "domComplete",
-    "domContentLoadedEventEnd",
-    "domContentLoadedEventStart",
-    "domInteractive",
-    "domLoading",
-    "domOverlayState",
-    "domain",
-    "domainLookupEnd",
-    "domainLookupStart",
-    "dominant-baseline",
-    "dominantBaseline",
-    "done",
-    "dopplerFactor",
-    "dotAll",
-    "downDegrees",
-    "downlink",
-    "download",
-    "downloadTotal",
-    "downloaded",
-    "dpcm",
-    "dpi",
-    "dppx",
-    "dragDrop",
-    "draggable",
-    "drawArrays",
-    "drawArraysInstanced",
-    "drawArraysInstancedANGLE",
-    "drawBuffers",
-    "drawCustomFocusRing",
-    "drawElements",
-    "drawElementsInstanced",
-    "drawElementsInstancedANGLE",
-    "drawFocusIfNeeded",
-    "drawImage",
-    "drawImageFromRect",
-    "drawRangeElements",
-    "drawSystemFocusRing",
-    "drawingBufferHeight",
-    "drawingBufferWidth",
-    "dropEffect",
-    "droppedVideoFrames",
-    "dropzone",
-    "dtmf",
-    "dump",
-    "dumpProfile",
-    "duplicate",
-    "durability",
-    "duration",
-    "dvname",
-    "dvnum",
-    "dx",
-    "dy",
-    "dynsrc",
-    "e",
-    "edgeMode",
-    "effect",
-    "effectAllowed",
-    "effectiveDirective",
-    "effectiveType",
-    "elapsedTime",
-    "element",
-    "elementFromPoint",
-    "elementTiming",
-    "elements",
-    "elementsFromPoint",
-    "elevation",
-    "ellipse",
-    "em",
-    "email",
-    "embeds",
-    "emma",
-    "empty",
-    "empty-cells",
-    "emptyCells",
-    "emptyHTML",
-    "emptyScript",
-    "emulatedPosition",
-    "enable",
-    "enableBackground",
-    "enableDelegations",
-    "enableStyleSheetsForSet",
-    "enableVertexAttribArray",
-    "enabled",
-    "enabledPlugin",
-    "encode",
-    "encodeInto",
-    "encodeURI",
-    "encodeURIComponent",
-    "encodedBodySize",
-    "encoding",
-    "encodingInfo",
-    "encrypt",
-    "enctype",
-    "end",
-    "endContainer",
-    "endElement",
-    "endElementAt",
-    "endOfStream",
-    "endOffset",
-    "endQuery",
-    "endTime",
-    "endTransformFeedback",
-    "ended",
-    "endpoint",
-    "endpointNumber",
-    "endpoints",
-    "endsWith",
-    "enterKeyHint",
-    "entities",
-    "entries",
-    "entryType",
-    "enumerate",
-    "enumerateDevices",
-    "enumerateEditable",
-    "environmentBlendMode",
-    "equals",
-    "error",
-    "errorCode",
-    "errorDetail",
-    "errorText",
-    "escape",
-    "estimate",
-    "eval",
-    "evaluate",
-    "event",
-    "eventPhase",
-    "every",
-    "ex",
-    "exception",
-    "exchange",
-    "exec",
-    "execCommand",
-    "execCommandShowHelp",
-    "execScript",
-    "exitFullscreen",
-    "exitPictureInPicture",
-    "exitPointerLock",
-    "exitPresent",
-    "exp",
-    "expand",
-    "expandEntityReferences",
-    "expando",
-    "expansion",
-    "expiration",
-    "expirationTime",
-    "expires",
-    "expiryDate",
-    "explicitOriginalTarget",
-    "expm1",
-    "exponent",
-    "exponentialRampToValueAtTime",
-    "exportKey",
-    "exports",
-    "extend",
-    "extensions",
-    "extentNode",
-    "extentOffset",
-    "external",
-    "externalResourcesRequired",
-    "extractContents",
-    "extractable",
-    "eye",
-    "f",
-    "face",
-    "factoryReset",
-    "failureReason",
-    "fallback",
-    "family",
-    "familyName",
-    "farthestViewportElement",
-    "fastSeek",
-    "fatal",
-    "featureId",
-    "featurePolicy",
-    "featureSettings",
-    "features",
-    "fenceSync",
-    "fetch",
-    "fetchStart",
-    "fftSize",
-    "fgColor",
-    "fieldOfView",
-    "file",
-    "fileCreatedDate",
-    "fileHandle",
-    "fileModifiedDate",
-    "fileName",
-    "fileSize",
-    "fileUpdatedDate",
-    "filename",
-    "files",
-    "filesystem",
-    "fill",
-    "fill-opacity",
-    "fill-rule",
-    "fillLightMode",
-    "fillOpacity",
-    "fillRect",
-    "fillRule",
-    "fillStyle",
-    "fillText",
-    "filter",
-    "filterResX",
-    "filterResY",
-    "filterUnits",
-    "filters",
-    "finally",
-    "find",
-    "findIndex",
-    "findRule",
-    "findText",
-    "finish",
-    "finished",
-    "fireEvent",
-    "firesTouchEvents",
-    "firstChild",
-    "firstElementChild",
-    "firstPage",
-    "fixed",
-    "flags",
-    "flat",
-    "flatMap",
-    "flex",
-    "flex-basis",
-    "flex-direction",
-    "flex-flow",
-    "flex-grow",
-    "flex-shrink",
-    "flex-wrap",
-    "flexBasis",
-    "flexDirection",
-    "flexFlow",
-    "flexGrow",
-    "flexShrink",
-    "flexWrap",
-    "flipX",
-    "flipY",
-    "float",
-    "float32",
-    "float64",
-    "flood-color",
-    "flood-opacity",
-    "floodColor",
-    "floodOpacity",
-    "floor",
-    "flush",
-    "focus",
-    "focusNode",
-    "focusOffset",
-    "font",
-    "font-family",
-    "font-feature-settings",
-    "font-kerning",
-    "font-language-override",
-    "font-optical-sizing",
-    "font-size",
-    "font-size-adjust",
-    "font-stretch",
-    "font-style",
-    "font-synthesis",
-    "font-variant",
-    "font-variant-alternates",
-    "font-variant-caps",
-    "font-variant-east-asian",
-    "font-variant-ligatures",
-    "font-variant-numeric",
-    "font-variant-position",
-    "font-variation-settings",
-    "font-weight",
-    "fontFamily",
-    "fontFeatureSettings",
-    "fontKerning",
-    "fontLanguageOverride",
-    "fontOpticalSizing",
-    "fontSize",
-    "fontSizeAdjust",
-    "fontSmoothingEnabled",
-    "fontStretch",
-    "fontStyle",
-    "fontSynthesis",
-    "fontVariant",
-    "fontVariantAlternates",
-    "fontVariantCaps",
-    "fontVariantEastAsian",
-    "fontVariantLigatures",
-    "fontVariantNumeric",
-    "fontVariantPosition",
-    "fontVariationSettings",
-    "fontWeight",
-    "fontcolor",
-    "fontfaces",
-    "fonts",
-    "fontsize",
-    "for",
-    "forEach",
-    "force",
-    "forceRedraw",
-    "form",
-    "formAction",
-    "formData",
-    "formEnctype",
-    "formMethod",
-    "formNoValidate",
-    "formTarget",
-    "format",
-    "formatToParts",
-    "forms",
-    "forward",
-    "forwardX",
-    "forwardY",
-    "forwardZ",
-    "foundation",
-    "fr",
-    "fragmentDirective",
-    "frame",
-    "frameBorder",
-    "frameElement",
-    "frameSpacing",
-    "framebuffer",
-    "framebufferHeight",
-    "framebufferRenderbuffer",
-    "framebufferTexture2D",
-    "framebufferTextureLayer",
-    "framebufferWidth",
-    "frames",
-    "freeSpace",
-    "freeze",
-    "frequency",
-    "frequencyBinCount",
-    "from",
-    "fromCharCode",
-    "fromCodePoint",
-    "fromElement",
-    "fromEntries",
-    "fromFloat32Array",
-    "fromFloat64Array",
-    "fromMatrix",
-    "fromPoint",
-    "fromQuad",
-    "fromRect",
-    "frontFace",
-    "fround",
-    "fullPath",
-    "fullScreen",
-    "fullVersionList",
-    "fullscreen",
-    "fullscreenElement",
-    "fullscreenEnabled",
-    "fx",
-    "fy",
-    "gain",
-    "gamepad",
-    "gamma",
-    "gap",
-    "gatheringState",
-    "gatt",
-    "genderIdentity",
-    "generateCertificate",
-    "generateKey",
-    "generateMipmap",
-    "generateRequest",
-    "geolocation",
-    "gestureObject",
-    "get",
-    "getActiveAttrib",
-    "getActiveUniform",
-    "getActiveUniformBlockName",
-    "getActiveUniformBlockParameter",
-    "getActiveUniforms",
-    "getAdjacentText",
-    "getAll",
-    "getAllKeys",
-    "getAllResponseHeaders",
-    "getAllowlistForFeature",
-    "getAnimations",
-    "getAsFile",
-    "getAsString",
-    "getAttachedShaders",
-    "getAttribLocation",
-    "getAttribute",
-    "getAttributeNS",
-    "getAttributeNames",
-    "getAttributeNode",
-    "getAttributeNodeNS",
-    "getAttributeType",
-    "getAudioTracks",
-    "getAvailability",
-    "getBBox",
-    "getBattery",
-    "getBigInt64",
-    "getBigUint64",
-    "getBlob",
-    "getBookmark",
-    "getBoundingClientRect",
-    "getBounds",
-    "getBoxQuads",
-    "getBufferParameter",
-    "getBufferSubData",
-    "getByteFrequencyData",
-    "getByteTimeDomainData",
-    "getCSSCanvasContext",
-    "getCTM",
-    "getCandidateWindowClientRect",
-    "getCanonicalLocales",
-    "getCapabilities",
-    "getChannelData",
-    "getCharNumAtPosition",
-    "getCharacteristic",
-    "getCharacteristics",
-    "getClientExtensionResults",
-    "getClientRect",
-    "getClientRects",
-    "getCoalescedEvents",
-    "getCompositionAlternatives",
-    "getComputedStyle",
-    "getComputedTextLength",
-    "getComputedTiming",
-    "getConfiguration",
-    "getConstraints",
-    "getContext",
-    "getContextAttributes",
-    "getContributingSources",
-    "getCounterValue",
-    "getCueAsHTML",
-    "getCueById",
-    "getCurrentPosition",
-    "getCurrentTime",
-    "getData",
-    "getDatabaseNames",
-    "getDate",
-    "getDay",
-    "getDefaultComputedStyle",
-    "getDescriptor",
-    "getDescriptors",
-    "getDestinationInsertionPoints",
-    "getDevices",
-    "getDirectory",
-    "getDisplayMedia",
-    "getDistributedNodes",
-    "getEditable",
-    "getElementById",
-    "getElementsByClassName",
-    "getElementsByName",
-    "getElementsByTagName",
-    "getElementsByTagNameNS",
-    "getEnclosureList",
-    "getEndPositionOfChar",
-    "getEntries",
-    "getEntriesByName",
-    "getEntriesByType",
-    "getError",
-    "getExtension",
-    "getExtentOfChar",
-    "getEyeParameters",
-    "getFeature",
-    "getFile",
-    "getFiles",
-    "getFilesAndDirectories",
-    "getFingerprints",
-    "getFloat32",
-    "getFloat64",
-    "getFloatFrequencyData",
-    "getFloatTimeDomainData",
-    "getFloatValue",
-    "getFragDataLocation",
-    "getFrameData",
-    "getFramebufferAttachmentParameter",
-    "getFrequencyResponse",
-    "getFullYear",
-    "getGamepads",
-    "getHighEntropyValues",
-    "getHitTestResults",
-    "getHitTestResultsForTransientInput",
-    "getHours",
-    "getIdentityAssertion",
-    "getIds",
-    "getImageData",
-    "getIndexedParameter",
-    "getInstalledRelatedApps",
-    "getInt16",
-    "getInt32",
-    "getInt8",
-    "getInternalformatParameter",
-    "getIntersectionList",
-    "getItem",
-    "getItems",
-    "getKey",
-    "getKeyframes",
-    "getLayers",
-    "getLayoutMap",
-    "getLineDash",
-    "getLocalCandidates",
-    "getLocalParameters",
-    "getLocalStreams",
-    "getMarks",
-    "getMatchedCSSRules",
-    "getMaxGCPauseSinceClear",
-    "getMeasures",
-    "getMetadata",
-    "getMilliseconds",
-    "getMinutes",
-    "getModifierState",
-    "getMonth",
-    "getNamedItem",
-    "getNamedItemNS",
-    "getNativeFramebufferScaleFactor",
-    "getNotifications",
-    "getNotifier",
-    "getNumberOfChars",
-    "getOffsetReferenceSpace",
-    "getOutputTimestamp",
-    "getOverrideHistoryNavigationMode",
-    "getOverrideStyle",
-    "getOwnPropertyDescriptor",
-    "getOwnPropertyDescriptors",
-    "getOwnPropertyNames",
-    "getOwnPropertySymbols",
-    "getParameter",
-    "getParameters",
-    "getParent",
-    "getPathSegAtLength",
-    "getPhotoCapabilities",
-    "getPhotoSettings",
-    "getPointAtLength",
-    "getPose",
-    "getPredictedEvents",
-    "getPreference",
-    "getPreferenceDefault",
-    "getPresentationAttribute",
-    "getPreventDefault",
-    "getPrimaryService",
-    "getPrimaryServices",
-    "getProgramInfoLog",
-    "getProgramParameter",
-    "getPropertyCSSValue",
-    "getPropertyPriority",
-    "getPropertyShorthand",
-    "getPropertyType",
-    "getPropertyValue",
-    "getPrototypeOf",
-    "getQuery",
-    "getQueryParameter",
-    "getRGBColorValue",
-    "getRandomValues",
-    "getRangeAt",
-    "getReader",
-    "getReceivers",
-    "getRectValue",
-    "getRegistration",
-    "getRegistrations",
-    "getRemoteCandidates",
-    "getRemoteCertificates",
-    "getRemoteParameters",
-    "getRemoteStreams",
-    "getRenderbufferParameter",
-    "getResponseHeader",
-    "getRoot",
-    "getRootNode",
-    "getRotationOfChar",
-    "getSVGDocument",
-    "getSamplerParameter",
-    "getScreenCTM",
-    "getSeconds",
-    "getSelectedCandidatePair",
-    "getSelection",
-    "getSenders",
-    "getService",
-    "getSettings",
-    "getShaderInfoLog",
-    "getShaderParameter",
-    "getShaderPrecisionFormat",
-    "getShaderSource",
-    "getSimpleDuration",
-    "getSiteIcons",
-    "getSources",
-    "getSpeculativeParserUrls",
-    "getStartPositionOfChar",
-    "getStartTime",
-    "getState",
-    "getStats",
-    "getStatusForPolicy",
-    "getStorageUpdates",
-    "getStreamById",
-    "getStringValue",
-    "getSubStringLength",
-    "getSubscription",
-    "getSupportedConstraints",
-    "getSupportedExtensions",
-    "getSupportedFormats",
-    "getSyncParameter",
-    "getSynchronizationSources",
-    "getTags",
-    "getTargetRanges",
-    "getTexParameter",
-    "getTime",
-    "getTimezoneOffset",
-    "getTiming",
-    "getTotalLength",
-    "getTrackById",
-    "getTracks",
-    "getTransceivers",
-    "getTransform",
-    "getTransformFeedbackVarying",
-    "getTransformToElement",
-    "getTransports",
-    "getType",
-    "getTypeMapping",
-    "getUTCDate",
-    "getUTCDay",
-    "getUTCFullYear",
-    "getUTCHours",
-    "getUTCMilliseconds",
-    "getUTCMinutes",
-    "getUTCMonth",
-    "getUTCSeconds",
-    "getUint16",
-    "getUint32",
-    "getUint8",
-    "getUniform",
-    "getUniformBlockIndex",
-    "getUniformIndices",
-    "getUniformLocation",
-    "getUserMedia",
-    "getVRDisplays",
-    "getValues",
-    "getVarDate",
-    "getVariableValue",
-    "getVertexAttrib",
-    "getVertexAttribOffset",
-    "getVideoPlaybackQuality",
-    "getVideoTracks",
-    "getViewerPose",
-    "getViewport",
-    "getVoices",
-    "getWakeLockState",
-    "getWriter",
-    "getYear",
-    "givenName",
-    "global",
-    "globalAlpha",
-    "globalCompositeOperation",
-    "globalThis",
-    "glyphOrientationHorizontal",
-    "glyphOrientationVertical",
-    "glyphRef",
-    "go",
-    "grabFrame",
-    "grad",
-    "gradientTransform",
-    "gradientUnits",
-    "grammars",
-    "green",
-    "grid",
-    "grid-area",
-    "grid-auto-columns",
-    "grid-auto-flow",
-    "grid-auto-rows",
-    "grid-column",
-    "grid-column-end",
-    "grid-column-gap",
-    "grid-column-start",
-    "grid-gap",
-    "grid-row",
-    "grid-row-end",
-    "grid-row-gap",
-    "grid-row-start",
-    "grid-template",
-    "grid-template-areas",
-    "grid-template-columns",
-    "grid-template-rows",
-    "gridArea",
-    "gridAutoColumns",
-    "gridAutoFlow",
-    "gridAutoRows",
-    "gridColumn",
-    "gridColumnEnd",
-    "gridColumnGap",
-    "gridColumnStart",
-    "gridGap",
-    "gridRow",
-    "gridRowEnd",
-    "gridRowGap",
-    "gridRowStart",
-    "gridTemplate",
-    "gridTemplateAreas",
-    "gridTemplateColumns",
-    "gridTemplateRows",
-    "gripSpace",
-    "group",
-    "groupCollapsed",
-    "groupEnd",
-    "groupId",
-    "hadRecentInput",
-    "hand",
-    "handedness",
-    "hapticActuators",
-    "hardwareConcurrency",
-    "has",
-    "hasAttribute",
-    "hasAttributeNS",
-    "hasAttributes",
-    "hasBeenActive",
-    "hasChildNodes",
-    "hasComposition",
-    "hasEnrolledInstrument",
-    "hasExtension",
-    "hasExternalDisplay",
-    "hasFeature",
-    "hasFocus",
-    "hasInstance",
-    "hasLayout",
-    "hasOrientation",
-    "hasOwnProperty",
-    "hasPointerCapture",
-    "hasPosition",
-    "hasReading",
-    "hasStorageAccess",
-    "hash",
-    "head",
-    "headers",
-    "heading",
-    "height",
-    "hidden",
-    "hide",
-    "hideFocus",
-    "high",
-    "highWaterMark",
-    "hint",
-    "history",
-    "honorificPrefix",
-    "honorificSuffix",
-    "horizontalOverflow",
-    "host",
-    "hostCandidate",
-    "hostname",
-    "href",
-    "hrefTranslate",
-    "hreflang",
-    "hspace",
-    "html5TagCheckInerface",
-    "htmlFor",
-    "htmlText",
-    "httpEquiv",
-    "httpRequestStatusCode",
-    "hwTimestamp",
-    "hyphens",
-    "hypot",
-    "iccId",
-    "iceConnectionState",
-    "iceGatheringState",
-    "iceTransport",
-    "icon",
-    "iconURL",
-    "id",
-    "identifier",
-    "identity",
-    "idpLoginUrl",
-    "ignoreBOM",
-    "ignoreCase",
-    "ignoreDepthValues",
-    "image-orientation",
-    "image-rendering",
-    "imageHeight",
-    "imageOrientation",
-    "imageRendering",
-    "imageSizes",
-    "imageSmoothingEnabled",
-    "imageSmoothingQuality",
-    "imageSrcset",
-    "imageWidth",
-    "images",
-    "ime-mode",
-    "imeMode",
-    "implementation",
-    "importKey",
-    "importNode",
-    "importStylesheet",
-    "imports",
-    "impp",
-    "imul",
-    "in",
-    "in1",
-    "in2",
-    "inBandMetadataTrackDispatchType",
-    "inRange",
-    "includes",
-    "incremental",
-    "indeterminate",
-    "index",
-    "indexNames",
-    "indexOf",
-    "indexedDB",
-    "indicate",
-    "inertiaDestinationX",
-    "inertiaDestinationY",
-    "info",
-    "init",
-    "initAnimationEvent",
-    "initBeforeLoadEvent",
-    "initClipboardEvent",
-    "initCloseEvent",
-    "initCommandEvent",
-    "initCompositionEvent",
-    "initCustomEvent",
-    "initData",
-    "initDataType",
-    "initDeviceMotionEvent",
-    "initDeviceOrientationEvent",
-    "initDragEvent",
-    "initErrorEvent",
-    "initEvent",
-    "initFocusEvent",
-    "initGestureEvent",
-    "initHashChangeEvent",
-    "initKeyEvent",
-    "initKeyboardEvent",
-    "initMSManipulationEvent",
-    "initMessageEvent",
-    "initMouseEvent",
-    "initMouseScrollEvent",
-    "initMouseWheelEvent",
-    "initMutationEvent",
-    "initNSMouseEvent",
-    "initOverflowEvent",
-    "initPageEvent",
-    "initPageTransitionEvent",
-    "initPointerEvent",
-    "initPopStateEvent",
-    "initProgressEvent",
-    "initScrollAreaEvent",
-    "initSimpleGestureEvent",
-    "initStorageEvent",
-    "initTextEvent",
-    "initTimeEvent",
-    "initTouchEvent",
-    "initTransitionEvent",
-    "initUIEvent",
-    "initWebKitAnimationEvent",
-    "initWebKitTransitionEvent",
-    "initWebKitWheelEvent",
-    "initWheelEvent",
-    "initialTime",
-    "initialize",
-    "initiatorType",
-    "inline-size",
-    "inlineSize",
-    "inlineVerticalFieldOfView",
-    "inner",
-    "innerHTML",
-    "innerHeight",
-    "innerText",
-    "innerWidth",
-    "input",
-    "inputBuffer",
-    "inputEncoding",
-    "inputMethod",
-    "inputMode",
-    "inputSource",
-    "inputSources",
-    "inputType",
-    "inputs",
-    "insertAdjacentElement",
-    "insertAdjacentHTML",
-    "insertAdjacentText",
-    "insertBefore",
-    "insertCell",
-    "insertDTMF",
-    "insertData",
-    "insertItemBefore",
-    "insertNode",
-    "insertRow",
-    "insertRule",
-    "inset",
-    "inset-block",
-    "inset-block-end",
-    "inset-block-start",
-    "inset-inline",
-    "inset-inline-end",
-    "inset-inline-start",
-    "insetBlock",
-    "insetBlockEnd",
-    "insetBlockStart",
-    "insetInline",
-    "insetInlineEnd",
-    "insetInlineStart",
-    "installing",
-    "instanceRoot",
-    "instantiate",
-    "instantiateStreaming",
-    "instruments",
-    "int16",
-    "int32",
-    "int8",
-    "integrity",
-    "interactionMode",
-    "intercept",
-    "interfaceClass",
-    "interfaceName",
-    "interfaceNumber",
-    "interfaceProtocol",
-    "interfaceSubclass",
-    "interfaces",
-    "interimResults",
-    "internalSubset",
-    "interpretation",
-    "intersectionRatio",
-    "intersectionRect",
-    "intersectsNode",
-    "interval",
-    "invalidIteratorState",
-    "invalidateFramebuffer",
-    "invalidateSubFramebuffer",
-    "inverse",
-    "invertSelf",
-    "is",
-    "is2D",
-    "isActive",
-    "isAlternate",
-    "isArray",
-    "isBingCurrentSearchDefault",
-    "isBuffer",
-    "isCandidateWindowVisible",
-    "isChar",
-    "isCollapsed",
-    "isComposing",
-    "isConcatSpreadable",
-    "isConnected",
-    "isContentEditable",
-    "isContentHandlerRegistered",
-    "isContextLost",
-    "isDefaultNamespace",
-    "isDirectory",
-    "isDisabled",
-    "isEnabled",
-    "isEqual",
-    "isEqualNode",
-    "isExtensible",
-    "isExternalCTAP2SecurityKeySupported",
-    "isFile",
-    "isFinite",
-    "isFramebuffer",
-    "isFrozen",
-    "isGenerator",
-    "isHTML",
-    "isHistoryNavigation",
-    "isId",
-    "isIdentity",
-    "isInjected",
-    "isInteger",
-    "isIntersecting",
-    "isLockFree",
-    "isMap",
-    "isMultiLine",
-    "isNaN",
-    "isOpen",
-    "isPointInFill",
-    "isPointInPath",
-    "isPointInRange",
-    "isPointInStroke",
-    "isPrefAlternate",
-    "isPresenting",
-    "isPrimary",
-    "isProgram",
-    "isPropertyImplicit",
-    "isProtocolHandlerRegistered",
-    "isPrototypeOf",
-    "isQuery",
-    "isRenderbuffer",
-    "isSafeInteger",
-    "isSameNode",
-    "isSampler",
-    "isScript",
-    "isScriptURL",
-    "isSealed",
-    "isSecureContext",
-    "isSessionSupported",
-    "isShader",
-    "isSupported",
-    "isSync",
-    "isTextEdit",
-    "isTexture",
-    "isTransformFeedback",
-    "isTrusted",
-    "isTypeSupported",
-    "isUserVerifyingPlatformAuthenticatorAvailable",
-    "isVertexArray",
-    "isView",
-    "isVisible",
-    "isochronousTransferIn",
-    "isochronousTransferOut",
-    "isolation",
-    "italics",
-    "item",
-    "itemId",
-    "itemProp",
-    "itemRef",
-    "itemScope",
-    "itemType",
-    "itemValue",
-    "items",
-    "iterateNext",
-    "iterationComposite",
-    "iterator",
-    "javaEnabled",
-    "jobTitle",
-    "join",
-    "json",
-    "justify-content",
-    "justify-items",
-    "justify-self",
-    "justifyContent",
-    "justifyItems",
-    "justifySelf",
-    "k1",
-    "k2",
-    "k3",
-    "k4",
-    "kHz",
-    "keepalive",
-    "kernelMatrix",
-    "kernelUnitLengthX",
-    "kernelUnitLengthY",
-    "kerning",
-    "key",
-    "keyCode",
-    "keyFor",
-    "keyIdentifier",
-    "keyLightEnabled",
-    "keyLocation",
-    "keyPath",
-    "keyStatuses",
-    "keySystem",
-    "keyText",
-    "keyUsage",
-    "keyboard",
-    "keys",
-    "keytype",
-    "kind",
-    "knee",
-    "label",
-    "labels",
-    "lang",
-    "language",
-    "languages",
-    "largeArcFlag",
-    "lastChild",
-    "lastElementChild",
-    "lastEventId",
-    "lastIndex",
-    "lastIndexOf",
-    "lastInputTime",
-    "lastMatch",
-    "lastMessageSubject",
-    "lastMessageType",
-    "lastModified",
-    "lastModifiedDate",
-    "lastPage",
-    "lastParen",
-    "lastState",
-    "lastStyleSheetSet",
-    "latitude",
-    "layerX",
-    "layerY",
-    "layoutFlow",
-    "layoutGrid",
-    "layoutGridChar",
-    "layoutGridLine",
-    "layoutGridMode",
-    "layoutGridType",
-    "lbound",
-    "left",
-    "leftContext",
-    "leftDegrees",
-    "leftMargin",
-    "leftProjectionMatrix",
-    "leftViewMatrix",
-    "length",
-    "lengthAdjust",
-    "lengthComputable",
-    "letter-spacing",
-    "letterSpacing",
-    "level",
-    "lighting-color",
-    "lightingColor",
-    "limitingConeAngle",
-    "line",
-    "line-break",
-    "line-height",
-    "lineAlign",
-    "lineBreak",
-    "lineCap",
-    "lineDashOffset",
-    "lineHeight",
-    "lineJoin",
-    "lineNumber",
-    "lineTo",
-    "lineWidth",
-    "linearAcceleration",
-    "linearRampToValueAtTime",
-    "linearVelocity",
-    "lineno",
-    "lines",
-    "link",
-    "linkColor",
-    "linkProgram",
-    "links",
-    "list",
-    "list-style",
-    "list-style-image",
-    "list-style-position",
-    "list-style-type",
-    "listStyle",
-    "listStyleImage",
-    "listStylePosition",
-    "listStyleType",
-    "listener",
-    "load",
-    "loadEventEnd",
-    "loadEventStart",
-    "loadTime",
-    "loadTimes",
-    "loaded",
-    "loading",
-    "localDescription",
-    "localName",
-    "localService",
-    "localStorage",
-    "locale",
-    "localeCompare",
-    "location",
-    "locationbar",
-    "lock",
-    "locked",
-    "lockedFile",
-    "locks",
-    "log",
-    "log10",
-    "log1p",
-    "log2",
-    "logicalXDPI",
-    "logicalYDPI",
-    "longDesc",
-    "longitude",
-    "lookupNamespaceURI",
-    "lookupPrefix",
-    "loop",
-    "loopEnd",
-    "loopStart",
-    "looping",
-    "low",
-    "lower",
-    "lowerBound",
-    "lowerOpen",
-    "lowsrc",
-    "m11",
-    "m12",
-    "m13",
-    "m14",
-    "m21",
-    "m22",
-    "m23",
-    "m24",
-    "m31",
-    "m32",
-    "m33",
-    "m34",
-    "m41",
-    "m42",
-    "m43",
-    "m44",
-    "makeXRCompatible",
-    "manifest",
-    "manufacturer",
-    "manufacturerName",
-    "map",
-    "mapping",
-    "margin",
-    "margin-block",
-    "margin-block-end",
-    "margin-block-start",
-    "margin-bottom",
-    "margin-inline",
-    "margin-inline-end",
-    "margin-inline-start",
-    "margin-left",
-    "margin-right",
-    "margin-top",
-    "marginBlock",
-    "marginBlockEnd",
-    "marginBlockStart",
-    "marginBottom",
-    "marginHeight",
-    "marginInline",
-    "marginInlineEnd",
-    "marginInlineStart",
-    "marginLeft",
-    "marginRight",
-    "marginTop",
-    "marginWidth",
-    "mark",
-    "marker",
-    "marker-end",
-    "marker-mid",
-    "marker-offset",
-    "marker-start",
-    "markerEnd",
-    "markerHeight",
-    "markerMid",
-    "markerOffset",
-    "markerStart",
-    "markerUnits",
-    "markerWidth",
-    "marks",
-    "mask",
-    "mask-clip",
-    "mask-composite",
-    "mask-image",
-    "mask-mode",
-    "mask-origin",
-    "mask-position",
-    "mask-position-x",
-    "mask-position-y",
-    "mask-repeat",
-    "mask-size",
-    "mask-type",
-    "maskClip",
-    "maskComposite",
-    "maskContentUnits",
-    "maskImage",
-    "maskMode",
-    "maskOrigin",
-    "maskPosition",
-    "maskPositionX",
-    "maskPositionY",
-    "maskRepeat",
-    "maskSize",
-    "maskType",
-    "maskUnits",
-    "match",
-    "matchAll",
-    "matchMedia",
-    "matchMedium",
-    "matches",
-    "matrix",
-    "matrixTransform",
-    "max",
-    "max-block-size",
-    "max-height",
-    "max-inline-size",
-    "max-width",
-    "maxActions",
-    "maxAlternatives",
-    "maxBlockSize",
-    "maxChannelCount",
-    "maxChannels",
-    "maxConnectionsPerServer",
-    "maxDecibels",
-    "maxDistance",
-    "maxHeight",
-    "maxInlineSize",
-    "maxLayers",
-    "maxLength",
-    "maxMessageSize",
-    "maxPacketLifeTime",
-    "maxRetransmits",
-    "maxTouchPoints",
-    "maxValue",
-    "maxWidth",
-    "measure",
-    "measureText",
-    "media",
-    "mediaCapabilities",
-    "mediaDevices",
-    "mediaElement",
-    "mediaGroup",
-    "mediaKeys",
-    "mediaSession",
-    "mediaStream",
-    "mediaText",
-    "meetOrSlice",
-    "memory",
-    "menubar",
-    "mergeAttributes",
-    "message",
-    "messageClass",
-    "messageHandlers",
-    "messageType",
-    "metaKey",
-    "metadata",
-    "method",
-    "methodDetails",
-    "methodName",
-    "mid",
-    "mimeType",
-    "mimeTypes",
-    "min",
-    "min-block-size",
-    "min-height",
-    "min-inline-size",
-    "min-width",
-    "minBlockSize",
-    "minDecibels",
-    "minHeight",
-    "minInlineSize",
-    "minLength",
-    "minValue",
-    "minWidth",
-    "miterLimit",
-    "mix-blend-mode",
-    "mixBlendMode",
-    "mm",
-    "mobile",
-    "mode",
-    "model",
-    "modify",
-    "mount",
-    "move",
-    "moveBy",
-    "moveEnd",
-    "moveFirst",
-    "moveFocusDown",
-    "moveFocusLeft",
-    "moveFocusRight",
-    "moveFocusUp",
-    "moveNext",
-    "moveRow",
-    "moveStart",
-    "moveTo",
-    "moveToBookmark",
-    "moveToElementText",
-    "moveToPoint",
-    "movementX",
-    "movementY",
-    "mozAdd",
-    "mozAnimationStartTime",
-    "mozAnon",
-    "mozApps",
-    "mozAudioCaptured",
-    "mozAudioChannelType",
-    "mozAutoplayEnabled",
-    "mozCancelAnimationFrame",
-    "mozCancelFullScreen",
-    "mozCancelRequestAnimationFrame",
-    "mozCaptureStream",
-    "mozCaptureStreamUntilEnded",
-    "mozClearDataAt",
-    "mozContact",
-    "mozContacts",
-    "mozCreateFileHandle",
-    "mozCurrentTransform",
-    "mozCurrentTransformInverse",
-    "mozCursor",
-    "mozDash",
-    "mozDashOffset",
-    "mozDecodedFrames",
-    "mozExitPointerLock",
-    "mozFillRule",
-    "mozFragmentEnd",
-    "mozFrameDelay",
-    "mozFullScreen",
-    "mozFullScreenElement",
-    "mozFullScreenEnabled",
-    "mozGetAll",
-    "mozGetAllKeys",
-    "mozGetAsFile",
-    "mozGetDataAt",
-    "mozGetMetadata",
-    "mozGetUserMedia",
-    "mozHasAudio",
-    "mozHasItem",
-    "mozHidden",
-    "mozImageSmoothingEnabled",
-    "mozIndexedDB",
-    "mozInnerScreenX",
-    "mozInnerScreenY",
-    "mozInputSource",
-    "mozIsTextField",
-    "mozItem",
-    "mozItemCount",
-    "mozItems",
-    "mozLength",
-    "mozLockOrientation",
-    "mozMatchesSelector",
-    "mozMovementX",
-    "mozMovementY",
-    "mozOpaque",
-    "mozOrientation",
-    "mozPaintCount",
-    "mozPaintedFrames",
-    "mozParsedFrames",
-    "mozPay",
-    "mozPointerLockElement",
-    "mozPresentedFrames",
-    "mozPreservesPitch",
-    "mozPressure",
-    "mozPrintCallback",
-    "mozRTCIceCandidate",
-    "mozRTCPeerConnection",
-    "mozRTCSessionDescription",
-    "mozRemove",
-    "mozRequestAnimationFrame",
-    "mozRequestFullScreen",
-    "mozRequestPointerLock",
-    "mozSetDataAt",
-    "mozSetImageElement",
-    "mozSourceNode",
-    "mozSrcObject",
-    "mozSystem",
-    "mozTCPSocket",
-    "mozTextStyle",
-    "mozTypesAt",
-    "mozUnlockOrientation",
-    "mozUserCancelled",
-    "mozVisibilityState",
-    "ms",
-    "msAnimation",
-    "msAnimationDelay",
-    "msAnimationDirection",
-    "msAnimationDuration",
-    "msAnimationFillMode",
-    "msAnimationIterationCount",
-    "msAnimationName",
-    "msAnimationPlayState",
-    "msAnimationStartTime",
-    "msAnimationTimingFunction",
-    "msBackfaceVisibility",
-    "msBlockProgression",
-    "msCSSOMElementFloatMetrics",
-    "msCaching",
-    "msCachingEnabled",
-    "msCancelRequestAnimationFrame",
-    "msCapsLockWarningOff",
-    "msClearImmediate",
-    "msClose",
-    "msContentZoomChaining",
-    "msContentZoomFactor",
-    "msContentZoomLimit",
-    "msContentZoomLimitMax",
-    "msContentZoomLimitMin",
-    "msContentZoomSnap",
-    "msContentZoomSnapPoints",
-    "msContentZoomSnapType",
-    "msContentZooming",
-    "msConvertURL",
-    "msCrypto",
-    "msDoNotTrack",
-    "msElementsFromPoint",
-    "msElementsFromRect",
-    "msExitFullscreen",
-    "msExtendedCode",
-    "msFillRule",
-    "msFirstPaint",
-    "msFlex",
-    "msFlexAlign",
-    "msFlexDirection",
-    "msFlexFlow",
-    "msFlexItemAlign",
-    "msFlexLinePack",
-    "msFlexNegative",
-    "msFlexOrder",
-    "msFlexPack",
-    "msFlexPositive",
-    "msFlexPreferredSize",
-    "msFlexWrap",
-    "msFlowFrom",
-    "msFlowInto",
-    "msFontFeatureSettings",
-    "msFullscreenElement",
-    "msFullscreenEnabled",
-    "msGetInputContext",
-    "msGetRegionContent",
-    "msGetUntransformedBounds",
-    "msGraphicsTrustStatus",
-    "msGridColumn",
-    "msGridColumnAlign",
-    "msGridColumnSpan",
-    "msGridColumns",
-    "msGridRow",
-    "msGridRowAlign",
-    "msGridRowSpan",
-    "msGridRows",
-    "msHidden",
-    "msHighContrastAdjust",
-    "msHyphenateLimitChars",
-    "msHyphenateLimitLines",
-    "msHyphenateLimitZone",
-    "msHyphens",
-    "msImageSmoothingEnabled",
-    "msImeAlign",
-    "msIndexedDB",
-    "msInterpolationMode",
-    "msIsStaticHTML",
-    "msKeySystem",
-    "msKeys",
-    "msLaunchUri",
-    "msLockOrientation",
-    "msManipulationViewsEnabled",
-    "msMatchMedia",
-    "msMatchesSelector",
-    "msMaxTouchPoints",
-    "msOrientation",
-    "msOverflowStyle",
-    "msPerspective",
-    "msPerspectiveOrigin",
-    "msPlayToDisabled",
-    "msPlayToPreferredSourceUri",
-    "msPlayToPrimary",
-    "msPointerEnabled",
-    "msRegionOverflow",
-    "msReleasePointerCapture",
-    "msRequestAnimationFrame",
-    "msRequestFullscreen",
-    "msSaveBlob",
-    "msSaveOrOpenBlob",
-    "msScrollChaining",
-    "msScrollLimit",
-    "msScrollLimitXMax",
-    "msScrollLimitXMin",
-    "msScrollLimitYMax",
-    "msScrollLimitYMin",
-    "msScrollRails",
-    "msScrollSnapPointsX",
-    "msScrollSnapPointsY",
-    "msScrollSnapType",
-    "msScrollSnapX",
-    "msScrollSnapY",
-    "msScrollTranslation",
-    "msSetImmediate",
-    "msSetMediaKeys",
-    "msSetPointerCapture",
-    "msTextCombineHorizontal",
-    "msTextSizeAdjust",
-    "msToBlob",
-    "msTouchAction",
-    "msTouchSelect",
-    "msTraceAsyncCallbackCompleted",
-    "msTraceAsyncCallbackStarting",
-    "msTraceAsyncOperationCompleted",
-    "msTraceAsyncOperationStarting",
-    "msTransform",
-    "msTransformOrigin",
-    "msTransformStyle",
-    "msTransition",
-    "msTransitionDelay",
-    "msTransitionDuration",
-    "msTransitionProperty",
-    "msTransitionTimingFunction",
-    "msUnlockOrientation",
-    "msUpdateAsyncCallbackRelation",
-    "msUserSelect",
-    "msVisibilityState",
-    "msWrapFlow",
-    "msWrapMargin",
-    "msWrapThrough",
-    "msWriteProfilerMark",
-    "msZoom",
-    "msZoomTo",
-    "mt",
-    "mul",
-    "multiEntry",
-    "multiSelectionObj",
-    "multiline",
-    "multiple",
-    "multiply",
-    "multiplySelf",
-    "mutableFile",
-    "muted",
-    "n",
-    "name",
-    "nameProp",
-    "namedItem",
-    "namedRecordset",
-    "names",
-    "namespaceURI",
-    "namespaces",
-    "naturalHeight",
-    "naturalWidth",
-    "navigate",
-    "navigation",
-    "navigationMode",
-    "navigationPreload",
-    "navigationStart",
-    "navigator",
-    "near",
-    "nearestViewportElement",
-    "negative",
-    "negotiated",
-    "netscape",
-    "networkState",
-    "newScale",
-    "newTranslate",
-    "newURL",
-    "newValue",
-    "newValueSpecifiedUnits",
-    "newVersion",
-    "newhome",
-    "next",
-    "nextElementSibling",
-    "nextHopProtocol",
-    "nextNode",
-    "nextPage",
-    "nextSibling",
-    "nickname",
-    "noHref",
-    "noModule",
-    "noResize",
-    "noShade",
-    "noValidate",
-    "noWrap",
-    "node",
-    "nodeName",
-    "nodeType",
-    "nodeValue",
-    "nonce",
-    "normalize",
-    "normalizedPathSegList",
-    "notationName",
-    "notations",
-    "note",
-    "noteGrainOn",
-    "noteOff",
-    "noteOn",
-    "notify",
-    "now",
-    "numOctaves",
-    "number",
-    "numberOfChannels",
-    "numberOfInputs",
-    "numberOfItems",
-    "numberOfOutputs",
-    "numberValue",
-    "oMatchesSelector",
-    "object",
-    "object-fit",
-    "object-position",
-    "objectFit",
-    "objectPosition",
-    "objectStore",
-    "objectStoreNames",
-    "objectType",
-    "observe",
-    "of",
-    "offscreenBuffering",
-    "offset",
-    "offset-anchor",
-    "offset-distance",
-    "offset-path",
-    "offset-rotate",
-    "offsetAnchor",
-    "offsetDistance",
-    "offsetHeight",
-    "offsetLeft",
-    "offsetNode",
-    "offsetParent",
-    "offsetPath",
-    "offsetRotate",
-    "offsetTop",
-    "offsetWidth",
-    "offsetX",
-    "offsetY",
-    "ok",
-    "oldURL",
-    "oldValue",
-    "oldVersion",
-    "olderShadowRoot",
-    "onLine",
-    "onabort",
-    "onabsolutedeviceorientation",
-    "onactivate",
-    "onactive",
-    "onaddsourcebuffer",
-    "onaddstream",
-    "onaddtrack",
-    "onafterprint",
-    "onafterscriptexecute",
-    "onafterupdate",
-    "onanimationcancel",
-    "onanimationend",
-    "onanimationiteration",
-    "onanimationstart",
-    "onappinstalled",
-    "onaudioend",
-    "onaudioprocess",
-    "onaudiostart",
-    "onautocomplete",
-    "onautocompleteerror",
-    "onauxclick",
-    "onbeforeactivate",
-    "onbeforecopy",
-    "onbeforecut",
-    "onbeforedeactivate",
-    "onbeforeeditfocus",
-    "onbeforeinstallprompt",
-    "onbeforepaste",
-    "onbeforeprint",
-    "onbeforescriptexecute",
-    "onbeforeunload",
-    "onbeforeupdate",
-    "onbeforexrselect",
-    "onbegin",
-    "onblocked",
-    "onblur",
-    "onbounce",
-    "onboundary",
-    "onbufferedamountlow",
-    "oncached",
-    "oncancel",
-    "oncandidatewindowhide",
-    "oncandidatewindowshow",
-    "oncandidatewindowupdate",
-    "oncanplay",
-    "oncanplaythrough",
-    "once",
-    "oncellchange",
-    "onchange",
-    "oncharacteristicvaluechanged",
-    "onchargingchange",
-    "onchargingtimechange",
-    "onchecking",
-    "onclick",
-    "onclose",
-    "onclosing",
-    "oncompassneedscalibration",
-    "oncomplete",
-    "onconnect",
-    "onconnecting",
-    "onconnectionavailable",
-    "onconnectionstatechange",
-    "oncontextmenu",
-    "oncontrollerchange",
-    "oncontrolselect",
-    "oncopy",
-    "oncuechange",
-    "oncut",
-    "ondataavailable",
-    "ondatachannel",
-    "ondatasetchanged",
-    "ondatasetcomplete",
-    "ondblclick",
-    "ondeactivate",
-    "ondevicechange",
-    "ondevicelight",
-    "ondevicemotion",
-    "ondeviceorientation",
-    "ondeviceorientationabsolute",
-    "ondeviceproximity",
-    "ondischargingtimechange",
-    "ondisconnect",
-    "ondisplay",
-    "ondownloading",
-    "ondrag",
-    "ondragend",
-    "ondragenter",
-    "ondragexit",
-    "ondragleave",
-    "ondragover",
-    "ondragstart",
-    "ondrop",
-    "ondurationchange",
-    "onemptied",
-    "onencrypted",
-    "onend",
-    "onended",
-    "onenter",
-    "onenterpictureinpicture",
-    "onerror",
-    "onerrorupdate",
-    "onexit",
-    "onfilterchange",
-    "onfinish",
-    "onfocus",
-    "onfocusin",
-    "onfocusout",
-    "onformdata",
-    "onfreeze",
-    "onfullscreenchange",
-    "onfullscreenerror",
-    "ongatheringstatechange",
-    "ongattserverdisconnected",
-    "ongesturechange",
-    "ongestureend",
-    "ongesturestart",
-    "ongotpointercapture",
-    "onhashchange",
-    "onhelp",
-    "onicecandidate",
-    "onicecandidateerror",
-    "oniceconnectionstatechange",
-    "onicegatheringstatechange",
-    "oninactive",
-    "oninput",
-    "oninputsourceschange",
-    "oninvalid",
-    "onkeydown",
-    "onkeypress",
-    "onkeystatuseschange",
-    "onkeyup",
-    "onlanguagechange",
-    "onlayoutcomplete",
-    "onleavepictureinpicture",
-    "onlevelchange",
-    "onload",
-    "onloadeddata",
-    "onloadedmetadata",
-    "onloadend",
-    "onloading",
-    "onloadingdone",
-    "onloadingerror",
-    "onloadstart",
-    "onlosecapture",
-    "onlostpointercapture",
-    "only",
-    "onmark",
-    "onmessage",
-    "onmessageerror",
-    "onmidimessage",
-    "onmousedown",
-    "onmouseenter",
-    "onmouseleave",
-    "onmousemove",
-    "onmouseout",
-    "onmouseover",
-    "onmouseup",
-    "onmousewheel",
-    "onmove",
-    "onmoveend",
-    "onmovestart",
-    "onmozfullscreenchange",
-    "onmozfullscreenerror",
-    "onmozorientationchange",
-    "onmozpointerlockchange",
-    "onmozpointerlockerror",
-    "onmscontentzoom",
-    "onmsfullscreenchange",
-    "onmsfullscreenerror",
-    "onmsgesturechange",
-    "onmsgesturedoubletap",
-    "onmsgestureend",
-    "onmsgesturehold",
-    "onmsgesturestart",
-    "onmsgesturetap",
-    "onmsgotpointercapture",
-    "onmsinertiastart",
-    "onmslostpointercapture",
-    "onmsmanipulationstatechanged",
-    "onmsneedkey",
-    "onmsorientationchange",
-    "onmspointercancel",
-    "onmspointerdown",
-    "onmspointerenter",
-    "onmspointerhover",
-    "onmspointerleave",
-    "onmspointermove",
-    "onmspointerout",
-    "onmspointerover",
-    "onmspointerup",
-    "onmssitemodejumplistitemremoved",
-    "onmsthumbnailclick",
-    "onmute",
-    "onnegotiationneeded",
-    "onnomatch",
-    "onnoupdate",
-    "onobsolete",
-    "onoffline",
-    "ononline",
-    "onopen",
-    "onorientationchange",
-    "onpagechange",
-    "onpagehide",
-    "onpageshow",
-    "onpaste",
-    "onpause",
-    "onpayerdetailchange",
-    "onpaymentmethodchange",
-    "onplay",
-    "onplaying",
-    "onpluginstreamstart",
-    "onpointercancel",
-    "onpointerdown",
-    "onpointerenter",
-    "onpointerleave",
-    "onpointerlockchange",
-    "onpointerlockerror",
-    "onpointermove",
-    "onpointerout",
-    "onpointerover",
-    "onpointerrawupdate",
-    "onpointerup",
-    "onpopstate",
-    "onprocessorerror",
-    "onprogress",
-    "onpropertychange",
-    "onratechange",
-    "onreading",
-    "onreadystatechange",
-    "onrejectionhandled",
-    "onrelease",
-    "onremove",
-    "onremovesourcebuffer",
-    "onremovestream",
-    "onremovetrack",
-    "onrepeat",
-    "onreset",
-    "onresize",
-    "onresizeend",
-    "onresizestart",
-    "onresourcetimingbufferfull",
-    "onresult",
-    "onresume",
-    "onrowenter",
-    "onrowexit",
-    "onrowsdelete",
-    "onrowsinserted",
-    "onscroll",
-    "onsearch",
-    "onsecuritypolicyviolation",
-    "onseeked",
-    "onseeking",
-    "onselect",
-    "onselectedcandidatepairchange",
-    "onselectend",
-    "onselectionchange",
-    "onselectstart",
-    "onshippingaddresschange",
-    "onshippingoptionchange",
-    "onshow",
-    "onsignalingstatechange",
-    "onsoundend",
-    "onsoundstart",
-    "onsourceclose",
-    "onsourceclosed",
-    "onsourceended",
-    "onsourceopen",
-    "onspeechend",
-    "onspeechstart",
-    "onsqueeze",
-    "onsqueezeend",
-    "onsqueezestart",
-    "onstalled",
-    "onstart",
-    "onstatechange",
-    "onstop",
-    "onstorage",
-    "onstoragecommit",
-    "onsubmit",
-    "onsuccess",
-    "onsuspend",
-    "onterminate",
-    "ontextinput",
-    "ontimeout",
-    "ontimeupdate",
-    "ontoggle",
-    "ontonechange",
-    "ontouchcancel",
-    "ontouchend",
-    "ontouchmove",
-    "ontouchstart",
-    "ontrack",
-    "ontransitioncancel",
-    "ontransitionend",
-    "ontransitionrun",
-    "ontransitionstart",
-    "onunhandledrejection",
-    "onunload",
-    "onunmute",
-    "onupdate",
-    "onupdateend",
-    "onupdatefound",
-    "onupdateready",
-    "onupdatestart",
-    "onupgradeneeded",
-    "onuserproximity",
-    "onversionchange",
-    "onvisibilitychange",
-    "onvoiceschanged",
-    "onvolumechange",
-    "onvrdisplayactivate",
-    "onvrdisplayconnect",
-    "onvrdisplaydeactivate",
-    "onvrdisplaydisconnect",
-    "onvrdisplaypresentchange",
-    "onwaiting",
-    "onwaitingforkey",
-    "onwarning",
-    "onwebkitanimationend",
-    "onwebkitanimationiteration",
-    "onwebkitanimationstart",
-    "onwebkitcurrentplaybacktargetiswirelesschanged",
-    "onwebkitfullscreenchange",
-    "onwebkitfullscreenerror",
-    "onwebkitkeyadded",
-    "onwebkitkeyerror",
-    "onwebkitkeymessage",
-    "onwebkitneedkey",
-    "onwebkitorientationchange",
-    "onwebkitplaybacktargetavailabilitychanged",
-    "onwebkitpointerlockchange",
-    "onwebkitpointerlockerror",
-    "onwebkitresourcetimingbufferfull",
-    "onwebkittransitionend",
-    "onwheel",
-    "onzoom",
-    "opacity",
-    "open",
-    "openCursor",
-    "openDatabase",
-    "openKeyCursor",
-    "opened",
-    "opener",
-    "opera",
-    "operationType",
-    "operator",
-    "opr",
-    "optimum",
-    "options",
-    "or",
-    "order",
-    "orderX",
-    "orderY",
-    "ordered",
-    "org",
-    "organization",
-    "orient",
-    "orientAngle",
-    "orientType",
-    "orientation",
-    "orientationX",
-    "orientationY",
-    "orientationZ",
-    "origin",
-    "originalPolicy",
-    "originalTarget",
-    "orphans",
-    "oscpu",
-    "outerHTML",
-    "outerHeight",
-    "outerText",
-    "outerWidth",
-    "outline",
-    "outline-color",
-    "outline-offset",
-    "outline-style",
-    "outline-width",
-    "outlineColor",
-    "outlineOffset",
-    "outlineStyle",
-    "outlineWidth",
-    "outputBuffer",
-    "outputChannelCount",
-    "outputLatency",
-    "outputs",
-    "overflow",
-    "overflow-anchor",
-    "overflow-block",
-    "overflow-inline",
-    "overflow-wrap",
-    "overflow-x",
-    "overflow-y",
-    "overflowAnchor",
-    "overflowBlock",
-    "overflowInline",
-    "overflowWrap",
-    "overflowX",
-    "overflowY",
-    "overrideMimeType",
-    "oversample",
-    "overscroll-behavior",
-    "overscroll-behavior-block",
-    "overscroll-behavior-inline",
-    "overscroll-behavior-x",
-    "overscroll-behavior-y",
-    "overscrollBehavior",
-    "overscrollBehaviorBlock",
-    "overscrollBehaviorInline",
-    "overscrollBehaviorX",
-    "overscrollBehaviorY",
-    "ownKeys",
-    "ownerDocument",
-    "ownerElement",
-    "ownerNode",
-    "ownerRule",
-    "ownerSVGElement",
-    "owningElement",
-    "p1",
-    "p2",
-    "p3",
-    "p4",
-    "packetSize",
-    "packets",
-    "pad",
-    "padEnd",
-    "padStart",
-    "padding",
-    "padding-block",
-    "padding-block-end",
-    "padding-block-start",
-    "padding-bottom",
-    "padding-inline",
-    "padding-inline-end",
-    "padding-inline-start",
-    "padding-left",
-    "padding-right",
-    "padding-top",
-    "paddingBlock",
-    "paddingBlockEnd",
-    "paddingBlockStart",
-    "paddingBottom",
-    "paddingInline",
-    "paddingInlineEnd",
-    "paddingInlineStart",
-    "paddingLeft",
-    "paddingRight",
-    "paddingTop",
-    "page",
-    "page-break-after",
-    "page-break-before",
-    "page-break-inside",
-    "pageBreakAfter",
-    "pageBreakBefore",
-    "pageBreakInside",
-    "pageCount",
-    "pageLeft",
-    "pageTop",
-    "pageX",
-    "pageXOffset",
-    "pageY",
-    "pageYOffset",
-    "pages",
-    "paint-order",
-    "paintOrder",
-    "paintRequests",
-    "paintType",
-    "paintWorklet",
-    "palette",
-    "pan",
-    "panningModel",
-    "parameterData",
-    "parameters",
-    "parent",
-    "parentElement",
-    "parentNode",
-    "parentRule",
-    "parentStyleSheet",
-    "parentTextEdit",
-    "parentWindow",
-    "parse",
-    "parseAll",
-    "parseFloat",
-    "parseFromString",
-    "parseInt",
-    "part",
-    "participants",
-    "passive",
-    "password",
-    "pasteHTML",
-    "path",
-    "pathLength",
-    "pathSegList",
-    "pathSegType",
-    "pathSegTypeAsLetter",
-    "pathname",
-    "pattern",
-    "patternContentUnits",
-    "patternMismatch",
-    "patternTransform",
-    "patternUnits",
-    "pause",
-    "pauseAnimations",
-    "pauseOnExit",
-    "pauseProfilers",
-    "pauseTransformFeedback",
-    "paused",
-    "payerEmail",
-    "payerName",
-    "payerPhone",
-    "paymentManager",
-    "pc",
-    "peerIdentity",
-    "pending",
-    "pendingLocalDescription",
-    "pendingRemoteDescription",
-    "percent",
-    "performance",
-    "periodicSync",
-    "permission",
-    "permissionState",
-    "permissions",
-    "persist",
-    "persisted",
-    "personalbar",
-    "perspective",
-    "perspective-origin",
-    "perspectiveOrigin",
-    "phone",
-    "phoneticFamilyName",
-    "phoneticGivenName",
-    "photo",
-    "pictureInPictureElement",
-    "pictureInPictureEnabled",
-    "pictureInPictureWindow",
-    "ping",
-    "pipeThrough",
-    "pipeTo",
-    "pitch",
-    "pixelBottom",
-    "pixelDepth",
-    "pixelHeight",
-    "pixelLeft",
-    "pixelRight",
-    "pixelStorei",
-    "pixelTop",
-    "pixelUnitToMillimeterX",
-    "pixelUnitToMillimeterY",
-    "pixelWidth",
-    "place-content",
-    "place-items",
-    "place-self",
-    "placeContent",
-    "placeItems",
-    "placeSelf",
-    "placeholder",
-    "platformVersion",
-    "platform",
-    "platforms",
-    "play",
-    "playEffect",
-    "playState",
-    "playbackRate",
-    "playbackState",
-    "playbackTime",
-    "played",
-    "playoutDelayHint",
-    "playsInline",
-    "plugins",
-    "pluginspage",
-    "pname",
-    "pointer-events",
-    "pointerBeforeReferenceNode",
-    "pointerEnabled",
-    "pointerEvents",
-    "pointerId",
-    "pointerLockElement",
-    "pointerType",
-    "points",
-    "pointsAtX",
-    "pointsAtY",
-    "pointsAtZ",
-    "polygonOffset",
-    "pop",
-    "populateMatrix",
-    "popupWindowFeatures",
-    "popupWindowName",
-    "popupWindowURI",
-    "port",
-    "port1",
-    "port2",
-    "ports",
-    "posBottom",
-    "posHeight",
-    "posLeft",
-    "posRight",
-    "posTop",
-    "posWidth",
-    "pose",
-    "position",
-    "positionAlign",
-    "positionX",
-    "positionY",
-    "positionZ",
-    "postError",
-    "postMessage",
-    "postalCode",
-    "poster",
-    "pow",
-    "powerEfficient",
-    "powerOff",
-    "preMultiplySelf",
-    "precision",
-    "preferredStyleSheetSet",
-    "preferredStylesheetSet",
-    "prefix",
-    "preload",
-    "prepend",
-    "presentation",
-    "preserveAlpha",
-    "preserveAspectRatio",
-    "preserveAspectRatioString",
-    "pressed",
-    "pressure",
-    "prevValue",
-    "preventDefault",
-    "preventExtensions",
-    "preventSilentAccess",
-    "previousElementSibling",
-    "previousNode",
-    "previousPage",
-    "previousRect",
-    "previousScale",
-    "previousSibling",
-    "previousTranslate",
-    "primaryKey",
-    "primitiveType",
-    "primitiveUnits",
-    "principals",
-    "print",
-    "priority",
-    "privateKey",
-    "probablySupportsContext",
-    "process",
-    "processIceMessage",
-    "processingEnd",
-    "processingStart",
-    "processorOptions",
-    "product",
-    "productId",
-    "productName",
-    "productSub",
-    "profile",
-    "profileEnd",
-    "profiles",
-    "projectionMatrix",
-    "promise",
-    "prompt",
-    "properties",
-    "propertyIsEnumerable",
-    "propertyName",
-    "protocol",
-    "protocolLong",
-    "prototype",
-    "provider",
-    "pseudoClass",
-    "pseudoElement",
-    "pt",
-    "publicId",
-    "publicKey",
-    "published",
-    "pulse",
-    "push",
-    "pushManager",
-    "pushNotification",
-    "pushState",
-    "put",
-    "putImageData",
-    "px",
-    "quadraticCurveTo",
-    "qualifier",
-    "quaternion",
-    "query",
-    "queryCommandEnabled",
-    "queryCommandIndeterm",
-    "queryCommandState",
-    "queryCommandSupported",
-    "queryCommandText",
-    "queryCommandValue",
-    "querySelector",
-    "querySelectorAll",
-    "queueMicrotask",
-    "quote",
-    "quotes",
-    "r",
-    "r1",
-    "r2",
-    "race",
-    "rad",
-    "radiogroup",
-    "radiusX",
-    "radiusY",
-    "random",
-    "range",
-    "rangeCount",
-    "rangeMax",
-    "rangeMin",
-    "rangeOffset",
-    "rangeOverflow",
-    "rangeParent",
-    "rangeUnderflow",
-    "rate",
-    "ratio",
-    "raw",
-    "rawId",
-    "read",
-    "readAsArrayBuffer",
-    "readAsBinaryString",
-    "readAsBlob",
-    "readAsDataURL",
-    "readAsText",
-    "readBuffer",
-    "readEntries",
-    "readOnly",
-    "readPixels",
-    "readReportRequested",
-    "readText",
-    "readValue",
-    "readable",
-    "ready",
-    "readyState",
-    "reason",
-    "reboot",
-    "receivedAlert",
-    "receiver",
-    "receivers",
-    "recipient",
-    "reconnect",
-    "recordNumber",
-    "recordsAvailable",
-    "recordset",
-    "rect",
-    "red",
-    "redEyeReduction",
-    "redirect",
-    "redirectCount",
-    "redirectEnd",
-    "redirectStart",
-    "redirected",
-    "reduce",
-    "reduceRight",
-    "reduction",
-    "refDistance",
-    "refX",
-    "refY",
-    "referenceNode",
-    "referenceSpace",
-    "referrer",
-    "referrerPolicy",
-    "refresh",
-    "region",
-    "regionAnchorX",
-    "regionAnchorY",
-    "regionId",
-    "regions",
-    "register",
-    "registerContentHandler",
-    "registerElement",
-    "registerProperty",
-    "registerProtocolHandler",
-    "reject",
-    "rel",
-    "relList",
-    "relatedAddress",
-    "relatedNode",
-    "relatedPort",
-    "relatedTarget",
-    "release",
-    "releaseCapture",
-    "releaseEvents",
-    "releaseInterface",
-    "releaseLock",
-    "releasePointerCapture",
-    "releaseShaderCompiler",
-    "reliable",
-    "reliableWrite",
-    "reload",
-    "rem",
-    "remainingSpace",
-    "remote",
-    "remoteDescription",
-    "remove",
-    "removeAllRanges",
-    "removeAttribute",
-    "removeAttributeNS",
-    "removeAttributeNode",
-    "removeBehavior",
-    "removeChild",
-    "removeCue",
-    "removeEventListener",
-    "removeFilter",
-    "removeImport",
-    "removeItem",
-    "removeListener",
-    "removeNamedItem",
-    "removeNamedItemNS",
-    "removeNode",
-    "removeParameter",
-    "removeProperty",
-    "removeRange",
-    "removeRegion",
-    "removeRule",
-    "removeSiteSpecificTrackingException",
-    "removeSourceBuffer",
-    "removeStream",
-    "removeTrack",
-    "removeVariable",
-    "removeWakeLockListener",
-    "removeWebWideTrackingException",
-    "removed",
-    "removedNodes",
-    "renderHeight",
-    "renderState",
-    "renderTime",
-    "renderWidth",
-    "renderbufferStorage",
-    "renderbufferStorageMultisample",
-    "renderedBuffer",
-    "renderingMode",
-    "renotify",
-    "repeat",
-    "replace",
-    "replaceAdjacentText",
-    "replaceAll",
-    "replaceChild",
-    "replaceChildren",
-    "replaceData",
-    "replaceId",
-    "replaceItem",
-    "replaceNode",
-    "replaceState",
-    "replaceSync",
-    "replaceTrack",
-    "replaceWholeText",
-    "replaceWith",
-    "reportValidity",
-    "request",
-    "requestAnimationFrame",
-    "requestAutocomplete",
-    "requestData",
-    "requestDevice",
-    "requestFrame",
-    "requestFullscreen",
-    "requestHitTestSource",
-    "requestHitTestSourceForTransientInput",
-    "requestId",
-    "requestIdleCallback",
-    "requestMIDIAccess",
-    "requestMediaKeySystemAccess",
-    "requestPermission",
-    "requestPictureInPicture",
-    "requestPointerLock",
-    "requestPresent",
-    "requestReferenceSpace",
-    "requestSession",
-    "requestStart",
-    "requestStorageAccess",
-    "requestSubmit",
-    "requestVideoFrameCallback",
-    "requestingWindow",
-    "requireInteraction",
-    "required",
-    "requiredExtensions",
-    "requiredFeatures",
-    "reset",
-    "resetPose",
-    "resetTransform",
-    "resize",
-    "resizeBy",
-    "resizeTo",
-    "resolve",
-    "response",
-    "responseBody",
-    "responseEnd",
-    "responseReady",
-    "responseStart",
-    "responseText",
-    "responseType",
-    "responseURL",
-    "responseXML",
-    "restartIce",
-    "restore",
-    "result",
-    "resultIndex",
-    "resultType",
-    "results",
-    "resume",
-    "resumeProfilers",
-    "resumeTransformFeedback",
-    "retry",
-    "returnValue",
-    "rev",
-    "reverse",
-    "reversed",
-    "revocable",
-    "revokeObjectURL",
-    "rgbColor",
-    "right",
-    "rightContext",
-    "rightDegrees",
-    "rightMargin",
-    "rightProjectionMatrix",
-    "rightViewMatrix",
-    "role",
-    "rolloffFactor",
-    "root",
-    "rootBounds",
-    "rootElement",
-    "rootMargin",
-    "rotate",
-    "rotateAxisAngle",
-    "rotateAxisAngleSelf",
-    "rotateFromVector",
-    "rotateFromVectorSelf",
-    "rotateSelf",
-    "rotation",
-    "rotationAngle",
-    "rotationRate",
-    "round",
-    "row-gap",
-    "rowGap",
-    "rowIndex",
-    "rowSpan",
-    "rows",
-    "rtcpTransport",
-    "rtt",
-    "ruby-align",
-    "ruby-position",
-    "rubyAlign",
-    "rubyOverhang",
-    "rubyPosition",
-    "rules",
-    "runtime",
-    "runtimeStyle",
-    "rx",
-    "ry",
-    "s",
-    "safari",
-    "sample",
-    "sampleCoverage",
-    "sampleRate",
-    "samplerParameterf",
-    "samplerParameteri",
-    "sandbox",
-    "save",
-    "saveData",
-    "scale",
-    "scale3d",
-    "scale3dSelf",
-    "scaleNonUniform",
-    "scaleNonUniformSelf",
-    "scaleSelf",
-    "scheme",
-    "scissor",
-    "scope",
-    "scopeName",
-    "scoped",
-    "screen",
-    "screenBrightness",
-    "screenEnabled",
-    "screenLeft",
-    "screenPixelToMillimeterX",
-    "screenPixelToMillimeterY",
-    "screenTop",
-    "screenX",
-    "screenY",
-    "scriptURL",
-    "scripts",
-    "scroll",
-    "scroll-behavior",
-    "scroll-margin",
-    "scroll-margin-block",
-    "scroll-margin-block-end",
-    "scroll-margin-block-start",
-    "scroll-margin-bottom",
-    "scroll-margin-inline",
-    "scroll-margin-inline-end",
-    "scroll-margin-inline-start",
-    "scroll-margin-left",
-    "scroll-margin-right",
-    "scroll-margin-top",
-    "scroll-padding",
-    "scroll-padding-block",
-    "scroll-padding-block-end",
-    "scroll-padding-block-start",
-    "scroll-padding-bottom",
-    "scroll-padding-inline",
-    "scroll-padding-inline-end",
-    "scroll-padding-inline-start",
-    "scroll-padding-left",
-    "scroll-padding-right",
-    "scroll-padding-top",
-    "scroll-snap-align",
-    "scroll-snap-type",
-    "scrollAmount",
-    "scrollBehavior",
-    "scrollBy",
-    "scrollByLines",
-    "scrollByPages",
-    "scrollDelay",
-    "scrollHeight",
-    "scrollIntoView",
-    "scrollIntoViewIfNeeded",
-    "scrollLeft",
-    "scrollLeftMax",
-    "scrollMargin",
-    "scrollMarginBlock",
-    "scrollMarginBlockEnd",
-    "scrollMarginBlockStart",
-    "scrollMarginBottom",
-    "scrollMarginInline",
-    "scrollMarginInlineEnd",
-    "scrollMarginInlineStart",
-    "scrollMarginLeft",
-    "scrollMarginRight",
-    "scrollMarginTop",
-    "scrollMaxX",
-    "scrollMaxY",
-    "scrollPadding",
-    "scrollPaddingBlock",
-    "scrollPaddingBlockEnd",
-    "scrollPaddingBlockStart",
-    "scrollPaddingBottom",
-    "scrollPaddingInline",
-    "scrollPaddingInlineEnd",
-    "scrollPaddingInlineStart",
-    "scrollPaddingLeft",
-    "scrollPaddingRight",
-    "scrollPaddingTop",
-    "scrollRestoration",
-    "scrollSnapAlign",
-    "scrollSnapType",
-    "scrollTo",
-    "scrollTop",
-    "scrollTopMax",
-    "scrollWidth",
-    "scrollX",
-    "scrollY",
-    "scrollbar-color",
-    "scrollbar-width",
-    "scrollbar3dLightColor",
-    "scrollbarArrowColor",
-    "scrollbarBaseColor",
-    "scrollbarColor",
-    "scrollbarDarkShadowColor",
-    "scrollbarFaceColor",
-    "scrollbarHighlightColor",
-    "scrollbarShadowColor",
-    "scrollbarTrackColor",
-    "scrollbarWidth",
-    "scrollbars",
-    "scrolling",
-    "scrollingElement",
-    "sctp",
-    "sctpCauseCode",
-    "sdp",
-    "sdpLineNumber",
-    "sdpMLineIndex",
-    "sdpMid",
-    "seal",
-    "search",
-    "searchBox",
-    "searchBoxJavaBridge_",
-    "searchParams",
-    "sectionRowIndex",
-    "secureConnectionStart",
-    "security",
-    "seed",
-    "seekToNextFrame",
-    "seekable",
-    "seeking",
-    "select",
-    "selectAllChildren",
-    "selectAlternateInterface",
-    "selectConfiguration",
-    "selectNode",
-    "selectNodeContents",
-    "selectNodes",
-    "selectSingleNode",
-    "selectSubString",
-    "selected",
-    "selectedIndex",
-    "selectedOptions",
-    "selectedStyleSheetSet",
-    "selectedStylesheetSet",
-    "selection",
-    "selectionDirection",
-    "selectionEnd",
-    "selectionStart",
-    "selector",
-    "selectorText",
-    "self",
-    "send",
-    "sendAsBinary",
-    "sendBeacon",
-    "sender",
-    "sentAlert",
-    "sentTimestamp",
-    "separator",
-    "serialNumber",
-    "serializeToString",
-    "serverTiming",
-    "service",
-    "serviceWorker",
-    "session",
-    "sessionId",
-    "sessionStorage",
-    "set",
-    "setActionHandler",
-    "setActive",
-    "setAlpha",
-    "setAppBadge",
-    "setAttribute",
-    "setAttributeNS",
-    "setAttributeNode",
-    "setAttributeNodeNS",
-    "setBaseAndExtent",
-    "setBigInt64",
-    "setBigUint64",
-    "setBingCurrentSearchDefault",
-    "setCapture",
-    "setCodecPreferences",
-    "setColor",
-    "setCompositeOperation",
-    "setConfiguration",
-    "setCurrentTime",
-    "setCustomValidity",
-    "setData",
-    "setDate",
-    "setDragImage",
-    "setEnd",
-    "setEndAfter",
-    "setEndBefore",
-    "setEndPoint",
-    "setFillColor",
-    "setFilterRes",
-    "setFloat32",
-    "setFloat64",
-    "setFloatValue",
-    "setFormValue",
-    "setFullYear",
-    "setHeaderValue",
-    "setHours",
-    "setIdentityProvider",
-    "setImmediate",
-    "setInt16",
-    "setInt32",
-    "setInt8",
-    "setInterval",
-    "setItem",
-    "setKeyframes",
-    "setLineCap",
-    "setLineDash",
-    "setLineJoin",
-    "setLineWidth",
-    "setLiveSeekableRange",
-    "setLocalDescription",
-    "setMatrix",
-    "setMatrixValue",
-    "setMediaKeys",
-    "setMilliseconds",
-    "setMinutes",
-    "setMiterLimit",
-    "setMonth",
-    "setNamedItem",
-    "setNamedItemNS",
-    "setNonUserCodeExceptions",
-    "setOrientToAngle",
-    "setOrientToAuto",
-    "setOrientation",
-    "setOverrideHistoryNavigationMode",
-    "setPaint",
-    "setParameter",
-    "setParameters",
-    "setPeriodicWave",
-    "setPointerCapture",
-    "setPosition",
-    "setPositionState",
-    "setPreference",
-    "setProperty",
-    "setPrototypeOf",
-    "setRGBColor",
-    "setRGBColorICCColor",
-    "setRadius",
-    "setRangeText",
-    "setRemoteDescription",
-    "setRequestHeader",
-    "setResizable",
-    "setResourceTimingBufferSize",
-    "setRotate",
-    "setScale",
-    "setSeconds",
-    "setSelectionRange",
-    "setServerCertificate",
-    "setShadow",
-    "setSinkId",
-    "setSkewX",
-    "setSkewY",
-    "setStart",
-    "setStartAfter",
-    "setStartBefore",
-    "setStdDeviation",
-    "setStreams",
-    "setStringValue",
-    "setStrokeColor",
-    "setSuggestResult",
-    "setTargetAtTime",
-    "setTargetValueAtTime",
-    "setTime",
-    "setTimeout",
-    "setTransform",
-    "setTranslate",
-    "setUTCDate",
-    "setUTCFullYear",
-    "setUTCHours",
-    "setUTCMilliseconds",
-    "setUTCMinutes",
-    "setUTCMonth",
-    "setUTCSeconds",
-    "setUint16",
-    "setUint32",
-    "setUint8",
-    "setUri",
-    "setValidity",
-    "setValueAtTime",
-    "setValueCurveAtTime",
-    "setVariable",
-    "setVelocity",
-    "setVersion",
-    "setYear",
-    "settingName",
-    "settingValue",
-    "sex",
-    "shaderSource",
-    "shadowBlur",
-    "shadowColor",
-    "shadowOffsetX",
-    "shadowOffsetY",
-    "shadowRoot",
-    "shape",
-    "shape-image-threshold",
-    "shape-margin",
-    "shape-outside",
-    "shape-rendering",
-    "shapeImageThreshold",
-    "shapeMargin",
-    "shapeOutside",
-    "shapeRendering",
-    "sheet",
-    "shift",
-    "shiftKey",
-    "shiftLeft",
-    "shippingAddress",
-    "shippingOption",
-    "shippingType",
-    "show",
-    "showHelp",
-    "showModal",
-    "showModalDialog",
-    "showModelessDialog",
-    "showNotification",
-    "sidebar",
-    "sign",
-    "signal",
-    "signalingState",
-    "signature",
-    "silent",
-    "sin",
-    "singleNodeValue",
-    "sinh",
-    "sinkId",
-    "sittingToStandingTransform",
-    "size",
-    "sizeToContent",
-    "sizeX",
-    "sizeZ",
-    "sizes",
-    "skewX",
-    "skewXSelf",
-    "skewY",
-    "skewYSelf",
-    "slice",
-    "slope",
-    "slot",
-    "small",
-    "smil",
-    "smooth",
-    "smoothingTimeConstant",
-    "snapToLines",
-    "snapshotItem",
-    "snapshotLength",
-    "some",
-    "sort",
-    "sortingCode",
-    "source",
-    "sourceBuffer",
-    "sourceBuffers",
-    "sourceCapabilities",
-    "sourceFile",
-    "sourceIndex",
-    "sources",
-    "spacing",
-    "span",
-    "speak",
-    "speakAs",
-    "speaking",
-    "species",
-    "specified",
-    "specularConstant",
-    "specularExponent",
-    "speechSynthesis",
-    "speed",
-    "speedOfSound",
-    "spellcheck",
-    "splice",
-    "split",
-    "splitText",
-    "spreadMethod",
-    "sqrt",
-    "src",
-    "srcElement",
-    "srcFilter",
-    "srcObject",
-    "srcUrn",
-    "srcdoc",
-    "srclang",
-    "srcset",
-    "stack",
-    "stackTraceLimit",
-    "stacktrace",
-    "stageParameters",
-    "standalone",
-    "standby",
-    "start",
-    "startContainer",
-    "startIce",
-    "startMessages",
-    "startNotifications",
-    "startOffset",
-    "startProfiling",
-    "startRendering",
-    "startShark",
-    "startTime",
-    "startsWith",
-    "state",
-    "status",
-    "statusCode",
-    "statusMessage",
-    "statusText",
-    "statusbar",
-    "stdDeviationX",
-    "stdDeviationY",
-    "stencilFunc",
-    "stencilFuncSeparate",
-    "stencilMask",
-    "stencilMaskSeparate",
-    "stencilOp",
-    "stencilOpSeparate",
-    "step",
-    "stepDown",
-    "stepMismatch",
-    "stepUp",
-    "sticky",
-    "stitchTiles",
-    "stop",
-    "stop-color",
-    "stop-opacity",
-    "stopColor",
-    "stopImmediatePropagation",
-    "stopNotifications",
-    "stopOpacity",
-    "stopProfiling",
-    "stopPropagation",
-    "stopShark",
-    "stopped",
-    "storage",
-    "storageArea",
-    "storageName",
-    "storageStatus",
-    "store",
-    "storeSiteSpecificTrackingException",
-    "storeWebWideTrackingException",
-    "stpVersion",
-    "stream",
-    "streams",
-    "stretch",
-    "strike",
-    "string",
-    "stringValue",
-    "stringify",
-    "stroke",
-    "stroke-dasharray",
-    "stroke-dashoffset",
-    "stroke-linecap",
-    "stroke-linejoin",
-    "stroke-miterlimit",
-    "stroke-opacity",
-    "stroke-width",
-    "strokeDasharray",
-    "strokeDashoffset",
-    "strokeLinecap",
-    "strokeLinejoin",
-    "strokeMiterlimit",
-    "strokeOpacity",
-    "strokeRect",
-    "strokeStyle",
-    "strokeText",
-    "strokeWidth",
-    "style",
-    "styleFloat",
-    "styleMap",
-    "styleMedia",
-    "styleSheet",
-    "styleSheetSets",
-    "styleSheets",
-    "sub",
-    "subarray",
-    "subject",
-    "submit",
-    "submitFrame",
-    "submitter",
-    "subscribe",
-    "substr",
-    "substring",
-    "substringData",
-    "subtle",
-    "subtree",
-    "suffix",
-    "suffixes",
-    "summary",
-    "sup",
-    "supported",
-    "supportedContentEncodings",
-    "supportedEntryTypes",
-    "supports",
-    "supportsSession",
-    "surfaceScale",
-    "surroundContents",
-    "suspend",
-    "suspendRedraw",
-    "swapCache",
-    "swapNode",
-    "sweepFlag",
-    "symbols",
-    "sync",
-    "sysexEnabled",
-    "system",
-    "systemCode",
-    "systemId",
-    "systemLanguage",
-    "systemXDPI",
-    "systemYDPI",
-    "tBodies",
-    "tFoot",
-    "tHead",
-    "tabIndex",
-    "table",
-    "table-layout",
-    "tableLayout",
-    "tableValues",
-    "tag",
-    "tagName",
-    "tagUrn",
-    "tags",
-    "taintEnabled",
-    "takePhoto",
-    "takeRecords",
-    "tan",
-    "tangentialPressure",
-    "tanh",
-    "target",
-    "targetElement",
-    "targetRayMode",
-    "targetRaySpace",
-    "targetTouches",
-    "targetX",
-    "targetY",
-    "tcpType",
-    "tee",
-    "tel",
-    "terminate",
-    "test",
-    "texImage2D",
-    "texImage3D",
-    "texParameterf",
-    "texParameteri",
-    "texStorage2D",
-    "texStorage3D",
-    "texSubImage2D",
-    "texSubImage3D",
-    "text",
-    "text-align",
-    "text-align-last",
-    "text-anchor",
-    "text-combine-upright",
-    "text-decoration",
-    "text-decoration-color",
-    "text-decoration-line",
-    "text-decoration-skip-ink",
-    "text-decoration-style",
-    "text-decoration-thickness",
-    "text-emphasis",
-    "text-emphasis-color",
-    "text-emphasis-position",
-    "text-emphasis-style",
-    "text-indent",
-    "text-justify",
-    "text-orientation",
-    "text-overflow",
-    "text-rendering",
-    "text-shadow",
-    "text-transform",
-    "text-underline-offset",
-    "text-underline-position",
-    "textAlign",
-    "textAlignLast",
-    "textAnchor",
-    "textAutospace",
-    "textBaseline",
-    "textCombineUpright",
-    "textContent",
-    "textDecoration",
-    "textDecorationBlink",
-    "textDecorationColor",
-    "textDecorationLine",
-    "textDecorationLineThrough",
-    "textDecorationNone",
-    "textDecorationOverline",
-    "textDecorationSkipInk",
-    "textDecorationStyle",
-    "textDecorationThickness",
-    "textDecorationUnderline",
-    "textEmphasis",
-    "textEmphasisColor",
-    "textEmphasisPosition",
-    "textEmphasisStyle",
-    "textIndent",
-    "textJustify",
-    "textJustifyTrim",
-    "textKashida",
-    "textKashidaSpace",
-    "textLength",
-    "textOrientation",
-    "textOverflow",
-    "textRendering",
-    "textShadow",
-    "textTracks",
-    "textTransform",
-    "textUnderlineOffset",
-    "textUnderlinePosition",
-    "then",
-    "threadId",
-    "threshold",
-    "thresholds",
-    "tiltX",
-    "tiltY",
-    "time",
-    "timeEnd",
-    "timeLog",
-    "timeOrigin",
-    "timeRemaining",
-    "timeStamp",
-    "timecode",
-    "timeline",
-    "timelineTime",
-    "timeout",
-    "timestamp",
-    "timestampOffset",
-    "timing",
-    "title",
-    "to",
-    "toArray",
-    "toBlob",
-    "toDataURL",
-    "toDateString",
-    "toElement",
-    "toExponential",
-    "toFixed",
-    "toFloat32Array",
-    "toFloat64Array",
-    "toGMTString",
-    "toISOString",
-    "toJSON",
-    "toLocaleDateString",
-    "toLocaleFormat",
-    "toLocaleLowerCase",
-    "toLocaleString",
-    "toLocaleTimeString",
-    "toLocaleUpperCase",
-    "toLowerCase",
-    "toMatrix",
-    "toMethod",
-    "toPrecision",
-    "toPrimitive",
-    "toSdp",
-    "toSource",
-    "toStaticHTML",
-    "toString",
-    "toStringTag",
-    "toSum",
-    "toTimeString",
-    "toUTCString",
-    "toUpperCase",
-    "toggle",
-    "toggleAttribute",
-    "toggleLongPressEnabled",
-    "tone",
-    "toneBuffer",
-    "tooLong",
-    "tooShort",
-    "toolbar",
-    "top",
-    "topMargin",
-    "total",
-    "totalFrameDelay",
-    "totalVideoFrames",
-    "touch-action",
-    "touchAction",
-    "touched",
-    "touches",
-    "trace",
-    "track",
-    "trackVisibility",
-    "transaction",
-    "transactions",
-    "transceiver",
-    "transferControlToOffscreen",
-    "transferFromImageBitmap",
-    "transferImageBitmap",
-    "transferIn",
-    "transferOut",
-    "transferSize",
-    "transferToImageBitmap",
-    "transform",
-    "transform-box",
-    "transform-origin",
-    "transform-style",
-    "transformBox",
-    "transformFeedbackVaryings",
-    "transformOrigin",
-    "transformPoint",
-    "transformString",
-    "transformStyle",
-    "transformToDocument",
-    "transformToFragment",
-    "transition",
-    "transition-delay",
-    "transition-duration",
-    "transition-property",
-    "transition-timing-function",
-    "transitionDelay",
-    "transitionDuration",
-    "transitionProperty",
-    "transitionTimingFunction",
-    "translate",
-    "translateSelf",
-    "translationX",
-    "translationY",
-    "transport",
-    "trim",
-    "trimEnd",
-    "trimLeft",
-    "trimRight",
-    "trimStart",
-    "trueSpeed",
-    "trunc",
-    "truncate",
-    "trustedTypes",
-    "turn",
-    "twist",
-    "type",
-    "typeDetail",
-    "typeMismatch",
-    "typeMustMatch",
-    "types",
-    "u2f",
-    "ubound",
-    "uint16",
-    "uint32",
-    "uint8",
-    "uint8Clamped",
-    "undefined",
-    "unescape",
-    "uneval",
-    "unicode",
-    "unicode-bidi",
-    "unicodeBidi",
-    "unicodeRange",
-    "uniform1f",
-    "uniform1fv",
-    "uniform1i",
-    "uniform1iv",
-    "uniform1ui",
-    "uniform1uiv",
-    "uniform2f",
-    "uniform2fv",
-    "uniform2i",
-    "uniform2iv",
-    "uniform2ui",
-    "uniform2uiv",
-    "uniform3f",
-    "uniform3fv",
-    "uniform3i",
-    "uniform3iv",
-    "uniform3ui",
-    "uniform3uiv",
-    "uniform4f",
-    "uniform4fv",
-    "uniform4i",
-    "uniform4iv",
-    "uniform4ui",
-    "uniform4uiv",
-    "uniformBlockBinding",
-    "uniformMatrix2fv",
-    "uniformMatrix2x3fv",
-    "uniformMatrix2x4fv",
-    "uniformMatrix3fv",
-    "uniformMatrix3x2fv",
-    "uniformMatrix3x4fv",
-    "uniformMatrix4fv",
-    "uniformMatrix4x2fv",
-    "uniformMatrix4x3fv",
-    "unique",
-    "uniqueID",
-    "uniqueNumber",
-    "unit",
-    "unitType",
-    "units",
-    "unloadEventEnd",
-    "unloadEventStart",
-    "unlock",
-    "unmount",
-    "unobserve",
-    "unpause",
-    "unpauseAnimations",
-    "unreadCount",
-    "unregister",
-    "unregisterContentHandler",
-    "unregisterProtocolHandler",
-    "unscopables",
-    "unselectable",
-    "unshift",
-    "unsubscribe",
-    "unsuspendRedraw",
-    "unsuspendRedrawAll",
-    "unwatch",
-    "unwrapKey",
-    "upDegrees",
-    "upX",
-    "upY",
-    "upZ",
-    "update",
-    "updateCommands",
-    "updateIce",
-    "updateInterval",
-    "updatePlaybackRate",
-    "updateRenderState",
-    "updateSettings",
-    "updateTiming",
-    "updateViaCache",
-    "updateWith",
-    "updated",
-    "updating",
-    "upgrade",
-    "upload",
-    "uploadTotal",
-    "uploaded",
-    "upper",
-    "upperBound",
-    "upperOpen",
-    "uri",
-    "url",
-    "urn",
-    "urns",
-    "usages",
-    "usb",
-    "usbVersionMajor",
-    "usbVersionMinor",
-    "usbVersionSubminor",
-    "useCurrentView",
-    "useMap",
-    "useProgram",
-    "usedSpace",
-    "user-select",
-    "userActivation",
-    "userAgent",
-    "userAgentData",
-    "userChoice",
-    "userHandle",
-    "userHint",
-    "userLanguage",
-    "userSelect",
-    "userVisibleOnly",
-    "username",
-    "usernameFragment",
-    "utterance",
-    "uuid",
-    "v8BreakIterator",
-    "vAlign",
-    "vLink",
-    "valid",
-    "validate",
-    "validateProgram",
-    "validationMessage",
-    "validity",
-    "value",
-    "valueAsDate",
-    "valueAsNumber",
-    "valueAsString",
-    "valueInSpecifiedUnits",
-    "valueMissing",
-    "valueOf",
-    "valueText",
-    "valueType",
-    "values",
-    "variable",
-    "variant",
-    "variationSettings",
-    "vector-effect",
-    "vectorEffect",
-    "velocityAngular",
-    "velocityExpansion",
-    "velocityX",
-    "velocityY",
-    "vendor",
-    "vendorId",
-    "vendorSub",
-    "verify",
-    "version",
-    "vertexAttrib1f",
-    "vertexAttrib1fv",
-    "vertexAttrib2f",
-    "vertexAttrib2fv",
-    "vertexAttrib3f",
-    "vertexAttrib3fv",
-    "vertexAttrib4f",
-    "vertexAttrib4fv",
-    "vertexAttribDivisor",
-    "vertexAttribDivisorANGLE",
-    "vertexAttribI4i",
-    "vertexAttribI4iv",
-    "vertexAttribI4ui",
-    "vertexAttribI4uiv",
-    "vertexAttribIPointer",
-    "vertexAttribPointer",
-    "vertical",
-    "vertical-align",
-    "verticalAlign",
-    "verticalOverflow",
-    "vh",
-    "vibrate",
-    "vibrationActuator",
-    "videoBitsPerSecond",
-    "videoHeight",
-    "videoTracks",
-    "videoWidth",
-    "view",
-    "viewBox",
-    "viewBoxString",
-    "viewTarget",
-    "viewTargetString",
-    "viewport",
-    "viewportAnchorX",
-    "viewportAnchorY",
-    "viewportElement",
-    "views",
-    "violatedDirective",
-    "visibility",
-    "visibilityState",
-    "visible",
-    "visualViewport",
-    "vlinkColor",
-    "vmax",
-    "vmin",
-    "voice",
-    "voiceURI",
-    "volume",
-    "vrml",
-    "vspace",
-    "vw",
-    "w",
-    "wait",
-    "waitSync",
-    "waiting",
-    "wake",
-    "wakeLock",
-    "wand",
-    "warn",
-    "wasClean",
-    "wasDiscarded",
-    "watch",
-    "watchAvailability",
-    "watchPosition",
-    "webdriver",
-    "webkitAddKey",
-    "webkitAlignContent",
-    "webkitAlignItems",
-    "webkitAlignSelf",
-    "webkitAnimation",
-    "webkitAnimationDelay",
-    "webkitAnimationDirection",
-    "webkitAnimationDuration",
-    "webkitAnimationFillMode",
-    "webkitAnimationIterationCount",
-    "webkitAnimationName",
-    "webkitAnimationPlayState",
-    "webkitAnimationTimingFunction",
-    "webkitAppearance",
-    "webkitAudioContext",
-    "webkitAudioDecodedByteCount",
-    "webkitAudioPannerNode",
-    "webkitBackfaceVisibility",
-    "webkitBackground",
-    "webkitBackgroundAttachment",
-    "webkitBackgroundClip",
-    "webkitBackgroundColor",
-    "webkitBackgroundImage",
-    "webkitBackgroundOrigin",
-    "webkitBackgroundPosition",
-    "webkitBackgroundPositionX",
-    "webkitBackgroundPositionY",
-    "webkitBackgroundRepeat",
-    "webkitBackgroundSize",
-    "webkitBackingStorePixelRatio",
-    "webkitBorderBottomLeftRadius",
-    "webkitBorderBottomRightRadius",
-    "webkitBorderImage",
-    "webkitBorderImageOutset",
-    "webkitBorderImageRepeat",
-    "webkitBorderImageSlice",
-    "webkitBorderImageSource",
-    "webkitBorderImageWidth",
-    "webkitBorderRadius",
-    "webkitBorderTopLeftRadius",
-    "webkitBorderTopRightRadius",
-    "webkitBoxAlign",
-    "webkitBoxDirection",
-    "webkitBoxFlex",
-    "webkitBoxOrdinalGroup",
-    "webkitBoxOrient",
-    "webkitBoxPack",
-    "webkitBoxShadow",
-    "webkitBoxSizing",
-    "webkitCancelAnimationFrame",
-    "webkitCancelFullScreen",
-    "webkitCancelKeyRequest",
-    "webkitCancelRequestAnimationFrame",
-    "webkitClearResourceTimings",
-    "webkitClosedCaptionsVisible",
-    "webkitConvertPointFromNodeToPage",
-    "webkitConvertPointFromPageToNode",
-    "webkitCreateShadowRoot",
-    "webkitCurrentFullScreenElement",
-    "webkitCurrentPlaybackTargetIsWireless",
-    "webkitDecodedFrameCount",
-    "webkitDirectionInvertedFromDevice",
-    "webkitDisplayingFullscreen",
-    "webkitDroppedFrameCount",
-    "webkitEnterFullScreen",
-    "webkitEnterFullscreen",
-    "webkitEntries",
-    "webkitExitFullScreen",
-    "webkitExitFullscreen",
-    "webkitExitPointerLock",
-    "webkitFilter",
-    "webkitFlex",
-    "webkitFlexBasis",
-    "webkitFlexDirection",
-    "webkitFlexFlow",
-    "webkitFlexGrow",
-    "webkitFlexShrink",
-    "webkitFlexWrap",
-    "webkitFullScreenKeyboardInputAllowed",
-    "webkitFullscreenElement",
-    "webkitFullscreenEnabled",
-    "webkitGenerateKeyRequest",
-    "webkitGetAsEntry",
-    "webkitGetDatabaseNames",
-    "webkitGetEntries",
-    "webkitGetEntriesByName",
-    "webkitGetEntriesByType",
-    "webkitGetFlowByName",
-    "webkitGetGamepads",
-    "webkitGetImageDataHD",
-    "webkitGetNamedFlows",
-    "webkitGetRegionFlowRanges",
-    "webkitGetUserMedia",
-    "webkitHasClosedCaptions",
-    "webkitHidden",
-    "webkitIDBCursor",
-    "webkitIDBDatabase",
-    "webkitIDBDatabaseError",
-    "webkitIDBDatabaseException",
-    "webkitIDBFactory",
-    "webkitIDBIndex",
-    "webkitIDBKeyRange",
-    "webkitIDBObjectStore",
-    "webkitIDBRequest",
-    "webkitIDBTransaction",
-    "webkitImageSmoothingEnabled",
-    "webkitIndexedDB",
-    "webkitInitMessageEvent",
-    "webkitIsFullScreen",
-    "webkitJustifyContent",
-    "webkitKeys",
-    "webkitLineClamp",
-    "webkitLineDashOffset",
-    "webkitLockOrientation",
-    "webkitMask",
-    "webkitMaskClip",
-    "webkitMaskComposite",
-    "webkitMaskImage",
-    "webkitMaskOrigin",
-    "webkitMaskPosition",
-    "webkitMaskPositionX",
-    "webkitMaskPositionY",
-    "webkitMaskRepeat",
-    "webkitMaskSize",
-    "webkitMatchesSelector",
-    "webkitMediaStream",
-    "webkitNotifications",
-    "webkitOfflineAudioContext",
-    "webkitOrder",
-    "webkitOrientation",
-    "webkitPeerConnection00",
-    "webkitPersistentStorage",
-    "webkitPerspective",
-    "webkitPerspectiveOrigin",
-    "webkitPointerLockElement",
-    "webkitPostMessage",
-    "webkitPreservesPitch",
-    "webkitPutImageDataHD",
-    "webkitRTCPeerConnection",
-    "webkitRegionOverset",
-    "webkitRelativePath",
-    "webkitRequestAnimationFrame",
-    "webkitRequestFileSystem",
-    "webkitRequestFullScreen",
-    "webkitRequestFullscreen",
-    "webkitRequestPointerLock",
-    "webkitResolveLocalFileSystemURL",
-    "webkitSetMediaKeys",
-    "webkitSetResourceTimingBufferSize",
-    "webkitShadowRoot",
-    "webkitShowPlaybackTargetPicker",
-    "webkitSlice",
-    "webkitSpeechGrammar",
-    "webkitSpeechGrammarList",
-    "webkitSpeechRecognition",
-    "webkitSpeechRecognitionError",
-    "webkitSpeechRecognitionEvent",
-    "webkitStorageInfo",
-    "webkitSupportsFullscreen",
-    "webkitTemporaryStorage",
-    "webkitTextFillColor",
-    "webkitTextSizeAdjust",
-    "webkitTextStroke",
-    "webkitTextStrokeColor",
-    "webkitTextStrokeWidth",
-    "webkitTransform",
-    "webkitTransformOrigin",
-    "webkitTransformStyle",
-    "webkitTransition",
-    "webkitTransitionDelay",
-    "webkitTransitionDuration",
-    "webkitTransitionProperty",
-    "webkitTransitionTimingFunction",
-    "webkitURL",
-    "webkitUnlockOrientation",
-    "webkitUserSelect",
-    "webkitVideoDecodedByteCount",
-    "webkitVisibilityState",
-    "webkitWirelessVideoPlaybackDisabled",
-    "webkitdirectory",
-    "webkitdropzone",
-    "webstore",
-    "weight",
-    "whatToShow",
-    "wheelDelta",
-    "wheelDeltaX",
-    "wheelDeltaY",
-    "whenDefined",
-    "which",
-    "white-space",
-    "whiteSpace",
-    "wholeText",
-    "widows",
-    "width",
-    "will-change",
-    "willChange",
-    "willValidate",
-    "window",
-    "withCredentials",
-    "word-break",
-    "word-spacing",
-    "word-wrap",
-    "wordBreak",
-    "wordSpacing",
-    "wordWrap",
-    "workerStart",
-    "wow64",
-    "wrap",
-    "wrapKey",
-    "writable",
-    "writableAuxiliaries",
-    "write",
-    "writeText",
-    "writeValue",
-    "writeWithoutResponse",
-    "writeln",
-    "writing-mode",
-    "writingMode",
-    "x",
-    "x1",
-    "x2",
-    "xChannelSelector",
-    "xmlEncoding",
-    "xmlStandalone",
-    "xmlVersion",
-    "xmlbase",
-    "xmllang",
-    "xmlspace",
-    "xor",
-    "xr",
-    "y",
-    "y1",
-    "y2",
-    "yChannelSelector",
-    "yandex",
-    "z",
-    "z-index",
-    "zIndex",
-    "zoom",
-    "zoomAndPan",
-    "zoomRectScreen",
-];
-
-/***********************************************************************
-
-  A JavaScript tokenizer / parser / beautifier / compressor.
-  https://github.com/mishoo/UglifyJS2
-
-  -------------------------------- (C) ---------------------------------
-
-                           Author: Mihai Bazon
-                         <mihai.bazon@gmail.com>
-                       http://mihai.bazon.net/blog
-
-  Distributed under the BSD license:
-
-    Copyright 2012 (c) Mihai Bazon <mihai.bazon@gmail.com>
-
-    Redistribution and use in source and binary forms, with or without
-    modification, are permitted provided that the following conditions
-    are met:
-
-        * Redistributions of source code must retain the above
-          copyright notice, this list of conditions and the following
-          disclaimer.
-
-        * Redistributions in binary form must reproduce the above
-          copyright notice, this list of conditions and the following
-          disclaimer in the documentation and/or other materials
-          provided with the distribution.
-
-    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
-    EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-    IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-    PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
-    LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
-    OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-    PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
-    PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
-    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
-    TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
-    THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-    SUCH DAMAGE.
-
- ***********************************************************************/
-
-function find_builtins(reserved) {
-    domprops.forEach(add);
-
-    // Compatibility fix for some standard defined globals not defined on every js environment
-    var new_globals = ["Symbol", "Map", "Promise", "Proxy", "Reflect", "Set", "WeakMap", "WeakSet"];
-    var objects = {};
-    var global_ref = typeof global === "object" ? global : self;
-
-    new_globals.forEach(function (new_global) {
-        objects[new_global] = global_ref[new_global] || function() {};
-    });
-
-    [
-        "null",
-        "true",
-        "false",
-        "NaN",
-        "Infinity",
-        "-Infinity",
-        "undefined",
-    ].forEach(add);
-    [ Object, Array, Function, Number,
-      String, Boolean, Error, Math,
-      Date, RegExp, objects.Symbol, ArrayBuffer,
-      DataView, decodeURI, decodeURIComponent,
-      encodeURI, encodeURIComponent, eval, EvalError,
-      Float32Array, Float64Array, Int8Array, Int16Array,
-      Int32Array, isFinite, isNaN, JSON, objects.Map, parseFloat,
-      parseInt, objects.Promise, objects.Proxy, RangeError, ReferenceError,
-      objects.Reflect, objects.Set, SyntaxError, TypeError, Uint8Array,
-      Uint8ClampedArray, Uint16Array, Uint32Array, URIError,
-      objects.WeakMap, objects.WeakSet
-    ].forEach(function(ctor) {
-        Object.getOwnPropertyNames(ctor).map(add);
-        if (ctor.prototype) {
-            Object.getOwnPropertyNames(ctor.prototype).map(add);
-        }
-    });
-    function add(name) {
-        reserved.add(name);
-    }
-}
-
-function reserve_quoted_keys(ast, reserved) {
-    function add(name) {
-        push_uniq(reserved, name);
-    }
-
-    ast.walk(new TreeWalker(function(node) {
-        if (node instanceof AST_ObjectKeyVal && node.quote) {
-            add(node.key);
-        } else if (node instanceof AST_ObjectProperty && node.quote) {
-            add(node.key.name);
-        } else if (node instanceof AST_Sub) {
-            addStrings(node.property, add);
-        }
-    }));
-}
-
-function addStrings(node, add) {
-    node.walk(new TreeWalker(function(node) {
-        if (node instanceof AST_Sequence) {
-            addStrings(node.tail_node(), add);
-        } else if (node instanceof AST_String) {
-            add(node.value);
-        } else if (node instanceof AST_Conditional) {
-            addStrings(node.consequent, add);
-            addStrings(node.alternative, add);
-        }
-        return true;
-    }));
-}
-
-function mangle_private_properties(ast, options) {
-    var cprivate = -1;
-    var private_cache = new Map();
-    var nth_identifier = options.nth_identifier || base54;
-
-    ast =  ast.transform(new TreeTransformer(function(node) {
-        if (
-            node instanceof AST_ClassPrivateProperty
-            || node instanceof AST_PrivateMethod
-            || node instanceof AST_PrivateGetter
-            || node instanceof AST_PrivateSetter
-        ) {
-            node.key.name = mangle_private(node.key.name);
-        } else if (node instanceof AST_DotHash) {
-            node.property = mangle_private(node.property);
-        }
-    }));
-    return ast;
-
-    function mangle_private(name) {
-        let mangled = private_cache.get(name);
-        if (!mangled) {
-            mangled = nth_identifier.get(++cprivate);
-            private_cache.set(name, mangled);
-        }
-
-        return mangled;
-    }
-}
-
-function mangle_properties(ast, options) {
-    options = defaults(options, {
-        builtins: false,
-        cache: null,
-        debug: false,
-        keep_quoted: false,
-        nth_identifier: base54,
-        only_cache: false,
-        regex: null,
-        reserved: null,
-        undeclared: false,
-    }, true);
-
-    var nth_identifier = options.nth_identifier;
-
-    var reserved_option = options.reserved;
-    if (!Array.isArray(reserved_option)) reserved_option = [reserved_option];
-    var reserved = new Set(reserved_option);
-    if (!options.builtins) find_builtins(reserved);
-
-    var cname = -1;
-
-    var cache;
-    if (options.cache) {
-        cache = options.cache.props;
-    } else {
-        cache = new Map();
-    }
-
-    var regex = options.regex && new RegExp(options.regex);
-
-    // note debug is either false (disabled), or a string of the debug suffix to use (enabled).
-    // note debug may be enabled as an empty string, which is falsey. Also treat passing 'true'
-    // the same as passing an empty string.
-    var debug = options.debug !== false;
-    var debug_name_suffix;
-    if (debug) {
-        debug_name_suffix = (options.debug === true ? "" : options.debug);
-    }
-
-    var names_to_mangle = new Set();
-    var unmangleable = new Set();
-    // Track each already-mangled name to prevent nth_identifier from generating
-    // the same name.
-    cache.forEach((mangled_name) => unmangleable.add(mangled_name));
-
-    var keep_quoted = !!options.keep_quoted;
-
-    // step 1: find candidates to mangle
-    ast.walk(new TreeWalker(function(node) {
-        if (
-            node instanceof AST_ClassPrivateProperty
-            || node instanceof AST_PrivateMethod
-            || node instanceof AST_PrivateGetter
-            || node instanceof AST_PrivateSetter
-            || node instanceof AST_DotHash
-        ) ; else if (node instanceof AST_ObjectKeyVal) {
-            if (typeof node.key == "string" && (!keep_quoted || !node.quote)) {
-                add(node.key);
-            }
-        } else if (node instanceof AST_ObjectProperty) {
-            // setter or getter, since KeyVal is handled above
-            if (!keep_quoted || !node.quote) {
-                add(node.key.name);
-            }
-        } else if (node instanceof AST_Dot) {
-            var declared = !!options.undeclared;
-            if (!declared) {
-                var root = node;
-                while (root.expression) {
-                    root = root.expression;
-                }
-                declared = !(root.thedef && root.thedef.undeclared);
-            }
-            if (declared &&
-                (!keep_quoted || !node.quote)) {
-                add(node.property);
-            }
-        } else if (node instanceof AST_Sub) {
-            if (!keep_quoted) {
-                addStrings(node.property, add);
-            }
-        } else if (node instanceof AST_Call
-            && node.expression.print_to_string() == "Object.defineProperty") {
-            addStrings(node.args[1], add);
-        } else if (node instanceof AST_Binary && node.operator === "in") {
-            addStrings(node.left, add);
-        }
-    }));
-
-    // step 2: transform the tree, renaming properties
-    return ast.transform(new TreeTransformer(function(node) {
-        if (
-            node instanceof AST_ClassPrivateProperty
-            || node instanceof AST_PrivateMethod
-            || node instanceof AST_PrivateGetter
-            || node instanceof AST_PrivateSetter
-            || node instanceof AST_DotHash
-        ) ; else if (node instanceof AST_ObjectKeyVal) {
-            if (typeof node.key == "string" && (!keep_quoted || !node.quote)) {
-                node.key = mangle(node.key);
-            }
-        } else if (node instanceof AST_ObjectProperty) {
-            // setter, getter, method or class field
-            if (!keep_quoted || !node.quote) {
-                node.key.name = mangle(node.key.name);
-            }
-        } else if (node instanceof AST_Dot) {
-            if (!keep_quoted || !node.quote) {
-                node.property = mangle(node.property);
-            }
-        } else if (!keep_quoted && node instanceof AST_Sub) {
-            node.property = mangleStrings(node.property);
-        } else if (node instanceof AST_Call
-            && node.expression.print_to_string() == "Object.defineProperty") {
-            node.args[1] = mangleStrings(node.args[1]);
-        } else if (node instanceof AST_Binary && node.operator === "in") {
-            node.left = mangleStrings(node.left);
-        }
-    }));
-
-    // only function declarations after this line
-
-    function can_mangle(name) {
-        if (unmangleable.has(name)) return false;
-        if (reserved.has(name)) return false;
-        if (options.only_cache) {
-            return cache.has(name);
-        }
-        if (/^-?[0-9]+(\.[0-9]+)?(e[+-][0-9]+)?$/.test(name)) return false;
-        return true;
-    }
-
-    function should_mangle(name) {
-        if (regex && !regex.test(name)) return false;
-        if (reserved.has(name)) return false;
-        return cache.has(name)
-            || names_to_mangle.has(name);
-    }
-
-    function add(name) {
-        if (can_mangle(name))
-            names_to_mangle.add(name);
-
-        if (!should_mangle(name)) {
-            unmangleable.add(name);
-        }
-    }
-
-    function mangle(name) {
-        if (!should_mangle(name)) {
-            return name;
-        }
-
-        var mangled = cache.get(name);
-        if (!mangled) {
-            if (debug) {
-                // debug mode: use a prefix and suffix to preserve readability, e.g. o.foo -> o._$foo$NNN_.
-                var debug_mangled = "_$" + name + "$" + debug_name_suffix + "_";
-
-                if (can_mangle(debug_mangled)) {
-                    mangled = debug_mangled;
-                }
-            }
-
-            // either debug mode is off, or it is on and we could not use the mangled name
-            if (!mangled) {
-                do {
-                    mangled = nth_identifier.get(++cname);
-                } while (!can_mangle(mangled));
-            }
-
-            cache.set(name, mangled);
-        }
-        return mangled;
-    }
-
-    function mangleStrings(node) {
-        return node.transform(new TreeTransformer(function(node) {
-            if (node instanceof AST_Sequence) {
-                var last = node.expressions.length - 1;
-                node.expressions[last] = mangleStrings(node.expressions[last]);
-            } else if (node instanceof AST_String) {
-                node.value = mangle(node.value);
-            } else if (node instanceof AST_Conditional) {
-                node.consequent = mangleStrings(node.consequent);
-                node.alternative = mangleStrings(node.alternative);
-            }
-            return node;
-        }));
-    }
-}
-
-var to_ascii = typeof atob == "undefined" ? function(b64) {
-    return Buffer.from(b64, "base64").toString();
-} : atob;
-var to_base64 = typeof btoa == "undefined" ? function(str) {
-    return Buffer.from(str).toString("base64");
-} : btoa;
-
-function read_source_map(code) {
-    var match = /(?:^|[^.])\/\/# sourceMappingURL=data:application\/json(;[\w=-]*)?;base64,([+/0-9A-Za-z]*=*)\s*$/.exec(code);
-    if (!match) {
-        console.warn("inline source map not found");
-        return null;
-    }
-    return to_ascii(match[2]);
-}
-
-function set_shorthand(name, options, keys) {
-    if (options[name]) {
-        keys.forEach(function(key) {
-            if (options[key]) {
-                if (typeof options[key] != "object") options[key] = {};
-                if (!(name in options[key])) options[key][name] = options[name];
-            }
-        });
-    }
-}
-
-function init_cache(cache) {
-    if (!cache) return;
-    if (!("props" in cache)) {
-        cache.props = new Map();
-    } else if (!(cache.props instanceof Map)) {
-        cache.props = map_from_object(cache.props);
-    }
-}
-
-function cache_to_json(cache) {
-    return {
-        props: map_to_object(cache.props)
-    };
-}
-
-function log_input(files, options, fs, debug_folder) {
-    if (!(fs && fs.writeFileSync && fs.mkdirSync)) {
-        return;
-    }
-
-    try {
-        fs.mkdirSync(debug_folder);
-    } catch (e) {
-        if (e.code !== "EEXIST") throw e;
-    }
-
-    const log_path = `${debug_folder}/terser-debug-${(Math.random() * 9999999) | 0}.log`;
-
-    options = options || {};
-
-    const options_str = JSON.stringify(options, (_key, thing) => {
-        if (typeof thing === "function") return "[Function " + thing.toString() + "]";
-        if (thing instanceof RegExp) return "[RegExp " + thing.toString() + "]";
-        return thing;
-    }, 4);
-
-    const files_str = (file) => {
-        if (typeof file === "object" && options.parse && options.parse.spidermonkey) {
-            return JSON.stringify(file, null, 2);
-        } else if (typeof file === "object") {
-            return Object.keys(file)
-                .map((key) => key + ": " + files_str(file[key]))
-                .join("\n\n");
-        } else if (typeof file === "string") {
-            return "```\n" + file + "\n```";
-        } else {
-            return file; // What do?
-        }
-    };
-
-    fs.writeFileSync(log_path, "Options: \n" + options_str + "\n\nInput files:\n\n" + files_str(files) + "\n");
-}
-
-async function minify(files, options, _fs_module) {
-    if (
-        _fs_module
-        && typeof process === "object"
-        && process.env
-        && typeof process.env.TERSER_DEBUG_DIR === "string"
-    ) {
-        log_input(files, options, _fs_module, process.env.TERSER_DEBUG_DIR);
-    }
-
-    options = defaults(options, {
-        compress: {},
-        ecma: undefined,
-        enclose: false,
-        ie8: false,
-        keep_classnames: undefined,
-        keep_fnames: false,
-        mangle: {},
-        module: false,
-        nameCache: null,
-        output: null,
-        format: null,
-        parse: {},
-        rename: undefined,
-        safari10: false,
-        sourceMap: false,
-        spidermonkey: false,
-        timings: false,
-        toplevel: false,
-        warnings: false,
-        wrap: false,
-    }, true);
-
-    var timings = options.timings && {
-        start: Date.now()
-    };
-    if (options.keep_classnames === undefined) {
-        options.keep_classnames = options.keep_fnames;
-    }
-    if (options.rename === undefined) {
-        options.rename = options.compress && options.mangle;
-    }
-    if (options.output && options.format) {
-        throw new Error("Please only specify either output or format option, preferrably format.");
-    }
-    options.format = options.format || options.output || {};
-    set_shorthand("ecma", options, [ "parse", "compress", "format" ]);
-    set_shorthand("ie8", options, [ "compress", "mangle", "format" ]);
-    set_shorthand("keep_classnames", options, [ "compress", "mangle" ]);
-    set_shorthand("keep_fnames", options, [ "compress", "mangle" ]);
-    set_shorthand("module", options, [ "parse", "compress", "mangle" ]);
-    set_shorthand("safari10", options, [ "mangle", "format" ]);
-    set_shorthand("toplevel", options, [ "compress", "mangle" ]);
-    set_shorthand("warnings", options, [ "compress" ]); // legacy
-    var quoted_props;
-    if (options.mangle) {
-        options.mangle = defaults(options.mangle, {
-            cache: options.nameCache && (options.nameCache.vars || {}),
-            eval: false,
-            ie8: false,
-            keep_classnames: false,
-            keep_fnames: false,
-            module: false,
-            nth_identifier: base54,
-            properties: false,
-            reserved: [],
-            safari10: false,
-            toplevel: false,
-        }, true);
-        if (options.mangle.properties) {
-            if (typeof options.mangle.properties != "object") {
-                options.mangle.properties = {};
-            }
-            if (options.mangle.properties.keep_quoted) {
-                quoted_props = options.mangle.properties.reserved;
-                if (!Array.isArray(quoted_props)) quoted_props = [];
-                options.mangle.properties.reserved = quoted_props;
-            }
-            if (options.nameCache && !("cache" in options.mangle.properties)) {
-                options.mangle.properties.cache = options.nameCache.props || {};
-            }
-        }
-        init_cache(options.mangle.cache);
-        init_cache(options.mangle.properties.cache);
-    }
-    if (options.sourceMap) {
-        options.sourceMap = defaults(options.sourceMap, {
-            asObject: false,
-            content: null,
-            filename: null,
-            includeSources: false,
-            root: null,
-            url: null,
-        }, true);
-    }
-
-    // -- Parse phase --
-    if (timings) timings.parse = Date.now();
-    var toplevel;
-    if (files instanceof AST_Toplevel) {
-        toplevel = files;
-    } else {
-        if (typeof files == "string" || (options.parse.spidermonkey && !Array.isArray(files))) {
-            files = [ files ];
-        }
-        options.parse = options.parse || {};
-        options.parse.toplevel = null;
-
-        if (options.parse.spidermonkey) {
-            options.parse.toplevel = AST_Node.from_mozilla_ast(Object.keys(files).reduce(function(toplevel, name) {
-                if (!toplevel) return files[name];
-                toplevel.body = toplevel.body.concat(files[name].body);
-                return toplevel;
-            }, null));
-        } else {
-            delete options.parse.spidermonkey;
-
-            for (var name in files) if (HOP(files, name)) {
-                options.parse.filename = name;
-                options.parse.toplevel = parse(files[name], options.parse);
-                if (options.sourceMap && options.sourceMap.content == "inline") {
-                    if (Object.keys(files).length > 1)
-                        throw new Error("inline source map only works with singular input");
-                    options.sourceMap.content = read_source_map(files[name]);
-                }
-            }
-        }
-
-        toplevel = options.parse.toplevel;
-    }
-    if (quoted_props && options.mangle.properties.keep_quoted !== "strict") {
-        reserve_quoted_keys(toplevel, quoted_props);
-    }
-    if (options.wrap) {
-        toplevel = toplevel.wrap_commonjs(options.wrap);
-    }
-    if (options.enclose) {
-        toplevel = toplevel.wrap_enclose(options.enclose);
-    }
-    if (timings) timings.rename = Date.now();
-
-    // -- Compress phase --
-    if (timings) timings.compress = Date.now();
-    if (options.compress) {
-        toplevel = new Compressor(options.compress, {
-            mangle_options: options.mangle
-        }).compress(toplevel);
-    }
-
-    // -- Mangle phase --
-    if (timings) timings.scope = Date.now();
-    if (options.mangle) toplevel.figure_out_scope(options.mangle);
-    if (timings) timings.mangle = Date.now();
-    if (options.mangle) {
-        toplevel.compute_char_frequency(options.mangle);
-        toplevel.mangle_names(options.mangle);
-        toplevel = mangle_private_properties(toplevel, options.mangle);
-    }
-    if (timings) timings.properties = Date.now();
-    if (options.mangle && options.mangle.properties) {
-        toplevel = mangle_properties(toplevel, options.mangle.properties);
-    }
-
-    // Format phase
-    if (timings) timings.format = Date.now();
-    var result = {};
-    if (options.format.ast) {
-        result.ast = toplevel;
-    }
-    if (options.format.spidermonkey) {
-        result.ast = toplevel.to_mozilla_ast();
-    }
-    if (!HOP(options.format, "code") || options.format.code) {
-        if (!options.format.ast) {
-            // Destroy stuff to save RAM. (unless the deprecated `ast` option is on)
-            options.format._destroy_ast = true;
-
-            walk(toplevel, node => {
-                if (node instanceof AST_Scope) {
-                    node.variables = undefined;
-                    node.enclosed = undefined;
-                    node.parent_scope = undefined;
-                }
-                if (node.block_scope) {
-                    node.block_scope.variables = undefined;
-                    node.block_scope.enclosed = undefined;
-                    node.parent_scope = undefined;
-                }
-            });
-        }
-
-        if (options.sourceMap) {
-            if (options.sourceMap.includeSources && files instanceof AST_Toplevel) {
-                throw new Error("original source content unavailable");
-            }
-            options.format.source_map = await SourceMap({
-                file: options.sourceMap.filename,
-                orig: options.sourceMap.content,
-                root: options.sourceMap.root,
-                files: options.sourceMap.includeSources ? files : null,
-            });
-        }
-        delete options.format.ast;
-        delete options.format.code;
-        delete options.format.spidermonkey;
-        var stream = OutputStream(options.format);
-        toplevel.print(stream);
-        result.code = stream.get();
-        if (options.sourceMap) {
-            Object.defineProperty(result, "map", {
-                configurable: true,
-                enumerable: true,
-                get() {
-                    const map = options.format.source_map.getEncoded();
-                    return (result.map = options.sourceMap.asObject ? map : JSON.stringify(map));
-                },
-                set(value) {
-                    Object.defineProperty(result, "map", {
-                        value,
-                        writable: true,
-                    });
-                }
-            });
-            result.decoded_map = options.format.source_map.getDecoded();
-            if (options.sourceMap.url == "inline") {
-                var sourceMap = typeof result.map === "object" ? JSON.stringify(result.map) : result.map;
-                result.code += "\n//# sourceMappingURL=data:application/json;charset=utf-8;base64," + to_base64(sourceMap);
-            } else if (options.sourceMap.url) {
-                result.code += "\n//# sourceMappingURL=" + options.sourceMap.url;
-            }
-        }
-    }
-    if (options.nameCache && options.mangle) {
-        if (options.mangle.cache) options.nameCache.vars = cache_to_json(options.mangle.cache);
-        if (options.mangle.properties && options.mangle.properties.cache) {
-            options.nameCache.props = cache_to_json(options.mangle.properties.cache);
-        }
-    }
-    if (options.format && options.format.source_map) {
-        options.format.source_map.destroy();
-    }
-    if (timings) {
-        timings.end = Date.now();
-        result.timings = {
-            parse: 1e-3 * (timings.rename - timings.parse),
-            rename: 1e-3 * (timings.compress - timings.rename),
-            compress: 1e-3 * (timings.scope - timings.compress),
-            scope: 1e-3 * (timings.mangle - timings.scope),
-            mangle: 1e-3 * (timings.properties - timings.mangle),
-            properties: 1e-3 * (timings.format - timings.properties),
-            format: 1e-3 * (timings.end - timings.format),
-            total: 1e-3 * (timings.end - timings.start)
-        };
-    }
-    return result;
-}
-
-async function run_cli({ program, packageJson, fs, path }) {
-    const skip_keys = new Set([ "cname", "parent_scope", "scope", "uses_eval", "uses_with" ]);
-    var files = {};
-    var options = {
-        compress: false,
-        mangle: false
-    };
-    const default_options = await _default_options();
-    program.version(packageJson.name + " " + packageJson.version);
-    program.parseArgv = program.parse;
-    program.parse = undefined;
-
-    if (process.argv.includes("ast")) program.helpInformation = describe_ast;
-    else if (process.argv.includes("options")) program.helpInformation = function() {
-        var text = [];
-        for (var option in default_options) {
-            text.push("--" + (option === "sourceMap" ? "source-map" : option) + " options:");
-            text.push(format_object(default_options[option]));
-            text.push("");
-        }
-        return text.join("\n");
-    };
-
-    program.option("-p, --parse <options>", "Specify parser options.", parse_js());
-    program.option("-c, --compress [options]", "Enable compressor/specify compressor options.", parse_js());
-    program.option("-m, --mangle [options]", "Mangle names/specify mangler options.", parse_js());
-    program.option("--mangle-props [options]", "Mangle properties/specify mangler options.", parse_js());
-    program.option("-f, --format [options]", "Format options.", parse_js());
-    program.option("-b, --beautify [options]", "Alias for --format.", parse_js());
-    program.option("-o, --output <file>", "Output file (default STDOUT).");
-    program.option("--comments [filter]", "Preserve copyright comments in the output.");
-    program.option("--config-file <file>", "Read minify() options from JSON file.");
-    program.option("-d, --define <expr>[=value]", "Global definitions.", parse_js("define"));
-    program.option("--ecma <version>", "Specify ECMAScript release: 5, 2015, 2016 or 2017...");
-    program.option("-e, --enclose [arg[,...][:value[,...]]]", "Embed output in a big function with configurable arguments and values.");
-    program.option("--ie8", "Support non-standard Internet Explorer 8.");
-    program.option("--keep-classnames", "Do not mangle/drop class names.");
-    program.option("--keep-fnames", "Do not mangle/drop function names. Useful for code relying on Function.prototype.name.");
-    program.option("--module", "Input is an ES6 module");
-    program.option("--name-cache <file>", "File to hold mangled name mappings.");
-    program.option("--rename", "Force symbol expansion.");
-    program.option("--no-rename", "Disable symbol expansion.");
-    program.option("--safari10", "Support non-standard Safari 10.");
-    program.option("--source-map [options]", "Enable source map/specify source map options.", parse_js());
-    program.option("--timings", "Display operations run time on STDERR.");
-    program.option("--toplevel", "Compress and/or mangle variables in toplevel scope.");
-    program.option("--wrap <name>", "Embed everything as a function with “exports” corresponding to “name” globally.");
-    program.arguments("[files...]").parseArgv(process.argv);
-    if (program.configFile) {
-        options = JSON.parse(read_file(program.configFile));
-    }
-    if (!program.output && program.sourceMap && program.sourceMap.url != "inline") {
-        fatal("ERROR: cannot write source map to STDOUT");
-    }
-
-    [
-        "compress",
-        "enclose",
-        "ie8",
-        "mangle",
-        "module",
-        "safari10",
-        "sourceMap",
-        "toplevel",
-        "wrap"
-    ].forEach(function(name) {
-        if (name in program) {
-            options[name] = program[name];
-        }
-    });
-
-    if ("ecma" in program) {
-        if (program.ecma != (program.ecma | 0)) fatal("ERROR: ecma must be an integer");
-        const ecma = program.ecma | 0;
-        if (ecma > 5 && ecma < 2015)
-            options.ecma = ecma + 2009;
-        else
-            options.ecma = ecma;
-    }
-    if (program.format || program.beautify) {
-        const chosenOption = program.format || program.beautify;
-        options.format = typeof chosenOption === "object" ? chosenOption : {};
-    }
-    if (program.comments) {
-        if (typeof options.format != "object") options.format = {};
-        options.format.comments = typeof program.comments == "string" ? (program.comments == "false" ? false : program.comments) : "some";
-    }
-    if (program.define) {
-        if (typeof options.compress != "object") options.compress = {};
-        if (typeof options.compress.global_defs != "object") options.compress.global_defs = {};
-        for (var expr in program.define) {
-            options.compress.global_defs[expr] = program.define[expr];
-        }
-    }
-    if (program.keepClassnames) {
-        options.keep_classnames = true;
-    }
-    if (program.keepFnames) {
-        options.keep_fnames = true;
-    }
-    if (program.mangleProps) {
-        if (program.mangleProps.domprops) {
-            delete program.mangleProps.domprops;
-        } else {
-            if (typeof program.mangleProps != "object") program.mangleProps = {};
-            if (!Array.isArray(program.mangleProps.reserved)) program.mangleProps.reserved = [];
-        }
-        if (typeof options.mangle != "object") options.mangle = {};
-        options.mangle.properties = program.mangleProps;
-    }
-    if (program.nameCache) {
-        options.nameCache = JSON.parse(read_file(program.nameCache, "{}"));
-    }
-    if (program.output == "ast") {
-        options.format = {
-            ast: true,
-            code: false
-        };
-    }
-    if (program.parse) {
-        if (!program.parse.acorn && !program.parse.spidermonkey) {
-            options.parse = program.parse;
-        } else if (program.sourceMap && program.sourceMap.content == "inline") {
-            fatal("ERROR: inline source map only works with built-in parser");
-        }
-    }
-    if (~program.rawArgs.indexOf("--rename")) {
-        options.rename = true;
-    } else if (!program.rename) {
-        options.rename = false;
-    }
-
-    let convert_path = name => name;
-    if (typeof program.sourceMap == "object" && "base" in program.sourceMap) {
-        convert_path = function() {
-            var base = program.sourceMap.base;
-            delete options.sourceMap.base;
-            return function(name) {
-                return path.relative(base, name);
-            };
-        }();
-    }
-
-    let filesList;
-    if (options.files && options.files.length) {
-        filesList = options.files;
-
-        delete options.files;
-    } else if (program.args.length) {
-        filesList = program.args;
-    }
-
-    if (filesList) {
-        simple_glob(filesList).forEach(function(name) {
-            files[convert_path(name)] = read_file(name);
-        });
-    } else {
-        await new Promise((resolve) => {
-            var chunks = [];
-            process.stdin.setEncoding("utf8");
-            process.stdin.on("data", function(chunk) {
-                chunks.push(chunk);
-            }).on("end", function() {
-                files = [ chunks.join("") ];
-                resolve();
-            });
-            process.stdin.resume();
-        });
-    }
-
-    await run_cli();
-
-    function convert_ast(fn) {
-        return AST_Node.from_mozilla_ast(Object.keys(files).reduce(fn, null));
-    }
-
-    async function run_cli() {
-        var content = program.sourceMap && program.sourceMap.content;
-        if (content && content !== "inline") {
-            options.sourceMap.content = read_file(content, content);
-        }
-        if (program.timings) options.timings = true;
-
-        try {
-            if (program.parse) {
-                if (program.parse.acorn) {
-                    files = convert_ast(function(toplevel, name) {
-                        return (__webpack_require__(59239).parse)(files[name], {
-                            ecmaVersion: 2018,
-                            locations: true,
-                            program: toplevel,
-                            sourceFile: name,
-                            sourceType: options.module || program.parse.module ? "module" : "script"
-                        });
-                    });
-                } else if (program.parse.spidermonkey) {
-                    files = convert_ast(function(toplevel, name) {
-                        var obj = JSON.parse(files[name]);
-                        if (!toplevel) return obj;
-                        toplevel.body = toplevel.body.concat(obj.body);
-                        return toplevel;
-                    });
-                }
-            }
-        } catch (ex) {
-            fatal(ex);
-        }
-
-        let result;
-        try {
-            result = await minify(files, options, fs);
-        } catch (ex) {
-            if (ex.name == "SyntaxError") {
-                print_error("Parse error at " + ex.filename + ":" + ex.line + "," + ex.col);
-                var col = ex.col;
-                var lines = files[ex.filename].split(/\r?\n/);
-                var line = lines[ex.line - 1];
-                if (!line && !col) {
-                    line = lines[ex.line - 2];
-                    col = line.length;
-                }
-                if (line) {
-                    var limit = 70;
-                    if (col > limit) {
-                        line = line.slice(col - limit);
-                        col = limit;
-                    }
-                    print_error(line.slice(0, 80));
-                    print_error(line.slice(0, col).replace(/\S/g, " ") + "^");
-                }
-            }
-            if (ex.defs) {
-                print_error("Supported options:");
-                print_error(format_object(ex.defs));
-            }
-            fatal(ex);
-            return;
-        }
-
-        if (program.output == "ast") {
-            if (!options.compress && !options.mangle) {
-                result.ast.figure_out_scope({});
-            }
-            console.log(JSON.stringify(result.ast, function(key, value) {
-                if (value) switch (key) {
-                  case "thedef":
-                    return symdef(value);
-                  case "enclosed":
-                    return value.length ? value.map(symdef) : undefined;
-                  case "variables":
-                  case "globals":
-                    return value.size ? collect_from_map(value, symdef) : undefined;
-                }
-                if (skip_keys.has(key)) return;
-                if (value instanceof AST_Token) return;
-                if (value instanceof Map) return;
-                if (value instanceof AST_Node) {
-                    var result = {
-                        _class: "AST_" + value.TYPE
-                    };
-                    if (value.block_scope) {
-                        result.variables = value.block_scope.variables;
-                        result.enclosed = value.block_scope.enclosed;
-                    }
-                    value.CTOR.PROPS.forEach(function(prop) {
-                        if (prop !== "block_scope") {
-                            result[prop] = value[prop];
-                        }
-                    });
-                    return result;
-                }
-                return value;
-            }, 2));
-        } else if (program.output == "spidermonkey") {
-            try {
-                const minified = await minify(
-                    result.code,
-                    {
-                        compress: false,
-                        mangle: false,
-                        format: {
-                            ast: true,
-                            code: false
-                        }
-                    },
-                    fs
-                );
-                console.log(JSON.stringify(minified.ast.to_mozilla_ast(), null, 2));
-            } catch (ex) {
-                fatal(ex);
-                return;
-            }
-        } else if (program.output) {
-            fs.writeFileSync(program.output, result.code);
-            if (options.sourceMap && options.sourceMap.url !== "inline" && result.map) {
-                fs.writeFileSync(program.output + ".map", result.map);
-            }
-        } else {
-            console.log(result.code);
-        }
-        if (program.nameCache) {
-            fs.writeFileSync(program.nameCache, JSON.stringify(options.nameCache));
-        }
-        if (result.timings) for (var phase in result.timings) {
-            print_error("- " + phase + ": " + result.timings[phase].toFixed(3) + "s");
-        }
-    }
-
-    function fatal(message) {
-        if (message instanceof Error) message = message.stack.replace(/^\S*?Error:/, "ERROR:");
-        print_error(message);
-        process.exit(1);
-    }
-
-    // A file glob function that only supports "*" and "?" wildcards in the basename.
-    // Example: "foo/bar/*baz??.*.js"
-    // Argument `glob` may be a string or an array of strings.
-    // Returns an array of strings. Garbage in, garbage out.
-    function simple_glob(glob) {
-        if (Array.isArray(glob)) {
-            return [].concat.apply([], glob.map(simple_glob));
-        }
-        if (glob && glob.match(/[*?]/)) {
-            var dir = path.dirname(glob);
-            try {
-                var entries = fs.readdirSync(dir);
-            } catch (ex) {}
-            if (entries) {
-                var pattern = "^" + path.basename(glob)
-                    .replace(/[.+^$[\]\\(){}]/g, "\\$&")
-                    .replace(/\*/g, "[^/\\\\]*")
-                    .replace(/\?/g, "[^/\\\\]") + "$";
-                var mod = process.platform === "win32" ? "i" : "";
-                var rx = new RegExp(pattern, mod);
-                var results = entries.filter(function(name) {
-                    return rx.test(name);
-                }).map(function(name) {
-                    return path.join(dir, name);
-                });
-                if (results.length) return results;
-            }
-        }
-        return [ glob ];
-    }
-
-    function read_file(path, default_value) {
-        try {
-            return fs.readFileSync(path, "utf8");
-        } catch (ex) {
-            if ((ex.code == "ENOENT" || ex.code == "ENAMETOOLONG") && default_value != null) return default_value;
-            fatal(ex);
-        }
-    }
-
-    function parse_js(flag) {
-        return function(value, options) {
-            options = options || {};
-            try {
-                walk(parse(value, { expression: true }), node => {
-                    if (node instanceof AST_Assign) {
-                        var name = node.left.print_to_string();
-                        var value = node.right;
-                        if (flag) {
-                            options[name] = value;
-                        } else if (value instanceof AST_Array) {
-                            options[name] = value.elements.map(to_string);
-                        } else if (value instanceof AST_RegExp) {
-                            value = value.value;
-                            options[name] = new RegExp(value.source, value.flags);
-                        } else {
-                            options[name] = to_string(value);
-                        }
-                        return true;
-                    }
-                    if (node instanceof AST_Symbol || node instanceof AST_PropAccess) {
-                        var name = node.print_to_string();
-                        options[name] = true;
-                        return true;
-                    }
-                    if (!(node instanceof AST_Sequence)) throw node;
-
-                    function to_string(value) {
-                        return value instanceof AST_Constant ? value.getValue() : value.print_to_string({
-                            quote_keys: true
-                        });
-                    }
-                });
-            } catch(ex) {
-                if (flag) {
-                    fatal("Error parsing arguments for '" + flag + "': " + value);
-                } else {
-                    options[value] = null;
-                }
-            }
-            return options;
-        };
-    }
-
-    function symdef(def) {
-        var ret = (1e6 + def.id) + " " + def.name;
-        if (def.mangled_name) ret += " " + def.mangled_name;
-        return ret;
-    }
-
-    function collect_from_map(map, callback) {
-        var result = [];
-        map.forEach(function (def) {
-            result.push(callback(def));
-        });
-        return result;
-    }
-
-    function format_object(obj) {
-        var lines = [];
-        var padding = "";
-        Object.keys(obj).map(function(name) {
-            if (padding.length < name.length) padding = Array(name.length + 1).join(" ");
-            return [ name, JSON.stringify(obj[name]) ];
-        }).forEach(function(tokens) {
-            lines.push("  " + tokens[0] + padding.slice(tokens[0].length - 2) + tokens[1]);
-        });
-        return lines.join("\n");
-    }
-
-    function print_error(msg) {
-        process.stderr.write(msg);
-        process.stderr.write("\n");
-    }
-
-    function describe_ast() {
-        var out = OutputStream({ beautify: true });
-        function doitem(ctor) {
-            out.print("AST_" + ctor.TYPE);
-            const props = ctor.SELF_PROPS.filter(prop => !/^\$/.test(prop));
-
-            if (props.length > 0) {
-                out.space();
-                out.with_parens(function() {
-                    props.forEach(function(prop, i) {
-                        if (i) out.space();
-                        out.print(prop);
-                    });
-                });
-            }
-
-            if (ctor.documentation) {
-                out.space();
-                out.print_string(ctor.documentation);
-            }
-
-            if (ctor.SUBCLASSES.length > 0) {
-                out.space();
-                out.with_block(function() {
-                    ctor.SUBCLASSES.forEach(function(ctor) {
-                        out.indent();
-                        doitem(ctor);
-                        out.newline();
-                    });
-                });
-            }
-        }
-        doitem(AST_Node);
-        return out + "\n";
-    }
-}
-
-async function _default_options() {
-    const defs = {};
-
-    Object.keys(infer_options({ 0: 0 })).forEach((component) => {
-        const options = infer_options({
-            [component]: {0: 0}
-        });
-
-        if (options) defs[component] = options;
-    });
-    return defs;
-}
-
-async function infer_options(options) {
-    try {
-        await minify("", options);
-    } catch (error) {
-        return error.defs;
-    }
-}
-
-exports._default_options = _default_options;
-exports._run_cli = run_cli;
-exports.minify = minify;
-
-})));
-
-
-/***/ }),
-
-/***/ 36809:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/*
- * AUTOGENERATED - DON'T EDIT
- * Your edits in this file will be overwritten in the next build!
- * Modify the docusaurus.config.js file at your site's root instead.
- */
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = ({
-  "title": "Codex",
-  "url": "https://codex.storage",
-  "baseUrl": "/",
-  "customFields": {
-    "businessUnit": "Codex",
-    "logos-docusaurus-theme": {
-      "customCss": [
-        "/home/jenkins/workspace/website/codex.storage/src/css/custom.scss"
-      ],
-      "docs": {
-        "default": {
-          "sidebar": {
-            "hide": false
-          },
-          "content": {}
-        }
-      },
-      "id": "default"
-    }
-  },
-  "markdown": {
-    "mermaid": true
-  },
-  "i18n": {
-    "defaultLocale": "en",
-    "locales": [
-      "en"
-    ],
-    "path": "i18n",
-    "localeConfigs": {}
-  },
-  "presets": [
-    [
-      "@acid-info/logos-docusaurus-preset",
-      {
-        "businessUnit": "Codex",
-        "theme": {
-          "name": "default",
-          "options": {
-            "customCss": [
-              "/home/jenkins/workspace/website/codex.storage/src/css/custom.scss"
-            ],
-            "docs": {
-              "default": {
-                "sidebar": {
-                  "hide": false
-                }
-              }
-            }
-          }
-        },
-        "docs": {
-          "id": "root-pages",
-          "breadcrumbs": false,
-          "routeBasePath": "/",
-          "path": "root-pages"
-        },
-        "generated": {
-          "jobList": {
-            "jobBoard": "codex"
-          }
-        },
-        "og": {}
-      }
-    ]
-  ],
-  "plugins": [
-    [
-      "@docusaurus/plugin-content-docs",
-      {
-        "id": "about",
-        "routeBasePath": "/about",
-        "path": "about"
-      }
-    ],
-    [
-      "@acid-info/docusaurus-fathom",
-      {
-        "siteId": "OISNT",
-        "scriptUrl": "https://fathom.bi.status.im/tracker.js",
-        "hostnames": [
-          "codex.storage"
-        ]
-      }
-    ],
-    [
-      "@acid-info/docusaurus-og",
-      {
-        "path": "_og",
-        "imageRenderers": {}
-      }
-    ]
-  ],
-  "themeConfig": {
-    "docs": {
-      "sidebar": {
-        "hideable": true,
-        "autoCollapseCategories": false
-      },
-      "versionPersistence": "localStorage"
-    },
-    "metadata": [
-      {
-        "name": "keywords",
-        "content": "codex, storage"
-      },
-      {
-        "name": "description",
-        "content": "Codex is building a Decentralized Durability Storage"
-      },
-      {
-        "name": "image",
-        "content": "theme/image/preview-image.png"
-      }
-    ],
-    "colorMode": {
-      "disableSwitch": false,
-      "defaultMode": "dark",
-      "respectPrefersColorScheme": true
-    },
-    "navbar": {
-      "title": "",
-      "logo": {
-        "alt": "Codex",
-        "src": "theme/image/logo-black.svg",
-        "srcDark": "theme/image/logo.svg",
-        "height": 26
-      },
-      "hideOnScroll": true,
-      "items": [
-        {
-          "type": "search",
-          "position": "left"
-        },
-        {
-          "label": "About Codex",
-          "to": "/about",
-          "position": "left"
-        },
-        {
-          "label": "Community",
-          "to": "/community",
-          "position": "left"
-        },
-        {
-          "title": "Codex GitHub repository",
-          "href": "https://github.com/codex-storage",
-          "position": "right",
-          "className": "header-github-link"
-        },
-        {
-          "label": "Docs",
-          "href": "https://docs.codex.storage",
-          "position": "left"
-        },
-        {
-          "label": "Blog",
-          "href": "https://blog.codex.storage",
-          "position": "left"
-        },
-        {
-          "label": "News",
-          "to": "https://codex.storage/news",
-          "position": "left"
-        },
-        {
-          "label": "Join Us",
-          "href": "/join-us",
-          "position": "left"
-        }
-      ]
-    },
-    "footer": {
-      "logo": {
-        "alt": "Codex",
-        "src": "theme/image/logo.svg",
-        "href": "/",
-        "width": 22
-      },
-      "links": [
-        {
-          "items": [
-            {
-              "href": "https://twitter.com/Codex_storage",
-              "label": "Twitter"
-            },
-            {
-              "href": "https://discord.gg/codex-storage",
-              "label": "Discord"
-            },
-            {
-              "href": "https://docs.codex.storage",
-              "label": "Docs"
-            },
-            {
-              "href": "https://blog.codex.storage",
-              "label": "Blog"
-            },
-            {
-              "href": "https://github.com/codex-storage",
-              "label": "Github"
-            }
-          ],
-          "title": null
-        },
-        {
-          "items": [
-            {
-              "to": "/join-us",
-              "label": "Work with us"
-            },
-            {
-              "href": "https://guide.codex.storage/",
-              "label": "Brand Guidelines"
-            },
-            {
-              "href": "/terms",
-              "label": "Terms & conditions"
-            },
-            {
-              "href": "/privacy-policy",
-              "label": "Privacy Policy"
-            },
-            {
-              "href": "/security",
-              "label": "Security"
-            }
-          ],
-          "title": null
-        },
-        {
-          "title": "shared:Research",
-          "items": [
-            {
-              "href": "https://vac.dev",
-              "label": "VacP2P"
-            },
-            {
-              "href": "https://afaik.institute",
-              "label": "AFAIK"
-            }
-          ]
-        },
-        {
-          "title": "shared:Infrastructure",
-          "items": [
-            {
-              "href": "https://waku.org/",
-              "label": "Waku"
-            },
-            {
-              "href": "https://nimbus.team/",
-              "label": "Nimbus"
-            },
-            {
-              "href": "https://codex.storage",
-              "label": "Codex"
-            },
-            {
-              "href": "https://nomos.tech",
-              "label": "Nomos"
-            }
-          ]
-        },
-        {
-          "title": "shared:Creative Studio",
-          "items": [
-            {
-              "href": "https://acid.info",
-              "label": "Acid.info"
-            }
-          ]
-        },
-        {
-          "title": "shared:Movement",
-          "items": [
-            {
-              "href": "https://logos.co",
-              "label": "Logos"
-            }
-          ]
-        },
-        {
-          "title": "shared:User-facing products",
-          "items": [
-            {
-              "href": "https://status.im",
-              "label": "Status"
-            },
-            {
-              "href": "https://keycard.tech",
-              "label": "Keycard"
-            }
-          ]
-        }
-      ],
-      "copyright": "Codex",
-      "style": "light"
-    },
-    "prism": {
-      "theme": {
-        "plain": {
-          "color": "#000000",
-          "backgroundColor": "rgba(var(--lsd-surface-secondary), 0.08)"
-        },
-        "styles": [
-          {
-            "types": [
-              "comment"
-            ],
-            "style": {
-              "color": "rgb(0, 128, 0)"
-            }
-          },
-          {
-            "types": [
-              "builtin"
-            ],
-            "style": {
-              "color": "rgb(0, 112, 193)"
-            }
-          },
-          {
-            "types": [
-              "number",
-              "variable",
-              "inserted"
-            ],
-            "style": {
-              "color": "rgb(9, 134, 88)"
-            }
-          },
-          {
-            "types": [
-              "operator"
-            ],
-            "style": {
-              "color": "rgb(0, 0, 0)"
-            }
-          },
-          {
-            "types": [
-              "constant",
-              "char"
-            ],
-            "style": {
-              "color": "rgb(129, 31, 63)"
-            }
-          },
-          {
-            "types": [
-              "tag"
-            ],
-            "style": {
-              "color": "rgb(128, 0, 0)"
-            }
-          },
-          {
-            "types": [
-              "attr-name"
-            ],
-            "style": {
-              "color": "rgb(255, 0, 0)"
-            }
-          },
-          {
-            "types": [
-              "deleted",
-              "string"
-            ],
-            "style": {
-              "color": "rgb(163, 21, 21)"
-            }
-          },
-          {
-            "types": [
-              "changed",
-              "punctuation"
-            ],
-            "style": {
-              "color": "rgb(4, 81, 165)"
-            }
-          },
-          {
-            "types": [
-              "function",
-              "keyword"
-            ],
-            "style": {
-              "color": "rgb(0, 0, 255)"
-            }
-          },
-          {
-            "types": [
-              "class-name"
-            ],
-            "style": {
-              "color": "rgb(38, 127, 153)"
-            }
-          }
-        ]
-      },
-      "darkTheme": {
-        "plain": {
-          "color": "#F8F8F2",
-          "backgroundColor": "rgba(var(--lsd-surface-secondary), 0.08)"
-        },
-        "styles": [
-          {
-            "types": [
-              "prolog",
-              "constant",
-              "builtin"
-            ],
-            "style": {
-              "color": "rgb(189, 147, 249)"
-            }
-          },
-          {
-            "types": [
-              "inserted",
-              "function"
-            ],
-            "style": {
-              "color": "rgb(80, 250, 123)"
-            }
-          },
-          {
-            "types": [
-              "deleted"
-            ],
-            "style": {
-              "color": "rgb(255, 85, 85)"
-            }
-          },
-          {
-            "types": [
-              "changed"
-            ],
-            "style": {
-              "color": "rgb(255, 184, 108)"
-            }
-          },
-          {
-            "types": [
-              "punctuation",
-              "symbol"
-            ],
-            "style": {
-              "color": "rgb(248, 248, 242)"
-            }
-          },
-          {
-            "types": [
-              "string",
-              "char",
-              "tag",
-              "selector"
-            ],
-            "style": {
-              "color": "rgb(255, 121, 198)"
-            }
-          },
-          {
-            "types": [
-              "keyword",
-              "variable"
-            ],
-            "style": {
-              "color": "rgb(189, 147, 249)",
-              "fontStyle": "italic"
-            }
-          },
-          {
-            "types": [
-              "comment"
-            ],
-            "style": {
-              "color": "rgb(98, 114, 164)"
-            }
-          },
-          {
-            "types": [
-              "attr-name"
-            ],
-            "style": {
-              "color": "rgb(241, 250, 140)"
-            }
-          }
-        ]
-      },
-      "additionalLanguages": [],
-      "magicComments": [
-        {
-          "className": "theme-code-block-highlighted-line",
-          "line": "highlight-next-line",
-          "block": {
-            "start": "highlight-start",
-            "end": "highlight-end"
-          }
-        }
-      ]
-    },
-    "tableOfContents": {
-      "minHeadingLevel": 2,
-      "maxHeadingLevel": 3
-    },
-    "mermaid": {
-      "theme": {
-        "dark": "dark",
-        "light": "default"
-      },
-      "options": {}
-    }
-  },
-  "baseUrlIssueBanner": true,
-  "onBrokenLinks": "warn",
-  "onBrokenMarkdownLinks": "warn",
-  "onDuplicateRoutes": "warn",
-  "staticDirectories": [
-    "static",
-    "/home/jenkins/workspace/website/codex.storage/node_modules/@acid-info/logos-docusaurus-preset/static/common",
-    "/home/jenkins/workspace/website/codex.storage/node_modules/@acid-info/logos-docusaurus-preset/static/Codex",
-    "/home/jenkins/workspace/website/codex.storage/node_modules/@acid-info/logos-docusaurus-theme/lib/client/static/"
-  ],
-  "themes": [],
-  "scripts": [],
-  "headTags": [],
-  "stylesheets": [],
-  "clientModules": [],
-  "tagline": "Codex is building a Decentralized Durability Engine",
-  "titleDelimiter": "|",
-  "noIndex": false,
-  "favicon": "theme/image/favicon.ico"
-});
-
-
-/***/ }),
-
-/***/ 87462:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (/* binding */ _extends)
-/* harmony export */ });
-function _extends() {
-  _extends = Object.assign ? Object.assign.bind() : function (target) {
-    for (var i = 1; i < arguments.length; i++) {
-      var source = arguments[i];
-
-      for (var key in source) {
-        if (Object.prototype.hasOwnProperty.call(source, key)) {
-          target[key] = source[key];
-        }
-      }
-    }
-
-    return target;
-  };
-  return _extends.apply(this, arguments);
-}
-
-/***/ }),
-
-/***/ 75068:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _inheritsLoose)
-});
-
-;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/setPrototypeOf.js
-function _setPrototypeOf(o, p) {
-  _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) {
-    o.__proto__ = p;
-    return o;
-  };
-  return _setPrototypeOf(o, p);
-}
-;// CONCATENATED MODULE: ./node_modules/@babel/runtime/helpers/esm/inheritsLoose.js
-
-function _inheritsLoose(subClass, superClass) {
-  subClass.prototype = Object.create(superClass.prototype);
-  subClass.prototype.constructor = subClass;
-  _setPrototypeOf(subClass, superClass);
-}
-
-/***/ }),
-
-/***/ 63366:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (/* binding */ _objectWithoutPropertiesLoose)
-/* harmony export */ });
-function _objectWithoutPropertiesLoose(source, excluded) {
-  if (source == null) return {};
-  var target = {};
-  var sourceKeys = Object.keys(source);
-  var key, i;
-
-  for (i = 0; i < sourceKeys.length; i++) {
-    key = sourceKeys[i];
-    if (excluded.indexOf(key) >= 0) continue;
-    target[key] = source[key];
-  }
-
-  return target;
-}
-
-/***/ }),
-
-/***/ 32111:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "default": () => (/* binding */ copyTextToClipboard)
-/* harmony export */ });
-function copyTextToClipboard(input,{target=document.body}={}){const element=document.createElement('textarea');const previouslyFocusedElement=document.activeElement;element.value=input;// Prevent keyboard from showing on mobile
-element.setAttribute('readonly','');element.style.contain='strict';element.style.position='absolute';element.style.left='-9999px';element.style.fontSize='12pt';// Prevent zooming on iOS
-const selection=document.getSelection();let originalRange=false;if(selection.rangeCount>0){originalRange=selection.getRangeAt(0);}target.append(element);element.select();// Explicit selection workaround for iOS
-element.selectionStart=0;element.selectionEnd=input.length;let isSuccess=false;try{isSuccess=document.execCommand('copy');}catch{}element.remove();if(originalRange){selection.removeAllRanges();selection.addRange(originalRange);}// Get the focus back on the previously focused element, if any
-if(previouslyFocusedElement){previouslyFocusedElement.focus();}return isSuccess;}
-
-/***/ }),
-
-/***/ 59373:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Nb1": () => (/* reexport */ arc),
-  "LLu": () => (/* reexport */ axisBottom),
-  "F5q": () => (/* reexport */ axisTop),
-  "$0Z": () => (/* reexport */ curve_basis),
-  "Dts": () => (/* reexport */ curve_basisClosed),
-  "WQY": () => (/* reexport */ basisOpen),
-  "qpX": () => (/* reexport */ bumpX),
-  "u93": () => (/* reexport */ bumpY),
-  "tFB": () => (/* reexport */ bundle),
-  "YY7": () => (/* reexport */ cardinal),
-  "OvA": () => (/* reexport */ cardinalClosed),
-  "dCK": () => (/* reexport */ cardinalOpen),
-  "zgE": () => (/* reexport */ catmullRom),
-  "fGX": () => (/* reexport */ catmullRomClosed),
-  "$m7": () => (/* reexport */ catmullRomOpen),
-  "c_6": () => (/* reexport */ curve_linear),
-  "fxm": () => (/* reexport */ linearClosed),
-  "FdL": () => (/* reexport */ monotoneX),
-  "ak_": () => (/* reexport */ monotoneY),
-  "SxZ": () => (/* reexport */ natural),
-  "eA_": () => (/* reexport */ step),
-  "jsv": () => (/* reexport */ stepAfter),
-  "iJ": () => (/* reexport */ stepBefore),
-  "JHv": () => (/* reexport */ src_hcl),
-  "jvg": () => (/* reexport */ line),
-  "Fp7": () => (/* reexport */ max),
-  "VV$": () => (/* reexport */ min),
-  "ve8": () => (/* reexport */ pie),
-  "BYU": () => (/* reexport */ linear_linear),
-  "PKp": () => (/* reexport */ ordinal),
-  "Xf": () => (/* reexport */ time),
-  "Ys": () => (/* reexport */ src_select),
-  "td_": () => (/* reexport */ src_selectAll),
-  "YPS": () => (/* reexport */ svg),
-  "rr1": () => (/* reexport */ timeDay),
-  "i$Z": () => (/* reexport */ timeFormat),
-  "WQD": () => (/* reexport */ timeHour),
-  "Z_i": () => (/* reexport */ timeMinute),
-  "F0B": () => (/* reexport */ timeMonth),
-  "NGh": () => (/* reexport */ timeSunday)
-});
-
-// UNUSED EXPORTS: Adder, Delaunay, FormatSpecifier, InternMap, InternSet, Node, Path, Voronoi, ZoomTransform, active, area, areaRadial, ascending, autoType, axisLeft, axisRight, bin, bisect, bisectCenter, bisectLeft, bisectRight, bisector, blob, blur, blur2, blurImage, brush, brushSelection, brushX, brushY, buffer, chord, chordDirected, chordTranspose, cluster, color, contourDensity, contours, count, create, creator, cross, csv, csvFormat, csvFormatBody, csvFormatRow, csvFormatRows, csvFormatValue, csvParse, csvParseRows, cubehelix, cumsum, descending, deviation, difference, disjoint, dispatch, drag, dragDisable, dragEnable, dsv, dsvFormat, easeBack, easeBackIn, easeBackInOut, easeBackOut, easeBounce, easeBounceIn, easeBounceInOut, easeBounceOut, easeCircle, easeCircleIn, easeCircleInOut, easeCircleOut, easeCubic, easeCubicIn, easeCubicInOut, easeCubicOut, easeElastic, easeElasticIn, easeElasticInOut, easeElasticOut, easeExp, easeExpIn, easeExpInOut, easeExpOut, easeLinear, easePoly, easePolyIn, easePolyInOut, easePolyOut, easeQuad, easeQuadIn, easeQuadInOut, easeQuadOut, easeSin, easeSinIn, easeSinInOut, easeSinOut, every, extent, fcumsum, filter, flatGroup, flatRollup, forceCenter, forceCollide, forceLink, forceManyBody, forceRadial, forceSimulation, forceX, forceY, format, formatDefaultLocale, formatLocale, formatPrefix, formatSpecifier, fsum, geoAlbers, geoAlbersUsa, geoArea, geoAzimuthalEqualArea, geoAzimuthalEqualAreaRaw, geoAzimuthalEquidistant, geoAzimuthalEquidistantRaw, geoBounds, geoCentroid, geoCircle, geoClipAntimeridian, geoClipCircle, geoClipExtent, geoClipRectangle, geoConicConformal, geoConicConformalRaw, geoConicEqualArea, geoConicEqualAreaRaw, geoConicEquidistant, geoConicEquidistantRaw, geoContains, geoDistance, geoEqualEarth, geoEqualEarthRaw, geoEquirectangular, geoEquirectangularRaw, geoGnomonic, geoGnomonicRaw, geoGraticule, geoGraticule10, geoIdentity, geoInterpolate, geoLength, geoMercator, geoMercatorRaw, geoNaturalEarth1, geoNaturalEarth1Raw, geoOrthographic, geoOrthographicRaw, geoPath, geoProjection, geoProjectionMutator, geoRotation, geoStereographic, geoStereographicRaw, geoStream, geoTransform, geoTransverseMercator, geoTransverseMercatorRaw, gray, greatest, greatestIndex, group, groupSort, groups, hcl, hierarchy, histogram, hsl, html, image, index, indexes, interpolate, interpolateArray, interpolateBasis, interpolateBasisClosed, interpolateBlues, interpolateBrBG, interpolateBuGn, interpolateBuPu, interpolateCividis, interpolateCool, interpolateCubehelix, interpolateCubehelixDefault, interpolateCubehelixLong, interpolateDate, interpolateDiscrete, interpolateGnBu, interpolateGreens, interpolateGreys, interpolateHclLong, interpolateHsl, interpolateHslLong, interpolateHue, interpolateInferno, interpolateLab, interpolateMagma, interpolateNumber, interpolateNumberArray, interpolateObject, interpolateOrRd, interpolateOranges, interpolatePRGn, interpolatePiYG, interpolatePlasma, interpolatePuBu, interpolatePuBuGn, interpolatePuOr, interpolatePuRd, interpolatePurples, interpolateRainbow, interpolateRdBu, interpolateRdGy, interpolateRdPu, interpolateRdYlBu, interpolateRdYlGn, interpolateReds, interpolateRgb, interpolateRgbBasis, interpolateRgbBasisClosed, interpolateRound, interpolateSinebow, interpolateSpectral, interpolateString, interpolateTransformCss, interpolateTransformSvg, interpolateTurbo, interpolateViridis, interpolateWarm, interpolateYlGn, interpolateYlGnBu, interpolateYlOrBr, interpolateYlOrRd, interpolateZoom, interrupt, intersection, interval, isoFormat, isoParse, json, lab, lch, least, leastIndex, lineRadial, link, linkHorizontal, linkRadial, linkVertical, local, map, matcher, maxIndex, mean, median, medianIndex, merge, minIndex, mode, namespace, namespaces, nice, now, pack, packEnclose, packSiblings, pairs, partition, path, pathRound, permute, piecewise, pointRadial, pointer, pointers, polygonArea, polygonCentroid, polygonContains, polygonHull, polygonLength, precisionFixed, precisionPrefix, precisionRound, quadtree, quantile, quantileIndex, quantileSorted, quantize, quickselect, radialArea, radialLine, randomBates, randomBernoulli, randomBeta, randomBinomial, randomCauchy, randomExponential, randomGamma, randomGeometric, randomInt, randomIrwinHall, randomLcg, randomLogNormal, randomLogistic, randomNormal, randomPareto, randomPoisson, randomUniform, randomWeibull, range, rank, reduce, reverse, rgb, ribbon, ribbonArrow, rollup, rollups, scaleBand, scaleDiverging, scaleDivergingLog, scaleDivergingPow, scaleDivergingSqrt, scaleDivergingSymlog, scaleIdentity, scaleImplicit, scaleLog, scalePoint, scalePow, scaleQuantile, scaleQuantize, scaleRadial, scaleSequential, scaleSequentialLog, scaleSequentialPow, scaleSequentialQuantile, scaleSequentialSqrt, scaleSequentialSymlog, scaleSqrt, scaleSymlog, scaleThreshold, scaleUtc, scan, schemeAccent, schemeBlues, schemeBrBG, schemeBuGn, schemeBuPu, schemeCategory10, schemeDark2, schemeGnBu, schemeGreens, schemeGreys, schemeOrRd, schemeOranges, schemePRGn, schemePaired, schemePastel1, schemePastel2, schemePiYG, schemePuBu, schemePuBuGn, schemePuOr, schemePuRd, schemePurples, schemeRdBu, schemeRdGy, schemeRdPu, schemeRdYlBu, schemeRdYlGn, schemeReds, schemeSet1, schemeSet2, schemeSet3, schemeSpectral, schemeTableau10, schemeYlGn, schemeYlGnBu, schemeYlOrBr, schemeYlOrRd, selection, selector, selectorAll, shuffle, shuffler, some, sort, stack, stackOffsetDiverging, stackOffsetExpand, stackOffsetNone, stackOffsetSilhouette, stackOffsetWiggle, stackOrderAppearance, stackOrderAscending, stackOrderDescending, stackOrderInsideOut, stackOrderNone, stackOrderReverse, stratify, style, subset, sum, superset, symbol, symbolAsterisk, symbolCircle, symbolCross, symbolDiamond, symbolDiamond2, symbolPlus, symbolSquare, symbolSquare2, symbolStar, symbolTimes, symbolTriangle, symbolTriangle2, symbolWye, symbolX, symbols, symbolsFill, symbolsStroke, text, thresholdFreedmanDiaconis, thresholdScott, thresholdSturges, tickFormat, tickIncrement, tickStep, ticks, timeDays, timeFormatDefaultLocale, timeFormatLocale, timeFriday, timeFridays, timeHours, timeInterval, timeMillisecond, timeMilliseconds, timeMinutes, timeMonday, timeMondays, timeMonths, timeParse, timeSaturday, timeSaturdays, timeSecond, timeSeconds, timeSunday, timeSundays, timeThursday, timeThursdays, timeTickInterval, timeTicks, timeTuesday, timeTuesdays, timeWednesday, timeWednesdays, timeWeeks, timeYear, timeYears, timeout, timer, timerFlush, transition, transpose, tree, treemap, treemapBinary, treemapDice, treemapResquarify, treemapSlice, treemapSliceDice, treemapSquarify, tsv, tsvFormat, tsvFormatBody, tsvFormatRow, tsvFormatRows, tsvFormatValue, tsvParse, tsvParseRows, union, unixDay, unixDays, utcDay, utcDays, utcFormat, utcFriday, utcFridays, utcHour, utcHours, utcMillisecond, utcMilliseconds, utcMinute, utcMinutes, utcMonday, utcMondays, utcMonth, utcMonths, utcParse, utcSaturday, utcSaturdays, utcSecond, utcSeconds, utcSunday, utcSundays, utcThursday, utcThursdays, utcTickInterval, utcTicks, utcTuesday, utcTuesdays, utcWednesday, utcWednesdays, utcWeek, utcWeeks, utcYear, utcYears, variance, window, xml, zip, zoom, zoomIdentity, zoomTransform
-
-;// CONCATENATED MODULE: ./node_modules/d3-array/src/max.js
-function max(values, valueof) {
-  let max;
-  if (valueof === undefined) {
-    for (const value of values) {
-      if (value != null
-          && (max < value || (max === undefined && value >= value))) {
-        max = value;
-      }
-    }
-  } else {
-    let index = -1;
-    for (let value of values) {
-      if ((value = valueof(value, ++index, values)) != null
-          && (max < value || (max === undefined && value >= value))) {
-        max = value;
-      }
-    }
-  }
-  return max;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-array/src/min.js
-function min(values, valueof) {
-  let min;
-  if (valueof === undefined) {
-    for (const value of values) {
-      if (value != null
-          && (min > value || (min === undefined && value >= value))) {
-        min = value;
-      }
-    }
-  } else {
-    let index = -1;
-    for (let value of values) {
-      if ((value = valueof(value, ++index, values)) != null
-          && (min > value || (min === undefined && value >= value))) {
-        min = value;
-      }
-    }
-  }
-  return min;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-array/src/index.js
-
-
-
-
-
-
-
-
-
-
-
-
-
- // Deprecated; use bin.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- // Deprecated; use leastIndex.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;// CONCATENATED MODULE: ./node_modules/d3-axis/src/identity.js
-/* harmony default export */ function src_identity(x) {
-  return x;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-axis/src/axis.js
-
-
-var axis_top = 1,
-    right = 2,
-    bottom = 3,
-    left = 4,
-    epsilon = 1e-6;
-
-function translateX(x) {
-  return "translate(" + x + ",0)";
-}
-
-function translateY(y) {
-  return "translate(0," + y + ")";
-}
-
-function number(scale) {
-  return d => +scale(d);
-}
-
-function center(scale, offset) {
-  offset = Math.max(0, scale.bandwidth() - offset * 2) / 2;
-  if (scale.round()) offset = Math.round(offset);
-  return d => +scale(d) + offset;
-}
-
-function entering() {
-  return !this.__axis;
-}
-
-function axis(orient, scale) {
-  var tickArguments = [],
-      tickValues = null,
-      tickFormat = null,
-      tickSizeInner = 6,
-      tickSizeOuter = 6,
-      tickPadding = 3,
-      offset = typeof window !== "undefined" && window.devicePixelRatio > 1 ? 0 : 0.5,
-      k = orient === axis_top || orient === left ? -1 : 1,
-      x = orient === left || orient === right ? "x" : "y",
-      transform = orient === axis_top || orient === bottom ? translateX : translateY;
-
-  function axis(context) {
-    var values = tickValues == null ? (scale.ticks ? scale.ticks.apply(scale, tickArguments) : scale.domain()) : tickValues,
-        format = tickFormat == null ? (scale.tickFormat ? scale.tickFormat.apply(scale, tickArguments) : src_identity) : tickFormat,
-        spacing = Math.max(tickSizeInner, 0) + tickPadding,
-        range = scale.range(),
-        range0 = +range[0] + offset,
-        range1 = +range[range.length - 1] + offset,
-        position = (scale.bandwidth ? center : number)(scale.copy(), offset),
-        selection = context.selection ? context.selection() : context,
-        path = selection.selectAll(".domain").data([null]),
-        tick = selection.selectAll(".tick").data(values, scale).order(),
-        tickExit = tick.exit(),
-        tickEnter = tick.enter().append("g").attr("class", "tick"),
-        line = tick.select("line"),
-        text = tick.select("text");
-
-    path = path.merge(path.enter().insert("path", ".tick")
-        .attr("class", "domain")
-        .attr("stroke", "currentColor"));
-
-    tick = tick.merge(tickEnter);
-
-    line = line.merge(tickEnter.append("line")
-        .attr("stroke", "currentColor")
-        .attr(x + "2", k * tickSizeInner));
-
-    text = text.merge(tickEnter.append("text")
-        .attr("fill", "currentColor")
-        .attr(x, k * spacing)
-        .attr("dy", orient === axis_top ? "0em" : orient === bottom ? "0.71em" : "0.32em"));
-
-    if (context !== selection) {
-      path = path.transition(context);
-      tick = tick.transition(context);
-      line = line.transition(context);
-      text = text.transition(context);
-
-      tickExit = tickExit.transition(context)
-          .attr("opacity", epsilon)
-          .attr("transform", function(d) { return isFinite(d = position(d)) ? transform(d + offset) : this.getAttribute("transform"); });
-
-      tickEnter
-          .attr("opacity", epsilon)
-          .attr("transform", function(d) { var p = this.parentNode.__axis; return transform((p && isFinite(p = p(d)) ? p : position(d)) + offset); });
-    }
-
-    tickExit.remove();
-
-    path
-        .attr("d", orient === left || orient === right
-            ? (tickSizeOuter ? "M" + k * tickSizeOuter + "," + range0 + "H" + offset + "V" + range1 + "H" + k * tickSizeOuter : "M" + offset + "," + range0 + "V" + range1)
-            : (tickSizeOuter ? "M" + range0 + "," + k * tickSizeOuter + "V" + offset + "H" + range1 + "V" + k * tickSizeOuter : "M" + range0 + "," + offset + "H" + range1));
-
-    tick
-        .attr("opacity", 1)
-        .attr("transform", function(d) { return transform(position(d) + offset); });
-
-    line
-        .attr(x + "2", k * tickSizeInner);
-
-    text
-        .attr(x, k * spacing)
-        .text(format);
-
-    selection.filter(entering)
-        .attr("fill", "none")
-        .attr("font-size", 10)
-        .attr("font-family", "sans-serif")
-        .attr("text-anchor", orient === right ? "start" : orient === left ? "end" : "middle");
-
-    selection
-        .each(function() { this.__axis = position; });
-  }
-
-  axis.scale = function(_) {
-    return arguments.length ? (scale = _, axis) : scale;
-  };
-
-  axis.ticks = function() {
-    return tickArguments = Array.from(arguments), axis;
-  };
-
-  axis.tickArguments = function(_) {
-    return arguments.length ? (tickArguments = _ == null ? [] : Array.from(_), axis) : tickArguments.slice();
-  };
-
-  axis.tickValues = function(_) {
-    return arguments.length ? (tickValues = _ == null ? null : Array.from(_), axis) : tickValues && tickValues.slice();
-  };
-
-  axis.tickFormat = function(_) {
-    return arguments.length ? (tickFormat = _, axis) : tickFormat;
-  };
-
-  axis.tickSize = function(_) {
-    return arguments.length ? (tickSizeInner = tickSizeOuter = +_, axis) : tickSizeInner;
-  };
-
-  axis.tickSizeInner = function(_) {
-    return arguments.length ? (tickSizeInner = +_, axis) : tickSizeInner;
-  };
-
-  axis.tickSizeOuter = function(_) {
-    return arguments.length ? (tickSizeOuter = +_, axis) : tickSizeOuter;
-  };
-
-  axis.tickPadding = function(_) {
-    return arguments.length ? (tickPadding = +_, axis) : tickPadding;
-  };
-
-  axis.offset = function(_) {
-    return arguments.length ? (offset = +_, axis) : offset;
-  };
-
-  return axis;
-}
-
-function axisTop(scale) {
-  return axis(axis_top, scale);
-}
-
-function axisRight(scale) {
-  return axis(right, scale);
-}
-
-function axisBottom(scale) {
-  return axis(bottom, scale);
-}
-
-function axisLeft(scale) {
-  return axis(left, scale);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-axis/src/index.js
-
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selector.js
-function none() {}
-
-/* harmony default export */ function selector(selector) {
-  return selector == null ? none : function() {
-    return this.querySelector(selector);
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/select.js
-
-
-
-/* harmony default export */ function selection_select(select) {
-  if (typeof select !== "function") select = selector(select);
-
-  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
-    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
-      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
-        if ("__data__" in node) subnode.__data__ = node.__data__;
-        subgroup[i] = subnode;
-      }
-    }
-  }
-
-  return new Selection(subgroups, this._parents);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/array.js
-// Given something array like (or null), returns something that is strictly an
-// array. This is used to ensure that array-like objects passed to d3.selectAll
-// or selection.selectAll are converted into proper arrays when creating a
-// selection; we don’t ever want to create a selection backed by a live
-// HTMLCollection or NodeList. However, note that selection.selectAll will use a
-// static NodeList as a group, since it safely derived from querySelectorAll.
-function array(x) {
-  return x == null ? [] : Array.isArray(x) ? x : Array.from(x);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selectorAll.js
-function empty() {
-  return [];
-}
-
-/* harmony default export */ function selectorAll(selector) {
-  return selector == null ? empty : function() {
-    return this.querySelectorAll(selector);
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/selectAll.js
-
-
-
-
-function arrayAll(select) {
-  return function() {
-    return array(select.apply(this, arguments));
-  };
-}
-
-/* harmony default export */ function selectAll(select) {
-  if (typeof select === "function") select = arrayAll(select);
-  else select = selectorAll(select);
-
-  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
-    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
-      if (node = group[i]) {
-        subgroups.push(select.call(node, node.__data__, i, group));
-        parents.push(node);
-      }
-    }
-  }
-
-  return new Selection(subgroups, parents);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/matcher.js
-/* harmony default export */ function matcher(selector) {
-  return function() {
-    return this.matches(selector);
-  };
-}
-
-function childMatcher(selector) {
-  return function(node) {
-    return node.matches(selector);
-  };
-}
-
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/selectChild.js
-
-
-var find = Array.prototype.find;
-
-function childFind(match) {
-  return function() {
-    return find.call(this.children, match);
-  };
-}
-
-function childFirst() {
-  return this.firstElementChild;
-}
-
-/* harmony default export */ function selectChild(match) {
-  return this.select(match == null ? childFirst
-      : childFind(typeof match === "function" ? match : childMatcher(match)));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/selectChildren.js
-
-
-var filter = Array.prototype.filter;
-
-function children() {
-  return Array.from(this.children);
-}
-
-function childrenFilter(match) {
-  return function() {
-    return filter.call(this.children, match);
-  };
-}
-
-/* harmony default export */ function selectChildren(match) {
-  return this.selectAll(match == null ? children
-      : childrenFilter(typeof match === "function" ? match : childMatcher(match)));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/filter.js
-
-
-
-/* harmony default export */ function selection_filter(match) {
-  if (typeof match !== "function") match = matcher(match);
-
-  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
-    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
-      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
-        subgroup.push(node);
-      }
-    }
-  }
-
-  return new Selection(subgroups, this._parents);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/sparse.js
-/* harmony default export */ function sparse(update) {
-  return new Array(update.length);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/enter.js
-
-
-
-/* harmony default export */ function enter() {
-  return new Selection(this._enter || this._groups.map(sparse), this._parents);
-}
-
-function EnterNode(parent, datum) {
-  this.ownerDocument = parent.ownerDocument;
-  this.namespaceURI = parent.namespaceURI;
-  this._next = null;
-  this._parent = parent;
-  this.__data__ = datum;
-}
-
-EnterNode.prototype = {
-  constructor: EnterNode,
-  appendChild: function(child) { return this._parent.insertBefore(child, this._next); },
-  insertBefore: function(child, next) { return this._parent.insertBefore(child, next); },
-  querySelector: function(selector) { return this._parent.querySelector(selector); },
-  querySelectorAll: function(selector) { return this._parent.querySelectorAll(selector); }
-};
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/constant.js
-/* harmony default export */ function src_constant(x) {
-  return function() {
-    return x;
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/data.js
-
-
-
-
-function bindIndex(parent, group, enter, update, exit, data) {
-  var i = 0,
-      node,
-      groupLength = group.length,
-      dataLength = data.length;
-
-  // Put any non-null nodes that fit into update.
-  // Put any null nodes into enter.
-  // Put any remaining data into enter.
-  for (; i < dataLength; ++i) {
-    if (node = group[i]) {
-      node.__data__ = data[i];
-      update[i] = node;
-    } else {
-      enter[i] = new EnterNode(parent, data[i]);
-    }
-  }
-
-  // Put any non-null nodes that don’t fit into exit.
-  for (; i < groupLength; ++i) {
-    if (node = group[i]) {
-      exit[i] = node;
-    }
-  }
-}
-
-function bindKey(parent, group, enter, update, exit, data, key) {
-  var i,
-      node,
-      nodeByKeyValue = new Map,
-      groupLength = group.length,
-      dataLength = data.length,
-      keyValues = new Array(groupLength),
-      keyValue;
-
-  // Compute the key for each node.
-  // If multiple nodes have the same key, the duplicates are added to exit.
-  for (i = 0; i < groupLength; ++i) {
-    if (node = group[i]) {
-      keyValues[i] = keyValue = key.call(node, node.__data__, i, group) + "";
-      if (nodeByKeyValue.has(keyValue)) {
-        exit[i] = node;
-      } else {
-        nodeByKeyValue.set(keyValue, node);
-      }
-    }
-  }
-
-  // Compute the key for each datum.
-  // If there a node associated with this key, join and add it to update.
-  // If there is not (or the key is a duplicate), add it to enter.
-  for (i = 0; i < dataLength; ++i) {
-    keyValue = key.call(parent, data[i], i, data) + "";
-    if (node = nodeByKeyValue.get(keyValue)) {
-      update[i] = node;
-      node.__data__ = data[i];
-      nodeByKeyValue.delete(keyValue);
-    } else {
-      enter[i] = new EnterNode(parent, data[i]);
-    }
-  }
-
-  // Add any remaining nodes that were not bound to data to exit.
-  for (i = 0; i < groupLength; ++i) {
-    if ((node = group[i]) && (nodeByKeyValue.get(keyValues[i]) === node)) {
-      exit[i] = node;
-    }
-  }
-}
-
-function datum(node) {
-  return node.__data__;
-}
-
-/* harmony default export */ function data(value, key) {
-  if (!arguments.length) return Array.from(this, datum);
-
-  var bind = key ? bindKey : bindIndex,
-      parents = this._parents,
-      groups = this._groups;
-
-  if (typeof value !== "function") value = src_constant(value);
-
-  for (var m = groups.length, update = new Array(m), enter = new Array(m), exit = new Array(m), j = 0; j < m; ++j) {
-    var parent = parents[j],
-        group = groups[j],
-        groupLength = group.length,
-        data = arraylike(value.call(parent, parent && parent.__data__, j, parents)),
-        dataLength = data.length,
-        enterGroup = enter[j] = new Array(dataLength),
-        updateGroup = update[j] = new Array(dataLength),
-        exitGroup = exit[j] = new Array(groupLength);
-
-    bind(parent, group, enterGroup, updateGroup, exitGroup, data, key);
-
-    // Now connect the enter nodes to their following update node, such that
-    // appendChild can insert the materialized enter node before this node,
-    // rather than at the end of the parent node.
-    for (var i0 = 0, i1 = 0, previous, next; i0 < dataLength; ++i0) {
-      if (previous = enterGroup[i0]) {
-        if (i0 >= i1) i1 = i0 + 1;
-        while (!(next = updateGroup[i1]) && ++i1 < dataLength);
-        previous._next = next || null;
-      }
-    }
-  }
-
-  update = new Selection(update, parents);
-  update._enter = enter;
-  update._exit = exit;
-  return update;
-}
-
-// Given some data, this returns an array-like view of it: an object that
-// exposes a length property and allows numeric indexing. Note that unlike
-// selectAll, this isn’t worried about “live” collections because the resulting
-// array will only be used briefly while data is being bound. (It is possible to
-// cause the data to change while iterating by using a key function, but please
-// don’t; we’d rather avoid a gratuitous copy.)
-function arraylike(data) {
-  return typeof data === "object" && "length" in data
-    ? data // Array, TypedArray, NodeList, array-like
-    : Array.from(data); // Map, Set, iterable, string, or anything else
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/exit.js
-
-
-
-/* harmony default export */ function exit() {
-  return new Selection(this._exit || this._groups.map(sparse), this._parents);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/join.js
-/* harmony default export */ function join(onenter, onupdate, onexit) {
-  var enter = this.enter(), update = this, exit = this.exit();
-  if (typeof onenter === "function") {
-    enter = onenter(enter);
-    if (enter) enter = enter.selection();
-  } else {
-    enter = enter.append(onenter + "");
-  }
-  if (onupdate != null) {
-    update = onupdate(update);
-    if (update) update = update.selection();
-  }
-  if (onexit == null) exit.remove(); else onexit(exit);
-  return enter && update ? enter.merge(update).order() : update;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/merge.js
-
-
-/* harmony default export */ function merge(context) {
-  var selection = context.selection ? context.selection() : context;
-
-  for (var groups0 = this._groups, groups1 = selection._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
-    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
-      if (node = group0[i] || group1[i]) {
-        merge[i] = node;
-      }
-    }
-  }
-
-  for (; j < m0; ++j) {
-    merges[j] = groups0[j];
-  }
-
-  return new Selection(merges, this._parents);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/order.js
-/* harmony default export */ function order() {
-
-  for (var groups = this._groups, j = -1, m = groups.length; ++j < m;) {
-    for (var group = groups[j], i = group.length - 1, next = group[i], node; --i >= 0;) {
-      if (node = group[i]) {
-        if (next && node.compareDocumentPosition(next) ^ 4) next.parentNode.insertBefore(node, next);
-        next = node;
-      }
-    }
-  }
-
-  return this;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/sort.js
-
-
-/* harmony default export */ function sort(compare) {
-  if (!compare) compare = ascending;
-
-  function compareNode(a, b) {
-    return a && b ? compare(a.__data__, b.__data__) : !a - !b;
-  }
-
-  for (var groups = this._groups, m = groups.length, sortgroups = new Array(m), j = 0; j < m; ++j) {
-    for (var group = groups[j], n = group.length, sortgroup = sortgroups[j] = new Array(n), node, i = 0; i < n; ++i) {
-      if (node = group[i]) {
-        sortgroup[i] = node;
-      }
-    }
-    sortgroup.sort(compareNode);
-  }
-
-  return new Selection(sortgroups, this._parents).order();
-}
-
-function ascending(a, b) {
-  return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/call.js
-/* harmony default export */ function call() {
-  var callback = arguments[0];
-  arguments[0] = this;
-  callback.apply(null, arguments);
-  return this;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/nodes.js
-/* harmony default export */ function nodes() {
-  return Array.from(this);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/node.js
-/* harmony default export */ function node() {
-
-  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
-    for (var group = groups[j], i = 0, n = group.length; i < n; ++i) {
-      var node = group[i];
-      if (node) return node;
-    }
-  }
-
-  return null;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/size.js
-/* harmony default export */ function size() {
-  let size = 0;
-  for (const node of this) ++size; // eslint-disable-line no-unused-vars
-  return size;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/empty.js
-/* harmony default export */ function selection_empty() {
-  return !this.node();
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/each.js
-/* harmony default export */ function each(callback) {
-
-  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
-    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
-      if (node = group[i]) callback.call(node, node.__data__, i, group);
-    }
-  }
-
-  return this;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/namespaces.js
-var xhtml = "http://www.w3.org/1999/xhtml";
-
-/* harmony default export */ const namespaces = ({
-  svg: "http://www.w3.org/2000/svg",
-  xhtml: xhtml,
-  xlink: "http://www.w3.org/1999/xlink",
-  xml: "http://www.w3.org/XML/1998/namespace",
-  xmlns: "http://www.w3.org/2000/xmlns/"
-});
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/namespace.js
-
-
-/* harmony default export */ function namespace(name) {
-  var prefix = name += "", i = prefix.indexOf(":");
-  if (i >= 0 && (prefix = name.slice(0, i)) !== "xmlns") name = name.slice(i + 1);
-  return namespaces.hasOwnProperty(prefix) ? {space: namespaces[prefix], local: name} : name; // eslint-disable-line no-prototype-builtins
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/attr.js
-
-
-function attrRemove(name) {
-  return function() {
-    this.removeAttribute(name);
-  };
-}
-
-function attrRemoveNS(fullname) {
-  return function() {
-    this.removeAttributeNS(fullname.space, fullname.local);
-  };
-}
-
-function attrConstant(name, value) {
-  return function() {
-    this.setAttribute(name, value);
-  };
-}
-
-function attrConstantNS(fullname, value) {
-  return function() {
-    this.setAttributeNS(fullname.space, fullname.local, value);
-  };
-}
-
-function attrFunction(name, value) {
-  return function() {
-    var v = value.apply(this, arguments);
-    if (v == null) this.removeAttribute(name);
-    else this.setAttribute(name, v);
-  };
-}
-
-function attrFunctionNS(fullname, value) {
-  return function() {
-    var v = value.apply(this, arguments);
-    if (v == null) this.removeAttributeNS(fullname.space, fullname.local);
-    else this.setAttributeNS(fullname.space, fullname.local, v);
-  };
-}
-
-/* harmony default export */ function attr(name, value) {
-  var fullname = namespace(name);
-
-  if (arguments.length < 2) {
-    var node = this.node();
-    return fullname.local
-        ? node.getAttributeNS(fullname.space, fullname.local)
-        : node.getAttribute(fullname);
-  }
-
-  return this.each((value == null
-      ? (fullname.local ? attrRemoveNS : attrRemove) : (typeof value === "function"
-      ? (fullname.local ? attrFunctionNS : attrFunction)
-      : (fullname.local ? attrConstantNS : attrConstant)))(fullname, value));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/window.js
-/* harmony default export */ function src_window(node) {
-  return (node.ownerDocument && node.ownerDocument.defaultView) // node is a Node
-      || (node.document && node) // node is a Window
-      || node.defaultView; // node is a Document
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/style.js
-
-
-function styleRemove(name) {
-  return function() {
-    this.style.removeProperty(name);
-  };
-}
-
-function styleConstant(name, value, priority) {
-  return function() {
-    this.style.setProperty(name, value, priority);
-  };
-}
-
-function styleFunction(name, value, priority) {
-  return function() {
-    var v = value.apply(this, arguments);
-    if (v == null) this.style.removeProperty(name);
-    else this.style.setProperty(name, v, priority);
-  };
-}
-
-/* harmony default export */ function style(name, value, priority) {
-  return arguments.length > 1
-      ? this.each((value == null
-            ? styleRemove : typeof value === "function"
-            ? styleFunction
-            : styleConstant)(name, value, priority == null ? "" : priority))
-      : styleValue(this.node(), name);
-}
-
-function styleValue(node, name) {
-  return node.style.getPropertyValue(name)
-      || src_window(node).getComputedStyle(node, null).getPropertyValue(name);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/property.js
-function propertyRemove(name) {
-  return function() {
-    delete this[name];
-  };
-}
-
-function propertyConstant(name, value) {
-  return function() {
-    this[name] = value;
-  };
-}
-
-function propertyFunction(name, value) {
-  return function() {
-    var v = value.apply(this, arguments);
-    if (v == null) delete this[name];
-    else this[name] = v;
-  };
-}
-
-/* harmony default export */ function property(name, value) {
-  return arguments.length > 1
-      ? this.each((value == null
-          ? propertyRemove : typeof value === "function"
-          ? propertyFunction
-          : propertyConstant)(name, value))
-      : this.node()[name];
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/classed.js
-function classArray(string) {
-  return string.trim().split(/^|\s+/);
-}
-
-function classList(node) {
-  return node.classList || new ClassList(node);
-}
-
-function ClassList(node) {
-  this._node = node;
-  this._names = classArray(node.getAttribute("class") || "");
-}
-
-ClassList.prototype = {
-  add: function(name) {
-    var i = this._names.indexOf(name);
-    if (i < 0) {
-      this._names.push(name);
-      this._node.setAttribute("class", this._names.join(" "));
-    }
-  },
-  remove: function(name) {
-    var i = this._names.indexOf(name);
-    if (i >= 0) {
-      this._names.splice(i, 1);
-      this._node.setAttribute("class", this._names.join(" "));
-    }
-  },
-  contains: function(name) {
-    return this._names.indexOf(name) >= 0;
-  }
-};
-
-function classedAdd(node, names) {
-  var list = classList(node), i = -1, n = names.length;
-  while (++i < n) list.add(names[i]);
-}
-
-function classedRemove(node, names) {
-  var list = classList(node), i = -1, n = names.length;
-  while (++i < n) list.remove(names[i]);
-}
-
-function classedTrue(names) {
-  return function() {
-    classedAdd(this, names);
-  };
-}
-
-function classedFalse(names) {
-  return function() {
-    classedRemove(this, names);
-  };
-}
-
-function classedFunction(names, value) {
-  return function() {
-    (value.apply(this, arguments) ? classedAdd : classedRemove)(this, names);
-  };
-}
-
-/* harmony default export */ function classed(name, value) {
-  var names = classArray(name + "");
-
-  if (arguments.length < 2) {
-    var list = classList(this.node()), i = -1, n = names.length;
-    while (++i < n) if (!list.contains(names[i])) return false;
-    return true;
-  }
-
-  return this.each((typeof value === "function"
-      ? classedFunction : value
-      ? classedTrue
-      : classedFalse)(names, value));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/text.js
-function textRemove() {
-  this.textContent = "";
-}
-
-function textConstant(value) {
-  return function() {
-    this.textContent = value;
-  };
-}
-
-function textFunction(value) {
-  return function() {
-    var v = value.apply(this, arguments);
-    this.textContent = v == null ? "" : v;
-  };
-}
-
-/* harmony default export */ function selection_text(value) {
-  return arguments.length
-      ? this.each(value == null
-          ? textRemove : (typeof value === "function"
-          ? textFunction
-          : textConstant)(value))
-      : this.node().textContent;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/html.js
-function htmlRemove() {
-  this.innerHTML = "";
-}
-
-function htmlConstant(value) {
-  return function() {
-    this.innerHTML = value;
-  };
-}
-
-function htmlFunction(value) {
-  return function() {
-    var v = value.apply(this, arguments);
-    this.innerHTML = v == null ? "" : v;
-  };
-}
-
-/* harmony default export */ function html(value) {
-  return arguments.length
-      ? this.each(value == null
-          ? htmlRemove : (typeof value === "function"
-          ? htmlFunction
-          : htmlConstant)(value))
-      : this.node().innerHTML;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/raise.js
-function raise() {
-  if (this.nextSibling) this.parentNode.appendChild(this);
-}
-
-/* harmony default export */ function selection_raise() {
-  return this.each(raise);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/lower.js
-function lower() {
-  if (this.previousSibling) this.parentNode.insertBefore(this, this.parentNode.firstChild);
-}
-
-/* harmony default export */ function selection_lower() {
-  return this.each(lower);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/creator.js
-
-
-
-function creatorInherit(name) {
-  return function() {
-    var document = this.ownerDocument,
-        uri = this.namespaceURI;
-    return uri === xhtml && document.documentElement.namespaceURI === xhtml
-        ? document.createElement(name)
-        : document.createElementNS(uri, name);
-  };
-}
-
-function creatorFixed(fullname) {
-  return function() {
-    return this.ownerDocument.createElementNS(fullname.space, fullname.local);
-  };
-}
-
-/* harmony default export */ function creator(name) {
-  var fullname = namespace(name);
-  return (fullname.local
-      ? creatorFixed
-      : creatorInherit)(fullname);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/append.js
-
-
-/* harmony default export */ function append(name) {
-  var create = typeof name === "function" ? name : creator(name);
-  return this.select(function() {
-    return this.appendChild(create.apply(this, arguments));
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/insert.js
-
-
-
-function constantNull() {
-  return null;
-}
-
-/* harmony default export */ function insert(name, before) {
-  var create = typeof name === "function" ? name : creator(name),
-      select = before == null ? constantNull : typeof before === "function" ? before : selector(before);
-  return this.select(function() {
-    return this.insertBefore(create.apply(this, arguments), select.apply(this, arguments) || null);
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/remove.js
-function remove() {
-  var parent = this.parentNode;
-  if (parent) parent.removeChild(this);
-}
-
-/* harmony default export */ function selection_remove() {
-  return this.each(remove);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/clone.js
-function selection_cloneShallow() {
-  var clone = this.cloneNode(false), parent = this.parentNode;
-  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
-}
-
-function selection_cloneDeep() {
-  var clone = this.cloneNode(true), parent = this.parentNode;
-  return parent ? parent.insertBefore(clone, this.nextSibling) : clone;
-}
-
-/* harmony default export */ function clone(deep) {
-  return this.select(deep ? selection_cloneDeep : selection_cloneShallow);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/datum.js
-/* harmony default export */ function selection_datum(value) {
-  return arguments.length
-      ? this.property("__data__", value)
-      : this.node().__data__;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/on.js
-function contextListener(listener) {
-  return function(event) {
-    listener.call(this, event, this.__data__);
-  };
-}
-
-function parseTypenames(typenames) {
-  return typenames.trim().split(/^|\s+/).map(function(t) {
-    var name = "", i = t.indexOf(".");
-    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
-    return {type: t, name: name};
-  });
-}
-
-function onRemove(typename) {
-  return function() {
-    var on = this.__on;
-    if (!on) return;
-    for (var j = 0, i = -1, m = on.length, o; j < m; ++j) {
-      if (o = on[j], (!typename.type || o.type === typename.type) && o.name === typename.name) {
-        this.removeEventListener(o.type, o.listener, o.options);
-      } else {
-        on[++i] = o;
-      }
-    }
-    if (++i) on.length = i;
-    else delete this.__on;
-  };
-}
-
-function onAdd(typename, value, options) {
-  return function() {
-    var on = this.__on, o, listener = contextListener(value);
-    if (on) for (var j = 0, m = on.length; j < m; ++j) {
-      if ((o = on[j]).type === typename.type && o.name === typename.name) {
-        this.removeEventListener(o.type, o.listener, o.options);
-        this.addEventListener(o.type, o.listener = listener, o.options = options);
-        o.value = value;
-        return;
-      }
-    }
-    this.addEventListener(typename.type, listener, options);
-    o = {type: typename.type, name: typename.name, value: value, listener: listener, options: options};
-    if (!on) this.__on = [o];
-    else on.push(o);
-  };
-}
-
-/* harmony default export */ function on(typename, value, options) {
-  var typenames = parseTypenames(typename + ""), i, n = typenames.length, t;
-
-  if (arguments.length < 2) {
-    var on = this.node().__on;
-    if (on) for (var j = 0, m = on.length, o; j < m; ++j) {
-      for (i = 0, o = on[j]; i < n; ++i) {
-        if ((t = typenames[i]).type === o.type && t.name === o.name) {
-          return o.value;
-        }
-      }
-    }
-    return;
-  }
-
-  on = value ? onAdd : onRemove;
-  for (i = 0; i < n; ++i) this.each(on(typenames[i], value, options));
-  return this;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/dispatch.js
-
-
-function dispatchEvent(node, type, params) {
-  var window = src_window(node),
-      event = window.CustomEvent;
-
-  if (typeof event === "function") {
-    event = new event(type, params);
-  } else {
-    event = window.document.createEvent("Event");
-    if (params) event.initEvent(type, params.bubbles, params.cancelable), event.detail = params.detail;
-    else event.initEvent(type, false, false);
-  }
-
-  node.dispatchEvent(event);
-}
-
-function dispatchConstant(type, params) {
-  return function() {
-    return dispatchEvent(this, type, params);
-  };
-}
-
-function dispatchFunction(type, params) {
-  return function() {
-    return dispatchEvent(this, type, params.apply(this, arguments));
-  };
-}
-
-/* harmony default export */ function selection_dispatch(type, params) {
-  return this.each((typeof params === "function"
-      ? dispatchFunction
-      : dispatchConstant)(type, params));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/iterator.js
-/* harmony default export */ function* iterator() {
-  for (var groups = this._groups, j = 0, m = groups.length; j < m; ++j) {
-    for (var group = groups[j], i = 0, n = group.length, node; i < n; ++i) {
-      if (node = group[i]) yield node;
-    }
-  }
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selection/index.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-var root = [null];
-
-function Selection(groups, parents) {
-  this._groups = groups;
-  this._parents = parents;
-}
-
-function selection() {
-  return new Selection([[document.documentElement]], root);
-}
-
-function selection_selection() {
-  return this;
-}
-
-Selection.prototype = selection.prototype = {
-  constructor: Selection,
-  select: selection_select,
-  selectAll: selectAll,
-  selectChild: selectChild,
-  selectChildren: selectChildren,
-  filter: selection_filter,
-  data: data,
-  enter: enter,
-  exit: exit,
-  join: join,
-  merge: merge,
-  selection: selection_selection,
-  order: order,
-  sort: sort,
-  call: call,
-  nodes: nodes,
-  node: node,
-  size: size,
-  empty: selection_empty,
-  each: each,
-  attr: attr,
-  style: style,
-  property: property,
-  classed: classed,
-  text: selection_text,
-  html: html,
-  raise: selection_raise,
-  lower: selection_lower,
-  append: append,
-  insert: insert,
-  remove: selection_remove,
-  clone: clone,
-  datum: selection_datum,
-  on: on,
-  dispatch: selection_dispatch,
-  [Symbol.iterator]: iterator
-};
-
-/* harmony default export */ const src_selection = (selection);
-
-;// CONCATENATED MODULE: ./node_modules/d3-dispatch/src/dispatch.js
-var noop = {value: () => {}};
-
-function dispatch_dispatch() {
-  for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {
-    if (!(t = arguments[i] + "") || (t in _) || /[\s.]/.test(t)) throw new Error("illegal type: " + t);
-    _[t] = [];
-  }
-  return new Dispatch(_);
-}
-
-function Dispatch(_) {
-  this._ = _;
-}
-
-function dispatch_parseTypenames(typenames, types) {
-  return typenames.trim().split(/^|\s+/).map(function(t) {
-    var name = "", i = t.indexOf(".");
-    if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);
-    if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t);
-    return {type: t, name: name};
-  });
-}
-
-Dispatch.prototype = dispatch_dispatch.prototype = {
-  constructor: Dispatch,
-  on: function(typename, callback) {
-    var _ = this._,
-        T = dispatch_parseTypenames(typename + "", _),
-        t,
-        i = -1,
-        n = T.length;
-
-    // If no callback was specified, return the callback of the given type and name.
-    if (arguments.length < 2) {
-      while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;
-      return;
-    }
-
-    // If a type was specified, set the callback for the given type and name.
-    // Otherwise, if a null callback was specified, remove callbacks of the given name.
-    if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback);
-    while (++i < n) {
-      if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);
-      else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);
-    }
-
-    return this;
-  },
-  copy: function() {
-    var copy = {}, _ = this._;
-    for (var t in _) copy[t] = _[t].slice();
-    return new Dispatch(copy);
-  },
-  call: function(type, that) {
-    if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];
-    if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
-    for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
-  },
-  apply: function(type, that, args) {
-    if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type);
-    for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);
-  }
-};
-
-function get(type, name) {
-  for (var i = 0, n = type.length, c; i < n; ++i) {
-    if ((c = type[i]).name === name) {
-      return c.value;
-    }
-  }
-}
-
-function set(type, name, callback) {
-  for (var i = 0, n = type.length; i < n; ++i) {
-    if (type[i].name === name) {
-      type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));
-      break;
-    }
-  }
-  if (callback != null) type.push({name: name, value: callback});
-  return type;
-}
-
-/* harmony default export */ const src_dispatch = (dispatch_dispatch);
-
-;// CONCATENATED MODULE: ./node_modules/d3-timer/src/timer.js
-var timer_frame = 0, // is an animation frame pending?
-    timeout = 0, // is a timeout pending?
-    interval = 0, // are any timers active?
-    pokeDelay = 1000, // how frequently we check for clock skew
-    taskHead,
-    taskTail,
-    clockLast = 0,
-    clockNow = 0,
-    clockSkew = 0,
-    clock = typeof performance === "object" && performance.now ? performance : Date,
-    setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };
-
-function now() {
-  return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);
-}
-
-function clearNow() {
-  clockNow = 0;
-}
-
-function Timer() {
-  this._call =
-  this._time =
-  this._next = null;
-}
-
-Timer.prototype = timer.prototype = {
-  constructor: Timer,
-  restart: function(callback, delay, time) {
-    if (typeof callback !== "function") throw new TypeError("callback is not a function");
-    time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);
-    if (!this._next && taskTail !== this) {
-      if (taskTail) taskTail._next = this;
-      else taskHead = this;
-      taskTail = this;
-    }
-    this._call = callback;
-    this._time = time;
-    sleep();
-  },
-  stop: function() {
-    if (this._call) {
-      this._call = null;
-      this._time = Infinity;
-      sleep();
-    }
-  }
-};
-
-function timer(callback, delay, time) {
-  var t = new Timer;
-  t.restart(callback, delay, time);
-  return t;
-}
-
-function timerFlush() {
-  now(); // Get the current time, if not already set.
-  ++timer_frame; // Pretend we’ve set an alarm, if we haven’t already.
-  var t = taskHead, e;
-  while (t) {
-    if ((e = clockNow - t._time) >= 0) t._call.call(undefined, e);
-    t = t._next;
-  }
-  --timer_frame;
-}
-
-function wake() {
-  clockNow = (clockLast = clock.now()) + clockSkew;
-  timer_frame = timeout = 0;
-  try {
-    timerFlush();
-  } finally {
-    timer_frame = 0;
-    nap();
-    clockNow = 0;
-  }
-}
-
-function poke() {
-  var now = clock.now(), delay = now - clockLast;
-  if (delay > pokeDelay) clockSkew -= delay, clockLast = now;
-}
-
-function nap() {
-  var t0, t1 = taskHead, t2, time = Infinity;
-  while (t1) {
-    if (t1._call) {
-      if (time > t1._time) time = t1._time;
-      t0 = t1, t1 = t1._next;
-    } else {
-      t2 = t1._next, t1._next = null;
-      t1 = t0 ? t0._next = t2 : taskHead = t2;
-    }
-  }
-  taskTail = t0;
-  sleep(time);
-}
-
-function sleep(time) {
-  if (timer_frame) return; // Soonest alarm already set, or will be.
-  if (timeout) timeout = clearTimeout(timeout);
-  var delay = time - clockNow; // Strictly less than if we recomputed clockNow.
-  if (delay > 24) {
-    if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);
-    if (interval) interval = clearInterval(interval);
-  } else {
-    if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);
-    timer_frame = 1, setFrame(wake);
-  }
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-timer/src/timeout.js
-
-
-/* harmony default export */ function src_timeout(callback, delay, time) {
-  var t = new Timer;
-  delay = delay == null ? 0 : +delay;
-  t.restart(elapsed => {
-    t.stop();
-    callback(elapsed + delay);
-  }, delay, time);
-  return t;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/schedule.js
-
-
-
-var emptyOn = src_dispatch("start", "end", "cancel", "interrupt");
-var emptyTween = [];
-
-var CREATED = 0;
-var SCHEDULED = 1;
-var STARTING = 2;
-var STARTED = 3;
-var RUNNING = 4;
-var ENDING = 5;
-var ENDED = 6;
-
-/* harmony default export */ function schedule(node, name, id, index, group, timing) {
-  var schedules = node.__transition;
-  if (!schedules) node.__transition = {};
-  else if (id in schedules) return;
-  create(node, id, {
-    name: name,
-    index: index, // For context during callback.
-    group: group, // For context during callback.
-    on: emptyOn,
-    tween: emptyTween,
-    time: timing.time,
-    delay: timing.delay,
-    duration: timing.duration,
-    ease: timing.ease,
-    timer: null,
-    state: CREATED
-  });
-}
-
-function init(node, id) {
-  var schedule = schedule_get(node, id);
-  if (schedule.state > CREATED) throw new Error("too late; already scheduled");
-  return schedule;
-}
-
-function schedule_set(node, id) {
-  var schedule = schedule_get(node, id);
-  if (schedule.state > STARTED) throw new Error("too late; already running");
-  return schedule;
-}
-
-function schedule_get(node, id) {
-  var schedule = node.__transition;
-  if (!schedule || !(schedule = schedule[id])) throw new Error("transition not found");
-  return schedule;
-}
-
-function create(node, id, self) {
-  var schedules = node.__transition,
-      tween;
-
-  // Initialize the self timer when the transition is created.
-  // Note the actual delay is not known until the first callback!
-  schedules[id] = self;
-  self.timer = timer(schedule, 0, self.time);
-
-  function schedule(elapsed) {
-    self.state = SCHEDULED;
-    self.timer.restart(start, self.delay, self.time);
-
-    // If the elapsed delay is less than our first sleep, start immediately.
-    if (self.delay <= elapsed) start(elapsed - self.delay);
-  }
-
-  function start(elapsed) {
-    var i, j, n, o;
-
-    // If the state is not SCHEDULED, then we previously errored on start.
-    if (self.state !== SCHEDULED) return stop();
-
-    for (i in schedules) {
-      o = schedules[i];
-      if (o.name !== self.name) continue;
-
-      // While this element already has a starting transition during this frame,
-      // defer starting an interrupting transition until that transition has a
-      // chance to tick (and possibly end); see d3/d3-transition#54!
-      if (o.state === STARTED) return src_timeout(start);
-
-      // Interrupt the active transition, if any.
-      if (o.state === RUNNING) {
-        o.state = ENDED;
-        o.timer.stop();
-        o.on.call("interrupt", node, node.__data__, o.index, o.group);
-        delete schedules[i];
-      }
-
-      // Cancel any pre-empted transitions.
-      else if (+i < id) {
-        o.state = ENDED;
-        o.timer.stop();
-        o.on.call("cancel", node, node.__data__, o.index, o.group);
-        delete schedules[i];
-      }
-    }
-
-    // Defer the first tick to end of the current frame; see d3/d3#1576.
-    // Note the transition may be canceled after start and before the first tick!
-    // Note this must be scheduled before the start event; see d3/d3-transition#16!
-    // Assuming this is successful, subsequent callbacks go straight to tick.
-    src_timeout(function() {
-      if (self.state === STARTED) {
-        self.state = RUNNING;
-        self.timer.restart(tick, self.delay, self.time);
-        tick(elapsed);
-      }
-    });
-
-    // Dispatch the start event.
-    // Note this must be done before the tween are initialized.
-    self.state = STARTING;
-    self.on.call("start", node, node.__data__, self.index, self.group);
-    if (self.state !== STARTING) return; // interrupted
-    self.state = STARTED;
-
-    // Initialize the tween, deleting null tween.
-    tween = new Array(n = self.tween.length);
-    for (i = 0, j = -1; i < n; ++i) {
-      if (o = self.tween[i].value.call(node, node.__data__, self.index, self.group)) {
-        tween[++j] = o;
-      }
-    }
-    tween.length = j + 1;
-  }
-
-  function tick(elapsed) {
-    var t = elapsed < self.duration ? self.ease.call(null, elapsed / self.duration) : (self.timer.restart(stop), self.state = ENDING, 1),
-        i = -1,
-        n = tween.length;
-
-    while (++i < n) {
-      tween[i].call(node, t);
-    }
-
-    // Dispatch the end event.
-    if (self.state === ENDING) {
-      self.on.call("end", node, node.__data__, self.index, self.group);
-      stop();
-    }
-  }
-
-  function stop() {
-    self.state = ENDED;
-    self.timer.stop();
-    delete schedules[id];
-    for (var i in schedules) return; // eslint-disable-line no-unused-vars
-    delete node.__transition;
-  }
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/interrupt.js
-
-
-/* harmony default export */ function src_interrupt(node, name) {
-  var schedules = node.__transition,
-      schedule,
-      active,
-      empty = true,
-      i;
-
-  if (!schedules) return;
-
-  name = name == null ? null : name + "";
-
-  for (i in schedules) {
-    if ((schedule = schedules[i]).name !== name) { empty = false; continue; }
-    active = schedule.state > STARTING && schedule.state < ENDING;
-    schedule.state = ENDED;
-    schedule.timer.stop();
-    schedule.on.call(active ? "interrupt" : "cancel", node, node.__data__, schedule.index, schedule.group);
-    delete schedules[i];
-  }
-
-  if (empty) delete node.__transition;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/selection/interrupt.js
-
-
-/* harmony default export */ function selection_interrupt(name) {
-  return this.each(function() {
-    src_interrupt(this, name);
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/number.js
-/* harmony default export */ function src_number(a, b) {
-  return a = +a, b = +b, function(t) {
-    return a * (1 - t) + b * t;
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/transform/decompose.js
-var degrees = 180 / Math.PI;
-
-var decompose_identity = {
-  translateX: 0,
-  translateY: 0,
-  rotate: 0,
-  skewX: 0,
-  scaleX: 1,
-  scaleY: 1
-};
-
-/* harmony default export */ function decompose(a, b, c, d, e, f) {
-  var scaleX, scaleY, skewX;
-  if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;
-  if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;
-  if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;
-  if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;
-  return {
-    translateX: e,
-    translateY: f,
-    rotate: Math.atan2(b, a) * degrees,
-    skewX: Math.atan(skewX) * degrees,
-    scaleX: scaleX,
-    scaleY: scaleY
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/transform/parse.js
-
-
-var svgNode;
-
-/* eslint-disable no-undef */
-function parseCss(value) {
-  const m = new (typeof DOMMatrix === "function" ? DOMMatrix : WebKitCSSMatrix)(value + "");
-  return m.isIdentity ? decompose_identity : decompose(m.a, m.b, m.c, m.d, m.e, m.f);
-}
-
-function parseSvg(value) {
-  if (value == null) return decompose_identity;
-  if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g");
-  svgNode.setAttribute("transform", value);
-  if (!(value = svgNode.transform.baseVal.consolidate())) return decompose_identity;
-  value = value.matrix;
-  return decompose(value.a, value.b, value.c, value.d, value.e, value.f);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/transform/index.js
-
-
-
-function interpolateTransform(parse, pxComma, pxParen, degParen) {
-
-  function pop(s) {
-    return s.length ? s.pop() + " " : "";
-  }
-
-  function translate(xa, ya, xb, yb, s, q) {
-    if (xa !== xb || ya !== yb) {
-      var i = s.push("translate(", null, pxComma, null, pxParen);
-      q.push({i: i - 4, x: src_number(xa, xb)}, {i: i - 2, x: src_number(ya, yb)});
-    } else if (xb || yb) {
-      s.push("translate(" + xb + pxComma + yb + pxParen);
-    }
-  }
-
-  function rotate(a, b, s, q) {
-    if (a !== b) {
-      if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path
-      q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: src_number(a, b)});
-    } else if (b) {
-      s.push(pop(s) + "rotate(" + b + degParen);
-    }
-  }
-
-  function skewX(a, b, s, q) {
-    if (a !== b) {
-      q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: src_number(a, b)});
-    } else if (b) {
-      s.push(pop(s) + "skewX(" + b + degParen);
-    }
-  }
-
-  function scale(xa, ya, xb, yb, s, q) {
-    if (xa !== xb || ya !== yb) {
-      var i = s.push(pop(s) + "scale(", null, ",", null, ")");
-      q.push({i: i - 4, x: src_number(xa, xb)}, {i: i - 2, x: src_number(ya, yb)});
-    } else if (xb !== 1 || yb !== 1) {
-      s.push(pop(s) + "scale(" + xb + "," + yb + ")");
-    }
-  }
-
-  return function(a, b) {
-    var s = [], // string constants and placeholders
-        q = []; // number interpolators
-    a = parse(a), b = parse(b);
-    translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);
-    rotate(a.rotate, b.rotate, s, q);
-    skewX(a.skewX, b.skewX, s, q);
-    scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);
-    a = b = null; // gc
-    return function(t) {
-      var i = -1, n = q.length, o;
-      while (++i < n) s[(o = q[i]).i] = o.x(t);
-      return s.join("");
-    };
-  };
-}
-
-var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)");
-var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")");
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/tween.js
-
-
-function tweenRemove(id, name) {
-  var tween0, tween1;
-  return function() {
-    var schedule = schedule_set(this, id),
-        tween = schedule.tween;
-
-    // If this node shared tween with the previous node,
-    // just assign the updated shared tween and we’re done!
-    // Otherwise, copy-on-write.
-    if (tween !== tween0) {
-      tween1 = tween0 = tween;
-      for (var i = 0, n = tween1.length; i < n; ++i) {
-        if (tween1[i].name === name) {
-          tween1 = tween1.slice();
-          tween1.splice(i, 1);
-          break;
-        }
-      }
-    }
-
-    schedule.tween = tween1;
-  };
-}
-
-function tweenFunction(id, name, value) {
-  var tween0, tween1;
-  if (typeof value !== "function") throw new Error;
-  return function() {
-    var schedule = schedule_set(this, id),
-        tween = schedule.tween;
-
-    // If this node shared tween with the previous node,
-    // just assign the updated shared tween and we’re done!
-    // Otherwise, copy-on-write.
-    if (tween !== tween0) {
-      tween1 = (tween0 = tween).slice();
-      for (var t = {name: name, value: value}, i = 0, n = tween1.length; i < n; ++i) {
-        if (tween1[i].name === name) {
-          tween1[i] = t;
-          break;
-        }
-      }
-      if (i === n) tween1.push(t);
-    }
-
-    schedule.tween = tween1;
-  };
-}
-
-/* harmony default export */ function tween(name, value) {
-  var id = this._id;
-
-  name += "";
-
-  if (arguments.length < 2) {
-    var tween = schedule_get(this.node(), id).tween;
-    for (var i = 0, n = tween.length, t; i < n; ++i) {
-      if ((t = tween[i]).name === name) {
-        return t.value;
-      }
-    }
-    return null;
-  }
-
-  return this.each((value == null ? tweenRemove : tweenFunction)(id, name, value));
-}
-
-function tweenValue(transition, name, value) {
-  var id = transition._id;
-
-  transition.each(function() {
-    var schedule = schedule_set(this, id);
-    (schedule.value || (schedule.value = {}))[name] = value.apply(this, arguments);
-  });
-
-  return function(node) {
-    return schedule_get(node, id).value[name];
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-color/src/define.js
-/* harmony default export */ function src_define(constructor, factory, prototype) {
-  constructor.prototype = factory.prototype = prototype;
-  prototype.constructor = constructor;
-}
-
-function extend(parent, definition) {
-  var prototype = Object.create(parent.prototype);
-  for (var key in definition) prototype[key] = definition[key];
-  return prototype;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-color/src/color.js
-
-
-function Color() {}
-
-var darker = 0.7;
-var brighter = 1 / darker;
-
-var reI = "\\s*([+-]?\\d+)\\s*",
-    reN = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)\\s*",
-    reP = "\\s*([+-]?(?:\\d*\\.)?\\d+(?:[eE][+-]?\\d+)?)%\\s*",
-    reHex = /^#([0-9a-f]{3,8})$/,
-    reRgbInteger = new RegExp(`^rgb\\(${reI},${reI},${reI}\\)$`),
-    reRgbPercent = new RegExp(`^rgb\\(${reP},${reP},${reP}\\)$`),
-    reRgbaInteger = new RegExp(`^rgba\\(${reI},${reI},${reI},${reN}\\)$`),
-    reRgbaPercent = new RegExp(`^rgba\\(${reP},${reP},${reP},${reN}\\)$`),
-    reHslPercent = new RegExp(`^hsl\\(${reN},${reP},${reP}\\)$`),
-    reHslaPercent = new RegExp(`^hsla\\(${reN},${reP},${reP},${reN}\\)$`);
-
-var named = {
-  aliceblue: 0xf0f8ff,
-  antiquewhite: 0xfaebd7,
-  aqua: 0x00ffff,
-  aquamarine: 0x7fffd4,
-  azure: 0xf0ffff,
-  beige: 0xf5f5dc,
-  bisque: 0xffe4c4,
-  black: 0x000000,
-  blanchedalmond: 0xffebcd,
-  blue: 0x0000ff,
-  blueviolet: 0x8a2be2,
-  brown: 0xa52a2a,
-  burlywood: 0xdeb887,
-  cadetblue: 0x5f9ea0,
-  chartreuse: 0x7fff00,
-  chocolate: 0xd2691e,
-  coral: 0xff7f50,
-  cornflowerblue: 0x6495ed,
-  cornsilk: 0xfff8dc,
-  crimson: 0xdc143c,
-  cyan: 0x00ffff,
-  darkblue: 0x00008b,
-  darkcyan: 0x008b8b,
-  darkgoldenrod: 0xb8860b,
-  darkgray: 0xa9a9a9,
-  darkgreen: 0x006400,
-  darkgrey: 0xa9a9a9,
-  darkkhaki: 0xbdb76b,
-  darkmagenta: 0x8b008b,
-  darkolivegreen: 0x556b2f,
-  darkorange: 0xff8c00,
-  darkorchid: 0x9932cc,
-  darkred: 0x8b0000,
-  darksalmon: 0xe9967a,
-  darkseagreen: 0x8fbc8f,
-  darkslateblue: 0x483d8b,
-  darkslategray: 0x2f4f4f,
-  darkslategrey: 0x2f4f4f,
-  darkturquoise: 0x00ced1,
-  darkviolet: 0x9400d3,
-  deeppink: 0xff1493,
-  deepskyblue: 0x00bfff,
-  dimgray: 0x696969,
-  dimgrey: 0x696969,
-  dodgerblue: 0x1e90ff,
-  firebrick: 0xb22222,
-  floralwhite: 0xfffaf0,
-  forestgreen: 0x228b22,
-  fuchsia: 0xff00ff,
-  gainsboro: 0xdcdcdc,
-  ghostwhite: 0xf8f8ff,
-  gold: 0xffd700,
-  goldenrod: 0xdaa520,
-  gray: 0x808080,
-  green: 0x008000,
-  greenyellow: 0xadff2f,
-  grey: 0x808080,
-  honeydew: 0xf0fff0,
-  hotpink: 0xff69b4,
-  indianred: 0xcd5c5c,
-  indigo: 0x4b0082,
-  ivory: 0xfffff0,
-  khaki: 0xf0e68c,
-  lavender: 0xe6e6fa,
-  lavenderblush: 0xfff0f5,
-  lawngreen: 0x7cfc00,
-  lemonchiffon: 0xfffacd,
-  lightblue: 0xadd8e6,
-  lightcoral: 0xf08080,
-  lightcyan: 0xe0ffff,
-  lightgoldenrodyellow: 0xfafad2,
-  lightgray: 0xd3d3d3,
-  lightgreen: 0x90ee90,
-  lightgrey: 0xd3d3d3,
-  lightpink: 0xffb6c1,
-  lightsalmon: 0xffa07a,
-  lightseagreen: 0x20b2aa,
-  lightskyblue: 0x87cefa,
-  lightslategray: 0x778899,
-  lightslategrey: 0x778899,
-  lightsteelblue: 0xb0c4de,
-  lightyellow: 0xffffe0,
-  lime: 0x00ff00,
-  limegreen: 0x32cd32,
-  linen: 0xfaf0e6,
-  magenta: 0xff00ff,
-  maroon: 0x800000,
-  mediumaquamarine: 0x66cdaa,
-  mediumblue: 0x0000cd,
-  mediumorchid: 0xba55d3,
-  mediumpurple: 0x9370db,
-  mediumseagreen: 0x3cb371,
-  mediumslateblue: 0x7b68ee,
-  mediumspringgreen: 0x00fa9a,
-  mediumturquoise: 0x48d1cc,
-  mediumvioletred: 0xc71585,
-  midnightblue: 0x191970,
-  mintcream: 0xf5fffa,
-  mistyrose: 0xffe4e1,
-  moccasin: 0xffe4b5,
-  navajowhite: 0xffdead,
-  navy: 0x000080,
-  oldlace: 0xfdf5e6,
-  olive: 0x808000,
-  olivedrab: 0x6b8e23,
-  orange: 0xffa500,
-  orangered: 0xff4500,
-  orchid: 0xda70d6,
-  palegoldenrod: 0xeee8aa,
-  palegreen: 0x98fb98,
-  paleturquoise: 0xafeeee,
-  palevioletred: 0xdb7093,
-  papayawhip: 0xffefd5,
-  peachpuff: 0xffdab9,
-  peru: 0xcd853f,
-  pink: 0xffc0cb,
-  plum: 0xdda0dd,
-  powderblue: 0xb0e0e6,
-  purple: 0x800080,
-  rebeccapurple: 0x663399,
-  red: 0xff0000,
-  rosybrown: 0xbc8f8f,
-  royalblue: 0x4169e1,
-  saddlebrown: 0x8b4513,
-  salmon: 0xfa8072,
-  sandybrown: 0xf4a460,
-  seagreen: 0x2e8b57,
-  seashell: 0xfff5ee,
-  sienna: 0xa0522d,
-  silver: 0xc0c0c0,
-  skyblue: 0x87ceeb,
-  slateblue: 0x6a5acd,
-  slategray: 0x708090,
-  slategrey: 0x708090,
-  snow: 0xfffafa,
-  springgreen: 0x00ff7f,
-  steelblue: 0x4682b4,
-  tan: 0xd2b48c,
-  teal: 0x008080,
-  thistle: 0xd8bfd8,
-  tomato: 0xff6347,
-  turquoise: 0x40e0d0,
-  violet: 0xee82ee,
-  wheat: 0xf5deb3,
-  white: 0xffffff,
-  whitesmoke: 0xf5f5f5,
-  yellow: 0xffff00,
-  yellowgreen: 0x9acd32
-};
-
-src_define(Color, color, {
-  copy(channels) {
-    return Object.assign(new this.constructor, this, channels);
-  },
-  displayable() {
-    return this.rgb().displayable();
-  },
-  hex: color_formatHex, // Deprecated! Use color.formatHex.
-  formatHex: color_formatHex,
-  formatHex8: color_formatHex8,
-  formatHsl: color_formatHsl,
-  formatRgb: color_formatRgb,
-  toString: color_formatRgb
-});
-
-function color_formatHex() {
-  return this.rgb().formatHex();
-}
-
-function color_formatHex8() {
-  return this.rgb().formatHex8();
-}
-
-function color_formatHsl() {
-  return hslConvert(this).formatHsl();
-}
-
-function color_formatRgb() {
-  return this.rgb().formatRgb();
-}
-
-function color(format) {
-  var m, l;
-  format = (format + "").trim().toLowerCase();
-  return (m = reHex.exec(format)) ? (l = m[1].length, m = parseInt(m[1], 16), l === 6 ? rgbn(m) // #ff0000
-      : l === 3 ? new Rgb((m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1) // #f00
-      : l === 8 ? rgba(m >> 24 & 0xff, m >> 16 & 0xff, m >> 8 & 0xff, (m & 0xff) / 0xff) // #ff000000
-      : l === 4 ? rgba((m >> 12 & 0xf) | (m >> 8 & 0xf0), (m >> 8 & 0xf) | (m >> 4 & 0xf0), (m >> 4 & 0xf) | (m & 0xf0), (((m & 0xf) << 4) | (m & 0xf)) / 0xff) // #f000
-      : null) // invalid hex
-      : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)
-      : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)
-      : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)
-      : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)
-      : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)
-      : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)
-      : named.hasOwnProperty(format) ? rgbn(named[format]) // eslint-disable-line no-prototype-builtins
-      : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0)
-      : null;
-}
-
-function rgbn(n) {
-  return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);
-}
-
-function rgba(r, g, b, a) {
-  if (a <= 0) r = g = b = NaN;
-  return new Rgb(r, g, b, a);
-}
-
-function rgbConvert(o) {
-  if (!(o instanceof Color)) o = color(o);
-  if (!o) return new Rgb;
-  o = o.rgb();
-  return new Rgb(o.r, o.g, o.b, o.opacity);
-}
-
-function color_rgb(r, g, b, opacity) {
-  return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);
-}
-
-function Rgb(r, g, b, opacity) {
-  this.r = +r;
-  this.g = +g;
-  this.b = +b;
-  this.opacity = +opacity;
-}
-
-src_define(Rgb, color_rgb, extend(Color, {
-  brighter(k) {
-    k = k == null ? brighter : Math.pow(brighter, k);
-    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
-  },
-  darker(k) {
-    k = k == null ? darker : Math.pow(darker, k);
-    return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);
-  },
-  rgb() {
-    return this;
-  },
-  clamp() {
-    return new Rgb(clampi(this.r), clampi(this.g), clampi(this.b), clampa(this.opacity));
-  },
-  displayable() {
-    return (-0.5 <= this.r && this.r < 255.5)
-        && (-0.5 <= this.g && this.g < 255.5)
-        && (-0.5 <= this.b && this.b < 255.5)
-        && (0 <= this.opacity && this.opacity <= 1);
-  },
-  hex: rgb_formatHex, // Deprecated! Use color.formatHex.
-  formatHex: rgb_formatHex,
-  formatHex8: rgb_formatHex8,
-  formatRgb: rgb_formatRgb,
-  toString: rgb_formatRgb
-}));
-
-function rgb_formatHex() {
-  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}`;
-}
-
-function rgb_formatHex8() {
-  return `#${hex(this.r)}${hex(this.g)}${hex(this.b)}${hex((isNaN(this.opacity) ? 1 : this.opacity) * 255)}`;
-}
-
-function rgb_formatRgb() {
-  const a = clampa(this.opacity);
-  return `${a === 1 ? "rgb(" : "rgba("}${clampi(this.r)}, ${clampi(this.g)}, ${clampi(this.b)}${a === 1 ? ")" : `, ${a})`}`;
-}
-
-function clampa(opacity) {
-  return isNaN(opacity) ? 1 : Math.max(0, Math.min(1, opacity));
-}
-
-function clampi(value) {
-  return Math.max(0, Math.min(255, Math.round(value) || 0));
-}
-
-function hex(value) {
-  value = clampi(value);
-  return (value < 16 ? "0" : "") + value.toString(16);
-}
-
-function hsla(h, s, l, a) {
-  if (a <= 0) h = s = l = NaN;
-  else if (l <= 0 || l >= 1) h = s = NaN;
-  else if (s <= 0) h = NaN;
-  return new Hsl(h, s, l, a);
-}
-
-function hslConvert(o) {
-  if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);
-  if (!(o instanceof Color)) o = color(o);
-  if (!o) return new Hsl;
-  if (o instanceof Hsl) return o;
-  o = o.rgb();
-  var r = o.r / 255,
-      g = o.g / 255,
-      b = o.b / 255,
-      min = Math.min(r, g, b),
-      max = Math.max(r, g, b),
-      h = NaN,
-      s = max - min,
-      l = (max + min) / 2;
-  if (s) {
-    if (r === max) h = (g - b) / s + (g < b) * 6;
-    else if (g === max) h = (b - r) / s + 2;
-    else h = (r - g) / s + 4;
-    s /= l < 0.5 ? max + min : 2 - max - min;
-    h *= 60;
-  } else {
-    s = l > 0 && l < 1 ? 0 : h;
-  }
-  return new Hsl(h, s, l, o.opacity);
-}
-
-function hsl(h, s, l, opacity) {
-  return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);
-}
-
-function Hsl(h, s, l, opacity) {
-  this.h = +h;
-  this.s = +s;
-  this.l = +l;
-  this.opacity = +opacity;
-}
-
-src_define(Hsl, hsl, extend(Color, {
-  brighter(k) {
-    k = k == null ? brighter : Math.pow(brighter, k);
-    return new Hsl(this.h, this.s, this.l * k, this.opacity);
-  },
-  darker(k) {
-    k = k == null ? darker : Math.pow(darker, k);
-    return new Hsl(this.h, this.s, this.l * k, this.opacity);
-  },
-  rgb() {
-    var h = this.h % 360 + (this.h < 0) * 360,
-        s = isNaN(h) || isNaN(this.s) ? 0 : this.s,
-        l = this.l,
-        m2 = l + (l < 0.5 ? l : 1 - l) * s,
-        m1 = 2 * l - m2;
-    return new Rgb(
-      hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),
-      hsl2rgb(h, m1, m2),
-      hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),
-      this.opacity
-    );
-  },
-  clamp() {
-    return new Hsl(clamph(this.h), clampt(this.s), clampt(this.l), clampa(this.opacity));
-  },
-  displayable() {
-    return (0 <= this.s && this.s <= 1 || isNaN(this.s))
-        && (0 <= this.l && this.l <= 1)
-        && (0 <= this.opacity && this.opacity <= 1);
-  },
-  formatHsl() {
-    const a = clampa(this.opacity);
-    return `${a === 1 ? "hsl(" : "hsla("}${clamph(this.h)}, ${clampt(this.s) * 100}%, ${clampt(this.l) * 100}%${a === 1 ? ")" : `, ${a})`}`;
-  }
-}));
-
-function clamph(value) {
-  value = (value || 0) % 360;
-  return value < 0 ? value + 360 : value;
-}
-
-function clampt(value) {
-  return Math.max(0, Math.min(1, value || 0));
-}
-
-/* From FvD 13.37, CSS Color Module Level 3 */
-function hsl2rgb(h, m1, m2) {
-  return (h < 60 ? m1 + (m2 - m1) * h / 60
-      : h < 180 ? m2
-      : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60
-      : m1) * 255;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/basis.js
-function basis(t1, v0, v1, v2, v3) {
-  var t2 = t1 * t1, t3 = t2 * t1;
-  return ((1 - 3 * t1 + 3 * t2 - t3) * v0
-      + (4 - 6 * t2 + 3 * t3) * v1
-      + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2
-      + t3 * v3) / 6;
-}
-
-/* harmony default export */ function src_basis(values) {
-  var n = values.length - 1;
-  return function(t) {
-    var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),
-        v1 = values[i],
-        v2 = values[i + 1],
-        v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,
-        v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;
-    return basis((t - i / n) * n, v0, v1, v2, v3);
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/basisClosed.js
-
-
-/* harmony default export */ function basisClosed(values) {
-  var n = values.length;
-  return function(t) {
-    var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),
-        v0 = values[(i + n - 1) % n],
-        v1 = values[i % n],
-        v2 = values[(i + 1) % n],
-        v3 = values[(i + 2) % n];
-    return basis((t - i / n) * n, v0, v1, v2, v3);
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/constant.js
-/* harmony default export */ const d3_interpolate_src_constant = (x => () => x);
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/color.js
-
-
-function linear(a, d) {
-  return function(t) {
-    return a + t * d;
-  };
-}
-
-function exponential(a, b, y) {
-  return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {
-    return Math.pow(a + t * b, y);
-  };
-}
-
-function hue(a, b) {
-  var d = b - a;
-  return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : d3_interpolate_src_constant(isNaN(a) ? b : a);
-}
-
-function gamma(y) {
-  return (y = +y) === 1 ? nogamma : function(a, b) {
-    return b - a ? exponential(a, b, y) : d3_interpolate_src_constant(isNaN(a) ? b : a);
-  };
-}
-
-function nogamma(a, b) {
-  var d = b - a;
-  return d ? linear(a, d) : d3_interpolate_src_constant(isNaN(a) ? b : a);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/rgb.js
-
-
-
-
-
-/* harmony default export */ const rgb = ((function rgbGamma(y) {
-  var color = gamma(y);
-
-  function rgb(start, end) {
-    var r = color((start = color_rgb(start)).r, (end = color_rgb(end)).r),
-        g = color(start.g, end.g),
-        b = color(start.b, end.b),
-        opacity = nogamma(start.opacity, end.opacity);
-    return function(t) {
-      start.r = r(t);
-      start.g = g(t);
-      start.b = b(t);
-      start.opacity = opacity(t);
-      return start + "";
-    };
-  }
-
-  rgb.gamma = rgbGamma;
-
-  return rgb;
-})(1));
-
-function rgbSpline(spline) {
-  return function(colors) {
-    var n = colors.length,
-        r = new Array(n),
-        g = new Array(n),
-        b = new Array(n),
-        i, color;
-    for (i = 0; i < n; ++i) {
-      color = color_rgb(colors[i]);
-      r[i] = color.r || 0;
-      g[i] = color.g || 0;
-      b[i] = color.b || 0;
-    }
-    r = spline(r);
-    g = spline(g);
-    b = spline(b);
-    color.opacity = 1;
-    return function(t) {
-      color.r = r(t);
-      color.g = g(t);
-      color.b = b(t);
-      return color + "";
-    };
-  };
-}
-
-var rgbBasis = rgbSpline(src_basis);
-var rgbBasisClosed = rgbSpline(basisClosed);
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/string.js
-
-
-var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,
-    reB = new RegExp(reA.source, "g");
-
-function zero(b) {
-  return function() {
-    return b;
-  };
-}
-
-function one(b) {
-  return function(t) {
-    return b(t) + "";
-  };
-}
-
-/* harmony default export */ function string(a, b) {
-  var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b
-      am, // current match in a
-      bm, // current match in b
-      bs, // string preceding current number in b, if any
-      i = -1, // index in s
-      s = [], // string constants and placeholders
-      q = []; // number interpolators
-
-  // Coerce inputs to strings.
-  a = a + "", b = b + "";
-
-  // Interpolate pairs of numbers in a & b.
-  while ((am = reA.exec(a))
-      && (bm = reB.exec(b))) {
-    if ((bs = bm.index) > bi) { // a string precedes the next number in b
-      bs = b.slice(bi, bs);
-      if (s[i]) s[i] += bs; // coalesce with previous string
-      else s[++i] = bs;
-    }
-    if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match
-      if (s[i]) s[i] += bm; // coalesce with previous string
-      else s[++i] = bm;
-    } else { // interpolate non-matching numbers
-      s[++i] = null;
-      q.push({i: i, x: src_number(am, bm)});
-    }
-    bi = reB.lastIndex;
-  }
-
-  // Add remains of b.
-  if (bi < b.length) {
-    bs = b.slice(bi);
-    if (s[i]) s[i] += bs; // coalesce with previous string
-    else s[++i] = bs;
-  }
-
-  // Special optimization for only a single match.
-  // Otherwise, interpolate each of the numbers and rejoin the string.
-  return s.length < 2 ? (q[0]
-      ? one(q[0].x)
-      : zero(b))
-      : (b = q.length, function(t) {
-          for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);
-          return s.join("");
-        });
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/interpolate.js
-
-
-
-/* harmony default export */ function transition_interpolate(a, b) {
-  var c;
-  return (typeof b === "number" ? src_number
-      : b instanceof color ? rgb
-      : (c = color(b)) ? (b = c, rgb)
-      : string)(a, b);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/attr.js
-
-
-
-
-
-function attr_attrRemove(name) {
-  return function() {
-    this.removeAttribute(name);
-  };
-}
-
-function attr_attrRemoveNS(fullname) {
-  return function() {
-    this.removeAttributeNS(fullname.space, fullname.local);
-  };
-}
-
-function attr_attrConstant(name, interpolate, value1) {
-  var string00,
-      string1 = value1 + "",
-      interpolate0;
-  return function() {
-    var string0 = this.getAttribute(name);
-    return string0 === string1 ? null
-        : string0 === string00 ? interpolate0
-        : interpolate0 = interpolate(string00 = string0, value1);
-  };
-}
-
-function attr_attrConstantNS(fullname, interpolate, value1) {
-  var string00,
-      string1 = value1 + "",
-      interpolate0;
-  return function() {
-    var string0 = this.getAttributeNS(fullname.space, fullname.local);
-    return string0 === string1 ? null
-        : string0 === string00 ? interpolate0
-        : interpolate0 = interpolate(string00 = string0, value1);
-  };
-}
-
-function attr_attrFunction(name, interpolate, value) {
-  var string00,
-      string10,
-      interpolate0;
-  return function() {
-    var string0, value1 = value(this), string1;
-    if (value1 == null) return void this.removeAttribute(name);
-    string0 = this.getAttribute(name);
-    string1 = value1 + "";
-    return string0 === string1 ? null
-        : string0 === string00 && string1 === string10 ? interpolate0
-        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
-  };
-}
-
-function attr_attrFunctionNS(fullname, interpolate, value) {
-  var string00,
-      string10,
-      interpolate0;
-  return function() {
-    var string0, value1 = value(this), string1;
-    if (value1 == null) return void this.removeAttributeNS(fullname.space, fullname.local);
-    string0 = this.getAttributeNS(fullname.space, fullname.local);
-    string1 = value1 + "";
-    return string0 === string1 ? null
-        : string0 === string00 && string1 === string10 ? interpolate0
-        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
-  };
-}
-
-/* harmony default export */ function transition_attr(name, value) {
-  var fullname = namespace(name), i = fullname === "transform" ? interpolateTransformSvg : transition_interpolate;
-  return this.attrTween(name, typeof value === "function"
-      ? (fullname.local ? attr_attrFunctionNS : attr_attrFunction)(fullname, i, tweenValue(this, "attr." + name, value))
-      : value == null ? (fullname.local ? attr_attrRemoveNS : attr_attrRemove)(fullname)
-      : (fullname.local ? attr_attrConstantNS : attr_attrConstant)(fullname, i, value));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/attrTween.js
-
-
-function attrInterpolate(name, i) {
-  return function(t) {
-    this.setAttribute(name, i.call(this, t));
-  };
-}
-
-function attrInterpolateNS(fullname, i) {
-  return function(t) {
-    this.setAttributeNS(fullname.space, fullname.local, i.call(this, t));
-  };
-}
-
-function attrTweenNS(fullname, value) {
-  var t0, i0;
-  function tween() {
-    var i = value.apply(this, arguments);
-    if (i !== i0) t0 = (i0 = i) && attrInterpolateNS(fullname, i);
-    return t0;
-  }
-  tween._value = value;
-  return tween;
-}
-
-function attrTween(name, value) {
-  var t0, i0;
-  function tween() {
-    var i = value.apply(this, arguments);
-    if (i !== i0) t0 = (i0 = i) && attrInterpolate(name, i);
-    return t0;
-  }
-  tween._value = value;
-  return tween;
-}
-
-/* harmony default export */ function transition_attrTween(name, value) {
-  var key = "attr." + name;
-  if (arguments.length < 2) return (key = this.tween(key)) && key._value;
-  if (value == null) return this.tween(key, null);
-  if (typeof value !== "function") throw new Error;
-  var fullname = namespace(name);
-  return this.tween(key, (fullname.local ? attrTweenNS : attrTween)(fullname, value));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/delay.js
-
-
-function delayFunction(id, value) {
-  return function() {
-    init(this, id).delay = +value.apply(this, arguments);
-  };
-}
-
-function delayConstant(id, value) {
-  return value = +value, function() {
-    init(this, id).delay = value;
-  };
-}
-
-/* harmony default export */ function delay(value) {
-  var id = this._id;
-
-  return arguments.length
-      ? this.each((typeof value === "function"
-          ? delayFunction
-          : delayConstant)(id, value))
-      : schedule_get(this.node(), id).delay;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/duration.js
-
-
-function durationFunction(id, value) {
-  return function() {
-    schedule_set(this, id).duration = +value.apply(this, arguments);
-  };
-}
-
-function durationConstant(id, value) {
-  return value = +value, function() {
-    schedule_set(this, id).duration = value;
-  };
-}
-
-/* harmony default export */ function duration(value) {
-  var id = this._id;
-
-  return arguments.length
-      ? this.each((typeof value === "function"
-          ? durationFunction
-          : durationConstant)(id, value))
-      : schedule_get(this.node(), id).duration;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/ease.js
-
-
-function easeConstant(id, value) {
-  if (typeof value !== "function") throw new Error;
-  return function() {
-    schedule_set(this, id).ease = value;
-  };
-}
-
-/* harmony default export */ function ease(value) {
-  var id = this._id;
-
-  return arguments.length
-      ? this.each(easeConstant(id, value))
-      : schedule_get(this.node(), id).ease;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/easeVarying.js
-
-
-function easeVarying(id, value) {
-  return function() {
-    var v = value.apply(this, arguments);
-    if (typeof v !== "function") throw new Error;
-    schedule_set(this, id).ease = v;
-  };
-}
-
-/* harmony default export */ function transition_easeVarying(value) {
-  if (typeof value !== "function") throw new Error;
-  return this.each(easeVarying(this._id, value));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/filter.js
-
-
-
-/* harmony default export */ function transition_filter(match) {
-  if (typeof match !== "function") match = matcher(match);
-
-  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
-    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = [], node, i = 0; i < n; ++i) {
-      if ((node = group[i]) && match.call(node, node.__data__, i, group)) {
-        subgroup.push(node);
-      }
-    }
-  }
-
-  return new Transition(subgroups, this._parents, this._name, this._id);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/merge.js
-
-
-/* harmony default export */ function transition_merge(transition) {
-  if (transition._id !== this._id) throw new Error;
-
-  for (var groups0 = this._groups, groups1 = transition._groups, m0 = groups0.length, m1 = groups1.length, m = Math.min(m0, m1), merges = new Array(m0), j = 0; j < m; ++j) {
-    for (var group0 = groups0[j], group1 = groups1[j], n = group0.length, merge = merges[j] = new Array(n), node, i = 0; i < n; ++i) {
-      if (node = group0[i] || group1[i]) {
-        merge[i] = node;
-      }
-    }
-  }
-
-  for (; j < m0; ++j) {
-    merges[j] = groups0[j];
-  }
-
-  return new Transition(merges, this._parents, this._name, this._id);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/on.js
-
-
-function start(name) {
-  return (name + "").trim().split(/^|\s+/).every(function(t) {
-    var i = t.indexOf(".");
-    if (i >= 0) t = t.slice(0, i);
-    return !t || t === "start";
-  });
-}
-
-function onFunction(id, name, listener) {
-  var on0, on1, sit = start(name) ? init : schedule_set;
-  return function() {
-    var schedule = sit(this, id),
-        on = schedule.on;
-
-    // If this node shared a dispatch with the previous node,
-    // just assign the updated shared dispatch and we’re done!
-    // Otherwise, copy-on-write.
-    if (on !== on0) (on1 = (on0 = on).copy()).on(name, listener);
-
-    schedule.on = on1;
-  };
-}
-
-/* harmony default export */ function transition_on(name, listener) {
-  var id = this._id;
-
-  return arguments.length < 2
-      ? schedule_get(this.node(), id).on.on(name)
-      : this.each(onFunction(id, name, listener));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/remove.js
-function removeFunction(id) {
-  return function() {
-    var parent = this.parentNode;
-    for (var i in this.__transition) if (+i !== id) return;
-    if (parent) parent.removeChild(this);
-  };
-}
-
-/* harmony default export */ function transition_remove() {
-  return this.on("end.remove", removeFunction(this._id));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/select.js
-
-
-
-
-/* harmony default export */ function transition_select(select) {
-  var name = this._name,
-      id = this._id;
-
-  if (typeof select !== "function") select = selector(select);
-
-  for (var groups = this._groups, m = groups.length, subgroups = new Array(m), j = 0; j < m; ++j) {
-    for (var group = groups[j], n = group.length, subgroup = subgroups[j] = new Array(n), node, subnode, i = 0; i < n; ++i) {
-      if ((node = group[i]) && (subnode = select.call(node, node.__data__, i, group))) {
-        if ("__data__" in node) subnode.__data__ = node.__data__;
-        subgroup[i] = subnode;
-        schedule(subgroup[i], name, id, i, subgroup, schedule_get(node, id));
-      }
-    }
-  }
-
-  return new Transition(subgroups, this._parents, name, id);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/selectAll.js
-
-
-
-
-/* harmony default export */ function transition_selectAll(select) {
-  var name = this._name,
-      id = this._id;
-
-  if (typeof select !== "function") select = selectorAll(select);
-
-  for (var groups = this._groups, m = groups.length, subgroups = [], parents = [], j = 0; j < m; ++j) {
-    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
-      if (node = group[i]) {
-        for (var children = select.call(node, node.__data__, i, group), child, inherit = schedule_get(node, id), k = 0, l = children.length; k < l; ++k) {
-          if (child = children[k]) {
-            schedule(child, name, id, k, children, inherit);
-          }
-        }
-        subgroups.push(children);
-        parents.push(node);
-      }
-    }
-  }
-
-  return new Transition(subgroups, parents, name, id);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/selection.js
-
-
-var selection_Selection = src_selection.prototype.constructor;
-
-/* harmony default export */ function transition_selection() {
-  return new selection_Selection(this._groups, this._parents);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/style.js
-
-
-
-
-
-
-function styleNull(name, interpolate) {
-  var string00,
-      string10,
-      interpolate0;
-  return function() {
-    var string0 = styleValue(this, name),
-        string1 = (this.style.removeProperty(name), styleValue(this, name));
-    return string0 === string1 ? null
-        : string0 === string00 && string1 === string10 ? interpolate0
-        : interpolate0 = interpolate(string00 = string0, string10 = string1);
-  };
-}
-
-function style_styleRemove(name) {
-  return function() {
-    this.style.removeProperty(name);
-  };
-}
-
-function style_styleConstant(name, interpolate, value1) {
-  var string00,
-      string1 = value1 + "",
-      interpolate0;
-  return function() {
-    var string0 = styleValue(this, name);
-    return string0 === string1 ? null
-        : string0 === string00 ? interpolate0
-        : interpolate0 = interpolate(string00 = string0, value1);
-  };
-}
-
-function style_styleFunction(name, interpolate, value) {
-  var string00,
-      string10,
-      interpolate0;
-  return function() {
-    var string0 = styleValue(this, name),
-        value1 = value(this),
-        string1 = value1 + "";
-    if (value1 == null) string1 = value1 = (this.style.removeProperty(name), styleValue(this, name));
-    return string0 === string1 ? null
-        : string0 === string00 && string1 === string10 ? interpolate0
-        : (string10 = string1, interpolate0 = interpolate(string00 = string0, value1));
-  };
-}
-
-function styleMaybeRemove(id, name) {
-  var on0, on1, listener0, key = "style." + name, event = "end." + key, remove;
-  return function() {
-    var schedule = schedule_set(this, id),
-        on = schedule.on,
-        listener = schedule.value[key] == null ? remove || (remove = style_styleRemove(name)) : undefined;
-
-    // If this node shared a dispatch with the previous node,
-    // just assign the updated shared dispatch and we’re done!
-    // Otherwise, copy-on-write.
-    if (on !== on0 || listener0 !== listener) (on1 = (on0 = on).copy()).on(event, listener0 = listener);
-
-    schedule.on = on1;
-  };
-}
-
-/* harmony default export */ function transition_style(name, value, priority) {
-  var i = (name += "") === "transform" ? interpolateTransformCss : transition_interpolate;
-  return value == null ? this
-      .styleTween(name, styleNull(name, i))
-      .on("end.style." + name, style_styleRemove(name))
-    : typeof value === "function" ? this
-      .styleTween(name, style_styleFunction(name, i, tweenValue(this, "style." + name, value)))
-      .each(styleMaybeRemove(this._id, name))
-    : this
-      .styleTween(name, style_styleConstant(name, i, value), priority)
-      .on("end.style." + name, null);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/styleTween.js
-function styleInterpolate(name, i, priority) {
-  return function(t) {
-    this.style.setProperty(name, i.call(this, t), priority);
-  };
-}
-
-function styleTween(name, value, priority) {
-  var t, i0;
-  function tween() {
-    var i = value.apply(this, arguments);
-    if (i !== i0) t = (i0 = i) && styleInterpolate(name, i, priority);
-    return t;
-  }
-  tween._value = value;
-  return tween;
-}
-
-/* harmony default export */ function transition_styleTween(name, value, priority) {
-  var key = "style." + (name += "");
-  if (arguments.length < 2) return (key = this.tween(key)) && key._value;
-  if (value == null) return this.tween(key, null);
-  if (typeof value !== "function") throw new Error;
-  return this.tween(key, styleTween(name, value, priority == null ? "" : priority));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/text.js
-
-
-function text_textConstant(value) {
-  return function() {
-    this.textContent = value;
-  };
-}
-
-function text_textFunction(value) {
-  return function() {
-    var value1 = value(this);
-    this.textContent = value1 == null ? "" : value1;
-  };
-}
-
-/* harmony default export */ function transition_text(value) {
-  return this.tween("text", typeof value === "function"
-      ? text_textFunction(tweenValue(this, "text", value))
-      : text_textConstant(value == null ? "" : value + ""));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/textTween.js
-function textInterpolate(i) {
-  return function(t) {
-    this.textContent = i.call(this, t);
-  };
-}
-
-function textTween(value) {
-  var t0, i0;
-  function tween() {
-    var i = value.apply(this, arguments);
-    if (i !== i0) t0 = (i0 = i) && textInterpolate(i);
-    return t0;
-  }
-  tween._value = value;
-  return tween;
-}
-
-/* harmony default export */ function transition_textTween(value) {
-  var key = "text";
-  if (arguments.length < 1) return (key = this.tween(key)) && key._value;
-  if (value == null) return this.tween(key, null);
-  if (typeof value !== "function") throw new Error;
-  return this.tween(key, textTween(value));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/transition.js
-
-
-
-/* harmony default export */ function transition() {
-  var name = this._name,
-      id0 = this._id,
-      id1 = newId();
-
-  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
-    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
-      if (node = group[i]) {
-        var inherit = schedule_get(node, id0);
-        schedule(node, name, id1, i, group, {
-          time: inherit.time + inherit.delay + inherit.duration,
-          delay: 0,
-          duration: inherit.duration,
-          ease: inherit.ease
-        });
-      }
-    }
-  }
-
-  return new Transition(groups, this._parents, name, id1);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/end.js
-
-
-/* harmony default export */ function end() {
-  var on0, on1, that = this, id = that._id, size = that.size();
-  return new Promise(function(resolve, reject) {
-    var cancel = {value: reject},
-        end = {value: function() { if (--size === 0) resolve(); }};
-
-    that.each(function() {
-      var schedule = schedule_set(this, id),
-          on = schedule.on;
-
-      // If this node shared a dispatch with the previous node,
-      // just assign the updated shared dispatch and we’re done!
-      // Otherwise, copy-on-write.
-      if (on !== on0) {
-        on1 = (on0 = on).copy();
-        on1._.cancel.push(cancel);
-        on1._.interrupt.push(cancel);
-        on1._.end.push(end);
-      }
-
-      schedule.on = on1;
-    });
-
-    // The selection was empty, resolve end immediately
-    if (size === 0) resolve();
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/transition/index.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-var id = 0;
-
-function Transition(groups, parents, name, id) {
-  this._groups = groups;
-  this._parents = parents;
-  this._name = name;
-  this._id = id;
-}
-
-function transition_transition(name) {
-  return src_selection().transition(name);
-}
-
-function newId() {
-  return ++id;
-}
-
-var selection_prototype = src_selection.prototype;
-
-Transition.prototype = transition_transition.prototype = {
-  constructor: Transition,
-  select: transition_select,
-  selectAll: transition_selectAll,
-  selectChild: selection_prototype.selectChild,
-  selectChildren: selection_prototype.selectChildren,
-  filter: transition_filter,
-  merge: transition_merge,
-  selection: transition_selection,
-  transition: transition,
-  call: selection_prototype.call,
-  nodes: selection_prototype.nodes,
-  node: selection_prototype.node,
-  size: selection_prototype.size,
-  empty: selection_prototype.empty,
-  each: selection_prototype.each,
-  on: transition_on,
-  attr: transition_attr,
-  attrTween: transition_attrTween,
-  style: transition_style,
-  styleTween: transition_styleTween,
-  text: transition_text,
-  textTween: transition_textTween,
-  remove: transition_remove,
-  tween: tween,
-  delay: delay,
-  duration: duration,
-  ease: ease,
-  easeVarying: transition_easeVarying,
-  end: end,
-  [Symbol.iterator]: selection_prototype[Symbol.iterator]
-};
-
-;// CONCATENATED MODULE: ./node_modules/d3-ease/src/cubic.js
-function cubicIn(t) {
-  return t * t * t;
-}
-
-function cubicOut(t) {
-  return --t * t * t + 1;
-}
-
-function cubicInOut(t) {
-  return ((t *= 2) <= 1 ? t * t * t : (t -= 2) * t * t + 2) / 2;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/selection/transition.js
-
-
-
-
-
-var defaultTiming = {
-  time: null, // Set on use.
-  delay: 0,
-  duration: 250,
-  ease: cubicInOut
-};
-
-function inherit(node, id) {
-  var timing;
-  while (!(timing = node.__transition) || !(timing = timing[id])) {
-    if (!(node = node.parentNode)) {
-      throw new Error(`transition ${id} not found`);
-    }
-  }
-  return timing;
-}
-
-/* harmony default export */ function selection_transition(name) {
-  var id,
-      timing;
-
-  if (name instanceof Transition) {
-    id = name._id, name = name._name;
-  } else {
-    id = newId(), (timing = defaultTiming).time = now(), name = name == null ? null : name + "";
-  }
-
-  for (var groups = this._groups, m = groups.length, j = 0; j < m; ++j) {
-    for (var group = groups[j], n = group.length, node, i = 0; i < n; ++i) {
-      if (node = group[i]) {
-        schedule(node, name, id, i, group, timing || inherit(node, id));
-      }
-    }
-  }
-
-  return new Transition(groups, this._parents, name, id);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/selection/index.js
-
-
-
-
-src_selection.prototype.interrupt = selection_interrupt;
-src_selection.prototype.transition = selection_transition;
-
-;// CONCATENATED MODULE: ./node_modules/d3-transition/src/index.js
-
-
-
-
-
-;// CONCATENATED MODULE: ./node_modules/d3-brush/src/brush.js
-
-
-
-
-
-
-
-
-
-var MODE_DRAG = {name: "drag"},
-    MODE_SPACE = {name: "space"},
-    MODE_HANDLE = {name: "handle"},
-    MODE_CENTER = {name: "center"};
-
-const {abs, max: brush_max, min: brush_min} = Math;
-
-function number1(e) {
-  return [+e[0], +e[1]];
-}
-
-function number2(e) {
-  return [number1(e[0]), number1(e[1])];
-}
-
-var X = {
-  name: "x",
-  handles: ["w", "e"].map(type),
-  input: function(x, e) { return x == null ? null : [[+x[0], e[0][1]], [+x[1], e[1][1]]]; },
-  output: function(xy) { return xy && [xy[0][0], xy[1][0]]; }
-};
-
-var Y = {
-  name: "y",
-  handles: ["n", "s"].map(type),
-  input: function(y, e) { return y == null ? null : [[e[0][0], +y[0]], [e[1][0], +y[1]]]; },
-  output: function(xy) { return xy && [xy[0][1], xy[1][1]]; }
-};
-
-var XY = {
-  name: "xy",
-  handles: ["n", "w", "e", "s", "nw", "ne", "sw", "se"].map(type),
-  input: function(xy) { return xy == null ? null : number2(xy); },
-  output: function(xy) { return xy; }
-};
-
-var cursors = {
-  overlay: "crosshair",
-  selection: "move",
-  n: "ns-resize",
-  e: "ew-resize",
-  s: "ns-resize",
-  w: "ew-resize",
-  nw: "nwse-resize",
-  ne: "nesw-resize",
-  se: "nwse-resize",
-  sw: "nesw-resize"
-};
-
-var flipX = {
-  e: "w",
-  w: "e",
-  nw: "ne",
-  ne: "nw",
-  se: "sw",
-  sw: "se"
-};
-
-var flipY = {
-  n: "s",
-  s: "n",
-  nw: "sw",
-  ne: "se",
-  se: "ne",
-  sw: "nw"
-};
-
-var signsX = {
-  overlay: +1,
-  selection: +1,
-  n: null,
-  e: +1,
-  s: null,
-  w: -1,
-  nw: -1,
-  ne: +1,
-  se: +1,
-  sw: -1
-};
-
-var signsY = {
-  overlay: +1,
-  selection: +1,
-  n: -1,
-  e: null,
-  s: +1,
-  w: null,
-  nw: -1,
-  ne: -1,
-  se: +1,
-  sw: +1
-};
-
-function type(t) {
-  return {type: t};
-}
-
-// Ignore right-click, since that should open the context menu.
-function defaultFilter(event) {
-  return !event.ctrlKey && !event.button;
-}
-
-function defaultExtent() {
-  var svg = this.ownerSVGElement || this;
-  if (svg.hasAttribute("viewBox")) {
-    svg = svg.viewBox.baseVal;
-    return [[svg.x, svg.y], [svg.x + svg.width, svg.y + svg.height]];
-  }
-  return [[0, 0], [svg.width.baseVal.value, svg.height.baseVal.value]];
-}
-
-function defaultTouchable() {
-  return navigator.maxTouchPoints || ("ontouchstart" in this);
-}
-
-// Like d3.local, but with the name “__brush” rather than auto-generated.
-function local(node) {
-  while (!node.__brush) if (!(node = node.parentNode)) return;
-  return node.__brush;
-}
-
-function brush_empty(extent) {
-  return extent[0][0] === extent[1][0]
-      || extent[0][1] === extent[1][1];
-}
-
-function brushSelection(node) {
-  var state = node.__brush;
-  return state ? state.dim.output(state.selection) : null;
-}
-
-function brushX() {
-  return brush_brush(X);
-}
-
-function brushY() {
-  return brush_brush(Y);
-}
-
-/* harmony default export */ function brush() {
-  return brush_brush(XY);
-}
-
-function brush_brush(dim) {
-  var extent = defaultExtent,
-      filter = defaultFilter,
-      touchable = defaultTouchable,
-      keys = true,
-      listeners = dispatch("start", "brush", "end"),
-      handleSize = 6,
-      touchending;
-
-  function brush(group) {
-    var overlay = group
-        .property("__brush", initialize)
-      .selectAll(".overlay")
-      .data([type("overlay")]);
-
-    overlay.enter().append("rect")
-        .attr("class", "overlay")
-        .attr("pointer-events", "all")
-        .attr("cursor", cursors.overlay)
-      .merge(overlay)
-        .each(function() {
-          var extent = local(this).extent;
-          select(this)
-              .attr("x", extent[0][0])
-              .attr("y", extent[0][1])
-              .attr("width", extent[1][0] - extent[0][0])
-              .attr("height", extent[1][1] - extent[0][1]);
-        });
-
-    group.selectAll(".selection")
-      .data([type("selection")])
-      .enter().append("rect")
-        .attr("class", "selection")
-        .attr("cursor", cursors.selection)
-        .attr("fill", "#777")
-        .attr("fill-opacity", 0.3)
-        .attr("stroke", "#fff")
-        .attr("shape-rendering", "crispEdges");
-
-    var handle = group.selectAll(".handle")
-      .data(dim.handles, function(d) { return d.type; });
-
-    handle.exit().remove();
-
-    handle.enter().append("rect")
-        .attr("class", function(d) { return "handle handle--" + d.type; })
-        .attr("cursor", function(d) { return cursors[d.type]; });
-
-    group
-        .each(redraw)
-        .attr("fill", "none")
-        .attr("pointer-events", "all")
-        .on("mousedown.brush", started)
-      .filter(touchable)
-        .on("touchstart.brush", started)
-        .on("touchmove.brush", touchmoved)
-        .on("touchend.brush touchcancel.brush", touchended)
-        .style("touch-action", "none")
-        .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
-  }
-
-  brush.move = function(group, selection, event) {
-    if (group.tween) {
-      group
-          .on("start.brush", function(event) { emitter(this, arguments).beforestart().start(event); })
-          .on("interrupt.brush end.brush", function(event) { emitter(this, arguments).end(event); })
-          .tween("brush", function() {
-            var that = this,
-                state = that.__brush,
-                emit = emitter(that, arguments),
-                selection0 = state.selection,
-                selection1 = dim.input(typeof selection === "function" ? selection.apply(this, arguments) : selection, state.extent),
-                i = interpolate(selection0, selection1);
-
-            function tween(t) {
-              state.selection = t === 1 && selection1 === null ? null : i(t);
-              redraw.call(that);
-              emit.brush();
-            }
-
-            return selection0 !== null && selection1 !== null ? tween : tween(1);
-          });
-    } else {
-      group
-          .each(function() {
-            var that = this,
-                args = arguments,
-                state = that.__brush,
-                selection1 = dim.input(typeof selection === "function" ? selection.apply(that, args) : selection, state.extent),
-                emit = emitter(that, args).beforestart();
-
-            interrupt(that);
-            state.selection = selection1 === null ? null : selection1;
-            redraw.call(that);
-            emit.start(event).brush(event).end(event);
-          });
-    }
-  };
-
-  brush.clear = function(group, event) {
-    brush.move(group, null, event);
-  };
-
-  function redraw() {
-    var group = select(this),
-        selection = local(this).selection;
-
-    if (selection) {
-      group.selectAll(".selection")
-          .style("display", null)
-          .attr("x", selection[0][0])
-          .attr("y", selection[0][1])
-          .attr("width", selection[1][0] - selection[0][0])
-          .attr("height", selection[1][1] - selection[0][1]);
-
-      group.selectAll(".handle")
-          .style("display", null)
-          .attr("x", function(d) { return d.type[d.type.length - 1] === "e" ? selection[1][0] - handleSize / 2 : selection[0][0] - handleSize / 2; })
-          .attr("y", function(d) { return d.type[0] === "s" ? selection[1][1] - handleSize / 2 : selection[0][1] - handleSize / 2; })
-          .attr("width", function(d) { return d.type === "n" || d.type === "s" ? selection[1][0] - selection[0][0] + handleSize : handleSize; })
-          .attr("height", function(d) { return d.type === "e" || d.type === "w" ? selection[1][1] - selection[0][1] + handleSize : handleSize; });
-    }
-
-    else {
-      group.selectAll(".selection,.handle")
-          .style("display", "none")
-          .attr("x", null)
-          .attr("y", null)
-          .attr("width", null)
-          .attr("height", null);
-    }
-  }
-
-  function emitter(that, args, clean) {
-    var emit = that.__brush.emitter;
-    return emit && (!clean || !emit.clean) ? emit : new Emitter(that, args, clean);
-  }
-
-  function Emitter(that, args, clean) {
-    this.that = that;
-    this.args = args;
-    this.state = that.__brush;
-    this.active = 0;
-    this.clean = clean;
-  }
-
-  Emitter.prototype = {
-    beforestart: function() {
-      if (++this.active === 1) this.state.emitter = this, this.starting = true;
-      return this;
-    },
-    start: function(event, mode) {
-      if (this.starting) this.starting = false, this.emit("start", event, mode);
-      else this.emit("brush", event);
-      return this;
-    },
-    brush: function(event, mode) {
-      this.emit("brush", event, mode);
-      return this;
-    },
-    end: function(event, mode) {
-      if (--this.active === 0) delete this.state.emitter, this.emit("end", event, mode);
-      return this;
-    },
-    emit: function(type, event, mode) {
-      var d = select(this.that).datum();
-      listeners.call(
-        type,
-        this.that,
-        new BrushEvent(type, {
-          sourceEvent: event,
-          target: brush,
-          selection: dim.output(this.state.selection),
-          mode,
-          dispatch: listeners
-        }),
-        d
-      );
-    }
-  };
-
-  function started(event) {
-    if (touchending && !event.touches) return;
-    if (!filter.apply(this, arguments)) return;
-
-    var that = this,
-        type = event.target.__data__.type,
-        mode = (keys && event.metaKey ? type = "overlay" : type) === "selection" ? MODE_DRAG : (keys && event.altKey ? MODE_CENTER : MODE_HANDLE),
-        signX = dim === Y ? null : signsX[type],
-        signY = dim === X ? null : signsY[type],
-        state = local(that),
-        extent = state.extent,
-        selection = state.selection,
-        W = extent[0][0], w0, w1,
-        N = extent[0][1], n0, n1,
-        E = extent[1][0], e0, e1,
-        S = extent[1][1], s0, s1,
-        dx = 0,
-        dy = 0,
-        moving,
-        shifting = signX && signY && keys && event.shiftKey,
-        lockX,
-        lockY,
-        points = Array.from(event.touches || [event], t => {
-          const i = t.identifier;
-          t = pointer(t, that);
-          t.point0 = t.slice();
-          t.identifier = i;
-          return t;
-        });
-
-    interrupt(that);
-    var emit = emitter(that, arguments, true).beforestart();
-
-    if (type === "overlay") {
-      if (selection) moving = true;
-      const pts = [points[0], points[1] || points[0]];
-      state.selection = selection = [[
-          w0 = dim === Y ? W : brush_min(pts[0][0], pts[1][0]),
-          n0 = dim === X ? N : brush_min(pts[0][1], pts[1][1])
-        ], [
-          e0 = dim === Y ? E : brush_max(pts[0][0], pts[1][0]),
-          s0 = dim === X ? S : brush_max(pts[0][1], pts[1][1])
-        ]];
-      if (points.length > 1) move(event);
-    } else {
-      w0 = selection[0][0];
-      n0 = selection[0][1];
-      e0 = selection[1][0];
-      s0 = selection[1][1];
-    }
-
-    w1 = w0;
-    n1 = n0;
-    e1 = e0;
-    s1 = s0;
-
-    var group = select(that)
-        .attr("pointer-events", "none");
-
-    var overlay = group.selectAll(".overlay")
-        .attr("cursor", cursors[type]);
-
-    if (event.touches) {
-      emit.moved = moved;
-      emit.ended = ended;
-    } else {
-      var view = select(event.view)
-          .on("mousemove.brush", moved, true)
-          .on("mouseup.brush", ended, true);
-      if (keys) view
-          .on("keydown.brush", keydowned, true)
-          .on("keyup.brush", keyupped, true)
-
-      dragDisable(event.view);
-    }
-
-    redraw.call(that);
-    emit.start(event, mode.name);
-
-    function moved(event) {
-      for (const p of event.changedTouches || [event]) {
-        for (const d of points)
-          if (d.identifier === p.identifier) d.cur = pointer(p, that);
-      }
-      if (shifting && !lockX && !lockY && points.length === 1) {
-        const point = points[0];
-        if (abs(point.cur[0] - point[0]) > abs(point.cur[1] - point[1]))
-          lockY = true;
-        else
-          lockX = true;
-      }
-      for (const point of points)
-        if (point.cur) point[0] = point.cur[0], point[1] = point.cur[1];
-      moving = true;
-      noevent(event);
-      move(event);
-    }
-
-    function move(event) {
-      const point = points[0], point0 = point.point0;
-      var t;
-
-      dx = point[0] - point0[0];
-      dy = point[1] - point0[1];
-
-      switch (mode) {
-        case MODE_SPACE:
-        case MODE_DRAG: {
-          if (signX) dx = brush_max(W - w0, brush_min(E - e0, dx)), w1 = w0 + dx, e1 = e0 + dx;
-          if (signY) dy = brush_max(N - n0, brush_min(S - s0, dy)), n1 = n0 + dy, s1 = s0 + dy;
-          break;
-        }
-        case MODE_HANDLE: {
-          if (points[1]) {
-            if (signX) w1 = brush_max(W, brush_min(E, points[0][0])), e1 = brush_max(W, brush_min(E, points[1][0])), signX = 1;
-            if (signY) n1 = brush_max(N, brush_min(S, points[0][1])), s1 = brush_max(N, brush_min(S, points[1][1])), signY = 1;
-          } else {
-            if (signX < 0) dx = brush_max(W - w0, brush_min(E - w0, dx)), w1 = w0 + dx, e1 = e0;
-            else if (signX > 0) dx = brush_max(W - e0, brush_min(E - e0, dx)), w1 = w0, e1 = e0 + dx;
-            if (signY < 0) dy = brush_max(N - n0, brush_min(S - n0, dy)), n1 = n0 + dy, s1 = s0;
-            else if (signY > 0) dy = brush_max(N - s0, brush_min(S - s0, dy)), n1 = n0, s1 = s0 + dy;
-          }
-          break;
-        }
-        case MODE_CENTER: {
-          if (signX) w1 = brush_max(W, brush_min(E, w0 - dx * signX)), e1 = brush_max(W, brush_min(E, e0 + dx * signX));
-          if (signY) n1 = brush_max(N, brush_min(S, n0 - dy * signY)), s1 = brush_max(N, brush_min(S, s0 + dy * signY));
-          break;
-        }
-      }
-
-      if (e1 < w1) {
-        signX *= -1;
-        t = w0, w0 = e0, e0 = t;
-        t = w1, w1 = e1, e1 = t;
-        if (type in flipX) overlay.attr("cursor", cursors[type = flipX[type]]);
-      }
-
-      if (s1 < n1) {
-        signY *= -1;
-        t = n0, n0 = s0, s0 = t;
-        t = n1, n1 = s1, s1 = t;
-        if (type in flipY) overlay.attr("cursor", cursors[type = flipY[type]]);
-      }
-
-      if (state.selection) selection = state.selection; // May be set by brush.move!
-      if (lockX) w1 = selection[0][0], e1 = selection[1][0];
-      if (lockY) n1 = selection[0][1], s1 = selection[1][1];
-
-      if (selection[0][0] !== w1
-          || selection[0][1] !== n1
-          || selection[1][0] !== e1
-          || selection[1][1] !== s1) {
-        state.selection = [[w1, n1], [e1, s1]];
-        redraw.call(that);
-        emit.brush(event, mode.name);
-      }
-    }
-
-    function ended(event) {
-      nopropagation(event);
-      if (event.touches) {
-        if (event.touches.length) return;
-        if (touchending) clearTimeout(touchending);
-        touchending = setTimeout(function() { touchending = null; }, 500); // Ghost clicks are delayed!
-      } else {
-        dragEnable(event.view, moving);
-        view.on("keydown.brush keyup.brush mousemove.brush mouseup.brush", null);
-      }
-      group.attr("pointer-events", "all");
-      overlay.attr("cursor", cursors.overlay);
-      if (state.selection) selection = state.selection; // May be set by brush.move (on start)!
-      if (brush_empty(selection)) state.selection = null, redraw.call(that);
-      emit.end(event, mode.name);
-    }
-
-    function keydowned(event) {
-      switch (event.keyCode) {
-        case 16: { // SHIFT
-          shifting = signX && signY;
-          break;
-        }
-        case 18: { // ALT
-          if (mode === MODE_HANDLE) {
-            if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
-            if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
-            mode = MODE_CENTER;
-            move(event);
-          }
-          break;
-        }
-        case 32: { // SPACE; takes priority over ALT
-          if (mode === MODE_HANDLE || mode === MODE_CENTER) {
-            if (signX < 0) e0 = e1 - dx; else if (signX > 0) w0 = w1 - dx;
-            if (signY < 0) s0 = s1 - dy; else if (signY > 0) n0 = n1 - dy;
-            mode = MODE_SPACE;
-            overlay.attr("cursor", cursors.selection);
-            move(event);
-          }
-          break;
-        }
-        default: return;
-      }
-      noevent(event);
-    }
-
-    function keyupped(event) {
-      switch (event.keyCode) {
-        case 16: { // SHIFT
-          if (shifting) {
-            lockX = lockY = shifting = false;
-            move(event);
-          }
-          break;
-        }
-        case 18: { // ALT
-          if (mode === MODE_CENTER) {
-            if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
-            if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
-            mode = MODE_HANDLE;
-            move(event);
-          }
-          break;
-        }
-        case 32: { // SPACE
-          if (mode === MODE_SPACE) {
-            if (event.altKey) {
-              if (signX) e0 = e1 - dx * signX, w0 = w1 + dx * signX;
-              if (signY) s0 = s1 - dy * signY, n0 = n1 + dy * signY;
-              mode = MODE_CENTER;
-            } else {
-              if (signX < 0) e0 = e1; else if (signX > 0) w0 = w1;
-              if (signY < 0) s0 = s1; else if (signY > 0) n0 = n1;
-              mode = MODE_HANDLE;
-            }
-            overlay.attr("cursor", cursors[type]);
-            move(event);
-          }
-          break;
-        }
-        default: return;
-      }
-      noevent(event);
-    }
-  }
-
-  function touchmoved(event) {
-    emitter(this, arguments).moved(event);
-  }
-
-  function touchended(event) {
-    emitter(this, arguments).ended(event);
-  }
-
-  function initialize() {
-    var state = this.__brush || {selection: null};
-    state.extent = number2(extent.apply(this, arguments));
-    state.dim = dim;
-    return state;
-  }
-
-  brush.extent = function(_) {
-    return arguments.length ? (extent = typeof _ === "function" ? _ : constant(number2(_)), brush) : extent;
-  };
-
-  brush.filter = function(_) {
-    return arguments.length ? (filter = typeof _ === "function" ? _ : constant(!!_), brush) : filter;
-  };
-
-  brush.touchable = function(_) {
-    return arguments.length ? (touchable = typeof _ === "function" ? _ : constant(!!_), brush) : touchable;
-  };
-
-  brush.handleSize = function(_) {
-    return arguments.length ? (handleSize = +_, brush) : handleSize;
-  };
-
-  brush.keyModifiers = function(_) {
-    return arguments.length ? (keys = !!_, brush) : keys;
-  };
-
-  brush.on = function() {
-    var value = listeners.on.apply(listeners, arguments);
-    return value === listeners ? brush : value;
-  };
-
-  return brush;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-brush/src/index.js
-
-
-;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/text.js
-function responseText(response) {
-  if (!response.ok) throw new Error(response.status + " " + response.statusText);
-  return response.text();
-}
-
-/* harmony default export */ function src_text(input, init) {
-  return fetch(input, init).then(responseText);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/xml.js
-
-
-function parser(type) {
-  return (input, init) => src_text(input, init)
-    .then(text => (new DOMParser).parseFromString(text, type));
-}
-
-/* harmony default export */ const xml = (parser("application/xml"));
-
-var xml_html = parser("text/html");
-
-var svg = parser("image/svg+xml");
-
-;// CONCATENATED MODULE: ./node_modules/d3-fetch/src/index.js
-
-
-
-
-
-
-
-
-;// CONCATENATED MODULE: ./node_modules/d3-color/src/math.js
-const radians = Math.PI / 180;
-const math_degrees = 180 / Math.PI;
-
-;// CONCATENATED MODULE: ./node_modules/d3-color/src/lab.js
-
-
-
-
-// https://observablehq.com/@mbostock/lab-and-rgb
-const K = 18,
-    Xn = 0.96422,
-    Yn = 1,
-    Zn = 0.82521,
-    t0 = 4 / 29,
-    t1 = 6 / 29,
-    t2 = 3 * t1 * t1,
-    t3 = t1 * t1 * t1;
-
-function labConvert(o) {
-  if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);
-  if (o instanceof Hcl) return hcl2lab(o);
-  if (!(o instanceof Rgb)) o = rgbConvert(o);
-  var r = rgb2lrgb(o.r),
-      g = rgb2lrgb(o.g),
-      b = rgb2lrgb(o.b),
-      y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;
-  if (r === g && g === b) x = z = y; else {
-    x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);
-    z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);
-  }
-  return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);
-}
-
-function gray(l, opacity) {
-  return new Lab(l, 0, 0, opacity == null ? 1 : opacity);
-}
-
-function lab(l, a, b, opacity) {
-  return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);
-}
-
-function Lab(l, a, b, opacity) {
-  this.l = +l;
-  this.a = +a;
-  this.b = +b;
-  this.opacity = +opacity;
-}
-
-src_define(Lab, lab, extend(Color, {
-  brighter(k) {
-    return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);
-  },
-  darker(k) {
-    return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);
-  },
-  rgb() {
-    var y = (this.l + 16) / 116,
-        x = isNaN(this.a) ? y : y + this.a / 500,
-        z = isNaN(this.b) ? y : y - this.b / 200;
-    x = Xn * lab2xyz(x);
-    y = Yn * lab2xyz(y);
-    z = Zn * lab2xyz(z);
-    return new Rgb(
-      lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),
-      lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),
-      lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),
-      this.opacity
-    );
-  }
-}));
-
-function xyz2lab(t) {
-  return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;
-}
-
-function lab2xyz(t) {
-  return t > t1 ? t * t * t : t2 * (t - t0);
-}
-
-function lrgb2rgb(x) {
-  return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);
-}
-
-function rgb2lrgb(x) {
-  return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);
-}
-
-function hclConvert(o) {
-  if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);
-  if (!(o instanceof Lab)) o = labConvert(o);
-  if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0 < o.l && o.l < 100 ? 0 : NaN, o.l, o.opacity);
-  var h = Math.atan2(o.b, o.a) * math_degrees;
-  return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);
-}
-
-function lch(l, c, h, opacity) {
-  return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
-}
-
-function hcl(h, c, l, opacity) {
-  return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);
-}
-
-function Hcl(h, c, l, opacity) {
-  this.h = +h;
-  this.c = +c;
-  this.l = +l;
-  this.opacity = +opacity;
-}
-
-function hcl2lab(o) {
-  if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);
-  var h = o.h * radians;
-  return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);
-}
-
-src_define(Hcl, hcl, extend(Color, {
-  brighter(k) {
-    return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);
-  },
-  darker(k) {
-    return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);
-  },
-  rgb() {
-    return hcl2lab(this).rgb();
-  }
-}));
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/hcl.js
-
-
-
-function hcl_hcl(hue) {
-  return function(start, end) {
-    var h = hue((start = hcl(start)).h, (end = hcl(end)).h),
-        c = nogamma(start.c, end.c),
-        l = nogamma(start.l, end.l),
-        opacity = nogamma(start.opacity, end.opacity);
-    return function(t) {
-      start.h = h(t);
-      start.c = c(t);
-      start.l = l(t);
-      start.opacity = opacity(t);
-      return start + "";
-    };
-  }
-}
-
-/* harmony default export */ const src_hcl = (hcl_hcl(hue));
-var hclLong = hcl_hcl(nogamma);
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/index.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;// CONCATENATED MODULE: ./node_modules/d3-array/src/ticks.js
-const e10 = Math.sqrt(50),
-    e5 = Math.sqrt(10),
-    e2 = Math.sqrt(2);
-
-function tickSpec(start, stop, count) {
-  const step = (stop - start) / Math.max(0, count),
-      power = Math.floor(Math.log10(step)),
-      error = step / Math.pow(10, power),
-      factor = error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1;
-  let i1, i2, inc;
-  if (power < 0) {
-    inc = Math.pow(10, -power) / factor;
-    i1 = Math.round(start * inc);
-    i2 = Math.round(stop * inc);
-    if (i1 / inc < start) ++i1;
-    if (i2 / inc > stop) --i2;
-    inc = -inc;
-  } else {
-    inc = Math.pow(10, power) * factor;
-    i1 = Math.round(start / inc);
-    i2 = Math.round(stop / inc);
-    if (i1 * inc < start) ++i1;
-    if (i2 * inc > stop) --i2;
-  }
-  if (i2 < i1 && 0.5 <= count && count < 2) return tickSpec(start, stop, count * 2);
-  return [i1, i2, inc];
-}
-
-function ticks(start, stop, count) {
-  stop = +stop, start = +start, count = +count;
-  if (!(count > 0)) return [];
-  if (start === stop) return [start];
-  const reverse = stop < start, [i1, i2, inc] = reverse ? tickSpec(stop, start, count) : tickSpec(start, stop, count);
-  if (!(i2 >= i1)) return [];
-  const n = i2 - i1 + 1, ticks = new Array(n);
-  if (reverse) {
-    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) / -inc;
-    else for (let i = 0; i < n; ++i) ticks[i] = (i2 - i) * inc;
-  } else {
-    if (inc < 0) for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) / -inc;
-    else for (let i = 0; i < n; ++i) ticks[i] = (i1 + i) * inc;
-  }
-  return ticks;
-}
-
-function tickIncrement(start, stop, count) {
-  stop = +stop, start = +start, count = +count;
-  return tickSpec(start, stop, count)[2];
-}
-
-function tickStep(start, stop, count) {
-  stop = +stop, start = +start, count = +count;
-  const reverse = stop < start, inc = reverse ? tickIncrement(stop, start, count) : tickIncrement(start, stop, count);
-  return (reverse ? -1 : 1) * (inc < 0 ? 1 / -inc : inc);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-array/src/ascending.js
-function ascending_ascending(a, b) {
-  return a == null || b == null ? NaN : a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-array/src/descending.js
-function descending(a, b) {
-  return a == null || b == null ? NaN
-    : b < a ? -1
-    : b > a ? 1
-    : b >= a ? 0
-    : NaN;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-array/src/bisector.js
-
-
-
-function bisector(f) {
-  let compare1, compare2, delta;
-
-  // If an accessor is specified, promote it to a comparator. In this case we
-  // can test whether the search value is (self-) comparable. We can’t do this
-  // for a comparator (except for specific, known comparators) because we can’t
-  // tell if the comparator is symmetric, and an asymmetric comparator can’t be
-  // used to test whether a single value is comparable.
-  if (f.length !== 2) {
-    compare1 = ascending_ascending;
-    compare2 = (d, x) => ascending_ascending(f(d), x);
-    delta = (d, x) => f(d) - x;
-  } else {
-    compare1 = f === ascending_ascending || f === descending ? f : bisector_zero;
-    compare2 = f;
-    delta = f;
-  }
-
-  function left(a, x, lo = 0, hi = a.length) {
-    if (lo < hi) {
-      if (compare1(x, x) !== 0) return hi;
-      do {
-        const mid = (lo + hi) >>> 1;
-        if (compare2(a[mid], x) < 0) lo = mid + 1;
-        else hi = mid;
-      } while (lo < hi);
-    }
-    return lo;
-  }
-
-  function right(a, x, lo = 0, hi = a.length) {
-    if (lo < hi) {
-      if (compare1(x, x) !== 0) return hi;
-      do {
-        const mid = (lo + hi) >>> 1;
-        if (compare2(a[mid], x) <= 0) lo = mid + 1;
-        else hi = mid;
-      } while (lo < hi);
-    }
-    return lo;
-  }
-
-  function center(a, x, lo = 0, hi = a.length) {
-    const i = left(a, x, lo, hi - 1);
-    return i > lo && delta(a[i - 1], x) > -delta(a[i], x) ? i - 1 : i;
-  }
-
-  return {left, center, right};
-}
-
-function bisector_zero() {
-  return 0;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-array/src/number.js
-function number_number(x) {
-  return x === null ? NaN : +x;
-}
-
-function* numbers(values, valueof) {
-  if (valueof === undefined) {
-    for (let value of values) {
-      if (value != null && (value = +value) >= value) {
-        yield value;
-      }
-    }
-  } else {
-    let index = -1;
-    for (let value of values) {
-      if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {
-        yield value;
-      }
-    }
-  }
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-array/src/bisect.js
-
-
-
-
-const ascendingBisect = bisector(ascending_ascending);
-const bisectRight = ascendingBisect.right;
-const bisectLeft = ascendingBisect.left;
-const bisectCenter = bisector(number_number).center;
-/* harmony default export */ const bisect = (bisectRight);
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/array.js
-
-
-
-/* harmony default export */ function src_array(a, b) {
-  return (isNumberArray(b) ? numberArray : genericArray)(a, b);
-}
-
-function genericArray(a, b) {
-  var nb = b ? b.length : 0,
-      na = a ? Math.min(nb, a.length) : 0,
-      x = new Array(na),
-      c = new Array(nb),
-      i;
-
-  for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);
-  for (; i < nb; ++i) c[i] = b[i];
-
-  return function(t) {
-    for (i = 0; i < na; ++i) c[i] = x[i](t);
-    return c;
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/date.js
-/* harmony default export */ function date(a, b) {
-  var d = new Date;
-  return a = +a, b = +b, function(t) {
-    return d.setTime(a * (1 - t) + b * t), d;
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/object.js
-
-
-/* harmony default export */ function object(a, b) {
-  var i = {},
-      c = {},
-      k;
-
-  if (a === null || typeof a !== "object") a = {};
-  if (b === null || typeof b !== "object") b = {};
-
-  for (k in b) {
-    if (k in a) {
-      i[k] = value(a[k], b[k]);
-    } else {
-      c[k] = b[k];
-    }
-  }
-
-  return function(t) {
-    for (k in i) c[k] = i[k](t);
-    return c;
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/numberArray.js
-/* harmony default export */ function src_numberArray(a, b) {
-  if (!b) b = [];
-  var n = a ? Math.min(b.length, a.length) : 0,
-      c = b.slice(),
-      i;
-  return function(t) {
-    for (i = 0; i < n; ++i) c[i] = a[i] * (1 - t) + b[i] * t;
-    return c;
-  };
-}
-
-function numberArray_isNumberArray(x) {
-  return ArrayBuffer.isView(x) && !(x instanceof DataView);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/value.js
-
-
-
-
-
-
-
-
-
-
-/* harmony default export */ function value(a, b) {
-  var t = typeof b, c;
-  return b == null || t === "boolean" ? d3_interpolate_src_constant(b)
-      : (t === "number" ? src_number
-      : t === "string" ? ((c = color(b)) ? (b = c, rgb) : string)
-      : b instanceof color ? rgb
-      : b instanceof Date ? date
-      : numberArray_isNumberArray(b) ? src_numberArray
-      : Array.isArray(b) ? genericArray
-      : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object
-      : src_number)(a, b);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-interpolate/src/round.js
-/* harmony default export */ function round(a, b) {
-  return a = +a, b = +b, function(t) {
-    return Math.round(a * (1 - t) + b * t);
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-scale/src/constant.js
-function constants(x) {
-  return function() {
-    return x;
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-scale/src/number.js
-function src_number_number(x) {
-  return +x;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-scale/src/continuous.js
-
-
-
-
-
-var unit = [0, 1];
-
-function continuous_identity(x) {
-  return x;
-}
-
-function normalize(a, b) {
-  return (b -= (a = +a))
-      ? function(x) { return (x - a) / b; }
-      : constants(isNaN(b) ? NaN : 0.5);
-}
-
-function clamper(a, b) {
-  var t;
-  if (a > b) t = a, a = b, b = t;
-  return function(x) { return Math.max(a, Math.min(b, x)); };
-}
-
-// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].
-// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].
-function bimap(domain, range, interpolate) {
-  var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];
-  if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);
-  else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);
-  return function(x) { return r0(d0(x)); };
-}
-
-function polymap(domain, range, interpolate) {
-  var j = Math.min(domain.length, range.length) - 1,
-      d = new Array(j),
-      r = new Array(j),
-      i = -1;
-
-  // Reverse descending domains.
-  if (domain[j] < domain[0]) {
-    domain = domain.slice().reverse();
-    range = range.slice().reverse();
-  }
-
-  while (++i < j) {
-    d[i] = normalize(domain[i], domain[i + 1]);
-    r[i] = interpolate(range[i], range[i + 1]);
-  }
-
-  return function(x) {
-    var i = bisect(domain, x, 1, j) - 1;
-    return r[i](d[i](x));
-  };
-}
-
-function copy(source, target) {
-  return target
-      .domain(source.domain())
-      .range(source.range())
-      .interpolate(source.interpolate())
-      .clamp(source.clamp())
-      .unknown(source.unknown());
-}
-
-function transformer() {
-  var domain = unit,
-      range = unit,
-      interpolate = value,
-      transform,
-      untransform,
-      unknown,
-      clamp = continuous_identity,
-      piecewise,
-      output,
-      input;
-
-  function rescale() {
-    var n = Math.min(domain.length, range.length);
-    if (clamp !== continuous_identity) clamp = clamper(domain[0], domain[n - 1]);
-    piecewise = n > 2 ? polymap : bimap;
-    output = input = null;
-    return scale;
-  }
-
-  function scale(x) {
-    return x == null || isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));
-  }
-
-  scale.invert = function(y) {
-    return clamp(untransform((input || (input = piecewise(range, domain.map(transform), src_number)))(y)));
-  };
-
-  scale.domain = function(_) {
-    return arguments.length ? (domain = Array.from(_, src_number_number), rescale()) : domain.slice();
-  };
-
-  scale.range = function(_) {
-    return arguments.length ? (range = Array.from(_), rescale()) : range.slice();
-  };
-
-  scale.rangeRound = function(_) {
-    return range = Array.from(_), interpolate = round, rescale();
-  };
-
-  scale.clamp = function(_) {
-    return arguments.length ? (clamp = _ ? true : continuous_identity, rescale()) : clamp !== continuous_identity;
-  };
-
-  scale.interpolate = function(_) {
-    return arguments.length ? (interpolate = _, rescale()) : interpolate;
-  };
-
-  scale.unknown = function(_) {
-    return arguments.length ? (unknown = _, scale) : unknown;
-  };
-
-  return function(t, u) {
-    transform = t, untransform = u;
-    return rescale();
-  };
-}
-
-function continuous() {
-  return transformer()(continuous_identity, continuous_identity);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-scale/src/init.js
-function initRange(domain, range) {
-  switch (arguments.length) {
-    case 0: break;
-    case 1: this.range(domain); break;
-    default: this.range(range).domain(domain); break;
-  }
-  return this;
-}
-
-function initInterpolator(domain, interpolator) {
-  switch (arguments.length) {
-    case 0: break;
-    case 1: {
-      if (typeof domain === "function") this.interpolator(domain);
-      else this.range(domain);
-      break;
-    }
-    default: {
-      this.domain(domain);
-      if (typeof interpolator === "function") this.interpolator(interpolator);
-      else this.range(interpolator);
-      break;
-    }
-  }
-  return this;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatSpecifier.js
-// [[fill]align][sign][symbol][0][width][,][.precision][~][type]
-var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i;
-
-function formatSpecifier(specifier) {
-  if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier);
-  var match;
-  return new FormatSpecifier({
-    fill: match[1],
-    align: match[2],
-    sign: match[3],
-    symbol: match[4],
-    zero: match[5],
-    width: match[6],
-    comma: match[7],
-    precision: match[8] && match[8].slice(1),
-    trim: match[9],
-    type: match[10]
-  });
-}
-
-formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof
-
-function FormatSpecifier(specifier) {
-  this.fill = specifier.fill === undefined ? " " : specifier.fill + "";
-  this.align = specifier.align === undefined ? ">" : specifier.align + "";
-  this.sign = specifier.sign === undefined ? "-" : specifier.sign + "";
-  this.symbol = specifier.symbol === undefined ? "" : specifier.symbol + "";
-  this.zero = !!specifier.zero;
-  this.width = specifier.width === undefined ? undefined : +specifier.width;
-  this.comma = !!specifier.comma;
-  this.precision = specifier.precision === undefined ? undefined : +specifier.precision;
-  this.trim = !!specifier.trim;
-  this.type = specifier.type === undefined ? "" : specifier.type + "";
-}
-
-FormatSpecifier.prototype.toString = function() {
-  return this.fill
-      + this.align
-      + this.sign
-      + this.symbol
-      + (this.zero ? "0" : "")
-      + (this.width === undefined ? "" : Math.max(1, this.width | 0))
-      + (this.comma ? "," : "")
-      + (this.precision === undefined ? "" : "." + Math.max(0, this.precision | 0))
-      + (this.trim ? "~" : "")
-      + this.type;
-};
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatDecimal.js
-/* harmony default export */ function formatDecimal(x) {
-  return Math.abs(x = Math.round(x)) >= 1e21
-      ? x.toLocaleString("en").replace(/,/g, "")
-      : x.toString(10);
-}
-
-// Computes the decimal coefficient and exponent of the specified number x with
-// significant digits p, where x is positive and p is in [1, 21] or undefined.
-// For example, formatDecimalParts(1.23) returns ["123", 0].
-function formatDecimalParts(x, p) {
-  if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity
-  var i, coefficient = x.slice(0, i);
-
-  // The string returned by toExponential either has the form \d\.\d+e[-+]\d+
-  // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3).
-  return [
-    coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,
-    +x.slice(i + 1)
-  ];
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/exponent.js
-
-
-/* harmony default export */ function exponent(x) {
-  return x = formatDecimalParts(Math.abs(x)), x ? x[1] : NaN;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/precisionPrefix.js
-
-
-/* harmony default export */ function precisionPrefix(step, value) {
-  return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatGroup.js
-/* harmony default export */ function formatGroup(grouping, thousands) {
-  return function(value, width) {
-    var i = value.length,
-        t = [],
-        j = 0,
-        g = grouping[0],
-        length = 0;
-
-    while (i > 0 && g > 0) {
-      if (length + g + 1 > width) g = Math.max(1, width - length);
-      t.push(value.substring(i -= g, i + g));
-      if ((length += g + 1) > width) break;
-      g = grouping[j = (j + 1) % grouping.length];
-    }
-
-    return t.reverse().join(thousands);
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatNumerals.js
-/* harmony default export */ function formatNumerals(numerals) {
-  return function(value) {
-    return value.replace(/[0-9]/g, function(i) {
-      return numerals[+i];
-    });
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatTrim.js
-// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.
-/* harmony default export */ function formatTrim(s) {
-  out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {
-    switch (s[i]) {
-      case ".": i0 = i1 = i; break;
-      case "0": if (i0 === 0) i0 = i; i1 = i; break;
-      default: if (!+s[i]) break out; if (i0 > 0) i0 = 0; break;
-    }
-  }
-  return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatPrefixAuto.js
-
-
-var prefixExponent;
-
-/* harmony default export */ function formatPrefixAuto(x, p) {
-  var d = formatDecimalParts(x, p);
-  if (!d) return x + "";
-  var coefficient = d[0],
-      exponent = d[1],
-      i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,
-      n = coefficient.length;
-  return i === n ? coefficient
-      : i > n ? coefficient + new Array(i - n + 1).join("0")
-      : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i)
-      : "0." + new Array(1 - i).join("0") + formatDecimalParts(x, Math.max(0, p + i - 1))[0]; // less than 1y!
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatRounded.js
-
-
-/* harmony default export */ function formatRounded(x, p) {
-  var d = formatDecimalParts(x, p);
-  if (!d) return x + "";
-  var coefficient = d[0],
-      exponent = d[1];
-  return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient
-      : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1)
-      : coefficient + new Array(exponent - coefficient.length + 2).join("0");
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/formatTypes.js
-
-
-
-
-/* harmony default export */ const formatTypes = ({
-  "%": (x, p) => (x * 100).toFixed(p),
-  "b": (x) => Math.round(x).toString(2),
-  "c": (x) => x + "",
-  "d": formatDecimal,
-  "e": (x, p) => x.toExponential(p),
-  "f": (x, p) => x.toFixed(p),
-  "g": (x, p) => x.toPrecision(p),
-  "o": (x) => Math.round(x).toString(8),
-  "p": (x, p) => formatRounded(x * 100, p),
-  "r": formatRounded,
-  "s": formatPrefixAuto,
-  "X": (x) => Math.round(x).toString(16).toUpperCase(),
-  "x": (x) => Math.round(x).toString(16)
-});
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/identity.js
-/* harmony default export */ function d3_format_src_identity(x) {
-  return x;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/locale.js
-
-
-
-
-
-
-
-
-
-var map = Array.prototype.map,
-    prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"];
-
-/* harmony default export */ function locale(locale) {
-  var group = locale.grouping === undefined || locale.thousands === undefined ? d3_format_src_identity : formatGroup(map.call(locale.grouping, Number), locale.thousands + ""),
-      currencyPrefix = locale.currency === undefined ? "" : locale.currency[0] + "",
-      currencySuffix = locale.currency === undefined ? "" : locale.currency[1] + "",
-      decimal = locale.decimal === undefined ? "." : locale.decimal + "",
-      numerals = locale.numerals === undefined ? d3_format_src_identity : formatNumerals(map.call(locale.numerals, String)),
-      percent = locale.percent === undefined ? "%" : locale.percent + "",
-      minus = locale.minus === undefined ? "−" : locale.minus + "",
-      nan = locale.nan === undefined ? "NaN" : locale.nan + "";
-
-  function newFormat(specifier) {
-    specifier = formatSpecifier(specifier);
-
-    var fill = specifier.fill,
-        align = specifier.align,
-        sign = specifier.sign,
-        symbol = specifier.symbol,
-        zero = specifier.zero,
-        width = specifier.width,
-        comma = specifier.comma,
-        precision = specifier.precision,
-        trim = specifier.trim,
-        type = specifier.type;
-
-    // The "n" type is an alias for ",g".
-    if (type === "n") comma = true, type = "g";
-
-    // The "" type, and any invalid type, is an alias for ".12~g".
-    else if (!formatTypes[type]) precision === undefined && (precision = 12), trim = true, type = "g";
-
-    // If zero fill is specified, padding goes after sign and before digits.
-    if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "=";
-
-    // Compute the prefix and suffix.
-    // For SI-prefix, the suffix is lazily computed.
-    var prefix = symbol === "$" ? currencyPrefix : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "",
-        suffix = symbol === "$" ? currencySuffix : /[%p]/.test(type) ? percent : "";
-
-    // What format function should we use?
-    // Is this an integer type?
-    // Can this type generate exponential notation?
-    var formatType = formatTypes[type],
-        maybeSuffix = /[defgprs%]/.test(type);
-
-    // Set the default precision if not specified,
-    // or clamp the specified precision to the supported range.
-    // For significant precision, it must be in [1, 21].
-    // For fixed precision, it must be in [0, 20].
-    precision = precision === undefined ? 6
-        : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))
-        : Math.max(0, Math.min(20, precision));
-
-    function format(value) {
-      var valuePrefix = prefix,
-          valueSuffix = suffix,
-          i, n, c;
-
-      if (type === "c") {
-        valueSuffix = formatType(value) + valueSuffix;
-        value = "";
-      } else {
-        value = +value;
-
-        // Determine the sign. -0 is not less than 0, but 1 / -0 is!
-        var valueNegative = value < 0 || 1 / value < 0;
-
-        // Perform the initial formatting.
-        value = isNaN(value) ? nan : formatType(Math.abs(value), precision);
-
-        // Trim insignificant zeros.
-        if (trim) value = formatTrim(value);
-
-        // If a negative value rounds to zero after formatting, and no explicit positive sign is requested, hide the sign.
-        if (valueNegative && +value === 0 && sign !== "+") valueNegative = false;
-
-        // Compute the prefix and suffix.
-        valuePrefix = (valueNegative ? (sign === "(" ? sign : minus) : sign === "-" || sign === "(" ? "" : sign) + valuePrefix;
-        valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : "");
-
-        // Break the formatted value into the integer “value” part that can be
-        // grouped, and fractional or exponential “suffix” part that is not.
-        if (maybeSuffix) {
-          i = -1, n = value.length;
-          while (++i < n) {
-            if (c = value.charCodeAt(i), 48 > c || c > 57) {
-              valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;
-              value = value.slice(0, i);
-              break;
-            }
-          }
-        }
-      }
-
-      // If the fill character is not "0", grouping is applied before padding.
-      if (comma && !zero) value = group(value, Infinity);
-
-      // Compute the padding.
-      var length = valuePrefix.length + value.length + valueSuffix.length,
-          padding = length < width ? new Array(width - length + 1).join(fill) : "";
-
-      // If the fill character is "0", grouping is applied after padding.
-      if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = "";
-
-      // Reconstruct the final output based on the desired alignment.
-      switch (align) {
-        case "<": value = valuePrefix + value + valueSuffix + padding; break;
-        case "=": value = valuePrefix + padding + value + valueSuffix; break;
-        case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;
-        default: value = padding + valuePrefix + value + valueSuffix; break;
-      }
-
-      return numerals(value);
-    }
-
-    format.toString = function() {
-      return specifier + "";
-    };
-
-    return format;
-  }
-
-  function formatPrefix(specifier, value) {
-    var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)),
-        e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,
-        k = Math.pow(10, -e),
-        prefix = prefixes[8 + e / 3];
-    return function(value) {
-      return f(k * value) + prefix;
-    };
-  }
-
-  return {
-    format: newFormat,
-    formatPrefix: formatPrefix
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/defaultLocale.js
-
-
-var defaultLocale_locale;
-var format;
-var formatPrefix;
-
-defaultLocale({
-  thousands: ",",
-  grouping: [3],
-  currency: ["$", ""]
-});
-
-function defaultLocale(definition) {
-  defaultLocale_locale = locale(definition);
-  format = defaultLocale_locale.format;
-  formatPrefix = defaultLocale_locale.formatPrefix;
-  return defaultLocale_locale;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/precisionRound.js
-
-
-/* harmony default export */ function precisionRound(step, max) {
-  step = Math.abs(step), max = Math.abs(max) - step;
-  return Math.max(0, exponent(max) - exponent(step)) + 1;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-format/src/precisionFixed.js
-
-
-/* harmony default export */ function precisionFixed(step) {
-  return Math.max(0, -exponent(Math.abs(step)));
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-scale/src/tickFormat.js
-
-
-
-function tickFormat(start, stop, count, specifier) {
-  var step = tickStep(start, stop, count),
-      precision;
-  specifier = formatSpecifier(specifier == null ? ",f" : specifier);
-  switch (specifier.type) {
-    case "s": {
-      var value = Math.max(Math.abs(start), Math.abs(stop));
-      if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;
-      return formatPrefix(specifier, value);
-    }
-    case "":
-    case "e":
-    case "g":
-    case "p":
-    case "r": {
-      if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e");
-      break;
-    }
-    case "f":
-    case "%": {
-      if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2;
-      break;
-    }
-  }
-  return format(specifier);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-scale/src/linear.js
-
-
-
-
-
-function linearish(scale) {
-  var domain = scale.domain;
-
-  scale.ticks = function(count) {
-    var d = domain();
-    return ticks(d[0], d[d.length - 1], count == null ? 10 : count);
-  };
-
-  scale.tickFormat = function(count, specifier) {
-    var d = domain();
-    return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);
-  };
-
-  scale.nice = function(count) {
-    if (count == null) count = 10;
-
-    var d = domain();
-    var i0 = 0;
-    var i1 = d.length - 1;
-    var start = d[i0];
-    var stop = d[i1];
-    var prestep;
-    var step;
-    var maxIter = 10;
-
-    if (stop < start) {
-      step = start, start = stop, stop = step;
-      step = i0, i0 = i1, i1 = step;
-    }
-    
-    while (maxIter-- > 0) {
-      step = tickIncrement(start, stop, count);
-      if (step === prestep) {
-        d[i0] = start
-        d[i1] = stop
-        return domain(d);
-      } else if (step > 0) {
-        start = Math.floor(start / step) * step;
-        stop = Math.ceil(stop / step) * step;
-      } else if (step < 0) {
-        start = Math.ceil(start * step) / step;
-        stop = Math.floor(stop * step) / step;
-      } else {
-        break;
-      }
-      prestep = step;
-    }
-
-    return scale;
-  };
-
-  return scale;
-}
-
-function linear_linear() {
-  var scale = continuous();
-
-  scale.copy = function() {
-    return copy(scale, linear_linear());
-  };
-
-  initRange.apply(scale, arguments);
-
-  return linearish(scale);
-}
-
-;// CONCATENATED MODULE: ./node_modules/internmap/src/index.js
-class InternMap extends Map {
-  constructor(entries, key = keyof) {
-    super();
-    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});
-    if (entries != null) for (const [key, value] of entries) this.set(key, value);
-  }
-  get(key) {
-    return super.get(intern_get(this, key));
-  }
-  has(key) {
-    return super.has(intern_get(this, key));
-  }
-  set(key, value) {
-    return super.set(intern_set(this, key), value);
-  }
-  delete(key) {
-    return super.delete(intern_delete(this, key));
-  }
-}
-
-class InternSet extends Set {
-  constructor(values, key = keyof) {
-    super();
-    Object.defineProperties(this, {_intern: {value: new Map()}, _key: {value: key}});
-    if (values != null) for (const value of values) this.add(value);
-  }
-  has(value) {
-    return super.has(intern_get(this, value));
-  }
-  add(value) {
-    return super.add(intern_set(this, value));
-  }
-  delete(value) {
-    return super.delete(intern_delete(this, value));
-  }
-}
-
-function intern_get({_intern, _key}, value) {
-  const key = _key(value);
-  return _intern.has(key) ? _intern.get(key) : value;
-}
-
-function intern_set({_intern, _key}, value) {
-  const key = _key(value);
-  if (_intern.has(key)) return _intern.get(key);
-  _intern.set(key, value);
-  return value;
-}
-
-function intern_delete({_intern, _key}, value) {
-  const key = _key(value);
-  if (_intern.has(key)) {
-    value = _intern.get(key);
-    _intern.delete(key);
-  }
-  return value;
-}
-
-function keyof(value) {
-  return value !== null && typeof value === "object" ? value.valueOf() : value;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-scale/src/ordinal.js
-
-
-
-const implicit = Symbol("implicit");
-
-function ordinal() {
-  var index = new InternMap(),
-      domain = [],
-      range = [],
-      unknown = implicit;
-
-  function scale(d) {
-    let i = index.get(d);
-    if (i === undefined) {
-      if (unknown !== implicit) return unknown;
-      index.set(d, i = domain.push(d) - 1);
-    }
-    return range[i % range.length];
-  }
-
-  scale.domain = function(_) {
-    if (!arguments.length) return domain.slice();
-    domain = [], index = new InternMap();
-    for (const value of _) {
-      if (index.has(value)) continue;
-      index.set(value, domain.push(value) - 1);
-    }
-    return scale;
-  };
-
-  scale.range = function(_) {
-    return arguments.length ? (range = Array.from(_), scale) : range.slice();
-  };
-
-  scale.unknown = function(_) {
-    return arguments.length ? (unknown = _, scale) : unknown;
-  };
-
-  scale.copy = function() {
-    return ordinal(domain, range).unknown(unknown);
-  };
-
-  initRange.apply(scale, arguments);
-
-  return scale;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-time/src/duration.js
-const durationSecond = 1000;
-const durationMinute = durationSecond * 60;
-const durationHour = durationMinute * 60;
-const durationDay = durationHour * 24;
-const durationWeek = durationDay * 7;
-const durationMonth = durationDay * 30;
-const durationYear = durationDay * 365;
-
-;// CONCATENATED MODULE: ./node_modules/d3-time/src/interval.js
-const interval_t0 = new Date, interval_t1 = new Date;
-
-function timeInterval(floori, offseti, count, field) {
-
-  function interval(date) {
-    return floori(date = arguments.length === 0 ? new Date : new Date(+date)), date;
-  }
-
-  interval.floor = (date) => {
-    return floori(date = new Date(+date)), date;
-  };
-
-  interval.ceil = (date) => {
-    return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
-  };
-
-  interval.round = (date) => {
-    const d0 = interval(date), d1 = interval.ceil(date);
-    return date - d0 < d1 - date ? d0 : d1;
-  };
-
-  interval.offset = (date, step) => {
-    return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
-  };
-
-  interval.range = (start, stop, step) => {
-    const range = [];
-    start = interval.ceil(start);
-    step = step == null ? 1 : Math.floor(step);
-    if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
-    let previous;
-    do range.push(previous = new Date(+start)), offseti(start, step), floori(start);
-    while (previous < start && start < stop);
-    return range;
-  };
-
-  interval.filter = (test) => {
-    return timeInterval((date) => {
-      if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
-    }, (date, step) => {
-      if (date >= date) {
-        if (step < 0) while (++step <= 0) {
-          while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
-        } else while (--step >= 0) {
-          while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty
-        }
-      }
-    });
-  };
-
-  if (count) {
-    interval.count = (start, end) => {
-      interval_t0.setTime(+start), interval_t1.setTime(+end);
-      floori(interval_t0), floori(interval_t1);
-      return Math.floor(count(interval_t0, interval_t1));
-    };
-
-    interval.every = (step) => {
-      step = Math.floor(step);
-      return !isFinite(step) || !(step > 0) ? null
-          : !(step > 1) ? interval
-          : interval.filter(field
-              ? (d) => field(d) % step === 0
-              : (d) => interval.count(0, d) % step === 0);
-    };
-  }
-
-  return interval;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-time/src/millisecond.js
-
-
-const millisecond = timeInterval(() => {
-  // noop
-}, (date, step) => {
-  date.setTime(+date + step);
-}, (start, end) => {
-  return end - start;
-});
-
-// An optimized implementation for this simple case.
-millisecond.every = (k) => {
-  k = Math.floor(k);
-  if (!isFinite(k) || !(k > 0)) return null;
-  if (!(k > 1)) return millisecond;
-  return timeInterval((date) => {
-    date.setTime(Math.floor(date / k) * k);
-  }, (date, step) => {
-    date.setTime(+date + step * k);
-  }, (start, end) => {
-    return (end - start) / k;
-  });
-};
-
-const milliseconds = millisecond.range;
-
-;// CONCATENATED MODULE: ./node_modules/d3-time/src/second.js
-
-
-
-const second = timeInterval((date) => {
-  date.setTime(date - date.getMilliseconds());
-}, (date, step) => {
-  date.setTime(+date + step * durationSecond);
-}, (start, end) => {
-  return (end - start) / durationSecond;
-}, (date) => {
-  return date.getUTCSeconds();
-});
-
-const seconds = second.range;
-
-;// CONCATENATED MODULE: ./node_modules/d3-time/src/minute.js
-
-
-
-const timeMinute = timeInterval((date) => {
-  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);
-}, (date, step) => {
-  date.setTime(+date + step * durationMinute);
-}, (start, end) => {
-  return (end - start) / durationMinute;
-}, (date) => {
-  return date.getMinutes();
-});
-
-const timeMinutes = timeMinute.range;
-
-const utcMinute = timeInterval((date) => {
-  date.setUTCSeconds(0, 0);
-}, (date, step) => {
-  date.setTime(+date + step * durationMinute);
-}, (start, end) => {
-  return (end - start) / durationMinute;
-}, (date) => {
-  return date.getUTCMinutes();
-});
-
-const utcMinutes = utcMinute.range;
-
-;// CONCATENATED MODULE: ./node_modules/d3-time/src/hour.js
-
-
-
-const timeHour = timeInterval((date) => {
-  date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);
-}, (date, step) => {
-  date.setTime(+date + step * durationHour);
-}, (start, end) => {
-  return (end - start) / durationHour;
-}, (date) => {
-  return date.getHours();
-});
-
-const timeHours = timeHour.range;
-
-const utcHour = timeInterval((date) => {
-  date.setUTCMinutes(0, 0, 0);
-}, (date, step) => {
-  date.setTime(+date + step * durationHour);
-}, (start, end) => {
-  return (end - start) / durationHour;
-}, (date) => {
-  return date.getUTCHours();
-});
-
-const utcHours = utcHour.range;
-
-;// CONCATENATED MODULE: ./node_modules/d3-time/src/day.js
-
-
-
-const timeDay = timeInterval(
-  date => date.setHours(0, 0, 0, 0),
-  (date, step) => date.setDate(date.getDate() + step),
-  (start, end) => (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay,
-  date => date.getDate() - 1
-);
-
-const timeDays = timeDay.range;
-
-const utcDay = timeInterval((date) => {
-  date.setUTCHours(0, 0, 0, 0);
-}, (date, step) => {
-  date.setUTCDate(date.getUTCDate() + step);
-}, (start, end) => {
-  return (end - start) / durationDay;
-}, (date) => {
-  return date.getUTCDate() - 1;
-});
-
-const utcDays = utcDay.range;
-
-const unixDay = timeInterval((date) => {
-  date.setUTCHours(0, 0, 0, 0);
-}, (date, step) => {
-  date.setUTCDate(date.getUTCDate() + step);
-}, (start, end) => {
-  return (end - start) / durationDay;
-}, (date) => {
-  return Math.floor(date / durationDay);
-});
-
-const unixDays = unixDay.range;
-
-;// CONCATENATED MODULE: ./node_modules/d3-time/src/week.js
-
-
-
-function timeWeekday(i) {
-  return timeInterval((date) => {
-    date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
-    date.setHours(0, 0, 0, 0);
-  }, (date, step) => {
-    date.setDate(date.getDate() + step * 7);
-  }, (start, end) => {
-    return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
-  });
-}
-
-const timeSunday = timeWeekday(0);
-const timeMonday = timeWeekday(1);
-const timeTuesday = timeWeekday(2);
-const timeWednesday = timeWeekday(3);
-const timeThursday = timeWeekday(4);
-const timeFriday = timeWeekday(5);
-const timeSaturday = timeWeekday(6);
-
-const timeSundays = timeSunday.range;
-const timeMondays = timeMonday.range;
-const timeTuesdays = timeTuesday.range;
-const timeWednesdays = timeWednesday.range;
-const timeThursdays = timeThursday.range;
-const timeFridays = timeFriday.range;
-const timeSaturdays = timeSaturday.range;
-
-function utcWeekday(i) {
-  return timeInterval((date) => {
-    date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
-    date.setUTCHours(0, 0, 0, 0);
-  }, (date, step) => {
-    date.setUTCDate(date.getUTCDate() + step * 7);
-  }, (start, end) => {
-    return (end - start) / durationWeek;
-  });
-}
-
-const utcSunday = utcWeekday(0);
-const utcMonday = utcWeekday(1);
-const utcTuesday = utcWeekday(2);
-const utcWednesday = utcWeekday(3);
-const utcThursday = utcWeekday(4);
-const utcFriday = utcWeekday(5);
-const utcSaturday = utcWeekday(6);
-
-const utcSundays = utcSunday.range;
-const utcMondays = utcMonday.range;
-const utcTuesdays = utcTuesday.range;
-const utcWednesdays = utcWednesday.range;
-const utcThursdays = utcThursday.range;
-const utcFridays = utcFriday.range;
-const utcSaturdays = utcSaturday.range;
-
-;// CONCATENATED MODULE: ./node_modules/d3-time/src/month.js
-
-
-const timeMonth = timeInterval((date) => {
-  date.setDate(1);
-  date.setHours(0, 0, 0, 0);
-}, (date, step) => {
-  date.setMonth(date.getMonth() + step);
-}, (start, end) => {
-  return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
-}, (date) => {
-  return date.getMonth();
-});
-
-const timeMonths = timeMonth.range;
-
-const utcMonth = timeInterval((date) => {
-  date.setUTCDate(1);
-  date.setUTCHours(0, 0, 0, 0);
-}, (date, step) => {
-  date.setUTCMonth(date.getUTCMonth() + step);
-}, (start, end) => {
-  return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
-}, (date) => {
-  return date.getUTCMonth();
-});
-
-const utcMonths = utcMonth.range;
-
-;// CONCATENATED MODULE: ./node_modules/d3-time/src/year.js
-
-
-const timeYear = timeInterval((date) => {
-  date.setMonth(0, 1);
-  date.setHours(0, 0, 0, 0);
-}, (date, step) => {
-  date.setFullYear(date.getFullYear() + step);
-}, (start, end) => {
-  return end.getFullYear() - start.getFullYear();
-}, (date) => {
-  return date.getFullYear();
-});
-
-// An optimized implementation for this simple case.
-timeYear.every = (k) => {
-  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {
-    date.setFullYear(Math.floor(date.getFullYear() / k) * k);
-    date.setMonth(0, 1);
-    date.setHours(0, 0, 0, 0);
-  }, (date, step) => {
-    date.setFullYear(date.getFullYear() + step * k);
-  });
-};
-
-const timeYears = timeYear.range;
-
-const utcYear = timeInterval((date) => {
-  date.setUTCMonth(0, 1);
-  date.setUTCHours(0, 0, 0, 0);
-}, (date, step) => {
-  date.setUTCFullYear(date.getUTCFullYear() + step);
-}, (start, end) => {
-  return end.getUTCFullYear() - start.getUTCFullYear();
-}, (date) => {
-  return date.getUTCFullYear();
-});
-
-// An optimized implementation for this simple case.
-utcYear.every = (k) => {
-  return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : timeInterval((date) => {
-    date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
-    date.setUTCMonth(0, 1);
-    date.setUTCHours(0, 0, 0, 0);
-  }, (date, step) => {
-    date.setUTCFullYear(date.getUTCFullYear() + step * k);
-  });
-};
-
-const utcYears = utcYear.range;
-
-;// CONCATENATED MODULE: ./node_modules/d3-time/src/ticks.js
-
-
-
-
-
-
-
-
-
-
-
-function ticker(year, month, week, day, hour, minute) {
-
-  const tickIntervals = [
-    [second,  1,      durationSecond],
-    [second,  5,  5 * durationSecond],
-    [second, 15, 15 * durationSecond],
-    [second, 30, 30 * durationSecond],
-    [minute,  1,      durationMinute],
-    [minute,  5,  5 * durationMinute],
-    [minute, 15, 15 * durationMinute],
-    [minute, 30, 30 * durationMinute],
-    [  hour,  1,      durationHour  ],
-    [  hour,  3,  3 * durationHour  ],
-    [  hour,  6,  6 * durationHour  ],
-    [  hour, 12, 12 * durationHour  ],
-    [   day,  1,      durationDay   ],
-    [   day,  2,  2 * durationDay   ],
-    [  week,  1,      durationWeek  ],
-    [ month,  1,      durationMonth ],
-    [ month,  3,  3 * durationMonth ],
-    [  year,  1,      durationYear  ]
-  ];
-
-  function ticks(start, stop, count) {
-    const reverse = stop < start;
-    if (reverse) [start, stop] = [stop, start];
-    const interval = count && typeof count.range === "function" ? count : tickInterval(start, stop, count);
-    const ticks = interval ? interval.range(start, +stop + 1) : []; // inclusive stop
-    return reverse ? ticks.reverse() : ticks;
-  }
-
-  function tickInterval(start, stop, count) {
-    const target = Math.abs(stop - start) / count;
-    const i = bisector(([,, step]) => step).right(tickIntervals, target);
-    if (i === tickIntervals.length) return year.every(tickStep(start / durationYear, stop / durationYear, count));
-    if (i === 0) return millisecond.every(Math.max(tickStep(start, stop, count), 1));
-    const [t, step] = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];
-    return t.every(step);
-  }
-
-  return [ticks, tickInterval];
-}
-
-const [utcTicks, utcTickInterval] = ticker(utcYear, utcMonth, utcSunday, unixDay, utcHour, utcMinute);
-const [timeTicks, timeTickInterval] = ticker(timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute);
-
-
-
-;// CONCATENATED MODULE: ./node_modules/d3-time-format/src/locale.js
-
-
-function localDate(d) {
-  if (0 <= d.y && d.y < 100) {
-    var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);
-    date.setFullYear(d.y);
-    return date;
-  }
-  return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);
-}
-
-function utcDate(d) {
-  if (0 <= d.y && d.y < 100) {
-    var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));
-    date.setUTCFullYear(d.y);
-    return date;
-  }
-  return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));
-}
-
-function newDate(y, m, d) {
-  return {y: y, m: m, d: d, H: 0, M: 0, S: 0, L: 0};
-}
-
-function formatLocale(locale) {
-  var locale_dateTime = locale.dateTime,
-      locale_date = locale.date,
-      locale_time = locale.time,
-      locale_periods = locale.periods,
-      locale_weekdays = locale.days,
-      locale_shortWeekdays = locale.shortDays,
-      locale_months = locale.months,
-      locale_shortMonths = locale.shortMonths;
-
-  var periodRe = formatRe(locale_periods),
-      periodLookup = formatLookup(locale_periods),
-      weekdayRe = formatRe(locale_weekdays),
-      weekdayLookup = formatLookup(locale_weekdays),
-      shortWeekdayRe = formatRe(locale_shortWeekdays),
-      shortWeekdayLookup = formatLookup(locale_shortWeekdays),
-      monthRe = formatRe(locale_months),
-      monthLookup = formatLookup(locale_months),
-      shortMonthRe = formatRe(locale_shortMonths),
-      shortMonthLookup = formatLookup(locale_shortMonths);
-
-  var formats = {
-    "a": formatShortWeekday,
-    "A": formatWeekday,
-    "b": formatShortMonth,
-    "B": formatMonth,
-    "c": null,
-    "d": formatDayOfMonth,
-    "e": formatDayOfMonth,
-    "f": formatMicroseconds,
-    "g": formatYearISO,
-    "G": formatFullYearISO,
-    "H": formatHour24,
-    "I": formatHour12,
-    "j": formatDayOfYear,
-    "L": formatMilliseconds,
-    "m": formatMonthNumber,
-    "M": formatMinutes,
-    "p": formatPeriod,
-    "q": formatQuarter,
-    "Q": formatUnixTimestamp,
-    "s": formatUnixTimestampSeconds,
-    "S": formatSeconds,
-    "u": formatWeekdayNumberMonday,
-    "U": formatWeekNumberSunday,
-    "V": formatWeekNumberISO,
-    "w": formatWeekdayNumberSunday,
-    "W": formatWeekNumberMonday,
-    "x": null,
-    "X": null,
-    "y": formatYear,
-    "Y": formatFullYear,
-    "Z": formatZone,
-    "%": formatLiteralPercent
-  };
-
-  var utcFormats = {
-    "a": formatUTCShortWeekday,
-    "A": formatUTCWeekday,
-    "b": formatUTCShortMonth,
-    "B": formatUTCMonth,
-    "c": null,
-    "d": formatUTCDayOfMonth,
-    "e": formatUTCDayOfMonth,
-    "f": formatUTCMicroseconds,
-    "g": formatUTCYearISO,
-    "G": formatUTCFullYearISO,
-    "H": formatUTCHour24,
-    "I": formatUTCHour12,
-    "j": formatUTCDayOfYear,
-    "L": formatUTCMilliseconds,
-    "m": formatUTCMonthNumber,
-    "M": formatUTCMinutes,
-    "p": formatUTCPeriod,
-    "q": formatUTCQuarter,
-    "Q": formatUnixTimestamp,
-    "s": formatUnixTimestampSeconds,
-    "S": formatUTCSeconds,
-    "u": formatUTCWeekdayNumberMonday,
-    "U": formatUTCWeekNumberSunday,
-    "V": formatUTCWeekNumberISO,
-    "w": formatUTCWeekdayNumberSunday,
-    "W": formatUTCWeekNumberMonday,
-    "x": null,
-    "X": null,
-    "y": formatUTCYear,
-    "Y": formatUTCFullYear,
-    "Z": formatUTCZone,
-    "%": formatLiteralPercent
-  };
-
-  var parses = {
-    "a": parseShortWeekday,
-    "A": parseWeekday,
-    "b": parseShortMonth,
-    "B": parseMonth,
-    "c": parseLocaleDateTime,
-    "d": parseDayOfMonth,
-    "e": parseDayOfMonth,
-    "f": parseMicroseconds,
-    "g": parseYear,
-    "G": parseFullYear,
-    "H": parseHour24,
-    "I": parseHour24,
-    "j": parseDayOfYear,
-    "L": parseMilliseconds,
-    "m": parseMonthNumber,
-    "M": parseMinutes,
-    "p": parsePeriod,
-    "q": parseQuarter,
-    "Q": parseUnixTimestamp,
-    "s": parseUnixTimestampSeconds,
-    "S": parseSeconds,
-    "u": parseWeekdayNumberMonday,
-    "U": parseWeekNumberSunday,
-    "V": parseWeekNumberISO,
-    "w": parseWeekdayNumberSunday,
-    "W": parseWeekNumberMonday,
-    "x": parseLocaleDate,
-    "X": parseLocaleTime,
-    "y": parseYear,
-    "Y": parseFullYear,
-    "Z": parseZone,
-    "%": parseLiteralPercent
-  };
-
-  // These recursive directive definitions must be deferred.
-  formats.x = newFormat(locale_date, formats);
-  formats.X = newFormat(locale_time, formats);
-  formats.c = newFormat(locale_dateTime, formats);
-  utcFormats.x = newFormat(locale_date, utcFormats);
-  utcFormats.X = newFormat(locale_time, utcFormats);
-  utcFormats.c = newFormat(locale_dateTime, utcFormats);
-
-  function newFormat(specifier, formats) {
-    return function(date) {
-      var string = [],
-          i = -1,
-          j = 0,
-          n = specifier.length,
-          c,
-          pad,
-          format;
-
-      if (!(date instanceof Date)) date = new Date(+date);
-
-      while (++i < n) {
-        if (specifier.charCodeAt(i) === 37) {
-          string.push(specifier.slice(j, i));
-          if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);
-          else pad = c === "e" ? " " : "0";
-          if (format = formats[c]) c = format(date, pad);
-          string.push(c);
-          j = i + 1;
-        }
-      }
-
-      string.push(specifier.slice(j, i));
-      return string.join("");
-    };
-  }
-
-  function newParse(specifier, Z) {
-    return function(string) {
-      var d = newDate(1900, undefined, 1),
-          i = parseSpecifier(d, specifier, string += "", 0),
-          week, day;
-      if (i != string.length) return null;
-
-      // If a UNIX timestamp is specified, return it.
-      if ("Q" in d) return new Date(d.Q);
-      if ("s" in d) return new Date(d.s * 1000 + ("L" in d ? d.L : 0));
-
-      // If this is utcParse, never use the local timezone.
-      if (Z && !("Z" in d)) d.Z = 0;
-
-      // The am-pm flag is 0 for AM, and 1 for PM.
-      if ("p" in d) d.H = d.H % 12 + d.p * 12;
-
-      // If the month was not specified, inherit from the quarter.
-      if (d.m === undefined) d.m = "q" in d ? d.q : 0;
-
-      // Convert day-of-week and week-of-year to day-of-year.
-      if ("V" in d) {
-        if (d.V < 1 || d.V > 53) return null;
-        if (!("w" in d)) d.w = 1;
-        if ("Z" in d) {
-          week = utcDate(newDate(d.y, 0, 1)), day = week.getUTCDay();
-          week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);
-          week = utcDay.offset(week, (d.V - 1) * 7);
-          d.y = week.getUTCFullYear();
-          d.m = week.getUTCMonth();
-          d.d = week.getUTCDate() + (d.w + 6) % 7;
-        } else {
-          week = localDate(newDate(d.y, 0, 1)), day = week.getDay();
-          week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);
-          week = timeDay.offset(week, (d.V - 1) * 7);
-          d.y = week.getFullYear();
-          d.m = week.getMonth();
-          d.d = week.getDate() + (d.w + 6) % 7;
-        }
-      } else if ("W" in d || "U" in d) {
-        if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0;
-        day = "Z" in d ? utcDate(newDate(d.y, 0, 1)).getUTCDay() : localDate(newDate(d.y, 0, 1)).getDay();
-        d.m = 0;
-        d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;
-      }
-
-      // If a time zone is specified, all fields are interpreted as UTC and then
-      // offset according to the specified time zone.
-      if ("Z" in d) {
-        d.H += d.Z / 100 | 0;
-        d.M += d.Z % 100;
-        return utcDate(d);
-      }
-
-      // Otherwise, all fields are in local time.
-      return localDate(d);
-    };
-  }
-
-  function parseSpecifier(d, specifier, string, j) {
-    var i = 0,
-        n = specifier.length,
-        m = string.length,
-        c,
-        parse;
-
-    while (i < n) {
-      if (j >= m) return -1;
-      c = specifier.charCodeAt(i++);
-      if (c === 37) {
-        c = specifier.charAt(i++);
-        parse = parses[c in pads ? specifier.charAt(i++) : c];
-        if (!parse || ((j = parse(d, string, j)) < 0)) return -1;
-      } else if (c != string.charCodeAt(j++)) {
-        return -1;
-      }
-    }
-
-    return j;
-  }
-
-  function parsePeriod(d, string, i) {
-    var n = periodRe.exec(string.slice(i));
-    return n ? (d.p = periodLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
-  }
-
-  function parseShortWeekday(d, string, i) {
-    var n = shortWeekdayRe.exec(string.slice(i));
-    return n ? (d.w = shortWeekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
-  }
-
-  function parseWeekday(d, string, i) {
-    var n = weekdayRe.exec(string.slice(i));
-    return n ? (d.w = weekdayLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
-  }
-
-  function parseShortMonth(d, string, i) {
-    var n = shortMonthRe.exec(string.slice(i));
-    return n ? (d.m = shortMonthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
-  }
-
-  function parseMonth(d, string, i) {
-    var n = monthRe.exec(string.slice(i));
-    return n ? (d.m = monthLookup.get(n[0].toLowerCase()), i + n[0].length) : -1;
-  }
-
-  function parseLocaleDateTime(d, string, i) {
-    return parseSpecifier(d, locale_dateTime, string, i);
-  }
-
-  function parseLocaleDate(d, string, i) {
-    return parseSpecifier(d, locale_date, string, i);
-  }
-
-  function parseLocaleTime(d, string, i) {
-    return parseSpecifier(d, locale_time, string, i);
-  }
-
-  function formatShortWeekday(d) {
-    return locale_shortWeekdays[d.getDay()];
-  }
-
-  function formatWeekday(d) {
-    return locale_weekdays[d.getDay()];
-  }
-
-  function formatShortMonth(d) {
-    return locale_shortMonths[d.getMonth()];
-  }
-
-  function formatMonth(d) {
-    return locale_months[d.getMonth()];
-  }
-
-  function formatPeriod(d) {
-    return locale_periods[+(d.getHours() >= 12)];
-  }
-
-  function formatQuarter(d) {
-    return 1 + ~~(d.getMonth() / 3);
-  }
-
-  function formatUTCShortWeekday(d) {
-    return locale_shortWeekdays[d.getUTCDay()];
-  }
-
-  function formatUTCWeekday(d) {
-    return locale_weekdays[d.getUTCDay()];
-  }
-
-  function formatUTCShortMonth(d) {
-    return locale_shortMonths[d.getUTCMonth()];
-  }
-
-  function formatUTCMonth(d) {
-    return locale_months[d.getUTCMonth()];
-  }
-
-  function formatUTCPeriod(d) {
-    return locale_periods[+(d.getUTCHours() >= 12)];
-  }
-
-  function formatUTCQuarter(d) {
-    return 1 + ~~(d.getUTCMonth() / 3);
-  }
-
-  return {
-    format: function(specifier) {
-      var f = newFormat(specifier += "", formats);
-      f.toString = function() { return specifier; };
-      return f;
-    },
-    parse: function(specifier) {
-      var p = newParse(specifier += "", false);
-      p.toString = function() { return specifier; };
-      return p;
-    },
-    utcFormat: function(specifier) {
-      var f = newFormat(specifier += "", utcFormats);
-      f.toString = function() { return specifier; };
-      return f;
-    },
-    utcParse: function(specifier) {
-      var p = newParse(specifier += "", true);
-      p.toString = function() { return specifier; };
-      return p;
-    }
-  };
-}
-
-var pads = {"-": "", "_": " ", "0": "0"},
-    numberRe = /^\s*\d+/, // note: ignores next directive
-    percentRe = /^%/,
-    requoteRe = /[\\^$*+?|[\]().{}]/g;
-
-function pad(value, fill, width) {
-  var sign = value < 0 ? "-" : "",
-      string = (sign ? -value : value) + "",
-      length = string.length;
-  return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);
-}
-
-function requote(s) {
-  return s.replace(requoteRe, "\\$&");
-}
-
-function formatRe(names) {
-  return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i");
-}
-
-function formatLookup(names) {
-  return new Map(names.map((name, i) => [name.toLowerCase(), i]));
-}
-
-function parseWeekdayNumberSunday(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 1));
-  return n ? (d.w = +n[0], i + n[0].length) : -1;
-}
-
-function parseWeekdayNumberMonday(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 1));
-  return n ? (d.u = +n[0], i + n[0].length) : -1;
-}
-
-function parseWeekNumberSunday(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 2));
-  return n ? (d.U = +n[0], i + n[0].length) : -1;
-}
-
-function parseWeekNumberISO(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 2));
-  return n ? (d.V = +n[0], i + n[0].length) : -1;
-}
-
-function parseWeekNumberMonday(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 2));
-  return n ? (d.W = +n[0], i + n[0].length) : -1;
-}
-
-function parseFullYear(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 4));
-  return n ? (d.y = +n[0], i + n[0].length) : -1;
-}
-
-function parseYear(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 2));
-  return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;
-}
-
-function parseZone(d, string, i) {
-  var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6));
-  return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1;
-}
-
-function parseQuarter(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 1));
-  return n ? (d.q = n[0] * 3 - 3, i + n[0].length) : -1;
-}
-
-function parseMonthNumber(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 2));
-  return n ? (d.m = n[0] - 1, i + n[0].length) : -1;
-}
-
-function parseDayOfMonth(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 2));
-  return n ? (d.d = +n[0], i + n[0].length) : -1;
-}
-
-function parseDayOfYear(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 3));
-  return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;
-}
-
-function parseHour24(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 2));
-  return n ? (d.H = +n[0], i + n[0].length) : -1;
-}
-
-function parseMinutes(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 2));
-  return n ? (d.M = +n[0], i + n[0].length) : -1;
-}
-
-function parseSeconds(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 2));
-  return n ? (d.S = +n[0], i + n[0].length) : -1;
-}
-
-function parseMilliseconds(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 3));
-  return n ? (d.L = +n[0], i + n[0].length) : -1;
-}
-
-function parseMicroseconds(d, string, i) {
-  var n = numberRe.exec(string.slice(i, i + 6));
-  return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;
-}
-
-function parseLiteralPercent(d, string, i) {
-  var n = percentRe.exec(string.slice(i, i + 1));
-  return n ? i + n[0].length : -1;
-}
-
-function parseUnixTimestamp(d, string, i) {
-  var n = numberRe.exec(string.slice(i));
-  return n ? (d.Q = +n[0], i + n[0].length) : -1;
-}
-
-function parseUnixTimestampSeconds(d, string, i) {
-  var n = numberRe.exec(string.slice(i));
-  return n ? (d.s = +n[0], i + n[0].length) : -1;
-}
-
-function formatDayOfMonth(d, p) {
-  return pad(d.getDate(), p, 2);
-}
-
-function formatHour24(d, p) {
-  return pad(d.getHours(), p, 2);
-}
-
-function formatHour12(d, p) {
-  return pad(d.getHours() % 12 || 12, p, 2);
-}
-
-function formatDayOfYear(d, p) {
-  return pad(1 + timeDay.count(timeYear(d), d), p, 3);
-}
-
-function formatMilliseconds(d, p) {
-  return pad(d.getMilliseconds(), p, 3);
-}
-
-function formatMicroseconds(d, p) {
-  return formatMilliseconds(d, p) + "000";
-}
-
-function formatMonthNumber(d, p) {
-  return pad(d.getMonth() + 1, p, 2);
-}
-
-function formatMinutes(d, p) {
-  return pad(d.getMinutes(), p, 2);
-}
-
-function formatSeconds(d, p) {
-  return pad(d.getSeconds(), p, 2);
-}
-
-function formatWeekdayNumberMonday(d) {
-  var day = d.getDay();
-  return day === 0 ? 7 : day;
-}
-
-function formatWeekNumberSunday(d, p) {
-  return pad(timeSunday.count(timeYear(d) - 1, d), p, 2);
-}
-
-function dISO(d) {
-  var day = d.getDay();
-  return (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);
-}
-
-function formatWeekNumberISO(d, p) {
-  d = dISO(d);
-  return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);
-}
-
-function formatWeekdayNumberSunday(d) {
-  return d.getDay();
-}
-
-function formatWeekNumberMonday(d, p) {
-  return pad(timeMonday.count(timeYear(d) - 1, d), p, 2);
-}
-
-function formatYear(d, p) {
-  return pad(d.getFullYear() % 100, p, 2);
-}
-
-function formatYearISO(d, p) {
-  d = dISO(d);
-  return pad(d.getFullYear() % 100, p, 2);
-}
-
-function formatFullYear(d, p) {
-  return pad(d.getFullYear() % 10000, p, 4);
-}
-
-function formatFullYearISO(d, p) {
-  var day = d.getDay();
-  d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);
-  return pad(d.getFullYear() % 10000, p, 4);
-}
-
-function formatZone(d) {
-  var z = d.getTimezoneOffset();
-  return (z > 0 ? "-" : (z *= -1, "+"))
-      + pad(z / 60 | 0, "0", 2)
-      + pad(z % 60, "0", 2);
-}
-
-function formatUTCDayOfMonth(d, p) {
-  return pad(d.getUTCDate(), p, 2);
-}
-
-function formatUTCHour24(d, p) {
-  return pad(d.getUTCHours(), p, 2);
-}
-
-function formatUTCHour12(d, p) {
-  return pad(d.getUTCHours() % 12 || 12, p, 2);
-}
-
-function formatUTCDayOfYear(d, p) {
-  return pad(1 + utcDay.count(utcYear(d), d), p, 3);
-}
-
-function formatUTCMilliseconds(d, p) {
-  return pad(d.getUTCMilliseconds(), p, 3);
-}
-
-function formatUTCMicroseconds(d, p) {
-  return formatUTCMilliseconds(d, p) + "000";
-}
-
-function formatUTCMonthNumber(d, p) {
-  return pad(d.getUTCMonth() + 1, p, 2);
-}
-
-function formatUTCMinutes(d, p) {
-  return pad(d.getUTCMinutes(), p, 2);
-}
-
-function formatUTCSeconds(d, p) {
-  return pad(d.getUTCSeconds(), p, 2);
-}
-
-function formatUTCWeekdayNumberMonday(d) {
-  var dow = d.getUTCDay();
-  return dow === 0 ? 7 : dow;
-}
-
-function formatUTCWeekNumberSunday(d, p) {
-  return pad(utcSunday.count(utcYear(d) - 1, d), p, 2);
-}
-
-function UTCdISO(d) {
-  var day = d.getUTCDay();
-  return (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);
-}
-
-function formatUTCWeekNumberISO(d, p) {
-  d = UTCdISO(d);
-  return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);
-}
-
-function formatUTCWeekdayNumberSunday(d) {
-  return d.getUTCDay();
-}
-
-function formatUTCWeekNumberMonday(d, p) {
-  return pad(utcMonday.count(utcYear(d) - 1, d), p, 2);
-}
-
-function formatUTCYear(d, p) {
-  return pad(d.getUTCFullYear() % 100, p, 2);
-}
-
-function formatUTCYearISO(d, p) {
-  d = UTCdISO(d);
-  return pad(d.getUTCFullYear() % 100, p, 2);
-}
-
-function formatUTCFullYear(d, p) {
-  return pad(d.getUTCFullYear() % 10000, p, 4);
-}
-
-function formatUTCFullYearISO(d, p) {
-  var day = d.getUTCDay();
-  d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);
-  return pad(d.getUTCFullYear() % 10000, p, 4);
-}
-
-function formatUTCZone() {
-  return "+0000";
-}
-
-function formatLiteralPercent() {
-  return "%";
-}
-
-function formatUnixTimestamp(d) {
-  return +d;
-}
-
-function formatUnixTimestampSeconds(d) {
-  return Math.floor(+d / 1000);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-time-format/src/defaultLocale.js
-
-
-var src_defaultLocale_locale;
-var timeFormat;
-var timeParse;
-var utcFormat;
-var utcParse;
-
-defaultLocale_defaultLocale({
-  dateTime: "%x, %X",
-  date: "%-m/%-d/%Y",
-  time: "%-I:%M:%S %p",
-  periods: ["AM", "PM"],
-  days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"],
-  shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"],
-  months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"],
-  shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
-});
-
-function defaultLocale_defaultLocale(definition) {
-  src_defaultLocale_locale = formatLocale(definition);
-  timeFormat = src_defaultLocale_locale.format;
-  timeParse = src_defaultLocale_locale.parse;
-  utcFormat = src_defaultLocale_locale.utcFormat;
-  utcParse = src_defaultLocale_locale.utcParse;
-  return src_defaultLocale_locale;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-scale/src/nice.js
-function nice(domain, interval) {
-  domain = domain.slice();
-
-  var i0 = 0,
-      i1 = domain.length - 1,
-      x0 = domain[i0],
-      x1 = domain[i1],
-      t;
-
-  if (x1 < x0) {
-    t = i0, i0 = i1, i1 = t;
-    t = x0, x0 = x1, x1 = t;
-  }
-
-  domain[i0] = interval.floor(x0);
-  domain[i1] = interval.ceil(x1);
-  return domain;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-scale/src/time.js
-
-
-
-
-
-
-function time_date(t) {
-  return new Date(t);
-}
-
-function time_number(t) {
-  return t instanceof Date ? +t : +new Date(+t);
-}
-
-function calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format) {
-  var scale = continuous(),
-      invert = scale.invert,
-      domain = scale.domain;
-
-  var formatMillisecond = format(".%L"),
-      formatSecond = format(":%S"),
-      formatMinute = format("%I:%M"),
-      formatHour = format("%I %p"),
-      formatDay = format("%a %d"),
-      formatWeek = format("%b %d"),
-      formatMonth = format("%B"),
-      formatYear = format("%Y");
-
-  function tickFormat(date) {
-    return (second(date) < date ? formatMillisecond
-        : minute(date) < date ? formatSecond
-        : hour(date) < date ? formatMinute
-        : day(date) < date ? formatHour
-        : month(date) < date ? (week(date) < date ? formatDay : formatWeek)
-        : year(date) < date ? formatMonth
-        : formatYear)(date);
-  }
-
-  scale.invert = function(y) {
-    return new Date(invert(y));
-  };
-
-  scale.domain = function(_) {
-    return arguments.length ? domain(Array.from(_, time_number)) : domain().map(time_date);
-  };
-
-  scale.ticks = function(interval) {
-    var d = domain();
-    return ticks(d[0], d[d.length - 1], interval == null ? 10 : interval);
-  };
-
-  scale.tickFormat = function(count, specifier) {
-    return specifier == null ? tickFormat : format(specifier);
-  };
-
-  scale.nice = function(interval) {
-    var d = domain();
-    if (!interval || typeof interval.range !== "function") interval = tickInterval(d[0], d[d.length - 1], interval == null ? 10 : interval);
-    return interval ? domain(nice(d, interval)) : scale;
-  };
-
-  scale.copy = function() {
-    return copy(scale, calendar(ticks, tickInterval, year, month, week, day, hour, minute, second, format));
-  };
-
-  return scale;
-}
-
-function time() {
-  return initRange.apply(calendar(timeTicks, timeTickInterval, timeYear, timeMonth, timeSunday, timeDay, timeHour, timeMinute, second, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-scale/src/index.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/select.js
-
-
-/* harmony default export */ function src_select(selector) {
-  return typeof selector === "string"
-      ? new Selection([[document.querySelector(selector)]], [document.documentElement])
-      : new Selection([[selector]], root);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/selectAll.js
-
-
-
-/* harmony default export */ function src_selectAll(selector) {
-  return typeof selector === "string"
-      ? new Selection([document.querySelectorAll(selector)], [document.documentElement])
-      : new Selection([array(selector)], root);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-selection/src/index.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/constant.js
-/* harmony default export */ function d3_shape_src_constant(x) {
-  return function constant() {
-    return x;
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/math.js
-const math_abs = Math.abs;
-const atan2 = Math.atan2;
-const cos = Math.cos;
-const math_max = Math.max;
-const math_min = Math.min;
-const sin = Math.sin;
-const sqrt = Math.sqrt;
-
-const math_epsilon = 1e-12;
-const pi = Math.PI;
-const halfPi = pi / 2;
-const tau = 2 * pi;
-
-function acos(x) {
-  return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);
-}
-
-function asin(x) {
-  return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-path/src/path.js
-const path_pi = Math.PI,
-    path_tau = 2 * path_pi,
-    path_epsilon = 1e-6,
-    tauEpsilon = path_tau - path_epsilon;
-
-function path_append(strings) {
-  this._ += strings[0];
-  for (let i = 1, n = strings.length; i < n; ++i) {
-    this._ += arguments[i] + strings[i];
-  }
-}
-
-function appendRound(digits) {
-  let d = Math.floor(digits);
-  if (!(d >= 0)) throw new Error(`invalid digits: ${digits}`);
-  if (d > 15) return path_append;
-  const k = 10 ** d;
-  return function(strings) {
-    this._ += strings[0];
-    for (let i = 1, n = strings.length; i < n; ++i) {
-      this._ += Math.round(arguments[i] * k) / k + strings[i];
-    }
-  };
-}
-
-class Path {
-  constructor(digits) {
-    this._x0 = this._y0 = // start of current subpath
-    this._x1 = this._y1 = null; // end of current subpath
-    this._ = "";
-    this._append = digits == null ? path_append : appendRound(digits);
-  }
-  moveTo(x, y) {
-    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}`;
-  }
-  closePath() {
-    if (this._x1 !== null) {
-      this._x1 = this._x0, this._y1 = this._y0;
-      this._append`Z`;
-    }
-  }
-  lineTo(x, y) {
-    this._append`L${this._x1 = +x},${this._y1 = +y}`;
-  }
-  quadraticCurveTo(x1, y1, x, y) {
-    this._append`Q${+x1},${+y1},${this._x1 = +x},${this._y1 = +y}`;
-  }
-  bezierCurveTo(x1, y1, x2, y2, x, y) {
-    this._append`C${+x1},${+y1},${+x2},${+y2},${this._x1 = +x},${this._y1 = +y}`;
-  }
-  arcTo(x1, y1, x2, y2, r) {
-    x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;
-
-    // Is the radius negative? Error.
-    if (r < 0) throw new Error(`negative radius: ${r}`);
-
-    let x0 = this._x1,
-        y0 = this._y1,
-        x21 = x2 - x1,
-        y21 = y2 - y1,
-        x01 = x0 - x1,
-        y01 = y0 - y1,
-        l01_2 = x01 * x01 + y01 * y01;
-
-    // Is this path empty? Move to (x1,y1).
-    if (this._x1 === null) {
-      this._append`M${this._x1 = x1},${this._y1 = y1}`;
-    }
-
-    // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.
-    else if (!(l01_2 > path_epsilon));
-
-    // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?
-    // Equivalently, is (x1,y1) coincident with (x2,y2)?
-    // Or, is the radius zero? Line to (x1,y1).
-    else if (!(Math.abs(y01 * x21 - y21 * x01) > path_epsilon) || !r) {
-      this._append`L${this._x1 = x1},${this._y1 = y1}`;
-    }
-
-    // Otherwise, draw an arc!
-    else {
-      let x20 = x2 - x0,
-          y20 = y2 - y0,
-          l21_2 = x21 * x21 + y21 * y21,
-          l20_2 = x20 * x20 + y20 * y20,
-          l21 = Math.sqrt(l21_2),
-          l01 = Math.sqrt(l01_2),
-          l = r * Math.tan((path_pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),
-          t01 = l / l01,
-          t21 = l / l21;
-
-      // If the start tangent is not coincident with (x0,y0), line to.
-      if (Math.abs(t01 - 1) > path_epsilon) {
-        this._append`L${x1 + t01 * x01},${y1 + t01 * y01}`;
-      }
-
-      this._append`A${r},${r},0,0,${+(y01 * x20 > x01 * y20)},${this._x1 = x1 + t21 * x21},${this._y1 = y1 + t21 * y21}`;
-    }
-  }
-  arc(x, y, r, a0, a1, ccw) {
-    x = +x, y = +y, r = +r, ccw = !!ccw;
-
-    // Is the radius negative? Error.
-    if (r < 0) throw new Error(`negative radius: ${r}`);
-
-    let dx = r * Math.cos(a0),
-        dy = r * Math.sin(a0),
-        x0 = x + dx,
-        y0 = y + dy,
-        cw = 1 ^ ccw,
-        da = ccw ? a0 - a1 : a1 - a0;
-
-    // Is this path empty? Move to (x0,y0).
-    if (this._x1 === null) {
-      this._append`M${x0},${y0}`;
-    }
-
-    // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).
-    else if (Math.abs(this._x1 - x0) > path_epsilon || Math.abs(this._y1 - y0) > path_epsilon) {
-      this._append`L${x0},${y0}`;
-    }
-
-    // Is this arc empty? We’re done.
-    if (!r) return;
-
-    // Does the angle go the wrong way? Flip the direction.
-    if (da < 0) da = da % path_tau + path_tau;
-
-    // Is this a complete circle? Draw two arcs to complete the circle.
-    if (da > tauEpsilon) {
-      this._append`A${r},${r},0,1,${cw},${x - dx},${y - dy}A${r},${r},0,1,${cw},${this._x1 = x0},${this._y1 = y0}`;
-    }
-
-    // Is this arc non-empty? Draw an arc!
-    else if (da > path_epsilon) {
-      this._append`A${r},${r},0,${+(da >= path_pi)},${cw},${this._x1 = x + r * Math.cos(a1)},${this._y1 = y + r * Math.sin(a1)}`;
-    }
-  }
-  rect(x, y, w, h) {
-    this._append`M${this._x0 = this._x1 = +x},${this._y0 = this._y1 = +y}h${w = +w}v${+h}h${-w}Z`;
-  }
-  toString() {
-    return this._;
-  }
-}
-
-function path() {
-  return new Path;
-}
-
-// Allow instanceof d3.path
-path.prototype = Path.prototype;
-
-function pathRound(digits = 3) {
-  return new Path(+digits);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/path.js
-
-
-function withPath(shape) {
-  let digits = 3;
-
-  shape.digits = function(_) {
-    if (!arguments.length) return digits;
-    if (_ == null) {
-      digits = null;
-    } else {
-      const d = Math.floor(_);
-      if (!(d >= 0)) throw new RangeError(`invalid digits: ${_}`);
-      digits = d;
-    }
-    return shape;
-  };
-
-  return () => new Path(digits);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/arc.js
-
-
-
-
-function arcInnerRadius(d) {
-  return d.innerRadius;
-}
-
-function arcOuterRadius(d) {
-  return d.outerRadius;
-}
-
-function arcStartAngle(d) {
-  return d.startAngle;
-}
-
-function arcEndAngle(d) {
-  return d.endAngle;
-}
-
-function arcPadAngle(d) {
-  return d && d.padAngle; // Note: optional!
-}
-
-function intersect(x0, y0, x1, y1, x2, y2, x3, y3) {
-  var x10 = x1 - x0, y10 = y1 - y0,
-      x32 = x3 - x2, y32 = y3 - y2,
-      t = y32 * x10 - x32 * y10;
-  if (t * t < math_epsilon) return;
-  t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;
-  return [x0 + t * x10, y0 + t * y10];
-}
-
-// Compute perpendicular offset line of length rc.
-// http://mathworld.wolfram.com/Circle-LineIntersection.html
-function cornerTangents(x0, y0, x1, y1, r1, rc, cw) {
-  var x01 = x0 - x1,
-      y01 = y0 - y1,
-      lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),
-      ox = lo * y01,
-      oy = -lo * x01,
-      x11 = x0 + ox,
-      y11 = y0 + oy,
-      x10 = x1 + ox,
-      y10 = y1 + oy,
-      x00 = (x11 + x10) / 2,
-      y00 = (y11 + y10) / 2,
-      dx = x10 - x11,
-      dy = y10 - y11,
-      d2 = dx * dx + dy * dy,
-      r = r1 - rc,
-      D = x11 * y10 - x10 * y11,
-      d = (dy < 0 ? -1 : 1) * sqrt(math_max(0, r * r * d2 - D * D)),
-      cx0 = (D * dy - dx * d) / d2,
-      cy0 = (-D * dx - dy * d) / d2,
-      cx1 = (D * dy + dx * d) / d2,
-      cy1 = (-D * dx + dy * d) / d2,
-      dx0 = cx0 - x00,
-      dy0 = cy0 - y00,
-      dx1 = cx1 - x00,
-      dy1 = cy1 - y00;
-
-  // Pick the closer of the two intersection points.
-  // TODO Is there a faster way to determine which intersection to use?
-  if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;
-
-  return {
-    cx: cx0,
-    cy: cy0,
-    x01: -ox,
-    y01: -oy,
-    x11: cx0 * (r1 / r - 1),
-    y11: cy0 * (r1 / r - 1)
-  };
-}
-
-/* harmony default export */ function arc() {
-  var innerRadius = arcInnerRadius,
-      outerRadius = arcOuterRadius,
-      cornerRadius = d3_shape_src_constant(0),
-      padRadius = null,
-      startAngle = arcStartAngle,
-      endAngle = arcEndAngle,
-      padAngle = arcPadAngle,
-      context = null,
-      path = withPath(arc);
-
-  function arc() {
-    var buffer,
-        r,
-        r0 = +innerRadius.apply(this, arguments),
-        r1 = +outerRadius.apply(this, arguments),
-        a0 = startAngle.apply(this, arguments) - halfPi,
-        a1 = endAngle.apply(this, arguments) - halfPi,
-        da = math_abs(a1 - a0),
-        cw = a1 > a0;
-
-    if (!context) context = buffer = path();
-
-    // Ensure that the outer radius is always larger than the inner radius.
-    if (r1 < r0) r = r1, r1 = r0, r0 = r;
-
-    // Is it a point?
-    if (!(r1 > math_epsilon)) context.moveTo(0, 0);
-
-    // Or is it a circle or annulus?
-    else if (da > tau - math_epsilon) {
-      context.moveTo(r1 * cos(a0), r1 * sin(a0));
-      context.arc(0, 0, r1, a0, a1, !cw);
-      if (r0 > math_epsilon) {
-        context.moveTo(r0 * cos(a1), r0 * sin(a1));
-        context.arc(0, 0, r0, a1, a0, cw);
-      }
-    }
-
-    // Or is it a circular or annular sector?
-    else {
-      var a01 = a0,
-          a11 = a1,
-          a00 = a0,
-          a10 = a1,
-          da0 = da,
-          da1 = da,
-          ap = padAngle.apply(this, arguments) / 2,
-          rp = (ap > math_epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),
-          rc = math_min(math_abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),
-          rc0 = rc,
-          rc1 = rc,
-          t0,
-          t1;
-
-      // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.
-      if (rp > math_epsilon) {
-        var p0 = asin(rp / r0 * sin(ap)),
-            p1 = asin(rp / r1 * sin(ap));
-        if ((da0 -= p0 * 2) > math_epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;
-        else da0 = 0, a00 = a10 = (a0 + a1) / 2;
-        if ((da1 -= p1 * 2) > math_epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;
-        else da1 = 0, a01 = a11 = (a0 + a1) / 2;
-      }
-
-      var x01 = r1 * cos(a01),
-          y01 = r1 * sin(a01),
-          x10 = r0 * cos(a10),
-          y10 = r0 * sin(a10);
-
-      // Apply rounded corners?
-      if (rc > math_epsilon) {
-        var x11 = r1 * cos(a11),
-            y11 = r1 * sin(a11),
-            x00 = r0 * cos(a00),
-            y00 = r0 * sin(a00),
-            oc;
-
-        // Restrict the corner radius according to the sector angle. If this
-        // intersection fails, it’s probably because the arc is too small, so
-        // disable the corner radius entirely.
-        if (da < pi) {
-          if (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10)) {
-            var ax = x01 - oc[0],
-                ay = y01 - oc[1],
-                bx = x11 - oc[0],
-                by = y11 - oc[1],
-                kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),
-                lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);
-            rc0 = math_min(rc, (r0 - lc) / (kc - 1));
-            rc1 = math_min(rc, (r1 - lc) / (kc + 1));
-          } else {
-            rc0 = rc1 = 0;
-          }
-        }
-      }
-
-      // Is the sector collapsed to a line?
-      if (!(da1 > math_epsilon)) context.moveTo(x01, y01);
-
-      // Does the sector’s outer ring have rounded corners?
-      else if (rc1 > math_epsilon) {
-        t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);
-        t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);
-
-        context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);
-
-        // Have the corners merged?
-        if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);
-
-        // Otherwise, draw the two corners and the ring.
-        else {
-          context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);
-          context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);
-          context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);
-        }
-      }
-
-      // Or is the outer ring just a circular arc?
-      else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);
-
-      // Is there no inner ring, and it’s a circular sector?
-      // Or perhaps it’s an annular sector collapsed due to padding?
-      if (!(r0 > math_epsilon) || !(da0 > math_epsilon)) context.lineTo(x10, y10);
-
-      // Does the sector’s inner ring (or point) have rounded corners?
-      else if (rc0 > math_epsilon) {
-        t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);
-        t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);
-
-        context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);
-
-        // Have the corners merged?
-        if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);
-
-        // Otherwise, draw the two corners and the ring.
-        else {
-          context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);
-          context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);
-          context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);
-        }
-      }
-
-      // Or is the inner ring just a circular arc?
-      else context.arc(0, 0, r0, a10, a00, cw);
-    }
-
-    context.closePath();
-
-    if (buffer) return context = null, buffer + "" || null;
-  }
-
-  arc.centroid = function() {
-    var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,
-        a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;
-    return [cos(a) * r, sin(a) * r];
-  };
-
-  arc.innerRadius = function(_) {
-    return arguments.length ? (innerRadius = typeof _ === "function" ? _ : d3_shape_src_constant(+_), arc) : innerRadius;
-  };
-
-  arc.outerRadius = function(_) {
-    return arguments.length ? (outerRadius = typeof _ === "function" ? _ : d3_shape_src_constant(+_), arc) : outerRadius;
-  };
-
-  arc.cornerRadius = function(_) {
-    return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : d3_shape_src_constant(+_), arc) : cornerRadius;
-  };
-
-  arc.padRadius = function(_) {
-    return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : d3_shape_src_constant(+_), arc) : padRadius;
-  };
-
-  arc.startAngle = function(_) {
-    return arguments.length ? (startAngle = typeof _ === "function" ? _ : d3_shape_src_constant(+_), arc) : startAngle;
-  };
-
-  arc.endAngle = function(_) {
-    return arguments.length ? (endAngle = typeof _ === "function" ? _ : d3_shape_src_constant(+_), arc) : endAngle;
-  };
-
-  arc.padAngle = function(_) {
-    return arguments.length ? (padAngle = typeof _ === "function" ? _ : d3_shape_src_constant(+_), arc) : padAngle;
-  };
-
-  arc.context = function(_) {
-    return arguments.length ? ((context = _ == null ? null : _), arc) : context;
-  };
-
-  return arc;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/array.js
-var slice = Array.prototype.slice;
-
-/* harmony default export */ function d3_shape_src_array(x) {
-  return typeof x === "object" && "length" in x
-    ? x // Array, TypedArray, NodeList, array-like
-    : Array.from(x); // Map, Set, iterable, string, or anything else
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/linear.js
-function Linear(context) {
-  this._context = context;
-}
-
-Linear.prototype = {
-  areaStart: function() {
-    this._line = 0;
-  },
-  areaEnd: function() {
-    this._line = NaN;
-  },
-  lineStart: function() {
-    this._point = 0;
-  },
-  lineEnd: function() {
-    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-    this._line = 1 - this._line;
-  },
-  point: function(x, y) {
-    x = +x, y = +y;
-    switch (this._point) {
-      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-      case 1: this._point = 2; // falls through
-      default: this._context.lineTo(x, y); break;
-    }
-  }
-};
-
-/* harmony default export */ function curve_linear(context) {
-  return new Linear(context);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/point.js
-function point_x(p) {
-  return p[0];
-}
-
-function point_y(p) {
-  return p[1];
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/line.js
-
-
-
-
-
-
-/* harmony default export */ function line(x, y) {
-  var defined = d3_shape_src_constant(true),
-      context = null,
-      curve = curve_linear,
-      output = null,
-      path = withPath(line);
-
-  x = typeof x === "function" ? x : (x === undefined) ? point_x : d3_shape_src_constant(x);
-  y = typeof y === "function" ? y : (y === undefined) ? point_y : d3_shape_src_constant(y);
-
-  function line(data) {
-    var i,
-        n = (data = d3_shape_src_array(data)).length,
-        d,
-        defined0 = false,
-        buffer;
-
-    if (context == null) output = curve(buffer = path());
-
-    for (i = 0; i <= n; ++i) {
-      if (!(i < n && defined(d = data[i], i, data)) === defined0) {
-        if (defined0 = !defined0) output.lineStart();
-        else output.lineEnd();
-      }
-      if (defined0) output.point(+x(d, i, data), +y(d, i, data));
-    }
-
-    if (buffer) return output = null, buffer + "" || null;
-  }
-
-  line.x = function(_) {
-    return arguments.length ? (x = typeof _ === "function" ? _ : d3_shape_src_constant(+_), line) : x;
-  };
-
-  line.y = function(_) {
-    return arguments.length ? (y = typeof _ === "function" ? _ : d3_shape_src_constant(+_), line) : y;
-  };
-
-  line.defined = function(_) {
-    return arguments.length ? (defined = typeof _ === "function" ? _ : d3_shape_src_constant(!!_), line) : defined;
-  };
-
-  line.curve = function(_) {
-    return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;
-  };
-
-  line.context = function(_) {
-    return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;
-  };
-
-  return line;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/descending.js
-/* harmony default export */ function src_descending(a, b) {
-  return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/identity.js
-/* harmony default export */ function d3_shape_src_identity(d) {
-  return d;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/pie.js
-
-
-
-
-
-
-/* harmony default export */ function pie() {
-  var value = d3_shape_src_identity,
-      sortValues = src_descending,
-      sort = null,
-      startAngle = d3_shape_src_constant(0),
-      endAngle = d3_shape_src_constant(tau),
-      padAngle = d3_shape_src_constant(0);
-
-  function pie(data) {
-    var i,
-        n = (data = d3_shape_src_array(data)).length,
-        j,
-        k,
-        sum = 0,
-        index = new Array(n),
-        arcs = new Array(n),
-        a0 = +startAngle.apply(this, arguments),
-        da = Math.min(tau, Math.max(-tau, endAngle.apply(this, arguments) - a0)),
-        a1,
-        p = Math.min(Math.abs(da) / n, padAngle.apply(this, arguments)),
-        pa = p * (da < 0 ? -1 : 1),
-        v;
-
-    for (i = 0; i < n; ++i) {
-      if ((v = arcs[index[i] = i] = +value(data[i], i, data)) > 0) {
-        sum += v;
-      }
-    }
-
-    // Optionally sort the arcs by previously-computed values or by data.
-    if (sortValues != null) index.sort(function(i, j) { return sortValues(arcs[i], arcs[j]); });
-    else if (sort != null) index.sort(function(i, j) { return sort(data[i], data[j]); });
-
-    // Compute the arcs! They are stored in the original data's order.
-    for (i = 0, k = sum ? (da - n * pa) / sum : 0; i < n; ++i, a0 = a1) {
-      j = index[i], v = arcs[j], a1 = a0 + (v > 0 ? v * k : 0) + pa, arcs[j] = {
-        data: data[j],
-        index: i,
-        value: v,
-        startAngle: a0,
-        endAngle: a1,
-        padAngle: p
-      };
-    }
-
-    return arcs;
-  }
-
-  pie.value = function(_) {
-    return arguments.length ? (value = typeof _ === "function" ? _ : d3_shape_src_constant(+_), pie) : value;
-  };
-
-  pie.sortValues = function(_) {
-    return arguments.length ? (sortValues = _, sort = null, pie) : sortValues;
-  };
-
-  pie.sort = function(_) {
-    return arguments.length ? (sort = _, sortValues = null, pie) : sort;
-  };
-
-  pie.startAngle = function(_) {
-    return arguments.length ? (startAngle = typeof _ === "function" ? _ : d3_shape_src_constant(+_), pie) : startAngle;
-  };
-
-  pie.endAngle = function(_) {
-    return arguments.length ? (endAngle = typeof _ === "function" ? _ : d3_shape_src_constant(+_), pie) : endAngle;
-  };
-
-  pie.padAngle = function(_) {
-    return arguments.length ? (padAngle = typeof _ === "function" ? _ : d3_shape_src_constant(+_), pie) : padAngle;
-  };
-
-  return pie;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/noop.js
-/* harmony default export */ function src_noop() {}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/basis.js
-function point(that, x, y) {
-  that._context.bezierCurveTo(
-    (2 * that._x0 + that._x1) / 3,
-    (2 * that._y0 + that._y1) / 3,
-    (that._x0 + 2 * that._x1) / 3,
-    (that._y0 + 2 * that._y1) / 3,
-    (that._x0 + 4 * that._x1 + x) / 6,
-    (that._y0 + 4 * that._y1 + y) / 6
-  );
-}
-
-function Basis(context) {
-  this._context = context;
-}
-
-Basis.prototype = {
-  areaStart: function() {
-    this._line = 0;
-  },
-  areaEnd: function() {
-    this._line = NaN;
-  },
-  lineStart: function() {
-    this._x0 = this._x1 =
-    this._y0 = this._y1 = NaN;
-    this._point = 0;
-  },
-  lineEnd: function() {
-    switch (this._point) {
-      case 3: point(this, this._x1, this._y1); // falls through
-      case 2: this._context.lineTo(this._x1, this._y1); break;
-    }
-    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-    this._line = 1 - this._line;
-  },
-  point: function(x, y) {
-    x = +x, y = +y;
-    switch (this._point) {
-      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-      case 1: this._point = 2; break;
-      case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // falls through
-      default: point(this, x, y); break;
-    }
-    this._x0 = this._x1, this._x1 = x;
-    this._y0 = this._y1, this._y1 = y;
-  }
-};
-
-/* harmony default export */ function curve_basis(context) {
-  return new Basis(context);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/basisClosed.js
-
-
-
-function BasisClosed(context) {
-  this._context = context;
-}
-
-BasisClosed.prototype = {
-  areaStart: src_noop,
-  areaEnd: src_noop,
-  lineStart: function() {
-    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =
-    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;
-    this._point = 0;
-  },
-  lineEnd: function() {
-    switch (this._point) {
-      case 1: {
-        this._context.moveTo(this._x2, this._y2);
-        this._context.closePath();
-        break;
-      }
-      case 2: {
-        this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);
-        this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);
-        this._context.closePath();
-        break;
-      }
-      case 3: {
-        this.point(this._x2, this._y2);
-        this.point(this._x3, this._y3);
-        this.point(this._x4, this._y4);
-        break;
-      }
-    }
-  },
-  point: function(x, y) {
-    x = +x, y = +y;
-    switch (this._point) {
-      case 0: this._point = 1; this._x2 = x, this._y2 = y; break;
-      case 1: this._point = 2; this._x3 = x, this._y3 = y; break;
-      case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;
-      default: point(this, x, y); break;
-    }
-    this._x0 = this._x1, this._x1 = x;
-    this._y0 = this._y1, this._y1 = y;
-  }
-};
-
-/* harmony default export */ function curve_basisClosed(context) {
-  return new BasisClosed(context);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/basisOpen.js
-
-
-function BasisOpen(context) {
-  this._context = context;
-}
-
-BasisOpen.prototype = {
-  areaStart: function() {
-    this._line = 0;
-  },
-  areaEnd: function() {
-    this._line = NaN;
-  },
-  lineStart: function() {
-    this._x0 = this._x1 =
-    this._y0 = this._y1 = NaN;
-    this._point = 0;
-  },
-  lineEnd: function() {
-    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
-    this._line = 1 - this._line;
-  },
-  point: function(x, y) {
-    x = +x, y = +y;
-    switch (this._point) {
-      case 0: this._point = 1; break;
-      case 1: this._point = 2; break;
-      case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;
-      case 3: this._point = 4; // falls through
-      default: point(this, x, y); break;
-    }
-    this._x0 = this._x1, this._x1 = x;
-    this._y0 = this._y1, this._y1 = y;
-  }
-};
-
-/* harmony default export */ function basisOpen(context) {
-  return new BasisOpen(context);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/bump.js
-
-
-class Bump {
-  constructor(context, x) {
-    this._context = context;
-    this._x = x;
-  }
-  areaStart() {
-    this._line = 0;
-  }
-  areaEnd() {
-    this._line = NaN;
-  }
-  lineStart() {
-    this._point = 0;
-  }
-  lineEnd() {
-    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-    this._line = 1 - this._line;
-  }
-  point(x, y) {
-    x = +x, y = +y;
-    switch (this._point) {
-      case 0: {
-        this._point = 1;
-        if (this._line) this._context.lineTo(x, y);
-        else this._context.moveTo(x, y);
-        break;
-      }
-      case 1: this._point = 2; // falls through
-      default: {
-        if (this._x) this._context.bezierCurveTo(this._x0 = (this._x0 + x) / 2, this._y0, this._x0, y, x, y);
-        else this._context.bezierCurveTo(this._x0, this._y0 = (this._y0 + y) / 2, x, this._y0, x, y);
-        break;
-      }
-    }
-    this._x0 = x, this._y0 = y;
-  }
-}
-
-class BumpRadial {
-  constructor(context) {
-    this._context = context;
-  }
-  lineStart() {
-    this._point = 0;
-  }
-  lineEnd() {}
-  point(x, y) {
-    x = +x, y = +y;
-    if (this._point === 0) {
-      this._point = 1;
-    } else {
-      const p0 = pointRadial(this._x0, this._y0);
-      const p1 = pointRadial(this._x0, this._y0 = (this._y0 + y) / 2);
-      const p2 = pointRadial(x, this._y0);
-      const p3 = pointRadial(x, y);
-      this._context.moveTo(...p0);
-      this._context.bezierCurveTo(...p1, ...p2, ...p3);
-    }
-    this._x0 = x, this._y0 = y;
-  }
-}
-
-function bumpX(context) {
-  return new Bump(context, true);
-}
-
-function bumpY(context) {
-  return new Bump(context, false);
-}
-
-function bumpRadial(context) {
-  return new BumpRadial(context);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/bundle.js
-
-
-function Bundle(context, beta) {
-  this._basis = new Basis(context);
-  this._beta = beta;
-}
-
-Bundle.prototype = {
-  lineStart: function() {
-    this._x = [];
-    this._y = [];
-    this._basis.lineStart();
-  },
-  lineEnd: function() {
-    var x = this._x,
-        y = this._y,
-        j = x.length - 1;
-
-    if (j > 0) {
-      var x0 = x[0],
-          y0 = y[0],
-          dx = x[j] - x0,
-          dy = y[j] - y0,
-          i = -1,
-          t;
-
-      while (++i <= j) {
-        t = i / j;
-        this._basis.point(
-          this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),
-          this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)
-        );
-      }
-    }
-
-    this._x = this._y = null;
-    this._basis.lineEnd();
-  },
-  point: function(x, y) {
-    this._x.push(+x);
-    this._y.push(+y);
-  }
-};
-
-/* harmony default export */ const bundle = ((function custom(beta) {
-
-  function bundle(context) {
-    return beta === 1 ? new Basis(context) : new Bundle(context, beta);
-  }
-
-  bundle.beta = function(beta) {
-    return custom(+beta);
-  };
-
-  return bundle;
-})(0.85));
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/cardinal.js
-function cardinal_point(that, x, y) {
-  that._context.bezierCurveTo(
-    that._x1 + that._k * (that._x2 - that._x0),
-    that._y1 + that._k * (that._y2 - that._y0),
-    that._x2 + that._k * (that._x1 - x),
-    that._y2 + that._k * (that._y1 - y),
-    that._x2,
-    that._y2
-  );
-}
-
-function Cardinal(context, tension) {
-  this._context = context;
-  this._k = (1 - tension) / 6;
-}
-
-Cardinal.prototype = {
-  areaStart: function() {
-    this._line = 0;
-  },
-  areaEnd: function() {
-    this._line = NaN;
-  },
-  lineStart: function() {
-    this._x0 = this._x1 = this._x2 =
-    this._y0 = this._y1 = this._y2 = NaN;
-    this._point = 0;
-  },
-  lineEnd: function() {
-    switch (this._point) {
-      case 2: this._context.lineTo(this._x2, this._y2); break;
-      case 3: cardinal_point(this, this._x1, this._y1); break;
-    }
-    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-    this._line = 1 - this._line;
-  },
-  point: function(x, y) {
-    x = +x, y = +y;
-    switch (this._point) {
-      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-      case 1: this._point = 2; this._x1 = x, this._y1 = y; break;
-      case 2: this._point = 3; // falls through
-      default: cardinal_point(this, x, y); break;
-    }
-    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-  }
-};
-
-/* harmony default export */ const cardinal = ((function custom(tension) {
-
-  function cardinal(context) {
-    return new Cardinal(context, tension);
-  }
-
-  cardinal.tension = function(tension) {
-    return custom(+tension);
-  };
-
-  return cardinal;
-})(0));
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/cardinalClosed.js
-
-
-
-function CardinalClosed(context, tension) {
-  this._context = context;
-  this._k = (1 - tension) / 6;
-}
-
-CardinalClosed.prototype = {
-  areaStart: src_noop,
-  areaEnd: src_noop,
-  lineStart: function() {
-    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
-    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
-    this._point = 0;
-  },
-  lineEnd: function() {
-    switch (this._point) {
-      case 1: {
-        this._context.moveTo(this._x3, this._y3);
-        this._context.closePath();
-        break;
-      }
-      case 2: {
-        this._context.lineTo(this._x3, this._y3);
-        this._context.closePath();
-        break;
-      }
-      case 3: {
-        this.point(this._x3, this._y3);
-        this.point(this._x4, this._y4);
-        this.point(this._x5, this._y5);
-        break;
-      }
-    }
-  },
-  point: function(x, y) {
-    x = +x, y = +y;
-    switch (this._point) {
-      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
-      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
-      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
-      default: cardinal_point(this, x, y); break;
-    }
-    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-  }
-};
-
-/* harmony default export */ const cardinalClosed = ((function custom(tension) {
-
-  function cardinal(context) {
-    return new CardinalClosed(context, tension);
-  }
-
-  cardinal.tension = function(tension) {
-    return custom(+tension);
-  };
-
-  return cardinal;
-})(0));
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/cardinalOpen.js
-
-
-function CardinalOpen(context, tension) {
-  this._context = context;
-  this._k = (1 - tension) / 6;
-}
-
-CardinalOpen.prototype = {
-  areaStart: function() {
-    this._line = 0;
-  },
-  areaEnd: function() {
-    this._line = NaN;
-  },
-  lineStart: function() {
-    this._x0 = this._x1 = this._x2 =
-    this._y0 = this._y1 = this._y2 = NaN;
-    this._point = 0;
-  },
-  lineEnd: function() {
-    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
-    this._line = 1 - this._line;
-  },
-  point: function(x, y) {
-    x = +x, y = +y;
-    switch (this._point) {
-      case 0: this._point = 1; break;
-      case 1: this._point = 2; break;
-      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
-      case 3: this._point = 4; // falls through
-      default: cardinal_point(this, x, y); break;
-    }
-    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-  }
-};
-
-/* harmony default export */ const cardinalOpen = ((function custom(tension) {
-
-  function cardinal(context) {
-    return new CardinalOpen(context, tension);
-  }
-
-  cardinal.tension = function(tension) {
-    return custom(+tension);
-  };
-
-  return cardinal;
-})(0));
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/catmullRom.js
-
-
-
-function catmullRom_point(that, x, y) {
-  var x1 = that._x1,
-      y1 = that._y1,
-      x2 = that._x2,
-      y2 = that._y2;
-
-  if (that._l01_a > math_epsilon) {
-    var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,
-        n = 3 * that._l01_a * (that._l01_a + that._l12_a);
-    x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;
-    y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;
-  }
-
-  if (that._l23_a > math_epsilon) {
-    var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,
-        m = 3 * that._l23_a * (that._l23_a + that._l12_a);
-    x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;
-    y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;
-  }
-
-  that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);
-}
-
-function CatmullRom(context, alpha) {
-  this._context = context;
-  this._alpha = alpha;
-}
-
-CatmullRom.prototype = {
-  areaStart: function() {
-    this._line = 0;
-  },
-  areaEnd: function() {
-    this._line = NaN;
-  },
-  lineStart: function() {
-    this._x0 = this._x1 = this._x2 =
-    this._y0 = this._y1 = this._y2 = NaN;
-    this._l01_a = this._l12_a = this._l23_a =
-    this._l01_2a = this._l12_2a = this._l23_2a =
-    this._point = 0;
-  },
-  lineEnd: function() {
-    switch (this._point) {
-      case 2: this._context.lineTo(this._x2, this._y2); break;
-      case 3: this.point(this._x2, this._y2); break;
-    }
-    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-    this._line = 1 - this._line;
-  },
-  point: function(x, y) {
-    x = +x, y = +y;
-
-    if (this._point) {
-      var x23 = this._x2 - x,
-          y23 = this._y2 - y;
-      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
-    }
-
-    switch (this._point) {
-      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-      case 1: this._point = 2; break;
-      case 2: this._point = 3; // falls through
-      default: catmullRom_point(this, x, y); break;
-    }
-
-    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
-    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
-    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-  }
-};
-
-/* harmony default export */ const catmullRom = ((function custom(alpha) {
-
-  function catmullRom(context) {
-    return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);
-  }
-
-  catmullRom.alpha = function(alpha) {
-    return custom(+alpha);
-  };
-
-  return catmullRom;
-})(0.5));
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/catmullRomClosed.js
-
-
-
-
-function CatmullRomClosed(context, alpha) {
-  this._context = context;
-  this._alpha = alpha;
-}
-
-CatmullRomClosed.prototype = {
-  areaStart: src_noop,
-  areaEnd: src_noop,
-  lineStart: function() {
-    this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =
-    this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;
-    this._l01_a = this._l12_a = this._l23_a =
-    this._l01_2a = this._l12_2a = this._l23_2a =
-    this._point = 0;
-  },
-  lineEnd: function() {
-    switch (this._point) {
-      case 1: {
-        this._context.moveTo(this._x3, this._y3);
-        this._context.closePath();
-        break;
-      }
-      case 2: {
-        this._context.lineTo(this._x3, this._y3);
-        this._context.closePath();
-        break;
-      }
-      case 3: {
-        this.point(this._x3, this._y3);
-        this.point(this._x4, this._y4);
-        this.point(this._x5, this._y5);
-        break;
-      }
-    }
-  },
-  point: function(x, y) {
-    x = +x, y = +y;
-
-    if (this._point) {
-      var x23 = this._x2 - x,
-          y23 = this._y2 - y;
-      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
-    }
-
-    switch (this._point) {
-      case 0: this._point = 1; this._x3 = x, this._y3 = y; break;
-      case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;
-      case 2: this._point = 3; this._x5 = x, this._y5 = y; break;
-      default: catmullRom_point(this, x, y); break;
-    }
-
-    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
-    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
-    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-  }
-};
-
-/* harmony default export */ const catmullRomClosed = ((function custom(alpha) {
-
-  function catmullRom(context) {
-    return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);
-  }
-
-  catmullRom.alpha = function(alpha) {
-    return custom(+alpha);
-  };
-
-  return catmullRom;
-})(0.5));
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/catmullRomOpen.js
-
-
-
-function CatmullRomOpen(context, alpha) {
-  this._context = context;
-  this._alpha = alpha;
-}
-
-CatmullRomOpen.prototype = {
-  areaStart: function() {
-    this._line = 0;
-  },
-  areaEnd: function() {
-    this._line = NaN;
-  },
-  lineStart: function() {
-    this._x0 = this._x1 = this._x2 =
-    this._y0 = this._y1 = this._y2 = NaN;
-    this._l01_a = this._l12_a = this._l23_a =
-    this._l01_2a = this._l12_2a = this._l23_2a =
-    this._point = 0;
-  },
-  lineEnd: function() {
-    if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();
-    this._line = 1 - this._line;
-  },
-  point: function(x, y) {
-    x = +x, y = +y;
-
-    if (this._point) {
-      var x23 = this._x2 - x,
-          y23 = this._y2 - y;
-      this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));
-    }
-
-    switch (this._point) {
-      case 0: this._point = 1; break;
-      case 1: this._point = 2; break;
-      case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;
-      case 3: this._point = 4; // falls through
-      default: catmullRom_point(this, x, y); break;
-    }
-
-    this._l01_a = this._l12_a, this._l12_a = this._l23_a;
-    this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;
-    this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;
-    this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;
-  }
-};
-
-/* harmony default export */ const catmullRomOpen = ((function custom(alpha) {
-
-  function catmullRom(context) {
-    return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);
-  }
-
-  catmullRom.alpha = function(alpha) {
-    return custom(+alpha);
-  };
-
-  return catmullRom;
-})(0.5));
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/linearClosed.js
-
-
-function LinearClosed(context) {
-  this._context = context;
-}
-
-LinearClosed.prototype = {
-  areaStart: src_noop,
-  areaEnd: src_noop,
-  lineStart: function() {
-    this._point = 0;
-  },
-  lineEnd: function() {
-    if (this._point) this._context.closePath();
-  },
-  point: function(x, y) {
-    x = +x, y = +y;
-    if (this._point) this._context.lineTo(x, y);
-    else this._point = 1, this._context.moveTo(x, y);
-  }
-};
-
-/* harmony default export */ function linearClosed(context) {
-  return new LinearClosed(context);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/monotone.js
-function sign(x) {
-  return x < 0 ? -1 : 1;
-}
-
-// Calculate the slopes of the tangents (Hermite-type interpolation) based on
-// the following paper: Steffen, M. 1990. A Simple Method for Monotonic
-// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.
-// NOV(II), P. 443, 1990.
-function slope3(that, x2, y2) {
-  var h0 = that._x1 - that._x0,
-      h1 = x2 - that._x1,
-      s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),
-      s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),
-      p = (s0 * h1 + s1 * h0) / (h0 + h1);
-  return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;
-}
-
-// Calculate a one-sided slope.
-function slope2(that, t) {
-  var h = that._x1 - that._x0;
-  return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;
-}
-
-// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations
-// "you can express cubic Hermite interpolation in terms of cubic Bézier curves
-// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1".
-function monotone_point(that, t0, t1) {
-  var x0 = that._x0,
-      y0 = that._y0,
-      x1 = that._x1,
-      y1 = that._y1,
-      dx = (x1 - x0) / 3;
-  that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);
-}
-
-function MonotoneX(context) {
-  this._context = context;
-}
-
-MonotoneX.prototype = {
-  areaStart: function() {
-    this._line = 0;
-  },
-  areaEnd: function() {
-    this._line = NaN;
-  },
-  lineStart: function() {
-    this._x0 = this._x1 =
-    this._y0 = this._y1 =
-    this._t0 = NaN;
-    this._point = 0;
-  },
-  lineEnd: function() {
-    switch (this._point) {
-      case 2: this._context.lineTo(this._x1, this._y1); break;
-      case 3: monotone_point(this, this._t0, slope2(this, this._t0)); break;
-    }
-    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-    this._line = 1 - this._line;
-  },
-  point: function(x, y) {
-    var t1 = NaN;
-
-    x = +x, y = +y;
-    if (x === this._x1 && y === this._y1) return; // Ignore coincident points.
-    switch (this._point) {
-      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-      case 1: this._point = 2; break;
-      case 2: this._point = 3; monotone_point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;
-      default: monotone_point(this, this._t0, t1 = slope3(this, x, y)); break;
-    }
-
-    this._x0 = this._x1, this._x1 = x;
-    this._y0 = this._y1, this._y1 = y;
-    this._t0 = t1;
-  }
-}
-
-function MonotoneY(context) {
-  this._context = new ReflectContext(context);
-}
-
-(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {
-  MonotoneX.prototype.point.call(this, y, x);
-};
-
-function ReflectContext(context) {
-  this._context = context;
-}
-
-ReflectContext.prototype = {
-  moveTo: function(x, y) { this._context.moveTo(y, x); },
-  closePath: function() { this._context.closePath(); },
-  lineTo: function(x, y) { this._context.lineTo(y, x); },
-  bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }
-};
-
-function monotoneX(context) {
-  return new MonotoneX(context);
-}
-
-function monotoneY(context) {
-  return new MonotoneY(context);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/natural.js
-function Natural(context) {
-  this._context = context;
-}
-
-Natural.prototype = {
-  areaStart: function() {
-    this._line = 0;
-  },
-  areaEnd: function() {
-    this._line = NaN;
-  },
-  lineStart: function() {
-    this._x = [];
-    this._y = [];
-  },
-  lineEnd: function() {
-    var x = this._x,
-        y = this._y,
-        n = x.length;
-
-    if (n) {
-      this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);
-      if (n === 2) {
-        this._context.lineTo(x[1], y[1]);
-      } else {
-        var px = controlPoints(x),
-            py = controlPoints(y);
-        for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {
-          this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);
-        }
-      }
-    }
-
-    if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();
-    this._line = 1 - this._line;
-    this._x = this._y = null;
-  },
-  point: function(x, y) {
-    this._x.push(+x);
-    this._y.push(+y);
-  }
-};
-
-// See https://www.particleincell.com/2012/bezier-splines/ for derivation.
-function controlPoints(x) {
-  var i,
-      n = x.length - 1,
-      m,
-      a = new Array(n),
-      b = new Array(n),
-      r = new Array(n);
-  a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];
-  for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];
-  a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];
-  for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];
-  a[n - 1] = r[n - 1] / b[n - 1];
-  for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];
-  b[n - 1] = (x[n] + a[n - 1]) / 2;
-  for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];
-  return [a, b];
-}
-
-/* harmony default export */ function natural(context) {
-  return new Natural(context);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/curve/step.js
-function Step(context, t) {
-  this._context = context;
-  this._t = t;
-}
-
-Step.prototype = {
-  areaStart: function() {
-    this._line = 0;
-  },
-  areaEnd: function() {
-    this._line = NaN;
-  },
-  lineStart: function() {
-    this._x = this._y = NaN;
-    this._point = 0;
-  },
-  lineEnd: function() {
-    if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);
-    if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();
-    if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;
-  },
-  point: function(x, y) {
-    x = +x, y = +y;
-    switch (this._point) {
-      case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;
-      case 1: this._point = 2; // falls through
-      default: {
-        if (this._t <= 0) {
-          this._context.lineTo(this._x, y);
-          this._context.lineTo(x, y);
-        } else {
-          var x1 = this._x * (1 - this._t) + x * this._t;
-          this._context.lineTo(x1, this._y);
-          this._context.lineTo(x1, y);
-        }
-        break;
-      }
-    }
-    this._x = x, this._y = y;
-  }
-};
-
-/* harmony default export */ function step(context) {
-  return new Step(context, 0.5);
-}
-
-function stepBefore(context) {
-  return new Step(context, 0);
-}
-
-function stepAfter(context) {
-  return new Step(context, 1);
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-shape/src/index.js
-
-
-
-
- // Note: radialArea is deprecated!
- // Note: radialLine is deprecated!
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;// CONCATENATED MODULE: ./node_modules/d3-time/src/index.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;// CONCATENATED MODULE: ./node_modules/d3-time-format/src/index.js
-
-
-
-
-
-;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/transform.js
-function transform_Transform(k, x, y) {
-  this.k = k;
-  this.x = x;
-  this.y = y;
-}
-
-transform_Transform.prototype = {
-  constructor: transform_Transform,
-  scale: function(k) {
-    return k === 1 ? this : new transform_Transform(this.k * k, this.x, this.y);
-  },
-  translate: function(x, y) {
-    return x === 0 & y === 0 ? this : new transform_Transform(this.k, this.x + this.k * x, this.y + this.k * y);
-  },
-  apply: function(point) {
-    return [point[0] * this.k + this.x, point[1] * this.k + this.y];
-  },
-  applyX: function(x) {
-    return x * this.k + this.x;
-  },
-  applyY: function(y) {
-    return y * this.k + this.y;
-  },
-  invert: function(location) {
-    return [(location[0] - this.x) / this.k, (location[1] - this.y) / this.k];
-  },
-  invertX: function(x) {
-    return (x - this.x) / this.k;
-  },
-  invertY: function(y) {
-    return (y - this.y) / this.k;
-  },
-  rescaleX: function(x) {
-    return x.copy().domain(x.range().map(this.invertX, this).map(x.invert, x));
-  },
-  rescaleY: function(y) {
-    return y.copy().domain(y.range().map(this.invertY, this).map(y.invert, y));
-  },
-  toString: function() {
-    return "translate(" + this.x + "," + this.y + ") scale(" + this.k + ")";
-  }
-};
-
-var transform_identity = new transform_Transform(1, 0, 0);
-
-transform.prototype = transform_Transform.prototype;
-
-function transform(node) {
-  while (!node.__zoom) if (!(node = node.parentNode)) return transform_identity;
-  return node.__zoom;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/zoom.js
-
-
-
-
-
-
-
-
-
-
-// Ignore right-click, since that should open the context menu.
-// except for pinch-to-zoom, which is sent as a wheel+ctrlKey event
-function zoom_defaultFilter(event) {
-  return (!event.ctrlKey || event.type === 'wheel') && !event.button;
-}
-
-function zoom_defaultExtent() {
-  var e = this;
-  if (e instanceof SVGElement) {
-    e = e.ownerSVGElement || e;
-    if (e.hasAttribute("viewBox")) {
-      e = e.viewBox.baseVal;
-      return [[e.x, e.y], [e.x + e.width, e.y + e.height]];
-    }
-    return [[0, 0], [e.width.baseVal.value, e.height.baseVal.value]];
-  }
-  return [[0, 0], [e.clientWidth, e.clientHeight]];
-}
-
-function defaultTransform() {
-  return this.__zoom || identity;
-}
-
-function defaultWheelDelta(event) {
-  return -event.deltaY * (event.deltaMode === 1 ? 0.05 : event.deltaMode ? 1 : 0.002) * (event.ctrlKey ? 10 : 1);
-}
-
-function zoom_defaultTouchable() {
-  return navigator.maxTouchPoints || ("ontouchstart" in this);
-}
-
-function defaultConstrain(transform, extent, translateExtent) {
-  var dx0 = transform.invertX(extent[0][0]) - translateExtent[0][0],
-      dx1 = transform.invertX(extent[1][0]) - translateExtent[1][0],
-      dy0 = transform.invertY(extent[0][1]) - translateExtent[0][1],
-      dy1 = transform.invertY(extent[1][1]) - translateExtent[1][1];
-  return transform.translate(
-    dx1 > dx0 ? (dx0 + dx1) / 2 : Math.min(0, dx0) || Math.max(0, dx1),
-    dy1 > dy0 ? (dy0 + dy1) / 2 : Math.min(0, dy0) || Math.max(0, dy1)
-  );
-}
-
-/* harmony default export */ function zoom() {
-  var filter = zoom_defaultFilter,
-      extent = zoom_defaultExtent,
-      constrain = defaultConstrain,
-      wheelDelta = defaultWheelDelta,
-      touchable = zoom_defaultTouchable,
-      scaleExtent = [0, Infinity],
-      translateExtent = [[-Infinity, -Infinity], [Infinity, Infinity]],
-      duration = 250,
-      interpolate = interpolateZoom,
-      listeners = dispatch("start", "zoom", "end"),
-      touchstarting,
-      touchfirst,
-      touchending,
-      touchDelay = 500,
-      wheelDelay = 150,
-      clickDistance2 = 0,
-      tapDistance = 10;
-
-  function zoom(selection) {
-    selection
-        .property("__zoom", defaultTransform)
-        .on("wheel.zoom", wheeled, {passive: false})
-        .on("mousedown.zoom", mousedowned)
-        .on("dblclick.zoom", dblclicked)
-      .filter(touchable)
-        .on("touchstart.zoom", touchstarted)
-        .on("touchmove.zoom", touchmoved)
-        .on("touchend.zoom touchcancel.zoom", touchended)
-        .style("-webkit-tap-highlight-color", "rgba(0,0,0,0)");
-  }
-
-  zoom.transform = function(collection, transform, point, event) {
-    var selection = collection.selection ? collection.selection() : collection;
-    selection.property("__zoom", defaultTransform);
-    if (collection !== selection) {
-      schedule(collection, transform, point, event);
-    } else {
-      selection.interrupt().each(function() {
-        gesture(this, arguments)
-          .event(event)
-          .start()
-          .zoom(null, typeof transform === "function" ? transform.apply(this, arguments) : transform)
-          .end();
-      });
-    }
-  };
-
-  zoom.scaleBy = function(selection, k, p, event) {
-    zoom.scaleTo(selection, function() {
-      var k0 = this.__zoom.k,
-          k1 = typeof k === "function" ? k.apply(this, arguments) : k;
-      return k0 * k1;
-    }, p, event);
-  };
-
-  zoom.scaleTo = function(selection, k, p, event) {
-    zoom.transform(selection, function() {
-      var e = extent.apply(this, arguments),
-          t0 = this.__zoom,
-          p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p,
-          p1 = t0.invert(p0),
-          k1 = typeof k === "function" ? k.apply(this, arguments) : k;
-      return constrain(translate(scale(t0, k1), p0, p1), e, translateExtent);
-    }, p, event);
-  };
-
-  zoom.translateBy = function(selection, x, y, event) {
-    zoom.transform(selection, function() {
-      return constrain(this.__zoom.translate(
-        typeof x === "function" ? x.apply(this, arguments) : x,
-        typeof y === "function" ? y.apply(this, arguments) : y
-      ), extent.apply(this, arguments), translateExtent);
-    }, null, event);
-  };
-
-  zoom.translateTo = function(selection, x, y, p, event) {
-    zoom.transform(selection, function() {
-      var e = extent.apply(this, arguments),
-          t = this.__zoom,
-          p0 = p == null ? centroid(e) : typeof p === "function" ? p.apply(this, arguments) : p;
-      return constrain(identity.translate(p0[0], p0[1]).scale(t.k).translate(
-        typeof x === "function" ? -x.apply(this, arguments) : -x,
-        typeof y === "function" ? -y.apply(this, arguments) : -y
-      ), e, translateExtent);
-    }, p, event);
-  };
-
-  function scale(transform, k) {
-    k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], k));
-    return k === transform.k ? transform : new Transform(k, transform.x, transform.y);
-  }
-
-  function translate(transform, p0, p1) {
-    var x = p0[0] - p1[0] * transform.k, y = p0[1] - p1[1] * transform.k;
-    return x === transform.x && y === transform.y ? transform : new Transform(transform.k, x, y);
-  }
-
-  function centroid(extent) {
-    return [(+extent[0][0] + +extent[1][0]) / 2, (+extent[0][1] + +extent[1][1]) / 2];
-  }
-
-  function schedule(transition, transform, point, event) {
-    transition
-        .on("start.zoom", function() { gesture(this, arguments).event(event).start(); })
-        .on("interrupt.zoom end.zoom", function() { gesture(this, arguments).event(event).end(); })
-        .tween("zoom", function() {
-          var that = this,
-              args = arguments,
-              g = gesture(that, args).event(event),
-              e = extent.apply(that, args),
-              p = point == null ? centroid(e) : typeof point === "function" ? point.apply(that, args) : point,
-              w = Math.max(e[1][0] - e[0][0], e[1][1] - e[0][1]),
-              a = that.__zoom,
-              b = typeof transform === "function" ? transform.apply(that, args) : transform,
-              i = interpolate(a.invert(p).concat(w / a.k), b.invert(p).concat(w / b.k));
-          return function(t) {
-            if (t === 1) t = b; // Avoid rounding error on end.
-            else { var l = i(t), k = w / l[2]; t = new Transform(k, p[0] - l[0] * k, p[1] - l[1] * k); }
-            g.zoom(null, t);
-          };
-        });
-  }
-
-  function gesture(that, args, clean) {
-    return (!clean && that.__zooming) || new Gesture(that, args);
-  }
-
-  function Gesture(that, args) {
-    this.that = that;
-    this.args = args;
-    this.active = 0;
-    this.sourceEvent = null;
-    this.extent = extent.apply(that, args);
-    this.taps = 0;
-  }
-
-  Gesture.prototype = {
-    event: function(event) {
-      if (event) this.sourceEvent = event;
-      return this;
-    },
-    start: function() {
-      if (++this.active === 1) {
-        this.that.__zooming = this;
-        this.emit("start");
-      }
-      return this;
-    },
-    zoom: function(key, transform) {
-      if (this.mouse && key !== "mouse") this.mouse[1] = transform.invert(this.mouse[0]);
-      if (this.touch0 && key !== "touch") this.touch0[1] = transform.invert(this.touch0[0]);
-      if (this.touch1 && key !== "touch") this.touch1[1] = transform.invert(this.touch1[0]);
-      this.that.__zoom = transform;
-      this.emit("zoom");
-      return this;
-    },
-    end: function() {
-      if (--this.active === 0) {
-        delete this.that.__zooming;
-        this.emit("end");
-      }
-      return this;
-    },
-    emit: function(type) {
-      var d = select(this.that).datum();
-      listeners.call(
-        type,
-        this.that,
-        new ZoomEvent(type, {
-          sourceEvent: this.sourceEvent,
-          target: zoom,
-          type,
-          transform: this.that.__zoom,
-          dispatch: listeners
-        }),
-        d
-      );
-    }
-  };
-
-  function wheeled(event, ...args) {
-    if (!filter.apply(this, arguments)) return;
-    var g = gesture(this, args).event(event),
-        t = this.__zoom,
-        k = Math.max(scaleExtent[0], Math.min(scaleExtent[1], t.k * Math.pow(2, wheelDelta.apply(this, arguments)))),
-        p = pointer(event);
-
-    // If the mouse is in the same location as before, reuse it.
-    // If there were recent wheel events, reset the wheel idle timeout.
-    if (g.wheel) {
-      if (g.mouse[0][0] !== p[0] || g.mouse[0][1] !== p[1]) {
-        g.mouse[1] = t.invert(g.mouse[0] = p);
-      }
-      clearTimeout(g.wheel);
-    }
-
-    // If this wheel event won’t trigger a transform change, ignore it.
-    else if (t.k === k) return;
-
-    // Otherwise, capture the mouse point and location at the start.
-    else {
-      g.mouse = [p, t.invert(p)];
-      interrupt(this);
-      g.start();
-    }
-
-    noevent(event);
-    g.wheel = setTimeout(wheelidled, wheelDelay);
-    g.zoom("mouse", constrain(translate(scale(t, k), g.mouse[0], g.mouse[1]), g.extent, translateExtent));
-
-    function wheelidled() {
-      g.wheel = null;
-      g.end();
-    }
-  }
-
-  function mousedowned(event, ...args) {
-    if (touchending || !filter.apply(this, arguments)) return;
-    var currentTarget = event.currentTarget,
-        g = gesture(this, args, true).event(event),
-        v = select(event.view).on("mousemove.zoom", mousemoved, true).on("mouseup.zoom", mouseupped, true),
-        p = pointer(event, currentTarget),
-        x0 = event.clientX,
-        y0 = event.clientY;
-
-    dragDisable(event.view);
-    nopropagation(event);
-    g.mouse = [p, this.__zoom.invert(p)];
-    interrupt(this);
-    g.start();
-
-    function mousemoved(event) {
-      noevent(event);
-      if (!g.moved) {
-        var dx = event.clientX - x0, dy = event.clientY - y0;
-        g.moved = dx * dx + dy * dy > clickDistance2;
-      }
-      g.event(event)
-       .zoom("mouse", constrain(translate(g.that.__zoom, g.mouse[0] = pointer(event, currentTarget), g.mouse[1]), g.extent, translateExtent));
-    }
-
-    function mouseupped(event) {
-      v.on("mousemove.zoom mouseup.zoom", null);
-      dragEnable(event.view, g.moved);
-      noevent(event);
-      g.event(event).end();
-    }
-  }
-
-  function dblclicked(event, ...args) {
-    if (!filter.apply(this, arguments)) return;
-    var t0 = this.__zoom,
-        p0 = pointer(event.changedTouches ? event.changedTouches[0] : event, this),
-        p1 = t0.invert(p0),
-        k1 = t0.k * (event.shiftKey ? 0.5 : 2),
-        t1 = constrain(translate(scale(t0, k1), p0, p1), extent.apply(this, args), translateExtent);
-
-    noevent(event);
-    if (duration > 0) select(this).transition().duration(duration).call(schedule, t1, p0, event);
-    else select(this).call(zoom.transform, t1, p0, event);
-  }
-
-  function touchstarted(event, ...args) {
-    if (!filter.apply(this, arguments)) return;
-    var touches = event.touches,
-        n = touches.length,
-        g = gesture(this, args, event.changedTouches.length === n).event(event),
-        started, i, t, p;
-
-    nopropagation(event);
-    for (i = 0; i < n; ++i) {
-      t = touches[i], p = pointer(t, this);
-      p = [p, this.__zoom.invert(p), t.identifier];
-      if (!g.touch0) g.touch0 = p, started = true, g.taps = 1 + !!touchstarting;
-      else if (!g.touch1 && g.touch0[2] !== p[2]) g.touch1 = p, g.taps = 0;
-    }
-
-    if (touchstarting) touchstarting = clearTimeout(touchstarting);
-
-    if (started) {
-      if (g.taps < 2) touchfirst = p[0], touchstarting = setTimeout(function() { touchstarting = null; }, touchDelay);
-      interrupt(this);
-      g.start();
-    }
-  }
-
-  function touchmoved(event, ...args) {
-    if (!this.__zooming) return;
-    var g = gesture(this, args).event(event),
-        touches = event.changedTouches,
-        n = touches.length, i, t, p, l;
-
-    noevent(event);
-    for (i = 0; i < n; ++i) {
-      t = touches[i], p = pointer(t, this);
-      if (g.touch0 && g.touch0[2] === t.identifier) g.touch0[0] = p;
-      else if (g.touch1 && g.touch1[2] === t.identifier) g.touch1[0] = p;
-    }
-    t = g.that.__zoom;
-    if (g.touch1) {
-      var p0 = g.touch0[0], l0 = g.touch0[1],
-          p1 = g.touch1[0], l1 = g.touch1[1],
-          dp = (dp = p1[0] - p0[0]) * dp + (dp = p1[1] - p0[1]) * dp,
-          dl = (dl = l1[0] - l0[0]) * dl + (dl = l1[1] - l0[1]) * dl;
-      t = scale(t, Math.sqrt(dp / dl));
-      p = [(p0[0] + p1[0]) / 2, (p0[1] + p1[1]) / 2];
-      l = [(l0[0] + l1[0]) / 2, (l0[1] + l1[1]) / 2];
-    }
-    else if (g.touch0) p = g.touch0[0], l = g.touch0[1];
-    else return;
-
-    g.zoom("touch", constrain(translate(t, p, l), g.extent, translateExtent));
-  }
-
-  function touchended(event, ...args) {
-    if (!this.__zooming) return;
-    var g = gesture(this, args).event(event),
-        touches = event.changedTouches,
-        n = touches.length, i, t;
-
-    nopropagation(event);
-    if (touchending) clearTimeout(touchending);
-    touchending = setTimeout(function() { touchending = null; }, touchDelay);
-    for (i = 0; i < n; ++i) {
-      t = touches[i];
-      if (g.touch0 && g.touch0[2] === t.identifier) delete g.touch0;
-      else if (g.touch1 && g.touch1[2] === t.identifier) delete g.touch1;
-    }
-    if (g.touch1 && !g.touch0) g.touch0 = g.touch1, delete g.touch1;
-    if (g.touch0) g.touch0[1] = this.__zoom.invert(g.touch0[0]);
-    else {
-      g.end();
-      // If this was a dbltap, reroute to the (optional) dblclick.zoom handler.
-      if (g.taps === 2) {
-        t = pointer(t, this);
-        if (Math.hypot(touchfirst[0] - t[0], touchfirst[1] - t[1]) < tapDistance) {
-          var p = select(this).on("dblclick.zoom");
-          if (p) p.apply(this, arguments);
-        }
-      }
-    }
-  }
-
-  zoom.wheelDelta = function(_) {
-    return arguments.length ? (wheelDelta = typeof _ === "function" ? _ : constant(+_), zoom) : wheelDelta;
-  };
-
-  zoom.filter = function(_) {
-    return arguments.length ? (filter = typeof _ === "function" ? _ : constant(!!_), zoom) : filter;
-  };
-
-  zoom.touchable = function(_) {
-    return arguments.length ? (touchable = typeof _ === "function" ? _ : constant(!!_), zoom) : touchable;
-  };
-
-  zoom.extent = function(_) {
-    return arguments.length ? (extent = typeof _ === "function" ? _ : constant([[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]]), zoom) : extent;
-  };
-
-  zoom.scaleExtent = function(_) {
-    return arguments.length ? (scaleExtent[0] = +_[0], scaleExtent[1] = +_[1], zoom) : [scaleExtent[0], scaleExtent[1]];
-  };
-
-  zoom.translateExtent = function(_) {
-    return arguments.length ? (translateExtent[0][0] = +_[0][0], translateExtent[1][0] = +_[1][0], translateExtent[0][1] = +_[0][1], translateExtent[1][1] = +_[1][1], zoom) : [[translateExtent[0][0], translateExtent[0][1]], [translateExtent[1][0], translateExtent[1][1]]];
-  };
-
-  zoom.constrain = function(_) {
-    return arguments.length ? (constrain = _, zoom) : constrain;
-  };
-
-  zoom.duration = function(_) {
-    return arguments.length ? (duration = +_, zoom) : duration;
-  };
-
-  zoom.interpolate = function(_) {
-    return arguments.length ? (interpolate = _, zoom) : interpolate;
-  };
-
-  zoom.on = function() {
-    var value = listeners.on.apply(listeners, arguments);
-    return value === listeners ? zoom : value;
-  };
-
-  zoom.clickDistance = function(_) {
-    return arguments.length ? (clickDistance2 = (_ = +_) * _, zoom) : Math.sqrt(clickDistance2);
-  };
-
-  zoom.tapDistance = function(_) {
-    return arguments.length ? (tapDistance = +_, zoom) : tapDistance;
-  };
-
-  return zoom;
-}
-
-;// CONCATENATED MODULE: ./node_modules/d3-zoom/src/index.js
-
-
-
-;// CONCATENATED MODULE: ./node_modules/d3/src/index.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/***/ }),
-
-/***/ 23352:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "A": () => (/* binding */ intersectPolygon)
-});
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-line.js
-
-
-/*
- * Returns the point at which two lines, p and q, intersect or returns
- * undefined if they do not intersect.
- */
-function intersectLine(p1, p2, q1, q2) {
-  // Algorithm from J. Avro, (ed.) Graphics Gems, No 2, Morgan Kaufmann, 1994,
-  // p7 and p473.
-
-  var a1, a2, b1, b2, c1, c2;
-  var r1, r2, r3, r4;
-  var denom, offset, num;
-  var x, y;
-
-  // Compute a1, b1, c1, where line joining points 1 and 2 is F(x,y) = a1 x +
-  // b1 y + c1 = 0.
-  a1 = p2.y - p1.y;
-  b1 = p1.x - p2.x;
-  c1 = p2.x * p1.y - p1.x * p2.y;
-
-  // Compute r3 and r4.
-  r3 = a1 * q1.x + b1 * q1.y + c1;
-  r4 = a1 * q2.x + b1 * q2.y + c1;
-
-  // Check signs of r3 and r4. If both point 3 and point 4 lie on
-  // same side of line 1, the line segments do not intersect.
-  if (r3 !== 0 && r4 !== 0 && sameSign(r3, r4)) {
-    return /*DONT_INTERSECT*/;
-  }
-
-  // Compute a2, b2, c2 where line joining points 3 and 4 is G(x,y) = a2 x + b2 y + c2 = 0
-  a2 = q2.y - q1.y;
-  b2 = q1.x - q2.x;
-  c2 = q2.x * q1.y - q1.x * q2.y;
-
-  // Compute r1 and r2
-  r1 = a2 * p1.x + b2 * p1.y + c2;
-  r2 = a2 * p2.x + b2 * p2.y + c2;
-
-  // Check signs of r1 and r2. If both point 1 and point 2 lie
-  // on same side of second line segment, the line segments do
-  // not intersect.
-  if (r1 !== 0 && r2 !== 0 && sameSign(r1, r2)) {
-    return /*DONT_INTERSECT*/;
-  }
-
-  // Line segments intersect: compute intersection point.
-  denom = a1 * b2 - a2 * b1;
-  if (denom === 0) {
-    return /*COLLINEAR*/;
-  }
-
-  offset = Math.abs(denom / 2);
-
-  // The denom/2 is to get rounding instead of truncating. It
-  // is added or subtracted to the numerator, depending upon the
-  // sign of the numerator.
-  num = b1 * c2 - b2 * c1;
-  x = num < 0 ? (num - offset) / denom : (num + offset) / denom;
-
-  num = a2 * c1 - a1 * c2;
-  y = num < 0 ? (num - offset) / denom : (num + offset) / denom;
-
-  return { x: x, y: y };
-}
-
-function sameSign(r1, r2) {
-  return r1 * r2 > 0;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js
-
-
-
-
-/*
- * Returns the point ({x, y}) at which the point argument intersects with the
- * node argument assuming that it has the shape specified by polygon.
- */
-function intersectPolygon(node, polyPoints, point) {
-  var x1 = node.x;
-  var y1 = node.y;
-
-  var intersections = [];
-
-  var minX = Number.POSITIVE_INFINITY;
-  var minY = Number.POSITIVE_INFINITY;
-  polyPoints.forEach(function (entry) {
-    minX = Math.min(minX, entry.x);
-    minY = Math.min(minY, entry.y);
-  });
-
-  var left = x1 - node.width / 2 - minX;
-  var top = y1 - node.height / 2 - minY;
-
-  for (var i = 0; i < polyPoints.length; i++) {
-    var p1 = polyPoints[i];
-    var p2 = polyPoints[i < polyPoints.length - 1 ? i + 1 : 0];
-    var intersect = intersectLine(
-      node,
-      point,
-      { x: left + p1.x, y: top + p1.y },
-      { x: left + p2.x, y: top + p2.y }
-    );
-    if (intersect) {
-      intersections.push(intersect);
-    }
-  }
-
-  if (!intersections.length) {
-    console.log('NO INTERSECTION FOUND, RETURN NODE CENTER', node);
-    return node;
-  }
-
-  if (intersections.length > 1) {
-    // More intersections, find the one nearest to edge end point
-    intersections.sort(function (p, q) {
-      var pdx = p.x - point.x;
-      var pdy = p.y - point.y;
-      var distp = Math.sqrt(pdx * pdx + pdy * pdy);
-
-      var qdx = q.x - point.x;
-      var qdy = q.y - point.y;
-      var distq = Math.sqrt(qdx * qdx + qdy * qdy);
-
-      return distp < distq ? -1 : distp === distq ? 0 : 1;
-    });
-  }
-  return intersections[0];
-}
-
-
-/***/ }),
-
-/***/ 22930:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "q": () => (/* binding */ intersectRect)
-/* harmony export */ });
-
-
-function intersectRect(node, point) {
-  var x = node.x;
-  var y = node.y;
-
-  // Rectangle intersection algorithm from:
-  // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes
-  var dx = point.x - x;
-  var dy = point.y - y;
-  var w = node.width / 2;
-  var h = node.height / 2;
-
-  var sx, sy;
-  if (Math.abs(dy) * w > Math.abs(dx) * h) {
-    // Intersection is top or bottom of rect.
-    if (dy < 0) {
-      h = -h;
-    }
-    sx = dy === 0 ? 0 : (h * dx) / dy;
-    sy = h;
-  } else {
-    // Intersection is left or right of rect.
-    if (dx < 0) {
-      w = -w;
-    }
-    sx = w;
-    sy = dx === 0 ? 0 : (w * dy) / dx;
-  }
-
-  return { x: x + sx, y: y + sy };
-}
-
-
-/***/ }),
-
-/***/ 43349:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "a": () => (/* binding */ addHtmlLabel)
-/* harmony export */ });
-/* harmony import */ var _util_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(96225);
-
-
-
-
-function addHtmlLabel(root, node) {
-  var fo = root.append('foreignObject').attr('width', '100000');
-
-  var div = fo.append('xhtml:div');
-  div.attr('xmlns', 'http://www.w3.org/1999/xhtml');
-
-  var label = node.label;
-  switch (typeof label) {
-    case 'function':
-      div.insert(label);
-      break;
-    case 'object':
-      // Currently we assume this is a DOM object.
-      div.insert(function () {
-        return label;
-      });
-      break;
-    default:
-      div.html(label);
-  }
-
-  _util_js__WEBPACK_IMPORTED_MODULE_0__/* .applyStyle */ .bg(div, node.labelStyle);
-  div.style('display', 'inline-block');
-  // Fix for firefox
-  div.style('white-space', 'nowrap');
-
-  var client = div.node().getBoundingClientRect();
-  fo.attr('width', client.width).attr('height', client.height);
-
-  return fo;
-}
-
-
-/***/ }),
-
-/***/ 96225:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "$p": () => (/* binding */ applyClass),
-/* harmony export */   "O1": () => (/* binding */ edgeToId),
-/* harmony export */   "WR": () => (/* binding */ applyTransition),
-/* harmony export */   "bF": () => (/* binding */ isSubgraph),
-/* harmony export */   "bg": () => (/* binding */ applyStyle)
-/* harmony export */ });
-/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(37514);
-/* harmony import */ var lodash_es__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73234);
-
-
-// Public utility functions
-
-
-/*
- * Returns true if the specified node in the graph is a subgraph node. A
- * subgraph node is one that contains other nodes.
- */
-function isSubgraph(g, v) {
-  return !!g.children(v).length;
-}
-
-function edgeToId(e) {
-  return escapeId(e.v) + ':' + escapeId(e.w) + ':' + escapeId(e.name);
-}
-
-var ID_DELIM = /:/g;
-function escapeId(str) {
-  return str ? String(str).replace(ID_DELIM, '\\:') : '';
-}
-
-function applyStyle(dom, styleFn) {
-  if (styleFn) {
-    dom.attr('style', styleFn);
-  }
-}
-
-function applyClass(dom, classFn, otherClasses) {
-  if (classFn) {
-    dom.attr('class', classFn).attr('class', otherClasses + ' ' + dom.attr('class'));
-  }
-}
-
-function applyTransition(selection, g) {
-  var graph = g.graph();
-
-  if (lodash_es__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(graph)) {
-    var transition = graph.transition;
-    if (lodash_es__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z(transition)) {
-      return transition(selection);
-    }
-  }
-
-  return selection;
-}
-
-
-/***/ }),
-
-/***/ 70277:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "bK": () => (/* reexport */ layout)
-});
-
-// UNUSED EXPORTS: acyclic, normalize, rank
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js
-var forEach = __webpack_require__(70870);
-// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js
-var uniqueId = __webpack_require__(66749);
-// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules
-var has = __webpack_require__(17452);
-// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js
-var constant = __webpack_require__(62002);
-// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js
-var flatten = __webpack_require__(27961);
-// EXTERNAL MODULE: ./node_modules/lodash-es/map.js
-var map = __webpack_require__(43836);
-// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules
-var range = __webpack_require__(74379);
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js
-var graphlib = __webpack_require__(45625);
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/data/list.js
-/*
- * Simple doubly linked list implementation derived from Cormen, et al.,
- * "Introduction to Algorithms".
- */
-
-
-
-class List {
-  constructor() {
-    var sentinel = {};
-    sentinel._next = sentinel._prev = sentinel;
-    this._sentinel = sentinel;
-  }
-  dequeue() {
-    var sentinel = this._sentinel;
-    var entry = sentinel._prev;
-    if (entry !== sentinel) {
-      unlink(entry);
-      return entry;
-    }
-  }
-  enqueue(entry) {
-    var sentinel = this._sentinel;
-    if (entry._prev && entry._next) {
-      unlink(entry);
-    }
-    entry._next = sentinel._next;
-    sentinel._next._prev = entry;
-    sentinel._next = entry;
-    entry._prev = sentinel;
-  }
-  toString() {
-    var strs = [];
-    var sentinel = this._sentinel;
-    var curr = sentinel._prev;
-    while (curr !== sentinel) {
-      strs.push(JSON.stringify(curr, filterOutLinks));
-      curr = curr._prev;
-    }
-    return '[' + strs.join(', ') + ']';
-  }
-}
-
-function unlink(entry) {
-  entry._prev._next = entry._next;
-  entry._next._prev = entry._prev;
-  delete entry._next;
-  delete entry._prev;
-}
-
-function filterOutLinks(k, v) {
-  if (k !== '_next' && k !== '_prev') {
-    return v;
-  }
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/greedy-fas.js
-
-
-
-
-/*
- * A greedy heuristic for finding a feedback arc set for a graph. A feedback
- * arc set is a set of edges that can be removed to make a graph acyclic.
- * The algorithm comes from: P. Eades, X. Lin, and W. F. Smyth, "A fast and
- * effective heuristic for the feedback arc set problem." This implementation
- * adjusts that from the paper to allow for weighted edges.
- */
-
-
-var DEFAULT_WEIGHT_FN = constant/* default */.Z(1);
-
-function greedyFAS(g, weightFn) {
-  if (g.nodeCount() <= 1) {
-    return [];
-  }
-  var state = buildState(g, weightFn || DEFAULT_WEIGHT_FN);
-  var results = doGreedyFAS(state.graph, state.buckets, state.zeroIdx);
-
-  // Expand multi-edges
-  return flatten/* default */.Z(
-    map/* default */.Z(results, function (e) {
-      return g.outEdges(e.v, e.w);
-    })
-  );
-}
-
-function doGreedyFAS(g, buckets, zeroIdx) {
-  var results = [];
-  var sources = buckets[buckets.length - 1];
-  var sinks = buckets[0];
-
-  var entry;
-  while (g.nodeCount()) {
-    while ((entry = sinks.dequeue())) {
-      removeNode(g, buckets, zeroIdx, entry);
-    }
-    while ((entry = sources.dequeue())) {
-      removeNode(g, buckets, zeroIdx, entry);
-    }
-    if (g.nodeCount()) {
-      for (var i = buckets.length - 2; i > 0; --i) {
-        entry = buckets[i].dequeue();
-        if (entry) {
-          results = results.concat(removeNode(g, buckets, zeroIdx, entry, true));
-          break;
-        }
-      }
-    }
-  }
-
-  return results;
-}
-
-function removeNode(g, buckets, zeroIdx, entry, collectPredecessors) {
-  var results = collectPredecessors ? [] : undefined;
-
-  forEach/* default */.Z(g.inEdges(entry.v), function (edge) {
-    var weight = g.edge(edge);
-    var uEntry = g.node(edge.v);
-
-    if (collectPredecessors) {
-      results.push({ v: edge.v, w: edge.w });
-    }
-
-    uEntry.out -= weight;
-    assignBucket(buckets, zeroIdx, uEntry);
-  });
-
-  forEach/* default */.Z(g.outEdges(entry.v), function (edge) {
-    var weight = g.edge(edge);
-    var w = edge.w;
-    var wEntry = g.node(w);
-    wEntry['in'] -= weight;
-    assignBucket(buckets, zeroIdx, wEntry);
-  });
-
-  g.removeNode(entry.v);
-
-  return results;
-}
-
-function buildState(g, weightFn) {
-  var fasGraph = new graphlib/* Graph */.k();
-  var maxIn = 0;
-  var maxOut = 0;
-
-  forEach/* default */.Z(g.nodes(), function (v) {
-    fasGraph.setNode(v, { v: v, in: 0, out: 0 });
-  });
-
-  // Aggregate weights on nodes, but also sum the weights across multi-edges
-  // into a single edge for the fasGraph.
-  forEach/* default */.Z(g.edges(), function (e) {
-    var prevWeight = fasGraph.edge(e.v, e.w) || 0;
-    var weight = weightFn(e);
-    var edgeWeight = prevWeight + weight;
-    fasGraph.setEdge(e.v, e.w, edgeWeight);
-    maxOut = Math.max(maxOut, (fasGraph.node(e.v).out += weight));
-    maxIn = Math.max(maxIn, (fasGraph.node(e.w)['in'] += weight));
-  });
-
-  var buckets = range/* default */.Z(maxOut + maxIn + 3).map(function () {
-    return new List();
-  });
-  var zeroIdx = maxIn + 1;
-
-  forEach/* default */.Z(fasGraph.nodes(), function (v) {
-    assignBucket(buckets, zeroIdx, fasGraph.node(v));
-  });
-
-  return { graph: fasGraph, buckets: buckets, zeroIdx: zeroIdx };
-}
-
-function assignBucket(buckets, zeroIdx, entry) {
-  if (!entry.out) {
-    buckets[0].enqueue(entry);
-  } else if (!entry['in']) {
-    buckets[buckets.length - 1].enqueue(entry);
-  } else {
-    buckets[entry.out - entry['in'] + zeroIdx].enqueue(entry);
-  }
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/acyclic.js
-
-
-
-
-
-function run(g) {
-  var fas = g.graph().acyclicer === 'greedy' ? greedyFAS(g, weightFn(g)) : dfsFAS(g);
-  forEach/* default */.Z(fas, function (e) {
-    var label = g.edge(e);
-    g.removeEdge(e);
-    label.forwardName = e.name;
-    label.reversed = true;
-    g.setEdge(e.w, e.v, label, uniqueId/* default */.Z('rev'));
-  });
-
-  function weightFn(g) {
-    return function (e) {
-      return g.edge(e).weight;
-    };
-  }
-}
-
-function dfsFAS(g) {
-  var fas = [];
-  var stack = {};
-  var visited = {};
-
-  function dfs(v) {
-    if (has/* default */.Z(visited, v)) {
-      return;
-    }
-    visited[v] = true;
-    stack[v] = true;
-    forEach/* default */.Z(g.outEdges(v), function (e) {
-      if (has/* default */.Z(stack, e.w)) {
-        fas.push(e);
-      } else {
-        dfs(e.w);
-      }
-    });
-    delete stack[v];
-  }
-
-  forEach/* default */.Z(g.nodes(), dfs);
-  return fas;
-}
-
-function undo(g) {
-  forEach/* default */.Z(g.edges(), function (e) {
-    var label = g.edge(e);
-    if (label.reversed) {
-      g.removeEdge(e);
-
-      var forwardName = label.forwardName;
-      delete label.reversed;
-      delete label.forwardName;
-      g.setEdge(e.w, e.v, label, forwardName);
-    }
-  });
-}
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules
-var _Stack = __webpack_require__(31667);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseAssignValue.js
-var _baseAssignValue = __webpack_require__(74752);
-// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js
-var eq = __webpack_require__(79651);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_assignMergeValue.js
-
-
-
-/**
- * This function is like `assignValue` except that it doesn't assign
- * `undefined` values.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {string} key The key of the property to assign.
- * @param {*} value The value to assign.
- */
-function assignMergeValue(object, key, value) {
-  if ((value !== undefined && !(0,eq/* default */.Z)(object[key], value)) ||
-      (value === undefined && !(key in object))) {
-    (0,_baseAssignValue/* default */.Z)(object, key, value);
-  }
-}
-
-/* harmony default export */ const _assignMergeValue = (assignMergeValue);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFor.js + 1 modules
-var _baseFor = __webpack_require__(61395);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js
-var _cloneBuffer = __webpack_require__(91050);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js
-var _cloneTypedArray = __webpack_require__(12701);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js
-var _copyArray = __webpack_require__(87215);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules
-var _initCloneObject = __webpack_require__(73658);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules
-var isArguments = __webpack_require__(29169);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js
-var isArray = __webpack_require__(27771);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js
-var isArrayLikeObject = __webpack_require__(836);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules
-var isBuffer = __webpack_require__(77008);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js
-var isFunction = __webpack_require__(73234);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js
-var isObject = __webpack_require__(77226);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isPlainObject.js
-var isPlainObject = __webpack_require__(37514);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules
-var isTypedArray = __webpack_require__(18843);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_safeGet.js
-/**
- * Gets the value at `key`, unless `key` is "__proto__" or "constructor".
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the property to get.
- * @returns {*} Returns the property value.
- */
-function safeGet(object, key) {
-  if (key === 'constructor' && typeof object[key] === 'function') {
-    return;
-  }
-
-  if (key == '__proto__') {
-    return;
-  }
-
-  return object[key];
-}
-
-/* harmony default export */ const _safeGet = (safeGet);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js
-var _copyObject = __webpack_require__(31899);
-// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules
-var keysIn = __webpack_require__(32957);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/toPlainObject.js
-
-
-
-/**
- * Converts `value` to a plain object flattening inherited enumerable string
- * keyed properties of `value` to own properties of the plain object.
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category Lang
- * @param {*} value The value to convert.
- * @returns {Object} Returns the converted plain object.
- * @example
- *
- * function Foo() {
- *   this.b = 2;
- * }
- *
- * Foo.prototype.c = 3;
- *
- * _.assign({ 'a': 1 }, new Foo);
- * // => { 'a': 1, 'b': 2 }
- *
- * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));
- * // => { 'a': 1, 'b': 2, 'c': 3 }
- */
-function toPlainObject(value) {
-  return (0,_copyObject/* default */.Z)(value, (0,keysIn/* default */.Z)(value));
-}
-
-/* harmony default export */ const lodash_es_toPlainObject = (toPlainObject);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMergeDeep.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/**
- * A specialized version of `baseMerge` for arrays and objects which performs
- * deep merges and tracks traversed objects enabling objects with circular
- * references to be merged.
- *
- * @private
- * @param {Object} object The destination object.
- * @param {Object} source The source object.
- * @param {string} key The key of the value to merge.
- * @param {number} srcIndex The index of `source`.
- * @param {Function} mergeFunc The function to merge values.
- * @param {Function} [customizer] The function to customize assigned values.
- * @param {Object} [stack] Tracks traversed source values and their merged
- *  counterparts.
- */
-function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {
-  var objValue = _safeGet(object, key),
-      srcValue = _safeGet(source, key),
-      stacked = stack.get(srcValue);
-
-  if (stacked) {
-    _assignMergeValue(object, key, stacked);
-    return;
-  }
-  var newValue = customizer
-    ? customizer(objValue, srcValue, (key + ''), object, source, stack)
-    : undefined;
-
-  var isCommon = newValue === undefined;
-
-  if (isCommon) {
-    var isArr = (0,isArray/* default */.Z)(srcValue),
-        isBuff = !isArr && (0,isBuffer/* default */.Z)(srcValue),
-        isTyped = !isArr && !isBuff && (0,isTypedArray/* default */.Z)(srcValue);
-
-    newValue = srcValue;
-    if (isArr || isBuff || isTyped) {
-      if ((0,isArray/* default */.Z)(objValue)) {
-        newValue = objValue;
-      }
-      else if ((0,isArrayLikeObject/* default */.Z)(objValue)) {
-        newValue = (0,_copyArray/* default */.Z)(objValue);
-      }
-      else if (isBuff) {
-        isCommon = false;
-        newValue = (0,_cloneBuffer/* default */.Z)(srcValue, true);
-      }
-      else if (isTyped) {
-        isCommon = false;
-        newValue = (0,_cloneTypedArray/* default */.Z)(srcValue, true);
-      }
-      else {
-        newValue = [];
-      }
-    }
-    else if ((0,isPlainObject/* default */.Z)(srcValue) || (0,isArguments/* default */.Z)(srcValue)) {
-      newValue = objValue;
-      if ((0,isArguments/* default */.Z)(objValue)) {
-        newValue = lodash_es_toPlainObject(objValue);
-      }
-      else if (!(0,isObject/* default */.Z)(objValue) || (0,isFunction/* default */.Z)(objValue)) {
-        newValue = (0,_initCloneObject/* default */.Z)(srcValue);
-      }
-    }
-    else {
-      isCommon = false;
-    }
-  }
-  if (isCommon) {
-    // Recursively merge objects and arrays (susceptible to call stack limits).
-    stack.set(srcValue, newValue);
-    mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
-    stack['delete'](srcValue);
-  }
-  _assignMergeValue(object, key, newValue);
-}
-
-/* harmony default export */ const _baseMergeDeep = (baseMergeDeep);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMerge.js
-
-
-
-
-
-
-
-
-/**
- * The base implementation of `_.merge` without support for multiple sources.
- *
- * @private
- * @param {Object} object The destination object.
- * @param {Object} source The source object.
- * @param {number} srcIndex The index of `source`.
- * @param {Function} [customizer] The function to customize merged values.
- * @param {Object} [stack] Tracks traversed source values and their merged
- *  counterparts.
- */
-function baseMerge(object, source, srcIndex, customizer, stack) {
-  if (object === source) {
-    return;
-  }
-  (0,_baseFor/* default */.Z)(source, function(srcValue, key) {
-    stack || (stack = new _Stack/* default */.Z);
-    if ((0,isObject/* default */.Z)(srcValue)) {
-      _baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);
-    }
-    else {
-      var newValue = customizer
-        ? customizer(_safeGet(object, key), srcValue, (key + ''), object, source, stack)
-        : undefined;
-
-      if (newValue === undefined) {
-        newValue = srcValue;
-      }
-      _assignMergeValue(object, key, newValue);
-    }
-  }, keysIn/* default */.Z);
-}
-
-/* harmony default export */ const _baseMerge = (baseMerge);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js
-var _baseRest = __webpack_require__(69581);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js
-var _isIterateeCall = __webpack_require__(50439);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_createAssigner.js
-
-
-
-/**
- * Creates a function like `_.assign`.
- *
- * @private
- * @param {Function} assigner The function to assign values.
- * @returns {Function} Returns the new assigner function.
- */
-function createAssigner(assigner) {
-  return (0,_baseRest/* default */.Z)(function(object, sources) {
-    var index = -1,
-        length = sources.length,
-        customizer = length > 1 ? sources[length - 1] : undefined,
-        guard = length > 2 ? sources[2] : undefined;
-
-    customizer = (assigner.length > 3 && typeof customizer == 'function')
-      ? (length--, customizer)
-      : undefined;
-
-    if (guard && (0,_isIterateeCall/* default */.Z)(sources[0], sources[1], guard)) {
-      customizer = length < 3 ? undefined : customizer;
-      length = 1;
-    }
-    object = Object(object);
-    while (++index < length) {
-      var source = sources[index];
-      if (source) {
-        assigner(object, source, index, customizer);
-      }
-    }
-    return object;
-  });
-}
-
-/* harmony default export */ const _createAssigner = (createAssigner);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/merge.js
-
-
-
-/**
- * This method is like `_.assign` except that it recursively merges own and
- * inherited enumerable string keyed properties of source objects into the
- * destination object. Source properties that resolve to `undefined` are
- * skipped if a destination value exists. Array and plain object properties
- * are merged recursively. Other objects and value types are overridden by
- * assignment. Source objects are applied from left to right. Subsequent
- * sources overwrite property assignments of previous sources.
- *
- * **Note:** This method mutates `object`.
- *
- * @static
- * @memberOf _
- * @since 0.5.0
- * @category Object
- * @param {Object} object The destination object.
- * @param {...Object} [sources] The source objects.
- * @returns {Object} Returns `object`.
- * @example
- *
- * var object = {
- *   'a': [{ 'b': 2 }, { 'd': 4 }]
- * };
- *
- * var other = {
- *   'a': [{ 'c': 3 }, { 'e': 5 }]
- * };
- *
- * _.merge(object, other);
- * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }
- */
-var merge = _createAssigner(function(object, source, srcIndex) {
-  _baseMerge(object, source, srcIndex);
-});
-
-/* harmony default export */ const lodash_es_merge = (merge);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules
-var pick = __webpack_require__(61666);
-// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js
-var defaults = __webpack_require__(3688);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js
-var isSymbol = __webpack_require__(72714);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseExtremum.js
-
-
-/**
- * The base implementation of methods like `_.max` and `_.min` which accepts a
- * `comparator` to determine the extremum value.
- *
- * @private
- * @param {Array} array The array to iterate over.
- * @param {Function} iteratee The iteratee invoked per iteration.
- * @param {Function} comparator The comparator used to compare values.
- * @returns {*} Returns the extremum value.
- */
-function baseExtremum(array, iteratee, comparator) {
-  var index = -1,
-      length = array.length;
-
-  while (++index < length) {
-    var value = array[index],
-        current = iteratee(value);
-
-    if (current != null && (computed === undefined
-          ? (current === current && !(0,isSymbol/* default */.Z)(current))
-          : comparator(current, computed)
-        )) {
-      var computed = current,
-          result = value;
-    }
-  }
-  return result;
-}
-
-/* harmony default export */ const _baseExtremum = (baseExtremum);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGt.js
-/**
- * The base implementation of `_.gt` which doesn't coerce arguments.
- *
- * @private
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {boolean} Returns `true` if `value` is greater than `other`,
- *  else `false`.
- */
-function baseGt(value, other) {
-  return value > other;
-}
-
-/* harmony default export */ const _baseGt = (baseGt);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js
-var identity = __webpack_require__(69203);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/max.js
-
-
-
-
-/**
- * Computes the maximum value of `array`. If `array` is empty or falsey,
- * `undefined` is returned.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Math
- * @param {Array} array The array to iterate over.
- * @returns {*} Returns the maximum value.
- * @example
- *
- * _.max([4, 2, 8, 6]);
- * // => 8
- *
- * _.max([]);
- * // => undefined
- */
-function max(array) {
-  return (array && array.length)
-    ? _baseExtremum(array, identity/* default */.Z, _baseGt)
-    : undefined;
-}
-
-/* harmony default export */ const lodash_es_max = (max);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/last.js
-/**
- * Gets the last element of `array`.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Array
- * @param {Array} array The array to query.
- * @returns {*} Returns the last element of `array`.
- * @example
- *
- * _.last([1, 2, 3]);
- * // => 3
- */
-function last(array) {
-  var length = array == null ? 0 : array.length;
-  return length ? array[length - 1] : undefined;
-}
-
-/* harmony default export */ const lodash_es_last = (last);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js
-var _baseForOwn = __webpack_require__(2693);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules
-var _baseIteratee = __webpack_require__(74765);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/mapValues.js
-
-
-
-
-/**
- * Creates an object with the same keys as `object` and values generated
- * by running each own enumerable string keyed property of `object` thru
- * `iteratee`. The iteratee is invoked with three arguments:
- * (value, key, object).
- *
- * @static
- * @memberOf _
- * @since 2.4.0
- * @category Object
- * @param {Object} object The object to iterate over.
- * @param {Function} [iteratee=_.identity] The function invoked per iteration.
- * @returns {Object} Returns the new mapped object.
- * @see _.mapKeys
- * @example
- *
- * var users = {
- *   'fred':    { 'user': 'fred',    'age': 40 },
- *   'pebbles': { 'user': 'pebbles', 'age': 1 }
- * };
- *
- * _.mapValues(users, function(o) { return o.age; });
- * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
- *
- * // The `_.property` iteratee shorthand.
- * _.mapValues(users, 'age');
- * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)
- */
-function mapValues(object, iteratee) {
-  var result = {};
-  iteratee = (0,_baseIteratee/* default */.Z)(iteratee, 3);
-
-  (0,_baseForOwn/* default */.Z)(object, function(value, key, object) {
-    (0,_baseAssignValue/* default */.Z)(result, key, iteratee(value, key, object));
-  });
-  return result;
-}
-
-/* harmony default export */ const lodash_es_mapValues = (mapValues);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js
-var isUndefined = __webpack_require__(49360);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseLt.js
-/**
- * The base implementation of `_.lt` which doesn't coerce arguments.
- *
- * @private
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {boolean} Returns `true` if `value` is less than `other`,
- *  else `false`.
- */
-function baseLt(value, other) {
-  return value < other;
-}
-
-/* harmony default export */ const _baseLt = (baseLt);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/min.js
-
-
-
-
-/**
- * Computes the minimum value of `array`. If `array` is empty or falsey,
- * `undefined` is returned.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Math
- * @param {Array} array The array to iterate over.
- * @returns {*} Returns the minimum value.
- * @example
- *
- * _.min([4, 2, 8, 6]);
- * // => 2
- *
- * _.min([]);
- * // => undefined
- */
-function min(array) {
-  return (array && array.length)
-    ? _baseExtremum(array, identity/* default */.Z, _baseLt)
-    : undefined;
-}
-
-/* harmony default export */ const lodash_es_min = (min);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js
-var _root = __webpack_require__(66092);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/now.js
-
-
-/**
- * Gets the timestamp of the number of milliseconds that have elapsed since
- * the Unix epoch (1 January 1970 00:00:00 UTC).
- *
- * @static
- * @memberOf _
- * @since 2.4.0
- * @category Date
- * @returns {number} Returns the timestamp.
- * @example
- *
- * _.defer(function(stamp) {
- *   console.log(_.now() - stamp);
- * }, _.now());
- * // => Logs the number of milliseconds it took for the deferred invocation.
- */
-var now = function() {
-  return _root/* default.Date.now */.Z.Date.now();
-};
-
-/* harmony default export */ const lodash_es_now = (now);
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/util.js
-
-
-
-
-
-/*
- * Adds a dummy node to the graph and return v.
- */
-function addDummyNode(g, type, attrs, name) {
-  var v;
-  do {
-    v = uniqueId/* default */.Z(name);
-  } while (g.hasNode(v));
-
-  attrs.dummy = type;
-  g.setNode(v, attrs);
-  return v;
-}
-
-/*
- * Returns a new graph with only simple edges. Handles aggregation of data
- * associated with multi-edges.
- */
-function simplify(g) {
-  var simplified = new graphlib/* Graph */.k().setGraph(g.graph());
-  forEach/* default */.Z(g.nodes(), function (v) {
-    simplified.setNode(v, g.node(v));
-  });
-  forEach/* default */.Z(g.edges(), function (e) {
-    var simpleLabel = simplified.edge(e.v, e.w) || { weight: 0, minlen: 1 };
-    var label = g.edge(e);
-    simplified.setEdge(e.v, e.w, {
-      weight: simpleLabel.weight + label.weight,
-      minlen: Math.max(simpleLabel.minlen, label.minlen),
-    });
-  });
-  return simplified;
-}
-
-function asNonCompoundGraph(g) {
-  var simplified = new graphlib/* Graph */.k({ multigraph: g.isMultigraph() }).setGraph(g.graph());
-  forEach/* default */.Z(g.nodes(), function (v) {
-    if (!g.children(v).length) {
-      simplified.setNode(v, g.node(v));
-    }
-  });
-  forEach/* default */.Z(g.edges(), function (e) {
-    simplified.setEdge(e, g.edge(e));
-  });
-  return simplified;
-}
-
-function successorWeights(g) {
-  var weightMap = _.map(g.nodes(), function (v) {
-    var sucs = {};
-    _.forEach(g.outEdges(v), function (e) {
-      sucs[e.w] = (sucs[e.w] || 0) + g.edge(e).weight;
-    });
-    return sucs;
-  });
-  return _.zipObject(g.nodes(), weightMap);
-}
-
-function predecessorWeights(g) {
-  var weightMap = _.map(g.nodes(), function (v) {
-    var preds = {};
-    _.forEach(g.inEdges(v), function (e) {
-      preds[e.v] = (preds[e.v] || 0) + g.edge(e).weight;
-    });
-    return preds;
-  });
-  return _.zipObject(g.nodes(), weightMap);
-}
-
-/*
- * Finds where a line starting at point ({x, y}) would intersect a rectangle
- * ({x, y, width, height}) if it were pointing at the rectangle's center.
- */
-function intersectRect(rect, point) {
-  var x = rect.x;
-  var y = rect.y;
-
-  // Rectangle intersection algorithm from:
-  // http://math.stackexchange.com/questions/108113/find-edge-between-two-boxes
-  var dx = point.x - x;
-  var dy = point.y - y;
-  var w = rect.width / 2;
-  var h = rect.height / 2;
-
-  if (!dx && !dy) {
-    throw new Error('Not possible to find intersection inside of the rectangle');
-  }
-
-  var sx, sy;
-  if (Math.abs(dy) * w > Math.abs(dx) * h) {
-    // Intersection is top or bottom of rect.
-    if (dy < 0) {
-      h = -h;
-    }
-    sx = (h * dx) / dy;
-    sy = h;
-  } else {
-    // Intersection is left or right of rect.
-    if (dx < 0) {
-      w = -w;
-    }
-    sx = w;
-    sy = (w * dy) / dx;
-  }
-
-  return { x: x + sx, y: y + sy };
-}
-
-/*
- * Given a DAG with each node assigned "rank" and "order" properties, this
- * function will produce a matrix with the ids of each node.
- */
-function buildLayerMatrix(g) {
-  var layering = map/* default */.Z(range/* default */.Z(util_maxRank(g) + 1), function () {
-    return [];
-  });
-  forEach/* default */.Z(g.nodes(), function (v) {
-    var node = g.node(v);
-    var rank = node.rank;
-    if (!isUndefined/* default */.Z(rank)) {
-      layering[rank][node.order] = v;
-    }
-  });
-  return layering;
-}
-
-/*
- * Adjusts the ranks for all nodes in the graph such that all nodes v have
- * rank(v) >= 0 and at least one node w has rank(w) = 0.
- */
-function normalizeRanks(g) {
-  var min = lodash_es_min(
-    map/* default */.Z(g.nodes(), function (v) {
-      return g.node(v).rank;
-    })
-  );
-  forEach/* default */.Z(g.nodes(), function (v) {
-    var node = g.node(v);
-    if (has/* default */.Z(node, 'rank')) {
-      node.rank -= min;
-    }
-  });
-}
-
-function removeEmptyRanks(g) {
-  // Ranks may not start at 0, so we need to offset them
-  var offset = lodash_es_min(
-    map/* default */.Z(g.nodes(), function (v) {
-      return g.node(v).rank;
-    })
-  );
-
-  var layers = [];
-  forEach/* default */.Z(g.nodes(), function (v) {
-    var rank = g.node(v).rank - offset;
-    if (!layers[rank]) {
-      layers[rank] = [];
-    }
-    layers[rank].push(v);
-  });
-
-  var delta = 0;
-  var nodeRankFactor = g.graph().nodeRankFactor;
-  forEach/* default */.Z(layers, function (vs, i) {
-    if (isUndefined/* default */.Z(vs) && i % nodeRankFactor !== 0) {
-      --delta;
-    } else if (delta) {
-      forEach/* default */.Z(vs, function (v) {
-        g.node(v).rank += delta;
-      });
-    }
-  });
-}
-
-function addBorderNode(g, prefix, rank, order) {
-  var node = {
-    width: 0,
-    height: 0,
-  };
-  if (arguments.length >= 4) {
-    node.rank = rank;
-    node.order = order;
-  }
-  return addDummyNode(g, 'border', node, prefix);
-}
-
-function util_maxRank(g) {
-  return lodash_es_max(
-    map/* default */.Z(g.nodes(), function (v) {
-      var rank = g.node(v).rank;
-      if (!isUndefined/* default */.Z(rank)) {
-        return rank;
-      }
-    })
-  );
-}
-
-/*
- * Partition a collection into two groups: `lhs` and `rhs`. If the supplied
- * function returns true for an entry it goes into `lhs`. Otherwise it goes
- * into `rhs.
- */
-function partition(collection, fn) {
-  var result = { lhs: [], rhs: [] };
-  forEach/* default */.Z(collection, function (value) {
-    if (fn(value)) {
-      result.lhs.push(value);
-    } else {
-      result.rhs.push(value);
-    }
-  });
-  return result;
-}
-
-/*
- * Returns a new function that wraps `fn` with a timer. The wrapper logs the
- * time it takes to execute the function.
- */
-function util_time(name, fn) {
-  var start = lodash_es_now();
-  try {
-    return fn();
-  } finally {
-    console.log(name + ' time: ' + (lodash_es_now() - start) + 'ms');
-  }
-}
-
-function notime(name, fn) {
-  return fn();
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/add-border-segments.js
-
-
-
-
-
-function addBorderSegments(g) {
-  function dfs(v) {
-    var children = g.children(v);
-    var node = g.node(v);
-    if (children.length) {
-      forEach/* default */.Z(children, dfs);
-    }
-
-    if (has/* default */.Z(node, 'minRank')) {
-      node.borderLeft = [];
-      node.borderRight = [];
-      for (var rank = node.minRank, maxRank = node.maxRank + 1; rank < maxRank; ++rank) {
-        add_border_segments_addBorderNode(g, 'borderLeft', '_bl', v, node, rank);
-        add_border_segments_addBorderNode(g, 'borderRight', '_br', v, node, rank);
-      }
-    }
-  }
-
-  forEach/* default */.Z(g.children(), dfs);
-}
-
-function add_border_segments_addBorderNode(g, prop, prefix, sg, sgNode, rank) {
-  var label = { width: 0, height: 0, rank: rank, borderType: prop };
-  var prev = sgNode[prop][rank - 1];
-  var curr = addDummyNode(g, 'border', label, prefix);
-  sgNode[prop][rank] = curr;
-  g.setParent(curr, sg);
-  if (prev) {
-    g.setEdge(prev, curr, { weight: 1 });
-  }
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/coordinate-system.js
-
-
-
-
-function adjust(g) {
-  var rankDir = g.graph().rankdir.toLowerCase();
-  if (rankDir === 'lr' || rankDir === 'rl') {
-    swapWidthHeight(g);
-  }
-}
-
-function coordinate_system_undo(g) {
-  var rankDir = g.graph().rankdir.toLowerCase();
-  if (rankDir === 'bt' || rankDir === 'rl') {
-    reverseY(g);
-  }
-
-  if (rankDir === 'lr' || rankDir === 'rl') {
-    swapXY(g);
-    swapWidthHeight(g);
-  }
-}
-
-function swapWidthHeight(g) {
-  forEach/* default */.Z(g.nodes(), function (v) {
-    swapWidthHeightOne(g.node(v));
-  });
-  forEach/* default */.Z(g.edges(), function (e) {
-    swapWidthHeightOne(g.edge(e));
-  });
-}
-
-function swapWidthHeightOne(attrs) {
-  var w = attrs.width;
-  attrs.width = attrs.height;
-  attrs.height = w;
-}
-
-function reverseY(g) {
-  forEach/* default */.Z(g.nodes(), function (v) {
-    reverseYOne(g.node(v));
-  });
-
-  forEach/* default */.Z(g.edges(), function (e) {
-    var edge = g.edge(e);
-    forEach/* default */.Z(edge.points, reverseYOne);
-    if (has/* default */.Z(edge, 'y')) {
-      reverseYOne(edge);
-    }
-  });
-}
-
-function reverseYOne(attrs) {
-  attrs.y = -attrs.y;
-}
-
-function swapXY(g) {
-  forEach/* default */.Z(g.nodes(), function (v) {
-    swapXYOne(g.node(v));
-  });
-
-  forEach/* default */.Z(g.edges(), function (e) {
-    var edge = g.edge(e);
-    forEach/* default */.Z(edge.points, swapXYOne);
-    if (has/* default */.Z(edge, 'x')) {
-      swapXYOne(edge);
-    }
-  });
-}
-
-function swapXYOne(attrs) {
-  var x = attrs.x;
-  attrs.x = attrs.y;
-  attrs.y = x;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/normalize.js
-
-
-
-
-
-/*
- * Breaks any long edges in the graph into short segments that span 1 layer
- * each. This operation is undoable with the denormalize function.
- *
- * Pre-conditions:
- *
- *    1. The input graph is a DAG.
- *    2. Each node in the graph has a "rank" property.
- *
- * Post-condition:
- *
- *    1. All edges in the graph have a length of 1.
- *    2. Dummy nodes are added where edges have been split into segments.
- *    3. The graph is augmented with a "dummyChains" attribute which contains
- *       the first dummy in each chain of dummy nodes produced.
- */
-function normalize_run(g) {
-  g.graph().dummyChains = [];
-  forEach/* default */.Z(g.edges(), function (edge) {
-    normalizeEdge(g, edge);
-  });
-}
-
-function normalizeEdge(g, e) {
-  var v = e.v;
-  var vRank = g.node(v).rank;
-  var w = e.w;
-  var wRank = g.node(w).rank;
-  var name = e.name;
-  var edgeLabel = g.edge(e);
-  var labelRank = edgeLabel.labelRank;
-
-  if (wRank === vRank + 1) return;
-
-  g.removeEdge(e);
-
-  var dummy, attrs, i;
-  for (i = 0, ++vRank; vRank < wRank; ++i, ++vRank) {
-    edgeLabel.points = [];
-    attrs = {
-      width: 0,
-      height: 0,
-      edgeLabel: edgeLabel,
-      edgeObj: e,
-      rank: vRank,
-    };
-    dummy = addDummyNode(g, 'edge', attrs, '_d');
-    if (vRank === labelRank) {
-      attrs.width = edgeLabel.width;
-      attrs.height = edgeLabel.height;
-      // @ts-expect-error
-      attrs.dummy = 'edge-label';
-      // @ts-expect-error
-      attrs.labelpos = edgeLabel.labelpos;
-    }
-    g.setEdge(v, dummy, { weight: edgeLabel.weight }, name);
-    if (i === 0) {
-      g.graph().dummyChains.push(dummy);
-    }
-    v = dummy;
-  }
-
-  g.setEdge(v, w, { weight: edgeLabel.weight }, name);
-}
-
-function normalize_undo(g) {
-  forEach/* default */.Z(g.graph().dummyChains, function (v) {
-    var node = g.node(v);
-    var origLabel = node.edgeLabel;
-    var w;
-    g.setEdge(node.edgeObj, origLabel);
-    while (node.dummy) {
-      w = g.successors(v)[0];
-      g.removeNode(v);
-      origLabel.points.push({ x: node.x, y: node.y });
-      if (node.dummy === 'edge-label') {
-        origLabel.x = node.x;
-        origLabel.y = node.y;
-        origLabel.width = node.width;
-        origLabel.height = node.height;
-      }
-      v = w;
-      node = g.node(v);
-    }
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/minBy.js
-
-
-
-
-/**
- * This method is like `_.min` except that it accepts `iteratee` which is
- * invoked for each element in `array` to generate the criterion by which
- * the value is ranked. The iteratee is invoked with one argument: (value).
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Math
- * @param {Array} array The array to iterate over.
- * @param {Function} [iteratee=_.identity] The iteratee invoked per element.
- * @returns {*} Returns the minimum value.
- * @example
- *
- * var objects = [{ 'n': 1 }, { 'n': 2 }];
- *
- * _.minBy(objects, function(o) { return o.n; });
- * // => { 'n': 1 }
- *
- * // The `_.property` iteratee shorthand.
- * _.minBy(objects, 'n');
- * // => { 'n': 1 }
- */
-function minBy(array, iteratee) {
-  return (array && array.length)
-    ? _baseExtremum(array, (0,_baseIteratee/* default */.Z)(iteratee, 2), _baseLt)
-    : undefined;
-}
-
-/* harmony default export */ const lodash_es_minBy = (minBy);
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/util.js
-
-
-
-
-/*
- * Initializes ranks for the input graph using the longest path algorithm. This
- * algorithm scales well and is fast in practice, it yields rather poor
- * solutions. Nodes are pushed to the lowest layer possible, leaving the bottom
- * ranks wide and leaving edges longer than necessary. However, due to its
- * speed, this algorithm is good for getting an initial ranking that can be fed
- * into other algorithms.
- *
- * This algorithm does not normalize layers because it will be used by other
- * algorithms in most cases. If using this algorithm directly, be sure to
- * run normalize at the end.
- *
- * Pre-conditions:
- *
- *    1. Input graph is a DAG.
- *    2. Input graph node labels can be assigned properties.
- *
- * Post-conditions:
- *
- *    1. Each node will be assign an (unnormalized) "rank" property.
- */
-function longestPath(g) {
-  var visited = {};
-
-  function dfs(v) {
-    var label = g.node(v);
-    if (has/* default */.Z(visited, v)) {
-      return label.rank;
-    }
-    visited[v] = true;
-
-    var rank = lodash_es_min(
-      map/* default */.Z(g.outEdges(v), function (e) {
-        return dfs(e.w) - g.edge(e).minlen;
-      })
-    );
-
-    if (
-      rank === Number.POSITIVE_INFINITY || // return value of _.map([]) for Lodash 3
-      rank === undefined || // return value of _.map([]) for Lodash 4
-      rank === null
-    ) {
-      // return value of _.map([null])
-      rank = 0;
-    }
-
-    return (label.rank = rank);
-  }
-
-  forEach/* default */.Z(g.sources(), dfs);
-}
-
-/*
- * Returns the amount of slack for the given edge. The slack is defined as the
- * difference between the length of the edge and its minimum length.
- */
-function slack(g, e) {
-  return g.node(e.w).rank - g.node(e.v).rank - g.edge(e).minlen;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/feasible-tree.js
-
-
-
-
-
-
-/*
- * Constructs a spanning tree with tight edges and adjusted the input node's
- * ranks to achieve this. A tight edge is one that is has a length that matches
- * its "minlen" attribute.
- *
- * The basic structure for this function is derived from Gansner, et al., "A
- * Technique for Drawing Directed Graphs."
- *
- * Pre-conditions:
- *
- *    1. Graph must be a DAG.
- *    2. Graph must be connected.
- *    3. Graph must have at least one node.
- *    5. Graph nodes must have been previously assigned a "rank" property that
- *       respects the "minlen" property of incident edges.
- *    6. Graph edges must have a "minlen" property.
- *
- * Post-conditions:
- *
- *    - Graph nodes will have their rank adjusted to ensure that all edges are
- *      tight.
- *
- * Returns a tree (undirected graph) that is constructed using only "tight"
- * edges.
- */
-function feasibleTree(g) {
-  var t = new graphlib/* Graph */.k({ directed: false });
-
-  // Choose arbitrary node from which to start our tree
-  var start = g.nodes()[0];
-  var size = g.nodeCount();
-  t.setNode(start, {});
-
-  var edge, delta;
-  while (tightTree(t, g) < size) {
-    edge = findMinSlackEdge(t, g);
-    delta = t.hasNode(edge.v) ? slack(g, edge) : -slack(g, edge);
-    shiftRanks(t, g, delta);
-  }
-
-  return t;
-}
-
-/*
- * Finds a maximal tree of tight edges and returns the number of nodes in the
- * tree.
- */
-function tightTree(t, g) {
-  function dfs(v) {
-    forEach/* default */.Z(g.nodeEdges(v), function (e) {
-      var edgeV = e.v,
-        w = v === edgeV ? e.w : edgeV;
-      if (!t.hasNode(w) && !slack(g, e)) {
-        t.setNode(w, {});
-        t.setEdge(v, w, {});
-        dfs(w);
-      }
-    });
-  }
-
-  forEach/* default */.Z(t.nodes(), dfs);
-  return t.nodeCount();
-}
-
-/*
- * Finds the edge with the smallest slack that is incident on tree and returns
- * it.
- */
-function findMinSlackEdge(t, g) {
-  return lodash_es_minBy(g.edges(), function (e) {
-    if (t.hasNode(e.v) !== t.hasNode(e.w)) {
-      return slack(g, e);
-    }
-  });
-}
-
-function shiftRanks(t, g, delta) {
-  forEach/* default */.Z(t.nodes(), function (v) {
-    g.node(v).rank += delta;
-  });
-}
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js
-var isArrayLike = __webpack_require__(50585);
-// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js
-var keys = __webpack_require__(17179);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_createFind.js
-
-
-
-
-/**
- * Creates a `_.find` or `_.findLast` function.
- *
- * @private
- * @param {Function} findIndexFunc The function to find the collection index.
- * @returns {Function} Returns the new find function.
- */
-function createFind(findIndexFunc) {
-  return function(collection, predicate, fromIndex) {
-    var iterable = Object(collection);
-    if (!(0,isArrayLike/* default */.Z)(collection)) {
-      var iteratee = (0,_baseIteratee/* default */.Z)(predicate, 3);
-      collection = (0,keys/* default */.Z)(collection);
-      predicate = function(key) { return iteratee(iterable[key], key, iterable); };
-    }
-    var index = findIndexFunc(collection, predicate, fromIndex);
-    return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;
-  };
-}
-
-/* harmony default export */ const _createFind = (createFind);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js
-var _baseFindIndex = __webpack_require__(21692);
-// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules
-var toFinite = __webpack_require__(94099);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/toInteger.js
-
-
-/**
- * Converts `value` to an integer.
- *
- * **Note:** This method is loosely based on
- * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to convert.
- * @returns {number} Returns the converted integer.
- * @example
- *
- * _.toInteger(3.2);
- * // => 3
- *
- * _.toInteger(Number.MIN_VALUE);
- * // => 0
- *
- * _.toInteger(Infinity);
- * // => 1.7976931348623157e+308
- *
- * _.toInteger('3.2');
- * // => 3
- */
-function toInteger(value) {
-  var result = (0,toFinite/* default */.Z)(value),
-      remainder = result % 1;
-
-  return result === result ? (remainder ? result - remainder : result) : 0;
-}
-
-/* harmony default export */ const lodash_es_toInteger = (toInteger);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/findIndex.js
-
-
-
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeMax = Math.max;
-
-/**
- * This method is like `_.find` except that it returns the index of the first
- * element `predicate` returns truthy for instead of the element itself.
- *
- * @static
- * @memberOf _
- * @since 1.1.0
- * @category Array
- * @param {Array} array The array to inspect.
- * @param {Function} [predicate=_.identity] The function invoked per iteration.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {number} Returns the index of the found element, else `-1`.
- * @example
- *
- * var users = [
- *   { 'user': 'barney',  'active': false },
- *   { 'user': 'fred',    'active': false },
- *   { 'user': 'pebbles', 'active': true }
- * ];
- *
- * _.findIndex(users, function(o) { return o.user == 'barney'; });
- * // => 0
- *
- * // The `_.matches` iteratee shorthand.
- * _.findIndex(users, { 'user': 'fred', 'active': false });
- * // => 1
- *
- * // The `_.matchesProperty` iteratee shorthand.
- * _.findIndex(users, ['active', false]);
- * // => 0
- *
- * // The `_.property` iteratee shorthand.
- * _.findIndex(users, 'active');
- * // => 2
- */
-function findIndex(array, predicate, fromIndex) {
-  var length = array == null ? 0 : array.length;
-  if (!length) {
-    return -1;
-  }
-  var index = fromIndex == null ? 0 : lodash_es_toInteger(fromIndex);
-  if (index < 0) {
-    index = nativeMax(length + index, 0);
-  }
-  return (0,_baseFindIndex/* default */.Z)(array, (0,_baseIteratee/* default */.Z)(predicate, 3), index);
-}
-
-/* harmony default export */ const lodash_es_findIndex = (findIndex);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/find.js
-
-
-
-/**
- * Iterates over elements of `collection`, returning the first element
- * `predicate` returns truthy for. The predicate is invoked with three
- * arguments: (value, index|key, collection).
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to inspect.
- * @param {Function} [predicate=_.identity] The function invoked per iteration.
- * @param {number} [fromIndex=0] The index to search from.
- * @returns {*} Returns the matched element, else `undefined`.
- * @example
- *
- * var users = [
- *   { 'user': 'barney',  'age': 36, 'active': true },
- *   { 'user': 'fred',    'age': 40, 'active': false },
- *   { 'user': 'pebbles', 'age': 1,  'active': true }
- * ];
- *
- * _.find(users, function(o) { return o.age < 40; });
- * // => object for 'barney'
- *
- * // The `_.matches` iteratee shorthand.
- * _.find(users, { 'age': 1, 'active': true });
- * // => object for 'pebbles'
- *
- * // The `_.matchesProperty` iteratee shorthand.
- * _.find(users, ['active', false]);
- * // => object for 'fred'
- *
- * // The `_.property` iteratee shorthand.
- * _.find(users, 'active');
- * // => object for 'barney'
- */
-var find = _createFind(lodash_es_findIndex);
-
-/* harmony default export */ const lodash_es_find = (find);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules
-var filter = __webpack_require__(13445);
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra.js
-
-
-
-
-
-var DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1);
-
-function dijkstra_dijkstra(g, source, weightFn, edgeFn) {
-  return runDijkstra(
-    g,
-    String(source),
-    weightFn || DEFAULT_WEIGHT_FUNC,
-    edgeFn ||
-      function (v) {
-        return g.outEdges(v);
-      }
-  );
-}
-
-function runDijkstra(g, source, weightFn, edgeFn) {
-  var results = {};
-  var pq = new PriorityQueue();
-  var v, vEntry;
-
-  var updateNeighbors = function (edge) {
-    var w = edge.v !== v ? edge.v : edge.w;
-    var wEntry = results[w];
-    var weight = weightFn(edge);
-    var distance = vEntry.distance + weight;
-
-    if (weight < 0) {
-      throw new Error(
-        'dijkstra does not allow negative edge weights. ' +
-          'Bad edge: ' +
-          edge +
-          ' Weight: ' +
-          weight
-      );
-    }
-
-    if (distance < wEntry.distance) {
-      wEntry.distance = distance;
-      wEntry.predecessor = v;
-      pq.decrease(w, distance);
-    }
-  };
-
-  g.nodes().forEach(function (v) {
-    var distance = v === source ? 0 : Number.POSITIVE_INFINITY;
-    results[v] = { distance: distance };
-    pq.add(v, distance);
-  });
-
-  while (pq.size() > 0) {
-    v = pq.removeMin();
-    vEntry = results[v];
-    if (vEntry.distance === Number.POSITIVE_INFINITY) {
-      break;
-    }
-
-    edgeFn(v).forEach(updateNeighbors);
-  }
-
-  return results;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dijkstra-all.js
-
-
-
-
-
-function dijkstraAll(g, weightFunc, edgeFunc) {
-  return _.transform(
-    g.nodes(),
-    function (acc, v) {
-      acc[v] = dijkstra(g, v, weightFunc, edgeFunc);
-    },
-    {}
-  );
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/floyd-warshall.js
-
-
-
-
-var floyd_warshall_DEFAULT_WEIGHT_FUNC = constant/* default */.Z(1);
-
-function floydWarshall(g, weightFn, edgeFn) {
-  return runFloydWarshall(
-    g,
-    weightFn || floyd_warshall_DEFAULT_WEIGHT_FUNC,
-    edgeFn ||
-      function (v) {
-        return g.outEdges(v);
-      }
-  );
-}
-
-function runFloydWarshall(g, weightFn, edgeFn) {
-  var results = {};
-  var nodes = g.nodes();
-
-  nodes.forEach(function (v) {
-    results[v] = {};
-    results[v][v] = { distance: 0 };
-    nodes.forEach(function (w) {
-      if (v !== w) {
-        results[v][w] = { distance: Number.POSITIVE_INFINITY };
-      }
-    });
-    edgeFn(v).forEach(function (edge) {
-      var w = edge.v === v ? edge.w : edge.v;
-      var d = weightFn(edge);
-      results[v][w] = { distance: d, predecessor: v };
-    });
-  });
-
-  nodes.forEach(function (k) {
-    var rowK = results[k];
-    nodes.forEach(function (i) {
-      var rowI = results[i];
-      nodes.forEach(function (j) {
-        var ik = rowI[k];
-        var kj = rowK[j];
-        var ij = rowI[j];
-        var altDistance = ik.distance + kj.distance;
-        if (altDistance < ij.distance) {
-          ij.distance = altDistance;
-          ij.predecessor = kj.predecessor;
-        }
-      });
-    });
-  });
-
-  return results;
-}
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseKeys.js + 1 modules
-var _baseKeys = __webpack_require__(39473);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules
-var _getTag = __webpack_require__(83970);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules
-var _baseGetTag = __webpack_require__(93589);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js
-var isObjectLike = __webpack_require__(18533);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/isString.js
-
-
-
-
-/** `Object#toString` result references. */
-var stringTag = '[object String]';
-
-/**
- * Checks if `value` is classified as a `String` primitive or object.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a string, else `false`.
- * @example
- *
- * _.isString('abc');
- * // => true
- *
- * _.isString(1);
- * // => false
- */
-function isString(value) {
-  return typeof value == 'string' ||
-    (!(0,isArray/* default */.Z)(value) && (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == stringTag);
-}
-
-/* harmony default export */ const lodash_es_isString = (isString);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js
-var _baseProperty = __webpack_require__(54193);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_asciiSize.js
-
-
-/**
- * Gets the size of an ASCII `string`.
- *
- * @private
- * @param {string} string The string inspect.
- * @returns {number} Returns the string size.
- */
-var asciiSize = (0,_baseProperty/* default */.Z)('length');
-
-/* harmony default export */ const _asciiSize = (asciiSize);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_hasUnicode.js
-/** Used to compose unicode character classes. */
-var rsAstralRange = '\\ud800-\\udfff',
-    rsComboMarksRange = '\\u0300-\\u036f',
-    reComboHalfMarksRange = '\\ufe20-\\ufe2f',
-    rsComboSymbolsRange = '\\u20d0-\\u20ff',
-    rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,
-    rsVarRange = '\\ufe0e\\ufe0f';
-
-/** Used to compose unicode capture groups. */
-var rsZWJ = '\\u200d';
-
-/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */
-var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange  + rsComboRange + rsVarRange + ']');
-
-/**
- * Checks if `string` contains Unicode symbols.
- *
- * @private
- * @param {string} string The string to inspect.
- * @returns {boolean} Returns `true` if a symbol is found, else `false`.
- */
-function hasUnicode(string) {
-  return reHasUnicode.test(string);
-}
-
-/* harmony default export */ const _hasUnicode = (hasUnicode);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_unicodeSize.js
-/** Used to compose unicode character classes. */
-var _unicodeSize_rsAstralRange = '\\ud800-\\udfff',
-    _unicodeSize_rsComboMarksRange = '\\u0300-\\u036f',
-    _unicodeSize_reComboHalfMarksRange = '\\ufe20-\\ufe2f',
-    _unicodeSize_rsComboSymbolsRange = '\\u20d0-\\u20ff',
-    _unicodeSize_rsComboRange = _unicodeSize_rsComboMarksRange + _unicodeSize_reComboHalfMarksRange + _unicodeSize_rsComboSymbolsRange,
-    _unicodeSize_rsVarRange = '\\ufe0e\\ufe0f';
-
-/** Used to compose unicode capture groups. */
-var rsAstral = '[' + _unicodeSize_rsAstralRange + ']',
-    rsCombo = '[' + _unicodeSize_rsComboRange + ']',
-    rsFitz = '\\ud83c[\\udffb-\\udfff]',
-    rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
-    rsNonAstral = '[^' + _unicodeSize_rsAstralRange + ']',
-    rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
-    rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
-    _unicodeSize_rsZWJ = '\\u200d';
-
-/** Used to compose unicode regexes. */
-var reOptMod = rsModifier + '?',
-    rsOptVar = '[' + _unicodeSize_rsVarRange + ']?',
-    rsOptJoin = '(?:' + _unicodeSize_rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
-    rsSeq = rsOptVar + reOptMod + rsOptJoin,
-    rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';
-
-/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */
-var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');
-
-/**
- * Gets the size of a Unicode `string`.
- *
- * @private
- * @param {string} string The string inspect.
- * @returns {number} Returns the string size.
- */
-function unicodeSize(string) {
-  var result = reUnicode.lastIndex = 0;
-  while (reUnicode.test(string)) {
-    ++result;
-  }
-  return result;
-}
-
-/* harmony default export */ const _unicodeSize = (unicodeSize);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringSize.js
-
-
-
-
-/**
- * Gets the number of symbols in `string`.
- *
- * @private
- * @param {string} string The string to inspect.
- * @returns {number} Returns the string size.
- */
-function stringSize(string) {
-  return _hasUnicode(string)
-    ? _unicodeSize(string)
-    : _asciiSize(string);
-}
-
-/* harmony default export */ const _stringSize = (stringSize);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/size.js
-
-
-
-
-
-
-/** `Object#toString` result references. */
-var mapTag = '[object Map]',
-    setTag = '[object Set]';
-
-/**
- * Gets the size of `collection` by returning its length for array-like
- * values or the number of own enumerable string keyed properties for objects.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object|string} collection The collection to inspect.
- * @returns {number} Returns the collection size.
- * @example
- *
- * _.size([1, 2, 3]);
- * // => 3
- *
- * _.size({ 'a': 1, 'b': 2 });
- * // => 2
- *
- * _.size('pebbles');
- * // => 7
- */
-function size(collection) {
-  if (collection == null) {
-    return 0;
-  }
-  if ((0,isArrayLike/* default */.Z)(collection)) {
-    return lodash_es_isString(collection) ? _stringSize(collection) : collection.length;
-  }
-  var tag = (0,_getTag/* default */.Z)(collection);
-  if (tag == mapTag || tag == setTag) {
-    return collection.size;
-  }
-  return (0,_baseKeys/* default */.Z)(collection).length;
-}
-
-/* harmony default export */ const lodash_es_size = (size);
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/topsort.js
-
-
-
-
-topsort_topsort.CycleException = topsort_CycleException;
-
-function topsort_topsort(g) {
-  var visited = {};
-  var stack = {};
-  var results = [];
-
-  function visit(node) {
-    if (has/* default */.Z(stack, node)) {
-      throw new topsort_CycleException();
-    }
-
-    if (!has/* default */.Z(visited, node)) {
-      stack[node] = true;
-      visited[node] = true;
-      forEach/* default */.Z(g.predecessors(node), visit);
-      delete stack[node];
-      results.push(node);
-    }
-  }
-
-  forEach/* default */.Z(g.sinks(), visit);
-
-  if (lodash_es_size(visited) !== g.nodeCount()) {
-    throw new topsort_CycleException();
-  }
-
-  return results;
-}
-
-function topsort_CycleException() {}
-topsort_CycleException.prototype = new Error(); // must be an instance of Error to pass testing
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/is-acyclic.js
-
-
-
-
-function isAcyclic(g) {
-  try {
-    topsort(g);
-  } catch (e) {
-    if (e instanceof CycleException) {
-      return false;
-    }
-    throw e;
-  }
-  return true;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/dfs.js
-
-
-
-
-/*
- * A helper that preforms a pre- or post-order traversal on the input graph
- * and returns the nodes in the order they were visited. If the graph is
- * undirected then this algorithm will navigate using neighbors. If the graph
- * is directed then this algorithm will navigate using successors.
- *
- * Order must be one of "pre" or "post".
- */
-function dfs(g, vs, order) {
-  if (!isArray/* default */.Z(vs)) {
-    vs = [vs];
-  }
-
-  var navigation = (g.isDirected() ? g.successors : g.neighbors).bind(g);
-
-  var acc = [];
-  var visited = {};
-  forEach/* default */.Z(vs, function (v) {
-    if (!g.hasNode(v)) {
-      throw new Error('Graph does not have node: ' + v);
-    }
-
-    doDfs(g, v, order === 'post', visited, navigation, acc);
-  });
-  return acc;
-}
-
-function doDfs(g, v, postorder, visited, navigation, acc) {
-  if (!has/* default */.Z(visited, v)) {
-    visited[v] = true;
-
-    if (!postorder) {
-      acc.push(v);
-    }
-    forEach/* default */.Z(navigation(v), function (w) {
-      doDfs(g, w, postorder, visited, navigation, acc);
-    });
-    if (postorder) {
-      acc.push(v);
-    }
-  }
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/postorder.js
-
-
-
-
-function postorder(g, vs) {
-  return dfs(g, vs, 'post');
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/preorder.js
-
-
-
-
-function preorder(g, vs) {
-  return dfs(g, vs, 'pre');
-}
-
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules
-var graph = __webpack_require__(52544);
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/prim.js
-
-
-
-
-
-
-function prim(g, weightFunc) {
-  var result = new Graph();
-  var parents = {};
-  var pq = new PriorityQueue();
-  var v;
-
-  function updateNeighbors(edge) {
-    var w = edge.v === v ? edge.w : edge.v;
-    var pri = pq.priority(w);
-    if (pri !== undefined) {
-      var edgeWeight = weightFunc(edge);
-      if (edgeWeight < pri) {
-        parents[w] = v;
-        pq.decrease(w, edgeWeight);
-      }
-    }
-  }
-
-  if (g.nodeCount() === 0) {
-    return result;
-  }
-
-  _.each(g.nodes(), function (v) {
-    pq.add(v, Number.POSITIVE_INFINITY);
-    result.setNode(v);
-  });
-
-  // Start from an arbitrary node
-  pq.decrease(g.nodes()[0], 0);
-
-  var init = false;
-  while (pq.size() > 0) {
-    v = pq.removeMin();
-    if (_.has(parents, v)) {
-      result.setEdge(v, parents[v]);
-    } else if (init) {
-      throw new Error('Input graph is not connected: ' + g);
-    } else {
-      init = true;
-    }
-
-    g.nodeEdges(v).forEach(updateNeighbors);
-  }
-
-  return result;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/alg/index.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/network-simplex.js
-
-
-
-
-
-
-
-
-// Expose some internals for testing purposes
-networkSimplex.initLowLimValues = initLowLimValues;
-networkSimplex.initCutValues = initCutValues;
-networkSimplex.calcCutValue = calcCutValue;
-networkSimplex.leaveEdge = leaveEdge;
-networkSimplex.enterEdge = enterEdge;
-networkSimplex.exchangeEdges = exchangeEdges;
-
-/*
- * The network simplex algorithm assigns ranks to each node in the input graph
- * and iteratively improves the ranking to reduce the length of edges.
- *
- * Preconditions:
- *
- *    1. The input graph must be a DAG.
- *    2. All nodes in the graph must have an object value.
- *    3. All edges in the graph must have "minlen" and "weight" attributes.
- *
- * Postconditions:
- *
- *    1. All nodes in the graph will have an assigned "rank" attribute that has
- *       been optimized by the network simplex algorithm. Ranks start at 0.
- *
- *
- * A rough sketch of the algorithm is as follows:
- *
- *    1. Assign initial ranks to each node. We use the longest path algorithm,
- *       which assigns ranks to the lowest position possible. In general this
- *       leads to very wide bottom ranks and unnecessarily long edges.
- *    2. Construct a feasible tight tree. A tight tree is one such that all
- *       edges in the tree have no slack (difference between length of edge
- *       and minlen for the edge). This by itself greatly improves the assigned
- *       rankings by shorting edges.
- *    3. Iteratively find edges that have negative cut values. Generally a
- *       negative cut value indicates that the edge could be removed and a new
- *       tree edge could be added to produce a more compact graph.
- *
- * Much of the algorithms here are derived from Gansner, et al., "A Technique
- * for Drawing Directed Graphs." The structure of the file roughly follows the
- * structure of the overall algorithm.
- */
-function networkSimplex(g) {
-  g = simplify(g);
-  longestPath(g);
-  var t = feasibleTree(g);
-  initLowLimValues(t);
-  initCutValues(t, g);
-
-  var e, f;
-  while ((e = leaveEdge(t))) {
-    f = enterEdge(t, g, e);
-    exchangeEdges(t, g, e, f);
-  }
-}
-
-/*
- * Initializes cut values for all edges in the tree.
- */
-function initCutValues(t, g) {
-  var vs = postorder(t, t.nodes());
-  vs = vs.slice(0, vs.length - 1);
-  forEach/* default */.Z(vs, function (v) {
-    assignCutValue(t, g, v);
-  });
-}
-
-function assignCutValue(t, g, child) {
-  var childLab = t.node(child);
-  var parent = childLab.parent;
-  t.edge(child, parent).cutvalue = calcCutValue(t, g, child);
-}
-
-/*
- * Given the tight tree, its graph, and a child in the graph calculate and
- * return the cut value for the edge between the child and its parent.
- */
-function calcCutValue(t, g, child) {
-  var childLab = t.node(child);
-  var parent = childLab.parent;
-  // True if the child is on the tail end of the edge in the directed graph
-  var childIsTail = true;
-  // The graph's view of the tree edge we're inspecting
-  var graphEdge = g.edge(child, parent);
-  // The accumulated cut value for the edge between this node and its parent
-  var cutValue = 0;
-
-  if (!graphEdge) {
-    childIsTail = false;
-    graphEdge = g.edge(parent, child);
-  }
-
-  cutValue = graphEdge.weight;
-
-  forEach/* default */.Z(g.nodeEdges(child), function (e) {
-    var isOutEdge = e.v === child,
-      other = isOutEdge ? e.w : e.v;
-
-    if (other !== parent) {
-      var pointsToHead = isOutEdge === childIsTail,
-        otherWeight = g.edge(e).weight;
-
-      cutValue += pointsToHead ? otherWeight : -otherWeight;
-      if (isTreeEdge(t, child, other)) {
-        var otherCutValue = t.edge(child, other).cutvalue;
-        cutValue += pointsToHead ? -otherCutValue : otherCutValue;
-      }
-    }
-  });
-
-  return cutValue;
-}
-
-function initLowLimValues(tree, root) {
-  if (arguments.length < 2) {
-    root = tree.nodes()[0];
-  }
-  dfsAssignLowLim(tree, {}, 1, root);
-}
-
-function dfsAssignLowLim(tree, visited, nextLim, v, parent) {
-  var low = nextLim;
-  var label = tree.node(v);
-
-  visited[v] = true;
-  forEach/* default */.Z(tree.neighbors(v), function (w) {
-    if (!has/* default */.Z(visited, w)) {
-      nextLim = dfsAssignLowLim(tree, visited, nextLim, w, v);
-    }
-  });
-
-  label.low = low;
-  label.lim = nextLim++;
-  if (parent) {
-    label.parent = parent;
-  } else {
-    // TODO should be able to remove this when we incrementally update low lim
-    delete label.parent;
-  }
-
-  return nextLim;
-}
-
-function leaveEdge(tree) {
-  return lodash_es_find(tree.edges(), function (e) {
-    return tree.edge(e).cutvalue < 0;
-  });
-}
-
-function enterEdge(t, g, edge) {
-  var v = edge.v;
-  var w = edge.w;
-
-  // For the rest of this function we assume that v is the tail and w is the
-  // head, so if we don't have this edge in the graph we should flip it to
-  // match the correct orientation.
-  if (!g.hasEdge(v, w)) {
-    v = edge.w;
-    w = edge.v;
-  }
-
-  var vLabel = t.node(v);
-  var wLabel = t.node(w);
-  var tailLabel = vLabel;
-  var flip = false;
-
-  // If the root is in the tail of the edge then we need to flip the logic that
-  // checks for the head and tail nodes in the candidates function below.
-  if (vLabel.lim > wLabel.lim) {
-    tailLabel = wLabel;
-    flip = true;
-  }
-
-  var candidates = filter/* default */.Z(g.edges(), function (edge) {
-    return (
-      flip === isDescendant(t, t.node(edge.v), tailLabel) &&
-      flip !== isDescendant(t, t.node(edge.w), tailLabel)
-    );
-  });
-
-  return lodash_es_minBy(candidates, function (edge) {
-    return slack(g, edge);
-  });
-}
-
-function exchangeEdges(t, g, e, f) {
-  var v = e.v;
-  var w = e.w;
-  t.removeEdge(v, w);
-  t.setEdge(f.v, f.w, {});
-  initLowLimValues(t);
-  initCutValues(t, g);
-  updateRanks(t, g);
-}
-
-function updateRanks(t, g) {
-  var root = lodash_es_find(t.nodes(), function (v) {
-    return !g.node(v).parent;
-  });
-  var vs = preorder(t, root);
-  vs = vs.slice(1);
-  forEach/* default */.Z(vs, function (v) {
-    var parent = t.node(v).parent,
-      edge = g.edge(v, parent),
-      flipped = false;
-
-    if (!edge) {
-      edge = g.edge(parent, v);
-      flipped = true;
-    }
-
-    g.node(v).rank = g.node(parent).rank + (flipped ? edge.minlen : -edge.minlen);
-  });
-}
-
-/*
- * Returns true if the edge is in the tree.
- */
-function isTreeEdge(tree, u, v) {
-  return tree.hasEdge(u, v);
-}
-
-/*
- * Returns true if the specified node is descendant of the root node per the
- * assigned low and lim attributes in the tree.
- */
-function isDescendant(tree, vLabel, rootLabel) {
-  return rootLabel.low <= vLabel.lim && vLabel.lim <= rootLabel.lim;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/rank/index.js
-
-
-
-
-
-
-/*
- * Assigns a rank to each node in the input graph that respects the "minlen"
- * constraint specified on edges between nodes.
- *
- * This basic structure is derived from Gansner, et al., "A Technique for
- * Drawing Directed Graphs."
- *
- * Pre-conditions:
- *
- *    1. Graph must be a connected DAG
- *    2. Graph nodes must be objects
- *    3. Graph edges must have "weight" and "minlen" attributes
- *
- * Post-conditions:
- *
- *    1. Graph nodes will have a "rank" attribute based on the results of the
- *       algorithm. Ranks can start at any index (including negative), we'll
- *       fix them up later.
- */
-function rank(g) {
-  switch (g.graph().ranker) {
-    case 'network-simplex':
-      networkSimplexRanker(g);
-      break;
-    case 'tight-tree':
-      tightTreeRanker(g);
-      break;
-    case 'longest-path':
-      longestPathRanker(g);
-      break;
-    default:
-      networkSimplexRanker(g);
-  }
-}
-
-// A fast and simple ranker, but results are far from optimal.
-var longestPathRanker = longestPath;
-
-function tightTreeRanker(g) {
-  longestPath(g);
-  feasibleTree(g);
-}
-
-function networkSimplexRanker(g) {
-  networkSimplex(g);
-}
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules
-var values = __webpack_require__(34148);
-// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules
-var reduce = __webpack_require__(92344);
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/nesting-graph.js
-
-
-
-
-
-/*
- * A nesting graph creates dummy nodes for the tops and bottoms of subgraphs,
- * adds appropriate edges to ensure that all cluster nodes are placed between
- * these boundries, and ensures that the graph is connected.
- *
- * In addition we ensure, through the use of the minlen property, that nodes
- * and subgraph border nodes to not end up on the same rank.
- *
- * Preconditions:
- *
- *    1. Input graph is a DAG
- *    2. Nodes in the input graph has a minlen attribute
- *
- * Postconditions:
- *
- *    1. Input graph is connected.
- *    2. Dummy nodes are added for the tops and bottoms of subgraphs.
- *    3. The minlen attribute for nodes is adjusted to ensure nodes do not
- *       get placed on the same rank as subgraph border nodes.
- *
- * The nesting graph idea comes from Sander, "Layout of Compound Directed
- * Graphs."
- */
-function nesting_graph_run(g) {
-  var root = addDummyNode(g, 'root', {}, '_root');
-  var depths = treeDepths(g);
-  var height = lodash_es_max(values/* default */.Z(depths)) - 1; // Note: depths is an Object not an array
-  var nodeSep = 2 * height + 1;
-
-  g.graph().nestingRoot = root;
-
-  // Multiply minlen by nodeSep to align nodes on non-border ranks.
-  forEach/* default */.Z(g.edges(), function (e) {
-    g.edge(e).minlen *= nodeSep;
-  });
-
-  // Calculate a weight that is sufficient to keep subgraphs vertically compact
-  var weight = sumWeights(g) + 1;
-
-  // Create border nodes and link them up
-  forEach/* default */.Z(g.children(), function (child) {
-    nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child);
-  });
-
-  // Save the multiplier for node layers for later removal of empty border
-  // layers.
-  g.graph().nodeRankFactor = nodeSep;
-}
-
-function nesting_graph_dfs(g, root, nodeSep, weight, height, depths, v) {
-  var children = g.children(v);
-  if (!children.length) {
-    if (v !== root) {
-      g.setEdge(root, v, { weight: 0, minlen: nodeSep });
-    }
-    return;
-  }
-
-  var top = addBorderNode(g, '_bt');
-  var bottom = addBorderNode(g, '_bb');
-  var label = g.node(v);
-
-  g.setParent(top, v);
-  label.borderTop = top;
-  g.setParent(bottom, v);
-  label.borderBottom = bottom;
-
-  forEach/* default */.Z(children, function (child) {
-    nesting_graph_dfs(g, root, nodeSep, weight, height, depths, child);
-
-    var childNode = g.node(child);
-    var childTop = childNode.borderTop ? childNode.borderTop : child;
-    var childBottom = childNode.borderBottom ? childNode.borderBottom : child;
-    var thisWeight = childNode.borderTop ? weight : 2 * weight;
-    var minlen = childTop !== childBottom ? 1 : height - depths[v] + 1;
-
-    g.setEdge(top, childTop, {
-      weight: thisWeight,
-      minlen: minlen,
-      nestingEdge: true,
-    });
-
-    g.setEdge(childBottom, bottom, {
-      weight: thisWeight,
-      minlen: minlen,
-      nestingEdge: true,
-    });
-  });
-
-  if (!g.parent(v)) {
-    g.setEdge(root, top, { weight: 0, minlen: height + depths[v] });
-  }
-}
-
-function treeDepths(g) {
-  var depths = {};
-  function dfs(v, depth) {
-    var children = g.children(v);
-    if (children && children.length) {
-      forEach/* default */.Z(children, function (child) {
-        dfs(child, depth + 1);
-      });
-    }
-    depths[v] = depth;
-  }
-  forEach/* default */.Z(g.children(), function (v) {
-    dfs(v, 1);
-  });
-  return depths;
-}
-
-function sumWeights(g) {
-  return reduce/* default */.Z(
-    g.edges(),
-    function (acc, e) {
-      return acc + g.edge(e).weight;
-    },
-    0
-  );
-}
-
-function cleanup(g) {
-  var graphLabel = g.graph();
-  g.removeNode(graphLabel.nestingRoot);
-  delete graphLabel.nestingRoot;
-  forEach/* default */.Z(g.edges(), function (e) {
-    var edge = g.edge(e);
-    if (edge.nestingEdge) {
-      g.removeEdge(e);
-    }
-  });
-}
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules
-var _baseClone = __webpack_require__(48451);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/cloneDeep.js
-
-
-/** Used to compose bitmasks for cloning. */
-var CLONE_DEEP_FLAG = 1,
-    CLONE_SYMBOLS_FLAG = 4;
-
-/**
- * This method is like `_.clone` except that it recursively clones `value`.
- *
- * @static
- * @memberOf _
- * @since 1.0.0
- * @category Lang
- * @param {*} value The value to recursively clone.
- * @returns {*} Returns the deep cloned value.
- * @see _.clone
- * @example
- *
- * var objects = [{ 'a': 1 }, { 'b': 2 }];
- *
- * var deep = _.cloneDeep(objects);
- * console.log(deep[0] === objects[0]);
- * // => false
- */
-function cloneDeep(value) {
-  return (0,_baseClone/* default */.Z)(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
-}
-
-/* harmony default export */ const lodash_es_cloneDeep = (cloneDeep);
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/add-subgraph-constraints.js
-
-
-
-
-function addSubgraphConstraints(g, cg, vs) {
-  var prev = {},
-    rootPrev;
-
-  forEach/* default */.Z(vs, function (v) {
-    var child = g.parent(v),
-      parent,
-      prevChild;
-    while (child) {
-      parent = g.parent(child);
-      if (parent) {
-        prevChild = prev[parent];
-        prev[parent] = child;
-      } else {
-        prevChild = rootPrev;
-        rootPrev = child;
-      }
-      if (prevChild && prevChild !== child) {
-        cg.setEdge(prevChild, child);
-        return;
-      }
-      child = parent;
-    }
-  });
-
-  /*
-  function dfs(v) {
-    var children = v ? g.children(v) : g.children();
-    if (children.length) {
-      var min = Number.POSITIVE_INFINITY,
-          subgraphs = [];
-      _.each(children, function(child) {
-        var childMin = dfs(child);
-        if (g.children(child).length) {
-          subgraphs.push({ v: child, order: childMin });
-        }
-        min = Math.min(min, childMin);
-      });
-      _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) {
-        cg.setEdge(prev.v, curr.v);
-        return curr;
-      });
-      return min;
-    }
-    return g.node(v).order;
-  }
-  dfs(undefined);
-  */
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/build-layer-graph.js
-
-
-
-
-
-/*
- * Constructs a graph that can be used to sort a layer of nodes. The graph will
- * contain all base and subgraph nodes from the request layer in their original
- * hierarchy and any edges that are incident on these nodes and are of the type
- * requested by the "relationship" parameter.
- *
- * Nodes from the requested rank that do not have parents are assigned a root
- * node in the output graph, which is set in the root graph attribute. This
- * makes it easy to walk the hierarchy of movable nodes during ordering.
- *
- * Pre-conditions:
- *
- *    1. Input graph is a DAG
- *    2. Base nodes in the input graph have a rank attribute
- *    3. Subgraph nodes in the input graph has minRank and maxRank attributes
- *    4. Edges have an assigned weight
- *
- * Post-conditions:
- *
- *    1. Output graph has all nodes in the movable rank with preserved
- *       hierarchy.
- *    2. Root nodes in the movable layer are made children of the node
- *       indicated by the root attribute of the graph.
- *    3. Non-movable nodes incident on movable nodes, selected by the
- *       relationship parameter, are included in the graph (without hierarchy).
- *    4. Edges incident on movable nodes, selected by the relationship
- *       parameter, are added to the output graph.
- *    5. The weights for copied edges are aggregated as need, since the output
- *       graph is not a multi-graph.
- */
-function buildLayerGraph(g, rank, relationship) {
-  var root = createRootNode(g),
-    result = new graphlib/* Graph */.k({ compound: true })
-      .setGraph({ root: root })
-      .setDefaultNodeLabel(function (v) {
-        return g.node(v);
-      });
-
-  forEach/* default */.Z(g.nodes(), function (v) {
-    var node = g.node(v),
-      parent = g.parent(v);
-
-    if (node.rank === rank || (node.minRank <= rank && rank <= node.maxRank)) {
-      result.setNode(v);
-      result.setParent(v, parent || root);
-
-      // This assumes we have only short edges!
-      forEach/* default */.Z(g[relationship](v), function (e) {
-        var u = e.v === v ? e.w : e.v,
-          edge = result.edge(u, v),
-          weight = !isUndefined/* default */.Z(edge) ? edge.weight : 0;
-        result.setEdge(u, v, { weight: g.edge(e).weight + weight });
-      });
-
-      if (has/* default */.Z(node, 'minRank')) {
-        result.setNode(v, {
-          borderLeft: node.borderLeft[rank],
-          borderRight: node.borderRight[rank],
-        });
-      }
-    }
-  });
-
-  return result;
-}
-
-function createRootNode(g) {
-  var v;
-  while (g.hasNode((v = uniqueId/* default */.Z('_root'))));
-  return v;
-}
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js
-var _assignValue = __webpack_require__(72954);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseZipObject.js
-/**
- * This base implementation of `_.zipObject` which assigns values using `assignFunc`.
- *
- * @private
- * @param {Array} props The property identifiers.
- * @param {Array} values The property values.
- * @param {Function} assignFunc The function to assign values.
- * @returns {Object} Returns the new object.
- */
-function baseZipObject(props, values, assignFunc) {
-  var index = -1,
-      length = props.length,
-      valsLength = values.length,
-      result = {};
-
-  while (++index < length) {
-    var value = index < valsLength ? values[index] : undefined;
-    assignFunc(result, props[index], value);
-  }
-  return result;
-}
-
-/* harmony default export */ const _baseZipObject = (baseZipObject);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/zipObject.js
-
-
-
-/**
- * This method is like `_.fromPairs` except that it accepts two arrays,
- * one of property identifiers and one of corresponding values.
- *
- * @static
- * @memberOf _
- * @since 0.4.0
- * @category Array
- * @param {Array} [props=[]] The property identifiers.
- * @param {Array} [values=[]] The property values.
- * @returns {Object} Returns the new object.
- * @example
- *
- * _.zipObject(['a', 'b'], [1, 2]);
- * // => { 'a': 1, 'b': 2 }
- */
-function zipObject(props, values) {
-  return _baseZipObject(props || [], values || [], _assignValue/* default */.Z);
-}
-
-/* harmony default export */ const lodash_es_zipObject = (zipObject);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules
-var _baseFlatten = __webpack_require__(10626);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js
-var _arrayMap = __webpack_require__(74073);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js
-var _baseGet = __webpack_require__(13317);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseMap.js
-var _baseMap = __webpack_require__(21018);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSortBy.js
-/**
- * The base implementation of `_.sortBy` which uses `comparer` to define the
- * sort order of `array` and replaces criteria objects with their corresponding
- * values.
- *
- * @private
- * @param {Array} array The array to sort.
- * @param {Function} comparer The function to define sort order.
- * @returns {Array} Returns `array`.
- */
-function baseSortBy(array, comparer) {
-  var length = array.length;
-
-  array.sort(comparer);
-  while (length--) {
-    array[length] = array[length].value;
-  }
-  return array;
-}
-
-/* harmony default export */ const _baseSortBy = (baseSortBy);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js
-var _baseUnary = __webpack_require__(21162);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareAscending.js
-
-
-/**
- * Compares values to sort them in ascending order.
- *
- * @private
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {number} Returns the sort order indicator for `value`.
- */
-function compareAscending(value, other) {
-  if (value !== other) {
-    var valIsDefined = value !== undefined,
-        valIsNull = value === null,
-        valIsReflexive = value === value,
-        valIsSymbol = (0,isSymbol/* default */.Z)(value);
-
-    var othIsDefined = other !== undefined,
-        othIsNull = other === null,
-        othIsReflexive = other === other,
-        othIsSymbol = (0,isSymbol/* default */.Z)(other);
-
-    if ((!othIsNull && !othIsSymbol && !valIsSymbol && value > other) ||
-        (valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol) ||
-        (valIsNull && othIsDefined && othIsReflexive) ||
-        (!valIsDefined && othIsReflexive) ||
-        !valIsReflexive) {
-      return 1;
-    }
-    if ((!valIsNull && !valIsSymbol && !othIsSymbol && value < other) ||
-        (othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol) ||
-        (othIsNull && valIsDefined && valIsReflexive) ||
-        (!othIsDefined && valIsReflexive) ||
-        !othIsReflexive) {
-      return -1;
-    }
-  }
-  return 0;
-}
-
-/* harmony default export */ const _compareAscending = (compareAscending);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_compareMultiple.js
-
-
-/**
- * Used by `_.orderBy` to compare multiple properties of a value to another
- * and stable sort them.
- *
- * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,
- * specify an order of "desc" for descending or "asc" for ascending sort order
- * of corresponding values.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {boolean[]|string[]} orders The order to sort by for each property.
- * @returns {number} Returns the sort order indicator for `object`.
- */
-function compareMultiple(object, other, orders) {
-  var index = -1,
-      objCriteria = object.criteria,
-      othCriteria = other.criteria,
-      length = objCriteria.length,
-      ordersLength = orders.length;
-
-  while (++index < length) {
-    var result = _compareAscending(objCriteria[index], othCriteria[index]);
-    if (result) {
-      if (index >= ordersLength) {
-        return result;
-      }
-      var order = orders[index];
-      return result * (order == 'desc' ? -1 : 1);
-    }
-  }
-  // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications
-  // that causes it, under certain circumstances, to provide the same value for
-  // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247
-  // for more details.
-  //
-  // This also ensures a stable sort in V8 and other engines.
-  // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.
-  return object.index - other.index;
-}
-
-/* harmony default export */ const _compareMultiple = (compareMultiple);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseOrderBy.js
-
-
-
-
-
-
-
-
-
-
-/**
- * The base implementation of `_.orderBy` without param guards.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.
- * @param {string[]} orders The sort orders of `iteratees`.
- * @returns {Array} Returns the new sorted array.
- */
-function baseOrderBy(collection, iteratees, orders) {
-  if (iteratees.length) {
-    iteratees = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) {
-      if ((0,isArray/* default */.Z)(iteratee)) {
-        return function(value) {
-          return (0,_baseGet/* default */.Z)(value, iteratee.length === 1 ? iteratee[0] : iteratee);
-        }
-      }
-      return iteratee;
-    });
-  } else {
-    iteratees = [identity/* default */.Z];
-  }
-
-  var index = -1;
-  iteratees = (0,_arrayMap/* default */.Z)(iteratees, (0,_baseUnary/* default */.Z)(_baseIteratee/* default */.Z));
-
-  var result = (0,_baseMap/* default */.Z)(collection, function(value, key, collection) {
-    var criteria = (0,_arrayMap/* default */.Z)(iteratees, function(iteratee) {
-      return iteratee(value);
-    });
-    return { 'criteria': criteria, 'index': ++index, 'value': value };
-  });
-
-  return _baseSortBy(result, function(object, other) {
-    return _compareMultiple(object, other, orders);
-  });
-}
-
-/* harmony default export */ const _baseOrderBy = (baseOrderBy);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/sortBy.js
-
-
-
-
-
-/**
- * Creates an array of elements, sorted in ascending order by the results of
- * running each element in a collection thru each iteratee. This method
- * performs a stable sort, that is, it preserves the original sort order of
- * equal elements. The iteratees are invoked with one argument: (value).
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {...(Function|Function[])} [iteratees=[_.identity]]
- *  The iteratees to sort by.
- * @returns {Array} Returns the new sorted array.
- * @example
- *
- * var users = [
- *   { 'user': 'fred',   'age': 48 },
- *   { 'user': 'barney', 'age': 36 },
- *   { 'user': 'fred',   'age': 30 },
- *   { 'user': 'barney', 'age': 34 }
- * ];
- *
- * _.sortBy(users, [function(o) { return o.user; }]);
- * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 30]]
- *
- * _.sortBy(users, ['user', 'age']);
- * // => objects for [['barney', 34], ['barney', 36], ['fred', 30], ['fred', 48]]
- */
-var sortBy = (0,_baseRest/* default */.Z)(function(collection, iteratees) {
-  if (collection == null) {
-    return [];
-  }
-  var length = iteratees.length;
-  if (length > 1 && (0,_isIterateeCall/* default */.Z)(collection, iteratees[0], iteratees[1])) {
-    iteratees = [];
-  } else if (length > 2 && (0,_isIterateeCall/* default */.Z)(iteratees[0], iteratees[1], iteratees[2])) {
-    iteratees = [iteratees[0]];
-  }
-  return _baseOrderBy(collection, (0,_baseFlatten/* default */.Z)(iteratees, 1), []);
-});
-
-/* harmony default export */ const lodash_es_sortBy = (sortBy);
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/cross-count.js
-
-
-
-
-/*
- * A function that takes a layering (an array of layers, each with an array of
- * ordererd nodes) and a graph and returns a weighted crossing count.
- *
- * Pre-conditions:
- *
- *    1. Input graph must be simple (not a multigraph), directed, and include
- *       only simple edges.
- *    2. Edges in the input graph must have assigned weights.
- *
- * Post-conditions:
- *
- *    1. The graph and layering matrix are left unchanged.
- *
- * This algorithm is derived from Barth, et al., "Bilayer Cross Counting."
- */
-function crossCount(g, layering) {
-  var cc = 0;
-  for (var i = 1; i < layering.length; ++i) {
-    cc += twoLayerCrossCount(g, layering[i - 1], layering[i]);
-  }
-  return cc;
-}
-
-function twoLayerCrossCount(g, northLayer, southLayer) {
-  // Sort all of the edges between the north and south layers by their position
-  // in the north layer and then the south. Map these edges to the position of
-  // their head in the south layer.
-  var southPos = lodash_es_zipObject(
-    southLayer,
-    map/* default */.Z(southLayer, function (v, i) {
-      return i;
-    })
-  );
-  var southEntries = flatten/* default */.Z(
-    map/* default */.Z(northLayer, function (v) {
-      return lodash_es_sortBy(
-        map/* default */.Z(g.outEdges(v), function (e) {
-          return { pos: southPos[e.w], weight: g.edge(e).weight };
-        }),
-        'pos'
-      );
-    })
-  );
-
-  // Build the accumulator tree
-  var firstIndex = 1;
-  while (firstIndex < southLayer.length) firstIndex <<= 1;
-  var treeSize = 2 * firstIndex - 1;
-  firstIndex -= 1;
-  var tree = map/* default */.Z(new Array(treeSize), function () {
-    return 0;
-  });
-
-  // Calculate the weighted crossings
-  var cc = 0;
-  forEach/* default */.Z(
-    // @ts-expect-error
-    southEntries.forEach(function (entry) {
-      var index = entry.pos + firstIndex;
-      tree[index] += entry.weight;
-      var weightSum = 0;
-      // @ts-expect-error
-      while (index > 0) {
-        // @ts-expect-error
-        if (index % 2) {
-          weightSum += tree[index + 1];
-        }
-        // @ts-expect-error
-        index = (index - 1) >> 1;
-        tree[index] += entry.weight;
-      }
-      cc += entry.weight * weightSum;
-    })
-  );
-
-  return cc;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/init-order.js
-
-
-
-
-/*
- * Assigns an initial order value for each node by performing a DFS search
- * starting from nodes in the first rank. Nodes are assigned an order in their
- * rank as they are first visited.
- *
- * This approach comes from Gansner, et al., "A Technique for Drawing Directed
- * Graphs."
- *
- * Returns a layering matrix with an array per layer and each layer sorted by
- * the order of its nodes.
- */
-function initOrder(g) {
-  var visited = {};
-  var simpleNodes = filter/* default */.Z(g.nodes(), function (v) {
-    return !g.children(v).length;
-  });
-  var maxRank = lodash_es_max(
-    map/* default */.Z(simpleNodes, function (v) {
-      return g.node(v).rank;
-    })
-  );
-  var layers = map/* default */.Z(range/* default */.Z(maxRank + 1), function () {
-    return [];
-  });
-
-  function dfs(v) {
-    if (has/* default */.Z(visited, v)) return;
-    visited[v] = true;
-    var node = g.node(v);
-    layers[node.rank].push(v);
-    forEach/* default */.Z(g.successors(v), dfs);
-  }
-
-  var orderedVs = lodash_es_sortBy(simpleNodes, function (v) {
-    return g.node(v).rank;
-  });
-  forEach/* default */.Z(orderedVs, dfs);
-
-  return layers;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/barycenter.js
-
-
-
-
-function barycenter(g, movable) {
-  return map/* default */.Z(movable, function (v) {
-    var inV = g.inEdges(v);
-    if (!inV.length) {
-      return { v: v };
-    } else {
-      var result = reduce/* default */.Z(
-        inV,
-        function (acc, e) {
-          var edge = g.edge(e),
-            nodeU = g.node(e.v);
-          return {
-            sum: acc.sum + edge.weight * nodeU.order,
-            weight: acc.weight + edge.weight,
-          };
-        },
-        { sum: 0, weight: 0 }
-      );
-
-      return {
-        v: v,
-        barycenter: result.sum / result.weight,
-        weight: result.weight,
-      };
-    }
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/resolve-conflicts.js
-
-
-
-
-/*
- * Given a list of entries of the form {v, barycenter, weight} and a
- * constraint graph this function will resolve any conflicts between the
- * constraint graph and the barycenters for the entries. If the barycenters for
- * an entry would violate a constraint in the constraint graph then we coalesce
- * the nodes in the conflict into a new node that respects the contraint and
- * aggregates barycenter and weight information.
- *
- * This implementation is based on the description in Forster, "A Fast and
- * Simple Hueristic for Constrained Two-Level Crossing Reduction," thought it
- * differs in some specific details.
- *
- * Pre-conditions:
- *
- *    1. Each entry has the form {v, barycenter, weight}, or if the node has
- *       no barycenter, then {v}.
- *
- * Returns:
- *
- *    A new list of entries of the form {vs, i, barycenter, weight}. The list
- *    `vs` may either be a singleton or it may be an aggregation of nodes
- *    ordered such that they do not violate constraints from the constraint
- *    graph. The property `i` is the lowest original index of any of the
- *    elements in `vs`.
- */
-function resolveConflicts(entries, cg) {
-  var mappedEntries = {};
-  forEach/* default */.Z(entries, function (entry, i) {
-    var tmp = (mappedEntries[entry.v] = {
-      indegree: 0,
-      in: [],
-      out: [],
-      vs: [entry.v],
-      i: i,
-    });
-    if (!isUndefined/* default */.Z(entry.barycenter)) {
-      // @ts-expect-error
-      tmp.barycenter = entry.barycenter;
-      // @ts-expect-error
-      tmp.weight = entry.weight;
-    }
-  });
-
-  forEach/* default */.Z(cg.edges(), function (e) {
-    var entryV = mappedEntries[e.v];
-    var entryW = mappedEntries[e.w];
-    if (!isUndefined/* default */.Z(entryV) && !isUndefined/* default */.Z(entryW)) {
-      entryW.indegree++;
-      entryV.out.push(mappedEntries[e.w]);
-    }
-  });
-
-  var sourceSet = filter/* default */.Z(mappedEntries, function (entry) {
-    // @ts-expect-error
-    return !entry.indegree;
-  });
-
-  return doResolveConflicts(sourceSet);
-}
-
-function doResolveConflicts(sourceSet) {
-  var entries = [];
-
-  function handleIn(vEntry) {
-    return function (uEntry) {
-      if (uEntry.merged) {
-        return;
-      }
-      if (
-        isUndefined/* default */.Z(uEntry.barycenter) ||
-        isUndefined/* default */.Z(vEntry.barycenter) ||
-        uEntry.barycenter >= vEntry.barycenter
-      ) {
-        mergeEntries(vEntry, uEntry);
-      }
-    };
-  }
-
-  function handleOut(vEntry) {
-    return function (wEntry) {
-      wEntry['in'].push(vEntry);
-      if (--wEntry.indegree === 0) {
-        sourceSet.push(wEntry);
-      }
-    };
-  }
-
-  while (sourceSet.length) {
-    var entry = sourceSet.pop();
-    entries.push(entry);
-    forEach/* default */.Z(entry['in'].reverse(), handleIn(entry));
-    forEach/* default */.Z(entry.out, handleOut(entry));
-  }
-
-  return map/* default */.Z(
-    filter/* default */.Z(entries, function (entry) {
-      return !entry.merged;
-    }),
-    function (entry) {
-      return pick/* default */.Z(entry, ['vs', 'i', 'barycenter', 'weight']);
-    }
-  );
-}
-
-function mergeEntries(target, source) {
-  var sum = 0;
-  var weight = 0;
-
-  if (target.weight) {
-    sum += target.barycenter * target.weight;
-    weight += target.weight;
-  }
-
-  if (source.weight) {
-    sum += source.barycenter * source.weight;
-    weight += source.weight;
-  }
-
-  target.vs = source.vs.concat(target.vs);
-  target.barycenter = sum / weight;
-  target.weight = weight;
-  target.i = Math.min(source.i, target.i);
-  source.merged = true;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort.js
-
-
-
-
-
-function sort(entries, biasRight) {
-  var parts = partition(entries, function (entry) {
-    return has/* default */.Z(entry, 'barycenter');
-  });
-  var sortable = parts.lhs,
-    unsortable = lodash_es_sortBy(parts.rhs, function (entry) {
-      return -entry.i;
-    }),
-    vs = [],
-    sum = 0,
-    weight = 0,
-    vsIndex = 0;
-
-  sortable.sort(compareWithBias(!!biasRight));
-
-  vsIndex = consumeUnsortable(vs, unsortable, vsIndex);
-
-  forEach/* default */.Z(sortable, function (entry) {
-    vsIndex += entry.vs.length;
-    vs.push(entry.vs);
-    sum += entry.barycenter * entry.weight;
-    weight += entry.weight;
-    vsIndex = consumeUnsortable(vs, unsortable, vsIndex);
-  });
-
-  var result = { vs: flatten/* default */.Z(vs) };
-  if (weight) {
-    result.barycenter = sum / weight;
-    result.weight = weight;
-  }
-  return result;
-}
-
-function consumeUnsortable(vs, unsortable, index) {
-  var last;
-  while (unsortable.length && (last = lodash_es_last(unsortable)).i <= index) {
-    unsortable.pop();
-    vs.push(last.vs);
-    index++;
-  }
-  return index;
-}
-
-function compareWithBias(bias) {
-  return function (entryV, entryW) {
-    if (entryV.barycenter < entryW.barycenter) {
-      return -1;
-    } else if (entryV.barycenter > entryW.barycenter) {
-      return 1;
-    }
-
-    return !bias ? entryV.i - entryW.i : entryW.i - entryV.i;
-  };
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/sort-subgraph.js
-
-
-
-
-
-
-
-function sortSubgraph(g, v, cg, biasRight) {
-  var movable = g.children(v);
-  var node = g.node(v);
-  var bl = node ? node.borderLeft : undefined;
-  var br = node ? node.borderRight : undefined;
-  var subgraphs = {};
-
-  if (bl) {
-    movable = filter/* default */.Z(movable, function (w) {
-      return w !== bl && w !== br;
-    });
-  }
-
-  var barycenters = barycenter(g, movable);
-  forEach/* default */.Z(barycenters, function (entry) {
-    if (g.children(entry.v).length) {
-      var subgraphResult = sortSubgraph(g, entry.v, cg, biasRight);
-      subgraphs[entry.v] = subgraphResult;
-      if (has/* default */.Z(subgraphResult, 'barycenter')) {
-        mergeBarycenters(entry, subgraphResult);
-      }
-    }
-  });
-
-  var entries = resolveConflicts(barycenters, cg);
-  expandSubgraphs(entries, subgraphs);
-
-  var result = sort(entries, biasRight);
-
-  if (bl) {
-    result.vs = flatten/* default */.Z([bl, result.vs, br]);
-    if (g.predecessors(bl).length) {
-      var blPred = g.node(g.predecessors(bl)[0]),
-        brPred = g.node(g.predecessors(br)[0]);
-      if (!has/* default */.Z(result, 'barycenter')) {
-        result.barycenter = 0;
-        result.weight = 0;
-      }
-      result.barycenter =
-        (result.barycenter * result.weight + blPred.order + brPred.order) / (result.weight + 2);
-      result.weight += 2;
-    }
-  }
-
-  return result;
-}
-
-function expandSubgraphs(entries, subgraphs) {
-  forEach/* default */.Z(entries, function (entry) {
-    entry.vs = flatten/* default */.Z(
-      entry.vs.map(function (v) {
-        if (subgraphs[v]) {
-          return subgraphs[v].vs;
-        }
-        return v;
-      })
-    );
-  });
-}
-
-function mergeBarycenters(target, other) {
-  if (!isUndefined/* default */.Z(target.barycenter)) {
-    target.barycenter =
-      (target.barycenter * target.weight + other.barycenter * other.weight) /
-      (target.weight + other.weight);
-    target.weight += other.weight;
-  } else {
-    target.barycenter = other.barycenter;
-    target.weight = other.weight;
-  }
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/order/index.js
-
-
-
-
-
-
-
-
-
-
-
-/*
- * Applies heuristics to minimize edge crossings in the graph and sets the best
- * order solution as an order attribute on each node.
- *
- * Pre-conditions:
- *
- *    1. Graph must be DAG
- *    2. Graph nodes must be objects with a "rank" attribute
- *    3. Graph edges must have the "weight" attribute
- *
- * Post-conditions:
- *
- *    1. Graph nodes will have an "order" attribute based on the results of the
- *       algorithm.
- */
-function order(g) {
-  var maxRank = util_maxRank(g),
-    downLayerGraphs = buildLayerGraphs(g, range/* default */.Z(1, maxRank + 1), 'inEdges'),
-    upLayerGraphs = buildLayerGraphs(g, range/* default */.Z(maxRank - 1, -1, -1), 'outEdges');
-
-  var layering = initOrder(g);
-  assignOrder(g, layering);
-
-  var bestCC = Number.POSITIVE_INFINITY,
-    best;
-
-  for (var i = 0, lastBest = 0; lastBest < 4; ++i, ++lastBest) {
-    sweepLayerGraphs(i % 2 ? downLayerGraphs : upLayerGraphs, i % 4 >= 2);
-
-    layering = buildLayerMatrix(g);
-    var cc = crossCount(g, layering);
-    if (cc < bestCC) {
-      lastBest = 0;
-      best = lodash_es_cloneDeep(layering);
-      bestCC = cc;
-    }
-  }
-
-  assignOrder(g, best);
-}
-
-function buildLayerGraphs(g, ranks, relationship) {
-  return map/* default */.Z(ranks, function (rank) {
-    return buildLayerGraph(g, rank, relationship);
-  });
-}
-
-function sweepLayerGraphs(layerGraphs, biasRight) {
-  var cg = new graphlib/* Graph */.k();
-  forEach/* default */.Z(layerGraphs, function (lg) {
-    var root = lg.graph().root;
-    var sorted = sortSubgraph(lg, root, cg, biasRight);
-    forEach/* default */.Z(sorted.vs, function (v, i) {
-      lg.node(v).order = i;
-    });
-    addSubgraphConstraints(lg, cg, sorted.vs);
-  });
-}
-
-function assignOrder(g, layering) {
-  forEach/* default */.Z(layering, function (layer) {
-    forEach/* default */.Z(layer, function (v, i) {
-      g.node(v).order = i;
-    });
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/parent-dummy-chains.js
-
-
-
-
-function parentDummyChains(g) {
-  var postorderNums = parent_dummy_chains_postorder(g);
-
-  forEach/* default */.Z(g.graph().dummyChains, function (v) {
-    var node = g.node(v);
-    var edgeObj = node.edgeObj;
-    var pathData = findPath(g, postorderNums, edgeObj.v, edgeObj.w);
-    var path = pathData.path;
-    var lca = pathData.lca;
-    var pathIdx = 0;
-    var pathV = path[pathIdx];
-    var ascending = true;
-
-    while (v !== edgeObj.w) {
-      node = g.node(v);
-
-      if (ascending) {
-        while ((pathV = path[pathIdx]) !== lca && g.node(pathV).maxRank < node.rank) {
-          pathIdx++;
-        }
-
-        if (pathV === lca) {
-          ascending = false;
-        }
-      }
-
-      if (!ascending) {
-        while (
-          pathIdx < path.length - 1 &&
-          g.node((pathV = path[pathIdx + 1])).minRank <= node.rank
-        ) {
-          pathIdx++;
-        }
-        pathV = path[pathIdx];
-      }
-
-      g.setParent(v, pathV);
-      v = g.successors(v)[0];
-    }
-  });
-}
-
-// Find a path from v to w through the lowest common ancestor (LCA). Return the
-// full path and the LCA.
-function findPath(g, postorderNums, v, w) {
-  var vPath = [];
-  var wPath = [];
-  var low = Math.min(postorderNums[v].low, postorderNums[w].low);
-  var lim = Math.max(postorderNums[v].lim, postorderNums[w].lim);
-  var parent;
-  var lca;
-
-  // Traverse up from v to find the LCA
-  parent = v;
-  do {
-    parent = g.parent(parent);
-    vPath.push(parent);
-  } while (parent && (postorderNums[parent].low > low || lim > postorderNums[parent].lim));
-  lca = parent;
-
-  // Traverse from w to LCA
-  parent = w;
-  while ((parent = g.parent(parent)) !== lca) {
-    wPath.push(parent);
-  }
-
-  return { path: vPath.concat(wPath.reverse()), lca: lca };
-}
-
-function parent_dummy_chains_postorder(g) {
-  var result = {};
-  var lim = 0;
-
-  function dfs(v) {
-    var low = lim;
-    forEach/* default */.Z(g.children(v), dfs);
-    result[v] = { low: low, lim: lim++ };
-  }
-  forEach/* default */.Z(g.children(), dfs);
-
-  return result;
-}
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_castFunction.js
-var _castFunction = __webpack_require__(68882);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/forIn.js
-
-
-
-
-/**
- * Iterates over own and inherited enumerable string keyed properties of an
- * object and invokes `iteratee` for each property. The iteratee is invoked
- * with three arguments: (value, key, object). Iteratee functions may exit
- * iteration early by explicitly returning `false`.
- *
- * @static
- * @memberOf _
- * @since 0.3.0
- * @category Object
- * @param {Object} object The object to iterate over.
- * @param {Function} [iteratee=_.identity] The function invoked per iteration.
- * @returns {Object} Returns `object`.
- * @see _.forInRight
- * @example
- *
- * function Foo() {
- *   this.a = 1;
- *   this.b = 2;
- * }
- *
- * Foo.prototype.c = 3;
- *
- * _.forIn(new Foo, function(value, key) {
- *   console.log(key);
- * });
- * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).
- */
-function forIn(object, iteratee) {
-  return object == null
-    ? object
-    : (0,_baseFor/* default */.Z)(object, (0,_castFunction/* default */.Z)(iteratee), keysIn/* default */.Z);
-}
-
-/* harmony default export */ const lodash_es_forIn = (forIn);
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/bk.js
-
-
-
-
-/*
- * This module provides coordinate assignment based on Brandes and Köpf, "Fast
- * and Simple Horizontal Coordinate Assignment."
- */
-
-
-
-/*
- * Marks all edges in the graph with a type-1 conflict with the "type1Conflict"
- * property. A type-1 conflict is one where a non-inner segment crosses an
- * inner segment. An inner segment is an edge with both incident nodes marked
- * with the "dummy" property.
- *
- * This algorithm scans layer by layer, starting with the second, for type-1
- * conflicts between the current layer and the previous layer. For each layer
- * it scans the nodes from left to right until it reaches one that is incident
- * on an inner segment. It then scans predecessors to determine if they have
- * edges that cross that inner segment. At the end a final scan is done for all
- * nodes on the current rank to see if they cross the last visited inner
- * segment.
- *
- * This algorithm (safely) assumes that a dummy node will only be incident on a
- * single node in the layers being scanned.
- */
-function findType1Conflicts(g, layering) {
-  var conflicts = {};
-
-  function visitLayer(prevLayer, layer) {
-    var // last visited node in the previous layer that is incident on an inner
-      // segment.
-      k0 = 0,
-      // Tracks the last node in this layer scanned for crossings with a type-1
-      // segment.
-      scanPos = 0,
-      prevLayerLength = prevLayer.length,
-      lastNode = lodash_es_last(layer);
-
-    forEach/* default */.Z(layer, function (v, i) {
-      var w = findOtherInnerSegmentNode(g, v),
-        k1 = w ? g.node(w).order : prevLayerLength;
-
-      if (w || v === lastNode) {
-        forEach/* default */.Z(layer.slice(scanPos, i + 1), function (scanNode) {
-          forEach/* default */.Z(g.predecessors(scanNode), function (u) {
-            var uLabel = g.node(u),
-              uPos = uLabel.order;
-            if ((uPos < k0 || k1 < uPos) && !(uLabel.dummy && g.node(scanNode).dummy)) {
-              addConflict(conflicts, u, scanNode);
-            }
-          });
-        });
-        // @ts-expect-error
-        scanPos = i + 1;
-        k0 = k1;
-      }
-    });
-
-    return layer;
-  }
-
-  reduce/* default */.Z(layering, visitLayer);
-  return conflicts;
-}
-
-function findType2Conflicts(g, layering) {
-  var conflicts = {};
-
-  function scan(south, southPos, southEnd, prevNorthBorder, nextNorthBorder) {
-    var v;
-    forEach/* default */.Z(range/* default */.Z(southPos, southEnd), function (i) {
-      v = south[i];
-      if (g.node(v).dummy) {
-        forEach/* default */.Z(g.predecessors(v), function (u) {
-          var uNode = g.node(u);
-          if (uNode.dummy && (uNode.order < prevNorthBorder || uNode.order > nextNorthBorder)) {
-            addConflict(conflicts, u, v);
-          }
-        });
-      }
-    });
-  }
-
-  function visitLayer(north, south) {
-    var prevNorthPos = -1,
-      nextNorthPos,
-      southPos = 0;
-
-    forEach/* default */.Z(south, function (v, southLookahead) {
-      if (g.node(v).dummy === 'border') {
-        var predecessors = g.predecessors(v);
-        if (predecessors.length) {
-          nextNorthPos = g.node(predecessors[0]).order;
-          scan(south, southPos, southLookahead, prevNorthPos, nextNorthPos);
-          // @ts-expect-error
-          southPos = southLookahead;
-          prevNorthPos = nextNorthPos;
-        }
-      }
-      scan(south, southPos, south.length, nextNorthPos, north.length);
-    });
-
-    return south;
-  }
-
-  reduce/* default */.Z(layering, visitLayer);
-  return conflicts;
-}
-
-function findOtherInnerSegmentNode(g, v) {
-  if (g.node(v).dummy) {
-    return lodash_es_find(g.predecessors(v), function (u) {
-      return g.node(u).dummy;
-    });
-  }
-}
-
-function addConflict(conflicts, v, w) {
-  if (v > w) {
-    var tmp = v;
-    v = w;
-    w = tmp;
-  }
-
-  var conflictsV = conflicts[v];
-  if (!conflictsV) {
-    conflicts[v] = conflictsV = {};
-  }
-  conflictsV[w] = true;
-}
-
-function hasConflict(conflicts, v, w) {
-  if (v > w) {
-    var tmp = v;
-    v = w;
-    w = tmp;
-  }
-  return has/* default */.Z(conflicts[v], w);
-}
-
-/*
- * Try to align nodes into vertical "blocks" where possible. This algorithm
- * attempts to align a node with one of its median neighbors. If the edge
- * connecting a neighbor is a type-1 conflict then we ignore that possibility.
- * If a previous node has already formed a block with a node after the node
- * we're trying to form a block with, we also ignore that possibility - our
- * blocks would be split in that scenario.
- */
-function verticalAlignment(g, layering, conflicts, neighborFn) {
-  var root = {},
-    align = {},
-    pos = {};
-
-  // We cache the position here based on the layering because the graph and
-  // layering may be out of sync. The layering matrix is manipulated to
-  // generate different extreme alignments.
-  forEach/* default */.Z(layering, function (layer) {
-    forEach/* default */.Z(layer, function (v, order) {
-      root[v] = v;
-      align[v] = v;
-      pos[v] = order;
-    });
-  });
-
-  forEach/* default */.Z(layering, function (layer) {
-    var prevIdx = -1;
-    forEach/* default */.Z(layer, function (v) {
-      var ws = neighborFn(v);
-      if (ws.length) {
-        ws = lodash_es_sortBy(ws, function (w) {
-          return pos[w];
-        });
-        var mp = (ws.length - 1) / 2;
-        for (var i = Math.floor(mp), il = Math.ceil(mp); i <= il; ++i) {
-          var w = ws[i];
-          if (align[v] === v && prevIdx < pos[w] && !hasConflict(conflicts, v, w)) {
-            align[w] = v;
-            align[v] = root[v] = root[w];
-            prevIdx = pos[w];
-          }
-        }
-      }
-    });
-  });
-
-  return { root: root, align: align };
-}
-
-function horizontalCompaction(g, layering, root, align, reverseSep) {
-  // This portion of the algorithm differs from BK due to a number of problems.
-  // Instead of their algorithm we construct a new block graph and do two
-  // sweeps. The first sweep places blocks with the smallest possible
-  // coordinates. The second sweep removes unused space by moving blocks to the
-  // greatest coordinates without violating separation.
-  var xs = {},
-    blockG = buildBlockGraph(g, layering, root, reverseSep),
-    borderType = reverseSep ? 'borderLeft' : 'borderRight';
-
-  function iterate(setXsFunc, nextNodesFunc) {
-    var stack = blockG.nodes();
-    var elem = stack.pop();
-    var visited = {};
-    while (elem) {
-      if (visited[elem]) {
-        setXsFunc(elem);
-      } else {
-        visited[elem] = true;
-        stack.push(elem);
-        stack = stack.concat(nextNodesFunc(elem));
-      }
-
-      elem = stack.pop();
-    }
-  }
-
-  // First pass, assign smallest coordinates
-  function pass1(elem) {
-    xs[elem] = blockG.inEdges(elem).reduce(function (acc, e) {
-      return Math.max(acc, xs[e.v] + blockG.edge(e));
-    }, 0);
-  }
-
-  // Second pass, assign greatest coordinates
-  function pass2(elem) {
-    var min = blockG.outEdges(elem).reduce(function (acc, e) {
-      return Math.min(acc, xs[e.w] - blockG.edge(e));
-    }, Number.POSITIVE_INFINITY);
-
-    var node = g.node(elem);
-    if (min !== Number.POSITIVE_INFINITY && node.borderType !== borderType) {
-      xs[elem] = Math.max(xs[elem], min);
-    }
-  }
-
-  iterate(pass1, blockG.predecessors.bind(blockG));
-  iterate(pass2, blockG.successors.bind(blockG));
-
-  // Assign x coordinates to all nodes
-  forEach/* default */.Z(align, function (v) {
-    xs[v] = xs[root[v]];
-  });
-
-  return xs;
-}
-
-function buildBlockGraph(g, layering, root, reverseSep) {
-  var blockGraph = new graphlib/* Graph */.k(),
-    graphLabel = g.graph(),
-    sepFn = sep(graphLabel.nodesep, graphLabel.edgesep, reverseSep);
-
-  forEach/* default */.Z(layering, function (layer) {
-    var u;
-    forEach/* default */.Z(layer, function (v) {
-      var vRoot = root[v];
-      blockGraph.setNode(vRoot);
-      if (u) {
-        var uRoot = root[u],
-          prevMax = blockGraph.edge(uRoot, vRoot);
-        blockGraph.setEdge(uRoot, vRoot, Math.max(sepFn(g, v, u), prevMax || 0));
-      }
-      u = v;
-    });
-  });
-
-  return blockGraph;
-}
-
-/*
- * Returns the alignment that has the smallest width of the given alignments.
- */
-function findSmallestWidthAlignment(g, xss) {
-  return lodash_es_minBy(values/* default */.Z(xss), function (xs) {
-    var max = Number.NEGATIVE_INFINITY;
-    var min = Number.POSITIVE_INFINITY;
-
-    lodash_es_forIn(xs, function (x, v) {
-      var halfWidth = width(g, v) / 2;
-
-      max = Math.max(x + halfWidth, max);
-      min = Math.min(x - halfWidth, min);
-    });
-
-    return max - min;
-  });
-}
-
-/*
- * Align the coordinates of each of the layout alignments such that
- * left-biased alignments have their minimum coordinate at the same point as
- * the minimum coordinate of the smallest width alignment and right-biased
- * alignments have their maximum coordinate at the same point as the maximum
- * coordinate of the smallest width alignment.
- */
-function alignCoordinates(xss, alignTo) {
-  var alignToVals = values/* default */.Z(alignTo),
-    alignToMin = lodash_es_min(alignToVals),
-    alignToMax = lodash_es_max(alignToVals);
-
-  forEach/* default */.Z(['u', 'd'], function (vert) {
-    forEach/* default */.Z(['l', 'r'], function (horiz) {
-      var alignment = vert + horiz,
-        xs = xss[alignment],
-        delta;
-      if (xs === alignTo) return;
-
-      var xsVals = values/* default */.Z(xs);
-      delta = horiz === 'l' ? alignToMin - lodash_es_min(xsVals) : alignToMax - lodash_es_max(xsVals);
-
-      if (delta) {
-        xss[alignment] = lodash_es_mapValues(xs, function (x) {
-          return x + delta;
-        });
-      }
-    });
-  });
-}
-
-function balance(xss, align) {
-  return lodash_es_mapValues(xss.ul, function (ignore, v) {
-    if (align) {
-      return xss[align.toLowerCase()][v];
-    } else {
-      var xs = lodash_es_sortBy(map/* default */.Z(xss, v));
-      return (xs[1] + xs[2]) / 2;
-    }
-  });
-}
-
-function positionX(g) {
-  var layering = buildLayerMatrix(g);
-  var conflicts = lodash_es_merge(findType1Conflicts(g, layering), findType2Conflicts(g, layering));
-
-  var xss = {};
-  var adjustedLayering;
-  forEach/* default */.Z(['u', 'd'], function (vert) {
-    adjustedLayering = vert === 'u' ? layering : values/* default */.Z(layering).reverse();
-    forEach/* default */.Z(['l', 'r'], function (horiz) {
-      if (horiz === 'r') {
-        adjustedLayering = map/* default */.Z(adjustedLayering, function (inner) {
-          return values/* default */.Z(inner).reverse();
-        });
-      }
-
-      var neighborFn = (vert === 'u' ? g.predecessors : g.successors).bind(g);
-      var align = verticalAlignment(g, adjustedLayering, conflicts, neighborFn);
-      var xs = horizontalCompaction(g, adjustedLayering, align.root, align.align, horiz === 'r');
-      if (horiz === 'r') {
-        xs = lodash_es_mapValues(xs, function (x) {
-          return -x;
-        });
-      }
-      xss[vert + horiz] = xs;
-    });
-  });
-
-  var smallestWidth = findSmallestWidthAlignment(g, xss);
-  alignCoordinates(xss, smallestWidth);
-  return balance(xss, g.graph().align);
-}
-
-function sep(nodeSep, edgeSep, reverseSep) {
-  return function (g, v, w) {
-    var vLabel = g.node(v);
-    var wLabel = g.node(w);
-    var sum = 0;
-    var delta;
-
-    sum += vLabel.width / 2;
-    if (has/* default */.Z(vLabel, 'labelpos')) {
-      switch (vLabel.labelpos.toLowerCase()) {
-        case 'l':
-          delta = -vLabel.width / 2;
-          break;
-        case 'r':
-          delta = vLabel.width / 2;
-          break;
-      }
-    }
-    if (delta) {
-      sum += reverseSep ? delta : -delta;
-    }
-    delta = 0;
-
-    sum += (vLabel.dummy ? edgeSep : nodeSep) / 2;
-    sum += (wLabel.dummy ? edgeSep : nodeSep) / 2;
-
-    sum += wLabel.width / 2;
-    if (has/* default */.Z(wLabel, 'labelpos')) {
-      switch (wLabel.labelpos.toLowerCase()) {
-        case 'l':
-          delta = wLabel.width / 2;
-          break;
-        case 'r':
-          delta = -wLabel.width / 2;
-          break;
-      }
-    }
-    if (delta) {
-      sum += reverseSep ? delta : -delta;
-    }
-    delta = 0;
-
-    return sum;
-  };
-}
-
-function width(g, v) {
-  return g.node(v).width;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/position/index.js
-
-
-
-
-
-
-function position(g) {
-  g = asNonCompoundGraph(g);
-
-  positionY(g);
-  forEach/* default */.Z(positionX(g), function (x, v) {
-    g.node(v).x = x;
-  });
-}
-
-function positionY(g) {
-  var layering = buildLayerMatrix(g);
-  var rankSep = g.graph().ranksep;
-  var prevY = 0;
-  forEach/* default */.Z(layering, function (layer) {
-    var maxHeight = lodash_es_max(
-      map/* default */.Z(layer, function (v) {
-        return g.node(v).height;
-      })
-    );
-    forEach/* default */.Z(layer, function (v) {
-      g.node(v).y = prevY + maxHeight / 2;
-    });
-    prevY += maxHeight + rankSep;
-  });
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/layout.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-function layout(g, opts) {
-  var time = opts && opts.debugTiming ? util_time : notime;
-  time('layout', function () {
-    var layoutGraph = time('  buildLayoutGraph', function () {
-      return buildLayoutGraph(g);
-    });
-    time('  runLayout', function () {
-      runLayout(layoutGraph, time);
-    });
-    time('  updateInputGraph', function () {
-      updateInputGraph(g, layoutGraph);
-    });
-  });
-}
-
-function runLayout(g, time) {
-  time('    makeSpaceForEdgeLabels', function () {
-    makeSpaceForEdgeLabels(g);
-  });
-  time('    removeSelfEdges', function () {
-    removeSelfEdges(g);
-  });
-  time('    acyclic', function () {
-    run(g);
-  });
-  time('    nestingGraph.run', function () {
-    nesting_graph_run(g);
-  });
-  time('    rank', function () {
-    rank(asNonCompoundGraph(g));
-  });
-  time('    injectEdgeLabelProxies', function () {
-    injectEdgeLabelProxies(g);
-  });
-  time('    removeEmptyRanks', function () {
-    removeEmptyRanks(g);
-  });
-  time('    nestingGraph.cleanup', function () {
-    cleanup(g);
-  });
-  time('    normalizeRanks', function () {
-    normalizeRanks(g);
-  });
-  time('    assignRankMinMax', function () {
-    assignRankMinMax(g);
-  });
-  time('    removeEdgeLabelProxies', function () {
-    removeEdgeLabelProxies(g);
-  });
-  time('    normalize.run', function () {
-    normalize_run(g);
-  });
-  time('    parentDummyChains', function () {
-    parentDummyChains(g);
-  });
-  time('    addBorderSegments', function () {
-    addBorderSegments(g);
-  });
-  time('    order', function () {
-    order(g);
-  });
-  time('    insertSelfEdges', function () {
-    insertSelfEdges(g);
-  });
-  time('    adjustCoordinateSystem', function () {
-    adjust(g);
-  });
-  time('    position', function () {
-    position(g);
-  });
-  time('    positionSelfEdges', function () {
-    positionSelfEdges(g);
-  });
-  time('    removeBorderNodes', function () {
-    removeBorderNodes(g);
-  });
-  time('    normalize.undo', function () {
-    normalize_undo(g);
-  });
-  time('    fixupEdgeLabelCoords', function () {
-    fixupEdgeLabelCoords(g);
-  });
-  time('    undoCoordinateSystem', function () {
-    coordinate_system_undo(g);
-  });
-  time('    translateGraph', function () {
-    translateGraph(g);
-  });
-  time('    assignNodeIntersects', function () {
-    assignNodeIntersects(g);
-  });
-  time('    reversePoints', function () {
-    reversePointsForReversedEdges(g);
-  });
-  time('    acyclic.undo', function () {
-    undo(g);
-  });
-}
-
-/*
- * Copies final layout information from the layout graph back to the input
- * graph. This process only copies whitelisted attributes from the layout graph
- * to the input graph, so it serves as a good place to determine what
- * attributes can influence layout.
- */
-function updateInputGraph(inputGraph, layoutGraph) {
-  forEach/* default */.Z(inputGraph.nodes(), function (v) {
-    var inputLabel = inputGraph.node(v);
-    var layoutLabel = layoutGraph.node(v);
-
-    if (inputLabel) {
-      inputLabel.x = layoutLabel.x;
-      inputLabel.y = layoutLabel.y;
-
-      if (layoutGraph.children(v).length) {
-        inputLabel.width = layoutLabel.width;
-        inputLabel.height = layoutLabel.height;
-      }
-    }
-  });
-
-  forEach/* default */.Z(inputGraph.edges(), function (e) {
-    var inputLabel = inputGraph.edge(e);
-    var layoutLabel = layoutGraph.edge(e);
-
-    inputLabel.points = layoutLabel.points;
-    if (has/* default */.Z(layoutLabel, 'x')) {
-      inputLabel.x = layoutLabel.x;
-      inputLabel.y = layoutLabel.y;
-    }
-  });
-
-  inputGraph.graph().width = layoutGraph.graph().width;
-  inputGraph.graph().height = layoutGraph.graph().height;
-}
-
-var graphNumAttrs = ['nodesep', 'edgesep', 'ranksep', 'marginx', 'marginy'];
-var graphDefaults = { ranksep: 50, edgesep: 20, nodesep: 50, rankdir: 'tb' };
-var graphAttrs = ['acyclicer', 'ranker', 'rankdir', 'align'];
-var nodeNumAttrs = ['width', 'height'];
-var nodeDefaults = { width: 0, height: 0 };
-var edgeNumAttrs = ['minlen', 'weight', 'width', 'height', 'labeloffset'];
-var edgeDefaults = {
-  minlen: 1,
-  weight: 1,
-  width: 0,
-  height: 0,
-  labeloffset: 10,
-  labelpos: 'r',
-};
-var edgeAttrs = ['labelpos'];
-
-/*
- * Constructs a new graph from the input graph, which can be used for layout.
- * This process copies only whitelisted attributes from the input graph to the
- * layout graph. Thus this function serves as a good place to determine what
- * attributes can influence layout.
- */
-function buildLayoutGraph(inputGraph) {
-  var g = new graphlib/* Graph */.k({ multigraph: true, compound: true });
-  var graph = canonicalize(inputGraph.graph());
-
-  g.setGraph(
-    lodash_es_merge({}, graphDefaults, selectNumberAttrs(graph, graphNumAttrs), pick/* default */.Z(graph, graphAttrs))
-  );
-
-  forEach/* default */.Z(inputGraph.nodes(), function (v) {
-    var node = canonicalize(inputGraph.node(v));
-    g.setNode(v, defaults/* default */.Z(selectNumberAttrs(node, nodeNumAttrs), nodeDefaults));
-    g.setParent(v, inputGraph.parent(v));
-  });
-
-  forEach/* default */.Z(inputGraph.edges(), function (e) {
-    var edge = canonicalize(inputGraph.edge(e));
-    g.setEdge(
-      e,
-      lodash_es_merge({}, edgeDefaults, selectNumberAttrs(edge, edgeNumAttrs), pick/* default */.Z(edge, edgeAttrs))
-    );
-  });
-
-  return g;
-}
-
-/*
- * This idea comes from the Gansner paper: to account for edge labels in our
- * layout we split each rank in half by doubling minlen and halving ranksep.
- * Then we can place labels at these mid-points between nodes.
- *
- * We also add some minimal padding to the width to push the label for the edge
- * away from the edge itself a bit.
- */
-function makeSpaceForEdgeLabels(g) {
-  var graph = g.graph();
-  graph.ranksep /= 2;
-  forEach/* default */.Z(g.edges(), function (e) {
-    var edge = g.edge(e);
-    edge.minlen *= 2;
-    if (edge.labelpos.toLowerCase() !== 'c') {
-      if (graph.rankdir === 'TB' || graph.rankdir === 'BT') {
-        edge.width += edge.labeloffset;
-      } else {
-        edge.height += edge.labeloffset;
-      }
-    }
-  });
-}
-
-/*
- * Creates temporary dummy nodes that capture the rank in which each edge's
- * label is going to, if it has one of non-zero width and height. We do this
- * so that we can safely remove empty ranks while preserving balance for the
- * label's position.
- */
-function injectEdgeLabelProxies(g) {
-  forEach/* default */.Z(g.edges(), function (e) {
-    var edge = g.edge(e);
-    if (edge.width && edge.height) {
-      var v = g.node(e.v);
-      var w = g.node(e.w);
-      var label = { rank: (w.rank - v.rank) / 2 + v.rank, e: e };
-      addDummyNode(g, 'edge-proxy', label, '_ep');
-    }
-  });
-}
-
-function assignRankMinMax(g) {
-  var maxRank = 0;
-  forEach/* default */.Z(g.nodes(), function (v) {
-    var node = g.node(v);
-    if (node.borderTop) {
-      node.minRank = g.node(node.borderTop).rank;
-      node.maxRank = g.node(node.borderBottom).rank;
-      // @ts-expect-error
-      maxRank = lodash_es_max(maxRank, node.maxRank);
-    }
-  });
-  g.graph().maxRank = maxRank;
-}
-
-function removeEdgeLabelProxies(g) {
-  forEach/* default */.Z(g.nodes(), function (v) {
-    var node = g.node(v);
-    if (node.dummy === 'edge-proxy') {
-      g.edge(node.e).labelRank = node.rank;
-      g.removeNode(v);
-    }
-  });
-}
-
-function translateGraph(g) {
-  var minX = Number.POSITIVE_INFINITY;
-  var maxX = 0;
-  var minY = Number.POSITIVE_INFINITY;
-  var maxY = 0;
-  var graphLabel = g.graph();
-  var marginX = graphLabel.marginx || 0;
-  var marginY = graphLabel.marginy || 0;
-
-  function getExtremes(attrs) {
-    var x = attrs.x;
-    var y = attrs.y;
-    var w = attrs.width;
-    var h = attrs.height;
-    minX = Math.min(minX, x - w / 2);
-    maxX = Math.max(maxX, x + w / 2);
-    minY = Math.min(minY, y - h / 2);
-    maxY = Math.max(maxY, y + h / 2);
-  }
-
-  forEach/* default */.Z(g.nodes(), function (v) {
-    getExtremes(g.node(v));
-  });
-  forEach/* default */.Z(g.edges(), function (e) {
-    var edge = g.edge(e);
-    if (has/* default */.Z(edge, 'x')) {
-      getExtremes(edge);
-    }
-  });
-
-  minX -= marginX;
-  minY -= marginY;
-
-  forEach/* default */.Z(g.nodes(), function (v) {
-    var node = g.node(v);
-    node.x -= minX;
-    node.y -= minY;
-  });
-
-  forEach/* default */.Z(g.edges(), function (e) {
-    var edge = g.edge(e);
-    forEach/* default */.Z(edge.points, function (p) {
-      p.x -= minX;
-      p.y -= minY;
-    });
-    if (has/* default */.Z(edge, 'x')) {
-      edge.x -= minX;
-    }
-    if (has/* default */.Z(edge, 'y')) {
-      edge.y -= minY;
-    }
-  });
-
-  graphLabel.width = maxX - minX + marginX;
-  graphLabel.height = maxY - minY + marginY;
-}
-
-function assignNodeIntersects(g) {
-  forEach/* default */.Z(g.edges(), function (e) {
-    var edge = g.edge(e);
-    var nodeV = g.node(e.v);
-    var nodeW = g.node(e.w);
-    var p1, p2;
-    if (!edge.points) {
-      edge.points = [];
-      p1 = nodeW;
-      p2 = nodeV;
-    } else {
-      p1 = edge.points[0];
-      p2 = edge.points[edge.points.length - 1];
-    }
-    edge.points.unshift(intersectRect(nodeV, p1));
-    edge.points.push(intersectRect(nodeW, p2));
-  });
-}
-
-function fixupEdgeLabelCoords(g) {
-  forEach/* default */.Z(g.edges(), function (e) {
-    var edge = g.edge(e);
-    if (has/* default */.Z(edge, 'x')) {
-      if (edge.labelpos === 'l' || edge.labelpos === 'r') {
-        edge.width -= edge.labeloffset;
-      }
-      switch (edge.labelpos) {
-        case 'l':
-          edge.x -= edge.width / 2 + edge.labeloffset;
-          break;
-        case 'r':
-          edge.x += edge.width / 2 + edge.labeloffset;
-          break;
-      }
-    }
-  });
-}
-
-function reversePointsForReversedEdges(g) {
-  forEach/* default */.Z(g.edges(), function (e) {
-    var edge = g.edge(e);
-    if (edge.reversed) {
-      edge.points.reverse();
-    }
-  });
-}
-
-function removeBorderNodes(g) {
-  forEach/* default */.Z(g.nodes(), function (v) {
-    if (g.children(v).length) {
-      var node = g.node(v);
-      var t = g.node(node.borderTop);
-      var b = g.node(node.borderBottom);
-      var l = g.node(lodash_es_last(node.borderLeft));
-      var r = g.node(lodash_es_last(node.borderRight));
-
-      node.width = Math.abs(r.x - l.x);
-      node.height = Math.abs(b.y - t.y);
-      node.x = l.x + node.width / 2;
-      node.y = t.y + node.height / 2;
-    }
-  });
-
-  forEach/* default */.Z(g.nodes(), function (v) {
-    if (g.node(v).dummy === 'border') {
-      g.removeNode(v);
-    }
-  });
-}
-
-function removeSelfEdges(g) {
-  forEach/* default */.Z(g.edges(), function (e) {
-    if (e.v === e.w) {
-      var node = g.node(e.v);
-      if (!node.selfEdges) {
-        node.selfEdges = [];
-      }
-      node.selfEdges.push({ e: e, label: g.edge(e) });
-      g.removeEdge(e);
-    }
-  });
-}
-
-function insertSelfEdges(g) {
-  var layers = buildLayerMatrix(g);
-  forEach/* default */.Z(layers, function (layer) {
-    var orderShift = 0;
-    forEach/* default */.Z(layer, function (v, i) {
-      var node = g.node(v);
-      node.order = i + orderShift;
-      forEach/* default */.Z(node.selfEdges, function (selfEdge) {
-        addDummyNode(
-          g,
-          'selfedge',
-          {
-            width: selfEdge.label.width,
-            height: selfEdge.label.height,
-            rank: node.rank,
-            order: i + ++orderShift,
-            e: selfEdge.e,
-            label: selfEdge.label,
-          },
-          '_se'
-        );
-      });
-      delete node.selfEdges;
-    });
-  });
-}
-
-function positionSelfEdges(g) {
-  forEach/* default */.Z(g.nodes(), function (v) {
-    var node = g.node(v);
-    if (node.dummy === 'selfedge') {
-      var selfNode = g.node(node.e.v);
-      var x = selfNode.x + selfNode.width / 2;
-      var y = selfNode.y;
-      var dx = node.x - x;
-      var dy = selfNode.height / 2;
-      g.setEdge(node.e, node.label);
-      g.removeNode(v);
-      node.label.points = [
-        { x: x + (2 * dx) / 3, y: y - dy },
-        { x: x + (5 * dx) / 6, y: y - dy },
-        { x: x + dx, y: y },
-        { x: x + (5 * dx) / 6, y: y + dy },
-        { x: x + (2 * dx) / 3, y: y + dy },
-      ];
-      node.label.x = node.x;
-      node.label.y = node.y;
-    }
-  });
-}
-
-function selectNumberAttrs(obj, attrs) {
-  return lodash_es_mapValues(pick/* default */.Z(obj, attrs), Number);
-}
-
-function canonicalize(attrs) {
-  var newAttrs = {};
-  forEach/* default */.Z(attrs, function (v, k) {
-    newAttrs[k.toLowerCase()] = v;
-  });
-  return newAttrs;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js
-
-
-
-
-
-
-
-
-/***/ }),
-
-/***/ 52544:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "k": () => (/* binding */ Graph)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules
-var has = __webpack_require__(17452);
-// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js
-var constant = __webpack_require__(62002);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js
-var isFunction = __webpack_require__(73234);
-// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js
-var keys = __webpack_require__(17179);
-// EXTERNAL MODULE: ./node_modules/lodash-es/filter.js + 1 modules
-var filter = __webpack_require__(13445);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isEmpty.js
-var isEmpty = __webpack_require__(79697);
-// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js
-var forEach = __webpack_require__(70870);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js
-var isUndefined = __webpack_require__(49360);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFlatten.js + 1 modules
-var _baseFlatten = __webpack_require__(10626);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseRest.js
-var _baseRest = __webpack_require__(69581);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules
-var _SetCache = __webpack_require__(63001);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseFindIndex.js
-var _baseFindIndex = __webpack_require__(21692);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNaN.js
-/**
- * The base implementation of `_.isNaN` without support for number objects.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
- */
-function baseIsNaN(value) {
-  return value !== value;
-}
-
-/* harmony default export */ const _baseIsNaN = (baseIsNaN);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_strictIndexOf.js
-/**
- * A specialized version of `_.indexOf` which performs strict equality
- * comparisons of values, i.e. `===`.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} value The value to search for.
- * @param {number} fromIndex The index to search from.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function strictIndexOf(array, value, fromIndex) {
-  var index = fromIndex - 1,
-      length = array.length;
-
-  while (++index < length) {
-    if (array[index] === value) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-/* harmony default export */ const _strictIndexOf = (strictIndexOf);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIndexOf.js
-
-
-
-
-/**
- * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} value The value to search for.
- * @param {number} fromIndex The index to search from.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function baseIndexOf(array, value, fromIndex) {
-  return value === value
-    ? _strictIndexOf(array, value, fromIndex)
-    : (0,_baseFindIndex/* default */.Z)(array, _baseIsNaN, fromIndex);
-}
-
-/* harmony default export */ const _baseIndexOf = (baseIndexOf);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludes.js
-
-
-/**
- * A specialized version of `_.includes` for arrays without support for
- * specifying an index to search from.
- *
- * @private
- * @param {Array} [array] The array to inspect.
- * @param {*} target The value to search for.
- * @returns {boolean} Returns `true` if `target` is found, else `false`.
- */
-function arrayIncludes(array, value) {
-  var length = array == null ? 0 : array.length;
-  return !!length && _baseIndexOf(array, value, 0) > -1;
-}
-
-/* harmony default export */ const _arrayIncludes = (arrayIncludes);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayIncludesWith.js
-/**
- * This function is like `arrayIncludes` except that it accepts a comparator.
- *
- * @private
- * @param {Array} [array] The array to inspect.
- * @param {*} target The value to search for.
- * @param {Function} comparator The comparator invoked per element.
- * @returns {boolean} Returns `true` if `target` is found, else `false`.
- */
-function arrayIncludesWith(array, value, comparator) {
-  var index = -1,
-      length = array == null ? 0 : array.length;
-
-  while (++index < length) {
-    if (comparator(value, array[index])) {
-      return true;
-    }
-  }
-  return false;
-}
-
-/* harmony default export */ const _arrayIncludesWith = (arrayIncludesWith);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js
-var _cacheHas = __webpack_require__(59548);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js
-var _Set = __webpack_require__(93203);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/noop.js
-/**
- * This method returns `undefined`.
- *
- * @static
- * @memberOf _
- * @since 2.3.0
- * @category Util
- * @example
- *
- * _.times(2, _.noop);
- * // => [undefined, undefined]
- */
-function noop() {
-  // No operation performed.
-}
-
-/* harmony default export */ const lodash_es_noop = (noop);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js
-var _setToArray = __webpack_require__(6545);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_createSet.js
-
-
-
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0;
-
-/**
- * Creates a set object of `values`.
- *
- * @private
- * @param {Array} values The values to add to the set.
- * @returns {Object} Returns the new set.
- */
-var createSet = !(_Set/* default */.Z && (1 / (0,_setToArray/* default */.Z)(new _Set/* default */.Z([,-0]))[1]) == INFINITY) ? lodash_es_noop : function(values) {
-  return new _Set/* default */.Z(values);
-};
-
-/* harmony default export */ const _createSet = (createSet);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseUniq.js
-
-
-
-
-
-
-
-/** Used as the size to enable large array optimizations. */
-var LARGE_ARRAY_SIZE = 200;
-
-/**
- * The base implementation of `_.uniqBy` without support for iteratee shorthands.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {Function} [iteratee] The iteratee invoked per element.
- * @param {Function} [comparator] The comparator invoked per element.
- * @returns {Array} Returns the new duplicate free array.
- */
-function baseUniq(array, iteratee, comparator) {
-  var index = -1,
-      includes = _arrayIncludes,
-      length = array.length,
-      isCommon = true,
-      result = [],
-      seen = result;
-
-  if (comparator) {
-    isCommon = false;
-    includes = _arrayIncludesWith;
-  }
-  else if (length >= LARGE_ARRAY_SIZE) {
-    var set = iteratee ? null : _createSet(array);
-    if (set) {
-      return (0,_setToArray/* default */.Z)(set);
-    }
-    isCommon = false;
-    includes = _cacheHas/* default */.Z;
-    seen = new _SetCache/* default */.Z;
-  }
-  else {
-    seen = iteratee ? [] : result;
-  }
-  outer:
-  while (++index < length) {
-    var value = array[index],
-        computed = iteratee ? iteratee(value) : value;
-
-    value = (comparator || value !== 0) ? value : 0;
-    if (isCommon && computed === computed) {
-      var seenIndex = seen.length;
-      while (seenIndex--) {
-        if (seen[seenIndex] === computed) {
-          continue outer;
-        }
-      }
-      if (iteratee) {
-        seen.push(computed);
-      }
-      result.push(value);
-    }
-    else if (!includes(seen, computed, comparator)) {
-      if (seen !== result) {
-        seen.push(computed);
-      }
-      result.push(value);
-    }
-  }
-  return result;
-}
-
-/* harmony default export */ const _baseUniq = (baseUniq);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLikeObject.js
-var isArrayLikeObject = __webpack_require__(836);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/union.js
-
-
-
-
-
-/**
- * Creates an array of unique values, in order, from all given arrays using
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * for equality comparisons.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Array
- * @param {...Array} [arrays] The arrays to inspect.
- * @returns {Array} Returns the new array of combined values.
- * @example
- *
- * _.union([2], [1, 2]);
- * // => [2, 1]
- */
-var union = (0,_baseRest/* default */.Z)(function(arrays) {
-  return _baseUniq((0,_baseFlatten/* default */.Z)(arrays, 1, isArrayLikeObject/* default */.Z, true));
-});
-
-/* harmony default export */ const lodash_es_union = (union);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/values.js + 1 modules
-var values = __webpack_require__(34148);
-// EXTERNAL MODULE: ./node_modules/lodash-es/reduce.js + 2 modules
-var reduce = __webpack_require__(92344);
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js
-
-
-var DEFAULT_EDGE_NAME = '\x00';
-var GRAPH_NODE = '\x00';
-var EDGE_KEY_DELIM = '\x01';
-
-// Implementation notes:
-//
-//  * Node id query functions should return string ids for the nodes
-//  * Edge id query functions should return an "edgeObj", edge object, that is
-//    composed of enough information to uniquely identify an edge: {v, w, name}.
-//  * Internally we use an "edgeId", a stringified form of the edgeObj, to
-//    reference edges. This is because we need a performant way to look these
-//    edges up and, object properties, which have string keys, are the closest
-//    we're going to get to a performant hashtable in JavaScript.
-
-// Implementation notes:
-//
-//  * Node id query functions should return string ids for the nodes
-//  * Edge id query functions should return an "edgeObj", edge object, that is
-//    composed of enough information to uniquely identify an edge: {v, w, name}.
-//  * Internally we use an "edgeId", a stringified form of the edgeObj, to
-//    reference edges. This is because we need a performant way to look these
-//    edges up and, object properties, which have string keys, are the closest
-//    we're going to get to a performant hashtable in JavaScript.
-class Graph {
-  constructor(opts = {}) {
-    this._isDirected = has/* default */.Z(opts, 'directed') ? opts.directed : true;
-    this._isMultigraph = has/* default */.Z(opts, 'multigraph') ? opts.multigraph : false;
-    this._isCompound = has/* default */.Z(opts, 'compound') ? opts.compound : false;
-
-    // Label for the graph itself
-    this._label = undefined;
-
-    // Defaults to be set when creating a new node
-    this._defaultNodeLabelFn = constant/* default */.Z(undefined);
-
-    // Defaults to be set when creating a new edge
-    this._defaultEdgeLabelFn = constant/* default */.Z(undefined);
-
-    // v -> label
-    this._nodes = {};
-
-    if (this._isCompound) {
-      // v -> parent
-      this._parent = {};
-
-      // v -> children
-      this._children = {};
-      this._children[GRAPH_NODE] = {};
-    }
-
-    // v -> edgeObj
-    this._in = {};
-
-    // u -> v -> Number
-    this._preds = {};
-
-    // v -> edgeObj
-    this._out = {};
-
-    // v -> w -> Number
-    this._sucs = {};
-
-    // e -> edgeObj
-    this._edgeObjs = {};
-
-    // e -> label
-    this._edgeLabels = {};
-  }
-  /* === Graph functions ========= */
-  isDirected() {
-    return this._isDirected;
-  }
-  isMultigraph() {
-    return this._isMultigraph;
-  }
-  isCompound() {
-    return this._isCompound;
-  }
-  setGraph(label) {
-    this._label = label;
-    return this;
-  }
-  graph() {
-    return this._label;
-  }
-  /* === Node functions ========== */
-  setDefaultNodeLabel(newDefault) {
-    if (!isFunction/* default */.Z(newDefault)) {
-      newDefault = constant/* default */.Z(newDefault);
-    }
-    this._defaultNodeLabelFn = newDefault;
-    return this;
-  }
-  nodeCount() {
-    return this._nodeCount;
-  }
-  nodes() {
-    return keys/* default */.Z(this._nodes);
-  }
-  sources() {
-    var self = this;
-    return filter/* default */.Z(this.nodes(), function (v) {
-      return isEmpty/* default */.Z(self._in[v]);
-    });
-  }
-  sinks() {
-    var self = this;
-    return filter/* default */.Z(this.nodes(), function (v) {
-      return isEmpty/* default */.Z(self._out[v]);
-    });
-  }
-  setNodes(vs, value) {
-    var args = arguments;
-    var self = this;
-    forEach/* default */.Z(vs, function (v) {
-      if (args.length > 1) {
-        self.setNode(v, value);
-      } else {
-        self.setNode(v);
-      }
-    });
-    return this;
-  }
-  setNode(v, value) {
-    if (has/* default */.Z(this._nodes, v)) {
-      if (arguments.length > 1) {
-        this._nodes[v] = value;
-      }
-      return this;
-    }
-
-    // @ts-expect-error
-    this._nodes[v] = arguments.length > 1 ? value : this._defaultNodeLabelFn(v);
-    if (this._isCompound) {
-      this._parent[v] = GRAPH_NODE;
-      this._children[v] = {};
-      this._children[GRAPH_NODE][v] = true;
-    }
-    this._in[v] = {};
-    this._preds[v] = {};
-    this._out[v] = {};
-    this._sucs[v] = {};
-    ++this._nodeCount;
-    return this;
-  }
-  node(v) {
-    return this._nodes[v];
-  }
-  hasNode(v) {
-    return has/* default */.Z(this._nodes, v);
-  }
-  removeNode(v) {
-    var self = this;
-    if (has/* default */.Z(this._nodes, v)) {
-      var removeEdge = function (e) {
-        self.removeEdge(self._edgeObjs[e]);
-      };
-      delete this._nodes[v];
-      if (this._isCompound) {
-        this._removeFromParentsChildList(v);
-        delete this._parent[v];
-        forEach/* default */.Z(this.children(v), function (child) {
-          self.setParent(child);
-        });
-        delete this._children[v];
-      }
-      forEach/* default */.Z(keys/* default */.Z(this._in[v]), removeEdge);
-      delete this._in[v];
-      delete this._preds[v];
-      forEach/* default */.Z(keys/* default */.Z(this._out[v]), removeEdge);
-      delete this._out[v];
-      delete this._sucs[v];
-      --this._nodeCount;
-    }
-    return this;
-  }
-  setParent(v, parent) {
-    if (!this._isCompound) {
-      throw new Error('Cannot set parent in a non-compound graph');
-    }
-
-    if (isUndefined/* default */.Z(parent)) {
-      parent = GRAPH_NODE;
-    } else {
-      // Coerce parent to string
-      parent += '';
-      for (var ancestor = parent; !isUndefined/* default */.Z(ancestor); ancestor = this.parent(ancestor)) {
-        if (ancestor === v) {
-          throw new Error('Setting ' + parent + ' as parent of ' + v + ' would create a cycle');
-        }
-      }
-
-      this.setNode(parent);
-    }
-
-    this.setNode(v);
-    this._removeFromParentsChildList(v);
-    this._parent[v] = parent;
-    this._children[parent][v] = true;
-    return this;
-  }
-  _removeFromParentsChildList(v) {
-    delete this._children[this._parent[v]][v];
-  }
-  parent(v) {
-    if (this._isCompound) {
-      var parent = this._parent[v];
-      if (parent !== GRAPH_NODE) {
-        return parent;
-      }
-    }
-  }
-  children(v) {
-    if (isUndefined/* default */.Z(v)) {
-      v = GRAPH_NODE;
-    }
-
-    if (this._isCompound) {
-      var children = this._children[v];
-      if (children) {
-        return keys/* default */.Z(children);
-      }
-    } else if (v === GRAPH_NODE) {
-      return this.nodes();
-    } else if (this.hasNode(v)) {
-      return [];
-    }
-  }
-  predecessors(v) {
-    var predsV = this._preds[v];
-    if (predsV) {
-      return keys/* default */.Z(predsV);
-    }
-  }
-  successors(v) {
-    var sucsV = this._sucs[v];
-    if (sucsV) {
-      return keys/* default */.Z(sucsV);
-    }
-  }
-  neighbors(v) {
-    var preds = this.predecessors(v);
-    if (preds) {
-      return lodash_es_union(preds, this.successors(v));
-    }
-  }
-  isLeaf(v) {
-    var neighbors;
-    if (this.isDirected()) {
-      neighbors = this.successors(v);
-    } else {
-      neighbors = this.neighbors(v);
-    }
-    return neighbors.length === 0;
-  }
-  filterNodes(filter) {
-    // @ts-expect-error
-    var copy = new this.constructor({
-      directed: this._isDirected,
-      multigraph: this._isMultigraph,
-      compound: this._isCompound,
-    });
-
-    copy.setGraph(this.graph());
-
-    var self = this;
-    forEach/* default */.Z(this._nodes, function (value, v) {
-      if (filter(v)) {
-        copy.setNode(v, value);
-      }
-    });
-
-    forEach/* default */.Z(this._edgeObjs, function (e) {
-      // @ts-expect-error
-      if (copy.hasNode(e.v) && copy.hasNode(e.w)) {
-        copy.setEdge(e, self.edge(e));
-      }
-    });
-
-    var parents = {};
-    function findParent(v) {
-      var parent = self.parent(v);
-      if (parent === undefined || copy.hasNode(parent)) {
-        parents[v] = parent;
-        return parent;
-      } else if (parent in parents) {
-        return parents[parent];
-      } else {
-        return findParent(parent);
-      }
-    }
-
-    if (this._isCompound) {
-      forEach/* default */.Z(copy.nodes(), function (v) {
-        copy.setParent(v, findParent(v));
-      });
-    }
-
-    return copy;
-  }
-  /* === Edge functions ========== */
-  setDefaultEdgeLabel(newDefault) {
-    if (!isFunction/* default */.Z(newDefault)) {
-      newDefault = constant/* default */.Z(newDefault);
-    }
-    this._defaultEdgeLabelFn = newDefault;
-    return this;
-  }
-  edgeCount() {
-    return this._edgeCount;
-  }
-  edges() {
-    return values/* default */.Z(this._edgeObjs);
-  }
-  setPath(vs, value) {
-    var self = this;
-    var args = arguments;
-    reduce/* default */.Z(vs, function (v, w) {
-      if (args.length > 1) {
-        self.setEdge(v, w, value);
-      } else {
-        self.setEdge(v, w);
-      }
-      return w;
-    });
-    return this;
-  }
-  /*
-   * setEdge(v, w, [value, [name]])
-   * setEdge({ v, w, [name] }, [value])
-   */
-  setEdge() {
-    var v, w, name, value;
-    var valueSpecified = false;
-    var arg0 = arguments[0];
-
-    if (typeof arg0 === 'object' && arg0 !== null && 'v' in arg0) {
-      v = arg0.v;
-      w = arg0.w;
-      name = arg0.name;
-      if (arguments.length === 2) {
-        value = arguments[1];
-        valueSpecified = true;
-      }
-    } else {
-      v = arg0;
-      w = arguments[1];
-      name = arguments[3];
-      if (arguments.length > 2) {
-        value = arguments[2];
-        valueSpecified = true;
-      }
-    }
-
-    v = '' + v;
-    w = '' + w;
-    if (!isUndefined/* default */.Z(name)) {
-      name = '' + name;
-    }
-
-    var e = edgeArgsToId(this._isDirected, v, w, name);
-    if (has/* default */.Z(this._edgeLabels, e)) {
-      if (valueSpecified) {
-        this._edgeLabels[e] = value;
-      }
-      return this;
-    }
-
-    if (!isUndefined/* default */.Z(name) && !this._isMultigraph) {
-      throw new Error('Cannot set a named edge when isMultigraph = false');
-    }
-
-    // It didn't exist, so we need to create it.
-    // First ensure the nodes exist.
-    this.setNode(v);
-    this.setNode(w);
-
-    // @ts-expect-error
-    this._edgeLabels[e] = valueSpecified ? value : this._defaultEdgeLabelFn(v, w, name);
-
-    var edgeObj = edgeArgsToObj(this._isDirected, v, w, name);
-    // Ensure we add undirected edges in a consistent way.
-    v = edgeObj.v;
-    w = edgeObj.w;
-
-    Object.freeze(edgeObj);
-    this._edgeObjs[e] = edgeObj;
-    incrementOrInitEntry(this._preds[w], v);
-    incrementOrInitEntry(this._sucs[v], w);
-    this._in[w][e] = edgeObj;
-    this._out[v][e] = edgeObj;
-    this._edgeCount++;
-    return this;
-  }
-  edge(v, w, name) {
-    var e =
-      arguments.length === 1
-        ? edgeObjToId(this._isDirected, arguments[0])
-        : edgeArgsToId(this._isDirected, v, w, name);
-    return this._edgeLabels[e];
-  }
-  hasEdge(v, w, name) {
-    var e =
-      arguments.length === 1
-        ? edgeObjToId(this._isDirected, arguments[0])
-        : edgeArgsToId(this._isDirected, v, w, name);
-    return has/* default */.Z(this._edgeLabels, e);
-  }
-  removeEdge(v, w, name) {
-    var e =
-      arguments.length === 1
-        ? edgeObjToId(this._isDirected, arguments[0])
-        : edgeArgsToId(this._isDirected, v, w, name);
-    var edge = this._edgeObjs[e];
-    if (edge) {
-      v = edge.v;
-      w = edge.w;
-      delete this._edgeLabels[e];
-      delete this._edgeObjs[e];
-      decrementOrRemoveEntry(this._preds[w], v);
-      decrementOrRemoveEntry(this._sucs[v], w);
-      delete this._in[w][e];
-      delete this._out[v][e];
-      this._edgeCount--;
-    }
-    return this;
-  }
-  inEdges(v, u) {
-    var inV = this._in[v];
-    if (inV) {
-      var edges = values/* default */.Z(inV);
-      if (!u) {
-        return edges;
-      }
-      return filter/* default */.Z(edges, function (edge) {
-        return edge.v === u;
-      });
-    }
-  }
-  outEdges(v, w) {
-    var outV = this._out[v];
-    if (outV) {
-      var edges = values/* default */.Z(outV);
-      if (!w) {
-        return edges;
-      }
-      return filter/* default */.Z(edges, function (edge) {
-        return edge.w === w;
-      });
-    }
-  }
-  nodeEdges(v, w) {
-    var inEdges = this.inEdges(v, w);
-    if (inEdges) {
-      return inEdges.concat(this.outEdges(v, w));
-    }
-  }
-}
-
-/* Number of nodes in the graph. Should only be changed by the implementation. */
-Graph.prototype._nodeCount = 0;
-
-/* Number of edges in the graph. Should only be changed by the implementation. */
-Graph.prototype._edgeCount = 0;
-
-function incrementOrInitEntry(map, k) {
-  if (map[k]) {
-    map[k]++;
-  } else {
-    map[k] = 1;
-  }
-}
-
-function decrementOrRemoveEntry(map, k) {
-  if (!--map[k]) {
-    delete map[k];
-  }
-}
-
-function edgeArgsToId(isDirected, v_, w_, name) {
-  var v = '' + v_;
-  var w = '' + w_;
-  if (!isDirected && v > w) {
-    var tmp = v;
-    v = w;
-    w = tmp;
-  }
-  return v + EDGE_KEY_DELIM + w + EDGE_KEY_DELIM + (isUndefined/* default */.Z(name) ? DEFAULT_EDGE_NAME : name);
-}
-
-function edgeArgsToObj(isDirected, v_, w_, name) {
-  var v = '' + v_;
-  var w = '' + w_;
-  if (!isDirected && v > w) {
-    var tmp = v;
-    v = w;
-    w = tmp;
-  }
-  var edgeObj = { v: v, w: w };
-  if (name) {
-    edgeObj.name = name;
-  }
-  return edgeObj;
-}
-
-function edgeObjToId(isDirected, edgeObj) {
-  return edgeArgsToId(isDirected, edgeObj.v, edgeObj.w, edgeObj.name);
-}
-
-
-/***/ }),
-
-/***/ 45625:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "k": () => (/* reexport safe */ _graph_js__WEBPACK_IMPORTED_MODULE_0__.k)
-/* harmony export */ });
-/* unused harmony export version */
-/* harmony import */ var _graph_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(52544);
-// Includes only the "core" of graphlib
-
-
-
-const version = '2.1.9-pre';
-
-
-
-
-/***/ }),
-
-/***/ 39354:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "c": () => (/* binding */ write)
-});
-
-// UNUSED EXPORTS: read
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isUndefined.js
-var isUndefined = __webpack_require__(49360);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseClone.js + 15 modules
-var _baseClone = __webpack_require__(48451);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/clone.js
-
-
-/** Used to compose bitmasks for cloning. */
-var CLONE_SYMBOLS_FLAG = 4;
-
-/**
- * Creates a shallow clone of `value`.
- *
- * **Note:** This method is loosely based on the
- * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)
- * and supports cloning arrays, array buffers, booleans, date objects, maps,
- * numbers, `Object` objects, regexes, sets, strings, symbols, and typed
- * arrays. The own enumerable properties of `arguments` objects are cloned
- * as plain objects. An empty object is returned for uncloneable values such
- * as error objects, functions, DOM nodes, and WeakMaps.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to clone.
- * @returns {*} Returns the cloned value.
- * @see _.cloneDeep
- * @example
- *
- * var objects = [{ 'a': 1 }, { 'b': 2 }];
- *
- * var shallow = _.clone(objects);
- * console.log(shallow[0] === objects[0]);
- * // => true
- */
-function clone(value) {
-  return (0,_baseClone/* default */.Z)(value, CLONE_SYMBOLS_FLAG);
-}
-
-/* harmony default export */ const lodash_es_clone = (clone);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/map.js
-var map = __webpack_require__(43836);
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/graph.js + 9 modules
-var graph = __webpack_require__(52544);
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/graphlib/json.js
-
-
-
-
-
-function write(g) {
-  var json = {
-    options: {
-      directed: g.isDirected(),
-      multigraph: g.isMultigraph(),
-      compound: g.isCompound(),
-    },
-    nodes: writeNodes(g),
-    edges: writeEdges(g),
-  };
-  if (!isUndefined/* default */.Z(g.graph())) {
-    json.value = lodash_es_clone(g.graph());
-  }
-  return json;
-}
-
-function writeNodes(g) {
-  return map/* default */.Z(g.nodes(), function (v) {
-    var nodeValue = g.node(v);
-    var parent = g.parent(v);
-    var node = { v: v };
-    if (!isUndefined/* default */.Z(nodeValue)) {
-      node.value = nodeValue;
-    }
-    if (!isUndefined/* default */.Z(parent)) {
-      node.parent = parent;
-    }
-    return node;
-  });
-}
-
-function writeEdges(g) {
-  return map/* default */.Z(g.edges(), function (e) {
-    var edgeValue = g.edge(e);
-    var edge = { v: e.v, w: e.w };
-    if (!isUndefined/* default */.Z(e.name)) {
-      edge.name = e.name;
-    }
-    if (!isUndefined/* default */.Z(edgeValue)) {
-      edge.value = edgeValue;
-    }
-    return edge;
-  });
-}
-
-function read(json) {
-  var g = new Graph(json.options).setGraph(json.value);
-  _.each(json.nodes, function (entry) {
-    g.setNode(entry.v, entry.value);
-    if (entry.parent) {
-      g.setParent(entry.v, entry.parent);
-    }
-  });
-  _.each(json.edges, function (entry) {
-    g.setEdge({ v: entry.v, w: entry.w, name: entry.name }, entry.value);
-  });
-  return g;
-}
-
-
-/***/ }),
-
-/***/ 91518:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "sY": () => (/* reexport */ render)
-});
-
-// UNUSED EXPORTS: graphlib, intersect
-
-// EXTERNAL MODULE: ./node_modules/d3/src/index.js + 192 modules
-var src = __webpack_require__(59373);
-// EXTERNAL MODULE: ./node_modules/lodash-es/has.js + 1 modules
-var has = __webpack_require__(17452);
-// EXTERNAL MODULE: ./node_modules/lodash-es/defaults.js
-var defaults = __webpack_require__(3688);
-// EXTERNAL MODULE: ./node_modules/lodash-es/forEach.js
-var forEach = __webpack_require__(70870);
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre/index.js + 70 modules
-var dagre = __webpack_require__(70277);
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/util.js
-var util = __webpack_require__(96225);
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/arrows.js
-
-
-
-
-var arrows = {
-  normal,
-  vee,
-  undirected,
-};
-
-function setArrows(value) {
-  arrows = value;
-}
-
-function normal(parent, id, edge, type) {
-  var marker = parent
-    .append('marker')
-    .attr('id', id)
-    .attr('viewBox', '0 0 10 10')
-    .attr('refX', 9)
-    .attr('refY', 5)
-    .attr('markerUnits', 'strokeWidth')
-    .attr('markerWidth', 8)
-    .attr('markerHeight', 6)
-    .attr('orient', 'auto');
-
-  var path = marker
-    .append('path')
-    .attr('d', 'M 0 0 L 10 5 L 0 10 z')
-    .style('stroke-width', 1)
-    .style('stroke-dasharray', '1,0');
-  util/* applyStyle */.bg(path, edge[type + 'Style']);
-  if (edge[type + 'Class']) {
-    path.attr('class', edge[type + 'Class']);
-  }
-}
-
-function vee(parent, id, edge, type) {
-  var marker = parent
-    .append('marker')
-    .attr('id', id)
-    .attr('viewBox', '0 0 10 10')
-    .attr('refX', 9)
-    .attr('refY', 5)
-    .attr('markerUnits', 'strokeWidth')
-    .attr('markerWidth', 8)
-    .attr('markerHeight', 6)
-    .attr('orient', 'auto');
-
-  var path = marker
-    .append('path')
-    .attr('d', 'M 0 0 L 10 5 L 0 10 L 4 5 z')
-    .style('stroke-width', 1)
-    .style('stroke-dasharray', '1,0');
-  util/* applyStyle */.bg(path, edge[type + 'Style']);
-  if (edge[type + 'Class']) {
-    path.attr('class', edge[type + 'Class']);
-  }
-}
-
-function undirected(parent, id, edge, type) {
-  var marker = parent
-    .append('marker')
-    .attr('id', id)
-    .attr('viewBox', '0 0 10 10')
-    .attr('refX', 9)
-    .attr('refY', 5)
-    .attr('markerUnits', 'strokeWidth')
-    .attr('markerWidth', 8)
-    .attr('markerHeight', 6)
-    .attr('orient', 'auto');
-
-  var path = marker
-    .append('path')
-    .attr('d', 'M 0 5 L 10 5')
-    .style('stroke-width', 1)
-    .style('stroke-dasharray', '1,0');
-  util/* applyStyle */.bg(path, edge[type + 'Style']);
-  if (edge[type + 'Class']) {
-    path.attr('class', edge[type + 'Class']);
-  }
-}
-
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-html-label.js
-var add_html_label = __webpack_require__(43349);
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-svg-label.js
-
-
-
-
-function addSVGLabel(root, node) {
-  var domNode = root;
-
-  domNode.node().appendChild(node.label);
-
-  util/* applyStyle */.bg(domNode, node.labelStyle);
-
-  return domNode;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-text-label.js
-
-
-
-
-/*
- * Attaches a text label to the specified root. Handles escape sequences.
- */
-function addTextLabel(root, node) {
-  var domNode = root.append('text');
-
-  var lines = processEscapeSequences(node.label).split('\n');
-  for (var i = 0; i < lines.length; i++) {
-    domNode
-      .append('tspan')
-      .attr('xml:space', 'preserve')
-      .attr('dy', '1em')
-      .attr('x', '1')
-      .text(lines[i]);
-  }
-
-  util/* applyStyle */.bg(domNode, node.labelStyle);
-
-  return domNode;
-}
-
-function processEscapeSequences(text) {
-  var newText = '';
-  var escaped = false;
-  var ch;
-  for (var i = 0; i < text.length; ++i) {
-    ch = text[i];
-    if (escaped) {
-      switch (ch) {
-        case 'n':
-          newText += '\n';
-          break;
-        default:
-          newText += ch;
-      }
-      escaped = false;
-    } else if (ch === '\\') {
-      escaped = true;
-    } else {
-      newText += ch;
-    }
-  }
-  return newText;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/label/add-label.js
-
-
-
-
-
-
-function addLabel(root, node, location) {
-  var label = node.label;
-  var labelSvg = root.append('g');
-
-  // Allow the label to be a string, a function that returns a DOM element, or
-  // a DOM element itself.
-  if (node.labelType === 'svg') {
-    addSVGLabel(labelSvg, node);
-  } else if (typeof label !== 'string' || node.labelType === 'html') {
-    (0,add_html_label/* addHtmlLabel */.a)(labelSvg, node);
-  } else {
-    addTextLabel(labelSvg, node);
-  }
-
-  var labelBBox = labelSvg.node().getBBox();
-  var y;
-  switch (location) {
-    case 'top':
-      y = -node.height / 2;
-      break;
-    case 'bottom':
-      y = node.height / 2 - labelBBox.height;
-      break;
-    default:
-      y = -labelBBox.height / 2;
-  }
-  labelSvg.attr('transform', 'translate(' + -labelBBox.width / 2 + ',' + y + ')');
-
-  return labelSvg;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-clusters.js
-
-
-
-
-
-
-var createClusters = function (selection, g) {
-  var clusters = g.nodes().filter(function (v) {
-    return util/* isSubgraph */.bF(g, v);
-  });
-  var svgClusters = selection.selectAll('g.cluster').data(clusters, function (v) {
-    return v;
-  });
-
-  util/* applyTransition */.WR(svgClusters.exit(), g).style('opacity', 0).remove();
-
-  var enterSelection = svgClusters
-    .enter()
-    .append('g')
-    .attr('class', 'cluster')
-    .attr('id', function (v) {
-      var node = g.node(v);
-      return node.id;
-    })
-    .style('opacity', 0)
-    .each(function (v) {
-      var node = g.node(v);
-      var thisGroup = src/* select */.Ys(this);
-      src/* select */.Ys(this).append('rect');
-      var labelGroup = thisGroup.append('g').attr('class', 'label');
-      addLabel(labelGroup, node, node.clusterLabelPos);
-    });
-
-  svgClusters = svgClusters.merge(enterSelection);
-
-  svgClusters = util/* applyTransition */.WR(svgClusters, g).style('opacity', 1);
-
-  svgClusters.selectAll('rect').each(function (c) {
-    var node = g.node(c);
-    var domCluster = src/* select */.Ys(this);
-    util/* applyStyle */.bg(domCluster, node.style);
-  });
-
-  return svgClusters;
-};
-
-function setCreateClusters(value) {
-  createClusters = value;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-edge-labels.js
-
-
-
-
-
-
-
-let createEdgeLabels = function (selection, g) {
-  var svgEdgeLabels = selection
-    .selectAll('g.edgeLabel')
-    .data(g.edges(), function (e) {
-      return util/* edgeToId */.O1(e);
-    })
-    .classed('update', true);
-
-  svgEdgeLabels.exit().remove();
-  svgEdgeLabels.enter().append('g').classed('edgeLabel', true).style('opacity', 0);
-
-  svgEdgeLabels = selection.selectAll('g.edgeLabel');
-
-  svgEdgeLabels.each(function (e) {
-    var root = src/* select */.Ys(this);
-    root.select('.label').remove();
-    var edge = g.edge(e);
-    var label = addLabel(root, g.edge(e), 0).classed('label', true);
-    var bbox = label.node().getBBox();
-
-    if (edge.labelId) {
-      label.attr('id', edge.labelId);
-    }
-    if (!has/* default */.Z(edge, 'width')) {
-      edge.width = bbox.width;
-    }
-    if (!has/* default */.Z(edge, 'height')) {
-      edge.height = bbox.height;
-    }
-  });
-
-  var exitSelection;
-
-  if (svgEdgeLabels.exit) {
-    exitSelection = svgEdgeLabels.exit();
-  } else {
-    exitSelection = svgEdgeLabels.selectAll(null); // empty selection
-  }
-
-  util/* applyTransition */.WR(exitSelection, g).style('opacity', 0).remove();
-
-  return svgEdgeLabels;
-};
-
-function setCreateEdgeLabels(value) {
-  createEdgeLabels = value;
-}
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/uniqueId.js
-var uniqueId = __webpack_require__(66749);
-// EXTERNAL MODULE: ./node_modules/lodash-es/range.js + 2 modules
-var range = __webpack_require__(74379);
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-node.js
-
-
-function intersectNode(node, point) {
-  return node.intersect(point);
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-edge-paths.js
-
-
-
-
-
-
-
-var createEdgePaths = function (selection, g, arrows) {
-  var previousPaths = selection
-    .selectAll('g.edgePath')
-    .data(g.edges(), function (e) {
-      return util/* edgeToId */.O1(e);
-    })
-    .classed('update', true);
-
-  var newPaths = enter(previousPaths, g);
-  exit(previousPaths, g);
-
-  var svgPaths = previousPaths.merge !== undefined ? previousPaths.merge(newPaths) : previousPaths;
-  util/* applyTransition */.WR(svgPaths, g).style('opacity', 1);
-
-  // Save DOM element in the path group, and set ID and class
-  svgPaths.each(function (e) {
-    var domEdge = src/* select */.Ys(this);
-    var edge = g.edge(e);
-    edge.elem = this;
-
-    if (edge.id) {
-      domEdge.attr('id', edge.id);
-    }
-
-    util/* applyClass */.$p(
-      domEdge,
-      edge['class'],
-      (domEdge.classed('update') ? 'update ' : '') + 'edgePath'
-    );
-  });
-
-  svgPaths.selectAll('path.path').each(function (e) {
-    var edge = g.edge(e);
-    edge.arrowheadId = uniqueId/* default */.Z('arrowhead');
-
-    var domEdge = src/* select */.Ys(this)
-      .attr('marker-end', function () {
-        return 'url(' + makeFragmentRef(location.href, edge.arrowheadId) + ')';
-      })
-      .style('fill', 'none');
-
-    util/* applyTransition */.WR(domEdge, g).attr('d', function (e) {
-      return calcPoints(g, e);
-    });
-
-    util/* applyStyle */.bg(domEdge, edge.style);
-  });
-
-  svgPaths.selectAll('defs *').remove();
-  svgPaths.selectAll('defs').each(function (e) {
-    var edge = g.edge(e);
-    var arrowhead = arrows[edge.arrowhead];
-    arrowhead(src/* select */.Ys(this), edge.arrowheadId, edge, 'arrowhead');
-  });
-
-  return svgPaths;
-};
-
-function setCreateEdgePaths(value) {
-  createEdgePaths = value;
-}
-
-function makeFragmentRef(url, fragmentId) {
-  var baseUrl = url.split('#')[0];
-  return baseUrl + '#' + fragmentId;
-}
-
-function calcPoints(g, e) {
-  var edge = g.edge(e);
-  var tail = g.node(e.v);
-  var head = g.node(e.w);
-  var points = edge.points.slice(1, edge.points.length - 1);
-  points.unshift(intersectNode(tail, points[0]));
-  points.push(intersectNode(head, points[points.length - 1]));
-
-  return createLine(edge, points);
-}
-
-function createLine(edge, points) {
-  // @ts-expect-error
-  var line = (src/* line */.jvg || src/* svg.line */.YPS.line)()
-    .x(function (d) {
-      return d.x;
-    })
-    .y(function (d) {
-      return d.y;
-    });
-
-  (line.curve || line.interpolate)(edge.curve);
-
-  return line(points);
-}
-
-function getCoords(elem) {
-  var bbox = elem.getBBox();
-  var matrix = elem.ownerSVGElement
-    .getScreenCTM()
-    .inverse()
-    .multiply(elem.getScreenCTM())
-    .translate(bbox.width / 2, bbox.height / 2);
-  return { x: matrix.e, y: matrix.f };
-}
-
-function enter(svgPaths, g) {
-  var svgPathsEnter = svgPaths.enter().append('g').attr('class', 'edgePath').style('opacity', 0);
-  svgPathsEnter
-    .append('path')
-    .attr('class', 'path')
-    .attr('d', function (e) {
-      var edge = g.edge(e);
-      var sourceElem = g.node(e.v).elem;
-      var points = range/* default */.Z(edge.points.length).map(function () {
-        return getCoords(sourceElem);
-      });
-      return createLine(edge, points);
-    });
-  svgPathsEnter.append('defs');
-  return svgPathsEnter;
-}
-
-function exit(svgPaths, g) {
-  var svgPathExit = svgPaths.exit();
-  util/* applyTransition */.WR(svgPathExit, g).style('opacity', 0).remove();
-}
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/pick.js + 4 modules
-var pick = __webpack_require__(61666);
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/create-nodes.js
-
-
-
-
-
-
-
-var createNodes = function (selection, g, shapes) {
-  var simpleNodes = g.nodes().filter(function (v) {
-    return !util/* isSubgraph */.bF(g, v);
-  });
-  var svgNodes = selection
-    .selectAll('g.node')
-    .data(simpleNodes, function (v) {
-      return v;
-    })
-    .classed('update', true);
-
-  svgNodes.exit().remove();
-
-  svgNodes.enter().append('g').attr('class', 'node').style('opacity', 0);
-
-  svgNodes = selection.selectAll('g.node');
-
-  svgNodes.each(function (v) {
-    var node = g.node(v);
-    var thisGroup = src/* select */.Ys(this);
-    util/* applyClass */.$p(
-      thisGroup,
-      node['class'],
-      (thisGroup.classed('update') ? 'update ' : '') + 'node'
-    );
-
-    thisGroup.select('g.label').remove();
-    var labelGroup = thisGroup.append('g').attr('class', 'label');
-    var labelDom = addLabel(labelGroup, node);
-    var shape = shapes[node.shape];
-    var bbox = pick/* default */.Z(labelDom.node().getBBox(), 'width', 'height');
-
-    node.elem = this;
-
-    if (node.id) {
-      thisGroup.attr('id', node.id);
-    }
-    if (node.labelId) {
-      labelGroup.attr('id', node.labelId);
-    }
-
-    if (has/* default */.Z(node, 'width')) {
-      bbox.width = node.width;
-    }
-    if (has/* default */.Z(node, 'height')) {
-      bbox.height = node.height;
-    }
-
-    bbox.width += node.paddingLeft + node.paddingRight;
-    bbox.height += node.paddingTop + node.paddingBottom;
-    labelGroup.attr(
-      'transform',
-      'translate(' +
-        (node.paddingLeft - node.paddingRight) / 2 +
-        ',' +
-        (node.paddingTop - node.paddingBottom) / 2 +
-        ')'
-    );
-
-    var root = src/* select */.Ys(this);
-    root.select('.label-container').remove();
-    var shapeSvg = shape(root, bbox, node).classed('label-container', true);
-    util/* applyStyle */.bg(shapeSvg, node.style);
-
-    var shapeBBox = shapeSvg.node().getBBox();
-    node.width = shapeBBox.width;
-    node.height = shapeBBox.height;
-  });
-
-  var exitSelection;
-
-  if (svgNodes.exit) {
-    exitSelection = svgNodes.exit();
-  } else {
-    exitSelection = svgNodes.selectAll(null); // empty selection
-  }
-
-  util/* applyTransition */.WR(exitSelection, g).style('opacity', 0).remove();
-
-  return svgNodes;
-};
-
-function setCreateNodes(value) {
-  createNodes = value;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-clusters.js
-
-
-
-
-
-function positionClusters(selection, g) {
-  var created = selection.filter(function () {
-    return !src/* select */.Ys(this).classed('update');
-  });
-
-  function translate(v) {
-    var node = g.node(v);
-    return 'translate(' + node.x + ',' + node.y + ')';
-  }
-
-  created.attr('transform', translate);
-
-  util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate);
-
-  util/* applyTransition */.WR(created.selectAll('rect'), g)
-    .attr('width', function (v) {
-      return g.node(v).width;
-    })
-    .attr('height', function (v) {
-      return g.node(v).height;
-    })
-    .attr('x', function (v) {
-      var node = g.node(v);
-      return -node.width / 2;
-    })
-    .attr('y', function (v) {
-      var node = g.node(v);
-      return -node.height / 2;
-    });
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-edge-labels.js
-
-
-
-
-
-
-function positionEdgeLabels(selection, g) {
-  var created = selection.filter(function () {
-    return !src/* select */.Ys(this).classed('update');
-  });
-
-  function translate(e) {
-    var edge = g.edge(e);
-    return has/* default */.Z(edge, 'x') ? 'translate(' + edge.x + ',' + edge.y + ')' : '';
-  }
-
-  created.attr('transform', translate);
-
-  util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate);
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/position-nodes.js
-
-
-
-
-
-function positionNodes(selection, g) {
-  var created = selection.filter(function () {
-    return !src/* select */.Ys(this).classed('update');
-  });
-
-  function translate(v) {
-    var node = g.node(v);
-    return 'translate(' + node.x + ',' + node.y + ')';
-  }
-
-  created.attr('transform', translate);
-
-  util/* applyTransition */.WR(selection, g).style('opacity', 1).attr('transform', translate);
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-ellipse.js
-
-
-function intersectEllipse(node, rx, ry, point) {
-  // Formulae from: http://mathworld.wolfram.com/Ellipse-LineIntersection.html
-
-  var cx = node.x;
-  var cy = node.y;
-
-  var px = cx - point.x;
-  var py = cy - point.y;
-
-  var det = Math.sqrt(rx * rx * py * py + ry * ry * px * px);
-
-  var dx = Math.abs((rx * ry * px) / det);
-  if (point.x < cx) {
-    dx = -dx;
-  }
-  var dy = Math.abs((rx * ry * py) / det);
-  if (point.y < cy) {
-    dy = -dy;
-  }
-
-  return { x: cx + dx, y: cy + dy };
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-circle.js
-
-
-
-
-function intersectCircle(node, rx, point) {
-  return intersectEllipse(node, rx, rx, point);
-}
-
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-polygon.js + 1 modules
-var intersect_polygon = __webpack_require__(23352);
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/dagre-js/intersect/intersect-rect.js
-var intersect_rect = __webpack_require__(22930);
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/shapes.js
-
-
-
-
-
-
-
-var shapes = {
-  rect,
-  ellipse,
-  circle,
-  diamond,
-};
-
-function setShapes(value) {
-  shapes = value;
-}
-
-function rect(parent, bbox, node) {
-  var shapeSvg = parent
-    .insert('rect', ':first-child')
-    .attr('rx', node.rx)
-    .attr('ry', node.ry)
-    .attr('x', -bbox.width / 2)
-    .attr('y', -bbox.height / 2)
-    .attr('width', bbox.width)
-    .attr('height', bbox.height);
-
-  node.intersect = function (point) {
-    return (0,intersect_rect/* intersectRect */.q)(node, point);
-  };
-
-  return shapeSvg;
-}
-
-function ellipse(parent, bbox, node) {
-  var rx = bbox.width / 2;
-  var ry = bbox.height / 2;
-  var shapeSvg = parent
-    .insert('ellipse', ':first-child')
-    .attr('x', -bbox.width / 2)
-    .attr('y', -bbox.height / 2)
-    .attr('rx', rx)
-    .attr('ry', ry);
-
-  node.intersect = function (point) {
-    return intersectEllipse(node, rx, ry, point);
-  };
-
-  return shapeSvg;
-}
-
-function circle(parent, bbox, node) {
-  var r = Math.max(bbox.width, bbox.height) / 2;
-  var shapeSvg = parent
-    .insert('circle', ':first-child')
-    .attr('x', -bbox.width / 2)
-    .attr('y', -bbox.height / 2)
-    .attr('r', r);
-
-  node.intersect = function (point) {
-    return intersectCircle(node, r, point);
-  };
-
-  return shapeSvg;
-}
-
-// Circumscribe an ellipse for the bounding box with a diamond shape. I derived
-// the function to calculate the diamond shape from:
-// http://mathforum.org/kb/message.jspa?messageID=3750236
-function diamond(parent, bbox, node) {
-  var w = (bbox.width * Math.SQRT2) / 2;
-  var h = (bbox.height * Math.SQRT2) / 2;
-  var points = [
-    { x: 0, y: -h },
-    { x: -w, y: 0 },
-    { x: 0, y: h },
-    { x: w, y: 0 },
-  ];
-  var shapeSvg = parent.insert('polygon', ':first-child').attr(
-    'points',
-    points
-      .map(function (p) {
-        return p.x + ',' + p.y;
-      })
-      .join(' ')
-  );
-
-  node.intersect = function (p) {
-    return (0,intersect_polygon/* intersectPolygon */.A)(node, points, p);
-  };
-
-  return shapeSvg;
-}
-
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/dagre-js/render.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-// This design is based on http://bost.ocks.org/mike/chart/.
-function render() {
-  var fn = function (svg, g) {
-    preProcessGraph(g);
-
-    var outputGroup = createOrSelectGroup(svg, 'output');
-    var clustersGroup = createOrSelectGroup(outputGroup, 'clusters');
-    var edgePathsGroup = createOrSelectGroup(outputGroup, 'edgePaths');
-    var edgeLabels = createEdgeLabels(createOrSelectGroup(outputGroup, 'edgeLabels'), g);
-    var nodes = createNodes(createOrSelectGroup(outputGroup, 'nodes'), g, shapes);
-
-    (0,dagre/* layout */.bK)(g);
-
-    positionNodes(nodes, g);
-    positionEdgeLabels(edgeLabels, g);
-    createEdgePaths(edgePathsGroup, g, arrows);
-
-    var clusters = createClusters(clustersGroup, g);
-    positionClusters(clusters, g);
-
-    postProcessGraph(g);
-  };
-
-  fn.createNodes = function (value) {
-    if (!arguments.length) return createNodes;
-    setCreateNodes(value);
-    return fn;
-  };
-
-  fn.createClusters = function (value) {
-    if (!arguments.length) return createClusters;
-    setCreateClusters(value);
-    return fn;
-  };
-
-  fn.createEdgeLabels = function (value) {
-    if (!arguments.length) return createEdgeLabels;
-    setCreateEdgeLabels(value);
-    return fn;
-  };
-
-  fn.createEdgePaths = function (value) {
-    if (!arguments.length) return createEdgePaths;
-    setCreateEdgePaths(value);
-    return fn;
-  };
-
-  fn.shapes = function (value) {
-    if (!arguments.length) return shapes;
-    setShapes(value);
-    return fn;
-  };
-
-  fn.arrows = function (value) {
-    if (!arguments.length) return arrows;
-    setArrows(value);
-    return fn;
-  };
-
-  return fn;
-}
-
-var NODE_DEFAULT_ATTRS = {
-  paddingLeft: 10,
-  paddingRight: 10,
-  paddingTop: 10,
-  paddingBottom: 10,
-  rx: 0,
-  ry: 0,
-  shape: 'rect',
-};
-
-var EDGE_DEFAULT_ATTRS = {
-  arrowhead: 'normal',
-  curve: src/* curveLinear */.c_6,
-};
-
-function preProcessGraph(g) {
-  g.nodes().forEach(function (v) {
-    var node = g.node(v);
-    if (!has/* default */.Z(node, 'label') && !g.children(v).length) {
-      node.label = v;
-    }
-
-    if (has/* default */.Z(node, 'paddingX')) {
-      defaults/* default */.Z(node, {
-        paddingLeft: node.paddingX,
-        paddingRight: node.paddingX,
-      });
-    }
-
-    if (has/* default */.Z(node, 'paddingY')) {
-      defaults/* default */.Z(node, {
-        paddingTop: node.paddingY,
-        paddingBottom: node.paddingY,
-      });
-    }
-
-    if (has/* default */.Z(node, 'padding')) {
-      defaults/* default */.Z(node, {
-        paddingLeft: node.padding,
-        paddingRight: node.padding,
-        paddingTop: node.padding,
-        paddingBottom: node.padding,
-      });
-    }
-
-    defaults/* default */.Z(node, NODE_DEFAULT_ATTRS);
-
-    forEach/* default */.Z(['paddingLeft', 'paddingRight', 'paddingTop', 'paddingBottom'], function (k) {
-      node[k] = Number(node[k]);
-    });
-
-    // Save dimensions for restore during post-processing
-    if (has/* default */.Z(node, 'width')) {
-      node._prevWidth = node.width;
-    }
-    if (has/* default */.Z(node, 'height')) {
-      node._prevHeight = node.height;
-    }
-  });
-
-  g.edges().forEach(function (e) {
-    var edge = g.edge(e);
-    if (!has/* default */.Z(edge, 'label')) {
-      edge.label = '';
-    }
-    defaults/* default */.Z(edge, EDGE_DEFAULT_ATTRS);
-  });
-}
-
-function postProcessGraph(g) {
-  forEach/* default */.Z(g.nodes(), function (v) {
-    var node = g.node(v);
-
-    // Restore original dimensions
-    if (has/* default */.Z(node, '_prevWidth')) {
-      node.width = node._prevWidth;
-    } else {
-      delete node.width;
-    }
-
-    if (has/* default */.Z(node, '_prevHeight')) {
-      node.height = node._prevHeight;
-    } else {
-      delete node.height;
-    }
-
-    delete node._prevWidth;
-    delete node._prevHeight;
-  });
-}
-
-function createOrSelectGroup(root, name) {
-  var selection = root.select('g.' + name);
-  if (selection.empty()) {
-    selection = root.append('g').attr('class', name);
-  }
-  return selection;
-}
-
-// EXTERNAL MODULE: ./node_modules/dagre-d3-es/src/graphlib/index.js
-var graphlib = __webpack_require__(45625);
-;// CONCATENATED MODULE: ./node_modules/dagre-d3-es/src/index.js
-
-
-
-
-
-
-
-
-/***/ }),
-
-/***/ 92672:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "_Z": () => (/* binding */ gunzipSync),
-  "T8": () => (/* binding */ strFromU8),
-  "TD": () => (/* binding */ strToU8),
-  "GZ": () => (/* binding */ unzipSync),
-  "HT": () => (/* binding */ unzlibSync),
-  "Xo": () => (/* binding */ zipSync)
-});
-
-// UNUSED EXPORTS: AsyncCompress, AsyncDecompress, AsyncDeflate, AsyncGunzip, AsyncGzip, AsyncInflate, AsyncUnzipInflate, AsyncUnzlib, AsyncZipDeflate, AsyncZlib, Compress, DecodeUTF8, Decompress, Deflate, EncodeUTF8, Gunzip, Gzip, Inflate, Unzip, UnzipInflate, UnzipPassThrough, Unzlib, Zip, ZipDeflate, ZipPassThrough, Zlib, compress, compressSync, decompress, decompressSync, deflate, deflateSync, gunzip, gzip, gzipSync, inflate, inflateSync, unzip, unzlib, zip, zlib, zlibSync
-
-;// CONCATENATED MODULE: external "module"
-const external_module_namespaceObject = require("module");
-;// CONCATENATED MODULE: ./node_modules/fflate/esm/index.mjs
-
-var esm_require = (0,external_module_namespaceObject.createRequire)('/');
-// DEFLATE is a complex format; to read this code, you should probably check the RFC first:
-// https://tools.ietf.org/html/rfc1951
-// You may also wish to take a look at the guide I made about this program:
-// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad
-// Some of the following code is similar to that of UZIP.js:
-// https://github.com/photopea/UZIP.js
-// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.
-// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint
-// is better for memory in most engines (I *think*).
-// Mediocre shim
-var Worker;
-var workerAdd = ";var __w=require('worker_threads');__w.parentPort.on('message',function(m){onmessage({data:m})}),postMessage=function(m,t){__w.parentPort.postMessage(m,t)},close=process.exit;self=global";
-try {
-    Worker = esm_require('worker_threads').Worker;
-}
-catch (e) {
-}
-var wk = (/* unused pure expression or super */ null && (Worker ? function (c, _, msg, transfer, cb) {
-    var done = false;
-    var w = new Worker(c + workerAdd, { eval: true })
-        .on('error', function (e) { return cb(e, null); })
-        .on('message', function (m) { return cb(null, m); })
-        .on('exit', function (c) {
-        if (c && !done)
-            cb(new Error('exited with code ' + c), null);
-    });
-    w.postMessage(msg, transfer);
-    w.terminate = function () {
-        done = true;
-        return Worker.prototype.terminate.call(w);
-    };
-    return w;
-} : function (_, __, ___, ____, cb) {
-    setImmediate(function () { return cb(new Error('async operations unsupported - update to Node 12+ (or Node 10-11 with the --experimental-worker CLI flag)'), null); });
-    var NOP = function () { };
-    return {
-        terminate: NOP,
-        postMessage: NOP
-    };
-}));
-
-// aliases for shorter compressed code (most minifers don't do this)
-var u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;
-// fixed length extra bits
-var fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);
-// fixed distance extra bits
-// see fleb note
-var fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);
-// code length index map
-var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
-// get base, reverse index map from extra bits
-var freb = function (eb, start) {
-    var b = new u16(31);
-    for (var i = 0; i < 31; ++i) {
-        b[i] = start += 1 << eb[i - 1];
-    }
-    // numbers here are at max 18 bits
-    var r = new u32(b[30]);
-    for (var i = 1; i < 30; ++i) {
-        for (var j = b[i]; j < b[i + 1]; ++j) {
-            r[j] = ((j - b[i]) << 5) | i;
-        }
-    }
-    return [b, r];
-};
-var _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];
-// we can ignore the fact that the other numbers are wrong; they never happen anyway
-fl[28] = 258, revfl[258] = 28;
-var _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];
-// map of value to reverse (assuming 16 bits)
-var rev = new u16(32768);
-for (var i = 0; i < 32768; ++i) {
-    // reverse table algorithm from SO
-    var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);
-    x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);
-    x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);
-    rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;
-}
-// create huffman tree from u8 "map": index -> code length for code index
-// mb (max bits) must be at most 15
-// TODO: optimize/split up?
-var hMap = (function (cd, mb, r) {
-    var s = cd.length;
-    // index
-    var i = 0;
-    // u16 "map": index -> # of codes with bit length = index
-    var l = new u16(mb);
-    // length of cd must be 288 (total # of codes)
-    for (; i < s; ++i)
-        ++l[cd[i] - 1];
-    // u16 "map": index -> minimum code for bit length = index
-    var le = new u16(mb);
-    for (i = 0; i < mb; ++i) {
-        le[i] = (le[i - 1] + l[i - 1]) << 1;
-    }
-    var co;
-    if (r) {
-        // u16 "map": index -> number of actual bits, symbol for code
-        co = new u16(1 << mb);
-        // bits to remove for reverser
-        var rvb = 15 - mb;
-        for (i = 0; i < s; ++i) {
-            // ignore 0 lengths
-            if (cd[i]) {
-                // num encoding both symbol and bits read
-                var sv = (i << 4) | cd[i];
-                // free bits
-                var r_1 = mb - cd[i];
-                // start value
-                var v = le[cd[i] - 1]++ << r_1;
-                // m is end value
-                for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {
-                    // every 16 bit value starting with the code yields the same result
-                    co[rev[v] >>> rvb] = sv;
-                }
-            }
-        }
-    }
-    else {
-        co = new u16(s);
-        for (i = 0; i < s; ++i) {
-            if (cd[i]) {
-                co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);
-            }
-        }
-    }
-    return co;
-});
-// fixed length tree
-var flt = new u8(288);
-for (var i = 0; i < 144; ++i)
-    flt[i] = 8;
-for (var i = 144; i < 256; ++i)
-    flt[i] = 9;
-for (var i = 256; i < 280; ++i)
-    flt[i] = 7;
-for (var i = 280; i < 288; ++i)
-    flt[i] = 8;
-// fixed distance tree
-var fdt = new u8(32);
-for (var i = 0; i < 32; ++i)
-    fdt[i] = 5;
-// fixed length map
-var flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);
-// fixed distance map
-var fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);
-// find max of array
-var max = function (a) {
-    var m = a[0];
-    for (var i = 1; i < a.length; ++i) {
-        if (a[i] > m)
-            m = a[i];
-    }
-    return m;
-};
-// read d, starting at bit p and mask with m
-var bits = function (d, p, m) {
-    var o = (p / 8) | 0;
-    return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;
-};
-// read d, starting at bit p continuing for at least 16 bits
-var bits16 = function (d, p) {
-    var o = (p / 8) | 0;
-    return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));
-};
-// get end of byte
-var shft = function (p) { return ((p / 8) | 0) + (p & 7 && 1); };
-// typed array slice - allows garbage collector to free original reference,
-// while being more compatible than .slice
-var slc = function (v, s, e) {
-    if (s == null || s < 0)
-        s = 0;
-    if (e == null || e > v.length)
-        e = v.length;
-    // can't use .constructor in case user-supplied
-    var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);
-    n.set(v.subarray(s, e));
-    return n;
-};
-// expands raw DEFLATE data
-var inflt = function (dat, buf, st) {
-    // source length
-    var sl = dat.length;
-    if (!sl || (st && !st.l && sl < 5))
-        return buf || new u8(0);
-    // have to estimate size
-    var noBuf = !buf || st;
-    // no state
-    var noSt = !st || st.i;
-    if (!st)
-        st = {};
-    // Assumes roughly 33% compression ratio average
-    if (!buf)
-        buf = new u8(sl * 3);
-    // ensure buffer can fit at least l elements
-    var cbuf = function (l) {
-        var bl = buf.length;
-        // need to increase size to fit
-        if (l > bl) {
-            // Double or set to necessary, whichever is greater
-            var nbuf = new u8(Math.max(bl * 2, l));
-            nbuf.set(buf);
-            buf = nbuf;
-        }
-    };
-    //  last chunk         bitpos           bytes
-    var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
-    // total bits
-    var tbts = sl * 8;
-    do {
-        if (!lm) {
-            // BFINAL - this is only 1 when last chunk is next
-            st.f = final = bits(dat, pos, 1);
-            // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman
-            var type = bits(dat, pos + 1, 3);
-            pos += 3;
-            if (!type) {
-                // go to end of byte boundary
-                var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;
-                if (t > sl) {
-                    if (noSt)
-                        throw 'unexpected EOF';
-                    break;
-                }
-                // ensure size
-                if (noBuf)
-                    cbuf(bt + l);
-                // Copy over uncompressed data
-                buf.set(dat.subarray(s, t), bt);
-                // Get new bitpos, update byte count
-                st.b = bt += l, st.p = pos = t * 8;
-                continue;
-            }
-            else if (type == 1)
-                lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
-            else if (type == 2) {
-                //  literal                            lengths
-                var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
-                var tl = hLit + bits(dat, pos + 5, 31) + 1;
-                pos += 14;
-                // length+distance tree
-                var ldt = new u8(tl);
-                // code length tree
-                var clt = new u8(19);
-                for (var i = 0; i < hcLen; ++i) {
-                    // use index map to get real code
-                    clt[clim[i]] = bits(dat, pos + i * 3, 7);
-                }
-                pos += hcLen * 3;
-                // code lengths bits
-                var clb = max(clt), clbmsk = (1 << clb) - 1;
-                // code lengths map
-                var clm = hMap(clt, clb, 1);
-                for (var i = 0; i < tl;) {
-                    var r = clm[bits(dat, pos, clbmsk)];
-                    // bits read
-                    pos += r & 15;
-                    // symbol
-                    var s = r >>> 4;
-                    // code length to copy
-                    if (s < 16) {
-                        ldt[i++] = s;
-                    }
-                    else {
-                        //  copy   count
-                        var c = 0, n = 0;
-                        if (s == 16)
-                            n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
-                        else if (s == 17)
-                            n = 3 + bits(dat, pos, 7), pos += 3;
-                        else if (s == 18)
-                            n = 11 + bits(dat, pos, 127), pos += 7;
-                        while (n--)
-                            ldt[i++] = c;
-                    }
-                }
-                //    length tree                 distance tree
-                var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
-                // max length bits
-                lbt = max(lt);
-                // max dist bits
-                dbt = max(dt);
-                lm = hMap(lt, lbt, 1);
-                dm = hMap(dt, dbt, 1);
-            }
-            else
-                throw 'invalid block type';
-            if (pos > tbts) {
-                if (noSt)
-                    throw 'unexpected EOF';
-                break;
-            }
-        }
-        // Make sure the buffer can hold this + the largest possible addition
-        // Maximum chunk size (practically, theoretically infinite) is 2^17;
-        if (noBuf)
-            cbuf(bt + 131072);
-        var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
-        var lpos = pos;
-        for (;; lpos = pos) {
-            // bits read, code
-            var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;
-            pos += c & 15;
-            if (pos > tbts) {
-                if (noSt)
-                    throw 'unexpected EOF';
-                break;
-            }
-            if (!c)
-                throw 'invalid length/literal';
-            if (sym < 256)
-                buf[bt++] = sym;
-            else if (sym == 256) {
-                lpos = pos, lm = null;
-                break;
-            }
-            else {
-                var add = sym - 254;
-                // no extra bits needed if less
-                if (sym > 264) {
-                    // index
-                    var i = sym - 257, b = fleb[i];
-                    add = bits(dat, pos, (1 << b) - 1) + fl[i];
-                    pos += b;
-                }
-                // dist
-                var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;
-                if (!d)
-                    throw 'invalid distance';
-                pos += d & 15;
-                var dt = fd[dsym];
-                if (dsym > 3) {
-                    var b = fdeb[dsym];
-                    dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;
-                }
-                if (pos > tbts) {
-                    if (noSt)
-                        throw 'unexpected EOF';
-                    break;
-                }
-                if (noBuf)
-                    cbuf(bt + 131072);
-                var end = bt + add;
-                for (; bt < end; bt += 4) {
-                    buf[bt] = buf[bt - dt];
-                    buf[bt + 1] = buf[bt + 1 - dt];
-                    buf[bt + 2] = buf[bt + 2 - dt];
-                    buf[bt + 3] = buf[bt + 3 - dt];
-                }
-                bt = end;
-            }
-        }
-        st.l = lm, st.p = lpos, st.b = bt;
-        if (lm)
-            final = 1, st.m = lbt, st.d = dm, st.n = dbt;
-    } while (!final);
-    return bt == buf.length ? buf : slc(buf, 0, bt);
-};
-// starting at p, write the minimum number of bits that can hold v to d
-var wbits = function (d, p, v) {
-    v <<= p & 7;
-    var o = (p / 8) | 0;
-    d[o] |= v;
-    d[o + 1] |= v >>> 8;
-};
-// starting at p, write the minimum number of bits (>8) that can hold v to d
-var wbits16 = function (d, p, v) {
-    v <<= p & 7;
-    var o = (p / 8) | 0;
-    d[o] |= v;
-    d[o + 1] |= v >>> 8;
-    d[o + 2] |= v >>> 16;
-};
-// creates code lengths from a frequency table
-var hTree = function (d, mb) {
-    // Need extra info to make a tree
-    var t = [];
-    for (var i = 0; i < d.length; ++i) {
-        if (d[i])
-            t.push({ s: i, f: d[i] });
-    }
-    var s = t.length;
-    var t2 = t.slice();
-    if (!s)
-        return [et, 0];
-    if (s == 1) {
-        var v = new u8(t[0].s + 1);
-        v[t[0].s] = 1;
-        return [v, 1];
-    }
-    t.sort(function (a, b) { return a.f - b.f; });
-    // after i2 reaches last ind, will be stopped
-    // freq must be greater than largest possible number of symbols
-    t.push({ s: -1, f: 25001 });
-    var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;
-    t[0] = { s: -1, f: l.f + r.f, l: l, r: r };
-    // efficient algorithm from UZIP.js
-    // i0 is lookbehind, i2 is lookahead - after processing two low-freq
-    // symbols that combined have high freq, will start processing i2 (high-freq,
-    // non-composite) symbols instead
-    // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/
-    while (i1 != s - 1) {
-        l = t[t[i0].f < t[i2].f ? i0++ : i2++];
-        r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];
-        t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };
-    }
-    var maxSym = t2[0].s;
-    for (var i = 1; i < s; ++i) {
-        if (t2[i].s > maxSym)
-            maxSym = t2[i].s;
-    }
-    // code lengths
-    var tr = new u16(maxSym + 1);
-    // max bits in tree
-    var mbt = ln(t[i1 - 1], tr, 0);
-    if (mbt > mb) {
-        // more algorithms from UZIP.js
-        // TODO: find out how this code works (debt)
-        //  ind    debt
-        var i = 0, dt = 0;
-        //    left            cost
-        var lft = mbt - mb, cst = 1 << lft;
-        t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });
-        for (; i < s; ++i) {
-            var i2_1 = t2[i].s;
-            if (tr[i2_1] > mb) {
-                dt += cst - (1 << (mbt - tr[i2_1]));
-                tr[i2_1] = mb;
-            }
-            else
-                break;
-        }
-        dt >>>= lft;
-        while (dt > 0) {
-            var i2_2 = t2[i].s;
-            if (tr[i2_2] < mb)
-                dt -= 1 << (mb - tr[i2_2]++ - 1);
-            else
-                ++i;
-        }
-        for (; i >= 0 && dt; --i) {
-            var i2_3 = t2[i].s;
-            if (tr[i2_3] == mb) {
-                --tr[i2_3];
-                ++dt;
-            }
-        }
-        mbt = mb;
-    }
-    return [new u8(tr), mbt];
-};
-// get the max length and assign length codes
-var ln = function (n, l, d) {
-    return n.s == -1
-        ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))
-        : (l[n.s] = d);
-};
-// length codes generation
-var lc = function (c) {
-    var s = c.length;
-    // Note that the semicolon was intentional
-    while (s && !c[--s])
-        ;
-    var cl = new u16(++s);
-    //  ind      num         streak
-    var cli = 0, cln = c[0], cls = 1;
-    var w = function (v) { cl[cli++] = v; };
-    for (var i = 1; i <= s; ++i) {
-        if (c[i] == cln && i != s)
-            ++cls;
-        else {
-            if (!cln && cls > 2) {
-                for (; cls > 138; cls -= 138)
-                    w(32754);
-                if (cls > 2) {
-                    w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);
-                    cls = 0;
-                }
-            }
-            else if (cls > 3) {
-                w(cln), --cls;
-                for (; cls > 6; cls -= 6)
-                    w(8304);
-                if (cls > 2)
-                    w(((cls - 3) << 5) | 8208), cls = 0;
-            }
-            while (cls--)
-                w(cln);
-            cls = 1;
-            cln = c[i];
-        }
-    }
-    return [cl.subarray(0, cli), s];
-};
-// calculate the length of output from tree, code lengths
-var clen = function (cf, cl) {
-    var l = 0;
-    for (var i = 0; i < cl.length; ++i)
-        l += cf[i] * cl[i];
-    return l;
-};
-// writes a fixed block
-// returns the new bit pos
-var wfblk = function (out, pos, dat) {
-    // no need to write 00 as type: TypedArray defaults to 0
-    var s = dat.length;
-    var o = shft(pos + 2);
-    out[o] = s & 255;
-    out[o + 1] = s >>> 8;
-    out[o + 2] = out[o] ^ 255;
-    out[o + 3] = out[o + 1] ^ 255;
-    for (var i = 0; i < s; ++i)
-        out[o + i + 4] = dat[i];
-    return (o + 4 + s) * 8;
-};
-// writes a block
-var wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {
-    wbits(out, p++, final);
-    ++lf[256];
-    var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];
-    var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];
-    var _c = lc(dlt), lclt = _c[0], nlc = _c[1];
-    var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];
-    var lcfreq = new u16(19);
-    for (var i = 0; i < lclt.length; ++i)
-        lcfreq[lclt[i] & 31]++;
-    for (var i = 0; i < lcdt.length; ++i)
-        lcfreq[lcdt[i] & 31]++;
-    var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];
-    var nlcc = 19;
-    for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)
-        ;
-    var flen = (bl + 5) << 3;
-    var ftlen = clen(lf, flt) + clen(df, fdt) + eb;
-    var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);
-    if (flen <= ftlen && flen <= dtlen)
-        return wfblk(out, p, dat.subarray(bs, bs + bl));
-    var lm, ll, dm, dl;
-    wbits(out, p, 1 + (dtlen < ftlen)), p += 2;
-    if (dtlen < ftlen) {
-        lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;
-        var llm = hMap(lct, mlcb, 0);
-        wbits(out, p, nlc - 257);
-        wbits(out, p + 5, ndc - 1);
-        wbits(out, p + 10, nlcc - 4);
-        p += 14;
-        for (var i = 0; i < nlcc; ++i)
-            wbits(out, p + 3 * i, lct[clim[i]]);
-        p += 3 * nlcc;
-        var lcts = [lclt, lcdt];
-        for (var it = 0; it < 2; ++it) {
-            var clct = lcts[it];
-            for (var i = 0; i < clct.length; ++i) {
-                var len = clct[i] & 31;
-                wbits(out, p, llm[len]), p += lct[len];
-                if (len > 15)
-                    wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;
-            }
-        }
-    }
-    else {
-        lm = flm, ll = flt, dm = fdm, dl = fdt;
-    }
-    for (var i = 0; i < li; ++i) {
-        if (syms[i] > 255) {
-            var len = (syms[i] >>> 18) & 31;
-            wbits16(out, p, lm[len + 257]), p += ll[len + 257];
-            if (len > 7)
-                wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];
-            var dst = syms[i] & 31;
-            wbits16(out, p, dm[dst]), p += dl[dst];
-            if (dst > 3)
-                wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];
-        }
-        else {
-            wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];
-        }
-    }
-    wbits16(out, p, lm[256]);
-    return p + ll[256];
-};
-// deflate options (nice << 13) | chain
-var deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);
-// empty
-var et = /*#__PURE__*/ new u8(0);
-// compresses data into a raw DEFLATE buffer
-var dflt = function (dat, lvl, plvl, pre, post, lst) {
-    var s = dat.length;
-    var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);
-    // writing to this writes to the output buffer
-    var w = o.subarray(pre, o.length - post);
-    var pos = 0;
-    if (!lvl || s < 8) {
-        for (var i = 0; i <= s; i += 65535) {
-            // end
-            var e = i + 65535;
-            if (e < s) {
-                // write full block
-                pos = wfblk(w, pos, dat.subarray(i, e));
-            }
-            else {
-                // write final block
-                w[i] = lst;
-                pos = wfblk(w, pos, dat.subarray(i, s));
-            }
-        }
-    }
-    else {
-        var opt = deo[lvl - 1];
-        var n = opt >>> 13, c = opt & 8191;
-        var msk_1 = (1 << plvl) - 1;
-        //    prev 2-byte val map    curr 2-byte val map
-        var prev = new u16(32768), head = new u16(msk_1 + 1);
-        var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;
-        var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };
-        // 24576 is an arbitrary number of maximum symbols per block
-        // 424 buffer for last block
-        var syms = new u32(25000);
-        // length/literal freq   distance freq
-        var lf = new u16(288), df = new u16(32);
-        //  l/lcnt  exbits  index  l/lind  waitdx  bitpos
-        var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;
-        for (; i < s; ++i) {
-            // hash value
-            // deopt when i > s - 3 - at end, deopt acceptable
-            var hv = hsh(i);
-            // index mod 32768    previous index mod
-            var imod = i & 32767, pimod = head[hv];
-            prev[imod] = pimod;
-            head[hv] = imod;
-            // We always should modify head and prev, but only add symbols if
-            // this data is not yet processed ("wait" for wait index)
-            if (wi <= i) {
-                // bytes remaining
-                var rem = s - i;
-                if ((lc_1 > 7000 || li > 24576) && rem > 423) {
-                    pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);
-                    li = lc_1 = eb = 0, bs = i;
-                    for (var j = 0; j < 286; ++j)
-                        lf[j] = 0;
-                    for (var j = 0; j < 30; ++j)
-                        df[j] = 0;
-                }
-                //  len    dist   chain
-                var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;
-                if (rem > 2 && hv == hsh(i - dif)) {
-                    var maxn = Math.min(n, rem) - 1;
-                    var maxd = Math.min(32767, i);
-                    // max possible length
-                    // not capped at dif because decompressors implement "rolling" index population
-                    var ml = Math.min(258, rem);
-                    while (dif <= maxd && --ch_1 && imod != pimod) {
-                        if (dat[i + l] == dat[i + l - dif]) {
-                            var nl = 0;
-                            for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)
-                                ;
-                            if (nl > l) {
-                                l = nl, d = dif;
-                                // break out early when we reach "nice" (we are satisfied enough)
-                                if (nl > maxn)
-                                    break;
-                                // now, find the rarest 2-byte sequence within this
-                                // length of literals and search for that instead.
-                                // Much faster than just using the start
-                                var mmd = Math.min(dif, nl - 2);
-                                var md = 0;
-                                for (var j = 0; j < mmd; ++j) {
-                                    var ti = (i - dif + j + 32768) & 32767;
-                                    var pti = prev[ti];
-                                    var cd = (ti - pti + 32768) & 32767;
-                                    if (cd > md)
-                                        md = cd, pimod = ti;
-                                }
-                            }
-                        }
-                        // check the previous match
-                        imod = pimod, pimod = prev[imod];
-                        dif += (imod - pimod + 32768) & 32767;
-                    }
-                }
-                // d will be nonzero only when a match was found
-                if (d) {
-                    // store both dist and len data in one Uint32
-                    // Make sure this is recognized as a len/dist with 28th bit (2^28)
-                    syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];
-                    var lin = revfl[l] & 31, din = revfd[d] & 31;
-                    eb += fleb[lin] + fdeb[din];
-                    ++lf[257 + lin];
-                    ++df[din];
-                    wi = i + l;
-                    ++lc_1;
-                }
-                else {
-                    syms[li++] = dat[i];
-                    ++lf[dat[i]];
-                }
-            }
-        }
-        pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);
-        // this is the easiest way to avoid needing to maintain state
-        if (!lst && pos & 7)
-            pos = wfblk(w, pos + 1, et);
-    }
-    return slc(o, 0, pre + shft(pos) + post);
-};
-// CRC32 table
-var crct = /*#__PURE__*/ (function () {
-    var t = new Int32Array(256);
-    for (var i = 0; i < 256; ++i) {
-        var c = i, k = 9;
-        while (--k)
-            c = ((c & 1) && -306674912) ^ (c >>> 1);
-        t[i] = c;
-    }
-    return t;
-})();
-// CRC32
-var crc = function () {
-    var c = -1;
-    return {
-        p: function (d) {
-            // closures have awful performance
-            var cr = c;
-            for (var i = 0; i < d.length; ++i)
-                cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);
-            c = cr;
-        },
-        d: function () { return ~c; }
-    };
-};
-// Alder32
-var adler = function () {
-    var a = 1, b = 0;
-    return {
-        p: function (d) {
-            // closures have awful performance
-            var n = a, m = b;
-            var l = d.length;
-            for (var i = 0; i != l;) {
-                var e = Math.min(i + 2655, l);
-                for (; i < e; ++i)
-                    m += n += d[i];
-                n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);
-            }
-            a = n, b = m;
-        },
-        d: function () {
-            a %= 65521, b %= 65521;
-            return (a & 255) << 24 | (a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8);
-        }
-    };
-};
-;
-// deflate with opts
-var dopt = function (dat, opt, pre, post, st) {
-    return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);
-};
-// Walmart object spread
-var mrg = function (a, b) {
-    var o = {};
-    for (var k in a)
-        o[k] = a[k];
-    for (var k in b)
-        o[k] = b[k];
-    return o;
-};
-// worker clone
-// This is possibly the craziest part of the entire codebase, despite how simple it may seem.
-// The only parameter to this function is a closure that returns an array of variables outside of the function scope.
-// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.
-// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).
-// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.
-// This took me three weeks to figure out how to do.
-var wcln = function (fn, fnStr, td) {
-    var dt = fn();
-    var st = fn.toString();
-    var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/ /g, '').split(',');
-    for (var i = 0; i < dt.length; ++i) {
-        var v = dt[i], k = ks[i];
-        if (typeof v == 'function') {
-            fnStr += ';' + k + '=';
-            var st_1 = v.toString();
-            if (v.prototype) {
-                // for global objects
-                if (st_1.indexOf('[native code]') != -1) {
-                    var spInd = st_1.indexOf(' ', 8) + 1;
-                    fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));
-                }
-                else {
-                    fnStr += st_1;
-                    for (var t in v.prototype)
-                        fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();
-                }
-            }
-            else
-                fnStr += st_1;
-        }
-        else
-            td[k] = v;
-    }
-    return [fnStr, td];
-};
-var ch = (/* unused pure expression or super */ null && ([]));
-// clone bufs
-var cbfs = function (v) {
-    var tl = [];
-    for (var k in v) {
-        if (v[k] instanceof u8 || v[k] instanceof u16 || v[k] instanceof u32)
-            tl.push((v[k] = new v[k].constructor(v[k])).buffer);
-    }
-    return tl;
-};
-// use a worker to execute code
-var wrkr = function (fns, init, id, cb) {
-    var _a;
-    if (!ch[id]) {
-        var fnStr = '', td_1 = {}, m = fns.length - 1;
-        for (var i = 0; i < m; ++i)
-            _a = wcln(fns[i], fnStr, td_1), fnStr = _a[0], td_1 = _a[1];
-        ch[id] = wcln(fns[m], fnStr, td_1);
-    }
-    var td = mrg({}, ch[id][1]);
-    return wk(ch[id][0] + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);
-};
-// base async inflate fn
-var bInflt = function () { return [u8, u16, u32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, hMap, max, bits, bits16, shft, slc, inflt, inflateSync, pbf, gu8]; };
-var bDflt = function () { return [u8, u16, u32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };
-// gzip extra
-var gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };
-// gunzip extra
-var guze = function () { return [gzs, gzl]; };
-// zlib extra
-var zle = function () { return [zlh, wbytes, adler]; };
-// unzlib extra
-var zule = function () { return [zlv]; };
-// post buf
-var pbf = function (msg) { return postMessage(msg, [msg.buffer]); };
-// get u8
-var gu8 = function (o) { return o && o.size && new u8(o.size); };
-// async helper
-var cbify = function (dat, opts, fns, init, id, cb) {
-    var w = wrkr(fns, init, id, function (err, dat) {
-        w.terminate();
-        cb(err, dat);
-    });
-    w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);
-    return function () { w.terminate(); };
-};
-// auto stream
-var astrm = function (strm) {
-    strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };
-    return function (ev) { return strm.push(ev.data[0], ev.data[1]); };
-};
-// async stream attach
-var astrmify = function (fns, strm, opts, init, id) {
-    var t;
-    var w = wrkr(fns, init, id, function (err, dat) {
-        if (err)
-            w.terminate(), strm.ondata.call(strm, err);
-        else {
-            if (dat[1])
-                w.terminate();
-            strm.ondata.call(strm, err, dat[0], dat[1]);
-        }
-    });
-    w.postMessage(opts);
-    strm.push = function (d, f) {
-        if (t)
-            throw 'stream finished';
-        if (!strm.ondata)
-            throw 'no stream handler';
-        w.postMessage([d, t = f], [d.buffer]);
-    };
-    strm.terminate = function () { w.terminate(); };
-};
-// read 2 bytes
-var b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };
-// read 4 bytes
-var b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };
-var b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };
-// write bytes
-var wbytes = function (d, b, v) {
-    for (; v; ++b)
-        d[b] = v, v >>>= 8;
-};
-// gzip header
-var gzh = function (c, o) {
-    var fn = o.filename;
-    c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix
-    if (o.mtime != 0)
-        wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));
-    if (fn) {
-        c[3] = 8;
-        for (var i = 0; i <= fn.length; ++i)
-            c[i + 10] = fn.charCodeAt(i);
-    }
-};
-// gzip footer: -8 to -4 = CRC, -4 to -0 is length
-// gzip start
-var gzs = function (d) {
-    if (d[0] != 31 || d[1] != 139 || d[2] != 8)
-        throw 'invalid gzip data';
-    var flg = d[3];
-    var st = 10;
-    if (flg & 4)
-        st += d[10] | (d[11] << 8) + 2;
-    for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])
-        ;
-    return st + (flg & 2);
-};
-// gzip length
-var gzl = function (d) {
-    var l = d.length;
-    return ((d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16) | (d[l - 1] << 24)) >>> 0;
-};
-// gzip header length
-var gzhl = function (o) { return 10 + ((o.filename && (o.filename.length + 1)) || 0); };
-// zlib header
-var zlh = function (c, o) {
-    var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;
-    c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);
-};
-// zlib valid
-var zlv = function (d) {
-    if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))
-        throw 'invalid zlib data';
-    if (d[1] & 32)
-        throw 'invalid zlib data: preset dictionaries not supported';
-};
-function AsyncCmpStrm(opts, cb) {
-    if (!cb && typeof opts == 'function')
-        cb = opts, opts = {};
-    this.ondata = cb;
-    return opts;
-}
-// zlib footer: -4 to -0 is Adler32
-/**
- * Streaming DEFLATE compression
- */
-var Deflate = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    function Deflate(opts, cb) {
-        if (!cb && typeof opts == 'function')
-            cb = opts, opts = {};
-        this.ondata = cb;
-        this.o = opts || {};
-    }
-    Deflate.prototype.p = function (c, f) {
-        this.ondata(dopt(c, this.o, 0, 0, !f), f);
-    };
-    /**
-     * Pushes a chunk to be deflated
-     * @param chunk The chunk to push
-     * @param final Whether this is the last chunk
-     */
-    Deflate.prototype.push = function (chunk, final) {
-        if (this.d)
-            throw 'stream finished';
-        if (!this.ondata)
-            throw 'no stream handler';
-        this.d = final;
-        this.p(chunk, final || false);
-    };
-    return Deflate;
-}())));
-
-/**
- * Asynchronous streaming DEFLATE compression
- */
-var AsyncDeflate = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    function AsyncDeflate(opts, cb) {
-        astrmify([
-            bDflt,
-            function () { return [astrm, Deflate]; }
-        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {
-            var strm = new Deflate(ev.data);
-            onmessage = astrm(strm);
-        }, 6);
-    }
-    return AsyncDeflate;
-}())));
-
-function deflate(data, opts, cb) {
-    if (!cb)
-        cb = opts, opts = {};
-    if (typeof cb != 'function')
-        throw 'no callback';
-    return cbify(data, opts, [
-        bDflt,
-    ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);
-}
-/**
- * Compresses data with DEFLATE without any wrapper
- * @param data The data to compress
- * @param opts The compression options
- * @returns The deflated version of the data
- */
-function deflateSync(data, opts) {
-    return dopt(data, opts || {}, 0, 0);
-}
-/**
- * Streaming DEFLATE decompression
- */
-var Inflate = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates an inflation stream
-     * @param cb The callback to call whenever data is inflated
-     */
-    function Inflate(cb) {
-        this.s = {};
-        this.p = new u8(0);
-        this.ondata = cb;
-    }
-    Inflate.prototype.e = function (c) {
-        if (this.d)
-            throw 'stream finished';
-        if (!this.ondata)
-            throw 'no stream handler';
-        var l = this.p.length;
-        var n = new u8(l + c.length);
-        n.set(this.p), n.set(c, l), this.p = n;
-    };
-    Inflate.prototype.c = function (final) {
-        this.d = this.s.i = final || false;
-        var bts = this.s.b;
-        var dt = inflt(this.p, this.o, this.s);
-        this.ondata(slc(dt, bts, this.s.b), this.d);
-        this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;
-        this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;
-    };
-    /**
-     * Pushes a chunk to be inflated
-     * @param chunk The chunk to push
-     * @param final Whether this is the final chunk
-     */
-    Inflate.prototype.push = function (chunk, final) {
-        this.e(chunk), this.c(final);
-    };
-    return Inflate;
-}())));
-
-/**
- * Asynchronous streaming DEFLATE decompression
- */
-var AsyncInflate = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates an asynchronous inflation stream
-     * @param cb The callback to call whenever data is deflated
-     */
-    function AsyncInflate(cb) {
-        this.ondata = cb;
-        astrmify([
-            bInflt,
-            function () { return [astrm, Inflate]; }
-        ], this, 0, function () {
-            var strm = new Inflate();
-            onmessage = astrm(strm);
-        }, 7);
-    }
-    return AsyncInflate;
-}())));
-
-function inflate(data, opts, cb) {
-    if (!cb)
-        cb = opts, opts = {};
-    if (typeof cb != 'function')
-        throw 'no callback';
-    return cbify(data, opts, [
-        bInflt
-    ], function (ev) { return pbf(inflateSync(ev.data[0], gu8(ev.data[1]))); }, 1, cb);
-}
-/**
- * Expands DEFLATE data with no wrapper
- * @param data The data to decompress
- * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.
- * @returns The decompressed version of the data
- */
-function inflateSync(data, out) {
-    return inflt(data, out);
-}
-// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.
-/**
- * Streaming GZIP compression
- */
-var Gzip = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    function Gzip(opts, cb) {
-        this.c = crc();
-        this.l = 0;
-        this.v = 1;
-        Deflate.call(this, opts, cb);
-    }
-    /**
-     * Pushes a chunk to be GZIPped
-     * @param chunk The chunk to push
-     * @param final Whether this is the last chunk
-     */
-    Gzip.prototype.push = function (chunk, final) {
-        Deflate.prototype.push.call(this, chunk, final);
-    };
-    Gzip.prototype.p = function (c, f) {
-        this.c.p(c);
-        this.l += c.length;
-        var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, !f);
-        if (this.v)
-            gzh(raw, this.o), this.v = 0;
-        if (f)
-            wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);
-        this.ondata(raw, f);
-    };
-    return Gzip;
-}())));
-
-/**
- * Asynchronous streaming GZIP compression
- */
-var AsyncGzip = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    function AsyncGzip(opts, cb) {
-        astrmify([
-            bDflt,
-            gze,
-            function () { return [astrm, Deflate, Gzip]; }
-        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {
-            var strm = new Gzip(ev.data);
-            onmessage = astrm(strm);
-        }, 8);
-    }
-    return AsyncGzip;
-}())));
-
-function gzip(data, opts, cb) {
-    if (!cb)
-        cb = opts, opts = {};
-    if (typeof cb != 'function')
-        throw 'no callback';
-    return cbify(data, opts, [
-        bDflt,
-        gze,
-        function () { return [gzipSync]; }
-    ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);
-}
-/**
- * Compresses data with GZIP
- * @param data The data to compress
- * @param opts The compression options
- * @returns The gzipped version of the data
- */
-function gzipSync(data, opts) {
-    if (!opts)
-        opts = {};
-    var c = crc(), l = data.length;
-    c.p(data);
-    var d = dopt(data, opts, gzhl(opts), 8), s = d.length;
-    return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;
-}
-/**
- * Streaming GZIP decompression
- */
-var Gunzip = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates a GUNZIP stream
-     * @param cb The callback to call whenever data is inflated
-     */
-    function Gunzip(cb) {
-        this.v = 1;
-        Inflate.call(this, cb);
-    }
-    /**
-     * Pushes a chunk to be GUNZIPped
-     * @param chunk The chunk to push
-     * @param final Whether this is the last chunk
-     */
-    Gunzip.prototype.push = function (chunk, final) {
-        Inflate.prototype.e.call(this, chunk);
-        if (this.v) {
-            var s = this.p.length > 3 ? gzs(this.p) : 4;
-            if (s >= this.p.length && !final)
-                return;
-            this.p = this.p.subarray(s), this.v = 0;
-        }
-        if (final) {
-            if (this.p.length < 8)
-                throw 'invalid gzip stream';
-            this.p = this.p.subarray(0, -8);
-        }
-        // necessary to prevent TS from using the closure value
-        // This allows for workerization to function correctly
-        Inflate.prototype.c.call(this, final);
-    };
-    return Gunzip;
-}())));
-
-/**
- * Asynchronous streaming GZIP decompression
- */
-var AsyncGunzip = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates an asynchronous GUNZIP stream
-     * @param cb The callback to call whenever data is deflated
-     */
-    function AsyncGunzip(cb) {
-        this.ondata = cb;
-        astrmify([
-            bInflt,
-            guze,
-            function () { return [astrm, Inflate, Gunzip]; }
-        ], this, 0, function () {
-            var strm = new Gunzip();
-            onmessage = astrm(strm);
-        }, 9);
-    }
-    return AsyncGunzip;
-}())));
-
-function gunzip(data, opts, cb) {
-    if (!cb)
-        cb = opts, opts = {};
-    if (typeof cb != 'function')
-        throw 'no callback';
-    return cbify(data, opts, [
-        bInflt,
-        guze,
-        function () { return [gunzipSync]; }
-    ], function (ev) { return pbf(gunzipSync(ev.data[0])); }, 3, cb);
-}
-/**
- * Expands GZIP data
- * @param data The data to decompress
- * @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory.
- * @returns The decompressed version of the data
- */
-function gunzipSync(data, out) {
-    return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data)));
-}
-/**
- * Streaming Zlib compression
- */
-var Zlib = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    function Zlib(opts, cb) {
-        this.c = adler();
-        this.v = 1;
-        Deflate.call(this, opts, cb);
-    }
-    /**
-     * Pushes a chunk to be zlibbed
-     * @param chunk The chunk to push
-     * @param final Whether this is the last chunk
-     */
-    Zlib.prototype.push = function (chunk, final) {
-        Deflate.prototype.push.call(this, chunk, final);
-    };
-    Zlib.prototype.p = function (c, f) {
-        this.c.p(c);
-        var raw = dopt(c, this.o, this.v && 2, f && 4, !f);
-        if (this.v)
-            zlh(raw, this.o), this.v = 0;
-        if (f)
-            wbytes(raw, raw.length - 4, this.c.d());
-        this.ondata(raw, f);
-    };
-    return Zlib;
-}())));
-
-/**
- * Asynchronous streaming Zlib compression
- */
-var AsyncZlib = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    function AsyncZlib(opts, cb) {
-        astrmify([
-            bDflt,
-            zle,
-            function () { return [astrm, Deflate, Zlib]; }
-        ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {
-            var strm = new Zlib(ev.data);
-            onmessage = astrm(strm);
-        }, 10);
-    }
-    return AsyncZlib;
-}())));
-
-function zlib(data, opts, cb) {
-    if (!cb)
-        cb = opts, opts = {};
-    if (typeof cb != 'function')
-        throw 'no callback';
-    return cbify(data, opts, [
-        bDflt,
-        zle,
-        function () { return [zlibSync]; }
-    ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);
-}
-/**
- * Compress data with Zlib
- * @param data The data to compress
- * @param opts The compression options
- * @returns The zlib-compressed version of the data
- */
-function zlibSync(data, opts) {
-    if (!opts)
-        opts = {};
-    var a = adler();
-    a.p(data);
-    var d = dopt(data, opts, 2, 4);
-    return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;
-}
-/**
- * Streaming Zlib decompression
- */
-var Unzlib = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates a Zlib decompression stream
-     * @param cb The callback to call whenever data is inflated
-     */
-    function Unzlib(cb) {
-        this.v = 1;
-        Inflate.call(this, cb);
-    }
-    /**
-     * Pushes a chunk to be unzlibbed
-     * @param chunk The chunk to push
-     * @param final Whether this is the last chunk
-     */
-    Unzlib.prototype.push = function (chunk, final) {
-        Inflate.prototype.e.call(this, chunk);
-        if (this.v) {
-            if (this.p.length < 2 && !final)
-                return;
-            this.p = this.p.subarray(2), this.v = 0;
-        }
-        if (final) {
-            if (this.p.length < 4)
-                throw 'invalid zlib stream';
-            this.p = this.p.subarray(0, -4);
-        }
-        // necessary to prevent TS from using the closure value
-        // This allows for workerization to function correctly
-        Inflate.prototype.c.call(this, final);
-    };
-    return Unzlib;
-}())));
-
-/**
- * Asynchronous streaming Zlib decompression
- */
-var AsyncUnzlib = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates an asynchronous Zlib decompression stream
-     * @param cb The callback to call whenever data is deflated
-     */
-    function AsyncUnzlib(cb) {
-        this.ondata = cb;
-        astrmify([
-            bInflt,
-            zule,
-            function () { return [astrm, Inflate, Unzlib]; }
-        ], this, 0, function () {
-            var strm = new Unzlib();
-            onmessage = astrm(strm);
-        }, 11);
-    }
-    return AsyncUnzlib;
-}())));
-
-function unzlib(data, opts, cb) {
-    if (!cb)
-        cb = opts, opts = {};
-    if (typeof cb != 'function')
-        throw 'no callback';
-    return cbify(data, opts, [
-        bInflt,
-        zule,
-        function () { return [unzlibSync]; }
-    ], function (ev) { return pbf(unzlibSync(ev.data[0], gu8(ev.data[1]))); }, 5, cb);
-}
-/**
- * Expands Zlib data
- * @param data The data to decompress
- * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.
- * @returns The decompressed version of the data
- */
-function unzlibSync(data, out) {
-    return inflt((zlv(data), data.subarray(2, -4)), out);
-}
-// Default algorithm for compression (used because having a known output size allows faster decompression)
-
-// Default algorithm for compression (used because having a known output size allows faster decompression)
-
-/**
- * Streaming GZIP, Zlib, or raw DEFLATE decompression
- */
-var Decompress = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates a decompression stream
-     * @param cb The callback to call whenever data is decompressed
-     */
-    function Decompress(cb) {
-        this.G = Gunzip;
-        this.I = Inflate;
-        this.Z = Unzlib;
-        this.ondata = cb;
-    }
-    /**
-     * Pushes a chunk to be decompressed
-     * @param chunk The chunk to push
-     * @param final Whether this is the last chunk
-     */
-    Decompress.prototype.push = function (chunk, final) {
-        if (!this.ondata)
-            throw 'no stream handler';
-        if (!this.s) {
-            if (this.p && this.p.length) {
-                var n = new u8(this.p.length + chunk.length);
-                n.set(this.p), n.set(chunk, this.p.length);
-            }
-            else
-                this.p = chunk;
-            if (this.p.length > 2) {
-                var _this_1 = this;
-                var cb = function () { _this_1.ondata.apply(_this_1, arguments); };
-                this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)
-                    ? new this.G(cb)
-                    : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))
-                        ? new this.I(cb)
-                        : new this.Z(cb);
-                this.s.push(this.p, final);
-                this.p = null;
-            }
-        }
-        else
-            this.s.push(chunk, final);
-    };
-    return Decompress;
-}())));
-
-/**
- * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression
- */
-var AsyncDecompress = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-   * Creates an asynchronous decompression stream
-   * @param cb The callback to call whenever data is decompressed
-   */
-    function AsyncDecompress(cb) {
-        this.G = AsyncGunzip;
-        this.I = AsyncInflate;
-        this.Z = AsyncUnzlib;
-        this.ondata = cb;
-    }
-    /**
-     * Pushes a chunk to be decompressed
-     * @param chunk The chunk to push
-     * @param final Whether this is the last chunk
-     */
-    AsyncDecompress.prototype.push = function (chunk, final) {
-        Decompress.prototype.push.call(this, chunk, final);
-    };
-    return AsyncDecompress;
-}())));
-
-function decompress(data, opts, cb) {
-    if (!cb)
-        cb = opts, opts = {};
-    if (typeof cb != 'function')
-        throw 'no callback';
-    return (data[0] == 31 && data[1] == 139 && data[2] == 8)
-        ? gunzip(data, opts, cb)
-        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))
-            ? inflate(data, opts, cb)
-            : unzlib(data, opts, cb);
-}
-/**
- * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format
- * @param data The data to decompress
- * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.
- * @returns The decompressed version of the data
- */
-function decompressSync(data, out) {
-    return (data[0] == 31 && data[1] == 139 && data[2] == 8)
-        ? gunzipSync(data, out)
-        : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))
-            ? inflateSync(data, out)
-            : unzlibSync(data, out);
-}
-// flatten a directory structure
-var fltn = function (d, p, t, o) {
-    for (var k in d) {
-        var val = d[k], n = p + k;
-        if (val instanceof u8)
-            t[n] = [val, o];
-        else if (Array.isArray(val))
-            t[n] = [val[0], mrg(o, val[1])];
-        else
-            fltn(val, n + '/', t, o);
-    }
-};
-// text encoder
-var te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();
-// text decoder
-var td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();
-// text decoder stream
-var tds = 0;
-try {
-    td.decode(et, { stream: true });
-    tds = 1;
-}
-catch (e) { }
-// decode UTF8
-var dutf8 = function (d) {
-    for (var r = '', i = 0;;) {
-        var c = d[i++];
-        var eb = (c > 127) + (c > 223) + (c > 239);
-        if (i + eb > d.length)
-            return [r, slc(d, i - 1)];
-        if (!eb)
-            r += String.fromCharCode(c);
-        else if (eb == 3) {
-            c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,
-                r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));
-        }
-        else if (eb & 1)
-            r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));
-        else
-            r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));
-    }
-};
-/**
- * Streaming UTF-8 decoding
- */
-var DecodeUTF8 = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates a UTF-8 decoding stream
-     * @param cb The callback to call whenever data is decoded
-     */
-    function DecodeUTF8(cb) {
-        this.ondata = cb;
-        if (tds)
-            this.t = new TextDecoder();
-        else
-            this.p = et;
-    }
-    /**
-     * Pushes a chunk to be decoded from UTF-8 binary
-     * @param chunk The chunk to push
-     * @param final Whether this is the last chunk
-     */
-    DecodeUTF8.prototype.push = function (chunk, final) {
-        if (!this.ondata)
-            throw 'no callback';
-        final = !!final;
-        if (this.t) {
-            this.ondata(this.t.decode(chunk, { stream: true }), final);
-            if (final) {
-                if (this.t.decode().length)
-                    throw 'invalid utf-8 data';
-                this.t = null;
-            }
-            return;
-        }
-        if (!this.p)
-            throw 'stream finished';
-        var dat = new u8(this.p.length + chunk.length);
-        dat.set(this.p);
-        dat.set(chunk, this.p.length);
-        var _a = dutf8(dat), ch = _a[0], np = _a[1];
-        if (final) {
-            if (np.length)
-                throw 'invalid utf-8 data';
-            this.p = null;
-        }
-        else
-            this.p = np;
-        this.ondata(ch, final);
-    };
-    return DecodeUTF8;
-}())));
-
-/**
- * Streaming UTF-8 encoding
- */
-var EncodeUTF8 = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates a UTF-8 decoding stream
-     * @param cb The callback to call whenever data is encoded
-     */
-    function EncodeUTF8(cb) {
-        this.ondata = cb;
-    }
-    /**
-     * Pushes a chunk to be encoded to UTF-8
-     * @param chunk The string data to push
-     * @param final Whether this is the last chunk
-     */
-    EncodeUTF8.prototype.push = function (chunk, final) {
-        if (!this.ondata)
-            throw 'no callback';
-        if (this.d)
-            throw 'stream finished';
-        this.ondata(strToU8(chunk), this.d = final || false);
-    };
-    return EncodeUTF8;
-}())));
-
-/**
- * Converts a string into a Uint8Array for use with compression/decompression methods
- * @param str The string to encode
- * @param latin1 Whether or not to interpret the data as Latin-1. This should
- *               not need to be true unless decoding a binary string.
- * @returns The string encoded in UTF-8/Latin-1 binary
- */
-function strToU8(str, latin1) {
-    if (latin1) {
-        var ar_1 = new u8(str.length);
-        for (var i = 0; i < str.length; ++i)
-            ar_1[i] = str.charCodeAt(i);
-        return ar_1;
-    }
-    if (te)
-        return te.encode(str);
-    var l = str.length;
-    var ar = new u8(str.length + (str.length >> 1));
-    var ai = 0;
-    var w = function (v) { ar[ai++] = v; };
-    for (var i = 0; i < l; ++i) {
-        if (ai + 5 > ar.length) {
-            var n = new u8(ai + 8 + ((l - i) << 1));
-            n.set(ar);
-            ar = n;
-        }
-        var c = str.charCodeAt(i);
-        if (c < 128 || latin1)
-            w(c);
-        else if (c < 2048)
-            w(192 | (c >> 6)), w(128 | (c & 63));
-        else if (c > 55295 && c < 57344)
-            c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),
-                w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));
-        else
-            w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));
-    }
-    return slc(ar, 0, ai);
-}
-/**
- * Converts a Uint8Array to a string
- * @param dat The data to decode to string
- * @param latin1 Whether or not to interpret the data as Latin-1. This should
- *               not need to be true unless encoding to binary string.
- * @returns The original UTF-8/Latin-1 string
- */
-function strFromU8(dat, latin1) {
-    if (latin1) {
-        var r = '';
-        for (var i = 0; i < dat.length; i += 16384)
-            r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));
-        return r;
-    }
-    else if (td)
-        return td.decode(dat);
-    else {
-        var _a = dutf8(dat), out = _a[0], ext = _a[1];
-        if (ext.length)
-            throw 'invalid utf-8 data';
-        return out;
-    }
-}
-;
-// deflate bit flag
-var dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };
-// skip local zip header
-var slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };
-// read zip header
-var zh = function (d, b, z) {
-    var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);
-    var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];
-    return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];
-};
-// read zip64 extra field
-var z64e = function (d, b) {
-    for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))
-        ;
-    return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];
-};
-// extra field length
-var exfl = function (ex) {
-    var le = 0;
-    if (ex) {
-        for (var k in ex) {
-            var l = ex[k].length;
-            if (l > 65535)
-                throw 'extra field too long';
-            le += l + 4;
-        }
-    }
-    return le;
-};
-// write zip header
-var wzh = function (d, b, f, fn, u, c, ce, co) {
-    var fl = fn.length, ex = f.extra, col = co && co.length;
-    var exl = exfl(ex);
-    wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;
-    if (ce != null)
-        d[b++] = 20, d[b++] = f.os;
-    d[b] = 20, b += 2; // spec compliance? what's that?
-    d[b++] = (f.flag << 1) | (c == null && 8), d[b++] = u && 8;
-    d[b++] = f.compression & 255, d[b++] = f.compression >> 8;
-    var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;
-    if (y < 0 || y > 119)
-        throw 'date not in range 1980-2099';
-    wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1)), b += 4;
-    if (c != null) {
-        wbytes(d, b, f.crc);
-        wbytes(d, b + 4, c);
-        wbytes(d, b + 8, f.size);
-    }
-    wbytes(d, b + 12, fl);
-    wbytes(d, b + 14, exl), b += 16;
-    if (ce != null) {
-        wbytes(d, b, col);
-        wbytes(d, b + 6, f.attrs);
-        wbytes(d, b + 10, ce), b += 14;
-    }
-    d.set(fn, b);
-    b += fl;
-    if (exl) {
-        for (var k in ex) {
-            var exf = ex[k], l = exf.length;
-            wbytes(d, b, +k);
-            wbytes(d, b + 2, l);
-            d.set(exf, b + 4), b += 4 + l;
-        }
-    }
-    if (col)
-        d.set(co, b), b += col;
-    return b;
-};
-// write zip footer (end of central directory)
-var wzf = function (o, b, c, d, e) {
-    wbytes(o, b, 0x6054B50); // skip disk
-    wbytes(o, b + 8, c);
-    wbytes(o, b + 10, c);
-    wbytes(o, b + 12, d);
-    wbytes(o, b + 16, e);
-};
-/**
- * A pass-through stream to keep data uncompressed in a ZIP archive.
- */
-var ZipPassThrough = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates a pass-through stream that can be added to ZIP archives
-     * @param filename The filename to associate with this data stream
-     */
-    function ZipPassThrough(filename) {
-        this.filename = filename;
-        this.c = crc();
-        this.size = 0;
-        this.compression = 0;
-    }
-    /**
-     * Processes a chunk and pushes to the output stream. You can override this
-     * method in a subclass for custom behavior, but by default this passes
-     * the data through. You must call this.ondata(err, chunk, final) at some
-     * point in this method.
-     * @param chunk The chunk to process
-     * @param final Whether this is the last chunk
-     */
-    ZipPassThrough.prototype.process = function (chunk, final) {
-        this.ondata(null, chunk, final);
-    };
-    /**
-     * Pushes a chunk to be added. If you are subclassing this with a custom
-     * compression algorithm, note that you must push data from the source
-     * file only, pre-compression.
-     * @param chunk The chunk to push
-     * @param final Whether this is the last chunk
-     */
-    ZipPassThrough.prototype.push = function (chunk, final) {
-        if (!this.ondata)
-            throw 'no callback - add to ZIP archive before pushing';
-        this.c.p(chunk);
-        this.size += chunk.length;
-        if (final)
-            this.crc = this.c.d();
-        this.process(chunk, final || false);
-    };
-    return ZipPassThrough;
-}())));
-
-// I don't extend because TypeScript extension adds 1kB of runtime bloat
-/**
- * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate
- * for better performance
- */
-var ZipDeflate = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates a DEFLATE stream that can be added to ZIP archives
-     * @param filename The filename to associate with this data stream
-     * @param opts The compression options
-     */
-    function ZipDeflate(filename, opts) {
-        var _this_1 = this;
-        if (!opts)
-            opts = {};
-        ZipPassThrough.call(this, filename);
-        this.d = new Deflate(opts, function (dat, final) {
-            _this_1.ondata(null, dat, final);
-        });
-        this.compression = 8;
-        this.flag = dbf(opts.level);
-    }
-    ZipDeflate.prototype.process = function (chunk, final) {
-        try {
-            this.d.push(chunk, final);
-        }
-        catch (e) {
-            this.ondata(e, null, final);
-        }
-    };
-    /**
-     * Pushes a chunk to be deflated
-     * @param chunk The chunk to push
-     * @param final Whether this is the last chunk
-     */
-    ZipDeflate.prototype.push = function (chunk, final) {
-        ZipPassThrough.prototype.push.call(this, chunk, final);
-    };
-    return ZipDeflate;
-}())));
-
-/**
- * Asynchronous streaming DEFLATE compression for ZIP archives
- */
-var AsyncZipDeflate = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates a DEFLATE stream that can be added to ZIP archives
-     * @param filename The filename to associate with this data stream
-     * @param opts The compression options
-     */
-    function AsyncZipDeflate(filename, opts) {
-        var _this_1 = this;
-        if (!opts)
-            opts = {};
-        ZipPassThrough.call(this, filename);
-        this.d = new AsyncDeflate(opts, function (err, dat, final) {
-            _this_1.ondata(err, dat, final);
-        });
-        this.compression = 8;
-        this.flag = dbf(opts.level);
-        this.terminate = this.d.terminate;
-    }
-    AsyncZipDeflate.prototype.process = function (chunk, final) {
-        this.d.push(chunk, final);
-    };
-    /**
-     * Pushes a chunk to be deflated
-     * @param chunk The chunk to push
-     * @param final Whether this is the last chunk
-     */
-    AsyncZipDeflate.prototype.push = function (chunk, final) {
-        ZipPassThrough.prototype.push.call(this, chunk, final);
-    };
-    return AsyncZipDeflate;
-}())));
-
-// TODO: Better tree shaking
-/**
- * A zippable archive to which files can incrementally be added
- */
-var Zip = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates an empty ZIP archive to which files can be added
-     * @param cb The callback to call whenever data for the generated ZIP archive
-     *           is available
-     */
-    function Zip(cb) {
-        this.ondata = cb;
-        this.u = [];
-        this.d = 1;
-    }
-    /**
-     * Adds a file to the ZIP archive
-     * @param file The file stream to add
-     */
-    Zip.prototype.add = function (file) {
-        var _this_1 = this;
-        if (this.d & 2)
-            throw 'stream finished';
-        var f = strToU8(file.filename), fl = f.length;
-        var com = file.comment, o = com && strToU8(com);
-        var u = fl != file.filename.length || (o && (com.length != o.length));
-        var hl = fl + exfl(file.extra) + 30;
-        if (fl > 65535)
-            throw 'filename too long';
-        var header = new u8(hl);
-        wzh(header, 0, file, f, u);
-        var chks = [header];
-        var pAll = function () {
-            for (var _i = 0, chks_1 = chks; _i < chks_1.length; _i++) {
-                var chk = chks_1[_i];
-                _this_1.ondata(null, chk, false);
-            }
-            chks = [];
-        };
-        var tr = this.d;
-        this.d = 0;
-        var ind = this.u.length;
-        var uf = mrg(file, {
-            f: f,
-            u: u,
-            o: o,
-            t: function () {
-                if (file.terminate)
-                    file.terminate();
-            },
-            r: function () {
-                pAll();
-                if (tr) {
-                    var nxt = _this_1.u[ind + 1];
-                    if (nxt)
-                        nxt.r();
-                    else
-                        _this_1.d = 1;
-                }
-                tr = 1;
-            }
-        });
-        var cl = 0;
-        file.ondata = function (err, dat, final) {
-            if (err) {
-                _this_1.ondata(err, dat, final);
-                _this_1.terminate();
-            }
-            else {
-                cl += dat.length;
-                chks.push(dat);
-                if (final) {
-                    var dd = new u8(16);
-                    wbytes(dd, 0, 0x8074B50);
-                    wbytes(dd, 4, file.crc);
-                    wbytes(dd, 8, cl);
-                    wbytes(dd, 12, file.size);
-                    chks.push(dd);
-                    uf.c = cl, uf.b = hl + cl + 16, uf.crc = file.crc, uf.size = file.size;
-                    if (tr)
-                        uf.r();
-                    tr = 1;
-                }
-                else if (tr)
-                    pAll();
-            }
-        };
-        this.u.push(uf);
-    };
-    /**
-     * Ends the process of adding files and prepares to emit the final chunks.
-     * This *must* be called after adding all desired files for the resulting
-     * ZIP file to work properly.
-     */
-    Zip.prototype.end = function () {
-        var _this_1 = this;
-        if (this.d & 2) {
-            if (this.d & 1)
-                throw 'stream finishing';
-            throw 'stream finished';
-        }
-        if (this.d)
-            this.e();
-        else
-            this.u.push({
-                r: function () {
-                    if (!(_this_1.d & 1))
-                        return;
-                    _this_1.u.splice(-1, 1);
-                    _this_1.e();
-                },
-                t: function () { }
-            });
-        this.d = 3;
-    };
-    Zip.prototype.e = function () {
-        var bt = 0, l = 0, tl = 0;
-        for (var _i = 0, _a = this.u; _i < _a.length; _i++) {
-            var f = _a[_i];
-            tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);
-        }
-        var out = new u8(tl + 22);
-        for (var _b = 0, _c = this.u; _b < _c.length; _b++) {
-            var f = _c[_b];
-            wzh(out, bt, f, f.f, f.u, f.c, l, f.o);
-            bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;
-        }
-        wzf(out, bt, this.u.length, tl, l);
-        this.ondata(null, out, true);
-        this.d = 2;
-    };
-    /**
-     * A method to terminate any internal workers used by the stream. Subsequent
-     * calls to add() will fail.
-     */
-    Zip.prototype.terminate = function () {
-        for (var _i = 0, _a = this.u; _i < _a.length; _i++) {
-            var f = _a[_i];
-            f.t();
-        }
-        this.d = 2;
-    };
-    return Zip;
-}())));
-
-function zip(data, opts, cb) {
-    if (!cb)
-        cb = opts, opts = {};
-    if (typeof cb != 'function')
-        throw 'no callback';
-    var r = {};
-    fltn(data, '', r, opts);
-    var k = Object.keys(r);
-    var lft = k.length, o = 0, tot = 0;
-    var slft = lft, files = new Array(lft);
-    var term = [];
-    var tAll = function () {
-        for (var i = 0; i < term.length; ++i)
-            term[i]();
-    };
-    var cbf = function () {
-        var out = new u8(tot + 22), oe = o, cdl = tot - o;
-        tot = 0;
-        for (var i = 0; i < slft; ++i) {
-            var f = files[i];
-            try {
-                var l = f.c.length;
-                wzh(out, tot, f, f.f, f.u, l);
-                var badd = 30 + f.f.length + exfl(f.extra);
-                var loc = tot + badd;
-                out.set(f.c, loc);
-                wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;
-            }
-            catch (e) {
-                return cb(e, null);
-            }
-        }
-        wzf(out, o, files.length, cdl, oe);
-        cb(null, out);
-    };
-    if (!lft)
-        cbf();
-    var _loop_1 = function (i) {
-        var fn = k[i];
-        var _a = r[fn], file = _a[0], p = _a[1];
-        var c = crc(), size = file.length;
-        c.p(file);
-        var f = strToU8(fn), s = f.length;
-        var com = p.comment, m = com && strToU8(com), ms = m && m.length;
-        var exl = exfl(p.extra);
-        var compression = p.level == 0 ? 0 : 8;
-        var cbl = function (e, d) {
-            if (e) {
-                tAll();
-                cb(e, null);
-            }
-            else {
-                var l = d.length;
-                files[i] = mrg(p, {
-                    size: size,
-                    crc: c.d(),
-                    c: d,
-                    f: f,
-                    m: m,
-                    u: s != fn.length || (m && (com.length != ms)),
-                    compression: compression
-                });
-                o += 30 + s + exl + l;
-                tot += 76 + 2 * (s + exl) + (ms || 0) + l;
-                if (!--lft)
-                    cbf();
-            }
-        };
-        if (s > 65535)
-            cbl('filename too long', null);
-        if (!compression)
-            cbl(null, file);
-        else if (size < 160000) {
-            try {
-                cbl(null, deflateSync(file, p));
-            }
-            catch (e) {
-                cbl(e, null);
-            }
-        }
-        else
-            term.push(deflate(file, p, cbl));
-    };
-    // Cannot use lft because it can decrease
-    for (var i = 0; i < slft; ++i) {
-        _loop_1(i);
-    }
-    return tAll;
-}
-/**
- * Synchronously creates a ZIP file. Prefer using `zip` for better performance
- * with more than one file.
- * @param data The directory structure for the ZIP archive
- * @param opts The main options, merged with per-file options
- * @returns The generated ZIP archive
- */
-function zipSync(data, opts) {
-    if (!opts)
-        opts = {};
-    var r = {};
-    var files = [];
-    fltn(data, '', r, opts);
-    var o = 0;
-    var tot = 0;
-    for (var fn in r) {
-        var _a = r[fn], file = _a[0], p = _a[1];
-        var compression = p.level == 0 ? 0 : 8;
-        var f = strToU8(fn), s = f.length;
-        var com = p.comment, m = com && strToU8(com), ms = m && m.length;
-        var exl = exfl(p.extra);
-        if (s > 65535)
-            throw 'filename too long';
-        var d = compression ? deflateSync(file, p) : file, l = d.length;
-        var c = crc();
-        c.p(file);
-        files.push(mrg(p, {
-            size: file.length,
-            crc: c.d(),
-            c: d,
-            f: f,
-            m: m,
-            u: s != fn.length || (m && (com.length != ms)),
-            o: o,
-            compression: compression
-        }));
-        o += 30 + s + exl + l;
-        tot += 76 + 2 * (s + exl) + (ms || 0) + l;
-    }
-    var out = new u8(tot + 22), oe = o, cdl = tot - o;
-    for (var i = 0; i < files.length; ++i) {
-        var f = files[i];
-        wzh(out, f.o, f, f.f, f.u, f.c.length);
-        var badd = 30 + f.f.length + exfl(f.extra);
-        out.set(f.c, f.o + badd);
-        wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);
-    }
-    wzf(out, o, files.length, cdl, oe);
-    return out;
-}
-/**
- * Streaming pass-through decompression for ZIP archives
- */
-var UnzipPassThrough = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    function UnzipPassThrough() {
-    }
-    UnzipPassThrough.prototype.push = function (data, final) {
-        this.ondata(null, data, final);
-    };
-    UnzipPassThrough.compression = 0;
-    return UnzipPassThrough;
-}())));
-
-/**
- * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for
- * better performance.
- */
-var UnzipInflate = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates a DEFLATE decompression that can be used in ZIP archives
-     */
-    function UnzipInflate() {
-        var _this_1 = this;
-        this.i = new Inflate(function (dat, final) {
-            _this_1.ondata(null, dat, final);
-        });
-    }
-    UnzipInflate.prototype.push = function (data, final) {
-        try {
-            this.i.push(data, final);
-        }
-        catch (e) {
-            this.ondata(e, data, final);
-        }
-    };
-    UnzipInflate.compression = 8;
-    return UnzipInflate;
-}())));
-
-/**
- * Asynchronous streaming DEFLATE decompression for ZIP archives
- */
-var AsyncUnzipInflate = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates a DEFLATE decompression that can be used in ZIP archives
-     */
-    function AsyncUnzipInflate(_, sz) {
-        var _this_1 = this;
-        if (sz < 320000) {
-            this.i = new Inflate(function (dat, final) {
-                _this_1.ondata(null, dat, final);
-            });
-        }
-        else {
-            this.i = new AsyncInflate(function (err, dat, final) {
-                _this_1.ondata(err, dat, final);
-            });
-            this.terminate = this.i.terminate;
-        }
-    }
-    AsyncUnzipInflate.prototype.push = function (data, final) {
-        if (this.i.terminate)
-            data = slc(data, 0);
-        this.i.push(data, final);
-    };
-    AsyncUnzipInflate.compression = 8;
-    return AsyncUnzipInflate;
-}())));
-
-/**
- * A ZIP archive decompression stream that emits files as they are discovered
- */
-var Unzip = /*#__PURE__*/ ((/* unused pure expression or super */ null && (function () {
-    /**
-     * Creates a ZIP decompression stream
-     * @param cb The callback to call whenever a file in the ZIP archive is found
-     */
-    function Unzip(cb) {
-        this.onfile = cb;
-        this.k = [];
-        this.o = {
-            0: UnzipPassThrough
-        };
-        this.p = et;
-    }
-    /**
-     * Pushes a chunk to be unzipped
-     * @param chunk The chunk to push
-     * @param final Whether this is the last chunk
-     */
-    Unzip.prototype.push = function (chunk, final) {
-        var _this_1 = this;
-        if (!this.onfile)
-            throw 'no callback';
-        if (!this.p)
-            throw 'stream finished';
-        if (this.c > 0) {
-            var len = Math.min(this.c, chunk.length);
-            var toAdd = chunk.subarray(0, len);
-            this.c -= len;
-            if (this.d)
-                this.d.push(toAdd, !this.c);
-            else
-                this.k[0].push(toAdd);
-            chunk = chunk.subarray(len);
-            if (chunk.length)
-                return this.push(chunk, final);
-        }
-        else {
-            var f = 0, i = 0, is = void 0, buf = void 0;
-            if (!this.p.length)
-                buf = chunk;
-            else if (!chunk.length)
-                buf = this.p;
-            else {
-                buf = new u8(this.p.length + chunk.length);
-                buf.set(this.p), buf.set(chunk, this.p.length);
-            }
-            var l = buf.length, oc = this.c, add = oc && this.d;
-            var _loop_2 = function () {
-                var _a;
-                var sig = b4(buf, i);
-                if (sig == 0x4034B50) {
-                    f = 1, is = i;
-                    this_1.d = null;
-                    this_1.c = 0;
-                    var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);
-                    if (l > i + 30 + fnl + es) {
-                        var chks_2 = [];
-                        this_1.k.unshift(chks_2);
-                        f = 2;
-                        var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);
-                        var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);
-                        if (sc_1 == 4294967295) {
-                            _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];
-                        }
-                        else if (dd)
-                            sc_1 = -1;
-                        i += es;
-                        this_1.c = sc_1;
-                        var d_1;
-                        var file_1 = {
-                            name: fn_1,
-                            compression: cmp_1,
-                            start: function () {
-                                if (!file_1.ondata)
-                                    throw 'no callback';
-                                if (!sc_1)
-                                    file_1.ondata(null, et, true);
-                                else {
-                                    var ctr = _this_1.o[cmp_1];
-                                    if (!ctr)
-                                        throw 'unknown compression type ' + cmp_1;
-                                    d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);
-                                    d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };
-                                    for (var _i = 0, chks_3 = chks_2; _i < chks_3.length; _i++) {
-                                        var dat = chks_3[_i];
-                                        d_1.push(dat, false);
-                                    }
-                                    if (_this_1.k[0] == chks_2 && _this_1.c)
-                                        _this_1.d = d_1;
-                                    else
-                                        d_1.push(et, true);
-                                }
-                            },
-                            terminate: function () {
-                                if (d_1 && d_1.terminate)
-                                    d_1.terminate();
-                            }
-                        };
-                        if (sc_1 >= 0)
-                            file_1.size = sc_1, file_1.originalSize = su_1;
-                        this_1.onfile(file_1);
-                    }
-                    return "break";
-                }
-                else if (oc) {
-                    if (sig == 0x8074B50) {
-                        is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;
-                        return "break";
-                    }
-                    else if (sig == 0x2014B50) {
-                        is = i -= 4, f = 3, this_1.c = 0;
-                        return "break";
-                    }
-                }
-            };
-            var this_1 = this;
-            for (; i < l - 4; ++i) {
-                var state_1 = _loop_2();
-                if (state_1 === "break")
-                    break;
-            }
-            this.p = et;
-            if (oc < 0) {
-                var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);
-                if (add)
-                    add.push(dat, !!f);
-                else
-                    this.k[+(f == 2)].push(dat);
-            }
-            if (f & 2)
-                return this.push(buf.subarray(i), final);
-            this.p = buf.subarray(i);
-        }
-        if (final) {
-            if (this.c)
-                throw 'invalid zip file';
-            this.p = null;
-        }
-    };
-    /**
-     * Registers a decoder with the stream, allowing for files compressed with
-     * the compression type provided to be expanded correctly
-     * @param decoder The decoder constructor
-     */
-    Unzip.prototype.register = function (decoder) {
-        this.o[decoder.compression] = decoder;
-    };
-    return Unzip;
-}())));
-
-/**
- * Asynchronously decompresses a ZIP archive
- * @param data The raw compressed ZIP file
- * @param cb The callback to call with the decompressed files
- * @returns A function that can be used to immediately terminate the unzipping
- */
-function unzip(data, cb) {
-    if (typeof cb != 'function')
-        throw 'no callback';
-    var term = [];
-    var tAll = function () {
-        for (var i = 0; i < term.length; ++i)
-            term[i]();
-    };
-    var files = {};
-    var e = data.length - 22;
-    for (; b4(data, e) != 0x6054B50; --e) {
-        if (!e || data.length - e > 65558) {
-            cb('invalid zip file', null);
-            return;
-        }
-    }
-    ;
-    var lft = b2(data, e + 8);
-    if (!lft)
-        cb(null, {});
-    var c = lft;
-    var o = b4(data, e + 16);
-    var z = o == 4294967295;
-    if (z) {
-        e = b4(data, e - 12);
-        if (b4(data, e) != 0x6064B50) {
-            cb('invalid zip file', null);
-            return;
-        }
-        c = lft = b4(data, e + 32);
-        o = b4(data, e + 48);
-    }
-    var _loop_3 = function (i) {
-        var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);
-        o = no;
-        var cbl = function (e, d) {
-            if (e) {
-                tAll();
-                cb(e, null);
-            }
-            else {
-                files[fn] = d;
-                if (!--lft)
-                    cb(null, files);
-            }
-        };
-        if (!c_1)
-            cbl(null, slc(data, b, b + sc));
-        else if (c_1 == 8) {
-            var infl = data.subarray(b, b + sc);
-            if (sc < 320000) {
-                try {
-                    cbl(null, inflateSync(infl, new u8(su)));
-                }
-                catch (e) {
-                    cbl(e, null);
-                }
-            }
-            else
-                term.push(inflate(infl, { size: su }, cbl));
-        }
-        else
-            cbl('unknown compression type ' + c_1, null);
-    };
-    for (var i = 0; i < c; ++i) {
-        _loop_3(i);
-    }
-    return tAll;
-}
-/**
- * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better
- * performance with more than one file.
- * @param data The raw compressed ZIP file
- * @returns The decompressed files
- */
-function unzipSync(data) {
-    var files = {};
-    var e = data.length - 22;
-    for (; b4(data, e) != 0x6054B50; --e) {
-        if (!e || data.length - e > 65558)
-            throw 'invalid zip file';
-    }
-    ;
-    var c = b2(data, e + 8);
-    if (!c)
-        return {};
-    var o = b4(data, e + 16);
-    var z = o == 4294967295;
-    if (z) {
-        e = b4(data, e - 12);
-        if (b4(data, e) != 0x6064B50)
-            throw 'invalid zip file';
-        c = b4(data, e + 32);
-        o = b4(data, e + 48);
-    }
-    for (var i = 0; i < c; ++i) {
-        var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);
-        o = no;
-        if (!c_2)
-            files[fn] = slc(data, b, b + sc);
-        else if (c_2 == 8)
-            files[fn] = inflateSync(data.subarray(b, b + sc), new u8(su));
-        else
-            throw 'unknown compression type ' + c_2;
-    }
-    return files;
-}
-
-
-/***/ }),
-
-/***/ 21883:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ reusable)
-});
-
-// EXTERNAL MODULE: ./node_modules/khroma/dist/utils/index.js + 3 modules
-var utils = __webpack_require__(61691);
-// EXTERNAL MODULE: ./node_modules/khroma/dist/constants.js
-var constants = __webpack_require__(82142);
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/channels/type.js
-/* IMPORT */
-
-/* MAIN */
-class Type {
-    constructor() {
-        /* VARIABLES */
-        this.type = constants/* TYPE.ALL */.w.ALL;
-    }
-    /* API */
-    get() {
-        return this.type;
-    }
-    set(type) {
-        if (this.type && this.type !== type)
-            throw new Error('Cannot change both RGB and HSL channels at the same time');
-        this.type = type;
-    }
-    reset() {
-        this.type = constants/* TYPE.ALL */.w.ALL;
-    }
-    is(type) {
-        return this.type === type;
-    }
-}
-/* EXPORT */
-/* harmony default export */ const type = (Type);
-
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/channels/index.js
-/* IMPORT */
-
-
-
-/* MAIN */
-class Channels {
-    /* CONSTRUCTOR */
-    constructor(data, color) {
-        this.color = color;
-        this.changed = false;
-        this.data = data; //TSC
-        this.type = new type();
-    }
-    /* API */
-    set(data, color) {
-        this.color = color;
-        this.changed = false;
-        this.data = data; //TSC
-        this.type.type = constants/* TYPE.ALL */.w.ALL;
-        return this;
-    }
-    /* HELPERS */
-    _ensureHSL() {
-        const data = this.data;
-        const { h, s, l } = data;
-        if (h === undefined)
-            data.h = utils/* default.channel.rgb2hsl */.Z.channel.rgb2hsl(data, 'h');
-        if (s === undefined)
-            data.s = utils/* default.channel.rgb2hsl */.Z.channel.rgb2hsl(data, 's');
-        if (l === undefined)
-            data.l = utils/* default.channel.rgb2hsl */.Z.channel.rgb2hsl(data, 'l');
-    }
-    _ensureRGB() {
-        const data = this.data;
-        const { r, g, b } = data;
-        if (r === undefined)
-            data.r = utils/* default.channel.hsl2rgb */.Z.channel.hsl2rgb(data, 'r');
-        if (g === undefined)
-            data.g = utils/* default.channel.hsl2rgb */.Z.channel.hsl2rgb(data, 'g');
-        if (b === undefined)
-            data.b = utils/* default.channel.hsl2rgb */.Z.channel.hsl2rgb(data, 'b');
-    }
-    /* GETTERS */
-    get r() {
-        const data = this.data;
-        const r = data.r;
-        if (!this.type.is(constants/* TYPE.HSL */.w.HSL) && r !== undefined)
-            return r;
-        this._ensureHSL();
-        return utils/* default.channel.hsl2rgb */.Z.channel.hsl2rgb(data, 'r');
-    }
-    get g() {
-        const data = this.data;
-        const g = data.g;
-        if (!this.type.is(constants/* TYPE.HSL */.w.HSL) && g !== undefined)
-            return g;
-        this._ensureHSL();
-        return utils/* default.channel.hsl2rgb */.Z.channel.hsl2rgb(data, 'g');
-    }
-    get b() {
-        const data = this.data;
-        const b = data.b;
-        if (!this.type.is(constants/* TYPE.HSL */.w.HSL) && b !== undefined)
-            return b;
-        this._ensureHSL();
-        return utils/* default.channel.hsl2rgb */.Z.channel.hsl2rgb(data, 'b');
-    }
-    get h() {
-        const data = this.data;
-        const h = data.h;
-        if (!this.type.is(constants/* TYPE.RGB */.w.RGB) && h !== undefined)
-            return h;
-        this._ensureRGB();
-        return utils/* default.channel.rgb2hsl */.Z.channel.rgb2hsl(data, 'h');
-    }
-    get s() {
-        const data = this.data;
-        const s = data.s;
-        if (!this.type.is(constants/* TYPE.RGB */.w.RGB) && s !== undefined)
-            return s;
-        this._ensureRGB();
-        return utils/* default.channel.rgb2hsl */.Z.channel.rgb2hsl(data, 's');
-    }
-    get l() {
-        const data = this.data;
-        const l = data.l;
-        if (!this.type.is(constants/* TYPE.RGB */.w.RGB) && l !== undefined)
-            return l;
-        this._ensureRGB();
-        return utils/* default.channel.rgb2hsl */.Z.channel.rgb2hsl(data, 'l');
-    }
-    get a() {
-        return this.data.a;
-    }
-    /* SETTERS */
-    set r(r) {
-        this.type.set(constants/* TYPE.RGB */.w.RGB);
-        this.changed = true;
-        this.data.r = r;
-    }
-    set g(g) {
-        this.type.set(constants/* TYPE.RGB */.w.RGB);
-        this.changed = true;
-        this.data.g = g;
-    }
-    set b(b) {
-        this.type.set(constants/* TYPE.RGB */.w.RGB);
-        this.changed = true;
-        this.data.b = b;
-    }
-    set h(h) {
-        this.type.set(constants/* TYPE.HSL */.w.HSL);
-        this.changed = true;
-        this.data.h = h;
-    }
-    set s(s) {
-        this.type.set(constants/* TYPE.HSL */.w.HSL);
-        this.changed = true;
-        this.data.s = s;
-    }
-    set l(l) {
-        this.type.set(constants/* TYPE.HSL */.w.HSL);
-        this.changed = true;
-        this.data.l = l;
-    }
-    set a(a) {
-        this.changed = true;
-        this.data.a = a;
-    }
-}
-/* EXPORT */
-/* harmony default export */ const channels = (Channels);
-
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/channels/reusable.js
-/* IMPORT */
-
-/* MAIN */
-const reusable_channels = new channels({ r: 0, g: 0, b: 0, a: 0 }, 'transparent');
-/* EXPORT */
-/* harmony default export */ const reusable = (reusable_channels);
-
-
-/***/ }),
-
-/***/ 71610:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ color)
-});
-
-// EXTERNAL MODULE: ./node_modules/khroma/dist/channels/reusable.js + 2 modules
-var reusable = __webpack_require__(21883);
-// EXTERNAL MODULE: ./node_modules/khroma/dist/constants.js
-var constants = __webpack_require__(82142);
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/color/hex.js
-/* IMPORT */
-
-
-
-/* MAIN */
-const Hex = {
-    /* VARIABLES */
-    re: /^#((?:[a-f0-9]{2}){2,4}|[a-f0-9]{3})$/i,
-    /* API */
-    parse: (color) => {
-        if (color.charCodeAt(0) !== 35)
-            return; // '#'
-        const match = color.match(Hex.re);
-        if (!match)
-            return;
-        const hex = match[1];
-        const dec = parseInt(hex, 16);
-        const length = hex.length;
-        const hasAlpha = length % 4 === 0;
-        const isFullLength = length > 4;
-        const multiplier = isFullLength ? 1 : 17;
-        const bits = isFullLength ? 8 : 4;
-        const bitsOffset = hasAlpha ? 0 : -1;
-        const mask = isFullLength ? 255 : 15;
-        return reusable/* default.set */.Z.set({
-            r: ((dec >> (bits * (bitsOffset + 3))) & mask) * multiplier,
-            g: ((dec >> (bits * (bitsOffset + 2))) & mask) * multiplier,
-            b: ((dec >> (bits * (bitsOffset + 1))) & mask) * multiplier,
-            a: hasAlpha ? (dec & mask) * multiplier / 255 : 1
-        }, color);
-    },
-    stringify: (channels) => {
-        const { r, g, b, a } = channels;
-        if (a < 1) { // #RRGGBBAA
-            return `#${constants/* DEC2HEX */.Q[Math.round(r)]}${constants/* DEC2HEX */.Q[Math.round(g)]}${constants/* DEC2HEX */.Q[Math.round(b)]}${constants/* DEC2HEX */.Q[Math.round(a * 255)]}`;
-        }
-        else { // #RRGGBB
-            return `#${constants/* DEC2HEX */.Q[Math.round(r)]}${constants/* DEC2HEX */.Q[Math.round(g)]}${constants/* DEC2HEX */.Q[Math.round(b)]}`;
-        }
-    }
-};
-/* EXPORT */
-/* harmony default export */ const color_hex = (Hex);
-
-// EXTERNAL MODULE: ./node_modules/khroma/dist/utils/index.js + 3 modules
-var utils = __webpack_require__(61691);
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/color/hsl.js
-/* IMPORT */
-
-
-/* MAIN */
-const HSL = {
-    /* VARIABLES */
-    re: /^hsla?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(?:deg|grad|rad|turn)?)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?%)(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e-?\d+)?(%)?))?\s*?\)$/i,
-    hueRe: /^(.+?)(deg|grad|rad|turn)$/i,
-    /* HELPERS */
-    _hue2deg: (hue) => {
-        const match = hue.match(HSL.hueRe);
-        if (match) {
-            const [, number, unit] = match;
-            switch (unit) {
-                case 'grad': return utils/* default.channel.clamp.h */.Z.channel.clamp.h(parseFloat(number) * .9);
-                case 'rad': return utils/* default.channel.clamp.h */.Z.channel.clamp.h(parseFloat(number) * 180 / Math.PI);
-                case 'turn': return utils/* default.channel.clamp.h */.Z.channel.clamp.h(parseFloat(number) * 360);
-            }
-        }
-        return utils/* default.channel.clamp.h */.Z.channel.clamp.h(parseFloat(hue));
-    },
-    /* API */
-    parse: (color) => {
-        const charCode = color.charCodeAt(0);
-        if (charCode !== 104 && charCode !== 72)
-            return; // 'h'/'H'
-        const match = color.match(HSL.re);
-        if (!match)
-            return;
-        const [, h, s, l, a, isAlphaPercentage] = match;
-        return reusable/* default.set */.Z.set({
-            h: HSL._hue2deg(h),
-            s: utils/* default.channel.clamp.s */.Z.channel.clamp.s(parseFloat(s)),
-            l: utils/* default.channel.clamp.l */.Z.channel.clamp.l(parseFloat(l)),
-            a: a ? utils/* default.channel.clamp.a */.Z.channel.clamp.a(isAlphaPercentage ? parseFloat(a) / 100 : parseFloat(a)) : 1
-        }, color);
-    },
-    stringify: (channels) => {
-        const { h, s, l, a } = channels;
-        if (a < 1) { // HSLA
-            return `hsla(${utils/* default.lang.round */.Z.lang.round(h)}, ${utils/* default.lang.round */.Z.lang.round(s)}%, ${utils/* default.lang.round */.Z.lang.round(l)}%, ${a})`;
-        }
-        else { // HSL
-            return `hsl(${utils/* default.lang.round */.Z.lang.round(h)}, ${utils/* default.lang.round */.Z.lang.round(s)}%, ${utils/* default.lang.round */.Z.lang.round(l)}%)`;
-        }
-    }
-};
-/* EXPORT */
-/* harmony default export */ const hsl = (HSL);
-
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/color/keyword.js
-/* IMPORT */
-
-/* MAIN */
-const Keyword = {
-    /* VARIABLES */
-    colors: {
-        aliceblue: '#f0f8ff',
-        antiquewhite: '#faebd7',
-        aqua: '#00ffff',
-        aquamarine: '#7fffd4',
-        azure: '#f0ffff',
-        beige: '#f5f5dc',
-        bisque: '#ffe4c4',
-        black: '#000000',
-        blanchedalmond: '#ffebcd',
-        blue: '#0000ff',
-        blueviolet: '#8a2be2',
-        brown: '#a52a2a',
-        burlywood: '#deb887',
-        cadetblue: '#5f9ea0',
-        chartreuse: '#7fff00',
-        chocolate: '#d2691e',
-        coral: '#ff7f50',
-        cornflowerblue: '#6495ed',
-        cornsilk: '#fff8dc',
-        crimson: '#dc143c',
-        cyanaqua: '#00ffff',
-        darkblue: '#00008b',
-        darkcyan: '#008b8b',
-        darkgoldenrod: '#b8860b',
-        darkgray: '#a9a9a9',
-        darkgreen: '#006400',
-        darkgrey: '#a9a9a9',
-        darkkhaki: '#bdb76b',
-        darkmagenta: '#8b008b',
-        darkolivegreen: '#556b2f',
-        darkorange: '#ff8c00',
-        darkorchid: '#9932cc',
-        darkred: '#8b0000',
-        darksalmon: '#e9967a',
-        darkseagreen: '#8fbc8f',
-        darkslateblue: '#483d8b',
-        darkslategray: '#2f4f4f',
-        darkslategrey: '#2f4f4f',
-        darkturquoise: '#00ced1',
-        darkviolet: '#9400d3',
-        deeppink: '#ff1493',
-        deepskyblue: '#00bfff',
-        dimgray: '#696969',
-        dimgrey: '#696969',
-        dodgerblue: '#1e90ff',
-        firebrick: '#b22222',
-        floralwhite: '#fffaf0',
-        forestgreen: '#228b22',
-        fuchsia: '#ff00ff',
-        gainsboro: '#dcdcdc',
-        ghostwhite: '#f8f8ff',
-        gold: '#ffd700',
-        goldenrod: '#daa520',
-        gray: '#808080',
-        green: '#008000',
-        greenyellow: '#adff2f',
-        grey: '#808080',
-        honeydew: '#f0fff0',
-        hotpink: '#ff69b4',
-        indianred: '#cd5c5c',
-        indigo: '#4b0082',
-        ivory: '#fffff0',
-        khaki: '#f0e68c',
-        lavender: '#e6e6fa',
-        lavenderblush: '#fff0f5',
-        lawngreen: '#7cfc00',
-        lemonchiffon: '#fffacd',
-        lightblue: '#add8e6',
-        lightcoral: '#f08080',
-        lightcyan: '#e0ffff',
-        lightgoldenrodyellow: '#fafad2',
-        lightgray: '#d3d3d3',
-        lightgreen: '#90ee90',
-        lightgrey: '#d3d3d3',
-        lightpink: '#ffb6c1',
-        lightsalmon: '#ffa07a',
-        lightseagreen: '#20b2aa',
-        lightskyblue: '#87cefa',
-        lightslategray: '#778899',
-        lightslategrey: '#778899',
-        lightsteelblue: '#b0c4de',
-        lightyellow: '#ffffe0',
-        lime: '#00ff00',
-        limegreen: '#32cd32',
-        linen: '#faf0e6',
-        magenta: '#ff00ff',
-        maroon: '#800000',
-        mediumaquamarine: '#66cdaa',
-        mediumblue: '#0000cd',
-        mediumorchid: '#ba55d3',
-        mediumpurple: '#9370db',
-        mediumseagreen: '#3cb371',
-        mediumslateblue: '#7b68ee',
-        mediumspringgreen: '#00fa9a',
-        mediumturquoise: '#48d1cc',
-        mediumvioletred: '#c71585',
-        midnightblue: '#191970',
-        mintcream: '#f5fffa',
-        mistyrose: '#ffe4e1',
-        moccasin: '#ffe4b5',
-        navajowhite: '#ffdead',
-        navy: '#000080',
-        oldlace: '#fdf5e6',
-        olive: '#808000',
-        olivedrab: '#6b8e23',
-        orange: '#ffa500',
-        orangered: '#ff4500',
-        orchid: '#da70d6',
-        palegoldenrod: '#eee8aa',
-        palegreen: '#98fb98',
-        paleturquoise: '#afeeee',
-        palevioletred: '#db7093',
-        papayawhip: '#ffefd5',
-        peachpuff: '#ffdab9',
-        peru: '#cd853f',
-        pink: '#ffc0cb',
-        plum: '#dda0dd',
-        powderblue: '#b0e0e6',
-        purple: '#800080',
-        rebeccapurple: '#663399',
-        red: '#ff0000',
-        rosybrown: '#bc8f8f',
-        royalblue: '#4169e1',
-        saddlebrown: '#8b4513',
-        salmon: '#fa8072',
-        sandybrown: '#f4a460',
-        seagreen: '#2e8b57',
-        seashell: '#fff5ee',
-        sienna: '#a0522d',
-        silver: '#c0c0c0',
-        skyblue: '#87ceeb',
-        slateblue: '#6a5acd',
-        slategray: '#708090',
-        slategrey: '#708090',
-        snow: '#fffafa',
-        springgreen: '#00ff7f',
-        tan: '#d2b48c',
-        teal: '#008080',
-        thistle: '#d8bfd8',
-        transparent: '#00000000',
-        turquoise: '#40e0d0',
-        violet: '#ee82ee',
-        wheat: '#f5deb3',
-        white: '#ffffff',
-        whitesmoke: '#f5f5f5',
-        yellow: '#ffff00',
-        yellowgreen: '#9acd32'
-    },
-    /* API */
-    parse: (color) => {
-        color = color.toLowerCase();
-        const hex = Keyword.colors[color];
-        if (!hex)
-            return;
-        return color_hex.parse(hex);
-    },
-    stringify: (channels) => {
-        const hex = color_hex.stringify(channels);
-        for (const name in Keyword.colors) {
-            if (Keyword.colors[name] === hex)
-                return name;
-        }
-        return;
-    }
-};
-/* EXPORT */
-/* harmony default export */ const keyword = (Keyword);
-
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/color/rgb.js
-/* IMPORT */
-
-
-/* MAIN */
-const RGB = {
-    /* VARIABLES */
-    re: /^rgba?\(\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))\s*?(?:,|\s)\s*?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?))(?:\s*?(?:,|\/)\s*?\+?(-?(?:\d+(?:\.\d+)?|(?:\.\d+))(?:e\d+)?(%?)))?\s*?\)$/i,
-    /* API */
-    parse: (color) => {
-        const charCode = color.charCodeAt(0);
-        if (charCode !== 114 && charCode !== 82)
-            return; // 'r'/'R'
-        const match = color.match(RGB.re);
-        if (!match)
-            return;
-        const [, r, isRedPercentage, g, isGreenPercentage, b, isBluePercentage, a, isAlphaPercentage] = match;
-        return reusable/* default.set */.Z.set({
-            r: utils/* default.channel.clamp.r */.Z.channel.clamp.r(isRedPercentage ? parseFloat(r) * 2.55 : parseFloat(r)),
-            g: utils/* default.channel.clamp.g */.Z.channel.clamp.g(isGreenPercentage ? parseFloat(g) * 2.55 : parseFloat(g)),
-            b: utils/* default.channel.clamp.b */.Z.channel.clamp.b(isBluePercentage ? parseFloat(b) * 2.55 : parseFloat(b)),
-            a: a ? utils/* default.channel.clamp.a */.Z.channel.clamp.a(isAlphaPercentage ? parseFloat(a) / 100 : parseFloat(a)) : 1
-        }, color);
-    },
-    stringify: (channels) => {
-        const { r, g, b, a } = channels;
-        if (a < 1) { // RGBA
-            return `rgba(${utils/* default.lang.round */.Z.lang.round(r)}, ${utils/* default.lang.round */.Z.lang.round(g)}, ${utils/* default.lang.round */.Z.lang.round(b)}, ${utils/* default.lang.round */.Z.lang.round(a)})`;
-        }
-        else { // RGB
-            return `rgb(${utils/* default.lang.round */.Z.lang.round(r)}, ${utils/* default.lang.round */.Z.lang.round(g)}, ${utils/* default.lang.round */.Z.lang.round(b)})`;
-        }
-    }
-};
-/* EXPORT */
-/* harmony default export */ const rgb = (RGB);
-
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/color/index.js
-/* IMPORT */
-
-
-
-
-
-
-/* MAIN */
-const Color = {
-    /* VARIABLES */
-    format: {
-        keyword: keyword,
-        hex: color_hex,
-        rgb: rgb,
-        rgba: rgb,
-        hsl: hsl,
-        hsla: hsl
-    },
-    /* API */
-    parse: (color) => {
-        if (typeof color !== 'string')
-            return color;
-        const channels = color_hex.parse(color) || rgb.parse(color) || hsl.parse(color) || keyword.parse(color); // Color providers ordered with performance in mind
-        if (channels)
-            return channels;
-        throw new Error(`Unsupported color format: "${color}"`);
-    },
-    stringify: (channels) => {
-        // SASS returns a keyword if possible, but we avoid doing that as it's slower and doesn't really add any value
-        if (!channels.changed && channels.color)
-            return channels.color;
-        if (channels.type.is(constants/* TYPE.HSL */.w.HSL) || channels.data.r === undefined) {
-            return hsl.stringify(channels);
-        }
-        else if (channels.a < 1 || !Number.isInteger(channels.r) || !Number.isInteger(channels.g) || !Number.isInteger(channels.b)) {
-            return rgb.stringify(channels);
-        }
-        else {
-            return color_hex.stringify(channels);
-        }
-    }
-};
-/* EXPORT */
-/* harmony default export */ const color = (Color);
-
-
-/***/ }),
-
-/***/ 82142:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Q": () => (/* binding */ DEC2HEX),
-/* harmony export */   "w": () => (/* binding */ TYPE)
-/* harmony export */ });
-/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61691);
-/* IMPORT */
-
-/* MAIN */
-const DEC2HEX = {};
-for (let i = 0; i <= 255; i++)
-    DEC2HEX[i] = _utils_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].unit.dec2hex */ .Z.unit.dec2hex(i); // Populating dynamically, striking a balance between code size and performance
-const TYPE = {
-    ALL: 0,
-    RGB: 1,
-    HSL: 2
-};
-/* EXPORT */
-
-
-
-/***/ }),
-
-/***/ 26174:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _utils_index_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(61691);
-/* harmony import */ var _color_index_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(71610);
-/* IMPORT */
-
-
-/* MAIN */
-const adjustChannel = (color, channel, amount) => {
-    const channels = _color_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].parse */ .Z.parse(color);
-    const amountCurrent = channels[channel];
-    const amountNext = _utils_index_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"].channel.clamp */ .Z.channel.clamp[channel](amountCurrent + amount);
-    if (amountCurrent !== amountNext)
-        channels[channel] = amountNext;
-    return _color_index_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].stringify */ .Z.stringify(channels);
-};
-/* EXPORT */
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (adjustChannel);
-
-
-/***/ }),
-
-/***/ 7201:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _adjust_channel_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26174);
-/* IMPORT */
-
-/* MAIN */
-const darken = (color, amount) => {
-    return (0,_adjust_channel_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(color, 'l', -amount);
-};
-/* EXPORT */
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (darken);
-
-
-/***/ }),
-
-/***/ 12281:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _adjust_channel_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26174);
-/* IMPORT */
-
-/* MAIN */
-const lighten = (color, amount) => {
-    return (0,_adjust_channel_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(color, 'l', amount);
-};
-/* EXPORT */
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (lighten);
-
-
-/***/ }),
-
-/***/ 61691:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ utils)
-});
-
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/utils/channel.js
-/* IMPORT */
-/* MAIN */
-const Channel = {
-    /* CLAMP */
-    min: {
-        r: 0,
-        g: 0,
-        b: 0,
-        s: 0,
-        l: 0,
-        a: 0
-    },
-    max: {
-        r: 255,
-        g: 255,
-        b: 255,
-        h: 360,
-        s: 100,
-        l: 100,
-        a: 1
-    },
-    clamp: {
-        r: (r) => r >= 255 ? 255 : (r < 0 ? 0 : r),
-        g: (g) => g >= 255 ? 255 : (g < 0 ? 0 : g),
-        b: (b) => b >= 255 ? 255 : (b < 0 ? 0 : b),
-        h: (h) => h % 360,
-        s: (s) => s >= 100 ? 100 : (s < 0 ? 0 : s),
-        l: (l) => l >= 100 ? 100 : (l < 0 ? 0 : l),
-        a: (a) => a >= 1 ? 1 : (a < 0 ? 0 : a)
-    },
-    /* CONVERSION */
-    //SOURCE: https://planetcalc.com/7779
-    toLinear: (c) => {
-        const n = c / 255;
-        return c > .03928 ? Math.pow(((n + .055) / 1.055), 2.4) : n / 12.92;
-    },
-    //SOURCE: https://gist.github.com/mjackson/5311256
-    hue2rgb: (p, q, t) => {
-        if (t < 0)
-            t += 1;
-        if (t > 1)
-            t -= 1;
-        if (t < 1 / 6)
-            return p + (q - p) * 6 * t;
-        if (t < 1 / 2)
-            return q;
-        if (t < 2 / 3)
-            return p + (q - p) * (2 / 3 - t) * 6;
-        return p;
-    },
-    hsl2rgb: ({ h, s, l }, channel) => {
-        if (!s)
-            return l * 2.55; // Achromatic
-        h /= 360;
-        s /= 100;
-        l /= 100;
-        const q = (l < .5) ? l * (1 + s) : (l + s) - (l * s);
-        const p = 2 * l - q;
-        switch (channel) {
-            case 'r': return Channel.hue2rgb(p, q, h + 1 / 3) * 255;
-            case 'g': return Channel.hue2rgb(p, q, h) * 255;
-            case 'b': return Channel.hue2rgb(p, q, h - 1 / 3) * 255;
-        }
-    },
-    rgb2hsl: ({ r, g, b }, channel) => {
-        r /= 255;
-        g /= 255;
-        b /= 255;
-        const max = Math.max(r, g, b);
-        const min = Math.min(r, g, b);
-        const l = (max + min) / 2;
-        if (channel === 'l')
-            return l * 100;
-        if (max === min)
-            return 0; // Achromatic
-        const d = max - min;
-        const s = (l > .5) ? d / (2 - max - min) : d / (max + min);
-        if (channel === 's')
-            return s * 100;
-        switch (max) {
-            case r: return ((g - b) / d + (g < b ? 6 : 0)) * 60;
-            case g: return ((b - r) / d + 2) * 60;
-            case b: return ((r - g) / d + 4) * 60;
-            default: return -1; //TSC: TypeScript is stupid and complains if there isn't this useless default statement
-        }
-    }
-};
-/* EXPORT */
-/* harmony default export */ const channel = (Channel);
-
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/utils/lang.js
-/* MAIN */
-const Lang = {
-    /* API */
-    clamp: (number, lower, upper) => {
-        if (lower > upper)
-            return Math.min(lower, Math.max(upper, number));
-        return Math.min(upper, Math.max(lower, number));
-    },
-    round: (number) => {
-        return Math.round(number * 10000000000) / 10000000000;
-    }
-};
-/* EXPORT */
-/* harmony default export */ const lang = (Lang);
-
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/utils/unit.js
-/* MAIN */
-const Unit = {
-    /* API */
-    dec2hex: (dec) => {
-        const hex = Math.round(dec).toString(16);
-        return hex.length > 1 ? hex : `0${hex}`;
-    }
-};
-/* EXPORT */
-/* harmony default export */ const unit = (Unit);
-
-;// CONCATENATED MODULE: ./node_modules/khroma/dist/utils/index.js
-/* IMPORT */
-
-
-
-/* MAIN */
-const Utils = {
-    channel: channel,
-    lang: lang,
-    unit: unit
-};
-/* EXPORT */
-/* harmony default export */ const utils = (Utils);
-
-
-/***/ }),
-
-/***/ 67308:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _ListCache)
-});
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheClear.js
-/**
- * Removes all key-value entries from the list cache.
- *
- * @private
- * @name clear
- * @memberOf ListCache
- */
-function listCacheClear() {
-  this.__data__ = [];
-  this.size = 0;
-}
-
-/* harmony default export */ const _listCacheClear = (listCacheClear);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js
-var eq = __webpack_require__(79651);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_assocIndexOf.js
-
-
-/**
- * Gets the index at which the `key` is found in `array` of key-value pairs.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {*} key The key to search for.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function assocIndexOf(array, key) {
-  var length = array.length;
-  while (length--) {
-    if ((0,eq/* default */.Z)(array[length][0], key)) {
-      return length;
-    }
-  }
-  return -1;
-}
-
-/* harmony default export */ const _assocIndexOf = (assocIndexOf);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheDelete.js
-
-
-/** Used for built-in method references. */
-var arrayProto = Array.prototype;
-
-/** Built-in value references. */
-var splice = arrayProto.splice;
-
-/**
- * Removes `key` and its value from the list cache.
- *
- * @private
- * @name delete
- * @memberOf ListCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function listCacheDelete(key) {
-  var data = this.__data__,
-      index = _assocIndexOf(data, key);
-
-  if (index < 0) {
-    return false;
-  }
-  var lastIndex = data.length - 1;
-  if (index == lastIndex) {
-    data.pop();
-  } else {
-    splice.call(data, index, 1);
-  }
-  --this.size;
-  return true;
-}
-
-/* harmony default export */ const _listCacheDelete = (listCacheDelete);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheGet.js
-
-
-/**
- * Gets the list cache value for `key`.
- *
- * @private
- * @name get
- * @memberOf ListCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function listCacheGet(key) {
-  var data = this.__data__,
-      index = _assocIndexOf(data, key);
-
-  return index < 0 ? undefined : data[index][1];
-}
-
-/* harmony default export */ const _listCacheGet = (listCacheGet);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheHas.js
-
-
-/**
- * Checks if a list cache value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf ListCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function listCacheHas(key) {
-  return _assocIndexOf(this.__data__, key) > -1;
-}
-
-/* harmony default export */ const _listCacheHas = (listCacheHas);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_listCacheSet.js
-
-
-/**
- * Sets the list cache `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf ListCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the list cache instance.
- */
-function listCacheSet(key, value) {
-  var data = this.__data__,
-      index = _assocIndexOf(data, key);
-
-  if (index < 0) {
-    ++this.size;
-    data.push([key, value]);
-  } else {
-    data[index][1] = value;
-  }
-  return this;
-}
-
-/* harmony default export */ const _listCacheSet = (listCacheSet);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_ListCache.js
-
-
-
-
-
-
-/**
- * Creates an list cache object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function ListCache(entries) {
-  var index = -1,
-      length = entries == null ? 0 : entries.length;
-
-  this.clear();
-  while (++index < length) {
-    var entry = entries[index];
-    this.set(entry[0], entry[1]);
-  }
-}
-
-// Add methods to `ListCache`.
-ListCache.prototype.clear = _listCacheClear;
-ListCache.prototype['delete'] = _listCacheDelete;
-ListCache.prototype.get = _listCacheGet;
-ListCache.prototype.has = _listCacheHas;
-ListCache.prototype.set = _listCacheSet;
-
-/* harmony default export */ const _ListCache = (ListCache);
-
-
-/***/ }),
-
-/***/ 86183:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62508);
-/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(66092);
-
-
-
-/* Built-in method references that are verified to be native. */
-var Map = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(_root_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, 'Map');
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Map);
-
-
-/***/ }),
-
-/***/ 37834:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _MapCache)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_getNative.js + 4 modules
-var _getNative = __webpack_require__(62508);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeCreate.js
-
-
-/* Built-in method references that are verified to be native. */
-var nativeCreate = (0,_getNative/* default */.Z)(Object, 'create');
-
-/* harmony default export */ const _nativeCreate = (nativeCreate);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashClear.js
-
-
-/**
- * Removes all key-value entries from the hash.
- *
- * @private
- * @name clear
- * @memberOf Hash
- */
-function hashClear() {
-  this.__data__ = _nativeCreate ? _nativeCreate(null) : {};
-  this.size = 0;
-}
-
-/* harmony default export */ const _hashClear = (hashClear);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashDelete.js
-/**
- * Removes `key` and its value from the hash.
- *
- * @private
- * @name delete
- * @memberOf Hash
- * @param {Object} hash The hash to modify.
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function hashDelete(key) {
-  var result = this.has(key) && delete this.__data__[key];
-  this.size -= result ? 1 : 0;
-  return result;
-}
-
-/* harmony default export */ const _hashDelete = (hashDelete);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashGet.js
-
-
-/** Used to stand-in for `undefined` hash values. */
-var HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var _hashGet_hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Gets the hash value for `key`.
- *
- * @private
- * @name get
- * @memberOf Hash
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function hashGet(key) {
-  var data = this.__data__;
-  if (_nativeCreate) {
-    var result = data[key];
-    return result === HASH_UNDEFINED ? undefined : result;
-  }
-  return _hashGet_hasOwnProperty.call(data, key) ? data[key] : undefined;
-}
-
-/* harmony default export */ const _hashGet = (hashGet);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashHas.js
-
-
-/** Used for built-in method references. */
-var _hashHas_objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var _hashHas_hasOwnProperty = _hashHas_objectProto.hasOwnProperty;
-
-/**
- * Checks if a hash value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Hash
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function hashHas(key) {
-  var data = this.__data__;
-  return _nativeCreate ? (data[key] !== undefined) : _hashHas_hasOwnProperty.call(data, key);
-}
-
-/* harmony default export */ const _hashHas = (hashHas);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_hashSet.js
-
-
-/** Used to stand-in for `undefined` hash values. */
-var _hashSet_HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-/**
- * Sets the hash `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Hash
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the hash instance.
- */
-function hashSet(key, value) {
-  var data = this.__data__;
-  this.size += this.has(key) ? 0 : 1;
-  data[key] = (_nativeCreate && value === undefined) ? _hashSet_HASH_UNDEFINED : value;
-  return this;
-}
-
-/* harmony default export */ const _hashSet = (hashSet);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_Hash.js
-
-
-
-
-
-
-/**
- * Creates a hash object.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function Hash(entries) {
-  var index = -1,
-      length = entries == null ? 0 : entries.length;
-
-  this.clear();
-  while (++index < length) {
-    var entry = entries[index];
-    this.set(entry[0], entry[1]);
-  }
-}
-
-// Add methods to `Hash`.
-Hash.prototype.clear = _hashClear;
-Hash.prototype['delete'] = _hashDelete;
-Hash.prototype.get = _hashGet;
-Hash.prototype.has = _hashHas;
-Hash.prototype.set = _hashSet;
-
-/* harmony default export */ const _Hash = (Hash);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_ListCache.js + 6 modules
-var _ListCache = __webpack_require__(67308);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Map.js
-var _Map = __webpack_require__(86183);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheClear.js
-
-
-
-
-/**
- * Removes all key-value entries from the map.
- *
- * @private
- * @name clear
- * @memberOf MapCache
- */
-function mapCacheClear() {
-  this.size = 0;
-  this.__data__ = {
-    'hash': new _Hash,
-    'map': new (_Map/* default */.Z || _ListCache/* default */.Z),
-    'string': new _Hash
-  };
-}
-
-/* harmony default export */ const _mapCacheClear = (mapCacheClear);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_isKeyable.js
-/**
- * Checks if `value` is suitable for use as unique object key.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
- */
-function isKeyable(value) {
-  var type = typeof value;
-  return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
-    ? (value !== '__proto__')
-    : (value === null);
-}
-
-/* harmony default export */ const _isKeyable = (isKeyable);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMapData.js
-
-
-/**
- * Gets the data for `map`.
- *
- * @private
- * @param {Object} map The map to query.
- * @param {string} key The reference key.
- * @returns {*} Returns the map data.
- */
-function getMapData(map, key) {
-  var data = map.__data__;
-  return _isKeyable(key)
-    ? data[typeof key == 'string' ? 'string' : 'hash']
-    : data.map;
-}
-
-/* harmony default export */ const _getMapData = (getMapData);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheDelete.js
-
-
-/**
- * Removes `key` and its value from the map.
- *
- * @private
- * @name delete
- * @memberOf MapCache
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function mapCacheDelete(key) {
-  var result = _getMapData(this, key)['delete'](key);
-  this.size -= result ? 1 : 0;
-  return result;
-}
-
-/* harmony default export */ const _mapCacheDelete = (mapCacheDelete);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheGet.js
-
-
-/**
- * Gets the map value for `key`.
- *
- * @private
- * @name get
- * @memberOf MapCache
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function mapCacheGet(key) {
-  return _getMapData(this, key).get(key);
-}
-
-/* harmony default export */ const _mapCacheGet = (mapCacheGet);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheHas.js
-
-
-/**
- * Checks if a map value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf MapCache
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function mapCacheHas(key) {
-  return _getMapData(this, key).has(key);
-}
-
-/* harmony default export */ const _mapCacheHas = (mapCacheHas);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapCacheSet.js
-
-
-/**
- * Sets the map `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf MapCache
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the map cache instance.
- */
-function mapCacheSet(key, value) {
-  var data = _getMapData(this, key),
-      size = data.size;
-
-  data.set(key, value);
-  this.size += data.size == size ? 0 : 1;
-  return this;
-}
-
-/* harmony default export */ const _mapCacheSet = (mapCacheSet);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_MapCache.js
-
-
-
-
-
-
-/**
- * Creates a map cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function MapCache(entries) {
-  var index = -1,
-      length = entries == null ? 0 : entries.length;
-
-  this.clear();
-  while (++index < length) {
-    var entry = entries[index];
-    this.set(entry[0], entry[1]);
-  }
-}
-
-// Add methods to `MapCache`.
-MapCache.prototype.clear = _mapCacheClear;
-MapCache.prototype['delete'] = _mapCacheDelete;
-MapCache.prototype.get = _mapCacheGet;
-MapCache.prototype.has = _mapCacheHas;
-MapCache.prototype.set = _mapCacheSet;
-
-/* harmony default export */ const _MapCache = (MapCache);
-
-
-/***/ }),
-
-/***/ 93203:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62508);
-/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(66092);
-
-
-
-/* Built-in method references that are verified to be native. */
-var Set = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(_root_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, 'Set');
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Set);
-
-
-/***/ }),
-
-/***/ 63001:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _SetCache)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules
-var _MapCache = __webpack_require__(37834);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheAdd.js
-/** Used to stand-in for `undefined` hash values. */
-var HASH_UNDEFINED = '__lodash_hash_undefined__';
-
-/**
- * Adds `value` to the array cache.
- *
- * @private
- * @name add
- * @memberOf SetCache
- * @alias push
- * @param {*} value The value to cache.
- * @returns {Object} Returns the cache instance.
- */
-function setCacheAdd(value) {
-  this.__data__.set(value, HASH_UNDEFINED);
-  return this;
-}
-
-/* harmony default export */ const _setCacheAdd = (setCacheAdd);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_setCacheHas.js
-/**
- * Checks if `value` is in the array cache.
- *
- * @private
- * @name has
- * @memberOf SetCache
- * @param {*} value The value to search for.
- * @returns {number} Returns `true` if `value` is found, else `false`.
- */
-function setCacheHas(value) {
-  return this.__data__.has(value);
-}
-
-/* harmony default export */ const _setCacheHas = (setCacheHas);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_SetCache.js
-
-
-
-
-/**
- *
- * Creates an array cache object to store unique values.
- *
- * @private
- * @constructor
- * @param {Array} [values] The values to cache.
- */
-function SetCache(values) {
-  var index = -1,
-      length = values == null ? 0 : values.length;
-
-  this.__data__ = new _MapCache/* default */.Z;
-  while (++index < length) {
-    this.add(values[index]);
-  }
-}
-
-// Add methods to `SetCache`.
-SetCache.prototype.add = SetCache.prototype.push = _setCacheAdd;
-SetCache.prototype.has = _setCacheHas;
-
-/* harmony default export */ const _SetCache = (SetCache);
-
-
-/***/ }),
-
-/***/ 31667:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _Stack)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_ListCache.js + 6 modules
-var _ListCache = __webpack_require__(67308);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackClear.js
-
-
-/**
- * Removes all key-value entries from the stack.
- *
- * @private
- * @name clear
- * @memberOf Stack
- */
-function stackClear() {
-  this.__data__ = new _ListCache/* default */.Z;
-  this.size = 0;
-}
-
-/* harmony default export */ const _stackClear = (stackClear);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackDelete.js
-/**
- * Removes `key` and its value from the stack.
- *
- * @private
- * @name delete
- * @memberOf Stack
- * @param {string} key The key of the value to remove.
- * @returns {boolean} Returns `true` if the entry was removed, else `false`.
- */
-function stackDelete(key) {
-  var data = this.__data__,
-      result = data['delete'](key);
-
-  this.size = data.size;
-  return result;
-}
-
-/* harmony default export */ const _stackDelete = (stackDelete);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackGet.js
-/**
- * Gets the stack value for `key`.
- *
- * @private
- * @name get
- * @memberOf Stack
- * @param {string} key The key of the value to get.
- * @returns {*} Returns the entry value.
- */
-function stackGet(key) {
-  return this.__data__.get(key);
-}
-
-/* harmony default export */ const _stackGet = (stackGet);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackHas.js
-/**
- * Checks if a stack value for `key` exists.
- *
- * @private
- * @name has
- * @memberOf Stack
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function stackHas(key) {
-  return this.__data__.has(key);
-}
-
-/* harmony default export */ const _stackHas = (stackHas);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Map.js
-var _Map = __webpack_require__(86183);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_MapCache.js + 14 modules
-var _MapCache = __webpack_require__(37834);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_stackSet.js
-
-
-
-
-/** Used as the size to enable large array optimizations. */
-var LARGE_ARRAY_SIZE = 200;
-
-/**
- * Sets the stack `key` to `value`.
- *
- * @private
- * @name set
- * @memberOf Stack
- * @param {string} key The key of the value to set.
- * @param {*} value The value to set.
- * @returns {Object} Returns the stack cache instance.
- */
-function stackSet(key, value) {
-  var data = this.__data__;
-  if (data instanceof _ListCache/* default */.Z) {
-    var pairs = data.__data__;
-    if (!_Map/* default */.Z || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
-      pairs.push([key, value]);
-      this.size = ++data.size;
-      return this;
-    }
-    data = this.__data__ = new _MapCache/* default */.Z(pairs);
-  }
-  data.set(key, value);
-  this.size = data.size;
-  return this;
-}
-
-/* harmony default export */ const _stackSet = (stackSet);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_Stack.js
-
-
-
-
-
-
-
-/**
- * Creates a stack cache object to store key-value pairs.
- *
- * @private
- * @constructor
- * @param {Array} [entries] The key-value pairs to cache.
- */
-function Stack(entries) {
-  var data = this.__data__ = new _ListCache/* default */.Z(entries);
-  this.size = data.size;
-}
-
-// Add methods to `Stack`.
-Stack.prototype.clear = _stackClear;
-Stack.prototype['delete'] = _stackDelete;
-Stack.prototype.get = _stackGet;
-Stack.prototype.has = _stackHas;
-Stack.prototype.set = _stackSet;
-
-/* harmony default export */ const _Stack = (Stack);
-
-
-/***/ }),
-
-/***/ 17685:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092);
-
-
-/** Built-in value references. */
-var Symbol = _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Symbol */ .Z.Symbol;
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Symbol);
-
-
-/***/ }),
-
-/***/ 84073:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092);
-
-
-/** Built-in value references. */
-var Uint8Array = _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Uint8Array */ .Z.Uint8Array;
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (Uint8Array);
-
-
-/***/ }),
-
-/***/ 76579:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * A specialized version of `_.forEach` for arrays without support for
- * iteratee shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns `array`.
- */
-function arrayEach(array, iteratee) {
-  var index = -1,
-      length = array == null ? 0 : array.length;
-
-  while (++index < length) {
-    if (iteratee(array[index], index, array) === false) {
-      break;
-    }
-  }
-  return array;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayEach);
-
-
-/***/ }),
-
-/***/ 68774:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * A specialized version of `_.filter` for arrays without support for
- * iteratee shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {Array} Returns the new filtered array.
- */
-function arrayFilter(array, predicate) {
-  var index = -1,
-      length = array == null ? 0 : array.length,
-      resIndex = 0,
-      result = [];
-
-  while (++index < length) {
-    var value = array[index];
-    if (predicate(value, index, array)) {
-      result[resIndex++] = value;
-    }
-  }
-  return result;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayFilter);
-
-
-/***/ }),
-
-/***/ 87668:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _arrayLikeKeys)
-});
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTimes.js
-/**
- * The base implementation of `_.times` without support for iteratee shorthands
- * or max array length checks.
- *
- * @private
- * @param {number} n The number of times to invoke `iteratee`.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the array of results.
- */
-function baseTimes(n, iteratee) {
-  var index = -1,
-      result = Array(n);
-
-  while (++index < n) {
-    result[index] = iteratee(index);
-  }
-  return result;
-}
-
-/* harmony default export */ const _baseTimes = (baseTimes);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules
-var isArguments = __webpack_require__(29169);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js
-var isArray = __webpack_require__(27771);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules
-var isBuffer = __webpack_require__(77008);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js
-var _isIndex = __webpack_require__(56009);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules
-var isTypedArray = __webpack_require__(18843);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js
-
-
-
-
-
-
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var _arrayLikeKeys_hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Creates an array of the enumerable property names of the array-like `value`.
- *
- * @private
- * @param {*} value The value to query.
- * @param {boolean} inherited Specify returning inherited property names.
- * @returns {Array} Returns the array of property names.
- */
-function arrayLikeKeys(value, inherited) {
-  var isArr = (0,isArray/* default */.Z)(value),
-      isArg = !isArr && (0,isArguments/* default */.Z)(value),
-      isBuff = !isArr && !isArg && (0,isBuffer/* default */.Z)(value),
-      isType = !isArr && !isArg && !isBuff && (0,isTypedArray/* default */.Z)(value),
-      skipIndexes = isArr || isArg || isBuff || isType,
-      result = skipIndexes ? _baseTimes(value.length, String) : [],
-      length = result.length;
-
-  for (var key in value) {
-    if ((inherited || _arrayLikeKeys_hasOwnProperty.call(value, key)) &&
-        !(skipIndexes && (
-           // Safari 9 has enumerable `arguments.length` in strict mode.
-           key == 'length' ||
-           // Node.js 0.10 has enumerable non-index properties on buffers.
-           (isBuff && (key == 'offset' || key == 'parent')) ||
-           // PhantomJS 2 has enumerable non-index properties on typed arrays.
-           (isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset')) ||
-           // Skip index properties.
-           (0,_isIndex/* default */.Z)(key, length)
-        ))) {
-      result.push(key);
-    }
-  }
-  return result;
-}
-
-/* harmony default export */ const _arrayLikeKeys = (arrayLikeKeys);
-
-
-/***/ }),
-
-/***/ 74073:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * A specialized version of `_.map` for arrays without support for iteratee
- * shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the new mapped array.
- */
-function arrayMap(array, iteratee) {
-  var index = -1,
-      length = array == null ? 0 : array.length,
-      result = Array(length);
-
-  while (++index < length) {
-    result[index] = iteratee(array[index], index, array);
-  }
-  return result;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayMap);
-
-
-/***/ }),
-
-/***/ 58694:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * Appends the elements of `values` to `array`.
- *
- * @private
- * @param {Array} array The array to modify.
- * @param {Array} values The values to append.
- * @returns {Array} Returns `array`.
- */
-function arrayPush(array, values) {
-  var index = -1,
-      length = values.length,
-      offset = array.length;
-
-  while (++index < length) {
-    array[offset + index] = values[index];
-  }
-  return array;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (arrayPush);
-
-
-/***/ }),
-
-/***/ 72954:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74752);
-/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(79651);
-
-
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Assigns `value` to `key` of `object` if the existing value is not equivalent
- * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * for equality comparisons.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {string} key The key of the property to assign.
- * @param {*} value The value to assign.
- */
-function assignValue(object, key, value) {
-  var objValue = object[key];
-  if (!(hasOwnProperty.call(object, key) && (0,_eq_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(objValue, value)) ||
-      (value === undefined && !(key in object))) {
-    (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, value);
-  }
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (assignValue);
-
-
-/***/ }),
-
-/***/ 74752:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77904);
-
-
-/**
- * The base implementation of `assignValue` and `assignMergeValue` without
- * value checks.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {string} key The key of the property to assign.
- * @param {*} value The value to assign.
- */
-function baseAssignValue(object, key, value) {
-  if (key == '__proto__' && _defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z) {
-    (0,_defineProperty_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, {
-      'configurable': true,
-      'enumerable': true,
-      'value': value,
-      'writable': true
-    });
-  } else {
-    object[key] = value;
-  }
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseAssignValue);
-
-
-/***/ }),
-
-/***/ 48451:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _baseClone)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules
-var _Stack = __webpack_require__(31667);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayEach.js
-var _arrayEach = __webpack_require__(76579);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js
-var _assignValue = __webpack_require__(72954);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_copyObject.js
-var _copyObject = __webpack_require__(31899);
-// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js
-var keys = __webpack_require__(17179);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssign.js
-
-
-
-/**
- * The base implementation of `_.assign` without support for multiple sources
- * or `customizer` functions.
- *
- * @private
- * @param {Object} object The destination object.
- * @param {Object} source The source object.
- * @returns {Object} Returns `object`.
- */
-function baseAssign(object, source) {
-  return object && (0,_copyObject/* default */.Z)(source, (0,keys/* default */.Z)(source), object);
-}
-
-/* harmony default export */ const _baseAssign = (baseAssign);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/keysIn.js + 2 modules
-var keysIn = __webpack_require__(32957);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseAssignIn.js
-
-
-
-/**
- * The base implementation of `_.assignIn` without support for multiple sources
- * or `customizer` functions.
- *
- * @private
- * @param {Object} object The destination object.
- * @param {Object} source The source object.
- * @returns {Object} Returns `object`.
- */
-function baseAssignIn(object, source) {
-  return object && (0,_copyObject/* default */.Z)(source, (0,keysIn/* default */.Z)(source), object);
-}
-
-/* harmony default export */ const _baseAssignIn = (baseAssignIn);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneBuffer.js
-var _cloneBuffer = __webpack_require__(91050);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_copyArray.js
-var _copyArray = __webpack_require__(87215);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_getSymbols.js
-var _getSymbols = __webpack_require__(95695);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbols.js
-
-
-
-/**
- * Copies own symbols of `source` to `object`.
- *
- * @private
- * @param {Object} source The object to copy symbols from.
- * @param {Object} [object={}] The object to copy symbols to.
- * @returns {Object} Returns `object`.
- */
-function copySymbols(source, object) {
-  return (0,_copyObject/* default */.Z)(source, (0,_getSymbols/* default */.Z)(source), object);
-}
-
-/* harmony default export */ const _copySymbols = (copySymbols);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js
-var _arrayPush = __webpack_require__(58694);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js
-var _getPrototype = __webpack_require__(12513);
-// EXTERNAL MODULE: ./node_modules/lodash-es/stubArray.js
-var stubArray = __webpack_require__(60532);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_getSymbolsIn.js
-
-
-
-
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeGetSymbols = Object.getOwnPropertySymbols;
-
-/**
- * Creates an array of the own and inherited enumerable symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of symbols.
- */
-var getSymbolsIn = !nativeGetSymbols ? stubArray/* default */.Z : function(object) {
-  var result = [];
-  while (object) {
-    (0,_arrayPush/* default */.Z)(result, (0,_getSymbols/* default */.Z)(object));
-    object = (0,_getPrototype/* default */.Z)(object);
-  }
-  return result;
-};
-
-/* harmony default export */ const _getSymbolsIn = (getSymbolsIn);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_copySymbolsIn.js
-
-
-
-/**
- * Copies own and inherited symbols of `source` to `object`.
- *
- * @private
- * @param {Object} source The object to copy symbols from.
- * @param {Object} [object={}] The object to copy symbols to.
- * @returns {Object} Returns `object`.
- */
-function copySymbolsIn(source, object) {
-  return (0,_copyObject/* default */.Z)(source, _getSymbolsIn(source), object);
-}
-
-/* harmony default export */ const _copySymbolsIn = (copySymbolsIn);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js
-var _getAllKeys = __webpack_require__(1808);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetAllKeys.js
-var _baseGetAllKeys = __webpack_require__(63327);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_getAllKeysIn.js
-
-
-
-
-/**
- * Creates an array of own and inherited enumerable property names and
- * symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names and symbols.
- */
-function getAllKeysIn(object) {
-  return (0,_baseGetAllKeys/* default */.Z)(object, keysIn/* default */.Z, _getSymbolsIn);
-}
-
-/* harmony default export */ const _getAllKeysIn = (getAllKeysIn);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules
-var _getTag = __webpack_require__(83970);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneArray.js
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var _initCloneArray_hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Initializes an array clone.
- *
- * @private
- * @param {Array} array The array to clone.
- * @returns {Array} Returns the initialized clone.
- */
-function initCloneArray(array) {
-  var length = array.length,
-      result = new array.constructor(length);
-
-  // Add properties assigned by `RegExp#exec`.
-  if (length && typeof array[0] == 'string' && _initCloneArray_hasOwnProperty.call(array, 'index')) {
-    result.index = array.index;
-    result.input = array.input;
-  }
-  return result;
-}
-
-/* harmony default export */ const _initCloneArray = (initCloneArray);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneArrayBuffer.js
-var _cloneArrayBuffer = __webpack_require__(41884);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneDataView.js
-
-
-/**
- * Creates a clone of `dataView`.
- *
- * @private
- * @param {Object} dataView The data view to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Object} Returns the cloned data view.
- */
-function cloneDataView(dataView, isDeep) {
-  var buffer = isDeep ? (0,_cloneArrayBuffer/* default */.Z)(dataView.buffer) : dataView.buffer;
-  return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
-}
-
-/* harmony default export */ const _cloneDataView = (cloneDataView);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneRegExp.js
-/** Used to match `RegExp` flags from their coerced string values. */
-var reFlags = /\w*$/;
-
-/**
- * Creates a clone of `regexp`.
- *
- * @private
- * @param {Object} regexp The regexp to clone.
- * @returns {Object} Returns the cloned regexp.
- */
-function cloneRegExp(regexp) {
-  var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
-  result.lastIndex = regexp.lastIndex;
-  return result;
-}
-
-/* harmony default export */ const _cloneRegExp = (cloneRegExp);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js
-var _Symbol = __webpack_require__(17685);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_cloneSymbol.js
-
-
-/** Used to convert symbols to primitives and strings. */
-var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined,
-    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
-
-/**
- * Creates a clone of the `symbol` object.
- *
- * @private
- * @param {Object} symbol The symbol object to clone.
- * @returns {Object} Returns the cloned symbol object.
- */
-function cloneSymbol(symbol) {
-  return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
-}
-
-/* harmony default export */ const _cloneSymbol = (cloneSymbol);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_cloneTypedArray.js
-var _cloneTypedArray = __webpack_require__(12701);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneByTag.js
-
-
-
-
-
-
-/** `Object#toString` result references. */
-var boolTag = '[object Boolean]',
-    dateTag = '[object Date]',
-    mapTag = '[object Map]',
-    numberTag = '[object Number]',
-    regexpTag = '[object RegExp]',
-    setTag = '[object Set]',
-    stringTag = '[object String]',
-    symbolTag = '[object Symbol]';
-
-var arrayBufferTag = '[object ArrayBuffer]',
-    dataViewTag = '[object DataView]',
-    float32Tag = '[object Float32Array]',
-    float64Tag = '[object Float64Array]',
-    int8Tag = '[object Int8Array]',
-    int16Tag = '[object Int16Array]',
-    int32Tag = '[object Int32Array]',
-    uint8Tag = '[object Uint8Array]',
-    uint8ClampedTag = '[object Uint8ClampedArray]',
-    uint16Tag = '[object Uint16Array]',
-    uint32Tag = '[object Uint32Array]';
-
-/**
- * Initializes an object clone based on its `toStringTag`.
- *
- * **Note:** This function only supports cloning values with tags of
- * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.
- *
- * @private
- * @param {Object} object The object to clone.
- * @param {string} tag The `toStringTag` of the object to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Object} Returns the initialized clone.
- */
-function initCloneByTag(object, tag, isDeep) {
-  var Ctor = object.constructor;
-  switch (tag) {
-    case arrayBufferTag:
-      return (0,_cloneArrayBuffer/* default */.Z)(object);
-
-    case boolTag:
-    case dateTag:
-      return new Ctor(+object);
-
-    case dataViewTag:
-      return _cloneDataView(object, isDeep);
-
-    case float32Tag: case float64Tag:
-    case int8Tag: case int16Tag: case int32Tag:
-    case uint8Tag: case uint8ClampedTag: case uint16Tag: case uint32Tag:
-      return (0,_cloneTypedArray/* default */.Z)(object, isDeep);
-
-    case mapTag:
-      return new Ctor;
-
-    case numberTag:
-    case stringTag:
-      return new Ctor(object);
-
-    case regexpTag:
-      return _cloneRegExp(object);
-
-    case setTag:
-      return new Ctor;
-
-    case symbolTag:
-      return _cloneSymbol(object);
-  }
-}
-
-/* harmony default export */ const _initCloneByTag = (initCloneByTag);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_initCloneObject.js + 1 modules
-var _initCloneObject = __webpack_require__(73658);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js
-var isArray = __webpack_require__(27771);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules
-var isBuffer = __webpack_require__(77008);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js
-var isObjectLike = __webpack_require__(18533);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMap.js
-
-
-
-/** `Object#toString` result references. */
-var _baseIsMap_mapTag = '[object Map]';
-
-/**
- * The base implementation of `_.isMap` without Node.js optimizations.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a map, else `false`.
- */
-function baseIsMap(value) {
-  return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsMap_mapTag;
-}
-
-/* harmony default export */ const _baseIsMap = (baseIsMap);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js
-var _baseUnary = __webpack_require__(21162);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js
-var _nodeUtil = __webpack_require__(98351);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/isMap.js
-
-
-
-
-/* Node.js helper references. */
-var nodeIsMap = _nodeUtil/* default */.Z && _nodeUtil/* default.isMap */.Z.isMap;
-
-/**
- * Checks if `value` is classified as a `Map` object.
- *
- * @static
- * @memberOf _
- * @since 4.3.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a map, else `false`.
- * @example
- *
- * _.isMap(new Map);
- * // => true
- *
- * _.isMap(new WeakMap);
- * // => false
- */
-var isMap = nodeIsMap ? (0,_baseUnary/* default */.Z)(nodeIsMap) : _baseIsMap;
-
-/* harmony default export */ const lodash_es_isMap = (isMap);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js
-var isObject = __webpack_require__(77226);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsSet.js
-
-
-
-/** `Object#toString` result references. */
-var _baseIsSet_setTag = '[object Set]';
-
-/**
- * The base implementation of `_.isSet` without Node.js optimizations.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a set, else `false`.
- */
-function baseIsSet(value) {
-  return (0,isObjectLike/* default */.Z)(value) && (0,_getTag/* default */.Z)(value) == _baseIsSet_setTag;
-}
-
-/* harmony default export */ const _baseIsSet = (baseIsSet);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/isSet.js
-
-
-
-
-/* Node.js helper references. */
-var nodeIsSet = _nodeUtil/* default */.Z && _nodeUtil/* default.isSet */.Z.isSet;
-
-/**
- * Checks if `value` is classified as a `Set` object.
- *
- * @static
- * @memberOf _
- * @since 4.3.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a set, else `false`.
- * @example
- *
- * _.isSet(new Set);
- * // => true
- *
- * _.isSet(new WeakSet);
- * // => false
- */
-var isSet = nodeIsSet ? (0,_baseUnary/* default */.Z)(nodeIsSet) : _baseIsSet;
-
-/* harmony default export */ const lodash_es_isSet = (isSet);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseClone.js
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-/** Used to compose bitmasks for cloning. */
-var CLONE_DEEP_FLAG = 1,
-    CLONE_FLAT_FLAG = 2,
-    CLONE_SYMBOLS_FLAG = 4;
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]',
-    arrayTag = '[object Array]',
-    _baseClone_boolTag = '[object Boolean]',
-    _baseClone_dateTag = '[object Date]',
-    errorTag = '[object Error]',
-    funcTag = '[object Function]',
-    genTag = '[object GeneratorFunction]',
-    _baseClone_mapTag = '[object Map]',
-    _baseClone_numberTag = '[object Number]',
-    objectTag = '[object Object]',
-    _baseClone_regexpTag = '[object RegExp]',
-    _baseClone_setTag = '[object Set]',
-    _baseClone_stringTag = '[object String]',
-    _baseClone_symbolTag = '[object Symbol]',
-    weakMapTag = '[object WeakMap]';
-
-var _baseClone_arrayBufferTag = '[object ArrayBuffer]',
-    _baseClone_dataViewTag = '[object DataView]',
-    _baseClone_float32Tag = '[object Float32Array]',
-    _baseClone_float64Tag = '[object Float64Array]',
-    _baseClone_int8Tag = '[object Int8Array]',
-    _baseClone_int16Tag = '[object Int16Array]',
-    _baseClone_int32Tag = '[object Int32Array]',
-    _baseClone_uint8Tag = '[object Uint8Array]',
-    _baseClone_uint8ClampedTag = '[object Uint8ClampedArray]',
-    _baseClone_uint16Tag = '[object Uint16Array]',
-    _baseClone_uint32Tag = '[object Uint32Array]';
-
-/** Used to identify `toStringTag` values supported by `_.clone`. */
-var cloneableTags = {};
-cloneableTags[argsTag] = cloneableTags[arrayTag] =
-cloneableTags[_baseClone_arrayBufferTag] = cloneableTags[_baseClone_dataViewTag] =
-cloneableTags[_baseClone_boolTag] = cloneableTags[_baseClone_dateTag] =
-cloneableTags[_baseClone_float32Tag] = cloneableTags[_baseClone_float64Tag] =
-cloneableTags[_baseClone_int8Tag] = cloneableTags[_baseClone_int16Tag] =
-cloneableTags[_baseClone_int32Tag] = cloneableTags[_baseClone_mapTag] =
-cloneableTags[_baseClone_numberTag] = cloneableTags[objectTag] =
-cloneableTags[_baseClone_regexpTag] = cloneableTags[_baseClone_setTag] =
-cloneableTags[_baseClone_stringTag] = cloneableTags[_baseClone_symbolTag] =
-cloneableTags[_baseClone_uint8Tag] = cloneableTags[_baseClone_uint8ClampedTag] =
-cloneableTags[_baseClone_uint16Tag] = cloneableTags[_baseClone_uint32Tag] = true;
-cloneableTags[errorTag] = cloneableTags[funcTag] =
-cloneableTags[weakMapTag] = false;
-
-/**
- * The base implementation of `_.clone` and `_.cloneDeep` which tracks
- * traversed objects.
- *
- * @private
- * @param {*} value The value to clone.
- * @param {boolean} bitmask The bitmask flags.
- *  1 - Deep clone
- *  2 - Flatten inherited properties
- *  4 - Clone symbols
- * @param {Function} [customizer] The function to customize cloning.
- * @param {string} [key] The key of `value`.
- * @param {Object} [object] The parent object of `value`.
- * @param {Object} [stack] Tracks traversed objects and their clone counterparts.
- * @returns {*} Returns the cloned value.
- */
-function baseClone(value, bitmask, customizer, key, object, stack) {
-  var result,
-      isDeep = bitmask & CLONE_DEEP_FLAG,
-      isFlat = bitmask & CLONE_FLAT_FLAG,
-      isFull = bitmask & CLONE_SYMBOLS_FLAG;
-
-  if (customizer) {
-    result = object ? customizer(value, key, object, stack) : customizer(value);
-  }
-  if (result !== undefined) {
-    return result;
-  }
-  if (!(0,isObject/* default */.Z)(value)) {
-    return value;
-  }
-  var isArr = (0,isArray/* default */.Z)(value);
-  if (isArr) {
-    result = _initCloneArray(value);
-    if (!isDeep) {
-      return (0,_copyArray/* default */.Z)(value, result);
-    }
-  } else {
-    var tag = (0,_getTag/* default */.Z)(value),
-        isFunc = tag == funcTag || tag == genTag;
-
-    if ((0,isBuffer/* default */.Z)(value)) {
-      return (0,_cloneBuffer/* default */.Z)(value, isDeep);
-    }
-    if (tag == objectTag || tag == argsTag || (isFunc && !object)) {
-      result = (isFlat || isFunc) ? {} : (0,_initCloneObject/* default */.Z)(value);
-      if (!isDeep) {
-        return isFlat
-          ? _copySymbolsIn(value, _baseAssignIn(result, value))
-          : _copySymbols(value, _baseAssign(result, value));
-      }
-    } else {
-      if (!cloneableTags[tag]) {
-        return object ? value : {};
-      }
-      result = _initCloneByTag(value, tag, isDeep);
-    }
-  }
-  // Check for circular references and return its corresponding clone.
-  stack || (stack = new _Stack/* default */.Z);
-  var stacked = stack.get(value);
-  if (stacked) {
-    return stacked;
-  }
-  stack.set(value, result);
-
-  if (lodash_es_isSet(value)) {
-    value.forEach(function(subValue) {
-      result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));
-    });
-  } else if (lodash_es_isMap(value)) {
-    value.forEach(function(subValue, key) {
-      result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));
-    });
-  }
-
-  var keysFunc = isFull
-    ? (isFlat ? _getAllKeysIn : _getAllKeys/* default */.Z)
-    : (isFlat ? keysIn/* default */.Z : keys/* default */.Z);
-
-  var props = isArr ? undefined : keysFunc(value);
-  (0,_arrayEach/* default */.Z)(props || value, function(subValue, key) {
-    if (props) {
-      key = subValue;
-      subValue = value[key];
-    }
-    // Recursively populate clone (susceptible to call stack limits).
-    (0,_assignValue/* default */.Z)(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));
-  });
-  return result;
-}
-
-/* harmony default export */ const _baseClone = (baseClone);
-
-
-/***/ }),
-
-/***/ 49811:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _baseEach)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseForOwn.js
-var _baseForOwn = __webpack_require__(2693);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js
-var isArrayLike = __webpack_require__(50585);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseEach.js
-
-
-/**
- * Creates a `baseEach` or `baseEachRight` function.
- *
- * @private
- * @param {Function} eachFunc The function to iterate over a collection.
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {Function} Returns the new base function.
- */
-function createBaseEach(eachFunc, fromRight) {
-  return function(collection, iteratee) {
-    if (collection == null) {
-      return collection;
-    }
-    if (!(0,isArrayLike/* default */.Z)(collection)) {
-      return eachFunc(collection, iteratee);
-    }
-    var length = collection.length,
-        index = fromRight ? length : -1,
-        iterable = Object(collection);
-
-    while ((fromRight ? index-- : ++index < length)) {
-      if (iteratee(iterable[index], index, iterable) === false) {
-        break;
-      }
-    }
-    return collection;
-  };
-}
-
-/* harmony default export */ const _createBaseEach = (createBaseEach);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseEach.js
-
-
-
-/**
- * The base implementation of `_.forEach` without support for iteratee shorthands.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array|Object} Returns `collection`.
- */
-var baseEach = _createBaseEach(_baseForOwn/* default */.Z);
-
-/* harmony default export */ const _baseEach = (baseEach);
-
-
-/***/ }),
-
-/***/ 21692:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * The base implementation of `_.findIndex` and `_.findLastIndex` without
- * support for iteratee shorthands.
- *
- * @private
- * @param {Array} array The array to inspect.
- * @param {Function} predicate The function invoked per iteration.
- * @param {number} fromIndex The index to search from.
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {number} Returns the index of the matched value, else `-1`.
- */
-function baseFindIndex(array, predicate, fromIndex, fromRight) {
-  var length = array.length,
-      index = fromIndex + (fromRight ? 1 : -1);
-
-  while ((fromRight ? index-- : ++index < length)) {
-    if (predicate(array[index], index, array)) {
-      return index;
-    }
-  }
-  return -1;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseFindIndex);
-
-
-/***/ }),
-
-/***/ 10626:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _baseFlatten)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayPush.js
-var _arrayPush = __webpack_require__(58694);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js
-var _Symbol = __webpack_require__(17685);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArguments.js + 1 modules
-var isArguments = __webpack_require__(29169);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js
-var isArray = __webpack_require__(27771);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_isFlattenable.js
-
-
-
-
-/** Built-in value references. */
-var spreadableSymbol = _Symbol/* default */.Z ? _Symbol/* default.isConcatSpreadable */.Z.isConcatSpreadable : undefined;
-
-/**
- * Checks if `value` is a flattenable `arguments` object or array.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.
- */
-function isFlattenable(value) {
-  return (0,isArray/* default */.Z)(value) || (0,isArguments/* default */.Z)(value) ||
-    !!(spreadableSymbol && value && value[spreadableSymbol]);
-}
-
-/* harmony default export */ const _isFlattenable = (isFlattenable);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFlatten.js
-
-
-
-/**
- * The base implementation of `_.flatten` with support for restricting flattening.
- *
- * @private
- * @param {Array} array The array to flatten.
- * @param {number} depth The maximum recursion depth.
- * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.
- * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.
- * @param {Array} [result=[]] The initial result value.
- * @returns {Array} Returns the new flattened array.
- */
-function baseFlatten(array, depth, predicate, isStrict, result) {
-  var index = -1,
-      length = array.length;
-
-  predicate || (predicate = _isFlattenable);
-  result || (result = []);
-
-  while (++index < length) {
-    var value = array[index];
-    if (depth > 0 && predicate(value)) {
-      if (depth > 1) {
-        // Recursively flatten arrays (susceptible to call stack limits).
-        baseFlatten(value, depth - 1, predicate, isStrict, result);
-      } else {
-        (0,_arrayPush/* default */.Z)(result, value);
-      }
-    } else if (!isStrict) {
-      result[result.length] = value;
-    }
-  }
-  return result;
-}
-
-/* harmony default export */ const _baseFlatten = (baseFlatten);
-
-
-/***/ }),
-
-/***/ 61395:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _baseFor)
-});
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_createBaseFor.js
-/**
- * Creates a base function for methods like `_.forIn` and `_.forOwn`.
- *
- * @private
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {Function} Returns the new base function.
- */
-function createBaseFor(fromRight) {
-  return function(object, iteratee, keysFunc) {
-    var index = -1,
-        iterable = Object(object),
-        props = keysFunc(object),
-        length = props.length;
-
-    while (length--) {
-      var key = props[fromRight ? length : ++index];
-      if (iteratee(iterable[key], key, iterable) === false) {
-        break;
-      }
-    }
-    return object;
-  };
-}
-
-/* harmony default export */ const _createBaseFor = (createBaseFor);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFor.js
-
-
-/**
- * The base implementation of `baseForOwn` which iterates over `object`
- * properties returned by `keysFunc` and invokes `iteratee` for each property.
- * Iteratee functions may exit iteration early by explicitly returning `false`.
- *
- * @private
- * @param {Object} object The object to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @param {Function} keysFunc The function to get the keys of `object`.
- * @returns {Object} Returns `object`.
- */
-var baseFor = _createBaseFor();
-
-/* harmony default export */ const _baseFor = (baseFor);
-
-
-/***/ }),
-
-/***/ 2693:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _baseFor_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(61395);
-/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179);
-
-
-
-/**
- * The base implementation of `_.forOwn` without support for iteratee shorthands.
- *
- * @private
- * @param {Object} object The object to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Object} Returns `object`.
- */
-function baseForOwn(object, iteratee) {
-  return object && (0,_baseFor_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, iteratee, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z);
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseForOwn);
-
-
-/***/ }),
-
-/***/ 13317:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823);
-/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281);
-
-
-
-/**
- * The base implementation of `_.get` without support for default values.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array|string} path The path of the property to get.
- * @returns {*} Returns the resolved value.
- */
-function baseGet(object, path) {
-  path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object);
-
-  var index = 0,
-      length = path.length;
-
-  while (object != null && index < length) {
-    object = object[(0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index++])];
-  }
-  return (index && index == length) ? object : undefined;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGet);
-
-
-/***/ }),
-
-/***/ 63327:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _arrayPush_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(58694);
-/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771);
-
-
-
-/**
- * The base implementation of `getAllKeys` and `getAllKeysIn` which uses
- * `keysFunc` and `symbolsFunc` to get the enumerable property names and
- * symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Function} keysFunc The function to get the keys of `object`.
- * @param {Function} symbolsFunc The function to get the symbols of `object`.
- * @returns {Array} Returns the array of property names and symbols.
- */
-function baseGetAllKeys(object, keysFunc, symbolsFunc) {
-  var result = keysFunc(object);
-  return (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? result : (0,_arrayPush_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(result, symbolsFunc(object));
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseGetAllKeys);
-
-
-/***/ }),
-
-/***/ 93589:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _baseGetTag)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js
-var _Symbol = __webpack_require__(17685);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_getRawTag.js
-
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var _getRawTag_hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
-var nativeObjectToString = objectProto.toString;
-
-/** Built-in value references. */
-var symToStringTag = _Symbol/* default */.Z ? _Symbol/* default.toStringTag */.Z.toStringTag : undefined;
-
-/**
- * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the raw `toStringTag`.
- */
-function getRawTag(value) {
-  var isOwn = _getRawTag_hasOwnProperty.call(value, symToStringTag),
-      tag = value[symToStringTag];
-
-  try {
-    value[symToStringTag] = undefined;
-    var unmasked = true;
-  } catch (e) {}
-
-  var result = nativeObjectToString.call(value);
-  if (unmasked) {
-    if (isOwn) {
-      value[symToStringTag] = tag;
-    } else {
-      delete value[symToStringTag];
-    }
-  }
-  return result;
-}
-
-/* harmony default export */ const _getRawTag = (getRawTag);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_objectToString.js
-/** Used for built-in method references. */
-var _objectToString_objectProto = Object.prototype;
-
-/**
- * Used to resolve the
- * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
- * of values.
- */
-var _objectToString_nativeObjectToString = _objectToString_objectProto.toString;
-
-/**
- * Converts `value` to a string using `Object.prototype.toString`.
- *
- * @private
- * @param {*} value The value to convert.
- * @returns {string} Returns the converted string.
- */
-function objectToString(value) {
-  return _objectToString_nativeObjectToString.call(value);
-}
-
-/* harmony default export */ const _objectToString = (objectToString);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseGetTag.js
-
-
-
-
-/** `Object#toString` result references. */
-var nullTag = '[object Null]',
-    undefinedTag = '[object Undefined]';
-
-/** Built-in value references. */
-var _baseGetTag_symToStringTag = _Symbol/* default */.Z ? _Symbol/* default.toStringTag */.Z.toStringTag : undefined;
-
-/**
- * The base implementation of `getTag` without fallbacks for buggy environments.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
-function baseGetTag(value) {
-  if (value == null) {
-    return value === undefined ? undefinedTag : nullTag;
-  }
-  return (_baseGetTag_symToStringTag && _baseGetTag_symToStringTag in Object(value))
-    ? _getRawTag(value)
-    : _objectToString(value);
-}
-
-/* harmony default export */ const _baseGetTag = (baseGetTag);
-
-
-/***/ }),
-
-/***/ 74765:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _baseIteratee)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Stack.js + 5 modules
-var _Stack = __webpack_require__(31667);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_SetCache.js + 2 modules
-var _SetCache = __webpack_require__(63001);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_arraySome.js
-/**
- * A specialized version of `_.some` for arrays without support for iteratee
- * shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {boolean} Returns `true` if any element passes the predicate check,
- *  else `false`.
- */
-function arraySome(array, predicate) {
-  var index = -1,
-      length = array == null ? 0 : array.length;
-
-  while (++index < length) {
-    if (predicate(array[index], index, array)) {
-      return true;
-    }
-  }
-  return false;
-}
-
-/* harmony default export */ const _arraySome = (arraySome);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_cacheHas.js
-var _cacheHas = __webpack_require__(59548);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalArrays.js
-
-
-
-
-/** Used to compose bitmasks for value comparisons. */
-var COMPARE_PARTIAL_FLAG = 1,
-    COMPARE_UNORDERED_FLAG = 2;
-
-/**
- * A specialized version of `baseIsEqualDeep` for arrays with support for
- * partial deep comparisons.
- *
- * @private
- * @param {Array} array The array to compare.
- * @param {Array} other The other array to compare.
- * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
- * @param {Function} customizer The function to customize comparisons.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Object} stack Tracks traversed `array` and `other` objects.
- * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
- */
-function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {
-  var isPartial = bitmask & COMPARE_PARTIAL_FLAG,
-      arrLength = array.length,
-      othLength = other.length;
-
-  if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
-    return false;
-  }
-  // Check that cyclic values are equal.
-  var arrStacked = stack.get(array);
-  var othStacked = stack.get(other);
-  if (arrStacked && othStacked) {
-    return arrStacked == other && othStacked == array;
-  }
-  var index = -1,
-      result = true,
-      seen = (bitmask & COMPARE_UNORDERED_FLAG) ? new _SetCache/* default */.Z : undefined;
-
-  stack.set(array, other);
-  stack.set(other, array);
-
-  // Ignore non-index properties.
-  while (++index < arrLength) {
-    var arrValue = array[index],
-        othValue = other[index];
-
-    if (customizer) {
-      var compared = isPartial
-        ? customizer(othValue, arrValue, index, other, array, stack)
-        : customizer(arrValue, othValue, index, array, other, stack);
-    }
-    if (compared !== undefined) {
-      if (compared) {
-        continue;
-      }
-      result = false;
-      break;
-    }
-    // Recursively compare arrays (susceptible to call stack limits).
-    if (seen) {
-      if (!_arraySome(other, function(othValue, othIndex) {
-            if (!(0,_cacheHas/* default */.Z)(seen, othIndex) &&
-                (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {
-              return seen.push(othIndex);
-            }
-          })) {
-        result = false;
-        break;
-      }
-    } else if (!(
-          arrValue === othValue ||
-            equalFunc(arrValue, othValue, bitmask, customizer, stack)
-        )) {
-      result = false;
-      break;
-    }
-  }
-  stack['delete'](array);
-  stack['delete'](other);
-  return result;
-}
-
-/* harmony default export */ const _equalArrays = (equalArrays);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js
-var _Symbol = __webpack_require__(17685);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Uint8Array.js
-var _Uint8Array = __webpack_require__(84073);
-// EXTERNAL MODULE: ./node_modules/lodash-es/eq.js
-var eq = __webpack_require__(79651);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_mapToArray.js
-/**
- * Converts `map` to its key-value pairs.
- *
- * @private
- * @param {Object} map The map to convert.
- * @returns {Array} Returns the key-value pairs.
- */
-function mapToArray(map) {
-  var index = -1,
-      result = Array(map.size);
-
-  map.forEach(function(value, key) {
-    result[++index] = [key, value];
-  });
-  return result;
-}
-
-/* harmony default export */ const _mapToArray = (mapToArray);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_setToArray.js
-var _setToArray = __webpack_require__(6545);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalByTag.js
-
-
-
-
-
-
-
-/** Used to compose bitmasks for value comparisons. */
-var _equalByTag_COMPARE_PARTIAL_FLAG = 1,
-    _equalByTag_COMPARE_UNORDERED_FLAG = 2;
-
-/** `Object#toString` result references. */
-var boolTag = '[object Boolean]',
-    dateTag = '[object Date]',
-    errorTag = '[object Error]',
-    mapTag = '[object Map]',
-    numberTag = '[object Number]',
-    regexpTag = '[object RegExp]',
-    setTag = '[object Set]',
-    stringTag = '[object String]',
-    symbolTag = '[object Symbol]';
-
-var arrayBufferTag = '[object ArrayBuffer]',
-    dataViewTag = '[object DataView]';
-
-/** Used to convert symbols to primitives and strings. */
-var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined,
-    symbolValueOf = symbolProto ? symbolProto.valueOf : undefined;
-
-/**
- * A specialized version of `baseIsEqualDeep` for comparing objects of
- * the same `toStringTag`.
- *
- * **Note:** This function only supports comparing values with tags of
- * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {string} tag The `toStringTag` of the objects to compare.
- * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
- * @param {Function} customizer The function to customize comparisons.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Object} stack Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
-function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {
-  switch (tag) {
-    case dataViewTag:
-      if ((object.byteLength != other.byteLength) ||
-          (object.byteOffset != other.byteOffset)) {
-        return false;
-      }
-      object = object.buffer;
-      other = other.buffer;
-
-    case arrayBufferTag:
-      if ((object.byteLength != other.byteLength) ||
-          !equalFunc(new _Uint8Array/* default */.Z(object), new _Uint8Array/* default */.Z(other))) {
-        return false;
-      }
-      return true;
-
-    case boolTag:
-    case dateTag:
-    case numberTag:
-      // Coerce booleans to `1` or `0` and dates to milliseconds.
-      // Invalid dates are coerced to `NaN`.
-      return (0,eq/* default */.Z)(+object, +other);
-
-    case errorTag:
-      return object.name == other.name && object.message == other.message;
-
-    case regexpTag:
-    case stringTag:
-      // Coerce regexes to strings and treat strings, primitives and objects,
-      // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
-      // for more details.
-      return object == (other + '');
-
-    case mapTag:
-      var convert = _mapToArray;
-
-    case setTag:
-      var isPartial = bitmask & _equalByTag_COMPARE_PARTIAL_FLAG;
-      convert || (convert = _setToArray/* default */.Z);
-
-      if (object.size != other.size && !isPartial) {
-        return false;
-      }
-      // Assume cyclic values are equal.
-      var stacked = stack.get(object);
-      if (stacked) {
-        return stacked == other;
-      }
-      bitmask |= _equalByTag_COMPARE_UNORDERED_FLAG;
-
-      // Recursively compare objects (susceptible to call stack limits).
-      stack.set(object, other);
-      var result = _equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);
-      stack['delete'](object);
-      return result;
-
-    case symbolTag:
-      if (symbolValueOf) {
-        return symbolValueOf.call(object) == symbolValueOf.call(other);
-      }
-  }
-  return false;
-}
-
-/* harmony default export */ const _equalByTag = (equalByTag);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_getAllKeys.js
-var _getAllKeys = __webpack_require__(1808);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_equalObjects.js
-
-
-/** Used to compose bitmasks for value comparisons. */
-var _equalObjects_COMPARE_PARTIAL_FLAG = 1;
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var _equalObjects_hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * A specialized version of `baseIsEqualDeep` for objects with support for
- * partial deep comparisons.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
- * @param {Function} customizer The function to customize comparisons.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Object} stack Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
-function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {
-  var isPartial = bitmask & _equalObjects_COMPARE_PARTIAL_FLAG,
-      objProps = (0,_getAllKeys/* default */.Z)(object),
-      objLength = objProps.length,
-      othProps = (0,_getAllKeys/* default */.Z)(other),
-      othLength = othProps.length;
-
-  if (objLength != othLength && !isPartial) {
-    return false;
-  }
-  var index = objLength;
-  while (index--) {
-    var key = objProps[index];
-    if (!(isPartial ? key in other : _equalObjects_hasOwnProperty.call(other, key))) {
-      return false;
-    }
-  }
-  // Check that cyclic values are equal.
-  var objStacked = stack.get(object);
-  var othStacked = stack.get(other);
-  if (objStacked && othStacked) {
-    return objStacked == other && othStacked == object;
-  }
-  var result = true;
-  stack.set(object, other);
-  stack.set(other, object);
-
-  var skipCtor = isPartial;
-  while (++index < objLength) {
-    key = objProps[index];
-    var objValue = object[key],
-        othValue = other[key];
-
-    if (customizer) {
-      var compared = isPartial
-        ? customizer(othValue, objValue, key, other, object, stack)
-        : customizer(objValue, othValue, key, object, other, stack);
-    }
-    // Recursively compare objects (susceptible to call stack limits).
-    if (!(compared === undefined
-          ? (objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack))
-          : compared
-        )) {
-      result = false;
-      break;
-    }
-    skipCtor || (skipCtor = key == 'constructor');
-  }
-  if (result && !skipCtor) {
-    var objCtor = object.constructor,
-        othCtor = other.constructor;
-
-    // Non `Object` object instances with different constructors are not equal.
-    if (objCtor != othCtor &&
-        ('constructor' in object && 'constructor' in other) &&
-        !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
-          typeof othCtor == 'function' && othCtor instanceof othCtor)) {
-      result = false;
-    }
-  }
-  stack['delete'](object);
-  stack['delete'](other);
-  return result;
-}
-
-/* harmony default export */ const _equalObjects = (equalObjects);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_getTag.js + 3 modules
-var _getTag = __webpack_require__(83970);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js
-var isArray = __webpack_require__(27771);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isBuffer.js + 1 modules
-var isBuffer = __webpack_require__(77008);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isTypedArray.js + 1 modules
-var isTypedArray = __webpack_require__(18843);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqualDeep.js
-
-
-
-
-
-
-
-
-
-/** Used to compose bitmasks for value comparisons. */
-var _baseIsEqualDeep_COMPARE_PARTIAL_FLAG = 1;
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]',
-    arrayTag = '[object Array]',
-    objectTag = '[object Object]';
-
-/** Used for built-in method references. */
-var _baseIsEqualDeep_objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var _baseIsEqualDeep_hasOwnProperty = _baseIsEqualDeep_objectProto.hasOwnProperty;
-
-/**
- * A specialized version of `baseIsEqual` for arrays and objects which performs
- * deep comparisons and tracks traversed objects enabling objects with circular
- * references to be compared.
- *
- * @private
- * @param {Object} object The object to compare.
- * @param {Object} other The other object to compare.
- * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.
- * @param {Function} customizer The function to customize comparisons.
- * @param {Function} equalFunc The function to determine equivalents of values.
- * @param {Object} [stack] Tracks traversed `object` and `other` objects.
- * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
- */
-function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {
-  var objIsArr = (0,isArray/* default */.Z)(object),
-      othIsArr = (0,isArray/* default */.Z)(other),
-      objTag = objIsArr ? arrayTag : (0,_getTag/* default */.Z)(object),
-      othTag = othIsArr ? arrayTag : (0,_getTag/* default */.Z)(other);
-
-  objTag = objTag == argsTag ? objectTag : objTag;
-  othTag = othTag == argsTag ? objectTag : othTag;
-
-  var objIsObj = objTag == objectTag,
-      othIsObj = othTag == objectTag,
-      isSameTag = objTag == othTag;
-
-  if (isSameTag && (0,isBuffer/* default */.Z)(object)) {
-    if (!(0,isBuffer/* default */.Z)(other)) {
-      return false;
-    }
-    objIsArr = true;
-    objIsObj = false;
-  }
-  if (isSameTag && !objIsObj) {
-    stack || (stack = new _Stack/* default */.Z);
-    return (objIsArr || (0,isTypedArray/* default */.Z)(object))
-      ? _equalArrays(object, other, bitmask, customizer, equalFunc, stack)
-      : _equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);
-  }
-  if (!(bitmask & _baseIsEqualDeep_COMPARE_PARTIAL_FLAG)) {
-    var objIsWrapped = objIsObj && _baseIsEqualDeep_hasOwnProperty.call(object, '__wrapped__'),
-        othIsWrapped = othIsObj && _baseIsEqualDeep_hasOwnProperty.call(other, '__wrapped__');
-
-    if (objIsWrapped || othIsWrapped) {
-      var objUnwrapped = objIsWrapped ? object.value() : object,
-          othUnwrapped = othIsWrapped ? other.value() : other;
-
-      stack || (stack = new _Stack/* default */.Z);
-      return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);
-    }
-  }
-  if (!isSameTag) {
-    return false;
-  }
-  stack || (stack = new _Stack/* default */.Z);
-  return _equalObjects(object, other, bitmask, customizer, equalFunc, stack);
-}
-
-/* harmony default export */ const _baseIsEqualDeep = (baseIsEqualDeep);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js
-var isObjectLike = __webpack_require__(18533);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsEqual.js
-
-
-
-/**
- * The base implementation of `_.isEqual` which supports partial comparisons
- * and tracks traversed objects.
- *
- * @private
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @param {boolean} bitmask The bitmask flags.
- *  1 - Unordered comparison
- *  2 - Partial comparison
- * @param {Function} [customizer] The function to customize comparisons.
- * @param {Object} [stack] Tracks traversed `value` and `other` objects.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- */
-function baseIsEqual(value, other, bitmask, customizer, stack) {
-  if (value === other) {
-    return true;
-  }
-  if (value == null || other == null || (!(0,isObjectLike/* default */.Z)(value) && !(0,isObjectLike/* default */.Z)(other))) {
-    return value !== value && other !== other;
-  }
-  return _baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);
-}
-
-/* harmony default export */ const _baseIsEqual = (baseIsEqual);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsMatch.js
-
-
-
-/** Used to compose bitmasks for value comparisons. */
-var _baseIsMatch_COMPARE_PARTIAL_FLAG = 1,
-    _baseIsMatch_COMPARE_UNORDERED_FLAG = 2;
-
-/**
- * The base implementation of `_.isMatch` without support for iteratee shorthands.
- *
- * @private
- * @param {Object} object The object to inspect.
- * @param {Object} source The object of property values to match.
- * @param {Array} matchData The property names, values, and compare flags to match.
- * @param {Function} [customizer] The function to customize comparisons.
- * @returns {boolean} Returns `true` if `object` is a match, else `false`.
- */
-function baseIsMatch(object, source, matchData, customizer) {
-  var index = matchData.length,
-      length = index,
-      noCustomizer = !customizer;
-
-  if (object == null) {
-    return !length;
-  }
-  object = Object(object);
-  while (index--) {
-    var data = matchData[index];
-    if ((noCustomizer && data[2])
-          ? data[1] !== object[data[0]]
-          : !(data[0] in object)
-        ) {
-      return false;
-    }
-  }
-  while (++index < length) {
-    data = matchData[index];
-    var key = data[0],
-        objValue = object[key],
-        srcValue = data[1];
-
-    if (noCustomizer && data[2]) {
-      if (objValue === undefined && !(key in object)) {
-        return false;
-      }
-    } else {
-      var stack = new _Stack/* default */.Z;
-      if (customizer) {
-        var result = customizer(objValue, srcValue, key, object, source, stack);
-      }
-      if (!(result === undefined
-            ? _baseIsEqual(srcValue, objValue, _baseIsMatch_COMPARE_PARTIAL_FLAG | _baseIsMatch_COMPARE_UNORDERED_FLAG, customizer, stack)
-            : result
-          )) {
-        return false;
-      }
-    }
-  }
-  return true;
-}
-
-/* harmony default export */ const _baseIsMatch = (baseIsMatch);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js
-var isObject = __webpack_require__(77226);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_isStrictComparable.js
-
-
-/**
- * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` if suitable for strict
- *  equality comparisons, else `false`.
- */
-function isStrictComparable(value) {
-  return value === value && !(0,isObject/* default */.Z)(value);
-}
-
-/* harmony default export */ const _isStrictComparable = (isStrictComparable);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js
-var keys = __webpack_require__(17179);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_getMatchData.js
-
-
-
-/**
- * Gets the property names, values, and compare flags of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the match data of `object`.
- */
-function getMatchData(object) {
-  var result = (0,keys/* default */.Z)(object),
-      length = result.length;
-
-  while (length--) {
-    var key = result[length],
-        value = object[key];
-
-    result[length] = [key, value, _isStrictComparable(value)];
-  }
-  return result;
-}
-
-/* harmony default export */ const _getMatchData = (getMatchData);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_matchesStrictComparable.js
-/**
- * A specialized version of `matchesProperty` for source values suitable
- * for strict equality comparisons, i.e. `===`.
- *
- * @private
- * @param {string} key The key of the property to get.
- * @param {*} srcValue The value to match.
- * @returns {Function} Returns the new spec function.
- */
-function matchesStrictComparable(key, srcValue) {
-  return function(object) {
-    if (object == null) {
-      return false;
-    }
-    return object[key] === srcValue &&
-      (srcValue !== undefined || (key in Object(object)));
-  };
-}
-
-/* harmony default export */ const _matchesStrictComparable = (matchesStrictComparable);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatches.js
-
-
-
-
-/**
- * The base implementation of `_.matches` which doesn't clone `source`.
- *
- * @private
- * @param {Object} source The object of property values to match.
- * @returns {Function} Returns the new spec function.
- */
-function baseMatches(source) {
-  var matchData = _getMatchData(source);
-  if (matchData.length == 1 && matchData[0][2]) {
-    return _matchesStrictComparable(matchData[0][0], matchData[0][1]);
-  }
-  return function(object) {
-    return object === source || _baseIsMatch(object, source, matchData);
-  };
-}
-
-/* harmony default export */ const _baseMatches = (baseMatches);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js
-var _baseGet = __webpack_require__(13317);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/get.js
-
-
-/**
- * Gets the value at `path` of `object`. If the resolved value is
- * `undefined`, the `defaultValue` is returned in its place.
- *
- * @static
- * @memberOf _
- * @since 3.7.0
- * @category Object
- * @param {Object} object The object to query.
- * @param {Array|string} path The path of the property to get.
- * @param {*} [defaultValue] The value returned for `undefined` resolved values.
- * @returns {*} Returns the resolved value.
- * @example
- *
- * var object = { 'a': [{ 'b': { 'c': 3 } }] };
- *
- * _.get(object, 'a[0].b.c');
- * // => 3
- *
- * _.get(object, ['a', '0', 'b', 'c']);
- * // => 3
- *
- * _.get(object, 'a.b.c', 'default');
- * // => 'default'
- */
-function get(object, path, defaultValue) {
-  var result = object == null ? undefined : (0,_baseGet/* default */.Z)(object, path);
-  return result === undefined ? defaultValue : result;
-}
-
-/* harmony default export */ const lodash_es_get = (get);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules
-var hasIn = __webpack_require__(75487);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js
-var _isKey = __webpack_require__(99365);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js
-var _toKey = __webpack_require__(62281);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseMatchesProperty.js
-
-
-
-
-
-
-
-
-/** Used to compose bitmasks for value comparisons. */
-var _baseMatchesProperty_COMPARE_PARTIAL_FLAG = 1,
-    _baseMatchesProperty_COMPARE_UNORDERED_FLAG = 2;
-
-/**
- * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
- *
- * @private
- * @param {string} path The path of the property to get.
- * @param {*} srcValue The value to match.
- * @returns {Function} Returns the new spec function.
- */
-function baseMatchesProperty(path, srcValue) {
-  if ((0,_isKey/* default */.Z)(path) && _isStrictComparable(srcValue)) {
-    return _matchesStrictComparable((0,_toKey/* default */.Z)(path), srcValue);
-  }
-  return function(object) {
-    var objValue = lodash_es_get(object, path);
-    return (objValue === undefined && objValue === srcValue)
-      ? (0,hasIn/* default */.Z)(object, path)
-      : _baseIsEqual(srcValue, objValue, _baseMatchesProperty_COMPARE_PARTIAL_FLAG | _baseMatchesProperty_COMPARE_UNORDERED_FLAG);
-  };
-}
-
-/* harmony default export */ const _baseMatchesProperty = (baseMatchesProperty);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js
-var identity = __webpack_require__(69203);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseProperty.js
-var _baseProperty = __webpack_require__(54193);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePropertyDeep.js
-
-
-/**
- * A specialized version of `baseProperty` which supports deep paths.
- *
- * @private
- * @param {Array|string} path The path of the property to get.
- * @returns {Function} Returns the new accessor function.
- */
-function basePropertyDeep(path) {
-  return function(object) {
-    return (0,_baseGet/* default */.Z)(object, path);
-  };
-}
-
-/* harmony default export */ const _basePropertyDeep = (basePropertyDeep);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/property.js
-
-
-
-
-
-/**
- * Creates a function that returns the value at `path` of a given object.
- *
- * @static
- * @memberOf _
- * @since 2.4.0
- * @category Util
- * @param {Array|string} path The path of the property to get.
- * @returns {Function} Returns the new accessor function.
- * @example
- *
- * var objects = [
- *   { 'a': { 'b': 2 } },
- *   { 'a': { 'b': 1 } }
- * ];
- *
- * _.map(objects, _.property('a.b'));
- * // => [2, 1]
- *
- * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
- * // => [1, 2]
- */
-function property(path) {
-  return (0,_isKey/* default */.Z)(path) ? (0,_baseProperty/* default */.Z)((0,_toKey/* default */.Z)(path)) : _basePropertyDeep(path);
-}
-
-/* harmony default export */ const lodash_es_property = (property);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIteratee.js
-
-
-
-
-
-
-/**
- * The base implementation of `_.iteratee`.
- *
- * @private
- * @param {*} [value=_.identity] The value to convert to an iteratee.
- * @returns {Function} Returns the iteratee.
- */
-function baseIteratee(value) {
-  // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
-  // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
-  if (typeof value == 'function') {
-    return value;
-  }
-  if (value == null) {
-    return identity/* default */.Z;
-  }
-  if (typeof value == 'object') {
-    return (0,isArray/* default */.Z)(value)
-      ? _baseMatchesProperty(value[0], value[1])
-      : _baseMatches(value);
-  }
-  return lodash_es_property(value);
-}
-
-/* harmony default export */ const _baseIteratee = (baseIteratee);
-
-
-/***/ }),
-
-/***/ 39473:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _baseKeys)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js
-var _isPrototype = __webpack_require__(72764);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_overArg.js
-var _overArg = __webpack_require__(1851);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeys.js
-
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeKeys = (0,_overArg/* default */.Z)(Object.keys, Object);
-
-/* harmony default export */ const _nativeKeys = (nativeKeys);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeys.js
-
-
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var _baseKeys_hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
-function baseKeys(object) {
-  if (!(0,_isPrototype/* default */.Z)(object)) {
-    return _nativeKeys(object);
-  }
-  var result = [];
-  for (var key in Object(object)) {
-    if (_baseKeys_hasOwnProperty.call(object, key) && key != 'constructor') {
-      result.push(key);
-    }
-  }
-  return result;
-}
-
-/* harmony default export */ const _baseKeys = (baseKeys);
-
-
-/***/ }),
-
-/***/ 21018:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(49811);
-/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585);
-
-
-
-/**
- * The base implementation of `_.map` without support for iteratee shorthands.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @returns {Array} Returns the new mapped array.
- */
-function baseMap(collection, iteratee) {
-  var index = -1,
-      result = (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? Array(collection.length) : [];
-
-  (0,_baseEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(collection, function(value, key, collection) {
-    result[++index] = iteratee(value, key, collection);
-  });
-  return result;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseMap);
-
-
-/***/ }),
-
-/***/ 54193:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * The base implementation of `_.property` without support for deep paths.
- *
- * @private
- * @param {string} key The key of the property to get.
- * @returns {Function} Returns the new accessor function.
- */
-function baseProperty(key) {
-  return function(object) {
-    return object == null ? undefined : object[key];
-  };
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseProperty);
-
-
-/***/ }),
-
-/***/ 69581:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(69203);
-/* harmony import */ var _overRest_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(81211);
-/* harmony import */ var _setToString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27227);
-
-
-
-
-/**
- * The base implementation of `_.rest` which doesn't validate or coerce arguments.
- *
- * @private
- * @param {Function} func The function to apply a rest parameter to.
- * @param {number} [start=func.length-1] The start position of the rest parameter.
- * @returns {Function} Returns the new function.
- */
-function baseRest(func, start) {
-  return (0,_setToString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)((0,_overRest_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(func, start, _identity_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z), func + '');
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseRest);
-
-
-/***/ }),
-
-/***/ 21162:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * The base implementation of `_.unary` without support for storing metadata.
- *
- * @private
- * @param {Function} func The function to cap arguments for.
- * @returns {Function} Returns the new capped function.
- */
-function baseUnary(func) {
-  return function(value) {
-    return func(value);
-  };
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (baseUnary);
-
-
-/***/ }),
-
-/***/ 59548:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * Checks if a `cache` value for `key` exists.
- *
- * @private
- * @param {Object} cache The cache to query.
- * @param {string} key The key of the entry to check.
- * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
- */
-function cacheHas(cache, key) {
-  return cache.has(key);
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cacheHas);
-
-
-/***/ }),
-
-/***/ 68882:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _identity_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69203);
-
-
-/**
- * Casts `value` to `identity` if it's not a function.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {Function} Returns cast function.
- */
-function castFunction(value) {
-  return typeof value == 'function' ? value : _identity_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (castFunction);
-
-
-/***/ }),
-
-/***/ 22823:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _castPath)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js
-var isArray = __webpack_require__(27771);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_isKey.js
-var _isKey = __webpack_require__(99365);
-// EXTERNAL MODULE: ./node_modules/lodash-es/memoize.js
-var memoize = __webpack_require__(42454);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_memoizeCapped.js
-
-
-/** Used as the maximum memoize cache size. */
-var MAX_MEMOIZE_SIZE = 500;
-
-/**
- * A specialized version of `_.memoize` which clears the memoized function's
- * cache when it exceeds `MAX_MEMOIZE_SIZE`.
- *
- * @private
- * @param {Function} func The function to have its output memoized.
- * @returns {Function} Returns the new memoized function.
- */
-function memoizeCapped(func) {
-  var result = (0,memoize/* default */.Z)(func, function(key) {
-    if (cache.size === MAX_MEMOIZE_SIZE) {
-      cache.clear();
-    }
-    return key;
-  });
-
-  var cache = result.cache;
-  return result;
-}
-
-/* harmony default export */ const _memoizeCapped = (memoizeCapped);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_stringToPath.js
-
-
-/** Used to match property names within property paths. */
-var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
-
-/** Used to match backslashes in property paths. */
-var reEscapeChar = /\\(\\)?/g;
-
-/**
- * Converts `string` to a property path array.
- *
- * @private
- * @param {string} string The string to convert.
- * @returns {Array} Returns the property path array.
- */
-var stringToPath = _memoizeCapped(function(string) {
-  var result = [];
-  if (string.charCodeAt(0) === 46 /* . */) {
-    result.push('');
-  }
-  string.replace(rePropName, function(match, number, quote, subString) {
-    result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
-  });
-  return result;
-});
-
-/* harmony default export */ const _stringToPath = (stringToPath);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/toString.js + 1 modules
-var lodash_es_toString = __webpack_require__(50751);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_castPath.js
-
-
-
-
-
-/**
- * Casts `value` to a path array if it's not one.
- *
- * @private
- * @param {*} value The value to inspect.
- * @param {Object} [object] The object to query keys on.
- * @returns {Array} Returns the cast property path array.
- */
-function castPath(value, object) {
-  if ((0,isArray/* default */.Z)(value)) {
-    return value;
-  }
-  return (0,_isKey/* default */.Z)(value, object) ? [value] : _stringToPath((0,lodash_es_toString/* default */.Z)(value));
-}
-
-/* harmony default export */ const _castPath = (castPath);
-
-
-/***/ }),
-
-/***/ 41884:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(84073);
-
-
-/**
- * Creates a clone of `arrayBuffer`.
- *
- * @private
- * @param {ArrayBuffer} arrayBuffer The array buffer to clone.
- * @returns {ArrayBuffer} Returns the cloned array buffer.
- */
-function cloneArrayBuffer(arrayBuffer) {
-  var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
-  new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(result).set(new _Uint8Array_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z(arrayBuffer));
-  return result;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneArrayBuffer);
-
-
-/***/ }),
-
-/***/ 91050:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _root_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(66092);
-
-
-/** Detect free variable `exports`. */
-var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
-
-/** Detect free variable `module`. */
-var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
-
-/** Detect the popular CommonJS extension `module.exports`. */
-var moduleExports = freeModule && freeModule.exports === freeExports;
-
-/** Built-in value references. */
-var Buffer = moduleExports ? _root_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].Buffer */ .Z.Buffer : undefined,
-    allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined;
-
-/**
- * Creates a clone of  `buffer`.
- *
- * @private
- * @param {Buffer} buffer The buffer to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Buffer} Returns the cloned buffer.
- */
-function cloneBuffer(buffer, isDeep) {
-  if (isDeep) {
-    return buffer.slice();
-  }
-  var length = buffer.length,
-      result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
-
-  buffer.copy(result);
-  return result;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneBuffer);
-
-
-/***/ }),
-
-/***/ 12701:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(41884);
-
-
-/**
- * Creates a clone of `typedArray`.
- *
- * @private
- * @param {Object} typedArray The typed array to clone.
- * @param {boolean} [isDeep] Specify a deep clone.
- * @returns {Object} Returns the cloned typed array.
- */
-function cloneTypedArray(typedArray, isDeep) {
-  var buffer = isDeep ? (0,_cloneArrayBuffer_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(typedArray.buffer) : typedArray.buffer;
-  return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (cloneTypedArray);
-
-
-/***/ }),
-
-/***/ 87215:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * Copies the values of `source` to `array`.
- *
- * @private
- * @param {Array} source The array to copy values from.
- * @param {Array} [array=[]] The array to copy values to.
- * @returns {Array} Returns `array`.
- */
-function copyArray(source, array) {
-  var index = -1,
-      length = source.length;
-
-  array || (array = Array(length));
-  while (++index < length) {
-    array[index] = source[index];
-  }
-  return array;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyArray);
-
-
-/***/ }),
-
-/***/ 31899:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _assignValue_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72954);
-/* harmony import */ var _baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(74752);
-
-
-
-/**
- * Copies properties of `source` to `object`.
- *
- * @private
- * @param {Object} source The object to copy properties from.
- * @param {Array} props The property identifiers to copy.
- * @param {Object} [object={}] The object to copy properties to.
- * @param {Function} [customizer] The function to customize copied values.
- * @returns {Object} Returns `object`.
- */
-function copyObject(source, props, object, customizer) {
-  var isNew = !object;
-  object || (object = {});
-
-  var index = -1,
-      length = props.length;
-
-  while (++index < length) {
-    var key = props[index];
-
-    var newValue = customizer
-      ? customizer(object[key], source[key], key, object, source)
-      : undefined;
-
-    if (newValue === undefined) {
-      newValue = source[key];
-    }
-    if (isNew) {
-      (0,_baseAssignValue_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, key, newValue);
-    } else {
-      (0,_assignValue_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object, key, newValue);
-    }
-  }
-  return object;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (copyObject);
-
-
-/***/ }),
-
-/***/ 77904:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _getNative_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(62508);
-
-
-var defineProperty = (function() {
-  try {
-    var func = (0,_getNative_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object, 'defineProperty');
-    func({}, '', {});
-    return func;
-  } catch (e) {}
-}());
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defineProperty);
-
-
-/***/ }),
-
-/***/ 13413:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/** Detect free variable `global` from Node.js. */
-var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (freeGlobal);
-
-
-/***/ }),
-
-/***/ 1808:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(63327);
-/* harmony import */ var _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(95695);
-/* harmony import */ var _keys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(17179);
-
-
-
-
-/**
- * Creates an array of own enumerable property names and symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names and symbols.
- */
-function getAllKeys(object) {
-  return (0,_baseGetAllKeys_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object, _keys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z, _getSymbols_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z);
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getAllKeys);
-
-
-/***/ }),
-
-/***/ 62508:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _getNative)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isFunction.js
-var isFunction = __webpack_require__(73234);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js
-var _root = __webpack_require__(66092);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_coreJsData.js
-
-
-/** Used to detect overreaching core-js shims. */
-var coreJsData = _root/* default.__core-js_shared__ */.Z["__core-js_shared__"];
-
-/* harmony default export */ const _coreJsData = (coreJsData);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_isMasked.js
-
-
-/** Used to detect methods masquerading as native. */
-var maskSrcKey = (function() {
-  var uid = /[^.]+$/.exec(_coreJsData && _coreJsData.keys && _coreJsData.keys.IE_PROTO || '');
-  return uid ? ('Symbol(src)_1.' + uid) : '';
-}());
-
-/**
- * Checks if `func` has its source masked.
- *
- * @private
- * @param {Function} func The function to check.
- * @returns {boolean} Returns `true` if `func` is masked, else `false`.
- */
-function isMasked(func) {
-  return !!maskSrcKey && (maskSrcKey in func);
-}
-
-/* harmony default export */ const _isMasked = (isMasked);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js
-var isObject = __webpack_require__(77226);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_toSource.js
-var _toSource = __webpack_require__(90019);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsNative.js
-
-
-
-
-
-/**
- * Used to match `RegExp`
- * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
- */
-var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
-
-/** Used to detect host constructors (Safari). */
-var reIsHostCtor = /^\[object .+?Constructor\]$/;
-
-/** Used for built-in method references. */
-var funcProto = Function.prototype,
-    objectProto = Object.prototype;
-
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
-
-/** Used to check objects for own properties. */
-var _baseIsNative_hasOwnProperty = objectProto.hasOwnProperty;
-
-/** Used to detect if a method is native. */
-var reIsNative = RegExp('^' +
-  funcToString.call(_baseIsNative_hasOwnProperty).replace(reRegExpChar, '\\$&')
-  .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
-);
-
-/**
- * The base implementation of `_.isNative` without bad shim checks.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a native function,
- *  else `false`.
- */
-function baseIsNative(value) {
-  if (!(0,isObject/* default */.Z)(value) || _isMasked(value)) {
-    return false;
-  }
-  var pattern = (0,isFunction/* default */.Z)(value) ? reIsNative : reIsHostCtor;
-  return pattern.test((0,_toSource/* default */.Z)(value));
-}
-
-/* harmony default export */ const _baseIsNative = (baseIsNative);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_getValue.js
-/**
- * Gets the value at `key` of `object`.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {string} key The key of the property to get.
- * @returns {*} Returns the property value.
- */
-function getValue(object, key) {
-  return object == null ? undefined : object[key];
-}
-
-/* harmony default export */ const _getValue = (getValue);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_getNative.js
-
-
-
-/**
- * Gets the native function at `key` of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {string} key The key of the method to get.
- * @returns {*} Returns the function if it's native, else `undefined`.
- */
-function getNative(object, key) {
-  var value = _getValue(object, key);
-  return _baseIsNative(value) ? value : undefined;
-}
-
-/* harmony default export */ const _getNative = (getNative);
-
-
-/***/ }),
-
-/***/ 12513:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _overArg_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1851);
-
-
-/** Built-in value references. */
-var getPrototype = (0,_overArg_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(Object.getPrototypeOf, Object);
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getPrototype);
-
-
-/***/ }),
-
-/***/ 95695:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(68774);
-/* harmony import */ var _stubArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(60532);
-
-
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Built-in value references. */
-var propertyIsEnumerable = objectProto.propertyIsEnumerable;
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeGetSymbols = Object.getOwnPropertySymbols;
-
-/**
- * Creates an array of the own enumerable symbols of `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of symbols.
- */
-var getSymbols = !nativeGetSymbols ? _stubArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z : function(object) {
-  if (object == null) {
-    return [];
-  }
-  object = Object(object);
-  return (0,_arrayFilter_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(nativeGetSymbols(object), function(symbol) {
-    return propertyIsEnumerable.call(object, symbol);
-  });
-};
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (getSymbols);
-
-
-/***/ }),
-
-/***/ 83970:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _getTag)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_getNative.js + 4 modules
-var _getNative = __webpack_require__(62508);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js
-var _root = __webpack_require__(66092);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_DataView.js
-
-
-
-/* Built-in method references that are verified to be native. */
-var DataView = (0,_getNative/* default */.Z)(_root/* default */.Z, 'DataView');
-
-/* harmony default export */ const _DataView = (DataView);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Map.js
-var _Map = __webpack_require__(86183);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_Promise.js
-
-
-
-/* Built-in method references that are verified to be native. */
-var Promise = (0,_getNative/* default */.Z)(_root/* default */.Z, 'Promise');
-
-/* harmony default export */ const _Promise = (Promise);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Set.js
-var _Set = __webpack_require__(93203);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_WeakMap.js
-
-
-
-/* Built-in method references that are verified to be native. */
-var WeakMap = (0,_getNative/* default */.Z)(_root/* default */.Z, 'WeakMap');
-
-/* harmony default export */ const _WeakMap = (WeakMap);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules
-var _baseGetTag = __webpack_require__(93589);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_toSource.js
-var _toSource = __webpack_require__(90019);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_getTag.js
-
-
-
-
-
-
-
-
-/** `Object#toString` result references. */
-var mapTag = '[object Map]',
-    objectTag = '[object Object]',
-    promiseTag = '[object Promise]',
-    setTag = '[object Set]',
-    weakMapTag = '[object WeakMap]';
-
-var dataViewTag = '[object DataView]';
-
-/** Used to detect maps, sets, and weakmaps. */
-var dataViewCtorString = (0,_toSource/* default */.Z)(_DataView),
-    mapCtorString = (0,_toSource/* default */.Z)(_Map/* default */.Z),
-    promiseCtorString = (0,_toSource/* default */.Z)(_Promise),
-    setCtorString = (0,_toSource/* default */.Z)(_Set/* default */.Z),
-    weakMapCtorString = (0,_toSource/* default */.Z)(_WeakMap);
-
-/**
- * Gets the `toStringTag` of `value`.
- *
- * @private
- * @param {*} value The value to query.
- * @returns {string} Returns the `toStringTag`.
- */
-var getTag = _baseGetTag/* default */.Z;
-
-// Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.
-if ((_DataView && getTag(new _DataView(new ArrayBuffer(1))) != dataViewTag) ||
-    (_Map/* default */.Z && getTag(new _Map/* default */.Z) != mapTag) ||
-    (_Promise && getTag(_Promise.resolve()) != promiseTag) ||
-    (_Set/* default */.Z && getTag(new _Set/* default */.Z) != setTag) ||
-    (_WeakMap && getTag(new _WeakMap) != weakMapTag)) {
-  getTag = function(value) {
-    var result = (0,_baseGetTag/* default */.Z)(value),
-        Ctor = result == objectTag ? value.constructor : undefined,
-        ctorString = Ctor ? (0,_toSource/* default */.Z)(Ctor) : '';
-
-    if (ctorString) {
-      switch (ctorString) {
-        case dataViewCtorString: return dataViewTag;
-        case mapCtorString: return mapTag;
-        case promiseCtorString: return promiseTag;
-        case setCtorString: return setTag;
-        case weakMapCtorString: return weakMapTag;
-      }
-    }
-    return result;
-  };
-}
-
-/* harmony default export */ const _getTag = (getTag);
-
-
-/***/ }),
-
-/***/ 16174:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _castPath_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(22823);
-/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(29169);
-/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(27771);
-/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(56009);
-/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(1656);
-/* harmony import */ var _toKey_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(62281);
-
-
-
-
-
-
-
-/**
- * Checks if `path` exists on `object`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array|string} path The path to check.
- * @param {Function} hasFunc The function to check properties.
- * @returns {boolean} Returns `true` if `path` exists, else `false`.
- */
-function hasPath(object, path, hasFunc) {
-  path = (0,_castPath_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(path, object);
-
-  var index = -1,
-      length = path.length,
-      result = false;
-
-  while (++index < length) {
-    var key = (0,_toKey_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(path[index]);
-    if (!(result = object != null && hasFunc(object, key))) {
-      break;
-    }
-    object = object[key];
-  }
-  if (result || ++index != length) {
-    return result;
-  }
-  length = object == null ? 0 : object.length;
-  return !!length && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(length) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(key, length) &&
-    ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(object) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(object));
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (hasPath);
-
-
-/***/ }),
-
-/***/ 73658:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _initCloneObject)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js
-var isObject = __webpack_require__(77226);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseCreate.js
-
-
-/** Built-in value references. */
-var objectCreate = Object.create;
-
-/**
- * The base implementation of `_.create` without support for assigning
- * properties to the created object.
- *
- * @private
- * @param {Object} proto The object to inherit from.
- * @returns {Object} Returns the new object.
- */
-var baseCreate = (function() {
-  function object() {}
-  return function(proto) {
-    if (!(0,isObject/* default */.Z)(proto)) {
-      return {};
-    }
-    if (objectCreate) {
-      return objectCreate(proto);
-    }
-    object.prototype = proto;
-    var result = new object;
-    object.prototype = undefined;
-    return result;
-  };
-}());
-
-/* harmony default export */ const _baseCreate = (baseCreate);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_getPrototype.js
-var _getPrototype = __webpack_require__(12513);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js
-var _isPrototype = __webpack_require__(72764);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_initCloneObject.js
-
-
-
-
-/**
- * Initializes an object clone.
- *
- * @private
- * @param {Object} object The object to clone.
- * @returns {Object} Returns the initialized clone.
- */
-function initCloneObject(object) {
-  return (typeof object.constructor == 'function' && !(0,_isPrototype/* default */.Z)(object))
-    ? _baseCreate((0,_getPrototype/* default */.Z)(object))
-    : {};
-}
-
-/* harmony default export */ const _initCloneObject = (initCloneObject);
-
-
-/***/ }),
-
-/***/ 56009:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/** Used as references for various `Number` constants. */
-var MAX_SAFE_INTEGER = 9007199254740991;
-
-/** Used to detect unsigned integer values. */
-var reIsUint = /^(?:0|[1-9]\d*)$/;
-
-/**
- * Checks if `value` is a valid array-like index.
- *
- * @private
- * @param {*} value The value to check.
- * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
- * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
- */
-function isIndex(value, length) {
-  var type = typeof value;
-  length = length == null ? MAX_SAFE_INTEGER : length;
-
-  return !!length &&
-    (type == 'number' ||
-      (type != 'symbol' && reIsUint.test(value))) &&
-        (value > -1 && value % 1 == 0 && value < length);
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIndex);
-
-
-/***/ }),
-
-/***/ 50439:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651);
-/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585);
-/* harmony import */ var _isIndex_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(56009);
-/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77226);
-
-
-
-
-
-/**
- * Checks if the given arguments are from an iteratee call.
- *
- * @private
- * @param {*} value The potential iteratee value argument.
- * @param {*} index The potential iteratee index or key argument.
- * @param {*} object The potential iteratee object argument.
- * @returns {boolean} Returns `true` if the arguments are from an iteratee call,
- *  else `false`.
- */
-function isIterateeCall(value, index, object) {
-  if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object)) {
-    return false;
-  }
-  var type = typeof index;
-  if (type == 'number'
-        ? ((0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) && (0,_isIndex_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(index, object.length))
-        : (type == 'string' && index in object)
-      ) {
-    return (0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(object[index], value);
-  }
-  return false;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isIterateeCall);
-
-
-/***/ }),
-
-/***/ 99365:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771);
-/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(72714);
-
-
-
-/** Used to match property names within property paths. */
-var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
-    reIsPlainProp = /^\w*$/;
-
-/**
- * Checks if `value` is a property name and not a property path.
- *
- * @private
- * @param {*} value The value to check.
- * @param {Object} [object] The object to query keys on.
- * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
- */
-function isKey(value, object) {
-  if ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) {
-    return false;
-  }
-  var type = typeof value;
-  if (type == 'number' || type == 'symbol' || type == 'boolean' ||
-      value == null || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value)) {
-    return true;
-  }
-  return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
-    (object != null && value in Object(object));
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isKey);
-
-
-/***/ }),
-
-/***/ 72764:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/**
- * Checks if `value` is likely a prototype object.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
- */
-function isPrototype(value) {
-  var Ctor = value && value.constructor,
-      proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
-
-  return value === proto;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPrototype);
-
-
-/***/ }),
-
-/***/ 98351:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13413);
-
-
-/** Detect free variable `exports`. */
-var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
-
-/** Detect free variable `module`. */
-var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
-
-/** Detect the popular CommonJS extension `module.exports`. */
-var moduleExports = freeModule && freeModule.exports === freeExports;
-
-/** Detect free variable `process` from Node.js. */
-var freeProcess = moduleExports && _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"].process */ .Z.process;
-
-/** Used to access faster Node.js helpers. */
-var nodeUtil = (function() {
-  try {
-    // Use `util.types` for Node.js 10+.
-    var types = freeModule && freeModule.require && freeModule.require('util').types;
-
-    if (types) {
-      return types;
-    }
-
-    // Legacy `process.binding('util')` for Node.js < 10.
-    return freeProcess && freeProcess.binding && freeProcess.binding('util');
-  } catch (e) {}
-}());
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (nodeUtil);
-
-
-/***/ }),
-
-/***/ 1851:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * Creates a unary function that invokes `func` with its argument transformed.
- *
- * @private
- * @param {Function} func The function to wrap.
- * @param {Function} transform The argument transform.
- * @returns {Function} Returns the new function.
- */
-function overArg(func, transform) {
-  return function(arg) {
-    return func(transform(arg));
-  };
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (overArg);
-
-
-/***/ }),
-
-/***/ 81211:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _overRest)
-});
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_apply.js
-/**
- * A faster alternative to `Function#apply`, this function invokes `func`
- * with the `this` binding of `thisArg` and the arguments of `args`.
- *
- * @private
- * @param {Function} func The function to invoke.
- * @param {*} thisArg The `this` binding of `func`.
- * @param {Array} args The arguments to invoke `func` with.
- * @returns {*} Returns the result of `func`.
- */
-function apply(func, thisArg, args) {
-  switch (args.length) {
-    case 0: return func.call(thisArg);
-    case 1: return func.call(thisArg, args[0]);
-    case 2: return func.call(thisArg, args[0], args[1]);
-    case 3: return func.call(thisArg, args[0], args[1], args[2]);
-  }
-  return func.apply(thisArg, args);
-}
-
-/* harmony default export */ const _apply = (apply);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_overRest.js
-
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeMax = Math.max;
-
-/**
- * A specialized version of `baseRest` which transforms the rest array.
- *
- * @private
- * @param {Function} func The function to apply a rest parameter to.
- * @param {number} [start=func.length-1] The start position of the rest parameter.
- * @param {Function} transform The rest array transform.
- * @returns {Function} Returns the new function.
- */
-function overRest(func, start, transform) {
-  start = nativeMax(start === undefined ? (func.length - 1) : start, 0);
-  return function() {
-    var args = arguments,
-        index = -1,
-        length = nativeMax(args.length - start, 0),
-        array = Array(length);
-
-    while (++index < length) {
-      array[index] = args[start + index];
-    }
-    index = -1;
-    var otherArgs = Array(start + 1);
-    while (++index < start) {
-      otherArgs[index] = args[index];
-    }
-    otherArgs[start] = transform(array);
-    return _apply(func, this, otherArgs);
-  };
-}
-
-/* harmony default export */ const _overRest = (overRest);
-
-
-/***/ }),
-
-/***/ 66092:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(13413);
-
-
-/** Detect free variable `self`. */
-var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
-
-/** Used as a reference to the global object. */
-var root = _freeGlobal_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z || freeSelf || Function('return this')();
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (root);
-
-
-/***/ }),
-
-/***/ 6545:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * Converts `set` to an array of its values.
- *
- * @private
- * @param {Object} set The set to convert.
- * @returns {Array} Returns the values.
- */
-function setToArray(set) {
-  var index = -1,
-      result = Array(set.size);
-
-  set.forEach(function(value) {
-    result[++index] = value;
-  });
-  return result;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (setToArray);
-
-
-/***/ }),
-
-/***/ 27227:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ _setToString)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/constant.js
-var constant = __webpack_require__(62002);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_defineProperty.js
-var _defineProperty = __webpack_require__(77904);
-// EXTERNAL MODULE: ./node_modules/lodash-es/identity.js
-var identity = __webpack_require__(69203);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSetToString.js
-
-
-
-
-/**
- * The base implementation of `setToString` without support for hot loop shorting.
- *
- * @private
- * @param {Function} func The function to modify.
- * @param {Function} string The `toString` result.
- * @returns {Function} Returns `func`.
- */
-var baseSetToString = !_defineProperty/* default */.Z ? identity/* default */.Z : function(func, string) {
-  return (0,_defineProperty/* default */.Z)(func, 'toString', {
-    'configurable': true,
-    'enumerable': false,
-    'value': (0,constant/* default */.Z)(string),
-    'writable': true
-  });
-};
-
-/* harmony default export */ const _baseSetToString = (baseSetToString);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_shortOut.js
-/** Used to detect hot functions by number of calls within a span of milliseconds. */
-var HOT_COUNT = 800,
-    HOT_SPAN = 16;
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeNow = Date.now;
-
-/**
- * Creates a function that'll short out and invoke `identity` instead
- * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`
- * milliseconds.
- *
- * @private
- * @param {Function} func The function to restrict.
- * @returns {Function} Returns the new shortable function.
- */
-function shortOut(func) {
-  var count = 0,
-      lastCalled = 0;
-
-  return function() {
-    var stamp = nativeNow(),
-        remaining = HOT_SPAN - (stamp - lastCalled);
-
-    lastCalled = stamp;
-    if (remaining > 0) {
-      if (++count >= HOT_COUNT) {
-        return arguments[0];
-      }
-    } else {
-      count = 0;
-    }
-    return func.apply(undefined, arguments);
-  };
-}
-
-/* harmony default export */ const _shortOut = (shortOut);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_setToString.js
-
-
-
-/**
- * Sets the `toString` method of `func` to return `string`.
- *
- * @private
- * @param {Function} func The function to modify.
- * @param {Function} string The `toString` result.
- * @returns {Function} Returns `func`.
- */
-var setToString = _shortOut(_baseSetToString);
-
-/* harmony default export */ const _setToString = (setToString);
-
-
-/***/ }),
-
-/***/ 62281:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _isSymbol_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(72714);
-
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0;
-
-/**
- * Converts `value` to a string key if it's not a string or symbol.
- *
- * @private
- * @param {*} value The value to inspect.
- * @returns {string|symbol} Returns the key.
- */
-function toKey(value) {
-  if (typeof value == 'string' || (0,_isSymbol_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) {
-    return value;
-  }
-  var result = (value + '');
-  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toKey);
-
-
-/***/ }),
-
-/***/ 90019:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/** Used for built-in method references. */
-var funcProto = Function.prototype;
-
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
-
-/**
- * Converts `func` to its source code.
- *
- * @private
- * @param {Function} func The function to convert.
- * @returns {string} Returns the source code.
- */
-function toSource(func) {
-  if (func != null) {
-    try {
-      return funcToString.call(func);
-    } catch (e) {}
-    try {
-      return (func + '');
-    } catch (e) {}
-  }
-  return '';
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (toSource);
-
-
-/***/ }),
-
-/***/ 62002:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * Creates a function that returns `value`.
- *
- * @static
- * @memberOf _
- * @since 2.4.0
- * @category Util
- * @param {*} value The value to return from the new function.
- * @returns {Function} Returns the new constant function.
- * @example
- *
- * var objects = _.times(2, _.constant({ 'a': 1 }));
- *
- * console.log(objects);
- * // => [{ 'a': 1 }, { 'a': 1 }]
- *
- * console.log(objects[0] === objects[1]);
- * // => true
- */
-function constant(value) {
-  return function() {
-    return value;
-  };
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (constant);
-
-
-/***/ }),
-
-/***/ 3688:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _baseRest_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(69581);
-/* harmony import */ var _eq_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(79651);
-/* harmony import */ var _isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50439);
-/* harmony import */ var _keysIn_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(32957);
-
-
-
-
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Assigns own and inherited enumerable string keyed properties of source
- * objects to the destination object for all destination properties that
- * resolve to `undefined`. Source objects are applied from left to right.
- * Once a property is set, additional values of the same property are ignored.
- *
- * **Note:** This method mutates `object`.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The destination object.
- * @param {...Object} [sources] The source objects.
- * @returns {Object} Returns `object`.
- * @see _.defaultsDeep
- * @example
- *
- * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });
- * // => { 'a': 1, 'b': 2 }
- */
-var defaults = (0,_baseRest_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(function(object, sources) {
-  object = Object(object);
-
-  var index = -1;
-  var length = sources.length;
-  var guard = length > 2 ? sources[2] : undefined;
-
-  if (guard && (0,_isIterateeCall_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(sources[0], sources[1], guard)) {
-    length = 1;
-  }
-
-  while (++index < length) {
-    var source = sources[index];
-    var props = (0,_keysIn_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(source);
-    var propsIndex = -1;
-    var propsLength = props.length;
-
-    while (++propsIndex < propsLength) {
-      var key = props[propsIndex];
-      var value = object[key];
-
-      if (value === undefined ||
-          ((0,_eq_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value, objectProto[key]) && !hasOwnProperty.call(object, key))) {
-        object[key] = source[key];
-      }
-    }
-  }
-
-  return object;
-});
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (defaults);
-
-
-/***/ }),
-
-/***/ 79651:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * Performs a
- * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
- * comparison between two values to determine if they are equivalent.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to compare.
- * @param {*} other The other value to compare.
- * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
- * @example
- *
- * var object = { 'a': 1 };
- * var other = { 'a': 1 };
- *
- * _.eq(object, object);
- * // => true
- *
- * _.eq(object, other);
- * // => false
- *
- * _.eq('a', 'a');
- * // => true
- *
- * _.eq('a', Object('a'));
- * // => false
- *
- * _.eq(NaN, NaN);
- * // => true
- */
-function eq(value, other) {
-  return value === other || (value !== value && other !== other);
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (eq);
-
-
-/***/ }),
-
-/***/ 13445:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ lodash_es_filter)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayFilter.js
-var _arrayFilter = __webpack_require__(68774);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules
-var _baseEach = __webpack_require__(49811);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseFilter.js
-
-
-/**
- * The base implementation of `_.filter` without support for iteratee shorthands.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} predicate The function invoked per iteration.
- * @returns {Array} Returns the new filtered array.
- */
-function baseFilter(collection, predicate) {
-  var result = [];
-  (0,_baseEach/* default */.Z)(collection, function(value, index, collection) {
-    if (predicate(value, index, collection)) {
-      result.push(value);
-    }
-  });
-  return result;
-}
-
-/* harmony default export */ const _baseFilter = (baseFilter);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules
-var _baseIteratee = __webpack_require__(74765);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js
-var isArray = __webpack_require__(27771);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/filter.js
-
-
-
-
-
-/**
- * Iterates over elements of `collection`, returning an array of all elements
- * `predicate` returns truthy for. The predicate is invoked with three
- * arguments: (value, index|key, collection).
- *
- * **Note:** Unlike `_.remove`, this method returns a new array.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [predicate=_.identity] The function invoked per iteration.
- * @returns {Array} Returns the new filtered array.
- * @see _.reject
- * @example
- *
- * var users = [
- *   { 'user': 'barney', 'age': 36, 'active': true },
- *   { 'user': 'fred',   'age': 40, 'active': false }
- * ];
- *
- * _.filter(users, function(o) { return !o.active; });
- * // => objects for ['fred']
- *
- * // The `_.matches` iteratee shorthand.
- * _.filter(users, { 'age': 36, 'active': true });
- * // => objects for ['barney']
- *
- * // The `_.matchesProperty` iteratee shorthand.
- * _.filter(users, ['active', false]);
- * // => objects for ['fred']
- *
- * // The `_.property` iteratee shorthand.
- * _.filter(users, 'active');
- * // => objects for ['barney']
- *
- * // Combining several predicates using `_.overEvery` or `_.overSome`.
- * _.filter(users, _.overSome([{ 'age': 36 }, ['age', 40]]));
- * // => objects for ['fred', 'barney']
- */
-function filter(collection, predicate) {
-  var func = (0,isArray/* default */.Z)(collection) ? _arrayFilter/* default */.Z : _baseFilter;
-  return func(collection, (0,_baseIteratee/* default */.Z)(predicate, 3));
-}
-
-/* harmony default export */ const lodash_es_filter = (filter);
-
-
-/***/ }),
-
-/***/ 27961:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(10626);
-
-
-/**
- * Flattens `array` a single level deep.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Array
- * @param {Array} array The array to flatten.
- * @returns {Array} Returns the new flattened array.
- * @example
- *
- * _.flatten([1, [2, [3, [4]], 5]]);
- * // => [1, 2, [3, [4]], 5]
- */
-function flatten(array) {
-  var length = array == null ? 0 : array.length;
-  return length ? (0,_baseFlatten_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(array, 1) : [];
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (flatten);
-
-
-/***/ }),
-
-/***/ 70870:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(76579);
-/* harmony import */ var _baseEach_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(49811);
-/* harmony import */ var _castFunction_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(68882);
-/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771);
-
-
-
-
-
-/**
- * Iterates over elements of `collection` and invokes `iteratee` for each element.
- * The iteratee is invoked with three arguments: (value, index|key, collection).
- * Iteratee functions may exit iteration early by explicitly returning `false`.
- *
- * **Note:** As with other "Collections" methods, objects with a "length"
- * property are iterated like arrays. To avoid this behavior use `_.forIn`
- * or `_.forOwn` for object iteration.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @alias each
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [iteratee=_.identity] The function invoked per iteration.
- * @returns {Array|Object} Returns `collection`.
- * @see _.forEachRight
- * @example
- *
- * _.forEach([1, 2], function(value) {
- *   console.log(value);
- * });
- * // => Logs `1` then `2`.
- *
- * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {
- *   console.log(key);
- * });
- * // => Logs 'a' then 'b' (iteration order is not guaranteed).
- */
-function forEach(collection, iteratee) {
-  var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayEach_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseEach_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z;
-  return func(collection, (0,_castFunction_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee));
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (forEach);
-
-
-/***/ }),
-
-/***/ 17452:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ lodash_es_has)
-});
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHas.js
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var _baseHas_hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * The base implementation of `_.has` without support for deep paths.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {Array|string} key The key to check.
- * @returns {boolean} Returns `true` if `key` exists, else `false`.
- */
-function baseHas(object, key) {
-  return object != null && _baseHas_hasOwnProperty.call(object, key);
-}
-
-/* harmony default export */ const _baseHas = (baseHas);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js
-var _hasPath = __webpack_require__(16174);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/has.js
-
-
-
-/**
- * Checks if `path` is a direct property of `object`.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The object to query.
- * @param {Array|string} path The path to check.
- * @returns {boolean} Returns `true` if `path` exists, else `false`.
- * @example
- *
- * var object = { 'a': { 'b': 2 } };
- * var other = _.create({ 'a': _.create({ 'b': 2 }) });
- *
- * _.has(object, 'a');
- * // => true
- *
- * _.has(object, 'a.b');
- * // => true
- *
- * _.has(object, ['a', 'b']);
- * // => true
- *
- * _.has(other, 'a');
- * // => false
- */
-function has(object, path) {
-  return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHas);
-}
-
-/* harmony default export */ const lodash_es_has = (has);
-
-
-/***/ }),
-
-/***/ 75487:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ lodash_es_hasIn)
-});
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseHasIn.js
-/**
- * The base implementation of `_.hasIn` without support for deep paths.
- *
- * @private
- * @param {Object} [object] The object to query.
- * @param {Array|string} key The key to check.
- * @returns {boolean} Returns `true` if `key` exists, else `false`.
- */
-function baseHasIn(object, key) {
-  return object != null && key in Object(object);
-}
-
-/* harmony default export */ const _baseHasIn = (baseHasIn);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_hasPath.js
-var _hasPath = __webpack_require__(16174);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/hasIn.js
-
-
-
-/**
- * Checks if `path` is a direct or inherited property of `object`.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Object
- * @param {Object} object The object to query.
- * @param {Array|string} path The path to check.
- * @returns {boolean} Returns `true` if `path` exists, else `false`.
- * @example
- *
- * var object = _.create({ 'a': _.create({ 'b': 2 }) });
- *
- * _.hasIn(object, 'a');
- * // => true
- *
- * _.hasIn(object, 'a.b');
- * // => true
- *
- * _.hasIn(object, ['a', 'b']);
- * // => true
- *
- * _.hasIn(object, 'b');
- * // => false
- */
-function hasIn(object, path) {
-  return object != null && (0,_hasPath/* default */.Z)(object, path, _baseHasIn);
-}
-
-/* harmony default export */ const lodash_es_hasIn = (hasIn);
-
-
-/***/ }),
-
-/***/ 69203:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * This method returns the first argument it receives.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Util
- * @param {*} value Any value.
- * @returns {*} Returns `value`.
- * @example
- *
- * var object = { 'a': 1 };
- *
- * console.log(_.identity(object) === object);
- * // => true
- */
-function identity(value) {
-  return value;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (identity);
-
-
-/***/ }),
-
-/***/ 29169:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ lodash_es_isArguments)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules
-var _baseGetTag = __webpack_require__(93589);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js
-var isObjectLike = __webpack_require__(18533);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsArguments.js
-
-
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]';
-
-/**
- * The base implementation of `_.isArguments`.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an `arguments` object,
- */
-function baseIsArguments(value) {
-  return (0,isObjectLike/* default */.Z)(value) && (0,_baseGetTag/* default */.Z)(value) == argsTag;
-}
-
-/* harmony default export */ const _baseIsArguments = (baseIsArguments);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/isArguments.js
-
-
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var isArguments_hasOwnProperty = objectProto.hasOwnProperty;
-
-/** Built-in value references. */
-var propertyIsEnumerable = objectProto.propertyIsEnumerable;
-
-/**
- * Checks if `value` is likely an `arguments` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an `arguments` object,
- *  else `false`.
- * @example
- *
- * _.isArguments(function() { return arguments; }());
- * // => true
- *
- * _.isArguments([1, 2, 3]);
- * // => false
- */
-var isArguments = _baseIsArguments(function() { return arguments; }()) ? _baseIsArguments : function(value) {
-  return (0,isObjectLike/* default */.Z)(value) && isArguments_hasOwnProperty.call(value, 'callee') &&
-    !propertyIsEnumerable.call(value, 'callee');
-};
-
-/* harmony default export */ const lodash_es_isArguments = (isArguments);
-
-
-/***/ }),
-
-/***/ 27771:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * Checks if `value` is classified as an `Array` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array, else `false`.
- * @example
- *
- * _.isArray([1, 2, 3]);
- * // => true
- *
- * _.isArray(document.body.children);
- * // => false
- *
- * _.isArray('abc');
- * // => false
- *
- * _.isArray(_.noop);
- * // => false
- */
-var isArray = Array.isArray;
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArray);
-
-
-/***/ }),
-
-/***/ 50585:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _isFunction_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(73234);
-/* harmony import */ var _isLength_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(1656);
-
-
-
-/**
- * Checks if `value` is array-like. A value is considered array-like if it's
- * not a function and has a `value.length` that's an integer greater than or
- * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
- * @example
- *
- * _.isArrayLike([1, 2, 3]);
- * // => true
- *
- * _.isArrayLike(document.body.children);
- * // => true
- *
- * _.isArrayLike('abc');
- * // => true
- *
- * _.isArrayLike(_.noop);
- * // => false
- */
-function isArrayLike(value) {
-  return value != null && (0,_isLength_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value.length) && !(0,_isFunction_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value);
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArrayLike);
-
-
-/***/ }),
-
-/***/ 836:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(50585);
-/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533);
-
-
-
-/**
- * This method is like `_.isArrayLike` except that it also checks if `value`
- * is an object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an array-like object,
- *  else `false`.
- * @example
- *
- * _.isArrayLikeObject([1, 2, 3]);
- * // => true
- *
- * _.isArrayLikeObject(document.body.children);
- * // => true
- *
- * _.isArrayLikeObject('abc');
- * // => false
- *
- * _.isArrayLikeObject(_.noop);
- * // => false
- */
-function isArrayLikeObject(value) {
-  return (0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value);
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isArrayLikeObject);
-
-
-/***/ }),
-
-/***/ 77008:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ lodash_es_isBuffer)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_root.js
-var _root = __webpack_require__(66092);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/stubFalse.js
-/**
- * This method returns `false`.
- *
- * @static
- * @memberOf _
- * @since 4.13.0
- * @category Util
- * @returns {boolean} Returns `false`.
- * @example
- *
- * _.times(2, _.stubFalse);
- * // => [false, false]
- */
-function stubFalse() {
-  return false;
-}
-
-/* harmony default export */ const lodash_es_stubFalse = (stubFalse);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/isBuffer.js
-
-
-
-/** Detect free variable `exports`. */
-var freeExports = typeof exports == 'object' && exports && !exports.nodeType && exports;
-
-/** Detect free variable `module`. */
-var freeModule = freeExports && typeof module == 'object' && module && !module.nodeType && module;
-
-/** Detect the popular CommonJS extension `module.exports`. */
-var moduleExports = freeModule && freeModule.exports === freeExports;
-
-/** Built-in value references. */
-var Buffer = moduleExports ? _root/* default.Buffer */.Z.Buffer : undefined;
-
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined;
-
-/**
- * Checks if `value` is a buffer.
- *
- * @static
- * @memberOf _
- * @since 4.3.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.
- * @example
- *
- * _.isBuffer(new Buffer(2));
- * // => true
- *
- * _.isBuffer(new Uint8Array(2));
- * // => false
- */
-var isBuffer = nativeIsBuffer || lodash_es_stubFalse;
-
-/* harmony default export */ const lodash_es_isBuffer = (isBuffer);
-
-
-/***/ }),
-
-/***/ 79697:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(39473);
-/* harmony import */ var _getTag_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(83970);
-/* harmony import */ var _isArguments_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(29169);
-/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27771);
-/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585);
-/* harmony import */ var _isBuffer_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(77008);
-/* harmony import */ var _isPrototype_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(72764);
-/* harmony import */ var _isTypedArray_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(18843);
-
-
-
-
-
-
-
-
-
-/** `Object#toString` result references. */
-var mapTag = '[object Map]',
-    setTag = '[object Set]';
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * Checks if `value` is an empty object, collection, map, or set.
- *
- * Objects are considered empty if they have no own enumerable string keyed
- * properties.
- *
- * Array-like values such as `arguments` objects, arrays, buffers, strings, or
- * jQuery-like collections are considered empty if they have a `length` of `0`.
- * Similarly, maps and sets are considered empty if they have a `size` of `0`.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is empty, else `false`.
- * @example
- *
- * _.isEmpty(null);
- * // => true
- *
- * _.isEmpty(true);
- * // => true
- *
- * _.isEmpty(1);
- * // => true
- *
- * _.isEmpty([1, 2, 3]);
- * // => false
- *
- * _.isEmpty({ 'a': 1 });
- * // => false
- */
-function isEmpty(value) {
-  if (value == null) {
-    return true;
-  }
-  if ((0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) &&
-      ((0,_isArray_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) || typeof value == 'string' || typeof value.splice == 'function' ||
-        (0,_isBuffer_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(value) || (0,_isTypedArray_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(value) || (0,_isArguments_js__WEBPACK_IMPORTED_MODULE_4__/* ["default"] */ .Z)(value))) {
-    return !value.length;
-  }
-  var tag = (0,_getTag_js__WEBPACK_IMPORTED_MODULE_5__/* ["default"] */ .Z)(value);
-  if (tag == mapTag || tag == setTag) {
-    return !value.size;
-  }
-  if ((0,_isPrototype_js__WEBPACK_IMPORTED_MODULE_6__/* ["default"] */ .Z)(value)) {
-    return !(0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_7__/* ["default"] */ .Z)(value).length;
-  }
-  for (var key in value) {
-    if (hasOwnProperty.call(value, key)) {
-      return false;
-    }
-  }
-  return true;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isEmpty);
-
-
-/***/ }),
-
-/***/ 73234:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589);
-/* harmony import */ var _isObject_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(77226);
-
-
-
-/** `Object#toString` result references. */
-var asyncTag = '[object AsyncFunction]',
-    funcTag = '[object Function]',
-    genTag = '[object GeneratorFunction]',
-    proxyTag = '[object Proxy]';
-
-/**
- * Checks if `value` is classified as a `Function` object.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a function, else `false`.
- * @example
- *
- * _.isFunction(_);
- * // => true
- *
- * _.isFunction(/abc/);
- * // => false
- */
-function isFunction(value) {
-  if (!(0,_isObject_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value)) {
-    return false;
-  }
-  // The use of `Object#toString` avoids issues with the `typeof` operator
-  // in Safari 9 which returns 'object' for typed arrays and other constructors.
-  var tag = (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value);
-  return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isFunction);
-
-
-/***/ }),
-
-/***/ 1656:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/** Used as references for various `Number` constants. */
-var MAX_SAFE_INTEGER = 9007199254740991;
-
-/**
- * Checks if `value` is a valid array-like length.
- *
- * **Note:** This method is loosely based on
- * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
- * @example
- *
- * _.isLength(3);
- * // => true
- *
- * _.isLength(Number.MIN_VALUE);
- * // => false
- *
- * _.isLength(Infinity);
- * // => false
- *
- * _.isLength('3');
- * // => false
- */
-function isLength(value) {
-  return typeof value == 'number' &&
-    value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isLength);
-
-
-/***/ }),
-
-/***/ 77226:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * Checks if `value` is the
- * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
- * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is an object, else `false`.
- * @example
- *
- * _.isObject({});
- * // => true
- *
- * _.isObject([1, 2, 3]);
- * // => true
- *
- * _.isObject(_.noop);
- * // => true
- *
- * _.isObject(null);
- * // => false
- */
-function isObject(value) {
-  var type = typeof value;
-  return value != null && (type == 'object' || type == 'function');
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isObject);
-
-
-/***/ }),
-
-/***/ 18533:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * Checks if `value` is object-like. A value is object-like if it's not `null`
- * and has a `typeof` result of "object".
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
- * @example
- *
- * _.isObjectLike({});
- * // => true
- *
- * _.isObjectLike([1, 2, 3]);
- * // => true
- *
- * _.isObjectLike(_.noop);
- * // => false
- *
- * _.isObjectLike(null);
- * // => false
- */
-function isObjectLike(value) {
-  return value != null && typeof value == 'object';
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isObjectLike);
-
-
-/***/ }),
-
-/***/ 37514:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589);
-/* harmony import */ var _getPrototype_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(12513);
-/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533);
-
-
-
-
-/** `Object#toString` result references. */
-var objectTag = '[object Object]';
-
-/** Used for built-in method references. */
-var funcProto = Function.prototype,
-    objectProto = Object.prototype;
-
-/** Used to resolve the decompiled source of functions. */
-var funcToString = funcProto.toString;
-
-/** Used to check objects for own properties. */
-var hasOwnProperty = objectProto.hasOwnProperty;
-
-/** Used to infer the `Object` constructor. */
-var objectCtorString = funcToString.call(Object);
-
-/**
- * Checks if `value` is a plain object, that is, an object created by the
- * `Object` constructor or one with a `[[Prototype]]` of `null`.
- *
- * @static
- * @memberOf _
- * @since 0.8.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.
- * @example
- *
- * function Foo() {
- *   this.a = 1;
- * }
- *
- * _.isPlainObject(new Foo);
- * // => false
- *
- * _.isPlainObject([1, 2, 3]);
- * // => false
- *
- * _.isPlainObject({ 'x': 0, 'y': 0 });
- * // => true
- *
- * _.isPlainObject(Object.create(null));
- * // => true
- */
-function isPlainObject(value) {
-  if (!(0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) || (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) != objectTag) {
-    return false;
-  }
-  var proto = (0,_getPrototype_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(value);
-  if (proto === null) {
-    return true;
-  }
-  var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;
-  return typeof Ctor == 'function' && Ctor instanceof Ctor &&
-    funcToString.call(Ctor) == objectCtorString;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isPlainObject);
-
-
-/***/ }),
-
-/***/ 72714:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(93589);
-/* harmony import */ var _isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(18533);
-
-
-
-/** `Object#toString` result references. */
-var symbolTag = '[object Symbol]';
-
-/**
- * Checks if `value` is classified as a `Symbol` primitive or object.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
- * @example
- *
- * _.isSymbol(Symbol.iterator);
- * // => true
- *
- * _.isSymbol('abc');
- * // => false
- */
-function isSymbol(value) {
-  return typeof value == 'symbol' ||
-    ((0,_isObjectLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(value) && (0,_baseGetTag_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(value) == symbolTag);
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isSymbol);
-
-
-/***/ }),
-
-/***/ 18843:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ lodash_es_isTypedArray)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGetTag.js + 2 modules
-var _baseGetTag = __webpack_require__(93589);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isLength.js
-var isLength = __webpack_require__(1656);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isObjectLike.js
-var isObjectLike = __webpack_require__(18533);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseIsTypedArray.js
-
-
-
-
-/** `Object#toString` result references. */
-var argsTag = '[object Arguments]',
-    arrayTag = '[object Array]',
-    boolTag = '[object Boolean]',
-    dateTag = '[object Date]',
-    errorTag = '[object Error]',
-    funcTag = '[object Function]',
-    mapTag = '[object Map]',
-    numberTag = '[object Number]',
-    objectTag = '[object Object]',
-    regexpTag = '[object RegExp]',
-    setTag = '[object Set]',
-    stringTag = '[object String]',
-    weakMapTag = '[object WeakMap]';
-
-var arrayBufferTag = '[object ArrayBuffer]',
-    dataViewTag = '[object DataView]',
-    float32Tag = '[object Float32Array]',
-    float64Tag = '[object Float64Array]',
-    int8Tag = '[object Int8Array]',
-    int16Tag = '[object Int16Array]',
-    int32Tag = '[object Int32Array]',
-    uint8Tag = '[object Uint8Array]',
-    uint8ClampedTag = '[object Uint8ClampedArray]',
-    uint16Tag = '[object Uint16Array]',
-    uint32Tag = '[object Uint32Array]';
-
-/** Used to identify `toStringTag` values of typed arrays. */
-var typedArrayTags = {};
-typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
-typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
-typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
-typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
-typedArrayTags[uint32Tag] = true;
-typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
-typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
-typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
-typedArrayTags[errorTag] = typedArrayTags[funcTag] =
-typedArrayTags[mapTag] = typedArrayTags[numberTag] =
-typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
-typedArrayTags[setTag] = typedArrayTags[stringTag] =
-typedArrayTags[weakMapTag] = false;
-
-/**
- * The base implementation of `_.isTypedArray` without Node.js optimizations.
- *
- * @private
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
- */
-function baseIsTypedArray(value) {
-  return (0,isObjectLike/* default */.Z)(value) &&
-    (0,isLength/* default */.Z)(value.length) && !!typedArrayTags[(0,_baseGetTag/* default */.Z)(value)];
-}
-
-/* harmony default export */ const _baseIsTypedArray = (baseIsTypedArray);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseUnary.js
-var _baseUnary = __webpack_require__(21162);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_nodeUtil.js
-var _nodeUtil = __webpack_require__(98351);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/isTypedArray.js
-
-
-
-
-/* Node.js helper references. */
-var nodeIsTypedArray = _nodeUtil/* default */.Z && _nodeUtil/* default.isTypedArray */.Z.isTypedArray;
-
-/**
- * Checks if `value` is classified as a typed array.
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
- * @example
- *
- * _.isTypedArray(new Uint8Array);
- * // => true
- *
- * _.isTypedArray([]);
- * // => false
- */
-var isTypedArray = nodeIsTypedArray ? (0,_baseUnary/* default */.Z)(nodeIsTypedArray) : _baseIsTypedArray;
-
-/* harmony default export */ const lodash_es_isTypedArray = (isTypedArray);
-
-
-/***/ }),
-
-/***/ 49360:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * Checks if `value` is `undefined`.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Lang
- * @param {*} value The value to check.
- * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.
- * @example
- *
- * _.isUndefined(void 0);
- * // => true
- *
- * _.isUndefined(null);
- * // => false
- */
-function isUndefined(value) {
-  return value === undefined;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (isUndefined);
-
-
-/***/ }),
-
-/***/ 17179:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(87668);
-/* harmony import */ var _baseKeys_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(39473);
-/* harmony import */ var _isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50585);
-
-
-
-
-/**
- * Creates an array of the own enumerable property names of `object`.
- *
- * **Note:** Non-object values are coerced to objects. See the
- * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
- * for more details.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- * @example
- *
- * function Foo() {
- *   this.a = 1;
- *   this.b = 2;
- * }
- *
- * Foo.prototype.c = 3;
- *
- * _.keys(new Foo);
- * // => ['a', 'b'] (iteration order is not guaranteed)
- *
- * _.keys('hi');
- * // => ['0', '1']
- */
-function keys(object) {
-  return (0,_isArrayLike_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(object) ? (0,_arrayLikeKeys_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z)(object) : (0,_baseKeys_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z)(object);
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (keys);
-
-
-/***/ }),
-
-/***/ 32957:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ lodash_es_keysIn)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayLikeKeys.js + 1 modules
-var _arrayLikeKeys = __webpack_require__(87668);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js
-var isObject = __webpack_require__(77226);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_isPrototype.js
-var _isPrototype = __webpack_require__(72764);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_nativeKeysIn.js
-/**
- * This function is like
- * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
- * except that it includes inherited enumerable properties.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
-function nativeKeysIn(object) {
-  var result = [];
-  if (object != null) {
-    for (var key in Object(object)) {
-      result.push(key);
-    }
-  }
-  return result;
-}
-
-/* harmony default export */ const _nativeKeysIn = (nativeKeysIn);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseKeysIn.js
-
-
-
-
-/** Used for built-in method references. */
-var objectProto = Object.prototype;
-
-/** Used to check objects for own properties. */
-var _baseKeysIn_hasOwnProperty = objectProto.hasOwnProperty;
-
-/**
- * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.
- *
- * @private
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- */
-function baseKeysIn(object) {
-  if (!(0,isObject/* default */.Z)(object)) {
-    return _nativeKeysIn(object);
-  }
-  var isProto = (0,_isPrototype/* default */.Z)(object),
-      result = [];
-
-  for (var key in object) {
-    if (!(key == 'constructor' && (isProto || !_baseKeysIn_hasOwnProperty.call(object, key)))) {
-      result.push(key);
-    }
-  }
-  return result;
-}
-
-/* harmony default export */ const _baseKeysIn = (baseKeysIn);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArrayLike.js
-var isArrayLike = __webpack_require__(50585);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/keysIn.js
-
-
-
-
-/**
- * Creates an array of the own and inherited enumerable property names of `object`.
- *
- * **Note:** Non-object values are coerced to objects.
- *
- * @static
- * @memberOf _
- * @since 3.0.0
- * @category Object
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property names.
- * @example
- *
- * function Foo() {
- *   this.a = 1;
- *   this.b = 2;
- * }
- *
- * Foo.prototype.c = 3;
- *
- * _.keysIn(new Foo);
- * // => ['a', 'b', 'c'] (iteration order is not guaranteed)
- */
-function keysIn(object) {
-  return (0,isArrayLike/* default */.Z)(object) ? (0,_arrayLikeKeys/* default */.Z)(object, true) : _baseKeysIn(object);
-}
-
-/* harmony default export */ const lodash_es_keysIn = (keysIn);
-
-
-/***/ }),
-
-/***/ 43836:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(74073);
-/* harmony import */ var _baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(74765);
-/* harmony import */ var _baseMap_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(21018);
-/* harmony import */ var _isArray_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(27771);
-
-
-
-
-
-/**
- * Creates an array of values by running each element in `collection` thru
- * `iteratee`. The iteratee is invoked with three arguments:
- * (value, index|key, collection).
- *
- * Many lodash methods are guarded to work as iteratees for methods like
- * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.
- *
- * The guarded methods are:
- * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,
- * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,
- * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,
- * `template`, `trim`, `trimEnd`, `trimStart`, and `words`
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [iteratee=_.identity] The function invoked per iteration.
- * @returns {Array} Returns the new mapped array.
- * @example
- *
- * function square(n) {
- *   return n * n;
- * }
- *
- * _.map([4, 8], square);
- * // => [16, 64]
- *
- * _.map({ 'a': 4, 'b': 8 }, square);
- * // => [16, 64] (iteration order is not guaranteed)
- *
- * var users = [
- *   { 'user': 'barney' },
- *   { 'user': 'fred' }
- * ];
- *
- * // The `_.property` iteratee shorthand.
- * _.map(users, 'user');
- * // => ['barney', 'fred']
- */
-function map(collection, iteratee) {
-  var func = (0,_isArray_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(collection) ? _arrayMap_js__WEBPACK_IMPORTED_MODULE_1__/* ["default"] */ .Z : _baseMap_js__WEBPACK_IMPORTED_MODULE_2__/* ["default"] */ .Z;
-  return func(collection, (0,_baseIteratee_js__WEBPACK_IMPORTED_MODULE_3__/* ["default"] */ .Z)(iteratee, 3));
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (map);
-
-
-/***/ }),
-
-/***/ 42454:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _MapCache_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(37834);
-
-
-/** Error message constants. */
-var FUNC_ERROR_TEXT = 'Expected a function';
-
-/**
- * Creates a function that memoizes the result of `func`. If `resolver` is
- * provided, it determines the cache key for storing the result based on the
- * arguments provided to the memoized function. By default, the first argument
- * provided to the memoized function is used as the map cache key. The `func`
- * is invoked with the `this` binding of the memoized function.
- *
- * **Note:** The cache is exposed as the `cache` property on the memoized
- * function. Its creation may be customized by replacing the `_.memoize.Cache`
- * constructor with one whose instances implement the
- * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
- * method interface of `clear`, `delete`, `get`, `has`, and `set`.
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Function
- * @param {Function} func The function to have its output memoized.
- * @param {Function} [resolver] The function to resolve the cache key.
- * @returns {Function} Returns the new memoized function.
- * @example
- *
- * var object = { 'a': 1, 'b': 2 };
- * var other = { 'c': 3, 'd': 4 };
- *
- * var values = _.memoize(_.values);
- * values(object);
- * // => [1, 2]
- *
- * values(other);
- * // => [3, 4]
- *
- * object.a = 2;
- * values(object);
- * // => [1, 2]
- *
- * // Modify the result cache.
- * values.cache.set(object, ['a', 'b']);
- * values(object);
- * // => ['a', 'b']
- *
- * // Replace `_.memoize.Cache`.
- * _.memoize.Cache = WeakMap;
- */
-function memoize(func, resolver) {
-  if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
-    throw new TypeError(FUNC_ERROR_TEXT);
-  }
-  var memoized = function() {
-    var args = arguments,
-        key = resolver ? resolver.apply(this, args) : args[0],
-        cache = memoized.cache;
-
-    if (cache.has(key)) {
-      return cache.get(key);
-    }
-    var result = func.apply(this, args);
-    memoized.cache = cache.set(key, result) || cache;
-    return result;
-  };
-  memoized.cache = new (memoize.Cache || _MapCache_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z);
-  return memoized;
-}
-
-// Expose `MapCache`.
-memoize.Cache = _MapCache_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z;
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (memoize);
-
-
-/***/ }),
-
-/***/ 61666:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ lodash_es_pick)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseGet.js
-var _baseGet = __webpack_require__(13317);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_assignValue.js
-var _assignValue = __webpack_require__(72954);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_castPath.js + 2 modules
-var _castPath = __webpack_require__(22823);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_isIndex.js
-var _isIndex = __webpack_require__(56009);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js
-var isObject = __webpack_require__(77226);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_toKey.js
-var _toKey = __webpack_require__(62281);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseSet.js
-
-
-
-
-
-
-/**
- * The base implementation of `_.set`.
- *
- * @private
- * @param {Object} object The object to modify.
- * @param {Array|string} path The path of the property to set.
- * @param {*} value The value to set.
- * @param {Function} [customizer] The function to customize path creation.
- * @returns {Object} Returns `object`.
- */
-function baseSet(object, path, value, customizer) {
-  if (!(0,isObject/* default */.Z)(object)) {
-    return object;
-  }
-  path = (0,_castPath/* default */.Z)(path, object);
-
-  var index = -1,
-      length = path.length,
-      lastIndex = length - 1,
-      nested = object;
-
-  while (nested != null && ++index < length) {
-    var key = (0,_toKey/* default */.Z)(path[index]),
-        newValue = value;
-
-    if (key === '__proto__' || key === 'constructor' || key === 'prototype') {
-      return object;
-    }
-
-    if (index != lastIndex) {
-      var objValue = nested[key];
-      newValue = customizer ? customizer(objValue, key, nested) : undefined;
-      if (newValue === undefined) {
-        newValue = (0,isObject/* default */.Z)(objValue)
-          ? objValue
-          : ((0,_isIndex/* default */.Z)(path[index + 1]) ? [] : {});
-      }
-    }
-    (0,_assignValue/* default */.Z)(nested, key, newValue);
-    nested = nested[key];
-  }
-  return object;
-}
-
-/* harmony default export */ const _baseSet = (baseSet);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePickBy.js
-
-
-
-
-/**
- * The base implementation of  `_.pickBy` without support for iteratee shorthands.
- *
- * @private
- * @param {Object} object The source object.
- * @param {string[]} paths The property paths to pick.
- * @param {Function} predicate The function invoked per property.
- * @returns {Object} Returns the new object.
- */
-function basePickBy(object, paths, predicate) {
-  var index = -1,
-      length = paths.length,
-      result = {};
-
-  while (++index < length) {
-    var path = paths[index],
-        value = (0,_baseGet/* default */.Z)(object, path);
-
-    if (predicate(value, path)) {
-      _baseSet(result, (0,_castPath/* default */.Z)(path, object), value);
-    }
-  }
-  return result;
-}
-
-/* harmony default export */ const _basePickBy = (basePickBy);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/hasIn.js + 1 modules
-var hasIn = __webpack_require__(75487);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_basePick.js
-
-
-
-/**
- * The base implementation of `_.pick` without support for individual
- * property identifiers.
- *
- * @private
- * @param {Object} object The source object.
- * @param {string[]} paths The property paths to pick.
- * @returns {Object} Returns the new object.
- */
-function basePick(object, paths) {
-  return _basePickBy(object, paths, function(value, path) {
-    return (0,hasIn/* default */.Z)(object, path);
-  });
-}
-
-/* harmony default export */ const _basePick = (basePick);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/flatten.js
-var flatten = __webpack_require__(27961);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_overRest.js + 1 modules
-var _overRest = __webpack_require__(81211);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_setToString.js + 2 modules
-var _setToString = __webpack_require__(27227);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_flatRest.js
-
-
-
-
-/**
- * A specialized version of `baseRest` which flattens the rest array.
- *
- * @private
- * @param {Function} func The function to apply a rest parameter to.
- * @returns {Function} Returns the new function.
- */
-function flatRest(func) {
-  return (0,_setToString/* default */.Z)((0,_overRest/* default */.Z)(func, undefined, flatten/* default */.Z), func + '');
-}
-
-/* harmony default export */ const _flatRest = (flatRest);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/pick.js
-
-
-
-/**
- * Creates an object composed of the picked `object` properties.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The source object.
- * @param {...(string|string[])} [paths] The property paths to pick.
- * @returns {Object} Returns the new object.
- * @example
- *
- * var object = { 'a': 1, 'b': '2', 'c': 3 };
- *
- * _.pick(object, ['a', 'c']);
- * // => { 'a': 1, 'c': 3 }
- */
-var pick = _flatRest(function(object, paths) {
-  return object == null ? {} : _basePick(object, paths);
-});
-
-/* harmony default export */ const lodash_es_pick = (pick);
-
-
-/***/ }),
-
-/***/ 74379:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ lodash_es_range)
-});
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseRange.js
-/* Built-in method references for those with the same name as other `lodash` methods. */
-var nativeCeil = Math.ceil,
-    nativeMax = Math.max;
-
-/**
- * The base implementation of `_.range` and `_.rangeRight` which doesn't
- * coerce arguments.
- *
- * @private
- * @param {number} start The start of the range.
- * @param {number} end The end of the range.
- * @param {number} step The value to increment or decrement by.
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {Array} Returns the range of numbers.
- */
-function baseRange(start, end, step, fromRight) {
-  var index = -1,
-      length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),
-      result = Array(length);
-
-  while (length--) {
-    result[fromRight ? length : ++index] = start;
-    start += step;
-  }
-  return result;
-}
-
-/* harmony default export */ const _baseRange = (baseRange);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_isIterateeCall.js
-var _isIterateeCall = __webpack_require__(50439);
-// EXTERNAL MODULE: ./node_modules/lodash-es/toFinite.js + 3 modules
-var toFinite = __webpack_require__(94099);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_createRange.js
-
-
-
-
-/**
- * Creates a `_.range` or `_.rangeRight` function.
- *
- * @private
- * @param {boolean} [fromRight] Specify iterating from right to left.
- * @returns {Function} Returns the new range function.
- */
-function createRange(fromRight) {
-  return function(start, end, step) {
-    if (step && typeof step != 'number' && (0,_isIterateeCall/* default */.Z)(start, end, step)) {
-      end = step = undefined;
-    }
-    // Ensure the sign of `-0` is preserved.
-    start = (0,toFinite/* default */.Z)(start);
-    if (end === undefined) {
-      end = start;
-      start = 0;
-    } else {
-      end = (0,toFinite/* default */.Z)(end);
-    }
-    step = step === undefined ? (start < end ? 1 : -1) : (0,toFinite/* default */.Z)(step);
-    return _baseRange(start, end, step, fromRight);
-  };
-}
-
-/* harmony default export */ const _createRange = (createRange);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/range.js
-
-
-/**
- * Creates an array of numbers (positive and/or negative) progressing from
- * `start` up to, but not including, `end`. A step of `-1` is used if a negative
- * `start` is specified without an `end` or `step`. If `end` is not specified,
- * it's set to `start` with `start` then set to `0`.
- *
- * **Note:** JavaScript follows the IEEE-754 standard for resolving
- * floating-point values which can produce unexpected results.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Util
- * @param {number} [start=0] The start of the range.
- * @param {number} end The end of the range.
- * @param {number} [step=1] The value to increment or decrement by.
- * @returns {Array} Returns the range of numbers.
- * @see _.inRange, _.rangeRight
- * @example
- *
- * _.range(4);
- * // => [0, 1, 2, 3]
- *
- * _.range(-4);
- * // => [0, -1, -2, -3]
- *
- * _.range(1, 5);
- * // => [1, 2, 3, 4]
- *
- * _.range(0, 20, 5);
- * // => [0, 5, 10, 15]
- *
- * _.range(0, -4, -1);
- * // => [0, -1, -2, -3]
- *
- * _.range(1, 4, 0);
- * // => [1, 1, 1]
- *
- * _.range(0);
- * // => []
- */
-var range = _createRange();
-
-/* harmony default export */ const lodash_es_range = (range);
-
-
-/***/ }),
-
-/***/ 92344:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ lodash_es_reduce)
-});
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_arrayReduce.js
-/**
- * A specialized version of `_.reduce` for arrays without support for
- * iteratee shorthands.
- *
- * @private
- * @param {Array} [array] The array to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @param {*} [accumulator] The initial value.
- * @param {boolean} [initAccum] Specify using the first element of `array` as
- *  the initial value.
- * @returns {*} Returns the accumulated value.
- */
-function arrayReduce(array, iteratee, accumulator, initAccum) {
-  var index = -1,
-      length = array == null ? 0 : array.length;
-
-  if (initAccum && length) {
-    accumulator = array[++index];
-  }
-  while (++index < length) {
-    accumulator = iteratee(accumulator, array[index], index, array);
-  }
-  return accumulator;
-}
-
-/* harmony default export */ const _arrayReduce = (arrayReduce);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseEach.js + 1 modules
-var _baseEach = __webpack_require__(49811);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_baseIteratee.js + 16 modules
-var _baseIteratee = __webpack_require__(74765);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseReduce.js
-/**
- * The base implementation of `_.reduce` and `_.reduceRight`, without support
- * for iteratee shorthands, which iterates over `collection` using `eachFunc`.
- *
- * @private
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} iteratee The function invoked per iteration.
- * @param {*} accumulator The initial value.
- * @param {boolean} initAccum Specify using the first or last element of
- *  `collection` as the initial value.
- * @param {Function} eachFunc The function to iterate over `collection`.
- * @returns {*} Returns the accumulated value.
- */
-function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {
-  eachFunc(collection, function(value, index, collection) {
-    accumulator = initAccum
-      ? (initAccum = false, value)
-      : iteratee(accumulator, value, index, collection);
-  });
-  return accumulator;
-}
-
-/* harmony default export */ const _baseReduce = (baseReduce);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js
-var isArray = __webpack_require__(27771);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/reduce.js
-
-
-
-
-
-
-/**
- * Reduces `collection` to a value which is the accumulated result of running
- * each element in `collection` thru `iteratee`, where each successive
- * invocation is supplied the return value of the previous. If `accumulator`
- * is not given, the first element of `collection` is used as the initial
- * value. The iteratee is invoked with four arguments:
- * (accumulator, value, index|key, collection).
- *
- * Many lodash methods are guarded to work as iteratees for methods like
- * `_.reduce`, `_.reduceRight`, and `_.transform`.
- *
- * The guarded methods are:
- * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,
- * and `sortBy`
- *
- * @static
- * @memberOf _
- * @since 0.1.0
- * @category Collection
- * @param {Array|Object} collection The collection to iterate over.
- * @param {Function} [iteratee=_.identity] The function invoked per iteration.
- * @param {*} [accumulator] The initial value.
- * @returns {*} Returns the accumulated value.
- * @see _.reduceRight
- * @example
- *
- * _.reduce([1, 2], function(sum, n) {
- *   return sum + n;
- * }, 0);
- * // => 3
- *
- * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {
- *   (result[value] || (result[value] = [])).push(key);
- *   return result;
- * }, {});
- * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)
- */
-function reduce(collection, iteratee, accumulator) {
-  var func = (0,isArray/* default */.Z)(collection) ? _arrayReduce : _baseReduce,
-      initAccum = arguments.length < 3;
-
-  return func(collection, (0,_baseIteratee/* default */.Z)(iteratee, 4), accumulator, initAccum, _baseEach/* default */.Z);
-}
-
-/* harmony default export */ const lodash_es_reduce = (reduce);
-
-
-/***/ }),
-
-/***/ 60532:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/**
- * This method returns a new empty array.
- *
- * @static
- * @memberOf _
- * @since 4.13.0
- * @category Util
- * @returns {Array} Returns the new empty array.
- * @example
- *
- * var arrays = _.times(2, _.stubArray);
- *
- * console.log(arrays);
- * // => [[], []]
- *
- * console.log(arrays[0] === arrays[1]);
- * // => false
- */
-function stubArray() {
-  return [];
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (stubArray);
-
-
-/***/ }),
-
-/***/ 94099:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ lodash_es_toFinite)
-});
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_trimmedEndIndex.js
-/** Used to match a single whitespace character. */
-var reWhitespace = /\s/;
-
-/**
- * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
- * character of `string`.
- *
- * @private
- * @param {string} string The string to inspect.
- * @returns {number} Returns the index of the last non-whitespace character.
- */
-function trimmedEndIndex(string) {
-  var index = string.length;
-
-  while (index-- && reWhitespace.test(string.charAt(index))) {}
-  return index;
-}
-
-/* harmony default export */ const _trimmedEndIndex = (trimmedEndIndex);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseTrim.js
-
-
-/** Used to match leading whitespace. */
-var reTrimStart = /^\s+/;
-
-/**
- * The base implementation of `_.trim`.
- *
- * @private
- * @param {string} string The string to trim.
- * @returns {string} Returns the trimmed string.
- */
-function baseTrim(string) {
-  return string
-    ? string.slice(0, _trimmedEndIndex(string) + 1).replace(reTrimStart, '')
-    : string;
-}
-
-/* harmony default export */ const _baseTrim = (baseTrim);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/isObject.js
-var isObject = __webpack_require__(77226);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js
-var isSymbol = __webpack_require__(72714);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/toNumber.js
-
-
-
-
-/** Used as references for various `Number` constants. */
-var NAN = 0 / 0;
-
-/** Used to detect bad signed hexadecimal string values. */
-var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
-
-/** Used to detect binary string values. */
-var reIsBinary = /^0b[01]+$/i;
-
-/** Used to detect octal string values. */
-var reIsOctal = /^0o[0-7]+$/i;
-
-/** Built-in method references without a dependency on `root`. */
-var freeParseInt = parseInt;
-
-/**
- * Converts `value` to a number.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to process.
- * @returns {number} Returns the number.
- * @example
- *
- * _.toNumber(3.2);
- * // => 3.2
- *
- * _.toNumber(Number.MIN_VALUE);
- * // => 5e-324
- *
- * _.toNumber(Infinity);
- * // => Infinity
- *
- * _.toNumber('3.2');
- * // => 3.2
- */
-function toNumber(value) {
-  if (typeof value == 'number') {
-    return value;
-  }
-  if ((0,isSymbol/* default */.Z)(value)) {
-    return NAN;
-  }
-  if ((0,isObject/* default */.Z)(value)) {
-    var other = typeof value.valueOf == 'function' ? value.valueOf() : value;
-    value = (0,isObject/* default */.Z)(other) ? (other + '') : other;
-  }
-  if (typeof value != 'string') {
-    return value === 0 ? value : +value;
-  }
-  value = _baseTrim(value);
-  var isBinary = reIsBinary.test(value);
-  return (isBinary || reIsOctal.test(value))
-    ? freeParseInt(value.slice(2), isBinary ? 2 : 8)
-    : (reIsBadHex.test(value) ? NAN : +value);
-}
-
-/* harmony default export */ const lodash_es_toNumber = (toNumber);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/toFinite.js
-
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0,
-    MAX_INTEGER = 1.7976931348623157e+308;
-
-/**
- * Converts `value` to a finite number.
- *
- * @static
- * @memberOf _
- * @since 4.12.0
- * @category Lang
- * @param {*} value The value to convert.
- * @returns {number} Returns the converted number.
- * @example
- *
- * _.toFinite(3.2);
- * // => 3.2
- *
- * _.toFinite(Number.MIN_VALUE);
- * // => 5e-324
- *
- * _.toFinite(Infinity);
- * // => 1.7976931348623157e+308
- *
- * _.toFinite('3.2');
- * // => 3.2
- */
-function toFinite(value) {
-  if (!value) {
-    return value === 0 ? value : 0;
-  }
-  value = lodash_es_toNumber(value);
-  if (value === INFINITY || value === -INFINITY) {
-    var sign = (value < 0 ? -1 : 1);
-    return sign * MAX_INTEGER;
-  }
-  return value === value ? value : 0;
-}
-
-/* harmony default export */ const lodash_es_toFinite = (toFinite);
-
-
-/***/ }),
-
-/***/ 50751:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ lodash_es_toString)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_Symbol.js
-var _Symbol = __webpack_require__(17685);
-// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js
-var _arrayMap = __webpack_require__(74073);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isArray.js
-var isArray = __webpack_require__(27771);
-// EXTERNAL MODULE: ./node_modules/lodash-es/isSymbol.js
-var isSymbol = __webpack_require__(72714);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseToString.js
-
-
-
-
-
-/** Used as references for various `Number` constants. */
-var INFINITY = 1 / 0;
-
-/** Used to convert symbols to primitives and strings. */
-var symbolProto = _Symbol/* default */.Z ? _Symbol/* default.prototype */.Z.prototype : undefined,
-    symbolToString = symbolProto ? symbolProto.toString : undefined;
-
-/**
- * The base implementation of `_.toString` which doesn't convert nullish
- * values to empty strings.
- *
- * @private
- * @param {*} value The value to process.
- * @returns {string} Returns the string.
- */
-function baseToString(value) {
-  // Exit early for strings to avoid a performance hit in some environments.
-  if (typeof value == 'string') {
-    return value;
-  }
-  if ((0,isArray/* default */.Z)(value)) {
-    // Recursively convert values (susceptible to call stack limits).
-    return (0,_arrayMap/* default */.Z)(value, baseToString) + '';
-  }
-  if ((0,isSymbol/* default */.Z)(value)) {
-    return symbolToString ? symbolToString.call(value) : '';
-  }
-  var result = (value + '');
-  return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
-}
-
-/* harmony default export */ const _baseToString = (baseToString);
-
-;// CONCATENATED MODULE: ./node_modules/lodash-es/toString.js
-
-
-/**
- * Converts `value` to a string. An empty string is returned for `null`
- * and `undefined` values. The sign of `-0` is preserved.
- *
- * @static
- * @memberOf _
- * @since 4.0.0
- * @category Lang
- * @param {*} value The value to convert.
- * @returns {string} Returns the converted string.
- * @example
- *
- * _.toString(null);
- * // => ''
- *
- * _.toString(-0);
- * // => '-0'
- *
- * _.toString([1, 2, 3]);
- * // => '1,2,3'
- */
-function toString_toString(value) {
-  return value == null ? '' : _baseToString(value);
-}
-
-/* harmony default export */ const lodash_es_toString = (toString_toString);
-
-
-/***/ }),
-
-/***/ 66749:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (__WEBPACK_DEFAULT_EXPORT__)
-/* harmony export */ });
-/* harmony import */ var _toString_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(50751);
-
-
-/** Used to generate unique IDs. */
-var idCounter = 0;
-
-/**
- * Generates a unique ID. If `prefix` is given, the ID is appended to it.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Util
- * @param {string} [prefix=''] The value to prefix the ID with.
- * @returns {string} Returns the unique ID.
- * @example
- *
- * _.uniqueId('contact_');
- * // => 'contact_104'
- *
- * _.uniqueId();
- * // => '105'
- */
-function uniqueId(prefix) {
-  var id = ++idCounter;
-  return (0,_toString_js__WEBPACK_IMPORTED_MODULE_0__/* ["default"] */ .Z)(prefix) + id;
-}
-
-/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (uniqueId);
-
-
-/***/ }),
-
-/***/ 34148:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-
-// EXPORTS
-__webpack_require__.d(__webpack_exports__, {
-  "Z": () => (/* binding */ lodash_es_values)
-});
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/_arrayMap.js
-var _arrayMap = __webpack_require__(74073);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/_baseValues.js
-
-
-/**
- * The base implementation of `_.values` and `_.valuesIn` which creates an
- * array of `object` property values corresponding to the property names
- * of `props`.
- *
- * @private
- * @param {Object} object The object to query.
- * @param {Array} props The property names to get values for.
- * @returns {Object} Returns the array of property values.
- */
-function baseValues(object, props) {
-  return (0,_arrayMap/* default */.Z)(props, function(key) {
-    return object[key];
-  });
-}
-
-/* harmony default export */ const _baseValues = (baseValues);
-
-// EXTERNAL MODULE: ./node_modules/lodash-es/keys.js
-var keys = __webpack_require__(17179);
-;// CONCATENATED MODULE: ./node_modules/lodash-es/values.js
-
-
-
-/**
- * Creates an array of the own enumerable string keyed property values of `object`.
- *
- * **Note:** Non-object values are coerced to objects.
- *
- * @static
- * @since 0.1.0
- * @memberOf _
- * @category Object
- * @param {Object} object The object to query.
- * @returns {Array} Returns the array of property values.
- * @example
- *
- * function Foo() {
- *   this.a = 1;
- *   this.b = 2;
- * }
- *
- * Foo.prototype.c = 3;
- *
- * _.values(new Foo);
- * // => [1, 2] (iteration order is not guaranteed)
- *
- * _.values('hi');
- * // => ['h', 'i']
- */
-function values(object) {
-  return object == null ? [] : _baseValues(object, (0,keys/* default */.Z)(object));
-}
-
-/* harmony default export */ const lodash_es_values = (values);
-
-
-/***/ }),
-
-/***/ 27563:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Ab": () => (/* binding */ COMMENT),
-/* harmony export */   "Fr": () => (/* binding */ RULESET),
-/* harmony export */   "G$": () => (/* binding */ WEBKIT),
-/* harmony export */   "JM": () => (/* binding */ LAYER),
-/* harmony export */   "K$": () => (/* binding */ IMPORT),
-/* harmony export */   "MS": () => (/* binding */ MS),
-/* harmony export */   "h5": () => (/* binding */ DECLARATION),
-/* harmony export */   "lK": () => (/* binding */ KEYFRAMES),
-/* harmony export */   "uj": () => (/* binding */ MOZ)
-/* harmony export */ });
-/* unused harmony exports PAGE, MEDIA, CHARSET, VIEWPORT, SUPPORTS, DOCUMENT, NAMESPACE, FONT_FACE, COUNTER_STYLE, FONT_FEATURE_VALUES */
-var MS = '-ms-'
-var MOZ = '-moz-'
-var WEBKIT = '-webkit-'
-
-var COMMENT = 'comm'
-var RULESET = 'rule'
-var DECLARATION = 'decl'
-
-var PAGE = '@page'
-var MEDIA = '@media'
-var IMPORT = '@import'
-var CHARSET = '@charset'
-var VIEWPORT = '@viewport'
-var SUPPORTS = '@supports'
-var DOCUMENT = '@document'
-var NAMESPACE = '@namespace'
-var KEYFRAMES = '@keyframes'
-var FONT_FACE = '@font-face'
-var COUNTER_STYLE = '@counter-style'
-var FONT_FEATURE_VALUES = '@font-feature-values'
-var LAYER = '@layer'
-
-
-/***/ }),
-
-/***/ 92190:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "MY": () => (/* binding */ compile)
-/* harmony export */ });
-/* unused harmony exports parse, ruleset, comment, declaration */
-/* harmony import */ var _Enum_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(27563);
-/* harmony import */ var _Utility_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(26686);
-/* harmony import */ var _Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(46411);
-
-
-
-
-/**
- * @param {string} value
- * @return {object[]}
- */
-function compile (value) {
-	return (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .dealloc */ .cE)(parse('', null, null, null, [''], value = (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .alloc */ .un)(value), 0, [0], value))
-}
-
-/**
- * @param {string} value
- * @param {object} root
- * @param {object?} parent
- * @param {string[]} rule
- * @param {string[]} rules
- * @param {string[]} rulesets
- * @param {number[]} pseudo
- * @param {number[]} points
- * @param {string[]} declarations
- * @return {object}
- */
-function parse (value, root, parent, rule, rules, rulesets, pseudo, points, declarations) {
-	var index = 0
-	var offset = 0
-	var length = pseudo
-	var atrule = 0
-	var property = 0
-	var previous = 0
-	var variable = 1
-	var scanning = 1
-	var ampersand = 1
-	var character = 0
-	var type = ''
-	var props = rules
-	var children = rulesets
-	var reference = rule
-	var characters = type
-
-	while (scanning)
-		switch (previous = character, character = (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .next */ .lp)()) {
-			// (
-			case 40:
-				if (previous != 108 && (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .charat */ .uO)(characters, length - 1) == 58) {
-					if ((0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .indexof */ .Cw)(characters += (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .replace */ .gx)((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .delimit */ .iF)(character), '&', '&\f'), '&\f') != -1)
-						ampersand = -1
-					break
-				}
-			// " ' [
-			case 34: case 39: case 91:
-				characters += (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .delimit */ .iF)(character)
-				break
-			// \t \n \r \s
-			case 9: case 10: case 13: case 32:
-				characters += (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .whitespace */ .Qb)(previous)
-				break
-			// \
-			case 92:
-				characters += (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .escaping */ .kq)((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .caret */ .Ud)() - 1, 7)
-				continue
-			// /
-			case 47:
-				switch ((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .peek */ .fj)()) {
-					case 42: case 47:
-						;(0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .append */ .R3)(comment((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .commenter */ .q6)((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .next */ .lp)(), (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .caret */ .Ud)()), root, parent), declarations)
-						break
-					default:
-						characters += '/'
-				}
-				break
-			// {
-			case 123 * variable:
-				points[index++] = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .strlen */ .to)(characters) * ampersand
-			// } ; \0
-			case 125 * variable: case 59: case 0:
-				switch (character) {
-					// \0 }
-					case 0: case 125: scanning = 0
-					// ;
-					case 59 + offset: if (ampersand == -1) characters = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .replace */ .gx)(characters, /\f/g, '')
-						if (property > 0 && ((0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .strlen */ .to)(characters) - length))
-							(0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .append */ .R3)(property > 32 ? declaration(characters + ';', rule, parent, length - 1) : declaration((0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .replace */ .gx)(characters, ' ', '') + ';', rule, parent, length - 2), declarations)
-						break
-					// @ ;
-					case 59: characters += ';'
-					// { rule/at-rule
-					default:
-						;(0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .append */ .R3)(reference = ruleset(characters, root, parent, index, offset, rules, points, type, props = [], children = [], length), rulesets)
-
-						if (character === 123)
-							if (offset === 0)
-								parse(characters, root, reference, reference, props, rulesets, length, points, children)
-							else
-								switch (atrule === 99 && (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .charat */ .uO)(characters, 3) === 110 ? 100 : atrule) {
-									// d l m s
-									case 100: case 108: case 109: case 115:
-										parse(value, reference, reference, rule && (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .append */ .R3)(ruleset(value, reference, reference, 0, 0, rules, points, type, rules, props = [], length), children), rules, children, length, points, rule ? props : children)
-										break
-									default:
-										parse(characters, reference, reference, reference, [''], children, 0, points, children)
-								}
-				}
-
-				index = offset = property = 0, variable = ampersand = 1, type = characters = '', length = pseudo
-				break
-			// :
-			case 58:
-				length = 1 + (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .strlen */ .to)(characters), property = previous
-			default:
-				if (variable < 1)
-					if (character == 123)
-						--variable
-					else if (character == 125 && variable++ == 0 && (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .prev */ .mp)() == 125)
-						continue
-
-				switch (characters += (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .from */ .Dp)(character), character * variable) {
-					// &
-					case 38:
-						ampersand = offset > 0 ? 1 : (characters += '\f', -1)
-						break
-					// ,
-					case 44:
-						points[index++] = ((0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .strlen */ .to)(characters) - 1) * ampersand, ampersand = 1
-						break
-					// @
-					case 64:
-						// -
-						if ((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .peek */ .fj)() === 45)
-							characters += (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .delimit */ .iF)((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .next */ .lp)())
-
-						atrule = (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .peek */ .fj)(), offset = length = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .strlen */ .to)(type = characters += (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .identifier */ .QU)((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .caret */ .Ud)())), character++
-						break
-					// -
-					case 45:
-						if (previous === 45 && (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .strlen */ .to)(characters) == 2)
-							variable = 0
-				}
-		}
-
-	return rulesets
-}
-
-/**
- * @param {string} value
- * @param {object} root
- * @param {object?} parent
- * @param {number} index
- * @param {number} offset
- * @param {string[]} rules
- * @param {number[]} points
- * @param {string} type
- * @param {string[]} props
- * @param {string[]} children
- * @param {number} length
- * @return {object}
- */
-function ruleset (value, root, parent, index, offset, rules, points, type, props, children, length) {
-	var post = offset - 1
-	var rule = offset === 0 ? rules : ['']
-	var size = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .sizeof */ .Ei)(rule)
-
-	for (var i = 0, j = 0, k = 0; i < index; ++i)
-		for (var x = 0, y = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .substr */ .tb)(value, post + 1, post = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .abs */ .Wn)(j = points[i])), z = value; x < size; ++x)
-			if (z = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .trim */ .fy)(j > 0 ? rule[x] + ' ' + y : (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .replace */ .gx)(y, /&\f/g, rule[x])))
-				props[k++] = z
-
-	return (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .node */ .dH)(value, root, parent, offset === 0 ? _Enum_js__WEBPACK_IMPORTED_MODULE_2__/* .RULESET */ .Fr : type, props, children, length)
-}
-
-/**
- * @param {number} value
- * @param {object} root
- * @param {object?} parent
- * @return {object}
- */
-function comment (value, root, parent) {
-	return (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .node */ .dH)(value, root, parent, _Enum_js__WEBPACK_IMPORTED_MODULE_2__/* .COMMENT */ .Ab, (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .from */ .Dp)((0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .char */ .Tb)()), (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .substr */ .tb)(value, 2, -2), 0)
-}
-
-/**
- * @param {string} value
- * @param {object} root
- * @param {object?} parent
- * @param {number} length
- * @return {object}
- */
-function declaration (value, root, parent, length) {
-	return (0,_Tokenizer_js__WEBPACK_IMPORTED_MODULE_0__/* .node */ .dH)(value, root, parent, _Enum_js__WEBPACK_IMPORTED_MODULE_2__/* .DECLARATION */ .h5, (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .substr */ .tb)(value, 0, length), (0,_Utility_js__WEBPACK_IMPORTED_MODULE_1__/* .substr */ .tb)(value, length + 1, -1), length)
-}
-
-
-/***/ }),
-
-/***/ 20211:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "P": () => (/* binding */ stringify),
-/* harmony export */   "q": () => (/* binding */ serialize)
-/* harmony export */ });
-/* harmony import */ var _Enum_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(27563);
-/* harmony import */ var _Utility_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26686);
-
-
-
-/**
- * @param {object[]} children
- * @param {function} callback
- * @return {string}
- */
-function serialize (children, callback) {
-	var output = ''
-	var length = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__/* .sizeof */ .Ei)(children)
-
-	for (var i = 0; i < length; i++)
-		output += callback(children[i], i, children, callback) || ''
-
-	return output
-}
-
-/**
- * @param {object} element
- * @param {number} index
- * @param {object[]} children
- * @param {function} callback
- * @return {string}
- */
-function stringify (element, index, children, callback) {
-	switch (element.type) {
-		case _Enum_js__WEBPACK_IMPORTED_MODULE_1__/* .LAYER */ .JM: if (element.children.length) break
-		case _Enum_js__WEBPACK_IMPORTED_MODULE_1__/* .IMPORT */ .K$: case _Enum_js__WEBPACK_IMPORTED_MODULE_1__/* .DECLARATION */ .h5: return element.return = element.return || element.value
-		case _Enum_js__WEBPACK_IMPORTED_MODULE_1__/* .COMMENT */ .Ab: return ''
-		case _Enum_js__WEBPACK_IMPORTED_MODULE_1__/* .KEYFRAMES */ .lK: return element.return = element.value + '{' + serialize(element.children, callback) + '}'
-		case _Enum_js__WEBPACK_IMPORTED_MODULE_1__/* .RULESET */ .Fr: element.value = element.props.join(',')
-	}
-
-	return (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__/* .strlen */ .to)(children = serialize(element.children, callback)) ? element.return = element.value + '{' + children + '}' : ''
-}
-
-
-/***/ }),
-
-/***/ 46411:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "FK": () => (/* binding */ position),
-/* harmony export */   "JG": () => (/* binding */ copy),
-/* harmony export */   "QU": () => (/* binding */ identifier),
-/* harmony export */   "Qb": () => (/* binding */ whitespace),
-/* harmony export */   "Tb": () => (/* binding */ char),
-/* harmony export */   "Ud": () => (/* binding */ caret),
-/* harmony export */   "cE": () => (/* binding */ dealloc),
-/* harmony export */   "dH": () => (/* binding */ node),
-/* harmony export */   "fj": () => (/* binding */ peek),
-/* harmony export */   "iF": () => (/* binding */ delimit),
-/* harmony export */   "kq": () => (/* binding */ escaping),
-/* harmony export */   "lp": () => (/* binding */ next),
-/* harmony export */   "mp": () => (/* binding */ prev),
-/* harmony export */   "q6": () => (/* binding */ commenter),
-/* harmony export */   "r": () => (/* binding */ token),
-/* harmony export */   "tP": () => (/* binding */ slice),
-/* harmony export */   "un": () => (/* binding */ alloc)
-/* harmony export */ });
-/* unused harmony exports line, column, length, character, characters, tokenize, tokenizer, delimiter */
-/* harmony import */ var _Utility_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(26686);
-
-
-var line = 1
-var column = 1
-var length = 0
-var position = 0
-var character = 0
-var characters = ''
-
-/**
- * @param {string} value
- * @param {object | null} root
- * @param {object | null} parent
- * @param {string} type
- * @param {string[] | string} props
- * @param {object[] | string} children
- * @param {number} length
- */
-function node (value, root, parent, type, props, children, length) {
-	return {value: value, root: root, parent: parent, type: type, props: props, children: children, line: line, column: column, length: length, return: ''}
-}
-
-/**
- * @param {object} root
- * @param {object} props
- * @return {object}
- */
-function copy (root, props) {
-	return (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__/* .assign */ .f0)(node('', null, null, '', null, null, 0), root, {length: -root.length}, props)
-}
-
-/**
- * @return {number}
- */
-function char () {
-	return character
-}
-
-/**
- * @return {number}
- */
-function prev () {
-	character = position > 0 ? (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__/* .charat */ .uO)(characters, --position) : 0
-
-	if (column--, character === 10)
-		column = 1, line--
-
-	return character
-}
-
-/**
- * @return {number}
- */
-function next () {
-	character = position < length ? (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__/* .charat */ .uO)(characters, position++) : 0
-
-	if (column++, character === 10)
-		column = 1, line++
-
-	return character
-}
-
-/**
- * @return {number}
- */
-function peek () {
-	return (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__/* .charat */ .uO)(characters, position)
-}
-
-/**
- * @return {number}
- */
-function caret () {
-	return position
-}
-
-/**
- * @param {number} begin
- * @param {number} end
- * @return {string}
- */
-function slice (begin, end) {
-	return (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__/* .substr */ .tb)(characters, begin, end)
-}
-
-/**
- * @param {number} type
- * @return {number}
- */
-function token (type) {
-	switch (type) {
-		// \0 \t \n \r \s whitespace token
-		case 0: case 9: case 10: case 13: case 32:
-			return 5
-		// ! + , / > @ ~ isolate token
-		case 33: case 43: case 44: case 47: case 62: case 64: case 126:
-		// ; { } breakpoint token
-		case 59: case 123: case 125:
-			return 4
-		// : accompanied token
-		case 58:
-			return 3
-		// " ' ( [ opening delimit token
-		case 34: case 39: case 40: case 91:
-			return 2
-		// ) ] closing delimit token
-		case 41: case 93:
-			return 1
-	}
-
-	return 0
-}
-
-/**
- * @param {string} value
- * @return {any[]}
- */
-function alloc (value) {
-	return line = column = 1, length = (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__/* .strlen */ .to)(characters = value), position = 0, []
-}
-
-/**
- * @param {any} value
- * @return {any}
- */
-function dealloc (value) {
-	return characters = '', value
-}
-
-/**
- * @param {number} type
- * @return {string}
- */
-function delimit (type) {
-	return (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__/* .trim */ .fy)(slice(position - 1, delimiter(type === 91 ? type + 2 : type === 40 ? type + 1 : type)))
-}
-
-/**
- * @param {string} value
- * @return {string[]}
- */
-function tokenize (value) {
-	return dealloc(tokenizer(alloc(value)))
-}
-
-/**
- * @param {number} type
- * @return {string}
- */
-function whitespace (type) {
-	while (character = peek())
-		if (character < 33)
-			next()
-		else
-			break
-
-	return token(type) > 2 || token(character) > 3 ? '' : ' '
-}
-
-/**
- * @param {string[]} children
- * @return {string[]}
- */
-function tokenizer (children) {
-	while (next())
-		switch (token(character)) {
-			case 0: append(identifier(position - 1), children)
-				break
-			case 2: append(delimit(character), children)
-				break
-			default: append(from(character), children)
-		}
-
-	return children
-}
-
-/**
- * @param {number} index
- * @param {number} count
- * @return {string}
- */
-function escaping (index, count) {
-	while (--count && next())
-		// not 0-9 A-F a-f
-		if (character < 48 || character > 102 || (character > 57 && character < 65) || (character > 70 && character < 97))
-			break
-
-	return slice(index, caret() + (count < 6 && peek() == 32 && next() == 32))
-}
-
-/**
- * @param {number} type
- * @return {number}
- */
-function delimiter (type) {
-	while (next())
-		switch (character) {
-			// ] ) " '
-			case type:
-				return position
-			// " '
-			case 34: case 39:
-				if (type !== 34 && type !== 39)
-					delimiter(character)
-				break
-			// (
-			case 40:
-				if (type === 41)
-					delimiter(type)
-				break
-			// \
-			case 92:
-				next()
-				break
-		}
-
-	return position
-}
-
-/**
- * @param {number} type
- * @param {number} index
- * @return {number}
- */
-function commenter (type, index) {
-	while (next())
-		// //
-		if (type + character === 47 + 10)
-			break
-		// /*
-		else if (type + character === 42 + 42 && peek() === 47)
-			break
-
-	return '/*' + slice(index, position - 1) + '*' + (0,_Utility_js__WEBPACK_IMPORTED_MODULE_0__/* .from */ .Dp)(type === 47 ? type : next())
-}
-
-/**
- * @param {number} index
- * @return {string}
- */
-function identifier (index) {
-	while (!token(peek()))
-		next()
-
-	return slice(index, position)
-}
-
-
-/***/ }),
-
-/***/ 26686:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "$e": () => (/* binding */ combine),
-/* harmony export */   "Cw": () => (/* binding */ indexof),
-/* harmony export */   "Dp": () => (/* binding */ from),
-/* harmony export */   "EQ": () => (/* binding */ match),
-/* harmony export */   "Ei": () => (/* binding */ sizeof),
-/* harmony export */   "R3": () => (/* binding */ append),
-/* harmony export */   "Wn": () => (/* binding */ abs),
-/* harmony export */   "f0": () => (/* binding */ assign),
-/* harmony export */   "fy": () => (/* binding */ trim),
-/* harmony export */   "gx": () => (/* binding */ replace),
-/* harmony export */   "tb": () => (/* binding */ substr),
-/* harmony export */   "to": () => (/* binding */ strlen),
-/* harmony export */   "uO": () => (/* binding */ charat),
-/* harmony export */   "vp": () => (/* binding */ hash)
-/* harmony export */ });
-/**
- * @param {number}
- * @return {number}
- */
-var abs = Math.abs
-
-/**
- * @param {number}
- * @return {string}
- */
-var from = String.fromCharCode
-
-/**
- * @param {object}
- * @return {object}
- */
-var assign = Object.assign
-
-/**
- * @param {string} value
- * @param {number} length
- * @return {number}
- */
-function hash (value, length) {
-	return charat(value, 0) ^ 45 ? (((((((length << 2) ^ charat(value, 0)) << 2) ^ charat(value, 1)) << 2) ^ charat(value, 2)) << 2) ^ charat(value, 3) : 0
-}
-
-/**
- * @param {string} value
- * @return {string}
- */
-function trim (value) {
-	return value.trim()
-}
-
-/**
- * @param {string} value
- * @param {RegExp} pattern
- * @return {string?}
- */
-function match (value, pattern) {
-	return (value = pattern.exec(value)) ? value[0] : value
-}
-
-/**
- * @param {string} value
- * @param {(string|RegExp)} pattern
- * @param {string} replacement
- * @return {string}
- */
-function replace (value, pattern, replacement) {
-	return value.replace(pattern, replacement)
-}
-
-/**
- * @param {string} value
- * @param {string} search
- * @return {number}
- */
-function indexof (value, search) {
-	return value.indexOf(search)
-}
-
-/**
- * @param {string} value
- * @param {number} index
- * @return {number}
- */
-function charat (value, index) {
-	return value.charCodeAt(index) | 0
-}
-
-/**
- * @param {string} value
- * @param {number} begin
- * @param {number} end
- * @return {string}
- */
-function substr (value, begin, end) {
-	return value.slice(begin, end)
-}
-
-/**
- * @param {string} value
- * @return {number}
- */
-function strlen (value) {
-	return value.length
-}
-
-/**
- * @param {any[]} value
- * @return {number}
- */
-function sizeof (value) {
-	return value.length
-}
-
-/**
- * @param {any} value
- * @param {any[]} array
- * @return {any}
- */
-function append (value, array) {
-	return array.push(value), value
-}
-
-/**
- * @param {string[]} array
- * @param {function} callback
- * @return {string}
- */
-function combine (array, callback) {
-	return array.map(callback).join('')
-}
-
-
-/***/ }),
-
-/***/ 99477:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-__webpack_require__.r(__webpack_exports__);
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "ACESFilmicToneMapping": () => (/* binding */ ACESFilmicToneMapping),
-/* harmony export */   "AddEquation": () => (/* binding */ AddEquation),
-/* harmony export */   "AddOperation": () => (/* binding */ AddOperation),
-/* harmony export */   "AdditiveAnimationBlendMode": () => (/* binding */ AdditiveAnimationBlendMode),
-/* harmony export */   "AdditiveBlending": () => (/* binding */ AdditiveBlending),
-/* harmony export */   "AlphaFormat": () => (/* binding */ AlphaFormat),
-/* harmony export */   "AlwaysDepth": () => (/* binding */ AlwaysDepth),
-/* harmony export */   "AlwaysStencilFunc": () => (/* binding */ AlwaysStencilFunc),
-/* harmony export */   "AmbientLight": () => (/* binding */ AmbientLight),
-/* harmony export */   "AmbientLightProbe": () => (/* binding */ AmbientLightProbe),
-/* harmony export */   "AnimationAction": () => (/* binding */ AnimationAction),
-/* harmony export */   "AnimationClip": () => (/* binding */ AnimationClip),
-/* harmony export */   "AnimationLoader": () => (/* binding */ AnimationLoader),
-/* harmony export */   "AnimationMixer": () => (/* binding */ AnimationMixer),
-/* harmony export */   "AnimationObjectGroup": () => (/* binding */ AnimationObjectGroup),
-/* harmony export */   "AnimationUtils": () => (/* binding */ AnimationUtils),
-/* harmony export */   "ArcCurve": () => (/* binding */ ArcCurve),
-/* harmony export */   "ArrayCamera": () => (/* binding */ ArrayCamera),
-/* harmony export */   "ArrowHelper": () => (/* binding */ ArrowHelper),
-/* harmony export */   "Audio": () => (/* binding */ Audio),
-/* harmony export */   "AudioAnalyser": () => (/* binding */ AudioAnalyser),
-/* harmony export */   "AudioContext": () => (/* binding */ AudioContext),
-/* harmony export */   "AudioListener": () => (/* binding */ AudioListener),
-/* harmony export */   "AudioLoader": () => (/* binding */ AudioLoader),
-/* harmony export */   "AxesHelper": () => (/* binding */ AxesHelper),
-/* harmony export */   "BackSide": () => (/* binding */ BackSide),
-/* harmony export */   "BasicDepthPacking": () => (/* binding */ BasicDepthPacking),
-/* harmony export */   "BasicShadowMap": () => (/* binding */ BasicShadowMap),
-/* harmony export */   "Bone": () => (/* binding */ Bone),
-/* harmony export */   "BooleanKeyframeTrack": () => (/* binding */ BooleanKeyframeTrack),
-/* harmony export */   "Box2": () => (/* binding */ Box2),
-/* harmony export */   "Box3": () => (/* binding */ Box3),
-/* harmony export */   "Box3Helper": () => (/* binding */ Box3Helper),
-/* harmony export */   "BoxBufferGeometry": () => (/* binding */ BoxBufferGeometry),
-/* harmony export */   "BoxGeometry": () => (/* binding */ BoxGeometry),
-/* harmony export */   "BoxHelper": () => (/* binding */ BoxHelper),
-/* harmony export */   "BufferAttribute": () => (/* binding */ BufferAttribute),
-/* harmony export */   "BufferGeometry": () => (/* binding */ BufferGeometry),
-/* harmony export */   "BufferGeometryLoader": () => (/* binding */ BufferGeometryLoader),
-/* harmony export */   "ByteType": () => (/* binding */ ByteType),
-/* harmony export */   "Cache": () => (/* binding */ Cache),
-/* harmony export */   "Camera": () => (/* binding */ Camera),
-/* harmony export */   "CameraHelper": () => (/* binding */ CameraHelper),
-/* harmony export */   "CanvasTexture": () => (/* binding */ CanvasTexture),
-/* harmony export */   "CapsuleBufferGeometry": () => (/* binding */ CapsuleBufferGeometry),
-/* harmony export */   "CapsuleGeometry": () => (/* binding */ CapsuleGeometry),
-/* harmony export */   "CatmullRomCurve3": () => (/* binding */ CatmullRomCurve3),
-/* harmony export */   "CineonToneMapping": () => (/* binding */ CineonToneMapping),
-/* harmony export */   "CircleBufferGeometry": () => (/* binding */ CircleBufferGeometry),
-/* harmony export */   "CircleGeometry": () => (/* binding */ CircleGeometry),
-/* harmony export */   "ClampToEdgeWrapping": () => (/* binding */ ClampToEdgeWrapping),
-/* harmony export */   "Clock": () => (/* binding */ Clock),
-/* harmony export */   "Color": () => (/* binding */ Color),
-/* harmony export */   "ColorKeyframeTrack": () => (/* binding */ ColorKeyframeTrack),
-/* harmony export */   "ColorManagement": () => (/* binding */ ColorManagement),
-/* harmony export */   "CompressedArrayTexture": () => (/* binding */ CompressedArrayTexture),
-/* harmony export */   "CompressedTexture": () => (/* binding */ CompressedTexture),
-/* harmony export */   "CompressedTextureLoader": () => (/* binding */ CompressedTextureLoader),
-/* harmony export */   "ConeBufferGeometry": () => (/* binding */ ConeBufferGeometry),
-/* harmony export */   "ConeGeometry": () => (/* binding */ ConeGeometry),
-/* harmony export */   "CubeCamera": () => (/* binding */ CubeCamera),
-/* harmony export */   "CubeReflectionMapping": () => (/* binding */ CubeReflectionMapping),
-/* harmony export */   "CubeRefractionMapping": () => (/* binding */ CubeRefractionMapping),
-/* harmony export */   "CubeTexture": () => (/* binding */ CubeTexture),
-/* harmony export */   "CubeTextureLoader": () => (/* binding */ CubeTextureLoader),
-/* harmony export */   "CubeUVReflectionMapping": () => (/* binding */ CubeUVReflectionMapping),
-/* harmony export */   "CubicBezierCurve": () => (/* binding */ CubicBezierCurve),
-/* harmony export */   "CubicBezierCurve3": () => (/* binding */ CubicBezierCurve3),
-/* harmony export */   "CubicInterpolant": () => (/* binding */ CubicInterpolant),
-/* harmony export */   "CullFaceBack": () => (/* binding */ CullFaceBack),
-/* harmony export */   "CullFaceFront": () => (/* binding */ CullFaceFront),
-/* harmony export */   "CullFaceFrontBack": () => (/* binding */ CullFaceFrontBack),
-/* harmony export */   "CullFaceNone": () => (/* binding */ CullFaceNone),
-/* harmony export */   "Curve": () => (/* binding */ Curve),
-/* harmony export */   "CurvePath": () => (/* binding */ CurvePath),
-/* harmony export */   "CustomBlending": () => (/* binding */ CustomBlending),
-/* harmony export */   "CustomToneMapping": () => (/* binding */ CustomToneMapping),
-/* harmony export */   "CylinderBufferGeometry": () => (/* binding */ CylinderBufferGeometry),
-/* harmony export */   "CylinderGeometry": () => (/* binding */ CylinderGeometry),
-/* harmony export */   "Cylindrical": () => (/* binding */ Cylindrical),
-/* harmony export */   "Data3DTexture": () => (/* binding */ Data3DTexture),
-/* harmony export */   "DataArrayTexture": () => (/* binding */ DataArrayTexture),
-/* harmony export */   "DataTexture": () => (/* binding */ DataTexture),
-/* harmony export */   "DataTextureLoader": () => (/* binding */ DataTextureLoader),
-/* harmony export */   "DataUtils": () => (/* binding */ DataUtils),
-/* harmony export */   "DecrementStencilOp": () => (/* binding */ DecrementStencilOp),
-/* harmony export */   "DecrementWrapStencilOp": () => (/* binding */ DecrementWrapStencilOp),
-/* harmony export */   "DefaultLoadingManager": () => (/* binding */ DefaultLoadingManager),
-/* harmony export */   "DepthFormat": () => (/* binding */ DepthFormat),
-/* harmony export */   "DepthStencilFormat": () => (/* binding */ DepthStencilFormat),
-/* harmony export */   "DepthTexture": () => (/* binding */ DepthTexture),
-/* harmony export */   "DirectionalLight": () => (/* binding */ DirectionalLight),
-/* harmony export */   "DirectionalLightHelper": () => (/* binding */ DirectionalLightHelper),
-/* harmony export */   "DiscreteInterpolant": () => (/* binding */ DiscreteInterpolant),
-/* harmony export */   "DisplayP3ColorSpace": () => (/* binding */ DisplayP3ColorSpace),
-/* harmony export */   "DodecahedronBufferGeometry": () => (/* binding */ DodecahedronBufferGeometry),
-/* harmony export */   "DodecahedronGeometry": () => (/* binding */ DodecahedronGeometry),
-/* harmony export */   "DoubleSide": () => (/* binding */ DoubleSide),
-/* harmony export */   "DstAlphaFactor": () => (/* binding */ DstAlphaFactor),
-/* harmony export */   "DstColorFactor": () => (/* binding */ DstColorFactor),
-/* harmony export */   "DynamicCopyUsage": () => (/* binding */ DynamicCopyUsage),
-/* harmony export */   "DynamicDrawUsage": () => (/* binding */ DynamicDrawUsage),
-/* harmony export */   "DynamicReadUsage": () => (/* binding */ DynamicReadUsage),
-/* harmony export */   "EdgesGeometry": () => (/* binding */ EdgesGeometry),
-/* harmony export */   "EllipseCurve": () => (/* binding */ EllipseCurve),
-/* harmony export */   "EqualDepth": () => (/* binding */ EqualDepth),
-/* harmony export */   "EqualStencilFunc": () => (/* binding */ EqualStencilFunc),
-/* harmony export */   "EquirectangularReflectionMapping": () => (/* binding */ EquirectangularReflectionMapping),
-/* harmony export */   "EquirectangularRefractionMapping": () => (/* binding */ EquirectangularRefractionMapping),
-/* harmony export */   "Euler": () => (/* binding */ Euler),
-/* harmony export */   "EventDispatcher": () => (/* binding */ EventDispatcher),
-/* harmony export */   "ExtrudeBufferGeometry": () => (/* binding */ ExtrudeBufferGeometry),
-/* harmony export */   "ExtrudeGeometry": () => (/* binding */ ExtrudeGeometry),
-/* harmony export */   "FileLoader": () => (/* binding */ FileLoader),
-/* harmony export */   "Float16BufferAttribute": () => (/* binding */ Float16BufferAttribute),
-/* harmony export */   "Float32BufferAttribute": () => (/* binding */ Float32BufferAttribute),
-/* harmony export */   "Float64BufferAttribute": () => (/* binding */ Float64BufferAttribute),
-/* harmony export */   "FloatType": () => (/* binding */ FloatType),
-/* harmony export */   "Fog": () => (/* binding */ Fog),
-/* harmony export */   "FogExp2": () => (/* binding */ FogExp2),
-/* harmony export */   "FramebufferTexture": () => (/* binding */ FramebufferTexture),
-/* harmony export */   "FrontSide": () => (/* binding */ FrontSide),
-/* harmony export */   "Frustum": () => (/* binding */ Frustum),
-/* harmony export */   "GLBufferAttribute": () => (/* binding */ GLBufferAttribute),
-/* harmony export */   "GLSL1": () => (/* binding */ GLSL1),
-/* harmony export */   "GLSL3": () => (/* binding */ GLSL3),
-/* harmony export */   "GreaterDepth": () => (/* binding */ GreaterDepth),
-/* harmony export */   "GreaterEqualDepth": () => (/* binding */ GreaterEqualDepth),
-/* harmony export */   "GreaterEqualStencilFunc": () => (/* binding */ GreaterEqualStencilFunc),
-/* harmony export */   "GreaterStencilFunc": () => (/* binding */ GreaterStencilFunc),
-/* harmony export */   "GridHelper": () => (/* binding */ GridHelper),
-/* harmony export */   "Group": () => (/* binding */ Group),
-/* harmony export */   "HalfFloatType": () => (/* binding */ HalfFloatType),
-/* harmony export */   "HemisphereLight": () => (/* binding */ HemisphereLight),
-/* harmony export */   "HemisphereLightHelper": () => (/* binding */ HemisphereLightHelper),
-/* harmony export */   "HemisphereLightProbe": () => (/* binding */ HemisphereLightProbe),
-/* harmony export */   "IcosahedronBufferGeometry": () => (/* binding */ IcosahedronBufferGeometry),
-/* harmony export */   "IcosahedronGeometry": () => (/* binding */ IcosahedronGeometry),
-/* harmony export */   "ImageBitmapLoader": () => (/* binding */ ImageBitmapLoader),
-/* harmony export */   "ImageLoader": () => (/* binding */ ImageLoader),
-/* harmony export */   "ImageUtils": () => (/* binding */ ImageUtils),
-/* harmony export */   "IncrementStencilOp": () => (/* binding */ IncrementStencilOp),
-/* harmony export */   "IncrementWrapStencilOp": () => (/* binding */ IncrementWrapStencilOp),
-/* harmony export */   "InstancedBufferAttribute": () => (/* binding */ InstancedBufferAttribute),
-/* harmony export */   "InstancedBufferGeometry": () => (/* binding */ InstancedBufferGeometry),
-/* harmony export */   "InstancedInterleavedBuffer": () => (/* binding */ InstancedInterleavedBuffer),
-/* harmony export */   "InstancedMesh": () => (/* binding */ InstancedMesh),
-/* harmony export */   "Int16BufferAttribute": () => (/* binding */ Int16BufferAttribute),
-/* harmony export */   "Int32BufferAttribute": () => (/* binding */ Int32BufferAttribute),
-/* harmony export */   "Int8BufferAttribute": () => (/* binding */ Int8BufferAttribute),
-/* harmony export */   "IntType": () => (/* binding */ IntType),
-/* harmony export */   "InterleavedBuffer": () => (/* binding */ InterleavedBuffer),
-/* harmony export */   "InterleavedBufferAttribute": () => (/* binding */ InterleavedBufferAttribute),
-/* harmony export */   "Interpolant": () => (/* binding */ Interpolant),
-/* harmony export */   "InterpolateDiscrete": () => (/* binding */ InterpolateDiscrete),
-/* harmony export */   "InterpolateLinear": () => (/* binding */ InterpolateLinear),
-/* harmony export */   "InterpolateSmooth": () => (/* binding */ InterpolateSmooth),
-/* harmony export */   "InvertStencilOp": () => (/* binding */ InvertStencilOp),
-/* harmony export */   "KeepStencilOp": () => (/* binding */ KeepStencilOp),
-/* harmony export */   "KeyframeTrack": () => (/* binding */ KeyframeTrack),
-/* harmony export */   "LOD": () => (/* binding */ LOD),
-/* harmony export */   "LatheBufferGeometry": () => (/* binding */ LatheBufferGeometry),
-/* harmony export */   "LatheGeometry": () => (/* binding */ LatheGeometry),
-/* harmony export */   "Layers": () => (/* binding */ Layers),
-/* harmony export */   "LessDepth": () => (/* binding */ LessDepth),
-/* harmony export */   "LessEqualDepth": () => (/* binding */ LessEqualDepth),
-/* harmony export */   "LessEqualStencilFunc": () => (/* binding */ LessEqualStencilFunc),
-/* harmony export */   "LessStencilFunc": () => (/* binding */ LessStencilFunc),
-/* harmony export */   "Light": () => (/* binding */ Light),
-/* harmony export */   "LightProbe": () => (/* binding */ LightProbe),
-/* harmony export */   "Line": () => (/* binding */ Line),
-/* harmony export */   "Line3": () => (/* binding */ Line3),
-/* harmony export */   "LineBasicMaterial": () => (/* binding */ LineBasicMaterial),
-/* harmony export */   "LineCurve": () => (/* binding */ LineCurve),
-/* harmony export */   "LineCurve3": () => (/* binding */ LineCurve3),
-/* harmony export */   "LineDashedMaterial": () => (/* binding */ LineDashedMaterial),
-/* harmony export */   "LineLoop": () => (/* binding */ LineLoop),
-/* harmony export */   "LineSegments": () => (/* binding */ LineSegments),
-/* harmony export */   "LinearEncoding": () => (/* binding */ LinearEncoding),
-/* harmony export */   "LinearFilter": () => (/* binding */ LinearFilter),
-/* harmony export */   "LinearInterpolant": () => (/* binding */ LinearInterpolant),
-/* harmony export */   "LinearMipMapLinearFilter": () => (/* binding */ LinearMipMapLinearFilter),
-/* harmony export */   "LinearMipMapNearestFilter": () => (/* binding */ LinearMipMapNearestFilter),
-/* harmony export */   "LinearMipmapLinearFilter": () => (/* binding */ LinearMipmapLinearFilter),
-/* harmony export */   "LinearMipmapNearestFilter": () => (/* binding */ LinearMipmapNearestFilter),
-/* harmony export */   "LinearSRGBColorSpace": () => (/* binding */ LinearSRGBColorSpace),
-/* harmony export */   "LinearToneMapping": () => (/* binding */ LinearToneMapping),
-/* harmony export */   "Loader": () => (/* binding */ Loader),
-/* harmony export */   "LoaderUtils": () => (/* binding */ LoaderUtils),
-/* harmony export */   "LoadingManager": () => (/* binding */ LoadingManager),
-/* harmony export */   "LoopOnce": () => (/* binding */ LoopOnce),
-/* harmony export */   "LoopPingPong": () => (/* binding */ LoopPingPong),
-/* harmony export */   "LoopRepeat": () => (/* binding */ LoopRepeat),
-/* harmony export */   "LuminanceAlphaFormat": () => (/* binding */ LuminanceAlphaFormat),
-/* harmony export */   "LuminanceFormat": () => (/* binding */ LuminanceFormat),
-/* harmony export */   "MOUSE": () => (/* binding */ MOUSE),
-/* harmony export */   "Material": () => (/* binding */ Material),
-/* harmony export */   "MaterialLoader": () => (/* binding */ MaterialLoader),
-/* harmony export */   "MathUtils": () => (/* binding */ MathUtils),
-/* harmony export */   "Matrix3": () => (/* binding */ Matrix3),
-/* harmony export */   "Matrix4": () => (/* binding */ Matrix4),
-/* harmony export */   "MaxEquation": () => (/* binding */ MaxEquation),
-/* harmony export */   "Mesh": () => (/* binding */ Mesh),
-/* harmony export */   "MeshBasicMaterial": () => (/* binding */ MeshBasicMaterial),
-/* harmony export */   "MeshDepthMaterial": () => (/* binding */ MeshDepthMaterial),
-/* harmony export */   "MeshDistanceMaterial": () => (/* binding */ MeshDistanceMaterial),
-/* harmony export */   "MeshLambertMaterial": () => (/* binding */ MeshLambertMaterial),
-/* harmony export */   "MeshMatcapMaterial": () => (/* binding */ MeshMatcapMaterial),
-/* harmony export */   "MeshNormalMaterial": () => (/* binding */ MeshNormalMaterial),
-/* harmony export */   "MeshPhongMaterial": () => (/* binding */ MeshPhongMaterial),
-/* harmony export */   "MeshPhysicalMaterial": () => (/* binding */ MeshPhysicalMaterial),
-/* harmony export */   "MeshStandardMaterial": () => (/* binding */ MeshStandardMaterial),
-/* harmony export */   "MeshToonMaterial": () => (/* binding */ MeshToonMaterial),
-/* harmony export */   "MinEquation": () => (/* binding */ MinEquation),
-/* harmony export */   "MirroredRepeatWrapping": () => (/* binding */ MirroredRepeatWrapping),
-/* harmony export */   "MixOperation": () => (/* binding */ MixOperation),
-/* harmony export */   "MultiplyBlending": () => (/* binding */ MultiplyBlending),
-/* harmony export */   "MultiplyOperation": () => (/* binding */ MultiplyOperation),
-/* harmony export */   "NearestFilter": () => (/* binding */ NearestFilter),
-/* harmony export */   "NearestMipMapLinearFilter": () => (/* binding */ NearestMipMapLinearFilter),
-/* harmony export */   "NearestMipMapNearestFilter": () => (/* binding */ NearestMipMapNearestFilter),
-/* harmony export */   "NearestMipmapLinearFilter": () => (/* binding */ NearestMipmapLinearFilter),
-/* harmony export */   "NearestMipmapNearestFilter": () => (/* binding */ NearestMipmapNearestFilter),
-/* harmony export */   "NeverDepth": () => (/* binding */ NeverDepth),
-/* harmony export */   "NeverStencilFunc": () => (/* binding */ NeverStencilFunc),
-/* harmony export */   "NoBlending": () => (/* binding */ NoBlending),
-/* harmony export */   "NoColorSpace": () => (/* binding */ NoColorSpace),
-/* harmony export */   "NoToneMapping": () => (/* binding */ NoToneMapping),
-/* harmony export */   "NormalAnimationBlendMode": () => (/* binding */ NormalAnimationBlendMode),
-/* harmony export */   "NormalBlending": () => (/* binding */ NormalBlending),
-/* harmony export */   "NotEqualDepth": () => (/* binding */ NotEqualDepth),
-/* harmony export */   "NotEqualStencilFunc": () => (/* binding */ NotEqualStencilFunc),
-/* harmony export */   "NumberKeyframeTrack": () => (/* binding */ NumberKeyframeTrack),
-/* harmony export */   "Object3D": () => (/* binding */ Object3D),
-/* harmony export */   "ObjectLoader": () => (/* binding */ ObjectLoader),
-/* harmony export */   "ObjectSpaceNormalMap": () => (/* binding */ ObjectSpaceNormalMap),
-/* harmony export */   "OctahedronBufferGeometry": () => (/* binding */ OctahedronBufferGeometry),
-/* harmony export */   "OctahedronGeometry": () => (/* binding */ OctahedronGeometry),
-/* harmony export */   "OneFactor": () => (/* binding */ OneFactor),
-/* harmony export */   "OneMinusDstAlphaFactor": () => (/* binding */ OneMinusDstAlphaFactor),
-/* harmony export */   "OneMinusDstColorFactor": () => (/* binding */ OneMinusDstColorFactor),
-/* harmony export */   "OneMinusSrcAlphaFactor": () => (/* binding */ OneMinusSrcAlphaFactor),
-/* harmony export */   "OneMinusSrcColorFactor": () => (/* binding */ OneMinusSrcColorFactor),
-/* harmony export */   "OrthographicCamera": () => (/* binding */ OrthographicCamera),
-/* harmony export */   "PCFShadowMap": () => (/* binding */ PCFShadowMap),
-/* harmony export */   "PCFSoftShadowMap": () => (/* binding */ PCFSoftShadowMap),
-/* harmony export */   "PMREMGenerator": () => (/* binding */ PMREMGenerator),
-/* harmony export */   "Path": () => (/* binding */ Path),
-/* harmony export */   "PerspectiveCamera": () => (/* binding */ PerspectiveCamera),
-/* harmony export */   "Plane": () => (/* binding */ Plane),
-/* harmony export */   "PlaneBufferGeometry": () => (/* binding */ PlaneBufferGeometry),
-/* harmony export */   "PlaneGeometry": () => (/* binding */ PlaneGeometry),
-/* harmony export */   "PlaneHelper": () => (/* binding */ PlaneHelper),
-/* harmony export */   "PointLight": () => (/* binding */ PointLight),
-/* harmony export */   "PointLightHelper": () => (/* binding */ PointLightHelper),
-/* harmony export */   "Points": () => (/* binding */ Points),
-/* harmony export */   "PointsMaterial": () => (/* binding */ PointsMaterial),
-/* harmony export */   "PolarGridHelper": () => (/* binding */ PolarGridHelper),
-/* harmony export */   "PolyhedronBufferGeometry": () => (/* binding */ PolyhedronBufferGeometry),
-/* harmony export */   "PolyhedronGeometry": () => (/* binding */ PolyhedronGeometry),
-/* harmony export */   "PositionalAudio": () => (/* binding */ PositionalAudio),
-/* harmony export */   "PropertyBinding": () => (/* binding */ PropertyBinding),
-/* harmony export */   "PropertyMixer": () => (/* binding */ PropertyMixer),
-/* harmony export */   "QuadraticBezierCurve": () => (/* binding */ QuadraticBezierCurve),
-/* harmony export */   "QuadraticBezierCurve3": () => (/* binding */ QuadraticBezierCurve3),
-/* harmony export */   "Quaternion": () => (/* binding */ Quaternion),
-/* harmony export */   "QuaternionKeyframeTrack": () => (/* binding */ QuaternionKeyframeTrack),
-/* harmony export */   "QuaternionLinearInterpolant": () => (/* binding */ QuaternionLinearInterpolant),
-/* harmony export */   "RED_GREEN_RGTC2_Format": () => (/* binding */ RED_GREEN_RGTC2_Format),
-/* harmony export */   "RED_RGTC1_Format": () => (/* binding */ RED_RGTC1_Format),
-/* harmony export */   "REVISION": () => (/* binding */ REVISION),
-/* harmony export */   "RGBADepthPacking": () => (/* binding */ RGBADepthPacking),
-/* harmony export */   "RGBAFormat": () => (/* binding */ RGBAFormat),
-/* harmony export */   "RGBAIntegerFormat": () => (/* binding */ RGBAIntegerFormat),
-/* harmony export */   "RGBA_ASTC_10x10_Format": () => (/* binding */ RGBA_ASTC_10x10_Format),
-/* harmony export */   "RGBA_ASTC_10x5_Format": () => (/* binding */ RGBA_ASTC_10x5_Format),
-/* harmony export */   "RGBA_ASTC_10x6_Format": () => (/* binding */ RGBA_ASTC_10x6_Format),
-/* harmony export */   "RGBA_ASTC_10x8_Format": () => (/* binding */ RGBA_ASTC_10x8_Format),
-/* harmony export */   "RGBA_ASTC_12x10_Format": () => (/* binding */ RGBA_ASTC_12x10_Format),
-/* harmony export */   "RGBA_ASTC_12x12_Format": () => (/* binding */ RGBA_ASTC_12x12_Format),
-/* harmony export */   "RGBA_ASTC_4x4_Format": () => (/* binding */ RGBA_ASTC_4x4_Format),
-/* harmony export */   "RGBA_ASTC_5x4_Format": () => (/* binding */ RGBA_ASTC_5x4_Format),
-/* harmony export */   "RGBA_ASTC_5x5_Format": () => (/* binding */ RGBA_ASTC_5x5_Format),
-/* harmony export */   "RGBA_ASTC_6x5_Format": () => (/* binding */ RGBA_ASTC_6x5_Format),
-/* harmony export */   "RGBA_ASTC_6x6_Format": () => (/* binding */ RGBA_ASTC_6x6_Format),
-/* harmony export */   "RGBA_ASTC_8x5_Format": () => (/* binding */ RGBA_ASTC_8x5_Format),
-/* harmony export */   "RGBA_ASTC_8x6_Format": () => (/* binding */ RGBA_ASTC_8x6_Format),
-/* harmony export */   "RGBA_ASTC_8x8_Format": () => (/* binding */ RGBA_ASTC_8x8_Format),
-/* harmony export */   "RGBA_BPTC_Format": () => (/* binding */ RGBA_BPTC_Format),
-/* harmony export */   "RGBA_ETC2_EAC_Format": () => (/* binding */ RGBA_ETC2_EAC_Format),
-/* harmony export */   "RGBA_PVRTC_2BPPV1_Format": () => (/* binding */ RGBA_PVRTC_2BPPV1_Format),
-/* harmony export */   "RGBA_PVRTC_4BPPV1_Format": () => (/* binding */ RGBA_PVRTC_4BPPV1_Format),
-/* harmony export */   "RGBA_S3TC_DXT1_Format": () => (/* binding */ RGBA_S3TC_DXT1_Format),
-/* harmony export */   "RGBA_S3TC_DXT3_Format": () => (/* binding */ RGBA_S3TC_DXT3_Format),
-/* harmony export */   "RGBA_S3TC_DXT5_Format": () => (/* binding */ RGBA_S3TC_DXT5_Format),
-/* harmony export */   "RGB_ETC1_Format": () => (/* binding */ RGB_ETC1_Format),
-/* harmony export */   "RGB_ETC2_Format": () => (/* binding */ RGB_ETC2_Format),
-/* harmony export */   "RGB_PVRTC_2BPPV1_Format": () => (/* binding */ RGB_PVRTC_2BPPV1_Format),
-/* harmony export */   "RGB_PVRTC_4BPPV1_Format": () => (/* binding */ RGB_PVRTC_4BPPV1_Format),
-/* harmony export */   "RGB_S3TC_DXT1_Format": () => (/* binding */ RGB_S3TC_DXT1_Format),
-/* harmony export */   "RGFormat": () => (/* binding */ RGFormat),
-/* harmony export */   "RGIntegerFormat": () => (/* binding */ RGIntegerFormat),
-/* harmony export */   "RawShaderMaterial": () => (/* binding */ RawShaderMaterial),
-/* harmony export */   "Ray": () => (/* binding */ Ray),
-/* harmony export */   "Raycaster": () => (/* binding */ Raycaster),
-/* harmony export */   "RectAreaLight": () => (/* binding */ RectAreaLight),
-/* harmony export */   "RedFormat": () => (/* binding */ RedFormat),
-/* harmony export */   "RedIntegerFormat": () => (/* binding */ RedIntegerFormat),
-/* harmony export */   "ReinhardToneMapping": () => (/* binding */ ReinhardToneMapping),
-/* harmony export */   "RepeatWrapping": () => (/* binding */ RepeatWrapping),
-/* harmony export */   "ReplaceStencilOp": () => (/* binding */ ReplaceStencilOp),
-/* harmony export */   "ReverseSubtractEquation": () => (/* binding */ ReverseSubtractEquation),
-/* harmony export */   "RingBufferGeometry": () => (/* binding */ RingBufferGeometry),
-/* harmony export */   "RingGeometry": () => (/* binding */ RingGeometry),
-/* harmony export */   "SIGNED_RED_GREEN_RGTC2_Format": () => (/* binding */ SIGNED_RED_GREEN_RGTC2_Format),
-/* harmony export */   "SIGNED_RED_RGTC1_Format": () => (/* binding */ SIGNED_RED_RGTC1_Format),
-/* harmony export */   "SRGBColorSpace": () => (/* binding */ SRGBColorSpace),
-/* harmony export */   "Scene": () => (/* binding */ Scene),
-/* harmony export */   "ShaderChunk": () => (/* binding */ ShaderChunk),
-/* harmony export */   "ShaderLib": () => (/* binding */ ShaderLib),
-/* harmony export */   "ShaderMaterial": () => (/* binding */ ShaderMaterial),
-/* harmony export */   "ShadowMaterial": () => (/* binding */ ShadowMaterial),
-/* harmony export */   "Shape": () => (/* binding */ Shape),
-/* harmony export */   "ShapeBufferGeometry": () => (/* binding */ ShapeBufferGeometry),
-/* harmony export */   "ShapeGeometry": () => (/* binding */ ShapeGeometry),
-/* harmony export */   "ShapePath": () => (/* binding */ ShapePath),
-/* harmony export */   "ShapeUtils": () => (/* binding */ ShapeUtils),
-/* harmony export */   "ShortType": () => (/* binding */ ShortType),
-/* harmony export */   "Skeleton": () => (/* binding */ Skeleton),
-/* harmony export */   "SkeletonHelper": () => (/* binding */ SkeletonHelper),
-/* harmony export */   "SkinnedMesh": () => (/* binding */ SkinnedMesh),
-/* harmony export */   "Source": () => (/* binding */ Source),
-/* harmony export */   "Sphere": () => (/* binding */ Sphere),
-/* harmony export */   "SphereBufferGeometry": () => (/* binding */ SphereBufferGeometry),
-/* harmony export */   "SphereGeometry": () => (/* binding */ SphereGeometry),
-/* harmony export */   "Spherical": () => (/* binding */ Spherical),
-/* harmony export */   "SphericalHarmonics3": () => (/* binding */ SphericalHarmonics3),
-/* harmony export */   "SplineCurve": () => (/* binding */ SplineCurve),
-/* harmony export */   "SpotLight": () => (/* binding */ SpotLight),
-/* harmony export */   "SpotLightHelper": () => (/* binding */ SpotLightHelper),
-/* harmony export */   "Sprite": () => (/* binding */ Sprite),
-/* harmony export */   "SpriteMaterial": () => (/* binding */ SpriteMaterial),
-/* harmony export */   "SrcAlphaFactor": () => (/* binding */ SrcAlphaFactor),
-/* harmony export */   "SrcAlphaSaturateFactor": () => (/* binding */ SrcAlphaSaturateFactor),
-/* harmony export */   "SrcColorFactor": () => (/* binding */ SrcColorFactor),
-/* harmony export */   "StaticCopyUsage": () => (/* binding */ StaticCopyUsage),
-/* harmony export */   "StaticDrawUsage": () => (/* binding */ StaticDrawUsage),
-/* harmony export */   "StaticReadUsage": () => (/* binding */ StaticReadUsage),
-/* harmony export */   "StereoCamera": () => (/* binding */ StereoCamera),
-/* harmony export */   "StreamCopyUsage": () => (/* binding */ StreamCopyUsage),
-/* harmony export */   "StreamDrawUsage": () => (/* binding */ StreamDrawUsage),
-/* harmony export */   "StreamReadUsage": () => (/* binding */ StreamReadUsage),
-/* harmony export */   "StringKeyframeTrack": () => (/* binding */ StringKeyframeTrack),
-/* harmony export */   "SubtractEquation": () => (/* binding */ SubtractEquation),
-/* harmony export */   "SubtractiveBlending": () => (/* binding */ SubtractiveBlending),
-/* harmony export */   "TOUCH": () => (/* binding */ TOUCH),
-/* harmony export */   "TangentSpaceNormalMap": () => (/* binding */ TangentSpaceNormalMap),
-/* harmony export */   "TetrahedronBufferGeometry": () => (/* binding */ TetrahedronBufferGeometry),
-/* harmony export */   "TetrahedronGeometry": () => (/* binding */ TetrahedronGeometry),
-/* harmony export */   "Texture": () => (/* binding */ Texture),
-/* harmony export */   "TextureLoader": () => (/* binding */ TextureLoader),
-/* harmony export */   "TorusBufferGeometry": () => (/* binding */ TorusBufferGeometry),
-/* harmony export */   "TorusGeometry": () => (/* binding */ TorusGeometry),
-/* harmony export */   "TorusKnotBufferGeometry": () => (/* binding */ TorusKnotBufferGeometry),
-/* harmony export */   "TorusKnotGeometry": () => (/* binding */ TorusKnotGeometry),
-/* harmony export */   "Triangle": () => (/* binding */ Triangle),
-/* harmony export */   "TriangleFanDrawMode": () => (/* binding */ TriangleFanDrawMode),
-/* harmony export */   "TriangleStripDrawMode": () => (/* binding */ TriangleStripDrawMode),
-/* harmony export */   "TrianglesDrawMode": () => (/* binding */ TrianglesDrawMode),
-/* harmony export */   "TubeBufferGeometry": () => (/* binding */ TubeBufferGeometry),
-/* harmony export */   "TubeGeometry": () => (/* binding */ TubeGeometry),
-/* harmony export */   "TwoPassDoubleSide": () => (/* binding */ TwoPassDoubleSide),
-/* harmony export */   "UVMapping": () => (/* binding */ UVMapping),
-/* harmony export */   "Uint16BufferAttribute": () => (/* binding */ Uint16BufferAttribute),
-/* harmony export */   "Uint32BufferAttribute": () => (/* binding */ Uint32BufferAttribute),
-/* harmony export */   "Uint8BufferAttribute": () => (/* binding */ Uint8BufferAttribute),
-/* harmony export */   "Uint8ClampedBufferAttribute": () => (/* binding */ Uint8ClampedBufferAttribute),
-/* harmony export */   "Uniform": () => (/* binding */ Uniform),
-/* harmony export */   "UniformsGroup": () => (/* binding */ UniformsGroup),
-/* harmony export */   "UniformsLib": () => (/* binding */ UniformsLib),
-/* harmony export */   "UniformsUtils": () => (/* binding */ UniformsUtils),
-/* harmony export */   "UnsignedByteType": () => (/* binding */ UnsignedByteType),
-/* harmony export */   "UnsignedInt248Type": () => (/* binding */ UnsignedInt248Type),
-/* harmony export */   "UnsignedIntType": () => (/* binding */ UnsignedIntType),
-/* harmony export */   "UnsignedShort4444Type": () => (/* binding */ UnsignedShort4444Type),
-/* harmony export */   "UnsignedShort5551Type": () => (/* binding */ UnsignedShort5551Type),
-/* harmony export */   "UnsignedShortType": () => (/* binding */ UnsignedShortType),
-/* harmony export */   "VSMShadowMap": () => (/* binding */ VSMShadowMap),
-/* harmony export */   "Vector2": () => (/* binding */ Vector2),
-/* harmony export */   "Vector3": () => (/* binding */ Vector3),
-/* harmony export */   "Vector4": () => (/* binding */ Vector4),
-/* harmony export */   "VectorKeyframeTrack": () => (/* binding */ VectorKeyframeTrack),
-/* harmony export */   "VideoTexture": () => (/* binding */ VideoTexture),
-/* harmony export */   "WebGL1Renderer": () => (/* binding */ WebGL1Renderer),
-/* harmony export */   "WebGL3DRenderTarget": () => (/* binding */ WebGL3DRenderTarget),
-/* harmony export */   "WebGLArrayRenderTarget": () => (/* binding */ WebGLArrayRenderTarget),
-/* harmony export */   "WebGLCubeRenderTarget": () => (/* binding */ WebGLCubeRenderTarget),
-/* harmony export */   "WebGLMultipleRenderTargets": () => (/* binding */ WebGLMultipleRenderTargets),
-/* harmony export */   "WebGLRenderTarget": () => (/* binding */ WebGLRenderTarget),
-/* harmony export */   "WebGLRenderer": () => (/* binding */ WebGLRenderer),
-/* harmony export */   "WebGLUtils": () => (/* binding */ WebGLUtils),
-/* harmony export */   "WireframeGeometry": () => (/* binding */ WireframeGeometry),
-/* harmony export */   "WrapAroundEnding": () => (/* binding */ WrapAroundEnding),
-/* harmony export */   "ZeroCurvatureEnding": () => (/* binding */ ZeroCurvatureEnding),
-/* harmony export */   "ZeroFactor": () => (/* binding */ ZeroFactor),
-/* harmony export */   "ZeroSlopeEnding": () => (/* binding */ ZeroSlopeEnding),
-/* harmony export */   "ZeroStencilOp": () => (/* binding */ ZeroStencilOp),
-/* harmony export */   "_SRGBAFormat": () => (/* binding */ _SRGBAFormat),
-/* harmony export */   "sRGBEncoding": () => (/* binding */ sRGBEncoding)
-/* harmony export */ });
-/**
- * @license
- * Copyright 2010-2023 Three.js Authors
- * SPDX-License-Identifier: MIT
- */
-const REVISION = '152';
-
-const MOUSE = { LEFT: 0, MIDDLE: 1, RIGHT: 2, ROTATE: 0, DOLLY: 1, PAN: 2 };
-const TOUCH = { ROTATE: 0, PAN: 1, DOLLY_PAN: 2, DOLLY_ROTATE: 3 };
-const CullFaceNone = 0;
-const CullFaceBack = 1;
-const CullFaceFront = 2;
-const CullFaceFrontBack = 3;
-const BasicShadowMap = 0;
-const PCFShadowMap = 1;
-const PCFSoftShadowMap = 2;
-const VSMShadowMap = 3;
-const FrontSide = 0;
-const BackSide = 1;
-const DoubleSide = 2;
-const TwoPassDoubleSide = 2; // r149
-const NoBlending = 0;
-const NormalBlending = 1;
-const AdditiveBlending = 2;
-const SubtractiveBlending = 3;
-const MultiplyBlending = 4;
-const CustomBlending = 5;
-const AddEquation = 100;
-const SubtractEquation = 101;
-const ReverseSubtractEquation = 102;
-const MinEquation = 103;
-const MaxEquation = 104;
-const ZeroFactor = 200;
-const OneFactor = 201;
-const SrcColorFactor = 202;
-const OneMinusSrcColorFactor = 203;
-const SrcAlphaFactor = 204;
-const OneMinusSrcAlphaFactor = 205;
-const DstAlphaFactor = 206;
-const OneMinusDstAlphaFactor = 207;
-const DstColorFactor = 208;
-const OneMinusDstColorFactor = 209;
-const SrcAlphaSaturateFactor = 210;
-const NeverDepth = 0;
-const AlwaysDepth = 1;
-const LessDepth = 2;
-const LessEqualDepth = 3;
-const EqualDepth = 4;
-const GreaterEqualDepth = 5;
-const GreaterDepth = 6;
-const NotEqualDepth = 7;
-const MultiplyOperation = 0;
-const MixOperation = 1;
-const AddOperation = 2;
-const NoToneMapping = 0;
-const LinearToneMapping = 1;
-const ReinhardToneMapping = 2;
-const CineonToneMapping = 3;
-const ACESFilmicToneMapping = 4;
-const CustomToneMapping = 5;
-
-const UVMapping = 300;
-const CubeReflectionMapping = 301;
-const CubeRefractionMapping = 302;
-const EquirectangularReflectionMapping = 303;
-const EquirectangularRefractionMapping = 304;
-const CubeUVReflectionMapping = 306;
-const RepeatWrapping = 1000;
-const ClampToEdgeWrapping = 1001;
-const MirroredRepeatWrapping = 1002;
-const NearestFilter = 1003;
-const NearestMipmapNearestFilter = 1004;
-const NearestMipMapNearestFilter = 1004;
-const NearestMipmapLinearFilter = 1005;
-const NearestMipMapLinearFilter = 1005;
-const LinearFilter = 1006;
-const LinearMipmapNearestFilter = 1007;
-const LinearMipMapNearestFilter = 1007;
-const LinearMipmapLinearFilter = 1008;
-const LinearMipMapLinearFilter = 1008;
-const UnsignedByteType = 1009;
-const ByteType = 1010;
-const ShortType = 1011;
-const UnsignedShortType = 1012;
-const IntType = 1013;
-const UnsignedIntType = 1014;
-const FloatType = 1015;
-const HalfFloatType = 1016;
-const UnsignedShort4444Type = 1017;
-const UnsignedShort5551Type = 1018;
-const UnsignedInt248Type = 1020;
-const AlphaFormat = 1021;
-const RGBAFormat = 1023;
-const LuminanceFormat = 1024;
-const LuminanceAlphaFormat = 1025;
-const DepthFormat = 1026;
-const DepthStencilFormat = 1027;
-const RedFormat = 1028;
-const RedIntegerFormat = 1029;
-const RGFormat = 1030;
-const RGIntegerFormat = 1031;
-const RGBAIntegerFormat = 1033;
-
-const RGB_S3TC_DXT1_Format = 33776;
-const RGBA_S3TC_DXT1_Format = 33777;
-const RGBA_S3TC_DXT3_Format = 33778;
-const RGBA_S3TC_DXT5_Format = 33779;
-const RGB_PVRTC_4BPPV1_Format = 35840;
-const RGB_PVRTC_2BPPV1_Format = 35841;
-const RGBA_PVRTC_4BPPV1_Format = 35842;
-const RGBA_PVRTC_2BPPV1_Format = 35843;
-const RGB_ETC1_Format = 36196;
-const RGB_ETC2_Format = 37492;
-const RGBA_ETC2_EAC_Format = 37496;
-const RGBA_ASTC_4x4_Format = 37808;
-const RGBA_ASTC_5x4_Format = 37809;
-const RGBA_ASTC_5x5_Format = 37810;
-const RGBA_ASTC_6x5_Format = 37811;
-const RGBA_ASTC_6x6_Format = 37812;
-const RGBA_ASTC_8x5_Format = 37813;
-const RGBA_ASTC_8x6_Format = 37814;
-const RGBA_ASTC_8x8_Format = 37815;
-const RGBA_ASTC_10x5_Format = 37816;
-const RGBA_ASTC_10x6_Format = 37817;
-const RGBA_ASTC_10x8_Format = 37818;
-const RGBA_ASTC_10x10_Format = 37819;
-const RGBA_ASTC_12x10_Format = 37820;
-const RGBA_ASTC_12x12_Format = 37821;
-const RGBA_BPTC_Format = 36492;
-const RED_RGTC1_Format = 36283;
-const SIGNED_RED_RGTC1_Format = 36284;
-const RED_GREEN_RGTC2_Format = 36285;
-const SIGNED_RED_GREEN_RGTC2_Format = 36286;
-const LoopOnce = 2200;
-const LoopRepeat = 2201;
-const LoopPingPong = 2202;
-const InterpolateDiscrete = 2300;
-const InterpolateLinear = 2301;
-const InterpolateSmooth = 2302;
-const ZeroCurvatureEnding = 2400;
-const ZeroSlopeEnding = 2401;
-const WrapAroundEnding = 2402;
-const NormalAnimationBlendMode = 2500;
-const AdditiveAnimationBlendMode = 2501;
-const TrianglesDrawMode = 0;
-const TriangleStripDrawMode = 1;
-const TriangleFanDrawMode = 2;
-/** @deprecated Use LinearSRGBColorSpace or NoColorSpace in three.js r152+. */
-const LinearEncoding = 3000;
-/** @deprecated Use SRGBColorSpace in three.js r152+. */
-const sRGBEncoding = 3001;
-const BasicDepthPacking = 3200;
-const RGBADepthPacking = 3201;
-const TangentSpaceNormalMap = 0;
-const ObjectSpaceNormalMap = 1;
-
-// Color space string identifiers, matching CSS Color Module Level 4 and WebGPU names where available.
-const NoColorSpace = '';
-const SRGBColorSpace = 'srgb';
-const LinearSRGBColorSpace = 'srgb-linear';
-const DisplayP3ColorSpace = 'display-p3';
-
-const ZeroStencilOp = 0;
-const KeepStencilOp = 7680;
-const ReplaceStencilOp = 7681;
-const IncrementStencilOp = 7682;
-const DecrementStencilOp = 7683;
-const IncrementWrapStencilOp = 34055;
-const DecrementWrapStencilOp = 34056;
-const InvertStencilOp = 5386;
-
-const NeverStencilFunc = 512;
-const LessStencilFunc = 513;
-const EqualStencilFunc = 514;
-const LessEqualStencilFunc = 515;
-const GreaterStencilFunc = 516;
-const NotEqualStencilFunc = 517;
-const GreaterEqualStencilFunc = 518;
-const AlwaysStencilFunc = 519;
-
-const StaticDrawUsage = 35044;
-const DynamicDrawUsage = 35048;
-const StreamDrawUsage = 35040;
-const StaticReadUsage = 35045;
-const DynamicReadUsage = 35049;
-const StreamReadUsage = 35041;
-const StaticCopyUsage = 35046;
-const DynamicCopyUsage = 35050;
-const StreamCopyUsage = 35042;
-
-const GLSL1 = '100';
-const GLSL3 = '300 es';
-
-const _SRGBAFormat = 1035; // fallback for WebGL 1
-
-/**
- * https://github.com/mrdoob/eventdispatcher.js/
- */
-
-class EventDispatcher {
-
-	addEventListener( type, listener ) {
-
-		if ( this._listeners === undefined ) this._listeners = {};
-
-		const listeners = this._listeners;
-
-		if ( listeners[ type ] === undefined ) {
-
-			listeners[ type ] = [];
-
-		}
-
-		if ( listeners[ type ].indexOf( listener ) === - 1 ) {
-
-			listeners[ type ].push( listener );
-
-		}
-
-	}
-
-	hasEventListener( type, listener ) {
-
-		if ( this._listeners === undefined ) return false;
-
-		const listeners = this._listeners;
-
-		return listeners[ type ] !== undefined && listeners[ type ].indexOf( listener ) !== - 1;
-
-	}
-
-	removeEventListener( type, listener ) {
-
-		if ( this._listeners === undefined ) return;
-
-		const listeners = this._listeners;
-		const listenerArray = listeners[ type ];
-
-		if ( listenerArray !== undefined ) {
-
-			const index = listenerArray.indexOf( listener );
-
-			if ( index !== - 1 ) {
-
-				listenerArray.splice( index, 1 );
-
-			}
-
-		}
-
-	}
-
-	dispatchEvent( event ) {
-
-		if ( this._listeners === undefined ) return;
-
-		const listeners = this._listeners;
-		const listenerArray = listeners[ event.type ];
-
-		if ( listenerArray !== undefined ) {
-
-			event.target = this;
-
-			// Make a copy, in case listeners are removed while iterating.
-			const array = listenerArray.slice( 0 );
-
-			for ( let i = 0, l = array.length; i < l; i ++ ) {
-
-				array[ i ].call( this, event );
-
-			}
-
-			event.target = null;
-
-		}
-
-	}
-
-}
-
-const _lut = [ '00', '01', '02', '03', '04', '05', '06', '07', '08', '09', '0a', '0b', '0c', '0d', '0e', '0f', '10', '11', '12', '13', '14', '15', '16', '17', '18', '19', '1a', '1b', '1c', '1d', '1e', '1f', '20', '21', '22', '23', '24', '25', '26', '27', '28', '29', '2a', '2b', '2c', '2d', '2e', '2f', '30', '31', '32', '33', '34', '35', '36', '37', '38', '39', '3a', '3b', '3c', '3d', '3e', '3f', '40', '41', '42', '43', '44', '45', '46', '47', '48', '49', '4a', '4b', '4c', '4d', '4e', '4f', '50', '51', '52', '53', '54', '55', '56', '57', '58', '59', '5a', '5b', '5c', '5d', '5e', '5f', '60', '61', '62', '63', '64', '65', '66', '67', '68', '69', '6a', '6b', '6c', '6d', '6e', '6f', '70', '71', '72', '73', '74', '75', '76', '77', '78', '79', '7a', '7b', '7c', '7d', '7e', '7f', '80', '81', '82', '83', '84', '85', '86', '87', '88', '89', '8a', '8b', '8c', '8d', '8e', '8f', '90', '91', '92', '93', '94', '95', '96', '97', '98', '99', '9a', '9b', '9c', '9d', '9e', '9f', 'a0', 'a1', 'a2', 'a3', 'a4', 'a5', 'a6', 'a7', 'a8', 'a9', 'aa', 'ab', 'ac', 'ad', 'ae', 'af', 'b0', 'b1', 'b2', 'b3', 'b4', 'b5', 'b6', 'b7', 'b8', 'b9', 'ba', 'bb', 'bc', 'bd', 'be', 'bf', 'c0', 'c1', 'c2', 'c3', 'c4', 'c5', 'c6', 'c7', 'c8', 'c9', 'ca', 'cb', 'cc', 'cd', 'ce', 'cf', 'd0', 'd1', 'd2', 'd3', 'd4', 'd5', 'd6', 'd7', 'd8', 'd9', 'da', 'db', 'dc', 'dd', 'de', 'df', 'e0', 'e1', 'e2', 'e3', 'e4', 'e5', 'e6', 'e7', 'e8', 'e9', 'ea', 'eb', 'ec', 'ed', 'ee', 'ef', 'f0', 'f1', 'f2', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'fa', 'fb', 'fc', 'fd', 'fe', 'ff' ];
-
-let _seed = 1234567;
-
-
-const DEG2RAD = Math.PI / 180;
-const RAD2DEG = 180 / Math.PI;
-
-// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136
-function generateUUID() {
-
-	const d0 = Math.random() * 0xffffffff | 0;
-	const d1 = Math.random() * 0xffffffff | 0;
-	const d2 = Math.random() * 0xffffffff | 0;
-	const d3 = Math.random() * 0xffffffff | 0;
-	const uuid = _lut[ d0 & 0xff ] + _lut[ d0 >> 8 & 0xff ] + _lut[ d0 >> 16 & 0xff ] + _lut[ d0 >> 24 & 0xff ] + '-' +
-			_lut[ d1 & 0xff ] + _lut[ d1 >> 8 & 0xff ] + '-' + _lut[ d1 >> 16 & 0x0f | 0x40 ] + _lut[ d1 >> 24 & 0xff ] + '-' +
-			_lut[ d2 & 0x3f | 0x80 ] + _lut[ d2 >> 8 & 0xff ] + '-' + _lut[ d2 >> 16 & 0xff ] + _lut[ d2 >> 24 & 0xff ] +
-			_lut[ d3 & 0xff ] + _lut[ d3 >> 8 & 0xff ] + _lut[ d3 >> 16 & 0xff ] + _lut[ d3 >> 24 & 0xff ];
-
-	// .toLowerCase() here flattens concatenated strings to save heap memory space.
-	return uuid.toLowerCase();
-
-}
-
-function clamp( value, min, max ) {
-
-	return Math.max( min, Math.min( max, value ) );
-
-}
-
-// compute euclidean modulo of m % n
-// https://en.wikipedia.org/wiki/Modulo_operation
-function euclideanModulo( n, m ) {
-
-	return ( ( n % m ) + m ) % m;
-
-}
-
-// Linear mapping from range <a1, a2> to range <b1, b2>
-function mapLinear( x, a1, a2, b1, b2 ) {
-
-	return b1 + ( x - a1 ) * ( b2 - b1 ) / ( a2 - a1 );
-
-}
-
-// https://www.gamedev.net/tutorials/programming/general-and-gameplay-programming/inverse-lerp-a-super-useful-yet-often-overlooked-function-r5230/
-function inverseLerp( x, y, value ) {
-
-	if ( x !== y ) {
-
-		return ( value - x ) / ( y - x );
-
-	} else {
-
-		return 0;
-
-	}
-
-}
-
-// https://en.wikipedia.org/wiki/Linear_interpolation
-function lerp( x, y, t ) {
-
-	return ( 1 - t ) * x + t * y;
-
-}
-
-// http://www.rorydriscoll.com/2016/03/07/frame-rate-independent-damping-using-lerp/
-function damp( x, y, lambda, dt ) {
-
-	return lerp( x, y, 1 - Math.exp( - lambda * dt ) );
-
-}
-
-// https://www.desmos.com/calculator/vcsjnyz7x4
-function pingpong( x, length = 1 ) {
-
-	return length - Math.abs( euclideanModulo( x, length * 2 ) - length );
-
-}
-
-// http://en.wikipedia.org/wiki/Smoothstep
-function smoothstep( x, min, max ) {
-
-	if ( x <= min ) return 0;
-	if ( x >= max ) return 1;
-
-	x = ( x - min ) / ( max - min );
-
-	return x * x * ( 3 - 2 * x );
-
-}
-
-function smootherstep( x, min, max ) {
-
-	if ( x <= min ) return 0;
-	if ( x >= max ) return 1;
-
-	x = ( x - min ) / ( max - min );
-
-	return x * x * x * ( x * ( x * 6 - 15 ) + 10 );
-
-}
-
-// Random integer from <low, high> interval
-function randInt( low, high ) {
-
-	return low + Math.floor( Math.random() * ( high - low + 1 ) );
-
-}
-
-// Random float from <low, high> interval
-function randFloat( low, high ) {
-
-	return low + Math.random() * ( high - low );
-
-}
-
-// Random float from <-range/2, range/2> interval
-function randFloatSpread( range ) {
-
-	return range * ( 0.5 - Math.random() );
-
-}
-
-// Deterministic pseudo-random float in the interval [ 0, 1 ]
-function seededRandom( s ) {
-
-	if ( s !== undefined ) _seed = s;
-
-	// Mulberry32 generator
-
-	let t = _seed += 0x6D2B79F5;
-
-	t = Math.imul( t ^ t >>> 15, t | 1 );
-
-	t ^= t + Math.imul( t ^ t >>> 7, t | 61 );
-
-	return ( ( t ^ t >>> 14 ) >>> 0 ) / 4294967296;
-
-}
-
-function degToRad( degrees ) {
-
-	return degrees * DEG2RAD;
-
-}
-
-function radToDeg( radians ) {
-
-	return radians * RAD2DEG;
-
-}
-
-function isPowerOfTwo( value ) {
-
-	return ( value & ( value - 1 ) ) === 0 && value !== 0;
-
-}
-
-function ceilPowerOfTwo( value ) {
-
-	return Math.pow( 2, Math.ceil( Math.log( value ) / Math.LN2 ) );
-
-}
-
-function floorPowerOfTwo( value ) {
-
-	return Math.pow( 2, Math.floor( Math.log( value ) / Math.LN2 ) );
-
-}
-
-function setQuaternionFromProperEuler( q, a, b, c, order ) {
-
-	// Intrinsic Proper Euler Angles - see https://en.wikipedia.org/wiki/Euler_angles
-
-	// rotations are applied to the axes in the order specified by 'order'
-	// rotation by angle 'a' is applied first, then by angle 'b', then by angle 'c'
-	// angles are in radians
-
-	const cos = Math.cos;
-	const sin = Math.sin;
-
-	const c2 = cos( b / 2 );
-	const s2 = sin( b / 2 );
-
-	const c13 = cos( ( a + c ) / 2 );
-	const s13 = sin( ( a + c ) / 2 );
-
-	const c1_3 = cos( ( a - c ) / 2 );
-	const s1_3 = sin( ( a - c ) / 2 );
-
-	const c3_1 = cos( ( c - a ) / 2 );
-	const s3_1 = sin( ( c - a ) / 2 );
-
-	switch ( order ) {
-
-		case 'XYX':
-			q.set( c2 * s13, s2 * c1_3, s2 * s1_3, c2 * c13 );
-			break;
-
-		case 'YZY':
-			q.set( s2 * s1_3, c2 * s13, s2 * c1_3, c2 * c13 );
-			break;
-
-		case 'ZXZ':
-			q.set( s2 * c1_3, s2 * s1_3, c2 * s13, c2 * c13 );
-			break;
-
-		case 'XZX':
-			q.set( c2 * s13, s2 * s3_1, s2 * c3_1, c2 * c13 );
-			break;
-
-		case 'YXY':
-			q.set( s2 * c3_1, c2 * s13, s2 * s3_1, c2 * c13 );
-			break;
-
-		case 'ZYZ':
-			q.set( s2 * s3_1, s2 * c3_1, c2 * s13, c2 * c13 );
-			break;
-
-		default:
-			console.warn( 'THREE.MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: ' + order );
-
-	}
-
-}
-
-function denormalize( value, array ) {
-
-	switch ( array.constructor ) {
-
-		case Float32Array:
-
-			return value;
-
-		case Uint16Array:
-
-			return value / 65535.0;
-
-		case Uint8Array:
-
-			return value / 255.0;
-
-		case Int16Array:
-
-			return Math.max( value / 32767.0, - 1.0 );
-
-		case Int8Array:
-
-			return Math.max( value / 127.0, - 1.0 );
-
-		default:
-
-			throw new Error( 'Invalid component type.' );
-
-	}
-
-}
-
-function normalize( value, array ) {
-
-	switch ( array.constructor ) {
-
-		case Float32Array:
-
-			return value;
-
-		case Uint16Array:
-
-			return Math.round( value * 65535.0 );
-
-		case Uint8Array:
-
-			return Math.round( value * 255.0 );
-
-		case Int16Array:
-
-			return Math.round( value * 32767.0 );
-
-		case Int8Array:
-
-			return Math.round( value * 127.0 );
-
-		default:
-
-			throw new Error( 'Invalid component type.' );
-
-	}
-
-}
-
-const MathUtils = {
-	DEG2RAD: DEG2RAD,
-	RAD2DEG: RAD2DEG,
-	generateUUID: generateUUID,
-	clamp: clamp,
-	euclideanModulo: euclideanModulo,
-	mapLinear: mapLinear,
-	inverseLerp: inverseLerp,
-	lerp: lerp,
-	damp: damp,
-	pingpong: pingpong,
-	smoothstep: smoothstep,
-	smootherstep: smootherstep,
-	randInt: randInt,
-	randFloat: randFloat,
-	randFloatSpread: randFloatSpread,
-	seededRandom: seededRandom,
-	degToRad: degToRad,
-	radToDeg: radToDeg,
-	isPowerOfTwo: isPowerOfTwo,
-	ceilPowerOfTwo: ceilPowerOfTwo,
-	floorPowerOfTwo: floorPowerOfTwo,
-	setQuaternionFromProperEuler: setQuaternionFromProperEuler,
-	normalize: normalize,
-	denormalize: denormalize
-};
-
-class Vector2 {
-
-	constructor( x = 0, y = 0 ) {
-
-		Vector2.prototype.isVector2 = true;
-
-		this.x = x;
-		this.y = y;
-
-	}
-
-	get width() {
-
-		return this.x;
-
-	}
-
-	set width( value ) {
-
-		this.x = value;
-
-	}
-
-	get height() {
-
-		return this.y;
-
-	}
-
-	set height( value ) {
-
-		this.y = value;
-
-	}
-
-	set( x, y ) {
-
-		this.x = x;
-		this.y = y;
-
-		return this;
-
-	}
-
-	setScalar( scalar ) {
-
-		this.x = scalar;
-		this.y = scalar;
-
-		return this;
-
-	}
-
-	setX( x ) {
-
-		this.x = x;
-
-		return this;
-
-	}
-
-	setY( y ) {
-
-		this.y = y;
-
-		return this;
-
-	}
-
-	setComponent( index, value ) {
-
-		switch ( index ) {
-
-			case 0: this.x = value; break;
-			case 1: this.y = value; break;
-			default: throw new Error( 'index is out of range: ' + index );
-
-		}
-
-		return this;
-
-	}
-
-	getComponent( index ) {
-
-		switch ( index ) {
-
-			case 0: return this.x;
-			case 1: return this.y;
-			default: throw new Error( 'index is out of range: ' + index );
-
-		}
-
-	}
-
-	clone() {
-
-		return new this.constructor( this.x, this.y );
-
-	}
-
-	copy( v ) {
-
-		this.x = v.x;
-		this.y = v.y;
-
-		return this;
-
-	}
-
-	add( v ) {
-
-		this.x += v.x;
-		this.y += v.y;
-
-		return this;
-
-	}
-
-	addScalar( s ) {
-
-		this.x += s;
-		this.y += s;
-
-		return this;
-
-	}
-
-	addVectors( a, b ) {
-
-		this.x = a.x + b.x;
-		this.y = a.y + b.y;
-
-		return this;
-
-	}
-
-	addScaledVector( v, s ) {
-
-		this.x += v.x * s;
-		this.y += v.y * s;
-
-		return this;
-
-	}
-
-	sub( v ) {
-
-		this.x -= v.x;
-		this.y -= v.y;
-
-		return this;
-
-	}
-
-	subScalar( s ) {
-
-		this.x -= s;
-		this.y -= s;
-
-		return this;
-
-	}
-
-	subVectors( a, b ) {
-
-		this.x = a.x - b.x;
-		this.y = a.y - b.y;
-
-		return this;
-
-	}
-
-	multiply( v ) {
-
-		this.x *= v.x;
-		this.y *= v.y;
-
-		return this;
-
-	}
-
-	multiplyScalar( scalar ) {
-
-		this.x *= scalar;
-		this.y *= scalar;
-
-		return this;
-
-	}
-
-	divide( v ) {
-
-		this.x /= v.x;
-		this.y /= v.y;
-
-		return this;
-
-	}
-
-	divideScalar( scalar ) {
-
-		return this.multiplyScalar( 1 / scalar );
-
-	}
-
-	applyMatrix3( m ) {
-
-		const x = this.x, y = this.y;
-		const e = m.elements;
-
-		this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ];
-		this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ];
-
-		return this;
-
-	}
-
-	min( v ) {
-
-		this.x = Math.min( this.x, v.x );
-		this.y = Math.min( this.y, v.y );
-
-		return this;
-
-	}
-
-	max( v ) {
-
-		this.x = Math.max( this.x, v.x );
-		this.y = Math.max( this.y, v.y );
-
-		return this;
-
-	}
-
-	clamp( min, max ) {
-
-		// assumes min < max, componentwise
-
-		this.x = Math.max( min.x, Math.min( max.x, this.x ) );
-		this.y = Math.max( min.y, Math.min( max.y, this.y ) );
-
-		return this;
-
-	}
-
-	clampScalar( minVal, maxVal ) {
-
-		this.x = Math.max( minVal, Math.min( maxVal, this.x ) );
-		this.y = Math.max( minVal, Math.min( maxVal, this.y ) );
-
-		return this;
-
-	}
-
-	clampLength( min, max ) {
-
-		const length = this.length();
-
-		return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );
-
-	}
-
-	floor() {
-
-		this.x = Math.floor( this.x );
-		this.y = Math.floor( this.y );
-
-		return this;
-
-	}
-
-	ceil() {
-
-		this.x = Math.ceil( this.x );
-		this.y = Math.ceil( this.y );
-
-		return this;
-
-	}
-
-	round() {
-
-		this.x = Math.round( this.x );
-		this.y = Math.round( this.y );
-
-		return this;
-
-	}
-
-	roundToZero() {
-
-		this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );
-		this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );
-
-		return this;
-
-	}
-
-	negate() {
-
-		this.x = - this.x;
-		this.y = - this.y;
-
-		return this;
-
-	}
-
-	dot( v ) {
-
-		return this.x * v.x + this.y * v.y;
-
-	}
-
-	cross( v ) {
-
-		return this.x * v.y - this.y * v.x;
-
-	}
-
-	lengthSq() {
-
-		return this.x * this.x + this.y * this.y;
-
-	}
-
-	length() {
-
-		return Math.sqrt( this.x * this.x + this.y * this.y );
-
-	}
-
-	manhattanLength() {
-
-		return Math.abs( this.x ) + Math.abs( this.y );
-
-	}
-
-	normalize() {
-
-		return this.divideScalar( this.length() || 1 );
-
-	}
-
-	angle() {
-
-		// computes the angle in radians with respect to the positive x-axis
-
-		const angle = Math.atan2( - this.y, - this.x ) + Math.PI;
-
-		return angle;
-
-	}
-
-	angleTo( v ) {
-
-		const denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );
-
-		if ( denominator === 0 ) return Math.PI / 2;
-
-		const theta = this.dot( v ) / denominator;
-
-		// clamp, to handle numerical problems
-
-		return Math.acos( clamp( theta, - 1, 1 ) );
-
-	}
-
-	distanceTo( v ) {
-
-		return Math.sqrt( this.distanceToSquared( v ) );
-
-	}
-
-	distanceToSquared( v ) {
-
-		const dx = this.x - v.x, dy = this.y - v.y;
-		return dx * dx + dy * dy;
-
-	}
-
-	manhattanDistanceTo( v ) {
-
-		return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y );
-
-	}
-
-	setLength( length ) {
-
-		return this.normalize().multiplyScalar( length );
-
-	}
-
-	lerp( v, alpha ) {
-
-		this.x += ( v.x - this.x ) * alpha;
-		this.y += ( v.y - this.y ) * alpha;
-
-		return this;
-
-	}
-
-	lerpVectors( v1, v2, alpha ) {
-
-		this.x = v1.x + ( v2.x - v1.x ) * alpha;
-		this.y = v1.y + ( v2.y - v1.y ) * alpha;
-
-		return this;
-
-	}
-
-	equals( v ) {
-
-		return ( ( v.x === this.x ) && ( v.y === this.y ) );
-
-	}
-
-	fromArray( array, offset = 0 ) {
-
-		this.x = array[ offset ];
-		this.y = array[ offset + 1 ];
-
-		return this;
-
-	}
-
-	toArray( array = [], offset = 0 ) {
-
-		array[ offset ] = this.x;
-		array[ offset + 1 ] = this.y;
-
-		return array;
-
-	}
-
-	fromBufferAttribute( attribute, index ) {
-
-		this.x = attribute.getX( index );
-		this.y = attribute.getY( index );
-
-		return this;
-
-	}
-
-	rotateAround( center, angle ) {
-
-		const c = Math.cos( angle ), s = Math.sin( angle );
-
-		const x = this.x - center.x;
-		const y = this.y - center.y;
-
-		this.x = x * c - y * s + center.x;
-		this.y = x * s + y * c + center.y;
-
-		return this;
-
-	}
-
-	random() {
-
-		this.x = Math.random();
-		this.y = Math.random();
-
-		return this;
-
-	}
-
-	*[ Symbol.iterator ]() {
-
-		yield this.x;
-		yield this.y;
-
-	}
-
-}
-
-class Matrix3 {
-
-	constructor() {
-
-		Matrix3.prototype.isMatrix3 = true;
-
-		this.elements = [
-
-			1, 0, 0,
-			0, 1, 0,
-			0, 0, 1
-
-		];
-
-	}
-
-	set( n11, n12, n13, n21, n22, n23, n31, n32, n33 ) {
-
-		const te = this.elements;
-
-		te[ 0 ] = n11; te[ 1 ] = n21; te[ 2 ] = n31;
-		te[ 3 ] = n12; te[ 4 ] = n22; te[ 5 ] = n32;
-		te[ 6 ] = n13; te[ 7 ] = n23; te[ 8 ] = n33;
-
-		return this;
-
-	}
-
-	identity() {
-
-		this.set(
-
-			1, 0, 0,
-			0, 1, 0,
-			0, 0, 1
-
-		);
-
-		return this;
-
-	}
-
-	copy( m ) {
-
-		const te = this.elements;
-		const me = m.elements;
-
-		te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ];
-		te[ 3 ] = me[ 3 ]; te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ];
-		te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ]; te[ 8 ] = me[ 8 ];
-
-		return this;
-
-	}
-
-	extractBasis( xAxis, yAxis, zAxis ) {
-
-		xAxis.setFromMatrix3Column( this, 0 );
-		yAxis.setFromMatrix3Column( this, 1 );
-		zAxis.setFromMatrix3Column( this, 2 );
-
-		return this;
-
-	}
-
-	setFromMatrix4( m ) {
-
-		const me = m.elements;
-
-		this.set(
-
-			me[ 0 ], me[ 4 ], me[ 8 ],
-			me[ 1 ], me[ 5 ], me[ 9 ],
-			me[ 2 ], me[ 6 ], me[ 10 ]
-
-		);
-
-		return this;
-
-	}
-
-	multiply( m ) {
-
-		return this.multiplyMatrices( this, m );
-
-	}
-
-	premultiply( m ) {
-
-		return this.multiplyMatrices( m, this );
-
-	}
-
-	multiplyMatrices( a, b ) {
-
-		const ae = a.elements;
-		const be = b.elements;
-		const te = this.elements;
-
-		const a11 = ae[ 0 ], a12 = ae[ 3 ], a13 = ae[ 6 ];
-		const a21 = ae[ 1 ], a22 = ae[ 4 ], a23 = ae[ 7 ];
-		const a31 = ae[ 2 ], a32 = ae[ 5 ], a33 = ae[ 8 ];
-
-		const b11 = be[ 0 ], b12 = be[ 3 ], b13 = be[ 6 ];
-		const b21 = be[ 1 ], b22 = be[ 4 ], b23 = be[ 7 ];
-		const b31 = be[ 2 ], b32 = be[ 5 ], b33 = be[ 8 ];
-
-		te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31;
-		te[ 3 ] = a11 * b12 + a12 * b22 + a13 * b32;
-		te[ 6 ] = a11 * b13 + a12 * b23 + a13 * b33;
-
-		te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31;
-		te[ 4 ] = a21 * b12 + a22 * b22 + a23 * b32;
-		te[ 7 ] = a21 * b13 + a22 * b23 + a23 * b33;
-
-		te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31;
-		te[ 5 ] = a31 * b12 + a32 * b22 + a33 * b32;
-		te[ 8 ] = a31 * b13 + a32 * b23 + a33 * b33;
-
-		return this;
-
-	}
-
-	multiplyScalar( s ) {
-
-		const te = this.elements;
-
-		te[ 0 ] *= s; te[ 3 ] *= s; te[ 6 ] *= s;
-		te[ 1 ] *= s; te[ 4 ] *= s; te[ 7 ] *= s;
-		te[ 2 ] *= s; te[ 5 ] *= s; te[ 8 ] *= s;
-
-		return this;
-
-	}
-
-	determinant() {
-
-		const te = this.elements;
-
-		const a = te[ 0 ], b = te[ 1 ], c = te[ 2 ],
-			d = te[ 3 ], e = te[ 4 ], f = te[ 5 ],
-			g = te[ 6 ], h = te[ 7 ], i = te[ 8 ];
-
-		return a * e * i - a * f * h - b * d * i + b * f * g + c * d * h - c * e * g;
-
-	}
-
-	invert() {
-
-		const te = this.elements,
-
-			n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ],
-			n12 = te[ 3 ], n22 = te[ 4 ], n32 = te[ 5 ],
-			n13 = te[ 6 ], n23 = te[ 7 ], n33 = te[ 8 ],
-
-			t11 = n33 * n22 - n32 * n23,
-			t12 = n32 * n13 - n33 * n12,
-			t13 = n23 * n12 - n22 * n13,
-
-			det = n11 * t11 + n21 * t12 + n31 * t13;
-
-		if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0 );
-
-		const detInv = 1 / det;
-
-		te[ 0 ] = t11 * detInv;
-		te[ 1 ] = ( n31 * n23 - n33 * n21 ) * detInv;
-		te[ 2 ] = ( n32 * n21 - n31 * n22 ) * detInv;
-
-		te[ 3 ] = t12 * detInv;
-		te[ 4 ] = ( n33 * n11 - n31 * n13 ) * detInv;
-		te[ 5 ] = ( n31 * n12 - n32 * n11 ) * detInv;
-
-		te[ 6 ] = t13 * detInv;
-		te[ 7 ] = ( n21 * n13 - n23 * n11 ) * detInv;
-		te[ 8 ] = ( n22 * n11 - n21 * n12 ) * detInv;
-
-		return this;
-
-	}
-
-	transpose() {
-
-		let tmp;
-		const m = this.elements;
-
-		tmp = m[ 1 ]; m[ 1 ] = m[ 3 ]; m[ 3 ] = tmp;
-		tmp = m[ 2 ]; m[ 2 ] = m[ 6 ]; m[ 6 ] = tmp;
-		tmp = m[ 5 ]; m[ 5 ] = m[ 7 ]; m[ 7 ] = tmp;
-
-		return this;
-
-	}
-
-	getNormalMatrix( matrix4 ) {
-
-		return this.setFromMatrix4( matrix4 ).invert().transpose();
-
-	}
-
-	transposeIntoArray( r ) {
-
-		const m = this.elements;
-
-		r[ 0 ] = m[ 0 ];
-		r[ 1 ] = m[ 3 ];
-		r[ 2 ] = m[ 6 ];
-		r[ 3 ] = m[ 1 ];
-		r[ 4 ] = m[ 4 ];
-		r[ 5 ] = m[ 7 ];
-		r[ 6 ] = m[ 2 ];
-		r[ 7 ] = m[ 5 ];
-		r[ 8 ] = m[ 8 ];
-
-		return this;
-
-	}
-
-	setUvTransform( tx, ty, sx, sy, rotation, cx, cy ) {
-
-		const c = Math.cos( rotation );
-		const s = Math.sin( rotation );
-
-		this.set(
-			sx * c, sx * s, - sx * ( c * cx + s * cy ) + cx + tx,
-			- sy * s, sy * c, - sy * ( - s * cx + c * cy ) + cy + ty,
-			0, 0, 1
-		);
-
-		return this;
-
-	}
-
-	//
-
-	scale( sx, sy ) {
-
-		this.premultiply( _m3.makeScale( sx, sy ) );
-
-		return this;
-
-	}
-
-	rotate( theta ) {
-
-		this.premultiply( _m3.makeRotation( - theta ) );
-
-		return this;
-
-	}
-
-	translate( tx, ty ) {
-
-		this.premultiply( _m3.makeTranslation( tx, ty ) );
-
-		return this;
-
-	}
-
-	// for 2D Transforms
-
-	makeTranslation( x, y ) {
-
-		this.set(
-
-			1, 0, x,
-			0, 1, y,
-			0, 0, 1
-
-		);
-
-		return this;
-
-	}
-
-	makeRotation( theta ) {
-
-		// counterclockwise
-
-		const c = Math.cos( theta );
-		const s = Math.sin( theta );
-
-		this.set(
-
-			c, - s, 0,
-			s, c, 0,
-			0, 0, 1
-
-		);
-
-		return this;
-
-	}
-
-	makeScale( x, y ) {
-
-		this.set(
-
-			x, 0, 0,
-			0, y, 0,
-			0, 0, 1
-
-		);
-
-		return this;
-
-	}
-
-	//
-
-	equals( matrix ) {
-
-		const te = this.elements;
-		const me = matrix.elements;
-
-		for ( let i = 0; i < 9; i ++ ) {
-
-			if ( te[ i ] !== me[ i ] ) return false;
-
-		}
-
-		return true;
-
-	}
-
-	fromArray( array, offset = 0 ) {
-
-		for ( let i = 0; i < 9; i ++ ) {
-
-			this.elements[ i ] = array[ i + offset ];
-
-		}
-
-		return this;
-
-	}
-
-	toArray( array = [], offset = 0 ) {
-
-		const te = this.elements;
-
-		array[ offset ] = te[ 0 ];
-		array[ offset + 1 ] = te[ 1 ];
-		array[ offset + 2 ] = te[ 2 ];
-
-		array[ offset + 3 ] = te[ 3 ];
-		array[ offset + 4 ] = te[ 4 ];
-		array[ offset + 5 ] = te[ 5 ];
-
-		array[ offset + 6 ] = te[ 6 ];
-		array[ offset + 7 ] = te[ 7 ];
-		array[ offset + 8 ] = te[ 8 ];
-
-		return array;
-
-	}
-
-	clone() {
-
-		return new this.constructor().fromArray( this.elements );
-
-	}
-
-}
-
-const _m3 = /*@__PURE__*/ new Matrix3();
-
-function arrayNeedsUint32( array ) {
-
-	// assumes larger values usually on last
-
-	for ( let i = array.length - 1; i >= 0; -- i ) {
-
-		if ( array[ i ] >= 65535 ) return true; // account for PRIMITIVE_RESTART_FIXED_INDEX, #24565
-
-	}
-
-	return false;
-
-}
-
-const TYPED_ARRAYS = {
-	Int8Array: Int8Array,
-	Uint8Array: Uint8Array,
-	Uint8ClampedArray: Uint8ClampedArray,
-	Int16Array: Int16Array,
-	Uint16Array: Uint16Array,
-	Int32Array: Int32Array,
-	Uint32Array: Uint32Array,
-	Float32Array: Float32Array,
-	Float64Array: Float64Array
-};
-
-function getTypedArray( type, buffer ) {
-
-	return new TYPED_ARRAYS[ type ]( buffer );
-
-}
-
-function createElementNS( name ) {
-
-	return document.createElementNS( 'http://www.w3.org/1999/xhtml', name );
-
-}
-
-const _cache = {};
-
-function warnOnce( message ) {
-
-	if ( message in _cache ) return;
-
-	_cache[ message ] = true;
-
-	console.warn( message );
-
-}
-
-function SRGBToLinear( c ) {
-
-	return ( c < 0.04045 ) ? c * 0.0773993808 : Math.pow( c * 0.9478672986 + 0.0521327014, 2.4 );
-
-}
-
-function LinearToSRGB( c ) {
-
-	return ( c < 0.0031308 ) ? c * 12.92 : 1.055 * ( Math.pow( c, 0.41666 ) ) - 0.055;
-
-}
-
-/**
- * Matrices converting P3 <-> Rec. 709 primaries, without gamut mapping
- * or clipping. Based on W3C specifications for sRGB and Display P3,
- * and ICC specifications for the D50 connection space. Values in/out
- * are _linear_ sRGB and _linear_ Display P3.
- *
- * Note that both sRGB and Display P3 use the sRGB transfer functions.
- *
- * Reference:
- * - http://www.russellcottrell.com/photo/matrixCalculator.htm
- */
-
-const LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 = /*@__PURE__*/ new Matrix3().fromArray( [
-	0.8224621, 0.0331941, 0.0170827,
-	0.1775380, 0.9668058, 0.0723974,
-	- 0.0000001, 0.0000001, 0.9105199
-] );
-
-const LINEAR_DISPLAY_P3_TO_LINEAR_SRGB = /*@__PURE__*/ new Matrix3().fromArray( [
-	1.2249401, - 0.0420569, - 0.0196376,
-	- 0.2249404, 1.0420571, - 0.0786361,
-	0.0000001, 0.0000000, 1.0982735
-] );
-
-function DisplayP3ToLinearSRGB( color ) {
-
-	// Display P3 uses the sRGB transfer functions
-	return color.convertSRGBToLinear().applyMatrix3( LINEAR_DISPLAY_P3_TO_LINEAR_SRGB );
-
-}
-
-function LinearSRGBToDisplayP3( color ) {
-
-	// Display P3 uses the sRGB transfer functions
-	return color.applyMatrix3( LINEAR_SRGB_TO_LINEAR_DISPLAY_P3 ).convertLinearToSRGB();
-
-}
-
-// Conversions from <source> to Linear-sRGB reference space.
-const TO_LINEAR = {
-	[ LinearSRGBColorSpace ]: ( color ) => color,
-	[ SRGBColorSpace ]: ( color ) => color.convertSRGBToLinear(),
-	[ DisplayP3ColorSpace ]: DisplayP3ToLinearSRGB,
-};
-
-// Conversions to <target> from Linear-sRGB reference space.
-const FROM_LINEAR = {
-	[ LinearSRGBColorSpace ]: ( color ) => color,
-	[ SRGBColorSpace ]: ( color ) => color.convertLinearToSRGB(),
-	[ DisplayP3ColorSpace ]: LinearSRGBToDisplayP3,
-};
-
-const ColorManagement = {
-
-	enabled: true,
-
-	get legacyMode() {
-
-		console.warn( 'THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.' );
-
-		return ! this.enabled;
-
-	},
-
-	set legacyMode( legacyMode ) {
-
-		console.warn( 'THREE.ColorManagement: .legacyMode=false renamed to .enabled=true in r150.' );
-
-		this.enabled = ! legacyMode;
-
-	},
-
-	get workingColorSpace() {
-
-		return LinearSRGBColorSpace;
-
-	},
-
-	set workingColorSpace( colorSpace ) {
-
-		console.warn( 'THREE.ColorManagement: .workingColorSpace is readonly.' );
-
-	},
-
-	convert: function ( color, sourceColorSpace, targetColorSpace ) {
-
-		if ( this.enabled === false || sourceColorSpace === targetColorSpace || ! sourceColorSpace || ! targetColorSpace ) {
-
-			return color;
-
-		}
-
-		const sourceToLinear = TO_LINEAR[ sourceColorSpace ];
-		const targetFromLinear = FROM_LINEAR[ targetColorSpace ];
-
-		if ( sourceToLinear === undefined || targetFromLinear === undefined ) {
-
-			throw new Error( `Unsupported color space conversion, "${ sourceColorSpace }" to "${ targetColorSpace }".` );
-
-		}
-
-		return targetFromLinear( sourceToLinear( color ) );
-
-	},
-
-	fromWorkingColorSpace: function ( color, targetColorSpace ) {
-
-		return this.convert( color, this.workingColorSpace, targetColorSpace );
-
-	},
-
-	toWorkingColorSpace: function ( color, sourceColorSpace ) {
-
-		return this.convert( color, sourceColorSpace, this.workingColorSpace );
-
-	},
-
-};
-
-let _canvas;
-
-class ImageUtils {
-
-	static getDataURL( image ) {
-
-		if ( /^data:/i.test( image.src ) ) {
-
-			return image.src;
-
-		}
-
-		if ( typeof HTMLCanvasElement === 'undefined' ) {
-
-			return image.src;
-
-		}
-
-		let canvas;
-
-		if ( image instanceof HTMLCanvasElement ) {
-
-			canvas = image;
-
-		} else {
-
-			if ( _canvas === undefined ) _canvas = createElementNS( 'canvas' );
-
-			_canvas.width = image.width;
-			_canvas.height = image.height;
-
-			const context = _canvas.getContext( '2d' );
-
-			if ( image instanceof ImageData ) {
-
-				context.putImageData( image, 0, 0 );
-
-			} else {
-
-				context.drawImage( image, 0, 0, image.width, image.height );
-
-			}
-
-			canvas = _canvas;
-
-		}
-
-		if ( canvas.width > 2048 || canvas.height > 2048 ) {
-
-			console.warn( 'THREE.ImageUtils.getDataURL: Image converted to jpg for performance reasons', image );
-
-			return canvas.toDataURL( 'image/jpeg', 0.6 );
-
-		} else {
-
-			return canvas.toDataURL( 'image/png' );
-
-		}
-
-	}
-
-	static sRGBToLinear( image ) {
-
-		if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||
-			( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||
-			( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {
-
-			const canvas = createElementNS( 'canvas' );
-
-			canvas.width = image.width;
-			canvas.height = image.height;
-
-			const context = canvas.getContext( '2d' );
-			context.drawImage( image, 0, 0, image.width, image.height );
-
-			const imageData = context.getImageData( 0, 0, image.width, image.height );
-			const data = imageData.data;
-
-			for ( let i = 0; i < data.length; i ++ ) {
-
-				data[ i ] = SRGBToLinear( data[ i ] / 255 ) * 255;
-
-			}
-
-			context.putImageData( imageData, 0, 0 );
-
-			return canvas;
-
-		} else if ( image.data ) {
-
-			const data = image.data.slice( 0 );
-
-			for ( let i = 0; i < data.length; i ++ ) {
-
-				if ( data instanceof Uint8Array || data instanceof Uint8ClampedArray ) {
-
-					data[ i ] = Math.floor( SRGBToLinear( data[ i ] / 255 ) * 255 );
-
-				} else {
-
-					// assuming float
-
-					data[ i ] = SRGBToLinear( data[ i ] );
-
-				}
-
-			}
-
-			return {
-				data: data,
-				width: image.width,
-				height: image.height
-			};
-
-		} else {
-
-			console.warn( 'THREE.ImageUtils.sRGBToLinear(): Unsupported image type. No color space conversion applied.' );
-			return image;
-
-		}
-
-	}
-
-}
-
-class Source {
-
-	constructor( data = null ) {
-
-		this.isSource = true;
-
-		this.uuid = generateUUID();
-
-		this.data = data;
-
-		this.version = 0;
-
-	}
-
-	set needsUpdate( value ) {
-
-		if ( value === true ) this.version ++;
-
-	}
-
-	toJSON( meta ) {
-
-		const isRootObject = ( meta === undefined || typeof meta === 'string' );
-
-		if ( ! isRootObject && meta.images[ this.uuid ] !== undefined ) {
-
-			return meta.images[ this.uuid ];
-
-		}
-
-		const output = {
-			uuid: this.uuid,
-			url: ''
-		};
-
-		const data = this.data;
-
-		if ( data !== null ) {
-
-			let url;
-
-			if ( Array.isArray( data ) ) {
-
-				// cube texture
-
-				url = [];
-
-				for ( let i = 0, l = data.length; i < l; i ++ ) {
-
-					if ( data[ i ].isDataTexture ) {
-
-						url.push( serializeImage( data[ i ].image ) );
-
-					} else {
-
-						url.push( serializeImage( data[ i ] ) );
-
-					}
-
-				}
-
-			} else {
-
-				// texture
-
-				url = serializeImage( data );
-
-			}
-
-			output.url = url;
-
-		}
-
-		if ( ! isRootObject ) {
-
-			meta.images[ this.uuid ] = output;
-
-		}
-
-		return output;
-
-	}
-
-}
-
-function serializeImage( image ) {
-
-	if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||
-		( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||
-		( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {
-
-		// default images
-
-		return ImageUtils.getDataURL( image );
-
-	} else {
-
-		if ( image.data ) {
-
-			// images of DataTexture
-
-			return {
-				data: Array.from( image.data ),
-				width: image.width,
-				height: image.height,
-				type: image.data.constructor.name
-			};
-
-		} else {
-
-			console.warn( 'THREE.Texture: Unable to serialize Texture.' );
-			return {};
-
-		}
-
-	}
-
-}
-
-let textureId = 0;
-
-class Texture extends EventDispatcher {
-
-	constructor( image = Texture.DEFAULT_IMAGE, mapping = Texture.DEFAULT_MAPPING, wrapS = ClampToEdgeWrapping, wrapT = ClampToEdgeWrapping, magFilter = LinearFilter, minFilter = LinearMipmapLinearFilter, format = RGBAFormat, type = UnsignedByteType, anisotropy = Texture.DEFAULT_ANISOTROPY, colorSpace = NoColorSpace ) {
-
-		super();
-
-		this.isTexture = true;
-
-		Object.defineProperty( this, 'id', { value: textureId ++ } );
-
-		this.uuid = generateUUID();
-
-		this.name = '';
-
-		this.source = new Source( image );
-		this.mipmaps = [];
-
-		this.mapping = mapping;
-		this.channel = 0;
-
-		this.wrapS = wrapS;
-		this.wrapT = wrapT;
-
-		this.magFilter = magFilter;
-		this.minFilter = minFilter;
-
-		this.anisotropy = anisotropy;
-
-		this.format = format;
-		this.internalFormat = null;
-		this.type = type;
-
-		this.offset = new Vector2( 0, 0 );
-		this.repeat = new Vector2( 1, 1 );
-		this.center = new Vector2( 0, 0 );
-		this.rotation = 0;
-
-		this.matrixAutoUpdate = true;
-		this.matrix = new Matrix3();
-
-		this.generateMipmaps = true;
-		this.premultiplyAlpha = false;
-		this.flipY = true;
-		this.unpackAlignment = 4;	// valid values: 1, 2, 4, 8 (see http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPixelStorei.xml)
-
-		if ( typeof colorSpace === 'string' ) {
-
-			this.colorSpace = colorSpace;
-
-		} else { // @deprecated, r152
-
-			warnOnce( 'THREE.Texture: Property .encoding has been replaced by .colorSpace.' );
-			this.colorSpace = colorSpace === sRGBEncoding ? SRGBColorSpace : NoColorSpace;
-
-		}
-
-
-		this.userData = {};
-
-		this.version = 0;
-		this.onUpdate = null;
-
-		this.isRenderTargetTexture = false; // indicates whether a texture belongs to a render target or not
-		this.needsPMREMUpdate = false; // indicates whether this texture should be processed by PMREMGenerator or not (only relevant for render target textures)
-
-	}
-
-	get image() {
-
-		return this.source.data;
-
-	}
-
-	set image( value = null ) {
-
-		this.source.data = value;
-
-	}
-
-	updateMatrix() {
-
-		this.matrix.setUvTransform( this.offset.x, this.offset.y, this.repeat.x, this.repeat.y, this.rotation, this.center.x, this.center.y );
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-	copy( source ) {
-
-		this.name = source.name;
-
-		this.source = source.source;
-		this.mipmaps = source.mipmaps.slice( 0 );
-
-		this.mapping = source.mapping;
-		this.channel = source.channel;
-
-		this.wrapS = source.wrapS;
-		this.wrapT = source.wrapT;
-
-		this.magFilter = source.magFilter;
-		this.minFilter = source.minFilter;
-
-		this.anisotropy = source.anisotropy;
-
-		this.format = source.format;
-		this.internalFormat = source.internalFormat;
-		this.type = source.type;
-
-		this.offset.copy( source.offset );
-		this.repeat.copy( source.repeat );
-		this.center.copy( source.center );
-		this.rotation = source.rotation;
-
-		this.matrixAutoUpdate = source.matrixAutoUpdate;
-		this.matrix.copy( source.matrix );
-
-		this.generateMipmaps = source.generateMipmaps;
-		this.premultiplyAlpha = source.premultiplyAlpha;
-		this.flipY = source.flipY;
-		this.unpackAlignment = source.unpackAlignment;
-		this.colorSpace = source.colorSpace;
-
-		this.userData = JSON.parse( JSON.stringify( source.userData ) );
-
-		this.needsUpdate = true;
-
-		return this;
-
-	}
-
-	toJSON( meta ) {
-
-		const isRootObject = ( meta === undefined || typeof meta === 'string' );
-
-		if ( ! isRootObject && meta.textures[ this.uuid ] !== undefined ) {
-
-			return meta.textures[ this.uuid ];
-
-		}
-
-		const output = {
-
-			metadata: {
-				version: 4.5,
-				type: 'Texture',
-				generator: 'Texture.toJSON'
-			},
-
-			uuid: this.uuid,
-			name: this.name,
-
-			image: this.source.toJSON( meta ).uuid,
-
-			mapping: this.mapping,
-			channel: this.channel,
-
-			repeat: [ this.repeat.x, this.repeat.y ],
-			offset: [ this.offset.x, this.offset.y ],
-			center: [ this.center.x, this.center.y ],
-			rotation: this.rotation,
-
-			wrap: [ this.wrapS, this.wrapT ],
-
-			format: this.format,
-			internalFormat: this.internalFormat,
-			type: this.type,
-			colorSpace: this.colorSpace,
-
-			minFilter: this.minFilter,
-			magFilter: this.magFilter,
-			anisotropy: this.anisotropy,
-
-			flipY: this.flipY,
-
-			generateMipmaps: this.generateMipmaps,
-			premultiplyAlpha: this.premultiplyAlpha,
-			unpackAlignment: this.unpackAlignment
-
-		};
-
-		if ( Object.keys( this.userData ).length > 0 ) output.userData = this.userData;
-
-		if ( ! isRootObject ) {
-
-			meta.textures[ this.uuid ] = output;
-
-		}
-
-		return output;
-
-	}
-
-	dispose() {
-
-		this.dispatchEvent( { type: 'dispose' } );
-
-	}
-
-	transformUv( uv ) {
-
-		if ( this.mapping !== UVMapping ) return uv;
-
-		uv.applyMatrix3( this.matrix );
-
-		if ( uv.x < 0 || uv.x > 1 ) {
-
-			switch ( this.wrapS ) {
-
-				case RepeatWrapping:
-
-					uv.x = uv.x - Math.floor( uv.x );
-					break;
-
-				case ClampToEdgeWrapping:
-
-					uv.x = uv.x < 0 ? 0 : 1;
-					break;
-
-				case MirroredRepeatWrapping:
-
-					if ( Math.abs( Math.floor( uv.x ) % 2 ) === 1 ) {
-
-						uv.x = Math.ceil( uv.x ) - uv.x;
-
-					} else {
-
-						uv.x = uv.x - Math.floor( uv.x );
-
-					}
-
-					break;
-
-			}
-
-		}
-
-		if ( uv.y < 0 || uv.y > 1 ) {
-
-			switch ( this.wrapT ) {
-
-				case RepeatWrapping:
-
-					uv.y = uv.y - Math.floor( uv.y );
-					break;
-
-				case ClampToEdgeWrapping:
-
-					uv.y = uv.y < 0 ? 0 : 1;
-					break;
-
-				case MirroredRepeatWrapping:
-
-					if ( Math.abs( Math.floor( uv.y ) % 2 ) === 1 ) {
-
-						uv.y = Math.ceil( uv.y ) - uv.y;
-
-					} else {
-
-						uv.y = uv.y - Math.floor( uv.y );
-
-					}
-
-					break;
-
-			}
-
-		}
-
-		if ( this.flipY ) {
-
-			uv.y = 1 - uv.y;
-
-		}
-
-		return uv;
-
-	}
-
-	set needsUpdate( value ) {
-
-		if ( value === true ) {
-
-			this.version ++;
-			this.source.needsUpdate = true;
-
-		}
-
-	}
-
-	get encoding() { // @deprecated, r152
-
-		warnOnce( 'THREE.Texture: Property .encoding has been replaced by .colorSpace.' );
-		return this.colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;
-
-	}
-
-	set encoding( encoding ) { // @deprecated, r152
-
-		warnOnce( 'THREE.Texture: Property .encoding has been replaced by .colorSpace.' );
-		this.colorSpace = encoding === sRGBEncoding ? SRGBColorSpace : NoColorSpace;
-
-	}
-
-}
-
-Texture.DEFAULT_IMAGE = null;
-Texture.DEFAULT_MAPPING = UVMapping;
-Texture.DEFAULT_ANISOTROPY = 1;
-
-class Vector4 {
-
-	constructor( x = 0, y = 0, z = 0, w = 1 ) {
-
-		Vector4.prototype.isVector4 = true;
-
-		this.x = x;
-		this.y = y;
-		this.z = z;
-		this.w = w;
-
-	}
-
-	get width() {
-
-		return this.z;
-
-	}
-
-	set width( value ) {
-
-		this.z = value;
-
-	}
-
-	get height() {
-
-		return this.w;
-
-	}
-
-	set height( value ) {
-
-		this.w = value;
-
-	}
-
-	set( x, y, z, w ) {
-
-		this.x = x;
-		this.y = y;
-		this.z = z;
-		this.w = w;
-
-		return this;
-
-	}
-
-	setScalar( scalar ) {
-
-		this.x = scalar;
-		this.y = scalar;
-		this.z = scalar;
-		this.w = scalar;
-
-		return this;
-
-	}
-
-	setX( x ) {
-
-		this.x = x;
-
-		return this;
-
-	}
-
-	setY( y ) {
-
-		this.y = y;
-
-		return this;
-
-	}
-
-	setZ( z ) {
-
-		this.z = z;
-
-		return this;
-
-	}
-
-	setW( w ) {
-
-		this.w = w;
-
-		return this;
-
-	}
-
-	setComponent( index, value ) {
-
-		switch ( index ) {
-
-			case 0: this.x = value; break;
-			case 1: this.y = value; break;
-			case 2: this.z = value; break;
-			case 3: this.w = value; break;
-			default: throw new Error( 'index is out of range: ' + index );
-
-		}
-
-		return this;
-
-	}
-
-	getComponent( index ) {
-
-		switch ( index ) {
-
-			case 0: return this.x;
-			case 1: return this.y;
-			case 2: return this.z;
-			case 3: return this.w;
-			default: throw new Error( 'index is out of range: ' + index );
-
-		}
-
-	}
-
-	clone() {
-
-		return new this.constructor( this.x, this.y, this.z, this.w );
-
-	}
-
-	copy( v ) {
-
-		this.x = v.x;
-		this.y = v.y;
-		this.z = v.z;
-		this.w = ( v.w !== undefined ) ? v.w : 1;
-
-		return this;
-
-	}
-
-	add( v ) {
-
-		this.x += v.x;
-		this.y += v.y;
-		this.z += v.z;
-		this.w += v.w;
-
-		return this;
-
-	}
-
-	addScalar( s ) {
-
-		this.x += s;
-		this.y += s;
-		this.z += s;
-		this.w += s;
-
-		return this;
-
-	}
-
-	addVectors( a, b ) {
-
-		this.x = a.x + b.x;
-		this.y = a.y + b.y;
-		this.z = a.z + b.z;
-		this.w = a.w + b.w;
-
-		return this;
-
-	}
-
-	addScaledVector( v, s ) {
-
-		this.x += v.x * s;
-		this.y += v.y * s;
-		this.z += v.z * s;
-		this.w += v.w * s;
-
-		return this;
-
-	}
-
-	sub( v ) {
-
-		this.x -= v.x;
-		this.y -= v.y;
-		this.z -= v.z;
-		this.w -= v.w;
-
-		return this;
-
-	}
-
-	subScalar( s ) {
-
-		this.x -= s;
-		this.y -= s;
-		this.z -= s;
-		this.w -= s;
-
-		return this;
-
-	}
-
-	subVectors( a, b ) {
-
-		this.x = a.x - b.x;
-		this.y = a.y - b.y;
-		this.z = a.z - b.z;
-		this.w = a.w - b.w;
-
-		return this;
-
-	}
-
-	multiply( v ) {
-
-		this.x *= v.x;
-		this.y *= v.y;
-		this.z *= v.z;
-		this.w *= v.w;
-
-		return this;
-
-	}
-
-	multiplyScalar( scalar ) {
-
-		this.x *= scalar;
-		this.y *= scalar;
-		this.z *= scalar;
-		this.w *= scalar;
-
-		return this;
-
-	}
-
-	applyMatrix4( m ) {
-
-		const x = this.x, y = this.y, z = this.z, w = this.w;
-		const e = m.elements;
-
-		this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] * w;
-		this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] * w;
-		this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] * w;
-		this.w = e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] * w;
-
-		return this;
-
-	}
-
-	divideScalar( scalar ) {
-
-		return this.multiplyScalar( 1 / scalar );
-
-	}
-
-	setAxisAngleFromQuaternion( q ) {
-
-		// http://www.euclideanspace.com/maths/geometry/rotations/conversions/quaternionToAngle/index.htm
-
-		// q is assumed to be normalized
-
-		this.w = 2 * Math.acos( q.w );
-
-		const s = Math.sqrt( 1 - q.w * q.w );
-
-		if ( s < 0.0001 ) {
-
-			this.x = 1;
-			this.y = 0;
-			this.z = 0;
-
-		} else {
-
-			this.x = q.x / s;
-			this.y = q.y / s;
-			this.z = q.z / s;
-
-		}
-
-		return this;
-
-	}
-
-	setAxisAngleFromRotationMatrix( m ) {
-
-		// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToAngle/index.htm
-
-		// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
-
-		let angle, x, y, z; // variables for result
-		const epsilon = 0.01,		// margin to allow for rounding errors
-			epsilon2 = 0.1,		// margin to distinguish between 0 and 180 degrees
-
-			te = m.elements,
-
-			m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],
-			m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],
-			m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];
-
-		if ( ( Math.abs( m12 - m21 ) < epsilon ) &&
-		     ( Math.abs( m13 - m31 ) < epsilon ) &&
-		     ( Math.abs( m23 - m32 ) < epsilon ) ) {
-
-			// singularity found
-			// first check for identity matrix which must have +1 for all terms
-			// in leading diagonal and zero in other terms
-
-			if ( ( Math.abs( m12 + m21 ) < epsilon2 ) &&
-			     ( Math.abs( m13 + m31 ) < epsilon2 ) &&
-			     ( Math.abs( m23 + m32 ) < epsilon2 ) &&
-			     ( Math.abs( m11 + m22 + m33 - 3 ) < epsilon2 ) ) {
-
-				// this singularity is identity matrix so angle = 0
-
-				this.set( 1, 0, 0, 0 );
-
-				return this; // zero angle, arbitrary axis
-
-			}
-
-			// otherwise this singularity is angle = 180
-
-			angle = Math.PI;
-
-			const xx = ( m11 + 1 ) / 2;
-			const yy = ( m22 + 1 ) / 2;
-			const zz = ( m33 + 1 ) / 2;
-			const xy = ( m12 + m21 ) / 4;
-			const xz = ( m13 + m31 ) / 4;
-			const yz = ( m23 + m32 ) / 4;
-
-			if ( ( xx > yy ) && ( xx > zz ) ) {
-
-				// m11 is the largest diagonal term
-
-				if ( xx < epsilon ) {
-
-					x = 0;
-					y = 0.707106781;
-					z = 0.707106781;
-
-				} else {
-
-					x = Math.sqrt( xx );
-					y = xy / x;
-					z = xz / x;
-
-				}
-
-			} else if ( yy > zz ) {
-
-				// m22 is the largest diagonal term
-
-				if ( yy < epsilon ) {
-
-					x = 0.707106781;
-					y = 0;
-					z = 0.707106781;
-
-				} else {
-
-					y = Math.sqrt( yy );
-					x = xy / y;
-					z = yz / y;
-
-				}
-
-			} else {
-
-				// m33 is the largest diagonal term so base result on this
-
-				if ( zz < epsilon ) {
-
-					x = 0.707106781;
-					y = 0.707106781;
-					z = 0;
-
-				} else {
-
-					z = Math.sqrt( zz );
-					x = xz / z;
-					y = yz / z;
-
-				}
-
-			}
-
-			this.set( x, y, z, angle );
-
-			return this; // return 180 deg rotation
-
-		}
-
-		// as we have reached here there are no singularities so we can handle normally
-
-		let s = Math.sqrt( ( m32 - m23 ) * ( m32 - m23 ) +
-			( m13 - m31 ) * ( m13 - m31 ) +
-			( m21 - m12 ) * ( m21 - m12 ) ); // used to normalize
-
-		if ( Math.abs( s ) < 0.001 ) s = 1;
-
-		// prevent divide by zero, should not happen if matrix is orthogonal and should be
-		// caught by singularity test above, but I've left it in just in case
-
-		this.x = ( m32 - m23 ) / s;
-		this.y = ( m13 - m31 ) / s;
-		this.z = ( m21 - m12 ) / s;
-		this.w = Math.acos( ( m11 + m22 + m33 - 1 ) / 2 );
-
-		return this;
-
-	}
-
-	min( v ) {
-
-		this.x = Math.min( this.x, v.x );
-		this.y = Math.min( this.y, v.y );
-		this.z = Math.min( this.z, v.z );
-		this.w = Math.min( this.w, v.w );
-
-		return this;
-
-	}
-
-	max( v ) {
-
-		this.x = Math.max( this.x, v.x );
-		this.y = Math.max( this.y, v.y );
-		this.z = Math.max( this.z, v.z );
-		this.w = Math.max( this.w, v.w );
-
-		return this;
-
-	}
-
-	clamp( min, max ) {
-
-		// assumes min < max, componentwise
-
-		this.x = Math.max( min.x, Math.min( max.x, this.x ) );
-		this.y = Math.max( min.y, Math.min( max.y, this.y ) );
-		this.z = Math.max( min.z, Math.min( max.z, this.z ) );
-		this.w = Math.max( min.w, Math.min( max.w, this.w ) );
-
-		return this;
-
-	}
-
-	clampScalar( minVal, maxVal ) {
-
-		this.x = Math.max( minVal, Math.min( maxVal, this.x ) );
-		this.y = Math.max( minVal, Math.min( maxVal, this.y ) );
-		this.z = Math.max( minVal, Math.min( maxVal, this.z ) );
-		this.w = Math.max( minVal, Math.min( maxVal, this.w ) );
-
-		return this;
-
-	}
-
-	clampLength( min, max ) {
-
-		const length = this.length();
-
-		return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );
-
-	}
-
-	floor() {
-
-		this.x = Math.floor( this.x );
-		this.y = Math.floor( this.y );
-		this.z = Math.floor( this.z );
-		this.w = Math.floor( this.w );
-
-		return this;
-
-	}
-
-	ceil() {
-
-		this.x = Math.ceil( this.x );
-		this.y = Math.ceil( this.y );
-		this.z = Math.ceil( this.z );
-		this.w = Math.ceil( this.w );
-
-		return this;
-
-	}
-
-	round() {
-
-		this.x = Math.round( this.x );
-		this.y = Math.round( this.y );
-		this.z = Math.round( this.z );
-		this.w = Math.round( this.w );
-
-		return this;
-
-	}
-
-	roundToZero() {
-
-		this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );
-		this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );
-		this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );
-		this.w = ( this.w < 0 ) ? Math.ceil( this.w ) : Math.floor( this.w );
-
-		return this;
-
-	}
-
-	negate() {
-
-		this.x = - this.x;
-		this.y = - this.y;
-		this.z = - this.z;
-		this.w = - this.w;
-
-		return this;
-
-	}
-
-	dot( v ) {
-
-		return this.x * v.x + this.y * v.y + this.z * v.z + this.w * v.w;
-
-	}
-
-	lengthSq() {
-
-		return this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w;
-
-	}
-
-	length() {
-
-		return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z + this.w * this.w );
-
-	}
-
-	manhattanLength() {
-
-		return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z ) + Math.abs( this.w );
-
-	}
-
-	normalize() {
-
-		return this.divideScalar( this.length() || 1 );
-
-	}
-
-	setLength( length ) {
-
-		return this.normalize().multiplyScalar( length );
-
-	}
-
-	lerp( v, alpha ) {
-
-		this.x += ( v.x - this.x ) * alpha;
-		this.y += ( v.y - this.y ) * alpha;
-		this.z += ( v.z - this.z ) * alpha;
-		this.w += ( v.w - this.w ) * alpha;
-
-		return this;
-
-	}
-
-	lerpVectors( v1, v2, alpha ) {
-
-		this.x = v1.x + ( v2.x - v1.x ) * alpha;
-		this.y = v1.y + ( v2.y - v1.y ) * alpha;
-		this.z = v1.z + ( v2.z - v1.z ) * alpha;
-		this.w = v1.w + ( v2.w - v1.w ) * alpha;
-
-		return this;
-
-	}
-
-	equals( v ) {
-
-		return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) && ( v.w === this.w ) );
-
-	}
-
-	fromArray( array, offset = 0 ) {
-
-		this.x = array[ offset ];
-		this.y = array[ offset + 1 ];
-		this.z = array[ offset + 2 ];
-		this.w = array[ offset + 3 ];
-
-		return this;
-
-	}
-
-	toArray( array = [], offset = 0 ) {
-
-		array[ offset ] = this.x;
-		array[ offset + 1 ] = this.y;
-		array[ offset + 2 ] = this.z;
-		array[ offset + 3 ] = this.w;
-
-		return array;
-
-	}
-
-	fromBufferAttribute( attribute, index ) {
-
-		this.x = attribute.getX( index );
-		this.y = attribute.getY( index );
-		this.z = attribute.getZ( index );
-		this.w = attribute.getW( index );
-
-		return this;
-
-	}
-
-	random() {
-
-		this.x = Math.random();
-		this.y = Math.random();
-		this.z = Math.random();
-		this.w = Math.random();
-
-		return this;
-
-	}
-
-	*[ Symbol.iterator ]() {
-
-		yield this.x;
-		yield this.y;
-		yield this.z;
-		yield this.w;
-
-	}
-
-}
-
-/*
- In options, we can specify:
- * Texture parameters for an auto-generated target texture
- * depthBuffer/stencilBuffer: Booleans to indicate if we should generate these buffers
-*/
-class WebGLRenderTarget extends EventDispatcher {
-
-	constructor( width = 1, height = 1, options = {} ) {
-
-		super();
-
-		this.isWebGLRenderTarget = true;
-
-		this.width = width;
-		this.height = height;
-		this.depth = 1;
-
-		this.scissor = new Vector4( 0, 0, width, height );
-		this.scissorTest = false;
-
-		this.viewport = new Vector4( 0, 0, width, height );
-
-		const image = { width: width, height: height, depth: 1 };
-
-		if ( options.encoding !== undefined ) {
-
-			// @deprecated, r152
-			warnOnce( 'THREE.WebGLRenderTarget: option.encoding has been replaced by option.colorSpace.' );
-			options.colorSpace = options.encoding === sRGBEncoding ? SRGBColorSpace : NoColorSpace;
-
-		}
-
-		this.texture = new Texture( image, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );
-		this.texture.isRenderTargetTexture = true;
-
-		this.texture.flipY = false;
-		this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;
-		this.texture.internalFormat = options.internalFormat !== undefined ? options.internalFormat : null;
-		this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;
-
-		this.depthBuffer = options.depthBuffer !== undefined ? options.depthBuffer : true;
-		this.stencilBuffer = options.stencilBuffer !== undefined ? options.stencilBuffer : false;
-
-		this.depthTexture = options.depthTexture !== undefined ? options.depthTexture : null;
-
-		this.samples = options.samples !== undefined ? options.samples : 0;
-
-	}
-
-	setSize( width, height, depth = 1 ) {
-
-		if ( this.width !== width || this.height !== height || this.depth !== depth ) {
-
-			this.width = width;
-			this.height = height;
-			this.depth = depth;
-
-			this.texture.image.width = width;
-			this.texture.image.height = height;
-			this.texture.image.depth = depth;
-
-			this.dispose();
-
-		}
-
-		this.viewport.set( 0, 0, width, height );
-		this.scissor.set( 0, 0, width, height );
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-	copy( source ) {
-
-		this.width = source.width;
-		this.height = source.height;
-		this.depth = source.depth;
-
-		this.scissor.copy( source.scissor );
-		this.scissorTest = source.scissorTest;
-
-		this.viewport.copy( source.viewport );
-
-		this.texture = source.texture.clone();
-		this.texture.isRenderTargetTexture = true;
-
-		// ensure image object is not shared, see #20328
-
-		const image = Object.assign( {}, source.texture.image );
-		this.texture.source = new Source( image );
-
-		this.depthBuffer = source.depthBuffer;
-		this.stencilBuffer = source.stencilBuffer;
-
-		if ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();
-
-		this.samples = source.samples;
-
-		return this;
-
-	}
-
-	dispose() {
-
-		this.dispatchEvent( { type: 'dispose' } );
-
-	}
-
-}
-
-class DataArrayTexture extends Texture {
-
-	constructor( data = null, width = 1, height = 1, depth = 1 ) {
-
-		super( null );
-
-		this.isDataArrayTexture = true;
-
-		this.image = { data, width, height, depth };
-
-		this.magFilter = NearestFilter;
-		this.minFilter = NearestFilter;
-
-		this.wrapR = ClampToEdgeWrapping;
-
-		this.generateMipmaps = false;
-		this.flipY = false;
-		this.unpackAlignment = 1;
-
-	}
-
-}
-
-class WebGLArrayRenderTarget extends WebGLRenderTarget {
-
-	constructor( width = 1, height = 1, depth = 1 ) {
-
-		super( width, height );
-
-		this.isWebGLArrayRenderTarget = true;
-
-		this.depth = depth;
-
-		this.texture = new DataArrayTexture( null, width, height, depth );
-
-		this.texture.isRenderTargetTexture = true;
-
-	}
-
-}
-
-class Data3DTexture extends Texture {
-
-	constructor( data = null, width = 1, height = 1, depth = 1 ) {
-
-		// We're going to add .setXXX() methods for setting properties later.
-		// Users can still set in DataTexture3D directly.
-		//
-		//	const texture = new THREE.DataTexture3D( data, width, height, depth );
-		// 	texture.anisotropy = 16;
-		//
-		// See #14839
-
-		super( null );
-
-		this.isData3DTexture = true;
-
-		this.image = { data, width, height, depth };
-
-		this.magFilter = NearestFilter;
-		this.minFilter = NearestFilter;
-
-		this.wrapR = ClampToEdgeWrapping;
-
-		this.generateMipmaps = false;
-		this.flipY = false;
-		this.unpackAlignment = 1;
-
-	}
-
-}
-
-class WebGL3DRenderTarget extends WebGLRenderTarget {
-
-	constructor( width = 1, height = 1, depth = 1 ) {
-
-		super( width, height );
-
-		this.isWebGL3DRenderTarget = true;
-
-		this.depth = depth;
-
-		this.texture = new Data3DTexture( null, width, height, depth );
-
-		this.texture.isRenderTargetTexture = true;
-
-	}
-
-}
-
-class WebGLMultipleRenderTargets extends WebGLRenderTarget {
-
-	constructor( width = 1, height = 1, count = 1, options = {} ) {
-
-		super( width, height, options );
-
-		this.isWebGLMultipleRenderTargets = true;
-
-		const texture = this.texture;
-
-		this.texture = [];
-
-		for ( let i = 0; i < count; i ++ ) {
-
-			this.texture[ i ] = texture.clone();
-			this.texture[ i ].isRenderTargetTexture = true;
-
-		}
-
-	}
-
-	setSize( width, height, depth = 1 ) {
-
-		if ( this.width !== width || this.height !== height || this.depth !== depth ) {
-
-			this.width = width;
-			this.height = height;
-			this.depth = depth;
-
-			for ( let i = 0, il = this.texture.length; i < il; i ++ ) {
-
-				this.texture[ i ].image.width = width;
-				this.texture[ i ].image.height = height;
-				this.texture[ i ].image.depth = depth;
-
-			}
-
-			this.dispose();
-
-		}
-
-		this.viewport.set( 0, 0, width, height );
-		this.scissor.set( 0, 0, width, height );
-
-		return this;
-
-	}
-
-	copy( source ) {
-
-		this.dispose();
-
-		this.width = source.width;
-		this.height = source.height;
-		this.depth = source.depth;
-
-		this.scissor.copy( source.scissor );
-		this.scissorTest = source.scissorTest;
-
-		this.viewport.copy( source.viewport );
-
-		this.depthBuffer = source.depthBuffer;
-		this.stencilBuffer = source.stencilBuffer;
-
-		if ( source.depthTexture !== null ) this.depthTexture = source.depthTexture.clone();
-
-		this.texture.length = 0;
-
-		for ( let i = 0, il = source.texture.length; i < il; i ++ ) {
-
-			this.texture[ i ] = source.texture[ i ].clone();
-			this.texture[ i ].isRenderTargetTexture = true;
-
-		}
-
-		return this;
-
-	}
-
-}
-
-class Quaternion {
-
-	constructor( x = 0, y = 0, z = 0, w = 1 ) {
-
-		this.isQuaternion = true;
-
-		this._x = x;
-		this._y = y;
-		this._z = z;
-		this._w = w;
-
-	}
-
-	static slerpFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1, t ) {
-
-		// fuzz-free, array-based Quaternion SLERP operation
-
-		let x0 = src0[ srcOffset0 + 0 ],
-			y0 = src0[ srcOffset0 + 1 ],
-			z0 = src0[ srcOffset0 + 2 ],
-			w0 = src0[ srcOffset0 + 3 ];
-
-		const x1 = src1[ srcOffset1 + 0 ],
-			y1 = src1[ srcOffset1 + 1 ],
-			z1 = src1[ srcOffset1 + 2 ],
-			w1 = src1[ srcOffset1 + 3 ];
-
-		if ( t === 0 ) {
-
-			dst[ dstOffset + 0 ] = x0;
-			dst[ dstOffset + 1 ] = y0;
-			dst[ dstOffset + 2 ] = z0;
-			dst[ dstOffset + 3 ] = w0;
-			return;
-
-		}
-
-		if ( t === 1 ) {
-
-			dst[ dstOffset + 0 ] = x1;
-			dst[ dstOffset + 1 ] = y1;
-			dst[ dstOffset + 2 ] = z1;
-			dst[ dstOffset + 3 ] = w1;
-			return;
-
-		}
-
-		if ( w0 !== w1 || x0 !== x1 || y0 !== y1 || z0 !== z1 ) {
-
-			let s = 1 - t;
-			const cos = x0 * x1 + y0 * y1 + z0 * z1 + w0 * w1,
-				dir = ( cos >= 0 ? 1 : - 1 ),
-				sqrSin = 1 - cos * cos;
-
-			// Skip the Slerp for tiny steps to avoid numeric problems:
-			if ( sqrSin > Number.EPSILON ) {
-
-				const sin = Math.sqrt( sqrSin ),
-					len = Math.atan2( sin, cos * dir );
-
-				s = Math.sin( s * len ) / sin;
-				t = Math.sin( t * len ) / sin;
-
-			}
-
-			const tDir = t * dir;
-
-			x0 = x0 * s + x1 * tDir;
-			y0 = y0 * s + y1 * tDir;
-			z0 = z0 * s + z1 * tDir;
-			w0 = w0 * s + w1 * tDir;
-
-			// Normalize in case we just did a lerp:
-			if ( s === 1 - t ) {
-
-				const f = 1 / Math.sqrt( x0 * x0 + y0 * y0 + z0 * z0 + w0 * w0 );
-
-				x0 *= f;
-				y0 *= f;
-				z0 *= f;
-				w0 *= f;
-
-			}
-
-		}
-
-		dst[ dstOffset ] = x0;
-		dst[ dstOffset + 1 ] = y0;
-		dst[ dstOffset + 2 ] = z0;
-		dst[ dstOffset + 3 ] = w0;
-
-	}
-
-	static multiplyQuaternionsFlat( dst, dstOffset, src0, srcOffset0, src1, srcOffset1 ) {
-
-		const x0 = src0[ srcOffset0 ];
-		const y0 = src0[ srcOffset0 + 1 ];
-		const z0 = src0[ srcOffset0 + 2 ];
-		const w0 = src0[ srcOffset0 + 3 ];
-
-		const x1 = src1[ srcOffset1 ];
-		const y1 = src1[ srcOffset1 + 1 ];
-		const z1 = src1[ srcOffset1 + 2 ];
-		const w1 = src1[ srcOffset1 + 3 ];
-
-		dst[ dstOffset ] = x0 * w1 + w0 * x1 + y0 * z1 - z0 * y1;
-		dst[ dstOffset + 1 ] = y0 * w1 + w0 * y1 + z0 * x1 - x0 * z1;
-		dst[ dstOffset + 2 ] = z0 * w1 + w0 * z1 + x0 * y1 - y0 * x1;
-		dst[ dstOffset + 3 ] = w0 * w1 - x0 * x1 - y0 * y1 - z0 * z1;
-
-		return dst;
-
-	}
-
-	get x() {
-
-		return this._x;
-
-	}
-
-	set x( value ) {
-
-		this._x = value;
-		this._onChangeCallback();
-
-	}
-
-	get y() {
-
-		return this._y;
-
-	}
-
-	set y( value ) {
-
-		this._y = value;
-		this._onChangeCallback();
-
-	}
-
-	get z() {
-
-		return this._z;
-
-	}
-
-	set z( value ) {
-
-		this._z = value;
-		this._onChangeCallback();
-
-	}
-
-	get w() {
-
-		return this._w;
-
-	}
-
-	set w( value ) {
-
-		this._w = value;
-		this._onChangeCallback();
-
-	}
-
-	set( x, y, z, w ) {
-
-		this._x = x;
-		this._y = y;
-		this._z = z;
-		this._w = w;
-
-		this._onChangeCallback();
-
-		return this;
-
-	}
-
-	clone() {
-
-		return new this.constructor( this._x, this._y, this._z, this._w );
-
-	}
-
-	copy( quaternion ) {
-
-		this._x = quaternion.x;
-		this._y = quaternion.y;
-		this._z = quaternion.z;
-		this._w = quaternion.w;
-
-		this._onChangeCallback();
-
-		return this;
-
-	}
-
-	setFromEuler( euler, update ) {
-
-		const x = euler._x, y = euler._y, z = euler._z, order = euler._order;
-
-		// http://www.mathworks.com/matlabcentral/fileexchange/
-		// 	20696-function-to-convert-between-dcm-euler-angles-quaternions-and-euler-vectors/
-		//	content/SpinCalc.m
-
-		const cos = Math.cos;
-		const sin = Math.sin;
-
-		const c1 = cos( x / 2 );
-		const c2 = cos( y / 2 );
-		const c3 = cos( z / 2 );
-
-		const s1 = sin( x / 2 );
-		const s2 = sin( y / 2 );
-		const s3 = sin( z / 2 );
-
-		switch ( order ) {
-
-			case 'XYZ':
-				this._x = s1 * c2 * c3 + c1 * s2 * s3;
-				this._y = c1 * s2 * c3 - s1 * c2 * s3;
-				this._z = c1 * c2 * s3 + s1 * s2 * c3;
-				this._w = c1 * c2 * c3 - s1 * s2 * s3;
-				break;
-
-			case 'YXZ':
-				this._x = s1 * c2 * c3 + c1 * s2 * s3;
-				this._y = c1 * s2 * c3 - s1 * c2 * s3;
-				this._z = c1 * c2 * s3 - s1 * s2 * c3;
-				this._w = c1 * c2 * c3 + s1 * s2 * s3;
-				break;
-
-			case 'ZXY':
-				this._x = s1 * c2 * c3 - c1 * s2 * s3;
-				this._y = c1 * s2 * c3 + s1 * c2 * s3;
-				this._z = c1 * c2 * s3 + s1 * s2 * c3;
-				this._w = c1 * c2 * c3 - s1 * s2 * s3;
-				break;
-
-			case 'ZYX':
-				this._x = s1 * c2 * c3 - c1 * s2 * s3;
-				this._y = c1 * s2 * c3 + s1 * c2 * s3;
-				this._z = c1 * c2 * s3 - s1 * s2 * c3;
-				this._w = c1 * c2 * c3 + s1 * s2 * s3;
-				break;
-
-			case 'YZX':
-				this._x = s1 * c2 * c3 + c1 * s2 * s3;
-				this._y = c1 * s2 * c3 + s1 * c2 * s3;
-				this._z = c1 * c2 * s3 - s1 * s2 * c3;
-				this._w = c1 * c2 * c3 - s1 * s2 * s3;
-				break;
-
-			case 'XZY':
-				this._x = s1 * c2 * c3 - c1 * s2 * s3;
-				this._y = c1 * s2 * c3 - s1 * c2 * s3;
-				this._z = c1 * c2 * s3 + s1 * s2 * c3;
-				this._w = c1 * c2 * c3 + s1 * s2 * s3;
-				break;
-
-			default:
-				console.warn( 'THREE.Quaternion: .setFromEuler() encountered an unknown order: ' + order );
-
-		}
-
-		if ( update !== false ) this._onChangeCallback();
-
-		return this;
-
-	}
-
-	setFromAxisAngle( axis, angle ) {
-
-		// http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/index.htm
-
-		// assumes axis is normalized
-
-		const halfAngle = angle / 2, s = Math.sin( halfAngle );
-
-		this._x = axis.x * s;
-		this._y = axis.y * s;
-		this._z = axis.z * s;
-		this._w = Math.cos( halfAngle );
-
-		this._onChangeCallback();
-
-		return this;
-
-	}
-
-	setFromRotationMatrix( m ) {
-
-		// http://www.euclideanspace.com/maths/geometry/rotations/conversions/matrixToQuaternion/index.htm
-
-		// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
-
-		const te = m.elements,
-
-			m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ],
-			m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ],
-			m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ],
-
-			trace = m11 + m22 + m33;
-
-		if ( trace > 0 ) {
-
-			const s = 0.5 / Math.sqrt( trace + 1.0 );
-
-			this._w = 0.25 / s;
-			this._x = ( m32 - m23 ) * s;
-			this._y = ( m13 - m31 ) * s;
-			this._z = ( m21 - m12 ) * s;
-
-		} else if ( m11 > m22 && m11 > m33 ) {
-
-			const s = 2.0 * Math.sqrt( 1.0 + m11 - m22 - m33 );
-
-			this._w = ( m32 - m23 ) / s;
-			this._x = 0.25 * s;
-			this._y = ( m12 + m21 ) / s;
-			this._z = ( m13 + m31 ) / s;
-
-		} else if ( m22 > m33 ) {
-
-			const s = 2.0 * Math.sqrt( 1.0 + m22 - m11 - m33 );
-
-			this._w = ( m13 - m31 ) / s;
-			this._x = ( m12 + m21 ) / s;
-			this._y = 0.25 * s;
-			this._z = ( m23 + m32 ) / s;
-
-		} else {
-
-			const s = 2.0 * Math.sqrt( 1.0 + m33 - m11 - m22 );
-
-			this._w = ( m21 - m12 ) / s;
-			this._x = ( m13 + m31 ) / s;
-			this._y = ( m23 + m32 ) / s;
-			this._z = 0.25 * s;
-
-		}
-
-		this._onChangeCallback();
-
-		return this;
-
-	}
-
-	setFromUnitVectors( vFrom, vTo ) {
-
-		// assumes direction vectors vFrom and vTo are normalized
-
-		let r = vFrom.dot( vTo ) + 1;
-
-		if ( r < Number.EPSILON ) {
-
-			// vFrom and vTo point in opposite directions
-
-			r = 0;
-
-			if ( Math.abs( vFrom.x ) > Math.abs( vFrom.z ) ) {
-
-				this._x = - vFrom.y;
-				this._y = vFrom.x;
-				this._z = 0;
-				this._w = r;
-
-			} else {
-
-				this._x = 0;
-				this._y = - vFrom.z;
-				this._z = vFrom.y;
-				this._w = r;
-
-			}
-
-		} else {
-
-			// crossVectors( vFrom, vTo ); // inlined to avoid cyclic dependency on Vector3
-
-			this._x = vFrom.y * vTo.z - vFrom.z * vTo.y;
-			this._y = vFrom.z * vTo.x - vFrom.x * vTo.z;
-			this._z = vFrom.x * vTo.y - vFrom.y * vTo.x;
-			this._w = r;
-
-		}
-
-		return this.normalize();
-
-	}
-
-	angleTo( q ) {
-
-		return 2 * Math.acos( Math.abs( clamp( this.dot( q ), - 1, 1 ) ) );
-
-	}
-
-	rotateTowards( q, step ) {
-
-		const angle = this.angleTo( q );
-
-		if ( angle === 0 ) return this;
-
-		const t = Math.min( 1, step / angle );
-
-		this.slerp( q, t );
-
-		return this;
-
-	}
-
-	identity() {
-
-		return this.set( 0, 0, 0, 1 );
-
-	}
-
-	invert() {
-
-		// quaternion is assumed to have unit length
-
-		return this.conjugate();
-
-	}
-
-	conjugate() {
-
-		this._x *= - 1;
-		this._y *= - 1;
-		this._z *= - 1;
-
-		this._onChangeCallback();
-
-		return this;
-
-	}
-
-	dot( v ) {
-
-		return this._x * v._x + this._y * v._y + this._z * v._z + this._w * v._w;
-
-	}
-
-	lengthSq() {
-
-		return this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w;
-
-	}
-
-	length() {
-
-		return Math.sqrt( this._x * this._x + this._y * this._y + this._z * this._z + this._w * this._w );
-
-	}
-
-	normalize() {
-
-		let l = this.length();
-
-		if ( l === 0 ) {
-
-			this._x = 0;
-			this._y = 0;
-			this._z = 0;
-			this._w = 1;
-
-		} else {
-
-			l = 1 / l;
-
-			this._x = this._x * l;
-			this._y = this._y * l;
-			this._z = this._z * l;
-			this._w = this._w * l;
-
-		}
-
-		this._onChangeCallback();
-
-		return this;
-
-	}
-
-	multiply( q ) {
-
-		return this.multiplyQuaternions( this, q );
-
-	}
-
-	premultiply( q ) {
-
-		return this.multiplyQuaternions( q, this );
-
-	}
-
-	multiplyQuaternions( a, b ) {
-
-		// from http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/code/index.htm
-
-		const qax = a._x, qay = a._y, qaz = a._z, qaw = a._w;
-		const qbx = b._x, qby = b._y, qbz = b._z, qbw = b._w;
-
-		this._x = qax * qbw + qaw * qbx + qay * qbz - qaz * qby;
-		this._y = qay * qbw + qaw * qby + qaz * qbx - qax * qbz;
-		this._z = qaz * qbw + qaw * qbz + qax * qby - qay * qbx;
-		this._w = qaw * qbw - qax * qbx - qay * qby - qaz * qbz;
-
-		this._onChangeCallback();
-
-		return this;
-
-	}
-
-	slerp( qb, t ) {
-
-		if ( t === 0 ) return this;
-		if ( t === 1 ) return this.copy( qb );
-
-		const x = this._x, y = this._y, z = this._z, w = this._w;
-
-		// http://www.euclideanspace.com/maths/algebra/realNormedAlgebra/quaternions/slerp/
-
-		let cosHalfTheta = w * qb._w + x * qb._x + y * qb._y + z * qb._z;
-
-		if ( cosHalfTheta < 0 ) {
-
-			this._w = - qb._w;
-			this._x = - qb._x;
-			this._y = - qb._y;
-			this._z = - qb._z;
-
-			cosHalfTheta = - cosHalfTheta;
-
-		} else {
-
-			this.copy( qb );
-
-		}
-
-		if ( cosHalfTheta >= 1.0 ) {
-
-			this._w = w;
-			this._x = x;
-			this._y = y;
-			this._z = z;
-
-			return this;
-
-		}
-
-		const sqrSinHalfTheta = 1.0 - cosHalfTheta * cosHalfTheta;
-
-		if ( sqrSinHalfTheta <= Number.EPSILON ) {
-
-			const s = 1 - t;
-			this._w = s * w + t * this._w;
-			this._x = s * x + t * this._x;
-			this._y = s * y + t * this._y;
-			this._z = s * z + t * this._z;
-
-			this.normalize();
-			this._onChangeCallback();
-
-			return this;
-
-		}
-
-		const sinHalfTheta = Math.sqrt( sqrSinHalfTheta );
-		const halfTheta = Math.atan2( sinHalfTheta, cosHalfTheta );
-		const ratioA = Math.sin( ( 1 - t ) * halfTheta ) / sinHalfTheta,
-			ratioB = Math.sin( t * halfTheta ) / sinHalfTheta;
-
-		this._w = ( w * ratioA + this._w * ratioB );
-		this._x = ( x * ratioA + this._x * ratioB );
-		this._y = ( y * ratioA + this._y * ratioB );
-		this._z = ( z * ratioA + this._z * ratioB );
-
-		this._onChangeCallback();
-
-		return this;
-
-	}
-
-	slerpQuaternions( qa, qb, t ) {
-
-		return this.copy( qa ).slerp( qb, t );
-
-	}
-
-	random() {
-
-		// Derived from http://planning.cs.uiuc.edu/node198.html
-		// Note, this source uses w, x, y, z ordering,
-		// so we swap the order below.
-
-		const u1 = Math.random();
-		const sqrt1u1 = Math.sqrt( 1 - u1 );
-		const sqrtu1 = Math.sqrt( u1 );
-
-		const u2 = 2 * Math.PI * Math.random();
-
-		const u3 = 2 * Math.PI * Math.random();
-
-		return this.set(
-			sqrt1u1 * Math.cos( u2 ),
-			sqrtu1 * Math.sin( u3 ),
-			sqrtu1 * Math.cos( u3 ),
-			sqrt1u1 * Math.sin( u2 ),
-		);
-
-	}
-
-	equals( quaternion ) {
-
-		return ( quaternion._x === this._x ) && ( quaternion._y === this._y ) && ( quaternion._z === this._z ) && ( quaternion._w === this._w );
-
-	}
-
-	fromArray( array, offset = 0 ) {
-
-		this._x = array[ offset ];
-		this._y = array[ offset + 1 ];
-		this._z = array[ offset + 2 ];
-		this._w = array[ offset + 3 ];
-
-		this._onChangeCallback();
-
-		return this;
-
-	}
-
-	toArray( array = [], offset = 0 ) {
-
-		array[ offset ] = this._x;
-		array[ offset + 1 ] = this._y;
-		array[ offset + 2 ] = this._z;
-		array[ offset + 3 ] = this._w;
-
-		return array;
-
-	}
-
-	fromBufferAttribute( attribute, index ) {
-
-		this._x = attribute.getX( index );
-		this._y = attribute.getY( index );
-		this._z = attribute.getZ( index );
-		this._w = attribute.getW( index );
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		return this.toArray();
-
-	}
-
-	_onChange( callback ) {
-
-		this._onChangeCallback = callback;
-
-		return this;
-
-	}
-
-	_onChangeCallback() {}
-
-	*[ Symbol.iterator ]() {
-
-		yield this._x;
-		yield this._y;
-		yield this._z;
-		yield this._w;
-
-	}
-
-}
-
-class Vector3 {
-
-	constructor( x = 0, y = 0, z = 0 ) {
-
-		Vector3.prototype.isVector3 = true;
-
-		this.x = x;
-		this.y = y;
-		this.z = z;
-
-	}
-
-	set( x, y, z ) {
-
-		if ( z === undefined ) z = this.z; // sprite.scale.set(x,y)
-
-		this.x = x;
-		this.y = y;
-		this.z = z;
-
-		return this;
-
-	}
-
-	setScalar( scalar ) {
-
-		this.x = scalar;
-		this.y = scalar;
-		this.z = scalar;
-
-		return this;
-
-	}
-
-	setX( x ) {
-
-		this.x = x;
-
-		return this;
-
-	}
-
-	setY( y ) {
-
-		this.y = y;
-
-		return this;
-
-	}
-
-	setZ( z ) {
-
-		this.z = z;
-
-		return this;
-
-	}
-
-	setComponent( index, value ) {
-
-		switch ( index ) {
-
-			case 0: this.x = value; break;
-			case 1: this.y = value; break;
-			case 2: this.z = value; break;
-			default: throw new Error( 'index is out of range: ' + index );
-
-		}
-
-		return this;
-
-	}
-
-	getComponent( index ) {
-
-		switch ( index ) {
-
-			case 0: return this.x;
-			case 1: return this.y;
-			case 2: return this.z;
-			default: throw new Error( 'index is out of range: ' + index );
-
-		}
-
-	}
-
-	clone() {
-
-		return new this.constructor( this.x, this.y, this.z );
-
-	}
-
-	copy( v ) {
-
-		this.x = v.x;
-		this.y = v.y;
-		this.z = v.z;
-
-		return this;
-
-	}
-
-	add( v ) {
-
-		this.x += v.x;
-		this.y += v.y;
-		this.z += v.z;
-
-		return this;
-
-	}
-
-	addScalar( s ) {
-
-		this.x += s;
-		this.y += s;
-		this.z += s;
-
-		return this;
-
-	}
-
-	addVectors( a, b ) {
-
-		this.x = a.x + b.x;
-		this.y = a.y + b.y;
-		this.z = a.z + b.z;
-
-		return this;
-
-	}
-
-	addScaledVector( v, s ) {
-
-		this.x += v.x * s;
-		this.y += v.y * s;
-		this.z += v.z * s;
-
-		return this;
-
-	}
-
-	sub( v ) {
-
-		this.x -= v.x;
-		this.y -= v.y;
-		this.z -= v.z;
-
-		return this;
-
-	}
-
-	subScalar( s ) {
-
-		this.x -= s;
-		this.y -= s;
-		this.z -= s;
-
-		return this;
-
-	}
-
-	subVectors( a, b ) {
-
-		this.x = a.x - b.x;
-		this.y = a.y - b.y;
-		this.z = a.z - b.z;
-
-		return this;
-
-	}
-
-	multiply( v ) {
-
-		this.x *= v.x;
-		this.y *= v.y;
-		this.z *= v.z;
-
-		return this;
-
-	}
-
-	multiplyScalar( scalar ) {
-
-		this.x *= scalar;
-		this.y *= scalar;
-		this.z *= scalar;
-
-		return this;
-
-	}
-
-	multiplyVectors( a, b ) {
-
-		this.x = a.x * b.x;
-		this.y = a.y * b.y;
-		this.z = a.z * b.z;
-
-		return this;
-
-	}
-
-	applyEuler( euler ) {
-
-		return this.applyQuaternion( _quaternion$4.setFromEuler( euler ) );
-
-	}
-
-	applyAxisAngle( axis, angle ) {
-
-		return this.applyQuaternion( _quaternion$4.setFromAxisAngle( axis, angle ) );
-
-	}
-
-	applyMatrix3( m ) {
-
-		const x = this.x, y = this.y, z = this.z;
-		const e = m.elements;
-
-		this.x = e[ 0 ] * x + e[ 3 ] * y + e[ 6 ] * z;
-		this.y = e[ 1 ] * x + e[ 4 ] * y + e[ 7 ] * z;
-		this.z = e[ 2 ] * x + e[ 5 ] * y + e[ 8 ] * z;
-
-		return this;
-
-	}
-
-	applyNormalMatrix( m ) {
-
-		return this.applyMatrix3( m ).normalize();
-
-	}
-
-	applyMatrix4( m ) {
-
-		const x = this.x, y = this.y, z = this.z;
-		const e = m.elements;
-
-		const w = 1 / ( e[ 3 ] * x + e[ 7 ] * y + e[ 11 ] * z + e[ 15 ] );
-
-		this.x = ( e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z + e[ 12 ] ) * w;
-		this.y = ( e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z + e[ 13 ] ) * w;
-		this.z = ( e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z + e[ 14 ] ) * w;
-
-		return this;
-
-	}
-
-	applyQuaternion( q ) {
-
-		const x = this.x, y = this.y, z = this.z;
-		const qx = q.x, qy = q.y, qz = q.z, qw = q.w;
-
-		// calculate quat * vector
-
-		const ix = qw * x + qy * z - qz * y;
-		const iy = qw * y + qz * x - qx * z;
-		const iz = qw * z + qx * y - qy * x;
-		const iw = - qx * x - qy * y - qz * z;
-
-		// calculate result * inverse quat
-
-		this.x = ix * qw + iw * - qx + iy * - qz - iz * - qy;
-		this.y = iy * qw + iw * - qy + iz * - qx - ix * - qz;
-		this.z = iz * qw + iw * - qz + ix * - qy - iy * - qx;
-
-		return this;
-
-	}
-
-	project( camera ) {
-
-		return this.applyMatrix4( camera.matrixWorldInverse ).applyMatrix4( camera.projectionMatrix );
-
-	}
-
-	unproject( camera ) {
-
-		return this.applyMatrix4( camera.projectionMatrixInverse ).applyMatrix4( camera.matrixWorld );
-
-	}
-
-	transformDirection( m ) {
-
-		// input: THREE.Matrix4 affine matrix
-		// vector interpreted as a direction
-
-		const x = this.x, y = this.y, z = this.z;
-		const e = m.elements;
-
-		this.x = e[ 0 ] * x + e[ 4 ] * y + e[ 8 ] * z;
-		this.y = e[ 1 ] * x + e[ 5 ] * y + e[ 9 ] * z;
-		this.z = e[ 2 ] * x + e[ 6 ] * y + e[ 10 ] * z;
-
-		return this.normalize();
-
-	}
-
-	divide( v ) {
-
-		this.x /= v.x;
-		this.y /= v.y;
-		this.z /= v.z;
-
-		return this;
-
-	}
-
-	divideScalar( scalar ) {
-
-		return this.multiplyScalar( 1 / scalar );
-
-	}
-
-	min( v ) {
-
-		this.x = Math.min( this.x, v.x );
-		this.y = Math.min( this.y, v.y );
-		this.z = Math.min( this.z, v.z );
-
-		return this;
-
-	}
-
-	max( v ) {
-
-		this.x = Math.max( this.x, v.x );
-		this.y = Math.max( this.y, v.y );
-		this.z = Math.max( this.z, v.z );
-
-		return this;
-
-	}
-
-	clamp( min, max ) {
-
-		// assumes min < max, componentwise
-
-		this.x = Math.max( min.x, Math.min( max.x, this.x ) );
-		this.y = Math.max( min.y, Math.min( max.y, this.y ) );
-		this.z = Math.max( min.z, Math.min( max.z, this.z ) );
-
-		return this;
-
-	}
-
-	clampScalar( minVal, maxVal ) {
-
-		this.x = Math.max( minVal, Math.min( maxVal, this.x ) );
-		this.y = Math.max( minVal, Math.min( maxVal, this.y ) );
-		this.z = Math.max( minVal, Math.min( maxVal, this.z ) );
-
-		return this;
-
-	}
-
-	clampLength( min, max ) {
-
-		const length = this.length();
-
-		return this.divideScalar( length || 1 ).multiplyScalar( Math.max( min, Math.min( max, length ) ) );
-
-	}
-
-	floor() {
-
-		this.x = Math.floor( this.x );
-		this.y = Math.floor( this.y );
-		this.z = Math.floor( this.z );
-
-		return this;
-
-	}
-
-	ceil() {
-
-		this.x = Math.ceil( this.x );
-		this.y = Math.ceil( this.y );
-		this.z = Math.ceil( this.z );
-
-		return this;
-
-	}
-
-	round() {
-
-		this.x = Math.round( this.x );
-		this.y = Math.round( this.y );
-		this.z = Math.round( this.z );
-
-		return this;
-
-	}
-
-	roundToZero() {
-
-		this.x = ( this.x < 0 ) ? Math.ceil( this.x ) : Math.floor( this.x );
-		this.y = ( this.y < 0 ) ? Math.ceil( this.y ) : Math.floor( this.y );
-		this.z = ( this.z < 0 ) ? Math.ceil( this.z ) : Math.floor( this.z );
-
-		return this;
-
-	}
-
-	negate() {
-
-		this.x = - this.x;
-		this.y = - this.y;
-		this.z = - this.z;
-
-		return this;
-
-	}
-
-	dot( v ) {
-
-		return this.x * v.x + this.y * v.y + this.z * v.z;
-
-	}
-
-	// TODO lengthSquared?
-
-	lengthSq() {
-
-		return this.x * this.x + this.y * this.y + this.z * this.z;
-
-	}
-
-	length() {
-
-		return Math.sqrt( this.x * this.x + this.y * this.y + this.z * this.z );
-
-	}
-
-	manhattanLength() {
-
-		return Math.abs( this.x ) + Math.abs( this.y ) + Math.abs( this.z );
-
-	}
-
-	normalize() {
-
-		return this.divideScalar( this.length() || 1 );
-
-	}
-
-	setLength( length ) {
-
-		return this.normalize().multiplyScalar( length );
-
-	}
-
-	lerp( v, alpha ) {
-
-		this.x += ( v.x - this.x ) * alpha;
-		this.y += ( v.y - this.y ) * alpha;
-		this.z += ( v.z - this.z ) * alpha;
-
-		return this;
-
-	}
-
-	lerpVectors( v1, v2, alpha ) {
-
-		this.x = v1.x + ( v2.x - v1.x ) * alpha;
-		this.y = v1.y + ( v2.y - v1.y ) * alpha;
-		this.z = v1.z + ( v2.z - v1.z ) * alpha;
-
-		return this;
-
-	}
-
-	cross( v ) {
-
-		return this.crossVectors( this, v );
-
-	}
-
-	crossVectors( a, b ) {
-
-		const ax = a.x, ay = a.y, az = a.z;
-		const bx = b.x, by = b.y, bz = b.z;
-
-		this.x = ay * bz - az * by;
-		this.y = az * bx - ax * bz;
-		this.z = ax * by - ay * bx;
-
-		return this;
-
-	}
-
-	projectOnVector( v ) {
-
-		const denominator = v.lengthSq();
-
-		if ( denominator === 0 ) return this.set( 0, 0, 0 );
-
-		const scalar = v.dot( this ) / denominator;
-
-		return this.copy( v ).multiplyScalar( scalar );
-
-	}
-
-	projectOnPlane( planeNormal ) {
-
-		_vector$b.copy( this ).projectOnVector( planeNormal );
-
-		return this.sub( _vector$b );
-
-	}
-
-	reflect( normal ) {
-
-		// reflect incident vector off plane orthogonal to normal
-		// normal is assumed to have unit length
-
-		return this.sub( _vector$b.copy( normal ).multiplyScalar( 2 * this.dot( normal ) ) );
-
-	}
-
-	angleTo( v ) {
-
-		const denominator = Math.sqrt( this.lengthSq() * v.lengthSq() );
-
-		if ( denominator === 0 ) return Math.PI / 2;
-
-		const theta = this.dot( v ) / denominator;
-
-		// clamp, to handle numerical problems
-
-		return Math.acos( clamp( theta, - 1, 1 ) );
-
-	}
-
-	distanceTo( v ) {
-
-		return Math.sqrt( this.distanceToSquared( v ) );
-
-	}
-
-	distanceToSquared( v ) {
-
-		const dx = this.x - v.x, dy = this.y - v.y, dz = this.z - v.z;
-
-		return dx * dx + dy * dy + dz * dz;
-
-	}
-
-	manhattanDistanceTo( v ) {
-
-		return Math.abs( this.x - v.x ) + Math.abs( this.y - v.y ) + Math.abs( this.z - v.z );
-
-	}
-
-	setFromSpherical( s ) {
-
-		return this.setFromSphericalCoords( s.radius, s.phi, s.theta );
-
-	}
-
-	setFromSphericalCoords( radius, phi, theta ) {
-
-		const sinPhiRadius = Math.sin( phi ) * radius;
-
-		this.x = sinPhiRadius * Math.sin( theta );
-		this.y = Math.cos( phi ) * radius;
-		this.z = sinPhiRadius * Math.cos( theta );
-
-		return this;
-
-	}
-
-	setFromCylindrical( c ) {
-
-		return this.setFromCylindricalCoords( c.radius, c.theta, c.y );
-
-	}
-
-	setFromCylindricalCoords( radius, theta, y ) {
-
-		this.x = radius * Math.sin( theta );
-		this.y = y;
-		this.z = radius * Math.cos( theta );
-
-		return this;
-
-	}
-
-	setFromMatrixPosition( m ) {
-
-		const e = m.elements;
-
-		this.x = e[ 12 ];
-		this.y = e[ 13 ];
-		this.z = e[ 14 ];
-
-		return this;
-
-	}
-
-	setFromMatrixScale( m ) {
-
-		const sx = this.setFromMatrixColumn( m, 0 ).length();
-		const sy = this.setFromMatrixColumn( m, 1 ).length();
-		const sz = this.setFromMatrixColumn( m, 2 ).length();
-
-		this.x = sx;
-		this.y = sy;
-		this.z = sz;
-
-		return this;
-
-	}
-
-	setFromMatrixColumn( m, index ) {
-
-		return this.fromArray( m.elements, index * 4 );
-
-	}
-
-	setFromMatrix3Column( m, index ) {
-
-		return this.fromArray( m.elements, index * 3 );
-
-	}
-
-	setFromEuler( e ) {
-
-		this.x = e._x;
-		this.y = e._y;
-		this.z = e._z;
-
-		return this;
-
-	}
-
-	setFromColor( c ) {
-
-		this.x = c.r;
-		this.y = c.g;
-		this.z = c.b;
-
-		return this;
-
-	}
-
-	equals( v ) {
-
-		return ( ( v.x === this.x ) && ( v.y === this.y ) && ( v.z === this.z ) );
-
-	}
-
-	fromArray( array, offset = 0 ) {
-
-		this.x = array[ offset ];
-		this.y = array[ offset + 1 ];
-		this.z = array[ offset + 2 ];
-
-		return this;
-
-	}
-
-	toArray( array = [], offset = 0 ) {
-
-		array[ offset ] = this.x;
-		array[ offset + 1 ] = this.y;
-		array[ offset + 2 ] = this.z;
-
-		return array;
-
-	}
-
-	fromBufferAttribute( attribute, index ) {
-
-		this.x = attribute.getX( index );
-		this.y = attribute.getY( index );
-		this.z = attribute.getZ( index );
-
-		return this;
-
-	}
-
-	random() {
-
-		this.x = Math.random();
-		this.y = Math.random();
-		this.z = Math.random();
-
-		return this;
-
-	}
-
-	randomDirection() {
-
-		// Derived from https://mathworld.wolfram.com/SpherePointPicking.html
-
-		const u = ( Math.random() - 0.5 ) * 2;
-		const t = Math.random() * Math.PI * 2;
-		const f = Math.sqrt( 1 - u ** 2 );
-
-		this.x = f * Math.cos( t );
-		this.y = f * Math.sin( t );
-		this.z = u;
-
-		return this;
-
-	}
-
-	*[ Symbol.iterator ]() {
-
-		yield this.x;
-		yield this.y;
-		yield this.z;
-
-	}
-
-}
-
-const _vector$b = /*@__PURE__*/ new Vector3();
-const _quaternion$4 = /*@__PURE__*/ new Quaternion();
-
-class Box3 {
-
-	constructor( min = new Vector3( + Infinity, + Infinity, + Infinity ), max = new Vector3( - Infinity, - Infinity, - Infinity ) ) {
-
-		this.isBox3 = true;
-
-		this.min = min;
-		this.max = max;
-
-	}
-
-	set( min, max ) {
-
-		this.min.copy( min );
-		this.max.copy( max );
-
-		return this;
-
-	}
-
-	setFromArray( array ) {
-
-		this.makeEmpty();
-
-		for ( let i = 0, il = array.length; i < il; i += 3 ) {
-
-			this.expandByPoint( _vector$a.fromArray( array, i ) );
-
-		}
-
-		return this;
-
-	}
-
-	setFromBufferAttribute( attribute ) {
-
-		this.makeEmpty();
-
-		for ( let i = 0, il = attribute.count; i < il; i ++ ) {
-
-			this.expandByPoint( _vector$a.fromBufferAttribute( attribute, i ) );
-
-		}
-
-		return this;
-
-	}
-
-	setFromPoints( points ) {
-
-		this.makeEmpty();
-
-		for ( let i = 0, il = points.length; i < il; i ++ ) {
-
-			this.expandByPoint( points[ i ] );
-
-		}
-
-		return this;
-
-	}
-
-	setFromCenterAndSize( center, size ) {
-
-		const halfSize = _vector$a.copy( size ).multiplyScalar( 0.5 );
-
-		this.min.copy( center ).sub( halfSize );
-		this.max.copy( center ).add( halfSize );
-
-		return this;
-
-	}
-
-	setFromObject( object, precise = false ) {
-
-		this.makeEmpty();
-
-		return this.expandByObject( object, precise );
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-	copy( box ) {
-
-		this.min.copy( box.min );
-		this.max.copy( box.max );
-
-		return this;
-
-	}
-
-	makeEmpty() {
-
-		this.min.x = this.min.y = this.min.z = + Infinity;
-		this.max.x = this.max.y = this.max.z = - Infinity;
-
-		return this;
-
-	}
-
-	isEmpty() {
-
-		// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes
-
-		return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );
-
-	}
-
-	getCenter( target ) {
-
-		return this.isEmpty() ? target.set( 0, 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );
-
-	}
-
-	getSize( target ) {
-
-		return this.isEmpty() ? target.set( 0, 0, 0 ) : target.subVectors( this.max, this.min );
-
-	}
-
-	expandByPoint( point ) {
-
-		this.min.min( point );
-		this.max.max( point );
-
-		return this;
-
-	}
-
-	expandByVector( vector ) {
-
-		this.min.sub( vector );
-		this.max.add( vector );
-
-		return this;
-
-	}
-
-	expandByScalar( scalar ) {
-
-		this.min.addScalar( - scalar );
-		this.max.addScalar( scalar );
-
-		return this;
-
-	}
-
-	expandByObject( object, precise = false ) {
-
-		// Computes the world-axis-aligned bounding box of an object (including its children),
-		// accounting for both the object's, and children's, world transforms
-
-		object.updateWorldMatrix( false, false );
-
-		if ( object.boundingBox !== undefined ) {
-
-			if ( object.boundingBox === null ) {
-
-				object.computeBoundingBox();
-
-			}
-
-			_box$3.copy( object.boundingBox );
-			_box$3.applyMatrix4( object.matrixWorld );
-
-			this.union( _box$3 );
-
-		} else {
-
-			const geometry = object.geometry;
-
-			if ( geometry !== undefined ) {
-
-				if ( precise && geometry.attributes !== undefined && geometry.attributes.position !== undefined ) {
-
-					const position = geometry.attributes.position;
-					for ( let i = 0, l = position.count; i < l; i ++ ) {
-
-						_vector$a.fromBufferAttribute( position, i ).applyMatrix4( object.matrixWorld );
-						this.expandByPoint( _vector$a );
-
-					}
-
-				} else {
-
-					if ( geometry.boundingBox === null ) {
-
-						geometry.computeBoundingBox();
-
-					}
-
-					_box$3.copy( geometry.boundingBox );
-					_box$3.applyMatrix4( object.matrixWorld );
-
-					this.union( _box$3 );
-
-				}
-
-			}
-
-		}
-
-		const children = object.children;
-
-		for ( let i = 0, l = children.length; i < l; i ++ ) {
-
-			this.expandByObject( children[ i ], precise );
-
-		}
-
-		return this;
-
-	}
-
-	containsPoint( point ) {
-
-		return point.x < this.min.x || point.x > this.max.x ||
-			point.y < this.min.y || point.y > this.max.y ||
-			point.z < this.min.z || point.z > this.max.z ? false : true;
-
-	}
-
-	containsBox( box ) {
-
-		return this.min.x <= box.min.x && box.max.x <= this.max.x &&
-			this.min.y <= box.min.y && box.max.y <= this.max.y &&
-			this.min.z <= box.min.z && box.max.z <= this.max.z;
-
-	}
-
-	getParameter( point, target ) {
-
-		// This can potentially have a divide by zero if the box
-		// has a size dimension of 0.
-
-		return target.set(
-			( point.x - this.min.x ) / ( this.max.x - this.min.x ),
-			( point.y - this.min.y ) / ( this.max.y - this.min.y ),
-			( point.z - this.min.z ) / ( this.max.z - this.min.z )
-		);
-
-	}
-
-	intersectsBox( box ) {
-
-		// using 6 splitting planes to rule out intersections.
-		return box.max.x < this.min.x || box.min.x > this.max.x ||
-			box.max.y < this.min.y || box.min.y > this.max.y ||
-			box.max.z < this.min.z || box.min.z > this.max.z ? false : true;
-
-	}
-
-	intersectsSphere( sphere ) {
-
-		// Find the point on the AABB closest to the sphere center.
-		this.clampPoint( sphere.center, _vector$a );
-
-		// If that point is inside the sphere, the AABB and sphere intersect.
-		return _vector$a.distanceToSquared( sphere.center ) <= ( sphere.radius * sphere.radius );
-
-	}
-
-	intersectsPlane( plane ) {
-
-		// We compute the minimum and maximum dot product values. If those values
-		// are on the same side (back or front) of the plane, then there is no intersection.
-
-		let min, max;
-
-		if ( plane.normal.x > 0 ) {
-
-			min = plane.normal.x * this.min.x;
-			max = plane.normal.x * this.max.x;
-
-		} else {
-
-			min = plane.normal.x * this.max.x;
-			max = plane.normal.x * this.min.x;
-
-		}
-
-		if ( plane.normal.y > 0 ) {
-
-			min += plane.normal.y * this.min.y;
-			max += plane.normal.y * this.max.y;
-
-		} else {
-
-			min += plane.normal.y * this.max.y;
-			max += plane.normal.y * this.min.y;
-
-		}
-
-		if ( plane.normal.z > 0 ) {
-
-			min += plane.normal.z * this.min.z;
-			max += plane.normal.z * this.max.z;
-
-		} else {
-
-			min += plane.normal.z * this.max.z;
-			max += plane.normal.z * this.min.z;
-
-		}
-
-		return ( min <= - plane.constant && max >= - plane.constant );
-
-	}
-
-	intersectsTriangle( triangle ) {
-
-		if ( this.isEmpty() ) {
-
-			return false;
-
-		}
-
-		// compute box center and extents
-		this.getCenter( _center );
-		_extents.subVectors( this.max, _center );
-
-		// translate triangle to aabb origin
-		_v0$2.subVectors( triangle.a, _center );
-		_v1$7.subVectors( triangle.b, _center );
-		_v2$4.subVectors( triangle.c, _center );
-
-		// compute edge vectors for triangle
-		_f0.subVectors( _v1$7, _v0$2 );
-		_f1.subVectors( _v2$4, _v1$7 );
-		_f2.subVectors( _v0$2, _v2$4 );
-
-		// test against axes that are given by cross product combinations of the edges of the triangle and the edges of the aabb
-		// make an axis testing of each of the 3 sides of the aabb against each of the 3 sides of the triangle = 9 axis of separation
-		// axis_ij = u_i x f_j (u0, u1, u2 = face normals of aabb = x,y,z axes vectors since aabb is axis aligned)
-		let axes = [
-			0, - _f0.z, _f0.y, 0, - _f1.z, _f1.y, 0, - _f2.z, _f2.y,
-			_f0.z, 0, - _f0.x, _f1.z, 0, - _f1.x, _f2.z, 0, - _f2.x,
-			- _f0.y, _f0.x, 0, - _f1.y, _f1.x, 0, - _f2.y, _f2.x, 0
-		];
-		if ( ! satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents ) ) {
-
-			return false;
-
-		}
-
-		// test 3 face normals from the aabb
-		axes = [ 1, 0, 0, 0, 1, 0, 0, 0, 1 ];
-		if ( ! satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents ) ) {
-
-			return false;
-
-		}
-
-		// finally testing the face normal of the triangle
-		// use already existing triangle edge vectors here
-		_triangleNormal.crossVectors( _f0, _f1 );
-		axes = [ _triangleNormal.x, _triangleNormal.y, _triangleNormal.z ];
-
-		return satForAxes( axes, _v0$2, _v1$7, _v2$4, _extents );
-
-	}
-
-	clampPoint( point, target ) {
-
-		return target.copy( point ).clamp( this.min, this.max );
-
-	}
-
-	distanceToPoint( point ) {
-
-		return this.clampPoint( point, _vector$a ).distanceTo( point );
-
-	}
-
-	getBoundingSphere( target ) {
-
-		if ( this.isEmpty() ) {
-
-			target.makeEmpty();
-
-		} else {
-
-			this.getCenter( target.center );
-
-			target.radius = this.getSize( _vector$a ).length() * 0.5;
-
-		}
-
-		return target;
-
-	}
-
-	intersect( box ) {
-
-		this.min.max( box.min );
-		this.max.min( box.max );
-
-		// ensure that if there is no overlap, the result is fully empty, not slightly empty with non-inf/+inf values that will cause subsequence intersects to erroneously return valid values.
-		if ( this.isEmpty() ) this.makeEmpty();
-
-		return this;
-
-	}
-
-	union( box ) {
-
-		this.min.min( box.min );
-		this.max.max( box.max );
-
-		return this;
-
-	}
-
-	applyMatrix4( matrix ) {
-
-		// transform of empty box is an empty box.
-		if ( this.isEmpty() ) return this;
-
-		// NOTE: I am using a binary pattern to specify all 2^3 combinations below
-		_points[ 0 ].set( this.min.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 000
-		_points[ 1 ].set( this.min.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 001
-		_points[ 2 ].set( this.min.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 010
-		_points[ 3 ].set( this.min.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 011
-		_points[ 4 ].set( this.max.x, this.min.y, this.min.z ).applyMatrix4( matrix ); // 100
-		_points[ 5 ].set( this.max.x, this.min.y, this.max.z ).applyMatrix4( matrix ); // 101
-		_points[ 6 ].set( this.max.x, this.max.y, this.min.z ).applyMatrix4( matrix ); // 110
-		_points[ 7 ].set( this.max.x, this.max.y, this.max.z ).applyMatrix4( matrix ); // 111
-
-		this.setFromPoints( _points );
-
-		return this;
-
-	}
-
-	translate( offset ) {
-
-		this.min.add( offset );
-		this.max.add( offset );
-
-		return this;
-
-	}
-
-	equals( box ) {
-
-		return box.min.equals( this.min ) && box.max.equals( this.max );
-
-	}
-
-}
-
-const _points = [
-	/*@__PURE__*/ new Vector3(),
-	/*@__PURE__*/ new Vector3(),
-	/*@__PURE__*/ new Vector3(),
-	/*@__PURE__*/ new Vector3(),
-	/*@__PURE__*/ new Vector3(),
-	/*@__PURE__*/ new Vector3(),
-	/*@__PURE__*/ new Vector3(),
-	/*@__PURE__*/ new Vector3()
-];
-
-const _vector$a = /*@__PURE__*/ new Vector3();
-
-const _box$3 = /*@__PURE__*/ new Box3();
-
-// triangle centered vertices
-
-const _v0$2 = /*@__PURE__*/ new Vector3();
-const _v1$7 = /*@__PURE__*/ new Vector3();
-const _v2$4 = /*@__PURE__*/ new Vector3();
-
-// triangle edge vectors
-
-const _f0 = /*@__PURE__*/ new Vector3();
-const _f1 = /*@__PURE__*/ new Vector3();
-const _f2 = /*@__PURE__*/ new Vector3();
-
-const _center = /*@__PURE__*/ new Vector3();
-const _extents = /*@__PURE__*/ new Vector3();
-const _triangleNormal = /*@__PURE__*/ new Vector3();
-const _testAxis = /*@__PURE__*/ new Vector3();
-
-function satForAxes( axes, v0, v1, v2, extents ) {
-
-	for ( let i = 0, j = axes.length - 3; i <= j; i += 3 ) {
-
-		_testAxis.fromArray( axes, i );
-		// project the aabb onto the separating axis
-		const r = extents.x * Math.abs( _testAxis.x ) + extents.y * Math.abs( _testAxis.y ) + extents.z * Math.abs( _testAxis.z );
-		// project all 3 vertices of the triangle onto the separating axis
-		const p0 = v0.dot( _testAxis );
-		const p1 = v1.dot( _testAxis );
-		const p2 = v2.dot( _testAxis );
-		// actual test, basically see if either of the most extreme of the triangle points intersects r
-		if ( Math.max( - Math.max( p0, p1, p2 ), Math.min( p0, p1, p2 ) ) > r ) {
-
-			// points of the projected triangle are outside the projected half-length of the aabb
-			// the axis is separating and we can exit
-			return false;
-
-		}
-
-	}
-
-	return true;
-
-}
-
-const _box$2 = /*@__PURE__*/ new Box3();
-const _v1$6 = /*@__PURE__*/ new Vector3();
-const _v2$3 = /*@__PURE__*/ new Vector3();
-
-class Sphere {
-
-	constructor( center = new Vector3(), radius = - 1 ) {
-
-		this.center = center;
-		this.radius = radius;
-
-	}
-
-	set( center, radius ) {
-
-		this.center.copy( center );
-		this.radius = radius;
-
-		return this;
-
-	}
-
-	setFromPoints( points, optionalCenter ) {
-
-		const center = this.center;
-
-		if ( optionalCenter !== undefined ) {
-
-			center.copy( optionalCenter );
-
-		} else {
-
-			_box$2.setFromPoints( points ).getCenter( center );
-
-		}
-
-		let maxRadiusSq = 0;
-
-		for ( let i = 0, il = points.length; i < il; i ++ ) {
-
-			maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( points[ i ] ) );
-
-		}
-
-		this.radius = Math.sqrt( maxRadiusSq );
-
-		return this;
-
-	}
-
-	copy( sphere ) {
-
-		this.center.copy( sphere.center );
-		this.radius = sphere.radius;
-
-		return this;
-
-	}
-
-	isEmpty() {
-
-		return ( this.radius < 0 );
-
-	}
-
-	makeEmpty() {
-
-		this.center.set( 0, 0, 0 );
-		this.radius = - 1;
-
-		return this;
-
-	}
-
-	containsPoint( point ) {
-
-		return ( point.distanceToSquared( this.center ) <= ( this.radius * this.radius ) );
-
-	}
-
-	distanceToPoint( point ) {
-
-		return ( point.distanceTo( this.center ) - this.radius );
-
-	}
-
-	intersectsSphere( sphere ) {
-
-		const radiusSum = this.radius + sphere.radius;
-
-		return sphere.center.distanceToSquared( this.center ) <= ( radiusSum * radiusSum );
-
-	}
-
-	intersectsBox( box ) {
-
-		return box.intersectsSphere( this );
-
-	}
-
-	intersectsPlane( plane ) {
-
-		return Math.abs( plane.distanceToPoint( this.center ) ) <= this.radius;
-
-	}
-
-	clampPoint( point, target ) {
-
-		const deltaLengthSq = this.center.distanceToSquared( point );
-
-		target.copy( point );
-
-		if ( deltaLengthSq > ( this.radius * this.radius ) ) {
-
-			target.sub( this.center ).normalize();
-			target.multiplyScalar( this.radius ).add( this.center );
-
-		}
-
-		return target;
-
-	}
-
-	getBoundingBox( target ) {
-
-		if ( this.isEmpty() ) {
-
-			// Empty sphere produces empty bounding box
-			target.makeEmpty();
-			return target;
-
-		}
-
-		target.set( this.center, this.center );
-		target.expandByScalar( this.radius );
-
-		return target;
-
-	}
-
-	applyMatrix4( matrix ) {
-
-		this.center.applyMatrix4( matrix );
-		this.radius = this.radius * matrix.getMaxScaleOnAxis();
-
-		return this;
-
-	}
-
-	translate( offset ) {
-
-		this.center.add( offset );
-
-		return this;
-
-	}
-
-	expandByPoint( point ) {
-
-		if ( this.isEmpty() ) {
-
-			this.center.copy( point );
-
-			this.radius = 0;
-
-			return this;
-
-		}
-
-		_v1$6.subVectors( point, this.center );
-
-		const lengthSq = _v1$6.lengthSq();
-
-		if ( lengthSq > ( this.radius * this.radius ) ) {
-
-			// calculate the minimal sphere
-
-			const length = Math.sqrt( lengthSq );
-
-			const delta = ( length - this.radius ) * 0.5;
-
-			this.center.addScaledVector( _v1$6, delta / length );
-
-			this.radius += delta;
-
-		}
-
-		return this;
-
-	}
-
-	union( sphere ) {
-
-		if ( sphere.isEmpty() ) {
-
-			return this;
-
-		}
-
-		if ( this.isEmpty() ) {
-
-			this.copy( sphere );
-
-			return this;
-
-		}
-
-		if ( this.center.equals( sphere.center ) === true ) {
-
-			 this.radius = Math.max( this.radius, sphere.radius );
-
-		} else {
-
-			_v2$3.subVectors( sphere.center, this.center ).setLength( sphere.radius );
-
-			this.expandByPoint( _v1$6.copy( sphere.center ).add( _v2$3 ) );
-
-			this.expandByPoint( _v1$6.copy( sphere.center ).sub( _v2$3 ) );
-
-		}
-
-		return this;
-
-	}
-
-	equals( sphere ) {
-
-		return sphere.center.equals( this.center ) && ( sphere.radius === this.radius );
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-}
-
-const _vector$9 = /*@__PURE__*/ new Vector3();
-const _segCenter = /*@__PURE__*/ new Vector3();
-const _segDir = /*@__PURE__*/ new Vector3();
-const _diff = /*@__PURE__*/ new Vector3();
-
-const _edge1 = /*@__PURE__*/ new Vector3();
-const _edge2 = /*@__PURE__*/ new Vector3();
-const _normal$1 = /*@__PURE__*/ new Vector3();
-
-class Ray {
-
-	constructor( origin = new Vector3(), direction = new Vector3( 0, 0, - 1 ) ) {
-
-		this.origin = origin;
-		this.direction = direction;
-
-	}
-
-	set( origin, direction ) {
-
-		this.origin.copy( origin );
-		this.direction.copy( direction );
-
-		return this;
-
-	}
-
-	copy( ray ) {
-
-		this.origin.copy( ray.origin );
-		this.direction.copy( ray.direction );
-
-		return this;
-
-	}
-
-	at( t, target ) {
-
-		return target.copy( this.origin ).addScaledVector( this.direction, t );
-
-	}
-
-	lookAt( v ) {
-
-		this.direction.copy( v ).sub( this.origin ).normalize();
-
-		return this;
-
-	}
-
-	recast( t ) {
-
-		this.origin.copy( this.at( t, _vector$9 ) );
-
-		return this;
-
-	}
-
-	closestPointToPoint( point, target ) {
-
-		target.subVectors( point, this.origin );
-
-		const directionDistance = target.dot( this.direction );
-
-		if ( directionDistance < 0 ) {
-
-			return target.copy( this.origin );
-
-		}
-
-		return target.copy( this.origin ).addScaledVector( this.direction, directionDistance );
-
-	}
-
-	distanceToPoint( point ) {
-
-		return Math.sqrt( this.distanceSqToPoint( point ) );
-
-	}
-
-	distanceSqToPoint( point ) {
-
-		const directionDistance = _vector$9.subVectors( point, this.origin ).dot( this.direction );
-
-		// point behind the ray
-
-		if ( directionDistance < 0 ) {
-
-			return this.origin.distanceToSquared( point );
-
-		}
-
-		_vector$9.copy( this.origin ).addScaledVector( this.direction, directionDistance );
-
-		return _vector$9.distanceToSquared( point );
-
-	}
-
-	distanceSqToSegment( v0, v1, optionalPointOnRay, optionalPointOnSegment ) {
-
-		// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteDistRaySegment.h
-		// It returns the min distance between the ray and the segment
-		// defined by v0 and v1
-		// It can also set two optional targets :
-		// - The closest point on the ray
-		// - The closest point on the segment
-
-		_segCenter.copy( v0 ).add( v1 ).multiplyScalar( 0.5 );
-		_segDir.copy( v1 ).sub( v0 ).normalize();
-		_diff.copy( this.origin ).sub( _segCenter );
-
-		const segExtent = v0.distanceTo( v1 ) * 0.5;
-		const a01 = - this.direction.dot( _segDir );
-		const b0 = _diff.dot( this.direction );
-		const b1 = - _diff.dot( _segDir );
-		const c = _diff.lengthSq();
-		const det = Math.abs( 1 - a01 * a01 );
-		let s0, s1, sqrDist, extDet;
-
-		if ( det > 0 ) {
-
-			// The ray and segment are not parallel.
-
-			s0 = a01 * b1 - b0;
-			s1 = a01 * b0 - b1;
-			extDet = segExtent * det;
-
-			if ( s0 >= 0 ) {
-
-				if ( s1 >= - extDet ) {
-
-					if ( s1 <= extDet ) {
-
-						// region 0
-						// Minimum at interior points of ray and segment.
-
-						const invDet = 1 / det;
-						s0 *= invDet;
-						s1 *= invDet;
-						sqrDist = s0 * ( s0 + a01 * s1 + 2 * b0 ) + s1 * ( a01 * s0 + s1 + 2 * b1 ) + c;
-
-					} else {
-
-						// region 1
-
-						s1 = segExtent;
-						s0 = Math.max( 0, - ( a01 * s1 + b0 ) );
-						sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;
-
-					}
-
-				} else {
-
-					// region 5
-
-					s1 = - segExtent;
-					s0 = Math.max( 0, - ( a01 * s1 + b0 ) );
-					sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;
-
-				}
-
-			} else {
-
-				if ( s1 <= - extDet ) {
-
-					// region 4
-
-					s0 = Math.max( 0, - ( - a01 * segExtent + b0 ) );
-					s1 = ( s0 > 0 ) ? - segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );
-					sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;
-
-				} else if ( s1 <= extDet ) {
-
-					// region 3
-
-					s0 = 0;
-					s1 = Math.min( Math.max( - segExtent, - b1 ), segExtent );
-					sqrDist = s1 * ( s1 + 2 * b1 ) + c;
-
-				} else {
-
-					// region 2
-
-					s0 = Math.max( 0, - ( a01 * segExtent + b0 ) );
-					s1 = ( s0 > 0 ) ? segExtent : Math.min( Math.max( - segExtent, - b1 ), segExtent );
-					sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;
-
-				}
-
-			}
-
-		} else {
-
-			// Ray and segment are parallel.
-
-			s1 = ( a01 > 0 ) ? - segExtent : segExtent;
-			s0 = Math.max( 0, - ( a01 * s1 + b0 ) );
-			sqrDist = - s0 * s0 + s1 * ( s1 + 2 * b1 ) + c;
-
-		}
-
-		if ( optionalPointOnRay ) {
-
-			optionalPointOnRay.copy( this.origin ).addScaledVector( this.direction, s0 );
-
-		}
-
-		if ( optionalPointOnSegment ) {
-
-			optionalPointOnSegment.copy( _segCenter ).addScaledVector( _segDir, s1 );
-
-		}
-
-		return sqrDist;
-
-	}
-
-	intersectSphere( sphere, target ) {
-
-		_vector$9.subVectors( sphere.center, this.origin );
-		const tca = _vector$9.dot( this.direction );
-		const d2 = _vector$9.dot( _vector$9 ) - tca * tca;
-		const radius2 = sphere.radius * sphere.radius;
-
-		if ( d2 > radius2 ) return null;
-
-		const thc = Math.sqrt( radius2 - d2 );
-
-		// t0 = first intersect point - entrance on front of sphere
-		const t0 = tca - thc;
-
-		// t1 = second intersect point - exit point on back of sphere
-		const t1 = tca + thc;
-
-		// test to see if t1 is behind the ray - if so, return null
-		if ( t1 < 0 ) return null;
-
-		// test to see if t0 is behind the ray:
-		// if it is, the ray is inside the sphere, so return the second exit point scaled by t1,
-		// in order to always return an intersect point that is in front of the ray.
-		if ( t0 < 0 ) return this.at( t1, target );
-
-		// else t0 is in front of the ray, so return the first collision point scaled by t0
-		return this.at( t0, target );
-
-	}
-
-	intersectsSphere( sphere ) {
-
-		return this.distanceSqToPoint( sphere.center ) <= ( sphere.radius * sphere.radius );
-
-	}
-
-	distanceToPlane( plane ) {
-
-		const denominator = plane.normal.dot( this.direction );
-
-		if ( denominator === 0 ) {
-
-			// line is coplanar, return origin
-			if ( plane.distanceToPoint( this.origin ) === 0 ) {
-
-				return 0;
-
-			}
-
-			// Null is preferable to undefined since undefined means.... it is undefined
-
-			return null;
-
-		}
-
-		const t = - ( this.origin.dot( plane.normal ) + plane.constant ) / denominator;
-
-		// Return if the ray never intersects the plane
-
-		return t >= 0 ? t : null;
-
-	}
-
-	intersectPlane( plane, target ) {
-
-		const t = this.distanceToPlane( plane );
-
-		if ( t === null ) {
-
-			return null;
-
-		}
-
-		return this.at( t, target );
-
-	}
-
-	intersectsPlane( plane ) {
-
-		// check if the ray lies on the plane first
-
-		const distToPoint = plane.distanceToPoint( this.origin );
-
-		if ( distToPoint === 0 ) {
-
-			return true;
-
-		}
-
-		const denominator = plane.normal.dot( this.direction );
-
-		if ( denominator * distToPoint < 0 ) {
-
-			return true;
-
-		}
-
-		// ray origin is behind the plane (and is pointing behind it)
-
-		return false;
-
-	}
-
-	intersectBox( box, target ) {
-
-		let tmin, tmax, tymin, tymax, tzmin, tzmax;
-
-		const invdirx = 1 / this.direction.x,
-			invdiry = 1 / this.direction.y,
-			invdirz = 1 / this.direction.z;
-
-		const origin = this.origin;
-
-		if ( invdirx >= 0 ) {
-
-			tmin = ( box.min.x - origin.x ) * invdirx;
-			tmax = ( box.max.x - origin.x ) * invdirx;
-
-		} else {
-
-			tmin = ( box.max.x - origin.x ) * invdirx;
-			tmax = ( box.min.x - origin.x ) * invdirx;
-
-		}
-
-		if ( invdiry >= 0 ) {
-
-			tymin = ( box.min.y - origin.y ) * invdiry;
-			tymax = ( box.max.y - origin.y ) * invdiry;
-
-		} else {
-
-			tymin = ( box.max.y - origin.y ) * invdiry;
-			tymax = ( box.min.y - origin.y ) * invdiry;
-
-		}
-
-		if ( ( tmin > tymax ) || ( tymin > tmax ) ) return null;
-
-		if ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;
-
-		if ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;
-
-		if ( invdirz >= 0 ) {
-
-			tzmin = ( box.min.z - origin.z ) * invdirz;
-			tzmax = ( box.max.z - origin.z ) * invdirz;
-
-		} else {
-
-			tzmin = ( box.max.z - origin.z ) * invdirz;
-			tzmax = ( box.min.z - origin.z ) * invdirz;
-
-		}
-
-		if ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return null;
-
-		if ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;
-
-		if ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;
-
-		//return point closest to the ray (positive side)
-
-		if ( tmax < 0 ) return null;
-
-		return this.at( tmin >= 0 ? tmin : tmax, target );
-
-	}
-
-	intersectsBox( box ) {
-
-		return this.intersectBox( box, _vector$9 ) !== null;
-
-	}
-
-	intersectTriangle( a, b, c, backfaceCulling, target ) {
-
-		// Compute the offset origin, edges, and normal.
-
-		// from https://github.com/pmjoniak/GeometricTools/blob/master/GTEngine/Include/Mathematics/GteIntrRay3Triangle3.h
-
-		_edge1.subVectors( b, a );
-		_edge2.subVectors( c, a );
-		_normal$1.crossVectors( _edge1, _edge2 );
-
-		// Solve Q + t*D = b1*E1 + b2*E2 (Q = kDiff, D = ray direction,
-		// E1 = kEdge1, E2 = kEdge2, N = Cross(E1,E2)) by
-		//   |Dot(D,N)|*b1 = sign(Dot(D,N))*Dot(D,Cross(Q,E2))
-		//   |Dot(D,N)|*b2 = sign(Dot(D,N))*Dot(D,Cross(E1,Q))
-		//   |Dot(D,N)|*t = -sign(Dot(D,N))*Dot(Q,N)
-		let DdN = this.direction.dot( _normal$1 );
-		let sign;
-
-		if ( DdN > 0 ) {
-
-			if ( backfaceCulling ) return null;
-			sign = 1;
-
-		} else if ( DdN < 0 ) {
-
-			sign = - 1;
-			DdN = - DdN;
-
-		} else {
-
-			return null;
-
-		}
-
-		_diff.subVectors( this.origin, a );
-		const DdQxE2 = sign * this.direction.dot( _edge2.crossVectors( _diff, _edge2 ) );
-
-		// b1 < 0, no intersection
-		if ( DdQxE2 < 0 ) {
-
-			return null;
-
-		}
-
-		const DdE1xQ = sign * this.direction.dot( _edge1.cross( _diff ) );
-
-		// b2 < 0, no intersection
-		if ( DdE1xQ < 0 ) {
-
-			return null;
-
-		}
-
-		// b1+b2 > 1, no intersection
-		if ( DdQxE2 + DdE1xQ > DdN ) {
-
-			return null;
-
-		}
-
-		// Line intersects triangle, check if ray does.
-		const QdN = - sign * _diff.dot( _normal$1 );
-
-		// t < 0, no intersection
-		if ( QdN < 0 ) {
-
-			return null;
-
-		}
-
-		// Ray intersects triangle.
-		return this.at( QdN / DdN, target );
-
-	}
-
-	applyMatrix4( matrix4 ) {
-
-		this.origin.applyMatrix4( matrix4 );
-		this.direction.transformDirection( matrix4 );
-
-		return this;
-
-	}
-
-	equals( ray ) {
-
-		return ray.origin.equals( this.origin ) && ray.direction.equals( this.direction );
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-}
-
-class Matrix4 {
-
-	constructor() {
-
-		Matrix4.prototype.isMatrix4 = true;
-
-		this.elements = [
-
-			1, 0, 0, 0,
-			0, 1, 0, 0,
-			0, 0, 1, 0,
-			0, 0, 0, 1
-
-		];
-
-	}
-
-	set( n11, n12, n13, n14, n21, n22, n23, n24, n31, n32, n33, n34, n41, n42, n43, n44 ) {
-
-		const te = this.elements;
-
-		te[ 0 ] = n11; te[ 4 ] = n12; te[ 8 ] = n13; te[ 12 ] = n14;
-		te[ 1 ] = n21; te[ 5 ] = n22; te[ 9 ] = n23; te[ 13 ] = n24;
-		te[ 2 ] = n31; te[ 6 ] = n32; te[ 10 ] = n33; te[ 14 ] = n34;
-		te[ 3 ] = n41; te[ 7 ] = n42; te[ 11 ] = n43; te[ 15 ] = n44;
-
-		return this;
-
-	}
-
-	identity() {
-
-		this.set(
-
-			1, 0, 0, 0,
-			0, 1, 0, 0,
-			0, 0, 1, 0,
-			0, 0, 0, 1
-
-		);
-
-		return this;
-
-	}
-
-	clone() {
-
-		return new Matrix4().fromArray( this.elements );
-
-	}
-
-	copy( m ) {
-
-		const te = this.elements;
-		const me = m.elements;
-
-		te[ 0 ] = me[ 0 ]; te[ 1 ] = me[ 1 ]; te[ 2 ] = me[ 2 ]; te[ 3 ] = me[ 3 ];
-		te[ 4 ] = me[ 4 ]; te[ 5 ] = me[ 5 ]; te[ 6 ] = me[ 6 ]; te[ 7 ] = me[ 7 ];
-		te[ 8 ] = me[ 8 ]; te[ 9 ] = me[ 9 ]; te[ 10 ] = me[ 10 ]; te[ 11 ] = me[ 11 ];
-		te[ 12 ] = me[ 12 ]; te[ 13 ] = me[ 13 ]; te[ 14 ] = me[ 14 ]; te[ 15 ] = me[ 15 ];
-
-		return this;
-
-	}
-
-	copyPosition( m ) {
-
-		const te = this.elements, me = m.elements;
-
-		te[ 12 ] = me[ 12 ];
-		te[ 13 ] = me[ 13 ];
-		te[ 14 ] = me[ 14 ];
-
-		return this;
-
-	}
-
-	setFromMatrix3( m ) {
-
-		const me = m.elements;
-
-		this.set(
-
-			me[ 0 ], me[ 3 ], me[ 6 ], 0,
-			me[ 1 ], me[ 4 ], me[ 7 ], 0,
-			me[ 2 ], me[ 5 ], me[ 8 ], 0,
-			0, 0, 0, 1
-
-		);
-
-		return this;
-
-	}
-
-	extractBasis( xAxis, yAxis, zAxis ) {
-
-		xAxis.setFromMatrixColumn( this, 0 );
-		yAxis.setFromMatrixColumn( this, 1 );
-		zAxis.setFromMatrixColumn( this, 2 );
-
-		return this;
-
-	}
-
-	makeBasis( xAxis, yAxis, zAxis ) {
-
-		this.set(
-			xAxis.x, yAxis.x, zAxis.x, 0,
-			xAxis.y, yAxis.y, zAxis.y, 0,
-			xAxis.z, yAxis.z, zAxis.z, 0,
-			0, 0, 0, 1
-		);
-
-		return this;
-
-	}
-
-	extractRotation( m ) {
-
-		// this method does not support reflection matrices
-
-		const te = this.elements;
-		const me = m.elements;
-
-		const scaleX = 1 / _v1$5.setFromMatrixColumn( m, 0 ).length();
-		const scaleY = 1 / _v1$5.setFromMatrixColumn( m, 1 ).length();
-		const scaleZ = 1 / _v1$5.setFromMatrixColumn( m, 2 ).length();
-
-		te[ 0 ] = me[ 0 ] * scaleX;
-		te[ 1 ] = me[ 1 ] * scaleX;
-		te[ 2 ] = me[ 2 ] * scaleX;
-		te[ 3 ] = 0;
-
-		te[ 4 ] = me[ 4 ] * scaleY;
-		te[ 5 ] = me[ 5 ] * scaleY;
-		te[ 6 ] = me[ 6 ] * scaleY;
-		te[ 7 ] = 0;
-
-		te[ 8 ] = me[ 8 ] * scaleZ;
-		te[ 9 ] = me[ 9 ] * scaleZ;
-		te[ 10 ] = me[ 10 ] * scaleZ;
-		te[ 11 ] = 0;
-
-		te[ 12 ] = 0;
-		te[ 13 ] = 0;
-		te[ 14 ] = 0;
-		te[ 15 ] = 1;
-
-		return this;
-
-	}
-
-	makeRotationFromEuler( euler ) {
-
-		const te = this.elements;
-
-		const x = euler.x, y = euler.y, z = euler.z;
-		const a = Math.cos( x ), b = Math.sin( x );
-		const c = Math.cos( y ), d = Math.sin( y );
-		const e = Math.cos( z ), f = Math.sin( z );
-
-		if ( euler.order === 'XYZ' ) {
-
-			const ae = a * e, af = a * f, be = b * e, bf = b * f;
-
-			te[ 0 ] = c * e;
-			te[ 4 ] = - c * f;
-			te[ 8 ] = d;
-
-			te[ 1 ] = af + be * d;
-			te[ 5 ] = ae - bf * d;
-			te[ 9 ] = - b * c;
-
-			te[ 2 ] = bf - ae * d;
-			te[ 6 ] = be + af * d;
-			te[ 10 ] = a * c;
-
-		} else if ( euler.order === 'YXZ' ) {
-
-			const ce = c * e, cf = c * f, de = d * e, df = d * f;
-
-			te[ 0 ] = ce + df * b;
-			te[ 4 ] = de * b - cf;
-			te[ 8 ] = a * d;
-
-			te[ 1 ] = a * f;
-			te[ 5 ] = a * e;
-			te[ 9 ] = - b;
-
-			te[ 2 ] = cf * b - de;
-			te[ 6 ] = df + ce * b;
-			te[ 10 ] = a * c;
-
-		} else if ( euler.order === 'ZXY' ) {
-
-			const ce = c * e, cf = c * f, de = d * e, df = d * f;
-
-			te[ 0 ] = ce - df * b;
-			te[ 4 ] = - a * f;
-			te[ 8 ] = de + cf * b;
-
-			te[ 1 ] = cf + de * b;
-			te[ 5 ] = a * e;
-			te[ 9 ] = df - ce * b;
-
-			te[ 2 ] = - a * d;
-			te[ 6 ] = b;
-			te[ 10 ] = a * c;
-
-		} else if ( euler.order === 'ZYX' ) {
-
-			const ae = a * e, af = a * f, be = b * e, bf = b * f;
-
-			te[ 0 ] = c * e;
-			te[ 4 ] = be * d - af;
-			te[ 8 ] = ae * d + bf;
-
-			te[ 1 ] = c * f;
-			te[ 5 ] = bf * d + ae;
-			te[ 9 ] = af * d - be;
-
-			te[ 2 ] = - d;
-			te[ 6 ] = b * c;
-			te[ 10 ] = a * c;
-
-		} else if ( euler.order === 'YZX' ) {
-
-			const ac = a * c, ad = a * d, bc = b * c, bd = b * d;
-
-			te[ 0 ] = c * e;
-			te[ 4 ] = bd - ac * f;
-			te[ 8 ] = bc * f + ad;
-
-			te[ 1 ] = f;
-			te[ 5 ] = a * e;
-			te[ 9 ] = - b * e;
-
-			te[ 2 ] = - d * e;
-			te[ 6 ] = ad * f + bc;
-			te[ 10 ] = ac - bd * f;
-
-		} else if ( euler.order === 'XZY' ) {
-
-			const ac = a * c, ad = a * d, bc = b * c, bd = b * d;
-
-			te[ 0 ] = c * e;
-			te[ 4 ] = - f;
-			te[ 8 ] = d * e;
-
-			te[ 1 ] = ac * f + bd;
-			te[ 5 ] = a * e;
-			te[ 9 ] = ad * f - bc;
-
-			te[ 2 ] = bc * f - ad;
-			te[ 6 ] = b * e;
-			te[ 10 ] = bd * f + ac;
-
-		}
-
-		// bottom row
-		te[ 3 ] = 0;
-		te[ 7 ] = 0;
-		te[ 11 ] = 0;
-
-		// last column
-		te[ 12 ] = 0;
-		te[ 13 ] = 0;
-		te[ 14 ] = 0;
-		te[ 15 ] = 1;
-
-		return this;
-
-	}
-
-	makeRotationFromQuaternion( q ) {
-
-		return this.compose( _zero, q, _one );
-
-	}
-
-	lookAt( eye, target, up ) {
-
-		const te = this.elements;
-
-		_z.subVectors( eye, target );
-
-		if ( _z.lengthSq() === 0 ) {
-
-			// eye and target are in the same position
-
-			_z.z = 1;
-
-		}
-
-		_z.normalize();
-		_x.crossVectors( up, _z );
-
-		if ( _x.lengthSq() === 0 ) {
-
-			// up and z are parallel
-
-			if ( Math.abs( up.z ) === 1 ) {
-
-				_z.x += 0.0001;
-
-			} else {
-
-				_z.z += 0.0001;
-
-			}
-
-			_z.normalize();
-			_x.crossVectors( up, _z );
-
-		}
-
-		_x.normalize();
-		_y.crossVectors( _z, _x );
-
-		te[ 0 ] = _x.x; te[ 4 ] = _y.x; te[ 8 ] = _z.x;
-		te[ 1 ] = _x.y; te[ 5 ] = _y.y; te[ 9 ] = _z.y;
-		te[ 2 ] = _x.z; te[ 6 ] = _y.z; te[ 10 ] = _z.z;
-
-		return this;
-
-	}
-
-	multiply( m ) {
-
-		return this.multiplyMatrices( this, m );
-
-	}
-
-	premultiply( m ) {
-
-		return this.multiplyMatrices( m, this );
-
-	}
-
-	multiplyMatrices( a, b ) {
-
-		const ae = a.elements;
-		const be = b.elements;
-		const te = this.elements;
-
-		const a11 = ae[ 0 ], a12 = ae[ 4 ], a13 = ae[ 8 ], a14 = ae[ 12 ];
-		const a21 = ae[ 1 ], a22 = ae[ 5 ], a23 = ae[ 9 ], a24 = ae[ 13 ];
-		const a31 = ae[ 2 ], a32 = ae[ 6 ], a33 = ae[ 10 ], a34 = ae[ 14 ];
-		const a41 = ae[ 3 ], a42 = ae[ 7 ], a43 = ae[ 11 ], a44 = ae[ 15 ];
-
-		const b11 = be[ 0 ], b12 = be[ 4 ], b13 = be[ 8 ], b14 = be[ 12 ];
-		const b21 = be[ 1 ], b22 = be[ 5 ], b23 = be[ 9 ], b24 = be[ 13 ];
-		const b31 = be[ 2 ], b32 = be[ 6 ], b33 = be[ 10 ], b34 = be[ 14 ];
-		const b41 = be[ 3 ], b42 = be[ 7 ], b43 = be[ 11 ], b44 = be[ 15 ];
-
-		te[ 0 ] = a11 * b11 + a12 * b21 + a13 * b31 + a14 * b41;
-		te[ 4 ] = a11 * b12 + a12 * b22 + a13 * b32 + a14 * b42;
-		te[ 8 ] = a11 * b13 + a12 * b23 + a13 * b33 + a14 * b43;
-		te[ 12 ] = a11 * b14 + a12 * b24 + a13 * b34 + a14 * b44;
-
-		te[ 1 ] = a21 * b11 + a22 * b21 + a23 * b31 + a24 * b41;
-		te[ 5 ] = a21 * b12 + a22 * b22 + a23 * b32 + a24 * b42;
-		te[ 9 ] = a21 * b13 + a22 * b23 + a23 * b33 + a24 * b43;
-		te[ 13 ] = a21 * b14 + a22 * b24 + a23 * b34 + a24 * b44;
-
-		te[ 2 ] = a31 * b11 + a32 * b21 + a33 * b31 + a34 * b41;
-		te[ 6 ] = a31 * b12 + a32 * b22 + a33 * b32 + a34 * b42;
-		te[ 10 ] = a31 * b13 + a32 * b23 + a33 * b33 + a34 * b43;
-		te[ 14 ] = a31 * b14 + a32 * b24 + a33 * b34 + a34 * b44;
-
-		te[ 3 ] = a41 * b11 + a42 * b21 + a43 * b31 + a44 * b41;
-		te[ 7 ] = a41 * b12 + a42 * b22 + a43 * b32 + a44 * b42;
-		te[ 11 ] = a41 * b13 + a42 * b23 + a43 * b33 + a44 * b43;
-		te[ 15 ] = a41 * b14 + a42 * b24 + a43 * b34 + a44 * b44;
-
-		return this;
-
-	}
-
-	multiplyScalar( s ) {
-
-		const te = this.elements;
-
-		te[ 0 ] *= s; te[ 4 ] *= s; te[ 8 ] *= s; te[ 12 ] *= s;
-		te[ 1 ] *= s; te[ 5 ] *= s; te[ 9 ] *= s; te[ 13 ] *= s;
-		te[ 2 ] *= s; te[ 6 ] *= s; te[ 10 ] *= s; te[ 14 ] *= s;
-		te[ 3 ] *= s; te[ 7 ] *= s; te[ 11 ] *= s; te[ 15 ] *= s;
-
-		return this;
-
-	}
-
-	determinant() {
-
-		const te = this.elements;
-
-		const n11 = te[ 0 ], n12 = te[ 4 ], n13 = te[ 8 ], n14 = te[ 12 ];
-		const n21 = te[ 1 ], n22 = te[ 5 ], n23 = te[ 9 ], n24 = te[ 13 ];
-		const n31 = te[ 2 ], n32 = te[ 6 ], n33 = te[ 10 ], n34 = te[ 14 ];
-		const n41 = te[ 3 ], n42 = te[ 7 ], n43 = te[ 11 ], n44 = te[ 15 ];
-
-		//TODO: make this more efficient
-		//( based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm )
-
-		return (
-			n41 * (
-				+ n14 * n23 * n32
-				 - n13 * n24 * n32
-				 - n14 * n22 * n33
-				 + n12 * n24 * n33
-				 + n13 * n22 * n34
-				 - n12 * n23 * n34
-			) +
-			n42 * (
-				+ n11 * n23 * n34
-				 - n11 * n24 * n33
-				 + n14 * n21 * n33
-				 - n13 * n21 * n34
-				 + n13 * n24 * n31
-				 - n14 * n23 * n31
-			) +
-			n43 * (
-				+ n11 * n24 * n32
-				 - n11 * n22 * n34
-				 - n14 * n21 * n32
-				 + n12 * n21 * n34
-				 + n14 * n22 * n31
-				 - n12 * n24 * n31
-			) +
-			n44 * (
-				- n13 * n22 * n31
-				 - n11 * n23 * n32
-				 + n11 * n22 * n33
-				 + n13 * n21 * n32
-				 - n12 * n21 * n33
-				 + n12 * n23 * n31
-			)
-
-		);
-
-	}
-
-	transpose() {
-
-		const te = this.elements;
-		let tmp;
-
-		tmp = te[ 1 ]; te[ 1 ] = te[ 4 ]; te[ 4 ] = tmp;
-		tmp = te[ 2 ]; te[ 2 ] = te[ 8 ]; te[ 8 ] = tmp;
-		tmp = te[ 6 ]; te[ 6 ] = te[ 9 ]; te[ 9 ] = tmp;
-
-		tmp = te[ 3 ]; te[ 3 ] = te[ 12 ]; te[ 12 ] = tmp;
-		tmp = te[ 7 ]; te[ 7 ] = te[ 13 ]; te[ 13 ] = tmp;
-		tmp = te[ 11 ]; te[ 11 ] = te[ 14 ]; te[ 14 ] = tmp;
-
-		return this;
-
-	}
-
-	setPosition( x, y, z ) {
-
-		const te = this.elements;
-
-		if ( x.isVector3 ) {
-
-			te[ 12 ] = x.x;
-			te[ 13 ] = x.y;
-			te[ 14 ] = x.z;
-
-		} else {
-
-			te[ 12 ] = x;
-			te[ 13 ] = y;
-			te[ 14 ] = z;
-
-		}
-
-		return this;
-
-	}
-
-	invert() {
-
-		// based on http://www.euclideanspace.com/maths/algebra/matrix/functions/inverse/fourD/index.htm
-		const te = this.elements,
-
-			n11 = te[ 0 ], n21 = te[ 1 ], n31 = te[ 2 ], n41 = te[ 3 ],
-			n12 = te[ 4 ], n22 = te[ 5 ], n32 = te[ 6 ], n42 = te[ 7 ],
-			n13 = te[ 8 ], n23 = te[ 9 ], n33 = te[ 10 ], n43 = te[ 11 ],
-			n14 = te[ 12 ], n24 = te[ 13 ], n34 = te[ 14 ], n44 = te[ 15 ],
-
-			t11 = n23 * n34 * n42 - n24 * n33 * n42 + n24 * n32 * n43 - n22 * n34 * n43 - n23 * n32 * n44 + n22 * n33 * n44,
-			t12 = n14 * n33 * n42 - n13 * n34 * n42 - n14 * n32 * n43 + n12 * n34 * n43 + n13 * n32 * n44 - n12 * n33 * n44,
-			t13 = n13 * n24 * n42 - n14 * n23 * n42 + n14 * n22 * n43 - n12 * n24 * n43 - n13 * n22 * n44 + n12 * n23 * n44,
-			t14 = n14 * n23 * n32 - n13 * n24 * n32 - n14 * n22 * n33 + n12 * n24 * n33 + n13 * n22 * n34 - n12 * n23 * n34;
-
-		const det = n11 * t11 + n21 * t12 + n31 * t13 + n41 * t14;
-
-		if ( det === 0 ) return this.set( 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 );
-
-		const detInv = 1 / det;
-
-		te[ 0 ] = t11 * detInv;
-		te[ 1 ] = ( n24 * n33 * n41 - n23 * n34 * n41 - n24 * n31 * n43 + n21 * n34 * n43 + n23 * n31 * n44 - n21 * n33 * n44 ) * detInv;
-		te[ 2 ] = ( n22 * n34 * n41 - n24 * n32 * n41 + n24 * n31 * n42 - n21 * n34 * n42 - n22 * n31 * n44 + n21 * n32 * n44 ) * detInv;
-		te[ 3 ] = ( n23 * n32 * n41 - n22 * n33 * n41 - n23 * n31 * n42 + n21 * n33 * n42 + n22 * n31 * n43 - n21 * n32 * n43 ) * detInv;
-
-		te[ 4 ] = t12 * detInv;
-		te[ 5 ] = ( n13 * n34 * n41 - n14 * n33 * n41 + n14 * n31 * n43 - n11 * n34 * n43 - n13 * n31 * n44 + n11 * n33 * n44 ) * detInv;
-		te[ 6 ] = ( n14 * n32 * n41 - n12 * n34 * n41 - n14 * n31 * n42 + n11 * n34 * n42 + n12 * n31 * n44 - n11 * n32 * n44 ) * detInv;
-		te[ 7 ] = ( n12 * n33 * n41 - n13 * n32 * n41 + n13 * n31 * n42 - n11 * n33 * n42 - n12 * n31 * n43 + n11 * n32 * n43 ) * detInv;
-
-		te[ 8 ] = t13 * detInv;
-		te[ 9 ] = ( n14 * n23 * n41 - n13 * n24 * n41 - n14 * n21 * n43 + n11 * n24 * n43 + n13 * n21 * n44 - n11 * n23 * n44 ) * detInv;
-		te[ 10 ] = ( n12 * n24 * n41 - n14 * n22 * n41 + n14 * n21 * n42 - n11 * n24 * n42 - n12 * n21 * n44 + n11 * n22 * n44 ) * detInv;
-		te[ 11 ] = ( n13 * n22 * n41 - n12 * n23 * n41 - n13 * n21 * n42 + n11 * n23 * n42 + n12 * n21 * n43 - n11 * n22 * n43 ) * detInv;
-
-		te[ 12 ] = t14 * detInv;
-		te[ 13 ] = ( n13 * n24 * n31 - n14 * n23 * n31 + n14 * n21 * n33 - n11 * n24 * n33 - n13 * n21 * n34 + n11 * n23 * n34 ) * detInv;
-		te[ 14 ] = ( n14 * n22 * n31 - n12 * n24 * n31 - n14 * n21 * n32 + n11 * n24 * n32 + n12 * n21 * n34 - n11 * n22 * n34 ) * detInv;
-		te[ 15 ] = ( n12 * n23 * n31 - n13 * n22 * n31 + n13 * n21 * n32 - n11 * n23 * n32 - n12 * n21 * n33 + n11 * n22 * n33 ) * detInv;
-
-		return this;
-
-	}
-
-	scale( v ) {
-
-		const te = this.elements;
-		const x = v.x, y = v.y, z = v.z;
-
-		te[ 0 ] *= x; te[ 4 ] *= y; te[ 8 ] *= z;
-		te[ 1 ] *= x; te[ 5 ] *= y; te[ 9 ] *= z;
-		te[ 2 ] *= x; te[ 6 ] *= y; te[ 10 ] *= z;
-		te[ 3 ] *= x; te[ 7 ] *= y; te[ 11 ] *= z;
-
-		return this;
-
-	}
-
-	getMaxScaleOnAxis() {
-
-		const te = this.elements;
-
-		const scaleXSq = te[ 0 ] * te[ 0 ] + te[ 1 ] * te[ 1 ] + te[ 2 ] * te[ 2 ];
-		const scaleYSq = te[ 4 ] * te[ 4 ] + te[ 5 ] * te[ 5 ] + te[ 6 ] * te[ 6 ];
-		const scaleZSq = te[ 8 ] * te[ 8 ] + te[ 9 ] * te[ 9 ] + te[ 10 ] * te[ 10 ];
-
-		return Math.sqrt( Math.max( scaleXSq, scaleYSq, scaleZSq ) );
-
-	}
-
-	makeTranslation( x, y, z ) {
-
-		this.set(
-
-			1, 0, 0, x,
-			0, 1, 0, y,
-			0, 0, 1, z,
-			0, 0, 0, 1
-
-		);
-
-		return this;
-
-	}
-
-	makeRotationX( theta ) {
-
-		const c = Math.cos( theta ), s = Math.sin( theta );
-
-		this.set(
-
-			1, 0, 0, 0,
-			0, c, - s, 0,
-			0, s, c, 0,
-			0, 0, 0, 1
-
-		);
-
-		return this;
-
-	}
-
-	makeRotationY( theta ) {
-
-		const c = Math.cos( theta ), s = Math.sin( theta );
-
-		this.set(
-
-			 c, 0, s, 0,
-			 0, 1, 0, 0,
-			- s, 0, c, 0,
-			 0, 0, 0, 1
-
-		);
-
-		return this;
-
-	}
-
-	makeRotationZ( theta ) {
-
-		const c = Math.cos( theta ), s = Math.sin( theta );
-
-		this.set(
-
-			c, - s, 0, 0,
-			s, c, 0, 0,
-			0, 0, 1, 0,
-			0, 0, 0, 1
-
-		);
-
-		return this;
-
-	}
-
-	makeRotationAxis( axis, angle ) {
-
-		// Based on http://www.gamedev.net/reference/articles/article1199.asp
-
-		const c = Math.cos( angle );
-		const s = Math.sin( angle );
-		const t = 1 - c;
-		const x = axis.x, y = axis.y, z = axis.z;
-		const tx = t * x, ty = t * y;
-
-		this.set(
-
-			tx * x + c, tx * y - s * z, tx * z + s * y, 0,
-			tx * y + s * z, ty * y + c, ty * z - s * x, 0,
-			tx * z - s * y, ty * z + s * x, t * z * z + c, 0,
-			0, 0, 0, 1
-
-		);
-
-		return this;
-
-	}
-
-	makeScale( x, y, z ) {
-
-		this.set(
-
-			x, 0, 0, 0,
-			0, y, 0, 0,
-			0, 0, z, 0,
-			0, 0, 0, 1
-
-		);
-
-		return this;
-
-	}
-
-	makeShear( xy, xz, yx, yz, zx, zy ) {
-
-		this.set(
-
-			1, yx, zx, 0,
-			xy, 1, zy, 0,
-			xz, yz, 1, 0,
-			0, 0, 0, 1
-
-		);
-
-		return this;
-
-	}
-
-	compose( position, quaternion, scale ) {
-
-		const te = this.elements;
-
-		const x = quaternion._x, y = quaternion._y, z = quaternion._z, w = quaternion._w;
-		const x2 = x + x,	y2 = y + y, z2 = z + z;
-		const xx = x * x2, xy = x * y2, xz = x * z2;
-		const yy = y * y2, yz = y * z2, zz = z * z2;
-		const wx = w * x2, wy = w * y2, wz = w * z2;
-
-		const sx = scale.x, sy = scale.y, sz = scale.z;
-
-		te[ 0 ] = ( 1 - ( yy + zz ) ) * sx;
-		te[ 1 ] = ( xy + wz ) * sx;
-		te[ 2 ] = ( xz - wy ) * sx;
-		te[ 3 ] = 0;
-
-		te[ 4 ] = ( xy - wz ) * sy;
-		te[ 5 ] = ( 1 - ( xx + zz ) ) * sy;
-		te[ 6 ] = ( yz + wx ) * sy;
-		te[ 7 ] = 0;
-
-		te[ 8 ] = ( xz + wy ) * sz;
-		te[ 9 ] = ( yz - wx ) * sz;
-		te[ 10 ] = ( 1 - ( xx + yy ) ) * sz;
-		te[ 11 ] = 0;
-
-		te[ 12 ] = position.x;
-		te[ 13 ] = position.y;
-		te[ 14 ] = position.z;
-		te[ 15 ] = 1;
-
-		return this;
-
-	}
-
-	decompose( position, quaternion, scale ) {
-
-		const te = this.elements;
-
-		let sx = _v1$5.set( te[ 0 ], te[ 1 ], te[ 2 ] ).length();
-		const sy = _v1$5.set( te[ 4 ], te[ 5 ], te[ 6 ] ).length();
-		const sz = _v1$5.set( te[ 8 ], te[ 9 ], te[ 10 ] ).length();
-
-		// if determine is negative, we need to invert one scale
-		const det = this.determinant();
-		if ( det < 0 ) sx = - sx;
-
-		position.x = te[ 12 ];
-		position.y = te[ 13 ];
-		position.z = te[ 14 ];
-
-		// scale the rotation part
-		_m1$2.copy( this );
-
-		const invSX = 1 / sx;
-		const invSY = 1 / sy;
-		const invSZ = 1 / sz;
-
-		_m1$2.elements[ 0 ] *= invSX;
-		_m1$2.elements[ 1 ] *= invSX;
-		_m1$2.elements[ 2 ] *= invSX;
-
-		_m1$2.elements[ 4 ] *= invSY;
-		_m1$2.elements[ 5 ] *= invSY;
-		_m1$2.elements[ 6 ] *= invSY;
-
-		_m1$2.elements[ 8 ] *= invSZ;
-		_m1$2.elements[ 9 ] *= invSZ;
-		_m1$2.elements[ 10 ] *= invSZ;
-
-		quaternion.setFromRotationMatrix( _m1$2 );
-
-		scale.x = sx;
-		scale.y = sy;
-		scale.z = sz;
-
-		return this;
-
-	}
-
-	makePerspective( left, right, top, bottom, near, far ) {
-
-		const te = this.elements;
-		const x = 2 * near / ( right - left );
-		const y = 2 * near / ( top - bottom );
-
-		const a = ( right + left ) / ( right - left );
-		const b = ( top + bottom ) / ( top - bottom );
-		const c = - ( far + near ) / ( far - near );
-		const d = - 2 * far * near / ( far - near );
-
-		te[ 0 ] = x;	te[ 4 ] = 0;	te[ 8 ] = a;	te[ 12 ] = 0;
-		te[ 1 ] = 0;	te[ 5 ] = y;	te[ 9 ] = b;	te[ 13 ] = 0;
-		te[ 2 ] = 0;	te[ 6 ] = 0;	te[ 10 ] = c;	te[ 14 ] = d;
-		te[ 3 ] = 0;	te[ 7 ] = 0;	te[ 11 ] = - 1;	te[ 15 ] = 0;
-
-		return this;
-
-	}
-
-	makeOrthographic( left, right, top, bottom, near, far ) {
-
-		const te = this.elements;
-		const w = 1.0 / ( right - left );
-		const h = 1.0 / ( top - bottom );
-		const p = 1.0 / ( far - near );
-
-		const x = ( right + left ) * w;
-		const y = ( top + bottom ) * h;
-		const z = ( far + near ) * p;
-
-		te[ 0 ] = 2 * w;	te[ 4 ] = 0;	te[ 8 ] = 0;	te[ 12 ] = - x;
-		te[ 1 ] = 0;	te[ 5 ] = 2 * h;	te[ 9 ] = 0;	te[ 13 ] = - y;
-		te[ 2 ] = 0;	te[ 6 ] = 0;	te[ 10 ] = - 2 * p;	te[ 14 ] = - z;
-		te[ 3 ] = 0;	te[ 7 ] = 0;	te[ 11 ] = 0;	te[ 15 ] = 1;
-
-		return this;
-
-	}
-
-	equals( matrix ) {
-
-		const te = this.elements;
-		const me = matrix.elements;
-
-		for ( let i = 0; i < 16; i ++ ) {
-
-			if ( te[ i ] !== me[ i ] ) return false;
-
-		}
-
-		return true;
-
-	}
-
-	fromArray( array, offset = 0 ) {
-
-		for ( let i = 0; i < 16; i ++ ) {
-
-			this.elements[ i ] = array[ i + offset ];
-
-		}
-
-		return this;
-
-	}
-
-	toArray( array = [], offset = 0 ) {
-
-		const te = this.elements;
-
-		array[ offset ] = te[ 0 ];
-		array[ offset + 1 ] = te[ 1 ];
-		array[ offset + 2 ] = te[ 2 ];
-		array[ offset + 3 ] = te[ 3 ];
-
-		array[ offset + 4 ] = te[ 4 ];
-		array[ offset + 5 ] = te[ 5 ];
-		array[ offset + 6 ] = te[ 6 ];
-		array[ offset + 7 ] = te[ 7 ];
-
-		array[ offset + 8 ] = te[ 8 ];
-		array[ offset + 9 ] = te[ 9 ];
-		array[ offset + 10 ] = te[ 10 ];
-		array[ offset + 11 ] = te[ 11 ];
-
-		array[ offset + 12 ] = te[ 12 ];
-		array[ offset + 13 ] = te[ 13 ];
-		array[ offset + 14 ] = te[ 14 ];
-		array[ offset + 15 ] = te[ 15 ];
-
-		return array;
-
-	}
-
-}
-
-const _v1$5 = /*@__PURE__*/ new Vector3();
-const _m1$2 = /*@__PURE__*/ new Matrix4();
-const _zero = /*@__PURE__*/ new Vector3( 0, 0, 0 );
-const _one = /*@__PURE__*/ new Vector3( 1, 1, 1 );
-const _x = /*@__PURE__*/ new Vector3();
-const _y = /*@__PURE__*/ new Vector3();
-const _z = /*@__PURE__*/ new Vector3();
-
-const _matrix = /*@__PURE__*/ new Matrix4();
-const _quaternion$3 = /*@__PURE__*/ new Quaternion();
-
-class Euler {
-
-	constructor( x = 0, y = 0, z = 0, order = Euler.DEFAULT_ORDER ) {
-
-		this.isEuler = true;
-
-		this._x = x;
-		this._y = y;
-		this._z = z;
-		this._order = order;
-
-	}
-
-	get x() {
-
-		return this._x;
-
-	}
-
-	set x( value ) {
-
-		this._x = value;
-		this._onChangeCallback();
-
-	}
-
-	get y() {
-
-		return this._y;
-
-	}
-
-	set y( value ) {
-
-		this._y = value;
-		this._onChangeCallback();
-
-	}
-
-	get z() {
-
-		return this._z;
-
-	}
-
-	set z( value ) {
-
-		this._z = value;
-		this._onChangeCallback();
-
-	}
-
-	get order() {
-
-		return this._order;
-
-	}
-
-	set order( value ) {
-
-		this._order = value;
-		this._onChangeCallback();
-
-	}
-
-	set( x, y, z, order = this._order ) {
-
-		this._x = x;
-		this._y = y;
-		this._z = z;
-		this._order = order;
-
-		this._onChangeCallback();
-
-		return this;
-
-	}
-
-	clone() {
-
-		return new this.constructor( this._x, this._y, this._z, this._order );
-
-	}
-
-	copy( euler ) {
-
-		this._x = euler._x;
-		this._y = euler._y;
-		this._z = euler._z;
-		this._order = euler._order;
-
-		this._onChangeCallback();
-
-		return this;
-
-	}
-
-	setFromRotationMatrix( m, order = this._order, update = true ) {
-
-		// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
-
-		const te = m.elements;
-		const m11 = te[ 0 ], m12 = te[ 4 ], m13 = te[ 8 ];
-		const m21 = te[ 1 ], m22 = te[ 5 ], m23 = te[ 9 ];
-		const m31 = te[ 2 ], m32 = te[ 6 ], m33 = te[ 10 ];
-
-		switch ( order ) {
-
-			case 'XYZ':
-
-				this._y = Math.asin( clamp( m13, - 1, 1 ) );
-
-				if ( Math.abs( m13 ) < 0.9999999 ) {
-
-					this._x = Math.atan2( - m23, m33 );
-					this._z = Math.atan2( - m12, m11 );
-
-				} else {
-
-					this._x = Math.atan2( m32, m22 );
-					this._z = 0;
-
-				}
-
-				break;
-
-			case 'YXZ':
-
-				this._x = Math.asin( - clamp( m23, - 1, 1 ) );
-
-				if ( Math.abs( m23 ) < 0.9999999 ) {
-
-					this._y = Math.atan2( m13, m33 );
-					this._z = Math.atan2( m21, m22 );
-
-				} else {
-
-					this._y = Math.atan2( - m31, m11 );
-					this._z = 0;
-
-				}
-
-				break;
-
-			case 'ZXY':
-
-				this._x = Math.asin( clamp( m32, - 1, 1 ) );
-
-				if ( Math.abs( m32 ) < 0.9999999 ) {
-
-					this._y = Math.atan2( - m31, m33 );
-					this._z = Math.atan2( - m12, m22 );
-
-				} else {
-
-					this._y = 0;
-					this._z = Math.atan2( m21, m11 );
-
-				}
-
-				break;
-
-			case 'ZYX':
-
-				this._y = Math.asin( - clamp( m31, - 1, 1 ) );
-
-				if ( Math.abs( m31 ) < 0.9999999 ) {
-
-					this._x = Math.atan2( m32, m33 );
-					this._z = Math.atan2( m21, m11 );
-
-				} else {
-
-					this._x = 0;
-					this._z = Math.atan2( - m12, m22 );
-
-				}
-
-				break;
-
-			case 'YZX':
-
-				this._z = Math.asin( clamp( m21, - 1, 1 ) );
-
-				if ( Math.abs( m21 ) < 0.9999999 ) {
-
-					this._x = Math.atan2( - m23, m22 );
-					this._y = Math.atan2( - m31, m11 );
-
-				} else {
-
-					this._x = 0;
-					this._y = Math.atan2( m13, m33 );
-
-				}
-
-				break;
-
-			case 'XZY':
-
-				this._z = Math.asin( - clamp( m12, - 1, 1 ) );
-
-				if ( Math.abs( m12 ) < 0.9999999 ) {
-
-					this._x = Math.atan2( m32, m22 );
-					this._y = Math.atan2( m13, m11 );
-
-				} else {
-
-					this._x = Math.atan2( - m23, m33 );
-					this._y = 0;
-
-				}
-
-				break;
-
-			default:
-
-				console.warn( 'THREE.Euler: .setFromRotationMatrix() encountered an unknown order: ' + order );
-
-		}
-
-		this._order = order;
-
-		if ( update === true ) this._onChangeCallback();
-
-		return this;
-
-	}
-
-	setFromQuaternion( q, order, update ) {
-
-		_matrix.makeRotationFromQuaternion( q );
-
-		return this.setFromRotationMatrix( _matrix, order, update );
-
-	}
-
-	setFromVector3( v, order = this._order ) {
-
-		return this.set( v.x, v.y, v.z, order );
-
-	}
-
-	reorder( newOrder ) {
-
-		// WARNING: this discards revolution information -bhouston
-
-		_quaternion$3.setFromEuler( this );
-
-		return this.setFromQuaternion( _quaternion$3, newOrder );
-
-	}
-
-	equals( euler ) {
-
-		return ( euler._x === this._x ) && ( euler._y === this._y ) && ( euler._z === this._z ) && ( euler._order === this._order );
-
-	}
-
-	fromArray( array ) {
-
-		this._x = array[ 0 ];
-		this._y = array[ 1 ];
-		this._z = array[ 2 ];
-		if ( array[ 3 ] !== undefined ) this._order = array[ 3 ];
-
-		this._onChangeCallback();
-
-		return this;
-
-	}
-
-	toArray( array = [], offset = 0 ) {
-
-		array[ offset ] = this._x;
-		array[ offset + 1 ] = this._y;
-		array[ offset + 2 ] = this._z;
-		array[ offset + 3 ] = this._order;
-
-		return array;
-
-	}
-
-	_onChange( callback ) {
-
-		this._onChangeCallback = callback;
-
-		return this;
-
-	}
-
-	_onChangeCallback() {}
-
-	*[ Symbol.iterator ]() {
-
-		yield this._x;
-		yield this._y;
-		yield this._z;
-		yield this._order;
-
-	}
-
-}
-
-Euler.DEFAULT_ORDER = 'XYZ';
-
-class Layers {
-
-	constructor() {
-
-		this.mask = 1 | 0;
-
-	}
-
-	set( channel ) {
-
-		this.mask = ( 1 << channel | 0 ) >>> 0;
-
-	}
-
-	enable( channel ) {
-
-		this.mask |= 1 << channel | 0;
-
-	}
-
-	enableAll() {
-
-		this.mask = 0xffffffff | 0;
-
-	}
-
-	toggle( channel ) {
-
-		this.mask ^= 1 << channel | 0;
-
-	}
-
-	disable( channel ) {
-
-		this.mask &= ~ ( 1 << channel | 0 );
-
-	}
-
-	disableAll() {
-
-		this.mask = 0;
-
-	}
-
-	test( layers ) {
-
-		return ( this.mask & layers.mask ) !== 0;
-
-	}
-
-	isEnabled( channel ) {
-
-		return ( this.mask & ( 1 << channel | 0 ) ) !== 0;
-
-	}
-
-}
-
-let _object3DId = 0;
-
-const _v1$4 = /*@__PURE__*/ new Vector3();
-const _q1 = /*@__PURE__*/ new Quaternion();
-const _m1$1 = /*@__PURE__*/ new Matrix4();
-const _target = /*@__PURE__*/ new Vector3();
-
-const _position$3 = /*@__PURE__*/ new Vector3();
-const _scale$2 = /*@__PURE__*/ new Vector3();
-const _quaternion$2 = /*@__PURE__*/ new Quaternion();
-
-const _xAxis = /*@__PURE__*/ new Vector3( 1, 0, 0 );
-const _yAxis = /*@__PURE__*/ new Vector3( 0, 1, 0 );
-const _zAxis = /*@__PURE__*/ new Vector3( 0, 0, 1 );
-
-const _addedEvent = { type: 'added' };
-const _removedEvent = { type: 'removed' };
-
-class Object3D extends EventDispatcher {
-
-	constructor() {
-
-		super();
-
-		this.isObject3D = true;
-
-		Object.defineProperty( this, 'id', { value: _object3DId ++ } );
-
-		this.uuid = generateUUID();
-
-		this.name = '';
-		this.type = 'Object3D';
-
-		this.parent = null;
-		this.children = [];
-
-		this.up = Object3D.DEFAULT_UP.clone();
-
-		const position = new Vector3();
-		const rotation = new Euler();
-		const quaternion = new Quaternion();
-		const scale = new Vector3( 1, 1, 1 );
-
-		function onRotationChange() {
-
-			quaternion.setFromEuler( rotation, false );
-
-		}
-
-		function onQuaternionChange() {
-
-			rotation.setFromQuaternion( quaternion, undefined, false );
-
-		}
-
-		rotation._onChange( onRotationChange );
-		quaternion._onChange( onQuaternionChange );
-
-		Object.defineProperties( this, {
-			position: {
-				configurable: true,
-				enumerable: true,
-				value: position
-			},
-			rotation: {
-				configurable: true,
-				enumerable: true,
-				value: rotation
-			},
-			quaternion: {
-				configurable: true,
-				enumerable: true,
-				value: quaternion
-			},
-			scale: {
-				configurable: true,
-				enumerable: true,
-				value: scale
-			},
-			modelViewMatrix: {
-				value: new Matrix4()
-			},
-			normalMatrix: {
-				value: new Matrix3()
-			}
-		} );
-
-		this.matrix = new Matrix4();
-		this.matrixWorld = new Matrix4();
-
-		this.matrixAutoUpdate = Object3D.DEFAULT_MATRIX_AUTO_UPDATE;
-		this.matrixWorldNeedsUpdate = false;
-
-		this.matrixWorldAutoUpdate = Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE; // checked by the renderer
-
-		this.layers = new Layers();
-		this.visible = true;
-
-		this.castShadow = false;
-		this.receiveShadow = false;
-
-		this.frustumCulled = true;
-		this.renderOrder = 0;
-
-		this.animations = [];
-
-		this.userData = {};
-
-	}
-
-	onBeforeRender( /* renderer, scene, camera, geometry, material, group */ ) {}
-
-	onAfterRender( /* renderer, scene, camera, geometry, material, group */ ) {}
-
-	applyMatrix4( matrix ) {
-
-		if ( this.matrixAutoUpdate ) this.updateMatrix();
-
-		this.matrix.premultiply( matrix );
-
-		this.matrix.decompose( this.position, this.quaternion, this.scale );
-
-	}
-
-	applyQuaternion( q ) {
-
-		this.quaternion.premultiply( q );
-
-		return this;
-
-	}
-
-	setRotationFromAxisAngle( axis, angle ) {
-
-		// assumes axis is normalized
-
-		this.quaternion.setFromAxisAngle( axis, angle );
-
-	}
-
-	setRotationFromEuler( euler ) {
-
-		this.quaternion.setFromEuler( euler, true );
-
-	}
-
-	setRotationFromMatrix( m ) {
-
-		// assumes the upper 3x3 of m is a pure rotation matrix (i.e, unscaled)
-
-		this.quaternion.setFromRotationMatrix( m );
-
-	}
-
-	setRotationFromQuaternion( q ) {
-
-		// assumes q is normalized
-
-		this.quaternion.copy( q );
-
-	}
-
-	rotateOnAxis( axis, angle ) {
-
-		// rotate object on axis in object space
-		// axis is assumed to be normalized
-
-		_q1.setFromAxisAngle( axis, angle );
-
-		this.quaternion.multiply( _q1 );
-
-		return this;
-
-	}
-
-	rotateOnWorldAxis( axis, angle ) {
-
-		// rotate object on axis in world space
-		// axis is assumed to be normalized
-		// method assumes no rotated parent
-
-		_q1.setFromAxisAngle( axis, angle );
-
-		this.quaternion.premultiply( _q1 );
-
-		return this;
-
-	}
-
-	rotateX( angle ) {
-
-		return this.rotateOnAxis( _xAxis, angle );
-
-	}
-
-	rotateY( angle ) {
-
-		return this.rotateOnAxis( _yAxis, angle );
-
-	}
-
-	rotateZ( angle ) {
-
-		return this.rotateOnAxis( _zAxis, angle );
-
-	}
-
-	translateOnAxis( axis, distance ) {
-
-		// translate object by distance along axis in object space
-		// axis is assumed to be normalized
-
-		_v1$4.copy( axis ).applyQuaternion( this.quaternion );
-
-		this.position.add( _v1$4.multiplyScalar( distance ) );
-
-		return this;
-
-	}
-
-	translateX( distance ) {
-
-		return this.translateOnAxis( _xAxis, distance );
-
-	}
-
-	translateY( distance ) {
-
-		return this.translateOnAxis( _yAxis, distance );
-
-	}
-
-	translateZ( distance ) {
-
-		return this.translateOnAxis( _zAxis, distance );
-
-	}
-
-	localToWorld( vector ) {
-
-		this.updateWorldMatrix( true, false );
-
-		return vector.applyMatrix4( this.matrixWorld );
-
-	}
-
-	worldToLocal( vector ) {
-
-		this.updateWorldMatrix( true, false );
-
-		return vector.applyMatrix4( _m1$1.copy( this.matrixWorld ).invert() );
-
-	}
-
-	lookAt( x, y, z ) {
-
-		// This method does not support objects having non-uniformly-scaled parent(s)
-
-		if ( x.isVector3 ) {
-
-			_target.copy( x );
-
-		} else {
-
-			_target.set( x, y, z );
-
-		}
-
-		const parent = this.parent;
-
-		this.updateWorldMatrix( true, false );
-
-		_position$3.setFromMatrixPosition( this.matrixWorld );
-
-		if ( this.isCamera || this.isLight ) {
-
-			_m1$1.lookAt( _position$3, _target, this.up );
-
-		} else {
-
-			_m1$1.lookAt( _target, _position$3, this.up );
-
-		}
-
-		this.quaternion.setFromRotationMatrix( _m1$1 );
-
-		if ( parent ) {
-
-			_m1$1.extractRotation( parent.matrixWorld );
-			_q1.setFromRotationMatrix( _m1$1 );
-			this.quaternion.premultiply( _q1.invert() );
-
-		}
-
-	}
-
-	add( object ) {
-
-		if ( arguments.length > 1 ) {
-
-			for ( let i = 0; i < arguments.length; i ++ ) {
-
-				this.add( arguments[ i ] );
-
-			}
-
-			return this;
-
-		}
-
-		if ( object === this ) {
-
-			console.error( 'THREE.Object3D.add: object can\'t be added as a child of itself.', object );
-			return this;
-
-		}
-
-		if ( object && object.isObject3D ) {
-
-			if ( object.parent !== null ) {
-
-				object.parent.remove( object );
-
-			}
-
-			object.parent = this;
-			this.children.push( object );
-
-			object.dispatchEvent( _addedEvent );
-
-		} else {
-
-			console.error( 'THREE.Object3D.add: object not an instance of THREE.Object3D.', object );
-
-		}
-
-		return this;
-
-	}
-
-	remove( object ) {
-
-		if ( arguments.length > 1 ) {
-
-			for ( let i = 0; i < arguments.length; i ++ ) {
-
-				this.remove( arguments[ i ] );
-
-			}
-
-			return this;
-
-		}
-
-		const index = this.children.indexOf( object );
-
-		if ( index !== - 1 ) {
-
-			object.parent = null;
-			this.children.splice( index, 1 );
-
-			object.dispatchEvent( _removedEvent );
-
-		}
-
-		return this;
-
-	}
-
-	removeFromParent() {
-
-		const parent = this.parent;
-
-		if ( parent !== null ) {
-
-			parent.remove( this );
-
-		}
-
-		return this;
-
-	}
-
-	clear() {
-
-		for ( let i = 0; i < this.children.length; i ++ ) {
-
-			const object = this.children[ i ];
-
-			object.parent = null;
-
-			object.dispatchEvent( _removedEvent );
-
-		}
-
-		this.children.length = 0;
-
-		return this;
-
-
-	}
-
-	attach( object ) {
-
-		// adds object as a child of this, while maintaining the object's world transform
-
-		// Note: This method does not support scene graphs having non-uniformly-scaled nodes(s)
-
-		this.updateWorldMatrix( true, false );
-
-		_m1$1.copy( this.matrixWorld ).invert();
-
-		if ( object.parent !== null ) {
-
-			object.parent.updateWorldMatrix( true, false );
-
-			_m1$1.multiply( object.parent.matrixWorld );
-
-		}
-
-		object.applyMatrix4( _m1$1 );
-
-		this.add( object );
-
-		object.updateWorldMatrix( false, true );
-
-		return this;
-
-	}
-
-	getObjectById( id ) {
-
-		return this.getObjectByProperty( 'id', id );
-
-	}
-
-	getObjectByName( name ) {
-
-		return this.getObjectByProperty( 'name', name );
-
-	}
-
-	getObjectByProperty( name, value ) {
-
-		if ( this[ name ] === value ) return this;
-
-		for ( let i = 0, l = this.children.length; i < l; i ++ ) {
-
-			const child = this.children[ i ];
-			const object = child.getObjectByProperty( name, value );
-
-			if ( object !== undefined ) {
-
-				return object;
-
-			}
-
-		}
-
-		return undefined;
-
-	}
-
-	getObjectsByProperty( name, value ) {
-
-		let result = [];
-
-		if ( this[ name ] === value ) result.push( this );
-
-		for ( let i = 0, l = this.children.length; i < l; i ++ ) {
-
-			const childResult = this.children[ i ].getObjectsByProperty( name, value );
-
-			if ( childResult.length > 0 ) {
-
-				result = result.concat( childResult );
-
-			}
-
-		}
-
-		return result;
-
-	}
-
-	getWorldPosition( target ) {
-
-		this.updateWorldMatrix( true, false );
-
-		return target.setFromMatrixPosition( this.matrixWorld );
-
-	}
-
-	getWorldQuaternion( target ) {
-
-		this.updateWorldMatrix( true, false );
-
-		this.matrixWorld.decompose( _position$3, target, _scale$2 );
-
-		return target;
-
-	}
-
-	getWorldScale( target ) {
-
-		this.updateWorldMatrix( true, false );
-
-		this.matrixWorld.decompose( _position$3, _quaternion$2, target );
-
-		return target;
-
-	}
-
-	getWorldDirection( target ) {
-
-		this.updateWorldMatrix( true, false );
-
-		const e = this.matrixWorld.elements;
-
-		return target.set( e[ 8 ], e[ 9 ], e[ 10 ] ).normalize();
-
-	}
-
-	raycast( /* raycaster, intersects */ ) {}
-
-	traverse( callback ) {
-
-		callback( this );
-
-		const children = this.children;
-
-		for ( let i = 0, l = children.length; i < l; i ++ ) {
-
-			children[ i ].traverse( callback );
-
-		}
-
-	}
-
-	traverseVisible( callback ) {
-
-		if ( this.visible === false ) return;
-
-		callback( this );
-
-		const children = this.children;
-
-		for ( let i = 0, l = children.length; i < l; i ++ ) {
-
-			children[ i ].traverseVisible( callback );
-
-		}
-
-	}
-
-	traverseAncestors( callback ) {
-
-		const parent = this.parent;
-
-		if ( parent !== null ) {
-
-			callback( parent );
-
-			parent.traverseAncestors( callback );
-
-		}
-
-	}
-
-	updateMatrix() {
-
-		this.matrix.compose( this.position, this.quaternion, this.scale );
-
-		this.matrixWorldNeedsUpdate = true;
-
-	}
-
-	updateMatrixWorld( force ) {
-
-		if ( this.matrixAutoUpdate ) this.updateMatrix();
-
-		if ( this.matrixWorldNeedsUpdate || force ) {
-
-			if ( this.parent === null ) {
-
-				this.matrixWorld.copy( this.matrix );
-
-			} else {
-
-				this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );
-
-			}
-
-			this.matrixWorldNeedsUpdate = false;
-
-			force = true;
-
-		}
-
-		// update children
-
-		const children = this.children;
-
-		for ( let i = 0, l = children.length; i < l; i ++ ) {
-
-			const child = children[ i ];
-
-			if ( child.matrixWorldAutoUpdate === true || force === true ) {
-
-				child.updateMatrixWorld( force );
-
-			}
-
-		}
-
-	}
-
-	updateWorldMatrix( updateParents, updateChildren ) {
-
-		const parent = this.parent;
-
-		if ( updateParents === true && parent !== null && parent.matrixWorldAutoUpdate === true ) {
-
-			parent.updateWorldMatrix( true, false );
-
-		}
-
-		if ( this.matrixAutoUpdate ) this.updateMatrix();
-
-		if ( this.parent === null ) {
-
-			this.matrixWorld.copy( this.matrix );
-
-		} else {
-
-			this.matrixWorld.multiplyMatrices( this.parent.matrixWorld, this.matrix );
-
-		}
-
-		// update children
-
-		if ( updateChildren === true ) {
-
-			const children = this.children;
-
-			for ( let i = 0, l = children.length; i < l; i ++ ) {
-
-				const child = children[ i ];
-
-				if ( child.matrixWorldAutoUpdate === true ) {
-
-					child.updateWorldMatrix( false, true );
-
-				}
-
-			}
-
-		}
-
-	}
-
-	toJSON( meta ) {
-
-		// meta is a string when called from JSON.stringify
-		const isRootObject = ( meta === undefined || typeof meta === 'string' );
-
-		const output = {};
-
-		// meta is a hash used to collect geometries, materials.
-		// not providing it implies that this is the root object
-		// being serialized.
-		if ( isRootObject ) {
-
-			// initialize meta obj
-			meta = {
-				geometries: {},
-				materials: {},
-				textures: {},
-				images: {},
-				shapes: {},
-				skeletons: {},
-				animations: {},
-				nodes: {}
-			};
-
-			output.metadata = {
-				version: 4.5,
-				type: 'Object',
-				generator: 'Object3D.toJSON'
-			};
-
-		}
-
-		// standard Object3D serialization
-
-		const object = {};
-
-		object.uuid = this.uuid;
-		object.type = this.type;
-
-		if ( this.name !== '' ) object.name = this.name;
-		if ( this.castShadow === true ) object.castShadow = true;
-		if ( this.receiveShadow === true ) object.receiveShadow = true;
-		if ( this.visible === false ) object.visible = false;
-		if ( this.frustumCulled === false ) object.frustumCulled = false;
-		if ( this.renderOrder !== 0 ) object.renderOrder = this.renderOrder;
-		if ( Object.keys( this.userData ).length > 0 ) object.userData = this.userData;
-
-		object.layers = this.layers.mask;
-		object.matrix = this.matrix.toArray();
-		object.up = this.up.toArray();
-
-		if ( this.matrixAutoUpdate === false ) object.matrixAutoUpdate = false;
-
-		// object specific properties
-
-		if ( this.isInstancedMesh ) {
-
-			object.type = 'InstancedMesh';
-			object.count = this.count;
-			object.instanceMatrix = this.instanceMatrix.toJSON();
-			if ( this.instanceColor !== null ) object.instanceColor = this.instanceColor.toJSON();
-
-		}
-
-		//
-
-		function serialize( library, element ) {
-
-			if ( library[ element.uuid ] === undefined ) {
-
-				library[ element.uuid ] = element.toJSON( meta );
-
-			}
-
-			return element.uuid;
-
-		}
-
-		if ( this.isScene ) {
-
-			if ( this.background ) {
-
-				if ( this.background.isColor ) {
-
-					object.background = this.background.toJSON();
-
-				} else if ( this.background.isTexture ) {
-
-					object.background = this.background.toJSON( meta ).uuid;
-
-				}
-
-			}
-
-			if ( this.environment && this.environment.isTexture && this.environment.isRenderTargetTexture !== true ) {
-
-				object.environment = this.environment.toJSON( meta ).uuid;
-
-			}
-
-		} else if ( this.isMesh || this.isLine || this.isPoints ) {
-
-			object.geometry = serialize( meta.geometries, this.geometry );
-
-			const parameters = this.geometry.parameters;
-
-			if ( parameters !== undefined && parameters.shapes !== undefined ) {
-
-				const shapes = parameters.shapes;
-
-				if ( Array.isArray( shapes ) ) {
-
-					for ( let i = 0, l = shapes.length; i < l; i ++ ) {
-
-						const shape = shapes[ i ];
-
-						serialize( meta.shapes, shape );
-
-					}
-
-				} else {
-
-					serialize( meta.shapes, shapes );
-
-				}
-
-			}
-
-		}
-
-		if ( this.isSkinnedMesh ) {
-
-			object.bindMode = this.bindMode;
-			object.bindMatrix = this.bindMatrix.toArray();
-
-			if ( this.skeleton !== undefined ) {
-
-				serialize( meta.skeletons, this.skeleton );
-
-				object.skeleton = this.skeleton.uuid;
-
-			}
-
-		}
-
-		if ( this.material !== undefined ) {
-
-			if ( Array.isArray( this.material ) ) {
-
-				const uuids = [];
-
-				for ( let i = 0, l = this.material.length; i < l; i ++ ) {
-
-					uuids.push( serialize( meta.materials, this.material[ i ] ) );
-
-				}
-
-				object.material = uuids;
-
-			} else {
-
-				object.material = serialize( meta.materials, this.material );
-
-			}
-
-		}
-
-		//
-
-		if ( this.children.length > 0 ) {
-
-			object.children = [];
-
-			for ( let i = 0; i < this.children.length; i ++ ) {
-
-				object.children.push( this.children[ i ].toJSON( meta ).object );
-
-			}
-
-		}
-
-		//
-
-		if ( this.animations.length > 0 ) {
-
-			object.animations = [];
-
-			for ( let i = 0; i < this.animations.length; i ++ ) {
-
-				const animation = this.animations[ i ];
-
-				object.animations.push( serialize( meta.animations, animation ) );
-
-			}
-
-		}
-
-		if ( isRootObject ) {
-
-			const geometries = extractFromCache( meta.geometries );
-			const materials = extractFromCache( meta.materials );
-			const textures = extractFromCache( meta.textures );
-			const images = extractFromCache( meta.images );
-			const shapes = extractFromCache( meta.shapes );
-			const skeletons = extractFromCache( meta.skeletons );
-			const animations = extractFromCache( meta.animations );
-			const nodes = extractFromCache( meta.nodes );
-
-			if ( geometries.length > 0 ) output.geometries = geometries;
-			if ( materials.length > 0 ) output.materials = materials;
-			if ( textures.length > 0 ) output.textures = textures;
-			if ( images.length > 0 ) output.images = images;
-			if ( shapes.length > 0 ) output.shapes = shapes;
-			if ( skeletons.length > 0 ) output.skeletons = skeletons;
-			if ( animations.length > 0 ) output.animations = animations;
-			if ( nodes.length > 0 ) output.nodes = nodes;
-
-		}
-
-		output.object = object;
-
-		return output;
-
-		// extract data from the cache hash
-		// remove metadata on each item
-		// and return as array
-		function extractFromCache( cache ) {
-
-			const values = [];
-			for ( const key in cache ) {
-
-				const data = cache[ key ];
-				delete data.metadata;
-				values.push( data );
-
-			}
-
-			return values;
-
-		}
-
-	}
-
-	clone( recursive ) {
-
-		return new this.constructor().copy( this, recursive );
-
-	}
-
-	copy( source, recursive = true ) {
-
-		this.name = source.name;
-
-		this.up.copy( source.up );
-
-		this.position.copy( source.position );
-		this.rotation.order = source.rotation.order;
-		this.quaternion.copy( source.quaternion );
-		this.scale.copy( source.scale );
-
-		this.matrix.copy( source.matrix );
-		this.matrixWorld.copy( source.matrixWorld );
-
-		this.matrixAutoUpdate = source.matrixAutoUpdate;
-		this.matrixWorldNeedsUpdate = source.matrixWorldNeedsUpdate;
-
-		this.matrixWorldAutoUpdate = source.matrixWorldAutoUpdate;
-
-		this.layers.mask = source.layers.mask;
-		this.visible = source.visible;
-
-		this.castShadow = source.castShadow;
-		this.receiveShadow = source.receiveShadow;
-
-		this.frustumCulled = source.frustumCulled;
-		this.renderOrder = source.renderOrder;
-
-		this.animations = source.animations;
-
-		this.userData = JSON.parse( JSON.stringify( source.userData ) );
-
-		if ( recursive === true ) {
-
-			for ( let i = 0; i < source.children.length; i ++ ) {
-
-				const child = source.children[ i ];
-				this.add( child.clone() );
-
-			}
-
-		}
-
-		return this;
-
-	}
-
-}
-
-Object3D.DEFAULT_UP = /*@__PURE__*/ new Vector3( 0, 1, 0 );
-Object3D.DEFAULT_MATRIX_AUTO_UPDATE = true;
-Object3D.DEFAULT_MATRIX_WORLD_AUTO_UPDATE = true;
-
-const _v0$1 = /*@__PURE__*/ new Vector3();
-const _v1$3 = /*@__PURE__*/ new Vector3();
-const _v2$2 = /*@__PURE__*/ new Vector3();
-const _v3$1 = /*@__PURE__*/ new Vector3();
-
-const _vab = /*@__PURE__*/ new Vector3();
-const _vac = /*@__PURE__*/ new Vector3();
-const _vbc = /*@__PURE__*/ new Vector3();
-const _vap = /*@__PURE__*/ new Vector3();
-const _vbp = /*@__PURE__*/ new Vector3();
-const _vcp = /*@__PURE__*/ new Vector3();
-
-let warnedGetUV = false;
-
-class Triangle {
-
-	constructor( a = new Vector3(), b = new Vector3(), c = new Vector3() ) {
-
-		this.a = a;
-		this.b = b;
-		this.c = c;
-
-	}
-
-	static getNormal( a, b, c, target ) {
-
-		target.subVectors( c, b );
-		_v0$1.subVectors( a, b );
-		target.cross( _v0$1 );
-
-		const targetLengthSq = target.lengthSq();
-		if ( targetLengthSq > 0 ) {
-
-			return target.multiplyScalar( 1 / Math.sqrt( targetLengthSq ) );
-
-		}
-
-		return target.set( 0, 0, 0 );
-
-	}
-
-	// static/instance method to calculate barycentric coordinates
-	// based on: http://www.blackpawn.com/texts/pointinpoly/default.html
-	static getBarycoord( point, a, b, c, target ) {
-
-		_v0$1.subVectors( c, a );
-		_v1$3.subVectors( b, a );
-		_v2$2.subVectors( point, a );
-
-		const dot00 = _v0$1.dot( _v0$1 );
-		const dot01 = _v0$1.dot( _v1$3 );
-		const dot02 = _v0$1.dot( _v2$2 );
-		const dot11 = _v1$3.dot( _v1$3 );
-		const dot12 = _v1$3.dot( _v2$2 );
-
-		const denom = ( dot00 * dot11 - dot01 * dot01 );
-
-		// collinear or singular triangle
-		if ( denom === 0 ) {
-
-			// arbitrary location outside of triangle?
-			// not sure if this is the best idea, maybe should be returning undefined
-			return target.set( - 2, - 1, - 1 );
-
-		}
-
-		const invDenom = 1 / denom;
-		const u = ( dot11 * dot02 - dot01 * dot12 ) * invDenom;
-		const v = ( dot00 * dot12 - dot01 * dot02 ) * invDenom;
-
-		// barycentric coordinates must always sum to 1
-		return target.set( 1 - u - v, v, u );
-
-	}
-
-	static containsPoint( point, a, b, c ) {
-
-		this.getBarycoord( point, a, b, c, _v3$1 );
-
-		return ( _v3$1.x >= 0 ) && ( _v3$1.y >= 0 ) && ( ( _v3$1.x + _v3$1.y ) <= 1 );
-
-	}
-
-	static getUV( point, p1, p2, p3, uv1, uv2, uv3, target ) { // @deprecated, r151
-
-		if ( warnedGetUV === false ) {
-
-			console.warn( 'THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation().' );
-
-			warnedGetUV = true;
-
-		}
-
-		return this.getInterpolation( point, p1, p2, p3, uv1, uv2, uv3, target );
-
-	}
-
-	static getInterpolation( point, p1, p2, p3, v1, v2, v3, target ) {
-
-		this.getBarycoord( point, p1, p2, p3, _v3$1 );
-
-		target.setScalar( 0 );
-		target.addScaledVector( v1, _v3$1.x );
-		target.addScaledVector( v2, _v3$1.y );
-		target.addScaledVector( v3, _v3$1.z );
-
-		return target;
-
-	}
-
-	static isFrontFacing( a, b, c, direction ) {
-
-		_v0$1.subVectors( c, b );
-		_v1$3.subVectors( a, b );
-
-		// strictly front facing
-		return ( _v0$1.cross( _v1$3 ).dot( direction ) < 0 ) ? true : false;
-
-	}
-
-	set( a, b, c ) {
-
-		this.a.copy( a );
-		this.b.copy( b );
-		this.c.copy( c );
-
-		return this;
-
-	}
-
-	setFromPointsAndIndices( points, i0, i1, i2 ) {
-
-		this.a.copy( points[ i0 ] );
-		this.b.copy( points[ i1 ] );
-		this.c.copy( points[ i2 ] );
-
-		return this;
-
-	}
-
-	setFromAttributeAndIndices( attribute, i0, i1, i2 ) {
-
-		this.a.fromBufferAttribute( attribute, i0 );
-		this.b.fromBufferAttribute( attribute, i1 );
-		this.c.fromBufferAttribute( attribute, i2 );
-
-		return this;
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-	copy( triangle ) {
-
-		this.a.copy( triangle.a );
-		this.b.copy( triangle.b );
-		this.c.copy( triangle.c );
-
-		return this;
-
-	}
-
-	getArea() {
-
-		_v0$1.subVectors( this.c, this.b );
-		_v1$3.subVectors( this.a, this.b );
-
-		return _v0$1.cross( _v1$3 ).length() * 0.5;
-
-	}
-
-	getMidpoint( target ) {
-
-		return target.addVectors( this.a, this.b ).add( this.c ).multiplyScalar( 1 / 3 );
-
-	}
-
-	getNormal( target ) {
-
-		return Triangle.getNormal( this.a, this.b, this.c, target );
-
-	}
-
-	getPlane( target ) {
-
-		return target.setFromCoplanarPoints( this.a, this.b, this.c );
-
-	}
-
-	getBarycoord( point, target ) {
-
-		return Triangle.getBarycoord( point, this.a, this.b, this.c, target );
-
-	}
-
-	getUV( point, uv1, uv2, uv3, target ) { // @deprecated, r151
-
-		if ( warnedGetUV === false ) {
-
-			console.warn( 'THREE.Triangle.getUV() has been renamed to THREE.Triangle.getInterpolation().' );
-
-			warnedGetUV = true;
-
-		}
-
-		return Triangle.getInterpolation( point, this.a, this.b, this.c, uv1, uv2, uv3, target );
-
-	}
-
-	getInterpolation( point, v1, v2, v3, target ) {
-
-		return Triangle.getInterpolation( point, this.a, this.b, this.c, v1, v2, v3, target );
-
-	}
-
-	containsPoint( point ) {
-
-		return Triangle.containsPoint( point, this.a, this.b, this.c );
-
-	}
-
-	isFrontFacing( direction ) {
-
-		return Triangle.isFrontFacing( this.a, this.b, this.c, direction );
-
-	}
-
-	intersectsBox( box ) {
-
-		return box.intersectsTriangle( this );
-
-	}
-
-	closestPointToPoint( p, target ) {
-
-		const a = this.a, b = this.b, c = this.c;
-		let v, w;
-
-		// algorithm thanks to Real-Time Collision Detection by Christer Ericson,
-		// published by Morgan Kaufmann Publishers, (c) 2005 Elsevier Inc.,
-		// under the accompanying license; see chapter 5.1.5 for detailed explanation.
-		// basically, we're distinguishing which of the voronoi regions of the triangle
-		// the point lies in with the minimum amount of redundant computation.
-
-		_vab.subVectors( b, a );
-		_vac.subVectors( c, a );
-		_vap.subVectors( p, a );
-		const d1 = _vab.dot( _vap );
-		const d2 = _vac.dot( _vap );
-		if ( d1 <= 0 && d2 <= 0 ) {
-
-			// vertex region of A; barycentric coords (1, 0, 0)
-			return target.copy( a );
-
-		}
-
-		_vbp.subVectors( p, b );
-		const d3 = _vab.dot( _vbp );
-		const d4 = _vac.dot( _vbp );
-		if ( d3 >= 0 && d4 <= d3 ) {
-
-			// vertex region of B; barycentric coords (0, 1, 0)
-			return target.copy( b );
-
-		}
-
-		const vc = d1 * d4 - d3 * d2;
-		if ( vc <= 0 && d1 >= 0 && d3 <= 0 ) {
-
-			v = d1 / ( d1 - d3 );
-			// edge region of AB; barycentric coords (1-v, v, 0)
-			return target.copy( a ).addScaledVector( _vab, v );
-
-		}
-
-		_vcp.subVectors( p, c );
-		const d5 = _vab.dot( _vcp );
-		const d6 = _vac.dot( _vcp );
-		if ( d6 >= 0 && d5 <= d6 ) {
-
-			// vertex region of C; barycentric coords (0, 0, 1)
-			return target.copy( c );
-
-		}
-
-		const vb = d5 * d2 - d1 * d6;
-		if ( vb <= 0 && d2 >= 0 && d6 <= 0 ) {
-
-			w = d2 / ( d2 - d6 );
-			// edge region of AC; barycentric coords (1-w, 0, w)
-			return target.copy( a ).addScaledVector( _vac, w );
-
-		}
-
-		const va = d3 * d6 - d5 * d4;
-		if ( va <= 0 && ( d4 - d3 ) >= 0 && ( d5 - d6 ) >= 0 ) {
-
-			_vbc.subVectors( c, b );
-			w = ( d4 - d3 ) / ( ( d4 - d3 ) + ( d5 - d6 ) );
-			// edge region of BC; barycentric coords (0, 1-w, w)
-			return target.copy( b ).addScaledVector( _vbc, w ); // edge region of BC
-
-		}
-
-		// face region
-		const denom = 1 / ( va + vb + vc );
-		// u = va * denom
-		v = vb * denom;
-		w = vc * denom;
-
-		return target.copy( a ).addScaledVector( _vab, v ).addScaledVector( _vac, w );
-
-	}
-
-	equals( triangle ) {
-
-		return triangle.a.equals( this.a ) && triangle.b.equals( this.b ) && triangle.c.equals( this.c );
-
-	}
-
-}
-
-let materialId = 0;
-
-class Material extends EventDispatcher {
-
-	constructor() {
-
-		super();
-
-		this.isMaterial = true;
-
-		Object.defineProperty( this, 'id', { value: materialId ++ } );
-
-		this.uuid = generateUUID();
-
-		this.name = '';
-		this.type = 'Material';
-
-		this.blending = NormalBlending;
-		this.side = FrontSide;
-		this.vertexColors = false;
-
-		this.opacity = 1;
-		this.transparent = false;
-
-		this.blendSrc = SrcAlphaFactor;
-		this.blendDst = OneMinusSrcAlphaFactor;
-		this.blendEquation = AddEquation;
-		this.blendSrcAlpha = null;
-		this.blendDstAlpha = null;
-		this.blendEquationAlpha = null;
-
-		this.depthFunc = LessEqualDepth;
-		this.depthTest = true;
-		this.depthWrite = true;
-
-		this.stencilWriteMask = 0xff;
-		this.stencilFunc = AlwaysStencilFunc;
-		this.stencilRef = 0;
-		this.stencilFuncMask = 0xff;
-		this.stencilFail = KeepStencilOp;
-		this.stencilZFail = KeepStencilOp;
-		this.stencilZPass = KeepStencilOp;
-		this.stencilWrite = false;
-
-		this.clippingPlanes = null;
-		this.clipIntersection = false;
-		this.clipShadows = false;
-
-		this.shadowSide = null;
-
-		this.colorWrite = true;
-
-		this.precision = null; // override the renderer's default precision for this material
-
-		this.polygonOffset = false;
-		this.polygonOffsetFactor = 0;
-		this.polygonOffsetUnits = 0;
-
-		this.dithering = false;
-
-		this.alphaToCoverage = false;
-		this.premultipliedAlpha = false;
-		this.forceSinglePass = false;
-
-		this.visible = true;
-
-		this.toneMapped = true;
-
-		this.userData = {};
-
-		this.version = 0;
-
-		this._alphaTest = 0;
-
-	}
-
-	get alphaTest() {
-
-		return this._alphaTest;
-
-	}
-
-	set alphaTest( value ) {
-
-		if ( this._alphaTest > 0 !== value > 0 ) {
-
-			this.version ++;
-
-		}
-
-		this._alphaTest = value;
-
-	}
-
-	onBuild( /* shaderobject, renderer */ ) {}
-
-	onBeforeRender( /* renderer, scene, camera, geometry, object, group */ ) {}
-
-	onBeforeCompile( /* shaderobject, renderer */ ) {}
-
-	customProgramCacheKey() {
-
-		return this.onBeforeCompile.toString();
-
-	}
-
-	setValues( values ) {
-
-		if ( values === undefined ) return;
-
-		for ( const key in values ) {
-
-			const newValue = values[ key ];
-
-			if ( newValue === undefined ) {
-
-				console.warn( `THREE.Material: parameter '${ key }' has value of undefined.` );
-				continue;
-
-			}
-
-			const currentValue = this[ key ];
-
-			if ( currentValue === undefined ) {
-
-				console.warn( `THREE.Material: '${ key }' is not a property of THREE.${ this.type }.` );
-				continue;
-
-			}
-
-			if ( currentValue && currentValue.isColor ) {
-
-				currentValue.set( newValue );
-
-			} else if ( ( currentValue && currentValue.isVector3 ) && ( newValue && newValue.isVector3 ) ) {
-
-				currentValue.copy( newValue );
-
-			} else {
-
-				this[ key ] = newValue;
-
-			}
-
-		}
-
-	}
-
-	toJSON( meta ) {
-
-		const isRootObject = ( meta === undefined || typeof meta === 'string' );
-
-		if ( isRootObject ) {
-
-			meta = {
-				textures: {},
-				images: {}
-			};
-
-		}
-
-		const data = {
-			metadata: {
-				version: 4.5,
-				type: 'Material',
-				generator: 'Material.toJSON'
-			}
-		};
-
-		// standard Material serialization
-		data.uuid = this.uuid;
-		data.type = this.type;
-
-		if ( this.name !== '' ) data.name = this.name;
-
-		if ( this.color && this.color.isColor ) data.color = this.color.getHex();
-
-		if ( this.roughness !== undefined ) data.roughness = this.roughness;
-		if ( this.metalness !== undefined ) data.metalness = this.metalness;
-
-		if ( this.sheen !== undefined ) data.sheen = this.sheen;
-		if ( this.sheenColor && this.sheenColor.isColor ) data.sheenColor = this.sheenColor.getHex();
-		if ( this.sheenRoughness !== undefined ) data.sheenRoughness = this.sheenRoughness;
-		if ( this.emissive && this.emissive.isColor ) data.emissive = this.emissive.getHex();
-		if ( this.emissiveIntensity && this.emissiveIntensity !== 1 ) data.emissiveIntensity = this.emissiveIntensity;
-
-		if ( this.specular && this.specular.isColor ) data.specular = this.specular.getHex();
-		if ( this.specularIntensity !== undefined ) data.specularIntensity = this.specularIntensity;
-		if ( this.specularColor && this.specularColor.isColor ) data.specularColor = this.specularColor.getHex();
-		if ( this.shininess !== undefined ) data.shininess = this.shininess;
-		if ( this.clearcoat !== undefined ) data.clearcoat = this.clearcoat;
-		if ( this.clearcoatRoughness !== undefined ) data.clearcoatRoughness = this.clearcoatRoughness;
-
-		if ( this.clearcoatMap && this.clearcoatMap.isTexture ) {
-
-			data.clearcoatMap = this.clearcoatMap.toJSON( meta ).uuid;
-
-		}
-
-		if ( this.clearcoatRoughnessMap && this.clearcoatRoughnessMap.isTexture ) {
-
-			data.clearcoatRoughnessMap = this.clearcoatRoughnessMap.toJSON( meta ).uuid;
-
-		}
-
-		if ( this.clearcoatNormalMap && this.clearcoatNormalMap.isTexture ) {
-
-			data.clearcoatNormalMap = this.clearcoatNormalMap.toJSON( meta ).uuid;
-			data.clearcoatNormalScale = this.clearcoatNormalScale.toArray();
-
-		}
-
-		if ( this.iridescence !== undefined ) data.iridescence = this.iridescence;
-		if ( this.iridescenceIOR !== undefined ) data.iridescenceIOR = this.iridescenceIOR;
-		if ( this.iridescenceThicknessRange !== undefined ) data.iridescenceThicknessRange = this.iridescenceThicknessRange;
-
-		if ( this.iridescenceMap && this.iridescenceMap.isTexture ) {
-
-			data.iridescenceMap = this.iridescenceMap.toJSON( meta ).uuid;
-
-		}
-
-		if ( this.iridescenceThicknessMap && this.iridescenceThicknessMap.isTexture ) {
-
-			data.iridescenceThicknessMap = this.iridescenceThicknessMap.toJSON( meta ).uuid;
-
-		}
-
-		if ( this.map && this.map.isTexture ) data.map = this.map.toJSON( meta ).uuid;
-		if ( this.matcap && this.matcap.isTexture ) data.matcap = this.matcap.toJSON( meta ).uuid;
-		if ( this.alphaMap && this.alphaMap.isTexture ) data.alphaMap = this.alphaMap.toJSON( meta ).uuid;
-
-		if ( this.lightMap && this.lightMap.isTexture ) {
-
-			data.lightMap = this.lightMap.toJSON( meta ).uuid;
-			data.lightMapIntensity = this.lightMapIntensity;
-
-		}
-
-		if ( this.aoMap && this.aoMap.isTexture ) {
-
-			data.aoMap = this.aoMap.toJSON( meta ).uuid;
-			data.aoMapIntensity = this.aoMapIntensity;
-
-		}
-
-		if ( this.bumpMap && this.bumpMap.isTexture ) {
-
-			data.bumpMap = this.bumpMap.toJSON( meta ).uuid;
-			data.bumpScale = this.bumpScale;
-
-		}
-
-		if ( this.normalMap && this.normalMap.isTexture ) {
-
-			data.normalMap = this.normalMap.toJSON( meta ).uuid;
-			data.normalMapType = this.normalMapType;
-			data.normalScale = this.normalScale.toArray();
-
-		}
-
-		if ( this.displacementMap && this.displacementMap.isTexture ) {
-
-			data.displacementMap = this.displacementMap.toJSON( meta ).uuid;
-			data.displacementScale = this.displacementScale;
-			data.displacementBias = this.displacementBias;
-
-		}
-
-		if ( this.roughnessMap && this.roughnessMap.isTexture ) data.roughnessMap = this.roughnessMap.toJSON( meta ).uuid;
-		if ( this.metalnessMap && this.metalnessMap.isTexture ) data.metalnessMap = this.metalnessMap.toJSON( meta ).uuid;
-
-		if ( this.emissiveMap && this.emissiveMap.isTexture ) data.emissiveMap = this.emissiveMap.toJSON( meta ).uuid;
-		if ( this.specularMap && this.specularMap.isTexture ) data.specularMap = this.specularMap.toJSON( meta ).uuid;
-		if ( this.specularIntensityMap && this.specularIntensityMap.isTexture ) data.specularIntensityMap = this.specularIntensityMap.toJSON( meta ).uuid;
-		if ( this.specularColorMap && this.specularColorMap.isTexture ) data.specularColorMap = this.specularColorMap.toJSON( meta ).uuid;
-
-		if ( this.envMap && this.envMap.isTexture ) {
-
-			data.envMap = this.envMap.toJSON( meta ).uuid;
-
-			if ( this.combine !== undefined ) data.combine = this.combine;
-
-		}
-
-		if ( this.envMapIntensity !== undefined ) data.envMapIntensity = this.envMapIntensity;
-		if ( this.reflectivity !== undefined ) data.reflectivity = this.reflectivity;
-		if ( this.refractionRatio !== undefined ) data.refractionRatio = this.refractionRatio;
-
-		if ( this.gradientMap && this.gradientMap.isTexture ) {
-
-			data.gradientMap = this.gradientMap.toJSON( meta ).uuid;
-
-		}
-
-		if ( this.transmission !== undefined ) data.transmission = this.transmission;
-		if ( this.transmissionMap && this.transmissionMap.isTexture ) data.transmissionMap = this.transmissionMap.toJSON( meta ).uuid;
-		if ( this.thickness !== undefined ) data.thickness = this.thickness;
-		if ( this.thicknessMap && this.thicknessMap.isTexture ) data.thicknessMap = this.thicknessMap.toJSON( meta ).uuid;
-		if ( this.attenuationDistance !== undefined && this.attenuationDistance !== Infinity ) data.attenuationDistance = this.attenuationDistance;
-		if ( this.attenuationColor !== undefined ) data.attenuationColor = this.attenuationColor.getHex();
-
-		if ( this.size !== undefined ) data.size = this.size;
-		if ( this.shadowSide !== null ) data.shadowSide = this.shadowSide;
-		if ( this.sizeAttenuation !== undefined ) data.sizeAttenuation = this.sizeAttenuation;
-
-		if ( this.blending !== NormalBlending ) data.blending = this.blending;
-		if ( this.side !== FrontSide ) data.side = this.side;
-		if ( this.vertexColors ) data.vertexColors = true;
-
-		if ( this.opacity < 1 ) data.opacity = this.opacity;
-		if ( this.transparent === true ) data.transparent = this.transparent;
-
-		data.depthFunc = this.depthFunc;
-		data.depthTest = this.depthTest;
-		data.depthWrite = this.depthWrite;
-		data.colorWrite = this.colorWrite;
-
-		data.stencilWrite = this.stencilWrite;
-		data.stencilWriteMask = this.stencilWriteMask;
-		data.stencilFunc = this.stencilFunc;
-		data.stencilRef = this.stencilRef;
-		data.stencilFuncMask = this.stencilFuncMask;
-		data.stencilFail = this.stencilFail;
-		data.stencilZFail = this.stencilZFail;
-		data.stencilZPass = this.stencilZPass;
-
-		// rotation (SpriteMaterial)
-		if ( this.rotation !== undefined && this.rotation !== 0 ) data.rotation = this.rotation;
-
-		if ( this.polygonOffset === true ) data.polygonOffset = true;
-		if ( this.polygonOffsetFactor !== 0 ) data.polygonOffsetFactor = this.polygonOffsetFactor;
-		if ( this.polygonOffsetUnits !== 0 ) data.polygonOffsetUnits = this.polygonOffsetUnits;
-
-		if ( this.linewidth !== undefined && this.linewidth !== 1 ) data.linewidth = this.linewidth;
-		if ( this.dashSize !== undefined ) data.dashSize = this.dashSize;
-		if ( this.gapSize !== undefined ) data.gapSize = this.gapSize;
-		if ( this.scale !== undefined ) data.scale = this.scale;
-
-		if ( this.dithering === true ) data.dithering = true;
-
-		if ( this.alphaTest > 0 ) data.alphaTest = this.alphaTest;
-		if ( this.alphaToCoverage === true ) data.alphaToCoverage = this.alphaToCoverage;
-		if ( this.premultipliedAlpha === true ) data.premultipliedAlpha = this.premultipliedAlpha;
-		if ( this.forceSinglePass === true ) data.forceSinglePass = this.forceSinglePass;
-
-		if ( this.wireframe === true ) data.wireframe = this.wireframe;
-		if ( this.wireframeLinewidth > 1 ) data.wireframeLinewidth = this.wireframeLinewidth;
-		if ( this.wireframeLinecap !== 'round' ) data.wireframeLinecap = this.wireframeLinecap;
-		if ( this.wireframeLinejoin !== 'round' ) data.wireframeLinejoin = this.wireframeLinejoin;
-
-		if ( this.flatShading === true ) data.flatShading = this.flatShading;
-
-		if ( this.visible === false ) data.visible = false;
-
-		if ( this.toneMapped === false ) data.toneMapped = false;
-
-		if ( this.fog === false ) data.fog = false;
-
-		if ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;
-
-		// TODO: Copied from Object3D.toJSON
-
-		function extractFromCache( cache ) {
-
-			const values = [];
-
-			for ( const key in cache ) {
-
-				const data = cache[ key ];
-				delete data.metadata;
-				values.push( data );
-
-			}
-
-			return values;
-
-		}
-
-		if ( isRootObject ) {
-
-			const textures = extractFromCache( meta.textures );
-			const images = extractFromCache( meta.images );
-
-			if ( textures.length > 0 ) data.textures = textures;
-			if ( images.length > 0 ) data.images = images;
-
-		}
-
-		return data;
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-	copy( source ) {
-
-		this.name = source.name;
-
-		this.blending = source.blending;
-		this.side = source.side;
-		this.vertexColors = source.vertexColors;
-
-		this.opacity = source.opacity;
-		this.transparent = source.transparent;
-
-		this.blendSrc = source.blendSrc;
-		this.blendDst = source.blendDst;
-		this.blendEquation = source.blendEquation;
-		this.blendSrcAlpha = source.blendSrcAlpha;
-		this.blendDstAlpha = source.blendDstAlpha;
-		this.blendEquationAlpha = source.blendEquationAlpha;
-
-		this.depthFunc = source.depthFunc;
-		this.depthTest = source.depthTest;
-		this.depthWrite = source.depthWrite;
-
-		this.stencilWriteMask = source.stencilWriteMask;
-		this.stencilFunc = source.stencilFunc;
-		this.stencilRef = source.stencilRef;
-		this.stencilFuncMask = source.stencilFuncMask;
-		this.stencilFail = source.stencilFail;
-		this.stencilZFail = source.stencilZFail;
-		this.stencilZPass = source.stencilZPass;
-		this.stencilWrite = source.stencilWrite;
-
-		const srcPlanes = source.clippingPlanes;
-		let dstPlanes = null;
-
-		if ( srcPlanes !== null ) {
-
-			const n = srcPlanes.length;
-			dstPlanes = new Array( n );
-
-			for ( let i = 0; i !== n; ++ i ) {
-
-				dstPlanes[ i ] = srcPlanes[ i ].clone();
-
-			}
-
-		}
-
-		this.clippingPlanes = dstPlanes;
-		this.clipIntersection = source.clipIntersection;
-		this.clipShadows = source.clipShadows;
-
-		this.shadowSide = source.shadowSide;
-
-		this.colorWrite = source.colorWrite;
-
-		this.precision = source.precision;
-
-		this.polygonOffset = source.polygonOffset;
-		this.polygonOffsetFactor = source.polygonOffsetFactor;
-		this.polygonOffsetUnits = source.polygonOffsetUnits;
-
-		this.dithering = source.dithering;
-
-		this.alphaTest = source.alphaTest;
-		this.alphaToCoverage = source.alphaToCoverage;
-		this.premultipliedAlpha = source.premultipliedAlpha;
-		this.forceSinglePass = source.forceSinglePass;
-
-		this.visible = source.visible;
-
-		this.toneMapped = source.toneMapped;
-
-		this.userData = JSON.parse( JSON.stringify( source.userData ) );
-
-		return this;
-
-	}
-
-	dispose() {
-
-		this.dispatchEvent( { type: 'dispose' } );
-
-	}
-
-	set needsUpdate( value ) {
-
-		if ( value === true ) this.version ++;
-
-	}
-
-}
-
-const _colorKeywords = { 'aliceblue': 0xF0F8FF, 'antiquewhite': 0xFAEBD7, 'aqua': 0x00FFFF, 'aquamarine': 0x7FFFD4, 'azure': 0xF0FFFF,
-	'beige': 0xF5F5DC, 'bisque': 0xFFE4C4, 'black': 0x000000, 'blanchedalmond': 0xFFEBCD, 'blue': 0x0000FF, 'blueviolet': 0x8A2BE2,
-	'brown': 0xA52A2A, 'burlywood': 0xDEB887, 'cadetblue': 0x5F9EA0, 'chartreuse': 0x7FFF00, 'chocolate': 0xD2691E, 'coral': 0xFF7F50,
-	'cornflowerblue': 0x6495ED, 'cornsilk': 0xFFF8DC, 'crimson': 0xDC143C, 'cyan': 0x00FFFF, 'darkblue': 0x00008B, 'darkcyan': 0x008B8B,
-	'darkgoldenrod': 0xB8860B, 'darkgray': 0xA9A9A9, 'darkgreen': 0x006400, 'darkgrey': 0xA9A9A9, 'darkkhaki': 0xBDB76B, 'darkmagenta': 0x8B008B,
-	'darkolivegreen': 0x556B2F, 'darkorange': 0xFF8C00, 'darkorchid': 0x9932CC, 'darkred': 0x8B0000, 'darksalmon': 0xE9967A, 'darkseagreen': 0x8FBC8F,
-	'darkslateblue': 0x483D8B, 'darkslategray': 0x2F4F4F, 'darkslategrey': 0x2F4F4F, 'darkturquoise': 0x00CED1, 'darkviolet': 0x9400D3,
-	'deeppink': 0xFF1493, 'deepskyblue': 0x00BFFF, 'dimgray': 0x696969, 'dimgrey': 0x696969, 'dodgerblue': 0x1E90FF, 'firebrick': 0xB22222,
-	'floralwhite': 0xFFFAF0, 'forestgreen': 0x228B22, 'fuchsia': 0xFF00FF, 'gainsboro': 0xDCDCDC, 'ghostwhite': 0xF8F8FF, 'gold': 0xFFD700,
-	'goldenrod': 0xDAA520, 'gray': 0x808080, 'green': 0x008000, 'greenyellow': 0xADFF2F, 'grey': 0x808080, 'honeydew': 0xF0FFF0, 'hotpink': 0xFF69B4,
-	'indianred': 0xCD5C5C, 'indigo': 0x4B0082, 'ivory': 0xFFFFF0, 'khaki': 0xF0E68C, 'lavender': 0xE6E6FA, 'lavenderblush': 0xFFF0F5, 'lawngreen': 0x7CFC00,
-	'lemonchiffon': 0xFFFACD, 'lightblue': 0xADD8E6, 'lightcoral': 0xF08080, 'lightcyan': 0xE0FFFF, 'lightgoldenrodyellow': 0xFAFAD2, 'lightgray': 0xD3D3D3,
-	'lightgreen': 0x90EE90, 'lightgrey': 0xD3D3D3, 'lightpink': 0xFFB6C1, 'lightsalmon': 0xFFA07A, 'lightseagreen': 0x20B2AA, 'lightskyblue': 0x87CEFA,
-	'lightslategray': 0x778899, 'lightslategrey': 0x778899, 'lightsteelblue': 0xB0C4DE, 'lightyellow': 0xFFFFE0, 'lime': 0x00FF00, 'limegreen': 0x32CD32,
-	'linen': 0xFAF0E6, 'magenta': 0xFF00FF, 'maroon': 0x800000, 'mediumaquamarine': 0x66CDAA, 'mediumblue': 0x0000CD, 'mediumorchid': 0xBA55D3,
-	'mediumpurple': 0x9370DB, 'mediumseagreen': 0x3CB371, 'mediumslateblue': 0x7B68EE, 'mediumspringgreen': 0x00FA9A, 'mediumturquoise': 0x48D1CC,
-	'mediumvioletred': 0xC71585, 'midnightblue': 0x191970, 'mintcream': 0xF5FFFA, 'mistyrose': 0xFFE4E1, 'moccasin': 0xFFE4B5, 'navajowhite': 0xFFDEAD,
-	'navy': 0x000080, 'oldlace': 0xFDF5E6, 'olive': 0x808000, 'olivedrab': 0x6B8E23, 'orange': 0xFFA500, 'orangered': 0xFF4500, 'orchid': 0xDA70D6,
-	'palegoldenrod': 0xEEE8AA, 'palegreen': 0x98FB98, 'paleturquoise': 0xAFEEEE, 'palevioletred': 0xDB7093, 'papayawhip': 0xFFEFD5, 'peachpuff': 0xFFDAB9,
-	'peru': 0xCD853F, 'pink': 0xFFC0CB, 'plum': 0xDDA0DD, 'powderblue': 0xB0E0E6, 'purple': 0x800080, 'rebeccapurple': 0x663399, 'red': 0xFF0000, 'rosybrown': 0xBC8F8F,
-	'royalblue': 0x4169E1, 'saddlebrown': 0x8B4513, 'salmon': 0xFA8072, 'sandybrown': 0xF4A460, 'seagreen': 0x2E8B57, 'seashell': 0xFFF5EE,
-	'sienna': 0xA0522D, 'silver': 0xC0C0C0, 'skyblue': 0x87CEEB, 'slateblue': 0x6A5ACD, 'slategray': 0x708090, 'slategrey': 0x708090, 'snow': 0xFFFAFA,
-	'springgreen': 0x00FF7F, 'steelblue': 0x4682B4, 'tan': 0xD2B48C, 'teal': 0x008080, 'thistle': 0xD8BFD8, 'tomato': 0xFF6347, 'turquoise': 0x40E0D0,
-	'violet': 0xEE82EE, 'wheat': 0xF5DEB3, 'white': 0xFFFFFF, 'whitesmoke': 0xF5F5F5, 'yellow': 0xFFFF00, 'yellowgreen': 0x9ACD32 };
-
-const _hslA = { h: 0, s: 0, l: 0 };
-const _hslB = { h: 0, s: 0, l: 0 };
-
-function hue2rgb( p, q, t ) {
-
-	if ( t < 0 ) t += 1;
-	if ( t > 1 ) t -= 1;
-	if ( t < 1 / 6 ) return p + ( q - p ) * 6 * t;
-	if ( t < 1 / 2 ) return q;
-	if ( t < 2 / 3 ) return p + ( q - p ) * 6 * ( 2 / 3 - t );
-	return p;
-
-}
-
-class Color {
-
-	constructor( r, g, b ) {
-
-		this.isColor = true;
-
-		this.r = 1;
-		this.g = 1;
-		this.b = 1;
-
-		if ( g === undefined && b === undefined ) {
-
-			// r is THREE.Color, hex or string
-			return this.set( r );
-
-		}
-
-		return this.setRGB( r, g, b );
-
-	}
-
-	set( value ) {
-
-		if ( value && value.isColor ) {
-
-			this.copy( value );
-
-		} else if ( typeof value === 'number' ) {
-
-			this.setHex( value );
-
-		} else if ( typeof value === 'string' ) {
-
-			this.setStyle( value );
-
-		}
-
-		return this;
-
-	}
-
-	setScalar( scalar ) {
-
-		this.r = scalar;
-		this.g = scalar;
-		this.b = scalar;
-
-		return this;
-
-	}
-
-	setHex( hex, colorSpace = SRGBColorSpace ) {
-
-		hex = Math.floor( hex );
-
-		this.r = ( hex >> 16 & 255 ) / 255;
-		this.g = ( hex >> 8 & 255 ) / 255;
-		this.b = ( hex & 255 ) / 255;
-
-		ColorManagement.toWorkingColorSpace( this, colorSpace );
-
-		return this;
-
-	}
-
-	setRGB( r, g, b, colorSpace = ColorManagement.workingColorSpace ) {
-
-		this.r = r;
-		this.g = g;
-		this.b = b;
-
-		ColorManagement.toWorkingColorSpace( this, colorSpace );
-
-		return this;
-
-	}
-
-	setHSL( h, s, l, colorSpace = ColorManagement.workingColorSpace ) {
-
-		// h,s,l ranges are in 0.0 - 1.0
-		h = euclideanModulo( h, 1 );
-		s = clamp( s, 0, 1 );
-		l = clamp( l, 0, 1 );
-
-		if ( s === 0 ) {
-
-			this.r = this.g = this.b = l;
-
-		} else {
-
-			const p = l <= 0.5 ? l * ( 1 + s ) : l + s - ( l * s );
-			const q = ( 2 * l ) - p;
-
-			this.r = hue2rgb( q, p, h + 1 / 3 );
-			this.g = hue2rgb( q, p, h );
-			this.b = hue2rgb( q, p, h - 1 / 3 );
-
-		}
-
-		ColorManagement.toWorkingColorSpace( this, colorSpace );
-
-		return this;
-
-	}
-
-	setStyle( style, colorSpace = SRGBColorSpace ) {
-
-		function handleAlpha( string ) {
-
-			if ( string === undefined ) return;
-
-			if ( parseFloat( string ) < 1 ) {
-
-				console.warn( 'THREE.Color: Alpha component of ' + style + ' will be ignored.' );
-
-			}
-
-		}
-
-
-		let m;
-
-		if ( m = /^(\w+)\(([^\)]*)\)/.exec( style ) ) {
-
-			// rgb / hsl
-
-			let color;
-			const name = m[ 1 ];
-			const components = m[ 2 ];
-
-			switch ( name ) {
-
-				case 'rgb':
-				case 'rgba':
-
-					if ( color = /^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) {
-
-						// rgb(255,0,0) rgba(255,0,0,0.5)
-
-						handleAlpha( color[ 4 ] );
-
-						return this.setRGB(
-							Math.min( 255, parseInt( color[ 1 ], 10 ) ) / 255,
-							Math.min( 255, parseInt( color[ 2 ], 10 ) ) / 255,
-							Math.min( 255, parseInt( color[ 3 ], 10 ) ) / 255,
-							colorSpace
-						);
-
-					}
-
-					if ( color = /^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) {
-
-						// rgb(100%,0%,0%) rgba(100%,0%,0%,0.5)
-
-						handleAlpha( color[ 4 ] );
-
-						return this.setRGB(
-							Math.min( 100, parseInt( color[ 1 ], 10 ) ) / 100,
-							Math.min( 100, parseInt( color[ 2 ], 10 ) ) / 100,
-							Math.min( 100, parseInt( color[ 3 ], 10 ) ) / 100,
-							colorSpace
-						);
-
-					}
-
-					break;
-
-				case 'hsl':
-				case 'hsla':
-
-					if ( color = /^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec( components ) ) {
-
-						// hsl(120,50%,50%) hsla(120,50%,50%,0.5)
-
-						handleAlpha( color[ 4 ] );
-
-						return this.setHSL(
-							parseFloat( color[ 1 ] ) / 360,
-							parseFloat( color[ 2 ] ) / 100,
-							parseFloat( color[ 3 ] ) / 100,
-							colorSpace
-						);
-
-					}
-
-					break;
-
-				default:
-
-					console.warn( 'THREE.Color: Unknown color model ' + style );
-
-			}
-
-		} else if ( m = /^\#([A-Fa-f\d]+)$/.exec( style ) ) {
-
-			// hex color
-
-			const hex = m[ 1 ];
-			const size = hex.length;
-
-			if ( size === 3 ) {
-
-				// #ff0
-				return this.setRGB(
-					parseInt( hex.charAt( 0 ), 16 ) / 15,
-					parseInt( hex.charAt( 1 ), 16 ) / 15,
-					parseInt( hex.charAt( 2 ), 16 ) / 15,
-					colorSpace
-				);
-
-			} else if ( size === 6 ) {
-
-				// #ff0000
-				return this.setHex( parseInt( hex, 16 ), colorSpace );
-
-			} else {
-
-				console.warn( 'THREE.Color: Invalid hex color ' + style );
-
-			}
-
-		} else if ( style && style.length > 0 ) {
-
-			return this.setColorName( style, colorSpace );
-
-		}
-
-		return this;
-
-	}
-
-	setColorName( style, colorSpace = SRGBColorSpace ) {
-
-		// color keywords
-		const hex = _colorKeywords[ style.toLowerCase() ];
-
-		if ( hex !== undefined ) {
-
-			// red
-			this.setHex( hex, colorSpace );
-
-		} else {
-
-			// unknown color
-			console.warn( 'THREE.Color: Unknown color ' + style );
-
-		}
-
-		return this;
-
-	}
-
-	clone() {
-
-		return new this.constructor( this.r, this.g, this.b );
-
-	}
-
-	copy( color ) {
-
-		this.r = color.r;
-		this.g = color.g;
-		this.b = color.b;
-
-		return this;
-
-	}
-
-	copySRGBToLinear( color ) {
-
-		this.r = SRGBToLinear( color.r );
-		this.g = SRGBToLinear( color.g );
-		this.b = SRGBToLinear( color.b );
-
-		return this;
-
-	}
-
-	copyLinearToSRGB( color ) {
-
-		this.r = LinearToSRGB( color.r );
-		this.g = LinearToSRGB( color.g );
-		this.b = LinearToSRGB( color.b );
-
-		return this;
-
-	}
-
-	convertSRGBToLinear() {
-
-		this.copySRGBToLinear( this );
-
-		return this;
-
-	}
-
-	convertLinearToSRGB() {
-
-		this.copyLinearToSRGB( this );
-
-		return this;
-
-	}
-
-	getHex( colorSpace = SRGBColorSpace ) {
-
-		ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
-
-		return Math.round( clamp( _color.r * 255, 0, 255 ) ) * 65536 + Math.round( clamp( _color.g * 255, 0, 255 ) ) * 256 + Math.round( clamp( _color.b * 255, 0, 255 ) );
-
-	}
-
-	getHexString( colorSpace = SRGBColorSpace ) {
-
-		return ( '000000' + this.getHex( colorSpace ).toString( 16 ) ).slice( - 6 );
-
-	}
-
-	getHSL( target, colorSpace = ColorManagement.workingColorSpace ) {
-
-		// h,s,l ranges are in 0.0 - 1.0
-
-		ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
-
-		const r = _color.r, g = _color.g, b = _color.b;
-
-		const max = Math.max( r, g, b );
-		const min = Math.min( r, g, b );
-
-		let hue, saturation;
-		const lightness = ( min + max ) / 2.0;
-
-		if ( min === max ) {
-
-			hue = 0;
-			saturation = 0;
-
-		} else {
-
-			const delta = max - min;
-
-			saturation = lightness <= 0.5 ? delta / ( max + min ) : delta / ( 2 - max - min );
-
-			switch ( max ) {
-
-				case r: hue = ( g - b ) / delta + ( g < b ? 6 : 0 ); break;
-				case g: hue = ( b - r ) / delta + 2; break;
-				case b: hue = ( r - g ) / delta + 4; break;
-
-			}
-
-			hue /= 6;
-
-		}
-
-		target.h = hue;
-		target.s = saturation;
-		target.l = lightness;
-
-		return target;
-
-	}
-
-	getRGB( target, colorSpace = ColorManagement.workingColorSpace ) {
-
-		ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
-
-		target.r = _color.r;
-		target.g = _color.g;
-		target.b = _color.b;
-
-		return target;
-
-	}
-
-	getStyle( colorSpace = SRGBColorSpace ) {
-
-		ColorManagement.fromWorkingColorSpace( _color.copy( this ), colorSpace );
-
-		const r = _color.r, g = _color.g, b = _color.b;
-
-		if ( colorSpace !== SRGBColorSpace ) {
-
-			// Requires CSS Color Module Level 4 (https://www.w3.org/TR/css-color-4/).
-			return `color(${ colorSpace } ${ r.toFixed( 3 ) } ${ g.toFixed( 3 ) } ${ b.toFixed( 3 ) })`;
-
-		}
-
-		return `rgb(${ Math.round( r * 255 ) },${ Math.round( g * 255 ) },${ Math.round( b * 255 ) })`;
-
-	}
-
-	offsetHSL( h, s, l ) {
-
-		this.getHSL( _hslA );
-
-		_hslA.h += h; _hslA.s += s; _hslA.l += l;
-
-		this.setHSL( _hslA.h, _hslA.s, _hslA.l );
-
-		return this;
-
-	}
-
-	add( color ) {
-
-		this.r += color.r;
-		this.g += color.g;
-		this.b += color.b;
-
-		return this;
-
-	}
-
-	addColors( color1, color2 ) {
-
-		this.r = color1.r + color2.r;
-		this.g = color1.g + color2.g;
-		this.b = color1.b + color2.b;
-
-		return this;
-
-	}
-
-	addScalar( s ) {
-
-		this.r += s;
-		this.g += s;
-		this.b += s;
-
-		return this;
-
-	}
-
-	sub( color ) {
-
-		this.r = Math.max( 0, this.r - color.r );
-		this.g = Math.max( 0, this.g - color.g );
-		this.b = Math.max( 0, this.b - color.b );
-
-		return this;
-
-	}
-
-	multiply( color ) {
-
-		this.r *= color.r;
-		this.g *= color.g;
-		this.b *= color.b;
-
-		return this;
-
-	}
-
-	multiplyScalar( s ) {
-
-		this.r *= s;
-		this.g *= s;
-		this.b *= s;
-
-		return this;
-
-	}
-
-	lerp( color, alpha ) {
-
-		this.r += ( color.r - this.r ) * alpha;
-		this.g += ( color.g - this.g ) * alpha;
-		this.b += ( color.b - this.b ) * alpha;
-
-		return this;
-
-	}
-
-	lerpColors( color1, color2, alpha ) {
-
-		this.r = color1.r + ( color2.r - color1.r ) * alpha;
-		this.g = color1.g + ( color2.g - color1.g ) * alpha;
-		this.b = color1.b + ( color2.b - color1.b ) * alpha;
-
-		return this;
-
-	}
-
-	lerpHSL( color, alpha ) {
-
-		this.getHSL( _hslA );
-		color.getHSL( _hslB );
-
-		const h = lerp( _hslA.h, _hslB.h, alpha );
-		const s = lerp( _hslA.s, _hslB.s, alpha );
-		const l = lerp( _hslA.l, _hslB.l, alpha );
-
-		this.setHSL( h, s, l );
-
-		return this;
-
-	}
-
-	setFromVector3( v ) {
-
-		this.r = v.x;
-		this.g = v.y;
-		this.b = v.z;
-
-		return this;
-
-	}
-
-	applyMatrix3( m ) {
-
-		const r = this.r, g = this.g, b = this.b;
-		const e = m.elements;
-
-		this.r = e[ 0 ] * r + e[ 3 ] * g + e[ 6 ] * b;
-		this.g = e[ 1 ] * r + e[ 4 ] * g + e[ 7 ] * b;
-		this.b = e[ 2 ] * r + e[ 5 ] * g + e[ 8 ] * b;
-
-		return this;
-
-	}
-
-	equals( c ) {
-
-		return ( c.r === this.r ) && ( c.g === this.g ) && ( c.b === this.b );
-
-	}
-
-	fromArray( array, offset = 0 ) {
-
-		this.r = array[ offset ];
-		this.g = array[ offset + 1 ];
-		this.b = array[ offset + 2 ];
-
-		return this;
-
-	}
-
-	toArray( array = [], offset = 0 ) {
-
-		array[ offset ] = this.r;
-		array[ offset + 1 ] = this.g;
-		array[ offset + 2 ] = this.b;
-
-		return array;
-
-	}
-
-	fromBufferAttribute( attribute, index ) {
-
-		this.r = attribute.getX( index );
-		this.g = attribute.getY( index );
-		this.b = attribute.getZ( index );
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		return this.getHex();
-
-	}
-
-	*[ Symbol.iterator ]() {
-
-		yield this.r;
-		yield this.g;
-		yield this.b;
-
-	}
-
-}
-
-const _color = /*@__PURE__*/ new Color();
-
-Color.NAMES = _colorKeywords;
-
-class MeshBasicMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isMeshBasicMaterial = true;
-
-		this.type = 'MeshBasicMaterial';
-
-		this.color = new Color( 0xffffff ); // emissive
-
-		this.map = null;
-
-		this.lightMap = null;
-		this.lightMapIntensity = 1.0;
-
-		this.aoMap = null;
-		this.aoMapIntensity = 1.0;
-
-		this.specularMap = null;
-
-		this.alphaMap = null;
-
-		this.envMap = null;
-		this.combine = MultiplyOperation;
-		this.reflectivity = 1;
-		this.refractionRatio = 0.98;
-
-		this.wireframe = false;
-		this.wireframeLinewidth = 1;
-		this.wireframeLinecap = 'round';
-		this.wireframeLinejoin = 'round';
-
-		this.fog = true;
-
-		this.setValues( parameters );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.color.copy( source.color );
-
-		this.map = source.map;
-
-		this.lightMap = source.lightMap;
-		this.lightMapIntensity = source.lightMapIntensity;
-
-		this.aoMap = source.aoMap;
-		this.aoMapIntensity = source.aoMapIntensity;
-
-		this.specularMap = source.specularMap;
-
-		this.alphaMap = source.alphaMap;
-
-		this.envMap = source.envMap;
-		this.combine = source.combine;
-		this.reflectivity = source.reflectivity;
-		this.refractionRatio = source.refractionRatio;
-
-		this.wireframe = source.wireframe;
-		this.wireframeLinewidth = source.wireframeLinewidth;
-		this.wireframeLinecap = source.wireframeLinecap;
-		this.wireframeLinejoin = source.wireframeLinejoin;
-
-		this.fog = source.fog;
-
-		return this;
-
-	}
-
-}
-
-// Fast Half Float Conversions, http://www.fox-toolkit.org/ftp/fasthalffloatconversion.pdf
-
-const _tables = /*@__PURE__*/ _generateTables();
-
-function _generateTables() {
-
-	// float32 to float16 helpers
-
-	const buffer = new ArrayBuffer( 4 );
-	const floatView = new Float32Array( buffer );
-	const uint32View = new Uint32Array( buffer );
-
-	const baseTable = new Uint32Array( 512 );
-	const shiftTable = new Uint32Array( 512 );
-
-	for ( let i = 0; i < 256; ++ i ) {
-
-		const e = i - 127;
-
-		// very small number (0, -0)
-
-		if ( e < - 27 ) {
-
-			baseTable[ i ] = 0x0000;
-			baseTable[ i | 0x100 ] = 0x8000;
-			shiftTable[ i ] = 24;
-			shiftTable[ i | 0x100 ] = 24;
-
-			// small number (denorm)
-
-		} else if ( e < - 14 ) {
-
-			baseTable[ i ] = 0x0400 >> ( - e - 14 );
-			baseTable[ i | 0x100 ] = ( 0x0400 >> ( - e - 14 ) ) | 0x8000;
-			shiftTable[ i ] = - e - 1;
-			shiftTable[ i | 0x100 ] = - e - 1;
-
-			// normal number
-
-		} else if ( e <= 15 ) {
-
-			baseTable[ i ] = ( e + 15 ) << 10;
-			baseTable[ i | 0x100 ] = ( ( e + 15 ) << 10 ) | 0x8000;
-			shiftTable[ i ] = 13;
-			shiftTable[ i | 0x100 ] = 13;
-
-			// large number (Infinity, -Infinity)
-
-		} else if ( e < 128 ) {
-
-			baseTable[ i ] = 0x7c00;
-			baseTable[ i | 0x100 ] = 0xfc00;
-			shiftTable[ i ] = 24;
-			shiftTable[ i | 0x100 ] = 24;
-
-			// stay (NaN, Infinity, -Infinity)
-
-		} else {
-
-			baseTable[ i ] = 0x7c00;
-			baseTable[ i | 0x100 ] = 0xfc00;
-			shiftTable[ i ] = 13;
-			shiftTable[ i | 0x100 ] = 13;
-
-		}
-
-	}
-
-	// float16 to float32 helpers
-
-	const mantissaTable = new Uint32Array( 2048 );
-	const exponentTable = new Uint32Array( 64 );
-	const offsetTable = new Uint32Array( 64 );
-
-	for ( let i = 1; i < 1024; ++ i ) {
-
-		let m = i << 13; // zero pad mantissa bits
-		let e = 0; // zero exponent
-
-		// normalized
-		while ( ( m & 0x00800000 ) === 0 ) {
-
-			m <<= 1;
-			e -= 0x00800000; // decrement exponent
-
-		}
-
-		m &= ~ 0x00800000; // clear leading 1 bit
-		e += 0x38800000; // adjust bias
-
-		mantissaTable[ i ] = m | e;
-
-	}
-
-	for ( let i = 1024; i < 2048; ++ i ) {
-
-		mantissaTable[ i ] = 0x38000000 + ( ( i - 1024 ) << 13 );
-
-	}
-
-	for ( let i = 1; i < 31; ++ i ) {
-
-		exponentTable[ i ] = i << 23;
-
-	}
-
-	exponentTable[ 31 ] = 0x47800000;
-	exponentTable[ 32 ] = 0x80000000;
-
-	for ( let i = 33; i < 63; ++ i ) {
-
-		exponentTable[ i ] = 0x80000000 + ( ( i - 32 ) << 23 );
-
-	}
-
-	exponentTable[ 63 ] = 0xc7800000;
-
-	for ( let i = 1; i < 64; ++ i ) {
-
-		if ( i !== 32 ) {
-
-			offsetTable[ i ] = 1024;
-
-		}
-
-	}
-
-	return {
-		floatView: floatView,
-		uint32View: uint32View,
-		baseTable: baseTable,
-		shiftTable: shiftTable,
-		mantissaTable: mantissaTable,
-		exponentTable: exponentTable,
-		offsetTable: offsetTable
-	};
-
-}
-
-// float32 to float16
-
-function toHalfFloat( val ) {
-
-	if ( Math.abs( val ) > 65504 ) console.warn( 'THREE.DataUtils.toHalfFloat(): Value out of range.' );
-
-	val = clamp( val, - 65504, 65504 );
-
-	_tables.floatView[ 0 ] = val;
-	const f = _tables.uint32View[ 0 ];
-	const e = ( f >> 23 ) & 0x1ff;
-	return _tables.baseTable[ e ] + ( ( f & 0x007fffff ) >> _tables.shiftTable[ e ] );
-
-}
-
-// float16 to float32
-
-function fromHalfFloat( val ) {
-
-	const m = val >> 10;
-	_tables.uint32View[ 0 ] = _tables.mantissaTable[ _tables.offsetTable[ m ] + ( val & 0x3ff ) ] + _tables.exponentTable[ m ];
-	return _tables.floatView[ 0 ];
-
-}
-
-const DataUtils = {
-	toHalfFloat: toHalfFloat,
-	fromHalfFloat: fromHalfFloat,
-};
-
-const _vector$8 = /*@__PURE__*/ new Vector3();
-const _vector2$1 = /*@__PURE__*/ new Vector2();
-
-class BufferAttribute {
-
-	constructor( array, itemSize, normalized = false ) {
-
-		if ( Array.isArray( array ) ) {
-
-			throw new TypeError( 'THREE.BufferAttribute: array should be a Typed Array.' );
-
-		}
-
-		this.isBufferAttribute = true;
-
-		this.name = '';
-
-		this.array = array;
-		this.itemSize = itemSize;
-		this.count = array !== undefined ? array.length / itemSize : 0;
-		this.normalized = normalized;
-
-		this.usage = StaticDrawUsage;
-		this.updateRange = { offset: 0, count: - 1 };
-
-		this.version = 0;
-
-	}
-
-	onUploadCallback() {}
-
-	set needsUpdate( value ) {
-
-		if ( value === true ) this.version ++;
-
-	}
-
-	setUsage( value ) {
-
-		this.usage = value;
-
-		return this;
-
-	}
-
-	copy( source ) {
-
-		this.name = source.name;
-		this.array = new source.array.constructor( source.array );
-		this.itemSize = source.itemSize;
-		this.count = source.count;
-		this.normalized = source.normalized;
-
-		this.usage = source.usage;
-
-		return this;
-
-	}
-
-	copyAt( index1, attribute, index2 ) {
-
-		index1 *= this.itemSize;
-		index2 *= attribute.itemSize;
-
-		for ( let i = 0, l = this.itemSize; i < l; i ++ ) {
-
-			this.array[ index1 + i ] = attribute.array[ index2 + i ];
-
-		}
-
-		return this;
-
-	}
-
-	copyArray( array ) {
-
-		this.array.set( array );
-
-		return this;
-
-	}
-
-	applyMatrix3( m ) {
-
-		if ( this.itemSize === 2 ) {
-
-			for ( let i = 0, l = this.count; i < l; i ++ ) {
-
-				_vector2$1.fromBufferAttribute( this, i );
-				_vector2$1.applyMatrix3( m );
-
-				this.setXY( i, _vector2$1.x, _vector2$1.y );
-
-			}
-
-		} else if ( this.itemSize === 3 ) {
-
-			for ( let i = 0, l = this.count; i < l; i ++ ) {
-
-				_vector$8.fromBufferAttribute( this, i );
-				_vector$8.applyMatrix3( m );
-
-				this.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );
-
-			}
-
-		}
-
-		return this;
-
-	}
-
-	applyMatrix4( m ) {
-
-		for ( let i = 0, l = this.count; i < l; i ++ ) {
-
-			_vector$8.fromBufferAttribute( this, i );
-
-			_vector$8.applyMatrix4( m );
-
-			this.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );
-
-		}
-
-		return this;
-
-	}
-
-	applyNormalMatrix( m ) {
-
-		for ( let i = 0, l = this.count; i < l; i ++ ) {
-
-			_vector$8.fromBufferAttribute( this, i );
-
-			_vector$8.applyNormalMatrix( m );
-
-			this.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );
-
-		}
-
-		return this;
-
-	}
-
-	transformDirection( m ) {
-
-		for ( let i = 0, l = this.count; i < l; i ++ ) {
-
-			_vector$8.fromBufferAttribute( this, i );
-
-			_vector$8.transformDirection( m );
-
-			this.setXYZ( i, _vector$8.x, _vector$8.y, _vector$8.z );
-
-		}
-
-		return this;
-
-	}
-
-	set( value, offset = 0 ) {
-
-		// Matching BufferAttribute constructor, do not normalize the array.
-		this.array.set( value, offset );
-
-		return this;
-
-	}
-
-	getX( index ) {
-
-		let x = this.array[ index * this.itemSize ];
-
-		if ( this.normalized ) x = denormalize( x, this.array );
-
-		return x;
-
-	}
-
-	setX( index, x ) {
-
-		if ( this.normalized ) x = normalize( x, this.array );
-
-		this.array[ index * this.itemSize ] = x;
-
-		return this;
-
-	}
-
-	getY( index ) {
-
-		let y = this.array[ index * this.itemSize + 1 ];
-
-		if ( this.normalized ) y = denormalize( y, this.array );
-
-		return y;
-
-	}
-
-	setY( index, y ) {
-
-		if ( this.normalized ) y = normalize( y, this.array );
-
-		this.array[ index * this.itemSize + 1 ] = y;
-
-		return this;
-
-	}
-
-	getZ( index ) {
-
-		let z = this.array[ index * this.itemSize + 2 ];
-
-		if ( this.normalized ) z = denormalize( z, this.array );
-
-		return z;
-
-	}
-
-	setZ( index, z ) {
-
-		if ( this.normalized ) z = normalize( z, this.array );
-
-		this.array[ index * this.itemSize + 2 ] = z;
-
-		return this;
-
-	}
-
-	getW( index ) {
-
-		let w = this.array[ index * this.itemSize + 3 ];
-
-		if ( this.normalized ) w = denormalize( w, this.array );
-
-		return w;
-
-	}
-
-	setW( index, w ) {
-
-		if ( this.normalized ) w = normalize( w, this.array );
-
-		this.array[ index * this.itemSize + 3 ] = w;
-
-		return this;
-
-	}
-
-	setXY( index, x, y ) {
-
-		index *= this.itemSize;
-
-		if ( this.normalized ) {
-
-			x = normalize( x, this.array );
-			y = normalize( y, this.array );
-
-		}
-
-		this.array[ index + 0 ] = x;
-		this.array[ index + 1 ] = y;
-
-		return this;
-
-	}
-
-	setXYZ( index, x, y, z ) {
-
-		index *= this.itemSize;
-
-		if ( this.normalized ) {
-
-			x = normalize( x, this.array );
-			y = normalize( y, this.array );
-			z = normalize( z, this.array );
-
-		}
-
-		this.array[ index + 0 ] = x;
-		this.array[ index + 1 ] = y;
-		this.array[ index + 2 ] = z;
-
-		return this;
-
-	}
-
-	setXYZW( index, x, y, z, w ) {
-
-		index *= this.itemSize;
-
-		if ( this.normalized ) {
-
-			x = normalize( x, this.array );
-			y = normalize( y, this.array );
-			z = normalize( z, this.array );
-			w = normalize( w, this.array );
-
-		}
-
-		this.array[ index + 0 ] = x;
-		this.array[ index + 1 ] = y;
-		this.array[ index + 2 ] = z;
-		this.array[ index + 3 ] = w;
-
-		return this;
-
-	}
-
-	onUpload( callback ) {
-
-		this.onUploadCallback = callback;
-
-		return this;
-
-	}
-
-	clone() {
-
-		return new this.constructor( this.array, this.itemSize ).copy( this );
-
-	}
-
-	toJSON() {
-
-		const data = {
-			itemSize: this.itemSize,
-			type: this.array.constructor.name,
-			array: Array.from( this.array ),
-			normalized: this.normalized
-		};
-
-		if ( this.name !== '' ) data.name = this.name;
-		if ( this.usage !== StaticDrawUsage ) data.usage = this.usage;
-		if ( this.updateRange.offset !== 0 || this.updateRange.count !== - 1 ) data.updateRange = this.updateRange;
-
-		return data;
-
-	}
-
-	copyColorsArray() { // @deprecated, r144
-
-		console.error( 'THREE.BufferAttribute: copyColorsArray() was removed in r144.' );
-
-	}
-
-	copyVector2sArray() { // @deprecated, r144
-
-		console.error( 'THREE.BufferAttribute: copyVector2sArray() was removed in r144.' );
-
-	}
-
-	copyVector3sArray() { // @deprecated, r144
-
-		console.error( 'THREE.BufferAttribute: copyVector3sArray() was removed in r144.' );
-
-	}
-
-	copyVector4sArray() { // @deprecated, r144
-
-		console.error( 'THREE.BufferAttribute: copyVector4sArray() was removed in r144.' );
-
-	}
-
-}
-
-//
-
-class Int8BufferAttribute extends BufferAttribute {
-
-	constructor( array, itemSize, normalized ) {
-
-		super( new Int8Array( array ), itemSize, normalized );
-
-	}
-
-}
-
-class Uint8BufferAttribute extends BufferAttribute {
-
-	constructor( array, itemSize, normalized ) {
-
-		super( new Uint8Array( array ), itemSize, normalized );
-
-	}
-
-}
-
-class Uint8ClampedBufferAttribute extends BufferAttribute {
-
-	constructor( array, itemSize, normalized ) {
-
-		super( new Uint8ClampedArray( array ), itemSize, normalized );
-
-	}
-
-}
-
-class Int16BufferAttribute extends BufferAttribute {
-
-	constructor( array, itemSize, normalized ) {
-
-		super( new Int16Array( array ), itemSize, normalized );
-
-	}
-
-}
-
-class Uint16BufferAttribute extends BufferAttribute {
-
-	constructor( array, itemSize, normalized ) {
-
-		super( new Uint16Array( array ), itemSize, normalized );
-
-	}
-
-}
-
-class Int32BufferAttribute extends BufferAttribute {
-
-	constructor( array, itemSize, normalized ) {
-
-		super( new Int32Array( array ), itemSize, normalized );
-
-	}
-
-}
-
-class Uint32BufferAttribute extends BufferAttribute {
-
-	constructor( array, itemSize, normalized ) {
-
-		super( new Uint32Array( array ), itemSize, normalized );
-
-	}
-
-}
-
-class Float16BufferAttribute extends BufferAttribute {
-
-	constructor( array, itemSize, normalized ) {
-
-		super( new Uint16Array( array ), itemSize, normalized );
-
-		this.isFloat16BufferAttribute = true;
-
-	}
-
-	getX( index ) {
-
-		let x = fromHalfFloat( this.array[ index * this.itemSize ] );
-
-		if ( this.normalized ) x = denormalize( x, this.array );
-
-		return x;
-
-	}
-
-	setX( index, x ) {
-
-		if ( this.normalized ) x = normalize( x, this.array );
-
-		this.array[ index * this.itemSize ] = toHalfFloat( x );
-
-		return this;
-
-	}
-
-	getY( index ) {
-
-		let y = fromHalfFloat( this.array[ index * this.itemSize + 1 ] );
-
-		if ( this.normalized ) y = denormalize( y, this.array );
-
-		return y;
-
-	}
-
-	setY( index, y ) {
-
-		if ( this.normalized ) y = normalize( y, this.array );
-
-		this.array[ index * this.itemSize + 1 ] = toHalfFloat( y );
-
-		return this;
-
-	}
-
-	getZ( index ) {
-
-		let z = fromHalfFloat( this.array[ index * this.itemSize + 2 ] );
-
-		if ( this.normalized ) z = denormalize( z, this.array );
-
-		return z;
-
-	}
-
-	setZ( index, z ) {
-
-		if ( this.normalized ) z = normalize( z, this.array );
-
-		this.array[ index * this.itemSize + 2 ] = toHalfFloat( z );
-
-		return this;
-
-	}
-
-	getW( index ) {
-
-		let w = fromHalfFloat( this.array[ index * this.itemSize + 3 ] );
-
-		if ( this.normalized ) w = denormalize( w, this.array );
-
-		return w;
-
-	}
-
-	setW( index, w ) {
-
-		if ( this.normalized ) w = normalize( w, this.array );
-
-		this.array[ index * this.itemSize + 3 ] = toHalfFloat( w );
-
-		return this;
-
-	}
-
-	setXY( index, x, y ) {
-
-		index *= this.itemSize;
-
-		if ( this.normalized ) {
-
-			x = normalize( x, this.array );
-			y = normalize( y, this.array );
-
-		}
-
-		this.array[ index + 0 ] = toHalfFloat( x );
-		this.array[ index + 1 ] = toHalfFloat( y );
-
-		return this;
-
-	}
-
-	setXYZ( index, x, y, z ) {
-
-		index *= this.itemSize;
-
-		if ( this.normalized ) {
-
-			x = normalize( x, this.array );
-			y = normalize( y, this.array );
-			z = normalize( z, this.array );
-
-		}
-
-		this.array[ index + 0 ] = toHalfFloat( x );
-		this.array[ index + 1 ] = toHalfFloat( y );
-		this.array[ index + 2 ] = toHalfFloat( z );
-
-		return this;
-
-	}
-
-	setXYZW( index, x, y, z, w ) {
-
-		index *= this.itemSize;
-
-		if ( this.normalized ) {
-
-			x = normalize( x, this.array );
-			y = normalize( y, this.array );
-			z = normalize( z, this.array );
-			w = normalize( w, this.array );
-
-		}
-
-		this.array[ index + 0 ] = toHalfFloat( x );
-		this.array[ index + 1 ] = toHalfFloat( y );
-		this.array[ index + 2 ] = toHalfFloat( z );
-		this.array[ index + 3 ] = toHalfFloat( w );
-
-		return this;
-
-	}
-
-}
-
-
-class Float32BufferAttribute extends BufferAttribute {
-
-	constructor( array, itemSize, normalized ) {
-
-		super( new Float32Array( array ), itemSize, normalized );
-
-	}
-
-}
-
-class Float64BufferAttribute extends BufferAttribute {
-
-	constructor( array, itemSize, normalized ) {
-
-		super( new Float64Array( array ), itemSize, normalized );
-
-	}
-
-}
-
-let _id$1 = 0;
-
-const _m1 = /*@__PURE__*/ new Matrix4();
-const _obj = /*@__PURE__*/ new Object3D();
-const _offset = /*@__PURE__*/ new Vector3();
-const _box$1 = /*@__PURE__*/ new Box3();
-const _boxMorphTargets = /*@__PURE__*/ new Box3();
-const _vector$7 = /*@__PURE__*/ new Vector3();
-
-class BufferGeometry extends EventDispatcher {
-
-	constructor() {
-
-		super();
-
-		this.isBufferGeometry = true;
-
-		Object.defineProperty( this, 'id', { value: _id$1 ++ } );
-
-		this.uuid = generateUUID();
-
-		this.name = '';
-		this.type = 'BufferGeometry';
-
-		this.index = null;
-		this.attributes = {};
-
-		this.morphAttributes = {};
-		this.morphTargetsRelative = false;
-
-		this.groups = [];
-
-		this.boundingBox = null;
-		this.boundingSphere = null;
-
-		this.drawRange = { start: 0, count: Infinity };
-
-		this.userData = {};
-
-	}
-
-	getIndex() {
-
-		return this.index;
-
-	}
-
-	setIndex( index ) {
-
-		if ( Array.isArray( index ) ) {
-
-			this.index = new ( arrayNeedsUint32( index ) ? Uint32BufferAttribute : Uint16BufferAttribute )( index, 1 );
-
-		} else {
-
-			this.index = index;
-
-		}
-
-		return this;
-
-	}
-
-	getAttribute( name ) {
-
-		return this.attributes[ name ];
-
-	}
-
-	setAttribute( name, attribute ) {
-
-		this.attributes[ name ] = attribute;
-
-		return this;
-
-	}
-
-	deleteAttribute( name ) {
-
-		delete this.attributes[ name ];
-
-		return this;
-
-	}
-
-	hasAttribute( name ) {
-
-		return this.attributes[ name ] !== undefined;
-
-	}
-
-	addGroup( start, count, materialIndex = 0 ) {
-
-		this.groups.push( {
-
-			start: start,
-			count: count,
-			materialIndex: materialIndex
-
-		} );
-
-	}
-
-	clearGroups() {
-
-		this.groups = [];
-
-	}
-
-	setDrawRange( start, count ) {
-
-		this.drawRange.start = start;
-		this.drawRange.count = count;
-
-	}
-
-	applyMatrix4( matrix ) {
-
-		const position = this.attributes.position;
-
-		if ( position !== undefined ) {
-
-			position.applyMatrix4( matrix );
-
-			position.needsUpdate = true;
-
-		}
-
-		const normal = this.attributes.normal;
-
-		if ( normal !== undefined ) {
-
-			const normalMatrix = new Matrix3().getNormalMatrix( matrix );
-
-			normal.applyNormalMatrix( normalMatrix );
-
-			normal.needsUpdate = true;
-
-		}
-
-		const tangent = this.attributes.tangent;
-
-		if ( tangent !== undefined ) {
-
-			tangent.transformDirection( matrix );
-
-			tangent.needsUpdate = true;
-
-		}
-
-		if ( this.boundingBox !== null ) {
-
-			this.computeBoundingBox();
-
-		}
-
-		if ( this.boundingSphere !== null ) {
-
-			this.computeBoundingSphere();
-
-		}
-
-		return this;
-
-	}
-
-	applyQuaternion( q ) {
-
-		_m1.makeRotationFromQuaternion( q );
-
-		this.applyMatrix4( _m1 );
-
-		return this;
-
-	}
-
-	rotateX( angle ) {
-
-		// rotate geometry around world x-axis
-
-		_m1.makeRotationX( angle );
-
-		this.applyMatrix4( _m1 );
-
-		return this;
-
-	}
-
-	rotateY( angle ) {
-
-		// rotate geometry around world y-axis
-
-		_m1.makeRotationY( angle );
-
-		this.applyMatrix4( _m1 );
-
-		return this;
-
-	}
-
-	rotateZ( angle ) {
-
-		// rotate geometry around world z-axis
-
-		_m1.makeRotationZ( angle );
-
-		this.applyMatrix4( _m1 );
-
-		return this;
-
-	}
-
-	translate( x, y, z ) {
-
-		// translate geometry
-
-		_m1.makeTranslation( x, y, z );
-
-		this.applyMatrix4( _m1 );
-
-		return this;
-
-	}
-
-	scale( x, y, z ) {
-
-		// scale geometry
-
-		_m1.makeScale( x, y, z );
-
-		this.applyMatrix4( _m1 );
-
-		return this;
-
-	}
-
-	lookAt( vector ) {
-
-		_obj.lookAt( vector );
-
-		_obj.updateMatrix();
-
-		this.applyMatrix4( _obj.matrix );
-
-		return this;
-
-	}
-
-	center() {
-
-		this.computeBoundingBox();
-
-		this.boundingBox.getCenter( _offset ).negate();
-
-		this.translate( _offset.x, _offset.y, _offset.z );
-
-		return this;
-
-	}
-
-	setFromPoints( points ) {
-
-		const position = [];
-
-		for ( let i = 0, l = points.length; i < l; i ++ ) {
-
-			const point = points[ i ];
-			position.push( point.x, point.y, point.z || 0 );
-
-		}
-
-		this.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );
-
-		return this;
-
-	}
-
-	computeBoundingBox() {
-
-		if ( this.boundingBox === null ) {
-
-			this.boundingBox = new Box3();
-
-		}
-
-		const position = this.attributes.position;
-		const morphAttributesPosition = this.morphAttributes.position;
-
-		if ( position && position.isGLBufferAttribute ) {
-
-			console.error( 'THREE.BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box. Alternatively set "mesh.frustumCulled" to "false".', this );
-
-			this.boundingBox.set(
-				new Vector3( - Infinity, - Infinity, - Infinity ),
-				new Vector3( + Infinity, + Infinity, + Infinity )
-			);
-
-			return;
-
-		}
-
-		if ( position !== undefined ) {
-
-			this.boundingBox.setFromBufferAttribute( position );
-
-			// process morph attributes if present
-
-			if ( morphAttributesPosition ) {
-
-				for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {
-
-					const morphAttribute = morphAttributesPosition[ i ];
-					_box$1.setFromBufferAttribute( morphAttribute );
-
-					if ( this.morphTargetsRelative ) {
-
-						_vector$7.addVectors( this.boundingBox.min, _box$1.min );
-						this.boundingBox.expandByPoint( _vector$7 );
-
-						_vector$7.addVectors( this.boundingBox.max, _box$1.max );
-						this.boundingBox.expandByPoint( _vector$7 );
-
-					} else {
-
-						this.boundingBox.expandByPoint( _box$1.min );
-						this.boundingBox.expandByPoint( _box$1.max );
-
-					}
-
-				}
-
-			}
-
-		} else {
-
-			this.boundingBox.makeEmpty();
-
-		}
-
-		if ( isNaN( this.boundingBox.min.x ) || isNaN( this.boundingBox.min.y ) || isNaN( this.boundingBox.min.z ) ) {
-
-			console.error( 'THREE.BufferGeometry.computeBoundingBox(): Computed min/max have NaN values. The "position" attribute is likely to have NaN values.', this );
-
-		}
-
-	}
-
-	computeBoundingSphere() {
-
-		if ( this.boundingSphere === null ) {
-
-			this.boundingSphere = new Sphere();
-
-		}
-
-		const position = this.attributes.position;
-		const morphAttributesPosition = this.morphAttributes.position;
-
-		if ( position && position.isGLBufferAttribute ) {
-
-			console.error( 'THREE.BufferGeometry.computeBoundingSphere(): GLBufferAttribute requires a manual bounding sphere. Alternatively set "mesh.frustumCulled" to "false".', this );
-
-			this.boundingSphere.set( new Vector3(), Infinity );
-
-			return;
-
-		}
-
-		if ( position ) {
-
-			// first, find the center of the bounding sphere
-
-			const center = this.boundingSphere.center;
-
-			_box$1.setFromBufferAttribute( position );
-
-			// process morph attributes if present
-
-			if ( morphAttributesPosition ) {
-
-				for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {
-
-					const morphAttribute = morphAttributesPosition[ i ];
-					_boxMorphTargets.setFromBufferAttribute( morphAttribute );
-
-					if ( this.morphTargetsRelative ) {
-
-						_vector$7.addVectors( _box$1.min, _boxMorphTargets.min );
-						_box$1.expandByPoint( _vector$7 );
-
-						_vector$7.addVectors( _box$1.max, _boxMorphTargets.max );
-						_box$1.expandByPoint( _vector$7 );
-
-					} else {
-
-						_box$1.expandByPoint( _boxMorphTargets.min );
-						_box$1.expandByPoint( _boxMorphTargets.max );
-
-					}
-
-				}
-
-			}
-
-			_box$1.getCenter( center );
-
-			// second, try to find a boundingSphere with a radius smaller than the
-			// boundingSphere of the boundingBox: sqrt(3) smaller in the best case
-
-			let maxRadiusSq = 0;
-
-			for ( let i = 0, il = position.count; i < il; i ++ ) {
-
-				_vector$7.fromBufferAttribute( position, i );
-
-				maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$7 ) );
-
-			}
-
-			// process morph attributes if present
-
-			if ( morphAttributesPosition ) {
-
-				for ( let i = 0, il = morphAttributesPosition.length; i < il; i ++ ) {
-
-					const morphAttribute = morphAttributesPosition[ i ];
-					const morphTargetsRelative = this.morphTargetsRelative;
-
-					for ( let j = 0, jl = morphAttribute.count; j < jl; j ++ ) {
-
-						_vector$7.fromBufferAttribute( morphAttribute, j );
-
-						if ( morphTargetsRelative ) {
-
-							_offset.fromBufferAttribute( position, j );
-							_vector$7.add( _offset );
-
-						}
-
-						maxRadiusSq = Math.max( maxRadiusSq, center.distanceToSquared( _vector$7 ) );
-
-					}
-
-				}
-
-			}
-
-			this.boundingSphere.radius = Math.sqrt( maxRadiusSq );
-
-			if ( isNaN( this.boundingSphere.radius ) ) {
-
-				console.error( 'THREE.BufferGeometry.computeBoundingSphere(): Computed radius is NaN. The "position" attribute is likely to have NaN values.', this );
-
-			}
-
-		}
-
-	}
-
-	computeTangents() {
-
-		const index = this.index;
-		const attributes = this.attributes;
-
-		// based on http://www.terathon.com/code/tangent.html
-		// (per vertex tangents)
-
-		if ( index === null ||
-			 attributes.position === undefined ||
-			 attributes.normal === undefined ||
-			 attributes.uv === undefined ) {
-
-			console.error( 'THREE.BufferGeometry: .computeTangents() failed. Missing required attributes (index, position, normal or uv)' );
-			return;
-
-		}
-
-		const indices = index.array;
-		const positions = attributes.position.array;
-		const normals = attributes.normal.array;
-		const uvs = attributes.uv.array;
-
-		const nVertices = positions.length / 3;
-
-		if ( this.hasAttribute( 'tangent' ) === false ) {
-
-			this.setAttribute( 'tangent', new BufferAttribute( new Float32Array( 4 * nVertices ), 4 ) );
-
-		}
-
-		const tangents = this.getAttribute( 'tangent' ).array;
-
-		const tan1 = [], tan2 = [];
-
-		for ( let i = 0; i < nVertices; i ++ ) {
-
-			tan1[ i ] = new Vector3();
-			tan2[ i ] = new Vector3();
-
-		}
-
-		const vA = new Vector3(),
-			vB = new Vector3(),
-			vC = new Vector3(),
-
-			uvA = new Vector2(),
-			uvB = new Vector2(),
-			uvC = new Vector2(),
-
-			sdir = new Vector3(),
-			tdir = new Vector3();
-
-		function handleTriangle( a, b, c ) {
-
-			vA.fromArray( positions, a * 3 );
-			vB.fromArray( positions, b * 3 );
-			vC.fromArray( positions, c * 3 );
-
-			uvA.fromArray( uvs, a * 2 );
-			uvB.fromArray( uvs, b * 2 );
-			uvC.fromArray( uvs, c * 2 );
-
-			vB.sub( vA );
-			vC.sub( vA );
-
-			uvB.sub( uvA );
-			uvC.sub( uvA );
-
-			const r = 1.0 / ( uvB.x * uvC.y - uvC.x * uvB.y );
-
-			// silently ignore degenerate uv triangles having coincident or colinear vertices
-
-			if ( ! isFinite( r ) ) return;
-
-			sdir.copy( vB ).multiplyScalar( uvC.y ).addScaledVector( vC, - uvB.y ).multiplyScalar( r );
-			tdir.copy( vC ).multiplyScalar( uvB.x ).addScaledVector( vB, - uvC.x ).multiplyScalar( r );
-
-			tan1[ a ].add( sdir );
-			tan1[ b ].add( sdir );
-			tan1[ c ].add( sdir );
-
-			tan2[ a ].add( tdir );
-			tan2[ b ].add( tdir );
-			tan2[ c ].add( tdir );
-
-		}
-
-		let groups = this.groups;
-
-		if ( groups.length === 0 ) {
-
-			groups = [ {
-				start: 0,
-				count: indices.length
-			} ];
-
-		}
-
-		for ( let i = 0, il = groups.length; i < il; ++ i ) {
-
-			const group = groups[ i ];
-
-			const start = group.start;
-			const count = group.count;
-
-			for ( let j = start, jl = start + count; j < jl; j += 3 ) {
-
-				handleTriangle(
-					indices[ j + 0 ],
-					indices[ j + 1 ],
-					indices[ j + 2 ]
-				);
-
-			}
-
-		}
-
-		const tmp = new Vector3(), tmp2 = new Vector3();
-		const n = new Vector3(), n2 = new Vector3();
-
-		function handleVertex( v ) {
-
-			n.fromArray( normals, v * 3 );
-			n2.copy( n );
-
-			const t = tan1[ v ];
-
-			// Gram-Schmidt orthogonalize
-
-			tmp.copy( t );
-			tmp.sub( n.multiplyScalar( n.dot( t ) ) ).normalize();
-
-			// Calculate handedness
-
-			tmp2.crossVectors( n2, t );
-			const test = tmp2.dot( tan2[ v ] );
-			const w = ( test < 0.0 ) ? - 1.0 : 1.0;
-
-			tangents[ v * 4 ] = tmp.x;
-			tangents[ v * 4 + 1 ] = tmp.y;
-			tangents[ v * 4 + 2 ] = tmp.z;
-			tangents[ v * 4 + 3 ] = w;
-
-		}
-
-		for ( let i = 0, il = groups.length; i < il; ++ i ) {
-
-			const group = groups[ i ];
-
-			const start = group.start;
-			const count = group.count;
-
-			for ( let j = start, jl = start + count; j < jl; j += 3 ) {
-
-				handleVertex( indices[ j + 0 ] );
-				handleVertex( indices[ j + 1 ] );
-				handleVertex( indices[ j + 2 ] );
-
-			}
-
-		}
-
-	}
-
-	computeVertexNormals() {
-
-		const index = this.index;
-		const positionAttribute = this.getAttribute( 'position' );
-
-		if ( positionAttribute !== undefined ) {
-
-			let normalAttribute = this.getAttribute( 'normal' );
-
-			if ( normalAttribute === undefined ) {
-
-				normalAttribute = new BufferAttribute( new Float32Array( positionAttribute.count * 3 ), 3 );
-				this.setAttribute( 'normal', normalAttribute );
-
-			} else {
-
-				// reset existing normals to zero
-
-				for ( let i = 0, il = normalAttribute.count; i < il; i ++ ) {
-
-					normalAttribute.setXYZ( i, 0, 0, 0 );
-
-				}
-
-			}
-
-			const pA = new Vector3(), pB = new Vector3(), pC = new Vector3();
-			const nA = new Vector3(), nB = new Vector3(), nC = new Vector3();
-			const cb = new Vector3(), ab = new Vector3();
-
-			// indexed elements
-
-			if ( index ) {
-
-				for ( let i = 0, il = index.count; i < il; i += 3 ) {
-
-					const vA = index.getX( i + 0 );
-					const vB = index.getX( i + 1 );
-					const vC = index.getX( i + 2 );
-
-					pA.fromBufferAttribute( positionAttribute, vA );
-					pB.fromBufferAttribute( positionAttribute, vB );
-					pC.fromBufferAttribute( positionAttribute, vC );
-
-					cb.subVectors( pC, pB );
-					ab.subVectors( pA, pB );
-					cb.cross( ab );
-
-					nA.fromBufferAttribute( normalAttribute, vA );
-					nB.fromBufferAttribute( normalAttribute, vB );
-					nC.fromBufferAttribute( normalAttribute, vC );
-
-					nA.add( cb );
-					nB.add( cb );
-					nC.add( cb );
-
-					normalAttribute.setXYZ( vA, nA.x, nA.y, nA.z );
-					normalAttribute.setXYZ( vB, nB.x, nB.y, nB.z );
-					normalAttribute.setXYZ( vC, nC.x, nC.y, nC.z );
-
-				}
-
-			} else {
-
-				// non-indexed elements (unconnected triangle soup)
-
-				for ( let i = 0, il = positionAttribute.count; i < il; i += 3 ) {
-
-					pA.fromBufferAttribute( positionAttribute, i + 0 );
-					pB.fromBufferAttribute( positionAttribute, i + 1 );
-					pC.fromBufferAttribute( positionAttribute, i + 2 );
-
-					cb.subVectors( pC, pB );
-					ab.subVectors( pA, pB );
-					cb.cross( ab );
-
-					normalAttribute.setXYZ( i + 0, cb.x, cb.y, cb.z );
-					normalAttribute.setXYZ( i + 1, cb.x, cb.y, cb.z );
-					normalAttribute.setXYZ( i + 2, cb.x, cb.y, cb.z );
-
-				}
-
-			}
-
-			this.normalizeNormals();
-
-			normalAttribute.needsUpdate = true;
-
-		}
-
-	}
-
-	merge() { // @deprecated, r144
-
-		console.error( 'THREE.BufferGeometry.merge() has been removed. Use THREE.BufferGeometryUtils.mergeGeometries() instead.' );
-		return this;
-
-	}
-
-	normalizeNormals() {
-
-		const normals = this.attributes.normal;
-
-		for ( let i = 0, il = normals.count; i < il; i ++ ) {
-
-			_vector$7.fromBufferAttribute( normals, i );
-
-			_vector$7.normalize();
-
-			normals.setXYZ( i, _vector$7.x, _vector$7.y, _vector$7.z );
-
-		}
-
-	}
-
-	toNonIndexed() {
-
-		function convertBufferAttribute( attribute, indices ) {
-
-			const array = attribute.array;
-			const itemSize = attribute.itemSize;
-			const normalized = attribute.normalized;
-
-			const array2 = new array.constructor( indices.length * itemSize );
-
-			let index = 0, index2 = 0;
-
-			for ( let i = 0, l = indices.length; i < l; i ++ ) {
-
-				if ( attribute.isInterleavedBufferAttribute ) {
-
-					index = indices[ i ] * attribute.data.stride + attribute.offset;
-
-				} else {
-
-					index = indices[ i ] * itemSize;
-
-				}
-
-				for ( let j = 0; j < itemSize; j ++ ) {
-
-					array2[ index2 ++ ] = array[ index ++ ];
-
-				}
-
-			}
-
-			return new BufferAttribute( array2, itemSize, normalized );
-
-		}
-
-		//
-
-		if ( this.index === null ) {
-
-			console.warn( 'THREE.BufferGeometry.toNonIndexed(): BufferGeometry is already non-indexed.' );
-			return this;
-
-		}
-
-		const geometry2 = new BufferGeometry();
-
-		const indices = this.index.array;
-		const attributes = this.attributes;
-
-		// attributes
-
-		for ( const name in attributes ) {
-
-			const attribute = attributes[ name ];
-
-			const newAttribute = convertBufferAttribute( attribute, indices );
-
-			geometry2.setAttribute( name, newAttribute );
-
-		}
-
-		// morph attributes
-
-		const morphAttributes = this.morphAttributes;
-
-		for ( const name in morphAttributes ) {
-
-			const morphArray = [];
-			const morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes
-
-			for ( let i = 0, il = morphAttribute.length; i < il; i ++ ) {
-
-				const attribute = morphAttribute[ i ];
-
-				const newAttribute = convertBufferAttribute( attribute, indices );
-
-				morphArray.push( newAttribute );
-
-			}
-
-			geometry2.morphAttributes[ name ] = morphArray;
-
-		}
-
-		geometry2.morphTargetsRelative = this.morphTargetsRelative;
-
-		// groups
-
-		const groups = this.groups;
-
-		for ( let i = 0, l = groups.length; i < l; i ++ ) {
-
-			const group = groups[ i ];
-			geometry2.addGroup( group.start, group.count, group.materialIndex );
-
-		}
-
-		return geometry2;
-
-	}
-
-	toJSON() {
-
-		const data = {
-			metadata: {
-				version: 4.5,
-				type: 'BufferGeometry',
-				generator: 'BufferGeometry.toJSON'
-			}
-		};
-
-		// standard BufferGeometry serialization
-
-		data.uuid = this.uuid;
-		data.type = this.type;
-		if ( this.name !== '' ) data.name = this.name;
-		if ( Object.keys( this.userData ).length > 0 ) data.userData = this.userData;
-
-		if ( this.parameters !== undefined ) {
-
-			const parameters = this.parameters;
-
-			for ( const key in parameters ) {
-
-				if ( parameters[ key ] !== undefined ) data[ key ] = parameters[ key ];
-
-			}
-
-			return data;
-
-		}
-
-		// for simplicity the code assumes attributes are not shared across geometries, see #15811
-
-		data.data = { attributes: {} };
-
-		const index = this.index;
-
-		if ( index !== null ) {
-
-			data.data.index = {
-				type: index.array.constructor.name,
-				array: Array.prototype.slice.call( index.array )
-			};
-
-		}
-
-		const attributes = this.attributes;
-
-		for ( const key in attributes ) {
-
-			const attribute = attributes[ key ];
-
-			data.data.attributes[ key ] = attribute.toJSON( data.data );
-
-		}
-
-		const morphAttributes = {};
-		let hasMorphAttributes = false;
-
-		for ( const key in this.morphAttributes ) {
-
-			const attributeArray = this.morphAttributes[ key ];
-
-			const array = [];
-
-			for ( let i = 0, il = attributeArray.length; i < il; i ++ ) {
-
-				const attribute = attributeArray[ i ];
-
-				array.push( attribute.toJSON( data.data ) );
-
-			}
-
-			if ( array.length > 0 ) {
-
-				morphAttributes[ key ] = array;
-
-				hasMorphAttributes = true;
-
-			}
-
-		}
-
-		if ( hasMorphAttributes ) {
-
-			data.data.morphAttributes = morphAttributes;
-			data.data.morphTargetsRelative = this.morphTargetsRelative;
-
-		}
-
-		const groups = this.groups;
-
-		if ( groups.length > 0 ) {
-
-			data.data.groups = JSON.parse( JSON.stringify( groups ) );
-
-		}
-
-		const boundingSphere = this.boundingSphere;
-
-		if ( boundingSphere !== null ) {
-
-			data.data.boundingSphere = {
-				center: boundingSphere.center.toArray(),
-				radius: boundingSphere.radius
-			};
-
-		}
-
-		return data;
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-	copy( source ) {
-
-		// reset
-
-		this.index = null;
-		this.attributes = {};
-		this.morphAttributes = {};
-		this.groups = [];
-		this.boundingBox = null;
-		this.boundingSphere = null;
-
-		// used for storing cloned, shared data
-
-		const data = {};
-
-		// name
-
-		this.name = source.name;
-
-		// index
-
-		const index = source.index;
-
-		if ( index !== null ) {
-
-			this.setIndex( index.clone( data ) );
-
-		}
-
-		// attributes
-
-		const attributes = source.attributes;
-
-		for ( const name in attributes ) {
-
-			const attribute = attributes[ name ];
-			this.setAttribute( name, attribute.clone( data ) );
-
-		}
-
-		// morph attributes
-
-		const morphAttributes = source.morphAttributes;
-
-		for ( const name in morphAttributes ) {
-
-			const array = [];
-			const morphAttribute = morphAttributes[ name ]; // morphAttribute: array of Float32BufferAttributes
-
-			for ( let i = 0, l = morphAttribute.length; i < l; i ++ ) {
-
-				array.push( morphAttribute[ i ].clone( data ) );
-
-			}
-
-			this.morphAttributes[ name ] = array;
-
-		}
-
-		this.morphTargetsRelative = source.morphTargetsRelative;
-
-		// groups
-
-		const groups = source.groups;
-
-		for ( let i = 0, l = groups.length; i < l; i ++ ) {
-
-			const group = groups[ i ];
-			this.addGroup( group.start, group.count, group.materialIndex );
-
-		}
-
-		// bounding box
-
-		const boundingBox = source.boundingBox;
-
-		if ( boundingBox !== null ) {
-
-			this.boundingBox = boundingBox.clone();
-
-		}
-
-		// bounding sphere
-
-		const boundingSphere = source.boundingSphere;
-
-		if ( boundingSphere !== null ) {
-
-			this.boundingSphere = boundingSphere.clone();
-
-		}
-
-		// draw range
-
-		this.drawRange.start = source.drawRange.start;
-		this.drawRange.count = source.drawRange.count;
-
-		// user data
-
-		this.userData = source.userData;
-
-		return this;
-
-	}
-
-	dispose() {
-
-		this.dispatchEvent( { type: 'dispose' } );
-
-	}
-
-}
-
-const _inverseMatrix$2 = /*@__PURE__*/ new Matrix4();
-const _ray$2 = /*@__PURE__*/ new Ray();
-const _sphere$4 = /*@__PURE__*/ new Sphere();
-const _sphereHitAt = /*@__PURE__*/ new Vector3();
-
-const _vA$1 = /*@__PURE__*/ new Vector3();
-const _vB$1 = /*@__PURE__*/ new Vector3();
-const _vC$1 = /*@__PURE__*/ new Vector3();
-
-const _tempA = /*@__PURE__*/ new Vector3();
-const _morphA = /*@__PURE__*/ new Vector3();
-
-const _uvA$1 = /*@__PURE__*/ new Vector2();
-const _uvB$1 = /*@__PURE__*/ new Vector2();
-const _uvC$1 = /*@__PURE__*/ new Vector2();
-
-const _normalA = /*@__PURE__*/ new Vector3();
-const _normalB = /*@__PURE__*/ new Vector3();
-const _normalC = /*@__PURE__*/ new Vector3();
-
-const _intersectionPoint = /*@__PURE__*/ new Vector3();
-const _intersectionPointWorld = /*@__PURE__*/ new Vector3();
-
-class Mesh extends Object3D {
-
-	constructor( geometry = new BufferGeometry(), material = new MeshBasicMaterial() ) {
-
-		super();
-
-		this.isMesh = true;
-
-		this.type = 'Mesh';
-
-		this.geometry = geometry;
-		this.material = material;
-
-		this.updateMorphTargets();
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		if ( source.morphTargetInfluences !== undefined ) {
-
-			this.morphTargetInfluences = source.morphTargetInfluences.slice();
-
-		}
-
-		if ( source.morphTargetDictionary !== undefined ) {
-
-			this.morphTargetDictionary = Object.assign( {}, source.morphTargetDictionary );
-
-		}
-
-		this.material = source.material;
-		this.geometry = source.geometry;
-
-		return this;
-
-	}
-
-	updateMorphTargets() {
-
-		const geometry = this.geometry;
-
-		const morphAttributes = geometry.morphAttributes;
-		const keys = Object.keys( morphAttributes );
-
-		if ( keys.length > 0 ) {
-
-			const morphAttribute = morphAttributes[ keys[ 0 ] ];
-
-			if ( morphAttribute !== undefined ) {
-
-				this.morphTargetInfluences = [];
-				this.morphTargetDictionary = {};
-
-				for ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {
-
-					const name = morphAttribute[ m ].name || String( m );
-
-					this.morphTargetInfluences.push( 0 );
-					this.morphTargetDictionary[ name ] = m;
-
-				}
-
-			}
-
-		}
-
-	}
-
-	getVertexPosition( index, target ) {
-
-		const geometry = this.geometry;
-		const position = geometry.attributes.position;
-		const morphPosition = geometry.morphAttributes.position;
-		const morphTargetsRelative = geometry.morphTargetsRelative;
-
-		target.fromBufferAttribute( position, index );
-
-		const morphInfluences = this.morphTargetInfluences;
-
-		if ( morphPosition && morphInfluences ) {
-
-			_morphA.set( 0, 0, 0 );
-
-			for ( let i = 0, il = morphPosition.length; i < il; i ++ ) {
-
-				const influence = morphInfluences[ i ];
-				const morphAttribute = morphPosition[ i ];
-
-				if ( influence === 0 ) continue;
-
-				_tempA.fromBufferAttribute( morphAttribute, index );
-
-				if ( morphTargetsRelative ) {
-
-					_morphA.addScaledVector( _tempA, influence );
-
-				} else {
-
-					_morphA.addScaledVector( _tempA.sub( target ), influence );
-
-				}
-
-			}
-
-			target.add( _morphA );
-
-		}
-
-		return target;
-
-	}
-
-	raycast( raycaster, intersects ) {
-
-		const geometry = this.geometry;
-		const material = this.material;
-		const matrixWorld = this.matrixWorld;
-
-		if ( material === undefined ) return;
-
-		// Checking boundingSphere distance to ray
-
-		if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
-
-		_sphere$4.copy( geometry.boundingSphere );
-		_sphere$4.applyMatrix4( matrixWorld );
-
-		_ray$2.copy( raycaster.ray ).recast( raycaster.near );
-
-		if ( _sphere$4.containsPoint( _ray$2.origin ) === false ) {
-
-			if ( _ray$2.intersectSphere( _sphere$4, _sphereHitAt ) === null ) return;
-
-			if ( _ray$2.origin.distanceToSquared( _sphereHitAt ) > ( raycaster.far - raycaster.near ) ** 2 ) return;
-
-		}
-
-		//
-
-		_inverseMatrix$2.copy( matrixWorld ).invert();
-		_ray$2.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$2 );
-
-		// Check boundingBox before continuing
-
-		if ( geometry.boundingBox !== null ) {
-
-			if ( _ray$2.intersectsBox( geometry.boundingBox ) === false ) return;
-
-		}
-
-		this._computeIntersections( raycaster, intersects );
-
-	}
-
-	_computeIntersections( raycaster, intersects ) {
-
-		let intersection;
-
-		const geometry = this.geometry;
-		const material = this.material;
-
-		const index = geometry.index;
-		const position = geometry.attributes.position;
-		const uv = geometry.attributes.uv;
-		const uv1 = geometry.attributes.uv1;
-		const normal = geometry.attributes.normal;
-		const groups = geometry.groups;
-		const drawRange = geometry.drawRange;
-
-		if ( index !== null ) {
-
-			// indexed buffer geometry
-
-			if ( Array.isArray( material ) ) {
-
-				for ( let i = 0, il = groups.length; i < il; i ++ ) {
-
-					const group = groups[ i ];
-					const groupMaterial = material[ group.materialIndex ];
-
-					const start = Math.max( group.start, drawRange.start );
-					const end = Math.min( index.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );
-
-					for ( let j = start, jl = end; j < jl; j += 3 ) {
-
-						const a = index.getX( j );
-						const b = index.getX( j + 1 );
-						const c = index.getX( j + 2 );
-
-						intersection = checkGeometryIntersection( this, groupMaterial, raycaster, _ray$2, uv, uv1, normal, a, b, c );
-
-						if ( intersection ) {
-
-							intersection.faceIndex = Math.floor( j / 3 ); // triangle number in indexed buffer semantics
-							intersection.face.materialIndex = group.materialIndex;
-							intersects.push( intersection );
-
-						}
-
-					}
-
-				}
-
-			} else {
-
-				const start = Math.max( 0, drawRange.start );
-				const end = Math.min( index.count, ( drawRange.start + drawRange.count ) );
-
-				for ( let i = start, il = end; i < il; i += 3 ) {
-
-					const a = index.getX( i );
-					const b = index.getX( i + 1 );
-					const c = index.getX( i + 2 );
-
-					intersection = checkGeometryIntersection( this, material, raycaster, _ray$2, uv, uv1, normal, a, b, c );
-
-					if ( intersection ) {
-
-						intersection.faceIndex = Math.floor( i / 3 ); // triangle number in indexed buffer semantics
-						intersects.push( intersection );
-
-					}
-
-				}
-
-			}
-
-		} else if ( position !== undefined ) {
-
-			// non-indexed buffer geometry
-
-			if ( Array.isArray( material ) ) {
-
-				for ( let i = 0, il = groups.length; i < il; i ++ ) {
-
-					const group = groups[ i ];
-					const groupMaterial = material[ group.materialIndex ];
-
-					const start = Math.max( group.start, drawRange.start );
-					const end = Math.min( position.count, Math.min( ( group.start + group.count ), ( drawRange.start + drawRange.count ) ) );
-
-					for ( let j = start, jl = end; j < jl; j += 3 ) {
-
-						const a = j;
-						const b = j + 1;
-						const c = j + 2;
-
-						intersection = checkGeometryIntersection( this, groupMaterial, raycaster, _ray$2, uv, uv1, normal, a, b, c );
-
-						if ( intersection ) {
-
-							intersection.faceIndex = Math.floor( j / 3 ); // triangle number in non-indexed buffer semantics
-							intersection.face.materialIndex = group.materialIndex;
-							intersects.push( intersection );
-
-						}
-
-					}
-
-				}
-
-			} else {
-
-				const start = Math.max( 0, drawRange.start );
-				const end = Math.min( position.count, ( drawRange.start + drawRange.count ) );
-
-				for ( let i = start, il = end; i < il; i += 3 ) {
-
-					const a = i;
-					const b = i + 1;
-					const c = i + 2;
-
-					intersection = checkGeometryIntersection( this, material, raycaster, _ray$2, uv, uv1, normal, a, b, c );
-
-					if ( intersection ) {
-
-						intersection.faceIndex = Math.floor( i / 3 ); // triangle number in non-indexed buffer semantics
-						intersects.push( intersection );
-
-					}
-
-				}
-
-			}
-
-		}
-
-	}
-
-}
-
-function checkIntersection( object, material, raycaster, ray, pA, pB, pC, point ) {
-
-	let intersect;
-
-	if ( material.side === BackSide ) {
-
-		intersect = ray.intersectTriangle( pC, pB, pA, true, point );
-
-	} else {
-
-		intersect = ray.intersectTriangle( pA, pB, pC, ( material.side === FrontSide ), point );
-
-	}
-
-	if ( intersect === null ) return null;
-
-	_intersectionPointWorld.copy( point );
-	_intersectionPointWorld.applyMatrix4( object.matrixWorld );
-
-	const distance = raycaster.ray.origin.distanceTo( _intersectionPointWorld );
-
-	if ( distance < raycaster.near || distance > raycaster.far ) return null;
-
-	return {
-		distance: distance,
-		point: _intersectionPointWorld.clone(),
-		object: object
-	};
-
-}
-
-function checkGeometryIntersection( object, material, raycaster, ray, uv, uv1, normal, a, b, c ) {
-
-	object.getVertexPosition( a, _vA$1 );
-	object.getVertexPosition( b, _vB$1 );
-	object.getVertexPosition( c, _vC$1 );
-
-	const intersection = checkIntersection( object, material, raycaster, ray, _vA$1, _vB$1, _vC$1, _intersectionPoint );
-
-	if ( intersection ) {
-
-		if ( uv ) {
-
-			_uvA$1.fromBufferAttribute( uv, a );
-			_uvB$1.fromBufferAttribute( uv, b );
-			_uvC$1.fromBufferAttribute( uv, c );
-
-			intersection.uv = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );
-
-		}
-
-		if ( uv1 ) {
-
-			_uvA$1.fromBufferAttribute( uv1, a );
-			_uvB$1.fromBufferAttribute( uv1, b );
-			_uvC$1.fromBufferAttribute( uv1, c );
-
-			intersection.uv1 = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _uvA$1, _uvB$1, _uvC$1, new Vector2() );
-			intersection.uv2 = intersection.uv1; // Backwards compatibility
-
-		}
-
-		if ( normal ) {
-
-			_normalA.fromBufferAttribute( normal, a );
-			_normalB.fromBufferAttribute( normal, b );
-			_normalC.fromBufferAttribute( normal, c );
-
-			intersection.normal = Triangle.getInterpolation( _intersectionPoint, _vA$1, _vB$1, _vC$1, _normalA, _normalB, _normalC, new Vector3() );
-
-			if ( intersection.normal.dot( ray.direction ) > 0 ) {
-
-				intersection.normal.multiplyScalar( - 1 );
-
-			}
-
-		}
-
-		const face = {
-			a: a,
-			b: b,
-			c: c,
-			normal: new Vector3(),
-			materialIndex: 0
-		};
-
-		Triangle.getNormal( _vA$1, _vB$1, _vC$1, face.normal );
-
-		intersection.face = face;
-
-	}
-
-	return intersection;
-
-}
-
-class BoxGeometry extends BufferGeometry {
-
-	constructor( width = 1, height = 1, depth = 1, widthSegments = 1, heightSegments = 1, depthSegments = 1 ) {
-
-		super();
-
-		this.type = 'BoxGeometry';
-
-		this.parameters = {
-			width: width,
-			height: height,
-			depth: depth,
-			widthSegments: widthSegments,
-			heightSegments: heightSegments,
-			depthSegments: depthSegments
-		};
-
-		const scope = this;
-
-		// segments
-
-		widthSegments = Math.floor( widthSegments );
-		heightSegments = Math.floor( heightSegments );
-		depthSegments = Math.floor( depthSegments );
-
-		// buffers
-
-		const indices = [];
-		const vertices = [];
-		const normals = [];
-		const uvs = [];
-
-		// helper variables
-
-		let numberOfVertices = 0;
-		let groupStart = 0;
-
-		// build each side of the box geometry
-
-		buildPlane( 'z', 'y', 'x', - 1, - 1, depth, height, width, depthSegments, heightSegments, 0 ); // px
-		buildPlane( 'z', 'y', 'x', 1, - 1, depth, height, - width, depthSegments, heightSegments, 1 ); // nx
-		buildPlane( 'x', 'z', 'y', 1, 1, width, depth, height, widthSegments, depthSegments, 2 ); // py
-		buildPlane( 'x', 'z', 'y', 1, - 1, width, depth, - height, widthSegments, depthSegments, 3 ); // ny
-		buildPlane( 'x', 'y', 'z', 1, - 1, width, height, depth, widthSegments, heightSegments, 4 ); // pz
-		buildPlane( 'x', 'y', 'z', - 1, - 1, width, height, - depth, widthSegments, heightSegments, 5 ); // nz
-
-		// build geometry
-
-		this.setIndex( indices );
-		this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
-
-		function buildPlane( u, v, w, udir, vdir, width, height, depth, gridX, gridY, materialIndex ) {
-
-			const segmentWidth = width / gridX;
-			const segmentHeight = height / gridY;
-
-			const widthHalf = width / 2;
-			const heightHalf = height / 2;
-			const depthHalf = depth / 2;
-
-			const gridX1 = gridX + 1;
-			const gridY1 = gridY + 1;
-
-			let vertexCounter = 0;
-			let groupCount = 0;
-
-			const vector = new Vector3();
-
-			// generate vertices, normals and uvs
-
-			for ( let iy = 0; iy < gridY1; iy ++ ) {
-
-				const y = iy * segmentHeight - heightHalf;
-
-				for ( let ix = 0; ix < gridX1; ix ++ ) {
-
-					const x = ix * segmentWidth - widthHalf;
-
-					// set values to correct vector component
-
-					vector[ u ] = x * udir;
-					vector[ v ] = y * vdir;
-					vector[ w ] = depthHalf;
-
-					// now apply vector to vertex buffer
-
-					vertices.push( vector.x, vector.y, vector.z );
-
-					// set values to correct vector component
-
-					vector[ u ] = 0;
-					vector[ v ] = 0;
-					vector[ w ] = depth > 0 ? 1 : - 1;
-
-					// now apply vector to normal buffer
-
-					normals.push( vector.x, vector.y, vector.z );
-
-					// uvs
-
-					uvs.push( ix / gridX );
-					uvs.push( 1 - ( iy / gridY ) );
-
-					// counters
-
-					vertexCounter += 1;
-
-				}
-
-			}
-
-			// indices
-
-			// 1. you need three indices to draw a single face
-			// 2. a single segment consists of two faces
-			// 3. so we need to generate six (2*3) indices per segment
-
-			for ( let iy = 0; iy < gridY; iy ++ ) {
-
-				for ( let ix = 0; ix < gridX; ix ++ ) {
-
-					const a = numberOfVertices + ix + gridX1 * iy;
-					const b = numberOfVertices + ix + gridX1 * ( iy + 1 );
-					const c = numberOfVertices + ( ix + 1 ) + gridX1 * ( iy + 1 );
-					const d = numberOfVertices + ( ix + 1 ) + gridX1 * iy;
-
-					// faces
-
-					indices.push( a, b, d );
-					indices.push( b, c, d );
-
-					// increase counter
-
-					groupCount += 6;
-
-				}
-
-			}
-
-			// add a group to the geometry. this will ensure multi material support
-
-			scope.addGroup( groupStart, groupCount, materialIndex );
-
-			// calculate new start value for groups
-
-			groupStart += groupCount;
-
-			// update total number of vertices
-
-			numberOfVertices += vertexCounter;
-
-		}
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-	static fromJSON( data ) {
-
-		return new BoxGeometry( data.width, data.height, data.depth, data.widthSegments, data.heightSegments, data.depthSegments );
-
-	}
-
-}
-
-/**
- * Uniform Utilities
- */
-
-function cloneUniforms( src ) {
-
-	const dst = {};
-
-	for ( const u in src ) {
-
-		dst[ u ] = {};
-
-		for ( const p in src[ u ] ) {
-
-			const property = src[ u ][ p ];
-
-			if ( property && ( property.isColor ||
-				property.isMatrix3 || property.isMatrix4 ||
-				property.isVector2 || property.isVector3 || property.isVector4 ||
-				property.isTexture || property.isQuaternion ) ) {
-
-				if ( property.isRenderTargetTexture ) {
-
-					console.warn( 'UniformsUtils: Textures of render targets cannot be cloned via cloneUniforms() or mergeUniforms().' );
-					dst[ u ][ p ] = null;
-
-				} else {
-
-					dst[ u ][ p ] = property.clone();
-
-				}
-
-			} else if ( Array.isArray( property ) ) {
-
-				dst[ u ][ p ] = property.slice();
-
-			} else {
-
-				dst[ u ][ p ] = property;
-
-			}
-
-		}
-
-	}
-
-	return dst;
-
-}
-
-function mergeUniforms( uniforms ) {
-
-	const merged = {};
-
-	for ( let u = 0; u < uniforms.length; u ++ ) {
-
-		const tmp = cloneUniforms( uniforms[ u ] );
-
-		for ( const p in tmp ) {
-
-			merged[ p ] = tmp[ p ];
-
-		}
-
-	}
-
-	return merged;
-
-}
-
-function cloneUniformsGroups( src ) {
-
-	const dst = [];
-
-	for ( let u = 0; u < src.length; u ++ ) {
-
-		dst.push( src[ u ].clone() );
-
-	}
-
-	return dst;
-
-}
-
-function getUnlitUniformColorSpace( renderer ) {
-
-	if ( renderer.getRenderTarget() === null ) {
-
-		// https://github.com/mrdoob/three.js/pull/23937#issuecomment-1111067398
-		return renderer.outputColorSpace;
-
-	}
-
-	return LinearSRGBColorSpace;
-
-}
-
-// Legacy
-
-const UniformsUtils = { clone: cloneUniforms, merge: mergeUniforms };
-
-var default_vertex = "void main() {\n\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}";
-
-var default_fragment = "void main() {\n\tgl_FragColor = vec4( 1.0, 0.0, 0.0, 1.0 );\n}";
-
-class ShaderMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isShaderMaterial = true;
-
-		this.type = 'ShaderMaterial';
-
-		this.defines = {};
-		this.uniforms = {};
-		this.uniformsGroups = [];
-
-		this.vertexShader = default_vertex;
-		this.fragmentShader = default_fragment;
-
-		this.linewidth = 1;
-
-		this.wireframe = false;
-		this.wireframeLinewidth = 1;
-
-		this.fog = false; // set to use scene fog
-		this.lights = false; // set to use scene lights
-		this.clipping = false; // set to use user-defined clipping planes
-
-		this.forceSinglePass = true;
-
-		this.extensions = {
-			derivatives: false, // set to use derivatives
-			fragDepth: false, // set to use fragment depth values
-			drawBuffers: false, // set to use draw buffers
-			shaderTextureLOD: false // set to use shader texture LOD
-		};
-
-		// When rendered geometry doesn't include these attributes but the material does,
-		// use these default values in WebGL. This avoids errors when buffer data is missing.
-		this.defaultAttributeValues = {
-			'color': [ 1, 1, 1 ],
-			'uv': [ 0, 0 ],
-			'uv1': [ 0, 0 ]
-		};
-
-		this.index0AttributeName = undefined;
-		this.uniformsNeedUpdate = false;
-
-		this.glslVersion = null;
-
-		if ( parameters !== undefined ) {
-
-			this.setValues( parameters );
-
-		}
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.fragmentShader = source.fragmentShader;
-		this.vertexShader = source.vertexShader;
-
-		this.uniforms = cloneUniforms( source.uniforms );
-		this.uniformsGroups = cloneUniformsGroups( source.uniformsGroups );
-
-		this.defines = Object.assign( {}, source.defines );
-
-		this.wireframe = source.wireframe;
-		this.wireframeLinewidth = source.wireframeLinewidth;
-
-		this.fog = source.fog;
-		this.lights = source.lights;
-		this.clipping = source.clipping;
-
-		this.extensions = Object.assign( {}, source.extensions );
-
-		this.glslVersion = source.glslVersion;
-
-		return this;
-
-	}
-
-	toJSON( meta ) {
-
-		const data = super.toJSON( meta );
-
-		data.glslVersion = this.glslVersion;
-		data.uniforms = {};
-
-		for ( const name in this.uniforms ) {
-
-			const uniform = this.uniforms[ name ];
-			const value = uniform.value;
-
-			if ( value && value.isTexture ) {
-
-				data.uniforms[ name ] = {
-					type: 't',
-					value: value.toJSON( meta ).uuid
-				};
-
-			} else if ( value && value.isColor ) {
-
-				data.uniforms[ name ] = {
-					type: 'c',
-					value: value.getHex()
-				};
-
-			} else if ( value && value.isVector2 ) {
-
-				data.uniforms[ name ] = {
-					type: 'v2',
-					value: value.toArray()
-				};
-
-			} else if ( value && value.isVector3 ) {
-
-				data.uniforms[ name ] = {
-					type: 'v3',
-					value: value.toArray()
-				};
-
-			} else if ( value && value.isVector4 ) {
-
-				data.uniforms[ name ] = {
-					type: 'v4',
-					value: value.toArray()
-				};
-
-			} else if ( value && value.isMatrix3 ) {
-
-				data.uniforms[ name ] = {
-					type: 'm3',
-					value: value.toArray()
-				};
-
-			} else if ( value && value.isMatrix4 ) {
-
-				data.uniforms[ name ] = {
-					type: 'm4',
-					value: value.toArray()
-				};
-
-			} else {
-
-				data.uniforms[ name ] = {
-					value: value
-				};
-
-				// note: the array variants v2v, v3v, v4v, m4v and tv are not supported so far
-
-			}
-
-		}
-
-		if ( Object.keys( this.defines ).length > 0 ) data.defines = this.defines;
-
-		data.vertexShader = this.vertexShader;
-		data.fragmentShader = this.fragmentShader;
-
-		data.lights = this.lights;
-		data.clipping = this.clipping;
-
-		const extensions = {};
-
-		for ( const key in this.extensions ) {
-
-			if ( this.extensions[ key ] === true ) extensions[ key ] = true;
-
-		}
-
-		if ( Object.keys( extensions ).length > 0 ) data.extensions = extensions;
-
-		return data;
-
-	}
-
-}
-
-class Camera extends Object3D {
-
-	constructor() {
-
-		super();
-
-		this.isCamera = true;
-
-		this.type = 'Camera';
-
-		this.matrixWorldInverse = new Matrix4();
-
-		this.projectionMatrix = new Matrix4();
-		this.projectionMatrixInverse = new Matrix4();
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		this.matrixWorldInverse.copy( source.matrixWorldInverse );
-
-		this.projectionMatrix.copy( source.projectionMatrix );
-		this.projectionMatrixInverse.copy( source.projectionMatrixInverse );
-
-		return this;
-
-	}
-
-	getWorldDirection( target ) {
-
-		this.updateWorldMatrix( true, false );
-
-		const e = this.matrixWorld.elements;
-
-		return target.set( - e[ 8 ], - e[ 9 ], - e[ 10 ] ).normalize();
-
-	}
-
-	updateMatrixWorld( force ) {
-
-		super.updateMatrixWorld( force );
-
-		this.matrixWorldInverse.copy( this.matrixWorld ).invert();
-
-	}
-
-	updateWorldMatrix( updateParents, updateChildren ) {
-
-		super.updateWorldMatrix( updateParents, updateChildren );
-
-		this.matrixWorldInverse.copy( this.matrixWorld ).invert();
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-}
-
-class PerspectiveCamera extends Camera {
-
-	constructor( fov = 50, aspect = 1, near = 0.1, far = 2000 ) {
-
-		super();
-
-		this.isPerspectiveCamera = true;
-
-		this.type = 'PerspectiveCamera';
-
-		this.fov = fov;
-		this.zoom = 1;
-
-		this.near = near;
-		this.far = far;
-		this.focus = 10;
-
-		this.aspect = aspect;
-		this.view = null;
-
-		this.filmGauge = 35;	// width of the film (default in millimeters)
-		this.filmOffset = 0;	// horizontal film offset (same unit as gauge)
-
-		this.updateProjectionMatrix();
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		this.fov = source.fov;
-		this.zoom = source.zoom;
-
-		this.near = source.near;
-		this.far = source.far;
-		this.focus = source.focus;
-
-		this.aspect = source.aspect;
-		this.view = source.view === null ? null : Object.assign( {}, source.view );
-
-		this.filmGauge = source.filmGauge;
-		this.filmOffset = source.filmOffset;
-
-		return this;
-
-	}
-
-	/**
-	 * Sets the FOV by focal length in respect to the current .filmGauge.
-	 *
-	 * The default film gauge is 35, so that the focal length can be specified for
-	 * a 35mm (full frame) camera.
-	 *
-	 * Values for focal length and film gauge must have the same unit.
-	 */
-	setFocalLength( focalLength ) {
-
-		/** see {@link http://www.bobatkins.com/photography/technical/field_of_view.html} */
-		const vExtentSlope = 0.5 * this.getFilmHeight() / focalLength;
-
-		this.fov = RAD2DEG * 2 * Math.atan( vExtentSlope );
-		this.updateProjectionMatrix();
-
-	}
-
-	/**
-	 * Calculates the focal length from the current .fov and .filmGauge.
-	 */
-	getFocalLength() {
-
-		const vExtentSlope = Math.tan( DEG2RAD * 0.5 * this.fov );
-
-		return 0.5 * this.getFilmHeight() / vExtentSlope;
-
-	}
-
-	getEffectiveFOV() {
-
-		return RAD2DEG * 2 * Math.atan(
-			Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom );
-
-	}
-
-	getFilmWidth() {
-
-		// film not completely covered in portrait format (aspect < 1)
-		return this.filmGauge * Math.min( this.aspect, 1 );
-
-	}
-
-	getFilmHeight() {
-
-		// film not completely covered in landscape format (aspect > 1)
-		return this.filmGauge / Math.max( this.aspect, 1 );
-
-	}
-
-	/**
-	 * Sets an offset in a larger frustum. This is useful for multi-window or
-	 * multi-monitor/multi-machine setups.
-	 *
-	 * For example, if you have 3x2 monitors and each monitor is 1920x1080 and
-	 * the monitors are in grid like this
-	 *
-	 *   +---+---+---+
-	 *   | A | B | C |
-	 *   +---+---+---+
-	 *   | D | E | F |
-	 *   +---+---+---+
-	 *
-	 * then for each monitor you would call it like this
-	 *
-	 *   const w = 1920;
-	 *   const h = 1080;
-	 *   const fullWidth = w * 3;
-	 *   const fullHeight = h * 2;
-	 *
-	 *   --A--
-	 *   camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );
-	 *   --B--
-	 *   camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );
-	 *   --C--
-	 *   camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );
-	 *   --D--
-	 *   camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );
-	 *   --E--
-	 *   camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );
-	 *   --F--
-	 *   camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );
-	 *
-	 *   Note there is no reason monitors have to be the same size or in a grid.
-	 */
-	setViewOffset( fullWidth, fullHeight, x, y, width, height ) {
-
-		this.aspect = fullWidth / fullHeight;
-
-		if ( this.view === null ) {
-
-			this.view = {
-				enabled: true,
-				fullWidth: 1,
-				fullHeight: 1,
-				offsetX: 0,
-				offsetY: 0,
-				width: 1,
-				height: 1
-			};
-
-		}
-
-		this.view.enabled = true;
-		this.view.fullWidth = fullWidth;
-		this.view.fullHeight = fullHeight;
-		this.view.offsetX = x;
-		this.view.offsetY = y;
-		this.view.width = width;
-		this.view.height = height;
-
-		this.updateProjectionMatrix();
-
-	}
-
-	clearViewOffset() {
-
-		if ( this.view !== null ) {
-
-			this.view.enabled = false;
-
-		}
-
-		this.updateProjectionMatrix();
-
-	}
-
-	updateProjectionMatrix() {
-
-		const near = this.near;
-		let top = near * Math.tan( DEG2RAD * 0.5 * this.fov ) / this.zoom;
-		let height = 2 * top;
-		let width = this.aspect * height;
-		let left = - 0.5 * width;
-		const view = this.view;
-
-		if ( this.view !== null && this.view.enabled ) {
-
-			const fullWidth = view.fullWidth,
-				fullHeight = view.fullHeight;
-
-			left += view.offsetX * width / fullWidth;
-			top -= view.offsetY * height / fullHeight;
-			width *= view.width / fullWidth;
-			height *= view.height / fullHeight;
-
-		}
-
-		const skew = this.filmOffset;
-		if ( skew !== 0 ) left += near * skew / this.getFilmWidth();
-
-		this.projectionMatrix.makePerspective( left, left + width, top, top - height, near, this.far );
-
-		this.projectionMatrixInverse.copy( this.projectionMatrix ).invert();
-
-	}
-
-	toJSON( meta ) {
-
-		const data = super.toJSON( meta );
-
-		data.object.fov = this.fov;
-		data.object.zoom = this.zoom;
-
-		data.object.near = this.near;
-		data.object.far = this.far;
-		data.object.focus = this.focus;
-
-		data.object.aspect = this.aspect;
-
-		if ( this.view !== null ) data.object.view = Object.assign( {}, this.view );
-
-		data.object.filmGauge = this.filmGauge;
-		data.object.filmOffset = this.filmOffset;
-
-		return data;
-
-	}
-
-}
-
-const fov = - 90; // negative fov is not an error
-const aspect = 1;
-
-class CubeCamera extends Object3D {
-
-	constructor( near, far, renderTarget ) {
-
-		super();
-
-		this.type = 'CubeCamera';
-
-		this.renderTarget = renderTarget;
-
-		const cameraPX = new PerspectiveCamera( fov, aspect, near, far );
-		cameraPX.layers = this.layers;
-		cameraPX.up.set( 0, 1, 0 );
-		cameraPX.lookAt( 1, 0, 0 );
-		this.add( cameraPX );
-
-		const cameraNX = new PerspectiveCamera( fov, aspect, near, far );
-		cameraNX.layers = this.layers;
-		cameraNX.up.set( 0, 1, 0 );
-		cameraNX.lookAt( - 1, 0, 0 );
-		this.add( cameraNX );
-
-		const cameraPY = new PerspectiveCamera( fov, aspect, near, far );
-		cameraPY.layers = this.layers;
-		cameraPY.up.set( 0, 0, - 1 );
-		cameraPY.lookAt( 0, 1, 0 );
-		this.add( cameraPY );
-
-		const cameraNY = new PerspectiveCamera( fov, aspect, near, far );
-		cameraNY.layers = this.layers;
-		cameraNY.up.set( 0, 0, 1 );
-		cameraNY.lookAt( 0, - 1, 0 );
-		this.add( cameraNY );
-
-		const cameraPZ = new PerspectiveCamera( fov, aspect, near, far );
-		cameraPZ.layers = this.layers;
-		cameraPZ.up.set( 0, 1, 0 );
-		cameraPZ.lookAt( 0, 0, 1 );
-		this.add( cameraPZ );
-
-		const cameraNZ = new PerspectiveCamera( fov, aspect, near, far );
-		cameraNZ.layers = this.layers;
-		cameraNZ.up.set( 0, 1, 0 );
-		cameraNZ.lookAt( 0, 0, - 1 );
-		this.add( cameraNZ );
-
-	}
-
-	update( renderer, scene ) {
-
-		if ( this.parent === null ) this.updateMatrixWorld();
-
-		const renderTarget = this.renderTarget;
-
-		const [ cameraPX, cameraNX, cameraPY, cameraNY, cameraPZ, cameraNZ ] = this.children;
-
-		const currentRenderTarget = renderer.getRenderTarget();
-
-		const currentToneMapping = renderer.toneMapping;
-		const currentXrEnabled = renderer.xr.enabled;
-
-		renderer.toneMapping = NoToneMapping;
-		renderer.xr.enabled = false;
-
-		const generateMipmaps = renderTarget.texture.generateMipmaps;
-
-		renderTarget.texture.generateMipmaps = false;
-
-		renderer.setRenderTarget( renderTarget, 0 );
-		renderer.render( scene, cameraPX );
-
-		renderer.setRenderTarget( renderTarget, 1 );
-		renderer.render( scene, cameraNX );
-
-		renderer.setRenderTarget( renderTarget, 2 );
-		renderer.render( scene, cameraPY );
-
-		renderer.setRenderTarget( renderTarget, 3 );
-		renderer.render( scene, cameraNY );
-
-		renderer.setRenderTarget( renderTarget, 4 );
-		renderer.render( scene, cameraPZ );
-
-		renderTarget.texture.generateMipmaps = generateMipmaps;
-
-		renderer.setRenderTarget( renderTarget, 5 );
-		renderer.render( scene, cameraNZ );
-
-		renderer.setRenderTarget( currentRenderTarget );
-
-		renderer.toneMapping = currentToneMapping;
-		renderer.xr.enabled = currentXrEnabled;
-
-		renderTarget.texture.needsPMREMUpdate = true;
-
-	}
-
-}
-
-class CubeTexture extends Texture {
-
-	constructor( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace ) {
-
-		images = images !== undefined ? images : [];
-		mapping = mapping !== undefined ? mapping : CubeReflectionMapping;
-
-		super( images, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );
-
-		this.isCubeTexture = true;
-
-		this.flipY = false;
-
-	}
-
-	get images() {
-
-		return this.image;
-
-	}
-
-	set images( value ) {
-
-		this.image = value;
-
-	}
-
-}
-
-class WebGLCubeRenderTarget extends WebGLRenderTarget {
-
-	constructor( size = 1, options = {} ) {
-
-		super( size, size, options );
-
-		this.isWebGLCubeRenderTarget = true;
-
-		const image = { width: size, height: size, depth: 1 };
-		const images = [ image, image, image, image, image, image ];
-
-		if ( options.encoding !== undefined ) {
-
-			// @deprecated, r152
-			warnOnce( 'THREE.WebGLCubeRenderTarget: option.encoding has been replaced by option.colorSpace.' );
-			options.colorSpace = options.encoding === sRGBEncoding ? SRGBColorSpace : NoColorSpace;
-
-		}
-
-		this.texture = new CubeTexture( images, options.mapping, options.wrapS, options.wrapT, options.magFilter, options.minFilter, options.format, options.type, options.anisotropy, options.colorSpace );
-
-		// By convention -- likely based on the RenderMan spec from the 1990's -- cube maps are specified by WebGL (and three.js)
-		// in a coordinate system in which positive-x is to the right when looking up the positive-z axis -- in other words,
-		// in a left-handed coordinate system. By continuing this convention, preexisting cube maps continued to render correctly.
-
-		// three.js uses a right-handed coordinate system. So environment maps used in three.js appear to have px and nx swapped
-		// and the flag isRenderTargetTexture controls this conversion. The flip is not required when using WebGLCubeRenderTarget.texture
-		// as a cube texture (this is detected when isRenderTargetTexture is set to true for cube textures).
-
-		this.texture.isRenderTargetTexture = true;
-
-		this.texture.generateMipmaps = options.generateMipmaps !== undefined ? options.generateMipmaps : false;
-		this.texture.minFilter = options.minFilter !== undefined ? options.minFilter : LinearFilter;
-
-	}
-
-	fromEquirectangularTexture( renderer, texture ) {
-
-		this.texture.type = texture.type;
-		this.texture.colorSpace = texture.colorSpace;
-
-		this.texture.generateMipmaps = texture.generateMipmaps;
-		this.texture.minFilter = texture.minFilter;
-		this.texture.magFilter = texture.magFilter;
-
-		const shader = {
-
-			uniforms: {
-				tEquirect: { value: null },
-			},
-
-			vertexShader: /* glsl */`
-
-				varying vec3 vWorldDirection;
-
-				vec3 transformDirection( in vec3 dir, in mat4 matrix ) {
-
-					return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );
-
-				}
-
-				void main() {
-
-					vWorldDirection = transformDirection( position, modelMatrix );
-
-					#include <begin_vertex>
-					#include <project_vertex>
-
-				}
-			`,
-
-			fragmentShader: /* glsl */`
-
-				uniform sampler2D tEquirect;
-
-				varying vec3 vWorldDirection;
-
-				#include <common>
-
-				void main() {
-
-					vec3 direction = normalize( vWorldDirection );
-
-					vec2 sampleUV = equirectUv( direction );
-
-					gl_FragColor = texture2D( tEquirect, sampleUV );
-
-				}
-			`
-		};
-
-		const geometry = new BoxGeometry( 5, 5, 5 );
-
-		const material = new ShaderMaterial( {
-
-			name: 'CubemapFromEquirect',
-
-			uniforms: cloneUniforms( shader.uniforms ),
-			vertexShader: shader.vertexShader,
-			fragmentShader: shader.fragmentShader,
-			side: BackSide,
-			blending: NoBlending
-
-		} );
-
-		material.uniforms.tEquirect.value = texture;
-
-		const mesh = new Mesh( geometry, material );
-
-		const currentMinFilter = texture.minFilter;
-
-		// Avoid blurred poles
-		if ( texture.minFilter === LinearMipmapLinearFilter ) texture.minFilter = LinearFilter;
-
-		const camera = new CubeCamera( 1, 10, this );
-		camera.update( renderer, mesh );
-
-		texture.minFilter = currentMinFilter;
-
-		mesh.geometry.dispose();
-		mesh.material.dispose();
-
-		return this;
-
-	}
-
-	clear( renderer, color, depth, stencil ) {
-
-		const currentRenderTarget = renderer.getRenderTarget();
-
-		for ( let i = 0; i < 6; i ++ ) {
-
-			renderer.setRenderTarget( this, i );
-
-			renderer.clear( color, depth, stencil );
-
-		}
-
-		renderer.setRenderTarget( currentRenderTarget );
-
-	}
-
-}
-
-const _vector1 = /*@__PURE__*/ new Vector3();
-const _vector2 = /*@__PURE__*/ new Vector3();
-const _normalMatrix = /*@__PURE__*/ new Matrix3();
-
-class Plane {
-
-	constructor( normal = new Vector3( 1, 0, 0 ), constant = 0 ) {
-
-		this.isPlane = true;
-
-		// normal is assumed to be normalized
-
-		this.normal = normal;
-		this.constant = constant;
-
-	}
-
-	set( normal, constant ) {
-
-		this.normal.copy( normal );
-		this.constant = constant;
-
-		return this;
-
-	}
-
-	setComponents( x, y, z, w ) {
-
-		this.normal.set( x, y, z );
-		this.constant = w;
-
-		return this;
-
-	}
-
-	setFromNormalAndCoplanarPoint( normal, point ) {
-
-		this.normal.copy( normal );
-		this.constant = - point.dot( this.normal );
-
-		return this;
-
-	}
-
-	setFromCoplanarPoints( a, b, c ) {
-
-		const normal = _vector1.subVectors( c, b ).cross( _vector2.subVectors( a, b ) ).normalize();
-
-		// Q: should an error be thrown if normal is zero (e.g. degenerate plane)?
-
-		this.setFromNormalAndCoplanarPoint( normal, a );
-
-		return this;
-
-	}
-
-	copy( plane ) {
-
-		this.normal.copy( plane.normal );
-		this.constant = plane.constant;
-
-		return this;
-
-	}
-
-	normalize() {
-
-		// Note: will lead to a divide by zero if the plane is invalid.
-
-		const inverseNormalLength = 1.0 / this.normal.length();
-		this.normal.multiplyScalar( inverseNormalLength );
-		this.constant *= inverseNormalLength;
-
-		return this;
-
-	}
-
-	negate() {
-
-		this.constant *= - 1;
-		this.normal.negate();
-
-		return this;
-
-	}
-
-	distanceToPoint( point ) {
-
-		return this.normal.dot( point ) + this.constant;
-
-	}
-
-	distanceToSphere( sphere ) {
-
-		return this.distanceToPoint( sphere.center ) - sphere.radius;
-
-	}
-
-	projectPoint( point, target ) {
-
-		return target.copy( point ).addScaledVector( this.normal, - this.distanceToPoint( point ) );
-
-	}
-
-	intersectLine( line, target ) {
-
-		const direction = line.delta( _vector1 );
-
-		const denominator = this.normal.dot( direction );
-
-		if ( denominator === 0 ) {
-
-			// line is coplanar, return origin
-			if ( this.distanceToPoint( line.start ) === 0 ) {
-
-				return target.copy( line.start );
-
-			}
-
-			// Unsure if this is the correct method to handle this case.
-			return null;
-
-		}
-
-		const t = - ( line.start.dot( this.normal ) + this.constant ) / denominator;
-
-		if ( t < 0 || t > 1 ) {
-
-			return null;
-
-		}
-
-		return target.copy( line.start ).addScaledVector( direction, t );
-
-	}
-
-	intersectsLine( line ) {
-
-		// Note: this tests if a line intersects the plane, not whether it (or its end-points) are coplanar with it.
-
-		const startSign = this.distanceToPoint( line.start );
-		const endSign = this.distanceToPoint( line.end );
-
-		return ( startSign < 0 && endSign > 0 ) || ( endSign < 0 && startSign > 0 );
-
-	}
-
-	intersectsBox( box ) {
-
-		return box.intersectsPlane( this );
-
-	}
-
-	intersectsSphere( sphere ) {
-
-		return sphere.intersectsPlane( this );
-
-	}
-
-	coplanarPoint( target ) {
-
-		return target.copy( this.normal ).multiplyScalar( - this.constant );
-
-	}
-
-	applyMatrix4( matrix, optionalNormalMatrix ) {
-
-		const normalMatrix = optionalNormalMatrix || _normalMatrix.getNormalMatrix( matrix );
-
-		const referencePoint = this.coplanarPoint( _vector1 ).applyMatrix4( matrix );
-
-		const normal = this.normal.applyMatrix3( normalMatrix ).normalize();
-
-		this.constant = - referencePoint.dot( normal );
-
-		return this;
-
-	}
-
-	translate( offset ) {
-
-		this.constant -= offset.dot( this.normal );
-
-		return this;
-
-	}
-
-	equals( plane ) {
-
-		return plane.normal.equals( this.normal ) && ( plane.constant === this.constant );
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-}
-
-const _sphere$3 = /*@__PURE__*/ new Sphere();
-const _vector$6 = /*@__PURE__*/ new Vector3();
-
-class Frustum {
-
-	constructor( p0 = new Plane(), p1 = new Plane(), p2 = new Plane(), p3 = new Plane(), p4 = new Plane(), p5 = new Plane() ) {
-
-		this.planes = [ p0, p1, p2, p3, p4, p5 ];
-
-	}
-
-	set( p0, p1, p2, p3, p4, p5 ) {
-
-		const planes = this.planes;
-
-		planes[ 0 ].copy( p0 );
-		planes[ 1 ].copy( p1 );
-		planes[ 2 ].copy( p2 );
-		planes[ 3 ].copy( p3 );
-		planes[ 4 ].copy( p4 );
-		planes[ 5 ].copy( p5 );
-
-		return this;
-
-	}
-
-	copy( frustum ) {
-
-		const planes = this.planes;
-
-		for ( let i = 0; i < 6; i ++ ) {
-
-			planes[ i ].copy( frustum.planes[ i ] );
-
-		}
-
-		return this;
-
-	}
-
-	setFromProjectionMatrix( m ) {
-
-		const planes = this.planes;
-		const me = m.elements;
-		const me0 = me[ 0 ], me1 = me[ 1 ], me2 = me[ 2 ], me3 = me[ 3 ];
-		const me4 = me[ 4 ], me5 = me[ 5 ], me6 = me[ 6 ], me7 = me[ 7 ];
-		const me8 = me[ 8 ], me9 = me[ 9 ], me10 = me[ 10 ], me11 = me[ 11 ];
-		const me12 = me[ 12 ], me13 = me[ 13 ], me14 = me[ 14 ], me15 = me[ 15 ];
-
-		planes[ 0 ].setComponents( me3 - me0, me7 - me4, me11 - me8, me15 - me12 ).normalize();
-		planes[ 1 ].setComponents( me3 + me0, me7 + me4, me11 + me8, me15 + me12 ).normalize();
-		planes[ 2 ].setComponents( me3 + me1, me7 + me5, me11 + me9, me15 + me13 ).normalize();
-		planes[ 3 ].setComponents( me3 - me1, me7 - me5, me11 - me9, me15 - me13 ).normalize();
-		planes[ 4 ].setComponents( me3 - me2, me7 - me6, me11 - me10, me15 - me14 ).normalize();
-		planes[ 5 ].setComponents( me3 + me2, me7 + me6, me11 + me10, me15 + me14 ).normalize();
-
-		return this;
-
-	}
-
-	intersectsObject( object ) {
-
-		if ( object.boundingSphere !== undefined ) {
-
-			if ( object.boundingSphere === null ) object.computeBoundingSphere();
-
-			_sphere$3.copy( object.boundingSphere ).applyMatrix4( object.matrixWorld );
-
-		} else {
-
-			const geometry = object.geometry;
-
-			if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
-
-			_sphere$3.copy( geometry.boundingSphere ).applyMatrix4( object.matrixWorld );
-
-		}
-
-		return this.intersectsSphere( _sphere$3 );
-
-	}
-
-	intersectsSprite( sprite ) {
-
-		_sphere$3.center.set( 0, 0, 0 );
-		_sphere$3.radius = 0.7071067811865476;
-		_sphere$3.applyMatrix4( sprite.matrixWorld );
-
-		return this.intersectsSphere( _sphere$3 );
-
-	}
-
-	intersectsSphere( sphere ) {
-
-		const planes = this.planes;
-		const center = sphere.center;
-		const negRadius = - sphere.radius;
-
-		for ( let i = 0; i < 6; i ++ ) {
-
-			const distance = planes[ i ].distanceToPoint( center );
-
-			if ( distance < negRadius ) {
-
-				return false;
-
-			}
-
-		}
-
-		return true;
-
-	}
-
-	intersectsBox( box ) {
-
-		const planes = this.planes;
-
-		for ( let i = 0; i < 6; i ++ ) {
-
-			const plane = planes[ i ];
-
-			// corner at max distance
-
-			_vector$6.x = plane.normal.x > 0 ? box.max.x : box.min.x;
-			_vector$6.y = plane.normal.y > 0 ? box.max.y : box.min.y;
-			_vector$6.z = plane.normal.z > 0 ? box.max.z : box.min.z;
-
-			if ( plane.distanceToPoint( _vector$6 ) < 0 ) {
-
-				return false;
-
-			}
-
-		}
-
-		return true;
-
-	}
-
-	containsPoint( point ) {
-
-		const planes = this.planes;
-
-		for ( let i = 0; i < 6; i ++ ) {
-
-			if ( planes[ i ].distanceToPoint( point ) < 0 ) {
-
-				return false;
-
-			}
-
-		}
-
-		return true;
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-}
-
-function WebGLAnimation() {
-
-	let context = null;
-	let isAnimating = false;
-	let animationLoop = null;
-	let requestId = null;
-
-	function onAnimationFrame( time, frame ) {
-
-		animationLoop( time, frame );
-
-		requestId = context.requestAnimationFrame( onAnimationFrame );
-
-	}
-
-	return {
-
-		start: function () {
-
-			if ( isAnimating === true ) return;
-			if ( animationLoop === null ) return;
-
-			requestId = context.requestAnimationFrame( onAnimationFrame );
-
-			isAnimating = true;
-
-		},
-
-		stop: function () {
-
-			context.cancelAnimationFrame( requestId );
-
-			isAnimating = false;
-
-		},
-
-		setAnimationLoop: function ( callback ) {
-
-			animationLoop = callback;
-
-		},
-
-		setContext: function ( value ) {
-
-			context = value;
-
-		}
-
-	};
-
-}
-
-function WebGLAttributes( gl, capabilities ) {
-
-	const isWebGL2 = capabilities.isWebGL2;
-
-	const buffers = new WeakMap();
-
-	function createBuffer( attribute, bufferType ) {
-
-		const array = attribute.array;
-		const usage = attribute.usage;
-
-		const buffer = gl.createBuffer();
-
-		gl.bindBuffer( bufferType, buffer );
-		gl.bufferData( bufferType, array, usage );
-
-		attribute.onUploadCallback();
-
-		let type;
-
-		if ( array instanceof Float32Array ) {
-
-			type = gl.FLOAT;
-
-		} else if ( array instanceof Uint16Array ) {
-
-			if ( attribute.isFloat16BufferAttribute ) {
-
-				if ( isWebGL2 ) {
-
-					type = gl.HALF_FLOAT;
-
-				} else {
-
-					throw new Error( 'THREE.WebGLAttributes: Usage of Float16BufferAttribute requires WebGL2.' );
-
-				}
-
-			} else {
-
-				type = gl.UNSIGNED_SHORT;
-
-			}
-
-		} else if ( array instanceof Int16Array ) {
-
-			type = gl.SHORT;
-
-		} else if ( array instanceof Uint32Array ) {
-
-			type = gl.UNSIGNED_INT;
-
-		} else if ( array instanceof Int32Array ) {
-
-			type = gl.INT;
-
-		} else if ( array instanceof Int8Array ) {
-
-			type = gl.BYTE;
-
-		} else if ( array instanceof Uint8Array ) {
-
-			type = gl.UNSIGNED_BYTE;
-
-		} else if ( array instanceof Uint8ClampedArray ) {
-
-			type = gl.UNSIGNED_BYTE;
-
-		} else {
-
-			throw new Error( 'THREE.WebGLAttributes: Unsupported buffer data format: ' + array );
-
-		}
-
-		return {
-			buffer: buffer,
-			type: type,
-			bytesPerElement: array.BYTES_PER_ELEMENT,
-			version: attribute.version
-		};
-
-	}
-
-	function updateBuffer( buffer, attribute, bufferType ) {
-
-		const array = attribute.array;
-		const updateRange = attribute.updateRange;
-
-		gl.bindBuffer( bufferType, buffer );
-
-		if ( updateRange.count === - 1 ) {
-
-			// Not using update ranges
-
-			gl.bufferSubData( bufferType, 0, array );
-
-		} else {
-
-			if ( isWebGL2 ) {
-
-				gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,
-					array, updateRange.offset, updateRange.count );
-
-			} else {
-
-				gl.bufferSubData( bufferType, updateRange.offset * array.BYTES_PER_ELEMENT,
-					array.subarray( updateRange.offset, updateRange.offset + updateRange.count ) );
-
-			}
-
-			updateRange.count = - 1; // reset range
-
-		}
-
-		attribute.onUploadCallback();
-
-	}
-
-	//
-
-	function get( attribute ) {
-
-		if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
-
-		return buffers.get( attribute );
-
-	}
-
-	function remove( attribute ) {
-
-		if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
-
-		const data = buffers.get( attribute );
-
-		if ( data ) {
-
-			gl.deleteBuffer( data.buffer );
-
-			buffers.delete( attribute );
-
-		}
-
-	}
-
-	function update( attribute, bufferType ) {
-
-		if ( attribute.isGLBufferAttribute ) {
-
-			const cached = buffers.get( attribute );
-
-			if ( ! cached || cached.version < attribute.version ) {
-
-				buffers.set( attribute, {
-					buffer: attribute.buffer,
-					type: attribute.type,
-					bytesPerElement: attribute.elementSize,
-					version: attribute.version
-				} );
-
-			}
-
-			return;
-
-		}
-
-		if ( attribute.isInterleavedBufferAttribute ) attribute = attribute.data;
-
-		const data = buffers.get( attribute );
-
-		if ( data === undefined ) {
-
-			buffers.set( attribute, createBuffer( attribute, bufferType ) );
-
-		} else if ( data.version < attribute.version ) {
-
-			updateBuffer( data.buffer, attribute, bufferType );
-
-			data.version = attribute.version;
-
-		}
-
-	}
-
-	return {
-
-		get: get,
-		remove: remove,
-		update: update
-
-	};
-
-}
-
-class PlaneGeometry extends BufferGeometry {
-
-	constructor( width = 1, height = 1, widthSegments = 1, heightSegments = 1 ) {
-
-		super();
-
-		this.type = 'PlaneGeometry';
-
-		this.parameters = {
-			width: width,
-			height: height,
-			widthSegments: widthSegments,
-			heightSegments: heightSegments
-		};
-
-		const width_half = width / 2;
-		const height_half = height / 2;
-
-		const gridX = Math.floor( widthSegments );
-		const gridY = Math.floor( heightSegments );
-
-		const gridX1 = gridX + 1;
-		const gridY1 = gridY + 1;
-
-		const segment_width = width / gridX;
-		const segment_height = height / gridY;
-
-		//
-
-		const indices = [];
-		const vertices = [];
-		const normals = [];
-		const uvs = [];
-
-		for ( let iy = 0; iy < gridY1; iy ++ ) {
-
-			const y = iy * segment_height - height_half;
-
-			for ( let ix = 0; ix < gridX1; ix ++ ) {
-
-				const x = ix * segment_width - width_half;
-
-				vertices.push( x, - y, 0 );
-
-				normals.push( 0, 0, 1 );
-
-				uvs.push( ix / gridX );
-				uvs.push( 1 - ( iy / gridY ) );
-
-			}
-
-		}
-
-		for ( let iy = 0; iy < gridY; iy ++ ) {
-
-			for ( let ix = 0; ix < gridX; ix ++ ) {
-
-				const a = ix + gridX1 * iy;
-				const b = ix + gridX1 * ( iy + 1 );
-				const c = ( ix + 1 ) + gridX1 * ( iy + 1 );
-				const d = ( ix + 1 ) + gridX1 * iy;
-
-				indices.push( a, b, d );
-				indices.push( b, c, d );
-
-			}
-
-		}
-
-		this.setIndex( indices );
-		this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-	static fromJSON( data ) {
-
-		return new PlaneGeometry( data.width, data.height, data.widthSegments, data.heightSegments );
-
-	}
-
-}
-
-var alphamap_fragment = "#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, vAlphaMapUv ).g;\n#endif";
-
-var alphamap_pars_fragment = "#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif";
-
-var alphatest_fragment = "#ifdef USE_ALPHATEST\n\tif ( diffuseColor.a < alphaTest ) discard;\n#endif";
-
-var alphatest_pars_fragment = "#ifdef USE_ALPHATEST\n\tuniform float alphaTest;\n#endif";
-
-var aomap_fragment = "#ifdef USE_AOMAP\n\tfloat ambientOcclusion = ( texture2D( aoMap, vAoMapUv ).r - 1.0 ) * aoMapIntensity + 1.0;\n\treflectedLight.indirectDiffuse *= ambientOcclusion;\n\t#if defined( USE_ENVMAP ) && defined( STANDARD )\n\t\tfloat dotNV = saturate( dot( geometry.normal, geometry.viewDir ) );\n\t\treflectedLight.indirectSpecular *= computeSpecularOcclusion( dotNV, ambientOcclusion, material.roughness );\n\t#endif\n#endif";
-
-var aomap_pars_fragment = "#ifdef USE_AOMAP\n\tuniform sampler2D aoMap;\n\tuniform float aoMapIntensity;\n#endif";
-
-var begin_vertex = "vec3 transformed = vec3( position );";
-
-var beginnormal_vertex = "vec3 objectNormal = vec3( normal );\n#ifdef USE_TANGENT\n\tvec3 objectTangent = vec3( tangent.xyz );\n#endif";
-
-var bsdfs = "float G_BlinnPhong_Implicit( ) {\n\treturn 0.25;\n}\nfloat D_BlinnPhong( const in float shininess, const in float dotNH ) {\n\treturn RECIPROCAL_PI * ( shininess * 0.5 + 1.0 ) * pow( dotNH, shininess );\n}\nvec3 BRDF_BlinnPhong( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in vec3 specularColor, const in float shininess ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( specularColor, 1.0, dotVH );\n\tfloat G = G_BlinnPhong_Implicit( );\n\tfloat D = D_BlinnPhong( shininess, dotNH );\n\treturn F * ( G * D );\n} // validated";
-
-var iridescence_fragment = "#ifdef USE_IRIDESCENCE\n\tconst mat3 XYZ_TO_REC709 = mat3(\n\t\t 3.2404542, -0.9692660,  0.0556434,\n\t\t-1.5371385,  1.8760108, -0.2040259,\n\t\t-0.4985314,  0.0415560,  1.0572252\n\t);\n\tvec3 Fresnel0ToIor( vec3 fresnel0 ) {\n\t\tvec3 sqrtF0 = sqrt( fresnel0 );\n\t\treturn ( vec3( 1.0 ) + sqrtF0 ) / ( vec3( 1.0 ) - sqrtF0 );\n\t}\n\tvec3 IorToFresnel0( vec3 transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - vec3( incidentIor ) ) / ( transmittedIor + vec3( incidentIor ) ) );\n\t}\n\tfloat IorToFresnel0( float transmittedIor, float incidentIor ) {\n\t\treturn pow2( ( transmittedIor - incidentIor ) / ( transmittedIor + incidentIor ));\n\t}\n\tvec3 evalSensitivity( float OPD, vec3 shift ) {\n\t\tfloat phase = 2.0 * PI * OPD * 1.0e-9;\n\t\tvec3 val = vec3( 5.4856e-13, 4.4201e-13, 5.2481e-13 );\n\t\tvec3 pos = vec3( 1.6810e+06, 1.7953e+06, 2.2084e+06 );\n\t\tvec3 var = vec3( 4.3278e+09, 9.3046e+09, 6.6121e+09 );\n\t\tvec3 xyz = val * sqrt( 2.0 * PI * var ) * cos( pos * phase + shift ) * exp( - pow2( phase ) * var );\n\t\txyz.x += 9.7470e-14 * sqrt( 2.0 * PI * 4.5282e+09 ) * cos( 2.2399e+06 * phase + shift[ 0 ] ) * exp( - 4.5282e+09 * pow2( phase ) );\n\t\txyz /= 1.0685e-7;\n\t\tvec3 rgb = XYZ_TO_REC709 * xyz;\n\t\treturn rgb;\n\t}\n\tvec3 evalIridescence( float outsideIOR, float eta2, float cosTheta1, float thinFilmThickness, vec3 baseF0 ) {\n\t\tvec3 I;\n\t\tfloat iridescenceIOR = mix( outsideIOR, eta2, smoothstep( 0.0, 0.03, thinFilmThickness ) );\n\t\tfloat sinTheta2Sq = pow2( outsideIOR / iridescenceIOR ) * ( 1.0 - pow2( cosTheta1 ) );\n\t\tfloat cosTheta2Sq = 1.0 - sinTheta2Sq;\n\t\tif ( cosTheta2Sq < 0.0 ) {\n\t\t\t return vec3( 1.0 );\n\t\t}\n\t\tfloat cosTheta2 = sqrt( cosTheta2Sq );\n\t\tfloat R0 = IorToFresnel0( iridescenceIOR, outsideIOR );\n\t\tfloat R12 = F_Schlick( R0, 1.0, cosTheta1 );\n\t\tfloat R21 = R12;\n\t\tfloat T121 = 1.0 - R12;\n\t\tfloat phi12 = 0.0;\n\t\tif ( iridescenceIOR < outsideIOR ) phi12 = PI;\n\t\tfloat phi21 = PI - phi12;\n\t\tvec3 baseIOR = Fresnel0ToIor( clamp( baseF0, 0.0, 0.9999 ) );\t\tvec3 R1 = IorToFresnel0( baseIOR, iridescenceIOR );\n\t\tvec3 R23 = F_Schlick( R1, 1.0, cosTheta2 );\n\t\tvec3 phi23 = vec3( 0.0 );\n\t\tif ( baseIOR[ 0 ] < iridescenceIOR ) phi23[ 0 ] = PI;\n\t\tif ( baseIOR[ 1 ] < iridescenceIOR ) phi23[ 1 ] = PI;\n\t\tif ( baseIOR[ 2 ] < iridescenceIOR ) phi23[ 2 ] = PI;\n\t\tfloat OPD = 2.0 * iridescenceIOR * thinFilmThickness * cosTheta2;\n\t\tvec3 phi = vec3( phi21 ) + phi23;\n\t\tvec3 R123 = clamp( R12 * R23, 1e-5, 0.9999 );\n\t\tvec3 r123 = sqrt( R123 );\n\t\tvec3 Rs = pow2( T121 ) * R23 / ( vec3( 1.0 ) - R123 );\n\t\tvec3 C0 = R12 + Rs;\n\t\tI = C0;\n\t\tvec3 Cm = Rs - T121;\n\t\tfor ( int m = 1; m <= 2; ++ m ) {\n\t\t\tCm *= r123;\n\t\t\tvec3 Sm = 2.0 * evalSensitivity( float( m ) * OPD, float( m ) * phi );\n\t\t\tI += Cm * Sm;\n\t\t}\n\t\treturn max( I, vec3( 0.0 ) );\n\t}\n#endif";
-
-var bumpmap_pars_fragment = "#ifdef USE_BUMPMAP\n\tuniform sampler2D bumpMap;\n\tuniform float bumpScale;\n\tvec2 dHdxy_fwd() {\n\t\tvec2 dSTdx = dFdx( vBumpMapUv );\n\t\tvec2 dSTdy = dFdy( vBumpMapUv );\n\t\tfloat Hll = bumpScale * texture2D( bumpMap, vBumpMapUv ).x;\n\t\tfloat dBx = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdx ).x - Hll;\n\t\tfloat dBy = bumpScale * texture2D( bumpMap, vBumpMapUv + dSTdy ).x - Hll;\n\t\treturn vec2( dBx, dBy );\n\t}\n\tvec3 perturbNormalArb( vec3 surf_pos, vec3 surf_norm, vec2 dHdxy, float faceDirection ) {\n\t\tvec3 vSigmaX = dFdx( surf_pos.xyz );\n\t\tvec3 vSigmaY = dFdy( surf_pos.xyz );\n\t\tvec3 vN = surf_norm;\n\t\tvec3 R1 = cross( vSigmaY, vN );\n\t\tvec3 R2 = cross( vN, vSigmaX );\n\t\tfloat fDet = dot( vSigmaX, R1 ) * faceDirection;\n\t\tvec3 vGrad = sign( fDet ) * ( dHdxy.x * R1 + dHdxy.y * R2 );\n\t\treturn normalize( abs( fDet ) * surf_norm - vGrad );\n\t}\n#endif";
-
-var clipping_planes_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvec4 plane;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) {\n\t\tplane = clippingPlanes[ i ];\n\t\tif ( dot( vClipPosition, plane.xyz ) > plane.w ) discard;\n\t}\n\t#pragma unroll_loop_end\n\t#if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES\n\t\tbool clipped = true;\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) {\n\t\t\tplane = clippingPlanes[ i ];\n\t\t\tclipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t\tif ( clipped ) discard;\n\t#endif\n#endif";
-
-var clipping_planes_pars_fragment = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n\tuniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ];\n#endif";
-
-var clipping_planes_pars_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvarying vec3 vClipPosition;\n#endif";
-
-var clipping_planes_vertex = "#if NUM_CLIPPING_PLANES > 0\n\tvClipPosition = - mvPosition.xyz;\n#endif";
-
-var color_fragment = "#if defined( USE_COLOR_ALPHA )\n\tdiffuseColor *= vColor;\n#elif defined( USE_COLOR )\n\tdiffuseColor.rgb *= vColor;\n#endif";
-
-var color_pars_fragment = "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR )\n\tvarying vec3 vColor;\n#endif";
-
-var color_pars_vertex = "#if defined( USE_COLOR_ALPHA )\n\tvarying vec4 vColor;\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvarying vec3 vColor;\n#endif";
-
-var color_vertex = "#if defined( USE_COLOR_ALPHA )\n\tvColor = vec4( 1.0 );\n#elif defined( USE_COLOR ) || defined( USE_INSTANCING_COLOR )\n\tvColor = vec3( 1.0 );\n#endif\n#ifdef USE_COLOR\n\tvColor *= color;\n#endif\n#ifdef USE_INSTANCING_COLOR\n\tvColor.xyz *= instanceColor.xyz;\n#endif";
-
-var common = "#define PI 3.141592653589793\n#define PI2 6.283185307179586\n#define PI_HALF 1.5707963267948966\n#define RECIPROCAL_PI 0.3183098861837907\n#define RECIPROCAL_PI2 0.15915494309189535\n#define EPSILON 1e-6\n#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\n#define whiteComplement( a ) ( 1.0 - saturate( a ) )\nfloat pow2( const in float x ) { return x*x; }\nvec3 pow2( const in vec3 x ) { return x*x; }\nfloat pow3( const in float x ) { return x*x*x; }\nfloat pow4( const in float x ) { float x2 = x*x; return x2*x2; }\nfloat max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); }\nfloat average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); }\nhighp float rand( const in vec2 uv ) {\n\tconst highp float a = 12.9898, b = 78.233, c = 43758.5453;\n\thighp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI );\n\treturn fract( sin( sn ) * c );\n}\n#ifdef HIGH_PRECISION\n\tfloat precisionSafeLength( vec3 v ) { return length( v ); }\n#else\n\tfloat precisionSafeLength( vec3 v ) {\n\t\tfloat maxComponent = max3( abs( v ) );\n\t\treturn length( v / maxComponent ) * maxComponent;\n\t}\n#endif\nstruct IncidentLight {\n\tvec3 color;\n\tvec3 direction;\n\tbool visible;\n};\nstruct ReflectedLight {\n\tvec3 directDiffuse;\n\tvec3 directSpecular;\n\tvec3 indirectDiffuse;\n\tvec3 indirectSpecular;\n};\nstruct GeometricContext {\n\tvec3 position;\n\tvec3 normal;\n\tvec3 viewDir;\n#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal;\n#endif\n};\nvec3 transformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( matrix * vec4( dir, 0.0 ) ).xyz );\n}\nvec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n\treturn normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n}\nmat3 transposeMat3( const in mat3 m ) {\n\tmat3 tmp;\n\ttmp[ 0 ] = vec3( m[ 0 ].x, m[ 1 ].x, m[ 2 ].x );\n\ttmp[ 1 ] = vec3( m[ 0 ].y, m[ 1 ].y, m[ 2 ].y );\n\ttmp[ 2 ] = vec3( m[ 0 ].z, m[ 1 ].z, m[ 2 ].z );\n\treturn tmp;\n}\nfloat luminance( const in vec3 rgb ) {\n\tconst vec3 weights = vec3( 0.2126729, 0.7151522, 0.0721750 );\n\treturn dot( weights, rgb );\n}\nbool isPerspectiveMatrix( mat4 m ) {\n\treturn m[ 2 ][ 3 ] == - 1.0;\n}\nvec2 equirectUv( in vec3 dir ) {\n\tfloat u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5;\n\tfloat v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5;\n\treturn vec2( u, v );\n}\nvec3 BRDF_Lambert( const in vec3 diffuseColor ) {\n\treturn RECIPROCAL_PI * diffuseColor;\n}\nvec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n}\nfloat F_Schlick( const in float f0, const in float f90, const in float dotVH ) {\n\tfloat fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH );\n\treturn f0 * ( 1.0 - fresnel ) + ( f90 * fresnel );\n} // validated";
-
-var cube_uv_reflection_fragment = "#ifdef ENVMAP_TYPE_CUBE_UV\n\t#define cubeUV_minMipLevel 4.0\n\t#define cubeUV_minTileSize 16.0\n\tfloat getFace( vec3 direction ) {\n\t\tvec3 absDirection = abs( direction );\n\t\tfloat face = - 1.0;\n\t\tif ( absDirection.x > absDirection.z ) {\n\t\t\tif ( absDirection.x > absDirection.y )\n\t\t\t\tface = direction.x > 0.0 ? 0.0 : 3.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t} else {\n\t\t\tif ( absDirection.z > absDirection.y )\n\t\t\t\tface = direction.z > 0.0 ? 2.0 : 5.0;\n\t\t\telse\n\t\t\t\tface = direction.y > 0.0 ? 1.0 : 4.0;\n\t\t}\n\t\treturn face;\n\t}\n\tvec2 getUV( vec3 direction, float face ) {\n\t\tvec2 uv;\n\t\tif ( face == 0.0 ) {\n\t\t\tuv = vec2( direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 1.0 ) {\n\t\t\tuv = vec2( - direction.x, - direction.z ) / abs( direction.y );\n\t\t} else if ( face == 2.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.y ) / abs( direction.z );\n\t\t} else if ( face == 3.0 ) {\n\t\t\tuv = vec2( - direction.z, direction.y ) / abs( direction.x );\n\t\t} else if ( face == 4.0 ) {\n\t\t\tuv = vec2( - direction.x, direction.z ) / abs( direction.y );\n\t\t} else {\n\t\t\tuv = vec2( direction.x, direction.y ) / abs( direction.z );\n\t\t}\n\t\treturn 0.5 * ( uv + 1.0 );\n\t}\n\tvec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) {\n\t\tfloat face = getFace( direction );\n\t\tfloat filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 );\n\t\tmipInt = max( mipInt, cubeUV_minMipLevel );\n\t\tfloat faceSize = exp2( mipInt );\n\t\thighp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0;\n\t\tif ( face > 2.0 ) {\n\t\t\tuv.y += faceSize;\n\t\t\tface -= 3.0;\n\t\t}\n\t\tuv.x += face * faceSize;\n\t\tuv.x += filterInt * 3.0 * cubeUV_minTileSize;\n\t\tuv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize );\n\t\tuv.x *= CUBEUV_TEXEL_WIDTH;\n\t\tuv.y *= CUBEUV_TEXEL_HEIGHT;\n\t\t#ifdef texture2DGradEXT\n\t\t\treturn texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb;\n\t\t#else\n\t\t\treturn texture2D( envMap, uv ).rgb;\n\t\t#endif\n\t}\n\t#define cubeUV_r0 1.0\n\t#define cubeUV_v0 0.339\n\t#define cubeUV_m0 - 2.0\n\t#define cubeUV_r1 0.8\n\t#define cubeUV_v1 0.276\n\t#define cubeUV_m1 - 1.0\n\t#define cubeUV_r4 0.4\n\t#define cubeUV_v4 0.046\n\t#define cubeUV_m4 2.0\n\t#define cubeUV_r5 0.305\n\t#define cubeUV_v5 0.016\n\t#define cubeUV_m5 3.0\n\t#define cubeUV_r6 0.21\n\t#define cubeUV_v6 0.0038\n\t#define cubeUV_m6 4.0\n\tfloat roughnessToMip( float roughness ) {\n\t\tfloat mip = 0.0;\n\t\tif ( roughness >= cubeUV_r1 ) {\n\t\t\tmip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0;\n\t\t} else if ( roughness >= cubeUV_r4 ) {\n\t\t\tmip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1;\n\t\t} else if ( roughness >= cubeUV_r5 ) {\n\t\t\tmip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4;\n\t\t} else if ( roughness >= cubeUV_r6 ) {\n\t\t\tmip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5;\n\t\t} else {\n\t\t\tmip = - 2.0 * log2( 1.16 * roughness );\t\t}\n\t\treturn mip;\n\t}\n\tvec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) {\n\t\tfloat mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP );\n\t\tfloat mipF = fract( mip );\n\t\tfloat mipInt = floor( mip );\n\t\tvec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt );\n\t\tif ( mipF == 0.0 ) {\n\t\t\treturn vec4( color0, 1.0 );\n\t\t} else {\n\t\t\tvec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 );\n\t\t\treturn vec4( mix( color0, color1, mipF ), 1.0 );\n\t\t}\n\t}\n#endif";
-
-var defaultnormal_vertex = "vec3 transformedNormal = objectNormal;\n#ifdef USE_INSTANCING\n\tmat3 m = mat3( instanceMatrix );\n\ttransformedNormal /= vec3( dot( m[ 0 ], m[ 0 ] ), dot( m[ 1 ], m[ 1 ] ), dot( m[ 2 ], m[ 2 ] ) );\n\ttransformedNormal = m * transformedNormal;\n#endif\ntransformedNormal = normalMatrix * transformedNormal;\n#ifdef FLIP_SIDED\n\ttransformedNormal = - transformedNormal;\n#endif\n#ifdef USE_TANGENT\n\tvec3 transformedTangent = ( modelViewMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#ifdef FLIP_SIDED\n\t\ttransformedTangent = - transformedTangent;\n\t#endif\n#endif";
-
-var displacementmap_pars_vertex = "#ifdef USE_DISPLACEMENTMAP\n\tuniform sampler2D displacementMap;\n\tuniform float displacementScale;\n\tuniform float displacementBias;\n#endif";
-
-var displacementmap_vertex = "#ifdef USE_DISPLACEMENTMAP\n\ttransformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias );\n#endif";
-
-var emissivemap_fragment = "#ifdef USE_EMISSIVEMAP\n\tvec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv );\n\ttotalEmissiveRadiance *= emissiveColor.rgb;\n#endif";
-
-var emissivemap_pars_fragment = "#ifdef USE_EMISSIVEMAP\n\tuniform sampler2D emissiveMap;\n#endif";
-
-var encodings_fragment = "gl_FragColor = linearToOutputTexel( gl_FragColor );";
-
-var encodings_pars_fragment = "vec4 LinearToLinear( in vec4 value ) {\n\treturn value;\n}\nvec4 LinearTosRGB( in vec4 value ) {\n\treturn vec4( mix( pow( value.rgb, vec3( 0.41666 ) ) * 1.055 - vec3( 0.055 ), value.rgb * 12.92, vec3( lessThanEqual( value.rgb, vec3( 0.0031308 ) ) ) ), value.a );\n}";
-
-var envmap_fragment = "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvec3 cameraToFrag;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToFrag = normalize( vWorldPosition - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvec3 reflectVec = reflect( cameraToFrag, worldNormal );\n\t\t#else\n\t\t\tvec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio );\n\t\t#endif\n\t#else\n\t\tvec3 reflectVec = vReflect;\n\t#endif\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 envColor = textureCube( envMap, vec3( flipEnvMap * reflectVec.x, reflectVec.yz ) );\n\t#else\n\t\tvec4 envColor = vec4( 0.0 );\n\t#endif\n\t#ifdef ENVMAP_BLENDING_MULTIPLY\n\t\toutgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_MIX )\n\t\toutgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity );\n\t#elif defined( ENVMAP_BLENDING_ADD )\n\t\toutgoingLight += envColor.xyz * specularStrength * reflectivity;\n\t#endif\n#endif";
-
-var envmap_common_pars_fragment = "#ifdef USE_ENVMAP\n\tuniform float envMapIntensity;\n\tuniform float flipEnvMap;\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tuniform samplerCube envMap;\n\t#else\n\t\tuniform sampler2D envMap;\n\t#endif\n\t\n#endif";
-
-var envmap_pars_fragment = "#ifdef USE_ENVMAP\n\tuniform float reflectivity;\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\tvarying vec3 vWorldPosition;\n\t\tuniform float refractionRatio;\n\t#else\n\t\tvarying vec3 vReflect;\n\t#endif\n#endif";
-
-var envmap_pars_vertex = "#ifdef USE_ENVMAP\n\t#if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT )\n\t\t#define ENV_WORLDPOS\n\t#endif\n\t#ifdef ENV_WORLDPOS\n\t\t\n\t\tvarying vec3 vWorldPosition;\n\t#else\n\t\tvarying vec3 vReflect;\n\t\tuniform float refractionRatio;\n\t#endif\n#endif";
-
-var envmap_vertex = "#ifdef USE_ENVMAP\n\t#ifdef ENV_WORLDPOS\n\t\tvWorldPosition = worldPosition.xyz;\n\t#else\n\t\tvec3 cameraToVertex;\n\t\tif ( isOrthographic ) {\n\t\t\tcameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) );\n\t\t} else {\n\t\t\tcameraToVertex = normalize( worldPosition.xyz - cameraPosition );\n\t\t}\n\t\tvec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\t\t#ifdef ENVMAP_MODE_REFLECTION\n\t\t\tvReflect = reflect( cameraToVertex, worldNormal );\n\t\t#else\n\t\t\tvReflect = refract( cameraToVertex, worldNormal, refractionRatio );\n\t\t#endif\n\t#endif\n#endif";
-
-var fog_vertex = "#ifdef USE_FOG\n\tvFogDepth = - mvPosition.z;\n#endif";
-
-var fog_pars_vertex = "#ifdef USE_FOG\n\tvarying float vFogDepth;\n#endif";
-
-var fog_fragment = "#ifdef USE_FOG\n\t#ifdef FOG_EXP2\n\t\tfloat fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth );\n\t#else\n\t\tfloat fogFactor = smoothstep( fogNear, fogFar, vFogDepth );\n\t#endif\n\tgl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor );\n#endif";
-
-var fog_pars_fragment = "#ifdef USE_FOG\n\tuniform vec3 fogColor;\n\tvarying float vFogDepth;\n\t#ifdef FOG_EXP2\n\t\tuniform float fogDensity;\n\t#else\n\t\tuniform float fogNear;\n\t\tuniform float fogFar;\n\t#endif\n#endif";
-
-var gradientmap_pars_fragment = "#ifdef USE_GRADIENTMAP\n\tuniform sampler2D gradientMap;\n#endif\nvec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) {\n\tfloat dotNL = dot( normal, lightDirection );\n\tvec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 );\n\t#ifdef USE_GRADIENTMAP\n\t\treturn vec3( texture2D( gradientMap, coord ).r );\n\t#else\n\t\tvec2 fw = fwidth( coord ) * 0.5;\n\t\treturn mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) );\n\t#endif\n}";
-
-var lightmap_fragment = "#ifdef USE_LIGHTMAP\n\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\treflectedLight.indirectDiffuse += lightMapIrradiance;\n#endif";
-
-var lightmap_pars_fragment = "#ifdef USE_LIGHTMAP\n\tuniform sampler2D lightMap;\n\tuniform float lightMapIntensity;\n#endif";
-
-var lights_lambert_fragment = "LambertMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularStrength = specularStrength;";
-
-var lights_lambert_pars_fragment = "varying vec3 vViewPosition;\nstruct LambertMaterial {\n\tvec3 diffuseColor;\n\tfloat specularStrength;\n};\nvoid RE_Direct_Lambert( const in IncidentLight directLight, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in GeometricContext geometry, const in LambertMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Lambert\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Lambert";
-
-var lights_pars_begin = "uniform bool receiveShadow;\nuniform vec3 ambientLightColor;\nuniform vec3 lightProbe[ 9 ];\nvec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\n\tfloat x = normal.x, y = normal.y, z = normal.z;\n\tvec3 result = shCoefficients[ 0 ] * 0.886227;\n\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\n\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\n\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\n\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\n\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\n\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\n\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\n\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\n\treturn result;\n}\nvec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) {\n\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\tvec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe );\n\treturn irradiance;\n}\nvec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) {\n\tvec3 irradiance = ambientLightColor;\n\treturn irradiance;\n}\nfloat getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) {\n\t#if defined ( LEGACY_LIGHTS )\n\t\tif ( cutoffDistance > 0.0 && decayExponent > 0.0 ) {\n\t\t\treturn pow( saturate( - lightDistance / cutoffDistance + 1.0 ), decayExponent );\n\t\t}\n\t\treturn 1.0;\n\t#else\n\t\tfloat distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 );\n\t\tif ( cutoffDistance > 0.0 ) {\n\t\t\tdistanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) );\n\t\t}\n\t\treturn distanceFalloff;\n\t#endif\n}\nfloat getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) {\n\treturn smoothstep( coneCosine, penumbraCosine, angleCosine );\n}\n#if NUM_DIR_LIGHTS > 0\n\tstruct DirectionalLight {\n\t\tvec3 direction;\n\t\tvec3 color;\n\t};\n\tuniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ];\n\tvoid getDirectionalLightInfo( const in DirectionalLight directionalLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tlight.color = directionalLight.color;\n\t\tlight.direction = directionalLight.direction;\n\t\tlight.visible = true;\n\t}\n#endif\n#if NUM_POINT_LIGHTS > 0\n\tstruct PointLight {\n\t\tvec3 position;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t};\n\tuniform PointLight pointLights[ NUM_POINT_LIGHTS ];\n\tvoid getPointLightInfo( const in PointLight pointLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = pointLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat lightDistance = length( lVector );\n\t\tlight.color = pointLight.color;\n\t\tlight.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay );\n\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t}\n#endif\n#if NUM_SPOT_LIGHTS > 0\n\tstruct SpotLight {\n\t\tvec3 position;\n\t\tvec3 direction;\n\t\tvec3 color;\n\t\tfloat distance;\n\t\tfloat decay;\n\t\tfloat coneCos;\n\t\tfloat penumbraCos;\n\t};\n\tuniform SpotLight spotLights[ NUM_SPOT_LIGHTS ];\n\tvoid getSpotLightInfo( const in SpotLight spotLight, const in GeometricContext geometry, out IncidentLight light ) {\n\t\tvec3 lVector = spotLight.position - geometry.position;\n\t\tlight.direction = normalize( lVector );\n\t\tfloat angleCos = dot( light.direction, spotLight.direction );\n\t\tfloat spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos );\n\t\tif ( spotAttenuation > 0.0 ) {\n\t\t\tfloat lightDistance = length( lVector );\n\t\t\tlight.color = spotLight.color * spotAttenuation;\n\t\t\tlight.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay );\n\t\t\tlight.visible = ( light.color != vec3( 0.0 ) );\n\t\t} else {\n\t\t\tlight.color = vec3( 0.0 );\n\t\t\tlight.visible = false;\n\t\t}\n\t}\n#endif\n#if NUM_RECT_AREA_LIGHTS > 0\n\tstruct RectAreaLight {\n\t\tvec3 color;\n\t\tvec3 position;\n\t\tvec3 halfWidth;\n\t\tvec3 halfHeight;\n\t};\n\tuniform sampler2D ltc_1;\tuniform sampler2D ltc_2;\n\tuniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ];\n#endif\n#if NUM_HEMI_LIGHTS > 0\n\tstruct HemisphereLight {\n\t\tvec3 direction;\n\t\tvec3 skyColor;\n\t\tvec3 groundColor;\n\t};\n\tuniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ];\n\tvec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) {\n\t\tfloat dotNL = dot( normal, hemiLight.direction );\n\t\tfloat hemiDiffuseWeight = 0.5 * dotNL + 0.5;\n\t\tvec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight );\n\t\treturn irradiance;\n\t}\n#endif";
-
-var envmap_physical_pars_fragment = "#if defined( USE_ENVMAP )\n\tvec3 getIBLIrradiance( const in vec3 normal ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, worldNormal, 1.0 );\n\t\t\treturn PI * envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n\tvec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) {\n\t\t#if defined( ENVMAP_TYPE_CUBE_UV )\n\t\t\tvec3 reflectVec = reflect( - viewDir, normal );\n\t\t\treflectVec = normalize( mix( reflectVec, normal, roughness * roughness) );\n\t\t\treflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n\t\t\tvec4 envMapColor = textureCubeUV( envMap, reflectVec, roughness );\n\t\t\treturn envMapColor.rgb * envMapIntensity;\n\t\t#else\n\t\t\treturn vec3( 0.0 );\n\t\t#endif\n\t}\n#endif";
-
-var lights_toon_fragment = "ToonMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;";
-
-var lights_toon_pars_fragment = "varying vec3 vViewPosition;\nstruct ToonMaterial {\n\tvec3 diffuseColor;\n};\nvoid RE_Direct_Toon( const in IncidentLight directLight, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\tvec3 irradiance = getGradientIrradiance( geometry.normal, directLight.direction ) * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in GeometricContext geometry, const in ToonMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_Toon\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Toon";
-
-var lights_phong_fragment = "BlinnPhongMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb;\nmaterial.specularColor = specular;\nmaterial.specularShininess = shininess;\nmaterial.specularStrength = specularStrength;";
-
-var lights_phong_pars_fragment = "varying vec3 vViewPosition;\nstruct BlinnPhongMaterial {\n\tvec3 diffuseColor;\n\tvec3 specularColor;\n\tfloat specularShininess;\n\tfloat specularStrength;\n};\nvoid RE_Direct_BlinnPhong( const in IncidentLight directLight, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n\treflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometry.viewDir, geometry.normal, material.specularColor, material.specularShininess ) * material.specularStrength;\n}\nvoid RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in GeometricContext geometry, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\n#define RE_Direct\t\t\t\tRE_Direct_BlinnPhong\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_BlinnPhong";
-
-var lights_physical_fragment = "PhysicalMaterial material;\nmaterial.diffuseColor = diffuseColor.rgb * ( 1.0 - metalnessFactor );\nvec3 dxy = max( abs( dFdx( geometryNormal ) ), abs( dFdy( geometryNormal ) ) );\nfloat geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z );\nmaterial.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness;\nmaterial.roughness = min( material.roughness, 1.0 );\n#ifdef IOR\n\tmaterial.ior = ior;\n\t#ifdef USE_SPECULAR\n\t\tfloat specularIntensityFactor = specularIntensity;\n\t\tvec3 specularColorFactor = specularColor;\n\t\t#ifdef USE_SPECULAR_COLORMAP\n\t\t\tspecularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb;\n\t\t#endif\n\t\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\t\tspecularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a;\n\t\t#endif\n\t\tmaterial.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor );\n\t#else\n\t\tfloat specularIntensityFactor = 1.0;\n\t\tvec3 specularColorFactor = vec3( 1.0 );\n\t\tmaterial.specularF90 = 1.0;\n\t#endif\n\tmaterial.specularColor = mix( min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor, diffuseColor.rgb, metalnessFactor );\n#else\n\tmaterial.specularColor = mix( vec3( 0.04 ), diffuseColor.rgb, metalnessFactor );\n\tmaterial.specularF90 = 1.0;\n#endif\n#ifdef USE_CLEARCOAT\n\tmaterial.clearcoat = clearcoat;\n\tmaterial.clearcoatRoughness = clearcoatRoughness;\n\tmaterial.clearcoatF0 = vec3( 0.04 );\n\tmaterial.clearcoatF90 = 1.0;\n\t#ifdef USE_CLEARCOATMAP\n\t\tmaterial.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x;\n\t#endif\n\t#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\t\tmaterial.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y;\n\t#endif\n\tmaterial.clearcoat = saturate( material.clearcoat );\tmaterial.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 );\n\tmaterial.clearcoatRoughness += geometryRoughness;\n\tmaterial.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 );\n#endif\n#ifdef USE_IRIDESCENCE\n\tmaterial.iridescence = iridescence;\n\tmaterial.iridescenceIOR = iridescenceIOR;\n\t#ifdef USE_IRIDESCENCEMAP\n\t\tmaterial.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r;\n\t#endif\n\t#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\t\tmaterial.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum;\n\t#else\n\t\tmaterial.iridescenceThickness = iridescenceThicknessMaximum;\n\t#endif\n#endif\n#ifdef USE_SHEEN\n\tmaterial.sheenColor = sheenColor;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tmaterial.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb;\n\t#endif\n\tmaterial.sheenRoughness = clamp( sheenRoughness, 0.07, 1.0 );\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tmaterial.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a;\n\t#endif\n#endif";
-
-var lights_physical_pars_fragment = "struct PhysicalMaterial {\n\tvec3 diffuseColor;\n\tfloat roughness;\n\tvec3 specularColor;\n\tfloat specularF90;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat clearcoat;\n\t\tfloat clearcoatRoughness;\n\t\tvec3 clearcoatF0;\n\t\tfloat clearcoatF90;\n\t#endif\n\t#ifdef USE_IRIDESCENCE\n\t\tfloat iridescence;\n\t\tfloat iridescenceIOR;\n\t\tfloat iridescenceThickness;\n\t\tvec3 iridescenceFresnel;\n\t\tvec3 iridescenceF0;\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tvec3 sheenColor;\n\t\tfloat sheenRoughness;\n\t#endif\n\t#ifdef IOR\n\t\tfloat ior;\n\t#endif\n\t#ifdef USE_TRANSMISSION\n\t\tfloat transmission;\n\t\tfloat transmissionAlpha;\n\t\tfloat thickness;\n\t\tfloat attenuationDistance;\n\t\tvec3 attenuationColor;\n\t#endif\n};\nvec3 clearcoatSpecular = vec3( 0.0 );\nvec3 sheenSpecular = vec3( 0.0 );\nvec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) {\n    float x = clamp( 1.0 - dotVH, 0.0, 1.0 );\n    float x2 = x * x;\n    float x5 = clamp( x * x2 * x2, 0.0, 0.9999 );\n    return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 );\n}\nfloat V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) {\n\tfloat a2 = pow2( alpha );\n\tfloat gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) );\n\tfloat gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) );\n\treturn 0.5 / max( gv + gl, EPSILON );\n}\nfloat D_GGX( const in float alpha, const in float dotNH ) {\n\tfloat a2 = pow2( alpha );\n\tfloat denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0;\n\treturn RECIPROCAL_PI * a2 / pow2( denom );\n}\n#ifdef USE_CLEARCOAT\n\tvec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) {\n\t\tvec3 f0 = material.clearcoatF0;\n\t\tfloat f90 = material.clearcoatF90;\n\t\tfloat roughness = material.clearcoatRoughness;\n\t\tfloat alpha = pow2( roughness );\n\t\tvec3 halfDir = normalize( lightDir + viewDir );\n\t\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\t\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\t\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\t\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\t\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\t\tfloat D = D_GGX( alpha, dotNH );\n\t\treturn F * ( V * D );\n\t}\n#endif\nvec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) {\n\tvec3 f0 = material.specularColor;\n\tfloat f90 = material.specularF90;\n\tfloat roughness = material.roughness;\n\tfloat alpha = pow2( roughness );\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat dotVH = saturate( dot( viewDir, halfDir ) );\n\tvec3 F = F_Schlick( f0, f90, dotVH );\n\t#ifdef USE_IRIDESCENCE\n\t\tF = mix( F, material.iridescenceFresnel, material.iridescence );\n\t#endif\n\tfloat V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV );\n\tfloat D = D_GGX( alpha, dotNH );\n\treturn F * ( V * D );\n}\nvec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) {\n\tconst float LUT_SIZE = 64.0;\n\tconst float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE;\n\tconst float LUT_BIAS = 0.5 / LUT_SIZE;\n\tfloat dotNV = saturate( dot( N, V ) );\n\tvec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) );\n\tuv = uv * LUT_SCALE + LUT_BIAS;\n\treturn uv;\n}\nfloat LTC_ClippedSphereFormFactor( const in vec3 f ) {\n\tfloat l = length( f );\n\treturn max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 );\n}\nvec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) {\n\tfloat x = dot( v1, v2 );\n\tfloat y = abs( x );\n\tfloat a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y;\n\tfloat b = 3.4175940 + ( 4.1616724 + y ) * y;\n\tfloat v = a / b;\n\tfloat theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v;\n\treturn cross( v1, v2 ) * theta_sintheta;\n}\nvec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) {\n\tvec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ];\n\tvec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ];\n\tvec3 lightNormal = cross( v1, v2 );\n\tif( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 );\n\tvec3 T1, T2;\n\tT1 = normalize( V - N * dot( V, N ) );\n\tT2 = - cross( N, T1 );\n\tmat3 mat = mInv * transposeMat3( mat3( T1, T2, N ) );\n\tvec3 coords[ 4 ];\n\tcoords[ 0 ] = mat * ( rectCoords[ 0 ] - P );\n\tcoords[ 1 ] = mat * ( rectCoords[ 1 ] - P );\n\tcoords[ 2 ] = mat * ( rectCoords[ 2 ] - P );\n\tcoords[ 3 ] = mat * ( rectCoords[ 3 ] - P );\n\tcoords[ 0 ] = normalize( coords[ 0 ] );\n\tcoords[ 1 ] = normalize( coords[ 1 ] );\n\tcoords[ 2 ] = normalize( coords[ 2 ] );\n\tcoords[ 3 ] = normalize( coords[ 3 ] );\n\tvec3 vectorFormFactor = vec3( 0.0 );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] );\n\tvectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] );\n\tfloat result = LTC_ClippedSphereFormFactor( vectorFormFactor );\n\treturn vec3( result );\n}\n#if defined( USE_SHEEN )\nfloat D_Charlie( float roughness, float dotNH ) {\n\tfloat alpha = pow2( roughness );\n\tfloat invAlpha = 1.0 / alpha;\n\tfloat cos2h = dotNH * dotNH;\n\tfloat sin2h = max( 1.0 - cos2h, 0.0078125 );\n\treturn ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI );\n}\nfloat V_Neubelt( float dotNV, float dotNL ) {\n\treturn saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) );\n}\nvec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) {\n\tvec3 halfDir = normalize( lightDir + viewDir );\n\tfloat dotNL = saturate( dot( normal, lightDir ) );\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat dotNH = saturate( dot( normal, halfDir ) );\n\tfloat D = D_Charlie( sheenRoughness, dotNH );\n\tfloat V = V_Neubelt( dotNV, dotNL );\n\treturn sheenColor * ( D * V );\n}\n#endif\nfloat IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tfloat r2 = roughness * roughness;\n\tfloat a = roughness < 0.25 ? -339.2 * r2 + 161.4 * roughness - 25.9 : -8.48 * r2 + 14.3 * roughness - 9.95;\n\tfloat b = roughness < 0.25 ? 44.0 * r2 - 23.7 * roughness + 3.26 : 1.97 * r2 - 3.27 * roughness + 0.72;\n\tfloat DG = exp( a * dotNV + b ) + ( roughness < 0.25 ? 0.0 : 0.1 * ( roughness - 0.25 ) );\n\treturn saturate( DG * RECIPROCAL_PI );\n}\nvec2 DFGApprox( const in vec3 normal, const in vec3 viewDir, const in float roughness ) {\n\tfloat dotNV = saturate( dot( normal, viewDir ) );\n\tconst vec4 c0 = vec4( - 1, - 0.0275, - 0.572, 0.022 );\n\tconst vec4 c1 = vec4( 1, 0.0425, 1.04, - 0.04 );\n\tvec4 r = roughness * c0 + c1;\n\tfloat a004 = min( r.x * r.x, exp2( - 9.28 * dotNV ) ) * r.x + r.y;\n\tvec2 fab = vec2( - 1.04, 1.04 ) * a004 + r.zw;\n\treturn fab;\n}\nvec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) {\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\treturn specularColor * fab.x + specularF90 * fab.y;\n}\n#ifdef USE_IRIDESCENCE\nvoid computeMultiscatteringIridescence( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float iridescence, const in vec3 iridescenceF0, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#else\nvoid computeMultiscattering( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness, inout vec3 singleScatter, inout vec3 multiScatter ) {\n#endif\n\tvec2 fab = DFGApprox( normal, viewDir, roughness );\n\t#ifdef USE_IRIDESCENCE\n\t\tvec3 Fr = mix( specularColor, iridescenceF0, iridescence );\n\t#else\n\t\tvec3 Fr = specularColor;\n\t#endif\n\tvec3 FssEss = Fr * fab.x + specularF90 * fab.y;\n\tfloat Ess = fab.x + fab.y;\n\tfloat Ems = 1.0 - Ess;\n\tvec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619;\tvec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg );\n\tsingleScatter += FssEss;\n\tmultiScatter += Fms * Ems;\n}\n#if NUM_RECT_AREA_LIGHTS > 0\n\tvoid RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\t\tvec3 normal = geometry.normal;\n\t\tvec3 viewDir = geometry.viewDir;\n\t\tvec3 position = geometry.position;\n\t\tvec3 lightPos = rectAreaLight.position;\n\t\tvec3 halfWidth = rectAreaLight.halfWidth;\n\t\tvec3 halfHeight = rectAreaLight.halfHeight;\n\t\tvec3 lightColor = rectAreaLight.color;\n\t\tfloat roughness = material.roughness;\n\t\tvec3 rectCoords[ 4 ];\n\t\trectCoords[ 0 ] = lightPos + halfWidth - halfHeight;\t\trectCoords[ 1 ] = lightPos - halfWidth - halfHeight;\n\t\trectCoords[ 2 ] = lightPos - halfWidth + halfHeight;\n\t\trectCoords[ 3 ] = lightPos + halfWidth + halfHeight;\n\t\tvec2 uv = LTC_Uv( normal, viewDir, roughness );\n\t\tvec4 t1 = texture2D( ltc_1, uv );\n\t\tvec4 t2 = texture2D( ltc_2, uv );\n\t\tmat3 mInv = mat3(\n\t\t\tvec3( t1.x, 0, t1.y ),\n\t\t\tvec3(    0, 1,    0 ),\n\t\t\tvec3( t1.z, 0, t1.w )\n\t\t);\n\t\tvec3 fresnel = ( material.specularColor * t2.x + ( vec3( 1.0 ) - material.specularColor ) * t2.y );\n\t\treflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords );\n\t\treflectedLight.directDiffuse += lightColor * material.diffuseColor * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords );\n\t}\n#endif\nvoid RE_Direct_Physical( const in IncidentLight directLight, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\tfloat dotNL = saturate( dot( geometry.normal, directLight.direction ) );\n\tvec3 irradiance = dotNL * directLight.color;\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNLcc = saturate( dot( geometry.clearcoatNormal, directLight.direction ) );\n\t\tvec3 ccIrradiance = dotNLcc * directLight.color;\n\t\tclearcoatSpecular += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometry.viewDir, geometry.clearcoatNormal, material );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * BRDF_Sheen( directLight.direction, geometry.viewDir, geometry.normal, material.sheenColor, material.sheenRoughness );\n\t#endif\n\treflectedLight.directSpecular += irradiance * BRDF_GGX( directLight.direction, geometry.viewDir, geometry.normal, material );\n\treflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) {\n\treflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor );\n}\nvoid RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in GeometricContext geometry, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) {\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatSpecular += clearcoatRadiance * EnvironmentBRDF( geometry.clearcoatNormal, geometry.viewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness );\n\t#endif\n\t#ifdef USE_SHEEN\n\t\tsheenSpecular += irradiance * material.sheenColor * IBLSheenBRDF( geometry.normal, geometry.viewDir, material.sheenRoughness );\n\t#endif\n\tvec3 singleScattering = vec3( 0.0 );\n\tvec3 multiScattering = vec3( 0.0 );\n\tvec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI;\n\t#ifdef USE_IRIDESCENCE\n\t\tcomputeMultiscatteringIridescence( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnel, material.roughness, singleScattering, multiScattering );\n\t#else\n\t\tcomputeMultiscattering( geometry.normal, geometry.viewDir, material.specularColor, material.specularF90, material.roughness, singleScattering, multiScattering );\n\t#endif\n\tvec3 totalScattering = singleScattering + multiScattering;\n\tvec3 diffuse = material.diffuseColor * ( 1.0 - max( max( totalScattering.r, totalScattering.g ), totalScattering.b ) );\n\treflectedLight.indirectSpecular += radiance * singleScattering;\n\treflectedLight.indirectSpecular += multiScattering * cosineWeightedIrradiance;\n\treflectedLight.indirectDiffuse += diffuse * cosineWeightedIrradiance;\n}\n#define RE_Direct\t\t\t\tRE_Direct_Physical\n#define RE_Direct_RectArea\t\tRE_Direct_RectArea_Physical\n#define RE_IndirectDiffuse\t\tRE_IndirectDiffuse_Physical\n#define RE_IndirectSpecular\t\tRE_IndirectSpecular_Physical\nfloat computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) {\n\treturn saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion );\n}";
-
-var lights_fragment_begin = "\nGeometricContext geometry;\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n#ifdef USE_CLEARCOAT\n\tgeometry.clearcoatNormal = clearcoatNormal;\n#endif\n#ifdef USE_IRIDESCENCE\n\tfloat dotNVi = saturate( dot( normal, geometry.viewDir ) );\n\tif ( material.iridescenceThickness == 0.0 ) {\n\t\tmaterial.iridescence = 0.0;\n\t} else {\n\t\tmaterial.iridescence = saturate( material.iridescence );\n\t}\n\tif ( material.iridescence > 0.0 ) {\n\t\tmaterial.iridescenceFresnel = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor );\n\t\tmaterial.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi );\n\t}\n#endif\nIncidentLight directLight;\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\t\tpointLight = pointLights[ i ];\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\tSpotLight spotLight;\n\tvec4 spotColor;\n\tvec3 spotLightCoord;\n\tbool inSpotLightMap;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\t\tspotLight = spotLights[ i ];\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\t\t#if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX\n\t\t#elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t#define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS\n\t\t#else\n\t\t#define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS )\n\t\t#endif\n\t\t#if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS )\n\t\t\tspotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w;\n\t\t\tinSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) );\n\t\t\tspotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy );\n\t\t\tdirectLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color;\n\t\t#endif\n\t\t#undef SPOT_LIGHT_MAP_INDEX\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct )\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\tRectAreaLight rectAreaLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\t}\n\t#pragma unroll_loop_end\n#endif\n#if defined( RE_IndirectDiffuse )\n\tvec3 iblIrradiance = vec3( 0.0 );\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if defined( RE_IndirectSpecular )\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n#endif";
-
-var lights_fragment_maps = "#if defined( RE_IndirectDiffuse )\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\tvec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity;\n\t\tirradiance += lightMapIrradiance;\n\t#endif\n\t#if defined( USE_ENVMAP ) && defined( STANDARD ) && defined( ENVMAP_TYPE_CUBE_UV )\n\t\tiblIrradiance += getIBLIrradiance( geometry.normal );\n\t#endif\n#endif\n#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular )\n\tradiance += getIBLRadiance( geometry.viewDir, geometry.normal, material.roughness );\n\t#ifdef USE_CLEARCOAT\n\t\tclearcoatRadiance += getIBLRadiance( geometry.viewDir, geometry.clearcoatNormal, material.clearcoatRoughness );\n\t#endif\n#endif";
-
-var lights_fragment_end = "#if defined( RE_IndirectDiffuse )\n\tRE_IndirectDiffuse( irradiance, geometry, material, reflectedLight );\n#endif\n#if defined( RE_IndirectSpecular )\n\tRE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometry, material, reflectedLight );\n#endif";
-
-var logdepthbuf_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tgl_FragDepthEXT = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5;\n#endif";
-
-var logdepthbuf_pars_fragment = "#if defined( USE_LOGDEPTHBUF ) && defined( USE_LOGDEPTHBUF_EXT )\n\tuniform float logDepthBufFC;\n\tvarying float vFragDepth;\n\tvarying float vIsPerspective;\n#endif";
-
-var logdepthbuf_pars_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvarying float vFragDepth;\n\t\tvarying float vIsPerspective;\n\t#else\n\t\tuniform float logDepthBufFC;\n\t#endif\n#endif";
-
-var logdepthbuf_vertex = "#ifdef USE_LOGDEPTHBUF\n\t#ifdef USE_LOGDEPTHBUF_EXT\n\t\tvFragDepth = 1.0 + gl_Position.w;\n\t\tvIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) );\n\t#else\n\t\tif ( isPerspectiveMatrix( projectionMatrix ) ) {\n\t\t\tgl_Position.z = log2( max( EPSILON, gl_Position.w + 1.0 ) ) * logDepthBufFC - 1.0;\n\t\t\tgl_Position.z *= gl_Position.w;\n\t\t}\n\t#endif\n#endif";
-
-var map_fragment = "#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, vMapUv );\n#endif";
-
-var map_pars_fragment = "#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif";
-
-var map_particle_fragment = "#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t#if defined( USE_POINTS_UV )\n\t\tvec2 uv = vUv;\n\t#else\n\t\tvec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tdiffuseColor *= texture2D( map, uv );\n#endif\n#ifdef USE_ALPHAMAP\n\tdiffuseColor.a *= texture2D( alphaMap, uv ).g;\n#endif";
-
-var map_particle_pars_fragment = "#if defined( USE_POINTS_UV )\n\tvarying vec2 vUv;\n#else\n\t#if defined( USE_MAP ) || defined( USE_ALPHAMAP )\n\t\tuniform mat3 uvTransform;\n\t#endif\n#endif\n#ifdef USE_MAP\n\tuniform sampler2D map;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform sampler2D alphaMap;\n#endif";
-
-var metalnessmap_fragment = "float metalnessFactor = metalness;\n#ifdef USE_METALNESSMAP\n\tvec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv );\n\tmetalnessFactor *= texelMetalness.b;\n#endif";
-
-var metalnessmap_pars_fragment = "#ifdef USE_METALNESSMAP\n\tuniform sampler2D metalnessMap;\n#endif";
-
-var morphcolor_vertex = "#if defined( USE_MORPHCOLORS ) && defined( MORPHTARGETS_TEXTURE )\n\tvColor *= morphTargetBaseInfluence;\n\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t#if defined( USE_COLOR_ALPHA )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ];\n\t\t#elif defined( USE_COLOR )\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ];\n\t\t#endif\n\t}\n#endif";
-
-var morphnormal_vertex = "#ifdef USE_MORPHNORMALS\n\tobjectNormal *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\tobjectNormal += morphNormal0 * morphTargetInfluences[ 0 ];\n\t\tobjectNormal += morphNormal1 * morphTargetInfluences[ 1 ];\n\t\tobjectNormal += morphNormal2 * morphTargetInfluences[ 2 ];\n\t\tobjectNormal += morphNormal3 * morphTargetInfluences[ 3 ];\n\t#endif\n#endif";
-
-var morphtarget_pars_vertex = "#ifdef USE_MORPHTARGETS\n\tuniform float morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tuniform float morphTargetInfluences[ MORPHTARGETS_COUNT ];\n\t\tuniform sampler2DArray morphTargetsTexture;\n\t\tuniform ivec2 morphTargetsTextureSize;\n\t\tvec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) {\n\t\t\tint texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset;\n\t\t\tint y = texelIndex / morphTargetsTextureSize.x;\n\t\t\tint x = texelIndex - y * morphTargetsTextureSize.x;\n\t\t\tivec3 morphUV = ivec3( x, y, morphTargetIndex );\n\t\t\treturn texelFetch( morphTargetsTexture, morphUV, 0 );\n\t\t}\n\t#else\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\tuniform float morphTargetInfluences[ 8 ];\n\t\t#else\n\t\t\tuniform float morphTargetInfluences[ 4 ];\n\t\t#endif\n\t#endif\n#endif";
-
-var morphtarget_vertex = "#ifdef USE_MORPHTARGETS\n\ttransformed *= morphTargetBaseInfluence;\n\t#ifdef MORPHTARGETS_TEXTURE\n\t\tfor ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) {\n\t\t\tif ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ];\n\t\t}\n\t#else\n\t\ttransformed += morphTarget0 * morphTargetInfluences[ 0 ];\n\t\ttransformed += morphTarget1 * morphTargetInfluences[ 1 ];\n\t\ttransformed += morphTarget2 * morphTargetInfluences[ 2 ];\n\t\ttransformed += morphTarget3 * morphTargetInfluences[ 3 ];\n\t\t#ifndef USE_MORPHNORMALS\n\t\t\ttransformed += morphTarget4 * morphTargetInfluences[ 4 ];\n\t\t\ttransformed += morphTarget5 * morphTargetInfluences[ 5 ];\n\t\t\ttransformed += morphTarget6 * morphTargetInfluences[ 6 ];\n\t\t\ttransformed += morphTarget7 * morphTargetInfluences[ 7 ];\n\t\t#endif\n\t#endif\n#endif";
-
-var normal_fragment_begin = "float faceDirection = gl_FrontFacing ? 1.0 : - 1.0;\n#ifdef FLAT_SHADED\n\tvec3 fdx = dFdx( vViewPosition );\n\tvec3 fdy = dFdy( vViewPosition );\n\tvec3 normal = normalize( cross( fdx, fdy ) );\n#else\n\tvec3 normal = normalize( vNormal );\n\t#ifdef DOUBLE_SIDED\n\t\tnormal *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_NORMALMAP_TANGENTSPACE\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn = getTangentFrame( - vViewPosition, normal, vNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn[0] *= faceDirection;\n\t\ttbn[1] *= faceDirection;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\t#ifdef USE_TANGENT\n\t\tmat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal );\n\t#else\n\t\tmat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv );\n\t#endif\n\t#if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED )\n\t\ttbn2[0] *= faceDirection;\n\t\ttbn2[1] *= faceDirection;\n\t#endif\n#endif\nvec3 geometryNormal = normal;";
-
-var normal_fragment_maps = "#ifdef USE_NORMALMAP_OBJECTSPACE\n\tnormal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\t#ifdef FLIP_SIDED\n\t\tnormal = - normal;\n\t#endif\n\t#ifdef DOUBLE_SIDED\n\t\tnormal = normal * faceDirection;\n\t#endif\n\tnormal = normalize( normalMatrix * normal );\n#elif defined( USE_NORMALMAP_TANGENTSPACE )\n\tvec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0;\n\tmapN.xy *= normalScale;\n\tnormal = normalize( tbn * mapN );\n#elif defined( USE_BUMPMAP )\n\tnormal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection );\n#endif";
-
-var normal_pars_fragment = "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif";
-
-var normal_pars_vertex = "#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n\t#ifdef USE_TANGENT\n\t\tvarying vec3 vTangent;\n\t\tvarying vec3 vBitangent;\n\t#endif\n#endif";
-
-var normal_vertex = "#ifndef FLAT_SHADED\n\tvNormal = normalize( transformedNormal );\n\t#ifdef USE_TANGENT\n\t\tvTangent = normalize( transformedTangent );\n\t\tvBitangent = normalize( cross( vNormal, vTangent ) * tangent.w );\n\t#endif\n#endif";
-
-var normalmap_pars_fragment = "#ifdef USE_NORMALMAP\n\tuniform sampler2D normalMap;\n\tuniform vec2 normalScale;\n#endif\n#ifdef USE_NORMALMAP_OBJECTSPACE\n\tuniform mat3 normalMatrix;\n#endif\n#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) )\n\tmat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) {\n\t\tvec3 q0 = dFdx( eye_pos.xyz );\n\t\tvec3 q1 = dFdy( eye_pos.xyz );\n\t\tvec2 st0 = dFdx( uv.st );\n\t\tvec2 st1 = dFdy( uv.st );\n\t\tvec3 N = surf_norm;\n\t\tvec3 q1perp = cross( q1, N );\n\t\tvec3 q0perp = cross( N, q0 );\n\t\tvec3 T = q1perp * st0.x + q0perp * st1.x;\n\t\tvec3 B = q1perp * st0.y + q0perp * st1.y;\n\t\tfloat det = max( dot( T, T ), dot( B, B ) );\n\t\tfloat scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det );\n\t\treturn mat3( T * scale, B * scale, N );\n\t}\n#endif";
-
-var clearcoat_normal_fragment_begin = "#ifdef USE_CLEARCOAT\n\tvec3 clearcoatNormal = geometryNormal;\n#endif";
-
-var clearcoat_normal_fragment_maps = "#ifdef USE_CLEARCOAT_NORMALMAP\n\tvec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0;\n\tclearcoatMapN.xy *= clearcoatNormalScale;\n\tclearcoatNormal = normalize( tbn2 * clearcoatMapN );\n#endif";
-
-var clearcoat_pars_fragment = "#ifdef USE_CLEARCOATMAP\n\tuniform sampler2D clearcoatMap;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform sampler2D clearcoatNormalMap;\n\tuniform vec2 clearcoatNormalScale;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform sampler2D clearcoatRoughnessMap;\n#endif";
-
-var iridescence_pars_fragment = "#ifdef USE_IRIDESCENCEMAP\n\tuniform sampler2D iridescenceMap;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform sampler2D iridescenceThicknessMap;\n#endif";
-
-var output_fragment = "#ifdef OPAQUE\ndiffuseColor.a = 1.0;\n#endif\n#ifdef USE_TRANSMISSION\ndiffuseColor.a *= material.transmissionAlpha + 0.1;\n#endif\ngl_FragColor = vec4( outgoingLight, diffuseColor.a );";
-
-var packing = "vec3 packNormalToRGB( const in vec3 normal ) {\n\treturn normalize( normal ) * 0.5 + 0.5;\n}\nvec3 unpackRGBToNormal( const in vec3 rgb ) {\n\treturn 2.0 * rgb.xyz - 1.0;\n}\nconst float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;\nconst vec3 PackFactors = vec3( 256. * 256. * 256., 256. * 256., 256. );\nconst vec4 UnpackFactors = UnpackDownscale / vec4( PackFactors, 1. );\nconst float ShiftRight8 = 1. / 256.;\nvec4 packDepthToRGBA( const in float v ) {\n\tvec4 r = vec4( fract( v * PackFactors ), v );\n\tr.yzw -= r.xyz * ShiftRight8;\treturn r * PackUpscale;\n}\nfloat unpackRGBAToDepth( const in vec4 v ) {\n\treturn dot( v, UnpackFactors );\n}\nvec2 packDepthToRG( in highp float v ) {\n\treturn packDepthToRGBA( v ).yx;\n}\nfloat unpackRGToDepth( const in highp vec2 v ) {\n\treturn unpackRGBAToDepth( vec4( v.xy, 0.0, 0.0 ) );\n}\nvec4 pack2HalfToRGBA( vec2 v ) {\n\tvec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) );\n\treturn vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w );\n}\nvec2 unpackRGBATo2Half( vec4 v ) {\n\treturn vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) );\n}\nfloat viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( viewZ + near ) / ( near - far );\n}\nfloat orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn depth * ( near - far ) - near;\n}\nfloat viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) {\n\treturn ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ );\n}\nfloat perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) {\n\treturn ( near * far ) / ( ( far - near ) * depth - far );\n}";
-
-var premultiplied_alpha_fragment = "#ifdef PREMULTIPLIED_ALPHA\n\tgl_FragColor.rgb *= gl_FragColor.a;\n#endif";
-
-var project_vertex = "vec4 mvPosition = vec4( transformed, 1.0 );\n#ifdef USE_INSTANCING\n\tmvPosition = instanceMatrix * mvPosition;\n#endif\nmvPosition = modelViewMatrix * mvPosition;\ngl_Position = projectionMatrix * mvPosition;";
-
-var dithering_fragment = "#ifdef DITHERING\n\tgl_FragColor.rgb = dithering( gl_FragColor.rgb );\n#endif";
-
-var dithering_pars_fragment = "#ifdef DITHERING\n\tvec3 dithering( vec3 color ) {\n\t\tfloat grid_position = rand( gl_FragCoord.xy );\n\t\tvec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 );\n\t\tdither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position );\n\t\treturn color + dither_shift_RGB;\n\t}\n#endif";
-
-var roughnessmap_fragment = "float roughnessFactor = roughness;\n#ifdef USE_ROUGHNESSMAP\n\tvec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv );\n\troughnessFactor *= texelRoughness.g;\n#endif";
-
-var roughnessmap_pars_fragment = "#ifdef USE_ROUGHNESSMAP\n\tuniform sampler2D roughnessMap;\n#endif";
-
-var shadowmap_pars_fragment = "#if NUM_SPOT_LIGHT_COORDS > 0\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#if NUM_SPOT_LIGHT_MAPS > 0\n\tuniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ];\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform sampler2D pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n\tfloat texture2DCompare( sampler2D depths, vec2 uv, float compare ) {\n\t\treturn step( compare, unpackRGBAToDepth( texture2D( depths, uv ) ) );\n\t}\n\tvec2 texture2DDistribution( sampler2D shadow, vec2 uv ) {\n\t\treturn unpackRGBATo2Half( texture2D( shadow, uv ) );\n\t}\n\tfloat VSMShadow (sampler2D shadow, vec2 uv, float compare ){\n\t\tfloat occlusion = 1.0;\n\t\tvec2 distribution = texture2DDistribution( shadow, uv );\n\t\tfloat hard_shadow = step( compare , distribution.x );\n\t\tif (hard_shadow != 1.0 ) {\n\t\t\tfloat distance = compare - distribution.x ;\n\t\t\tfloat variance = max( 0.00000, distribution.y * distribution.y );\n\t\t\tfloat softness_probability = variance / (variance + distance * distance );\t\t\tsoftness_probability = clamp( ( softness_probability - 0.3 ) / ( 0.95 - 0.3 ), 0.0, 1.0 );\t\t\tocclusion = clamp( max( hard_shadow, softness_probability ), 0.0, 1.0 );\n\t\t}\n\t\treturn occlusion;\n\t}\n\tfloat getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord ) {\n\t\tfloat shadow = 1.0;\n\t\tshadowCoord.xyz /= shadowCoord.w;\n\t\tshadowCoord.z += shadowBias;\n\t\tbool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0;\n\t\tbool frustumTest = inFrustum && shadowCoord.z <= 1.0;\n\t\tif ( frustumTest ) {\n\t\t#if defined( SHADOWMAP_TYPE_PCF )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx0 = - texelSize.x * shadowRadius;\n\t\t\tfloat dy0 = - texelSize.y * shadowRadius;\n\t\t\tfloat dx1 = + texelSize.x * shadowRadius;\n\t\t\tfloat dy1 = + texelSize.y * shadowRadius;\n\t\t\tfloat dx2 = dx0 / 2.0;\n\t\t\tfloat dy2 = dy0 / 2.0;\n\t\t\tfloat dx3 = dx1 / 2.0;\n\t\t\tfloat dy3 = dy1 / 2.0;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy2 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx2, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx3, dy3 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( 0.0, dy1 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, shadowCoord.xy + vec2( dx1, dy1 ), shadowCoord.z )\n\t\t\t) * ( 1.0 / 17.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\n\t\t\tvec2 texelSize = vec2( 1.0 ) / shadowMapSize;\n\t\t\tfloat dx = texelSize.x;\n\t\t\tfloat dy = texelSize.y;\n\t\t\tvec2 uv = shadowCoord.xy;\n\t\t\tvec2 f = fract( uv * shadowMapSize + 0.5 );\n\t\t\tuv -= f * texelSize;\n\t\t\tshadow = (\n\t\t\t\ttexture2DCompare( shadowMap, uv, shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( dx, 0.0 ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + vec2( 0.0, dy ), shadowCoord.z ) +\n\t\t\t\ttexture2DCompare( shadowMap, uv + texelSize, shadowCoord.z ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 0.0 ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( -dx, dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, dy ), shadowCoord.z ),\n\t\t\t\t\t f.x ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( 0.0, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( 0.0, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( texture2DCompare( shadowMap, uv + vec2( dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t texture2DCompare( shadowMap, uv + vec2( dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t f.y ) +\n\t\t\t\tmix( mix( texture2DCompare( shadowMap, uv + vec2( -dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, -dy ), shadowCoord.z ),\n\t\t\t\t\t\t  f.x ),\n\t\t\t\t\t mix( texture2DCompare( shadowMap, uv + vec2( -dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t  texture2DCompare( shadowMap, uv + vec2( 2.0 * dx, 2.0 * dy ), shadowCoord.z ),\n\t\t\t\t\t\t  f.x ),\n\t\t\t\t\t f.y )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#elif defined( SHADOWMAP_TYPE_VSM )\n\t\t\tshadow = VSMShadow( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#else\n\t\t\tshadow = texture2DCompare( shadowMap, shadowCoord.xy, shadowCoord.z );\n\t\t#endif\n\t\t}\n\t\treturn shadow;\n\t}\n\tvec2 cubeToUV( vec3 v, float texelSizeY ) {\n\t\tvec3 absV = abs( v );\n\t\tfloat scaleToCube = 1.0 / max( absV.x, max( absV.y, absV.z ) );\n\t\tabsV *= scaleToCube;\n\t\tv *= scaleToCube * ( 1.0 - 2.0 * texelSizeY );\n\t\tvec2 planar = v.xy;\n\t\tfloat almostATexel = 1.5 * texelSizeY;\n\t\tfloat almostOne = 1.0 - almostATexel;\n\t\tif ( absV.z >= almostOne ) {\n\t\t\tif ( v.z > 0.0 )\n\t\t\t\tplanar.x = 4.0 - v.x;\n\t\t} else if ( absV.x >= almostOne ) {\n\t\t\tfloat signX = sign( v.x );\n\t\t\tplanar.x = v.z * signX + 2.0 * signX;\n\t\t} else if ( absV.y >= almostOne ) {\n\t\t\tfloat signY = sign( v.y );\n\t\t\tplanar.x = v.x + 2.0 * signY + 2.0;\n\t\t\tplanar.y = v.z * signY - 2.0;\n\t\t}\n\t\treturn vec2( 0.125, 0.25 ) * planar + vec2( 0.375, 0.75 );\n\t}\n\tfloat getPointShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) {\n\t\tvec2 texelSize = vec2( 1.0 ) / ( shadowMapSize * vec2( 4.0, 2.0 ) );\n\t\tvec3 lightToPosition = shadowCoord.xyz;\n\t\tfloat dp = ( length( lightToPosition ) - shadowCameraNear ) / ( shadowCameraFar - shadowCameraNear );\t\tdp += shadowBias;\n\t\tvec3 bd3D = normalize( lightToPosition );\n\t\t#if defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_PCF_SOFT ) || defined( SHADOWMAP_TYPE_VSM )\n\t\t\tvec2 offset = vec2( - 1, 1 ) * shadowRadius * texelSize.y;\n\t\t\treturn (\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yyx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxy, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.xxx, texelSize.y ), dp ) +\n\t\t\t\ttexture2DCompare( shadowMap, cubeToUV( bd3D + offset.yxx, texelSize.y ), dp )\n\t\t\t) * ( 1.0 / 9.0 );\n\t\t#else\n\t\t\treturn texture2DCompare( shadowMap, cubeToUV( bd3D, texelSize.y ), dp );\n\t\t#endif\n\t}\n#endif";
-
-var shadowmap_pars_vertex = "#if NUM_SPOT_LIGHT_COORDS > 0\n\tuniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ];\n\tvarying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ];\n#endif\n#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\tuniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tvarying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ];\n\t\tstruct DirectionalLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\t\tstruct SpotLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t};\n\t\tuniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ];\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\tuniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tvarying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ];\n\t\tstruct PointLightShadow {\n\t\t\tfloat shadowBias;\n\t\t\tfloat shadowNormalBias;\n\t\t\tfloat shadowRadius;\n\t\t\tvec2 shadowMapSize;\n\t\t\tfloat shadowCameraNear;\n\t\t\tfloat shadowCameraFar;\n\t\t};\n\t\tuniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ];\n\t#endif\n#endif";
-
-var shadowmap_vertex = "#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 )\n\tvec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix );\n\tvec4 shadowWorldPosition;\n#endif\n#if defined( USE_SHADOWMAP )\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\t\tshadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 );\n\t\t\tvPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition;\n\t\t}\n\t\t#pragma unroll_loop_end\n\t#endif\n#endif\n#if NUM_SPOT_LIGHT_COORDS > 0\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) {\n\t\tshadowWorldPosition = worldPosition;\n\t\t#if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\t\tshadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias;\n\t\t#endif\n\t\tvSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition;\n\t}\n\t#pragma unroll_loop_end\n#endif";
-
-var shadowmask_pars_fragment = "float getShadowMask() {\n\tfloat shadow = 1.0;\n\t#ifdef USE_SHADOWMAP\n\t#if NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) {\n\t\tdirectionalLight = directionalLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) {\n\t\tspotLight = spotLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#if NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLight;\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) {\n\t\tpointLight = pointLightShadows[ i ];\n\t\tshadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0;\n\t}\n\t#pragma unroll_loop_end\n\t#endif\n\t#endif\n\treturn shadow;\n}";
-
-var skinbase_vertex = "#ifdef USE_SKINNING\n\tmat4 boneMatX = getBoneMatrix( skinIndex.x );\n\tmat4 boneMatY = getBoneMatrix( skinIndex.y );\n\tmat4 boneMatZ = getBoneMatrix( skinIndex.z );\n\tmat4 boneMatW = getBoneMatrix( skinIndex.w );\n#endif";
-
-var skinning_pars_vertex = "#ifdef USE_SKINNING\n\tuniform mat4 bindMatrix;\n\tuniform mat4 bindMatrixInverse;\n\tuniform highp sampler2D boneTexture;\n\tuniform int boneTextureSize;\n\tmat4 getBoneMatrix( const in float i ) {\n\t\tfloat j = i * 4.0;\n\t\tfloat x = mod( j, float( boneTextureSize ) );\n\t\tfloat y = floor( j / float( boneTextureSize ) );\n\t\tfloat dx = 1.0 / float( boneTextureSize );\n\t\tfloat dy = 1.0 / float( boneTextureSize );\n\t\ty = dy * ( y + 0.5 );\n\t\tvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\n\t\tvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\n\t\tvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\n\t\tvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\n\t\tmat4 bone = mat4( v1, v2, v3, v4 );\n\t\treturn bone;\n\t}\n#endif";
-
-var skinning_vertex = "#ifdef USE_SKINNING\n\tvec4 skinVertex = bindMatrix * vec4( transformed, 1.0 );\n\tvec4 skinned = vec4( 0.0 );\n\tskinned += boneMatX * skinVertex * skinWeight.x;\n\tskinned += boneMatY * skinVertex * skinWeight.y;\n\tskinned += boneMatZ * skinVertex * skinWeight.z;\n\tskinned += boneMatW * skinVertex * skinWeight.w;\n\ttransformed = ( bindMatrixInverse * skinned ).xyz;\n#endif";
-
-var skinnormal_vertex = "#ifdef USE_SKINNING\n\tmat4 skinMatrix = mat4( 0.0 );\n\tskinMatrix += skinWeight.x * boneMatX;\n\tskinMatrix += skinWeight.y * boneMatY;\n\tskinMatrix += skinWeight.z * boneMatZ;\n\tskinMatrix += skinWeight.w * boneMatW;\n\tskinMatrix = bindMatrixInverse * skinMatrix * bindMatrix;\n\tobjectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif";
-
-var specularmap_fragment = "float specularStrength;\n#ifdef USE_SPECULARMAP\n\tvec4 texelSpecular = texture2D( specularMap, vSpecularMapUv );\n\tspecularStrength = texelSpecular.r;\n#else\n\tspecularStrength = 1.0;\n#endif";
-
-var specularmap_pars_fragment = "#ifdef USE_SPECULARMAP\n\tuniform sampler2D specularMap;\n#endif";
-
-var tonemapping_fragment = "#if defined( TONE_MAPPING )\n\tgl_FragColor.rgb = toneMapping( gl_FragColor.rgb );\n#endif";
-
-var tonemapping_pars_fragment = "#ifndef saturate\n#define saturate( a ) clamp( a, 0.0, 1.0 )\n#endif\nuniform float toneMappingExposure;\nvec3 LinearToneMapping( vec3 color ) {\n\treturn toneMappingExposure * color;\n}\nvec3 ReinhardToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\treturn saturate( color / ( vec3( 1.0 ) + color ) );\n}\nvec3 OptimizedCineonToneMapping( vec3 color ) {\n\tcolor *= toneMappingExposure;\n\tcolor = max( vec3( 0.0 ), color - 0.004 );\n\treturn pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) );\n}\nvec3 RRTAndODTFit( vec3 v ) {\n\tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n\tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n\treturn a / b;\n}\nvec3 ACESFilmicToneMapping( vec3 color ) {\n\tconst mat3 ACESInputMat = mat3(\n\t\tvec3( 0.59719, 0.07600, 0.02840 ),\t\tvec3( 0.35458, 0.90834, 0.13383 ),\n\t\tvec3( 0.04823, 0.01566, 0.83777 )\n\t);\n\tconst mat3 ACESOutputMat = mat3(\n\t\tvec3(  1.60475, -0.10208, -0.00327 ),\t\tvec3( -0.53108,  1.10813, -0.07276 ),\n\t\tvec3( -0.07367, -0.00605,  1.07602 )\n\t);\n\tcolor *= toneMappingExposure / 0.6;\n\tcolor = ACESInputMat * color;\n\tcolor = RRTAndODTFit( color );\n\tcolor = ACESOutputMat * color;\n\treturn saturate( color );\n}\nvec3 CustomToneMapping( vec3 color ) { return color; }";
-
-var transmission_fragment = "#ifdef USE_TRANSMISSION\n\tmaterial.transmission = transmission;\n\tmaterial.transmissionAlpha = 1.0;\n\tmaterial.thickness = thickness;\n\tmaterial.attenuationDistance = attenuationDistance;\n\tmaterial.attenuationColor = attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tmaterial.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tmaterial.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g;\n\t#endif\n\tvec3 pos = vWorldPosition;\n\tvec3 v = normalize( cameraPosition - pos );\n\tvec3 n = inverseTransformDirection( normal, viewMatrix );\n\tvec4 transmission = getIBLVolumeRefraction(\n\t\tn, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n\t\tpos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness,\n\t\tmaterial.attenuationColor, material.attenuationDistance );\n\tmaterial.transmissionAlpha = mix( material.transmissionAlpha, transmission.a, material.transmission );\n\ttotalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );\n#endif";
-
-var transmission_pars_fragment = "#ifdef USE_TRANSMISSION\n\tuniform float transmission;\n\tuniform float thickness;\n\tuniform float attenuationDistance;\n\tuniform vec3 attenuationColor;\n\t#ifdef USE_TRANSMISSIONMAP\n\t\tuniform sampler2D transmissionMap;\n\t#endif\n\t#ifdef USE_THICKNESSMAP\n\t\tuniform sampler2D thicknessMap;\n\t#endif\n\tuniform vec2 transmissionSamplerSize;\n\tuniform sampler2D transmissionSamplerMap;\n\tuniform mat4 modelMatrix;\n\tuniform mat4 projectionMatrix;\n\tvarying vec3 vWorldPosition;\n\tfloat w0( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 );\n\t}\n\tfloat w1( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a *  a * ( 3.0 * a - 6.0 ) + 4.0 );\n\t}\n\tfloat w2( float a ){\n\t\treturn ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 );\n\t}\n\tfloat w3( float a ) {\n\t\treturn ( 1.0 / 6.0 ) * ( a * a * a );\n\t}\n\tfloat g0( float a ) {\n\t\treturn w0( a ) + w1( a );\n\t}\n\tfloat g1( float a ) {\n\t\treturn w2( a ) + w3( a );\n\t}\n\tfloat h0( float a ) {\n\t\treturn - 1.0 + w1( a ) / ( w0( a ) + w1( a ) );\n\t}\n\tfloat h1( float a ) {\n\t\treturn 1.0 + w3( a ) / ( w2( a ) + w3( a ) );\n\t}\n\tvec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) {\n\t\tuv = uv * texelSize.zw + 0.5;\n\t\tvec2 iuv = floor( uv );\n\t\tvec2 fuv = fract( uv );\n\t\tfloat g0x = g0( fuv.x );\n\t\tfloat g1x = g1( fuv.x );\n\t\tfloat h0x = h0( fuv.x );\n\t\tfloat h1x = h1( fuv.x );\n\t\tfloat h0y = h0( fuv.y );\n\t\tfloat h1y = h1( fuv.y );\n\t\tvec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\tvec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy;\n\t\treturn g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) +\n\t\t\tg1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) );\n\t}\n\tvec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) {\n\t\tvec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) );\n\t\tvec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) );\n\t\tvec2 fLodSizeInv = 1.0 / fLodSize;\n\t\tvec2 cLodSizeInv = 1.0 / cLodSize;\n\t\tvec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) );\n\t\tvec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) );\n\t\treturn mix( fSample, cSample, fract( lod ) );\n\t}\n\tvec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n\t\tvec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n\t\tvec3 modelScale;\n\t\tmodelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n\t\tmodelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n\t\tmodelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n\t\treturn normalize( refractionVector ) * thickness * modelScale;\n\t}\n\tfloat applyIorToRoughness( const in float roughness, const in float ior ) {\n\t\treturn roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n\t}\n\tvec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n\t\tfloat lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior );\n\t\treturn textureBicubic( transmissionSamplerMap, fragCoord.xy, lod );\n\t}\n\tvec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tif ( isinf( attenuationDistance ) ) {\n\t\t\treturn radiance;\n\t\t} else {\n\t\t\tvec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n\t\t\tvec3 transmittance = exp( - attenuationCoefficient * transmissionDistance );\t\t\treturn transmittance * radiance;\n\t\t}\n\t}\n\tvec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n\t\tconst in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n\t\tconst in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\n\t\tconst in vec3 attenuationColor, const in float attenuationDistance ) {\n\t\tvec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n\t\tvec3 refractedRayExit = position + transmissionRay;\n\t\tvec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n\t\tvec2 refractionCoords = ndcPos.xy / ndcPos.w;\n\t\trefractionCoords += 1.0;\n\t\trefractionCoords /= 2.0;\n\t\tvec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n\t\tvec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n\t\tvec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n\t\treturn vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n\t}\n#endif";
-
-var uv_pars_fragment = "#ifdef USE_UV\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif";
-
-var uv_pars_vertex = "#ifdef USE_UV\n\tvarying vec2 vUv;\n#endif\n#ifdef USE_MAP\n\tuniform mat3 mapTransform;\n\tvarying vec2 vMapUv;\n#endif\n#ifdef USE_ALPHAMAP\n\tuniform mat3 alphaMapTransform;\n\tvarying vec2 vAlphaMapUv;\n#endif\n#ifdef USE_LIGHTMAP\n\tuniform mat3 lightMapTransform;\n\tvarying vec2 vLightMapUv;\n#endif\n#ifdef USE_AOMAP\n\tuniform mat3 aoMapTransform;\n\tvarying vec2 vAoMapUv;\n#endif\n#ifdef USE_BUMPMAP\n\tuniform mat3 bumpMapTransform;\n\tvarying vec2 vBumpMapUv;\n#endif\n#ifdef USE_NORMALMAP\n\tuniform mat3 normalMapTransform;\n\tvarying vec2 vNormalMapUv;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tuniform mat3 displacementMapTransform;\n\tvarying vec2 vDisplacementMapUv;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tuniform mat3 emissiveMapTransform;\n\tvarying vec2 vEmissiveMapUv;\n#endif\n#ifdef USE_METALNESSMAP\n\tuniform mat3 metalnessMapTransform;\n\tvarying vec2 vMetalnessMapUv;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tuniform mat3 roughnessMapTransform;\n\tvarying vec2 vRoughnessMapUv;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tuniform mat3 clearcoatMapTransform;\n\tvarying vec2 vClearcoatMapUv;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tuniform mat3 clearcoatNormalMapTransform;\n\tvarying vec2 vClearcoatNormalMapUv;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tuniform mat3 clearcoatRoughnessMapTransform;\n\tvarying vec2 vClearcoatRoughnessMapUv;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tuniform mat3 sheenColorMapTransform;\n\tvarying vec2 vSheenColorMapUv;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tuniform mat3 sheenRoughnessMapTransform;\n\tvarying vec2 vSheenRoughnessMapUv;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tuniform mat3 iridescenceMapTransform;\n\tvarying vec2 vIridescenceMapUv;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tuniform mat3 iridescenceThicknessMapTransform;\n\tvarying vec2 vIridescenceThicknessMapUv;\n#endif\n#ifdef USE_SPECULARMAP\n\tuniform mat3 specularMapTransform;\n\tvarying vec2 vSpecularMapUv;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tuniform mat3 specularColorMapTransform;\n\tvarying vec2 vSpecularColorMapUv;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tuniform mat3 specularIntensityMapTransform;\n\tvarying vec2 vSpecularIntensityMapUv;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tuniform mat3 transmissionMapTransform;\n\tvarying vec2 vTransmissionMapUv;\n#endif\n#ifdef USE_THICKNESSMAP\n\tuniform mat3 thicknessMapTransform;\n\tvarying vec2 vThicknessMapUv;\n#endif";
-
-var uv_vertex = "#ifdef USE_UV\n\tvUv = vec3( uv, 1 ).xy;\n#endif\n#ifdef USE_MAP\n\tvMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ALPHAMAP\n\tvAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_LIGHTMAP\n\tvLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_AOMAP\n\tvAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_BUMPMAP\n\tvBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_NORMALMAP\n\tvNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_DISPLACEMENTMAP\n\tvDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_EMISSIVEMAP\n\tvEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_METALNESSMAP\n\tvMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_ROUGHNESSMAP\n\tvRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOATMAP\n\tvClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_NORMALMAP\n\tvClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_CLEARCOAT_ROUGHNESSMAP\n\tvClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCEMAP\n\tvIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_IRIDESCENCE_THICKNESSMAP\n\tvIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_COLORMAP\n\tvSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SHEEN_ROUGHNESSMAP\n\tvSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULARMAP\n\tvSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_COLORMAP\n\tvSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_SPECULAR_INTENSITYMAP\n\tvSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_TRANSMISSIONMAP\n\tvTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy;\n#endif\n#ifdef USE_THICKNESSMAP\n\tvThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy;\n#endif";
-
-var worldpos_vertex = "#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0\n\tvec4 worldPosition = vec4( transformed, 1.0 );\n\t#ifdef USE_INSTANCING\n\t\tworldPosition = instanceMatrix * worldPosition;\n\t#endif\n\tworldPosition = modelMatrix * worldPosition;\n#endif";
-
-const vertex$h = "varying vec2 vUv;\nuniform mat3 uvTransform;\nvoid main() {\n\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\tgl_Position = vec4( position.xy, 1.0, 1.0 );\n}";
-
-const fragment$h = "uniform sampler2D t2D;\nuniform float backgroundIntensity;\nvarying vec2 vUv;\nvoid main() {\n\tvec4 texColor = texture2D( t2D, vUv );\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}";
-
-const vertex$g = "varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}";
-
-const fragment$g = "#ifdef ENVMAP_TYPE_CUBE\n\tuniform samplerCube envMap;\n#elif defined( ENVMAP_TYPE_CUBE_UV )\n\tuniform sampler2D envMap;\n#endif\nuniform float flipEnvMap;\nuniform float backgroundBlurriness;\nuniform float backgroundIntensity;\nvarying vec3 vWorldDirection;\n#include <cube_uv_reflection_fragment>\nvoid main() {\n\t#ifdef ENVMAP_TYPE_CUBE\n\t\tvec4 texColor = textureCube( envMap, vec3( flipEnvMap * vWorldDirection.x, vWorldDirection.yz ) );\n\t#elif defined( ENVMAP_TYPE_CUBE_UV )\n\t\tvec4 texColor = textureCubeUV( envMap, vWorldDirection, backgroundBlurriness );\n\t#else\n\t\tvec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 );\n\t#endif\n\ttexColor.rgb *= backgroundIntensity;\n\tgl_FragColor = texColor;\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}";
-
-const vertex$f = "varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n\tgl_Position.z = gl_Position.w;\n}";
-
-const fragment$f = "uniform samplerCube tCube;\nuniform float tFlip;\nuniform float opacity;\nvarying vec3 vWorldDirection;\nvoid main() {\n\tvec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) );\n\tgl_FragColor = texColor;\n\tgl_FragColor.a *= opacity;\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}";
-
-const vertex$e = "#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvHighPrecisionZW = gl_Position.zw;\n}";
-
-const fragment$e = "#if DEPTH_PACKING == 3200\n\tuniform float opacity;\n#endif\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvarying vec2 vHighPrecisionZW;\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#if DEPTH_PACKING == 3200\n\t\tdiffuseColor.a = opacity;\n\t#endif\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <logdepthbuf_fragment>\n\tfloat fragCoordZ = 0.5 * vHighPrecisionZW[0] / vHighPrecisionZW[1] + 0.5;\n\t#if DEPTH_PACKING == 3200\n\t\tgl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity );\n\t#elif DEPTH_PACKING == 3201\n\t\tgl_FragColor = packDepthToRGBA( fragCoordZ );\n\t#endif\n}";
-
-const vertex$d = "#define DISTANCE\nvarying vec3 vWorldPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <skinbase_vertex>\n\t#ifdef USE_DISPLACEMENTMAP\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <worldpos_vertex>\n\t#include <clipping_planes_vertex>\n\tvWorldPosition = worldPosition.xyz;\n}";
-
-const fragment$d = "#define DISTANCE\nuniform vec3 referencePosition;\nuniform float nearDistance;\nuniform float farDistance;\nvarying vec3 vWorldPosition;\n#include <common>\n#include <packing>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main () {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( 1.0 );\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\tfloat dist = length( vWorldPosition - referencePosition );\n\tdist = ( dist - nearDistance ) / ( farDistance - nearDistance );\n\tdist = saturate( dist );\n\tgl_FragColor = packDepthToRGBA( dist );\n}";
-
-const vertex$c = "varying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvWorldDirection = transformDirection( position, modelMatrix );\n\t#include <begin_vertex>\n\t#include <project_vertex>\n}";
-
-const fragment$c = "uniform sampler2D tEquirect;\nvarying vec3 vWorldDirection;\n#include <common>\nvoid main() {\n\tvec3 direction = normalize( vWorldDirection );\n\tvec2 sampleUV = equirectUv( direction );\n\tgl_FragColor = texture2D( tEquirect, sampleUV );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n}";
-
-const vertex$b = "uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;\n#include <common>\n#include <uv_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\tvLineDistance = scale * lineDistance;\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}";
-
-const fragment$b = "uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;\n#include <common>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tif ( mod( vLineDistance, totalSize ) > dashSize ) {\n\t\tdiscard;\n\t}\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}";
-
-const vertex$a = "#include <common>\n#include <uv_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#if defined ( USE_ENVMAP ) || defined ( USE_SKINNING )\n\t\t#include <beginnormal_vertex>\n\t\t#include <morphnormal_vertex>\n\t\t#include <skinbase_vertex>\n\t\t#include <skinnormal_vertex>\n\t\t#include <defaultnormal_vertex>\n\t#endif\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <fog_vertex>\n}";
-
-const fragment$a = "uniform vec3 diffuse;\nuniform float opacity;\n#ifndef FLAT_SHADED\n\tvarying vec3 vNormal;\n#endif\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\t#ifdef USE_LIGHTMAP\n\t\tvec4 lightMapTexel = texture2D( lightMap, vLightMapUv );\n\t\treflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI;\n\t#else\n\t\treflectedLight.indirectDiffuse += vec3( 1.0 );\n\t#endif\n\t#include <aomap_fragment>\n\treflectedLight.indirectDiffuse *= diffuseColor.rgb;\n\tvec3 outgoingLight = reflectedLight.indirectDiffuse;\n\t#include <envmap_fragment>\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}";
-
-const vertex$9 = "#define LAMBERT\nvarying vec3 vViewPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}";
-
-const fragment$9 = "#define LAMBERT\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_lambert_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_lambert_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}";
-
-const vertex$8 = "#define MATCAP\nvarying vec3 vViewPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <color_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n\tvViewPosition = - mvPosition.xyz;\n}";
-
-const fragment$8 = "#define MATCAP\nuniform vec3 diffuse;\nuniform float opacity;\nuniform sampler2D matcap;\nvarying vec3 vViewPosition;\n#include <common>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <fog_pars_fragment>\n#include <normal_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tvec3 viewDir = normalize( vViewPosition );\n\tvec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) );\n\tvec3 y = cross( viewDir, x );\n\tvec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5;\n\t#ifdef USE_MATCAP\n\t\tvec4 matcapColor = texture2D( matcap, uv );\n\t#else\n\t\tvec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 );\n\t#endif\n\tvec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb;\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}";
-
-const vertex$7 = "#define NORMAL\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvViewPosition = - mvPosition.xyz;\n#endif\n}";
-
-const fragment$7 = "#define NORMAL\nuniform float opacity;\n#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE )\n\tvarying vec3 vViewPosition;\n#endif\n#include <packing>\n#include <uv_pars_fragment>\n#include <normal_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\t#include <logdepthbuf_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\tgl_FragColor = vec4( packNormalToRGB( normal ), opacity );\n\t#ifdef OPAQUE\n\t\tgl_FragColor.a = 1.0;\n\t#endif\n}";
-
-const vertex$6 = "#define PHONG\nvarying vec3 vViewPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <envmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <envmap_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}";
-
-const fragment$6 = "#define PHONG\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_phong_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <specularmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <specularmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_phong_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\n\t#include <envmap_fragment>\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}";
-
-const vertex$5 = "#define STANDARD\nvarying vec3 vViewPosition;\n#ifdef USE_TRANSMISSION\n\tvarying vec3 vWorldPosition;\n#endif\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n#ifdef USE_TRANSMISSION\n\tvWorldPosition = worldPosition.xyz;\n#endif\n}";
-
-const fragment$5 = "#define STANDARD\n#ifdef PHYSICAL\n\t#define IOR\n\t#define USE_SPECULAR\n#endif\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float roughness;\nuniform float metalness;\nuniform float opacity;\n#ifdef IOR\n\tuniform float ior;\n#endif\n#ifdef USE_SPECULAR\n\tuniform float specularIntensity;\n\tuniform vec3 specularColor;\n\t#ifdef USE_SPECULAR_COLORMAP\n\t\tuniform sampler2D specularColorMap;\n\t#endif\n\t#ifdef USE_SPECULAR_INTENSITYMAP\n\t\tuniform sampler2D specularIntensityMap;\n\t#endif\n#endif\n#ifdef USE_CLEARCOAT\n\tuniform float clearcoat;\n\tuniform float clearcoatRoughness;\n#endif\n#ifdef USE_IRIDESCENCE\n\tuniform float iridescence;\n\tuniform float iridescenceIOR;\n\tuniform float iridescenceThicknessMinimum;\n\tuniform float iridescenceThicknessMaximum;\n#endif\n#ifdef USE_SHEEN\n\tuniform vec3 sheenColor;\n\tuniform float sheenRoughness;\n\t#ifdef USE_SHEEN_COLORMAP\n\t\tuniform sampler2D sheenColorMap;\n\t#endif\n\t#ifdef USE_SHEEN_ROUGHNESSMAP\n\t\tuniform sampler2D sheenRoughnessMap;\n\t#endif\n#endif\nvarying vec3 vViewPosition;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <iridescence_fragment>\n#include <cube_uv_reflection_fragment>\n#include <envmap_common_pars_fragment>\n#include <envmap_physical_pars_fragment>\n#include <fog_pars_fragment>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_physical_pars_fragment>\n#include <transmission_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <clearcoat_pars_fragment>\n#include <iridescence_pars_fragment>\n#include <roughnessmap_pars_fragment>\n#include <metalnessmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <roughnessmap_fragment>\n\t#include <metalnessmap_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <clearcoat_normal_fragment_begin>\n\t#include <clearcoat_normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_physical_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse;\n\tvec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular;\n\t#include <transmission_fragment>\n\tvec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance;\n\t#ifdef USE_SHEEN\n\t\tfloat sheenEnergyComp = 1.0 - 0.157 * max3( material.sheenColor );\n\t\toutgoingLight = outgoingLight * sheenEnergyComp + sheenSpecular;\n\t#endif\n\t#ifdef USE_CLEARCOAT\n\t\tfloat dotNVcc = saturate( dot( geometry.clearcoatNormal, geometry.viewDir ) );\n\t\tvec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc );\n\t\toutgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + clearcoatSpecular * material.clearcoat;\n\t#endif\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}";
-
-const vertex$4 = "#define TOON\nvarying vec3 vViewPosition;\n#include <common>\n#include <uv_pars_vertex>\n#include <displacementmap_pars_vertex>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <normal_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <shadowmap_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <normal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <displacementmap_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\tvViewPosition = - mvPosition.xyz;\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}";
-
-const fragment$4 = "#define TOON\nuniform vec3 diffuse;\nuniform vec3 emissive;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <dithering_pars_fragment>\n#include <color_pars_fragment>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <aomap_pars_fragment>\n#include <lightmap_pars_fragment>\n#include <emissivemap_pars_fragment>\n#include <gradientmap_pars_fragment>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <normal_pars_fragment>\n#include <lights_toon_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <bumpmap_pars_fragment>\n#include <normalmap_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\tReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\n\tvec3 totalEmissiveRadiance = emissive;\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <color_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\t#include <normal_fragment_begin>\n\t#include <normal_fragment_maps>\n\t#include <emissivemap_fragment>\n\t#include <lights_toon_fragment>\n\t#include <lights_fragment_begin>\n\t#include <lights_fragment_maps>\n\t#include <lights_fragment_end>\n\t#include <aomap_fragment>\n\tvec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance;\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n\t#include <dithering_fragment>\n}";
-
-const vertex$3 = "uniform float size;\nuniform float scale;\n#include <common>\n#include <color_pars_vertex>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\n#ifdef USE_POINTS_UV\n\tvarying vec2 vUv;\n\tuniform mat3 uvTransform;\n#endif\nvoid main() {\n\t#ifdef USE_POINTS_UV\n\t\tvUv = ( uvTransform * vec3( uv, 1 ) ).xy;\n\t#endif\n\t#include <color_vertex>\n\t#include <morphcolor_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <project_vertex>\n\tgl_PointSize = size;\n\t#ifdef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z );\n\t#endif\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <worldpos_vertex>\n\t#include <fog_vertex>\n}";
-
-const fragment$3 = "uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <color_pars_fragment>\n#include <map_particle_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_particle_fragment>\n\t#include <color_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n\t#include <premultiplied_alpha_fragment>\n}";
-
-const vertex$2 = "#include <common>\n#include <fog_pars_vertex>\n#include <morphtarget_pars_vertex>\n#include <skinning_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <shadowmap_pars_vertex>\nvoid main() {\n\t#include <beginnormal_vertex>\n\t#include <morphnormal_vertex>\n\t#include <skinbase_vertex>\n\t#include <skinnormal_vertex>\n\t#include <defaultnormal_vertex>\n\t#include <begin_vertex>\n\t#include <morphtarget_vertex>\n\t#include <skinning_vertex>\n\t#include <project_vertex>\n\t#include <logdepthbuf_vertex>\n\t#include <worldpos_vertex>\n\t#include <shadowmap_vertex>\n\t#include <fog_vertex>\n}";
-
-const fragment$2 = "uniform vec3 color;\nuniform float opacity;\n#include <common>\n#include <packing>\n#include <fog_pars_fragment>\n#include <bsdfs>\n#include <lights_pars_begin>\n#include <logdepthbuf_pars_fragment>\n#include <shadowmap_pars_fragment>\n#include <shadowmask_pars_fragment>\nvoid main() {\n\t#include <logdepthbuf_fragment>\n\tgl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) );\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}";
-
-const vertex$1 = "uniform float rotation;\nuniform vec2 center;\n#include <common>\n#include <uv_pars_vertex>\n#include <fog_pars_vertex>\n#include <logdepthbuf_pars_vertex>\n#include <clipping_planes_pars_vertex>\nvoid main() {\n\t#include <uv_vertex>\n\tvec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec2 scale;\n\tscale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n\tscale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\t#ifndef USE_SIZEATTENUATION\n\t\tbool isPerspective = isPerspectiveMatrix( projectionMatrix );\n\t\tif ( isPerspective ) scale *= - mvPosition.z;\n\t#endif\n\tvec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale;\n\tvec2 rotatedPosition;\n\trotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n\trotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n\tmvPosition.xy += rotatedPosition;\n\tgl_Position = projectionMatrix * mvPosition;\n\t#include <logdepthbuf_vertex>\n\t#include <clipping_planes_vertex>\n\t#include <fog_vertex>\n}";
-
-const fragment$1 = "uniform vec3 diffuse;\nuniform float opacity;\n#include <common>\n#include <uv_pars_fragment>\n#include <map_pars_fragment>\n#include <alphamap_pars_fragment>\n#include <alphatest_pars_fragment>\n#include <fog_pars_fragment>\n#include <logdepthbuf_pars_fragment>\n#include <clipping_planes_pars_fragment>\nvoid main() {\n\t#include <clipping_planes_fragment>\n\tvec3 outgoingLight = vec3( 0.0 );\n\tvec4 diffuseColor = vec4( diffuse, opacity );\n\t#include <logdepthbuf_fragment>\n\t#include <map_fragment>\n\t#include <alphamap_fragment>\n\t#include <alphatest_fragment>\n\toutgoingLight = diffuseColor.rgb;\n\t#include <output_fragment>\n\t#include <tonemapping_fragment>\n\t#include <encodings_fragment>\n\t#include <fog_fragment>\n}";
-
-const ShaderChunk = {
-	alphamap_fragment: alphamap_fragment,
-	alphamap_pars_fragment: alphamap_pars_fragment,
-	alphatest_fragment: alphatest_fragment,
-	alphatest_pars_fragment: alphatest_pars_fragment,
-	aomap_fragment: aomap_fragment,
-	aomap_pars_fragment: aomap_pars_fragment,
-	begin_vertex: begin_vertex,
-	beginnormal_vertex: beginnormal_vertex,
-	bsdfs: bsdfs,
-	iridescence_fragment: iridescence_fragment,
-	bumpmap_pars_fragment: bumpmap_pars_fragment,
-	clipping_planes_fragment: clipping_planes_fragment,
-	clipping_planes_pars_fragment: clipping_planes_pars_fragment,
-	clipping_planes_pars_vertex: clipping_planes_pars_vertex,
-	clipping_planes_vertex: clipping_planes_vertex,
-	color_fragment: color_fragment,
-	color_pars_fragment: color_pars_fragment,
-	color_pars_vertex: color_pars_vertex,
-	color_vertex: color_vertex,
-	common: common,
-	cube_uv_reflection_fragment: cube_uv_reflection_fragment,
-	defaultnormal_vertex: defaultnormal_vertex,
-	displacementmap_pars_vertex: displacementmap_pars_vertex,
-	displacementmap_vertex: displacementmap_vertex,
-	emissivemap_fragment: emissivemap_fragment,
-	emissivemap_pars_fragment: emissivemap_pars_fragment,
-	encodings_fragment: encodings_fragment,
-	encodings_pars_fragment: encodings_pars_fragment,
-	envmap_fragment: envmap_fragment,
-	envmap_common_pars_fragment: envmap_common_pars_fragment,
-	envmap_pars_fragment: envmap_pars_fragment,
-	envmap_pars_vertex: envmap_pars_vertex,
-	envmap_physical_pars_fragment: envmap_physical_pars_fragment,
-	envmap_vertex: envmap_vertex,
-	fog_vertex: fog_vertex,
-	fog_pars_vertex: fog_pars_vertex,
-	fog_fragment: fog_fragment,
-	fog_pars_fragment: fog_pars_fragment,
-	gradientmap_pars_fragment: gradientmap_pars_fragment,
-	lightmap_fragment: lightmap_fragment,
-	lightmap_pars_fragment: lightmap_pars_fragment,
-	lights_lambert_fragment: lights_lambert_fragment,
-	lights_lambert_pars_fragment: lights_lambert_pars_fragment,
-	lights_pars_begin: lights_pars_begin,
-	lights_toon_fragment: lights_toon_fragment,
-	lights_toon_pars_fragment: lights_toon_pars_fragment,
-	lights_phong_fragment: lights_phong_fragment,
-	lights_phong_pars_fragment: lights_phong_pars_fragment,
-	lights_physical_fragment: lights_physical_fragment,
-	lights_physical_pars_fragment: lights_physical_pars_fragment,
-	lights_fragment_begin: lights_fragment_begin,
-	lights_fragment_maps: lights_fragment_maps,
-	lights_fragment_end: lights_fragment_end,
-	logdepthbuf_fragment: logdepthbuf_fragment,
-	logdepthbuf_pars_fragment: logdepthbuf_pars_fragment,
-	logdepthbuf_pars_vertex: logdepthbuf_pars_vertex,
-	logdepthbuf_vertex: logdepthbuf_vertex,
-	map_fragment: map_fragment,
-	map_pars_fragment: map_pars_fragment,
-	map_particle_fragment: map_particle_fragment,
-	map_particle_pars_fragment: map_particle_pars_fragment,
-	metalnessmap_fragment: metalnessmap_fragment,
-	metalnessmap_pars_fragment: metalnessmap_pars_fragment,
-	morphcolor_vertex: morphcolor_vertex,
-	morphnormal_vertex: morphnormal_vertex,
-	morphtarget_pars_vertex: morphtarget_pars_vertex,
-	morphtarget_vertex: morphtarget_vertex,
-	normal_fragment_begin: normal_fragment_begin,
-	normal_fragment_maps: normal_fragment_maps,
-	normal_pars_fragment: normal_pars_fragment,
-	normal_pars_vertex: normal_pars_vertex,
-	normal_vertex: normal_vertex,
-	normalmap_pars_fragment: normalmap_pars_fragment,
-	clearcoat_normal_fragment_begin: clearcoat_normal_fragment_begin,
-	clearcoat_normal_fragment_maps: clearcoat_normal_fragment_maps,
-	clearcoat_pars_fragment: clearcoat_pars_fragment,
-	iridescence_pars_fragment: iridescence_pars_fragment,
-	output_fragment: output_fragment,
-	packing: packing,
-	premultiplied_alpha_fragment: premultiplied_alpha_fragment,
-	project_vertex: project_vertex,
-	dithering_fragment: dithering_fragment,
-	dithering_pars_fragment: dithering_pars_fragment,
-	roughnessmap_fragment: roughnessmap_fragment,
-	roughnessmap_pars_fragment: roughnessmap_pars_fragment,
-	shadowmap_pars_fragment: shadowmap_pars_fragment,
-	shadowmap_pars_vertex: shadowmap_pars_vertex,
-	shadowmap_vertex: shadowmap_vertex,
-	shadowmask_pars_fragment: shadowmask_pars_fragment,
-	skinbase_vertex: skinbase_vertex,
-	skinning_pars_vertex: skinning_pars_vertex,
-	skinning_vertex: skinning_vertex,
-	skinnormal_vertex: skinnormal_vertex,
-	specularmap_fragment: specularmap_fragment,
-	specularmap_pars_fragment: specularmap_pars_fragment,
-	tonemapping_fragment: tonemapping_fragment,
-	tonemapping_pars_fragment: tonemapping_pars_fragment,
-	transmission_fragment: transmission_fragment,
-	transmission_pars_fragment: transmission_pars_fragment,
-	uv_pars_fragment: uv_pars_fragment,
-	uv_pars_vertex: uv_pars_vertex,
-	uv_vertex: uv_vertex,
-	worldpos_vertex: worldpos_vertex,
-
-	background_vert: vertex$h,
-	background_frag: fragment$h,
-	backgroundCube_vert: vertex$g,
-	backgroundCube_frag: fragment$g,
-	cube_vert: vertex$f,
-	cube_frag: fragment$f,
-	depth_vert: vertex$e,
-	depth_frag: fragment$e,
-	distanceRGBA_vert: vertex$d,
-	distanceRGBA_frag: fragment$d,
-	equirect_vert: vertex$c,
-	equirect_frag: fragment$c,
-	linedashed_vert: vertex$b,
-	linedashed_frag: fragment$b,
-	meshbasic_vert: vertex$a,
-	meshbasic_frag: fragment$a,
-	meshlambert_vert: vertex$9,
-	meshlambert_frag: fragment$9,
-	meshmatcap_vert: vertex$8,
-	meshmatcap_frag: fragment$8,
-	meshnormal_vert: vertex$7,
-	meshnormal_frag: fragment$7,
-	meshphong_vert: vertex$6,
-	meshphong_frag: fragment$6,
-	meshphysical_vert: vertex$5,
-	meshphysical_frag: fragment$5,
-	meshtoon_vert: vertex$4,
-	meshtoon_frag: fragment$4,
-	points_vert: vertex$3,
-	points_frag: fragment$3,
-	shadow_vert: vertex$2,
-	shadow_frag: fragment$2,
-	sprite_vert: vertex$1,
-	sprite_frag: fragment$1
-};
-
-/**
- * Uniforms library for shared webgl shaders
- */
-
-const UniformsLib = {
-
-	common: {
-
-		diffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },
-		opacity: { value: 1.0 },
-
-		map: { value: null },
-		mapTransform: { value: /*@__PURE__*/ new Matrix3() },
-
-		alphaMap: { value: null },
-		alphaMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-
-		alphaTest: { value: 0 }
-
-	},
-
-	specularmap: {
-
-		specularMap: { value: null },
-		specularMapTransform: { value: /*@__PURE__*/ new Matrix3() }
-
-	},
-
-	envmap: {
-
-		envMap: { value: null },
-		flipEnvMap: { value: - 1 },
-		reflectivity: { value: 1.0 }, // basic, lambert, phong
-		ior: { value: 1.5 }, // physical
-		refractionRatio: { value: 0.98 }, // basic, lambert, phong
-
-	},
-
-	aomap: {
-
-		aoMap: { value: null },
-		aoMapIntensity: { value: 1 },
-		aoMapTransform: { value: /*@__PURE__*/ new Matrix3() }
-
-	},
-
-	lightmap: {
-
-		lightMap: { value: null },
-		lightMapIntensity: { value: 1 },
-		lightMapTransform: { value: /*@__PURE__*/ new Matrix3() }
-
-	},
-
-	bumpmap: {
-
-		bumpMap: { value: null },
-		bumpMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-		bumpScale: { value: 1 }
-
-	},
-
-	normalmap: {
-
-		normalMap: { value: null },
-		normalMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-		normalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) }
-
-	},
-
-	displacementmap: {
-
-		displacementMap: { value: null },
-		displacementMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-		displacementScale: { value: 1 },
-		displacementBias: { value: 0 }
-
-	},
-
-	emissivemap: {
-
-		emissiveMap: { value: null },
-		emissiveMapTransform: { value: /*@__PURE__*/ new Matrix3() }
-
-	},
-
-	metalnessmap: {
-
-		metalnessMap: { value: null },
-		metalnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }
-
-	},
-
-	roughnessmap: {
-
-		roughnessMap: { value: null },
-		roughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() }
-
-	},
-
-	gradientmap: {
-
-		gradientMap: { value: null }
-
-	},
-
-	fog: {
-
-		fogDensity: { value: 0.00025 },
-		fogNear: { value: 1 },
-		fogFar: { value: 2000 },
-		fogColor: { value: /*@__PURE__*/ new Color( 0xffffff ) }
-
-	},
-
-	lights: {
-
-		ambientLightColor: { value: [] },
-
-		lightProbe: { value: [] },
-
-		directionalLights: { value: [], properties: {
-			direction: {},
-			color: {}
-		} },
-
-		directionalLightShadows: { value: [], properties: {
-			shadowBias: {},
-			shadowNormalBias: {},
-			shadowRadius: {},
-			shadowMapSize: {}
-		} },
-
-		directionalShadowMap: { value: [] },
-		directionalShadowMatrix: { value: [] },
-
-		spotLights: { value: [], properties: {
-			color: {},
-			position: {},
-			direction: {},
-			distance: {},
-			coneCos: {},
-			penumbraCos: {},
-			decay: {}
-		} },
-
-		spotLightShadows: { value: [], properties: {
-			shadowBias: {},
-			shadowNormalBias: {},
-			shadowRadius: {},
-			shadowMapSize: {}
-		} },
-
-		spotLightMap: { value: [] },
-		spotShadowMap: { value: [] },
-		spotLightMatrix: { value: [] },
-
-		pointLights: { value: [], properties: {
-			color: {},
-			position: {},
-			decay: {},
-			distance: {}
-		} },
-
-		pointLightShadows: { value: [], properties: {
-			shadowBias: {},
-			shadowNormalBias: {},
-			shadowRadius: {},
-			shadowMapSize: {},
-			shadowCameraNear: {},
-			shadowCameraFar: {}
-		} },
-
-		pointShadowMap: { value: [] },
-		pointShadowMatrix: { value: [] },
-
-		hemisphereLights: { value: [], properties: {
-			direction: {},
-			skyColor: {},
-			groundColor: {}
-		} },
-
-		// TODO (abelnation): RectAreaLight BRDF data needs to be moved from example to main src
-		rectAreaLights: { value: [], properties: {
-			color: {},
-			position: {},
-			width: {},
-			height: {}
-		} },
-
-		ltc_1: { value: null },
-		ltc_2: { value: null }
-
-	},
-
-	points: {
-
-		diffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },
-		opacity: { value: 1.0 },
-		size: { value: 1.0 },
-		scale: { value: 1.0 },
-		map: { value: null },
-		alphaMap: { value: null },
-		alphaTest: { value: 0 },
-		uvTransform: { value: /*@__PURE__*/ new Matrix3() }
-
-	},
-
-	sprite: {
-
-		diffuse: { value: /*@__PURE__*/ new Color( 0xffffff ) },
-		opacity: { value: 1.0 },
-		center: { value: /*@__PURE__*/ new Vector2( 0.5, 0.5 ) },
-		rotation: { value: 0.0 },
-		map: { value: null },
-		mapTransform: { value: /*@__PURE__*/ new Matrix3() },
-		alphaMap: { value: null },
-		alphaTest: { value: 0 }
-
-	}
-
-};
-
-const ShaderLib = {
-
-	basic: {
-
-		uniforms: /*@__PURE__*/ mergeUniforms( [
-			UniformsLib.common,
-			UniformsLib.specularmap,
-			UniformsLib.envmap,
-			UniformsLib.aomap,
-			UniformsLib.lightmap,
-			UniformsLib.fog
-		] ),
-
-		vertexShader: ShaderChunk.meshbasic_vert,
-		fragmentShader: ShaderChunk.meshbasic_frag
-
-	},
-
-	lambert: {
-
-		uniforms: /*@__PURE__*/ mergeUniforms( [
-			UniformsLib.common,
-			UniformsLib.specularmap,
-			UniformsLib.envmap,
-			UniformsLib.aomap,
-			UniformsLib.lightmap,
-			UniformsLib.emissivemap,
-			UniformsLib.bumpmap,
-			UniformsLib.normalmap,
-			UniformsLib.displacementmap,
-			UniformsLib.fog,
-			UniformsLib.lights,
-			{
-				emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }
-			}
-		] ),
-
-		vertexShader: ShaderChunk.meshlambert_vert,
-		fragmentShader: ShaderChunk.meshlambert_frag
-
-	},
-
-	phong: {
-
-		uniforms: /*@__PURE__*/ mergeUniforms( [
-			UniformsLib.common,
-			UniformsLib.specularmap,
-			UniformsLib.envmap,
-			UniformsLib.aomap,
-			UniformsLib.lightmap,
-			UniformsLib.emissivemap,
-			UniformsLib.bumpmap,
-			UniformsLib.normalmap,
-			UniformsLib.displacementmap,
-			UniformsLib.fog,
-			UniformsLib.lights,
-			{
-				emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },
-				specular: { value: /*@__PURE__*/ new Color( 0x111111 ) },
-				shininess: { value: 30 }
-			}
-		] ),
-
-		vertexShader: ShaderChunk.meshphong_vert,
-		fragmentShader: ShaderChunk.meshphong_frag
-
-	},
-
-	standard: {
-
-		uniforms: /*@__PURE__*/ mergeUniforms( [
-			UniformsLib.common,
-			UniformsLib.envmap,
-			UniformsLib.aomap,
-			UniformsLib.lightmap,
-			UniformsLib.emissivemap,
-			UniformsLib.bumpmap,
-			UniformsLib.normalmap,
-			UniformsLib.displacementmap,
-			UniformsLib.roughnessmap,
-			UniformsLib.metalnessmap,
-			UniformsLib.fog,
-			UniformsLib.lights,
-			{
-				emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) },
-				roughness: { value: 1.0 },
-				metalness: { value: 0.0 },
-				envMapIntensity: { value: 1 } // temporary
-			}
-		] ),
-
-		vertexShader: ShaderChunk.meshphysical_vert,
-		fragmentShader: ShaderChunk.meshphysical_frag
-
-	},
-
-	toon: {
-
-		uniforms: /*@__PURE__*/ mergeUniforms( [
-			UniformsLib.common,
-			UniformsLib.aomap,
-			UniformsLib.lightmap,
-			UniformsLib.emissivemap,
-			UniformsLib.bumpmap,
-			UniformsLib.normalmap,
-			UniformsLib.displacementmap,
-			UniformsLib.gradientmap,
-			UniformsLib.fog,
-			UniformsLib.lights,
-			{
-				emissive: { value: /*@__PURE__*/ new Color( 0x000000 ) }
-			}
-		] ),
-
-		vertexShader: ShaderChunk.meshtoon_vert,
-		fragmentShader: ShaderChunk.meshtoon_frag
-
-	},
-
-	matcap: {
-
-		uniforms: /*@__PURE__*/ mergeUniforms( [
-			UniformsLib.common,
-			UniformsLib.bumpmap,
-			UniformsLib.normalmap,
-			UniformsLib.displacementmap,
-			UniformsLib.fog,
-			{
-				matcap: { value: null }
-			}
-		] ),
-
-		vertexShader: ShaderChunk.meshmatcap_vert,
-		fragmentShader: ShaderChunk.meshmatcap_frag
-
-	},
-
-	points: {
-
-		uniforms: /*@__PURE__*/ mergeUniforms( [
-			UniformsLib.points,
-			UniformsLib.fog
-		] ),
-
-		vertexShader: ShaderChunk.points_vert,
-		fragmentShader: ShaderChunk.points_frag
-
-	},
-
-	dashed: {
-
-		uniforms: /*@__PURE__*/ mergeUniforms( [
-			UniformsLib.common,
-			UniformsLib.fog,
-			{
-				scale: { value: 1 },
-				dashSize: { value: 1 },
-				totalSize: { value: 2 }
-			}
-		] ),
-
-		vertexShader: ShaderChunk.linedashed_vert,
-		fragmentShader: ShaderChunk.linedashed_frag
-
-	},
-
-	depth: {
-
-		uniforms: /*@__PURE__*/ mergeUniforms( [
-			UniformsLib.common,
-			UniformsLib.displacementmap
-		] ),
-
-		vertexShader: ShaderChunk.depth_vert,
-		fragmentShader: ShaderChunk.depth_frag
-
-	},
-
-	normal: {
-
-		uniforms: /*@__PURE__*/ mergeUniforms( [
-			UniformsLib.common,
-			UniformsLib.bumpmap,
-			UniformsLib.normalmap,
-			UniformsLib.displacementmap,
-			{
-				opacity: { value: 1.0 }
-			}
-		] ),
-
-		vertexShader: ShaderChunk.meshnormal_vert,
-		fragmentShader: ShaderChunk.meshnormal_frag
-
-	},
-
-	sprite: {
-
-		uniforms: /*@__PURE__*/ mergeUniforms( [
-			UniformsLib.sprite,
-			UniformsLib.fog
-		] ),
-
-		vertexShader: ShaderChunk.sprite_vert,
-		fragmentShader: ShaderChunk.sprite_frag
-
-	},
-
-	background: {
-
-		uniforms: {
-			uvTransform: { value: /*@__PURE__*/ new Matrix3() },
-			t2D: { value: null },
-			backgroundIntensity: { value: 1 }
-		},
-
-		vertexShader: ShaderChunk.background_vert,
-		fragmentShader: ShaderChunk.background_frag
-
-	},
-
-	backgroundCube: {
-
-		uniforms: {
-			envMap: { value: null },
-			flipEnvMap: { value: - 1 },
-			backgroundBlurriness: { value: 0 },
-			backgroundIntensity: { value: 1 }
-		},
-
-		vertexShader: ShaderChunk.backgroundCube_vert,
-		fragmentShader: ShaderChunk.backgroundCube_frag
-
-	},
-
-	cube: {
-
-		uniforms: {
-			tCube: { value: null },
-			tFlip: { value: - 1 },
-			opacity: { value: 1.0 }
-		},
-
-		vertexShader: ShaderChunk.cube_vert,
-		fragmentShader: ShaderChunk.cube_frag
-
-	},
-
-	equirect: {
-
-		uniforms: {
-			tEquirect: { value: null },
-		},
-
-		vertexShader: ShaderChunk.equirect_vert,
-		fragmentShader: ShaderChunk.equirect_frag
-
-	},
-
-	distanceRGBA: {
-
-		uniforms: /*@__PURE__*/ mergeUniforms( [
-			UniformsLib.common,
-			UniformsLib.displacementmap,
-			{
-				referencePosition: { value: /*@__PURE__*/ new Vector3() },
-				nearDistance: { value: 1 },
-				farDistance: { value: 1000 }
-			}
-		] ),
-
-		vertexShader: ShaderChunk.distanceRGBA_vert,
-		fragmentShader: ShaderChunk.distanceRGBA_frag
-
-	},
-
-	shadow: {
-
-		uniforms: /*@__PURE__*/ mergeUniforms( [
-			UniformsLib.lights,
-			UniformsLib.fog,
-			{
-				color: { value: /*@__PURE__*/ new Color( 0x00000 ) },
-				opacity: { value: 1.0 }
-			},
-		] ),
-
-		vertexShader: ShaderChunk.shadow_vert,
-		fragmentShader: ShaderChunk.shadow_frag
-
-	}
-
-};
-
-ShaderLib.physical = {
-
-	uniforms: /*@__PURE__*/ mergeUniforms( [
-		ShaderLib.standard.uniforms,
-		{
-			clearcoat: { value: 0 },
-			clearcoatMap: { value: null },
-			clearcoatMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-			clearcoatNormalMap: { value: null },
-			clearcoatNormalMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-			clearcoatNormalScale: { value: /*@__PURE__*/ new Vector2( 1, 1 ) },
-			clearcoatRoughness: { value: 0 },
-			clearcoatRoughnessMap: { value: null },
-			clearcoatRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-			iridescence: { value: 0 },
-			iridescenceMap: { value: null },
-			iridescenceMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-			iridescenceIOR: { value: 1.3 },
-			iridescenceThicknessMinimum: { value: 100 },
-			iridescenceThicknessMaximum: { value: 400 },
-			iridescenceThicknessMap: { value: null },
-			iridescenceThicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-			sheen: { value: 0 },
-			sheenColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },
-			sheenColorMap: { value: null },
-			sheenColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-			sheenRoughness: { value: 1 },
-			sheenRoughnessMap: { value: null },
-			sheenRoughnessMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-			transmission: { value: 0 },
-			transmissionMap: { value: null },
-			transmissionMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-			transmissionSamplerSize: { value: /*@__PURE__*/ new Vector2() },
-			transmissionSamplerMap: { value: null },
-			thickness: { value: 0 },
-			thicknessMap: { value: null },
-			thicknessMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-			attenuationDistance: { value: 0 },
-			attenuationColor: { value: /*@__PURE__*/ new Color( 0x000000 ) },
-			specularColor: { value: /*@__PURE__*/ new Color( 1, 1, 1 ) },
-			specularColorMap: { value: null },
-			specularColorMapTransform: { value: /*@__PURE__*/ new Matrix3() },
-			specularIntensity: { value: 1 },
-			specularIntensityMap: { value: null },
-			specularIntensityMapTransform: { value: /*@__PURE__*/ new Matrix3() }
-		}
-	] ),
-
-	vertexShader: ShaderChunk.meshphysical_vert,
-	fragmentShader: ShaderChunk.meshphysical_frag
-
-};
-
-const _rgb = { r: 0, b: 0, g: 0 };
-
-function WebGLBackground( renderer, cubemaps, cubeuvmaps, state, objects, alpha, premultipliedAlpha ) {
-
-	const clearColor = new Color( 0x000000 );
-	let clearAlpha = alpha === true ? 0 : 1;
-
-	let planeMesh;
-	let boxMesh;
-
-	let currentBackground = null;
-	let currentBackgroundVersion = 0;
-	let currentTonemapping = null;
-
-	function render( renderList, scene ) {
-
-		let forceClear = false;
-		let background = scene.isScene === true ? scene.background : null;
-
-		if ( background && background.isTexture ) {
-
-			const usePMREM = scene.backgroundBlurriness > 0; // use PMREM if the user wants to blur the background
-			background = ( usePMREM ? cubeuvmaps : cubemaps ).get( background );
-
-		}
-
-		if ( background === null ) {
-
-			setClear( clearColor, clearAlpha );
-
-		} else if ( background && background.isColor ) {
-
-			setClear( background, 1 );
-			forceClear = true;
-
-		}
-
-		const xr = renderer.xr;
-		const environmentBlendMode = xr.getEnvironmentBlendMode();
-
-		switch ( environmentBlendMode ) {
-
-			case 'opaque':
-				forceClear = true;
-				break;
-
-			case 'additive':
-				state.buffers.color.setClear( 0, 0, 0, 1, premultipliedAlpha );
-				forceClear = true;
-				break;
-
-			case 'alpha-blend':
-				state.buffers.color.setClear( 0, 0, 0, 0, premultipliedAlpha );
-				forceClear = true;
-				break;
-
-		}
-
-		if ( renderer.autoClear || forceClear ) {
-
-			renderer.clear( renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil );
-
-		}
-
-		if ( background && ( background.isCubeTexture || background.mapping === CubeUVReflectionMapping ) ) {
-
-			if ( boxMesh === undefined ) {
-
-				boxMesh = new Mesh(
-					new BoxGeometry( 1, 1, 1 ),
-					new ShaderMaterial( {
-						name: 'BackgroundCubeMaterial',
-						uniforms: cloneUniforms( ShaderLib.backgroundCube.uniforms ),
-						vertexShader: ShaderLib.backgroundCube.vertexShader,
-						fragmentShader: ShaderLib.backgroundCube.fragmentShader,
-						side: BackSide,
-						depthTest: false,
-						depthWrite: false,
-						fog: false
-					} )
-				);
-
-				boxMesh.geometry.deleteAttribute( 'normal' );
-				boxMesh.geometry.deleteAttribute( 'uv' );
-
-				boxMesh.onBeforeRender = function ( renderer, scene, camera ) {
-
-					this.matrixWorld.copyPosition( camera.matrixWorld );
-
-				};
-
-				// add "envMap" material property so the renderer can evaluate it like for built-in materials
-				Object.defineProperty( boxMesh.material, 'envMap', {
-
-					get: function () {
-
-						return this.uniforms.envMap.value;
-
-					}
-
-				} );
-
-				objects.update( boxMesh );
-
-			}
-
-			boxMesh.material.uniforms.envMap.value = background;
-			boxMesh.material.uniforms.flipEnvMap.value = ( background.isCubeTexture && background.isRenderTargetTexture === false ) ? - 1 : 1;
-			boxMesh.material.uniforms.backgroundBlurriness.value = scene.backgroundBlurriness;
-			boxMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;
-			boxMesh.material.toneMapped = ( background.colorSpace === SRGBColorSpace ) ? false : true;
-
-			if ( currentBackground !== background ||
-				currentBackgroundVersion !== background.version ||
-				currentTonemapping !== renderer.toneMapping ) {
-
-				boxMesh.material.needsUpdate = true;
-
-				currentBackground = background;
-				currentBackgroundVersion = background.version;
-				currentTonemapping = renderer.toneMapping;
-
-			}
-
-			boxMesh.layers.enableAll();
-
-			// push to the pre-sorted opaque render list
-			renderList.unshift( boxMesh, boxMesh.geometry, boxMesh.material, 0, 0, null );
-
-		} else if ( background && background.isTexture ) {
-
-			if ( planeMesh === undefined ) {
-
-				planeMesh = new Mesh(
-					new PlaneGeometry( 2, 2 ),
-					new ShaderMaterial( {
-						name: 'BackgroundMaterial',
-						uniforms: cloneUniforms( ShaderLib.background.uniforms ),
-						vertexShader: ShaderLib.background.vertexShader,
-						fragmentShader: ShaderLib.background.fragmentShader,
-						side: FrontSide,
-						depthTest: false,
-						depthWrite: false,
-						fog: false
-					} )
-				);
-
-				planeMesh.geometry.deleteAttribute( 'normal' );
-
-				// add "map" material property so the renderer can evaluate it like for built-in materials
-				Object.defineProperty( planeMesh.material, 'map', {
-
-					get: function () {
-
-						return this.uniforms.t2D.value;
-
-					}
-
-				} );
-
-				objects.update( planeMesh );
-
-			}
-
-			planeMesh.material.uniforms.t2D.value = background;
-			planeMesh.material.uniforms.backgroundIntensity.value = scene.backgroundIntensity;
-			planeMesh.material.toneMapped = ( background.colorSpace === SRGBColorSpace ) ? false : true;
-
-			if ( background.matrixAutoUpdate === true ) {
-
-				background.updateMatrix();
-
-			}
-
-			planeMesh.material.uniforms.uvTransform.value.copy( background.matrix );
-
-			if ( currentBackground !== background ||
-				currentBackgroundVersion !== background.version ||
-				currentTonemapping !== renderer.toneMapping ) {
-
-				planeMesh.material.needsUpdate = true;
-
-				currentBackground = background;
-				currentBackgroundVersion = background.version;
-				currentTonemapping = renderer.toneMapping;
-
-			}
-
-			planeMesh.layers.enableAll();
-
-			// push to the pre-sorted opaque render list
-			renderList.unshift( planeMesh, planeMesh.geometry, planeMesh.material, 0, 0, null );
-
-		}
-
-	}
-
-	function setClear( color, alpha ) {
-
-		color.getRGB( _rgb, getUnlitUniformColorSpace( renderer ) );
-
-		state.buffers.color.setClear( _rgb.r, _rgb.g, _rgb.b, alpha, premultipliedAlpha );
-
-	}
-
-	return {
-
-		getClearColor: function () {
-
-			return clearColor;
-
-		},
-		setClearColor: function ( color, alpha = 1 ) {
-
-			clearColor.set( color );
-			clearAlpha = alpha;
-			setClear( clearColor, clearAlpha );
-
-		},
-		getClearAlpha: function () {
-
-			return clearAlpha;
-
-		},
-		setClearAlpha: function ( alpha ) {
-
-			clearAlpha = alpha;
-			setClear( clearColor, clearAlpha );
-
-		},
-		render: render
-
-	};
-
-}
-
-function WebGLBindingStates( gl, extensions, attributes, capabilities ) {
-
-	const maxVertexAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );
-
-	const extension = capabilities.isWebGL2 ? null : extensions.get( 'OES_vertex_array_object' );
-	const vaoAvailable = capabilities.isWebGL2 || extension !== null;
-
-	const bindingStates = {};
-
-	const defaultState = createBindingState( null );
-	let currentState = defaultState;
-	let forceUpdate = false;
-
-	function setup( object, material, program, geometry, index ) {
-
-		let updateBuffers = false;
-
-		if ( vaoAvailable ) {
-
-			const state = getBindingState( geometry, program, material );
-
-			if ( currentState !== state ) {
-
-				currentState = state;
-				bindVertexArrayObject( currentState.object );
-
-			}
-
-			updateBuffers = needsUpdate( object, geometry, program, index );
-
-			if ( updateBuffers ) saveCache( object, geometry, program, index );
-
-		} else {
-
-			const wireframe = ( material.wireframe === true );
-
-			if ( currentState.geometry !== geometry.id ||
-				currentState.program !== program.id ||
-				currentState.wireframe !== wireframe ) {
-
-				currentState.geometry = geometry.id;
-				currentState.program = program.id;
-				currentState.wireframe = wireframe;
-
-				updateBuffers = true;
-
-			}
-
-		}
-
-		if ( index !== null ) {
-
-			attributes.update( index, gl.ELEMENT_ARRAY_BUFFER );
-
-		}
-
-		if ( updateBuffers || forceUpdate ) {
-
-			forceUpdate = false;
-
-			setupVertexAttributes( object, material, program, geometry );
-
-			if ( index !== null ) {
-
-				gl.bindBuffer( gl.ELEMENT_ARRAY_BUFFER, attributes.get( index ).buffer );
-
-			}
-
-		}
-
-	}
-
-	function createVertexArrayObject() {
-
-		if ( capabilities.isWebGL2 ) return gl.createVertexArray();
-
-		return extension.createVertexArrayOES();
-
-	}
-
-	function bindVertexArrayObject( vao ) {
-
-		if ( capabilities.isWebGL2 ) return gl.bindVertexArray( vao );
-
-		return extension.bindVertexArrayOES( vao );
-
-	}
-
-	function deleteVertexArrayObject( vao ) {
-
-		if ( capabilities.isWebGL2 ) return gl.deleteVertexArray( vao );
-
-		return extension.deleteVertexArrayOES( vao );
-
-	}
-
-	function getBindingState( geometry, program, material ) {
-
-		const wireframe = ( material.wireframe === true );
-
-		let programMap = bindingStates[ geometry.id ];
-
-		if ( programMap === undefined ) {
-
-			programMap = {};
-			bindingStates[ geometry.id ] = programMap;
-
-		}
-
-		let stateMap = programMap[ program.id ];
-
-		if ( stateMap === undefined ) {
-
-			stateMap = {};
-			programMap[ program.id ] = stateMap;
-
-		}
-
-		let state = stateMap[ wireframe ];
-
-		if ( state === undefined ) {
-
-			state = createBindingState( createVertexArrayObject() );
-			stateMap[ wireframe ] = state;
-
-		}
-
-		return state;
-
-	}
-
-	function createBindingState( vao ) {
-
-		const newAttributes = [];
-		const enabledAttributes = [];
-		const attributeDivisors = [];
-
-		for ( let i = 0; i < maxVertexAttributes; i ++ ) {
-
-			newAttributes[ i ] = 0;
-			enabledAttributes[ i ] = 0;
-			attributeDivisors[ i ] = 0;
-
-		}
-
-		return {
-
-			// for backward compatibility on non-VAO support browser
-			geometry: null,
-			program: null,
-			wireframe: false,
-
-			newAttributes: newAttributes,
-			enabledAttributes: enabledAttributes,
-			attributeDivisors: attributeDivisors,
-			object: vao,
-			attributes: {},
-			index: null
-
-		};
-
-	}
-
-	function needsUpdate( object, geometry, program, index ) {
-
-		const cachedAttributes = currentState.attributes;
-		const geometryAttributes = geometry.attributes;
-
-		let attributesNum = 0;
-
-		const programAttributes = program.getAttributes();
-
-		for ( const name in programAttributes ) {
-
-			const programAttribute = programAttributes[ name ];
-
-			if ( programAttribute.location >= 0 ) {
-
-				const cachedAttribute = cachedAttributes[ name ];
-				let geometryAttribute = geometryAttributes[ name ];
-
-				if ( geometryAttribute === undefined ) {
-
-					if ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;
-					if ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;
-
-				}
-
-				if ( cachedAttribute === undefined ) return true;
-
-				if ( cachedAttribute.attribute !== geometryAttribute ) return true;
-
-				if ( geometryAttribute && cachedAttribute.data !== geometryAttribute.data ) return true;
-
-				attributesNum ++;
-
-			}
-
-		}
-
-		if ( currentState.attributesNum !== attributesNum ) return true;
-
-		if ( currentState.index !== index ) return true;
-
-		return false;
-
-	}
-
-	function saveCache( object, geometry, program, index ) {
-
-		const cache = {};
-		const attributes = geometry.attributes;
-		let attributesNum = 0;
-
-		const programAttributes = program.getAttributes();
-
-		for ( const name in programAttributes ) {
-
-			const programAttribute = programAttributes[ name ];
-
-			if ( programAttribute.location >= 0 ) {
-
-				let attribute = attributes[ name ];
-
-				if ( attribute === undefined ) {
-
-					if ( name === 'instanceMatrix' && object.instanceMatrix ) attribute = object.instanceMatrix;
-					if ( name === 'instanceColor' && object.instanceColor ) attribute = object.instanceColor;
-
-				}
-
-				const data = {};
-				data.attribute = attribute;
-
-				if ( attribute && attribute.data ) {
-
-					data.data = attribute.data;
-
-				}
-
-				cache[ name ] = data;
-
-				attributesNum ++;
-
-			}
-
-		}
-
-		currentState.attributes = cache;
-		currentState.attributesNum = attributesNum;
-
-		currentState.index = index;
-
-	}
-
-	function initAttributes() {
-
-		const newAttributes = currentState.newAttributes;
-
-		for ( let i = 0, il = newAttributes.length; i < il; i ++ ) {
-
-			newAttributes[ i ] = 0;
-
-		}
-
-	}
-
-	function enableAttribute( attribute ) {
-
-		enableAttributeAndDivisor( attribute, 0 );
-
-	}
-
-	function enableAttributeAndDivisor( attribute, meshPerAttribute ) {
-
-		const newAttributes = currentState.newAttributes;
-		const enabledAttributes = currentState.enabledAttributes;
-		const attributeDivisors = currentState.attributeDivisors;
-
-		newAttributes[ attribute ] = 1;
-
-		if ( enabledAttributes[ attribute ] === 0 ) {
-
-			gl.enableVertexAttribArray( attribute );
-			enabledAttributes[ attribute ] = 1;
-
-		}
-
-		if ( attributeDivisors[ attribute ] !== meshPerAttribute ) {
-
-			const extension = capabilities.isWebGL2 ? gl : extensions.get( 'ANGLE_instanced_arrays' );
-
-			extension[ capabilities.isWebGL2 ? 'vertexAttribDivisor' : 'vertexAttribDivisorANGLE' ]( attribute, meshPerAttribute );
-			attributeDivisors[ attribute ] = meshPerAttribute;
-
-		}
-
-	}
-
-	function disableUnusedAttributes() {
-
-		const newAttributes = currentState.newAttributes;
-		const enabledAttributes = currentState.enabledAttributes;
-
-		for ( let i = 0, il = enabledAttributes.length; i < il; i ++ ) {
-
-			if ( enabledAttributes[ i ] !== newAttributes[ i ] ) {
-
-				gl.disableVertexAttribArray( i );
-				enabledAttributes[ i ] = 0;
-
-			}
-
-		}
-
-	}
-
-	function vertexAttribPointer( index, size, type, normalized, stride, offset ) {
-
-		if ( capabilities.isWebGL2 === true && ( type === gl.INT || type === gl.UNSIGNED_INT ) ) {
-
-			gl.vertexAttribIPointer( index, size, type, stride, offset );
-
-		} else {
-
-			gl.vertexAttribPointer( index, size, type, normalized, stride, offset );
-
-		}
-
-	}
-
-	function setupVertexAttributes( object, material, program, geometry ) {
-
-		if ( capabilities.isWebGL2 === false && ( object.isInstancedMesh || geometry.isInstancedBufferGeometry ) ) {
-
-			if ( extensions.get( 'ANGLE_instanced_arrays' ) === null ) return;
-
-		}
-
-		initAttributes();
-
-		const geometryAttributes = geometry.attributes;
-
-		const programAttributes = program.getAttributes();
-
-		const materialDefaultAttributeValues = material.defaultAttributeValues;
-
-		for ( const name in programAttributes ) {
-
-			const programAttribute = programAttributes[ name ];
-
-			if ( programAttribute.location >= 0 ) {
-
-				let geometryAttribute = geometryAttributes[ name ];
-
-				if ( geometryAttribute === undefined ) {
-
-					if ( name === 'instanceMatrix' && object.instanceMatrix ) geometryAttribute = object.instanceMatrix;
-					if ( name === 'instanceColor' && object.instanceColor ) geometryAttribute = object.instanceColor;
-
-				}
-
-				if ( geometryAttribute !== undefined ) {
-
-					const normalized = geometryAttribute.normalized;
-					const size = geometryAttribute.itemSize;
-
-					const attribute = attributes.get( geometryAttribute );
-
-					// TODO Attribute may not be available on context restore
-
-					if ( attribute === undefined ) continue;
-
-					const buffer = attribute.buffer;
-					const type = attribute.type;
-					const bytesPerElement = attribute.bytesPerElement;
-
-					if ( geometryAttribute.isInterleavedBufferAttribute ) {
-
-						const data = geometryAttribute.data;
-						const stride = data.stride;
-						const offset = geometryAttribute.offset;
-
-						if ( data.isInstancedInterleavedBuffer ) {
-
-							for ( let i = 0; i < programAttribute.locationSize; i ++ ) {
-
-								enableAttributeAndDivisor( programAttribute.location + i, data.meshPerAttribute );
-
-							}
-
-							if ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {
-
-								geometry._maxInstanceCount = data.meshPerAttribute * data.count;
-
-							}
-
-						} else {
-
-							for ( let i = 0; i < programAttribute.locationSize; i ++ ) {
-
-								enableAttribute( programAttribute.location + i );
-
-							}
-
-						}
-
-						gl.bindBuffer( gl.ARRAY_BUFFER, buffer );
-
-						for ( let i = 0; i < programAttribute.locationSize; i ++ ) {
-
-							vertexAttribPointer(
-								programAttribute.location + i,
-								size / programAttribute.locationSize,
-								type,
-								normalized,
-								stride * bytesPerElement,
-								( offset + ( size / programAttribute.locationSize ) * i ) * bytesPerElement
-							);
-
-						}
-
-					} else {
-
-						if ( geometryAttribute.isInstancedBufferAttribute ) {
-
-							for ( let i = 0; i < programAttribute.locationSize; i ++ ) {
-
-								enableAttributeAndDivisor( programAttribute.location + i, geometryAttribute.meshPerAttribute );
-
-							}
-
-							if ( object.isInstancedMesh !== true && geometry._maxInstanceCount === undefined ) {
-
-								geometry._maxInstanceCount = geometryAttribute.meshPerAttribute * geometryAttribute.count;
-
-							}
-
-						} else {
-
-							for ( let i = 0; i < programAttribute.locationSize; i ++ ) {
-
-								enableAttribute( programAttribute.location + i );
-
-							}
-
-						}
-
-						gl.bindBuffer( gl.ARRAY_BUFFER, buffer );
-
-						for ( let i = 0; i < programAttribute.locationSize; i ++ ) {
-
-							vertexAttribPointer(
-								programAttribute.location + i,
-								size / programAttribute.locationSize,
-								type,
-								normalized,
-								size * bytesPerElement,
-								( size / programAttribute.locationSize ) * i * bytesPerElement
-							);
-
-						}
-
-					}
-
-				} else if ( materialDefaultAttributeValues !== undefined ) {
-
-					const value = materialDefaultAttributeValues[ name ];
-
-					if ( value !== undefined ) {
-
-						switch ( value.length ) {
-
-							case 2:
-								gl.vertexAttrib2fv( programAttribute.location, value );
-								break;
-
-							case 3:
-								gl.vertexAttrib3fv( programAttribute.location, value );
-								break;
-
-							case 4:
-								gl.vertexAttrib4fv( programAttribute.location, value );
-								break;
-
-							default:
-								gl.vertexAttrib1fv( programAttribute.location, value );
-
-						}
-
-					}
-
-				}
-
-			}
-
-		}
-
-		disableUnusedAttributes();
-
-	}
-
-	function dispose() {
-
-		reset();
-
-		for ( const geometryId in bindingStates ) {
-
-			const programMap = bindingStates[ geometryId ];
-
-			for ( const programId in programMap ) {
-
-				const stateMap = programMap[ programId ];
-
-				for ( const wireframe in stateMap ) {
-
-					deleteVertexArrayObject( stateMap[ wireframe ].object );
-
-					delete stateMap[ wireframe ];
-
-				}
-
-				delete programMap[ programId ];
-
-			}
-
-			delete bindingStates[ geometryId ];
-
-		}
-
-	}
-
-	function releaseStatesOfGeometry( geometry ) {
-
-		if ( bindingStates[ geometry.id ] === undefined ) return;
-
-		const programMap = bindingStates[ geometry.id ];
-
-		for ( const programId in programMap ) {
-
-			const stateMap = programMap[ programId ];
-
-			for ( const wireframe in stateMap ) {
-
-				deleteVertexArrayObject( stateMap[ wireframe ].object );
-
-				delete stateMap[ wireframe ];
-
-			}
-
-			delete programMap[ programId ];
-
-		}
-
-		delete bindingStates[ geometry.id ];
-
-	}
-
-	function releaseStatesOfProgram( program ) {
-
-		for ( const geometryId in bindingStates ) {
-
-			const programMap = bindingStates[ geometryId ];
-
-			if ( programMap[ program.id ] === undefined ) continue;
-
-			const stateMap = programMap[ program.id ];
-
-			for ( const wireframe in stateMap ) {
-
-				deleteVertexArrayObject( stateMap[ wireframe ].object );
-
-				delete stateMap[ wireframe ];
-
-			}
-
-			delete programMap[ program.id ];
-
-		}
-
-	}
-
-	function reset() {
-
-		resetDefaultState();
-		forceUpdate = true;
-
-		if ( currentState === defaultState ) return;
-
-		currentState = defaultState;
-		bindVertexArrayObject( currentState.object );
-
-	}
-
-	// for backward-compatibility
-
-	function resetDefaultState() {
-
-		defaultState.geometry = null;
-		defaultState.program = null;
-		defaultState.wireframe = false;
-
-	}
-
-	return {
-
-		setup: setup,
-		reset: reset,
-		resetDefaultState: resetDefaultState,
-		dispose: dispose,
-		releaseStatesOfGeometry: releaseStatesOfGeometry,
-		releaseStatesOfProgram: releaseStatesOfProgram,
-
-		initAttributes: initAttributes,
-		enableAttribute: enableAttribute,
-		disableUnusedAttributes: disableUnusedAttributes
-
-	};
-
-}
-
-function WebGLBufferRenderer( gl, extensions, info, capabilities ) {
-
-	const isWebGL2 = capabilities.isWebGL2;
-
-	let mode;
-
-	function setMode( value ) {
-
-		mode = value;
-
-	}
-
-	function render( start, count ) {
-
-		gl.drawArrays( mode, start, count );
-
-		info.update( count, mode, 1 );
-
-	}
-
-	function renderInstances( start, count, primcount ) {
-
-		if ( primcount === 0 ) return;
-
-		let extension, methodName;
-
-		if ( isWebGL2 ) {
-
-			extension = gl;
-			methodName = 'drawArraysInstanced';
-
-		} else {
-
-			extension = extensions.get( 'ANGLE_instanced_arrays' );
-			methodName = 'drawArraysInstancedANGLE';
-
-			if ( extension === null ) {
-
-				console.error( 'THREE.WebGLBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );
-				return;
-
-			}
-
-		}
-
-		extension[ methodName ]( mode, start, count, primcount );
-
-		info.update( count, mode, primcount );
-
-	}
-
-	//
-
-	this.setMode = setMode;
-	this.render = render;
-	this.renderInstances = renderInstances;
-
-}
-
-function WebGLCapabilities( gl, extensions, parameters ) {
-
-	let maxAnisotropy;
-
-	function getMaxAnisotropy() {
-
-		if ( maxAnisotropy !== undefined ) return maxAnisotropy;
-
-		if ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {
-
-			const extension = extensions.get( 'EXT_texture_filter_anisotropic' );
-
-			maxAnisotropy = gl.getParameter( extension.MAX_TEXTURE_MAX_ANISOTROPY_EXT );
-
-		} else {
-
-			maxAnisotropy = 0;
-
-		}
-
-		return maxAnisotropy;
-
-	}
-
-	function getMaxPrecision( precision ) {
-
-		if ( precision === 'highp' ) {
-
-			if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.HIGH_FLOAT ).precision > 0 &&
-				gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.HIGH_FLOAT ).precision > 0 ) {
-
-				return 'highp';
-
-			}
-
-			precision = 'mediump';
-
-		}
-
-		if ( precision === 'mediump' ) {
-
-			if ( gl.getShaderPrecisionFormat( gl.VERTEX_SHADER, gl.MEDIUM_FLOAT ).precision > 0 &&
-				gl.getShaderPrecisionFormat( gl.FRAGMENT_SHADER, gl.MEDIUM_FLOAT ).precision > 0 ) {
-
-				return 'mediump';
-
-			}
-
-		}
-
-		return 'lowp';
-
-	}
-
-	const isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl.constructor.name === 'WebGL2RenderingContext';
-
-	let precision = parameters.precision !== undefined ? parameters.precision : 'highp';
-	const maxPrecision = getMaxPrecision( precision );
-
-	if ( maxPrecision !== precision ) {
-
-		console.warn( 'THREE.WebGLRenderer:', precision, 'not supported, using', maxPrecision, 'instead.' );
-		precision = maxPrecision;
-
-	}
-
-	const drawBuffers = isWebGL2 || extensions.has( 'WEBGL_draw_buffers' );
-
-	const logarithmicDepthBuffer = parameters.logarithmicDepthBuffer === true;
-
-	const maxTextures = gl.getParameter( gl.MAX_TEXTURE_IMAGE_UNITS );
-	const maxVertexTextures = gl.getParameter( gl.MAX_VERTEX_TEXTURE_IMAGE_UNITS );
-	const maxTextureSize = gl.getParameter( gl.MAX_TEXTURE_SIZE );
-	const maxCubemapSize = gl.getParameter( gl.MAX_CUBE_MAP_TEXTURE_SIZE );
-
-	const maxAttributes = gl.getParameter( gl.MAX_VERTEX_ATTRIBS );
-	const maxVertexUniforms = gl.getParameter( gl.MAX_VERTEX_UNIFORM_VECTORS );
-	const maxVaryings = gl.getParameter( gl.MAX_VARYING_VECTORS );
-	const maxFragmentUniforms = gl.getParameter( gl.MAX_FRAGMENT_UNIFORM_VECTORS );
-
-	const vertexTextures = maxVertexTextures > 0;
-	const floatFragmentTextures = isWebGL2 || extensions.has( 'OES_texture_float' );
-	const floatVertexTextures = vertexTextures && floatFragmentTextures;
-
-	const maxSamples = isWebGL2 ? gl.getParameter( gl.MAX_SAMPLES ) : 0;
-
-	return {
-
-		isWebGL2: isWebGL2,
-
-		drawBuffers: drawBuffers,
-
-		getMaxAnisotropy: getMaxAnisotropy,
-		getMaxPrecision: getMaxPrecision,
-
-		precision: precision,
-		logarithmicDepthBuffer: logarithmicDepthBuffer,
-
-		maxTextures: maxTextures,
-		maxVertexTextures: maxVertexTextures,
-		maxTextureSize: maxTextureSize,
-		maxCubemapSize: maxCubemapSize,
-
-		maxAttributes: maxAttributes,
-		maxVertexUniforms: maxVertexUniforms,
-		maxVaryings: maxVaryings,
-		maxFragmentUniforms: maxFragmentUniforms,
-
-		vertexTextures: vertexTextures,
-		floatFragmentTextures: floatFragmentTextures,
-		floatVertexTextures: floatVertexTextures,
-
-		maxSamples: maxSamples
-
-	};
-
-}
-
-function WebGLClipping( properties ) {
-
-	const scope = this;
-
-	let globalState = null,
-		numGlobalPlanes = 0,
-		localClippingEnabled = false,
-		renderingShadows = false;
-
-	const plane = new Plane(),
-		viewNormalMatrix = new Matrix3(),
-
-		uniform = { value: null, needsUpdate: false };
-
-	this.uniform = uniform;
-	this.numPlanes = 0;
-	this.numIntersection = 0;
-
-	this.init = function ( planes, enableLocalClipping ) {
-
-		const enabled =
-			planes.length !== 0 ||
-			enableLocalClipping ||
-			// enable state of previous frame - the clipping code has to
-			// run another frame in order to reset the state:
-			numGlobalPlanes !== 0 ||
-			localClippingEnabled;
-
-		localClippingEnabled = enableLocalClipping;
-
-		numGlobalPlanes = planes.length;
-
-		return enabled;
-
-	};
-
-	this.beginShadows = function () {
-
-		renderingShadows = true;
-		projectPlanes( null );
-
-	};
-
-	this.endShadows = function () {
-
-		renderingShadows = false;
-
-	};
-
-	this.setGlobalState = function ( planes, camera ) {
-
-		globalState = projectPlanes( planes, camera, 0 );
-
-	};
-
-	this.setState = function ( material, camera, useCache ) {
-
-		const planes = material.clippingPlanes,
-			clipIntersection = material.clipIntersection,
-			clipShadows = material.clipShadows;
-
-		const materialProperties = properties.get( material );
-
-		if ( ! localClippingEnabled || planes === null || planes.length === 0 || renderingShadows && ! clipShadows ) {
-
-			// there's no local clipping
-
-			if ( renderingShadows ) {
-
-				// there's no global clipping
-
-				projectPlanes( null );
-
-			} else {
-
-				resetGlobalState();
-
-			}
-
-		} else {
-
-			const nGlobal = renderingShadows ? 0 : numGlobalPlanes,
-				lGlobal = nGlobal * 4;
-
-			let dstArray = materialProperties.clippingState || null;
-
-			uniform.value = dstArray; // ensure unique state
-
-			dstArray = projectPlanes( planes, camera, lGlobal, useCache );
-
-			for ( let i = 0; i !== lGlobal; ++ i ) {
-
-				dstArray[ i ] = globalState[ i ];
-
-			}
-
-			materialProperties.clippingState = dstArray;
-			this.numIntersection = clipIntersection ? this.numPlanes : 0;
-			this.numPlanes += nGlobal;
-
-		}
-
-
-	};
-
-	function resetGlobalState() {
-
-		if ( uniform.value !== globalState ) {
-
-			uniform.value = globalState;
-			uniform.needsUpdate = numGlobalPlanes > 0;
-
-		}
-
-		scope.numPlanes = numGlobalPlanes;
-		scope.numIntersection = 0;
-
-	}
-
-	function projectPlanes( planes, camera, dstOffset, skipTransform ) {
-
-		const nPlanes = planes !== null ? planes.length : 0;
-		let dstArray = null;
-
-		if ( nPlanes !== 0 ) {
-
-			dstArray = uniform.value;
-
-			if ( skipTransform !== true || dstArray === null ) {
-
-				const flatSize = dstOffset + nPlanes * 4,
-					viewMatrix = camera.matrixWorldInverse;
-
-				viewNormalMatrix.getNormalMatrix( viewMatrix );
-
-				if ( dstArray === null || dstArray.length < flatSize ) {
-
-					dstArray = new Float32Array( flatSize );
-
-				}
-
-				for ( let i = 0, i4 = dstOffset; i !== nPlanes; ++ i, i4 += 4 ) {
-
-					plane.copy( planes[ i ] ).applyMatrix4( viewMatrix, viewNormalMatrix );
-
-					plane.normal.toArray( dstArray, i4 );
-					dstArray[ i4 + 3 ] = plane.constant;
-
-				}
-
-			}
-
-			uniform.value = dstArray;
-			uniform.needsUpdate = true;
-
-		}
-
-		scope.numPlanes = nPlanes;
-		scope.numIntersection = 0;
-
-		return dstArray;
-
-	}
-
-}
-
-function WebGLCubeMaps( renderer ) {
-
-	let cubemaps = new WeakMap();
-
-	function mapTextureMapping( texture, mapping ) {
-
-		if ( mapping === EquirectangularReflectionMapping ) {
-
-			texture.mapping = CubeReflectionMapping;
-
-		} else if ( mapping === EquirectangularRefractionMapping ) {
-
-			texture.mapping = CubeRefractionMapping;
-
-		}
-
-		return texture;
-
-	}
-
-	function get( texture ) {
-
-		if ( texture && texture.isTexture && texture.isRenderTargetTexture === false ) {
-
-			const mapping = texture.mapping;
-
-			if ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping ) {
-
-				if ( cubemaps.has( texture ) ) {
-
-					const cubemap = cubemaps.get( texture ).texture;
-					return mapTextureMapping( cubemap, texture.mapping );
-
-				} else {
-
-					const image = texture.image;
-
-					if ( image && image.height > 0 ) {
-
-						const renderTarget = new WebGLCubeRenderTarget( image.height / 2 );
-						renderTarget.fromEquirectangularTexture( renderer, texture );
-						cubemaps.set( texture, renderTarget );
-
-						texture.addEventListener( 'dispose', onTextureDispose );
-
-						return mapTextureMapping( renderTarget.texture, texture.mapping );
-
-					} else {
-
-						// image not yet ready. try the conversion next frame
-
-						return null;
-
-					}
-
-				}
-
-			}
-
-		}
-
-		return texture;
-
-	}
-
-	function onTextureDispose( event ) {
-
-		const texture = event.target;
-
-		texture.removeEventListener( 'dispose', onTextureDispose );
-
-		const cubemap = cubemaps.get( texture );
-
-		if ( cubemap !== undefined ) {
-
-			cubemaps.delete( texture );
-			cubemap.dispose();
-
-		}
-
-	}
-
-	function dispose() {
-
-		cubemaps = new WeakMap();
-
-	}
-
-	return {
-		get: get,
-		dispose: dispose
-	};
-
-}
-
-class OrthographicCamera extends Camera {
-
-	constructor( left = - 1, right = 1, top = 1, bottom = - 1, near = 0.1, far = 2000 ) {
-
-		super();
-
-		this.isOrthographicCamera = true;
-
-		this.type = 'OrthographicCamera';
-
-		this.zoom = 1;
-		this.view = null;
-
-		this.left = left;
-		this.right = right;
-		this.top = top;
-		this.bottom = bottom;
-
-		this.near = near;
-		this.far = far;
-
-		this.updateProjectionMatrix();
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		this.left = source.left;
-		this.right = source.right;
-		this.top = source.top;
-		this.bottom = source.bottom;
-		this.near = source.near;
-		this.far = source.far;
-
-		this.zoom = source.zoom;
-		this.view = source.view === null ? null : Object.assign( {}, source.view );
-
-		return this;
-
-	}
-
-	setViewOffset( fullWidth, fullHeight, x, y, width, height ) {
-
-		if ( this.view === null ) {
-
-			this.view = {
-				enabled: true,
-				fullWidth: 1,
-				fullHeight: 1,
-				offsetX: 0,
-				offsetY: 0,
-				width: 1,
-				height: 1
-			};
-
-		}
-
-		this.view.enabled = true;
-		this.view.fullWidth = fullWidth;
-		this.view.fullHeight = fullHeight;
-		this.view.offsetX = x;
-		this.view.offsetY = y;
-		this.view.width = width;
-		this.view.height = height;
-
-		this.updateProjectionMatrix();
-
-	}
-
-	clearViewOffset() {
-
-		if ( this.view !== null ) {
-
-			this.view.enabled = false;
-
-		}
-
-		this.updateProjectionMatrix();
-
-	}
-
-	updateProjectionMatrix() {
-
-		const dx = ( this.right - this.left ) / ( 2 * this.zoom );
-		const dy = ( this.top - this.bottom ) / ( 2 * this.zoom );
-		const cx = ( this.right + this.left ) / 2;
-		const cy = ( this.top + this.bottom ) / 2;
-
-		let left = cx - dx;
-		let right = cx + dx;
-		let top = cy + dy;
-		let bottom = cy - dy;
-
-		if ( this.view !== null && this.view.enabled ) {
-
-			const scaleW = ( this.right - this.left ) / this.view.fullWidth / this.zoom;
-			const scaleH = ( this.top - this.bottom ) / this.view.fullHeight / this.zoom;
-
-			left += scaleW * this.view.offsetX;
-			right = left + scaleW * this.view.width;
-			top -= scaleH * this.view.offsetY;
-			bottom = top - scaleH * this.view.height;
-
-		}
-
-		this.projectionMatrix.makeOrthographic( left, right, top, bottom, this.near, this.far );
-
-		this.projectionMatrixInverse.copy( this.projectionMatrix ).invert();
-
-	}
-
-	toJSON( meta ) {
-
-		const data = super.toJSON( meta );
-
-		data.object.zoom = this.zoom;
-		data.object.left = this.left;
-		data.object.right = this.right;
-		data.object.top = this.top;
-		data.object.bottom = this.bottom;
-		data.object.near = this.near;
-		data.object.far = this.far;
-
-		if ( this.view !== null ) data.object.view = Object.assign( {}, this.view );
-
-		return data;
-
-	}
-
-}
-
-const LOD_MIN = 4;
-
-// The standard deviations (radians) associated with the extra mips. These are
-// chosen to approximate a Trowbridge-Reitz distribution function times the
-// geometric shadowing function. These sigma values squared must match the
-// variance #defines in cube_uv_reflection_fragment.glsl.js.
-const EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];
-
-// The maximum length of the blur for loop. Smaller sigmas will use fewer
-// samples and exit early, but not recompile the shader.
-const MAX_SAMPLES = 20;
-
-const _flatCamera = /*@__PURE__*/ new OrthographicCamera();
-const _clearColor = /*@__PURE__*/ new Color();
-let _oldTarget = null;
-
-// Golden Ratio
-const PHI = ( 1 + Math.sqrt( 5 ) ) / 2;
-const INV_PHI = 1 / PHI;
-
-// Vertices of a dodecahedron (except the opposites, which represent the
-// same axis), used as axis directions evenly spread on a sphere.
-const _axisDirections = [
-	/*@__PURE__*/ new Vector3( 1, 1, 1 ),
-	/*@__PURE__*/ new Vector3( - 1, 1, 1 ),
-	/*@__PURE__*/ new Vector3( 1, 1, - 1 ),
-	/*@__PURE__*/ new Vector3( - 1, 1, - 1 ),
-	/*@__PURE__*/ new Vector3( 0, PHI, INV_PHI ),
-	/*@__PURE__*/ new Vector3( 0, PHI, - INV_PHI ),
-	/*@__PURE__*/ new Vector3( INV_PHI, 0, PHI ),
-	/*@__PURE__*/ new Vector3( - INV_PHI, 0, PHI ),
-	/*@__PURE__*/ new Vector3( PHI, INV_PHI, 0 ),
-	/*@__PURE__*/ new Vector3( - PHI, INV_PHI, 0 ) ];
-
-/**
- * This class generates a Prefiltered, Mipmapped Radiance Environment Map
- * (PMREM) from a cubeMap environment texture. This allows different levels of
- * blur to be quickly accessed based on material roughness. It is packed into a
- * special CubeUV format that allows us to perform custom interpolation so that
- * we can support nonlinear formats such as RGBE. Unlike a traditional mipmap
- * chain, it only goes down to the LOD_MIN level (above), and then creates extra
- * even more filtered 'mips' at the same LOD_MIN resolution, associated with
- * higher roughness levels. In this way we maintain resolution to smoothly
- * interpolate diffuse lighting while limiting sampling computation.
- *
- * Paper: Fast, Accurate Image-Based Lighting
- * https://drive.google.com/file/d/15y8r_UpKlU9SvV4ILb0C3qCPecS8pvLz/view
-*/
-
-class PMREMGenerator {
-
-	constructor( renderer ) {
-
-		this._renderer = renderer;
-		this._pingPongRenderTarget = null;
-
-		this._lodMax = 0;
-		this._cubeSize = 0;
-		this._lodPlanes = [];
-		this._sizeLods = [];
-		this._sigmas = [];
-
-		this._blurMaterial = null;
-		this._cubemapMaterial = null;
-		this._equirectMaterial = null;
-
-		this._compileMaterial( this._blurMaterial );
-
-	}
-
-	/**
-	 * Generates a PMREM from a supplied Scene, which can be faster than using an
-	 * image if networking bandwidth is low. Optional sigma specifies a blur radius
-	 * in radians to be applied to the scene before PMREM generation. Optional near
-	 * and far planes ensure the scene is rendered in its entirety (the cubeCamera
-	 * is placed at the origin).
-	 */
-	fromScene( scene, sigma = 0, near = 0.1, far = 100 ) {
-
-		_oldTarget = this._renderer.getRenderTarget();
-
-		this._setSize( 256 );
-
-		const cubeUVRenderTarget = this._allocateTargets();
-		cubeUVRenderTarget.depthBuffer = true;
-
-		this._sceneToCubeUV( scene, near, far, cubeUVRenderTarget );
-
-		if ( sigma > 0 ) {
-
-			this._blur( cubeUVRenderTarget, 0, 0, sigma );
-
-		}
-
-		this._applyPMREM( cubeUVRenderTarget );
-		this._cleanup( cubeUVRenderTarget );
-
-		return cubeUVRenderTarget;
-
-	}
-
-	/**
-	 * Generates a PMREM from an equirectangular texture, which can be either LDR
-	 * or HDR. The ideal input image size is 1k (1024 x 512),
-	 * as this matches best with the 256 x 256 cubemap output.
-	 */
-	fromEquirectangular( equirectangular, renderTarget = null ) {
-
-		return this._fromTexture( equirectangular, renderTarget );
-
-	}
-
-	/**
-	 * Generates a PMREM from an cubemap texture, which can be either LDR
-	 * or HDR. The ideal input cube size is 256 x 256,
-	 * as this matches best with the 256 x 256 cubemap output.
-	 */
-	fromCubemap( cubemap, renderTarget = null ) {
-
-		return this._fromTexture( cubemap, renderTarget );
-
-	}
-
-	/**
-	 * Pre-compiles the cubemap shader. You can get faster start-up by invoking this method during
-	 * your texture's network fetch for increased concurrency.
-	 */
-	compileCubemapShader() {
-
-		if ( this._cubemapMaterial === null ) {
-
-			this._cubemapMaterial = _getCubemapMaterial();
-			this._compileMaterial( this._cubemapMaterial );
-
-		}
-
-	}
-
-	/**
-	 * Pre-compiles the equirectangular shader. You can get faster start-up by invoking this method during
-	 * your texture's network fetch for increased concurrency.
-	 */
-	compileEquirectangularShader() {
-
-		if ( this._equirectMaterial === null ) {
-
-			this._equirectMaterial = _getEquirectMaterial();
-			this._compileMaterial( this._equirectMaterial );
-
-		}
-
-	}
-
-	/**
-	 * Disposes of the PMREMGenerator's internal memory. Note that PMREMGenerator is a static class,
-	 * so you should not need more than one PMREMGenerator object. If you do, calling dispose() on
-	 * one of them will cause any others to also become unusable.
-	 */
-	dispose() {
-
-		this._dispose();
-
-		if ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();
-		if ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();
-
-	}
-
-	// private interface
-
-	_setSize( cubeSize ) {
-
-		this._lodMax = Math.floor( Math.log2( cubeSize ) );
-		this._cubeSize = Math.pow( 2, this._lodMax );
-
-	}
-
-	_dispose() {
-
-		if ( this._blurMaterial !== null ) this._blurMaterial.dispose();
-
-		if ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();
-
-		for ( let i = 0; i < this._lodPlanes.length; i ++ ) {
-
-			this._lodPlanes[ i ].dispose();
-
-		}
-
-	}
-
-	_cleanup( outputTarget ) {
-
-		this._renderer.setRenderTarget( _oldTarget );
-		outputTarget.scissorTest = false;
-		_setViewport( outputTarget, 0, 0, outputTarget.width, outputTarget.height );
-
-	}
-
-	_fromTexture( texture, renderTarget ) {
-
-		if ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping ) {
-
-			this._setSize( texture.image.length === 0 ? 16 : ( texture.image[ 0 ].width || texture.image[ 0 ].image.width ) );
-
-		} else { // Equirectangular
-
-			this._setSize( texture.image.width / 4 );
-
-		}
-
-		_oldTarget = this._renderer.getRenderTarget();
-
-		const cubeUVRenderTarget = renderTarget || this._allocateTargets();
-		this._textureToCubeUV( texture, cubeUVRenderTarget );
-		this._applyPMREM( cubeUVRenderTarget );
-		this._cleanup( cubeUVRenderTarget );
-
-		return cubeUVRenderTarget;
-
-	}
-
-	_allocateTargets() {
-
-		const width = 3 * Math.max( this._cubeSize, 16 * 7 );
-		const height = 4 * this._cubeSize;
-
-		const params = {
-			magFilter: LinearFilter,
-			minFilter: LinearFilter,
-			generateMipmaps: false,
-			type: HalfFloatType,
-			format: RGBAFormat,
-			colorSpace: LinearSRGBColorSpace,
-			depthBuffer: false
-		};
-
-		const cubeUVRenderTarget = _createRenderTarget( width, height, params );
-
-		if ( this._pingPongRenderTarget === null || this._pingPongRenderTarget.width !== width || this._pingPongRenderTarget.height !== height ) {
-
-			if ( this._pingPongRenderTarget !== null ) {
-
-				this._dispose();
-
-			}
-
-			this._pingPongRenderTarget = _createRenderTarget( width, height, params );
-
-			const { _lodMax } = this;
-			( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
-
-			this._blurMaterial = _getBlurShader( _lodMax, width, height );
-
-		}
-
-		return cubeUVRenderTarget;
-
-	}
-
-	_compileMaterial( material ) {
-
-		const tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );
-		this._renderer.compile( tmpMesh, _flatCamera );
-
-	}
-
-	_sceneToCubeUV( scene, near, far, cubeUVRenderTarget ) {
-
-		const fov = 90;
-		const aspect = 1;
-		const cubeCamera = new PerspectiveCamera( fov, aspect, near, far );
-		const upSign = [ 1, - 1, 1, 1, 1, 1 ];
-		const forwardSign = [ 1, 1, 1, - 1, - 1, - 1 ];
-		const renderer = this._renderer;
-
-		const originalAutoClear = renderer.autoClear;
-		const toneMapping = renderer.toneMapping;
-		renderer.getClearColor( _clearColor );
-
-		renderer.toneMapping = NoToneMapping;
-		renderer.autoClear = false;
-
-		const backgroundMaterial = new MeshBasicMaterial( {
-			name: 'PMREM.Background',
-			side: BackSide,
-			depthWrite: false,
-			depthTest: false,
-		} );
-
-		const backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );
-
-		let useSolidColor = false;
-		const background = scene.background;
-
-		if ( background ) {
-
-			if ( background.isColor ) {
-
-				backgroundMaterial.color.copy( background );
-				scene.background = null;
-				useSolidColor = true;
-
-			}
-
-		} else {
-
-			backgroundMaterial.color.copy( _clearColor );
-			useSolidColor = true;
-
-		}
-
-		for ( let i = 0; i < 6; i ++ ) {
-
-			const col = i % 3;
-
-			if ( col === 0 ) {
-
-				cubeCamera.up.set( 0, upSign[ i ], 0 );
-				cubeCamera.lookAt( forwardSign[ i ], 0, 0 );
-
-			} else if ( col === 1 ) {
-
-				cubeCamera.up.set( 0, 0, upSign[ i ] );
-				cubeCamera.lookAt( 0, forwardSign[ i ], 0 );
-
-			} else {
-
-				cubeCamera.up.set( 0, upSign[ i ], 0 );
-				cubeCamera.lookAt( 0, 0, forwardSign[ i ] );
-
-			}
-
-			const size = this._cubeSize;
-
-			_setViewport( cubeUVRenderTarget, col * size, i > 2 ? size : 0, size, size );
-
-			renderer.setRenderTarget( cubeUVRenderTarget );
-
-			if ( useSolidColor ) {
-
-				renderer.render( backgroundBox, cubeCamera );
-
-			}
-
-			renderer.render( scene, cubeCamera );
-
-		}
-
-		backgroundBox.geometry.dispose();
-		backgroundBox.material.dispose();
-
-		renderer.toneMapping = toneMapping;
-		renderer.autoClear = originalAutoClear;
-		scene.background = background;
-
-	}
-
-	_textureToCubeUV( texture, cubeUVRenderTarget ) {
-
-		const renderer = this._renderer;
-
-		const isCubeTexture = ( texture.mapping === CubeReflectionMapping || texture.mapping === CubeRefractionMapping );
-
-		if ( isCubeTexture ) {
-
-			if ( this._cubemapMaterial === null ) {
-
-				this._cubemapMaterial = _getCubemapMaterial();
-
-			}
-
-			this._cubemapMaterial.uniforms.flipEnvMap.value = ( texture.isRenderTargetTexture === false ) ? - 1 : 1;
-
-		} else {
-
-			if ( this._equirectMaterial === null ) {
-
-				this._equirectMaterial = _getEquirectMaterial();
-
-			}
-
-		}
-
-		const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;
-		const mesh = new Mesh( this._lodPlanes[ 0 ], material );
-
-		const uniforms = material.uniforms;
-
-		uniforms[ 'envMap' ].value = texture;
-
-		const size = this._cubeSize;
-
-		_setViewport( cubeUVRenderTarget, 0, 0, 3 * size, 2 * size );
-
-		renderer.setRenderTarget( cubeUVRenderTarget );
-		renderer.render( mesh, _flatCamera );
-
-	}
-
-	_applyPMREM( cubeUVRenderTarget ) {
-
-		const renderer = this._renderer;
-		const autoClear = renderer.autoClear;
-		renderer.autoClear = false;
-
-		for ( let i = 1; i < this._lodPlanes.length; i ++ ) {
-
-			const sigma = Math.sqrt( this._sigmas[ i ] * this._sigmas[ i ] - this._sigmas[ i - 1 ] * this._sigmas[ i - 1 ] );
-
-			const poleAxis = _axisDirections[ ( i - 1 ) % _axisDirections.length ];
-
-			this._blur( cubeUVRenderTarget, i - 1, i, sigma, poleAxis );
-
-		}
-
-		renderer.autoClear = autoClear;
-
-	}
-
-	/**
-	 * This is a two-pass Gaussian blur for a cubemap. Normally this is done
-	 * vertically and horizontally, but this breaks down on a cube. Here we apply
-	 * the blur latitudinally (around the poles), and then longitudinally (towards
-	 * the poles) to approximate the orthogonally-separable blur. It is least
-	 * accurate at the poles, but still does a decent job.
-	 */
-	_blur( cubeUVRenderTarget, lodIn, lodOut, sigma, poleAxis ) {
-
-		const pingPongRenderTarget = this._pingPongRenderTarget;
-
-		this._halfBlur(
-			cubeUVRenderTarget,
-			pingPongRenderTarget,
-			lodIn,
-			lodOut,
-			sigma,
-			'latitudinal',
-			poleAxis );
-
-		this._halfBlur(
-			pingPongRenderTarget,
-			cubeUVRenderTarget,
-			lodOut,
-			lodOut,
-			sigma,
-			'longitudinal',
-			poleAxis );
-
-	}
-
-	_halfBlur( targetIn, targetOut, lodIn, lodOut, sigmaRadians, direction, poleAxis ) {
-
-		const renderer = this._renderer;
-		const blurMaterial = this._blurMaterial;
-
-		if ( direction !== 'latitudinal' && direction !== 'longitudinal' ) {
-
-			console.error(
-				'blur direction must be either latitudinal or longitudinal!' );
-
-		}
-
-		// Number of standard deviations at which to cut off the discrete approximation.
-		const STANDARD_DEVIATIONS = 3;
-
-		const blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial );
-		const blurUniforms = blurMaterial.uniforms;
-
-		const pixels = this._sizeLods[ lodIn ] - 1;
-		const radiansPerPixel = isFinite( sigmaRadians ) ? Math.PI / ( 2 * pixels ) : 2 * Math.PI / ( 2 * MAX_SAMPLES - 1 );
-		const sigmaPixels = sigmaRadians / radiansPerPixel;
-		const samples = isFinite( sigmaRadians ) ? 1 + Math.floor( STANDARD_DEVIATIONS * sigmaPixels ) : MAX_SAMPLES;
-
-		if ( samples > MAX_SAMPLES ) {
-
-			console.warn( `sigmaRadians, ${
-				sigmaRadians}, is too large and will clip, as it requested ${
-				samples} samples when the maximum is set to ${MAX_SAMPLES}` );
-
-		}
-
-		const weights = [];
-		let sum = 0;
-
-		for ( let i = 0; i < MAX_SAMPLES; ++ i ) {
-
-			const x = i / sigmaPixels;
-			const weight = Math.exp( - x * x / 2 );
-			weights.push( weight );
-
-			if ( i === 0 ) {
-
-				sum += weight;
-
-			} else if ( i < samples ) {
-
-				sum += 2 * weight;
-
-			}
-
-		}
-
-		for ( let i = 0; i < weights.length; i ++ ) {
-
-			weights[ i ] = weights[ i ] / sum;
-
-		}
-
-		blurUniforms[ 'envMap' ].value = targetIn.texture;
-		blurUniforms[ 'samples' ].value = samples;
-		blurUniforms[ 'weights' ].value = weights;
-		blurUniforms[ 'latitudinal' ].value = direction === 'latitudinal';
-
-		if ( poleAxis ) {
-
-			blurUniforms[ 'poleAxis' ].value = poleAxis;
-
-		}
-
-		const { _lodMax } = this;
-		blurUniforms[ 'dTheta' ].value = radiansPerPixel;
-		blurUniforms[ 'mipInt' ].value = _lodMax - lodIn;
-
-		const outputSize = this._sizeLods[ lodOut ];
-		const x = 3 * outputSize * ( lodOut > _lodMax - LOD_MIN ? lodOut - _lodMax + LOD_MIN : 0 );
-		const y = 4 * ( this._cubeSize - outputSize );
-
-		_setViewport( targetOut, x, y, 3 * outputSize, 2 * outputSize );
-		renderer.setRenderTarget( targetOut );
-		renderer.render( blurMesh, _flatCamera );
-
-	}
-
-}
-
-
-
-function _createPlanes( lodMax ) {
-
-	const lodPlanes = [];
-	const sizeLods = [];
-	const sigmas = [];
-
-	let lod = lodMax;
-
-	const totalLods = lodMax - LOD_MIN + 1 + EXTRA_LOD_SIGMA.length;
-
-	for ( let i = 0; i < totalLods; i ++ ) {
-
-		const sizeLod = Math.pow( 2, lod );
-		sizeLods.push( sizeLod );
-		let sigma = 1.0 / sizeLod;
-
-		if ( i > lodMax - LOD_MIN ) {
-
-			sigma = EXTRA_LOD_SIGMA[ i - lodMax + LOD_MIN - 1 ];
-
-		} else if ( i === 0 ) {
-
-			sigma = 0;
-
-		}
-
-		sigmas.push( sigma );
-
-		const texelSize = 1.0 / ( sizeLod - 2 );
-		const min = - texelSize;
-		const max = 1 + texelSize;
-		const uv1 = [ min, min, max, min, max, max, min, min, max, max, min, max ];
-
-		const cubeFaces = 6;
-		const vertices = 6;
-		const positionSize = 3;
-		const uvSize = 2;
-		const faceIndexSize = 1;
-
-		const position = new Float32Array( positionSize * vertices * cubeFaces );
-		const uv = new Float32Array( uvSize * vertices * cubeFaces );
-		const faceIndex = new Float32Array( faceIndexSize * vertices * cubeFaces );
-
-		for ( let face = 0; face < cubeFaces; face ++ ) {
-
-			const x = ( face % 3 ) * 2 / 3 - 1;
-			const y = face > 2 ? 0 : - 1;
-			const coordinates = [
-				x, y, 0,
-				x + 2 / 3, y, 0,
-				x + 2 / 3, y + 1, 0,
-				x, y, 0,
-				x + 2 / 3, y + 1, 0,
-				x, y + 1, 0
-			];
-			position.set( coordinates, positionSize * vertices * face );
-			uv.set( uv1, uvSize * vertices * face );
-			const fill = [ face, face, face, face, face, face ];
-			faceIndex.set( fill, faceIndexSize * vertices * face );
-
-		}
-
-		const planes = new BufferGeometry();
-		planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );
-		planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );
-		planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );
-		lodPlanes.push( planes );
-
-		if ( lod > LOD_MIN ) {
-
-			lod --;
-
-		}
-
-	}
-
-	return { lodPlanes, sizeLods, sigmas };
-
-}
-
-function _createRenderTarget( width, height, params ) {
-
-	const cubeUVRenderTarget = new WebGLRenderTarget( width, height, params );
-	cubeUVRenderTarget.texture.mapping = CubeUVReflectionMapping;
-	cubeUVRenderTarget.texture.name = 'PMREM.cubeUv';
-	cubeUVRenderTarget.scissorTest = true;
-	return cubeUVRenderTarget;
-
-}
-
-function _setViewport( target, x, y, width, height ) {
-
-	target.viewport.set( x, y, width, height );
-	target.scissor.set( x, y, width, height );
-
-}
-
-function _getBlurShader( lodMax, width, height ) {
-
-	const weights = new Float32Array( MAX_SAMPLES );
-	const poleAxis = new Vector3( 0, 1, 0 );
-	const shaderMaterial = new ShaderMaterial( {
-
-		name: 'SphericalGaussianBlur',
-
-		defines: {
-			'n': MAX_SAMPLES,
-			'CUBEUV_TEXEL_WIDTH': 1.0 / width,
-			'CUBEUV_TEXEL_HEIGHT': 1.0 / height,
-			'CUBEUV_MAX_MIP': `${lodMax}.0`,
-		},
-
-		uniforms: {
-			'envMap': { value: null },
-			'samples': { value: 1 },
-			'weights': { value: weights },
-			'latitudinal': { value: false },
-			'dTheta': { value: 0 },
-			'mipInt': { value: 0 },
-			'poleAxis': { value: poleAxis }
-		},
-
-		vertexShader: _getCommonVertexShader(),
-
-		fragmentShader: /* glsl */`
-
-			precision mediump float;
-			precision mediump int;
-
-			varying vec3 vOutputDirection;
-
-			uniform sampler2D envMap;
-			uniform int samples;
-			uniform float weights[ n ];
-			uniform bool latitudinal;
-			uniform float dTheta;
-			uniform float mipInt;
-			uniform vec3 poleAxis;
-
-			#define ENVMAP_TYPE_CUBE_UV
-			#include <cube_uv_reflection_fragment>
-
-			vec3 getSample( float theta, vec3 axis ) {
-
-				float cosTheta = cos( theta );
-				// Rodrigues' axis-angle rotation
-				vec3 sampleDirection = vOutputDirection * cosTheta
-					+ cross( axis, vOutputDirection ) * sin( theta )
-					+ axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta );
-
-				return bilinearCubeUV( envMap, sampleDirection, mipInt );
-
-			}
-
-			void main() {
-
-				vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection );
-
-				if ( all( equal( axis, vec3( 0.0 ) ) ) ) {
-
-					axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x );
-
-				}
-
-				axis = normalize( axis );
-
-				gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 );
-				gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis );
-
-				for ( int i = 1; i < n; i++ ) {
-
-					if ( i >= samples ) {
-
-						break;
-
-					}
-
-					float theta = dTheta * float( i );
-					gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis );
-					gl_FragColor.rgb += weights[ i ] * getSample( theta, axis );
-
-				}
-
-			}
-		`,
-
-		blending: NoBlending,
-		depthTest: false,
-		depthWrite: false
-
-	} );
-
-	return shaderMaterial;
-
-}
-
-function _getEquirectMaterial() {
-
-	return new ShaderMaterial( {
-
-		name: 'EquirectangularToCubeUV',
-
-		uniforms: {
-			'envMap': { value: null }
-		},
-
-		vertexShader: _getCommonVertexShader(),
-
-		fragmentShader: /* glsl */`
-
-			precision mediump float;
-			precision mediump int;
-
-			varying vec3 vOutputDirection;
-
-			uniform sampler2D envMap;
-
-			#include <common>
-
-			void main() {
-
-				vec3 outputDirection = normalize( vOutputDirection );
-				vec2 uv = equirectUv( outputDirection );
-
-				gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 );
-
-			}
-		`,
-
-		blending: NoBlending,
-		depthTest: false,
-		depthWrite: false
-
-	} );
-
-}
-
-function _getCubemapMaterial() {
-
-	return new ShaderMaterial( {
-
-		name: 'CubemapToCubeUV',
-
-		uniforms: {
-			'envMap': { value: null },
-			'flipEnvMap': { value: - 1 }
-		},
-
-		vertexShader: _getCommonVertexShader(),
-
-		fragmentShader: /* glsl */`
-
-			precision mediump float;
-			precision mediump int;
-
-			uniform float flipEnvMap;
-
-			varying vec3 vOutputDirection;
-
-			uniform samplerCube envMap;
-
-			void main() {
-
-				gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) );
-
-			}
-		`,
-
-		blending: NoBlending,
-		depthTest: false,
-		depthWrite: false
-
-	} );
-
-}
-
-function _getCommonVertexShader() {
-
-	return /* glsl */`
-
-		precision mediump float;
-		precision mediump int;
-
-		attribute float faceIndex;
-
-		varying vec3 vOutputDirection;
-
-		// RH coordinate system; PMREM face-indexing convention
-		vec3 getDirection( vec2 uv, float face ) {
-
-			uv = 2.0 * uv - 1.0;
-
-			vec3 direction = vec3( uv, 1.0 );
-
-			if ( face == 0.0 ) {
-
-				direction = direction.zyx; // ( 1, v, u ) pos x
-
-			} else if ( face == 1.0 ) {
-
-				direction = direction.xzy;
-				direction.xz *= -1.0; // ( -u, 1, -v ) pos y
-
-			} else if ( face == 2.0 ) {
-
-				direction.x *= -1.0; // ( -u, v, 1 ) pos z
-
-			} else if ( face == 3.0 ) {
-
-				direction = direction.zyx;
-				direction.xz *= -1.0; // ( -1, v, -u ) neg x
-
-			} else if ( face == 4.0 ) {
-
-				direction = direction.xzy;
-				direction.xy *= -1.0; // ( -u, -1, v ) neg y
-
-			} else if ( face == 5.0 ) {
-
-				direction.z *= -1.0; // ( u, v, -1 ) neg z
-
-			}
-
-			return direction;
-
-		}
-
-		void main() {
-
-			vOutputDirection = getDirection( uv, faceIndex );
-			gl_Position = vec4( position, 1.0 );
-
-		}
-	`;
-
-}
-
-function WebGLCubeUVMaps( renderer ) {
-
-	let cubeUVmaps = new WeakMap();
-
-	let pmremGenerator = null;
-
-	function get( texture ) {
-
-		if ( texture && texture.isTexture ) {
-
-			const mapping = texture.mapping;
-
-			const isEquirectMap = ( mapping === EquirectangularReflectionMapping || mapping === EquirectangularRefractionMapping );
-			const isCubeMap = ( mapping === CubeReflectionMapping || mapping === CubeRefractionMapping );
-
-			// equirect/cube map to cubeUV conversion
-
-			if ( isEquirectMap || isCubeMap ) {
-
-				if ( texture.isRenderTargetTexture && texture.needsPMREMUpdate === true ) {
-
-					texture.needsPMREMUpdate = false;
-
-					let renderTarget = cubeUVmaps.get( texture );
-
-					if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
-
-					renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture, renderTarget ) : pmremGenerator.fromCubemap( texture, renderTarget );
-					cubeUVmaps.set( texture, renderTarget );
-
-					return renderTarget.texture;
-
-				} else {
-
-					if ( cubeUVmaps.has( texture ) ) {
-
-						return cubeUVmaps.get( texture ).texture;
-
-					} else {
-
-						const image = texture.image;
-
-						if ( ( isEquirectMap && image && image.height > 0 ) || ( isCubeMap && image && isCubeTextureComplete( image ) ) ) {
-
-							if ( pmremGenerator === null ) pmremGenerator = new PMREMGenerator( renderer );
-
-							const renderTarget = isEquirectMap ? pmremGenerator.fromEquirectangular( texture ) : pmremGenerator.fromCubemap( texture );
-							cubeUVmaps.set( texture, renderTarget );
-
-							texture.addEventListener( 'dispose', onTextureDispose );
-
-							return renderTarget.texture;
-
-						} else {
-
-							// image not yet ready. try the conversion next frame
-
-							return null;
-
-						}
-
-					}
-
-				}
-
-			}
-
-		}
-
-		return texture;
-
-	}
-
-	function isCubeTextureComplete( image ) {
-
-		let count = 0;
-		const length = 6;
-
-		for ( let i = 0; i < length; i ++ ) {
-
-			if ( image[ i ] !== undefined ) count ++;
-
-		}
-
-		return count === length;
-
-
-	}
-
-	function onTextureDispose( event ) {
-
-		const texture = event.target;
-
-		texture.removeEventListener( 'dispose', onTextureDispose );
-
-		const cubemapUV = cubeUVmaps.get( texture );
-
-		if ( cubemapUV !== undefined ) {
-
-			cubeUVmaps.delete( texture );
-			cubemapUV.dispose();
-
-		}
-
-	}
-
-	function dispose() {
-
-		cubeUVmaps = new WeakMap();
-
-		if ( pmremGenerator !== null ) {
-
-			pmremGenerator.dispose();
-			pmremGenerator = null;
-
-		}
-
-	}
-
-	return {
-		get: get,
-		dispose: dispose
-	};
-
-}
-
-function WebGLExtensions( gl ) {
-
-	const extensions = {};
-
-	function getExtension( name ) {
-
-		if ( extensions[ name ] !== undefined ) {
-
-			return extensions[ name ];
-
-		}
-
-		let extension;
-
-		switch ( name ) {
-
-			case 'WEBGL_depth_texture':
-				extension = gl.getExtension( 'WEBGL_depth_texture' ) || gl.getExtension( 'MOZ_WEBGL_depth_texture' ) || gl.getExtension( 'WEBKIT_WEBGL_depth_texture' );
-				break;
-
-			case 'EXT_texture_filter_anisotropic':
-				extension = gl.getExtension( 'EXT_texture_filter_anisotropic' ) || gl.getExtension( 'MOZ_EXT_texture_filter_anisotropic' ) || gl.getExtension( 'WEBKIT_EXT_texture_filter_anisotropic' );
-				break;
-
-			case 'WEBGL_compressed_texture_s3tc':
-				extension = gl.getExtension( 'WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'MOZ_WEBGL_compressed_texture_s3tc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_s3tc' );
-				break;
-
-			case 'WEBGL_compressed_texture_pvrtc':
-				extension = gl.getExtension( 'WEBGL_compressed_texture_pvrtc' ) || gl.getExtension( 'WEBKIT_WEBGL_compressed_texture_pvrtc' );
-				break;
-
-			default:
-				extension = gl.getExtension( name );
-
-		}
-
-		extensions[ name ] = extension;
-
-		return extension;
-
-	}
-
-	return {
-
-		has: function ( name ) {
-
-			return getExtension( name ) !== null;
-
-		},
-
-		init: function ( capabilities ) {
-
-			if ( capabilities.isWebGL2 ) {
-
-				getExtension( 'EXT_color_buffer_float' );
-
-			} else {
-
-				getExtension( 'WEBGL_depth_texture' );
-				getExtension( 'OES_texture_float' );
-				getExtension( 'OES_texture_half_float' );
-				getExtension( 'OES_texture_half_float_linear' );
-				getExtension( 'OES_standard_derivatives' );
-				getExtension( 'OES_element_index_uint' );
-				getExtension( 'OES_vertex_array_object' );
-				getExtension( 'ANGLE_instanced_arrays' );
-
-			}
-
-			getExtension( 'OES_texture_float_linear' );
-			getExtension( 'EXT_color_buffer_half_float' );
-			getExtension( 'WEBGL_multisampled_render_to_texture' );
-
-		},
-
-		get: function ( name ) {
-
-			const extension = getExtension( name );
-
-			if ( extension === null ) {
-
-				console.warn( 'THREE.WebGLRenderer: ' + name + ' extension not supported.' );
-
-			}
-
-			return extension;
-
-		}
-
-	};
-
-}
-
-function WebGLGeometries( gl, attributes, info, bindingStates ) {
-
-	const geometries = {};
-	const wireframeAttributes = new WeakMap();
-
-	function onGeometryDispose( event ) {
-
-		const geometry = event.target;
-
-		if ( geometry.index !== null ) {
-
-			attributes.remove( geometry.index );
-
-		}
-
-		for ( const name in geometry.attributes ) {
-
-			attributes.remove( geometry.attributes[ name ] );
-
-		}
-
-		geometry.removeEventListener( 'dispose', onGeometryDispose );
-
-		delete geometries[ geometry.id ];
-
-		const attribute = wireframeAttributes.get( geometry );
-
-		if ( attribute ) {
-
-			attributes.remove( attribute );
-			wireframeAttributes.delete( geometry );
-
-		}
-
-		bindingStates.releaseStatesOfGeometry( geometry );
-
-		if ( geometry.isInstancedBufferGeometry === true ) {
-
-			delete geometry._maxInstanceCount;
-
-		}
-
-		//
-
-		info.memory.geometries --;
-
-	}
-
-	function get( object, geometry ) {
-
-		if ( geometries[ geometry.id ] === true ) return geometry;
-
-		geometry.addEventListener( 'dispose', onGeometryDispose );
-
-		geometries[ geometry.id ] = true;
-
-		info.memory.geometries ++;
-
-		return geometry;
-
-	}
-
-	function update( geometry ) {
-
-		const geometryAttributes = geometry.attributes;
-
-		// Updating index buffer in VAO now. See WebGLBindingStates.
-
-		for ( const name in geometryAttributes ) {
-
-			attributes.update( geometryAttributes[ name ], gl.ARRAY_BUFFER );
-
-		}
-
-		// morph targets
-
-		const morphAttributes = geometry.morphAttributes;
-
-		for ( const name in morphAttributes ) {
-
-			const array = morphAttributes[ name ];
-
-			for ( let i = 0, l = array.length; i < l; i ++ ) {
-
-				attributes.update( array[ i ], gl.ARRAY_BUFFER );
-
-			}
-
-		}
-
-	}
-
-	function updateWireframeAttribute( geometry ) {
-
-		const indices = [];
-
-		const geometryIndex = geometry.index;
-		const geometryPosition = geometry.attributes.position;
-		let version = 0;
-
-		if ( geometryIndex !== null ) {
-
-			const array = geometryIndex.array;
-			version = geometryIndex.version;
-
-			for ( let i = 0, l = array.length; i < l; i += 3 ) {
-
-				const a = array[ i + 0 ];
-				const b = array[ i + 1 ];
-				const c = array[ i + 2 ];
-
-				indices.push( a, b, b, c, c, a );
-
-			}
-
-		} else {
-
-			const array = geometryPosition.array;
-			version = geometryPosition.version;
-
-			for ( let i = 0, l = ( array.length / 3 ) - 1; i < l; i += 3 ) {
-
-				const a = i + 0;
-				const b = i + 1;
-				const c = i + 2;
-
-				indices.push( a, b, b, c, c, a );
-
-			}
-
-		}
-
-		const attribute = new ( arrayNeedsUint32( indices ) ? Uint32BufferAttribute : Uint16BufferAttribute )( indices, 1 );
-		attribute.version = version;
-
-		// Updating index buffer in VAO now. See WebGLBindingStates
-
-		//
-
-		const previousAttribute = wireframeAttributes.get( geometry );
-
-		if ( previousAttribute ) attributes.remove( previousAttribute );
-
-		//
-
-		wireframeAttributes.set( geometry, attribute );
-
-	}
-
-	function getWireframeAttribute( geometry ) {
-
-		const currentAttribute = wireframeAttributes.get( geometry );
-
-		if ( currentAttribute ) {
-
-			const geometryIndex = geometry.index;
-
-			if ( geometryIndex !== null ) {
-
-				// if the attribute is obsolete, create a new one
-
-				if ( currentAttribute.version < geometryIndex.version ) {
-
-					updateWireframeAttribute( geometry );
-
-				}
-
-			}
-
-		} else {
-
-			updateWireframeAttribute( geometry );
-
-		}
-
-		return wireframeAttributes.get( geometry );
-
-	}
-
-	return {
-
-		get: get,
-		update: update,
-
-		getWireframeAttribute: getWireframeAttribute
-
-	};
-
-}
-
-function WebGLIndexedBufferRenderer( gl, extensions, info, capabilities ) {
-
-	const isWebGL2 = capabilities.isWebGL2;
-
-	let mode;
-
-	function setMode( value ) {
-
-		mode = value;
-
-	}
-
-	let type, bytesPerElement;
-
-	function setIndex( value ) {
-
-		type = value.type;
-		bytesPerElement = value.bytesPerElement;
-
-	}
-
-	function render( start, count ) {
-
-		gl.drawElements( mode, count, type, start * bytesPerElement );
-
-		info.update( count, mode, 1 );
-
-	}
-
-	function renderInstances( start, count, primcount ) {
-
-		if ( primcount === 0 ) return;
-
-		let extension, methodName;
-
-		if ( isWebGL2 ) {
-
-			extension = gl;
-			methodName = 'drawElementsInstanced';
-
-		} else {
-
-			extension = extensions.get( 'ANGLE_instanced_arrays' );
-			methodName = 'drawElementsInstancedANGLE';
-
-			if ( extension === null ) {
-
-				console.error( 'THREE.WebGLIndexedBufferRenderer: using THREE.InstancedBufferGeometry but hardware does not support extension ANGLE_instanced_arrays.' );
-				return;
-
-			}
-
-		}
-
-		extension[ methodName ]( mode, count, type, start * bytesPerElement, primcount );
-
-		info.update( count, mode, primcount );
-
-	}
-
-	//
-
-	this.setMode = setMode;
-	this.setIndex = setIndex;
-	this.render = render;
-	this.renderInstances = renderInstances;
-
-}
-
-function WebGLInfo( gl ) {
-
-	const memory = {
-		geometries: 0,
-		textures: 0
-	};
-
-	const render = {
-		frame: 0,
-		calls: 0,
-		triangles: 0,
-		points: 0,
-		lines: 0
-	};
-
-	function update( count, mode, instanceCount ) {
-
-		render.calls ++;
-
-		switch ( mode ) {
-
-			case gl.TRIANGLES:
-				render.triangles += instanceCount * ( count / 3 );
-				break;
-
-			case gl.LINES:
-				render.lines += instanceCount * ( count / 2 );
-				break;
-
-			case gl.LINE_STRIP:
-				render.lines += instanceCount * ( count - 1 );
-				break;
-
-			case gl.LINE_LOOP:
-				render.lines += instanceCount * count;
-				break;
-
-			case gl.POINTS:
-				render.points += instanceCount * count;
-				break;
-
-			default:
-				console.error( 'THREE.WebGLInfo: Unknown draw mode:', mode );
-				break;
-
-		}
-
-	}
-
-	function reset() {
-
-		render.frame ++;
-		render.calls = 0;
-		render.triangles = 0;
-		render.points = 0;
-		render.lines = 0;
-
-	}
-
-	return {
-		memory: memory,
-		render: render,
-		programs: null,
-		autoReset: true,
-		reset: reset,
-		update: update
-	};
-
-}
-
-function numericalSort( a, b ) {
-
-	return a[ 0 ] - b[ 0 ];
-
-}
-
-function absNumericalSort( a, b ) {
-
-	return Math.abs( b[ 1 ] ) - Math.abs( a[ 1 ] );
-
-}
-
-function WebGLMorphtargets( gl, capabilities, textures ) {
-
-	const influencesList = {};
-	const morphInfluences = new Float32Array( 8 );
-	const morphTextures = new WeakMap();
-	const morph = new Vector4();
-
-	const workInfluences = [];
-
-	for ( let i = 0; i < 8; i ++ ) {
-
-		workInfluences[ i ] = [ i, 0 ];
-
-	}
-
-	function update( object, geometry, program ) {
-
-		const objectInfluences = object.morphTargetInfluences;
-
-		if ( capabilities.isWebGL2 === true ) {
-
-			// instead of using attributes, the WebGL 2 code path encodes morph targets
-			// into an array of data textures. Each layer represents a single morph target.
-
-			const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
-			const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
-
-			let entry = morphTextures.get( geometry );
-
-			if ( entry === undefined || entry.count !== morphTargetsCount ) {
-
-				if ( entry !== undefined ) entry.texture.dispose();
-
-				const hasMorphPosition = geometry.morphAttributes.position !== undefined;
-				const hasMorphNormals = geometry.morphAttributes.normal !== undefined;
-				const hasMorphColors = geometry.morphAttributes.color !== undefined;
-
-				const morphTargets = geometry.morphAttributes.position || [];
-				const morphNormals = geometry.morphAttributes.normal || [];
-				const morphColors = geometry.morphAttributes.color || [];
-
-				let vertexDataCount = 0;
-
-				if ( hasMorphPosition === true ) vertexDataCount = 1;
-				if ( hasMorphNormals === true ) vertexDataCount = 2;
-				if ( hasMorphColors === true ) vertexDataCount = 3;
-
-				let width = geometry.attributes.position.count * vertexDataCount;
-				let height = 1;
-
-				if ( width > capabilities.maxTextureSize ) {
-
-					height = Math.ceil( width / capabilities.maxTextureSize );
-					width = capabilities.maxTextureSize;
-
-				}
-
-				const buffer = new Float32Array( width * height * 4 * morphTargetsCount );
-
-				const texture = new DataArrayTexture( buffer, width, height, morphTargetsCount );
-				texture.type = FloatType;
-				texture.needsUpdate = true;
-
-				// fill buffer
-
-				const vertexDataStride = vertexDataCount * 4;
-
-				for ( let i = 0; i < morphTargetsCount; i ++ ) {
-
-					const morphTarget = morphTargets[ i ];
-					const morphNormal = morphNormals[ i ];
-					const morphColor = morphColors[ i ];
-
-					const offset = width * height * 4 * i;
-
-					for ( let j = 0; j < morphTarget.count; j ++ ) {
-
-						const stride = j * vertexDataStride;
-
-						if ( hasMorphPosition === true ) {
-
-							morph.fromBufferAttribute( morphTarget, j );
-
-							buffer[ offset + stride + 0 ] = morph.x;
-							buffer[ offset + stride + 1 ] = morph.y;
-							buffer[ offset + stride + 2 ] = morph.z;
-							buffer[ offset + stride + 3 ] = 0;
-
-						}
-
-						if ( hasMorphNormals === true ) {
-
-							morph.fromBufferAttribute( morphNormal, j );
-
-							buffer[ offset + stride + 4 ] = morph.x;
-							buffer[ offset + stride + 5 ] = morph.y;
-							buffer[ offset + stride + 6 ] = morph.z;
-							buffer[ offset + stride + 7 ] = 0;
-
-						}
-
-						if ( hasMorphColors === true ) {
-
-							morph.fromBufferAttribute( morphColor, j );
-
-							buffer[ offset + stride + 8 ] = morph.x;
-							buffer[ offset + stride + 9 ] = morph.y;
-							buffer[ offset + stride + 10 ] = morph.z;
-							buffer[ offset + stride + 11 ] = ( morphColor.itemSize === 4 ) ? morph.w : 1;
-
-						}
-
-					}
-
-				}
-
-				entry = {
-					count: morphTargetsCount,
-					texture: texture,
-					size: new Vector2( width, height )
-				};
-
-				morphTextures.set( geometry, entry );
-
-				function disposeTexture() {
-
-					texture.dispose();
-
-					morphTextures.delete( geometry );
-
-					geometry.removeEventListener( 'dispose', disposeTexture );
-
-				}
-
-				geometry.addEventListener( 'dispose', disposeTexture );
-
-			}
-
-			//
-
-			let morphInfluencesSum = 0;
-
-			for ( let i = 0; i < objectInfluences.length; i ++ ) {
-
-				morphInfluencesSum += objectInfluences[ i ];
-
-			}
-
-			const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;
-
-			program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );
-			program.getUniforms().setValue( gl, 'morphTargetInfluences', objectInfluences );
-
-			program.getUniforms().setValue( gl, 'morphTargetsTexture', entry.texture, textures );
-			program.getUniforms().setValue( gl, 'morphTargetsTextureSize', entry.size );
-
-
-		} else {
-
-			// When object doesn't have morph target influences defined, we treat it as a 0-length array
-			// This is important to make sure we set up morphTargetBaseInfluence / morphTargetInfluences
-
-			const length = objectInfluences === undefined ? 0 : objectInfluences.length;
-
-			let influences = influencesList[ geometry.id ];
-
-			if ( influences === undefined || influences.length !== length ) {
-
-				// initialise list
-
-				influences = [];
-
-				for ( let i = 0; i < length; i ++ ) {
-
-					influences[ i ] = [ i, 0 ];
-
-				}
-
-				influencesList[ geometry.id ] = influences;
-
-			}
-
-			// Collect influences
-
-			for ( let i = 0; i < length; i ++ ) {
-
-				const influence = influences[ i ];
-
-				influence[ 0 ] = i;
-				influence[ 1 ] = objectInfluences[ i ];
-
-			}
-
-			influences.sort( absNumericalSort );
-
-			for ( let i = 0; i < 8; i ++ ) {
-
-				if ( i < length && influences[ i ][ 1 ] ) {
-
-					workInfluences[ i ][ 0 ] = influences[ i ][ 0 ];
-					workInfluences[ i ][ 1 ] = influences[ i ][ 1 ];
-
-				} else {
-
-					workInfluences[ i ][ 0 ] = Number.MAX_SAFE_INTEGER;
-					workInfluences[ i ][ 1 ] = 0;
-
-				}
-
-			}
-
-			workInfluences.sort( numericalSort );
-
-			const morphTargets = geometry.morphAttributes.position;
-			const morphNormals = geometry.morphAttributes.normal;
-
-			let morphInfluencesSum = 0;
-
-			for ( let i = 0; i < 8; i ++ ) {
-
-				const influence = workInfluences[ i ];
-				const index = influence[ 0 ];
-				const value = influence[ 1 ];
-
-				if ( index !== Number.MAX_SAFE_INTEGER && value ) {
-
-					if ( morphTargets && geometry.getAttribute( 'morphTarget' + i ) !== morphTargets[ index ] ) {
-
-						geometry.setAttribute( 'morphTarget' + i, morphTargets[ index ] );
-
-					}
-
-					if ( morphNormals && geometry.getAttribute( 'morphNormal' + i ) !== morphNormals[ index ] ) {
-
-						geometry.setAttribute( 'morphNormal' + i, morphNormals[ index ] );
-
-					}
-
-					morphInfluences[ i ] = value;
-					morphInfluencesSum += value;
-
-				} else {
-
-					if ( morphTargets && geometry.hasAttribute( 'morphTarget' + i ) === true ) {
-
-						geometry.deleteAttribute( 'morphTarget' + i );
-
-					}
-
-					if ( morphNormals && geometry.hasAttribute( 'morphNormal' + i ) === true ) {
-
-						geometry.deleteAttribute( 'morphNormal' + i );
-
-					}
-
-					morphInfluences[ i ] = 0;
-
-				}
-
-			}
-
-			// GLSL shader uses formula baseinfluence * base + sum(target * influence)
-			// This allows us to switch between absolute morphs and relative morphs without changing shader code
-			// When baseinfluence = 1 - sum(influence), the above is equivalent to sum((target - base) * influence)
-			const morphBaseInfluence = geometry.morphTargetsRelative ? 1 : 1 - morphInfluencesSum;
-
-			program.getUniforms().setValue( gl, 'morphTargetBaseInfluence', morphBaseInfluence );
-			program.getUniforms().setValue( gl, 'morphTargetInfluences', morphInfluences );
-
-		}
-
-	}
-
-	return {
-
-		update: update
-
-	};
-
-}
-
-function WebGLObjects( gl, geometries, attributes, info ) {
-
-	let updateMap = new WeakMap();
-
-	function update( object ) {
-
-		const frame = info.render.frame;
-
-		const geometry = object.geometry;
-		const buffergeometry = geometries.get( object, geometry );
-
-		// Update once per frame
-
-		if ( updateMap.get( buffergeometry ) !== frame ) {
-
-			geometries.update( buffergeometry );
-
-			updateMap.set( buffergeometry, frame );
-
-		}
-
-		if ( object.isInstancedMesh ) {
-
-			if ( object.hasEventListener( 'dispose', onInstancedMeshDispose ) === false ) {
-
-				object.addEventListener( 'dispose', onInstancedMeshDispose );
-
-			}
-
-			attributes.update( object.instanceMatrix, gl.ARRAY_BUFFER );
-
-			if ( object.instanceColor !== null ) {
-
-				attributes.update( object.instanceColor, gl.ARRAY_BUFFER );
-
-			}
-
-		}
-
-		return buffergeometry;
-
-	}
-
-	function dispose() {
-
-		updateMap = new WeakMap();
-
-	}
-
-	function onInstancedMeshDispose( event ) {
-
-		const instancedMesh = event.target;
-
-		instancedMesh.removeEventListener( 'dispose', onInstancedMeshDispose );
-
-		attributes.remove( instancedMesh.instanceMatrix );
-
-		if ( instancedMesh.instanceColor !== null ) attributes.remove( instancedMesh.instanceColor );
-
-	}
-
-	return {
-
-		update: update,
-		dispose: dispose
-
-	};
-
-}
-
-/**
- * Uniforms of a program.
- * Those form a tree structure with a special top-level container for the root,
- * which you get by calling 'new WebGLUniforms( gl, program )'.
- *
- *
- * Properties of inner nodes including the top-level container:
- *
- * .seq - array of nested uniforms
- * .map - nested uniforms by name
- *
- *
- * Methods of all nodes except the top-level container:
- *
- * .setValue( gl, value, [textures] )
- *
- * 		uploads a uniform value(s)
- *  	the 'textures' parameter is needed for sampler uniforms
- *
- *
- * Static methods of the top-level container (textures factorizations):
- *
- * .upload( gl, seq, values, textures )
- *
- * 		sets uniforms in 'seq' to 'values[id].value'
- *
- * .seqWithValue( seq, values ) : filteredSeq
- *
- * 		filters 'seq' entries with corresponding entry in values
- *
- *
- * Methods of the top-level container (textures factorizations):
- *
- * .setValue( gl, name, value, textures )
- *
- * 		sets uniform with  name 'name' to 'value'
- *
- * .setOptional( gl, obj, prop )
- *
- * 		like .set for an optional property of the object
- *
- */
-
-const emptyTexture = /*@__PURE__*/ new Texture();
-const emptyArrayTexture = /*@__PURE__*/ new DataArrayTexture();
-const empty3dTexture = /*@__PURE__*/ new Data3DTexture();
-const emptyCubeTexture = /*@__PURE__*/ new CubeTexture();
-
-// --- Utilities ---
-
-// Array Caches (provide typed arrays for temporary by size)
-
-const arrayCacheF32 = [];
-const arrayCacheI32 = [];
-
-// Float32Array caches used for uploading Matrix uniforms
-
-const mat4array = new Float32Array( 16 );
-const mat3array = new Float32Array( 9 );
-const mat2array = new Float32Array( 4 );
-
-// Flattening for arrays of vectors and matrices
-
-function flatten( array, nBlocks, blockSize ) {
-
-	const firstElem = array[ 0 ];
-
-	if ( firstElem <= 0 || firstElem > 0 ) return array;
-	// unoptimized: ! isNaN( firstElem )
-	// see http://jacksondunstan.com/articles/983
-
-	const n = nBlocks * blockSize;
-	let r = arrayCacheF32[ n ];
-
-	if ( r === undefined ) {
-
-		r = new Float32Array( n );
-		arrayCacheF32[ n ] = r;
-
-	}
-
-	if ( nBlocks !== 0 ) {
-
-		firstElem.toArray( r, 0 );
-
-		for ( let i = 1, offset = 0; i !== nBlocks; ++ i ) {
-
-			offset += blockSize;
-			array[ i ].toArray( r, offset );
-
-		}
-
-	}
-
-	return r;
-
-}
-
-function arraysEqual( a, b ) {
-
-	if ( a.length !== b.length ) return false;
-
-	for ( let i = 0, l = a.length; i < l; i ++ ) {
-
-		if ( a[ i ] !== b[ i ] ) return false;
-
-	}
-
-	return true;
-
-}
-
-function copyArray( a, b ) {
-
-	for ( let i = 0, l = b.length; i < l; i ++ ) {
-
-		a[ i ] = b[ i ];
-
-	}
-
-}
-
-// Texture unit allocation
-
-function allocTexUnits( textures, n ) {
-
-	let r = arrayCacheI32[ n ];
-
-	if ( r === undefined ) {
-
-		r = new Int32Array( n );
-		arrayCacheI32[ n ] = r;
-
-	}
-
-	for ( let i = 0; i !== n; ++ i ) {
-
-		r[ i ] = textures.allocateTextureUnit();
-
-	}
-
-	return r;
-
-}
-
-// --- Setters ---
-
-// Note: Defining these methods externally, because they come in a bunch
-// and this way their names minify.
-
-// Single scalar
-
-function setValueV1f( gl, v ) {
-
-	const cache = this.cache;
-
-	if ( cache[ 0 ] === v ) return;
-
-	gl.uniform1f( this.addr, v );
-
-	cache[ 0 ] = v;
-
-}
-
-// Single float vector (from flat array or THREE.VectorN)
-
-function setValueV2f( gl, v ) {
-
-	const cache = this.cache;
-
-	if ( v.x !== undefined ) {
-
-		if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {
-
-			gl.uniform2f( this.addr, v.x, v.y );
-
-			cache[ 0 ] = v.x;
-			cache[ 1 ] = v.y;
-
-		}
-
-	} else {
-
-		if ( arraysEqual( cache, v ) ) return;
-
-		gl.uniform2fv( this.addr, v );
-
-		copyArray( cache, v );
-
-	}
-
-}
-
-function setValueV3f( gl, v ) {
-
-	const cache = this.cache;
-
-	if ( v.x !== undefined ) {
-
-		if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {
-
-			gl.uniform3f( this.addr, v.x, v.y, v.z );
-
-			cache[ 0 ] = v.x;
-			cache[ 1 ] = v.y;
-			cache[ 2 ] = v.z;
-
-		}
-
-	} else if ( v.r !== undefined ) {
-
-		if ( cache[ 0 ] !== v.r || cache[ 1 ] !== v.g || cache[ 2 ] !== v.b ) {
-
-			gl.uniform3f( this.addr, v.r, v.g, v.b );
-
-			cache[ 0 ] = v.r;
-			cache[ 1 ] = v.g;
-			cache[ 2 ] = v.b;
-
-		}
-
-	} else {
-
-		if ( arraysEqual( cache, v ) ) return;
-
-		gl.uniform3fv( this.addr, v );
-
-		copyArray( cache, v );
-
-	}
-
-}
-
-function setValueV4f( gl, v ) {
-
-	const cache = this.cache;
-
-	if ( v.x !== undefined ) {
-
-		if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {
-
-			gl.uniform4f( this.addr, v.x, v.y, v.z, v.w );
-
-			cache[ 0 ] = v.x;
-			cache[ 1 ] = v.y;
-			cache[ 2 ] = v.z;
-			cache[ 3 ] = v.w;
-
-		}
-
-	} else {
-
-		if ( arraysEqual( cache, v ) ) return;
-
-		gl.uniform4fv( this.addr, v );
-
-		copyArray( cache, v );
-
-	}
-
-}
-
-// Single matrix (from flat array or THREE.MatrixN)
-
-function setValueM2( gl, v ) {
-
-	const cache = this.cache;
-	const elements = v.elements;
-
-	if ( elements === undefined ) {
-
-		if ( arraysEqual( cache, v ) ) return;
-
-		gl.uniformMatrix2fv( this.addr, false, v );
-
-		copyArray( cache, v );
-
-	} else {
-
-		if ( arraysEqual( cache, elements ) ) return;
-
-		mat2array.set( elements );
-
-		gl.uniformMatrix2fv( this.addr, false, mat2array );
-
-		copyArray( cache, elements );
-
-	}
-
-}
-
-function setValueM3( gl, v ) {
-
-	const cache = this.cache;
-	const elements = v.elements;
-
-	if ( elements === undefined ) {
-
-		if ( arraysEqual( cache, v ) ) return;
-
-		gl.uniformMatrix3fv( this.addr, false, v );
-
-		copyArray( cache, v );
-
-	} else {
-
-		if ( arraysEqual( cache, elements ) ) return;
-
-		mat3array.set( elements );
-
-		gl.uniformMatrix3fv( this.addr, false, mat3array );
-
-		copyArray( cache, elements );
-
-	}
-
-}
-
-function setValueM4( gl, v ) {
-
-	const cache = this.cache;
-	const elements = v.elements;
-
-	if ( elements === undefined ) {
-
-		if ( arraysEqual( cache, v ) ) return;
-
-		gl.uniformMatrix4fv( this.addr, false, v );
-
-		copyArray( cache, v );
-
-	} else {
-
-		if ( arraysEqual( cache, elements ) ) return;
-
-		mat4array.set( elements );
-
-		gl.uniformMatrix4fv( this.addr, false, mat4array );
-
-		copyArray( cache, elements );
-
-	}
-
-}
-
-// Single integer / boolean
-
-function setValueV1i( gl, v ) {
-
-	const cache = this.cache;
-
-	if ( cache[ 0 ] === v ) return;
-
-	gl.uniform1i( this.addr, v );
-
-	cache[ 0 ] = v;
-
-}
-
-// Single integer / boolean vector (from flat array or THREE.VectorN)
-
-function setValueV2i( gl, v ) {
-
-	const cache = this.cache;
-
-	if ( v.x !== undefined ) {
-
-		if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {
-
-			gl.uniform2i( this.addr, v.x, v.y );
-
-			cache[ 0 ] = v.x;
-			cache[ 1 ] = v.y;
-
-		}
-
-	} else {
-
-		if ( arraysEqual( cache, v ) ) return;
-
-		gl.uniform2iv( this.addr, v );
-
-		copyArray( cache, v );
-
-	}
-
-}
-
-function setValueV3i( gl, v ) {
-
-	const cache = this.cache;
-
-	if ( v.x !== undefined ) {
-
-		if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {
-
-			gl.uniform3i( this.addr, v.x, v.y, v.z );
-
-			cache[ 0 ] = v.x;
-			cache[ 1 ] = v.y;
-			cache[ 2 ] = v.z;
-
-		}
-
-	} else {
-
-		if ( arraysEqual( cache, v ) ) return;
-
-		gl.uniform3iv( this.addr, v );
-
-		copyArray( cache, v );
-
-	}
-
-}
-
-function setValueV4i( gl, v ) {
-
-	const cache = this.cache;
-
-	if ( v.x !== undefined ) {
-
-		if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {
-
-			gl.uniform4i( this.addr, v.x, v.y, v.z, v.w );
-
-			cache[ 0 ] = v.x;
-			cache[ 1 ] = v.y;
-			cache[ 2 ] = v.z;
-			cache[ 3 ] = v.w;
-
-		}
-
-	} else {
-
-		if ( arraysEqual( cache, v ) ) return;
-
-		gl.uniform4iv( this.addr, v );
-
-		copyArray( cache, v );
-
-	}
-
-}
-
-// Single unsigned integer
-
-function setValueV1ui( gl, v ) {
-
-	const cache = this.cache;
-
-	if ( cache[ 0 ] === v ) return;
-
-	gl.uniform1ui( this.addr, v );
-
-	cache[ 0 ] = v;
-
-}
-
-// Single unsigned integer vector (from flat array or THREE.VectorN)
-
-function setValueV2ui( gl, v ) {
-
-	const cache = this.cache;
-
-	if ( v.x !== undefined ) {
-
-		if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y ) {
-
-			gl.uniform2ui( this.addr, v.x, v.y );
-
-			cache[ 0 ] = v.x;
-			cache[ 1 ] = v.y;
-
-		}
-
-	} else {
-
-		if ( arraysEqual( cache, v ) ) return;
-
-		gl.uniform2uiv( this.addr, v );
-
-		copyArray( cache, v );
-
-	}
-
-}
-
-function setValueV3ui( gl, v ) {
-
-	const cache = this.cache;
-
-	if ( v.x !== undefined ) {
-
-		if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z ) {
-
-			gl.uniform3ui( this.addr, v.x, v.y, v.z );
-
-			cache[ 0 ] = v.x;
-			cache[ 1 ] = v.y;
-			cache[ 2 ] = v.z;
-
-		}
-
-	} else {
-
-		if ( arraysEqual( cache, v ) ) return;
-
-		gl.uniform3uiv( this.addr, v );
-
-		copyArray( cache, v );
-
-	}
-
-}
-
-function setValueV4ui( gl, v ) {
-
-	const cache = this.cache;
-
-	if ( v.x !== undefined ) {
-
-		if ( cache[ 0 ] !== v.x || cache[ 1 ] !== v.y || cache[ 2 ] !== v.z || cache[ 3 ] !== v.w ) {
-
-			gl.uniform4ui( this.addr, v.x, v.y, v.z, v.w );
-
-			cache[ 0 ] = v.x;
-			cache[ 1 ] = v.y;
-			cache[ 2 ] = v.z;
-			cache[ 3 ] = v.w;
-
-		}
-
-	} else {
-
-		if ( arraysEqual( cache, v ) ) return;
-
-		gl.uniform4uiv( this.addr, v );
-
-		copyArray( cache, v );
-
-	}
-
-}
-
-
-// Single texture (2D / Cube)
-
-function setValueT1( gl, v, textures ) {
-
-	const cache = this.cache;
-	const unit = textures.allocateTextureUnit();
-
-	if ( cache[ 0 ] !== unit ) {
-
-		gl.uniform1i( this.addr, unit );
-		cache[ 0 ] = unit;
-
-	}
-
-	textures.setTexture2D( v || emptyTexture, unit );
-
-}
-
-function setValueT3D1( gl, v, textures ) {
-
-	const cache = this.cache;
-	const unit = textures.allocateTextureUnit();
-
-	if ( cache[ 0 ] !== unit ) {
-
-		gl.uniform1i( this.addr, unit );
-		cache[ 0 ] = unit;
-
-	}
-
-	textures.setTexture3D( v || empty3dTexture, unit );
-
-}
-
-function setValueT6( gl, v, textures ) {
-
-	const cache = this.cache;
-	const unit = textures.allocateTextureUnit();
-
-	if ( cache[ 0 ] !== unit ) {
-
-		gl.uniform1i( this.addr, unit );
-		cache[ 0 ] = unit;
-
-	}
-
-	textures.setTextureCube( v || emptyCubeTexture, unit );
-
-}
-
-function setValueT2DArray1( gl, v, textures ) {
-
-	const cache = this.cache;
-	const unit = textures.allocateTextureUnit();
-
-	if ( cache[ 0 ] !== unit ) {
-
-		gl.uniform1i( this.addr, unit );
-		cache[ 0 ] = unit;
-
-	}
-
-	textures.setTexture2DArray( v || emptyArrayTexture, unit );
-
-}
-
-// Helper to pick the right setter for the singular case
-
-function getSingularSetter( type ) {
-
-	switch ( type ) {
-
-		case 0x1406: return setValueV1f; // FLOAT
-		case 0x8b50: return setValueV2f; // _VEC2
-		case 0x8b51: return setValueV3f; // _VEC3
-		case 0x8b52: return setValueV4f; // _VEC4
-
-		case 0x8b5a: return setValueM2; // _MAT2
-		case 0x8b5b: return setValueM3; // _MAT3
-		case 0x8b5c: return setValueM4; // _MAT4
-
-		case 0x1404: case 0x8b56: return setValueV1i; // INT, BOOL
-		case 0x8b53: case 0x8b57: return setValueV2i; // _VEC2
-		case 0x8b54: case 0x8b58: return setValueV3i; // _VEC3
-		case 0x8b55: case 0x8b59: return setValueV4i; // _VEC4
-
-		case 0x1405: return setValueV1ui; // UINT
-		case 0x8dc6: return setValueV2ui; // _VEC2
-		case 0x8dc7: return setValueV3ui; // _VEC3
-		case 0x8dc8: return setValueV4ui; // _VEC4
-
-		case 0x8b5e: // SAMPLER_2D
-		case 0x8d66: // SAMPLER_EXTERNAL_OES
-		case 0x8dca: // INT_SAMPLER_2D
-		case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D
-		case 0x8b62: // SAMPLER_2D_SHADOW
-			return setValueT1;
-
-		case 0x8b5f: // SAMPLER_3D
-		case 0x8dcb: // INT_SAMPLER_3D
-		case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D
-			return setValueT3D1;
-
-		case 0x8b60: // SAMPLER_CUBE
-		case 0x8dcc: // INT_SAMPLER_CUBE
-		case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE
-		case 0x8dc5: // SAMPLER_CUBE_SHADOW
-			return setValueT6;
-
-		case 0x8dc1: // SAMPLER_2D_ARRAY
-		case 0x8dcf: // INT_SAMPLER_2D_ARRAY
-		case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY
-		case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW
-			return setValueT2DArray1;
-
-	}
-
-}
-
-
-// Array of scalars
-
-function setValueV1fArray( gl, v ) {
-
-	gl.uniform1fv( this.addr, v );
-
-}
-
-// Array of vectors (from flat array or array of THREE.VectorN)
-
-function setValueV2fArray( gl, v ) {
-
-	const data = flatten( v, this.size, 2 );
-
-	gl.uniform2fv( this.addr, data );
-
-}
-
-function setValueV3fArray( gl, v ) {
-
-	const data = flatten( v, this.size, 3 );
-
-	gl.uniform3fv( this.addr, data );
-
-}
-
-function setValueV4fArray( gl, v ) {
-
-	const data = flatten( v, this.size, 4 );
-
-	gl.uniform4fv( this.addr, data );
-
-}
-
-// Array of matrices (from flat array or array of THREE.MatrixN)
-
-function setValueM2Array( gl, v ) {
-
-	const data = flatten( v, this.size, 4 );
-
-	gl.uniformMatrix2fv( this.addr, false, data );
-
-}
-
-function setValueM3Array( gl, v ) {
-
-	const data = flatten( v, this.size, 9 );
-
-	gl.uniformMatrix3fv( this.addr, false, data );
-
-}
-
-function setValueM4Array( gl, v ) {
-
-	const data = flatten( v, this.size, 16 );
-
-	gl.uniformMatrix4fv( this.addr, false, data );
-
-}
-
-// Array of integer / boolean
-
-function setValueV1iArray( gl, v ) {
-
-	gl.uniform1iv( this.addr, v );
-
-}
-
-// Array of integer / boolean vectors (from flat array)
-
-function setValueV2iArray( gl, v ) {
-
-	gl.uniform2iv( this.addr, v );
-
-}
-
-function setValueV3iArray( gl, v ) {
-
-	gl.uniform3iv( this.addr, v );
-
-}
-
-function setValueV4iArray( gl, v ) {
-
-	gl.uniform4iv( this.addr, v );
-
-}
-
-// Array of unsigned integer
-
-function setValueV1uiArray( gl, v ) {
-
-	gl.uniform1uiv( this.addr, v );
-
-}
-
-// Array of unsigned integer vectors (from flat array)
-
-function setValueV2uiArray( gl, v ) {
-
-	gl.uniform2uiv( this.addr, v );
-
-}
-
-function setValueV3uiArray( gl, v ) {
-
-	gl.uniform3uiv( this.addr, v );
-
-}
-
-function setValueV4uiArray( gl, v ) {
-
-	gl.uniform4uiv( this.addr, v );
-
-}
-
-
-// Array of textures (2D / 3D / Cube / 2DArray)
-
-function setValueT1Array( gl, v, textures ) {
-
-	const cache = this.cache;
-
-	const n = v.length;
-
-	const units = allocTexUnits( textures, n );
-
-	if ( ! arraysEqual( cache, units ) ) {
-
-		gl.uniform1iv( this.addr, units );
-
-		copyArray( cache, units );
-
-	}
-
-	for ( let i = 0; i !== n; ++ i ) {
-
-		textures.setTexture2D( v[ i ] || emptyTexture, units[ i ] );
-
-	}
-
-}
-
-function setValueT3DArray( gl, v, textures ) {
-
-	const cache = this.cache;
-
-	const n = v.length;
-
-	const units = allocTexUnits( textures, n );
-
-	if ( ! arraysEqual( cache, units ) ) {
-
-		gl.uniform1iv( this.addr, units );
-
-		copyArray( cache, units );
-
-	}
-
-	for ( let i = 0; i !== n; ++ i ) {
-
-		textures.setTexture3D( v[ i ] || empty3dTexture, units[ i ] );
-
-	}
-
-}
-
-function setValueT6Array( gl, v, textures ) {
-
-	const cache = this.cache;
-
-	const n = v.length;
-
-	const units = allocTexUnits( textures, n );
-
-	if ( ! arraysEqual( cache, units ) ) {
-
-		gl.uniform1iv( this.addr, units );
-
-		copyArray( cache, units );
-
-	}
-
-	for ( let i = 0; i !== n; ++ i ) {
-
-		textures.setTextureCube( v[ i ] || emptyCubeTexture, units[ i ] );
-
-	}
-
-}
-
-function setValueT2DArrayArray( gl, v, textures ) {
-
-	const cache = this.cache;
-
-	const n = v.length;
-
-	const units = allocTexUnits( textures, n );
-
-	if ( ! arraysEqual( cache, units ) ) {
-
-		gl.uniform1iv( this.addr, units );
-
-		copyArray( cache, units );
-
-	}
-
-	for ( let i = 0; i !== n; ++ i ) {
-
-		textures.setTexture2DArray( v[ i ] || emptyArrayTexture, units[ i ] );
-
-	}
-
-}
-
-
-// Helper to pick the right setter for a pure (bottom-level) array
-
-function getPureArraySetter( type ) {
-
-	switch ( type ) {
-
-		case 0x1406: return setValueV1fArray; // FLOAT
-		case 0x8b50: return setValueV2fArray; // _VEC2
-		case 0x8b51: return setValueV3fArray; // _VEC3
-		case 0x8b52: return setValueV4fArray; // _VEC4
-
-		case 0x8b5a: return setValueM2Array; // _MAT2
-		case 0x8b5b: return setValueM3Array; // _MAT3
-		case 0x8b5c: return setValueM4Array; // _MAT4
-
-		case 0x1404: case 0x8b56: return setValueV1iArray; // INT, BOOL
-		case 0x8b53: case 0x8b57: return setValueV2iArray; // _VEC2
-		case 0x8b54: case 0x8b58: return setValueV3iArray; // _VEC3
-		case 0x8b55: case 0x8b59: return setValueV4iArray; // _VEC4
-
-		case 0x1405: return setValueV1uiArray; // UINT
-		case 0x8dc6: return setValueV2uiArray; // _VEC2
-		case 0x8dc7: return setValueV3uiArray; // _VEC3
-		case 0x8dc8: return setValueV4uiArray; // _VEC4
-
-		case 0x8b5e: // SAMPLER_2D
-		case 0x8d66: // SAMPLER_EXTERNAL_OES
-		case 0x8dca: // INT_SAMPLER_2D
-		case 0x8dd2: // UNSIGNED_INT_SAMPLER_2D
-		case 0x8b62: // SAMPLER_2D_SHADOW
-			return setValueT1Array;
-
-		case 0x8b5f: // SAMPLER_3D
-		case 0x8dcb: // INT_SAMPLER_3D
-		case 0x8dd3: // UNSIGNED_INT_SAMPLER_3D
-			return setValueT3DArray;
-
-		case 0x8b60: // SAMPLER_CUBE
-		case 0x8dcc: // INT_SAMPLER_CUBE
-		case 0x8dd4: // UNSIGNED_INT_SAMPLER_CUBE
-		case 0x8dc5: // SAMPLER_CUBE_SHADOW
-			return setValueT6Array;
-
-		case 0x8dc1: // SAMPLER_2D_ARRAY
-		case 0x8dcf: // INT_SAMPLER_2D_ARRAY
-		case 0x8dd7: // UNSIGNED_INT_SAMPLER_2D_ARRAY
-		case 0x8dc4: // SAMPLER_2D_ARRAY_SHADOW
-			return setValueT2DArrayArray;
-
-	}
-
-}
-
-// --- Uniform Classes ---
-
-class SingleUniform {
-
-	constructor( id, activeInfo, addr ) {
-
-		this.id = id;
-		this.addr = addr;
-		this.cache = [];
-		this.setValue = getSingularSetter( activeInfo.type );
-
-		// this.path = activeInfo.name; // DEBUG
-
-	}
-
-}
-
-class PureArrayUniform {
-
-	constructor( id, activeInfo, addr ) {
-
-		this.id = id;
-		this.addr = addr;
-		this.cache = [];
-		this.size = activeInfo.size;
-		this.setValue = getPureArraySetter( activeInfo.type );
-
-		// this.path = activeInfo.name; // DEBUG
-
-	}
-
-}
-
-class StructuredUniform {
-
-	constructor( id ) {
-
-		this.id = id;
-
-		this.seq = [];
-		this.map = {};
-
-	}
-
-	setValue( gl, value, textures ) {
-
-		const seq = this.seq;
-
-		for ( let i = 0, n = seq.length; i !== n; ++ i ) {
-
-			const u = seq[ i ];
-			u.setValue( gl, value[ u.id ], textures );
-
-		}
-
-	}
-
-}
-
-// --- Top-level ---
-
-// Parser - builds up the property tree from the path strings
-
-const RePathPart = /(\w+)(\])?(\[|\.)?/g;
-
-// extracts
-// 	- the identifier (member name or array index)
-//  - followed by an optional right bracket (found when array index)
-//  - followed by an optional left bracket or dot (type of subscript)
-//
-// Note: These portions can be read in a non-overlapping fashion and
-// allow straightforward parsing of the hierarchy that WebGL encodes
-// in the uniform names.
-
-function addUniform( container, uniformObject ) {
-
-	container.seq.push( uniformObject );
-	container.map[ uniformObject.id ] = uniformObject;
-
-}
-
-function parseUniform( activeInfo, addr, container ) {
-
-	const path = activeInfo.name,
-		pathLength = path.length;
-
-	// reset RegExp object, because of the early exit of a previous run
-	RePathPart.lastIndex = 0;
-
-	while ( true ) {
-
-		const match = RePathPart.exec( path ),
-			matchEnd = RePathPart.lastIndex;
-
-		let id = match[ 1 ];
-		const idIsIndex = match[ 2 ] === ']',
-			subscript = match[ 3 ];
-
-		if ( idIsIndex ) id = id | 0; // convert to integer
-
-		if ( subscript === undefined || subscript === '[' && matchEnd + 2 === pathLength ) {
-
-			// bare name or "pure" bottom-level array "[0]" suffix
-
-			addUniform( container, subscript === undefined ?
-				new SingleUniform( id, activeInfo, addr ) :
-				new PureArrayUniform( id, activeInfo, addr ) );
-
-			break;
-
-		} else {
-
-			// step into inner node / create it in case it doesn't exist
-
-			const map = container.map;
-			let next = map[ id ];
-
-			if ( next === undefined ) {
-
-				next = new StructuredUniform( id );
-				addUniform( container, next );
-
-			}
-
-			container = next;
-
-		}
-
-	}
-
-}
-
-// Root Container
-
-class WebGLUniforms {
-
-	constructor( gl, program ) {
-
-		this.seq = [];
-		this.map = {};
-
-		const n = gl.getProgramParameter( program, gl.ACTIVE_UNIFORMS );
-
-		for ( let i = 0; i < n; ++ i ) {
-
-			const info = gl.getActiveUniform( program, i ),
-				addr = gl.getUniformLocation( program, info.name );
-
-			parseUniform( info, addr, this );
-
-		}
-
-	}
-
-	setValue( gl, name, value, textures ) {
-
-		const u = this.map[ name ];
-
-		if ( u !== undefined ) u.setValue( gl, value, textures );
-
-	}
-
-	setOptional( gl, object, name ) {
-
-		const v = object[ name ];
-
-		if ( v !== undefined ) this.setValue( gl, name, v );
-
-	}
-
-	static upload( gl, seq, values, textures ) {
-
-		for ( let i = 0, n = seq.length; i !== n; ++ i ) {
-
-			const u = seq[ i ],
-				v = values[ u.id ];
-
-			if ( v.needsUpdate !== false ) {
-
-				// note: always updating when .needsUpdate is undefined
-				u.setValue( gl, v.value, textures );
-
-			}
-
-		}
-
-	}
-
-	static seqWithValue( seq, values ) {
-
-		const r = [];
-
-		for ( let i = 0, n = seq.length; i !== n; ++ i ) {
-
-			const u = seq[ i ];
-			if ( u.id in values ) r.push( u );
-
-		}
-
-		return r;
-
-	}
-
-}
-
-function WebGLShader( gl, type, string ) {
-
-	const shader = gl.createShader( type );
-
-	gl.shaderSource( shader, string );
-	gl.compileShader( shader );
-
-	return shader;
-
-}
-
-let programIdCount = 0;
-
-function handleSource( string, errorLine ) {
-
-	const lines = string.split( '\n' );
-	const lines2 = [];
-
-	const from = Math.max( errorLine - 6, 0 );
-	const to = Math.min( errorLine + 6, lines.length );
-
-	for ( let i = from; i < to; i ++ ) {
-
-		const line = i + 1;
-		lines2.push( `${line === errorLine ? '>' : ' '} ${line}: ${lines[ i ]}` );
-
-	}
-
-	return lines2.join( '\n' );
-
-}
-
-function getEncodingComponents( colorSpace ) {
-
-	switch ( colorSpace ) {
-
-		case LinearSRGBColorSpace:
-			return [ 'Linear', '( value )' ];
-		case SRGBColorSpace:
-			return [ 'sRGB', '( value )' ];
-		default:
-			console.warn( 'THREE.WebGLProgram: Unsupported color space:', colorSpace );
-			return [ 'Linear', '( value )' ];
-
-	}
-
-}
-
-function getShaderErrors( gl, shader, type ) {
-
-	const status = gl.getShaderParameter( shader, gl.COMPILE_STATUS );
-	const errors = gl.getShaderInfoLog( shader ).trim();
-
-	if ( status && errors === '' ) return '';
-
-	const errorMatches = /ERROR: 0:(\d+)/.exec( errors );
-	if ( errorMatches ) {
-
-		// --enable-privileged-webgl-extension
-		// console.log( '**' + type + '**', gl.getExtension( 'WEBGL_debug_shaders' ).getTranslatedShaderSource( shader ) );
-
-		const errorLine = parseInt( errorMatches[ 1 ] );
-		return type.toUpperCase() + '\n\n' + errors + '\n\n' + handleSource( gl.getShaderSource( shader ), errorLine );
-
-	} else {
-
-		return errors;
-
-	}
-
-}
-
-function getTexelEncodingFunction( functionName, colorSpace ) {
-
-	const components = getEncodingComponents( colorSpace );
-	return 'vec4 ' + functionName + '( vec4 value ) { return LinearTo' + components[ 0 ] + components[ 1 ] + '; }';
-
-}
-
-function getToneMappingFunction( functionName, toneMapping ) {
-
-	let toneMappingName;
-
-	switch ( toneMapping ) {
-
-		case LinearToneMapping:
-			toneMappingName = 'Linear';
-			break;
-
-		case ReinhardToneMapping:
-			toneMappingName = 'Reinhard';
-			break;
-
-		case CineonToneMapping:
-			toneMappingName = 'OptimizedCineon';
-			break;
-
-		case ACESFilmicToneMapping:
-			toneMappingName = 'ACESFilmic';
-			break;
-
-		case CustomToneMapping:
-			toneMappingName = 'Custom';
-			break;
-
-		default:
-			console.warn( 'THREE.WebGLProgram: Unsupported toneMapping:', toneMapping );
-			toneMappingName = 'Linear';
-
-	}
-
-	return 'vec3 ' + functionName + '( vec3 color ) { return ' + toneMappingName + 'ToneMapping( color ); }';
-
-}
-
-function generateExtensions( parameters ) {
-
-	const chunks = [
-		( parameters.extensionDerivatives || !! parameters.envMapCubeUVHeight || parameters.bumpMap || parameters.normalMapTangentSpace || parameters.clearcoatNormalMap || parameters.flatShading || parameters.shaderID === 'physical' ) ? '#extension GL_OES_standard_derivatives : enable' : '',
-		( parameters.extensionFragDepth || parameters.logarithmicDepthBuffer ) && parameters.rendererExtensionFragDepth ? '#extension GL_EXT_frag_depth : enable' : '',
-		( parameters.extensionDrawBuffers && parameters.rendererExtensionDrawBuffers ) ? '#extension GL_EXT_draw_buffers : require' : '',
-		( parameters.extensionShaderTextureLOD || parameters.envMap || parameters.transmission ) && parameters.rendererExtensionShaderTextureLod ? '#extension GL_EXT_shader_texture_lod : enable' : ''
-	];
-
-	return chunks.filter( filterEmptyLine ).join( '\n' );
-
-}
-
-function generateDefines( defines ) {
-
-	const chunks = [];
-
-	for ( const name in defines ) {
-
-		const value = defines[ name ];
-
-		if ( value === false ) continue;
-
-		chunks.push( '#define ' + name + ' ' + value );
-
-	}
-
-	return chunks.join( '\n' );
-
-}
-
-function fetchAttributeLocations( gl, program ) {
-
-	const attributes = {};
-
-	const n = gl.getProgramParameter( program, gl.ACTIVE_ATTRIBUTES );
-
-	for ( let i = 0; i < n; i ++ ) {
-
-		const info = gl.getActiveAttrib( program, i );
-		const name = info.name;
-
-		let locationSize = 1;
-		if ( info.type === gl.FLOAT_MAT2 ) locationSize = 2;
-		if ( info.type === gl.FLOAT_MAT3 ) locationSize = 3;
-		if ( info.type === gl.FLOAT_MAT4 ) locationSize = 4;
-
-		// console.log( 'THREE.WebGLProgram: ACTIVE VERTEX ATTRIBUTE:', name, i );
-
-		attributes[ name ] = {
-			type: info.type,
-			location: gl.getAttribLocation( program, name ),
-			locationSize: locationSize
-		};
-
-	}
-
-	return attributes;
-
-}
-
-function filterEmptyLine( string ) {
-
-	return string !== '';
-
-}
-
-function replaceLightNums( string, parameters ) {
-
-	const numSpotLightCoords = parameters.numSpotLightShadows + parameters.numSpotLightMaps - parameters.numSpotLightShadowsWithMaps;
-
-	return string
-		.replace( /NUM_DIR_LIGHTS/g, parameters.numDirLights )
-		.replace( /NUM_SPOT_LIGHTS/g, parameters.numSpotLights )
-		.replace( /NUM_SPOT_LIGHT_MAPS/g, parameters.numSpotLightMaps )
-		.replace( /NUM_SPOT_LIGHT_COORDS/g, numSpotLightCoords )
-		.replace( /NUM_RECT_AREA_LIGHTS/g, parameters.numRectAreaLights )
-		.replace( /NUM_POINT_LIGHTS/g, parameters.numPointLights )
-		.replace( /NUM_HEMI_LIGHTS/g, parameters.numHemiLights )
-		.replace( /NUM_DIR_LIGHT_SHADOWS/g, parameters.numDirLightShadows )
-		.replace( /NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS/g, parameters.numSpotLightShadowsWithMaps )
-		.replace( /NUM_SPOT_LIGHT_SHADOWS/g, parameters.numSpotLightShadows )
-		.replace( /NUM_POINT_LIGHT_SHADOWS/g, parameters.numPointLightShadows );
-
-}
-
-function replaceClippingPlaneNums( string, parameters ) {
-
-	return string
-		.replace( /NUM_CLIPPING_PLANES/g, parameters.numClippingPlanes )
-		.replace( /UNION_CLIPPING_PLANES/g, ( parameters.numClippingPlanes - parameters.numClipIntersection ) );
-
-}
-
-// Resolve Includes
-
-const includePattern = /^[ \t]*#include +<([\w\d./]+)>/gm;
-
-function resolveIncludes( string ) {
-
-	return string.replace( includePattern, includeReplacer );
-
-}
-
-function includeReplacer( match, include ) {
-
-	const string = ShaderChunk[ include ];
-
-	if ( string === undefined ) {
-
-		throw new Error( 'Can not resolve #include <' + include + '>' );
-
-	}
-
-	return resolveIncludes( string );
-
-}
-
-// Unroll Loops
-
-const unrollLoopPattern = /#pragma unroll_loop_start\s+for\s*\(\s*int\s+i\s*=\s*(\d+)\s*;\s*i\s*<\s*(\d+)\s*;\s*i\s*\+\+\s*\)\s*{([\s\S]+?)}\s+#pragma unroll_loop_end/g;
-
-function unrollLoops( string ) {
-
-	return string.replace( unrollLoopPattern, loopReplacer );
-
-}
-
-function loopReplacer( match, start, end, snippet ) {
-
-	let string = '';
-
-	for ( let i = parseInt( start ); i < parseInt( end ); i ++ ) {
-
-		string += snippet
-			.replace( /\[\s*i\s*\]/g, '[ ' + i + ' ]' )
-			.replace( /UNROLLED_LOOP_INDEX/g, i );
-
-	}
-
-	return string;
-
-}
-
-//
-
-function generatePrecision( parameters ) {
-
-	let precisionstring = 'precision ' + parameters.precision + ' float;\nprecision ' + parameters.precision + ' int;';
-
-	if ( parameters.precision === 'highp' ) {
-
-		precisionstring += '\n#define HIGH_PRECISION';
-
-	} else if ( parameters.precision === 'mediump' ) {
-
-		precisionstring += '\n#define MEDIUM_PRECISION';
-
-	} else if ( parameters.precision === 'lowp' ) {
-
-		precisionstring += '\n#define LOW_PRECISION';
-
-	}
-
-	return precisionstring;
-
-}
-
-function generateShadowMapTypeDefine( parameters ) {
-
-	let shadowMapTypeDefine = 'SHADOWMAP_TYPE_BASIC';
-
-	if ( parameters.shadowMapType === PCFShadowMap ) {
-
-		shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF';
-
-	} else if ( parameters.shadowMapType === PCFSoftShadowMap ) {
-
-		shadowMapTypeDefine = 'SHADOWMAP_TYPE_PCF_SOFT';
-
-	} else if ( parameters.shadowMapType === VSMShadowMap ) {
-
-		shadowMapTypeDefine = 'SHADOWMAP_TYPE_VSM';
-
-	}
-
-	return shadowMapTypeDefine;
-
-}
-
-function generateEnvMapTypeDefine( parameters ) {
-
-	let envMapTypeDefine = 'ENVMAP_TYPE_CUBE';
-
-	if ( parameters.envMap ) {
-
-		switch ( parameters.envMapMode ) {
-
-			case CubeReflectionMapping:
-			case CubeRefractionMapping:
-				envMapTypeDefine = 'ENVMAP_TYPE_CUBE';
-				break;
-
-			case CubeUVReflectionMapping:
-				envMapTypeDefine = 'ENVMAP_TYPE_CUBE_UV';
-				break;
-
-		}
-
-	}
-
-	return envMapTypeDefine;
-
-}
-
-function generateEnvMapModeDefine( parameters ) {
-
-	let envMapModeDefine = 'ENVMAP_MODE_REFLECTION';
-
-	if ( parameters.envMap ) {
-
-		switch ( parameters.envMapMode ) {
-
-			case CubeRefractionMapping:
-
-				envMapModeDefine = 'ENVMAP_MODE_REFRACTION';
-				break;
-
-		}
-
-	}
-
-	return envMapModeDefine;
-
-}
-
-function generateEnvMapBlendingDefine( parameters ) {
-
-	let envMapBlendingDefine = 'ENVMAP_BLENDING_NONE';
-
-	if ( parameters.envMap ) {
-
-		switch ( parameters.combine ) {
-
-			case MultiplyOperation:
-				envMapBlendingDefine = 'ENVMAP_BLENDING_MULTIPLY';
-				break;
-
-			case MixOperation:
-				envMapBlendingDefine = 'ENVMAP_BLENDING_MIX';
-				break;
-
-			case AddOperation:
-				envMapBlendingDefine = 'ENVMAP_BLENDING_ADD';
-				break;
-
-		}
-
-	}
-
-	return envMapBlendingDefine;
-
-}
-
-function generateCubeUVSize( parameters ) {
-
-	const imageHeight = parameters.envMapCubeUVHeight;
-
-	if ( imageHeight === null ) return null;
-
-	const maxMip = Math.log2( imageHeight ) - 2;
-
-	const texelHeight = 1.0 / imageHeight;
-
-	const texelWidth = 1.0 / ( 3 * Math.max( Math.pow( 2, maxMip ), 7 * 16 ) );
-
-	return { texelWidth, texelHeight, maxMip };
-
-}
-
-function WebGLProgram( renderer, cacheKey, parameters, bindingStates ) {
-
-	// TODO Send this event to Three.js DevTools
-	// console.log( 'WebGLProgram', cacheKey );
-
-	const gl = renderer.getContext();
-
-	const defines = parameters.defines;
-
-	let vertexShader = parameters.vertexShader;
-	let fragmentShader = parameters.fragmentShader;
-
-	const shadowMapTypeDefine = generateShadowMapTypeDefine( parameters );
-	const envMapTypeDefine = generateEnvMapTypeDefine( parameters );
-	const envMapModeDefine = generateEnvMapModeDefine( parameters );
-	const envMapBlendingDefine = generateEnvMapBlendingDefine( parameters );
-	const envMapCubeUVSize = generateCubeUVSize( parameters );
-
-	const customExtensions = parameters.isWebGL2 ? '' : generateExtensions( parameters );
-
-	const customDefines = generateDefines( defines );
-
-	const program = gl.createProgram();
-
-	let prefixVertex, prefixFragment;
-	let versionString = parameters.glslVersion ? '#version ' + parameters.glslVersion + '\n' : '';
-
-	if ( parameters.isRawShaderMaterial ) {
-
-		prefixVertex = [
-
-			customDefines
-
-		].filter( filterEmptyLine ).join( '\n' );
-
-		if ( prefixVertex.length > 0 ) {
-
-			prefixVertex += '\n';
-
-		}
-
-		prefixFragment = [
-
-			customExtensions,
-			customDefines
-
-		].filter( filterEmptyLine ).join( '\n' );
-
-		if ( prefixFragment.length > 0 ) {
-
-			prefixFragment += '\n';
-
-		}
-
-	} else {
-
-		prefixVertex = [
-
-			generatePrecision( parameters ),
-
-			'#define SHADER_NAME ' + parameters.shaderName,
-
-			customDefines,
-
-			parameters.instancing ? '#define USE_INSTANCING' : '',
-			parameters.instancingColor ? '#define USE_INSTANCING_COLOR' : '',
-
-			parameters.useFog && parameters.fog ? '#define USE_FOG' : '',
-			parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',
-
-			parameters.map ? '#define USE_MAP' : '',
-			parameters.envMap ? '#define USE_ENVMAP' : '',
-			parameters.envMap ? '#define ' + envMapModeDefine : '',
-			parameters.lightMap ? '#define USE_LIGHTMAP' : '',
-			parameters.aoMap ? '#define USE_AOMAP' : '',
-			parameters.bumpMap ? '#define USE_BUMPMAP' : '',
-			parameters.normalMap ? '#define USE_NORMALMAP' : '',
-			parameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',
-			parameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',
-			parameters.displacementMap ? '#define USE_DISPLACEMENTMAP' : '',
-			parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',
-
-			parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',
-			parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
-			parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
-
-			parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',
-			parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',
-
-			parameters.specularMap ? '#define USE_SPECULARMAP' : '',
-			parameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',
-			parameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',
-
-			parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
-			parameters.metalnessMap ? '#define USE_METALNESSMAP' : '',
-			parameters.alphaMap ? '#define USE_ALPHAMAP' : '',
-
-			parameters.transmission ? '#define USE_TRANSMISSION' : '',
-			parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',
-			parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
-
-			parameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',
-			parameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',
-
-			//
-
-			parameters.mapUv ? '#define MAP_UV ' + parameters.mapUv : '',
-			parameters.alphaMapUv ? '#define ALPHAMAP_UV ' + parameters.alphaMapUv : '',
-			parameters.lightMapUv ? '#define LIGHTMAP_UV ' + parameters.lightMapUv : '',
-			parameters.aoMapUv ? '#define AOMAP_UV ' + parameters.aoMapUv : '',
-			parameters.emissiveMapUv ? '#define EMISSIVEMAP_UV ' + parameters.emissiveMapUv : '',
-			parameters.bumpMapUv ? '#define BUMPMAP_UV ' + parameters.bumpMapUv : '',
-			parameters.normalMapUv ? '#define NORMALMAP_UV ' + parameters.normalMapUv : '',
-			parameters.displacementMapUv ? '#define DISPLACEMENTMAP_UV ' + parameters.displacementMapUv : '',
-
-			parameters.metalnessMapUv ? '#define METALNESSMAP_UV ' + parameters.metalnessMapUv : '',
-			parameters.roughnessMapUv ? '#define ROUGHNESSMAP_UV ' + parameters.roughnessMapUv : '',
-
-			parameters.clearcoatMapUv ? '#define CLEARCOATMAP_UV ' + parameters.clearcoatMapUv : '',
-			parameters.clearcoatNormalMapUv ? '#define CLEARCOAT_NORMALMAP_UV ' + parameters.clearcoatNormalMapUv : '',
-			parameters.clearcoatRoughnessMapUv ? '#define CLEARCOAT_ROUGHNESSMAP_UV ' + parameters.clearcoatRoughnessMapUv : '',
-
-			parameters.iridescenceMapUv ? '#define IRIDESCENCEMAP_UV ' + parameters.iridescenceMapUv : '',
-			parameters.iridescenceThicknessMapUv ? '#define IRIDESCENCE_THICKNESSMAP_UV ' + parameters.iridescenceThicknessMapUv : '',
-
-			parameters.sheenColorMapUv ? '#define SHEEN_COLORMAP_UV ' + parameters.sheenColorMapUv : '',
-			parameters.sheenRoughnessMapUv ? '#define SHEEN_ROUGHNESSMAP_UV ' + parameters.sheenRoughnessMapUv : '',
-
-			parameters.specularMapUv ? '#define SPECULARMAP_UV ' + parameters.specularMapUv : '',
-			parameters.specularColorMapUv ? '#define SPECULAR_COLORMAP_UV ' + parameters.specularColorMapUv : '',
-			parameters.specularIntensityMapUv ? '#define SPECULAR_INTENSITYMAP_UV ' + parameters.specularIntensityMapUv : '',
-
-			parameters.transmissionMapUv ? '#define TRANSMISSIONMAP_UV ' + parameters.transmissionMapUv : '',
-			parameters.thicknessMapUv ? '#define THICKNESSMAP_UV ' + parameters.thicknessMapUv : '',
-
-			//
-
-			parameters.vertexTangents ? '#define USE_TANGENT' : '',
-			parameters.vertexColors ? '#define USE_COLOR' : '',
-			parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
-			parameters.vertexUv1s ? '#define USE_UV1' : '',
-			parameters.vertexUv2s ? '#define USE_UV2' : '',
-			parameters.vertexUv3s ? '#define USE_UV3' : '',
-
-			parameters.pointsUvs ? '#define USE_POINTS_UV' : '',
-
-			parameters.flatShading ? '#define FLAT_SHADED' : '',
-
-			parameters.skinning ? '#define USE_SKINNING' : '',
-
-			parameters.morphTargets ? '#define USE_MORPHTARGETS' : '',
-			parameters.morphNormals && parameters.flatShading === false ? '#define USE_MORPHNORMALS' : '',
-			( parameters.morphColors && parameters.isWebGL2 ) ? '#define USE_MORPHCOLORS' : '',
-			( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE' : '',
-			( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_TEXTURE_STRIDE ' + parameters.morphTextureStride : '',
-			( parameters.morphTargetsCount > 0 && parameters.isWebGL2 ) ? '#define MORPHTARGETS_COUNT ' + parameters.morphTargetsCount : '',
-			parameters.doubleSided ? '#define DOUBLE_SIDED' : '',
-			parameters.flipSided ? '#define FLIP_SIDED' : '',
-
-			parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',
-			parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',
-
-			parameters.sizeAttenuation ? '#define USE_SIZEATTENUATION' : '',
-
-			parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
-			( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
-
-			'uniform mat4 modelMatrix;',
-			'uniform mat4 modelViewMatrix;',
-			'uniform mat4 projectionMatrix;',
-			'uniform mat4 viewMatrix;',
-			'uniform mat3 normalMatrix;',
-			'uniform vec3 cameraPosition;',
-			'uniform bool isOrthographic;',
-
-			'#ifdef USE_INSTANCING',
-
-			'	attribute mat4 instanceMatrix;',
-
-			'#endif',
-
-			'#ifdef USE_INSTANCING_COLOR',
-
-			'	attribute vec3 instanceColor;',
-
-			'#endif',
-
-			'attribute vec3 position;',
-			'attribute vec3 normal;',
-			'attribute vec2 uv;',
-
-			'#ifdef USE_UV1',
-
-			'	attribute vec2 uv1;',
-
-			'#endif',
-
-			'#ifdef USE_UV2',
-
-			'	attribute vec2 uv2;',
-
-			'#endif',
-
-			'#ifdef USE_UV3',
-
-			'	attribute vec2 uv3;',
-
-			'#endif',
-
-			'#ifdef USE_TANGENT',
-
-			'	attribute vec4 tangent;',
-
-			'#endif',
-
-			'#if defined( USE_COLOR_ALPHA )',
-
-			'	attribute vec4 color;',
-
-			'#elif defined( USE_COLOR )',
-
-			'	attribute vec3 color;',
-
-			'#endif',
-
-			'#if ( defined( USE_MORPHTARGETS ) && ! defined( MORPHTARGETS_TEXTURE ) )',
-
-			'	attribute vec3 morphTarget0;',
-			'	attribute vec3 morphTarget1;',
-			'	attribute vec3 morphTarget2;',
-			'	attribute vec3 morphTarget3;',
-
-			'	#ifdef USE_MORPHNORMALS',
-
-			'		attribute vec3 morphNormal0;',
-			'		attribute vec3 morphNormal1;',
-			'		attribute vec3 morphNormal2;',
-			'		attribute vec3 morphNormal3;',
-
-			'	#else',
-
-			'		attribute vec3 morphTarget4;',
-			'		attribute vec3 morphTarget5;',
-			'		attribute vec3 morphTarget6;',
-			'		attribute vec3 morphTarget7;',
-
-			'	#endif',
-
-			'#endif',
-
-			'#ifdef USE_SKINNING',
-
-			'	attribute vec4 skinIndex;',
-			'	attribute vec4 skinWeight;',
-
-			'#endif',
-
-			'\n'
-
-		].filter( filterEmptyLine ).join( '\n' );
-
-		prefixFragment = [
-
-			customExtensions,
-
-			generatePrecision( parameters ),
-
-			'#define SHADER_NAME ' + parameters.shaderName,
-
-			customDefines,
-
-			parameters.useFog && parameters.fog ? '#define USE_FOG' : '',
-			parameters.useFog && parameters.fogExp2 ? '#define FOG_EXP2' : '',
-
-			parameters.map ? '#define USE_MAP' : '',
-			parameters.matcap ? '#define USE_MATCAP' : '',
-			parameters.envMap ? '#define USE_ENVMAP' : '',
-			parameters.envMap ? '#define ' + envMapTypeDefine : '',
-			parameters.envMap ? '#define ' + envMapModeDefine : '',
-			parameters.envMap ? '#define ' + envMapBlendingDefine : '',
-			envMapCubeUVSize ? '#define CUBEUV_TEXEL_WIDTH ' + envMapCubeUVSize.texelWidth : '',
-			envMapCubeUVSize ? '#define CUBEUV_TEXEL_HEIGHT ' + envMapCubeUVSize.texelHeight : '',
-			envMapCubeUVSize ? '#define CUBEUV_MAX_MIP ' + envMapCubeUVSize.maxMip + '.0' : '',
-			parameters.lightMap ? '#define USE_LIGHTMAP' : '',
-			parameters.aoMap ? '#define USE_AOMAP' : '',
-			parameters.bumpMap ? '#define USE_BUMPMAP' : '',
-			parameters.normalMap ? '#define USE_NORMALMAP' : '',
-			parameters.normalMapObjectSpace ? '#define USE_NORMALMAP_OBJECTSPACE' : '',
-			parameters.normalMapTangentSpace ? '#define USE_NORMALMAP_TANGENTSPACE' : '',
-			parameters.emissiveMap ? '#define USE_EMISSIVEMAP' : '',
-
-			parameters.clearcoat ? '#define USE_CLEARCOAT' : '',
-			parameters.clearcoatMap ? '#define USE_CLEARCOATMAP' : '',
-			parameters.clearcoatRoughnessMap ? '#define USE_CLEARCOAT_ROUGHNESSMAP' : '',
-			parameters.clearcoatNormalMap ? '#define USE_CLEARCOAT_NORMALMAP' : '',
-
-			parameters.iridescence ? '#define USE_IRIDESCENCE' : '',
-			parameters.iridescenceMap ? '#define USE_IRIDESCENCEMAP' : '',
-			parameters.iridescenceThicknessMap ? '#define USE_IRIDESCENCE_THICKNESSMAP' : '',
-
-			parameters.specularMap ? '#define USE_SPECULARMAP' : '',
-			parameters.specularColorMap ? '#define USE_SPECULAR_COLORMAP' : '',
-			parameters.specularIntensityMap ? '#define USE_SPECULAR_INTENSITYMAP' : '',
-
-			parameters.roughnessMap ? '#define USE_ROUGHNESSMAP' : '',
-			parameters.metalnessMap ? '#define USE_METALNESSMAP' : '',
-
-			parameters.alphaMap ? '#define USE_ALPHAMAP' : '',
-			parameters.alphaTest ? '#define USE_ALPHATEST' : '',
-
-			parameters.sheen ? '#define USE_SHEEN' : '',
-			parameters.sheenColorMap ? '#define USE_SHEEN_COLORMAP' : '',
-			parameters.sheenRoughnessMap ? '#define USE_SHEEN_ROUGHNESSMAP' : '',
-
-			parameters.transmission ? '#define USE_TRANSMISSION' : '',
-			parameters.transmissionMap ? '#define USE_TRANSMISSIONMAP' : '',
-			parameters.thicknessMap ? '#define USE_THICKNESSMAP' : '',
-
-			parameters.vertexTangents ? '#define USE_TANGENT' : '',
-			parameters.vertexColors || parameters.instancingColor ? '#define USE_COLOR' : '',
-			parameters.vertexAlphas ? '#define USE_COLOR_ALPHA' : '',
-			parameters.vertexUv1s ? '#define USE_UV1' : '',
-			parameters.vertexUv2s ? '#define USE_UV2' : '',
-			parameters.vertexUv3s ? '#define USE_UV3' : '',
-
-			parameters.pointsUvs ? '#define USE_POINTS_UV' : '',
-
-			parameters.gradientMap ? '#define USE_GRADIENTMAP' : '',
-
-			parameters.flatShading ? '#define FLAT_SHADED' : '',
-
-			parameters.doubleSided ? '#define DOUBLE_SIDED' : '',
-			parameters.flipSided ? '#define FLIP_SIDED' : '',
-
-			parameters.shadowMapEnabled ? '#define USE_SHADOWMAP' : '',
-			parameters.shadowMapEnabled ? '#define ' + shadowMapTypeDefine : '',
-
-			parameters.premultipliedAlpha ? '#define PREMULTIPLIED_ALPHA' : '',
-
-			parameters.useLegacyLights ? '#define LEGACY_LIGHTS' : '',
-
-			parameters.logarithmicDepthBuffer ? '#define USE_LOGDEPTHBUF' : '',
-			( parameters.logarithmicDepthBuffer && parameters.rendererExtensionFragDepth ) ? '#define USE_LOGDEPTHBUF_EXT' : '',
-
-			'uniform mat4 viewMatrix;',
-			'uniform vec3 cameraPosition;',
-			'uniform bool isOrthographic;',
-
-			( parameters.toneMapping !== NoToneMapping ) ? '#define TONE_MAPPING' : '',
-			( parameters.toneMapping !== NoToneMapping ) ? ShaderChunk[ 'tonemapping_pars_fragment' ] : '', // this code is required here because it is used by the toneMapping() function defined below
-			( parameters.toneMapping !== NoToneMapping ) ? getToneMappingFunction( 'toneMapping', parameters.toneMapping ) : '',
-
-			parameters.dithering ? '#define DITHERING' : '',
-			parameters.opaque ? '#define OPAQUE' : '',
-
-			ShaderChunk[ 'encodings_pars_fragment' ], // this code is required here because it is used by the various encoding/decoding function defined below
-			getTexelEncodingFunction( 'linearToOutputTexel', parameters.outputColorSpace ),
-
-			parameters.useDepthPacking ? '#define DEPTH_PACKING ' + parameters.depthPacking : '',
-
-			'\n'
-
-		].filter( filterEmptyLine ).join( '\n' );
-
-	}
-
-	vertexShader = resolveIncludes( vertexShader );
-	vertexShader = replaceLightNums( vertexShader, parameters );
-	vertexShader = replaceClippingPlaneNums( vertexShader, parameters );
-
-	fragmentShader = resolveIncludes( fragmentShader );
-	fragmentShader = replaceLightNums( fragmentShader, parameters );
-	fragmentShader = replaceClippingPlaneNums( fragmentShader, parameters );
-
-	vertexShader = unrollLoops( vertexShader );
-	fragmentShader = unrollLoops( fragmentShader );
-
-	if ( parameters.isWebGL2 && parameters.isRawShaderMaterial !== true ) {
-
-		// GLSL 3.0 conversion for built-in materials and ShaderMaterial
-
-		versionString = '#version 300 es\n';
-
-		prefixVertex = [
-			'precision mediump sampler2DArray;',
-			'#define attribute in',
-			'#define varying out',
-			'#define texture2D texture'
-		].join( '\n' ) + '\n' + prefixVertex;
-
-		prefixFragment = [
-			'#define varying in',
-			( parameters.glslVersion === GLSL3 ) ? '' : 'layout(location = 0) out highp vec4 pc_fragColor;',
-			( parameters.glslVersion === GLSL3 ) ? '' : '#define gl_FragColor pc_fragColor',
-			'#define gl_FragDepthEXT gl_FragDepth',
-			'#define texture2D texture',
-			'#define textureCube texture',
-			'#define texture2DProj textureProj',
-			'#define texture2DLodEXT textureLod',
-			'#define texture2DProjLodEXT textureProjLod',
-			'#define textureCubeLodEXT textureLod',
-			'#define texture2DGradEXT textureGrad',
-			'#define texture2DProjGradEXT textureProjGrad',
-			'#define textureCubeGradEXT textureGrad'
-		].join( '\n' ) + '\n' + prefixFragment;
-
-	}
-
-	const vertexGlsl = versionString + prefixVertex + vertexShader;
-	const fragmentGlsl = versionString + prefixFragment + fragmentShader;
-
-	// console.log( '*VERTEX*', vertexGlsl );
-	// console.log( '*FRAGMENT*', fragmentGlsl );
-
-	const glVertexShader = WebGLShader( gl, gl.VERTEX_SHADER, vertexGlsl );
-	const glFragmentShader = WebGLShader( gl, gl.FRAGMENT_SHADER, fragmentGlsl );
-
-	gl.attachShader( program, glVertexShader );
-	gl.attachShader( program, glFragmentShader );
-
-	// Force a particular attribute to index 0.
-
-	if ( parameters.index0AttributeName !== undefined ) {
-
-		gl.bindAttribLocation( program, 0, parameters.index0AttributeName );
-
-	} else if ( parameters.morphTargets === true ) {
-
-		// programs with morphTargets displace position out of attribute 0
-		gl.bindAttribLocation( program, 0, 'position' );
-
-	}
-
-	gl.linkProgram( program );
-
-	// check for link errors
-	if ( renderer.debug.checkShaderErrors ) {
-
-		const programLog = gl.getProgramInfoLog( program ).trim();
-		const vertexLog = gl.getShaderInfoLog( glVertexShader ).trim();
-		const fragmentLog = gl.getShaderInfoLog( glFragmentShader ).trim();
-
-		let runnable = true;
-		let haveDiagnostics = true;
-
-		if ( gl.getProgramParameter( program, gl.LINK_STATUS ) === false ) {
-
-			runnable = false;
-
-			if ( typeof renderer.debug.onShaderError === 'function' ) {
-
-				renderer.debug.onShaderError( gl, program, glVertexShader, glFragmentShader );
-
-			} else {
-
-				// default error reporting
-
-				const vertexErrors = getShaderErrors( gl, glVertexShader, 'vertex' );
-				const fragmentErrors = getShaderErrors( gl, glFragmentShader, 'fragment' );
-
-				console.error(
-					'THREE.WebGLProgram: Shader Error ' + gl.getError() + ' - ' +
-					'VALIDATE_STATUS ' + gl.getProgramParameter( program, gl.VALIDATE_STATUS ) + '\n\n' +
-					'Program Info Log: ' + programLog + '\n' +
-					vertexErrors + '\n' +
-					fragmentErrors
-				);
-
-			}
-
-		} else if ( programLog !== '' ) {
-
-			console.warn( 'THREE.WebGLProgram: Program Info Log:', programLog );
-
-		} else if ( vertexLog === '' || fragmentLog === '' ) {
-
-			haveDiagnostics = false;
-
-		}
-
-		if ( haveDiagnostics ) {
-
-			this.diagnostics = {
-
-				runnable: runnable,
-
-				programLog: programLog,
-
-				vertexShader: {
-
-					log: vertexLog,
-					prefix: prefixVertex
-
-				},
-
-				fragmentShader: {
-
-					log: fragmentLog,
-					prefix: prefixFragment
-
-				}
-
-			};
-
-		}
-
-	}
-
-	// Clean up
-
-	// Crashes in iOS9 and iOS10. #18402
-	// gl.detachShader( program, glVertexShader );
-	// gl.detachShader( program, glFragmentShader );
-
-	gl.deleteShader( glVertexShader );
-	gl.deleteShader( glFragmentShader );
-
-	// set up caching for uniform locations
-
-	let cachedUniforms;
-
-	this.getUniforms = function () {
-
-		if ( cachedUniforms === undefined ) {
-
-			cachedUniforms = new WebGLUniforms( gl, program );
-
-		}
-
-		return cachedUniforms;
-
-	};
-
-	// set up caching for attribute locations
-
-	let cachedAttributes;
-
-	this.getAttributes = function () {
-
-		if ( cachedAttributes === undefined ) {
-
-			cachedAttributes = fetchAttributeLocations( gl, program );
-
-		}
-
-		return cachedAttributes;
-
-	};
-
-	// free resource
-
-	this.destroy = function () {
-
-		bindingStates.releaseStatesOfProgram( this );
-
-		gl.deleteProgram( program );
-		this.program = undefined;
-
-	};
-
-	//
-
-	this.name = parameters.shaderName;
-	this.id = programIdCount ++;
-	this.cacheKey = cacheKey;
-	this.usedTimes = 1;
-	this.program = program;
-	this.vertexShader = glVertexShader;
-	this.fragmentShader = glFragmentShader;
-
-	return this;
-
-}
-
-let _id = 0;
-
-class WebGLShaderCache {
-
-	constructor() {
-
-		this.shaderCache = new Map();
-		this.materialCache = new Map();
-
-	}
-
-	update( material ) {
-
-		const vertexShader = material.vertexShader;
-		const fragmentShader = material.fragmentShader;
-
-		const vertexShaderStage = this._getShaderStage( vertexShader );
-		const fragmentShaderStage = this._getShaderStage( fragmentShader );
-
-		const materialShaders = this._getShaderCacheForMaterial( material );
-
-		if ( materialShaders.has( vertexShaderStage ) === false ) {
-
-			materialShaders.add( vertexShaderStage );
-			vertexShaderStage.usedTimes ++;
-
-		}
-
-		if ( materialShaders.has( fragmentShaderStage ) === false ) {
-
-			materialShaders.add( fragmentShaderStage );
-			fragmentShaderStage.usedTimes ++;
-
-		}
-
-		return this;
-
-	}
-
-	remove( material ) {
-
-		const materialShaders = this.materialCache.get( material );
-
-		for ( const shaderStage of materialShaders ) {
-
-			shaderStage.usedTimes --;
-
-			if ( shaderStage.usedTimes === 0 ) this.shaderCache.delete( shaderStage.code );
-
-		}
-
-		this.materialCache.delete( material );
-
-		return this;
-
-	}
-
-	getVertexShaderID( material ) {
-
-		return this._getShaderStage( material.vertexShader ).id;
-
-	}
-
-	getFragmentShaderID( material ) {
-
-		return this._getShaderStage( material.fragmentShader ).id;
-
-	}
-
-	dispose() {
-
-		this.shaderCache.clear();
-		this.materialCache.clear();
-
-	}
-
-	_getShaderCacheForMaterial( material ) {
-
-		const cache = this.materialCache;
-		let set = cache.get( material );
-
-		if ( set === undefined ) {
-
-			set = new Set();
-			cache.set( material, set );
-
-		}
-
-		return set;
-
-	}
-
-	_getShaderStage( code ) {
-
-		const cache = this.shaderCache;
-		let stage = cache.get( code );
-
-		if ( stage === undefined ) {
-
-			stage = new WebGLShaderStage( code );
-			cache.set( code, stage );
-
-		}
-
-		return stage;
-
-	}
-
-}
-
-class WebGLShaderStage {
-
-	constructor( code ) {
-
-		this.id = _id ++;
-
-		this.code = code;
-		this.usedTimes = 0;
-
-	}
-
-}
-
-function WebGLPrograms( renderer, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping ) {
-
-	const _programLayers = new Layers();
-	const _customShaders = new WebGLShaderCache();
-	const programs = [];
-
-	const IS_WEBGL2 = capabilities.isWebGL2;
-	const logarithmicDepthBuffer = capabilities.logarithmicDepthBuffer;
-	const SUPPORTS_VERTEX_TEXTURES = capabilities.vertexTextures;
-
-	let precision = capabilities.precision;
-
-	const shaderIDs = {
-		MeshDepthMaterial: 'depth',
-		MeshDistanceMaterial: 'distanceRGBA',
-		MeshNormalMaterial: 'normal',
-		MeshBasicMaterial: 'basic',
-		MeshLambertMaterial: 'lambert',
-		MeshPhongMaterial: 'phong',
-		MeshToonMaterial: 'toon',
-		MeshStandardMaterial: 'physical',
-		MeshPhysicalMaterial: 'physical',
-		MeshMatcapMaterial: 'matcap',
-		LineBasicMaterial: 'basic',
-		LineDashedMaterial: 'dashed',
-		PointsMaterial: 'points',
-		ShadowMaterial: 'shadow',
-		SpriteMaterial: 'sprite'
-	};
-
-	function getChannel( value ) {
-
-		if ( value === 1 ) return 'uv1';
-		if ( value === 2 ) return 'uv2';
-		if ( value === 3 ) return 'uv3';
-
-		return 'uv';
-
-	}
-
-	function getParameters( material, lights, shadows, scene, object ) {
-
-		const fog = scene.fog;
-		const geometry = object.geometry;
-		const environment = material.isMeshStandardMaterial ? scene.environment : null;
-
-		const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );
-		const envMapCubeUVHeight = ( !! envMap ) && ( envMap.mapping === CubeUVReflectionMapping ) ? envMap.image.height : null;
-
-		const shaderID = shaderIDs[ material.type ];
-
-		// heuristics to create shader parameters according to lights in the scene
-		// (not to blow over maxLights budget)
-
-		if ( material.precision !== null ) {
-
-			precision = capabilities.getMaxPrecision( material.precision );
-
-			if ( precision !== material.precision ) {
-
-				console.warn( 'THREE.WebGLProgram.getParameters:', material.precision, 'not supported, using', precision, 'instead.' );
-
-			}
-
-		}
-
-		//
-
-		const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
-		const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
-
-		let morphTextureStride = 0;
-
-		if ( geometry.morphAttributes.position !== undefined ) morphTextureStride = 1;
-		if ( geometry.morphAttributes.normal !== undefined ) morphTextureStride = 2;
-		if ( geometry.morphAttributes.color !== undefined ) morphTextureStride = 3;
-
-		//
-
-		let vertexShader, fragmentShader;
-		let customVertexShaderID, customFragmentShaderID;
-
-		if ( shaderID ) {
-
-			const shader = ShaderLib[ shaderID ];
-
-			vertexShader = shader.vertexShader;
-			fragmentShader = shader.fragmentShader;
-
-		} else {
-
-			vertexShader = material.vertexShader;
-			fragmentShader = material.fragmentShader;
-
-			_customShaders.update( material );
-
-			customVertexShaderID = _customShaders.getVertexShaderID( material );
-			customFragmentShaderID = _customShaders.getFragmentShaderID( material );
-
-		}
-
-		const currentRenderTarget = renderer.getRenderTarget();
-
-		const IS_INSTANCEDMESH = object.isInstancedMesh === true;
-
-		const HAS_MAP = !! material.map;
-		const HAS_MATCAP = !! material.matcap;
-		const HAS_ENVMAP = !! envMap;
-		const HAS_AOMAP = !! material.aoMap;
-		const HAS_LIGHTMAP = !! material.lightMap;
-		const HAS_BUMPMAP = !! material.bumpMap;
-		const HAS_NORMALMAP = !! material.normalMap;
-		const HAS_DISPLACEMENTMAP = !! material.displacementMap;
-		const HAS_EMISSIVEMAP = !! material.emissiveMap;
-
-		const HAS_METALNESSMAP = !! material.metalnessMap;
-		const HAS_ROUGHNESSMAP = !! material.roughnessMap;
-
-		const HAS_CLEARCOAT = material.clearcoat > 0;
-		const HAS_IRIDESCENCE = material.iridescence > 0;
-		const HAS_SHEEN = material.sheen > 0;
-		const HAS_TRANSMISSION = material.transmission > 0;
-
-		const HAS_CLEARCOATMAP = HAS_CLEARCOAT && !! material.clearcoatMap;
-		const HAS_CLEARCOAT_NORMALMAP = HAS_CLEARCOAT && !! material.clearcoatNormalMap;
-		const HAS_CLEARCOAT_ROUGHNESSMAP = HAS_CLEARCOAT && !! material.clearcoatRoughnessMap;
-
-		const HAS_IRIDESCENCEMAP = HAS_IRIDESCENCE && !! material.iridescenceMap;
-		const HAS_IRIDESCENCE_THICKNESSMAP = HAS_IRIDESCENCE && !! material.iridescenceThicknessMap;
-
-		const HAS_SHEEN_COLORMAP = HAS_SHEEN && !! material.sheenColorMap;
-		const HAS_SHEEN_ROUGHNESSMAP = HAS_SHEEN && !! material.sheenRoughnessMap;
-
-		const HAS_SPECULARMAP = !! material.specularMap;
-		const HAS_SPECULAR_COLORMAP = !! material.specularColorMap;
-		const HAS_SPECULAR_INTENSITYMAP = !! material.specularIntensityMap;
-
-		const HAS_TRANSMISSIONMAP = HAS_TRANSMISSION && !! material.transmissionMap;
-		const HAS_THICKNESSMAP = HAS_TRANSMISSION && !! material.thicknessMap;
-
-		const HAS_GRADIENTMAP = !! material.gradientMap;
-
-		const HAS_ALPHAMAP = !! material.alphaMap;
-
-		const HAS_ALPHATEST = material.alphaTest > 0;
-
-		const HAS_EXTENSIONS = !! material.extensions;
-
-		const HAS_ATTRIBUTE_UV1 = !! geometry.attributes.uv1;
-		const HAS_ATTRIBUTE_UV2 = !! geometry.attributes.uv2;
-		const HAS_ATTRIBUTE_UV3 = !! geometry.attributes.uv3;
-
-		const parameters = {
-
-			isWebGL2: IS_WEBGL2,
-
-			shaderID: shaderID,
-			shaderName: material.type,
-
-			vertexShader: vertexShader,
-			fragmentShader: fragmentShader,
-			defines: material.defines,
-
-			customVertexShaderID: customVertexShaderID,
-			customFragmentShaderID: customFragmentShaderID,
-
-			isRawShaderMaterial: material.isRawShaderMaterial === true,
-			glslVersion: material.glslVersion,
-
-			precision: precision,
-
-			instancing: IS_INSTANCEDMESH,
-			instancingColor: IS_INSTANCEDMESH && object.instanceColor !== null,
-
-			supportsVertexTextures: SUPPORTS_VERTEX_TEXTURES,
-			outputColorSpace: ( currentRenderTarget === null ) ? renderer.outputColorSpace : ( currentRenderTarget.isXRRenderTarget === true ? currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace ),
-
-			map: HAS_MAP,
-			matcap: HAS_MATCAP,
-			envMap: HAS_ENVMAP,
-			envMapMode: HAS_ENVMAP && envMap.mapping,
-			envMapCubeUVHeight: envMapCubeUVHeight,
-			aoMap: HAS_AOMAP,
-			lightMap: HAS_LIGHTMAP,
-			bumpMap: HAS_BUMPMAP,
-			normalMap: HAS_NORMALMAP,
-			displacementMap: SUPPORTS_VERTEX_TEXTURES && HAS_DISPLACEMENTMAP,
-			emissiveMap: HAS_EMISSIVEMAP,
-
-			normalMapObjectSpace: HAS_NORMALMAP && material.normalMapType === ObjectSpaceNormalMap,
-			normalMapTangentSpace: HAS_NORMALMAP && material.normalMapType === TangentSpaceNormalMap,
-
-			metalnessMap: HAS_METALNESSMAP,
-			roughnessMap: HAS_ROUGHNESSMAP,
-
-			clearcoat: HAS_CLEARCOAT,
-			clearcoatMap: HAS_CLEARCOATMAP,
-			clearcoatNormalMap: HAS_CLEARCOAT_NORMALMAP,
-			clearcoatRoughnessMap: HAS_CLEARCOAT_ROUGHNESSMAP,
-
-			iridescence: HAS_IRIDESCENCE,
-			iridescenceMap: HAS_IRIDESCENCEMAP,
-			iridescenceThicknessMap: HAS_IRIDESCENCE_THICKNESSMAP,
-
-			sheen: HAS_SHEEN,
-			sheenColorMap: HAS_SHEEN_COLORMAP,
-			sheenRoughnessMap: HAS_SHEEN_ROUGHNESSMAP,
-
-			specularMap: HAS_SPECULARMAP,
-			specularColorMap: HAS_SPECULAR_COLORMAP,
-			specularIntensityMap: HAS_SPECULAR_INTENSITYMAP,
-
-			transmission: HAS_TRANSMISSION,
-			transmissionMap: HAS_TRANSMISSIONMAP,
-			thicknessMap: HAS_THICKNESSMAP,
-
-			gradientMap: HAS_GRADIENTMAP,
-
-			opaque: material.transparent === false && material.blending === NormalBlending,
-
-			alphaMap: HAS_ALPHAMAP,
-			alphaTest: HAS_ALPHATEST,
-
-			combine: material.combine,
-
-			//
-
-			mapUv: HAS_MAP && getChannel( material.map.channel ),
-			aoMapUv: HAS_AOMAP && getChannel( material.aoMap.channel ),
-			lightMapUv: HAS_LIGHTMAP && getChannel( material.lightMap.channel ),
-			bumpMapUv: HAS_BUMPMAP && getChannel( material.bumpMap.channel ),
-			normalMapUv: HAS_NORMALMAP && getChannel( material.normalMap.channel ),
-			displacementMapUv: HAS_DISPLACEMENTMAP && getChannel( material.displacementMap.channel ),
-			emissiveMapUv: HAS_EMISSIVEMAP && getChannel( material.emissiveMap.channel ),
-
-			metalnessMapUv: HAS_METALNESSMAP && getChannel( material.metalnessMap.channel ),
-			roughnessMapUv: HAS_ROUGHNESSMAP && getChannel( material.roughnessMap.channel ),
-
-			clearcoatMapUv: HAS_CLEARCOATMAP && getChannel( material.clearcoatMap.channel ),
-			clearcoatNormalMapUv: HAS_CLEARCOAT_NORMALMAP && getChannel( material.clearcoatNormalMap.channel ),
-			clearcoatRoughnessMapUv: HAS_CLEARCOAT_ROUGHNESSMAP && getChannel( material.clearcoatRoughnessMap.channel ),
-
-			iridescenceMapUv: HAS_IRIDESCENCEMAP && getChannel( material.iridescenceMap.channel ),
-			iridescenceThicknessMapUv: HAS_IRIDESCENCE_THICKNESSMAP && getChannel( material.iridescenceThicknessMap.channel ),
-
-			sheenColorMapUv: HAS_SHEEN_COLORMAP && getChannel( material.sheenColorMap.channel ),
-			sheenRoughnessMapUv: HAS_SHEEN_ROUGHNESSMAP && getChannel( material.sheenRoughnessMap.channel ),
-
-			specularMapUv: HAS_SPECULARMAP && getChannel( material.specularMap.channel ),
-			specularColorMapUv: HAS_SPECULAR_COLORMAP && getChannel( material.specularColorMap.channel ),
-			specularIntensityMapUv: HAS_SPECULAR_INTENSITYMAP && getChannel( material.specularIntensityMap.channel ),
-
-			transmissionMapUv: HAS_TRANSMISSIONMAP && getChannel( material.transmissionMap.channel ),
-			thicknessMapUv: HAS_THICKNESSMAP && getChannel( material.thicknessMap.channel ),
-
-			alphaMapUv: HAS_ALPHAMAP && getChannel( material.alphaMap.channel ),
-
-			//
-
-			vertexTangents: HAS_NORMALMAP && !! geometry.attributes.tangent,
-			vertexColors: material.vertexColors,
-			vertexAlphas: material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4,
-			vertexUv1s: HAS_ATTRIBUTE_UV1,
-			vertexUv2s: HAS_ATTRIBUTE_UV2,
-			vertexUv3s: HAS_ATTRIBUTE_UV3,
-
-			pointsUvs: object.isPoints === true && !! geometry.attributes.uv && ( HAS_MAP || HAS_ALPHAMAP ),
-
-			fog: !! fog,
-			useFog: material.fog === true,
-			fogExp2: ( fog && fog.isFogExp2 ),
-
-			flatShading: material.flatShading === true,
-
-			sizeAttenuation: material.sizeAttenuation === true,
-			logarithmicDepthBuffer: logarithmicDepthBuffer,
-
-			skinning: object.isSkinnedMesh === true,
-
-			morphTargets: geometry.morphAttributes.position !== undefined,
-			morphNormals: geometry.morphAttributes.normal !== undefined,
-			morphColors: geometry.morphAttributes.color !== undefined,
-			morphTargetsCount: morphTargetsCount,
-			morphTextureStride: morphTextureStride,
-
-			numDirLights: lights.directional.length,
-			numPointLights: lights.point.length,
-			numSpotLights: lights.spot.length,
-			numSpotLightMaps: lights.spotLightMap.length,
-			numRectAreaLights: lights.rectArea.length,
-			numHemiLights: lights.hemi.length,
-
-			numDirLightShadows: lights.directionalShadowMap.length,
-			numPointLightShadows: lights.pointShadowMap.length,
-			numSpotLightShadows: lights.spotShadowMap.length,
-			numSpotLightShadowsWithMaps: lights.numSpotLightShadowsWithMaps,
-
-			numClippingPlanes: clipping.numPlanes,
-			numClipIntersection: clipping.numIntersection,
-
-			dithering: material.dithering,
-
-			shadowMapEnabled: renderer.shadowMap.enabled && shadows.length > 0,
-			shadowMapType: renderer.shadowMap.type,
-
-			toneMapping: material.toneMapped ? renderer.toneMapping : NoToneMapping,
-			useLegacyLights: renderer.useLegacyLights,
-
-			premultipliedAlpha: material.premultipliedAlpha,
-
-			doubleSided: material.side === DoubleSide,
-			flipSided: material.side === BackSide,
-
-			useDepthPacking: material.depthPacking >= 0,
-			depthPacking: material.depthPacking || 0,
-
-			index0AttributeName: material.index0AttributeName,
-
-			extensionDerivatives: HAS_EXTENSIONS && material.extensions.derivatives === true,
-			extensionFragDepth: HAS_EXTENSIONS && material.extensions.fragDepth === true,
-			extensionDrawBuffers: HAS_EXTENSIONS && material.extensions.drawBuffers === true,
-			extensionShaderTextureLOD: HAS_EXTENSIONS && material.extensions.shaderTextureLOD === true,
-
-			rendererExtensionFragDepth: IS_WEBGL2 || extensions.has( 'EXT_frag_depth' ),
-			rendererExtensionDrawBuffers: IS_WEBGL2 || extensions.has( 'WEBGL_draw_buffers' ),
-			rendererExtensionShaderTextureLod: IS_WEBGL2 || extensions.has( 'EXT_shader_texture_lod' ),
-
-			customProgramCacheKey: material.customProgramCacheKey()
-
-		};
-
-		return parameters;
-
-	}
-
-	function getProgramCacheKey( parameters ) {
-
-		const array = [];
-
-		if ( parameters.shaderID ) {
-
-			array.push( parameters.shaderID );
-
-		} else {
-
-			array.push( parameters.customVertexShaderID );
-			array.push( parameters.customFragmentShaderID );
-
-		}
-
-		if ( parameters.defines !== undefined ) {
-
-			for ( const name in parameters.defines ) {
-
-				array.push( name );
-				array.push( parameters.defines[ name ] );
-
-			}
-
-		}
-
-		if ( parameters.isRawShaderMaterial === false ) {
-
-			getProgramCacheKeyParameters( array, parameters );
-			getProgramCacheKeyBooleans( array, parameters );
-			array.push( renderer.outputColorSpace );
-
-		}
-
-		array.push( parameters.customProgramCacheKey );
-
-		return array.join();
-
-	}
-
-	function getProgramCacheKeyParameters( array, parameters ) {
-
-		array.push( parameters.precision );
-		array.push( parameters.outputColorSpace );
-		array.push( parameters.envMapMode );
-		array.push( parameters.envMapCubeUVHeight );
-		array.push( parameters.mapUv );
-		array.push( parameters.alphaMapUv );
-		array.push( parameters.lightMapUv );
-		array.push( parameters.aoMapUv );
-		array.push( parameters.bumpMapUv );
-		array.push( parameters.normalMapUv );
-		array.push( parameters.displacementMapUv );
-		array.push( parameters.emissiveMapUv );
-		array.push( parameters.metalnessMapUv );
-		array.push( parameters.roughnessMapUv );
-		array.push( parameters.clearcoatMapUv );
-		array.push( parameters.clearcoatNormalMapUv );
-		array.push( parameters.clearcoatRoughnessMapUv );
-		array.push( parameters.iridescenceMapUv );
-		array.push( parameters.iridescenceThicknessMapUv );
-		array.push( parameters.sheenColorMapUv );
-		array.push( parameters.sheenRoughnessMapUv );
-		array.push( parameters.specularMapUv );
-		array.push( parameters.specularColorMapUv );
-		array.push( parameters.specularIntensityMapUv );
-		array.push( parameters.transmissionMapUv );
-		array.push( parameters.thicknessMapUv );
-		array.push( parameters.combine );
-		array.push( parameters.fogExp2 );
-		array.push( parameters.sizeAttenuation );
-		array.push( parameters.morphTargetsCount );
-		array.push( parameters.morphAttributeCount );
-		array.push( parameters.numDirLights );
-		array.push( parameters.numPointLights );
-		array.push( parameters.numSpotLights );
-		array.push( parameters.numSpotLightMaps );
-		array.push( parameters.numHemiLights );
-		array.push( parameters.numRectAreaLights );
-		array.push( parameters.numDirLightShadows );
-		array.push( parameters.numPointLightShadows );
-		array.push( parameters.numSpotLightShadows );
-		array.push( parameters.numSpotLightShadowsWithMaps );
-		array.push( parameters.shadowMapType );
-		array.push( parameters.toneMapping );
-		array.push( parameters.numClippingPlanes );
-		array.push( parameters.numClipIntersection );
-		array.push( parameters.depthPacking );
-
-	}
-
-	function getProgramCacheKeyBooleans( array, parameters ) {
-
-		_programLayers.disableAll();
-
-		if ( parameters.isWebGL2 )
-			_programLayers.enable( 0 );
-		if ( parameters.supportsVertexTextures )
-			_programLayers.enable( 1 );
-		if ( parameters.instancing )
-			_programLayers.enable( 2 );
-		if ( parameters.instancingColor )
-			_programLayers.enable( 3 );
-		if ( parameters.matcap )
-			_programLayers.enable( 4 );
-		if ( parameters.envMap )
-			_programLayers.enable( 5 );
-		if ( parameters.normalMapObjectSpace )
-			_programLayers.enable( 6 );
-		if ( parameters.normalMapTangentSpace )
-			_programLayers.enable( 7 );
-		if ( parameters.clearcoat )
-			_programLayers.enable( 8 );
-		if ( parameters.iridescence )
-			_programLayers.enable( 9 );
-		if ( parameters.alphaTest )
-			_programLayers.enable( 10 );
-		if ( parameters.vertexColors )
-			_programLayers.enable( 11 );
-		if ( parameters.vertexAlphas )
-			_programLayers.enable( 12 );
-		if ( parameters.vertexUv1s )
-			_programLayers.enable( 13 );
-		if ( parameters.vertexUv2s )
-			_programLayers.enable( 14 );
-		if ( parameters.vertexUv3s )
-			_programLayers.enable( 15 );
-		if ( parameters.vertexTangents )
-			_programLayers.enable( 16 );
-
-		array.push( _programLayers.mask );
-		_programLayers.disableAll();
-
-		if ( parameters.fog )
-			_programLayers.enable( 0 );
-		if ( parameters.useFog )
-			_programLayers.enable( 1 );
-		if ( parameters.flatShading )
-			_programLayers.enable( 2 );
-		if ( parameters.logarithmicDepthBuffer )
-			_programLayers.enable( 3 );
-		if ( parameters.skinning )
-			_programLayers.enable( 4 );
-		if ( parameters.morphTargets )
-			_programLayers.enable( 5 );
-		if ( parameters.morphNormals )
-			_programLayers.enable( 6 );
-		if ( parameters.morphColors )
-			_programLayers.enable( 7 );
-		if ( parameters.premultipliedAlpha )
-			_programLayers.enable( 8 );
-		if ( parameters.shadowMapEnabled )
-			_programLayers.enable( 9 );
-		if ( parameters.useLegacyLights )
-			_programLayers.enable( 10 );
-		if ( parameters.doubleSided )
-			_programLayers.enable( 11 );
-		if ( parameters.flipSided )
-			_programLayers.enable( 12 );
-		if ( parameters.useDepthPacking )
-			_programLayers.enable( 13 );
-		if ( parameters.dithering )
-			_programLayers.enable( 14 );
-		if ( parameters.transmission )
-			_programLayers.enable( 15 );
-		if ( parameters.sheen )
-			_programLayers.enable( 16 );
-		if ( parameters.opaque )
-			_programLayers.enable( 17 );
-		if ( parameters.pointsUvs )
-			_programLayers.enable( 18 );
-
-		array.push( _programLayers.mask );
-
-	}
-
-	function getUniforms( material ) {
-
-		const shaderID = shaderIDs[ material.type ];
-		let uniforms;
-
-		if ( shaderID ) {
-
-			const shader = ShaderLib[ shaderID ];
-			uniforms = UniformsUtils.clone( shader.uniforms );
-
-		} else {
-
-			uniforms = material.uniforms;
-
-		}
-
-		return uniforms;
-
-	}
-
-	function acquireProgram( parameters, cacheKey ) {
-
-		let program;
-
-		// Check if code has been already compiled
-		for ( let p = 0, pl = programs.length; p < pl; p ++ ) {
-
-			const preexistingProgram = programs[ p ];
-
-			if ( preexistingProgram.cacheKey === cacheKey ) {
-
-				program = preexistingProgram;
-				++ program.usedTimes;
-
-				break;
-
-			}
-
-		}
-
-		if ( program === undefined ) {
-
-			program = new WebGLProgram( renderer, cacheKey, parameters, bindingStates );
-			programs.push( program );
-
-		}
-
-		return program;
-
-	}
-
-	function releaseProgram( program ) {
-
-		if ( -- program.usedTimes === 0 ) {
-
-			// Remove from unordered set
-			const i = programs.indexOf( program );
-			programs[ i ] = programs[ programs.length - 1 ];
-			programs.pop();
-
-			// Free WebGL resources
-			program.destroy();
-
-		}
-
-	}
-
-	function releaseShaderCache( material ) {
-
-		_customShaders.remove( material );
-
-	}
-
-	function dispose() {
-
-		_customShaders.dispose();
-
-	}
-
-	return {
-		getParameters: getParameters,
-		getProgramCacheKey: getProgramCacheKey,
-		getUniforms: getUniforms,
-		acquireProgram: acquireProgram,
-		releaseProgram: releaseProgram,
-		releaseShaderCache: releaseShaderCache,
-		// Exposed for resource monitoring & error feedback via renderer.info:
-		programs: programs,
-		dispose: dispose
-	};
-
-}
-
-function WebGLProperties() {
-
-	let properties = new WeakMap();
-
-	function get( object ) {
-
-		let map = properties.get( object );
-
-		if ( map === undefined ) {
-
-			map = {};
-			properties.set( object, map );
-
-		}
-
-		return map;
-
-	}
-
-	function remove( object ) {
-
-		properties.delete( object );
-
-	}
-
-	function update( object, key, value ) {
-
-		properties.get( object )[ key ] = value;
-
-	}
-
-	function dispose() {
-
-		properties = new WeakMap();
-
-	}
-
-	return {
-		get: get,
-		remove: remove,
-		update: update,
-		dispose: dispose
-	};
-
-}
-
-function painterSortStable( a, b ) {
-
-	if ( a.groupOrder !== b.groupOrder ) {
-
-		return a.groupOrder - b.groupOrder;
-
-	} else if ( a.renderOrder !== b.renderOrder ) {
-
-		return a.renderOrder - b.renderOrder;
-
-	} else if ( a.material.id !== b.material.id ) {
-
-		return a.material.id - b.material.id;
-
-	} else if ( a.z !== b.z ) {
-
-		return a.z - b.z;
-
-	} else {
-
-		return a.id - b.id;
-
-	}
-
-}
-
-function reversePainterSortStable( a, b ) {
-
-	if ( a.groupOrder !== b.groupOrder ) {
-
-		return a.groupOrder - b.groupOrder;
-
-	} else if ( a.renderOrder !== b.renderOrder ) {
-
-		return a.renderOrder - b.renderOrder;
-
-	} else if ( a.z !== b.z ) {
-
-		return b.z - a.z;
-
-	} else {
-
-		return a.id - b.id;
-
-	}
-
-}
-
-
-function WebGLRenderList() {
-
-	const renderItems = [];
-	let renderItemsIndex = 0;
-
-	const opaque = [];
-	const transmissive = [];
-	const transparent = [];
-
-	function init() {
-
-		renderItemsIndex = 0;
-
-		opaque.length = 0;
-		transmissive.length = 0;
-		transparent.length = 0;
-
-	}
-
-	function getNextRenderItem( object, geometry, material, groupOrder, z, group ) {
-
-		let renderItem = renderItems[ renderItemsIndex ];
-
-		if ( renderItem === undefined ) {
-
-			renderItem = {
-				id: object.id,
-				object: object,
-				geometry: geometry,
-				material: material,
-				groupOrder: groupOrder,
-				renderOrder: object.renderOrder,
-				z: z,
-				group: group
-			};
-
-			renderItems[ renderItemsIndex ] = renderItem;
-
-		} else {
-
-			renderItem.id = object.id;
-			renderItem.object = object;
-			renderItem.geometry = geometry;
-			renderItem.material = material;
-			renderItem.groupOrder = groupOrder;
-			renderItem.renderOrder = object.renderOrder;
-			renderItem.z = z;
-			renderItem.group = group;
-
-		}
-
-		renderItemsIndex ++;
-
-		return renderItem;
-
-	}
-
-	function push( object, geometry, material, groupOrder, z, group ) {
-
-		const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );
-
-		if ( material.transmission > 0.0 ) {
-
-			transmissive.push( renderItem );
-
-		} else if ( material.transparent === true ) {
-
-			transparent.push( renderItem );
-
-		} else {
-
-			opaque.push( renderItem );
-
-		}
-
-	}
-
-	function unshift( object, geometry, material, groupOrder, z, group ) {
-
-		const renderItem = getNextRenderItem( object, geometry, material, groupOrder, z, group );
-
-		if ( material.transmission > 0.0 ) {
-
-			transmissive.unshift( renderItem );
-
-		} else if ( material.transparent === true ) {
-
-			transparent.unshift( renderItem );
-
-		} else {
-
-			opaque.unshift( renderItem );
-
-		}
-
-	}
-
-	function sort( customOpaqueSort, customTransparentSort ) {
-
-		if ( opaque.length > 1 ) opaque.sort( customOpaqueSort || painterSortStable );
-		if ( transmissive.length > 1 ) transmissive.sort( customTransparentSort || reversePainterSortStable );
-		if ( transparent.length > 1 ) transparent.sort( customTransparentSort || reversePainterSortStable );
-
-	}
-
-	function finish() {
-
-		// Clear references from inactive renderItems in the list
-
-		for ( let i = renderItemsIndex, il = renderItems.length; i < il; i ++ ) {
-
-			const renderItem = renderItems[ i ];
-
-			if ( renderItem.id === null ) break;
-
-			renderItem.id = null;
-			renderItem.object = null;
-			renderItem.geometry = null;
-			renderItem.material = null;
-			renderItem.group = null;
-
-		}
-
-	}
-
-	return {
-
-		opaque: opaque,
-		transmissive: transmissive,
-		transparent: transparent,
-
-		init: init,
-		push: push,
-		unshift: unshift,
-		finish: finish,
-
-		sort: sort
-	};
-
-}
-
-function WebGLRenderLists() {
-
-	let lists = new WeakMap();
-
-	function get( scene, renderCallDepth ) {
-
-		const listArray = lists.get( scene );
-		let list;
-
-		if ( listArray === undefined ) {
-
-			list = new WebGLRenderList();
-			lists.set( scene, [ list ] );
-
-		} else {
-
-			if ( renderCallDepth >= listArray.length ) {
-
-				list = new WebGLRenderList();
-				listArray.push( list );
-
-			} else {
-
-				list = listArray[ renderCallDepth ];
-
-			}
-
-		}
-
-		return list;
-
-	}
-
-	function dispose() {
-
-		lists = new WeakMap();
-
-	}
-
-	return {
-		get: get,
-		dispose: dispose
-	};
-
-}
-
-function UniformsCache() {
-
-	const lights = {};
-
-	return {
-
-		get: function ( light ) {
-
-			if ( lights[ light.id ] !== undefined ) {
-
-				return lights[ light.id ];
-
-			}
-
-			let uniforms;
-
-			switch ( light.type ) {
-
-				case 'DirectionalLight':
-					uniforms = {
-						direction: new Vector3(),
-						color: new Color()
-					};
-					break;
-
-				case 'SpotLight':
-					uniforms = {
-						position: new Vector3(),
-						direction: new Vector3(),
-						color: new Color(),
-						distance: 0,
-						coneCos: 0,
-						penumbraCos: 0,
-						decay: 0
-					};
-					break;
-
-				case 'PointLight':
-					uniforms = {
-						position: new Vector3(),
-						color: new Color(),
-						distance: 0,
-						decay: 0
-					};
-					break;
-
-				case 'HemisphereLight':
-					uniforms = {
-						direction: new Vector3(),
-						skyColor: new Color(),
-						groundColor: new Color()
-					};
-					break;
-
-				case 'RectAreaLight':
-					uniforms = {
-						color: new Color(),
-						position: new Vector3(),
-						halfWidth: new Vector3(),
-						halfHeight: new Vector3()
-					};
-					break;
-
-			}
-
-			lights[ light.id ] = uniforms;
-
-			return uniforms;
-
-		}
-
-	};
-
-}
-
-function ShadowUniformsCache() {
-
-	const lights = {};
-
-	return {
-
-		get: function ( light ) {
-
-			if ( lights[ light.id ] !== undefined ) {
-
-				return lights[ light.id ];
-
-			}
-
-			let uniforms;
-
-			switch ( light.type ) {
-
-				case 'DirectionalLight':
-					uniforms = {
-						shadowBias: 0,
-						shadowNormalBias: 0,
-						shadowRadius: 1,
-						shadowMapSize: new Vector2()
-					};
-					break;
-
-				case 'SpotLight':
-					uniforms = {
-						shadowBias: 0,
-						shadowNormalBias: 0,
-						shadowRadius: 1,
-						shadowMapSize: new Vector2()
-					};
-					break;
-
-				case 'PointLight':
-					uniforms = {
-						shadowBias: 0,
-						shadowNormalBias: 0,
-						shadowRadius: 1,
-						shadowMapSize: new Vector2(),
-						shadowCameraNear: 1,
-						shadowCameraFar: 1000
-					};
-					break;
-
-				// TODO (abelnation): set RectAreaLight shadow uniforms
-
-			}
-
-			lights[ light.id ] = uniforms;
-
-			return uniforms;
-
-		}
-
-	};
-
-}
-
-
-
-let nextVersion = 0;
-
-function shadowCastingAndTexturingLightsFirst( lightA, lightB ) {
-
-	return ( lightB.castShadow ? 2 : 0 ) - ( lightA.castShadow ? 2 : 0 ) + ( lightB.map ? 1 : 0 ) - ( lightA.map ? 1 : 0 );
-
-}
-
-function WebGLLights( extensions, capabilities ) {
-
-	const cache = new UniformsCache();
-
-	const shadowCache = ShadowUniformsCache();
-
-	const state = {
-
-		version: 0,
-
-		hash: {
-			directionalLength: - 1,
-			pointLength: - 1,
-			spotLength: - 1,
-			rectAreaLength: - 1,
-			hemiLength: - 1,
-
-			numDirectionalShadows: - 1,
-			numPointShadows: - 1,
-			numSpotShadows: - 1,
-			numSpotMaps: - 1
-		},
-
-		ambient: [ 0, 0, 0 ],
-		probe: [],
-		directional: [],
-		directionalShadow: [],
-		directionalShadowMap: [],
-		directionalShadowMatrix: [],
-		spot: [],
-		spotLightMap: [],
-		spotShadow: [],
-		spotShadowMap: [],
-		spotLightMatrix: [],
-		rectArea: [],
-		rectAreaLTC1: null,
-		rectAreaLTC2: null,
-		point: [],
-		pointShadow: [],
-		pointShadowMap: [],
-		pointShadowMatrix: [],
-		hemi: [],
-		numSpotLightShadowsWithMaps: 0
-
-	};
-
-	for ( let i = 0; i < 9; i ++ ) state.probe.push( new Vector3() );
-
-	const vector3 = new Vector3();
-	const matrix4 = new Matrix4();
-	const matrix42 = new Matrix4();
-
-	function setup( lights, useLegacyLights ) {
-
-		let r = 0, g = 0, b = 0;
-
-		for ( let i = 0; i < 9; i ++ ) state.probe[ i ].set( 0, 0, 0 );
-
-		let directionalLength = 0;
-		let pointLength = 0;
-		let spotLength = 0;
-		let rectAreaLength = 0;
-		let hemiLength = 0;
-
-		let numDirectionalShadows = 0;
-		let numPointShadows = 0;
-		let numSpotShadows = 0;
-		let numSpotMaps = 0;
-		let numSpotShadowsWithMaps = 0;
-
-		// ordering : [shadow casting + map texturing, map texturing, shadow casting, none ]
-		lights.sort( shadowCastingAndTexturingLightsFirst );
-
-		// artist-friendly light intensity scaling factor
-		const scaleFactor = ( useLegacyLights === true ) ? Math.PI : 1;
-
-		for ( let i = 0, l = lights.length; i < l; i ++ ) {
-
-			const light = lights[ i ];
-
-			const color = light.color;
-			const intensity = light.intensity;
-			const distance = light.distance;
-
-			const shadowMap = ( light.shadow && light.shadow.map ) ? light.shadow.map.texture : null;
-
-			if ( light.isAmbientLight ) {
-
-				r += color.r * intensity * scaleFactor;
-				g += color.g * intensity * scaleFactor;
-				b += color.b * intensity * scaleFactor;
-
-			} else if ( light.isLightProbe ) {
-
-				for ( let j = 0; j < 9; j ++ ) {
-
-					state.probe[ j ].addScaledVector( light.sh.coefficients[ j ], intensity );
-
-				}
-
-			} else if ( light.isDirectionalLight ) {
-
-				const uniforms = cache.get( light );
-
-				uniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );
-
-				if ( light.castShadow ) {
-
-					const shadow = light.shadow;
-
-					const shadowUniforms = shadowCache.get( light );
-
-					shadowUniforms.shadowBias = shadow.bias;
-					shadowUniforms.shadowNormalBias = shadow.normalBias;
-					shadowUniforms.shadowRadius = shadow.radius;
-					shadowUniforms.shadowMapSize = shadow.mapSize;
-
-					state.directionalShadow[ directionalLength ] = shadowUniforms;
-					state.directionalShadowMap[ directionalLength ] = shadowMap;
-					state.directionalShadowMatrix[ directionalLength ] = light.shadow.matrix;
-
-					numDirectionalShadows ++;
-
-				}
-
-				state.directional[ directionalLength ] = uniforms;
-
-				directionalLength ++;
-
-			} else if ( light.isSpotLight ) {
-
-				const uniforms = cache.get( light );
-
-				uniforms.position.setFromMatrixPosition( light.matrixWorld );
-
-				uniforms.color.copy( color ).multiplyScalar( intensity * scaleFactor );
-				uniforms.distance = distance;
-
-				uniforms.coneCos = Math.cos( light.angle );
-				uniforms.penumbraCos = Math.cos( light.angle * ( 1 - light.penumbra ) );
-				uniforms.decay = light.decay;
-
-				state.spot[ spotLength ] = uniforms;
-
-				const shadow = light.shadow;
-
-				if ( light.map ) {
-
-					state.spotLightMap[ numSpotMaps ] = light.map;
-					numSpotMaps ++;
-
-					// make sure the lightMatrix is up to date
-					// TODO : do it if required only
-					shadow.updateMatrices( light );
-
-					if ( light.castShadow ) numSpotShadowsWithMaps ++;
-
-				}
-
-				state.spotLightMatrix[ spotLength ] = shadow.matrix;
-
-				if ( light.castShadow ) {
-
-					const shadowUniforms = shadowCache.get( light );
-
-					shadowUniforms.shadowBias = shadow.bias;
-					shadowUniforms.shadowNormalBias = shadow.normalBias;
-					shadowUniforms.shadowRadius = shadow.radius;
-					shadowUniforms.shadowMapSize = shadow.mapSize;
-
-					state.spotShadow[ spotLength ] = shadowUniforms;
-					state.spotShadowMap[ spotLength ] = shadowMap;
-
-					numSpotShadows ++;
-
-				}
-
-				spotLength ++;
-
-			} else if ( light.isRectAreaLight ) {
-
-				const uniforms = cache.get( light );
-
-				uniforms.color.copy( color ).multiplyScalar( intensity );
-
-				uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );
-				uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );
-
-				state.rectArea[ rectAreaLength ] = uniforms;
-
-				rectAreaLength ++;
-
-			} else if ( light.isPointLight ) {
-
-				const uniforms = cache.get( light );
-
-				uniforms.color.copy( light.color ).multiplyScalar( light.intensity * scaleFactor );
-				uniforms.distance = light.distance;
-				uniforms.decay = light.decay;
-
-				if ( light.castShadow ) {
-
-					const shadow = light.shadow;
-
-					const shadowUniforms = shadowCache.get( light );
-
-					shadowUniforms.shadowBias = shadow.bias;
-					shadowUniforms.shadowNormalBias = shadow.normalBias;
-					shadowUniforms.shadowRadius = shadow.radius;
-					shadowUniforms.shadowMapSize = shadow.mapSize;
-					shadowUniforms.shadowCameraNear = shadow.camera.near;
-					shadowUniforms.shadowCameraFar = shadow.camera.far;
-
-					state.pointShadow[ pointLength ] = shadowUniforms;
-					state.pointShadowMap[ pointLength ] = shadowMap;
-					state.pointShadowMatrix[ pointLength ] = light.shadow.matrix;
-
-					numPointShadows ++;
-
-				}
-
-				state.point[ pointLength ] = uniforms;
-
-				pointLength ++;
-
-			} else if ( light.isHemisphereLight ) {
-
-				const uniforms = cache.get( light );
-
-				uniforms.skyColor.copy( light.color ).multiplyScalar( intensity * scaleFactor );
-				uniforms.groundColor.copy( light.groundColor ).multiplyScalar( intensity * scaleFactor );
-
-				state.hemi[ hemiLength ] = uniforms;
-
-				hemiLength ++;
-
-			}
-
-		}
-
-		if ( rectAreaLength > 0 ) {
-
-			if ( capabilities.isWebGL2 ) {
-
-				// WebGL 2
-
-				state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;
-				state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;
-
-			} else {
-
-				// WebGL 1
-
-				if ( extensions.has( 'OES_texture_float_linear' ) === true ) {
-
-					state.rectAreaLTC1 = UniformsLib.LTC_FLOAT_1;
-					state.rectAreaLTC2 = UniformsLib.LTC_FLOAT_2;
-
-				} else if ( extensions.has( 'OES_texture_half_float_linear' ) === true ) {
-
-					state.rectAreaLTC1 = UniformsLib.LTC_HALF_1;
-					state.rectAreaLTC2 = UniformsLib.LTC_HALF_2;
-
-				} else {
-
-					console.error( 'THREE.WebGLRenderer: Unable to use RectAreaLight. Missing WebGL extensions.' );
-
-				}
-
-			}
-
-		}
-
-		state.ambient[ 0 ] = r;
-		state.ambient[ 1 ] = g;
-		state.ambient[ 2 ] = b;
-
-		const hash = state.hash;
-
-		if ( hash.directionalLength !== directionalLength ||
-			hash.pointLength !== pointLength ||
-			hash.spotLength !== spotLength ||
-			hash.rectAreaLength !== rectAreaLength ||
-			hash.hemiLength !== hemiLength ||
-			hash.numDirectionalShadows !== numDirectionalShadows ||
-			hash.numPointShadows !== numPointShadows ||
-			hash.numSpotShadows !== numSpotShadows ||
-			hash.numSpotMaps !== numSpotMaps ) {
-
-			state.directional.length = directionalLength;
-			state.spot.length = spotLength;
-			state.rectArea.length = rectAreaLength;
-			state.point.length = pointLength;
-			state.hemi.length = hemiLength;
-
-			state.directionalShadow.length = numDirectionalShadows;
-			state.directionalShadowMap.length = numDirectionalShadows;
-			state.pointShadow.length = numPointShadows;
-			state.pointShadowMap.length = numPointShadows;
-			state.spotShadow.length = numSpotShadows;
-			state.spotShadowMap.length = numSpotShadows;
-			state.directionalShadowMatrix.length = numDirectionalShadows;
-			state.pointShadowMatrix.length = numPointShadows;
-			state.spotLightMatrix.length = numSpotShadows + numSpotMaps - numSpotShadowsWithMaps;
-			state.spotLightMap.length = numSpotMaps;
-			state.numSpotLightShadowsWithMaps = numSpotShadowsWithMaps;
-
-			hash.directionalLength = directionalLength;
-			hash.pointLength = pointLength;
-			hash.spotLength = spotLength;
-			hash.rectAreaLength = rectAreaLength;
-			hash.hemiLength = hemiLength;
-
-			hash.numDirectionalShadows = numDirectionalShadows;
-			hash.numPointShadows = numPointShadows;
-			hash.numSpotShadows = numSpotShadows;
-			hash.numSpotMaps = numSpotMaps;
-
-			state.version = nextVersion ++;
-
-		}
-
-	}
-
-	function setupView( lights, camera ) {
-
-		let directionalLength = 0;
-		let pointLength = 0;
-		let spotLength = 0;
-		let rectAreaLength = 0;
-		let hemiLength = 0;
-
-		const viewMatrix = camera.matrixWorldInverse;
-
-		for ( let i = 0, l = lights.length; i < l; i ++ ) {
-
-			const light = lights[ i ];
-
-			if ( light.isDirectionalLight ) {
-
-				const uniforms = state.directional[ directionalLength ];
-
-				uniforms.direction.setFromMatrixPosition( light.matrixWorld );
-				vector3.setFromMatrixPosition( light.target.matrixWorld );
-				uniforms.direction.sub( vector3 );
-				uniforms.direction.transformDirection( viewMatrix );
-
-				directionalLength ++;
-
-			} else if ( light.isSpotLight ) {
-
-				const uniforms = state.spot[ spotLength ];
-
-				uniforms.position.setFromMatrixPosition( light.matrixWorld );
-				uniforms.position.applyMatrix4( viewMatrix );
-
-				uniforms.direction.setFromMatrixPosition( light.matrixWorld );
-				vector3.setFromMatrixPosition( light.target.matrixWorld );
-				uniforms.direction.sub( vector3 );
-				uniforms.direction.transformDirection( viewMatrix );
-
-				spotLength ++;
-
-			} else if ( light.isRectAreaLight ) {
-
-				const uniforms = state.rectArea[ rectAreaLength ];
-
-				uniforms.position.setFromMatrixPosition( light.matrixWorld );
-				uniforms.position.applyMatrix4( viewMatrix );
-
-				// extract local rotation of light to derive width/height half vectors
-				matrix42.identity();
-				matrix4.copy( light.matrixWorld );
-				matrix4.premultiply( viewMatrix );
-				matrix42.extractRotation( matrix4 );
-
-				uniforms.halfWidth.set( light.width * 0.5, 0.0, 0.0 );
-				uniforms.halfHeight.set( 0.0, light.height * 0.5, 0.0 );
-
-				uniforms.halfWidth.applyMatrix4( matrix42 );
-				uniforms.halfHeight.applyMatrix4( matrix42 );
-
-				rectAreaLength ++;
-
-			} else if ( light.isPointLight ) {
-
-				const uniforms = state.point[ pointLength ];
-
-				uniforms.position.setFromMatrixPosition( light.matrixWorld );
-				uniforms.position.applyMatrix4( viewMatrix );
-
-				pointLength ++;
-
-			} else if ( light.isHemisphereLight ) {
-
-				const uniforms = state.hemi[ hemiLength ];
-
-				uniforms.direction.setFromMatrixPosition( light.matrixWorld );
-				uniforms.direction.transformDirection( viewMatrix );
-
-				hemiLength ++;
-
-			}
-
-		}
-
-	}
-
-	return {
-		setup: setup,
-		setupView: setupView,
-		state: state
-	};
-
-}
-
-function WebGLRenderState( extensions, capabilities ) {
-
-	const lights = new WebGLLights( extensions, capabilities );
-
-	const lightsArray = [];
-	const shadowsArray = [];
-
-	function init() {
-
-		lightsArray.length = 0;
-		shadowsArray.length = 0;
-
-	}
-
-	function pushLight( light ) {
-
-		lightsArray.push( light );
-
-	}
-
-	function pushShadow( shadowLight ) {
-
-		shadowsArray.push( shadowLight );
-
-	}
-
-	function setupLights( useLegacyLights ) {
-
-		lights.setup( lightsArray, useLegacyLights );
-
-	}
-
-	function setupLightsView( camera ) {
-
-		lights.setupView( lightsArray, camera );
-
-	}
-
-	const state = {
-		lightsArray: lightsArray,
-		shadowsArray: shadowsArray,
-
-		lights: lights
-	};
-
-	return {
-		init: init,
-		state: state,
-		setupLights: setupLights,
-		setupLightsView: setupLightsView,
-
-		pushLight: pushLight,
-		pushShadow: pushShadow
-	};
-
-}
-
-function WebGLRenderStates( extensions, capabilities ) {
-
-	let renderStates = new WeakMap();
-
-	function get( scene, renderCallDepth = 0 ) {
-
-		const renderStateArray = renderStates.get( scene );
-		let renderState;
-
-		if ( renderStateArray === undefined ) {
-
-			renderState = new WebGLRenderState( extensions, capabilities );
-			renderStates.set( scene, [ renderState ] );
-
-		} else {
-
-			if ( renderCallDepth >= renderStateArray.length ) {
-
-				renderState = new WebGLRenderState( extensions, capabilities );
-				renderStateArray.push( renderState );
-
-			} else {
-
-				renderState = renderStateArray[ renderCallDepth ];
-
-			}
-
-		}
-
-		return renderState;
-
-	}
-
-	function dispose() {
-
-		renderStates = new WeakMap();
-
-	}
-
-	return {
-		get: get,
-		dispose: dispose
-	};
-
-}
-
-class MeshDepthMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isMeshDepthMaterial = true;
-
-		this.type = 'MeshDepthMaterial';
-
-		this.depthPacking = BasicDepthPacking;
-
-		this.map = null;
-
-		this.alphaMap = null;
-
-		this.displacementMap = null;
-		this.displacementScale = 1;
-		this.displacementBias = 0;
-
-		this.wireframe = false;
-		this.wireframeLinewidth = 1;
-
-		this.setValues( parameters );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.depthPacking = source.depthPacking;
-
-		this.map = source.map;
-
-		this.alphaMap = source.alphaMap;
-
-		this.displacementMap = source.displacementMap;
-		this.displacementScale = source.displacementScale;
-		this.displacementBias = source.displacementBias;
-
-		this.wireframe = source.wireframe;
-		this.wireframeLinewidth = source.wireframeLinewidth;
-
-		return this;
-
-	}
-
-}
-
-class MeshDistanceMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isMeshDistanceMaterial = true;
-
-		this.type = 'MeshDistanceMaterial';
-
-		this.map = null;
-
-		this.alphaMap = null;
-
-		this.displacementMap = null;
-		this.displacementScale = 1;
-		this.displacementBias = 0;
-
-		this.setValues( parameters );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.map = source.map;
-
-		this.alphaMap = source.alphaMap;
-
-		this.displacementMap = source.displacementMap;
-		this.displacementScale = source.displacementScale;
-		this.displacementBias = source.displacementBias;
-
-		return this;
-
-	}
-
-}
-
-const vertex = "void main() {\n\tgl_Position = vec4( position, 1.0 );\n}";
-
-const fragment = "uniform sampler2D shadow_pass;\nuniform vec2 resolution;\nuniform float radius;\n#include <packing>\nvoid main() {\n\tconst float samples = float( VSM_SAMPLES );\n\tfloat mean = 0.0;\n\tfloat squared_mean = 0.0;\n\tfloat uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 );\n\tfloat uvStart = samples <= 1.0 ? 0.0 : - 1.0;\n\tfor ( float i = 0.0; i < samples; i ++ ) {\n\t\tfloat uvOffset = uvStart + i * uvStride;\n\t\t#ifdef HORIZONTAL_PASS\n\t\t\tvec2 distribution = unpackRGBATo2Half( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ) );\n\t\t\tmean += distribution.x;\n\t\t\tsquared_mean += distribution.y * distribution.y + distribution.x * distribution.x;\n\t\t#else\n\t\t\tfloat depth = unpackRGBAToDepth( texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ) );\n\t\t\tmean += depth;\n\t\t\tsquared_mean += depth * depth;\n\t\t#endif\n\t}\n\tmean = mean / samples;\n\tsquared_mean = squared_mean / samples;\n\tfloat std_dev = sqrt( squared_mean - mean * mean );\n\tgl_FragColor = pack2HalfToRGBA( vec2( mean, std_dev ) );\n}";
-
-function WebGLShadowMap( _renderer, _objects, _capabilities ) {
-
-	let _frustum = new Frustum();
-
-	const _shadowMapSize = new Vector2(),
-		_viewportSize = new Vector2(),
-
-		_viewport = new Vector4(),
-
-		_depthMaterial = new MeshDepthMaterial( { depthPacking: RGBADepthPacking } ),
-		_distanceMaterial = new MeshDistanceMaterial(),
-
-		_materialCache = {},
-
-		_maxTextureSize = _capabilities.maxTextureSize;
-
-	const shadowSide = { [ FrontSide ]: BackSide, [ BackSide ]: FrontSide, [ DoubleSide ]: DoubleSide };
-
-	const shadowMaterialVertical = new ShaderMaterial( {
-		defines: {
-			VSM_SAMPLES: 8
-		},
-		uniforms: {
-			shadow_pass: { value: null },
-			resolution: { value: new Vector2() },
-			radius: { value: 4.0 }
-		},
-
-		vertexShader: vertex,
-		fragmentShader: fragment
-
-	} );
-
-	const shadowMaterialHorizontal = shadowMaterialVertical.clone();
-	shadowMaterialHorizontal.defines.HORIZONTAL_PASS = 1;
-
-	const fullScreenTri = new BufferGeometry();
-	fullScreenTri.setAttribute(
-		'position',
-		new BufferAttribute(
-			new Float32Array( [ - 1, - 1, 0.5, 3, - 1, 0.5, - 1, 3, 0.5 ] ),
-			3
-		)
-	);
-
-	const fullScreenMesh = new Mesh( fullScreenTri, shadowMaterialVertical );
-
-	const scope = this;
-
-	this.enabled = false;
-
-	this.autoUpdate = true;
-	this.needsUpdate = false;
-
-	this.type = PCFShadowMap;
-	let _previousType = this.type;
-
-	this.render = function ( lights, scene, camera ) {
-
-		if ( scope.enabled === false ) return;
-		if ( scope.autoUpdate === false && scope.needsUpdate === false ) return;
-
-		if ( lights.length === 0 ) return;
-
-		const currentRenderTarget = _renderer.getRenderTarget();
-		const activeCubeFace = _renderer.getActiveCubeFace();
-		const activeMipmapLevel = _renderer.getActiveMipmapLevel();
-
-		const _state = _renderer.state;
-
-		// Set GL state for depth map.
-		_state.setBlending( NoBlending );
-		_state.buffers.color.setClear( 1, 1, 1, 1 );
-		_state.buffers.depth.setTest( true );
-		_state.setScissorTest( false );
-
-		// check for shadow map type changes
-
-		const toVSM = ( _previousType !== VSMShadowMap && this.type === VSMShadowMap );
-		const fromVSM = ( _previousType === VSMShadowMap && this.type !== VSMShadowMap );
-
-		// render depth map
-
-		for ( let i = 0, il = lights.length; i < il; i ++ ) {
-
-			const light = lights[ i ];
-			const shadow = light.shadow;
-
-			if ( shadow === undefined ) {
-
-				console.warn( 'THREE.WebGLShadowMap:', light, 'has no shadow.' );
-				continue;
-
-			}
-
-			if ( shadow.autoUpdate === false && shadow.needsUpdate === false ) continue;
-
-			_shadowMapSize.copy( shadow.mapSize );
-
-			const shadowFrameExtents = shadow.getFrameExtents();
-
-			_shadowMapSize.multiply( shadowFrameExtents );
-
-			_viewportSize.copy( shadow.mapSize );
-
-			if ( _shadowMapSize.x > _maxTextureSize || _shadowMapSize.y > _maxTextureSize ) {
-
-				if ( _shadowMapSize.x > _maxTextureSize ) {
-
-					_viewportSize.x = Math.floor( _maxTextureSize / shadowFrameExtents.x );
-					_shadowMapSize.x = _viewportSize.x * shadowFrameExtents.x;
-					shadow.mapSize.x = _viewportSize.x;
-
-				}
-
-				if ( _shadowMapSize.y > _maxTextureSize ) {
-
-					_viewportSize.y = Math.floor( _maxTextureSize / shadowFrameExtents.y );
-					_shadowMapSize.y = _viewportSize.y * shadowFrameExtents.y;
-					shadow.mapSize.y = _viewportSize.y;
-
-				}
-
-			}
-
-			if ( shadow.map === null || toVSM === true || fromVSM === true ) {
-
-				const pars = ( this.type !== VSMShadowMap ) ? { minFilter: NearestFilter, magFilter: NearestFilter } : {};
-
-				if ( shadow.map !== null ) {
-
-					shadow.map.dispose();
-
-				}
-
-				shadow.map = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y, pars );
-				shadow.map.texture.name = light.name + '.shadowMap';
-
-				shadow.camera.updateProjectionMatrix();
-
-			}
-
-			_renderer.setRenderTarget( shadow.map );
-			_renderer.clear();
-
-			const viewportCount = shadow.getViewportCount();
-
-			for ( let vp = 0; vp < viewportCount; vp ++ ) {
-
-				const viewport = shadow.getViewport( vp );
-
-				_viewport.set(
-					_viewportSize.x * viewport.x,
-					_viewportSize.y * viewport.y,
-					_viewportSize.x * viewport.z,
-					_viewportSize.y * viewport.w
-				);
-
-				_state.viewport( _viewport );
-
-				shadow.updateMatrices( light, vp );
-
-				_frustum = shadow.getFrustum();
-
-				renderObject( scene, camera, shadow.camera, light, this.type );
-
-			}
-
-			// do blur pass for VSM
-
-			if ( shadow.isPointLightShadow !== true && this.type === VSMShadowMap ) {
-
-				VSMPass( shadow, camera );
-
-			}
-
-			shadow.needsUpdate = false;
-
-		}
-
-		_previousType = this.type;
-
-		scope.needsUpdate = false;
-
-		_renderer.setRenderTarget( currentRenderTarget, activeCubeFace, activeMipmapLevel );
-
-	};
-
-	function VSMPass( shadow, camera ) {
-
-		const geometry = _objects.update( fullScreenMesh );
-
-		if ( shadowMaterialVertical.defines.VSM_SAMPLES !== shadow.blurSamples ) {
-
-			shadowMaterialVertical.defines.VSM_SAMPLES = shadow.blurSamples;
-			shadowMaterialHorizontal.defines.VSM_SAMPLES = shadow.blurSamples;
-
-			shadowMaterialVertical.needsUpdate = true;
-			shadowMaterialHorizontal.needsUpdate = true;
-
-		}
-
-		if ( shadow.mapPass === null ) {
-
-			shadow.mapPass = new WebGLRenderTarget( _shadowMapSize.x, _shadowMapSize.y );
-
-		}
-
-		// vertical pass
-
-		shadowMaterialVertical.uniforms.shadow_pass.value = shadow.map.texture;
-		shadowMaterialVertical.uniforms.resolution.value = shadow.mapSize;
-		shadowMaterialVertical.uniforms.radius.value = shadow.radius;
-		_renderer.setRenderTarget( shadow.mapPass );
-		_renderer.clear();
-		_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialVertical, fullScreenMesh, null );
-
-		// horizontal pass
-
-		shadowMaterialHorizontal.uniforms.shadow_pass.value = shadow.mapPass.texture;
-		shadowMaterialHorizontal.uniforms.resolution.value = shadow.mapSize;
-		shadowMaterialHorizontal.uniforms.radius.value = shadow.radius;
-		_renderer.setRenderTarget( shadow.map );
-		_renderer.clear();
-		_renderer.renderBufferDirect( camera, null, geometry, shadowMaterialHorizontal, fullScreenMesh, null );
-
-	}
-
-	function getDepthMaterial( object, material, light, type ) {
-
-		let result = null;
-
-		const customMaterial = ( light.isPointLight === true ) ? object.customDistanceMaterial : object.customDepthMaterial;
-
-		if ( customMaterial !== undefined ) {
-
-			result = customMaterial;
-
-		} else {
-
-			result = ( light.isPointLight === true ) ? _distanceMaterial : _depthMaterial;
-
-			if ( ( _renderer.localClippingEnabled && material.clipShadows === true && Array.isArray( material.clippingPlanes ) && material.clippingPlanes.length !== 0 ) ||
-				( material.displacementMap && material.displacementScale !== 0 ) ||
-				( material.alphaMap && material.alphaTest > 0 ) ||
-				( material.map && material.alphaTest > 0 ) ) {
-
-				// in this case we need a unique material instance reflecting the
-				// appropriate state
-
-				const keyA = result.uuid, keyB = material.uuid;
-
-				let materialsForVariant = _materialCache[ keyA ];
-
-				if ( materialsForVariant === undefined ) {
-
-					materialsForVariant = {};
-					_materialCache[ keyA ] = materialsForVariant;
-
-				}
-
-				let cachedMaterial = materialsForVariant[ keyB ];
-
-				if ( cachedMaterial === undefined ) {
-
-					cachedMaterial = result.clone();
-					materialsForVariant[ keyB ] = cachedMaterial;
-
-				}
-
-				result = cachedMaterial;
-
-			}
-
-		}
-
-		result.visible = material.visible;
-		result.wireframe = material.wireframe;
-
-		if ( type === VSMShadowMap ) {
-
-			result.side = ( material.shadowSide !== null ) ? material.shadowSide : material.side;
-
-		} else {
-
-			result.side = ( material.shadowSide !== null ) ? material.shadowSide : shadowSide[ material.side ];
-
-		}
-
-		result.alphaMap = material.alphaMap;
-		result.alphaTest = material.alphaTest;
-		result.map = material.map;
-
-		result.clipShadows = material.clipShadows;
-		result.clippingPlanes = material.clippingPlanes;
-		result.clipIntersection = material.clipIntersection;
-
-		result.displacementMap = material.displacementMap;
-		result.displacementScale = material.displacementScale;
-		result.displacementBias = material.displacementBias;
-
-		result.wireframeLinewidth = material.wireframeLinewidth;
-		result.linewidth = material.linewidth;
-
-		if ( light.isPointLight === true && result.isMeshDistanceMaterial === true ) {
-
-			const materialProperties = _renderer.properties.get( result );
-			materialProperties.light = light;
-
-		}
-
-		return result;
-
-	}
-
-	function renderObject( object, camera, shadowCamera, light, type ) {
-
-		if ( object.visible === false ) return;
-
-		const visible = object.layers.test( camera.layers );
-
-		if ( visible && ( object.isMesh || object.isLine || object.isPoints ) ) {
-
-			if ( ( object.castShadow || ( object.receiveShadow && type === VSMShadowMap ) ) && ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) ) {
-
-				object.modelViewMatrix.multiplyMatrices( shadowCamera.matrixWorldInverse, object.matrixWorld );
-
-				const geometry = _objects.update( object );
-				const material = object.material;
-
-				if ( Array.isArray( material ) ) {
-
-					const groups = geometry.groups;
-
-					for ( let k = 0, kl = groups.length; k < kl; k ++ ) {
-
-						const group = groups[ k ];
-						const groupMaterial = material[ group.materialIndex ];
-
-						if ( groupMaterial && groupMaterial.visible ) {
-
-							const depthMaterial = getDepthMaterial( object, groupMaterial, light, type );
-
-							_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, group );
-
-						}
-
-					}
-
-				} else if ( material.visible ) {
-
-					const depthMaterial = getDepthMaterial( object, material, light, type );
-
-					_renderer.renderBufferDirect( shadowCamera, null, geometry, depthMaterial, object, null );
-
-				}
-
-			}
-
-		}
-
-		const children = object.children;
-
-		for ( let i = 0, l = children.length; i < l; i ++ ) {
-
-			renderObject( children[ i ], camera, shadowCamera, light, type );
-
-		}
-
-	}
-
-}
-
-function WebGLState( gl, extensions, capabilities ) {
-
-	const isWebGL2 = capabilities.isWebGL2;
-
-	function ColorBuffer() {
-
-		let locked = false;
-
-		const color = new Vector4();
-		let currentColorMask = null;
-		const currentColorClear = new Vector4( 0, 0, 0, 0 );
-
-		return {
-
-			setMask: function ( colorMask ) {
-
-				if ( currentColorMask !== colorMask && ! locked ) {
-
-					gl.colorMask( colorMask, colorMask, colorMask, colorMask );
-					currentColorMask = colorMask;
-
-				}
-
-			},
-
-			setLocked: function ( lock ) {
-
-				locked = lock;
-
-			},
-
-			setClear: function ( r, g, b, a, premultipliedAlpha ) {
-
-				if ( premultipliedAlpha === true ) {
-
-					r *= a; g *= a; b *= a;
-
-				}
-
-				color.set( r, g, b, a );
-
-				if ( currentColorClear.equals( color ) === false ) {
-
-					gl.clearColor( r, g, b, a );
-					currentColorClear.copy( color );
-
-				}
-
-			},
-
-			reset: function () {
-
-				locked = false;
-
-				currentColorMask = null;
-				currentColorClear.set( - 1, 0, 0, 0 ); // set to invalid state
-
-			}
-
-		};
-
-	}
-
-	function DepthBuffer() {
-
-		let locked = false;
-
-		let currentDepthMask = null;
-		let currentDepthFunc = null;
-		let currentDepthClear = null;
-
-		return {
-
-			setTest: function ( depthTest ) {
-
-				if ( depthTest ) {
-
-					enable( gl.DEPTH_TEST );
-
-				} else {
-
-					disable( gl.DEPTH_TEST );
-
-				}
-
-			},
-
-			setMask: function ( depthMask ) {
-
-				if ( currentDepthMask !== depthMask && ! locked ) {
-
-					gl.depthMask( depthMask );
-					currentDepthMask = depthMask;
-
-				}
-
-			},
-
-			setFunc: function ( depthFunc ) {
-
-				if ( currentDepthFunc !== depthFunc ) {
-
-					switch ( depthFunc ) {
-
-						case NeverDepth:
-
-							gl.depthFunc( gl.NEVER );
-							break;
-
-						case AlwaysDepth:
-
-							gl.depthFunc( gl.ALWAYS );
-							break;
-
-						case LessDepth:
-
-							gl.depthFunc( gl.LESS );
-							break;
-
-						case LessEqualDepth:
-
-							gl.depthFunc( gl.LEQUAL );
-							break;
-
-						case EqualDepth:
-
-							gl.depthFunc( gl.EQUAL );
-							break;
-
-						case GreaterEqualDepth:
-
-							gl.depthFunc( gl.GEQUAL );
-							break;
-
-						case GreaterDepth:
-
-							gl.depthFunc( gl.GREATER );
-							break;
-
-						case NotEqualDepth:
-
-							gl.depthFunc( gl.NOTEQUAL );
-							break;
-
-						default:
-
-							gl.depthFunc( gl.LEQUAL );
-
-					}
-
-					currentDepthFunc = depthFunc;
-
-				}
-
-			},
-
-			setLocked: function ( lock ) {
-
-				locked = lock;
-
-			},
-
-			setClear: function ( depth ) {
-
-				if ( currentDepthClear !== depth ) {
-
-					gl.clearDepth( depth );
-					currentDepthClear = depth;
-
-				}
-
-			},
-
-			reset: function () {
-
-				locked = false;
-
-				currentDepthMask = null;
-				currentDepthFunc = null;
-				currentDepthClear = null;
-
-			}
-
-		};
-
-	}
-
-	function StencilBuffer() {
-
-		let locked = false;
-
-		let currentStencilMask = null;
-		let currentStencilFunc = null;
-		let currentStencilRef = null;
-		let currentStencilFuncMask = null;
-		let currentStencilFail = null;
-		let currentStencilZFail = null;
-		let currentStencilZPass = null;
-		let currentStencilClear = null;
-
-		return {
-
-			setTest: function ( stencilTest ) {
-
-				if ( ! locked ) {
-
-					if ( stencilTest ) {
-
-						enable( gl.STENCIL_TEST );
-
-					} else {
-
-						disable( gl.STENCIL_TEST );
-
-					}
-
-				}
-
-			},
-
-			setMask: function ( stencilMask ) {
-
-				if ( currentStencilMask !== stencilMask && ! locked ) {
-
-					gl.stencilMask( stencilMask );
-					currentStencilMask = stencilMask;
-
-				}
-
-			},
-
-			setFunc: function ( stencilFunc, stencilRef, stencilMask ) {
-
-				if ( currentStencilFunc !== stencilFunc ||
-				     currentStencilRef !== stencilRef ||
-				     currentStencilFuncMask !== stencilMask ) {
-
-					gl.stencilFunc( stencilFunc, stencilRef, stencilMask );
-
-					currentStencilFunc = stencilFunc;
-					currentStencilRef = stencilRef;
-					currentStencilFuncMask = stencilMask;
-
-				}
-
-			},
-
-			setOp: function ( stencilFail, stencilZFail, stencilZPass ) {
-
-				if ( currentStencilFail !== stencilFail ||
-				     currentStencilZFail !== stencilZFail ||
-				     currentStencilZPass !== stencilZPass ) {
-
-					gl.stencilOp( stencilFail, stencilZFail, stencilZPass );
-
-					currentStencilFail = stencilFail;
-					currentStencilZFail = stencilZFail;
-					currentStencilZPass = stencilZPass;
-
-				}
-
-			},
-
-			setLocked: function ( lock ) {
-
-				locked = lock;
-
-			},
-
-			setClear: function ( stencil ) {
-
-				if ( currentStencilClear !== stencil ) {
-
-					gl.clearStencil( stencil );
-					currentStencilClear = stencil;
-
-				}
-
-			},
-
-			reset: function () {
-
-				locked = false;
-
-				currentStencilMask = null;
-				currentStencilFunc = null;
-				currentStencilRef = null;
-				currentStencilFuncMask = null;
-				currentStencilFail = null;
-				currentStencilZFail = null;
-				currentStencilZPass = null;
-				currentStencilClear = null;
-
-			}
-
-		};
-
-	}
-
-	//
-
-	const colorBuffer = new ColorBuffer();
-	const depthBuffer = new DepthBuffer();
-	const stencilBuffer = new StencilBuffer();
-
-	const uboBindings = new WeakMap();
-	const uboProgramMap = new WeakMap();
-
-	let enabledCapabilities = {};
-
-	let currentBoundFramebuffers = {};
-	let currentDrawbuffers = new WeakMap();
-	let defaultDrawbuffers = [];
-
-	let currentProgram = null;
-
-	let currentBlendingEnabled = false;
-	let currentBlending = null;
-	let currentBlendEquation = null;
-	let currentBlendSrc = null;
-	let currentBlendDst = null;
-	let currentBlendEquationAlpha = null;
-	let currentBlendSrcAlpha = null;
-	let currentBlendDstAlpha = null;
-	let currentPremultipledAlpha = false;
-
-	let currentFlipSided = null;
-	let currentCullFace = null;
-
-	let currentLineWidth = null;
-
-	let currentPolygonOffsetFactor = null;
-	let currentPolygonOffsetUnits = null;
-
-	const maxTextures = gl.getParameter( gl.MAX_COMBINED_TEXTURE_IMAGE_UNITS );
-
-	let lineWidthAvailable = false;
-	let version = 0;
-	const glVersion = gl.getParameter( gl.VERSION );
-
-	if ( glVersion.indexOf( 'WebGL' ) !== - 1 ) {
-
-		version = parseFloat( /^WebGL (\d)/.exec( glVersion )[ 1 ] );
-		lineWidthAvailable = ( version >= 1.0 );
-
-	} else if ( glVersion.indexOf( 'OpenGL ES' ) !== - 1 ) {
-
-		version = parseFloat( /^OpenGL ES (\d)/.exec( glVersion )[ 1 ] );
-		lineWidthAvailable = ( version >= 2.0 );
-
-	}
-
-	let currentTextureSlot = null;
-	let currentBoundTextures = {};
-
-	const scissorParam = gl.getParameter( gl.SCISSOR_BOX );
-	const viewportParam = gl.getParameter( gl.VIEWPORT );
-
-	const currentScissor = new Vector4().fromArray( scissorParam );
-	const currentViewport = new Vector4().fromArray( viewportParam );
-
-	function createTexture( type, target, count, dimensions ) {
-
-		const data = new Uint8Array( 4 ); // 4 is required to match default unpack alignment of 4.
-		const texture = gl.createTexture();
-
-		gl.bindTexture( type, texture );
-		gl.texParameteri( type, gl.TEXTURE_MIN_FILTER, gl.NEAREST );
-		gl.texParameteri( type, gl.TEXTURE_MAG_FILTER, gl.NEAREST );
-
-		for ( let i = 0; i < count; i ++ ) {
-
-			if ( isWebGL2 && ( type === gl.TEXTURE_3D || type === gl.TEXTURE_2D_ARRAY ) ) {
-
-				gl.texImage3D( target, 0, gl.RGBA, 1, 1, dimensions, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );
-
-			} else {
-
-				gl.texImage2D( target + i, 0, gl.RGBA, 1, 1, 0, gl.RGBA, gl.UNSIGNED_BYTE, data );
-
-			}
-
-		}
-
-		return texture;
-
-	}
-
-	const emptyTextures = {};
-	emptyTextures[ gl.TEXTURE_2D ] = createTexture( gl.TEXTURE_2D, gl.TEXTURE_2D, 1 );
-	emptyTextures[ gl.TEXTURE_CUBE_MAP ] = createTexture( gl.TEXTURE_CUBE_MAP, gl.TEXTURE_CUBE_MAP_POSITIVE_X, 6 );
-
-	if ( isWebGL2 ) {
-
-		emptyTextures[ gl.TEXTURE_2D_ARRAY ] = createTexture( gl.TEXTURE_2D_ARRAY, gl.TEXTURE_2D_ARRAY, 1, 1 );
-		emptyTextures[ gl.TEXTURE_3D ] = createTexture( gl.TEXTURE_3D, gl.TEXTURE_3D, 1, 1 );
-
-	}
-
-	// init
-
-	colorBuffer.setClear( 0, 0, 0, 1 );
-	depthBuffer.setClear( 1 );
-	stencilBuffer.setClear( 0 );
-
-	enable( gl.DEPTH_TEST );
-	depthBuffer.setFunc( LessEqualDepth );
-
-	setFlipSided( false );
-	setCullFace( CullFaceBack );
-	enable( gl.CULL_FACE );
-
-	setBlending( NoBlending );
-
-	//
-
-	function enable( id ) {
-
-		if ( enabledCapabilities[ id ] !== true ) {
-
-			gl.enable( id );
-			enabledCapabilities[ id ] = true;
-
-		}
-
-	}
-
-	function disable( id ) {
-
-		if ( enabledCapabilities[ id ] !== false ) {
-
-			gl.disable( id );
-			enabledCapabilities[ id ] = false;
-
-		}
-
-	}
-
-	function bindFramebuffer( target, framebuffer ) {
-
-		if ( currentBoundFramebuffers[ target ] !== framebuffer ) {
-
-			gl.bindFramebuffer( target, framebuffer );
-
-			currentBoundFramebuffers[ target ] = framebuffer;
-
-			if ( isWebGL2 ) {
-
-				// gl.DRAW_FRAMEBUFFER is equivalent to gl.FRAMEBUFFER
-
-				if ( target === gl.DRAW_FRAMEBUFFER ) {
-
-					currentBoundFramebuffers[ gl.FRAMEBUFFER ] = framebuffer;
-
-				}
-
-				if ( target === gl.FRAMEBUFFER ) {
-
-					currentBoundFramebuffers[ gl.DRAW_FRAMEBUFFER ] = framebuffer;
-
-				}
-
-			}
-
-			return true;
-
-		}
-
-		return false;
-
-	}
-
-	function drawBuffers( renderTarget, framebuffer ) {
-
-		let drawBuffers = defaultDrawbuffers;
-
-		let needsUpdate = false;
-
-		if ( renderTarget ) {
-
-			drawBuffers = currentDrawbuffers.get( framebuffer );
-
-			if ( drawBuffers === undefined ) {
-
-				drawBuffers = [];
-				currentDrawbuffers.set( framebuffer, drawBuffers );
-
-			}
-
-			if ( renderTarget.isWebGLMultipleRenderTargets ) {
-
-				const textures = renderTarget.texture;
-
-				if ( drawBuffers.length !== textures.length || drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {
-
-					for ( let i = 0, il = textures.length; i < il; i ++ ) {
-
-						drawBuffers[ i ] = gl.COLOR_ATTACHMENT0 + i;
-
-					}
-
-					drawBuffers.length = textures.length;
-
-					needsUpdate = true;
-
-				}
-
-			} else {
-
-				if ( drawBuffers[ 0 ] !== gl.COLOR_ATTACHMENT0 ) {
-
-					drawBuffers[ 0 ] = gl.COLOR_ATTACHMENT0;
-
-					needsUpdate = true;
-
-				}
-
-			}
-
-		} else {
-
-			if ( drawBuffers[ 0 ] !== gl.BACK ) {
-
-				drawBuffers[ 0 ] = gl.BACK;
-
-				needsUpdate = true;
-
-			}
-
-		}
-
-		if ( needsUpdate ) {
-
-			if ( capabilities.isWebGL2 ) {
-
-				gl.drawBuffers( drawBuffers );
-
-			} else {
-
-				extensions.get( 'WEBGL_draw_buffers' ).drawBuffersWEBGL( drawBuffers );
-
-			}
-
-		}
-
-
-	}
-
-	function useProgram( program ) {
-
-		if ( currentProgram !== program ) {
-
-			gl.useProgram( program );
-
-			currentProgram = program;
-
-			return true;
-
-		}
-
-		return false;
-
-	}
-
-	const equationToGL = {
-		[ AddEquation ]: gl.FUNC_ADD,
-		[ SubtractEquation ]: gl.FUNC_SUBTRACT,
-		[ ReverseSubtractEquation ]: gl.FUNC_REVERSE_SUBTRACT
-	};
-
-	if ( isWebGL2 ) {
-
-		equationToGL[ MinEquation ] = gl.MIN;
-		equationToGL[ MaxEquation ] = gl.MAX;
-
-	} else {
-
-		const extension = extensions.get( 'EXT_blend_minmax' );
-
-		if ( extension !== null ) {
-
-			equationToGL[ MinEquation ] = extension.MIN_EXT;
-			equationToGL[ MaxEquation ] = extension.MAX_EXT;
-
-		}
-
-	}
-
-	const factorToGL = {
-		[ ZeroFactor ]: gl.ZERO,
-		[ OneFactor ]: gl.ONE,
-		[ SrcColorFactor ]: gl.SRC_COLOR,
-		[ SrcAlphaFactor ]: gl.SRC_ALPHA,
-		[ SrcAlphaSaturateFactor ]: gl.SRC_ALPHA_SATURATE,
-		[ DstColorFactor ]: gl.DST_COLOR,
-		[ DstAlphaFactor ]: gl.DST_ALPHA,
-		[ OneMinusSrcColorFactor ]: gl.ONE_MINUS_SRC_COLOR,
-		[ OneMinusSrcAlphaFactor ]: gl.ONE_MINUS_SRC_ALPHA,
-		[ OneMinusDstColorFactor ]: gl.ONE_MINUS_DST_COLOR,
-		[ OneMinusDstAlphaFactor ]: gl.ONE_MINUS_DST_ALPHA
-	};
-
-	function setBlending( blending, blendEquation, blendSrc, blendDst, blendEquationAlpha, blendSrcAlpha, blendDstAlpha, premultipliedAlpha ) {
-
-		if ( blending === NoBlending ) {
-
-			if ( currentBlendingEnabled === true ) {
-
-				disable( gl.BLEND );
-				currentBlendingEnabled = false;
-
-			}
-
-			return;
-
-		}
-
-		if ( currentBlendingEnabled === false ) {
-
-			enable( gl.BLEND );
-			currentBlendingEnabled = true;
-
-		}
-
-		if ( blending !== CustomBlending ) {
-
-			if ( blending !== currentBlending || premultipliedAlpha !== currentPremultipledAlpha ) {
-
-				if ( currentBlendEquation !== AddEquation || currentBlendEquationAlpha !== AddEquation ) {
-
-					gl.blendEquation( gl.FUNC_ADD );
-
-					currentBlendEquation = AddEquation;
-					currentBlendEquationAlpha = AddEquation;
-
-				}
-
-				if ( premultipliedAlpha ) {
-
-					switch ( blending ) {
-
-						case NormalBlending:
-							gl.blendFuncSeparate( gl.ONE, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
-							break;
-
-						case AdditiveBlending:
-							gl.blendFunc( gl.ONE, gl.ONE );
-							break;
-
-						case SubtractiveBlending:
-							gl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );
-							break;
-
-						case MultiplyBlending:
-							gl.blendFuncSeparate( gl.ZERO, gl.SRC_COLOR, gl.ZERO, gl.SRC_ALPHA );
-							break;
-
-						default:
-							console.error( 'THREE.WebGLState: Invalid blending: ', blending );
-							break;
-
-					}
-
-				} else {
-
-					switch ( blending ) {
-
-						case NormalBlending:
-							gl.blendFuncSeparate( gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA );
-							break;
-
-						case AdditiveBlending:
-							gl.blendFunc( gl.SRC_ALPHA, gl.ONE );
-							break;
-
-						case SubtractiveBlending:
-							gl.blendFuncSeparate( gl.ZERO, gl.ONE_MINUS_SRC_COLOR, gl.ZERO, gl.ONE );
-							break;
-
-						case MultiplyBlending:
-							gl.blendFunc( gl.ZERO, gl.SRC_COLOR );
-							break;
-
-						default:
-							console.error( 'THREE.WebGLState: Invalid blending: ', blending );
-							break;
-
-					}
-
-				}
-
-				currentBlendSrc = null;
-				currentBlendDst = null;
-				currentBlendSrcAlpha = null;
-				currentBlendDstAlpha = null;
-
-				currentBlending = blending;
-				currentPremultipledAlpha = premultipliedAlpha;
-
-			}
-
-			return;
-
-		}
-
-		// custom blending
-
-		blendEquationAlpha = blendEquationAlpha || blendEquation;
-		blendSrcAlpha = blendSrcAlpha || blendSrc;
-		blendDstAlpha = blendDstAlpha || blendDst;
-
-		if ( blendEquation !== currentBlendEquation || blendEquationAlpha !== currentBlendEquationAlpha ) {
-
-			gl.blendEquationSeparate( equationToGL[ blendEquation ], equationToGL[ blendEquationAlpha ] );
-
-			currentBlendEquation = blendEquation;
-			currentBlendEquationAlpha = blendEquationAlpha;
-
-		}
-
-		if ( blendSrc !== currentBlendSrc || blendDst !== currentBlendDst || blendSrcAlpha !== currentBlendSrcAlpha || blendDstAlpha !== currentBlendDstAlpha ) {
-
-			gl.blendFuncSeparate( factorToGL[ blendSrc ], factorToGL[ blendDst ], factorToGL[ blendSrcAlpha ], factorToGL[ blendDstAlpha ] );
-
-			currentBlendSrc = blendSrc;
-			currentBlendDst = blendDst;
-			currentBlendSrcAlpha = blendSrcAlpha;
-			currentBlendDstAlpha = blendDstAlpha;
-
-		}
-
-		currentBlending = blending;
-		currentPremultipledAlpha = false;
-
-	}
-
-	function setMaterial( material, frontFaceCW ) {
-
-		material.side === DoubleSide
-			? disable( gl.CULL_FACE )
-			: enable( gl.CULL_FACE );
-
-		let flipSided = ( material.side === BackSide );
-		if ( frontFaceCW ) flipSided = ! flipSided;
-
-		setFlipSided( flipSided );
-
-		( material.blending === NormalBlending && material.transparent === false )
-			? setBlending( NoBlending )
-			: setBlending( material.blending, material.blendEquation, material.blendSrc, material.blendDst, material.blendEquationAlpha, material.blendSrcAlpha, material.blendDstAlpha, material.premultipliedAlpha );
-
-		depthBuffer.setFunc( material.depthFunc );
-		depthBuffer.setTest( material.depthTest );
-		depthBuffer.setMask( material.depthWrite );
-		colorBuffer.setMask( material.colorWrite );
-
-		const stencilWrite = material.stencilWrite;
-		stencilBuffer.setTest( stencilWrite );
-		if ( stencilWrite ) {
-
-			stencilBuffer.setMask( material.stencilWriteMask );
-			stencilBuffer.setFunc( material.stencilFunc, material.stencilRef, material.stencilFuncMask );
-			stencilBuffer.setOp( material.stencilFail, material.stencilZFail, material.stencilZPass );
-
-		}
-
-		setPolygonOffset( material.polygonOffset, material.polygonOffsetFactor, material.polygonOffsetUnits );
-
-		material.alphaToCoverage === true
-			? enable( gl.SAMPLE_ALPHA_TO_COVERAGE )
-			: disable( gl.SAMPLE_ALPHA_TO_COVERAGE );
-
-	}
-
-	//
-
-	function setFlipSided( flipSided ) {
-
-		if ( currentFlipSided !== flipSided ) {
-
-			if ( flipSided ) {
-
-				gl.frontFace( gl.CW );
-
-			} else {
-
-				gl.frontFace( gl.CCW );
-
-			}
-
-			currentFlipSided = flipSided;
-
-		}
-
-	}
-
-	function setCullFace( cullFace ) {
-
-		if ( cullFace !== CullFaceNone ) {
-
-			enable( gl.CULL_FACE );
-
-			if ( cullFace !== currentCullFace ) {
-
-				if ( cullFace === CullFaceBack ) {
-
-					gl.cullFace( gl.BACK );
-
-				} else if ( cullFace === CullFaceFront ) {
-
-					gl.cullFace( gl.FRONT );
-
-				} else {
-
-					gl.cullFace( gl.FRONT_AND_BACK );
-
-				}
-
-			}
-
-		} else {
-
-			disable( gl.CULL_FACE );
-
-		}
-
-		currentCullFace = cullFace;
-
-	}
-
-	function setLineWidth( width ) {
-
-		if ( width !== currentLineWidth ) {
-
-			if ( lineWidthAvailable ) gl.lineWidth( width );
-
-			currentLineWidth = width;
-
-		}
-
-	}
-
-	function setPolygonOffset( polygonOffset, factor, units ) {
-
-		if ( polygonOffset ) {
-
-			enable( gl.POLYGON_OFFSET_FILL );
-
-			if ( currentPolygonOffsetFactor !== factor || currentPolygonOffsetUnits !== units ) {
-
-				gl.polygonOffset( factor, units );
-
-				currentPolygonOffsetFactor = factor;
-				currentPolygonOffsetUnits = units;
-
-			}
-
-		} else {
-
-			disable( gl.POLYGON_OFFSET_FILL );
-
-		}
-
-	}
-
-	function setScissorTest( scissorTest ) {
-
-		if ( scissorTest ) {
-
-			enable( gl.SCISSOR_TEST );
-
-		} else {
-
-			disable( gl.SCISSOR_TEST );
-
-		}
-
-	}
-
-	// texture
-
-	function activeTexture( webglSlot ) {
-
-		if ( webglSlot === undefined ) webglSlot = gl.TEXTURE0 + maxTextures - 1;
-
-		if ( currentTextureSlot !== webglSlot ) {
-
-			gl.activeTexture( webglSlot );
-			currentTextureSlot = webglSlot;
-
-		}
-
-	}
-
-	function bindTexture( webglType, webglTexture, webglSlot ) {
-
-		if ( webglSlot === undefined ) {
-
-			if ( currentTextureSlot === null ) {
-
-				webglSlot = gl.TEXTURE0 + maxTextures - 1;
-
-			} else {
-
-				webglSlot = currentTextureSlot;
-
-			}
-
-		}
-
-		let boundTexture = currentBoundTextures[ webglSlot ];
-
-		if ( boundTexture === undefined ) {
-
-			boundTexture = { type: undefined, texture: undefined };
-			currentBoundTextures[ webglSlot ] = boundTexture;
-
-		}
-
-		if ( boundTexture.type !== webglType || boundTexture.texture !== webglTexture ) {
-
-			if ( currentTextureSlot !== webglSlot ) {
-
-				gl.activeTexture( webglSlot );
-				currentTextureSlot = webglSlot;
-
-			}
-
-			gl.bindTexture( webglType, webglTexture || emptyTextures[ webglType ] );
-
-			boundTexture.type = webglType;
-			boundTexture.texture = webglTexture;
-
-		}
-
-	}
-
-	function unbindTexture() {
-
-		const boundTexture = currentBoundTextures[ currentTextureSlot ];
-
-		if ( boundTexture !== undefined && boundTexture.type !== undefined ) {
-
-			gl.bindTexture( boundTexture.type, null );
-
-			boundTexture.type = undefined;
-			boundTexture.texture = undefined;
-
-		}
-
-	}
-
-	function compressedTexImage2D() {
-
-		try {
-
-			gl.compressedTexImage2D.apply( gl, arguments );
-
-		} catch ( error ) {
-
-			console.error( 'THREE.WebGLState:', error );
-
-		}
-
-	}
-
-	function compressedTexImage3D() {
-
-		try {
-
-			gl.compressedTexImage3D.apply( gl, arguments );
-
-		} catch ( error ) {
-
-			console.error( 'THREE.WebGLState:', error );
-
-		}
-
-	}
-
-	function texSubImage2D() {
-
-		try {
-
-			gl.texSubImage2D.apply( gl, arguments );
-
-		} catch ( error ) {
-
-			console.error( 'THREE.WebGLState:', error );
-
-		}
-
-	}
-
-	function texSubImage3D() {
-
-		try {
-
-			gl.texSubImage3D.apply( gl, arguments );
-
-		} catch ( error ) {
-
-			console.error( 'THREE.WebGLState:', error );
-
-		}
-
-	}
-
-	function compressedTexSubImage2D() {
-
-		try {
-
-			gl.compressedTexSubImage2D.apply( gl, arguments );
-
-		} catch ( error ) {
-
-			console.error( 'THREE.WebGLState:', error );
-
-		}
-
-	}
-
-	function compressedTexSubImage3D() {
-
-		try {
-
-			gl.compressedTexSubImage3D.apply( gl, arguments );
-
-		} catch ( error ) {
-
-			console.error( 'THREE.WebGLState:', error );
-
-		}
-
-	}
-
-	function texStorage2D() {
-
-		try {
-
-			gl.texStorage2D.apply( gl, arguments );
-
-		} catch ( error ) {
-
-			console.error( 'THREE.WebGLState:', error );
-
-		}
-
-	}
-
-	function texStorage3D() {
-
-		try {
-
-			gl.texStorage3D.apply( gl, arguments );
-
-		} catch ( error ) {
-
-			console.error( 'THREE.WebGLState:', error );
-
-		}
-
-	}
-
-	function texImage2D() {
-
-		try {
-
-			gl.texImage2D.apply( gl, arguments );
-
-		} catch ( error ) {
-
-			console.error( 'THREE.WebGLState:', error );
-
-		}
-
-	}
-
-	function texImage3D() {
-
-		try {
-
-			gl.texImage3D.apply( gl, arguments );
-
-		} catch ( error ) {
-
-			console.error( 'THREE.WebGLState:', error );
-
-		}
-
-	}
-
-	//
-
-	function scissor( scissor ) {
-
-		if ( currentScissor.equals( scissor ) === false ) {
-
-			gl.scissor( scissor.x, scissor.y, scissor.z, scissor.w );
-			currentScissor.copy( scissor );
-
-		}
-
-	}
-
-	function viewport( viewport ) {
-
-		if ( currentViewport.equals( viewport ) === false ) {
-
-			gl.viewport( viewport.x, viewport.y, viewport.z, viewport.w );
-			currentViewport.copy( viewport );
-
-		}
-
-	}
-
-	function updateUBOMapping( uniformsGroup, program ) {
-
-		let mapping = uboProgramMap.get( program );
-
-		if ( mapping === undefined ) {
-
-			mapping = new WeakMap();
-
-			uboProgramMap.set( program, mapping );
-
-		}
-
-		let blockIndex = mapping.get( uniformsGroup );
-
-		if ( blockIndex === undefined ) {
-
-			blockIndex = gl.getUniformBlockIndex( program, uniformsGroup.name );
-
-			mapping.set( uniformsGroup, blockIndex );
-
-		}
-
-	}
-
-	function uniformBlockBinding( uniformsGroup, program ) {
-
-		const mapping = uboProgramMap.get( program );
-		const blockIndex = mapping.get( uniformsGroup );
-
-		if ( uboBindings.get( program ) !== blockIndex ) {
-
-			// bind shader specific block index to global block point
-			gl.uniformBlockBinding( program, blockIndex, uniformsGroup.__bindingPointIndex );
-
-			uboBindings.set( program, blockIndex );
-
-		}
-
-	}
-
-	//
-
-	function reset() {
-
-		// reset state
-
-		gl.disable( gl.BLEND );
-		gl.disable( gl.CULL_FACE );
-		gl.disable( gl.DEPTH_TEST );
-		gl.disable( gl.POLYGON_OFFSET_FILL );
-		gl.disable( gl.SCISSOR_TEST );
-		gl.disable( gl.STENCIL_TEST );
-		gl.disable( gl.SAMPLE_ALPHA_TO_COVERAGE );
-
-		gl.blendEquation( gl.FUNC_ADD );
-		gl.blendFunc( gl.ONE, gl.ZERO );
-		gl.blendFuncSeparate( gl.ONE, gl.ZERO, gl.ONE, gl.ZERO );
-
-		gl.colorMask( true, true, true, true );
-		gl.clearColor( 0, 0, 0, 0 );
-
-		gl.depthMask( true );
-		gl.depthFunc( gl.LESS );
-		gl.clearDepth( 1 );
-
-		gl.stencilMask( 0xffffffff );
-		gl.stencilFunc( gl.ALWAYS, 0, 0xffffffff );
-		gl.stencilOp( gl.KEEP, gl.KEEP, gl.KEEP );
-		gl.clearStencil( 0 );
-
-		gl.cullFace( gl.BACK );
-		gl.frontFace( gl.CCW );
-
-		gl.polygonOffset( 0, 0 );
-
-		gl.activeTexture( gl.TEXTURE0 );
-
-		gl.bindFramebuffer( gl.FRAMEBUFFER, null );
-
-		if ( isWebGL2 === true ) {
-
-			gl.bindFramebuffer( gl.DRAW_FRAMEBUFFER, null );
-			gl.bindFramebuffer( gl.READ_FRAMEBUFFER, null );
-
-		}
-
-		gl.useProgram( null );
-
-		gl.lineWidth( 1 );
-
-		gl.scissor( 0, 0, gl.canvas.width, gl.canvas.height );
-		gl.viewport( 0, 0, gl.canvas.width, gl.canvas.height );
-
-		// reset internals
-
-		enabledCapabilities = {};
-
-		currentTextureSlot = null;
-		currentBoundTextures = {};
-
-		currentBoundFramebuffers = {};
-		currentDrawbuffers = new WeakMap();
-		defaultDrawbuffers = [];
-
-		currentProgram = null;
-
-		currentBlendingEnabled = false;
-		currentBlending = null;
-		currentBlendEquation = null;
-		currentBlendSrc = null;
-		currentBlendDst = null;
-		currentBlendEquationAlpha = null;
-		currentBlendSrcAlpha = null;
-		currentBlendDstAlpha = null;
-		currentPremultipledAlpha = false;
-
-		currentFlipSided = null;
-		currentCullFace = null;
-
-		currentLineWidth = null;
-
-		currentPolygonOffsetFactor = null;
-		currentPolygonOffsetUnits = null;
-
-		currentScissor.set( 0, 0, gl.canvas.width, gl.canvas.height );
-		currentViewport.set( 0, 0, gl.canvas.width, gl.canvas.height );
-
-		colorBuffer.reset();
-		depthBuffer.reset();
-		stencilBuffer.reset();
-
-	}
-
-	return {
-
-		buffers: {
-			color: colorBuffer,
-			depth: depthBuffer,
-			stencil: stencilBuffer
-		},
-
-		enable: enable,
-		disable: disable,
-
-		bindFramebuffer: bindFramebuffer,
-		drawBuffers: drawBuffers,
-
-		useProgram: useProgram,
-
-		setBlending: setBlending,
-		setMaterial: setMaterial,
-
-		setFlipSided: setFlipSided,
-		setCullFace: setCullFace,
-
-		setLineWidth: setLineWidth,
-		setPolygonOffset: setPolygonOffset,
-
-		setScissorTest: setScissorTest,
-
-		activeTexture: activeTexture,
-		bindTexture: bindTexture,
-		unbindTexture: unbindTexture,
-		compressedTexImage2D: compressedTexImage2D,
-		compressedTexImage3D: compressedTexImage3D,
-		texImage2D: texImage2D,
-		texImage3D: texImage3D,
-
-		updateUBOMapping: updateUBOMapping,
-		uniformBlockBinding: uniformBlockBinding,
-
-		texStorage2D: texStorage2D,
-		texStorage3D: texStorage3D,
-		texSubImage2D: texSubImage2D,
-		texSubImage3D: texSubImage3D,
-		compressedTexSubImage2D: compressedTexSubImage2D,
-		compressedTexSubImage3D: compressedTexSubImage3D,
-
-		scissor: scissor,
-		viewport: viewport,
-
-		reset: reset
-
-	};
-
-}
-
-function WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info ) {
-
-	const isWebGL2 = capabilities.isWebGL2;
-	const maxTextures = capabilities.maxTextures;
-	const maxCubemapSize = capabilities.maxCubemapSize;
-	const maxTextureSize = capabilities.maxTextureSize;
-	const maxSamples = capabilities.maxSamples;
-	const multisampledRTTExt = extensions.has( 'WEBGL_multisampled_render_to_texture' ) ? extensions.get( 'WEBGL_multisampled_render_to_texture' ) : null;
-	const supportsInvalidateFramebuffer = typeof navigator === 'undefined' ? false : /OculusBrowser/g.test( navigator.userAgent );
-
-	const _videoTextures = new WeakMap();
-	let _canvas;
-
-	const _sources = new WeakMap(); // maps WebglTexture objects to instances of Source
-
-	// cordova iOS (as of 5.0) still uses UIWebView, which provides OffscreenCanvas,
-	// also OffscreenCanvas.getContext("webgl"), but not OffscreenCanvas.getContext("2d")!
-	// Some implementations may only implement OffscreenCanvas partially (e.g. lacking 2d).
-
-	let useOffscreenCanvas = false;
-
-	try {
-
-		useOffscreenCanvas = typeof OffscreenCanvas !== 'undefined'
-			// eslint-disable-next-line compat/compat
-			&& ( new OffscreenCanvas( 1, 1 ).getContext( '2d' ) ) !== null;
-
-	} catch ( err ) {
-
-		// Ignore any errors
-
-	}
-
-	function createCanvas( width, height ) {
-
-		// Use OffscreenCanvas when available. Specially needed in web workers
-
-		return useOffscreenCanvas ?
-			// eslint-disable-next-line compat/compat
-			new OffscreenCanvas( width, height ) : createElementNS( 'canvas' );
-
-	}
-
-	function resizeImage( image, needsPowerOfTwo, needsNewCanvas, maxSize ) {
-
-		let scale = 1;
-
-		// handle case if texture exceeds max size
-
-		if ( image.width > maxSize || image.height > maxSize ) {
-
-			scale = maxSize / Math.max( image.width, image.height );
-
-		}
-
-		// only perform resize if necessary
-
-		if ( scale < 1 || needsPowerOfTwo === true ) {
-
-			// only perform resize for certain image types
-
-			if ( ( typeof HTMLImageElement !== 'undefined' && image instanceof HTMLImageElement ) ||
-				( typeof HTMLCanvasElement !== 'undefined' && image instanceof HTMLCanvasElement ) ||
-				( typeof ImageBitmap !== 'undefined' && image instanceof ImageBitmap ) ) {
-
-				const floor = needsPowerOfTwo ? floorPowerOfTwo : Math.floor;
-
-				const width = floor( scale * image.width );
-				const height = floor( scale * image.height );
-
-				if ( _canvas === undefined ) _canvas = createCanvas( width, height );
-
-				// cube textures can't reuse the same canvas
-
-				const canvas = needsNewCanvas ? createCanvas( width, height ) : _canvas;
-
-				canvas.width = width;
-				canvas.height = height;
-
-				const context = canvas.getContext( '2d' );
-				context.drawImage( image, 0, 0, width, height );
-
-				console.warn( 'THREE.WebGLRenderer: Texture has been resized from (' + image.width + 'x' + image.height + ') to (' + width + 'x' + height + ').' );
-
-				return canvas;
-
-			} else {
-
-				if ( 'data' in image ) {
-
-					console.warn( 'THREE.WebGLRenderer: Image in DataTexture is too big (' + image.width + 'x' + image.height + ').' );
-
-				}
-
-				return image;
-
-			}
-
-		}
-
-		return image;
-
-	}
-
-	function isPowerOfTwo$1( image ) {
-
-		return isPowerOfTwo( image.width ) && isPowerOfTwo( image.height );
-
-	}
-
-	function textureNeedsPowerOfTwo( texture ) {
-
-		if ( isWebGL2 ) return false;
-
-		return ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) ||
-			( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter );
-
-	}
-
-	function textureNeedsGenerateMipmaps( texture, supportsMips ) {
-
-		return texture.generateMipmaps && supportsMips &&
-			texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter;
-
-	}
-
-	function generateMipmap( target ) {
-
-		_gl.generateMipmap( target );
-
-	}
-
-	function getInternalFormat( internalFormatName, glFormat, glType, colorSpace, forceLinearTransfer = false ) {
-
-		if ( isWebGL2 === false ) return glFormat;
-
-		if ( internalFormatName !== null ) {
-
-			if ( _gl[ internalFormatName ] !== undefined ) return _gl[ internalFormatName ];
-
-			console.warn( 'THREE.WebGLRenderer: Attempt to use non-existing WebGL internal format \'' + internalFormatName + '\'' );
-
-		}
-
-		let internalFormat = glFormat;
-
-		if ( glFormat === _gl.RED ) {
-
-			if ( glType === _gl.FLOAT ) internalFormat = _gl.R32F;
-			if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.R16F;
-			if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.R8;
-
-		}
-
-		if ( glFormat === _gl.RG ) {
-
-			if ( glType === _gl.FLOAT ) internalFormat = _gl.RG32F;
-			if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RG16F;
-			if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = _gl.RG8;
-
-		}
-
-		if ( glFormat === _gl.RGBA ) {
-
-			if ( glType === _gl.FLOAT ) internalFormat = _gl.RGBA32F;
-			if ( glType === _gl.HALF_FLOAT ) internalFormat = _gl.RGBA16F;
-			if ( glType === _gl.UNSIGNED_BYTE ) internalFormat = ( colorSpace === SRGBColorSpace && forceLinearTransfer === false ) ? _gl.SRGB8_ALPHA8 : _gl.RGBA8;
-			if ( glType === _gl.UNSIGNED_SHORT_4_4_4_4 ) internalFormat = _gl.RGBA4;
-			if ( glType === _gl.UNSIGNED_SHORT_5_5_5_1 ) internalFormat = _gl.RGB5_A1;
-
-		}
-
-		if ( internalFormat === _gl.R16F || internalFormat === _gl.R32F ||
-			internalFormat === _gl.RG16F || internalFormat === _gl.RG32F ||
-			internalFormat === _gl.RGBA16F || internalFormat === _gl.RGBA32F ) {
-
-			extensions.get( 'EXT_color_buffer_float' );
-
-		}
-
-		return internalFormat;
-
-	}
-
-	function getMipLevels( texture, image, supportsMips ) {
-
-		if ( textureNeedsGenerateMipmaps( texture, supportsMips ) === true || ( texture.isFramebufferTexture && texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) ) {
-
-			return Math.log2( Math.max( image.width, image.height ) ) + 1;
-
-		} else if ( texture.mipmaps !== undefined && texture.mipmaps.length > 0 ) {
-
-			// user-defined mipmaps
-
-			return texture.mipmaps.length;
-
-		} else if ( texture.isCompressedTexture && Array.isArray( texture.image ) ) {
-
-			return image.mipmaps.length;
-
-		} else {
-
-			// texture without mipmaps (only base level)
-
-			return 1;
-
-		}
-
-	}
-
-	// Fallback filters for non-power-of-2 textures
-
-	function filterFallback( f ) {
-
-		if ( f === NearestFilter || f === NearestMipmapNearestFilter || f === NearestMipmapLinearFilter ) {
-
-			return _gl.NEAREST;
-
-		}
-
-		return _gl.LINEAR;
-
-	}
-
-	//
-
-	function onTextureDispose( event ) {
-
-		const texture = event.target;
-
-		texture.removeEventListener( 'dispose', onTextureDispose );
-
-		deallocateTexture( texture );
-
-		if ( texture.isVideoTexture ) {
-
-			_videoTextures.delete( texture );
-
-		}
-
-	}
-
-	function onRenderTargetDispose( event ) {
-
-		const renderTarget = event.target;
-
-		renderTarget.removeEventListener( 'dispose', onRenderTargetDispose );
-
-		deallocateRenderTarget( renderTarget );
-
-	}
-
-	//
-
-	function deallocateTexture( texture ) {
-
-		const textureProperties = properties.get( texture );
-
-		if ( textureProperties.__webglInit === undefined ) return;
-
-		// check if it's necessary to remove the WebGLTexture object
-
-		const source = texture.source;
-		const webglTextures = _sources.get( source );
-
-		if ( webglTextures ) {
-
-			const webglTexture = webglTextures[ textureProperties.__cacheKey ];
-			webglTexture.usedTimes --;
-
-			// the WebGLTexture object is not used anymore, remove it
-
-			if ( webglTexture.usedTimes === 0 ) {
-
-				deleteTexture( texture );
-
-			}
-
-			// remove the weak map entry if no WebGLTexture uses the source anymore
-
-			if ( Object.keys( webglTextures ).length === 0 ) {
-
-				_sources.delete( source );
-
-			}
-
-		}
-
-		properties.remove( texture );
-
-	}
-
-	function deleteTexture( texture ) {
-
-		const textureProperties = properties.get( texture );
-		_gl.deleteTexture( textureProperties.__webglTexture );
-
-		const source = texture.source;
-		const webglTextures = _sources.get( source );
-		delete webglTextures[ textureProperties.__cacheKey ];
-
-		info.memory.textures --;
-
-	}
-
-	function deallocateRenderTarget( renderTarget ) {
-
-		const texture = renderTarget.texture;
-
-		const renderTargetProperties = properties.get( renderTarget );
-		const textureProperties = properties.get( texture );
-
-		if ( textureProperties.__webglTexture !== undefined ) {
-
-			_gl.deleteTexture( textureProperties.__webglTexture );
-
-			info.memory.textures --;
-
-		}
-
-		if ( renderTarget.depthTexture ) {
-
-			renderTarget.depthTexture.dispose();
-
-		}
-
-		if ( renderTarget.isWebGLCubeRenderTarget ) {
-
-			for ( let i = 0; i < 6; i ++ ) {
-
-				_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer[ i ] );
-				if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer[ i ] );
-
-			}
-
-		} else {
-
-			_gl.deleteFramebuffer( renderTargetProperties.__webglFramebuffer );
-			if ( renderTargetProperties.__webglDepthbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthbuffer );
-			if ( renderTargetProperties.__webglMultisampledFramebuffer ) _gl.deleteFramebuffer( renderTargetProperties.__webglMultisampledFramebuffer );
-
-			if ( renderTargetProperties.__webglColorRenderbuffer ) {
-
-				for ( let i = 0; i < renderTargetProperties.__webglColorRenderbuffer.length; i ++ ) {
-
-					if ( renderTargetProperties.__webglColorRenderbuffer[ i ] ) _gl.deleteRenderbuffer( renderTargetProperties.__webglColorRenderbuffer[ i ] );
-
-				}
-
-			}
-
-			if ( renderTargetProperties.__webglDepthRenderbuffer ) _gl.deleteRenderbuffer( renderTargetProperties.__webglDepthRenderbuffer );
-
-		}
-
-		if ( renderTarget.isWebGLMultipleRenderTargets ) {
-
-			for ( let i = 0, il = texture.length; i < il; i ++ ) {
-
-				const attachmentProperties = properties.get( texture[ i ] );
-
-				if ( attachmentProperties.__webglTexture ) {
-
-					_gl.deleteTexture( attachmentProperties.__webglTexture );
-
-					info.memory.textures --;
-
-				}
-
-				properties.remove( texture[ i ] );
-
-			}
-
-		}
-
-		properties.remove( texture );
-		properties.remove( renderTarget );
-
-	}
-
-	//
-
-	let textureUnits = 0;
-
-	function resetTextureUnits() {
-
-		textureUnits = 0;
-
-	}
-
-	function allocateTextureUnit() {
-
-		const textureUnit = textureUnits;
-
-		if ( textureUnit >= maxTextures ) {
-
-			console.warn( 'THREE.WebGLTextures: Trying to use ' + textureUnit + ' texture units while this GPU supports only ' + maxTextures );
-
-		}
-
-		textureUnits += 1;
-
-		return textureUnit;
-
-	}
-
-	function getTextureCacheKey( texture ) {
-
-		const array = [];
-
-		array.push( texture.wrapS );
-		array.push( texture.wrapT );
-		array.push( texture.wrapR || 0 );
-		array.push( texture.magFilter );
-		array.push( texture.minFilter );
-		array.push( texture.anisotropy );
-		array.push( texture.internalFormat );
-		array.push( texture.format );
-		array.push( texture.type );
-		array.push( texture.generateMipmaps );
-		array.push( texture.premultiplyAlpha );
-		array.push( texture.flipY );
-		array.push( texture.unpackAlignment );
-		array.push( texture.colorSpace );
-
-		return array.join();
-
-	}
-
-	//
-
-	function setTexture2D( texture, slot ) {
-
-		const textureProperties = properties.get( texture );
-
-		if ( texture.isVideoTexture ) updateVideoTexture( texture );
-
-		if ( texture.isRenderTargetTexture === false && texture.version > 0 && textureProperties.__version !== texture.version ) {
-
-			const image = texture.image;
-
-			if ( image === null ) {
-
-				console.warn( 'THREE.WebGLRenderer: Texture marked for update but no image data found.' );
-
-			} else if ( image.complete === false ) {
-
-				console.warn( 'THREE.WebGLRenderer: Texture marked for update but image is incomplete' );
-
-			} else {
-
-				uploadTexture( textureProperties, texture, slot );
-				return;
-
-			}
-
-		}
-
-		state.bindTexture( _gl.TEXTURE_2D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );
-
-	}
-
-	function setTexture2DArray( texture, slot ) {
-
-		const textureProperties = properties.get( texture );
-
-		if ( texture.version > 0 && textureProperties.__version !== texture.version ) {
-
-			uploadTexture( textureProperties, texture, slot );
-			return;
-
-		}
-
-		state.bindTexture( _gl.TEXTURE_2D_ARRAY, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );
-
-	}
-
-	function setTexture3D( texture, slot ) {
-
-		const textureProperties = properties.get( texture );
-
-		if ( texture.version > 0 && textureProperties.__version !== texture.version ) {
-
-			uploadTexture( textureProperties, texture, slot );
-			return;
-
-		}
-
-		state.bindTexture( _gl.TEXTURE_3D, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );
-
-	}
-
-	function setTextureCube( texture, slot ) {
-
-		const textureProperties = properties.get( texture );
-
-		if ( texture.version > 0 && textureProperties.__version !== texture.version ) {
-
-			uploadCubeTexture( textureProperties, texture, slot );
-			return;
-
-		}
-
-		state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );
-
-	}
-
-	const wrappingToGL = {
-		[ RepeatWrapping ]: _gl.REPEAT,
-		[ ClampToEdgeWrapping ]: _gl.CLAMP_TO_EDGE,
-		[ MirroredRepeatWrapping ]: _gl.MIRRORED_REPEAT
-	};
-
-	const filterToGL = {
-		[ NearestFilter ]: _gl.NEAREST,
-		[ NearestMipmapNearestFilter ]: _gl.NEAREST_MIPMAP_NEAREST,
-		[ NearestMipmapLinearFilter ]: _gl.NEAREST_MIPMAP_LINEAR,
-
-		[ LinearFilter ]: _gl.LINEAR,
-		[ LinearMipmapNearestFilter ]: _gl.LINEAR_MIPMAP_NEAREST,
-		[ LinearMipmapLinearFilter ]: _gl.LINEAR_MIPMAP_LINEAR
-	};
-
-	function setTextureParameters( textureType, texture, supportsMips ) {
-
-		if ( supportsMips ) {
-
-			_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, wrappingToGL[ texture.wrapS ] );
-			_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, wrappingToGL[ texture.wrapT ] );
-
-			if ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) {
-
-				_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, wrappingToGL[ texture.wrapR ] );
-
-			}
-
-			_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterToGL[ texture.magFilter ] );
-			_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterToGL[ texture.minFilter ] );
-
-		} else {
-
-			_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_S, _gl.CLAMP_TO_EDGE );
-			_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_T, _gl.CLAMP_TO_EDGE );
-
-			if ( textureType === _gl.TEXTURE_3D || textureType === _gl.TEXTURE_2D_ARRAY ) {
-
-				_gl.texParameteri( textureType, _gl.TEXTURE_WRAP_R, _gl.CLAMP_TO_EDGE );
-
-			}
-
-			if ( texture.wrapS !== ClampToEdgeWrapping || texture.wrapT !== ClampToEdgeWrapping ) {
-
-				console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.wrapS and Texture.wrapT should be set to THREE.ClampToEdgeWrapping.' );
-
-			}
-
-			_gl.texParameteri( textureType, _gl.TEXTURE_MAG_FILTER, filterFallback( texture.magFilter ) );
-			_gl.texParameteri( textureType, _gl.TEXTURE_MIN_FILTER, filterFallback( texture.minFilter ) );
-
-			if ( texture.minFilter !== NearestFilter && texture.minFilter !== LinearFilter ) {
-
-				console.warn( 'THREE.WebGLRenderer: Texture is not power of two. Texture.minFilter should be set to THREE.NearestFilter or THREE.LinearFilter.' );
-
-			}
-
-		}
-
-		if ( extensions.has( 'EXT_texture_filter_anisotropic' ) === true ) {
-
-			const extension = extensions.get( 'EXT_texture_filter_anisotropic' );
-
-			if ( texture.magFilter === NearestFilter ) return;
-			if ( texture.minFilter !== NearestMipmapLinearFilter && texture.minFilter !== LinearMipmapLinearFilter ) return;
-			if ( texture.type === FloatType && extensions.has( 'OES_texture_float_linear' ) === false ) return; // verify extension for WebGL 1 and WebGL 2
-			if ( isWebGL2 === false && ( texture.type === HalfFloatType && extensions.has( 'OES_texture_half_float_linear' ) === false ) ) return; // verify extension for WebGL 1 only
-
-			if ( texture.anisotropy > 1 || properties.get( texture ).__currentAnisotropy ) {
-
-				_gl.texParameterf( textureType, extension.TEXTURE_MAX_ANISOTROPY_EXT, Math.min( texture.anisotropy, capabilities.getMaxAnisotropy() ) );
-				properties.get( texture ).__currentAnisotropy = texture.anisotropy;
-
-			}
-
-		}
-
-	}
-
-	function initTexture( textureProperties, texture ) {
-
-		let forceUpload = false;
-
-		if ( textureProperties.__webglInit === undefined ) {
-
-			textureProperties.__webglInit = true;
-
-			texture.addEventListener( 'dispose', onTextureDispose );
-
-		}
-
-		// create Source <-> WebGLTextures mapping if necessary
-
-		const source = texture.source;
-		let webglTextures = _sources.get( source );
-
-		if ( webglTextures === undefined ) {
-
-			webglTextures = {};
-			_sources.set( source, webglTextures );
-
-		}
-
-		// check if there is already a WebGLTexture object for the given texture parameters
-
-		const textureCacheKey = getTextureCacheKey( texture );
-
-		if ( textureCacheKey !== textureProperties.__cacheKey ) {
-
-			// if not, create a new instance of WebGLTexture
-
-			if ( webglTextures[ textureCacheKey ] === undefined ) {
-
-				// create new entry
-
-				webglTextures[ textureCacheKey ] = {
-					texture: _gl.createTexture(),
-					usedTimes: 0
-				};
-
-				info.memory.textures ++;
-
-				// when a new instance of WebGLTexture was created, a texture upload is required
-				// even if the image contents are identical
-
-				forceUpload = true;
-
-			}
-
-			webglTextures[ textureCacheKey ].usedTimes ++;
-
-			// every time the texture cache key changes, it's necessary to check if an instance of
-			// WebGLTexture can be deleted in order to avoid a memory leak.
-
-			const webglTexture = webglTextures[ textureProperties.__cacheKey ];
-
-			if ( webglTexture !== undefined ) {
-
-				webglTextures[ textureProperties.__cacheKey ].usedTimes --;
-
-				if ( webglTexture.usedTimes === 0 ) {
-
-					deleteTexture( texture );
-
-				}
-
-			}
-
-			// store references to cache key and WebGLTexture object
-
-			textureProperties.__cacheKey = textureCacheKey;
-			textureProperties.__webglTexture = webglTextures[ textureCacheKey ].texture;
-
-		}
-
-		return forceUpload;
-
-	}
-
-	function uploadTexture( textureProperties, texture, slot ) {
-
-		let textureType = _gl.TEXTURE_2D;
-
-		if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) textureType = _gl.TEXTURE_2D_ARRAY;
-		if ( texture.isData3DTexture ) textureType = _gl.TEXTURE_3D;
-
-		const forceUpload = initTexture( textureProperties, texture );
-		const source = texture.source;
-
-		state.bindTexture( textureType, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );
-
-		const sourceProperties = properties.get( source );
-
-		if ( source.version !== sourceProperties.__version || forceUpload === true ) {
-
-			state.activeTexture( _gl.TEXTURE0 + slot );
-
-			_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
-			_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
-			_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
-			_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE );
-
-			const needsPowerOfTwo = textureNeedsPowerOfTwo( texture ) && isPowerOfTwo$1( texture.image ) === false;
-			let image = resizeImage( texture.image, needsPowerOfTwo, false, maxTextureSize );
-			image = verifyColorSpace( texture, image );
-
-			const supportsMips = isPowerOfTwo$1( image ) || isWebGL2,
-				glFormat = utils.convert( texture.format, texture.colorSpace );
-
-			let glType = utils.convert( texture.type ),
-				glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
-
-			setTextureParameters( textureType, texture, supportsMips );
-
-			let mipmap;
-			const mipmaps = texture.mipmaps;
-
-			const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );
-			const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );
-			const levels = getMipLevels( texture, image, supportsMips );
-
-			if ( texture.isDepthTexture ) {
-
-				// populate depth texture with dummy data
-
-				glInternalFormat = _gl.DEPTH_COMPONENT;
-
-				if ( isWebGL2 ) {
-
-					if ( texture.type === FloatType ) {
-
-						glInternalFormat = _gl.DEPTH_COMPONENT32F;
-
-					} else if ( texture.type === UnsignedIntType ) {
-
-						glInternalFormat = _gl.DEPTH_COMPONENT24;
-
-					} else if ( texture.type === UnsignedInt248Type ) {
-
-						glInternalFormat = _gl.DEPTH24_STENCIL8;
-
-					} else {
-
-						glInternalFormat = _gl.DEPTH_COMPONENT16; // WebGL2 requires sized internalformat for glTexImage2D
-
-					}
-
-				} else {
-
-					if ( texture.type === FloatType ) {
-
-						console.error( 'WebGLRenderer: Floating point depth texture requires WebGL2.' );
-
-					}
-
-				}
-
-				// validation checks for WebGL 1
-
-				if ( texture.format === DepthFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) {
-
-					// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are
-					// DEPTH_COMPONENT and type is not UNSIGNED_SHORT or UNSIGNED_INT
-					// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)
-					if ( texture.type !== UnsignedShortType && texture.type !== UnsignedIntType ) {
-
-						console.warn( 'THREE.WebGLRenderer: Use UnsignedShortType or UnsignedIntType for DepthFormat DepthTexture.' );
-
-						texture.type = UnsignedIntType;
-						glType = utils.convert( texture.type );
-
-					}
-
-				}
-
-				if ( texture.format === DepthStencilFormat && glInternalFormat === _gl.DEPTH_COMPONENT ) {
-
-					// Depth stencil textures need the DEPTH_STENCIL internal format
-					// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)
-					glInternalFormat = _gl.DEPTH_STENCIL;
-
-					// The error INVALID_OPERATION is generated by texImage2D if format and internalformat are
-					// DEPTH_STENCIL and type is not UNSIGNED_INT_24_8_WEBGL.
-					// (https://www.khronos.org/registry/webgl/extensions/WEBGL_depth_texture/)
-					if ( texture.type !== UnsignedInt248Type ) {
-
-						console.warn( 'THREE.WebGLRenderer: Use UnsignedInt248Type for DepthStencilFormat DepthTexture.' );
-
-						texture.type = UnsignedInt248Type;
-						glType = utils.convert( texture.type );
-
-					}
-
-				}
-
-				//
-
-				if ( allocateMemory ) {
-
-					if ( useTexStorage ) {
-
-						state.texStorage2D( _gl.TEXTURE_2D, 1, glInternalFormat, image.width, image.height );
-
-					} else {
-
-						state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, null );
-
-					}
-
-				}
-
-			} else if ( texture.isDataTexture ) {
-
-				// use manually created mipmaps if available
-				// if there are no manual mipmaps
-				// set 0 level mipmap and then use GL to generate other mipmap levels
-
-				if ( mipmaps.length > 0 && supportsMips ) {
-
-					if ( useTexStorage && allocateMemory ) {
-
-						state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
-
-					}
-
-					for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
-
-						mipmap = mipmaps[ i ];
-
-						if ( useTexStorage ) {
-
-							state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
-
-						} else {
-
-							state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
-
-						}
-
-					}
-
-					texture.generateMipmaps = false;
-
-				} else {
-
-					if ( useTexStorage ) {
-
-						if ( allocateMemory ) {
-
-							state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
-
-						}
-
-						state.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, image.width, image.height, glFormat, glType, image.data );
-
-					} else {
-
-						state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, image.width, image.height, 0, glFormat, glType, image.data );
-
-					}
-
-				}
-
-			} else if ( texture.isCompressedTexture ) {
-
-				if ( texture.isCompressedArrayTexture ) {
-
-					if ( useTexStorage && allocateMemory ) {
-
-						state.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height, image.depth );
-
-					}
-
-					for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
-
-						mipmap = mipmaps[ i ];
-
-						if ( texture.format !== RGBAFormat ) {
-
-							if ( glFormat !== null ) {
-
-								if ( useTexStorage ) {
-
-									state.compressedTexSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, mipmap.data, 0, 0 );
-
-								} else {
-
-									state.compressedTexImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, mipmap.data, 0, 0 );
-
-								}
-
-							} else {
-
-								console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );
-
-							}
-
-						} else {
-
-							if ( useTexStorage ) {
-
-								state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, i, 0, 0, 0, mipmap.width, mipmap.height, image.depth, glFormat, glType, mipmap.data );
-
-							} else {
-
-								state.texImage3D( _gl.TEXTURE_2D_ARRAY, i, glInternalFormat, mipmap.width, mipmap.height, image.depth, 0, glFormat, glType, mipmap.data );
-
-							}
-
-						}
-
-					}
-
-				} else {
-
-					if ( useTexStorage && allocateMemory ) {
-
-						state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
-
-					}
-
-					for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
-
-						mipmap = mipmaps[ i ];
-
-						if ( texture.format !== RGBAFormat ) {
-
-							if ( glFormat !== null ) {
-
-								if ( useTexStorage ) {
-
-									state.compressedTexSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );
-
-								} else {
-
-									state.compressedTexImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );
-
-								}
-
-							} else {
-
-								console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()' );
-
-							}
-
-						} else {
-
-							if ( useTexStorage ) {
-
-								state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
-
-							} else {
-
-								state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
-
-							}
-
-						}
-
-					}
-
-				}
-
-			} else if ( texture.isDataArrayTexture ) {
-
-				if ( useTexStorage ) {
-
-					if ( allocateMemory ) {
-
-						state.texStorage3D( _gl.TEXTURE_2D_ARRAY, levels, glInternalFormat, image.width, image.height, image.depth );
-
-					}
-
-					state.texSubImage3D( _gl.TEXTURE_2D_ARRAY, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
-
-				} else {
-
-					state.texImage3D( _gl.TEXTURE_2D_ARRAY, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
-
-				}
-
-			} else if ( texture.isData3DTexture ) {
-
-				if ( useTexStorage ) {
-
-					if ( allocateMemory ) {
-
-						state.texStorage3D( _gl.TEXTURE_3D, levels, glInternalFormat, image.width, image.height, image.depth );
-
-					}
-
-					state.texSubImage3D( _gl.TEXTURE_3D, 0, 0, 0, 0, image.width, image.height, image.depth, glFormat, glType, image.data );
-
-				} else {
-
-					state.texImage3D( _gl.TEXTURE_3D, 0, glInternalFormat, image.width, image.height, image.depth, 0, glFormat, glType, image.data );
-
-				}
-
-			} else if ( texture.isFramebufferTexture ) {
-
-				if ( allocateMemory ) {
-
-					if ( useTexStorage ) {
-
-						state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
-
-					} else {
-
-						let width = image.width, height = image.height;
-
-						for ( let i = 0; i < levels; i ++ ) {
-
-							state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, width, height, 0, glFormat, glType, null );
-
-							width >>= 1;
-							height >>= 1;
-
-						}
-
-					}
-
-				}
-
-			} else {
-
-				// regular Texture (image, video, canvas)
-
-				// use manually created mipmaps if available
-				// if there are no manual mipmaps
-				// set 0 level mipmap and then use GL to generate other mipmap levels
-
-				if ( mipmaps.length > 0 && supportsMips ) {
-
-					if ( useTexStorage && allocateMemory ) {
-
-						state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, mipmaps[ 0 ].width, mipmaps[ 0 ].height );
-
-					}
-
-					for ( let i = 0, il = mipmaps.length; i < il; i ++ ) {
-
-						mipmap = mipmaps[ i ];
-
-						if ( useTexStorage ) {
-
-							state.texSubImage2D( _gl.TEXTURE_2D, i, 0, 0, glFormat, glType, mipmap );
-
-						} else {
-
-							state.texImage2D( _gl.TEXTURE_2D, i, glInternalFormat, glFormat, glType, mipmap );
-
-						}
-
-					}
-
-					texture.generateMipmaps = false;
-
-				} else {
-
-					if ( useTexStorage ) {
-
-						if ( allocateMemory ) {
-
-							state.texStorage2D( _gl.TEXTURE_2D, levels, glInternalFormat, image.width, image.height );
-
-						}
-
-						state.texSubImage2D( _gl.TEXTURE_2D, 0, 0, 0, glFormat, glType, image );
-
-					} else {
-
-						state.texImage2D( _gl.TEXTURE_2D, 0, glInternalFormat, glFormat, glType, image );
-
-					}
-
-				}
-
-			}
-
-			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
-
-				generateMipmap( textureType );
-
-			}
-
-			sourceProperties.__version = source.version;
-
-			if ( texture.onUpdate ) texture.onUpdate( texture );
-
-		}
-
-		textureProperties.__version = texture.version;
-
-	}
-
-	function uploadCubeTexture( textureProperties, texture, slot ) {
-
-		if ( texture.image.length !== 6 ) return;
-
-		const forceUpload = initTexture( textureProperties, texture );
-		const source = texture.source;
-
-		state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture, _gl.TEXTURE0 + slot );
-
-		const sourceProperties = properties.get( source );
-
-		if ( source.version !== sourceProperties.__version || forceUpload === true ) {
-
-			state.activeTexture( _gl.TEXTURE0 + slot );
-
-			_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, texture.flipY );
-			_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, texture.premultiplyAlpha );
-			_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, texture.unpackAlignment );
-			_gl.pixelStorei( _gl.UNPACK_COLORSPACE_CONVERSION_WEBGL, _gl.NONE );
-
-			const isCompressed = ( texture.isCompressedTexture || texture.image[ 0 ].isCompressedTexture );
-			const isDataTexture = ( texture.image[ 0 ] && texture.image[ 0 ].isDataTexture );
-
-			const cubeImage = [];
-
-			for ( let i = 0; i < 6; i ++ ) {
-
-				if ( ! isCompressed && ! isDataTexture ) {
-
-					cubeImage[ i ] = resizeImage( texture.image[ i ], false, true, maxCubemapSize );
-
-				} else {
-
-					cubeImage[ i ] = isDataTexture ? texture.image[ i ].image : texture.image[ i ];
-
-				}
-
-				cubeImage[ i ] = verifyColorSpace( texture, cubeImage[ i ] );
-
-			}
-
-			const image = cubeImage[ 0 ],
-				supportsMips = isPowerOfTwo$1( image ) || isWebGL2,
-				glFormat = utils.convert( texture.format, texture.colorSpace ),
-				glType = utils.convert( texture.type ),
-				glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
-
-			const useTexStorage = ( isWebGL2 && texture.isVideoTexture !== true );
-			const allocateMemory = ( sourceProperties.__version === undefined ) || ( forceUpload === true );
-			let levels = getMipLevels( texture, image, supportsMips );
-
-			setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, supportsMips );
-
-			let mipmaps;
-
-			if ( isCompressed ) {
-
-				if ( useTexStorage && allocateMemory ) {
-
-					state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, image.width, image.height );
-
-				}
-
-				for ( let i = 0; i < 6; i ++ ) {
-
-					mipmaps = cubeImage[ i ].mipmaps;
-
-					for ( let j = 0; j < mipmaps.length; j ++ ) {
-
-						const mipmap = mipmaps[ j ];
-
-						if ( texture.format !== RGBAFormat ) {
-
-							if ( glFormat !== null ) {
-
-								if ( useTexStorage ) {
-
-									state.compressedTexSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, mipmap.data );
-
-								} else {
-
-									state.compressedTexImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, mipmap.data );
-
-								}
-
-							} else {
-
-								console.warn( 'THREE.WebGLRenderer: Attempt to load unsupported compressed texture format in .setTextureCube()' );
-
-							}
-
-						} else {
-
-							if ( useTexStorage ) {
-
-								state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, 0, 0, mipmap.width, mipmap.height, glFormat, glType, mipmap.data );
-
-							} else {
-
-								state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j, glInternalFormat, mipmap.width, mipmap.height, 0, glFormat, glType, mipmap.data );
-
-							}
-
-						}
-
-					}
-
-				}
-
-			} else {
-
-				mipmaps = texture.mipmaps;
-
-				if ( useTexStorage && allocateMemory ) {
-
-					// TODO: Uniformly handle mipmap definitions
-					// Normal textures and compressed cube textures define base level + mips with their mipmap array
-					// Uncompressed cube textures use their mipmap array only for mips (no base level)
-
-					if ( mipmaps.length > 0 ) levels ++;
-
-					state.texStorage2D( _gl.TEXTURE_CUBE_MAP, levels, glInternalFormat, cubeImage[ 0 ].width, cubeImage[ 0 ].height );
-
-				}
-
-				for ( let i = 0; i < 6; i ++ ) {
-
-					if ( isDataTexture ) {
-
-						if ( useTexStorage ) {
-
-							state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, cubeImage[ i ].width, cubeImage[ i ].height, glFormat, glType, cubeImage[ i ].data );
-
-						} else {
-
-							state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, cubeImage[ i ].width, cubeImage[ i ].height, 0, glFormat, glType, cubeImage[ i ].data );
-
-						}
-
-						for ( let j = 0; j < mipmaps.length; j ++ ) {
-
-							const mipmap = mipmaps[ j ];
-							const mipmapImage = mipmap.image[ i ].image;
-
-							if ( useTexStorage ) {
-
-								state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, mipmapImage.width, mipmapImage.height, glFormat, glType, mipmapImage.data );
-
-							} else {
-
-								state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, mipmapImage.width, mipmapImage.height, 0, glFormat, glType, mipmapImage.data );
-
-							}
-
-						}
-
-					} else {
-
-						if ( useTexStorage ) {
-
-							state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, 0, 0, glFormat, glType, cubeImage[ i ] );
-
-						} else {
-
-							state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, glInternalFormat, glFormat, glType, cubeImage[ i ] );
-
-						}
-
-						for ( let j = 0; j < mipmaps.length; j ++ ) {
-
-							const mipmap = mipmaps[ j ];
-
-							if ( useTexStorage ) {
-
-								state.texSubImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, 0, 0, glFormat, glType, mipmap.image[ i ] );
-
-							} else {
-
-								state.texImage2D( _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i, j + 1, glInternalFormat, glFormat, glType, mipmap.image[ i ] );
-
-							}
-
-						}
-
-					}
-
-				}
-
-			}
-
-			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
-
-				// We assume images for cube map have the same size.
-				generateMipmap( _gl.TEXTURE_CUBE_MAP );
-
-			}
-
-			sourceProperties.__version = source.version;
-
-			if ( texture.onUpdate ) texture.onUpdate( texture );
-
-		}
-
-		textureProperties.__version = texture.version;
-
-	}
-
-	// Render targets
-
-	// Setup storage for target texture and bind it to correct framebuffer
-	function setupFrameBufferTexture( framebuffer, renderTarget, texture, attachment, textureTarget ) {
-
-		const glFormat = utils.convert( texture.format, texture.colorSpace );
-		const glType = utils.convert( texture.type );
-		const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
-		const renderTargetProperties = properties.get( renderTarget );
-
-		if ( ! renderTargetProperties.__hasExternalTextures ) {
-
-			if ( textureTarget === _gl.TEXTURE_3D || textureTarget === _gl.TEXTURE_2D_ARRAY ) {
-
-				state.texImage3D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, renderTarget.depth, 0, glFormat, glType, null );
-
-			} else {
-
-				state.texImage2D( textureTarget, 0, glInternalFormat, renderTarget.width, renderTarget.height, 0, glFormat, glType, null );
-
-			}
-
-		}
-
-		state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
-
-		if ( useMultisampledRTT( renderTarget ) ) {
-
-			multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0, getRenderTargetSamples( renderTarget ) );
-
-		} else if ( textureTarget === _gl.TEXTURE_2D || ( textureTarget >= _gl.TEXTURE_CUBE_MAP_POSITIVE_X && textureTarget <= _gl.TEXTURE_CUBE_MAP_NEGATIVE_Z ) ) { // see #24753
-
-			_gl.framebufferTexture2D( _gl.FRAMEBUFFER, attachment, textureTarget, properties.get( texture ).__webglTexture, 0 );
-
-		}
-
-		state.bindFramebuffer( _gl.FRAMEBUFFER, null );
-
-	}
-
-
-	// Setup storage for internal depth/stencil buffers and bind to correct framebuffer
-	function setupRenderBufferStorage( renderbuffer, renderTarget, isMultisample ) {
-
-		_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderbuffer );
-
-		if ( renderTarget.depthBuffer && ! renderTarget.stencilBuffer ) {
-
-			let glInternalFormat = _gl.DEPTH_COMPONENT16;
-
-			if ( isMultisample || useMultisampledRTT( renderTarget ) ) {
-
-				const depthTexture = renderTarget.depthTexture;
-
-				if ( depthTexture && depthTexture.isDepthTexture ) {
-
-					if ( depthTexture.type === FloatType ) {
-
-						glInternalFormat = _gl.DEPTH_COMPONENT32F;
-
-					} else if ( depthTexture.type === UnsignedIntType ) {
-
-						glInternalFormat = _gl.DEPTH_COMPONENT24;
-
-					}
-
-				}
-
-				const samples = getRenderTargetSamples( renderTarget );
-
-				if ( useMultisampledRTT( renderTarget ) ) {
-
-					multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
-
-				} else {
-
-					_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
-
-				}
-
-			} else {
-
-				_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );
-
-			}
-
-			_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );
-
-		} else if ( renderTarget.depthBuffer && renderTarget.stencilBuffer ) {
-
-			const samples = getRenderTargetSamples( renderTarget );
-
-			if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {
-
-				_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
-
-			} else if ( useMultisampledRTT( renderTarget ) ) {
-
-				multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, _gl.DEPTH24_STENCIL8, renderTarget.width, renderTarget.height );
-
-			} else {
-
-				_gl.renderbufferStorage( _gl.RENDERBUFFER, _gl.DEPTH_STENCIL, renderTarget.width, renderTarget.height );
-
-			}
-
-
-			_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.RENDERBUFFER, renderbuffer );
-
-		} else {
-
-			const textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];
-
-			for ( let i = 0; i < textures.length; i ++ ) {
-
-				const texture = textures[ i ];
-
-				const glFormat = utils.convert( texture.format, texture.colorSpace );
-				const glType = utils.convert( texture.type );
-				const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace );
-				const samples = getRenderTargetSamples( renderTarget );
-
-				if ( isMultisample && useMultisampledRTT( renderTarget ) === false ) {
-
-					_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
-
-				} else if ( useMultisampledRTT( renderTarget ) ) {
-
-					multisampledRTTExt.renderbufferStorageMultisampleEXT( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
-
-				} else {
-
-					_gl.renderbufferStorage( _gl.RENDERBUFFER, glInternalFormat, renderTarget.width, renderTarget.height );
-
-				}
-
-			}
-
-		}
-
-		_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );
-
-	}
-
-	// Setup resources for a Depth Texture for a FBO (needs an extension)
-	function setupDepthTexture( framebuffer, renderTarget ) {
-
-		const isCube = ( renderTarget && renderTarget.isWebGLCubeRenderTarget );
-		if ( isCube ) throw new Error( 'Depth Texture with cube render targets is not supported' );
-
-		state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
-
-		if ( ! ( renderTarget.depthTexture && renderTarget.depthTexture.isDepthTexture ) ) {
-
-			throw new Error( 'renderTarget.depthTexture must be an instance of THREE.DepthTexture' );
-
-		}
-
-		// upload an empty depth texture with framebuffer size
-		if ( ! properties.get( renderTarget.depthTexture ).__webglTexture ||
-				renderTarget.depthTexture.image.width !== renderTarget.width ||
-				renderTarget.depthTexture.image.height !== renderTarget.height ) {
-
-			renderTarget.depthTexture.image.width = renderTarget.width;
-			renderTarget.depthTexture.image.height = renderTarget.height;
-			renderTarget.depthTexture.needsUpdate = true;
-
-		}
-
-		setTexture2D( renderTarget.depthTexture, 0 );
-
-		const webglDepthTexture = properties.get( renderTarget.depthTexture ).__webglTexture;
-		const samples = getRenderTargetSamples( renderTarget );
-
-		if ( renderTarget.depthTexture.format === DepthFormat ) {
-
-			if ( useMultisampledRTT( renderTarget ) ) {
-
-				multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
-
-			} else {
-
-				_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );
-
-			}
-
-		} else if ( renderTarget.depthTexture.format === DepthStencilFormat ) {
-
-			if ( useMultisampledRTT( renderTarget ) ) {
-
-				multisampledRTTExt.framebufferTexture2DMultisampleEXT( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0, samples );
-
-			} else {
-
-				_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.DEPTH_STENCIL_ATTACHMENT, _gl.TEXTURE_2D, webglDepthTexture, 0 );
-
-			}
-
-		} else {
-
-			throw new Error( 'Unknown depthTexture format' );
-
-		}
-
-	}
-
-	// Setup GL resources for a non-texture depth buffer
-	function setupDepthRenderbuffer( renderTarget ) {
-
-		const renderTargetProperties = properties.get( renderTarget );
-		const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
-
-		if ( renderTarget.depthTexture && ! renderTargetProperties.__autoAllocateDepthBuffer ) {
-
-			if ( isCube ) throw new Error( 'target.depthTexture not supported in Cube render targets' );
-
-			setupDepthTexture( renderTargetProperties.__webglFramebuffer, renderTarget );
-
-		} else {
-
-			if ( isCube ) {
-
-				renderTargetProperties.__webglDepthbuffer = [];
-
-				for ( let i = 0; i < 6; i ++ ) {
-
-					state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer[ i ] );
-					renderTargetProperties.__webglDepthbuffer[ i ] = _gl.createRenderbuffer();
-					setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer[ i ], renderTarget, false );
-
-				}
-
-			} else {
-
-				state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
-				renderTargetProperties.__webglDepthbuffer = _gl.createRenderbuffer();
-				setupRenderBufferStorage( renderTargetProperties.__webglDepthbuffer, renderTarget, false );
-
-			}
-
-		}
-
-		state.bindFramebuffer( _gl.FRAMEBUFFER, null );
-
-	}
-
-	// rebind framebuffer with external textures
-	function rebindTextures( renderTarget, colorTexture, depthTexture ) {
-
-		const renderTargetProperties = properties.get( renderTarget );
-
-		if ( colorTexture !== undefined ) {
-
-			setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, renderTarget.texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D );
-
-		}
-
-		if ( depthTexture !== undefined ) {
-
-			setupDepthRenderbuffer( renderTarget );
-
-		}
-
-	}
-
-	// Set up GL resources for the render target
-	function setupRenderTarget( renderTarget ) {
-
-		const texture = renderTarget.texture;
-
-		const renderTargetProperties = properties.get( renderTarget );
-		const textureProperties = properties.get( texture );
-
-		renderTarget.addEventListener( 'dispose', onRenderTargetDispose );
-
-		if ( renderTarget.isWebGLMultipleRenderTargets !== true ) {
-
-			if ( textureProperties.__webglTexture === undefined ) {
-
-				textureProperties.__webglTexture = _gl.createTexture();
-
-			}
-
-			textureProperties.__version = texture.version;
-			info.memory.textures ++;
-
-		}
-
-		const isCube = ( renderTarget.isWebGLCubeRenderTarget === true );
-		const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );
-		const supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;
-
-		// Setup framebuffer
-
-		if ( isCube ) {
-
-			renderTargetProperties.__webglFramebuffer = [];
-
-			for ( let i = 0; i < 6; i ++ ) {
-
-				renderTargetProperties.__webglFramebuffer[ i ] = _gl.createFramebuffer();
-
-			}
-
-		} else {
-
-			renderTargetProperties.__webglFramebuffer = _gl.createFramebuffer();
-
-			if ( isMultipleRenderTargets ) {
-
-				if ( capabilities.drawBuffers ) {
-
-					const textures = renderTarget.texture;
-
-					for ( let i = 0, il = textures.length; i < il; i ++ ) {
-
-						const attachmentProperties = properties.get( textures[ i ] );
-
-						if ( attachmentProperties.__webglTexture === undefined ) {
-
-							attachmentProperties.__webglTexture = _gl.createTexture();
-
-							info.memory.textures ++;
-
-						}
-
-					}
-
-				} else {
-
-					console.warn( 'THREE.WebGLRenderer: WebGLMultipleRenderTargets can only be used with WebGL2 or WEBGL_draw_buffers extension.' );
-
-				}
-
-			}
-
-			if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
-
-				const textures = isMultipleRenderTargets ? texture : [ texture ];
-
-				renderTargetProperties.__webglMultisampledFramebuffer = _gl.createFramebuffer();
-				renderTargetProperties.__webglColorRenderbuffer = [];
-
-				state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
-
-				for ( let i = 0; i < textures.length; i ++ ) {
-
-					const texture = textures[ i ];
-					renderTargetProperties.__webglColorRenderbuffer[ i ] = _gl.createRenderbuffer();
-
-					_gl.bindRenderbuffer( _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
-
-					const glFormat = utils.convert( texture.format, texture.colorSpace );
-					const glType = utils.convert( texture.type );
-					const glInternalFormat = getInternalFormat( texture.internalFormat, glFormat, glType, texture.colorSpace, renderTarget.isXRRenderTarget === true );
-					const samples = getRenderTargetSamples( renderTarget );
-					_gl.renderbufferStorageMultisample( _gl.RENDERBUFFER, samples, glInternalFormat, renderTarget.width, renderTarget.height );
-
-					_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
-
-				}
-
-				_gl.bindRenderbuffer( _gl.RENDERBUFFER, null );
-
-				if ( renderTarget.depthBuffer ) {
-
-					renderTargetProperties.__webglDepthRenderbuffer = _gl.createRenderbuffer();
-					setupRenderBufferStorage( renderTargetProperties.__webglDepthRenderbuffer, renderTarget, true );
-
-				}
-
-				state.bindFramebuffer( _gl.FRAMEBUFFER, null );
-
-			}
-
-		}
-
-		// Setup color buffer
-
-		if ( isCube ) {
-
-			state.bindTexture( _gl.TEXTURE_CUBE_MAP, textureProperties.__webglTexture );
-			setTextureParameters( _gl.TEXTURE_CUBE_MAP, texture, supportsMips );
-
-			for ( let i = 0; i < 6; i ++ ) {
-
-				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer[ i ], renderTarget, texture, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + i );
-
-			}
-
-			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
-
-				generateMipmap( _gl.TEXTURE_CUBE_MAP );
-
-			}
-
-			state.unbindTexture();
-
-		} else if ( isMultipleRenderTargets ) {
-
-			const textures = renderTarget.texture;
-
-			for ( let i = 0, il = textures.length; i < il; i ++ ) {
-
-				const attachment = textures[ i ];
-				const attachmentProperties = properties.get( attachment );
-
-				state.bindTexture( _gl.TEXTURE_2D, attachmentProperties.__webglTexture );
-				setTextureParameters( _gl.TEXTURE_2D, attachment, supportsMips );
-				setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, attachment, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D );
-
-				if ( textureNeedsGenerateMipmaps( attachment, supportsMips ) ) {
-
-					generateMipmap( _gl.TEXTURE_2D );
-
-				}
-
-			}
-
-			state.unbindTexture();
-
-		} else {
-
-			let glTextureType = _gl.TEXTURE_2D;
-
-			if ( renderTarget.isWebGL3DRenderTarget || renderTarget.isWebGLArrayRenderTarget ) {
-
-				if ( isWebGL2 ) {
-
-					glTextureType = renderTarget.isWebGL3DRenderTarget ? _gl.TEXTURE_3D : _gl.TEXTURE_2D_ARRAY;
-
-				} else {
-
-					console.error( 'THREE.WebGLTextures: THREE.Data3DTexture and THREE.DataArrayTexture only supported with WebGL2.' );
-
-				}
-
-			}
-
-			state.bindTexture( glTextureType, textureProperties.__webglTexture );
-			setTextureParameters( glTextureType, texture, supportsMips );
-			setupFrameBufferTexture( renderTargetProperties.__webglFramebuffer, renderTarget, texture, _gl.COLOR_ATTACHMENT0, glTextureType );
-
-			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
-
-				generateMipmap( glTextureType );
-
-			}
-
-			state.unbindTexture();
-
-		}
-
-		// Setup depth and stencil buffers
-
-		if ( renderTarget.depthBuffer ) {
-
-			setupDepthRenderbuffer( renderTarget );
-
-		}
-
-	}
-
-	function updateRenderTargetMipmap( renderTarget ) {
-
-		const supportsMips = isPowerOfTwo$1( renderTarget ) || isWebGL2;
-
-		const textures = renderTarget.isWebGLMultipleRenderTargets === true ? renderTarget.texture : [ renderTarget.texture ];
-
-		for ( let i = 0, il = textures.length; i < il; i ++ ) {
-
-			const texture = textures[ i ];
-
-			if ( textureNeedsGenerateMipmaps( texture, supportsMips ) ) {
-
-				const target = renderTarget.isWebGLCubeRenderTarget ? _gl.TEXTURE_CUBE_MAP : _gl.TEXTURE_2D;
-				const webglTexture = properties.get( texture ).__webglTexture;
-
-				state.bindTexture( target, webglTexture );
-				generateMipmap( target );
-				state.unbindTexture();
-
-			}
-
-		}
-
-	}
-
-	function updateMultisampleRenderTarget( renderTarget ) {
-
-		if ( ( isWebGL2 && renderTarget.samples > 0 ) && useMultisampledRTT( renderTarget ) === false ) {
-
-			const textures = renderTarget.isWebGLMultipleRenderTargets ? renderTarget.texture : [ renderTarget.texture ];
-			const width = renderTarget.width;
-			const height = renderTarget.height;
-			let mask = _gl.COLOR_BUFFER_BIT;
-			const invalidationArray = [];
-			const depthStyle = renderTarget.stencilBuffer ? _gl.DEPTH_STENCIL_ATTACHMENT : _gl.DEPTH_ATTACHMENT;
-			const renderTargetProperties = properties.get( renderTarget );
-			const isMultipleRenderTargets = ( renderTarget.isWebGLMultipleRenderTargets === true );
-
-			// If MRT we need to remove FBO attachments
-			if ( isMultipleRenderTargets ) {
-
-				for ( let i = 0; i < textures.length; i ++ ) {
-
-					state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
-					_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, null );
-
-					state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
-					_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, null, 0 );
-
-				}
-
-			}
-
-			state.bindFramebuffer( _gl.READ_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
-			state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
-
-			for ( let i = 0; i < textures.length; i ++ ) {
-
-				invalidationArray.push( _gl.COLOR_ATTACHMENT0 + i );
-
-				if ( renderTarget.depthBuffer ) {
-
-					invalidationArray.push( depthStyle );
-
-				}
-
-				const ignoreDepthValues = ( renderTargetProperties.__ignoreDepthValues !== undefined ) ? renderTargetProperties.__ignoreDepthValues : false;
-
-				if ( ignoreDepthValues === false ) {
-
-					if ( renderTarget.depthBuffer ) mask |= _gl.DEPTH_BUFFER_BIT;
-					if ( renderTarget.stencilBuffer ) mask |= _gl.STENCIL_BUFFER_BIT;
-
-				}
-
-				if ( isMultipleRenderTargets ) {
-
-					_gl.framebufferRenderbuffer( _gl.READ_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
-
-				}
-
-				if ( ignoreDepthValues === true ) {
-
-					_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, [ depthStyle ] );
-					_gl.invalidateFramebuffer( _gl.DRAW_FRAMEBUFFER, [ depthStyle ] );
-
-				}
-
-				if ( isMultipleRenderTargets ) {
-
-					const webglTexture = properties.get( textures[ i ] ).__webglTexture;
-					_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_2D, webglTexture, 0 );
-
-				}
-
-				_gl.blitFramebuffer( 0, 0, width, height, 0, 0, width, height, mask, _gl.NEAREST );
-
-				if ( supportsInvalidateFramebuffer ) {
-
-					_gl.invalidateFramebuffer( _gl.READ_FRAMEBUFFER, invalidationArray );
-
-				}
-
-
-			}
-
-			state.bindFramebuffer( _gl.READ_FRAMEBUFFER, null );
-			state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, null );
-
-			// If MRT since pre-blit we removed the FBO we need to reconstruct the attachments
-			if ( isMultipleRenderTargets ) {
-
-				for ( let i = 0; i < textures.length; i ++ ) {
-
-					state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
-					_gl.framebufferRenderbuffer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.RENDERBUFFER, renderTargetProperties.__webglColorRenderbuffer[ i ] );
-
-					const webglTexture = properties.get( textures[ i ] ).__webglTexture;
-
-					state.bindFramebuffer( _gl.FRAMEBUFFER, renderTargetProperties.__webglFramebuffer );
-					_gl.framebufferTexture2D( _gl.DRAW_FRAMEBUFFER, _gl.COLOR_ATTACHMENT0 + i, _gl.TEXTURE_2D, webglTexture, 0 );
-
-				}
-
-			}
-
-			state.bindFramebuffer( _gl.DRAW_FRAMEBUFFER, renderTargetProperties.__webglMultisampledFramebuffer );
-
-		}
-
-	}
-
-	function getRenderTargetSamples( renderTarget ) {
-
-		return Math.min( maxSamples, renderTarget.samples );
-
-	}
-
-	function useMultisampledRTT( renderTarget ) {
-
-		const renderTargetProperties = properties.get( renderTarget );
-
-		return isWebGL2 && renderTarget.samples > 0 && extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true && renderTargetProperties.__useRenderToTexture !== false;
-
-	}
-
-	function updateVideoTexture( texture ) {
-
-		const frame = info.render.frame;
-
-		// Check the last frame we updated the VideoTexture
-
-		if ( _videoTextures.get( texture ) !== frame ) {
-
-			_videoTextures.set( texture, frame );
-			texture.update();
-
-		}
-
-	}
-
-	function verifyColorSpace( texture, image ) {
-
-		const colorSpace = texture.colorSpace;
-		const format = texture.format;
-		const type = texture.type;
-
-		if ( texture.isCompressedTexture === true || texture.format === _SRGBAFormat ) return image;
-
-		if ( colorSpace !== LinearSRGBColorSpace && colorSpace !== NoColorSpace ) {
-
-			// sRGB
-
-			if ( colorSpace === SRGBColorSpace ) {
-
-				if ( isWebGL2 === false ) {
-
-					// in WebGL 1, try to use EXT_sRGB extension and unsized formats
-
-					if ( extensions.has( 'EXT_sRGB' ) === true && format === RGBAFormat ) {
-
-						texture.format = _SRGBAFormat;
-
-						// it's not possible to generate mips in WebGL 1 with this extension
-
-						texture.minFilter = LinearFilter;
-						texture.generateMipmaps = false;
-
-					} else {
-
-						// slow fallback (CPU decode)
-
-						image = ImageUtils.sRGBToLinear( image );
-
-					}
-
-				} else {
-
-					// in WebGL 2 uncompressed textures can only be sRGB encoded if they have the RGBA8 format
-
-					if ( format !== RGBAFormat || type !== UnsignedByteType ) {
-
-						console.warn( 'THREE.WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.' );
-
-					}
-
-				}
-
-			} else {
-
-				console.error( 'THREE.WebGLTextures: Unsupported texture color space:', colorSpace );
-
-			}
-
-		}
-
-		return image;
-
-	}
-
-	//
-
-	this.allocateTextureUnit = allocateTextureUnit;
-	this.resetTextureUnits = resetTextureUnits;
-
-	this.setTexture2D = setTexture2D;
-	this.setTexture2DArray = setTexture2DArray;
-	this.setTexture3D = setTexture3D;
-	this.setTextureCube = setTextureCube;
-	this.rebindTextures = rebindTextures;
-	this.setupRenderTarget = setupRenderTarget;
-	this.updateRenderTargetMipmap = updateRenderTargetMipmap;
-	this.updateMultisampleRenderTarget = updateMultisampleRenderTarget;
-	this.setupDepthRenderbuffer = setupDepthRenderbuffer;
-	this.setupFrameBufferTexture = setupFrameBufferTexture;
-	this.useMultisampledRTT = useMultisampledRTT;
-
-}
-
-function WebGLUtils( gl, extensions, capabilities ) {
-
-	const isWebGL2 = capabilities.isWebGL2;
-
-	function convert( p, colorSpace = NoColorSpace ) {
-
-		let extension;
-
-		if ( p === UnsignedByteType ) return gl.UNSIGNED_BYTE;
-		if ( p === UnsignedShort4444Type ) return gl.UNSIGNED_SHORT_4_4_4_4;
-		if ( p === UnsignedShort5551Type ) return gl.UNSIGNED_SHORT_5_5_5_1;
-
-		if ( p === ByteType ) return gl.BYTE;
-		if ( p === ShortType ) return gl.SHORT;
-		if ( p === UnsignedShortType ) return gl.UNSIGNED_SHORT;
-		if ( p === IntType ) return gl.INT;
-		if ( p === UnsignedIntType ) return gl.UNSIGNED_INT;
-		if ( p === FloatType ) return gl.FLOAT;
-
-		if ( p === HalfFloatType ) {
-
-			if ( isWebGL2 ) return gl.HALF_FLOAT;
-
-			extension = extensions.get( 'OES_texture_half_float' );
-
-			if ( extension !== null ) {
-
-				return extension.HALF_FLOAT_OES;
-
-			} else {
-
-				return null;
-
-			}
-
-		}
-
-		if ( p === AlphaFormat ) return gl.ALPHA;
-		if ( p === RGBAFormat ) return gl.RGBA;
-		if ( p === LuminanceFormat ) return gl.LUMINANCE;
-		if ( p === LuminanceAlphaFormat ) return gl.LUMINANCE_ALPHA;
-		if ( p === DepthFormat ) return gl.DEPTH_COMPONENT;
-		if ( p === DepthStencilFormat ) return gl.DEPTH_STENCIL;
-
-		// WebGL 1 sRGB fallback
-
-		if ( p === _SRGBAFormat ) {
-
-			extension = extensions.get( 'EXT_sRGB' );
-
-			if ( extension !== null ) {
-
-				return extension.SRGB_ALPHA_EXT;
-
-			} else {
-
-				return null;
-
-			}
-
-		}
-
-		// WebGL2 formats.
-
-		if ( p === RedFormat ) return gl.RED;
-		if ( p === RedIntegerFormat ) return gl.RED_INTEGER;
-		if ( p === RGFormat ) return gl.RG;
-		if ( p === RGIntegerFormat ) return gl.RG_INTEGER;
-		if ( p === RGBAIntegerFormat ) return gl.RGBA_INTEGER;
-
-		// S3TC
-
-		if ( p === RGB_S3TC_DXT1_Format || p === RGBA_S3TC_DXT1_Format || p === RGBA_S3TC_DXT3_Format || p === RGBA_S3TC_DXT5_Format ) {
-
-			if ( colorSpace === SRGBColorSpace ) {
-
-				extension = extensions.get( 'WEBGL_compressed_texture_s3tc_srgb' );
-
-				if ( extension !== null ) {
-
-					if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_S3TC_DXT1_EXT;
-					if ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;
-					if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;
-					if ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT;
-
-				} else {
-
-					return null;
-
-				}
-
-			} else {
-
-				extension = extensions.get( 'WEBGL_compressed_texture_s3tc' );
-
-				if ( extension !== null ) {
-
-					if ( p === RGB_S3TC_DXT1_Format ) return extension.COMPRESSED_RGB_S3TC_DXT1_EXT;
-					if ( p === RGBA_S3TC_DXT1_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT1_EXT;
-					if ( p === RGBA_S3TC_DXT3_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT3_EXT;
-					if ( p === RGBA_S3TC_DXT5_Format ) return extension.COMPRESSED_RGBA_S3TC_DXT5_EXT;
-
-				} else {
-
-					return null;
-
-				}
-
-			}
-
-		}
-
-		// PVRTC
-
-		if ( p === RGB_PVRTC_4BPPV1_Format || p === RGB_PVRTC_2BPPV1_Format || p === RGBA_PVRTC_4BPPV1_Format || p === RGBA_PVRTC_2BPPV1_Format ) {
-
-			extension = extensions.get( 'WEBGL_compressed_texture_pvrtc' );
-
-			if ( extension !== null ) {
-
-				if ( p === RGB_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;
-				if ( p === RGB_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;
-				if ( p === RGBA_PVRTC_4BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;
-				if ( p === RGBA_PVRTC_2BPPV1_Format ) return extension.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG;
-
-			} else {
-
-				return null;
-
-			}
-
-		}
-
-		// ETC1
-
-		if ( p === RGB_ETC1_Format ) {
-
-			extension = extensions.get( 'WEBGL_compressed_texture_etc1' );
-
-			if ( extension !== null ) {
-
-				return extension.COMPRESSED_RGB_ETC1_WEBGL;
-
-			} else {
-
-				return null;
-
-			}
-
-		}
-
-		// ETC2
-
-		if ( p === RGB_ETC2_Format || p === RGBA_ETC2_EAC_Format ) {
-
-			extension = extensions.get( 'WEBGL_compressed_texture_etc' );
-
-			if ( extension !== null ) {
-
-				if ( p === RGB_ETC2_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ETC2 : extension.COMPRESSED_RGB8_ETC2;
-				if ( p === RGBA_ETC2_EAC_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC : extension.COMPRESSED_RGBA8_ETC2_EAC;
-
-			} else {
-
-				return null;
-
-			}
-
-		}
-
-		// ASTC
-
-		if ( p === RGBA_ASTC_4x4_Format || p === RGBA_ASTC_5x4_Format || p === RGBA_ASTC_5x5_Format ||
-			p === RGBA_ASTC_6x5_Format || p === RGBA_ASTC_6x6_Format || p === RGBA_ASTC_8x5_Format ||
-			p === RGBA_ASTC_8x6_Format || p === RGBA_ASTC_8x8_Format || p === RGBA_ASTC_10x5_Format ||
-			p === RGBA_ASTC_10x6_Format || p === RGBA_ASTC_10x8_Format || p === RGBA_ASTC_10x10_Format ||
-			p === RGBA_ASTC_12x10_Format || p === RGBA_ASTC_12x12_Format ) {
-
-			extension = extensions.get( 'WEBGL_compressed_texture_astc' );
-
-			if ( extension !== null ) {
-
-				if ( p === RGBA_ASTC_4x4_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR : extension.COMPRESSED_RGBA_ASTC_4x4_KHR;
-				if ( p === RGBA_ASTC_5x4_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR : extension.COMPRESSED_RGBA_ASTC_5x4_KHR;
-				if ( p === RGBA_ASTC_5x5_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR : extension.COMPRESSED_RGBA_ASTC_5x5_KHR;
-				if ( p === RGBA_ASTC_6x5_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR : extension.COMPRESSED_RGBA_ASTC_6x5_KHR;
-				if ( p === RGBA_ASTC_6x6_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR : extension.COMPRESSED_RGBA_ASTC_6x6_KHR;
-				if ( p === RGBA_ASTC_8x5_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR : extension.COMPRESSED_RGBA_ASTC_8x5_KHR;
-				if ( p === RGBA_ASTC_8x6_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR : extension.COMPRESSED_RGBA_ASTC_8x6_KHR;
-				if ( p === RGBA_ASTC_8x8_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR : extension.COMPRESSED_RGBA_ASTC_8x8_KHR;
-				if ( p === RGBA_ASTC_10x5_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR : extension.COMPRESSED_RGBA_ASTC_10x5_KHR;
-				if ( p === RGBA_ASTC_10x6_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR : extension.COMPRESSED_RGBA_ASTC_10x6_KHR;
-				if ( p === RGBA_ASTC_10x8_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR : extension.COMPRESSED_RGBA_ASTC_10x8_KHR;
-				if ( p === RGBA_ASTC_10x10_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR : extension.COMPRESSED_RGBA_ASTC_10x10_KHR;
-				if ( p === RGBA_ASTC_12x10_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR : extension.COMPRESSED_RGBA_ASTC_12x10_KHR;
-				if ( p === RGBA_ASTC_12x12_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR : extension.COMPRESSED_RGBA_ASTC_12x12_KHR;
-
-			} else {
-
-				return null;
-
-			}
-
-		}
-
-		// BPTC
-
-		if ( p === RGBA_BPTC_Format ) {
-
-			extension = extensions.get( 'EXT_texture_compression_bptc' );
-
-			if ( extension !== null ) {
-
-				if ( p === RGBA_BPTC_Format ) return ( colorSpace === SRGBColorSpace ) ? extension.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT : extension.COMPRESSED_RGBA_BPTC_UNORM_EXT;
-
-			} else {
-
-				return null;
-
-			}
-
-		}
-
-		// RGTC
-
-		if ( p === RED_RGTC1_Format || p === SIGNED_RED_RGTC1_Format || p === RED_GREEN_RGTC2_Format || p === SIGNED_RED_GREEN_RGTC2_Format ) {
-
-			extension = extensions.get( 'EXT_texture_compression_rgtc' );
-
-			if ( extension !== null ) {
-
-				if ( p === RGBA_BPTC_Format ) return extension.COMPRESSED_RED_RGTC1_EXT;
-				if ( p === SIGNED_RED_RGTC1_Format ) return extension.COMPRESSED_SIGNED_RED_RGTC1_EXT;
-				if ( p === RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_RED_GREEN_RGTC2_EXT;
-				if ( p === SIGNED_RED_GREEN_RGTC2_Format ) return extension.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT;
-
-			} else {
-
-				return null;
-
-			}
-
-		}
-
-		//
-
-		if ( p === UnsignedInt248Type ) {
-
-			if ( isWebGL2 ) return gl.UNSIGNED_INT_24_8;
-
-			extension = extensions.get( 'WEBGL_depth_texture' );
-
-			if ( extension !== null ) {
-
-				return extension.UNSIGNED_INT_24_8_WEBGL;
-
-			} else {
-
-				return null;
-
-			}
-
-		}
-
-		// if "p" can't be resolved, assume the user defines a WebGL constant as a string (fallback/workaround for packed RGB formats)
-
-		return ( gl[ p ] !== undefined ) ? gl[ p ] : null;
-
-	}
-
-	return { convert: convert };
-
-}
-
-class ArrayCamera extends PerspectiveCamera {
-
-	constructor( array = [] ) {
-
-		super();
-
-		this.isArrayCamera = true;
-
-		this.cameras = array;
-
-	}
-
-}
-
-class Group extends Object3D {
-
-	constructor() {
-
-		super();
-
-		this.isGroup = true;
-
-		this.type = 'Group';
-
-	}
-
-}
-
-const _moveEvent = { type: 'move' };
-
-class WebXRController {
-
-	constructor() {
-
-		this._targetRay = null;
-		this._grip = null;
-		this._hand = null;
-
-	}
-
-	getHandSpace() {
-
-		if ( this._hand === null ) {
-
-			this._hand = new Group();
-			this._hand.matrixAutoUpdate = false;
-			this._hand.visible = false;
-
-			this._hand.joints = {};
-			this._hand.inputState = { pinching: false };
-
-		}
-
-		return this._hand;
-
-	}
-
-	getTargetRaySpace() {
-
-		if ( this._targetRay === null ) {
-
-			this._targetRay = new Group();
-			this._targetRay.matrixAutoUpdate = false;
-			this._targetRay.visible = false;
-			this._targetRay.hasLinearVelocity = false;
-			this._targetRay.linearVelocity = new Vector3();
-			this._targetRay.hasAngularVelocity = false;
-			this._targetRay.angularVelocity = new Vector3();
-
-		}
-
-		return this._targetRay;
-
-	}
-
-	getGripSpace() {
-
-		if ( this._grip === null ) {
-
-			this._grip = new Group();
-			this._grip.matrixAutoUpdate = false;
-			this._grip.visible = false;
-			this._grip.hasLinearVelocity = false;
-			this._grip.linearVelocity = new Vector3();
-			this._grip.hasAngularVelocity = false;
-			this._grip.angularVelocity = new Vector3();
-
-		}
-
-		return this._grip;
-
-	}
-
-	dispatchEvent( event ) {
-
-		if ( this._targetRay !== null ) {
-
-			this._targetRay.dispatchEvent( event );
-
-		}
-
-		if ( this._grip !== null ) {
-
-			this._grip.dispatchEvent( event );
-
-		}
-
-		if ( this._hand !== null ) {
-
-			this._hand.dispatchEvent( event );
-
-		}
-
-		return this;
-
-	}
-
-	connect( inputSource ) {
-
-		if ( inputSource && inputSource.hand ) {
-
-			const hand = this._hand;
-
-			if ( hand ) {
-
-				for ( const inputjoint of inputSource.hand.values() ) {
-
-					// Initialize hand with joints when connected
-					this._getHandJoint( hand, inputjoint );
-
-				}
-
-			}
-
-		}
-
-		this.dispatchEvent( { type: 'connected', data: inputSource } );
-
-		return this;
-
-	}
-
-	disconnect( inputSource ) {
-
-		this.dispatchEvent( { type: 'disconnected', data: inputSource } );
-
-		if ( this._targetRay !== null ) {
-
-			this._targetRay.visible = false;
-
-		}
-
-		if ( this._grip !== null ) {
-
-			this._grip.visible = false;
-
-		}
-
-		if ( this._hand !== null ) {
-
-			this._hand.visible = false;
-
-		}
-
-		return this;
-
-	}
-
-	update( inputSource, frame, referenceSpace ) {
-
-		let inputPose = null;
-		let gripPose = null;
-		let handPose = null;
-
-		const targetRay = this._targetRay;
-		const grip = this._grip;
-		const hand = this._hand;
-
-		if ( inputSource && frame.session.visibilityState !== 'visible-blurred' ) {
-
-			if ( hand && inputSource.hand ) {
-
-				handPose = true;
-
-				for ( const inputjoint of inputSource.hand.values() ) {
-
-					// Update the joints groups with the XRJoint poses
-					const jointPose = frame.getJointPose( inputjoint, referenceSpace );
-
-					// The transform of this joint will be updated with the joint pose on each frame
-					const joint = this._getHandJoint( hand, inputjoint );
-
-					if ( jointPose !== null ) {
-
-						joint.matrix.fromArray( jointPose.transform.matrix );
-						joint.matrix.decompose( joint.position, joint.rotation, joint.scale );
-						joint.matrixWorldNeedsUpdate = true;
-						joint.jointRadius = jointPose.radius;
-
-					}
-
-					joint.visible = jointPose !== null;
-
-				}
-
-				// Custom events
-
-				// Check pinchz
-				const indexTip = hand.joints[ 'index-finger-tip' ];
-				const thumbTip = hand.joints[ 'thumb-tip' ];
-				const distance = indexTip.position.distanceTo( thumbTip.position );
-
-				const distanceToPinch = 0.02;
-				const threshold = 0.005;
-
-				if ( hand.inputState.pinching && distance > distanceToPinch + threshold ) {
-
-					hand.inputState.pinching = false;
-					this.dispatchEvent( {
-						type: 'pinchend',
-						handedness: inputSource.handedness,
-						target: this
-					} );
-
-				} else if ( ! hand.inputState.pinching && distance <= distanceToPinch - threshold ) {
-
-					hand.inputState.pinching = true;
-					this.dispatchEvent( {
-						type: 'pinchstart',
-						handedness: inputSource.handedness,
-						target: this
-					} );
-
-				}
-
-			} else {
-
-				if ( grip !== null && inputSource.gripSpace ) {
-
-					gripPose = frame.getPose( inputSource.gripSpace, referenceSpace );
-
-					if ( gripPose !== null ) {
-
-						grip.matrix.fromArray( gripPose.transform.matrix );
-						grip.matrix.decompose( grip.position, grip.rotation, grip.scale );
-						grip.matrixWorldNeedsUpdate = true;
-
-						if ( gripPose.linearVelocity ) {
-
-							grip.hasLinearVelocity = true;
-							grip.linearVelocity.copy( gripPose.linearVelocity );
-
-						} else {
-
-							grip.hasLinearVelocity = false;
-
-						}
-
-						if ( gripPose.angularVelocity ) {
-
-							grip.hasAngularVelocity = true;
-							grip.angularVelocity.copy( gripPose.angularVelocity );
-
-						} else {
-
-							grip.hasAngularVelocity = false;
-
-						}
-
-					}
-
-				}
-
-			}
-
-			if ( targetRay !== null ) {
-
-				inputPose = frame.getPose( inputSource.targetRaySpace, referenceSpace );
-
-				// Some runtimes (namely Vive Cosmos with Vive OpenXR Runtime) have only grip space and ray space is equal to it
-				if ( inputPose === null && gripPose !== null ) {
-
-					inputPose = gripPose;
-
-				}
-
-				if ( inputPose !== null ) {
-
-					targetRay.matrix.fromArray( inputPose.transform.matrix );
-					targetRay.matrix.decompose( targetRay.position, targetRay.rotation, targetRay.scale );
-					targetRay.matrixWorldNeedsUpdate = true;
-
-					if ( inputPose.linearVelocity ) {
-
-						targetRay.hasLinearVelocity = true;
-						targetRay.linearVelocity.copy( inputPose.linearVelocity );
-
-					} else {
-
-						targetRay.hasLinearVelocity = false;
-
-					}
-
-					if ( inputPose.angularVelocity ) {
-
-						targetRay.hasAngularVelocity = true;
-						targetRay.angularVelocity.copy( inputPose.angularVelocity );
-
-					} else {
-
-						targetRay.hasAngularVelocity = false;
-
-					}
-
-					this.dispatchEvent( _moveEvent );
-
-				}
-
-			}
-
-
-		}
-
-		if ( targetRay !== null ) {
-
-			targetRay.visible = ( inputPose !== null );
-
-		}
-
-		if ( grip !== null ) {
-
-			grip.visible = ( gripPose !== null );
-
-		}
-
-		if ( hand !== null ) {
-
-			hand.visible = ( handPose !== null );
-
-		}
-
-		return this;
-
-	}
-
-	// private method
-
-	_getHandJoint( hand, inputjoint ) {
-
-		if ( hand.joints[ inputjoint.jointName ] === undefined ) {
-
-			const joint = new Group();
-			joint.matrixAutoUpdate = false;
-			joint.visible = false;
-			hand.joints[ inputjoint.jointName ] = joint;
-
-			hand.add( joint );
-
-		}
-
-		return hand.joints[ inputjoint.jointName ];
-
-	}
-
-}
-
-class DepthTexture extends Texture {
-
-	constructor( width, height, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, format ) {
-
-		format = format !== undefined ? format : DepthFormat;
-
-		if ( format !== DepthFormat && format !== DepthStencilFormat ) {
-
-			throw new Error( 'DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat' );
-
-		}
-
-		if ( type === undefined && format === DepthFormat ) type = UnsignedIntType;
-		if ( type === undefined && format === DepthStencilFormat ) type = UnsignedInt248Type;
-
-		super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
-
-		this.isDepthTexture = true;
-
-		this.image = { width: width, height: height };
-
-		this.magFilter = magFilter !== undefined ? magFilter : NearestFilter;
-		this.minFilter = minFilter !== undefined ? minFilter : NearestFilter;
-
-		this.flipY = false;
-		this.generateMipmaps = false;
-
-	}
-
-
-}
-
-class WebXRManager extends EventDispatcher {
-
-	constructor( renderer, gl ) {
-
-		super();
-
-		const scope = this;
-
-		let session = null;
-
-		let framebufferScaleFactor = 1.0;
-
-		let referenceSpace = null;
-		let referenceSpaceType = 'local-floor';
-		// Set default foveation to maximum.
-		let foveation = 1.0;
-		let customReferenceSpace = null;
-
-		let pose = null;
-		let glBinding = null;
-		let glProjLayer = null;
-		let glBaseLayer = null;
-		let xrFrame = null;
-		const attributes = gl.getContextAttributes();
-		let initialRenderTarget = null;
-		let newRenderTarget = null;
-
-		const controllers = [];
-		const controllerInputSources = [];
-
-		const planes = new Set();
-		const planesLastChangedTimes = new Map();
-
-		//
-
-		const cameraL = new PerspectiveCamera();
-		cameraL.layers.enable( 1 );
-		cameraL.viewport = new Vector4();
-
-		const cameraR = new PerspectiveCamera();
-		cameraR.layers.enable( 2 );
-		cameraR.viewport = new Vector4();
-
-		const cameras = [ cameraL, cameraR ];
-
-		const cameraVR = new ArrayCamera();
-		cameraVR.layers.enable( 1 );
-		cameraVR.layers.enable( 2 );
-
-		let _currentDepthNear = null;
-		let _currentDepthFar = null;
-
-		//
-
-		this.cameraAutoUpdate = true;
-		this.enabled = false;
-
-		this.isPresenting = false;
-
-		this.getController = function ( index ) {
-
-			let controller = controllers[ index ];
-
-			if ( controller === undefined ) {
-
-				controller = new WebXRController();
-				controllers[ index ] = controller;
-
-			}
-
-			return controller.getTargetRaySpace();
-
-		};
-
-		this.getControllerGrip = function ( index ) {
-
-			let controller = controllers[ index ];
-
-			if ( controller === undefined ) {
-
-				controller = new WebXRController();
-				controllers[ index ] = controller;
-
-			}
-
-			return controller.getGripSpace();
-
-		};
-
-		this.getHand = function ( index ) {
-
-			let controller = controllers[ index ];
-
-			if ( controller === undefined ) {
-
-				controller = new WebXRController();
-				controllers[ index ] = controller;
-
-			}
-
-			return controller.getHandSpace();
-
-		};
-
-		//
-
-		function onSessionEvent( event ) {
-
-			const controllerIndex = controllerInputSources.indexOf( event.inputSource );
-
-			if ( controllerIndex === - 1 ) {
-
-				return;
-
-			}
-
-			const controller = controllers[ controllerIndex ];
-
-			if ( controller !== undefined ) {
-
-				controller.update( event.inputSource, event.frame, customReferenceSpace || referenceSpace );
-				controller.dispatchEvent( { type: event.type, data: event.inputSource } );
-
-			}
-
-		}
-
-		function onSessionEnd() {
-
-			session.removeEventListener( 'select', onSessionEvent );
-			session.removeEventListener( 'selectstart', onSessionEvent );
-			session.removeEventListener( 'selectend', onSessionEvent );
-			session.removeEventListener( 'squeeze', onSessionEvent );
-			session.removeEventListener( 'squeezestart', onSessionEvent );
-			session.removeEventListener( 'squeezeend', onSessionEvent );
-			session.removeEventListener( 'end', onSessionEnd );
-			session.removeEventListener( 'inputsourceschange', onInputSourcesChange );
-
-			for ( let i = 0; i < controllers.length; i ++ ) {
-
-				const inputSource = controllerInputSources[ i ];
-
-				if ( inputSource === null ) continue;
-
-				controllerInputSources[ i ] = null;
-
-				controllers[ i ].disconnect( inputSource );
-
-			}
-
-			_currentDepthNear = null;
-			_currentDepthFar = null;
-
-			// restore framebuffer/rendering state
-
-			renderer.setRenderTarget( initialRenderTarget );
-
-			glBaseLayer = null;
-			glProjLayer = null;
-			glBinding = null;
-			session = null;
-			newRenderTarget = null;
-
-			//
-
-			animation.stop();
-
-			scope.isPresenting = false;
-
-			scope.dispatchEvent( { type: 'sessionend' } );
-
-		}
-
-		this.setFramebufferScaleFactor = function ( value ) {
-
-			framebufferScaleFactor = value;
-
-			if ( scope.isPresenting === true ) {
-
-				console.warn( 'THREE.WebXRManager: Cannot change framebuffer scale while presenting.' );
-
-			}
-
-		};
-
-		this.setReferenceSpaceType = function ( value ) {
-
-			referenceSpaceType = value;
-
-			if ( scope.isPresenting === true ) {
-
-				console.warn( 'THREE.WebXRManager: Cannot change reference space type while presenting.' );
-
-			}
-
-		};
-
-		this.getReferenceSpace = function () {
-
-			return customReferenceSpace || referenceSpace;
-
-		};
-
-		this.setReferenceSpace = function ( space ) {
-
-			customReferenceSpace = space;
-
-		};
-
-		this.getBaseLayer = function () {
-
-			return glProjLayer !== null ? glProjLayer : glBaseLayer;
-
-		};
-
-		this.getBinding = function () {
-
-			return glBinding;
-
-		};
-
-		this.getFrame = function () {
-
-			return xrFrame;
-
-		};
-
-		this.getSession = function () {
-
-			return session;
-
-		};
-
-		this.setSession = async function ( value ) {
-
-			session = value;
-
-			if ( session !== null ) {
-
-				initialRenderTarget = renderer.getRenderTarget();
-
-				session.addEventListener( 'select', onSessionEvent );
-				session.addEventListener( 'selectstart', onSessionEvent );
-				session.addEventListener( 'selectend', onSessionEvent );
-				session.addEventListener( 'squeeze', onSessionEvent );
-				session.addEventListener( 'squeezestart', onSessionEvent );
-				session.addEventListener( 'squeezeend', onSessionEvent );
-				session.addEventListener( 'end', onSessionEnd );
-				session.addEventListener( 'inputsourceschange', onInputSourcesChange );
-
-				if ( attributes.xrCompatible !== true ) {
-
-					await gl.makeXRCompatible();
-
-				}
-
-				if ( ( session.renderState.layers === undefined ) || ( renderer.capabilities.isWebGL2 === false ) ) {
-
-					const layerInit = {
-						antialias: ( session.renderState.layers === undefined ) ? attributes.antialias : true,
-						alpha: true,
-						depth: attributes.depth,
-						stencil: attributes.stencil,
-						framebufferScaleFactor: framebufferScaleFactor
-					};
-
-					glBaseLayer = new XRWebGLLayer( session, gl, layerInit );
-
-					session.updateRenderState( { baseLayer: glBaseLayer } );
-
-					newRenderTarget = new WebGLRenderTarget(
-						glBaseLayer.framebufferWidth,
-						glBaseLayer.framebufferHeight,
-						{
-							format: RGBAFormat,
-							type: UnsignedByteType,
-							colorSpace: renderer.outputColorSpace,
-							stencilBuffer: attributes.stencil
-						}
-					);
-
-				} else {
-
-					let depthFormat = null;
-					let depthType = null;
-					let glDepthFormat = null;
-
-					if ( attributes.depth ) {
-
-						glDepthFormat = attributes.stencil ? gl.DEPTH24_STENCIL8 : gl.DEPTH_COMPONENT24;
-						depthFormat = attributes.stencil ? DepthStencilFormat : DepthFormat;
-						depthType = attributes.stencil ? UnsignedInt248Type : UnsignedIntType;
-
-					}
-
-					const projectionlayerInit = {
-						colorFormat: gl.RGBA8,
-						depthFormat: glDepthFormat,
-						scaleFactor: framebufferScaleFactor
-					};
-
-					glBinding = new XRWebGLBinding( session, gl );
-
-					glProjLayer = glBinding.createProjectionLayer( projectionlayerInit );
-
-					session.updateRenderState( { layers: [ glProjLayer ] } );
-
-					newRenderTarget = new WebGLRenderTarget(
-						glProjLayer.textureWidth,
-						glProjLayer.textureHeight,
-						{
-							format: RGBAFormat,
-							type: UnsignedByteType,
-							depthTexture: new DepthTexture( glProjLayer.textureWidth, glProjLayer.textureHeight, depthType, undefined, undefined, undefined, undefined, undefined, undefined, depthFormat ),
-							stencilBuffer: attributes.stencil,
-							colorSpace: renderer.outputColorSpace,
-							samples: attributes.antialias ? 4 : 0
-						} );
-
-					const renderTargetProperties = renderer.properties.get( newRenderTarget );
-					renderTargetProperties.__ignoreDepthValues = glProjLayer.ignoreDepthValues;
-
-				}
-
-				newRenderTarget.isXRRenderTarget = true; // TODO Remove this when possible, see #23278
-
-				this.setFoveation( foveation );
-
-				customReferenceSpace = null;
-				referenceSpace = await session.requestReferenceSpace( referenceSpaceType );
-
-				animation.setContext( session );
-				animation.start();
-
-				scope.isPresenting = true;
-
-				scope.dispatchEvent( { type: 'sessionstart' } );
-
-			}
-
-		};
-
-		this.getEnvironmentBlendMode = function () {
-
-			if ( session !== null ) {
-
-				return session.environmentBlendMode;
-
-			}
-
-		};
-
-		function onInputSourcesChange( event ) {
-
-			// Notify disconnected
-
-			for ( let i = 0; i < event.removed.length; i ++ ) {
-
-				const inputSource = event.removed[ i ];
-				const index = controllerInputSources.indexOf( inputSource );
-
-				if ( index >= 0 ) {
-
-					controllerInputSources[ index ] = null;
-					controllers[ index ].disconnect( inputSource );
-
-				}
-
-			}
-
-			// Notify connected
-
-			for ( let i = 0; i < event.added.length; i ++ ) {
-
-				const inputSource = event.added[ i ];
-
-				let controllerIndex = controllerInputSources.indexOf( inputSource );
-
-				if ( controllerIndex === - 1 ) {
-
-					// Assign input source a controller that currently has no input source
-
-					for ( let i = 0; i < controllers.length; i ++ ) {
-
-						if ( i >= controllerInputSources.length ) {
-
-							controllerInputSources.push( inputSource );
-							controllerIndex = i;
-							break;
-
-						} else if ( controllerInputSources[ i ] === null ) {
-
-							controllerInputSources[ i ] = inputSource;
-							controllerIndex = i;
-							break;
-
-						}
-
-					}
-
-					// If all controllers do currently receive input we ignore new ones
-
-					if ( controllerIndex === - 1 ) break;
-
-				}
-
-				const controller = controllers[ controllerIndex ];
-
-				if ( controller ) {
-
-					controller.connect( inputSource );
-
-				}
-
-			}
-
-		}
-
-		//
-
-		const cameraLPos = new Vector3();
-		const cameraRPos = new Vector3();
-
-		/**
-		 * Assumes 2 cameras that are parallel and share an X-axis, and that
-		 * the cameras' projection and world matrices have already been set.
-		 * And that near and far planes are identical for both cameras.
-		 * Visualization of this technique: https://computergraphics.stackexchange.com/a/4765
-		 */
-		function setProjectionFromUnion( camera, cameraL, cameraR ) {
-
-			cameraLPos.setFromMatrixPosition( cameraL.matrixWorld );
-			cameraRPos.setFromMatrixPosition( cameraR.matrixWorld );
-
-			const ipd = cameraLPos.distanceTo( cameraRPos );
-
-			const projL = cameraL.projectionMatrix.elements;
-			const projR = cameraR.projectionMatrix.elements;
-
-			// VR systems will have identical far and near planes, and
-			// most likely identical top and bottom frustum extents.
-			// Use the left camera for these values.
-			const near = projL[ 14 ] / ( projL[ 10 ] - 1 );
-			const far = projL[ 14 ] / ( projL[ 10 ] + 1 );
-			const topFov = ( projL[ 9 ] + 1 ) / projL[ 5 ];
-			const bottomFov = ( projL[ 9 ] - 1 ) / projL[ 5 ];
-
-			const leftFov = ( projL[ 8 ] - 1 ) / projL[ 0 ];
-			const rightFov = ( projR[ 8 ] + 1 ) / projR[ 0 ];
-			const left = near * leftFov;
-			const right = near * rightFov;
-
-			// Calculate the new camera's position offset from the
-			// left camera. xOffset should be roughly half `ipd`.
-			const zOffset = ipd / ( - leftFov + rightFov );
-			const xOffset = zOffset * - leftFov;
-
-			// TODO: Better way to apply this offset?
-			cameraL.matrixWorld.decompose( camera.position, camera.quaternion, camera.scale );
-			camera.translateX( xOffset );
-			camera.translateZ( zOffset );
-			camera.matrixWorld.compose( camera.position, camera.quaternion, camera.scale );
-			camera.matrixWorldInverse.copy( camera.matrixWorld ).invert();
-
-			// Find the union of the frustum values of the cameras and scale
-			// the values so that the near plane's position does not change in world space,
-			// although must now be relative to the new union camera.
-			const near2 = near + zOffset;
-			const far2 = far + zOffset;
-			const left2 = left - xOffset;
-			const right2 = right + ( ipd - xOffset );
-			const top2 = topFov * far / far2 * near2;
-			const bottom2 = bottomFov * far / far2 * near2;
-
-			camera.projectionMatrix.makePerspective( left2, right2, top2, bottom2, near2, far2 );
-			camera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();
-
-		}
-
-		function updateCamera( camera, parent ) {
-
-			if ( parent === null ) {
-
-				camera.matrixWorld.copy( camera.matrix );
-
-			} else {
-
-				camera.matrixWorld.multiplyMatrices( parent.matrixWorld, camera.matrix );
-
-			}
-
-			camera.matrixWorldInverse.copy( camera.matrixWorld ).invert();
-
-		}
-
-		this.updateCamera = function ( camera ) {
-
-			if ( session === null ) return;
-
-			cameraVR.near = cameraR.near = cameraL.near = camera.near;
-			cameraVR.far = cameraR.far = cameraL.far = camera.far;
-
-			if ( _currentDepthNear !== cameraVR.near || _currentDepthFar !== cameraVR.far ) {
-
-				// Note that the new renderState won't apply until the next frame. See #18320
-
-				session.updateRenderState( {
-					depthNear: cameraVR.near,
-					depthFar: cameraVR.far
-				} );
-
-				_currentDepthNear = cameraVR.near;
-				_currentDepthFar = cameraVR.far;
-
-			}
-
-			const parent = camera.parent;
-			const cameras = cameraVR.cameras;
-
-			updateCamera( cameraVR, parent );
-
-			for ( let i = 0; i < cameras.length; i ++ ) {
-
-				updateCamera( cameras[ i ], parent );
-
-			}
-
-			// update projection matrix for proper view frustum culling
-
-			if ( cameras.length === 2 ) {
-
-				setProjectionFromUnion( cameraVR, cameraL, cameraR );
-
-			} else {
-
-				// assume single camera setup (AR)
-
-				cameraVR.projectionMatrix.copy( cameraL.projectionMatrix );
-
-			}
-
-			// update user camera and its children
-
-			updateUserCamera( camera, cameraVR, parent );
-
-		};
-
-		function updateUserCamera( camera, cameraVR, parent ) {
-
-			if ( parent === null ) {
-
-				camera.matrix.copy( cameraVR.matrixWorld );
-
-			} else {
-
-				camera.matrix.copy( parent.matrixWorld );
-				camera.matrix.invert();
-				camera.matrix.multiply( cameraVR.matrixWorld );
-
-			}
-
-			camera.matrix.decompose( camera.position, camera.quaternion, camera.scale );
-			camera.updateMatrixWorld( true );
-
-			const children = camera.children;
-
-			for ( let i = 0, l = children.length; i < l; i ++ ) {
-
-				children[ i ].updateMatrixWorld( true );
-
-			}
-
-			camera.projectionMatrix.copy( cameraVR.projectionMatrix );
-			camera.projectionMatrixInverse.copy( cameraVR.projectionMatrixInverse );
-
-			if ( camera.isPerspectiveCamera ) {
-
-				camera.fov = RAD2DEG * 2 * Math.atan( 1 / camera.projectionMatrix.elements[ 5 ] );
-				camera.zoom = 1;
-
-			}
-
-		}
-
-		this.getCamera = function () {
-
-			return cameraVR;
-
-		};
-
-		this.getFoveation = function () {
-
-			if ( glProjLayer === null && glBaseLayer === null ) {
-
-				return undefined;
-
-			}
-
-			return foveation;
-
-		};
-
-		this.setFoveation = function ( value ) {
-
-			// 0 = no foveation = full resolution
-			// 1 = maximum foveation = the edges render at lower resolution
-
-			foveation = value;
-
-			if ( glProjLayer !== null ) {
-
-				glProjLayer.fixedFoveation = value;
-
-			}
-
-			if ( glBaseLayer !== null && glBaseLayer.fixedFoveation !== undefined ) {
-
-				glBaseLayer.fixedFoveation = value;
-
-			}
-
-		};
-
-		this.getPlanes = function () {
-
-			return planes;
-
-		};
-
-		// Animation Loop
-
-		let onAnimationFrameCallback = null;
-
-		function onAnimationFrame( time, frame ) {
-
-			pose = frame.getViewerPose( customReferenceSpace || referenceSpace );
-			xrFrame = frame;
-
-			if ( pose !== null ) {
-
-				const views = pose.views;
-
-				if ( glBaseLayer !== null ) {
-
-					renderer.setRenderTargetFramebuffer( newRenderTarget, glBaseLayer.framebuffer );
-					renderer.setRenderTarget( newRenderTarget );
-
-				}
-
-				let cameraVRNeedsUpdate = false;
-
-				// check if it's necessary to rebuild cameraVR's camera list
-
-				if ( views.length !== cameraVR.cameras.length ) {
-
-					cameraVR.cameras.length = 0;
-					cameraVRNeedsUpdate = true;
-
-				}
-
-				for ( let i = 0; i < views.length; i ++ ) {
-
-					const view = views[ i ];
-
-					let viewport = null;
-
-					if ( glBaseLayer !== null ) {
-
-						viewport = glBaseLayer.getViewport( view );
-
-					} else {
-
-						const glSubImage = glBinding.getViewSubImage( glProjLayer, view );
-						viewport = glSubImage.viewport;
-
-						// For side-by-side projection, we only produce a single texture for both eyes.
-						if ( i === 0 ) {
-
-							renderer.setRenderTargetTextures(
-								newRenderTarget,
-								glSubImage.colorTexture,
-								glProjLayer.ignoreDepthValues ? undefined : glSubImage.depthStencilTexture );
-
-							renderer.setRenderTarget( newRenderTarget );
-
-						}
-
-					}
-
-					let camera = cameras[ i ];
-
-					if ( camera === undefined ) {
-
-						camera = new PerspectiveCamera();
-						camera.layers.enable( i );
-						camera.viewport = new Vector4();
-						cameras[ i ] = camera;
-
-					}
-
-					camera.matrix.fromArray( view.transform.matrix );
-					camera.matrix.decompose( camera.position, camera.quaternion, camera.scale );
-					camera.projectionMatrix.fromArray( view.projectionMatrix );
-					camera.projectionMatrixInverse.copy( camera.projectionMatrix ).invert();
-					camera.viewport.set( viewport.x, viewport.y, viewport.width, viewport.height );
-
-					if ( i === 0 ) {
-
-						cameraVR.matrix.copy( camera.matrix );
-						cameraVR.matrix.decompose( cameraVR.position, cameraVR.quaternion, cameraVR.scale );
-
-					}
-
-					if ( cameraVRNeedsUpdate === true ) {
-
-						cameraVR.cameras.push( camera );
-
-					}
-
-				}
-
-			}
-
-			//
-
-			for ( let i = 0; i < controllers.length; i ++ ) {
-
-				const inputSource = controllerInputSources[ i ];
-				const controller = controllers[ i ];
-
-				if ( inputSource !== null && controller !== undefined ) {
-
-					controller.update( inputSource, frame, customReferenceSpace || referenceSpace );
-
-				}
-
-			}
-
-			if ( onAnimationFrameCallback ) onAnimationFrameCallback( time, frame );
-
-			if ( frame.detectedPlanes ) {
-
-				scope.dispatchEvent( { type: 'planesdetected', data: frame.detectedPlanes } );
-
-				let planesToRemove = null;
-
-				for ( const plane of planes ) {
-
-					if ( ! frame.detectedPlanes.has( plane ) ) {
-
-						if ( planesToRemove === null ) {
-
-							planesToRemove = [];
-
-						}
-
-						planesToRemove.push( plane );
-
-					}
-
-				}
-
-				if ( planesToRemove !== null ) {
-
-					for ( const plane of planesToRemove ) {
-
-						planes.delete( plane );
-						planesLastChangedTimes.delete( plane );
-						scope.dispatchEvent( { type: 'planeremoved', data: plane } );
-
-					}
-
-				}
-
-				for ( const plane of frame.detectedPlanes ) {
-
-					if ( ! planes.has( plane ) ) {
-
-						planes.add( plane );
-						planesLastChangedTimes.set( plane, frame.lastChangedTime );
-						scope.dispatchEvent( { type: 'planeadded', data: plane } );
-
-					} else {
-
-						const lastKnownTime = planesLastChangedTimes.get( plane );
-
-						if ( plane.lastChangedTime > lastKnownTime ) {
-
-							planesLastChangedTimes.set( plane, plane.lastChangedTime );
-							scope.dispatchEvent( { type: 'planechanged', data: plane } );
-
-						}
-
-					}
-
-				}
-
-			}
-
-			xrFrame = null;
-
-		}
-
-		const animation = new WebGLAnimation();
-
-		animation.setAnimationLoop( onAnimationFrame );
-
-		this.setAnimationLoop = function ( callback ) {
-
-			onAnimationFrameCallback = callback;
-
-		};
-
-		this.dispose = function () {};
-
-	}
-
-}
-
-function WebGLMaterials( renderer, properties ) {
-
-	function refreshTransformUniform( map, uniform ) {
-
-		if ( map.matrixAutoUpdate === true ) {
-
-			map.updateMatrix();
-
-		}
-
-		uniform.value.copy( map.matrix );
-
-	}
-
-	function refreshFogUniforms( uniforms, fog ) {
-
-		fog.color.getRGB( uniforms.fogColor.value, getUnlitUniformColorSpace( renderer ) );
-
-		if ( fog.isFog ) {
-
-			uniforms.fogNear.value = fog.near;
-			uniforms.fogFar.value = fog.far;
-
-		} else if ( fog.isFogExp2 ) {
-
-			uniforms.fogDensity.value = fog.density;
-
-		}
-
-	}
-
-	function refreshMaterialUniforms( uniforms, material, pixelRatio, height, transmissionRenderTarget ) {
-
-		if ( material.isMeshBasicMaterial ) {
-
-			refreshUniformsCommon( uniforms, material );
-
-		} else if ( material.isMeshLambertMaterial ) {
-
-			refreshUniformsCommon( uniforms, material );
-
-		} else if ( material.isMeshToonMaterial ) {
-
-			refreshUniformsCommon( uniforms, material );
-			refreshUniformsToon( uniforms, material );
-
-		} else if ( material.isMeshPhongMaterial ) {
-
-			refreshUniformsCommon( uniforms, material );
-			refreshUniformsPhong( uniforms, material );
-
-		} else if ( material.isMeshStandardMaterial ) {
-
-			refreshUniformsCommon( uniforms, material );
-			refreshUniformsStandard( uniforms, material );
-
-			if ( material.isMeshPhysicalMaterial ) {
-
-				refreshUniformsPhysical( uniforms, material, transmissionRenderTarget );
-
-			}
-
-		} else if ( material.isMeshMatcapMaterial ) {
-
-			refreshUniformsCommon( uniforms, material );
-			refreshUniformsMatcap( uniforms, material );
-
-		} else if ( material.isMeshDepthMaterial ) {
-
-			refreshUniformsCommon( uniforms, material );
-
-		} else if ( material.isMeshDistanceMaterial ) {
-
-			refreshUniformsCommon( uniforms, material );
-			refreshUniformsDistance( uniforms, material );
-
-		} else if ( material.isMeshNormalMaterial ) {
-
-			refreshUniformsCommon( uniforms, material );
-
-		} else if ( material.isLineBasicMaterial ) {
-
-			refreshUniformsLine( uniforms, material );
-
-			if ( material.isLineDashedMaterial ) {
-
-				refreshUniformsDash( uniforms, material );
-
-			}
-
-		} else if ( material.isPointsMaterial ) {
-
-			refreshUniformsPoints( uniforms, material, pixelRatio, height );
-
-		} else if ( material.isSpriteMaterial ) {
-
-			refreshUniformsSprites( uniforms, material );
-
-		} else if ( material.isShadowMaterial ) {
-
-			uniforms.color.value.copy( material.color );
-			uniforms.opacity.value = material.opacity;
-
-		} else if ( material.isShaderMaterial ) {
-
-			material.uniformsNeedUpdate = false; // #15581
-
-		}
-
-	}
-
-	function refreshUniformsCommon( uniforms, material ) {
-
-		uniforms.opacity.value = material.opacity;
-
-		if ( material.color ) {
-
-			uniforms.diffuse.value.copy( material.color );
-
-		}
-
-		if ( material.emissive ) {
-
-			uniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );
-
-		}
-
-		if ( material.map ) {
-
-			uniforms.map.value = material.map;
-
-			refreshTransformUniform( material.map, uniforms.mapTransform );
-
-		}
-
-		if ( material.alphaMap ) {
-
-			uniforms.alphaMap.value = material.alphaMap;
-
-			refreshTransformUniform( material.alphaMap, uniforms.alphaMapTransform );
-
-		}
-
-		if ( material.bumpMap ) {
-
-			uniforms.bumpMap.value = material.bumpMap;
-
-			refreshTransformUniform( material.bumpMap, uniforms.bumpMapTransform );
-
-			uniforms.bumpScale.value = material.bumpScale;
-
-			if ( material.side === BackSide ) {
-
-				uniforms.bumpScale.value *= - 1;
-
-			}
-
-		}
-
-		if ( material.normalMap ) {
-
-			uniforms.normalMap.value = material.normalMap;
-
-			refreshTransformUniform( material.normalMap, uniforms.normalMapTransform );
-
-			uniforms.normalScale.value.copy( material.normalScale );
-
-			if ( material.side === BackSide ) {
-
-				uniforms.normalScale.value.negate();
-
-			}
-
-		}
-
-		if ( material.displacementMap ) {
-
-			uniforms.displacementMap.value = material.displacementMap;
-
-			refreshTransformUniform( material.displacementMap, uniforms.displacementMapTransform );
-
-			uniforms.displacementScale.value = material.displacementScale;
-			uniforms.displacementBias.value = material.displacementBias;
-
-		}
-
-		if ( material.emissiveMap ) {
-
-			uniforms.emissiveMap.value = material.emissiveMap;
-
-			refreshTransformUniform( material.emissiveMap, uniforms.emissiveMapTransform );
-
-		}
-
-		if ( material.specularMap ) {
-
-			uniforms.specularMap.value = material.specularMap;
-
-			refreshTransformUniform( material.specularMap, uniforms.specularMapTransform );
-
-		}
-
-		if ( material.alphaTest > 0 ) {
-
-			uniforms.alphaTest.value = material.alphaTest;
-
-		}
-
-		const envMap = properties.get( material ).envMap;
-
-		if ( envMap ) {
-
-			uniforms.envMap.value = envMap;
-
-			uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;
-
-			uniforms.reflectivity.value = material.reflectivity;
-			uniforms.ior.value = material.ior;
-			uniforms.refractionRatio.value = material.refractionRatio;
-
-		}
-
-		if ( material.lightMap ) {
-
-			uniforms.lightMap.value = material.lightMap;
-
-			// artist-friendly light intensity scaling factor
-			const scaleFactor = ( renderer.useLegacyLights === true ) ? Math.PI : 1;
-
-			uniforms.lightMapIntensity.value = material.lightMapIntensity * scaleFactor;
-
-			refreshTransformUniform( material.lightMap, uniforms.lightMapTransform );
-
-		}
-
-		if ( material.aoMap ) {
-
-			uniforms.aoMap.value = material.aoMap;
-			uniforms.aoMapIntensity.value = material.aoMapIntensity;
-
-			refreshTransformUniform( material.aoMap, uniforms.aoMapTransform );
-
-		}
-
-	}
-
-	function refreshUniformsLine( uniforms, material ) {
-
-		uniforms.diffuse.value.copy( material.color );
-		uniforms.opacity.value = material.opacity;
-
-		if ( material.map ) {
-
-			uniforms.map.value = material.map;
-
-			refreshTransformUniform( material.map, uniforms.mapTransform );
-
-		}
-
-	}
-
-	function refreshUniformsDash( uniforms, material ) {
-
-		uniforms.dashSize.value = material.dashSize;
-		uniforms.totalSize.value = material.dashSize + material.gapSize;
-		uniforms.scale.value = material.scale;
-
-	}
-
-	function refreshUniformsPoints( uniforms, material, pixelRatio, height ) {
-
-		uniforms.diffuse.value.copy( material.color );
-		uniforms.opacity.value = material.opacity;
-		uniforms.size.value = material.size * pixelRatio;
-		uniforms.scale.value = height * 0.5;
-
-		if ( material.map ) {
-
-			uniforms.map.value = material.map;
-
-			refreshTransformUniform( material.map, uniforms.uvTransform );
-
-		}
-
-		if ( material.alphaMap ) {
-
-			uniforms.alphaMap.value = material.alphaMap;
-
-		}
-
-		if ( material.alphaTest > 0 ) {
-
-			uniforms.alphaTest.value = material.alphaTest;
-
-		}
-
-	}
-
-	function refreshUniformsSprites( uniforms, material ) {
-
-		uniforms.diffuse.value.copy( material.color );
-		uniforms.opacity.value = material.opacity;
-		uniforms.rotation.value = material.rotation;
-
-		if ( material.map ) {
-
-			uniforms.map.value = material.map;
-
-			refreshTransformUniform( material.map, uniforms.mapTransform );
-
-		}
-
-		if ( material.alphaMap ) {
-
-			uniforms.alphaMap.value = material.alphaMap;
-
-		}
-
-		if ( material.alphaTest > 0 ) {
-
-			uniforms.alphaTest.value = material.alphaTest;
-
-		}
-
-	}
-
-	function refreshUniformsPhong( uniforms, material ) {
-
-		uniforms.specular.value.copy( material.specular );
-		uniforms.shininess.value = Math.max( material.shininess, 1e-4 ); // to prevent pow( 0.0, 0.0 )
-
-	}
-
-	function refreshUniformsToon( uniforms, material ) {
-
-		if ( material.gradientMap ) {
-
-			uniforms.gradientMap.value = material.gradientMap;
-
-		}
-
-	}
-
-	function refreshUniformsStandard( uniforms, material ) {
-
-		uniforms.metalness.value = material.metalness;
-
-		if ( material.metalnessMap ) {
-
-			uniforms.metalnessMap.value = material.metalnessMap;
-
-			refreshTransformUniform( material.metalnessMap, uniforms.metalnessMapTransform );
-
-		}
-
-		uniforms.roughness.value = material.roughness;
-
-		if ( material.roughnessMap ) {
-
-			uniforms.roughnessMap.value = material.roughnessMap;
-
-			refreshTransformUniform( material.roughnessMap, uniforms.roughnessMapTransform );
-
-		}
-
-		const envMap = properties.get( material ).envMap;
-
-		if ( envMap ) {
-
-			//uniforms.envMap.value = material.envMap; // part of uniforms common
-			uniforms.envMapIntensity.value = material.envMapIntensity;
-
-		}
-
-	}
-
-	function refreshUniformsPhysical( uniforms, material, transmissionRenderTarget ) {
-
-		uniforms.ior.value = material.ior; // also part of uniforms common
-
-		if ( material.sheen > 0 ) {
-
-			uniforms.sheenColor.value.copy( material.sheenColor ).multiplyScalar( material.sheen );
-
-			uniforms.sheenRoughness.value = material.sheenRoughness;
-
-			if ( material.sheenColorMap ) {
-
-				uniforms.sheenColorMap.value = material.sheenColorMap;
-
-				refreshTransformUniform( material.sheenColorMap, uniforms.sheenColorMapTransform );
-
-			}
-
-			if ( material.sheenRoughnessMap ) {
-
-				uniforms.sheenRoughnessMap.value = material.sheenRoughnessMap;
-
-				refreshTransformUniform( material.sheenRoughnessMap, uniforms.sheenRoughnessMapTransform );
-
-			}
-
-		}
-
-		if ( material.clearcoat > 0 ) {
-
-			uniforms.clearcoat.value = material.clearcoat;
-			uniforms.clearcoatRoughness.value = material.clearcoatRoughness;
-
-			if ( material.clearcoatMap ) {
-
-				uniforms.clearcoatMap.value = material.clearcoatMap;
-
-				refreshTransformUniform( material.clearcoatMap, uniforms.clearcoatMapTransform );
-
-			}
-
-			if ( material.clearcoatRoughnessMap ) {
-
-				uniforms.clearcoatRoughnessMap.value = material.clearcoatRoughnessMap;
-
-				refreshTransformUniform( material.clearcoatRoughnessMap, uniforms.clearcoatRoughnessMapTransform );
-
-			}
-
-			if ( material.clearcoatNormalMap ) {
-
-				uniforms.clearcoatNormalMap.value = material.clearcoatNormalMap;
-
-				refreshTransformUniform( material.clearcoatNormalMap, uniforms.clearcoatNormalMapTransform );
-
-				uniforms.clearcoatNormalScale.value.copy( material.clearcoatNormalScale );
-
-				if ( material.side === BackSide ) {
-
-					uniforms.clearcoatNormalScale.value.negate();
-
-				}
-
-			}
-
-		}
-
-		if ( material.iridescence > 0 ) {
-
-			uniforms.iridescence.value = material.iridescence;
-			uniforms.iridescenceIOR.value = material.iridescenceIOR;
-			uniforms.iridescenceThicknessMinimum.value = material.iridescenceThicknessRange[ 0 ];
-			uniforms.iridescenceThicknessMaximum.value = material.iridescenceThicknessRange[ 1 ];
-
-			if ( material.iridescenceMap ) {
-
-				uniforms.iridescenceMap.value = material.iridescenceMap;
-
-				refreshTransformUniform( material.iridescenceMap, uniforms.iridescenceMapTransform );
-
-			}
-
-			if ( material.iridescenceThicknessMap ) {
-
-				uniforms.iridescenceThicknessMap.value = material.iridescenceThicknessMap;
-
-				refreshTransformUniform( material.iridescenceThicknessMap, uniforms.iridescenceThicknessMapTransform );
-
-			}
-
-		}
-
-		if ( material.transmission > 0 ) {
-
-			uniforms.transmission.value = material.transmission;
-			uniforms.transmissionSamplerMap.value = transmissionRenderTarget.texture;
-			uniforms.transmissionSamplerSize.value.set( transmissionRenderTarget.width, transmissionRenderTarget.height );
-
-			if ( material.transmissionMap ) {
-
-				uniforms.transmissionMap.value = material.transmissionMap;
-
-				refreshTransformUniform( material.transmissionMap, uniforms.transmissionMapTransform );
-
-			}
-
-			uniforms.thickness.value = material.thickness;
-
-			if ( material.thicknessMap ) {
-
-				uniforms.thicknessMap.value = material.thicknessMap;
-
-				refreshTransformUniform( material.thicknessMap, uniforms.thicknessMapTransform );
-
-			}
-
-			uniforms.attenuationDistance.value = material.attenuationDistance;
-			uniforms.attenuationColor.value.copy( material.attenuationColor );
-
-		}
-
-		uniforms.specularIntensity.value = material.specularIntensity;
-		uniforms.specularColor.value.copy( material.specularColor );
-
-		if ( material.specularColorMap ) {
-
-			uniforms.specularColorMap.value = material.specularColorMap;
-
-			refreshTransformUniform( material.specularColorMap, uniforms.specularColorMapTransform );
-
-		}
-
-		if ( material.specularIntensityMap ) {
-
-			uniforms.specularIntensityMap.value = material.specularIntensityMap;
-
-			refreshTransformUniform( material.specularIntensityMap, uniforms.specularIntensityMapTransform );
-
-		}
-
-	}
-
-	function refreshUniformsMatcap( uniforms, material ) {
-
-		if ( material.matcap ) {
-
-			uniforms.matcap.value = material.matcap;
-
-		}
-
-	}
-
-	function refreshUniformsDistance( uniforms, material ) {
-
-		const light = properties.get( material ).light;
-
-		uniforms.referencePosition.value.setFromMatrixPosition( light.matrixWorld );
-		uniforms.nearDistance.value = light.shadow.camera.near;
-		uniforms.farDistance.value = light.shadow.camera.far;
-
-	}
-
-	return {
-		refreshFogUniforms: refreshFogUniforms,
-		refreshMaterialUniforms: refreshMaterialUniforms
-	};
-
-}
-
-function WebGLUniformsGroups( gl, info, capabilities, state ) {
-
-	let buffers = {};
-	let updateList = {};
-	let allocatedBindingPoints = [];
-
-	const maxBindingPoints = ( capabilities.isWebGL2 ) ? gl.getParameter( gl.MAX_UNIFORM_BUFFER_BINDINGS ) : 0; // binding points are global whereas block indices are per shader program
-
-	function bind( uniformsGroup, program ) {
-
-		const webglProgram = program.program;
-		state.uniformBlockBinding( uniformsGroup, webglProgram );
-
-	}
-
-	function update( uniformsGroup, program ) {
-
-		let buffer = buffers[ uniformsGroup.id ];
-
-		if ( buffer === undefined ) {
-
-			prepareUniformsGroup( uniformsGroup );
-
-			buffer = createBuffer( uniformsGroup );
-			buffers[ uniformsGroup.id ] = buffer;
-
-			uniformsGroup.addEventListener( 'dispose', onUniformsGroupsDispose );
-
-		}
-
-		// ensure to update the binding points/block indices mapping for this program
-
-		const webglProgram = program.program;
-		state.updateUBOMapping( uniformsGroup, webglProgram );
-
-		// update UBO once per frame
-
-		const frame = info.render.frame;
-
-		if ( updateList[ uniformsGroup.id ] !== frame ) {
-
-			updateBufferData( uniformsGroup );
-
-			updateList[ uniformsGroup.id ] = frame;
-
-		}
-
-	}
-
-	function createBuffer( uniformsGroup ) {
-
-		// the setup of an UBO is independent of a particular shader program but global
-
-		const bindingPointIndex = allocateBindingPointIndex();
-		uniformsGroup.__bindingPointIndex = bindingPointIndex;
-
-		const buffer = gl.createBuffer();
-		const size = uniformsGroup.__size;
-		const usage = uniformsGroup.usage;
-
-		gl.bindBuffer( gl.UNIFORM_BUFFER, buffer );
-		gl.bufferData( gl.UNIFORM_BUFFER, size, usage );
-		gl.bindBuffer( gl.UNIFORM_BUFFER, null );
-		gl.bindBufferBase( gl.UNIFORM_BUFFER, bindingPointIndex, buffer );
-
-		return buffer;
-
-	}
-
-	function allocateBindingPointIndex() {
-
-		for ( let i = 0; i < maxBindingPoints; i ++ ) {
-
-			if ( allocatedBindingPoints.indexOf( i ) === - 1 ) {
-
-				allocatedBindingPoints.push( i );
-				return i;
-
-			}
-
-		}
-
-		console.error( 'THREE.WebGLRenderer: Maximum number of simultaneously usable uniforms groups reached.' );
-
-		return 0;
-
-	}
-
-	function updateBufferData( uniformsGroup ) {
-
-		const buffer = buffers[ uniformsGroup.id ];
-		const uniforms = uniformsGroup.uniforms;
-		const cache = uniformsGroup.__cache;
-
-		gl.bindBuffer( gl.UNIFORM_BUFFER, buffer );
-
-		for ( let i = 0, il = uniforms.length; i < il; i ++ ) {
-
-			const uniform = uniforms[ i ];
-
-			// partly update the buffer if necessary
-
-			if ( hasUniformChanged( uniform, i, cache ) === true ) {
-
-				const offset = uniform.__offset;
-
-				const values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];
-
-				let arrayOffset = 0;
-
-				for ( let i = 0; i < values.length; i ++ ) {
-
-					const value = values[ i ];
-
-					const info = getUniformSize( value );
-
-					if ( typeof value === 'number' ) {
-
-						uniform.__data[ 0 ] = value;
-						gl.bufferSubData( gl.UNIFORM_BUFFER, offset + arrayOffset, uniform.__data );
-
-					} else if ( value.isMatrix3 ) {
-
-						// manually converting 3x3 to 3x4
-
-						uniform.__data[ 0 ] = value.elements[ 0 ];
-						uniform.__data[ 1 ] = value.elements[ 1 ];
-						uniform.__data[ 2 ] = value.elements[ 2 ];
-						uniform.__data[ 3 ] = value.elements[ 0 ];
-						uniform.__data[ 4 ] = value.elements[ 3 ];
-						uniform.__data[ 5 ] = value.elements[ 4 ];
-						uniform.__data[ 6 ] = value.elements[ 5 ];
-						uniform.__data[ 7 ] = value.elements[ 0 ];
-						uniform.__data[ 8 ] = value.elements[ 6 ];
-						uniform.__data[ 9 ] = value.elements[ 7 ];
-						uniform.__data[ 10 ] = value.elements[ 8 ];
-						uniform.__data[ 11 ] = value.elements[ 0 ];
-
-					} else {
-
-						value.toArray( uniform.__data, arrayOffset );
-
-						arrayOffset += info.storage / Float32Array.BYTES_PER_ELEMENT;
-
-					}
-
-				}
-
-				gl.bufferSubData( gl.UNIFORM_BUFFER, offset, uniform.__data );
-
-			}
-
-		}
-
-		gl.bindBuffer( gl.UNIFORM_BUFFER, null );
-
-	}
-
-	function hasUniformChanged( uniform, index, cache ) {
-
-		const value = uniform.value;
-
-		if ( cache[ index ] === undefined ) {
-
-			// cache entry does not exist so far
-
-			if ( typeof value === 'number' ) {
-
-				cache[ index ] = value;
-
-			} else {
-
-				const values = Array.isArray( value ) ? value : [ value ];
-
-				const tempValues = [];
-
-				for ( let i = 0; i < values.length; i ++ ) {
-
-					tempValues.push( values[ i ].clone() );
-
-				}
-
-				cache[ index ] = tempValues;
-
-			}
-
-			return true;
-
-		} else {
-
-			// compare current value with cached entry
-
-			if ( typeof value === 'number' ) {
-
-				if ( cache[ index ] !== value ) {
-
-					cache[ index ] = value;
-					return true;
-
-				}
-
-			} else {
-
-				const cachedObjects = Array.isArray( cache[ index ] ) ? cache[ index ] : [ cache[ index ] ];
-				const values = Array.isArray( value ) ? value : [ value ];
-
-				for ( let i = 0; i < cachedObjects.length; i ++ ) {
-
-					const cachedObject = cachedObjects[ i ];
-
-					if ( cachedObject.equals( values[ i ] ) === false ) {
-
-						cachedObject.copy( values[ i ] );
-						return true;
-
-					}
-
-				}
-
-			}
-
-		}
-
-		return false;
-
-	}
-
-	function prepareUniformsGroup( uniformsGroup ) {
-
-		// determine total buffer size according to the STD140 layout
-		// Hint: STD140 is the only supported layout in WebGL 2
-
-		const uniforms = uniformsGroup.uniforms;
-
-		let offset = 0; // global buffer offset in bytes
-		const chunkSize = 16; // size of a chunk in bytes
-		let chunkOffset = 0; // offset within a single chunk in bytes
-
-		for ( let i = 0, l = uniforms.length; i < l; i ++ ) {
-
-			const uniform = uniforms[ i ];
-
-			const infos = {
-				boundary: 0, // bytes
-				storage: 0 // bytes
-			};
-
-			const values = Array.isArray( uniform.value ) ? uniform.value : [ uniform.value ];
-
-			for ( let j = 0, jl = values.length; j < jl; j ++ ) {
-
-				const value = values[ j ];
-
-				const info = getUniformSize( value );
-
-				infos.boundary += info.boundary;
-				infos.storage += info.storage;
-
-			}
-
-			// the following two properties will be used for partial buffer updates
-
-			uniform.__data = new Float32Array( infos.storage / Float32Array.BYTES_PER_ELEMENT );
-			uniform.__offset = offset;
-
-			//
-
-			if ( i > 0 ) {
-
-				chunkOffset = offset % chunkSize;
-
-				const remainingSizeInChunk = chunkSize - chunkOffset;
-
-				// check for chunk overflow
-
-				if ( chunkOffset !== 0 && ( remainingSizeInChunk - infos.boundary ) < 0 ) {
-
-					// add padding and adjust offset
-
-					offset += ( chunkSize - chunkOffset );
-					uniform.__offset = offset;
-
-				}
-
-			}
-
-			offset += infos.storage;
-
-		}
-
-		// ensure correct final padding
-
-		chunkOffset = offset % chunkSize;
-
-		if ( chunkOffset > 0 ) offset += ( chunkSize - chunkOffset );
-
-		//
-
-		uniformsGroup.__size = offset;
-		uniformsGroup.__cache = {};
-
-		return this;
-
-	}
-
-	function getUniformSize( value ) {
-
-		const info = {
-			boundary: 0, // bytes
-			storage: 0 // bytes
-		};
-
-		// determine sizes according to STD140
-
-		if ( typeof value === 'number' ) {
-
-			// float/int
-
-			info.boundary = 4;
-			info.storage = 4;
-
-		} else if ( value.isVector2 ) {
-
-			// vec2
-
-			info.boundary = 8;
-			info.storage = 8;
-
-		} else if ( value.isVector3 || value.isColor ) {
-
-			// vec3
-
-			info.boundary = 16;
-			info.storage = 12; // evil: vec3 must start on a 16-byte boundary but it only consumes 12 bytes
-
-		} else if ( value.isVector4 ) {
-
-			// vec4
-
-			info.boundary = 16;
-			info.storage = 16;
-
-		} else if ( value.isMatrix3 ) {
-
-			// mat3 (in STD140 a 3x3 matrix is represented as 3x4)
-
-			info.boundary = 48;
-			info.storage = 48;
-
-		} else if ( value.isMatrix4 ) {
-
-			// mat4
-
-			info.boundary = 64;
-			info.storage = 64;
-
-		} else if ( value.isTexture ) {
-
-			console.warn( 'THREE.WebGLRenderer: Texture samplers can not be part of an uniforms group.' );
-
-		} else {
-
-			console.warn( 'THREE.WebGLRenderer: Unsupported uniform value type.', value );
-
-		}
-
-		return info;
-
-	}
-
-	function onUniformsGroupsDispose( event ) {
-
-		const uniformsGroup = event.target;
-
-		uniformsGroup.removeEventListener( 'dispose', onUniformsGroupsDispose );
-
-		const index = allocatedBindingPoints.indexOf( uniformsGroup.__bindingPointIndex );
-		allocatedBindingPoints.splice( index, 1 );
-
-		gl.deleteBuffer( buffers[ uniformsGroup.id ] );
-
-		delete buffers[ uniformsGroup.id ];
-		delete updateList[ uniformsGroup.id ];
-
-	}
-
-	function dispose() {
-
-		for ( const id in buffers ) {
-
-			gl.deleteBuffer( buffers[ id ] );
-
-		}
-
-		allocatedBindingPoints = [];
-		buffers = {};
-		updateList = {};
-
-	}
-
-	return {
-
-		bind: bind,
-		update: update,
-
-		dispose: dispose
-
-	};
-
-}
-
-function createCanvasElement() {
-
-	const canvas = createElementNS( 'canvas' );
-	canvas.style.display = 'block';
-	return canvas;
-
-}
-
-class WebGLRenderer {
-
-	constructor( parameters = {} ) {
-
-		const {
-			canvas = createCanvasElement(),
-			context = null,
-			depth = true,
-			stencil = true,
-			alpha = false,
-			antialias = false,
-			premultipliedAlpha = true,
-			preserveDrawingBuffer = false,
-			powerPreference = 'default',
-			failIfMajorPerformanceCaveat = false,
-		} = parameters;
-
-		this.isWebGLRenderer = true;
-
-		let _alpha;
-
-		if ( context !== null ) {
-
-			_alpha = context.getContextAttributes().alpha;
-
-		} else {
-
-			_alpha = alpha;
-
-		}
-
-		let currentRenderList = null;
-		let currentRenderState = null;
-
-		// render() can be called from within a callback triggered by another render.
-		// We track this so that the nested render call gets its list and state isolated from the parent render call.
-
-		const renderListStack = [];
-		const renderStateStack = [];
-
-		// public properties
-
-		this.domElement = canvas;
-
-		// Debug configuration container
-		this.debug = {
-
-			/**
-			 * Enables error checking and reporting when shader programs are being compiled
-			 * @type {boolean}
-			 */
-			checkShaderErrors: true,
-			/**
-			 * Callback for custom error reporting.
-			 * @type {?Function}
-			 */
-			onShaderError: null
-		};
-
-		// clearing
-
-		this.autoClear = true;
-		this.autoClearColor = true;
-		this.autoClearDepth = true;
-		this.autoClearStencil = true;
-
-		// scene graph
-
-		this.sortObjects = true;
-
-		// user-defined clipping
-
-		this.clippingPlanes = [];
-		this.localClippingEnabled = false;
-
-		// physically based shading
-
-		this.outputColorSpace = SRGBColorSpace;
-
-		// physical lights
-
-		this.useLegacyLights = true;
-
-		// tone mapping
-
-		this.toneMapping = NoToneMapping;
-		this.toneMappingExposure = 1.0;
-
-		// internal properties
-
-		const _this = this;
-
-		let _isContextLost = false;
-
-		// internal state cache
-
-		let _currentActiveCubeFace = 0;
-		let _currentActiveMipmapLevel = 0;
-		let _currentRenderTarget = null;
-		let _currentMaterialId = - 1;
-
-		let _currentCamera = null;
-
-		const _currentViewport = new Vector4();
-		const _currentScissor = new Vector4();
-		let _currentScissorTest = null;
-
-		//
-
-		let _width = canvas.width;
-		let _height = canvas.height;
-
-		let _pixelRatio = 1;
-		let _opaqueSort = null;
-		let _transparentSort = null;
-
-		const _viewport = new Vector4( 0, 0, _width, _height );
-		const _scissor = new Vector4( 0, 0, _width, _height );
-		let _scissorTest = false;
-
-		// frustum
-
-		const _frustum = new Frustum();
-
-		// clipping
-
-		let _clippingEnabled = false;
-		let _localClippingEnabled = false;
-
-		// transmission
-
-		let _transmissionRenderTarget = null;
-
-		// camera matrices cache
-
-		const _projScreenMatrix = new Matrix4();
-
-		const _vector3 = new Vector3();
-
-		const _emptyScene = { background: null, fog: null, environment: null, overrideMaterial: null, isScene: true };
-
-		function getTargetPixelRatio() {
-
-			return _currentRenderTarget === null ? _pixelRatio : 1;
-
-		}
-
-		// initialize
-
-		let _gl = context;
-
-		function getContext( contextNames, contextAttributes ) {
-
-			for ( let i = 0; i < contextNames.length; i ++ ) {
-
-				const contextName = contextNames[ i ];
-				const context = canvas.getContext( contextName, contextAttributes );
-				if ( context !== null ) return context;
-
-			}
-
-			return null;
-
-		}
-
-		try {
-
-			const contextAttributes = {
-				alpha: true,
-				depth,
-				stencil,
-				antialias,
-				premultipliedAlpha,
-				preserveDrawingBuffer,
-				powerPreference,
-				failIfMajorPerformanceCaveat,
-			};
-
-			// OffscreenCanvas does not have setAttribute, see #22811
-			if ( 'setAttribute' in canvas ) canvas.setAttribute( 'data-engine', `three.js r${REVISION}` );
-
-			// event listeners must be registered before WebGL context is created, see #12753
-			canvas.addEventListener( 'webglcontextlost', onContextLost, false );
-			canvas.addEventListener( 'webglcontextrestored', onContextRestore, false );
-			canvas.addEventListener( 'webglcontextcreationerror', onContextCreationError, false );
-
-			if ( _gl === null ) {
-
-				const contextNames = [ 'webgl2', 'webgl', 'experimental-webgl' ];
-
-				if ( _this.isWebGL1Renderer === true ) {
-
-					contextNames.shift();
-
-				}
-
-				_gl = getContext( contextNames, contextAttributes );
-
-				if ( _gl === null ) {
-
-					if ( getContext( contextNames ) ) {
-
-						throw new Error( 'Error creating WebGL context with your selected attributes.' );
-
-					} else {
-
-						throw new Error( 'Error creating WebGL context.' );
-
-					}
-
-				}
-
-			}
-
-			// Some experimental-webgl implementations do not have getShaderPrecisionFormat
-
-			if ( _gl.getShaderPrecisionFormat === undefined ) {
-
-				_gl.getShaderPrecisionFormat = function () {
-
-					return { 'rangeMin': 1, 'rangeMax': 1, 'precision': 1 };
-
-				};
-
-			}
-
-		} catch ( error ) {
-
-			console.error( 'THREE.WebGLRenderer: ' + error.message );
-			throw error;
-
-		}
-
-		let extensions, capabilities, state, info;
-		let properties, textures, cubemaps, cubeuvmaps, attributes, geometries, objects;
-		let programCache, materials, renderLists, renderStates, clipping, shadowMap;
-
-		let background, morphtargets, bufferRenderer, indexedBufferRenderer;
-
-		let utils, bindingStates, uniformsGroups;
-
-		function initGLContext() {
-
-			extensions = new WebGLExtensions( _gl );
-
-			capabilities = new WebGLCapabilities( _gl, extensions, parameters );
-
-			extensions.init( capabilities );
-
-			utils = new WebGLUtils( _gl, extensions, capabilities );
-
-			state = new WebGLState( _gl, extensions, capabilities );
-
-			info = new WebGLInfo( _gl );
-			properties = new WebGLProperties();
-			textures = new WebGLTextures( _gl, extensions, state, properties, capabilities, utils, info );
-			cubemaps = new WebGLCubeMaps( _this );
-			cubeuvmaps = new WebGLCubeUVMaps( _this );
-			attributes = new WebGLAttributes( _gl, capabilities );
-			bindingStates = new WebGLBindingStates( _gl, extensions, attributes, capabilities );
-			geometries = new WebGLGeometries( _gl, attributes, info, bindingStates );
-			objects = new WebGLObjects( _gl, geometries, attributes, info );
-			morphtargets = new WebGLMorphtargets( _gl, capabilities, textures );
-			clipping = new WebGLClipping( properties );
-			programCache = new WebGLPrograms( _this, cubemaps, cubeuvmaps, extensions, capabilities, bindingStates, clipping );
-			materials = new WebGLMaterials( _this, properties );
-			renderLists = new WebGLRenderLists();
-			renderStates = new WebGLRenderStates( extensions, capabilities );
-			background = new WebGLBackground( _this, cubemaps, cubeuvmaps, state, objects, _alpha, premultipliedAlpha );
-			shadowMap = new WebGLShadowMap( _this, objects, capabilities );
-			uniformsGroups = new WebGLUniformsGroups( _gl, info, capabilities, state );
-
-			bufferRenderer = new WebGLBufferRenderer( _gl, extensions, info, capabilities );
-			indexedBufferRenderer = new WebGLIndexedBufferRenderer( _gl, extensions, info, capabilities );
-
-			info.programs = programCache.programs;
-
-			_this.capabilities = capabilities;
-			_this.extensions = extensions;
-			_this.properties = properties;
-			_this.renderLists = renderLists;
-			_this.shadowMap = shadowMap;
-			_this.state = state;
-			_this.info = info;
-
-		}
-
-		initGLContext();
-
-		// xr
-
-		const xr = new WebXRManager( _this, _gl );
-
-		this.xr = xr;
-
-		// API
-
-		this.getContext = function () {
-
-			return _gl;
-
-		};
-
-		this.getContextAttributes = function () {
-
-			return _gl.getContextAttributes();
-
-		};
-
-		this.forceContextLoss = function () {
-
-			const extension = extensions.get( 'WEBGL_lose_context' );
-			if ( extension ) extension.loseContext();
-
-		};
-
-		this.forceContextRestore = function () {
-
-			const extension = extensions.get( 'WEBGL_lose_context' );
-			if ( extension ) extension.restoreContext();
-
-		};
-
-		this.getPixelRatio = function () {
-
-			return _pixelRatio;
-
-		};
-
-		this.setPixelRatio = function ( value ) {
-
-			if ( value === undefined ) return;
-
-			_pixelRatio = value;
-
-			this.setSize( _width, _height, false );
-
-		};
-
-		this.getSize = function ( target ) {
-
-			return target.set( _width, _height );
-
-		};
-
-		this.setSize = function ( width, height, updateStyle = true ) {
-
-			if ( xr.isPresenting ) {
-
-				console.warn( 'THREE.WebGLRenderer: Can\'t change size while VR device is presenting.' );
-				return;
-
-			}
-
-			_width = width;
-			_height = height;
-
-			canvas.width = Math.floor( width * _pixelRatio );
-			canvas.height = Math.floor( height * _pixelRatio );
-
-			if ( updateStyle === true ) {
-
-				canvas.style.width = width + 'px';
-				canvas.style.height = height + 'px';
-
-			}
-
-			this.setViewport( 0, 0, width, height );
-
-		};
-
-		this.getDrawingBufferSize = function ( target ) {
-
-			return target.set( _width * _pixelRatio, _height * _pixelRatio ).floor();
-
-		};
-
-		this.setDrawingBufferSize = function ( width, height, pixelRatio ) {
-
-			_width = width;
-			_height = height;
-
-			_pixelRatio = pixelRatio;
-
-			canvas.width = Math.floor( width * pixelRatio );
-			canvas.height = Math.floor( height * pixelRatio );
-
-			this.setViewport( 0, 0, width, height );
-
-		};
-
-		this.getCurrentViewport = function ( target ) {
-
-			return target.copy( _currentViewport );
-
-		};
-
-		this.getViewport = function ( target ) {
-
-			return target.copy( _viewport );
-
-		};
-
-		this.setViewport = function ( x, y, width, height ) {
-
-			if ( x.isVector4 ) {
-
-				_viewport.set( x.x, x.y, x.z, x.w );
-
-			} else {
-
-				_viewport.set( x, y, width, height );
-
-			}
-
-			state.viewport( _currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor() );
-
-		};
-
-		this.getScissor = function ( target ) {
-
-			return target.copy( _scissor );
-
-		};
-
-		this.setScissor = function ( x, y, width, height ) {
-
-			if ( x.isVector4 ) {
-
-				_scissor.set( x.x, x.y, x.z, x.w );
-
-			} else {
-
-				_scissor.set( x, y, width, height );
-
-			}
-
-			state.scissor( _currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor() );
-
-		};
-
-		this.getScissorTest = function () {
-
-			return _scissorTest;
-
-		};
-
-		this.setScissorTest = function ( boolean ) {
-
-			state.setScissorTest( _scissorTest = boolean );
-
-		};
-
-		this.setOpaqueSort = function ( method ) {
-
-			_opaqueSort = method;
-
-		};
-
-		this.setTransparentSort = function ( method ) {
-
-			_transparentSort = method;
-
-		};
-
-		// Clearing
-
-		this.getClearColor = function ( target ) {
-
-			return target.copy( background.getClearColor() );
-
-		};
-
-		this.setClearColor = function () {
-
-			background.setClearColor.apply( background, arguments );
-
-		};
-
-		this.getClearAlpha = function () {
-
-			return background.getClearAlpha();
-
-		};
-
-		this.setClearAlpha = function () {
-
-			background.setClearAlpha.apply( background, arguments );
-
-		};
-
-		this.clear = function ( color = true, depth = true, stencil = true ) {
-
-			let bits = 0;
-
-			if ( color ) bits |= _gl.COLOR_BUFFER_BIT;
-			if ( depth ) bits |= _gl.DEPTH_BUFFER_BIT;
-			if ( stencil ) bits |= _gl.STENCIL_BUFFER_BIT;
-
-			_gl.clear( bits );
-
-		};
-
-		this.clearColor = function () {
-
-			this.clear( true, false, false );
-
-		};
-
-		this.clearDepth = function () {
-
-			this.clear( false, true, false );
-
-		};
-
-		this.clearStencil = function () {
-
-			this.clear( false, false, true );
-
-		};
-
-		//
-
-		this.dispose = function () {
-
-			canvas.removeEventListener( 'webglcontextlost', onContextLost, false );
-			canvas.removeEventListener( 'webglcontextrestored', onContextRestore, false );
-			canvas.removeEventListener( 'webglcontextcreationerror', onContextCreationError, false );
-
-			renderLists.dispose();
-			renderStates.dispose();
-			properties.dispose();
-			cubemaps.dispose();
-			cubeuvmaps.dispose();
-			objects.dispose();
-			bindingStates.dispose();
-			uniformsGroups.dispose();
-			programCache.dispose();
-
-			xr.dispose();
-
-			xr.removeEventListener( 'sessionstart', onXRSessionStart );
-			xr.removeEventListener( 'sessionend', onXRSessionEnd );
-
-			if ( _transmissionRenderTarget ) {
-
-				_transmissionRenderTarget.dispose();
-				_transmissionRenderTarget = null;
-
-			}
-
-			animation.stop();
-
-		};
-
-		// Events
-
-		function onContextLost( event ) {
-
-			event.preventDefault();
-
-			console.log( 'THREE.WebGLRenderer: Context Lost.' );
-
-			_isContextLost = true;
-
-		}
-
-		function onContextRestore( /* event */ ) {
-
-			console.log( 'THREE.WebGLRenderer: Context Restored.' );
-
-			_isContextLost = false;
-
-			const infoAutoReset = info.autoReset;
-			const shadowMapEnabled = shadowMap.enabled;
-			const shadowMapAutoUpdate = shadowMap.autoUpdate;
-			const shadowMapNeedsUpdate = shadowMap.needsUpdate;
-			const shadowMapType = shadowMap.type;
-
-			initGLContext();
-
-			info.autoReset = infoAutoReset;
-			shadowMap.enabled = shadowMapEnabled;
-			shadowMap.autoUpdate = shadowMapAutoUpdate;
-			shadowMap.needsUpdate = shadowMapNeedsUpdate;
-			shadowMap.type = shadowMapType;
-
-		}
-
-		function onContextCreationError( event ) {
-
-			console.error( 'THREE.WebGLRenderer: A WebGL context could not be created. Reason: ', event.statusMessage );
-
-		}
-
-		function onMaterialDispose( event ) {
-
-			const material = event.target;
-
-			material.removeEventListener( 'dispose', onMaterialDispose );
-
-			deallocateMaterial( material );
-
-		}
-
-		// Buffer deallocation
-
-		function deallocateMaterial( material ) {
-
-			releaseMaterialProgramReferences( material );
-
-			properties.remove( material );
-
-		}
-
-
-		function releaseMaterialProgramReferences( material ) {
-
-			const programs = properties.get( material ).programs;
-
-			if ( programs !== undefined ) {
-
-				programs.forEach( function ( program ) {
-
-					programCache.releaseProgram( program );
-
-				} );
-
-				if ( material.isShaderMaterial ) {
-
-					programCache.releaseShaderCache( material );
-
-				}
-
-			}
-
-		}
-
-		// Buffer rendering
-
-		this.renderBufferDirect = function ( camera, scene, geometry, material, object, group ) {
-
-			if ( scene === null ) scene = _emptyScene; // renderBufferDirect second parameter used to be fog (could be null)
-
-			const frontFaceCW = ( object.isMesh && object.matrixWorld.determinant() < 0 );
-
-			const program = setProgram( camera, scene, geometry, material, object );
-
-			state.setMaterial( material, frontFaceCW );
-
-			//
-
-			let index = geometry.index;
-			let rangeFactor = 1;
-
-			if ( material.wireframe === true ) {
-
-				index = geometries.getWireframeAttribute( geometry );
-				rangeFactor = 2;
-
-			}
-
-			//
-
-			const drawRange = geometry.drawRange;
-			const position = geometry.attributes.position;
-
-			let drawStart = drawRange.start * rangeFactor;
-			let drawEnd = ( drawRange.start + drawRange.count ) * rangeFactor;
-
-			if ( group !== null ) {
-
-				drawStart = Math.max( drawStart, group.start * rangeFactor );
-				drawEnd = Math.min( drawEnd, ( group.start + group.count ) * rangeFactor );
-
-			}
-
-			if ( index !== null ) {
-
-				drawStart = Math.max( drawStart, 0 );
-				drawEnd = Math.min( drawEnd, index.count );
-
-			} else if ( position !== undefined && position !== null ) {
-
-				drawStart = Math.max( drawStart, 0 );
-				drawEnd = Math.min( drawEnd, position.count );
-
-			}
-
-			const drawCount = drawEnd - drawStart;
-
-			if ( drawCount < 0 || drawCount === Infinity ) return;
-
-			//
-
-			bindingStates.setup( object, material, program, geometry, index );
-
-			let attribute;
-			let renderer = bufferRenderer;
-
-			if ( index !== null ) {
-
-				attribute = attributes.get( index );
-
-				renderer = indexedBufferRenderer;
-				renderer.setIndex( attribute );
-
-			}
-
-			//
-
-			if ( object.isMesh ) {
-
-				if ( material.wireframe === true ) {
-
-					state.setLineWidth( material.wireframeLinewidth * getTargetPixelRatio() );
-					renderer.setMode( _gl.LINES );
-
-				} else {
-
-					renderer.setMode( _gl.TRIANGLES );
-
-				}
-
-			} else if ( object.isLine ) {
-
-				let lineWidth = material.linewidth;
-
-				if ( lineWidth === undefined ) lineWidth = 1; // Not using Line*Material
-
-				state.setLineWidth( lineWidth * getTargetPixelRatio() );
-
-				if ( object.isLineSegments ) {
-
-					renderer.setMode( _gl.LINES );
-
-				} else if ( object.isLineLoop ) {
-
-					renderer.setMode( _gl.LINE_LOOP );
-
-				} else {
-
-					renderer.setMode( _gl.LINE_STRIP );
-
-				}
-
-			} else if ( object.isPoints ) {
-
-				renderer.setMode( _gl.POINTS );
-
-			} else if ( object.isSprite ) {
-
-				renderer.setMode( _gl.TRIANGLES );
-
-			}
-
-			if ( object.isInstancedMesh ) {
-
-				renderer.renderInstances( drawStart, drawCount, object.count );
-
-			} else if ( geometry.isInstancedBufferGeometry ) {
-
-				const maxInstanceCount = geometry._maxInstanceCount !== undefined ? geometry._maxInstanceCount : Infinity;
-				const instanceCount = Math.min( geometry.instanceCount, maxInstanceCount );
-
-				renderer.renderInstances( drawStart, drawCount, instanceCount );
-
-			} else {
-
-				renderer.render( drawStart, drawCount );
-
-			}
-
-		};
-
-		// Compile
-
-		this.compile = function ( scene, camera ) {
-
-			function prepare( material, scene, object ) {
-
-				if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
-
-					material.side = BackSide;
-					material.needsUpdate = true;
-					getProgram( material, scene, object );
-
-					material.side = FrontSide;
-					material.needsUpdate = true;
-					getProgram( material, scene, object );
-
-					material.side = DoubleSide;
-
-				} else {
-
-					getProgram( material, scene, object );
-
-				}
-
-			}
-
-			currentRenderState = renderStates.get( scene );
-			currentRenderState.init();
-
-			renderStateStack.push( currentRenderState );
-
-			scene.traverseVisible( function ( object ) {
-
-				if ( object.isLight && object.layers.test( camera.layers ) ) {
-
-					currentRenderState.pushLight( object );
-
-					if ( object.castShadow ) {
-
-						currentRenderState.pushShadow( object );
-
-					}
-
-				}
-
-			} );
-
-			currentRenderState.setupLights( _this.useLegacyLights );
-
-			scene.traverse( function ( object ) {
-
-				const material = object.material;
-
-				if ( material ) {
-
-					if ( Array.isArray( material ) ) {
-
-						for ( let i = 0; i < material.length; i ++ ) {
-
-							const material2 = material[ i ];
-
-							prepare( material2, scene, object );
-
-						}
-
-					} else {
-
-						prepare( material, scene, object );
-
-					}
-
-				}
-
-			} );
-
-			renderStateStack.pop();
-			currentRenderState = null;
-
-		};
-
-		// Animation Loop
-
-		let onAnimationFrameCallback = null;
-
-		function onAnimationFrame( time ) {
-
-			if ( onAnimationFrameCallback ) onAnimationFrameCallback( time );
-
-		}
-
-		function onXRSessionStart() {
-
-			animation.stop();
-
-		}
-
-		function onXRSessionEnd() {
-
-			animation.start();
-
-		}
-
-		const animation = new WebGLAnimation();
-		animation.setAnimationLoop( onAnimationFrame );
-
-		if ( typeof self !== 'undefined' ) animation.setContext( self );
-
-		this.setAnimationLoop = function ( callback ) {
-
-			onAnimationFrameCallback = callback;
-			xr.setAnimationLoop( callback );
-
-			( callback === null ) ? animation.stop() : animation.start();
-
-		};
-
-		xr.addEventListener( 'sessionstart', onXRSessionStart );
-		xr.addEventListener( 'sessionend', onXRSessionEnd );
-
-		// Rendering
-
-		this.render = function ( scene, camera ) {
-
-			if ( camera !== undefined && camera.isCamera !== true ) {
-
-				console.error( 'THREE.WebGLRenderer.render: camera is not an instance of THREE.Camera.' );
-				return;
-
-			}
-
-			if ( _isContextLost === true ) return;
-
-			// update scene graph
-
-			if ( scene.matrixWorldAutoUpdate === true ) scene.updateMatrixWorld();
-
-			// update camera matrices and frustum
-
-			if ( camera.parent === null && camera.matrixWorldAutoUpdate === true ) camera.updateMatrixWorld();
-
-			if ( xr.enabled === true && xr.isPresenting === true ) {
-
-				if ( xr.cameraAutoUpdate === true ) xr.updateCamera( camera );
-
-				camera = xr.getCamera(); // use XR camera for rendering
-
-			}
-
-			//
-			if ( scene.isScene === true ) scene.onBeforeRender( _this, scene, camera, _currentRenderTarget );
-
-			currentRenderState = renderStates.get( scene, renderStateStack.length );
-			currentRenderState.init();
-
-			renderStateStack.push( currentRenderState );
-
-			_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
-			_frustum.setFromProjectionMatrix( _projScreenMatrix );
-
-			_localClippingEnabled = this.localClippingEnabled;
-			_clippingEnabled = clipping.init( this.clippingPlanes, _localClippingEnabled );
-
-			currentRenderList = renderLists.get( scene, renderListStack.length );
-			currentRenderList.init();
-
-			renderListStack.push( currentRenderList );
-
-			projectObject( scene, camera, 0, _this.sortObjects );
-
-			currentRenderList.finish();
-
-			if ( _this.sortObjects === true ) {
-
-				currentRenderList.sort( _opaqueSort, _transparentSort );
-
-			}
-
-			//
-
-			if ( _clippingEnabled === true ) clipping.beginShadows();
-
-			const shadowsArray = currentRenderState.state.shadowsArray;
-
-			shadowMap.render( shadowsArray, scene, camera );
-
-			if ( _clippingEnabled === true ) clipping.endShadows();
-
-			//
-
-			if ( this.info.autoReset === true ) this.info.reset();
-
-			//
-
-			background.render( currentRenderList, scene );
-
-			// render scene
-
-			currentRenderState.setupLights( _this.useLegacyLights );
-
-			if ( camera.isArrayCamera ) {
-
-				const cameras = camera.cameras;
-
-				for ( let i = 0, l = cameras.length; i < l; i ++ ) {
-
-					const camera2 = cameras[ i ];
-
-					renderScene( currentRenderList, scene, camera2, camera2.viewport );
-
-				}
-
-			} else {
-
-				renderScene( currentRenderList, scene, camera );
-
-			}
-
-			//
-
-			if ( _currentRenderTarget !== null ) {
-
-				// resolve multisample renderbuffers to a single-sample texture if necessary
-
-				textures.updateMultisampleRenderTarget( _currentRenderTarget );
-
-				// Generate mipmap if we're using any kind of mipmap filtering
-
-				textures.updateRenderTargetMipmap( _currentRenderTarget );
-
-			}
-
-			//
-
-			if ( scene.isScene === true ) scene.onAfterRender( _this, scene, camera );
-
-			// _gl.finish();
-
-			bindingStates.resetDefaultState();
-			_currentMaterialId = - 1;
-			_currentCamera = null;
-
-			renderStateStack.pop();
-
-			if ( renderStateStack.length > 0 ) {
-
-				currentRenderState = renderStateStack[ renderStateStack.length - 1 ];
-
-			} else {
-
-				currentRenderState = null;
-
-			}
-
-			renderListStack.pop();
-
-			if ( renderListStack.length > 0 ) {
-
-				currentRenderList = renderListStack[ renderListStack.length - 1 ];
-
-			} else {
-
-				currentRenderList = null;
-
-			}
-
-		};
-
-		function projectObject( object, camera, groupOrder, sortObjects ) {
-
-			if ( object.visible === false ) return;
-
-			const visible = object.layers.test( camera.layers );
-
-			if ( visible ) {
-
-				if ( object.isGroup ) {
-
-					groupOrder = object.renderOrder;
-
-				} else if ( object.isLOD ) {
-
-					if ( object.autoUpdate === true ) object.update( camera );
-
-				} else if ( object.isLight ) {
-
-					currentRenderState.pushLight( object );
-
-					if ( object.castShadow ) {
-
-						currentRenderState.pushShadow( object );
-
-					}
-
-				} else if ( object.isSprite ) {
-
-					if ( ! object.frustumCulled || _frustum.intersectsSprite( object ) ) {
-
-						if ( sortObjects ) {
-
-							_vector3.setFromMatrixPosition( object.matrixWorld )
-								.applyMatrix4( _projScreenMatrix );
-
-						}
-
-						const geometry = objects.update( object );
-						const material = object.material;
-
-						if ( material.visible ) {
-
-							currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );
-
-						}
-
-					}
-
-				} else if ( object.isMesh || object.isLine || object.isPoints ) {
-
-					if ( ! object.frustumCulled || _frustum.intersectsObject( object ) ) {
-
-						if ( object.isSkinnedMesh ) {
-
-							// update skeleton only once in a frame
-
-							if ( object.skeleton.frame !== info.render.frame ) {
-
-								object.skeleton.update();
-								object.skeleton.frame = info.render.frame;
-
-							}
-
-						}
-
-						const geometry = objects.update( object );
-						const material = object.material;
-
-						if ( sortObjects ) {
-
-							if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
-
-							_vector3
-								.copy( geometry.boundingSphere.center )
-								.applyMatrix4( object.matrixWorld )
-								.applyMatrix4( _projScreenMatrix );
-
-						}
-
-						if ( Array.isArray( material ) ) {
-
-							const groups = geometry.groups;
-
-							for ( let i = 0, l = groups.length; i < l; i ++ ) {
-
-								const group = groups[ i ];
-								const groupMaterial = material[ group.materialIndex ];
-
-								if ( groupMaterial && groupMaterial.visible ) {
-
-									currentRenderList.push( object, geometry, groupMaterial, groupOrder, _vector3.z, group );
-
-								}
-
-							}
-
-						} else if ( material.visible ) {
-
-							currentRenderList.push( object, geometry, material, groupOrder, _vector3.z, null );
-
-						}
-
-					}
-
-				}
-
-			}
-
-			const children = object.children;
-
-			for ( let i = 0, l = children.length; i < l; i ++ ) {
-
-				projectObject( children[ i ], camera, groupOrder, sortObjects );
-
-			}
-
-		}
-
-		function renderScene( currentRenderList, scene, camera, viewport ) {
-
-			const opaqueObjects = currentRenderList.opaque;
-			const transmissiveObjects = currentRenderList.transmissive;
-			const transparentObjects = currentRenderList.transparent;
-
-			currentRenderState.setupLightsView( camera );
-
-			if ( _clippingEnabled === true ) clipping.setGlobalState( _this.clippingPlanes, camera );
-
-			if ( transmissiveObjects.length > 0 ) renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera );
-
-			if ( viewport ) state.viewport( _currentViewport.copy( viewport ) );
-
-			if ( opaqueObjects.length > 0 ) renderObjects( opaqueObjects, scene, camera );
-			if ( transmissiveObjects.length > 0 ) renderObjects( transmissiveObjects, scene, camera );
-			if ( transparentObjects.length > 0 ) renderObjects( transparentObjects, scene, camera );
-
-			// Ensure depth buffer writing is enabled so it can be cleared on next render
-
-			state.buffers.depth.setTest( true );
-			state.buffers.depth.setMask( true );
-			state.buffers.color.setMask( true );
-
-			state.setPolygonOffset( false );
-
-		}
-
-		function renderTransmissionPass( opaqueObjects, transmissiveObjects, scene, camera ) {
-
-			if ( _transmissionRenderTarget === null ) {
-
-				const isWebGL2 = capabilities.isWebGL2;
-
-				_transmissionRenderTarget = new WebGLRenderTarget( 1024, 1024, {
-					generateMipmaps: true,
-					type: extensions.has( 'EXT_color_buffer_half_float' ) ? HalfFloatType : UnsignedByteType,
-					minFilter: LinearMipmapLinearFilter,
-					samples: ( isWebGL2 && antialias === true ) ? 4 : 0
-				} );
-
-				// debug
-
-				/*
-				const geometry = new PlaneGeometry();
-				const material = new MeshBasicMaterial( { map: _transmissionRenderTarget.texture } );
-
-				const mesh = new Mesh( geometry, material );
-				scene.add( mesh );
-				*/
-
-			}
-
-			//
-
-			const currentRenderTarget = _this.getRenderTarget();
-			_this.setRenderTarget( _transmissionRenderTarget );
-			_this.clear();
-
-			// Turn off the features which can affect the frag color for opaque objects pass.
-			// Otherwise they are applied twice in opaque objects pass and transmission objects pass.
-			const currentToneMapping = _this.toneMapping;
-			_this.toneMapping = NoToneMapping;
-
-			renderObjects( opaqueObjects, scene, camera );
-
-			textures.updateMultisampleRenderTarget( _transmissionRenderTarget );
-			textures.updateRenderTargetMipmap( _transmissionRenderTarget );
-
-			let renderTargetNeedsUpdate = false;
-
-			for ( let i = 0, l = transmissiveObjects.length; i < l; i ++ ) {
-
-				const renderItem = transmissiveObjects[ i ];
-
-				const object = renderItem.object;
-				const geometry = renderItem.geometry;
-				const material = renderItem.material;
-				const group = renderItem.group;
-
-				if ( material.side === DoubleSide && object.layers.test( camera.layers ) ) {
-
-					const currentSide = material.side;
-
-					material.side = BackSide;
-					material.needsUpdate = true;
-
-					renderObject( object, scene, camera, geometry, material, group );
-
-					material.side = currentSide;
-					material.needsUpdate = true;
-
-					renderTargetNeedsUpdate = true;
-
-				}
-
-			}
-
-			if ( renderTargetNeedsUpdate === true ) {
-
-				textures.updateMultisampleRenderTarget( _transmissionRenderTarget );
-				textures.updateRenderTargetMipmap( _transmissionRenderTarget );
-
-			}
-
-			_this.setRenderTarget( currentRenderTarget );
-
-			_this.toneMapping = currentToneMapping;
-
-		}
-
-		function renderObjects( renderList, scene, camera ) {
-
-			const overrideMaterial = scene.isScene === true ? scene.overrideMaterial : null;
-
-			for ( let i = 0, l = renderList.length; i < l; i ++ ) {
-
-				const renderItem = renderList[ i ];
-
-				const object = renderItem.object;
-				const geometry = renderItem.geometry;
-				const material = overrideMaterial === null ? renderItem.material : overrideMaterial;
-				const group = renderItem.group;
-
-				if ( object.layers.test( camera.layers ) ) {
-
-					renderObject( object, scene, camera, geometry, material, group );
-
-				}
-
-			}
-
-		}
-
-		function renderObject( object, scene, camera, geometry, material, group ) {
-
-			object.onBeforeRender( _this, scene, camera, geometry, material, group );
-
-			object.modelViewMatrix.multiplyMatrices( camera.matrixWorldInverse, object.matrixWorld );
-			object.normalMatrix.getNormalMatrix( object.modelViewMatrix );
-
-			material.onBeforeRender( _this, scene, camera, geometry, object, group );
-
-			if ( material.transparent === true && material.side === DoubleSide && material.forceSinglePass === false ) {
-
-				material.side = BackSide;
-				material.needsUpdate = true;
-				_this.renderBufferDirect( camera, scene, geometry, material, object, group );
-
-				material.side = FrontSide;
-				material.needsUpdate = true;
-				_this.renderBufferDirect( camera, scene, geometry, material, object, group );
-
-				material.side = DoubleSide;
-
-			} else {
-
-				_this.renderBufferDirect( camera, scene, geometry, material, object, group );
-
-			}
-
-			object.onAfterRender( _this, scene, camera, geometry, material, group );
-
-		}
-
-		function getProgram( material, scene, object ) {
-
-			if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...
-
-			const materialProperties = properties.get( material );
-
-			const lights = currentRenderState.state.lights;
-			const shadowsArray = currentRenderState.state.shadowsArray;
-
-			const lightsStateVersion = lights.state.version;
-
-			const parameters = programCache.getParameters( material, lights.state, shadowsArray, scene, object );
-			const programCacheKey = programCache.getProgramCacheKey( parameters );
-
-			let programs = materialProperties.programs;
-
-			// always update environment and fog - changing these trigger an getProgram call, but it's possible that the program doesn't change
-
-			materialProperties.environment = material.isMeshStandardMaterial ? scene.environment : null;
-			materialProperties.fog = scene.fog;
-			materialProperties.envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || materialProperties.environment );
-
-			if ( programs === undefined ) {
-
-				// new material
-
-				material.addEventListener( 'dispose', onMaterialDispose );
-
-				programs = new Map();
-				materialProperties.programs = programs;
-
-			}
-
-			let program = programs.get( programCacheKey );
-
-			if ( program !== undefined ) {
-
-				// early out if program and light state is identical
-
-				if ( materialProperties.currentProgram === program && materialProperties.lightsStateVersion === lightsStateVersion ) {
-
-					updateCommonMaterialProperties( material, parameters );
-
-					return program;
-
-				}
-
-			} else {
-
-				parameters.uniforms = programCache.getUniforms( material );
-
-				material.onBuild( object, parameters, _this );
-
-				material.onBeforeCompile( parameters, _this );
-
-				program = programCache.acquireProgram( parameters, programCacheKey );
-				programs.set( programCacheKey, program );
-
-				materialProperties.uniforms = parameters.uniforms;
-
-			}
-
-			const uniforms = materialProperties.uniforms;
-
-			if ( ( ! material.isShaderMaterial && ! material.isRawShaderMaterial ) || material.clipping === true ) {
-
-				uniforms.clippingPlanes = clipping.uniform;
-
-			}
-
-			updateCommonMaterialProperties( material, parameters );
-
-			// store the light setup it was created for
-
-			materialProperties.needsLights = materialNeedsLights( material );
-			materialProperties.lightsStateVersion = lightsStateVersion;
-
-			if ( materialProperties.needsLights ) {
-
-				// wire up the material to this renderer's lighting state
-
-				uniforms.ambientLightColor.value = lights.state.ambient;
-				uniforms.lightProbe.value = lights.state.probe;
-				uniforms.directionalLights.value = lights.state.directional;
-				uniforms.directionalLightShadows.value = lights.state.directionalShadow;
-				uniforms.spotLights.value = lights.state.spot;
-				uniforms.spotLightShadows.value = lights.state.spotShadow;
-				uniforms.rectAreaLights.value = lights.state.rectArea;
-				uniforms.ltc_1.value = lights.state.rectAreaLTC1;
-				uniforms.ltc_2.value = lights.state.rectAreaLTC2;
-				uniforms.pointLights.value = lights.state.point;
-				uniforms.pointLightShadows.value = lights.state.pointShadow;
-				uniforms.hemisphereLights.value = lights.state.hemi;
-
-				uniforms.directionalShadowMap.value = lights.state.directionalShadowMap;
-				uniforms.directionalShadowMatrix.value = lights.state.directionalShadowMatrix;
-				uniforms.spotShadowMap.value = lights.state.spotShadowMap;
-				uniforms.spotLightMatrix.value = lights.state.spotLightMatrix;
-				uniforms.spotLightMap.value = lights.state.spotLightMap;
-				uniforms.pointShadowMap.value = lights.state.pointShadowMap;
-				uniforms.pointShadowMatrix.value = lights.state.pointShadowMatrix;
-				// TODO (abelnation): add area lights shadow info to uniforms
-
-			}
-
-			const progUniforms = program.getUniforms();
-			const uniformsList = WebGLUniforms.seqWithValue( progUniforms.seq, uniforms );
-
-			materialProperties.currentProgram = program;
-			materialProperties.uniformsList = uniformsList;
-
-			return program;
-
-		}
-
-		function updateCommonMaterialProperties( material, parameters ) {
-
-			const materialProperties = properties.get( material );
-
-			materialProperties.outputColorSpace = parameters.outputColorSpace;
-			materialProperties.instancing = parameters.instancing;
-			materialProperties.skinning = parameters.skinning;
-			materialProperties.morphTargets = parameters.morphTargets;
-			materialProperties.morphNormals = parameters.morphNormals;
-			materialProperties.morphColors = parameters.morphColors;
-			materialProperties.morphTargetsCount = parameters.morphTargetsCount;
-			materialProperties.numClippingPlanes = parameters.numClippingPlanes;
-			materialProperties.numIntersection = parameters.numClipIntersection;
-			materialProperties.vertexAlphas = parameters.vertexAlphas;
-			materialProperties.vertexTangents = parameters.vertexTangents;
-			materialProperties.toneMapping = parameters.toneMapping;
-
-		}
-
-		function setProgram( camera, scene, geometry, material, object ) {
-
-			if ( scene.isScene !== true ) scene = _emptyScene; // scene could be a Mesh, Line, Points, ...
-
-			textures.resetTextureUnits();
-
-			const fog = scene.fog;
-			const environment = material.isMeshStandardMaterial ? scene.environment : null;
-			const colorSpace = ( _currentRenderTarget === null ) ? _this.outputColorSpace : ( _currentRenderTarget.isXRRenderTarget === true ? _currentRenderTarget.texture.colorSpace : LinearSRGBColorSpace );
-			const envMap = ( material.isMeshStandardMaterial ? cubeuvmaps : cubemaps ).get( material.envMap || environment );
-			const vertexAlphas = material.vertexColors === true && !! geometry.attributes.color && geometry.attributes.color.itemSize === 4;
-			const vertexTangents = !! material.normalMap && !! geometry.attributes.tangent;
-			const morphTargets = !! geometry.morphAttributes.position;
-			const morphNormals = !! geometry.morphAttributes.normal;
-			const morphColors = !! geometry.morphAttributes.color;
-			const toneMapping = material.toneMapped ? _this.toneMapping : NoToneMapping;
-
-			const morphAttribute = geometry.morphAttributes.position || geometry.morphAttributes.normal || geometry.morphAttributes.color;
-			const morphTargetsCount = ( morphAttribute !== undefined ) ? morphAttribute.length : 0;
-
-			const materialProperties = properties.get( material );
-			const lights = currentRenderState.state.lights;
-
-			if ( _clippingEnabled === true ) {
-
-				if ( _localClippingEnabled === true || camera !== _currentCamera ) {
-
-					const useCache =
-						camera === _currentCamera &&
-						material.id === _currentMaterialId;
-
-					// we might want to call this function with some ClippingGroup
-					// object instead of the material, once it becomes feasible
-					// (#8465, #8379)
-					clipping.setState( material, camera, useCache );
-
-				}
-
-			}
-
-			//
-
-			let needsProgramChange = false;
-
-			if ( material.version === materialProperties.__version ) {
-
-				if ( materialProperties.needsLights && ( materialProperties.lightsStateVersion !== lights.state.version ) ) {
-
-					needsProgramChange = true;
-
-				} else if ( materialProperties.outputColorSpace !== colorSpace ) {
-
-					needsProgramChange = true;
-
-				} else if ( object.isInstancedMesh && materialProperties.instancing === false ) {
-
-					needsProgramChange = true;
-
-				} else if ( ! object.isInstancedMesh && materialProperties.instancing === true ) {
-
-					needsProgramChange = true;
-
-				} else if ( object.isSkinnedMesh && materialProperties.skinning === false ) {
-
-					needsProgramChange = true;
-
-				} else if ( ! object.isSkinnedMesh && materialProperties.skinning === true ) {
-
-					needsProgramChange = true;
-
-				} else if ( materialProperties.envMap !== envMap ) {
-
-					needsProgramChange = true;
-
-				} else if ( material.fog === true && materialProperties.fog !== fog ) {
-
-					needsProgramChange = true;
-
-				} else if ( materialProperties.numClippingPlanes !== undefined &&
-					( materialProperties.numClippingPlanes !== clipping.numPlanes ||
-					materialProperties.numIntersection !== clipping.numIntersection ) ) {
-
-					needsProgramChange = true;
-
-				} else if ( materialProperties.vertexAlphas !== vertexAlphas ) {
-
-					needsProgramChange = true;
-
-				} else if ( materialProperties.vertexTangents !== vertexTangents ) {
-
-					needsProgramChange = true;
-
-				} else if ( materialProperties.morphTargets !== morphTargets ) {
-
-					needsProgramChange = true;
-
-				} else if ( materialProperties.morphNormals !== morphNormals ) {
-
-					needsProgramChange = true;
-
-				} else if ( materialProperties.morphColors !== morphColors ) {
-
-					needsProgramChange = true;
-
-				} else if ( materialProperties.toneMapping !== toneMapping ) {
-
-					needsProgramChange = true;
-
-				} else if ( capabilities.isWebGL2 === true && materialProperties.morphTargetsCount !== morphTargetsCount ) {
-
-					needsProgramChange = true;
-
-				}
-
-			} else {
-
-				needsProgramChange = true;
-				materialProperties.__version = material.version;
-
-			}
-
-			//
-
-			let program = materialProperties.currentProgram;
-
-			if ( needsProgramChange === true ) {
-
-				program = getProgram( material, scene, object );
-
-			}
-
-			let refreshProgram = false;
-			let refreshMaterial = false;
-			let refreshLights = false;
-
-			const p_uniforms = program.getUniforms(),
-				m_uniforms = materialProperties.uniforms;
-
-			if ( state.useProgram( program.program ) ) {
-
-				refreshProgram = true;
-				refreshMaterial = true;
-				refreshLights = true;
-
-			}
-
-			if ( material.id !== _currentMaterialId ) {
-
-				_currentMaterialId = material.id;
-
-				refreshMaterial = true;
-
-			}
-
-			if ( refreshProgram || _currentCamera !== camera ) {
-
-				p_uniforms.setValue( _gl, 'projectionMatrix', camera.projectionMatrix );
-
-				if ( capabilities.logarithmicDepthBuffer ) {
-
-					p_uniforms.setValue( _gl, 'logDepthBufFC',
-						2.0 / ( Math.log( camera.far + 1.0 ) / Math.LN2 ) );
-
-				}
-
-				if ( _currentCamera !== camera ) {
-
-					_currentCamera = camera;
-
-					// lighting uniforms depend on the camera so enforce an update
-					// now, in case this material supports lights - or later, when
-					// the next material that does gets activated:
-
-					refreshMaterial = true;		// set to true on material change
-					refreshLights = true;		// remains set until update done
-
-				}
-
-				// load material specific uniforms
-				// (shader material also gets them for the sake of genericity)
-
-				if ( material.isShaderMaterial ||
-					material.isMeshPhongMaterial ||
-					material.isMeshToonMaterial ||
-					material.isMeshStandardMaterial ||
-					material.envMap ) {
-
-					const uCamPos = p_uniforms.map.cameraPosition;
-
-					if ( uCamPos !== undefined ) {
-
-						uCamPos.setValue( _gl,
-							_vector3.setFromMatrixPosition( camera.matrixWorld ) );
-
-					}
-
-				}
-
-				if ( material.isMeshPhongMaterial ||
-					material.isMeshToonMaterial ||
-					material.isMeshLambertMaterial ||
-					material.isMeshBasicMaterial ||
-					material.isMeshStandardMaterial ||
-					material.isShaderMaterial ) {
-
-					p_uniforms.setValue( _gl, 'isOrthographic', camera.isOrthographicCamera === true );
-
-				}
-
-				if ( material.isMeshPhongMaterial ||
-					material.isMeshToonMaterial ||
-					material.isMeshLambertMaterial ||
-					material.isMeshBasicMaterial ||
-					material.isMeshStandardMaterial ||
-					material.isShaderMaterial ||
-					material.isShadowMaterial ||
-					object.isSkinnedMesh ) {
-
-					p_uniforms.setValue( _gl, 'viewMatrix', camera.matrixWorldInverse );
-
-				}
-
-			}
-
-			// skinning and morph target uniforms must be set even if material didn't change
-			// auto-setting of texture unit for bone and morph texture must go before other textures
-			// otherwise textures used for skinning and morphing can take over texture units reserved for other material textures
-
-			if ( object.isSkinnedMesh ) {
-
-				p_uniforms.setOptional( _gl, object, 'bindMatrix' );
-				p_uniforms.setOptional( _gl, object, 'bindMatrixInverse' );
-
-				const skeleton = object.skeleton;
-
-				if ( skeleton ) {
-
-					if ( capabilities.floatVertexTextures ) {
-
-						if ( skeleton.boneTexture === null ) skeleton.computeBoneTexture();
-
-						p_uniforms.setValue( _gl, 'boneTexture', skeleton.boneTexture, textures );
-						p_uniforms.setValue( _gl, 'boneTextureSize', skeleton.boneTextureSize );
-
-					} else {
-
-						console.warn( 'THREE.WebGLRenderer: SkinnedMesh can only be used with WebGL 2. With WebGL 1 OES_texture_float and vertex textures support is required.' );
-
-					}
-
-				}
-
-			}
-
-			const morphAttributes = geometry.morphAttributes;
-
-			if ( morphAttributes.position !== undefined || morphAttributes.normal !== undefined || ( morphAttributes.color !== undefined && capabilities.isWebGL2 === true ) ) {
-
-				morphtargets.update( object, geometry, program );
-
-			}
-
-			if ( refreshMaterial || materialProperties.receiveShadow !== object.receiveShadow ) {
-
-				materialProperties.receiveShadow = object.receiveShadow;
-				p_uniforms.setValue( _gl, 'receiveShadow', object.receiveShadow );
-
-			}
-
-			// https://github.com/mrdoob/three.js/pull/24467#issuecomment-1209031512
-
-			if ( material.isMeshGouraudMaterial && material.envMap !== null ) {
-
-				m_uniforms.envMap.value = envMap;
-
-				m_uniforms.flipEnvMap.value = ( envMap.isCubeTexture && envMap.isRenderTargetTexture === false ) ? - 1 : 1;
-
-			}
-
-			if ( refreshMaterial ) {
-
-				p_uniforms.setValue( _gl, 'toneMappingExposure', _this.toneMappingExposure );
-
-				if ( materialProperties.needsLights ) {
-
-					// the current material requires lighting info
-
-					// note: all lighting uniforms are always set correctly
-					// they simply reference the renderer's state for their
-					// values
-					//
-					// use the current material's .needsUpdate flags to set
-					// the GL state when required
-
-					markUniformsLightsNeedsUpdate( m_uniforms, refreshLights );
-
-				}
-
-				// refresh uniforms common to several materials
-
-				if ( fog && material.fog === true ) {
-
-					materials.refreshFogUniforms( m_uniforms, fog );
-
-				}
-
-				materials.refreshMaterialUniforms( m_uniforms, material, _pixelRatio, _height, _transmissionRenderTarget );
-
-				WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );
-
-			}
-
-			if ( material.isShaderMaterial && material.uniformsNeedUpdate === true ) {
-
-				WebGLUniforms.upload( _gl, materialProperties.uniformsList, m_uniforms, textures );
-				material.uniformsNeedUpdate = false;
-
-			}
-
-			if ( material.isSpriteMaterial ) {
-
-				p_uniforms.setValue( _gl, 'center', object.center );
-
-			}
-
-			// common matrices
-
-			p_uniforms.setValue( _gl, 'modelViewMatrix', object.modelViewMatrix );
-			p_uniforms.setValue( _gl, 'normalMatrix', object.normalMatrix );
-			p_uniforms.setValue( _gl, 'modelMatrix', object.matrixWorld );
-
-			// UBOs
-
-			if ( material.isShaderMaterial || material.isRawShaderMaterial ) {
-
-				const groups = material.uniformsGroups;
-
-				for ( let i = 0, l = groups.length; i < l; i ++ ) {
-
-					if ( capabilities.isWebGL2 ) {
-
-						const group = groups[ i ];
-
-						uniformsGroups.update( group, program );
-						uniformsGroups.bind( group, program );
-
-					} else {
-
-						console.warn( 'THREE.WebGLRenderer: Uniform Buffer Objects can only be used with WebGL 2.' );
-
-					}
-
-				}
-
-			}
-
-			return program;
-
-		}
-
-		// If uniforms are marked as clean, they don't need to be loaded to the GPU.
-
-		function markUniformsLightsNeedsUpdate( uniforms, value ) {
-
-			uniforms.ambientLightColor.needsUpdate = value;
-			uniforms.lightProbe.needsUpdate = value;
-
-			uniforms.directionalLights.needsUpdate = value;
-			uniforms.directionalLightShadows.needsUpdate = value;
-			uniforms.pointLights.needsUpdate = value;
-			uniforms.pointLightShadows.needsUpdate = value;
-			uniforms.spotLights.needsUpdate = value;
-			uniforms.spotLightShadows.needsUpdate = value;
-			uniforms.rectAreaLights.needsUpdate = value;
-			uniforms.hemisphereLights.needsUpdate = value;
-
-		}
-
-		function materialNeedsLights( material ) {
-
-			return material.isMeshLambertMaterial || material.isMeshToonMaterial || material.isMeshPhongMaterial ||
-				material.isMeshStandardMaterial || material.isShadowMaterial ||
-				( material.isShaderMaterial && material.lights === true );
-
-		}
-
-		this.getActiveCubeFace = function () {
-
-			return _currentActiveCubeFace;
-
-		};
-
-		this.getActiveMipmapLevel = function () {
-
-			return _currentActiveMipmapLevel;
-
-		};
-
-		this.getRenderTarget = function () {
-
-			return _currentRenderTarget;
-
-		};
-
-		this.setRenderTargetTextures = function ( renderTarget, colorTexture, depthTexture ) {
-
-			properties.get( renderTarget.texture ).__webglTexture = colorTexture;
-			properties.get( renderTarget.depthTexture ).__webglTexture = depthTexture;
-
-			const renderTargetProperties = properties.get( renderTarget );
-			renderTargetProperties.__hasExternalTextures = true;
-
-			if ( renderTargetProperties.__hasExternalTextures ) {
-
-				renderTargetProperties.__autoAllocateDepthBuffer = depthTexture === undefined;
-
-				if ( ! renderTargetProperties.__autoAllocateDepthBuffer ) {
-
-					// The multisample_render_to_texture extension doesn't work properly if there
-					// are midframe flushes and an external depth buffer. Disable use of the extension.
-					if ( extensions.has( 'WEBGL_multisampled_render_to_texture' ) === true ) {
-
-						console.warn( 'THREE.WebGLRenderer: Render-to-texture extension was disabled because an external texture was provided' );
-						renderTargetProperties.__useRenderToTexture = false;
-
-					}
-
-				}
-
-			}
-
-		};
-
-		this.setRenderTargetFramebuffer = function ( renderTarget, defaultFramebuffer ) {
-
-			const renderTargetProperties = properties.get( renderTarget );
-			renderTargetProperties.__webglFramebuffer = defaultFramebuffer;
-			renderTargetProperties.__useDefaultFramebuffer = defaultFramebuffer === undefined;
-
-		};
-
-		this.setRenderTarget = function ( renderTarget, activeCubeFace = 0, activeMipmapLevel = 0 ) {
-
-			_currentRenderTarget = renderTarget;
-			_currentActiveCubeFace = activeCubeFace;
-			_currentActiveMipmapLevel = activeMipmapLevel;
-
-			let useDefaultFramebuffer = true;
-			let framebuffer = null;
-			let isCube = false;
-			let isRenderTarget3D = false;
-
-			if ( renderTarget ) {
-
-				const renderTargetProperties = properties.get( renderTarget );
-
-				if ( renderTargetProperties.__useDefaultFramebuffer !== undefined ) {
-
-					// We need to make sure to rebind the framebuffer.
-					state.bindFramebuffer( _gl.FRAMEBUFFER, null );
-					useDefaultFramebuffer = false;
-
-				} else if ( renderTargetProperties.__webglFramebuffer === undefined ) {
-
-					textures.setupRenderTarget( renderTarget );
-
-				} else if ( renderTargetProperties.__hasExternalTextures ) {
-
-					// Color and depth texture must be rebound in order for the swapchain to update.
-					textures.rebindTextures( renderTarget, properties.get( renderTarget.texture ).__webglTexture, properties.get( renderTarget.depthTexture ).__webglTexture );
-
-				}
-
-				const texture = renderTarget.texture;
-
-				if ( texture.isData3DTexture || texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {
-
-					isRenderTarget3D = true;
-
-				}
-
-				const __webglFramebuffer = properties.get( renderTarget ).__webglFramebuffer;
-
-				if ( renderTarget.isWebGLCubeRenderTarget ) {
-
-					framebuffer = __webglFramebuffer[ activeCubeFace ];
-					isCube = true;
-
-				} else if ( ( capabilities.isWebGL2 && renderTarget.samples > 0 ) && textures.useMultisampledRTT( renderTarget ) === false ) {
-
-					framebuffer = properties.get( renderTarget ).__webglMultisampledFramebuffer;
-
-				} else {
-
-					framebuffer = __webglFramebuffer;
-
-				}
-
-				_currentViewport.copy( renderTarget.viewport );
-				_currentScissor.copy( renderTarget.scissor );
-				_currentScissorTest = renderTarget.scissorTest;
-
-			} else {
-
-				_currentViewport.copy( _viewport ).multiplyScalar( _pixelRatio ).floor();
-				_currentScissor.copy( _scissor ).multiplyScalar( _pixelRatio ).floor();
-				_currentScissorTest = _scissorTest;
-
-			}
-
-			const framebufferBound = state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
-
-			if ( framebufferBound && capabilities.drawBuffers && useDefaultFramebuffer ) {
-
-				state.drawBuffers( renderTarget, framebuffer );
-
-			}
-
-			state.viewport( _currentViewport );
-			state.scissor( _currentScissor );
-			state.setScissorTest( _currentScissorTest );
-
-			if ( isCube ) {
-
-				const textureProperties = properties.get( renderTarget.texture );
-				_gl.framebufferTexture2D( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, _gl.TEXTURE_CUBE_MAP_POSITIVE_X + activeCubeFace, textureProperties.__webglTexture, activeMipmapLevel );
-
-			} else if ( isRenderTarget3D ) {
-
-				const textureProperties = properties.get( renderTarget.texture );
-				const layer = activeCubeFace || 0;
-				_gl.framebufferTextureLayer( _gl.FRAMEBUFFER, _gl.COLOR_ATTACHMENT0, textureProperties.__webglTexture, activeMipmapLevel || 0, layer );
-
-			}
-
-			_currentMaterialId = - 1; // reset current material to ensure correct uniform bindings
-
-		};
-
-		this.readRenderTargetPixels = function ( renderTarget, x, y, width, height, buffer, activeCubeFaceIndex ) {
-
-			if ( ! ( renderTarget && renderTarget.isWebGLRenderTarget ) ) {
-
-				console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.' );
-				return;
-
-			}
-
-			let framebuffer = properties.get( renderTarget ).__webglFramebuffer;
-
-			if ( renderTarget.isWebGLCubeRenderTarget && activeCubeFaceIndex !== undefined ) {
-
-				framebuffer = framebuffer[ activeCubeFaceIndex ];
-
-			}
-
-			if ( framebuffer ) {
-
-				state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
-
-				try {
-
-					const texture = renderTarget.texture;
-					const textureFormat = texture.format;
-					const textureType = texture.type;
-
-					if ( textureFormat !== RGBAFormat && utils.convert( textureFormat ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_FORMAT ) ) {
-
-						console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.' );
-						return;
-
-					}
-
-					const halfFloatSupportedByExt = ( textureType === HalfFloatType ) && ( extensions.has( 'EXT_color_buffer_half_float' ) || ( capabilities.isWebGL2 && extensions.has( 'EXT_color_buffer_float' ) ) );
-
-					if ( textureType !== UnsignedByteType && utils.convert( textureType ) !== _gl.getParameter( _gl.IMPLEMENTATION_COLOR_READ_TYPE ) && // Edge and Chrome Mac < 52 (#9513)
-						! ( textureType === FloatType && ( capabilities.isWebGL2 || extensions.has( 'OES_texture_float' ) || extensions.has( 'WEBGL_color_buffer_float' ) ) ) && // Chrome Mac >= 52 and Firefox
-						! halfFloatSupportedByExt ) {
-
-						console.error( 'THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.' );
-						return;
-
-					}
-
-					// the following if statement ensures valid read requests (no out-of-bounds pixels, see #8604)
-
-					if ( ( x >= 0 && x <= ( renderTarget.width - width ) ) && ( y >= 0 && y <= ( renderTarget.height - height ) ) ) {
-
-						_gl.readPixels( x, y, width, height, utils.convert( textureFormat ), utils.convert( textureType ), buffer );
-
-					}
-
-				} finally {
-
-					// restore framebuffer of current render target if necessary
-
-					const framebuffer = ( _currentRenderTarget !== null ) ? properties.get( _currentRenderTarget ).__webglFramebuffer : null;
-					state.bindFramebuffer( _gl.FRAMEBUFFER, framebuffer );
-
-				}
-
-			}
-
-		};
-
-		this.copyFramebufferToTexture = function ( position, texture, level = 0 ) {
-
-			const levelScale = Math.pow( 2, - level );
-			const width = Math.floor( texture.image.width * levelScale );
-			const height = Math.floor( texture.image.height * levelScale );
-
-			textures.setTexture2D( texture, 0 );
-
-			_gl.copyTexSubImage2D( _gl.TEXTURE_2D, level, 0, 0, position.x, position.y, width, height );
-
-			state.unbindTexture();
-
-		};
-
-		this.copyTextureToTexture = function ( position, srcTexture, dstTexture, level = 0 ) {
-
-			const width = srcTexture.image.width;
-			const height = srcTexture.image.height;
-			const glFormat = utils.convert( dstTexture.format );
-			const glType = utils.convert( dstTexture.type );
-
-			textures.setTexture2D( dstTexture, 0 );
-
-			// As another texture upload may have changed pixelStorei
-			// parameters, make sure they are correct for the dstTexture
-			_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
-			_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
-			_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
-
-			if ( srcTexture.isDataTexture ) {
-
-				_gl.texSubImage2D( _gl.TEXTURE_2D, level, position.x, position.y, width, height, glFormat, glType, srcTexture.image.data );
-
-			} else {
-
-				if ( srcTexture.isCompressedTexture ) {
-
-					_gl.compressedTexSubImage2D( _gl.TEXTURE_2D, level, position.x, position.y, srcTexture.mipmaps[ 0 ].width, srcTexture.mipmaps[ 0 ].height, glFormat, srcTexture.mipmaps[ 0 ].data );
-
-				} else {
-
-					_gl.texSubImage2D( _gl.TEXTURE_2D, level, position.x, position.y, glFormat, glType, srcTexture.image );
-
-				}
-
-			}
-
-			// Generate mipmaps only when copying level 0
-			if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( _gl.TEXTURE_2D );
-
-			state.unbindTexture();
-
-		};
-
-		this.copyTextureToTexture3D = function ( sourceBox, position, srcTexture, dstTexture, level = 0 ) {
-
-			if ( _this.isWebGL1Renderer ) {
-
-				console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: can only be used with WebGL2.' );
-				return;
-
-			}
-
-			const width = sourceBox.max.x - sourceBox.min.x + 1;
-			const height = sourceBox.max.y - sourceBox.min.y + 1;
-			const depth = sourceBox.max.z - sourceBox.min.z + 1;
-			const glFormat = utils.convert( dstTexture.format );
-			const glType = utils.convert( dstTexture.type );
-			let glTarget;
-
-			if ( dstTexture.isData3DTexture ) {
-
-				textures.setTexture3D( dstTexture, 0 );
-				glTarget = _gl.TEXTURE_3D;
-
-			} else if ( dstTexture.isDataArrayTexture ) {
-
-				textures.setTexture2DArray( dstTexture, 0 );
-				glTarget = _gl.TEXTURE_2D_ARRAY;
-
-			} else {
-
-				console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: only supports THREE.DataTexture3D and THREE.DataTexture2DArray.' );
-				return;
-
-			}
-
-			_gl.pixelStorei( _gl.UNPACK_FLIP_Y_WEBGL, dstTexture.flipY );
-			_gl.pixelStorei( _gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, dstTexture.premultiplyAlpha );
-			_gl.pixelStorei( _gl.UNPACK_ALIGNMENT, dstTexture.unpackAlignment );
-
-			const unpackRowLen = _gl.getParameter( _gl.UNPACK_ROW_LENGTH );
-			const unpackImageHeight = _gl.getParameter( _gl.UNPACK_IMAGE_HEIGHT );
-			const unpackSkipPixels = _gl.getParameter( _gl.UNPACK_SKIP_PIXELS );
-			const unpackSkipRows = _gl.getParameter( _gl.UNPACK_SKIP_ROWS );
-			const unpackSkipImages = _gl.getParameter( _gl.UNPACK_SKIP_IMAGES );
-
-			const image = srcTexture.isCompressedTexture ? srcTexture.mipmaps[ 0 ] : srcTexture.image;
-
-			_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, image.width );
-			_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, image.height );
-			_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, sourceBox.min.x );
-			_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, sourceBox.min.y );
-			_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, sourceBox.min.z );
-
-			if ( srcTexture.isDataTexture || srcTexture.isData3DTexture ) {
-
-				_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image.data );
-
-			} else {
-
-				if ( srcTexture.isCompressedArrayTexture ) {
-
-					console.warn( 'THREE.WebGLRenderer.copyTextureToTexture3D: untested support for compressed srcTexture.' );
-					_gl.compressedTexSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, image.data );
-
-				} else {
-
-					_gl.texSubImage3D( glTarget, level, position.x, position.y, position.z, width, height, depth, glFormat, glType, image );
-
-				}
-
-			}
-
-			_gl.pixelStorei( _gl.UNPACK_ROW_LENGTH, unpackRowLen );
-			_gl.pixelStorei( _gl.UNPACK_IMAGE_HEIGHT, unpackImageHeight );
-			_gl.pixelStorei( _gl.UNPACK_SKIP_PIXELS, unpackSkipPixels );
-			_gl.pixelStorei( _gl.UNPACK_SKIP_ROWS, unpackSkipRows );
-			_gl.pixelStorei( _gl.UNPACK_SKIP_IMAGES, unpackSkipImages );
-
-			// Generate mipmaps only when copying level 0
-			if ( level === 0 && dstTexture.generateMipmaps ) _gl.generateMipmap( glTarget );
-
-			state.unbindTexture();
-
-		};
-
-		this.initTexture = function ( texture ) {
-
-			if ( texture.isCubeTexture ) {
-
-				textures.setTextureCube( texture, 0 );
-
-			} else if ( texture.isData3DTexture ) {
-
-				textures.setTexture3D( texture, 0 );
-
-			} else if ( texture.isDataArrayTexture || texture.isCompressedArrayTexture ) {
-
-				textures.setTexture2DArray( texture, 0 );
-
-			} else {
-
-				textures.setTexture2D( texture, 0 );
-
-			}
-
-			state.unbindTexture();
-
-		};
-
-		this.resetState = function () {
-
-			_currentActiveCubeFace = 0;
-			_currentActiveMipmapLevel = 0;
-			_currentRenderTarget = null;
-
-			state.reset();
-			bindingStates.reset();
-
-		};
-
-		if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {
-
-			__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );
-
-		}
-
-	}
-
-	get physicallyCorrectLights() { // @deprecated, r150
-
-		console.warn( 'THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.' );
-		return ! this.useLegacyLights;
-
-	}
-
-	set physicallyCorrectLights( value ) { // @deprecated, r150
-
-		console.warn( 'THREE.WebGLRenderer: the property .physicallyCorrectLights has been removed. Set renderer.useLegacyLights instead.' );
-		this.useLegacyLights = ! value;
-
-	}
-
-	get outputEncoding() { // @deprecated, r152
-
-		console.warn( 'THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead.' );
-		return this.outputColorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;
-
-	}
-
-	set outputEncoding( encoding ) { // @deprecated, r152
-
-		console.warn( 'THREE.WebGLRenderer: Property .outputEncoding has been removed. Use .outputColorSpace instead.' );
-		this.outputColorSpace = encoding === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;
-
-	}
-
-}
-
-class WebGL1Renderer extends WebGLRenderer {}
-
-WebGL1Renderer.prototype.isWebGL1Renderer = true;
-
-class FogExp2 {
-
-	constructor( color, density = 0.00025 ) {
-
-		this.isFogExp2 = true;
-
-		this.name = '';
-
-		this.color = new Color( color );
-		this.density = density;
-
-	}
-
-	clone() {
-
-		return new FogExp2( this.color, this.density );
-
-	}
-
-	toJSON( /* meta */ ) {
-
-		return {
-			type: 'FogExp2',
-			color: this.color.getHex(),
-			density: this.density
-		};
-
-	}
-
-}
-
-class Fog {
-
-	constructor( color, near = 1, far = 1000 ) {
-
-		this.isFog = true;
-
-		this.name = '';
-
-		this.color = new Color( color );
-
-		this.near = near;
-		this.far = far;
-
-	}
-
-	clone() {
-
-		return new Fog( this.color, this.near, this.far );
-
-	}
-
-	toJSON( /* meta */ ) {
-
-		return {
-			type: 'Fog',
-			color: this.color.getHex(),
-			near: this.near,
-			far: this.far
-		};
-
-	}
-
-}
-
-class Scene extends Object3D {
-
-	constructor() {
-
-		super();
-
-		this.isScene = true;
-
-		this.type = 'Scene';
-
-		this.background = null;
-		this.environment = null;
-		this.fog = null;
-
-		this.backgroundBlurriness = 0;
-		this.backgroundIntensity = 1;
-
-		this.overrideMaterial = null;
-
-		if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {
-
-			__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'observe', { detail: this } ) );
-
-		}
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		if ( source.background !== null ) this.background = source.background.clone();
-		if ( source.environment !== null ) this.environment = source.environment.clone();
-		if ( source.fog !== null ) this.fog = source.fog.clone();
-
-		this.backgroundBlurriness = source.backgroundBlurriness;
-		this.backgroundIntensity = source.backgroundIntensity;
-
-		if ( source.overrideMaterial !== null ) this.overrideMaterial = source.overrideMaterial.clone();
-
-		this.matrixAutoUpdate = source.matrixAutoUpdate;
-
-		return this;
-
-	}
-
-	toJSON( meta ) {
-
-		const data = super.toJSON( meta );
-
-		if ( this.fog !== null ) data.object.fog = this.fog.toJSON();
-		if ( this.backgroundBlurriness > 0 ) data.object.backgroundBlurriness = this.backgroundBlurriness;
-		if ( this.backgroundIntensity !== 1 ) data.object.backgroundIntensity = this.backgroundIntensity;
-
-		return data;
-
-	}
-
-	get autoUpdate() { // @deprecated, r144
-
-		console.warn( 'THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144.' );
-		return this.matrixWorldAutoUpdate;
-
-	}
-
-	set autoUpdate( value ) { // @deprecated, r144
-
-		console.warn( 'THREE.Scene: autoUpdate was renamed to matrixWorldAutoUpdate in r144.' );
-		this.matrixWorldAutoUpdate = value;
-
-	}
-
-}
-
-class InterleavedBuffer {
-
-	constructor( array, stride ) {
-
-		this.isInterleavedBuffer = true;
-
-		this.array = array;
-		this.stride = stride;
-		this.count = array !== undefined ? array.length / stride : 0;
-
-		this.usage = StaticDrawUsage;
-		this.updateRange = { offset: 0, count: - 1 };
-
-		this.version = 0;
-
-		this.uuid = generateUUID();
-
-	}
-
-	onUploadCallback() {}
-
-	set needsUpdate( value ) {
-
-		if ( value === true ) this.version ++;
-
-	}
-
-	setUsage( value ) {
-
-		this.usage = value;
-
-		return this;
-
-	}
-
-	copy( source ) {
-
-		this.array = new source.array.constructor( source.array );
-		this.count = source.count;
-		this.stride = source.stride;
-		this.usage = source.usage;
-
-		return this;
-
-	}
-
-	copyAt( index1, attribute, index2 ) {
-
-		index1 *= this.stride;
-		index2 *= attribute.stride;
-
-		for ( let i = 0, l = this.stride; i < l; i ++ ) {
-
-			this.array[ index1 + i ] = attribute.array[ index2 + i ];
-
-		}
-
-		return this;
-
-	}
-
-	set( value, offset = 0 ) {
-
-		this.array.set( value, offset );
-
-		return this;
-
-	}
-
-	clone( data ) {
-
-		if ( data.arrayBuffers === undefined ) {
-
-			data.arrayBuffers = {};
-
-		}
-
-		if ( this.array.buffer._uuid === undefined ) {
-
-			this.array.buffer._uuid = generateUUID();
-
-		}
-
-		if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {
-
-			data.arrayBuffers[ this.array.buffer._uuid ] = this.array.slice( 0 ).buffer;
-
-		}
-
-		const array = new this.array.constructor( data.arrayBuffers[ this.array.buffer._uuid ] );
-
-		const ib = new this.constructor( array, this.stride );
-		ib.setUsage( this.usage );
-
-		return ib;
-
-	}
-
-	onUpload( callback ) {
-
-		this.onUploadCallback = callback;
-
-		return this;
-
-	}
-
-	toJSON( data ) {
-
-		if ( data.arrayBuffers === undefined ) {
-
-			data.arrayBuffers = {};
-
-		}
-
-		// generate UUID for array buffer if necessary
-
-		if ( this.array.buffer._uuid === undefined ) {
-
-			this.array.buffer._uuid = generateUUID();
-
-		}
-
-		if ( data.arrayBuffers[ this.array.buffer._uuid ] === undefined ) {
-
-			data.arrayBuffers[ this.array.buffer._uuid ] = Array.from( new Uint32Array( this.array.buffer ) );
-
-		}
-
-		//
-
-		return {
-			uuid: this.uuid,
-			buffer: this.array.buffer._uuid,
-			type: this.array.constructor.name,
-			stride: this.stride
-		};
-
-	}
-
-}
-
-const _vector$5 = /*@__PURE__*/ new Vector3();
-
-class InterleavedBufferAttribute {
-
-	constructor( interleavedBuffer, itemSize, offset, normalized = false ) {
-
-		this.isInterleavedBufferAttribute = true;
-
-		this.name = '';
-
-		this.data = interleavedBuffer;
-		this.itemSize = itemSize;
-		this.offset = offset;
-
-		this.normalized = normalized;
-
-	}
-
-	get count() {
-
-		return this.data.count;
-
-	}
-
-	get array() {
-
-		return this.data.array;
-
-	}
-
-	set needsUpdate( value ) {
-
-		this.data.needsUpdate = value;
-
-	}
-
-	applyMatrix4( m ) {
-
-		for ( let i = 0, l = this.data.count; i < l; i ++ ) {
-
-			_vector$5.fromBufferAttribute( this, i );
-
-			_vector$5.applyMatrix4( m );
-
-			this.setXYZ( i, _vector$5.x, _vector$5.y, _vector$5.z );
-
-		}
-
-		return this;
-
-	}
-
-	applyNormalMatrix( m ) {
-
-		for ( let i = 0, l = this.count; i < l; i ++ ) {
-
-			_vector$5.fromBufferAttribute( this, i );
-
-			_vector$5.applyNormalMatrix( m );
-
-			this.setXYZ( i, _vector$5.x, _vector$5.y, _vector$5.z );
-
-		}
-
-		return this;
-
-	}
-
-	transformDirection( m ) {
-
-		for ( let i = 0, l = this.count; i < l; i ++ ) {
-
-			_vector$5.fromBufferAttribute( this, i );
-
-			_vector$5.transformDirection( m );
-
-			this.setXYZ( i, _vector$5.x, _vector$5.y, _vector$5.z );
-
-		}
-
-		return this;
-
-	}
-
-	setX( index, x ) {
-
-		if ( this.normalized ) x = normalize( x, this.array );
-
-		this.data.array[ index * this.data.stride + this.offset ] = x;
-
-		return this;
-
-	}
-
-	setY( index, y ) {
-
-		if ( this.normalized ) y = normalize( y, this.array );
-
-		this.data.array[ index * this.data.stride + this.offset + 1 ] = y;
-
-		return this;
-
-	}
-
-	setZ( index, z ) {
-
-		if ( this.normalized ) z = normalize( z, this.array );
-
-		this.data.array[ index * this.data.stride + this.offset + 2 ] = z;
-
-		return this;
-
-	}
-
-	setW( index, w ) {
-
-		if ( this.normalized ) w = normalize( w, this.array );
-
-		this.data.array[ index * this.data.stride + this.offset + 3 ] = w;
-
-		return this;
-
-	}
-
-	getX( index ) {
-
-		let x = this.data.array[ index * this.data.stride + this.offset ];
-
-		if ( this.normalized ) x = denormalize( x, this.array );
-
-		return x;
-
-	}
-
-	getY( index ) {
-
-		let y = this.data.array[ index * this.data.stride + this.offset + 1 ];
-
-		if ( this.normalized ) y = denormalize( y, this.array );
-
-		return y;
-
-	}
-
-	getZ( index ) {
-
-		let z = this.data.array[ index * this.data.stride + this.offset + 2 ];
-
-		if ( this.normalized ) z = denormalize( z, this.array );
-
-		return z;
-
-	}
-
-	getW( index ) {
-
-		let w = this.data.array[ index * this.data.stride + this.offset + 3 ];
-
-		if ( this.normalized ) w = denormalize( w, this.array );
-
-		return w;
-
-	}
-
-	setXY( index, x, y ) {
-
-		index = index * this.data.stride + this.offset;
-
-		if ( this.normalized ) {
-
-			x = normalize( x, this.array );
-			y = normalize( y, this.array );
-
-		}
-
-		this.data.array[ index + 0 ] = x;
-		this.data.array[ index + 1 ] = y;
-
-		return this;
-
-	}
-
-	setXYZ( index, x, y, z ) {
-
-		index = index * this.data.stride + this.offset;
-
-		if ( this.normalized ) {
-
-			x = normalize( x, this.array );
-			y = normalize( y, this.array );
-			z = normalize( z, this.array );
-
-		}
-
-		this.data.array[ index + 0 ] = x;
-		this.data.array[ index + 1 ] = y;
-		this.data.array[ index + 2 ] = z;
-
-		return this;
-
-	}
-
-	setXYZW( index, x, y, z, w ) {
-
-		index = index * this.data.stride + this.offset;
-
-		if ( this.normalized ) {
-
-			x = normalize( x, this.array );
-			y = normalize( y, this.array );
-			z = normalize( z, this.array );
-			w = normalize( w, this.array );
-
-		}
-
-		this.data.array[ index + 0 ] = x;
-		this.data.array[ index + 1 ] = y;
-		this.data.array[ index + 2 ] = z;
-		this.data.array[ index + 3 ] = w;
-
-		return this;
-
-	}
-
-	clone( data ) {
-
-		if ( data === undefined ) {
-
-			console.log( 'THREE.InterleavedBufferAttribute.clone(): Cloning an interleaved buffer attribute will de-interleave buffer data.' );
-
-			const array = [];
-
-			for ( let i = 0; i < this.count; i ++ ) {
-
-				const index = i * this.data.stride + this.offset;
-
-				for ( let j = 0; j < this.itemSize; j ++ ) {
-
-					array.push( this.data.array[ index + j ] );
-
-				}
-
-			}
-
-			return new BufferAttribute( new this.array.constructor( array ), this.itemSize, this.normalized );
-
-		} else {
-
-			if ( data.interleavedBuffers === undefined ) {
-
-				data.interleavedBuffers = {};
-
-			}
-
-			if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {
-
-				data.interleavedBuffers[ this.data.uuid ] = this.data.clone( data );
-
-			}
-
-			return new InterleavedBufferAttribute( data.interleavedBuffers[ this.data.uuid ], this.itemSize, this.offset, this.normalized );
-
-		}
-
-	}
-
-	toJSON( data ) {
-
-		if ( data === undefined ) {
-
-			console.log( 'THREE.InterleavedBufferAttribute.toJSON(): Serializing an interleaved buffer attribute will de-interleave buffer data.' );
-
-			const array = [];
-
-			for ( let i = 0; i < this.count; i ++ ) {
-
-				const index = i * this.data.stride + this.offset;
-
-				for ( let j = 0; j < this.itemSize; j ++ ) {
-
-					array.push( this.data.array[ index + j ] );
-
-				}
-
-			}
-
-			// de-interleave data and save it as an ordinary buffer attribute for now
-
-			return {
-				itemSize: this.itemSize,
-				type: this.array.constructor.name,
-				array: array,
-				normalized: this.normalized
-			};
-
-		} else {
-
-			// save as true interleaved attribute
-
-			if ( data.interleavedBuffers === undefined ) {
-
-				data.interleavedBuffers = {};
-
-			}
-
-			if ( data.interleavedBuffers[ this.data.uuid ] === undefined ) {
-
-				data.interleavedBuffers[ this.data.uuid ] = this.data.toJSON( data );
-
-			}
-
-			return {
-				isInterleavedBufferAttribute: true,
-				itemSize: this.itemSize,
-				data: this.data.uuid,
-				offset: this.offset,
-				normalized: this.normalized
-			};
-
-		}
-
-	}
-
-}
-
-class SpriteMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isSpriteMaterial = true;
-
-		this.type = 'SpriteMaterial';
-
-		this.color = new Color( 0xffffff );
-
-		this.map = null;
-
-		this.alphaMap = null;
-
-		this.rotation = 0;
-
-		this.sizeAttenuation = true;
-
-		this.transparent = true;
-
-		this.fog = true;
-
-		this.setValues( parameters );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.color.copy( source.color );
-
-		this.map = source.map;
-
-		this.alphaMap = source.alphaMap;
-
-		this.rotation = source.rotation;
-
-		this.sizeAttenuation = source.sizeAttenuation;
-
-		this.fog = source.fog;
-
-		return this;
-
-	}
-
-}
-
-let _geometry;
-
-const _intersectPoint = /*@__PURE__*/ new Vector3();
-const _worldScale = /*@__PURE__*/ new Vector3();
-const _mvPosition = /*@__PURE__*/ new Vector3();
-
-const _alignedPosition = /*@__PURE__*/ new Vector2();
-const _rotatedPosition = /*@__PURE__*/ new Vector2();
-const _viewWorldMatrix = /*@__PURE__*/ new Matrix4();
-
-const _vA = /*@__PURE__*/ new Vector3();
-const _vB = /*@__PURE__*/ new Vector3();
-const _vC = /*@__PURE__*/ new Vector3();
-
-const _uvA = /*@__PURE__*/ new Vector2();
-const _uvB = /*@__PURE__*/ new Vector2();
-const _uvC = /*@__PURE__*/ new Vector2();
-
-class Sprite extends Object3D {
-
-	constructor( material ) {
-
-		super();
-
-		this.isSprite = true;
-
-		this.type = 'Sprite';
-
-		if ( _geometry === undefined ) {
-
-			_geometry = new BufferGeometry();
-
-			const float32Array = new Float32Array( [
-				- 0.5, - 0.5, 0, 0, 0,
-				0.5, - 0.5, 0, 1, 0,
-				0.5, 0.5, 0, 1, 1,
-				- 0.5, 0.5, 0, 0, 1
-			] );
-
-			const interleavedBuffer = new InterleavedBuffer( float32Array, 5 );
-
-			_geometry.setIndex( [ 0, 1, 2,	0, 2, 3 ] );
-			_geometry.setAttribute( 'position', new InterleavedBufferAttribute( interleavedBuffer, 3, 0, false ) );
-			_geometry.setAttribute( 'uv', new InterleavedBufferAttribute( interleavedBuffer, 2, 3, false ) );
-
-		}
-
-		this.geometry = _geometry;
-		this.material = ( material !== undefined ) ? material : new SpriteMaterial();
-
-		this.center = new Vector2( 0.5, 0.5 );
-
-	}
-
-	raycast( raycaster, intersects ) {
-
-		if ( raycaster.camera === null ) {
-
-			console.error( 'THREE.Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.' );
-
-		}
-
-		_worldScale.setFromMatrixScale( this.matrixWorld );
-
-		_viewWorldMatrix.copy( raycaster.camera.matrixWorld );
-		this.modelViewMatrix.multiplyMatrices( raycaster.camera.matrixWorldInverse, this.matrixWorld );
-
-		_mvPosition.setFromMatrixPosition( this.modelViewMatrix );
-
-		if ( raycaster.camera.isPerspectiveCamera && this.material.sizeAttenuation === false ) {
-
-			_worldScale.multiplyScalar( - _mvPosition.z );
-
-		}
-
-		const rotation = this.material.rotation;
-		let sin, cos;
-
-		if ( rotation !== 0 ) {
-
-			cos = Math.cos( rotation );
-			sin = Math.sin( rotation );
-
-		}
-
-		const center = this.center;
-
-		transformVertex( _vA.set( - 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );
-		transformVertex( _vB.set( 0.5, - 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );
-		transformVertex( _vC.set( 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );
-
-		_uvA.set( 0, 0 );
-		_uvB.set( 1, 0 );
-		_uvC.set( 1, 1 );
-
-		// check first triangle
-		let intersect = raycaster.ray.intersectTriangle( _vA, _vB, _vC, false, _intersectPoint );
-
-		if ( intersect === null ) {
-
-			// check second triangle
-			transformVertex( _vB.set( - 0.5, 0.5, 0 ), _mvPosition, center, _worldScale, sin, cos );
-			_uvB.set( 0, 1 );
-
-			intersect = raycaster.ray.intersectTriangle( _vA, _vC, _vB, false, _intersectPoint );
-			if ( intersect === null ) {
-
-				return;
-
-			}
-
-		}
-
-		const distance = raycaster.ray.origin.distanceTo( _intersectPoint );
-
-		if ( distance < raycaster.near || distance > raycaster.far ) return;
-
-		intersects.push( {
-
-			distance: distance,
-			point: _intersectPoint.clone(),
-			uv: Triangle.getInterpolation( _intersectPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() ),
-			face: null,
-			object: this
-
-		} );
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		if ( source.center !== undefined ) this.center.copy( source.center );
-
-		this.material = source.material;
-
-		return this;
-
-	}
-
-}
-
-function transformVertex( vertexPosition, mvPosition, center, scale, sin, cos ) {
-
-	// compute position in camera space
-	_alignedPosition.subVectors( vertexPosition, center ).addScalar( 0.5 ).multiply( scale );
-
-	// to check if rotation is not zero
-	if ( sin !== undefined ) {
-
-		_rotatedPosition.x = ( cos * _alignedPosition.x ) - ( sin * _alignedPosition.y );
-		_rotatedPosition.y = ( sin * _alignedPosition.x ) + ( cos * _alignedPosition.y );
-
-	} else {
-
-		_rotatedPosition.copy( _alignedPosition );
-
-	}
-
-
-	vertexPosition.copy( mvPosition );
-	vertexPosition.x += _rotatedPosition.x;
-	vertexPosition.y += _rotatedPosition.y;
-
-	// transform to world space
-	vertexPosition.applyMatrix4( _viewWorldMatrix );
-
-}
-
-const _v1$2 = /*@__PURE__*/ new Vector3();
-const _v2$1 = /*@__PURE__*/ new Vector3();
-
-class LOD extends Object3D {
-
-	constructor() {
-
-		super();
-
-		this._currentLevel = 0;
-
-		this.type = 'LOD';
-
-		Object.defineProperties( this, {
-			levels: {
-				enumerable: true,
-				value: []
-			},
-			isLOD: {
-				value: true,
-			}
-		} );
-
-		this.autoUpdate = true;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source, false );
-
-		const levels = source.levels;
-
-		for ( let i = 0, l = levels.length; i < l; i ++ ) {
-
-			const level = levels[ i ];
-
-			this.addLevel( level.object.clone(), level.distance, level.hysteresis );
-
-		}
-
-		this.autoUpdate = source.autoUpdate;
-
-		return this;
-
-	}
-
-	addLevel( object, distance = 0, hysteresis = 0 ) {
-
-		distance = Math.abs( distance );
-
-		const levels = this.levels;
-
-		let l;
-
-		for ( l = 0; l < levels.length; l ++ ) {
-
-			if ( distance < levels[ l ].distance ) {
-
-				break;
-
-			}
-
-		}
-
-		levels.splice( l, 0, { distance: distance, hysteresis: hysteresis, object: object } );
-
-		this.add( object );
-
-		return this;
-
-	}
-
-	getCurrentLevel() {
-
-		return this._currentLevel;
-
-	}
-
-
-
-	getObjectForDistance( distance ) {
-
-		const levels = this.levels;
-
-		if ( levels.length > 0 ) {
-
-			let i, l;
-
-			for ( i = 1, l = levels.length; i < l; i ++ ) {
-
-				let levelDistance = levels[ i ].distance;
-
-				if ( levels[ i ].object.visible ) {
-
-					levelDistance -= levelDistance * levels[ i ].hysteresis;
-
-				}
-
-				if ( distance < levelDistance ) {
-
-					break;
-
-				}
-
-			}
-
-			return levels[ i - 1 ].object;
-
-		}
-
-		return null;
-
-	}
-
-	raycast( raycaster, intersects ) {
-
-		const levels = this.levels;
-
-		if ( levels.length > 0 ) {
-
-			_v1$2.setFromMatrixPosition( this.matrixWorld );
-
-			const distance = raycaster.ray.origin.distanceTo( _v1$2 );
-
-			this.getObjectForDistance( distance ).raycast( raycaster, intersects );
-
-		}
-
-	}
-
-	update( camera ) {
-
-		const levels = this.levels;
-
-		if ( levels.length > 1 ) {
-
-			_v1$2.setFromMatrixPosition( camera.matrixWorld );
-			_v2$1.setFromMatrixPosition( this.matrixWorld );
-
-			const distance = _v1$2.distanceTo( _v2$1 ) / camera.zoom;
-
-			levels[ 0 ].object.visible = true;
-
-			let i, l;
-
-			for ( i = 1, l = levels.length; i < l; i ++ ) {
-
-				let levelDistance = levels[ i ].distance;
-
-				if ( levels[ i ].object.visible ) {
-
-					levelDistance -= levelDistance * levels[ i ].hysteresis;
-
-				}
-
-				if ( distance >= levelDistance ) {
-
-					levels[ i - 1 ].object.visible = false;
-					levels[ i ].object.visible = true;
-
-				} else {
-
-					break;
-
-				}
-
-			}
-
-			this._currentLevel = i - 1;
-
-			for ( ; i < l; i ++ ) {
-
-				levels[ i ].object.visible = false;
-
-			}
-
-		}
-
-	}
-
-	toJSON( meta ) {
-
-		const data = super.toJSON( meta );
-
-		if ( this.autoUpdate === false ) data.object.autoUpdate = false;
-
-		data.object.levels = [];
-
-		const levels = this.levels;
-
-		for ( let i = 0, l = levels.length; i < l; i ++ ) {
-
-			const level = levels[ i ];
-
-			data.object.levels.push( {
-				object: level.object.uuid,
-				distance: level.distance,
-				hysteresis: level.hysteresis
-			} );
-
-		}
-
-		return data;
-
-	}
-
-}
-
-const _basePosition = /*@__PURE__*/ new Vector3();
-
-const _skinIndex = /*@__PURE__*/ new Vector4();
-const _skinWeight = /*@__PURE__*/ new Vector4();
-
-const _vector3 = /*@__PURE__*/ new Vector3();
-const _matrix4 = /*@__PURE__*/ new Matrix4();
-const _vertex = /*@__PURE__*/ new Vector3();
-
-
-
-class SkinnedMesh extends Mesh {
-
-	constructor( geometry, material ) {
-
-		super( geometry, material );
-
-		this.isSkinnedMesh = true;
-
-		this.type = 'SkinnedMesh';
-
-		this.bindMode = 'attached';
-		this.bindMatrix = new Matrix4();
-		this.bindMatrixInverse = new Matrix4();
-
-		this.boundingBox = null;
-		this.boundingSphere = null;
-
-	}
-
-	computeBoundingBox() {
-
-		const geometry = this.geometry;
-
-		if ( this.boundingBox === null ) {
-
-			this.boundingBox = new Box3();
-
-		}
-
-		this.boundingBox.makeEmpty();
-
-		const positionAttribute = geometry.getAttribute( 'position' );
-
-		for ( let i = 0; i < positionAttribute.count; i ++ ) {
-
-			_vertex.fromBufferAttribute( positionAttribute, i );
-			this.applyBoneTransform( i, _vertex );
-			this.boundingBox.expandByPoint( _vertex );
-
-		}
-
-	}
-
-	computeBoundingSphere() {
-
-		const geometry = this.geometry;
-
-		if ( this.boundingSphere === null ) {
-
-			this.boundingSphere = new Sphere();
-
-		}
-
-		this.boundingSphere.makeEmpty();
-
-		const positionAttribute = geometry.getAttribute( 'position' );
-
-		for ( let i = 0; i < positionAttribute.count; i ++ ) {
-
-			_vertex.fromBufferAttribute( positionAttribute, i );
-			this.applyBoneTransform( i, _vertex );
-			this.boundingSphere.expandByPoint( _vertex );
-
-		}
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		this.bindMode = source.bindMode;
-		this.bindMatrix.copy( source.bindMatrix );
-		this.bindMatrixInverse.copy( source.bindMatrixInverse );
-
-		this.skeleton = source.skeleton;
-
-		return this;
-
-	}
-
-	// raycast( raycaster, intersects ) {
-
-	// 	if ( this.boundingSphere === null ) this.computeBoundingSphere();
-
-	// 	_sphere.copy( this.boundingSphere );
-	// 	_sphere.applyMatrix4( this.matrixWorld );
-
-	// 	if ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;
-
-	// 	this._computeIntersections( raycaster, intersects );
-
-	// }
-
-	getVertexPosition( index, target ) {
-
-		super.getVertexPosition( index, target );
-
-		this.applyBoneTransform( index, target );
-
-		return target;
-
-	}
-
-	bind( skeleton, bindMatrix ) {
-
-		this.skeleton = skeleton;
-
-		if ( bindMatrix === undefined ) {
-
-			this.updateMatrixWorld( true );
-
-			this.skeleton.calculateInverses();
-
-			bindMatrix = this.matrixWorld;
-
-		}
-
-		this.bindMatrix.copy( bindMatrix );
-		this.bindMatrixInverse.copy( bindMatrix ).invert();
-
-	}
-
-	pose() {
-
-		this.skeleton.pose();
-
-	}
-
-	normalizeSkinWeights() {
-
-		const vector = new Vector4();
-
-		const skinWeight = this.geometry.attributes.skinWeight;
-
-		for ( let i = 0, l = skinWeight.count; i < l; i ++ ) {
-
-			vector.fromBufferAttribute( skinWeight, i );
-
-			const scale = 1.0 / vector.manhattanLength();
-
-			if ( scale !== Infinity ) {
-
-				vector.multiplyScalar( scale );
-
-			} else {
-
-				vector.set( 1, 0, 0, 0 ); // do something reasonable
-
-			}
-
-			skinWeight.setXYZW( i, vector.x, vector.y, vector.z, vector.w );
-
-		}
-
-	}
-
-	updateMatrixWorld( force ) {
-
-		super.updateMatrixWorld( force );
-
-		if ( this.bindMode === 'attached' ) {
-
-			this.bindMatrixInverse.copy( this.matrixWorld ).invert();
-
-		} else if ( this.bindMode === 'detached' ) {
-
-			this.bindMatrixInverse.copy( this.bindMatrix ).invert();
-
-		} else {
-
-			console.warn( 'THREE.SkinnedMesh: Unrecognized bindMode: ' + this.bindMode );
-
-		}
-
-	}
-
-	applyBoneTransform( index, vector ) {
-
-		const skeleton = this.skeleton;
-		const geometry = this.geometry;
-
-		_skinIndex.fromBufferAttribute( geometry.attributes.skinIndex, index );
-		_skinWeight.fromBufferAttribute( geometry.attributes.skinWeight, index );
-
-		_basePosition.copy( vector ).applyMatrix4( this.bindMatrix );
-
-		vector.set( 0, 0, 0 );
-
-		for ( let i = 0; i < 4; i ++ ) {
-
-			const weight = _skinWeight.getComponent( i );
-
-			if ( weight !== 0 ) {
-
-				const boneIndex = _skinIndex.getComponent( i );
-
-				_matrix4.multiplyMatrices( skeleton.bones[ boneIndex ].matrixWorld, skeleton.boneInverses[ boneIndex ] );
-
-				vector.addScaledVector( _vector3.copy( _basePosition ).applyMatrix4( _matrix4 ), weight );
-
-			}
-
-		}
-
-		return vector.applyMatrix4( this.bindMatrixInverse );
-
-	}
-
-	boneTransform( index, vector ) { // @deprecated, r151
-
-		console.warn( 'THREE.SkinnedMesh: .boneTransform() was renamed to .applyBoneTransform() in r151.' );
-		return this.applyBoneTransform( index, vector );
-
-	}
-
-
-}
-
-class Bone extends Object3D {
-
-	constructor() {
-
-		super();
-
-		this.isBone = true;
-
-		this.type = 'Bone';
-
-	}
-
-}
-
-class DataTexture extends Texture {
-
-	constructor( data = null, width = 1, height = 1, format, type, mapping, wrapS, wrapT, magFilter = NearestFilter, minFilter = NearestFilter, anisotropy, colorSpace ) {
-
-		super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );
-
-		this.isDataTexture = true;
-
-		this.image = { data: data, width: width, height: height };
-
-		this.generateMipmaps = false;
-		this.flipY = false;
-		this.unpackAlignment = 1;
-
-	}
-
-}
-
-const _offsetMatrix = /*@__PURE__*/ new Matrix4();
-const _identityMatrix = /*@__PURE__*/ new Matrix4();
-
-class Skeleton {
-
-	constructor( bones = [], boneInverses = [] ) {
-
-		this.uuid = generateUUID();
-
-		this.bones = bones.slice( 0 );
-		this.boneInverses = boneInverses;
-		this.boneMatrices = null;
-
-		this.boneTexture = null;
-		this.boneTextureSize = 0;
-
-		this.frame = - 1;
-
-		this.init();
-
-	}
-
-	init() {
-
-		const bones = this.bones;
-		const boneInverses = this.boneInverses;
-
-		this.boneMatrices = new Float32Array( bones.length * 16 );
-
-		// calculate inverse bone matrices if necessary
-
-		if ( boneInverses.length === 0 ) {
-
-			this.calculateInverses();
-
-		} else {
-
-			// handle special case
-
-			if ( bones.length !== boneInverses.length ) {
-
-				console.warn( 'THREE.Skeleton: Number of inverse bone matrices does not match amount of bones.' );
-
-				this.boneInverses = [];
-
-				for ( let i = 0, il = this.bones.length; i < il; i ++ ) {
-
-					this.boneInverses.push( new Matrix4() );
-
-				}
-
-			}
-
-		}
-
-	}
-
-	calculateInverses() {
-
-		this.boneInverses.length = 0;
-
-		for ( let i = 0, il = this.bones.length; i < il; i ++ ) {
-
-			const inverse = new Matrix4();
-
-			if ( this.bones[ i ] ) {
-
-				inverse.copy( this.bones[ i ].matrixWorld ).invert();
-
-			}
-
-			this.boneInverses.push( inverse );
-
-		}
-
-	}
-
-	pose() {
-
-		// recover the bind-time world matrices
-
-		for ( let i = 0, il = this.bones.length; i < il; i ++ ) {
-
-			const bone = this.bones[ i ];
-
-			if ( bone ) {
-
-				bone.matrixWorld.copy( this.boneInverses[ i ] ).invert();
-
-			}
-
-		}
-
-		// compute the local matrices, positions, rotations and scales
-
-		for ( let i = 0, il = this.bones.length; i < il; i ++ ) {
-
-			const bone = this.bones[ i ];
-
-			if ( bone ) {
-
-				if ( bone.parent && bone.parent.isBone ) {
-
-					bone.matrix.copy( bone.parent.matrixWorld ).invert();
-					bone.matrix.multiply( bone.matrixWorld );
-
-				} else {
-
-					bone.matrix.copy( bone.matrixWorld );
-
-				}
-
-				bone.matrix.decompose( bone.position, bone.quaternion, bone.scale );
-
-			}
-
-		}
-
-	}
-
-	update() {
-
-		const bones = this.bones;
-		const boneInverses = this.boneInverses;
-		const boneMatrices = this.boneMatrices;
-		const boneTexture = this.boneTexture;
-
-		// flatten bone matrices to array
-
-		for ( let i = 0, il = bones.length; i < il; i ++ ) {
-
-			// compute the offset between the current and the original transform
-
-			const matrix = bones[ i ] ? bones[ i ].matrixWorld : _identityMatrix;
-
-			_offsetMatrix.multiplyMatrices( matrix, boneInverses[ i ] );
-			_offsetMatrix.toArray( boneMatrices, i * 16 );
-
-		}
-
-		if ( boneTexture !== null ) {
-
-			boneTexture.needsUpdate = true;
-
-		}
-
-	}
-
-	clone() {
-
-		return new Skeleton( this.bones, this.boneInverses );
-
-	}
-
-	computeBoneTexture() {
-
-		// layout (1 matrix = 4 pixels)
-		//      RGBA RGBA RGBA RGBA (=> column1, column2, column3, column4)
-		//  with  8x8  pixel texture max   16 bones * 4 pixels =  (8 * 8)
-		//       16x16 pixel texture max   64 bones * 4 pixels = (16 * 16)
-		//       32x32 pixel texture max  256 bones * 4 pixels = (32 * 32)
-		//       64x64 pixel texture max 1024 bones * 4 pixels = (64 * 64)
-
-		let size = Math.sqrt( this.bones.length * 4 ); // 4 pixels needed for 1 matrix
-		size = ceilPowerOfTwo( size );
-		size = Math.max( size, 4 );
-
-		const boneMatrices = new Float32Array( size * size * 4 ); // 4 floats per RGBA pixel
-		boneMatrices.set( this.boneMatrices ); // copy current values
-
-		const boneTexture = new DataTexture( boneMatrices, size, size, RGBAFormat, FloatType );
-		boneTexture.needsUpdate = true;
-
-		this.boneMatrices = boneMatrices;
-		this.boneTexture = boneTexture;
-		this.boneTextureSize = size;
-
-		return this;
-
-	}
-
-	getBoneByName( name ) {
-
-		for ( let i = 0, il = this.bones.length; i < il; i ++ ) {
-
-			const bone = this.bones[ i ];
-
-			if ( bone.name === name ) {
-
-				return bone;
-
-			}
-
-		}
-
-		return undefined;
-
-	}
-
-	dispose( ) {
-
-		if ( this.boneTexture !== null ) {
-
-			this.boneTexture.dispose();
-
-			this.boneTexture = null;
-
-		}
-
-	}
-
-	fromJSON( json, bones ) {
-
-		this.uuid = json.uuid;
-
-		for ( let i = 0, l = json.bones.length; i < l; i ++ ) {
-
-			const uuid = json.bones[ i ];
-			let bone = bones[ uuid ];
-
-			if ( bone === undefined ) {
-
-				console.warn( 'THREE.Skeleton: No bone found with UUID:', uuid );
-				bone = new Bone();
-
-			}
-
-			this.bones.push( bone );
-			this.boneInverses.push( new Matrix4().fromArray( json.boneInverses[ i ] ) );
-
-		}
-
-		this.init();
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = {
-			metadata: {
-				version: 4.5,
-				type: 'Skeleton',
-				generator: 'Skeleton.toJSON'
-			},
-			bones: [],
-			boneInverses: []
-		};
-
-		data.uuid = this.uuid;
-
-		const bones = this.bones;
-		const boneInverses = this.boneInverses;
-
-		for ( let i = 0, l = bones.length; i < l; i ++ ) {
-
-			const bone = bones[ i ];
-			data.bones.push( bone.uuid );
-
-			const boneInverse = boneInverses[ i ];
-			data.boneInverses.push( boneInverse.toArray() );
-
-		}
-
-		return data;
-
-	}
-
-}
-
-class InstancedBufferAttribute extends BufferAttribute {
-
-	constructor( array, itemSize, normalized, meshPerAttribute = 1 ) {
-
-		super( array, itemSize, normalized );
-
-		this.isInstancedBufferAttribute = true;
-
-		this.meshPerAttribute = meshPerAttribute;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.meshPerAttribute = source.meshPerAttribute;
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.meshPerAttribute = this.meshPerAttribute;
-
-		data.isInstancedBufferAttribute = true;
-
-		return data;
-
-	}
-
-}
-
-const _instanceLocalMatrix = /*@__PURE__*/ new Matrix4();
-const _instanceWorldMatrix = /*@__PURE__*/ new Matrix4();
-
-const _instanceIntersects = [];
-
-const _box3 = /*@__PURE__*/ new Box3();
-const _identity = /*@__PURE__*/ new Matrix4();
-const _mesh = /*@__PURE__*/ new Mesh();
-const _sphere$2 = /*@__PURE__*/ new Sphere();
-
-class InstancedMesh extends Mesh {
-
-	constructor( geometry, material, count ) {
-
-		super( geometry, material );
-
-		this.isInstancedMesh = true;
-
-		this.instanceMatrix = new InstancedBufferAttribute( new Float32Array( count * 16 ), 16 );
-		this.instanceColor = null;
-
-		this.count = count;
-
-		this.boundingBox = null;
-		this.boundingSphere = null;
-
-		for ( let i = 0; i < count; i ++ ) {
-
-			this.setMatrixAt( i, _identity );
-
-		}
-
-	}
-
-	computeBoundingBox() {
-
-		const geometry = this.geometry;
-		const count = this.count;
-
-		if ( this.boundingBox === null ) {
-
-			this.boundingBox = new Box3();
-
-		}
-
-		if ( geometry.boundingBox === null ) {
-
-			geometry.computeBoundingBox();
-
-		}
-
-		this.boundingBox.makeEmpty();
-
-		for ( let i = 0; i < count; i ++ ) {
-
-			this.getMatrixAt( i, _instanceLocalMatrix );
-
-			_box3.copy( geometry.boundingBox ).applyMatrix4( _instanceLocalMatrix );
-
-			this.boundingBox.union( _box3 );
-
-		}
-
-	}
-
-	computeBoundingSphere() {
-
-		const geometry = this.geometry;
-		const count = this.count;
-
-		if ( this.boundingSphere === null ) {
-
-			this.boundingSphere = new Sphere();
-
-		}
-
-		if ( geometry.boundingSphere === null ) {
-
-			geometry.computeBoundingSphere();
-
-		}
-
-		this.boundingSphere.makeEmpty();
-
-		for ( let i = 0; i < count; i ++ ) {
-
-			this.getMatrixAt( i, _instanceLocalMatrix );
-
-			_sphere$2.copy( geometry.boundingSphere ).applyMatrix4( _instanceLocalMatrix );
-
-			this.boundingSphere.union( _sphere$2 );
-
-		}
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		this.instanceMatrix.copy( source.instanceMatrix );
-
-		if ( source.instanceColor !== null ) this.instanceColor = source.instanceColor.clone();
-
-		this.count = source.count;
-
-		return this;
-
-	}
-
-	getColorAt( index, color ) {
-
-		color.fromArray( this.instanceColor.array, index * 3 );
-
-	}
-
-	getMatrixAt( index, matrix ) {
-
-		matrix.fromArray( this.instanceMatrix.array, index * 16 );
-
-	}
-
-	raycast( raycaster, intersects ) {
-
-		const matrixWorld = this.matrixWorld;
-		const raycastTimes = this.count;
-
-		_mesh.geometry = this.geometry;
-		_mesh.material = this.material;
-
-		if ( _mesh.material === undefined ) return;
-
-		// test with bounding sphere first
-
-		if ( this.boundingSphere === null ) this.computeBoundingSphere();
-
-		_sphere$2.copy( this.boundingSphere );
-		_sphere$2.applyMatrix4( matrixWorld );
-
-		if ( raycaster.ray.intersectsSphere( _sphere$2 ) === false ) return;
-
-		// now test each instance
-
-		for ( let instanceId = 0; instanceId < raycastTimes; instanceId ++ ) {
-
-			// calculate the world matrix for each instance
-
-			this.getMatrixAt( instanceId, _instanceLocalMatrix );
-
-			_instanceWorldMatrix.multiplyMatrices( matrixWorld, _instanceLocalMatrix );
-
-			// the mesh represents this single instance
-
-			_mesh.matrixWorld = _instanceWorldMatrix;
-
-			_mesh.raycast( raycaster, _instanceIntersects );
-
-			// process the result of raycast
-
-			for ( let i = 0, l = _instanceIntersects.length; i < l; i ++ ) {
-
-				const intersect = _instanceIntersects[ i ];
-				intersect.instanceId = instanceId;
-				intersect.object = this;
-				intersects.push( intersect );
-
-			}
-
-			_instanceIntersects.length = 0;
-
-		}
-
-	}
-
-	setColorAt( index, color ) {
-
-		if ( this.instanceColor === null ) {
-
-			this.instanceColor = new InstancedBufferAttribute( new Float32Array( this.instanceMatrix.count * 3 ), 3 );
-
-		}
-
-		color.toArray( this.instanceColor.array, index * 3 );
-
-	}
-
-	setMatrixAt( index, matrix ) {
-
-		matrix.toArray( this.instanceMatrix.array, index * 16 );
-
-	}
-
-	updateMorphTargets() {
-
-	}
-
-	dispose() {
-
-		this.dispatchEvent( { type: 'dispose' } );
-
-	}
-
-}
-
-class LineBasicMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isLineBasicMaterial = true;
-
-		this.type = 'LineBasicMaterial';
-
-		this.color = new Color( 0xffffff );
-
-		this.map = null;
-
-		this.linewidth = 1;
-		this.linecap = 'round';
-		this.linejoin = 'round';
-
-		this.fog = true;
-
-		this.setValues( parameters );
-
-	}
-
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.color.copy( source.color );
-
-		this.map = source.map;
-
-		this.linewidth = source.linewidth;
-		this.linecap = source.linecap;
-		this.linejoin = source.linejoin;
-
-		this.fog = source.fog;
-
-		return this;
-
-	}
-
-}
-
-const _start$1 = /*@__PURE__*/ new Vector3();
-const _end$1 = /*@__PURE__*/ new Vector3();
-const _inverseMatrix$1 = /*@__PURE__*/ new Matrix4();
-const _ray$1 = /*@__PURE__*/ new Ray();
-const _sphere$1 = /*@__PURE__*/ new Sphere();
-
-class Line extends Object3D {
-
-	constructor( geometry = new BufferGeometry(), material = new LineBasicMaterial() ) {
-
-		super();
-
-		this.isLine = true;
-
-		this.type = 'Line';
-
-		this.geometry = geometry;
-		this.material = material;
-
-		this.updateMorphTargets();
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		this.material = source.material;
-		this.geometry = source.geometry;
-
-		return this;
-
-	}
-
-	computeLineDistances() {
-
-		const geometry = this.geometry;
-
-		// we assume non-indexed geometry
-
-		if ( geometry.index === null ) {
-
-			const positionAttribute = geometry.attributes.position;
-			const lineDistances = [ 0 ];
-
-			for ( let i = 1, l = positionAttribute.count; i < l; i ++ ) {
-
-				_start$1.fromBufferAttribute( positionAttribute, i - 1 );
-				_end$1.fromBufferAttribute( positionAttribute, i );
-
-				lineDistances[ i ] = lineDistances[ i - 1 ];
-				lineDistances[ i ] += _start$1.distanceTo( _end$1 );
-
-			}
-
-			geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );
-
-		} else {
-
-			console.warn( 'THREE.Line.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );
-
-		}
-
-		return this;
-
-	}
-
-	raycast( raycaster, intersects ) {
-
-		const geometry = this.geometry;
-		const matrixWorld = this.matrixWorld;
-		const threshold = raycaster.params.Line.threshold;
-		const drawRange = geometry.drawRange;
-
-		// Checking boundingSphere distance to ray
-
-		if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
-
-		_sphere$1.copy( geometry.boundingSphere );
-		_sphere$1.applyMatrix4( matrixWorld );
-		_sphere$1.radius += threshold;
-
-		if ( raycaster.ray.intersectsSphere( _sphere$1 ) === false ) return;
-
-		//
-
-		_inverseMatrix$1.copy( matrixWorld ).invert();
-		_ray$1.copy( raycaster.ray ).applyMatrix4( _inverseMatrix$1 );
-
-		const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );
-		const localThresholdSq = localThreshold * localThreshold;
-
-		const vStart = new Vector3();
-		const vEnd = new Vector3();
-		const interSegment = new Vector3();
-		const interRay = new Vector3();
-		const step = this.isLineSegments ? 2 : 1;
-
-		const index = geometry.index;
-		const attributes = geometry.attributes;
-		const positionAttribute = attributes.position;
-
-		if ( index !== null ) {
-
-			const start = Math.max( 0, drawRange.start );
-			const end = Math.min( index.count, ( drawRange.start + drawRange.count ) );
-
-			for ( let i = start, l = end - 1; i < l; i += step ) {
-
-				const a = index.getX( i );
-				const b = index.getX( i + 1 );
-
-				vStart.fromBufferAttribute( positionAttribute, a );
-				vEnd.fromBufferAttribute( positionAttribute, b );
-
-				const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );
-
-				if ( distSq > localThresholdSq ) continue;
-
-				interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation
-
-				const distance = raycaster.ray.origin.distanceTo( interRay );
-
-				if ( distance < raycaster.near || distance > raycaster.far ) continue;
-
-				intersects.push( {
-
-					distance: distance,
-					// What do we want? intersection point on the ray or on the segment??
-					// point: raycaster.ray.at( distance ),
-					point: interSegment.clone().applyMatrix4( this.matrixWorld ),
-					index: i,
-					face: null,
-					faceIndex: null,
-					object: this
-
-				} );
-
-			}
-
-		} else {
-
-			const start = Math.max( 0, drawRange.start );
-			const end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );
-
-			for ( let i = start, l = end - 1; i < l; i += step ) {
-
-				vStart.fromBufferAttribute( positionAttribute, i );
-				vEnd.fromBufferAttribute( positionAttribute, i + 1 );
-
-				const distSq = _ray$1.distanceSqToSegment( vStart, vEnd, interRay, interSegment );
-
-				if ( distSq > localThresholdSq ) continue;
-
-				interRay.applyMatrix4( this.matrixWorld ); //Move back to world space for distance calculation
-
-				const distance = raycaster.ray.origin.distanceTo( interRay );
-
-				if ( distance < raycaster.near || distance > raycaster.far ) continue;
-
-				intersects.push( {
-
-					distance: distance,
-					// What do we want? intersection point on the ray or on the segment??
-					// point: raycaster.ray.at( distance ),
-					point: interSegment.clone().applyMatrix4( this.matrixWorld ),
-					index: i,
-					face: null,
-					faceIndex: null,
-					object: this
-
-				} );
-
-			}
-
-		}
-
-	}
-
-	updateMorphTargets() {
-
-		const geometry = this.geometry;
-
-		const morphAttributes = geometry.morphAttributes;
-		const keys = Object.keys( morphAttributes );
-
-		if ( keys.length > 0 ) {
-
-			const morphAttribute = morphAttributes[ keys[ 0 ] ];
-
-			if ( morphAttribute !== undefined ) {
-
-				this.morphTargetInfluences = [];
-				this.morphTargetDictionary = {};
-
-				for ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {
-
-					const name = morphAttribute[ m ].name || String( m );
-
-					this.morphTargetInfluences.push( 0 );
-					this.morphTargetDictionary[ name ] = m;
-
-				}
-
-			}
-
-		}
-
-	}
-
-}
-
-const _start = /*@__PURE__*/ new Vector3();
-const _end = /*@__PURE__*/ new Vector3();
-
-class LineSegments extends Line {
-
-	constructor( geometry, material ) {
-
-		super( geometry, material );
-
-		this.isLineSegments = true;
-
-		this.type = 'LineSegments';
-
-	}
-
-	computeLineDistances() {
-
-		const geometry = this.geometry;
-
-		// we assume non-indexed geometry
-
-		if ( geometry.index === null ) {
-
-			const positionAttribute = geometry.attributes.position;
-			const lineDistances = [];
-
-			for ( let i = 0, l = positionAttribute.count; i < l; i += 2 ) {
-
-				_start.fromBufferAttribute( positionAttribute, i );
-				_end.fromBufferAttribute( positionAttribute, i + 1 );
-
-				lineDistances[ i ] = ( i === 0 ) ? 0 : lineDistances[ i - 1 ];
-				lineDistances[ i + 1 ] = lineDistances[ i ] + _start.distanceTo( _end );
-
-			}
-
-			geometry.setAttribute( 'lineDistance', new Float32BufferAttribute( lineDistances, 1 ) );
-
-		} else {
-
-			console.warn( 'THREE.LineSegments.computeLineDistances(): Computation only possible with non-indexed BufferGeometry.' );
-
-		}
-
-		return this;
-
-	}
-
-}
-
-class LineLoop extends Line {
-
-	constructor( geometry, material ) {
-
-		super( geometry, material );
-
-		this.isLineLoop = true;
-
-		this.type = 'LineLoop';
-
-	}
-
-}
-
-class PointsMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isPointsMaterial = true;
-
-		this.type = 'PointsMaterial';
-
-		this.color = new Color( 0xffffff );
-
-		this.map = null;
-
-		this.alphaMap = null;
-
-		this.size = 1;
-		this.sizeAttenuation = true;
-
-		this.fog = true;
-
-		this.setValues( parameters );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.color.copy( source.color );
-
-		this.map = source.map;
-
-		this.alphaMap = source.alphaMap;
-
-		this.size = source.size;
-		this.sizeAttenuation = source.sizeAttenuation;
-
-		this.fog = source.fog;
-
-		return this;
-
-	}
-
-}
-
-const _inverseMatrix = /*@__PURE__*/ new Matrix4();
-const _ray = /*@__PURE__*/ new Ray();
-const _sphere = /*@__PURE__*/ new Sphere();
-const _position$2 = /*@__PURE__*/ new Vector3();
-
-class Points extends Object3D {
-
-	constructor( geometry = new BufferGeometry(), material = new PointsMaterial() ) {
-
-		super();
-
-		this.isPoints = true;
-
-		this.type = 'Points';
-
-		this.geometry = geometry;
-		this.material = material;
-
-		this.updateMorphTargets();
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		this.material = source.material;
-		this.geometry = source.geometry;
-
-		return this;
-
-	}
-
-	raycast( raycaster, intersects ) {
-
-		const geometry = this.geometry;
-		const matrixWorld = this.matrixWorld;
-		const threshold = raycaster.params.Points.threshold;
-		const drawRange = geometry.drawRange;
-
-		// Checking boundingSphere distance to ray
-
-		if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
-
-		_sphere.copy( geometry.boundingSphere );
-		_sphere.applyMatrix4( matrixWorld );
-		_sphere.radius += threshold;
-
-		if ( raycaster.ray.intersectsSphere( _sphere ) === false ) return;
-
-		//
-
-		_inverseMatrix.copy( matrixWorld ).invert();
-		_ray.copy( raycaster.ray ).applyMatrix4( _inverseMatrix );
-
-		const localThreshold = threshold / ( ( this.scale.x + this.scale.y + this.scale.z ) / 3 );
-		const localThresholdSq = localThreshold * localThreshold;
-
-		const index = geometry.index;
-		const attributes = geometry.attributes;
-		const positionAttribute = attributes.position;
-
-		if ( index !== null ) {
-
-			const start = Math.max( 0, drawRange.start );
-			const end = Math.min( index.count, ( drawRange.start + drawRange.count ) );
-
-			for ( let i = start, il = end; i < il; i ++ ) {
-
-				const a = index.getX( i );
-
-				_position$2.fromBufferAttribute( positionAttribute, a );
-
-				testPoint( _position$2, a, localThresholdSq, matrixWorld, raycaster, intersects, this );
-
-			}
-
-		} else {
-
-			const start = Math.max( 0, drawRange.start );
-			const end = Math.min( positionAttribute.count, ( drawRange.start + drawRange.count ) );
-
-			for ( let i = start, l = end; i < l; i ++ ) {
-
-				_position$2.fromBufferAttribute( positionAttribute, i );
-
-				testPoint( _position$2, i, localThresholdSq, matrixWorld, raycaster, intersects, this );
-
-			}
-
-		}
-
-	}
-
-	updateMorphTargets() {
-
-		const geometry = this.geometry;
-
-		const morphAttributes = geometry.morphAttributes;
-		const keys = Object.keys( morphAttributes );
-
-		if ( keys.length > 0 ) {
-
-			const morphAttribute = morphAttributes[ keys[ 0 ] ];
-
-			if ( morphAttribute !== undefined ) {
-
-				this.morphTargetInfluences = [];
-				this.morphTargetDictionary = {};
-
-				for ( let m = 0, ml = morphAttribute.length; m < ml; m ++ ) {
-
-					const name = morphAttribute[ m ].name || String( m );
-
-					this.morphTargetInfluences.push( 0 );
-					this.morphTargetDictionary[ name ] = m;
-
-				}
-
-			}
-
-		}
-
-	}
-
-}
-
-function testPoint( point, index, localThresholdSq, matrixWorld, raycaster, intersects, object ) {
-
-	const rayPointDistanceSq = _ray.distanceSqToPoint( point );
-
-	if ( rayPointDistanceSq < localThresholdSq ) {
-
-		const intersectPoint = new Vector3();
-
-		_ray.closestPointToPoint( point, intersectPoint );
-		intersectPoint.applyMatrix4( matrixWorld );
-
-		const distance = raycaster.ray.origin.distanceTo( intersectPoint );
-
-		if ( distance < raycaster.near || distance > raycaster.far ) return;
-
-		intersects.push( {
-
-			distance: distance,
-			distanceToRay: Math.sqrt( rayPointDistanceSq ),
-			point: intersectPoint,
-			index: index,
-			face: null,
-			object: object
-
-		} );
-
-	}
-
-}
-
-class VideoTexture extends Texture {
-
-	constructor( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {
-
-		super( video, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
-
-		this.isVideoTexture = true;
-
-		this.minFilter = minFilter !== undefined ? minFilter : LinearFilter;
-		this.magFilter = magFilter !== undefined ? magFilter : LinearFilter;
-
-		this.generateMipmaps = false;
-
-		const scope = this;
-
-		function updateVideo() {
-
-			scope.needsUpdate = true;
-			video.requestVideoFrameCallback( updateVideo );
-
-		}
-
-		if ( 'requestVideoFrameCallback' in video ) {
-
-			video.requestVideoFrameCallback( updateVideo );
-
-		}
-
-	}
-
-	clone() {
-
-		return new this.constructor( this.image ).copy( this );
-
-	}
-
-	update() {
-
-		const video = this.image;
-		const hasVideoFrameCallback = 'requestVideoFrameCallback' in video;
-
-		if ( hasVideoFrameCallback === false && video.readyState >= video.HAVE_CURRENT_DATA ) {
-
-			this.needsUpdate = true;
-
-		}
-
-	}
-
-}
-
-class FramebufferTexture extends Texture {
-
-	constructor( width, height, format ) {
-
-		super( { width, height } );
-
-		this.isFramebufferTexture = true;
-
-		this.format = format;
-
-		this.magFilter = NearestFilter;
-		this.minFilter = NearestFilter;
-
-		this.generateMipmaps = false;
-
-		this.needsUpdate = true;
-
-	}
-
-}
-
-class CompressedTexture extends Texture {
-
-	constructor( mipmaps, width, height, format, type, mapping, wrapS, wrapT, magFilter, minFilter, anisotropy, colorSpace ) {
-
-		super( null, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, colorSpace );
-
-		this.isCompressedTexture = true;
-
-		this.image = { width: width, height: height };
-		this.mipmaps = mipmaps;
-
-		// no flipping for cube textures
-		// (also flipping doesn't work for compressed textures )
-
-		this.flipY = false;
-
-		// can't generate mipmaps for compressed textures
-		// mips must be embedded in DDS files
-
-		this.generateMipmaps = false;
-
-	}
-
-}
-
-class CompressedArrayTexture extends CompressedTexture {
-
-	constructor( mipmaps, width, height, depth, format, type ) {
-
-		super( mipmaps, width, height, format, type );
-
-		this.isCompressedArrayTexture = true;
-		this.image.depth = depth;
-		this.wrapR = ClampToEdgeWrapping;
-
-	}
-
-}
-
-class CanvasTexture extends Texture {
-
-	constructor( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy ) {
-
-		super( canvas, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy );
-
-		this.isCanvasTexture = true;
-
-		this.needsUpdate = true;
-
-	}
-
-}
-
-/**
- * Extensible curve object.
- *
- * Some common of curve methods:
- * .getPoint( t, optionalTarget ), .getTangent( t, optionalTarget )
- * .getPointAt( u, optionalTarget ), .getTangentAt( u, optionalTarget )
- * .getPoints(), .getSpacedPoints()
- * .getLength()
- * .updateArcLengths()
- *
- * This following curves inherit from THREE.Curve:
- *
- * -- 2D curves --
- * THREE.ArcCurve
- * THREE.CubicBezierCurve
- * THREE.EllipseCurve
- * THREE.LineCurve
- * THREE.QuadraticBezierCurve
- * THREE.SplineCurve
- *
- * -- 3D curves --
- * THREE.CatmullRomCurve3
- * THREE.CubicBezierCurve3
- * THREE.LineCurve3
- * THREE.QuadraticBezierCurve3
- *
- * A series of curves can be represented as a THREE.CurvePath.
- *
- **/
-
-class Curve {
-
-	constructor() {
-
-		this.type = 'Curve';
-
-		this.arcLengthDivisions = 200;
-
-	}
-
-	// Virtual base class method to overwrite and implement in subclasses
-	//	- t [0 .. 1]
-
-	getPoint( /* t, optionalTarget */ ) {
-
-		console.warn( 'THREE.Curve: .getPoint() not implemented.' );
-		return null;
-
-	}
-
-	// Get point at relative position in curve according to arc length
-	// - u [0 .. 1]
-
-	getPointAt( u, optionalTarget ) {
-
-		const t = this.getUtoTmapping( u );
-		return this.getPoint( t, optionalTarget );
-
-	}
-
-	// Get sequence of points using getPoint( t )
-
-	getPoints( divisions = 5 ) {
-
-		const points = [];
-
-		for ( let d = 0; d <= divisions; d ++ ) {
-
-			points.push( this.getPoint( d / divisions ) );
-
-		}
-
-		return points;
-
-	}
-
-	// Get sequence of points using getPointAt( u )
-
-	getSpacedPoints( divisions = 5 ) {
-
-		const points = [];
-
-		for ( let d = 0; d <= divisions; d ++ ) {
-
-			points.push( this.getPointAt( d / divisions ) );
-
-		}
-
-		return points;
-
-	}
-
-	// Get total curve arc length
-
-	getLength() {
-
-		const lengths = this.getLengths();
-		return lengths[ lengths.length - 1 ];
-
-	}
-
-	// Get list of cumulative segment lengths
-
-	getLengths( divisions = this.arcLengthDivisions ) {
-
-		if ( this.cacheArcLengths &&
-			( this.cacheArcLengths.length === divisions + 1 ) &&
-			! this.needsUpdate ) {
-
-			return this.cacheArcLengths;
-
-		}
-
-		this.needsUpdate = false;
-
-		const cache = [];
-		let current, last = this.getPoint( 0 );
-		let sum = 0;
-
-		cache.push( 0 );
-
-		for ( let p = 1; p <= divisions; p ++ ) {
-
-			current = this.getPoint( p / divisions );
-			sum += current.distanceTo( last );
-			cache.push( sum );
-			last = current;
-
-		}
-
-		this.cacheArcLengths = cache;
-
-		return cache; // { sums: cache, sum: sum }; Sum is in the last element.
-
-	}
-
-	updateArcLengths() {
-
-		this.needsUpdate = true;
-		this.getLengths();
-
-	}
-
-	// Given u ( 0 .. 1 ), get a t to find p. This gives you points which are equidistant
-
-	getUtoTmapping( u, distance ) {
-
-		const arcLengths = this.getLengths();
-
-		let i = 0;
-		const il = arcLengths.length;
-
-		let targetArcLength; // The targeted u distance value to get
-
-		if ( distance ) {
-
-			targetArcLength = distance;
-
-		} else {
-
-			targetArcLength = u * arcLengths[ il - 1 ];
-
-		}
-
-		// binary search for the index with largest value smaller than target u distance
-
-		let low = 0, high = il - 1, comparison;
-
-		while ( low <= high ) {
-
-			i = Math.floor( low + ( high - low ) / 2 ); // less likely to overflow, though probably not issue here, JS doesn't really have integers, all numbers are floats
-
-			comparison = arcLengths[ i ] - targetArcLength;
-
-			if ( comparison < 0 ) {
-
-				low = i + 1;
-
-			} else if ( comparison > 0 ) {
-
-				high = i - 1;
-
-			} else {
-
-				high = i;
-				break;
-
-				// DONE
-
-			}
-
-		}
-
-		i = high;
-
-		if ( arcLengths[ i ] === targetArcLength ) {
-
-			return i / ( il - 1 );
-
-		}
-
-		// we could get finer grain at lengths, or use simple interpolation between two points
-
-		const lengthBefore = arcLengths[ i ];
-		const lengthAfter = arcLengths[ i + 1 ];
-
-		const segmentLength = lengthAfter - lengthBefore;
-
-		// determine where we are between the 'before' and 'after' points
-
-		const segmentFraction = ( targetArcLength - lengthBefore ) / segmentLength;
-
-		// add that fractional amount to t
-
-		const t = ( i + segmentFraction ) / ( il - 1 );
-
-		return t;
-
-	}
-
-	// Returns a unit vector tangent at t
-	// In case any sub curve does not implement its tangent derivation,
-	// 2 points a small delta apart will be used to find its gradient
-	// which seems to give a reasonable approximation
-
-	getTangent( t, optionalTarget ) {
-
-		const delta = 0.0001;
-		let t1 = t - delta;
-		let t2 = t + delta;
-
-		// Capping in case of danger
-
-		if ( t1 < 0 ) t1 = 0;
-		if ( t2 > 1 ) t2 = 1;
-
-		const pt1 = this.getPoint( t1 );
-		const pt2 = this.getPoint( t2 );
-
-		const tangent = optionalTarget || ( ( pt1.isVector2 ) ? new Vector2() : new Vector3() );
-
-		tangent.copy( pt2 ).sub( pt1 ).normalize();
-
-		return tangent;
-
-	}
-
-	getTangentAt( u, optionalTarget ) {
-
-		const t = this.getUtoTmapping( u );
-		return this.getTangent( t, optionalTarget );
-
-	}
-
-	computeFrenetFrames( segments, closed ) {
-
-		// see http://www.cs.indiana.edu/pub/techreports/TR425.pdf
-
-		const normal = new Vector3();
-
-		const tangents = [];
-		const normals = [];
-		const binormals = [];
-
-		const vec = new Vector3();
-		const mat = new Matrix4();
-
-		// compute the tangent vectors for each segment on the curve
-
-		for ( let i = 0; i <= segments; i ++ ) {
-
-			const u = i / segments;
-
-			tangents[ i ] = this.getTangentAt( u, new Vector3() );
-
-		}
-
-		// select an initial normal vector perpendicular to the first tangent vector,
-		// and in the direction of the minimum tangent xyz component
-
-		normals[ 0 ] = new Vector3();
-		binormals[ 0 ] = new Vector3();
-		let min = Number.MAX_VALUE;
-		const tx = Math.abs( tangents[ 0 ].x );
-		const ty = Math.abs( tangents[ 0 ].y );
-		const tz = Math.abs( tangents[ 0 ].z );
-
-		if ( tx <= min ) {
-
-			min = tx;
-			normal.set( 1, 0, 0 );
-
-		}
-
-		if ( ty <= min ) {
-
-			min = ty;
-			normal.set( 0, 1, 0 );
-
-		}
-
-		if ( tz <= min ) {
-
-			normal.set( 0, 0, 1 );
-
-		}
-
-		vec.crossVectors( tangents[ 0 ], normal ).normalize();
-
-		normals[ 0 ].crossVectors( tangents[ 0 ], vec );
-		binormals[ 0 ].crossVectors( tangents[ 0 ], normals[ 0 ] );
-
-
-		// compute the slowly-varying normal and binormal vectors for each segment on the curve
-
-		for ( let i = 1; i <= segments; i ++ ) {
-
-			normals[ i ] = normals[ i - 1 ].clone();
-
-			binormals[ i ] = binormals[ i - 1 ].clone();
-
-			vec.crossVectors( tangents[ i - 1 ], tangents[ i ] );
-
-			if ( vec.length() > Number.EPSILON ) {
-
-				vec.normalize();
-
-				const theta = Math.acos( clamp( tangents[ i - 1 ].dot( tangents[ i ] ), - 1, 1 ) ); // clamp for floating pt errors
-
-				normals[ i ].applyMatrix4( mat.makeRotationAxis( vec, theta ) );
-
-			}
-
-			binormals[ i ].crossVectors( tangents[ i ], normals[ i ] );
-
-		}
-
-		// if the curve is closed, postprocess the vectors so the first and last normal vectors are the same
-
-		if ( closed === true ) {
-
-			let theta = Math.acos( clamp( normals[ 0 ].dot( normals[ segments ] ), - 1, 1 ) );
-			theta /= segments;
-
-			if ( tangents[ 0 ].dot( vec.crossVectors( normals[ 0 ], normals[ segments ] ) ) > 0 ) {
-
-				theta = - theta;
-
-			}
-
-			for ( let i = 1; i <= segments; i ++ ) {
-
-				// twist a little...
-				normals[ i ].applyMatrix4( mat.makeRotationAxis( tangents[ i ], theta * i ) );
-				binormals[ i ].crossVectors( tangents[ i ], normals[ i ] );
-
-			}
-
-		}
-
-		return {
-			tangents: tangents,
-			normals: normals,
-			binormals: binormals
-		};
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-	copy( source ) {
-
-		this.arcLengthDivisions = source.arcLengthDivisions;
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = {
-			metadata: {
-				version: 4.5,
-				type: 'Curve',
-				generator: 'Curve.toJSON'
-			}
-		};
-
-		data.arcLengthDivisions = this.arcLengthDivisions;
-		data.type = this.type;
-
-		return data;
-
-	}
-
-	fromJSON( json ) {
-
-		this.arcLengthDivisions = json.arcLengthDivisions;
-
-		return this;
-
-	}
-
-}
-
-class EllipseCurve extends Curve {
-
-	constructor( aX = 0, aY = 0, xRadius = 1, yRadius = 1, aStartAngle = 0, aEndAngle = Math.PI * 2, aClockwise = false, aRotation = 0 ) {
-
-		super();
-
-		this.isEllipseCurve = true;
-
-		this.type = 'EllipseCurve';
-
-		this.aX = aX;
-		this.aY = aY;
-
-		this.xRadius = xRadius;
-		this.yRadius = yRadius;
-
-		this.aStartAngle = aStartAngle;
-		this.aEndAngle = aEndAngle;
-
-		this.aClockwise = aClockwise;
-
-		this.aRotation = aRotation;
-
-	}
-
-	getPoint( t, optionalTarget ) {
-
-		const point = optionalTarget || new Vector2();
-
-		const twoPi = Math.PI * 2;
-		let deltaAngle = this.aEndAngle - this.aStartAngle;
-		const samePoints = Math.abs( deltaAngle ) < Number.EPSILON;
-
-		// ensures that deltaAngle is 0 .. 2 PI
-		while ( deltaAngle < 0 ) deltaAngle += twoPi;
-		while ( deltaAngle > twoPi ) deltaAngle -= twoPi;
-
-		if ( deltaAngle < Number.EPSILON ) {
-
-			if ( samePoints ) {
-
-				deltaAngle = 0;
-
-			} else {
-
-				deltaAngle = twoPi;
-
-			}
-
-		}
-
-		if ( this.aClockwise === true && ! samePoints ) {
-
-			if ( deltaAngle === twoPi ) {
-
-				deltaAngle = - twoPi;
-
-			} else {
-
-				deltaAngle = deltaAngle - twoPi;
-
-			}
-
-		}
-
-		const angle = this.aStartAngle + t * deltaAngle;
-		let x = this.aX + this.xRadius * Math.cos( angle );
-		let y = this.aY + this.yRadius * Math.sin( angle );
-
-		if ( this.aRotation !== 0 ) {
-
-			const cos = Math.cos( this.aRotation );
-			const sin = Math.sin( this.aRotation );
-
-			const tx = x - this.aX;
-			const ty = y - this.aY;
-
-			// Rotate the point about the center of the ellipse.
-			x = tx * cos - ty * sin + this.aX;
-			y = tx * sin + ty * cos + this.aY;
-
-		}
-
-		return point.set( x, y );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.aX = source.aX;
-		this.aY = source.aY;
-
-		this.xRadius = source.xRadius;
-		this.yRadius = source.yRadius;
-
-		this.aStartAngle = source.aStartAngle;
-		this.aEndAngle = source.aEndAngle;
-
-		this.aClockwise = source.aClockwise;
-
-		this.aRotation = source.aRotation;
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.aX = this.aX;
-		data.aY = this.aY;
-
-		data.xRadius = this.xRadius;
-		data.yRadius = this.yRadius;
-
-		data.aStartAngle = this.aStartAngle;
-		data.aEndAngle = this.aEndAngle;
-
-		data.aClockwise = this.aClockwise;
-
-		data.aRotation = this.aRotation;
-
-		return data;
-
-	}
-
-	fromJSON( json ) {
-
-		super.fromJSON( json );
-
-		this.aX = json.aX;
-		this.aY = json.aY;
-
-		this.xRadius = json.xRadius;
-		this.yRadius = json.yRadius;
-
-		this.aStartAngle = json.aStartAngle;
-		this.aEndAngle = json.aEndAngle;
-
-		this.aClockwise = json.aClockwise;
-
-		this.aRotation = json.aRotation;
-
-		return this;
-
-	}
-
-}
-
-class ArcCurve extends EllipseCurve {
-
-	constructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
-
-		super( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );
-
-		this.isArcCurve = true;
-
-		this.type = 'ArcCurve';
-
-	}
-
-}
-
-/**
- * Centripetal CatmullRom Curve - which is useful for avoiding
- * cusps and self-intersections in non-uniform catmull rom curves.
- * http://www.cemyuksel.com/research/catmullrom_param/catmullrom.pdf
- *
- * curve.type accepts centripetal(default), chordal and catmullrom
- * curve.tension is used for catmullrom which defaults to 0.5
- */
-
-
-/*
-Based on an optimized c++ solution in
- - http://stackoverflow.com/questions/9489736/catmull-rom-curve-with-no-cusps-and-no-self-intersections/
- - http://ideone.com/NoEbVM
-
-This CubicPoly class could be used for reusing some variables and calculations,
-but for three.js curve use, it could be possible inlined and flatten into a single function call
-which can be placed in CurveUtils.
-*/
-
-function CubicPoly() {
-
-	let c0 = 0, c1 = 0, c2 = 0, c3 = 0;
-
-	/*
-	 * Compute coefficients for a cubic polynomial
-	 *   p(s) = c0 + c1*s + c2*s^2 + c3*s^3
-	 * such that
-	 *   p(0) = x0, p(1) = x1
-	 *  and
-	 *   p'(0) = t0, p'(1) = t1.
-	 */
-	function init( x0, x1, t0, t1 ) {
-
-		c0 = x0;
-		c1 = t0;
-		c2 = - 3 * x0 + 3 * x1 - 2 * t0 - t1;
-		c3 = 2 * x0 - 2 * x1 + t0 + t1;
-
-	}
-
-	return {
-
-		initCatmullRom: function ( x0, x1, x2, x3, tension ) {
-
-			init( x1, x2, tension * ( x2 - x0 ), tension * ( x3 - x1 ) );
-
-		},
-
-		initNonuniformCatmullRom: function ( x0, x1, x2, x3, dt0, dt1, dt2 ) {
-
-			// compute tangents when parameterized in [t1,t2]
-			let t1 = ( x1 - x0 ) / dt0 - ( x2 - x0 ) / ( dt0 + dt1 ) + ( x2 - x1 ) / dt1;
-			let t2 = ( x2 - x1 ) / dt1 - ( x3 - x1 ) / ( dt1 + dt2 ) + ( x3 - x2 ) / dt2;
-
-			// rescale tangents for parametrization in [0,1]
-			t1 *= dt1;
-			t2 *= dt1;
-
-			init( x1, x2, t1, t2 );
-
-		},
-
-		calc: function ( t ) {
-
-			const t2 = t * t;
-			const t3 = t2 * t;
-			return c0 + c1 * t + c2 * t2 + c3 * t3;
-
-		}
-
-	};
-
-}
-
-//
-
-const tmp = /*@__PURE__*/ new Vector3();
-const px = /*@__PURE__*/ new CubicPoly();
-const py = /*@__PURE__*/ new CubicPoly();
-const pz = /*@__PURE__*/ new CubicPoly();
-
-class CatmullRomCurve3 extends Curve {
-
-	constructor( points = [], closed = false, curveType = 'centripetal', tension = 0.5 ) {
-
-		super();
-
-		this.isCatmullRomCurve3 = true;
-
-		this.type = 'CatmullRomCurve3';
-
-		this.points = points;
-		this.closed = closed;
-		this.curveType = curveType;
-		this.tension = tension;
-
-	}
-
-	getPoint( t, optionalTarget = new Vector3() ) {
-
-		const point = optionalTarget;
-
-		const points = this.points;
-		const l = points.length;
-
-		const p = ( l - ( this.closed ? 0 : 1 ) ) * t;
-		let intPoint = Math.floor( p );
-		let weight = p - intPoint;
-
-		if ( this.closed ) {
-
-			intPoint += intPoint > 0 ? 0 : ( Math.floor( Math.abs( intPoint ) / l ) + 1 ) * l;
-
-		} else if ( weight === 0 && intPoint === l - 1 ) {
-
-			intPoint = l - 2;
-			weight = 1;
-
-		}
-
-		let p0, p3; // 4 points (p1 & p2 defined below)
-
-		if ( this.closed || intPoint > 0 ) {
-
-			p0 = points[ ( intPoint - 1 ) % l ];
-
-		} else {
-
-			// extrapolate first point
-			tmp.subVectors( points[ 0 ], points[ 1 ] ).add( points[ 0 ] );
-			p0 = tmp;
-
-		}
-
-		const p1 = points[ intPoint % l ];
-		const p2 = points[ ( intPoint + 1 ) % l ];
-
-		if ( this.closed || intPoint + 2 < l ) {
-
-			p3 = points[ ( intPoint + 2 ) % l ];
-
-		} else {
-
-			// extrapolate last point
-			tmp.subVectors( points[ l - 1 ], points[ l - 2 ] ).add( points[ l - 1 ] );
-			p3 = tmp;
-
-		}
-
-		if ( this.curveType === 'centripetal' || this.curveType === 'chordal' ) {
-
-			// init Centripetal / Chordal Catmull-Rom
-			const pow = this.curveType === 'chordal' ? 0.5 : 0.25;
-			let dt0 = Math.pow( p0.distanceToSquared( p1 ), pow );
-			let dt1 = Math.pow( p1.distanceToSquared( p2 ), pow );
-			let dt2 = Math.pow( p2.distanceToSquared( p3 ), pow );
-
-			// safety check for repeated points
-			if ( dt1 < 1e-4 ) dt1 = 1.0;
-			if ( dt0 < 1e-4 ) dt0 = dt1;
-			if ( dt2 < 1e-4 ) dt2 = dt1;
-
-			px.initNonuniformCatmullRom( p0.x, p1.x, p2.x, p3.x, dt0, dt1, dt2 );
-			py.initNonuniformCatmullRom( p0.y, p1.y, p2.y, p3.y, dt0, dt1, dt2 );
-			pz.initNonuniformCatmullRom( p0.z, p1.z, p2.z, p3.z, dt0, dt1, dt2 );
-
-		} else if ( this.curveType === 'catmullrom' ) {
-
-			px.initCatmullRom( p0.x, p1.x, p2.x, p3.x, this.tension );
-			py.initCatmullRom( p0.y, p1.y, p2.y, p3.y, this.tension );
-			pz.initCatmullRom( p0.z, p1.z, p2.z, p3.z, this.tension );
-
-		}
-
-		point.set(
-			px.calc( weight ),
-			py.calc( weight ),
-			pz.calc( weight )
-		);
-
-		return point;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.points = [];
-
-		for ( let i = 0, l = source.points.length; i < l; i ++ ) {
-
-			const point = source.points[ i ];
-
-			this.points.push( point.clone() );
-
-		}
-
-		this.closed = source.closed;
-		this.curveType = source.curveType;
-		this.tension = source.tension;
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.points = [];
-
-		for ( let i = 0, l = this.points.length; i < l; i ++ ) {
-
-			const point = this.points[ i ];
-			data.points.push( point.toArray() );
-
-		}
-
-		data.closed = this.closed;
-		data.curveType = this.curveType;
-		data.tension = this.tension;
-
-		return data;
-
-	}
-
-	fromJSON( json ) {
-
-		super.fromJSON( json );
-
-		this.points = [];
-
-		for ( let i = 0, l = json.points.length; i < l; i ++ ) {
-
-			const point = json.points[ i ];
-			this.points.push( new Vector3().fromArray( point ) );
-
-		}
-
-		this.closed = json.closed;
-		this.curveType = json.curveType;
-		this.tension = json.tension;
-
-		return this;
-
-	}
-
-}
-
-/**
- * Bezier Curves formulas obtained from
- * https://en.wikipedia.org/wiki/B%C3%A9zier_curve
- */
-
-function CatmullRom( t, p0, p1, p2, p3 ) {
-
-	const v0 = ( p2 - p0 ) * 0.5;
-	const v1 = ( p3 - p1 ) * 0.5;
-	const t2 = t * t;
-	const t3 = t * t2;
-	return ( 2 * p1 - 2 * p2 + v0 + v1 ) * t3 + ( - 3 * p1 + 3 * p2 - 2 * v0 - v1 ) * t2 + v0 * t + p1;
-
-}
-
-//
-
-function QuadraticBezierP0( t, p ) {
-
-	const k = 1 - t;
-	return k * k * p;
-
-}
-
-function QuadraticBezierP1( t, p ) {
-
-	return 2 * ( 1 - t ) * t * p;
-
-}
-
-function QuadraticBezierP2( t, p ) {
-
-	return t * t * p;
-
-}
-
-function QuadraticBezier( t, p0, p1, p2 ) {
-
-	return QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +
-		QuadraticBezierP2( t, p2 );
-
-}
-
-//
-
-function CubicBezierP0( t, p ) {
-
-	const k = 1 - t;
-	return k * k * k * p;
-
-}
-
-function CubicBezierP1( t, p ) {
-
-	const k = 1 - t;
-	return 3 * k * k * t * p;
-
-}
-
-function CubicBezierP2( t, p ) {
-
-	return 3 * ( 1 - t ) * t * t * p;
-
-}
-
-function CubicBezierP3( t, p ) {
-
-	return t * t * t * p;
-
-}
-
-function CubicBezier( t, p0, p1, p2, p3 ) {
-
-	return CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +
-		CubicBezierP3( t, p3 );
-
-}
-
-class CubicBezierCurve extends Curve {
-
-	constructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2(), v3 = new Vector2() ) {
-
-		super();
-
-		this.isCubicBezierCurve = true;
-
-		this.type = 'CubicBezierCurve';
-
-		this.v0 = v0;
-		this.v1 = v1;
-		this.v2 = v2;
-		this.v3 = v3;
-
-	}
-
-	getPoint( t, optionalTarget = new Vector2() ) {
-
-		const point = optionalTarget;
-
-		const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;
-
-		point.set(
-			CubicBezier( t, v0.x, v1.x, v2.x, v3.x ),
-			CubicBezier( t, v0.y, v1.y, v2.y, v3.y )
-		);
-
-		return point;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.v0.copy( source.v0 );
-		this.v1.copy( source.v1 );
-		this.v2.copy( source.v2 );
-		this.v3.copy( source.v3 );
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.v0 = this.v0.toArray();
-		data.v1 = this.v1.toArray();
-		data.v2 = this.v2.toArray();
-		data.v3 = this.v3.toArray();
-
-		return data;
-
-	}
-
-	fromJSON( json ) {
-
-		super.fromJSON( json );
-
-		this.v0.fromArray( json.v0 );
-		this.v1.fromArray( json.v1 );
-		this.v2.fromArray( json.v2 );
-		this.v3.fromArray( json.v3 );
-
-		return this;
-
-	}
-
-}
-
-class CubicBezierCurve3 extends Curve {
-
-	constructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3(), v3 = new Vector3() ) {
-
-		super();
-
-		this.isCubicBezierCurve3 = true;
-
-		this.type = 'CubicBezierCurve3';
-
-		this.v0 = v0;
-		this.v1 = v1;
-		this.v2 = v2;
-		this.v3 = v3;
-
-	}
-
-	getPoint( t, optionalTarget = new Vector3() ) {
-
-		const point = optionalTarget;
-
-		const v0 = this.v0, v1 = this.v1, v2 = this.v2, v3 = this.v3;
-
-		point.set(
-			CubicBezier( t, v0.x, v1.x, v2.x, v3.x ),
-			CubicBezier( t, v0.y, v1.y, v2.y, v3.y ),
-			CubicBezier( t, v0.z, v1.z, v2.z, v3.z )
-		);
-
-		return point;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.v0.copy( source.v0 );
-		this.v1.copy( source.v1 );
-		this.v2.copy( source.v2 );
-		this.v3.copy( source.v3 );
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.v0 = this.v0.toArray();
-		data.v1 = this.v1.toArray();
-		data.v2 = this.v2.toArray();
-		data.v3 = this.v3.toArray();
-
-		return data;
-
-	}
-
-	fromJSON( json ) {
-
-		super.fromJSON( json );
-
-		this.v0.fromArray( json.v0 );
-		this.v1.fromArray( json.v1 );
-		this.v2.fromArray( json.v2 );
-		this.v3.fromArray( json.v3 );
-
-		return this;
-
-	}
-
-}
-
-class LineCurve extends Curve {
-
-	constructor( v1 = new Vector2(), v2 = new Vector2() ) {
-
-		super();
-
-		this.isLineCurve = true;
-
-		this.type = 'LineCurve';
-
-		this.v1 = v1;
-		this.v2 = v2;
-
-	}
-
-	getPoint( t, optionalTarget = new Vector2() ) {
-
-		const point = optionalTarget;
-
-		if ( t === 1 ) {
-
-			point.copy( this.v2 );
-
-		} else {
-
-			point.copy( this.v2 ).sub( this.v1 );
-			point.multiplyScalar( t ).add( this.v1 );
-
-		}
-
-		return point;
-
-	}
-
-	// Line curve is linear, so we can overwrite default getPointAt
-	getPointAt( u, optionalTarget ) {
-
-		return this.getPoint( u, optionalTarget );
-
-	}
-
-	getTangent( t, optionalTarget = new Vector2() ) {
-
-		return optionalTarget.subVectors( this.v2, this.v1 ).normalize();
-
-	}
-
-	getTangentAt( u, optionalTarget ) {
-
-		return this.getTangent( u, optionalTarget );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.v1.copy( source.v1 );
-		this.v2.copy( source.v2 );
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.v1 = this.v1.toArray();
-		data.v2 = this.v2.toArray();
-
-		return data;
-
-	}
-
-	fromJSON( json ) {
-
-		super.fromJSON( json );
-
-		this.v1.fromArray( json.v1 );
-		this.v2.fromArray( json.v2 );
-
-		return this;
-
-	}
-
-}
-
-class LineCurve3 extends Curve {
-
-	constructor( v1 = new Vector3(), v2 = new Vector3() ) {
-
-		super();
-
-		this.isLineCurve3 = true;
-
-		this.type = 'LineCurve3';
-
-		this.v1 = v1;
-		this.v2 = v2;
-
-	}
-	getPoint( t, optionalTarget = new Vector3() ) {
-
-		const point = optionalTarget;
-
-		if ( t === 1 ) {
-
-			point.copy( this.v2 );
-
-		} else {
-
-			point.copy( this.v2 ).sub( this.v1 );
-			point.multiplyScalar( t ).add( this.v1 );
-
-		}
-
-		return point;
-
-	}
-	// Line curve is linear, so we can overwrite default getPointAt
-	getPointAt( u, optionalTarget ) {
-
-		return this.getPoint( u, optionalTarget );
-
-	}
-
-	getTangent( t, optionalTarget = new Vector3() ) {
-
-		return optionalTarget.subVectors( this.v2, this.v1 ).normalize();
-
-	}
-
-	getTangentAt( u, optionalTarget ) {
-
-		return this.getTangent( u, optionalTarget );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.v1.copy( source.v1 );
-		this.v2.copy( source.v2 );
-
-		return this;
-
-	}
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.v1 = this.v1.toArray();
-		data.v2 = this.v2.toArray();
-
-		return data;
-
-	}
-	fromJSON( json ) {
-
-		super.fromJSON( json );
-
-		this.v1.fromArray( json.v1 );
-		this.v2.fromArray( json.v2 );
-
-		return this;
-
-	}
-
-}
-
-class QuadraticBezierCurve extends Curve {
-
-	constructor( v0 = new Vector2(), v1 = new Vector2(), v2 = new Vector2() ) {
-
-		super();
-
-		this.isQuadraticBezierCurve = true;
-
-		this.type = 'QuadraticBezierCurve';
-
-		this.v0 = v0;
-		this.v1 = v1;
-		this.v2 = v2;
-
-	}
-
-	getPoint( t, optionalTarget = new Vector2() ) {
-
-		const point = optionalTarget;
-
-		const v0 = this.v0, v1 = this.v1, v2 = this.v2;
-
-		point.set(
-			QuadraticBezier( t, v0.x, v1.x, v2.x ),
-			QuadraticBezier( t, v0.y, v1.y, v2.y )
-		);
-
-		return point;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.v0.copy( source.v0 );
-		this.v1.copy( source.v1 );
-		this.v2.copy( source.v2 );
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.v0 = this.v0.toArray();
-		data.v1 = this.v1.toArray();
-		data.v2 = this.v2.toArray();
-
-		return data;
-
-	}
-
-	fromJSON( json ) {
-
-		super.fromJSON( json );
-
-		this.v0.fromArray( json.v0 );
-		this.v1.fromArray( json.v1 );
-		this.v2.fromArray( json.v2 );
-
-		return this;
-
-	}
-
-}
-
-class QuadraticBezierCurve3 extends Curve {
-
-	constructor( v0 = new Vector3(), v1 = new Vector3(), v2 = new Vector3() ) {
-
-		super();
-
-		this.isQuadraticBezierCurve3 = true;
-
-		this.type = 'QuadraticBezierCurve3';
-
-		this.v0 = v0;
-		this.v1 = v1;
-		this.v2 = v2;
-
-	}
-
-	getPoint( t, optionalTarget = new Vector3() ) {
-
-		const point = optionalTarget;
-
-		const v0 = this.v0, v1 = this.v1, v2 = this.v2;
-
-		point.set(
-			QuadraticBezier( t, v0.x, v1.x, v2.x ),
-			QuadraticBezier( t, v0.y, v1.y, v2.y ),
-			QuadraticBezier( t, v0.z, v1.z, v2.z )
-		);
-
-		return point;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.v0.copy( source.v0 );
-		this.v1.copy( source.v1 );
-		this.v2.copy( source.v2 );
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.v0 = this.v0.toArray();
-		data.v1 = this.v1.toArray();
-		data.v2 = this.v2.toArray();
-
-		return data;
-
-	}
-
-	fromJSON( json ) {
-
-		super.fromJSON( json );
-
-		this.v0.fromArray( json.v0 );
-		this.v1.fromArray( json.v1 );
-		this.v2.fromArray( json.v2 );
-
-		return this;
-
-	}
-
-}
-
-class SplineCurve extends Curve {
-
-	constructor( points = [] ) {
-
-		super();
-
-		this.isSplineCurve = true;
-
-		this.type = 'SplineCurve';
-
-		this.points = points;
-
-	}
-
-	getPoint( t, optionalTarget = new Vector2() ) {
-
-		const point = optionalTarget;
-
-		const points = this.points;
-		const p = ( points.length - 1 ) * t;
-
-		const intPoint = Math.floor( p );
-		const weight = p - intPoint;
-
-		const p0 = points[ intPoint === 0 ? intPoint : intPoint - 1 ];
-		const p1 = points[ intPoint ];
-		const p2 = points[ intPoint > points.length - 2 ? points.length - 1 : intPoint + 1 ];
-		const p3 = points[ intPoint > points.length - 3 ? points.length - 1 : intPoint + 2 ];
-
-		point.set(
-			CatmullRom( weight, p0.x, p1.x, p2.x, p3.x ),
-			CatmullRom( weight, p0.y, p1.y, p2.y, p3.y )
-		);
-
-		return point;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.points = [];
-
-		for ( let i = 0, l = source.points.length; i < l; i ++ ) {
-
-			const point = source.points[ i ];
-
-			this.points.push( point.clone() );
-
-		}
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.points = [];
-
-		for ( let i = 0, l = this.points.length; i < l; i ++ ) {
-
-			const point = this.points[ i ];
-			data.points.push( point.toArray() );
-
-		}
-
-		return data;
-
-	}
-
-	fromJSON( json ) {
-
-		super.fromJSON( json );
-
-		this.points = [];
-
-		for ( let i = 0, l = json.points.length; i < l; i ++ ) {
-
-			const point = json.points[ i ];
-			this.points.push( new Vector2().fromArray( point ) );
-
-		}
-
-		return this;
-
-	}
-
-}
-
-var Curves = /*#__PURE__*/Object.freeze({
-	__proto__: null,
-	ArcCurve: ArcCurve,
-	CatmullRomCurve3: CatmullRomCurve3,
-	CubicBezierCurve: CubicBezierCurve,
-	CubicBezierCurve3: CubicBezierCurve3,
-	EllipseCurve: EllipseCurve,
-	LineCurve: LineCurve,
-	LineCurve3: LineCurve3,
-	QuadraticBezierCurve: QuadraticBezierCurve,
-	QuadraticBezierCurve3: QuadraticBezierCurve3,
-	SplineCurve: SplineCurve
-});
-
-/**************************************************************
- *	Curved Path - a curve path is simply a array of connected
- *  curves, but retains the api of a curve
- **************************************************************/
-
-class CurvePath extends Curve {
-
-	constructor() {
-
-		super();
-
-		this.type = 'CurvePath';
-
-		this.curves = [];
-		this.autoClose = false; // Automatically closes the path
-
-	}
-
-	add( curve ) {
-
-		this.curves.push( curve );
-
-	}
-
-	closePath() {
-
-		// Add a line curve if start and end of lines are not connected
-		const startPoint = this.curves[ 0 ].getPoint( 0 );
-		const endPoint = this.curves[ this.curves.length - 1 ].getPoint( 1 );
-
-		if ( ! startPoint.equals( endPoint ) ) {
-
-			this.curves.push( new LineCurve( endPoint, startPoint ) );
-
-		}
-
-	}
-
-	// To get accurate point with reference to
-	// entire path distance at time t,
-	// following has to be done:
-
-	// 1. Length of each sub path have to be known
-	// 2. Locate and identify type of curve
-	// 3. Get t for the curve
-	// 4. Return curve.getPointAt(t')
-
-	getPoint( t, optionalTarget ) {
-
-		const d = t * this.getLength();
-		const curveLengths = this.getCurveLengths();
-		let i = 0;
-
-		// To think about boundaries points.
-
-		while ( i < curveLengths.length ) {
-
-			if ( curveLengths[ i ] >= d ) {
-
-				const diff = curveLengths[ i ] - d;
-				const curve = this.curves[ i ];
-
-				const segmentLength = curve.getLength();
-				const u = segmentLength === 0 ? 0 : 1 - diff / segmentLength;
-
-				return curve.getPointAt( u, optionalTarget );
-
-			}
-
-			i ++;
-
-		}
-
-		return null;
-
-		// loop where sum != 0, sum > d , sum+1 <d
-
-	}
-
-	// We cannot use the default THREE.Curve getPoint() with getLength() because in
-	// THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath
-	// getPoint() depends on getLength
-
-	getLength() {
-
-		const lens = this.getCurveLengths();
-		return lens[ lens.length - 1 ];
-
-	}
-
-	// cacheLengths must be recalculated.
-	updateArcLengths() {
-
-		this.needsUpdate = true;
-		this.cacheLengths = null;
-		this.getCurveLengths();
-
-	}
-
-	// Compute lengths and cache them
-	// We cannot overwrite getLengths() because UtoT mapping uses it.
-
-	getCurveLengths() {
-
-		// We use cache values if curves and cache array are same length
-
-		if ( this.cacheLengths && this.cacheLengths.length === this.curves.length ) {
-
-			return this.cacheLengths;
-
-		}
-
-		// Get length of sub-curve
-		// Push sums into cached array
-
-		const lengths = [];
-		let sums = 0;
-
-		for ( let i = 0, l = this.curves.length; i < l; i ++ ) {
-
-			sums += this.curves[ i ].getLength();
-			lengths.push( sums );
-
-		}
-
-		this.cacheLengths = lengths;
-
-		return lengths;
-
-	}
-
-	getSpacedPoints( divisions = 40 ) {
-
-		const points = [];
-
-		for ( let i = 0; i <= divisions; i ++ ) {
-
-			points.push( this.getPoint( i / divisions ) );
-
-		}
-
-		if ( this.autoClose ) {
-
-			points.push( points[ 0 ] );
-
-		}
-
-		return points;
-
-	}
-
-	getPoints( divisions = 12 ) {
-
-		const points = [];
-		let last;
-
-		for ( let i = 0, curves = this.curves; i < curves.length; i ++ ) {
-
-			const curve = curves[ i ];
-			const resolution = curve.isEllipseCurve ? divisions * 2
-				: ( curve.isLineCurve || curve.isLineCurve3 ) ? 1
-					: curve.isSplineCurve ? divisions * curve.points.length
-						: divisions;
-
-			const pts = curve.getPoints( resolution );
-
-			for ( let j = 0; j < pts.length; j ++ ) {
-
-				const point = pts[ j ];
-
-				if ( last && last.equals( point ) ) continue; // ensures no consecutive points are duplicates
-
-				points.push( point );
-				last = point;
-
-			}
-
-		}
-
-		if ( this.autoClose && points.length > 1 && ! points[ points.length - 1 ].equals( points[ 0 ] ) ) {
-
-			points.push( points[ 0 ] );
-
-		}
-
-		return points;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.curves = [];
-
-		for ( let i = 0, l = source.curves.length; i < l; i ++ ) {
-
-			const curve = source.curves[ i ];
-
-			this.curves.push( curve.clone() );
-
-		}
-
-		this.autoClose = source.autoClose;
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.autoClose = this.autoClose;
-		data.curves = [];
-
-		for ( let i = 0, l = this.curves.length; i < l; i ++ ) {
-
-			const curve = this.curves[ i ];
-			data.curves.push( curve.toJSON() );
-
-		}
-
-		return data;
-
-	}
-
-	fromJSON( json ) {
-
-		super.fromJSON( json );
-
-		this.autoClose = json.autoClose;
-		this.curves = [];
-
-		for ( let i = 0, l = json.curves.length; i < l; i ++ ) {
-
-			const curve = json.curves[ i ];
-			this.curves.push( new Curves[ curve.type ]().fromJSON( curve ) );
-
-		}
-
-		return this;
-
-	}
-
-}
-
-class Path extends CurvePath {
-
-	constructor( points ) {
-
-		super();
-
-		this.type = 'Path';
-
-		this.currentPoint = new Vector2();
-
-		if ( points ) {
-
-			this.setFromPoints( points );
-
-		}
-
-	}
-
-	setFromPoints( points ) {
-
-		this.moveTo( points[ 0 ].x, points[ 0 ].y );
-
-		for ( let i = 1, l = points.length; i < l; i ++ ) {
-
-			this.lineTo( points[ i ].x, points[ i ].y );
-
-		}
-
-		return this;
-
-	}
-
-	moveTo( x, y ) {
-
-		this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?
-
-		return this;
-
-	}
-
-	lineTo( x, y ) {
-
-		const curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );
-		this.curves.push( curve );
-
-		this.currentPoint.set( x, y );
-
-		return this;
-
-	}
-
-	quadraticCurveTo( aCPx, aCPy, aX, aY ) {
-
-		const curve = new QuadraticBezierCurve(
-			this.currentPoint.clone(),
-			new Vector2( aCPx, aCPy ),
-			new Vector2( aX, aY )
-		);
-
-		this.curves.push( curve );
-
-		this.currentPoint.set( aX, aY );
-
-		return this;
-
-	}
-
-	bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {
-
-		const curve = new CubicBezierCurve(
-			this.currentPoint.clone(),
-			new Vector2( aCP1x, aCP1y ),
-			new Vector2( aCP2x, aCP2y ),
-			new Vector2( aX, aY )
-		);
-
-		this.curves.push( curve );
-
-		this.currentPoint.set( aX, aY );
-
-		return this;
-
-	}
-
-	splineThru( pts /*Array of Vector*/ ) {
-
-		const npts = [ this.currentPoint.clone() ].concat( pts );
-
-		const curve = new SplineCurve( npts );
-		this.curves.push( curve );
-
-		this.currentPoint.copy( pts[ pts.length - 1 ] );
-
-		return this;
-
-	}
-
-	arc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
-
-		const x0 = this.currentPoint.x;
-		const y0 = this.currentPoint.y;
-
-		this.absarc( aX + x0, aY + y0, aRadius,
-			aStartAngle, aEndAngle, aClockwise );
-
-		return this;
-
-	}
-
-	absarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
-
-		this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );
-
-		return this;
-
-	}
-
-	ellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {
-
-		const x0 = this.currentPoint.x;
-		const y0 = this.currentPoint.y;
-
-		this.absellipse( aX + x0, aY + y0, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );
-
-		return this;
-
-	}
-
-	absellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {
-
-		const curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );
-
-		if ( this.curves.length > 0 ) {
-
-			// if a previous curve is present, attempt to join
-			const firstPoint = curve.getPoint( 0 );
-
-			if ( ! firstPoint.equals( this.currentPoint ) ) {
-
-				this.lineTo( firstPoint.x, firstPoint.y );
-
-			}
-
-		}
-
-		this.curves.push( curve );
-
-		const lastPoint = curve.getPoint( 1 );
-		this.currentPoint.copy( lastPoint );
-
-		return this;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.currentPoint.copy( source.currentPoint );
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.currentPoint = this.currentPoint.toArray();
-
-		return data;
-
-	}
-
-	fromJSON( json ) {
-
-		super.fromJSON( json );
-
-		this.currentPoint.fromArray( json.currentPoint );
-
-		return this;
-
-	}
-
-}
-
-class LatheGeometry extends BufferGeometry {
-
-	constructor( points = [ new Vector2( 0, - 0.5 ), new Vector2( 0.5, 0 ), new Vector2( 0, 0.5 ) ], segments = 12, phiStart = 0, phiLength = Math.PI * 2 ) {
-
-		super();
-
-		this.type = 'LatheGeometry';
-
-		this.parameters = {
-			points: points,
-			segments: segments,
-			phiStart: phiStart,
-			phiLength: phiLength
-		};
-
-		segments = Math.floor( segments );
-
-		// clamp phiLength so it's in range of [ 0, 2PI ]
-
-		phiLength = clamp( phiLength, 0, Math.PI * 2 );
-
-		// buffers
-
-		const indices = [];
-		const vertices = [];
-		const uvs = [];
-		const initNormals = [];
-		const normals = [];
-
-		// helper variables
-
-		const inverseSegments = 1.0 / segments;
-		const vertex = new Vector3();
-		const uv = new Vector2();
-		const normal = new Vector3();
-		const curNormal = new Vector3();
-		const prevNormal = new Vector3();
-		let dx = 0;
-		let dy = 0;
-
-		// pre-compute normals for initial "meridian"
-
-		for ( let j = 0; j <= ( points.length - 1 ); j ++ ) {
-
-			switch ( j ) {
-
-				case 0:				// special handling for 1st vertex on path
-
-					dx = points[ j + 1 ].x - points[ j ].x;
-					dy = points[ j + 1 ].y - points[ j ].y;
-
-					normal.x = dy * 1.0;
-					normal.y = - dx;
-					normal.z = dy * 0.0;
-
-					prevNormal.copy( normal );
-
-					normal.normalize();
-
-					initNormals.push( normal.x, normal.y, normal.z );
-
-					break;
-
-				case ( points.length - 1 ):	// special handling for last Vertex on path
-
-					initNormals.push( prevNormal.x, prevNormal.y, prevNormal.z );
-
-					break;
-
-				default:			// default handling for all vertices in between
-
-					dx = points[ j + 1 ].x - points[ j ].x;
-					dy = points[ j + 1 ].y - points[ j ].y;
-
-					normal.x = dy * 1.0;
-					normal.y = - dx;
-					normal.z = dy * 0.0;
-
-					curNormal.copy( normal );
-
-					normal.x += prevNormal.x;
-					normal.y += prevNormal.y;
-					normal.z += prevNormal.z;
-
-					normal.normalize();
-
-					initNormals.push( normal.x, normal.y, normal.z );
-
-					prevNormal.copy( curNormal );
-
-			}
-
-		}
-
-		// generate vertices, uvs and normals
-
-		for ( let i = 0; i <= segments; i ++ ) {
-
-			const phi = phiStart + i * inverseSegments * phiLength;
-
-			const sin = Math.sin( phi );
-			const cos = Math.cos( phi );
-
-			for ( let j = 0; j <= ( points.length - 1 ); j ++ ) {
-
-				// vertex
-
-				vertex.x = points[ j ].x * sin;
-				vertex.y = points[ j ].y;
-				vertex.z = points[ j ].x * cos;
-
-				vertices.push( vertex.x, vertex.y, vertex.z );
-
-				// uv
-
-				uv.x = i / segments;
-				uv.y = j / ( points.length - 1 );
-
-				uvs.push( uv.x, uv.y );
-
-				// normal
-
-				const x = initNormals[ 3 * j + 0 ] * sin;
-				const y = initNormals[ 3 * j + 1 ];
-				const z = initNormals[ 3 * j + 0 ] * cos;
-
-				normals.push( x, y, z );
-
-			}
-
-		}
-
-		// indices
-
-		for ( let i = 0; i < segments; i ++ ) {
-
-			for ( let j = 0; j < ( points.length - 1 ); j ++ ) {
-
-				const base = j + i * points.length;
-
-				const a = base;
-				const b = base + points.length;
-				const c = base + points.length + 1;
-				const d = base + 1;
-
-				// faces
-
-				indices.push( a, b, d );
-				indices.push( c, d, b );
-
-			}
-
-		}
-
-		// build geometry
-
-		this.setIndex( indices );
-		this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
-		this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-	static fromJSON( data ) {
-
-		return new LatheGeometry( data.points, data.segments, data.phiStart, data.phiLength );
-
-	}
-
-}
-
-class CapsuleGeometry extends LatheGeometry {
-
-	constructor( radius = 1, length = 1, capSegments = 4, radialSegments = 8 ) {
-
-		const path = new Path();
-		path.absarc( 0, - length / 2, radius, Math.PI * 1.5, 0 );
-		path.absarc( 0, length / 2, radius, 0, Math.PI * 0.5 );
-
-		super( path.getPoints( capSegments ), radialSegments );
-
-		this.type = 'CapsuleGeometry';
-
-		this.parameters = {
-			radius: radius,
-			height: length,
-			capSegments: capSegments,
-			radialSegments: radialSegments,
-		};
-
-	}
-
-	static fromJSON( data ) {
-
-		return new CapsuleGeometry( data.radius, data.length, data.capSegments, data.radialSegments );
-
-	}
-
-}
-
-class CircleGeometry extends BufferGeometry {
-
-	constructor( radius = 1, segments = 32, thetaStart = 0, thetaLength = Math.PI * 2 ) {
-
-		super();
-
-		this.type = 'CircleGeometry';
-
-		this.parameters = {
-			radius: radius,
-			segments: segments,
-			thetaStart: thetaStart,
-			thetaLength: thetaLength
-		};
-
-		segments = Math.max( 3, segments );
-
-		// buffers
-
-		const indices = [];
-		const vertices = [];
-		const normals = [];
-		const uvs = [];
-
-		// helper variables
-
-		const vertex = new Vector3();
-		const uv = new Vector2();
-
-		// center point
-
-		vertices.push( 0, 0, 0 );
-		normals.push( 0, 0, 1 );
-		uvs.push( 0.5, 0.5 );
-
-		for ( let s = 0, i = 3; s <= segments; s ++, i += 3 ) {
-
-			const segment = thetaStart + s / segments * thetaLength;
-
-			// vertex
-
-			vertex.x = radius * Math.cos( segment );
-			vertex.y = radius * Math.sin( segment );
-
-			vertices.push( vertex.x, vertex.y, vertex.z );
-
-			// normal
-
-			normals.push( 0, 0, 1 );
-
-			// uvs
-
-			uv.x = ( vertices[ i ] / radius + 1 ) / 2;
-			uv.y = ( vertices[ i + 1 ] / radius + 1 ) / 2;
-
-			uvs.push( uv.x, uv.y );
-
-		}
-
-		// indices
-
-		for ( let i = 1; i <= segments; i ++ ) {
-
-			indices.push( i, i + 1, 0 );
-
-		}
-
-		// build geometry
-
-		this.setIndex( indices );
-		this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-	static fromJSON( data ) {
-
-		return new CircleGeometry( data.radius, data.segments, data.thetaStart, data.thetaLength );
-
-	}
-
-}
-
-class CylinderGeometry extends BufferGeometry {
-
-	constructor( radiusTop = 1, radiusBottom = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {
-
-		super();
-
-		this.type = 'CylinderGeometry';
-
-		this.parameters = {
-			radiusTop: radiusTop,
-			radiusBottom: radiusBottom,
-			height: height,
-			radialSegments: radialSegments,
-			heightSegments: heightSegments,
-			openEnded: openEnded,
-			thetaStart: thetaStart,
-			thetaLength: thetaLength
-		};
-
-		const scope = this;
-
-		radialSegments = Math.floor( radialSegments );
-		heightSegments = Math.floor( heightSegments );
-
-		// buffers
-
-		const indices = [];
-		const vertices = [];
-		const normals = [];
-		const uvs = [];
-
-		// helper variables
-
-		let index = 0;
-		const indexArray = [];
-		const halfHeight = height / 2;
-		let groupStart = 0;
-
-		// generate geometry
-
-		generateTorso();
-
-		if ( openEnded === false ) {
-
-			if ( radiusTop > 0 ) generateCap( true );
-			if ( radiusBottom > 0 ) generateCap( false );
-
-		}
-
-		// build geometry
-
-		this.setIndex( indices );
-		this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
-
-		function generateTorso() {
-
-			const normal = new Vector3();
-			const vertex = new Vector3();
-
-			let groupCount = 0;
-
-			// this will be used to calculate the normal
-			const slope = ( radiusBottom - radiusTop ) / height;
-
-			// generate vertices, normals and uvs
-
-			for ( let y = 0; y <= heightSegments; y ++ ) {
-
-				const indexRow = [];
-
-				const v = y / heightSegments;
-
-				// calculate the radius of the current row
-
-				const radius = v * ( radiusBottom - radiusTop ) + radiusTop;
-
-				for ( let x = 0; x <= radialSegments; x ++ ) {
-
-					const u = x / radialSegments;
-
-					const theta = u * thetaLength + thetaStart;
-
-					const sinTheta = Math.sin( theta );
-					const cosTheta = Math.cos( theta );
-
-					// vertex
-
-					vertex.x = radius * sinTheta;
-					vertex.y = - v * height + halfHeight;
-					vertex.z = radius * cosTheta;
-					vertices.push( vertex.x, vertex.y, vertex.z );
-
-					// normal
-
-					normal.set( sinTheta, slope, cosTheta ).normalize();
-					normals.push( normal.x, normal.y, normal.z );
-
-					// uv
-
-					uvs.push( u, 1 - v );
-
-					// save index of vertex in respective row
-
-					indexRow.push( index ++ );
-
-				}
-
-				// now save vertices of the row in our index array
-
-				indexArray.push( indexRow );
-
-			}
-
-			// generate indices
-
-			for ( let x = 0; x < radialSegments; x ++ ) {
-
-				for ( let y = 0; y < heightSegments; y ++ ) {
-
-					// we use the index array to access the correct indices
-
-					const a = indexArray[ y ][ x ];
-					const b = indexArray[ y + 1 ][ x ];
-					const c = indexArray[ y + 1 ][ x + 1 ];
-					const d = indexArray[ y ][ x + 1 ];
-
-					// faces
-
-					indices.push( a, b, d );
-					indices.push( b, c, d );
-
-					// update group counter
-
-					groupCount += 6;
-
-				}
-
-			}
-
-			// add a group to the geometry. this will ensure multi material support
-
-			scope.addGroup( groupStart, groupCount, 0 );
-
-			// calculate new start value for groups
-
-			groupStart += groupCount;
-
-		}
-
-		function generateCap( top ) {
-
-			// save the index of the first center vertex
-			const centerIndexStart = index;
-
-			const uv = new Vector2();
-			const vertex = new Vector3();
-
-			let groupCount = 0;
-
-			const radius = ( top === true ) ? radiusTop : radiusBottom;
-			const sign = ( top === true ) ? 1 : - 1;
-
-			// first we generate the center vertex data of the cap.
-			// because the geometry needs one set of uvs per face,
-			// we must generate a center vertex per face/segment
-
-			for ( let x = 1; x <= radialSegments; x ++ ) {
-
-				// vertex
-
-				vertices.push( 0, halfHeight * sign, 0 );
-
-				// normal
-
-				normals.push( 0, sign, 0 );
-
-				// uv
-
-				uvs.push( 0.5, 0.5 );
-
-				// increase index
-
-				index ++;
-
-			}
-
-			// save the index of the last center vertex
-			const centerIndexEnd = index;
-
-			// now we generate the surrounding vertices, normals and uvs
-
-			for ( let x = 0; x <= radialSegments; x ++ ) {
-
-				const u = x / radialSegments;
-				const theta = u * thetaLength + thetaStart;
-
-				const cosTheta = Math.cos( theta );
-				const sinTheta = Math.sin( theta );
-
-				// vertex
-
-				vertex.x = radius * sinTheta;
-				vertex.y = halfHeight * sign;
-				vertex.z = radius * cosTheta;
-				vertices.push( vertex.x, vertex.y, vertex.z );
-
-				// normal
-
-				normals.push( 0, sign, 0 );
-
-				// uv
-
-				uv.x = ( cosTheta * 0.5 ) + 0.5;
-				uv.y = ( sinTheta * 0.5 * sign ) + 0.5;
-				uvs.push( uv.x, uv.y );
-
-				// increase index
-
-				index ++;
-
-			}
-
-			// generate indices
-
-			for ( let x = 0; x < radialSegments; x ++ ) {
-
-				const c = centerIndexStart + x;
-				const i = centerIndexEnd + x;
-
-				if ( top === true ) {
-
-					// face top
-
-					indices.push( i, i + 1, c );
-
-				} else {
-
-					// face bottom
-
-					indices.push( i + 1, i, c );
-
-				}
-
-				groupCount += 3;
-
-			}
-
-			// add a group to the geometry. this will ensure multi material support
-
-			scope.addGroup( groupStart, groupCount, top === true ? 1 : 2 );
-
-			// calculate new start value for groups
-
-			groupStart += groupCount;
-
-		}
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-	static fromJSON( data ) {
-
-		return new CylinderGeometry( data.radiusTop, data.radiusBottom, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );
-
-	}
-
-}
-
-class ConeGeometry extends CylinderGeometry {
-
-	constructor( radius = 1, height = 1, radialSegments = 32, heightSegments = 1, openEnded = false, thetaStart = 0, thetaLength = Math.PI * 2 ) {
-
-		super( 0, radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );
-
-		this.type = 'ConeGeometry';
-
-		this.parameters = {
-			radius: radius,
-			height: height,
-			radialSegments: radialSegments,
-			heightSegments: heightSegments,
-			openEnded: openEnded,
-			thetaStart: thetaStart,
-			thetaLength: thetaLength
-		};
-
-	}
-
-	static fromJSON( data ) {
-
-		return new ConeGeometry( data.radius, data.height, data.radialSegments, data.heightSegments, data.openEnded, data.thetaStart, data.thetaLength );
-
-	}
-
-}
-
-class PolyhedronGeometry extends BufferGeometry {
-
-	constructor( vertices = [], indices = [], radius = 1, detail = 0 ) {
-
-		super();
-
-		this.type = 'PolyhedronGeometry';
-
-		this.parameters = {
-			vertices: vertices,
-			indices: indices,
-			radius: radius,
-			detail: detail
-		};
-
-		// default buffer data
-
-		const vertexBuffer = [];
-		const uvBuffer = [];
-
-		// the subdivision creates the vertex buffer data
-
-		subdivide( detail );
-
-		// all vertices should lie on a conceptual sphere with a given radius
-
-		applyRadius( radius );
-
-		// finally, create the uv data
-
-		generateUVs();
-
-		// build non-indexed geometry
-
-		this.setAttribute( 'position', new Float32BufferAttribute( vertexBuffer, 3 ) );
-		this.setAttribute( 'normal', new Float32BufferAttribute( vertexBuffer.slice(), 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvBuffer, 2 ) );
-
-		if ( detail === 0 ) {
-
-			this.computeVertexNormals(); // flat normals
-
-		} else {
-
-			this.normalizeNormals(); // smooth normals
-
-		}
-
-		// helper functions
-
-		function subdivide( detail ) {
-
-			const a = new Vector3();
-			const b = new Vector3();
-			const c = new Vector3();
-
-			// iterate over all faces and apply a subdivision with the given detail value
-
-			for ( let i = 0; i < indices.length; i += 3 ) {
-
-				// get the vertices of the face
-
-				getVertexByIndex( indices[ i + 0 ], a );
-				getVertexByIndex( indices[ i + 1 ], b );
-				getVertexByIndex( indices[ i + 2 ], c );
-
-				// perform subdivision
-
-				subdivideFace( a, b, c, detail );
-
-			}
-
-		}
-
-		function subdivideFace( a, b, c, detail ) {
-
-			const cols = detail + 1;
-
-			// we use this multidimensional array as a data structure for creating the subdivision
-
-			const v = [];
-
-			// construct all of the vertices for this subdivision
-
-			for ( let i = 0; i <= cols; i ++ ) {
-
-				v[ i ] = [];
-
-				const aj = a.clone().lerp( c, i / cols );
-				const bj = b.clone().lerp( c, i / cols );
-
-				const rows = cols - i;
-
-				for ( let j = 0; j <= rows; j ++ ) {
-
-					if ( j === 0 && i === cols ) {
-
-						v[ i ][ j ] = aj;
-
-					} else {
-
-						v[ i ][ j ] = aj.clone().lerp( bj, j / rows );
-
-					}
-
-				}
-
-			}
-
-			// construct all of the faces
-
-			for ( let i = 0; i < cols; i ++ ) {
-
-				for ( let j = 0; j < 2 * ( cols - i ) - 1; j ++ ) {
-
-					const k = Math.floor( j / 2 );
-
-					if ( j % 2 === 0 ) {
-
-						pushVertex( v[ i ][ k + 1 ] );
-						pushVertex( v[ i + 1 ][ k ] );
-						pushVertex( v[ i ][ k ] );
-
-					} else {
-
-						pushVertex( v[ i ][ k + 1 ] );
-						pushVertex( v[ i + 1 ][ k + 1 ] );
-						pushVertex( v[ i + 1 ][ k ] );
-
-					}
-
-				}
-
-			}
-
-		}
-
-		function applyRadius( radius ) {
-
-			const vertex = new Vector3();
-
-			// iterate over the entire buffer and apply the radius to each vertex
-
-			for ( let i = 0; i < vertexBuffer.length; i += 3 ) {
-
-				vertex.x = vertexBuffer[ i + 0 ];
-				vertex.y = vertexBuffer[ i + 1 ];
-				vertex.z = vertexBuffer[ i + 2 ];
-
-				vertex.normalize().multiplyScalar( radius );
-
-				vertexBuffer[ i + 0 ] = vertex.x;
-				vertexBuffer[ i + 1 ] = vertex.y;
-				vertexBuffer[ i + 2 ] = vertex.z;
-
-			}
-
-		}
-
-		function generateUVs() {
-
-			const vertex = new Vector3();
-
-			for ( let i = 0; i < vertexBuffer.length; i += 3 ) {
-
-				vertex.x = vertexBuffer[ i + 0 ];
-				vertex.y = vertexBuffer[ i + 1 ];
-				vertex.z = vertexBuffer[ i + 2 ];
-
-				const u = azimuth( vertex ) / 2 / Math.PI + 0.5;
-				const v = inclination( vertex ) / Math.PI + 0.5;
-				uvBuffer.push( u, 1 - v );
-
-			}
-
-			correctUVs();
-
-			correctSeam();
-
-		}
-
-		function correctSeam() {
-
-			// handle case when face straddles the seam, see #3269
-
-			for ( let i = 0; i < uvBuffer.length; i += 6 ) {
-
-				// uv data of a single face
-
-				const x0 = uvBuffer[ i + 0 ];
-				const x1 = uvBuffer[ i + 2 ];
-				const x2 = uvBuffer[ i + 4 ];
-
-				const max = Math.max( x0, x1, x2 );
-				const min = Math.min( x0, x1, x2 );
-
-				// 0.9 is somewhat arbitrary
-
-				if ( max > 0.9 && min < 0.1 ) {
-
-					if ( x0 < 0.2 ) uvBuffer[ i + 0 ] += 1;
-					if ( x1 < 0.2 ) uvBuffer[ i + 2 ] += 1;
-					if ( x2 < 0.2 ) uvBuffer[ i + 4 ] += 1;
-
-				}
-
-			}
-
-		}
-
-		function pushVertex( vertex ) {
-
-			vertexBuffer.push( vertex.x, vertex.y, vertex.z );
-
-		}
-
-		function getVertexByIndex( index, vertex ) {
-
-			const stride = index * 3;
-
-			vertex.x = vertices[ stride + 0 ];
-			vertex.y = vertices[ stride + 1 ];
-			vertex.z = vertices[ stride + 2 ];
-
-		}
-
-		function correctUVs() {
-
-			const a = new Vector3();
-			const b = new Vector3();
-			const c = new Vector3();
-
-			const centroid = new Vector3();
-
-			const uvA = new Vector2();
-			const uvB = new Vector2();
-			const uvC = new Vector2();
-
-			for ( let i = 0, j = 0; i < vertexBuffer.length; i += 9, j += 6 ) {
-
-				a.set( vertexBuffer[ i + 0 ], vertexBuffer[ i + 1 ], vertexBuffer[ i + 2 ] );
-				b.set( vertexBuffer[ i + 3 ], vertexBuffer[ i + 4 ], vertexBuffer[ i + 5 ] );
-				c.set( vertexBuffer[ i + 6 ], vertexBuffer[ i + 7 ], vertexBuffer[ i + 8 ] );
-
-				uvA.set( uvBuffer[ j + 0 ], uvBuffer[ j + 1 ] );
-				uvB.set( uvBuffer[ j + 2 ], uvBuffer[ j + 3 ] );
-				uvC.set( uvBuffer[ j + 4 ], uvBuffer[ j + 5 ] );
-
-				centroid.copy( a ).add( b ).add( c ).divideScalar( 3 );
-
-				const azi = azimuth( centroid );
-
-				correctUV( uvA, j + 0, a, azi );
-				correctUV( uvB, j + 2, b, azi );
-				correctUV( uvC, j + 4, c, azi );
-
-			}
-
-		}
-
-		function correctUV( uv, stride, vector, azimuth ) {
-
-			if ( ( azimuth < 0 ) && ( uv.x === 1 ) ) {
-
-				uvBuffer[ stride ] = uv.x - 1;
-
-			}
-
-			if ( ( vector.x === 0 ) && ( vector.z === 0 ) ) {
-
-				uvBuffer[ stride ] = azimuth / 2 / Math.PI + 0.5;
-
-			}
-
-		}
-
-		// Angle around the Y axis, counter-clockwise when looking from above.
-
-		function azimuth( vector ) {
-
-			return Math.atan2( vector.z, - vector.x );
-
-		}
-
-
-		// Angle above the XZ plane.
-
-		function inclination( vector ) {
-
-			return Math.atan2( - vector.y, Math.sqrt( ( vector.x * vector.x ) + ( vector.z * vector.z ) ) );
-
-		}
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-	static fromJSON( data ) {
-
-		return new PolyhedronGeometry( data.vertices, data.indices, data.radius, data.details );
-
-	}
-
-}
-
-class DodecahedronGeometry extends PolyhedronGeometry {
-
-	constructor( radius = 1, detail = 0 ) {
-
-		const t = ( 1 + Math.sqrt( 5 ) ) / 2;
-		const r = 1 / t;
-
-		const vertices = [
-
-			// (±1, ±1, ±1)
-			- 1, - 1, - 1,	- 1, - 1, 1,
-			- 1, 1, - 1, - 1, 1, 1,
-			1, - 1, - 1, 1, - 1, 1,
-			1, 1, - 1, 1, 1, 1,
-
-			// (0, ±1/φ, ±φ)
-			0, - r, - t, 0, - r, t,
-			0, r, - t, 0, r, t,
-
-			// (±1/φ, ±φ, 0)
-			- r, - t, 0, - r, t, 0,
-			r, - t, 0, r, t, 0,
-
-			// (±φ, 0, ±1/φ)
-			- t, 0, - r, t, 0, - r,
-			- t, 0, r, t, 0, r
-		];
-
-		const indices = [
-			3, 11, 7, 	3, 7, 15, 	3, 15, 13,
-			7, 19, 17, 	7, 17, 6, 	7, 6, 15,
-			17, 4, 8, 	17, 8, 10, 	17, 10, 6,
-			8, 0, 16, 	8, 16, 2, 	8, 2, 10,
-			0, 12, 1, 	0, 1, 18, 	0, 18, 16,
-			6, 10, 2, 	6, 2, 13, 	6, 13, 15,
-			2, 16, 18, 	2, 18, 3, 	2, 3, 13,
-			18, 1, 9, 	18, 9, 11, 	18, 11, 3,
-			4, 14, 12, 	4, 12, 0, 	4, 0, 8,
-			11, 9, 5, 	11, 5, 19, 	11, 19, 7,
-			19, 5, 14, 	19, 14, 4, 	19, 4, 17,
-			1, 12, 14, 	1, 14, 5, 	1, 5, 9
-		];
-
-		super( vertices, indices, radius, detail );
-
-		this.type = 'DodecahedronGeometry';
-
-		this.parameters = {
-			radius: radius,
-			detail: detail
-		};
-
-	}
-
-	static fromJSON( data ) {
-
-		return new DodecahedronGeometry( data.radius, data.detail );
-
-	}
-
-}
-
-const _v0 = /*@__PURE__*/ new Vector3();
-const _v1$1 = /*@__PURE__*/ new Vector3();
-const _normal = /*@__PURE__*/ new Vector3();
-const _triangle = /*@__PURE__*/ new Triangle();
-
-class EdgesGeometry extends BufferGeometry {
-
-	constructor( geometry = null, thresholdAngle = 1 ) {
-
-		super();
-
-		this.type = 'EdgesGeometry';
-
-		this.parameters = {
-			geometry: geometry,
-			thresholdAngle: thresholdAngle
-		};
-
-		if ( geometry !== null ) {
-
-			const precisionPoints = 4;
-			const precision = Math.pow( 10, precisionPoints );
-			const thresholdDot = Math.cos( DEG2RAD * thresholdAngle );
-
-			const indexAttr = geometry.getIndex();
-			const positionAttr = geometry.getAttribute( 'position' );
-			const indexCount = indexAttr ? indexAttr.count : positionAttr.count;
-
-			const indexArr = [ 0, 0, 0 ];
-			const vertKeys = [ 'a', 'b', 'c' ];
-			const hashes = new Array( 3 );
-
-			const edgeData = {};
-			const vertices = [];
-			for ( let i = 0; i < indexCount; i += 3 ) {
-
-				if ( indexAttr ) {
-
-					indexArr[ 0 ] = indexAttr.getX( i );
-					indexArr[ 1 ] = indexAttr.getX( i + 1 );
-					indexArr[ 2 ] = indexAttr.getX( i + 2 );
-
-				} else {
-
-					indexArr[ 0 ] = i;
-					indexArr[ 1 ] = i + 1;
-					indexArr[ 2 ] = i + 2;
-
-				}
-
-				const { a, b, c } = _triangle;
-				a.fromBufferAttribute( positionAttr, indexArr[ 0 ] );
-				b.fromBufferAttribute( positionAttr, indexArr[ 1 ] );
-				c.fromBufferAttribute( positionAttr, indexArr[ 2 ] );
-				_triangle.getNormal( _normal );
-
-				// create hashes for the edge from the vertices
-				hashes[ 0 ] = `${ Math.round( a.x * precision ) },${ Math.round( a.y * precision ) },${ Math.round( a.z * precision ) }`;
-				hashes[ 1 ] = `${ Math.round( b.x * precision ) },${ Math.round( b.y * precision ) },${ Math.round( b.z * precision ) }`;
-				hashes[ 2 ] = `${ Math.round( c.x * precision ) },${ Math.round( c.y * precision ) },${ Math.round( c.z * precision ) }`;
-
-				// skip degenerate triangles
-				if ( hashes[ 0 ] === hashes[ 1 ] || hashes[ 1 ] === hashes[ 2 ] || hashes[ 2 ] === hashes[ 0 ] ) {
-
-					continue;
-
-				}
-
-				// iterate over every edge
-				for ( let j = 0; j < 3; j ++ ) {
-
-					// get the first and next vertex making up the edge
-					const jNext = ( j + 1 ) % 3;
-					const vecHash0 = hashes[ j ];
-					const vecHash1 = hashes[ jNext ];
-					const v0 = _triangle[ vertKeys[ j ] ];
-					const v1 = _triangle[ vertKeys[ jNext ] ];
-
-					const hash = `${ vecHash0 }_${ vecHash1 }`;
-					const reverseHash = `${ vecHash1 }_${ vecHash0 }`;
-
-					if ( reverseHash in edgeData && edgeData[ reverseHash ] ) {
-
-						// if we found a sibling edge add it into the vertex array if
-						// it meets the angle threshold and delete the edge from the map.
-						if ( _normal.dot( edgeData[ reverseHash ].normal ) <= thresholdDot ) {
-
-							vertices.push( v0.x, v0.y, v0.z );
-							vertices.push( v1.x, v1.y, v1.z );
-
-						}
-
-						edgeData[ reverseHash ] = null;
-
-					} else if ( ! ( hash in edgeData ) ) {
-
-						// if we've already got an edge here then skip adding a new one
-						edgeData[ hash ] = {
-
-							index0: indexArr[ j ],
-							index1: indexArr[ jNext ],
-							normal: _normal.clone(),
-
-						};
-
-					}
-
-				}
-
-			}
-
-			// iterate over all remaining, unmatched edges and add them to the vertex array
-			for ( const key in edgeData ) {
-
-				if ( edgeData[ key ] ) {
-
-					const { index0, index1 } = edgeData[ key ];
-					_v0.fromBufferAttribute( positionAttr, index0 );
-					_v1$1.fromBufferAttribute( positionAttr, index1 );
-
-					vertices.push( _v0.x, _v0.y, _v0.z );
-					vertices.push( _v1$1.x, _v1$1.y, _v1$1.z );
-
-				}
-
-			}
-
-			this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-
-		}
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-}
-
-class Shape extends Path {
-
-	constructor( points ) {
-
-		super( points );
-
-		this.uuid = generateUUID();
-
-		this.type = 'Shape';
-
-		this.holes = [];
-
-	}
-
-	getPointsHoles( divisions ) {
-
-		const holesPts = [];
-
-		for ( let i = 0, l = this.holes.length; i < l; i ++ ) {
-
-			holesPts[ i ] = this.holes[ i ].getPoints( divisions );
-
-		}
-
-		return holesPts;
-
-	}
-
-	// get points of shape and holes (keypoints based on segments parameter)
-
-	extractPoints( divisions ) {
-
-		return {
-
-			shape: this.getPoints( divisions ),
-			holes: this.getPointsHoles( divisions )
-
-		};
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.holes = [];
-
-		for ( let i = 0, l = source.holes.length; i < l; i ++ ) {
-
-			const hole = source.holes[ i ];
-
-			this.holes.push( hole.clone() );
-
-		}
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.uuid = this.uuid;
-		data.holes = [];
-
-		for ( let i = 0, l = this.holes.length; i < l; i ++ ) {
-
-			const hole = this.holes[ i ];
-			data.holes.push( hole.toJSON() );
-
-		}
-
-		return data;
-
-	}
-
-	fromJSON( json ) {
-
-		super.fromJSON( json );
-
-		this.uuid = json.uuid;
-		this.holes = [];
-
-		for ( let i = 0, l = json.holes.length; i < l; i ++ ) {
-
-			const hole = json.holes[ i ];
-			this.holes.push( new Path().fromJSON( hole ) );
-
-		}
-
-		return this;
-
-	}
-
-}
-
-/**
- * Port from https://github.com/mapbox/earcut (v2.2.4)
- */
-
-const Earcut = {
-
-	triangulate: function ( data, holeIndices, dim = 2 ) {
-
-		const hasHoles = holeIndices && holeIndices.length;
-		const outerLen = hasHoles ? holeIndices[ 0 ] * dim : data.length;
-		let outerNode = linkedList( data, 0, outerLen, dim, true );
-		const triangles = [];
-
-		if ( ! outerNode || outerNode.next === outerNode.prev ) return triangles;
-
-		let minX, minY, maxX, maxY, x, y, invSize;
-
-		if ( hasHoles ) outerNode = eliminateHoles( data, holeIndices, outerNode, dim );
-
-		// if the shape is not too simple, we'll use z-order curve hash later; calculate polygon bbox
-		if ( data.length > 80 * dim ) {
-
-			minX = maxX = data[ 0 ];
-			minY = maxY = data[ 1 ];
-
-			for ( let i = dim; i < outerLen; i += dim ) {
-
-				x = data[ i ];
-				y = data[ i + 1 ];
-				if ( x < minX ) minX = x;
-				if ( y < minY ) minY = y;
-				if ( x > maxX ) maxX = x;
-				if ( y > maxY ) maxY = y;
-
-			}
-
-			// minX, minY and invSize are later used to transform coords into integers for z-order calculation
-			invSize = Math.max( maxX - minX, maxY - minY );
-			invSize = invSize !== 0 ? 32767 / invSize : 0;
-
-		}
-
-		earcutLinked( outerNode, triangles, dim, minX, minY, invSize, 0 );
-
-		return triangles;
-
-	}
-
-};
-
-// create a circular doubly linked list from polygon points in the specified winding order
-function linkedList( data, start, end, dim, clockwise ) {
-
-	let i, last;
-
-	if ( clockwise === ( signedArea( data, start, end, dim ) > 0 ) ) {
-
-		for ( i = start; i < end; i += dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );
-
-	} else {
-
-		for ( i = end - dim; i >= start; i -= dim ) last = insertNode( i, data[ i ], data[ i + 1 ], last );
-
-	}
-
-	if ( last && equals( last, last.next ) ) {
-
-		removeNode( last );
-		last = last.next;
-
-	}
-
-	return last;
-
-}
-
-// eliminate colinear or duplicate points
-function filterPoints( start, end ) {
-
-	if ( ! start ) return start;
-	if ( ! end ) end = start;
-
-	let p = start,
-		again;
-	do {
-
-		again = false;
-
-		if ( ! p.steiner && ( equals( p, p.next ) || area( p.prev, p, p.next ) === 0 ) ) {
-
-			removeNode( p );
-			p = end = p.prev;
-			if ( p === p.next ) break;
-			again = true;
-
-		} else {
-
-			p = p.next;
-
-		}
-
-	} while ( again || p !== end );
-
-	return end;
-
-}
-
-// main ear slicing loop which triangulates a polygon (given as a linked list)
-function earcutLinked( ear, triangles, dim, minX, minY, invSize, pass ) {
-
-	if ( ! ear ) return;
-
-	// interlink polygon nodes in z-order
-	if ( ! pass && invSize ) indexCurve( ear, minX, minY, invSize );
-
-	let stop = ear,
-		prev, next;
-
-	// iterate through ears, slicing them one by one
-	while ( ear.prev !== ear.next ) {
-
-		prev = ear.prev;
-		next = ear.next;
-
-		if ( invSize ? isEarHashed( ear, minX, minY, invSize ) : isEar( ear ) ) {
-
-			// cut off the triangle
-			triangles.push( prev.i / dim | 0 );
-			triangles.push( ear.i / dim | 0 );
-			triangles.push( next.i / dim | 0 );
-
-			removeNode( ear );
-
-			// skipping the next vertex leads to less sliver triangles
-			ear = next.next;
-			stop = next.next;
-
-			continue;
-
-		}
-
-		ear = next;
-
-		// if we looped through the whole remaining polygon and can't find any more ears
-		if ( ear === stop ) {
-
-			// try filtering points and slicing again
-			if ( ! pass ) {
-
-				earcutLinked( filterPoints( ear ), triangles, dim, minX, minY, invSize, 1 );
-
-				// if this didn't work, try curing all small self-intersections locally
-
-			} else if ( pass === 1 ) {
-
-				ear = cureLocalIntersections( filterPoints( ear ), triangles, dim );
-				earcutLinked( ear, triangles, dim, minX, minY, invSize, 2 );
-
-				// as a last resort, try splitting the remaining polygon into two
-
-			} else if ( pass === 2 ) {
-
-				splitEarcut( ear, triangles, dim, minX, minY, invSize );
-
-			}
-
-			break;
-
-		}
-
-	}
-
-}
-
-// check whether a polygon node forms a valid ear with adjacent nodes
-function isEar( ear ) {
-
-	const a = ear.prev,
-		b = ear,
-		c = ear.next;
-
-	if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear
-
-	// now make sure we don't have other points inside the potential ear
-	const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;
-
-	// triangle bbox; min & max are calculated like this for speed
-	const x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),
-		y0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),
-		x1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),
-		y1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );
-
-	let p = c.next;
-	while ( p !== a ) {
-
-		if ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 &&
-			pointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) &&
-			area( p.prev, p, p.next ) >= 0 ) return false;
-		p = p.next;
-
-	}
-
-	return true;
-
-}
-
-function isEarHashed( ear, minX, minY, invSize ) {
-
-	const a = ear.prev,
-		b = ear,
-		c = ear.next;
-
-	if ( area( a, b, c ) >= 0 ) return false; // reflex, can't be an ear
-
-	const ax = a.x, bx = b.x, cx = c.x, ay = a.y, by = b.y, cy = c.y;
-
-	// triangle bbox; min & max are calculated like this for speed
-	const x0 = ax < bx ? ( ax < cx ? ax : cx ) : ( bx < cx ? bx : cx ),
-		y0 = ay < by ? ( ay < cy ? ay : cy ) : ( by < cy ? by : cy ),
-		x1 = ax > bx ? ( ax > cx ? ax : cx ) : ( bx > cx ? bx : cx ),
-		y1 = ay > by ? ( ay > cy ? ay : cy ) : ( by > cy ? by : cy );
-
-	// z-order range for the current triangle bbox;
-	const minZ = zOrder( x0, y0, minX, minY, invSize ),
-		maxZ = zOrder( x1, y1, minX, minY, invSize );
-
-	let p = ear.prevZ,
-		n = ear.nextZ;
-
-	// look for points inside the triangle in both directions
-	while ( p && p.z >= minZ && n && n.z <= maxZ ) {
-
-		if ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&
-			pointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;
-		p = p.prevZ;
-
-		if ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&
-			pointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;
-		n = n.nextZ;
-
-	}
-
-	// look for remaining points in decreasing z-order
-	while ( p && p.z >= minZ ) {
-
-		if ( p.x >= x0 && p.x <= x1 && p.y >= y0 && p.y <= y1 && p !== a && p !== c &&
-			pointInTriangle( ax, ay, bx, by, cx, cy, p.x, p.y ) && area( p.prev, p, p.next ) >= 0 ) return false;
-		p = p.prevZ;
-
-	}
-
-	// look for remaining points in increasing z-order
-	while ( n && n.z <= maxZ ) {
-
-		if ( n.x >= x0 && n.x <= x1 && n.y >= y0 && n.y <= y1 && n !== a && n !== c &&
-			pointInTriangle( ax, ay, bx, by, cx, cy, n.x, n.y ) && area( n.prev, n, n.next ) >= 0 ) return false;
-		n = n.nextZ;
-
-	}
-
-	return true;
-
-}
-
-// go through all polygon nodes and cure small local self-intersections
-function cureLocalIntersections( start, triangles, dim ) {
-
-	let p = start;
-	do {
-
-		const a = p.prev,
-			b = p.next.next;
-
-		if ( ! equals( a, b ) && intersects( a, p, p.next, b ) && locallyInside( a, b ) && locallyInside( b, a ) ) {
-
-			triangles.push( a.i / dim | 0 );
-			triangles.push( p.i / dim | 0 );
-			triangles.push( b.i / dim | 0 );
-
-			// remove two nodes involved
-			removeNode( p );
-			removeNode( p.next );
-
-			p = start = b;
-
-		}
-
-		p = p.next;
-
-	} while ( p !== start );
-
-	return filterPoints( p );
-
-}
-
-// try splitting polygon into two and triangulate them independently
-function splitEarcut( start, triangles, dim, minX, minY, invSize ) {
-
-	// look for a valid diagonal that divides the polygon into two
-	let a = start;
-	do {
-
-		let b = a.next.next;
-		while ( b !== a.prev ) {
-
-			if ( a.i !== b.i && isValidDiagonal( a, b ) ) {
-
-				// split the polygon in two by the diagonal
-				let c = splitPolygon( a, b );
-
-				// filter colinear points around the cuts
-				a = filterPoints( a, a.next );
-				c = filterPoints( c, c.next );
-
-				// run earcut on each half
-				earcutLinked( a, triangles, dim, minX, minY, invSize, 0 );
-				earcutLinked( c, triangles, dim, minX, minY, invSize, 0 );
-				return;
-
-			}
-
-			b = b.next;
-
-		}
-
-		a = a.next;
-
-	} while ( a !== start );
-
-}
-
-// link every hole into the outer loop, producing a single-ring polygon without holes
-function eliminateHoles( data, holeIndices, outerNode, dim ) {
-
-	const queue = [];
-	let i, len, start, end, list;
-
-	for ( i = 0, len = holeIndices.length; i < len; i ++ ) {
-
-		start = holeIndices[ i ] * dim;
-		end = i < len - 1 ? holeIndices[ i + 1 ] * dim : data.length;
-		list = linkedList( data, start, end, dim, false );
-		if ( list === list.next ) list.steiner = true;
-		queue.push( getLeftmost( list ) );
-
-	}
-
-	queue.sort( compareX );
-
-	// process holes from left to right
-	for ( i = 0; i < queue.length; i ++ ) {
-
-		outerNode = eliminateHole( queue[ i ], outerNode );
-
-	}
-
-	return outerNode;
-
-}
-
-function compareX( a, b ) {
-
-	return a.x - b.x;
-
-}
-
-// find a bridge between vertices that connects hole with an outer ring and link it
-function eliminateHole( hole, outerNode ) {
-
-	const bridge = findHoleBridge( hole, outerNode );
-	if ( ! bridge ) {
-
-		return outerNode;
-
-	}
-
-	const bridgeReverse = splitPolygon( bridge, hole );
-
-	// filter collinear points around the cuts
-	filterPoints( bridgeReverse, bridgeReverse.next );
-	return filterPoints( bridge, bridge.next );
-
-}
-
-// David Eberly's algorithm for finding a bridge between hole and outer polygon
-function findHoleBridge( hole, outerNode ) {
-
-	let p = outerNode,
-		qx = - Infinity,
-		m;
-
-	const hx = hole.x, hy = hole.y;
-
-	// find a segment intersected by a ray from the hole's leftmost point to the left;
-	// segment's endpoint with lesser x will be potential connection point
-	do {
-
-		if ( hy <= p.y && hy >= p.next.y && p.next.y !== p.y ) {
-
-			const x = p.x + ( hy - p.y ) * ( p.next.x - p.x ) / ( p.next.y - p.y );
-			if ( x <= hx && x > qx ) {
-
-				qx = x;
-				m = p.x < p.next.x ? p : p.next;
-				if ( x === hx ) return m; // hole touches outer segment; pick leftmost endpoint
-
-			}
-
-		}
-
-		p = p.next;
-
-	} while ( p !== outerNode );
-
-	if ( ! m ) return null;
-
-	// look for points inside the triangle of hole point, segment intersection and endpoint;
-	// if there are no points found, we have a valid connection;
-	// otherwise choose the point of the minimum angle with the ray as connection point
-
-	const stop = m,
-		mx = m.x,
-		my = m.y;
-	let tanMin = Infinity, tan;
-
-	p = m;
-
-	do {
-
-		if ( hx >= p.x && p.x >= mx && hx !== p.x &&
-				pointInTriangle( hy < my ? hx : qx, hy, mx, my, hy < my ? qx : hx, hy, p.x, p.y ) ) {
-
-			tan = Math.abs( hy - p.y ) / ( hx - p.x ); // tangential
-
-			if ( locallyInside( p, hole ) && ( tan < tanMin || ( tan === tanMin && ( p.x > m.x || ( p.x === m.x && sectorContainsSector( m, p ) ) ) ) ) ) {
-
-				m = p;
-				tanMin = tan;
-
-			}
-
-		}
-
-		p = p.next;
-
-	} while ( p !== stop );
-
-	return m;
-
-}
-
-// whether sector in vertex m contains sector in vertex p in the same coordinates
-function sectorContainsSector( m, p ) {
-
-	return area( m.prev, m, p.prev ) < 0 && area( p.next, m, m.next ) < 0;
-
-}
-
-// interlink polygon nodes in z-order
-function indexCurve( start, minX, minY, invSize ) {
-
-	let p = start;
-	do {
-
-		if ( p.z === 0 ) p.z = zOrder( p.x, p.y, minX, minY, invSize );
-		p.prevZ = p.prev;
-		p.nextZ = p.next;
-		p = p.next;
-
-	} while ( p !== start );
-
-	p.prevZ.nextZ = null;
-	p.prevZ = null;
-
-	sortLinked( p );
-
-}
-
-// Simon Tatham's linked list merge sort algorithm
-// http://www.chiark.greenend.org.uk/~sgtatham/algorithms/listsort.html
-function sortLinked( list ) {
-
-	let i, p, q, e, tail, numMerges, pSize, qSize,
-		inSize = 1;
-
-	do {
-
-		p = list;
-		list = null;
-		tail = null;
-		numMerges = 0;
-
-		while ( p ) {
-
-			numMerges ++;
-			q = p;
-			pSize = 0;
-			for ( i = 0; i < inSize; i ++ ) {
-
-				pSize ++;
-				q = q.nextZ;
-				if ( ! q ) break;
-
-			}
-
-			qSize = inSize;
-
-			while ( pSize > 0 || ( qSize > 0 && q ) ) {
-
-				if ( pSize !== 0 && ( qSize === 0 || ! q || p.z <= q.z ) ) {
-
-					e = p;
-					p = p.nextZ;
-					pSize --;
-
-				} else {
-
-					e = q;
-					q = q.nextZ;
-					qSize --;
-
-				}
-
-				if ( tail ) tail.nextZ = e;
-				else list = e;
-
-				e.prevZ = tail;
-				tail = e;
-
-			}
-
-			p = q;
-
-		}
-
-		tail.nextZ = null;
-		inSize *= 2;
-
-	} while ( numMerges > 1 );
-
-	return list;
-
-}
-
-// z-order of a point given coords and inverse of the longer side of data bbox
-function zOrder( x, y, minX, minY, invSize ) {
-
-	// coords are transformed into non-negative 15-bit integer range
-	x = ( x - minX ) * invSize | 0;
-	y = ( y - minY ) * invSize | 0;
-
-	x = ( x | ( x << 8 ) ) & 0x00FF00FF;
-	x = ( x | ( x << 4 ) ) & 0x0F0F0F0F;
-	x = ( x | ( x << 2 ) ) & 0x33333333;
-	x = ( x | ( x << 1 ) ) & 0x55555555;
-
-	y = ( y | ( y << 8 ) ) & 0x00FF00FF;
-	y = ( y | ( y << 4 ) ) & 0x0F0F0F0F;
-	y = ( y | ( y << 2 ) ) & 0x33333333;
-	y = ( y | ( y << 1 ) ) & 0x55555555;
-
-	return x | ( y << 1 );
-
-}
-
-// find the leftmost node of a polygon ring
-function getLeftmost( start ) {
-
-	let p = start,
-		leftmost = start;
-	do {
-
-		if ( p.x < leftmost.x || ( p.x === leftmost.x && p.y < leftmost.y ) ) leftmost = p;
-		p = p.next;
-
-	} while ( p !== start );
-
-	return leftmost;
-
-}
-
-// check if a point lies within a convex triangle
-function pointInTriangle( ax, ay, bx, by, cx, cy, px, py ) {
-
-	return ( cx - px ) * ( ay - py ) >= ( ax - px ) * ( cy - py ) &&
-           ( ax - px ) * ( by - py ) >= ( bx - px ) * ( ay - py ) &&
-           ( bx - px ) * ( cy - py ) >= ( cx - px ) * ( by - py );
-
-}
-
-// check if a diagonal between two polygon nodes is valid (lies in polygon interior)
-function isValidDiagonal( a, b ) {
-
-	return a.next.i !== b.i && a.prev.i !== b.i && ! intersectsPolygon( a, b ) && // dones't intersect other edges
-           ( locallyInside( a, b ) && locallyInside( b, a ) && middleInside( a, b ) && // locally visible
-            ( area( a.prev, a, b.prev ) || area( a, b.prev, b ) ) || // does not create opposite-facing sectors
-            equals( a, b ) && area( a.prev, a, a.next ) > 0 && area( b.prev, b, b.next ) > 0 ); // special zero-length case
-
-}
-
-// signed area of a triangle
-function area( p, q, r ) {
-
-	return ( q.y - p.y ) * ( r.x - q.x ) - ( q.x - p.x ) * ( r.y - q.y );
-
-}
-
-// check if two points are equal
-function equals( p1, p2 ) {
-
-	return p1.x === p2.x && p1.y === p2.y;
-
-}
-
-// check if two segments intersect
-function intersects( p1, q1, p2, q2 ) {
-
-	const o1 = sign( area( p1, q1, p2 ) );
-	const o2 = sign( area( p1, q1, q2 ) );
-	const o3 = sign( area( p2, q2, p1 ) );
-	const o4 = sign( area( p2, q2, q1 ) );
-
-	if ( o1 !== o2 && o3 !== o4 ) return true; // general case
-
-	if ( o1 === 0 && onSegment( p1, p2, q1 ) ) return true; // p1, q1 and p2 are collinear and p2 lies on p1q1
-	if ( o2 === 0 && onSegment( p1, q2, q1 ) ) return true; // p1, q1 and q2 are collinear and q2 lies on p1q1
-	if ( o3 === 0 && onSegment( p2, p1, q2 ) ) return true; // p2, q2 and p1 are collinear and p1 lies on p2q2
-	if ( o4 === 0 && onSegment( p2, q1, q2 ) ) return true; // p2, q2 and q1 are collinear and q1 lies on p2q2
-
-	return false;
-
-}
-
-// for collinear points p, q, r, check if point q lies on segment pr
-function onSegment( p, q, r ) {
-
-	return q.x <= Math.max( p.x, r.x ) && q.x >= Math.min( p.x, r.x ) && q.y <= Math.max( p.y, r.y ) && q.y >= Math.min( p.y, r.y );
-
-}
-
-function sign( num ) {
-
-	return num > 0 ? 1 : num < 0 ? - 1 : 0;
-
-}
-
-// check if a polygon diagonal intersects any polygon segments
-function intersectsPolygon( a, b ) {
-
-	let p = a;
-	do {
-
-		if ( p.i !== a.i && p.next.i !== a.i && p.i !== b.i && p.next.i !== b.i &&
-			intersects( p, p.next, a, b ) ) return true;
-		p = p.next;
-
-	} while ( p !== a );
-
-	return false;
-
-}
-
-// check if a polygon diagonal is locally inside the polygon
-function locallyInside( a, b ) {
-
-	return area( a.prev, a, a.next ) < 0 ?
-		area( a, b, a.next ) >= 0 && area( a, a.prev, b ) >= 0 :
-		area( a, b, a.prev ) < 0 || area( a, a.next, b ) < 0;
-
-}
-
-// check if the middle point of a polygon diagonal is inside the polygon
-function middleInside( a, b ) {
-
-	let p = a,
-		inside = false;
-	const px = ( a.x + b.x ) / 2,
-		py = ( a.y + b.y ) / 2;
-	do {
-
-		if ( ( ( p.y > py ) !== ( p.next.y > py ) ) && p.next.y !== p.y &&
-			( px < ( p.next.x - p.x ) * ( py - p.y ) / ( p.next.y - p.y ) + p.x ) )
-			inside = ! inside;
-		p = p.next;
-
-	} while ( p !== a );
-
-	return inside;
-
-}
-
-// link two polygon vertices with a bridge; if the vertices belong to the same ring, it splits polygon into two;
-// if one belongs to the outer ring and another to a hole, it merges it into a single ring
-function splitPolygon( a, b ) {
-
-	const a2 = new Node( a.i, a.x, a.y ),
-		b2 = new Node( b.i, b.x, b.y ),
-		an = a.next,
-		bp = b.prev;
-
-	a.next = b;
-	b.prev = a;
-
-	a2.next = an;
-	an.prev = a2;
-
-	b2.next = a2;
-	a2.prev = b2;
-
-	bp.next = b2;
-	b2.prev = bp;
-
-	return b2;
-
-}
-
-// create a node and optionally link it with previous one (in a circular doubly linked list)
-function insertNode( i, x, y, last ) {
-
-	const p = new Node( i, x, y );
-
-	if ( ! last ) {
-
-		p.prev = p;
-		p.next = p;
-
-	} else {
-
-		p.next = last.next;
-		p.prev = last;
-		last.next.prev = p;
-		last.next = p;
-
-	}
-
-	return p;
-
-}
-
-function removeNode( p ) {
-
-	p.next.prev = p.prev;
-	p.prev.next = p.next;
-
-	if ( p.prevZ ) p.prevZ.nextZ = p.nextZ;
-	if ( p.nextZ ) p.nextZ.prevZ = p.prevZ;
-
-}
-
-function Node( i, x, y ) {
-
-	// vertex index in coordinates array
-	this.i = i;
-
-	// vertex coordinates
-	this.x = x;
-	this.y = y;
-
-	// previous and next vertex nodes in a polygon ring
-	this.prev = null;
-	this.next = null;
-
-	// z-order curve value
-	this.z = 0;
-
-	// previous and next nodes in z-order
-	this.prevZ = null;
-	this.nextZ = null;
-
-	// indicates whether this is a steiner point
-	this.steiner = false;
-
-}
-
-function signedArea( data, start, end, dim ) {
-
-	let sum = 0;
-	for ( let i = start, j = end - dim; i < end; i += dim ) {
-
-		sum += ( data[ j ] - data[ i ] ) * ( data[ i + 1 ] + data[ j + 1 ] );
-		j = i;
-
-	}
-
-	return sum;
-
-}
-
-class ShapeUtils {
-
-	// calculate area of the contour polygon
-
-	static area( contour ) {
-
-		const n = contour.length;
-		let a = 0.0;
-
-		for ( let p = n - 1, q = 0; q < n; p = q ++ ) {
-
-			a += contour[ p ].x * contour[ q ].y - contour[ q ].x * contour[ p ].y;
-
-		}
-
-		return a * 0.5;
-
-	}
-
-	static isClockWise( pts ) {
-
-		return ShapeUtils.area( pts ) < 0;
-
-	}
-
-	static triangulateShape( contour, holes ) {
-
-		const vertices = []; // flat array of vertices like [ x0,y0, x1,y1, x2,y2, ... ]
-		const holeIndices = []; // array of hole indices
-		const faces = []; // final array of vertex indices like [ [ a,b,d ], [ b,c,d ] ]
-
-		removeDupEndPts( contour );
-		addContour( vertices, contour );
-
-		//
-
-		let holeIndex = contour.length;
-
-		holes.forEach( removeDupEndPts );
-
-		for ( let i = 0; i < holes.length; i ++ ) {
-
-			holeIndices.push( holeIndex );
-			holeIndex += holes[ i ].length;
-			addContour( vertices, holes[ i ] );
-
-		}
-
-		//
-
-		const triangles = Earcut.triangulate( vertices, holeIndices );
-
-		//
-
-		for ( let i = 0; i < triangles.length; i += 3 ) {
-
-			faces.push( triangles.slice( i, i + 3 ) );
-
-		}
-
-		return faces;
-
-	}
-
-}
-
-function removeDupEndPts( points ) {
-
-	const l = points.length;
-
-	if ( l > 2 && points[ l - 1 ].equals( points[ 0 ] ) ) {
-
-		points.pop();
-
-	}
-
-}
-
-function addContour( vertices, contour ) {
-
-	for ( let i = 0; i < contour.length; i ++ ) {
-
-		vertices.push( contour[ i ].x );
-		vertices.push( contour[ i ].y );
-
-	}
-
-}
-
-/**
- * Creates extruded geometry from a path shape.
- *
- * parameters = {
- *
- *  curveSegments: <int>, // number of points on the curves
- *  steps: <int>, // number of points for z-side extrusions / used for subdividing segments of extrude spline too
- *  depth: <float>, // Depth to extrude the shape
- *
- *  bevelEnabled: <bool>, // turn on bevel
- *  bevelThickness: <float>, // how deep into the original shape bevel goes
- *  bevelSize: <float>, // how far from shape outline (including bevelOffset) is bevel
- *  bevelOffset: <float>, // how far from shape outline does bevel start
- *  bevelSegments: <int>, // number of bevel layers
- *
- *  extrudePath: <THREE.Curve> // curve to extrude shape along
- *
- *  UVGenerator: <Object> // object that provides UV generator functions
- *
- * }
- */
-
-class ExtrudeGeometry extends BufferGeometry {
-
-	constructor( shapes = new Shape( [ new Vector2( 0.5, 0.5 ), new Vector2( - 0.5, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), options = {} ) {
-
-		super();
-
-		this.type = 'ExtrudeGeometry';
-
-		this.parameters = {
-			shapes: shapes,
-			options: options
-		};
-
-		shapes = Array.isArray( shapes ) ? shapes : [ shapes ];
-
-		const scope = this;
-
-		const verticesArray = [];
-		const uvArray = [];
-
-		for ( let i = 0, l = shapes.length; i < l; i ++ ) {
-
-			const shape = shapes[ i ];
-			addShape( shape );
-
-		}
-
-		// build geometry
-
-		this.setAttribute( 'position', new Float32BufferAttribute( verticesArray, 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvArray, 2 ) );
-
-		this.computeVertexNormals();
-
-		// functions
-
-		function addShape( shape ) {
-
-			const placeholder = [];
-
-			// options
-
-			const curveSegments = options.curveSegments !== undefined ? options.curveSegments : 12;
-			const steps = options.steps !== undefined ? options.steps : 1;
-			const depth = options.depth !== undefined ? options.depth : 1;
-
-			let bevelEnabled = options.bevelEnabled !== undefined ? options.bevelEnabled : true;
-			let bevelThickness = options.bevelThickness !== undefined ? options.bevelThickness : 0.2;
-			let bevelSize = options.bevelSize !== undefined ? options.bevelSize : bevelThickness - 0.1;
-			let bevelOffset = options.bevelOffset !== undefined ? options.bevelOffset : 0;
-			let bevelSegments = options.bevelSegments !== undefined ? options.bevelSegments : 3;
-
-			const extrudePath = options.extrudePath;
-
-			const uvgen = options.UVGenerator !== undefined ? options.UVGenerator : WorldUVGenerator;
-
-			//
-
-			let extrudePts, extrudeByPath = false;
-			let splineTube, binormal, normal, position2;
-
-			if ( extrudePath ) {
-
-				extrudePts = extrudePath.getSpacedPoints( steps );
-
-				extrudeByPath = true;
-				bevelEnabled = false; // bevels not supported for path extrusion
-
-				// SETUP TNB variables
-
-				// TODO1 - have a .isClosed in spline?
-
-				splineTube = extrudePath.computeFrenetFrames( steps, false );
-
-				// console.log(splineTube, 'splineTube', splineTube.normals.length, 'steps', steps, 'extrudePts', extrudePts.length);
-
-				binormal = new Vector3();
-				normal = new Vector3();
-				position2 = new Vector3();
-
-			}
-
-			// Safeguards if bevels are not enabled
-
-			if ( ! bevelEnabled ) {
-
-				bevelSegments = 0;
-				bevelThickness = 0;
-				bevelSize = 0;
-				bevelOffset = 0;
-
-			}
-
-			// Variables initialization
-
-			const shapePoints = shape.extractPoints( curveSegments );
-
-			let vertices = shapePoints.shape;
-			const holes = shapePoints.holes;
-
-			const reverse = ! ShapeUtils.isClockWise( vertices );
-
-			if ( reverse ) {
-
-				vertices = vertices.reverse();
-
-				// Maybe we should also check if holes are in the opposite direction, just to be safe ...
-
-				for ( let h = 0, hl = holes.length; h < hl; h ++ ) {
-
-					const ahole = holes[ h ];
-
-					if ( ShapeUtils.isClockWise( ahole ) ) {
-
-						holes[ h ] = ahole.reverse();
-
-					}
-
-				}
-
-			}
-
-
-			const faces = ShapeUtils.triangulateShape( vertices, holes );
-
-			/* Vertices */
-
-			const contour = vertices; // vertices has all points but contour has only points of circumference
-
-			for ( let h = 0, hl = holes.length; h < hl; h ++ ) {
-
-				const ahole = holes[ h ];
-
-				vertices = vertices.concat( ahole );
-
-			}
-
-
-			function scalePt2( pt, vec, size ) {
-
-				if ( ! vec ) console.error( 'THREE.ExtrudeGeometry: vec does not exist' );
-
-				return pt.clone().addScaledVector( vec, size );
-
-			}
-
-			const vlen = vertices.length, flen = faces.length;
-
-
-			// Find directions for point movement
-
-
-			function getBevelVec( inPt, inPrev, inNext ) {
-
-				// computes for inPt the corresponding point inPt' on a new contour
-				//   shifted by 1 unit (length of normalized vector) to the left
-				// if we walk along contour clockwise, this new contour is outside the old one
-				//
-				// inPt' is the intersection of the two lines parallel to the two
-				//  adjacent edges of inPt at a distance of 1 unit on the left side.
-
-				let v_trans_x, v_trans_y, shrink_by; // resulting translation vector for inPt
-
-				// good reading for geometry algorithms (here: line-line intersection)
-				// http://geomalgorithms.com/a05-_intersect-1.html
-
-				const v_prev_x = inPt.x - inPrev.x,
-					v_prev_y = inPt.y - inPrev.y;
-				const v_next_x = inNext.x - inPt.x,
-					v_next_y = inNext.y - inPt.y;
-
-				const v_prev_lensq = ( v_prev_x * v_prev_x + v_prev_y * v_prev_y );
-
-				// check for collinear edges
-				const collinear0 = ( v_prev_x * v_next_y - v_prev_y * v_next_x );
-
-				if ( Math.abs( collinear0 ) > Number.EPSILON ) {
-
-					// not collinear
-
-					// length of vectors for normalizing
-
-					const v_prev_len = Math.sqrt( v_prev_lensq );
-					const v_next_len = Math.sqrt( v_next_x * v_next_x + v_next_y * v_next_y );
-
-					// shift adjacent points by unit vectors to the left
-
-					const ptPrevShift_x = ( inPrev.x - v_prev_y / v_prev_len );
-					const ptPrevShift_y = ( inPrev.y + v_prev_x / v_prev_len );
-
-					const ptNextShift_x = ( inNext.x - v_next_y / v_next_len );
-					const ptNextShift_y = ( inNext.y + v_next_x / v_next_len );
-
-					// scaling factor for v_prev to intersection point
-
-					const sf = ( ( ptNextShift_x - ptPrevShift_x ) * v_next_y -
-							( ptNextShift_y - ptPrevShift_y ) * v_next_x ) /
-						( v_prev_x * v_next_y - v_prev_y * v_next_x );
-
-					// vector from inPt to intersection point
-
-					v_trans_x = ( ptPrevShift_x + v_prev_x * sf - inPt.x );
-					v_trans_y = ( ptPrevShift_y + v_prev_y * sf - inPt.y );
-
-					// Don't normalize!, otherwise sharp corners become ugly
-					//  but prevent crazy spikes
-					const v_trans_lensq = ( v_trans_x * v_trans_x + v_trans_y * v_trans_y );
-					if ( v_trans_lensq <= 2 ) {
-
-						return new Vector2( v_trans_x, v_trans_y );
-
-					} else {
-
-						shrink_by = Math.sqrt( v_trans_lensq / 2 );
-
-					}
-
-				} else {
-
-					// handle special case of collinear edges
-
-					let direction_eq = false; // assumes: opposite
-
-					if ( v_prev_x > Number.EPSILON ) {
-
-						if ( v_next_x > Number.EPSILON ) {
-
-							direction_eq = true;
-
-						}
-
-					} else {
-
-						if ( v_prev_x < - Number.EPSILON ) {
-
-							if ( v_next_x < - Number.EPSILON ) {
-
-								direction_eq = true;
-
-							}
-
-						} else {
-
-							if ( Math.sign( v_prev_y ) === Math.sign( v_next_y ) ) {
-
-								direction_eq = true;
-
-							}
-
-						}
-
-					}
-
-					if ( direction_eq ) {
-
-						// console.log("Warning: lines are a straight sequence");
-						v_trans_x = - v_prev_y;
-						v_trans_y = v_prev_x;
-						shrink_by = Math.sqrt( v_prev_lensq );
-
-					} else {
-
-						// console.log("Warning: lines are a straight spike");
-						v_trans_x = v_prev_x;
-						v_trans_y = v_prev_y;
-						shrink_by = Math.sqrt( v_prev_lensq / 2 );
-
-					}
-
-				}
-
-				return new Vector2( v_trans_x / shrink_by, v_trans_y / shrink_by );
-
-			}
-
-
-			const contourMovements = [];
-
-			for ( let i = 0, il = contour.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {
-
-				if ( j === il ) j = 0;
-				if ( k === il ) k = 0;
-
-				//  (j)---(i)---(k)
-				// console.log('i,j,k', i, j , k)
-
-				contourMovements[ i ] = getBevelVec( contour[ i ], contour[ j ], contour[ k ] );
-
-			}
-
-			const holesMovements = [];
-			let oneHoleMovements, verticesMovements = contourMovements.concat();
-
-			for ( let h = 0, hl = holes.length; h < hl; h ++ ) {
-
-				const ahole = holes[ h ];
-
-				oneHoleMovements = [];
-
-				for ( let i = 0, il = ahole.length, j = il - 1, k = i + 1; i < il; i ++, j ++, k ++ ) {
-
-					if ( j === il ) j = 0;
-					if ( k === il ) k = 0;
-
-					//  (j)---(i)---(k)
-					oneHoleMovements[ i ] = getBevelVec( ahole[ i ], ahole[ j ], ahole[ k ] );
-
-				}
-
-				holesMovements.push( oneHoleMovements );
-				verticesMovements = verticesMovements.concat( oneHoleMovements );
-
-			}
-
-
-			// Loop bevelSegments, 1 for the front, 1 for the back
-
-			for ( let b = 0; b < bevelSegments; b ++ ) {
-
-				//for ( b = bevelSegments; b > 0; b -- ) {
-
-				const t = b / bevelSegments;
-				const z = bevelThickness * Math.cos( t * Math.PI / 2 );
-				const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;
-
-				// contract shape
-
-				for ( let i = 0, il = contour.length; i < il; i ++ ) {
-
-					const vert = scalePt2( contour[ i ], contourMovements[ i ], bs );
-
-					v( vert.x, vert.y, - z );
-
-				}
-
-				// expand holes
-
-				for ( let h = 0, hl = holes.length; h < hl; h ++ ) {
-
-					const ahole = holes[ h ];
-					oneHoleMovements = holesMovements[ h ];
-
-					for ( let i = 0, il = ahole.length; i < il; i ++ ) {
-
-						const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );
-
-						v( vert.x, vert.y, - z );
-
-					}
-
-				}
-
-			}
-
-			const bs = bevelSize + bevelOffset;
-
-			// Back facing vertices
-
-			for ( let i = 0; i < vlen; i ++ ) {
-
-				const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];
-
-				if ( ! extrudeByPath ) {
-
-					v( vert.x, vert.y, 0 );
-
-				} else {
-
-					// v( vert.x, vert.y + extrudePts[ 0 ].y, extrudePts[ 0 ].x );
-
-					normal.copy( splineTube.normals[ 0 ] ).multiplyScalar( vert.x );
-					binormal.copy( splineTube.binormals[ 0 ] ).multiplyScalar( vert.y );
-
-					position2.copy( extrudePts[ 0 ] ).add( normal ).add( binormal );
-
-					v( position2.x, position2.y, position2.z );
-
-				}
-
-			}
-
-			// Add stepped vertices...
-			// Including front facing vertices
-
-			for ( let s = 1; s <= steps; s ++ ) {
-
-				for ( let i = 0; i < vlen; i ++ ) {
-
-					const vert = bevelEnabled ? scalePt2( vertices[ i ], verticesMovements[ i ], bs ) : vertices[ i ];
-
-					if ( ! extrudeByPath ) {
-
-						v( vert.x, vert.y, depth / steps * s );
-
-					} else {
-
-						// v( vert.x, vert.y + extrudePts[ s - 1 ].y, extrudePts[ s - 1 ].x );
-
-						normal.copy( splineTube.normals[ s ] ).multiplyScalar( vert.x );
-						binormal.copy( splineTube.binormals[ s ] ).multiplyScalar( vert.y );
-
-						position2.copy( extrudePts[ s ] ).add( normal ).add( binormal );
-
-						v( position2.x, position2.y, position2.z );
-
-					}
-
-				}
-
-			}
-
-
-			// Add bevel segments planes
-
-			//for ( b = 1; b <= bevelSegments; b ++ ) {
-			for ( let b = bevelSegments - 1; b >= 0; b -- ) {
-
-				const t = b / bevelSegments;
-				const z = bevelThickness * Math.cos( t * Math.PI / 2 );
-				const bs = bevelSize * Math.sin( t * Math.PI / 2 ) + bevelOffset;
-
-				// contract shape
-
-				for ( let i = 0, il = contour.length; i < il; i ++ ) {
-
-					const vert = scalePt2( contour[ i ], contourMovements[ i ], bs );
-					v( vert.x, vert.y, depth + z );
-
-				}
-
-				// expand holes
-
-				for ( let h = 0, hl = holes.length; h < hl; h ++ ) {
-
-					const ahole = holes[ h ];
-					oneHoleMovements = holesMovements[ h ];
-
-					for ( let i = 0, il = ahole.length; i < il; i ++ ) {
-
-						const vert = scalePt2( ahole[ i ], oneHoleMovements[ i ], bs );
-
-						if ( ! extrudeByPath ) {
-
-							v( vert.x, vert.y, depth + z );
-
-						} else {
-
-							v( vert.x, vert.y + extrudePts[ steps - 1 ].y, extrudePts[ steps - 1 ].x + z );
-
-						}
-
-					}
-
-				}
-
-			}
-
-			/* Faces */
-
-			// Top and bottom faces
-
-			buildLidFaces();
-
-			// Sides faces
-
-			buildSideFaces();
-
-
-			/////  Internal functions
-
-			function buildLidFaces() {
-
-				const start = verticesArray.length / 3;
-
-				if ( bevelEnabled ) {
-
-					let layer = 0; // steps + 1
-					let offset = vlen * layer;
-
-					// Bottom faces
-
-					for ( let i = 0; i < flen; i ++ ) {
-
-						const face = faces[ i ];
-						f3( face[ 2 ] + offset, face[ 1 ] + offset, face[ 0 ] + offset );
-
-					}
-
-					layer = steps + bevelSegments * 2;
-					offset = vlen * layer;
-
-					// Top faces
-
-					for ( let i = 0; i < flen; i ++ ) {
-
-						const face = faces[ i ];
-						f3( face[ 0 ] + offset, face[ 1 ] + offset, face[ 2 ] + offset );
-
-					}
-
-				} else {
-
-					// Bottom faces
-
-					for ( let i = 0; i < flen; i ++ ) {
-
-						const face = faces[ i ];
-						f3( face[ 2 ], face[ 1 ], face[ 0 ] );
-
-					}
-
-					// Top faces
-
-					for ( let i = 0; i < flen; i ++ ) {
-
-						const face = faces[ i ];
-						f3( face[ 0 ] + vlen * steps, face[ 1 ] + vlen * steps, face[ 2 ] + vlen * steps );
-
-					}
-
-				}
-
-				scope.addGroup( start, verticesArray.length / 3 - start, 0 );
-
-			}
-
-			// Create faces for the z-sides of the shape
-
-			function buildSideFaces() {
-
-				const start = verticesArray.length / 3;
-				let layeroffset = 0;
-				sidewalls( contour, layeroffset );
-				layeroffset += contour.length;
-
-				for ( let h = 0, hl = holes.length; h < hl; h ++ ) {
-
-					const ahole = holes[ h ];
-					sidewalls( ahole, layeroffset );
-
-					//, true
-					layeroffset += ahole.length;
-
-				}
-
-
-				scope.addGroup( start, verticesArray.length / 3 - start, 1 );
-
-
-			}
-
-			function sidewalls( contour, layeroffset ) {
-
-				let i = contour.length;
-
-				while ( -- i >= 0 ) {
-
-					const j = i;
-					let k = i - 1;
-					if ( k < 0 ) k = contour.length - 1;
-
-					//console.log('b', i,j, i-1, k,vertices.length);
-
-					for ( let s = 0, sl = ( steps + bevelSegments * 2 ); s < sl; s ++ ) {
-
-						const slen1 = vlen * s;
-						const slen2 = vlen * ( s + 1 );
-
-						const a = layeroffset + j + slen1,
-							b = layeroffset + k + slen1,
-							c = layeroffset + k + slen2,
-							d = layeroffset + j + slen2;
-
-						f4( a, b, c, d );
-
-					}
-
-				}
-
-			}
-
-			function v( x, y, z ) {
-
-				placeholder.push( x );
-				placeholder.push( y );
-				placeholder.push( z );
-
-			}
-
-
-			function f3( a, b, c ) {
-
-				addVertex( a );
-				addVertex( b );
-				addVertex( c );
-
-				const nextIndex = verticesArray.length / 3;
-				const uvs = uvgen.generateTopUV( scope, verticesArray, nextIndex - 3, nextIndex - 2, nextIndex - 1 );
-
-				addUV( uvs[ 0 ] );
-				addUV( uvs[ 1 ] );
-				addUV( uvs[ 2 ] );
-
-			}
-
-			function f4( a, b, c, d ) {
-
-				addVertex( a );
-				addVertex( b );
-				addVertex( d );
-
-				addVertex( b );
-				addVertex( c );
-				addVertex( d );
-
-
-				const nextIndex = verticesArray.length / 3;
-				const uvs = uvgen.generateSideWallUV( scope, verticesArray, nextIndex - 6, nextIndex - 3, nextIndex - 2, nextIndex - 1 );
-
-				addUV( uvs[ 0 ] );
-				addUV( uvs[ 1 ] );
-				addUV( uvs[ 3 ] );
-
-				addUV( uvs[ 1 ] );
-				addUV( uvs[ 2 ] );
-				addUV( uvs[ 3 ] );
-
-			}
-
-			function addVertex( index ) {
-
-				verticesArray.push( placeholder[ index * 3 + 0 ] );
-				verticesArray.push( placeholder[ index * 3 + 1 ] );
-				verticesArray.push( placeholder[ index * 3 + 2 ] );
-
-			}
-
-
-			function addUV( vector2 ) {
-
-				uvArray.push( vector2.x );
-				uvArray.push( vector2.y );
-
-			}
-
-		}
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		const shapes = this.parameters.shapes;
-		const options = this.parameters.options;
-
-		return toJSON$1( shapes, options, data );
-
-	}
-
-	static fromJSON( data, shapes ) {
-
-		const geometryShapes = [];
-
-		for ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {
-
-			const shape = shapes[ data.shapes[ j ] ];
-
-			geometryShapes.push( shape );
-
-		}
-
-		const extrudePath = data.options.extrudePath;
-
-		if ( extrudePath !== undefined ) {
-
-			data.options.extrudePath = new Curves[ extrudePath.type ]().fromJSON( extrudePath );
-
-		}
-
-		return new ExtrudeGeometry( geometryShapes, data.options );
-
-	}
-
-}
-
-const WorldUVGenerator = {
-
-	generateTopUV: function ( geometry, vertices, indexA, indexB, indexC ) {
-
-		const a_x = vertices[ indexA * 3 ];
-		const a_y = vertices[ indexA * 3 + 1 ];
-		const b_x = vertices[ indexB * 3 ];
-		const b_y = vertices[ indexB * 3 + 1 ];
-		const c_x = vertices[ indexC * 3 ];
-		const c_y = vertices[ indexC * 3 + 1 ];
-
-		return [
-			new Vector2( a_x, a_y ),
-			new Vector2( b_x, b_y ),
-			new Vector2( c_x, c_y )
-		];
-
-	},
-
-	generateSideWallUV: function ( geometry, vertices, indexA, indexB, indexC, indexD ) {
-
-		const a_x = vertices[ indexA * 3 ];
-		const a_y = vertices[ indexA * 3 + 1 ];
-		const a_z = vertices[ indexA * 3 + 2 ];
-		const b_x = vertices[ indexB * 3 ];
-		const b_y = vertices[ indexB * 3 + 1 ];
-		const b_z = vertices[ indexB * 3 + 2 ];
-		const c_x = vertices[ indexC * 3 ];
-		const c_y = vertices[ indexC * 3 + 1 ];
-		const c_z = vertices[ indexC * 3 + 2 ];
-		const d_x = vertices[ indexD * 3 ];
-		const d_y = vertices[ indexD * 3 + 1 ];
-		const d_z = vertices[ indexD * 3 + 2 ];
-
-		if ( Math.abs( a_y - b_y ) < Math.abs( a_x - b_x ) ) {
-
-			return [
-				new Vector2( a_x, 1 - a_z ),
-				new Vector2( b_x, 1 - b_z ),
-				new Vector2( c_x, 1 - c_z ),
-				new Vector2( d_x, 1 - d_z )
-			];
-
-		} else {
-
-			return [
-				new Vector2( a_y, 1 - a_z ),
-				new Vector2( b_y, 1 - b_z ),
-				new Vector2( c_y, 1 - c_z ),
-				new Vector2( d_y, 1 - d_z )
-			];
-
-		}
-
-	}
-
-};
-
-function toJSON$1( shapes, options, data ) {
-
-	data.shapes = [];
-
-	if ( Array.isArray( shapes ) ) {
-
-		for ( let i = 0, l = shapes.length; i < l; i ++ ) {
-
-			const shape = shapes[ i ];
-
-			data.shapes.push( shape.uuid );
-
-		}
-
-	} else {
-
-		data.shapes.push( shapes.uuid );
-
-	}
-
-	data.options = Object.assign( {}, options );
-
-	if ( options.extrudePath !== undefined ) data.options.extrudePath = options.extrudePath.toJSON();
-
-	return data;
-
-}
-
-class IcosahedronGeometry extends PolyhedronGeometry {
-
-	constructor( radius = 1, detail = 0 ) {
-
-		const t = ( 1 + Math.sqrt( 5 ) ) / 2;
-
-		const vertices = [
-			- 1, t, 0, 	1, t, 0, 	- 1, - t, 0, 	1, - t, 0,
-			0, - 1, t, 	0, 1, t,	0, - 1, - t, 	0, 1, - t,
-			t, 0, - 1, 	t, 0, 1, 	- t, 0, - 1, 	- t, 0, 1
-		];
-
-		const indices = [
-			0, 11, 5, 	0, 5, 1, 	0, 1, 7, 	0, 7, 10, 	0, 10, 11,
-			1, 5, 9, 	5, 11, 4,	11, 10, 2,	10, 7, 6,	7, 1, 8,
-			3, 9, 4, 	3, 4, 2,	3, 2, 6,	3, 6, 8,	3, 8, 9,
-			4, 9, 5, 	2, 4, 11,	6, 2, 10,	8, 6, 7,	9, 8, 1
-		];
-
-		super( vertices, indices, radius, detail );
-
-		this.type = 'IcosahedronGeometry';
-
-		this.parameters = {
-			radius: radius,
-			detail: detail
-		};
-
-	}
-
-	static fromJSON( data ) {
-
-		return new IcosahedronGeometry( data.radius, data.detail );
-
-	}
-
-}
-
-class OctahedronGeometry extends PolyhedronGeometry {
-
-	constructor( radius = 1, detail = 0 ) {
-
-		const vertices = [
-			1, 0, 0, 	- 1, 0, 0,	0, 1, 0,
-			0, - 1, 0, 	0, 0, 1,	0, 0, - 1
-		];
-
-		const indices = [
-			0, 2, 4,	0, 4, 3,	0, 3, 5,
-			0, 5, 2,	1, 2, 5,	1, 5, 3,
-			1, 3, 4,	1, 4, 2
-		];
-
-		super( vertices, indices, radius, detail );
-
-		this.type = 'OctahedronGeometry';
-
-		this.parameters = {
-			radius: radius,
-			detail: detail
-		};
-
-	}
-
-	static fromJSON( data ) {
-
-		return new OctahedronGeometry( data.radius, data.detail );
-
-	}
-
-}
-
-class RingGeometry extends BufferGeometry {
-
-	constructor( innerRadius = 0.5, outerRadius = 1, thetaSegments = 32, phiSegments = 1, thetaStart = 0, thetaLength = Math.PI * 2 ) {
-
-		super();
-
-		this.type = 'RingGeometry';
-
-		this.parameters = {
-			innerRadius: innerRadius,
-			outerRadius: outerRadius,
-			thetaSegments: thetaSegments,
-			phiSegments: phiSegments,
-			thetaStart: thetaStart,
-			thetaLength: thetaLength
-		};
-
-		thetaSegments = Math.max( 3, thetaSegments );
-		phiSegments = Math.max( 1, phiSegments );
-
-		// buffers
-
-		const indices = [];
-		const vertices = [];
-		const normals = [];
-		const uvs = [];
-
-		// some helper variables
-
-		let radius = innerRadius;
-		const radiusStep = ( ( outerRadius - innerRadius ) / phiSegments );
-		const vertex = new Vector3();
-		const uv = new Vector2();
-
-		// generate vertices, normals and uvs
-
-		for ( let j = 0; j <= phiSegments; j ++ ) {
-
-			for ( let i = 0; i <= thetaSegments; i ++ ) {
-
-				// values are generate from the inside of the ring to the outside
-
-				const segment = thetaStart + i / thetaSegments * thetaLength;
-
-				// vertex
-
-				vertex.x = radius * Math.cos( segment );
-				vertex.y = radius * Math.sin( segment );
-
-				vertices.push( vertex.x, vertex.y, vertex.z );
-
-				// normal
-
-				normals.push( 0, 0, 1 );
-
-				// uv
-
-				uv.x = ( vertex.x / outerRadius + 1 ) / 2;
-				uv.y = ( vertex.y / outerRadius + 1 ) / 2;
-
-				uvs.push( uv.x, uv.y );
-
-			}
-
-			// increase the radius for next row of vertices
-
-			radius += radiusStep;
-
-		}
-
-		// indices
-
-		for ( let j = 0; j < phiSegments; j ++ ) {
-
-			const thetaSegmentLevel = j * ( thetaSegments + 1 );
-
-			for ( let i = 0; i < thetaSegments; i ++ ) {
-
-				const segment = i + thetaSegmentLevel;
-
-				const a = segment;
-				const b = segment + thetaSegments + 1;
-				const c = segment + thetaSegments + 2;
-				const d = segment + 1;
-
-				// faces
-
-				indices.push( a, b, d );
-				indices.push( b, c, d );
-
-			}
-
-		}
-
-		// build geometry
-
-		this.setIndex( indices );
-		this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-	static fromJSON( data ) {
-
-		return new RingGeometry( data.innerRadius, data.outerRadius, data.thetaSegments, data.phiSegments, data.thetaStart, data.thetaLength );
-
-	}
-
-}
-
-class ShapeGeometry extends BufferGeometry {
-
-	constructor( shapes = new Shape( [ new Vector2( 0, 0.5 ), new Vector2( - 0.5, - 0.5 ), new Vector2( 0.5, - 0.5 ) ] ), curveSegments = 12 ) {
-
-		super();
-
-		this.type = 'ShapeGeometry';
-
-		this.parameters = {
-			shapes: shapes,
-			curveSegments: curveSegments
-		};
-
-		// buffers
-
-		const indices = [];
-		const vertices = [];
-		const normals = [];
-		const uvs = [];
-
-		// helper variables
-
-		let groupStart = 0;
-		let groupCount = 0;
-
-		// allow single and array values for "shapes" parameter
-
-		if ( Array.isArray( shapes ) === false ) {
-
-			addShape( shapes );
-
-		} else {
-
-			for ( let i = 0; i < shapes.length; i ++ ) {
-
-				addShape( shapes[ i ] );
-
-				this.addGroup( groupStart, groupCount, i ); // enables MultiMaterial support
-
-				groupStart += groupCount;
-				groupCount = 0;
-
-			}
-
-		}
-
-		// build geometry
-
-		this.setIndex( indices );
-		this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
-
-
-		// helper functions
-
-		function addShape( shape ) {
-
-			const indexOffset = vertices.length / 3;
-			const points = shape.extractPoints( curveSegments );
-
-			let shapeVertices = points.shape;
-			const shapeHoles = points.holes;
-
-			// check direction of vertices
-
-			if ( ShapeUtils.isClockWise( shapeVertices ) === false ) {
-
-				shapeVertices = shapeVertices.reverse();
-
-			}
-
-			for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {
-
-				const shapeHole = shapeHoles[ i ];
-
-				if ( ShapeUtils.isClockWise( shapeHole ) === true ) {
-
-					shapeHoles[ i ] = shapeHole.reverse();
-
-				}
-
-			}
-
-			const faces = ShapeUtils.triangulateShape( shapeVertices, shapeHoles );
-
-			// join vertices of inner and outer paths to a single array
-
-			for ( let i = 0, l = shapeHoles.length; i < l; i ++ ) {
-
-				const shapeHole = shapeHoles[ i ];
-				shapeVertices = shapeVertices.concat( shapeHole );
-
-			}
-
-			// vertices, normals, uvs
-
-			for ( let i = 0, l = shapeVertices.length; i < l; i ++ ) {
-
-				const vertex = shapeVertices[ i ];
-
-				vertices.push( vertex.x, vertex.y, 0 );
-				normals.push( 0, 0, 1 );
-				uvs.push( vertex.x, vertex.y ); // world uvs
-
-			}
-
-			// indices
-
-			for ( let i = 0, l = faces.length; i < l; i ++ ) {
-
-				const face = faces[ i ];
-
-				const a = face[ 0 ] + indexOffset;
-				const b = face[ 1 ] + indexOffset;
-				const c = face[ 2 ] + indexOffset;
-
-				indices.push( a, b, c );
-				groupCount += 3;
-
-			}
-
-		}
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		const shapes = this.parameters.shapes;
-
-		return toJSON( shapes, data );
-
-	}
-
-	static fromJSON( data, shapes ) {
-
-		const geometryShapes = [];
-
-		for ( let j = 0, jl = data.shapes.length; j < jl; j ++ ) {
-
-			const shape = shapes[ data.shapes[ j ] ];
-
-			geometryShapes.push( shape );
-
-		}
-
-		return new ShapeGeometry( geometryShapes, data.curveSegments );
-
-	}
-
-}
-
-function toJSON( shapes, data ) {
-
-	data.shapes = [];
-
-	if ( Array.isArray( shapes ) ) {
-
-		for ( let i = 0, l = shapes.length; i < l; i ++ ) {
-
-			const shape = shapes[ i ];
-
-			data.shapes.push( shape.uuid );
-
-		}
-
-	} else {
-
-		data.shapes.push( shapes.uuid );
-
-	}
-
-	return data;
-
-}
-
-class SphereGeometry extends BufferGeometry {
-
-	constructor( radius = 1, widthSegments = 32, heightSegments = 16, phiStart = 0, phiLength = Math.PI * 2, thetaStart = 0, thetaLength = Math.PI ) {
-
-		super();
-
-		this.type = 'SphereGeometry';
-
-		this.parameters = {
-			radius: radius,
-			widthSegments: widthSegments,
-			heightSegments: heightSegments,
-			phiStart: phiStart,
-			phiLength: phiLength,
-			thetaStart: thetaStart,
-			thetaLength: thetaLength
-		};
-
-		widthSegments = Math.max( 3, Math.floor( widthSegments ) );
-		heightSegments = Math.max( 2, Math.floor( heightSegments ) );
-
-		const thetaEnd = Math.min( thetaStart + thetaLength, Math.PI );
-
-		let index = 0;
-		const grid = [];
-
-		const vertex = new Vector3();
-		const normal = new Vector3();
-
-		// buffers
-
-		const indices = [];
-		const vertices = [];
-		const normals = [];
-		const uvs = [];
-
-		// generate vertices, normals and uvs
-
-		for ( let iy = 0; iy <= heightSegments; iy ++ ) {
-
-			const verticesRow = [];
-
-			const v = iy / heightSegments;
-
-			// special case for the poles
-
-			let uOffset = 0;
-
-			if ( iy === 0 && thetaStart === 0 ) {
-
-				uOffset = 0.5 / widthSegments;
-
-			} else if ( iy === heightSegments && thetaEnd === Math.PI ) {
-
-				uOffset = - 0.5 / widthSegments;
-
-			}
-
-			for ( let ix = 0; ix <= widthSegments; ix ++ ) {
-
-				const u = ix / widthSegments;
-
-				// vertex
-
-				vertex.x = - radius * Math.cos( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );
-				vertex.y = radius * Math.cos( thetaStart + v * thetaLength );
-				vertex.z = radius * Math.sin( phiStart + u * phiLength ) * Math.sin( thetaStart + v * thetaLength );
-
-				vertices.push( vertex.x, vertex.y, vertex.z );
-
-				// normal
-
-				normal.copy( vertex ).normalize();
-				normals.push( normal.x, normal.y, normal.z );
-
-				// uv
-
-				uvs.push( u + uOffset, 1 - v );
-
-				verticesRow.push( index ++ );
-
-			}
-
-			grid.push( verticesRow );
-
-		}
-
-		// indices
-
-		for ( let iy = 0; iy < heightSegments; iy ++ ) {
-
-			for ( let ix = 0; ix < widthSegments; ix ++ ) {
-
-				const a = grid[ iy ][ ix + 1 ];
-				const b = grid[ iy ][ ix ];
-				const c = grid[ iy + 1 ][ ix ];
-				const d = grid[ iy + 1 ][ ix + 1 ];
-
-				if ( iy !== 0 || thetaStart > 0 ) indices.push( a, b, d );
-				if ( iy !== heightSegments - 1 || thetaEnd < Math.PI ) indices.push( b, c, d );
-
-			}
-
-		}
-
-		// build geometry
-
-		this.setIndex( indices );
-		this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-	static fromJSON( data ) {
-
-		return new SphereGeometry( data.radius, data.widthSegments, data.heightSegments, data.phiStart, data.phiLength, data.thetaStart, data.thetaLength );
-
-	}
-
-}
-
-class TetrahedronGeometry extends PolyhedronGeometry {
-
-	constructor( radius = 1, detail = 0 ) {
-
-		const vertices = [
-			1, 1, 1, 	- 1, - 1, 1, 	- 1, 1, - 1, 	1, - 1, - 1
-		];
-
-		const indices = [
-			2, 1, 0, 	0, 3, 2,	1, 3, 0,	2, 3, 1
-		];
-
-		super( vertices, indices, radius, detail );
-
-		this.type = 'TetrahedronGeometry';
-
-		this.parameters = {
-			radius: radius,
-			detail: detail
-		};
-
-	}
-
-	static fromJSON( data ) {
-
-		return new TetrahedronGeometry( data.radius, data.detail );
-
-	}
-
-}
-
-class TorusGeometry extends BufferGeometry {
-
-	constructor( radius = 1, tube = 0.4, radialSegments = 12, tubularSegments = 48, arc = Math.PI * 2 ) {
-
-		super();
-
-		this.type = 'TorusGeometry';
-
-		this.parameters = {
-			radius: radius,
-			tube: tube,
-			radialSegments: radialSegments,
-			tubularSegments: tubularSegments,
-			arc: arc
-		};
-
-		radialSegments = Math.floor( radialSegments );
-		tubularSegments = Math.floor( tubularSegments );
-
-		// buffers
-
-		const indices = [];
-		const vertices = [];
-		const normals = [];
-		const uvs = [];
-
-		// helper variables
-
-		const center = new Vector3();
-		const vertex = new Vector3();
-		const normal = new Vector3();
-
-		// generate vertices, normals and uvs
-
-		for ( let j = 0; j <= radialSegments; j ++ ) {
-
-			for ( let i = 0; i <= tubularSegments; i ++ ) {
-
-				const u = i / tubularSegments * arc;
-				const v = j / radialSegments * Math.PI * 2;
-
-				// vertex
-
-				vertex.x = ( radius + tube * Math.cos( v ) ) * Math.cos( u );
-				vertex.y = ( radius + tube * Math.cos( v ) ) * Math.sin( u );
-				vertex.z = tube * Math.sin( v );
-
-				vertices.push( vertex.x, vertex.y, vertex.z );
-
-				// normal
-
-				center.x = radius * Math.cos( u );
-				center.y = radius * Math.sin( u );
-				normal.subVectors( vertex, center ).normalize();
-
-				normals.push( normal.x, normal.y, normal.z );
-
-				// uv
-
-				uvs.push( i / tubularSegments );
-				uvs.push( j / radialSegments );
-
-			}
-
-		}
-
-		// generate indices
-
-		for ( let j = 1; j <= radialSegments; j ++ ) {
-
-			for ( let i = 1; i <= tubularSegments; i ++ ) {
-
-				// indices
-
-				const a = ( tubularSegments + 1 ) * j + i - 1;
-				const b = ( tubularSegments + 1 ) * ( j - 1 ) + i - 1;
-				const c = ( tubularSegments + 1 ) * ( j - 1 ) + i;
-				const d = ( tubularSegments + 1 ) * j + i;
-
-				// faces
-
-				indices.push( a, b, d );
-				indices.push( b, c, d );
-
-			}
-
-		}
-
-		// build geometry
-
-		this.setIndex( indices );
-		this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-	static fromJSON( data ) {
-
-		return new TorusGeometry( data.radius, data.tube, data.radialSegments, data.tubularSegments, data.arc );
-
-	}
-
-}
-
-class TorusKnotGeometry extends BufferGeometry {
-
-	constructor( radius = 1, tube = 0.4, tubularSegments = 64, radialSegments = 8, p = 2, q = 3 ) {
-
-		super();
-
-		this.type = 'TorusKnotGeometry';
-
-		this.parameters = {
-			radius: radius,
-			tube: tube,
-			tubularSegments: tubularSegments,
-			radialSegments: radialSegments,
-			p: p,
-			q: q
-		};
-
-		tubularSegments = Math.floor( tubularSegments );
-		radialSegments = Math.floor( radialSegments );
-
-		// buffers
-
-		const indices = [];
-		const vertices = [];
-		const normals = [];
-		const uvs = [];
-
-		// helper variables
-
-		const vertex = new Vector3();
-		const normal = new Vector3();
-
-		const P1 = new Vector3();
-		const P2 = new Vector3();
-
-		const B = new Vector3();
-		const T = new Vector3();
-		const N = new Vector3();
-
-		// generate vertices, normals and uvs
-
-		for ( let i = 0; i <= tubularSegments; ++ i ) {
-
-			// the radian "u" is used to calculate the position on the torus curve of the current tubular segment
-
-			const u = i / tubularSegments * p * Math.PI * 2;
-
-			// now we calculate two points. P1 is our current position on the curve, P2 is a little farther ahead.
-			// these points are used to create a special "coordinate space", which is necessary to calculate the correct vertex positions
-
-			calculatePositionOnCurve( u, p, q, radius, P1 );
-			calculatePositionOnCurve( u + 0.01, p, q, radius, P2 );
-
-			// calculate orthonormal basis
-
-			T.subVectors( P2, P1 );
-			N.addVectors( P2, P1 );
-			B.crossVectors( T, N );
-			N.crossVectors( B, T );
-
-			// normalize B, N. T can be ignored, we don't use it
-
-			B.normalize();
-			N.normalize();
-
-			for ( let j = 0; j <= radialSegments; ++ j ) {
-
-				// now calculate the vertices. they are nothing more than an extrusion of the torus curve.
-				// because we extrude a shape in the xy-plane, there is no need to calculate a z-value.
-
-				const v = j / radialSegments * Math.PI * 2;
-				const cx = - tube * Math.cos( v );
-				const cy = tube * Math.sin( v );
-
-				// now calculate the final vertex position.
-				// first we orient the extrusion with our basis vectors, then we add it to the current position on the curve
-
-				vertex.x = P1.x + ( cx * N.x + cy * B.x );
-				vertex.y = P1.y + ( cx * N.y + cy * B.y );
-				vertex.z = P1.z + ( cx * N.z + cy * B.z );
-
-				vertices.push( vertex.x, vertex.y, vertex.z );
-
-				// normal (P1 is always the center/origin of the extrusion, thus we can use it to calculate the normal)
-
-				normal.subVectors( vertex, P1 ).normalize();
-
-				normals.push( normal.x, normal.y, normal.z );
-
-				// uv
-
-				uvs.push( i / tubularSegments );
-				uvs.push( j / radialSegments );
-
-			}
-
-		}
-
-		// generate indices
-
-		for ( let j = 1; j <= tubularSegments; j ++ ) {
-
-			for ( let i = 1; i <= radialSegments; i ++ ) {
-
-				// indices
-
-				const a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );
-				const b = ( radialSegments + 1 ) * j + ( i - 1 );
-				const c = ( radialSegments + 1 ) * j + i;
-				const d = ( radialSegments + 1 ) * ( j - 1 ) + i;
-
-				// faces
-
-				indices.push( a, b, d );
-				indices.push( b, c, d );
-
-			}
-
-		}
-
-		// build geometry
-
-		this.setIndex( indices );
-		this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
-
-		// this function calculates the current position on the torus curve
-
-		function calculatePositionOnCurve( u, p, q, radius, position ) {
-
-			const cu = Math.cos( u );
-			const su = Math.sin( u );
-			const quOverP = q / p * u;
-			const cs = Math.cos( quOverP );
-
-			position.x = radius * ( 2 + cs ) * 0.5 * cu;
-			position.y = radius * ( 2 + cs ) * su * 0.5;
-			position.z = radius * Math.sin( quOverP ) * 0.5;
-
-		}
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-	static fromJSON( data ) {
-
-		return new TorusKnotGeometry( data.radius, data.tube, data.tubularSegments, data.radialSegments, data.p, data.q );
-
-	}
-
-}
-
-class TubeGeometry extends BufferGeometry {
-
-	constructor( path = new QuadraticBezierCurve3( new Vector3( - 1, - 1, 0 ), new Vector3( - 1, 1, 0 ), new Vector3( 1, 1, 0 ) ), tubularSegments = 64, radius = 1, radialSegments = 8, closed = false ) {
-
-		super();
-
-		this.type = 'TubeGeometry';
-
-		this.parameters = {
-			path: path,
-			tubularSegments: tubularSegments,
-			radius: radius,
-			radialSegments: radialSegments,
-			closed: closed
-		};
-
-		const frames = path.computeFrenetFrames( tubularSegments, closed );
-
-		// expose internals
-
-		this.tangents = frames.tangents;
-		this.normals = frames.normals;
-		this.binormals = frames.binormals;
-
-		// helper variables
-
-		const vertex = new Vector3();
-		const normal = new Vector3();
-		const uv = new Vector2();
-		let P = new Vector3();
-
-		// buffer
-
-		const vertices = [];
-		const normals = [];
-		const uvs = [];
-		const indices = [];
-
-		// create buffer data
-
-		generateBufferData();
-
-		// build geometry
-
-		this.setIndex( indices );
-		this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		this.setAttribute( 'normal', new Float32BufferAttribute( normals, 3 ) );
-		this.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
-
-		// functions
-
-		function generateBufferData() {
-
-			for ( let i = 0; i < tubularSegments; i ++ ) {
-
-				generateSegment( i );
-
-			}
-
-			// if the geometry is not closed, generate the last row of vertices and normals
-			// at the regular position on the given path
-			//
-			// if the geometry is closed, duplicate the first row of vertices and normals (uvs will differ)
-
-			generateSegment( ( closed === false ) ? tubularSegments : 0 );
-
-			// uvs are generated in a separate function.
-			// this makes it easy compute correct values for closed geometries
-
-			generateUVs();
-
-			// finally create faces
-
-			generateIndices();
-
-		}
-
-		function generateSegment( i ) {
-
-			// we use getPointAt to sample evenly distributed points from the given path
-
-			P = path.getPointAt( i / tubularSegments, P );
-
-			// retrieve corresponding normal and binormal
-
-			const N = frames.normals[ i ];
-			const B = frames.binormals[ i ];
-
-			// generate normals and vertices for the current segment
-
-			for ( let j = 0; j <= radialSegments; j ++ ) {
-
-				const v = j / radialSegments * Math.PI * 2;
-
-				const sin = Math.sin( v );
-				const cos = - Math.cos( v );
-
-				// normal
-
-				normal.x = ( cos * N.x + sin * B.x );
-				normal.y = ( cos * N.y + sin * B.y );
-				normal.z = ( cos * N.z + sin * B.z );
-				normal.normalize();
-
-				normals.push( normal.x, normal.y, normal.z );
-
-				// vertex
-
-				vertex.x = P.x + radius * normal.x;
-				vertex.y = P.y + radius * normal.y;
-				vertex.z = P.z + radius * normal.z;
-
-				vertices.push( vertex.x, vertex.y, vertex.z );
-
-			}
-
-		}
-
-		function generateIndices() {
-
-			for ( let j = 1; j <= tubularSegments; j ++ ) {
-
-				for ( let i = 1; i <= radialSegments; i ++ ) {
-
-					const a = ( radialSegments + 1 ) * ( j - 1 ) + ( i - 1 );
-					const b = ( radialSegments + 1 ) * j + ( i - 1 );
-					const c = ( radialSegments + 1 ) * j + i;
-					const d = ( radialSegments + 1 ) * ( j - 1 ) + i;
-
-					// faces
-
-					indices.push( a, b, d );
-					indices.push( b, c, d );
-
-				}
-
-			}
-
-		}
-
-		function generateUVs() {
-
-			for ( let i = 0; i <= tubularSegments; i ++ ) {
-
-				for ( let j = 0; j <= radialSegments; j ++ ) {
-
-					uv.x = i / tubularSegments;
-					uv.y = j / radialSegments;
-
-					uvs.push( uv.x, uv.y );
-
-				}
-
-			}
-
-		}
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.path = this.parameters.path.toJSON();
-
-		return data;
-
-	}
-
-	static fromJSON( data ) {
-
-		// This only works for built-in curves (e.g. CatmullRomCurve3).
-		// User defined curves or instances of CurvePath will not be deserialized.
-		return new TubeGeometry(
-			new Curves[ data.path.type ]().fromJSON( data.path ),
-			data.tubularSegments,
-			data.radius,
-			data.radialSegments,
-			data.closed
-		);
-
-	}
-
-}
-
-class WireframeGeometry extends BufferGeometry {
-
-	constructor( geometry = null ) {
-
-		super();
-
-		this.type = 'WireframeGeometry';
-
-		this.parameters = {
-			geometry: geometry
-		};
-
-		if ( geometry !== null ) {
-
-			// buffer
-
-			const vertices = [];
-			const edges = new Set();
-
-			// helper variables
-
-			const start = new Vector3();
-			const end = new Vector3();
-
-			if ( geometry.index !== null ) {
-
-				// indexed BufferGeometry
-
-				const position = geometry.attributes.position;
-				const indices = geometry.index;
-				let groups = geometry.groups;
-
-				if ( groups.length === 0 ) {
-
-					groups = [ { start: 0, count: indices.count, materialIndex: 0 } ];
-
-				}
-
-				// create a data structure that contains all edges without duplicates
-
-				for ( let o = 0, ol = groups.length; o < ol; ++ o ) {
-
-					const group = groups[ o ];
-
-					const groupStart = group.start;
-					const groupCount = group.count;
-
-					for ( let i = groupStart, l = ( groupStart + groupCount ); i < l; i += 3 ) {
-
-						for ( let j = 0; j < 3; j ++ ) {
-
-							const index1 = indices.getX( i + j );
-							const index2 = indices.getX( i + ( j + 1 ) % 3 );
-
-							start.fromBufferAttribute( position, index1 );
-							end.fromBufferAttribute( position, index2 );
-
-							if ( isUniqueEdge( start, end, edges ) === true ) {
-
-								vertices.push( start.x, start.y, start.z );
-								vertices.push( end.x, end.y, end.z );
-
-							}
-
-						}
-
-					}
-
-				}
-
-			} else {
-
-				// non-indexed BufferGeometry
-
-				const position = geometry.attributes.position;
-
-				for ( let i = 0, l = ( position.count / 3 ); i < l; i ++ ) {
-
-					for ( let j = 0; j < 3; j ++ ) {
-
-						// three edges per triangle, an edge is represented as (index1, index2)
-						// e.g. the first triangle has the following edges: (0,1),(1,2),(2,0)
-
-						const index1 = 3 * i + j;
-						const index2 = 3 * i + ( ( j + 1 ) % 3 );
-
-						start.fromBufferAttribute( position, index1 );
-						end.fromBufferAttribute( position, index2 );
-
-						if ( isUniqueEdge( start, end, edges ) === true ) {
-
-							vertices.push( start.x, start.y, start.z );
-							vertices.push( end.x, end.y, end.z );
-
-						}
-
-					}
-
-				}
-
-			}
-
-			// build geometry
-
-			this.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-
-		}
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.parameters = Object.assign( {}, source.parameters );
-
-		return this;
-
-	}
-
-}
-
-function isUniqueEdge( start, end, edges ) {
-
-	const hash1 = `${start.x},${start.y},${start.z}-${end.x},${end.y},${end.z}`;
-	const hash2 = `${end.x},${end.y},${end.z}-${start.x},${start.y},${start.z}`; // coincident edge
-
-	if ( edges.has( hash1 ) === true || edges.has( hash2 ) === true ) {
-
-		return false;
-
-	} else {
-
-		edges.add( hash1 );
-		edges.add( hash2 );
-		return true;
-
-	}
-
-}
-
-var Geometries = /*#__PURE__*/Object.freeze({
-	__proto__: null,
-	BoxGeometry: BoxGeometry,
-	CapsuleGeometry: CapsuleGeometry,
-	CircleGeometry: CircleGeometry,
-	ConeGeometry: ConeGeometry,
-	CylinderGeometry: CylinderGeometry,
-	DodecahedronGeometry: DodecahedronGeometry,
-	EdgesGeometry: EdgesGeometry,
-	ExtrudeGeometry: ExtrudeGeometry,
-	IcosahedronGeometry: IcosahedronGeometry,
-	LatheGeometry: LatheGeometry,
-	OctahedronGeometry: OctahedronGeometry,
-	PlaneGeometry: PlaneGeometry,
-	PolyhedronGeometry: PolyhedronGeometry,
-	RingGeometry: RingGeometry,
-	ShapeGeometry: ShapeGeometry,
-	SphereGeometry: SphereGeometry,
-	TetrahedronGeometry: TetrahedronGeometry,
-	TorusGeometry: TorusGeometry,
-	TorusKnotGeometry: TorusKnotGeometry,
-	TubeGeometry: TubeGeometry,
-	WireframeGeometry: WireframeGeometry
-});
-
-class ShadowMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isShadowMaterial = true;
-
-		this.type = 'ShadowMaterial';
-
-		this.color = new Color( 0x000000 );
-		this.transparent = true;
-
-		this.fog = true;
-
-		this.setValues( parameters );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.color.copy( source.color );
-
-		this.fog = source.fog;
-
-		return this;
-
-	}
-
-}
-
-class RawShaderMaterial extends ShaderMaterial {
-
-	constructor( parameters ) {
-
-		super( parameters );
-
-		this.isRawShaderMaterial = true;
-
-		this.type = 'RawShaderMaterial';
-
-	}
-
-}
-
-class MeshStandardMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isMeshStandardMaterial = true;
-
-		this.defines = { 'STANDARD': '' };
-
-		this.type = 'MeshStandardMaterial';
-
-		this.color = new Color( 0xffffff ); // diffuse
-		this.roughness = 1.0;
-		this.metalness = 0.0;
-
-		this.map = null;
-
-		this.lightMap = null;
-		this.lightMapIntensity = 1.0;
-
-		this.aoMap = null;
-		this.aoMapIntensity = 1.0;
-
-		this.emissive = new Color( 0x000000 );
-		this.emissiveIntensity = 1.0;
-		this.emissiveMap = null;
-
-		this.bumpMap = null;
-		this.bumpScale = 1;
-
-		this.normalMap = null;
-		this.normalMapType = TangentSpaceNormalMap;
-		this.normalScale = new Vector2( 1, 1 );
-
-		this.displacementMap = null;
-		this.displacementScale = 1;
-		this.displacementBias = 0;
-
-		this.roughnessMap = null;
-
-		this.metalnessMap = null;
-
-		this.alphaMap = null;
-
-		this.envMap = null;
-		this.envMapIntensity = 1.0;
-
-		this.wireframe = false;
-		this.wireframeLinewidth = 1;
-		this.wireframeLinecap = 'round';
-		this.wireframeLinejoin = 'round';
-
-		this.flatShading = false;
-
-		this.fog = true;
-
-		this.setValues( parameters );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.defines = { 'STANDARD': '' };
-
-		this.color.copy( source.color );
-		this.roughness = source.roughness;
-		this.metalness = source.metalness;
-
-		this.map = source.map;
-
-		this.lightMap = source.lightMap;
-		this.lightMapIntensity = source.lightMapIntensity;
-
-		this.aoMap = source.aoMap;
-		this.aoMapIntensity = source.aoMapIntensity;
-
-		this.emissive.copy( source.emissive );
-		this.emissiveMap = source.emissiveMap;
-		this.emissiveIntensity = source.emissiveIntensity;
-
-		this.bumpMap = source.bumpMap;
-		this.bumpScale = source.bumpScale;
-
-		this.normalMap = source.normalMap;
-		this.normalMapType = source.normalMapType;
-		this.normalScale.copy( source.normalScale );
-
-		this.displacementMap = source.displacementMap;
-		this.displacementScale = source.displacementScale;
-		this.displacementBias = source.displacementBias;
-
-		this.roughnessMap = source.roughnessMap;
-
-		this.metalnessMap = source.metalnessMap;
-
-		this.alphaMap = source.alphaMap;
-
-		this.envMap = source.envMap;
-		this.envMapIntensity = source.envMapIntensity;
-
-		this.wireframe = source.wireframe;
-		this.wireframeLinewidth = source.wireframeLinewidth;
-		this.wireframeLinecap = source.wireframeLinecap;
-		this.wireframeLinejoin = source.wireframeLinejoin;
-
-		this.flatShading = source.flatShading;
-
-		this.fog = source.fog;
-
-		return this;
-
-	}
-
-}
-
-class MeshPhysicalMaterial extends MeshStandardMaterial {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isMeshPhysicalMaterial = true;
-
-		this.defines = {
-
-			'STANDARD': '',
-			'PHYSICAL': ''
-
-		};
-
-		this.type = 'MeshPhysicalMaterial';
-
-		this.clearcoatMap = null;
-		this.clearcoatRoughness = 0.0;
-		this.clearcoatRoughnessMap = null;
-		this.clearcoatNormalScale = new Vector2( 1, 1 );
-		this.clearcoatNormalMap = null;
-
-		this.ior = 1.5;
-
-		Object.defineProperty( this, 'reflectivity', {
-			get: function () {
-
-				return ( clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) );
-
-			},
-			set: function ( reflectivity ) {
-
-				this.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity );
-
-			}
-		} );
-
-		this.iridescenceMap = null;
-		this.iridescenceIOR = 1.3;
-		this.iridescenceThicknessRange = [ 100, 400 ];
-		this.iridescenceThicknessMap = null;
-
-		this.sheenColor = new Color( 0x000000 );
-		this.sheenColorMap = null;
-		this.sheenRoughness = 1.0;
-		this.sheenRoughnessMap = null;
-
-		this.transmissionMap = null;
-
-		this.thickness = 0;
-		this.thicknessMap = null;
-		this.attenuationDistance = Infinity;
-		this.attenuationColor = new Color( 1, 1, 1 );
-
-		this.specularIntensity = 1.0;
-		this.specularIntensityMap = null;
-		this.specularColor = new Color( 1, 1, 1 );
-		this.specularColorMap = null;
-
-		this._sheen = 0.0;
-		this._clearcoat = 0;
-		this._iridescence = 0;
-		this._transmission = 0;
-
-		this.setValues( parameters );
-
-	}
-
-	get sheen() {
-
-		return this._sheen;
-
-	}
-
-	set sheen( value ) {
-
-		if ( this._sheen > 0 !== value > 0 ) {
-
-			this.version ++;
-
-		}
-
-		this._sheen = value;
-
-	}
-
-	get clearcoat() {
-
-		return this._clearcoat;
-
-	}
-
-	set clearcoat( value ) {
-
-		if ( this._clearcoat > 0 !== value > 0 ) {
-
-			this.version ++;
-
-		}
-
-		this._clearcoat = value;
-
-	}
-
-	get iridescence() {
-
-		return this._iridescence;
-
-	}
-
-	set iridescence( value ) {
-
-		if ( this._iridescence > 0 !== value > 0 ) {
-
-			this.version ++;
-
-		}
-
-		this._iridescence = value;
-
-	}
-
-	get transmission() {
-
-		return this._transmission;
-
-	}
-
-	set transmission( value ) {
-
-		if ( this._transmission > 0 !== value > 0 ) {
-
-			this.version ++;
-
-		}
-
-		this._transmission = value;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.defines = {
-
-			'STANDARD': '',
-			'PHYSICAL': ''
-
-		};
-
-		this.clearcoat = source.clearcoat;
-		this.clearcoatMap = source.clearcoatMap;
-		this.clearcoatRoughness = source.clearcoatRoughness;
-		this.clearcoatRoughnessMap = source.clearcoatRoughnessMap;
-		this.clearcoatNormalMap = source.clearcoatNormalMap;
-		this.clearcoatNormalScale.copy( source.clearcoatNormalScale );
-
-		this.ior = source.ior;
-
-		this.iridescence = source.iridescence;
-		this.iridescenceMap = source.iridescenceMap;
-		this.iridescenceIOR = source.iridescenceIOR;
-		this.iridescenceThicknessRange = [ ...source.iridescenceThicknessRange ];
-		this.iridescenceThicknessMap = source.iridescenceThicknessMap;
-
-		this.sheen = source.sheen;
-		this.sheenColor.copy( source.sheenColor );
-		this.sheenColorMap = source.sheenColorMap;
-		this.sheenRoughness = source.sheenRoughness;
-		this.sheenRoughnessMap = source.sheenRoughnessMap;
-
-		this.transmission = source.transmission;
-		this.transmissionMap = source.transmissionMap;
-
-		this.thickness = source.thickness;
-		this.thicknessMap = source.thicknessMap;
-		this.attenuationDistance = source.attenuationDistance;
-		this.attenuationColor.copy( source.attenuationColor );
-
-		this.specularIntensity = source.specularIntensity;
-		this.specularIntensityMap = source.specularIntensityMap;
-		this.specularColor.copy( source.specularColor );
-		this.specularColorMap = source.specularColorMap;
-
-		return this;
-
-	}
-
-}
-
-class MeshPhongMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isMeshPhongMaterial = true;
-
-		this.type = 'MeshPhongMaterial';
-
-		this.color = new Color( 0xffffff ); // diffuse
-		this.specular = new Color( 0x111111 );
-		this.shininess = 30;
-
-		this.map = null;
-
-		this.lightMap = null;
-		this.lightMapIntensity = 1.0;
-
-		this.aoMap = null;
-		this.aoMapIntensity = 1.0;
-
-		this.emissive = new Color( 0x000000 );
-		this.emissiveIntensity = 1.0;
-		this.emissiveMap = null;
-
-		this.bumpMap = null;
-		this.bumpScale = 1;
-
-		this.normalMap = null;
-		this.normalMapType = TangentSpaceNormalMap;
-		this.normalScale = new Vector2( 1, 1 );
-
-		this.displacementMap = null;
-		this.displacementScale = 1;
-		this.displacementBias = 0;
-
-		this.specularMap = null;
-
-		this.alphaMap = null;
-
-		this.envMap = null;
-		this.combine = MultiplyOperation;
-		this.reflectivity = 1;
-		this.refractionRatio = 0.98;
-
-		this.wireframe = false;
-		this.wireframeLinewidth = 1;
-		this.wireframeLinecap = 'round';
-		this.wireframeLinejoin = 'round';
-
-		this.flatShading = false;
-
-		this.fog = true;
-
-		this.setValues( parameters );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.color.copy( source.color );
-		this.specular.copy( source.specular );
-		this.shininess = source.shininess;
-
-		this.map = source.map;
-
-		this.lightMap = source.lightMap;
-		this.lightMapIntensity = source.lightMapIntensity;
-
-		this.aoMap = source.aoMap;
-		this.aoMapIntensity = source.aoMapIntensity;
-
-		this.emissive.copy( source.emissive );
-		this.emissiveMap = source.emissiveMap;
-		this.emissiveIntensity = source.emissiveIntensity;
-
-		this.bumpMap = source.bumpMap;
-		this.bumpScale = source.bumpScale;
-
-		this.normalMap = source.normalMap;
-		this.normalMapType = source.normalMapType;
-		this.normalScale.copy( source.normalScale );
-
-		this.displacementMap = source.displacementMap;
-		this.displacementScale = source.displacementScale;
-		this.displacementBias = source.displacementBias;
-
-		this.specularMap = source.specularMap;
-
-		this.alphaMap = source.alphaMap;
-
-		this.envMap = source.envMap;
-		this.combine = source.combine;
-		this.reflectivity = source.reflectivity;
-		this.refractionRatio = source.refractionRatio;
-
-		this.wireframe = source.wireframe;
-		this.wireframeLinewidth = source.wireframeLinewidth;
-		this.wireframeLinecap = source.wireframeLinecap;
-		this.wireframeLinejoin = source.wireframeLinejoin;
-
-		this.flatShading = source.flatShading;
-
-		this.fog = source.fog;
-
-		return this;
-
-	}
-
-}
-
-class MeshToonMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isMeshToonMaterial = true;
-
-		this.defines = { 'TOON': '' };
-
-		this.type = 'MeshToonMaterial';
-
-		this.color = new Color( 0xffffff );
-
-		this.map = null;
-		this.gradientMap = null;
-
-		this.lightMap = null;
-		this.lightMapIntensity = 1.0;
-
-		this.aoMap = null;
-		this.aoMapIntensity = 1.0;
-
-		this.emissive = new Color( 0x000000 );
-		this.emissiveIntensity = 1.0;
-		this.emissiveMap = null;
-
-		this.bumpMap = null;
-		this.bumpScale = 1;
-
-		this.normalMap = null;
-		this.normalMapType = TangentSpaceNormalMap;
-		this.normalScale = new Vector2( 1, 1 );
-
-		this.displacementMap = null;
-		this.displacementScale = 1;
-		this.displacementBias = 0;
-
-		this.alphaMap = null;
-
-		this.wireframe = false;
-		this.wireframeLinewidth = 1;
-		this.wireframeLinecap = 'round';
-		this.wireframeLinejoin = 'round';
-
-		this.fog = true;
-
-		this.setValues( parameters );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.color.copy( source.color );
-
-		this.map = source.map;
-		this.gradientMap = source.gradientMap;
-
-		this.lightMap = source.lightMap;
-		this.lightMapIntensity = source.lightMapIntensity;
-
-		this.aoMap = source.aoMap;
-		this.aoMapIntensity = source.aoMapIntensity;
-
-		this.emissive.copy( source.emissive );
-		this.emissiveMap = source.emissiveMap;
-		this.emissiveIntensity = source.emissiveIntensity;
-
-		this.bumpMap = source.bumpMap;
-		this.bumpScale = source.bumpScale;
-
-		this.normalMap = source.normalMap;
-		this.normalMapType = source.normalMapType;
-		this.normalScale.copy( source.normalScale );
-
-		this.displacementMap = source.displacementMap;
-		this.displacementScale = source.displacementScale;
-		this.displacementBias = source.displacementBias;
-
-		this.alphaMap = source.alphaMap;
-
-		this.wireframe = source.wireframe;
-		this.wireframeLinewidth = source.wireframeLinewidth;
-		this.wireframeLinecap = source.wireframeLinecap;
-		this.wireframeLinejoin = source.wireframeLinejoin;
-
-		this.fog = source.fog;
-
-		return this;
-
-	}
-
-}
-
-class MeshNormalMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isMeshNormalMaterial = true;
-
-		this.type = 'MeshNormalMaterial';
-
-		this.bumpMap = null;
-		this.bumpScale = 1;
-
-		this.normalMap = null;
-		this.normalMapType = TangentSpaceNormalMap;
-		this.normalScale = new Vector2( 1, 1 );
-
-		this.displacementMap = null;
-		this.displacementScale = 1;
-		this.displacementBias = 0;
-
-		this.wireframe = false;
-		this.wireframeLinewidth = 1;
-
-		this.flatShading = false;
-
-		this.setValues( parameters );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.bumpMap = source.bumpMap;
-		this.bumpScale = source.bumpScale;
-
-		this.normalMap = source.normalMap;
-		this.normalMapType = source.normalMapType;
-		this.normalScale.copy( source.normalScale );
-
-		this.displacementMap = source.displacementMap;
-		this.displacementScale = source.displacementScale;
-		this.displacementBias = source.displacementBias;
-
-		this.wireframe = source.wireframe;
-		this.wireframeLinewidth = source.wireframeLinewidth;
-
-		this.flatShading = source.flatShading;
-
-		return this;
-
-	}
-
-}
-
-class MeshLambertMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isMeshLambertMaterial = true;
-
-		this.type = 'MeshLambertMaterial';
-
-		this.color = new Color( 0xffffff ); // diffuse
-
-		this.map = null;
-
-		this.lightMap = null;
-		this.lightMapIntensity = 1.0;
-
-		this.aoMap = null;
-		this.aoMapIntensity = 1.0;
-
-		this.emissive = new Color( 0x000000 );
-		this.emissiveIntensity = 1.0;
-		this.emissiveMap = null;
-
-		this.bumpMap = null;
-		this.bumpScale = 1;
-
-		this.normalMap = null;
-		this.normalMapType = TangentSpaceNormalMap;
-		this.normalScale = new Vector2( 1, 1 );
-
-		this.displacementMap = null;
-		this.displacementScale = 1;
-		this.displacementBias = 0;
-
-		this.specularMap = null;
-
-		this.alphaMap = null;
-
-		this.envMap = null;
-		this.combine = MultiplyOperation;
-		this.reflectivity = 1;
-		this.refractionRatio = 0.98;
-
-		this.wireframe = false;
-		this.wireframeLinewidth = 1;
-		this.wireframeLinecap = 'round';
-		this.wireframeLinejoin = 'round';
-
-		this.flatShading = false;
-
-		this.fog = true;
-
-		this.setValues( parameters );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.color.copy( source.color );
-
-		this.map = source.map;
-
-		this.lightMap = source.lightMap;
-		this.lightMapIntensity = source.lightMapIntensity;
-
-		this.aoMap = source.aoMap;
-		this.aoMapIntensity = source.aoMapIntensity;
-
-		this.emissive.copy( source.emissive );
-		this.emissiveMap = source.emissiveMap;
-		this.emissiveIntensity = source.emissiveIntensity;
-
-		this.bumpMap = source.bumpMap;
-		this.bumpScale = source.bumpScale;
-
-		this.normalMap = source.normalMap;
-		this.normalMapType = source.normalMapType;
-		this.normalScale.copy( source.normalScale );
-
-		this.displacementMap = source.displacementMap;
-		this.displacementScale = source.displacementScale;
-		this.displacementBias = source.displacementBias;
-
-		this.specularMap = source.specularMap;
-
-		this.alphaMap = source.alphaMap;
-
-		this.envMap = source.envMap;
-		this.combine = source.combine;
-		this.reflectivity = source.reflectivity;
-		this.refractionRatio = source.refractionRatio;
-
-		this.wireframe = source.wireframe;
-		this.wireframeLinewidth = source.wireframeLinewidth;
-		this.wireframeLinecap = source.wireframeLinecap;
-		this.wireframeLinejoin = source.wireframeLinejoin;
-
-		this.flatShading = source.flatShading;
-
-		this.fog = source.fog;
-
-		return this;
-
-	}
-
-}
-
-class MeshMatcapMaterial extends Material {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isMeshMatcapMaterial = true;
-
-		this.defines = { 'MATCAP': '' };
-
-		this.type = 'MeshMatcapMaterial';
-
-		this.color = new Color( 0xffffff ); // diffuse
-
-		this.matcap = null;
-
-		this.map = null;
-
-		this.bumpMap = null;
-		this.bumpScale = 1;
-
-		this.normalMap = null;
-		this.normalMapType = TangentSpaceNormalMap;
-		this.normalScale = new Vector2( 1, 1 );
-
-		this.displacementMap = null;
-		this.displacementScale = 1;
-		this.displacementBias = 0;
-
-		this.alphaMap = null;
-
-		this.flatShading = false;
-
-		this.fog = true;
-
-		this.setValues( parameters );
-
-	}
-
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.defines = { 'MATCAP': '' };
-
-		this.color.copy( source.color );
-
-		this.matcap = source.matcap;
-
-		this.map = source.map;
-
-		this.bumpMap = source.bumpMap;
-		this.bumpScale = source.bumpScale;
-
-		this.normalMap = source.normalMap;
-		this.normalMapType = source.normalMapType;
-		this.normalScale.copy( source.normalScale );
-
-		this.displacementMap = source.displacementMap;
-		this.displacementScale = source.displacementScale;
-		this.displacementBias = source.displacementBias;
-
-		this.alphaMap = source.alphaMap;
-
-		this.flatShading = source.flatShading;
-
-		this.fog = source.fog;
-
-		return this;
-
-	}
-
-}
-
-class LineDashedMaterial extends LineBasicMaterial {
-
-	constructor( parameters ) {
-
-		super();
-
-		this.isLineDashedMaterial = true;
-
-		this.type = 'LineDashedMaterial';
-
-		this.scale = 1;
-		this.dashSize = 3;
-		this.gapSize = 1;
-
-		this.setValues( parameters );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.scale = source.scale;
-		this.dashSize = source.dashSize;
-		this.gapSize = source.gapSize;
-
-		return this;
-
-	}
-
-}
-
-// same as Array.prototype.slice, but also works on typed arrays
-function arraySlice( array, from, to ) {
-
-	if ( isTypedArray( array ) ) {
-
-		// in ios9 array.subarray(from, undefined) will return empty array
-		// but array.subarray(from) or array.subarray(from, len) is correct
-		return new array.constructor( array.subarray( from, to !== undefined ? to : array.length ) );
-
-	}
-
-	return array.slice( from, to );
-
-}
-
-// converts an array to a specific type
-function convertArray( array, type, forceClone ) {
-
-	if ( ! array || // let 'undefined' and 'null' pass
-		! forceClone && array.constructor === type ) return array;
-
-	if ( typeof type.BYTES_PER_ELEMENT === 'number' ) {
-
-		return new type( array ); // create typed array
-
-	}
-
-	return Array.prototype.slice.call( array ); // create Array
-
-}
-
-function isTypedArray( object ) {
-
-	return ArrayBuffer.isView( object ) &&
-		! ( object instanceof DataView );
-
-}
-
-// returns an array by which times and values can be sorted
-function getKeyframeOrder( times ) {
-
-	function compareTime( i, j ) {
-
-		return times[ i ] - times[ j ];
-
-	}
-
-	const n = times.length;
-	const result = new Array( n );
-	for ( let i = 0; i !== n; ++ i ) result[ i ] = i;
-
-	result.sort( compareTime );
-
-	return result;
-
-}
-
-// uses the array previously returned by 'getKeyframeOrder' to sort data
-function sortedArray( values, stride, order ) {
-
-	const nValues = values.length;
-	const result = new values.constructor( nValues );
-
-	for ( let i = 0, dstOffset = 0; dstOffset !== nValues; ++ i ) {
-
-		const srcOffset = order[ i ] * stride;
-
-		for ( let j = 0; j !== stride; ++ j ) {
-
-			result[ dstOffset ++ ] = values[ srcOffset + j ];
-
-		}
-
-	}
-
-	return result;
-
-}
-
-// function for parsing AOS keyframe formats
-function flattenJSON( jsonKeys, times, values, valuePropertyName ) {
-
-	let i = 1, key = jsonKeys[ 0 ];
-
-	while ( key !== undefined && key[ valuePropertyName ] === undefined ) {
-
-		key = jsonKeys[ i ++ ];
-
-	}
-
-	if ( key === undefined ) return; // no data
-
-	let value = key[ valuePropertyName ];
-	if ( value === undefined ) return; // no data
-
-	if ( Array.isArray( value ) ) {
-
-		do {
-
-			value = key[ valuePropertyName ];
-
-			if ( value !== undefined ) {
-
-				times.push( key.time );
-				values.push.apply( values, value ); // push all elements
-
-			}
-
-			key = jsonKeys[ i ++ ];
-
-		} while ( key !== undefined );
-
-	} else if ( value.toArray !== undefined ) {
-
-		// ...assume THREE.Math-ish
-
-		do {
-
-			value = key[ valuePropertyName ];
-
-			if ( value !== undefined ) {
-
-				times.push( key.time );
-				value.toArray( values, values.length );
-
-			}
-
-			key = jsonKeys[ i ++ ];
-
-		} while ( key !== undefined );
-
-	} else {
-
-		// otherwise push as-is
-
-		do {
-
-			value = key[ valuePropertyName ];
-
-			if ( value !== undefined ) {
-
-				times.push( key.time );
-				values.push( value );
-
-			}
-
-			key = jsonKeys[ i ++ ];
-
-		} while ( key !== undefined );
-
-	}
-
-}
-
-function subclip( sourceClip, name, startFrame, endFrame, fps = 30 ) {
-
-	const clip = sourceClip.clone();
-
-	clip.name = name;
-
-	const tracks = [];
-
-	for ( let i = 0; i < clip.tracks.length; ++ i ) {
-
-		const track = clip.tracks[ i ];
-		const valueSize = track.getValueSize();
-
-		const times = [];
-		const values = [];
-
-		for ( let j = 0; j < track.times.length; ++ j ) {
-
-			const frame = track.times[ j ] * fps;
-
-			if ( frame < startFrame || frame >= endFrame ) continue;
-
-			times.push( track.times[ j ] );
-
-			for ( let k = 0; k < valueSize; ++ k ) {
-
-				values.push( track.values[ j * valueSize + k ] );
-
-			}
-
-		}
-
-		if ( times.length === 0 ) continue;
-
-		track.times = convertArray( times, track.times.constructor );
-		track.values = convertArray( values, track.values.constructor );
-
-		tracks.push( track );
-
-	}
-
-	clip.tracks = tracks;
-
-	// find minimum .times value across all tracks in the trimmed clip
-
-	let minStartTime = Infinity;
-
-	for ( let i = 0; i < clip.tracks.length; ++ i ) {
-
-		if ( minStartTime > clip.tracks[ i ].times[ 0 ] ) {
-
-			minStartTime = clip.tracks[ i ].times[ 0 ];
-
-		}
-
-	}
-
-	// shift all tracks such that clip begins at t=0
-
-	for ( let i = 0; i < clip.tracks.length; ++ i ) {
-
-		clip.tracks[ i ].shift( - 1 * minStartTime );
-
-	}
-
-	clip.resetDuration();
-
-	return clip;
-
-}
-
-function makeClipAdditive( targetClip, referenceFrame = 0, referenceClip = targetClip, fps = 30 ) {
-
-	if ( fps <= 0 ) fps = 30;
-
-	const numTracks = referenceClip.tracks.length;
-	const referenceTime = referenceFrame / fps;
-
-	// Make each track's values relative to the values at the reference frame
-	for ( let i = 0; i < numTracks; ++ i ) {
-
-		const referenceTrack = referenceClip.tracks[ i ];
-		const referenceTrackType = referenceTrack.ValueTypeName;
-
-		// Skip this track if it's non-numeric
-		if ( referenceTrackType === 'bool' || referenceTrackType === 'string' ) continue;
-
-		// Find the track in the target clip whose name and type matches the reference track
-		const targetTrack = targetClip.tracks.find( function ( track ) {
-
-			return track.name === referenceTrack.name
-				&& track.ValueTypeName === referenceTrackType;
-
-		} );
-
-		if ( targetTrack === undefined ) continue;
-
-		let referenceOffset = 0;
-		const referenceValueSize = referenceTrack.getValueSize();
-
-		if ( referenceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {
-
-			referenceOffset = referenceValueSize / 3;
-
-		}
-
-		let targetOffset = 0;
-		const targetValueSize = targetTrack.getValueSize();
-
-		if ( targetTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline ) {
-
-			targetOffset = targetValueSize / 3;
-
-		}
-
-		const lastIndex = referenceTrack.times.length - 1;
-		let referenceValue;
-
-		// Find the value to subtract out of the track
-		if ( referenceTime <= referenceTrack.times[ 0 ] ) {
-
-			// Reference frame is earlier than the first keyframe, so just use the first keyframe
-			const startIndex = referenceOffset;
-			const endIndex = referenceValueSize - referenceOffset;
-			referenceValue = arraySlice( referenceTrack.values, startIndex, endIndex );
-
-		} else if ( referenceTime >= referenceTrack.times[ lastIndex ] ) {
-
-			// Reference frame is after the last keyframe, so just use the last keyframe
-			const startIndex = lastIndex * referenceValueSize + referenceOffset;
-			const endIndex = startIndex + referenceValueSize - referenceOffset;
-			referenceValue = arraySlice( referenceTrack.values, startIndex, endIndex );
-
-		} else {
-
-			// Interpolate to the reference value
-			const interpolant = referenceTrack.createInterpolant();
-			const startIndex = referenceOffset;
-			const endIndex = referenceValueSize - referenceOffset;
-			interpolant.evaluate( referenceTime );
-			referenceValue = arraySlice( interpolant.resultBuffer, startIndex, endIndex );
-
-		}
-
-		// Conjugate the quaternion
-		if ( referenceTrackType === 'quaternion' ) {
-
-			const referenceQuat = new Quaternion().fromArray( referenceValue ).normalize().conjugate();
-			referenceQuat.toArray( referenceValue );
-
-		}
-
-		// Subtract the reference value from all of the track values
-
-		const numTimes = targetTrack.times.length;
-		for ( let j = 0; j < numTimes; ++ j ) {
-
-			const valueStart = j * targetValueSize + targetOffset;
-
-			if ( referenceTrackType === 'quaternion' ) {
-
-				// Multiply the conjugate for quaternion track types
-				Quaternion.multiplyQuaternionsFlat(
-					targetTrack.values,
-					valueStart,
-					referenceValue,
-					0,
-					targetTrack.values,
-					valueStart
-				);
-
-			} else {
-
-				const valueEnd = targetValueSize - targetOffset * 2;
-
-				// Subtract each value for all other numeric track types
-				for ( let k = 0; k < valueEnd; ++ k ) {
-
-					targetTrack.values[ valueStart + k ] -= referenceValue[ k ];
-
-				}
-
-			}
-
-		}
-
-	}
-
-	targetClip.blendMode = AdditiveAnimationBlendMode;
-
-	return targetClip;
-
-}
-
-const AnimationUtils = {
-	arraySlice: arraySlice,
-	convertArray: convertArray,
-	isTypedArray: isTypedArray,
-	getKeyframeOrder: getKeyframeOrder,
-	sortedArray: sortedArray,
-	flattenJSON: flattenJSON,
-	subclip: subclip,
-	makeClipAdditive: makeClipAdditive
-};
-
-/**
- * Abstract base class of interpolants over parametric samples.
- *
- * The parameter domain is one dimensional, typically the time or a path
- * along a curve defined by the data.
- *
- * The sample values can have any dimensionality and derived classes may
- * apply special interpretations to the data.
- *
- * This class provides the interval seek in a Template Method, deferring
- * the actual interpolation to derived classes.
- *
- * Time complexity is O(1) for linear access crossing at most two points
- * and O(log N) for random access, where N is the number of positions.
- *
- * References:
- *
- * 		http://www.oodesign.com/template-method-pattern.html
- *
- */
-
-class Interpolant {
-
-	constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {
-
-		this.parameterPositions = parameterPositions;
-		this._cachedIndex = 0;
-
-		this.resultBuffer = resultBuffer !== undefined ?
-			resultBuffer : new sampleValues.constructor( sampleSize );
-		this.sampleValues = sampleValues;
-		this.valueSize = sampleSize;
-
-		this.settings = null;
-		this.DefaultSettings_ = {};
-
-	}
-
-	evaluate( t ) {
-
-		const pp = this.parameterPositions;
-		let i1 = this._cachedIndex,
-			t1 = pp[ i1 ],
-			t0 = pp[ i1 - 1 ];
-
-		validate_interval: {
-
-			seek: {
-
-				let right;
-
-				linear_scan: {
-
-					//- See http://jsperf.com/comparison-to-undefined/3
-					//- slower code:
-					//-
-					//- 				if ( t >= t1 || t1 === undefined ) {
-					forward_scan: if ( ! ( t < t1 ) ) {
-
-						for ( let giveUpAt = i1 + 2; ; ) {
-
-							if ( t1 === undefined ) {
-
-								if ( t < t0 ) break forward_scan;
-
-								// after end
-
-								i1 = pp.length;
-								this._cachedIndex = i1;
-								return this.copySampleValue_( i1 - 1 );
-
-							}
-
-							if ( i1 === giveUpAt ) break; // this loop
-
-							t0 = t1;
-							t1 = pp[ ++ i1 ];
-
-							if ( t < t1 ) {
-
-								// we have arrived at the sought interval
-								break seek;
-
-							}
-
-						}
-
-						// prepare binary search on the right side of the index
-						right = pp.length;
-						break linear_scan;
-
-					}
-
-					//- slower code:
-					//-					if ( t < t0 || t0 === undefined ) {
-					if ( ! ( t >= t0 ) ) {
-
-						// looping?
-
-						const t1global = pp[ 1 ];
-
-						if ( t < t1global ) {
-
-							i1 = 2; // + 1, using the scan for the details
-							t0 = t1global;
-
-						}
-
-						// linear reverse scan
-
-						for ( let giveUpAt = i1 - 2; ; ) {
-
-							if ( t0 === undefined ) {
-
-								// before start
-
-								this._cachedIndex = 0;
-								return this.copySampleValue_( 0 );
-
-							}
-
-							if ( i1 === giveUpAt ) break; // this loop
-
-							t1 = t0;
-							t0 = pp[ -- i1 - 1 ];
-
-							if ( t >= t0 ) {
-
-								// we have arrived at the sought interval
-								break seek;
-
-							}
-
-						}
-
-						// prepare binary search on the left side of the index
-						right = i1;
-						i1 = 0;
-						break linear_scan;
-
-					}
-
-					// the interval is valid
-
-					break validate_interval;
-
-				} // linear scan
-
-				// binary search
-
-				while ( i1 < right ) {
-
-					const mid = ( i1 + right ) >>> 1;
-
-					if ( t < pp[ mid ] ) {
-
-						right = mid;
-
-					} else {
-
-						i1 = mid + 1;
-
-					}
-
-				}
-
-				t1 = pp[ i1 ];
-				t0 = pp[ i1 - 1 ];
-
-				// check boundary cases, again
-
-				if ( t0 === undefined ) {
-
-					this._cachedIndex = 0;
-					return this.copySampleValue_( 0 );
-
-				}
-
-				if ( t1 === undefined ) {
-
-					i1 = pp.length;
-					this._cachedIndex = i1;
-					return this.copySampleValue_( i1 - 1 );
-
-				}
-
-			} // seek
-
-			this._cachedIndex = i1;
-
-			this.intervalChanged_( i1, t0, t1 );
-
-		} // validate_interval
-
-		return this.interpolate_( i1, t0, t, t1 );
-
-	}
-
-	getSettings_() {
-
-		return this.settings || this.DefaultSettings_;
-
-	}
-
-	copySampleValue_( index ) {
-
-		// copies a sample value to the result buffer
-
-		const result = this.resultBuffer,
-			values = this.sampleValues,
-			stride = this.valueSize,
-			offset = index * stride;
-
-		for ( let i = 0; i !== stride; ++ i ) {
-
-			result[ i ] = values[ offset + i ];
-
-		}
-
-		return result;
-
-	}
-
-	// Template methods for derived classes:
-
-	interpolate_( /* i1, t0, t, t1 */ ) {
-
-		throw new Error( 'call to abstract method' );
-		// implementations shall return this.resultBuffer
-
-	}
-
-	intervalChanged_( /* i1, t0, t1 */ ) {
-
-		// empty
-
-	}
-
-}
-
-/**
- * Fast and simple cubic spline interpolant.
- *
- * It was derived from a Hermitian construction setting the first derivative
- * at each sample position to the linear slope between neighboring positions
- * over their parameter interval.
- */
-
-class CubicInterpolant extends Interpolant {
-
-	constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {
-
-		super( parameterPositions, sampleValues, sampleSize, resultBuffer );
-
-		this._weightPrev = - 0;
-		this._offsetPrev = - 0;
-		this._weightNext = - 0;
-		this._offsetNext = - 0;
-
-		this.DefaultSettings_ = {
-
-			endingStart: ZeroCurvatureEnding,
-			endingEnd: ZeroCurvatureEnding
-
-		};
-
-	}
-
-	intervalChanged_( i1, t0, t1 ) {
-
-		const pp = this.parameterPositions;
-		let iPrev = i1 - 2,
-			iNext = i1 + 1,
-
-			tPrev = pp[ iPrev ],
-			tNext = pp[ iNext ];
-
-		if ( tPrev === undefined ) {
-
-			switch ( this.getSettings_().endingStart ) {
-
-				case ZeroSlopeEnding:
-
-					// f'(t0) = 0
-					iPrev = i1;
-					tPrev = 2 * t0 - t1;
-
-					break;
-
-				case WrapAroundEnding:
-
-					// use the other end of the curve
-					iPrev = pp.length - 2;
-					tPrev = t0 + pp[ iPrev ] - pp[ iPrev + 1 ];
-
-					break;
-
-				default: // ZeroCurvatureEnding
-
-					// f''(t0) = 0 a.k.a. Natural Spline
-					iPrev = i1;
-					tPrev = t1;
-
-			}
-
-		}
-
-		if ( tNext === undefined ) {
-
-			switch ( this.getSettings_().endingEnd ) {
-
-				case ZeroSlopeEnding:
-
-					// f'(tN) = 0
-					iNext = i1;
-					tNext = 2 * t1 - t0;
-
-					break;
-
-				case WrapAroundEnding:
-
-					// use the other end of the curve
-					iNext = 1;
-					tNext = t1 + pp[ 1 ] - pp[ 0 ];
-
-					break;
-
-				default: // ZeroCurvatureEnding
-
-					// f''(tN) = 0, a.k.a. Natural Spline
-					iNext = i1 - 1;
-					tNext = t0;
-
-			}
-
-		}
-
-		const halfDt = ( t1 - t0 ) * 0.5,
-			stride = this.valueSize;
-
-		this._weightPrev = halfDt / ( t0 - tPrev );
-		this._weightNext = halfDt / ( tNext - t1 );
-		this._offsetPrev = iPrev * stride;
-		this._offsetNext = iNext * stride;
-
-	}
-
-	interpolate_( i1, t0, t, t1 ) {
-
-		const result = this.resultBuffer,
-			values = this.sampleValues,
-			stride = this.valueSize,
-
-			o1 = i1 * stride,		o0 = o1 - stride,
-			oP = this._offsetPrev, 	oN = this._offsetNext,
-			wP = this._weightPrev,	wN = this._weightNext,
-
-			p = ( t - t0 ) / ( t1 - t0 ),
-			pp = p * p,
-			ppp = pp * p;
-
-		// evaluate polynomials
-
-		const sP = - wP * ppp + 2 * wP * pp - wP * p;
-		const s0 = ( 1 + wP ) * ppp + ( - 1.5 - 2 * wP ) * pp + ( - 0.5 + wP ) * p + 1;
-		const s1 = ( - 1 - wN ) * ppp + ( 1.5 + wN ) * pp + 0.5 * p;
-		const sN = wN * ppp - wN * pp;
-
-		// combine data linearly
-
-		for ( let i = 0; i !== stride; ++ i ) {
-
-			result[ i ] =
-					sP * values[ oP + i ] +
-					s0 * values[ o0 + i ] +
-					s1 * values[ o1 + i ] +
-					sN * values[ oN + i ];
-
-		}
-
-		return result;
-
-	}
-
-}
-
-class LinearInterpolant extends Interpolant {
-
-	constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {
-
-		super( parameterPositions, sampleValues, sampleSize, resultBuffer );
-
-	}
-
-	interpolate_( i1, t0, t, t1 ) {
-
-		const result = this.resultBuffer,
-			values = this.sampleValues,
-			stride = this.valueSize,
-
-			offset1 = i1 * stride,
-			offset0 = offset1 - stride,
-
-			weight1 = ( t - t0 ) / ( t1 - t0 ),
-			weight0 = 1 - weight1;
-
-		for ( let i = 0; i !== stride; ++ i ) {
-
-			result[ i ] =
-					values[ offset0 + i ] * weight0 +
-					values[ offset1 + i ] * weight1;
-
-		}
-
-		return result;
-
-	}
-
-}
-
-/**
- *
- * Interpolant that evaluates to the sample value at the position preceding
- * the parameter.
- */
-
-class DiscreteInterpolant extends Interpolant {
-
-	constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {
-
-		super( parameterPositions, sampleValues, sampleSize, resultBuffer );
-
-	}
-
-	interpolate_( i1 /*, t0, t, t1 */ ) {
-
-		return this.copySampleValue_( i1 - 1 );
-
-	}
-
-}
-
-class KeyframeTrack {
-
-	constructor( name, times, values, interpolation ) {
-
-		if ( name === undefined ) throw new Error( 'THREE.KeyframeTrack: track name is undefined' );
-		if ( times === undefined || times.length === 0 ) throw new Error( 'THREE.KeyframeTrack: no keyframes in track named ' + name );
-
-		this.name = name;
-
-		this.times = convertArray( times, this.TimeBufferType );
-		this.values = convertArray( values, this.ValueBufferType );
-
-		this.setInterpolation( interpolation || this.DefaultInterpolation );
-
-	}
-
-	// Serialization (in static context, because of constructor invocation
-	// and automatic invocation of .toJSON):
-
-	static toJSON( track ) {
-
-		const trackType = track.constructor;
-
-		let json;
-
-		// derived classes can define a static toJSON method
-		if ( trackType.toJSON !== this.toJSON ) {
-
-			json = trackType.toJSON( track );
-
-		} else {
-
-			// by default, we assume the data can be serialized as-is
-			json = {
-
-				'name': track.name,
-				'times': convertArray( track.times, Array ),
-				'values': convertArray( track.values, Array )
-
-			};
-
-			const interpolation = track.getInterpolation();
-
-			if ( interpolation !== track.DefaultInterpolation ) {
-
-				json.interpolation = interpolation;
-
-			}
-
-		}
-
-		json.type = track.ValueTypeName; // mandatory
-
-		return json;
-
-	}
-
-	InterpolantFactoryMethodDiscrete( result ) {
-
-		return new DiscreteInterpolant( this.times, this.values, this.getValueSize(), result );
-
-	}
-
-	InterpolantFactoryMethodLinear( result ) {
-
-		return new LinearInterpolant( this.times, this.values, this.getValueSize(), result );
-
-	}
-
-	InterpolantFactoryMethodSmooth( result ) {
-
-		return new CubicInterpolant( this.times, this.values, this.getValueSize(), result );
-
-	}
-
-	setInterpolation( interpolation ) {
-
-		let factoryMethod;
-
-		switch ( interpolation ) {
-
-			case InterpolateDiscrete:
-
-				factoryMethod = this.InterpolantFactoryMethodDiscrete;
-
-				break;
-
-			case InterpolateLinear:
-
-				factoryMethod = this.InterpolantFactoryMethodLinear;
-
-				break;
-
-			case InterpolateSmooth:
-
-				factoryMethod = this.InterpolantFactoryMethodSmooth;
-
-				break;
-
-		}
-
-		if ( factoryMethod === undefined ) {
-
-			const message = 'unsupported interpolation for ' +
-				this.ValueTypeName + ' keyframe track named ' + this.name;
-
-			if ( this.createInterpolant === undefined ) {
-
-				// fall back to default, unless the default itself is messed up
-				if ( interpolation !== this.DefaultInterpolation ) {
-
-					this.setInterpolation( this.DefaultInterpolation );
-
-				} else {
-
-					throw new Error( message ); // fatal, in this case
-
-				}
-
-			}
-
-			console.warn( 'THREE.KeyframeTrack:', message );
-			return this;
-
-		}
-
-		this.createInterpolant = factoryMethod;
-
-		return this;
-
-	}
-
-	getInterpolation() {
-
-		switch ( this.createInterpolant ) {
-
-			case this.InterpolantFactoryMethodDiscrete:
-
-				return InterpolateDiscrete;
-
-			case this.InterpolantFactoryMethodLinear:
-
-				return InterpolateLinear;
-
-			case this.InterpolantFactoryMethodSmooth:
-
-				return InterpolateSmooth;
-
-		}
-
-	}
-
-	getValueSize() {
-
-		return this.values.length / this.times.length;
-
-	}
-
-	// move all keyframes either forwards or backwards in time
-	shift( timeOffset ) {
-
-		if ( timeOffset !== 0.0 ) {
-
-			const times = this.times;
-
-			for ( let i = 0, n = times.length; i !== n; ++ i ) {
-
-				times[ i ] += timeOffset;
-
-			}
-
-		}
-
-		return this;
-
-	}
-
-	// scale all keyframe times by a factor (useful for frame <-> seconds conversions)
-	scale( timeScale ) {
-
-		if ( timeScale !== 1.0 ) {
-
-			const times = this.times;
-
-			for ( let i = 0, n = times.length; i !== n; ++ i ) {
-
-				times[ i ] *= timeScale;
-
-			}
-
-		}
-
-		return this;
-
-	}
-
-	// removes keyframes before and after animation without changing any values within the range [startTime, endTime].
-	// IMPORTANT: We do not shift around keys to the start of the track time, because for interpolated keys this will change their values
-	trim( startTime, endTime ) {
-
-		const times = this.times,
-			nKeys = times.length;
-
-		let from = 0,
-			to = nKeys - 1;
-
-		while ( from !== nKeys && times[ from ] < startTime ) {
-
-			++ from;
-
-		}
-
-		while ( to !== - 1 && times[ to ] > endTime ) {
-
-			-- to;
-
-		}
-
-		++ to; // inclusive -> exclusive bound
-
-		if ( from !== 0 || to !== nKeys ) {
-
-			// empty tracks are forbidden, so keep at least one keyframe
-			if ( from >= to ) {
-
-				to = Math.max( to, 1 );
-				from = to - 1;
-
-			}
-
-			const stride = this.getValueSize();
-			this.times = arraySlice( times, from, to );
-			this.values = arraySlice( this.values, from * stride, to * stride );
-
-		}
-
-		return this;
-
-	}
-
-	// ensure we do not get a GarbageInGarbageOut situation, make sure tracks are at least minimally viable
-	validate() {
-
-		let valid = true;
-
-		const valueSize = this.getValueSize();
-		if ( valueSize - Math.floor( valueSize ) !== 0 ) {
-
-			console.error( 'THREE.KeyframeTrack: Invalid value size in track.', this );
-			valid = false;
-
-		}
-
-		const times = this.times,
-			values = this.values,
-
-			nKeys = times.length;
-
-		if ( nKeys === 0 ) {
-
-			console.error( 'THREE.KeyframeTrack: Track is empty.', this );
-			valid = false;
-
-		}
-
-		let prevTime = null;
-
-		for ( let i = 0; i !== nKeys; i ++ ) {
-
-			const currTime = times[ i ];
-
-			if ( typeof currTime === 'number' && isNaN( currTime ) ) {
-
-				console.error( 'THREE.KeyframeTrack: Time is not a valid number.', this, i, currTime );
-				valid = false;
-				break;
-
-			}
-
-			if ( prevTime !== null && prevTime > currTime ) {
-
-				console.error( 'THREE.KeyframeTrack: Out of order keys.', this, i, currTime, prevTime );
-				valid = false;
-				break;
-
-			}
-
-			prevTime = currTime;
-
-		}
-
-		if ( values !== undefined ) {
-
-			if ( isTypedArray( values ) ) {
-
-				for ( let i = 0, n = values.length; i !== n; ++ i ) {
-
-					const value = values[ i ];
-
-					if ( isNaN( value ) ) {
-
-						console.error( 'THREE.KeyframeTrack: Value is not a valid number.', this, i, value );
-						valid = false;
-						break;
-
-					}
-
-				}
-
-			}
-
-		}
-
-		return valid;
-
-	}
-
-	// removes equivalent sequential keys as common in morph target sequences
-	// (0,0,0,0,1,1,1,0,0,0,0,0,0,0) --> (0,0,1,1,0,0)
-	optimize() {
-
-		// times or values may be shared with other tracks, so overwriting is unsafe
-		const times = arraySlice( this.times ),
-			values = arraySlice( this.values ),
-			stride = this.getValueSize(),
-
-			smoothInterpolation = this.getInterpolation() === InterpolateSmooth,
-
-			lastIndex = times.length - 1;
-
-		let writeIndex = 1;
-
-		for ( let i = 1; i < lastIndex; ++ i ) {
-
-			let keep = false;
-
-			const time = times[ i ];
-			const timeNext = times[ i + 1 ];
-
-			// remove adjacent keyframes scheduled at the same time
-
-			if ( time !== timeNext && ( i !== 1 || time !== times[ 0 ] ) ) {
-
-				if ( ! smoothInterpolation ) {
-
-					// remove unnecessary keyframes same as their neighbors
-
-					const offset = i * stride,
-						offsetP = offset - stride,
-						offsetN = offset + stride;
-
-					for ( let j = 0; j !== stride; ++ j ) {
-
-						const value = values[ offset + j ];
-
-						if ( value !== values[ offsetP + j ] ||
-							value !== values[ offsetN + j ] ) {
-
-							keep = true;
-							break;
-
-						}
-
-					}
-
-				} else {
-
-					keep = true;
-
-				}
-
-			}
-
-			// in-place compaction
-
-			if ( keep ) {
-
-				if ( i !== writeIndex ) {
-
-					times[ writeIndex ] = times[ i ];
-
-					const readOffset = i * stride,
-						writeOffset = writeIndex * stride;
-
-					for ( let j = 0; j !== stride; ++ j ) {
-
-						values[ writeOffset + j ] = values[ readOffset + j ];
-
-					}
-
-				}
-
-				++ writeIndex;
-
-			}
-
-		}
-
-		// flush last keyframe (compaction looks ahead)
-
-		if ( lastIndex > 0 ) {
-
-			times[ writeIndex ] = times[ lastIndex ];
-
-			for ( let readOffset = lastIndex * stride, writeOffset = writeIndex * stride, j = 0; j !== stride; ++ j ) {
-
-				values[ writeOffset + j ] = values[ readOffset + j ];
-
-			}
-
-			++ writeIndex;
-
-		}
-
-		if ( writeIndex !== times.length ) {
-
-			this.times = arraySlice( times, 0, writeIndex );
-			this.values = arraySlice( values, 0, writeIndex * stride );
-
-		} else {
-
-			this.times = times;
-			this.values = values;
-
-		}
-
-		return this;
-
-	}
-
-	clone() {
-
-		const times = arraySlice( this.times, 0 );
-		const values = arraySlice( this.values, 0 );
-
-		const TypedKeyframeTrack = this.constructor;
-		const track = new TypedKeyframeTrack( this.name, times, values );
-
-		// Interpolant argument to constructor is not saved, so copy the factory method directly.
-		track.createInterpolant = this.createInterpolant;
-
-		return track;
-
-	}
-
-}
-
-KeyframeTrack.prototype.TimeBufferType = Float32Array;
-KeyframeTrack.prototype.ValueBufferType = Float32Array;
-KeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;
-
-/**
- * A Track of Boolean keyframe values.
- */
-class BooleanKeyframeTrack extends KeyframeTrack {}
-
-BooleanKeyframeTrack.prototype.ValueTypeName = 'bool';
-BooleanKeyframeTrack.prototype.ValueBufferType = Array;
-BooleanKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;
-BooleanKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;
-BooleanKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;
-
-/**
- * A Track of keyframe values that represent color.
- */
-class ColorKeyframeTrack extends KeyframeTrack {}
-
-ColorKeyframeTrack.prototype.ValueTypeName = 'color';
-
-/**
- * A Track of numeric keyframe values.
- */
-class NumberKeyframeTrack extends KeyframeTrack {}
-
-NumberKeyframeTrack.prototype.ValueTypeName = 'number';
-
-/**
- * Spherical linear unit quaternion interpolant.
- */
-
-class QuaternionLinearInterpolant extends Interpolant {
-
-	constructor( parameterPositions, sampleValues, sampleSize, resultBuffer ) {
-
-		super( parameterPositions, sampleValues, sampleSize, resultBuffer );
-
-	}
-
-	interpolate_( i1, t0, t, t1 ) {
-
-		const result = this.resultBuffer,
-			values = this.sampleValues,
-			stride = this.valueSize,
-
-			alpha = ( t - t0 ) / ( t1 - t0 );
-
-		let offset = i1 * stride;
-
-		for ( let end = offset + stride; offset !== end; offset += 4 ) {
-
-			Quaternion.slerpFlat( result, 0, values, offset - stride, values, offset, alpha );
-
-		}
-
-		return result;
-
-	}
-
-}
-
-/**
- * A Track of quaternion keyframe values.
- */
-class QuaternionKeyframeTrack extends KeyframeTrack {
-
-	InterpolantFactoryMethodLinear( result ) {
-
-		return new QuaternionLinearInterpolant( this.times, this.values, this.getValueSize(), result );
-
-	}
-
-}
-
-QuaternionKeyframeTrack.prototype.ValueTypeName = 'quaternion';
-// ValueBufferType is inherited
-QuaternionKeyframeTrack.prototype.DefaultInterpolation = InterpolateLinear;
-QuaternionKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;
-
-/**
- * A Track that interpolates Strings
- */
-class StringKeyframeTrack extends KeyframeTrack {}
-
-StringKeyframeTrack.prototype.ValueTypeName = 'string';
-StringKeyframeTrack.prototype.ValueBufferType = Array;
-StringKeyframeTrack.prototype.DefaultInterpolation = InterpolateDiscrete;
-StringKeyframeTrack.prototype.InterpolantFactoryMethodLinear = undefined;
-StringKeyframeTrack.prototype.InterpolantFactoryMethodSmooth = undefined;
-
-/**
- * A Track of vectored keyframe values.
- */
-class VectorKeyframeTrack extends KeyframeTrack {}
-
-VectorKeyframeTrack.prototype.ValueTypeName = 'vector';
-
-class AnimationClip {
-
-	constructor( name, duration = - 1, tracks, blendMode = NormalAnimationBlendMode ) {
-
-		this.name = name;
-		this.tracks = tracks;
-		this.duration = duration;
-		this.blendMode = blendMode;
-
-		this.uuid = generateUUID();
-
-		// this means it should figure out its duration by scanning the tracks
-		if ( this.duration < 0 ) {
-
-			this.resetDuration();
-
-		}
-
-	}
-
-
-	static parse( json ) {
-
-		const tracks = [],
-			jsonTracks = json.tracks,
-			frameTime = 1.0 / ( json.fps || 1.0 );
-
-		for ( let i = 0, n = jsonTracks.length; i !== n; ++ i ) {
-
-			tracks.push( parseKeyframeTrack( jsonTracks[ i ] ).scale( frameTime ) );
-
-		}
-
-		const clip = new this( json.name, json.duration, tracks, json.blendMode );
-		clip.uuid = json.uuid;
-
-		return clip;
-
-	}
-
-	static toJSON( clip ) {
-
-		const tracks = [],
-			clipTracks = clip.tracks;
-
-		const json = {
-
-			'name': clip.name,
-			'duration': clip.duration,
-			'tracks': tracks,
-			'uuid': clip.uuid,
-			'blendMode': clip.blendMode
-
-		};
-
-		for ( let i = 0, n = clipTracks.length; i !== n; ++ i ) {
-
-			tracks.push( KeyframeTrack.toJSON( clipTracks[ i ] ) );
-
-		}
-
-		return json;
-
-	}
-
-	static CreateFromMorphTargetSequence( name, morphTargetSequence, fps, noLoop ) {
-
-		const numMorphTargets = morphTargetSequence.length;
-		const tracks = [];
-
-		for ( let i = 0; i < numMorphTargets; i ++ ) {
-
-			let times = [];
-			let values = [];
-
-			times.push(
-				( i + numMorphTargets - 1 ) % numMorphTargets,
-				i,
-				( i + 1 ) % numMorphTargets );
-
-			values.push( 0, 1, 0 );
-
-			const order = getKeyframeOrder( times );
-			times = sortedArray( times, 1, order );
-			values = sortedArray( values, 1, order );
-
-			// if there is a key at the first frame, duplicate it as the
-			// last frame as well for perfect loop.
-			if ( ! noLoop && times[ 0 ] === 0 ) {
-
-				times.push( numMorphTargets );
-				values.push( values[ 0 ] );
-
-			}
-
-			tracks.push(
-				new NumberKeyframeTrack(
-					'.morphTargetInfluences[' + morphTargetSequence[ i ].name + ']',
-					times, values
-				).scale( 1.0 / fps ) );
-
-		}
-
-		return new this( name, - 1, tracks );
-
-	}
-
-	static findByName( objectOrClipArray, name ) {
-
-		let clipArray = objectOrClipArray;
-
-		if ( ! Array.isArray( objectOrClipArray ) ) {
-
-			const o = objectOrClipArray;
-			clipArray = o.geometry && o.geometry.animations || o.animations;
-
-		}
-
-		for ( let i = 0; i < clipArray.length; i ++ ) {
-
-			if ( clipArray[ i ].name === name ) {
-
-				return clipArray[ i ];
-
-			}
-
-		}
-
-		return null;
-
-	}
-
-	static CreateClipsFromMorphTargetSequences( morphTargets, fps, noLoop ) {
-
-		const animationToMorphTargets = {};
-
-		// tested with https://regex101.com/ on trick sequences
-		// such flamingo_flyA_003, flamingo_run1_003, crdeath0059
-		const pattern = /^([\w-]*?)([\d]+)$/;
-
-		// sort morph target names into animation groups based
-		// patterns like Walk_001, Walk_002, Run_001, Run_002
-		for ( let i = 0, il = morphTargets.length; i < il; i ++ ) {
-
-			const morphTarget = morphTargets[ i ];
-			const parts = morphTarget.name.match( pattern );
-
-			if ( parts && parts.length > 1 ) {
-
-				const name = parts[ 1 ];
-
-				let animationMorphTargets = animationToMorphTargets[ name ];
-
-				if ( ! animationMorphTargets ) {
-
-					animationToMorphTargets[ name ] = animationMorphTargets = [];
-
-				}
-
-				animationMorphTargets.push( morphTarget );
-
-			}
-
-		}
-
-		const clips = [];
-
-		for ( const name in animationToMorphTargets ) {
-
-			clips.push( this.CreateFromMorphTargetSequence( name, animationToMorphTargets[ name ], fps, noLoop ) );
-
-		}
-
-		return clips;
-
-	}
-
-	// parse the animation.hierarchy format
-	static parseAnimation( animation, bones ) {
-
-		if ( ! animation ) {
-
-			console.error( 'THREE.AnimationClip: No animation in JSONLoader data.' );
-			return null;
-
-		}
-
-		const addNonemptyTrack = function ( trackType, trackName, animationKeys, propertyName, destTracks ) {
-
-			// only return track if there are actually keys.
-			if ( animationKeys.length !== 0 ) {
-
-				const times = [];
-				const values = [];
-
-				flattenJSON( animationKeys, times, values, propertyName );
-
-				// empty keys are filtered out, so check again
-				if ( times.length !== 0 ) {
-
-					destTracks.push( new trackType( trackName, times, values ) );
-
-				}
-
-			}
-
-		};
-
-		const tracks = [];
-
-		const clipName = animation.name || 'default';
-		const fps = animation.fps || 30;
-		const blendMode = animation.blendMode;
-
-		// automatic length determination in AnimationClip.
-		let duration = animation.length || - 1;
-
-		const hierarchyTracks = animation.hierarchy || [];
-
-		for ( let h = 0; h < hierarchyTracks.length; h ++ ) {
-
-			const animationKeys = hierarchyTracks[ h ].keys;
-
-			// skip empty tracks
-			if ( ! animationKeys || animationKeys.length === 0 ) continue;
-
-			// process morph targets
-			if ( animationKeys[ 0 ].morphTargets ) {
-
-				// figure out all morph targets used in this track
-				const morphTargetNames = {};
-
-				let k;
-
-				for ( k = 0; k < animationKeys.length; k ++ ) {
-
-					if ( animationKeys[ k ].morphTargets ) {
-
-						for ( let m = 0; m < animationKeys[ k ].morphTargets.length; m ++ ) {
-
-							morphTargetNames[ animationKeys[ k ].morphTargets[ m ] ] = - 1;
-
-						}
-
-					}
-
-				}
-
-				// create a track for each morph target with all zero
-				// morphTargetInfluences except for the keys in which
-				// the morphTarget is named.
-				for ( const morphTargetName in morphTargetNames ) {
-
-					const times = [];
-					const values = [];
-
-					for ( let m = 0; m !== animationKeys[ k ].morphTargets.length; ++ m ) {
-
-						const animationKey = animationKeys[ k ];
-
-						times.push( animationKey.time );
-						values.push( ( animationKey.morphTarget === morphTargetName ) ? 1 : 0 );
-
-					}
-
-					tracks.push( new NumberKeyframeTrack( '.morphTargetInfluence[' + morphTargetName + ']', times, values ) );
-
-				}
-
-				duration = morphTargetNames.length * fps;
-
-			} else {
-
-				// ...assume skeletal animation
-
-				const boneName = '.bones[' + bones[ h ].name + ']';
-
-				addNonemptyTrack(
-					VectorKeyframeTrack, boneName + '.position',
-					animationKeys, 'pos', tracks );
-
-				addNonemptyTrack(
-					QuaternionKeyframeTrack, boneName + '.quaternion',
-					animationKeys, 'rot', tracks );
-
-				addNonemptyTrack(
-					VectorKeyframeTrack, boneName + '.scale',
-					animationKeys, 'scl', tracks );
-
-			}
-
-		}
-
-		if ( tracks.length === 0 ) {
-
-			return null;
-
-		}
-
-		const clip = new this( clipName, duration, tracks, blendMode );
-
-		return clip;
-
-	}
-
-	resetDuration() {
-
-		const tracks = this.tracks;
-		let duration = 0;
-
-		for ( let i = 0, n = tracks.length; i !== n; ++ i ) {
-
-			const track = this.tracks[ i ];
-
-			duration = Math.max( duration, track.times[ track.times.length - 1 ] );
-
-		}
-
-		this.duration = duration;
-
-		return this;
-
-	}
-
-	trim() {
-
-		for ( let i = 0; i < this.tracks.length; i ++ ) {
-
-			this.tracks[ i ].trim( 0, this.duration );
-
-		}
-
-		return this;
-
-	}
-
-	validate() {
-
-		let valid = true;
-
-		for ( let i = 0; i < this.tracks.length; i ++ ) {
-
-			valid = valid && this.tracks[ i ].validate();
-
-		}
-
-		return valid;
-
-	}
-
-	optimize() {
-
-		for ( let i = 0; i < this.tracks.length; i ++ ) {
-
-			this.tracks[ i ].optimize();
-
-		}
-
-		return this;
-
-	}
-
-	clone() {
-
-		const tracks = [];
-
-		for ( let i = 0; i < this.tracks.length; i ++ ) {
-
-			tracks.push( this.tracks[ i ].clone() );
-
-		}
-
-		return new this.constructor( this.name, this.duration, tracks, this.blendMode );
-
-	}
-
-	toJSON() {
-
-		return this.constructor.toJSON( this );
-
-	}
-
-}
-
-function getTrackTypeForValueTypeName( typeName ) {
-
-	switch ( typeName.toLowerCase() ) {
-
-		case 'scalar':
-		case 'double':
-		case 'float':
-		case 'number':
-		case 'integer':
-
-			return NumberKeyframeTrack;
-
-		case 'vector':
-		case 'vector2':
-		case 'vector3':
-		case 'vector4':
-
-			return VectorKeyframeTrack;
-
-		case 'color':
-
-			return ColorKeyframeTrack;
-
-		case 'quaternion':
-
-			return QuaternionKeyframeTrack;
-
-		case 'bool':
-		case 'boolean':
-
-			return BooleanKeyframeTrack;
-
-		case 'string':
-
-			return StringKeyframeTrack;
-
-	}
-
-	throw new Error( 'THREE.KeyframeTrack: Unsupported typeName: ' + typeName );
-
-}
-
-function parseKeyframeTrack( json ) {
-
-	if ( json.type === undefined ) {
-
-		throw new Error( 'THREE.KeyframeTrack: track type undefined, can not parse' );
-
-	}
-
-	const trackType = getTrackTypeForValueTypeName( json.type );
-
-	if ( json.times === undefined ) {
-
-		const times = [], values = [];
-
-		flattenJSON( json.keys, times, values, 'value' );
-
-		json.times = times;
-		json.values = values;
-
-	}
-
-	// derived classes can define a static parse method
-	if ( trackType.parse !== undefined ) {
-
-		return trackType.parse( json );
-
-	} else {
-
-		// by default, we assume a constructor compatible with the base
-		return new trackType( json.name, json.times, json.values, json.interpolation );
-
-	}
-
-}
-
-const Cache = {
-
-	enabled: false,
-
-	files: {},
-
-	add: function ( key, file ) {
-
-		if ( this.enabled === false ) return;
-
-		// console.log( 'THREE.Cache', 'Adding key:', key );
-
-		this.files[ key ] = file;
-
-	},
-
-	get: function ( key ) {
-
-		if ( this.enabled === false ) return;
-
-		// console.log( 'THREE.Cache', 'Checking key:', key );
-
-		return this.files[ key ];
-
-	},
-
-	remove: function ( key ) {
-
-		delete this.files[ key ];
-
-	},
-
-	clear: function () {
-
-		this.files = {};
-
-	}
-
-};
-
-class LoadingManager {
-
-	constructor( onLoad, onProgress, onError ) {
-
-		const scope = this;
-
-		let isLoading = false;
-		let itemsLoaded = 0;
-		let itemsTotal = 0;
-		let urlModifier = undefined;
-		const handlers = [];
-
-		// Refer to #5689 for the reason why we don't set .onStart
-		// in the constructor
-
-		this.onStart = undefined;
-		this.onLoad = onLoad;
-		this.onProgress = onProgress;
-		this.onError = onError;
-
-		this.itemStart = function ( url ) {
-
-			itemsTotal ++;
-
-			if ( isLoading === false ) {
-
-				if ( scope.onStart !== undefined ) {
-
-					scope.onStart( url, itemsLoaded, itemsTotal );
-
-				}
-
-			}
-
-			isLoading = true;
-
-		};
-
-		this.itemEnd = function ( url ) {
-
-			itemsLoaded ++;
-
-			if ( scope.onProgress !== undefined ) {
-
-				scope.onProgress( url, itemsLoaded, itemsTotal );
-
-			}
-
-			if ( itemsLoaded === itemsTotal ) {
-
-				isLoading = false;
-
-				if ( scope.onLoad !== undefined ) {
-
-					scope.onLoad();
-
-				}
-
-			}
-
-		};
-
-		this.itemError = function ( url ) {
-
-			if ( scope.onError !== undefined ) {
-
-				scope.onError( url );
-
-			}
-
-		};
-
-		this.resolveURL = function ( url ) {
-
-			if ( urlModifier ) {
-
-				return urlModifier( url );
-
-			}
-
-			return url;
-
-		};
-
-		this.setURLModifier = function ( transform ) {
-
-			urlModifier = transform;
-
-			return this;
-
-		};
-
-		this.addHandler = function ( regex, loader ) {
-
-			handlers.push( regex, loader );
-
-			return this;
-
-		};
-
-		this.removeHandler = function ( regex ) {
-
-			const index = handlers.indexOf( regex );
-
-			if ( index !== - 1 ) {
-
-				handlers.splice( index, 2 );
-
-			}
-
-			return this;
-
-		};
-
-		this.getHandler = function ( file ) {
-
-			for ( let i = 0, l = handlers.length; i < l; i += 2 ) {
-
-				const regex = handlers[ i ];
-				const loader = handlers[ i + 1 ];
-
-				if ( regex.global ) regex.lastIndex = 0; // see #17920
-
-				if ( regex.test( file ) ) {
-
-					return loader;
-
-				}
-
-			}
-
-			return null;
-
-		};
-
-	}
-
-}
-
-const DefaultLoadingManager = /*@__PURE__*/ new LoadingManager();
-
-class Loader {
-
-	constructor( manager ) {
-
-		this.manager = ( manager !== undefined ) ? manager : DefaultLoadingManager;
-
-		this.crossOrigin = 'anonymous';
-		this.withCredentials = false;
-		this.path = '';
-		this.resourcePath = '';
-		this.requestHeader = {};
-
-	}
-
-	load( /* url, onLoad, onProgress, onError */ ) {}
-
-	loadAsync( url, onProgress ) {
-
-		const scope = this;
-
-		return new Promise( function ( resolve, reject ) {
-
-			scope.load( url, resolve, onProgress, reject );
-
-		} );
-
-	}
-
-	parse( /* data */ ) {}
-
-	setCrossOrigin( crossOrigin ) {
-
-		this.crossOrigin = crossOrigin;
-		return this;
-
-	}
-
-	setWithCredentials( value ) {
-
-		this.withCredentials = value;
-		return this;
-
-	}
-
-	setPath( path ) {
-
-		this.path = path;
-		return this;
-
-	}
-
-	setResourcePath( resourcePath ) {
-
-		this.resourcePath = resourcePath;
-		return this;
-
-	}
-
-	setRequestHeader( requestHeader ) {
-
-		this.requestHeader = requestHeader;
-		return this;
-
-	}
-
-}
-
-const loading = {};
-
-class HttpError extends Error {
-
-	constructor( message, response ) {
-
-		super( message );
-		this.response = response;
-
-	}
-
-}
-
-class FileLoader extends Loader {
-
-	constructor( manager ) {
-
-		super( manager );
-
-	}
-
-	load( url, onLoad, onProgress, onError ) {
-
-		if ( url === undefined ) url = '';
-
-		if ( this.path !== undefined ) url = this.path + url;
-
-		url = this.manager.resolveURL( url );
-
-		const cached = Cache.get( url );
-
-		if ( cached !== undefined ) {
-
-			this.manager.itemStart( url );
-
-			setTimeout( () => {
-
-				if ( onLoad ) onLoad( cached );
-
-				this.manager.itemEnd( url );
-
-			}, 0 );
-
-			return cached;
-
-		}
-
-		// Check if request is duplicate
-
-		if ( loading[ url ] !== undefined ) {
-
-			loading[ url ].push( {
-
-				onLoad: onLoad,
-				onProgress: onProgress,
-				onError: onError
-
-			} );
-
-			return;
-
-		}
-
-		// Initialise array for duplicate requests
-		loading[ url ] = [];
-
-		loading[ url ].push( {
-			onLoad: onLoad,
-			onProgress: onProgress,
-			onError: onError,
-		} );
-
-		// create request
-		const req = new Request( url, {
-			headers: new Headers( this.requestHeader ),
-			credentials: this.withCredentials ? 'include' : 'same-origin',
-			// An abort controller could be added within a future PR
-		} );
-
-		// record states ( avoid data race )
-		const mimeType = this.mimeType;
-		const responseType = this.responseType;
-
-		// start the fetch
-		fetch( req )
-			.then( response => {
-
-				if ( response.status === 200 || response.status === 0 ) {
-
-					// Some browsers return HTTP Status 0 when using non-http protocol
-					// e.g. 'file://' or 'data://'. Handle as success.
-
-					if ( response.status === 0 ) {
-
-						console.warn( 'THREE.FileLoader: HTTP Status 0 received.' );
-
-					}
-
-					// Workaround: Checking if response.body === undefined for Alipay browser #23548
-
-					if ( typeof ReadableStream === 'undefined' || response.body === undefined || response.body.getReader === undefined ) {
-
-						return response;
-
-					}
-
-					const callbacks = loading[ url ];
-					const reader = response.body.getReader();
-
-					// Nginx needs X-File-Size check
-					// https://serverfault.com/questions/482875/why-does-nginx-remove-content-length-header-for-chunked-content
-					const contentLength = response.headers.get( 'Content-Length' ) || response.headers.get( 'X-File-Size' );
-					const total = contentLength ? parseInt( contentLength ) : 0;
-					const lengthComputable = total !== 0;
-					let loaded = 0;
-
-					// periodically read data into the new stream tracking while download progress
-					const stream = new ReadableStream( {
-						start( controller ) {
-
-							readData();
-
-							function readData() {
-
-								reader.read().then( ( { done, value } ) => {
-
-									if ( done ) {
-
-										controller.close();
-
-									} else {
-
-										loaded += value.byteLength;
-
-										const event = new ProgressEvent( 'progress', { lengthComputable, loaded, total } );
-										for ( let i = 0, il = callbacks.length; i < il; i ++ ) {
-
-											const callback = callbacks[ i ];
-											if ( callback.onProgress ) callback.onProgress( event );
-
-										}
-
-										controller.enqueue( value );
-										readData();
-
-									}
-
-								} );
-
-							}
-
-						}
-
-					} );
-
-					return new Response( stream );
-
-				} else {
-
-					throw new HttpError( `fetch for "${response.url}" responded with ${response.status}: ${response.statusText}`, response );
-
-				}
-
-			} )
-			.then( response => {
-
-				switch ( responseType ) {
-
-					case 'arraybuffer':
-
-						return response.arrayBuffer();
-
-					case 'blob':
-
-						return response.blob();
-
-					case 'document':
-
-						return response.text()
-							.then( text => {
-
-								const parser = new DOMParser();
-								return parser.parseFromString( text, mimeType );
-
-							} );
-
-					case 'json':
-
-						return response.json();
-
-					default:
-
-						if ( mimeType === undefined ) {
-
-							return response.text();
-
-						} else {
-
-							// sniff encoding
-							const re = /charset="?([^;"\s]*)"?/i;
-							const exec = re.exec( mimeType );
-							const label = exec && exec[ 1 ] ? exec[ 1 ].toLowerCase() : undefined;
-							const decoder = new TextDecoder( label );
-							return response.arrayBuffer().then( ab => decoder.decode( ab ) );
-
-						}
-
-				}
-
-			} )
-			.then( data => {
-
-				// Add to cache only on HTTP success, so that we do not cache
-				// error response bodies as proper responses to requests.
-				Cache.add( url, data );
-
-				const callbacks = loading[ url ];
-				delete loading[ url ];
-
-				for ( let i = 0, il = callbacks.length; i < il; i ++ ) {
-
-					const callback = callbacks[ i ];
-					if ( callback.onLoad ) callback.onLoad( data );
-
-				}
-
-			} )
-			.catch( err => {
-
-				// Abort errors and other errors are handled the same
-
-				const callbacks = loading[ url ];
-
-				if ( callbacks === undefined ) {
-
-					// When onLoad was called and url was deleted in `loading`
-					this.manager.itemError( url );
-					throw err;
-
-				}
-
-				delete loading[ url ];
-
-				for ( let i = 0, il = callbacks.length; i < il; i ++ ) {
-
-					const callback = callbacks[ i ];
-					if ( callback.onError ) callback.onError( err );
-
-				}
-
-				this.manager.itemError( url );
-
-			} )
-			.finally( () => {
-
-				this.manager.itemEnd( url );
-
-			} );
-
-		this.manager.itemStart( url );
-
-	}
-
-	setResponseType( value ) {
-
-		this.responseType = value;
-		return this;
-
-	}
-
-	setMimeType( value ) {
-
-		this.mimeType = value;
-		return this;
-
-	}
-
-}
-
-class AnimationLoader extends Loader {
-
-	constructor( manager ) {
-
-		super( manager );
-
-	}
-
-	load( url, onLoad, onProgress, onError ) {
-
-		const scope = this;
-
-		const loader = new FileLoader( this.manager );
-		loader.setPath( this.path );
-		loader.setRequestHeader( this.requestHeader );
-		loader.setWithCredentials( this.withCredentials );
-		loader.load( url, function ( text ) {
-
-			try {
-
-				onLoad( scope.parse( JSON.parse( text ) ) );
-
-			} catch ( e ) {
-
-				if ( onError ) {
-
-					onError( e );
-
-				} else {
-
-					console.error( e );
-
-				}
-
-				scope.manager.itemError( url );
-
-			}
-
-		}, onProgress, onError );
-
-	}
-
-	parse( json ) {
-
-		const animations = [];
-
-		for ( let i = 0; i < json.length; i ++ ) {
-
-			const clip = AnimationClip.parse( json[ i ] );
-
-			animations.push( clip );
-
-		}
-
-		return animations;
-
-	}
-
-}
-
-/**
- * Abstract Base class to block based textures loader (dds, pvr, ...)
- *
- * Sub classes have to implement the parse() method which will be used in load().
- */
-
-class CompressedTextureLoader extends Loader {
-
-	constructor( manager ) {
-
-		super( manager );
-
-	}
-
-	load( url, onLoad, onProgress, onError ) {
-
-		const scope = this;
-
-		const images = [];
-
-		const texture = new CompressedTexture();
-
-		const loader = new FileLoader( this.manager );
-		loader.setPath( this.path );
-		loader.setResponseType( 'arraybuffer' );
-		loader.setRequestHeader( this.requestHeader );
-		loader.setWithCredentials( scope.withCredentials );
-
-		let loaded = 0;
-
-		function loadTexture( i ) {
-
-			loader.load( url[ i ], function ( buffer ) {
-
-				const texDatas = scope.parse( buffer, true );
-
-				images[ i ] = {
-					width: texDatas.width,
-					height: texDatas.height,
-					format: texDatas.format,
-					mipmaps: texDatas.mipmaps
-				};
-
-				loaded += 1;
-
-				if ( loaded === 6 ) {
-
-					if ( texDatas.mipmapCount === 1 ) texture.minFilter = LinearFilter;
-
-					texture.image = images;
-					texture.format = texDatas.format;
-					texture.needsUpdate = true;
-
-					if ( onLoad ) onLoad( texture );
-
-				}
-
-			}, onProgress, onError );
-
-		}
-
-		if ( Array.isArray( url ) ) {
-
-			for ( let i = 0, il = url.length; i < il; ++ i ) {
-
-				loadTexture( i );
-
-			}
-
-		} else {
-
-			// compressed cubemap texture stored in a single DDS file
-
-			loader.load( url, function ( buffer ) {
-
-				const texDatas = scope.parse( buffer, true );
-
-				if ( texDatas.isCubemap ) {
-
-					const faces = texDatas.mipmaps.length / texDatas.mipmapCount;
-
-					for ( let f = 0; f < faces; f ++ ) {
-
-						images[ f ] = { mipmaps: [] };
-
-						for ( let i = 0; i < texDatas.mipmapCount; i ++ ) {
-
-							images[ f ].mipmaps.push( texDatas.mipmaps[ f * texDatas.mipmapCount + i ] );
-							images[ f ].format = texDatas.format;
-							images[ f ].width = texDatas.width;
-							images[ f ].height = texDatas.height;
-
-						}
-
-					}
-
-					texture.image = images;
-
-				} else {
-
-					texture.image.width = texDatas.width;
-					texture.image.height = texDatas.height;
-					texture.mipmaps = texDatas.mipmaps;
-
-				}
-
-				if ( texDatas.mipmapCount === 1 ) {
-
-					texture.minFilter = LinearFilter;
-
-				}
-
-				texture.format = texDatas.format;
-				texture.needsUpdate = true;
-
-				if ( onLoad ) onLoad( texture );
-
-			}, onProgress, onError );
-
-		}
-
-		return texture;
-
-	}
-
-}
-
-class ImageLoader extends Loader {
-
-	constructor( manager ) {
-
-		super( manager );
-
-	}
-
-	load( url, onLoad, onProgress, onError ) {
-
-		if ( this.path !== undefined ) url = this.path + url;
-
-		url = this.manager.resolveURL( url );
-
-		const scope = this;
-
-		const cached = Cache.get( url );
-
-		if ( cached !== undefined ) {
-
-			scope.manager.itemStart( url );
-
-			setTimeout( function () {
-
-				if ( onLoad ) onLoad( cached );
-
-				scope.manager.itemEnd( url );
-
-			}, 0 );
-
-			return cached;
-
-		}
-
-		const image = createElementNS( 'img' );
-
-		function onImageLoad() {
-
-			removeEventListeners();
-
-			Cache.add( url, this );
-
-			if ( onLoad ) onLoad( this );
-
-			scope.manager.itemEnd( url );
-
-		}
-
-		function onImageError( event ) {
-
-			removeEventListeners();
-
-			if ( onError ) onError( event );
-
-			scope.manager.itemError( url );
-			scope.manager.itemEnd( url );
-
-		}
-
-		function removeEventListeners() {
-
-			image.removeEventListener( 'load', onImageLoad, false );
-			image.removeEventListener( 'error', onImageError, false );
-
-		}
-
-		image.addEventListener( 'load', onImageLoad, false );
-		image.addEventListener( 'error', onImageError, false );
-
-		if ( url.slice( 0, 5 ) !== 'data:' ) {
-
-			if ( this.crossOrigin !== undefined ) image.crossOrigin = this.crossOrigin;
-
-		}
-
-		scope.manager.itemStart( url );
-
-		image.src = url;
-
-		return image;
-
-	}
-
-}
-
-class CubeTextureLoader extends Loader {
-
-	constructor( manager ) {
-
-		super( manager );
-
-	}
-
-	load( urls, onLoad, onProgress, onError ) {
-
-		const texture = new CubeTexture();
-
-		const loader = new ImageLoader( this.manager );
-		loader.setCrossOrigin( this.crossOrigin );
-		loader.setPath( this.path );
-
-		let loaded = 0;
-
-		function loadTexture( i ) {
-
-			loader.load( urls[ i ], function ( image ) {
-
-				texture.images[ i ] = image;
-
-				loaded ++;
-
-				if ( loaded === 6 ) {
-
-					texture.needsUpdate = true;
-
-					if ( onLoad ) onLoad( texture );
-
-				}
-
-			}, undefined, onError );
-
-		}
-
-		for ( let i = 0; i < urls.length; ++ i ) {
-
-			loadTexture( i );
-
-		}
-
-		return texture;
-
-	}
-
-}
-
-/**
- * Abstract Base class to load generic binary textures formats (rgbe, hdr, ...)
- *
- * Sub classes have to implement the parse() method which will be used in load().
- */
-
-class DataTextureLoader extends Loader {
-
-	constructor( manager ) {
-
-		super( manager );
-
-	}
-
-	load( url, onLoad, onProgress, onError ) {
-
-		const scope = this;
-
-		const texture = new DataTexture();
-
-		const loader = new FileLoader( this.manager );
-		loader.setResponseType( 'arraybuffer' );
-		loader.setRequestHeader( this.requestHeader );
-		loader.setPath( this.path );
-		loader.setWithCredentials( scope.withCredentials );
-		loader.load( url, function ( buffer ) {
-
-			const texData = scope.parse( buffer );
-
-			if ( ! texData ) return;
-
-			if ( texData.image !== undefined ) {
-
-				texture.image = texData.image;
-
-			} else if ( texData.data !== undefined ) {
-
-				texture.image.width = texData.width;
-				texture.image.height = texData.height;
-				texture.image.data = texData.data;
-
-			}
-
-			texture.wrapS = texData.wrapS !== undefined ? texData.wrapS : ClampToEdgeWrapping;
-			texture.wrapT = texData.wrapT !== undefined ? texData.wrapT : ClampToEdgeWrapping;
-
-			texture.magFilter = texData.magFilter !== undefined ? texData.magFilter : LinearFilter;
-			texture.minFilter = texData.minFilter !== undefined ? texData.minFilter : LinearFilter;
-
-			texture.anisotropy = texData.anisotropy !== undefined ? texData.anisotropy : 1;
-
-			if ( texData.colorSpace !== undefined ) {
-
-				texture.colorSpace = texData.colorSpace;
-
-			} else if ( texData.encoding !== undefined ) { // @deprecated, r152
-
-				texture.encoding = texData.encoding;
-
-			}
-
-			if ( texData.flipY !== undefined ) {
-
-				texture.flipY = texData.flipY;
-
-			}
-
-			if ( texData.format !== undefined ) {
-
-				texture.format = texData.format;
-
-			}
-
-			if ( texData.type !== undefined ) {
-
-				texture.type = texData.type;
-
-			}
-
-			if ( texData.mipmaps !== undefined ) {
-
-				texture.mipmaps = texData.mipmaps;
-				texture.minFilter = LinearMipmapLinearFilter; // presumably...
-
-			}
-
-			if ( texData.mipmapCount === 1 ) {
-
-				texture.minFilter = LinearFilter;
-
-			}
-
-			if ( texData.generateMipmaps !== undefined ) {
-
-				texture.generateMipmaps = texData.generateMipmaps;
-
-			}
-
-			texture.needsUpdate = true;
-
-			if ( onLoad ) onLoad( texture, texData );
-
-		}, onProgress, onError );
-
-
-		return texture;
-
-	}
-
-}
-
-class TextureLoader extends Loader {
-
-	constructor( manager ) {
-
-		super( manager );
-
-	}
-
-	load( url, onLoad, onProgress, onError ) {
-
-		const texture = new Texture();
-
-		const loader = new ImageLoader( this.manager );
-		loader.setCrossOrigin( this.crossOrigin );
-		loader.setPath( this.path );
-
-		loader.load( url, function ( image ) {
-
-			texture.image = image;
-			texture.needsUpdate = true;
-
-			if ( onLoad !== undefined ) {
-
-				onLoad( texture );
-
-			}
-
-		}, onProgress, onError );
-
-		return texture;
-
-	}
-
-}
-
-class Light extends Object3D {
-
-	constructor( color, intensity = 1 ) {
-
-		super();
-
-		this.isLight = true;
-
-		this.type = 'Light';
-
-		this.color = new Color( color );
-		this.intensity = intensity;
-
-	}
-
-	dispose() {
-
-		// Empty here in base class; some subclasses override.
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		this.color.copy( source.color );
-		this.intensity = source.intensity;
-
-		return this;
-
-	}
-
-	toJSON( meta ) {
-
-		const data = super.toJSON( meta );
-
-		data.object.color = this.color.getHex();
-		data.object.intensity = this.intensity;
-
-		if ( this.groundColor !== undefined ) data.object.groundColor = this.groundColor.getHex();
-
-		if ( this.distance !== undefined ) data.object.distance = this.distance;
-		if ( this.angle !== undefined ) data.object.angle = this.angle;
-		if ( this.decay !== undefined ) data.object.decay = this.decay;
-		if ( this.penumbra !== undefined ) data.object.penumbra = this.penumbra;
-
-		if ( this.shadow !== undefined ) data.object.shadow = this.shadow.toJSON();
-
-		return data;
-
-	}
-
-}
-
-class HemisphereLight extends Light {
-
-	constructor( skyColor, groundColor, intensity ) {
-
-		super( skyColor, intensity );
-
-		this.isHemisphereLight = true;
-
-		this.type = 'HemisphereLight';
-
-		this.position.copy( Object3D.DEFAULT_UP );
-		this.updateMatrix();
-
-		this.groundColor = new Color( groundColor );
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		this.groundColor.copy( source.groundColor );
-
-		return this;
-
-	}
-
-}
-
-const _projScreenMatrix$1 = /*@__PURE__*/ new Matrix4();
-const _lightPositionWorld$1 = /*@__PURE__*/ new Vector3();
-const _lookTarget$1 = /*@__PURE__*/ new Vector3();
-
-class LightShadow {
-
-	constructor( camera ) {
-
-		this.camera = camera;
-
-		this.bias = 0;
-		this.normalBias = 0;
-		this.radius = 1;
-		this.blurSamples = 8;
-
-		this.mapSize = new Vector2( 512, 512 );
-
-		this.map = null;
-		this.mapPass = null;
-		this.matrix = new Matrix4();
-
-		this.autoUpdate = true;
-		this.needsUpdate = false;
-
-		this._frustum = new Frustum();
-		this._frameExtents = new Vector2( 1, 1 );
-
-		this._viewportCount = 1;
-
-		this._viewports = [
-
-			new Vector4( 0, 0, 1, 1 )
-
-		];
-
-	}
-
-	getViewportCount() {
-
-		return this._viewportCount;
-
-	}
-
-	getFrustum() {
-
-		return this._frustum;
-
-	}
-
-	updateMatrices( light ) {
-
-		const shadowCamera = this.camera;
-		const shadowMatrix = this.matrix;
-
-		_lightPositionWorld$1.setFromMatrixPosition( light.matrixWorld );
-		shadowCamera.position.copy( _lightPositionWorld$1 );
-
-		_lookTarget$1.setFromMatrixPosition( light.target.matrixWorld );
-		shadowCamera.lookAt( _lookTarget$1 );
-		shadowCamera.updateMatrixWorld();
-
-		_projScreenMatrix$1.multiplyMatrices( shadowCamera.projectionMatrix, shadowCamera.matrixWorldInverse );
-		this._frustum.setFromProjectionMatrix( _projScreenMatrix$1 );
-
-		shadowMatrix.set(
-			0.5, 0.0, 0.0, 0.5,
-			0.0, 0.5, 0.0, 0.5,
-			0.0, 0.0, 0.5, 0.5,
-			0.0, 0.0, 0.0, 1.0
-		);
-
-		shadowMatrix.multiply( _projScreenMatrix$1 );
-
-	}
-
-	getViewport( viewportIndex ) {
-
-		return this._viewports[ viewportIndex ];
-
-	}
-
-	getFrameExtents() {
-
-		return this._frameExtents;
-
-	}
-
-	dispose() {
-
-		if ( this.map ) {
-
-			this.map.dispose();
-
-		}
-
-		if ( this.mapPass ) {
-
-			this.mapPass.dispose();
-
-		}
-
-	}
-
-	copy( source ) {
-
-		this.camera = source.camera.clone();
-
-		this.bias = source.bias;
-		this.radius = source.radius;
-
-		this.mapSize.copy( source.mapSize );
-
-		return this;
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-	toJSON() {
-
-		const object = {};
-
-		if ( this.bias !== 0 ) object.bias = this.bias;
-		if ( this.normalBias !== 0 ) object.normalBias = this.normalBias;
-		if ( this.radius !== 1 ) object.radius = this.radius;
-		if ( this.mapSize.x !== 512 || this.mapSize.y !== 512 ) object.mapSize = this.mapSize.toArray();
-
-		object.camera = this.camera.toJSON( false ).object;
-		delete object.camera.matrix;
-
-		return object;
-
-	}
-
-}
-
-class SpotLightShadow extends LightShadow {
-
-	constructor() {
-
-		super( new PerspectiveCamera( 50, 1, 0.5, 500 ) );
-
-		this.isSpotLightShadow = true;
-
-		this.focus = 1;
-
-	}
-
-	updateMatrices( light ) {
-
-		const camera = this.camera;
-
-		const fov = RAD2DEG * 2 * light.angle * this.focus;
-		const aspect = this.mapSize.width / this.mapSize.height;
-		const far = light.distance || camera.far;
-
-		if ( fov !== camera.fov || aspect !== camera.aspect || far !== camera.far ) {
-
-			camera.fov = fov;
-			camera.aspect = aspect;
-			camera.far = far;
-			camera.updateProjectionMatrix();
-
-		}
-
-		super.updateMatrices( light );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.focus = source.focus;
-
-		return this;
-
-	}
-
-}
-
-class SpotLight extends Light {
-
-	constructor( color, intensity, distance = 0, angle = Math.PI / 3, penumbra = 0, decay = 2 ) {
-
-		super( color, intensity );
-
-		this.isSpotLight = true;
-
-		this.type = 'SpotLight';
-
-		this.position.copy( Object3D.DEFAULT_UP );
-		this.updateMatrix();
-
-		this.target = new Object3D();
-
-		this.distance = distance;
-		this.angle = angle;
-		this.penumbra = penumbra;
-		this.decay = decay;
-
-		this.map = null;
-
-		this.shadow = new SpotLightShadow();
-
-	}
-
-	get power() {
-
-		// compute the light's luminous power (in lumens) from its intensity (in candela)
-		// by convention for a spotlight, luminous power (lm) = π * luminous intensity (cd)
-		return this.intensity * Math.PI;
-
-	}
-
-	set power( power ) {
-
-		// set the light's intensity (in candela) from the desired luminous power (in lumens)
-		this.intensity = power / Math.PI;
-
-	}
-
-	dispose() {
-
-		this.shadow.dispose();
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		this.distance = source.distance;
-		this.angle = source.angle;
-		this.penumbra = source.penumbra;
-		this.decay = source.decay;
-
-		this.target = source.target.clone();
-
-		this.shadow = source.shadow.clone();
-
-		return this;
-
-	}
-
-}
-
-const _projScreenMatrix = /*@__PURE__*/ new Matrix4();
-const _lightPositionWorld = /*@__PURE__*/ new Vector3();
-const _lookTarget = /*@__PURE__*/ new Vector3();
-
-class PointLightShadow extends LightShadow {
-
-	constructor() {
-
-		super( new PerspectiveCamera( 90, 1, 0.5, 500 ) );
-
-		this.isPointLightShadow = true;
-
-		this._frameExtents = new Vector2( 4, 2 );
-
-		this._viewportCount = 6;
-
-		this._viewports = [
-			// These viewports map a cube-map onto a 2D texture with the
-			// following orientation:
-			//
-			//  xzXZ
-			//   y Y
-			//
-			// X - Positive x direction
-			// x - Negative x direction
-			// Y - Positive y direction
-			// y - Negative y direction
-			// Z - Positive z direction
-			// z - Negative z direction
-
-			// positive X
-			new Vector4( 2, 1, 1, 1 ),
-			// negative X
-			new Vector4( 0, 1, 1, 1 ),
-			// positive Z
-			new Vector4( 3, 1, 1, 1 ),
-			// negative Z
-			new Vector4( 1, 1, 1, 1 ),
-			// positive Y
-			new Vector4( 3, 0, 1, 1 ),
-			// negative Y
-			new Vector4( 1, 0, 1, 1 )
-		];
-
-		this._cubeDirections = [
-			new Vector3( 1, 0, 0 ), new Vector3( - 1, 0, 0 ), new Vector3( 0, 0, 1 ),
-			new Vector3( 0, 0, - 1 ), new Vector3( 0, 1, 0 ), new Vector3( 0, - 1, 0 )
-		];
-
-		this._cubeUps = [
-			new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ), new Vector3( 0, 1, 0 ),
-			new Vector3( 0, 1, 0 ), new Vector3( 0, 0, 1 ),	new Vector3( 0, 0, - 1 )
-		];
-
-	}
-
-	updateMatrices( light, viewportIndex = 0 ) {
-
-		const camera = this.camera;
-		const shadowMatrix = this.matrix;
-
-		const far = light.distance || camera.far;
-
-		if ( far !== camera.far ) {
-
-			camera.far = far;
-			camera.updateProjectionMatrix();
-
-		}
-
-		_lightPositionWorld.setFromMatrixPosition( light.matrixWorld );
-		camera.position.copy( _lightPositionWorld );
-
-		_lookTarget.copy( camera.position );
-		_lookTarget.add( this._cubeDirections[ viewportIndex ] );
-		camera.up.copy( this._cubeUps[ viewportIndex ] );
-		camera.lookAt( _lookTarget );
-		camera.updateMatrixWorld();
-
-		shadowMatrix.makeTranslation( - _lightPositionWorld.x, - _lightPositionWorld.y, - _lightPositionWorld.z );
-
-		_projScreenMatrix.multiplyMatrices( camera.projectionMatrix, camera.matrixWorldInverse );
-		this._frustum.setFromProjectionMatrix( _projScreenMatrix );
-
-	}
-
-}
-
-class PointLight extends Light {
-
-	constructor( color, intensity, distance = 0, decay = 2 ) {
-
-		super( color, intensity );
-
-		this.isPointLight = true;
-
-		this.type = 'PointLight';
-
-		this.distance = distance;
-		this.decay = decay;
-
-		this.shadow = new PointLightShadow();
-
-	}
-
-	get power() {
-
-		// compute the light's luminous power (in lumens) from its intensity (in candela)
-		// for an isotropic light source, luminous power (lm) = 4 π luminous intensity (cd)
-		return this.intensity * 4 * Math.PI;
-
-	}
-
-	set power( power ) {
-
-		// set the light's intensity (in candela) from the desired luminous power (in lumens)
-		this.intensity = power / ( 4 * Math.PI );
-
-	}
-
-	dispose() {
-
-		this.shadow.dispose();
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		this.distance = source.distance;
-		this.decay = source.decay;
-
-		this.shadow = source.shadow.clone();
-
-		return this;
-
-	}
-
-}
-
-class DirectionalLightShadow extends LightShadow {
-
-	constructor() {
-
-		super( new OrthographicCamera( - 5, 5, 5, - 5, 0.5, 500 ) );
-
-		this.isDirectionalLightShadow = true;
-
-	}
-
-}
-
-class DirectionalLight extends Light {
-
-	constructor( color, intensity ) {
-
-		super( color, intensity );
-
-		this.isDirectionalLight = true;
-
-		this.type = 'DirectionalLight';
-
-		this.position.copy( Object3D.DEFAULT_UP );
-		this.updateMatrix();
-
-		this.target = new Object3D();
-
-		this.shadow = new DirectionalLightShadow();
-
-	}
-
-	dispose() {
-
-		this.shadow.dispose();
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.target = source.target.clone();
-		this.shadow = source.shadow.clone();
-
-		return this;
-
-	}
-
-}
-
-class AmbientLight extends Light {
-
-	constructor( color, intensity ) {
-
-		super( color, intensity );
-
-		this.isAmbientLight = true;
-
-		this.type = 'AmbientLight';
-
-	}
-
-}
-
-class RectAreaLight extends Light {
-
-	constructor( color, intensity, width = 10, height = 10 ) {
-
-		super( color, intensity );
-
-		this.isRectAreaLight = true;
-
-		this.type = 'RectAreaLight';
-
-		this.width = width;
-		this.height = height;
-
-	}
-
-	get power() {
-
-		// compute the light's luminous power (in lumens) from its intensity (in nits)
-		return this.intensity * this.width * this.height * Math.PI;
-
-	}
-
-	set power( power ) {
-
-		// set the light's intensity (in nits) from the desired luminous power (in lumens)
-		this.intensity = power / ( this.width * this.height * Math.PI );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.width = source.width;
-		this.height = source.height;
-
-		return this;
-
-	}
-
-	toJSON( meta ) {
-
-		const data = super.toJSON( meta );
-
-		data.object.width = this.width;
-		data.object.height = this.height;
-
-		return data;
-
-	}
-
-}
-
-/**
- * Primary reference:
- *   https://graphics.stanford.edu/papers/envmap/envmap.pdf
- *
- * Secondary reference:
- *   https://www.ppsloan.org/publications/StupidSH36.pdf
- */
-
-// 3-band SH defined by 9 coefficients
-
-class SphericalHarmonics3 {
-
-	constructor() {
-
-		this.isSphericalHarmonics3 = true;
-
-		this.coefficients = [];
-
-		for ( let i = 0; i < 9; i ++ ) {
-
-			this.coefficients.push( new Vector3() );
-
-		}
-
-	}
-
-	set( coefficients ) {
-
-		for ( let i = 0; i < 9; i ++ ) {
-
-			this.coefficients[ i ].copy( coefficients[ i ] );
-
-		}
-
-		return this;
-
-	}
-
-	zero() {
-
-		for ( let i = 0; i < 9; i ++ ) {
-
-			this.coefficients[ i ].set( 0, 0, 0 );
-
-		}
-
-		return this;
-
-	}
-
-	// get the radiance in the direction of the normal
-	// target is a Vector3
-	getAt( normal, target ) {
-
-		// normal is assumed to be unit length
-
-		const x = normal.x, y = normal.y, z = normal.z;
-
-		const coeff = this.coefficients;
-
-		// band 0
-		target.copy( coeff[ 0 ] ).multiplyScalar( 0.282095 );
-
-		// band 1
-		target.addScaledVector( coeff[ 1 ], 0.488603 * y );
-		target.addScaledVector( coeff[ 2 ], 0.488603 * z );
-		target.addScaledVector( coeff[ 3 ], 0.488603 * x );
-
-		// band 2
-		target.addScaledVector( coeff[ 4 ], 1.092548 * ( x * y ) );
-		target.addScaledVector( coeff[ 5 ], 1.092548 * ( y * z ) );
-		target.addScaledVector( coeff[ 6 ], 0.315392 * ( 3.0 * z * z - 1.0 ) );
-		target.addScaledVector( coeff[ 7 ], 1.092548 * ( x * z ) );
-		target.addScaledVector( coeff[ 8 ], 0.546274 * ( x * x - y * y ) );
-
-		return target;
-
-	}
-
-	// get the irradiance (radiance convolved with cosine lobe) in the direction of the normal
-	// target is a Vector3
-	// https://graphics.stanford.edu/papers/envmap/envmap.pdf
-	getIrradianceAt( normal, target ) {
-
-		// normal is assumed to be unit length
-
-		const x = normal.x, y = normal.y, z = normal.z;
-
-		const coeff = this.coefficients;
-
-		// band 0
-		target.copy( coeff[ 0 ] ).multiplyScalar( 0.886227 ); // π * 0.282095
-
-		// band 1
-		target.addScaledVector( coeff[ 1 ], 2.0 * 0.511664 * y ); // ( 2 * π / 3 ) * 0.488603
-		target.addScaledVector( coeff[ 2 ], 2.0 * 0.511664 * z );
-		target.addScaledVector( coeff[ 3 ], 2.0 * 0.511664 * x );
-
-		// band 2
-		target.addScaledVector( coeff[ 4 ], 2.0 * 0.429043 * x * y ); // ( π / 4 ) * 1.092548
-		target.addScaledVector( coeff[ 5 ], 2.0 * 0.429043 * y * z );
-		target.addScaledVector( coeff[ 6 ], 0.743125 * z * z - 0.247708 ); // ( π / 4 ) * 0.315392 * 3
-		target.addScaledVector( coeff[ 7 ], 2.0 * 0.429043 * x * z );
-		target.addScaledVector( coeff[ 8 ], 0.429043 * ( x * x - y * y ) ); // ( π / 4 ) * 0.546274
-
-		return target;
-
-	}
-
-	add( sh ) {
-
-		for ( let i = 0; i < 9; i ++ ) {
-
-			this.coefficients[ i ].add( sh.coefficients[ i ] );
-
-		}
-
-		return this;
-
-	}
-
-	addScaledSH( sh, s ) {
-
-		for ( let i = 0; i < 9; i ++ ) {
-
-			this.coefficients[ i ].addScaledVector( sh.coefficients[ i ], s );
-
-		}
-
-		return this;
-
-	}
-
-	scale( s ) {
-
-		for ( let i = 0; i < 9; i ++ ) {
-
-			this.coefficients[ i ].multiplyScalar( s );
-
-		}
-
-		return this;
-
-	}
-
-	lerp( sh, alpha ) {
-
-		for ( let i = 0; i < 9; i ++ ) {
-
-			this.coefficients[ i ].lerp( sh.coefficients[ i ], alpha );
-
-		}
-
-		return this;
-
-	}
-
-	equals( sh ) {
-
-		for ( let i = 0; i < 9; i ++ ) {
-
-			if ( ! this.coefficients[ i ].equals( sh.coefficients[ i ] ) ) {
-
-				return false;
-
-			}
-
-		}
-
-		return true;
-
-	}
-
-	copy( sh ) {
-
-		return this.set( sh.coefficients );
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-	fromArray( array, offset = 0 ) {
-
-		const coefficients = this.coefficients;
-
-		for ( let i = 0; i < 9; i ++ ) {
-
-			coefficients[ i ].fromArray( array, offset + ( i * 3 ) );
-
-		}
-
-		return this;
-
-	}
-
-	toArray( array = [], offset = 0 ) {
-
-		const coefficients = this.coefficients;
-
-		for ( let i = 0; i < 9; i ++ ) {
-
-			coefficients[ i ].toArray( array, offset + ( i * 3 ) );
-
-		}
-
-		return array;
-
-	}
-
-	// evaluate the basis functions
-	// shBasis is an Array[ 9 ]
-	static getBasisAt( normal, shBasis ) {
-
-		// normal is assumed to be unit length
-
-		const x = normal.x, y = normal.y, z = normal.z;
-
-		// band 0
-		shBasis[ 0 ] = 0.282095;
-
-		// band 1
-		shBasis[ 1 ] = 0.488603 * y;
-		shBasis[ 2 ] = 0.488603 * z;
-		shBasis[ 3 ] = 0.488603 * x;
-
-		// band 2
-		shBasis[ 4 ] = 1.092548 * x * y;
-		shBasis[ 5 ] = 1.092548 * y * z;
-		shBasis[ 6 ] = 0.315392 * ( 3 * z * z - 1 );
-		shBasis[ 7 ] = 1.092548 * x * z;
-		shBasis[ 8 ] = 0.546274 * ( x * x - y * y );
-
-	}
-
-}
-
-class LightProbe extends Light {
-
-	constructor( sh = new SphericalHarmonics3(), intensity = 1 ) {
-
-		super( undefined, intensity );
-
-		this.isLightProbe = true;
-
-		this.sh = sh;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.sh.copy( source.sh );
-
-		return this;
-
-	}
-
-	fromJSON( json ) {
-
-		this.intensity = json.intensity; // TODO: Move this bit to Light.fromJSON();
-		this.sh.fromArray( json.sh );
-
-		return this;
-
-	}
-
-	toJSON( meta ) {
-
-		const data = super.toJSON( meta );
-
-		data.object.sh = this.sh.toArray();
-
-		return data;
-
-	}
-
-}
-
-class MaterialLoader extends Loader {
-
-	constructor( manager ) {
-
-		super( manager );
-		this.textures = {};
-
-	}
-
-	load( url, onLoad, onProgress, onError ) {
-
-		const scope = this;
-
-		const loader = new FileLoader( scope.manager );
-		loader.setPath( scope.path );
-		loader.setRequestHeader( scope.requestHeader );
-		loader.setWithCredentials( scope.withCredentials );
-		loader.load( url, function ( text ) {
-
-			try {
-
-				onLoad( scope.parse( JSON.parse( text ) ) );
-
-			} catch ( e ) {
-
-				if ( onError ) {
-
-					onError( e );
-
-				} else {
-
-					console.error( e );
-
-				}
-
-				scope.manager.itemError( url );
-
-			}
-
-		}, onProgress, onError );
-
-	}
-
-	parse( json ) {
-
-		const textures = this.textures;
-
-		function getTexture( name ) {
-
-			if ( textures[ name ] === undefined ) {
-
-				console.warn( 'THREE.MaterialLoader: Undefined texture', name );
-
-			}
-
-			return textures[ name ];
-
-		}
-
-		const material = MaterialLoader.createMaterialFromType( json.type );
-
-		if ( json.uuid !== undefined ) material.uuid = json.uuid;
-		if ( json.name !== undefined ) material.name = json.name;
-		if ( json.color !== undefined && material.color !== undefined ) material.color.setHex( json.color );
-		if ( json.roughness !== undefined ) material.roughness = json.roughness;
-		if ( json.metalness !== undefined ) material.metalness = json.metalness;
-		if ( json.sheen !== undefined ) material.sheen = json.sheen;
-		if ( json.sheenColor !== undefined ) material.sheenColor = new Color().setHex( json.sheenColor );
-		if ( json.sheenRoughness !== undefined ) material.sheenRoughness = json.sheenRoughness;
-		if ( json.emissive !== undefined && material.emissive !== undefined ) material.emissive.setHex( json.emissive );
-		if ( json.specular !== undefined && material.specular !== undefined ) material.specular.setHex( json.specular );
-		if ( json.specularIntensity !== undefined ) material.specularIntensity = json.specularIntensity;
-		if ( json.specularColor !== undefined && material.specularColor !== undefined ) material.specularColor.setHex( json.specularColor );
-		if ( json.shininess !== undefined ) material.shininess = json.shininess;
-		if ( json.clearcoat !== undefined ) material.clearcoat = json.clearcoat;
-		if ( json.clearcoatRoughness !== undefined ) material.clearcoatRoughness = json.clearcoatRoughness;
-		if ( json.iridescence !== undefined ) material.iridescence = json.iridescence;
-		if ( json.iridescenceIOR !== undefined ) material.iridescenceIOR = json.iridescenceIOR;
-		if ( json.iridescenceThicknessRange !== undefined ) material.iridescenceThicknessRange = json.iridescenceThicknessRange;
-		if ( json.transmission !== undefined ) material.transmission = json.transmission;
-		if ( json.thickness !== undefined ) material.thickness = json.thickness;
-		if ( json.attenuationDistance !== undefined ) material.attenuationDistance = json.attenuationDistance;
-		if ( json.attenuationColor !== undefined && material.attenuationColor !== undefined ) material.attenuationColor.setHex( json.attenuationColor );
-		if ( json.fog !== undefined ) material.fog = json.fog;
-		if ( json.flatShading !== undefined ) material.flatShading = json.flatShading;
-		if ( json.blending !== undefined ) material.blending = json.blending;
-		if ( json.combine !== undefined ) material.combine = json.combine;
-		if ( json.side !== undefined ) material.side = json.side;
-		if ( json.shadowSide !== undefined ) material.shadowSide = json.shadowSide;
-		if ( json.opacity !== undefined ) material.opacity = json.opacity;
-		if ( json.transparent !== undefined ) material.transparent = json.transparent;
-		if ( json.alphaTest !== undefined ) material.alphaTest = json.alphaTest;
-		if ( json.depthTest !== undefined ) material.depthTest = json.depthTest;
-		if ( json.depthWrite !== undefined ) material.depthWrite = json.depthWrite;
-		if ( json.colorWrite !== undefined ) material.colorWrite = json.colorWrite;
-
-		if ( json.stencilWrite !== undefined ) material.stencilWrite = json.stencilWrite;
-		if ( json.stencilWriteMask !== undefined ) material.stencilWriteMask = json.stencilWriteMask;
-		if ( json.stencilFunc !== undefined ) material.stencilFunc = json.stencilFunc;
-		if ( json.stencilRef !== undefined ) material.stencilRef = json.stencilRef;
-		if ( json.stencilFuncMask !== undefined ) material.stencilFuncMask = json.stencilFuncMask;
-		if ( json.stencilFail !== undefined ) material.stencilFail = json.stencilFail;
-		if ( json.stencilZFail !== undefined ) material.stencilZFail = json.stencilZFail;
-		if ( json.stencilZPass !== undefined ) material.stencilZPass = json.stencilZPass;
-
-		if ( json.wireframe !== undefined ) material.wireframe = json.wireframe;
-		if ( json.wireframeLinewidth !== undefined ) material.wireframeLinewidth = json.wireframeLinewidth;
-		if ( json.wireframeLinecap !== undefined ) material.wireframeLinecap = json.wireframeLinecap;
-		if ( json.wireframeLinejoin !== undefined ) material.wireframeLinejoin = json.wireframeLinejoin;
-
-		if ( json.rotation !== undefined ) material.rotation = json.rotation;
-
-		if ( json.linewidth !== 1 ) material.linewidth = json.linewidth;
-		if ( json.dashSize !== undefined ) material.dashSize = json.dashSize;
-		if ( json.gapSize !== undefined ) material.gapSize = json.gapSize;
-		if ( json.scale !== undefined ) material.scale = json.scale;
-
-		if ( json.polygonOffset !== undefined ) material.polygonOffset = json.polygonOffset;
-		if ( json.polygonOffsetFactor !== undefined ) material.polygonOffsetFactor = json.polygonOffsetFactor;
-		if ( json.polygonOffsetUnits !== undefined ) material.polygonOffsetUnits = json.polygonOffsetUnits;
-
-		if ( json.dithering !== undefined ) material.dithering = json.dithering;
-
-		if ( json.alphaToCoverage !== undefined ) material.alphaToCoverage = json.alphaToCoverage;
-		if ( json.premultipliedAlpha !== undefined ) material.premultipliedAlpha = json.premultipliedAlpha;
-		if ( json.forceSinglePass !== undefined ) material.forceSinglePass = json.forceSinglePass;
-
-		if ( json.visible !== undefined ) material.visible = json.visible;
-
-		if ( json.toneMapped !== undefined ) material.toneMapped = json.toneMapped;
-
-		if ( json.userData !== undefined ) material.userData = json.userData;
-
-		if ( json.vertexColors !== undefined ) {
-
-			if ( typeof json.vertexColors === 'number' ) {
-
-				material.vertexColors = ( json.vertexColors > 0 ) ? true : false;
-
-			} else {
-
-				material.vertexColors = json.vertexColors;
-
-			}
-
-		}
-
-		// Shader Material
-
-		if ( json.uniforms !== undefined ) {
-
-			for ( const name in json.uniforms ) {
-
-				const uniform = json.uniforms[ name ];
-
-				material.uniforms[ name ] = {};
-
-				switch ( uniform.type ) {
-
-					case 't':
-						material.uniforms[ name ].value = getTexture( uniform.value );
-						break;
-
-					case 'c':
-						material.uniforms[ name ].value = new Color().setHex( uniform.value );
-						break;
-
-					case 'v2':
-						material.uniforms[ name ].value = new Vector2().fromArray( uniform.value );
-						break;
-
-					case 'v3':
-						material.uniforms[ name ].value = new Vector3().fromArray( uniform.value );
-						break;
-
-					case 'v4':
-						material.uniforms[ name ].value = new Vector4().fromArray( uniform.value );
-						break;
-
-					case 'm3':
-						material.uniforms[ name ].value = new Matrix3().fromArray( uniform.value );
-						break;
-
-					case 'm4':
-						material.uniforms[ name ].value = new Matrix4().fromArray( uniform.value );
-						break;
-
-					default:
-						material.uniforms[ name ].value = uniform.value;
-
-				}
-
-			}
-
-		}
-
-		if ( json.defines !== undefined ) material.defines = json.defines;
-		if ( json.vertexShader !== undefined ) material.vertexShader = json.vertexShader;
-		if ( json.fragmentShader !== undefined ) material.fragmentShader = json.fragmentShader;
-		if ( json.glslVersion !== undefined ) material.glslVersion = json.glslVersion;
-
-		if ( json.extensions !== undefined ) {
-
-			for ( const key in json.extensions ) {
-
-				material.extensions[ key ] = json.extensions[ key ];
-
-			}
-
-		}
-
-		if ( json.lights !== undefined ) material.lights = json.lights;
-		if ( json.clipping !== undefined ) material.clipping = json.clipping;
-
-		// for PointsMaterial
-
-		if ( json.size !== undefined ) material.size = json.size;
-		if ( json.sizeAttenuation !== undefined ) material.sizeAttenuation = json.sizeAttenuation;
-
-		// maps
-
-		if ( json.map !== undefined ) material.map = getTexture( json.map );
-		if ( json.matcap !== undefined ) material.matcap = getTexture( json.matcap );
-
-		if ( json.alphaMap !== undefined ) material.alphaMap = getTexture( json.alphaMap );
-
-		if ( json.bumpMap !== undefined ) material.bumpMap = getTexture( json.bumpMap );
-		if ( json.bumpScale !== undefined ) material.bumpScale = json.bumpScale;
-
-		if ( json.normalMap !== undefined ) material.normalMap = getTexture( json.normalMap );
-		if ( json.normalMapType !== undefined ) material.normalMapType = json.normalMapType;
-		if ( json.normalScale !== undefined ) {
-
-			let normalScale = json.normalScale;
-
-			if ( Array.isArray( normalScale ) === false ) {
-
-				// Blender exporter used to export a scalar. See #7459
-
-				normalScale = [ normalScale, normalScale ];
-
-			}
-
-			material.normalScale = new Vector2().fromArray( normalScale );
-
-		}
-
-		if ( json.displacementMap !== undefined ) material.displacementMap = getTexture( json.displacementMap );
-		if ( json.displacementScale !== undefined ) material.displacementScale = json.displacementScale;
-		if ( json.displacementBias !== undefined ) material.displacementBias = json.displacementBias;
-
-		if ( json.roughnessMap !== undefined ) material.roughnessMap = getTexture( json.roughnessMap );
-		if ( json.metalnessMap !== undefined ) material.metalnessMap = getTexture( json.metalnessMap );
-
-		if ( json.emissiveMap !== undefined ) material.emissiveMap = getTexture( json.emissiveMap );
-		if ( json.emissiveIntensity !== undefined ) material.emissiveIntensity = json.emissiveIntensity;
-
-		if ( json.specularMap !== undefined ) material.specularMap = getTexture( json.specularMap );
-		if ( json.specularIntensityMap !== undefined ) material.specularIntensityMap = getTexture( json.specularIntensityMap );
-		if ( json.specularColorMap !== undefined ) material.specularColorMap = getTexture( json.specularColorMap );
-
-		if ( json.envMap !== undefined ) material.envMap = getTexture( json.envMap );
-		if ( json.envMapIntensity !== undefined ) material.envMapIntensity = json.envMapIntensity;
-
-		if ( json.reflectivity !== undefined ) material.reflectivity = json.reflectivity;
-		if ( json.refractionRatio !== undefined ) material.refractionRatio = json.refractionRatio;
-
-		if ( json.lightMap !== undefined ) material.lightMap = getTexture( json.lightMap );
-		if ( json.lightMapIntensity !== undefined ) material.lightMapIntensity = json.lightMapIntensity;
-
-		if ( json.aoMap !== undefined ) material.aoMap = getTexture( json.aoMap );
-		if ( json.aoMapIntensity !== undefined ) material.aoMapIntensity = json.aoMapIntensity;
-
-		if ( json.gradientMap !== undefined ) material.gradientMap = getTexture( json.gradientMap );
-
-		if ( json.clearcoatMap !== undefined ) material.clearcoatMap = getTexture( json.clearcoatMap );
-		if ( json.clearcoatRoughnessMap !== undefined ) material.clearcoatRoughnessMap = getTexture( json.clearcoatRoughnessMap );
-		if ( json.clearcoatNormalMap !== undefined ) material.clearcoatNormalMap = getTexture( json.clearcoatNormalMap );
-		if ( json.clearcoatNormalScale !== undefined ) material.clearcoatNormalScale = new Vector2().fromArray( json.clearcoatNormalScale );
-
-		if ( json.iridescenceMap !== undefined ) material.iridescenceMap = getTexture( json.iridescenceMap );
-		if ( json.iridescenceThicknessMap !== undefined ) material.iridescenceThicknessMap = getTexture( json.iridescenceThicknessMap );
-
-		if ( json.transmissionMap !== undefined ) material.transmissionMap = getTexture( json.transmissionMap );
-		if ( json.thicknessMap !== undefined ) material.thicknessMap = getTexture( json.thicknessMap );
-
-		if ( json.sheenColorMap !== undefined ) material.sheenColorMap = getTexture( json.sheenColorMap );
-		if ( json.sheenRoughnessMap !== undefined ) material.sheenRoughnessMap = getTexture( json.sheenRoughnessMap );
-
-		return material;
-
-	}
-
-	setTextures( value ) {
-
-		this.textures = value;
-		return this;
-
-	}
-
-	static createMaterialFromType( type ) {
-
-		const materialLib = {
-			ShadowMaterial,
-			SpriteMaterial,
-			RawShaderMaterial,
-			ShaderMaterial,
-			PointsMaterial,
-			MeshPhysicalMaterial,
-			MeshStandardMaterial,
-			MeshPhongMaterial,
-			MeshToonMaterial,
-			MeshNormalMaterial,
-			MeshLambertMaterial,
-			MeshDepthMaterial,
-			MeshDistanceMaterial,
-			MeshBasicMaterial,
-			MeshMatcapMaterial,
-			LineDashedMaterial,
-			LineBasicMaterial,
-			Material
-		};
-
-		return new materialLib[ type ]();
-
-	}
-
-}
-
-class LoaderUtils {
-
-	static decodeText( array ) {
-
-		if ( typeof TextDecoder !== 'undefined' ) {
-
-			return new TextDecoder().decode( array );
-
-		}
-
-		// Avoid the String.fromCharCode.apply(null, array) shortcut, which
-		// throws a "maximum call stack size exceeded" error for large arrays.
-
-		let s = '';
-
-		for ( let i = 0, il = array.length; i < il; i ++ ) {
-
-			// Implicitly assumes little-endian.
-			s += String.fromCharCode( array[ i ] );
-
-		}
-
-		try {
-
-			// merges multi-byte utf-8 characters.
-
-			return decodeURIComponent( escape( s ) );
-
-		} catch ( e ) { // see #16358
-
-			return s;
-
-		}
-
-	}
-
-	static extractUrlBase( url ) {
-
-		const index = url.lastIndexOf( '/' );
-
-		if ( index === - 1 ) return './';
-
-		return url.slice( 0, index + 1 );
-
-	}
-
-	static resolveURL( url, path ) {
-
-		// Invalid URL
-		if ( typeof url !== 'string' || url === '' ) return '';
-
-		// Host Relative URL
-		if ( /^https?:\/\//i.test( path ) && /^\//.test( url ) ) {
-
-			path = path.replace( /(^https?:\/\/[^\/]+).*/i, '$1' );
-
-		}
-
-		// Absolute URL http://,https://,//
-		if ( /^(https?:)?\/\//i.test( url ) ) return url;
-
-		// Data URI
-		if ( /^data:.*,.*$/i.test( url ) ) return url;
-
-		// Blob URL
-		if ( /^blob:.*$/i.test( url ) ) return url;
-
-		// Relative URL
-		return path + url;
-
-	}
-
-}
-
-class InstancedBufferGeometry extends BufferGeometry {
-
-	constructor() {
-
-		super();
-
-		this.isInstancedBufferGeometry = true;
-
-		this.type = 'InstancedBufferGeometry';
-		this.instanceCount = Infinity;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.instanceCount = source.instanceCount;
-
-		return this;
-
-	}
-
-	toJSON() {
-
-		const data = super.toJSON();
-
-		data.instanceCount = this.instanceCount;
-
-		data.isInstancedBufferGeometry = true;
-
-		return data;
-
-	}
-
-}
-
-class BufferGeometryLoader extends Loader {
-
-	constructor( manager ) {
-
-		super( manager );
-
-	}
-
-	load( url, onLoad, onProgress, onError ) {
-
-		const scope = this;
-
-		const loader = new FileLoader( scope.manager );
-		loader.setPath( scope.path );
-		loader.setRequestHeader( scope.requestHeader );
-		loader.setWithCredentials( scope.withCredentials );
-		loader.load( url, function ( text ) {
-
-			try {
-
-				onLoad( scope.parse( JSON.parse( text ) ) );
-
-			} catch ( e ) {
-
-				if ( onError ) {
-
-					onError( e );
-
-				} else {
-
-					console.error( e );
-
-				}
-
-				scope.manager.itemError( url );
-
-			}
-
-		}, onProgress, onError );
-
-	}
-
-	parse( json ) {
-
-		const interleavedBufferMap = {};
-		const arrayBufferMap = {};
-
-		function getInterleavedBuffer( json, uuid ) {
-
-			if ( interleavedBufferMap[ uuid ] !== undefined ) return interleavedBufferMap[ uuid ];
-
-			const interleavedBuffers = json.interleavedBuffers;
-			const interleavedBuffer = interleavedBuffers[ uuid ];
-
-			const buffer = getArrayBuffer( json, interleavedBuffer.buffer );
-
-			const array = getTypedArray( interleavedBuffer.type, buffer );
-			const ib = new InterleavedBuffer( array, interleavedBuffer.stride );
-			ib.uuid = interleavedBuffer.uuid;
-
-			interleavedBufferMap[ uuid ] = ib;
-
-			return ib;
-
-		}
-
-		function getArrayBuffer( json, uuid ) {
-
-			if ( arrayBufferMap[ uuid ] !== undefined ) return arrayBufferMap[ uuid ];
-
-			const arrayBuffers = json.arrayBuffers;
-			const arrayBuffer = arrayBuffers[ uuid ];
-
-			const ab = new Uint32Array( arrayBuffer ).buffer;
-
-			arrayBufferMap[ uuid ] = ab;
-
-			return ab;
-
-		}
-
-		const geometry = json.isInstancedBufferGeometry ? new InstancedBufferGeometry() : new BufferGeometry();
-
-		const index = json.data.index;
-
-		if ( index !== undefined ) {
-
-			const typedArray = getTypedArray( index.type, index.array );
-			geometry.setIndex( new BufferAttribute( typedArray, 1 ) );
-
-		}
-
-		const attributes = json.data.attributes;
-
-		for ( const key in attributes ) {
-
-			const attribute = attributes[ key ];
-			let bufferAttribute;
-
-			if ( attribute.isInterleavedBufferAttribute ) {
-
-				const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );
-				bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );
-
-			} else {
-
-				const typedArray = getTypedArray( attribute.type, attribute.array );
-				const bufferAttributeConstr = attribute.isInstancedBufferAttribute ? InstancedBufferAttribute : BufferAttribute;
-				bufferAttribute = new bufferAttributeConstr( typedArray, attribute.itemSize, attribute.normalized );
-
-			}
-
-			if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;
-			if ( attribute.usage !== undefined ) bufferAttribute.setUsage( attribute.usage );
-
-			if ( attribute.updateRange !== undefined ) {
-
-				bufferAttribute.updateRange.offset = attribute.updateRange.offset;
-				bufferAttribute.updateRange.count = attribute.updateRange.count;
-
-			}
-
-			geometry.setAttribute( key, bufferAttribute );
-
-		}
-
-		const morphAttributes = json.data.morphAttributes;
-
-		if ( morphAttributes ) {
-
-			for ( const key in morphAttributes ) {
-
-				const attributeArray = morphAttributes[ key ];
-
-				const array = [];
-
-				for ( let i = 0, il = attributeArray.length; i < il; i ++ ) {
-
-					const attribute = attributeArray[ i ];
-					let bufferAttribute;
-
-					if ( attribute.isInterleavedBufferAttribute ) {
-
-						const interleavedBuffer = getInterleavedBuffer( json.data, attribute.data );
-						bufferAttribute = new InterleavedBufferAttribute( interleavedBuffer, attribute.itemSize, attribute.offset, attribute.normalized );
-
-					} else {
-
-						const typedArray = getTypedArray( attribute.type, attribute.array );
-						bufferAttribute = new BufferAttribute( typedArray, attribute.itemSize, attribute.normalized );
-
-					}
-
-					if ( attribute.name !== undefined ) bufferAttribute.name = attribute.name;
-					array.push( bufferAttribute );
-
-				}
-
-				geometry.morphAttributes[ key ] = array;
-
-			}
-
-		}
-
-		const morphTargetsRelative = json.data.morphTargetsRelative;
-
-		if ( morphTargetsRelative ) {
-
-			geometry.morphTargetsRelative = true;
-
-		}
-
-		const groups = json.data.groups || json.data.drawcalls || json.data.offsets;
-
-		if ( groups !== undefined ) {
-
-			for ( let i = 0, n = groups.length; i !== n; ++ i ) {
-
-				const group = groups[ i ];
-
-				geometry.addGroup( group.start, group.count, group.materialIndex );
-
-			}
-
-		}
-
-		const boundingSphere = json.data.boundingSphere;
-
-		if ( boundingSphere !== undefined ) {
-
-			const center = new Vector3();
-
-			if ( boundingSphere.center !== undefined ) {
-
-				center.fromArray( boundingSphere.center );
-
-			}
-
-			geometry.boundingSphere = new Sphere( center, boundingSphere.radius );
-
-		}
-
-		if ( json.name ) geometry.name = json.name;
-		if ( json.userData ) geometry.userData = json.userData;
-
-		return geometry;
-
-	}
-
-}
-
-class ObjectLoader extends Loader {
-
-	constructor( manager ) {
-
-		super( manager );
-
-	}
-
-	load( url, onLoad, onProgress, onError ) {
-
-		const scope = this;
-
-		const path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;
-		this.resourcePath = this.resourcePath || path;
-
-		const loader = new FileLoader( this.manager );
-		loader.setPath( this.path );
-		loader.setRequestHeader( this.requestHeader );
-		loader.setWithCredentials( this.withCredentials );
-		loader.load( url, function ( text ) {
-
-			let json = null;
-
-			try {
-
-				json = JSON.parse( text );
-
-			} catch ( error ) {
-
-				if ( onError !== undefined ) onError( error );
-
-				console.error( 'THREE:ObjectLoader: Can\'t parse ' + url + '.', error.message );
-
-				return;
-
-			}
-
-			const metadata = json.metadata;
-
-			if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {
-
-				if ( onError !== undefined ) onError( new Error( 'THREE.ObjectLoader: Can\'t load ' + url ) );
-
-				console.error( 'THREE.ObjectLoader: Can\'t load ' + url );
-				return;
-
-			}
-
-			scope.parse( json, onLoad );
-
-		}, onProgress, onError );
-
-	}
-
-	async loadAsync( url, onProgress ) {
-
-		const scope = this;
-
-		const path = ( this.path === '' ) ? LoaderUtils.extractUrlBase( url ) : this.path;
-		this.resourcePath = this.resourcePath || path;
-
-		const loader = new FileLoader( this.manager );
-		loader.setPath( this.path );
-		loader.setRequestHeader( this.requestHeader );
-		loader.setWithCredentials( this.withCredentials );
-
-		const text = await loader.loadAsync( url, onProgress );
-
-		const json = JSON.parse( text );
-
-		const metadata = json.metadata;
-
-		if ( metadata === undefined || metadata.type === undefined || metadata.type.toLowerCase() === 'geometry' ) {
-
-			throw new Error( 'THREE.ObjectLoader: Can\'t load ' + url );
-
-		}
-
-		return await scope.parseAsync( json );
-
-	}
-
-	parse( json, onLoad ) {
-
-		const animations = this.parseAnimations( json.animations );
-		const shapes = this.parseShapes( json.shapes );
-		const geometries = this.parseGeometries( json.geometries, shapes );
-
-		const images = this.parseImages( json.images, function () {
-
-			if ( onLoad !== undefined ) onLoad( object );
-
-		} );
-
-		const textures = this.parseTextures( json.textures, images );
-		const materials = this.parseMaterials( json.materials, textures );
-
-		const object = this.parseObject( json.object, geometries, materials, textures, animations );
-		const skeletons = this.parseSkeletons( json.skeletons, object );
-
-		this.bindSkeletons( object, skeletons );
-
-		//
-
-		if ( onLoad !== undefined ) {
-
-			let hasImages = false;
-
-			for ( const uuid in images ) {
-
-				if ( images[ uuid ].data instanceof HTMLImageElement ) {
-
-					hasImages = true;
-					break;
-
-				}
-
-			}
-
-			if ( hasImages === false ) onLoad( object );
-
-		}
-
-		return object;
-
-	}
-
-	async parseAsync( json ) {
-
-		const animations = this.parseAnimations( json.animations );
-		const shapes = this.parseShapes( json.shapes );
-		const geometries = this.parseGeometries( json.geometries, shapes );
-
-		const images = await this.parseImagesAsync( json.images );
-
-		const textures = this.parseTextures( json.textures, images );
-		const materials = this.parseMaterials( json.materials, textures );
-
-		const object = this.parseObject( json.object, geometries, materials, textures, animations );
-		const skeletons = this.parseSkeletons( json.skeletons, object );
-
-		this.bindSkeletons( object, skeletons );
-
-		return object;
-
-	}
-
-	parseShapes( json ) {
-
-		const shapes = {};
-
-		if ( json !== undefined ) {
-
-			for ( let i = 0, l = json.length; i < l; i ++ ) {
-
-				const shape = new Shape().fromJSON( json[ i ] );
-
-				shapes[ shape.uuid ] = shape;
-
-			}
-
-		}
-
-		return shapes;
-
-	}
-
-	parseSkeletons( json, object ) {
-
-		const skeletons = {};
-		const bones = {};
-
-		// generate bone lookup table
-
-		object.traverse( function ( child ) {
-
-			if ( child.isBone ) bones[ child.uuid ] = child;
-
-		} );
-
-		// create skeletons
-
-		if ( json !== undefined ) {
-
-			for ( let i = 0, l = json.length; i < l; i ++ ) {
-
-				const skeleton = new Skeleton().fromJSON( json[ i ], bones );
-
-				skeletons[ skeleton.uuid ] = skeleton;
-
-			}
-
-		}
-
-		return skeletons;
-
-	}
-
-	parseGeometries( json, shapes ) {
-
-		const geometries = {};
-
-		if ( json !== undefined ) {
-
-			const bufferGeometryLoader = new BufferGeometryLoader();
-
-			for ( let i = 0, l = json.length; i < l; i ++ ) {
-
-				let geometry;
-				const data = json[ i ];
-
-				switch ( data.type ) {
-
-					case 'BufferGeometry':
-					case 'InstancedBufferGeometry':
-
-						geometry = bufferGeometryLoader.parse( data );
-						break;
-
-					default:
-
-						if ( data.type in Geometries ) {
-
-							geometry = Geometries[ data.type ].fromJSON( data, shapes );
-
-						} else {
-
-							console.warn( `THREE.ObjectLoader: Unsupported geometry type "${ data.type }"` );
-
-						}
-
-				}
-
-				geometry.uuid = data.uuid;
-
-				if ( data.name !== undefined ) geometry.name = data.name;
-				if ( data.userData !== undefined ) geometry.userData = data.userData;
-
-				geometries[ data.uuid ] = geometry;
-
-			}
-
-		}
-
-		return geometries;
-
-	}
-
-	parseMaterials( json, textures ) {
-
-		const cache = {}; // MultiMaterial
-		const materials = {};
-
-		if ( json !== undefined ) {
-
-			const loader = new MaterialLoader();
-			loader.setTextures( textures );
-
-			for ( let i = 0, l = json.length; i < l; i ++ ) {
-
-				const data = json[ i ];
-
-				if ( cache[ data.uuid ] === undefined ) {
-
-					cache[ data.uuid ] = loader.parse( data );
-
-				}
-
-				materials[ data.uuid ] = cache[ data.uuid ];
-
-			}
-
-		}
-
-		return materials;
-
-	}
-
-	parseAnimations( json ) {
-
-		const animations = {};
-
-		if ( json !== undefined ) {
-
-			for ( let i = 0; i < json.length; i ++ ) {
-
-				const data = json[ i ];
-
-				const clip = AnimationClip.parse( data );
-
-				animations[ clip.uuid ] = clip;
-
-			}
-
-		}
-
-		return animations;
-
-	}
-
-	parseImages( json, onLoad ) {
-
-		const scope = this;
-		const images = {};
-
-		let loader;
-
-		function loadImage( url ) {
-
-			scope.manager.itemStart( url );
-
-			return loader.load( url, function () {
-
-				scope.manager.itemEnd( url );
-
-			}, undefined, function () {
-
-				scope.manager.itemError( url );
-				scope.manager.itemEnd( url );
-
-			} );
-
-		}
-
-		function deserializeImage( image ) {
-
-			if ( typeof image === 'string' ) {
-
-				const url = image;
-
-				const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( url ) ? url : scope.resourcePath + url;
-
-				return loadImage( path );
-
-			} else {
-
-				if ( image.data ) {
-
-					return {
-						data: getTypedArray( image.type, image.data ),
-						width: image.width,
-						height: image.height
-					};
-
-				} else {
-
-					return null;
-
-				}
-
-			}
-
-		}
-
-		if ( json !== undefined && json.length > 0 ) {
-
-			const manager = new LoadingManager( onLoad );
-
-			loader = new ImageLoader( manager );
-			loader.setCrossOrigin( this.crossOrigin );
-
-			for ( let i = 0, il = json.length; i < il; i ++ ) {
-
-				const image = json[ i ];
-				const url = image.url;
-
-				if ( Array.isArray( url ) ) {
-
-					// load array of images e.g CubeTexture
-
-					const imageArray = [];
-
-					for ( let j = 0, jl = url.length; j < jl; j ++ ) {
-
-						const currentUrl = url[ j ];
-
-						const deserializedImage = deserializeImage( currentUrl );
-
-						if ( deserializedImage !== null ) {
-
-							if ( deserializedImage instanceof HTMLImageElement ) {
-
-								imageArray.push( deserializedImage );
-
-							} else {
-
-								// special case: handle array of data textures for cube textures
-
-								imageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );
-
-							}
-
-						}
-
-					}
-
-					images[ image.uuid ] = new Source( imageArray );
-
-				} else {
-
-					// load single image
-
-					const deserializedImage = deserializeImage( image.url );
-					images[ image.uuid ] = new Source( deserializedImage );
-
-
-				}
-
-			}
-
-		}
-
-		return images;
-
-	}
-
-	async parseImagesAsync( json ) {
-
-		const scope = this;
-		const images = {};
-
-		let loader;
-
-		async function deserializeImage( image ) {
-
-			if ( typeof image === 'string' ) {
-
-				const url = image;
-
-				const path = /^(\/\/)|([a-z]+:(\/\/)?)/i.test( url ) ? url : scope.resourcePath + url;
-
-				return await loader.loadAsync( path );
-
-			} else {
-
-				if ( image.data ) {
-
-					return {
-						data: getTypedArray( image.type, image.data ),
-						width: image.width,
-						height: image.height
-					};
-
-				} else {
-
-					return null;
-
-				}
-
-			}
-
-		}
-
-		if ( json !== undefined && json.length > 0 ) {
-
-			loader = new ImageLoader( this.manager );
-			loader.setCrossOrigin( this.crossOrigin );
-
-			for ( let i = 0, il = json.length; i < il; i ++ ) {
-
-				const image = json[ i ];
-				const url = image.url;
-
-				if ( Array.isArray( url ) ) {
-
-					// load array of images e.g CubeTexture
-
-					const imageArray = [];
-
-					for ( let j = 0, jl = url.length; j < jl; j ++ ) {
-
-						const currentUrl = url[ j ];
-
-						const deserializedImage = await deserializeImage( currentUrl );
-
-						if ( deserializedImage !== null ) {
-
-							if ( deserializedImage instanceof HTMLImageElement ) {
-
-								imageArray.push( deserializedImage );
-
-							} else {
-
-								// special case: handle array of data textures for cube textures
-
-								imageArray.push( new DataTexture( deserializedImage.data, deserializedImage.width, deserializedImage.height ) );
-
-							}
-
-						}
-
-					}
-
-					images[ image.uuid ] = new Source( imageArray );
-
-				} else {
-
-					// load single image
-
-					const deserializedImage = await deserializeImage( image.url );
-					images[ image.uuid ] = new Source( deserializedImage );
-
-				}
-
-			}
-
-		}
-
-		return images;
-
-	}
-
-	parseTextures( json, images ) {
-
-		function parseConstant( value, type ) {
-
-			if ( typeof value === 'number' ) return value;
-
-			console.warn( 'THREE.ObjectLoader.parseTexture: Constant should be in numeric form.', value );
-
-			return type[ value ];
-
-		}
-
-		const textures = {};
-
-		if ( json !== undefined ) {
-
-			for ( let i = 0, l = json.length; i < l; i ++ ) {
-
-				const data = json[ i ];
-
-				if ( data.image === undefined ) {
-
-					console.warn( 'THREE.ObjectLoader: No "image" specified for', data.uuid );
-
-				}
-
-				if ( images[ data.image ] === undefined ) {
-
-					console.warn( 'THREE.ObjectLoader: Undefined image', data.image );
-
-				}
-
-				const source = images[ data.image ];
-				const image = source.data;
-
-				let texture;
-
-				if ( Array.isArray( image ) ) {
-
-					texture = new CubeTexture();
-
-					if ( image.length === 6 ) texture.needsUpdate = true;
-
-				} else {
-
-					if ( image && image.data ) {
-
-						texture = new DataTexture();
-
-					} else {
-
-						texture = new Texture();
-
-					}
-
-					if ( image ) texture.needsUpdate = true; // textures can have undefined image data
-
-				}
-
-				texture.source = source;
-
-				texture.uuid = data.uuid;
-
-				if ( data.name !== undefined ) texture.name = data.name;
-
-				if ( data.mapping !== undefined ) texture.mapping = parseConstant( data.mapping, TEXTURE_MAPPING );
-				if ( data.channel !== undefined ) texture.channel = data.channel;
-
-				if ( data.offset !== undefined ) texture.offset.fromArray( data.offset );
-				if ( data.repeat !== undefined ) texture.repeat.fromArray( data.repeat );
-				if ( data.center !== undefined ) texture.center.fromArray( data.center );
-				if ( data.rotation !== undefined ) texture.rotation = data.rotation;
-
-				if ( data.wrap !== undefined ) {
-
-					texture.wrapS = parseConstant( data.wrap[ 0 ], TEXTURE_WRAPPING );
-					texture.wrapT = parseConstant( data.wrap[ 1 ], TEXTURE_WRAPPING );
-
-				}
-
-				if ( data.format !== undefined ) texture.format = data.format;
-				if ( data.internalFormat !== undefined ) texture.internalFormat = data.internalFormat;
-				if ( data.type !== undefined ) texture.type = data.type;
-				if ( data.colorSpace !== undefined ) texture.colorSpace = data.colorSpace;
-				if ( data.encoding !== undefined ) texture.encoding = data.encoding; // @deprecated, r152
-
-				if ( data.minFilter !== undefined ) texture.minFilter = parseConstant( data.minFilter, TEXTURE_FILTER );
-				if ( data.magFilter !== undefined ) texture.magFilter = parseConstant( data.magFilter, TEXTURE_FILTER );
-				if ( data.anisotropy !== undefined ) texture.anisotropy = data.anisotropy;
-
-				if ( data.flipY !== undefined ) texture.flipY = data.flipY;
-
-				if ( data.generateMipmaps !== undefined ) texture.generateMipmaps = data.generateMipmaps;
-				if ( data.premultiplyAlpha !== undefined ) texture.premultiplyAlpha = data.premultiplyAlpha;
-				if ( data.unpackAlignment !== undefined ) texture.unpackAlignment = data.unpackAlignment;
-
-				if ( data.userData !== undefined ) texture.userData = data.userData;
-
-				textures[ data.uuid ] = texture;
-
-			}
-
-		}
-
-		return textures;
-
-	}
-
-	parseObject( data, geometries, materials, textures, animations ) {
-
-		let object;
-
-		function getGeometry( name ) {
-
-			if ( geometries[ name ] === undefined ) {
-
-				console.warn( 'THREE.ObjectLoader: Undefined geometry', name );
-
-			}
-
-			return geometries[ name ];
-
-		}
-
-		function getMaterial( name ) {
-
-			if ( name === undefined ) return undefined;
-
-			if ( Array.isArray( name ) ) {
-
-				const array = [];
-
-				for ( let i = 0, l = name.length; i < l; i ++ ) {
-
-					const uuid = name[ i ];
-
-					if ( materials[ uuid ] === undefined ) {
-
-						console.warn( 'THREE.ObjectLoader: Undefined material', uuid );
-
-					}
-
-					array.push( materials[ uuid ] );
-
-				}
-
-				return array;
-
-			}
-
-			if ( materials[ name ] === undefined ) {
-
-				console.warn( 'THREE.ObjectLoader: Undefined material', name );
-
-			}
-
-			return materials[ name ];
-
-		}
-
-		function getTexture( uuid ) {
-
-			if ( textures[ uuid ] === undefined ) {
-
-				console.warn( 'THREE.ObjectLoader: Undefined texture', uuid );
-
-			}
-
-			return textures[ uuid ];
-
-		}
-
-		let geometry, material;
-
-		switch ( data.type ) {
-
-			case 'Scene':
-
-				object = new Scene();
-
-				if ( data.background !== undefined ) {
-
-					if ( Number.isInteger( data.background ) ) {
-
-						object.background = new Color( data.background );
-
-					} else {
-
-						object.background = getTexture( data.background );
-
-					}
-
-				}
-
-				if ( data.environment !== undefined ) {
-
-					object.environment = getTexture( data.environment );
-
-				}
-
-				if ( data.fog !== undefined ) {
-
-					if ( data.fog.type === 'Fog' ) {
-
-						object.fog = new Fog( data.fog.color, data.fog.near, data.fog.far );
-
-					} else if ( data.fog.type === 'FogExp2' ) {
-
-						object.fog = new FogExp2( data.fog.color, data.fog.density );
-
-					}
-
-				}
-
-				if ( data.backgroundBlurriness !== undefined ) object.backgroundBlurriness = data.backgroundBlurriness;
-				if ( data.backgroundIntensity !== undefined ) object.backgroundIntensity = data.backgroundIntensity;
-
-				break;
-
-			case 'PerspectiveCamera':
-
-				object = new PerspectiveCamera( data.fov, data.aspect, data.near, data.far );
-
-				if ( data.focus !== undefined ) object.focus = data.focus;
-				if ( data.zoom !== undefined ) object.zoom = data.zoom;
-				if ( data.filmGauge !== undefined ) object.filmGauge = data.filmGauge;
-				if ( data.filmOffset !== undefined ) object.filmOffset = data.filmOffset;
-				if ( data.view !== undefined ) object.view = Object.assign( {}, data.view );
-
-				break;
-
-			case 'OrthographicCamera':
-
-				object = new OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );
-
-				if ( data.zoom !== undefined ) object.zoom = data.zoom;
-				if ( data.view !== undefined ) object.view = Object.assign( {}, data.view );
-
-				break;
-
-			case 'AmbientLight':
-
-				object = new AmbientLight( data.color, data.intensity );
-
-				break;
-
-			case 'DirectionalLight':
-
-				object = new DirectionalLight( data.color, data.intensity );
-
-				break;
-
-			case 'PointLight':
-
-				object = new PointLight( data.color, data.intensity, data.distance, data.decay );
-
-				break;
-
-			case 'RectAreaLight':
-
-				object = new RectAreaLight( data.color, data.intensity, data.width, data.height );
-
-				break;
-
-			case 'SpotLight':
-
-				object = new SpotLight( data.color, data.intensity, data.distance, data.angle, data.penumbra, data.decay );
-
-				break;
-
-			case 'HemisphereLight':
-
-				object = new HemisphereLight( data.color, data.groundColor, data.intensity );
-
-				break;
-
-			case 'LightProbe':
-
-				object = new LightProbe().fromJSON( data );
-
-				break;
-
-			case 'SkinnedMesh':
-
-				geometry = getGeometry( data.geometry );
-			 	material = getMaterial( data.material );
-
-				object = new SkinnedMesh( geometry, material );
-
-				if ( data.bindMode !== undefined ) object.bindMode = data.bindMode;
-				if ( data.bindMatrix !== undefined ) object.bindMatrix.fromArray( data.bindMatrix );
-				if ( data.skeleton !== undefined ) object.skeleton = data.skeleton;
-
-				break;
-
-			case 'Mesh':
-
-				geometry = getGeometry( data.geometry );
-				material = getMaterial( data.material );
-
-				object = new Mesh( geometry, material );
-
-				break;
-
-			case 'InstancedMesh':
-
-				geometry = getGeometry( data.geometry );
-				material = getMaterial( data.material );
-				const count = data.count;
-				const instanceMatrix = data.instanceMatrix;
-				const instanceColor = data.instanceColor;
-
-				object = new InstancedMesh( geometry, material, count );
-				object.instanceMatrix = new InstancedBufferAttribute( new Float32Array( instanceMatrix.array ), 16 );
-				if ( instanceColor !== undefined ) object.instanceColor = new InstancedBufferAttribute( new Float32Array( instanceColor.array ), instanceColor.itemSize );
-
-				break;
-
-			case 'LOD':
-
-				object = new LOD();
-
-				break;
-
-			case 'Line':
-
-				object = new Line( getGeometry( data.geometry ), getMaterial( data.material ) );
-
-				break;
-
-			case 'LineLoop':
-
-				object = new LineLoop( getGeometry( data.geometry ), getMaterial( data.material ) );
-
-				break;
-
-			case 'LineSegments':
-
-				object = new LineSegments( getGeometry( data.geometry ), getMaterial( data.material ) );
-
-				break;
-
-			case 'PointCloud':
-			case 'Points':
-
-				object = new Points( getGeometry( data.geometry ), getMaterial( data.material ) );
-
-				break;
-
-			case 'Sprite':
-
-				object = new Sprite( getMaterial( data.material ) );
-
-				break;
-
-			case 'Group':
-
-				object = new Group();
-
-				break;
-
-			case 'Bone':
-
-				object = new Bone();
-
-				break;
-
-			default:
-
-				object = new Object3D();
-
-		}
-
-		object.uuid = data.uuid;
-
-		if ( data.name !== undefined ) object.name = data.name;
-
-		if ( data.matrix !== undefined ) {
-
-			object.matrix.fromArray( data.matrix );
-
-			if ( data.matrixAutoUpdate !== undefined ) object.matrixAutoUpdate = data.matrixAutoUpdate;
-			if ( object.matrixAutoUpdate ) object.matrix.decompose( object.position, object.quaternion, object.scale );
-
-		} else {
-
-			if ( data.position !== undefined ) object.position.fromArray( data.position );
-			if ( data.rotation !== undefined ) object.rotation.fromArray( data.rotation );
-			if ( data.quaternion !== undefined ) object.quaternion.fromArray( data.quaternion );
-			if ( data.scale !== undefined ) object.scale.fromArray( data.scale );
-
-		}
-
-		if ( data.up !== undefined ) object.up.fromArray( data.up );
-
-		if ( data.castShadow !== undefined ) object.castShadow = data.castShadow;
-		if ( data.receiveShadow !== undefined ) object.receiveShadow = data.receiveShadow;
-
-		if ( data.shadow ) {
-
-			if ( data.shadow.bias !== undefined ) object.shadow.bias = data.shadow.bias;
-			if ( data.shadow.normalBias !== undefined ) object.shadow.normalBias = data.shadow.normalBias;
-			if ( data.shadow.radius !== undefined ) object.shadow.radius = data.shadow.radius;
-			if ( data.shadow.mapSize !== undefined ) object.shadow.mapSize.fromArray( data.shadow.mapSize );
-			if ( data.shadow.camera !== undefined ) object.shadow.camera = this.parseObject( data.shadow.camera );
-
-		}
-
-		if ( data.visible !== undefined ) object.visible = data.visible;
-		if ( data.frustumCulled !== undefined ) object.frustumCulled = data.frustumCulled;
-		if ( data.renderOrder !== undefined ) object.renderOrder = data.renderOrder;
-		if ( data.userData !== undefined ) object.userData = data.userData;
-		if ( data.layers !== undefined ) object.layers.mask = data.layers;
-
-		if ( data.children !== undefined ) {
-
-			const children = data.children;
-
-			for ( let i = 0; i < children.length; i ++ ) {
-
-				object.add( this.parseObject( children[ i ], geometries, materials, textures, animations ) );
-
-			}
-
-		}
-
-		if ( data.animations !== undefined ) {
-
-			const objectAnimations = data.animations;
-
-			for ( let i = 0; i < objectAnimations.length; i ++ ) {
-
-				const uuid = objectAnimations[ i ];
-
-				object.animations.push( animations[ uuid ] );
-
-			}
-
-		}
-
-		if ( data.type === 'LOD' ) {
-
-			if ( data.autoUpdate !== undefined ) object.autoUpdate = data.autoUpdate;
-
-			const levels = data.levels;
-
-			for ( let l = 0; l < levels.length; l ++ ) {
-
-				const level = levels[ l ];
-				const child = object.getObjectByProperty( 'uuid', level.object );
-
-				if ( child !== undefined ) {
-
-					object.addLevel( child, level.distance, level.hysteresis );
-
-				}
-
-			}
-
-		}
-
-		return object;
-
-	}
-
-	bindSkeletons( object, skeletons ) {
-
-		if ( Object.keys( skeletons ).length === 0 ) return;
-
-		object.traverse( function ( child ) {
-
-			if ( child.isSkinnedMesh === true && child.skeleton !== undefined ) {
-
-				const skeleton = skeletons[ child.skeleton ];
-
-				if ( skeleton === undefined ) {
-
-					console.warn( 'THREE.ObjectLoader: No skeleton found with UUID:', child.skeleton );
-
-				} else {
-
-					child.bind( skeleton, child.bindMatrix );
-
-				}
-
-			}
-
-		} );
-
-	}
-
-}
-
-const TEXTURE_MAPPING = {
-	UVMapping: UVMapping,
-	CubeReflectionMapping: CubeReflectionMapping,
-	CubeRefractionMapping: CubeRefractionMapping,
-	EquirectangularReflectionMapping: EquirectangularReflectionMapping,
-	EquirectangularRefractionMapping: EquirectangularRefractionMapping,
-	CubeUVReflectionMapping: CubeUVReflectionMapping
-};
-
-const TEXTURE_WRAPPING = {
-	RepeatWrapping: RepeatWrapping,
-	ClampToEdgeWrapping: ClampToEdgeWrapping,
-	MirroredRepeatWrapping: MirroredRepeatWrapping
-};
-
-const TEXTURE_FILTER = {
-	NearestFilter: NearestFilter,
-	NearestMipmapNearestFilter: NearestMipmapNearestFilter,
-	NearestMipmapLinearFilter: NearestMipmapLinearFilter,
-	LinearFilter: LinearFilter,
-	LinearMipmapNearestFilter: LinearMipmapNearestFilter,
-	LinearMipmapLinearFilter: LinearMipmapLinearFilter
-};
-
-class ImageBitmapLoader extends Loader {
-
-	constructor( manager ) {
-
-		super( manager );
-
-		this.isImageBitmapLoader = true;
-
-		if ( typeof createImageBitmap === 'undefined' ) {
-
-			console.warn( 'THREE.ImageBitmapLoader: createImageBitmap() not supported.' );
-
-		}
-
-		if ( typeof fetch === 'undefined' ) {
-
-			console.warn( 'THREE.ImageBitmapLoader: fetch() not supported.' );
-
-		}
-
-		this.options = { premultiplyAlpha: 'none' };
-
-	}
-
-	setOptions( options ) {
-
-		this.options = options;
-
-		return this;
-
-	}
-
-	load( url, onLoad, onProgress, onError ) {
-
-		if ( url === undefined ) url = '';
-
-		if ( this.path !== undefined ) url = this.path + url;
-
-		url = this.manager.resolveURL( url );
-
-		const scope = this;
-
-		const cached = Cache.get( url );
-
-		if ( cached !== undefined ) {
-
-			scope.manager.itemStart( url );
-
-			setTimeout( function () {
-
-				if ( onLoad ) onLoad( cached );
-
-				scope.manager.itemEnd( url );
-
-			}, 0 );
-
-			return cached;
-
-		}
-
-		const fetchOptions = {};
-		fetchOptions.credentials = ( this.crossOrigin === 'anonymous' ) ? 'same-origin' : 'include';
-		fetchOptions.headers = this.requestHeader;
-
-		fetch( url, fetchOptions ).then( function ( res ) {
-
-			return res.blob();
-
-		} ).then( function ( blob ) {
-
-			return createImageBitmap( blob, Object.assign( scope.options, { colorSpaceConversion: 'none' } ) );
-
-		} ).then( function ( imageBitmap ) {
-
-			Cache.add( url, imageBitmap );
-
-			if ( onLoad ) onLoad( imageBitmap );
-
-			scope.manager.itemEnd( url );
-
-		} ).catch( function ( e ) {
-
-			if ( onError ) onError( e );
-
-			scope.manager.itemError( url );
-			scope.manager.itemEnd( url );
-
-		} );
-
-		scope.manager.itemStart( url );
-
-	}
-
-}
-
-let _context;
-
-class AudioContext {
-
-	static getContext() {
-
-		if ( _context === undefined ) {
-
-			_context = new ( window.AudioContext || window.webkitAudioContext )();
-
-		}
-
-		return _context;
-
-	}
-
-	static setContext( value ) {
-
-		_context = value;
-
-	}
-
-}
-
-class AudioLoader extends Loader {
-
-	constructor( manager ) {
-
-		super( manager );
-
-	}
-
-	load( url, onLoad, onProgress, onError ) {
-
-		const scope = this;
-
-		const loader = new FileLoader( this.manager );
-		loader.setResponseType( 'arraybuffer' );
-		loader.setPath( this.path );
-		loader.setRequestHeader( this.requestHeader );
-		loader.setWithCredentials( this.withCredentials );
-		loader.load( url, function ( buffer ) {
-
-			try {
-
-				// Create a copy of the buffer. The `decodeAudioData` method
-				// detaches the buffer when complete, preventing reuse.
-				const bufferCopy = buffer.slice( 0 );
-
-				const context = AudioContext.getContext();
-				context.decodeAudioData( bufferCopy, function ( audioBuffer ) {
-
-					onLoad( audioBuffer );
-
-				}, handleError );
-
-			} catch ( e ) {
-
-				handleError( e );
-
-			}
-
-		}, onProgress, onError );
-
-		function handleError( e ) {
-
-			if ( onError ) {
-
-				onError( e );
-
-			} else {
-
-				console.error( e );
-
-			}
-
-			scope.manager.itemError( url );
-
-		}
-
-	}
-
-}
-
-class HemisphereLightProbe extends LightProbe {
-
-	constructor( skyColor, groundColor, intensity = 1 ) {
-
-		super( undefined, intensity );
-
-		this.isHemisphereLightProbe = true;
-
-		const color1 = new Color().set( skyColor );
-		const color2 = new Color().set( groundColor );
-
-		const sky = new Vector3( color1.r, color1.g, color1.b );
-		const ground = new Vector3( color2.r, color2.g, color2.b );
-
-		// without extra factor of PI in the shader, should = 1 / Math.sqrt( Math.PI );
-		const c0 = Math.sqrt( Math.PI );
-		const c1 = c0 * Math.sqrt( 0.75 );
-
-		this.sh.coefficients[ 0 ].copy( sky ).add( ground ).multiplyScalar( c0 );
-		this.sh.coefficients[ 1 ].copy( sky ).sub( ground ).multiplyScalar( c1 );
-
-	}
-
-}
-
-class AmbientLightProbe extends LightProbe {
-
-	constructor( color, intensity = 1 ) {
-
-		super( undefined, intensity );
-
-		this.isAmbientLightProbe = true;
-
-		const color1 = new Color().set( color );
-
-		// without extra factor of PI in the shader, would be 2 / Math.sqrt( Math.PI );
-		this.sh.coefficients[ 0 ].set( color1.r, color1.g, color1.b ).multiplyScalar( 2 * Math.sqrt( Math.PI ) );
-
-	}
-
-}
-
-const _eyeRight = /*@__PURE__*/ new Matrix4();
-const _eyeLeft = /*@__PURE__*/ new Matrix4();
-const _projectionMatrix = /*@__PURE__*/ new Matrix4();
-
-class StereoCamera {
-
-	constructor() {
-
-		this.type = 'StereoCamera';
-
-		this.aspect = 1;
-
-		this.eyeSep = 0.064;
-
-		this.cameraL = new PerspectiveCamera();
-		this.cameraL.layers.enable( 1 );
-		this.cameraL.matrixAutoUpdate = false;
-
-		this.cameraR = new PerspectiveCamera();
-		this.cameraR.layers.enable( 2 );
-		this.cameraR.matrixAutoUpdate = false;
-
-		this._cache = {
-			focus: null,
-			fov: null,
-			aspect: null,
-			near: null,
-			far: null,
-			zoom: null,
-			eyeSep: null
-		};
-
-	}
-
-	update( camera ) {
-
-		const cache = this._cache;
-
-		const needsUpdate = cache.focus !== camera.focus || cache.fov !== camera.fov ||
-			cache.aspect !== camera.aspect * this.aspect || cache.near !== camera.near ||
-			cache.far !== camera.far || cache.zoom !== camera.zoom || cache.eyeSep !== this.eyeSep;
-
-		if ( needsUpdate ) {
-
-			cache.focus = camera.focus;
-			cache.fov = camera.fov;
-			cache.aspect = camera.aspect * this.aspect;
-			cache.near = camera.near;
-			cache.far = camera.far;
-			cache.zoom = camera.zoom;
-			cache.eyeSep = this.eyeSep;
-
-			// Off-axis stereoscopic effect based on
-			// http://paulbourke.net/stereographics/stereorender/
-
-			_projectionMatrix.copy( camera.projectionMatrix );
-			const eyeSepHalf = cache.eyeSep / 2;
-			const eyeSepOnProjection = eyeSepHalf * cache.near / cache.focus;
-			const ymax = ( cache.near * Math.tan( DEG2RAD * cache.fov * 0.5 ) ) / cache.zoom;
-			let xmin, xmax;
-
-			// translate xOffset
-
-			_eyeLeft.elements[ 12 ] = - eyeSepHalf;
-			_eyeRight.elements[ 12 ] = eyeSepHalf;
-
-			// for left eye
-
-			xmin = - ymax * cache.aspect + eyeSepOnProjection;
-			xmax = ymax * cache.aspect + eyeSepOnProjection;
-
-			_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );
-			_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );
-
-			this.cameraL.projectionMatrix.copy( _projectionMatrix );
-
-			// for right eye
-
-			xmin = - ymax * cache.aspect - eyeSepOnProjection;
-			xmax = ymax * cache.aspect - eyeSepOnProjection;
-
-			_projectionMatrix.elements[ 0 ] = 2 * cache.near / ( xmax - xmin );
-			_projectionMatrix.elements[ 8 ] = ( xmax + xmin ) / ( xmax - xmin );
-
-			this.cameraR.projectionMatrix.copy( _projectionMatrix );
-
-		}
-
-		this.cameraL.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeLeft );
-		this.cameraR.matrixWorld.copy( camera.matrixWorld ).multiply( _eyeRight );
-
-	}
-
-}
-
-class Clock {
-
-	constructor( autoStart = true ) {
-
-		this.autoStart = autoStart;
-
-		this.startTime = 0;
-		this.oldTime = 0;
-		this.elapsedTime = 0;
-
-		this.running = false;
-
-	}
-
-	start() {
-
-		this.startTime = now();
-
-		this.oldTime = this.startTime;
-		this.elapsedTime = 0;
-		this.running = true;
-
-	}
-
-	stop() {
-
-		this.getElapsedTime();
-		this.running = false;
-		this.autoStart = false;
-
-	}
-
-	getElapsedTime() {
-
-		this.getDelta();
-		return this.elapsedTime;
-
-	}
-
-	getDelta() {
-
-		let diff = 0;
-
-		if ( this.autoStart && ! this.running ) {
-
-			this.start();
-			return 0;
-
-		}
-
-		if ( this.running ) {
-
-			const newTime = now();
-
-			diff = ( newTime - this.oldTime ) / 1000;
-			this.oldTime = newTime;
-
-			this.elapsedTime += diff;
-
-		}
-
-		return diff;
-
-	}
-
-}
-
-function now() {
-
-	return ( typeof performance === 'undefined' ? Date : performance ).now(); // see #10732
-
-}
-
-const _position$1 = /*@__PURE__*/ new Vector3();
-const _quaternion$1 = /*@__PURE__*/ new Quaternion();
-const _scale$1 = /*@__PURE__*/ new Vector3();
-const _orientation$1 = /*@__PURE__*/ new Vector3();
-
-class AudioListener extends Object3D {
-
-	constructor() {
-
-		super();
-
-		this.type = 'AudioListener';
-
-		this.context = AudioContext.getContext();
-
-		this.gain = this.context.createGain();
-		this.gain.connect( this.context.destination );
-
-		this.filter = null;
-
-		this.timeDelta = 0;
-
-		// private
-
-		this._clock = new Clock();
-
-	}
-
-	getInput() {
-
-		return this.gain;
-
-	}
-
-	removeFilter() {
-
-		if ( this.filter !== null ) {
-
-			this.gain.disconnect( this.filter );
-			this.filter.disconnect( this.context.destination );
-			this.gain.connect( this.context.destination );
-			this.filter = null;
-
-		}
-
-		return this;
-
-	}
-
-	getFilter() {
-
-		return this.filter;
-
-	}
-
-	setFilter( value ) {
-
-		if ( this.filter !== null ) {
-
-			this.gain.disconnect( this.filter );
-			this.filter.disconnect( this.context.destination );
-
-		} else {
-
-			this.gain.disconnect( this.context.destination );
-
-		}
-
-		this.filter = value;
-		this.gain.connect( this.filter );
-		this.filter.connect( this.context.destination );
-
-		return this;
-
-	}
-
-	getMasterVolume() {
-
-		return this.gain.gain.value;
-
-	}
-
-	setMasterVolume( value ) {
-
-		this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );
-
-		return this;
-
-	}
-
-	updateMatrixWorld( force ) {
-
-		super.updateMatrixWorld( force );
-
-		const listener = this.context.listener;
-		const up = this.up;
-
-		this.timeDelta = this._clock.getDelta();
-
-		this.matrixWorld.decompose( _position$1, _quaternion$1, _scale$1 );
-
-		_orientation$1.set( 0, 0, - 1 ).applyQuaternion( _quaternion$1 );
-
-		if ( listener.positionX ) {
-
-			// code path for Chrome (see #14393)
-
-			const endTime = this.context.currentTime + this.timeDelta;
-
-			listener.positionX.linearRampToValueAtTime( _position$1.x, endTime );
-			listener.positionY.linearRampToValueAtTime( _position$1.y, endTime );
-			listener.positionZ.linearRampToValueAtTime( _position$1.z, endTime );
-			listener.forwardX.linearRampToValueAtTime( _orientation$1.x, endTime );
-			listener.forwardY.linearRampToValueAtTime( _orientation$1.y, endTime );
-			listener.forwardZ.linearRampToValueAtTime( _orientation$1.z, endTime );
-			listener.upX.linearRampToValueAtTime( up.x, endTime );
-			listener.upY.linearRampToValueAtTime( up.y, endTime );
-			listener.upZ.linearRampToValueAtTime( up.z, endTime );
-
-		} else {
-
-			listener.setPosition( _position$1.x, _position$1.y, _position$1.z );
-			listener.setOrientation( _orientation$1.x, _orientation$1.y, _orientation$1.z, up.x, up.y, up.z );
-
-		}
-
-	}
-
-}
-
-class Audio extends Object3D {
-
-	constructor( listener ) {
-
-		super();
-
-		this.type = 'Audio';
-
-		this.listener = listener;
-		this.context = listener.context;
-
-		this.gain = this.context.createGain();
-		this.gain.connect( listener.getInput() );
-
-		this.autoplay = false;
-
-		this.buffer = null;
-		this.detune = 0;
-		this.loop = false;
-		this.loopStart = 0;
-		this.loopEnd = 0;
-		this.offset = 0;
-		this.duration = undefined;
-		this.playbackRate = 1;
-		this.isPlaying = false;
-		this.hasPlaybackControl = true;
-		this.source = null;
-		this.sourceType = 'empty';
-
-		this._startedAt = 0;
-		this._progress = 0;
-		this._connected = false;
-
-		this.filters = [];
-
-	}
-
-	getOutput() {
-
-		return this.gain;
-
-	}
-
-	setNodeSource( audioNode ) {
-
-		this.hasPlaybackControl = false;
-		this.sourceType = 'audioNode';
-		this.source = audioNode;
-		this.connect();
-
-		return this;
-
-	}
-
-	setMediaElementSource( mediaElement ) {
-
-		this.hasPlaybackControl = false;
-		this.sourceType = 'mediaNode';
-		this.source = this.context.createMediaElementSource( mediaElement );
-		this.connect();
-
-		return this;
-
-	}
-
-	setMediaStreamSource( mediaStream ) {
-
-		this.hasPlaybackControl = false;
-		this.sourceType = 'mediaStreamNode';
-		this.source = this.context.createMediaStreamSource( mediaStream );
-		this.connect();
-
-		return this;
-
-	}
-
-	setBuffer( audioBuffer ) {
-
-		this.buffer = audioBuffer;
-		this.sourceType = 'buffer';
-
-		if ( this.autoplay ) this.play();
-
-		return this;
-
-	}
-
-	play( delay = 0 ) {
-
-		if ( this.isPlaying === true ) {
-
-			console.warn( 'THREE.Audio: Audio is already playing.' );
-			return;
-
-		}
-
-		if ( this.hasPlaybackControl === false ) {
-
-			console.warn( 'THREE.Audio: this Audio has no playback control.' );
-			return;
-
-		}
-
-		this._startedAt = this.context.currentTime + delay;
-
-		const source = this.context.createBufferSource();
-		source.buffer = this.buffer;
-		source.loop = this.loop;
-		source.loopStart = this.loopStart;
-		source.loopEnd = this.loopEnd;
-		source.onended = this.onEnded.bind( this );
-		source.start( this._startedAt, this._progress + this.offset, this.duration );
-
-		this.isPlaying = true;
-
-		this.source = source;
-
-		this.setDetune( this.detune );
-		this.setPlaybackRate( this.playbackRate );
-
-		return this.connect();
-
-	}
-
-	pause() {
-
-		if ( this.hasPlaybackControl === false ) {
-
-			console.warn( 'THREE.Audio: this Audio has no playback control.' );
-			return;
-
-		}
-
-		if ( this.isPlaying === true ) {
-
-			// update current progress
-
-			this._progress += Math.max( this.context.currentTime - this._startedAt, 0 ) * this.playbackRate;
-
-			if ( this.loop === true ) {
-
-				// ensure _progress does not exceed duration with looped audios
-
-				this._progress = this._progress % ( this.duration || this.buffer.duration );
-
-			}
-
-			this.source.stop();
-			this.source.onended = null;
-
-			this.isPlaying = false;
-
-		}
-
-		return this;
-
-	}
-
-	stop() {
-
-		if ( this.hasPlaybackControl === false ) {
-
-			console.warn( 'THREE.Audio: this Audio has no playback control.' );
-			return;
-
-		}
-
-		this._progress = 0;
-
-		if ( this.source !== null ) {
-
-			this.source.stop();
-			this.source.onended = null;
-
-		}
-
-		this.isPlaying = false;
-
-		return this;
-
-	}
-
-	connect() {
-
-		if ( this.filters.length > 0 ) {
-
-			this.source.connect( this.filters[ 0 ] );
-
-			for ( let i = 1, l = this.filters.length; i < l; i ++ ) {
-
-				this.filters[ i - 1 ].connect( this.filters[ i ] );
-
-			}
-
-			this.filters[ this.filters.length - 1 ].connect( this.getOutput() );
-
-		} else {
-
-			this.source.connect( this.getOutput() );
-
-		}
-
-		this._connected = true;
-
-		return this;
-
-	}
-
-	disconnect() {
-
-		if ( this.filters.length > 0 ) {
-
-			this.source.disconnect( this.filters[ 0 ] );
-
-			for ( let i = 1, l = this.filters.length; i < l; i ++ ) {
-
-				this.filters[ i - 1 ].disconnect( this.filters[ i ] );
-
-			}
-
-			this.filters[ this.filters.length - 1 ].disconnect( this.getOutput() );
-
-		} else {
-
-			this.source.disconnect( this.getOutput() );
-
-		}
-
-		this._connected = false;
-
-		return this;
-
-	}
-
-	getFilters() {
-
-		return this.filters;
-
-	}
-
-	setFilters( value ) {
-
-		if ( ! value ) value = [];
-
-		if ( this._connected === true ) {
-
-			this.disconnect();
-			this.filters = value.slice();
-			this.connect();
-
-		} else {
-
-			this.filters = value.slice();
-
-		}
-
-		return this;
-
-	}
-
-	setDetune( value ) {
-
-		this.detune = value;
-
-		if ( this.source.detune === undefined ) return; // only set detune when available
-
-		if ( this.isPlaying === true ) {
-
-			this.source.detune.setTargetAtTime( this.detune, this.context.currentTime, 0.01 );
-
-		}
-
-		return this;
-
-	}
-
-	getDetune() {
-
-		return this.detune;
-
-	}
-
-	getFilter() {
-
-		return this.getFilters()[ 0 ];
-
-	}
-
-	setFilter( filter ) {
-
-		return this.setFilters( filter ? [ filter ] : [] );
-
-	}
-
-	setPlaybackRate( value ) {
-
-		if ( this.hasPlaybackControl === false ) {
-
-			console.warn( 'THREE.Audio: this Audio has no playback control.' );
-			return;
-
-		}
-
-		this.playbackRate = value;
-
-		if ( this.isPlaying === true ) {
-
-			this.source.playbackRate.setTargetAtTime( this.playbackRate, this.context.currentTime, 0.01 );
-
-		}
-
-		return this;
-
-	}
-
-	getPlaybackRate() {
-
-		return this.playbackRate;
-
-	}
-
-	onEnded() {
-
-		this.isPlaying = false;
-
-	}
-
-	getLoop() {
-
-		if ( this.hasPlaybackControl === false ) {
-
-			console.warn( 'THREE.Audio: this Audio has no playback control.' );
-			return false;
-
-		}
-
-		return this.loop;
-
-	}
-
-	setLoop( value ) {
-
-		if ( this.hasPlaybackControl === false ) {
-
-			console.warn( 'THREE.Audio: this Audio has no playback control.' );
-			return;
-
-		}
-
-		this.loop = value;
-
-		if ( this.isPlaying === true ) {
-
-			this.source.loop = this.loop;
-
-		}
-
-		return this;
-
-	}
-
-	setLoopStart( value ) {
-
-		this.loopStart = value;
-
-		return this;
-
-	}
-
-	setLoopEnd( value ) {
-
-		this.loopEnd = value;
-
-		return this;
-
-	}
-
-	getVolume() {
-
-		return this.gain.gain.value;
-
-	}
-
-	setVolume( value ) {
-
-		this.gain.gain.setTargetAtTime( value, this.context.currentTime, 0.01 );
-
-		return this;
-
-	}
-
-}
-
-const _position = /*@__PURE__*/ new Vector3();
-const _quaternion = /*@__PURE__*/ new Quaternion();
-const _scale = /*@__PURE__*/ new Vector3();
-const _orientation = /*@__PURE__*/ new Vector3();
-
-class PositionalAudio extends Audio {
-
-	constructor( listener ) {
-
-		super( listener );
-
-		this.panner = this.context.createPanner();
-		this.panner.panningModel = 'HRTF';
-		this.panner.connect( this.gain );
-
-	}
-
-	disconnect() {
-
-		super.disconnect();
-
-		this.panner.disconnect( this.gain );
-
-	}
-
-	getOutput() {
-
-		return this.panner;
-
-	}
-
-	getRefDistance() {
-
-		return this.panner.refDistance;
-
-	}
-
-	setRefDistance( value ) {
-
-		this.panner.refDistance = value;
-
-		return this;
-
-	}
-
-	getRolloffFactor() {
-
-		return this.panner.rolloffFactor;
-
-	}
-
-	setRolloffFactor( value ) {
-
-		this.panner.rolloffFactor = value;
-
-		return this;
-
-	}
-
-	getDistanceModel() {
-
-		return this.panner.distanceModel;
-
-	}
-
-	setDistanceModel( value ) {
-
-		this.panner.distanceModel = value;
-
-		return this;
-
-	}
-
-	getMaxDistance() {
-
-		return this.panner.maxDistance;
-
-	}
-
-	setMaxDistance( value ) {
-
-		this.panner.maxDistance = value;
-
-		return this;
-
-	}
-
-	setDirectionalCone( coneInnerAngle, coneOuterAngle, coneOuterGain ) {
-
-		this.panner.coneInnerAngle = coneInnerAngle;
-		this.panner.coneOuterAngle = coneOuterAngle;
-		this.panner.coneOuterGain = coneOuterGain;
-
-		return this;
-
-	}
-
-	updateMatrixWorld( force ) {
-
-		super.updateMatrixWorld( force );
-
-		if ( this.hasPlaybackControl === true && this.isPlaying === false ) return;
-
-		this.matrixWorld.decompose( _position, _quaternion, _scale );
-
-		_orientation.set( 0, 0, 1 ).applyQuaternion( _quaternion );
-
-		const panner = this.panner;
-
-		if ( panner.positionX ) {
-
-			// code path for Chrome and Firefox (see #14393)
-
-			const endTime = this.context.currentTime + this.listener.timeDelta;
-
-			panner.positionX.linearRampToValueAtTime( _position.x, endTime );
-			panner.positionY.linearRampToValueAtTime( _position.y, endTime );
-			panner.positionZ.linearRampToValueAtTime( _position.z, endTime );
-			panner.orientationX.linearRampToValueAtTime( _orientation.x, endTime );
-			panner.orientationY.linearRampToValueAtTime( _orientation.y, endTime );
-			panner.orientationZ.linearRampToValueAtTime( _orientation.z, endTime );
-
-		} else {
-
-			panner.setPosition( _position.x, _position.y, _position.z );
-			panner.setOrientation( _orientation.x, _orientation.y, _orientation.z );
-
-		}
-
-	}
-
-}
-
-class AudioAnalyser {
-
-	constructor( audio, fftSize = 2048 ) {
-
-		this.analyser = audio.context.createAnalyser();
-		this.analyser.fftSize = fftSize;
-
-		this.data = new Uint8Array( this.analyser.frequencyBinCount );
-
-		audio.getOutput().connect( this.analyser );
-
-	}
-
-
-	getFrequencyData() {
-
-		this.analyser.getByteFrequencyData( this.data );
-
-		return this.data;
-
-	}
-
-	getAverageFrequency() {
-
-		let value = 0;
-		const data = this.getFrequencyData();
-
-		for ( let i = 0; i < data.length; i ++ ) {
-
-			value += data[ i ];
-
-		}
-
-		return value / data.length;
-
-	}
-
-}
-
-class PropertyMixer {
-
-	constructor( binding, typeName, valueSize ) {
-
-		this.binding = binding;
-		this.valueSize = valueSize;
-
-		let mixFunction,
-			mixFunctionAdditive,
-			setIdentity;
-
-		// buffer layout: [ incoming | accu0 | accu1 | orig | addAccu | (optional work) ]
-		//
-		// interpolators can use .buffer as their .result
-		// the data then goes to 'incoming'
-		//
-		// 'accu0' and 'accu1' are used frame-interleaved for
-		// the cumulative result and are compared to detect
-		// changes
-		//
-		// 'orig' stores the original state of the property
-		//
-		// 'add' is used for additive cumulative results
-		//
-		// 'work' is optional and is only present for quaternion types. It is used
-		// to store intermediate quaternion multiplication results
-
-		switch ( typeName ) {
-
-			case 'quaternion':
-				mixFunction = this._slerp;
-				mixFunctionAdditive = this._slerpAdditive;
-				setIdentity = this._setAdditiveIdentityQuaternion;
-
-				this.buffer = new Float64Array( valueSize * 6 );
-				this._workIndex = 5;
-				break;
-
-			case 'string':
-			case 'bool':
-				mixFunction = this._select;
-
-				// Use the regular mix function and for additive on these types,
-				// additive is not relevant for non-numeric types
-				mixFunctionAdditive = this._select;
-
-				setIdentity = this._setAdditiveIdentityOther;
-
-				this.buffer = new Array( valueSize * 5 );
-				break;
-
-			default:
-				mixFunction = this._lerp;
-				mixFunctionAdditive = this._lerpAdditive;
-				setIdentity = this._setAdditiveIdentityNumeric;
-
-				this.buffer = new Float64Array( valueSize * 5 );
-
-		}
-
-		this._mixBufferRegion = mixFunction;
-		this._mixBufferRegionAdditive = mixFunctionAdditive;
-		this._setIdentity = setIdentity;
-		this._origIndex = 3;
-		this._addIndex = 4;
-
-		this.cumulativeWeight = 0;
-		this.cumulativeWeightAdditive = 0;
-
-		this.useCount = 0;
-		this.referenceCount = 0;
-
-	}
-
-	// accumulate data in the 'incoming' region into 'accu<i>'
-	accumulate( accuIndex, weight ) {
-
-		// note: happily accumulating nothing when weight = 0, the caller knows
-		// the weight and shouldn't have made the call in the first place
-
-		const buffer = this.buffer,
-			stride = this.valueSize,
-			offset = accuIndex * stride + stride;
-
-		let currentWeight = this.cumulativeWeight;
-
-		if ( currentWeight === 0 ) {
-
-			// accuN := incoming * weight
-
-			for ( let i = 0; i !== stride; ++ i ) {
-
-				buffer[ offset + i ] = buffer[ i ];
-
-			}
-
-			currentWeight = weight;
-
-		} else {
-
-			// accuN := accuN + incoming * weight
-
-			currentWeight += weight;
-			const mix = weight / currentWeight;
-			this._mixBufferRegion( buffer, offset, 0, mix, stride );
-
-		}
-
-		this.cumulativeWeight = currentWeight;
-
-	}
-
-	// accumulate data in the 'incoming' region into 'add'
-	accumulateAdditive( weight ) {
-
-		const buffer = this.buffer,
-			stride = this.valueSize,
-			offset = stride * this._addIndex;
-
-		if ( this.cumulativeWeightAdditive === 0 ) {
-
-			// add = identity
-
-			this._setIdentity();
-
-		}
-
-		// add := add + incoming * weight
-
-		this._mixBufferRegionAdditive( buffer, offset, 0, weight, stride );
-		this.cumulativeWeightAdditive += weight;
-
-	}
-
-	// apply the state of 'accu<i>' to the binding when accus differ
-	apply( accuIndex ) {
-
-		const stride = this.valueSize,
-			buffer = this.buffer,
-			offset = accuIndex * stride + stride,
-
-			weight = this.cumulativeWeight,
-			weightAdditive = this.cumulativeWeightAdditive,
-
-			binding = this.binding;
-
-		this.cumulativeWeight = 0;
-		this.cumulativeWeightAdditive = 0;
-
-		if ( weight < 1 ) {
-
-			// accuN := accuN + original * ( 1 - cumulativeWeight )
-
-			const originalValueOffset = stride * this._origIndex;
-
-			this._mixBufferRegion(
-				buffer, offset, originalValueOffset, 1 - weight, stride );
-
-		}
-
-		if ( weightAdditive > 0 ) {
-
-			// accuN := accuN + additive accuN
-
-			this._mixBufferRegionAdditive( buffer, offset, this._addIndex * stride, 1, stride );
-
-		}
-
-		for ( let i = stride, e = stride + stride; i !== e; ++ i ) {
-
-			if ( buffer[ i ] !== buffer[ i + stride ] ) {
-
-				// value has changed -> update scene graph
-
-				binding.setValue( buffer, offset );
-				break;
-
-			}
-
-		}
-
-	}
-
-	// remember the state of the bound property and copy it to both accus
-	saveOriginalState() {
-
-		const binding = this.binding;
-
-		const buffer = this.buffer,
-			stride = this.valueSize,
-
-			originalValueOffset = stride * this._origIndex;
-
-		binding.getValue( buffer, originalValueOffset );
-
-		// accu[0..1] := orig -- initially detect changes against the original
-		for ( let i = stride, e = originalValueOffset; i !== e; ++ i ) {
-
-			buffer[ i ] = buffer[ originalValueOffset + ( i % stride ) ];
-
-		}
-
-		// Add to identity for additive
-		this._setIdentity();
-
-		this.cumulativeWeight = 0;
-		this.cumulativeWeightAdditive = 0;
-
-	}
-
-	// apply the state previously taken via 'saveOriginalState' to the binding
-	restoreOriginalState() {
-
-		const originalValueOffset = this.valueSize * 3;
-		this.binding.setValue( this.buffer, originalValueOffset );
-
-	}
-
-	_setAdditiveIdentityNumeric() {
-
-		const startIndex = this._addIndex * this.valueSize;
-		const endIndex = startIndex + this.valueSize;
-
-		for ( let i = startIndex; i < endIndex; i ++ ) {
-
-			this.buffer[ i ] = 0;
-
-		}
-
-	}
-
-	_setAdditiveIdentityQuaternion() {
-
-		this._setAdditiveIdentityNumeric();
-		this.buffer[ this._addIndex * this.valueSize + 3 ] = 1;
-
-	}
-
-	_setAdditiveIdentityOther() {
-
-		const startIndex = this._origIndex * this.valueSize;
-		const targetIndex = this._addIndex * this.valueSize;
-
-		for ( let i = 0; i < this.valueSize; i ++ ) {
-
-			this.buffer[ targetIndex + i ] = this.buffer[ startIndex + i ];
-
-		}
-
-	}
-
-
-	// mix functions
-
-	_select( buffer, dstOffset, srcOffset, t, stride ) {
-
-		if ( t >= 0.5 ) {
-
-			for ( let i = 0; i !== stride; ++ i ) {
-
-				buffer[ dstOffset + i ] = buffer[ srcOffset + i ];
-
-			}
-
-		}
-
-	}
-
-	_slerp( buffer, dstOffset, srcOffset, t ) {
-
-		Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, srcOffset, t );
-
-	}
-
-	_slerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {
-
-		const workOffset = this._workIndex * stride;
-
-		// Store result in intermediate buffer offset
-		Quaternion.multiplyQuaternionsFlat( buffer, workOffset, buffer, dstOffset, buffer, srcOffset );
-
-		// Slerp to the intermediate result
-		Quaternion.slerpFlat( buffer, dstOffset, buffer, dstOffset, buffer, workOffset, t );
-
-	}
-
-	_lerp( buffer, dstOffset, srcOffset, t, stride ) {
-
-		const s = 1 - t;
-
-		for ( let i = 0; i !== stride; ++ i ) {
-
-			const j = dstOffset + i;
-
-			buffer[ j ] = buffer[ j ] * s + buffer[ srcOffset + i ] * t;
-
-		}
-
-	}
-
-	_lerpAdditive( buffer, dstOffset, srcOffset, t, stride ) {
-
-		for ( let i = 0; i !== stride; ++ i ) {
-
-			const j = dstOffset + i;
-
-			buffer[ j ] = buffer[ j ] + buffer[ srcOffset + i ] * t;
-
-		}
-
-	}
-
-}
-
-// Characters [].:/ are reserved for track binding syntax.
-const _RESERVED_CHARS_RE = '\\[\\]\\.:\\/';
-const _reservedRe = new RegExp( '[' + _RESERVED_CHARS_RE + ']', 'g' );
-
-// Attempts to allow node names from any language. ES5's `\w` regexp matches
-// only latin characters, and the unicode \p{L} is not yet supported. So
-// instead, we exclude reserved characters and match everything else.
-const _wordChar = '[^' + _RESERVED_CHARS_RE + ']';
-const _wordCharOrDot = '[^' + _RESERVED_CHARS_RE.replace( '\\.', '' ) + ']';
-
-// Parent directories, delimited by '/' or ':'. Currently unused, but must
-// be matched to parse the rest of the track name.
-const _directoryRe = /*@__PURE__*/ /((?:WC+[\/:])*)/.source.replace( 'WC', _wordChar );
-
-// Target node. May contain word characters (a-zA-Z0-9_) and '.' or '-'.
-const _nodeRe = /*@__PURE__*/ /(WCOD+)?/.source.replace( 'WCOD', _wordCharOrDot );
-
-// Object on target node, and accessor. May not contain reserved
-// characters. Accessor may contain any character except closing bracket.
-const _objectRe = /*@__PURE__*/ /(?:\.(WC+)(?:\[(.+)\])?)?/.source.replace( 'WC', _wordChar );
-
-// Property and accessor. May not contain reserved characters. Accessor may
-// contain any non-bracket characters.
-const _propertyRe = /*@__PURE__*/ /\.(WC+)(?:\[(.+)\])?/.source.replace( 'WC', _wordChar );
-
-const _trackRe = new RegExp( ''
-	+ '^'
-	+ _directoryRe
-	+ _nodeRe
-	+ _objectRe
-	+ _propertyRe
-	+ '$'
-);
-
-const _supportedObjectNames = [ 'material', 'materials', 'bones', 'map' ];
-
-class Composite {
-
-	constructor( targetGroup, path, optionalParsedPath ) {
-
-		const parsedPath = optionalParsedPath || PropertyBinding.parseTrackName( path );
-
-		this._targetGroup = targetGroup;
-		this._bindings = targetGroup.subscribe_( path, parsedPath );
-
-	}
-
-	getValue( array, offset ) {
-
-		this.bind(); // bind all binding
-
-		const firstValidIndex = this._targetGroup.nCachedObjects_,
-			binding = this._bindings[ firstValidIndex ];
-
-		// and only call .getValue on the first
-		if ( binding !== undefined ) binding.getValue( array, offset );
-
-	}
-
-	setValue( array, offset ) {
-
-		const bindings = this._bindings;
-
-		for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {
-
-			bindings[ i ].setValue( array, offset );
-
-		}
-
-	}
-
-	bind() {
-
-		const bindings = this._bindings;
-
-		for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {
-
-			bindings[ i ].bind();
-
-		}
-
-	}
-
-	unbind() {
-
-		const bindings = this._bindings;
-
-		for ( let i = this._targetGroup.nCachedObjects_, n = bindings.length; i !== n; ++ i ) {
-
-			bindings[ i ].unbind();
-
-		}
-
-	}
-
-}
-
-// Note: This class uses a State pattern on a per-method basis:
-// 'bind' sets 'this.getValue' / 'setValue' and shadows the
-// prototype version of these methods with one that represents
-// the bound state. When the property is not found, the methods
-// become no-ops.
-class PropertyBinding {
-
-	constructor( rootNode, path, parsedPath ) {
-
-		this.path = path;
-		this.parsedPath = parsedPath || PropertyBinding.parseTrackName( path );
-
-		this.node = PropertyBinding.findNode( rootNode, this.parsedPath.nodeName );
-
-		this.rootNode = rootNode;
-
-		// initial state of these methods that calls 'bind'
-		this.getValue = this._getValue_unbound;
-		this.setValue = this._setValue_unbound;
-
-	}
-
-
-	static create( root, path, parsedPath ) {
-
-		if ( ! ( root && root.isAnimationObjectGroup ) ) {
-
-			return new PropertyBinding( root, path, parsedPath );
-
-		} else {
-
-			return new PropertyBinding.Composite( root, path, parsedPath );
-
-		}
-
-	}
-
-	/**
-	 * Replaces spaces with underscores and removes unsupported characters from
-	 * node names, to ensure compatibility with parseTrackName().
-	 *
-	 * @param {string} name Node name to be sanitized.
-	 * @return {string}
-	 */
-	static sanitizeNodeName( name ) {
-
-		return name.replace( /\s/g, '_' ).replace( _reservedRe, '' );
-
-	}
-
-	static parseTrackName( trackName ) {
-
-		const matches = _trackRe.exec( trackName );
-
-		if ( matches === null ) {
-
-			throw new Error( 'PropertyBinding: Cannot parse trackName: ' + trackName );
-
-		}
-
-		const results = {
-			// directoryName: matches[ 1 ], // (tschw) currently unused
-			nodeName: matches[ 2 ],
-			objectName: matches[ 3 ],
-			objectIndex: matches[ 4 ],
-			propertyName: matches[ 5 ], // required
-			propertyIndex: matches[ 6 ]
-		};
-
-		const lastDot = results.nodeName && results.nodeName.lastIndexOf( '.' );
-
-		if ( lastDot !== undefined && lastDot !== - 1 ) {
-
-			const objectName = results.nodeName.substring( lastDot + 1 );
-
-			// Object names must be checked against an allowlist. Otherwise, there
-			// is no way to parse 'foo.bar.baz': 'baz' must be a property, but
-			// 'bar' could be the objectName, or part of a nodeName (which can
-			// include '.' characters).
-			if ( _supportedObjectNames.indexOf( objectName ) !== - 1 ) {
-
-				results.nodeName = results.nodeName.substring( 0, lastDot );
-				results.objectName = objectName;
-
-			}
-
-		}
-
-		if ( results.propertyName === null || results.propertyName.length === 0 ) {
-
-			throw new Error( 'PropertyBinding: can not parse propertyName from trackName: ' + trackName );
-
-		}
-
-		return results;
-
-	}
-
-	static findNode( root, nodeName ) {
-
-		if ( nodeName === undefined || nodeName === '' || nodeName === '.' || nodeName === - 1 || nodeName === root.name || nodeName === root.uuid ) {
-
-			return root;
-
-		}
-
-		// search into skeleton bones.
-		if ( root.skeleton ) {
-
-			const bone = root.skeleton.getBoneByName( nodeName );
-
-			if ( bone !== undefined ) {
-
-				return bone;
-
-			}
-
-		}
-
-		// search into node subtree.
-		if ( root.children ) {
-
-			const searchNodeSubtree = function ( children ) {
-
-				for ( let i = 0; i < children.length; i ++ ) {
-
-					const childNode = children[ i ];
-
-					if ( childNode.name === nodeName || childNode.uuid === nodeName ) {
-
-						return childNode;
-
-					}
-
-					const result = searchNodeSubtree( childNode.children );
-
-					if ( result ) return result;
-
-				}
-
-				return null;
-
-			};
-
-			const subTreeNode = searchNodeSubtree( root.children );
-
-			if ( subTreeNode ) {
-
-				return subTreeNode;
-
-			}
-
-		}
-
-		return null;
-
-	}
-
-	// these are used to "bind" a nonexistent property
-	_getValue_unavailable() {}
-	_setValue_unavailable() {}
-
-	// Getters
-
-	_getValue_direct( buffer, offset ) {
-
-		buffer[ offset ] = this.targetObject[ this.propertyName ];
-
-	}
-
-	_getValue_array( buffer, offset ) {
-
-		const source = this.resolvedProperty;
-
-		for ( let i = 0, n = source.length; i !== n; ++ i ) {
-
-			buffer[ offset ++ ] = source[ i ];
-
-		}
-
-	}
-
-	_getValue_arrayElement( buffer, offset ) {
-
-		buffer[ offset ] = this.resolvedProperty[ this.propertyIndex ];
-
-	}
-
-	_getValue_toArray( buffer, offset ) {
-
-		this.resolvedProperty.toArray( buffer, offset );
-
-	}
-
-	// Direct
-
-	_setValue_direct( buffer, offset ) {
-
-		this.targetObject[ this.propertyName ] = buffer[ offset ];
-
-	}
-
-	_setValue_direct_setNeedsUpdate( buffer, offset ) {
-
-		this.targetObject[ this.propertyName ] = buffer[ offset ];
-		this.targetObject.needsUpdate = true;
-
-	}
-
-	_setValue_direct_setMatrixWorldNeedsUpdate( buffer, offset ) {
-
-		this.targetObject[ this.propertyName ] = buffer[ offset ];
-		this.targetObject.matrixWorldNeedsUpdate = true;
-
-	}
-
-	// EntireArray
-
-	_setValue_array( buffer, offset ) {
-
-		const dest = this.resolvedProperty;
-
-		for ( let i = 0, n = dest.length; i !== n; ++ i ) {
-
-			dest[ i ] = buffer[ offset ++ ];
-
-		}
-
-	}
-
-	_setValue_array_setNeedsUpdate( buffer, offset ) {
-
-		const dest = this.resolvedProperty;
-
-		for ( let i = 0, n = dest.length; i !== n; ++ i ) {
-
-			dest[ i ] = buffer[ offset ++ ];
-
-		}
-
-		this.targetObject.needsUpdate = true;
-
-	}
-
-	_setValue_array_setMatrixWorldNeedsUpdate( buffer, offset ) {
-
-		const dest = this.resolvedProperty;
-
-		for ( let i = 0, n = dest.length; i !== n; ++ i ) {
-
-			dest[ i ] = buffer[ offset ++ ];
-
-		}
-
-		this.targetObject.matrixWorldNeedsUpdate = true;
-
-	}
-
-	// ArrayElement
-
-	_setValue_arrayElement( buffer, offset ) {
-
-		this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];
-
-	}
-
-	_setValue_arrayElement_setNeedsUpdate( buffer, offset ) {
-
-		this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];
-		this.targetObject.needsUpdate = true;
-
-	}
-
-	_setValue_arrayElement_setMatrixWorldNeedsUpdate( buffer, offset ) {
-
-		this.resolvedProperty[ this.propertyIndex ] = buffer[ offset ];
-		this.targetObject.matrixWorldNeedsUpdate = true;
-
-	}
-
-	// HasToFromArray
-
-	_setValue_fromArray( buffer, offset ) {
-
-		this.resolvedProperty.fromArray( buffer, offset );
-
-	}
-
-	_setValue_fromArray_setNeedsUpdate( buffer, offset ) {
-
-		this.resolvedProperty.fromArray( buffer, offset );
-		this.targetObject.needsUpdate = true;
-
-	}
-
-	_setValue_fromArray_setMatrixWorldNeedsUpdate( buffer, offset ) {
-
-		this.resolvedProperty.fromArray( buffer, offset );
-		this.targetObject.matrixWorldNeedsUpdate = true;
-
-	}
-
-	_getValue_unbound( targetArray, offset ) {
-
-		this.bind();
-		this.getValue( targetArray, offset );
-
-	}
-
-	_setValue_unbound( sourceArray, offset ) {
-
-		this.bind();
-		this.setValue( sourceArray, offset );
-
-	}
-
-	// create getter / setter pair for a property in the scene graph
-	bind() {
-
-		let targetObject = this.node;
-		const parsedPath = this.parsedPath;
-
-		const objectName = parsedPath.objectName;
-		const propertyName = parsedPath.propertyName;
-		let propertyIndex = parsedPath.propertyIndex;
-
-		if ( ! targetObject ) {
-
-			targetObject = PropertyBinding.findNode( this.rootNode, parsedPath.nodeName );
-
-			this.node = targetObject;
-
-		}
-
-		// set fail state so we can just 'return' on error
-		this.getValue = this._getValue_unavailable;
-		this.setValue = this._setValue_unavailable;
-
-		// ensure there is a value node
-		if ( ! targetObject ) {
-
-			console.error( 'THREE.PropertyBinding: Trying to update node for track: ' + this.path + ' but it wasn\'t found.' );
-			return;
-
-		}
-
-		if ( objectName ) {
-
-			let objectIndex = parsedPath.objectIndex;
-
-			// special cases were we need to reach deeper into the hierarchy to get the face materials....
-			switch ( objectName ) {
-
-				case 'materials':
-
-					if ( ! targetObject.material ) {
-
-						console.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );
-						return;
-
-					}
-
-					if ( ! targetObject.material.materials ) {
-
-						console.error( 'THREE.PropertyBinding: Can not bind to material.materials as node.material does not have a materials array.', this );
-						return;
-
-					}
-
-					targetObject = targetObject.material.materials;
-
-					break;
-
-				case 'bones':
-
-					if ( ! targetObject.skeleton ) {
-
-						console.error( 'THREE.PropertyBinding: Can not bind to bones as node does not have a skeleton.', this );
-						return;
-
-					}
-
-					// potential future optimization: skip this if propertyIndex is already an integer
-					// and convert the integer string to a true integer.
-
-					targetObject = targetObject.skeleton.bones;
-
-					// support resolving morphTarget names into indices.
-					for ( let i = 0; i < targetObject.length; i ++ ) {
-
-						if ( targetObject[ i ].name === objectIndex ) {
-
-							objectIndex = i;
-							break;
-
-						}
-
-					}
-
-					break;
-
-				case 'map':
-
-					if ( 'map' in targetObject ) {
-
-						targetObject = targetObject.map;
-						break;
-
-					}
-
-					if ( ! targetObject.material ) {
-
-						console.error( 'THREE.PropertyBinding: Can not bind to material as node does not have a material.', this );
-						return;
-
-					}
-
-					if ( ! targetObject.material.map ) {
-
-						console.error( 'THREE.PropertyBinding: Can not bind to material.map as node.material does not have a map.', this );
-						return;
-
-					}
-
-					targetObject = targetObject.material.map;
-					break;
-
-				default:
-
-					if ( targetObject[ objectName ] === undefined ) {
-
-						console.error( 'THREE.PropertyBinding: Can not bind to objectName of node undefined.', this );
-						return;
-
-					}
-
-					targetObject = targetObject[ objectName ];
-
-			}
-
-
-			if ( objectIndex !== undefined ) {
-
-				if ( targetObject[ objectIndex ] === undefined ) {
-
-					console.error( 'THREE.PropertyBinding: Trying to bind to objectIndex of objectName, but is undefined.', this, targetObject );
-					return;
-
-				}
-
-				targetObject = targetObject[ objectIndex ];
-
-			}
-
-		}
-
-		// resolve property
-		const nodeProperty = targetObject[ propertyName ];
-
-		if ( nodeProperty === undefined ) {
-
-			const nodeName = parsedPath.nodeName;
-
-			console.error( 'THREE.PropertyBinding: Trying to update property for track: ' + nodeName +
-				'.' + propertyName + ' but it wasn\'t found.', targetObject );
-			return;
-
-		}
-
-		// determine versioning scheme
-		let versioning = this.Versioning.None;
-
-		this.targetObject = targetObject;
-
-		if ( targetObject.needsUpdate !== undefined ) { // material
-
-			versioning = this.Versioning.NeedsUpdate;
-
-		} else if ( targetObject.matrixWorldNeedsUpdate !== undefined ) { // node transform
-
-			versioning = this.Versioning.MatrixWorldNeedsUpdate;
-
-		}
-
-		// determine how the property gets bound
-		let bindingType = this.BindingType.Direct;
-
-		if ( propertyIndex !== undefined ) {
-
-			// access a sub element of the property array (only primitives are supported right now)
-
-			if ( propertyName === 'morphTargetInfluences' ) {
-
-				// potential optimization, skip this if propertyIndex is already an integer, and convert the integer string to a true integer.
-
-				// support resolving morphTarget names into indices.
-				if ( ! targetObject.geometry ) {
-
-					console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.', this );
-					return;
-
-				}
-
-				if ( ! targetObject.geometry.morphAttributes ) {
-
-					console.error( 'THREE.PropertyBinding: Can not bind to morphTargetInfluences because node does not have a geometry.morphAttributes.', this );
-					return;
-
-				}
-
-				if ( targetObject.morphTargetDictionary[ propertyIndex ] !== undefined ) {
-
-					propertyIndex = targetObject.morphTargetDictionary[ propertyIndex ];
-
-				}
-
-			}
-
-			bindingType = this.BindingType.ArrayElement;
-
-			this.resolvedProperty = nodeProperty;
-			this.propertyIndex = propertyIndex;
-
-		} else if ( nodeProperty.fromArray !== undefined && nodeProperty.toArray !== undefined ) {
-
-			// must use copy for Object3D.Euler/Quaternion
-
-			bindingType = this.BindingType.HasFromToArray;
-
-			this.resolvedProperty = nodeProperty;
-
-		} else if ( Array.isArray( nodeProperty ) ) {
-
-			bindingType = this.BindingType.EntireArray;
-
-			this.resolvedProperty = nodeProperty;
-
-		} else {
-
-			this.propertyName = propertyName;
-
-		}
-
-		// select getter / setter
-		this.getValue = this.GetterByBindingType[ bindingType ];
-		this.setValue = this.SetterByBindingTypeAndVersioning[ bindingType ][ versioning ];
-
-	}
-
-	unbind() {
-
-		this.node = null;
-
-		// back to the prototype version of getValue / setValue
-		// note: avoiding to mutate the shape of 'this' via 'delete'
-		this.getValue = this._getValue_unbound;
-		this.setValue = this._setValue_unbound;
-
-	}
-
-}
-
-PropertyBinding.Composite = Composite;
-
-PropertyBinding.prototype.BindingType = {
-	Direct: 0,
-	EntireArray: 1,
-	ArrayElement: 2,
-	HasFromToArray: 3
-};
-
-PropertyBinding.prototype.Versioning = {
-	None: 0,
-	NeedsUpdate: 1,
-	MatrixWorldNeedsUpdate: 2
-};
-
-PropertyBinding.prototype.GetterByBindingType = [
-
-	PropertyBinding.prototype._getValue_direct,
-	PropertyBinding.prototype._getValue_array,
-	PropertyBinding.prototype._getValue_arrayElement,
-	PropertyBinding.prototype._getValue_toArray,
-
-];
-
-PropertyBinding.prototype.SetterByBindingTypeAndVersioning = [
-
-	[
-		// Direct
-		PropertyBinding.prototype._setValue_direct,
-		PropertyBinding.prototype._setValue_direct_setNeedsUpdate,
-		PropertyBinding.prototype._setValue_direct_setMatrixWorldNeedsUpdate,
-
-	], [
-
-		// EntireArray
-
-		PropertyBinding.prototype._setValue_array,
-		PropertyBinding.prototype._setValue_array_setNeedsUpdate,
-		PropertyBinding.prototype._setValue_array_setMatrixWorldNeedsUpdate,
-
-	], [
-
-		// ArrayElement
-		PropertyBinding.prototype._setValue_arrayElement,
-		PropertyBinding.prototype._setValue_arrayElement_setNeedsUpdate,
-		PropertyBinding.prototype._setValue_arrayElement_setMatrixWorldNeedsUpdate,
-
-	], [
-
-		// HasToFromArray
-		PropertyBinding.prototype._setValue_fromArray,
-		PropertyBinding.prototype._setValue_fromArray_setNeedsUpdate,
-		PropertyBinding.prototype._setValue_fromArray_setMatrixWorldNeedsUpdate,
-
-	]
-
-];
-
-/**
- *
- * A group of objects that receives a shared animation state.
- *
- * Usage:
- *
- *  - Add objects you would otherwise pass as 'root' to the
- *    constructor or the .clipAction method of AnimationMixer.
- *
- *  - Instead pass this object as 'root'.
- *
- *  - You can also add and remove objects later when the mixer
- *    is running.
- *
- * Note:
- *
- *    Objects of this class appear as one object to the mixer,
- *    so cache control of the individual objects must be done
- *    on the group.
- *
- * Limitation:
- *
- *  - The animated properties must be compatible among the
- *    all objects in the group.
- *
- *  - A single property can either be controlled through a
- *    target group or directly, but not both.
- */
-
-class AnimationObjectGroup {
-
-	constructor() {
-
-		this.isAnimationObjectGroup = true;
-
-		this.uuid = generateUUID();
-
-		// cached objects followed by the active ones
-		this._objects = Array.prototype.slice.call( arguments );
-
-		this.nCachedObjects_ = 0; // threshold
-		// note: read by PropertyBinding.Composite
-
-		const indices = {};
-		this._indicesByUUID = indices; // for bookkeeping
-
-		for ( let i = 0, n = arguments.length; i !== n; ++ i ) {
-
-			indices[ arguments[ i ].uuid ] = i;
-
-		}
-
-		this._paths = []; // inside: string
-		this._parsedPaths = []; // inside: { we don't care, here }
-		this._bindings = []; // inside: Array< PropertyBinding >
-		this._bindingsIndicesByPath = {}; // inside: indices in these arrays
-
-		const scope = this;
-
-		this.stats = {
-
-			objects: {
-				get total() {
-
-					return scope._objects.length;
-
-				},
-				get inUse() {
-
-					return this.total - scope.nCachedObjects_;
-
-				}
-			},
-			get bindingsPerObject() {
-
-				return scope._bindings.length;
-
-			}
-
-		};
-
-	}
-
-	add() {
-
-		const objects = this._objects,
-			indicesByUUID = this._indicesByUUID,
-			paths = this._paths,
-			parsedPaths = this._parsedPaths,
-			bindings = this._bindings,
-			nBindings = bindings.length;
-
-		let knownObject = undefined,
-			nObjects = objects.length,
-			nCachedObjects = this.nCachedObjects_;
-
-		for ( let i = 0, n = arguments.length; i !== n; ++ i ) {
-
-			const object = arguments[ i ],
-				uuid = object.uuid;
-			let index = indicesByUUID[ uuid ];
-
-			if ( index === undefined ) {
-
-				// unknown object -> add it to the ACTIVE region
-
-				index = nObjects ++;
-				indicesByUUID[ uuid ] = index;
-				objects.push( object );
-
-				// accounting is done, now do the same for all bindings
-
-				for ( let j = 0, m = nBindings; j !== m; ++ j ) {
-
-					bindings[ j ].push( new PropertyBinding( object, paths[ j ], parsedPaths[ j ] ) );
-
-				}
-
-			} else if ( index < nCachedObjects ) {
-
-				knownObject = objects[ index ];
-
-				// move existing object to the ACTIVE region
-
-				const firstActiveIndex = -- nCachedObjects,
-					lastCachedObject = objects[ firstActiveIndex ];
-
-				indicesByUUID[ lastCachedObject.uuid ] = index;
-				objects[ index ] = lastCachedObject;
-
-				indicesByUUID[ uuid ] = firstActiveIndex;
-				objects[ firstActiveIndex ] = object;
-
-				// accounting is done, now do the same for all bindings
-
-				for ( let j = 0, m = nBindings; j !== m; ++ j ) {
-
-					const bindingsForPath = bindings[ j ],
-						lastCached = bindingsForPath[ firstActiveIndex ];
-
-					let binding = bindingsForPath[ index ];
-
-					bindingsForPath[ index ] = lastCached;
-
-					if ( binding === undefined ) {
-
-						// since we do not bother to create new bindings
-						// for objects that are cached, the binding may
-						// or may not exist
-
-						binding = new PropertyBinding( object, paths[ j ], parsedPaths[ j ] );
-
-					}
-
-					bindingsForPath[ firstActiveIndex ] = binding;
-
-				}
-
-			} else if ( objects[ index ] !== knownObject ) {
-
-				console.error( 'THREE.AnimationObjectGroup: Different objects with the same UUID ' +
-					'detected. Clean the caches or recreate your infrastructure when reloading scenes.' );
-
-			} // else the object is already where we want it to be
-
-		} // for arguments
-
-		this.nCachedObjects_ = nCachedObjects;
-
-	}
-
-	remove() {
-
-		const objects = this._objects,
-			indicesByUUID = this._indicesByUUID,
-			bindings = this._bindings,
-			nBindings = bindings.length;
-
-		let nCachedObjects = this.nCachedObjects_;
-
-		for ( let i = 0, n = arguments.length; i !== n; ++ i ) {
-
-			const object = arguments[ i ],
-				uuid = object.uuid,
-				index = indicesByUUID[ uuid ];
-
-			if ( index !== undefined && index >= nCachedObjects ) {
-
-				// move existing object into the CACHED region
-
-				const lastCachedIndex = nCachedObjects ++,
-					firstActiveObject = objects[ lastCachedIndex ];
-
-				indicesByUUID[ firstActiveObject.uuid ] = index;
-				objects[ index ] = firstActiveObject;
-
-				indicesByUUID[ uuid ] = lastCachedIndex;
-				objects[ lastCachedIndex ] = object;
-
-				// accounting is done, now do the same for all bindings
-
-				for ( let j = 0, m = nBindings; j !== m; ++ j ) {
-
-					const bindingsForPath = bindings[ j ],
-						firstActive = bindingsForPath[ lastCachedIndex ],
-						binding = bindingsForPath[ index ];
-
-					bindingsForPath[ index ] = firstActive;
-					bindingsForPath[ lastCachedIndex ] = binding;
-
-				}
-
-			}
-
-		} // for arguments
-
-		this.nCachedObjects_ = nCachedObjects;
-
-	}
-
-	// remove & forget
-	uncache() {
-
-		const objects = this._objects,
-			indicesByUUID = this._indicesByUUID,
-			bindings = this._bindings,
-			nBindings = bindings.length;
-
-		let nCachedObjects = this.nCachedObjects_,
-			nObjects = objects.length;
-
-		for ( let i = 0, n = arguments.length; i !== n; ++ i ) {
-
-			const object = arguments[ i ],
-				uuid = object.uuid,
-				index = indicesByUUID[ uuid ];
-
-			if ( index !== undefined ) {
-
-				delete indicesByUUID[ uuid ];
-
-				if ( index < nCachedObjects ) {
-
-					// object is cached, shrink the CACHED region
-
-					const firstActiveIndex = -- nCachedObjects,
-						lastCachedObject = objects[ firstActiveIndex ],
-						lastIndex = -- nObjects,
-						lastObject = objects[ lastIndex ];
-
-					// last cached object takes this object's place
-					indicesByUUID[ lastCachedObject.uuid ] = index;
-					objects[ index ] = lastCachedObject;
-
-					// last object goes to the activated slot and pop
-					indicesByUUID[ lastObject.uuid ] = firstActiveIndex;
-					objects[ firstActiveIndex ] = lastObject;
-					objects.pop();
-
-					// accounting is done, now do the same for all bindings
-
-					for ( let j = 0, m = nBindings; j !== m; ++ j ) {
-
-						const bindingsForPath = bindings[ j ],
-							lastCached = bindingsForPath[ firstActiveIndex ],
-							last = bindingsForPath[ lastIndex ];
-
-						bindingsForPath[ index ] = lastCached;
-						bindingsForPath[ firstActiveIndex ] = last;
-						bindingsForPath.pop();
-
-					}
-
-				} else {
-
-					// object is active, just swap with the last and pop
-
-					const lastIndex = -- nObjects,
-						lastObject = objects[ lastIndex ];
-
-					if ( lastIndex > 0 ) {
-
-						indicesByUUID[ lastObject.uuid ] = index;
-
-					}
-
-					objects[ index ] = lastObject;
-					objects.pop();
-
-					// accounting is done, now do the same for all bindings
-
-					for ( let j = 0, m = nBindings; j !== m; ++ j ) {
-
-						const bindingsForPath = bindings[ j ];
-
-						bindingsForPath[ index ] = bindingsForPath[ lastIndex ];
-						bindingsForPath.pop();
-
-					}
-
-				} // cached or active
-
-			} // if object is known
-
-		} // for arguments
-
-		this.nCachedObjects_ = nCachedObjects;
-
-	}
-
-	// Internal interface used by befriended PropertyBinding.Composite:
-
-	subscribe_( path, parsedPath ) {
-
-		// returns an array of bindings for the given path that is changed
-		// according to the contained objects in the group
-
-		const indicesByPath = this._bindingsIndicesByPath;
-		let index = indicesByPath[ path ];
-		const bindings = this._bindings;
-
-		if ( index !== undefined ) return bindings[ index ];
-
-		const paths = this._paths,
-			parsedPaths = this._parsedPaths,
-			objects = this._objects,
-			nObjects = objects.length,
-			nCachedObjects = this.nCachedObjects_,
-			bindingsForPath = new Array( nObjects );
-
-		index = bindings.length;
-
-		indicesByPath[ path ] = index;
-
-		paths.push( path );
-		parsedPaths.push( parsedPath );
-		bindings.push( bindingsForPath );
-
-		for ( let i = nCachedObjects, n = objects.length; i !== n; ++ i ) {
-
-			const object = objects[ i ];
-			bindingsForPath[ i ] = new PropertyBinding( object, path, parsedPath );
-
-		}
-
-		return bindingsForPath;
-
-	}
-
-	unsubscribe_( path ) {
-
-		// tells the group to forget about a property path and no longer
-		// update the array previously obtained with 'subscribe_'
-
-		const indicesByPath = this._bindingsIndicesByPath,
-			index = indicesByPath[ path ];
-
-		if ( index !== undefined ) {
-
-			const paths = this._paths,
-				parsedPaths = this._parsedPaths,
-				bindings = this._bindings,
-				lastBindingsIndex = bindings.length - 1,
-				lastBindings = bindings[ lastBindingsIndex ],
-				lastBindingsPath = path[ lastBindingsIndex ];
-
-			indicesByPath[ lastBindingsPath ] = index;
-
-			bindings[ index ] = lastBindings;
-			bindings.pop();
-
-			parsedPaths[ index ] = parsedPaths[ lastBindingsIndex ];
-			parsedPaths.pop();
-
-			paths[ index ] = paths[ lastBindingsIndex ];
-			paths.pop();
-
-		}
-
-	}
-
-}
-
-class AnimationAction {
-
-	constructor( mixer, clip, localRoot = null, blendMode = clip.blendMode ) {
-
-		this._mixer = mixer;
-		this._clip = clip;
-		this._localRoot = localRoot;
-		this.blendMode = blendMode;
-
-		const tracks = clip.tracks,
-			nTracks = tracks.length,
-			interpolants = new Array( nTracks );
-
-		const interpolantSettings = {
-			endingStart: ZeroCurvatureEnding,
-			endingEnd: ZeroCurvatureEnding
-		};
-
-		for ( let i = 0; i !== nTracks; ++ i ) {
-
-			const interpolant = tracks[ i ].createInterpolant( null );
-			interpolants[ i ] = interpolant;
-			interpolant.settings = interpolantSettings;
-
-		}
-
-		this._interpolantSettings = interpolantSettings;
-
-		this._interpolants = interpolants; // bound by the mixer
-
-		// inside: PropertyMixer (managed by the mixer)
-		this._propertyBindings = new Array( nTracks );
-
-		this._cacheIndex = null; // for the memory manager
-		this._byClipCacheIndex = null; // for the memory manager
-
-		this._timeScaleInterpolant = null;
-		this._weightInterpolant = null;
-
-		this.loop = LoopRepeat;
-		this._loopCount = - 1;
-
-		// global mixer time when the action is to be started
-		// it's set back to 'null' upon start of the action
-		this._startTime = null;
-
-		// scaled local time of the action
-		// gets clamped or wrapped to 0..clip.duration according to loop
-		this.time = 0;
-
-		this.timeScale = 1;
-		this._effectiveTimeScale = 1;
-
-		this.weight = 1;
-		this._effectiveWeight = 1;
-
-		this.repetitions = Infinity; // no. of repetitions when looping
-
-		this.paused = false; // true -> zero effective time scale
-		this.enabled = true; // false -> zero effective weight
-
-		this.clampWhenFinished = false;// keep feeding the last frame?
-
-		this.zeroSlopeAtStart = true;// for smooth interpolation w/o separate
-		this.zeroSlopeAtEnd = true;// clips for start, loop and end
-
-	}
-
-	// State & Scheduling
-
-	play() {
-
-		this._mixer._activateAction( this );
-
-		return this;
-
-	}
-
-	stop() {
-
-		this._mixer._deactivateAction( this );
-
-		return this.reset();
-
-	}
-
-	reset() {
-
-		this.paused = false;
-		this.enabled = true;
-
-		this.time = 0; // restart clip
-		this._loopCount = - 1;// forget previous loops
-		this._startTime = null;// forget scheduling
-
-		return this.stopFading().stopWarping();
-
-	}
-
-	isRunning() {
-
-		return this.enabled && ! this.paused && this.timeScale !== 0 &&
-			this._startTime === null && this._mixer._isActiveAction( this );
-
-	}
-
-	// return true when play has been called
-	isScheduled() {
-
-		return this._mixer._isActiveAction( this );
-
-	}
-
-	startAt( time ) {
-
-		this._startTime = time;
-
-		return this;
-
-	}
-
-	setLoop( mode, repetitions ) {
-
-		this.loop = mode;
-		this.repetitions = repetitions;
-
-		return this;
-
-	}
-
-	// Weight
-
-	// set the weight stopping any scheduled fading
-	// although .enabled = false yields an effective weight of zero, this
-	// method does *not* change .enabled, because it would be confusing
-	setEffectiveWeight( weight ) {
-
-		this.weight = weight;
-
-		// note: same logic as when updated at runtime
-		this._effectiveWeight = this.enabled ? weight : 0;
-
-		return this.stopFading();
-
-	}
-
-	// return the weight considering fading and .enabled
-	getEffectiveWeight() {
-
-		return this._effectiveWeight;
-
-	}
-
-	fadeIn( duration ) {
-
-		return this._scheduleFading( duration, 0, 1 );
-
-	}
-
-	fadeOut( duration ) {
-
-		return this._scheduleFading( duration, 1, 0 );
-
-	}
-
-	crossFadeFrom( fadeOutAction, duration, warp ) {
-
-		fadeOutAction.fadeOut( duration );
-		this.fadeIn( duration );
-
-		if ( warp ) {
-
-			const fadeInDuration = this._clip.duration,
-				fadeOutDuration = fadeOutAction._clip.duration,
-
-				startEndRatio = fadeOutDuration / fadeInDuration,
-				endStartRatio = fadeInDuration / fadeOutDuration;
-
-			fadeOutAction.warp( 1.0, startEndRatio, duration );
-			this.warp( endStartRatio, 1.0, duration );
-
-		}
-
-		return this;
-
-	}
-
-	crossFadeTo( fadeInAction, duration, warp ) {
-
-		return fadeInAction.crossFadeFrom( this, duration, warp );
-
-	}
-
-	stopFading() {
-
-		const weightInterpolant = this._weightInterpolant;
-
-		if ( weightInterpolant !== null ) {
-
-			this._weightInterpolant = null;
-			this._mixer._takeBackControlInterpolant( weightInterpolant );
-
-		}
-
-		return this;
-
-	}
-
-	// Time Scale Control
-
-	// set the time scale stopping any scheduled warping
-	// although .paused = true yields an effective time scale of zero, this
-	// method does *not* change .paused, because it would be confusing
-	setEffectiveTimeScale( timeScale ) {
-
-		this.timeScale = timeScale;
-		this._effectiveTimeScale = this.paused ? 0 : timeScale;
-
-		return this.stopWarping();
-
-	}
-
-	// return the time scale considering warping and .paused
-	getEffectiveTimeScale() {
-
-		return this._effectiveTimeScale;
-
-	}
-
-	setDuration( duration ) {
-
-		this.timeScale = this._clip.duration / duration;
-
-		return this.stopWarping();
-
-	}
-
-	syncWith( action ) {
-
-		this.time = action.time;
-		this.timeScale = action.timeScale;
-
-		return this.stopWarping();
-
-	}
-
-	halt( duration ) {
-
-		return this.warp( this._effectiveTimeScale, 0, duration );
-
-	}
-
-	warp( startTimeScale, endTimeScale, duration ) {
-
-		const mixer = this._mixer,
-			now = mixer.time,
-			timeScale = this.timeScale;
-
-		let interpolant = this._timeScaleInterpolant;
-
-		if ( interpolant === null ) {
-
-			interpolant = mixer._lendControlInterpolant();
-			this._timeScaleInterpolant = interpolant;
-
-		}
-
-		const times = interpolant.parameterPositions,
-			values = interpolant.sampleValues;
-
-		times[ 0 ] = now;
-		times[ 1 ] = now + duration;
-
-		values[ 0 ] = startTimeScale / timeScale;
-		values[ 1 ] = endTimeScale / timeScale;
-
-		return this;
-
-	}
-
-	stopWarping() {
-
-		const timeScaleInterpolant = this._timeScaleInterpolant;
-
-		if ( timeScaleInterpolant !== null ) {
-
-			this._timeScaleInterpolant = null;
-			this._mixer._takeBackControlInterpolant( timeScaleInterpolant );
-
-		}
-
-		return this;
-
-	}
-
-	// Object Accessors
-
-	getMixer() {
-
-		return this._mixer;
-
-	}
-
-	getClip() {
-
-		return this._clip;
-
-	}
-
-	getRoot() {
-
-		return this._localRoot || this._mixer._root;
-
-	}
-
-	// Interna
-
-	_update( time, deltaTime, timeDirection, accuIndex ) {
-
-		// called by the mixer
-
-		if ( ! this.enabled ) {
-
-			// call ._updateWeight() to update ._effectiveWeight
-
-			this._updateWeight( time );
-			return;
-
-		}
-
-		const startTime = this._startTime;
-
-		if ( startTime !== null ) {
-
-			// check for scheduled start of action
-
-			const timeRunning = ( time - startTime ) * timeDirection;
-			if ( timeRunning < 0 || timeDirection === 0 ) {
-
-				deltaTime = 0;
-
-			} else {
-
-
-				this._startTime = null; // unschedule
-				deltaTime = timeDirection * timeRunning;
-
-			}
-
-		}
-
-		// apply time scale and advance time
-
-		deltaTime *= this._updateTimeScale( time );
-		const clipTime = this._updateTime( deltaTime );
-
-		// note: _updateTime may disable the action resulting in
-		// an effective weight of 0
-
-		const weight = this._updateWeight( time );
-
-		if ( weight > 0 ) {
-
-			const interpolants = this._interpolants;
-			const propertyMixers = this._propertyBindings;
-
-			switch ( this.blendMode ) {
-
-				case AdditiveAnimationBlendMode:
-
-					for ( let j = 0, m = interpolants.length; j !== m; ++ j ) {
-
-						interpolants[ j ].evaluate( clipTime );
-						propertyMixers[ j ].accumulateAdditive( weight );
-
-					}
-
-					break;
-
-				case NormalAnimationBlendMode:
-				default:
-
-					for ( let j = 0, m = interpolants.length; j !== m; ++ j ) {
-
-						interpolants[ j ].evaluate( clipTime );
-						propertyMixers[ j ].accumulate( accuIndex, weight );
-
-					}
-
-			}
-
-		}
-
-	}
-
-	_updateWeight( time ) {
-
-		let weight = 0;
-
-		if ( this.enabled ) {
-
-			weight = this.weight;
-			const interpolant = this._weightInterpolant;
-
-			if ( interpolant !== null ) {
-
-				const interpolantValue = interpolant.evaluate( time )[ 0 ];
-
-				weight *= interpolantValue;
-
-				if ( time > interpolant.parameterPositions[ 1 ] ) {
-
-					this.stopFading();
-
-					if ( interpolantValue === 0 ) {
-
-						// faded out, disable
-						this.enabled = false;
-
-					}
-
-				}
-
-			}
-
-		}
-
-		this._effectiveWeight = weight;
-		return weight;
-
-	}
-
-	_updateTimeScale( time ) {
-
-		let timeScale = 0;
-
-		if ( ! this.paused ) {
-
-			timeScale = this.timeScale;
-
-			const interpolant = this._timeScaleInterpolant;
-
-			if ( interpolant !== null ) {
-
-				const interpolantValue = interpolant.evaluate( time )[ 0 ];
-
-				timeScale *= interpolantValue;
-
-				if ( time > interpolant.parameterPositions[ 1 ] ) {
-
-					this.stopWarping();
-
-					if ( timeScale === 0 ) {
-
-						// motion has halted, pause
-						this.paused = true;
-
-					} else {
-
-						// warp done - apply final time scale
-						this.timeScale = timeScale;
-
-					}
-
-				}
-
-			}
-
-		}
-
-		this._effectiveTimeScale = timeScale;
-		return timeScale;
-
-	}
-
-	_updateTime( deltaTime ) {
-
-		const duration = this._clip.duration;
-		const loop = this.loop;
-
-		let time = this.time + deltaTime;
-		let loopCount = this._loopCount;
-
-		const pingPong = ( loop === LoopPingPong );
-
-		if ( deltaTime === 0 ) {
-
-			if ( loopCount === - 1 ) return time;
-
-			return ( pingPong && ( loopCount & 1 ) === 1 ) ? duration - time : time;
-
-		}
-
-		if ( loop === LoopOnce ) {
-
-			if ( loopCount === - 1 ) {
-
-				// just started
-
-				this._loopCount = 0;
-				this._setEndings( true, true, false );
-
-			}
-
-			handle_stop: {
-
-				if ( time >= duration ) {
-
-					time = duration;
-
-				} else if ( time < 0 ) {
-
-					time = 0;
-
-				} else {
-
-					this.time = time;
-
-					break handle_stop;
-
-				}
-
-				if ( this.clampWhenFinished ) this.paused = true;
-				else this.enabled = false;
-
-				this.time = time;
-
-				this._mixer.dispatchEvent( {
-					type: 'finished', action: this,
-					direction: deltaTime < 0 ? - 1 : 1
-				} );
-
-			}
-
-		} else { // repetitive Repeat or PingPong
-
-			if ( loopCount === - 1 ) {
-
-				// just started
-
-				if ( deltaTime >= 0 ) {
-
-					loopCount = 0;
-
-					this._setEndings( true, this.repetitions === 0, pingPong );
-
-				} else {
-
-					// when looping in reverse direction, the initial
-					// transition through zero counts as a repetition,
-					// so leave loopCount at -1
-
-					this._setEndings( this.repetitions === 0, true, pingPong );
-
-				}
-
-			}
-
-			if ( time >= duration || time < 0 ) {
-
-				// wrap around
-
-				const loopDelta = Math.floor( time / duration ); // signed
-				time -= duration * loopDelta;
-
-				loopCount += Math.abs( loopDelta );
-
-				const pending = this.repetitions - loopCount;
-
-				if ( pending <= 0 ) {
-
-					// have to stop (switch state, clamp time, fire event)
-
-					if ( this.clampWhenFinished ) this.paused = true;
-					else this.enabled = false;
-
-					time = deltaTime > 0 ? duration : 0;
-
-					this.time = time;
-
-					this._mixer.dispatchEvent( {
-						type: 'finished', action: this,
-						direction: deltaTime > 0 ? 1 : - 1
-					} );
-
-				} else {
-
-					// keep running
-
-					if ( pending === 1 ) {
-
-						// entering the last round
-
-						const atStart = deltaTime < 0;
-						this._setEndings( atStart, ! atStart, pingPong );
-
-					} else {
-
-						this._setEndings( false, false, pingPong );
-
-					}
-
-					this._loopCount = loopCount;
-
-					this.time = time;
-
-					this._mixer.dispatchEvent( {
-						type: 'loop', action: this, loopDelta: loopDelta
-					} );
-
-				}
-
-			} else {
-
-				this.time = time;
-
-			}
-
-			if ( pingPong && ( loopCount & 1 ) === 1 ) {
-
-				// invert time for the "pong round"
-
-				return duration - time;
-
-			}
-
-		}
-
-		return time;
-
-	}
-
-	_setEndings( atStart, atEnd, pingPong ) {
-
-		const settings = this._interpolantSettings;
-
-		if ( pingPong ) {
-
-			settings.endingStart = ZeroSlopeEnding;
-			settings.endingEnd = ZeroSlopeEnding;
-
-		} else {
-
-			// assuming for LoopOnce atStart == atEnd == true
-
-			if ( atStart ) {
-
-				settings.endingStart = this.zeroSlopeAtStart ? ZeroSlopeEnding : ZeroCurvatureEnding;
-
-			} else {
-
-				settings.endingStart = WrapAroundEnding;
-
-			}
-
-			if ( atEnd ) {
-
-				settings.endingEnd = this.zeroSlopeAtEnd ? ZeroSlopeEnding : ZeroCurvatureEnding;
-
-			} else {
-
-				settings.endingEnd 	 = WrapAroundEnding;
-
-			}
-
-		}
-
-	}
-
-	_scheduleFading( duration, weightNow, weightThen ) {
-
-		const mixer = this._mixer, now = mixer.time;
-		let interpolant = this._weightInterpolant;
-
-		if ( interpolant === null ) {
-
-			interpolant = mixer._lendControlInterpolant();
-			this._weightInterpolant = interpolant;
-
-		}
-
-		const times = interpolant.parameterPositions,
-			values = interpolant.sampleValues;
-
-		times[ 0 ] = now;
-		values[ 0 ] = weightNow;
-		times[ 1 ] = now + duration;
-		values[ 1 ] = weightThen;
-
-		return this;
-
-	}
-
-}
-
-const _controlInterpolantsResultBuffer = new Float32Array( 1 );
-
-
-class AnimationMixer extends EventDispatcher {
-
-	constructor( root ) {
-
-		super();
-
-		this._root = root;
-		this._initMemoryManager();
-		this._accuIndex = 0;
-		this.time = 0;
-		this.timeScale = 1.0;
-
-	}
-
-	_bindAction( action, prototypeAction ) {
-
-		const root = action._localRoot || this._root,
-			tracks = action._clip.tracks,
-			nTracks = tracks.length,
-			bindings = action._propertyBindings,
-			interpolants = action._interpolants,
-			rootUuid = root.uuid,
-			bindingsByRoot = this._bindingsByRootAndName;
-
-		let bindingsByName = bindingsByRoot[ rootUuid ];
-
-		if ( bindingsByName === undefined ) {
-
-			bindingsByName = {};
-			bindingsByRoot[ rootUuid ] = bindingsByName;
-
-		}
-
-		for ( let i = 0; i !== nTracks; ++ i ) {
-
-			const track = tracks[ i ],
-				trackName = track.name;
-
-			let binding = bindingsByName[ trackName ];
-
-			if ( binding !== undefined ) {
-
-				++ binding.referenceCount;
-				bindings[ i ] = binding;
-
-			} else {
-
-				binding = bindings[ i ];
-
-				if ( binding !== undefined ) {
-
-					// existing binding, make sure the cache knows
-
-					if ( binding._cacheIndex === null ) {
-
-						++ binding.referenceCount;
-						this._addInactiveBinding( binding, rootUuid, trackName );
-
-					}
-
-					continue;
-
-				}
-
-				const path = prototypeAction && prototypeAction.
-					_propertyBindings[ i ].binding.parsedPath;
-
-				binding = new PropertyMixer(
-					PropertyBinding.create( root, trackName, path ),
-					track.ValueTypeName, track.getValueSize() );
-
-				++ binding.referenceCount;
-				this._addInactiveBinding( binding, rootUuid, trackName );
-
-				bindings[ i ] = binding;
-
-			}
-
-			interpolants[ i ].resultBuffer = binding.buffer;
-
-		}
-
-	}
-
-	_activateAction( action ) {
-
-		if ( ! this._isActiveAction( action ) ) {
-
-			if ( action._cacheIndex === null ) {
-
-				// this action has been forgotten by the cache, but the user
-				// appears to be still using it -> rebind
-
-				const rootUuid = ( action._localRoot || this._root ).uuid,
-					clipUuid = action._clip.uuid,
-					actionsForClip = this._actionsByClip[ clipUuid ];
-
-				this._bindAction( action,
-					actionsForClip && actionsForClip.knownActions[ 0 ] );
-
-				this._addInactiveAction( action, clipUuid, rootUuid );
-
-			}
-
-			const bindings = action._propertyBindings;
-
-			// increment reference counts / sort out state
-			for ( let i = 0, n = bindings.length; i !== n; ++ i ) {
-
-				const binding = bindings[ i ];
-
-				if ( binding.useCount ++ === 0 ) {
-
-					this._lendBinding( binding );
-					binding.saveOriginalState();
-
-				}
-
-			}
-
-			this._lendAction( action );
-
-		}
-
-	}
-
-	_deactivateAction( action ) {
-
-		if ( this._isActiveAction( action ) ) {
-
-			const bindings = action._propertyBindings;
-
-			// decrement reference counts / sort out state
-			for ( let i = 0, n = bindings.length; i !== n; ++ i ) {
-
-				const binding = bindings[ i ];
-
-				if ( -- binding.useCount === 0 ) {
-
-					binding.restoreOriginalState();
-					this._takeBackBinding( binding );
-
-				}
-
-			}
-
-			this._takeBackAction( action );
-
-		}
-
-	}
-
-	// Memory manager
-
-	_initMemoryManager() {
-
-		this._actions = []; // 'nActiveActions' followed by inactive ones
-		this._nActiveActions = 0;
-
-		this._actionsByClip = {};
-		// inside:
-		// {
-		// 	knownActions: Array< AnimationAction > - used as prototypes
-		// 	actionByRoot: AnimationAction - lookup
-		// }
-
-
-		this._bindings = []; // 'nActiveBindings' followed by inactive ones
-		this._nActiveBindings = 0;
-
-		this._bindingsByRootAndName = {}; // inside: Map< name, PropertyMixer >
-
-
-		this._controlInterpolants = []; // same game as above
-		this._nActiveControlInterpolants = 0;
-
-		const scope = this;
-
-		this.stats = {
-
-			actions: {
-				get total() {
-
-					return scope._actions.length;
-
-				},
-				get inUse() {
-
-					return scope._nActiveActions;
-
-				}
-			},
-			bindings: {
-				get total() {
-
-					return scope._bindings.length;
-
-				},
-				get inUse() {
-
-					return scope._nActiveBindings;
-
-				}
-			},
-			controlInterpolants: {
-				get total() {
-
-					return scope._controlInterpolants.length;
-
-				},
-				get inUse() {
-
-					return scope._nActiveControlInterpolants;
-
-				}
-			}
-
-		};
-
-	}
-
-	// Memory management for AnimationAction objects
-
-	_isActiveAction( action ) {
-
-		const index = action._cacheIndex;
-		return index !== null && index < this._nActiveActions;
-
-	}
-
-	_addInactiveAction( action, clipUuid, rootUuid ) {
-
-		const actions = this._actions,
-			actionsByClip = this._actionsByClip;
-
-		let actionsForClip = actionsByClip[ clipUuid ];
-
-		if ( actionsForClip === undefined ) {
-
-			actionsForClip = {
-
-				knownActions: [ action ],
-				actionByRoot: {}
-
-			};
-
-			action._byClipCacheIndex = 0;
-
-			actionsByClip[ clipUuid ] = actionsForClip;
-
-		} else {
-
-			const knownActions = actionsForClip.knownActions;
-
-			action._byClipCacheIndex = knownActions.length;
-			knownActions.push( action );
-
-		}
-
-		action._cacheIndex = actions.length;
-		actions.push( action );
-
-		actionsForClip.actionByRoot[ rootUuid ] = action;
-
-	}
-
-	_removeInactiveAction( action ) {
-
-		const actions = this._actions,
-			lastInactiveAction = actions[ actions.length - 1 ],
-			cacheIndex = action._cacheIndex;
-
-		lastInactiveAction._cacheIndex = cacheIndex;
-		actions[ cacheIndex ] = lastInactiveAction;
-		actions.pop();
-
-		action._cacheIndex = null;
-
-
-		const clipUuid = action._clip.uuid,
-			actionsByClip = this._actionsByClip,
-			actionsForClip = actionsByClip[ clipUuid ],
-			knownActionsForClip = actionsForClip.knownActions,
-
-			lastKnownAction =
-				knownActionsForClip[ knownActionsForClip.length - 1 ],
-
-			byClipCacheIndex = action._byClipCacheIndex;
-
-		lastKnownAction._byClipCacheIndex = byClipCacheIndex;
-		knownActionsForClip[ byClipCacheIndex ] = lastKnownAction;
-		knownActionsForClip.pop();
-
-		action._byClipCacheIndex = null;
-
-
-		const actionByRoot = actionsForClip.actionByRoot,
-			rootUuid = ( action._localRoot || this._root ).uuid;
-
-		delete actionByRoot[ rootUuid ];
-
-		if ( knownActionsForClip.length === 0 ) {
-
-			delete actionsByClip[ clipUuid ];
-
-		}
-
-		this._removeInactiveBindingsForAction( action );
-
-	}
-
-	_removeInactiveBindingsForAction( action ) {
-
-		const bindings = action._propertyBindings;
-
-		for ( let i = 0, n = bindings.length; i !== n; ++ i ) {
-
-			const binding = bindings[ i ];
-
-			if ( -- binding.referenceCount === 0 ) {
-
-				this._removeInactiveBinding( binding );
-
-			}
-
-		}
-
-	}
-
-	_lendAction( action ) {
-
-		// [ active actions |  inactive actions  ]
-		// [  active actions >| inactive actions ]
-		//                 s        a
-		//                  <-swap->
-		//                 a        s
-
-		const actions = this._actions,
-			prevIndex = action._cacheIndex,
-
-			lastActiveIndex = this._nActiveActions ++,
-
-			firstInactiveAction = actions[ lastActiveIndex ];
-
-		action._cacheIndex = lastActiveIndex;
-		actions[ lastActiveIndex ] = action;
-
-		firstInactiveAction._cacheIndex = prevIndex;
-		actions[ prevIndex ] = firstInactiveAction;
-
-	}
-
-	_takeBackAction( action ) {
-
-		// [  active actions  | inactive actions ]
-		// [ active actions |< inactive actions  ]
-		//        a        s
-		//         <-swap->
-		//        s        a
-
-		const actions = this._actions,
-			prevIndex = action._cacheIndex,
-
-			firstInactiveIndex = -- this._nActiveActions,
-
-			lastActiveAction = actions[ firstInactiveIndex ];
-
-		action._cacheIndex = firstInactiveIndex;
-		actions[ firstInactiveIndex ] = action;
-
-		lastActiveAction._cacheIndex = prevIndex;
-		actions[ prevIndex ] = lastActiveAction;
-
-	}
-
-	// Memory management for PropertyMixer objects
-
-	_addInactiveBinding( binding, rootUuid, trackName ) {
-
-		const bindingsByRoot = this._bindingsByRootAndName,
-			bindings = this._bindings;
-
-		let bindingByName = bindingsByRoot[ rootUuid ];
-
-		if ( bindingByName === undefined ) {
-
-			bindingByName = {};
-			bindingsByRoot[ rootUuid ] = bindingByName;
-
-		}
-
-		bindingByName[ trackName ] = binding;
-
-		binding._cacheIndex = bindings.length;
-		bindings.push( binding );
-
-	}
-
-	_removeInactiveBinding( binding ) {
-
-		const bindings = this._bindings,
-			propBinding = binding.binding,
-			rootUuid = propBinding.rootNode.uuid,
-			trackName = propBinding.path,
-			bindingsByRoot = this._bindingsByRootAndName,
-			bindingByName = bindingsByRoot[ rootUuid ],
-
-			lastInactiveBinding = bindings[ bindings.length - 1 ],
-			cacheIndex = binding._cacheIndex;
-
-		lastInactiveBinding._cacheIndex = cacheIndex;
-		bindings[ cacheIndex ] = lastInactiveBinding;
-		bindings.pop();
-
-		delete bindingByName[ trackName ];
-
-		if ( Object.keys( bindingByName ).length === 0 ) {
-
-			delete bindingsByRoot[ rootUuid ];
-
-		}
-
-	}
-
-	_lendBinding( binding ) {
-
-		const bindings = this._bindings,
-			prevIndex = binding._cacheIndex,
-
-			lastActiveIndex = this._nActiveBindings ++,
-
-			firstInactiveBinding = bindings[ lastActiveIndex ];
-
-		binding._cacheIndex = lastActiveIndex;
-		bindings[ lastActiveIndex ] = binding;
-
-		firstInactiveBinding._cacheIndex = prevIndex;
-		bindings[ prevIndex ] = firstInactiveBinding;
-
-	}
-
-	_takeBackBinding( binding ) {
-
-		const bindings = this._bindings,
-			prevIndex = binding._cacheIndex,
-
-			firstInactiveIndex = -- this._nActiveBindings,
-
-			lastActiveBinding = bindings[ firstInactiveIndex ];
-
-		binding._cacheIndex = firstInactiveIndex;
-		bindings[ firstInactiveIndex ] = binding;
-
-		lastActiveBinding._cacheIndex = prevIndex;
-		bindings[ prevIndex ] = lastActiveBinding;
-
-	}
-
-
-	// Memory management of Interpolants for weight and time scale
-
-	_lendControlInterpolant() {
-
-		const interpolants = this._controlInterpolants,
-			lastActiveIndex = this._nActiveControlInterpolants ++;
-
-		let interpolant = interpolants[ lastActiveIndex ];
-
-		if ( interpolant === undefined ) {
-
-			interpolant = new LinearInterpolant(
-				new Float32Array( 2 ), new Float32Array( 2 ),
-				1, _controlInterpolantsResultBuffer );
-
-			interpolant.__cacheIndex = lastActiveIndex;
-			interpolants[ lastActiveIndex ] = interpolant;
-
-		}
-
-		return interpolant;
-
-	}
-
-	_takeBackControlInterpolant( interpolant ) {
-
-		const interpolants = this._controlInterpolants,
-			prevIndex = interpolant.__cacheIndex,
-
-			firstInactiveIndex = -- this._nActiveControlInterpolants,
-
-			lastActiveInterpolant = interpolants[ firstInactiveIndex ];
-
-		interpolant.__cacheIndex = firstInactiveIndex;
-		interpolants[ firstInactiveIndex ] = interpolant;
-
-		lastActiveInterpolant.__cacheIndex = prevIndex;
-		interpolants[ prevIndex ] = lastActiveInterpolant;
-
-	}
-
-	// return an action for a clip optionally using a custom root target
-	// object (this method allocates a lot of dynamic memory in case a
-	// previously unknown clip/root combination is specified)
-	clipAction( clip, optionalRoot, blendMode ) {
-
-		const root = optionalRoot || this._root,
-			rootUuid = root.uuid;
-
-		let clipObject = typeof clip === 'string' ? AnimationClip.findByName( root, clip ) : clip;
-
-		const clipUuid = clipObject !== null ? clipObject.uuid : clip;
-
-		const actionsForClip = this._actionsByClip[ clipUuid ];
-		let prototypeAction = null;
-
-		if ( blendMode === undefined ) {
-
-			if ( clipObject !== null ) {
-
-				blendMode = clipObject.blendMode;
-
-			} else {
-
-				blendMode = NormalAnimationBlendMode;
-
-			}
-
-		}
-
-		if ( actionsForClip !== undefined ) {
-
-			const existingAction = actionsForClip.actionByRoot[ rootUuid ];
-
-			if ( existingAction !== undefined && existingAction.blendMode === blendMode ) {
-
-				return existingAction;
-
-			}
-
-			// we know the clip, so we don't have to parse all
-			// the bindings again but can just copy
-			prototypeAction = actionsForClip.knownActions[ 0 ];
-
-			// also, take the clip from the prototype action
-			if ( clipObject === null )
-				clipObject = prototypeAction._clip;
-
-		}
-
-		// clip must be known when specified via string
-		if ( clipObject === null ) return null;
-
-		// allocate all resources required to run it
-		const newAction = new AnimationAction( this, clipObject, optionalRoot, blendMode );
-
-		this._bindAction( newAction, prototypeAction );
-
-		// and make the action known to the memory manager
-		this._addInactiveAction( newAction, clipUuid, rootUuid );
-
-		return newAction;
-
-	}
-
-	// get an existing action
-	existingAction( clip, optionalRoot ) {
-
-		const root = optionalRoot || this._root,
-			rootUuid = root.uuid,
-
-			clipObject = typeof clip === 'string' ?
-				AnimationClip.findByName( root, clip ) : clip,
-
-			clipUuid = clipObject ? clipObject.uuid : clip,
-
-			actionsForClip = this._actionsByClip[ clipUuid ];
-
-		if ( actionsForClip !== undefined ) {
-
-			return actionsForClip.actionByRoot[ rootUuid ] || null;
-
-		}
-
-		return null;
-
-	}
-
-	// deactivates all previously scheduled actions
-	stopAllAction() {
-
-		const actions = this._actions,
-			nActions = this._nActiveActions;
-
-		for ( let i = nActions - 1; i >= 0; -- i ) {
-
-			actions[ i ].stop();
-
-		}
-
-		return this;
-
-	}
-
-	// advance the time and update apply the animation
-	update( deltaTime ) {
-
-		deltaTime *= this.timeScale;
-
-		const actions = this._actions,
-			nActions = this._nActiveActions,
-
-			time = this.time += deltaTime,
-			timeDirection = Math.sign( deltaTime ),
-
-			accuIndex = this._accuIndex ^= 1;
-
-		// run active actions
-
-		for ( let i = 0; i !== nActions; ++ i ) {
-
-			const action = actions[ i ];
-
-			action._update( time, deltaTime, timeDirection, accuIndex );
-
-		}
-
-		// update scene graph
-
-		const bindings = this._bindings,
-			nBindings = this._nActiveBindings;
-
-		for ( let i = 0; i !== nBindings; ++ i ) {
-
-			bindings[ i ].apply( accuIndex );
-
-		}
-
-		return this;
-
-	}
-
-	// Allows you to seek to a specific time in an animation.
-	setTime( timeInSeconds ) {
-
-		this.time = 0; // Zero out time attribute for AnimationMixer object;
-		for ( let i = 0; i < this._actions.length; i ++ ) {
-
-			this._actions[ i ].time = 0; // Zero out time attribute for all associated AnimationAction objects.
-
-		}
-
-		return this.update( timeInSeconds ); // Update used to set exact time. Returns "this" AnimationMixer object.
-
-	}
-
-	// return this mixer's root target object
-	getRoot() {
-
-		return this._root;
-
-	}
-
-	// free all resources specific to a particular clip
-	uncacheClip( clip ) {
-
-		const actions = this._actions,
-			clipUuid = clip.uuid,
-			actionsByClip = this._actionsByClip,
-			actionsForClip = actionsByClip[ clipUuid ];
-
-		if ( actionsForClip !== undefined ) {
-
-			// note: just calling _removeInactiveAction would mess up the
-			// iteration state and also require updating the state we can
-			// just throw away
-
-			const actionsToRemove = actionsForClip.knownActions;
-
-			for ( let i = 0, n = actionsToRemove.length; i !== n; ++ i ) {
-
-				const action = actionsToRemove[ i ];
-
-				this._deactivateAction( action );
-
-				const cacheIndex = action._cacheIndex,
-					lastInactiveAction = actions[ actions.length - 1 ];
-
-				action._cacheIndex = null;
-				action._byClipCacheIndex = null;
-
-				lastInactiveAction._cacheIndex = cacheIndex;
-				actions[ cacheIndex ] = lastInactiveAction;
-				actions.pop();
-
-				this._removeInactiveBindingsForAction( action );
-
-			}
-
-			delete actionsByClip[ clipUuid ];
-
-		}
-
-	}
-
-	// free all resources specific to a particular root target object
-	uncacheRoot( root ) {
-
-		const rootUuid = root.uuid,
-			actionsByClip = this._actionsByClip;
-
-		for ( const clipUuid in actionsByClip ) {
-
-			const actionByRoot = actionsByClip[ clipUuid ].actionByRoot,
-				action = actionByRoot[ rootUuid ];
-
-			if ( action !== undefined ) {
-
-				this._deactivateAction( action );
-				this._removeInactiveAction( action );
-
-			}
-
-		}
-
-		const bindingsByRoot = this._bindingsByRootAndName,
-			bindingByName = bindingsByRoot[ rootUuid ];
-
-		if ( bindingByName !== undefined ) {
-
-			for ( const trackName in bindingByName ) {
-
-				const binding = bindingByName[ trackName ];
-				binding.restoreOriginalState();
-				this._removeInactiveBinding( binding );
-
-			}
-
-		}
-
-	}
-
-	// remove a targeted clip from the cache
-	uncacheAction( clip, optionalRoot ) {
-
-		const action = this.existingAction( clip, optionalRoot );
-
-		if ( action !== null ) {
-
-			this._deactivateAction( action );
-			this._removeInactiveAction( action );
-
-		}
-
-	}
-
-}
-
-class Uniform {
-
-	constructor( value ) {
-
-		this.value = value;
-
-	}
-
-	clone() {
-
-		return new Uniform( this.value.clone === undefined ? this.value : this.value.clone() );
-
-	}
-
-}
-
-let id = 0;
-
-class UniformsGroup extends EventDispatcher {
-
-	constructor() {
-
-		super();
-
-		this.isUniformsGroup = true;
-
-		Object.defineProperty( this, 'id', { value: id ++ } );
-
-		this.name = '';
-
-		this.usage = StaticDrawUsage;
-		this.uniforms = [];
-
-	}
-
-	add( uniform ) {
-
-		this.uniforms.push( uniform );
-
-		return this;
-
-	}
-
-	remove( uniform ) {
-
-		const index = this.uniforms.indexOf( uniform );
-
-		if ( index !== - 1 ) this.uniforms.splice( index, 1 );
-
-		return this;
-
-	}
-
-	setName( name ) {
-
-		this.name = name;
-
-		return this;
-
-	}
-
-	setUsage( value ) {
-
-		this.usage = value;
-
-		return this;
-
-	}
-
-	dispose() {
-
-		this.dispatchEvent( { type: 'dispose' } );
-
-		return this;
-
-	}
-
-	copy( source ) {
-
-		this.name = source.name;
-		this.usage = source.usage;
-
-		const uniformsSource = source.uniforms;
-
-		this.uniforms.length = 0;
-
-		for ( let i = 0, l = uniformsSource.length; i < l; i ++ ) {
-
-			this.uniforms.push( uniformsSource[ i ].clone() );
-
-		}
-
-		return this;
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-}
-
-class InstancedInterleavedBuffer extends InterleavedBuffer {
-
-	constructor( array, stride, meshPerAttribute = 1 ) {
-
-		super( array, stride );
-
-		this.isInstancedInterleavedBuffer = true;
-
-		this.meshPerAttribute = meshPerAttribute;
-
-	}
-
-	copy( source ) {
-
-		super.copy( source );
-
-		this.meshPerAttribute = source.meshPerAttribute;
-
-		return this;
-
-	}
-
-	clone( data ) {
-
-		const ib = super.clone( data );
-
-		ib.meshPerAttribute = this.meshPerAttribute;
-
-		return ib;
-
-	}
-
-	toJSON( data ) {
-
-		const json = super.toJSON( data );
-
-		json.isInstancedInterleavedBuffer = true;
-		json.meshPerAttribute = this.meshPerAttribute;
-
-		return json;
-
-	}
-
-}
-
-class GLBufferAttribute {
-
-	constructor( buffer, type, itemSize, elementSize, count ) {
-
-		this.isGLBufferAttribute = true;
-
-		this.name = '';
-
-		this.buffer = buffer;
-		this.type = type;
-		this.itemSize = itemSize;
-		this.elementSize = elementSize;
-		this.count = count;
-
-		this.version = 0;
-
-	}
-
-	set needsUpdate( value ) {
-
-		if ( value === true ) this.version ++;
-
-	}
-
-	setBuffer( buffer ) {
-
-		this.buffer = buffer;
-
-		return this;
-
-	}
-
-	setType( type, elementSize ) {
-
-		this.type = type;
-		this.elementSize = elementSize;
-
-		return this;
-
-	}
-
-	setItemSize( itemSize ) {
-
-		this.itemSize = itemSize;
-
-		return this;
-
-	}
-
-	setCount( count ) {
-
-		this.count = count;
-
-		return this;
-
-	}
-
-}
-
-class Raycaster {
-
-	constructor( origin, direction, near = 0, far = Infinity ) {
-
-		this.ray = new Ray( origin, direction );
-		// direction is assumed to be normalized (for accurate distance calculations)
-
-		this.near = near;
-		this.far = far;
-		this.camera = null;
-		this.layers = new Layers();
-
-		this.params = {
-			Mesh: {},
-			Line: { threshold: 1 },
-			LOD: {},
-			Points: { threshold: 1 },
-			Sprite: {}
-		};
-
-	}
-
-	set( origin, direction ) {
-
-		// direction is assumed to be normalized (for accurate distance calculations)
-
-		this.ray.set( origin, direction );
-
-	}
-
-	setFromCamera( coords, camera ) {
-
-		if ( camera.isPerspectiveCamera ) {
-
-			this.ray.origin.setFromMatrixPosition( camera.matrixWorld );
-			this.ray.direction.set( coords.x, coords.y, 0.5 ).unproject( camera ).sub( this.ray.origin ).normalize();
-			this.camera = camera;
-
-		} else if ( camera.isOrthographicCamera ) {
-
-			this.ray.origin.set( coords.x, coords.y, ( camera.near + camera.far ) / ( camera.near - camera.far ) ).unproject( camera ); // set origin in plane of camera
-			this.ray.direction.set( 0, 0, - 1 ).transformDirection( camera.matrixWorld );
-			this.camera = camera;
-
-		} else {
-
-			console.error( 'THREE.Raycaster: Unsupported camera type: ' + camera.type );
-
-		}
-
-	}
-
-	intersectObject( object, recursive = true, intersects = [] ) {
-
-		intersectObject( object, this, intersects, recursive );
-
-		intersects.sort( ascSort );
-
-		return intersects;
-
-	}
-
-	intersectObjects( objects, recursive = true, intersects = [] ) {
-
-		for ( let i = 0, l = objects.length; i < l; i ++ ) {
-
-			intersectObject( objects[ i ], this, intersects, recursive );
-
-		}
-
-		intersects.sort( ascSort );
-
-		return intersects;
-
-	}
-
-}
-
-function ascSort( a, b ) {
-
-	return a.distance - b.distance;
-
-}
-
-function intersectObject( object, raycaster, intersects, recursive ) {
-
-	if ( object.layers.test( raycaster.layers ) ) {
-
-		object.raycast( raycaster, intersects );
-
-	}
-
-	if ( recursive === true ) {
-
-		const children = object.children;
-
-		for ( let i = 0, l = children.length; i < l; i ++ ) {
-
-			intersectObject( children[ i ], raycaster, intersects, true );
-
-		}
-
-	}
-
-}
-
-/**
- * Ref: https://en.wikipedia.org/wiki/Spherical_coordinate_system
- *
- * The polar angle (phi) is measured from the positive y-axis. The positive y-axis is up.
- * The azimuthal angle (theta) is measured from the positive z-axis.
- */
-
-class Spherical {
-
-	constructor( radius = 1, phi = 0, theta = 0 ) {
-
-		this.radius = radius;
-		this.phi = phi; // polar angle
-		this.theta = theta; // azimuthal angle
-
-		return this;
-
-	}
-
-	set( radius, phi, theta ) {
-
-		this.radius = radius;
-		this.phi = phi;
-		this.theta = theta;
-
-		return this;
-
-	}
-
-	copy( other ) {
-
-		this.radius = other.radius;
-		this.phi = other.phi;
-		this.theta = other.theta;
-
-		return this;
-
-	}
-
-	// restrict phi to be between EPS and PI-EPS
-	makeSafe() {
-
-		const EPS = 0.000001;
-		this.phi = Math.max( EPS, Math.min( Math.PI - EPS, this.phi ) );
-
-		return this;
-
-	}
-
-	setFromVector3( v ) {
-
-		return this.setFromCartesianCoords( v.x, v.y, v.z );
-
-	}
-
-	setFromCartesianCoords( x, y, z ) {
-
-		this.radius = Math.sqrt( x * x + y * y + z * z );
-
-		if ( this.radius === 0 ) {
-
-			this.theta = 0;
-			this.phi = 0;
-
-		} else {
-
-			this.theta = Math.atan2( x, z );
-			this.phi = Math.acos( clamp( y / this.radius, - 1, 1 ) );
-
-		}
-
-		return this;
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-}
-
-/**
- * Ref: https://en.wikipedia.org/wiki/Cylindrical_coordinate_system
- */
-
-class Cylindrical {
-
-	constructor( radius = 1, theta = 0, y = 0 ) {
-
-		this.radius = radius; // distance from the origin to a point in the x-z plane
-		this.theta = theta; // counterclockwise angle in the x-z plane measured in radians from the positive z-axis
-		this.y = y; // height above the x-z plane
-
-		return this;
-
-	}
-
-	set( radius, theta, y ) {
-
-		this.radius = radius;
-		this.theta = theta;
-		this.y = y;
-
-		return this;
-
-	}
-
-	copy( other ) {
-
-		this.radius = other.radius;
-		this.theta = other.theta;
-		this.y = other.y;
-
-		return this;
-
-	}
-
-	setFromVector3( v ) {
-
-		return this.setFromCartesianCoords( v.x, v.y, v.z );
-
-	}
-
-	setFromCartesianCoords( x, y, z ) {
-
-		this.radius = Math.sqrt( x * x + z * z );
-		this.theta = Math.atan2( x, z );
-		this.y = y;
-
-		return this;
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-}
-
-const _vector$4 = /*@__PURE__*/ new Vector2();
-
-class Box2 {
-
-	constructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {
-
-		this.isBox2 = true;
-
-		this.min = min;
-		this.max = max;
-
-	}
-
-	set( min, max ) {
-
-		this.min.copy( min );
-		this.max.copy( max );
-
-		return this;
-
-	}
-
-	setFromPoints( points ) {
-
-		this.makeEmpty();
-
-		for ( let i = 0, il = points.length; i < il; i ++ ) {
-
-			this.expandByPoint( points[ i ] );
-
-		}
-
-		return this;
-
-	}
-
-	setFromCenterAndSize( center, size ) {
-
-		const halfSize = _vector$4.copy( size ).multiplyScalar( 0.5 );
-		this.min.copy( center ).sub( halfSize );
-		this.max.copy( center ).add( halfSize );
-
-		return this;
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-	copy( box ) {
-
-		this.min.copy( box.min );
-		this.max.copy( box.max );
-
-		return this;
-
-	}
-
-	makeEmpty() {
-
-		this.min.x = this.min.y = + Infinity;
-		this.max.x = this.max.y = - Infinity;
-
-		return this;
-
-	}
-
-	isEmpty() {
-
-		// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes
-
-		return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y );
-
-	}
-
-	getCenter( target ) {
-
-		return this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );
-
-	}
-
-	getSize( target ) {
-
-		return this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );
-
-	}
-
-	expandByPoint( point ) {
-
-		this.min.min( point );
-		this.max.max( point );
-
-		return this;
-
-	}
-
-	expandByVector( vector ) {
-
-		this.min.sub( vector );
-		this.max.add( vector );
-
-		return this;
-
-	}
-
-	expandByScalar( scalar ) {
-
-		this.min.addScalar( - scalar );
-		this.max.addScalar( scalar );
-
-		return this;
-
-	}
-
-	containsPoint( point ) {
-
-		return point.x < this.min.x || point.x > this.max.x ||
-			point.y < this.min.y || point.y > this.max.y ? false : true;
-
-	}
-
-	containsBox( box ) {
-
-		return this.min.x <= box.min.x && box.max.x <= this.max.x &&
-			this.min.y <= box.min.y && box.max.y <= this.max.y;
-
-	}
-
-	getParameter( point, target ) {
-
-		// This can potentially have a divide by zero if the box
-		// has a size dimension of 0.
-
-		return target.set(
-			( point.x - this.min.x ) / ( this.max.x - this.min.x ),
-			( point.y - this.min.y ) / ( this.max.y - this.min.y )
-		);
-
-	}
-
-	intersectsBox( box ) {
-
-		// using 4 splitting planes to rule out intersections
-
-		return box.max.x < this.min.x || box.min.x > this.max.x ||
-			box.max.y < this.min.y || box.min.y > this.max.y ? false : true;
-
-	}
-
-	clampPoint( point, target ) {
-
-		return target.copy( point ).clamp( this.min, this.max );
-
-	}
-
-	distanceToPoint( point ) {
-
-		return this.clampPoint( point, _vector$4 ).distanceTo( point );
-
-	}
-
-	intersect( box ) {
-
-		this.min.max( box.min );
-		this.max.min( box.max );
-
-		if ( this.isEmpty() ) this.makeEmpty();
-
-		return this;
-
-	}
-
-	union( box ) {
-
-		this.min.min( box.min );
-		this.max.max( box.max );
-
-		return this;
-
-	}
-
-	translate( offset ) {
-
-		this.min.add( offset );
-		this.max.add( offset );
-
-		return this;
-
-	}
-
-	equals( box ) {
-
-		return box.min.equals( this.min ) && box.max.equals( this.max );
-
-	}
-
-}
-
-const _startP = /*@__PURE__*/ new Vector3();
-const _startEnd = /*@__PURE__*/ new Vector3();
-
-class Line3 {
-
-	constructor( start = new Vector3(), end = new Vector3() ) {
-
-		this.start = start;
-		this.end = end;
-
-	}
-
-	set( start, end ) {
-
-		this.start.copy( start );
-		this.end.copy( end );
-
-		return this;
-
-	}
-
-	copy( line ) {
-
-		this.start.copy( line.start );
-		this.end.copy( line.end );
-
-		return this;
-
-	}
-
-	getCenter( target ) {
-
-		return target.addVectors( this.start, this.end ).multiplyScalar( 0.5 );
-
-	}
-
-	delta( target ) {
-
-		return target.subVectors( this.end, this.start );
-
-	}
-
-	distanceSq() {
-
-		return this.start.distanceToSquared( this.end );
-
-	}
-
-	distance() {
-
-		return this.start.distanceTo( this.end );
-
-	}
-
-	at( t, target ) {
-
-		return this.delta( target ).multiplyScalar( t ).add( this.start );
-
-	}
-
-	closestPointToPointParameter( point, clampToLine ) {
-
-		_startP.subVectors( point, this.start );
-		_startEnd.subVectors( this.end, this.start );
-
-		const startEnd2 = _startEnd.dot( _startEnd );
-		const startEnd_startP = _startEnd.dot( _startP );
-
-		let t = startEnd_startP / startEnd2;
-
-		if ( clampToLine ) {
-
-			t = clamp( t, 0, 1 );
-
-		}
-
-		return t;
-
-	}
-
-	closestPointToPoint( point, clampToLine, target ) {
-
-		const t = this.closestPointToPointParameter( point, clampToLine );
-
-		return this.delta( target ).multiplyScalar( t ).add( this.start );
-
-	}
-
-	applyMatrix4( matrix ) {
-
-		this.start.applyMatrix4( matrix );
-		this.end.applyMatrix4( matrix );
-
-		return this;
-
-	}
-
-	equals( line ) {
-
-		return line.start.equals( this.start ) && line.end.equals( this.end );
-
-	}
-
-	clone() {
-
-		return new this.constructor().copy( this );
-
-	}
-
-}
-
-const _vector$3 = /*@__PURE__*/ new Vector3();
-
-class SpotLightHelper extends Object3D {
-
-	constructor( light, color ) {
-
-		super();
-
-		this.light = light;
-
-		this.matrix = light.matrixWorld;
-		this.matrixAutoUpdate = false;
-
-		this.color = color;
-
-		this.type = 'SpotLightHelper';
-
-		const geometry = new BufferGeometry();
-
-		const positions = [
-			0, 0, 0, 	0, 0, 1,
-			0, 0, 0, 	1, 0, 1,
-			0, 0, 0,	- 1, 0, 1,
-			0, 0, 0, 	0, 1, 1,
-			0, 0, 0, 	0, - 1, 1
-		];
-
-		for ( let i = 0, j = 1, l = 32; i < l; i ++, j ++ ) {
-
-			const p1 = ( i / l ) * Math.PI * 2;
-			const p2 = ( j / l ) * Math.PI * 2;
-
-			positions.push(
-				Math.cos( p1 ), Math.sin( p1 ), 1,
-				Math.cos( p2 ), Math.sin( p2 ), 1
-			);
-
-		}
-
-		geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );
-
-		const material = new LineBasicMaterial( { fog: false, toneMapped: false } );
-
-		this.cone = new LineSegments( geometry, material );
-		this.add( this.cone );
-
-		this.update();
-
-	}
-
-	dispose() {
-
-		this.cone.geometry.dispose();
-		this.cone.material.dispose();
-
-	}
-
-	update() {
-
-		this.light.updateWorldMatrix( true, false );
-		this.light.target.updateWorldMatrix( true, false );
-
-		const coneLength = this.light.distance ? this.light.distance : 1000;
-		const coneWidth = coneLength * Math.tan( this.light.angle );
-
-		this.cone.scale.set( coneWidth, coneWidth, coneLength );
-
-		_vector$3.setFromMatrixPosition( this.light.target.matrixWorld );
-
-		this.cone.lookAt( _vector$3 );
-
-		if ( this.color !== undefined ) {
-
-			this.cone.material.color.set( this.color );
-
-		} else {
-
-			this.cone.material.color.copy( this.light.color );
-
-		}
-
-	}
-
-}
-
-const _vector$2 = /*@__PURE__*/ new Vector3();
-const _boneMatrix = /*@__PURE__*/ new Matrix4();
-const _matrixWorldInv = /*@__PURE__*/ new Matrix4();
-
-
-class SkeletonHelper extends LineSegments {
-
-	constructor( object ) {
-
-		const bones = getBoneList( object );
-
-		const geometry = new BufferGeometry();
-
-		const vertices = [];
-		const colors = [];
-
-		const color1 = new Color( 0, 0, 1 );
-		const color2 = new Color( 0, 1, 0 );
-
-		for ( let i = 0; i < bones.length; i ++ ) {
-
-			const bone = bones[ i ];
-
-			if ( bone.parent && bone.parent.isBone ) {
-
-				vertices.push( 0, 0, 0 );
-				vertices.push( 0, 0, 0 );
-				colors.push( color1.r, color1.g, color1.b );
-				colors.push( color2.r, color2.g, color2.b );
-
-			}
-
-		}
-
-		geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );
-
-		const material = new LineBasicMaterial( { vertexColors: true, depthTest: false, depthWrite: false, toneMapped: false, transparent: true } );
-
-		super( geometry, material );
-
-		this.isSkeletonHelper = true;
-
-		this.type = 'SkeletonHelper';
-
-		this.root = object;
-		this.bones = bones;
-
-		this.matrix = object.matrixWorld;
-		this.matrixAutoUpdate = false;
-
-	}
-
-	updateMatrixWorld( force ) {
-
-		const bones = this.bones;
-
-		const geometry = this.geometry;
-		const position = geometry.getAttribute( 'position' );
-
-		_matrixWorldInv.copy( this.root.matrixWorld ).invert();
-
-		for ( let i = 0, j = 0; i < bones.length; i ++ ) {
-
-			const bone = bones[ i ];
-
-			if ( bone.parent && bone.parent.isBone ) {
-
-				_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.matrixWorld );
-				_vector$2.setFromMatrixPosition( _boneMatrix );
-				position.setXYZ( j, _vector$2.x, _vector$2.y, _vector$2.z );
-
-				_boneMatrix.multiplyMatrices( _matrixWorldInv, bone.parent.matrixWorld );
-				_vector$2.setFromMatrixPosition( _boneMatrix );
-				position.setXYZ( j + 1, _vector$2.x, _vector$2.y, _vector$2.z );
-
-				j += 2;
-
-			}
-
-		}
-
-		geometry.getAttribute( 'position' ).needsUpdate = true;
-
-		super.updateMatrixWorld( force );
-
-	}
-
-	dispose() {
-
-		this.geometry.dispose();
-		this.material.dispose();
-
-	}
-
-}
-
-
-function getBoneList( object ) {
-
-	const boneList = [];
-
-	if ( object.isBone === true ) {
-
-		boneList.push( object );
-
-	}
-
-	for ( let i = 0; i < object.children.length; i ++ ) {
-
-		boneList.push.apply( boneList, getBoneList( object.children[ i ] ) );
-
-	}
-
-	return boneList;
-
-}
-
-class PointLightHelper extends Mesh {
-
-	constructor( light, sphereSize, color ) {
-
-		const geometry = new SphereGeometry( sphereSize, 4, 2 );
-		const material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );
-
-		super( geometry, material );
-
-		this.light = light;
-
-		this.color = color;
-
-		this.type = 'PointLightHelper';
-
-		this.matrix = this.light.matrixWorld;
-		this.matrixAutoUpdate = false;
-
-		this.update();
-
-
-		/*
-	// TODO: delete this comment?
-	const distanceGeometry = new THREE.IcosahedronGeometry( 1, 2 );
-	const distanceMaterial = new THREE.MeshBasicMaterial( { color: hexColor, fog: false, wireframe: true, opacity: 0.1, transparent: true } );
-
-	this.lightSphere = new THREE.Mesh( bulbGeometry, bulbMaterial );
-	this.lightDistance = new THREE.Mesh( distanceGeometry, distanceMaterial );
-
-	const d = light.distance;
-
-	if ( d === 0.0 ) {
-
-		this.lightDistance.visible = false;
-
-	} else {
-
-		this.lightDistance.scale.set( d, d, d );
-
-	}
-
-	this.add( this.lightDistance );
-	*/
-
-	}
-
-	dispose() {
-
-		this.geometry.dispose();
-		this.material.dispose();
-
-	}
-
-	update() {
-
-		this.light.updateWorldMatrix( true, false );
-
-		if ( this.color !== undefined ) {
-
-			this.material.color.set( this.color );
-
-		} else {
-
-			this.material.color.copy( this.light.color );
-
-		}
-
-		/*
-		const d = this.light.distance;
-
-		if ( d === 0.0 ) {
-
-			this.lightDistance.visible = false;
-
-		} else {
-
-			this.lightDistance.visible = true;
-			this.lightDistance.scale.set( d, d, d );
-
-		}
-		*/
-
-	}
-
-}
-
-const _vector$1 = /*@__PURE__*/ new Vector3();
-const _color1 = /*@__PURE__*/ new Color();
-const _color2 = /*@__PURE__*/ new Color();
-
-class HemisphereLightHelper extends Object3D {
-
-	constructor( light, size, color ) {
-
-		super();
-
-		this.light = light;
-
-		this.matrix = light.matrixWorld;
-		this.matrixAutoUpdate = false;
-
-		this.color = color;
-
-		this.type = 'HemisphereLightHelper';
-
-		const geometry = new OctahedronGeometry( size );
-		geometry.rotateY( Math.PI * 0.5 );
-
-		this.material = new MeshBasicMaterial( { wireframe: true, fog: false, toneMapped: false } );
-		if ( this.color === undefined ) this.material.vertexColors = true;
-
-		const position = geometry.getAttribute( 'position' );
-		const colors = new Float32Array( position.count * 3 );
-
-		geometry.setAttribute( 'color', new BufferAttribute( colors, 3 ) );
-
-		this.add( new Mesh( geometry, this.material ) );
-
-		this.update();
-
-	}
-
-	dispose() {
-
-		this.children[ 0 ].geometry.dispose();
-		this.children[ 0 ].material.dispose();
-
-	}
-
-	update() {
-
-		const mesh = this.children[ 0 ];
-
-		if ( this.color !== undefined ) {
-
-			this.material.color.set( this.color );
-
-		} else {
-
-			const colors = mesh.geometry.getAttribute( 'color' );
-
-			_color1.copy( this.light.color );
-			_color2.copy( this.light.groundColor );
-
-			for ( let i = 0, l = colors.count; i < l; i ++ ) {
-
-				const color = ( i < ( l / 2 ) ) ? _color1 : _color2;
-
-				colors.setXYZ( i, color.r, color.g, color.b );
-
-			}
-
-			colors.needsUpdate = true;
-
-		}
-
-		this.light.updateWorldMatrix( true, false );
-
-		mesh.lookAt( _vector$1.setFromMatrixPosition( this.light.matrixWorld ).negate() );
-
-	}
-
-}
-
-class GridHelper extends LineSegments {
-
-	constructor( size = 10, divisions = 10, color1 = 0x444444, color2 = 0x888888 ) {
-
-		color1 = new Color( color1 );
-		color2 = new Color( color2 );
-
-		const center = divisions / 2;
-		const step = size / divisions;
-		const halfSize = size / 2;
-
-		const vertices = [], colors = [];
-
-		for ( let i = 0, j = 0, k = - halfSize; i <= divisions; i ++, k += step ) {
-
-			vertices.push( - halfSize, 0, k, halfSize, 0, k );
-			vertices.push( k, 0, - halfSize, k, 0, halfSize );
-
-			const color = i === center ? color1 : color2;
-
-			color.toArray( colors, j ); j += 3;
-			color.toArray( colors, j ); j += 3;
-			color.toArray( colors, j ); j += 3;
-			color.toArray( colors, j ); j += 3;
-
-		}
-
-		const geometry = new BufferGeometry();
-		geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );
-
-		const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );
-
-		super( geometry, material );
-
-		this.type = 'GridHelper';
-
-	}
-
-	dispose() {
-
-		this.geometry.dispose();
-		this.material.dispose();
-
-	}
-
-}
-
-class PolarGridHelper extends LineSegments {
-
-	constructor( radius = 10, sectors = 16, rings = 8, divisions = 64, color1 = 0x444444, color2 = 0x888888 ) {
-
-		color1 = new Color( color1 );
-		color2 = new Color( color2 );
-
-		const vertices = [];
-		const colors = [];
-
-		// create the sectors
-
-		if ( sectors > 1 ) {
-
-			for ( let i = 0; i < sectors; i ++ ) {
-
-				const v = ( i / sectors ) * ( Math.PI * 2 );
-
-				const x = Math.sin( v ) * radius;
-				const z = Math.cos( v ) * radius;
-
-				vertices.push( 0, 0, 0 );
-				vertices.push( x, 0, z );
-
-				const color = ( i & 1 ) ? color1 : color2;
-
-				colors.push( color.r, color.g, color.b );
-				colors.push( color.r, color.g, color.b );
-
-			}
-
-		}
-
-		// create the rings
-
-		for ( let i = 0; i < rings; i ++ ) {
-
-			const color = ( i & 1 ) ? color1 : color2;
-
-			const r = radius - ( radius / rings * i );
-
-			for ( let j = 0; j < divisions; j ++ ) {
-
-				// first vertex
-
-				let v = ( j / divisions ) * ( Math.PI * 2 );
-
-				let x = Math.sin( v ) * r;
-				let z = Math.cos( v ) * r;
-
-				vertices.push( x, 0, z );
-				colors.push( color.r, color.g, color.b );
-
-				// second vertex
-
-				v = ( ( j + 1 ) / divisions ) * ( Math.PI * 2 );
-
-				x = Math.sin( v ) * r;
-				z = Math.cos( v ) * r;
-
-				vertices.push( x, 0, z );
-				colors.push( color.r, color.g, color.b );
-
-			}
-
-		}
-
-		const geometry = new BufferGeometry();
-		geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );
-
-		const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );
-
-		super( geometry, material );
-
-		this.type = 'PolarGridHelper';
-
-	}
-
-	dispose() {
-
-		this.geometry.dispose();
-		this.material.dispose();
-
-	}
-
-}
-
-const _v1 = /*@__PURE__*/ new Vector3();
-const _v2 = /*@__PURE__*/ new Vector3();
-const _v3 = /*@__PURE__*/ new Vector3();
-
-class DirectionalLightHelper extends Object3D {
-
-	constructor( light, size, color ) {
-
-		super();
-
-		this.light = light;
-
-		this.matrix = light.matrixWorld;
-		this.matrixAutoUpdate = false;
-
-		this.color = color;
-
-		this.type = 'DirectionalLightHelper';
-
-		if ( size === undefined ) size = 1;
-
-		let geometry = new BufferGeometry();
-		geometry.setAttribute( 'position', new Float32BufferAttribute( [
-			- size, size, 0,
-			size, size, 0,
-			size, - size, 0,
-			- size, - size, 0,
-			- size, size, 0
-		], 3 ) );
-
-		const material = new LineBasicMaterial( { fog: false, toneMapped: false } );
-
-		this.lightPlane = new Line( geometry, material );
-		this.add( this.lightPlane );
-
-		geometry = new BufferGeometry();
-		geometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 0, 1 ], 3 ) );
-
-		this.targetLine = new Line( geometry, material );
-		this.add( this.targetLine );
-
-		this.update();
-
-	}
-
-	dispose() {
-
-		this.lightPlane.geometry.dispose();
-		this.lightPlane.material.dispose();
-		this.targetLine.geometry.dispose();
-		this.targetLine.material.dispose();
-
-	}
-
-	update() {
-
-		this.light.updateWorldMatrix( true, false );
-		this.light.target.updateWorldMatrix( true, false );
-
-		_v1.setFromMatrixPosition( this.light.matrixWorld );
-		_v2.setFromMatrixPosition( this.light.target.matrixWorld );
-		_v3.subVectors( _v2, _v1 );
-
-		this.lightPlane.lookAt( _v2 );
-
-		if ( this.color !== undefined ) {
-
-			this.lightPlane.material.color.set( this.color );
-			this.targetLine.material.color.set( this.color );
-
-		} else {
-
-			this.lightPlane.material.color.copy( this.light.color );
-			this.targetLine.material.color.copy( this.light.color );
-
-		}
-
-		this.targetLine.lookAt( _v2 );
-		this.targetLine.scale.z = _v3.length();
-
-	}
-
-}
-
-const _vector = /*@__PURE__*/ new Vector3();
-const _camera = /*@__PURE__*/ new Camera();
-
-/**
- *	- shows frustum, line of sight and up of the camera
- *	- suitable for fast updates
- * 	- based on frustum visualization in lightgl.js shadowmap example
- *		https://github.com/evanw/lightgl.js/blob/master/tests/shadowmap.html
- */
-
-class CameraHelper extends LineSegments {
-
-	constructor( camera ) {
-
-		const geometry = new BufferGeometry();
-		const material = new LineBasicMaterial( { color: 0xffffff, vertexColors: true, toneMapped: false } );
-
-		const vertices = [];
-		const colors = [];
-
-		const pointMap = {};
-
-		// near
-
-		addLine( 'n1', 'n2' );
-		addLine( 'n2', 'n4' );
-		addLine( 'n4', 'n3' );
-		addLine( 'n3', 'n1' );
-
-		// far
-
-		addLine( 'f1', 'f2' );
-		addLine( 'f2', 'f4' );
-		addLine( 'f4', 'f3' );
-		addLine( 'f3', 'f1' );
-
-		// sides
-
-		addLine( 'n1', 'f1' );
-		addLine( 'n2', 'f2' );
-		addLine( 'n3', 'f3' );
-		addLine( 'n4', 'f4' );
-
-		// cone
-
-		addLine( 'p', 'n1' );
-		addLine( 'p', 'n2' );
-		addLine( 'p', 'n3' );
-		addLine( 'p', 'n4' );
-
-		// up
-
-		addLine( 'u1', 'u2' );
-		addLine( 'u2', 'u3' );
-		addLine( 'u3', 'u1' );
-
-		// target
-
-		addLine( 'c', 't' );
-		addLine( 'p', 'c' );
-
-		// cross
-
-		addLine( 'cn1', 'cn2' );
-		addLine( 'cn3', 'cn4' );
-
-		addLine( 'cf1', 'cf2' );
-		addLine( 'cf3', 'cf4' );
-
-		function addLine( a, b ) {
-
-			addPoint( a );
-			addPoint( b );
-
-		}
-
-		function addPoint( id ) {
-
-			vertices.push( 0, 0, 0 );
-			colors.push( 0, 0, 0 );
-
-			if ( pointMap[ id ] === undefined ) {
-
-				pointMap[ id ] = [];
-
-			}
-
-			pointMap[ id ].push( ( vertices.length / 3 ) - 1 );
-
-		}
-
-		geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );
-
-		super( geometry, material );
-
-		this.type = 'CameraHelper';
-
-		this.camera = camera;
-		if ( this.camera.updateProjectionMatrix ) this.camera.updateProjectionMatrix();
-
-		this.matrix = camera.matrixWorld;
-		this.matrixAutoUpdate = false;
-
-		this.pointMap = pointMap;
-
-		this.update();
-
-		// colors
-
-		const colorFrustum = new Color( 0xffaa00 );
-		const colorCone = new Color( 0xff0000 );
-		const colorUp = new Color( 0x00aaff );
-		const colorTarget = new Color( 0xffffff );
-		const colorCross = new Color( 0x333333 );
-
-		this.setColors( colorFrustum, colorCone, colorUp, colorTarget, colorCross );
-
-	}
-
-	setColors( frustum, cone, up, target, cross ) {
-
-		const geometry = this.geometry;
-
-		const colorAttribute = geometry.getAttribute( 'color' );
-
-		// near
-
-		colorAttribute.setXYZ( 0, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 1, frustum.r, frustum.g, frustum.b ); // n1, n2
-		colorAttribute.setXYZ( 2, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 3, frustum.r, frustum.g, frustum.b ); // n2, n4
-		colorAttribute.setXYZ( 4, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 5, frustum.r, frustum.g, frustum.b ); // n4, n3
-		colorAttribute.setXYZ( 6, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 7, frustum.r, frustum.g, frustum.b ); // n3, n1
-
-		// far
-
-		colorAttribute.setXYZ( 8, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 9, frustum.r, frustum.g, frustum.b ); // f1, f2
-		colorAttribute.setXYZ( 10, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 11, frustum.r, frustum.g, frustum.b ); // f2, f4
-		colorAttribute.setXYZ( 12, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 13, frustum.r, frustum.g, frustum.b ); // f4, f3
-		colorAttribute.setXYZ( 14, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 15, frustum.r, frustum.g, frustum.b ); // f3, f1
-
-		// sides
-
-		colorAttribute.setXYZ( 16, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 17, frustum.r, frustum.g, frustum.b ); // n1, f1
-		colorAttribute.setXYZ( 18, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 19, frustum.r, frustum.g, frustum.b ); // n2, f2
-		colorAttribute.setXYZ( 20, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 21, frustum.r, frustum.g, frustum.b ); // n3, f3
-		colorAttribute.setXYZ( 22, frustum.r, frustum.g, frustum.b ); colorAttribute.setXYZ( 23, frustum.r, frustum.g, frustum.b ); // n4, f4
-
-		// cone
-
-		colorAttribute.setXYZ( 24, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 25, cone.r, cone.g, cone.b ); // p, n1
-		colorAttribute.setXYZ( 26, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 27, cone.r, cone.g, cone.b ); // p, n2
-		colorAttribute.setXYZ( 28, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 29, cone.r, cone.g, cone.b ); // p, n3
-		colorAttribute.setXYZ( 30, cone.r, cone.g, cone.b ); colorAttribute.setXYZ( 31, cone.r, cone.g, cone.b ); // p, n4
-
-		// up
-
-		colorAttribute.setXYZ( 32, up.r, up.g, up.b ); colorAttribute.setXYZ( 33, up.r, up.g, up.b ); // u1, u2
-		colorAttribute.setXYZ( 34, up.r, up.g, up.b ); colorAttribute.setXYZ( 35, up.r, up.g, up.b ); // u2, u3
-		colorAttribute.setXYZ( 36, up.r, up.g, up.b ); colorAttribute.setXYZ( 37, up.r, up.g, up.b ); // u3, u1
-
-		// target
-
-		colorAttribute.setXYZ( 38, target.r, target.g, target.b ); colorAttribute.setXYZ( 39, target.r, target.g, target.b ); // c, t
-		colorAttribute.setXYZ( 40, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 41, cross.r, cross.g, cross.b ); // p, c
-
-		// cross
-
-		colorAttribute.setXYZ( 42, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 43, cross.r, cross.g, cross.b ); // cn1, cn2
-		colorAttribute.setXYZ( 44, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 45, cross.r, cross.g, cross.b ); // cn3, cn4
-
-		colorAttribute.setXYZ( 46, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 47, cross.r, cross.g, cross.b ); // cf1, cf2
-		colorAttribute.setXYZ( 48, cross.r, cross.g, cross.b ); colorAttribute.setXYZ( 49, cross.r, cross.g, cross.b ); // cf3, cf4
-
-		colorAttribute.needsUpdate = true;
-
-	}
-
-	update() {
-
-		const geometry = this.geometry;
-		const pointMap = this.pointMap;
-
-		const w = 1, h = 1;
-
-		// we need just camera projection matrix inverse
-		// world matrix must be identity
-
-		_camera.projectionMatrixInverse.copy( this.camera.projectionMatrixInverse );
-
-		// center / target
-
-		setPoint( 'c', pointMap, geometry, _camera, 0, 0, - 1 );
-		setPoint( 't', pointMap, geometry, _camera, 0, 0, 1 );
-
-		// near
-
-		setPoint( 'n1', pointMap, geometry, _camera, - w, - h, - 1 );
-		setPoint( 'n2', pointMap, geometry, _camera, w, - h, - 1 );
-		setPoint( 'n3', pointMap, geometry, _camera, - w, h, - 1 );
-		setPoint( 'n4', pointMap, geometry, _camera, w, h, - 1 );
-
-		// far
-
-		setPoint( 'f1', pointMap, geometry, _camera, - w, - h, 1 );
-		setPoint( 'f2', pointMap, geometry, _camera, w, - h, 1 );
-		setPoint( 'f3', pointMap, geometry, _camera, - w, h, 1 );
-		setPoint( 'f4', pointMap, geometry, _camera, w, h, 1 );
-
-		// up
-
-		setPoint( 'u1', pointMap, geometry, _camera, w * 0.7, h * 1.1, - 1 );
-		setPoint( 'u2', pointMap, geometry, _camera, - w * 0.7, h * 1.1, - 1 );
-		setPoint( 'u3', pointMap, geometry, _camera, 0, h * 2, - 1 );
-
-		// cross
-
-		setPoint( 'cf1', pointMap, geometry, _camera, - w, 0, 1 );
-		setPoint( 'cf2', pointMap, geometry, _camera, w, 0, 1 );
-		setPoint( 'cf3', pointMap, geometry, _camera, 0, - h, 1 );
-		setPoint( 'cf4', pointMap, geometry, _camera, 0, h, 1 );
-
-		setPoint( 'cn1', pointMap, geometry, _camera, - w, 0, - 1 );
-		setPoint( 'cn2', pointMap, geometry, _camera, w, 0, - 1 );
-		setPoint( 'cn3', pointMap, geometry, _camera, 0, - h, - 1 );
-		setPoint( 'cn4', pointMap, geometry, _camera, 0, h, - 1 );
-
-		geometry.getAttribute( 'position' ).needsUpdate = true;
-
-	}
-
-	dispose() {
-
-		this.geometry.dispose();
-		this.material.dispose();
-
-	}
-
-}
-
-
-function setPoint( point, pointMap, geometry, camera, x, y, z ) {
-
-	_vector.set( x, y, z ).unproject( camera );
-
-	const points = pointMap[ point ];
-
-	if ( points !== undefined ) {
-
-		const position = geometry.getAttribute( 'position' );
-
-		for ( let i = 0, l = points.length; i < l; i ++ ) {
-
-			position.setXYZ( points[ i ], _vector.x, _vector.y, _vector.z );
-
-		}
-
-	}
-
-}
-
-const _box = /*@__PURE__*/ new Box3();
-
-class BoxHelper extends LineSegments {
-
-	constructor( object, color = 0xffff00 ) {
-
-		const indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );
-		const positions = new Float32Array( 8 * 3 );
-
-		const geometry = new BufferGeometry();
-		geometry.setIndex( new BufferAttribute( indices, 1 ) );
-		geometry.setAttribute( 'position', new BufferAttribute( positions, 3 ) );
-
-		super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );
-
-		this.object = object;
-		this.type = 'BoxHelper';
-
-		this.matrixAutoUpdate = false;
-
-		this.update();
-
-	}
-
-	update( object ) {
-
-		if ( object !== undefined ) {
-
-			console.warn( 'THREE.BoxHelper: .update() has no longer arguments.' );
-
-		}
-
-		if ( this.object !== undefined ) {
-
-			_box.setFromObject( this.object );
-
-		}
-
-		if ( _box.isEmpty() ) return;
-
-		const min = _box.min;
-		const max = _box.max;
-
-		/*
-			5____4
-		1/___0/|
-		| 6__|_7
-		2/___3/
-
-		0: max.x, max.y, max.z
-		1: min.x, max.y, max.z
-		2: min.x, min.y, max.z
-		3: max.x, min.y, max.z
-		4: max.x, max.y, min.z
-		5: min.x, max.y, min.z
-		6: min.x, min.y, min.z
-		7: max.x, min.y, min.z
-		*/
-
-		const position = this.geometry.attributes.position;
-		const array = position.array;
-
-		array[ 0 ] = max.x; array[ 1 ] = max.y; array[ 2 ] = max.z;
-		array[ 3 ] = min.x; array[ 4 ] = max.y; array[ 5 ] = max.z;
-		array[ 6 ] = min.x; array[ 7 ] = min.y; array[ 8 ] = max.z;
-		array[ 9 ] = max.x; array[ 10 ] = min.y; array[ 11 ] = max.z;
-		array[ 12 ] = max.x; array[ 13 ] = max.y; array[ 14 ] = min.z;
-		array[ 15 ] = min.x; array[ 16 ] = max.y; array[ 17 ] = min.z;
-		array[ 18 ] = min.x; array[ 19 ] = min.y; array[ 20 ] = min.z;
-		array[ 21 ] = max.x; array[ 22 ] = min.y; array[ 23 ] = min.z;
-
-		position.needsUpdate = true;
-
-		this.geometry.computeBoundingSphere();
-
-	}
-
-	setFromObject( object ) {
-
-		this.object = object;
-		this.update();
-
-		return this;
-
-	}
-
-	copy( source, recursive ) {
-
-		super.copy( source, recursive );
-
-		this.object = source.object;
-
-		return this;
-
-	}
-
-	dispose() {
-
-		this.geometry.dispose();
-		this.material.dispose();
-
-	}
-
-}
-
-class Box3Helper extends LineSegments {
-
-	constructor( box, color = 0xffff00 ) {
-
-		const indices = new Uint16Array( [ 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 ] );
-
-		const positions = [ 1, 1, 1, - 1, 1, 1, - 1, - 1, 1, 1, - 1, 1, 1, 1, - 1, - 1, 1, - 1, - 1, - 1, - 1, 1, - 1, - 1 ];
-
-		const geometry = new BufferGeometry();
-
-		geometry.setIndex( new BufferAttribute( indices, 1 ) );
-
-		geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );
-
-		super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );
-
-		this.box = box;
-
-		this.type = 'Box3Helper';
-
-		this.geometry.computeBoundingSphere();
-
-	}
-
-	updateMatrixWorld( force ) {
-
-		const box = this.box;
-
-		if ( box.isEmpty() ) return;
-
-		box.getCenter( this.position );
-
-		box.getSize( this.scale );
-
-		this.scale.multiplyScalar( 0.5 );
-
-		super.updateMatrixWorld( force );
-
-	}
-
-	dispose() {
-
-		this.geometry.dispose();
-		this.material.dispose();
-
-	}
-
-}
-
-class PlaneHelper extends Line {
-
-	constructor( plane, size = 1, hex = 0xffff00 ) {
-
-		const color = hex;
-
-		const positions = [ 1, - 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, - 1, 0, 1, 1, 0 ];
-
-		const geometry = new BufferGeometry();
-		geometry.setAttribute( 'position', new Float32BufferAttribute( positions, 3 ) );
-		geometry.computeBoundingSphere();
-
-		super( geometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );
-
-		this.type = 'PlaneHelper';
-
-		this.plane = plane;
-
-		this.size = size;
-
-		const positions2 = [ 1, 1, 0, - 1, 1, 0, - 1, - 1, 0, 1, 1, 0, - 1, - 1, 0, 1, - 1, 0 ];
-
-		const geometry2 = new BufferGeometry();
-		geometry2.setAttribute( 'position', new Float32BufferAttribute( positions2, 3 ) );
-		geometry2.computeBoundingSphere();
-
-		this.add( new Mesh( geometry2, new MeshBasicMaterial( { color: color, opacity: 0.2, transparent: true, depthWrite: false, toneMapped: false } ) ) );
-
-	}
-
-	updateMatrixWorld( force ) {
-
-		this.position.set( 0, 0, 0 );
-
-		this.scale.set( 0.5 * this.size, 0.5 * this.size, 1 );
-
-		this.lookAt( this.plane.normal );
-
-		this.translateZ( - this.plane.constant );
-
-		super.updateMatrixWorld( force );
-
-	}
-
-	dispose() {
-
-		this.geometry.dispose();
-		this.material.dispose();
-		this.children[ 0 ].geometry.dispose();
-		this.children[ 0 ].material.dispose();
-
-	}
-
-}
-
-const _axis = /*@__PURE__*/ new Vector3();
-let _lineGeometry, _coneGeometry;
-
-class ArrowHelper extends Object3D {
-
-	// dir is assumed to be normalized
-
-	constructor( dir = new Vector3( 0, 0, 1 ), origin = new Vector3( 0, 0, 0 ), length = 1, color = 0xffff00, headLength = length * 0.2, headWidth = headLength * 0.2 ) {
-
-		super();
-
-		this.type = 'ArrowHelper';
-
-		if ( _lineGeometry === undefined ) {
-
-			_lineGeometry = new BufferGeometry();
-			_lineGeometry.setAttribute( 'position', new Float32BufferAttribute( [ 0, 0, 0, 0, 1, 0 ], 3 ) );
-
-			_coneGeometry = new CylinderGeometry( 0, 0.5, 1, 5, 1 );
-			_coneGeometry.translate( 0, - 0.5, 0 );
-
-		}
-
-		this.position.copy( origin );
-
-		this.line = new Line( _lineGeometry, new LineBasicMaterial( { color: color, toneMapped: false } ) );
-		this.line.matrixAutoUpdate = false;
-		this.add( this.line );
-
-		this.cone = new Mesh( _coneGeometry, new MeshBasicMaterial( { color: color, toneMapped: false } ) );
-		this.cone.matrixAutoUpdate = false;
-		this.add( this.cone );
-
-		this.setDirection( dir );
-		this.setLength( length, headLength, headWidth );
-
-	}
-
-	setDirection( dir ) {
-
-		// dir is assumed to be normalized
-
-		if ( dir.y > 0.99999 ) {
-
-			this.quaternion.set( 0, 0, 0, 1 );
-
-		} else if ( dir.y < - 0.99999 ) {
-
-			this.quaternion.set( 1, 0, 0, 0 );
-
-		} else {
-
-			_axis.set( dir.z, 0, - dir.x ).normalize();
-
-			const radians = Math.acos( dir.y );
-
-			this.quaternion.setFromAxisAngle( _axis, radians );
-
-		}
-
-	}
-
-	setLength( length, headLength = length * 0.2, headWidth = headLength * 0.2 ) {
-
-		this.line.scale.set( 1, Math.max( 0.0001, length - headLength ), 1 ); // see #17458
-		this.line.updateMatrix();
-
-		this.cone.scale.set( headWidth, headLength, headWidth );
-		this.cone.position.y = length;
-		this.cone.updateMatrix();
-
-	}
-
-	setColor( color ) {
-
-		this.line.material.color.set( color );
-		this.cone.material.color.set( color );
-
-	}
-
-	copy( source ) {
-
-		super.copy( source, false );
-
-		this.line.copy( source.line );
-		this.cone.copy( source.cone );
-
-		return this;
-
-	}
-
-	dispose() {
-
-		this.line.geometry.dispose();
-		this.line.material.dispose();
-		this.cone.geometry.dispose();
-		this.cone.material.dispose();
-
-	}
-
-}
-
-class AxesHelper extends LineSegments {
-
-	constructor( size = 1 ) {
-
-		const vertices = [
-			0, 0, 0,	size, 0, 0,
-			0, 0, 0,	0, size, 0,
-			0, 0, 0,	0, 0, size
-		];
-
-		const colors = [
-			1, 0, 0,	1, 0.6, 0,
-			0, 1, 0,	0.6, 1, 0,
-			0, 0, 1,	0, 0.6, 1
-		];
-
-		const geometry = new BufferGeometry();
-		geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
-		geometry.setAttribute( 'color', new Float32BufferAttribute( colors, 3 ) );
-
-		const material = new LineBasicMaterial( { vertexColors: true, toneMapped: false } );
-
-		super( geometry, material );
-
-		this.type = 'AxesHelper';
-
-	}
-
-	setColors( xAxisColor, yAxisColor, zAxisColor ) {
-
-		const color = new Color();
-		const array = this.geometry.attributes.color.array;
-
-		color.set( xAxisColor );
-		color.toArray( array, 0 );
-		color.toArray( array, 3 );
-
-		color.set( yAxisColor );
-		color.toArray( array, 6 );
-		color.toArray( array, 9 );
-
-		color.set( zAxisColor );
-		color.toArray( array, 12 );
-		color.toArray( array, 15 );
-
-		this.geometry.attributes.color.needsUpdate = true;
-
-		return this;
-
-	}
-
-	dispose() {
-
-		this.geometry.dispose();
-		this.material.dispose();
-
-	}
-
-}
-
-class ShapePath {
-
-	constructor() {
-
-		this.type = 'ShapePath';
-
-		this.color = new Color();
-
-		this.subPaths = [];
-		this.currentPath = null;
-
-	}
-
-	moveTo( x, y ) {
-
-		this.currentPath = new Path();
-		this.subPaths.push( this.currentPath );
-		this.currentPath.moveTo( x, y );
-
-		return this;
-
-	}
-
-	lineTo( x, y ) {
-
-		this.currentPath.lineTo( x, y );
-
-		return this;
-
-	}
-
-	quadraticCurveTo( aCPx, aCPy, aX, aY ) {
-
-		this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );
-
-		return this;
-
-	}
-
-	bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {
-
-		this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );
-
-		return this;
-
-	}
-
-	splineThru( pts ) {
-
-		this.currentPath.splineThru( pts );
-
-		return this;
-
-	}
-
-	toShapes( isCCW ) {
-
-		function toShapesNoHoles( inSubpaths ) {
-
-			const shapes = [];
-
-			for ( let i = 0, l = inSubpaths.length; i < l; i ++ ) {
-
-				const tmpPath = inSubpaths[ i ];
-
-				const tmpShape = new Shape();
-				tmpShape.curves = tmpPath.curves;
-
-				shapes.push( tmpShape );
-
-			}
-
-			return shapes;
-
-		}
-
-		function isPointInsidePolygon( inPt, inPolygon ) {
-
-			const polyLen = inPolygon.length;
-
-			// inPt on polygon contour => immediate success    or
-			// toggling of inside/outside at every single! intersection point of an edge
-			//  with the horizontal line through inPt, left of inPt
-			//  not counting lowerY endpoints of edges and whole edges on that line
-			let inside = false;
-			for ( let p = polyLen - 1, q = 0; q < polyLen; p = q ++ ) {
-
-				let edgeLowPt = inPolygon[ p ];
-				let edgeHighPt = inPolygon[ q ];
-
-				let edgeDx = edgeHighPt.x - edgeLowPt.x;
-				let edgeDy = edgeHighPt.y - edgeLowPt.y;
-
-				if ( Math.abs( edgeDy ) > Number.EPSILON ) {
-
-					// not parallel
-					if ( edgeDy < 0 ) {
-
-						edgeLowPt = inPolygon[ q ]; edgeDx = - edgeDx;
-						edgeHighPt = inPolygon[ p ]; edgeDy = - edgeDy;
-
-					}
-
-					if ( ( inPt.y < edgeLowPt.y ) || ( inPt.y > edgeHighPt.y ) ) 		continue;
-
-					if ( inPt.y === edgeLowPt.y ) {
-
-						if ( inPt.x === edgeLowPt.x )		return	true;		// inPt is on contour ?
-						// continue;				// no intersection or edgeLowPt => doesn't count !!!
-
-					} else {
-
-						const perpEdge = edgeDy * ( inPt.x - edgeLowPt.x ) - edgeDx * ( inPt.y - edgeLowPt.y );
-						if ( perpEdge === 0 )				return	true;		// inPt is on contour ?
-						if ( perpEdge < 0 ) 				continue;
-						inside = ! inside;		// true intersection left of inPt
-
-					}
-
-				} else {
-
-					// parallel or collinear
-					if ( inPt.y !== edgeLowPt.y ) 		continue;			// parallel
-					// edge lies on the same horizontal line as inPt
-					if ( ( ( edgeHighPt.x <= inPt.x ) && ( inPt.x <= edgeLowPt.x ) ) ||
-						 ( ( edgeLowPt.x <= inPt.x ) && ( inPt.x <= edgeHighPt.x ) ) )		return	true;	// inPt: Point on contour !
-					// continue;
-
-				}
-
-			}
-
-			return	inside;
-
-		}
-
-		const isClockWise = ShapeUtils.isClockWise;
-
-		const subPaths = this.subPaths;
-		if ( subPaths.length === 0 ) return [];
-
-		let solid, tmpPath, tmpShape;
-		const shapes = [];
-
-		if ( subPaths.length === 1 ) {
-
-			tmpPath = subPaths[ 0 ];
-			tmpShape = new Shape();
-			tmpShape.curves = tmpPath.curves;
-			shapes.push( tmpShape );
-			return shapes;
-
-		}
-
-		let holesFirst = ! isClockWise( subPaths[ 0 ].getPoints() );
-		holesFirst = isCCW ? ! holesFirst : holesFirst;
-
-		// console.log("Holes first", holesFirst);
-
-		const betterShapeHoles = [];
-		const newShapes = [];
-		let newShapeHoles = [];
-		let mainIdx = 0;
-		let tmpPoints;
-
-		newShapes[ mainIdx ] = undefined;
-		newShapeHoles[ mainIdx ] = [];
-
-		for ( let i = 0, l = subPaths.length; i < l; i ++ ) {
-
-			tmpPath = subPaths[ i ];
-			tmpPoints = tmpPath.getPoints();
-			solid = isClockWise( tmpPoints );
-			solid = isCCW ? ! solid : solid;
-
-			if ( solid ) {
-
-				if ( ( ! holesFirst ) && ( newShapes[ mainIdx ] ) )	mainIdx ++;
-
-				newShapes[ mainIdx ] = { s: new Shape(), p: tmpPoints };
-				newShapes[ mainIdx ].s.curves = tmpPath.curves;
-
-				if ( holesFirst )	mainIdx ++;
-				newShapeHoles[ mainIdx ] = [];
-
-				//console.log('cw', i);
-
-			} else {
-
-				newShapeHoles[ mainIdx ].push( { h: tmpPath, p: tmpPoints[ 0 ] } );
-
-				//console.log('ccw', i);
-
-			}
-
-		}
-
-		// only Holes? -> probably all Shapes with wrong orientation
-		if ( ! newShapes[ 0 ] )	return	toShapesNoHoles( subPaths );
-
-
-		if ( newShapes.length > 1 ) {
-
-			let ambiguous = false;
-			let toChange = 0;
-
-			for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {
-
-				betterShapeHoles[ sIdx ] = [];
-
-			}
-
-			for ( let sIdx = 0, sLen = newShapes.length; sIdx < sLen; sIdx ++ ) {
-
-				const sho = newShapeHoles[ sIdx ];
-
-				for ( let hIdx = 0; hIdx < sho.length; hIdx ++ ) {
-
-					const ho = sho[ hIdx ];
-					let hole_unassigned = true;
-
-					for ( let s2Idx = 0; s2Idx < newShapes.length; s2Idx ++ ) {
-
-						if ( isPointInsidePolygon( ho.p, newShapes[ s2Idx ].p ) ) {
-
-							if ( sIdx !== s2Idx )	toChange ++;
-
-							if ( hole_unassigned ) {
-
-								hole_unassigned = false;
-								betterShapeHoles[ s2Idx ].push( ho );
-
-							} else {
-
-								ambiguous = true;
-
-							}
-
-						}
-
-					}
-
-					if ( hole_unassigned ) {
-
-						betterShapeHoles[ sIdx ].push( ho );
-
-					}
-
-				}
-
-			}
-
-			if ( toChange > 0 && ambiguous === false ) {
-
-				newShapeHoles = betterShapeHoles;
-
-			}
-
-		}
-
-		let tmpHoles;
-
-		for ( let i = 0, il = newShapes.length; i < il; i ++ ) {
-
-			tmpShape = newShapes[ i ].s;
-			shapes.push( tmpShape );
-			tmpHoles = newShapeHoles[ i ];
-
-			for ( let j = 0, jl = tmpHoles.length; j < jl; j ++ ) {
-
-				tmpShape.holes.push( tmpHoles[ j ].h );
-
-			}
-
-		}
-
-		//console.log("shape", shapes);
-
-		return shapes;
-
-	}
-
-}
-
-class BoxBufferGeometry extends BoxGeometry { // @deprecated, r144
-
-	constructor( width, height, depth, widthSegments, heightSegments, depthSegments ) {
-
-		console.warn( 'THREE.BoxBufferGeometry has been renamed to THREE.BoxGeometry.' );
-		super( width, height, depth, widthSegments, heightSegments, depthSegments );
-
-
-	}
-
-}
-
-class CapsuleBufferGeometry extends CapsuleGeometry { // @deprecated, r144
-
-	constructor( radius, length, capSegments, radialSegments ) {
-
-		console.warn( 'THREE.CapsuleBufferGeometry has been renamed to THREE.CapsuleGeometry.' );
-		super( radius, length, capSegments, radialSegments );
-
-	}
-
-}
-
-class CircleBufferGeometry extends CircleGeometry { // @deprecated, r144
-
-	constructor( radius, segments, thetaStart, thetaLength ) {
-
-		console.warn( 'THREE.CircleBufferGeometry has been renamed to THREE.CircleGeometry.' );
-		super( radius, segments, thetaStart, thetaLength );
-
-	}
-
-}
-
-class ConeBufferGeometry extends ConeGeometry { // @deprecated, r144
-
-	constructor( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {
-
-		console.warn( 'THREE.ConeBufferGeometry has been renamed to THREE.ConeGeometry.' );
-		super( radius, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );
-
-	}
-
-}
-
-class CylinderBufferGeometry extends CylinderGeometry { // @deprecated, r144
-
-	constructor( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength ) {
-
-		console.warn( 'THREE.CylinderBufferGeometry has been renamed to THREE.CylinderGeometry.' );
-		super( radiusTop, radiusBottom, height, radialSegments, heightSegments, openEnded, thetaStart, thetaLength );
-
-	}
-
-}
-
-class DodecahedronBufferGeometry extends DodecahedronGeometry { // @deprecated, r144
-
-	constructor( radius, detail ) {
-
-		console.warn( 'THREE.DodecahedronBufferGeometry has been renamed to THREE.DodecahedronGeometry.' );
-		super( radius, detail );
-
-	}
-
-}
-
-class ExtrudeBufferGeometry extends ExtrudeGeometry { // @deprecated, r144
-
-	constructor( shapes, options ) {
-
-		console.warn( 'THREE.ExtrudeBufferGeometry has been renamed to THREE.ExtrudeGeometry.' );
-		super( shapes, options );
-
-	}
-
-}
-
-class IcosahedronBufferGeometry extends IcosahedronGeometry { // @deprecated, r144
-
-	constructor( radius, detail ) {
-
-		console.warn( 'THREE.IcosahedronBufferGeometry has been renamed to THREE.IcosahedronGeometry.' );
-		super( radius, detail );
-
-	}
-
-}
-
-class LatheBufferGeometry extends LatheGeometry { // @deprecated, r144
-
-	constructor( points, segments, phiStart, phiLength ) {
-
-		console.warn( 'THREE.LatheBufferGeometry has been renamed to THREE.LatheGeometry.' );
-		super( points, segments, phiStart, phiLength );
-
-	}
-
-}
-
-class OctahedronBufferGeometry extends OctahedronGeometry { // @deprecated, r144
-
-	constructor( radius, detail ) {
-
-		console.warn( 'THREE.OctahedronBufferGeometry has been renamed to THREE.OctahedronGeometry.' );
-		super( radius, detail );
-
-	}
-
-}
-
-class PlaneBufferGeometry extends PlaneGeometry { // @deprecated, r144
-
-	constructor( width, height, widthSegments, heightSegments ) {
-
-		console.warn( 'THREE.PlaneBufferGeometry has been renamed to THREE.PlaneGeometry.' );
-		super( width, height, widthSegments, heightSegments );
-
-	}
-
-}
-
-class PolyhedronBufferGeometry extends PolyhedronGeometry { // @deprecated, r144
-
-	constructor( vertices, indices, radius, detail ) {
-
-		console.warn( 'THREE.PolyhedronBufferGeometry has been renamed to THREE.PolyhedronGeometry.' );
-		super( vertices, indices, radius, detail );
-
-	}
-
-}
-
-class RingBufferGeometry extends RingGeometry { // @deprecated, r144
-
-	constructor( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength ) {
-
-		console.warn( 'THREE.RingBufferGeometry has been renamed to THREE.RingGeometry.' );
-		super( innerRadius, outerRadius, thetaSegments, phiSegments, thetaStart, thetaLength );
-
-	}
-
-}
-
-class ShapeBufferGeometry extends ShapeGeometry { // @deprecated, r144
-
-	constructor( shapes, curveSegments ) {
-
-		console.warn( 'THREE.ShapeBufferGeometry has been renamed to THREE.ShapeGeometry.' );
-		super( shapes, curveSegments );
-
-	}
-
-}
-
-class SphereBufferGeometry extends SphereGeometry { // @deprecated, r144
-
-	constructor( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength ) {
-
-		console.warn( 'THREE.SphereBufferGeometry has been renamed to THREE.SphereGeometry.' );
-		super( radius, widthSegments, heightSegments, phiStart, phiLength, thetaStart, thetaLength );
-
-	}
-
-}
-
-class TetrahedronBufferGeometry extends TetrahedronGeometry { // @deprecated, r144
-
-	constructor( radius, detail ) {
-
-		console.warn( 'THREE.TetrahedronBufferGeometry has been renamed to THREE.TetrahedronGeometry.' );
-		super( radius, detail );
-
-	}
-
-}
-
-class TorusBufferGeometry extends TorusGeometry { // @deprecated, r144
-
-	constructor( radius, tube, radialSegments, tubularSegments, arc ) {
-
-		console.warn( 'THREE.TorusBufferGeometry has been renamed to THREE.TorusGeometry.' );
-		super( radius, tube, radialSegments, tubularSegments, arc );
-
-	}
-
-}
-
-class TorusKnotBufferGeometry extends TorusKnotGeometry { // @deprecated, r144
-
-	constructor( radius, tube, tubularSegments, radialSegments, p, q ) {
-
-		console.warn( 'THREE.TorusKnotBufferGeometry has been renamed to THREE.TorusKnotGeometry.' );
-		super( radius, tube, tubularSegments, radialSegments, p, q );
-
-	}
-
-}
-
-class TubeBufferGeometry extends TubeGeometry { // @deprecated, r144
-
-	constructor( path, tubularSegments, radius, radialSegments, closed ) {
-
-		console.warn( 'THREE.TubeBufferGeometry has been renamed to THREE.TubeGeometry.' );
-		super( path, tubularSegments, radius, radialSegments, closed );
-
-	}
-
-}
-
-if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {
-
-	__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {
-		revision: REVISION,
-	} } ) );
-
-}
-
-if ( typeof window !== 'undefined' ) {
-
-	if ( window.__THREE__ ) {
-
-		console.warn( 'WARNING: Multiple instances of Three.js being imported.' );
-
-	} else {
-
-		window.__THREE__ = REVISION;
-
-	}
-
-}
-
-
-
-
-/***/ }),
-
-/***/ 38776:
-/***/ ((__unused_webpack___webpack_module__, __webpack_exports__, __webpack_require__) => {
-
-"use strict";
-/* harmony export */ __webpack_require__.d(__webpack_exports__, {
-/* harmony export */   "Z": () => (/* binding */ invariant)
-/* harmony export */ });
-var isProduction = "production" === 'production';
-var prefix = 'Invariant failed';
-function invariant(condition, message) {
-    if (condition) {
-        return;
-    }
-    if (isProduction) {
-        throw new Error(prefix);
-    }
-    var provided = typeof message === 'function' ? message() : message;
-    var value = provided ? "".concat(prefix, ": ").concat(provided) : prefix;
-    throw new Error(value);
-}
-
-
-
-
-/***/ }),
-
-/***/ 57529:
-/***/ ((module) => {
-
-"use strict";
-module.exports = {};
-
-/***/ }),
-
-/***/ 55866:
-/***/ ((module) => {
-
-"use strict";
-module.exports = JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"about"}');
-
-/***/ }),
-
-/***/ 75127:
-/***/ ((module) => {
-
-"use strict";
-module.exports = JSON.parse('{"pluginId":"about","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"About Codex","href":"/about/","docId":"index"},{"type":"link","label":"Description and architecture","href":"/about/architect","docId":"architect"},{"type":"link","label":"Development roadmap","href":"/about/roadmap","docId":"roadmap"},{"type":"link","label":"Core contributors","href":"/about/team","docId":"team"},{"type":"link","label":"FAQ","href":"/about/faq","docId":"faq"}]},"docs":{"architect":{"id":"architect","title":"Description and architecture","description":"Codex is building a durable data storage engine that is fully decentralised, providing corruption and censorship resistance to web3 applications. It innately protects network participants by giving hosts plausible deniability over the data they store, and clients provable durability guarantees—up to 99.99%—while remaining storage and bandwidth efficient.","sidebar":"defaultSidebar"},"faq":{"id":"faq","title":"Frequently asked questions","description":"Codex is a state-of-the-art, decentralized storage protocol that provides a solution for highly durable data storage with high decentralization, aiming to resist censorship and prevent single points of failure inherent in centralized systems.","sidebar":"defaultSidebar"},"index":{"id":"index","title":"About Codex","description":"Codex is a decentralised data storage platform that provides exceptionally strong censorship resistance and durability guarantees. It serves as the storage layer of the Logos tech stack. Alongside the trustless agreement layer, Nomos, and the communications layer, Waku, it is one of the Logos Collective\'s foundational projects.","sidebar":"defaultSidebar"},"roadmap":{"id":"roadmap","title":"Development roadmap","description":"Releases","sidebar":"defaultSidebar"},"team":{"id":"team","title":"Core contributors","description":"Codex is developed by highly experienced protocol and software developers, distributed systems experts, and ZK-cryptography researchers with backgrounds in academia, mainstream tech, and web3.","sidebar":"defaultSidebar"}}}');
-
-/***/ }),
-
-/***/ 54284:
-/***/ ((module) => {
-
-"use strict";
-module.exports = JSON.parse('{"name":"docusaurus-plugin-content-docs","id":"root-pages"}');
-
-/***/ }),
-
-/***/ 12514:
-/***/ ((module) => {
-
-"use strict";
-module.exports = JSON.parse('{"pluginId":"root-pages","version":"current","label":"Next","banner":null,"badge":false,"noIndex":false,"className":"docs-version-current","isLast":true,"docsSidebars":{"defaultSidebar":[{"type":"link","label":"Join the community","href":"/community","className":"hidden","docId":"community"},{"type":"link","label":"Join Us","href":"/join-us","docId":"join-us"},{"type":"link","label":"**Codex R&D Update for Week of Jan 12, 2024**","href":"/news","className":"hidden","docId":"news"},{"type":"link","label":"Privacy Policy","href":"/privacy-policy","className":"hidden","docId":"privacy-policy"},{"type":"link","label":"Security","href":"/security","className":"hidden","docId":"security"},{"type":"link","label":"Terms of Use","href":"/terms","className":"hidden","docId":"terms"}]},"docs":{"community":{"id":"community","title":"Join the community","description":"The Codex project aims to create a decentralised durability engine that allows persisting data in p2p networks. In other words, it allows storing files and data with predictable durability guarantees for later retrieval."},"join-us":{"id":"join-us","title":"Join Us","description":""},"news":{"id":"news","title":"**Codex R&D Update for Week of Jan 12, 2024**","description":"The Codex team continues to make progress with various initiatives to wrap up the demo for the Q1/Q2 public testnet release. An internal testnet has been running for the past few weeks and has been used to test the latest version of Codex and can be accessed using the Codex Testnet Starter documentation."},"privacy-policy":{"id":"privacy-policy","title":"Privacy Policy","description":"Last updated: 9 February 2024"},"security":{"id":"security","title":"Security","description":"We take security seriously at Codex and across the Institute of Free Technology and its affiliates."},"terms":{"id":"terms","title":"Terms of Use","description":"Last updated: 14 February 2024"}}}');
-
-/***/ }),
-
-/***/ 15745:
-/***/ ((module) => {
-
-"use strict";
-module.exports = JSON.parse('{"name":"docusaurus-plugin-content-pages","id":"default"}');
-
-/***/ }),
-
-/***/ 37589:
-/***/ ((module) => {
-
-"use strict";
-module.exports = {"i8":"5.74.0"};
-
-/***/ })
-
-/******/ 	});
-/************************************************************************/
-/******/ 	// The module cache
-/******/ 	var __webpack_module_cache__ = {};
-/******/ 	
-/******/ 	// The require function
-/******/ 	function __webpack_require__(moduleId) {
-/******/ 		// Check if module is in cache
-/******/ 		var cachedModule = __webpack_module_cache__[moduleId];
-/******/ 		if (cachedModule !== undefined) {
-/******/ 			return cachedModule.exports;
-/******/ 		}
-/******/ 		// Create a new module (and put it into the cache)
-/******/ 		var module = __webpack_module_cache__[moduleId] = {
-/******/ 			id: moduleId,
-/******/ 			loaded: false,
-/******/ 			exports: {}
-/******/ 		};
-/******/ 	
-/******/ 		// Execute the module function
-/******/ 		__webpack_modules__[moduleId].call(module.exports, module, module.exports, __webpack_require__);
-/******/ 	
-/******/ 		// Flag the module as loaded
-/******/ 		module.loaded = true;
-/******/ 	
-/******/ 		// Return the exports of the module
-/******/ 		return module.exports;
-/******/ 	}
-/******/ 	
-/******/ 	// expose the modules object (__webpack_modules__)
-/******/ 	__webpack_require__.m = __webpack_modules__;
-/******/ 	
-/******/ 	// expose the module cache
-/******/ 	__webpack_require__.c = __webpack_module_cache__;
-/******/ 	
-/************************************************************************/
-/******/ 	/* webpack/runtime/compat get default export */
-/******/ 	(() => {
-/******/ 		// getDefaultExport function for compatibility with non-harmony modules
-/******/ 		__webpack_require__.n = (module) => {
-/******/ 			var getter = module && module.__esModule ?
-/******/ 				() => (module['default']) :
-/******/ 				() => (module);
-/******/ 			__webpack_require__.d(getter, { a: getter });
-/******/ 			return getter;
-/******/ 		};
-/******/ 	})();
-/******/ 	
-/******/ 	/* webpack/runtime/create fake namespace object */
-/******/ 	(() => {
-/******/ 		var getProto = Object.getPrototypeOf ? (obj) => (Object.getPrototypeOf(obj)) : (obj) => (obj.__proto__);
-/******/ 		var leafPrototypes;
-/******/ 		// create a fake namespace object
-/******/ 		// mode & 1: value is a module id, require it
-/******/ 		// mode & 2: merge all properties of value into the ns
-/******/ 		// mode & 4: return value when already ns object
-/******/ 		// mode & 16: return value when it's Promise-like
-/******/ 		// mode & 8|1: behave like require
-/******/ 		__webpack_require__.t = function(value, mode) {
-/******/ 			if(mode & 1) value = this(value);
-/******/ 			if(mode & 8) return value;
-/******/ 			if(typeof value === 'object' && value) {
-/******/ 				if((mode & 4) && value.__esModule) return value;
-/******/ 				if((mode & 16) && typeof value.then === 'function') return value;
-/******/ 			}
-/******/ 			var ns = Object.create(null);
-/******/ 			__webpack_require__.r(ns);
-/******/ 			var def = {};
-/******/ 			leafPrototypes = leafPrototypes || [null, getProto({}), getProto([]), getProto(getProto)];
-/******/ 			for(var current = mode & 2 && value; typeof current == 'object' && !~leafPrototypes.indexOf(current); current = getProto(current)) {
-/******/ 				Object.getOwnPropertyNames(current).forEach((key) => (def[key] = () => (value[key])));
-/******/ 			}
-/******/ 			def['default'] = () => (value);
-/******/ 			__webpack_require__.d(ns, def);
-/******/ 			return ns;
-/******/ 		};
-/******/ 	})();
-/******/ 	
-/******/ 	/* webpack/runtime/define property getters */
-/******/ 	(() => {
-/******/ 		// define getter functions for harmony exports
-/******/ 		__webpack_require__.d = (exports, definition) => {
-/******/ 			for(var key in definition) {
-/******/ 				if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {
-/******/ 					Object.defineProperty(exports, key, { enumerable: true, get: definition[key] });
-/******/ 				}
-/******/ 			}
-/******/ 		};
-/******/ 	})();
-/******/ 	
-/******/ 	/* webpack/runtime/ensure chunk */
-/******/ 	(() => {
-/******/ 		__webpack_require__.f = {};
-/******/ 		// This file contains only the entry chunk.
-/******/ 		// The chunk loading function for additional chunks
-/******/ 		__webpack_require__.e = (chunkId) => {
-/******/ 			return Promise.all(Object.keys(__webpack_require__.f).reduce((promises, key) => {
-/******/ 				__webpack_require__.f[key](chunkId, promises);
-/******/ 				return promises;
-/******/ 			}, []));
-/******/ 		};
-/******/ 	})();
-/******/ 	
-/******/ 	/* webpack/runtime/get javascript chunk filename */
-/******/ 	(() => {
-/******/ 		// This function allow to reference async chunks
-/******/ 		__webpack_require__.u = (chunkId) => {
-/******/ 			// return url for filenames based on template
-/******/ 			return "assets/js/" + chunkId + "." + {"316":"cc266042","487":"4c66bc9e","724":"6b21693f"}[chunkId] + ".js";
-/******/ 		};
-/******/ 	})();
-/******/ 	
-/******/ 	/* webpack/runtime/get mini-css chunk filename */
-/******/ 	(() => {
-/******/ 		// This function allow to reference async chunks
-/******/ 		__webpack_require__.miniCssF = (chunkId) => {
-/******/ 			// return url for filenames based on template
-/******/ 			return undefined;
-/******/ 		};
-/******/ 	})();
-/******/ 	
-/******/ 	/* webpack/runtime/hasOwnProperty shorthand */
-/******/ 	(() => {
-/******/ 		__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))
-/******/ 	})();
-/******/ 	
-/******/ 	/* webpack/runtime/make namespace object */
-/******/ 	(() => {
-/******/ 		// define __esModule on exports
-/******/ 		__webpack_require__.r = (exports) => {
-/******/ 			if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
-/******/ 				Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
-/******/ 			}
-/******/ 			Object.defineProperty(exports, '__esModule', { value: true });
-/******/ 		};
-/******/ 	})();
-/******/ 	
-/******/ 	/* webpack/runtime/node module decorator */
-/******/ 	(() => {
-/******/ 		__webpack_require__.nmd = (module) => {
-/******/ 			module.paths = [];
-/******/ 			if (!module.children) module.children = [];
-/******/ 			return module;
-/******/ 		};
-/******/ 	})();
-/******/ 	
-/******/ 	/* webpack/runtime/publicPath */
-/******/ 	(() => {
-/******/ 		__webpack_require__.p = "/";
-/******/ 	})();
-/******/ 	
-/******/ 	/* webpack/runtime/require chunk loading */
-/******/ 	(() => {
-/******/ 		// no baseURI
-/******/ 		
-/******/ 		// object to store loaded chunks
-/******/ 		// "1" means "loaded", otherwise not loaded yet
-/******/ 		var installedChunks = {
-/******/ 			179: 1
-/******/ 		};
-/******/ 		
-/******/ 		// no on chunks loaded
-/******/ 		
-/******/ 		var installChunk = (chunk) => {
-/******/ 			var moreModules = chunk.modules, chunkIds = chunk.ids, runtime = chunk.runtime;
-/******/ 			for(var moduleId in moreModules) {
-/******/ 				if(__webpack_require__.o(moreModules, moduleId)) {
-/******/ 					__webpack_require__.m[moduleId] = moreModules[moduleId];
-/******/ 				}
-/******/ 			}
-/******/ 			if(runtime) runtime(__webpack_require__);
-/******/ 			for(var i = 0; i < chunkIds.length; i++)
-/******/ 				installedChunks[chunkIds[i]] = 1;
-/******/ 		
-/******/ 		};
-/******/ 		
-/******/ 		// require() chunk loading for javascript
-/******/ 		__webpack_require__.f.require = (chunkId, promises) => {
-/******/ 			// "1" is the signal for "already loaded"
-/******/ 			if(!installedChunks[chunkId]) {
-/******/ 				if(true) { // all chunks have JS
-/******/ 					installChunk(require("./" + __webpack_require__.u(chunkId)));
-/******/ 				} else installedChunks[chunkId] = 1;
-/******/ 			}
-/******/ 		};
-/******/ 		
-/******/ 		// no external install chunk
-/******/ 		
-/******/ 		// no HMR
-/******/ 		
-/******/ 		// no HMR manifest
-/******/ 	})();
-/******/ 	
-/************************************************************************/
-/******/ 	
-/******/ 	// module factories are used so entry inlining is disabled
-/******/ 	// startup
-/******/ 	// Load entry module and return exports
-/******/ 	var __webpack_exports__ = __webpack_require__(21429);
-/******/ 	module.exports = __webpack_exports__;
-/******/ 	
-/******/ })()
-;
\ No newline at end of file
diff --git a/sitemap.xml b/sitemap.xml
new file mode 100644
index 0000000..453eedb
--- /dev/null
+++ b/sitemap.xml
@@ -0,0 +1 @@
+<?xml version="1.0" encoding="UTF-8"?><urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1"><url><loc>https://codex.storage/about/</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://codex.storage/about/architect</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://codex.storage/about/faq</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://codex.storage/about/roadmap</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://codex.storage/about/team</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://codex.storage/</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://codex.storage/community</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://codex.storage/join-us</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://codex.storage/news</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://codex.storage/privacy-policy</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://codex.storage/security</loc><changefreq>weekly</changefreq><priority>0.5</priority></url><url><loc>https://codex.storage/terms</loc><changefreq>weekly</changefreq><priority>0.5</priority></url></urlset>
\ No newline at end of file
diff --git a/terms/index.html b/terms/index.html
index 3704de9..10c73ff 100644
--- a/terms/index.html
+++ b/terms/index.html
@@ -3,19 +3,19 @@
 <head>
 <meta charset="UTF-8">
 <meta name="generator" content="Docusaurus v2.4.1">
-<title data-rh="true">Terms of Use | Codex
+Terms of Use | Codex
 
-
-
-
+
+
+
 
 

Terms of Use

Last updated: 14 February 2024

These website terms of use ('Website Terms of Use') are entered into by you and us, and they govern your access and use of this Website, including any content and functionality contained in the Website.

It is your responsibility to read the Website Terms of Use carefully before your use of the Website and your use of the Website means you have agreed to be bound and comply with these Website Terms of Use.

If you do not agree with these Website Terms of Use, you must not access or use the Website.

1) Who we are

For the purposes of these Website Terms of Use, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at:

Logos Collective Association
c/o PST Consulting GmbH
Baarerstrasse 10
6300 Zug
Switzerland

Whenever we refer to “Logos”, “we”, “us” or any other similar references, we are referring to the Logos Collective Association.

2) Disclaimers

The Website is provided by us on an ‘as is’ basis and you use the Website at your own sole discretion and risk.

We disclaim all warranties of any kind, express or implied, including without limitation the warranties of merchantability, fitness for a particular purpose, and non-infringement of intellectual property or other violation of rights. We do not warrant or make any representations concerning the completeness, accuracy, legality, utility, reliability, suitability or availability of the use of the Website, the content on this Website or otherwise relating to the Website, such content or on any sites linked to this site.These disclaimers will apply to the maximum extent permitted by applicable law.

We make no claims that the Website or any of its content is accessible, legally compliant or appropriate in your jurisdiction. Your access or use of the Website is at your own sole discretion and you are solely responsible for complying with any applicable local laws.

The content herein or as accessible through this website is intended to be made available for informational purposes only and should not be considered as creating any expectations or forming the basis of any contract, commitment or binding obligation with us. No information herein shall be considered to contain or be relied upon as a promise, representation, warranty or guarantee, whether express or implied and whether as to the past, present or the future in relation to the projects and matters described herein.

The information contained herein does not constitute financial, legal, tax, or other advice and should not be treated as such.

Nothing in this Website should be construed by you as an offer to buy or sell, or soliciting any offer to buy or sell any tokens or any security.

3) Forward looking statements

The Website may also contain forward-looking statements that are based on current expectations, estimates, forecasts, assumptions and projections about the technology, industry and markets in general.

The forward looking statements, which may include statements about the roadmap, project descriptions, technical details, functionalities, features, the development and use of tokens by projects, and any other statements related to such matters or as accessible through this website are subject to a high degree of risk and uncertainty. The forward looking statements are subject to change based on, among other things, market conditions, technical developments, and regulatory environment. The actual development and results, including the order and the timeline, might vary from what’s presented. The information contained herein is a summary and does not purport to be accurate, reliable or complete and we bear no responsibility for the accuracy, reliability or completeness of information contained herein. Because of the high degree of risk and uncertainty described above, you should not place undue reliance on any matters described in this website or as accessible through this website.

While we aim to update our website regularly, all information, including the timeline and the specifics of each stage, is subject to change and may be amended or supplemented at any time, without notice and at our sole discretion.

4) Intellectual property rights

The Website and its contents are made available under Creative Commons Attribution 4.0 International license (CC-BY 4.0). In essence this licence allows users to copy, modify and distribute the content in any format for any purpose, including commercial use, subject to certain requirements such as attributing us. For the full terms of this licence, please refer to the following website: https://creativecommons.org/licenses/by/4.0/.

To the extent the Website provides any links to a third party website, then their terms and conditions, including privacy policies, govern your use of those third party websites. By linking such third party websites, Status does not represent or imply that it endorses or supports such third party websites or content therein, or that it believes such third party websites and content therein to be accurate, useful or non-harmful. We have no control over such third party websites and will not be liable for your use of or activities on any third party websites accessed through the Website. If you access such third party websites through the Website, it is at your own risk and you are solely responsible for your activities on such third party websites.

6) Limitation of liability

We will not be held liable to you under any contract, negligence, strict liability, or other legal or equitable theory for any lost profits, cost of procurement for substitute services, or any special, incidental, or consequential damages related to, arising from, or in any way connected with these Website Terms of Use, the Website, the content on the Website, or your use of the Website, even if we have been advised of the possibility of such damages. In any event, our aggregate liability for such claims is limited to EUR 100 (one hundred Euros). This limitation of liability will apply to the maximum extent permitted by applicable law.

7) Indemnity

You shall indemnify us and hold us harmless from and against any and all claims, damages and expenses, including attorneys’ fees, arising from or related to your use of the Website, the content on the Website, including without limitation your violation of these Website Terms of Use.

8) Modifications

We may modify or replace any part of this Website Terms of Use at any time and without notice. You are responsible for checking the Website periodically for any changes. The new Website Terms of Use will be effective immediately upon its posting on the Website.

9) Governing law

Swiss law governs these Website Terms of Use and any disputes between you and us, whether in court or arbitration, without regard to conflict of laws provisions.

10) Disputes

In these terms, “dispute” has the broadest meaning enforceable by law and includes any claim you make against or controversy you may have in relation to these Website Terms of Use, the Website, the content on the Website, or your use of the Website.

We prefer arbitration over litigation as we believe it meets our principle of resolving disputes in the most effective and cost effective manner. You are bound by the following arbitration clause, which waives your right to litigation and to be heard by a judge. Please note that court review of an arbitration award is limited. You also waive all your rights to a jury trial (if any) in any and all jurisdictions.

If a (potential) dispute arises, you must first use your reasonable efforts to resolve it amicably with us. If these efforts do not result in a resolution of such dispute, you shall then send us a written notice of dispute setting out (i) the nature of the dispute, and the claim you are making; and (ii) the remedy you are seeking.

If we and you are unable to further resolve this dispute within sixty (60) calendar days of us receiving this notice of dispute, then any such dispute will be referred to and finally resolved by you and us through an arbitration administered by the Swiss Chambers’ Arbitration Institution in accordance with the Swiss Rules of International Arbitration for the time being in force, which rules are deemed to be incorporated herein by reference. The arbitral decision may be enforced in any court. The arbitration will be held in Zug, Switzerland, and may be conducted via video conference virtual/online methods if possible. The tribunal will consist of one arbitrator, and all proceedings as well as communications between the parties will be kept confidential. The language of the arbitration will be in English. Payment of all relevant fees in respect of the arbitration, including filing, administration and arbitrator fees will be in accordance with the Swiss Rules of International Arbitration.

Regardless of any applicable statute of limitations, you must bring any claims within one year after the claim arose or the time when you should have reasonably known about the claim. You also waive the right to participate in a class action lawsuit or a classwide arbitration against us.

11) About these Website Terms of Use

These Website Terms of Use cover the entire agreement between you and us regarding the Website and supersede all prior and contemporaneous understandings, agreements, representations and warranties, both written and oral, with respect to the Website.

The captions and headings identifying sections and subsections of these Website Terms of Use are for reference only and do not define, modify, expand, limit, or affect the interpretation of any provisions of these Website Terms of Use.

If any part of these Website Terms of Use is held invalid or unenforceable, that part will be severable from these Website Terms of Use, and the remaining portions will remain in full force and effect. If we fail to enforce any of these Website Terms of Use, that does not mean that we have waived our right to enforce them.

If you have any specific questions about these Website Terms of Use, please contact us at legal@free.technology.

This document is licensed under CC-BY-SA.

- - + ) .lsd-dropdown__trigger:focus .lsd-dropdown__option-label{-webkit-text-decoration:underline;text-decoration:underline;}.lsd-dropdown__label{display:block;}.lsd-dropdown__button-container{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;}.lsd-dropdown__trigger{width:100%;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:justify;-webkit-justify-content:space-between;justify-content:space-between;border:none;cursor:pointer;background:none;}.lsd-dropdown__trigger:focus{outline:none;}.lsd-dropdown__option-label{cursor:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;}.lsd-dropdown__icons{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;gap:8px;}.lsd-dropdown__icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}.lsd-dropdown__supporting-text{margin:6px 14px;}.lsd-dropdown--error .lsd-dropdown__option-label{-webkit-text-decoration:line-through;text-decoration:line-through;}.lsd-dropdown--disabled{opacity:0.34;cursor:initial;}.lsd-dropdown--large{width:208px;}.lsd-dropdown--large.lsd-dropdown--error{width:230px;}.lsd-dropdown--large .lsd-dropdown__label{margin:0 0 6px 18px;}.lsd-dropdown--large .lsd-dropdown__button-container{height:40px;}.lsd-dropdown--large .lsd-dropdown__trigger{padding:10px 0px 10px 18px;}.lsd-dropdown--large .lsd-dropdown__icons{padding:0px 14px;}.lsd-dropdown--medium{width:188px;}.lsd-dropdown--medium.lsd-dropdown--error{width:210px;}.lsd-dropdown--medium .lsd-dropdown__label{margin:0 0 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__button-container{height:32px;}.lsd-dropdown--medium .lsd-dropdown__trigger{padding:6px 0px 6px 14px;}.lsd-dropdown--medium .lsd-dropdown__icons{padding:0px 12px;}.lsd-dropdown--small{width:164px;}.lsd-dropdown--small.lsd-dropdown--error{width:186px;}.lsd-dropdown--small .lsd-dropdown__label{margin:0 0 6px 12px;}.lsd-dropdown--small .lsd-dropdown__button-container{height:28px;}.lsd-dropdown--small .lsd-dropdown__trigger{padding:6px 0px 6px 12px;}.lsd-dropdown--small .lsd-dropdown__icons{padding:0px 10px;}.lsd-dropdown--outlined .lsd-dropdown__button-container{border:1px solid rgb(var(--lsd-border-primary));}.lsd-dropdown--underlined .lsd-dropdown__button-container{border:1px solid transparent;border-bottom:1px solid rgb(var(--lsd-border-primary));}

Terms of Use

Last updated: 14 February 2024

These website terms of use ('Website Terms of Use') are entered into by you and us, and they govern your access and use of this Website, including any content and functionality contained in the Website.

It is your responsibility to read the Website Terms of Use carefully before your use of the Website and your use of the Website means you have agreed to be bound and comply with these Website Terms of Use.

If you do not agree with these Website Terms of Use, you must not access or use the Website.

1) Who we are

For the purposes of these Website Terms of Use, the relevant entity is the Logos Collective Association, which has its registered office in Zug and its legal domicile address at:

Logos Collective Association
c/o PST Consulting GmbH
Baarerstrasse 10
6300 Zug
Switzerland

Whenever we refer to “Logos”, “we”, “us” or any other similar references, we are referring to the Logos Collective Association.

2) Disclaimers

The Website is provided by us on an ‘as is’ basis and you use the Website at your own sole discretion and risk.

We disclaim all warranties of any kind, express or implied, including without limitation the warranties of merchantability, fitness for a particular purpose, and non-infringement of intellectual property or other violation of rights. We do not warrant or make any representations concerning the completeness, accuracy, legality, utility, reliability, suitability or availability of the use of the Website, the content on this Website or otherwise relating to the Website, such content or on any sites linked to this site.These disclaimers will apply to the maximum extent permitted by applicable law.

We make no claims that the Website or any of its content is accessible, legally compliant or appropriate in your jurisdiction. Your access or use of the Website is at your own sole discretion and you are solely responsible for complying with any applicable local laws.

The content herein or as accessible through this website is intended to be made available for informational purposes only and should not be considered as creating any expectations or forming the basis of any contract, commitment or binding obligation with us. No information herein shall be considered to contain or be relied upon as a promise, representation, warranty or guarantee, whether express or implied and whether as to the past, present or the future in relation to the projects and matters described herein.

The information contained herein does not constitute financial, legal, tax, or other advice and should not be treated as such.

Nothing in this Website should be construed by you as an offer to buy or sell, or soliciting any offer to buy or sell any tokens or any security.

3) Forward looking statements

The Website may also contain forward-looking statements that are based on current expectations, estimates, forecasts, assumptions and projections about the technology, industry and markets in general.

The forward looking statements, which may include statements about the roadmap, project descriptions, technical details, functionalities, features, the development and use of tokens by projects, and any other statements related to such matters or as accessible through this website are subject to a high degree of risk and uncertainty. The forward looking statements are subject to change based on, among other things, market conditions, technical developments, and regulatory environment. The actual development and results, including the order and the timeline, might vary from what’s presented. The information contained herein is a summary and does not purport to be accurate, reliable or complete and we bear no responsibility for the accuracy, reliability or completeness of information contained herein. Because of the high degree of risk and uncertainty described above, you should not place undue reliance on any matters described in this website or as accessible through this website.

While we aim to update our website regularly, all information, including the timeline and the specifics of each stage, is subject to change and may be amended or supplemented at any time, without notice and at our sole discretion.

4) Intellectual property rights

The Website and its contents are made available under Creative Commons Attribution 4.0 International license (CC-BY 4.0). In essence this licence allows users to copy, modify and distribute the content in any format for any purpose, including commercial use, subject to certain requirements such as attributing us. For the full terms of this licence, please refer to the following website: https://creativecommons.org/licenses/by/4.0/.

To the extent the Website provides any links to a third party website, then their terms and conditions, including privacy policies, govern your use of those third party websites. By linking such third party websites, Status does not represent or imply that it endorses or supports such third party websites or content therein, or that it believes such third party websites and content therein to be accurate, useful or non-harmful. We have no control over such third party websites and will not be liable for your use of or activities on any third party websites accessed through the Website. If you access such third party websites through the Website, it is at your own risk and you are solely responsible for your activities on such third party websites.

6) Limitation of liability

We will not be held liable to you under any contract, negligence, strict liability, or other legal or equitable theory for any lost profits, cost of procurement for substitute services, or any special, incidental, or consequential damages related to, arising from, or in any way connected with these Website Terms of Use, the Website, the content on the Website, or your use of the Website, even if we have been advised of the possibility of such damages. In any event, our aggregate liability for such claims is limited to EUR 100 (one hundred Euros). This limitation of liability will apply to the maximum extent permitted by applicable law.

7) Indemnity

You shall indemnify us and hold us harmless from and against any and all claims, damages and expenses, including attorneys’ fees, arising from or related to your use of the Website, the content on the Website, including without limitation your violation of these Website Terms of Use.

8) Modifications

We may modify or replace any part of this Website Terms of Use at any time and without notice. You are responsible for checking the Website periodically for any changes. The new Website Terms of Use will be effective immediately upon its posting on the Website.

9) Governing law

Swiss law governs these Website Terms of Use and any disputes between you and us, whether in court or arbitration, without regard to conflict of laws provisions.

10) Disputes

In these terms, “dispute” has the broadest meaning enforceable by law and includes any claim you make against or controversy you may have in relation to these Website Terms of Use, the Website, the content on the Website, or your use of the Website.

We prefer arbitration over litigation as we believe it meets our principle of resolving disputes in the most effective and cost effective manner. You are bound by the following arbitration clause, which waives your right to litigation and to be heard by a judge. Please note that court review of an arbitration award is limited. You also waive all your rights to a jury trial (if any) in any and all jurisdictions.

If a (potential) dispute arises, you must first use your reasonable efforts to resolve it amicably with us. If these efforts do not result in a resolution of such dispute, you shall then send us a written notice of dispute setting out (i) the nature of the dispute, and the claim you are making; and (ii) the remedy you are seeking.

If we and you are unable to further resolve this dispute within sixty (60) calendar days of us receiving this notice of dispute, then any such dispute will be referred to and finally resolved by you and us through an arbitration administered by the Swiss Chambers’ Arbitration Institution in accordance with the Swiss Rules of International Arbitration for the time being in force, which rules are deemed to be incorporated herein by reference. The arbitral decision may be enforced in any court. The arbitration will be held in Zug, Switzerland, and may be conducted via video conference virtual/online methods if possible. The tribunal will consist of one arbitrator, and all proceedings as well as communications between the parties will be kept confidential. The language of the arbitration will be in English. Payment of all relevant fees in respect of the arbitration, including filing, administration and arbitrator fees will be in accordance with the Swiss Rules of International Arbitration.

Regardless of any applicable statute of limitations, you must bring any claims within one year after the claim arose or the time when you should have reasonably known about the claim. You also waive the right to participate in a class action lawsuit or a classwide arbitration against us.

11) About these Website Terms of Use

These Website Terms of Use cover the entire agreement between you and us regarding the Website and supersede all prior and contemporaneous understandings, agreements, representations and warranties, both written and oral, with respect to the Website.

The captions and headings identifying sections and subsections of these Website Terms of Use are for reference only and do not define, modify, expand, limit, or affect the interpretation of any provisions of these Website Terms of Use.

If any part of these Website Terms of Use is held invalid or unenforceable, that part will be severable from these Website Terms of Use, and the remaining portions will remain in full force and effect. If we fail to enforce any of these Website Terms of Use, that does not mean that we have waived our right to enforce them.

If you have any specific questions about these Website Terms of Use, please contact us at legal@free.technology.

This document is licensed under CC-BY-SA.

+ + \ No newline at end of file